diff --git a/README.md b/README.md index 39b6542..158770f 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ Run [Codex](https://github.com/openai/codex#codex-exec) from a GitHub Actions workflow while keeping tight control over the privileges available to Codex. This action handles installing the Codex CLI and configuring it with a secure proxy to the [Responses API](https://platform.openai.com/docs/api-reference/responses). -Users must provide their [`OPENAI_API_KEY`](https://platform.openai.com/api-keys) as a [GitHub Actions secret](https://docs.github.com/en/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets) to use this action. +Users must provide an API key for their chosen provider (for example, [`OPENAI_API_KEY`](https://platform.openai.com/api-keys) or `AZURE_OPENAI_API_KEY` [if using Azure for OpenAI models](#azure)) as a [GitHub Actions secret](https://docs.github.com/en/actions/how-tos/write-workflows/choose-what-workflows-do/use-secrets) to use this action. ## Example: Create Your Own Pull Request Bot @@ -90,25 +90,26 @@ jobs: ## Inputs -| Name | Description | Default | -| -------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | ----------- | -| `openai-api-key` | Secret used to start the Responses API proxy. Required when starting the proxy (key-only or key+prompt). Store it in `secrets`. | `""` | -| `prompt` | Inline prompt text. Provide this or `prompt-file`. | `""` | -| `prompt-file` | Path (relative to the repository root) of a file that contains the prompt. Provide this or `prompt`. | `""` | -| `output-file` | File where the final Codex message is written. Leave empty to skip writing a file. | `""` | -| `working-directory` | Directory passed to `codex exec --cd`. Defaults to the repository root. | `""` | -| `sandbox` | Sandbox mode for Codex. One of `workspace-write` (default), `read-only` or `danger-full-access`. | `""` | -| `codex-version` | Version of `@openai/codex` to install. | `""` | -| `codex-args` | Extra arguments forwarded to `codex exec`. Accepts JSON arrays (`["--flag", "value"]`) or shell-style strings. | `""` | -| `output-schema` | Inline schema contents written to a temp file and passed to `codex exec --output-schema`. Mutually exclusive with `output-schema-file`. | `""` | -| `output-schema-file` | Schema file forwarded to `codex exec --output-schema`. Leave empty to skip passing the option. | `""` | -| `model` | Model the agent should use. Leave empty to let Codex pick its default. | `""` | -| `effort` | Reasoning effort the agent should use. Leave empty to let Codex pick its default. | `""` | -| `codex-home` | Directory to use as the Codex CLI home (config/cache). Uses the CLI default when empty. | `""` | -| `safety-strategy` | Controls how the action restricts Codex privileges. See [Safety strategy](#safety-strategy). | `drop-sudo` | -| `codex-user` | Username to run Codex as when `safety-strategy` is `unprivileged-user`. | `""` | -| `allow-users` | List of GitHub usernames who can trigger the action in addition to those who have write access to the repo. | "" | -| `allow-bots` | Allow runs triggered by GitHub Apps/bot accounts to bypass the write-access check. | "false" | +| Name | Description | Default | +| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------- | ----------- | +| `openai-api-key` | Secret used to start the Responses API proxy when you are using OpenAI (default). Store it in `secrets`. | `""` | +| `responses-api-endpoint` | Optional Responses API endpoint override, e.g. `https://example.openai.azure.com/openai/v1/responses`. Leave empty to use the proxy's default. | `""` | +| `prompt` | Inline prompt text. Provide this or `prompt-file`. | `""` | +| `prompt-file` | Path (relative to the repository root) of a file that contains the prompt. Provide this or `prompt`. | `""` | +| `output-file` | File where the final Codex message is written. Leave empty to skip writing a file. | `""` | +| `working-directory` | Directory passed to `codex exec --cd`. Defaults to the repository root. | `""` | +| `sandbox` | Sandbox mode for Codex. One of `workspace-write` (default), `read-only` or `danger-full-access`. | `""` | +| `codex-version` | Version of `@openai/codex` to install. | `""` | +| `codex-args` | Extra arguments forwarded to `codex exec`. Accepts JSON arrays (`["--flag", "value"]`) or shell-style strings. | `""` | +| `output-schema` | Inline schema contents written to a temp file and passed to `codex exec --output-schema`. Mutually exclusive with `output-schema-file`. | `""` | +| `output-schema-file` | Schema file forwarded to `codex exec --output-schema`. Leave empty to skip passing the option. | `""` | +| `model` | Model the agent should use. Leave empty to let Codex pick its default. | `""` | +| `effort` | Reasoning effort the agent should use. Leave empty to let Codex pick its default. | `""` | +| `codex-home` | Directory to use as the Codex CLI home (config/cache). Uses the CLI default when empty. | `""` | +| `safety-strategy` | Controls how the action restricts Codex privileges. See [Safety strategy](#safety-strategy). | `drop-sudo` | +| `codex-user` | Username to run Codex as when `safety-strategy` is `unprivileged-user`. | `""` | +| `allow-users` | List of GitHub usernames who can trigger the action in addition to those who have write access to the repo. | `""` | +| `allow-bots` | Allow runs triggered by GitHub Apps/bot accounts to bypass the write-access check. | `false` | ## Safety Strategy @@ -145,10 +146,29 @@ jobs: ## Additional tips - Run this action after `actions/checkout@v5` so Codex has access to your repository contents. +- To use a non-default Responses endpoint (for example Azure OpenAI), set `responses-api-endpoint` to the provider's URL while keeping `openai-api-key` populated; the proxy will still send `Authorization: Bearer ` upstream. - If you want Codex to have access to a narrow set of privileged functionality, consider running a local MCP server that can perform these actions and configure Codex to use it. - If you need more control over the CLI invocation, pass flags through `codex-args` or create a `config.toml` in `codex-home`. - Once `openai/codex-action` is run once with `openai-api-key`, you can also call `codex` from subsequent scripts in your job. (You can omit `prompt` and `prompt-file` from the action in this case.) +## Azure + +To configure the Action to use OpenAI models hosted on Azure, pay close attention to the following: + +- The `responses-api-endpoint` must be set to the full URL (including any required query parameters) that Codex will `POST` to for a Responses API request. For Azure, this might look like `https://YOUR_PROJECT_NAME.openai.azure.com/openai/v1/responses`. Note that [unlike when customizing a model provider in Codex](https://github.com/openai/codex/blob/main/docs/config.md#azure-model-provider-example), you must include the `v1/responses` suffix to the URL yourself, if appropriate. +- The `openai-api-key` input must be a valid key that can be used with the `Authorization: Bearer ` header when making a `POST` request to your Responses API endpoint. (This is also true for the value of the [`env_key`](https://github.com/openai/codex/blob/main/docs/config.md#azure-model-provider-example) when setting a custom provider using the Codex CLI.) + +Ultimately, your configured Action might look something like the following: + +```yaml +- name: Start Codex proxy + uses: openai/codex-action@v1 + with: + openai-api-key: ${{ secrets.AZURE_OPENAI_API_KEY }} + responses-api-endpoint: "https://bolinfest-7804-resource.cognitiveservices.azure.com/openai/v1/responses" + prompt: "Debug all the things." +``` + ## License This project is licensed under the [Apache License 2.0](./LICENSE). diff --git a/action.yml b/action.yml index 2ef11ef..d83acc2 100644 --- a/action.yml +++ b/action.yml @@ -18,6 +18,10 @@ inputs: description: "OpenAI API key used by Codex." required: false default: "" + responses-api-endpoint: + description: "Optional Responses API endpoint override, e.g. https://example.openai.azure.com/openai/v1/responses. Defaults to the proxy's built-in endpoint when empty." + required: false + default: "" working-directory: description: "Working directory that Codex should use. Defaults to the repository root." required: false @@ -165,17 +169,29 @@ runs: fi # This is its own step to minimize the runtime logic that has access to the - # API key. Note we use `env -u OPENAI_API_KEY` to ensure extra copies of the - # key do not end up in the memory of the `codex-responses-api-proxy` process - # where environment variables are stored. + # API key. Note we use `env -u PROXY_API_KEY` to ensure extra copies of the + # key do not end up in the memory of the `codex-responses-api-proxy` + # process where environment variables are stored. - name: Start Responses API proxy if: ${{ inputs['openai-api-key'] != '' && steps.start_proxy.outputs.server_info_file_exists == 'false' }} env: - OPENAI_API_KEY: ${{ inputs['openai-api-key'] }} + PROXY_API_KEY: ${{ inputs['openai-api-key'] }} shell: bash run: | + upstream_url="${{ inputs['responses-api-endpoint'] }}" + + args=( + codex-responses-api-proxy + --http-shutdown + --server-info "${{ steps.derive_server_info.outputs.server_info_file }}" + ) + + if [ -n "$upstream_url" ]; then + args+=(--upstream-url "$upstream_url") + fi + ( - printenv OPENAI_API_KEY | env -u OPENAI_API_KEY codex-responses-api-proxy --http-shutdown --server-info "${{ steps.derive_server_info.outputs.server_info_file }}" + printenv PROXY_API_KEY | env -u PROXY_API_KEY "${args[@]}" ) & - name: Wait for Responses API proxy diff --git a/dist/main.js b/dist/main.js index af2857d..20a4530 100644 --- a/dist/main.js +++ b/dist/main.js @@ -27581,7 +27581,7 @@ function firstString() { var fs3 = __toESM(require("node:fs/promises")); var path3 = __toESM(require("node:path")); var os2 = __toESM(require("node:os")); -var MODEL_PROVIDER = "openai-proxy"; +var MODEL_PROVIDER = "codex-action-responses-proxy"; async function writeProxyConfig(codexHome, port, safetyStrategy) { const configPath = path3.join(codexHome, "config.toml"); let existing = ""; @@ -27599,7 +27599,7 @@ model_provider = "${MODEL_PROVIDER}" # Added by codex-action. [model_providers.${MODEL_PROVIDER}] -name = "OpenAI Proxy" +name = "Codex Action Responses Proxy" base_url = "http://127.0.0.1:${port}/v1" wire_api = "responses" `; @@ -27929,4 +27929,4 @@ undici/lib/fetch/body.js: undici/lib/websocket/frame.js: (*! ws. MIT License. Einar Otto Stangvik *) */ -//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvZXJyb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvYXJndW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvaGVscC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY29tbWFuZGVyQDE0LjAuMS9ub2RlX21vZHVsZXMvY29tbWFuZGVyL2xpYi9vcHRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvc3VnZ2VzdFNpbWlsYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvY29tbWFuZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY29tbWFuZGVyQDE0LjAuMS9ub2RlX21vZHVsZXMvY29tbWFuZGVyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytjb3JlQDEuMTEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvdXRpbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhY3Rpb25zK2NvcmVAMS4xMS4xL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL3NyYy9jb21tYW5kLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytjb3JlQDEuMTEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvZmlsZS1jb21tYW5kLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytodHRwLWNsaWVudEAyLjIuMy9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvc3JjL3Byb3h5LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS90dW5uZWxAMC4wLjYvbm9kZV9tb2R1bGVzL3R1bm5lbC9saWIvdHVubmVsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS90dW5uZWxAMC4wLjYvbm9kZV9tb2R1bGVzL3R1bm5lbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9lcnJvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3RpbWVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvZGVwcy9zdHJlYW1zZWFyY2gvc2JtaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvZGVwcy9kaWNlci9saWIvUGFydFN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL3V0aWxzL2dldExpbWl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFzdGlmeStidXNib3lAMi4xLjEvbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9kZXBzL2RpY2VyL2xpYi9IZWFkZXJQYXJzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmYXN0aWZ5K2J1c2JveUAyLjEuMS9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2RlcHMvZGljZXIvbGliL0RpY2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFzdGlmeStidXNib3lAMi4xLjEvbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdXRpbHMvZGVjb2RlVGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL3V0aWxzL3BhcnNlUGFyYW1zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFzdGlmeStidXNib3lAMi4xLjEvbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdXRpbHMvYmFzZW5hbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmYXN0aWZ5K2J1c2JveUAyLjEuMS9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2xpYi90eXBlcy9tdWx0aXBhcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmYXN0aWZ5K2J1c2JveUAyLjEuMS9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2xpYi91dGlscy9EZWNvZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFzdGlmeStidXNib3lAMi4xLjEvbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdHlwZXMvdXJsZW5jb2RlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL21haW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2dsb2JhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvd2ViaWRsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2RhdGFVUkwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvZmlsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9mb3JtZGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9ib2R5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvcmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXItYmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL2Nvbm5lY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9zcmMvbGxodHRwL3V0aWxzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvc3JjL2xsaHR0cC9jb25zdGFudHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaGFuZGxlci9SZWRpcmVjdEhhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvbGxodHRwLXdhc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbGxodHRwL2xsaHR0cF9zaW1kLXdhc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL25vZGUvZml4ZWQtcXVldWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvcG9vbC1zdGF0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9wb29sLWJhc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvcG9vbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9iYWxhbmNlZC1wb29sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvbXBhdC9kaXNwYXRjaGVyLXdlYWtyZWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL3JlYWRhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hYm9ydC1zaWduYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2FwaS1yZXF1ZXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktc3RyZWFtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktcGlwZWxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2FwaS11cGdyYWRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktY29ubmVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLWVycm9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLWludGVyY2VwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1jbGllbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLXBvb2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9wbHVyYWxpemVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svcGVuZGluZy1pbnRlcmNlcHRvcnMtZm9ybWF0dGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1hZ2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9wcm94eS1hZ2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9oYW5kbGVyL1JldHJ5SGFuZGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9nbG9iYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaGFuZGxlci9EZWNvcmF0b3JIYW5kbGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2hlYWRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvcmVzcG9uc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvcmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9maWxlYXBpL3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmlsZWFwaS9wcm9ncmVzc2V2ZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZpbGVhcGkvZW5jb2RpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmlsZWFwaS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZpbGVhcGkvZmlsZXJlYWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jYWNoZS9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NhY2hlL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY2FjaGUvY2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY2FjaGUvY2FjaGVzdG9yYWdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Nvb2tpZXMvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Nvb2tpZXMvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb29raWVzL3BhcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Nvb2tpZXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvZXZlbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC9jb25uZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC9mcmFtZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvcmVjZWl2ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L3dlYnNvY2tldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytodHRwLWNsaWVudEAyLjIuMy9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvc3JjL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytodHRwLWNsaWVudEAyLjIuMy9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvc3JjL2F1dGgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhY3Rpb25zK2NvcmVAMS4xMS4xL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL3NyYy9vaWRjLXV0aWxzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytjb3JlQDEuMTEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvc3VtbWFyeS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMrY29yZUAxLjExLjEvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvc3JjL3BhdGgtdXRpbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhY3Rpb25zK2lvQDEuMS4zL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9pby9zcmMvaW8tdXRpbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMraW9AMS4xLjMvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2lvL3NyYy9pby50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMrZXhlY0AxLjEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZXhlYy9zcmMvdG9vbHJ1bm5lci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMrZXhlY0AxLjEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZXhlYy9zcmMvZXhlYy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMrY29yZUAxLjExLjEvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvc3JjL3BsYXRmb3JtLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytjb3JlQDEuMTEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvY29yZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZmFzdC1jb250ZW50LXR5cGUtcGFyc2VAMi4wLjEvbm9kZV9tb2R1bGVzL2Zhc3QtY29udGVudC10eXBlLXBhcnNlL2luZGV4LmpzIiwgIi4uL3NyYy9tYWluLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jb21tYW5kZXJAMTQuMC4xL25vZGVfbW9kdWxlcy9jb21tYW5kZXIvZXNtLm1qcyIsICIuLi9wYWNrYWdlLmpzb24iLCAiLi4vc3JjL3JlYWRTZXJ2ZXJJbmZvLnRzIiwgIi4uL3NyYy9ydW5Db2RleEV4ZWMudHMiLCAiLi4vc3JjL2NoZWNrT3V0cHV0LnRzIiwgIi4uL3NyYy9kcm9wU3Vkby50cyIsICIuLi9zcmMvY2hlY2tBY3RvclBlcm1pc3Npb25zLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bml2ZXJzYWwtdXNlci1hZ2VudEA3LjAuMy9ub2RlX21vZHVsZXMvdW5pdmVyc2FsLXVzZXItYWdlbnQvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2JlZm9yZS1hZnRlci1ob29rQDMuMC4yL25vZGVfbW9kdWxlcy9iZWZvcmUtYWZ0ZXItaG9vay9saWIvcmVnaXN0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2JlZm9yZS1hZnRlci1ob29rQDMuMC4yL25vZGVfbW9kdWxlcy9iZWZvcmUtYWZ0ZXItaG9vay9saWIvYWRkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9iZWZvcmUtYWZ0ZXItaG9va0AzLjAuMi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svbGliL3JlbW92ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vYmVmb3JlLWFmdGVyLWhvb2tAMy4wLjIvbm9kZV9tb2R1bGVzL2JlZm9yZS1hZnRlci1ob29rL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtlbmRwb2ludEAxMC4xLjQvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2VuZHBvaW50L2Rpc3QtYnVuZGxlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtyZXF1ZXN0QDkuMi40L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9yZXF1ZXN0L2Rpc3QtYnVuZGxlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtyZXF1ZXN0LWVycm9yQDYuMS44L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9yZXF1ZXN0LWVycm9yL2Rpc3Qtc3JjL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtncmFwaHFsQDguMi4yL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9ncmFwaHFsL2Rpc3QtYnVuZGxlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCthdXRoLXRva2VuQDUuMS4yL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9hdXRoLXRva2VuL2Rpc3QtYnVuZGxlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtjb3JlQDYuMS42L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9jb3JlL2Rpc3Qtc3JjL3ZlcnNpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K2NvcmVANi4xLjYvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2NvcmUvZGlzdC1zcmMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K3BsdWdpbi1yZXF1ZXN0LWxvZ0A1LjMuMV9Ab2N0b2tpdCtjb3JlQDYuMS42L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9wbHVnaW4tcmVxdWVzdC1sb2cvZGlzdC1zcmMvdmVyc2lvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrcGx1Z2luLXJlcXVlc3QtbG9nQDUuMy4xX0BvY3Rva2l0K2NvcmVANi4xLjYvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3BsdWdpbi1yZXF1ZXN0LWxvZy9kaXN0LXNyYy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrcGx1Z2luLXBhZ2luYXRlLXJlc3RAMTEuNi4wX0BvY3Rva2l0K2NvcmVANi4xLjYvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3BsdWdpbi1wYWdpbmF0ZS1yZXN0L2Rpc3QtYnVuZGxlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtwbHVnaW4tcmVzdC1lbmRwb2ludC1tZXRob2RzQDEzLjUuMF9Ab2N0b2tpdCtjb3JlQDYuMS42L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9zcmMvdmVyc2lvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrcGx1Z2luLXJlc3QtZW5kcG9pbnQtbWV0aG9kc0AxMy41LjBfQG9jdG9raXQrY29yZUA2LjEuNi9ub2RlX21vZHVsZXMvQG9jdG9raXQvc3JjL2dlbmVyYXRlZC9lbmRwb2ludHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHNAMTMuNS4wX0BvY3Rva2l0K2NvcmVANi4xLjYvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3NyYy9lbmRwb2ludHMtdG8tbWV0aG9kcy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrcGx1Z2luLXJlc3QtZW5kcG9pbnQtbWV0aG9kc0AxMy41LjBfQG9jdG9raXQrY29yZUA2LjEuNi9ub2RlX21vZHVsZXMvQG9jdG9raXQvc3JjL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtyZXN0QDIxLjEuMS9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVzdC9kaXN0LXNyYy92ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtyZXN0QDIxLjEuMS9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVzdC9kaXN0LXNyYy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vc3RyaW5nLWFyZ3ZAMC4zLjIvbm9kZV9tb2R1bGVzL3N0cmluZy1hcmd2L2luZGV4LmpzIiwgIi4uL3NyYy93cml0ZVByb3h5Q29uZmlnLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIENvbW1hbmRlckVycm9yIGNsYXNzXG4gKi9cbmNsYXNzIENvbW1hbmRlckVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKipcbiAgICogQ29uc3RydWN0cyB0aGUgQ29tbWFuZGVyRXJyb3IgY2xhc3NcbiAgICogQHBhcmFtIHtudW1iZXJ9IGV4aXRDb2RlIHN1Z2dlc3RlZCBleGl0IGNvZGUgd2hpY2ggY291bGQgYmUgdXNlZCB3aXRoIHByb2Nlc3MuZXhpdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZSBhbiBpZCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBlcnJvclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgZXJyb3JcbiAgICovXG4gIGNvbnN0cnVjdG9yKGV4aXRDb2RlLCBjb2RlLCBtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgLy8gcHJvcGVybHkgY2FwdHVyZSBzdGFjayB0cmFjZSBpbiBOb2RlLmpzXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgdGhpcy5leGl0Q29kZSA9IGV4aXRDb2RlO1xuICAgIHRoaXMubmVzdGVkRXJyb3IgPSB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnZhbGlkQXJndW1lbnRFcnJvciBjbGFzc1xuICovXG5jbGFzcyBJbnZhbGlkQXJndW1lbnRFcnJvciBleHRlbmRzIENvbW1hbmRlckVycm9yIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgdGhlIEludmFsaWRBcmd1bWVudEVycm9yIGNsYXNzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZV0gZXhwbGFuYXRpb24gb2Ygd2h5IGFyZ3VtZW50IGlzIGludmFsaWRcbiAgICovXG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcbiAgICBzdXBlcigxLCAnY29tbWFuZGVyLmludmFsaWRBcmd1bWVudCcsIG1lc3NhZ2UpO1xuICAgIC8vIHByb3Blcmx5IGNhcHR1cmUgc3RhY2sgdHJhY2UgaW4gTm9kZS5qc1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgfVxufVxuXG5leHBvcnRzLkNvbW1hbmRlckVycm9yID0gQ29tbWFuZGVyRXJyb3I7XG5leHBvcnRzLkludmFsaWRBcmd1bWVudEVycm9yID0gSW52YWxpZEFyZ3VtZW50RXJyb3I7XG4iLCAiY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi9lcnJvci5qcycpO1xuXG5jbGFzcyBBcmd1bWVudCB7XG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGEgbmV3IGNvbW1hbmQgYXJndW1lbnQgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBhbmQgZGVzY3JpcHRpb24uXG4gICAqIFRoZSBkZWZhdWx0IGlzIHRoYXQgdGhlIGFyZ3VtZW50IGlzIHJlcXVpcmVkLCBhbmQgeW91IGNhbiBleHBsaWNpdGx5XG4gICAqIGluZGljYXRlIHRoaXMgd2l0aCA8PiBhcm91bmQgdGhlIG5hbWUuIFB1dCBbXSBhcm91bmQgdGhlIG5hbWUgZm9yIGFuIG9wdGlvbmFsIGFyZ3VtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXVxuICAgKi9cblxuICBjb25zdHJ1Y3RvcihuYW1lLCBkZXNjcmlwdGlvbikge1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbiB8fCAnJztcbiAgICB0aGlzLnZhcmlhZGljID0gZmFsc2U7XG4gICAgdGhpcy5wYXJzZUFyZyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRlZmF1bHRWYWx1ZURlc2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYXJnQ2hvaWNlcyA9IHVuZGVmaW5lZDtcblxuICAgIHN3aXRjaCAobmFtZVswXSkge1xuICAgICAgY2FzZSAnPCc6IC8vIGUuZy4gPHJlcXVpcmVkPlxuICAgICAgICB0aGlzLnJlcXVpcmVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWUuc2xpY2UoMSwgLTEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1snOiAvLyBlLmcuIFtvcHRpb25hbF1cbiAgICAgICAgdGhpcy5yZXF1aXJlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9uYW1lID0gbmFtZS5zbGljZSgxLCAtMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5yZXF1aXJlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX25hbWUgPSBuYW1lO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbmFtZS5lbmRzV2l0aCgnLi4uJykpIHtcbiAgICAgIHRoaXMudmFyaWFkaWMgPSB0cnVlO1xuICAgICAgdGhpcy5fbmFtZSA9IHRoaXMuX25hbWUuc2xpY2UoMCwgLTMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYXJndW1lbnQgbmFtZS5cbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuICBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYWNrYWdlXG4gICAqL1xuXG4gIF9jb2xsZWN0VmFsdWUodmFsdWUsIHByZXZpb3VzKSB7XG4gICAgaWYgKHByZXZpb3VzID09PSB0aGlzLmRlZmF1bHRWYWx1ZSB8fCAhQXJyYXkuaXNBcnJheShwcmV2aW91cykpIHtcbiAgICAgIHJldHVybiBbdmFsdWVdO1xuICAgIH1cblxuICAgIHByZXZpb3VzLnB1c2godmFsdWUpO1xuICAgIHJldHVybiBwcmV2aW91cztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGRlZmF1bHQgdmFsdWUsIGFuZCBvcHRpb25hbGx5IHN1cHBseSB0aGUgZGVzY3JpcHRpb24gdG8gYmUgZGlzcGxheWVkIGluIHRoZSBoZWxwLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dXG4gICAqIEByZXR1cm4ge0FyZ3VtZW50fVxuICAgKi9cblxuICBkZWZhdWx0KHZhbHVlLCBkZXNjcmlwdGlvbikge1xuICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5kZWZhdWx0VmFsdWVEZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY3VzdG9tIGhhbmRsZXIgZm9yIHByb2Nlc3NpbmcgQ0xJIGNvbW1hbmQgYXJndW1lbnRzIGludG8gYXJndW1lbnQgdmFsdWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZm5dXG4gICAqIEByZXR1cm4ge0FyZ3VtZW50fVxuICAgKi9cblxuICBhcmdQYXJzZXIoZm4pIHtcbiAgICB0aGlzLnBhcnNlQXJnID0gZm47XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogT25seSBhbGxvdyBhcmd1bWVudCB2YWx1ZSB0byBiZSBvbmUgb2YgY2hvaWNlcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gdmFsdWVzXG4gICAqIEByZXR1cm4ge0FyZ3VtZW50fVxuICAgKi9cblxuICBjaG9pY2VzKHZhbHVlcykge1xuICAgIHRoaXMuYXJnQ2hvaWNlcyA9IHZhbHVlcy5zbGljZSgpO1xuICAgIHRoaXMucGFyc2VBcmcgPSAoYXJnLCBwcmV2aW91cykgPT4ge1xuICAgICAgaWYgKCF0aGlzLmFyZ0Nob2ljZXMuaW5jbHVkZXMoYXJnKSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgICAgYEFsbG93ZWQgY2hvaWNlcyBhcmUgJHt0aGlzLmFyZ0Nob2ljZXMuam9pbignLCAnKX0uYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnZhcmlhZGljKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2xsZWN0VmFsdWUoYXJnLCBwcmV2aW91cyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJnO1xuICAgIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBhcmd1bWVudCByZXF1aXJlZC5cbiAgICpcbiAgICogQHJldHVybnMge0FyZ3VtZW50fVxuICAgKi9cbiAgYXJnUmVxdWlyZWQoKSB7XG4gICAgdGhpcy5yZXF1aXJlZCA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBhcmd1bWVudCBvcHRpb25hbC5cbiAgICpcbiAgICogQHJldHVybnMge0FyZ3VtZW50fVxuICAgKi9cbiAgYXJnT3B0aW9uYWwoKSB7XG4gICAgdGhpcy5yZXF1aXJlZCA9IGZhbHNlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbi8qKlxuICogVGFrZXMgYW4gYXJndW1lbnQgYW5kIHJldHVybnMgaXRzIGh1bWFuIHJlYWRhYmxlIGVxdWl2YWxlbnQgZm9yIGhlbHAgdXNhZ2UuXG4gKlxuICogQHBhcmFtIHtBcmd1bWVudH0gYXJnXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGh1bWFuUmVhZGFibGVBcmdOYW1lKGFyZykge1xuICBjb25zdCBuYW1lT3V0cHV0ID0gYXJnLm5hbWUoKSArIChhcmcudmFyaWFkaWMgPT09IHRydWUgPyAnLi4uJyA6ICcnKTtcblxuICByZXR1cm4gYXJnLnJlcXVpcmVkID8gJzwnICsgbmFtZU91dHB1dCArICc+JyA6ICdbJyArIG5hbWVPdXRwdXQgKyAnXSc7XG59XG5cbmV4cG9ydHMuQXJndW1lbnQgPSBBcmd1bWVudDtcbmV4cG9ydHMuaHVtYW5SZWFkYWJsZUFyZ05hbWUgPSBodW1hblJlYWRhYmxlQXJnTmFtZTtcbiIsICJjb25zdCB7IGh1bWFuUmVhZGFibGVBcmdOYW1lIH0gPSByZXF1aXJlKCcuL2FyZ3VtZW50LmpzJyk7XG5cbi8qKlxuICogVHlwZVNjcmlwdCBpbXBvcnQgdHlwZXMgZm9yIEpTRG9jLCB1c2VkIGJ5IFZpc3VhbCBTdHVkaW8gQ29kZSBJbnRlbGxpU2Vuc2UgYW5kIGBucG0gcnVuIHR5cGVzY3JpcHQtY2hlY2tKU2BcbiAqIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rL2pzZG9jLXN1cHBvcnRlZC10eXBlcy5odG1sI2ltcG9ydC10eXBlc1xuICogQHR5cGVkZWYgeyBpbXBvcnQoXCIuL2FyZ3VtZW50LmpzXCIpLkFyZ3VtZW50IH0gQXJndW1lbnRcbiAqIEB0eXBlZGVmIHsgaW1wb3J0KFwiLi9jb21tYW5kLmpzXCIpLkNvbW1hbmQgfSBDb21tYW5kXG4gKiBAdHlwZWRlZiB7IGltcG9ydChcIi4vb3B0aW9uLmpzXCIpLk9wdGlvbiB9IE9wdGlvblxuICovXG5cbi8vIEFsdGhvdWdoIHRoaXMgaXMgYSBjbGFzcywgbWV0aG9kcyBhcmUgc3RhdGljIGluIHN0eWxlIHRvIGFsbG93IG92ZXJyaWRlIHVzaW5nIHN1YmNsYXNzIG9yIGp1c3QgZnVuY3Rpb25zLlxuY2xhc3MgSGVscCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaGVscFdpZHRoID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubWluV2lkdGhUb1dyYXAgPSA0MDtcbiAgICB0aGlzLnNvcnRTdWJjb21tYW5kcyA9IGZhbHNlO1xuICAgIHRoaXMuc29ydE9wdGlvbnMgPSBmYWxzZTtcbiAgICB0aGlzLnNob3dHbG9iYWxPcHRpb25zID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogcHJlcGFyZUNvbnRleHQgaXMgY2FsbGVkIGJ5IENvbW1hbmRlciBhZnRlciBhcHBseWluZyBvdmVycmlkZXMgZnJvbSBgQ29tbWFuZC5jb25maWd1cmVIZWxwKClgXG4gICAqIGFuZCBqdXN0IGJlZm9yZSBjYWxsaW5nIGBmb3JtYXRIZWxwKClgLlxuICAgKlxuICAgKiBDb21tYW5kZXIganVzdCB1c2VzIHRoZSBoZWxwV2lkdGggYW5kIHRoZSByZXN0IGlzIHByb3ZpZGVkIGZvciBvcHRpb25hbCB1c2UgYnkgbW9yZSBjb21wbGV4IHN1YmNsYXNzZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7eyBlcnJvcj86IGJvb2xlYW4sIGhlbHBXaWR0aD86IG51bWJlciwgb3V0cHV0SGFzQ29sb3JzPzogYm9vbGVhbiB9fSBjb250ZXh0T3B0aW9uc1xuICAgKi9cbiAgcHJlcGFyZUNvbnRleHQoY29udGV4dE9wdGlvbnMpIHtcbiAgICB0aGlzLmhlbHBXaWR0aCA9IHRoaXMuaGVscFdpZHRoID8/IGNvbnRleHRPcHRpb25zLmhlbHBXaWR0aCA/PyA4MDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYW4gYXJyYXkgb2YgdGhlIHZpc2libGUgc3ViY29tbWFuZHMuIEluY2x1ZGVzIGEgcGxhY2Vob2xkZXIgZm9yIHRoZSBpbXBsaWNpdCBoZWxwIGNvbW1hbmQsIGlmIHRoZXJlIGlzIG9uZS5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHJldHVybnMge0NvbW1hbmRbXX1cbiAgICovXG5cbiAgdmlzaWJsZUNvbW1hbmRzKGNtZCkge1xuICAgIGNvbnN0IHZpc2libGVDb21tYW5kcyA9IGNtZC5jb21tYW5kcy5maWx0ZXIoKGNtZCkgPT4gIWNtZC5faGlkZGVuKTtcbiAgICBjb25zdCBoZWxwQ29tbWFuZCA9IGNtZC5fZ2V0SGVscENvbW1hbmQoKTtcbiAgICBpZiAoaGVscENvbW1hbmQgJiYgIWhlbHBDb21tYW5kLl9oaWRkZW4pIHtcbiAgICAgIHZpc2libGVDb21tYW5kcy5wdXNoKGhlbHBDb21tYW5kKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc29ydFN1YmNvbW1hbmRzKSB7XG4gICAgICB2aXNpYmxlQ29tbWFuZHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAvLyBAdHMtaWdub3JlOiBiZWNhdXNlIG92ZXJsb2FkZWQgcmV0dXJuIHR5cGVcbiAgICAgICAgcmV0dXJuIGEubmFtZSgpLmxvY2FsZUNvbXBhcmUoYi5uYW1lKCkpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB2aXNpYmxlQ29tbWFuZHM7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGFyZSBvcHRpb25zIGZvciBzb3J0LlxuICAgKlxuICAgKiBAcGFyYW0ge09wdGlvbn0gYVxuICAgKiBAcGFyYW0ge09wdGlvbn0gYlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgY29tcGFyZU9wdGlvbnMoYSwgYikge1xuICAgIGNvbnN0IGdldFNvcnRLZXkgPSAob3B0aW9uKSA9PiB7XG4gICAgICAvLyBXWVNJV1lHIGZvciBvcmRlciBkaXNwbGF5ZWQgaW4gaGVscC4gU2hvcnQgdXNlZCBmb3IgY29tcGFyaXNvbiBpZiBwcmVzZW50LiBObyBzcGVjaWFsIGhhbmRsaW5nIGZvciBuZWdhdGVkLlxuICAgICAgcmV0dXJuIG9wdGlvbi5zaG9ydFxuICAgICAgICA/IG9wdGlvbi5zaG9ydC5yZXBsYWNlKC9eLS8sICcnKVxuICAgICAgICA6IG9wdGlvbi5sb25nLnJlcGxhY2UoL14tLS8sICcnKTtcbiAgICB9O1xuICAgIHJldHVybiBnZXRTb3J0S2V5KGEpLmxvY2FsZUNvbXBhcmUoZ2V0U29ydEtleShiKSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIGFycmF5IG9mIHRoZSB2aXNpYmxlIG9wdGlvbnMuIEluY2x1ZGVzIGEgcGxhY2Vob2xkZXIgZm9yIHRoZSBpbXBsaWNpdCBoZWxwIG9wdGlvbiwgaWYgdGhlcmUgaXMgb25lLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcmV0dXJucyB7T3B0aW9uW119XG4gICAqL1xuXG4gIHZpc2libGVPcHRpb25zKGNtZCkge1xuICAgIGNvbnN0IHZpc2libGVPcHRpb25zID0gY21kLm9wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+ICFvcHRpb24uaGlkZGVuKTtcbiAgICAvLyBCdWlsdC1pbiBoZWxwIG9wdGlvbi5cbiAgICBjb25zdCBoZWxwT3B0aW9uID0gY21kLl9nZXRIZWxwT3B0aW9uKCk7XG4gICAgaWYgKGhlbHBPcHRpb24gJiYgIWhlbHBPcHRpb24uaGlkZGVuKSB7XG4gICAgICAvLyBBdXRvbWF0aWNhbGx5IGhpZGUgY29uZmxpY3RpbmcgZmxhZ3MuIEJpdCBkdWJpb3VzIGJ1dCBhIGhpc3RvcmljYWwgYmVoYXZpb3VyIHRoYXQgaXMgY29udmVuaWVudCBmb3Igc2luZ2xlLWNvbW1hbmQgcHJvZ3JhbXMuXG4gICAgICBjb25zdCByZW1vdmVTaG9ydCA9IGhlbHBPcHRpb24uc2hvcnQgJiYgY21kLl9maW5kT3B0aW9uKGhlbHBPcHRpb24uc2hvcnQpO1xuICAgICAgY29uc3QgcmVtb3ZlTG9uZyA9IGhlbHBPcHRpb24ubG9uZyAmJiBjbWQuX2ZpbmRPcHRpb24oaGVscE9wdGlvbi5sb25nKTtcbiAgICAgIGlmICghcmVtb3ZlU2hvcnQgJiYgIXJlbW92ZUxvbmcpIHtcbiAgICAgICAgdmlzaWJsZU9wdGlvbnMucHVzaChoZWxwT3B0aW9uKTsgLy8gbm8gY2hhbmdlcyBuZWVkZWRcbiAgICAgIH0gZWxzZSBpZiAoaGVscE9wdGlvbi5sb25nICYmICFyZW1vdmVMb25nKSB7XG4gICAgICAgIHZpc2libGVPcHRpb25zLnB1c2goXG4gICAgICAgICAgY21kLmNyZWF0ZU9wdGlvbihoZWxwT3B0aW9uLmxvbmcsIGhlbHBPcHRpb24uZGVzY3JpcHRpb24pLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChoZWxwT3B0aW9uLnNob3J0ICYmICFyZW1vdmVTaG9ydCkge1xuICAgICAgICB2aXNpYmxlT3B0aW9ucy5wdXNoKFxuICAgICAgICAgIGNtZC5jcmVhdGVPcHRpb24oaGVscE9wdGlvbi5zaG9ydCwgaGVscE9wdGlvbi5kZXNjcmlwdGlvbiksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnNvcnRPcHRpb25zKSB7XG4gICAgICB2aXNpYmxlT3B0aW9ucy5zb3J0KHRoaXMuY29tcGFyZU9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gdmlzaWJsZU9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIGFycmF5IG9mIHRoZSB2aXNpYmxlIGdsb2JhbCBvcHRpb25zLiAoTm90IGluY2x1ZGluZyBoZWxwLilcbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHJldHVybnMge09wdGlvbltdfVxuICAgKi9cblxuICB2aXNpYmxlR2xvYmFsT3B0aW9ucyhjbWQpIHtcbiAgICBpZiAoIXRoaXMuc2hvd0dsb2JhbE9wdGlvbnMpIHJldHVybiBbXTtcblxuICAgIGNvbnN0IGdsb2JhbE9wdGlvbnMgPSBbXTtcbiAgICBmb3IgKFxuICAgICAgbGV0IGFuY2VzdG9yQ21kID0gY21kLnBhcmVudDtcbiAgICAgIGFuY2VzdG9yQ21kO1xuICAgICAgYW5jZXN0b3JDbWQgPSBhbmNlc3RvckNtZC5wYXJlbnRcbiAgICApIHtcbiAgICAgIGNvbnN0IHZpc2libGVPcHRpb25zID0gYW5jZXN0b3JDbWQub3B0aW9ucy5maWx0ZXIoXG4gICAgICAgIChvcHRpb24pID0+ICFvcHRpb24uaGlkZGVuLFxuICAgICAgKTtcbiAgICAgIGdsb2JhbE9wdGlvbnMucHVzaCguLi52aXNpYmxlT3B0aW9ucyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNvcnRPcHRpb25zKSB7XG4gICAgICBnbG9iYWxPcHRpb25zLnNvcnQodGhpcy5jb21wYXJlT3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiBnbG9iYWxPcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBhcnJheSBvZiB0aGUgYXJndW1lbnRzIGlmIGFueSBoYXZlIGEgZGVzY3JpcHRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEByZXR1cm5zIHtBcmd1bWVudFtdfVxuICAgKi9cblxuICB2aXNpYmxlQXJndW1lbnRzKGNtZCkge1xuICAgIC8vIFNpZGUgZWZmZWN0ISBBcHBseSB0aGUgbGVnYWN5IGRlc2NyaXB0aW9ucyBiZWZvcmUgdGhlIGFyZ3VtZW50cyBhcmUgZGlzcGxheWVkLlxuICAgIGlmIChjbWQuX2FyZ3NEZXNjcmlwdGlvbikge1xuICAgICAgY21kLnJlZ2lzdGVyZWRBcmd1bWVudHMuZm9yRWFjaCgoYXJndW1lbnQpID0+IHtcbiAgICAgICAgYXJndW1lbnQuZGVzY3JpcHRpb24gPVxuICAgICAgICAgIGFyZ3VtZW50LmRlc2NyaXB0aW9uIHx8IGNtZC5fYXJnc0Rlc2NyaXB0aW9uW2FyZ3VtZW50Lm5hbWUoKV0gfHwgJyc7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSBhcmUgYW55IGFyZ3VtZW50cyB3aXRoIGEgZGVzY3JpcHRpb24gdGhlbiByZXR1cm4gYWxsIHRoZSBhcmd1bWVudHMuXG4gICAgaWYgKGNtZC5yZWdpc3RlcmVkQXJndW1lbnRzLmZpbmQoKGFyZ3VtZW50KSA9PiBhcmd1bWVudC5kZXNjcmlwdGlvbikpIHtcbiAgICAgIHJldHVybiBjbWQucmVnaXN0ZXJlZEFyZ3VtZW50cztcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY29tbWFuZCB0ZXJtIHRvIHNob3cgaW4gdGhlIGxpc3Qgb2Ygc3ViY29tbWFuZHMuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuXG4gIHN1YmNvbW1hbmRUZXJtKGNtZCkge1xuICAgIC8vIExlZ2FjeS4gSWdub3JlcyBjdXN0b20gdXNhZ2Ugc3RyaW5nLCBhbmQgbmVzdGVkIGNvbW1hbmRzLlxuICAgIGNvbnN0IGFyZ3MgPSBjbWQucmVnaXN0ZXJlZEFyZ3VtZW50c1xuICAgICAgLm1hcCgoYXJnKSA9PiBodW1hblJlYWRhYmxlQXJnTmFtZShhcmcpKVxuICAgICAgLmpvaW4oJyAnKTtcbiAgICByZXR1cm4gKFxuICAgICAgY21kLl9uYW1lICtcbiAgICAgIChjbWQuX2FsaWFzZXNbMF0gPyAnfCcgKyBjbWQuX2FsaWFzZXNbMF0gOiAnJykgK1xuICAgICAgKGNtZC5vcHRpb25zLmxlbmd0aCA/ICcgW29wdGlvbnNdJyA6ICcnKSArIC8vIHNpbXBsaXN0aWMgY2hlY2sgZm9yIG5vbi1oZWxwIG9wdGlvblxuICAgICAgKGFyZ3MgPyAnICcgKyBhcmdzIDogJycpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG9wdGlvbiB0ZXJtIHRvIHNob3cgaW4gdGhlIGxpc3Qgb2Ygb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtPcHRpb259IG9wdGlvblxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cblxuICBvcHRpb25UZXJtKG9wdGlvbikge1xuICAgIHJldHVybiBvcHRpb24uZmxhZ3M7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBhcmd1bWVudCB0ZXJtIHRvIHNob3cgaW4gdGhlIGxpc3Qgb2YgYXJndW1lbnRzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FyZ3VtZW50fSBhcmd1bWVudFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cblxuICBhcmd1bWVudFRlcm0oYXJndW1lbnQpIHtcbiAgICByZXR1cm4gYXJndW1lbnQubmFtZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbG9uZ2VzdCBjb21tYW5kIHRlcm0gbGVuZ3RoLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcGFyYW0ge0hlbHB9IGhlbHBlclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cblxuICBsb25nZXN0U3ViY29tbWFuZFRlcm1MZW5ndGgoY21kLCBoZWxwZXIpIHtcbiAgICByZXR1cm4gaGVscGVyLnZpc2libGVDb21tYW5kcyhjbWQpLnJlZHVjZSgobWF4LCBjb21tYW5kKSA9PiB7XG4gICAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICAgIG1heCxcbiAgICAgICAgdGhpcy5kaXNwbGF5V2lkdGgoXG4gICAgICAgICAgaGVscGVyLnN0eWxlU3ViY29tbWFuZFRlcm0oaGVscGVyLnN1YmNvbW1hbmRUZXJtKGNvbW1hbmQpKSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsb25nZXN0IG9wdGlvbiB0ZXJtIGxlbmd0aC5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHBhcmFtIHtIZWxwfSBoZWxwZXJcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG5cbiAgbG9uZ2VzdE9wdGlvblRlcm1MZW5ndGgoY21kLCBoZWxwZXIpIHtcbiAgICByZXR1cm4gaGVscGVyLnZpc2libGVPcHRpb25zKGNtZCkucmVkdWNlKChtYXgsIG9wdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgICBtYXgsXG4gICAgICAgIHRoaXMuZGlzcGxheVdpZHRoKGhlbHBlci5zdHlsZU9wdGlvblRlcm0oaGVscGVyLm9wdGlvblRlcm0ob3B0aW9uKSkpLFxuICAgICAgKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxvbmdlc3QgZ2xvYmFsIG9wdGlvbiB0ZXJtIGxlbmd0aC5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHBhcmFtIHtIZWxwfSBoZWxwZXJcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG5cbiAgbG9uZ2VzdEdsb2JhbE9wdGlvblRlcm1MZW5ndGgoY21kLCBoZWxwZXIpIHtcbiAgICByZXR1cm4gaGVscGVyLnZpc2libGVHbG9iYWxPcHRpb25zKGNtZCkucmVkdWNlKChtYXgsIG9wdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgICBtYXgsXG4gICAgICAgIHRoaXMuZGlzcGxheVdpZHRoKGhlbHBlci5zdHlsZU9wdGlvblRlcm0oaGVscGVyLm9wdGlvblRlcm0ob3B0aW9uKSkpLFxuICAgICAgKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxvbmdlc3QgYXJndW1lbnQgdGVybSBsZW5ndGguXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEBwYXJhbSB7SGVscH0gaGVscGVyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuXG4gIGxvbmdlc3RBcmd1bWVudFRlcm1MZW5ndGgoY21kLCBoZWxwZXIpIHtcbiAgICByZXR1cm4gaGVscGVyLnZpc2libGVBcmd1bWVudHMoY21kKS5yZWR1Y2UoKG1heCwgYXJndW1lbnQpID0+IHtcbiAgICAgIHJldHVybiBNYXRoLm1heChcbiAgICAgICAgbWF4LFxuICAgICAgICB0aGlzLmRpc3BsYXlXaWR0aChcbiAgICAgICAgICBoZWxwZXIuc3R5bGVBcmd1bWVudFRlcm0oaGVscGVyLmFyZ3VtZW50VGVybShhcmd1bWVudCkpLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGNvbW1hbmQgdXNhZ2UgdG8gYmUgZGlzcGxheWVkIGF0IHRoZSB0b3Agb2YgdGhlIGJ1aWx0LWluIGhlbHAuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuXG4gIGNvbW1hbmRVc2FnZShjbWQpIHtcbiAgICAvLyBVc2FnZVxuICAgIGxldCBjbWROYW1lID0gY21kLl9uYW1lO1xuICAgIGlmIChjbWQuX2FsaWFzZXNbMF0pIHtcbiAgICAgIGNtZE5hbWUgPSBjbWROYW1lICsgJ3wnICsgY21kLl9hbGlhc2VzWzBdO1xuICAgIH1cbiAgICBsZXQgYW5jZXN0b3JDbWROYW1lcyA9ICcnO1xuICAgIGZvciAoXG4gICAgICBsZXQgYW5jZXN0b3JDbWQgPSBjbWQucGFyZW50O1xuICAgICAgYW5jZXN0b3JDbWQ7XG4gICAgICBhbmNlc3RvckNtZCA9IGFuY2VzdG9yQ21kLnBhcmVudFxuICAgICkge1xuICAgICAgYW5jZXN0b3JDbWROYW1lcyA9IGFuY2VzdG9yQ21kLm5hbWUoKSArICcgJyArIGFuY2VzdG9yQ21kTmFtZXM7XG4gICAgfVxuICAgIHJldHVybiBhbmNlc3RvckNtZE5hbWVzICsgY21kTmFtZSArICcgJyArIGNtZC51c2FnZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBjb21tYW5kLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cblxuICBjb21tYW5kRGVzY3JpcHRpb24oY21kKSB7XG4gICAgLy8gQHRzLWlnbm9yZTogYmVjYXVzZSBvdmVybG9hZGVkIHJldHVybiB0eXBlXG4gICAgcmV0dXJuIGNtZC5kZXNjcmlwdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc3ViY29tbWFuZCBzdW1tYXJ5IHRvIHNob3cgaW4gdGhlIGxpc3Qgb2Ygc3ViY29tbWFuZHMuXG4gICAqIChGYWxsYmFjayB0byBkZXNjcmlwdGlvbiBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuKVxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cblxuICBzdWJjb21tYW5kRGVzY3JpcHRpb24oY21kKSB7XG4gICAgLy8gQHRzLWlnbm9yZTogYmVjYXVzZSBvdmVybG9hZGVkIHJldHVybiB0eXBlXG4gICAgcmV0dXJuIGNtZC5zdW1tYXJ5KCkgfHwgY21kLmRlc2NyaXB0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBvcHRpb24gZGVzY3JpcHRpb24gdG8gc2hvdyBpbiB0aGUgbGlzdCBvZiBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge09wdGlvbn0gb3B0aW9uXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cbiAgb3B0aW9uRGVzY3JpcHRpb24ob3B0aW9uKSB7XG4gICAgY29uc3QgZXh0cmFJbmZvID0gW107XG5cbiAgICBpZiAob3B0aW9uLmFyZ0Nob2ljZXMpIHtcbiAgICAgIGV4dHJhSW5mby5wdXNoKFxuICAgICAgICAvLyB1c2Ugc3RyaW5naWZ5IHRvIG1hdGNoIHRoZSBkaXNwbGF5IG9mIHRoZSBkZWZhdWx0IHZhbHVlXG4gICAgICAgIGBjaG9pY2VzOiAke29wdGlvbi5hcmdDaG9pY2VzLm1hcCgoY2hvaWNlKSA9PiBKU09OLnN0cmluZ2lmeShjaG9pY2UpKS5qb2luKCcsICcpfWAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAob3B0aW9uLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBkZWZhdWx0IGZvciBib29sZWFuIGFuZCBuZWdhdGVkIG1vcmUgZm9yIHByb2dyYW1tZXIgdGhhbiBlbmQgdXNlcixcbiAgICAgIC8vIGJ1dCBzaG93IHRydWUvZmFsc2UgZm9yIGJvb2xlYW4gb3B0aW9uIGFzIG1heSBiZSBmb3IgaGFuZC1yb2xsZWQgZW52IG9yIGNvbmZpZyBwcm9jZXNzaW5nLlxuICAgICAgY29uc3Qgc2hvd0RlZmF1bHQgPVxuICAgICAgICBvcHRpb24ucmVxdWlyZWQgfHxcbiAgICAgICAgb3B0aW9uLm9wdGlvbmFsIHx8XG4gICAgICAgIChvcHRpb24uaXNCb29sZWFuKCkgJiYgdHlwZW9mIG9wdGlvbi5kZWZhdWx0VmFsdWUgPT09ICdib29sZWFuJyk7XG4gICAgICBpZiAoc2hvd0RlZmF1bHQpIHtcbiAgICAgICAgZXh0cmFJbmZvLnB1c2goXG4gICAgICAgICAgYGRlZmF1bHQ6ICR7b3B0aW9uLmRlZmF1bHRWYWx1ZURlc2NyaXB0aW9uIHx8IEpTT04uc3RyaW5naWZ5KG9wdGlvbi5kZWZhdWx0VmFsdWUpfWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIHByZXNldCBmb3IgYm9vbGVhbiBhbmQgbmVnYXRlZCBhcmUgbW9yZSBmb3IgcHJvZ3JhbW1lciB0aGFuIGVuZCB1c2VyXG4gICAgaWYgKG9wdGlvbi5wcmVzZXRBcmcgIT09IHVuZGVmaW5lZCAmJiBvcHRpb24ub3B0aW9uYWwpIHtcbiAgICAgIGV4dHJhSW5mby5wdXNoKGBwcmVzZXQ6ICR7SlNPTi5zdHJpbmdpZnkob3B0aW9uLnByZXNldEFyZyl9YCk7XG4gICAgfVxuICAgIGlmIChvcHRpb24uZW52VmFyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGV4dHJhSW5mby5wdXNoKGBlbnY6ICR7b3B0aW9uLmVudlZhcn1gKTtcbiAgICB9XG4gICAgaWYgKGV4dHJhSW5mby5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBleHRyYURlc2NyaXB0aW9uID0gYCgke2V4dHJhSW5mby5qb2luKCcsICcpfSlgO1xuICAgICAgaWYgKG9wdGlvbi5kZXNjcmlwdGlvbikge1xuICAgICAgICByZXR1cm4gYCR7b3B0aW9uLmRlc2NyaXB0aW9ufSAke2V4dHJhRGVzY3JpcHRpb259YDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBleHRyYURlc2NyaXB0aW9uO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRpb24uZGVzY3JpcHRpb247XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBhcmd1bWVudCBkZXNjcmlwdGlvbiB0byBzaG93IGluIHRoZSBsaXN0IG9mIGFyZ3VtZW50cy5cbiAgICpcbiAgICogQHBhcmFtIHtBcmd1bWVudH0gYXJndW1lbnRcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuICBhcmd1bWVudERlc2NyaXB0aW9uKGFyZ3VtZW50KSB7XG4gICAgY29uc3QgZXh0cmFJbmZvID0gW107XG4gICAgaWYgKGFyZ3VtZW50LmFyZ0Nob2ljZXMpIHtcbiAgICAgIGV4dHJhSW5mby5wdXNoKFxuICAgICAgICAvLyB1c2Ugc3RyaW5naWZ5IHRvIG1hdGNoIHRoZSBkaXNwbGF5IG9mIHRoZSBkZWZhdWx0IHZhbHVlXG4gICAgICAgIGBjaG9pY2VzOiAke2FyZ3VtZW50LmFyZ0Nob2ljZXMubWFwKChjaG9pY2UpID0+IEpTT04uc3RyaW5naWZ5KGNob2ljZSkpLmpvaW4oJywgJyl9YCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhcmd1bWVudC5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZXh0cmFJbmZvLnB1c2goXG4gICAgICAgIGBkZWZhdWx0OiAke2FyZ3VtZW50LmRlZmF1bHRWYWx1ZURlc2NyaXB0aW9uIHx8IEpTT04uc3RyaW5naWZ5KGFyZ3VtZW50LmRlZmF1bHRWYWx1ZSl9YCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChleHRyYUluZm8ubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZXh0cmFEZXNjcmlwdGlvbiA9IGAoJHtleHRyYUluZm8uam9pbignLCAnKX0pYDtcbiAgICAgIGlmIChhcmd1bWVudC5kZXNjcmlwdGlvbikge1xuICAgICAgICByZXR1cm4gYCR7YXJndW1lbnQuZGVzY3JpcHRpb259ICR7ZXh0cmFEZXNjcmlwdGlvbn1gO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV4dHJhRGVzY3JpcHRpb247XG4gICAgfVxuICAgIHJldHVybiBhcmd1bWVudC5kZXNjcmlwdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXQgYSBsaXN0IG9mIGl0ZW1zLCBnaXZlbiBhIGhlYWRpbmcgYW5kIGFuIGFycmF5IG9mIGZvcm1hdHRlZCBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGhlYWRpbmdcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gaXRlbXNcbiAgICogQHBhcmFtIHtIZWxwfSBoZWxwZXJcbiAgICogQHJldHVybnMgc3RyaW5nW11cbiAgICovXG4gIGZvcm1hdEl0ZW1MaXN0KGhlYWRpbmcsIGl0ZW1zLCBoZWxwZXIpIHtcbiAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSByZXR1cm4gW107XG5cbiAgICByZXR1cm4gW2hlbHBlci5zdHlsZVRpdGxlKGhlYWRpbmcpLCAuLi5pdGVtcywgJyddO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyb3VwIGl0ZW1zIGJ5IHRoZWlyIGhlbHAgZ3JvdXAgaGVhZGluZy5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kW10gfCBPcHRpb25bXX0gdW5zb3J0ZWRJdGVtc1xuICAgKiBAcGFyYW0ge0NvbW1hbmRbXSB8IE9wdGlvbltdfSB2aXNpYmxlSXRlbXNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZ2V0R3JvdXBcbiAgICogQHJldHVybnMge01hcDxzdHJpbmcsIENvbW1hbmRbXSB8IE9wdGlvbltdPn1cbiAgICovXG4gIGdyb3VwSXRlbXModW5zb3J0ZWRJdGVtcywgdmlzaWJsZUl0ZW1zLCBnZXRHcm91cCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXAoKTtcbiAgICAvLyBBZGQgZ3JvdXBzIGluIG9yZGVyIG9mIGFwcGVhcmFuY2UgaW4gdW5zb3J0ZWRJdGVtcy5cbiAgICB1bnNvcnRlZEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGdyb3VwID0gZ2V0R3JvdXAoaXRlbSk7XG4gICAgICBpZiAoIXJlc3VsdC5oYXMoZ3JvdXApKSByZXN1bHQuc2V0KGdyb3VwLCBbXSk7XG4gICAgfSk7XG4gICAgLy8gQWRkIGl0ZW1zIGluIG9yZGVyIG9mIGFwcGVhcmFuY2UgaW4gdmlzaWJsZUl0ZW1zLlxuICAgIHZpc2libGVJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBjb25zdCBncm91cCA9IGdldEdyb3VwKGl0ZW0pO1xuICAgICAgaWYgKCFyZXN1bHQuaGFzKGdyb3VwKSkge1xuICAgICAgICByZXN1bHQuc2V0KGdyb3VwLCBbXSk7XG4gICAgICB9XG4gICAgICByZXN1bHQuZ2V0KGdyb3VwKS5wdXNoKGl0ZW0pO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgdGhlIGJ1aWx0LWluIGhlbHAgdGV4dC5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHBhcmFtIHtIZWxwfSBoZWxwZXJcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG5cbiAgZm9ybWF0SGVscChjbWQsIGhlbHBlcikge1xuICAgIGNvbnN0IHRlcm1XaWR0aCA9IGhlbHBlci5wYWRXaWR0aChjbWQsIGhlbHBlcik7XG4gICAgY29uc3QgaGVscFdpZHRoID0gaGVscGVyLmhlbHBXaWR0aCA/PyA4MDsgLy8gaW4gY2FzZSBwcmVwYXJlQ29udGV4dCgpIHdhcyBub3QgY2FsbGVkXG5cbiAgICBmdW5jdGlvbiBjYWxsRm9ybWF0SXRlbSh0ZXJtLCBkZXNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIGhlbHBlci5mb3JtYXRJdGVtKHRlcm0sIHRlcm1XaWR0aCwgZGVzY3JpcHRpb24sIGhlbHBlcik7XG4gICAgfVxuXG4gICAgLy8gVXNhZ2VcbiAgICBsZXQgb3V0cHV0ID0gW1xuICAgICAgYCR7aGVscGVyLnN0eWxlVGl0bGUoJ1VzYWdlOicpfSAke2hlbHBlci5zdHlsZVVzYWdlKGhlbHBlci5jb21tYW5kVXNhZ2UoY21kKSl9YCxcbiAgICAgICcnLFxuICAgIF07XG5cbiAgICAvLyBEZXNjcmlwdGlvblxuICAgIGNvbnN0IGNvbW1hbmREZXNjcmlwdGlvbiA9IGhlbHBlci5jb21tYW5kRGVzY3JpcHRpb24oY21kKTtcbiAgICBpZiAoY29tbWFuZERlc2NyaXB0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgIG91dHB1dCA9IG91dHB1dC5jb25jYXQoW1xuICAgICAgICBoZWxwZXIuYm94V3JhcChcbiAgICAgICAgICBoZWxwZXIuc3R5bGVDb21tYW5kRGVzY3JpcHRpb24oY29tbWFuZERlc2NyaXB0aW9uKSxcbiAgICAgICAgICBoZWxwV2lkdGgsXG4gICAgICAgICksXG4gICAgICAgICcnLFxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgLy8gQXJndW1lbnRzXG4gICAgY29uc3QgYXJndW1lbnRMaXN0ID0gaGVscGVyLnZpc2libGVBcmd1bWVudHMoY21kKS5tYXAoKGFyZ3VtZW50KSA9PiB7XG4gICAgICByZXR1cm4gY2FsbEZvcm1hdEl0ZW0oXG4gICAgICAgIGhlbHBlci5zdHlsZUFyZ3VtZW50VGVybShoZWxwZXIuYXJndW1lbnRUZXJtKGFyZ3VtZW50KSksXG4gICAgICAgIGhlbHBlci5zdHlsZUFyZ3VtZW50RGVzY3JpcHRpb24oaGVscGVyLmFyZ3VtZW50RGVzY3JpcHRpb24oYXJndW1lbnQpKSxcbiAgICAgICk7XG4gICAgfSk7XG4gICAgb3V0cHV0ID0gb3V0cHV0LmNvbmNhdChcbiAgICAgIHRoaXMuZm9ybWF0SXRlbUxpc3QoJ0FyZ3VtZW50czonLCBhcmd1bWVudExpc3QsIGhlbHBlciksXG4gICAgKTtcblxuICAgIC8vIE9wdGlvbnNcbiAgICBjb25zdCBvcHRpb25Hcm91cHMgPSB0aGlzLmdyb3VwSXRlbXMoXG4gICAgICBjbWQub3B0aW9ucyxcbiAgICAgIGhlbHBlci52aXNpYmxlT3B0aW9ucyhjbWQpLFxuICAgICAgKG9wdGlvbikgPT4gb3B0aW9uLmhlbHBHcm91cEhlYWRpbmcgPz8gJ09wdGlvbnM6JyxcbiAgICApO1xuICAgIG9wdGlvbkdyb3Vwcy5mb3JFYWNoKChvcHRpb25zLCBncm91cCkgPT4ge1xuICAgICAgY29uc3Qgb3B0aW9uTGlzdCA9IG9wdGlvbnMubWFwKChvcHRpb24pID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbGxGb3JtYXRJdGVtKFxuICAgICAgICAgIGhlbHBlci5zdHlsZU9wdGlvblRlcm0oaGVscGVyLm9wdGlvblRlcm0ob3B0aW9uKSksXG4gICAgICAgICAgaGVscGVyLnN0eWxlT3B0aW9uRGVzY3JpcHRpb24oaGVscGVyLm9wdGlvbkRlc2NyaXB0aW9uKG9wdGlvbikpLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICBvdXRwdXQgPSBvdXRwdXQuY29uY2F0KHRoaXMuZm9ybWF0SXRlbUxpc3QoZ3JvdXAsIG9wdGlvbkxpc3QsIGhlbHBlcikpO1xuICAgIH0pO1xuXG4gICAgaWYgKGhlbHBlci5zaG93R2xvYmFsT3B0aW9ucykge1xuICAgICAgY29uc3QgZ2xvYmFsT3B0aW9uTGlzdCA9IGhlbHBlclxuICAgICAgICAudmlzaWJsZUdsb2JhbE9wdGlvbnMoY21kKVxuICAgICAgICAubWFwKChvcHRpb24pID0+IHtcbiAgICAgICAgICByZXR1cm4gY2FsbEZvcm1hdEl0ZW0oXG4gICAgICAgICAgICBoZWxwZXIuc3R5bGVPcHRpb25UZXJtKGhlbHBlci5vcHRpb25UZXJtKG9wdGlvbikpLFxuICAgICAgICAgICAgaGVscGVyLnN0eWxlT3B0aW9uRGVzY3JpcHRpb24oaGVscGVyLm9wdGlvbkRlc2NyaXB0aW9uKG9wdGlvbikpLFxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgb3V0cHV0ID0gb3V0cHV0LmNvbmNhdChcbiAgICAgICAgdGhpcy5mb3JtYXRJdGVtTGlzdCgnR2xvYmFsIE9wdGlvbnM6JywgZ2xvYmFsT3B0aW9uTGlzdCwgaGVscGVyKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQ29tbWFuZHNcbiAgICBjb25zdCBjb21tYW5kR3JvdXBzID0gdGhpcy5ncm91cEl0ZW1zKFxuICAgICAgY21kLmNvbW1hbmRzLFxuICAgICAgaGVscGVyLnZpc2libGVDb21tYW5kcyhjbWQpLFxuICAgICAgKHN1YikgPT4gc3ViLmhlbHBHcm91cCgpIHx8ICdDb21tYW5kczonLFxuICAgICk7XG4gICAgY29tbWFuZEdyb3Vwcy5mb3JFYWNoKChjb21tYW5kcywgZ3JvdXApID0+IHtcbiAgICAgIGNvbnN0IGNvbW1hbmRMaXN0ID0gY29tbWFuZHMubWFwKChzdWIpID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbGxGb3JtYXRJdGVtKFxuICAgICAgICAgIGhlbHBlci5zdHlsZVN1YmNvbW1hbmRUZXJtKGhlbHBlci5zdWJjb21tYW5kVGVybShzdWIpKSxcbiAgICAgICAgICBoZWxwZXIuc3R5bGVTdWJjb21tYW5kRGVzY3JpcHRpb24oaGVscGVyLnN1YmNvbW1hbmREZXNjcmlwdGlvbihzdWIpKSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgb3V0cHV0ID0gb3V0cHV0LmNvbmNhdCh0aGlzLmZvcm1hdEl0ZW1MaXN0KGdyb3VwLCBjb21tYW5kTGlzdCwgaGVscGVyKSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb3V0cHV0LmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBkaXNwbGF5IHdpZHRoIG9mIHN0cmluZywgaWdub3JpbmcgQU5TSSBlc2NhcGUgc2VxdWVuY2VzLiBVc2VkIGluIHBhZGRpbmcgYW5kIHdyYXBwaW5nIGNhbGN1bGF0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZGlzcGxheVdpZHRoKHN0cikge1xuICAgIHJldHVybiBzdHJpcENvbG9yKHN0cikubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0eWxlIHRoZSB0aXRsZSBmb3IgZGlzcGxheWluZyBpbiB0aGUgaGVscC4gQ2FsbGVkIHdpdGggJ1VzYWdlOicsICdPcHRpb25zOicsIGV0Yy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgc3R5bGVUaXRsZShzdHIpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgc3R5bGVVc2FnZShzdHIpIHtcbiAgICAvLyBVc2FnZSBoYXMgbG90cyBvZiBwYXJ0cyB0aGUgdXNlciBtaWdodCBsaWtlIHRvIGNvbG9yIHNlcGFyYXRlbHkhIEFzc3VtZSBkZWZhdWx0IHVzYWdlIHN0cmluZyB3aGljaCBpcyBmb3JtZWQgbGlrZTpcbiAgICAvLyAgICBjb21tYW5kIHN1YmNvbW1hbmQgW29wdGlvbnNdIFtjb21tYW5kXSA8Zm9vPiBbYmFyXVxuICAgIHJldHVybiBzdHJcbiAgICAgIC5zcGxpdCgnICcpXG4gICAgICAubWFwKCh3b3JkKSA9PiB7XG4gICAgICAgIGlmICh3b3JkID09PSAnW29wdGlvbnNdJykgcmV0dXJuIHRoaXMuc3R5bGVPcHRpb25UZXh0KHdvcmQpO1xuICAgICAgICBpZiAod29yZCA9PT0gJ1tjb21tYW5kXScpIHJldHVybiB0aGlzLnN0eWxlU3ViY29tbWFuZFRleHQod29yZCk7XG4gICAgICAgIGlmICh3b3JkWzBdID09PSAnWycgfHwgd29yZFswXSA9PT0gJzwnKVxuICAgICAgICAgIHJldHVybiB0aGlzLnN0eWxlQXJndW1lbnRUZXh0KHdvcmQpO1xuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZUNvbW1hbmRUZXh0KHdvcmQpOyAvLyBSZXN0cmljdCB0byBpbml0aWFsIHdvcmRzP1xuICAgICAgfSlcbiAgICAgIC5qb2luKCcgJyk7XG4gIH1cbiAgc3R5bGVDb21tYW5kRGVzY3JpcHRpb24oc3RyKSB7XG4gICAgcmV0dXJuIHRoaXMuc3R5bGVEZXNjcmlwdGlvblRleHQoc3RyKTtcbiAgfVxuICBzdHlsZU9wdGlvbkRlc2NyaXB0aW9uKHN0cikge1xuICAgIHJldHVybiB0aGlzLnN0eWxlRGVzY3JpcHRpb25UZXh0KHN0cik7XG4gIH1cbiAgc3R5bGVTdWJjb21tYW5kRGVzY3JpcHRpb24oc3RyKSB7XG4gICAgcmV0dXJuIHRoaXMuc3R5bGVEZXNjcmlwdGlvblRleHQoc3RyKTtcbiAgfVxuICBzdHlsZUFyZ3VtZW50RGVzY3JpcHRpb24oc3RyKSB7XG4gICAgcmV0dXJuIHRoaXMuc3R5bGVEZXNjcmlwdGlvblRleHQoc3RyKTtcbiAgfVxuICBzdHlsZURlc2NyaXB0aW9uVGV4dChzdHIpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIHN0eWxlT3B0aW9uVGVybShzdHIpIHtcbiAgICByZXR1cm4gdGhpcy5zdHlsZU9wdGlvblRleHQoc3RyKTtcbiAgfVxuICBzdHlsZVN1YmNvbW1hbmRUZXJtKHN0cikge1xuICAgIC8vIFRoaXMgaXMgdmVyeSBsaWtlIHVzYWdlIHdpdGggbG90cyBvZiBwYXJ0cyEgQXNzdW1lIGRlZmF1bHQgc3RyaW5nIHdoaWNoIGlzIGZvcm1lZCBsaWtlOlxuICAgIC8vICAgIHN1YmNvbW1hbmQgW29wdGlvbnNdIDxmb28+IFtiYXJdXG4gICAgcmV0dXJuIHN0clxuICAgICAgLnNwbGl0KCcgJylcbiAgICAgIC5tYXAoKHdvcmQpID0+IHtcbiAgICAgICAgaWYgKHdvcmQgPT09ICdbb3B0aW9uc10nKSByZXR1cm4gdGhpcy5zdHlsZU9wdGlvblRleHQod29yZCk7XG4gICAgICAgIGlmICh3b3JkWzBdID09PSAnWycgfHwgd29yZFswXSA9PT0gJzwnKVxuICAgICAgICAgIHJldHVybiB0aGlzLnN0eWxlQXJndW1lbnRUZXh0KHdvcmQpO1xuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZVN1YmNvbW1hbmRUZXh0KHdvcmQpOyAvLyBSZXN0cmljdCB0byBpbml0aWFsIHdvcmRzP1xuICAgICAgfSlcbiAgICAgIC5qb2luKCcgJyk7XG4gIH1cbiAgc3R5bGVBcmd1bWVudFRlcm0oc3RyKSB7XG4gICAgcmV0dXJuIHRoaXMuc3R5bGVBcmd1bWVudFRleHQoc3RyKTtcbiAgfVxuICBzdHlsZU9wdGlvblRleHQoc3RyKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuICBzdHlsZUFyZ3VtZW50VGV4dChzdHIpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIHN0eWxlU3ViY29tbWFuZFRleHQoc3RyKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuICBzdHlsZUNvbW1hbmRUZXh0KHN0cikge1xuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBwYWQgd2lkdGggZnJvbSB0aGUgbWF4aW11bSB0ZXJtIGxlbmd0aC5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHBhcmFtIHtIZWxwfSBoZWxwZXJcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG5cbiAgcGFkV2lkdGgoY21kLCBoZWxwZXIpIHtcbiAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICBoZWxwZXIubG9uZ2VzdE9wdGlvblRlcm1MZW5ndGgoY21kLCBoZWxwZXIpLFxuICAgICAgaGVscGVyLmxvbmdlc3RHbG9iYWxPcHRpb25UZXJtTGVuZ3RoKGNtZCwgaGVscGVyKSxcbiAgICAgIGhlbHBlci5sb25nZXN0U3ViY29tbWFuZFRlcm1MZW5ndGgoY21kLCBoZWxwZXIpLFxuICAgICAgaGVscGVyLmxvbmdlc3RBcmd1bWVudFRlcm1MZW5ndGgoY21kLCBoZWxwZXIpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZWN0IG1hbnVhbGx5IHdyYXBwZWQgYW5kIGluZGVudGVkIHN0cmluZ3MgYnkgY2hlY2tpbmcgZm9yIGxpbmUgYnJlYWsgZm9sbG93ZWQgYnkgd2hpdGVzcGFjZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHByZWZvcm1hdHRlZChzdHIpIHtcbiAgICByZXR1cm4gL1xcblteXFxTXFxyXFxuXS8udGVzdChzdHIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCB0aGUgXCJpdGVtXCIsIHdoaWNoIGNvbnNpc3RzIG9mIGEgdGVybSBhbmQgZGVzY3JpcHRpb24uIFBhZCB0aGUgdGVybSBhbmQgd3JhcCB0aGUgZGVzY3JpcHRpb24sIGluZGVudGluZyB0aGUgZm9sbG93aW5nIGxpbmVzLlxuICAgKlxuICAgKiBTbyBcIlRUVFwiLCA1LCBcIkRERCBEREREIEREIERERFwiIG1pZ2h0IGJlIGZvcm1hdHRlZCBmb3IgdGhpcy5oZWxwV2lkdGg9MTcgbGlrZSBzbzpcbiAgICogICBUVFQgIERERCBEREREXG4gICAqICAgICAgICBERCBERERcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRlcm1cbiAgICogQHBhcmFtIHtudW1iZXJ9IHRlcm1XaWR0aFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGVzY3JpcHRpb25cbiAgICogQHBhcmFtIHtIZWxwfSBoZWxwZXJcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGZvcm1hdEl0ZW0odGVybSwgdGVybVdpZHRoLCBkZXNjcmlwdGlvbiwgaGVscGVyKSB7XG4gICAgY29uc3QgaXRlbUluZGVudCA9IDI7XG4gICAgY29uc3QgaXRlbUluZGVudFN0ciA9ICcgJy5yZXBlYXQoaXRlbUluZGVudCk7XG4gICAgaWYgKCFkZXNjcmlwdGlvbikgcmV0dXJuIGl0ZW1JbmRlbnRTdHIgKyB0ZXJtO1xuXG4gICAgLy8gUGFkIHRoZSB0ZXJtIG91dCB0byBhIGNvbnNpc3RlbnQgd2lkdGgsIHNvIGRlc2NyaXB0aW9ucyBhcmUgYWxpZ25lZC5cbiAgICBjb25zdCBwYWRkZWRUZXJtID0gdGVybS5wYWRFbmQoXG4gICAgICB0ZXJtV2lkdGggKyB0ZXJtLmxlbmd0aCAtIGhlbHBlci5kaXNwbGF5V2lkdGgodGVybSksXG4gICAgKTtcblxuICAgIC8vIEZvcm1hdCB0aGUgZGVzY3JpcHRpb24uXG4gICAgY29uc3Qgc3BhY2VyV2lkdGggPSAyOyAvLyBiZXR3ZWVuIHRlcm0gYW5kIGRlc2NyaXB0aW9uXG4gICAgY29uc3QgaGVscFdpZHRoID0gdGhpcy5oZWxwV2lkdGggPz8gODA7IC8vIGluIGNhc2UgcHJlcGFyZUNvbnRleHQoKSB3YXMgbm90IGNhbGxlZFxuICAgIGNvbnN0IHJlbWFpbmluZ1dpZHRoID0gaGVscFdpZHRoIC0gdGVybVdpZHRoIC0gc3BhY2VyV2lkdGggLSBpdGVtSW5kZW50O1xuICAgIGxldCBmb3JtYXR0ZWREZXNjcmlwdGlvbjtcbiAgICBpZiAoXG4gICAgICByZW1haW5pbmdXaWR0aCA8IHRoaXMubWluV2lkdGhUb1dyYXAgfHxcbiAgICAgIGhlbHBlci5wcmVmb3JtYXR0ZWQoZGVzY3JpcHRpb24pXG4gICAgKSB7XG4gICAgICBmb3JtYXR0ZWREZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB3cmFwcGVkRGVzY3JpcHRpb24gPSBoZWxwZXIuYm94V3JhcChkZXNjcmlwdGlvbiwgcmVtYWluaW5nV2lkdGgpO1xuICAgICAgZm9ybWF0dGVkRGVzY3JpcHRpb24gPSB3cmFwcGVkRGVzY3JpcHRpb24ucmVwbGFjZShcbiAgICAgICAgL1xcbi9nLFxuICAgICAgICAnXFxuJyArICcgJy5yZXBlYXQodGVybVdpZHRoICsgc3BhY2VyV2lkdGgpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBDb25zdHJ1Y3QgYW5kIG92ZXJhbGwgaW5kZW50LlxuICAgIHJldHVybiAoXG4gICAgICBpdGVtSW5kZW50U3RyICtcbiAgICAgIHBhZGRlZFRlcm0gK1xuICAgICAgJyAnLnJlcGVhdChzcGFjZXJXaWR0aCkgK1xuICAgICAgZm9ybWF0dGVkRGVzY3JpcHRpb24ucmVwbGFjZSgvXFxuL2csIGBcXG4ke2l0ZW1JbmRlbnRTdHJ9YClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyYXAgYSBzdHJpbmcgYXQgd2hpdGVzcGFjZSwgcHJlc2VydmluZyBleGlzdGluZyBsaW5lIGJyZWFrcy5cbiAgICogV3JhcHBpbmcgaXMgc2tpcHBlZCBpZiB0aGUgd2lkdGggaXMgbGVzcyB0aGFuIGBtaW5XaWR0aFRvV3JhcGAuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBib3hXcmFwKHN0ciwgd2lkdGgpIHtcbiAgICBpZiAod2lkdGggPCB0aGlzLm1pbldpZHRoVG9XcmFwKSByZXR1cm4gc3RyO1xuXG4gICAgY29uc3QgcmF3TGluZXMgPSBzdHIuc3BsaXQoL1xcclxcbnxcXG4vKTtcbiAgICAvLyBzcGxpdCB1cCB0ZXh0IGJ5IHdoaXRlc3BhY2VcbiAgICBjb25zdCBjaHVua1BhdHRlcm4gPSAvW1xcc10qW15cXHNdKy9nO1xuICAgIGNvbnN0IHdyYXBwZWRMaW5lcyA9IFtdO1xuICAgIHJhd0xpbmVzLmZvckVhY2goKGxpbmUpID0+IHtcbiAgICAgIGNvbnN0IGNodW5rcyA9IGxpbmUubWF0Y2goY2h1bmtQYXR0ZXJuKTtcbiAgICAgIGlmIChjaHVua3MgPT09IG51bGwpIHtcbiAgICAgICAgd3JhcHBlZExpbmVzLnB1c2goJycpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBzdW1DaHVua3MgPSBbY2h1bmtzLnNoaWZ0KCldO1xuICAgICAgbGV0IHN1bVdpZHRoID0gdGhpcy5kaXNwbGF5V2lkdGgoc3VtQ2h1bmtzWzBdKTtcbiAgICAgIGNodW5rcy5mb3JFYWNoKChjaHVuaykgPT4ge1xuICAgICAgICBjb25zdCB2aXNpYmxlV2lkdGggPSB0aGlzLmRpc3BsYXlXaWR0aChjaHVuayk7XG4gICAgICAgIC8vIEFjY3VtdWxhdGUgY2h1bmtzIHdoaWxlIHRoZXkgZml0IGludG8gd2lkdGguXG4gICAgICAgIGlmIChzdW1XaWR0aCArIHZpc2libGVXaWR0aCA8PSB3aWR0aCkge1xuICAgICAgICAgIHN1bUNodW5rcy5wdXNoKGNodW5rKTtcbiAgICAgICAgICBzdW1XaWR0aCArPSB2aXNpYmxlV2lkdGg7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHdyYXBwZWRMaW5lcy5wdXNoKHN1bUNodW5rcy5qb2luKCcnKSk7XG5cbiAgICAgICAgY29uc3QgbmV4dENodW5rID0gY2h1bmsudHJpbVN0YXJ0KCk7IC8vIHRyaW0gc3BhY2UgYXQgbGluZSBicmVha1xuICAgICAgICBzdW1DaHVua3MgPSBbbmV4dENodW5rXTtcbiAgICAgICAgc3VtV2lkdGggPSB0aGlzLmRpc3BsYXlXaWR0aChuZXh0Q2h1bmspO1xuICAgICAgfSk7XG4gICAgICB3cmFwcGVkTGluZXMucHVzaChzdW1DaHVua3Muam9pbignJykpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHdyYXBwZWRMaW5lcy5qb2luKCdcXG4nKTtcbiAgfVxufVxuXG4vKipcbiAqIFN0cmlwIHN0eWxlIEFOU0kgZXNjYXBlIHNlcXVlbmNlcyBmcm9tIHRoZSBzdHJpbmcuIEluIHBhcnRpY3VsYXIsIFNHUiAoU2VsZWN0IEdyYXBoaWMgUmVuZGl0aW9uKSBjb2Rlcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogQHBhY2thZ2VcbiAqL1xuXG5mdW5jdGlvbiBzdHJpcENvbG9yKHN0cikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleFxuICBjb25zdCBzZ3JQYXR0ZXJuID0gL1xceDFiXFxbXFxkKig7XFxkKikqbS9nO1xuICByZXR1cm4gc3RyLnJlcGxhY2Uoc2dyUGF0dGVybiwgJycpO1xufVxuXG5leHBvcnRzLkhlbHAgPSBIZWxwO1xuZXhwb3J0cy5zdHJpcENvbG9yID0gc3RyaXBDb2xvcjtcbiIsICJjb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuL2Vycm9yLmpzJyk7XG5cbmNsYXNzIE9wdGlvbiB7XG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGEgbmV3IGBPcHRpb25gIHdpdGggdGhlIGdpdmVuIGBmbGFnc2AgYW5kIGBkZXNjcmlwdGlvbmAuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmbGFnc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXVxuICAgKi9cblxuICBjb25zdHJ1Y3RvcihmbGFncywgZGVzY3JpcHRpb24pIHtcbiAgICB0aGlzLmZsYWdzID0gZmxhZ3M7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uIHx8ICcnO1xuXG4gICAgdGhpcy5yZXF1aXJlZCA9IGZsYWdzLmluY2x1ZGVzKCc8Jyk7IC8vIEEgdmFsdWUgbXVzdCBiZSBzdXBwbGllZCB3aGVuIHRoZSBvcHRpb24gaXMgc3BlY2lmaWVkLlxuICAgIHRoaXMub3B0aW9uYWwgPSBmbGFncy5pbmNsdWRlcygnWycpOyAvLyBBIHZhbHVlIGlzIG9wdGlvbmFsIHdoZW4gdGhlIG9wdGlvbiBpcyBzcGVjaWZpZWQuXG4gICAgLy8gdmFyaWFkaWMgdGVzdCBpZ25vcmVzIDx2YWx1ZSwuLi4+IGV0IGFsIHdoaWNoIG1pZ2h0IGJlIHVzZWQgdG8gZGVzY3JpYmUgY3VzdG9tIHNwbGl0dGluZyBvZiBzaW5nbGUgYXJndW1lbnRcbiAgICB0aGlzLnZhcmlhZGljID0gL1xcd1xcLlxcLlxcLls+XFxdXSQvLnRlc3QoZmxhZ3MpOyAvLyBUaGUgb3B0aW9uIGNhbiB0YWtlIG11bHRpcGxlIHZhbHVlcy5cbiAgICB0aGlzLm1hbmRhdG9yeSA9IGZhbHNlOyAvLyBUaGUgb3B0aW9uIG11c3QgaGF2ZSBhIHZhbHVlIGFmdGVyIHBhcnNpbmcsIHdoaWNoIHVzdWFsbHkgbWVhbnMgaXQgbXVzdCBiZSBzcGVjaWZpZWQgb24gY29tbWFuZCBsaW5lLlxuICAgIGNvbnN0IG9wdGlvbkZsYWdzID0gc3BsaXRPcHRpb25GbGFncyhmbGFncyk7XG4gICAgdGhpcy5zaG9ydCA9IG9wdGlvbkZsYWdzLnNob3J0RmxhZzsgLy8gTWF5IGJlIGEgc2hvcnQgZmxhZywgdW5kZWZpbmVkLCBvciBldmVuIGEgbG9uZyBmbGFnIChpZiBvcHRpb24gaGFzIHR3byBsb25nIGZsYWdzKS5cbiAgICB0aGlzLmxvbmcgPSBvcHRpb25GbGFncy5sb25nRmxhZztcbiAgICB0aGlzLm5lZ2F0ZSA9IGZhbHNlO1xuICAgIGlmICh0aGlzLmxvbmcpIHtcbiAgICAgIHRoaXMubmVnYXRlID0gdGhpcy5sb25nLnN0YXJ0c1dpdGgoJy0tbm8tJyk7XG4gICAgfVxuICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZGVmYXVsdFZhbHVlRGVzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5wcmVzZXRBcmcgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5lbnZWYXIgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5wYXJzZUFyZyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmhpZGRlbiA9IGZhbHNlO1xuICAgIHRoaXMuYXJnQ2hvaWNlcyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNvbmZsaWN0c1dpdGggPSBbXTtcbiAgICB0aGlzLmltcGxpZWQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5oZWxwR3JvdXBIZWFkaW5nID0gdW5kZWZpbmVkOyAvLyBzb2Z0IGluaXRpYWxpc2VkIHdoZW4gb3B0aW9uIGFkZGVkIHRvIGNvbW1hbmRcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGRlZmF1bHQgdmFsdWUsIGFuZCBvcHRpb25hbGx5IHN1cHBseSB0aGUgZGVzY3JpcHRpb24gdG8gYmUgZGlzcGxheWVkIGluIHRoZSBoZWxwLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dXG4gICAqIEByZXR1cm4ge09wdGlvbn1cbiAgICovXG5cbiAgZGVmYXVsdCh2YWx1ZSwgZGVzY3JpcHRpb24pIHtcbiAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuZGVmYXVsdFZhbHVlRGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVzZXQgdG8gdXNlIHdoZW4gb3B0aW9uIHVzZWQgd2l0aG91dCBvcHRpb24tYXJndW1lbnQsIGVzcGVjaWFsbHkgb3B0aW9uYWwgYnV0IGFsc28gYm9vbGVhbiBhbmQgbmVnYXRlZC5cbiAgICogVGhlIGN1c3RvbSBwcm9jZXNzaW5nIChwYXJzZUFyZykgaXMgY2FsbGVkLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBuZXcgT3B0aW9uKCctLWNvbG9yJykuZGVmYXVsdCgnR1JFWVNDQUxFJykucHJlc2V0KCdSR0InKTtcbiAgICogbmV3IE9wdGlvbignLS1kb25hdGUgW2Ftb3VudF0nKS5wcmVzZXQoJzIwJykuYXJnUGFyc2VyKHBhcnNlRmxvYXQpO1xuICAgKlxuICAgKiBAcGFyYW0geyp9IGFyZ1xuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqL1xuXG4gIHByZXNldChhcmcpIHtcbiAgICB0aGlzLnByZXNldEFyZyA9IGFyZztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgb3B0aW9uIG5hbWUocykgdGhhdCBjb25mbGljdCB3aXRoIHRoaXMgb3B0aW9uLlxuICAgKiBBbiBlcnJvciB3aWxsIGJlIGRpc3BsYXllZCBpZiBjb25mbGljdGluZyBvcHRpb25zIGFyZSBmb3VuZCBkdXJpbmcgcGFyc2luZy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogbmV3IE9wdGlvbignLS1yZ2InKS5jb25mbGljdHMoJ2NteWsnKTtcbiAgICogbmV3IE9wdGlvbignLS1qcycpLmNvbmZsaWN0cyhbJ3RzJywgJ2pzeCddKTtcbiAgICpcbiAgICogQHBhcmFtIHsoc3RyaW5nIHwgc3RyaW5nW10pfSBuYW1lc1xuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqL1xuXG4gIGNvbmZsaWN0cyhuYW1lcykge1xuICAgIHRoaXMuY29uZmxpY3RzV2l0aCA9IHRoaXMuY29uZmxpY3RzV2l0aC5jb25jYXQobmFtZXMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgaW1wbGllZCBvcHRpb24gdmFsdWVzIGZvciB3aGVuIHRoaXMgb3B0aW9uIGlzIHNldCBhbmQgdGhlIGltcGxpZWQgb3B0aW9ucyBhcmUgbm90LlxuICAgKlxuICAgKiBUaGUgY3VzdG9tIHByb2Nlc3NpbmcgKHBhcnNlQXJnKSBpcyBub3QgY2FsbGVkIG9uIHRoZSBpbXBsaWVkIHZhbHVlcy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcHJvZ3JhbVxuICAgKiAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1sb2cnLCAnd3JpdGUgbG9nZ2luZyBpbmZvcm1hdGlvbiB0byBmaWxlJykpXG4gICAqICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXRyYWNlJywgJ2xvZyBleHRyYSBkZXRhaWxzJykuaW1wbGllcyh7IGxvZzogJ3RyYWNlLnR4dCcgfSkpO1xuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gaW1wbGllZE9wdGlvblZhbHVlc1xuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqL1xuICBpbXBsaWVzKGltcGxpZWRPcHRpb25WYWx1ZXMpIHtcbiAgICBsZXQgbmV3SW1wbGllZCA9IGltcGxpZWRPcHRpb25WYWx1ZXM7XG4gICAgaWYgKHR5cGVvZiBpbXBsaWVkT3B0aW9uVmFsdWVzID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gc3RyaW5nIGlzIG5vdCBkb2N1bWVudGVkLCBidXQgZWFzeSBtaXN0YWtlIGFuZCB3ZSBjYW4gZG8gd2hhdCB1c2VyIHByb2JhYmx5IGludGVuZGVkLlxuICAgICAgbmV3SW1wbGllZCA9IHsgW2ltcGxpZWRPcHRpb25WYWx1ZXNdOiB0cnVlIH07XG4gICAgfVxuICAgIHRoaXMuaW1wbGllZCA9IE9iamVjdC5hc3NpZ24odGhpcy5pbXBsaWVkIHx8IHt9LCBuZXdJbXBsaWVkKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gY2hlY2sgZm9yIG9wdGlvbiB2YWx1ZS5cbiAgICpcbiAgICogQW4gZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgb25seSB1c2VkIGlmIHdoZW4gcHJvY2Vzc2VkIHRoZSBjdXJyZW50IG9wdGlvbiB2YWx1ZSBpc1xuICAgKiB1bmRlZmluZWQsIG9yIHRoZSBzb3VyY2Ugb2YgdGhlIGN1cnJlbnQgdmFsdWUgaXMgJ2RlZmF1bHQnIG9yICdjb25maWcnIG9yICdlbnYnLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqL1xuXG4gIGVudihuYW1lKSB7XG4gICAgdGhpcy5lbnZWYXIgPSBuYW1lO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY3VzdG9tIGhhbmRsZXIgZm9yIHByb2Nlc3NpbmcgQ0xJIG9wdGlvbiBhcmd1bWVudHMgaW50byBvcHRpb24gdmFsdWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZm5dXG4gICAqIEByZXR1cm4ge09wdGlvbn1cbiAgICovXG5cbiAgYXJnUGFyc2VyKGZuKSB7XG4gICAgdGhpcy5wYXJzZUFyZyA9IGZuO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG9wdGlvbiBpcyBtYW5kYXRvcnkgYW5kIG11c3QgaGF2ZSBhIHZhbHVlIGFmdGVyIHBhcnNpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW21hbmRhdG9yeT10cnVlXVxuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqL1xuXG4gIG1ha2VPcHRpb25NYW5kYXRvcnkobWFuZGF0b3J5ID0gdHJ1ZSkge1xuICAgIHRoaXMubWFuZGF0b3J5ID0gISFtYW5kYXRvcnk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogSGlkZSBvcHRpb24gaW4gaGVscC5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbaGlkZT10cnVlXVxuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqL1xuXG4gIGhpZGVIZWxwKGhpZGUgPSB0cnVlKSB7XG4gICAgdGhpcy5oaWRkZW4gPSAhIWhpZGU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQHBhY2thZ2VcbiAgICovXG5cbiAgX2NvbGxlY3RWYWx1ZSh2YWx1ZSwgcHJldmlvdXMpIHtcbiAgICBpZiAocHJldmlvdXMgPT09IHRoaXMuZGVmYXVsdFZhbHVlIHx8ICFBcnJheS5pc0FycmF5KHByZXZpb3VzKSkge1xuICAgICAgcmV0dXJuIFt2YWx1ZV07XG4gICAgfVxuXG4gICAgcHJldmlvdXMucHVzaCh2YWx1ZSk7XG4gICAgcmV0dXJuIHByZXZpb3VzO1xuICB9XG5cbiAgLyoqXG4gICAqIE9ubHkgYWxsb3cgb3B0aW9uIHZhbHVlIHRvIGJlIG9uZSBvZiBjaG9pY2VzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSB2YWx1ZXNcbiAgICogQHJldHVybiB7T3B0aW9ufVxuICAgKi9cblxuICBjaG9pY2VzKHZhbHVlcykge1xuICAgIHRoaXMuYXJnQ2hvaWNlcyA9IHZhbHVlcy5zbGljZSgpO1xuICAgIHRoaXMucGFyc2VBcmcgPSAoYXJnLCBwcmV2aW91cykgPT4ge1xuICAgICAgaWYgKCF0aGlzLmFyZ0Nob2ljZXMuaW5jbHVkZXMoYXJnKSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgICAgYEFsbG93ZWQgY2hvaWNlcyBhcmUgJHt0aGlzLmFyZ0Nob2ljZXMuam9pbignLCAnKX0uYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnZhcmlhZGljKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2xsZWN0VmFsdWUoYXJnLCBwcmV2aW91cyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJnO1xuICAgIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIG9wdGlvbiBuYW1lLlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG4gIG5hbWUoKSB7XG4gICAgaWYgKHRoaXMubG9uZykge1xuICAgICAgcmV0dXJuIHRoaXMubG9uZy5yZXBsYWNlKC9eLS0vLCAnJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNob3J0LnJlcGxhY2UoL14tLywgJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBvcHRpb24gbmFtZSwgaW4gYSBjYW1lbGNhc2UgZm9ybWF0IHRoYXQgY2FuIGJlIHVzZWRcbiAgICogYXMgYW4gb2JqZWN0IGF0dHJpYnV0ZSBrZXkuXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cbiAgYXR0cmlidXRlTmFtZSgpIHtcbiAgICBpZiAodGhpcy5uZWdhdGUpIHtcbiAgICAgIHJldHVybiBjYW1lbGNhc2UodGhpcy5uYW1lKCkucmVwbGFjZSgvXm5vLS8sICcnKSk7XG4gICAgfVxuICAgIHJldHVybiBjYW1lbGNhc2UodGhpcy5uYW1lKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgaGVscCBncm91cCBoZWFkaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaGVhZGluZ1xuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqL1xuICBoZWxwR3JvdXAoaGVhZGluZykge1xuICAgIHRoaXMuaGVscEdyb3VwSGVhZGluZyA9IGhlYWRpbmc7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYGFyZ2AgbWF0Y2hlcyB0aGUgc2hvcnQgb3IgbG9uZyBmbGFnLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJnXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqIEBwYWNrYWdlXG4gICAqL1xuXG4gIGlzKGFyZykge1xuICAgIHJldHVybiB0aGlzLnNob3J0ID09PSBhcmcgfHwgdGhpcy5sb25nID09PSBhcmc7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgYSBib29sZWFuIG9wdGlvbi5cbiAgICpcbiAgICogT3B0aW9ucyBhcmUgb25lIG9mIGJvb2xlYW4sIG5lZ2F0ZWQsIHJlcXVpcmVkIGFyZ3VtZW50LCBvciBvcHRpb25hbCBhcmd1bWVudC5cbiAgICpcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICogQHBhY2thZ2VcbiAgICovXG5cbiAgaXNCb29sZWFuKCkge1xuICAgIHJldHVybiAhdGhpcy5yZXF1aXJlZCAmJiAhdGhpcy5vcHRpb25hbCAmJiAhdGhpcy5uZWdhdGU7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHdvcmsgd2l0aCBkdWFsIG9wdGlvbnMsIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGV4aXN0aW5nXG4gKiBpbXBsZW1lbnRhdGlvbi4gV2Ugc3VwcG9ydCBzZXBhcmF0ZSBkdWFsIG9wdGlvbnMgZm9yIHNlcGFyYXRlIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBvcHRpb25zLFxuICogbGlrZSBgLS1idWlsZGAgYW5kIGAtLW5vLWJ1aWxkYCwgd2hpY2ggc2hhcmUgYSBzaW5nbGUgb3B0aW9uIHZhbHVlLiBUaGlzIHdvcmtzIG5pY2VseSBmb3Igc29tZVxuICogdXNlIGNhc2VzLCBidXQgaXMgdHJpY2t5IGZvciBvdGhlcnMgd2hlcmUgd2Ugd2FudCBzZXBhcmF0ZSBiZWhhdmlvdXJzIGRlc3BpdGVcbiAqIHRoZSBzaW5nbGUgc2hhcmVkIG9wdGlvbiB2YWx1ZS5cbiAqL1xuY2xhc3MgRHVhbE9wdGlvbnMge1xuICAvKipcbiAgICogQHBhcmFtIHtPcHRpb25bXX0gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIHRoaXMucG9zaXRpdmVPcHRpb25zID0gbmV3IE1hcCgpO1xuICAgIHRoaXMubmVnYXRpdmVPcHRpb25zID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuZHVhbE9wdGlvbnMgPSBuZXcgU2V0KCk7XG4gICAgb3B0aW9ucy5mb3JFYWNoKChvcHRpb24pID0+IHtcbiAgICAgIGlmIChvcHRpb24ubmVnYXRlKSB7XG4gICAgICAgIHRoaXMubmVnYXRpdmVPcHRpb25zLnNldChvcHRpb24uYXR0cmlidXRlTmFtZSgpLCBvcHRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wb3NpdGl2ZU9wdGlvbnMuc2V0KG9wdGlvbi5hdHRyaWJ1dGVOYW1lKCksIG9wdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5uZWdhdGl2ZU9wdGlvbnMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgaWYgKHRoaXMucG9zaXRpdmVPcHRpb25zLmhhcyhrZXkpKSB7XG4gICAgICAgIHRoaXMuZHVhbE9wdGlvbnMuYWRkKGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGlkIHRoZSB2YWx1ZSBjb21lIGZyb20gdGhlIG9wdGlvbiwgYW5kIG5vdCBmcm9tIHBvc3NpYmxlIG1hdGNoaW5nIGR1YWwgb3B0aW9uP1xuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBvcHRpb25cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICB2YWx1ZUZyb21PcHRpb24odmFsdWUsIG9wdGlvbikge1xuICAgIGNvbnN0IG9wdGlvbktleSA9IG9wdGlvbi5hdHRyaWJ1dGVOYW1lKCk7XG4gICAgaWYgKCF0aGlzLmR1YWxPcHRpb25zLmhhcyhvcHRpb25LZXkpKSByZXR1cm4gdHJ1ZTtcblxuICAgIC8vIFVzZSB0aGUgdmFsdWUgdG8gZGVkdWNlIGlmIChwcm9iYWJseSkgY2FtZSBmcm9tIHRoZSBvcHRpb24uXG4gICAgY29uc3QgcHJlc2V0ID0gdGhpcy5uZWdhdGl2ZU9wdGlvbnMuZ2V0KG9wdGlvbktleSkucHJlc2V0QXJnO1xuICAgIGNvbnN0IG5lZ2F0aXZlVmFsdWUgPSBwcmVzZXQgIT09IHVuZGVmaW5lZCA/IHByZXNldCA6IGZhbHNlO1xuICAgIHJldHVybiBvcHRpb24ubmVnYXRlID09PSAobmVnYXRpdmVWYWx1ZSA9PT0gdmFsdWUpO1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydCBzdHJpbmcgZnJvbSBrZWJhYi1jYXNlIHRvIGNhbWVsQ2FzZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGNhbWVsY2FzZShzdHIpIHtcbiAgcmV0dXJuIHN0ci5zcGxpdCgnLScpLnJlZHVjZSgoc3RyLCB3b3JkKSA9PiB7XG4gICAgcmV0dXJuIHN0ciArIHdvcmRbMF0udG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFNwbGl0IHRoZSBzaG9ydCBhbmQgbG9uZyBmbGFnIG91dCBvZiBzb21ldGhpbmcgbGlrZSAnLW0sLS1taXhlZCA8dmFsdWU+J1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc3BsaXRPcHRpb25GbGFncyhmbGFncykge1xuICBsZXQgc2hvcnRGbGFnO1xuICBsZXQgbG9uZ0ZsYWc7XG4gIC8vIHNob3J0IGZsYWcsIHNpbmdsZSBkYXNoIGFuZCBzaW5nbGUgY2hhcmFjdGVyXG4gIGNvbnN0IHNob3J0RmxhZ0V4cCA9IC9eLVteLV0kLztcbiAgLy8gbG9uZyBmbGFnLCBkb3VibGUgZGFzaCBhbmQgYXQgbGVhc3Qgb25lIGNoYXJhY3RlclxuICBjb25zdCBsb25nRmxhZ0V4cCA9IC9eLS1bXi1dLztcblxuICBjb25zdCBmbGFnUGFydHMgPSBmbGFncy5zcGxpdCgvWyB8LF0rLykuY29uY2F0KCdndWFyZCcpO1xuICAvLyBOb3JtYWwgaXMgc2hvcnQgYW5kL29yIGxvbmcuXG4gIGlmIChzaG9ydEZsYWdFeHAudGVzdChmbGFnUGFydHNbMF0pKSBzaG9ydEZsYWcgPSBmbGFnUGFydHMuc2hpZnQoKTtcbiAgaWYgKGxvbmdGbGFnRXhwLnRlc3QoZmxhZ1BhcnRzWzBdKSkgbG9uZ0ZsYWcgPSBmbGFnUGFydHMuc2hpZnQoKTtcbiAgLy8gTG9uZyB0aGVuIHNob3J0LiBSYXJlbHkgdXNlZCBidXQgZmluZS5cbiAgaWYgKCFzaG9ydEZsYWcgJiYgc2hvcnRGbGFnRXhwLnRlc3QoZmxhZ1BhcnRzWzBdKSlcbiAgICBzaG9ydEZsYWcgPSBmbGFnUGFydHMuc2hpZnQoKTtcbiAgLy8gQWxsb3cgdHdvIGxvbmcgZmxhZ3MsIGxpa2UgJy0td3MsIC0td29ya3NwYWNlJ1xuICAvLyBUaGlzIGlzIHRoZSBzdXBwb3J0ZWQgd2F5IHRvIGhhdmUgYSBzaG9ydGlzaCBvcHRpb24gZmxhZy5cbiAgaWYgKCFzaG9ydEZsYWcgJiYgbG9uZ0ZsYWdFeHAudGVzdChmbGFnUGFydHNbMF0pKSB7XG4gICAgc2hvcnRGbGFnID0gbG9uZ0ZsYWc7XG4gICAgbG9uZ0ZsYWcgPSBmbGFnUGFydHMuc2hpZnQoKTtcbiAgfVxuXG4gIC8vIENoZWNrIGZvciB1bnByb2Nlc3NlZCBmbGFnLiBGYWlsIG5vaXNpbHkgcmF0aGVyIHRoYW4gc2lsZW50bHkgaWdub3JlLlxuICBpZiAoZmxhZ1BhcnRzWzBdLnN0YXJ0c1dpdGgoJy0nKSkge1xuICAgIGNvbnN0IHVuc3VwcG9ydGVkRmxhZyA9IGZsYWdQYXJ0c1swXTtcbiAgICBjb25zdCBiYXNlRXJyb3IgPSBgb3B0aW9uIGNyZWF0aW9uIGZhaWxlZCBkdWUgdG8gJyR7dW5zdXBwb3J0ZWRGbGFnfScgaW4gb3B0aW9uIGZsYWdzICcke2ZsYWdzfSdgO1xuICAgIGlmICgvXi1bXi1dW14tXS8udGVzdCh1bnN1cHBvcnRlZEZsYWcpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgJHtiYXNlRXJyb3J9XG4tIGEgc2hvcnQgZmxhZyBpcyBhIHNpbmdsZSBkYXNoIGFuZCBhIHNpbmdsZSBjaGFyYWN0ZXJcbiAgLSBlaXRoZXIgdXNlIGEgc2luZ2xlIGRhc2ggYW5kIGEgc2luZ2xlIGNoYXJhY3RlciAoZm9yIGEgc2hvcnQgZmxhZylcbiAgLSBvciB1c2UgYSBkb3VibGUgZGFzaCBmb3IgYSBsb25nIG9wdGlvbiAoYW5kIGNhbiBoYXZlIHR3bywgbGlrZSAnLS13cywgLS13b3Jrc3BhY2UnKWAsXG4gICAgICApO1xuICAgIGlmIChzaG9ydEZsYWdFeHAudGVzdCh1bnN1cHBvcnRlZEZsYWcpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2Jhc2VFcnJvcn1cbi0gdG9vIG1hbnkgc2hvcnQgZmxhZ3NgKTtcbiAgICBpZiAobG9uZ0ZsYWdFeHAudGVzdCh1bnN1cHBvcnRlZEZsYWcpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2Jhc2VFcnJvcn1cbi0gdG9vIG1hbnkgbG9uZyBmbGFnc2ApO1xuXG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2Jhc2VFcnJvcn1cbi0gdW5yZWNvZ25pc2VkIGZsYWcgZm9ybWF0YCk7XG4gIH1cbiAgaWYgKHNob3J0RmxhZyA9PT0gdW5kZWZpbmVkICYmIGxvbmdGbGFnID09PSB1bmRlZmluZWQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYG9wdGlvbiBjcmVhdGlvbiBmYWlsZWQgZHVlIHRvIG5vIGZsYWdzIGZvdW5kIGluICcke2ZsYWdzfScuYCxcbiAgICApO1xuXG4gIHJldHVybiB7IHNob3J0RmxhZywgbG9uZ0ZsYWcgfTtcbn1cblxuZXhwb3J0cy5PcHRpb24gPSBPcHRpb247XG5leHBvcnRzLkR1YWxPcHRpb25zID0gRHVhbE9wdGlvbnM7XG4iLCAiY29uc3QgbWF4RGlzdGFuY2UgPSAzO1xuXG5mdW5jdGlvbiBlZGl0RGlzdGFuY2UoYSwgYikge1xuICAvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EYW1lcmF1XHUyMDEzTGV2ZW5zaHRlaW5fZGlzdGFuY2VcbiAgLy8gQ2FsY3VsYXRpbmcgb3B0aW1hbCBzdHJpbmcgYWxpZ25tZW50IGRpc3RhbmNlLCBubyBzdWJzdHJpbmcgaXMgZWRpdGVkIG1vcmUgdGhhbiBvbmNlLlxuICAvLyAoU2ltcGxlIGltcGxlbWVudGF0aW9uLilcblxuICAvLyBRdWljayBlYXJseSBleGl0LCByZXR1cm4gd29yc3QgY2FzZS5cbiAgaWYgKE1hdGguYWJzKGEubGVuZ3RoIC0gYi5sZW5ndGgpID4gbWF4RGlzdGFuY2UpXG4gICAgcmV0dXJuIE1hdGgubWF4KGEubGVuZ3RoLCBiLmxlbmd0aCk7XG5cbiAgLy8gZGlzdGFuY2UgYmV0d2VlbiBwcmVmaXggc3Vic3RyaW5ncyBvZiBhIGFuZCBiXG4gIGNvbnN0IGQgPSBbXTtcblxuICAvLyBwdXJlIGRlbGV0aW9ucyB0dXJuIGEgaW50byBlbXB0eSBzdHJpbmdcbiAgZm9yIChsZXQgaSA9IDA7IGkgPD0gYS5sZW5ndGg7IGkrKykge1xuICAgIGRbaV0gPSBbaV07XG4gIH1cbiAgLy8gcHVyZSBpbnNlcnRpb25zIHR1cm4gZW1wdHkgc3RyaW5nIGludG8gYlxuICBmb3IgKGxldCBqID0gMDsgaiA8PSBiLmxlbmd0aDsgaisrKSB7XG4gICAgZFswXVtqXSA9IGo7XG4gIH1cblxuICAvLyBmaWxsIG1hdHJpeFxuICBmb3IgKGxldCBqID0gMTsgaiA8PSBiLmxlbmd0aDsgaisrKSB7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gYS5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGNvc3QgPSAxO1xuICAgICAgaWYgKGFbaSAtIDFdID09PSBiW2ogLSAxXSkge1xuICAgICAgICBjb3N0ID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvc3QgPSAxO1xuICAgICAgfVxuICAgICAgZFtpXVtqXSA9IE1hdGgubWluKFxuICAgICAgICBkW2kgLSAxXVtqXSArIDEsIC8vIGRlbGV0aW9uXG4gICAgICAgIGRbaV1baiAtIDFdICsgMSwgLy8gaW5zZXJ0aW9uXG4gICAgICAgIGRbaSAtIDFdW2ogLSAxXSArIGNvc3QsIC8vIHN1YnN0aXR1dGlvblxuICAgICAgKTtcbiAgICAgIC8vIHRyYW5zcG9zaXRpb25cbiAgICAgIGlmIChpID4gMSAmJiBqID4gMSAmJiBhW2kgLSAxXSA9PT0gYltqIC0gMl0gJiYgYVtpIC0gMl0gPT09IGJbaiAtIDFdKSB7XG4gICAgICAgIGRbaV1bal0gPSBNYXRoLm1pbihkW2ldW2pdLCBkW2kgLSAyXVtqIC0gMl0gKyAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZFthLmxlbmd0aF1bYi5sZW5ndGhdO1xufVxuXG4vKipcbiAqIEZpbmQgY2xvc2UgbWF0Y2hlcywgcmVzdHJpY3RlZCB0byBzYW1lIG51bWJlciBvZiBlZGl0cy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gd29yZFxuICogQHBhcmFtIHtzdHJpbmdbXX0gY2FuZGlkYXRlc1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBzdWdnZXN0U2ltaWxhcih3b3JkLCBjYW5kaWRhdGVzKSB7XG4gIGlmICghY2FuZGlkYXRlcyB8fCBjYW5kaWRhdGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnO1xuICAvLyByZW1vdmUgcG9zc2libGUgZHVwbGljYXRlc1xuICBjYW5kaWRhdGVzID0gQXJyYXkuZnJvbShuZXcgU2V0KGNhbmRpZGF0ZXMpKTtcblxuICBjb25zdCBzZWFyY2hpbmdPcHRpb25zID0gd29yZC5zdGFydHNXaXRoKCctLScpO1xuICBpZiAoc2VhcmNoaW5nT3B0aW9ucykge1xuICAgIHdvcmQgPSB3b3JkLnNsaWNlKDIpO1xuICAgIGNhbmRpZGF0ZXMgPSBjYW5kaWRhdGVzLm1hcCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUuc2xpY2UoMikpO1xuICB9XG5cbiAgbGV0IHNpbWlsYXIgPSBbXTtcbiAgbGV0IGJlc3REaXN0YW5jZSA9IG1heERpc3RhbmNlO1xuICBjb25zdCBtaW5TaW1pbGFyaXR5ID0gMC40O1xuICBjYW5kaWRhdGVzLmZvckVhY2goKGNhbmRpZGF0ZSkgPT4ge1xuICAgIGlmIChjYW5kaWRhdGUubGVuZ3RoIDw9IDEpIHJldHVybjsgLy8gbm8gb25lIGNoYXJhY3RlciBndWVzc2VzXG5cbiAgICBjb25zdCBkaXN0YW5jZSA9IGVkaXREaXN0YW5jZSh3b3JkLCBjYW5kaWRhdGUpO1xuICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWF4KHdvcmQubGVuZ3RoLCBjYW5kaWRhdGUubGVuZ3RoKTtcbiAgICBjb25zdCBzaW1pbGFyaXR5ID0gKGxlbmd0aCAtIGRpc3RhbmNlKSAvIGxlbmd0aDtcbiAgICBpZiAoc2ltaWxhcml0eSA+IG1pblNpbWlsYXJpdHkpIHtcbiAgICAgIGlmIChkaXN0YW5jZSA8IGJlc3REaXN0YW5jZSkge1xuICAgICAgICAvLyBiZXR0ZXIgZWRpdCBkaXN0YW5jZSwgdGhyb3cgYXdheSBwcmV2aW91cyB3b3JzZSBtYXRjaGVzXG4gICAgICAgIGJlc3REaXN0YW5jZSA9IGRpc3RhbmNlO1xuICAgICAgICBzaW1pbGFyID0gW2NhbmRpZGF0ZV07XG4gICAgICB9IGVsc2UgaWYgKGRpc3RhbmNlID09PSBiZXN0RGlzdGFuY2UpIHtcbiAgICAgICAgc2ltaWxhci5wdXNoKGNhbmRpZGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBzaW1pbGFyLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSk7XG4gIGlmIChzZWFyY2hpbmdPcHRpb25zKSB7XG4gICAgc2ltaWxhciA9IHNpbWlsYXIubWFwKChjYW5kaWRhdGUpID0+IGAtLSR7Y2FuZGlkYXRlfWApO1xuICB9XG5cbiAgaWYgKHNpbWlsYXIubGVuZ3RoID4gMSkge1xuICAgIHJldHVybiBgXFxuKERpZCB5b3UgbWVhbiBvbmUgb2YgJHtzaW1pbGFyLmpvaW4oJywgJyl9PylgO1xuICB9XG4gIGlmIChzaW1pbGFyLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBgXFxuKERpZCB5b3UgbWVhbiAke3NpbWlsYXJbMF19PylgO1xuICB9XG4gIHJldHVybiAnJztcbn1cblxuZXhwb3J0cy5zdWdnZXN0U2ltaWxhciA9IHN1Z2dlc3RTaW1pbGFyO1xuIiwgImNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ25vZGU6ZXZlbnRzJykuRXZlbnRFbWl0dGVyO1xuY29uc3QgY2hpbGRQcm9jZXNzID0gcmVxdWlyZSgnbm9kZTpjaGlsZF9wcm9jZXNzJyk7XG5jb25zdCBwYXRoID0gcmVxdWlyZSgnbm9kZTpwYXRoJyk7XG5jb25zdCBmcyA9IHJlcXVpcmUoJ25vZGU6ZnMnKTtcbmNvbnN0IHByb2Nlc3MgPSByZXF1aXJlKCdub2RlOnByb2Nlc3MnKTtcblxuY29uc3QgeyBBcmd1bWVudCwgaHVtYW5SZWFkYWJsZUFyZ05hbWUgfSA9IHJlcXVpcmUoJy4vYXJndW1lbnQuanMnKTtcbmNvbnN0IHsgQ29tbWFuZGVyRXJyb3IgfSA9IHJlcXVpcmUoJy4vZXJyb3IuanMnKTtcbmNvbnN0IHsgSGVscCwgc3RyaXBDb2xvciB9ID0gcmVxdWlyZSgnLi9oZWxwLmpzJyk7XG5jb25zdCB7IE9wdGlvbiwgRHVhbE9wdGlvbnMgfSA9IHJlcXVpcmUoJy4vb3B0aW9uLmpzJyk7XG5jb25zdCB7IHN1Z2dlc3RTaW1pbGFyIH0gPSByZXF1aXJlKCcuL3N1Z2dlc3RTaW1pbGFyJyk7XG5cbmNsYXNzIENvbW1hbmQgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAvKipcbiAgICogSW5pdGlhbGl6ZSBhIG5ldyBgQ29tbWFuZGAuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZV1cbiAgICovXG5cbiAgY29uc3RydWN0b3IobmFtZSkge1xuICAgIHN1cGVyKCk7XG4gICAgLyoqIEB0eXBlIHtDb21tYW5kW119ICovXG4gICAgdGhpcy5jb21tYW5kcyA9IFtdO1xuICAgIC8qKiBAdHlwZSB7T3B0aW9uW119ICovXG4gICAgdGhpcy5vcHRpb25zID0gW107XG4gICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIHRoaXMuX2FsbG93VW5rbm93bk9wdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuX2FsbG93RXhjZXNzQXJndW1lbnRzID0gZmFsc2U7XG4gICAgLyoqIEB0eXBlIHtBcmd1bWVudFtdfSAqL1xuICAgIHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cyA9IFtdO1xuICAgIHRoaXMuX2FyZ3MgPSB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHM7IC8vIGRlcHJlY2F0ZWQgb2xkIG5hbWVcbiAgICAvKiogQHR5cGUge3N0cmluZ1tdfSAqL1xuICAgIHRoaXMuYXJncyA9IFtdOyAvLyBjbGkgYXJncyB3aXRoIG9wdGlvbnMgcmVtb3ZlZFxuICAgIHRoaXMucmF3QXJncyA9IFtdO1xuICAgIHRoaXMucHJvY2Vzc2VkQXJncyA9IFtdOyAvLyBsaWtlIC5hcmdzIGJ1dCBhZnRlciBjdXN0b20gcHJvY2Vzc2luZyBhbmQgY29sbGVjdGluZyB2YXJpYWRpY1xuICAgIHRoaXMuX3NjcmlwdFBhdGggPSBudWxsO1xuICAgIHRoaXMuX25hbWUgPSBuYW1lIHx8ICcnO1xuICAgIHRoaXMuX29wdGlvblZhbHVlcyA9IHt9O1xuICAgIHRoaXMuX29wdGlvblZhbHVlU291cmNlcyA9IHt9OyAvLyBkZWZhdWx0LCBlbnYsIGNsaSBldGNcbiAgICB0aGlzLl9zdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMgPSBmYWxzZTtcbiAgICB0aGlzLl9hY3Rpb25IYW5kbGVyID0gbnVsbDtcbiAgICB0aGlzLl9leGVjdXRhYmxlSGFuZGxlciA9IGZhbHNlO1xuICAgIHRoaXMuX2V4ZWN1dGFibGVGaWxlID0gbnVsbDsgLy8gY3VzdG9tIG5hbWUgZm9yIGV4ZWN1dGFibGVcbiAgICB0aGlzLl9leGVjdXRhYmxlRGlyID0gbnVsbDsgLy8gY3VzdG9tIHNlYXJjaCBkaXJlY3RvcnkgZm9yIHN1YmNvbW1hbmRzXG4gICAgdGhpcy5fZGVmYXVsdENvbW1hbmROYW1lID0gbnVsbDtcbiAgICB0aGlzLl9leGl0Q2FsbGJhY2sgPSBudWxsO1xuICAgIHRoaXMuX2FsaWFzZXMgPSBbXTtcbiAgICB0aGlzLl9jb21iaW5lRmxhZ0FuZE9wdGlvbmFsVmFsdWUgPSB0cnVlO1xuICAgIHRoaXMuX2Rlc2NyaXB0aW9uID0gJyc7XG4gICAgdGhpcy5fc3VtbWFyeSA9ICcnO1xuICAgIHRoaXMuX2FyZ3NEZXNjcmlwdGlvbiA9IHVuZGVmaW5lZDsgLy8gbGVnYWN5XG4gICAgdGhpcy5fZW5hYmxlUG9zaXRpb25hbE9wdGlvbnMgPSBmYWxzZTtcbiAgICB0aGlzLl9wYXNzVGhyb3VnaE9wdGlvbnMgPSBmYWxzZTtcbiAgICB0aGlzLl9saWZlQ3ljbGVIb29rcyA9IHt9OyAvLyBhIGhhc2ggb2YgYXJyYXlzXG4gICAgLyoqIEB0eXBlIHsoYm9vbGVhbiB8IHN0cmluZyl9ICovXG4gICAgdGhpcy5fc2hvd0hlbHBBZnRlckVycm9yID0gZmFsc2U7XG4gICAgdGhpcy5fc2hvd1N1Z2dlc3Rpb25BZnRlckVycm9yID0gdHJ1ZTtcbiAgICB0aGlzLl9zYXZlZFN0YXRlID0gbnVsbDsgLy8gdXNlZCBpbiBzYXZlL3Jlc3RvcmVTdGF0ZUJlZm9yZVBhcnNlXG5cbiAgICAvLyBzZWUgY29uZmlndXJlT3V0cHV0KCkgZm9yIGRvY3NcbiAgICB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uID0ge1xuICAgICAgd3JpdGVPdXQ6IChzdHIpID0+IHByb2Nlc3Muc3Rkb3V0LndyaXRlKHN0ciksXG4gICAgICB3cml0ZUVycjogKHN0cikgPT4gcHJvY2Vzcy5zdGRlcnIud3JpdGUoc3RyKSxcbiAgICAgIG91dHB1dEVycm9yOiAoc3RyLCB3cml0ZSkgPT4gd3JpdGUoc3RyKSxcbiAgICAgIGdldE91dEhlbHBXaWR0aDogKCkgPT5cbiAgICAgICAgcHJvY2Vzcy5zdGRvdXQuaXNUVFkgPyBwcm9jZXNzLnN0ZG91dC5jb2x1bW5zIDogdW5kZWZpbmVkLFxuICAgICAgZ2V0RXJySGVscFdpZHRoOiAoKSA9PlxuICAgICAgICBwcm9jZXNzLnN0ZGVyci5pc1RUWSA/IHByb2Nlc3Muc3RkZXJyLmNvbHVtbnMgOiB1bmRlZmluZWQsXG4gICAgICBnZXRPdXRIYXNDb2xvcnM6ICgpID0+XG4gICAgICAgIHVzZUNvbG9yKCkgPz8gKHByb2Nlc3Muc3Rkb3V0LmlzVFRZICYmIHByb2Nlc3Muc3Rkb3V0Lmhhc0NvbG9ycz8uKCkpLFxuICAgICAgZ2V0RXJySGFzQ29sb3JzOiAoKSA9PlxuICAgICAgICB1c2VDb2xvcigpID8/IChwcm9jZXNzLnN0ZGVyci5pc1RUWSAmJiBwcm9jZXNzLnN0ZGVyci5oYXNDb2xvcnM/LigpKSxcbiAgICAgIHN0cmlwQ29sb3I6IChzdHIpID0+IHN0cmlwQ29sb3Ioc3RyKSxcbiAgICB9O1xuXG4gICAgdGhpcy5faGlkZGVuID0gZmFsc2U7XG4gICAgLyoqIEB0eXBlIHsoT3B0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZCl9ICovXG4gICAgdGhpcy5faGVscE9wdGlvbiA9IHVuZGVmaW5lZDsgLy8gTGF6eSBjcmVhdGVkIG9uIGRlbWFuZC4gTWF5IGJlIG51bGwgaWYgaGVscCBvcHRpb24gaXMgZGlzYWJsZWQuXG4gICAgdGhpcy5fYWRkSW1wbGljaXRIZWxwQ29tbWFuZCA9IHVuZGVmaW5lZDsgLy8gdW5kZWNpZGVkIHdoZXRoZXIgdHJ1ZSBvciBmYWxzZSB5ZXQsIG5vdCBpbmhlcml0ZWRcbiAgICAvKiogQHR5cGUge0NvbW1hbmR9ICovXG4gICAgdGhpcy5faGVscENvbW1hbmQgPSB1bmRlZmluZWQ7IC8vIGxhenkgaW5pdGlhbGlzZWQsIGluaGVyaXRlZFxuICAgIHRoaXMuX2hlbHBDb25maWd1cmF0aW9uID0ge307XG4gICAgLyoqIEB0eXBlIHtzdHJpbmcgfCB1bmRlZmluZWR9ICovXG4gICAgdGhpcy5faGVscEdyb3VwSGVhZGluZyA9IHVuZGVmaW5lZDsgLy8gc29mdCBpbml0aWFsaXNlZCB3aGVuIGFkZGVkIHRvIHBhcmVudFxuICAgIC8qKiBAdHlwZSB7c3RyaW5nIHwgdW5kZWZpbmVkfSAqL1xuICAgIHRoaXMuX2RlZmF1bHRDb21tYW5kR3JvdXAgPSB1bmRlZmluZWQ7XG4gICAgLyoqIEB0eXBlIHtzdHJpbmcgfCB1bmRlZmluZWR9ICovXG4gICAgdGhpcy5fZGVmYXVsdE9wdGlvbkdyb3VwID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIENvcHkgc2V0dGluZ3MgdGhhdCBhcmUgdXNlZnVsIHRvIGhhdmUgaW4gY29tbW9uIGFjcm9zcyByb290IGNvbW1hbmQgYW5kIHN1YmNvbW1hbmRzLlxuICAgKlxuICAgKiAoVXNlZCBpbnRlcm5hbGx5IHdoZW4gYWRkaW5nIGEgY29tbWFuZCB1c2luZyBgLmNvbW1hbmQoKWAgc28gc3ViY29tbWFuZHMgaW5oZXJpdCBwYXJlbnQgc2V0dGluZ3MuKVxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IHNvdXJjZUNvbW1hbmRcbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBjb3B5SW5oZXJpdGVkU2V0dGluZ3Moc291cmNlQ29tbWFuZCkge1xuICAgIHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24gPSBzb3VyY2VDb21tYW5kLl9vdXRwdXRDb25maWd1cmF0aW9uO1xuICAgIHRoaXMuX2hlbHBPcHRpb24gPSBzb3VyY2VDb21tYW5kLl9oZWxwT3B0aW9uO1xuICAgIHRoaXMuX2hlbHBDb21tYW5kID0gc291cmNlQ29tbWFuZC5faGVscENvbW1hbmQ7XG4gICAgdGhpcy5faGVscENvbmZpZ3VyYXRpb24gPSBzb3VyY2VDb21tYW5kLl9oZWxwQ29uZmlndXJhdGlvbjtcbiAgICB0aGlzLl9leGl0Q2FsbGJhY2sgPSBzb3VyY2VDb21tYW5kLl9leGl0Q2FsbGJhY2s7XG4gICAgdGhpcy5fc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzID0gc291cmNlQ29tbWFuZC5fc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzO1xuICAgIHRoaXMuX2NvbWJpbmVGbGFnQW5kT3B0aW9uYWxWYWx1ZSA9XG4gICAgICBzb3VyY2VDb21tYW5kLl9jb21iaW5lRmxhZ0FuZE9wdGlvbmFsVmFsdWU7XG4gICAgdGhpcy5fYWxsb3dFeGNlc3NBcmd1bWVudHMgPSBzb3VyY2VDb21tYW5kLl9hbGxvd0V4Y2Vzc0FyZ3VtZW50cztcbiAgICB0aGlzLl9lbmFibGVQb3NpdGlvbmFsT3B0aW9ucyA9IHNvdXJjZUNvbW1hbmQuX2VuYWJsZVBvc2l0aW9uYWxPcHRpb25zO1xuICAgIHRoaXMuX3Nob3dIZWxwQWZ0ZXJFcnJvciA9IHNvdXJjZUNvbW1hbmQuX3Nob3dIZWxwQWZ0ZXJFcnJvcjtcbiAgICB0aGlzLl9zaG93U3VnZ2VzdGlvbkFmdGVyRXJyb3IgPSBzb3VyY2VDb21tYW5kLl9zaG93U3VnZ2VzdGlvbkFmdGVyRXJyb3I7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7Q29tbWFuZFtdfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfZ2V0Q29tbWFuZEFuZEFuY2VzdG9ycygpIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICBmb3IgKGxldCBjb21tYW5kID0gdGhpczsgY29tbWFuZDsgY29tbWFuZCA9IGNvbW1hbmQucGFyZW50KSB7XG4gICAgICByZXN1bHQucHVzaChjb21tYW5kKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmUgYSBjb21tYW5kLlxuICAgKlxuICAgKiBUaGVyZSBhcmUgdHdvIHN0eWxlcyBvZiBjb21tYW5kOiBwYXkgYXR0ZW50aW9uIHRvIHdoZXJlIHRvIHB1dCB0aGUgZGVzY3JpcHRpb24uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIENvbW1hbmQgaW1wbGVtZW50ZWQgdXNpbmcgYWN0aW9uIGhhbmRsZXIgKGRlc2NyaXB0aW9uIGlzIHN1cHBsaWVkIHNlcGFyYXRlbHkgdG8gYC5jb21tYW5kYClcbiAgICogcHJvZ3JhbVxuICAgKiAgIC5jb21tYW5kKCdjbG9uZSA8c291cmNlPiBbZGVzdGluYXRpb25dJylcbiAgICogICAuZGVzY3JpcHRpb24oJ2Nsb25lIGEgcmVwb3NpdG9yeSBpbnRvIGEgbmV3bHkgY3JlYXRlZCBkaXJlY3RvcnknKVxuICAgKiAgIC5hY3Rpb24oKHNvdXJjZSwgZGVzdGluYXRpb24pID0+IHtcbiAgICogICAgIGNvbnNvbGUubG9nKCdjbG9uZSBjb21tYW5kIGNhbGxlZCcpO1xuICAgKiAgIH0pO1xuICAgKlxuICAgKiAvLyBDb21tYW5kIGltcGxlbWVudGVkIHVzaW5nIHNlcGFyYXRlIGV4ZWN1dGFibGUgZmlsZSAoZGVzY3JpcHRpb24gaXMgc2Vjb25kIHBhcmFtZXRlciB0byBgLmNvbW1hbmRgKVxuICAgKiBwcm9ncmFtXG4gICAqICAgLmNvbW1hbmQoJ3N0YXJ0IDxzZXJ2aWNlPicsICdzdGFydCBuYW1lZCBzZXJ2aWNlJylcbiAgICogICAuY29tbWFuZCgnc3RvcCBbc2VydmljZV0nLCAnc3RvcCBuYW1lZCBzZXJ2aWNlLCBvciBhbGwgaWYgbm8gbmFtZSBzdXBwbGllZCcpO1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZUFuZEFyZ3MgLSBjb21tYW5kIG5hbWUgYW5kIGFyZ3VtZW50cywgYXJncyBhcmUgYDxyZXF1aXJlZD5gIG9yIGBbb3B0aW9uYWxdYCBhbmQgbGFzdCBtYXkgYWxzbyBiZSBgdmFyaWFkaWMuLi5gXG4gICAqIEBwYXJhbSB7KG9iamVjdCB8IHN0cmluZyl9IFthY3Rpb25PcHRzT3JFeGVjRGVzY10gLSBjb25maWd1cmF0aW9uIG9wdGlvbnMgKGZvciBhY3Rpb24pLCBvciBkZXNjcmlwdGlvbiAoZm9yIGV4ZWN1dGFibGUpXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbZXhlY09wdHNdIC0gY29uZmlndXJhdGlvbiBvcHRpb25zIChmb3IgZXhlY3V0YWJsZSlcbiAgICogQHJldHVybiB7Q29tbWFuZH0gcmV0dXJucyBuZXcgY29tbWFuZCBmb3IgYWN0aW9uIGhhbmRsZXIsIG9yIGB0aGlzYCBmb3IgZXhlY3V0YWJsZSBjb21tYW5kXG4gICAqL1xuXG4gIGNvbW1hbmQobmFtZUFuZEFyZ3MsIGFjdGlvbk9wdHNPckV4ZWNEZXNjLCBleGVjT3B0cykge1xuICAgIGxldCBkZXNjID0gYWN0aW9uT3B0c09yRXhlY0Rlc2M7XG4gICAgbGV0IG9wdHMgPSBleGVjT3B0cztcbiAgICBpZiAodHlwZW9mIGRlc2MgPT09ICdvYmplY3QnICYmIGRlc2MgIT09IG51bGwpIHtcbiAgICAgIG9wdHMgPSBkZXNjO1xuICAgICAgZGVzYyA9IG51bGw7XG4gICAgfVxuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuICAgIGNvbnN0IFssIG5hbWUsIGFyZ3NdID0gbmFtZUFuZEFyZ3MubWF0Y2goLyhbXiBdKykgKiguKikvKTtcblxuICAgIGNvbnN0IGNtZCA9IHRoaXMuY3JlYXRlQ29tbWFuZChuYW1lKTtcbiAgICBpZiAoZGVzYykge1xuICAgICAgY21kLmRlc2NyaXB0aW9uKGRlc2MpO1xuICAgICAgY21kLl9leGVjdXRhYmxlSGFuZGxlciA9IHRydWU7XG4gICAgfVxuICAgIGlmIChvcHRzLmlzRGVmYXVsdCkgdGhpcy5fZGVmYXVsdENvbW1hbmROYW1lID0gY21kLl9uYW1lO1xuICAgIGNtZC5faGlkZGVuID0gISEob3B0cy5ub0hlbHAgfHwgb3B0cy5oaWRkZW4pOyAvLyBub0hlbHAgaXMgZGVwcmVjYXRlZCBvbGQgbmFtZSBmb3IgaGlkZGVuXG4gICAgY21kLl9leGVjdXRhYmxlRmlsZSA9IG9wdHMuZXhlY3V0YWJsZUZpbGUgfHwgbnVsbDsgLy8gQ3VzdG9tIG5hbWUgZm9yIGV4ZWN1dGFibGUgZmlsZSwgc2V0IG1pc3NpbmcgdG8gbnVsbCB0byBtYXRjaCBjb25zdHJ1Y3RvclxuICAgIGlmIChhcmdzKSBjbWQuYXJndW1lbnRzKGFyZ3MpO1xuICAgIHRoaXMuX3JlZ2lzdGVyQ29tbWFuZChjbWQpO1xuICAgIGNtZC5wYXJlbnQgPSB0aGlzO1xuICAgIGNtZC5jb3B5SW5oZXJpdGVkU2V0dGluZ3ModGhpcyk7XG5cbiAgICBpZiAoZGVzYykgcmV0dXJuIHRoaXM7XG4gICAgcmV0dXJuIGNtZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWN0b3J5IHJvdXRpbmUgdG8gY3JlYXRlIGEgbmV3IHVuYXR0YWNoZWQgY29tbWFuZC5cbiAgICpcbiAgICogU2VlIC5jb21tYW5kKCkgZm9yIGNyZWF0aW5nIGFuIGF0dGFjaGVkIHN1YmNvbW1hbmQsIHdoaWNoIHVzZXMgdGhpcyByb3V0aW5lIHRvXG4gICAqIGNyZWF0ZSB0aGUgY29tbWFuZC4gWW91IGNhbiBvdmVycmlkZSBjcmVhdGVDb21tYW5kIHRvIGN1c3RvbWlzZSBzdWJjb21tYW5kcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtuYW1lXVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBuZXcgY29tbWFuZFxuICAgKi9cblxuICBjcmVhdGVDb21tYW5kKG5hbWUpIHtcbiAgICByZXR1cm4gbmV3IENvbW1hbmQobmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogWW91IGNhbiBjdXN0b21pc2UgdGhlIGhlbHAgd2l0aCBhIHN1YmNsYXNzIG9mIEhlbHAgYnkgb3ZlcnJpZGluZyBjcmVhdGVIZWxwLFxuICAgKiBvciBieSBvdmVycmlkaW5nIEhlbHAgcHJvcGVydGllcyB1c2luZyBjb25maWd1cmVIZWxwKCkuXG4gICAqXG4gICAqIEByZXR1cm4ge0hlbHB9XG4gICAqL1xuXG4gIGNyZWF0ZUhlbHAoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IEhlbHAoKSwgdGhpcy5jb25maWd1cmVIZWxwKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFlvdSBjYW4gY3VzdG9taXNlIHRoZSBoZWxwIGJ5IG92ZXJyaWRpbmcgSGVscCBwcm9wZXJ0aWVzIHVzaW5nIGNvbmZpZ3VyZUhlbHAoKSxcbiAgICogb3Igd2l0aCBhIHN1YmNsYXNzIG9mIEhlbHAgYnkgb3ZlcnJpZGluZyBjcmVhdGVIZWxwKCkuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbY29uZmlndXJhdGlvbl0gLSBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAgICogQHJldHVybiB7KENvbW1hbmQgfCBvYmplY3QpfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmcsIG9yIHN0b3JlZCBjb25maWd1cmF0aW9uXG4gICAqL1xuXG4gIGNvbmZpZ3VyZUhlbHAoY29uZmlndXJhdGlvbikge1xuICAgIGlmIChjb25maWd1cmF0aW9uID09PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLl9oZWxwQ29uZmlndXJhdGlvbjtcblxuICAgIHRoaXMuX2hlbHBDb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBvdXRwdXQgZ29lcyB0byBzdGRvdXQgYW5kIHN0ZGVyci4gWW91IGNhbiBjdXN0b21pc2UgdGhpcyBmb3Igc3BlY2lhbFxuICAgKiBhcHBsaWNhdGlvbnMuIFlvdSBjYW4gYWxzbyBjdXN0b21pc2UgdGhlIGRpc3BsYXkgb2YgZXJyb3JzIGJ5IG92ZXJyaWRpbmcgb3V0cHV0RXJyb3IuXG4gICAqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMgYXJlIGFsbCBmdW5jdGlvbnM6XG4gICAqXG4gICAqICAgICAvLyBjaGFuZ2UgaG93IG91dHB1dCBiZWluZyB3cml0dGVuLCBkZWZhdWx0cyB0byBzdGRvdXQgYW5kIHN0ZGVyclxuICAgKiAgICAgd3JpdGVPdXQoc3RyKVxuICAgKiAgICAgd3JpdGVFcnIoc3RyKVxuICAgKiAgICAgLy8gY2hhbmdlIGhvdyBvdXRwdXQgYmVpbmcgd3JpdHRlbiBmb3IgZXJyb3JzLCBkZWZhdWx0cyB0byB3cml0ZUVyclxuICAgKiAgICAgb3V0cHV0RXJyb3Ioc3RyLCB3cml0ZSkgLy8gdXNlZCBmb3IgZGlzcGxheWluZyBlcnJvcnMgYW5kIG5vdCB1c2VkIGZvciBkaXNwbGF5aW5nIGhlbHBcbiAgICogICAgIC8vIHNwZWNpZnkgd2lkdGggZm9yIHdyYXBwaW5nIGhlbHBcbiAgICogICAgIGdldE91dEhlbHBXaWR0aCgpXG4gICAqICAgICBnZXRFcnJIZWxwV2lkdGgoKVxuICAgKiAgICAgLy8gY29sb3Igc3VwcG9ydCwgY3VycmVudGx5IG9ubHkgdXNlZCB3aXRoIEhlbHBcbiAgICogICAgIGdldE91dEhhc0NvbG9ycygpXG4gICAqICAgICBnZXRFcnJIYXNDb2xvcnMoKVxuICAgKiAgICAgc3RyaXBDb2xvcigpIC8vIHVzZWQgdG8gcmVtb3ZlIEFOU0kgZXNjYXBlIGNvZGVzIGlmIG91dHB1dCBkb2VzIG5vdCBoYXZlIGNvbG9yc1xuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2NvbmZpZ3VyYXRpb25dIC0gY29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAqIEByZXR1cm4geyhDb21tYW5kIHwgb2JqZWN0KX0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nLCBvciBzdG9yZWQgY29uZmlndXJhdGlvblxuICAgKi9cblxuICBjb25maWd1cmVPdXRwdXQoY29uZmlndXJhdGlvbikge1xuICAgIGlmIChjb25maWd1cmF0aW9uID09PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uO1xuXG4gICAgdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbiA9IHtcbiAgICAgIC4uLnRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24sXG4gICAgICAuLi5jb25maWd1cmF0aW9uLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheSB0aGUgaGVscCBvciBhIGN1c3RvbSBtZXNzYWdlIGFmdGVyIGFuIGVycm9yIG9jY3Vycy5cbiAgICpcbiAgICogQHBhcmFtIHsoYm9vbGVhbnxzdHJpbmcpfSBbZGlzcGxheUhlbHBdXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgc2hvd0hlbHBBZnRlckVycm9yKGRpc3BsYXlIZWxwID0gdHJ1ZSkge1xuICAgIGlmICh0eXBlb2YgZGlzcGxheUhlbHAgIT09ICdzdHJpbmcnKSBkaXNwbGF5SGVscCA9ICEhZGlzcGxheUhlbHA7XG4gICAgdGhpcy5fc2hvd0hlbHBBZnRlckVycm9yID0gZGlzcGxheUhlbHA7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheSBzdWdnZXN0aW9uIG9mIHNpbWlsYXIgY29tbWFuZHMgZm9yIHVua25vd24gY29tbWFuZHMsIG9yIG9wdGlvbnMgZm9yIHVua25vd24gb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbZGlzcGxheVN1Z2dlc3Rpb25dXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgc2hvd1N1Z2dlc3Rpb25BZnRlckVycm9yKGRpc3BsYXlTdWdnZXN0aW9uID0gdHJ1ZSkge1xuICAgIHRoaXMuX3Nob3dTdWdnZXN0aW9uQWZ0ZXJFcnJvciA9ICEhZGlzcGxheVN1Z2dlc3Rpb247XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgcHJlcGFyZWQgc3ViY29tbWFuZC5cbiAgICpcbiAgICogU2VlIC5jb21tYW5kKCkgZm9yIGNyZWF0aW5nIGFuIGF0dGFjaGVkIHN1YmNvbW1hbmQgd2hpY2ggaW5oZXJpdHMgc2V0dGluZ3MgZnJvbSBpdHMgcGFyZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZCAtIG5ldyBzdWJjb21tYW5kXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0c10gLSBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIGFkZENvbW1hbmQoY21kLCBvcHRzKSB7XG4gICAgaWYgKCFjbWQuX25hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tbWFuZCBwYXNzZWQgdG8gLmFkZENvbW1hbmQoKSBtdXN0IGhhdmUgYSBuYW1lXG4tIHNwZWNpZnkgdGhlIG5hbWUgaW4gQ29tbWFuZCBjb25zdHJ1Y3RvciBvciB1c2luZyAubmFtZSgpYCk7XG4gICAgfVxuXG4gICAgb3B0cyA9IG9wdHMgfHwge307XG4gICAgaWYgKG9wdHMuaXNEZWZhdWx0KSB0aGlzLl9kZWZhdWx0Q29tbWFuZE5hbWUgPSBjbWQuX25hbWU7XG4gICAgaWYgKG9wdHMubm9IZWxwIHx8IG9wdHMuaGlkZGVuKSBjbWQuX2hpZGRlbiA9IHRydWU7IC8vIG1vZGlmeWluZyBwYXNzZWQgY29tbWFuZCBkdWUgdG8gZXhpc3RpbmcgaW1wbGVtZW50YXRpb25cblxuICAgIHRoaXMuX3JlZ2lzdGVyQ29tbWFuZChjbWQpO1xuICAgIGNtZC5wYXJlbnQgPSB0aGlzO1xuICAgIGNtZC5fY2hlY2tGb3JCcm9rZW5QYXNzVGhyb3VnaCgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogRmFjdG9yeSByb3V0aW5lIHRvIGNyZWF0ZSBhIG5ldyB1bmF0dGFjaGVkIGFyZ3VtZW50LlxuICAgKlxuICAgKiBTZWUgLmFyZ3VtZW50KCkgZm9yIGNyZWF0aW5nIGFuIGF0dGFjaGVkIGFyZ3VtZW50LCB3aGljaCB1c2VzIHRoaXMgcm91dGluZSB0b1xuICAgKiBjcmVhdGUgdGhlIGFyZ3VtZW50LiBZb3UgY2FuIG92ZXJyaWRlIGNyZWF0ZUFyZ3VtZW50IHRvIHJldHVybiBhIGN1c3RvbSBhcmd1bWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXNjcmlwdGlvbl1cbiAgICogQHJldHVybiB7QXJndW1lbnR9IG5ldyBhcmd1bWVudFxuICAgKi9cblxuICBjcmVhdGVBcmd1bWVudChuYW1lLCBkZXNjcmlwdGlvbikge1xuICAgIHJldHVybiBuZXcgQXJndW1lbnQobmFtZSwgZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZSBhcmd1bWVudCBzeW50YXggZm9yIGNvbW1hbmQuXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IGlzIHRoYXQgdGhlIGFyZ3VtZW50IGlzIHJlcXVpcmVkLCBhbmQgeW91IGNhbiBleHBsaWNpdGx5XG4gICAqIGluZGljYXRlIHRoaXMgd2l0aCA8PiBhcm91bmQgdGhlIG5hbWUuIFB1dCBbXSBhcm91bmQgdGhlIG5hbWUgZm9yIGFuIG9wdGlvbmFsIGFyZ3VtZW50LlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwcm9ncmFtLmFyZ3VtZW50KCc8aW5wdXQtZmlsZT4nKTtcbiAgICogcHJvZ3JhbS5hcmd1bWVudCgnW291dHB1dC1maWxlXScpO1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXVxuICAgKiBAcGFyYW0geyhGdW5jdGlvbnwqKX0gW3BhcnNlQXJnXSAtIGN1c3RvbSBhcmd1bWVudCBwcm9jZXNzaW5nIGZ1bmN0aW9uIG9yIGRlZmF1bHQgdmFsdWVcbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIGFyZ3VtZW50KG5hbWUsIGRlc2NyaXB0aW9uLCBwYXJzZUFyZywgZGVmYXVsdFZhbHVlKSB7XG4gICAgY29uc3QgYXJndW1lbnQgPSB0aGlzLmNyZWF0ZUFyZ3VtZW50KG5hbWUsIGRlc2NyaXB0aW9uKTtcbiAgICBpZiAodHlwZW9mIHBhcnNlQXJnID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhcmd1bWVudC5kZWZhdWx0KGRlZmF1bHRWYWx1ZSkuYXJnUGFyc2VyKHBhcnNlQXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXJndW1lbnQuZGVmYXVsdChwYXJzZUFyZyk7XG4gICAgfVxuICAgIHRoaXMuYWRkQXJndW1lbnQoYXJndW1lbnQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZSBhcmd1bWVudCBzeW50YXggZm9yIGNvbW1hbmQsIGFkZGluZyBtdWx0aXBsZSBhdCBvbmNlICh3aXRob3V0IGRlc2NyaXB0aW9ucykuXG4gICAqXG4gICAqIFNlZSBhbHNvIC5hcmd1bWVudCgpLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwcm9ncmFtLmFyZ3VtZW50cygnPGNtZD4gW2Vudl0nKTtcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVzXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBhcmd1bWVudHMobmFtZXMpIHtcbiAgICBuYW1lc1xuICAgICAgLnRyaW0oKVxuICAgICAgLnNwbGl0KC8gKy8pXG4gICAgICAuZm9yRWFjaCgoZGV0YWlsKSA9PiB7XG4gICAgICAgIHRoaXMuYXJndW1lbnQoZGV0YWlsKTtcbiAgICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZSBhcmd1bWVudCBzeW50YXggZm9yIGNvbW1hbmQsIGFkZGluZyBhIHByZXBhcmVkIGFyZ3VtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge0FyZ3VtZW50fSBhcmd1bWVudFxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIGFkZEFyZ3VtZW50KGFyZ3VtZW50KSB7XG4gICAgY29uc3QgcHJldmlvdXNBcmd1bWVudCA9IHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cy5zbGljZSgtMSlbMF07XG4gICAgaWYgKHByZXZpb3VzQXJndW1lbnQ/LnZhcmlhZGljKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBvbmx5IHRoZSBsYXN0IGFyZ3VtZW50IGNhbiBiZSB2YXJpYWRpYyAnJHtwcmV2aW91c0FyZ3VtZW50Lm5hbWUoKX0nYCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGFyZ3VtZW50LnJlcXVpcmVkICYmXG4gICAgICBhcmd1bWVudC5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgYXJndW1lbnQucGFyc2VBcmcgPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgYSBkZWZhdWx0IHZhbHVlIGZvciBhIHJlcXVpcmVkIGFyZ3VtZW50IGlzIG5ldmVyIHVzZWQ6ICcke2FyZ3VtZW50Lm5hbWUoKX0nYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cy5wdXNoKGFyZ3VtZW50KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDdXN0b21pc2Ugb3Igb3ZlcnJpZGUgZGVmYXVsdCBoZWxwIGNvbW1hbmQuIEJ5IGRlZmF1bHQgYSBoZWxwIGNvbW1hbmQgaXMgYXV0b21hdGljYWxseSBhZGRlZCBpZiB5b3VyIGNvbW1hbmQgaGFzIHN1YmNvbW1hbmRzLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAgICBwcm9ncmFtLmhlbHBDb21tYW5kKCdoZWxwIFtjbWRdJyk7XG4gICAqICAgIHByb2dyYW0uaGVscENvbW1hbmQoJ2hlbHAgW2NtZF0nLCAnc2hvdyBoZWxwJyk7XG4gICAqICAgIHByb2dyYW0uaGVscENvbW1hbmQoZmFsc2UpOyAvLyBzdXBwcmVzcyBkZWZhdWx0IGhlbHAgY29tbWFuZFxuICAgKiAgICBwcm9ncmFtLmhlbHBDb21tYW5kKHRydWUpOyAvLyBhZGQgaGVscCBjb21tYW5kIGV2ZW4gaWYgbm8gc3ViY29tbWFuZHNcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8Ym9vbGVhbn0gZW5hYmxlT3JOYW1lQW5kQXJncyAtIGVuYWJsZSB3aXRoIGN1c3RvbSBuYW1lIGFuZC9vciBhcmd1bWVudHMsIG9yIGJvb2xlYW4gdG8gb3ZlcnJpZGUgd2hldGhlciBhZGRlZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXSAtIGN1c3RvbSBkZXNjcmlwdGlvblxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgaGVscENvbW1hbmQoZW5hYmxlT3JOYW1lQW5kQXJncywgZGVzY3JpcHRpb24pIHtcbiAgICBpZiAodHlwZW9mIGVuYWJsZU9yTmFtZUFuZEFyZ3MgPT09ICdib29sZWFuJykge1xuICAgICAgdGhpcy5fYWRkSW1wbGljaXRIZWxwQ29tbWFuZCA9IGVuYWJsZU9yTmFtZUFuZEFyZ3M7XG4gICAgICBpZiAoZW5hYmxlT3JOYW1lQW5kQXJncyAmJiB0aGlzLl9kZWZhdWx0Q29tbWFuZEdyb3VwKSB7XG4gICAgICAgIC8vIG1ha2UgdGhlIGNvbW1hbmQgdG8gc3RvcmUgdGhlIGdyb3VwXG4gICAgICAgIHRoaXMuX2luaXRDb21tYW5kR3JvdXAodGhpcy5fZ2V0SGVscENvbW1hbmQoKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBjb25zdCBuYW1lQW5kQXJncyA9IGVuYWJsZU9yTmFtZUFuZEFyZ3MgPz8gJ2hlbHAgW2NvbW1hbmRdJztcbiAgICBjb25zdCBbLCBoZWxwTmFtZSwgaGVscEFyZ3NdID0gbmFtZUFuZEFyZ3MubWF0Y2goLyhbXiBdKykgKiguKikvKTtcbiAgICBjb25zdCBoZWxwRGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbiA/PyAnZGlzcGxheSBoZWxwIGZvciBjb21tYW5kJztcblxuICAgIGNvbnN0IGhlbHBDb21tYW5kID0gdGhpcy5jcmVhdGVDb21tYW5kKGhlbHBOYW1lKTtcbiAgICBoZWxwQ29tbWFuZC5oZWxwT3B0aW9uKGZhbHNlKTtcbiAgICBpZiAoaGVscEFyZ3MpIGhlbHBDb21tYW5kLmFyZ3VtZW50cyhoZWxwQXJncyk7XG4gICAgaWYgKGhlbHBEZXNjcmlwdGlvbikgaGVscENvbW1hbmQuZGVzY3JpcHRpb24oaGVscERlc2NyaXB0aW9uKTtcblxuICAgIHRoaXMuX2FkZEltcGxpY2l0SGVscENvbW1hbmQgPSB0cnVlO1xuICAgIHRoaXMuX2hlbHBDb21tYW5kID0gaGVscENvbW1hbmQ7XG4gICAgLy8gaW5pdCBncm91cCB1bmxlc3MgbGF6eSBjcmVhdGVcbiAgICBpZiAoZW5hYmxlT3JOYW1lQW5kQXJncyB8fCBkZXNjcmlwdGlvbikgdGhpcy5faW5pdENvbW1hbmRHcm91cChoZWxwQ29tbWFuZCk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgcHJlcGFyZWQgY3VzdG9tIGhlbHAgY29tbWFuZC5cbiAgICpcbiAgICogQHBhcmFtIHsoQ29tbWFuZHxzdHJpbmd8Ym9vbGVhbil9IGhlbHBDb21tYW5kIC0gY3VzdG9tIGhlbHAgY29tbWFuZCwgb3IgZGVwcmVjYXRlZCBlbmFibGVPck5hbWVBbmRBcmdzIGFzIGZvciBgLmhlbHBDb21tYW5kKClgXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVwcmVjYXRlZERlc2NyaXB0aW9uXSAtIGRlcHJlY2F0ZWQgY3VzdG9tIGRlc2NyaXB0aW9uIHVzZWQgd2l0aCBjdXN0b20gbmFtZSBvbmx5XG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgYWRkSGVscENvbW1hbmQoaGVscENvbW1hbmQsIGRlcHJlY2F0ZWREZXNjcmlwdGlvbikge1xuICAgIC8vIElmIG5vdCBwYXNzZWQgYW4gb2JqZWN0LCBjYWxsIHRocm91Z2ggdG8gaGVscENvbW1hbmQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LFxuICAgIC8vIGFzIGFkZEhlbHBDb21tYW5kIHdhcyBvcmlnaW5hbGx5IHVzZWQgbGlrZSBoZWxwQ29tbWFuZCBpcyBub3cuXG4gICAgaWYgKHR5cGVvZiBoZWxwQ29tbWFuZCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRoaXMuaGVscENvbW1hbmQoaGVscENvbW1hbmQsIGRlcHJlY2F0ZWREZXNjcmlwdGlvbik7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB0aGlzLl9hZGRJbXBsaWNpdEhlbHBDb21tYW5kID0gdHJ1ZTtcbiAgICB0aGlzLl9oZWxwQ29tbWFuZCA9IGhlbHBDb21tYW5kO1xuICAgIHRoaXMuX2luaXRDb21tYW5kR3JvdXAoaGVscENvbW1hbmQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIExhenkgY3JlYXRlIGhlbHAgY29tbWFuZC5cbiAgICpcbiAgICogQHJldHVybiB7KENvbW1hbmR8bnVsbCl9XG4gICAqIEBwYWNrYWdlXG4gICAqL1xuICBfZ2V0SGVscENvbW1hbmQoKSB7XG4gICAgY29uc3QgaGFzSW1wbGljaXRIZWxwQ29tbWFuZCA9XG4gICAgICB0aGlzLl9hZGRJbXBsaWNpdEhlbHBDb21tYW5kID8/XG4gICAgICAodGhpcy5jb21tYW5kcy5sZW5ndGggJiZcbiAgICAgICAgIXRoaXMuX2FjdGlvbkhhbmRsZXIgJiZcbiAgICAgICAgIXRoaXMuX2ZpbmRDb21tYW5kKCdoZWxwJykpO1xuXG4gICAgaWYgKGhhc0ltcGxpY2l0SGVscENvbW1hbmQpIHtcbiAgICAgIGlmICh0aGlzLl9oZWxwQ29tbWFuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuaGVscENvbW1hbmQodW5kZWZpbmVkLCB1bmRlZmluZWQpOyAvLyB1c2UgZGVmYXVsdCBuYW1lIGFuZCBkZXNjcmlwdGlvblxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuX2hlbHBDb21tYW5kO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgaG9vayBmb3IgbGlmZSBjeWNsZSBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50XG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBob29rKGV2ZW50LCBsaXN0ZW5lcikge1xuICAgIGNvbnN0IGFsbG93ZWRWYWx1ZXMgPSBbJ3ByZVN1YmNvbW1hbmQnLCAncHJlQWN0aW9uJywgJ3Bvc3RBY3Rpb24nXTtcbiAgICBpZiAoIWFsbG93ZWRWYWx1ZXMuaW5jbHVkZXMoZXZlbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgdmFsdWUgZm9yIGV2ZW50IHBhc3NlZCB0byBob29rIDogJyR7ZXZlbnR9Jy5cbkV4cGVjdGluZyBvbmUgb2YgJyR7YWxsb3dlZFZhbHVlcy5qb2luKFwiJywgJ1wiKX0nYCk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9saWZlQ3ljbGVIb29rc1tldmVudF0pIHtcbiAgICAgIHRoaXMuX2xpZmVDeWNsZUhvb2tzW2V2ZW50XS5wdXNoKGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGlmZUN5Y2xlSG9va3NbZXZlbnRdID0gW2xpc3RlbmVyXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgY2FsbGJhY2sgdG8gdXNlIGFzIHJlcGxhY2VtZW50IGZvciBjYWxsaW5nIHByb2Nlc3MuZXhpdC5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2ZuXSBvcHRpb25hbCBjYWxsYmFjayB3aGljaCB3aWxsIGJlIHBhc3NlZCBhIENvbW1hbmRlckVycm9yLCBkZWZhdWx0cyB0byB0aHJvd2luZ1xuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgZXhpdE92ZXJyaWRlKGZuKSB7XG4gICAgaWYgKGZuKSB7XG4gICAgICB0aGlzLl9leGl0Q2FsbGJhY2sgPSBmbjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZXhpdENhbGxiYWNrID0gKGVycikgPT4ge1xuICAgICAgICBpZiAoZXJyLmNvZGUgIT09ICdjb21tYW5kZXIuZXhlY3V0ZVN1YkNvbW1hbmRBc3luYycpIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQXN5bmMgY2FsbGJhY2sgZnJvbSBzcGF3biBldmVudHMsIG5vdCB1c2VmdWwgdG8gdGhyb3cuXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGwgcHJvY2Vzcy5leGl0LCBhbmQgX2V4aXRDYWxsYmFjayBpZiBkZWZpbmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZXhpdENvZGUgZXhpdCBjb2RlIGZvciB1c2luZyB3aXRoIHByb2Nlc3MuZXhpdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZSBhbiBpZCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBlcnJvclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgZXJyb3JcbiAgICogQHJldHVybiBuZXZlclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfZXhpdChleGl0Q29kZSwgY29kZSwgbWVzc2FnZSkge1xuICAgIGlmICh0aGlzLl9leGl0Q2FsbGJhY2spIHtcbiAgICAgIHRoaXMuX2V4aXRDYWxsYmFjayhuZXcgQ29tbWFuZGVyRXJyb3IoZXhpdENvZGUsIGNvZGUsIG1lc3NhZ2UpKTtcbiAgICAgIC8vIEV4cGVjdGluZyB0aGlzIGxpbmUgaXMgbm90IHJlYWNoZWQuXG4gICAgfVxuICAgIHByb2Nlc3MuZXhpdChleGl0Q29kZSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgY2FsbGJhY2sgYGZuYCBmb3IgdGhlIGNvbW1hbmQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHByb2dyYW1cbiAgICogICAuY29tbWFuZCgnc2VydmUnKVxuICAgKiAgIC5kZXNjcmlwdGlvbignc3RhcnQgc2VydmljZScpXG4gICAqICAgLmFjdGlvbihmdW5jdGlvbigpIHtcbiAgICogICAgICAvLyBkbyB3b3JrIGhlcmVcbiAgICogICB9KTtcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIGFjdGlvbihmbikge1xuICAgIGNvbnN0IGxpc3RlbmVyID0gKGFyZ3MpID0+IHtcbiAgICAgIC8vIFRoZSAuYWN0aW9uIGNhbGxiYWNrIHRha2VzIGFuIGV4dHJhIHBhcmFtZXRlciB3aGljaCBpcyB0aGUgY29tbWFuZCBvciBvcHRpb25zLlxuICAgICAgY29uc3QgZXhwZWN0ZWRBcmdzQ291bnQgPSB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMubGVuZ3RoO1xuICAgICAgY29uc3QgYWN0aW9uQXJncyA9IGFyZ3Muc2xpY2UoMCwgZXhwZWN0ZWRBcmdzQ291bnQpO1xuICAgICAgaWYgKHRoaXMuX3N0b3JlT3B0aW9uc0FzUHJvcGVydGllcykge1xuICAgICAgICBhY3Rpb25BcmdzW2V4cGVjdGVkQXJnc0NvdW50XSA9IHRoaXM7IC8vIGJhY2t3YXJkcyBjb21wYXRpYmxlIFwib3B0aW9uc1wiXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3Rpb25BcmdzW2V4cGVjdGVkQXJnc0NvdW50XSA9IHRoaXMub3B0cygpO1xuICAgICAgfVxuICAgICAgYWN0aW9uQXJncy5wdXNoKHRoaXMpO1xuXG4gICAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYWN0aW9uQXJncyk7XG4gICAgfTtcbiAgICB0aGlzLl9hY3Rpb25IYW5kbGVyID0gbGlzdGVuZXI7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogRmFjdG9yeSByb3V0aW5lIHRvIGNyZWF0ZSBhIG5ldyB1bmF0dGFjaGVkIG9wdGlvbi5cbiAgICpcbiAgICogU2VlIC5vcHRpb24oKSBmb3IgY3JlYXRpbmcgYW4gYXR0YWNoZWQgb3B0aW9uLCB3aGljaCB1c2VzIHRoaXMgcm91dGluZSB0b1xuICAgKiBjcmVhdGUgdGhlIG9wdGlvbi4gWW91IGNhbiBvdmVycmlkZSBjcmVhdGVPcHRpb24gdG8gcmV0dXJuIGEgY3VzdG9tIG9wdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZsYWdzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dXG4gICAqIEByZXR1cm4ge09wdGlvbn0gbmV3IG9wdGlvblxuICAgKi9cblxuICBjcmVhdGVPcHRpb24oZmxhZ3MsIGRlc2NyaXB0aW9uKSB7XG4gICAgcmV0dXJuIG5ldyBPcHRpb24oZmxhZ3MsIGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwIHBhcnNlQXJncyB0byBjYXRjaCAnY29tbWFuZGVyLmludmFsaWRBcmd1bWVudCcuXG4gICAqXG4gICAqIEBwYXJhbSB7KE9wdGlvbiB8IEFyZ3VtZW50KX0gdGFyZ2V0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICAgKiBAcGFyYW0geyp9IHByZXZpb3VzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpbnZhbGlkQXJndW1lbnRNZXNzYWdlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9jYWxsUGFyc2VBcmcodGFyZ2V0LCB2YWx1ZSwgcHJldmlvdXMsIGludmFsaWRBcmd1bWVudE1lc3NhZ2UpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRhcmdldC5wYXJzZUFyZyh2YWx1ZSwgcHJldmlvdXMpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnY29tbWFuZGVyLmludmFsaWRBcmd1bWVudCcpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGAke2ludmFsaWRBcmd1bWVudE1lc3NhZ2V9ICR7ZXJyLm1lc3NhZ2V9YDtcbiAgICAgICAgdGhpcy5lcnJvcihtZXNzYWdlLCB7IGV4aXRDb2RlOiBlcnIuZXhpdENvZGUsIGNvZGU6IGVyci5jb2RlIH0pO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBmb3Igb3B0aW9uIGZsYWcgY29uZmxpY3RzLlxuICAgKiBSZWdpc3RlciBvcHRpb24gaWYgbm8gY29uZmxpY3RzIGZvdW5kLCBvciB0aHJvdyBvbiBjb25mbGljdC5cbiAgICpcbiAgICogQHBhcmFtIHtPcHRpb259IG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfcmVnaXN0ZXJPcHRpb24ob3B0aW9uKSB7XG4gICAgY29uc3QgbWF0Y2hpbmdPcHRpb24gPVxuICAgICAgKG9wdGlvbi5zaG9ydCAmJiB0aGlzLl9maW5kT3B0aW9uKG9wdGlvbi5zaG9ydCkpIHx8XG4gICAgICAob3B0aW9uLmxvbmcgJiYgdGhpcy5fZmluZE9wdGlvbihvcHRpb24ubG9uZykpO1xuICAgIGlmIChtYXRjaGluZ09wdGlvbikge1xuICAgICAgY29uc3QgbWF0Y2hpbmdGbGFnID1cbiAgICAgICAgb3B0aW9uLmxvbmcgJiYgdGhpcy5fZmluZE9wdGlvbihvcHRpb24ubG9uZylcbiAgICAgICAgICA/IG9wdGlvbi5sb25nXG4gICAgICAgICAgOiBvcHRpb24uc2hvcnQ7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBhZGQgb3B0aW9uICcke29wdGlvbi5mbGFnc30nJHt0aGlzLl9uYW1lICYmIGAgdG8gY29tbWFuZCAnJHt0aGlzLl9uYW1lfSdgfSBkdWUgdG8gY29uZmxpY3RpbmcgZmxhZyAnJHttYXRjaGluZ0ZsYWd9J1xuLSAgYWxyZWFkeSB1c2VkIGJ5IG9wdGlvbiAnJHttYXRjaGluZ09wdGlvbi5mbGFnc30nYCk7XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdE9wdGlvbkdyb3VwKG9wdGlvbik7XG4gICAgdGhpcy5vcHRpb25zLnB1c2gob3B0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBmb3IgY29tbWFuZCBuYW1lIGFuZCBhbGlhcyBjb25mbGljdHMgd2l0aCBleGlzdGluZyBjb21tYW5kcy5cbiAgICogUmVnaXN0ZXIgY29tbWFuZCBpZiBubyBjb25mbGljdHMgZm91bmQsIG9yIHRocm93IG9uIGNvbmZsaWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNvbW1hbmRcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX3JlZ2lzdGVyQ29tbWFuZChjb21tYW5kKSB7XG4gICAgY29uc3Qga25vd25CeSA9IChjbWQpID0+IHtcbiAgICAgIHJldHVybiBbY21kLm5hbWUoKV0uY29uY2F0KGNtZC5hbGlhc2VzKCkpO1xuICAgIH07XG5cbiAgICBjb25zdCBhbHJlYWR5VXNlZCA9IGtub3duQnkoY29tbWFuZCkuZmluZCgobmFtZSkgPT5cbiAgICAgIHRoaXMuX2ZpbmRDb21tYW5kKG5hbWUpLFxuICAgICk7XG4gICAgaWYgKGFscmVhZHlVc2VkKSB7XG4gICAgICBjb25zdCBleGlzdGluZ0NtZCA9IGtub3duQnkodGhpcy5fZmluZENvbW1hbmQoYWxyZWFkeVVzZWQpKS5qb2luKCd8Jyk7XG4gICAgICBjb25zdCBuZXdDbWQgPSBrbm93bkJ5KGNvbW1hbmQpLmpvaW4oJ3wnKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYGNhbm5vdCBhZGQgY29tbWFuZCAnJHtuZXdDbWR9JyBhcyBhbHJlYWR5IGhhdmUgY29tbWFuZCAnJHtleGlzdGluZ0NtZH0nYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdENvbW1hbmRHcm91cChjb21tYW5kKTtcbiAgICB0aGlzLmNvbW1hbmRzLnB1c2goY29tbWFuZCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIG9wdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtPcHRpb259IG9wdGlvblxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIGFkZE9wdGlvbihvcHRpb24pIHtcbiAgICB0aGlzLl9yZWdpc3Rlck9wdGlvbihvcHRpb24pO1xuXG4gICAgY29uc3Qgb25hbWUgPSBvcHRpb24ubmFtZSgpO1xuICAgIGNvbnN0IG5hbWUgPSBvcHRpb24uYXR0cmlidXRlTmFtZSgpO1xuXG4gICAgLy8gc3RvcmUgZGVmYXVsdCB2YWx1ZVxuICAgIGlmIChvcHRpb24ubmVnYXRlKSB7XG4gICAgICAvLyAtLW5vLWZvbyBpcyBzcGVjaWFsIGFuZCBkZWZhdWx0cyBmb28gdG8gdHJ1ZSwgdW5sZXNzIGEgLS1mb28gb3B0aW9uIGlzIGFscmVhZHkgZGVmaW5lZFxuICAgICAgY29uc3QgcG9zaXRpdmVMb25nRmxhZyA9IG9wdGlvbi5sb25nLnJlcGxhY2UoL14tLW5vLS8sICctLScpO1xuICAgICAgaWYgKCF0aGlzLl9maW5kT3B0aW9uKHBvc2l0aXZlTG9uZ0ZsYWcpKSB7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9uVmFsdWVXaXRoU291cmNlKFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgb3B0aW9uLmRlZmF1bHRWYWx1ZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG9wdGlvbi5kZWZhdWx0VmFsdWUsXG4gICAgICAgICAgJ2RlZmF1bHQnLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob3B0aW9uLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNldE9wdGlvblZhbHVlV2l0aFNvdXJjZShuYW1lLCBvcHRpb24uZGVmYXVsdFZhbHVlLCAnZGVmYXVsdCcpO1xuICAgIH1cblxuICAgIC8vIGhhbmRsZXIgZm9yIGNsaSBhbmQgZW52IHN1cHBsaWVkIHZhbHVlc1xuICAgIGNvbnN0IGhhbmRsZU9wdGlvblZhbHVlID0gKHZhbCwgaW52YWxpZFZhbHVlTWVzc2FnZSwgdmFsdWVTb3VyY2UpID0+IHtcbiAgICAgIC8vIHZhbCBpcyBudWxsIGZvciBvcHRpb25hbCBvcHRpb24gdXNlZCB3aXRob3V0IGFuIG9wdGlvbmFsLWFyZ3VtZW50LlxuICAgICAgLy8gdmFsIGlzIHVuZGVmaW5lZCBmb3IgYm9vbGVhbiBhbmQgbmVnYXRlZCBvcHRpb24uXG4gICAgICBpZiAodmFsID09IG51bGwgJiYgb3B0aW9uLnByZXNldEFyZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbCA9IG9wdGlvbi5wcmVzZXRBcmc7XG4gICAgICB9XG5cbiAgICAgIC8vIGN1c3RvbSBwcm9jZXNzaW5nXG4gICAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuZ2V0T3B0aW9uVmFsdWUobmFtZSk7XG4gICAgICBpZiAodmFsICE9PSBudWxsICYmIG9wdGlvbi5wYXJzZUFyZykge1xuICAgICAgICB2YWwgPSB0aGlzLl9jYWxsUGFyc2VBcmcob3B0aW9uLCB2YWwsIG9sZFZhbHVlLCBpbnZhbGlkVmFsdWVNZXNzYWdlKTtcbiAgICAgIH0gZWxzZSBpZiAodmFsICE9PSBudWxsICYmIG9wdGlvbi52YXJpYWRpYykge1xuICAgICAgICB2YWwgPSBvcHRpb24uX2NvbGxlY3RWYWx1ZSh2YWwsIG9sZFZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgLy8gRmlsbC1pbiBhcHByb3ByaWF0ZSBtaXNzaW5nIHZhbHVlcy4gTG9uZyB3aW5kZWQgYnV0IGVhc3kgdG8gZm9sbG93LlxuICAgICAgaWYgKHZhbCA9PSBudWxsKSB7XG4gICAgICAgIGlmIChvcHRpb24ubmVnYXRlKSB7XG4gICAgICAgICAgdmFsID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9uLmlzQm9vbGVhbigpIHx8IG9wdGlvbi5vcHRpb25hbCkge1xuICAgICAgICAgIHZhbCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsID0gJyc7IC8vIG5vdCBub3JtYWwsIHBhcnNlQXJnIG1pZ2h0IGhhdmUgZmFpbGVkIG9yIGJlIGEgbW9jayBmdW5jdGlvbiBmb3IgdGVzdGluZ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnNldE9wdGlvblZhbHVlV2l0aFNvdXJjZShuYW1lLCB2YWwsIHZhbHVlU291cmNlKTtcbiAgICB9O1xuXG4gICAgdGhpcy5vbignb3B0aW9uOicgKyBvbmFtZSwgKHZhbCkgPT4ge1xuICAgICAgY29uc3QgaW52YWxpZFZhbHVlTWVzc2FnZSA9IGBlcnJvcjogb3B0aW9uICcke29wdGlvbi5mbGFnc30nIGFyZ3VtZW50ICcke3ZhbH0nIGlzIGludmFsaWQuYDtcbiAgICAgIGhhbmRsZU9wdGlvblZhbHVlKHZhbCwgaW52YWxpZFZhbHVlTWVzc2FnZSwgJ2NsaScpO1xuICAgIH0pO1xuXG4gICAgaWYgKG9wdGlvbi5lbnZWYXIpIHtcbiAgICAgIHRoaXMub24oJ29wdGlvbkVudjonICsgb25hbWUsICh2YWwpID0+IHtcbiAgICAgICAgY29uc3QgaW52YWxpZFZhbHVlTWVzc2FnZSA9IGBlcnJvcjogb3B0aW9uICcke29wdGlvbi5mbGFnc30nIHZhbHVlICcke3ZhbH0nIGZyb20gZW52ICcke29wdGlvbi5lbnZWYXJ9JyBpcyBpbnZhbGlkLmA7XG4gICAgICAgIGhhbmRsZU9wdGlvblZhbHVlKHZhbCwgaW52YWxpZFZhbHVlTWVzc2FnZSwgJ2VudicpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gc2hhcmVkIGJ5IC5vcHRpb24oKSBhbmQgLnJlcXVpcmVkT3B0aW9uKClcbiAgICpcbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfb3B0aW9uRXgoY29uZmlnLCBmbGFncywgZGVzY3JpcHRpb24sIGZuLCBkZWZhdWx0VmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIGZsYWdzID09PSAnb2JqZWN0JyAmJiBmbGFncyBpbnN0YW5jZW9mIE9wdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnVG8gYWRkIGFuIE9wdGlvbiBvYmplY3QgdXNlIGFkZE9wdGlvbigpIGluc3RlYWQgb2Ygb3B0aW9uKCkgb3IgcmVxdWlyZWRPcHRpb24oKScsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBvcHRpb24gPSB0aGlzLmNyZWF0ZU9wdGlvbihmbGFncywgZGVzY3JpcHRpb24pO1xuICAgIG9wdGlvbi5tYWtlT3B0aW9uTWFuZGF0b3J5KCEhY29uZmlnLm1hbmRhdG9yeSk7XG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb3B0aW9uLmRlZmF1bHQoZGVmYXVsdFZhbHVlKS5hcmdQYXJzZXIoZm4pO1xuICAgIH0gZWxzZSBpZiAoZm4gaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIC8vIGRlcHJlY2F0ZWRcbiAgICAgIGNvbnN0IHJlZ2V4ID0gZm47XG4gICAgICBmbiA9ICh2YWwsIGRlZikgPT4ge1xuICAgICAgICBjb25zdCBtID0gcmVnZXguZXhlYyh2YWwpO1xuICAgICAgICByZXR1cm4gbSA/IG1bMF0gOiBkZWY7XG4gICAgICB9O1xuICAgICAgb3B0aW9uLmRlZmF1bHQoZGVmYXVsdFZhbHVlKS5hcmdQYXJzZXIoZm4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb24uZGVmYXVsdChmbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYWRkT3B0aW9uKG9wdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lIG9wdGlvbiB3aXRoIGBmbGFnc2AsIGBkZXNjcmlwdGlvbmAsIGFuZCBvcHRpb25hbCBhcmd1bWVudCBwYXJzaW5nIGZ1bmN0aW9uIG9yIGBkZWZhdWx0VmFsdWVgIG9yIGJvdGguXG4gICAqXG4gICAqIFRoZSBgZmxhZ3NgIHN0cmluZyBjb250YWlucyB0aGUgc2hvcnQgYW5kL29yIGxvbmcgZmxhZ3MsIHNlcGFyYXRlZCBieSBjb21tYSwgYSBwaXBlIG9yIHNwYWNlLiBBIHJlcXVpcmVkXG4gICAqIG9wdGlvbi1hcmd1bWVudCBpcyBpbmRpY2F0ZWQgYnkgYDw+YCBhbmQgYW4gb3B0aW9uYWwgb3B0aW9uLWFyZ3VtZW50IGJ5IGBbXWAuXG4gICAqXG4gICAqIFNlZSB0aGUgUkVBRE1FIGZvciBtb3JlIGRldGFpbHMsIGFuZCBzZWUgYWxzbyBhZGRPcHRpb24oKSBhbmQgcmVxdWlyZWRPcHRpb24oKS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcHJvZ3JhbVxuICAgKiAgICAgLm9wdGlvbignLXAsIC0tcGVwcGVyJywgJ2FkZCBwZXBwZXInKVxuICAgKiAgICAgLm9wdGlvbignLS1wdCwgLS1waXp6YS10eXBlIDxUWVBFPicsICd0eXBlIG9mIHBpenphJykgLy8gcmVxdWlyZWQgb3B0aW9uLWFyZ3VtZW50XG4gICAqICAgICAub3B0aW9uKCctYywgLS1jaGVlc2UgW0NIRUVTRV0nLCAnYWRkIGV4dHJhIGNoZWVzZScsICdtb3p6YXJlbGxhJykgLy8gb3B0aW9uYWwgb3B0aW9uLWFyZ3VtZW50IHdpdGggZGVmYXVsdFxuICAgKiAgICAgLm9wdGlvbignLXQsIC0tdGlwIDxWQUxVRT4nLCAnYWRkIHRpcCB0byBwdXJjaGFzZSBjb3N0JywgcGFyc2VGbG9hdCkgLy8gY3VzdG9tIHBhcnNlIGZ1bmN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmbGFnc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXVxuICAgKiBAcGFyYW0geyhGdW5jdGlvbnwqKX0gW3BhcnNlQXJnXSAtIGN1c3RvbSBvcHRpb24gcHJvY2Vzc2luZyBmdW5jdGlvbiBvciBkZWZhdWx0IHZhbHVlXG4gICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV1cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIG9wdGlvbihmbGFncywgZGVzY3JpcHRpb24sIHBhcnNlQXJnLCBkZWZhdWx0VmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9uRXgoe30sIGZsYWdzLCBkZXNjcmlwdGlvbiwgcGFyc2VBcmcsIGRlZmF1bHRWYWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgcmVxdWlyZWQgb3B0aW9uIHdoaWNoIG11c3QgaGF2ZSBhIHZhbHVlIGFmdGVyIHBhcnNpbmcuIFRoaXMgdXN1YWxseSBtZWFuc1xuICAgKiB0aGUgb3B0aW9uIG11c3QgYmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuIChPdGhlcndpc2UgdGhlIHNhbWUgYXMgLm9wdGlvbigpLilcbiAgICpcbiAgICogVGhlIGBmbGFnc2Agc3RyaW5nIGNvbnRhaW5zIHRoZSBzaG9ydCBhbmQvb3IgbG9uZyBmbGFncywgc2VwYXJhdGVkIGJ5IGNvbW1hLCBhIHBpcGUgb3Igc3BhY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmbGFnc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXVxuICAgKiBAcGFyYW0geyhGdW5jdGlvbnwqKX0gW3BhcnNlQXJnXSAtIGN1c3RvbSBvcHRpb24gcHJvY2Vzc2luZyBmdW5jdGlvbiBvciBkZWZhdWx0IHZhbHVlXG4gICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV1cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIHJlcXVpcmVkT3B0aW9uKGZsYWdzLCBkZXNjcmlwdGlvbiwgcGFyc2VBcmcsIGRlZmF1bHRWYWx1ZSkge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25FeChcbiAgICAgIHsgbWFuZGF0b3J5OiB0cnVlIH0sXG4gICAgICBmbGFncyxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgcGFyc2VBcmcsXG4gICAgICBkZWZhdWx0VmFsdWUsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbHRlciBwYXJzaW5nIG9mIHNob3J0IGZsYWdzIHdpdGggb3B0aW9uYWwgdmFsdWVzLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBmb3IgYC5vcHRpb24oJy1mLC0tZmxhZyBbdmFsdWVdJyk6XG4gICAqIHByb2dyYW0uY29tYmluZUZsYWdBbmRPcHRpb25hbFZhbHVlKHRydWUpOyAgLy8gYC1mODBgIGlzIHRyZWF0ZWQgbGlrZSBgLS1mbGFnPTgwYCwgdGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvdXJcbiAgICogcHJvZ3JhbS5jb21iaW5lRmxhZ0FuZE9wdGlvbmFsVmFsdWUoZmFsc2UpIC8vIGAtZmJgIGlzIHRyZWF0ZWQgbGlrZSBgLWYgLWJgXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvbWJpbmVdIC0gaWYgYHRydWVgIG9yIG9taXR0ZWQsIGFuIG9wdGlvbmFsIHZhbHVlIGNhbiBiZSBzcGVjaWZpZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIGZsYWcuXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgY29tYmluZUZsYWdBbmRPcHRpb25hbFZhbHVlKGNvbWJpbmUgPSB0cnVlKSB7XG4gICAgdGhpcy5fY29tYmluZUZsYWdBbmRPcHRpb25hbFZhbHVlID0gISFjb21iaW5lO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IHVua25vd24gb3B0aW9ucyBvbiB0aGUgY29tbWFuZCBsaW5lLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthbGxvd1Vua25vd25dIC0gaWYgYHRydWVgIG9yIG9taXR0ZWQsIG5vIGVycm9yIHdpbGwgYmUgdGhyb3duIGZvciB1bmtub3duIG9wdGlvbnMuXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgYWxsb3dVbmtub3duT3B0aW9uKGFsbG93VW5rbm93biA9IHRydWUpIHtcbiAgICB0aGlzLl9hbGxvd1Vua25vd25PcHRpb24gPSAhIWFsbG93VW5rbm93bjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyBleGNlc3MgY29tbWFuZC1hcmd1bWVudHMgb24gdGhlIGNvbW1hbmQgbGluZS4gUGFzcyBmYWxzZSB0byBtYWtlIGV4Y2VzcyBhcmd1bWVudHMgYW4gZXJyb3IuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FsbG93RXhjZXNzXSAtIGlmIGB0cnVlYCBvciBvbWl0dGVkLCBubyBlcnJvciB3aWxsIGJlIHRocm93biBmb3IgZXhjZXNzIGFyZ3VtZW50cy5cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBhbGxvd0V4Y2Vzc0FyZ3VtZW50cyhhbGxvd0V4Y2VzcyA9IHRydWUpIHtcbiAgICB0aGlzLl9hbGxvd0V4Y2Vzc0FyZ3VtZW50cyA9ICEhYWxsb3dFeGNlc3M7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlIHBvc2l0aW9uYWwgb3B0aW9ucy4gUG9zaXRpb25hbCBtZWFucyBnbG9iYWwgb3B0aW9ucyBhcmUgc3BlY2lmaWVkIGJlZm9yZSBzdWJjb21tYW5kcyB3aGljaCBsZXRzXG4gICAqIHN1YmNvbW1hbmRzIHJldXNlIHRoZSBzYW1lIG9wdGlvbiBuYW1lcywgYW5kIGFsc28gZW5hYmxlcyBzdWJjb21tYW5kcyB0byB0dXJuIG9uIHBhc3NUaHJvdWdoT3B0aW9ucy5cbiAgICogVGhlIGRlZmF1bHQgYmVoYXZpb3VyIGlzIG5vbi1wb3NpdGlvbmFsIGFuZCBnbG9iYWwgb3B0aW9ucyBtYXkgYXBwZWFyIGFueXdoZXJlIG9uIHRoZSBjb21tYW5kIGxpbmUuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Bvc2l0aW9uYWxdXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgZW5hYmxlUG9zaXRpb25hbE9wdGlvbnMocG9zaXRpb25hbCA9IHRydWUpIHtcbiAgICB0aGlzLl9lbmFibGVQb3NpdGlvbmFsT3B0aW9ucyA9ICEhcG9zaXRpb25hbDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXNzIHRocm91Z2ggb3B0aW9ucyB0aGF0IGNvbWUgYWZ0ZXIgY29tbWFuZC1hcmd1bWVudHMgcmF0aGVyIHRoYW4gdHJlYXQgdGhlbSBhcyBjb21tYW5kLW9wdGlvbnMsXG4gICAqIHNvIGFjdHVhbCBjb21tYW5kLW9wdGlvbnMgY29tZSBiZWZvcmUgY29tbWFuZC1hcmd1bWVudHMuIFR1cm5pbmcgdGhpcyBvbiBmb3IgYSBzdWJjb21tYW5kIHJlcXVpcmVzXG4gICAqIHBvc2l0aW9uYWwgb3B0aW9ucyB0byBoYXZlIGJlZW4gZW5hYmxlZCBvbiB0aGUgcHJvZ3JhbSAocGFyZW50IGNvbW1hbmRzKS5cbiAgICogVGhlIGRlZmF1bHQgYmVoYXZpb3VyIGlzIG5vbi1wb3NpdGlvbmFsIGFuZCBvcHRpb25zIG1heSBhcHBlYXIgYmVmb3JlIG9yIGFmdGVyIGNvbW1hbmQtYXJndW1lbnRzLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtwYXNzVGhyb3VnaF0gZm9yIHVua25vd24gb3B0aW9ucy5cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBwYXNzVGhyb3VnaE9wdGlvbnMocGFzc1Rocm91Z2ggPSB0cnVlKSB7XG4gICAgdGhpcy5fcGFzc1Rocm91Z2hPcHRpb25zID0gISFwYXNzVGhyb3VnaDtcbiAgICB0aGlzLl9jaGVja0ZvckJyb2tlblBhc3NUaHJvdWdoKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2NoZWNrRm9yQnJva2VuUGFzc1Rocm91Z2goKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5wYXJlbnQgJiZcbiAgICAgIHRoaXMuX3Bhc3NUaHJvdWdoT3B0aW9ucyAmJlxuICAgICAgIXRoaXMucGFyZW50Ll9lbmFibGVQb3NpdGlvbmFsT3B0aW9uc1xuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgcGFzc1Rocm91Z2hPcHRpb25zIGNhbm5vdCBiZSB1c2VkIGZvciAnJHt0aGlzLl9uYW1lfScgd2l0aG91dCB0dXJuaW5nIG9uIGVuYWJsZVBvc2l0aW9uYWxPcHRpb25zIGZvciBwYXJlbnQgY29tbWFuZChzKWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHN0b3JlIG9wdGlvbiB2YWx1ZXMgYXMgcHJvcGVydGllcyBvbiBjb21tYW5kIG9iamVjdCxcbiAgICogb3Igc3RvcmUgc2VwYXJhdGVseSAoc3BlY2lmeSBmYWxzZSkuIEluIGJvdGggY2FzZXMgdGhlIG9wdGlvbiB2YWx1ZXMgY2FuIGJlIGFjY2Vzc2VkIHVzaW5nIC5vcHRzKCkuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3N0b3JlQXNQcm9wZXJ0aWVzPXRydWVdXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBzdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMoc3RvcmVBc1Byb3BlcnRpZXMgPSB0cnVlKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY2FsbCAuc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzKCkgYmVmb3JlIGFkZGluZyBvcHRpb25zJyk7XG4gICAgfVxuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLl9vcHRpb25WYWx1ZXMpLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnY2FsbCAuc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzKCkgYmVmb3JlIHNldHRpbmcgb3B0aW9uIHZhbHVlcycsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLl9zdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMgPSAhIXN0b3JlQXNQcm9wZXJ0aWVzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIG9wdGlvbiB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKiBAcmV0dXJuIHtvYmplY3R9IHZhbHVlXG4gICAqL1xuXG4gIGdldE9wdGlvblZhbHVlKGtleSkge1xuICAgIGlmICh0aGlzLl9zdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMpIHtcbiAgICAgIHJldHVybiB0aGlzW2tleV07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9vcHRpb25WYWx1ZXNba2V5XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZSBvcHRpb24gdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHBhcmFtIHtvYmplY3R9IHZhbHVlXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBzZXRPcHRpb25WYWx1ZShrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9uVmFsdWVXaXRoU291cmNlKGtleSwgdmFsdWUsIHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKipcbiAgICogU3RvcmUgb3B0aW9uIHZhbHVlIGFuZCB3aGVyZSB0aGUgdmFsdWUgY2FtZSBmcm9tLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gZXhwZWN0ZWQgdmFsdWVzIGFyZSBkZWZhdWx0L2NvbmZpZy9lbnYvY2xpL2ltcGxpZWRcbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIHNldE9wdGlvblZhbHVlV2l0aFNvdXJjZShrZXksIHZhbHVlLCBzb3VyY2UpIHtcbiAgICBpZiAodGhpcy5fc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzKSB7XG4gICAgICB0aGlzW2tleV0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fb3B0aW9uVmFsdWVzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgdGhpcy5fb3B0aW9uVmFsdWVTb3VyY2VzW2tleV0gPSBzb3VyY2U7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNvdXJjZSBvZiBvcHRpb24gdmFsdWUuXG4gICAqIEV4cGVjdGVkIHZhbHVlcyBhcmUgZGVmYXVsdCB8IGNvbmZpZyB8IGVudiB8IGNsaSB8IGltcGxpZWRcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG4gIGdldE9wdGlvblZhbHVlU291cmNlKGtleSkge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25WYWx1ZVNvdXJjZXNba2V5XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc291cmNlIG9mIG9wdGlvbiB2YWx1ZS4gU2VlIGFsc28gLm9wdHNXaXRoR2xvYmFscygpLlxuICAgKiBFeHBlY3RlZCB2YWx1ZXMgYXJlIGRlZmF1bHQgfCBjb25maWcgfCBlbnYgfCBjbGkgfCBpbXBsaWVkXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuICBnZXRPcHRpb25WYWx1ZVNvdXJjZVdpdGhHbG9iYWxzKGtleSkge1xuICAgIC8vIGdsb2JhbCBvdmVyd3JpdGVzIGxvY2FsLCBsaWtlIG9wdHNXaXRoR2xvYmFsc1xuICAgIGxldCBzb3VyY2U7XG4gICAgdGhpcy5fZ2V0Q29tbWFuZEFuZEFuY2VzdG9ycygpLmZvckVhY2goKGNtZCkgPT4ge1xuICAgICAgaWYgKGNtZC5nZXRPcHRpb25WYWx1ZVNvdXJjZShrZXkpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc291cmNlID0gY21kLmdldE9wdGlvblZhbHVlU291cmNlKGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdXNlciBhcmd1bWVudHMgZnJvbSBpbXBsaWVkIG9yIGV4cGxpY2l0IGFyZ3VtZW50cy5cbiAgICogU2lkZS1lZmZlY3RzOiBzZXQgX3NjcmlwdFBhdGggaWYgYXJncyBpbmNsdWRlZCBzY3JpcHQuIFVzZWQgZm9yIGRlZmF1bHQgcHJvZ3JhbSBuYW1lLCBhbmQgc3ViY29tbWFuZCBzZWFyY2hlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX3ByZXBhcmVVc2VyQXJncyhhcmd2LCBwYXJzZU9wdGlvbnMpIHtcbiAgICBpZiAoYXJndiAhPT0gdW5kZWZpbmVkICYmICFBcnJheS5pc0FycmF5KGFyZ3YpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZpcnN0IHBhcmFtZXRlciB0byBwYXJzZSBtdXN0IGJlIGFycmF5IG9yIHVuZGVmaW5lZCcpO1xuICAgIH1cbiAgICBwYXJzZU9wdGlvbnMgPSBwYXJzZU9wdGlvbnMgfHwge307XG5cbiAgICAvLyBhdXRvLWRldGVjdCBhcmd1bWVudCBjb252ZW50aW9ucyBpZiBub3RoaW5nIHN1cHBsaWVkXG4gICAgaWYgKGFyZ3YgPT09IHVuZGVmaW5lZCAmJiBwYXJzZU9wdGlvbnMuZnJvbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAocHJvY2Vzcy52ZXJzaW9ucz8uZWxlY3Ryb24pIHtcbiAgICAgICAgcGFyc2VPcHRpb25zLmZyb20gPSAnZWxlY3Ryb24nO1xuICAgICAgfVxuICAgICAgLy8gY2hlY2sgbm9kZSBzcGVjaWZpYyBvcHRpb25zIGZvciBzY2VuYXJpb3Mgd2hlcmUgdXNlciBDTEkgYXJncyBmb2xsb3cgZXhlY3V0YWJsZSB3aXRob3V0IHNjcmlwdG5hbWVcbiAgICAgIGNvbnN0IGV4ZWNBcmd2ID0gcHJvY2Vzcy5leGVjQXJndiA/PyBbXTtcbiAgICAgIGlmIChcbiAgICAgICAgZXhlY0FyZ3YuaW5jbHVkZXMoJy1lJykgfHxcbiAgICAgICAgZXhlY0FyZ3YuaW5jbHVkZXMoJy0tZXZhbCcpIHx8XG4gICAgICAgIGV4ZWNBcmd2LmluY2x1ZGVzKCctcCcpIHx8XG4gICAgICAgIGV4ZWNBcmd2LmluY2x1ZGVzKCctLXByaW50JylcbiAgICAgICkge1xuICAgICAgICBwYXJzZU9wdGlvbnMuZnJvbSA9ICdldmFsJzsgLy8gaW50ZXJuYWwgdXNhZ2UsIG5vdCBkb2N1bWVudGVkXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGVmYXVsdCB0byB1c2luZyBwcm9jZXNzLmFyZ3ZcbiAgICBpZiAoYXJndiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBhcmd2ID0gcHJvY2Vzcy5hcmd2O1xuICAgIH1cbiAgICB0aGlzLnJhd0FyZ3MgPSBhcmd2LnNsaWNlKCk7XG5cbiAgICAvLyBleHRyYWN0IHRoZSB1c2VyIGFyZ3MgYW5kIHNjcmlwdFBhdGhcbiAgICBsZXQgdXNlckFyZ3M7XG4gICAgc3dpdGNoIChwYXJzZU9wdGlvbnMuZnJvbSkge1xuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICBjYXNlICdub2RlJzpcbiAgICAgICAgdGhpcy5fc2NyaXB0UGF0aCA9IGFyZ3ZbMV07XG4gICAgICAgIHVzZXJBcmdzID0gYXJndi5zbGljZSgyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdlbGVjdHJvbic6XG4gICAgICAgIC8vIEB0cy1pZ25vcmU6IGJlY2F1c2UgZGVmYXVsdEFwcCBpcyBhbiB1bmtub3duIHByb3BlcnR5XG4gICAgICAgIGlmIChwcm9jZXNzLmRlZmF1bHRBcHApIHtcbiAgICAgICAgICB0aGlzLl9zY3JpcHRQYXRoID0gYXJndlsxXTtcbiAgICAgICAgICB1c2VyQXJncyA9IGFyZ3Yuc2xpY2UoMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdXNlckFyZ3MgPSBhcmd2LnNsaWNlKDEpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndXNlcic6XG4gICAgICAgIHVzZXJBcmdzID0gYXJndi5zbGljZSgwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdldmFsJzpcbiAgICAgICAgdXNlckFyZ3MgPSBhcmd2LnNsaWNlKDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgdW5leHBlY3RlZCBwYXJzZSBvcHRpb24geyBmcm9tOiAnJHtwYXJzZU9wdGlvbnMuZnJvbX0nIH1gLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIEZpbmQgZGVmYXVsdCBuYW1lIGZvciBwcm9ncmFtIGZyb20gYXJndW1lbnRzLlxuICAgIGlmICghdGhpcy5fbmFtZSAmJiB0aGlzLl9zY3JpcHRQYXRoKVxuICAgICAgdGhpcy5uYW1lRnJvbUZpbGVuYW1lKHRoaXMuX3NjcmlwdFBhdGgpO1xuICAgIHRoaXMuX25hbWUgPSB0aGlzLl9uYW1lIHx8ICdwcm9ncmFtJztcblxuICAgIHJldHVybiB1c2VyQXJncztcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBgYXJndmAsIHNldHRpbmcgb3B0aW9ucyBhbmQgaW52b2tpbmcgY29tbWFuZHMgd2hlbiBkZWZpbmVkLlxuICAgKlxuICAgKiBVc2UgcGFyc2VBc3luYyBpbnN0ZWFkIG9mIHBhcnNlIGlmIGFueSBvZiB5b3VyIGFjdGlvbiBoYW5kbGVycyBhcmUgYXN5bmMuXG4gICAqXG4gICAqIENhbGwgd2l0aCBubyBwYXJhbWV0ZXJzIHRvIHBhcnNlIGBwcm9jZXNzLmFyZ3ZgLiBEZXRlY3RzIEVsZWN0cm9uIGFuZCBzcGVjaWFsIG5vZGUgb3B0aW9ucyBsaWtlIGBub2RlIC0tZXZhbGAuIEVhc3kgbW9kZSFcbiAgICpcbiAgICogT3IgY2FsbCB3aXRoIGFuIGFycmF5IG9mIHN0cmluZ3MgdG8gcGFyc2UsIGFuZCBvcHRpb25hbGx5IHdoZXJlIHRoZSB1c2VyIGFyZ3VtZW50cyBzdGFydCBieSBzcGVjaWZ5aW5nIHdoZXJlIHRoZSBhcmd1bWVudHMgYXJlIGBmcm9tYDpcbiAgICogLSBgJ25vZGUnYDogZGVmYXVsdCwgYGFyZ3ZbMF1gIGlzIHRoZSBhcHBsaWNhdGlvbiBhbmQgYGFyZ3ZbMV1gIGlzIHRoZSBzY3JpcHQgYmVpbmcgcnVuLCB3aXRoIHVzZXIgYXJndW1lbnRzIGFmdGVyIHRoYXRcbiAgICogLSBgJ2VsZWN0cm9uJ2A6IGBhcmd2WzBdYCBpcyB0aGUgYXBwbGljYXRpb24gYW5kIGBhcmd2WzFdYCB2YXJpZXMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGVsZWN0cm9uIGFwcGxpY2F0aW9uIGlzIHBhY2thZ2VkXG4gICAqIC0gYCd1c2VyJ2A6IGp1c3QgdXNlciBhcmd1bWVudHNcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcHJvZ3JhbS5wYXJzZSgpOyAvLyBwYXJzZSBwcm9jZXNzLmFyZ3YgYW5kIGF1dG8tZGV0ZWN0IGVsZWN0cm9uIGFuZCBzcGVjaWFsIG5vZGUgZmxhZ3NcbiAgICogcHJvZ3JhbS5wYXJzZShwcm9jZXNzLmFyZ3YpOyAvLyBhc3N1bWUgYXJndlswXSBpcyBhcHAgYW5kIGFyZ3ZbMV0gaXMgc2NyaXB0XG4gICAqIHByb2dyYW0ucGFyc2UobXktYXJncywgeyBmcm9tOiAndXNlcicgfSk7IC8vIGp1c3QgdXNlciBzdXBwbGllZCBhcmd1bWVudHMsIG5vdGhpbmcgc3BlY2lhbCBhYm91dCBhcmd2WzBdXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IFthcmd2XSAtIG9wdGlvbmFsLCBkZWZhdWx0cyB0byBwcm9jZXNzLmFyZ3ZcbiAgICogQHBhcmFtIHtvYmplY3R9IFtwYXJzZU9wdGlvbnNdIC0gb3B0aW9uYWxseSBzcGVjaWZ5IHN0eWxlIG9mIG9wdGlvbnMgd2l0aCBmcm9tOiBub2RlL3VzZXIvZWxlY3Ryb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXJzZU9wdGlvbnMuZnJvbV0gLSB3aGVyZSB0aGUgYXJncyBhcmUgZnJvbTogJ25vZGUnLCAndXNlcicsICdlbGVjdHJvbidcbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIHBhcnNlKGFyZ3YsIHBhcnNlT3B0aW9ucykge1xuICAgIHRoaXMuX3ByZXBhcmVGb3JQYXJzZSgpO1xuICAgIGNvbnN0IHVzZXJBcmdzID0gdGhpcy5fcHJlcGFyZVVzZXJBcmdzKGFyZ3YsIHBhcnNlT3B0aW9ucyk7XG4gICAgdGhpcy5fcGFyc2VDb21tYW5kKFtdLCB1c2VyQXJncyk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBgYXJndmAsIHNldHRpbmcgb3B0aW9ucyBhbmQgaW52b2tpbmcgY29tbWFuZHMgd2hlbiBkZWZpbmVkLlxuICAgKlxuICAgKiBDYWxsIHdpdGggbm8gcGFyYW1ldGVycyB0byBwYXJzZSBgcHJvY2Vzcy5hcmd2YC4gRGV0ZWN0cyBFbGVjdHJvbiBhbmQgc3BlY2lhbCBub2RlIG9wdGlvbnMgbGlrZSBgbm9kZSAtLWV2YWxgLiBFYXN5IG1vZGUhXG4gICAqXG4gICAqIE9yIGNhbGwgd2l0aCBhbiBhcnJheSBvZiBzdHJpbmdzIHRvIHBhcnNlLCBhbmQgb3B0aW9uYWxseSB3aGVyZSB0aGUgdXNlciBhcmd1bWVudHMgc3RhcnQgYnkgc3BlY2lmeWluZyB3aGVyZSB0aGUgYXJndW1lbnRzIGFyZSBgZnJvbWA6XG4gICAqIC0gYCdub2RlJ2A6IGRlZmF1bHQsIGBhcmd2WzBdYCBpcyB0aGUgYXBwbGljYXRpb24gYW5kIGBhcmd2WzFdYCBpcyB0aGUgc2NyaXB0IGJlaW5nIHJ1biwgd2l0aCB1c2VyIGFyZ3VtZW50cyBhZnRlciB0aGF0XG4gICAqIC0gYCdlbGVjdHJvbidgOiBgYXJndlswXWAgaXMgdGhlIGFwcGxpY2F0aW9uIGFuZCBgYXJndlsxXWAgdmFyaWVzIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBlbGVjdHJvbiBhcHBsaWNhdGlvbiBpcyBwYWNrYWdlZFxuICAgKiAtIGAndXNlcidgOiBqdXN0IHVzZXIgYXJndW1lbnRzXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGF3YWl0IHByb2dyYW0ucGFyc2VBc3luYygpOyAvLyBwYXJzZSBwcm9jZXNzLmFyZ3YgYW5kIGF1dG8tZGV0ZWN0IGVsZWN0cm9uIGFuZCBzcGVjaWFsIG5vZGUgZmxhZ3NcbiAgICogYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKHByb2Nlc3MuYXJndik7IC8vIGFzc3VtZSBhcmd2WzBdIGlzIGFwcCBhbmQgYXJndlsxXSBpcyBzY3JpcHRcbiAgICogYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKG15LWFyZ3MsIHsgZnJvbTogJ3VzZXInIH0pOyAvLyBqdXN0IHVzZXIgc3VwcGxpZWQgYXJndW1lbnRzLCBub3RoaW5nIHNwZWNpYWwgYWJvdXQgYXJndlswXVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbYXJndl1cbiAgICogQHBhcmFtIHtvYmplY3R9IFtwYXJzZU9wdGlvbnNdXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJzZU9wdGlvbnMuZnJvbSAtIHdoZXJlIHRoZSBhcmdzIGFyZSBmcm9tOiAnbm9kZScsICd1c2VyJywgJ2VsZWN0cm9uJ1xuICAgKiBAcmV0dXJuIHtQcm9taXNlfVxuICAgKi9cblxuICBhc3luYyBwYXJzZUFzeW5jKGFyZ3YsIHBhcnNlT3B0aW9ucykge1xuICAgIHRoaXMuX3ByZXBhcmVGb3JQYXJzZSgpO1xuICAgIGNvbnN0IHVzZXJBcmdzID0gdGhpcy5fcHJlcGFyZVVzZXJBcmdzKGFyZ3YsIHBhcnNlT3B0aW9ucyk7XG4gICAgYXdhaXQgdGhpcy5fcGFyc2VDb21tYW5kKFtdLCB1c2VyQXJncyk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIF9wcmVwYXJlRm9yUGFyc2UoKSB7XG4gICAgaWYgKHRoaXMuX3NhdmVkU3RhdGUgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuc2F2ZVN0YXRlQmVmb3JlUGFyc2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZXN0b3JlU3RhdGVCZWZvcmVQYXJzZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgdGhlIGZpcnN0IHRpbWUgcGFyc2UgaXMgY2FsbGVkIHRvIHNhdmUgc3RhdGUgYW5kIGFsbG93IGEgcmVzdG9yZSBiZWZvcmUgc3Vic2VxdWVudCBjYWxscyB0byBwYXJzZS5cbiAgICogTm90IHVzdWFsbHkgY2FsbGVkIGRpcmVjdGx5LCBidXQgYXZhaWxhYmxlIGZvciBzdWJjbGFzc2VzIHRvIHNhdmUgdGhlaXIgY3VzdG9tIHN0YXRlLlxuICAgKlxuICAgKiBUaGlzIGlzIGNhbGxlZCBpbiBhIGxhenkgd2F5LiBPbmx5IGNvbW1hbmRzIHVzZWQgaW4gcGFyc2luZyBjaGFpbiB3aWxsIGhhdmUgc3RhdGUgc2F2ZWQuXG4gICAqL1xuICBzYXZlU3RhdGVCZWZvcmVQYXJzZSgpIHtcbiAgICB0aGlzLl9zYXZlZFN0YXRlID0ge1xuICAgICAgLy8gbmFtZSBpcyBzdGFibGUgaWYgc3VwcGxpZWQgYnkgYXV0aG9yLCBidXQgbWF5IGJlIHVuc3BlY2lmaWVkIGZvciByb290IGNvbW1hbmQgYW5kIGRlZHVjZWQgZHVyaW5nIHBhcnNpbmdcbiAgICAgIF9uYW1lOiB0aGlzLl9uYW1lLFxuICAgICAgLy8gb3B0aW9uIHZhbHVlcyBiZWZvcmUgcGFyc2UgaGF2ZSBkZWZhdWx0IHZhbHVlcyAoaW5jbHVkaW5nIGZhbHNlIGZvciBuZWdhdGVkIG9wdGlvbnMpXG4gICAgICAvLyBzaGFsbG93IGNsb25lc1xuICAgICAgX29wdGlvblZhbHVlczogeyAuLi50aGlzLl9vcHRpb25WYWx1ZXMgfSxcbiAgICAgIF9vcHRpb25WYWx1ZVNvdXJjZXM6IHsgLi4udGhpcy5fb3B0aW9uVmFsdWVTb3VyY2VzIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlIHN0YXRlIGJlZm9yZSBwYXJzZSBmb3IgY2FsbHMgYWZ0ZXIgdGhlIGZpcnN0LlxuICAgKiBOb3QgdXN1YWxseSBjYWxsZWQgZGlyZWN0bHksIGJ1dCBhdmFpbGFibGUgZm9yIHN1YmNsYXNzZXMgdG8gc2F2ZSB0aGVpciBjdXN0b20gc3RhdGUuXG4gICAqXG4gICAqIFRoaXMgaXMgY2FsbGVkIGluIGEgbGF6eSB3YXkuIE9ubHkgY29tbWFuZHMgdXNlZCBpbiBwYXJzaW5nIGNoYWluIHdpbGwgaGF2ZSBzdGF0ZSByZXN0b3JlZC5cbiAgICovXG4gIHJlc3RvcmVTdGF0ZUJlZm9yZVBhcnNlKCkge1xuICAgIGlmICh0aGlzLl9zdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbiBub3QgY2FsbCBwYXJzZSBhZ2FpbiB3aGVuIHN0b3JlT3B0aW9uc0FzUHJvcGVydGllcyBpcyB0cnVlLlxuLSBlaXRoZXIgbWFrZSBhIG5ldyBDb21tYW5kIGZvciBlYWNoIGNhbGwgdG8gcGFyc2UsIG9yIHN0b3Agc3RvcmluZyBvcHRpb25zIGFzIHByb3BlcnRpZXNgKTtcblxuICAgIC8vIGNsZWFyIHN0YXRlIGZyb20gX3ByZXBhcmVVc2VyQXJnc1xuICAgIHRoaXMuX25hbWUgPSB0aGlzLl9zYXZlZFN0YXRlLl9uYW1lO1xuICAgIHRoaXMuX3NjcmlwdFBhdGggPSBudWxsO1xuICAgIHRoaXMucmF3QXJncyA9IFtdO1xuICAgIC8vIGNsZWFyIHN0YXRlIGZyb20gc2V0T3B0aW9uVmFsdWVXaXRoU291cmNlXG4gICAgdGhpcy5fb3B0aW9uVmFsdWVzID0geyAuLi50aGlzLl9zYXZlZFN0YXRlLl9vcHRpb25WYWx1ZXMgfTtcbiAgICB0aGlzLl9vcHRpb25WYWx1ZVNvdXJjZXMgPSB7IC4uLnRoaXMuX3NhdmVkU3RhdGUuX29wdGlvblZhbHVlU291cmNlcyB9O1xuICAgIC8vIGNsZWFyIHN0YXRlIGZyb20gX3BhcnNlQ29tbWFuZFxuICAgIHRoaXMuYXJncyA9IFtdO1xuICAgIC8vIGNsZWFyIHN0YXRlIGZyb20gX3Byb2Nlc3NBcmd1bWVudHNcbiAgICB0aGlzLnByb2Nlc3NlZEFyZ3MgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvdyBpZiBleHBlY3RlZCBleGVjdXRhYmxlIGlzIG1pc3NpbmcuIEFkZCBsb3RzIG9mIGhlbHAgZm9yIGF1dGhvci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4ZWN1dGFibGVGaWxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleGVjdXRhYmxlRGlyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdWJjb21tYW5kTmFtZVxuICAgKi9cbiAgX2NoZWNrRm9yTWlzc2luZ0V4ZWN1dGFibGUoZXhlY3V0YWJsZUZpbGUsIGV4ZWN1dGFibGVEaXIsIHN1YmNvbW1hbmROYW1lKSB7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoZXhlY3V0YWJsZUZpbGUpKSByZXR1cm47XG5cbiAgICBjb25zdCBleGVjdXRhYmxlRGlyTWVzc2FnZSA9IGV4ZWN1dGFibGVEaXJcbiAgICAgID8gYHNlYXJjaGVkIGZvciBsb2NhbCBzdWJjb21tYW5kIHJlbGF0aXZlIHRvIGRpcmVjdG9yeSAnJHtleGVjdXRhYmxlRGlyfSdgXG4gICAgICA6ICdubyBkaXJlY3RvcnkgZm9yIHNlYXJjaCBmb3IgbG9jYWwgc3ViY29tbWFuZCwgdXNlIC5leGVjdXRhYmxlRGlyKCkgdG8gc3VwcGx5IGEgY3VzdG9tIGRpcmVjdG9yeSc7XG4gICAgY29uc3QgZXhlY3V0YWJsZU1pc3NpbmcgPSBgJyR7ZXhlY3V0YWJsZUZpbGV9JyBkb2VzIG5vdCBleGlzdFxuIC0gaWYgJyR7c3ViY29tbWFuZE5hbWV9JyBpcyBub3QgbWVhbnQgdG8gYmUgYW4gZXhlY3V0YWJsZSBjb21tYW5kLCByZW1vdmUgZGVzY3JpcHRpb24gcGFyYW1ldGVyIGZyb20gJy5jb21tYW5kKCknIGFuZCB1c2UgJy5kZXNjcmlwdGlvbigpJyBpbnN0ZWFkXG4gLSBpZiB0aGUgZGVmYXVsdCBleGVjdXRhYmxlIG5hbWUgaXMgbm90IHN1aXRhYmxlLCB1c2UgdGhlIGV4ZWN1dGFibGVGaWxlIG9wdGlvbiB0byBzdXBwbHkgYSBjdXN0b20gbmFtZSBvciBwYXRoXG4gLSAke2V4ZWN1dGFibGVEaXJNZXNzYWdlfWA7XG4gICAgdGhyb3cgbmV3IEVycm9yKGV4ZWN1dGFibGVNaXNzaW5nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgc3ViLWNvbW1hbmQgZXhlY3V0YWJsZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2V4ZWN1dGVTdWJDb21tYW5kKHN1YmNvbW1hbmQsIGFyZ3MpIHtcbiAgICBhcmdzID0gYXJncy5zbGljZSgpO1xuICAgIGxldCBsYXVuY2hXaXRoTm9kZSA9IGZhbHNlOyAvLyBVc2Ugbm9kZSBmb3Igc291cmNlIHRhcmdldHMgc28gZG8gbm90IG5lZWQgdG8gZ2V0IHBlcm1pc3Npb25zIGNvcnJlY3QsIGFuZCBvbiBXaW5kb3dzLlxuICAgIGNvbnN0IHNvdXJjZUV4dCA9IFsnLmpzJywgJy50cycsICcudHN4JywgJy5tanMnLCAnLmNqcyddO1xuXG4gICAgZnVuY3Rpb24gZmluZEZpbGUoYmFzZURpciwgYmFzZU5hbWUpIHtcbiAgICAgIC8vIExvb2sgZm9yIHNwZWNpZmllZCBmaWxlXG4gICAgICBjb25zdCBsb2NhbEJpbiA9IHBhdGgucmVzb2x2ZShiYXNlRGlyLCBiYXNlTmFtZSk7XG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhsb2NhbEJpbikpIHJldHVybiBsb2NhbEJpbjtcblxuICAgICAgLy8gU3RvcCBsb29raW5nIGlmIGNhbmRpZGF0ZSBhbHJlYWR5IGhhcyBhbiBleHBlY3RlZCBleHRlbnNpb24uXG4gICAgICBpZiAoc291cmNlRXh0LmluY2x1ZGVzKHBhdGguZXh0bmFtZShiYXNlTmFtZSkpKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICAvLyBUcnkgYWxsIHRoZSBleHRlbnNpb25zLlxuICAgICAgY29uc3QgZm91bmRFeHQgPSBzb3VyY2VFeHQuZmluZCgoZXh0KSA9PlxuICAgICAgICBmcy5leGlzdHNTeW5jKGAke2xvY2FsQmlufSR7ZXh0fWApLFxuICAgICAgKTtcbiAgICAgIGlmIChmb3VuZEV4dCkgcmV0dXJuIGAke2xvY2FsQmlufSR7Zm91bmRFeHR9YDtcblxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBOb3QgY2hlY2tpbmcgZm9yIGhlbHAgZmlyc3QuIFVubGlrZWx5IHRvIGhhdmUgbWFuZGF0b3J5IGFuZCBleGVjdXRhYmxlLCBhbmQgY2FuJ3Qgcm9idXN0bHkgdGVzdCBmb3IgaGVscCBmbGFncyBpbiBleHRlcm5hbCBjb21tYW5kLlxuICAgIHRoaXMuX2NoZWNrRm9yTWlzc2luZ01hbmRhdG9yeU9wdGlvbnMoKTtcbiAgICB0aGlzLl9jaGVja0ZvckNvbmZsaWN0aW5nT3B0aW9ucygpO1xuXG4gICAgLy8gZXhlY3V0YWJsZUZpbGUgYW5kIGV4ZWN1dGFibGVEaXIgbWlnaHQgYmUgZnVsbCBwYXRoLCBvciBqdXN0IGEgbmFtZVxuICAgIGxldCBleGVjdXRhYmxlRmlsZSA9XG4gICAgICBzdWJjb21tYW5kLl9leGVjdXRhYmxlRmlsZSB8fCBgJHt0aGlzLl9uYW1lfS0ke3N1YmNvbW1hbmQuX25hbWV9YDtcbiAgICBsZXQgZXhlY3V0YWJsZURpciA9IHRoaXMuX2V4ZWN1dGFibGVEaXIgfHwgJyc7XG4gICAgaWYgKHRoaXMuX3NjcmlwdFBhdGgpIHtcbiAgICAgIGxldCByZXNvbHZlZFNjcmlwdFBhdGg7IC8vIHJlc29sdmUgcG9zc2libGUgc3ltbGluayBmb3IgaW5zdGFsbGVkIG5wbSBiaW5hcnlcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc29sdmVkU2NyaXB0UGF0aCA9IGZzLnJlYWxwYXRoU3luYyh0aGlzLl9zY3JpcHRQYXRoKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXNvbHZlZFNjcmlwdFBhdGggPSB0aGlzLl9zY3JpcHRQYXRoO1xuICAgICAgfVxuICAgICAgZXhlY3V0YWJsZURpciA9IHBhdGgucmVzb2x2ZShcbiAgICAgICAgcGF0aC5kaXJuYW1lKHJlc29sdmVkU2NyaXB0UGF0aCksXG4gICAgICAgIGV4ZWN1dGFibGVEaXIsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIExvb2sgZm9yIGEgbG9jYWwgZmlsZSBpbiBwcmVmZXJlbmNlIHRvIGEgY29tbWFuZCBpbiBQQVRILlxuICAgIGlmIChleGVjdXRhYmxlRGlyKSB7XG4gICAgICBsZXQgbG9jYWxGaWxlID0gZmluZEZpbGUoZXhlY3V0YWJsZURpciwgZXhlY3V0YWJsZUZpbGUpO1xuXG4gICAgICAvLyBMZWdhY3kgc2VhcmNoIHVzaW5nIHByZWZpeCBvZiBzY3JpcHQgbmFtZSBpbnN0ZWFkIG9mIGNvbW1hbmQgbmFtZVxuICAgICAgaWYgKCFsb2NhbEZpbGUgJiYgIXN1YmNvbW1hbmQuX2V4ZWN1dGFibGVGaWxlICYmIHRoaXMuX3NjcmlwdFBhdGgpIHtcbiAgICAgICAgY29uc3QgbGVnYWN5TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgICAgdGhpcy5fc2NyaXB0UGF0aCxcbiAgICAgICAgICBwYXRoLmV4dG5hbWUodGhpcy5fc2NyaXB0UGF0aCksXG4gICAgICAgICk7XG4gICAgICAgIGlmIChsZWdhY3lOYW1lICE9PSB0aGlzLl9uYW1lKSB7XG4gICAgICAgICAgbG9jYWxGaWxlID0gZmluZEZpbGUoXG4gICAgICAgICAgICBleGVjdXRhYmxlRGlyLFxuICAgICAgICAgICAgYCR7bGVnYWN5TmFtZX0tJHtzdWJjb21tYW5kLl9uYW1lfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXhlY3V0YWJsZUZpbGUgPSBsb2NhbEZpbGUgfHwgZXhlY3V0YWJsZUZpbGU7XG4gICAgfVxuXG4gICAgbGF1bmNoV2l0aE5vZGUgPSBzb3VyY2VFeHQuaW5jbHVkZXMocGF0aC5leHRuYW1lKGV4ZWN1dGFibGVGaWxlKSk7XG5cbiAgICBsZXQgcHJvYztcbiAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSAhPT0gJ3dpbjMyJykge1xuICAgICAgaWYgKGxhdW5jaFdpdGhOb2RlKSB7XG4gICAgICAgIGFyZ3MudW5zaGlmdChleGVjdXRhYmxlRmlsZSk7XG4gICAgICAgIC8vIGFkZCBleGVjdXRhYmxlIGFyZ3VtZW50cyB0byBzcGF3blxuICAgICAgICBhcmdzID0gaW5jcmVtZW50Tm9kZUluc3BlY3RvclBvcnQocHJvY2Vzcy5leGVjQXJndikuY29uY2F0KGFyZ3MpO1xuXG4gICAgICAgIHByb2MgPSBjaGlsZFByb2Nlc3Muc3Bhd24ocHJvY2Vzcy5hcmd2WzBdLCBhcmdzLCB7IHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9jID0gY2hpbGRQcm9jZXNzLnNwYXduKGV4ZWN1dGFibGVGaWxlLCBhcmdzLCB7IHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2NoZWNrRm9yTWlzc2luZ0V4ZWN1dGFibGUoXG4gICAgICAgIGV4ZWN1dGFibGVGaWxlLFxuICAgICAgICBleGVjdXRhYmxlRGlyLFxuICAgICAgICBzdWJjb21tYW5kLl9uYW1lLFxuICAgICAgKTtcbiAgICAgIGFyZ3MudW5zaGlmdChleGVjdXRhYmxlRmlsZSk7XG4gICAgICAvLyBhZGQgZXhlY3V0YWJsZSBhcmd1bWVudHMgdG8gc3Bhd25cbiAgICAgIGFyZ3MgPSBpbmNyZW1lbnROb2RlSW5zcGVjdG9yUG9ydChwcm9jZXNzLmV4ZWNBcmd2KS5jb25jYXQoYXJncyk7XG4gICAgICBwcm9jID0gY2hpbGRQcm9jZXNzLnNwYXduKHByb2Nlc3MuZXhlY1BhdGgsIGFyZ3MsIHsgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgICB9XG5cbiAgICBpZiAoIXByb2Mua2lsbGVkKSB7XG4gICAgICAvLyB0ZXN0aW5nIG1haW5seSB0byBhdm9pZCBsZWFrIHdhcm5pbmdzIGR1cmluZyB1bml0IHRlc3RzIHdpdGggbW9ja2VkIHNwYXduXG4gICAgICBjb25zdCBzaWduYWxzID0gWydTSUdVU1IxJywgJ1NJR1VTUjInLCAnU0lHVEVSTScsICdTSUdJTlQnLCAnU0lHSFVQJ107XG4gICAgICBzaWduYWxzLmZvckVhY2goKHNpZ25hbCkgPT4ge1xuICAgICAgICBwcm9jZXNzLm9uKHNpZ25hbCwgKCkgPT4ge1xuICAgICAgICAgIGlmIChwcm9jLmtpbGxlZCA9PT0gZmFsc2UgJiYgcHJvYy5leGl0Q29kZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBiZWNhdXNlIHNpZ25hbHMgbm90IHR5cGVkIHRvIGtub3duIHN0cmluZ3NcbiAgICAgICAgICAgIHByb2Mua2lsbChzaWduYWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBCeSBkZWZhdWx0IHRlcm1pbmF0ZSBwcm9jZXNzIHdoZW4gc3Bhd25lZCBwcm9jZXNzIHRlcm1pbmF0ZXMuXG4gICAgY29uc3QgZXhpdENhbGxiYWNrID0gdGhpcy5fZXhpdENhbGxiYWNrO1xuICAgIHByb2Mub24oJ2Nsb3NlJywgKGNvZGUpID0+IHtcbiAgICAgIGNvZGUgPSBjb2RlID8/IDE7IC8vIGNvZGUgaXMgbnVsbCBpZiBzcGF3bmVkIHByb2Nlc3MgdGVybWluYXRlZCBkdWUgdG8gYSBzaWduYWxcbiAgICAgIGlmICghZXhpdENhbGxiYWNrKSB7XG4gICAgICAgIHByb2Nlc3MuZXhpdChjb2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4aXRDYWxsYmFjayhcbiAgICAgICAgICBuZXcgQ29tbWFuZGVyRXJyb3IoXG4gICAgICAgICAgICBjb2RlLFxuICAgICAgICAgICAgJ2NvbW1hbmRlci5leGVjdXRlU3ViQ29tbWFuZEFzeW5jJyxcbiAgICAgICAgICAgICcoY2xvc2UpJyxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHByb2Mub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgLy8gQHRzLWlnbm9yZTogYmVjYXVzZSBlcnIuY29kZSBpcyBhbiB1bmtub3duIHByb3BlcnR5XG4gICAgICBpZiAoZXJyLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgIHRoaXMuX2NoZWNrRm9yTWlzc2luZ0V4ZWN1dGFibGUoXG4gICAgICAgICAgZXhlY3V0YWJsZUZpbGUsXG4gICAgICAgICAgZXhlY3V0YWJsZURpcixcbiAgICAgICAgICBzdWJjb21tYW5kLl9uYW1lLFxuICAgICAgICApO1xuICAgICAgICAvLyBAdHMtaWdub3JlOiBiZWNhdXNlIGVyci5jb2RlIGlzIGFuIHVua25vd24gcHJvcGVydHlcbiAgICAgIH0gZWxzZSBpZiAoZXJyLmNvZGUgPT09ICdFQUNDRVMnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7ZXhlY3V0YWJsZUZpbGV9JyBub3QgZXhlY3V0YWJsZWApO1xuICAgICAgfVxuICAgICAgaWYgKCFleGl0Q2FsbGJhY2spIHtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgd3JhcHBlZEVycm9yID0gbmV3IENvbW1hbmRlckVycm9yKFxuICAgICAgICAgIDEsXG4gICAgICAgICAgJ2NvbW1hbmRlci5leGVjdXRlU3ViQ29tbWFuZEFzeW5jJyxcbiAgICAgICAgICAnKGVycm9yKScsXG4gICAgICAgICk7XG4gICAgICAgIHdyYXBwZWRFcnJvci5uZXN0ZWRFcnJvciA9IGVycjtcbiAgICAgICAgZXhpdENhbGxiYWNrKHdyYXBwZWRFcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBTdG9yZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBjaGlsZCBwcm9jZXNzXG4gICAgdGhpcy5ydW5uaW5nQ29tbWFuZCA9IHByb2M7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2Rpc3BhdGNoU3ViY29tbWFuZChjb21tYW5kTmFtZSwgb3BlcmFuZHMsIHVua25vd24pIHtcbiAgICBjb25zdCBzdWJDb21tYW5kID0gdGhpcy5fZmluZENvbW1hbmQoY29tbWFuZE5hbWUpO1xuICAgIGlmICghc3ViQ29tbWFuZCkgdGhpcy5oZWxwKHsgZXJyb3I6IHRydWUgfSk7XG5cbiAgICBzdWJDb21tYW5kLl9wcmVwYXJlRm9yUGFyc2UoKTtcbiAgICBsZXQgcHJvbWlzZUNoYWluO1xuICAgIHByb21pc2VDaGFpbiA9IHRoaXMuX2NoYWluT3JDYWxsU3ViQ29tbWFuZEhvb2soXG4gICAgICBwcm9taXNlQ2hhaW4sXG4gICAgICBzdWJDb21tYW5kLFxuICAgICAgJ3ByZVN1YmNvbW1hbmQnLFxuICAgICk7XG4gICAgcHJvbWlzZUNoYWluID0gdGhpcy5fY2hhaW5PckNhbGwocHJvbWlzZUNoYWluLCAoKSA9PiB7XG4gICAgICBpZiAoc3ViQ29tbWFuZC5fZXhlY3V0YWJsZUhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5fZXhlY3V0ZVN1YkNvbW1hbmQoc3ViQ29tbWFuZCwgb3BlcmFuZHMuY29uY2F0KHVua25vd24pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzdWJDb21tYW5kLl9wYXJzZUNvbW1hbmQob3BlcmFuZHMsIHVua25vd24pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBwcm9taXNlQ2hhaW47XG4gIH1cblxuICAvKipcbiAgICogSW52b2tlIGhlbHAgZGlyZWN0bHkgaWYgcG9zc2libGUsIG9yIGRpc3BhdGNoIGlmIG5lY2Vzc2FyeS5cbiAgICogZS5nLiBoZWxwIGZvb1xuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfZGlzcGF0Y2hIZWxwQ29tbWFuZChzdWJjb21tYW5kTmFtZSkge1xuICAgIGlmICghc3ViY29tbWFuZE5hbWUpIHtcbiAgICAgIHRoaXMuaGVscCgpO1xuICAgIH1cbiAgICBjb25zdCBzdWJDb21tYW5kID0gdGhpcy5fZmluZENvbW1hbmQoc3ViY29tbWFuZE5hbWUpO1xuICAgIGlmIChzdWJDb21tYW5kICYmICFzdWJDb21tYW5kLl9leGVjdXRhYmxlSGFuZGxlcikge1xuICAgICAgc3ViQ29tbWFuZC5oZWxwKCk7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgdG8gcGFyc2luZyB0aGUgaGVscCBmbGFnIHRvIGludm9rZSB0aGUgaGVscC5cbiAgICByZXR1cm4gdGhpcy5fZGlzcGF0Y2hTdWJjb21tYW5kKFxuICAgICAgc3ViY29tbWFuZE5hbWUsXG4gICAgICBbXSxcbiAgICAgIFt0aGlzLl9nZXRIZWxwT3B0aW9uKCk/LmxvbmcgPz8gdGhpcy5fZ2V0SGVscE9wdGlvbigpPy5zaG9ydCA/PyAnLS1oZWxwJ10sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0aGlzLmFyZ3MgYWdhaW5zdCBleHBlY3RlZCB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9jaGVja051bWJlck9mQXJndW1lbnRzKCkge1xuICAgIC8vIHRvbyBmZXdcbiAgICB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMuZm9yRWFjaCgoYXJnLCBpKSA9PiB7XG4gICAgICBpZiAoYXJnLnJlcXVpcmVkICYmIHRoaXMuYXJnc1tpXSA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMubWlzc2luZ0FyZ3VtZW50KGFyZy5uYW1lKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIHRvbyBtYW55XG4gICAgaWYgKFxuICAgICAgdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzLmxlbmd0aCA+IDAgJiZcbiAgICAgIHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50c1t0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMubGVuZ3RoIC0gMV0udmFyaWFkaWNcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuYXJncy5sZW5ndGggPiB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9leGNlc3NBcmd1bWVudHModGhpcy5hcmdzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyB0aGlzLmFyZ3MgdXNpbmcgdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzIGFuZCBzYXZlIGFzIHRoaXMucHJvY2Vzc2VkQXJncyFcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX3Byb2Nlc3NBcmd1bWVudHMoKSB7XG4gICAgY29uc3QgbXlQYXJzZUFyZyA9IChhcmd1bWVudCwgdmFsdWUsIHByZXZpb3VzKSA9PiB7XG4gICAgICAvLyBFeHRyYSBwcm9jZXNzaW5nIGZvciBuaWNlIGVycm9yIG1lc3NhZ2Ugb24gcGFyc2luZyBmYWlsdXJlLlxuICAgICAgbGV0IHBhcnNlZFZhbHVlID0gdmFsdWU7XG4gICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgYXJndW1lbnQucGFyc2VBcmcpIHtcbiAgICAgICAgY29uc3QgaW52YWxpZFZhbHVlTWVzc2FnZSA9IGBlcnJvcjogY29tbWFuZC1hcmd1bWVudCB2YWx1ZSAnJHt2YWx1ZX0nIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50ICcke2FyZ3VtZW50Lm5hbWUoKX0nLmA7XG4gICAgICAgIHBhcnNlZFZhbHVlID0gdGhpcy5fY2FsbFBhcnNlQXJnKFxuICAgICAgICAgIGFyZ3VtZW50LFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIHByZXZpb3VzLFxuICAgICAgICAgIGludmFsaWRWYWx1ZU1lc3NhZ2UsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGFyc2VkVmFsdWU7XG4gICAgfTtcblxuICAgIHRoaXMuX2NoZWNrTnVtYmVyT2ZBcmd1bWVudHMoKTtcblxuICAgIGNvbnN0IHByb2Nlc3NlZEFyZ3MgPSBbXTtcbiAgICB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMuZm9yRWFjaCgoZGVjbGFyZWRBcmcsIGluZGV4KSA9PiB7XG4gICAgICBsZXQgdmFsdWUgPSBkZWNsYXJlZEFyZy5kZWZhdWx0VmFsdWU7XG4gICAgICBpZiAoZGVjbGFyZWRBcmcudmFyaWFkaWMpIHtcbiAgICAgICAgLy8gQ29sbGVjdCB0b2dldGhlciByZW1haW5pbmcgYXJndW1lbnRzIGZvciBwYXNzaW5nIHRvZ2V0aGVyIGFzIGFuIGFycmF5LlxuICAgICAgICBpZiAoaW5kZXggPCB0aGlzLmFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgdmFsdWUgPSB0aGlzLmFyZ3Muc2xpY2UoaW5kZXgpO1xuICAgICAgICAgIGlmIChkZWNsYXJlZEFyZy5wYXJzZUFyZykge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZWR1Y2UoKHByb2Nlc3NlZCwgdikgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gbXlQYXJzZUFyZyhkZWNsYXJlZEFyZywgdiwgcHJvY2Vzc2VkKTtcbiAgICAgICAgICAgIH0sIGRlY2xhcmVkQXJnLmRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YWx1ZSA9IFtdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGluZGV4IDwgdGhpcy5hcmdzLmxlbmd0aCkge1xuICAgICAgICB2YWx1ZSA9IHRoaXMuYXJnc1tpbmRleF07XG4gICAgICAgIGlmIChkZWNsYXJlZEFyZy5wYXJzZUFyZykge1xuICAgICAgICAgIHZhbHVlID0gbXlQYXJzZUFyZyhkZWNsYXJlZEFyZywgdmFsdWUsIGRlY2xhcmVkQXJnLmRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHByb2Nlc3NlZEFyZ3NbaW5kZXhdID0gdmFsdWU7XG4gICAgfSk7XG4gICAgdGhpcy5wcm9jZXNzZWRBcmdzID0gcHJvY2Vzc2VkQXJncztcbiAgfVxuXG4gIC8qKlxuICAgKiBPbmNlIHdlIGhhdmUgYSBwcm9taXNlIHdlIGNoYWluLCBidXQgY2FsbCBzeW5jaHJvbm91c2x5IHVudGlsIHRoZW4uXG4gICAqXG4gICAqIEBwYXJhbSB7KFByb21pc2V8dW5kZWZpbmVkKX0gcHJvbWlzZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICAgKiBAcmV0dXJuIHsoUHJvbWlzZXx1bmRlZmluZWQpfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfY2hhaW5PckNhbGwocHJvbWlzZSwgZm4pIHtcbiAgICAvLyB0aGVuYWJsZVxuICAgIGlmIChwcm9taXNlPy50aGVuICYmIHR5cGVvZiBwcm9taXNlLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIGFscmVhZHkgaGF2ZSBhIHByb21pc2UsIGNoYWluIGNhbGxiYWNrXG4gICAgICByZXR1cm4gcHJvbWlzZS50aGVuKCgpID0+IGZuKCkpO1xuICAgIH1cbiAgICAvLyBjYWxsYmFjayBtaWdodCByZXR1cm4gYSBwcm9taXNlXG4gICAgcmV0dXJuIGZuKCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHsoUHJvbWlzZXx1bmRlZmluZWQpfSBwcm9taXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudFxuICAgKiBAcmV0dXJuIHsoUHJvbWlzZXx1bmRlZmluZWQpfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfY2hhaW5PckNhbGxIb29rcyhwcm9taXNlLCBldmVudCkge1xuICAgIGxldCByZXN1bHQgPSBwcm9taXNlO1xuICAgIGNvbnN0IGhvb2tzID0gW107XG4gICAgdGhpcy5fZ2V0Q29tbWFuZEFuZEFuY2VzdG9ycygpXG4gICAgICAucmV2ZXJzZSgpXG4gICAgICAuZmlsdGVyKChjbWQpID0+IGNtZC5fbGlmZUN5Y2xlSG9va3NbZXZlbnRdICE9PSB1bmRlZmluZWQpXG4gICAgICAuZm9yRWFjaCgoaG9va2VkQ29tbWFuZCkgPT4ge1xuICAgICAgICBob29rZWRDb21tYW5kLl9saWZlQ3ljbGVIb29rc1tldmVudF0uZm9yRWFjaCgoY2FsbGJhY2spID0+IHtcbiAgICAgICAgICBob29rcy5wdXNoKHsgaG9va2VkQ29tbWFuZCwgY2FsbGJhY2sgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgaWYgKGV2ZW50ID09PSAncG9zdEFjdGlvbicpIHtcbiAgICAgIGhvb2tzLnJldmVyc2UoKTtcbiAgICB9XG5cbiAgICBob29rcy5mb3JFYWNoKChob29rRGV0YWlsKSA9PiB7XG4gICAgICByZXN1bHQgPSB0aGlzLl9jaGFpbk9yQ2FsbChyZXN1bHQsICgpID0+IHtcbiAgICAgICAgcmV0dXJuIGhvb2tEZXRhaWwuY2FsbGJhY2soaG9va0RldGFpbC5ob29rZWRDb21tYW5kLCB0aGlzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHsoUHJvbWlzZXx1bmRlZmluZWQpfSBwcm9taXNlXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gc3ViQ29tbWFuZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRcbiAgICogQHJldHVybiB7KFByb21pc2V8dW5kZWZpbmVkKX1cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2NoYWluT3JDYWxsU3ViQ29tbWFuZEhvb2socHJvbWlzZSwgc3ViQ29tbWFuZCwgZXZlbnQpIHtcbiAgICBsZXQgcmVzdWx0ID0gcHJvbWlzZTtcbiAgICBpZiAodGhpcy5fbGlmZUN5Y2xlSG9va3NbZXZlbnRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2xpZmVDeWNsZUhvb2tzW2V2ZW50XS5mb3JFYWNoKChob29rKSA9PiB7XG4gICAgICAgIHJlc3VsdCA9IHRoaXMuX2NoYWluT3JDYWxsKHJlc3VsdCwgKCkgPT4ge1xuICAgICAgICAgIHJldHVybiBob29rKHRoaXMsIHN1YkNvbW1hbmQpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgYXJndW1lbnRzIGluIGNvbnRleHQgb2YgdGhpcyBjb21tYW5kLlxuICAgKiBSZXR1cm5zIGFjdGlvbiByZXN1bHQsIGluIGNhc2UgaXQgaXMgYSBwcm9taXNlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfcGFyc2VDb21tYW5kKG9wZXJhbmRzLCB1bmtub3duKSB7XG4gICAgY29uc3QgcGFyc2VkID0gdGhpcy5wYXJzZU9wdGlvbnModW5rbm93bik7XG4gICAgdGhpcy5fcGFyc2VPcHRpb25zRW52KCk7IC8vIGFmdGVyIGNsaSwgc28gcGFyc2VBcmcgbm90IGNhbGxlZCBvbiBib3RoIGNsaSBhbmQgZW52XG4gICAgdGhpcy5fcGFyc2VPcHRpb25zSW1wbGllZCgpO1xuICAgIG9wZXJhbmRzID0gb3BlcmFuZHMuY29uY2F0KHBhcnNlZC5vcGVyYW5kcyk7XG4gICAgdW5rbm93biA9IHBhcnNlZC51bmtub3duO1xuICAgIHRoaXMuYXJncyA9IG9wZXJhbmRzLmNvbmNhdCh1bmtub3duKTtcblxuICAgIGlmIChvcGVyYW5kcyAmJiB0aGlzLl9maW5kQ29tbWFuZChvcGVyYW5kc1swXSkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9kaXNwYXRjaFN1YmNvbW1hbmQob3BlcmFuZHNbMF0sIG9wZXJhbmRzLnNsaWNlKDEpLCB1bmtub3duKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy5fZ2V0SGVscENvbW1hbmQoKSAmJlxuICAgICAgb3BlcmFuZHNbMF0gPT09IHRoaXMuX2dldEhlbHBDb21tYW5kKCkubmFtZSgpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGlzcGF0Y2hIZWxwQ29tbWFuZChvcGVyYW5kc1sxXSk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9kZWZhdWx0Q29tbWFuZE5hbWUpIHtcbiAgICAgIHRoaXMuX291dHB1dEhlbHBJZlJlcXVlc3RlZCh1bmtub3duKTsgLy8gUnVuIHRoZSBoZWxwIGZvciBkZWZhdWx0IGNvbW1hbmQgZnJvbSBwYXJlbnQgcmF0aGVyIHRoYW4gcGFzc2luZyB0byBkZWZhdWx0IGNvbW1hbmRcbiAgICAgIHJldHVybiB0aGlzLl9kaXNwYXRjaFN1YmNvbW1hbmQoXG4gICAgICAgIHRoaXMuX2RlZmF1bHRDb21tYW5kTmFtZSxcbiAgICAgICAgb3BlcmFuZHMsXG4gICAgICAgIHVua25vd24sXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLmNvbW1hbmRzLmxlbmd0aCAmJlxuICAgICAgdGhpcy5hcmdzLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgIXRoaXMuX2FjdGlvbkhhbmRsZXIgJiZcbiAgICAgICF0aGlzLl9kZWZhdWx0Q29tbWFuZE5hbWVcbiAgICApIHtcbiAgICAgIC8vIHByb2JhYmx5IG1pc3Npbmcgc3ViY29tbWFuZCBhbmQgbm8gaGFuZGxlciwgdXNlciBuZWVkcyBoZWxwIChhbmQgZXhpdClcbiAgICAgIHRoaXMuaGVscCh7IGVycm9yOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX291dHB1dEhlbHBJZlJlcXVlc3RlZChwYXJzZWQudW5rbm93bik7XG4gICAgdGhpcy5fY2hlY2tGb3JNaXNzaW5nTWFuZGF0b3J5T3B0aW9ucygpO1xuICAgIHRoaXMuX2NoZWNrRm9yQ29uZmxpY3RpbmdPcHRpb25zKCk7XG5cbiAgICAvLyBXZSBkbyBub3QgYWx3YXlzIGNhbGwgdGhpcyBjaGVjayB0byBhdm9pZCBtYXNraW5nIGEgXCJiZXR0ZXJcIiBlcnJvciwgbGlrZSB1bmtub3duIGNvbW1hbmQuXG4gICAgY29uc3QgY2hlY2tGb3JVbmtub3duT3B0aW9ucyA9ICgpID0+IHtcbiAgICAgIGlmIChwYXJzZWQudW5rbm93bi5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMudW5rbm93bk9wdGlvbihwYXJzZWQudW5rbm93blswXSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNvbW1hbmRFdmVudCA9IGBjb21tYW5kOiR7dGhpcy5uYW1lKCl9YDtcbiAgICBpZiAodGhpcy5fYWN0aW9uSGFuZGxlcikge1xuICAgICAgY2hlY2tGb3JVbmtub3duT3B0aW9ucygpO1xuICAgICAgdGhpcy5fcHJvY2Vzc0FyZ3VtZW50cygpO1xuXG4gICAgICBsZXQgcHJvbWlzZUNoYWluO1xuICAgICAgcHJvbWlzZUNoYWluID0gdGhpcy5fY2hhaW5PckNhbGxIb29rcyhwcm9taXNlQ2hhaW4sICdwcmVBY3Rpb24nKTtcbiAgICAgIHByb21pc2VDaGFpbiA9IHRoaXMuX2NoYWluT3JDYWxsKHByb21pc2VDaGFpbiwgKCkgPT5cbiAgICAgICAgdGhpcy5fYWN0aW9uSGFuZGxlcih0aGlzLnByb2Nlc3NlZEFyZ3MpLFxuICAgICAgKTtcbiAgICAgIGlmICh0aGlzLnBhcmVudCkge1xuICAgICAgICBwcm9taXNlQ2hhaW4gPSB0aGlzLl9jaGFpbk9yQ2FsbChwcm9taXNlQ2hhaW4sICgpID0+IHtcbiAgICAgICAgICB0aGlzLnBhcmVudC5lbWl0KGNvbW1hbmRFdmVudCwgb3BlcmFuZHMsIHVua25vd24pOyAvLyBsZWdhY3lcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBwcm9taXNlQ2hhaW4gPSB0aGlzLl9jaGFpbk9yQ2FsbEhvb2tzKHByb21pc2VDaGFpbiwgJ3Bvc3RBY3Rpb24nKTtcbiAgICAgIHJldHVybiBwcm9taXNlQ2hhaW47XG4gICAgfVxuICAgIGlmICh0aGlzLnBhcmVudD8ubGlzdGVuZXJDb3VudChjb21tYW5kRXZlbnQpKSB7XG4gICAgICBjaGVja0ZvclVua25vd25PcHRpb25zKCk7XG4gICAgICB0aGlzLl9wcm9jZXNzQXJndW1lbnRzKCk7XG4gICAgICB0aGlzLnBhcmVudC5lbWl0KGNvbW1hbmRFdmVudCwgb3BlcmFuZHMsIHVua25vd24pOyAvLyBsZWdhY3lcbiAgICB9IGVsc2UgaWYgKG9wZXJhbmRzLmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMuX2ZpbmRDb21tYW5kKCcqJykpIHtcbiAgICAgICAgLy8gbGVnYWN5IGRlZmF1bHQgY29tbWFuZFxuICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGF0Y2hTdWJjb21tYW5kKCcqJywgb3BlcmFuZHMsIHVua25vd24pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubGlzdGVuZXJDb3VudCgnY29tbWFuZDoqJykpIHtcbiAgICAgICAgLy8gc2tpcCBvcHRpb24gY2hlY2ssIGVtaXQgZXZlbnQgZm9yIHBvc3NpYmxlIG1pc3NwZWxsaW5nIHN1Z2dlc3Rpb25cbiAgICAgICAgdGhpcy5lbWl0KCdjb21tYW5kOionLCBvcGVyYW5kcywgdW5rbm93bik7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29tbWFuZHMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMudW5rbm93bkNvbW1hbmQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoZWNrRm9yVW5rbm93bk9wdGlvbnMoKTtcbiAgICAgICAgdGhpcy5fcHJvY2Vzc0FyZ3VtZW50cygpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5jb21tYW5kcy5sZW5ndGgpIHtcbiAgICAgIGNoZWNrRm9yVW5rbm93bk9wdGlvbnMoKTtcbiAgICAgIC8vIFRoaXMgY29tbWFuZCBoYXMgc3ViY29tbWFuZHMgYW5kIG5vdGhpbmcgaG9va2VkIHVwIGF0IHRoaXMgbGV2ZWwsIHNvIGRpc3BsYXkgaGVscCAoYW5kIGV4aXQpLlxuICAgICAgdGhpcy5oZWxwKHsgZXJyb3I6IHRydWUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoZWNrRm9yVW5rbm93bk9wdGlvbnMoKTtcbiAgICAgIHRoaXMuX3Byb2Nlc3NBcmd1bWVudHMoKTtcbiAgICAgIC8vIGZhbGwgdGhyb3VnaCBmb3IgY2FsbGVyIHRvIGhhbmRsZSBhZnRlciBjYWxsaW5nIC5wYXJzZSgpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgbWF0Y2hpbmcgY29tbWFuZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybiB7Q29tbWFuZCB8IHVuZGVmaW5lZH1cbiAgICovXG4gIF9maW5kQ29tbWFuZChuYW1lKSB7XG4gICAgaWYgKCFuYW1lKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLmNvbW1hbmRzLmZpbmQoXG4gICAgICAoY21kKSA9PiBjbWQuX25hbWUgPT09IG5hbWUgfHwgY21kLl9hbGlhc2VzLmluY2x1ZGVzKG5hbWUpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIG9wdGlvbiBtYXRjaGluZyBgYXJnYCBpZiBhbnkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdcbiAgICogQHJldHVybiB7T3B0aW9ufVxuICAgKiBAcGFja2FnZVxuICAgKi9cblxuICBfZmluZE9wdGlvbihhcmcpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLmlzKGFyZykpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BsYXkgYW4gZXJyb3IgbWVzc2FnZSBpZiBhIG1hbmRhdG9yeSBvcHRpb24gZG9lcyBub3QgaGF2ZSBhIHZhbHVlLlxuICAgKiBDYWxsZWQgYWZ0ZXIgY2hlY2tpbmcgZm9yIGhlbHAgZmxhZ3MgaW4gbGVhZiBzdWJjb21tYW5kLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfY2hlY2tGb3JNaXNzaW5nTWFuZGF0b3J5T3B0aW9ucygpIHtcbiAgICAvLyBXYWxrIHVwIGhpZXJhcmNoeSBzbyBjYW4gY2FsbCBpbiBzdWJjb21tYW5kIGFmdGVyIGNoZWNraW5nIGZvciBkaXNwbGF5aW5nIGhlbHAuXG4gICAgdGhpcy5fZ2V0Q29tbWFuZEFuZEFuY2VzdG9ycygpLmZvckVhY2goKGNtZCkgPT4ge1xuICAgICAgY21kLm9wdGlvbnMuZm9yRWFjaCgoYW5PcHRpb24pID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGFuT3B0aW9uLm1hbmRhdG9yeSAmJlxuICAgICAgICAgIGNtZC5nZXRPcHRpb25WYWx1ZShhbk9wdGlvbi5hdHRyaWJ1dGVOYW1lKCkpID09PSB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgY21kLm1pc3NpbmdNYW5kYXRvcnlPcHRpb25WYWx1ZShhbk9wdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BsYXkgYW4gZXJyb3IgbWVzc2FnZSBpZiBjb25mbGljdGluZyBvcHRpb25zIGFyZSB1c2VkIHRvZ2V0aGVyIGluIHRoaXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2hlY2tGb3JDb25mbGljdGluZ0xvY2FsT3B0aW9ucygpIHtcbiAgICBjb25zdCBkZWZpbmVkTm9uRGVmYXVsdE9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbktleSA9IG9wdGlvbi5hdHRyaWJ1dGVOYW1lKCk7XG4gICAgICBpZiAodGhpcy5nZXRPcHRpb25WYWx1ZShvcHRpb25LZXkpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uVmFsdWVTb3VyY2Uob3B0aW9uS2V5KSAhPT0gJ2RlZmF1bHQnO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgb3B0aW9uc1dpdGhDb25mbGljdGluZyA9IGRlZmluZWROb25EZWZhdWx0T3B0aW9ucy5maWx0ZXIoXG4gICAgICAob3B0aW9uKSA9PiBvcHRpb24uY29uZmxpY3RzV2l0aC5sZW5ndGggPiAwLFxuICAgICk7XG5cbiAgICBvcHRpb25zV2l0aENvbmZsaWN0aW5nLmZvckVhY2goKG9wdGlvbikgPT4ge1xuICAgICAgY29uc3QgY29uZmxpY3RpbmdBbmREZWZpbmVkID0gZGVmaW5lZE5vbkRlZmF1bHRPcHRpb25zLmZpbmQoKGRlZmluZWQpID0+XG4gICAgICAgIG9wdGlvbi5jb25mbGljdHNXaXRoLmluY2x1ZGVzKGRlZmluZWQuYXR0cmlidXRlTmFtZSgpKSxcbiAgICAgICk7XG4gICAgICBpZiAoY29uZmxpY3RpbmdBbmREZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX2NvbmZsaWN0aW5nT3B0aW9uKG9wdGlvbiwgY29uZmxpY3RpbmdBbmREZWZpbmVkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2UgaWYgY29uZmxpY3Rpbmcgb3B0aW9ucyBhcmUgdXNlZCB0b2dldGhlci5cbiAgICogQ2FsbGVkIGFmdGVyIGNoZWNraW5nIGZvciBoZWxwIGZsYWdzIGluIGxlYWYgc3ViY29tbWFuZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jaGVja0ZvckNvbmZsaWN0aW5nT3B0aW9ucygpIHtcbiAgICAvLyBXYWxrIHVwIGhpZXJhcmNoeSBzbyBjYW4gY2FsbCBpbiBzdWJjb21tYW5kIGFmdGVyIGNoZWNraW5nIGZvciBkaXNwbGF5aW5nIGhlbHAuXG4gICAgdGhpcy5fZ2V0Q29tbWFuZEFuZEFuY2VzdG9ycygpLmZvckVhY2goKGNtZCkgPT4ge1xuICAgICAgY21kLl9jaGVja0ZvckNvbmZsaWN0aW5nTG9jYWxPcHRpb25zKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2Ugb3B0aW9ucyBmcm9tIGBhcmd2YCByZW1vdmluZyBrbm93biBvcHRpb25zLFxuICAgKiBhbmQgcmV0dXJuIGFyZ3Ygc3BsaXQgaW50byBvcGVyYW5kcyBhbmQgdW5rbm93biBhcmd1bWVudHMuXG4gICAqXG4gICAqIFNpZGUgZWZmZWN0czogbW9kaWZpZXMgY29tbWFuZCBieSBzdG9yaW5nIG9wdGlvbnMuIERvZXMgbm90IHJlc2V0IHN0YXRlIGlmIGNhbGxlZCBhZ2Fpbi5cbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBhcmd2ID0+IG9wZXJhbmRzLCB1bmtub3duXG4gICAqICAgICAtLWtub3duIGtrayBvcCA9PiBbb3BdLCBbXVxuICAgKiAgICAgb3AgLS1rbm93biBra2sgPT4gW29wXSwgW11cbiAgICogICAgIHN1YiAtLXVua25vd24gdXV1IG9wID0+IFtzdWJdLCBbLS11bmtub3duIHV1dSBvcF1cbiAgICogICAgIHN1YiAtLSAtLXVua25vd24gdXV1IG9wID0+IFtzdWIgLS11bmtub3duIHV1dSBvcF0sIFtdXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGFyZ3NcbiAgICogQHJldHVybiB7e29wZXJhbmRzOiBzdHJpbmdbXSwgdW5rbm93bjogc3RyaW5nW119fVxuICAgKi9cblxuICBwYXJzZU9wdGlvbnMoYXJncykge1xuICAgIGNvbnN0IG9wZXJhbmRzID0gW107IC8vIG9wZXJhbmRzLCBub3Qgb3B0aW9ucyBvciB2YWx1ZXNcbiAgICBjb25zdCB1bmtub3duID0gW107IC8vIGZpcnN0IHVua25vd24gb3B0aW9uIGFuZCByZW1haW5pbmcgdW5rbm93biBhcmdzXG4gICAgbGV0IGRlc3QgPSBvcGVyYW5kcztcblxuICAgIGZ1bmN0aW9uIG1heWJlT3B0aW9uKGFyZykge1xuICAgICAgcmV0dXJuIGFyZy5sZW5ndGggPiAxICYmIGFyZ1swXSA9PT0gJy0nO1xuICAgIH1cblxuICAgIGNvbnN0IG5lZ2F0aXZlTnVtYmVyQXJnID0gKGFyZykgPT4ge1xuICAgICAgLy8gcmV0dXJuIGZhbHNlIGlmIG5vdCBhIG5lZ2F0aXZlIG51bWJlclxuICAgICAgaWYgKCEvXi1cXGQqXFwuP1xcZCsoZVsrLV0/XFxkKyk/JC8udGVzdChhcmcpKSByZXR1cm4gZmFsc2U7XG4gICAgICAvLyBuZWdhdGl2ZSBudW1iZXIgaXMgb2sgdW5sZXNzIGRpZ2l0IHVzZWQgYXMgYW4gb3B0aW9uIGluIGNvbW1hbmQgaGllcmFyY2h5XG4gICAgICByZXR1cm4gIXRoaXMuX2dldENvbW1hbmRBbmRBbmNlc3RvcnMoKS5zb21lKChjbWQpID0+XG4gICAgICAgIGNtZC5vcHRpb25zXG4gICAgICAgICAgLm1hcCgob3B0KSA9PiBvcHQuc2hvcnQpXG4gICAgICAgICAgLnNvbWUoKHNob3J0KSA9PiAvXi1cXGQkLy50ZXN0KHNob3J0KSksXG4gICAgICApO1xuICAgIH07XG5cbiAgICAvLyBwYXJzZSBvcHRpb25zXG4gICAgbGV0IGFjdGl2ZVZhcmlhZGljT3B0aW9uID0gbnVsbDtcbiAgICBsZXQgYWN0aXZlR3JvdXAgPSBudWxsOyAvLyB3b3JraW5nIHRocm91Z2ggZ3JvdXAgb2Ygc2hvcnQgb3B0aW9ucywgbGlrZSAtYWJjXG4gICAgbGV0IGkgPSAwO1xuICAgIHdoaWxlIChpIDwgYXJncy5sZW5ndGggfHwgYWN0aXZlR3JvdXApIHtcbiAgICAgIGNvbnN0IGFyZyA9IGFjdGl2ZUdyb3VwID8/IGFyZ3NbaSsrXTtcbiAgICAgIGFjdGl2ZUdyb3VwID0gbnVsbDtcblxuICAgICAgLy8gbGl0ZXJhbFxuICAgICAgaWYgKGFyZyA9PT0gJy0tJykge1xuICAgICAgICBpZiAoZGVzdCA9PT0gdW5rbm93bikgZGVzdC5wdXNoKGFyZyk7XG4gICAgICAgIGRlc3QucHVzaCguLi5hcmdzLnNsaWNlKGkpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgYWN0aXZlVmFyaWFkaWNPcHRpb24gJiZcbiAgICAgICAgKCFtYXliZU9wdGlvbihhcmcpIHx8IG5lZ2F0aXZlTnVtYmVyQXJnKGFyZykpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5lbWl0KGBvcHRpb246JHthY3RpdmVWYXJpYWRpY09wdGlvbi5uYW1lKCl9YCwgYXJnKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBhY3RpdmVWYXJpYWRpY09wdGlvbiA9IG51bGw7XG5cbiAgICAgIGlmIChtYXliZU9wdGlvbihhcmcpKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuX2ZpbmRPcHRpb24oYXJnKTtcbiAgICAgICAgLy8gcmVjb2duaXNlZCBvcHRpb24sIGNhbGwgbGlzdGVuZXIgdG8gYXNzaWduIHZhbHVlIHdpdGggcG9zc2libGUgY3VzdG9tIHByb2Nlc3NpbmdcbiAgICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICAgIGlmIChvcHRpb24ucmVxdWlyZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXJnc1tpKytdO1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHRoaXMub3B0aW9uTWlzc2luZ0FyZ3VtZW50KG9wdGlvbik7XG4gICAgICAgICAgICB0aGlzLmVtaXQoYG9wdGlvbjoke29wdGlvbi5uYW1lKCl9YCwgdmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9uLm9wdGlvbmFsKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgLy8gaGlzdG9yaWNhbCBiZWhhdmlvdXIgaXMgb3B0aW9uYWwgdmFsdWUgaXMgZm9sbG93aW5nIGFyZyB1bmxlc3MgYW4gb3B0aW9uXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGkgPCBhcmdzLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAoIW1heWJlT3B0aW9uKGFyZ3NbaV0pIHx8IG5lZ2F0aXZlTnVtYmVyQXJnKGFyZ3NbaV0pKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gYXJnc1tpKytdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbWl0KGBvcHRpb246JHtvcHRpb24ubmFtZSgpfWAsIHZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gYm9vbGVhbiBmbGFnXG4gICAgICAgICAgICB0aGlzLmVtaXQoYG9wdGlvbjoke29wdGlvbi5uYW1lKCl9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFjdGl2ZVZhcmlhZGljT3B0aW9uID0gb3B0aW9uLnZhcmlhZGljID8gb3B0aW9uIDogbnVsbDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBMb29rIGZvciBjb21ibyBvcHRpb25zIGZvbGxvd2luZyBzaW5nbGUgZGFzaCwgZWF0IGZpcnN0IG9uZSBpZiBrbm93bi5cbiAgICAgIGlmIChhcmcubGVuZ3RoID4gMiAmJiBhcmdbMF0gPT09ICctJyAmJiBhcmdbMV0gIT09ICctJykge1xuICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLl9maW5kT3B0aW9uKGAtJHthcmdbMV19YCk7XG4gICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBvcHRpb24ucmVxdWlyZWQgfHxcbiAgICAgICAgICAgIChvcHRpb24ub3B0aW9uYWwgJiYgdGhpcy5fY29tYmluZUZsYWdBbmRPcHRpb25hbFZhbHVlKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gb3B0aW9uIHdpdGggdmFsdWUgZm9sbG93aW5nIGluIHNhbWUgYXJndW1lbnRcbiAgICAgICAgICAgIHRoaXMuZW1pdChgb3B0aW9uOiR7b3B0aW9uLm5hbWUoKX1gLCBhcmcuc2xpY2UoMikpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBib29sZWFuIG9wdGlvblxuICAgICAgICAgICAgdGhpcy5lbWl0KGBvcHRpb246JHtvcHRpb24ubmFtZSgpfWApO1xuICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSBwcm9jZXNzZWQgb3B0aW9uIGFuZCBrZWVwIHByb2Nlc3NpbmcgZ3JvdXBcbiAgICAgICAgICAgIGFjdGl2ZUdyb3VwID0gYC0ke2FyZy5zbGljZSgyKX1gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBMb29rIGZvciBrbm93biBsb25nIGZsYWcgd2l0aCB2YWx1ZSwgbGlrZSAtLWZvbz1iYXJcbiAgICAgIGlmICgvXi0tW149XSs9Ly50ZXN0KGFyZykpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBhcmcuaW5kZXhPZignPScpO1xuICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLl9maW5kT3B0aW9uKGFyZy5zbGljZSgwLCBpbmRleCkpO1xuICAgICAgICBpZiAob3B0aW9uICYmIChvcHRpb24ucmVxdWlyZWQgfHwgb3B0aW9uLm9wdGlvbmFsKSkge1xuICAgICAgICAgIHRoaXMuZW1pdChgb3B0aW9uOiR7b3B0aW9uLm5hbWUoKX1gLCBhcmcuc2xpY2UoaW5kZXggKyAxKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTm90IGEgcmVjb2duaXNlZCBvcHRpb24gYnkgdGhpcyBjb21tYW5kLlxuICAgICAgLy8gTWlnaHQgYmUgYSBjb21tYW5kLWFyZ3VtZW50LCBvciBzdWJjb21tYW5kIG9wdGlvbiwgb3IgdW5rbm93biBvcHRpb24sIG9yIGhlbHAgY29tbWFuZCBvciBvcHRpb24uXG5cbiAgICAgIC8vIEFuIHVua25vd24gb3B0aW9uIG1lYW5zIGZ1cnRoZXIgYXJndW1lbnRzIGFsc28gY2xhc3NpZmllZCBhcyB1bmtub3duIHNvIGNhbiBiZSByZXByb2Nlc3NlZCBieSBzdWJjb21tYW5kcy5cbiAgICAgIC8vIEEgbmVnYXRpdmUgbnVtYmVyIGluIGEgbGVhZiBjb21tYW5kIGlzIG5vdCBhbiB1bmtub3duIG9wdGlvbi5cbiAgICAgIGlmIChcbiAgICAgICAgZGVzdCA9PT0gb3BlcmFuZHMgJiZcbiAgICAgICAgbWF5YmVPcHRpb24oYXJnKSAmJlxuICAgICAgICAhKHRoaXMuY29tbWFuZHMubGVuZ3RoID09PSAwICYmIG5lZ2F0aXZlTnVtYmVyQXJnKGFyZykpXG4gICAgICApIHtcbiAgICAgICAgZGVzdCA9IHVua25vd247XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHVzaW5nIHBvc2l0aW9uYWxPcHRpb25zLCBzdG9wIHByb2Nlc3Npbmcgb3VyIG9wdGlvbnMgYXQgc3ViY29tbWFuZC5cbiAgICAgIGlmIChcbiAgICAgICAgKHRoaXMuX2VuYWJsZVBvc2l0aW9uYWxPcHRpb25zIHx8IHRoaXMuX3Bhc3NUaHJvdWdoT3B0aW9ucykgJiZcbiAgICAgICAgb3BlcmFuZHMubGVuZ3RoID09PSAwICYmXG4gICAgICAgIHVua25vd24ubGVuZ3RoID09PSAwXG4gICAgICApIHtcbiAgICAgICAgaWYgKHRoaXMuX2ZpbmRDb21tYW5kKGFyZykpIHtcbiAgICAgICAgICBvcGVyYW5kcy5wdXNoKGFyZyk7XG4gICAgICAgICAgdW5rbm93bi5wdXNoKC4uLmFyZ3Muc2xpY2UoaSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHRoaXMuX2dldEhlbHBDb21tYW5kKCkgJiZcbiAgICAgICAgICBhcmcgPT09IHRoaXMuX2dldEhlbHBDb21tYW5kKCkubmFtZSgpXG4gICAgICAgICkge1xuICAgICAgICAgIG9wZXJhbmRzLnB1c2goYXJnLCAuLi5hcmdzLnNsaWNlKGkpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9kZWZhdWx0Q29tbWFuZE5hbWUpIHtcbiAgICAgICAgICB1bmtub3duLnB1c2goYXJnLCAuLi5hcmdzLnNsaWNlKGkpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJZiB1c2luZyBwYXNzVGhyb3VnaE9wdGlvbnMsIHN0b3AgcHJvY2Vzc2luZyBvcHRpb25zIGF0IGZpcnN0IGNvbW1hbmQtYXJndW1lbnQuXG4gICAgICBpZiAodGhpcy5fcGFzc1Rocm91Z2hPcHRpb25zKSB7XG4gICAgICAgIGRlc3QucHVzaChhcmcsIC4uLmFyZ3Muc2xpY2UoaSkpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgLy8gYWRkIGFyZ1xuICAgICAgZGVzdC5wdXNoKGFyZyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgb3BlcmFuZHMsIHVua25vd24gfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gb2JqZWN0IGNvbnRhaW5pbmcgbG9jYWwgb3B0aW9uIHZhbHVlcyBhcyBrZXktdmFsdWUgcGFpcnMuXG4gICAqXG4gICAqIEByZXR1cm4ge29iamVjdH1cbiAgICovXG4gIG9wdHMoKSB7XG4gICAgaWYgKHRoaXMuX3N0b3JlT3B0aW9uc0FzUHJvcGVydGllcykge1xuICAgICAgLy8gUHJlc2VydmUgb3JpZ2luYWwgYmVoYXZpb3VyIHNvIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdoZW4gc3RpbGwgdXNpbmcgcHJvcGVydGllc1xuICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICBjb25zdCBsZW4gPSB0aGlzLm9wdGlvbnMubGVuZ3RoO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMub3B0aW9uc1tpXS5hdHRyaWJ1dGVOYW1lKCk7XG4gICAgICAgIHJlc3VsdFtrZXldID1cbiAgICAgICAgICBrZXkgPT09IHRoaXMuX3ZlcnNpb25PcHRpb25OYW1lID8gdGhpcy5fdmVyc2lvbiA6IHRoaXNba2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX29wdGlvblZhbHVlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gb2JqZWN0IGNvbnRhaW5pbmcgbWVyZ2VkIGxvY2FsIGFuZCBnbG9iYWwgb3B0aW9uIHZhbHVlcyBhcyBrZXktdmFsdWUgcGFpcnMuXG4gICAqXG4gICAqIEByZXR1cm4ge29iamVjdH1cbiAgICovXG4gIG9wdHNXaXRoR2xvYmFscygpIHtcbiAgICAvLyBnbG9iYWxzIG92ZXJ3cml0ZSBsb2NhbHNcbiAgICByZXR1cm4gdGhpcy5fZ2V0Q29tbWFuZEFuZEFuY2VzdG9ycygpLnJlZHVjZShcbiAgICAgIChjb21iaW5lZE9wdGlvbnMsIGNtZCkgPT4gT2JqZWN0LmFzc2lnbihjb21iaW5lZE9wdGlvbnMsIGNtZC5vcHRzKCkpLFxuICAgICAge30sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IGVycm9yIG1lc3NhZ2UgYW5kIGV4aXQgKG9yIGNhbGwgZXhpdE92ZXJyaWRlKS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAgICogQHBhcmFtIHtvYmplY3R9IFtlcnJvck9wdGlvbnNdXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZXJyb3JPcHRpb25zLmNvZGVdIC0gYW4gaWQgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZXJyb3JcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtlcnJvck9wdGlvbnMuZXhpdENvZGVdIC0gdXNlZCB3aXRoIHByb2Nlc3MuZXhpdFxuICAgKi9cbiAgZXJyb3IobWVzc2FnZSwgZXJyb3JPcHRpb25zKSB7XG4gICAgLy8gb3V0cHV0IGhhbmRsaW5nXG4gICAgdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbi5vdXRwdXRFcnJvcihcbiAgICAgIGAke21lc3NhZ2V9XFxuYCxcbiAgICAgIHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24ud3JpdGVFcnIsXG4gICAgKTtcbiAgICBpZiAodHlwZW9mIHRoaXMuX3Nob3dIZWxwQWZ0ZXJFcnJvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24ud3JpdGVFcnIoYCR7dGhpcy5fc2hvd0hlbHBBZnRlckVycm9yfVxcbmApO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fc2hvd0hlbHBBZnRlckVycm9yKSB7XG4gICAgICB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLndyaXRlRXJyKCdcXG4nKTtcbiAgICAgIHRoaXMub3V0cHV0SGVscCh7IGVycm9yOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIC8vIGV4aXQgaGFuZGxpbmdcbiAgICBjb25zdCBjb25maWcgPSBlcnJvck9wdGlvbnMgfHwge307XG4gICAgY29uc3QgZXhpdENvZGUgPSBjb25maWcuZXhpdENvZGUgfHwgMTtcbiAgICBjb25zdCBjb2RlID0gY29uZmlnLmNvZGUgfHwgJ2NvbW1hbmRlci5lcnJvcic7XG4gICAgdGhpcy5fZXhpdChleGl0Q29kZSwgY29kZSwgbWVzc2FnZSk7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgYW55IG9wdGlvbiByZWxhdGVkIGVudmlyb25tZW50IHZhcmlhYmxlcywgaWYgb3B0aW9uIGRvZXNcbiAgICogbm90IGhhdmUgYSB2YWx1ZSBmcm9tIGNsaSBvciBjbGllbnQgY29kZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wYXJzZU9wdGlvbnNFbnYoKSB7XG4gICAgdGhpcy5vcHRpb25zLmZvckVhY2goKG9wdGlvbikgPT4ge1xuICAgICAgaWYgKG9wdGlvbi5lbnZWYXIgJiYgb3B0aW9uLmVudlZhciBpbiBwcm9jZXNzLmVudikge1xuICAgICAgICBjb25zdCBvcHRpb25LZXkgPSBvcHRpb24uYXR0cmlidXRlTmFtZSgpO1xuICAgICAgICAvLyBQcmlvcml0eSBjaGVjay4gRG8gbm90IG92ZXJ3cml0ZSBjbGkgb3Igb3B0aW9ucyBmcm9tIHVua25vd24gc291cmNlIChjbGllbnQtY29kZSkuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLmdldE9wdGlvblZhbHVlKG9wdGlvbktleSkgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgIFsnZGVmYXVsdCcsICdjb25maWcnLCAnZW52J10uaW5jbHVkZXMoXG4gICAgICAgICAgICB0aGlzLmdldE9wdGlvblZhbHVlU291cmNlKG9wdGlvbktleSksXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAob3B0aW9uLnJlcXVpcmVkIHx8IG9wdGlvbi5vcHRpb25hbCkge1xuICAgICAgICAgICAgLy8gb3B0aW9uIGNhbiB0YWtlIGEgdmFsdWVcbiAgICAgICAgICAgIC8vIGtlZXAgdmVyeSBzaW1wbGUsIG9wdGlvbmFsIGFsd2F5cyB0YWtlcyB2YWx1ZVxuICAgICAgICAgICAgdGhpcy5lbWl0KGBvcHRpb25FbnY6JHtvcHRpb24ubmFtZSgpfWAsIHByb2Nlc3MuZW52W29wdGlvbi5lbnZWYXJdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gYm9vbGVhblxuICAgICAgICAgICAgLy8ga2VlcCB2ZXJ5IHNpbXBsZSwgb25seSBjYXJlIHRoYXQgZW52VmFyIGRlZmluZWQgYW5kIG5vdCB0aGUgdmFsdWVcbiAgICAgICAgICAgIHRoaXMuZW1pdChgb3B0aW9uRW52OiR7b3B0aW9uLm5hbWUoKX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBhbnkgaW1wbGllZCBvcHRpb24gdmFsdWVzLCBpZiBvcHRpb24gaXMgdW5kZWZpbmVkIG9yIGRlZmF1bHQgdmFsdWUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcGFyc2VPcHRpb25zSW1wbGllZCgpIHtcbiAgICBjb25zdCBkdWFsSGVscGVyID0gbmV3IER1YWxPcHRpb25zKHRoaXMub3B0aW9ucyk7XG4gICAgY29uc3QgaGFzQ3VzdG9tT3B0aW9uVmFsdWUgPSAob3B0aW9uS2V5KSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmdldE9wdGlvblZhbHVlKG9wdGlvbktleSkgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAhWydkZWZhdWx0JywgJ2ltcGxpZWQnXS5pbmNsdWRlcyh0aGlzLmdldE9wdGlvblZhbHVlU291cmNlKG9wdGlvbktleSkpXG4gICAgICApO1xuICAgIH07XG4gICAgdGhpcy5vcHRpb25zXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAob3B0aW9uKSA9PlxuICAgICAgICAgIG9wdGlvbi5pbXBsaWVkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICBoYXNDdXN0b21PcHRpb25WYWx1ZShvcHRpb24uYXR0cmlidXRlTmFtZSgpKSAmJlxuICAgICAgICAgIGR1YWxIZWxwZXIudmFsdWVGcm9tT3B0aW9uKFxuICAgICAgICAgICAgdGhpcy5nZXRPcHRpb25WYWx1ZShvcHRpb24uYXR0cmlidXRlTmFtZSgpKSxcbiAgICAgICAgICAgIG9wdGlvbixcbiAgICAgICAgICApLFxuICAgICAgKVxuICAgICAgLmZvckVhY2goKG9wdGlvbikgPT4ge1xuICAgICAgICBPYmplY3Qua2V5cyhvcHRpb24uaW1wbGllZClcbiAgICAgICAgICAuZmlsdGVyKChpbXBsaWVkS2V5KSA9PiAhaGFzQ3VzdG9tT3B0aW9uVmFsdWUoaW1wbGllZEtleSkpXG4gICAgICAgICAgLmZvckVhY2goKGltcGxpZWRLZXkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0T3B0aW9uVmFsdWVXaXRoU291cmNlKFxuICAgICAgICAgICAgICBpbXBsaWVkS2V5LFxuICAgICAgICAgICAgICBvcHRpb24uaW1wbGllZFtpbXBsaWVkS2V5XSxcbiAgICAgICAgICAgICAgJ2ltcGxpZWQnLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFyZ3VtZW50IGBuYW1lYCBpcyBtaXNzaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBtaXNzaW5nQXJndW1lbnQobmFtZSkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBgZXJyb3I6IG1pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQgJyR7bmFtZX0nYDtcbiAgICB0aGlzLmVycm9yKG1lc3NhZ2UsIHsgY29kZTogJ2NvbW1hbmRlci5taXNzaW5nQXJndW1lbnQnIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGBPcHRpb25gIGlzIG1pc3NpbmcgYW4gYXJndW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgb3B0aW9uTWlzc2luZ0FyZ3VtZW50KG9wdGlvbikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBgZXJyb3I6IG9wdGlvbiAnJHtvcHRpb24uZmxhZ3N9JyBhcmd1bWVudCBtaXNzaW5nYDtcbiAgICB0aGlzLmVycm9yKG1lc3NhZ2UsIHsgY29kZTogJ2NvbW1hbmRlci5vcHRpb25NaXNzaW5nQXJndW1lbnQnIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGBPcHRpb25gIGRvZXMgbm90IGhhdmUgYSB2YWx1ZSwgYW5kIGlzIGEgbWFuZGF0b3J5IG9wdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtPcHRpb259IG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBtaXNzaW5nTWFuZGF0b3J5T3B0aW9uVmFsdWUob3B0aW9uKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGBlcnJvcjogcmVxdWlyZWQgb3B0aW9uICcke29wdGlvbi5mbGFnc30nIG5vdCBzcGVjaWZpZWRgO1xuICAgIHRoaXMuZXJyb3IobWVzc2FnZSwgeyBjb2RlOiAnY29tbWFuZGVyLm1pc3NpbmdNYW5kYXRvcnlPcHRpb25WYWx1ZScgfSk7XG4gIH1cblxuICAvKipcbiAgICogYE9wdGlvbmAgY29uZmxpY3RzIHdpdGggYW5vdGhlciBvcHRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBvcHRpb25cbiAgICogQHBhcmFtIHtPcHRpb259IGNvbmZsaWN0aW5nT3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY29uZmxpY3RpbmdPcHRpb24ob3B0aW9uLCBjb25mbGljdGluZ09wdGlvbikge1xuICAgIC8vIFRoZSBjYWxsaW5nIGNvZGUgZG9lcyBub3Qga25vdyB3aGV0aGVyIGEgbmVnYXRlZCBvcHRpb24gaXMgdGhlIHNvdXJjZSBvZiB0aGVcbiAgICAvLyB2YWx1ZSwgc28gZG8gc29tZSB3b3JrIHRvIHRha2UgYW4gZWR1Y2F0ZWQgZ3Vlc3MuXG4gICAgY29uc3QgZmluZEJlc3RPcHRpb25Gcm9tVmFsdWUgPSAob3B0aW9uKSA9PiB7XG4gICAgICBjb25zdCBvcHRpb25LZXkgPSBvcHRpb24uYXR0cmlidXRlTmFtZSgpO1xuICAgICAgY29uc3Qgb3B0aW9uVmFsdWUgPSB0aGlzLmdldE9wdGlvblZhbHVlKG9wdGlvbktleSk7XG4gICAgICBjb25zdCBuZWdhdGl2ZU9wdGlvbiA9IHRoaXMub3B0aW9ucy5maW5kKFxuICAgICAgICAodGFyZ2V0KSA9PiB0YXJnZXQubmVnYXRlICYmIG9wdGlvbktleSA9PT0gdGFyZ2V0LmF0dHJpYnV0ZU5hbWUoKSxcbiAgICAgICk7XG4gICAgICBjb25zdCBwb3NpdGl2ZU9wdGlvbiA9IHRoaXMub3B0aW9ucy5maW5kKFxuICAgICAgICAodGFyZ2V0KSA9PiAhdGFyZ2V0Lm5lZ2F0ZSAmJiBvcHRpb25LZXkgPT09IHRhcmdldC5hdHRyaWJ1dGVOYW1lKCksXG4gICAgICApO1xuICAgICAgaWYgKFxuICAgICAgICBuZWdhdGl2ZU9wdGlvbiAmJlxuICAgICAgICAoKG5lZ2F0aXZlT3B0aW9uLnByZXNldEFyZyA9PT0gdW5kZWZpbmVkICYmIG9wdGlvblZhbHVlID09PSBmYWxzZSkgfHxcbiAgICAgICAgICAobmVnYXRpdmVPcHRpb24ucHJlc2V0QXJnICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIG9wdGlvblZhbHVlID09PSBuZWdhdGl2ZU9wdGlvbi5wcmVzZXRBcmcpKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBuZWdhdGl2ZU9wdGlvbjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwb3NpdGl2ZU9wdGlvbiB8fCBvcHRpb247XG4gICAgfTtcblxuICAgIGNvbnN0IGdldEVycm9yTWVzc2FnZSA9IChvcHRpb24pID0+IHtcbiAgICAgIGNvbnN0IGJlc3RPcHRpb24gPSBmaW5kQmVzdE9wdGlvbkZyb21WYWx1ZShvcHRpb24pO1xuICAgICAgY29uc3Qgb3B0aW9uS2V5ID0gYmVzdE9wdGlvbi5hdHRyaWJ1dGVOYW1lKCk7XG4gICAgICBjb25zdCBzb3VyY2UgPSB0aGlzLmdldE9wdGlvblZhbHVlU291cmNlKG9wdGlvbktleSk7XG4gICAgICBpZiAoc291cmNlID09PSAnZW52Jykge1xuICAgICAgICByZXR1cm4gYGVudmlyb25tZW50IHZhcmlhYmxlICcke2Jlc3RPcHRpb24uZW52VmFyfSdgO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGBvcHRpb24gJyR7YmVzdE9wdGlvbi5mbGFnc30nYDtcbiAgICB9O1xuXG4gICAgY29uc3QgbWVzc2FnZSA9IGBlcnJvcjogJHtnZXRFcnJvck1lc3NhZ2Uob3B0aW9uKX0gY2Fubm90IGJlIHVzZWQgd2l0aCAke2dldEVycm9yTWVzc2FnZShjb25mbGljdGluZ09wdGlvbil9YDtcbiAgICB0aGlzLmVycm9yKG1lc3NhZ2UsIHsgY29kZTogJ2NvbW1hbmRlci5jb25mbGljdGluZ09wdGlvbicgfSk7XG4gIH1cblxuICAvKipcbiAgICogVW5rbm93biBvcHRpb24gYGZsYWdgLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmxhZ1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICB1bmtub3duT3B0aW9uKGZsYWcpIHtcbiAgICBpZiAodGhpcy5fYWxsb3dVbmtub3duT3B0aW9uKSByZXR1cm47XG4gICAgbGV0IHN1Z2dlc3Rpb24gPSAnJztcblxuICAgIGlmIChmbGFnLnN0YXJ0c1dpdGgoJy0tJykgJiYgdGhpcy5fc2hvd1N1Z2dlc3Rpb25BZnRlckVycm9yKSB7XG4gICAgICAvLyBMb29waW5nIHRvIHBpY2sgdXAgdGhlIGdsb2JhbCBvcHRpb25zIHRvb1xuICAgICAgbGV0IGNhbmRpZGF0ZUZsYWdzID0gW107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICAgIGxldCBjb21tYW5kID0gdGhpcztcbiAgICAgIGRvIHtcbiAgICAgICAgY29uc3QgbW9yZUZsYWdzID0gY29tbWFuZFxuICAgICAgICAgIC5jcmVhdGVIZWxwKClcbiAgICAgICAgICAudmlzaWJsZU9wdGlvbnMoY29tbWFuZClcbiAgICAgICAgICAuZmlsdGVyKChvcHRpb24pID0+IG9wdGlvbi5sb25nKVxuICAgICAgICAgIC5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLmxvbmcpO1xuICAgICAgICBjYW5kaWRhdGVGbGFncyA9IGNhbmRpZGF0ZUZsYWdzLmNvbmNhdChtb3JlRmxhZ3MpO1xuICAgICAgICBjb21tYW5kID0gY29tbWFuZC5wYXJlbnQ7XG4gICAgICB9IHdoaWxlIChjb21tYW5kICYmICFjb21tYW5kLl9lbmFibGVQb3NpdGlvbmFsT3B0aW9ucyk7XG4gICAgICBzdWdnZXN0aW9uID0gc3VnZ2VzdFNpbWlsYXIoZmxhZywgY2FuZGlkYXRlRmxhZ3MpO1xuICAgIH1cblxuICAgIGNvbnN0IG1lc3NhZ2UgPSBgZXJyb3I6IHVua25vd24gb3B0aW9uICcke2ZsYWd9JyR7c3VnZ2VzdGlvbn1gO1xuICAgIHRoaXMuZXJyb3IobWVzc2FnZSwgeyBjb2RlOiAnY29tbWFuZGVyLnVua25vd25PcHRpb24nIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4Y2VzcyBhcmd1bWVudHMsIG1vcmUgdGhhbiBleHBlY3RlZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gcmVjZWl2ZWRBcmdzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9leGNlc3NBcmd1bWVudHMocmVjZWl2ZWRBcmdzKSB7XG4gICAgaWYgKHRoaXMuX2FsbG93RXhjZXNzQXJndW1lbnRzKSByZXR1cm47XG5cbiAgICBjb25zdCBleHBlY3RlZCA9IHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cy5sZW5ndGg7XG4gICAgY29uc3QgcyA9IGV4cGVjdGVkID09PSAxID8gJycgOiAncyc7XG4gICAgY29uc3QgZm9yU3ViY29tbWFuZCA9IHRoaXMucGFyZW50ID8gYCBmb3IgJyR7dGhpcy5uYW1lKCl9J2AgOiAnJztcbiAgICBjb25zdCBtZXNzYWdlID0gYGVycm9yOiB0b28gbWFueSBhcmd1bWVudHMke2ZvclN1YmNvbW1hbmR9LiBFeHBlY3RlZCAke2V4cGVjdGVkfSBhcmd1bWVudCR7c30gYnV0IGdvdCAke3JlY2VpdmVkQXJncy5sZW5ndGh9LmA7XG4gICAgdGhpcy5lcnJvcihtZXNzYWdlLCB7IGNvZGU6ICdjb21tYW5kZXIuZXhjZXNzQXJndW1lbnRzJyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbmtub3duIGNvbW1hbmQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIHVua25vd25Db21tYW5kKCkge1xuICAgIGNvbnN0IHVua25vd25OYW1lID0gdGhpcy5hcmdzWzBdO1xuICAgIGxldCBzdWdnZXN0aW9uID0gJyc7XG5cbiAgICBpZiAodGhpcy5fc2hvd1N1Z2dlc3Rpb25BZnRlckVycm9yKSB7XG4gICAgICBjb25zdCBjYW5kaWRhdGVOYW1lcyA9IFtdO1xuICAgICAgdGhpcy5jcmVhdGVIZWxwKClcbiAgICAgICAgLnZpc2libGVDb21tYW5kcyh0aGlzKVxuICAgICAgICAuZm9yRWFjaCgoY29tbWFuZCkgPT4ge1xuICAgICAgICAgIGNhbmRpZGF0ZU5hbWVzLnB1c2goY29tbWFuZC5uYW1lKCkpO1xuICAgICAgICAgIC8vIGp1c3QgdmlzaWJsZSBhbGlhc1xuICAgICAgICAgIGlmIChjb21tYW5kLmFsaWFzKCkpIGNhbmRpZGF0ZU5hbWVzLnB1c2goY29tbWFuZC5hbGlhcygpKTtcbiAgICAgICAgfSk7XG4gICAgICBzdWdnZXN0aW9uID0gc3VnZ2VzdFNpbWlsYXIodW5rbm93bk5hbWUsIGNhbmRpZGF0ZU5hbWVzKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlID0gYGVycm9yOiB1bmtub3duIGNvbW1hbmQgJyR7dW5rbm93bk5hbWV9JyR7c3VnZ2VzdGlvbn1gO1xuICAgIHRoaXMuZXJyb3IobWVzc2FnZSwgeyBjb2RlOiAnY29tbWFuZGVyLnVua25vd25Db21tYW5kJyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgb3Igc2V0IHRoZSBwcm9ncmFtIHZlcnNpb24uXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGF1dG8tcmVnaXN0ZXJzIHRoZSBcIi1WLCAtLXZlcnNpb25cIiBvcHRpb24gd2hpY2ggd2lsbCBwcmludCB0aGUgdmVyc2lvbiBudW1iZXIuXG4gICAqXG4gICAqIFlvdSBjYW4gb3B0aW9uYWxseSBzdXBwbHkgdGhlIGZsYWdzIGFuZCBkZXNjcmlwdGlvbiB0byBvdmVycmlkZSB0aGUgZGVmYXVsdHMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyXVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2ZsYWdzXVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXVxuICAgKiBAcmV0dXJuIHsodGhpcyB8IHN0cmluZyB8IHVuZGVmaW5lZCl9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZywgb3IgdmVyc2lvbiBzdHJpbmcgaWYgbm8gYXJndW1lbnRzXG4gICAqL1xuXG4gIHZlcnNpb24oc3RyLCBmbGFncywgZGVzY3JpcHRpb24pIHtcbiAgICBpZiAoc3RyID09PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLl92ZXJzaW9uO1xuICAgIHRoaXMuX3ZlcnNpb24gPSBzdHI7XG4gICAgZmxhZ3MgPSBmbGFncyB8fCAnLVYsIC0tdmVyc2lvbic7XG4gICAgZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbiB8fCAnb3V0cHV0IHRoZSB2ZXJzaW9uIG51bWJlcic7XG4gICAgY29uc3QgdmVyc2lvbk9wdGlvbiA9IHRoaXMuY3JlYXRlT3B0aW9uKGZsYWdzLCBkZXNjcmlwdGlvbik7XG4gICAgdGhpcy5fdmVyc2lvbk9wdGlvbk5hbWUgPSB2ZXJzaW9uT3B0aW9uLmF0dHJpYnV0ZU5hbWUoKTtcbiAgICB0aGlzLl9yZWdpc3Rlck9wdGlvbih2ZXJzaW9uT3B0aW9uKTtcblxuICAgIHRoaXMub24oJ29wdGlvbjonICsgdmVyc2lvbk9wdGlvbi5uYW1lKCksICgpID0+IHtcbiAgICAgIHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24ud3JpdGVPdXQoYCR7c3RyfVxcbmApO1xuICAgICAgdGhpcy5fZXhpdCgwLCAnY29tbWFuZGVyLnZlcnNpb24nLCBzdHIpO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZGVzY3JpcHRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyXVxuICAgKiBAcGFyYW0ge29iamVjdH0gW2FyZ3NEZXNjcmlwdGlvbl1cbiAgICogQHJldHVybiB7KHN0cmluZ3xDb21tYW5kKX1cbiAgICovXG4gIGRlc2NyaXB0aW9uKHN0ciwgYXJnc0Rlc2NyaXB0aW9uKSB7XG4gICAgaWYgKHN0ciA9PT0gdW5kZWZpbmVkICYmIGFyZ3NEZXNjcmlwdGlvbiA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuIHRoaXMuX2Rlc2NyaXB0aW9uO1xuICAgIHRoaXMuX2Rlc2NyaXB0aW9uID0gc3RyO1xuICAgIGlmIChhcmdzRGVzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX2FyZ3NEZXNjcmlwdGlvbiA9IGFyZ3NEZXNjcmlwdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBzdW1tYXJ5LiBVc2VkIHdoZW4gbGlzdGVkIGFzIHN1YmNvbW1hbmQgb2YgcGFyZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cl1cbiAgICogQHJldHVybiB7KHN0cmluZ3xDb21tYW5kKX1cbiAgICovXG4gIHN1bW1hcnkoc3RyKSB7XG4gICAgaWYgKHN0ciA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5fc3VtbWFyeTtcbiAgICB0aGlzLl9zdW1tYXJ5ID0gc3RyO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhbiBhbGlhcyBmb3IgdGhlIGNvbW1hbmQuXG4gICAqXG4gICAqIFlvdSBtYXkgY2FsbCBtb3JlIHRoYW4gb25jZSB0byBhZGQgbXVsdGlwbGUgYWxpYXNlcy4gT25seSB0aGUgZmlyc3QgYWxpYXMgaXMgc2hvd24gaW4gdGhlIGF1dG8tZ2VuZXJhdGVkIGhlbHAuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYWxpYXNdXG4gICAqIEByZXR1cm4geyhzdHJpbmd8Q29tbWFuZCl9XG4gICAqL1xuXG4gIGFsaWFzKGFsaWFzKSB7XG4gICAgaWYgKGFsaWFzID09PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLl9hbGlhc2VzWzBdOyAvLyBqdXN0IHJldHVybiBmaXJzdCwgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5cbiAgICAvKiogQHR5cGUge0NvbW1hbmR9ICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgbGV0IGNvbW1hbmQgPSB0aGlzO1xuICAgIGlmIChcbiAgICAgIHRoaXMuY29tbWFuZHMubGVuZ3RoICE9PSAwICYmXG4gICAgICB0aGlzLmNvbW1hbmRzW3RoaXMuY29tbWFuZHMubGVuZ3RoIC0gMV0uX2V4ZWN1dGFibGVIYW5kbGVyXG4gICAgKSB7XG4gICAgICAvLyBhc3N1bWUgYWRkaW5nIGFsaWFzIGZvciBsYXN0IGFkZGVkIGV4ZWN1dGFibGUgc3ViY29tbWFuZCwgcmF0aGVyIHRoYW4gdGhpc1xuICAgICAgY29tbWFuZCA9IHRoaXMuY29tbWFuZHNbdGhpcy5jb21tYW5kcy5sZW5ndGggLSAxXTtcbiAgICB9XG5cbiAgICBpZiAoYWxpYXMgPT09IGNvbW1hbmQuX25hbWUpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb21tYW5kIGFsaWFzIGNhbid0IGJlIHRoZSBzYW1lIGFzIGl0cyBuYW1lXCIpO1xuICAgIGNvbnN0IG1hdGNoaW5nQ29tbWFuZCA9IHRoaXMucGFyZW50Py5fZmluZENvbW1hbmQoYWxpYXMpO1xuICAgIGlmIChtYXRjaGluZ0NvbW1hbmQpIHtcbiAgICAgIC8vIGMuZi4gX3JlZ2lzdGVyQ29tbWFuZFxuICAgICAgY29uc3QgZXhpc3RpbmdDbWQgPSBbbWF0Y2hpbmdDb21tYW5kLm5hbWUoKV1cbiAgICAgICAgLmNvbmNhdChtYXRjaGluZ0NvbW1hbmQuYWxpYXNlcygpKVxuICAgICAgICAuam9pbignfCcpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgY2Fubm90IGFkZCBhbGlhcyAnJHthbGlhc30nIHRvIGNvbW1hbmQgJyR7dGhpcy5uYW1lKCl9JyBhcyBhbHJlYWR5IGhhdmUgY29tbWFuZCAnJHtleGlzdGluZ0NtZH0nYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29tbWFuZC5fYWxpYXNlcy5wdXNoKGFsaWFzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYWxpYXNlcyBmb3IgdGhlIGNvbW1hbmQuXG4gICAqXG4gICAqIE9ubHkgdGhlIGZpcnN0IGFsaWFzIGlzIHNob3duIGluIHRoZSBhdXRvLWdlbmVyYXRlZCBoZWxwLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbYWxpYXNlc11cbiAgICogQHJldHVybiB7KHN0cmluZ1tdfENvbW1hbmQpfVxuICAgKi9cblxuICBhbGlhc2VzKGFsaWFzZXMpIHtcbiAgICAvLyBHZXR0ZXIgZm9yIHRoZSBhcnJheSBvZiBhbGlhc2VzIGlzIHRoZSBtYWluIHJlYXNvbiBmb3IgaGF2aW5nIGFsaWFzZXMoKSBpbiBhZGRpdGlvbiB0byBhbGlhcygpLlxuICAgIGlmIChhbGlhc2VzID09PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLl9hbGlhc2VzO1xuXG4gICAgYWxpYXNlcy5mb3JFYWNoKChhbGlhcykgPT4gdGhpcy5hbGlhcyhhbGlhcykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCAvIGdldCB0aGUgY29tbWFuZCB1c2FnZSBgc3RyYC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJdXG4gICAqIEByZXR1cm4geyhzdHJpbmd8Q29tbWFuZCl9XG4gICAqL1xuXG4gIHVzYWdlKHN0cikge1xuICAgIGlmIChzdHIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHRoaXMuX3VzYWdlKSByZXR1cm4gdGhpcy5fdXNhZ2U7XG5cbiAgICAgIGNvbnN0IGFyZ3MgPSB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMubWFwKChhcmcpID0+IHtcbiAgICAgICAgcmV0dXJuIGh1bWFuUmVhZGFibGVBcmdOYW1lKGFyZyk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBbXVxuICAgICAgICAuY29uY2F0KFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5sZW5ndGggfHwgdGhpcy5faGVscE9wdGlvbiAhPT0gbnVsbCA/ICdbb3B0aW9uc10nIDogW10sXG4gICAgICAgICAgdGhpcy5jb21tYW5kcy5sZW5ndGggPyAnW2NvbW1hbmRdJyA6IFtdLFxuICAgICAgICAgIHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cy5sZW5ndGggPyBhcmdzIDogW10sXG4gICAgICAgIClcbiAgICAgICAgLmpvaW4oJyAnKTtcbiAgICB9XG5cbiAgICB0aGlzLl91c2FnZSA9IHN0cjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgb3Igc2V0IHRoZSBuYW1lIG9mIHRoZSBjb21tYW5kLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cl1cbiAgICogQHJldHVybiB7KHN0cmluZ3xDb21tYW5kKX1cbiAgICovXG5cbiAgbmFtZShzdHIpIHtcbiAgICBpZiAoc3RyID09PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLl9uYW1lO1xuICAgIHRoaXMuX25hbWUgPSBzdHI7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0L2dldCB0aGUgaGVscCBncm91cCBoZWFkaW5nIGZvciB0aGlzIHN1YmNvbW1hbmQgaW4gcGFyZW50IGNvbW1hbmQncyBoZWxwLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2hlYWRpbmddXG4gICAqIEByZXR1cm4ge0NvbW1hbmQgfCBzdHJpbmd9XG4gICAqL1xuXG4gIGhlbHBHcm91cChoZWFkaW5nKSB7XG4gICAgaWYgKGhlYWRpbmcgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuX2hlbHBHcm91cEhlYWRpbmcgPz8gJyc7XG4gICAgdGhpcy5faGVscEdyb3VwSGVhZGluZyA9IGhlYWRpbmc7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0L2dldCB0aGUgZGVmYXVsdCBoZWxwIGdyb3VwIGhlYWRpbmcgZm9yIHN1YmNvbW1hbmRzIGFkZGVkIHRvIHRoaXMgY29tbWFuZC5cbiAgICogKFRoaXMgZG9lcyBub3Qgb3ZlcnJpZGUgYSBncm91cCBzZXQgZGlyZWN0bHkgb24gdGhlIHN1YmNvbW1hbmQgdXNpbmcgLmhlbHBHcm91cCgpLilcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcHJvZ3JhbS5jb21tYW5kc0dyb3VwKCdEZXZlbG9wbWVudCBDb21tYW5kczopO1xuICAgKiBwcm9ncmFtLmNvbW1hbmQoJ3dhdGNoJykuLi5cbiAgICogcHJvZ3JhbS5jb21tYW5kKCdsaW50JykuLi5cbiAgICogLi4uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbaGVhZGluZ11cbiAgICogQHJldHVybnMge0NvbW1hbmQgfCBzdHJpbmd9XG4gICAqL1xuICBjb21tYW5kc0dyb3VwKGhlYWRpbmcpIHtcbiAgICBpZiAoaGVhZGluZyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5fZGVmYXVsdENvbW1hbmRHcm91cCA/PyAnJztcbiAgICB0aGlzLl9kZWZhdWx0Q29tbWFuZEdyb3VwID0gaGVhZGluZztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQvZ2V0IHRoZSBkZWZhdWx0IGhlbHAgZ3JvdXAgaGVhZGluZyBmb3Igb3B0aW9ucyBhZGRlZCB0byB0aGlzIGNvbW1hbmQuXG4gICAqIChUaGlzIGRvZXMgbm90IG92ZXJyaWRlIGEgZ3JvdXAgc2V0IGRpcmVjdGx5IG9uIHRoZSBvcHRpb24gdXNpbmcgLmhlbHBHcm91cCgpLilcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcHJvZ3JhbVxuICAgKiAgIC5vcHRpb25zR3JvdXAoJ0RldmVsb3BtZW50IE9wdGlvbnM6JylcbiAgICogICAub3B0aW9uKCctZCwgLS1kZWJ1ZycsICdvdXRwdXQgZXh0cmEgZGVidWdnaW5nJylcbiAgICogICAub3B0aW9uKCctcCwgLS1wcm9maWxlJywgJ291dHB1dCBwcm9maWxpbmcgaW5mb3JtYXRpb24nKVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2hlYWRpbmddXG4gICAqIEByZXR1cm5zIHtDb21tYW5kIHwgc3RyaW5nfVxuICAgKi9cbiAgb3B0aW9uc0dyb3VwKGhlYWRpbmcpIHtcbiAgICBpZiAoaGVhZGluZyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5fZGVmYXVsdE9wdGlvbkdyb3VwID8/ICcnO1xuICAgIHRoaXMuX2RlZmF1bHRPcHRpb25Hcm91cCA9IGhlYWRpbmc7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtPcHRpb259IG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXRPcHRpb25Hcm91cChvcHRpb24pIHtcbiAgICBpZiAodGhpcy5fZGVmYXVsdE9wdGlvbkdyb3VwICYmICFvcHRpb24uaGVscEdyb3VwSGVhZGluZylcbiAgICAgIG9wdGlvbi5oZWxwR3JvdXAodGhpcy5fZGVmYXVsdE9wdGlvbkdyb3VwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXRDb21tYW5kR3JvdXAoY21kKSB7XG4gICAgaWYgKHRoaXMuX2RlZmF1bHRDb21tYW5kR3JvdXAgJiYgIWNtZC5oZWxwR3JvdXAoKSlcbiAgICAgIGNtZC5oZWxwR3JvdXAodGhpcy5fZGVmYXVsdENvbW1hbmRHcm91cCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBuYW1lIG9mIHRoZSBjb21tYW5kIGZyb20gc2NyaXB0IGZpbGVuYW1lLCBzdWNoIGFzIHByb2Nlc3MuYXJndlsxXSxcbiAgICogb3IgcmVxdWlyZS5tYWluLmZpbGVuYW1lLCBvciBfX2ZpbGVuYW1lLlxuICAgKlxuICAgKiAoVXNlZCBpbnRlcm5hbGx5IGFuZCBwdWJsaWMgYWx0aG91Z2ggbm90IGRvY3VtZW50ZWQgaW4gUkVBRE1FLilcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcHJvZ3JhbS5uYW1lRnJvbUZpbGVuYW1lKHJlcXVpcmUubWFpbi5maWxlbmFtZSk7XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfVxuICAgKi9cblxuICBuYW1lRnJvbUZpbGVuYW1lKGZpbGVuYW1lKSB7XG4gICAgdGhpcy5fbmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZW5hbWUsIHBhdGguZXh0bmFtZShmaWxlbmFtZSkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG9yIHNldCB0aGUgZGlyZWN0b3J5IGZvciBzZWFyY2hpbmcgZm9yIGV4ZWN1dGFibGUgc3ViY29tbWFuZHMgb2YgdGhpcyBjb21tYW5kLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwcm9ncmFtLmV4ZWN1dGFibGVEaXIoX19kaXJuYW1lKTtcbiAgICogLy8gb3JcbiAgICogcHJvZ3JhbS5leGVjdXRhYmxlRGlyKCdzdWJjb21tYW5kcycpO1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhdGhdXG4gICAqIEByZXR1cm4geyhzdHJpbmd8bnVsbHxDb21tYW5kKX1cbiAgICovXG5cbiAgZXhlY3V0YWJsZURpcihwYXRoKSB7XG4gICAgaWYgKHBhdGggPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuX2V4ZWN1dGFibGVEaXI7XG4gICAgdGhpcy5fZXhlY3V0YWJsZURpciA9IHBhdGg7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHByb2dyYW0gaGVscCBkb2N1bWVudGF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3sgZXJyb3I6IGJvb2xlYW4gfX0gW2NvbnRleHRPcHRpb25zXSAtIHBhc3Mge2Vycm9yOnRydWV9IHRvIHdyYXAgZm9yIHN0ZGVyciBpbnN0ZWFkIG9mIHN0ZG91dFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG4gIGhlbHBJbmZvcm1hdGlvbihjb250ZXh0T3B0aW9ucykge1xuICAgIGNvbnN0IGhlbHBlciA9IHRoaXMuY3JlYXRlSGVscCgpO1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLl9nZXRPdXRwdXRDb250ZXh0KGNvbnRleHRPcHRpb25zKTtcbiAgICBoZWxwZXIucHJlcGFyZUNvbnRleHQoe1xuICAgICAgZXJyb3I6IGNvbnRleHQuZXJyb3IsXG4gICAgICBoZWxwV2lkdGg6IGNvbnRleHQuaGVscFdpZHRoLFxuICAgICAgb3V0cHV0SGFzQ29sb3JzOiBjb250ZXh0Lmhhc0NvbG9ycyxcbiAgICB9KTtcbiAgICBjb25zdCB0ZXh0ID0gaGVscGVyLmZvcm1hdEhlbHAodGhpcywgaGVscGVyKTtcbiAgICBpZiAoY29udGV4dC5oYXNDb2xvcnMpIHJldHVybiB0ZXh0O1xuICAgIHJldHVybiB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLnN0cmlwQ29sb3IodGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogQHR5cGVkZWYgSGVscENvbnRleHRcbiAgICogQHR5cGUge29iamVjdH1cbiAgICogQHByb3BlcnR5IHtib29sZWFufSBlcnJvclxuICAgKiBAcHJvcGVydHkge251bWJlcn0gaGVscFdpZHRoXG4gICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaGFzQ29sb3JzXG4gICAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IHdyaXRlIC0gaW5jbHVkZXMgc3RyaXBDb2xvciBpZiBuZWVkZWRcbiAgICpcbiAgICogQHJldHVybnMge0hlbHBDb250ZXh0fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfZ2V0T3V0cHV0Q29udGV4dChjb250ZXh0T3B0aW9ucykge1xuICAgIGNvbnRleHRPcHRpb25zID0gY29udGV4dE9wdGlvbnMgfHwge307XG4gICAgY29uc3QgZXJyb3IgPSAhIWNvbnRleHRPcHRpb25zLmVycm9yO1xuICAgIGxldCBiYXNlV3JpdGU7XG4gICAgbGV0IGhhc0NvbG9ycztcbiAgICBsZXQgaGVscFdpZHRoO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgYmFzZVdyaXRlID0gKHN0cikgPT4gdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbi53cml0ZUVycihzdHIpO1xuICAgICAgaGFzQ29sb3JzID0gdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbi5nZXRFcnJIYXNDb2xvcnMoKTtcbiAgICAgIGhlbHBXaWR0aCA9IHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24uZ2V0RXJySGVscFdpZHRoKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJhc2VXcml0ZSA9IChzdHIpID0+IHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24ud3JpdGVPdXQoc3RyKTtcbiAgICAgIGhhc0NvbG9ycyA9IHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24uZ2V0T3V0SGFzQ29sb3JzKCk7XG4gICAgICBoZWxwV2lkdGggPSB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLmdldE91dEhlbHBXaWR0aCgpO1xuICAgIH1cbiAgICBjb25zdCB3cml0ZSA9IChzdHIpID0+IHtcbiAgICAgIGlmICghaGFzQ29sb3JzKSBzdHIgPSB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLnN0cmlwQ29sb3Ioc3RyKTtcbiAgICAgIHJldHVybiBiYXNlV3JpdGUoc3RyKTtcbiAgICB9O1xuICAgIHJldHVybiB7IGVycm9yLCB3cml0ZSwgaGFzQ29sb3JzLCBoZWxwV2lkdGggfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdXRwdXQgaGVscCBpbmZvcm1hdGlvbiBmb3IgdGhpcyBjb21tYW5kLlxuICAgKlxuICAgKiBPdXRwdXRzIGJ1aWx0LWluIGhlbHAsIGFuZCBjdXN0b20gdGV4dCBhZGRlZCB1c2luZyBgLmFkZEhlbHBUZXh0KClgLlxuICAgKlxuICAgKiBAcGFyYW0ge3sgZXJyb3I6IGJvb2xlYW4gfSB8IEZ1bmN0aW9ufSBbY29udGV4dE9wdGlvbnNdIC0gcGFzcyB7ZXJyb3I6dHJ1ZX0gdG8gd3JpdGUgdG8gc3RkZXJyIGluc3RlYWQgb2Ygc3Rkb3V0XG4gICAqL1xuXG4gIG91dHB1dEhlbHAoY29udGV4dE9wdGlvbnMpIHtcbiAgICBsZXQgZGVwcmVjYXRlZENhbGxiYWNrO1xuICAgIGlmICh0eXBlb2YgY29udGV4dE9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGRlcHJlY2F0ZWRDYWxsYmFjayA9IGNvbnRleHRPcHRpb25zO1xuICAgICAgY29udGV4dE9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0Q29udGV4dCA9IHRoaXMuX2dldE91dHB1dENvbnRleHQoY29udGV4dE9wdGlvbnMpO1xuICAgIC8qKiBAdHlwZSB7SGVscFRleHRFdmVudENvbnRleHR9ICovXG4gICAgY29uc3QgZXZlbnRDb250ZXh0ID0ge1xuICAgICAgZXJyb3I6IG91dHB1dENvbnRleHQuZXJyb3IsXG4gICAgICB3cml0ZTogb3V0cHV0Q29udGV4dC53cml0ZSxcbiAgICAgIGNvbW1hbmQ6IHRoaXMsXG4gICAgfTtcblxuICAgIHRoaXMuX2dldENvbW1hbmRBbmRBbmNlc3RvcnMoKVxuICAgICAgLnJldmVyc2UoKVxuICAgICAgLmZvckVhY2goKGNvbW1hbmQpID0+IGNvbW1hbmQuZW1pdCgnYmVmb3JlQWxsSGVscCcsIGV2ZW50Q29udGV4dCkpO1xuICAgIHRoaXMuZW1pdCgnYmVmb3JlSGVscCcsIGV2ZW50Q29udGV4dCk7XG5cbiAgICBsZXQgaGVscEluZm9ybWF0aW9uID0gdGhpcy5oZWxwSW5mb3JtYXRpb24oeyBlcnJvcjogb3V0cHV0Q29udGV4dC5lcnJvciB9KTtcbiAgICBpZiAoZGVwcmVjYXRlZENhbGxiYWNrKSB7XG4gICAgICBoZWxwSW5mb3JtYXRpb24gPSBkZXByZWNhdGVkQ2FsbGJhY2soaGVscEluZm9ybWF0aW9uKTtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIGhlbHBJbmZvcm1hdGlvbiAhPT0gJ3N0cmluZycgJiZcbiAgICAgICAgIUJ1ZmZlci5pc0J1ZmZlcihoZWxwSW5mb3JtYXRpb24pXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdvdXRwdXRIZWxwIGNhbGxiYWNrIG11c3QgcmV0dXJuIGEgc3RyaW5nIG9yIGEgQnVmZmVyJyk7XG4gICAgICB9XG4gICAgfVxuICAgIG91dHB1dENvbnRleHQud3JpdGUoaGVscEluZm9ybWF0aW9uKTtcblxuICAgIGlmICh0aGlzLl9nZXRIZWxwT3B0aW9uKCk/LmxvbmcpIHtcbiAgICAgIHRoaXMuZW1pdCh0aGlzLl9nZXRIZWxwT3B0aW9uKCkubG9uZyk7IC8vIGRlcHJlY2F0ZWRcbiAgICB9XG4gICAgdGhpcy5lbWl0KCdhZnRlckhlbHAnLCBldmVudENvbnRleHQpO1xuICAgIHRoaXMuX2dldENvbW1hbmRBbmRBbmNlc3RvcnMoKS5mb3JFYWNoKChjb21tYW5kKSA9PlxuICAgICAgY29tbWFuZC5lbWl0KCdhZnRlckFsbEhlbHAnLCBldmVudENvbnRleHQpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogWW91IGNhbiBwYXNzIGluIGZsYWdzIGFuZCBhIGRlc2NyaXB0aW9uIHRvIGN1c3RvbWlzZSB0aGUgYnVpbHQtaW4gaGVscCBvcHRpb24uXG4gICAqIFBhc3MgaW4gZmFsc2UgdG8gZGlzYWJsZSB0aGUgYnVpbHQtaW4gaGVscCBvcHRpb24uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHByb2dyYW0uaGVscE9wdGlvbignLT8sIC0taGVscCcgJ3Nob3cgaGVscCcpOyAvLyBjdXN0b21pc2VcbiAgICogcHJvZ3JhbS5oZWxwT3B0aW9uKGZhbHNlKTsgLy8gZGlzYWJsZVxuICAgKlxuICAgKiBAcGFyYW0geyhzdHJpbmcgfCBib29sZWFuKX0gZmxhZ3NcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXNjcmlwdGlvbl1cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIGhlbHBPcHRpb24oZmxhZ3MsIGRlc2NyaXB0aW9uKSB7XG4gICAgLy8gU3VwcG9ydCBlbmFibGluZy9kaXNhYmxpbmcgYnVpbHQtaW4gaGVscCBvcHRpb24uXG4gICAgaWYgKHR5cGVvZiBmbGFncyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBpZiAoZmxhZ3MpIHtcbiAgICAgICAgaWYgKHRoaXMuX2hlbHBPcHRpb24gPT09IG51bGwpIHRoaXMuX2hlbHBPcHRpb24gPSB1bmRlZmluZWQ7IC8vIHJlZW5hYmxlXG4gICAgICAgIGlmICh0aGlzLl9kZWZhdWx0T3B0aW9uR3JvdXApIHtcbiAgICAgICAgICAvLyBtYWtlIHRoZSBvcHRpb24gdG8gc3RvcmUgdGhlIGdyb3VwXG4gICAgICAgICAgdGhpcy5faW5pdE9wdGlvbkdyb3VwKHRoaXMuX2dldEhlbHBPcHRpb24oKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2hlbHBPcHRpb24gPSBudWxsOyAvLyBkaXNhYmxlXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBDdXN0b21pc2UgZmxhZ3MgYW5kIGRlc2NyaXB0aW9uLlxuICAgIHRoaXMuX2hlbHBPcHRpb24gPSB0aGlzLmNyZWF0ZU9wdGlvbihcbiAgICAgIGZsYWdzID8/ICctaCwgLS1oZWxwJyxcbiAgICAgIGRlc2NyaXB0aW9uID8/ICdkaXNwbGF5IGhlbHAgZm9yIGNvbW1hbmQnLFxuICAgICk7XG4gICAgLy8gaW5pdCBncm91cCB1bmxlc3MgbGF6eSBjcmVhdGVcbiAgICBpZiAoZmxhZ3MgfHwgZGVzY3JpcHRpb24pIHRoaXMuX2luaXRPcHRpb25Hcm91cCh0aGlzLl9oZWxwT3B0aW9uKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIExhenkgY3JlYXRlIGhlbHAgb3B0aW9uLlxuICAgKiBSZXR1cm5zIG51bGwgaWYgaGFzIGJlZW4gZGlzYWJsZWQgd2l0aCAuaGVscE9wdGlvbihmYWxzZSkuXG4gICAqXG4gICAqIEByZXR1cm5zIHsoT3B0aW9uIHwgbnVsbCl9IHRoZSBoZWxwIG9wdGlvblxuICAgKiBAcGFja2FnZVxuICAgKi9cbiAgX2dldEhlbHBPcHRpb24oKSB7XG4gICAgLy8gTGF6eSBjcmVhdGUgaGVscCBvcHRpb24gb24gZGVtYW5kLlxuICAgIGlmICh0aGlzLl9oZWxwT3B0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaGVscE9wdGlvbih1bmRlZmluZWQsIHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9oZWxwT3B0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1cHBseSB5b3VyIG93biBvcHRpb24gdG8gdXNlIGZvciB0aGUgYnVpbHQtaW4gaGVscCBvcHRpb24uXG4gICAqIFRoaXMgaXMgYW4gYWx0ZXJuYXRpdmUgdG8gdXNpbmcgaGVscE9wdGlvbigpIHRvIGN1c3RvbWlzZSB0aGUgZmxhZ3MgYW5kIGRlc2NyaXB0aW9uIGV0Yy5cbiAgICpcbiAgICogQHBhcmFtIHtPcHRpb259IG9wdGlvblxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIGFkZEhlbHBPcHRpb24ob3B0aW9uKSB7XG4gICAgdGhpcy5faGVscE9wdGlvbiA9IG9wdGlvbjtcbiAgICB0aGlzLl9pbml0T3B0aW9uR3JvdXAob3B0aW9uKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBPdXRwdXQgaGVscCBpbmZvcm1hdGlvbiBhbmQgZXhpdC5cbiAgICpcbiAgICogT3V0cHV0cyBidWlsdC1pbiBoZWxwLCBhbmQgY3VzdG9tIHRleHQgYWRkZWQgdXNpbmcgYC5hZGRIZWxwVGV4dCgpYC5cbiAgICpcbiAgICogQHBhcmFtIHt7IGVycm9yOiBib29sZWFuIH19IFtjb250ZXh0T3B0aW9uc10gLSBwYXNzIHtlcnJvcjp0cnVlfSB0byB3cml0ZSB0byBzdGRlcnIgaW5zdGVhZCBvZiBzdGRvdXRcbiAgICovXG5cbiAgaGVscChjb250ZXh0T3B0aW9ucykge1xuICAgIHRoaXMub3V0cHV0SGVscChjb250ZXh0T3B0aW9ucyk7XG4gICAgbGV0IGV4aXRDb2RlID0gTnVtYmVyKHByb2Nlc3MuZXhpdENvZGUgPz8gMCk7IC8vIHByb2Nlc3MuZXhpdENvZGUgZG9lcyBhbGxvdyBhIHN0cmluZyBvciBhbiBpbnRlZ2VyLCBidXQgd2UgcHJlZmVyIGp1c3QgYSBudW1iZXJcbiAgICBpZiAoXG4gICAgICBleGl0Q29kZSA9PT0gMCAmJlxuICAgICAgY29udGV4dE9wdGlvbnMgJiZcbiAgICAgIHR5cGVvZiBjb250ZXh0T3B0aW9ucyAhPT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgY29udGV4dE9wdGlvbnMuZXJyb3JcbiAgICApIHtcbiAgICAgIGV4aXRDb2RlID0gMTtcbiAgICB9XG4gICAgLy8gbWVzc2FnZTogZG8gbm90IGhhdmUgYWxsIGRpc3BsYXllZCB0ZXh0IGF2YWlsYWJsZSBzbyBvbmx5IHBhc3NpbmcgcGxhY2Vob2xkZXIuXG4gICAgdGhpcy5fZXhpdChleGl0Q29kZSwgJ2NvbW1hbmRlci5oZWxwJywgJyhvdXRwdXRIZWxwKScpO1xuICB9XG5cbiAgLyoqXG4gICAqIC8vIERvIGEgbGl0dGxlIHR5cGluZyB0byBjb29yZGluYXRlIGVtaXQgYW5kIGxpc3RlbmVyIGZvciB0aGUgaGVscCB0ZXh0IGV2ZW50cy5cbiAgICogQHR5cGVkZWYgSGVscFRleHRFdmVudENvbnRleHRcbiAgICogQHR5cGUge29iamVjdH1cbiAgICogQHByb3BlcnR5IHtib29sZWFufSBlcnJvclxuICAgKiBAcHJvcGVydHkge0NvbW1hbmR9IGNvbW1hbmRcbiAgICogQHByb3BlcnR5IHtmdW5jdGlvbn0gd3JpdGVcbiAgICovXG5cbiAgLyoqXG4gICAqIEFkZCBhZGRpdGlvbmFsIHRleHQgdG8gYmUgZGlzcGxheWVkIHdpdGggdGhlIGJ1aWx0LWluIGhlbHAuXG4gICAqXG4gICAqIFBvc2l0aW9uIGlzICdiZWZvcmUnIG9yICdhZnRlcicgdG8gYWZmZWN0IGp1c3QgdGhpcyBjb21tYW5kLFxuICAgKiBhbmQgJ2JlZm9yZUFsbCcgb3IgJ2FmdGVyQWxsJyB0byBhZmZlY3QgdGhpcyBjb21tYW5kIGFuZCBhbGwgaXRzIHN1YmNvbW1hbmRzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcG9zaXRpb24gLSBiZWZvcmUgb3IgYWZ0ZXIgYnVpbHQtaW4gaGVscFxuICAgKiBAcGFyYW0geyhzdHJpbmcgfCBGdW5jdGlvbil9IHRleHQgLSBzdHJpbmcgdG8gYWRkLCBvciBhIGZ1bmN0aW9uIHJldHVybmluZyBhIHN0cmluZ1xuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgYWRkSGVscFRleHQocG9zaXRpb24sIHRleHQpIHtcbiAgICBjb25zdCBhbGxvd2VkVmFsdWVzID0gWydiZWZvcmVBbGwnLCAnYmVmb3JlJywgJ2FmdGVyJywgJ2FmdGVyQWxsJ107XG4gICAgaWYgKCFhbGxvd2VkVmFsdWVzLmluY2x1ZGVzKHBvc2l0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHZhbHVlIGZvciBwb3NpdGlvbiB0byBhZGRIZWxwVGV4dC5cbkV4cGVjdGluZyBvbmUgb2YgJyR7YWxsb3dlZFZhbHVlcy5qb2luKFwiJywgJ1wiKX0nYCk7XG4gICAgfVxuXG4gICAgY29uc3QgaGVscEV2ZW50ID0gYCR7cG9zaXRpb259SGVscGA7XG4gICAgdGhpcy5vbihoZWxwRXZlbnQsICgvKiogQHR5cGUge0hlbHBUZXh0RXZlbnRDb250ZXh0fSAqLyBjb250ZXh0KSA9PiB7XG4gICAgICBsZXQgaGVscFN0cjtcbiAgICAgIGlmICh0eXBlb2YgdGV4dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBoZWxwU3RyID0gdGV4dCh7IGVycm9yOiBjb250ZXh0LmVycm9yLCBjb21tYW5kOiBjb250ZXh0LmNvbW1hbmQgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoZWxwU3RyID0gdGV4dDtcbiAgICAgIH1cbiAgICAgIC8vIElnbm9yZSBmYWxzeSB2YWx1ZSB3aGVuIG5vdGhpbmcgdG8gb3V0cHV0LlxuICAgICAgaWYgKGhlbHBTdHIpIHtcbiAgICAgICAgY29udGV4dC53cml0ZShgJHtoZWxwU3RyfVxcbmApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIE91dHB1dCBoZWxwIGluZm9ybWF0aW9uIGlmIGhlbHAgZmxhZ3Mgc3BlY2lmaWVkXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgLSBhcnJheSBvZiBvcHRpb25zIHRvIHNlYXJjaCBmb3IgaGVscCBmbGFnc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfb3V0cHV0SGVscElmUmVxdWVzdGVkKGFyZ3MpIHtcbiAgICBjb25zdCBoZWxwT3B0aW9uID0gdGhpcy5fZ2V0SGVscE9wdGlvbigpO1xuICAgIGNvbnN0IGhlbHBSZXF1ZXN0ZWQgPSBoZWxwT3B0aW9uICYmIGFyZ3MuZmluZCgoYXJnKSA9PiBoZWxwT3B0aW9uLmlzKGFyZykpO1xuICAgIGlmIChoZWxwUmVxdWVzdGVkKSB7XG4gICAgICB0aGlzLm91dHB1dEhlbHAoKTtcbiAgICAgIC8vIChEbyBub3QgaGF2ZSBhbGwgZGlzcGxheWVkIHRleHQgYXZhaWxhYmxlIHNvIG9ubHkgcGFzc2luZyBwbGFjZWhvbGRlci4pXG4gICAgICB0aGlzLl9leGl0KDAsICdjb21tYW5kZXIuaGVscERpc3BsYXllZCcsICcob3V0cHV0SGVscCknKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBTY2FuIGFyZ3VtZW50cyBhbmQgaW5jcmVtZW50IHBvcnQgbnVtYmVyIGZvciBpbnNwZWN0IGNhbGxzICh0byBhdm9pZCBjb25mbGljdHMgd2hlbiBzcGF3bmluZyBuZXcgY29tbWFuZCkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gYXJncyAtIGFycmF5IG9mIGFyZ3VtZW50cyBmcm9tIG5vZGUuZXhlY0FyZ3ZcbiAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gaW5jcmVtZW50Tm9kZUluc3BlY3RvclBvcnQoYXJncykge1xuICAvLyBUZXN0aW5nIGZvciB0aGVzZSBvcHRpb25zOlxuICAvLyAgLS1pbnNwZWN0Wz1baG9zdDpdcG9ydF1cbiAgLy8gIC0taW5zcGVjdC1icmtbPVtob3N0Ol1wb3J0XVxuICAvLyAgLS1pbnNwZWN0LXBvcnQ9W2hvc3Q6XXBvcnRcbiAgcmV0dXJuIGFyZ3MubWFwKChhcmcpID0+IHtcbiAgICBpZiAoIWFyZy5zdGFydHNXaXRoKCctLWluc3BlY3QnKSkge1xuICAgICAgcmV0dXJuIGFyZztcbiAgICB9XG4gICAgbGV0IGRlYnVnT3B0aW9uO1xuICAgIGxldCBkZWJ1Z0hvc3QgPSAnMTI3LjAuMC4xJztcbiAgICBsZXQgZGVidWdQb3J0ID0gJzkyMjknO1xuICAgIGxldCBtYXRjaDtcbiAgICBpZiAoKG1hdGNoID0gYXJnLm1hdGNoKC9eKC0taW5zcGVjdCgtYnJrKT8pJC8pKSAhPT0gbnVsbCkge1xuICAgICAgLy8gZS5nLiAtLWluc3BlY3RcbiAgICAgIGRlYnVnT3B0aW9uID0gbWF0Y2hbMV07XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIChtYXRjaCA9IGFyZy5tYXRjaCgvXigtLWluc3BlY3QoLWJya3wtcG9ydCk/KT0oW146XSspJC8pKSAhPT0gbnVsbFxuICAgICkge1xuICAgICAgZGVidWdPcHRpb24gPSBtYXRjaFsxXTtcbiAgICAgIGlmICgvXlxcZCskLy50ZXN0KG1hdGNoWzNdKSkge1xuICAgICAgICAvLyBlLmcuIC0taW5zcGVjdD0xMjM0XG4gICAgICAgIGRlYnVnUG9ydCA9IG1hdGNoWzNdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZS5nLiAtLWluc3BlY3Q9bG9jYWxob3N0XG4gICAgICAgIGRlYnVnSG9zdCA9IG1hdGNoWzNdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICAobWF0Y2ggPSBhcmcubWF0Y2goL14oLS1pbnNwZWN0KC1icmt8LXBvcnQpPyk9KFteOl0rKTooXFxkKykkLykpICE9PSBudWxsXG4gICAgKSB7XG4gICAgICAvLyBlLmcuIC0taW5zcGVjdD1sb2NhbGhvc3Q6MTIzNFxuICAgICAgZGVidWdPcHRpb24gPSBtYXRjaFsxXTtcbiAgICAgIGRlYnVnSG9zdCA9IG1hdGNoWzNdO1xuICAgICAgZGVidWdQb3J0ID0gbWF0Y2hbNF07XG4gICAgfVxuXG4gICAgaWYgKGRlYnVnT3B0aW9uICYmIGRlYnVnUG9ydCAhPT0gJzAnKSB7XG4gICAgICByZXR1cm4gYCR7ZGVidWdPcHRpb259PSR7ZGVidWdIb3N0fToke3BhcnNlSW50KGRlYnVnUG9ydCkgKyAxfWA7XG4gICAgfVxuICAgIHJldHVybiBhcmc7XG4gIH0pO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtib29sZWFuIHwgdW5kZWZpbmVkfVxuICogQHBhY2thZ2VcbiAqL1xuZnVuY3Rpb24gdXNlQ29sb3IoKSB7XG4gIC8vIFRlc3QgZm9yIGNvbW1vbiBjb252ZW50aW9ucy5cbiAgLy8gTkI6IHRoZSBvYnNlcnZlZCBiZWhhdmlvdXIgaXMgaW4gY29tYmluYXRpb24gd2l0aCBob3cgYXV0aG9yIGFkZHMgY29sb3IhIEZvciBleGFtcGxlOlxuICAvLyAgIC0gd2UgZG8gbm90IHRlc3QgTk9ERV9ESVNBQkxFX0NPTE9SUywgYnV0IHV0aWw6c3R5bGV0ZXh0IGRvZXNcbiAgLy8gICAtIHdlIGRvIHRlc3QgTk9fQ09MT1IsIGJ1dCBDaGFsayBkb2VzIG5vdFxuICAvL1xuICAvLyBSZWZlcmVuY2VzOlxuICAvLyBodHRwczovL25vLWNvbG9yLm9yZ1xuICAvLyBodHRwczovL2JpeGVuc2UuY29tL2NsaWNvbG9ycy9cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvMGEwMDIxN2E1ZjY3ZWY0YTIyMzg0Y2ZjODBlYjZkZDlhOTE3ZmRjMS9saWIvaW50ZXJuYWwvdHR5LmpzI0wxMDlcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL3N1cHBvcnRzLWNvbG9yL2Jsb2IvYzIxNDMxNGExNGJjYjE3NGIxMmIzMDE0YjJiMGE4ZGUzNzUwMjlhZS9pbmRleC5qcyNMMzNcbiAgLy8gKGh0dHBzOi8vZm9yY2UtY29sb3Iub3JnIHJlY2VudCB3ZWIgcGFnZSBmcm9tIDIwMjMsIGRvZXMgbm90IG1hdGNoIG1ham9yIGphdmFzY3JpcHQgaW1wbGVtZW50YXRpb25zKVxuXG4gIGlmIChcbiAgICBwcm9jZXNzLmVudi5OT19DT0xPUiB8fFxuICAgIHByb2Nlc3MuZW52LkZPUkNFX0NPTE9SID09PSAnMCcgfHxcbiAgICBwcm9jZXNzLmVudi5GT1JDRV9DT0xPUiA9PT0gJ2ZhbHNlJ1xuICApXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpZiAocHJvY2Vzcy5lbnYuRk9SQ0VfQ09MT1IgfHwgcHJvY2Vzcy5lbnYuQ0xJQ09MT1JfRk9SQ0UgIT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0cy5Db21tYW5kID0gQ29tbWFuZDtcbmV4cG9ydHMudXNlQ29sb3IgPSB1c2VDb2xvcjsgLy8gZXhwb3J0aW5nIGZvciB0ZXN0c1xuIiwgImNvbnN0IHsgQXJndW1lbnQgfSA9IHJlcXVpcmUoJy4vbGliL2FyZ3VtZW50LmpzJyk7XG5jb25zdCB7IENvbW1hbmQgfSA9IHJlcXVpcmUoJy4vbGliL2NvbW1hbmQuanMnKTtcbmNvbnN0IHsgQ29tbWFuZGVyRXJyb3IsIEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuL2xpYi9lcnJvci5qcycpO1xuY29uc3QgeyBIZWxwIH0gPSByZXF1aXJlKCcuL2xpYi9oZWxwLmpzJyk7XG5jb25zdCB7IE9wdGlvbiB9ID0gcmVxdWlyZSgnLi9saWIvb3B0aW9uLmpzJyk7XG5cbmV4cG9ydHMucHJvZ3JhbSA9IG5ldyBDb21tYW5kKCk7XG5cbmV4cG9ydHMuY3JlYXRlQ29tbWFuZCA9IChuYW1lKSA9PiBuZXcgQ29tbWFuZChuYW1lKTtcbmV4cG9ydHMuY3JlYXRlT3B0aW9uID0gKGZsYWdzLCBkZXNjcmlwdGlvbikgPT4gbmV3IE9wdGlvbihmbGFncywgZGVzY3JpcHRpb24pO1xuZXhwb3J0cy5jcmVhdGVBcmd1bWVudCA9IChuYW1lLCBkZXNjcmlwdGlvbikgPT4gbmV3IEFyZ3VtZW50KG5hbWUsIGRlc2NyaXB0aW9uKTtcblxuLyoqXG4gKiBFeHBvc2UgY2xhc3Nlc1xuICovXG5cbmV4cG9ydHMuQ29tbWFuZCA9IENvbW1hbmQ7XG5leHBvcnRzLk9wdGlvbiA9IE9wdGlvbjtcbmV4cG9ydHMuQXJndW1lbnQgPSBBcmd1bWVudDtcbmV4cG9ydHMuSGVscCA9IEhlbHA7XG5cbmV4cG9ydHMuQ29tbWFuZGVyRXJyb3IgPSBDb21tYW5kZXJFcnJvcjtcbmV4cG9ydHMuSW52YWxpZEFyZ3VtZW50RXJyb3IgPSBJbnZhbGlkQXJndW1lbnRFcnJvcjtcbmV4cG9ydHMuSW52YWxpZE9wdGlvbkFyZ3VtZW50RXJyb3IgPSBJbnZhbGlkQXJndW1lbnRFcnJvcjsgLy8gRGVwcmVjYXRlZFxuIiwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgIid1c2Ugc3RyaWN0JztcblxudmFyIG5ldCA9IHJlcXVpcmUoJ25ldCcpO1xudmFyIHRscyA9IHJlcXVpcmUoJ3RscycpO1xudmFyIGh0dHAgPSByZXF1aXJlKCdodHRwJyk7XG52YXIgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpO1xudmFyIGV2ZW50cyA9IHJlcXVpcmUoJ2V2ZW50cycpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cblxuZXhwb3J0cy5odHRwT3Zlckh0dHAgPSBodHRwT3Zlckh0dHA7XG5leHBvcnRzLmh0dHBzT3Zlckh0dHAgPSBodHRwc092ZXJIdHRwO1xuZXhwb3J0cy5odHRwT3Zlckh0dHBzID0gaHR0cE92ZXJIdHRwcztcbmV4cG9ydHMuaHR0cHNPdmVySHR0cHMgPSBodHRwc092ZXJIdHRwcztcblxuXG5mdW5jdGlvbiBodHRwT3Zlckh0dHAob3B0aW9ucykge1xuICB2YXIgYWdlbnQgPSBuZXcgVHVubmVsaW5nQWdlbnQob3B0aW9ucyk7XG4gIGFnZW50LnJlcXVlc3QgPSBodHRwLnJlcXVlc3Q7XG4gIHJldHVybiBhZ2VudDtcbn1cblxuZnVuY3Rpb24gaHR0cHNPdmVySHR0cChvcHRpb25zKSB7XG4gIHZhciBhZ2VudCA9IG5ldyBUdW5uZWxpbmdBZ2VudChvcHRpb25zKTtcbiAgYWdlbnQucmVxdWVzdCA9IGh0dHAucmVxdWVzdDtcbiAgYWdlbnQuY3JlYXRlU29ja2V0ID0gY3JlYXRlU2VjdXJlU29ja2V0O1xuICBhZ2VudC5kZWZhdWx0UG9ydCA9IDQ0MztcbiAgcmV0dXJuIGFnZW50O1xufVxuXG5mdW5jdGlvbiBodHRwT3Zlckh0dHBzKG9wdGlvbnMpIHtcbiAgdmFyIGFnZW50ID0gbmV3IFR1bm5lbGluZ0FnZW50KG9wdGlvbnMpO1xuICBhZ2VudC5yZXF1ZXN0ID0gaHR0cHMucmVxdWVzdDtcbiAgcmV0dXJuIGFnZW50O1xufVxuXG5mdW5jdGlvbiBodHRwc092ZXJIdHRwcyhvcHRpb25zKSB7XG4gIHZhciBhZ2VudCA9IG5ldyBUdW5uZWxpbmdBZ2VudChvcHRpb25zKTtcbiAgYWdlbnQucmVxdWVzdCA9IGh0dHBzLnJlcXVlc3Q7XG4gIGFnZW50LmNyZWF0ZVNvY2tldCA9IGNyZWF0ZVNlY3VyZVNvY2tldDtcbiAgYWdlbnQuZGVmYXVsdFBvcnQgPSA0NDM7XG4gIHJldHVybiBhZ2VudDtcbn1cblxuXG5mdW5jdGlvbiBUdW5uZWxpbmdBZ2VudChvcHRpb25zKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgc2VsZi5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgc2VsZi5wcm94eU9wdGlvbnMgPSBzZWxmLm9wdGlvbnMucHJveHkgfHwge307XG4gIHNlbGYubWF4U29ja2V0cyA9IHNlbGYub3B0aW9ucy5tYXhTb2NrZXRzIHx8IGh0dHAuQWdlbnQuZGVmYXVsdE1heFNvY2tldHM7XG4gIHNlbGYucmVxdWVzdHMgPSBbXTtcbiAgc2VsZi5zb2NrZXRzID0gW107XG5cbiAgc2VsZi5vbignZnJlZScsIGZ1bmN0aW9uIG9uRnJlZShzb2NrZXQsIGhvc3QsIHBvcnQsIGxvY2FsQWRkcmVzcykge1xuICAgIHZhciBvcHRpb25zID0gdG9PcHRpb25zKGhvc3QsIHBvcnQsIGxvY2FsQWRkcmVzcyk7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHNlbGYucmVxdWVzdHMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgIHZhciBwZW5kaW5nID0gc2VsZi5yZXF1ZXN0c1tpXTtcbiAgICAgIGlmIChwZW5kaW5nLmhvc3QgPT09IG9wdGlvbnMuaG9zdCAmJiBwZW5kaW5nLnBvcnQgPT09IG9wdGlvbnMucG9ydCkge1xuICAgICAgICAvLyBEZXRlY3QgdGhlIHJlcXVlc3QgdG8gY29ubmVjdCBzYW1lIG9yaWdpbiBzZXJ2ZXIsXG4gICAgICAgIC8vIHJldXNlIHRoZSBjb25uZWN0aW9uLlxuICAgICAgICBzZWxmLnJlcXVlc3RzLnNwbGljZShpLCAxKTtcbiAgICAgICAgcGVuZGluZy5yZXF1ZXN0Lm9uU29ja2V0KHNvY2tldCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgc29ja2V0LmRlc3Ryb3koKTtcbiAgICBzZWxmLnJlbW92ZVNvY2tldChzb2NrZXQpO1xuICB9KTtcbn1cbnV0aWwuaW5oZXJpdHMoVHVubmVsaW5nQWdlbnQsIGV2ZW50cy5FdmVudEVtaXR0ZXIpO1xuXG5UdW5uZWxpbmdBZ2VudC5wcm90b3R5cGUuYWRkUmVxdWVzdCA9IGZ1bmN0aW9uIGFkZFJlcXVlc3QocmVxLCBob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgb3B0aW9ucyA9IG1lcmdlT3B0aW9ucyh7cmVxdWVzdDogcmVxfSwgc2VsZi5vcHRpb25zLCB0b09wdGlvbnMoaG9zdCwgcG9ydCwgbG9jYWxBZGRyZXNzKSk7XG5cbiAgaWYgKHNlbGYuc29ja2V0cy5sZW5ndGggPj0gdGhpcy5tYXhTb2NrZXRzKSB7XG4gICAgLy8gV2UgYXJlIG92ZXIgbGltaXQgc28gd2UnbGwgYWRkIGl0IHRvIHRoZSBxdWV1ZS5cbiAgICBzZWxmLnJlcXVlc3RzLnB1c2gob3B0aW9ucyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gSWYgd2UgYXJlIHVuZGVyIG1heFNvY2tldHMgY3JlYXRlIGEgbmV3IG9uZS5cbiAgc2VsZi5jcmVhdGVTb2NrZXQob3B0aW9ucywgZnVuY3Rpb24oc29ja2V0KSB7XG4gICAgc29ja2V0Lm9uKCdmcmVlJywgb25GcmVlKTtcbiAgICBzb2NrZXQub24oJ2Nsb3NlJywgb25DbG9zZU9yUmVtb3ZlKTtcbiAgICBzb2NrZXQub24oJ2FnZW50UmVtb3ZlJywgb25DbG9zZU9yUmVtb3ZlKTtcbiAgICByZXEub25Tb2NrZXQoc29ja2V0KTtcblxuICAgIGZ1bmN0aW9uIG9uRnJlZSgpIHtcbiAgICAgIHNlbGYuZW1pdCgnZnJlZScsIHNvY2tldCwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25DbG9zZU9yUmVtb3ZlKGVycikge1xuICAgICAgc2VsZi5yZW1vdmVTb2NrZXQoc29ja2V0KTtcbiAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignZnJlZScsIG9uRnJlZSk7XG4gICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25DbG9zZU9yUmVtb3ZlKTtcbiAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignYWdlbnRSZW1vdmUnLCBvbkNsb3NlT3JSZW1vdmUpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5UdW5uZWxpbmdBZ2VudC5wcm90b3R5cGUuY3JlYXRlU29ja2V0ID0gZnVuY3Rpb24gY3JlYXRlU29ja2V0KG9wdGlvbnMsIGNiKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHBsYWNlaG9sZGVyID0ge307XG4gIHNlbGYuc29ja2V0cy5wdXNoKHBsYWNlaG9sZGVyKTtcblxuICB2YXIgY29ubmVjdE9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoe30sIHNlbGYucHJveHlPcHRpb25zLCB7XG4gICAgbWV0aG9kOiAnQ09OTkVDVCcsXG4gICAgcGF0aDogb3B0aW9ucy5ob3N0ICsgJzonICsgb3B0aW9ucy5wb3J0LFxuICAgIGFnZW50OiBmYWxzZSxcbiAgICBoZWFkZXJzOiB7XG4gICAgICBob3N0OiBvcHRpb25zLmhvc3QgKyAnOicgKyBvcHRpb25zLnBvcnRcbiAgICB9XG4gIH0pO1xuICBpZiAob3B0aW9ucy5sb2NhbEFkZHJlc3MpIHtcbiAgICBjb25uZWN0T3B0aW9ucy5sb2NhbEFkZHJlc3MgPSBvcHRpb25zLmxvY2FsQWRkcmVzcztcbiAgfVxuICBpZiAoY29ubmVjdE9wdGlvbnMucHJveHlBdXRoKSB7XG4gICAgY29ubmVjdE9wdGlvbnMuaGVhZGVycyA9IGNvbm5lY3RPcHRpb25zLmhlYWRlcnMgfHwge307XG4gICAgY29ubmVjdE9wdGlvbnMuaGVhZGVyc1snUHJveHktQXV0aG9yaXphdGlvbiddID0gJ0Jhc2ljICcgK1xuICAgICAgICBuZXcgQnVmZmVyKGNvbm5lY3RPcHRpb25zLnByb3h5QXV0aCkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICB9XG5cbiAgZGVidWcoJ21ha2luZyBDT05ORUNUIHJlcXVlc3QnKTtcbiAgdmFyIGNvbm5lY3RSZXEgPSBzZWxmLnJlcXVlc3QoY29ubmVjdE9wdGlvbnMpO1xuICBjb25uZWN0UmVxLnVzZUNodW5rZWRFbmNvZGluZ0J5RGVmYXVsdCA9IGZhbHNlOyAvLyBmb3IgdjAuNlxuICBjb25uZWN0UmVxLm9uY2UoJ3Jlc3BvbnNlJywgb25SZXNwb25zZSk7IC8vIGZvciB2MC42XG4gIGNvbm5lY3RSZXEub25jZSgndXBncmFkZScsIG9uVXBncmFkZSk7ICAgLy8gZm9yIHYwLjZcbiAgY29ubmVjdFJlcS5vbmNlKCdjb25uZWN0Jywgb25Db25uZWN0KTsgICAvLyBmb3IgdjAuNyBvciBsYXRlclxuICBjb25uZWN0UmVxLm9uY2UoJ2Vycm9yJywgb25FcnJvcik7XG4gIGNvbm5lY3RSZXEuZW5kKCk7XG5cbiAgZnVuY3Rpb24gb25SZXNwb25zZShyZXMpIHtcbiAgICAvLyBWZXJ5IGhhY2t5LiBUaGlzIGlzIG5lY2Vzc2FyeSB0byBhdm9pZCBodHRwLXBhcnNlciBsZWFrcy5cbiAgICByZXMudXBncmFkZSA9IHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBvblVwZ3JhZGUocmVzLCBzb2NrZXQsIGhlYWQpIHtcbiAgICAvLyBIYWNreS5cbiAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCkge1xuICAgICAgb25Db25uZWN0KHJlcywgc29ja2V0LCBoZWFkKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uQ29ubmVjdChyZXMsIHNvY2tldCwgaGVhZCkge1xuICAgIGNvbm5lY3RSZXEucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgc29ja2V0LnJlbW92ZUFsbExpc3RlbmVycygpO1xuXG4gICAgaWYgKHJlcy5zdGF0dXNDb2RlICE9PSAyMDApIHtcbiAgICAgIGRlYnVnKCd0dW5uZWxpbmcgc29ja2V0IGNvdWxkIG5vdCBiZSBlc3RhYmxpc2hlZCwgc3RhdHVzQ29kZT0lZCcsXG4gICAgICAgIHJlcy5zdGF0dXNDb2RlKTtcbiAgICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IoJ3R1bm5lbGluZyBzb2NrZXQgY291bGQgbm90IGJlIGVzdGFibGlzaGVkLCAnICtcbiAgICAgICAgJ3N0YXR1c0NvZGU9JyArIHJlcy5zdGF0dXNDb2RlKTtcbiAgICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCc7XG4gICAgICBvcHRpb25zLnJlcXVlc3QuZW1pdCgnZXJyb3InLCBlcnJvcik7XG4gICAgICBzZWxmLnJlbW92ZVNvY2tldChwbGFjZWhvbGRlcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChoZWFkLmxlbmd0aCA+IDApIHtcbiAgICAgIGRlYnVnKCdnb3QgaWxsZWdhbCByZXNwb25zZSBib2R5IGZyb20gcHJveHknKTtcbiAgICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IoJ2dvdCBpbGxlZ2FsIHJlc3BvbnNlIGJvZHkgZnJvbSBwcm94eScpO1xuICAgICAgZXJyb3IuY29kZSA9ICdFQ09OTlJFU0VUJztcbiAgICAgIG9wdGlvbnMucmVxdWVzdC5lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICAgIHNlbGYucmVtb3ZlU29ja2V0KHBsYWNlaG9sZGVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZGVidWcoJ3R1bm5lbGluZyBjb25uZWN0aW9uIGhhcyBlc3RhYmxpc2hlZCcpO1xuICAgIHNlbGYuc29ja2V0c1tzZWxmLnNvY2tldHMuaW5kZXhPZihwbGFjZWhvbGRlcildID0gc29ja2V0O1xuICAgIHJldHVybiBjYihzb2NrZXQpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25FcnJvcihjYXVzZSkge1xuICAgIGNvbm5lY3RSZXEucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG5cbiAgICBkZWJ1ZygndHVubmVsaW5nIHNvY2tldCBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQsIGNhdXNlPSVzXFxuJyxcbiAgICAgICAgICBjYXVzZS5tZXNzYWdlLCBjYXVzZS5zdGFjayk7XG4gICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCd0dW5uZWxpbmcgc29ja2V0IGNvdWxkIG5vdCBiZSBlc3RhYmxpc2hlZCwgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdjYXVzZT0nICsgY2F1c2UubWVzc2FnZSk7XG4gICAgZXJyb3IuY29kZSA9ICdFQ09OTlJFU0VUJztcbiAgICBvcHRpb25zLnJlcXVlc3QuZW1pdCgnZXJyb3InLCBlcnJvcik7XG4gICAgc2VsZi5yZW1vdmVTb2NrZXQocGxhY2Vob2xkZXIpO1xuICB9XG59O1xuXG5UdW5uZWxpbmdBZ2VudC5wcm90b3R5cGUucmVtb3ZlU29ja2V0ID0gZnVuY3Rpb24gcmVtb3ZlU29ja2V0KHNvY2tldCkge1xuICB2YXIgcG9zID0gdGhpcy5zb2NrZXRzLmluZGV4T2Yoc29ja2V0KVxuICBpZiAocG9zID09PSAtMSkge1xuICAgIHJldHVybjtcbiAgfVxuICB0aGlzLnNvY2tldHMuc3BsaWNlKHBvcywgMSk7XG5cbiAgdmFyIHBlbmRpbmcgPSB0aGlzLnJlcXVlc3RzLnNoaWZ0KCk7XG4gIGlmIChwZW5kaW5nKSB7XG4gICAgLy8gSWYgd2UgaGF2ZSBwZW5kaW5nIHJlcXVlc3RzIGFuZCBhIHNvY2tldCBnZXRzIGNsb3NlZCBhIG5ldyBvbmVcbiAgICAvLyBuZWVkcyB0byBiZSBjcmVhdGVkIHRvIHRha2Ugb3ZlciBpbiB0aGUgcG9vbCBmb3IgdGhlIG9uZSB0aGF0IGNsb3NlZC5cbiAgICB0aGlzLmNyZWF0ZVNvY2tldChwZW5kaW5nLCBmdW5jdGlvbihzb2NrZXQpIHtcbiAgICAgIHBlbmRpbmcucmVxdWVzdC5vblNvY2tldChzb2NrZXQpO1xuICAgIH0pO1xuICB9XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVTZWN1cmVTb2NrZXQob3B0aW9ucywgY2IpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBUdW5uZWxpbmdBZ2VudC5wcm90b3R5cGUuY3JlYXRlU29ja2V0LmNhbGwoc2VsZiwgb3B0aW9ucywgZnVuY3Rpb24oc29ja2V0KSB7XG4gICAgdmFyIGhvc3RIZWFkZXIgPSBvcHRpb25zLnJlcXVlc3QuZ2V0SGVhZGVyKCdob3N0Jyk7XG4gICAgdmFyIHRsc09wdGlvbnMgPSBtZXJnZU9wdGlvbnMoe30sIHNlbGYub3B0aW9ucywge1xuICAgICAgc29ja2V0OiBzb2NrZXQsXG4gICAgICBzZXJ2ZXJuYW1lOiBob3N0SGVhZGVyID8gaG9zdEhlYWRlci5yZXBsYWNlKC86LiokLywgJycpIDogb3B0aW9ucy5ob3N0XG4gICAgfSk7XG5cbiAgICAvLyAwIGlzIGR1bW15IHBvcnQgZm9yIHYwLjZcbiAgICB2YXIgc2VjdXJlU29ja2V0ID0gdGxzLmNvbm5lY3QoMCwgdGxzT3B0aW9ucyk7XG4gICAgc2VsZi5zb2NrZXRzW3NlbGYuc29ja2V0cy5pbmRleE9mKHNvY2tldCldID0gc2VjdXJlU29ja2V0O1xuICAgIGNiKHNlY3VyZVNvY2tldCk7XG4gIH0pO1xufVxuXG5cbmZ1bmN0aW9uIHRvT3B0aW9ucyhob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpIHtcbiAgaWYgKHR5cGVvZiBob3N0ID09PSAnc3RyaW5nJykgeyAvLyBzaW5jZSB2MC4xMFxuICAgIHJldHVybiB7XG4gICAgICBob3N0OiBob3N0LFxuICAgICAgcG9ydDogcG9ydCxcbiAgICAgIGxvY2FsQWRkcmVzczogbG9jYWxBZGRyZXNzXG4gICAgfTtcbiAgfVxuICByZXR1cm4gaG9zdDsgLy8gZm9yIHYwLjExIG9yIGxhdGVyXG59XG5cbmZ1bmN0aW9uIG1lcmdlT3B0aW9ucyh0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDEsIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciBvdmVycmlkZXMgPSBhcmd1bWVudHNbaV07XG4gICAgaWYgKHR5cGVvZiBvdmVycmlkZXMgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG92ZXJyaWRlcyk7XG4gICAgICBmb3IgKHZhciBqID0gMCwga2V5TGVuID0ga2V5cy5sZW5ndGg7IGogPCBrZXlMZW47ICsraikge1xuICAgICAgICB2YXIgayA9IGtleXNbal07XG4gICAgICAgIGlmIChvdmVycmlkZXNba10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRhcmdldFtrXSA9IG92ZXJyaWRlc1trXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5cbnZhciBkZWJ1ZztcbmlmIChwcm9jZXNzLmVudi5OT0RFX0RFQlVHICYmIC9cXGJ0dW5uZWxcXGIvLnRlc3QocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRykpIHtcbiAgZGVidWcgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJykge1xuICAgICAgYXJnc1swXSA9ICdUVU5ORUw6ICcgKyBhcmdzWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcmdzLnVuc2hpZnQoJ1RVTk5FTDonKTtcbiAgICB9XG4gICAgY29uc29sZS5lcnJvci5hcHBseShjb25zb2xlLCBhcmdzKTtcbiAgfVxufSBlbHNlIHtcbiAgZGVidWcgPSBmdW5jdGlvbigpIHt9O1xufVxuZXhwb3J0cy5kZWJ1ZyA9IGRlYnVnOyAvLyBmb3IgdGVzdFxuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvdHVubmVsJyk7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtDbG9zZTogU3ltYm9sKCdjbG9zZScpLFxuICBrRGVzdHJveTogU3ltYm9sKCdkZXN0cm95JyksXG4gIGtEaXNwYXRjaDogU3ltYm9sKCdkaXNwYXRjaCcpLFxuICBrVXJsOiBTeW1ib2woJ3VybCcpLFxuICBrV3JpdGluZzogU3ltYm9sKCd3cml0aW5nJyksXG4gIGtSZXN1bWluZzogU3ltYm9sKCdyZXN1bWluZycpLFxuICBrUXVldWU6IFN5bWJvbCgncXVldWUnKSxcbiAga0Nvbm5lY3Q6IFN5bWJvbCgnY29ubmVjdCcpLFxuICBrQ29ubmVjdGluZzogU3ltYm9sKCdjb25uZWN0aW5nJyksXG4gIGtIZWFkZXJzTGlzdDogU3ltYm9sKCdoZWFkZXJzIGxpc3QnKSxcbiAga0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0OiBTeW1ib2woJ2RlZmF1bHQga2VlcCBhbGl2ZSB0aW1lb3V0JyksXG4gIGtLZWVwQWxpdmVNYXhUaW1lb3V0OiBTeW1ib2woJ21heCBrZWVwIGFsaXZlIHRpbWVvdXQnKSxcbiAga0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQ6IFN5bWJvbCgna2VlcCBhbGl2ZSB0aW1lb3V0IHRocmVzaG9sZCcpLFxuICBrS2VlcEFsaXZlVGltZW91dFZhbHVlOiBTeW1ib2woJ2tlZXAgYWxpdmUgdGltZW91dCcpLFxuICBrS2VlcEFsaXZlOiBTeW1ib2woJ2tlZXAgYWxpdmUnKSxcbiAga0hlYWRlcnNUaW1lb3V0OiBTeW1ib2woJ2hlYWRlcnMgdGltZW91dCcpLFxuICBrQm9keVRpbWVvdXQ6IFN5bWJvbCgnYm9keSB0aW1lb3V0JyksXG4gIGtTZXJ2ZXJOYW1lOiBTeW1ib2woJ3NlcnZlciBuYW1lJyksXG4gIGtMb2NhbEFkZHJlc3M6IFN5bWJvbCgnbG9jYWwgYWRkcmVzcycpLFxuICBrSG9zdDogU3ltYm9sKCdob3N0JyksXG4gIGtOb1JlZjogU3ltYm9sKCdubyByZWYnKSxcbiAga0JvZHlVc2VkOiBTeW1ib2woJ3VzZWQnKSxcbiAga1J1bm5pbmc6IFN5bWJvbCgncnVubmluZycpLFxuICBrQmxvY2tpbmc6IFN5bWJvbCgnYmxvY2tpbmcnKSxcbiAga1BlbmRpbmc6IFN5bWJvbCgncGVuZGluZycpLFxuICBrU2l6ZTogU3ltYm9sKCdzaXplJyksXG4gIGtCdXN5OiBTeW1ib2woJ2J1c3knKSxcbiAga1F1ZXVlZDogU3ltYm9sKCdxdWV1ZWQnKSxcbiAga0ZyZWU6IFN5bWJvbCgnZnJlZScpLFxuICBrQ29ubmVjdGVkOiBTeW1ib2woJ2Nvbm5lY3RlZCcpLFxuICBrQ2xvc2VkOiBTeW1ib2woJ2Nsb3NlZCcpLFxuICBrTmVlZERyYWluOiBTeW1ib2woJ25lZWQgZHJhaW4nKSxcbiAga1Jlc2V0OiBTeW1ib2woJ3Jlc2V0JyksXG4gIGtEZXN0cm95ZWQ6IFN5bWJvbC5mb3IoJ25vZGVqcy5zdHJlYW0uZGVzdHJveWVkJyksXG4gIGtNYXhIZWFkZXJzU2l6ZTogU3ltYm9sKCdtYXggaGVhZGVycyBzaXplJyksXG4gIGtSdW5uaW5nSWR4OiBTeW1ib2woJ3J1bm5pbmcgaW5kZXgnKSxcbiAga1BlbmRpbmdJZHg6IFN5bWJvbCgncGVuZGluZyBpbmRleCcpLFxuICBrRXJyb3I6IFN5bWJvbCgnZXJyb3InKSxcbiAga0NsaWVudHM6IFN5bWJvbCgnY2xpZW50cycpLFxuICBrQ2xpZW50OiBTeW1ib2woJ2NsaWVudCcpLFxuICBrUGFyc2VyOiBTeW1ib2woJ3BhcnNlcicpLFxuICBrT25EZXN0cm95ZWQ6IFN5bWJvbCgnZGVzdHJveSBjYWxsYmFja3MnKSxcbiAga1BpcGVsaW5pbmc6IFN5bWJvbCgncGlwZWxpbmluZycpLFxuICBrU29ja2V0OiBTeW1ib2woJ3NvY2tldCcpLFxuICBrSG9zdEhlYWRlcjogU3ltYm9sKCdob3N0IGhlYWRlcicpLFxuICBrQ29ubmVjdG9yOiBTeW1ib2woJ2Nvbm5lY3RvcicpLFxuICBrU3RyaWN0Q29udGVudExlbmd0aDogU3ltYm9sKCdzdHJpY3QgY29udGVudCBsZW5ndGgnKSxcbiAga01heFJlZGlyZWN0aW9uczogU3ltYm9sKCdtYXhSZWRpcmVjdGlvbnMnKSxcbiAga01heFJlcXVlc3RzOiBTeW1ib2woJ21heFJlcXVlc3RzUGVyQ2xpZW50JyksXG4gIGtQcm94eTogU3ltYm9sKCdwcm94eSBhZ2VudCBvcHRpb25zJyksXG4gIGtDb3VudGVyOiBTeW1ib2woJ3NvY2tldCByZXF1ZXN0IGNvdW50ZXInKSxcbiAga0ludGVyY2VwdG9yczogU3ltYm9sKCdkaXNwYXRjaCBpbnRlcmNlcHRvcnMnKSxcbiAga01heFJlc3BvbnNlU2l6ZTogU3ltYm9sKCdtYXggcmVzcG9uc2Ugc2l6ZScpLFxuICBrSFRUUDJTZXNzaW9uOiBTeW1ib2woJ2h0dHAyU2Vzc2lvbicpLFxuICBrSFRUUDJTZXNzaW9uU3RhdGU6IFN5bWJvbCgnaHR0cDJTZXNzaW9uIHN0YXRlJyksXG4gIGtIVFRQMkJ1aWxkUmVxdWVzdDogU3ltYm9sKCdodHRwMiBidWlsZCByZXF1ZXN0JyksXG4gIGtIVFRQMUJ1aWxkUmVxdWVzdDogU3ltYm9sKCdodHRwMSBidWlsZCByZXF1ZXN0JyksXG4gIGtIVFRQMkNvcHlIZWFkZXJzOiBTeW1ib2woJ2h0dHAyIGNvcHkgaGVhZGVycycpLFxuICBrSFRUUENvbm5WZXJzaW9uOiBTeW1ib2woJ2h0dHAgY29ubmVjdGlvbiB2ZXJzaW9uJyksXG4gIGtSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnk6IFN5bWJvbCgncmV0cnkgYWdlbnQgZGVmYXVsdCByZXRyeScpLFxuICBrQ29uc3RydWN0OiBTeW1ib2woJ2NvbnN0cnVjdGFibGUnKVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jbGFzcyBVbmRpY2lFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdVbmRpY2lFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUidcbiAgfVxufVxuXG5jbGFzcyBDb25uZWN0VGltZW91dEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgQ29ubmVjdFRpbWVvdXRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnQ29ubmVjdFRpbWVvdXRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdDb25uZWN0IFRpbWVvdXQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfQ09OTkVDVF9USU1FT1VUJ1xuICB9XG59XG5cbmNsYXNzIEhlYWRlcnNUaW1lb3V0RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBIZWFkZXJzVGltZW91dEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdIZWFkZXJzVGltZW91dEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0hlYWRlcnMgVGltZW91dCBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9IRUFERVJTX1RJTUVPVVQnXG4gIH1cbn1cblxuY2xhc3MgSGVhZGVyc092ZXJmbG93RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBIZWFkZXJzT3ZlcmZsb3dFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnSGVhZGVyc092ZXJmbG93RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnSGVhZGVycyBPdmVyZmxvdyBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9IRUFERVJTX09WRVJGTE9XJ1xuICB9XG59XG5cbmNsYXNzIEJvZHlUaW1lb3V0RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBCb2R5VGltZW91dEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdCb2R5VGltZW91dEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0JvZHkgVGltZW91dCBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9CT0RZX1RJTUVPVVQnXG4gIH1cbn1cblxuY2xhc3MgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlLCBzdGF0dXNDb2RlLCBoZWFkZXJzLCBib2R5KSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVzcG9uc2UgU3RhdHVzIENvZGUgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfUkVTUE9OU0VfU1RBVFVTX0NPREUnXG4gICAgdGhpcy5ib2R5ID0gYm9keVxuICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzQ29kZVxuICAgIHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1c0NvZGVcbiAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzXG4gIH1cbn1cblxuY2xhc3MgSW52YWxpZEFyZ3VtZW50RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBJbnZhbGlkQXJndW1lbnRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnSW52YWxpZEFyZ3VtZW50RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnSW52YWxpZCBBcmd1bWVudCBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9JTlZBTElEX0FSRydcbiAgfVxufVxuXG5jbGFzcyBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIEludmFsaWRSZXR1cm5WYWx1ZUVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdJbnZhbGlkIFJldHVybiBWYWx1ZSBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSdcbiAgfVxufVxuXG5jbGFzcyBSZXF1ZXN0QWJvcnRlZEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVxdWVzdEFib3J0ZWRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnQWJvcnRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXF1ZXN0IGFib3J0ZWQnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfQUJPUlRFRCdcbiAgfVxufVxuXG5jbGFzcyBJbmZvcm1hdGlvbmFsRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBJbmZvcm1hdGlvbmFsRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0luZm9ybWF0aW9uYWxFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXF1ZXN0IGluZm9ybWF0aW9uJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0lORk8nXG4gIH1cbn1cblxuY2xhc3MgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVxdWVzdCBib2R5IGxlbmd0aCBkb2VzIG5vdCBtYXRjaCBjb250ZW50LWxlbmd0aCBoZWFkZXInXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfUkVRX0NPTlRFTlRfTEVOR1RIX01JU01BVENIJ1xuICB9XG59XG5cbmNsYXNzIFJlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1Jlc3BvbnNlIGJvZHkgbGVuZ3RoIGRvZXMgbm90IG1hdGNoIGNvbnRlbnQtbGVuZ3RoIGhlYWRlcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9SRVNfQ09OVEVOVF9MRU5HVEhfTUlTTUFUQ0gnXG4gIH1cbn1cblxuY2xhc3MgQ2xpZW50RGVzdHJveWVkRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBDbGllbnREZXN0cm95ZWRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnQ2xpZW50RGVzdHJveWVkRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnVGhlIGNsaWVudCBpcyBkZXN0cm95ZWQnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfREVTVFJPWUVEJ1xuICB9XG59XG5cbmNsYXNzIENsaWVudENsb3NlZEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgQ2xpZW50Q2xvc2VkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0NsaWVudENsb3NlZEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1RoZSBjbGllbnQgaXMgY2xvc2VkJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0NMT1NFRCdcbiAgfVxufVxuXG5jbGFzcyBTb2NrZXRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UsIHNvY2tldCkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgU29ja2V0RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1NvY2tldEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1NvY2tldCBlcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9TT0NLRVQnXG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXRcbiAgfVxufVxuXG5jbGFzcyBOb3RTdXBwb3J0ZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIE5vdFN1cHBvcnRlZEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdOb3RTdXBwb3J0ZWRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdOb3Qgc3VwcG9ydGVkIGVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX05PVF9TVVBQT1JURUQnXG4gIH1cbn1cblxuY2xhc3MgQmFsYW5jZWRQb29sTWlzc2luZ1Vwc3RyZWFtRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBOb3RTdXBwb3J0ZWRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnTWlzc2luZ1Vwc3RyZWFtRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnTm8gdXBzdHJlYW0gaGFzIGJlZW4gYWRkZWQgdG8gdGhlIEJhbGFuY2VkUG9vbCdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9CUExfTUlTU0lOR19VUFNUUkVBTSdcbiAgfVxufVxuXG5jbGFzcyBIVFRQUGFyc2VyRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlLCBjb2RlLCBkYXRhKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBIVFRQUGFyc2VyRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0hUVFBQYXJzZXJFcnJvcidcbiAgICB0aGlzLmNvZGUgPSBjb2RlID8gYEhQRV8ke2NvZGV9YCA6IHVuZGVmaW5lZFxuICAgIHRoaXMuZGF0YSA9IGRhdGEgPyBkYXRhLnRvU3RyaW5nKCkgOiB1bmRlZmluZWRcbiAgfVxufVxuXG5jbGFzcyBSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXNwb25zZSBjb250ZW50IGV4Y2VlZGVkIG1heCBzaXplJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFU19FWENFRURFRF9NQVhfU0laRSdcbiAgfVxufVxuXG5jbGFzcyBSZXF1ZXN0UmV0cnlFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UsIGNvZGUsIHsgaGVhZGVycywgZGF0YSB9KSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBSZXF1ZXN0UmV0cnlFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnUmVxdWVzdFJldHJ5RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVxdWVzdCByZXRyeSBlcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9SRVFfUkVUUlknXG4gICAgdGhpcy5zdGF0dXNDb2RlID0gY29kZVxuICAgIHRoaXMuZGF0YSA9IGRhdGFcbiAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEhUVFBQYXJzZXJFcnJvcixcbiAgVW5kaWNpRXJyb3IsXG4gIEhlYWRlcnNUaW1lb3V0RXJyb3IsXG4gIEhlYWRlcnNPdmVyZmxvd0Vycm9yLFxuICBCb2R5VGltZW91dEVycm9yLFxuICBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IsXG4gIENvbm5lY3RUaW1lb3V0RXJyb3IsXG4gIFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgSW52YWxpZFJldHVyblZhbHVlRXJyb3IsXG4gIFJlcXVlc3RBYm9ydGVkRXJyb3IsXG4gIENsaWVudERlc3Ryb3llZEVycm9yLFxuICBDbGllbnRDbG9zZWRFcnJvcixcbiAgSW5mb3JtYXRpb25hbEVycm9yLFxuICBTb2NrZXRFcnJvcixcbiAgTm90U3VwcG9ydGVkRXJyb3IsXG4gIFJlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IsXG4gIEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yLFxuICBSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yLFxuICBSZXF1ZXN0UmV0cnlFcnJvclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD59ICovXG5jb25zdCBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZCA9IHt9XG5cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUVFAvSGVhZGVyc1xuY29uc3Qgd2VsbGtub3duSGVhZGVyTmFtZXMgPSBbXG4gICdBY2NlcHQnLFxuICAnQWNjZXB0LUVuY29kaW5nJyxcbiAgJ0FjY2VwdC1MYW5ndWFnZScsXG4gICdBY2NlcHQtUmFuZ2VzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMnLFxuICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kcycsXG4gICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nLFxuICAnQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnMnLFxuICAnQWNjZXNzLUNvbnRyb2wtTWF4LUFnZScsXG4gICdBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LUhlYWRlcnMnLFxuICAnQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1NZXRob2QnLFxuICAnQWdlJyxcbiAgJ0FsbG93JyxcbiAgJ0FsdC1TdmMnLFxuICAnQWx0LVVzZWQnLFxuICAnQXV0aG9yaXphdGlvbicsXG4gICdDYWNoZS1Db250cm9sJyxcbiAgJ0NsZWFyLVNpdGUtRGF0YScsXG4gICdDb25uZWN0aW9uJyxcbiAgJ0NvbnRlbnQtRGlzcG9zaXRpb24nLFxuICAnQ29udGVudC1FbmNvZGluZycsXG4gICdDb250ZW50LUxhbmd1YWdlJyxcbiAgJ0NvbnRlbnQtTGVuZ3RoJyxcbiAgJ0NvbnRlbnQtTG9jYXRpb24nLFxuICAnQ29udGVudC1SYW5nZScsXG4gICdDb250ZW50LVNlY3VyaXR5LVBvbGljeScsXG4gICdDb250ZW50LVNlY3VyaXR5LVBvbGljeS1SZXBvcnQtT25seScsXG4gICdDb250ZW50LVR5cGUnLFxuICAnQ29va2llJyxcbiAgJ0Nyb3NzLU9yaWdpbi1FbWJlZGRlci1Qb2xpY3knLFxuICAnQ3Jvc3MtT3JpZ2luLU9wZW5lci1Qb2xpY3knLFxuICAnQ3Jvc3MtT3JpZ2luLVJlc291cmNlLVBvbGljeScsXG4gICdEYXRlJyxcbiAgJ0RldmljZS1NZW1vcnknLFxuICAnRG93bmxpbmsnLFxuICAnRUNUJyxcbiAgJ0VUYWcnLFxuICAnRXhwZWN0JyxcbiAgJ0V4cGVjdC1DVCcsXG4gICdFeHBpcmVzJyxcbiAgJ0ZvcndhcmRlZCcsXG4gICdGcm9tJyxcbiAgJ0hvc3QnLFxuICAnSWYtTWF0Y2gnLFxuICAnSWYtTW9kaWZpZWQtU2luY2UnLFxuICAnSWYtTm9uZS1NYXRjaCcsXG4gICdJZi1SYW5nZScsXG4gICdJZi1Vbm1vZGlmaWVkLVNpbmNlJyxcbiAgJ0tlZXAtQWxpdmUnLFxuICAnTGFzdC1Nb2RpZmllZCcsXG4gICdMaW5rJyxcbiAgJ0xvY2F0aW9uJyxcbiAgJ01heC1Gb3J3YXJkcycsXG4gICdPcmlnaW4nLFxuICAnUGVybWlzc2lvbnMtUG9saWN5JyxcbiAgJ1ByYWdtYScsXG4gICdQcm94eS1BdXRoZW50aWNhdGUnLFxuICAnUHJveHktQXV0aG9yaXphdGlvbicsXG4gICdSVFQnLFxuICAnUmFuZ2UnLFxuICAnUmVmZXJlcicsXG4gICdSZWZlcnJlci1Qb2xpY3knLFxuICAnUmVmcmVzaCcsXG4gICdSZXRyeS1BZnRlcicsXG4gICdTZWMtV2ViU29ja2V0LUFjY2VwdCcsXG4gICdTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnMnLFxuICAnU2VjLVdlYlNvY2tldC1LZXknLFxuICAnU2VjLVdlYlNvY2tldC1Qcm90b2NvbCcsXG4gICdTZWMtV2ViU29ja2V0LVZlcnNpb24nLFxuICAnU2VydmVyJyxcbiAgJ1NlcnZlci1UaW1pbmcnLFxuICAnU2VydmljZS1Xb3JrZXItQWxsb3dlZCcsXG4gICdTZXJ2aWNlLVdvcmtlci1OYXZpZ2F0aW9uLVByZWxvYWQnLFxuICAnU2V0LUNvb2tpZScsXG4gICdTb3VyY2VNYXAnLFxuICAnU3RyaWN0LVRyYW5zcG9ydC1TZWN1cml0eScsXG4gICdTdXBwb3J0cy1Mb2FkaW5nLU1vZGUnLFxuICAnVEUnLFxuICAnVGltaW5nLUFsbG93LU9yaWdpbicsXG4gICdUcmFpbGVyJyxcbiAgJ1RyYW5zZmVyLUVuY29kaW5nJyxcbiAgJ1VwZ3JhZGUnLFxuICAnVXBncmFkZS1JbnNlY3VyZS1SZXF1ZXN0cycsXG4gICdVc2VyLUFnZW50JyxcbiAgJ1ZhcnknLFxuICAnVmlhJyxcbiAgJ1dXVy1BdXRoZW50aWNhdGUnLFxuICAnWC1Db250ZW50LVR5cGUtT3B0aW9ucycsXG4gICdYLUROUy1QcmVmZXRjaC1Db250cm9sJyxcbiAgJ1gtRnJhbWUtT3B0aW9ucycsXG4gICdYLVBlcm1pdHRlZC1Dcm9zcy1Eb21haW4tUG9saWNpZXMnLFxuICAnWC1Qb3dlcmVkLUJ5JyxcbiAgJ1gtUmVxdWVzdGVkLVdpdGgnLFxuICAnWC1YU1MtUHJvdGVjdGlvbidcbl1cblxuZm9yIChsZXQgaSA9IDA7IGkgPCB3ZWxsa25vd25IZWFkZXJOYW1lcy5sZW5ndGg7ICsraSkge1xuICBjb25zdCBrZXkgPSB3ZWxsa25vd25IZWFkZXJOYW1lc1tpXVxuICBjb25zdCBsb3dlckNhc2VkS2V5ID0ga2V5LnRvTG93ZXJDYXNlKClcbiAgaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRba2V5XSA9IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkW2xvd2VyQ2FzZWRLZXldID1cbiAgICBsb3dlckNhc2VkS2V5XG59XG5cbi8vIE5vdGU6IG9iamVjdCBwcm90b3R5cGVzIHNob3VsZCBub3QgYmUgYWJsZSB0byBiZSByZWZlcmVuY2VkLiBlLmcuIGBPYmplY3QjaGFzT3duUHJvcGVydHlgLlxuT2JqZWN0LnNldFByb3RvdHlwZU9mKGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkLCBudWxsKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgd2VsbGtub3duSGVhZGVyTmFtZXMsXG4gIGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IGtEZXN0cm95ZWQsIGtCb2R5VXNlZCB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgSW5jb21pbmdNZXNzYWdlIH0gPSByZXF1aXJlKCdodHRwJylcbmNvbnN0IHN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCBuZXQgPSByZXF1aXJlKCduZXQnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi9lcnJvcnMnKVxuY29uc3QgeyBCbG9iIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3Qgbm9kZVV0aWwgPSByZXF1aXJlKCd1dGlsJylcbmNvbnN0IHsgc3RyaW5naWZ5IH0gPSByZXF1aXJlKCdxdWVyeXN0cmluZycpXG5jb25zdCB7IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5cbmNvbnN0IFtub2RlTWFqb3IsIG5vZGVNaW5vcl0gPSBwcm9jZXNzLnZlcnNpb25zLm5vZGUuc3BsaXQoJy4nKS5tYXAodiA9PiBOdW1iZXIodikpXG5cbmZ1bmN0aW9uIG5vcCAoKSB7fVxuXG5mdW5jdGlvbiBpc1N0cmVhbSAob2JqKSB7XG4gIHJldHVybiBvYmogJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9iai5waXBlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmoub24gPT09ICdmdW5jdGlvbidcbn1cblxuLy8gYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL25vZGUtZmV0Y2gvZmV0Y2gtYmxvYi9ibG9iLzhhYjU4N2QzNDA4MGRlOTQxNDBiNTRmMDcxNjg0NTFlN2QwYjY1NWUvaW5kZXguanMjTDIyOS1MMjQxIChNSVQgTGljZW5zZSlcbmZ1bmN0aW9uIGlzQmxvYkxpa2UgKG9iamVjdCkge1xuICByZXR1cm4gKEJsb2IgJiYgb2JqZWN0IGluc3RhbmNlb2YgQmxvYikgfHwgKFxuICAgIG9iamVjdCAmJlxuICAgIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXG4gICAgKHR5cGVvZiBvYmplY3Quc3RyZWFtID09PSAnZnVuY3Rpb24nIHx8XG4gICAgICB0eXBlb2Ygb2JqZWN0LmFycmF5QnVmZmVyID09PSAnZnVuY3Rpb24nKSAmJlxuICAgIC9eKEJsb2J8RmlsZSkkLy50ZXN0KG9iamVjdFtTeW1ib2wudG9TdHJpbmdUYWddKVxuICApXG59XG5cbmZ1bmN0aW9uIGJ1aWxkVVJMICh1cmwsIHF1ZXJ5UGFyYW1zKSB7XG4gIGlmICh1cmwuaW5jbHVkZXMoJz8nKSB8fCB1cmwuaW5jbHVkZXMoJyMnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignUXVlcnkgcGFyYW1zIGNhbm5vdCBiZSBwYXNzZWQgd2hlbiB1cmwgYWxyZWFkeSBjb250YWlucyBcIj9cIiBvciBcIiNcIi4nKVxuICB9XG5cbiAgY29uc3Qgc3RyaW5naWZpZWQgPSBzdHJpbmdpZnkocXVlcnlQYXJhbXMpXG5cbiAgaWYgKHN0cmluZ2lmaWVkKSB7XG4gICAgdXJsICs9ICc/JyArIHN0cmluZ2lmaWVkXG4gIH1cblxuICByZXR1cm4gdXJsXG59XG5cbmZ1bmN0aW9uIHBhcnNlVVJMICh1cmwpIHtcbiAgaWYgKHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnKSB7XG4gICAgdXJsID0gbmV3IFVSTCh1cmwpXG5cbiAgICBpZiAoIS9eaHR0cHM/Oi8udGVzdCh1cmwub3JpZ2luIHx8IHVybC5wcm90b2NvbCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgcHJvdG9jb2w6IHRoZSBVUkwgbXVzdCBzdGFydCB3aXRoIGBodHRwOmAgb3IgYGh0dHBzOmAuJylcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsXG4gIH1cblxuICBpZiAoIXVybCB8fCB0eXBlb2YgdXJsICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkw6IFRoZSBVUkwgYXJndW1lbnQgbXVzdCBiZSBhIG5vbi1udWxsIG9iamVjdC4nKVxuICB9XG5cbiAgaWYgKCEvXmh0dHBzPzovLnRlc3QodXJsLm9yaWdpbiB8fCB1cmwucHJvdG9jb2wpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBwcm90b2NvbDogdGhlIFVSTCBtdXN0IHN0YXJ0IHdpdGggYGh0dHA6YCBvciBgaHR0cHM6YC4nKVxuICB9XG5cbiAgaWYgKCEodXJsIGluc3RhbmNlb2YgVVJMKSkge1xuICAgIGlmICh1cmwucG9ydCAhPSBudWxsICYmIHVybC5wb3J0ICE9PSAnJyAmJiAhTnVtYmVyLmlzRmluaXRlKHBhcnNlSW50KHVybC5wb3J0KSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkw6IHBvcnQgbXVzdCBiZSBhIHZhbGlkIGludGVnZXIgb3IgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlci4nKVxuICAgIH1cblxuICAgIGlmICh1cmwucGF0aCAhPSBudWxsICYmIHR5cGVvZiB1cmwucGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgcGF0aDogdGhlIHBhdGggbXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZC4nKVxuICAgIH1cblxuICAgIGlmICh1cmwucGF0aG5hbWUgIT0gbnVsbCAmJiB0eXBlb2YgdXJsLnBhdGhuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBwYXRobmFtZTogdGhlIHBhdGhuYW1lIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWQuJylcbiAgICB9XG5cbiAgICBpZiAodXJsLmhvc3RuYW1lICE9IG51bGwgJiYgdHlwZW9mIHVybC5ob3N0bmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgaG9zdG5hbWU6IHRoZSBob3N0bmFtZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwvdW5kZWZpbmVkLicpXG4gICAgfVxuXG4gICAgaWYgKHVybC5vcmlnaW4gIT0gbnVsbCAmJiB0eXBlb2YgdXJsLm9yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgb3JpZ2luOiB0aGUgb3JpZ2luIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWQuJylcbiAgICB9XG5cbiAgICBjb25zdCBwb3J0ID0gdXJsLnBvcnQgIT0gbnVsbFxuICAgICAgPyB1cmwucG9ydFxuICAgICAgOiAodXJsLnByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwKVxuICAgIGxldCBvcmlnaW4gPSB1cmwub3JpZ2luICE9IG51bGxcbiAgICAgID8gdXJsLm9yaWdpblxuICAgICAgOiBgJHt1cmwucHJvdG9jb2x9Ly8ke3VybC5ob3N0bmFtZX06JHtwb3J0fWBcbiAgICBsZXQgcGF0aCA9IHVybC5wYXRoICE9IG51bGxcbiAgICAgID8gdXJsLnBhdGhcbiAgICAgIDogYCR7dXJsLnBhdGhuYW1lIHx8ICcnfSR7dXJsLnNlYXJjaCB8fCAnJ31gXG5cbiAgICBpZiAob3JpZ2luLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgIG9yaWdpbiA9IG9yaWdpbi5zdWJzdHJpbmcoMCwgb3JpZ2luLmxlbmd0aCAtIDEpXG4gICAgfVxuXG4gICAgaWYgKHBhdGggJiYgIXBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICBwYXRoID0gYC8ke3BhdGh9YFxuICAgIH1cbiAgICAvLyBuZXcgVVJMKHBhdGgsIG9yaWdpbikgaXMgdW5zYWZlIHdoZW4gYHBhdGhgIGNvbnRhaW5zIGFuIGFic29sdXRlIFVSTFxuICAgIC8vIEZyb20gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1VSTC9VUkw6XG4gICAgLy8gSWYgZmlyc3QgcGFyYW1ldGVyIGlzIGEgcmVsYXRpdmUgVVJMLCBzZWNvbmQgcGFyYW0gaXMgcmVxdWlyZWQsIGFuZCB3aWxsIGJlIHVzZWQgYXMgdGhlIGJhc2UgVVJMLlxuICAgIC8vIElmIGZpcnN0IHBhcmFtZXRlciBpcyBhbiBhYnNvbHV0ZSBVUkwsIGEgZ2l2ZW4gc2Vjb25kIHBhcmFtIHdpbGwgYmUgaWdub3JlZC5cbiAgICB1cmwgPSBuZXcgVVJMKG9yaWdpbiArIHBhdGgpXG4gIH1cblxuICByZXR1cm4gdXJsXG59XG5cbmZ1bmN0aW9uIHBhcnNlT3JpZ2luICh1cmwpIHtcbiAgdXJsID0gcGFyc2VVUkwodXJsKVxuXG4gIGlmICh1cmwucGF0aG5hbWUgIT09ICcvJyB8fCB1cmwuc2VhcmNoIHx8IHVybC5oYXNoKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHVybCcpXG4gIH1cblxuICByZXR1cm4gdXJsXG59XG5cbmZ1bmN0aW9uIGdldEhvc3RuYW1lIChob3N0KSB7XG4gIGlmIChob3N0WzBdID09PSAnWycpIHtcbiAgICBjb25zdCBpZHggPSBob3N0LmluZGV4T2YoJ10nKVxuXG4gICAgYXNzZXJ0KGlkeCAhPT0gLTEpXG4gICAgcmV0dXJuIGhvc3Quc3Vic3RyaW5nKDEsIGlkeClcbiAgfVxuXG4gIGNvbnN0IGlkeCA9IGhvc3QuaW5kZXhPZignOicpXG4gIGlmIChpZHggPT09IC0xKSByZXR1cm4gaG9zdFxuXG4gIHJldHVybiBob3N0LnN1YnN0cmluZygwLCBpZHgpXG59XG5cbi8vIElQIGFkZHJlc3NlcyBhcmUgbm90IHZhbGlkIHNlcnZlciBuYW1lcyBwZXIgUkZDNjA2NlxuLy8gPiBDdXJyZW50bHksIHRoZSBvbmx5IHNlcnZlciBuYW1lcyBzdXBwb3J0ZWQgYXJlIEROUyBob3N0bmFtZXNcbmZ1bmN0aW9uIGdldFNlcnZlck5hbWUgKGhvc3QpIHtcbiAgaWYgKCFob3N0KSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgaG9zdCwgJ3N0cmluZycpXG5cbiAgY29uc3Qgc2VydmVybmFtZSA9IGdldEhvc3RuYW1lKGhvc3QpXG4gIGlmIChuZXQuaXNJUChzZXJ2ZXJuYW1lKSkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgcmV0dXJuIHNlcnZlcm5hbWVcbn1cblxuZnVuY3Rpb24gZGVlcENsb25lIChvYmopIHtcbiAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqKSlcbn1cblxuZnVuY3Rpb24gaXNBc3luY0l0ZXJhYmxlIChvYmopIHtcbiAgcmV0dXJuICEhKG9iaiAhPSBudWxsICYmIHR5cGVvZiBvYmpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID09PSAnZnVuY3Rpb24nKVxufVxuXG5mdW5jdGlvbiBpc0l0ZXJhYmxlIChvYmopIHtcbiAgcmV0dXJuICEhKG9iaiAhPSBudWxsICYmICh0eXBlb2Ygb2JqW1N5bWJvbC5pdGVyYXRvcl0gPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpKVxufVxuXG5mdW5jdGlvbiBib2R5TGVuZ3RoIChib2R5KSB7XG4gIGlmIChib2R5ID09IG51bGwpIHtcbiAgICByZXR1cm4gMFxuICB9IGVsc2UgaWYgKGlzU3RyZWFtKGJvZHkpKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBib2R5Ll9yZWFkYWJsZVN0YXRlXG4gICAgcmV0dXJuIHN0YXRlICYmIHN0YXRlLm9iamVjdE1vZGUgPT09IGZhbHNlICYmIHN0YXRlLmVuZGVkID09PSB0cnVlICYmIE51bWJlci5pc0Zpbml0ZShzdGF0ZS5sZW5ndGgpXG4gICAgICA/IHN0YXRlLmxlbmd0aFxuICAgICAgOiBudWxsXG4gIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShib2R5KSkge1xuICAgIHJldHVybiBib2R5LnNpemUgIT0gbnVsbCA/IGJvZHkuc2l6ZSA6IG51bGxcbiAgfSBlbHNlIGlmIChpc0J1ZmZlcihib2R5KSkge1xuICAgIHJldHVybiBib2R5LmJ5dGVMZW5ndGhcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIGlzRGVzdHJveWVkIChzdHJlYW0pIHtcbiAgcmV0dXJuICFzdHJlYW0gfHwgISEoc3RyZWFtLmRlc3Ryb3llZCB8fCBzdHJlYW1ba0Rlc3Ryb3llZF0pXG59XG5cbmZ1bmN0aW9uIGlzUmVhZGFibGVBYm9ydGVkIChzdHJlYW0pIHtcbiAgY29uc3Qgc3RhdGUgPSBzdHJlYW0gJiYgc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIHJldHVybiBpc0Rlc3Ryb3llZChzdHJlYW0pICYmIHN0YXRlICYmICFzdGF0ZS5lbmRFbWl0dGVkXG59XG5cbmZ1bmN0aW9uIGRlc3Ryb3kgKHN0cmVhbSwgZXJyKSB7XG4gIGlmIChzdHJlYW0gPT0gbnVsbCB8fCAhaXNTdHJlYW0oc3RyZWFtKSB8fCBpc0Rlc3Ryb3llZChzdHJlYW0pKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAodHlwZW9mIHN0cmVhbS5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZihzdHJlYW0pLmNvbnN0cnVjdG9yID09PSBJbmNvbWluZ01lc3NhZ2UpIHtcbiAgICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzg1MDUvZmlsZXNcbiAgICAgIHN0cmVhbS5zb2NrZXQgPSBudWxsXG4gICAgfVxuXG4gICAgc3RyZWFtLmRlc3Ryb3koZXJyKVxuICB9IGVsc2UgaWYgKGVycikge1xuICAgIHByb2Nlc3MubmV4dFRpY2soKHN0cmVhbSwgZXJyKSA9PiB7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgfSwgc3RyZWFtLCBlcnIpXG4gIH1cblxuICBpZiAoc3RyZWFtLmRlc3Ryb3llZCAhPT0gdHJ1ZSkge1xuICAgIHN0cmVhbVtrRGVzdHJveWVkXSA9IHRydWVcbiAgfVxufVxuXG5jb25zdCBLRUVQQUxJVkVfVElNRU9VVF9FWFBSID0gL3RpbWVvdXQ9KFxcZCspL1xuZnVuY3Rpb24gcGFyc2VLZWVwQWxpdmVUaW1lb3V0ICh2YWwpIHtcbiAgY29uc3QgbSA9IHZhbC50b1N0cmluZygpLm1hdGNoKEtFRVBBTElWRV9USU1FT1VUX0VYUFIpXG4gIHJldHVybiBtID8gcGFyc2VJbnQobVsxXSwgMTApICogMTAwMCA6IG51bGxcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYSBoZWFkZXIgbmFtZSBhbmQgcmV0dXJucyBpdHMgbG93ZXJjYXNlIHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmcgfCBCdWZmZXJ9IHZhbHVlIEhlYWRlciBuYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBoZWFkZXJOYW1lVG9TdHJpbmcgKHZhbHVlKSB7XG4gIHJldHVybiBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFt2YWx1ZV0gfHwgdmFsdWUudG9Mb3dlckNhc2UoKVxufVxuXG5mdW5jdGlvbiBwYXJzZUhlYWRlcnMgKGhlYWRlcnMsIG9iaiA9IHt9KSB7XG4gIC8vIEZvciBIMiBzdXBwb3J0XG4gIGlmICghQXJyYXkuaXNBcnJheShoZWFkZXJzKSkgcmV0dXJuIGhlYWRlcnNcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICBjb25zdCBrZXkgPSBoZWFkZXJzW2ldLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKVxuICAgIGxldCB2YWwgPSBvYmpba2V5XVxuXG4gICAgaWYgKCF2YWwpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnNbaSArIDFdKSkge1xuICAgICAgICBvYmpba2V5XSA9IGhlYWRlcnNbaSArIDFdLm1hcCh4ID0+IHgudG9TdHJpbmcoJ3V0ZjgnKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ialtrZXldID0gaGVhZGVyc1tpICsgMV0udG9TdHJpbmcoJ3V0ZjgnKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICB2YWwgPSBbdmFsXVxuICAgICAgICBvYmpba2V5XSA9IHZhbFxuICAgICAgfVxuICAgICAgdmFsLnB1c2goaGVhZGVyc1tpICsgMV0udG9TdHJpbmcoJ3V0ZjgnKSlcbiAgICB9XG4gIH1cblxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvNDY1MjhcbiAgaWYgKCdjb250ZW50LWxlbmd0aCcgaW4gb2JqICYmICdjb250ZW50LWRpc3Bvc2l0aW9uJyBpbiBvYmopIHtcbiAgICBvYmpbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSA9IEJ1ZmZlci5mcm9tKG9ialsnY29udGVudC1kaXNwb3NpdGlvbiddKS50b1N0cmluZygnbGF0aW4xJylcbiAgfVxuXG4gIHJldHVybiBvYmpcbn1cblxuZnVuY3Rpb24gcGFyc2VSYXdIZWFkZXJzIChoZWFkZXJzKSB7XG4gIGNvbnN0IHJldCA9IFtdXG4gIGxldCBoYXNDb250ZW50TGVuZ3RoID0gZmFsc2VcbiAgbGV0IGNvbnRlbnREaXNwb3NpdGlvbklkeCA9IC0xXG5cbiAgZm9yIChsZXQgbiA9IDA7IG4gPCBoZWFkZXJzLmxlbmd0aDsgbiArPSAyKSB7XG4gICAgY29uc3Qga2V5ID0gaGVhZGVyc1tuICsgMF0udG9TdHJpbmcoKVxuICAgIGNvbnN0IHZhbCA9IGhlYWRlcnNbbiArIDFdLnRvU3RyaW5nKCd1dGY4JylcblxuICAgIGlmIChrZXkubGVuZ3RoID09PSAxNCAmJiAoa2V5ID09PSAnY29udGVudC1sZW5ndGgnIHx8IGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC1sZW5ndGgnKSkge1xuICAgICAgcmV0LnB1c2goa2V5LCB2YWwpXG4gICAgICBoYXNDb250ZW50TGVuZ3RoID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAoa2V5Lmxlbmd0aCA9PT0gMTkgJiYgKGtleSA9PT0gJ2NvbnRlbnQtZGlzcG9zaXRpb24nIHx8IGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC1kaXNwb3NpdGlvbicpKSB7XG4gICAgICBjb250ZW50RGlzcG9zaXRpb25JZHggPSByZXQucHVzaChrZXksIHZhbCkgLSAxXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldC5wdXNoKGtleSwgdmFsKVxuICAgIH1cbiAgfVxuXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC80NjUyOFxuICBpZiAoaGFzQ29udGVudExlbmd0aCAmJiBjb250ZW50RGlzcG9zaXRpb25JZHggIT09IC0xKSB7XG4gICAgcmV0W2NvbnRlbnREaXNwb3NpdGlvbklkeF0gPSBCdWZmZXIuZnJvbShyZXRbY29udGVudERpc3Bvc2l0aW9uSWR4XSkudG9TdHJpbmcoJ2xhdGluMScpXG4gIH1cblxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGlzQnVmZmVyIChidWZmZXIpIHtcbiAgLy8gU2VlLCBodHRwczovL2dpdGh1Yi5jb20vbWNvbGxpbmEvdW5kaWNpL3B1bGwvMzE5XG4gIHJldHVybiBidWZmZXIgaW5zdGFuY2VvZiBVaW50OEFycmF5IHx8IEJ1ZmZlci5pc0J1ZmZlcihidWZmZXIpXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSGFuZGxlciAoaGFuZGxlciwgbWV0aG9kLCB1cGdyYWRlKSB7XG4gIGlmICghaGFuZGxlciB8fCB0eXBlb2YgaGFuZGxlciAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hhbmRsZXIgbXVzdCBiZSBhbiBvYmplY3QnKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uQ29ubmVjdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkNvbm5lY3QgbWV0aG9kJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgaGFuZGxlci5vbkVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uRXJyb3IgbWV0aG9kJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgaGFuZGxlci5vbkJvZHlTZW50ICE9PSAnZnVuY3Rpb24nICYmIGhhbmRsZXIub25Cb2R5U2VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uQm9keVNlbnQgbWV0aG9kJylcbiAgfVxuXG4gIGlmICh1cGdyYWRlIHx8IG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uVXBncmFkZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uVXBncmFkZSBtZXRob2QnKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGhhbmRsZXIub25IZWFkZXJzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25IZWFkZXJzIG1ldGhvZCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uRGF0YSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uRGF0YSBtZXRob2QnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGFuZGxlci5vbkNvbXBsZXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25Db21wbGV0ZSBtZXRob2QnKVxuICAgIH1cbiAgfVxufVxuXG4vLyBBIGJvZHkgaXMgZGlzdHVyYmVkIGlmIGl0IGhhcyBiZWVuIHJlYWQgZnJvbSBhbmQgaXQgY2Fubm90XG4vLyBiZSByZS11c2VkIHdpdGhvdXQgbG9zaW5nIHN0YXRlIG9yIGRhdGEuXG5mdW5jdGlvbiBpc0Rpc3R1cmJlZCAoYm9keSkge1xuICByZXR1cm4gISEoYm9keSAmJiAoXG4gICAgc3RyZWFtLmlzRGlzdHVyYmVkXG4gICAgICA/IHN0cmVhbS5pc0Rpc3R1cmJlZChib2R5KSB8fCBib2R5W2tCb2R5VXNlZF0gLy8gVE9ETyAoZml4KTogV2h5IGlzIGJvZHlba0JvZHlVc2VkXSBuZWVkZWQ/XG4gICAgICA6IGJvZHlba0JvZHlVc2VkXSB8fFxuICAgICAgICBib2R5LnJlYWRhYmxlRGlkUmVhZCB8fFxuICAgICAgICAoYm9keS5fcmVhZGFibGVTdGF0ZSAmJiBib2R5Ll9yZWFkYWJsZVN0YXRlLmRhdGFFbWl0dGVkKSB8fFxuICAgICAgICBpc1JlYWRhYmxlQWJvcnRlZChib2R5KVxuICApKVxufVxuXG5mdW5jdGlvbiBpc0Vycm9yZWQgKGJvZHkpIHtcbiAgcmV0dXJuICEhKGJvZHkgJiYgKFxuICAgIHN0cmVhbS5pc0Vycm9yZWRcbiAgICAgID8gc3RyZWFtLmlzRXJyb3JlZChib2R5KVxuICAgICAgOiAvc3RhdGU6ICdlcnJvcmVkJy8udGVzdChub2RlVXRpbC5pbnNwZWN0KGJvZHkpXG4gICAgICApKSlcbn1cblxuZnVuY3Rpb24gaXNSZWFkYWJsZSAoYm9keSkge1xuICByZXR1cm4gISEoYm9keSAmJiAoXG4gICAgc3RyZWFtLmlzUmVhZGFibGVcbiAgICAgID8gc3RyZWFtLmlzUmVhZGFibGUoYm9keSlcbiAgICAgIDogL3N0YXRlOiAncmVhZGFibGUnLy50ZXN0KG5vZGVVdGlsLmluc3BlY3QoYm9keSlcbiAgICAgICkpKVxufVxuXG5mdW5jdGlvbiBnZXRTb2NrZXRJbmZvIChzb2NrZXQpIHtcbiAgcmV0dXJuIHtcbiAgICBsb2NhbEFkZHJlc3M6IHNvY2tldC5sb2NhbEFkZHJlc3MsXG4gICAgbG9jYWxQb3J0OiBzb2NrZXQubG9jYWxQb3J0LFxuICAgIHJlbW90ZUFkZHJlc3M6IHNvY2tldC5yZW1vdGVBZGRyZXNzLFxuICAgIHJlbW90ZVBvcnQ6IHNvY2tldC5yZW1vdGVQb3J0LFxuICAgIHJlbW90ZUZhbWlseTogc29ja2V0LnJlbW90ZUZhbWlseSxcbiAgICB0aW1lb3V0OiBzb2NrZXQudGltZW91dCxcbiAgICBieXRlc1dyaXR0ZW46IHNvY2tldC5ieXRlc1dyaXR0ZW4sXG4gICAgYnl0ZXNSZWFkOiBzb2NrZXQuYnl0ZXNSZWFkXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gKiBjb252ZXJ0SXRlcmFibGVUb0J1ZmZlciAoaXRlcmFibGUpIHtcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBpdGVyYWJsZSkge1xuICAgIHlpZWxkIEJ1ZmZlci5pc0J1ZmZlcihjaHVuaykgPyBjaHVuayA6IEJ1ZmZlci5mcm9tKGNodW5rKVxuICB9XG59XG5cbmxldCBSZWFkYWJsZVN0cmVhbVxuZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1Gcm9tIChpdGVyYWJsZSkge1xuICBpZiAoIVJlYWRhYmxlU3RyZWFtKSB7XG4gICAgUmVhZGFibGVTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0vd2ViJykuUmVhZGFibGVTdHJlYW1cbiAgfVxuXG4gIGlmIChSZWFkYWJsZVN0cmVhbS5mcm9tKSB7XG4gICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtLmZyb20oY29udmVydEl0ZXJhYmxlVG9CdWZmZXIoaXRlcmFibGUpKVxuICB9XG5cbiAgbGV0IGl0ZXJhdG9yXG4gIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oXG4gICAge1xuICAgICAgYXN5bmMgc3RhcnQgKCkge1xuICAgICAgICBpdGVyYXRvciA9IGl0ZXJhYmxlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpXG4gICAgICB9LFxuICAgICAgYXN5bmMgcHVsbCAoY29udHJvbGxlcikge1xuICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KClcbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKClcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkgPyB2YWx1ZSA6IEJ1ZmZlci5mcm9tKHZhbHVlKVxuICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVWludDhBcnJheShidWYpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250cm9sbGVyLmRlc2lyZWRTaXplID4gMFxuICAgICAgfSxcbiAgICAgIGFzeW5jIGNhbmNlbCAocmVhc29uKSB7XG4gICAgICAgIGF3YWl0IGl0ZXJhdG9yLnJldHVybigpXG4gICAgICB9XG4gICAgfSxcbiAgICAwXG4gIClcbn1cblxuLy8gVGhlIGNodW5rIHNob3VsZCBiZSBhIEZvcm1EYXRhIGluc3RhbmNlIGFuZCBjb250YWluc1xuLy8gYWxsIHRoZSByZXF1aXJlZCBtZXRob2RzLlxuZnVuY3Rpb24gaXNGb3JtRGF0YUxpa2UgKG9iamVjdCkge1xuICByZXR1cm4gKFxuICAgIG9iamVjdCAmJlxuICAgIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXG4gICAgdHlwZW9mIG9iamVjdC5hcHBlbmQgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmRlbGV0ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3QuZ2V0ID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iamVjdC5nZXRBbGwgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmhhcyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3Quc2V0ID09PSAnZnVuY3Rpb24nICYmXG4gICAgb2JqZWN0W1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdGb3JtRGF0YSdcbiAgKVxufVxuXG5mdW5jdGlvbiB0aHJvd0lmQWJvcnRlZCAoc2lnbmFsKSB7XG4gIGlmICghc2lnbmFsKSB7IHJldHVybiB9XG4gIGlmICh0eXBlb2Ygc2lnbmFsLnRocm93SWZBYm9ydGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgc2lnbmFsLnRocm93SWZBYm9ydGVkKClcbiAgfSBlbHNlIHtcbiAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIC8vIERPTUV4Y2VwdGlvbiBub3QgYXZhaWxhYmxlIDwgdjE3LjAuMFxuICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkJylcbiAgICAgIGVyci5uYW1lID0gJ0Fib3J0RXJyb3InXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkQWJvcnRMaXN0ZW5lciAoc2lnbmFsLCBsaXN0ZW5lcikge1xuICBpZiAoJ2FkZEV2ZW50TGlzdGVuZXInIGluIHNpZ25hbCkge1xuICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyLCB7IG9uY2U6IHRydWUgfSlcbiAgICByZXR1cm4gKCkgPT4gc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgbGlzdGVuZXIpXG4gIH1cbiAgc2lnbmFsLmFkZExpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyKVxuICByZXR1cm4gKCkgPT4gc2lnbmFsLnJlbW92ZUxpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyKVxufVxuXG5jb25zdCBoYXNUb1dlbGxGb3JtZWQgPSAhIVN0cmluZy5wcm90b3R5cGUudG9XZWxsRm9ybWVkXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbFxuICovXG5mdW5jdGlvbiB0b1VTVlN0cmluZyAodmFsKSB7XG4gIGlmIChoYXNUb1dlbGxGb3JtZWQpIHtcbiAgICByZXR1cm4gYCR7dmFsfWAudG9XZWxsRm9ybWVkKClcbiAgfSBlbHNlIGlmIChub2RlVXRpbC50b1VTVlN0cmluZykge1xuICAgIHJldHVybiBub2RlVXRpbC50b1VTVlN0cmluZyh2YWwpXG4gIH1cblxuICByZXR1cm4gYCR7dmFsfWBcbn1cblxuLy8gUGFyc2VkIGFjY29yZGluZ2x5IHRvIFJGQyA5MTEwXG4vLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTExMCNmaWVsZC5jb250ZW50LXJhbmdlXG5mdW5jdGlvbiBwYXJzZVJhbmdlSGVhZGVyIChyYW5nZSkge1xuICBpZiAocmFuZ2UgPT0gbnVsbCB8fCByYW5nZSA9PT0gJycpIHJldHVybiB7IHN0YXJ0OiAwLCBlbmQ6IG51bGwsIHNpemU6IG51bGwgfVxuXG4gIGNvbnN0IG0gPSByYW5nZSA/IHJhbmdlLm1hdGNoKC9eYnl0ZXMgKFxcZCspLShcXGQrKVxcLyhcXGQrKT8kLykgOiBudWxsXG4gIHJldHVybiBtXG4gICAgPyB7XG4gICAgICAgIHN0YXJ0OiBwYXJzZUludChtWzFdKSxcbiAgICAgICAgZW5kOiBtWzJdID8gcGFyc2VJbnQobVsyXSkgOiBudWxsLFxuICAgICAgICBzaXplOiBtWzNdID8gcGFyc2VJbnQobVszXSkgOiBudWxsXG4gICAgICB9XG4gICAgOiBudWxsXG59XG5cbmNvbnN0IGtFbnVtZXJhYmxlUHJvcGVydHkgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5rRW51bWVyYWJsZVByb3BlcnR5LmVudW1lcmFibGUgPSB0cnVlXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBub3AsXG4gIGlzRGlzdHVyYmVkLFxuICBpc0Vycm9yZWQsXG4gIGlzUmVhZGFibGUsXG4gIHRvVVNWU3RyaW5nLFxuICBpc1JlYWRhYmxlQWJvcnRlZCxcbiAgaXNCbG9iTGlrZSxcbiAgcGFyc2VPcmlnaW4sXG4gIHBhcnNlVVJMLFxuICBnZXRTZXJ2ZXJOYW1lLFxuICBpc1N0cmVhbSxcbiAgaXNJdGVyYWJsZSxcbiAgaXNBc3luY0l0ZXJhYmxlLFxuICBpc0Rlc3Ryb3llZCxcbiAgaGVhZGVyTmFtZVRvU3RyaW5nLFxuICBwYXJzZVJhd0hlYWRlcnMsXG4gIHBhcnNlSGVhZGVycyxcbiAgcGFyc2VLZWVwQWxpdmVUaW1lb3V0LFxuICBkZXN0cm95LFxuICBib2R5TGVuZ3RoLFxuICBkZWVwQ2xvbmUsXG4gIFJlYWRhYmxlU3RyZWFtRnJvbSxcbiAgaXNCdWZmZXIsXG4gIHZhbGlkYXRlSGFuZGxlcixcbiAgZ2V0U29ja2V0SW5mbyxcbiAgaXNGb3JtRGF0YUxpa2UsXG4gIGJ1aWxkVVJMLFxuICB0aHJvd0lmQWJvcnRlZCxcbiAgYWRkQWJvcnRMaXN0ZW5lcixcbiAgcGFyc2VSYW5nZUhlYWRlcixcbiAgbm9kZU1ham9yLFxuICBub2RlTWlub3IsXG4gIG5vZGVIYXNBdXRvU2VsZWN0RmFtaWx5OiBub2RlTWFqb3IgPiAxOCB8fCAobm9kZU1ham9yID09PSAxOCAmJiBub2RlTWlub3IgPj0gMTMpLFxuICBzYWZlSFRUUE1ldGhvZHM6IFsnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdUUkFDRSddXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmxldCBmYXN0Tm93ID0gRGF0ZS5ub3coKVxubGV0IGZhc3ROb3dUaW1lb3V0XG5cbmNvbnN0IGZhc3RUaW1lcnMgPSBbXVxuXG5mdW5jdGlvbiBvblRpbWVvdXQgKCkge1xuICBmYXN0Tm93ID0gRGF0ZS5ub3coKVxuXG4gIGxldCBsZW4gPSBmYXN0VGltZXJzLmxlbmd0aFxuICBsZXQgaWR4ID0gMFxuICB3aGlsZSAoaWR4IDwgbGVuKSB7XG4gICAgY29uc3QgdGltZXIgPSBmYXN0VGltZXJzW2lkeF1cblxuICAgIGlmICh0aW1lci5zdGF0ZSA9PT0gMCkge1xuICAgICAgdGltZXIuc3RhdGUgPSBmYXN0Tm93ICsgdGltZXIuZGVsYXlcbiAgICB9IGVsc2UgaWYgKHRpbWVyLnN0YXRlID4gMCAmJiBmYXN0Tm93ID49IHRpbWVyLnN0YXRlKSB7XG4gICAgICB0aW1lci5zdGF0ZSA9IC0xXG4gICAgICB0aW1lci5jYWxsYmFjayh0aW1lci5vcGFxdWUpXG4gICAgfVxuXG4gICAgaWYgKHRpbWVyLnN0YXRlID09PSAtMSkge1xuICAgICAgdGltZXIuc3RhdGUgPSAtMlxuICAgICAgaWYgKGlkeCAhPT0gbGVuIC0gMSkge1xuICAgICAgICBmYXN0VGltZXJzW2lkeF0gPSBmYXN0VGltZXJzLnBvcCgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmYXN0VGltZXJzLnBvcCgpXG4gICAgICB9XG4gICAgICBsZW4gLT0gMVxuICAgIH0gZWxzZSB7XG4gICAgICBpZHggKz0gMVxuICAgIH1cbiAgfVxuXG4gIGlmIChmYXN0VGltZXJzLmxlbmd0aCA+IDApIHtcbiAgICByZWZyZXNoVGltZW91dCgpXG4gIH1cbn1cblxuZnVuY3Rpb24gcmVmcmVzaFRpbWVvdXQgKCkge1xuICBpZiAoZmFzdE5vd1RpbWVvdXQgJiYgZmFzdE5vd1RpbWVvdXQucmVmcmVzaCkge1xuICAgIGZhc3ROb3dUaW1lb3V0LnJlZnJlc2goKVxuICB9IGVsc2Uge1xuICAgIGNsZWFyVGltZW91dChmYXN0Tm93VGltZW91dClcbiAgICBmYXN0Tm93VGltZW91dCA9IHNldFRpbWVvdXQob25UaW1lb3V0LCAxZTMpXG4gICAgaWYgKGZhc3ROb3dUaW1lb3V0LnVucmVmKSB7XG4gICAgICBmYXN0Tm93VGltZW91dC51bnJlZigpXG4gICAgfVxuICB9XG59XG5cbmNsYXNzIFRpbWVvdXQge1xuICBjb25zdHJ1Y3RvciAoY2FsbGJhY2ssIGRlbGF5LCBvcGFxdWUpIHtcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2tcbiAgICB0aGlzLmRlbGF5ID0gZGVsYXlcbiAgICB0aGlzLm9wYXF1ZSA9IG9wYXF1ZVxuXG4gICAgLy8gIC0yIG5vdCBpbiB0aW1lciBsaXN0XG4gICAgLy8gIC0xIGluIHRpbWVyIGxpc3QgYnV0IGluYWN0aXZlXG4gICAgLy8gICAwIGluIHRpbWVyIGxpc3Qgd2FpdGluZyBmb3IgdGltZVxuICAgIC8vID4gMCBpbiB0aW1lciBsaXN0IHdhaXRpbmcgZm9yIHRpbWUgdG8gZXhwaXJlXG4gICAgdGhpcy5zdGF0ZSA9IC0yXG5cbiAgICB0aGlzLnJlZnJlc2goKVxuICB9XG5cbiAgcmVmcmVzaCAoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09IC0yKSB7XG4gICAgICBmYXN0VGltZXJzLnB1c2godGhpcylcbiAgICAgIGlmICghZmFzdE5vd1RpbWVvdXQgfHwgZmFzdFRpbWVycy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmVmcmVzaFRpbWVvdXQoKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSAwXG4gIH1cblxuICBjbGVhciAoKSB7XG4gICAgdGhpcy5zdGF0ZSA9IC0xXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldFRpbWVvdXQgKGNhbGxiYWNrLCBkZWxheSwgb3BhcXVlKSB7XG4gICAgcmV0dXJuIGRlbGF5IDwgMWUzXG4gICAgICA/IHNldFRpbWVvdXQoY2FsbGJhY2ssIGRlbGF5LCBvcGFxdWUpXG4gICAgICA6IG5ldyBUaW1lb3V0KGNhbGxiYWNrLCBkZWxheSwgb3BhcXVlKVxuICB9LFxuICBjbGVhclRpbWVvdXQgKHRpbWVvdXQpIHtcbiAgICBpZiAodGltZW91dCBpbnN0YW5jZW9mIFRpbWVvdXQpIHtcbiAgICAgIHRpbWVvdXQuY2xlYXIoKVxuICAgIH0gZWxzZSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dClcbiAgICB9XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCdcblxuLyoqXG4gKiBDb3B5cmlnaHQgQnJpYW4gV2hpdGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vbXNjZGV4L3N0cmVhbXNlYXJjaFxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvXG4gKiBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuICogcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4gKiBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4gKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTXG4gKiBJTiBUSEUgU09GVFdBUkUuXG4gKlxuICogQmFzZWQgaGVhdmlseSBvbiB0aGUgU3RyZWFtaW5nIEJveWVyLU1vb3JlLUhvcnNwb29sIEMrKyBpbXBsZW1lbnRhdGlvblxuICogYnkgSG9uZ2xpIExhaSBhdDogaHR0cHM6Ly9naXRodWIuY29tL0Zvb0JhcldpZGdldC9ib3llci1tb29yZS1ob3JzcG9vbFxuICovXG5jb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdub2RlOmV2ZW50cycpLkV2ZW50RW1pdHRlclxuY29uc3QgaW5oZXJpdHMgPSByZXF1aXJlKCdub2RlOnV0aWwnKS5pbmhlcml0c1xuXG5mdW5jdGlvbiBTQk1IIChuZWVkbGUpIHtcbiAgaWYgKHR5cGVvZiBuZWVkbGUgPT09ICdzdHJpbmcnKSB7XG4gICAgbmVlZGxlID0gQnVmZmVyLmZyb20obmVlZGxlKVxuICB9XG5cbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIobmVlZGxlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBuZWVkbGUgaGFzIHRvIGJlIGEgU3RyaW5nIG9yIGEgQnVmZmVyLicpXG4gIH1cblxuICBjb25zdCBuZWVkbGVMZW5ndGggPSBuZWVkbGUubGVuZ3RoXG5cbiAgaWYgKG5lZWRsZUxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIG5lZWRsZSBjYW5ub3QgYmUgYW4gZW1wdHkgU3RyaW5nL0J1ZmZlci4nKVxuICB9XG5cbiAgaWYgKG5lZWRsZUxlbmd0aCA+IDI1Nikge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIG5lZWRsZSBjYW5ub3QgaGF2ZSBhIGxlbmd0aCBiaWdnZXIgdGhhbiAyNTYuJylcbiAgfVxuXG4gIHRoaXMubWF4TWF0Y2hlcyA9IEluZmluaXR5XG4gIHRoaXMubWF0Y2hlcyA9IDBcblxuICB0aGlzLl9vY2MgPSBuZXcgQXJyYXkoMjU2KVxuICAgIC5maWxsKG5lZWRsZUxlbmd0aCkgLy8gSW5pdGlhbGl6ZSBvY2N1cnJlbmNlIHRhYmxlLlxuICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSAwXG4gIHRoaXMuX25lZWRsZSA9IG5lZWRsZVxuICB0aGlzLl9idWZwb3MgPSAwXG5cbiAgdGhpcy5fbG9va2JlaGluZCA9IEJ1ZmZlci5hbGxvYyhuZWVkbGVMZW5ndGgpXG5cbiAgLy8gUG9wdWxhdGUgb2NjdXJyZW5jZSB0YWJsZSB3aXRoIGFuYWx5c2lzIG9mIHRoZSBuZWVkbGUsXG4gIC8vIGlnbm9yaW5nIGxhc3QgbGV0dGVyLlxuICBmb3IgKHZhciBpID0gMDsgaSA8IG5lZWRsZUxlbmd0aCAtIDE7ICsraSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXZhclxuICAgIHRoaXMuX29jY1tuZWVkbGVbaV1dID0gbmVlZGxlTGVuZ3RoIC0gMSAtIGlcbiAgfVxufVxuaW5oZXJpdHMoU0JNSCwgRXZlbnRFbWl0dGVyKVxuXG5TQk1ILnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5fbG9va2JlaGluZF9zaXplID0gMFxuICB0aGlzLm1hdGNoZXMgPSAwXG4gIHRoaXMuX2J1ZnBvcyA9IDBcbn1cblxuU0JNSC5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgcG9zKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGNodW5rKSkge1xuICAgIGNodW5rID0gQnVmZmVyLmZyb20oY2h1bmssICdiaW5hcnknKVxuICB9XG4gIGNvbnN0IGNobGVuID0gY2h1bmsubGVuZ3RoXG4gIHRoaXMuX2J1ZnBvcyA9IHBvcyB8fCAwXG4gIGxldCByXG4gIHdoaWxlIChyICE9PSBjaGxlbiAmJiB0aGlzLm1hdGNoZXMgPCB0aGlzLm1heE1hdGNoZXMpIHsgciA9IHRoaXMuX3NibWhfZmVlZChjaHVuaykgfVxuICByZXR1cm4gclxufVxuXG5TQk1ILnByb3RvdHlwZS5fc2JtaF9mZWVkID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgY29uc3QgbGVuID0gZGF0YS5sZW5ndGhcbiAgY29uc3QgbmVlZGxlID0gdGhpcy5fbmVlZGxlXG4gIGNvbnN0IG5lZWRsZUxlbmd0aCA9IG5lZWRsZS5sZW5ndGhcbiAgY29uc3QgbGFzdE5lZWRsZUNoYXIgPSBuZWVkbGVbbmVlZGxlTGVuZ3RoIC0gMV1cblxuICAvLyBQb3NpdGl2ZTogcG9pbnRzIHRvIGEgcG9zaXRpb24gaW4gYGRhdGFgXG4gIC8vICAgICAgICAgICBwb3MgPT0gMyBwb2ludHMgdG8gZGF0YVszXVxuICAvLyBOZWdhdGl2ZTogcG9pbnRzIHRvIGEgcG9zaXRpb24gaW4gdGhlIGxvb2tiZWhpbmQgYnVmZmVyXG4gIC8vICAgICAgICAgICBwb3MgPT0gLTIgcG9pbnRzIHRvIGxvb2tiZWhpbmRbbG9va2JlaGluZF9zaXplIC0gMl1cbiAgbGV0IHBvcyA9IC10aGlzLl9sb29rYmVoaW5kX3NpemVcbiAgbGV0IGNoXG5cbiAgaWYgKHBvcyA8IDApIHtcbiAgICAvLyBMb29rYmVoaW5kIGJ1ZmZlciBpcyBub3QgZW1wdHkuIFBlcmZvcm0gQm95ZXItTW9vcmUtSG9yc3Bvb2xcbiAgICAvLyBzZWFyY2ggd2l0aCBjaGFyYWN0ZXIgbG9va3VwIGNvZGUgdGhhdCBjb25zaWRlcnMgYm90aCB0aGVcbiAgICAvLyBsb29rYmVoaW5kIGJ1ZmZlciBhbmQgdGhlIGN1cnJlbnQgcm91bmQncyBoYXlzdGFjayBkYXRhLlxuICAgIC8vXG4gICAgLy8gTG9vcCB1bnRpbFxuICAgIC8vICAgdGhlcmUgaXMgYSBtYXRjaC5cbiAgICAvLyBvciB1bnRpbFxuICAgIC8vICAgd2UndmUgbW92ZWQgcGFzdCB0aGUgcG9zaXRpb24gdGhhdCByZXF1aXJlcyB0aGVcbiAgICAvLyAgIGxvb2tiZWhpbmQgYnVmZmVyLiBJbiB0aGlzIGNhc2Ugd2Ugc3dpdGNoIHRvIHRoZVxuICAgIC8vICAgb3B0aW1pemVkIGxvb3AuXG4gICAgLy8gb3IgdW50aWxcbiAgICAvLyAgIHRoZSBjaGFyYWN0ZXIgdG8gbG9vayBhdCBsaWVzIG91dHNpZGUgdGhlIGhheXN0YWNrLlxuICAgIHdoaWxlIChwb3MgPCAwICYmIHBvcyA8PSBsZW4gLSBuZWVkbGVMZW5ndGgpIHtcbiAgICAgIGNoID0gdGhpcy5fc2JtaF9sb29rdXBfY2hhcihkYXRhLCBwb3MgKyBuZWVkbGVMZW5ndGggLSAxKVxuXG4gICAgICBpZiAoXG4gICAgICAgIGNoID09PSBsYXN0TmVlZGxlQ2hhciAmJlxuICAgICAgICB0aGlzLl9zYm1oX21lbWNtcChkYXRhLCBwb3MsIG5lZWRsZUxlbmd0aCAtIDEpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5fbG9va2JlaGluZF9zaXplID0gMFxuICAgICAgICArK3RoaXMubWF0Y2hlc1xuICAgICAgICB0aGlzLmVtaXQoJ2luZm8nLCB0cnVlKVxuXG4gICAgICAgIHJldHVybiAodGhpcy5fYnVmcG9zID0gcG9zICsgbmVlZGxlTGVuZ3RoKVxuICAgICAgfVxuICAgICAgcG9zICs9IHRoaXMuX29jY1tjaF1cbiAgICB9XG5cbiAgICAvLyBObyBtYXRjaC5cblxuICAgIGlmIChwb3MgPCAwKSB7XG4gICAgICAvLyBUaGVyZSdzIHRvbyBmZXcgZGF0YSBmb3IgQm95ZXItTW9vcmUtSG9yc3Bvb2wgdG8gcnVuLFxuICAgICAgLy8gc28gbGV0J3MgdXNlIGEgZGlmZmVyZW50IGFsZ29yaXRobSB0byBza2lwIGFzIG11Y2ggYXNcbiAgICAgIC8vIHdlIGNhbi5cbiAgICAgIC8vIEZvcndhcmQgcG9zIHVudGlsXG4gICAgICAvLyAgIHRoZSB0cmFpbGluZyBwYXJ0IG9mIGxvb2tiZWhpbmQgKyBkYXRhXG4gICAgICAvLyAgIGxvb2tzIGxpa2UgdGhlIGJlZ2lubmluZyBvZiB0aGUgbmVlZGxlXG4gICAgICAvLyBvciB1bnRpbFxuICAgICAgLy8gICBwb3MgPT0gMFxuICAgICAgd2hpbGUgKHBvcyA8IDAgJiYgIXRoaXMuX3NibWhfbWVtY21wKGRhdGEsIHBvcywgbGVuIC0gcG9zKSkgeyArK3BvcyB9XG4gICAgfVxuXG4gICAgaWYgKHBvcyA+PSAwKSB7XG4gICAgICAvLyBEaXNjYXJkIGxvb2tiZWhpbmQgYnVmZmVyLlxuICAgICAgdGhpcy5lbWl0KCdpbmZvJywgZmFsc2UsIHRoaXMuX2xvb2tiZWhpbmQsIDAsIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSlcbiAgICAgIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSA9IDBcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3V0IG9mZiBwYXJ0IG9mIHRoZSBsb29rYmVoaW5kIGJ1ZmZlciB0aGF0IGhhc1xuICAgICAgLy8gYmVlbiBwcm9jZXNzZWQgYW5kIGFwcGVuZCB0aGUgZW50aXJlIGhheXN0YWNrXG4gICAgICAvLyBpbnRvIGl0LlxuICAgICAgY29uc3QgYnl0ZXNUb0N1dE9mZiA9IHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSArIHBvc1xuICAgICAgaWYgKGJ5dGVzVG9DdXRPZmYgPiAwKSB7XG4gICAgICAgIC8vIFRoZSBjdXQgb2ZmIGRhdGEgaXMgZ3VhcmFudGVlZCBub3QgdG8gY29udGFpbiB0aGUgbmVlZGxlLlxuICAgICAgICB0aGlzLmVtaXQoJ2luZm8nLCBmYWxzZSwgdGhpcy5fbG9va2JlaGluZCwgMCwgYnl0ZXNUb0N1dE9mZilcbiAgICAgIH1cblxuICAgICAgdGhpcy5fbG9va2JlaGluZC5jb3B5KHRoaXMuX2xvb2tiZWhpbmQsIDAsIGJ5dGVzVG9DdXRPZmYsXG4gICAgICAgIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSAtIGJ5dGVzVG9DdXRPZmYpXG4gICAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgLT0gYnl0ZXNUb0N1dE9mZlxuXG4gICAgICBkYXRhLmNvcHkodGhpcy5fbG9va2JlaGluZCwgdGhpcy5fbG9va2JlaGluZF9zaXplKVxuICAgICAgdGhpcy5fbG9va2JlaGluZF9zaXplICs9IGxlblxuXG4gICAgICB0aGlzLl9idWZwb3MgPSBsZW5cbiAgICAgIHJldHVybiBsZW5cbiAgICB9XG4gIH1cblxuICBwb3MgKz0gKHBvcyA+PSAwKSAqIHRoaXMuX2J1ZnBvc1xuXG4gIC8vIExvb2tiZWhpbmQgYnVmZmVyIGlzIG5vdyBlbXB0eS4gV2Ugb25seSBuZWVkIHRvIGNoZWNrIGlmIHRoZVxuICAvLyBuZWVkbGUgaXMgaW4gdGhlIGhheXN0YWNrLlxuICBpZiAoZGF0YS5pbmRleE9mKG5lZWRsZSwgcG9zKSAhPT0gLTEpIHtcbiAgICBwb3MgPSBkYXRhLmluZGV4T2YobmVlZGxlLCBwb3MpXG4gICAgKyt0aGlzLm1hdGNoZXNcbiAgICBpZiAocG9zID4gMCkgeyB0aGlzLmVtaXQoJ2luZm8nLCB0cnVlLCBkYXRhLCB0aGlzLl9idWZwb3MsIHBvcykgfSBlbHNlIHsgdGhpcy5lbWl0KCdpbmZvJywgdHJ1ZSkgfVxuXG4gICAgcmV0dXJuICh0aGlzLl9idWZwb3MgPSBwb3MgKyBuZWVkbGVMZW5ndGgpXG4gIH0gZWxzZSB7XG4gICAgcG9zID0gbGVuIC0gbmVlZGxlTGVuZ3RoXG4gIH1cblxuICAvLyBUaGVyZSB3YXMgbm8gbWF0Y2guIElmIHRoZXJlJ3MgdHJhaWxpbmcgaGF5c3RhY2sgZGF0YSB0aGF0IHdlIGNhbm5vdFxuICAvLyBtYXRjaCB5ZXQgdXNpbmcgdGhlIEJveWVyLU1vb3JlLUhvcnNwb29sIGFsZ29yaXRobSAoYmVjYXVzZSB0aGUgdHJhaWxpbmdcbiAgLy8gZGF0YSBpcyBsZXNzIHRoYW4gdGhlIG5lZWRsZSBzaXplKSB0aGVuIG1hdGNoIHVzaW5nIGEgbW9kaWZpZWRcbiAgLy8gYWxnb3JpdGhtIHRoYXQgc3RhcnRzIG1hdGNoaW5nIGZyb20gdGhlIGJlZ2lubmluZyBpbnN0ZWFkIG9mIHRoZSBlbmQuXG4gIC8vIFdoYXRldmVyIHRyYWlsaW5nIGRhdGEgaXMgbGVmdCBhZnRlciBydW5uaW5nIHRoaXMgYWxnb3JpdGhtIGlzIGFkZGVkIHRvXG4gIC8vIHRoZSBsb29rYmVoaW5kIGJ1ZmZlci5cbiAgd2hpbGUgKFxuICAgIHBvcyA8IGxlbiAmJlxuICAgIChcbiAgICAgIGRhdGFbcG9zXSAhPT0gbmVlZGxlWzBdIHx8XG4gICAgICAoXG4gICAgICAgIChCdWZmZXIuY29tcGFyZShcbiAgICAgICAgICBkYXRhLnN1YmFycmF5KHBvcywgcG9zICsgbGVuIC0gcG9zKSxcbiAgICAgICAgICBuZWVkbGUuc3ViYXJyYXkoMCwgbGVuIC0gcG9zKVxuICAgICAgICApICE9PSAwKVxuICAgICAgKVxuICAgIClcbiAgKSB7XG4gICAgKytwb3NcbiAgfVxuICBpZiAocG9zIDwgbGVuKSB7XG4gICAgZGF0YS5jb3B5KHRoaXMuX2xvb2tiZWhpbmQsIDAsIHBvcywgcG9zICsgKGxlbiAtIHBvcykpXG4gICAgdGhpcy5fbG9va2JlaGluZF9zaXplID0gbGVuIC0gcG9zXG4gIH1cblxuICAvLyBFdmVyeXRoaW5nIHVudGlsIHBvcyBpcyBndWFyYW50ZWVkIG5vdCB0byBjb250YWluIG5lZWRsZSBkYXRhLlxuICBpZiAocG9zID4gMCkgeyB0aGlzLmVtaXQoJ2luZm8nLCBmYWxzZSwgZGF0YSwgdGhpcy5fYnVmcG9zLCBwb3MgPCBsZW4gPyBwb3MgOiBsZW4pIH1cblxuICB0aGlzLl9idWZwb3MgPSBsZW5cbiAgcmV0dXJuIGxlblxufVxuXG5TQk1ILnByb3RvdHlwZS5fc2JtaF9sb29rdXBfY2hhciA9IGZ1bmN0aW9uIChkYXRhLCBwb3MpIHtcbiAgcmV0dXJuIChwb3MgPCAwKVxuICAgID8gdGhpcy5fbG9va2JlaGluZFt0aGlzLl9sb29rYmVoaW5kX3NpemUgKyBwb3NdXG4gICAgOiBkYXRhW3Bvc11cbn1cblxuU0JNSC5wcm90b3R5cGUuX3NibWhfbWVtY21wID0gZnVuY3Rpb24gKGRhdGEsIHBvcywgbGVuKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby12YXJcbiAgICBpZiAodGhpcy5fc2JtaF9sb29rdXBfY2hhcihkYXRhLCBwb3MgKyBpKSAhPT0gdGhpcy5fbmVlZGxlW2ldKSB7IHJldHVybiBmYWxzZSB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTQk1IXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnbm9kZTp1dGlsJykuaW5oZXJpdHNcbmNvbnN0IFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKS5SZWFkYWJsZVxuXG5mdW5jdGlvbiBQYXJ0U3RyZWFtIChvcHRzKSB7XG4gIFJlYWRhYmxlU3RyZWFtLmNhbGwodGhpcywgb3B0cylcbn1cbmluaGVyaXRzKFBhcnRTdHJlYW0sIFJlYWRhYmxlU3RyZWFtKVxuXG5QYXJ0U3RyZWFtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7fVxuXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRTdHJlYW1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRMaW1pdCAobGltaXRzLCBuYW1lLCBkZWZhdWx0TGltaXQpIHtcbiAgaWYgKFxuICAgICFsaW1pdHMgfHxcbiAgICBsaW1pdHNbbmFtZV0gPT09IHVuZGVmaW5lZCB8fFxuICAgIGxpbWl0c1tuYW1lXSA9PT0gbnVsbFxuICApIHsgcmV0dXJuIGRlZmF1bHRMaW1pdCB9XG5cbiAgaWYgKFxuICAgIHR5cGVvZiBsaW1pdHNbbmFtZV0gIT09ICdudW1iZXInIHx8XG4gICAgaXNOYU4obGltaXRzW25hbWVdKVxuICApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignTGltaXQgJyArIG5hbWUgKyAnIGlzIG5vdCBhIHZhbGlkIG51bWJlcicpIH1cblxuICByZXR1cm4gbGltaXRzW25hbWVdXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ25vZGU6ZXZlbnRzJykuRXZlbnRFbWl0dGVyXG5jb25zdCBpbmhlcml0cyA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpLmluaGVyaXRzXG5jb25zdCBnZXRMaW1pdCA9IHJlcXVpcmUoJy4uLy4uLy4uL2xpYi91dGlscy9nZXRMaW1pdCcpXG5cbmNvbnN0IFN0cmVhbVNlYXJjaCA9IHJlcXVpcmUoJy4uLy4uL3N0cmVhbXNlYXJjaC9zYm1oJylcblxuY29uc3QgQl9EQ1JMRiA9IEJ1ZmZlci5mcm9tKCdcXHJcXG5cXHJcXG4nKVxuY29uc3QgUkVfQ1JMRiA9IC9cXHJcXG4vZ1xuY29uc3QgUkVfSERSID0gL14oW146XSspOlsgXFx0XT8oW1xceDAwLVxceEZGXSspPyQvIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29udHJvbC1yZWdleFxuXG5mdW5jdGlvbiBIZWFkZXJQYXJzZXIgKGNmZykge1xuICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKVxuXG4gIGNmZyA9IGNmZyB8fCB7fVxuICBjb25zdCBzZWxmID0gdGhpc1xuICB0aGlzLm5yZWFkID0gMFxuICB0aGlzLm1heGVkID0gZmFsc2VcbiAgdGhpcy5ucGFpcnMgPSAwXG4gIHRoaXMubWF4SGVhZGVyUGFpcnMgPSBnZXRMaW1pdChjZmcsICdtYXhIZWFkZXJQYWlycycsIDIwMDApXG4gIHRoaXMubWF4SGVhZGVyU2l6ZSA9IGdldExpbWl0KGNmZywgJ21heEhlYWRlclNpemUnLCA4MCAqIDEwMjQpXG4gIHRoaXMuYnVmZmVyID0gJydcbiAgdGhpcy5oZWFkZXIgPSB7fVxuICB0aGlzLmZpbmlzaGVkID0gZmFsc2VcbiAgdGhpcy5zcyA9IG5ldyBTdHJlYW1TZWFyY2goQl9EQ1JMRilcbiAgdGhpcy5zcy5vbignaW5mbycsIGZ1bmN0aW9uIChpc01hdGNoLCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgaWYgKGRhdGEgJiYgIXNlbGYubWF4ZWQpIHtcbiAgICAgIGlmIChzZWxmLm5yZWFkICsgZW5kIC0gc3RhcnQgPj0gc2VsZi5tYXhIZWFkZXJTaXplKSB7XG4gICAgICAgIGVuZCA9IHNlbGYubWF4SGVhZGVyU2l6ZSAtIHNlbGYubnJlYWQgKyBzdGFydFxuICAgICAgICBzZWxmLm5yZWFkID0gc2VsZi5tYXhIZWFkZXJTaXplXG4gICAgICAgIHNlbGYubWF4ZWQgPSB0cnVlXG4gICAgICB9IGVsc2UgeyBzZWxmLm5yZWFkICs9IChlbmQgLSBzdGFydCkgfVxuXG4gICAgICBzZWxmLmJ1ZmZlciArPSBkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCBzdGFydCwgZW5kKVxuICAgIH1cbiAgICBpZiAoaXNNYXRjaCkgeyBzZWxmLl9maW5pc2goKSB9XG4gIH0pXG59XG5pbmhlcml0cyhIZWFkZXJQYXJzZXIsIEV2ZW50RW1pdHRlcilcblxuSGVhZGVyUGFyc2VyLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgY29uc3QgciA9IHRoaXMuc3MucHVzaChkYXRhKVxuICBpZiAodGhpcy5maW5pc2hlZCkgeyByZXR1cm4gciB9XG59XG5cbkhlYWRlclBhcnNlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuZmluaXNoZWQgPSBmYWxzZVxuICB0aGlzLmJ1ZmZlciA9ICcnXG4gIHRoaXMuaGVhZGVyID0ge31cbiAgdGhpcy5zcy5yZXNldCgpXG59XG5cbkhlYWRlclBhcnNlci5wcm90b3R5cGUuX2ZpbmlzaCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuYnVmZmVyKSB7IHRoaXMuX3BhcnNlSGVhZGVyKCkgfVxuICB0aGlzLnNzLm1hdGNoZXMgPSB0aGlzLnNzLm1heE1hdGNoZXNcbiAgY29uc3QgaGVhZGVyID0gdGhpcy5oZWFkZXJcbiAgdGhpcy5oZWFkZXIgPSB7fVxuICB0aGlzLmJ1ZmZlciA9ICcnXG4gIHRoaXMuZmluaXNoZWQgPSB0cnVlXG4gIHRoaXMubnJlYWQgPSB0aGlzLm5wYWlycyA9IDBcbiAgdGhpcy5tYXhlZCA9IGZhbHNlXG4gIHRoaXMuZW1pdCgnaGVhZGVyJywgaGVhZGVyKVxufVxuXG5IZWFkZXJQYXJzZXIucHJvdG90eXBlLl9wYXJzZUhlYWRlciA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMubnBhaXJzID09PSB0aGlzLm1heEhlYWRlclBhaXJzKSB7IHJldHVybiB9XG5cbiAgY29uc3QgbGluZXMgPSB0aGlzLmJ1ZmZlci5zcGxpdChSRV9DUkxGKVxuICBjb25zdCBsZW4gPSBsaW5lcy5sZW5ndGhcbiAgbGV0IG0sIGhcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdmFyXG4gICAgaWYgKGxpbmVzW2ldLmxlbmd0aCA9PT0gMCkgeyBjb250aW51ZSB9XG4gICAgaWYgKGxpbmVzW2ldWzBdID09PSAnXFx0JyB8fCBsaW5lc1tpXVswXSA9PT0gJyAnKSB7XG4gICAgICAvLyBmb2xkZWQgaGVhZGVyIGNvbnRlbnRcbiAgICAgIC8vIFJGQzI4MjIgc2F5cyB0byBqdXN0IHJlbW92ZSB0aGUgQ1JMRiBhbmQgbm90IHRoZSB3aGl0ZXNwYWNlIGZvbGxvd2luZ1xuICAgICAgLy8gaXQsIHNvIHdlIGZvbGxvdyB0aGUgUkZDIGFuZCBpbmNsdWRlIHRoZSBsZWFkaW5nIHdoaXRlc3BhY2UgLi4uXG4gICAgICBpZiAoaCkge1xuICAgICAgICB0aGlzLmhlYWRlcltoXVt0aGlzLmhlYWRlcltoXS5sZW5ndGggLSAxXSArPSBsaW5lc1tpXVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBvc0NvbG9uID0gbGluZXNbaV0uaW5kZXhPZignOicpXG4gICAgaWYgKFxuICAgICAgcG9zQ29sb24gPT09IC0xIHx8XG4gICAgICBwb3NDb2xvbiA9PT0gMFxuICAgICkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIG0gPSBSRV9IRFIuZXhlYyhsaW5lc1tpXSlcbiAgICBoID0gbVsxXS50b0xvd2VyQ2FzZSgpXG4gICAgdGhpcy5oZWFkZXJbaF0gPSB0aGlzLmhlYWRlcltoXSB8fCBbXVxuICAgIHRoaXMuaGVhZGVyW2hdLnB1c2goKG1bMl0gfHwgJycpKVxuICAgIGlmICgrK3RoaXMubnBhaXJzID09PSB0aGlzLm1heEhlYWRlclBhaXJzKSB7IGJyZWFrIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEhlYWRlclBhcnNlclxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBXcml0YWJsZVN0cmVhbSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJykuV3JpdGFibGVcbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnbm9kZTp1dGlsJykuaW5oZXJpdHNcblxuY29uc3QgU3RyZWFtU2VhcmNoID0gcmVxdWlyZSgnLi4vLi4vc3RyZWFtc2VhcmNoL3NibWgnKVxuXG5jb25zdCBQYXJ0U3RyZWFtID0gcmVxdWlyZSgnLi9QYXJ0U3RyZWFtJylcbmNvbnN0IEhlYWRlclBhcnNlciA9IHJlcXVpcmUoJy4vSGVhZGVyUGFyc2VyJylcblxuY29uc3QgREFTSCA9IDQ1XG5jb25zdCBCX09ORURBU0ggPSBCdWZmZXIuZnJvbSgnLScpXG5jb25zdCBCX0NSTEYgPSBCdWZmZXIuZnJvbSgnXFxyXFxuJylcbmNvbnN0IEVNUFRZX0ZOID0gZnVuY3Rpb24gKCkge31cblxuZnVuY3Rpb24gRGljZXIgKGNmZykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRGljZXIpKSB7IHJldHVybiBuZXcgRGljZXIoY2ZnKSB9XG4gIFdyaXRhYmxlU3RyZWFtLmNhbGwodGhpcywgY2ZnKVxuXG4gIGlmICghY2ZnIHx8ICghY2ZnLmhlYWRlckZpcnN0ICYmIHR5cGVvZiBjZmcuYm91bmRhcnkgIT09ICdzdHJpbmcnKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb3VuZGFyeSByZXF1aXJlZCcpIH1cblxuICBpZiAodHlwZW9mIGNmZy5ib3VuZGFyeSA9PT0gJ3N0cmluZycpIHsgdGhpcy5zZXRCb3VuZGFyeShjZmcuYm91bmRhcnkpIH0gZWxzZSB7IHRoaXMuX2JwYXJzZXIgPSB1bmRlZmluZWQgfVxuXG4gIHRoaXMuX2hlYWRlckZpcnN0ID0gY2ZnLmhlYWRlckZpcnN0XG5cbiAgdGhpcy5fZGFzaGVzID0gMFxuICB0aGlzLl9wYXJ0cyA9IDBcbiAgdGhpcy5fZmluaXNoZWQgPSBmYWxzZVxuICB0aGlzLl9yZWFsRmluaXNoID0gZmFsc2VcbiAgdGhpcy5faXNQcmVhbWJsZSA9IHRydWVcbiAgdGhpcy5fanVzdE1hdGNoZWQgPSBmYWxzZVxuICB0aGlzLl9maXJzdFdyaXRlID0gdHJ1ZVxuICB0aGlzLl9pbkhlYWRlciA9IHRydWVcbiAgdGhpcy5fcGFydCA9IHVuZGVmaW5lZFxuICB0aGlzLl9jYiA9IHVuZGVmaW5lZFxuICB0aGlzLl9pZ25vcmVEYXRhID0gZmFsc2VcbiAgdGhpcy5fcGFydE9wdHMgPSB7IGhpZ2hXYXRlck1hcms6IGNmZy5wYXJ0SHdtIH1cbiAgdGhpcy5fcGF1c2UgPSBmYWxzZVxuXG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHRoaXMuX2hwYXJzZXIgPSBuZXcgSGVhZGVyUGFyc2VyKGNmZylcbiAgdGhpcy5faHBhcnNlci5vbignaGVhZGVyJywgZnVuY3Rpb24gKGhlYWRlcikge1xuICAgIHNlbGYuX2luSGVhZGVyID0gZmFsc2VcbiAgICBzZWxmLl9wYXJ0LmVtaXQoJ2hlYWRlcicsIGhlYWRlcilcbiAgfSlcbn1cbmluaGVyaXRzKERpY2VyLCBXcml0YWJsZVN0cmVhbSlcblxuRGljZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiAoZXYpIHtcbiAgaWYgKGV2ID09PSAnZmluaXNoJyAmJiAhdGhpcy5fcmVhbEZpbmlzaCkge1xuICAgIGlmICghdGhpcy5fZmluaXNoZWQpIHtcbiAgICAgIGNvbnN0IHNlbGYgPSB0aGlzXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignVW5leHBlY3RlZCBlbmQgb2YgbXVsdGlwYXJ0IGRhdGEnKSlcbiAgICAgICAgaWYgKHNlbGYuX3BhcnQgJiYgIXNlbGYuX2lnbm9yZURhdGEpIHtcbiAgICAgICAgICBjb25zdCB0eXBlID0gKHNlbGYuX2lzUHJlYW1ibGUgPyAnUHJlYW1ibGUnIDogJ1BhcnQnKVxuICAgICAgICAgIHNlbGYuX3BhcnQuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IodHlwZSArICcgdGVybWluYXRlZCBlYXJseSBkdWUgdG8gdW5leHBlY3RlZCBlbmQgb2YgbXVsdGlwYXJ0IGRhdGEnKSlcbiAgICAgICAgICBzZWxmLl9wYXJ0LnB1c2gobnVsbClcbiAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSB0cnVlXG4gICAgICAgICAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpXG4gICAgICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSB0cnVlXG4gICAgICAgIHNlbGYuZW1pdCgnZmluaXNoJylcbiAgICAgICAgc2VsZi5fcmVhbEZpbmlzaCA9IGZhbHNlXG4gICAgICB9KVxuICAgIH1cbiAgfSBlbHNlIHsgV3JpdGFibGVTdHJlYW0ucHJvdG90eXBlLmVtaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoZGF0YSwgZW5jb2RpbmcsIGNiKSB7XG4gIC8vIGlnbm9yZSB1bmV4cGVjdGVkIGRhdGEgKGUuZy4gZXh0cmEgdHJhaWxlciBkYXRhIGFmdGVyIGZpbmlzaGVkKVxuICBpZiAoIXRoaXMuX2hwYXJzZXIgJiYgIXRoaXMuX2JwYXJzZXIpIHsgcmV0dXJuIGNiKCkgfVxuXG4gIGlmICh0aGlzLl9oZWFkZXJGaXJzdCAmJiB0aGlzLl9pc1ByZWFtYmxlKSB7XG4gICAgaWYgKCF0aGlzLl9wYXJ0KSB7XG4gICAgICB0aGlzLl9wYXJ0ID0gbmV3IFBhcnRTdHJlYW0odGhpcy5fcGFydE9wdHMpXG4gICAgICBpZiAodGhpcy5saXN0ZW5lckNvdW50KCdwcmVhbWJsZScpICE9PSAwKSB7IHRoaXMuZW1pdCgncHJlYW1ibGUnLCB0aGlzLl9wYXJ0KSB9IGVsc2UgeyB0aGlzLl9pZ25vcmUoKSB9XG4gICAgfVxuICAgIGNvbnN0IHIgPSB0aGlzLl9ocGFyc2VyLnB1c2goZGF0YSlcbiAgICBpZiAoIXRoaXMuX2luSGVhZGVyICYmIHIgIT09IHVuZGVmaW5lZCAmJiByIDwgZGF0YS5sZW5ndGgpIHsgZGF0YSA9IGRhdGEuc2xpY2UocikgfSBlbHNlIHsgcmV0dXJuIGNiKCkgfVxuICB9XG5cbiAgLy8gYWxsb3dzIGZvciBcImVhc2llclwiIHRlc3RpbmdcbiAgaWYgKHRoaXMuX2ZpcnN0V3JpdGUpIHtcbiAgICB0aGlzLl9icGFyc2VyLnB1c2goQl9DUkxGKVxuICAgIHRoaXMuX2ZpcnN0V3JpdGUgPSBmYWxzZVxuICB9XG5cbiAgdGhpcy5fYnBhcnNlci5wdXNoKGRhdGEpXG5cbiAgaWYgKHRoaXMuX3BhdXNlKSB7IHRoaXMuX2NiID0gY2IgfSBlbHNlIHsgY2IoKSB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5fcGFydCA9IHVuZGVmaW5lZFxuICB0aGlzLl9icGFyc2VyID0gdW5kZWZpbmVkXG4gIHRoaXMuX2hwYXJzZXIgPSB1bmRlZmluZWRcbn1cblxuRGljZXIucHJvdG90eXBlLnNldEJvdW5kYXJ5ID0gZnVuY3Rpb24gKGJvdW5kYXJ5KSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHRoaXMuX2JwYXJzZXIgPSBuZXcgU3RyZWFtU2VhcmNoKCdcXHJcXG4tLScgKyBib3VuZGFyeSlcbiAgdGhpcy5fYnBhcnNlci5vbignaW5mbycsIGZ1bmN0aW9uIChpc01hdGNoLCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgc2VsZi5fb25pbmZvKGlzTWF0Y2gsIGRhdGEsIHN0YXJ0LCBlbmQpXG4gIH0pXG59XG5cbkRpY2VyLnByb3RvdHlwZS5faWdub3JlID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5fcGFydCAmJiAhdGhpcy5faWdub3JlRGF0YSkge1xuICAgIHRoaXMuX2lnbm9yZURhdGEgPSB0cnVlXG4gICAgdGhpcy5fcGFydC5vbignZXJyb3InLCBFTVBUWV9GTilcbiAgICAvLyB3ZSBtdXN0IHBlcmZvcm0gc29tZSBraW5kIG9mIHJlYWQgb24gdGhlIHN0cmVhbSBldmVuIHRob3VnaCB3ZSBhcmVcbiAgICAvLyBpZ25vcmluZyB0aGUgZGF0YSwgb3RoZXJ3aXNlIG5vZGUncyBSZWFkYWJsZSBzdHJlYW0gd2lsbCBub3QgZW1pdCAnZW5kJ1xuICAgIC8vIGFmdGVyIHB1c2hpbmcgbnVsbCB0byB0aGUgc3RyZWFtXG4gICAgdGhpcy5fcGFydC5yZXN1bWUoKVxuICB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5fb25pbmZvID0gZnVuY3Rpb24gKGlzTWF0Y2gsIGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgbGV0IGJ1ZjsgY29uc3Qgc2VsZiA9IHRoaXM7IGxldCBpID0gMDsgbGV0IHI7IGxldCBzaG91bGRXcml0ZU1vcmUgPSB0cnVlXG5cbiAgaWYgKCF0aGlzLl9wYXJ0ICYmIHRoaXMuX2p1c3RNYXRjaGVkICYmIGRhdGEpIHtcbiAgICB3aGlsZSAodGhpcy5fZGFzaGVzIDwgMiAmJiAoc3RhcnQgKyBpKSA8IGVuZCkge1xuICAgICAgaWYgKGRhdGFbc3RhcnQgKyBpXSA9PT0gREFTSCkge1xuICAgICAgICArK2lcbiAgICAgICAgKyt0aGlzLl9kYXNoZXNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLl9kYXNoZXMpIHsgYnVmID0gQl9PTkVEQVNIIH1cbiAgICAgICAgdGhpcy5fZGFzaGVzID0gMFxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5fZGFzaGVzID09PSAyKSB7XG4gICAgICBpZiAoKHN0YXJ0ICsgaSkgPCBlbmQgJiYgdGhpcy5saXN0ZW5lckNvdW50KCd0cmFpbGVyJykgIT09IDApIHsgdGhpcy5lbWl0KCd0cmFpbGVyJywgZGF0YS5zbGljZShzdGFydCArIGksIGVuZCkpIH1cbiAgICAgIHRoaXMucmVzZXQoKVxuICAgICAgdGhpcy5fZmluaXNoZWQgPSB0cnVlXG4gICAgICAvLyBubyBtb3JlIHBhcnRzIHdpbGwgYmUgYWRkZWRcbiAgICAgIGlmIChzZWxmLl9wYXJ0cyA9PT0gMCkge1xuICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gdHJ1ZVxuICAgICAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpXG4gICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5fZGFzaGVzKSB7IHJldHVybiB9XG4gIH1cbiAgaWYgKHRoaXMuX2p1c3RNYXRjaGVkKSB7IHRoaXMuX2p1c3RNYXRjaGVkID0gZmFsc2UgfVxuICBpZiAoIXRoaXMuX3BhcnQpIHtcbiAgICB0aGlzLl9wYXJ0ID0gbmV3IFBhcnRTdHJlYW0odGhpcy5fcGFydE9wdHMpXG4gICAgdGhpcy5fcGFydC5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gICAgICBzZWxmLl91bnBhdXNlKClcbiAgICB9XG4gICAgaWYgKHRoaXMuX2lzUHJlYW1ibGUgJiYgdGhpcy5saXN0ZW5lckNvdW50KCdwcmVhbWJsZScpICE9PSAwKSB7XG4gICAgICB0aGlzLmVtaXQoJ3ByZWFtYmxlJywgdGhpcy5fcGFydClcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2lzUHJlYW1ibGUgIT09IHRydWUgJiYgdGhpcy5saXN0ZW5lckNvdW50KCdwYXJ0JykgIT09IDApIHtcbiAgICAgIHRoaXMuZW1pdCgncGFydCcsIHRoaXMuX3BhcnQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2lnbm9yZSgpXG4gICAgfVxuICAgIGlmICghdGhpcy5faXNQcmVhbWJsZSkgeyB0aGlzLl9pbkhlYWRlciA9IHRydWUgfVxuICB9XG4gIGlmIChkYXRhICYmIHN0YXJ0IDwgZW5kICYmICF0aGlzLl9pZ25vcmVEYXRhKSB7XG4gICAgaWYgKHRoaXMuX2lzUHJlYW1ibGUgfHwgIXRoaXMuX2luSGVhZGVyKSB7XG4gICAgICBpZiAoYnVmKSB7IHNob3VsZFdyaXRlTW9yZSA9IHRoaXMuX3BhcnQucHVzaChidWYpIH1cbiAgICAgIHNob3VsZFdyaXRlTW9yZSA9IHRoaXMuX3BhcnQucHVzaChkYXRhLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICAgICAgaWYgKCFzaG91bGRXcml0ZU1vcmUpIHsgdGhpcy5fcGF1c2UgPSB0cnVlIH1cbiAgICB9IGVsc2UgaWYgKCF0aGlzLl9pc1ByZWFtYmxlICYmIHRoaXMuX2luSGVhZGVyKSB7XG4gICAgICBpZiAoYnVmKSB7IHRoaXMuX2hwYXJzZXIucHVzaChidWYpIH1cbiAgICAgIHIgPSB0aGlzLl9ocGFyc2VyLnB1c2goZGF0YS5zbGljZShzdGFydCwgZW5kKSlcbiAgICAgIGlmICghdGhpcy5faW5IZWFkZXIgJiYgciAhPT0gdW5kZWZpbmVkICYmIHIgPCBlbmQpIHsgdGhpcy5fb25pbmZvKGZhbHNlLCBkYXRhLCBzdGFydCArIHIsIGVuZCkgfVxuICAgIH1cbiAgfVxuICBpZiAoaXNNYXRjaCkge1xuICAgIHRoaXMuX2hwYXJzZXIucmVzZXQoKVxuICAgIGlmICh0aGlzLl9pc1ByZWFtYmxlKSB7IHRoaXMuX2lzUHJlYW1ibGUgPSBmYWxzZSB9IGVsc2Uge1xuICAgICAgaWYgKHN0YXJ0ICE9PSBlbmQpIHtcbiAgICAgICAgKyt0aGlzLl9wYXJ0c1xuICAgICAgICB0aGlzLl9wYXJ0Lm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKC0tc2VsZi5fcGFydHMgPT09IDApIHtcbiAgICAgICAgICAgIGlmIChzZWxmLl9maW5pc2hlZCkge1xuICAgICAgICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gdHJ1ZVxuICAgICAgICAgICAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpXG4gICAgICAgICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSBmYWxzZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2VsZi5fdW5wYXVzZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9wYXJ0LnB1c2gobnVsbClcbiAgICB0aGlzLl9wYXJ0ID0gdW5kZWZpbmVkXG4gICAgdGhpcy5faWdub3JlRGF0YSA9IGZhbHNlXG4gICAgdGhpcy5fanVzdE1hdGNoZWQgPSB0cnVlXG4gICAgdGhpcy5fZGFzaGVzID0gMFxuICB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5fdW5wYXVzZSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCF0aGlzLl9wYXVzZSkgeyByZXR1cm4gfVxuXG4gIHRoaXMuX3BhdXNlID0gZmFsc2VcbiAgaWYgKHRoaXMuX2NiKSB7XG4gICAgY29uc3QgY2IgPSB0aGlzLl9jYlxuICAgIHRoaXMuX2NiID0gdW5kZWZpbmVkXG4gICAgY2IoKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGljZXJcbiIsICIndXNlIHN0cmljdCdcblxuLy8gTm9kZSBoYXMgYWx3YXlzIHV0Zi04XG5jb25zdCB1dGY4RGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigndXRmLTgnKVxuY29uc3QgdGV4dERlY29kZXJzID0gbmV3IE1hcChbXG4gIFsndXRmLTgnLCB1dGY4RGVjb2Rlcl0sXG4gIFsndXRmOCcsIHV0ZjhEZWNvZGVyXVxuXSlcblxuZnVuY3Rpb24gZ2V0RGVjb2RlciAoY2hhcnNldCkge1xuICBsZXQgbGNcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBzd2l0Y2ggKGNoYXJzZXQpIHtcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgICByZXR1cm4gZGVjb2RlcnMudXRmOFxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2FzY2lpJzogLy8gVE9ETzogTWFrZSB0aGVzZSBhIHNlcGFyYXRlLCBzdHJpY3QgZGVjb2Rlcj9cbiAgICAgIGNhc2UgJ3VzLWFzY2lpJzpcbiAgICAgIGNhc2UgJ2lzby04ODU5LTEnOlxuICAgICAgY2FzZSAnaXNvODg1OS0xJzpcbiAgICAgIGNhc2UgJ2lzbzg4NTkxJzpcbiAgICAgIGNhc2UgJ2lzb184ODU5LTEnOlxuICAgICAgY2FzZSAnd2luZG93cy0xMjUyJzpcbiAgICAgIGNhc2UgJ2lzb184ODU5LTE6MTk4Nyc6XG4gICAgICBjYXNlICdjcDEyNTInOlxuICAgICAgY2FzZSAneC1jcDEyNTInOlxuICAgICAgICByZXR1cm4gZGVjb2RlcnMubGF0aW4xXG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgICByZXR1cm4gZGVjb2RlcnMudXRmMTZsZVxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLmJhc2U2NFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxjID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBsYyA9IHRydWVcbiAgICAgICAgICBjaGFyc2V0ID0gY2hhcnNldC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVjb2RlcnMub3RoZXIuYmluZChjaGFyc2V0KVxuICAgIH1cbiAgfVxufVxuXG5jb25zdCBkZWNvZGVycyA9IHtcbiAgdXRmODogKGRhdGEsIHNvdXJjZUVuY29kaW5nKSA9PiB7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEsIHNvdXJjZUVuY29kaW5nKVxuICAgIH1cbiAgICByZXR1cm4gZGF0YS51dGY4U2xpY2UoMCwgZGF0YS5sZW5ndGgpXG4gIH0sXG5cbiAgbGF0aW4xOiAoZGF0YSwgc291cmNlRW5jb2RpbmcpID0+IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZGF0YVxuICAgIH1cbiAgICByZXR1cm4gZGF0YS5sYXRpbjFTbGljZSgwLCBkYXRhLmxlbmd0aClcbiAgfSxcblxuICB1dGYxNmxlOiAoZGF0YSwgc291cmNlRW5jb2RpbmcpID0+IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgc291cmNlRW5jb2RpbmcpXG4gICAgfVxuICAgIHJldHVybiBkYXRhLnVjczJTbGljZSgwLCBkYXRhLmxlbmd0aClcbiAgfSxcblxuICBiYXNlNjQ6IChkYXRhLCBzb3VyY2VFbmNvZGluZykgPT4ge1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCBzb3VyY2VFbmNvZGluZylcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEuYmFzZTY0U2xpY2UoMCwgZGF0YS5sZW5ndGgpXG4gIH0sXG5cbiAgb3RoZXI6IChkYXRhLCBzb3VyY2VFbmNvZGluZykgPT4ge1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCBzb3VyY2VFbmNvZGluZylcbiAgICB9XG5cbiAgICBpZiAodGV4dERlY29kZXJzLmhhcyh0aGlzLnRvU3RyaW5nKCkpKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdGV4dERlY29kZXJzLmdldCh0aGlzKS5kZWNvZGUoZGF0YSlcbiAgICAgIH0gY2F0Y2gge31cbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJ1xuICAgICAgPyBkYXRhXG4gICAgICA6IGRhdGEudG9TdHJpbmcoKVxuICB9XG59XG5cbmZ1bmN0aW9uIGRlY29kZVRleHQgKHRleHQsIHNvdXJjZUVuY29kaW5nLCBkZXN0RW5jb2RpbmcpIHtcbiAgaWYgKHRleHQpIHtcbiAgICByZXR1cm4gZ2V0RGVjb2RlcihkZXN0RW5jb2RpbmcpKHRleHQsIHNvdXJjZUVuY29kaW5nKVxuICB9XG4gIHJldHVybiB0ZXh0XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGVjb2RlVGV4dFxuIiwgIi8qIGVzbGludC1kaXNhYmxlIG9iamVjdC1wcm9wZXJ0eS1uZXdsaW5lICovXG4ndXNlIHN0cmljdCdcblxuY29uc3QgZGVjb2RlVGV4dCA9IHJlcXVpcmUoJy4vZGVjb2RlVGV4dCcpXG5cbmNvbnN0IFJFX0VOQ09ERUQgPSAvJVthLWZBLUYwLTldW2EtZkEtRjAtOV0vZ1xuXG5jb25zdCBFbmNvZGVkTG9va3VwID0ge1xuICAnJTAwJzogJ1xceDAwJywgJyUwMSc6ICdcXHgwMScsICclMDInOiAnXFx4MDInLCAnJTAzJzogJ1xceDAzJywgJyUwNCc6ICdcXHgwNCcsXG4gICclMDUnOiAnXFx4MDUnLCAnJTA2JzogJ1xceDA2JywgJyUwNyc6ICdcXHgwNycsICclMDgnOiAnXFx4MDgnLCAnJTA5JzogJ1xceDA5JyxcbiAgJyUwYSc6ICdcXHgwYScsICclMEEnOiAnXFx4MGEnLCAnJTBiJzogJ1xceDBiJywgJyUwQic6ICdcXHgwYicsICclMGMnOiAnXFx4MGMnLFxuICAnJTBDJzogJ1xceDBjJywgJyUwZCc6ICdcXHgwZCcsICclMEQnOiAnXFx4MGQnLCAnJTBlJzogJ1xceDBlJywgJyUwRSc6ICdcXHgwZScsXG4gICclMGYnOiAnXFx4MGYnLCAnJTBGJzogJ1xceDBmJywgJyUxMCc6ICdcXHgxMCcsICclMTEnOiAnXFx4MTEnLCAnJTEyJzogJ1xceDEyJyxcbiAgJyUxMyc6ICdcXHgxMycsICclMTQnOiAnXFx4MTQnLCAnJTE1JzogJ1xceDE1JywgJyUxNic6ICdcXHgxNicsICclMTcnOiAnXFx4MTcnLFxuICAnJTE4JzogJ1xceDE4JywgJyUxOSc6ICdcXHgxOScsICclMWEnOiAnXFx4MWEnLCAnJTFBJzogJ1xceDFhJywgJyUxYic6ICdcXHgxYicsXG4gICclMUInOiAnXFx4MWInLCAnJTFjJzogJ1xceDFjJywgJyUxQyc6ICdcXHgxYycsICclMWQnOiAnXFx4MWQnLCAnJTFEJzogJ1xceDFkJyxcbiAgJyUxZSc6ICdcXHgxZScsICclMUUnOiAnXFx4MWUnLCAnJTFmJzogJ1xceDFmJywgJyUxRic6ICdcXHgxZicsICclMjAnOiAnXFx4MjAnLFxuICAnJTIxJzogJ1xceDIxJywgJyUyMic6ICdcXHgyMicsICclMjMnOiAnXFx4MjMnLCAnJTI0JzogJ1xceDI0JywgJyUyNSc6ICdcXHgyNScsXG4gICclMjYnOiAnXFx4MjYnLCAnJTI3JzogJ1xceDI3JywgJyUyOCc6ICdcXHgyOCcsICclMjknOiAnXFx4MjknLCAnJTJhJzogJ1xceDJhJyxcbiAgJyUyQSc6ICdcXHgyYScsICclMmInOiAnXFx4MmInLCAnJTJCJzogJ1xceDJiJywgJyUyYyc6ICdcXHgyYycsICclMkMnOiAnXFx4MmMnLFxuICAnJTJkJzogJ1xceDJkJywgJyUyRCc6ICdcXHgyZCcsICclMmUnOiAnXFx4MmUnLCAnJTJFJzogJ1xceDJlJywgJyUyZic6ICdcXHgyZicsXG4gICclMkYnOiAnXFx4MmYnLCAnJTMwJzogJ1xceDMwJywgJyUzMSc6ICdcXHgzMScsICclMzInOiAnXFx4MzInLCAnJTMzJzogJ1xceDMzJyxcbiAgJyUzNCc6ICdcXHgzNCcsICclMzUnOiAnXFx4MzUnLCAnJTM2JzogJ1xceDM2JywgJyUzNyc6ICdcXHgzNycsICclMzgnOiAnXFx4MzgnLFxuICAnJTM5JzogJ1xceDM5JywgJyUzYSc6ICdcXHgzYScsICclM0EnOiAnXFx4M2EnLCAnJTNiJzogJ1xceDNiJywgJyUzQic6ICdcXHgzYicsXG4gICclM2MnOiAnXFx4M2MnLCAnJTNDJzogJ1xceDNjJywgJyUzZCc6ICdcXHgzZCcsICclM0QnOiAnXFx4M2QnLCAnJTNlJzogJ1xceDNlJyxcbiAgJyUzRSc6ICdcXHgzZScsICclM2YnOiAnXFx4M2YnLCAnJTNGJzogJ1xceDNmJywgJyU0MCc6ICdcXHg0MCcsICclNDEnOiAnXFx4NDEnLFxuICAnJTQyJzogJ1xceDQyJywgJyU0Myc6ICdcXHg0MycsICclNDQnOiAnXFx4NDQnLCAnJTQ1JzogJ1xceDQ1JywgJyU0Nic6ICdcXHg0NicsXG4gICclNDcnOiAnXFx4NDcnLCAnJTQ4JzogJ1xceDQ4JywgJyU0OSc6ICdcXHg0OScsICclNGEnOiAnXFx4NGEnLCAnJTRBJzogJ1xceDRhJyxcbiAgJyU0Yic6ICdcXHg0YicsICclNEInOiAnXFx4NGInLCAnJTRjJzogJ1xceDRjJywgJyU0Qyc6ICdcXHg0YycsICclNGQnOiAnXFx4NGQnLFxuICAnJTREJzogJ1xceDRkJywgJyU0ZSc6ICdcXHg0ZScsICclNEUnOiAnXFx4NGUnLCAnJTRmJzogJ1xceDRmJywgJyU0Ric6ICdcXHg0ZicsXG4gICclNTAnOiAnXFx4NTAnLCAnJTUxJzogJ1xceDUxJywgJyU1Mic6ICdcXHg1MicsICclNTMnOiAnXFx4NTMnLCAnJTU0JzogJ1xceDU0JyxcbiAgJyU1NSc6ICdcXHg1NScsICclNTYnOiAnXFx4NTYnLCAnJTU3JzogJ1xceDU3JywgJyU1OCc6ICdcXHg1OCcsICclNTknOiAnXFx4NTknLFxuICAnJTVhJzogJ1xceDVhJywgJyU1QSc6ICdcXHg1YScsICclNWInOiAnXFx4NWInLCAnJTVCJzogJ1xceDViJywgJyU1Yyc6ICdcXHg1YycsXG4gICclNUMnOiAnXFx4NWMnLCAnJTVkJzogJ1xceDVkJywgJyU1RCc6ICdcXHg1ZCcsICclNWUnOiAnXFx4NWUnLCAnJTVFJzogJ1xceDVlJyxcbiAgJyU1Zic6ICdcXHg1ZicsICclNUYnOiAnXFx4NWYnLCAnJTYwJzogJ1xceDYwJywgJyU2MSc6ICdcXHg2MScsICclNjInOiAnXFx4NjInLFxuICAnJTYzJzogJ1xceDYzJywgJyU2NCc6ICdcXHg2NCcsICclNjUnOiAnXFx4NjUnLCAnJTY2JzogJ1xceDY2JywgJyU2Nyc6ICdcXHg2NycsXG4gICclNjgnOiAnXFx4NjgnLCAnJTY5JzogJ1xceDY5JywgJyU2YSc6ICdcXHg2YScsICclNkEnOiAnXFx4NmEnLCAnJTZiJzogJ1xceDZiJyxcbiAgJyU2Qic6ICdcXHg2YicsICclNmMnOiAnXFx4NmMnLCAnJTZDJzogJ1xceDZjJywgJyU2ZCc6ICdcXHg2ZCcsICclNkQnOiAnXFx4NmQnLFxuICAnJTZlJzogJ1xceDZlJywgJyU2RSc6ICdcXHg2ZScsICclNmYnOiAnXFx4NmYnLCAnJTZGJzogJ1xceDZmJywgJyU3MCc6ICdcXHg3MCcsXG4gICclNzEnOiAnXFx4NzEnLCAnJTcyJzogJ1xceDcyJywgJyU3Myc6ICdcXHg3MycsICclNzQnOiAnXFx4NzQnLCAnJTc1JzogJ1xceDc1JyxcbiAgJyU3Nic6ICdcXHg3NicsICclNzcnOiAnXFx4NzcnLCAnJTc4JzogJ1xceDc4JywgJyU3OSc6ICdcXHg3OScsICclN2EnOiAnXFx4N2EnLFxuICAnJTdBJzogJ1xceDdhJywgJyU3Yic6ICdcXHg3YicsICclN0InOiAnXFx4N2InLCAnJTdjJzogJ1xceDdjJywgJyU3Qyc6ICdcXHg3YycsXG4gICclN2QnOiAnXFx4N2QnLCAnJTdEJzogJ1xceDdkJywgJyU3ZSc6ICdcXHg3ZScsICclN0UnOiAnXFx4N2UnLCAnJTdmJzogJ1xceDdmJyxcbiAgJyU3Ric6ICdcXHg3ZicsICclODAnOiAnXFx4ODAnLCAnJTgxJzogJ1xceDgxJywgJyU4Mic6ICdcXHg4MicsICclODMnOiAnXFx4ODMnLFxuICAnJTg0JzogJ1xceDg0JywgJyU4NSc6ICdcXHg4NScsICclODYnOiAnXFx4ODYnLCAnJTg3JzogJ1xceDg3JywgJyU4OCc6ICdcXHg4OCcsXG4gICclODknOiAnXFx4ODknLCAnJThhJzogJ1xceDhhJywgJyU4QSc6ICdcXHg4YScsICclOGInOiAnXFx4OGInLCAnJThCJzogJ1xceDhiJyxcbiAgJyU4Yyc6ICdcXHg4YycsICclOEMnOiAnXFx4OGMnLCAnJThkJzogJ1xceDhkJywgJyU4RCc6ICdcXHg4ZCcsICclOGUnOiAnXFx4OGUnLFxuICAnJThFJzogJ1xceDhlJywgJyU4Zic6ICdcXHg4ZicsICclOEYnOiAnXFx4OGYnLCAnJTkwJzogJ1xceDkwJywgJyU5MSc6ICdcXHg5MScsXG4gICclOTInOiAnXFx4OTInLCAnJTkzJzogJ1xceDkzJywgJyU5NCc6ICdcXHg5NCcsICclOTUnOiAnXFx4OTUnLCAnJTk2JzogJ1xceDk2JyxcbiAgJyU5Nyc6ICdcXHg5NycsICclOTgnOiAnXFx4OTgnLCAnJTk5JzogJ1xceDk5JywgJyU5YSc6ICdcXHg5YScsICclOUEnOiAnXFx4OWEnLFxuICAnJTliJzogJ1xceDliJywgJyU5Qic6ICdcXHg5YicsICclOWMnOiAnXFx4OWMnLCAnJTlDJzogJ1xceDljJywgJyU5ZCc6ICdcXHg5ZCcsXG4gICclOUQnOiAnXFx4OWQnLCAnJTllJzogJ1xceDllJywgJyU5RSc6ICdcXHg5ZScsICclOWYnOiAnXFx4OWYnLCAnJTlGJzogJ1xceDlmJyxcbiAgJyVhMCc6ICdcXHhhMCcsICclQTAnOiAnXFx4YTAnLCAnJWExJzogJ1xceGExJywgJyVBMSc6ICdcXHhhMScsICclYTInOiAnXFx4YTInLFxuICAnJUEyJzogJ1xceGEyJywgJyVhMyc6ICdcXHhhMycsICclQTMnOiAnXFx4YTMnLCAnJWE0JzogJ1xceGE0JywgJyVBNCc6ICdcXHhhNCcsXG4gICclYTUnOiAnXFx4YTUnLCAnJUE1JzogJ1xceGE1JywgJyVhNic6ICdcXHhhNicsICclQTYnOiAnXFx4YTYnLCAnJWE3JzogJ1xceGE3JyxcbiAgJyVBNyc6ICdcXHhhNycsICclYTgnOiAnXFx4YTgnLCAnJUE4JzogJ1xceGE4JywgJyVhOSc6ICdcXHhhOScsICclQTknOiAnXFx4YTknLFxuICAnJWFhJzogJ1xceGFhJywgJyVBYSc6ICdcXHhhYScsICclYUEnOiAnXFx4YWEnLCAnJUFBJzogJ1xceGFhJywgJyVhYic6ICdcXHhhYicsXG4gICclQWInOiAnXFx4YWInLCAnJWFCJzogJ1xceGFiJywgJyVBQic6ICdcXHhhYicsICclYWMnOiAnXFx4YWMnLCAnJUFjJzogJ1xceGFjJyxcbiAgJyVhQyc6ICdcXHhhYycsICclQUMnOiAnXFx4YWMnLCAnJWFkJzogJ1xceGFkJywgJyVBZCc6ICdcXHhhZCcsICclYUQnOiAnXFx4YWQnLFxuICAnJUFEJzogJ1xceGFkJywgJyVhZSc6ICdcXHhhZScsICclQWUnOiAnXFx4YWUnLCAnJWFFJzogJ1xceGFlJywgJyVBRSc6ICdcXHhhZScsXG4gICclYWYnOiAnXFx4YWYnLCAnJUFmJzogJ1xceGFmJywgJyVhRic6ICdcXHhhZicsICclQUYnOiAnXFx4YWYnLCAnJWIwJzogJ1xceGIwJyxcbiAgJyVCMCc6ICdcXHhiMCcsICclYjEnOiAnXFx4YjEnLCAnJUIxJzogJ1xceGIxJywgJyViMic6ICdcXHhiMicsICclQjInOiAnXFx4YjInLFxuICAnJWIzJzogJ1xceGIzJywgJyVCMyc6ICdcXHhiMycsICclYjQnOiAnXFx4YjQnLCAnJUI0JzogJ1xceGI0JywgJyViNSc6ICdcXHhiNScsXG4gICclQjUnOiAnXFx4YjUnLCAnJWI2JzogJ1xceGI2JywgJyVCNic6ICdcXHhiNicsICclYjcnOiAnXFx4YjcnLCAnJUI3JzogJ1xceGI3JyxcbiAgJyViOCc6ICdcXHhiOCcsICclQjgnOiAnXFx4YjgnLCAnJWI5JzogJ1xceGI5JywgJyVCOSc6ICdcXHhiOScsICclYmEnOiAnXFx4YmEnLFxuICAnJUJhJzogJ1xceGJhJywgJyViQSc6ICdcXHhiYScsICclQkEnOiAnXFx4YmEnLCAnJWJiJzogJ1xceGJiJywgJyVCYic6ICdcXHhiYicsXG4gICclYkInOiAnXFx4YmInLCAnJUJCJzogJ1xceGJiJywgJyViYyc6ICdcXHhiYycsICclQmMnOiAnXFx4YmMnLCAnJWJDJzogJ1xceGJjJyxcbiAgJyVCQyc6ICdcXHhiYycsICclYmQnOiAnXFx4YmQnLCAnJUJkJzogJ1xceGJkJywgJyViRCc6ICdcXHhiZCcsICclQkQnOiAnXFx4YmQnLFxuICAnJWJlJzogJ1xceGJlJywgJyVCZSc6ICdcXHhiZScsICclYkUnOiAnXFx4YmUnLCAnJUJFJzogJ1xceGJlJywgJyViZic6ICdcXHhiZicsXG4gICclQmYnOiAnXFx4YmYnLCAnJWJGJzogJ1xceGJmJywgJyVCRic6ICdcXHhiZicsICclYzAnOiAnXFx4YzAnLCAnJUMwJzogJ1xceGMwJyxcbiAgJyVjMSc6ICdcXHhjMScsICclQzEnOiAnXFx4YzEnLCAnJWMyJzogJ1xceGMyJywgJyVDMic6ICdcXHhjMicsICclYzMnOiAnXFx4YzMnLFxuICAnJUMzJzogJ1xceGMzJywgJyVjNCc6ICdcXHhjNCcsICclQzQnOiAnXFx4YzQnLCAnJWM1JzogJ1xceGM1JywgJyVDNSc6ICdcXHhjNScsXG4gICclYzYnOiAnXFx4YzYnLCAnJUM2JzogJ1xceGM2JywgJyVjNyc6ICdcXHhjNycsICclQzcnOiAnXFx4YzcnLCAnJWM4JzogJ1xceGM4JyxcbiAgJyVDOCc6ICdcXHhjOCcsICclYzknOiAnXFx4YzknLCAnJUM5JzogJ1xceGM5JywgJyVjYSc6ICdcXHhjYScsICclQ2EnOiAnXFx4Y2EnLFxuICAnJWNBJzogJ1xceGNhJywgJyVDQSc6ICdcXHhjYScsICclY2InOiAnXFx4Y2InLCAnJUNiJzogJ1xceGNiJywgJyVjQic6ICdcXHhjYicsXG4gICclQ0InOiAnXFx4Y2InLCAnJWNjJzogJ1xceGNjJywgJyVDYyc6ICdcXHhjYycsICclY0MnOiAnXFx4Y2MnLCAnJUNDJzogJ1xceGNjJyxcbiAgJyVjZCc6ICdcXHhjZCcsICclQ2QnOiAnXFx4Y2QnLCAnJWNEJzogJ1xceGNkJywgJyVDRCc6ICdcXHhjZCcsICclY2UnOiAnXFx4Y2UnLFxuICAnJUNlJzogJ1xceGNlJywgJyVjRSc6ICdcXHhjZScsICclQ0UnOiAnXFx4Y2UnLCAnJWNmJzogJ1xceGNmJywgJyVDZic6ICdcXHhjZicsXG4gICclY0YnOiAnXFx4Y2YnLCAnJUNGJzogJ1xceGNmJywgJyVkMCc6ICdcXHhkMCcsICclRDAnOiAnXFx4ZDAnLCAnJWQxJzogJ1xceGQxJyxcbiAgJyVEMSc6ICdcXHhkMScsICclZDInOiAnXFx4ZDInLCAnJUQyJzogJ1xceGQyJywgJyVkMyc6ICdcXHhkMycsICclRDMnOiAnXFx4ZDMnLFxuICAnJWQ0JzogJ1xceGQ0JywgJyVENCc6ICdcXHhkNCcsICclZDUnOiAnXFx4ZDUnLCAnJUQ1JzogJ1xceGQ1JywgJyVkNic6ICdcXHhkNicsXG4gICclRDYnOiAnXFx4ZDYnLCAnJWQ3JzogJ1xceGQ3JywgJyVENyc6ICdcXHhkNycsICclZDgnOiAnXFx4ZDgnLCAnJUQ4JzogJ1xceGQ4JyxcbiAgJyVkOSc6ICdcXHhkOScsICclRDknOiAnXFx4ZDknLCAnJWRhJzogJ1xceGRhJywgJyVEYSc6ICdcXHhkYScsICclZEEnOiAnXFx4ZGEnLFxuICAnJURBJzogJ1xceGRhJywgJyVkYic6ICdcXHhkYicsICclRGInOiAnXFx4ZGInLCAnJWRCJzogJ1xceGRiJywgJyVEQic6ICdcXHhkYicsXG4gICclZGMnOiAnXFx4ZGMnLCAnJURjJzogJ1xceGRjJywgJyVkQyc6ICdcXHhkYycsICclREMnOiAnXFx4ZGMnLCAnJWRkJzogJ1xceGRkJyxcbiAgJyVEZCc6ICdcXHhkZCcsICclZEQnOiAnXFx4ZGQnLCAnJUREJzogJ1xceGRkJywgJyVkZSc6ICdcXHhkZScsICclRGUnOiAnXFx4ZGUnLFxuICAnJWRFJzogJ1xceGRlJywgJyVERSc6ICdcXHhkZScsICclZGYnOiAnXFx4ZGYnLCAnJURmJzogJ1xceGRmJywgJyVkRic6ICdcXHhkZicsXG4gICclREYnOiAnXFx4ZGYnLCAnJWUwJzogJ1xceGUwJywgJyVFMCc6ICdcXHhlMCcsICclZTEnOiAnXFx4ZTEnLCAnJUUxJzogJ1xceGUxJyxcbiAgJyVlMic6ICdcXHhlMicsICclRTInOiAnXFx4ZTInLCAnJWUzJzogJ1xceGUzJywgJyVFMyc6ICdcXHhlMycsICclZTQnOiAnXFx4ZTQnLFxuICAnJUU0JzogJ1xceGU0JywgJyVlNSc6ICdcXHhlNScsICclRTUnOiAnXFx4ZTUnLCAnJWU2JzogJ1xceGU2JywgJyVFNic6ICdcXHhlNicsXG4gICclZTcnOiAnXFx4ZTcnLCAnJUU3JzogJ1xceGU3JywgJyVlOCc6ICdcXHhlOCcsICclRTgnOiAnXFx4ZTgnLCAnJWU5JzogJ1xceGU5JyxcbiAgJyVFOSc6ICdcXHhlOScsICclZWEnOiAnXFx4ZWEnLCAnJUVhJzogJ1xceGVhJywgJyVlQSc6ICdcXHhlYScsICclRUEnOiAnXFx4ZWEnLFxuICAnJWViJzogJ1xceGViJywgJyVFYic6ICdcXHhlYicsICclZUInOiAnXFx4ZWInLCAnJUVCJzogJ1xceGViJywgJyVlYyc6ICdcXHhlYycsXG4gICclRWMnOiAnXFx4ZWMnLCAnJWVDJzogJ1xceGVjJywgJyVFQyc6ICdcXHhlYycsICclZWQnOiAnXFx4ZWQnLCAnJUVkJzogJ1xceGVkJyxcbiAgJyVlRCc6ICdcXHhlZCcsICclRUQnOiAnXFx4ZWQnLCAnJWVlJzogJ1xceGVlJywgJyVFZSc6ICdcXHhlZScsICclZUUnOiAnXFx4ZWUnLFxuICAnJUVFJzogJ1xceGVlJywgJyVlZic6ICdcXHhlZicsICclRWYnOiAnXFx4ZWYnLCAnJWVGJzogJ1xceGVmJywgJyVFRic6ICdcXHhlZicsXG4gICclZjAnOiAnXFx4ZjAnLCAnJUYwJzogJ1xceGYwJywgJyVmMSc6ICdcXHhmMScsICclRjEnOiAnXFx4ZjEnLCAnJWYyJzogJ1xceGYyJyxcbiAgJyVGMic6ICdcXHhmMicsICclZjMnOiAnXFx4ZjMnLCAnJUYzJzogJ1xceGYzJywgJyVmNCc6ICdcXHhmNCcsICclRjQnOiAnXFx4ZjQnLFxuICAnJWY1JzogJ1xceGY1JywgJyVGNSc6ICdcXHhmNScsICclZjYnOiAnXFx4ZjYnLCAnJUY2JzogJ1xceGY2JywgJyVmNyc6ICdcXHhmNycsXG4gICclRjcnOiAnXFx4ZjcnLCAnJWY4JzogJ1xceGY4JywgJyVGOCc6ICdcXHhmOCcsICclZjknOiAnXFx4ZjknLCAnJUY5JzogJ1xceGY5JyxcbiAgJyVmYSc6ICdcXHhmYScsICclRmEnOiAnXFx4ZmEnLCAnJWZBJzogJ1xceGZhJywgJyVGQSc6ICdcXHhmYScsICclZmInOiAnXFx4ZmInLFxuICAnJUZiJzogJ1xceGZiJywgJyVmQic6ICdcXHhmYicsICclRkInOiAnXFx4ZmInLCAnJWZjJzogJ1xceGZjJywgJyVGYyc6ICdcXHhmYycsXG4gICclZkMnOiAnXFx4ZmMnLCAnJUZDJzogJ1xceGZjJywgJyVmZCc6ICdcXHhmZCcsICclRmQnOiAnXFx4ZmQnLCAnJWZEJzogJ1xceGZkJyxcbiAgJyVGRCc6ICdcXHhmZCcsICclZmUnOiAnXFx4ZmUnLCAnJUZlJzogJ1xceGZlJywgJyVmRSc6ICdcXHhmZScsICclRkUnOiAnXFx4ZmUnLFxuICAnJWZmJzogJ1xceGZmJywgJyVGZic6ICdcXHhmZicsICclZkYnOiAnXFx4ZmYnLCAnJUZGJzogJ1xceGZmJ1xufVxuXG5mdW5jdGlvbiBlbmNvZGVkUmVwbGFjZXIgKG1hdGNoKSB7XG4gIHJldHVybiBFbmNvZGVkTG9va3VwW21hdGNoXVxufVxuXG5jb25zdCBTVEFURV9LRVkgPSAwXG5jb25zdCBTVEFURV9WQUxVRSA9IDFcbmNvbnN0IFNUQVRFX0NIQVJTRVQgPSAyXG5jb25zdCBTVEFURV9MQU5HID0gM1xuXG5mdW5jdGlvbiBwYXJzZVBhcmFtcyAoc3RyKSB7XG4gIGNvbnN0IHJlcyA9IFtdXG4gIGxldCBzdGF0ZSA9IFNUQVRFX0tFWVxuICBsZXQgY2hhcnNldCA9ICcnXG4gIGxldCBpbnF1b3RlID0gZmFsc2VcbiAgbGV0IGVzY2FwaW5nID0gZmFsc2VcbiAgbGV0IHAgPSAwXG4gIGxldCB0bXAgPSAnJ1xuICBjb25zdCBsZW4gPSBzdHIubGVuZ3RoXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXZhclxuICAgIGNvbnN0IGNoYXIgPSBzdHJbaV1cbiAgICBpZiAoY2hhciA9PT0gJ1xcXFwnICYmIGlucXVvdGUpIHtcbiAgICAgIGlmIChlc2NhcGluZykgeyBlc2NhcGluZyA9IGZhbHNlIH0gZWxzZSB7XG4gICAgICAgIGVzY2FwaW5nID0gdHJ1ZVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gJ1wiJykge1xuICAgICAgaWYgKCFlc2NhcGluZykge1xuICAgICAgICBpZiAoaW5xdW90ZSkge1xuICAgICAgICAgIGlucXVvdGUgPSBmYWxzZVxuICAgICAgICAgIHN0YXRlID0gU1RBVEVfS0VZXG4gICAgICAgIH0gZWxzZSB7IGlucXVvdGUgPSB0cnVlIH1cbiAgICAgICAgY29udGludWVcbiAgICAgIH0gZWxzZSB7IGVzY2FwaW5nID0gZmFsc2UgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZXNjYXBpbmcgJiYgaW5xdW90ZSkgeyB0bXAgKz0gJ1xcXFwnIH1cbiAgICAgIGVzY2FwaW5nID0gZmFsc2VcbiAgICAgIGlmICgoc3RhdGUgPT09IFNUQVRFX0NIQVJTRVQgfHwgc3RhdGUgPT09IFNUQVRFX0xBTkcpICYmIGNoYXIgPT09IFwiJ1wiKSB7XG4gICAgICAgIGlmIChzdGF0ZSA9PT0gU1RBVEVfQ0hBUlNFVCkge1xuICAgICAgICAgIHN0YXRlID0gU1RBVEVfTEFOR1xuICAgICAgICAgIGNoYXJzZXQgPSB0bXAuc3Vic3RyaW5nKDEpXG4gICAgICAgIH0gZWxzZSB7IHN0YXRlID0gU1RBVEVfVkFMVUUgfVxuICAgICAgICB0bXAgPSAnJ1xuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gU1RBVEVfS0VZICYmXG4gICAgICAgIChjaGFyID09PSAnKicgfHwgY2hhciA9PT0gJz0nKSAmJlxuICAgICAgICByZXMubGVuZ3RoKSB7XG4gICAgICAgIHN0YXRlID0gY2hhciA9PT0gJyonXG4gICAgICAgICAgPyBTVEFURV9DSEFSU0VUXG4gICAgICAgICAgOiBTVEFURV9WQUxVRVxuICAgICAgICByZXNbcF0gPSBbdG1wLCB1bmRlZmluZWRdXG4gICAgICAgIHRtcCA9ICcnXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9IGVsc2UgaWYgKCFpbnF1b3RlICYmIGNoYXIgPT09ICc7Jykge1xuICAgICAgICBzdGF0ZSA9IFNUQVRFX0tFWVxuICAgICAgICBpZiAoY2hhcnNldCkge1xuICAgICAgICAgIGlmICh0bXAubGVuZ3RoKSB7XG4gICAgICAgICAgICB0bXAgPSBkZWNvZGVUZXh0KHRtcC5yZXBsYWNlKFJFX0VOQ09ERUQsIGVuY29kZWRSZXBsYWNlciksXG4gICAgICAgICAgICAgICdiaW5hcnknLFxuICAgICAgICAgICAgICBjaGFyc2V0KVxuICAgICAgICAgIH1cbiAgICAgICAgICBjaGFyc2V0ID0gJydcbiAgICAgICAgfSBlbHNlIGlmICh0bXAubGVuZ3RoKSB7XG4gICAgICAgICAgdG1wID0gZGVjb2RlVGV4dCh0bXAsICdiaW5hcnknLCAndXRmOCcpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc1twXSA9PT0gdW5kZWZpbmVkKSB7IHJlc1twXSA9IHRtcCB9IGVsc2UgeyByZXNbcF1bMV0gPSB0bXAgfVxuICAgICAgICB0bXAgPSAnJ1xuICAgICAgICArK3BcbiAgICAgICAgY29udGludWVcbiAgICAgIH0gZWxzZSBpZiAoIWlucXVvdGUgJiYgKGNoYXIgPT09ICcgJyB8fCBjaGFyID09PSAnXFx0JykpIHsgY29udGludWUgfVxuICAgIH1cbiAgICB0bXAgKz0gY2hhclxuICB9XG4gIGlmIChjaGFyc2V0ICYmIHRtcC5sZW5ndGgpIHtcbiAgICB0bXAgPSBkZWNvZGVUZXh0KHRtcC5yZXBsYWNlKFJFX0VOQ09ERUQsIGVuY29kZWRSZXBsYWNlciksXG4gICAgICAnYmluYXJ5JyxcbiAgICAgIGNoYXJzZXQpXG4gIH0gZWxzZSBpZiAodG1wKSB7XG4gICAgdG1wID0gZGVjb2RlVGV4dCh0bXAsICdiaW5hcnknLCAndXRmOCcpXG4gIH1cblxuICBpZiAocmVzW3BdID09PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodG1wKSB7IHJlc1twXSA9IHRtcCB9XG4gIH0gZWxzZSB7IHJlc1twXVsxXSA9IHRtcCB9XG5cbiAgcmV0dXJuIHJlc1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcnNlUGFyYW1zXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmFzZW5hbWUgKHBhdGgpIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykgeyByZXR1cm4gJycgfVxuICBmb3IgKHZhciBpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXZhclxuICAgIHN3aXRjaCAocGF0aC5jaGFyQ29kZUF0KGkpKSB7XG4gICAgICBjYXNlIDB4MkY6IC8vICcvJ1xuICAgICAgY2FzZSAweDVDOiAvLyAnXFwnXG4gICAgICAgIHBhdGggPSBwYXRoLnNsaWNlKGkgKyAxKVxuICAgICAgICByZXR1cm4gKHBhdGggPT09ICcuLicgfHwgcGF0aCA9PT0gJy4nID8gJycgOiBwYXRoKVxuICAgIH1cbiAgfVxuICByZXR1cm4gKHBhdGggPT09ICcuLicgfHwgcGF0aCA9PT0gJy4nID8gJycgOiBwYXRoKVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBUT0RPOlxuLy8gICogc3VwcG9ydCAxIG5lc3RlZCBtdWx0aXBhcnQgbGV2ZWxcbi8vICAgIChzZWUgc2Vjb25kIG11bHRpcGFydCBleGFtcGxlIGhlcmU6XG4vLyAgICAgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQwMS9pbnRlcmFjdC9mb3Jtcy5odG1sI2RpZHgtbXVsdGlwYXJ0Zm9ybS1kYXRhKVxuLy8gICogc3VwcG9ydCBsaW1pdHMuZmllbGROYW1lU2l6ZVxuLy8gICAgIC0tIHRoaXMgd2lsbCByZXF1aXJlIG1vZGlmaWNhdGlvbnMgdG8gdXRpbHMucGFyc2VQYXJhbXNcblxuY29uc3QgeyBSZWFkYWJsZSB9ID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKVxuY29uc3QgeyBpbmhlcml0cyB9ID0gcmVxdWlyZSgnbm9kZTp1dGlsJylcblxuY29uc3QgRGljZXIgPSByZXF1aXJlKCcuLi8uLi9kZXBzL2RpY2VyL2xpYi9EaWNlcicpXG5cbmNvbnN0IHBhcnNlUGFyYW1zID0gcmVxdWlyZSgnLi4vdXRpbHMvcGFyc2VQYXJhbXMnKVxuY29uc3QgZGVjb2RlVGV4dCA9IHJlcXVpcmUoJy4uL3V0aWxzL2RlY29kZVRleHQnKVxuY29uc3QgYmFzZW5hbWUgPSByZXF1aXJlKCcuLi91dGlscy9iYXNlbmFtZScpXG5jb25zdCBnZXRMaW1pdCA9IHJlcXVpcmUoJy4uL3V0aWxzL2dldExpbWl0JylcblxuY29uc3QgUkVfQk9VTkRBUlkgPSAvXmJvdW5kYXJ5JC9pXG5jb25zdCBSRV9GSUVMRCA9IC9eZm9ybS1kYXRhJC9pXG5jb25zdCBSRV9DSEFSU0VUID0gL15jaGFyc2V0JC9pXG5jb25zdCBSRV9GSUxFTkFNRSA9IC9eZmlsZW5hbWUkL2lcbmNvbnN0IFJFX05BTUUgPSAvXm5hbWUkL2lcblxuTXVsdGlwYXJ0LmRldGVjdCA9IC9ebXVsdGlwYXJ0XFwvZm9ybS1kYXRhL2lcbmZ1bmN0aW9uIE11bHRpcGFydCAoYm95LCBjZmcpIHtcbiAgbGV0IGlcbiAgbGV0IGxlblxuICBjb25zdCBzZWxmID0gdGhpc1xuICBsZXQgYm91bmRhcnlcbiAgY29uc3QgbGltaXRzID0gY2ZnLmxpbWl0c1xuICBjb25zdCBpc1BhcnRBRmlsZSA9IGNmZy5pc1BhcnRBRmlsZSB8fCAoKGZpZWxkTmFtZSwgY29udGVudFR5cGUsIGZpbGVOYW1lKSA9PiAoY29udGVudFR5cGUgPT09ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nIHx8IGZpbGVOYW1lICE9PSB1bmRlZmluZWQpKVxuICBjb25zdCBwYXJzZWRDb25UeXBlID0gY2ZnLnBhcnNlZENvblR5cGUgfHwgW11cbiAgY29uc3QgZGVmQ2hhcnNldCA9IGNmZy5kZWZDaGFyc2V0IHx8ICd1dGY4J1xuICBjb25zdCBwcmVzZXJ2ZVBhdGggPSBjZmcucHJlc2VydmVQYXRoXG4gIGNvbnN0IGZpbGVPcHRzID0geyBoaWdoV2F0ZXJNYXJrOiBjZmcuZmlsZUh3bSB9XG5cbiAgZm9yIChpID0gMCwgbGVuID0gcGFyc2VkQ29uVHlwZS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHBhcnNlZENvblR5cGVbaV0pICYmXG4gICAgICBSRV9CT1VOREFSWS50ZXN0KHBhcnNlZENvblR5cGVbaV1bMF0pKSB7XG4gICAgICBib3VuZGFyeSA9IHBhcnNlZENvblR5cGVbaV1bMV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tGaW5pc2hlZCAoKSB7XG4gICAgaWYgKG5lbmRzID09PSAwICYmIGZpbmlzaGVkICYmICFib3kuX2RvbmUpIHtcbiAgICAgIGZpbmlzaGVkID0gZmFsc2VcbiAgICAgIHNlbGYuZW5kKClcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIGJvdW5kYXJ5ICE9PSAnc3RyaW5nJykgeyB0aHJvdyBuZXcgRXJyb3IoJ011bHRpcGFydDogQm91bmRhcnkgbm90IGZvdW5kJykgfVxuXG4gIGNvbnN0IGZpZWxkU2l6ZUxpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnZmllbGRTaXplJywgMSAqIDEwMjQgKiAxMDI0KVxuICBjb25zdCBmaWxlU2l6ZUxpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnZmlsZVNpemUnLCBJbmZpbml0eSlcbiAgY29uc3QgZmlsZXNMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpbGVzJywgSW5maW5pdHkpXG4gIGNvbnN0IGZpZWxkc0xpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnZmllbGRzJywgSW5maW5pdHkpXG4gIGNvbnN0IHBhcnRzTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdwYXJ0cycsIEluZmluaXR5KVxuICBjb25zdCBoZWFkZXJQYWlyc0xpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnaGVhZGVyUGFpcnMnLCAyMDAwKVxuICBjb25zdCBoZWFkZXJTaXplTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdoZWFkZXJTaXplJywgODAgKiAxMDI0KVxuXG4gIGxldCBuZmlsZXMgPSAwXG4gIGxldCBuZmllbGRzID0gMFxuICBsZXQgbmVuZHMgPSAwXG4gIGxldCBjdXJGaWxlXG4gIGxldCBjdXJGaWVsZFxuICBsZXQgZmluaXNoZWQgPSBmYWxzZVxuXG4gIHRoaXMuX25lZWREcmFpbiA9IGZhbHNlXG4gIHRoaXMuX3BhdXNlID0gZmFsc2VcbiAgdGhpcy5fY2IgPSB1bmRlZmluZWRcbiAgdGhpcy5fbnBhcnRzID0gMFxuICB0aGlzLl9ib3kgPSBib3lcblxuICBjb25zdCBwYXJzZXJDZmcgPSB7XG4gICAgYm91bmRhcnksXG4gICAgbWF4SGVhZGVyUGFpcnM6IGhlYWRlclBhaXJzTGltaXQsXG4gICAgbWF4SGVhZGVyU2l6ZTogaGVhZGVyU2l6ZUxpbWl0LFxuICAgIHBhcnRId206IGZpbGVPcHRzLmhpZ2hXYXRlck1hcmssXG4gICAgaGlnaFdhdGVyTWFyazogY2ZnLmhpZ2hXYXRlck1hcmtcbiAgfVxuXG4gIHRoaXMucGFyc2VyID0gbmV3IERpY2VyKHBhcnNlckNmZylcbiAgdGhpcy5wYXJzZXIub24oJ2RyYWluJywgZnVuY3Rpb24gKCkge1xuICAgIHNlbGYuX25lZWREcmFpbiA9IGZhbHNlXG4gICAgaWYgKHNlbGYuX2NiICYmICFzZWxmLl9wYXVzZSkge1xuICAgICAgY29uc3QgY2IgPSBzZWxmLl9jYlxuICAgICAgc2VsZi5fY2IgPSB1bmRlZmluZWRcbiAgICAgIGNiKClcbiAgICB9XG4gIH0pLm9uKCdwYXJ0JywgZnVuY3Rpb24gb25QYXJ0IChwYXJ0KSB7XG4gICAgaWYgKCsrc2VsZi5fbnBhcnRzID4gcGFydHNMaW1pdCkge1xuICAgICAgc2VsZi5wYXJzZXIucmVtb3ZlTGlzdGVuZXIoJ3BhcnQnLCBvblBhcnQpXG4gICAgICBzZWxmLnBhcnNlci5vbigncGFydCcsIHNraXBQYXJ0KVxuICAgICAgYm95LmhpdFBhcnRzTGltaXQgPSB0cnVlXG4gICAgICBib3kuZW1pdCgncGFydHNMaW1pdCcpXG4gICAgICByZXR1cm4gc2tpcFBhcnQocGFydClcbiAgICB9XG5cbiAgICAvLyBoYWNrIGJlY2F1c2Ugc3RyZWFtczIgX2Fsd2F5c18gZG9lc24ndCBlbWl0ICdlbmQnIHVudGlsIG5leHRUaWNrLCBzbyBsZXRcbiAgICAvLyB1cyBlbWl0ICdlbmQnIGVhcmx5IHNpbmNlIHdlIGtub3cgdGhlIHBhcnQgaGFzIGVuZGVkIGlmIHdlIGFyZSBhbHJlYWR5XG4gICAgLy8gc2VlaW5nIHRoZSBuZXh0IHBhcnRcbiAgICBpZiAoY3VyRmllbGQpIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gY3VyRmllbGRcbiAgICAgIGZpZWxkLmVtaXQoJ2VuZCcpXG4gICAgICBmaWVsZC5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2VuZCcpXG4gICAgfVxuXG4gICAgcGFydC5vbignaGVhZGVyJywgZnVuY3Rpb24gKGhlYWRlcikge1xuICAgICAgbGV0IGNvbnR5cGVcbiAgICAgIGxldCBmaWVsZG5hbWVcbiAgICAgIGxldCBwYXJzZWRcbiAgICAgIGxldCBjaGFyc2V0XG4gICAgICBsZXQgZW5jb2RpbmdcbiAgICAgIGxldCBmaWxlbmFtZVxuICAgICAgbGV0IG5zaXplID0gMFxuXG4gICAgICBpZiAoaGVhZGVyWydjb250ZW50LXR5cGUnXSkge1xuICAgICAgICBwYXJzZWQgPSBwYXJzZVBhcmFtcyhoZWFkZXJbJ2NvbnRlbnQtdHlwZSddWzBdKVxuICAgICAgICBpZiAocGFyc2VkWzBdKSB7XG4gICAgICAgICAgY29udHlwZSA9IHBhcnNlZFswXS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcGFyc2VkLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgICAgICBpZiAoUkVfQ0hBUlNFVC50ZXN0KHBhcnNlZFtpXVswXSkpIHtcbiAgICAgICAgICAgICAgY2hhcnNldCA9IHBhcnNlZFtpXVsxXS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjb250eXBlID09PSB1bmRlZmluZWQpIHsgY29udHlwZSA9ICd0ZXh0L3BsYWluJyB9XG4gICAgICBpZiAoY2hhcnNldCA9PT0gdW5kZWZpbmVkKSB7IGNoYXJzZXQgPSBkZWZDaGFyc2V0IH1cblxuICAgICAgaWYgKGhlYWRlclsnY29udGVudC1kaXNwb3NpdGlvbiddKSB7XG4gICAgICAgIHBhcnNlZCA9IHBhcnNlUGFyYW1zKGhlYWRlclsnY29udGVudC1kaXNwb3NpdGlvbiddWzBdKVxuICAgICAgICBpZiAoIVJFX0ZJRUxELnRlc3QocGFyc2VkWzBdKSkgeyByZXR1cm4gc2tpcFBhcnQocGFydCkgfVxuICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBwYXJzZWQubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICBpZiAoUkVfTkFNRS50ZXN0KHBhcnNlZFtpXVswXSkpIHtcbiAgICAgICAgICAgIGZpZWxkbmFtZSA9IHBhcnNlZFtpXVsxXVxuICAgICAgICAgIH0gZWxzZSBpZiAoUkVfRklMRU5BTUUudGVzdChwYXJzZWRbaV1bMF0pKSB7XG4gICAgICAgICAgICBmaWxlbmFtZSA9IHBhcnNlZFtpXVsxXVxuICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZVBhdGgpIHsgZmlsZW5hbWUgPSBiYXNlbmFtZShmaWxlbmFtZSkgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHsgcmV0dXJuIHNraXBQYXJ0KHBhcnQpIH1cblxuICAgICAgaWYgKGhlYWRlclsnY29udGVudC10cmFuc2Zlci1lbmNvZGluZyddKSB7IGVuY29kaW5nID0gaGVhZGVyWydjb250ZW50LXRyYW5zZmVyLWVuY29kaW5nJ11bMF0udG9Mb3dlckNhc2UoKSB9IGVsc2UgeyBlbmNvZGluZyA9ICc3Yml0JyB9XG5cbiAgICAgIGxldCBvbkRhdGEsXG4gICAgICAgIG9uRW5kXG5cbiAgICAgIGlmIChpc1BhcnRBRmlsZShmaWVsZG5hbWUsIGNvbnR5cGUsIGZpbGVuYW1lKSkge1xuICAgICAgICAvLyBmaWxlL2JpbmFyeSBmaWVsZFxuICAgICAgICBpZiAobmZpbGVzID09PSBmaWxlc0xpbWl0KSB7XG4gICAgICAgICAgaWYgKCFib3kuaGl0RmlsZXNMaW1pdCkge1xuICAgICAgICAgICAgYm95LmhpdEZpbGVzTGltaXQgPSB0cnVlXG4gICAgICAgICAgICBib3kuZW1pdCgnZmlsZXNMaW1pdCcpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBza2lwUGFydChwYXJ0KVxuICAgICAgICB9XG5cbiAgICAgICAgKytuZmlsZXNcblxuICAgICAgICBpZiAoYm95Lmxpc3RlbmVyQ291bnQoJ2ZpbGUnKSA9PT0gMCkge1xuICAgICAgICAgIHNlbGYucGFyc2VyLl9pZ25vcmUoKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgKytuZW5kc1xuICAgICAgICBjb25zdCBmaWxlID0gbmV3IEZpbGVTdHJlYW0oZmlsZU9wdHMpXG4gICAgICAgIGN1ckZpbGUgPSBmaWxlXG4gICAgICAgIGZpbGUub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAtLW5lbmRzXG4gICAgICAgICAgc2VsZi5fcGF1c2UgPSBmYWxzZVxuICAgICAgICAgIGNoZWNrRmluaXNoZWQoKVxuICAgICAgICAgIGlmIChzZWxmLl9jYiAmJiAhc2VsZi5fbmVlZERyYWluKSB7XG4gICAgICAgICAgICBjb25zdCBjYiA9IHNlbGYuX2NiXG4gICAgICAgICAgICBzZWxmLl9jYiA9IHVuZGVmaW5lZFxuICAgICAgICAgICAgY2IoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgZmlsZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gICAgICAgICAgaWYgKCFzZWxmLl9wYXVzZSkgeyByZXR1cm4gfVxuICAgICAgICAgIHNlbGYuX3BhdXNlID0gZmFsc2VcbiAgICAgICAgICBpZiAoc2VsZi5fY2IgJiYgIXNlbGYuX25lZWREcmFpbikge1xuICAgICAgICAgICAgY29uc3QgY2IgPSBzZWxmLl9jYlxuICAgICAgICAgICAgc2VsZi5fY2IgPSB1bmRlZmluZWRcbiAgICAgICAgICAgIGNiKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYm95LmVtaXQoJ2ZpbGUnLCBmaWVsZG5hbWUsIGZpbGUsIGZpbGVuYW1lLCBlbmNvZGluZywgY29udHlwZSlcblxuICAgICAgICBvbkRhdGEgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgIGlmICgobnNpemUgKz0gZGF0YS5sZW5ndGgpID4gZmlsZVNpemVMaW1pdCkge1xuICAgICAgICAgICAgY29uc3QgZXh0cmFsZW4gPSBmaWxlU2l6ZUxpbWl0IC0gbnNpemUgKyBkYXRhLmxlbmd0aFxuICAgICAgICAgICAgaWYgKGV4dHJhbGVuID4gMCkgeyBmaWxlLnB1c2goZGF0YS5zbGljZSgwLCBleHRyYWxlbikpIH1cbiAgICAgICAgICAgIGZpbGUudHJ1bmNhdGVkID0gdHJ1ZVxuICAgICAgICAgICAgZmlsZS5ieXRlc1JlYWQgPSBmaWxlU2l6ZUxpbWl0XG4gICAgICAgICAgICBwYXJ0LnJlbW92ZUFsbExpc3RlbmVycygnZGF0YScpXG4gICAgICAgICAgICBmaWxlLmVtaXQoJ2xpbWl0JylcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH0gZWxzZSBpZiAoIWZpbGUucHVzaChkYXRhKSkgeyBzZWxmLl9wYXVzZSA9IHRydWUgfVxuXG4gICAgICAgICAgZmlsZS5ieXRlc1JlYWQgPSBuc2l6ZVxuICAgICAgICB9XG5cbiAgICAgICAgb25FbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY3VyRmlsZSA9IHVuZGVmaW5lZFxuICAgICAgICAgIGZpbGUucHVzaChudWxsKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBub24tZmlsZSBmaWVsZFxuICAgICAgICBpZiAobmZpZWxkcyA9PT0gZmllbGRzTGltaXQpIHtcbiAgICAgICAgICBpZiAoIWJveS5oaXRGaWVsZHNMaW1pdCkge1xuICAgICAgICAgICAgYm95LmhpdEZpZWxkc0xpbWl0ID0gdHJ1ZVxuICAgICAgICAgICAgYm95LmVtaXQoJ2ZpZWxkc0xpbWl0JylcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHNraXBQYXJ0KHBhcnQpXG4gICAgICAgIH1cblxuICAgICAgICArK25maWVsZHNcbiAgICAgICAgKytuZW5kc1xuICAgICAgICBsZXQgYnVmZmVyID0gJydcbiAgICAgICAgbGV0IHRydW5jYXRlZCA9IGZhbHNlXG4gICAgICAgIGN1ckZpZWxkID0gcGFydFxuXG4gICAgICAgIG9uRGF0YSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgaWYgKChuc2l6ZSArPSBkYXRhLmxlbmd0aCkgPiBmaWVsZFNpemVMaW1pdCkge1xuICAgICAgICAgICAgY29uc3QgZXh0cmFsZW4gPSAoZmllbGRTaXplTGltaXQgLSAobnNpemUgLSBkYXRhLmxlbmd0aCkpXG4gICAgICAgICAgICBidWZmZXIgKz0gZGF0YS50b1N0cmluZygnYmluYXJ5JywgMCwgZXh0cmFsZW4pXG4gICAgICAgICAgICB0cnVuY2F0ZWQgPSB0cnVlXG4gICAgICAgICAgICBwYXJ0LnJlbW92ZUFsbExpc3RlbmVycygnZGF0YScpXG4gICAgICAgICAgfSBlbHNlIHsgYnVmZmVyICs9IGRhdGEudG9TdHJpbmcoJ2JpbmFyeScpIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG9uRW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGN1ckZpZWxkID0gdW5kZWZpbmVkXG4gICAgICAgICAgaWYgKGJ1ZmZlci5sZW5ndGgpIHsgYnVmZmVyID0gZGVjb2RlVGV4dChidWZmZXIsICdiaW5hcnknLCBjaGFyc2V0KSB9XG4gICAgICAgICAgYm95LmVtaXQoJ2ZpZWxkJywgZmllbGRuYW1lLCBidWZmZXIsIGZhbHNlLCB0cnVuY2F0ZWQsIGVuY29kaW5nLCBjb250eXBlKVxuICAgICAgICAgIC0tbmVuZHNcbiAgICAgICAgICBjaGVja0ZpbmlzaGVkKClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvKiBBcyBvZiBub2RlQDJlZmU0YWI3NjE2NjYgKHYwLjEwLjI5Ky92MC4xMS4xNCspLCBidXNib3kgaGFkIGJlY29tZVxuICAgICAgICAgYnJva2VuLiBTdHJlYW1zMi9zdHJlYW1zMyBpcyBhIGh1Z2UgYmxhY2sgYm94IG9mIGNvbmZ1c2lvbiwgYnV0XG4gICAgICAgICBzb21laG93IG92ZXJyaWRpbmcgdGhlIHN5bmMgc3RhdGUgc2VlbXMgdG8gZml4IHRoaW5ncyBhZ2FpbiAoYW5kIHN0aWxsXG4gICAgICAgICBzZWVtcyB0byB3b3JrIGZvciBwcmV2aW91cyBub2RlIHZlcnNpb25zKS5cbiAgICAgICovXG4gICAgICBwYXJ0Ll9yZWFkYWJsZVN0YXRlLnN5bmMgPSBmYWxzZVxuXG4gICAgICBwYXJ0Lm9uKCdkYXRhJywgb25EYXRhKVxuICAgICAgcGFydC5vbignZW5kJywgb25FbmQpXG4gICAgfSkub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKGN1ckZpbGUpIHsgY3VyRmlsZS5lbWl0KCdlcnJvcicsIGVycikgfVxuICAgIH0pXG4gIH0pLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICBib3kuZW1pdCgnZXJyb3InLCBlcnIpXG4gIH0pLm9uKCdmaW5pc2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgZmluaXNoZWQgPSB0cnVlXG4gICAgY2hlY2tGaW5pc2hlZCgpXG4gIH0pXG59XG5cbk11bHRpcGFydC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGNiKSB7XG4gIGNvbnN0IHIgPSB0aGlzLnBhcnNlci53cml0ZShjaHVuaylcbiAgaWYgKHIgJiYgIXRoaXMuX3BhdXNlKSB7XG4gICAgY2IoKVxuICB9IGVsc2Uge1xuICAgIHRoaXMuX25lZWREcmFpbiA9ICFyXG4gICAgdGhpcy5fY2IgPSBjYlxuICB9XG59XG5cbk11bHRpcGFydC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCBzZWxmID0gdGhpc1xuXG4gIGlmIChzZWxmLnBhcnNlci53cml0YWJsZSkge1xuICAgIHNlbGYucGFyc2VyLmVuZCgpXG4gIH0gZWxzZSBpZiAoIXNlbGYuX2JveS5fZG9uZSkge1xuICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5fYm95Ll9kb25lID0gdHJ1ZVxuICAgICAgc2VsZi5fYm95LmVtaXQoJ2ZpbmlzaCcpXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBza2lwUGFydCAocGFydCkge1xuICBwYXJ0LnJlc3VtZSgpXG59XG5cbmZ1bmN0aW9uIEZpbGVTdHJlYW0gKG9wdHMpIHtcbiAgUmVhZGFibGUuY2FsbCh0aGlzLCBvcHRzKVxuXG4gIHRoaXMuYnl0ZXNSZWFkID0gMFxuXG4gIHRoaXMudHJ1bmNhdGVkID0gZmFsc2Vcbn1cblxuaW5oZXJpdHMoRmlsZVN0cmVhbSwgUmVhZGFibGUpXG5cbkZpbGVTdHJlYW0ucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKG4pIHt9XG5cbm1vZHVsZS5leHBvcnRzID0gTXVsdGlwYXJ0XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFJFX1BMVVMgPSAvXFwrL2dcblxuY29uc3QgSEVYID0gW1xuICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLFxuICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLFxuICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLFxuICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLFxuICAwLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLFxuICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLFxuICAwLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLFxuICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXG5dXG5cbmZ1bmN0aW9uIERlY29kZXIgKCkge1xuICB0aGlzLmJ1ZmZlciA9IHVuZGVmaW5lZFxufVxuRGVjb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoc3RyKSB7XG4gIC8vIFJlcGxhY2UgJysnIHdpdGggJyAnIGJlZm9yZSBkZWNvZGluZ1xuICBzdHIgPSBzdHIucmVwbGFjZShSRV9QTFVTLCAnICcpXG4gIGxldCByZXMgPSAnJ1xuICBsZXQgaSA9IDA7IGxldCBwID0gMDsgY29uc3QgbGVuID0gc3RyLmxlbmd0aFxuICBmb3IgKDsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKHRoaXMuYnVmZmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghSEVYW3N0ci5jaGFyQ29kZUF0KGkpXSkge1xuICAgICAgICByZXMgKz0gJyUnICsgdGhpcy5idWZmZXJcbiAgICAgICAgdGhpcy5idWZmZXIgPSB1bmRlZmluZWRcbiAgICAgICAgLS1pIC8vIHJldHJ5IGNoYXJhY3RlclxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5idWZmZXIgKz0gc3RyW2ldXG4gICAgICAgICsrcFxuICAgICAgICBpZiAodGhpcy5idWZmZXIubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQodGhpcy5idWZmZXIsIDE2KSlcbiAgICAgICAgICB0aGlzLmJ1ZmZlciA9IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdHJbaV0gPT09ICclJykge1xuICAgICAgaWYgKGkgPiBwKSB7XG4gICAgICAgIHJlcyArPSBzdHIuc3Vic3RyaW5nKHAsIGkpXG4gICAgICAgIHAgPSBpXG4gICAgICB9XG4gICAgICB0aGlzLmJ1ZmZlciA9ICcnXG4gICAgICArK3BcbiAgICB9XG4gIH1cbiAgaWYgKHAgPCBsZW4gJiYgdGhpcy5idWZmZXIgPT09IHVuZGVmaW5lZCkgeyByZXMgKz0gc3RyLnN1YnN0cmluZyhwKSB9XG4gIHJldHVybiByZXNcbn1cbkRlY29kZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmJ1ZmZlciA9IHVuZGVmaW5lZFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERlY29kZXJcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgRGVjb2RlciA9IHJlcXVpcmUoJy4uL3V0aWxzL0RlY29kZXInKVxuY29uc3QgZGVjb2RlVGV4dCA9IHJlcXVpcmUoJy4uL3V0aWxzL2RlY29kZVRleHQnKVxuY29uc3QgZ2V0TGltaXQgPSByZXF1aXJlKCcuLi91dGlscy9nZXRMaW1pdCcpXG5cbmNvbnN0IFJFX0NIQVJTRVQgPSAvXmNoYXJzZXQkL2lcblxuVXJsRW5jb2RlZC5kZXRlY3QgPSAvXmFwcGxpY2F0aW9uXFwveC13d3ctZm9ybS11cmxlbmNvZGVkL2lcbmZ1bmN0aW9uIFVybEVuY29kZWQgKGJveSwgY2ZnKSB7XG4gIGNvbnN0IGxpbWl0cyA9IGNmZy5saW1pdHNcbiAgY29uc3QgcGFyc2VkQ29uVHlwZSA9IGNmZy5wYXJzZWRDb25UeXBlXG4gIHRoaXMuYm95ID0gYm95XG5cbiAgdGhpcy5maWVsZFNpemVMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpZWxkU2l6ZScsIDEgKiAxMDI0ICogMTAyNClcbiAgdGhpcy5maWVsZE5hbWVTaXplTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdmaWVsZE5hbWVTaXplJywgMTAwKVxuICB0aGlzLmZpZWxkc0xpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnZmllbGRzJywgSW5maW5pdHkpXG5cbiAgbGV0IGNoYXJzZXRcbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHBhcnNlZENvblR5cGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby12YXJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJzZWRDb25UeXBlW2ldKSAmJlxuICAgICAgICBSRV9DSEFSU0VULnRlc3QocGFyc2VkQ29uVHlwZVtpXVswXSkpIHtcbiAgICAgIGNoYXJzZXQgPSBwYXJzZWRDb25UeXBlW2ldWzFdLnRvTG93ZXJDYXNlKClcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKGNoYXJzZXQgPT09IHVuZGVmaW5lZCkgeyBjaGFyc2V0ID0gY2ZnLmRlZkNoYXJzZXQgfHwgJ3V0ZjgnIH1cblxuICB0aGlzLmRlY29kZXIgPSBuZXcgRGVjb2RlcigpXG4gIHRoaXMuY2hhcnNldCA9IGNoYXJzZXRcbiAgdGhpcy5fZmllbGRzID0gMFxuICB0aGlzLl9zdGF0ZSA9ICdrZXknXG4gIHRoaXMuX2NoZWNraW5nQnl0ZXMgPSB0cnVlXG4gIHRoaXMuX2J5dGVzS2V5ID0gMFxuICB0aGlzLl9ieXRlc1ZhbCA9IDBcbiAgdGhpcy5fa2V5ID0gJydcbiAgdGhpcy5fdmFsID0gJydcbiAgdGhpcy5fa2V5VHJ1bmMgPSBmYWxzZVxuICB0aGlzLl92YWxUcnVuYyA9IGZhbHNlXG4gIHRoaXMuX2hpdExpbWl0ID0gZmFsc2Vcbn1cblxuVXJsRW5jb2RlZC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoZGF0YSwgY2IpIHtcbiAgaWYgKHRoaXMuX2ZpZWxkcyA9PT0gdGhpcy5maWVsZHNMaW1pdCkge1xuICAgIGlmICghdGhpcy5ib3kuaGl0RmllbGRzTGltaXQpIHtcbiAgICAgIHRoaXMuYm95LmhpdEZpZWxkc0xpbWl0ID0gdHJ1ZVxuICAgICAgdGhpcy5ib3kuZW1pdCgnZmllbGRzTGltaXQnKVxuICAgIH1cbiAgICByZXR1cm4gY2IoKVxuICB9XG5cbiAgbGV0IGlkeGVxOyBsZXQgaWR4YW1wOyBsZXQgaTsgbGV0IHAgPSAwOyBjb25zdCBsZW4gPSBkYXRhLmxlbmd0aFxuXG4gIHdoaWxlIChwIDwgbGVuKSB7XG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSAna2V5Jykge1xuICAgICAgaWR4ZXEgPSBpZHhhbXAgPSB1bmRlZmluZWRcbiAgICAgIGZvciAoaSA9IHA7IGkgPCBsZW47ICsraSkge1xuICAgICAgICBpZiAoIXRoaXMuX2NoZWNraW5nQnl0ZXMpIHsgKytwIH1cbiAgICAgICAgaWYgKGRhdGFbaV0gPT09IDB4M0QvKiA9ICovKSB7XG4gICAgICAgICAgaWR4ZXEgPSBpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhW2ldID09PSAweDI2LyogJiAqLykge1xuICAgICAgICAgIGlkeGFtcCA9IGlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9jaGVja2luZ0J5dGVzICYmIHRoaXMuX2J5dGVzS2V5ID09PSB0aGlzLmZpZWxkTmFtZVNpemVMaW1pdCkge1xuICAgICAgICAgIHRoaXMuX2hpdExpbWl0ID0gdHJ1ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY2hlY2tpbmdCeXRlcykgeyArK3RoaXMuX2J5dGVzS2V5IH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlkeGVxICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8ga2V5IHdpdGggYXNzaWdubWVudFxuICAgICAgICBpZiAoaWR4ZXEgPiBwKSB7IHRoaXMuX2tleSArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCwgaWR4ZXEpKSB9XG4gICAgICAgIHRoaXMuX3N0YXRlID0gJ3ZhbCdcblxuICAgICAgICB0aGlzLl9oaXRMaW1pdCA9IGZhbHNlXG4gICAgICAgIHRoaXMuX2NoZWNraW5nQnl0ZXMgPSB0cnVlXG4gICAgICAgIHRoaXMuX3ZhbCA9ICcnXG4gICAgICAgIHRoaXMuX2J5dGVzVmFsID0gMFxuICAgICAgICB0aGlzLl92YWxUcnVuYyA9IGZhbHNlXG4gICAgICAgIHRoaXMuZGVjb2Rlci5yZXNldCgpXG5cbiAgICAgICAgcCA9IGlkeGVxICsgMVxuICAgICAgfSBlbHNlIGlmIChpZHhhbXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBrZXkgd2l0aCBubyBhc3NpZ25tZW50XG4gICAgICAgICsrdGhpcy5fZmllbGRzXG4gICAgICAgIGxldCBrZXk7IGNvbnN0IGtleVRydW5jID0gdGhpcy5fa2V5VHJ1bmNcbiAgICAgICAgaWYgKGlkeGFtcCA+IHApIHsga2V5ID0gKHRoaXMuX2tleSArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCwgaWR4YW1wKSkpIH0gZWxzZSB7IGtleSA9IHRoaXMuX2tleSB9XG5cbiAgICAgICAgdGhpcy5faGl0TGltaXQgPSBmYWxzZVxuICAgICAgICB0aGlzLl9jaGVja2luZ0J5dGVzID0gdHJ1ZVxuICAgICAgICB0aGlzLl9rZXkgPSAnJ1xuICAgICAgICB0aGlzLl9ieXRlc0tleSA9IDBcbiAgICAgICAgdGhpcy5fa2V5VHJ1bmMgPSBmYWxzZVxuICAgICAgICB0aGlzLmRlY29kZXIucmVzZXQoKVxuXG4gICAgICAgIGlmIChrZXkubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KGtleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICAgICAgICAnJyxcbiAgICAgICAgICAgIGtleVRydW5jLFxuICAgICAgICAgICAgZmFsc2UpXG4gICAgICAgIH1cblxuICAgICAgICBwID0gaWR4YW1wICsgMVxuICAgICAgICBpZiAodGhpcy5fZmllbGRzID09PSB0aGlzLmZpZWxkc0xpbWl0KSB7IHJldHVybiBjYigpIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5faGl0TGltaXQpIHtcbiAgICAgICAgLy8gd2UgbWF5IG5vdCBoYXZlIGhpdCB0aGUgYWN0dWFsIGxpbWl0IGlmIHRoZXJlIGFyZSBlbmNvZGVkIGJ5dGVzLi4uXG4gICAgICAgIGlmIChpID4gcCkgeyB0aGlzLl9rZXkgKz0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHAsIGkpKSB9XG4gICAgICAgIHAgPSBpXG4gICAgICAgIGlmICgodGhpcy5fYnl0ZXNLZXkgPSB0aGlzLl9rZXkubGVuZ3RoKSA9PT0gdGhpcy5maWVsZE5hbWVTaXplTGltaXQpIHtcbiAgICAgICAgICAvLyB5ZXAsIHdlIGFjdHVhbGx5IGRpZCBoaXQgdGhlIGxpbWl0XG4gICAgICAgICAgdGhpcy5fY2hlY2tpbmdCeXRlcyA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5fa2V5VHJ1bmMgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwIDwgbGVuKSB7IHRoaXMuX2tleSArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCkpIH1cbiAgICAgICAgcCA9IGxlblxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZHhhbXAgPSB1bmRlZmluZWRcbiAgICAgIGZvciAoaSA9IHA7IGkgPCBsZW47ICsraSkge1xuICAgICAgICBpZiAoIXRoaXMuX2NoZWNraW5nQnl0ZXMpIHsgKytwIH1cbiAgICAgICAgaWYgKGRhdGFbaV0gPT09IDB4MjYvKiAmICovKSB7XG4gICAgICAgICAgaWR4YW1wID0gaVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2NoZWNraW5nQnl0ZXMgJiYgdGhpcy5fYnl0ZXNWYWwgPT09IHRoaXMuZmllbGRTaXplTGltaXQpIHtcbiAgICAgICAgICB0aGlzLl9oaXRMaW1pdCA9IHRydWVcbiAgICAgICAgICBicmVha1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2NoZWNraW5nQnl0ZXMpIHsgKyt0aGlzLl9ieXRlc1ZhbCB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpZHhhbXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICArK3RoaXMuX2ZpZWxkc1xuICAgICAgICBpZiAoaWR4YW1wID4gcCkgeyB0aGlzLl92YWwgKz0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHAsIGlkeGFtcCkpIH1cbiAgICAgICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KHRoaXMuX2tleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICAgICAgZGVjb2RlVGV4dCh0aGlzLl92YWwsICdiaW5hcnknLCB0aGlzLmNoYXJzZXQpLFxuICAgICAgICAgIHRoaXMuX2tleVRydW5jLFxuICAgICAgICAgIHRoaXMuX3ZhbFRydW5jKVxuICAgICAgICB0aGlzLl9zdGF0ZSA9ICdrZXknXG5cbiAgICAgICAgdGhpcy5faGl0TGltaXQgPSBmYWxzZVxuICAgICAgICB0aGlzLl9jaGVja2luZ0J5dGVzID0gdHJ1ZVxuICAgICAgICB0aGlzLl9rZXkgPSAnJ1xuICAgICAgICB0aGlzLl9ieXRlc0tleSA9IDBcbiAgICAgICAgdGhpcy5fa2V5VHJ1bmMgPSBmYWxzZVxuICAgICAgICB0aGlzLmRlY29kZXIucmVzZXQoKVxuXG4gICAgICAgIHAgPSBpZHhhbXAgKyAxXG4gICAgICAgIGlmICh0aGlzLl9maWVsZHMgPT09IHRoaXMuZmllbGRzTGltaXQpIHsgcmV0dXJuIGNiKCkgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9oaXRMaW1pdCkge1xuICAgICAgICAvLyB3ZSBtYXkgbm90IGhhdmUgaGl0IHRoZSBhY3R1YWwgbGltaXQgaWYgdGhlcmUgYXJlIGVuY29kZWQgYnl0ZXMuLi5cbiAgICAgICAgaWYgKGkgPiBwKSB7IHRoaXMuX3ZhbCArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCwgaSkpIH1cbiAgICAgICAgcCA9IGlcbiAgICAgICAgaWYgKCh0aGlzLl92YWwgPT09ICcnICYmIHRoaXMuZmllbGRTaXplTGltaXQgPT09IDApIHx8XG4gICAgICAgICAgICAodGhpcy5fYnl0ZXNWYWwgPSB0aGlzLl92YWwubGVuZ3RoKSA9PT0gdGhpcy5maWVsZFNpemVMaW1pdCkge1xuICAgICAgICAgIC8vIHllcCwgd2UgYWN0dWFsbHkgZGlkIGhpdCB0aGUgbGltaXRcbiAgICAgICAgICB0aGlzLl9jaGVja2luZ0J5dGVzID0gZmFsc2VcbiAgICAgICAgICB0aGlzLl92YWxUcnVuYyA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHAgPCBsZW4pIHsgdGhpcy5fdmFsICs9IHRoaXMuZGVjb2Rlci53cml0ZShkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCBwKSkgfVxuICAgICAgICBwID0gbGVuXG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNiKClcbn1cblxuVXJsRW5jb2RlZC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5ib3kuX2RvbmUpIHsgcmV0dXJuIH1cblxuICBpZiAodGhpcy5fc3RhdGUgPT09ICdrZXknICYmIHRoaXMuX2tleS5sZW5ndGggPiAwKSB7XG4gICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KHRoaXMuX2tleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICAnJyxcbiAgICAgIHRoaXMuX2tleVRydW5jLFxuICAgICAgZmFsc2UpXG4gIH0gZWxzZSBpZiAodGhpcy5fc3RhdGUgPT09ICd2YWwnKSB7XG4gICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KHRoaXMuX2tleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICBkZWNvZGVUZXh0KHRoaXMuX3ZhbCwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICB0aGlzLl9rZXlUcnVuYyxcbiAgICAgIHRoaXMuX3ZhbFRydW5jKVxuICB9XG4gIHRoaXMuYm95Ll9kb25lID0gdHJ1ZVxuICB0aGlzLmJveS5lbWl0KCdmaW5pc2gnKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFVybEVuY29kZWRcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgV3JpdGFibGVTdHJlYW0gPSByZXF1aXJlKCdub2RlOnN0cmVhbScpLldyaXRhYmxlXG5jb25zdCB7IGluaGVyaXRzIH0gPSByZXF1aXJlKCdub2RlOnV0aWwnKVxuY29uc3QgRGljZXIgPSByZXF1aXJlKCcuLi9kZXBzL2RpY2VyL2xpYi9EaWNlcicpXG5cbmNvbnN0IE11bHRpcGFydFBhcnNlciA9IHJlcXVpcmUoJy4vdHlwZXMvbXVsdGlwYXJ0JylcbmNvbnN0IFVybGVuY29kZWRQYXJzZXIgPSByZXF1aXJlKCcuL3R5cGVzL3VybGVuY29kZWQnKVxuY29uc3QgcGFyc2VQYXJhbXMgPSByZXF1aXJlKCcuL3V0aWxzL3BhcnNlUGFyYW1zJylcblxuZnVuY3Rpb24gQnVzYm95IChvcHRzKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBCdXNib3kpKSB7IHJldHVybiBuZXcgQnVzYm95KG9wdHMpIH1cblxuICBpZiAodHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQnVzYm95IGV4cGVjdGVkIGFuIG9wdGlvbnMtT2JqZWN0LicpXG4gIH1cbiAgaWYgKHR5cGVvZiBvcHRzLmhlYWRlcnMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQnVzYm95IGV4cGVjdGVkIGFuIG9wdGlvbnMtT2JqZWN0IHdpdGggaGVhZGVycy1hdHRyaWJ1dGUuJylcbiAgfVxuICBpZiAodHlwZW9mIG9wdHMuaGVhZGVyc1snY29udGVudC10eXBlJ10gIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTWlzc2luZyBDb250ZW50LVR5cGUtaGVhZGVyLicpXG4gIH1cblxuICBjb25zdCB7XG4gICAgaGVhZGVycyxcbiAgICAuLi5zdHJlYW1PcHRpb25zXG4gIH0gPSBvcHRzXG5cbiAgdGhpcy5vcHRzID0ge1xuICAgIGF1dG9EZXN0cm95OiBmYWxzZSxcbiAgICAuLi5zdHJlYW1PcHRpb25zXG4gIH1cbiAgV3JpdGFibGVTdHJlYW0uY2FsbCh0aGlzLCB0aGlzLm9wdHMpXG5cbiAgdGhpcy5fZG9uZSA9IGZhbHNlXG4gIHRoaXMuX3BhcnNlciA9IHRoaXMuZ2V0UGFyc2VyQnlIZWFkZXJzKGhlYWRlcnMpXG4gIHRoaXMuX2ZpbmlzaGVkID0gZmFsc2Vcbn1cbmluaGVyaXRzKEJ1c2JveSwgV3JpdGFibGVTdHJlYW0pXG5cbkJ1c2JveS5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIChldikge1xuICBpZiAoZXYgPT09ICdmaW5pc2gnKSB7XG4gICAgaWYgKCF0aGlzLl9kb25lKSB7XG4gICAgICB0aGlzLl9wYXJzZXI/LmVuZCgpXG4gICAgICByZXR1cm5cbiAgICB9IGVsc2UgaWYgKHRoaXMuX2ZpbmlzaGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5fZmluaXNoZWQgPSB0cnVlXG4gIH1cbiAgV3JpdGFibGVTdHJlYW0ucHJvdG90eXBlLmVtaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKVxufVxuXG5CdXNib3kucHJvdG90eXBlLmdldFBhcnNlckJ5SGVhZGVycyA9IGZ1bmN0aW9uIChoZWFkZXJzKSB7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlUGFyYW1zKGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddKVxuXG4gIGNvbnN0IGNmZyA9IHtcbiAgICBkZWZDaGFyc2V0OiB0aGlzLm9wdHMuZGVmQ2hhcnNldCxcbiAgICBmaWxlSHdtOiB0aGlzLm9wdHMuZmlsZUh3bSxcbiAgICBoZWFkZXJzLFxuICAgIGhpZ2hXYXRlck1hcms6IHRoaXMub3B0cy5oaWdoV2F0ZXJNYXJrLFxuICAgIGlzUGFydEFGaWxlOiB0aGlzLm9wdHMuaXNQYXJ0QUZpbGUsXG4gICAgbGltaXRzOiB0aGlzLm9wdHMubGltaXRzLFxuICAgIHBhcnNlZENvblR5cGU6IHBhcnNlZCxcbiAgICBwcmVzZXJ2ZVBhdGg6IHRoaXMub3B0cy5wcmVzZXJ2ZVBhdGhcbiAgfVxuXG4gIGlmIChNdWx0aXBhcnRQYXJzZXIuZGV0ZWN0LnRlc3QocGFyc2VkWzBdKSkge1xuICAgIHJldHVybiBuZXcgTXVsdGlwYXJ0UGFyc2VyKHRoaXMsIGNmZylcbiAgfVxuICBpZiAoVXJsZW5jb2RlZFBhcnNlci5kZXRlY3QudGVzdChwYXJzZWRbMF0pKSB7XG4gICAgcmV0dXJuIG5ldyBVcmxlbmNvZGVkUGFyc2VyKHRoaXMsIGNmZylcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIENvbnRlbnQtVHlwZS4nKVxufVxuXG5CdXNib3kucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHRoaXMuX3BhcnNlci53cml0ZShjaHVuaywgY2IpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gQnVzYm95XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gQnVzYm95XG5tb2R1bGUuZXhwb3J0cy5CdXNib3kgPSBCdXNib3lcblxubW9kdWxlLmV4cG9ydHMuRGljZXIgPSBEaWNlclxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IE1lc3NhZ2VDaGFubmVsLCByZWNlaXZlTWVzc2FnZU9uUG9ydCB9ID0gcmVxdWlyZSgnd29ya2VyX3RocmVhZHMnKVxuXG5jb25zdCBjb3JzU2FmZUxpc3RlZE1ldGhvZHMgPSBbJ0dFVCcsICdIRUFEJywgJ1BPU1QnXVxuY29uc3QgY29yc1NhZmVMaXN0ZWRNZXRob2RzU2V0ID0gbmV3IFNldChjb3JzU2FmZUxpc3RlZE1ldGhvZHMpXG5cbmNvbnN0IG51bGxCb2R5U3RhdHVzID0gWzEwMSwgMjA0LCAyMDUsIDMwNF1cblxuY29uc3QgcmVkaXJlY3RTdGF0dXMgPSBbMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdXG5jb25zdCByZWRpcmVjdFN0YXR1c1NldCA9IG5ldyBTZXQocmVkaXJlY3RTdGF0dXMpXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNibG9jay1iYWQtcG9ydFxuY29uc3QgYmFkUG9ydHMgPSBbXG4gICcxJywgJzcnLCAnOScsICcxMScsICcxMycsICcxNScsICcxNycsICcxOScsICcyMCcsICcyMScsICcyMicsICcyMycsICcyNScsICczNycsICc0MicsICc0MycsICc1MycsICc2OScsICc3NycsICc3OScsXG4gICc4NycsICc5NScsICcxMDEnLCAnMTAyJywgJzEwMycsICcxMDQnLCAnMTA5JywgJzExMCcsICcxMTEnLCAnMTEzJywgJzExNScsICcxMTcnLCAnMTE5JywgJzEyMycsICcxMzUnLCAnMTM3JyxcbiAgJzEzOScsICcxNDMnLCAnMTYxJywgJzE3OScsICczODknLCAnNDI3JywgJzQ2NScsICc1MTInLCAnNTEzJywgJzUxNCcsICc1MTUnLCAnNTI2JywgJzUzMCcsICc1MzEnLCAnNTMyJyxcbiAgJzU0MCcsICc1NDgnLCAnNTU0JywgJzU1NicsICc1NjMnLCAnNTg3JywgJzYwMScsICc2MzYnLCAnOTg5JywgJzk5MCcsICc5OTMnLCAnOTk1JywgJzE3MTknLCAnMTcyMCcsICcxNzIzJyxcbiAgJzIwNDknLCAnMzY1OScsICc0MDQ1JywgJzUwNjAnLCAnNTA2MScsICc2MDAwJywgJzY1NjYnLCAnNjY2NScsICc2NjY2JywgJzY2NjcnLCAnNjY2OCcsICc2NjY5JywgJzY2OTcnLFxuICAnMTAwODAnXG5dXG5cbmNvbnN0IGJhZFBvcnRzU2V0ID0gbmV3IFNldChiYWRQb3J0cylcblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1yZWZlcnJlci1wb2xpY3kvI3JlZmVycmVyLXBvbGljaWVzXG5jb25zdCByZWZlcnJlclBvbGljeSA9IFtcbiAgJycsXG4gICduby1yZWZlcnJlcicsXG4gICduby1yZWZlcnJlci13aGVuLWRvd25ncmFkZScsXG4gICdzYW1lLW9yaWdpbicsXG4gICdvcmlnaW4nLFxuICAnc3RyaWN0LW9yaWdpbicsXG4gICdvcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nLFxuICAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbicsXG4gICd1bnNhZmUtdXJsJ1xuXVxuY29uc3QgcmVmZXJyZXJQb2xpY3lTZXQgPSBuZXcgU2V0KHJlZmVycmVyUG9saWN5KVxuXG5jb25zdCByZXF1ZXN0UmVkaXJlY3QgPSBbJ2ZvbGxvdycsICdtYW51YWwnLCAnZXJyb3InXVxuXG5jb25zdCBzYWZlTWV0aG9kcyA9IFsnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdUUkFDRSddXG5jb25zdCBzYWZlTWV0aG9kc1NldCA9IG5ldyBTZXQoc2FmZU1ldGhvZHMpXG5cbmNvbnN0IHJlcXVlc3RNb2RlID0gWyduYXZpZ2F0ZScsICdzYW1lLW9yaWdpbicsICduby1jb3JzJywgJ2NvcnMnXVxuXG5jb25zdCByZXF1ZXN0Q3JlZGVudGlhbHMgPSBbJ29taXQnLCAnc2FtZS1vcmlnaW4nLCAnaW5jbHVkZSddXG5cbmNvbnN0IHJlcXVlc3RDYWNoZSA9IFtcbiAgJ2RlZmF1bHQnLFxuICAnbm8tc3RvcmUnLFxuICAncmVsb2FkJyxcbiAgJ25vLWNhY2hlJyxcbiAgJ2ZvcmNlLWNhY2hlJyxcbiAgJ29ubHktaWYtY2FjaGVkJ1xuXVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdC1ib2R5LWhlYWRlci1uYW1lXG5jb25zdCByZXF1ZXN0Qm9keUhlYWRlciA9IFtcbiAgJ2NvbnRlbnQtZW5jb2RpbmcnLFxuICAnY29udGVudC1sYW5ndWFnZScsXG4gICdjb250ZW50LWxvY2F0aW9uJyxcbiAgJ2NvbnRlbnQtdHlwZScsXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjAyMVxuICAvLyAnQ29udGVudC1MZW5ndGgnIGlzIGEgZm9yYmlkZGVuIGhlYWRlciBuYW1lLCB3aGljaCBpcyB0eXBpY2FsbHlcbiAgLy8gcmVtb3ZlZCBpbiB0aGUgSGVhZGVycyBpbXBsZW1lbnRhdGlvbi4gSG93ZXZlciwgdW5kaWNpIGRvZXNuJ3RcbiAgLy8gZmlsdGVyIG91dCBoZWFkZXJzLCBzbyB3ZSBhZGQgaXQgaGVyZS5cbiAgJ2NvbnRlbnQtbGVuZ3RoJ1xuXVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZW51bWRlZi1yZXF1ZXN0ZHVwbGV4XG5jb25zdCByZXF1ZXN0RHVwbGV4ID0gW1xuICAnaGFsZidcbl1cblxuLy8gaHR0cDovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZm9yYmlkZGVuLW1ldGhvZFxuY29uc3QgZm9yYmlkZGVuTWV0aG9kcyA9IFsnQ09OTkVDVCcsICdUUkFDRScsICdUUkFDSyddXG5jb25zdCBmb3JiaWRkZW5NZXRob2RzU2V0ID0gbmV3IFNldChmb3JiaWRkZW5NZXRob2RzKVxuXG5jb25zdCBzdWJyZXNvdXJjZSA9IFtcbiAgJ2F1ZGlvJyxcbiAgJ2F1ZGlvd29ya2xldCcsXG4gICdmb250JyxcbiAgJ2ltYWdlJyxcbiAgJ21hbmlmZXN0JyxcbiAgJ3BhaW50d29ya2xldCcsXG4gICdzY3JpcHQnLFxuICAnc3R5bGUnLFxuICAndHJhY2snLFxuICAndmlkZW8nLFxuICAneHNsdCcsXG4gICcnXG5dXG5jb25zdCBzdWJyZXNvdXJjZVNldCA9IG5ldyBTZXQoc3VicmVzb3VyY2UpXG5cbi8qKiBAdHlwZSB7Z2xvYmFsVGhpc1snRE9NRXhjZXB0aW9uJ119ICovXG5jb25zdCBET01FeGNlcHRpb24gPSBnbG9iYWxUaGlzLkRPTUV4Y2VwdGlvbiA/PyAoKCkgPT4ge1xuICAvLyBET01FeGNlcHRpb24gd2FzIG9ubHkgbWFkZSBhIGdsb2JhbCBpbiBOb2RlIHYxNy4wLjAsXG4gIC8vIGJ1dCBmZXRjaCBzdXBwb3J0cyA+PSB2MTYuOC5cbiAgdHJ5IHtcbiAgICBhdG9iKCd+JylcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihlcnIpLmNvbnN0cnVjdG9yXG4gIH1cbn0pKClcblxubGV0IGNoYW5uZWxcblxuLyoqIEB0eXBlIHtnbG9iYWxUaGlzWydzdHJ1Y3R1cmVkQ2xvbmUnXX0gKi9cbmNvbnN0IHN0cnVjdHVyZWRDbG9uZSA9XG4gIGdsb2JhbFRoaXMuc3RydWN0dXJlZENsb25lID8/XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL2IyN2FlMjRkY2M0MjUxYmFkNzI2ZDlkODRiYWY2NzhkMWY3MDdmZWQvbGliL2ludGVybmFsL3N0cnVjdHVyZWRfY2xvbmUuanNcbiAgLy8gc3RydWN0dXJlZENsb25lIHdhcyBhZGRlZCBpbiB2MTcuMC4wLCBidXQgZmV0Y2ggc3VwcG9ydHMgdjE2LjhcbiAgZnVuY3Rpb24gc3RydWN0dXJlZENsb25lICh2YWx1ZSwgb3B0aW9ucyA9IHVuZGVmaW5lZCkge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtaXNzaW5nIGFyZ3VtZW50JylcbiAgICB9XG5cbiAgICBpZiAoIWNoYW5uZWwpIHtcbiAgICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKVxuICAgIH1cbiAgICBjaGFubmVsLnBvcnQxLnVucmVmKClcbiAgICBjaGFubmVsLnBvcnQyLnVucmVmKClcbiAgICBjaGFubmVsLnBvcnQxLnBvc3RNZXNzYWdlKHZhbHVlLCBvcHRpb25zPy50cmFuc2ZlcilcbiAgICByZXR1cm4gcmVjZWl2ZU1lc3NhZ2VPblBvcnQoY2hhbm5lbC5wb3J0MikubWVzc2FnZVxuICB9XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBET01FeGNlcHRpb24sXG4gIHN0cnVjdHVyZWRDbG9uZSxcbiAgc3VicmVzb3VyY2UsXG4gIGZvcmJpZGRlbk1ldGhvZHMsXG4gIHJlcXVlc3RCb2R5SGVhZGVyLFxuICByZWZlcnJlclBvbGljeSxcbiAgcmVxdWVzdFJlZGlyZWN0LFxuICByZXF1ZXN0TW9kZSxcbiAgcmVxdWVzdENyZWRlbnRpYWxzLFxuICByZXF1ZXN0Q2FjaGUsXG4gIHJlZGlyZWN0U3RhdHVzLFxuICBjb3JzU2FmZUxpc3RlZE1ldGhvZHMsXG4gIG51bGxCb2R5U3RhdHVzLFxuICBzYWZlTWV0aG9kcyxcbiAgYmFkUG9ydHMsXG4gIHJlcXVlc3REdXBsZXgsXG4gIHN1YnJlc291cmNlU2V0LFxuICBiYWRQb3J0c1NldCxcbiAgcmVkaXJlY3RTdGF0dXNTZXQsXG4gIGNvcnNTYWZlTGlzdGVkTWV0aG9kc1NldCxcbiAgc2FmZU1ldGhvZHNTZXQsXG4gIGZvcmJpZGRlbk1ldGhvZHNTZXQsXG4gIHJlZmVycmVyUG9saWN5U2V0XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8vIEluIGNhc2Ugb2YgYnJlYWtpbmcgY2hhbmdlcywgaW5jcmVhc2UgdGhlIHZlcnNpb25cbi8vIG51bWJlciB0byBhdm9pZCBjb25mbGljdHMuXG5jb25zdCBnbG9iYWxPcmlnaW4gPSBTeW1ib2wuZm9yKCd1bmRpY2kuZ2xvYmFsT3JpZ2luLjEnKVxuXG5mdW5jdGlvbiBnZXRHbG9iYWxPcmlnaW4gKCkge1xuICByZXR1cm4gZ2xvYmFsVGhpc1tnbG9iYWxPcmlnaW5dXG59XG5cbmZ1bmN0aW9uIHNldEdsb2JhbE9yaWdpbiAobmV3T3JpZ2luKSB7XG4gIGlmIChuZXdPcmlnaW4gPT09IHVuZGVmaW5lZCkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBnbG9iYWxPcmlnaW4sIHtcbiAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICAgIH0pXG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHBhcnNlZFVSTCA9IG5ldyBVUkwobmV3T3JpZ2luKVxuXG4gIGlmIChwYXJzZWRVUkwucHJvdG9jb2wgIT09ICdodHRwOicgJiYgcGFyc2VkVVJMLnByb3RvY29sICE9PSAnaHR0cHM6Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE9ubHkgaHR0cCAmIGh0dHBzIHVybHMgYXJlIGFsbG93ZWQsIHJlY2VpdmVkICR7cGFyc2VkVVJMLnByb3RvY29sfWApXG4gIH1cblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywgZ2xvYmFsT3JpZ2luLCB7XG4gICAgdmFsdWU6IHBhcnNlZFVSTCxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlXG4gIH0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRHbG9iYWxPcmlnaW4sXG4gIHNldEdsb2JhbE9yaWdpblxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHJlZGlyZWN0U3RhdHVzU2V0LCByZWZlcnJlclBvbGljeVNldDogcmVmZXJyZXJQb2xpY3lUb2tlbnMsIGJhZFBvcnRzU2V0IH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGdldEdsb2JhbE9yaWdpbiB9ID0gcmVxdWlyZSgnLi9nbG9iYWwnKVxuY29uc3QgeyBwZXJmb3JtYW5jZSB9ID0gcmVxdWlyZSgncGVyZl9ob29rcycpXG5jb25zdCB7IGlzQmxvYkxpa2UsIHRvVVNWU3RyaW5nLCBSZWFkYWJsZVN0cmVhbUZyb20gfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBpc1VpbnQ4QXJyYXkgfSA9IHJlcXVpcmUoJ3V0aWwvdHlwZXMnKVxuXG5sZXQgc3VwcG9ydGVkSGFzaGVzID0gW11cblxuLy8gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9jcnlwdG8uaHRtbCNkZXRlcm1pbmluZy1pZi1jcnlwdG8tc3VwcG9ydC1pcy11bmF2YWlsYWJsZVxuLyoqIEB0eXBlIHtpbXBvcnQoJ2NyeXB0bycpfHVuZGVmaW5lZH0gKi9cbmxldCBjcnlwdG9cblxudHJ5IHtcbiAgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJylcbiAgY29uc3QgcG9zc2libGVSZWxldmFudEhhc2hlcyA9IFsnc2hhMjU2JywgJ3NoYTM4NCcsICdzaGE1MTInXVxuICBzdXBwb3J0ZWRIYXNoZXMgPSBjcnlwdG8uZ2V0SGFzaGVzKCkuZmlsdGVyKChoYXNoKSA9PiBwb3NzaWJsZVJlbGV2YW50SGFzaGVzLmluY2x1ZGVzKGhhc2gpKVxuLyogYzggaWdub3JlIG5leHQgMyAqL1xufSBjYXRjaCB7XG59XG5cbmZ1bmN0aW9uIHJlc3BvbnNlVVJMIChyZXNwb25zZSkge1xuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVzcG9uc2VzXG4gIC8vIEEgcmVzcG9uc2UgaGFzIGFuIGFzc29jaWF0ZWQgVVJMLiBJdCBpcyBhIHBvaW50ZXIgdG8gdGhlIGxhc3QgVVJMXG4gIC8vIGluIHJlc3BvbnNlXHUyMDE5cyBVUkwgbGlzdCBhbmQgbnVsbCBpZiByZXNwb25zZVx1MjAxOXMgVVJMIGxpc3QgaXMgZW1wdHkuXG4gIGNvbnN0IHVybExpc3QgPSByZXNwb25zZS51cmxMaXN0XG4gIGNvbnN0IGxlbmd0aCA9IHVybExpc3QubGVuZ3RoXG4gIHJldHVybiBsZW5ndGggPT09IDAgPyBudWxsIDogdXJsTGlzdFtsZW5ndGggLSAxXS50b1N0cmluZygpXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXJlc3BvbnNlLWxvY2F0aW9uLXVybFxuZnVuY3Rpb24gcmVzcG9uc2VMb2NhdGlvblVSTCAocmVzcG9uc2UsIHJlcXVlc3RGcmFnbWVudCkge1xuICAvLyAxLiBJZiByZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIG5vdCBhIHJlZGlyZWN0IHN0YXR1cywgdGhlbiByZXR1cm4gbnVsbC5cbiAgaWYgKCFyZWRpcmVjdFN0YXR1c1NldC5oYXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyAyLiBMZXQgbG9jYXRpb24gYmUgdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nIGhlYWRlciBsaXN0IHZhbHVlcyBnaXZlblxuICAvLyBgTG9jYXRpb25gIGFuZCByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGxldCBsb2NhdGlvbiA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnbG9jYXRpb24nKVxuXG4gIC8vIDMuIElmIGxvY2F0aW9uIGlzIGEgaGVhZGVyIHZhbHVlLCB0aGVuIHNldCBsb2NhdGlvbiB0byB0aGUgcmVzdWx0IG9mXG4gIC8vICAgIHBhcnNpbmcgbG9jYXRpb24gd2l0aCByZXNwb25zZVx1MjAxOXMgVVJMLlxuICBpZiAobG9jYXRpb24gIT09IG51bGwgJiYgaXNWYWxpZEhlYWRlclZhbHVlKGxvY2F0aW9uKSkge1xuICAgIGxvY2F0aW9uID0gbmV3IFVSTChsb2NhdGlvbiwgcmVzcG9uc2VVUkwocmVzcG9uc2UpKVxuICB9XG5cbiAgLy8gNC4gSWYgbG9jYXRpb24gaXMgYSBVUkwgd2hvc2UgZnJhZ21lbnQgaXMgbnVsbCwgdGhlbiBzZXQgbG9jYXRpb25cdTIwMTlzXG4gIC8vIGZyYWdtZW50IHRvIHJlcXVlc3RGcmFnbWVudC5cbiAgaWYgKGxvY2F0aW9uICYmICFsb2NhdGlvbi5oYXNoKSB7XG4gICAgbG9jYXRpb24uaGFzaCA9IHJlcXVlc3RGcmFnbWVudFxuICB9XG5cbiAgLy8gNS4gUmV0dXJuIGxvY2F0aW9uLlxuICByZXR1cm4gbG9jYXRpb25cbn1cblxuLyoqIEByZXR1cm5zIHtVUkx9ICovXG5mdW5jdGlvbiByZXF1ZXN0Q3VycmVudFVSTCAocmVxdWVzdCkge1xuICByZXR1cm4gcmVxdWVzdC51cmxMaXN0W3JlcXVlc3QudXJsTGlzdC5sZW5ndGggLSAxXVxufVxuXG5mdW5jdGlvbiByZXF1ZXN0QmFkUG9ydCAocmVxdWVzdCkge1xuICAvLyAxLiBMZXQgdXJsIGJlIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMLlxuICBjb25zdCB1cmwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gIC8vIDIuIElmIHVybFx1MjAxOXMgc2NoZW1lIGlzIGFuIEhUVFAoUykgc2NoZW1lIGFuZCB1cmxcdTIwMTlzIHBvcnQgaXMgYSBiYWQgcG9ydCxcbiAgLy8gdGhlbiByZXR1cm4gYmxvY2tlZC5cbiAgaWYgKHVybElzSHR0cEh0dHBzU2NoZW1lKHVybCkgJiYgYmFkUG9ydHNTZXQuaGFzKHVybC5wb3J0KSkge1xuICAgIHJldHVybiAnYmxvY2tlZCdcbiAgfVxuXG4gIC8vIDMuIFJldHVybiBhbGxvd2VkLlxuICByZXR1cm4gJ2FsbG93ZWQnXG59XG5cbmZ1bmN0aW9uIGlzRXJyb3JMaWtlIChvYmplY3QpIHtcbiAgcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIEVycm9yIHx8IChcbiAgICBvYmplY3Q/LmNvbnN0cnVjdG9yPy5uYW1lID09PSAnRXJyb3InIHx8XG4gICAgb2JqZWN0Py5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gJ0RPTUV4Y2VwdGlvbidcbiAgKVxufVxuXG4vLyBDaGVjayB3aGV0aGVyIHxzdGF0dXNUZXh0fCBpcyBhIEJ5dGVTdHJpbmcgYW5kXG4vLyBtYXRjaGVzIHRoZSBSZWFzb24tUGhyYXNlIHRva2VuIHByb2R1Y3Rpb24uXG4vLyBSRkMgMjYxNjogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzI2MTZcbi8vIFJGQyA3MjMwOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMFxuLy8gXCJyZWFzb24tcGhyYXNlID0gKiggSFRBQiAvIFNQIC8gVkNIQVIgLyBvYnMtdGV4dCApXCJcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJvbWl1bS9jaHJvbWl1bS9ibG9iLzk0LjAuNDYwNC4xL3RoaXJkX3BhcnR5L2JsaW5rL3JlbmRlcmVyL2NvcmUvZmV0Y2gvcmVzcG9uc2UuY2MjTDExNlxuZnVuY3Rpb24gaXNWYWxpZFJlYXNvblBocmFzZSAoc3RhdHVzVGV4dCkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0YXR1c1RleHQubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBjID0gc3RhdHVzVGV4dC5jaGFyQ29kZUF0KGkpXG4gICAgaWYgKFxuICAgICAgIShcbiAgICAgICAgKFxuICAgICAgICAgIGMgPT09IDB4MDkgfHwgLy8gSFRBQlxuICAgICAgICAgIChjID49IDB4MjAgJiYgYyA8PSAweDdlKSB8fCAvLyBTUCAvIFZDSEFSXG4gICAgICAgICAgKGMgPj0gMHg4MCAmJiBjIDw9IDB4ZmYpXG4gICAgICAgICkgLy8gb2JzLXRleHRcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjIuNlxuICogQHBhcmFtIHtudW1iZXJ9IGNcbiAqL1xuZnVuY3Rpb24gaXNUb2tlbkNoYXJDb2RlIChjKSB7XG4gIHN3aXRjaCAoYykge1xuICAgIGNhc2UgMHgyMjpcbiAgICBjYXNlIDB4Mjg6XG4gICAgY2FzZSAweDI5OlxuICAgIGNhc2UgMHgyYzpcbiAgICBjYXNlIDB4MmY6XG4gICAgY2FzZSAweDNhOlxuICAgIGNhc2UgMHgzYjpcbiAgICBjYXNlIDB4M2M6XG4gICAgY2FzZSAweDNkOlxuICAgIGNhc2UgMHgzZTpcbiAgICBjYXNlIDB4M2Y6XG4gICAgY2FzZSAweDQwOlxuICAgIGNhc2UgMHg1YjpcbiAgICBjYXNlIDB4NWM6XG4gICAgY2FzZSAweDVkOlxuICAgIGNhc2UgMHg3YjpcbiAgICBjYXNlIDB4N2Q6XG4gICAgICAvLyBEUVVPVEUgYW5kIFwiKCksLzo7PD0+P0BbXFxde31cIlxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIFZDSEFSICV4MjEtN0VcbiAgICAgIHJldHVybiBjID49IDB4MjEgJiYgYyA8PSAweDdlXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhcmFjdGVyc1xuICovXG5mdW5jdGlvbiBpc1ZhbGlkSFRUUFRva2VuIChjaGFyYWN0ZXJzKSB7XG4gIGlmIChjaGFyYWN0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY2hhcmFjdGVycy5sZW5ndGg7ICsraSkge1xuICAgIGlmICghaXNUb2tlbkNoYXJDb2RlKGNoYXJhY3RlcnMuY2hhckNvZGVBdChpKSkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2hlYWRlci1uYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gcG90ZW50aWFsVmFsdWVcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZEhlYWRlck5hbWUgKHBvdGVudGlhbFZhbHVlKSB7XG4gIHJldHVybiBpc1ZhbGlkSFRUUFRva2VuKHBvdGVudGlhbFZhbHVlKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2hlYWRlci12YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IHBvdGVudGlhbFZhbHVlXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRIZWFkZXJWYWx1ZSAocG90ZW50aWFsVmFsdWUpIHtcbiAgLy8gLSBIYXMgbm8gbGVhZGluZyBvciB0cmFpbGluZyBIVFRQIHRhYiBvciBzcGFjZSBieXRlcy5cbiAgLy8gLSBDb250YWlucyBubyAweDAwIChOVUwpIG9yIEhUVFAgbmV3bGluZSBieXRlcy5cbiAgaWYgKFxuICAgIHBvdGVudGlhbFZhbHVlLnN0YXJ0c1dpdGgoJ1xcdCcpIHx8XG4gICAgcG90ZW50aWFsVmFsdWUuc3RhcnRzV2l0aCgnICcpIHx8XG4gICAgcG90ZW50aWFsVmFsdWUuZW5kc1dpdGgoJ1xcdCcpIHx8XG4gICAgcG90ZW50aWFsVmFsdWUuZW5kc1dpdGgoJyAnKVxuICApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChcbiAgICBwb3RlbnRpYWxWYWx1ZS5pbmNsdWRlcygnXFwwJykgfHxcbiAgICBwb3RlbnRpYWxWYWx1ZS5pbmNsdWRlcygnXFxyJykgfHxcbiAgICBwb3RlbnRpYWxWYWx1ZS5pbmNsdWRlcygnXFxuJylcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jc2V0LXJlcXVlc3RzLXJlZmVycmVyLXBvbGljeS1vbi1yZWRpcmVjdFxuZnVuY3Rpb24gc2V0UmVxdWVzdFJlZmVycmVyUG9saWN5T25SZWRpcmVjdCAocmVxdWVzdCwgYWN0dWFsUmVzcG9uc2UpIHtcbiAgLy8gIEdpdmVuIGEgcmVxdWVzdCByZXF1ZXN0IGFuZCBhIHJlc3BvbnNlIGFjdHVhbFJlc3BvbnNlLCB0aGlzIGFsZ29yaXRobVxuICAvLyAgdXBkYXRlcyByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kgYWNjb3JkaW5nIHRvIHRoZSBSZWZlcnJlci1Qb2xpY3lcbiAgLy8gIGhlYWRlciAoaWYgYW55KSBpbiBhY3R1YWxSZXNwb25zZS5cblxuICAvLyAxLiBMZXQgcG9saWN5IGJlIHRoZSByZXN1bHQgb2YgZXhlY3V0aW5nIFx1MDBBNyA4LjEgUGFyc2UgYSByZWZlcnJlciBwb2xpY3lcbiAgLy8gZnJvbSBhIFJlZmVycmVyLVBvbGljeSBoZWFkZXIgb24gYWN0dWFsUmVzcG9uc2UuXG5cbiAgLy8gOC4xIFBhcnNlIGEgcmVmZXJyZXIgcG9saWN5IGZyb20gYSBSZWZlcnJlci1Qb2xpY3kgaGVhZGVyXG4gIC8vIDEuIExldCBwb2xpY3ktdG9rZW5zIGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBoZWFkZXIgbGlzdCB2YWx1ZXMgZ2l2ZW4gYFJlZmVycmVyLVBvbGljeWAgYW5kIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgY29uc3QgeyBoZWFkZXJzTGlzdCB9ID0gYWN0dWFsUmVzcG9uc2VcbiAgLy8gMi4gTGV0IHBvbGljeSBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICAvLyAzLiBGb3IgZWFjaCB0b2tlbiBpbiBwb2xpY3ktdG9rZW5zLCBpZiB0b2tlbiBpcyBhIHJlZmVycmVyIHBvbGljeSBhbmQgdG9rZW4gaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHBvbGljeSB0byB0b2tlbi5cbiAgLy8gNC4gUmV0dXJuIHBvbGljeS5cbiAgY29uc3QgcG9saWN5SGVhZGVyID0gKGhlYWRlcnNMaXN0LmdldCgncmVmZXJyZXItcG9saWN5JykgPz8gJycpLnNwbGl0KCcsJylcblxuICAvLyBOb3RlOiBBcyB0aGUgcmVmZXJyZXItcG9saWN5IGNhbiBjb250YWluIG11bHRpcGxlIHBvbGljaWVzXG4gIC8vIHNlcGFyYXRlZCBieSBjb21tYSwgd2UgbmVlZCB0byBsb29wIHRocm91Z2ggYWxsIG9mIHRoZW1cbiAgLy8gYW5kIHBpY2sgdGhlIGZpcnN0IHZhbGlkIG9uZS5cbiAgLy8gUmVmOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvUmVmZXJyZXItUG9saWN5I3NwZWNpZnlfYV9mYWxsYmFja19wb2xpY3lcbiAgbGV0IHBvbGljeSA9ICcnXG4gIGlmIChwb2xpY3lIZWFkZXIubGVuZ3RoID4gMCkge1xuICAgIC8vIFRoZSByaWdodC1tb3N0IHBvbGljeSB0YWtlcyBwcmVjZWRlbmNlLlxuICAgIC8vIFRoZSBsZWZ0LW1vc3QgcG9saWN5IGlzIHRoZSBmYWxsYmFjay5cbiAgICBmb3IgKGxldCBpID0gcG9saWN5SGVhZGVyLmxlbmd0aDsgaSAhPT0gMDsgaS0tKSB7XG4gICAgICBjb25zdCB0b2tlbiA9IHBvbGljeUhlYWRlcltpIC0gMV0udHJpbSgpXG4gICAgICBpZiAocmVmZXJyZXJQb2xpY3lUb2tlbnMuaGFzKHRva2VuKSkge1xuICAgICAgICBwb2xpY3kgPSB0b2tlblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIDIuIElmIHBvbGljeSBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgcG9saWN5IHRvIHBvbGljeS5cbiAgaWYgKHBvbGljeSAhPT0gJycpIHtcbiAgICByZXF1ZXN0LnJlZmVycmVyUG9saWN5ID0gcG9saWN5XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2Nyb3NzLW9yaWdpbi1yZXNvdXJjZS1wb2xpY3ktY2hlY2tcbmZ1bmN0aW9uIGNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayAoKSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuICdhbGxvd2VkJ1xufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1jb3JzLWNoZWNrXG5mdW5jdGlvbiBjb3JzQ2hlY2sgKCkge1xuICAvLyBUT0RPXG4gIHJldHVybiAnc3VjY2Vzcydcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdGFvLWNoZWNrXG5mdW5jdGlvbiBUQU9DaGVjayAoKSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuICdzdWNjZXNzJ1xufVxuXG5mdW5jdGlvbiBhcHBlbmRGZXRjaE1ldGFkYXRhIChodHRwUmVxdWVzdCkge1xuICAvLyAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1mZXRjaC1tZXRhZGF0YS8jc2VjLWZldGNoLWRlc3QtaGVhZGVyXG4gIC8vICBUT0RPXG5cbiAgLy8gIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtZmV0Y2gtbWV0YWRhdGEvI3NlYy1mZXRjaC1tb2RlLWhlYWRlclxuXG4gIC8vICAxLiBBc3NlcnQ6IHJcdTIwMTlzIHVybCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTC5cbiAgLy8gIFRPRE9cblxuICAvLyAgMi4gTGV0IGhlYWRlciBiZSBhIFN0cnVjdHVyZWQgSGVhZGVyIHdob3NlIHZhbHVlIGlzIGEgdG9rZW4uXG4gIGxldCBoZWFkZXIgPSBudWxsXG5cbiAgLy8gIDMuIFNldCBoZWFkZXJcdTIwMTlzIHZhbHVlIHRvIHJcdTIwMTlzIG1vZGUuXG4gIGhlYWRlciA9IGh0dHBSZXF1ZXN0Lm1vZGVcblxuICAvLyAgNC4gU2V0IGEgc3RydWN0dXJlZCBmaWVsZCB2YWx1ZSBgU2VjLUZldGNoLU1vZGVgL2hlYWRlciBpbiByXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3Quc2V0KCdzZWMtZmV0Y2gtbW9kZScsIGhlYWRlcilcblxuICAvLyAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1mZXRjaC1tZXRhZGF0YS8jc2VjLWZldGNoLXNpdGUtaGVhZGVyXG4gIC8vICBUT0RPXG5cbiAgLy8gIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtZmV0Y2gtbWV0YWRhdGEvI3NlYy1mZXRjaC11c2VyLWhlYWRlclxuICAvLyAgVE9ET1xufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYXBwZW5kLWEtcmVxdWVzdC1vcmlnaW4taGVhZGVyXG5mdW5jdGlvbiBhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyIChyZXF1ZXN0KSB7XG4gIC8vIDEuIExldCBzZXJpYWxpemVkT3JpZ2luIGJlIHRoZSByZXN1bHQgb2YgYnl0ZS1zZXJpYWxpemluZyBhIHJlcXVlc3Qgb3JpZ2luIHdpdGggcmVxdWVzdC5cbiAgbGV0IHNlcmlhbGl6ZWRPcmlnaW4gPSByZXF1ZXN0Lm9yaWdpblxuXG4gIC8vIDIuIElmIHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIFwiY29yc1wiIG9yIHJlcXVlc3RcdTIwMTlzIG1vZGUgaXMgXCJ3ZWJzb2NrZXRcIiwgdGhlbiBhcHBlbmQgKGBPcmlnaW5gLCBzZXJpYWxpemVkT3JpZ2luKSB0byByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgaWYgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnIHx8IHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcpIHtcbiAgICBpZiAoc2VyaWFsaXplZE9yaWdpbikge1xuICAgICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ29yaWdpbicsIHNlcmlhbGl6ZWRPcmlnaW4pXG4gICAgfVxuXG4gIC8vIDMuIE90aGVyd2lzZSwgaWYgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzIG5laXRoZXIgYEdFVGAgbm9yIGBIRUFEYCwgdGhlbjpcbiAgfSBlbHNlIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0dFVCcgJiYgcmVxdWVzdC5tZXRob2QgIT09ICdIRUFEJykge1xuICAgIC8vIDEuIFN3aXRjaCBvbiByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3k6XG4gICAgc3dpdGNoIChyZXF1ZXN0LnJlZmVycmVyUG9saWN5KSB7XG4gICAgICBjYXNlICduby1yZWZlcnJlcic6XG4gICAgICAgIC8vIFNldCBzZXJpYWxpemVkT3JpZ2luIHRvIGBudWxsYC5cbiAgICAgICAgc2VyaWFsaXplZE9yaWdpbiA9IG51bGxcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJzpcbiAgICAgIGNhc2UgJ3N0cmljdC1vcmlnaW4nOlxuICAgICAgY2FzZSAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbic6XG4gICAgICAgIC8vIElmIHJlcXVlc3RcdTIwMTlzIG9yaWdpbiBpcyBhIHR1cGxlIG9yaWdpbiwgaXRzIHNjaGVtZSBpcyBcImh0dHBzXCIsIGFuZCByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgc2NoZW1lIGlzIG5vdCBcImh0dHBzXCIsIHRoZW4gc2V0IHNlcmlhbGl6ZWRPcmlnaW4gdG8gYG51bGxgLlxuICAgICAgICBpZiAocmVxdWVzdC5vcmlnaW4gJiYgdXJsSGFzSHR0cHNTY2hlbWUocmVxdWVzdC5vcmlnaW4pICYmICF1cmxIYXNIdHRwc1NjaGVtZShyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSkpIHtcbiAgICAgICAgICBzZXJpYWxpemVkT3JpZ2luID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdzYW1lLW9yaWdpbic6XG4gICAgICAgIC8vIElmIHJlcXVlc3RcdTIwMTlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgb3JpZ2luLCB0aGVuIHNldCBzZXJpYWxpemVkT3JpZ2luIHRvIGBudWxsYC5cbiAgICAgICAgaWYgKCFzYW1lT3JpZ2luKHJlcXVlc3QsIHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpKSkge1xuICAgICAgICAgIHNlcmlhbGl6ZWRPcmlnaW4gPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIERvIG5vdGhpbmcuXG4gICAgfVxuXG4gICAgaWYgKHNlcmlhbGl6ZWRPcmlnaW4pIHtcbiAgICAgIC8vIDIuIEFwcGVuZCAoYE9yaWdpbmAsIHNlcmlhbGl6ZWRPcmlnaW4pIHRvIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ29yaWdpbicsIHNlcmlhbGl6ZWRPcmlnaW4pXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lIChjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSkge1xuICAvLyBUT0RPXG4gIHJldHVybiBwZXJmb3JtYW5jZS5ub3coKVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY3JlYXRlLWFuLW9wYXF1ZS10aW1pbmctaW5mb1xuZnVuY3Rpb24gY3JlYXRlT3BhcXVlVGltaW5nSW5mbyAodGltaW5nSW5mbykge1xuICByZXR1cm4ge1xuICAgIHN0YXJ0VGltZTogdGltaW5nSW5mby5zdGFydFRpbWUgPz8gMCxcbiAgICByZWRpcmVjdFN0YXJ0VGltZTogMCxcbiAgICByZWRpcmVjdEVuZFRpbWU6IDAsXG4gICAgcG9zdFJlZGlyZWN0U3RhcnRUaW1lOiB0aW1pbmdJbmZvLnN0YXJ0VGltZSA/PyAwLFxuICAgIGZpbmFsU2VydmljZVdvcmtlclN0YXJ0VGltZTogMCxcbiAgICBmaW5hbE5ldHdvcmtSZXNwb25zZVN0YXJ0VGltZTogMCxcbiAgICBmaW5hbE5ldHdvcmtSZXF1ZXN0U3RhcnRUaW1lOiAwLFxuICAgIGVuZFRpbWU6IDAsXG4gICAgZW5jb2RlZEJvZHlTaXplOiAwLFxuICAgIGRlY29kZWRCb2R5U2l6ZTogMCxcbiAgICBmaW5hbENvbm5lY3Rpb25UaW1pbmdJbmZvOiBudWxsXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvb3JpZ2luLmh0bWwjcG9saWN5LWNvbnRhaW5lclxuZnVuY3Rpb24gbWFrZVBvbGljeUNvbnRhaW5lciAoKSB7XG4gIC8vIE5vdGU6IHRoZSBmZXRjaCBzcGVjIGRvZXNuJ3QgbWFrZSB1c2Ugb2YgZW1iZWRkZXIgcG9saWN5IG9yIENTUCBsaXN0XG4gIHJldHVybiB7XG4gICAgcmVmZXJyZXJQb2xpY3k6ICdzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJ1xuICB9XG59XG5cbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29yaWdpbi5odG1sI2Nsb25lLWEtcG9saWN5LWNvbnRhaW5lclxuZnVuY3Rpb24gY2xvbmVQb2xpY3lDb250YWluZXIgKHBvbGljeUNvbnRhaW5lcikge1xuICByZXR1cm4ge1xuICAgIHJlZmVycmVyUG9saWN5OiBwb2xpY3lDb250YWluZXIucmVmZXJyZXJQb2xpY3lcbiAgfVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jZGV0ZXJtaW5lLXJlcXVlc3RzLXJlZmVycmVyXG5mdW5jdGlvbiBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyIChyZXF1ZXN0KSB7XG4gIC8vIDEuIExldCBwb2xpY3kgYmUgcmVxdWVzdCdzIHJlZmVycmVyIHBvbGljeS5cbiAgY29uc3QgcG9saWN5ID0gcmVxdWVzdC5yZWZlcnJlclBvbGljeVxuXG4gIC8vIE5vdGU6IHBvbGljeSBjYW5ub3QgKHNob3VsZG4ndCkgYmUgbnVsbCBvciBhbiBlbXB0eSBzdHJpbmcuXG4gIGFzc2VydChwb2xpY3kpXG5cbiAgLy8gMi4gTGV0IGVudmlyb25tZW50IGJlIHJlcXVlc3RcdTIwMTlzIGNsaWVudC5cblxuICBsZXQgcmVmZXJyZXJTb3VyY2UgPSBudWxsXG5cbiAgLy8gMy4gU3dpdGNoIG9uIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyOlxuICBpZiAocmVxdWVzdC5yZWZlcnJlciA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyBOb3RlOiBub2RlIGlzbid0IGEgYnJvd3NlciBhbmQgZG9lc24ndCBpbXBsZW1lbnQgZG9jdW1lbnQvaWZyYW1lcyxcbiAgICAvLyBzbyB3ZSBieXBhc3MgdGhpcyBzdGVwIGFuZCByZXBsYWNlIGl0IHdpdGggb3VyIG93bi5cblxuICAgIGNvbnN0IGdsb2JhbE9yaWdpbiA9IGdldEdsb2JhbE9yaWdpbigpXG5cbiAgICBpZiAoIWdsb2JhbE9yaWdpbiB8fCBnbG9iYWxPcmlnaW4ub3JpZ2luID09PSAnbnVsbCcpIHtcbiAgICAgIHJldHVybiAnbm8tcmVmZXJyZXInXG4gICAgfVxuXG4gICAgLy8gbm90ZTogd2UgbmVlZCB0byBjbG9uZSBpdCBhcyBpdCdzIG11dGF0ZWRcbiAgICByZWZlcnJlclNvdXJjZSA9IG5ldyBVUkwoZ2xvYmFsT3JpZ2luKVxuICB9IGVsc2UgaWYgKHJlcXVlc3QucmVmZXJyZXIgaW5zdGFuY2VvZiBVUkwpIHtcbiAgICAvLyBMZXQgcmVmZXJyZXJTb3VyY2UgYmUgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIuXG4gICAgcmVmZXJyZXJTb3VyY2UgPSByZXF1ZXN0LnJlZmVycmVyXG4gIH1cblxuICAvLyA0LiBMZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXJVUkwgYmUgdGhlIHJlc3VsdCBvZiBzdHJpcHBpbmcgcmVmZXJyZXJTb3VyY2UgZm9yXG4gIC8vICAgIHVzZSBhcyBhIHJlZmVycmVyLlxuICBsZXQgcmVmZXJyZXJVUkwgPSBzdHJpcFVSTEZvclJlZmVycmVyKHJlZmVycmVyU291cmNlKVxuXG4gIC8vIDUuIExldCByZWZlcnJlck9yaWdpbiBiZSB0aGUgcmVzdWx0IG9mIHN0cmlwcGluZyByZWZlcnJlclNvdXJjZSBmb3IgdXNlIGFzXG4gIC8vICAgIGEgcmVmZXJyZXIsIHdpdGggdGhlIG9yaWdpbi1vbmx5IGZsYWcgc2V0IHRvIHRydWUuXG4gIGNvbnN0IHJlZmVycmVyT3JpZ2luID0gc3RyaXBVUkxGb3JSZWZlcnJlcihyZWZlcnJlclNvdXJjZSwgdHJ1ZSlcblxuICAvLyA2LiBJZiB0aGUgcmVzdWx0IG9mIHNlcmlhbGl6aW5nIHJlZmVycmVyVVJMIGlzIGEgc3RyaW5nIHdob3NlIGxlbmd0aCBpc1xuICAvLyAgICBncmVhdGVyIHRoYW4gNDA5Niwgc2V0IHJlZmVycmVyVVJMIHRvIHJlZmVycmVyT3JpZ2luLlxuICBpZiAocmVmZXJyZXJVUkwudG9TdHJpbmcoKS5sZW5ndGggPiA0MDk2KSB7XG4gICAgcmVmZXJyZXJVUkwgPSByZWZlcnJlck9yaWdpblxuICB9XG5cbiAgY29uc3QgYXJlU2FtZU9yaWdpbiA9IHNhbWVPcmlnaW4ocmVxdWVzdCwgcmVmZXJyZXJVUkwpXG4gIGNvbnN0IGlzTm9uUG90ZW50aWFsbHlUcnVzdFdvcnRoeSA9IGlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShyZWZlcnJlclVSTCkgJiZcbiAgICAhaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5KHJlcXVlc3QudXJsKVxuXG4gIC8vIDguIEV4ZWN1dGUgdGhlIHN3aXRjaCBzdGF0ZW1lbnRzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHZhbHVlIG9mIHBvbGljeTpcbiAgc3dpdGNoIChwb2xpY3kpIHtcbiAgICBjYXNlICdvcmlnaW4nOiByZXR1cm4gcmVmZXJyZXJPcmlnaW4gIT0gbnVsbCA/IHJlZmVycmVyT3JpZ2luIDogc3RyaXBVUkxGb3JSZWZlcnJlcihyZWZlcnJlclNvdXJjZSwgdHJ1ZSlcbiAgICBjYXNlICd1bnNhZmUtdXJsJzogcmV0dXJuIHJlZmVycmVyVVJMXG4gICAgY2FzZSAnc2FtZS1vcmlnaW4nOlxuICAgICAgcmV0dXJuIGFyZVNhbWVPcmlnaW4gPyByZWZlcnJlck9yaWdpbiA6ICduby1yZWZlcnJlcidcbiAgICBjYXNlICdvcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nOlxuICAgICAgcmV0dXJuIGFyZVNhbWVPcmlnaW4gPyByZWZlcnJlclVSTCA6IHJlZmVycmVyT3JpZ2luXG4gICAgY2FzZSAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbic6IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRVUkwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gICAgICAvLyAxLiBJZiB0aGUgb3JpZ2luIG9mIHJlZmVycmVyVVJMIGFuZCB0aGUgb3JpZ2luIG9mIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnRcbiAgICAgIC8vICAgIFVSTCBhcmUgdGhlIHNhbWUsIHRoZW4gcmV0dXJuIHJlZmVycmVyVVJMLlxuICAgICAgaWYgKHNhbWVPcmlnaW4ocmVmZXJyZXJVUkwsIGN1cnJlbnRVUkwpKSB7XG4gICAgICAgIHJldHVybiByZWZlcnJlclVSTFxuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiByZWZlcnJlclVSTCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCBhbmQgcmVxdWVzdFx1MjAxOXNcbiAgICAgIC8vICAgIGN1cnJlbnQgVVJMIGlzIG5vdCBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCwgdGhlbiByZXR1cm4gbm9cbiAgICAgIC8vICAgIHJlZmVycmVyLlxuICAgICAgaWYgKGlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShyZWZlcnJlclVSTCkgJiYgIWlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShjdXJyZW50VVJMKSkge1xuICAgICAgICByZXR1cm4gJ25vLXJlZmVycmVyJ1xuICAgICAgfVxuXG4gICAgICAvLyAzLiBSZXR1cm4gcmVmZXJyZXJPcmlnaW4uXG4gICAgICByZXR1cm4gcmVmZXJyZXJPcmlnaW5cbiAgICB9XG4gICAgY2FzZSAnc3RyaWN0LW9yaWdpbic6IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgIC8qKlxuICAgICAgICAgKiAxLiBJZiByZWZlcnJlclVSTCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCBhbmRcbiAgICAgICAgICogcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkwgaXMgbm90IGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMLFxuICAgICAgICAgKiB0aGVuIHJldHVybiBubyByZWZlcnJlci5cbiAgICAgICAgICogMi4gUmV0dXJuIHJlZmVycmVyT3JpZ2luXG4gICAgICAgICovXG4gICAgY2FzZSAnbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGUnOiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAvKipcbiAgICAgICAqIDEuIElmIHJlZmVycmVyVVJMIGlzIGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMIGFuZFxuICAgICAgICogcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkwgaXMgbm90IGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMLFxuICAgICAgICogdGhlbiByZXR1cm4gbm8gcmVmZXJyZXIuXG4gICAgICAgKiAyLiBSZXR1cm4gcmVmZXJyZXJPcmlnaW5cbiAgICAgICovXG5cbiAgICBkZWZhdWx0OiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICByZXR1cm4gaXNOb25Qb3RlbnRpYWxseVRydXN0V29ydGh5ID8gJ25vLXJlZmVycmVyJyA6IHJlZmVycmVyT3JpZ2luXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtcmVmZXJyZXItcG9saWN5LyNzdHJpcC11cmxcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IG9yaWdpbk9ubHlcbiAqL1xuZnVuY3Rpb24gc3RyaXBVUkxGb3JSZWZlcnJlciAodXJsLCBvcmlnaW5Pbmx5KSB7XG4gIC8vIDEuIEFzc2VydDogdXJsIGlzIGEgVVJMLlxuICBhc3NlcnQodXJsIGluc3RhbmNlb2YgVVJMKVxuXG4gIC8vIDIuIElmIHVybFx1MjAxOXMgc2NoZW1lIGlzIGEgbG9jYWwgc2NoZW1lLCB0aGVuIHJldHVybiBubyByZWZlcnJlci5cbiAgaWYgKHVybC5wcm90b2NvbCA9PT0gJ2ZpbGU6JyB8fCB1cmwucHJvdG9jb2wgPT09ICdhYm91dDonIHx8IHVybC5wcm90b2NvbCA9PT0gJ2JsYW5rOicpIHtcbiAgICByZXR1cm4gJ25vLXJlZmVycmVyJ1xuICB9XG5cbiAgLy8gMy4gU2V0IHVybFx1MjAxOXMgdXNlcm5hbWUgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAgdXJsLnVzZXJuYW1lID0gJydcblxuICAvLyA0LiBTZXQgdXJsXHUyMDE5cyBwYXNzd29yZCB0byB0aGUgZW1wdHkgc3RyaW5nLlxuICB1cmwucGFzc3dvcmQgPSAnJ1xuXG4gIC8vIDUuIFNldCB1cmxcdTIwMTlzIGZyYWdtZW50IHRvIG51bGwuXG4gIHVybC5oYXNoID0gJydcblxuICAvLyA2LiBJZiB0aGUgb3JpZ2luLW9ubHkgZmxhZyBpcyB0cnVlLCB0aGVuOlxuICBpZiAob3JpZ2luT25seSkge1xuICAgIC8vIDEuIFNldCB1cmxcdTIwMTlzIHBhdGggdG8gXHUwMEFCIHRoZSBlbXB0eSBzdHJpbmcgXHUwMEJCLlxuICAgIHVybC5wYXRobmFtZSA9ICcnXG5cbiAgICAvLyAyLiBTZXQgdXJsXHUyMDE5cyBxdWVyeSB0byBudWxsLlxuICAgIHVybC5zZWFyY2ggPSAnJ1xuICB9XG5cbiAgLy8gNy4gUmV0dXJuIHVybC5cbiAgcmV0dXJuIHVybFxufVxuXG5mdW5jdGlvbiBpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHkgKHVybCkge1xuICBpZiAoISh1cmwgaW5zdGFuY2VvZiBVUkwpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBJZiBjaGlsZCBvZiBhYm91dCwgcmV0dXJuIHRydWVcbiAgaWYgKHVybC5ocmVmID09PSAnYWJvdXQ6YmxhbmsnIHx8IHVybC5ocmVmID09PSAnYWJvdXQ6c3JjZG9jJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyBJZiBzY2hlbWUgaXMgZGF0YSwgcmV0dXJuIHRydWVcbiAgaWYgKHVybC5wcm90b2NvbCA9PT0gJ2RhdGE6JykgcmV0dXJuIHRydWVcblxuICAvLyBJZiBmaWxlLCByZXR1cm4gdHJ1ZVxuICBpZiAodXJsLnByb3RvY29sID09PSAnZmlsZTonKSByZXR1cm4gdHJ1ZVxuXG4gIHJldHVybiBpc09yaWdpblBvdGVudGlhbGx5VHJ1c3R3b3J0aHkodXJsLm9yaWdpbilcblxuICBmdW5jdGlvbiBpc09yaWdpblBvdGVudGlhbGx5VHJ1c3R3b3J0aHkgKG9yaWdpbikge1xuICAgIC8vIElmIG9yaWdpbiBpcyBleHBsaWNpdGx5IG51bGwsIHJldHVybiBmYWxzZVxuICAgIGlmIChvcmlnaW4gPT0gbnVsbCB8fCBvcmlnaW4gPT09ICdudWxsJykgcmV0dXJuIGZhbHNlXG5cbiAgICBjb25zdCBvcmlnaW5Bc1VSTCA9IG5ldyBVUkwob3JpZ2luKVxuXG4gICAgLy8gSWYgc2VjdXJlLCByZXR1cm4gdHJ1ZVxuICAgIGlmIChvcmlnaW5Bc1VSTC5wcm90b2NvbCA9PT0gJ2h0dHBzOicgfHwgb3JpZ2luQXNVUkwucHJvdG9jb2wgPT09ICd3c3M6Jykge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICAvLyBJZiBsb2NhbGhvc3Qgb3IgdmFyaWFudHMsIHJldHVybiB0cnVlXG4gICAgaWYgKC9eMTI3KD86XFwuWzAtOV0rKXswLDJ9XFwuWzAtOV0rJHxeXFxbKD86MCo6KSo/Oj8wKjFcXF0kLy50ZXN0KG9yaWdpbkFzVVJMLmhvc3RuYW1lKSB8fFxuICAgICAob3JpZ2luQXNVUkwuaG9zdG5hbWUgPT09ICdsb2NhbGhvc3QnIHx8IG9yaWdpbkFzVVJMLmhvc3RuYW1lLmluY2x1ZGVzKCdsb2NhbGhvc3QuJykpIHx8XG4gICAgIChvcmlnaW5Bc1VSTC5ob3N0bmFtZS5lbmRzV2l0aCgnLmxvY2FsaG9zdCcpKSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICAvLyBJZiBhbnkgb3RoZXIsIHJldHVybiBmYWxzZVxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXN1YnJlc291cmNlLWludGVncml0eS8jZG9lcy1yZXNwb25zZS1tYXRjaC1tZXRhZGF0YWxpc3RcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnl0ZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRhZGF0YUxpc3RcbiAqL1xuZnVuY3Rpb24gYnl0ZXNNYXRjaCAoYnl0ZXMsIG1ldGFkYXRhTGlzdCkge1xuICAvLyBJZiBub2RlIGlzIG5vdCBidWlsdCB3aXRoIE9wZW5TU0wgc3VwcG9ydCwgd2UgY2Fubm90IGNoZWNrXG4gIC8vIGEgcmVxdWVzdCdzIGludGVncml0eSwgc28gYWxsb3cgaXQgYnkgZGVmYXVsdCAodGhlIHNwZWMgd2lsbFxuICAvLyBhbGxvdyByZXF1ZXN0cyBpZiBhbiBpbnZhbGlkIGhhc2ggaXMgZ2l2ZW4sIGFzIHByZWNlZGVuY2UpLlxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWY6IG9ubHkgaWYgbm9kZSBpcyBidWlsdCB3aXRoIC0td2l0aG91dC1zc2wgKi9cbiAgaWYgKGNyeXB0byA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIDEuIExldCBwYXJzZWRNZXRhZGF0YSBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgbWV0YWRhdGFMaXN0LlxuICBjb25zdCBwYXJzZWRNZXRhZGF0YSA9IHBhcnNlTWV0YWRhdGEobWV0YWRhdGFMaXN0KVxuXG4gIC8vIDIuIElmIHBhcnNlZE1ldGFkYXRhIGlzIG5vIG1ldGFkYXRhLCByZXR1cm4gdHJ1ZS5cbiAgaWYgKHBhcnNlZE1ldGFkYXRhID09PSAnbm8gbWV0YWRhdGEnKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIDMuIElmIHJlc3BvbnNlIGlzIG5vdCBlbGlnaWJsZSBmb3IgaW50ZWdyaXR5IHZhbGlkYXRpb24sIHJldHVybiBmYWxzZS5cbiAgLy8gVE9ET1xuXG4gIC8vIDQuIElmIHBhcnNlZE1ldGFkYXRhIGlzIHRoZSBlbXB0eSBzZXQsIHJldHVybiB0cnVlLlxuICBpZiAocGFyc2VkTWV0YWRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIDUuIExldCBtZXRhZGF0YSBiZSB0aGUgcmVzdWx0IG9mIGdldHRpbmcgdGhlIHN0cm9uZ2VzdFxuICAvLyAgICBtZXRhZGF0YSBmcm9tIHBhcnNlZE1ldGFkYXRhLlxuICBjb25zdCBzdHJvbmdlc3QgPSBnZXRTdHJvbmdlc3RNZXRhZGF0YShwYXJzZWRNZXRhZGF0YSlcbiAgY29uc3QgbWV0YWRhdGEgPSBmaWx0ZXJNZXRhZGF0YUxpc3RCeUFsZ29yaXRobShwYXJzZWRNZXRhZGF0YSwgc3Ryb25nZXN0KVxuXG4gIC8vIDYuIEZvciBlYWNoIGl0ZW0gaW4gbWV0YWRhdGE6XG4gIGZvciAoY29uc3QgaXRlbSBvZiBtZXRhZGF0YSkge1xuICAgIC8vIDEuIExldCBhbGdvcml0aG0gYmUgdGhlIGFsZyBjb21wb25lbnQgb2YgaXRlbS5cbiAgICBjb25zdCBhbGdvcml0aG0gPSBpdGVtLmFsZ29cblxuICAgIC8vIDIuIExldCBleHBlY3RlZFZhbHVlIGJlIHRoZSB2YWwgY29tcG9uZW50IG9mIGl0ZW0uXG4gICAgY29uc3QgZXhwZWN0ZWRWYWx1ZSA9IGl0ZW0uaGFzaFxuXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0L2NvbW1pdC9lNGM1Y2M3YTVlNDgwOTMyMjA1MjhkZmRkMWM0MDEyZGMzODM3YTBlXG4gICAgLy8gXCJiZSBsaWJlcmFsIHdpdGggcGFkZGluZ1wiLiBUaGlzIGlzIGFubm95aW5nLCBhbmQgaXQncyBub3QgZXZlbiBpbiB0aGUgc3BlYy5cblxuICAgIC8vIDMuIExldCBhY3R1YWxWYWx1ZSBiZSB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIGFsZ29yaXRobSB0byBieXRlcy5cbiAgICBsZXQgYWN0dWFsVmFsdWUgPSBjcnlwdG8uY3JlYXRlSGFzaChhbGdvcml0aG0pLnVwZGF0ZShieXRlcykuZGlnZXN0KCdiYXNlNjQnKVxuXG4gICAgaWYgKGFjdHVhbFZhbHVlW2FjdHVhbFZhbHVlLmxlbmd0aCAtIDFdID09PSAnPScpIHtcbiAgICAgIGlmIChhY3R1YWxWYWx1ZVthY3R1YWxWYWx1ZS5sZW5ndGggLSAyXSA9PT0gJz0nKSB7XG4gICAgICAgIGFjdHVhbFZhbHVlID0gYWN0dWFsVmFsdWUuc2xpY2UoMCwgLTIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3R1YWxWYWx1ZSA9IGFjdHVhbFZhbHVlLnNsaWNlKDAsIC0xKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuIElmIGFjdHVhbFZhbHVlIGlzIGEgY2FzZS1zZW5zaXRpdmUgbWF0Y2ggZm9yIGV4cGVjdGVkVmFsdWUsXG4gICAgLy8gICAgcmV0dXJuIHRydWUuXG4gICAgaWYgKGNvbXBhcmVCYXNlNjRNaXhlZChhY3R1YWxWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG5cbiAgLy8gNy4gUmV0dXJuIGZhbHNlLlxuICByZXR1cm4gZmFsc2Vcbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1zdWJyZXNvdXJjZS1pbnRlZ3JpdHkvI2dyYW1tYXJkZWYtaGFzaC13aXRoLW9wdGlvbnNcbi8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9DU1AyLyNzb3VyY2UtbGlzdC1zeW50YXhcbi8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM1MjM0I2FwcGVuZGl4LUIuMVxuY29uc3QgcGFyc2VIYXNoV2l0aE9wdGlvbnMgPSAvKD88YWxnbz5zaGEyNTZ8c2hhMzg0fHNoYTUxMiktKCg/PGhhc2g+W0EtWmEtejAtOSsvXSt8W0EtWmEtejAtOV8tXSspPXswLDJ9KD86XFxzfCQpKCArWyEtfl0qKT8pPy9pXG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXN1YnJlc291cmNlLWludGVncml0eS8jcGFyc2UtbWV0YWRhdGFcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRhZGF0YVxuICovXG5mdW5jdGlvbiBwYXJzZU1ldGFkYXRhIChtZXRhZGF0YSkge1xuICAvLyAxLiBMZXQgcmVzdWx0IGJlIHRoZSBlbXB0eSBzZXQuXG4gIC8qKiBAdHlwZSB7eyBhbGdvOiBzdHJpbmcsIGhhc2g6IHN0cmluZyB9W119ICovXG4gIGNvbnN0IHJlc3VsdCA9IFtdXG5cbiAgLy8gMi4gTGV0IGVtcHR5IGJlIGVxdWFsIHRvIHRydWUuXG4gIGxldCBlbXB0eSA9IHRydWVcblxuICAvLyAzLiBGb3IgZWFjaCB0b2tlbiByZXR1cm5lZCBieSBzcGxpdHRpbmcgbWV0YWRhdGEgb24gc3BhY2VzOlxuICBmb3IgKGNvbnN0IHRva2VuIG9mIG1ldGFkYXRhLnNwbGl0KCcgJykpIHtcbiAgICAvLyAxLiBTZXQgZW1wdHkgdG8gZmFsc2UuXG4gICAgZW1wdHkgPSBmYWxzZVxuXG4gICAgLy8gMi4gUGFyc2UgdG9rZW4gYXMgYSBoYXNoLXdpdGgtb3B0aW9ucy5cbiAgICBjb25zdCBwYXJzZWRUb2tlbiA9IHBhcnNlSGFzaFdpdGhPcHRpb25zLmV4ZWModG9rZW4pXG5cbiAgICAvLyAzLiBJZiB0b2tlbiBkb2VzIG5vdCBwYXJzZSwgY29udGludWUgdG8gdGhlIG5leHQgdG9rZW4uXG4gICAgaWYgKFxuICAgICAgcGFyc2VkVG9rZW4gPT09IG51bGwgfHxcbiAgICAgIHBhcnNlZFRva2VuLmdyb3VwcyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICBwYXJzZWRUb2tlbi5ncm91cHMuYWxnbyA9PT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICAvLyBOb3RlOiBDaHJvbWl1bSBibG9ja3MgdGhlIHJlcXVlc3QgYXQgdGhpcyBwb2ludCwgYnV0IEZpcmVmb3hcbiAgICAgIC8vIGdpdmVzIGEgd2FybmluZyB0aGF0IGFuIGludmFsaWQgaW50ZWdyaXR5IHdhcyBnaXZlbi4gVGhlXG4gICAgICAvLyBjb3JyZWN0IGJlaGF2aW9yIGlzIHRvIGlnbm9yZSB0aGVzZSwgYW5kIHN1YnNlcXVlbnRseSBub3RcbiAgICAgIC8vIGNoZWNrIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIHJlc291cmNlLlxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICAvLyA0LiBMZXQgYWxnb3JpdGhtIGJlIHRoZSBoYXNoLWFsZ28gY29tcG9uZW50IG9mIHRva2VuLlxuICAgIGNvbnN0IGFsZ29yaXRobSA9IHBhcnNlZFRva2VuLmdyb3Vwcy5hbGdvLnRvTG93ZXJDYXNlKClcblxuICAgIC8vIDUuIElmIGFsZ29yaXRobSBpcyBhIGhhc2ggZnVuY3Rpb24gcmVjb2duaXplZCBieSB0aGUgdXNlclxuICAgIC8vICAgIGFnZW50LCBhZGQgdGhlIHBhcnNlZCB0b2tlbiB0byByZXN1bHQuXG4gICAgaWYgKHN1cHBvcnRlZEhhc2hlcy5pbmNsdWRlcyhhbGdvcml0aG0pKSB7XG4gICAgICByZXN1bHQucHVzaChwYXJzZWRUb2tlbi5ncm91cHMpXG4gICAgfVxuICB9XG5cbiAgLy8gNC4gUmV0dXJuIG5vIG1ldGFkYXRhIGlmIGVtcHR5IGlzIHRydWUsIG90aGVyd2lzZSByZXR1cm4gcmVzdWx0LlxuICBpZiAoZW1wdHkgPT09IHRydWUpIHtcbiAgICByZXR1cm4gJ25vIG1ldGFkYXRhJ1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vKipcbiAqIEBwYXJhbSB7eyBhbGdvOiAnc2hhMjU2JyB8ICdzaGEzODQnIHwgJ3NoYTUxMicgfVtdfSBtZXRhZGF0YUxpc3RcbiAqL1xuZnVuY3Rpb24gZ2V0U3Ryb25nZXN0TWV0YWRhdGEgKG1ldGFkYXRhTGlzdCkge1xuICAvLyBMZXQgYWxnb3JpdGhtIGJlIHRoZSBhbGdvIGNvbXBvbmVudCBvZiB0aGUgZmlyc3QgaXRlbSBpbiBtZXRhZGF0YUxpc3QuXG4gIC8vIENhbiBiZSBzaGEyNTZcbiAgbGV0IGFsZ29yaXRobSA9IG1ldGFkYXRhTGlzdFswXS5hbGdvXG4gIC8vIElmIHRoZSBhbGdvcml0aG0gaXMgc2hhNTEyLCB0aGVuIGl0IGlzIHRoZSBzdHJvbmdlc3RcbiAgLy8gYW5kIHdlIGNhbiByZXR1cm4gaW1tZWRpYXRlbHlcbiAgaWYgKGFsZ29yaXRobVszXSA9PT0gJzUnKSB7XG4gICAgcmV0dXJuIGFsZ29yaXRobVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBtZXRhZGF0YUxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBtZXRhZGF0YSA9IG1ldGFkYXRhTGlzdFtpXVxuICAgIC8vIElmIHRoZSBhbGdvcml0aG0gaXMgc2hhNTEyLCB0aGVuIGl0IGlzIHRoZSBzdHJvbmdlc3RcbiAgICAvLyBhbmQgd2UgY2FuIGJyZWFrIHRoZSBsb29wIGltbWVkaWF0ZWx5XG4gICAgaWYgKG1ldGFkYXRhLmFsZ29bM10gPT09ICc1Jykge1xuICAgICAgYWxnb3JpdGhtID0gJ3NoYTUxMidcbiAgICAgIGJyZWFrXG4gICAgLy8gSWYgdGhlIGFsZ29yaXRobSBpcyBzaGEzODQsIHRoZW4gYSBwb3RlbnRpYWwgc2hhMjU2IG9yIHNoYTM4NCBpcyBpZ25vcmVkXG4gICAgfSBlbHNlIGlmIChhbGdvcml0aG1bM10gPT09ICczJykge1xuICAgICAgY29udGludWVcbiAgICAvLyBhbGdvcml0aG0gaXMgc2hhMjU2LCBjaGVjayBpZiBhbGdvcml0aG0gaXMgc2hhMzg0IGFuZCBpZiBzbywgc2V0IGl0IGFzXG4gICAgLy8gdGhlIHN0cm9uZ2VzdFxuICAgIH0gZWxzZSBpZiAobWV0YWRhdGEuYWxnb1szXSA9PT0gJzMnKSB7XG4gICAgICBhbGdvcml0aG0gPSAnc2hhMzg0J1xuICAgIH1cbiAgfVxuICByZXR1cm4gYWxnb3JpdGhtXG59XG5cbmZ1bmN0aW9uIGZpbHRlck1ldGFkYXRhTGlzdEJ5QWxnb3JpdGhtIChtZXRhZGF0YUxpc3QsIGFsZ29yaXRobSkge1xuICBpZiAobWV0YWRhdGFMaXN0Lmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBtZXRhZGF0YUxpc3RcbiAgfVxuXG4gIGxldCBwb3MgPSAwXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWV0YWRhdGFMaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKG1ldGFkYXRhTGlzdFtpXS5hbGdvID09PSBhbGdvcml0aG0pIHtcbiAgICAgIG1ldGFkYXRhTGlzdFtwb3MrK10gPSBtZXRhZGF0YUxpc3RbaV1cbiAgICB9XG4gIH1cblxuICBtZXRhZGF0YUxpc3QubGVuZ3RoID0gcG9zXG5cbiAgcmV0dXJuIG1ldGFkYXRhTGlzdFxufVxuXG4vKipcbiAqIENvbXBhcmVzIHR3byBiYXNlNjQgc3RyaW5ncywgYWxsb3dpbmcgZm9yIGJhc2U2NHVybFxuICogaW4gdGhlIHNlY29uZCBzdHJpbmcuXG4gKlxuKiBAcGFyYW0ge3N0cmluZ30gYWN0dWFsVmFsdWUgYWx3YXlzIGJhc2U2NFxuICogQHBhcmFtIHtzdHJpbmd9IGV4cGVjdGVkVmFsdWUgYmFzZTY0IG9yIGJhc2U2NHVybFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVCYXNlNjRNaXhlZCAoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpIHtcbiAgaWYgKGFjdHVhbFZhbHVlLmxlbmd0aCAhPT0gZXhwZWN0ZWRWYWx1ZS5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdHVhbFZhbHVlLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKGFjdHVhbFZhbHVlW2ldICE9PSBleHBlY3RlZFZhbHVlW2ldKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChhY3R1YWxWYWx1ZVtpXSA9PT0gJysnICYmIGV4cGVjdGVkVmFsdWVbaV0gPT09ICctJykgfHxcbiAgICAgICAgKGFjdHVhbFZhbHVlW2ldID09PSAnLycgJiYgZXhwZWN0ZWRWYWx1ZVtpXSA9PT0gJ18nKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXVwZ3JhZGUtaW5zZWN1cmUtcmVxdWVzdHMvI3VwZ3JhZGUtcmVxdWVzdFxuZnVuY3Rpb24gdHJ5VXBncmFkZVJlcXVlc3RUb0FQb3RlbnRpYWxseVRydXN0d29ydGh5VVJMIChyZXF1ZXN0KSB7XG4gIC8vIFRPRE9cbn1cblxuLyoqXG4gKiBAbGluayB7aHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvb3JpZ2luLmh0bWwjc2FtZS1vcmlnaW59XG4gKiBAcGFyYW0ge1VSTH0gQVxuICogQHBhcmFtIHtVUkx9IEJcbiAqL1xuZnVuY3Rpb24gc2FtZU9yaWdpbiAoQSwgQikge1xuICAvLyAxLiBJZiBBIGFuZCBCIGFyZSB0aGUgc2FtZSBvcGFxdWUgb3JpZ2luLCB0aGVuIHJldHVybiB0cnVlLlxuICBpZiAoQS5vcmlnaW4gPT09IEIub3JpZ2luICYmIEEub3JpZ2luID09PSAnbnVsbCcpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gMi4gSWYgQSBhbmQgQiBhcmUgYm90aCB0dXBsZSBvcmlnaW5zIGFuZCB0aGVpciBzY2hlbWVzLFxuICAvLyAgICBob3N0cywgYW5kIHBvcnQgYXJlIGlkZW50aWNhbCwgdGhlbiByZXR1cm4gdHJ1ZS5cbiAgaWYgKEEucHJvdG9jb2wgPT09IEIucHJvdG9jb2wgJiYgQS5ob3N0bmFtZSA9PT0gQi5ob3N0bmFtZSAmJiBBLnBvcnQgPT09IEIucG9ydCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gZmFsc2UuXG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBjcmVhdGVEZWZlcnJlZFByb21pc2UgKCkge1xuICBsZXQgcmVzXG4gIGxldCByZWpcbiAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICByZXMgPSByZXNvbHZlXG4gICAgcmVqID0gcmVqZWN0XG4gIH0pXG5cbiAgcmV0dXJuIHsgcHJvbWlzZSwgcmVzb2x2ZTogcmVzLCByZWplY3Q6IHJlaiB9XG59XG5cbmZ1bmN0aW9uIGlzQWJvcnRlZCAoZmV0Y2hQYXJhbXMpIHtcbiAgcmV0dXJuIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuc3RhdGUgPT09ICdhYm9ydGVkJ1xufVxuXG5mdW5jdGlvbiBpc0NhbmNlbGxlZCAoZmV0Y2hQYXJhbXMpIHtcbiAgcmV0dXJuIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuc3RhdGUgPT09ICdhYm9ydGVkJyB8fFxuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuc3RhdGUgPT09ICd0ZXJtaW5hdGVkJ1xufVxuXG5jb25zdCBub3JtYWxpemVNZXRob2RSZWNvcmQgPSB7XG4gIGRlbGV0ZTogJ0RFTEVURScsXG4gIERFTEVURTogJ0RFTEVURScsXG4gIGdldDogJ0dFVCcsXG4gIEdFVDogJ0dFVCcsXG4gIGhlYWQ6ICdIRUFEJyxcbiAgSEVBRDogJ0hFQUQnLFxuICBvcHRpb25zOiAnT1BUSU9OUycsXG4gIE9QVElPTlM6ICdPUFRJT05TJyxcbiAgcG9zdDogJ1BPU1QnLFxuICBQT1NUOiAnUE9TVCcsXG4gIHB1dDogJ1BVVCcsXG4gIFBVVDogJ1BVVCdcbn1cblxuLy8gTm90ZTogb2JqZWN0IHByb3RvdHlwZXMgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGJlIHJlZmVyZW5jZWQuIGUuZy4gYE9iamVjdCNoYXNPd25Qcm9wZXJ0eWAuXG5PYmplY3Quc2V0UHJvdG90eXBlT2Yobm9ybWFsaXplTWV0aG9kUmVjb3JkLCBudWxsKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtbWV0aG9kLW5vcm1hbGl6ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZFxuICovXG5mdW5jdGlvbiBub3JtYWxpemVNZXRob2QgKG1ldGhvZCkge1xuICByZXR1cm4gbm9ybWFsaXplTWV0aG9kUmVjb3JkW21ldGhvZC50b0xvd2VyQ2FzZSgpXSA/PyBtZXRob2Rcbn1cblxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI3NlcmlhbGl6ZS1hLWphdmFzY3JpcHQtdmFsdWUtdG8tYS1qc29uLXN0cmluZ1xuZnVuY3Rpb24gc2VyaWFsaXplSmF2YXNjcmlwdFZhbHVlVG9KU09OU3RyaW5nICh2YWx1ZSkge1xuICAvLyAxLiBMZXQgcmVzdWx0IGJlID8gQ2FsbCglSlNPTi5zdHJpbmdpZnklLCB1bmRlZmluZWQsIFx1MDBBQiB2YWx1ZSBcdTAwQkIpLlxuICBjb25zdCByZXN1bHQgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSlcblxuICAvLyAyLiBJZiByZXN1bHQgaXMgdW5kZWZpbmVkLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZSBpcyBub3QgSlNPTiBzZXJpYWxpemFibGUnKVxuICB9XG5cbiAgLy8gMy4gQXNzZXJ0OiByZXN1bHQgaXMgYSBzdHJpbmcuXG4gIGFzc2VydCh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJylcblxuICAvLyA0LiBSZXR1cm4gcmVzdWx0LlxuICByZXR1cm4gcmVzdWx0XG59XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJTI1aXRlcmF0b3Jwcm90b3R5cGUlMjUtb2JqZWN0XG5jb25zdCBlc0l0ZXJhdG9yUHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKE9iamVjdC5nZXRQcm90b3R5cGVPZihbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNkZm4taXRlcmF0b3ItcHJvdG90eXBlLW9iamVjdFxuICogQHBhcmFtIHsoKSA9PiB1bmtub3duW119IGl0ZXJhdG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBuYW1lIG9mIHRoZSBpbnN0YW5jZVxuICogQHBhcmFtIHsna2V5J3wndmFsdWUnfCdrZXkrdmFsdWUnfSBraW5kXG4gKi9cbmZ1bmN0aW9uIG1ha2VJdGVyYXRvciAoaXRlcmF0b3IsIG5hbWUsIGtpbmQpIHtcbiAgY29uc3Qgb2JqZWN0ID0ge1xuICAgIGluZGV4OiAwLFxuICAgIGtpbmQsXG4gICAgdGFyZ2V0OiBpdGVyYXRvclxuICB9XG5cbiAgY29uc3QgaSA9IHtcbiAgICBuZXh0ICgpIHtcbiAgICAgIC8vIDEuIExldCBpbnRlcmZhY2UgYmUgdGhlIGludGVyZmFjZSBmb3Igd2hpY2ggdGhlIGl0ZXJhdG9yIHByb3RvdHlwZSBvYmplY3QgZXhpc3RzLlxuXG4gICAgICAvLyAyLiBMZXQgdGhpc1ZhbHVlIGJlIHRoZSB0aGlzIHZhbHVlLlxuXG4gICAgICAvLyAzLiBMZXQgb2JqZWN0IGJlID8gVG9PYmplY3QodGhpc1ZhbHVlKS5cblxuICAgICAgLy8gNC4gSWYgb2JqZWN0IGlzIGEgcGxhdGZvcm0gb2JqZWN0LCB0aGVuIHBlcmZvcm0gYSBzZWN1cml0eVxuICAgICAgLy8gICAgY2hlY2ssIHBhc3Npbmc6XG5cbiAgICAgIC8vIDUuIElmIG9iamVjdCBpcyBub3QgYSBkZWZhdWx0IGl0ZXJhdG9yIG9iamVjdCBmb3IgaW50ZXJmYWNlLFxuICAgICAgLy8gICAgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykgIT09IGkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBgJ25leHQnIGNhbGxlZCBvbiBhbiBvYmplY3QgdGhhdCBkb2VzIG5vdCBpbXBsZW1lbnQgaW50ZXJmYWNlICR7bmFtZX0gSXRlcmF0b3IuYFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIDYuIExldCBpbmRleCBiZSBvYmplY3RcdTIwMTlzIGluZGV4LlxuICAgICAgLy8gNy4gTGV0IGtpbmQgYmUgb2JqZWN0XHUyMDE5cyBraW5kLlxuICAgICAgLy8gOC4gTGV0IHZhbHVlcyBiZSBvYmplY3RcdTIwMTlzIHRhcmdldCdzIHZhbHVlIHBhaXJzIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgIGNvbnN0IHsgaW5kZXgsIGtpbmQsIHRhcmdldCB9ID0gb2JqZWN0XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0YXJnZXQoKVxuXG4gICAgICAvLyA5LiBMZXQgbGVuIGJlIHRoZSBsZW5ndGggb2YgdmFsdWVzLlxuICAgICAgY29uc3QgbGVuID0gdmFsdWVzLmxlbmd0aFxuXG4gICAgICAvLyAxMC4gSWYgaW5kZXggaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGxlbiwgdGhlbiByZXR1cm5cbiAgICAgIC8vICAgICBDcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSkuXG4gICAgICBpZiAoaW5kZXggPj0gbGVuKSB7XG4gICAgICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfVxuICAgICAgfVxuXG4gICAgICAvLyAxMS4gTGV0IHBhaXIgYmUgdGhlIGVudHJ5IGluIHZhbHVlcyBhdCBpbmRleCBpbmRleC5cbiAgICAgIGNvbnN0IHBhaXIgPSB2YWx1ZXNbaW5kZXhdXG5cbiAgICAgIC8vIDEyLiBTZXQgb2JqZWN0XHUyMDE5cyBpbmRleCB0byBpbmRleCArIDEuXG4gICAgICBvYmplY3QuaW5kZXggPSBpbmRleCArIDFcblxuICAgICAgLy8gMTMuIFJldHVybiB0aGUgaXRlcmF0b3IgcmVzdWx0IGZvciBwYWlyIGFuZCBraW5kLlxuICAgICAgcmV0dXJuIGl0ZXJhdG9yUmVzdWx0KHBhaXIsIGtpbmQpXG4gICAgfSxcbiAgICAvLyBUaGUgY2xhc3Mgc3RyaW5nIG9mIGFuIGl0ZXJhdG9yIHByb3RvdHlwZSBvYmplY3QgZm9yIGEgZ2l2ZW4gaW50ZXJmYWNlIGlzIHRoZVxuICAgIC8vIHJlc3VsdCBvZiBjb25jYXRlbmF0aW5nIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBpbnRlcmZhY2UgYW5kIHRoZSBzdHJpbmcgXCIgSXRlcmF0b3JcIi5cbiAgICBbU3ltYm9sLnRvU3RyaW5nVGFnXTogYCR7bmFtZX0gSXRlcmF0b3JgXG4gIH1cblxuICAvLyBUaGUgW1tQcm90b3R5cGVdXSBpbnRlcm5hbCBzbG90IG9mIGFuIGl0ZXJhdG9yIHByb3RvdHlwZSBvYmplY3QgbXVzdCBiZSAlSXRlcmF0b3JQcm90b3R5cGUlLlxuICBPYmplY3Quc2V0UHJvdG90eXBlT2YoaSwgZXNJdGVyYXRvclByb3RvdHlwZSlcbiAgLy8gZXNJdGVyYXRvclByb3RvdHlwZSBuZWVkcyB0byBiZSB0aGUgcHJvdG90eXBlIG9mIGlcbiAgLy8gd2hpY2ggaXMgdGhlIHByb3RvdHlwZSBvZiBhbiBlbXB0eSBvYmplY3QuIFllcywgaXQncyBjb25mdXNpbmcuXG4gIHJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Yoe30sIGkpXG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jaXRlcmF0b3ItcmVzdWx0XG5mdW5jdGlvbiBpdGVyYXRvclJlc3VsdCAocGFpciwga2luZCkge1xuICBsZXQgcmVzdWx0XG5cbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSBhIHZhbHVlIGRldGVybWluZWQgYnkgdGhlIHZhbHVlIG9mIGtpbmQ6XG4gIHN3aXRjaCAoa2luZCkge1xuICAgIGNhc2UgJ2tleSc6IHtcbiAgICAgIC8vIDEuIExldCBpZGxLZXkgYmUgcGFpclx1MjAxOXMga2V5LlxuICAgICAgLy8gMi4gTGV0IGtleSBiZSB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgaWRsS2V5IHRvIGFuXG4gICAgICAvLyAgICBFQ01BU2NyaXB0IHZhbHVlLlxuICAgICAgLy8gMy4gcmVzdWx0IGlzIGtleS5cbiAgICAgIHJlc3VsdCA9IHBhaXJbMF1cbiAgICAgIGJyZWFrXG4gICAgfVxuICAgIGNhc2UgJ3ZhbHVlJzoge1xuICAgICAgLy8gMS4gTGV0IGlkbFZhbHVlIGJlIHBhaXJcdTIwMTlzIHZhbHVlLlxuICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBpZGxWYWx1ZSB0b1xuICAgICAgLy8gICAgYW4gRUNNQVNjcmlwdCB2YWx1ZS5cbiAgICAgIC8vIDMuIHJlc3VsdCBpcyB2YWx1ZS5cbiAgICAgIHJlc3VsdCA9IHBhaXJbMV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICAgIGNhc2UgJ2tleSt2YWx1ZSc6IHtcbiAgICAgIC8vIDEuIExldCBpZGxLZXkgYmUgcGFpclx1MjAxOXMga2V5LlxuICAgICAgLy8gMi4gTGV0IGlkbFZhbHVlIGJlIHBhaXJcdTIwMTlzIHZhbHVlLlxuICAgICAgLy8gMy4gTGV0IGtleSBiZSB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgaWRsS2V5IHRvIGFuXG4gICAgICAvLyAgICBFQ01BU2NyaXB0IHZhbHVlLlxuICAgICAgLy8gNC4gTGV0IHZhbHVlIGJlIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBpZGxWYWx1ZSB0b1xuICAgICAgLy8gICAgYW4gRUNNQVNjcmlwdCB2YWx1ZS5cbiAgICAgIC8vIDUuIExldCBhcnJheSBiZSAhIEFycmF5Q3JlYXRlKDIpLlxuICAgICAgLy8gNi4gQ2FsbCAhIENyZWF0ZURhdGFQcm9wZXJ0eShhcnJheSwgXCIwXCIsIGtleSkuXG4gICAgICAvLyA3LiBDYWxsICEgQ3JlYXRlRGF0YVByb3BlcnR5KGFycmF5LCBcIjFcIiwgdmFsdWUpLlxuICAgICAgLy8gOC4gcmVzdWx0IGlzIGFycmF5LlxuICAgICAgcmVzdWx0ID0gcGFpclxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICAvLyAyLiBSZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChyZXN1bHQsIGZhbHNlKS5cbiAgcmV0dXJuIHsgdmFsdWU6IHJlc3VsdCwgZG9uZTogZmFsc2UgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHktZnVsbHktcmVhZFxuICovXG5hc3luYyBmdW5jdGlvbiBmdWxseVJlYWRCb2R5IChib2R5LCBwcm9jZXNzQm9keSwgcHJvY2Vzc0JvZHlFcnJvcikge1xuICAvLyAxLiBJZiB0YXNrRGVzdGluYXRpb24gaXMgbnVsbCwgdGhlbiBzZXQgdGFza0Rlc3RpbmF0aW9uIHRvXG4gIC8vICAgIHRoZSByZXN1bHQgb2Ygc3RhcnRpbmcgYSBuZXcgcGFyYWxsZWwgcXVldWUuXG5cbiAgLy8gMi4gTGV0IHN1Y2Nlc3NTdGVwcyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgYnl0ZXMgYmUgdG8gcXVldWUgYVxuICAvLyAgICBmZXRjaCB0YXNrIHRvIHJ1biBwcm9jZXNzQm9keSBnaXZlbiBieXRlcywgd2l0aCB0YXNrRGVzdGluYXRpb24uXG4gIGNvbnN0IHN1Y2Nlc3NTdGVwcyA9IHByb2Nlc3NCb2R5XG5cbiAgLy8gMy4gTGV0IGVycm9yU3RlcHMgYmUgdG8gcXVldWUgYSBmZXRjaCB0YXNrIHRvIHJ1biBwcm9jZXNzQm9keUVycm9yLFxuICAvLyAgICB3aXRoIHRhc2tEZXN0aW5hdGlvbi5cbiAgY29uc3QgZXJyb3JTdGVwcyA9IHByb2Nlc3NCb2R5RXJyb3JcblxuICAvLyA0LiBMZXQgcmVhZGVyIGJlIHRoZSByZXN1bHQgb2YgZ2V0dGluZyBhIHJlYWRlciBmb3IgYm9keVx1MjAxOXMgc3RyZWFtLlxuICAvLyAgICBJZiB0aGF0IHRocmV3IGFuIGV4Y2VwdGlvbiwgdGhlbiBydW4gZXJyb3JTdGVwcyB3aXRoIHRoYXRcbiAgLy8gICAgZXhjZXB0aW9uIGFuZCByZXR1cm4uXG4gIGxldCByZWFkZXJcblxuICB0cnkge1xuICAgIHJlYWRlciA9IGJvZHkuc3RyZWFtLmdldFJlYWRlcigpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnJvclN0ZXBzKGUpXG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyA1LiBSZWFkIGFsbCBieXRlcyBmcm9tIHJlYWRlciwgZ2l2ZW4gc3VjY2Vzc1N0ZXBzIGFuZCBlcnJvclN0ZXBzLlxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlYWRBbGxCeXRlcyhyZWFkZXIpXG4gICAgc3VjY2Vzc1N0ZXBzKHJlc3VsdClcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9yU3RlcHMoZSlcbiAgfVxufVxuXG4vKiogQHR5cGUge1JlYWRhYmxlU3RyZWFtfSAqL1xubGV0IFJlYWRhYmxlU3RyZWFtID0gZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbVxuXG5mdW5jdGlvbiBpc1JlYWRhYmxlU3RyZWFtTGlrZSAoc3RyZWFtKSB7XG4gIGlmICghUmVhZGFibGVTdHJlYW0pIHtcbiAgICBSZWFkYWJsZVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbS93ZWInKS5SZWFkYWJsZVN0cmVhbVxuICB9XG5cbiAgcmV0dXJuIHN0cmVhbSBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtIHx8IChcbiAgICBzdHJlYW1bU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ1JlYWRhYmxlU3RyZWFtJyAmJlxuICAgIHR5cGVvZiBzdHJlYW0udGVlID09PSAnZnVuY3Rpb24nXG4gIClcbn1cblxuY29uc3QgTUFYSU1VTV9BUkdVTUVOVF9MRU5HVEggPSA2NTUzNVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2lzb21vcnBoaWMtZGVjb2RlXG4gKiBAcGFyYW0ge251bWJlcltdfFVpbnQ4QXJyYXl9IGlucHV0XG4gKi9cbmZ1bmN0aW9uIGlzb21vcnBoaWNEZWNvZGUgKGlucHV0KSB7XG4gIC8vIDEuIFRvIGlzb21vcnBoaWMgZGVjb2RlIGEgYnl0ZSBzZXF1ZW5jZSBpbnB1dCwgcmV0dXJuIGEgc3RyaW5nIHdob3NlIGNvZGUgcG9pbnRcbiAgLy8gICAgbGVuZ3RoIGlzIGVxdWFsIHRvIGlucHV0XHUyMDE5cyBsZW5ndGggYW5kIHdob3NlIGNvZGUgcG9pbnRzIGhhdmUgdGhlIHNhbWUgdmFsdWVzXG4gIC8vICAgIGFzIHRoZSB2YWx1ZXMgb2YgaW5wdXRcdTIwMTlzIGJ5dGVzLCBpbiB0aGUgc2FtZSBvcmRlci5cblxuICBpZiAoaW5wdXQubGVuZ3RoIDwgTUFYSU1VTV9BUkdVTUVOVF9MRU5HVEgpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSguLi5pbnB1dClcbiAgfVxuXG4gIHJldHVybiBpbnB1dC5yZWR1Y2UoKHByZXZpb3VzLCBjdXJyZW50KSA9PiBwcmV2aW91cyArIFN0cmluZy5mcm9tQ2hhckNvZGUoY3VycmVudCksICcnKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVhZGFibGVTdHJlYW1Db250cm9sbGVyPFVpbnQ4QXJyYXk+fSBjb250cm9sbGVyXG4gKi9cbmZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtQ2xvc2UgKGNvbnRyb2xsZXIpIHtcbiAgdHJ5IHtcbiAgICBjb250cm9sbGVyLmNsb3NlKClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gVE9ETzogYWRkIGNvbW1lbnQgZXhwbGFpbmluZyB3aHkgdGhpcyBlcnJvciBvY2N1cnMuXG4gICAgaWYgKCFlcnIubWVzc2FnZS5pbmNsdWRlcygnQ29udHJvbGxlciBpcyBhbHJlYWR5IGNsb3NlZCcpKSB7XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNpc29tb3JwaGljLWVuY29kZVxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0XG4gKi9cbmZ1bmN0aW9uIGlzb21vcnBoaWNFbmNvZGUgKGlucHV0KSB7XG4gIC8vIDEuIEFzc2VydDogaW5wdXQgY29udGFpbnMgbm8gY29kZSBwb2ludHMgZ3JlYXRlciB0aGFuIFUrMDBGRi5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIGFzc2VydChpbnB1dC5jaGFyQ29kZUF0KGkpIDw9IDB4RkYpXG4gIH1cblxuICAvLyAyLiBSZXR1cm4gYSBieXRlIHNlcXVlbmNlIHdob3NlIGxlbmd0aCBpcyBlcXVhbCB0byBpbnB1dFx1MjAxOXMgY29kZVxuICAvLyAgICBwb2ludCBsZW5ndGggYW5kIHdob3NlIGJ5dGVzIGhhdmUgdGhlIHNhbWUgdmFsdWVzIGFzIHRoZVxuICAvLyAgICB2YWx1ZXMgb2YgaW5wdXRcdTIwMTlzIGNvZGUgcG9pbnRzLCBpbiB0aGUgc2FtZSBvcmRlclxuICByZXR1cm4gaW5wdXRcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5vcmcvI3JlYWRhYmxlc3RyZWFtZGVmYXVsdHJlYWRlci1yZWFkLWFsbC1ieXRlc1xuICogQHNlZSBodHRwczovL3N0cmVhbXMuc3BlYy53aGF0d2cub3JnLyNyZWFkLWxvb3BcbiAqIEBwYXJhbSB7UmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyfSByZWFkZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVhZEFsbEJ5dGVzIChyZWFkZXIpIHtcbiAgY29uc3QgYnl0ZXMgPSBbXVxuICBsZXQgYnl0ZUxlbmd0aCA9IDBcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHsgZG9uZSwgdmFsdWU6IGNodW5rIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpXG5cbiAgICBpZiAoZG9uZSkge1xuICAgICAgLy8gMS4gQ2FsbCBzdWNjZXNzU3RlcHMgd2l0aCBieXRlcy5cbiAgICAgIHJldHVybiBCdWZmZXIuY29uY2F0KGJ5dGVzLCBieXRlTGVuZ3RoKVxuICAgIH1cblxuICAgIC8vIDEuIElmIGNodW5rIGlzIG5vdCBhIFVpbnQ4QXJyYXkgb2JqZWN0LCBjYWxsIGZhaWx1cmVTdGVwc1xuICAgIC8vICAgIHdpdGggYSBUeXBlRXJyb3IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgIGlmICghaXNVaW50OEFycmF5KGNodW5rKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVjZWl2ZWQgbm9uLVVpbnQ4QXJyYXkgY2h1bmsnKVxuICAgIH1cblxuICAgIC8vIDIuIEFwcGVuZCB0aGUgYnl0ZXMgcmVwcmVzZW50ZWQgYnkgY2h1bmsgdG8gYnl0ZXMuXG4gICAgYnl0ZXMucHVzaChjaHVuaylcbiAgICBieXRlTGVuZ3RoICs9IGNodW5rLmxlbmd0aFxuXG4gICAgLy8gMy4gUmVhZC1sb29wIGdpdmVuIHJlYWRlciwgYnl0ZXMsIHN1Y2Nlc3NTdGVwcywgYW5kIGZhaWx1cmVTdGVwcy5cbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2lzLWxvY2FsXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKi9cbmZ1bmN0aW9uIHVybElzTG9jYWwgKHVybCkge1xuICBhc3NlcnQoJ3Byb3RvY29sJyBpbiB1cmwpIC8vIGVuc3VyZSBpdCdzIGEgdXJsIG9iamVjdFxuXG4gIGNvbnN0IHByb3RvY29sID0gdXJsLnByb3RvY29sXG5cbiAgcmV0dXJuIHByb3RvY29sID09PSAnYWJvdXQ6JyB8fCBwcm90b2NvbCA9PT0gJ2Jsb2I6JyB8fCBwcm90b2NvbCA9PT0gJ2RhdGE6J1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG4gKi9cbmZ1bmN0aW9uIHVybEhhc0h0dHBzU2NoZW1lICh1cmwpIHtcbiAgaWYgKHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHVybC5zdGFydHNXaXRoKCdodHRwczonKVxuICB9XG5cbiAgcmV0dXJuIHVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOidcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLXNjaGVtZVxuICogQHBhcmFtIHtVUkx9IHVybFxuICovXG5mdW5jdGlvbiB1cmxJc0h0dHBIdHRwc1NjaGVtZSAodXJsKSB7XG4gIGFzc2VydCgncHJvdG9jb2wnIGluIHVybCkgLy8gZW5zdXJlIGl0J3MgYSB1cmwgb2JqZWN0XG5cbiAgY29uc3QgcHJvdG9jb2wgPSB1cmwucHJvdG9jb2xcblxuICByZXR1cm4gcHJvdG9jb2wgPT09ICdodHRwOicgfHwgcHJvdG9jb2wgPT09ICdodHRwczonXG59XG5cbi8qKlxuICogRmV0Y2ggc3VwcG9ydHMgbm9kZSA+PSAxNi44LjAsIGJ1dCBPYmplY3QuaGFzT3duIHdhcyBhZGRlZCBpbiB2MTYuOS4wLlxuICovXG5jb25zdCBoYXNPd24gPSBPYmplY3QuaGFzT3duIHx8ICgoZGljdCwga2V5KSA9PiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGljdCwga2V5KSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQWJvcnRlZCxcbiAgaXNDYW5jZWxsZWQsXG4gIGNyZWF0ZURlZmVycmVkUHJvbWlzZSxcbiAgUmVhZGFibGVTdHJlYW1Gcm9tLFxuICB0b1VTVlN0cmluZyxcbiAgdHJ5VXBncmFkZVJlcXVlc3RUb0FQb3RlbnRpYWxseVRydXN0d29ydGh5VVJMLFxuICBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSxcbiAgZGV0ZXJtaW5lUmVxdWVzdHNSZWZlcnJlcixcbiAgbWFrZVBvbGljeUNvbnRhaW5lcixcbiAgY2xvbmVQb2xpY3lDb250YWluZXIsXG4gIGFwcGVuZEZldGNoTWV0YWRhdGEsXG4gIGFwcGVuZFJlcXVlc3RPcmlnaW5IZWFkZXIsXG4gIFRBT0NoZWNrLFxuICBjb3JzQ2hlY2ssXG4gIGNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayxcbiAgY3JlYXRlT3BhcXVlVGltaW5nSW5mbyxcbiAgc2V0UmVxdWVzdFJlZmVycmVyUG9saWN5T25SZWRpcmVjdCxcbiAgaXNWYWxpZEhUVFBUb2tlbixcbiAgcmVxdWVzdEJhZFBvcnQsXG4gIHJlcXVlc3RDdXJyZW50VVJMLFxuICByZXNwb25zZVVSTCxcbiAgcmVzcG9uc2VMb2NhdGlvblVSTCxcbiAgaXNCbG9iTGlrZSxcbiAgaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5LFxuICBpc1ZhbGlkUmVhc29uUGhyYXNlLFxuICBzYW1lT3JpZ2luLFxuICBub3JtYWxpemVNZXRob2QsXG4gIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyxcbiAgbWFrZUl0ZXJhdG9yLFxuICBpc1ZhbGlkSGVhZGVyTmFtZSxcbiAgaXNWYWxpZEhlYWRlclZhbHVlLFxuICBoYXNPd24sXG4gIGlzRXJyb3JMaWtlLFxuICBmdWxseVJlYWRCb2R5LFxuICBieXRlc01hdGNoLFxuICBpc1JlYWRhYmxlU3RyZWFtTGlrZSxcbiAgcmVhZGFibGVTdHJlYW1DbG9zZSxcbiAgaXNvbW9ycGhpY0VuY29kZSxcbiAgaXNvbW9ycGhpY0RlY29kZSxcbiAgdXJsSXNMb2NhbCxcbiAgdXJsSGFzSHR0cHNTY2hlbWUsXG4gIHVybElzSHR0cEh0dHBzU2NoZW1lLFxuICByZWFkQWxsQnl0ZXMsXG4gIG5vcm1hbGl6ZU1ldGhvZFJlY29yZCxcbiAgcGFyc2VNZXRhZGF0YVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga1VybDogU3ltYm9sKCd1cmwnKSxcbiAga0hlYWRlcnM6IFN5bWJvbCgnaGVhZGVycycpLFxuICBrU2lnbmFsOiBTeW1ib2woJ3NpZ25hbCcpLFxuICBrU3RhdGU6IFN5bWJvbCgnc3RhdGUnKSxcbiAga0d1YXJkOiBTeW1ib2woJ2d1YXJkJyksXG4gIGtSZWFsbTogU3ltYm9sKCdyZWFsbScpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgdHlwZXMgfSA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgeyBoYXNPd24sIHRvVVNWU3RyaW5nIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuXG4vKiogQHR5cGUge2ltcG9ydCgnLi4vLi4vdHlwZXMvd2ViaWRsJykuV2ViaWRsfSAqL1xuY29uc3Qgd2ViaWRsID0ge31cbndlYmlkbC5jb252ZXJ0ZXJzID0ge31cbndlYmlkbC51dGlsID0ge31cbndlYmlkbC5lcnJvcnMgPSB7fVxuXG53ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbiA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gIHJldHVybiBuZXcgVHlwZUVycm9yKGAke21lc3NhZ2UuaGVhZGVyfTogJHttZXNzYWdlLm1lc3NhZ2V9YClcbn1cblxud2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgY29uc3QgcGx1cmFsID0gY29udGV4dC50eXBlcy5sZW5ndGggPT09IDEgPyAnJyA6ICcgb25lIG9mJ1xuICBjb25zdCBtZXNzYWdlID1cbiAgICBgJHtjb250ZXh0LmFyZ3VtZW50fSBjb3VsZCBub3QgYmUgY29udmVydGVkIHRvYCArXG4gICAgYCR7cGx1cmFsfTogJHtjb250ZXh0LnR5cGVzLmpvaW4oJywgJyl9LmBcblxuICByZXR1cm4gd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgIGhlYWRlcjogY29udGV4dC5wcmVmaXgsXG4gICAgbWVzc2FnZVxuICB9KVxufVxuXG53ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIHJldHVybiB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgaGVhZGVyOiBjb250ZXh0LnByZWZpeCxcbiAgICBtZXNzYWdlOiBgXCIke2NvbnRleHQudmFsdWV9XCIgaXMgYW4gaW52YWxpZCAke2NvbnRleHQudHlwZX0uYFxuICB9KVxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2ltcGxlbWVudHNcbndlYmlkbC5icmFuZENoZWNrID0gZnVuY3Rpb24gKFYsIEksIG9wdHMgPSB1bmRlZmluZWQpIHtcbiAgaWYgKG9wdHM/LnN0cmljdCAhPT0gZmFsc2UgJiYgIShWIGluc3RhbmNlb2YgSSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbGxlZ2FsIGludm9jYXRpb24nKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBWPy5bU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gSS5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXVxuICB9XG59XG5cbndlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrID0gZnVuY3Rpb24gKHsgbGVuZ3RoIH0sIG1pbiwgY3R4KSB7XG4gIGlmIChsZW5ndGggPCBtaW4pIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICBtZXNzYWdlOiBgJHttaW59IGFyZ3VtZW50JHttaW4gIT09IDEgPyAncycgOiAnJ30gcmVxdWlyZWQsIGAgK1xuICAgICAgICAgICAgICAgYGJ1dCR7bGVuZ3RoID8gJyBvbmx5JyA6ICcnfSAke2xlbmd0aH0gZm91bmQuYCxcbiAgICAgIC4uLmN0eFxuICAgIH0pXG4gIH1cbn1cblxud2ViaWRsLmlsbGVnYWxDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHtcbiAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgIGhlYWRlcjogJ1R5cGVFcnJvcicsXG4gICAgbWVzc2FnZTogJ0lsbGVnYWwgY29uc3RydWN0b3InXG4gIH0pXG59XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZWNtYXNjcmlwdC1kYXRhLXR5cGVzLWFuZC12YWx1ZXNcbndlYmlkbC51dGlsLlR5cGUgPSBmdW5jdGlvbiAoVikge1xuICBzd2l0Y2ggKHR5cGVvZiBWKSB7XG4gICAgY2FzZSAndW5kZWZpbmVkJzogcmV0dXJuICdVbmRlZmluZWQnXG4gICAgY2FzZSAnYm9vbGVhbic6IHJldHVybiAnQm9vbGVhbidcbiAgICBjYXNlICdzdHJpbmcnOiByZXR1cm4gJ1N0cmluZydcbiAgICBjYXNlICdzeW1ib2wnOiByZXR1cm4gJ1N5bWJvbCdcbiAgICBjYXNlICdudW1iZXInOiByZXR1cm4gJ051bWJlcidcbiAgICBjYXNlICdiaWdpbnQnOiByZXR1cm4gJ0JpZ0ludCdcbiAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgY2FzZSAnb2JqZWN0Jzoge1xuICAgICAgaWYgKFYgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuICdOdWxsJ1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gJ09iamVjdCdcbiAgICB9XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNhYnN0cmFjdC1vcGRlZi1jb252ZXJ0dG9pbnRcbndlYmlkbC51dGlsLkNvbnZlcnRUb0ludCA9IGZ1bmN0aW9uIChWLCBiaXRMZW5ndGgsIHNpZ25lZG5lc3MsIG9wdHMgPSB7fSkge1xuICBsZXQgdXBwZXJCb3VuZFxuICBsZXQgbG93ZXJCb3VuZFxuXG4gIC8vIDEuIElmIGJpdExlbmd0aCBpcyA2NCwgdGhlbjpcbiAgaWYgKGJpdExlbmd0aCA9PT0gNjQpIHtcbiAgICAvLyAxLiBMZXQgdXBwZXJCb3VuZCBiZSAyXjUzIFx1MjIxMiAxLlxuICAgIHVwcGVyQm91bmQgPSBNYXRoLnBvdygyLCA1MykgLSAxXG5cbiAgICAvLyAyLiBJZiBzaWduZWRuZXNzIGlzIFwidW5zaWduZWRcIiwgdGhlbiBsZXQgbG93ZXJCb3VuZCBiZSAwLlxuICAgIGlmIChzaWduZWRuZXNzID09PSAndW5zaWduZWQnKSB7XG4gICAgICBsb3dlckJvdW5kID0gMFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAzLiBPdGhlcndpc2UgbGV0IGxvd2VyQm91bmQgYmUgXHUyMjEyMl41MyArIDEuXG4gICAgICBsb3dlckJvdW5kID0gTWF0aC5wb3coLTIsIDUzKSArIDFcbiAgICB9XG4gIH0gZWxzZSBpZiAoc2lnbmVkbmVzcyA9PT0gJ3Vuc2lnbmVkJykge1xuICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgc2lnbmVkbmVzcyBpcyBcInVuc2lnbmVkXCIsIHRoZW46XG5cbiAgICAvLyAxLiBMZXQgbG93ZXJCb3VuZCBiZSAwLlxuICAgIGxvd2VyQm91bmQgPSAwXG5cbiAgICAvLyAyLiBMZXQgdXBwZXJCb3VuZCBiZSAyXmJpdExlbmd0aCBcdTIyMTIgMS5cbiAgICB1cHBlckJvdW5kID0gTWF0aC5wb3coMiwgYml0TGVuZ3RoKSAtIDFcbiAgfSBlbHNlIHtcbiAgICAvLyAzLiBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBMZXQgbG93ZXJCb3VuZCBiZSAtMl5iaXRMZW5ndGggXHUyMjEyIDEuXG4gICAgbG93ZXJCb3VuZCA9IE1hdGgucG93KC0yLCBiaXRMZW5ndGgpIC0gMVxuXG4gICAgLy8gMi4gTGV0IHVwcGVyQm91bmQgYmUgMl5iaXRMZW5ndGggXHUyMjEyIDEgXHUyMjEyIDEuXG4gICAgdXBwZXJCb3VuZCA9IE1hdGgucG93KDIsIGJpdExlbmd0aCAtIDEpIC0gMVxuICB9XG5cbiAgLy8gNC4gTGV0IHggYmUgPyBUb051bWJlcihWKS5cbiAgbGV0IHggPSBOdW1iZXIoVilcblxuICAvLyA1LiBJZiB4IGlzIFx1MjIxMjAsIHRoZW4gc2V0IHggdG8gKzAuXG4gIGlmICh4ID09PSAwKSB7XG4gICAgeCA9IDBcbiAgfVxuXG4gIC8vIDYuIElmIHRoZSBjb252ZXJzaW9uIGlzIHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0VuZm9yY2VSYW5nZV0gZXh0ZW5kZWQgYXR0cmlidXRlLCB0aGVuOlxuICBpZiAob3B0cy5lbmZvcmNlUmFuZ2UgPT09IHRydWUpIHtcbiAgICAvLyAxLiBJZiB4IGlzIE5hTiwgK1x1MjIxRSwgb3IgXHUyMjEyXHUyMjFFLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChcbiAgICAgIE51bWJlci5pc05hTih4KSB8fFxuICAgICAgeCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIHx8XG4gICAgICB4ID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFlcbiAgICApIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnSW50ZWdlciBjb252ZXJzaW9uJyxcbiAgICAgICAgbWVzc2FnZTogYENvdWxkIG5vdCBjb252ZXJ0ICR7Vn0gdG8gYW4gaW50ZWdlci5gXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIFNldCB4IHRvIEludGVnZXJQYXJ0KHgpLlxuICAgIHggPSB3ZWJpZGwudXRpbC5JbnRlZ2VyUGFydCh4KVxuXG4gICAgLy8gMy4gSWYgeCA8IGxvd2VyQm91bmQgb3IgeCA+IHVwcGVyQm91bmQsIHRoZW5cbiAgICAvLyAgICB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoeCA8IGxvd2VyQm91bmQgfHwgeCA+IHVwcGVyQm91bmQpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnSW50ZWdlciBjb252ZXJzaW9uJyxcbiAgICAgICAgbWVzc2FnZTogYFZhbHVlIG11c3QgYmUgYmV0d2VlbiAke2xvd2VyQm91bmR9LSR7dXBwZXJCb3VuZH0sIGdvdCAke3h9LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gNC4gUmV0dXJuIHguXG4gICAgcmV0dXJuIHhcbiAgfVxuXG4gIC8vIDcuIElmIHggaXMgbm90IE5hTiBhbmQgdGhlIGNvbnZlcnNpb24gaXMgdG8gYW4gSURMXG4gIC8vICAgIHR5cGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBbQ2xhbXBdIGV4dGVuZGVkXG4gIC8vICAgIGF0dHJpYnV0ZSwgdGhlbjpcbiAgaWYgKCFOdW1iZXIuaXNOYU4oeCkgJiYgb3B0cy5jbGFtcCA9PT0gdHJ1ZSkge1xuICAgIC8vIDEuIFNldCB4IHRvIG1pbihtYXgoeCwgbG93ZXJCb3VuZCksIHVwcGVyQm91bmQpLlxuICAgIHggPSBNYXRoLm1pbihNYXRoLm1heCh4LCBsb3dlckJvdW5kKSwgdXBwZXJCb3VuZClcblxuICAgIC8vIDIuIFJvdW5kIHggdG8gdGhlIG5lYXJlc3QgaW50ZWdlciwgY2hvb3NpbmcgdGhlXG4gICAgLy8gICAgZXZlbiBpbnRlZ2VyIGlmIGl0IGxpZXMgaGFsZndheSBiZXR3ZWVuIHR3byxcbiAgICAvLyAgICBhbmQgY2hvb3NpbmcgKzAgcmF0aGVyIHRoYW4gXHUyMjEyMC5cbiAgICBpZiAoTWF0aC5mbG9vcih4KSAlIDIgPT09IDApIHtcbiAgICAgIHggPSBNYXRoLmZsb29yKHgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHggPSBNYXRoLmNlaWwoeClcbiAgICB9XG5cbiAgICAvLyAzLiBSZXR1cm4geC5cbiAgICByZXR1cm4geFxuICB9XG5cbiAgLy8gOC4gSWYgeCBpcyBOYU4sICswLCArXHUyMjFFLCBvciBcdTIyMTJcdTIyMUUsIHRoZW4gcmV0dXJuICswLlxuICBpZiAoXG4gICAgTnVtYmVyLmlzTmFOKHgpIHx8XG4gICAgKHggPT09IDAgJiYgT2JqZWN0LmlzKDAsIHgpKSB8fFxuICAgIHggPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSB8fFxuICAgIHggPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWVxuICApIHtcbiAgICByZXR1cm4gMFxuICB9XG5cbiAgLy8gOS4gU2V0IHggdG8gSW50ZWdlclBhcnQoeCkuXG4gIHggPSB3ZWJpZGwudXRpbC5JbnRlZ2VyUGFydCh4KVxuXG4gIC8vIDEwLiBTZXQgeCB0byB4IG1vZHVsbyAyXmJpdExlbmd0aC5cbiAgeCA9IHggJSBNYXRoLnBvdygyLCBiaXRMZW5ndGgpXG5cbiAgLy8gMTEuIElmIHNpZ25lZG5lc3MgaXMgXCJzaWduZWRcIiBhbmQgeCBcdTIyNjUgMl5iaXRMZW5ndGggXHUyMjEyIDEsXG4gIC8vICAgIHRoZW4gcmV0dXJuIHggXHUyMjEyIDJeYml0TGVuZ3RoLlxuICBpZiAoc2lnbmVkbmVzcyA9PT0gJ3NpZ25lZCcgJiYgeCA+PSBNYXRoLnBvdygyLCBiaXRMZW5ndGgpIC0gMSkge1xuICAgIHJldHVybiB4IC0gTWF0aC5wb3coMiwgYml0TGVuZ3RoKVxuICB9XG5cbiAgLy8gMTIuIE90aGVyd2lzZSwgcmV0dXJuIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jYWJzdHJhY3Qtb3BkZWYtaW50ZWdlcnBhcnRcbndlYmlkbC51dGlsLkludGVnZXJQYXJ0ID0gZnVuY3Rpb24gKG4pIHtcbiAgLy8gMS4gTGV0IHIgYmUgZmxvb3IoYWJzKG4pKS5cbiAgY29uc3QgciA9IE1hdGguZmxvb3IoTWF0aC5hYnMobikpXG5cbiAgLy8gMi4gSWYgbiA8IDAsIHRoZW4gcmV0dXJuIC0xIFx1MDBENyByLlxuICBpZiAobiA8IDApIHtcbiAgICByZXR1cm4gLTEgKiByXG4gIH1cblxuICAvLyAzLiBPdGhlcndpc2UsIHJldHVybiByLlxuICByZXR1cm4gclxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLXNlcXVlbmNlXG53ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoY29udmVydGVyKSB7XG4gIHJldHVybiAoVikgPT4ge1xuICAgIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1NlcXVlbmNlJyxcbiAgICAgICAgbWVzc2FnZTogYFZhbHVlIG9mIHR5cGUgJHt3ZWJpZGwudXRpbC5UeXBlKFYpfSBpcyBub3QgYW4gT2JqZWN0LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IG1ldGhvZCBiZSA/IEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS5cbiAgICAvKiogQHR5cGUge0dlbmVyYXRvcn0gKi9cbiAgICBjb25zdCBtZXRob2QgPSBWPy5bU3ltYm9sLml0ZXJhdG9yXT8uKClcbiAgICBjb25zdCBzZXEgPSBbXVxuXG4gICAgLy8gMy4gSWYgbWV0aG9kIGlzIHVuZGVmaW5lZCwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKFxuICAgICAgbWV0aG9kID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHR5cGVvZiBtZXRob2QubmV4dCAhPT0gJ2Z1bmN0aW9uJ1xuICAgICkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdTZXF1ZW5jZScsXG4gICAgICAgIG1lc3NhZ2U6ICdPYmplY3QgaXMgbm90IGFuIGl0ZXJhdG9yLidcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNjcmVhdGUtc2VxdWVuY2UtZnJvbS1pdGVyYWJsZVxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBtZXRob2QubmV4dCgpXG5cbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIHNlcS5wdXNoKGNvbnZlcnRlcih2YWx1ZSkpXG4gICAgfVxuXG4gICAgcmV0dXJuIHNlcVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtdG8tcmVjb3JkXG53ZWJpZGwucmVjb3JkQ29udmVydGVyID0gZnVuY3Rpb24gKGtleUNvbnZlcnRlciwgdmFsdWVDb252ZXJ0ZXIpIHtcbiAgcmV0dXJuIChPKSA9PiB7XG4gICAgLy8gMS4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAod2ViaWRsLnV0aWwuVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnUmVjb3JkJyxcbiAgICAgICAgbWVzc2FnZTogYFZhbHVlIG9mIHR5cGUgJHt3ZWJpZGwudXRpbC5UeXBlKE8pfSBpcyBub3QgYW4gT2JqZWN0LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBpbnN0YW5jZSBvZiByZWNvcmQ8SywgVj4uXG4gICAgY29uc3QgcmVzdWx0ID0ge31cblxuICAgIGlmICghdHlwZXMuaXNQcm94eShPKSkge1xuICAgICAgLy8gT2JqZWN0LmtleXMgb25seSByZXR1cm5zIGVudW1lcmFibGUgcHJvcGVydGllc1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKE8pXG5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgSy5cbiAgICAgICAgY29uc3QgdHlwZWRLZXkgPSBrZXlDb252ZXJ0ZXIoa2V5KVxuXG4gICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/IEdldChPLCBrZXkpLlxuICAgICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgVi5cbiAgICAgICAgY29uc3QgdHlwZWRWYWx1ZSA9IHZhbHVlQ29udmVydGVyKE9ba2V5XSlcblxuICAgICAgICAvLyA0LiBTZXQgcmVzdWx0W3R5cGVkS2V5XSB0byB0eXBlZFZhbHVlLlxuICAgICAgICByZXN1bHRbdHlwZWRLZXldID0gdHlwZWRWYWx1ZVxuICAgICAgfVxuXG4gICAgICAvLyA1LiBSZXR1cm4gcmVzdWx0LlxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cblxuICAgIC8vIDMuIExldCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuXG4gICAgY29uc3Qga2V5cyA9IFJlZmxlY3Qub3duS2V5cyhPKVxuXG4gICAgLy8gNC4gRm9yIGVhY2gga2V5IG9mIGtleXMuXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShrZXkpLlxuICAgICAgY29uc3QgZGVzYyA9IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIGtleSlcblxuICAgICAgLy8gMi4gSWYgZGVzYyBpcyBub3QgdW5kZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6XG4gICAgICBpZiAoZGVzYz8uZW51bWVyYWJsZSkge1xuICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBLLlxuICAgICAgICBjb25zdCB0eXBlZEtleSA9IGtleUNvbnZlcnRlcihrZXkpXG5cbiAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8sIGtleSkuXG4gICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLlxuICAgICAgICBjb25zdCB0eXBlZFZhbHVlID0gdmFsdWVDb252ZXJ0ZXIoT1trZXldKVxuXG4gICAgICAgIC8vIDQuIFNldCByZXN1bHRbdHlwZWRLZXldIHRvIHR5cGVkVmFsdWUuXG4gICAgICAgIHJlc3VsdFt0eXBlZEtleV0gPSB0eXBlZFZhbHVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS4gUmV0dXJuIHJlc3VsdC5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cbn1cblxud2ViaWRsLmludGVyZmFjZUNvbnZlcnRlciA9IGZ1bmN0aW9uIChpKSB7XG4gIHJldHVybiAoViwgb3B0cyA9IHt9KSA9PiB7XG4gICAgaWYgKG9wdHMuc3RyaWN0ICE9PSBmYWxzZSAmJiAhKFYgaW5zdGFuY2VvZiBpKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6IGkubmFtZSxcbiAgICAgICAgbWVzc2FnZTogYEV4cGVjdGVkICR7Vn0gdG8gYmUgYW4gaW5zdGFuY2Ugb2YgJHtpLm5hbWV9LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIFZcbiAgfVxufVxuXG53ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlciA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJzKSB7XG4gIHJldHVybiAoZGljdGlvbmFyeSkgPT4ge1xuICAgIGNvbnN0IHR5cGUgPSB3ZWJpZGwudXRpbC5UeXBlKGRpY3Rpb25hcnkpXG4gICAgY29uc3QgZGljdCA9IHt9XG5cbiAgICBpZiAodHlwZSA9PT0gJ051bGwnIHx8IHR5cGUgPT09ICdVbmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gZGljdFxuICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gJ09iamVjdCcpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnRGljdGlvbmFyeScsXG4gICAgICAgIG1lc3NhZ2U6IGBFeHBlY3RlZCAke2RpY3Rpb25hcnl9IHRvIGJlIG9uZSBvZjogTnVsbCwgVW5kZWZpbmVkLCBPYmplY3QuYFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG9wdGlvbnMgb2YgY29udmVydGVycykge1xuICAgICAgY29uc3QgeyBrZXksIGRlZmF1bHRWYWx1ZSwgcmVxdWlyZWQsIGNvbnZlcnRlciB9ID0gb3B0aW9uc1xuXG4gICAgICBpZiAocmVxdWlyZWQgPT09IHRydWUpIHtcbiAgICAgICAgaWYgKCFoYXNPd24oZGljdGlvbmFyeSwga2V5KSkge1xuICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgIGhlYWRlcjogJ0RpY3Rpb25hcnknLFxuICAgICAgICAgICAgbWVzc2FnZTogYE1pc3NpbmcgcmVxdWlyZWQga2V5IFwiJHtrZXl9XCIuYFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGV0IHZhbHVlID0gZGljdGlvbmFyeVtrZXldXG4gICAgICBjb25zdCBoYXNEZWZhdWx0ID0gaGFzT3duKG9wdGlvbnMsICdkZWZhdWx0VmFsdWUnKVxuXG4gICAgICAvLyBPbmx5IHVzZSBkZWZhdWx0VmFsdWUgaWYgdmFsdWUgaXMgdW5kZWZpbmVkIGFuZFxuICAgICAgLy8gYSBkZWZhdWx0VmFsdWUgb3B0aW9ucyB3YXMgcHJvdmlkZWQuXG4gICAgICBpZiAoaGFzRGVmYXVsdCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlID8/IGRlZmF1bHRWYWx1ZVxuICAgICAgfVxuXG4gICAgICAvLyBBIGtleSBjYW4gYmUgb3B0aW9uYWwgYW5kIGhhdmUgbm8gZGVmYXVsdCB2YWx1ZS5cbiAgICAgIC8vIFdoZW4gdGhpcyBoYXBwZW5zLCBkbyBub3QgcGVyZm9ybSBhIGNvbnZlcnNpb24sXG4gICAgICAvLyBhbmQgZG8gbm90IGFzc2lnbiB0aGUga2V5IGEgdmFsdWUuXG4gICAgICBpZiAocmVxdWlyZWQgfHwgaGFzRGVmYXVsdCB8fCB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbHVlID0gY29udmVydGVyKHZhbHVlKVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBvcHRpb25zLmFsbG93ZWRWYWx1ZXMgJiZcbiAgICAgICAgICAhb3B0aW9ucy5hbGxvd2VkVmFsdWVzLmluY2x1ZGVzKHZhbHVlKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICBoZWFkZXI6ICdEaWN0aW9uYXJ5JyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGAke3ZhbHVlfSBpcyBub3QgYW4gYWNjZXB0ZWQgdHlwZS4gRXhwZWN0ZWQgb25lIG9mICR7b3B0aW9ucy5hbGxvd2VkVmFsdWVzLmpvaW4oJywgJyl9LmBcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgZGljdFtrZXldID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGljdFxuICB9XG59XG5cbndlYmlkbC5udWxsYWJsZUNvbnZlcnRlciA9IGZ1bmN0aW9uIChjb252ZXJ0ZXIpIHtcbiAgcmV0dXJuIChWKSA9PiB7XG4gICAgaWYgKFYgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBWXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnZlcnRlcihWKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtRE9NU3RyaW5nXG53ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcgPSBmdW5jdGlvbiAoViwgb3B0cyA9IHt9KSB7XG4gIC8vIDEuIElmIFYgaXMgbnVsbCBhbmQgdGhlIGNvbnZlcnNpb24gaXMgdG8gYW4gSURMIHR5cGVcbiAgLy8gICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBbTGVnYWN5TnVsbFRvRW1wdHlTdHJpbmddXG4gIC8vICAgIGV4dGVuZGVkIGF0dHJpYnV0ZSwgdGhlbiByZXR1cm4gdGhlIERPTVN0cmluZyB2YWx1ZVxuICAvLyAgICB0aGF0IHJlcHJlc2VudHMgdGhlIGVtcHR5IHN0cmluZy5cbiAgaWYgKFYgPT09IG51bGwgJiYgb3B0cy5sZWdhY3lOdWxsVG9FbXB0eVN0cmluZykge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gMi4gTGV0IHggYmUgPyBUb1N0cmluZyhWKS5cbiAgaWYgKHR5cGVvZiBWID09PSAnc3ltYm9sJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NvdWxkIG5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgc3ltYm9sIHRvIHN0cmluZy4nKVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIHRoZSBJREwgRE9NU3RyaW5nIHZhbHVlIHRoYXQgcmVwcmVzZW50cyB0aGVcbiAgLy8gICAgc2FtZSBzZXF1ZW5jZSBvZiBjb2RlIHVuaXRzIGFzIHRoZSBvbmUgdGhlXG4gIC8vICAgIEVDTUFTY3JpcHQgU3RyaW5nIHZhbHVlIHggcmVwcmVzZW50cy5cbiAgcmV0dXJuIFN0cmluZyhWKVxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLUJ5dGVTdHJpbmdcbndlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcgPSBmdW5jdGlvbiAoVikge1xuICAvLyAxLiBMZXQgeCBiZSA/IFRvU3RyaW5nKFYpLlxuICAvLyBOb3RlOiBET01TdHJpbmcgY29udmVydGVyIHBlcmZvcm0gPyBUb1N0cmluZyhWKVxuICBjb25zdCB4ID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYpXG5cbiAgLy8gMi4gSWYgdGhlIHZhbHVlIG9mIGFueSBlbGVtZW50IG9mIHggaXMgZ3JlYXRlciB0aGFuXG4gIC8vICAgIDI1NSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHgubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgaWYgKHguY2hhckNvZGVBdChpbmRleCkgPiAyNTUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdDYW5ub3QgY29udmVydCBhcmd1bWVudCB0byBhIEJ5dGVTdHJpbmcgYmVjYXVzZSB0aGUgY2hhcmFjdGVyIGF0ICcgK1xuICAgICAgICBgaW5kZXggJHtpbmRleH0gaGFzIGEgdmFsdWUgb2YgJHt4LmNoYXJDb2RlQXQoaW5kZXgpfSB3aGljaCBpcyBncmVhdGVyIHRoYW4gMjU1LmBcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICAvLyAzLiBSZXR1cm4gYW4gSURMIEJ5dGVTdHJpbmcgdmFsdWUgd2hvc2UgbGVuZ3RoIGlzIHRoZVxuICAvLyAgICBsZW5ndGggb2YgeCwgYW5kIHdoZXJlIHRoZSB2YWx1ZSBvZiBlYWNoIGVsZW1lbnQgaXNcbiAgLy8gICAgdGhlIHZhbHVlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1VU1ZTdHJpbmdcbndlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyA9IHRvVVNWU3RyaW5nXG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtYm9vbGVhblxud2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbiA9IGZ1bmN0aW9uIChWKSB7XG4gIC8vIDEuIExldCB4IGJlIHRoZSByZXN1bHQgb2YgY29tcHV0aW5nIFRvQm9vbGVhbihWKS5cbiAgY29uc3QgeCA9IEJvb2xlYW4oVilcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCBib29sZWFuIHZhbHVlIHRoYXQgaXMgdGhlIG9uZSB0aGF0IHJlcHJlc2VudHNcbiAgLy8gICAgdGhlIHNhbWUgdHJ1dGggdmFsdWUgYXMgdGhlIEVDTUFTY3JpcHQgQm9vbGVhbiB2YWx1ZSB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLWFueVxud2ViaWRsLmNvbnZlcnRlcnMuYW55ID0gZnVuY3Rpb24gKFYpIHtcbiAgcmV0dXJuIFZcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1sb25nLWxvbmdcbndlYmlkbC5jb252ZXJ0ZXJzWydsb25nIGxvbmcnXSA9IGZ1bmN0aW9uIChWKSB7XG4gIC8vIDEuIExldCB4IGJlID8gQ29udmVydFRvSW50KFYsIDY0LCBcInNpZ25lZFwiKS5cbiAgY29uc3QgeCA9IHdlYmlkbC51dGlsLkNvbnZlcnRUb0ludChWLCA2NCwgJ3NpZ25lZCcpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBJREwgbG9uZyBsb25nIHZhbHVlIHRoYXQgcmVwcmVzZW50c1xuICAvLyAgICB0aGUgc2FtZSBudW1lcmljIHZhbHVlIGFzIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtdW5zaWduZWQtbG9uZy1sb25nXG53ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyBsb25nJ10gPSBmdW5jdGlvbiAoVikge1xuICAvLyAxLiBMZXQgeCBiZSA/IENvbnZlcnRUb0ludChWLCA2NCwgXCJ1bnNpZ25lZFwiKS5cbiAgY29uc3QgeCA9IHdlYmlkbC51dGlsLkNvbnZlcnRUb0ludChWLCA2NCwgJ3Vuc2lnbmVkJylcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUgdGhhdFxuICAvLyAgICByZXByZXNlbnRzIHRoZSBzYW1lIG51bWVyaWMgdmFsdWUgYXMgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy11bnNpZ25lZC1sb25nXG53ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyddID0gZnVuY3Rpb24gKFYpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgMzIsIFwidW5zaWduZWRcIikuXG4gIGNvbnN0IHggPSB3ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQoViwgMzIsICd1bnNpZ25lZCcpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBJREwgdW5zaWduZWQgbG9uZyB2YWx1ZSB0aGF0XG4gIC8vICAgIHJlcHJlc2VudHMgdGhlIHNhbWUgbnVtZXJpYyB2YWx1ZSBhcyB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLXVuc2lnbmVkLXNob3J0XG53ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgc2hvcnQnXSA9IGZ1bmN0aW9uIChWLCBvcHRzKSB7XG4gIC8vIDEuIExldCB4IGJlID8gQ29udmVydFRvSW50KFYsIDE2LCBcInVuc2lnbmVkXCIpLlxuICBjb25zdCB4ID0gd2ViaWRsLnV0aWwuQ29udmVydFRvSW50KFYsIDE2LCAndW5zaWduZWQnLCBvcHRzKVxuXG4gIC8vIDIuIFJldHVybiB0aGUgSURMIHVuc2lnbmVkIHNob3J0IHZhbHVlIHRoYXQgcmVwcmVzZW50c1xuICAvLyAgICB0aGUgc2FtZSBudW1lcmljIHZhbHVlIGFzIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jaWRsLUFycmF5QnVmZmVyXG53ZWJpZGwuY29udmVydGVycy5BcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIChWLCBvcHRzID0ge30pIHtcbiAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBvciBWIGRvZXMgbm90IGhhdmUgYW5cbiAgLy8gICAgW1tBcnJheUJ1ZmZlckRhdGFdXSBpbnRlcm5hbCBzbG90LCB0aGVuIHRocm93IGFcbiAgLy8gICAgVHlwZUVycm9yLlxuICAvLyBzZWU6IGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvcGVydGllcy1vZi10aGUtYXJyYXlidWZmZXItaW5zdGFuY2VzXG4gIC8vIHNlZTogaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1zaGFyZWRhcnJheWJ1ZmZlci1pbnN0YW5jZXNcbiAgaWYgKFxuICAgIHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnIHx8XG4gICAgIXR5cGVzLmlzQW55QXJyYXlCdWZmZXIoVilcbiAgKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgIHByZWZpeDogYCR7Vn1gLFxuICAgICAgYXJndW1lbnQ6IGAke1Z9YCxcbiAgICAgIHR5cGVzOiBbJ0FycmF5QnVmZmVyJ11cbiAgICB9KVxuICB9XG5cbiAgLy8gMi4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93U2hhcmVkXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1NoYXJlZEFycmF5QnVmZmVyKFYpIGlzIHRydWUsIHRoZW4gdGhyb3cgYVxuICAvLyAgICBUeXBlRXJyb3IuXG4gIGlmIChvcHRzLmFsbG93U2hhcmVkID09PSBmYWxzZSAmJiB0eXBlcy5pc1NoYXJlZEFycmF5QnVmZmVyKFYpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgaGVhZGVyOiAnQXJyYXlCdWZmZXInLFxuICAgICAgbWVzc2FnZTogJ1NoYXJlZEFycmF5QnVmZmVyIGlzIG5vdCBhbGxvd2VkLidcbiAgICB9KVxuICB9XG5cbiAgLy8gMy4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93UmVzaXphYmxlXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1Jlc2l6YWJsZUFycmF5QnVmZmVyKFYpIGlzIHRydWUsIHRoZW4gdGhyb3cgYVxuICAvLyAgICBUeXBlRXJyb3IuXG4gIC8vIE5vdGU6IHJlc2l6YWJsZSBBcnJheUJ1ZmZlcnMgYXJlIGN1cnJlbnRseSBhIHByb3Bvc2FsLlxuXG4gIC8vIDQuIFJldHVybiB0aGUgSURMIEFycmF5QnVmZmVyIHZhbHVlIHRoYXQgaXMgYVxuICAvLyAgICByZWZlcmVuY2UgdG8gdGhlIHNhbWUgb2JqZWN0IGFzIFYuXG4gIHJldHVybiBWXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLlR5cGVkQXJyYXkgPSBmdW5jdGlvbiAoViwgVCwgb3B0cyA9IHt9KSB7XG4gIC8vIDEuIExldCBUIGJlIHRoZSBJREwgdHlwZSBWIGlzIGJlaW5nIGNvbnZlcnRlZCB0by5cblxuICAvLyAyLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIG9yIFYgZG9lcyBub3QgaGF2ZSBhXG4gIC8vICAgIFtbVHlwZWRBcnJheU5hbWVdXSBpbnRlcm5hbCBzbG90IHdpdGggYSB2YWx1ZVxuICAvLyAgICBlcXVhbCB0byBUXHUyMDE5cyBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBpZiAoXG4gICAgd2ViaWRsLnV0aWwuVHlwZShWKSAhPT0gJ09iamVjdCcgfHxcbiAgICAhdHlwZXMuaXNUeXBlZEFycmF5KFYpIHx8XG4gICAgVi5jb25zdHJ1Y3Rvci5uYW1lICE9PSBULm5hbWVcbiAgKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgIHByZWZpeDogYCR7VC5uYW1lfWAsXG4gICAgICBhcmd1bWVudDogYCR7Vn1gLFxuICAgICAgdHlwZXM6IFtULm5hbWVdXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1NoYXJlZF0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNTaGFyZWRBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKG9wdHMuYWxsb3dTaGFyZWQgPT09IGZhbHNlICYmIHR5cGVzLmlzU2hhcmVkQXJyYXlCdWZmZXIoVi5idWZmZXIpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgaGVhZGVyOiAnQXJyYXlCdWZmZXInLFxuICAgICAgbWVzc2FnZTogJ1NoYXJlZEFycmF5QnVmZmVyIGlzIG5vdCBhbGxvd2VkLidcbiAgICB9KVxuICB9XG5cbiAgLy8gNC4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93UmVzaXphYmxlXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1Jlc2l6YWJsZUFycmF5QnVmZmVyKFYuW1tWaWV3ZWRBcnJheUJ1ZmZlcl1dKSBpc1xuICAvLyAgICB0cnVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAvLyBOb3RlOiByZXNpemFibGUgYXJyYXkgYnVmZmVycyBhcmUgY3VycmVudGx5IGEgcHJvcG9zYWxcblxuICAvLyA1LiBSZXR1cm4gdGhlIElETCB2YWx1ZSBvZiB0eXBlIFQgdGhhdCBpcyBhIHJlZmVyZW5jZVxuICAvLyAgICB0byB0aGUgc2FtZSBvYmplY3QgYXMgVi5cbiAgcmV0dXJuIFZcbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuRGF0YVZpZXcgPSBmdW5jdGlvbiAoViwgb3B0cyA9IHt9KSB7XG4gIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgb3IgViBkb2VzIG5vdCBoYXZlIGFcbiAgLy8gICAgW1tEYXRhVmlld11dIGludGVybmFsIHNsb3QsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpICE9PSAnT2JqZWN0JyB8fCAhdHlwZXMuaXNEYXRhVmlldyhWKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0RhdGFWaWV3JyxcbiAgICAgIG1lc3NhZ2U6ICdPYmplY3QgaXMgbm90IGEgRGF0YVZpZXcuJ1xuICAgIH0pXG4gIH1cblxuICAvLyAyLiBJZiB0aGUgY29udmVyc2lvbiBpcyBub3QgdG8gYW4gSURMIHR5cGUgYXNzb2NpYXRlZFxuICAvLyAgICB3aXRoIHRoZSBbQWxsb3dTaGFyZWRdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgYW5kXG4gIC8vICAgIElzU2hhcmVkQXJyYXlCdWZmZXIoVi5bW1ZpZXdlZEFycmF5QnVmZmVyXV0pIGlzIHRydWUsXG4gIC8vICAgIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmIChvcHRzLmFsbG93U2hhcmVkID09PSBmYWxzZSAmJiB0eXBlcy5pc1NoYXJlZEFycmF5QnVmZmVyKFYuYnVmZmVyKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdTaGFyZWRBcnJheUJ1ZmZlciBpcyBub3QgYWxsb3dlZC4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1Jlc2l6YWJsZV0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNSZXNpemFibGVBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgLy8gTm90ZTogcmVzaXphYmxlIEFycmF5QnVmZmVycyBhcmUgY3VycmVudGx5IGEgcHJvcG9zYWxcblxuICAvLyA0LiBSZXR1cm4gdGhlIElETCBEYXRhVmlldyB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlXG4gIC8vICAgIHRvIHRoZSBzYW1lIG9iamVjdCBhcyBWLlxuICByZXR1cm4gVlxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI0J1ZmZlclNvdXJjZVxud2ViaWRsLmNvbnZlcnRlcnMuQnVmZmVyU291cmNlID0gZnVuY3Rpb24gKFYsIG9wdHMgPSB7fSkge1xuICBpZiAodHlwZXMuaXNBbnlBcnJheUJ1ZmZlcihWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5BcnJheUJ1ZmZlcihWLCBvcHRzKVxuICB9XG5cbiAgaWYgKHR5cGVzLmlzVHlwZWRBcnJheShWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5UeXBlZEFycmF5KFYsIFYuY29uc3RydWN0b3IpXG4gIH1cblxuICBpZiAodHlwZXMuaXNEYXRhVmlldyhWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5EYXRhVmlldyhWLCBvcHRzKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihgQ291bGQgbm90IGNvbnZlcnQgJHtWfSB0byBhIEJ1ZmZlclNvdXJjZS5gKVxufVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8Qnl0ZVN0cmluZz4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZ1xuKVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxCeXRlU3RyaW5nPiddXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXSA9IHdlYmlkbC5yZWNvcmRDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcsXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmdcbilcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHdlYmlkbFxufVxuIiwgImNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IGF0b2IgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5jb25zdCB7IGlzb21vcnBoaWNEZWNvZGUgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5cbmNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNodHRwLXRva2VuLWNvZGUtcG9pbnRcbiAqL1xuY29uc3QgSFRUUF9UT0tFTl9DT0RFUE9JTlRTID0gL15bISMkJSYnKistLl5ffH5BLVphLXowLTldKyQvXG5jb25zdCBIVFRQX1dISVRFU1BBQ0VfUkVHRVggPSAvKFxcdTAwMEF8XFx1MDAwRHxcXHUwMDA5fFxcdTAwMjApLyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNodHRwLXF1b3RlZC1zdHJpbmctdG9rZW4tY29kZS1wb2ludFxuICovXG5jb25zdCBIVFRQX1FVT1RFRF9TVFJJTkdfVE9LRU5TID0gL1tcXHUwMDA5fFxcdTAwMjAtXFx1MDA3RXxcXHUwMDgwLVxcdTAwRkZdLyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkYXRhLXVybC1wcm9jZXNzb3Jcbi8qKiBAcGFyYW0ge1VSTH0gZGF0YVVSTCAqL1xuZnVuY3Rpb24gZGF0YVVSTFByb2Nlc3NvciAoZGF0YVVSTCkge1xuICAvLyAxLiBBc3NlcnQ6IGRhdGFVUkxcdTIwMTlzIHNjaGVtZSBpcyBcImRhdGFcIi5cbiAgYXNzZXJ0KGRhdGFVUkwucHJvdG9jb2wgPT09ICdkYXRhOicpXG5cbiAgLy8gMi4gTGV0IGlucHV0IGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyB0aGUgVVJMXG4gIC8vIHNlcmlhbGl6ZXIgb24gZGF0YVVSTCB3aXRoIGV4Y2x1ZGUgZnJhZ21lbnRcbiAgLy8gc2V0IHRvIHRydWUuXG4gIGxldCBpbnB1dCA9IFVSTFNlcmlhbGl6ZXIoZGF0YVVSTCwgdHJ1ZSlcblxuICAvLyAzLiBSZW1vdmUgdGhlIGxlYWRpbmcgXCJkYXRhOlwiIHN0cmluZyBmcm9tIGlucHV0LlxuICBpbnB1dCA9IGlucHV0LnNsaWNlKDUpXG5cbiAgLy8gNC4gTGV0IHBvc2l0aW9uIHBvaW50IGF0IHRoZSBzdGFydCBvZiBpbnB1dC5cbiAgY29uc3QgcG9zaXRpb24gPSB7IHBvc2l0aW9uOiAwIH1cblxuICAvLyA1LiBMZXQgbWltZVR5cGUgYmUgdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nIGFcbiAgLy8gc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IGVxdWFsXG4gIC8vIHRvIFUrMDAyQyAoLCksIGdpdmVuIHBvc2l0aW9uLlxuICBsZXQgbWltZVR5cGUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAnLCcsXG4gICAgaW5wdXQsXG4gICAgcG9zaXRpb25cbiAgKVxuXG4gIC8vIDYuIFN0cmlwIGxlYWRpbmcgYW5kIHRyYWlsaW5nIEFTQ0lJIHdoaXRlc3BhY2VcbiAgLy8gZnJvbSBtaW1lVHlwZS5cbiAgLy8gVW5kaWNpIGltcGxlbWVudGF0aW9uIG5vdGU6IHdlIG5lZWQgdG8gc3RvcmUgdGhlXG4gIC8vIGxlbmd0aCBiZWNhdXNlIGlmIHRoZSBtaW1ldHlwZSBoYXMgc3BhY2VzIHJlbW92ZWQsXG4gIC8vIHRoZSB3cm9uZyBhbW91bnQgd2lsbCBiZSBzbGljZWQgZnJvbSB0aGUgaW5wdXQgaW5cbiAgLy8gc3RlcCAjOVxuICBjb25zdCBtaW1lVHlwZUxlbmd0aCA9IG1pbWVUeXBlLmxlbmd0aFxuICBtaW1lVHlwZSA9IHJlbW92ZUFTQ0lJV2hpdGVzcGFjZShtaW1lVHlwZSwgdHJ1ZSwgdHJ1ZSlcblxuICAvLyA3LiBJZiBwb3NpdGlvbiBpcyBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW5cbiAgLy8gcmV0dXJuIGZhaWx1cmVcbiAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDguIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDkuIExldCBlbmNvZGVkQm9keSBiZSB0aGUgcmVtYWluZGVyIG9mIGlucHV0LlxuICBjb25zdCBlbmNvZGVkQm9keSA9IGlucHV0LnNsaWNlKG1pbWVUeXBlTGVuZ3RoICsgMSlcblxuICAvLyAxMC4gTGV0IGJvZHkgYmUgdGhlIHBlcmNlbnQtZGVjb2Rpbmcgb2YgZW5jb2RlZEJvZHkuXG4gIGxldCBib2R5ID0gc3RyaW5nUGVyY2VudERlY29kZShlbmNvZGVkQm9keSlcblxuICAvLyAxMS4gSWYgbWltZVR5cGUgZW5kcyB3aXRoIFUrMDAzQiAoOyksIGZvbGxvd2VkIGJ5XG4gIC8vIHplcm8gb3IgbW9yZSBVKzAwMjAgU1BBQ0UsIGZvbGxvd2VkIGJ5IGFuIEFTQ0lJXG4gIC8vIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIFwiYmFzZTY0XCIsIHRoZW46XG4gIGlmICgvOyhcXHUwMDIwKXswLH1iYXNlNjQkL2kudGVzdChtaW1lVHlwZSkpIHtcbiAgICAvLyAxLiBMZXQgc3RyaW5nQm9keSBiZSB0aGUgaXNvbW9ycGhpYyBkZWNvZGUgb2YgYm9keS5cbiAgICBjb25zdCBzdHJpbmdCb2R5ID0gaXNvbW9ycGhpY0RlY29kZShib2R5KVxuXG4gICAgLy8gMi4gU2V0IGJvZHkgdG8gdGhlIGZvcmdpdmluZy1iYXNlNjQgZGVjb2RlIG9mXG4gICAgLy8gc3RyaW5nQm9keS5cbiAgICBib2R5ID0gZm9yZ2l2aW5nQmFzZTY0KHN0cmluZ0JvZHkpXG5cbiAgICAvLyAzLiBJZiBib2R5IGlzIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gICAgaWYgKGJvZHkgPT09ICdmYWlsdXJlJykge1xuICAgICAgcmV0dXJuICdmYWlsdXJlJ1xuICAgIH1cblxuICAgIC8vIDQuIFJlbW92ZSB0aGUgbGFzdCA2IGNvZGUgcG9pbnRzIGZyb20gbWltZVR5cGUuXG4gICAgbWltZVR5cGUgPSBtaW1lVHlwZS5zbGljZSgwLCAtNilcblxuICAgIC8vIDUuIFJlbW92ZSB0cmFpbGluZyBVKzAwMjAgU1BBQ0UgY29kZSBwb2ludHMgZnJvbSBtaW1lVHlwZSxcbiAgICAvLyBpZiBhbnkuXG4gICAgbWltZVR5cGUgPSBtaW1lVHlwZS5yZXBsYWNlKC8oXFx1MDAyMCkrJC8sICcnKVxuXG4gICAgLy8gNi4gUmVtb3ZlIHRoZSBsYXN0IFUrMDAzQiAoOykgY29kZSBwb2ludCBmcm9tIG1pbWVUeXBlLlxuICAgIG1pbWVUeXBlID0gbWltZVR5cGUuc2xpY2UoMCwgLTEpXG4gIH1cblxuICAvLyAxMi4gSWYgbWltZVR5cGUgc3RhcnRzIHdpdGggVSswMDNCICg7KSwgdGhlbiBwcmVwZW5kXG4gIC8vIFwidGV4dC9wbGFpblwiIHRvIG1pbWVUeXBlLlxuICBpZiAobWltZVR5cGUuc3RhcnRzV2l0aCgnOycpKSB7XG4gICAgbWltZVR5cGUgPSAndGV4dC9wbGFpbicgKyBtaW1lVHlwZVxuICB9XG5cbiAgLy8gMTMuIExldCBtaW1lVHlwZVJlY29yZCBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmdcbiAgLy8gbWltZVR5cGUuXG4gIGxldCBtaW1lVHlwZVJlY29yZCA9IHBhcnNlTUlNRVR5cGUobWltZVR5cGUpXG5cbiAgLy8gMTQuIElmIG1pbWVUeXBlUmVjb3JkIGlzIGZhaWx1cmUsIHRoZW4gc2V0XG4gIC8vIG1pbWVUeXBlUmVjb3JkIHRvIHRleHQvcGxhaW47Y2hhcnNldD1VUy1BU0NJSS5cbiAgaWYgKG1pbWVUeXBlUmVjb3JkID09PSAnZmFpbHVyZScpIHtcbiAgICBtaW1lVHlwZVJlY29yZCA9IHBhcnNlTUlNRVR5cGUoJ3RleHQvcGxhaW47Y2hhcnNldD1VUy1BU0NJSScpXG4gIH1cblxuICAvLyAxNS4gUmV0dXJuIGEgbmV3IGRhdGE6IFVSTCBzdHJ1Y3Qgd2hvc2UgTUlNRVxuICAvLyB0eXBlIGlzIG1pbWVUeXBlUmVjb3JkIGFuZCBib2R5IGlzIGJvZHkuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkYXRhLXVybC1zdHJ1Y3RcbiAgcmV0dXJuIHsgbWltZVR5cGU6IG1pbWVUeXBlUmVjb3JkLCBib2R5IH1cbn1cblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXVybC1zZXJpYWxpemVyXG4vKipcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZXhjbHVkZUZyYWdtZW50XG4gKi9cbmZ1bmN0aW9uIFVSTFNlcmlhbGl6ZXIgKHVybCwgZXhjbHVkZUZyYWdtZW50ID0gZmFsc2UpIHtcbiAgaWYgKCFleGNsdWRlRnJhZ21lbnQpIHtcbiAgICByZXR1cm4gdXJsLmhyZWZcbiAgfVxuXG4gIGNvbnN0IGhyZWYgPSB1cmwuaHJlZlxuICBjb25zdCBoYXNoTGVuZ3RoID0gdXJsLmhhc2gubGVuZ3RoXG5cbiAgcmV0dXJuIGhhc2hMZW5ndGggPT09IDAgPyBocmVmIDogaHJlZi5zdWJzdHJpbmcoMCwgaHJlZi5sZW5ndGggLSBoYXNoTGVuZ3RoKVxufVxuXG4vLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jY29sbGVjdC1hLXNlcXVlbmNlLW9mLWNvZGUtcG9pbnRzXG4vKipcbiAqIEBwYXJhbSB7KGNoYXI6IHN0cmluZykgPT4gYm9vbGVhbn0gY29uZGl0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7eyBwb3NpdGlvbjogbnVtYmVyIH19IHBvc2l0aW9uXG4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMgKGNvbmRpdGlvbiwgaW5wdXQsIHBvc2l0aW9uKSB7XG4gIC8vIDEuIExldCByZXN1bHQgYmUgdGhlIGVtcHR5IHN0cmluZy5cbiAgbGV0IHJlc3VsdCA9ICcnXG5cbiAgLy8gMi4gV2hpbGUgcG9zaXRpb24gZG9lc25cdTIwMTl0IHBvaW50IHBhc3QgdGhlIGVuZCBvZiBpbnB1dCBhbmQgdGhlXG4gIC8vIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0IG1lZXRzIHRoZSBjb25kaXRpb24gY29uZGl0aW9uOlxuICB3aGlsZSAocG9zaXRpb24ucG9zaXRpb24gPCBpbnB1dC5sZW5ndGggJiYgY29uZGl0aW9uKGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXSkpIHtcbiAgICAvLyAxLiBBcHBlbmQgdGhhdCBjb2RlIHBvaW50IHRvIHRoZSBlbmQgb2YgcmVzdWx0LlxuICAgIHJlc3VsdCArPSBpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl1cblxuICAgIC8vIDIuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gcmVzdWx0LlxuICByZXR1cm4gcmVzdWx0XG59XG5cbi8qKlxuICogQSBmYXN0ZXIgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyB0aGF0IG9ubHkgd29ya3Mgd2hlbiBjb21wYXJpbmcgYSBzaW5nbGUgY2hhcmFjdGVyLlxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFxuICogQHBhcmFtIHt7IHBvc2l0aW9uOiBudW1iZXIgfX0gcG9zaXRpb25cbiAqL1xuZnVuY3Rpb24gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QgKGNoYXIsIGlucHV0LCBwb3NpdGlvbikge1xuICBjb25zdCBpZHggPSBpbnB1dC5pbmRleE9mKGNoYXIsIHBvc2l0aW9uLnBvc2l0aW9uKVxuICBjb25zdCBzdGFydCA9IHBvc2l0aW9uLnBvc2l0aW9uXG5cbiAgaWYgKGlkeCA9PT0gLTEpIHtcbiAgICBwb3NpdGlvbi5wb3NpdGlvbiA9IGlucHV0Lmxlbmd0aFxuICAgIHJldHVybiBpbnB1dC5zbGljZShzdGFydClcbiAgfVxuXG4gIHBvc2l0aW9uLnBvc2l0aW9uID0gaWR4XG4gIHJldHVybiBpbnB1dC5zbGljZShzdGFydCwgcG9zaXRpb24ucG9zaXRpb24pXG59XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jc3RyaW5nLXBlcmNlbnQtZGVjb2RlXG4vKiogQHBhcmFtIHtzdHJpbmd9IGlucHV0ICovXG5mdW5jdGlvbiBzdHJpbmdQZXJjZW50RGVjb2RlIChpbnB1dCkge1xuICAvLyAxLiBMZXQgYnl0ZXMgYmUgdGhlIFVURi04IGVuY29kaW5nIG9mIGlucHV0LlxuICBjb25zdCBieXRlcyA9IGVuY29kZXIuZW5jb2RlKGlucHV0KVxuXG4gIC8vIDIuIFJldHVybiB0aGUgcGVyY2VudC1kZWNvZGluZyBvZiBieXRlcy5cbiAgcmV0dXJuIHBlcmNlbnREZWNvZGUoYnl0ZXMpXG59XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jcGVyY2VudC1kZWNvZGVcbi8qKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGlucHV0ICovXG5mdW5jdGlvbiBwZXJjZW50RGVjb2RlIChpbnB1dCkge1xuICAvLyAxLiBMZXQgb3V0cHV0IGJlIGFuIGVtcHR5IGJ5dGUgc2VxdWVuY2UuXG4gIC8qKiBAdHlwZSB7bnVtYmVyW119ICovXG4gIGNvbnN0IG91dHB1dCA9IFtdXG5cbiAgLy8gMi4gRm9yIGVhY2ggYnl0ZSBieXRlIGluIGlucHV0OlxuICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgYnl0ZSA9IGlucHV0W2ldXG5cbiAgICAvLyAxLiBJZiBieXRlIGlzIG5vdCAweDI1ICglKSwgdGhlbiBhcHBlbmQgYnl0ZSB0byBvdXRwdXQuXG4gICAgaWYgKGJ5dGUgIT09IDB4MjUpIHtcbiAgICAgIG91dHB1dC5wdXNoKGJ5dGUpXG5cbiAgICAvLyAyLiBPdGhlcndpc2UsIGlmIGJ5dGUgaXMgMHgyNSAoJSkgYW5kIHRoZSBuZXh0IHR3byBieXRlc1xuICAgIC8vIGFmdGVyIGJ5dGUgaW4gaW5wdXQgYXJlIG5vdCBpbiB0aGUgcmFuZ2VzXG4gICAgLy8gMHgzMCAoMCkgdG8gMHgzOSAoOSksIDB4NDEgKEEpIHRvIDB4NDYgKEYpLFxuICAgIC8vIGFuZCAweDYxIChhKSB0byAweDY2IChmKSwgYWxsIGluY2x1c2l2ZSwgYXBwZW5kIGJ5dGVcbiAgICAvLyB0byBvdXRwdXQuXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGJ5dGUgPT09IDB4MjUgJiZcbiAgICAgICEvXlswLTlBLUZhLWZdezJ9JC9pLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShpbnB1dFtpICsgMV0sIGlucHV0W2kgKyAyXSkpXG4gICAgKSB7XG4gICAgICBvdXRwdXQucHVzaCgweDI1KVxuXG4gICAgLy8gMy4gT3RoZXJ3aXNlOlxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAxLiBMZXQgYnl0ZVBvaW50IGJlIHRoZSB0d28gYnl0ZXMgYWZ0ZXIgYnl0ZSBpbiBpbnB1dCxcbiAgICAgIC8vIGRlY29kZWQsIGFuZCB0aGVuIGludGVycHJldGVkIGFzIGhleGFkZWNpbWFsIG51bWJlci5cbiAgICAgIGNvbnN0IG5leHRUd29CeXRlcyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoaW5wdXRbaSArIDFdLCBpbnB1dFtpICsgMl0pXG4gICAgICBjb25zdCBieXRlUG9pbnQgPSBOdW1iZXIucGFyc2VJbnQobmV4dFR3b0J5dGVzLCAxNilcblxuICAgICAgLy8gMi4gQXBwZW5kIGEgYnl0ZSB3aG9zZSB2YWx1ZSBpcyBieXRlUG9pbnQgdG8gb3V0cHV0LlxuICAgICAgb3V0cHV0LnB1c2goYnl0ZVBvaW50KVxuXG4gICAgICAvLyAzLiBTa2lwIHRoZSBuZXh0IHR3byBieXRlcyBpbiBpbnB1dC5cbiAgICAgIGkgKz0gMlxuICAgIH1cbiAgfVxuXG4gIC8vIDMuIFJldHVybiBvdXRwdXQuXG4gIHJldHVybiBVaW50OEFycmF5LmZyb20ob3V0cHV0KVxufVxuXG4vLyBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI3BhcnNlLWEtbWltZS10eXBlXG4vKiogQHBhcmFtIHtzdHJpbmd9IGlucHV0ICovXG5mdW5jdGlvbiBwYXJzZU1JTUVUeXBlIChpbnB1dCkge1xuICAvLyAxLiBSZW1vdmUgYW55IGxlYWRpbmcgYW5kIHRyYWlsaW5nIEhUVFAgd2hpdGVzcGFjZVxuICAvLyBmcm9tIGlucHV0LlxuICBpbnB1dCA9IHJlbW92ZUhUVFBXaGl0ZXNwYWNlKGlucHV0LCB0cnVlLCB0cnVlKVxuXG4gIC8vIDIuIExldCBwb3NpdGlvbiBiZSBhIHBvc2l0aW9uIHZhcmlhYmxlIGZvciBpbnB1dCxcbiAgLy8gaW5pdGlhbGx5IHBvaW50aW5nIGF0IHRoZSBzdGFydCBvZiBpbnB1dC5cbiAgY29uc3QgcG9zaXRpb24gPSB7IHBvc2l0aW9uOiAwIH1cblxuICAvLyAzLiBMZXQgdHlwZSBiZSB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYSBzZXF1ZW5jZVxuICAvLyBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3QgVSswMDJGICgvKSBmcm9tXG4gIC8vIGlucHV0LCBnaXZlbiBwb3NpdGlvbi5cbiAgY29uc3QgdHlwZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICcvJyxcbiAgICBpbnB1dCxcbiAgICBwb3NpdGlvblxuICApXG5cbiAgLy8gNC4gSWYgdHlwZSBpcyB0aGUgZW1wdHkgc3RyaW5nIG9yIGRvZXMgbm90IHNvbGVseVxuICAvLyBjb250YWluIEhUVFAgdG9rZW4gY29kZSBwb2ludHMsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIC8vIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jaHR0cC10b2tlbi1jb2RlLXBvaW50XG4gIGlmICh0eXBlLmxlbmd0aCA9PT0gMCB8fCAhSFRUUF9UT0tFTl9DT0RFUE9JTlRTLnRlc3QodHlwZSkpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyA1LiBJZiBwb3NpdGlvbiBpcyBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW4gcmV0dXJuXG4gIC8vIGZhaWx1cmVcbiAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID4gaW5wdXQubGVuZ3RoKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gNi4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLiAoVGhpcyBza2lwcyBwYXN0IFUrMDAyRiAoLykuKVxuICBwb3NpdGlvbi5wb3NpdGlvbisrXG5cbiAgLy8gNy4gTGV0IHN1YnR5cGUgYmUgdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nIGEgc2VxdWVuY2Ugb2ZcbiAgLy8gY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IFUrMDAzQiAoOykgZnJvbSBpbnB1dCwgZ2l2ZW5cbiAgLy8gcG9zaXRpb24uXG4gIGxldCBzdWJ0eXBlID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgJzsnLFxuICAgIGlucHV0LFxuICAgIHBvc2l0aW9uXG4gIClcblxuICAvLyA4LiBSZW1vdmUgYW55IHRyYWlsaW5nIEhUVFAgd2hpdGVzcGFjZSBmcm9tIHN1YnR5cGUuXG4gIHN1YnR5cGUgPSByZW1vdmVIVFRQV2hpdGVzcGFjZShzdWJ0eXBlLCBmYWxzZSwgdHJ1ZSlcblxuICAvLyA5LiBJZiBzdWJ0eXBlIGlzIHRoZSBlbXB0eSBzdHJpbmcgb3IgZG9lcyBub3Qgc29sZWx5XG4gIC8vIGNvbnRhaW4gSFRUUCB0b2tlbiBjb2RlIHBvaW50cywgdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgaWYgKHN1YnR5cGUubGVuZ3RoID09PSAwIHx8ICFIVFRQX1RPS0VOX0NPREVQT0lOVFMudGVzdChzdWJ0eXBlKSkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIGNvbnN0IHR5cGVMb3dlcmNhc2UgPSB0eXBlLnRvTG93ZXJDYXNlKClcbiAgY29uc3Qgc3VidHlwZUxvd2VyY2FzZSA9IHN1YnR5cGUudG9Mb3dlckNhc2UoKVxuXG4gIC8vIDEwLiBMZXQgbWltZVR5cGUgYmUgYSBuZXcgTUlNRSB0eXBlIHJlY29yZCB3aG9zZSB0eXBlXG4gIC8vIGlzIHR5cGUsIGluIEFTQ0lJIGxvd2VyY2FzZSwgYW5kIHN1YnR5cGUgaXMgc3VidHlwZSxcbiAgLy8gaW4gQVNDSUkgbG93ZXJjYXNlLlxuICAvLyBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI21pbWUtdHlwZVxuICBjb25zdCBtaW1lVHlwZSA9IHtcbiAgICB0eXBlOiB0eXBlTG93ZXJjYXNlLFxuICAgIHN1YnR5cGU6IHN1YnR5cGVMb3dlcmNhc2UsXG4gICAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICAgIHBhcmFtZXRlcnM6IG5ldyBNYXAoKSxcbiAgICAvLyBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI21pbWUtdHlwZS1lc3NlbmNlXG4gICAgZXNzZW5jZTogYCR7dHlwZUxvd2VyY2FzZX0vJHtzdWJ0eXBlTG93ZXJjYXNlfWBcbiAgfVxuXG4gIC8vIDExLiBXaGlsZSBwb3NpdGlvbiBpcyBub3QgcGFzdCB0aGUgZW5kIG9mIGlucHV0OlxuICB3aGlsZSAocG9zaXRpb24ucG9zaXRpb24gPCBpbnB1dC5sZW5ndGgpIHtcbiAgICAvLyAxLiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuIChUaGlzIHNraXBzIHBhc3QgVSswMDNCICg7KS4pXG4gICAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gICAgLy8gMi4gQ29sbGVjdCBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIEhUVFBcbiAgICAvLyB3aGl0ZXNwYWNlIGZyb20gaW5wdXQgZ2l2ZW4gcG9zaXRpb24uXG4gICAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLXdoaXRlc3BhY2VcbiAgICAgIGNoYXIgPT4gSFRUUF9XSElURVNQQUNFX1JFR0VYLnRlc3QoY2hhciksXG4gICAgICBpbnB1dCxcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuXG4gICAgLy8gMy4gTGV0IHBhcmFtZXRlck5hbWUgYmUgdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nIGFcbiAgICAvLyBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3QgVSswMDNCICg7KVxuICAgIC8vIG9yIFUrMDAzRCAoPSkgZnJvbSBpbnB1dCwgZ2l2ZW4gcG9zaXRpb24uXG4gICAgbGV0IHBhcmFtZXRlck5hbWUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzKFxuICAgICAgKGNoYXIpID0+IGNoYXIgIT09ICc7JyAmJiBjaGFyICE9PSAnPScsXG4gICAgICBpbnB1dCxcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuXG4gICAgLy8gNC4gU2V0IHBhcmFtZXRlck5hbWUgdG8gcGFyYW1ldGVyTmFtZSwgaW4gQVNDSUlcbiAgICAvLyBsb3dlcmNhc2UuXG4gICAgcGFyYW1ldGVyTmFtZSA9IHBhcmFtZXRlck5hbWUudG9Mb3dlckNhc2UoKVxuXG4gICAgLy8gNS4gSWYgcG9zaXRpb24gaXMgbm90IHBhc3QgdGhlIGVuZCBvZiBpbnB1dCwgdGhlbjpcbiAgICBpZiAocG9zaXRpb24ucG9zaXRpb24gPCBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIC8vIDEuIElmIHRoZSBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCBpc1xuICAgICAgLy8gVSswMDNCICg7KSwgdGhlbiBjb250aW51ZS5cbiAgICAgIGlmIChpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0gPT09ICc7Jykge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAyLiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuIChUaGlzIHNraXBzIHBhc3QgVSswMDNEICg9KS4pXG4gICAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG4gICAgfVxuXG4gICAgLy8gNi4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIGJyZWFrLlxuICAgIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+IGlucHV0Lmxlbmd0aCkge1xuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICAvLyA3LiBMZXQgcGFyYW1ldGVyVmFsdWUgYmUgbnVsbC5cbiAgICBsZXQgcGFyYW1ldGVyVmFsdWUgPSBudWxsXG5cbiAgICAvLyA4LiBJZiB0aGUgY29kZSBwb2ludCBhdCBwb3NpdGlvbiB3aXRoaW4gaW5wdXQgaXNcbiAgICAvLyBVKzAwMjIgKFwiKSwgdGhlbjpcbiAgICBpZiAoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dID09PSAnXCInKSB7XG4gICAgICAvLyAxLiBTZXQgcGFyYW1ldGVyVmFsdWUgdG8gdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nXG4gICAgICAvLyBhbiBIVFRQIHF1b3RlZCBzdHJpbmcgZnJvbSBpbnB1dCwgZ2l2ZW4gcG9zaXRpb25cbiAgICAgIC8vIGFuZCB0aGUgZXh0cmFjdC12YWx1ZSBmbGFnLlxuICAgICAgcGFyYW1ldGVyVmFsdWUgPSBjb2xsZWN0QW5IVFRQUXVvdGVkU3RyaW5nKGlucHV0LCBwb3NpdGlvbiwgdHJ1ZSlcblxuICAgICAgLy8gMi4gQ29sbGVjdCBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdFxuICAgICAgLy8gVSswMDNCICg7KSBmcm9tIGlucHV0LCBnaXZlbiBwb3NpdGlvbi5cbiAgICAgIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICAgICAnOycsXG4gICAgICAgIGlucHV0LFxuICAgICAgICBwb3NpdGlvblxuICAgICAgKVxuXG4gICAgLy8gOS4gT3RoZXJ3aXNlOlxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAxLiBTZXQgcGFyYW1ldGVyVmFsdWUgdG8gdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nXG4gICAgICAvLyBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBVKzAwM0IgKDspXG4gICAgICAvLyBmcm9tIGlucHV0LCBnaXZlbiBwb3NpdGlvbi5cbiAgICAgIHBhcmFtZXRlclZhbHVlID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAgICc7JyxcbiAgICAgICAgaW5wdXQsXG4gICAgICAgIHBvc2l0aW9uXG4gICAgICApXG5cbiAgICAgIC8vIDIuIFJlbW92ZSBhbnkgdHJhaWxpbmcgSFRUUCB3aGl0ZXNwYWNlIGZyb20gcGFyYW1ldGVyVmFsdWUuXG4gICAgICBwYXJhbWV0ZXJWYWx1ZSA9IHJlbW92ZUhUVFBXaGl0ZXNwYWNlKHBhcmFtZXRlclZhbHVlLCBmYWxzZSwgdHJ1ZSlcblxuICAgICAgLy8gMy4gSWYgcGFyYW1ldGVyVmFsdWUgaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlbiBjb250aW51ZS5cbiAgICAgIGlmIChwYXJhbWV0ZXJWYWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAxMC4gSWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgYXJlIHRydWVcbiAgICAvLyAtIHBhcmFtZXRlck5hbWUgaXMgbm90IHRoZSBlbXB0eSBzdHJpbmdcbiAgICAvLyAtIHBhcmFtZXRlck5hbWUgc29sZWx5IGNvbnRhaW5zIEhUVFAgdG9rZW4gY29kZSBwb2ludHNcbiAgICAvLyAtIHBhcmFtZXRlclZhbHVlIHNvbGVseSBjb250YWlucyBIVFRQIHF1b3RlZC1zdHJpbmcgdG9rZW4gY29kZSBwb2ludHNcbiAgICAvLyAtIG1pbWVUeXBlXHUyMDE5cyBwYXJhbWV0ZXJzW3BhcmFtZXRlck5hbWVdIGRvZXMgbm90IGV4aXN0XG4gICAgLy8gdGhlbiBzZXQgbWltZVR5cGVcdTIwMTlzIHBhcmFtZXRlcnNbcGFyYW1ldGVyTmFtZV0gdG8gcGFyYW1ldGVyVmFsdWUuXG4gICAgaWYgKFxuICAgICAgcGFyYW1ldGVyTmFtZS5sZW5ndGggIT09IDAgJiZcbiAgICAgIEhUVFBfVE9LRU5fQ09ERVBPSU5UUy50ZXN0KHBhcmFtZXRlck5hbWUpICYmXG4gICAgICAocGFyYW1ldGVyVmFsdWUubGVuZ3RoID09PSAwIHx8IEhUVFBfUVVPVEVEX1NUUklOR19UT0tFTlMudGVzdChwYXJhbWV0ZXJWYWx1ZSkpICYmXG4gICAgICAhbWltZVR5cGUucGFyYW1ldGVycy5oYXMocGFyYW1ldGVyTmFtZSlcbiAgICApIHtcbiAgICAgIG1pbWVUeXBlLnBhcmFtZXRlcnMuc2V0KHBhcmFtZXRlck5hbWUsIHBhcmFtZXRlclZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIC8vIDEyLiBSZXR1cm4gbWltZVR5cGUuXG4gIHJldHVybiBtaW1lVHlwZVxufVxuXG4vLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jZm9yZ2l2aW5nLWJhc2U2NC1kZWNvZGVcbi8qKiBAcGFyYW0ge3N0cmluZ30gZGF0YSAqL1xuZnVuY3Rpb24gZm9yZ2l2aW5nQmFzZTY0IChkYXRhKSB7XG4gIC8vIDEuIFJlbW92ZSBhbGwgQVNDSUkgd2hpdGVzcGFjZSBmcm9tIGRhdGEuXG4gIGRhdGEgPSBkYXRhLnJlcGxhY2UoL1tcXHUwMDA5XFx1MDAwQVxcdTAwMENcXHUwMDBEXFx1MDAyMF0vZywgJycpICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgLy8gMi4gSWYgZGF0YVx1MjAxOXMgY29kZSBwb2ludCBsZW5ndGggZGl2aWRlcyBieSA0IGxlYXZpbmdcbiAgLy8gbm8gcmVtYWluZGVyLCB0aGVuOlxuICBpZiAoZGF0YS5sZW5ndGggJSA0ID09PSAwKSB7XG4gICAgLy8gMS4gSWYgZGF0YSBlbmRzIHdpdGggb25lIG9yIHR3byBVKzAwM0QgKD0pIGNvZGUgcG9pbnRzLFxuICAgIC8vIHRoZW4gcmVtb3ZlIHRoZW0gZnJvbSBkYXRhLlxuICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoLz0/PSQvLCAnJylcbiAgfVxuXG4gIC8vIDMuIElmIGRhdGFcdTIwMTlzIGNvZGUgcG9pbnQgbGVuZ3RoIGRpdmlkZXMgYnkgNCBsZWF2aW5nXG4gIC8vIGEgcmVtYWluZGVyIG9mIDEsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIGlmIChkYXRhLmxlbmd0aCAlIDQgPT09IDEpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyA0LiBJZiBkYXRhIGNvbnRhaW5zIGEgY29kZSBwb2ludCB0aGF0IGlzIG5vdCBvbmUgb2ZcbiAgLy8gIFUrMDAyQiAoKylcbiAgLy8gIFUrMDAyRiAoLylcbiAgLy8gIEFTQ0lJIGFscGhhbnVtZXJpY1xuICAvLyB0aGVuIHJldHVybiBmYWlsdXJlLlxuICBpZiAoL1teKy8wLTlBLVphLXpdLy50ZXN0KGRhdGEpKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgY29uc3QgYmluYXJ5ID0gYXRvYihkYXRhKVxuICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJpbmFyeS5sZW5ndGgpXG5cbiAgZm9yIChsZXQgYnl0ZSA9IDA7IGJ5dGUgPCBiaW5hcnkubGVuZ3RoOyBieXRlKyspIHtcbiAgICBieXRlc1tieXRlXSA9IGJpbmFyeS5jaGFyQ29kZUF0KGJ5dGUpXG4gIH1cblxuICByZXR1cm4gYnl0ZXNcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbGxlY3QtYW4taHR0cC1xdW90ZWQtc3RyaW5nXG4vLyB0ZXN0czogaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2V4YW1wbGUtaHR0cC1xdW90ZWQtc3RyaW5nXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFxuICogQHBhcmFtIHt7IHBvc2l0aW9uOiBudW1iZXIgfX0gcG9zaXRpb25cbiAqIEBwYXJhbSB7Ym9vbGVhbj99IGV4dHJhY3RWYWx1ZVxuICovXG5mdW5jdGlvbiBjb2xsZWN0QW5IVFRQUXVvdGVkU3RyaW5nIChpbnB1dCwgcG9zaXRpb24sIGV4dHJhY3RWYWx1ZSkge1xuICAvLyAxLiBMZXQgcG9zaXRpb25TdGFydCBiZSBwb3NpdGlvbi5cbiAgY29uc3QgcG9zaXRpb25TdGFydCA9IHBvc2l0aW9uLnBvc2l0aW9uXG5cbiAgLy8gMi4gTGV0IHZhbHVlIGJlIHRoZSBlbXB0eSBzdHJpbmcuXG4gIGxldCB2YWx1ZSA9ICcnXG5cbiAgLy8gMy4gQXNzZXJ0OiB0aGUgY29kZSBwb2ludCBhdCBwb3NpdGlvbiB3aXRoaW4gaW5wdXRcbiAgLy8gaXMgVSswMDIyIChcIikuXG4gIGFzc2VydChpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0gPT09ICdcIicpXG5cbiAgLy8gNC4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLlxuICBwb3NpdGlvbi5wb3NpdGlvbisrXG5cbiAgLy8gNS4gV2hpbGUgdHJ1ZTpcbiAgd2hpbGUgKHRydWUpIHtcbiAgICAvLyAxLiBBcHBlbmQgdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nIGEgc2VxdWVuY2Ugb2YgY29kZSBwb2ludHNcbiAgICAvLyB0aGF0IGFyZSBub3QgVSswMDIyIChcIikgb3IgVSswMDVDIChcXCkgZnJvbSBpbnB1dCwgZ2l2ZW5cbiAgICAvLyBwb3NpdGlvbiwgdG8gdmFsdWUuXG4gICAgdmFsdWUgKz0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAgIChjaGFyKSA9PiBjaGFyICE9PSAnXCInICYmIGNoYXIgIT09ICdcXFxcJyxcbiAgICAgIGlucHV0LFxuICAgICAgcG9zaXRpb25cbiAgICApXG5cbiAgICAvLyAyLiBJZiBwb3NpdGlvbiBpcyBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW4gYnJlYWsuXG4gICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCkge1xuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICAvLyAzLiBMZXQgcXVvdGVPckJhY2tzbGFzaCBiZSB0aGUgY29kZSBwb2ludCBhdCBwb3NpdGlvbiB3aXRoaW5cbiAgICAvLyBpbnB1dC5cbiAgICBjb25zdCBxdW90ZU9yQmFja3NsYXNoID0gaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dXG5cbiAgICAvLyA0LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gICAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gICAgLy8gNS4gSWYgcXVvdGVPckJhY2tzbGFzaCBpcyBVKzAwNUMgKFxcKSwgdGhlbjpcbiAgICBpZiAocXVvdGVPckJhY2tzbGFzaCA9PT0gJ1xcXFwnKSB7XG4gICAgICAvLyAxLiBJZiBwb3NpdGlvbiBpcyBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW4gYXBwZW5kXG4gICAgICAvLyBVKzAwNUMgKFxcKSB0byB2YWx1ZSBhbmQgYnJlYWsuXG4gICAgICBpZiAocG9zaXRpb24ucG9zaXRpb24gPj0gaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgIHZhbHVlICs9ICdcXFxcJ1xuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBBcHBlbmQgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0IHRvIHZhbHVlLlxuICAgICAgdmFsdWUgKz0gaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dXG5cbiAgICAgIC8vIDMuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAgIC8vIDYuIE90aGVyd2lzZTpcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMS4gQXNzZXJ0OiBxdW90ZU9yQmFja3NsYXNoIGlzIFUrMDAyMiAoXCIpLlxuICAgICAgYXNzZXJ0KHF1b3RlT3JCYWNrc2xhc2ggPT09ICdcIicpXG5cbiAgICAgIC8vIDIuIEJyZWFrLlxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICAvLyA2LiBJZiB0aGUgZXh0cmFjdC12YWx1ZSBmbGFnIGlzIHNldCwgdGhlbiByZXR1cm4gdmFsdWUuXG4gIGlmIChleHRyYWN0VmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIC8vIDcuIFJldHVybiB0aGUgY29kZSBwb2ludHMgZnJvbSBwb3NpdGlvblN0YXJ0IHRvIHBvc2l0aW9uLFxuICAvLyBpbmNsdXNpdmUsIHdpdGhpbiBpbnB1dC5cbiAgcmV0dXJuIGlucHV0LnNsaWNlKHBvc2l0aW9uU3RhcnQsIHBvc2l0aW9uLnBvc2l0aW9uKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNzZXJpYWxpemUtYS1taW1lLXR5cGVcbiAqL1xuZnVuY3Rpb24gc2VyaWFsaXplQU1pbWVUeXBlIChtaW1lVHlwZSkge1xuICBhc3NlcnQobWltZVR5cGUgIT09ICdmYWlsdXJlJylcbiAgY29uc3QgeyBwYXJhbWV0ZXJzLCBlc3NlbmNlIH0gPSBtaW1lVHlwZVxuXG4gIC8vIDEuIExldCBzZXJpYWxpemF0aW9uIGJlIHRoZSBjb25jYXRlbmF0aW9uIG9mIG1pbWVUeXBlXHUyMDE5c1xuICAvLyAgICB0eXBlLCBVKzAwMkYgKC8pLCBhbmQgbWltZVR5cGVcdTIwMTlzIHN1YnR5cGUuXG4gIGxldCBzZXJpYWxpemF0aW9uID0gZXNzZW5jZVxuXG4gIC8vIDIuIEZvciBlYWNoIG5hbWUgXHUyMTkyIHZhbHVlIG9mIG1pbWVUeXBlXHUyMDE5cyBwYXJhbWV0ZXJzOlxuICBmb3IgKGxldCBbbmFtZSwgdmFsdWVdIG9mIHBhcmFtZXRlcnMuZW50cmllcygpKSB7XG4gICAgLy8gMS4gQXBwZW5kIFUrMDAzQiAoOykgdG8gc2VyaWFsaXphdGlvbi5cbiAgICBzZXJpYWxpemF0aW9uICs9ICc7J1xuXG4gICAgLy8gMi4gQXBwZW5kIG5hbWUgdG8gc2VyaWFsaXphdGlvbi5cbiAgICBzZXJpYWxpemF0aW9uICs9IG5hbWVcblxuICAgIC8vIDMuIEFwcGVuZCBVKzAwM0QgKD0pIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSAnPSdcblxuICAgIC8vIDQuIElmIHZhbHVlIGRvZXMgbm90IHNvbGVseSBjb250YWluIEhUVFAgdG9rZW4gY29kZVxuICAgIC8vICAgIHBvaW50cyBvciB2YWx1ZSBpcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuOlxuICAgIGlmICghSFRUUF9UT0tFTl9DT0RFUE9JTlRTLnRlc3QodmFsdWUpKSB7XG4gICAgICAvLyAxLiBQcmVjZWRlIGVhY2ggb2NjdXJlbmNlIG9mIFUrMDAyMiAoXCIpIG9yXG4gICAgICAvLyAgICBVKzAwNUMgKFxcKSBpbiB2YWx1ZSB3aXRoIFUrMDA1QyAoXFwpLlxuICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC8oXFxcXHxcIikvZywgJ1xcXFwkMScpXG5cbiAgICAgIC8vIDIuIFByZXBlbmQgVSswMDIyIChcIikgdG8gdmFsdWUuXG4gICAgICB2YWx1ZSA9ICdcIicgKyB2YWx1ZVxuXG4gICAgICAvLyAzLiBBcHBlbmQgVSswMDIyIChcIikgdG8gdmFsdWUuXG4gICAgICB2YWx1ZSArPSAnXCInXG4gICAgfVxuXG4gICAgLy8gNS4gQXBwZW5kIHZhbHVlIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSB2YWx1ZVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIHNlcmlhbGl6YXRpb24uXG4gIHJldHVybiBzZXJpYWxpemF0aW9uXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC13aGl0ZXNwYWNlXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhclxuICovXG5mdW5jdGlvbiBpc0hUVFBXaGl0ZVNwYWNlIChjaGFyKSB7XG4gIHJldHVybiBjaGFyID09PSAnXFxyJyB8fCBjaGFyID09PSAnXFxuJyB8fCBjaGFyID09PSAnXFx0JyB8fCBjaGFyID09PSAnICdcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLXdoaXRlc3BhY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlSFRUUFdoaXRlc3BhY2UgKHN0ciwgbGVhZGluZyA9IHRydWUsIHRyYWlsaW5nID0gdHJ1ZSkge1xuICBsZXQgbGVhZCA9IDBcbiAgbGV0IHRyYWlsID0gc3RyLmxlbmd0aCAtIDFcblxuICBpZiAobGVhZGluZykge1xuICAgIGZvciAoOyBsZWFkIDwgc3RyLmxlbmd0aCAmJiBpc0hUVFBXaGl0ZVNwYWNlKHN0cltsZWFkXSk7IGxlYWQrKyk7XG4gIH1cblxuICBpZiAodHJhaWxpbmcpIHtcbiAgICBmb3IgKDsgdHJhaWwgPiAwICYmIGlzSFRUUFdoaXRlU3BhY2Uoc3RyW3RyYWlsXSk7IHRyYWlsLS0pO1xuICB9XG5cbiAgcmV0dXJuIHN0ci5zbGljZShsZWFkLCB0cmFpbCArIDEpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jYXNjaWktd2hpdGVzcGFjZVxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJcbiAqL1xuZnVuY3Rpb24gaXNBU0NJSVdoaXRlc3BhY2UgKGNoYXIpIHtcbiAgcmV0dXJuIGNoYXIgPT09ICdcXHInIHx8IGNoYXIgPT09ICdcXG4nIHx8IGNoYXIgPT09ICdcXHQnIHx8IGNoYXIgPT09ICdcXGYnIHx8IGNoYXIgPT09ICcgJ1xufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI3N0cmlwLWxlYWRpbmctYW5kLXRyYWlsaW5nLWFzY2lpLXdoaXRlc3BhY2VcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQVNDSUlXaGl0ZXNwYWNlIChzdHIsIGxlYWRpbmcgPSB0cnVlLCB0cmFpbGluZyA9IHRydWUpIHtcbiAgbGV0IGxlYWQgPSAwXG4gIGxldCB0cmFpbCA9IHN0ci5sZW5ndGggLSAxXG5cbiAgaWYgKGxlYWRpbmcpIHtcbiAgICBmb3IgKDsgbGVhZCA8IHN0ci5sZW5ndGggJiYgaXNBU0NJSVdoaXRlc3BhY2Uoc3RyW2xlYWRdKTsgbGVhZCsrKTtcbiAgfVxuXG4gIGlmICh0cmFpbGluZykge1xuICAgIGZvciAoOyB0cmFpbCA+IDAgJiYgaXNBU0NJSVdoaXRlc3BhY2Uoc3RyW3RyYWlsXSk7IHRyYWlsLS0pO1xuICB9XG5cbiAgcmV0dXJuIHN0ci5zbGljZShsZWFkLCB0cmFpbCArIDEpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBkYXRhVVJMUHJvY2Vzc29yLFxuICBVUkxTZXJpYWxpemVyLFxuICBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzLFxuICBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCxcbiAgc3RyaW5nUGVyY2VudERlY29kZSxcbiAgcGFyc2VNSU1FVHlwZSxcbiAgY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyxcbiAgc2VyaWFsaXplQU1pbWVUeXBlXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgQmxvYiwgRmlsZTogTmF0aXZlRmlsZSB9ID0gcmVxdWlyZSgnYnVmZmVyJylcbmNvbnN0IHsgdHlwZXMgfSA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgeyBrU3RhdGUgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IGlzQmxvYkxpa2UgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBwYXJzZU1JTUVUeXBlLCBzZXJpYWxpemVBTWltZVR5cGUgfSA9IHJlcXVpcmUoJy4vZGF0YVVSTCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKClcblxuY2xhc3MgRmlsZSBleHRlbmRzIEJsb2Ige1xuICBjb25zdHJ1Y3RvciAoZmlsZUJpdHMsIGZpbGVOYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICAvLyBUaGUgRmlsZSBjb25zdHJ1Y3RvciBpcyBpbnZva2VkIHdpdGggdHdvIG9yIHRocmVlIHBhcmFtZXRlcnMsIGRlcGVuZGluZ1xuICAgIC8vIG9uIHdoZXRoZXIgdGhlIG9wdGlvbmFsIGRpY3Rpb25hcnkgcGFyYW1ldGVyIGlzIHVzZWQuIFdoZW4gdGhlIEZpbGUoKVxuICAgIC8vIGNvbnN0cnVjdG9yIGlzIGludm9rZWQsIHVzZXIgYWdlbnRzIG11c3QgcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6XG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCB7IGhlYWRlcjogJ0ZpbGUgY29uc3RydWN0b3InIH0pXG5cbiAgICBmaWxlQml0cyA9IHdlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxCbG9iUGFydD4nXShmaWxlQml0cylcbiAgICBmaWxlTmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhmaWxlTmFtZSlcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuRmlsZVByb3BlcnR5QmFnKG9wdGlvbnMpXG5cbiAgICAvLyAxLiBMZXQgYnl0ZXMgYmUgdGhlIHJlc3VsdCBvZiBwcm9jZXNzaW5nIGJsb2IgcGFydHMgZ2l2ZW4gZmlsZUJpdHMgYW5kXG4gICAgLy8gb3B0aW9ucy5cbiAgICAvLyBOb3RlOiBCbG9iIGhhbmRsZXMgdGhpcyBmb3IgdXNcblxuICAgIC8vIDIuIExldCBuIGJlIHRoZSBmaWxlTmFtZSBhcmd1bWVudCB0byB0aGUgY29uc3RydWN0b3IuXG4gICAgY29uc3QgbiA9IGZpbGVOYW1lXG5cbiAgICAvLyAzLiBQcm9jZXNzIEZpbGVQcm9wZXJ0eUJhZyBkaWN0aW9uYXJ5IGFyZ3VtZW50IGJ5IHJ1bm5pbmcgdGhlIGZvbGxvd2luZ1xuICAgIC8vIHN1YnN0ZXBzOlxuXG4gICAgLy8gICAgMS4gSWYgdGhlIHR5cGUgbWVtYmVyIGlzIHByb3ZpZGVkIGFuZCBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgbGV0IHRcbiAgICAvLyAgICBiZSBzZXQgdG8gdGhlIHR5cGUgZGljdGlvbmFyeSBtZW1iZXIuIElmIHQgY29udGFpbnMgYW55IGNoYXJhY3RlcnNcbiAgICAvLyAgICBvdXRzaWRlIHRoZSByYW5nZSBVKzAwMjAgdG8gVSswMDdFLCB0aGVuIHNldCB0IHRvIHRoZSBlbXB0eSBzdHJpbmdcbiAgICAvLyAgICBhbmQgcmV0dXJuIGZyb20gdGhlc2Ugc3Vic3RlcHMuXG4gICAgLy8gICAgMi4gQ29udmVydCBldmVyeSBjaGFyYWN0ZXIgaW4gdCB0byBBU0NJSSBsb3dlcmNhc2UuXG4gICAgbGV0IHQgPSBvcHRpb25zLnR5cGVcbiAgICBsZXQgZFxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxhYmVsc1xuICAgIHN1YnN0ZXA6IHtcbiAgICAgIGlmICh0KSB7XG4gICAgICAgIHQgPSBwYXJzZU1JTUVUeXBlKHQpXG5cbiAgICAgICAgaWYgKHQgPT09ICdmYWlsdXJlJykge1xuICAgICAgICAgIHQgPSAnJ1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sYWJlbHNcbiAgICAgICAgICBicmVhayBzdWJzdGVwXG4gICAgICAgIH1cblxuICAgICAgICB0ID0gc2VyaWFsaXplQU1pbWVUeXBlKHQpLnRvTG93ZXJDYXNlKClcbiAgICAgIH1cblxuICAgICAgLy8gICAgMy4gSWYgdGhlIGxhc3RNb2RpZmllZCBtZW1iZXIgaXMgcHJvdmlkZWQsIGxldCBkIGJlIHNldCB0byB0aGVcbiAgICAgIC8vICAgIGxhc3RNb2RpZmllZCBkaWN0aW9uYXJ5IG1lbWJlci4gSWYgaXQgaXMgbm90IHByb3ZpZGVkLCBzZXQgZCB0byB0aGVcbiAgICAgIC8vICAgIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRlZCBhcyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZVxuICAgICAgLy8gICAgdGhlIFVuaXggRXBvY2ggKHdoaWNoIGlzIHRoZSBlcXVpdmFsZW50IG9mIERhdGUubm93KCkgW0VDTUEtMjYyXSkuXG4gICAgICBkID0gb3B0aW9ucy5sYXN0TW9kaWZpZWRcbiAgICB9XG5cbiAgICAvLyA0LiBSZXR1cm4gYSBuZXcgRmlsZSBvYmplY3QgRiBzdWNoIHRoYXQ6XG4gICAgLy8gRiByZWZlcnMgdG8gdGhlIGJ5dGVzIGJ5dGUgc2VxdWVuY2UuXG4gICAgLy8gRi5zaXplIGlzIHNldCB0byB0aGUgbnVtYmVyIG9mIHRvdGFsIGJ5dGVzIGluIGJ5dGVzLlxuICAgIC8vIEYubmFtZSBpcyBzZXQgdG8gbi5cbiAgICAvLyBGLnR5cGUgaXMgc2V0IHRvIHQuXG4gICAgLy8gRi5sYXN0TW9kaWZpZWQgaXMgc2V0IHRvIGQuXG5cbiAgICBzdXBlcihwcm9jZXNzQmxvYlBhcnRzKGZpbGVCaXRzLCBvcHRpb25zKSwgeyB0eXBlOiB0IH0pXG4gICAgdGhpc1trU3RhdGVdID0ge1xuICAgICAgbmFtZTogbixcbiAgICAgIGxhc3RNb2RpZmllZDogZCxcbiAgICAgIHR5cGU6IHRcbiAgICB9XG4gIH1cblxuICBnZXQgbmFtZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubmFtZVxuICB9XG5cbiAgZ2V0IGxhc3RNb2RpZmllZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubGFzdE1vZGlmaWVkXG4gIH1cblxuICBnZXQgdHlwZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0udHlwZVxuICB9XG59XG5cbmNsYXNzIEZpbGVMaWtlIHtcbiAgY29uc3RydWN0b3IgKGJsb2JMaWtlLCBmaWxlTmFtZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgLy8gVE9ETzogYXJndW1lbnQgaWRsIHR5cGUgY2hlY2tcblxuICAgIC8vIFRoZSBGaWxlIGNvbnN0cnVjdG9yIGlzIGludm9rZWQgd2l0aCB0d28gb3IgdGhyZWUgcGFyYW1ldGVycywgZGVwZW5kaW5nXG4gICAgLy8gb24gd2hldGhlciB0aGUgb3B0aW9uYWwgZGljdGlvbmFyeSBwYXJhbWV0ZXIgaXMgdXNlZC4gV2hlbiB0aGUgRmlsZSgpXG4gICAgLy8gY29uc3RydWN0b3IgaXMgaW52b2tlZCwgdXNlciBhZ2VudHMgbXVzdCBydW4gdGhlIGZvbGxvd2luZyBzdGVwczpcblxuICAgIC8vIDEuIExldCBieXRlcyBiZSB0aGUgcmVzdWx0IG9mIHByb2Nlc3NpbmcgYmxvYiBwYXJ0cyBnaXZlbiBmaWxlQml0cyBhbmRcbiAgICAvLyBvcHRpb25zLlxuXG4gICAgLy8gMi4gTGV0IG4gYmUgdGhlIGZpbGVOYW1lIGFyZ3VtZW50IHRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICBjb25zdCBuID0gZmlsZU5hbWVcblxuICAgIC8vIDMuIFByb2Nlc3MgRmlsZVByb3BlcnR5QmFnIGRpY3Rpb25hcnkgYXJndW1lbnQgYnkgcnVubmluZyB0aGUgZm9sbG93aW5nXG4gICAgLy8gc3Vic3RlcHM6XG5cbiAgICAvLyAgICAxLiBJZiB0aGUgdHlwZSBtZW1iZXIgaXMgcHJvdmlkZWQgYW5kIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nLCBsZXQgdFxuICAgIC8vICAgIGJlIHNldCB0byB0aGUgdHlwZSBkaWN0aW9uYXJ5IG1lbWJlci4gSWYgdCBjb250YWlucyBhbnkgY2hhcmFjdGVyc1xuICAgIC8vICAgIG91dHNpZGUgdGhlIHJhbmdlIFUrMDAyMCB0byBVKzAwN0UsIHRoZW4gc2V0IHQgdG8gdGhlIGVtcHR5IHN0cmluZ1xuICAgIC8vICAgIGFuZCByZXR1cm4gZnJvbSB0aGVzZSBzdWJzdGVwcy5cbiAgICAvLyAgICBUT0RPXG4gICAgY29uc3QgdCA9IG9wdGlvbnMudHlwZVxuXG4gICAgLy8gICAgMi4gQ29udmVydCBldmVyeSBjaGFyYWN0ZXIgaW4gdCB0byBBU0NJSSBsb3dlcmNhc2UuXG4gICAgLy8gICAgVE9ET1xuXG4gICAgLy8gICAgMy4gSWYgdGhlIGxhc3RNb2RpZmllZCBtZW1iZXIgaXMgcHJvdmlkZWQsIGxldCBkIGJlIHNldCB0byB0aGVcbiAgICAvLyAgICBsYXN0TW9kaWZpZWQgZGljdGlvbmFyeSBtZW1iZXIuIElmIGl0IGlzIG5vdCBwcm92aWRlZCwgc2V0IGQgdG8gdGhlXG4gICAgLy8gICAgY3VycmVudCBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGVkIGFzIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlXG4gICAgLy8gICAgdGhlIFVuaXggRXBvY2ggKHdoaWNoIGlzIHRoZSBlcXVpdmFsZW50IG9mIERhdGUubm93KCkgW0VDTUEtMjYyXSkuXG4gICAgY29uc3QgZCA9IG9wdGlvbnMubGFzdE1vZGlmaWVkID8/IERhdGUubm93KClcblxuICAgIC8vIDQuIFJldHVybiBhIG5ldyBGaWxlIG9iamVjdCBGIHN1Y2ggdGhhdDpcbiAgICAvLyBGIHJlZmVycyB0byB0aGUgYnl0ZXMgYnl0ZSBzZXF1ZW5jZS5cbiAgICAvLyBGLnNpemUgaXMgc2V0IHRvIHRoZSBudW1iZXIgb2YgdG90YWwgYnl0ZXMgaW4gYnl0ZXMuXG4gICAgLy8gRi5uYW1lIGlzIHNldCB0byBuLlxuICAgIC8vIEYudHlwZSBpcyBzZXQgdG8gdC5cbiAgICAvLyBGLmxhc3RNb2RpZmllZCBpcyBzZXQgdG8gZC5cblxuICAgIHRoaXNba1N0YXRlXSA9IHtcbiAgICAgIGJsb2JMaWtlLFxuICAgICAgbmFtZTogbixcbiAgICAgIHR5cGU6IHQsXG4gICAgICBsYXN0TW9kaWZpZWQ6IGRcbiAgICB9XG4gIH1cblxuICBzdHJlYW0gKC4uLmFyZ3MpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYmxvYkxpa2Uuc3RyZWFtKC4uLmFyZ3MpXG4gIH1cblxuICBhcnJheUJ1ZmZlciAoLi4uYXJncykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS5hcnJheUJ1ZmZlciguLi5hcmdzKVxuICB9XG5cbiAgc2xpY2UgKC4uLmFyZ3MpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYmxvYkxpa2Uuc2xpY2UoLi4uYXJncylcbiAgfVxuXG4gIHRleHQgKC4uLmFyZ3MpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYmxvYkxpa2UudGV4dCguLi5hcmdzKVxuICB9XG5cbiAgZ2V0IHNpemUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS5zaXplXG4gIH1cblxuICBnZXQgdHlwZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnR5cGVcbiAgfVxuXG4gIGdldCBuYW1lICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubmFtZVxuICB9XG5cbiAgZ2V0IGxhc3RNb2RpZmllZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmxhc3RNb2RpZmllZFxuICB9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddICgpIHtcbiAgICByZXR1cm4gJ0ZpbGUnXG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRmlsZS5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0ZpbGUnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICBuYW1lOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBsYXN0TW9kaWZpZWQ6IGtFbnVtZXJhYmxlUHJvcGVydHlcbn0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkJsb2IgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKEJsb2IpXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkJsb2JQYXJ0ID0gZnVuY3Rpb24gKFYsIG9wdHMpIHtcbiAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgPT09ICdPYmplY3QnKSB7XG4gICAgaWYgKGlzQmxvYkxpa2UoVikpIHtcbiAgICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CbG9iKFYsIHsgc3RyaWN0OiBmYWxzZSB9KVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIEFycmF5QnVmZmVyLmlzVmlldyhWKSB8fFxuICAgICAgdHlwZXMuaXNBbnlBcnJheUJ1ZmZlcihWKVxuICAgICkge1xuICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJ1ZmZlclNvdXJjZShWLCBvcHRzKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoViwgb3B0cylcbn1cblxud2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPEJsb2JQYXJ0PiddID0gd2ViaWRsLnNlcXVlbmNlQ29udmVydGVyKFxuICB3ZWJpZGwuY29udmVydGVycy5CbG9iUGFydFxuKVxuXG4vLyBodHRwczovL3d3dy53My5vcmcvVFIvRmlsZUFQSS8jZGZuLUZpbGVQcm9wZXJ0eUJhZ1xud2ViaWRsLmNvbnZlcnRlcnMuRmlsZVByb3BlcnR5QmFnID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAga2V5OiAnbGFzdE1vZGlmaWVkJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWydsb25nIGxvbmcnXSxcbiAgICBnZXQgZGVmYXVsdFZhbHVlICgpIHtcbiAgICAgIHJldHVybiBEYXRlLm5vdygpXG4gICAgfVxuICB9LFxuICB7XG4gICAga2V5OiAndHlwZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiAnJ1xuICB9LFxuICB7XG4gICAga2V5OiAnZW5kaW5ncycsXG4gICAgY29udmVydGVyOiAodmFsdWUpID0+IHtcbiAgICAgIHZhbHVlID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKHZhbHVlKVxuICAgICAgdmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpXG5cbiAgICAgIGlmICh2YWx1ZSAhPT0gJ25hdGl2ZScpIHtcbiAgICAgICAgdmFsdWUgPSAndHJhbnNwYXJlbnQnXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH0sXG4gICAgZGVmYXVsdFZhbHVlOiAndHJhbnNwYXJlbnQnXG4gIH1cbl0pXG5cbi8qKlxuICogQHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvRmlsZUFQSS8jcHJvY2Vzcy1ibG9iLXBhcnRzXG4gKiBAcGFyYW0geyhOb2RlSlMuVHlwZWRBcnJheXxCbG9ifHN0cmluZylbXX0gcGFydHNcbiAqIEBwYXJhbSB7eyB0eXBlOiBzdHJpbmcsIGVuZGluZ3M6IHN0cmluZyB9fSBvcHRpb25zXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NCbG9iUGFydHMgKHBhcnRzLCBvcHRpb25zKSB7XG4gIC8vIDEuIExldCBieXRlcyBiZSBhbiBlbXB0eSBzZXF1ZW5jZSBvZiBieXRlcy5cbiAgLyoqIEB0eXBlIHtOb2RlSlMuVHlwZWRBcnJheVtdfSAqL1xuICBjb25zdCBieXRlcyA9IFtdXG5cbiAgLy8gMi4gRm9yIGVhY2ggZWxlbWVudCBpbiBwYXJ0czpcbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIHBhcnRzKSB7XG4gICAgLy8gMS4gSWYgZWxlbWVudCBpcyBhIFVTVlN0cmluZywgcnVuIHRoZSBmb2xsb3dpbmcgc3Vic3RlcHM6XG4gICAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gMS4gTGV0IHMgYmUgZWxlbWVudC5cbiAgICAgIGxldCBzID0gZWxlbWVudFxuXG4gICAgICAvLyAyLiBJZiB0aGUgZW5kaW5ncyBtZW1iZXIgb2Ygb3B0aW9ucyBpcyBcIm5hdGl2ZVwiLCBzZXQgc1xuICAgICAgLy8gICAgdG8gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGxpbmUgZW5kaW5ncyB0byBuYXRpdmVcbiAgICAgIC8vICAgIG9mIGVsZW1lbnQuXG4gICAgICBpZiAob3B0aW9ucy5lbmRpbmdzID09PSAnbmF0aXZlJykge1xuICAgICAgICBzID0gY29udmVydExpbmVFbmRpbmdzTmF0aXZlKHMpXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIEFwcGVuZCB0aGUgcmVzdWx0IG9mIFVURi04IGVuY29kaW5nIHMgdG8gYnl0ZXMuXG4gICAgICBieXRlcy5wdXNoKGVuY29kZXIuZW5jb2RlKHMpKVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0eXBlcy5pc0FueUFycmF5QnVmZmVyKGVsZW1lbnQpIHx8XG4gICAgICB0eXBlcy5pc1R5cGVkQXJyYXkoZWxlbWVudClcbiAgICApIHtcbiAgICAgIC8vIDIuIElmIGVsZW1lbnQgaXMgYSBCdWZmZXJTb3VyY2UsIGdldCBhIGNvcHkgb2YgdGhlXG4gICAgICAvLyAgICBieXRlcyBoZWxkIGJ5IHRoZSBidWZmZXIgc291cmNlLCBhbmQgYXBwZW5kIHRob3NlXG4gICAgICAvLyAgICBieXRlcyB0byBieXRlcy5cbiAgICAgIGlmICghZWxlbWVudC5idWZmZXIpIHsgLy8gQXJyYXlCdWZmZXJcbiAgICAgICAgYnl0ZXMucHVzaChuZXcgVWludDhBcnJheShlbGVtZW50KSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgICAgbmV3IFVpbnQ4QXJyYXkoZWxlbWVudC5idWZmZXIsIGVsZW1lbnQuYnl0ZU9mZnNldCwgZWxlbWVudC5ieXRlTGVuZ3RoKVxuICAgICAgICApXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc0Jsb2JMaWtlKGVsZW1lbnQpKSB7XG4gICAgICAvLyAzLiBJZiBlbGVtZW50IGlzIGEgQmxvYiwgYXBwZW5kIHRoZSBieXRlcyBpdCByZXByZXNlbnRzXG4gICAgICAvLyAgICB0byBieXRlcy5cbiAgICAgIGJ5dGVzLnB1c2goZWxlbWVudClcbiAgICB9XG4gIH1cblxuICAvLyAzLiBSZXR1cm4gYnl0ZXMuXG4gIHJldHVybiBieXRlc1xufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL0ZpbGVBUEkvI2NvbnZlcnQtbGluZS1lbmRpbmdzLXRvLW5hdGl2ZVxuICogQHBhcmFtIHtzdHJpbmd9IHNcbiAqL1xuZnVuY3Rpb24gY29udmVydExpbmVFbmRpbmdzTmF0aXZlIChzKSB7XG4gIC8vIDEuIExldCBuYXRpdmUgbGluZSBlbmRpbmcgYmUgYmUgdGhlIGNvZGUgcG9pbnQgVSswMDBBIExGLlxuICBsZXQgbmF0aXZlTGluZUVuZGluZyA9ICdcXG4nXG5cbiAgLy8gMi4gSWYgdGhlIHVuZGVybHlpbmcgcGxhdGZvcm1cdTIwMTlzIGNvbnZlbnRpb25zIGFyZSB0b1xuICAvLyAgICByZXByZXNlbnQgbmV3bGluZXMgYXMgYSBjYXJyaWFnZSByZXR1cm4gYW5kIGxpbmUgZmVlZFxuICAvLyAgICBzZXF1ZW5jZSwgc2V0IG5hdGl2ZSBsaW5lIGVuZGluZyB0byB0aGUgY29kZSBwb2ludFxuICAvLyAgICBVKzAwMEQgQ1IgZm9sbG93ZWQgYnkgdGhlIGNvZGUgcG9pbnQgVSswMDBBIExGLlxuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIG5hdGl2ZUxpbmVFbmRpbmcgPSAnXFxyXFxuJ1xuICB9XG5cbiAgcmV0dXJuIHMucmVwbGFjZSgvXFxyP1xcbi9nLCBuYXRpdmVMaW5lRW5kaW5nKVxufVxuXG4vLyBJZiB0aGlzIGZ1bmN0aW9uIGlzIG1vdmVkIHRvIC4vdXRpbC5qcywgc29tZSB0b29scyAoc3VjaCBhc1xuLy8gcm9sbHVwKSB3aWxsIHdhcm4gYWJvdXQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLiBTZWU6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTYyOVxuZnVuY3Rpb24gaXNGaWxlTGlrZSAob2JqZWN0KSB7XG4gIHJldHVybiAoXG4gICAgKE5hdGl2ZUZpbGUgJiYgb2JqZWN0IGluc3RhbmNlb2YgTmF0aXZlRmlsZSkgfHxcbiAgICBvYmplY3QgaW5zdGFuY2VvZiBGaWxlIHx8IChcbiAgICAgIG9iamVjdCAmJlxuICAgICAgKHR5cGVvZiBvYmplY3Quc3RyZWFtID09PSAnZnVuY3Rpb24nIHx8XG4gICAgICB0eXBlb2Ygb2JqZWN0LmFycmF5QnVmZmVyID09PSAnZnVuY3Rpb24nKSAmJlxuICAgICAgb2JqZWN0W1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdGaWxlJ1xuICAgIClcbiAgKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgRmlsZSwgRmlsZUxpa2UsIGlzRmlsZUxpa2UgfVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGlzQmxvYkxpa2UsIHRvVVNWU3RyaW5nLCBtYWtlSXRlcmF0b3IgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGtTdGF0ZSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgRmlsZTogVW5kaWNpRmlsZSwgRmlsZUxpa2UsIGlzRmlsZUxpa2UgfSA9IHJlcXVpcmUoJy4vZmlsZScpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBCbG9iLCBGaWxlOiBOYXRpdmVGaWxlIH0gPSByZXF1aXJlKCdidWZmZXInKVxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ0ZpbGUnXX0gKi9cbmNvbnN0IEZpbGUgPSBOYXRpdmVGaWxlID8/IFVuZGljaUZpbGVcblxuLy8gaHR0cHM6Ly94aHIuc3BlYy53aGF0d2cub3JnLyNmb3JtZGF0YVxuY2xhc3MgRm9ybURhdGEge1xuICBjb25zdHJ1Y3RvciAoZm9ybSkge1xuICAgIGlmIChmb3JtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCh7XG4gICAgICAgIHByZWZpeDogJ0Zvcm1EYXRhIGNvbnN0cnVjdG9yJyxcbiAgICAgICAgYXJndW1lbnQ6ICdBcmd1bWVudCAxJyxcbiAgICAgICAgdHlwZXM6IFsndW5kZWZpbmVkJ11cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpc1trU3RhdGVdID0gW11cbiAgfVxuXG4gIGFwcGVuZCAobmFtZSwgdmFsdWUsIGZpbGVuYW1lID0gdW5kZWZpbmVkKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnRm9ybURhdGEuYXBwZW5kJyB9KVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgIWlzQmxvYkxpa2UodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdhcHBlbmQnIG9uICdGb3JtRGF0YSc6IHBhcmFtZXRlciAyIGlzIG5vdCBvZiB0eXBlICdCbG9iJ1wiXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IHZhbHVlIGJlIHZhbHVlIGlmIGdpdmVuOyBvdGhlcndpc2UgYmxvYlZhbHVlLlxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuICAgIHZhbHVlID0gaXNCbG9iTGlrZSh2YWx1ZSlcbiAgICAgID8gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYih2YWx1ZSwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gICAgICA6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyh2YWx1ZSlcbiAgICBmaWxlbmFtZSA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDNcbiAgICAgID8gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKGZpbGVuYW1lKVxuICAgICAgOiB1bmRlZmluZWRcblxuICAgIC8vIDIuIExldCBlbnRyeSBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFuIGVudHJ5IHdpdGhcbiAgICAvLyBuYW1lLCB2YWx1ZSwgYW5kIGZpbGVuYW1lIGlmIGdpdmVuLlxuICAgIGNvbnN0IGVudHJ5ID0gbWFrZUVudHJ5KG5hbWUsIHZhbHVlLCBmaWxlbmFtZSlcblxuICAgIC8vIDMuIEFwcGVuZCBlbnRyeSB0byB0aGlzXHUyMDE5cyBlbnRyeSBsaXN0LlxuICAgIHRoaXNba1N0YXRlXS5wdXNoKGVudHJ5KVxuICB9XG5cbiAgZGVsZXRlIChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRm9ybURhdGEuZGVsZXRlJyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuXG4gICAgLy8gVGhlIGRlbGV0ZShuYW1lKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJlbW92ZSBhbGwgZW50cmllcyB3aG9zZSBuYW1lXG4gICAgLy8gaXMgbmFtZSBmcm9tIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QuXG4gICAgdGhpc1trU3RhdGVdID0gdGhpc1trU3RhdGVdLmZpbHRlcihlbnRyeSA9PiBlbnRyeS5uYW1lICE9PSBuYW1lKVxuICB9XG5cbiAgZ2V0IChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRm9ybURhdGEuZ2V0JyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuXG4gICAgLy8gMS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgd2hvc2UgbmFtZSBpcyBuYW1lIGluIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QsXG4gICAgLy8gdGhlbiByZXR1cm4gbnVsbC5cbiAgICBjb25zdCBpZHggPSB0aGlzW2tTdGF0ZV0uZmluZEluZGV4KChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSlcbiAgICBpZiAoaWR4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbnRyeSB3aG9zZSBuYW1lIGlzIG5hbWUgZnJvbVxuICAgIC8vIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXVtpZHhdLnZhbHVlXG4gIH1cblxuICBnZXRBbGwgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGb3JtRGF0YS5nZXRBbGwnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUpXG5cbiAgICAvLyAxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSB3aG9zZSBuYW1lIGlzIG5hbWUgaW4gdGhpc1x1MjAxOXMgZW50cnkgbGlzdCxcbiAgICAvLyB0aGVuIHJldHVybiB0aGUgZW1wdHkgbGlzdC5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlcyBvZiBhbGwgZW50cmllcyB3aG9zZSBuYW1lIGlzIG5hbWUsIGluIG9yZGVyLFxuICAgIC8vIGZyb20gdGhpc1x1MjAxOXMgZW50cnkgbGlzdC5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdXG4gICAgICAuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSlcbiAgICAgIC5tYXAoKGVudHJ5KSA9PiBlbnRyeS52YWx1ZSlcbiAgfVxuXG4gIGhhcyAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0Zvcm1EYXRhLmhhcycgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcobmFtZSlcblxuICAgIC8vIFRoZSBoYXMobmFtZSkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhbiBlbnRyeVxuICAgIC8vIHdob3NlIG5hbWUgaXMgbmFtZSBpbiB0aGlzXHUyMDE5cyBlbnRyeSBsaXN0OyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5maW5kSW5kZXgoKGVudHJ5KSA9PiBlbnRyeS5uYW1lID09PSBuYW1lKSAhPT0gLTFcbiAgfVxuXG4gIHNldCAobmFtZSwgdmFsdWUsIGZpbGVuYW1lID0gdW5kZWZpbmVkKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnRm9ybURhdGEuc2V0JyB9KVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgIWlzQmxvYkxpa2UodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdzZXQnIG9uICdGb3JtRGF0YSc6IHBhcmFtZXRlciAyIGlzIG5vdCBvZiB0eXBlICdCbG9iJ1wiXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gVGhlIHNldChuYW1lLCB2YWx1ZSkgYW5kIHNldChuYW1lLCBibG9iVmFsdWUsIGZpbGVuYW1lKSBtZXRob2Qgc3RlcHNcbiAgICAvLyBhcmU6XG5cbiAgICAvLyAxLiBMZXQgdmFsdWUgYmUgdmFsdWUgaWYgZ2l2ZW47IG90aGVyd2lzZSBibG9iVmFsdWUuXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUpXG4gICAgdmFsdWUgPSBpc0Jsb2JMaWtlKHZhbHVlKVxuICAgICAgPyB3ZWJpZGwuY29udmVydGVycy5CbG9iKHZhbHVlLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgICAgIDogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHZhbHVlKVxuICAgIGZpbGVuYW1lID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gM1xuICAgICAgPyB0b1VTVlN0cmluZyhmaWxlbmFtZSlcbiAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAvLyAyLiBMZXQgZW50cnkgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBlbnRyeSB3aXRoIG5hbWUsIHZhbHVlLCBhbmRcbiAgICAvLyBmaWxlbmFtZSBpZiBnaXZlbi5cbiAgICBjb25zdCBlbnRyeSA9IG1ha2VFbnRyeShuYW1lLCB2YWx1ZSwgZmlsZW5hbWUpXG5cbiAgICAvLyAzLiBJZiB0aGVyZSBhcmUgZW50cmllcyBpbiB0aGlzXHUyMDE5cyBlbnRyeSBsaXN0IHdob3NlIG5hbWUgaXMgbmFtZSwgdGhlblxuICAgIC8vIHJlcGxhY2UgdGhlIGZpcnN0IHN1Y2ggZW50cnkgd2l0aCBlbnRyeSBhbmQgcmVtb3ZlIHRoZSBvdGhlcnMuXG4gICAgY29uc3QgaWR4ID0gdGhpc1trU3RhdGVdLmZpbmRJbmRleCgoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpXG4gICAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICAgIHRoaXNba1N0YXRlXSA9IFtcbiAgICAgICAgLi4udGhpc1trU3RhdGVdLnNsaWNlKDAsIGlkeCksXG4gICAgICAgIGVudHJ5LFxuICAgICAgICAuLi50aGlzW2tTdGF0ZV0uc2xpY2UoaWR4ICsgMSkuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkubmFtZSAhPT0gbmFtZSlcbiAgICAgIF1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBhcHBlbmQgZW50cnkgdG8gdGhpc1x1MjAxOXMgZW50cnkgbGlzdC5cbiAgICAgIHRoaXNba1N0YXRlXS5wdXNoKGVudHJ5KVxuICAgIH1cbiAgfVxuXG4gIGVudHJpZXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgcmV0dXJuIG1ha2VJdGVyYXRvcihcbiAgICAgICgpID0+IHRoaXNba1N0YXRlXS5tYXAocGFpciA9PiBbcGFpci5uYW1lLCBwYWlyLnZhbHVlXSksXG4gICAgICAnRm9ybURhdGEnLFxuICAgICAgJ2tleSt2YWx1ZSdcbiAgICApXG4gIH1cblxuICBrZXlzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IoXG4gICAgICAoKSA9PiB0aGlzW2tTdGF0ZV0ubWFwKHBhaXIgPT4gW3BhaXIubmFtZSwgcGFpci52YWx1ZV0pLFxuICAgICAgJ0Zvcm1EYXRhJyxcbiAgICAgICdrZXknXG4gICAgKVxuICB9XG5cbiAgdmFsdWVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IoXG4gICAgICAoKSA9PiB0aGlzW2tTdGF0ZV0ubWFwKHBhaXIgPT4gW3BhaXIubmFtZSwgcGFpci52YWx1ZV0pLFxuICAgICAgJ0Zvcm1EYXRhJyxcbiAgICAgICd2YWx1ZSdcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHsodmFsdWU6IHN0cmluZywga2V5OiBzdHJpbmcsIHNlbGY6IEZvcm1EYXRhKSA9PiB2b2lkfSBjYWxsYmFja0ZuXG4gICAqIEBwYXJhbSB7dW5rbm93bn0gdGhpc0FyZ1xuICAgKi9cbiAgZm9yRWFjaCAoY2FsbGJhY2tGbiwgdGhpc0FyZyA9IGdsb2JhbFRoaXMpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGb3JtRGF0YS5mb3JFYWNoJyB9KVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFja0ZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdmb3JFYWNoJyBvbiAnRm9ybURhdGEnOiBwYXJhbWV0ZXIgMSBpcyBub3Qgb2YgdHlwZSAnRnVuY3Rpb24nLlwiXG4gICAgICApXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdGhpcykge1xuICAgICAgY2FsbGJhY2tGbi5hcHBseSh0aGlzQXJnLCBbdmFsdWUsIGtleSwgdGhpc10pXG4gICAgfVxuICB9XG59XG5cbkZvcm1EYXRhLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gRm9ybURhdGEucHJvdG90eXBlLmVudHJpZXNcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRm9ybURhdGEucHJvdG90eXBlLCB7XG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdGb3JtRGF0YScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbi8qKlxuICogQHNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3JtLWNvbnRyb2wtaW5mcmFzdHJ1Y3R1cmUuaHRtbCNjcmVhdGUtYW4tZW50cnlcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge3N0cmluZ3xCbG9ifSB2YWx1ZVxuICogQHBhcmFtIHs/c3RyaW5nfSBmaWxlbmFtZVxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gbWFrZUVudHJ5IChuYW1lLCB2YWx1ZSwgZmlsZW5hbWUpIHtcbiAgLy8gMS4gU2V0IG5hbWUgdG8gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIG5hbWUgaW50byBhIHNjYWxhciB2YWx1ZSBzdHJpbmcuXG4gIC8vIFwiVG8gY29udmVydCBhIHN0cmluZyBpbnRvIGEgc2NhbGFyIHZhbHVlIHN0cmluZywgcmVwbGFjZSBhbnkgc3Vycm9nYXRlc1xuICAvLyAgd2l0aCBVK0ZGRkQuXCJcbiAgLy8gc2VlOiBodHRwczovL25vZGVqcy5vcmcvZGlzdC9sYXRlc3QtdjE4LngvZG9jcy9hcGkvYnVmZmVyLmh0bWwjYnVmdG9zdHJpbmdlbmNvZGluZy1zdGFydC1lbmRcbiAgbmFtZSA9IEJ1ZmZlci5mcm9tKG5hbWUpLnRvU3RyaW5nKCd1dGY4JylcblxuICAvLyAyLiBJZiB2YWx1ZSBpcyBhIHN0cmluZywgdGhlbiBzZXQgdmFsdWUgdG8gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nXG4gIC8vICAgIHZhbHVlIGludG8gYSBzY2FsYXIgdmFsdWUgc3RyaW5nLlxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHZhbHVlID0gQnVmZmVyLmZyb20odmFsdWUpLnRvU3RyaW5nKCd1dGY4JylcbiAgfSBlbHNlIHtcbiAgICAvLyAzLiBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBJZiB2YWx1ZSBpcyBub3QgYSBGaWxlIG9iamVjdCwgdGhlbiBzZXQgdmFsdWUgdG8gYSBuZXcgRmlsZSBvYmplY3QsXG4gICAgLy8gICAgcmVwcmVzZW50aW5nIHRoZSBzYW1lIGJ5dGVzLCB3aG9zZSBuYW1lIGF0dHJpYnV0ZSB2YWx1ZSBpcyBcImJsb2JcIlxuICAgIGlmICghaXNGaWxlTGlrZSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUgaW5zdGFuY2VvZiBCbG9iXG4gICAgICAgID8gbmV3IEZpbGUoW3ZhbHVlXSwgJ2Jsb2InLCB7IHR5cGU6IHZhbHVlLnR5cGUgfSlcbiAgICAgICAgOiBuZXcgRmlsZUxpa2UodmFsdWUsICdibG9iJywgeyB0eXBlOiB2YWx1ZS50eXBlIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgZmlsZW5hbWUgaXMgZ2l2ZW4sIHRoZW4gc2V0IHZhbHVlIHRvIGEgbmV3IEZpbGUgb2JqZWN0LFxuICAgIC8vICAgIHJlcHJlc2VudGluZyB0aGUgc2FtZSBieXRlcywgd2hvc2UgbmFtZSBhdHRyaWJ1dGUgaXMgZmlsZW5hbWUuXG4gICAgaWYgKGZpbGVuYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8qKiBAdHlwZSB7RmlsZVByb3BlcnR5QmFnfSAqL1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgdHlwZTogdmFsdWUudHlwZSxcbiAgICAgICAgbGFzdE1vZGlmaWVkOiB2YWx1ZS5sYXN0TW9kaWZpZWRcbiAgICAgIH1cblxuICAgICAgdmFsdWUgPSAoTmF0aXZlRmlsZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIE5hdGl2ZUZpbGUpIHx8IHZhbHVlIGluc3RhbmNlb2YgVW5kaWNpRmlsZVxuICAgICAgICA/IG5ldyBGaWxlKFt2YWx1ZV0sIGZpbGVuYW1lLCBvcHRpb25zKVxuICAgICAgICA6IG5ldyBGaWxlTGlrZSh2YWx1ZSwgZmlsZW5hbWUsIG9wdGlvbnMpXG4gICAgfVxuICB9XG5cbiAgLy8gNC4gUmV0dXJuIGFuIGVudHJ5IHdob3NlIG5hbWUgaXMgbmFtZSBhbmQgd2hvc2UgdmFsdWUgaXMgdmFsdWUuXG4gIHJldHVybiB7IG5hbWUsIHZhbHVlIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IEZvcm1EYXRhIH1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgQnVzYm95ID0gcmVxdWlyZSgnQGZhc3RpZnkvYnVzYm95JylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3Qge1xuICBSZWFkYWJsZVN0cmVhbUZyb20sXG4gIGlzQmxvYkxpa2UsXG4gIGlzUmVhZGFibGVTdHJlYW1MaWtlLFxuICByZWFkYWJsZVN0cmVhbUNsb3NlLFxuICBjcmVhdGVEZWZlcnJlZFByb21pc2UsXG4gIGZ1bGx5UmVhZEJvZHlcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBGb3JtRGF0YSB9ID0gcmVxdWlyZSgnLi9mb3JtZGF0YScpXG5jb25zdCB7IGtTdGF0ZSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCB7IERPTUV4Y2VwdGlvbiwgc3RydWN0dXJlZENsb25lIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IEJsb2IsIEZpbGU6IE5hdGl2ZUZpbGUgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5jb25zdCB7IGtCb2R5VXNlZCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IGlzRXJyb3JlZCB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgaXNVaW50OEFycmF5LCBpc0FycmF5QnVmZmVyIH0gPSByZXF1aXJlKCd1dGlsL3R5cGVzJylcbmNvbnN0IHsgRmlsZTogVW5kaWNpRmlsZSB9ID0gcmVxdWlyZSgnLi9maWxlJylcbmNvbnN0IHsgcGFyc2VNSU1FVHlwZSwgc2VyaWFsaXplQU1pbWVUeXBlIH0gPSByZXF1aXJlKCcuL2RhdGFVUkwnKVxuXG5sZXQgcmFuZG9tXG50cnkge1xuICBjb25zdCBjcnlwdG8gPSByZXF1aXJlKCdub2RlOmNyeXB0bycpXG4gIHJhbmRvbSA9IChtYXgpID0+IGNyeXB0by5yYW5kb21JbnQoMCwgbWF4KVxufSBjYXRjaCB7XG4gIHJhbmRvbSA9IChtYXgpID0+IE1hdGguZmxvb3IoTWF0aC5yYW5kb20obWF4KSlcbn1cblxubGV0IFJlYWRhYmxlU3RyZWFtID0gZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbVxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ0ZpbGUnXX0gKi9cbmNvbnN0IEZpbGUgPSBOYXRpdmVGaWxlID8/IFVuZGljaUZpbGVcbmNvbnN0IHRleHRFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKClcbmNvbnN0IHRleHREZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKClcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keWluaXQtZXh0cmFjdFxuZnVuY3Rpb24gZXh0cmFjdEJvZHkgKG9iamVjdCwga2VlcGFsaXZlID0gZmFsc2UpIHtcbiAgaWYgKCFSZWFkYWJsZVN0cmVhbSkge1xuICAgIFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG4gIH1cblxuICAvLyAxLiBMZXQgc3RyZWFtIGJlIG51bGwuXG4gIGxldCBzdHJlYW0gPSBudWxsXG5cbiAgLy8gMi4gSWYgb2JqZWN0IGlzIGEgUmVhZGFibGVTdHJlYW0gb2JqZWN0LCB0aGVuIHNldCBzdHJlYW0gdG8gb2JqZWN0LlxuICBpZiAob2JqZWN0IGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0pIHtcbiAgICBzdHJlYW0gPSBvYmplY3RcbiAgfSBlbHNlIGlmIChpc0Jsb2JMaWtlKG9iamVjdCkpIHtcbiAgICAvLyAzLiBPdGhlcndpc2UsIGlmIG9iamVjdCBpcyBhIEJsb2Igb2JqZWN0LCBzZXQgc3RyZWFtIHRvIHRoZVxuICAgIC8vICAgIHJlc3VsdCBvZiBydW5uaW5nIG9iamVjdFx1MjAxOXMgZ2V0IHN0cmVhbS5cbiAgICBzdHJlYW0gPSBvYmplY3Quc3RyZWFtKClcbiAgfSBlbHNlIHtcbiAgICAvLyA0LiBPdGhlcndpc2UsIHNldCBzdHJlYW0gdG8gYSBuZXcgUmVhZGFibGVTdHJlYW0gb2JqZWN0LCBhbmQgc2V0XG4gICAgLy8gICAgdXAgc3RyZWFtLlxuICAgIHN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICBhc3luYyBwdWxsIChjb250cm9sbGVyKSB7XG4gICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShcbiAgICAgICAgICB0eXBlb2Ygc291cmNlID09PSAnc3RyaW5nJyA/IHRleHRFbmNvZGVyLmVuY29kZShzb3VyY2UpIDogc291cmNlXG4gICAgICAgIClcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gcmVhZGFibGVTdHJlYW1DbG9zZShjb250cm9sbGVyKSlcbiAgICAgIH0sXG4gICAgICBzdGFydCAoKSB7fSxcbiAgICAgIHR5cGU6IHVuZGVmaW5lZFxuICAgIH0pXG4gIH1cblxuICAvLyA1LiBBc3NlcnQ6IHN0cmVhbSBpcyBhIFJlYWRhYmxlU3RyZWFtIG9iamVjdC5cbiAgYXNzZXJ0KGlzUmVhZGFibGVTdHJlYW1MaWtlKHN0cmVhbSkpXG5cbiAgLy8gNi4gTGV0IGFjdGlvbiBiZSBudWxsLlxuICBsZXQgYWN0aW9uID0gbnVsbFxuXG4gIC8vIDcuIExldCBzb3VyY2UgYmUgbnVsbC5cbiAgbGV0IHNvdXJjZSA9IG51bGxcblxuICAvLyA4LiBMZXQgbGVuZ3RoIGJlIG51bGwuXG4gIGxldCBsZW5ndGggPSBudWxsXG5cbiAgLy8gOS4gTGV0IHR5cGUgYmUgbnVsbC5cbiAgbGV0IHR5cGUgPSBudWxsXG5cbiAgLy8gMTAuIFN3aXRjaCBvbiBvYmplY3Q6XG4gIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJykge1xuICAgIC8vIFNldCBzb3VyY2UgdG8gdGhlIFVURi04IGVuY29kaW5nIG9mIG9iamVjdC5cbiAgICAvLyBOb3RlOiBzZXR0aW5nIHNvdXJjZSB0byBhIFVpbnQ4QXJyYXkgaGVyZSBicmVha3Mgc29tZSBtb2NraW5nIGFzc3VtcHRpb25zLlxuICAgIHNvdXJjZSA9IG9iamVjdFxuXG4gICAgLy8gU2V0IHR5cGUgdG8gYHRleHQvcGxhaW47Y2hhcnNldD1VVEYtOGAuXG4gICAgdHlwZSA9ICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnXG4gIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zKSB7XG4gICAgLy8gVVJMU2VhcmNoUGFyYW1zXG5cbiAgICAvLyBzcGVjIHNheXMgdG8gcnVuIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBvbiBib2R5Lmxpc3RcbiAgICAvLyB0aGlzIGlzIGltcGxlbWVudGVkIGluIE5vZGUuanMgYXMgYXBhcnQgb2YgYW4gVVJMU2VhcmNoUGFyYW1zIGluc3RhbmNlIHRvU3RyaW5nIG1ldGhvZFxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvZTQ2YzY4MGJmMmIyMTFiYmQ1MmNmOTU5Y2ExN2VlOThjN2Y2NTdmNS9saWIvaW50ZXJuYWwvdXJsLmpzI0w0OTBcbiAgICAvLyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvZTQ2YzY4MGJmMmIyMTFiYmQ1MmNmOTU5Y2ExN2VlOThjN2Y2NTdmNS9saWIvaW50ZXJuYWwvdXJsLmpzI0wxMTAwXG5cbiAgICAvLyBTZXQgc291cmNlIHRvIHRoZSByZXN1bHQgb2YgcnVubmluZyB0aGUgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIHNlcmlhbGl6ZXIgd2l0aCBvYmplY3RcdTIwMTlzIGxpc3QuXG4gICAgc291cmNlID0gb2JqZWN0LnRvU3RyaW5nKClcblxuICAgIC8vIFNldCB0eXBlIHRvIGBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOGAuXG4gICAgdHlwZSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCdcbiAgfSBlbHNlIGlmIChpc0FycmF5QnVmZmVyKG9iamVjdCkpIHtcbiAgICAvLyBCdWZmZXJTb3VyY2UvQXJyYXlCdWZmZXJcblxuICAgIC8vIFNldCBzb3VyY2UgdG8gYSBjb3B5IG9mIHRoZSBieXRlcyBoZWxkIGJ5IG9iamVjdC5cbiAgICBzb3VyY2UgPSBuZXcgVWludDhBcnJheShvYmplY3Quc2xpY2UoKSlcbiAgfSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcob2JqZWN0KSkge1xuICAgIC8vIEJ1ZmZlclNvdXJjZS9BcnJheUJ1ZmZlclZpZXdcblxuICAgIC8vIFNldCBzb3VyY2UgdG8gYSBjb3B5IG9mIHRoZSBieXRlcyBoZWxkIGJ5IG9iamVjdC5cbiAgICBzb3VyY2UgPSBuZXcgVWludDhBcnJheShvYmplY3QuYnVmZmVyLnNsaWNlKG9iamVjdC5ieXRlT2Zmc2V0LCBvYmplY3QuYnl0ZU9mZnNldCArIG9iamVjdC5ieXRlTGVuZ3RoKSlcbiAgfSBlbHNlIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKG9iamVjdCkpIHtcbiAgICBjb25zdCBib3VuZGFyeSA9IGAtLS0tZm9ybWRhdGEtdW5kaWNpLTAke2Ake3JhbmRvbSgxZTExKX1gLnBhZFN0YXJ0KDExLCAnMCcpfWBcbiAgICBjb25zdCBwcmVmaXggPSBgLS0ke2JvdW5kYXJ5fVxcclxcbkNvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YWBcblxuICAgIC8qISBmb3JtZGF0YS1wb2x5ZmlsbC4gTUlUIExpY2Vuc2UuIEppbW15IFdcdTAwRTRydGluZyA8aHR0cHM6Ly9qaW1teS53YXJ0aW5nLnNlL29wZW5zb3VyY2U+ICovXG4gICAgY29uc3QgZXNjYXBlID0gKHN0cikgPT5cbiAgICAgIHN0ci5yZXBsYWNlKC9cXG4vZywgJyUwQScpLnJlcGxhY2UoL1xcci9nLCAnJTBEJykucmVwbGFjZSgvXCIvZywgJyUyMicpXG4gICAgY29uc3Qgbm9ybWFsaXplTGluZWZlZWRzID0gKHZhbHVlKSA9PiB2YWx1ZS5yZXBsYWNlKC9cXHI/XFxufFxcci9nLCAnXFxyXFxuJylcblxuICAgIC8vIFNldCBhY3Rpb24gdG8gdGhpcyBzdGVwOiBydW4gdGhlIG11bHRpcGFydC9mb3JtLWRhdGFcbiAgICAvLyBlbmNvZGluZyBhbGdvcml0aG0sIHdpdGggb2JqZWN0XHUyMDE5cyBlbnRyeSBsaXN0IGFuZCBVVEYtOC5cbiAgICAvLyAtIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBib2R5IGlzIGltbXV0YWJsZSBhbmQgY2FuJ3QgYmUgY2hhbmdlZCBhZnRlcndvcmRzXG4gICAgLy8gLSBUaGF0IHRoZSBjb250ZW50LWxlbmd0aCBpcyBjYWxjdWxhdGVkIGluIGFkdmFuY2UuXG4gICAgLy8gLSBBbmQgdGhhdCBhbGwgcGFydHMgYXJlIHByZS1lbmNvZGVkIGFuZCByZWFkeSB0byBiZSBzZW50LlxuXG4gICAgY29uc3QgYmxvYlBhcnRzID0gW11cbiAgICBjb25zdCBybiA9IG5ldyBVaW50OEFycmF5KFsxMywgMTBdKSAvLyAnXFxyXFxuJ1xuICAgIGxlbmd0aCA9IDBcbiAgICBsZXQgaGFzVW5rbm93blNpemVWYWx1ZSA9IGZhbHNlXG5cbiAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2Ygb2JqZWN0KSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCBjaHVuayA9IHRleHRFbmNvZGVyLmVuY29kZShwcmVmaXggK1xuICAgICAgICAgIGA7IG5hbWU9XCIke2VzY2FwZShub3JtYWxpemVMaW5lZmVlZHMobmFtZSkpfVwiYCArXG4gICAgICAgICAgYFxcclxcblxcclxcbiR7bm9ybWFsaXplTGluZWZlZWRzKHZhbHVlKX1cXHJcXG5gKVxuICAgICAgICBibG9iUGFydHMucHVzaChjaHVuaylcbiAgICAgICAgbGVuZ3RoICs9IGNodW5rLmJ5dGVMZW5ndGhcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNodW5rID0gdGV4dEVuY29kZXIuZW5jb2RlKGAke3ByZWZpeH07IG5hbWU9XCIke2VzY2FwZShub3JtYWxpemVMaW5lZmVlZHMobmFtZSkpfVwiYCArXG4gICAgICAgICAgKHZhbHVlLm5hbWUgPyBgOyBmaWxlbmFtZT1cIiR7ZXNjYXBlKHZhbHVlLm5hbWUpfVwiYCA6ICcnKSArICdcXHJcXG4nICtcbiAgICAgICAgICBgQ29udGVudC1UeXBlOiAke1xuICAgICAgICAgICAgdmFsdWUudHlwZSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xuICAgICAgICAgIH1cXHJcXG5cXHJcXG5gKVxuICAgICAgICBibG9iUGFydHMucHVzaChjaHVuaywgdmFsdWUsIHJuKVxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlLnNpemUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgbGVuZ3RoICs9IGNodW5rLmJ5dGVMZW5ndGggKyB2YWx1ZS5zaXplICsgcm4uYnl0ZUxlbmd0aFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhhc1Vua25vd25TaXplVmFsdWUgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjaHVuayA9IHRleHRFbmNvZGVyLmVuY29kZShgLS0ke2JvdW5kYXJ5fS0tYClcbiAgICBibG9iUGFydHMucHVzaChjaHVuaylcbiAgICBsZW5ndGggKz0gY2h1bmsuYnl0ZUxlbmd0aFxuICAgIGlmIChoYXNVbmtub3duU2l6ZVZhbHVlKSB7XG4gICAgICBsZW5ndGggPSBudWxsXG4gICAgfVxuXG4gICAgLy8gU2V0IHNvdXJjZSB0byBvYmplY3QuXG4gICAgc291cmNlID0gb2JqZWN0XG5cbiAgICBhY3Rpb24gPSBhc3luYyBmdW5jdGlvbiAqICgpIHtcbiAgICAgIGZvciAoY29uc3QgcGFydCBvZiBibG9iUGFydHMpIHtcbiAgICAgICAgaWYgKHBhcnQuc3RyZWFtKSB7XG4gICAgICAgICAgeWllbGQgKiBwYXJ0LnN0cmVhbSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgeWllbGQgcGFydFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0IHR5cGUgdG8gYG11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PWAsXG4gICAgLy8gZm9sbG93ZWQgYnkgdGhlIG11bHRpcGFydC9mb3JtLWRhdGEgYm91bmRhcnkgc3RyaW5nIGdlbmVyYXRlZFxuICAgIC8vIGJ5IHRoZSBtdWx0aXBhcnQvZm9ybS1kYXRhIGVuY29kaW5nIGFsZ29yaXRobS5cbiAgICB0eXBlID0gJ211bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PScgKyBib3VuZGFyeVxuICB9IGVsc2UgaWYgKGlzQmxvYkxpa2Uob2JqZWN0KSkge1xuICAgIC8vIEJsb2JcblxuICAgIC8vIFNldCBzb3VyY2UgdG8gb2JqZWN0LlxuICAgIHNvdXJjZSA9IG9iamVjdFxuXG4gICAgLy8gU2V0IGxlbmd0aCB0byBvYmplY3RcdTIwMTlzIHNpemUuXG4gICAgbGVuZ3RoID0gb2JqZWN0LnNpemVcblxuICAgIC8vIElmIG9iamVjdFx1MjAxOXMgdHlwZSBhdHRyaWJ1dGUgaXMgbm90IHRoZSBlbXB0eSBieXRlIHNlcXVlbmNlLCBzZXRcbiAgICAvLyB0eXBlIHRvIGl0cyB2YWx1ZS5cbiAgICBpZiAob2JqZWN0LnR5cGUpIHtcbiAgICAgIHR5cGUgPSBvYmplY3QudHlwZVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIElmIGtlZXBhbGl2ZSBpcyB0cnVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChrZWVwYWxpdmUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2tlZXBhbGl2ZScpXG4gICAgfVxuXG4gICAgLy8gSWYgb2JqZWN0IGlzIGRpc3R1cmJlZCBvciBsb2NrZWQsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHV0aWwuaXNEaXN0dXJiZWQob2JqZWN0KSB8fCBvYmplY3QubG9ja2VkKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAnUmVzcG9uc2UgYm9keSBvYmplY3Qgc2hvdWxkIG5vdCBiZSBkaXN0dXJiZWQgb3IgbG9ja2VkJ1xuICAgICAgKVxuICAgIH1cblxuICAgIHN0cmVhbSA9XG4gICAgICBvYmplY3QgaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSA/IG9iamVjdCA6IFJlYWRhYmxlU3RyZWFtRnJvbShvYmplY3QpXG4gIH1cblxuICAvLyAxMS4gSWYgc291cmNlIGlzIGEgYnl0ZSBzZXF1ZW5jZSwgdGhlbiBzZXQgYWN0aW9uIHRvIGFcbiAgLy8gc3RlcCB0aGF0IHJldHVybnMgc291cmNlIGFuZCBsZW5ndGggdG8gc291cmNlXHUyMDE5cyBsZW5ndGguXG4gIGlmICh0eXBlb2Ygc291cmNlID09PSAnc3RyaW5nJyB8fCB1dGlsLmlzQnVmZmVyKHNvdXJjZSkpIHtcbiAgICBsZW5ndGggPSBCdWZmZXIuYnl0ZUxlbmd0aChzb3VyY2UpXG4gIH1cblxuICAvLyAxMi4gSWYgYWN0aW9uIGlzIG5vbi1udWxsLCB0aGVuIHJ1biB0aGVzZSBzdGVwcyBpbiBpbiBwYXJhbGxlbDpcbiAgaWYgKGFjdGlvbiAhPSBudWxsKSB7XG4gICAgLy8gUnVuIGFjdGlvbi5cbiAgICBsZXQgaXRlcmF0b3JcbiAgICBzdHJlYW0gPSBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICAgICAgYXN5bmMgc3RhcnQgKCkge1xuICAgICAgICBpdGVyYXRvciA9IGFjdGlvbihvYmplY3QpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpXG4gICAgICB9LFxuICAgICAgYXN5bmMgcHVsbCAoY29udHJvbGxlcikge1xuICAgICAgICBjb25zdCB7IHZhbHVlLCBkb25lIH0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KClcbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAvLyBXaGVuIHJ1bm5pbmcgYWN0aW9uIGlzIGRvbmUsIGNsb3NlIHN0cmVhbS5cbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKClcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFdoZW5ldmVyIG9uZSBvciBtb3JlIGJ5dGVzIGFyZSBhdmFpbGFibGUgYW5kIHN0cmVhbSBpcyBub3QgZXJyb3JlZCxcbiAgICAgICAgICAvLyBlbnF1ZXVlIGEgVWludDhBcnJheSB3cmFwcGluZyBhbiBBcnJheUJ1ZmZlciBjb250YWluaW5nIHRoZSBhdmFpbGFibGVcbiAgICAgICAgICAvLyBieXRlcyBpbnRvIHN0cmVhbS5cbiAgICAgICAgICBpZiAoIWlzRXJyb3JlZChzdHJlYW0pKSB7XG4gICAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkodmFsdWUpKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udHJvbGxlci5kZXNpcmVkU2l6ZSA+IDBcbiAgICAgIH0sXG4gICAgICBhc3luYyBjYW5jZWwgKHJlYXNvbikge1xuICAgICAgICBhd2FpdCBpdGVyYXRvci5yZXR1cm4oKVxuICAgICAgfSxcbiAgICAgIHR5cGU6IHVuZGVmaW5lZFxuICAgIH0pXG4gIH1cblxuICAvLyAxMy4gTGV0IGJvZHkgYmUgYSBib2R5IHdob3NlIHN0cmVhbSBpcyBzdHJlYW0sIHNvdXJjZSBpcyBzb3VyY2UsXG4gIC8vIGFuZCBsZW5ndGggaXMgbGVuZ3RoLlxuICBjb25zdCBib2R5ID0geyBzdHJlYW0sIHNvdXJjZSwgbGVuZ3RoIH1cblxuICAvLyAxNC4gUmV0dXJuIChib2R5LCB0eXBlKS5cbiAgcmV0dXJuIFtib2R5LCB0eXBlXVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keWluaXQtc2FmZWx5LWV4dHJhY3RcbmZ1bmN0aW9uIHNhZmVseUV4dHJhY3RCb2R5IChvYmplY3QsIGtlZXBhbGl2ZSA9IGZhbHNlKSB7XG4gIGlmICghUmVhZGFibGVTdHJlYW0pIHtcbiAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgIFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG4gIH1cblxuICAvLyBUbyBzYWZlbHkgZXh0cmFjdCBhIGJvZHkgYW5kIGEgYENvbnRlbnQtVHlwZWAgdmFsdWUgZnJvbVxuICAvLyBhIGJ5dGUgc2VxdWVuY2Ugb3IgQm9keUluaXQgb2JqZWN0IG9iamVjdCwgcnVuIHRoZXNlIHN0ZXBzOlxuXG4gIC8vIDEuIElmIG9iamVjdCBpcyBhIFJlYWRhYmxlU3RyZWFtIG9iamVjdCwgdGhlbjpcbiAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtKSB7XG4gICAgLy8gQXNzZXJ0OiBvYmplY3QgaXMgbmVpdGhlciBkaXN0dXJiZWQgbm9yIGxvY2tlZC5cbiAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgIGFzc2VydCghdXRpbC5pc0Rpc3R1cmJlZChvYmplY3QpLCAnVGhlIGJvZHkgaGFzIGFscmVhZHkgYmVlbiBjb25zdW1lZC4nKVxuICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgYXNzZXJ0KCFvYmplY3QubG9ja2VkLCAnVGhlIHN0cmVhbSBpcyBsb2NrZWQuJylcbiAgfVxuXG4gIC8vIDIuIFJldHVybiB0aGUgcmVzdWx0cyBvZiBleHRyYWN0aW5nIG9iamVjdC5cbiAgcmV0dXJuIGV4dHJhY3RCb2R5KG9iamVjdCwga2VlcGFsaXZlKVxufVxuXG5mdW5jdGlvbiBjbG9uZUJvZHkgKGJvZHkpIHtcbiAgLy8gVG8gY2xvbmUgYSBib2R5IGJvZHksIHJ1biB0aGVzZSBzdGVwczpcblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ib2R5LWNsb25lXG5cbiAgLy8gMS4gTGV0IFx1MDBBQiBvdXQxLCBvdXQyIFx1MDBCQiBiZSB0aGUgcmVzdWx0IG9mIHRlZWluZyBib2R5XHUyMDE5cyBzdHJlYW0uXG4gIGNvbnN0IFtvdXQxLCBvdXQyXSA9IGJvZHkuc3RyZWFtLnRlZSgpXG4gIGNvbnN0IG91dDJDbG9uZSA9IHN0cnVjdHVyZWRDbG9uZShvdXQyLCB7IHRyYW5zZmVyOiBbb3V0Ml0gfSlcbiAgLy8gVGhpcywgZm9yIHdoYXRldmVyIHJlYXNvbnMsIHVucmVmcyBvdXQyQ2xvbmUgd2hpY2ggYWxsb3dzXG4gIC8vIHRoZSBwcm9jZXNzIHRvIGV4aXQgYnkgaXRzZWxmLlxuICBjb25zdCBbLCBmaW5hbENsb25lXSA9IG91dDJDbG9uZS50ZWUoKVxuXG4gIC8vIDIuIFNldCBib2R5XHUyMDE5cyBzdHJlYW0gdG8gb3V0MS5cbiAgYm9keS5zdHJlYW0gPSBvdXQxXG5cbiAgLy8gMy4gUmV0dXJuIGEgYm9keSB3aG9zZSBzdHJlYW0gaXMgb3V0MiBhbmQgb3RoZXIgbWVtYmVycyBhcmUgY29waWVkIGZyb20gYm9keS5cbiAgcmV0dXJuIHtcbiAgICBzdHJlYW06IGZpbmFsQ2xvbmUsXG4gICAgbGVuZ3RoOiBib2R5Lmxlbmd0aCxcbiAgICBzb3VyY2U6IGJvZHkuc291cmNlXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gKiBjb25zdW1lQm9keSAoYm9keSkge1xuICBpZiAoYm9keSkge1xuICAgIGlmIChpc1VpbnQ4QXJyYXkoYm9keSkpIHtcbiAgICAgIHlpZWxkIGJvZHlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3RyZWFtID0gYm9keS5zdHJlYW1cblxuICAgICAgaWYgKHV0aWwuaXNEaXN0dXJiZWQoc3RyZWFtKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgYm9keSBoYXMgYWxyZWFkeSBiZWVuIGNvbnN1bWVkLicpXG4gICAgICB9XG5cbiAgICAgIGlmIChzdHJlYW0ubG9ja2VkKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBzdHJlYW0gaXMgbG9ja2VkLicpXG4gICAgICB9XG5cbiAgICAgIC8vIENvbXBhdC5cbiAgICAgIHN0cmVhbVtrQm9keVVzZWRdID0gdHJ1ZVxuXG4gICAgICB5aWVsZCAqIHN0cmVhbVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd0lmQWJvcnRlZCAoc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJylcbiAgfVxufVxuXG5mdW5jdGlvbiBib2R5TWl4aW5NZXRob2RzIChpbnN0YW5jZSkge1xuICBjb25zdCBtZXRob2RzID0ge1xuICAgIGJsb2IgKCkge1xuICAgICAgLy8gVGhlIGJsb2IoKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mXG4gICAgICAvLyBydW5uaW5nIGNvbnN1bWUgYm9keSB3aXRoIHRoaXMgYW5kIHRoZSBmb2xsb3dpbmcgc3RlcFxuICAgICAgLy8gZ2l2ZW4gYSBieXRlIHNlcXVlbmNlIGJ5dGVzOiByZXR1cm4gYSBCbG9iIHdob3NlXG4gICAgICAvLyBjb250ZW50cyBhcmUgYnl0ZXMgYW5kIHdob3NlIHR5cGUgYXR0cmlidXRlIGlzIHRoaXNcdTIwMTlzXG4gICAgICAvLyBNSU1FIHR5cGUuXG4gICAgICByZXR1cm4gc3BlY0NvbnN1bWVCb2R5KHRoaXMsIChieXRlcykgPT4ge1xuICAgICAgICBsZXQgbWltZVR5cGUgPSBib2R5TWltZVR5cGUodGhpcylcblxuICAgICAgICBpZiAobWltZVR5cGUgPT09ICdmYWlsdXJlJykge1xuICAgICAgICAgIG1pbWVUeXBlID0gJydcbiAgICAgICAgfSBlbHNlIGlmIChtaW1lVHlwZSkge1xuICAgICAgICAgIG1pbWVUeXBlID0gc2VyaWFsaXplQU1pbWVUeXBlKG1pbWVUeXBlKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmV0dXJuIGEgQmxvYiB3aG9zZSBjb250ZW50cyBhcmUgYnl0ZXMgYW5kIHR5cGUgYXR0cmlidXRlXG4gICAgICAgIC8vIGlzIG1pbWVUeXBlLlxuICAgICAgICByZXR1cm4gbmV3IEJsb2IoW2J5dGVzXSwgeyB0eXBlOiBtaW1lVHlwZSB9KVxuICAgICAgfSwgaW5zdGFuY2UpXG4gICAgfSxcblxuICAgIGFycmF5QnVmZmVyICgpIHtcbiAgICAgIC8vIFRoZSBhcnJheUJ1ZmZlcigpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHRcbiAgICAgIC8vIG9mIHJ1bm5pbmcgY29uc3VtZSBib2R5IHdpdGggdGhpcyBhbmQgdGhlIGZvbGxvd2luZyBzdGVwXG4gICAgICAvLyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgYnl0ZXM6IHJldHVybiBhIG5ldyBBcnJheUJ1ZmZlclxuICAgICAgLy8gd2hvc2UgY29udGVudHMgYXJlIGJ5dGVzLlxuICAgICAgcmV0dXJuIHNwZWNDb25zdW1lQm9keSh0aGlzLCAoYnl0ZXMpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGJ5dGVzKS5idWZmZXJcbiAgICAgIH0sIGluc3RhbmNlKVxuICAgIH0sXG5cbiAgICB0ZXh0ICgpIHtcbiAgICAgIC8vIFRoZSB0ZXh0KCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5nXG4gICAgICAvLyBjb25zdW1lIGJvZHkgd2l0aCB0aGlzIGFuZCBVVEYtOCBkZWNvZGUuXG4gICAgICByZXR1cm4gc3BlY0NvbnN1bWVCb2R5KHRoaXMsIHV0ZjhEZWNvZGVCeXRlcywgaW5zdGFuY2UpXG4gICAgfSxcblxuICAgIGpzb24gKCkge1xuICAgICAgLy8gVGhlIGpzb24oKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgICAgIC8vIGNvbnN1bWUgYm9keSB3aXRoIHRoaXMgYW5kIHBhcnNlIEpTT04gZnJvbSBieXRlcy5cbiAgICAgIHJldHVybiBzcGVjQ29uc3VtZUJvZHkodGhpcywgcGFyc2VKU09ORnJvbUJ5dGVzLCBpbnN0YW5jZSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZm9ybURhdGEgKCkge1xuICAgICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgaW5zdGFuY2UpXG5cbiAgICAgIHRocm93SWZBYm9ydGVkKHRoaXNba1N0YXRlXSlcblxuICAgICAgY29uc3QgY29udGVudFR5cGUgPSB0aGlzLmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKVxuXG4gICAgICAvLyBJZiBtaW1lVHlwZVx1MjAxOXMgZXNzZW5jZSBpcyBcIm11bHRpcGFydC9mb3JtLWRhdGFcIiwgdGhlbjpcbiAgICAgIGlmICgvbXVsdGlwYXJ0XFwvZm9ybS1kYXRhLy50ZXN0KGNvbnRlbnRUeXBlKSkge1xuICAgICAgICBjb25zdCBoZWFkZXJzID0ge31cbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdGhpcy5oZWFkZXJzKSBoZWFkZXJzW2tleS50b0xvd2VyQ2FzZSgpXSA9IHZhbHVlXG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2VGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpXG5cbiAgICAgICAgbGV0IGJ1c2JveVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYnVzYm95ID0gbmV3IEJ1c2JveSh7XG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgcHJlc2VydmVQYXRoOiB0cnVlXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihgJHtlcnJ9YCwgJ0Fib3J0RXJyb3InKVxuICAgICAgICB9XG5cbiAgICAgICAgYnVzYm95Lm9uKCdmaWVsZCcsIChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIHJlc3BvbnNlRm9ybURhdGEuYXBwZW5kKG5hbWUsIHZhbHVlKVxuICAgICAgICB9KVxuICAgICAgICBidXNib3kub24oJ2ZpbGUnLCAobmFtZSwgdmFsdWUsIGZpbGVuYW1lLCBlbmNvZGluZywgbWltZVR5cGUpID0+IHtcbiAgICAgICAgICBjb25zdCBjaHVua3MgPSBbXVxuXG4gICAgICAgICAgaWYgKGVuY29kaW5nID09PSAnYmFzZTY0JyB8fCBlbmNvZGluZy50b0xvd2VyQ2FzZSgpID09PSAnYmFzZTY0Jykge1xuICAgICAgICAgICAgbGV0IGJhc2U2NGNodW5rID0gJydcblxuICAgICAgICAgICAgdmFsdWUub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICAgICAgICAgICAgYmFzZTY0Y2h1bmsgKz0gY2h1bmsudG9TdHJpbmcoKS5yZXBsYWNlKC9bXFxyXFxuXS9nbSwgJycpXG5cbiAgICAgICAgICAgICAgY29uc3QgZW5kID0gYmFzZTY0Y2h1bmsubGVuZ3RoIC0gYmFzZTY0Y2h1bmsubGVuZ3RoICUgNFxuICAgICAgICAgICAgICBjaHVua3MucHVzaChCdWZmZXIuZnJvbShiYXNlNjRjaHVuay5zbGljZSgwLCBlbmQpLCAnYmFzZTY0JykpXG5cbiAgICAgICAgICAgICAgYmFzZTY0Y2h1bmsgPSBiYXNlNjRjaHVuay5zbGljZShlbmQpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgdmFsdWUub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgY2h1bmtzLnB1c2goQnVmZmVyLmZyb20oYmFzZTY0Y2h1bmssICdiYXNlNjQnKSlcbiAgICAgICAgICAgICAgcmVzcG9uc2VGb3JtRGF0YS5hcHBlbmQobmFtZSwgbmV3IEZpbGUoY2h1bmtzLCBmaWxlbmFtZSwgeyB0eXBlOiBtaW1lVHlwZSB9KSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgICAgICAgICAgIGNodW5rcy5wdXNoKGNodW5rKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHZhbHVlLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgIHJlc3BvbnNlRm9ybURhdGEuYXBwZW5kKG5hbWUsIG5ldyBGaWxlKGNodW5rcywgZmlsZW5hbWUsIHsgdHlwZTogbWltZVR5cGUgfSkpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCBidXNib3lSZXNvbHZlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIGJ1c2JveS5vbignZmluaXNoJywgcmVzb2x2ZSlcbiAgICAgICAgICBidXNib3kub24oJ2Vycm9yJywgKGVycikgPT4gcmVqZWN0KG5ldyBUeXBlRXJyb3IoZXJyKSkpXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKHRoaXMuYm9keSAhPT0gbnVsbCkgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBjb25zdW1lQm9keSh0aGlzW2tTdGF0ZV0uYm9keSkpIGJ1c2JveS53cml0ZShjaHVuaylcbiAgICAgICAgYnVzYm95LmVuZCgpXG4gICAgICAgIGF3YWl0IGJ1c2JveVJlc29sdmVcblxuICAgICAgICByZXR1cm4gcmVzcG9uc2VGb3JtRGF0YVxuICAgICAgfSBlbHNlIGlmICgvYXBwbGljYXRpb25cXC94LXd3dy1mb3JtLXVybGVuY29kZWQvLnRlc3QoY29udGVudFR5cGUpKSB7XG4gICAgICAgIC8vIE90aGVyd2lzZSwgaWYgbWltZVR5cGVcdTIwMTlzIGVzc2VuY2UgaXMgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiwgdGhlbjpcblxuICAgICAgICAvLyAxLiBMZXQgZW50cmllcyBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgYnl0ZXMuXG4gICAgICAgIGxldCBlbnRyaWVzXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbGV0IHRleHQgPSAnJ1xuICAgICAgICAgIC8vIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBwYXJzZXIgd2lsbCBrZWVwIHRoZSBCT00uXG4gICAgICAgICAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXVybGVuY29kZWQtcGFyc2VyXG4gICAgICAgICAgLy8gTm90ZSB0aGF0IHN0cmVhbWluZyBkZWNvZGVyIGlzIHN0YXRlZnVsIGFuZCBjYW5ub3QgYmUgcmV1c2VkXG4gICAgICAgICAgY29uc3Qgc3RyZWFtaW5nRGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigndXRmLTgnLCB7IGlnbm9yZUJPTTogdHJ1ZSB9KVxuXG4gICAgICAgICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBjb25zdW1lQm9keSh0aGlzW2tTdGF0ZV0uYm9keSkpIHtcbiAgICAgICAgICAgIGlmICghaXNVaW50OEFycmF5KGNodW5rKSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBVaW50OEFycmF5IGNodW5rJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRleHQgKz0gc3RyZWFtaW5nRGVjb2Rlci5kZWNvZGUoY2h1bmssIHsgc3RyZWFtOiB0cnVlIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIHRleHQgKz0gc3RyZWFtaW5nRGVjb2Rlci5kZWNvZGUoKVxuICAgICAgICAgIGVudHJpZXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHRleHQpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBVbmNsZWFyIHdoZW4gbmV3IFVSTFNlYXJjaFBhcmFtcyBjYW4gZmFpbCBvbiBhIHN0cmluZy5cbiAgICAgICAgICAvLyAyLiBJZiBlbnRyaWVzIGlzIGZhaWx1cmUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICAgICAgdGhyb3cgT2JqZWN0LmFzc2lnbihuZXcgVHlwZUVycm9yKCksIHsgY2F1c2U6IGVyciB9KVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gUmV0dXJuIGEgbmV3IEZvcm1EYXRhIG9iamVjdCB3aG9zZSBlbnRyaWVzIGFyZSBlbnRyaWVzLlxuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpXG4gICAgICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgZm9ybURhdGEuYXBwZW5kKG5hbWUsIHZhbHVlKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JtRGF0YVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gV2FpdCBhIHRpY2sgYmVmb3JlIGNoZWNraW5nIGlmIHRoZSByZXF1ZXN0IGhhcyBiZWVuIGFib3J0ZWQuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgYSBUeXBlRXJyb3IgY2FuIGJlIHRocm93biB3aGVuIGFuIEFib3J0RXJyb3Igc2hvdWxkLlxuICAgICAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUoKVxuXG4gICAgICAgIHRocm93SWZBYm9ydGVkKHRoaXNba1N0YXRlXSlcblxuICAgICAgICAvLyBPdGhlcndpc2UsIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgaGVhZGVyOiBgJHtpbnN0YW5jZS5uYW1lfS5mb3JtRGF0YWAsXG4gICAgICAgICAgbWVzc2FnZTogJ0NvdWxkIG5vdCBwYXJzZSBjb250ZW50IGFzIEZvcm1EYXRhLidcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWV0aG9kc1xufVxuXG5mdW5jdGlvbiBtaXhpbkJvZHkgKHByb3RvdHlwZSkge1xuICBPYmplY3QuYXNzaWduKHByb3RvdHlwZS5wcm90b3R5cGUsIGJvZHlNaXhpbk1ldGhvZHMocHJvdG90eXBlKSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWJvZHktY29uc3VtZS1ib2R5XG4gKiBAcGFyYW0ge1Jlc3BvbnNlfFJlcXVlc3R9IG9iamVjdFxuICogQHBhcmFtIHsodmFsdWU6IHVua25vd24pID0+IHVua25vd259IGNvbnZlcnRCeXRlc1RvSlNWYWx1ZVxuICogQHBhcmFtIHtSZXNwb25zZXxSZXF1ZXN0fSBpbnN0YW5jZVxuICovXG5hc3luYyBmdW5jdGlvbiBzcGVjQ29uc3VtZUJvZHkgKG9iamVjdCwgY29udmVydEJ5dGVzVG9KU1ZhbHVlLCBpbnN0YW5jZSkge1xuICB3ZWJpZGwuYnJhbmRDaGVjayhvYmplY3QsIGluc3RhbmNlKVxuXG4gIHRocm93SWZBYm9ydGVkKG9iamVjdFtrU3RhdGVdKVxuXG4gIC8vIDEuIElmIG9iamVjdCBpcyB1bnVzYWJsZSwgdGhlbiByZXR1cm4gYSBwcm9taXNlIHJlamVjdGVkXG4gIC8vICAgIHdpdGggYSBUeXBlRXJyb3IuXG4gIGlmIChib2R5VW51c2FibGUob2JqZWN0W2tTdGF0ZV0uYm9keSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb2R5IGlzIHVudXNhYmxlJylcbiAgfVxuXG4gIC8vIDIuIExldCBwcm9taXNlIGJlIGEgbmV3IHByb21pc2UuXG4gIGNvbnN0IHByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gIC8vIDMuIExldCBlcnJvclN0ZXBzIGdpdmVuIGVycm9yIGJlIHRvIHJlamVjdCBwcm9taXNlIHdpdGggZXJyb3IuXG4gIGNvbnN0IGVycm9yU3RlcHMgPSAoZXJyb3IpID0+IHByb21pc2UucmVqZWN0KGVycm9yKVxuXG4gIC8vIDQuIExldCBzdWNjZXNzU3RlcHMgZ2l2ZW4gYSBieXRlIHNlcXVlbmNlIGRhdGEgYmUgdG8gcmVzb2x2ZVxuICAvLyAgICBwcm9taXNlIHdpdGggdGhlIHJlc3VsdCBvZiBydW5uaW5nIGNvbnZlcnRCeXRlc1RvSlNWYWx1ZVxuICAvLyAgICB3aXRoIGRhdGEuIElmIHRoYXQgdGhyZXcgYW4gZXhjZXB0aW9uLCB0aGVuIHJ1biBlcnJvclN0ZXBzXG4gIC8vICAgIHdpdGggdGhhdCBleGNlcHRpb24uXG4gIGNvbnN0IHN1Y2Nlc3NTdGVwcyA9IChkYXRhKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHByb21pc2UucmVzb2x2ZShjb252ZXJ0Qnl0ZXNUb0pTVmFsdWUoZGF0YSkpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3JTdGVwcyhlKVxuICAgIH1cbiAgfVxuXG4gIC8vIDUuIElmIG9iamVjdFx1MjAxOXMgYm9keSBpcyBudWxsLCB0aGVuIHJ1biBzdWNjZXNzU3RlcHMgd2l0aCBhblxuICAvLyAgICBlbXB0eSBieXRlIHNlcXVlbmNlLlxuICBpZiAob2JqZWN0W2tTdGF0ZV0uYm9keSA9PSBudWxsKSB7XG4gICAgc3VjY2Vzc1N0ZXBzKG5ldyBVaW50OEFycmF5KCkpXG4gICAgcmV0dXJuIHByb21pc2UucHJvbWlzZVxuICB9XG5cbiAgLy8gNi4gT3RoZXJ3aXNlLCBmdWxseSByZWFkIG9iamVjdFx1MjAxOXMgYm9keSBnaXZlbiBzdWNjZXNzU3RlcHMsXG4gIC8vICAgIGVycm9yU3RlcHMsIGFuZCBvYmplY3RcdTIwMTlzIHJlbGV2YW50IGdsb2JhbCBvYmplY3QuXG4gIGF3YWl0IGZ1bGx5UmVhZEJvZHkob2JqZWN0W2tTdGF0ZV0uYm9keSwgc3VjY2Vzc1N0ZXBzLCBlcnJvclN0ZXBzKVxuXG4gIC8vIDcuIFJldHVybiBwcm9taXNlLlxuICByZXR1cm4gcHJvbWlzZS5wcm9taXNlXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNib2R5LXVudXNhYmxlXG5mdW5jdGlvbiBib2R5VW51c2FibGUgKGJvZHkpIHtcbiAgLy8gQW4gb2JqZWN0IGluY2x1ZGluZyB0aGUgQm9keSBpbnRlcmZhY2UgbWl4aW4gaXNcbiAgLy8gc2FpZCB0byBiZSB1bnVzYWJsZSBpZiBpdHMgYm9keSBpcyBub24tbnVsbCBhbmRcbiAgLy8gaXRzIGJvZHlcdTIwMTlzIHN0cmVhbSBpcyBkaXN0dXJiZWQgb3IgbG9ja2VkLlxuICByZXR1cm4gYm9keSAhPSBudWxsICYmIChib2R5LnN0cmVhbS5sb2NrZWQgfHwgdXRpbC5pc0Rpc3R1cmJlZChib2R5LnN0cmVhbSkpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jdXRmLTgtZGVjb2RlXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmZmVyXG4gKi9cbmZ1bmN0aW9uIHV0ZjhEZWNvZGVCeXRlcyAoYnVmZmVyKSB7XG4gIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICAvLyAxLiBMZXQgYnVmZmVyIGJlIHRoZSByZXN1bHQgb2YgcGVla2luZyB0aHJlZSBieXRlcyBmcm9tXG4gIC8vICAgIGlvUXVldWUsIGNvbnZlcnRlZCB0byBhIGJ5dGUgc2VxdWVuY2UuXG5cbiAgLy8gMi4gSWYgYnVmZmVyIGlzIDB4RUYgMHhCQiAweEJGLCB0aGVuIHJlYWQgdGhyZWVcbiAgLy8gICAgYnl0ZXMgZnJvbSBpb1F1ZXVlLiAoRG8gbm90aGluZyB3aXRoIHRob3NlIGJ5dGVzLilcbiAgaWYgKGJ1ZmZlclswXSA9PT0gMHhFRiAmJiBidWZmZXJbMV0gPT09IDB4QkIgJiYgYnVmZmVyWzJdID09PSAweEJGKSB7XG4gICAgYnVmZmVyID0gYnVmZmVyLnN1YmFycmF5KDMpXG4gIH1cblxuICAvLyAzLiBQcm9jZXNzIGEgcXVldWUgd2l0aCBhbiBpbnN0YW5jZSBvZiBVVEYtOFx1MjAxOXNcbiAgLy8gICAgZGVjb2RlciwgaW9RdWV1ZSwgb3V0cHV0LCBhbmQgXCJyZXBsYWNlbWVudFwiLlxuICBjb25zdCBvdXRwdXQgPSB0ZXh0RGVjb2Rlci5kZWNvZGUoYnVmZmVyKVxuXG4gIC8vIDQuIFJldHVybiBvdXRwdXQuXG4gIHJldHVybiBvdXRwdXRcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNwYXJzZS1qc29uLWJ5dGVzLXRvLWEtamF2YXNjcmlwdC12YWx1ZVxuICogQHBhcmFtIHtVaW50OEFycmF5fSBieXRlc1xuICovXG5mdW5jdGlvbiBwYXJzZUpTT05Gcm9tQnl0ZXMgKGJ5dGVzKSB7XG4gIHJldHVybiBKU09OLnBhcnNlKHV0ZjhEZWNvZGVCeXRlcyhieXRlcykpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ib2R5LW1pbWUtdHlwZVxuICogQHBhcmFtIHtpbXBvcnQoJy4vcmVzcG9uc2UnKS5SZXNwb25zZXxpbXBvcnQoJy4vcmVxdWVzdCcpLlJlcXVlc3R9IG9iamVjdFxuICovXG5mdW5jdGlvbiBib2R5TWltZVR5cGUgKG9iamVjdCkge1xuICBjb25zdCB7IGhlYWRlcnNMaXN0IH0gPSBvYmplY3Rba1N0YXRlXVxuICBjb25zdCBjb250ZW50VHlwZSA9IGhlYWRlcnNMaXN0LmdldCgnY29udGVudC10eXBlJylcblxuICBpZiAoY29udGVudFR5cGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICByZXR1cm4gcGFyc2VNSU1FVHlwZShjb250ZW50VHlwZSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGV4dHJhY3RCb2R5LFxuICBzYWZlbHlFeHRyYWN0Qm9keSxcbiAgY2xvbmVCb2R5LFxuICBtaXhpbkJvZHlcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgTm90U3VwcG9ydGVkRXJyb3Jcbn0gPSByZXF1aXJlKCcuL2Vycm9ycycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBrSFRUUDJCdWlsZFJlcXVlc3QsIGtIVFRQMkNvcHlIZWFkZXJzLCBrSFRUUDFCdWlsZFJlcXVlc3QgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi91dGlsJylcblxuLy8gdG9rZW5SZWdFeHAgYW5kIGhlYWRlckNoYXJSZWdleCBoYXZlIGJlZW4gbGlmdGVkIGZyb21cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL21haW4vbGliL19odHRwX2NvbW1vbi5qc1xuXG4vKipcbiAqIFZlcmlmaWVzIHRoYXQgdGhlIGdpdmVuIHZhbCBpcyBhIHZhbGlkIEhUVFAgdG9rZW5cbiAqIHBlciB0aGUgcnVsZXMgZGVmaW5lZCBpbiBSRkMgNzIzMFxuICogU2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yLjZcbiAqL1xuY29uc3QgdG9rZW5SZWdFeHAgPSAvXltcXF5fYGEtekEtWlxcLTAtOSEjJCUmJyorLnx+XSskL1xuXG4vKipcbiAqIE1hdGNoZXMgaWYgdmFsIGNvbnRhaW5zIGFuIGludmFsaWQgZmllbGQtdmNoYXJcbiAqICBmaWVsZC12YWx1ZSAgICA9ICooIGZpZWxkLWNvbnRlbnQgLyBvYnMtZm9sZCApXG4gKiAgZmllbGQtY29udGVudCAgPSBmaWVsZC12Y2hhciBbIDEqKCBTUCAvIEhUQUIgKSBmaWVsZC12Y2hhciBdXG4gKiAgZmllbGQtdmNoYXIgICAgPSBWQ0hBUiAvIG9icy10ZXh0XG4gKi9cbmNvbnN0IGhlYWRlckNoYXJSZWdleCA9IC9bXlxcdFxceDIwLVxceDdlXFx4ODAtXFx4ZmZdL1xuXG4vLyBWZXJpZmllcyB0aGF0IGEgZ2l2ZW4gcGF0aCBpcyB2YWxpZCBkb2VzIG5vdCBjb250YWluIGNvbnRyb2wgY2hhcnMgXFx4MDAgdG8gXFx4MjBcbmNvbnN0IGludmFsaWRQYXRoUmVnZXggPSAvW15cXHUwMDIxLVxcdTAwZmZdL1xuXG5jb25zdCBrSGFuZGxlciA9IFN5bWJvbCgnaGFuZGxlcicpXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cblxubGV0IGV4dHJhY3RCb2R5XG5cbnRyeSB7XG4gIGNvbnN0IGRpYWdub3N0aWNzQ2hhbm5lbCA9IHJlcXVpcmUoJ2RpYWdub3N0aWNzX2NoYW5uZWwnKVxuICBjaGFubmVscy5jcmVhdGUgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6Y3JlYXRlJylcbiAgY2hhbm5lbHMuYm9keVNlbnQgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6Ym9keVNlbnQnKVxuICBjaGFubmVscy5oZWFkZXJzID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OmhlYWRlcnMnKVxuICBjaGFubmVscy50cmFpbGVycyA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6cmVxdWVzdDp0cmFpbGVycycpXG4gIGNoYW5uZWxzLmVycm9yID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OmVycm9yJylcbn0gY2F0Y2gge1xuICBjaGFubmVscy5jcmVhdGUgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmJvZHlTZW50ID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxuICBjaGFubmVscy5oZWFkZXJzID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxuICBjaGFubmVscy50cmFpbGVycyA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMuZXJyb3IgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG59XG5cbmNsYXNzIFJlcXVlc3Qge1xuICBjb25zdHJ1Y3RvciAob3JpZ2luLCB7XG4gICAgcGF0aCxcbiAgICBtZXRob2QsXG4gICAgYm9keSxcbiAgICBoZWFkZXJzLFxuICAgIHF1ZXJ5LFxuICAgIGlkZW1wb3RlbnQsXG4gICAgYmxvY2tpbmcsXG4gICAgdXBncmFkZSxcbiAgICBoZWFkZXJzVGltZW91dCxcbiAgICBib2R5VGltZW91dCxcbiAgICByZXNldCxcbiAgICB0aHJvd09uRXJyb3IsXG4gICAgZXhwZWN0Q29udGludWVcbiAgfSwgaGFuZGxlcikge1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncGF0aCBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgcGF0aFswXSAhPT0gJy8nICYmXG4gICAgICAhKHBhdGguc3RhcnRzV2l0aCgnaHR0cDovLycpIHx8IHBhdGguc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkgJiZcbiAgICAgIG1ldGhvZCAhPT0gJ0NPTk5FQ1QnXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3BhdGggbXVzdCBiZSBhbiBhYnNvbHV0ZSBVUkwgb3Igc3RhcnQgd2l0aCBhIHNsYXNoJylcbiAgICB9IGVsc2UgaWYgKGludmFsaWRQYXRoUmVnZXguZXhlYyhwYXRoKSAhPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHJlcXVlc3QgcGF0aCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBtZXRob2QgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21ldGhvZCBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9IGVsc2UgaWYgKHRva2VuUmVnRXhwLmV4ZWMobWV0aG9kKSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHJlcXVlc3QgbWV0aG9kJylcbiAgICB9XG5cbiAgICBpZiAodXBncmFkZSAmJiB0eXBlb2YgdXBncmFkZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndXBncmFkZSBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG5cbiAgICBpZiAoaGVhZGVyc1RpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShoZWFkZXJzVGltZW91dCkgfHwgaGVhZGVyc1RpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGhlYWRlcnNUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoYm9keVRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShib2R5VGltZW91dCkgfHwgYm9keVRpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGJvZHlUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAocmVzZXQgIT0gbnVsbCAmJiB0eXBlb2YgcmVzZXQgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHJlc2V0JylcbiAgICB9XG5cbiAgICBpZiAoZXhwZWN0Q29udGludWUgIT0gbnVsbCAmJiB0eXBlb2YgZXhwZWN0Q29udGludWUgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGV4cGVjdENvbnRpbnVlJylcbiAgICB9XG5cbiAgICB0aGlzLmhlYWRlcnNUaW1lb3V0ID0gaGVhZGVyc1RpbWVvdXRcblxuICAgIHRoaXMuYm9keVRpbWVvdXQgPSBib2R5VGltZW91dFxuXG4gICAgdGhpcy50aHJvd09uRXJyb3IgPSB0aHJvd09uRXJyb3IgPT09IHRydWVcblxuICAgIHRoaXMubWV0aG9kID0gbWV0aG9kXG5cbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuXG4gICAgaWYgKGJvZHkgPT0gbnVsbCkge1xuICAgICAgdGhpcy5ib2R5ID0gbnVsbFxuICAgIH0gZWxzZSBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keVxuXG4gICAgICBjb25zdCByU3RhdGUgPSB0aGlzLmJvZHkuX3JlYWRhYmxlU3RhdGVcbiAgICAgIGlmICghclN0YXRlIHx8ICFyU3RhdGUuYXV0b0Rlc3Ryb3kpIHtcbiAgICAgICAgdGhpcy5lbmRIYW5kbGVyID0gZnVuY3Rpb24gYXV0b0Rlc3Ryb3kgKCkge1xuICAgICAgICAgIHV0aWwuZGVzdHJveSh0aGlzKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYm9keS5vbignZW5kJywgdGhpcy5lbmRIYW5kbGVyKVxuICAgICAgfVxuXG4gICAgICB0aGlzLmVycm9ySGFuZGxlciA9IGVyciA9PiB7XG4gICAgICAgIGlmICh0aGlzLmFib3J0KSB7XG4gICAgICAgICAgdGhpcy5hYm9ydChlcnIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lcnJvciA9IGVyclxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmJvZHkub24oJ2Vycm9yJywgdGhpcy5lcnJvckhhbmRsZXIpXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzQnVmZmVyKGJvZHkpKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5LmJ5dGVMZW5ndGggPyBib2R5IDogbnVsbFxuICAgIH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGJvZHkpKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5LmJ1ZmZlci5ieXRlTGVuZ3RoID8gQnVmZmVyLmZyb20oYm9keS5idWZmZXIsIGJvZHkuYnl0ZU9mZnNldCwgYm9keS5ieXRlTGVuZ3RoKSA6IG51bGxcbiAgICB9IGVsc2UgaWYgKGJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keS5ieXRlTGVuZ3RoID8gQnVmZmVyLmZyb20oYm9keSkgOiBudWxsXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHkubGVuZ3RoID8gQnVmZmVyLmZyb20oYm9keSkgOiBudWxsXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKGJvZHkpIHx8IHV0aWwuaXNJdGVyYWJsZShib2R5KSB8fCB1dGlsLmlzQmxvYkxpa2UoYm9keSkpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdib2R5IG11c3QgYmUgYSBzdHJpbmcsIGEgQnVmZmVyLCBhIFJlYWRhYmxlIHN0cmVhbSwgYW4gaXRlcmFibGUsIG9yIGFuIGFzeW5jIGl0ZXJhYmxlJylcbiAgICB9XG5cbiAgICB0aGlzLmNvbXBsZXRlZCA9IGZhbHNlXG5cbiAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZVxuXG4gICAgdGhpcy51cGdyYWRlID0gdXBncmFkZSB8fCBudWxsXG5cbiAgICB0aGlzLnBhdGggPSBxdWVyeSA/IHV0aWwuYnVpbGRVUkwocGF0aCwgcXVlcnkpIDogcGF0aFxuXG4gICAgdGhpcy5vcmlnaW4gPSBvcmlnaW5cblxuICAgIHRoaXMuaWRlbXBvdGVudCA9IGlkZW1wb3RlbnQgPT0gbnVsbFxuICAgICAgPyBtZXRob2QgPT09ICdIRUFEJyB8fCBtZXRob2QgPT09ICdHRVQnXG4gICAgICA6IGlkZW1wb3RlbnRcblxuICAgIHRoaXMuYmxvY2tpbmcgPSBibG9ja2luZyA9PSBudWxsID8gZmFsc2UgOiBibG9ja2luZ1xuXG4gICAgdGhpcy5yZXNldCA9IHJlc2V0ID09IG51bGwgPyBudWxsIDogcmVzZXRcblxuICAgIHRoaXMuaG9zdCA9IG51bGxcblxuICAgIHRoaXMuY29udGVudExlbmd0aCA9IG51bGxcblxuICAgIHRoaXMuY29udGVudFR5cGUgPSBudWxsXG5cbiAgICB0aGlzLmhlYWRlcnMgPSAnJ1xuXG4gICAgLy8gT25seSBmb3IgSDJcbiAgICB0aGlzLmV4cGVjdENvbnRpbnVlID0gZXhwZWN0Q29udGludWUgIT0gbnVsbCA/IGV4cGVjdENvbnRpbnVlIDogZmFsc2VcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgICBpZiAoaGVhZGVycy5sZW5ndGggJSAyICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVycyBhcnJheSBtdXN0IGJlIGV2ZW4nKVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIHByb2Nlc3NIZWFkZXIodGhpcywgaGVhZGVyc1tpXSwgaGVhZGVyc1tpICsgMV0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoZWFkZXJzICYmIHR5cGVvZiBoZWFkZXJzID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGhlYWRlcnMpXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXVxuICAgICAgICBwcm9jZXNzSGVhZGVyKHRoaXMsIGtleSwgaGVhZGVyc1trZXldKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaGVhZGVycyAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnMgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYW4gYXJyYXknKVxuICAgIH1cblxuICAgIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKHRoaXMuYm9keSkpIHtcbiAgICAgIGlmICh1dGlsLm5vZGVNYWpvciA8IDE2IHx8ICh1dGlsLm5vZGVNYWpvciA9PT0gMTYgJiYgdXRpbC5ub2RlTWlub3IgPCA4KSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0Zvcm0tRGF0YSBib2RpZXMgYXJlIG9ubHkgc3VwcG9ydGVkIGluIG5vZGUgdjE2LjggYW5kIG5ld2VyLicpXG4gICAgICB9XG5cbiAgICAgIGlmICghZXh0cmFjdEJvZHkpIHtcbiAgICAgICAgZXh0cmFjdEJvZHkgPSByZXF1aXJlKCcuLi9mZXRjaC9ib2R5LmpzJykuZXh0cmFjdEJvZHlcbiAgICAgIH1cblxuICAgICAgY29uc3QgW2JvZHlTdHJlYW0sIGNvbnRlbnRUeXBlXSA9IGV4dHJhY3RCb2R5KGJvZHkpXG4gICAgICBpZiAodGhpcy5jb250ZW50VHlwZSA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuY29udGVudFR5cGUgPSBjb250ZW50VHlwZVxuICAgICAgICB0aGlzLmhlYWRlcnMgKz0gYGNvbnRlbnQtdHlwZTogJHtjb250ZW50VHlwZX1cXHJcXG5gXG4gICAgICB9XG4gICAgICB0aGlzLmJvZHkgPSBib2R5U3RyZWFtLnN0cmVhbVxuICAgICAgdGhpcy5jb250ZW50TGVuZ3RoID0gYm9keVN0cmVhbS5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCbG9iTGlrZShib2R5KSAmJiB0aGlzLmNvbnRlbnRUeXBlID09IG51bGwgJiYgYm9keS50eXBlKSB7XG4gICAgICB0aGlzLmNvbnRlbnRUeXBlID0gYm9keS50eXBlXG4gICAgICB0aGlzLmhlYWRlcnMgKz0gYGNvbnRlbnQtdHlwZTogJHtib2R5LnR5cGV9XFxyXFxuYFxuICAgIH1cblxuICAgIHV0aWwudmFsaWRhdGVIYW5kbGVyKGhhbmRsZXIsIG1ldGhvZCwgdXBncmFkZSlcblxuICAgIHRoaXMuc2VydmVybmFtZSA9IHV0aWwuZ2V0U2VydmVyTmFtZSh0aGlzLmhvc3QpXG5cbiAgICB0aGlzW2tIYW5kbGVyXSA9IGhhbmRsZXJcblxuICAgIGlmIChjaGFubmVscy5jcmVhdGUuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmNyZWF0ZS5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcyB9KVxuICAgIH1cbiAgfVxuXG4gIG9uQm9keVNlbnQgKGNodW5rKSB7XG4gICAgaWYgKHRoaXNba0hhbmRsZXJdLm9uQm9keVNlbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkJvZHlTZW50KGNodW5rKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uUmVxdWVzdFNlbnQgKCkge1xuICAgIGlmIChjaGFubmVscy5ib2R5U2VudC5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuYm9keVNlbnQucHVibGlzaCh7IHJlcXVlc3Q6IHRoaXMgfSlcbiAgICB9XG5cbiAgICBpZiAodGhpc1trSGFuZGxlcl0ub25SZXF1ZXN0U2VudCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uUmVxdWVzdFNlbnQoKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQpIHtcbiAgICBhc3NlcnQoIXRoaXMuYWJvcnRlZClcbiAgICBhc3NlcnQoIXRoaXMuY29tcGxldGVkKVxuXG4gICAgaWYgKHRoaXMuZXJyb3IpIHtcbiAgICAgIGFib3J0KHRoaXMuZXJyb3IpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uQ29ubmVjdChhYm9ydClcbiAgICB9XG4gIH1cblxuICBvbkhlYWRlcnMgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHJlc3VtZSwgc3RhdHVzVGV4dCkge1xuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuICAgIGFzc2VydCghdGhpcy5jb21wbGV0ZWQpXG5cbiAgICBpZiAoY2hhbm5lbHMuaGVhZGVycy5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuaGVhZGVycy5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcywgcmVzcG9uc2U6IHsgc3RhdHVzQ29kZSwgaGVhZGVycywgc3RhdHVzVGV4dCB9IH0pXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkhlYWRlcnMoc3RhdHVzQ29kZSwgaGVhZGVycywgcmVzdW1lLCBzdGF0dXNUZXh0KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5hYm9ydChlcnIpXG4gICAgfVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuICAgIGFzc2VydCghdGhpcy5jb21wbGV0ZWQpXG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uRGF0YShjaHVuaylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgb25VcGdyYWRlIChzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpIHtcbiAgICBhc3NlcnQoIXRoaXMuYWJvcnRlZClcbiAgICBhc3NlcnQoIXRoaXMuY29tcGxldGVkKVxuXG4gICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIHRoaXMub25GaW5hbGx5KClcblxuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuXG4gICAgdGhpcy5jb21wbGV0ZWQgPSB0cnVlXG4gICAgaWYgKGNoYW5uZWxzLnRyYWlsZXJzLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy50cmFpbGVycy5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcywgdHJhaWxlcnMgfSlcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uQ29tcGxldGUodHJhaWxlcnMpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBUT0RPIChmaXgpOiBUaGlzIG1pZ2h0IGJlIGEgYmFkIGlkZWE/XG4gICAgICB0aGlzLm9uRXJyb3IoZXJyKVxuICAgIH1cbiAgfVxuXG4gIG9uRXJyb3IgKGVycm9yKSB7XG4gICAgdGhpcy5vbkZpbmFsbHkoKVxuXG4gICAgaWYgKGNoYW5uZWxzLmVycm9yLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5lcnJvci5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcywgZXJyb3IgfSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hYm9ydGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5hYm9ydGVkID0gdHJ1ZVxuXG4gICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uRXJyb3IoZXJyb3IpXG4gIH1cblxuICBvbkZpbmFsbHkgKCkge1xuICAgIGlmICh0aGlzLmVycm9ySGFuZGxlcikge1xuICAgICAgdGhpcy5ib2R5Lm9mZignZXJyb3InLCB0aGlzLmVycm9ySGFuZGxlcilcbiAgICAgIHRoaXMuZXJyb3JIYW5kbGVyID0gbnVsbFxuICAgIH1cblxuICAgIGlmICh0aGlzLmVuZEhhbmRsZXIpIHtcbiAgICAgIHRoaXMuYm9keS5vZmYoJ2VuZCcsIHRoaXMuZW5kSGFuZGxlcilcbiAgICAgIHRoaXMuZW5kSGFuZGxlciA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPOiBhZGp1c3QgdG8gc3VwcG9ydCBIMlxuICBhZGRIZWFkZXIgKGtleSwgdmFsdWUpIHtcbiAgICBwcm9jZXNzSGVhZGVyKHRoaXMsIGtleSwgdmFsdWUpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHN0YXRpYyBba0hUVFAxQnVpbGRSZXF1ZXN0XSAob3JpZ2luLCBvcHRzLCBoYW5kbGVyKSB7XG4gICAgLy8gVE9ETzogTWlncmF0ZSBoZWFkZXIgcGFyc2luZyBoZXJlLCB0byBtYWtlIFJlcXVlc3RzXG4gICAgLy8gSFRUUCBhZ25vc3RpY1xuICAgIHJldHVybiBuZXcgUmVxdWVzdChvcmlnaW4sIG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBzdGF0aWMgW2tIVFRQMkJ1aWxkUmVxdWVzdF0gKG9yaWdpbiwgb3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBvcHRzLmhlYWRlcnNcbiAgICBvcHRzID0geyAuLi5vcHRzLCBoZWFkZXJzOiBudWxsIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdChvcmlnaW4sIG9wdHMsIGhhbmRsZXIpXG5cbiAgICByZXF1ZXN0LmhlYWRlcnMgPSB7fVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICAgIGlmIChoZWFkZXJzLmxlbmd0aCAlIDIgIT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzIGFycmF5IG11c3QgYmUgZXZlbicpXG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgcHJvY2Vzc0hlYWRlcihyZXF1ZXN0LCBoZWFkZXJzW2ldLCBoZWFkZXJzW2kgKyAxXSwgdHJ1ZSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGhlYWRlcnMgJiYgdHlwZW9mIGhlYWRlcnMgPT09ICdvYmplY3QnKSB7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaGVhZGVycylcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldXG4gICAgICAgIHByb2Nlc3NIZWFkZXIocmVxdWVzdCwga2V5LCBoZWFkZXJzW2tleV0sIHRydWUpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoZWFkZXJzICE9IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVycyBtdXN0IGJlIGFuIG9iamVjdCBvciBhbiBhcnJheScpXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcXVlc3RcbiAgfVxuXG4gIHN0YXRpYyBba0hUVFAyQ29weUhlYWRlcnNdIChyYXcpIHtcbiAgICBjb25zdCByYXdIZWFkZXJzID0gcmF3LnNwbGl0KCdcXHJcXG4nKVxuICAgIGNvbnN0IGhlYWRlcnMgPSB7fVxuXG4gICAgZm9yIChjb25zdCBoZWFkZXIgb2YgcmF3SGVhZGVycykge1xuICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gaGVhZGVyLnNwbGl0KCc6ICcpXG5cbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkgY29udGludWVcblxuICAgICAgaWYgKGhlYWRlcnNba2V5XSkgaGVhZGVyc1trZXldICs9IGAsJHt2YWx1ZX1gXG4gICAgICBlbHNlIGhlYWRlcnNba2V5XSA9IHZhbHVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGhlYWRlcnNcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzSGVhZGVyVmFsdWUgKGtleSwgdmFsLCBza2lwQXBwZW5kKSB7XG4gIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoYGludmFsaWQgJHtrZXl9IGhlYWRlcmApXG4gIH1cblxuICB2YWwgPSB2YWwgIT0gbnVsbCA/IGAke3ZhbH1gIDogJydcblxuICBpZiAoaGVhZGVyQ2hhclJlZ2V4LmV4ZWModmFsKSAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgaW52YWxpZCAke2tleX0gaGVhZGVyYClcbiAgfVxuXG4gIHJldHVybiBza2lwQXBwZW5kID8gdmFsIDogYCR7a2V5fTogJHt2YWx9XFxyXFxuYFxufVxuXG5mdW5jdGlvbiBwcm9jZXNzSGVhZGVyIChyZXF1ZXN0LCBrZXksIHZhbCwgc2tpcEFwcGVuZCA9IGZhbHNlKSB7XG4gIGlmICh2YWwgJiYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbCkpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBpbnZhbGlkICR7a2V5fSBoZWFkZXJgKVxuICB9IGVsc2UgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoXG4gICAgcmVxdWVzdC5ob3N0ID09PSBudWxsICYmXG4gICAga2V5Lmxlbmd0aCA9PT0gNCAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAnaG9zdCdcbiAgKSB7XG4gICAgaWYgKGhlYWRlckNoYXJSZWdleC5leGVjKHZhbCkgIT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgaW52YWxpZCAke2tleX0gaGVhZGVyYClcbiAgICB9XG4gICAgLy8gQ29uc3VtZWQgYnkgQ2xpZW50XG4gICAgcmVxdWVzdC5ob3N0ID0gdmFsXG4gIH0gZWxzZSBpZiAoXG4gICAgcmVxdWVzdC5jb250ZW50TGVuZ3RoID09PSBudWxsICYmXG4gICAga2V5Lmxlbmd0aCA9PT0gMTQgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtbGVuZ3RoJ1xuICApIHtcbiAgICByZXF1ZXN0LmNvbnRlbnRMZW5ndGggPSBwYXJzZUludCh2YWwsIDEwKVxuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHJlcXVlc3QuY29udGVudExlbmd0aCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjb250ZW50LWxlbmd0aCBoZWFkZXInKVxuICAgIH1cbiAgfSBlbHNlIGlmIChcbiAgICByZXF1ZXN0LmNvbnRlbnRUeXBlID09PSBudWxsICYmXG4gICAga2V5Lmxlbmd0aCA9PT0gMTIgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZSdcbiAgKSB7XG4gICAgcmVxdWVzdC5jb250ZW50VHlwZSA9IHZhbFxuICAgIGlmIChza2lwQXBwZW5kKSByZXF1ZXN0LmhlYWRlcnNba2V5XSA9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbCwgc2tpcEFwcGVuZClcbiAgICBlbHNlIHJlcXVlc3QuaGVhZGVycyArPSBwcm9jZXNzSGVhZGVyVmFsdWUoa2V5LCB2YWwpXG4gIH0gZWxzZSBpZiAoXG4gICAga2V5Lmxlbmd0aCA9PT0gMTcgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3RyYW5zZmVyLWVuY29kaW5nJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgdHJhbnNmZXItZW5jb2RpbmcgaGVhZGVyJylcbiAgfSBlbHNlIGlmIChcbiAgICBrZXkubGVuZ3RoID09PSAxMCAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29ubmVjdGlvbidcbiAgKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0eXBlb2YgdmFsID09PSAnc3RyaW5nJyA/IHZhbC50b0xvd2VyQ2FzZSgpIDogbnVsbFxuICAgIGlmICh2YWx1ZSAhPT0gJ2Nsb3NlJyAmJiB2YWx1ZSAhPT0gJ2tlZXAtYWxpdmUnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY29ubmVjdGlvbiBoZWFkZXInKVxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdjbG9zZScpIHtcbiAgICAgIHJlcXVlc3QucmVzZXQgPSB0cnVlXG4gICAgfVxuICB9IGVsc2UgaWYgKFxuICAgIGtleS5sZW5ndGggPT09IDEwICYmXG4gICAga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdrZWVwLWFsaXZlJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQga2VlcC1hbGl2ZSBoZWFkZXInKVxuICB9IGVsc2UgaWYgKFxuICAgIGtleS5sZW5ndGggPT09IDcgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3VwZ3JhZGUnXG4gICkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCB1cGdyYWRlIGhlYWRlcicpXG4gIH0gZWxzZSBpZiAoXG4gICAga2V5Lmxlbmd0aCA9PT0gNiAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAnZXhwZWN0J1xuICApIHtcbiAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXJyb3IoJ2V4cGVjdCBoZWFkZXIgbm90IHN1cHBvcnRlZCcpXG4gIH0gZWxzZSBpZiAodG9rZW5SZWdFeHAuZXhlYyhrZXkpID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGhlYWRlciBrZXknKVxuICB9IGVsc2Uge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChza2lwQXBwZW5kKSB7XG4gICAgICAgICAgaWYgKHJlcXVlc3QuaGVhZGVyc1trZXldKSByZXF1ZXN0LmhlYWRlcnNba2V5XSArPSBgLCR7cHJvY2Vzc0hlYWRlclZhbHVlKGtleSwgdmFsW2ldLCBza2lwQXBwZW5kKX1gXG4gICAgICAgICAgZWxzZSByZXF1ZXN0LmhlYWRlcnNba2V5XSA9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbFtpXSwgc2tpcEFwcGVuZClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMgKz0gcHJvY2Vzc0hlYWRlclZhbHVlKGtleSwgdmFsW2ldKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChza2lwQXBwZW5kKSByZXF1ZXN0LmhlYWRlcnNba2V5XSA9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbCwgc2tpcEFwcGVuZClcbiAgICAgIGVsc2UgcmVxdWVzdC5oZWFkZXJzICs9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbClcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZXF1ZXN0XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpXG5cbmNsYXNzIERpc3BhdGNoZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICBkaXNwYXRjaCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQnKVxuICB9XG5cbiAgY2xvc2UgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJylcbiAgfVxuXG4gIGRlc3Ryb3kgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJylcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERpc3BhdGNoZXJcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgRGlzcGF0Y2hlciA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hlcicpXG5jb25zdCB7XG4gIENsaWVudERlc3Ryb3llZEVycm9yLFxuICBDbGllbnRDbG9zZWRFcnJvcixcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3Jcbn0gPSByZXF1aXJlKCcuL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsga0Rlc3Ryb3ksIGtDbG9zZSwga0Rpc3BhdGNoLCBrSW50ZXJjZXB0b3JzIH0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5cbmNvbnN0IGtEZXN0cm95ZWQgPSBTeW1ib2woJ2Rlc3Ryb3llZCcpXG5jb25zdCBrQ2xvc2VkID0gU3ltYm9sKCdjbG9zZWQnKVxuY29uc3Qga09uRGVzdHJveWVkID0gU3ltYm9sKCdvbkRlc3Ryb3llZCcpXG5jb25zdCBrT25DbG9zZWQgPSBTeW1ib2woJ29uQ2xvc2VkJylcbmNvbnN0IGtJbnRlcmNlcHRlZERpc3BhdGNoID0gU3ltYm9sKCdJbnRlcmNlcHRlZCBEaXNwYXRjaCcpXG5cbmNsYXNzIERpc3BhdGNoZXJCYXNlIGV4dGVuZHMgRGlzcGF0Y2hlciB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICBzdXBlcigpXG5cbiAgICB0aGlzW2tEZXN0cm95ZWRdID0gZmFsc2VcbiAgICB0aGlzW2tPbkRlc3Ryb3llZF0gPSBudWxsXG4gICAgdGhpc1trQ2xvc2VkXSA9IGZhbHNlXG4gICAgdGhpc1trT25DbG9zZWRdID0gW11cbiAgfVxuXG4gIGdldCBkZXN0cm95ZWQgKCkge1xuICAgIHJldHVybiB0aGlzW2tEZXN0cm95ZWRdXG4gIH1cblxuICBnZXQgY2xvc2VkICgpIHtcbiAgICByZXR1cm4gdGhpc1trQ2xvc2VkXVxuICB9XG5cbiAgZ2V0IGludGVyY2VwdG9ycyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0ludGVyY2VwdG9yc11cbiAgfVxuXG4gIHNldCBpbnRlcmNlcHRvcnMgKG5ld0ludGVyY2VwdG9ycykge1xuICAgIGlmIChuZXdJbnRlcmNlcHRvcnMpIHtcbiAgICAgIGZvciAobGV0IGkgPSBuZXdJbnRlcmNlcHRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgaW50ZXJjZXB0b3IgPSB0aGlzW2tJbnRlcmNlcHRvcnNdW2ldXG4gICAgICAgIGlmICh0eXBlb2YgaW50ZXJjZXB0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludGVyY2VwdG9yIG11c3QgYmUgYW4gZnVuY3Rpb24nKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1trSW50ZXJjZXB0b3JzXSA9IG5ld0ludGVyY2VwdG9yc1xuICB9XG5cbiAgY2xvc2UgKGNhbGxiYWNrKSB7XG4gICAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHRoaXMuY2xvc2UoKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICAgIHJldHVybiBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUoZGF0YSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNhbGxiYWNrJylcbiAgICB9XG5cbiAgICBpZiAodGhpc1trRGVzdHJveWVkXSkge1xuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gY2FsbGJhY2sobmV3IENsaWVudERlc3Ryb3llZEVycm9yKCksIG51bGwpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba0Nsb3NlZF0pIHtcbiAgICAgIGlmICh0aGlzW2tPbkNsb3NlZF0pIHtcbiAgICAgICAgdGhpc1trT25DbG9zZWRdLnB1c2goY2FsbGJhY2spXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhudWxsLCBudWxsKSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXNba0Nsb3NlZF0gPSB0cnVlXG4gICAgdGhpc1trT25DbG9zZWRdLnB1c2goY2FsbGJhY2spXG5cbiAgICBjb25zdCBvbkNsb3NlZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrcyA9IHRoaXNba09uQ2xvc2VkXVxuICAgICAgdGhpc1trT25DbG9zZWRdID0gbnVsbFxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2FsbGJhY2tzW2ldKG51bGwsIG51bGwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2hvdWxkIG5vdCBlcnJvci5cbiAgICB0aGlzW2tDbG9zZV0oKVxuICAgICAgLnRoZW4oKCkgPT4gdGhpcy5kZXN0cm95KCkpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKG9uQ2xvc2VkKVxuICAgICAgfSlcbiAgfVxuXG4gIGRlc3Ryb3kgKGVyciwgY2FsbGJhY2spIHtcbiAgICBpZiAodHlwZW9mIGVyciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2FsbGJhY2sgPSBlcnJcbiAgICAgIGVyciA9IG51bGxcbiAgICB9XG5cbiAgICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy5kZXN0cm95KGVyciwgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICAgIHJldHVybiBlcnIgPyAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogc2hvdWxkIG5ldmVyIGVycm9yICovIHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgIH1cblxuICAgIGlmICh0aGlzW2tEZXN0cm95ZWRdKSB7XG4gICAgICBpZiAodGhpc1trT25EZXN0cm95ZWRdKSB7XG4gICAgICAgIHRoaXNba09uRGVzdHJveWVkXS5wdXNoKGNhbGxiYWNrKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gY2FsbGJhY2sobnVsbCwgbnVsbCkpXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIWVycikge1xuICAgICAgZXJyID0gbmV3IENsaWVudERlc3Ryb3llZEVycm9yKClcbiAgICB9XG5cbiAgICB0aGlzW2tEZXN0cm95ZWRdID0gdHJ1ZVxuICAgIHRoaXNba09uRGVzdHJveWVkXSA9IHRoaXNba09uRGVzdHJveWVkXSB8fCBbXVxuICAgIHRoaXNba09uRGVzdHJveWVkXS5wdXNoKGNhbGxiYWNrKVxuXG4gICAgY29uc3Qgb25EZXN0cm95ZWQgPSAoKSA9PiB7XG4gICAgICBjb25zdCBjYWxsYmFja3MgPSB0aGlzW2tPbkRlc3Ryb3llZF1cbiAgICAgIHRoaXNba09uRGVzdHJveWVkXSA9IG51bGxcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNhbGxiYWNrc1tpXShudWxsLCBudWxsKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNob3VsZCBub3QgZXJyb3IuXG4gICAgdGhpc1trRGVzdHJveV0oZXJyKS50aGVuKCgpID0+IHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKG9uRGVzdHJveWVkKVxuICAgIH0pXG4gIH1cblxuICBba0ludGVyY2VwdGVkRGlzcGF0Y2hdIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKCF0aGlzW2tJbnRlcmNlcHRvcnNdIHx8IHRoaXNba0ludGVyY2VwdG9yc10ubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzW2tJbnRlcmNlcHRlZERpc3BhdGNoXSA9IHRoaXNba0Rpc3BhdGNoXVxuICAgICAgcmV0dXJuIHRoaXNba0Rpc3BhdGNoXShvcHRzLCBoYW5kbGVyKVxuICAgIH1cblxuICAgIGxldCBkaXNwYXRjaCA9IHRoaXNba0Rpc3BhdGNoXS5iaW5kKHRoaXMpXG4gICAgZm9yIChsZXQgaSA9IHRoaXNba0ludGVyY2VwdG9yc10ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGRpc3BhdGNoID0gdGhpc1trSW50ZXJjZXB0b3JzXVtpXShkaXNwYXRjaClcbiAgICB9XG4gICAgdGhpc1trSW50ZXJjZXB0ZWREaXNwYXRjaF0gPSBkaXNwYXRjaFxuICAgIHJldHVybiBkaXNwYXRjaChvcHRzLCBoYW5kbGVyKVxuICB9XG5cbiAgZGlzcGF0Y2ggKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoIWhhbmRsZXIgfHwgdHlwZW9mIGhhbmRsZXIgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hhbmRsZXIgbXVzdCBiZSBhbiBvYmplY3QnKVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignb3B0cyBtdXN0IGJlIGFuIG9iamVjdC4nKVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpc1trRGVzdHJveWVkXSB8fCB0aGlzW2tPbkRlc3Ryb3llZF0pIHtcbiAgICAgICAgdGhyb3cgbmV3IENsaWVudERlc3Ryb3llZEVycm9yKClcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXNba0Nsb3NlZF0pIHtcbiAgICAgICAgdGhyb3cgbmV3IENsaWVudENsb3NlZEVycm9yKClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXNba0ludGVyY2VwdGVkRGlzcGF0Y2hdKG9wdHMsIGhhbmRsZXIpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodHlwZW9mIGhhbmRsZXIub25FcnJvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25FcnJvciBtZXRob2QnKVxuICAgICAgfVxuXG4gICAgICBoYW5kbGVyLm9uRXJyb3IoZXJyKVxuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEaXNwYXRjaGVyQmFzZVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBuZXQgPSByZXF1aXJlKCduZXQnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgQ29ubmVjdFRpbWVvdXRFcnJvciB9ID0gcmVxdWlyZSgnLi9lcnJvcnMnKVxuXG5sZXQgdGxzIC8vIGluY2x1ZGUgdGxzIGNvbmRpdGlvbmFsbHkgc2luY2UgaXQgaXMgbm90IGFsd2F5cyBhdmFpbGFibGVcblxuLy8gVE9ETzogc2Vzc2lvbiByZS11c2UgZG9lcyBub3Qgd2FpdCBmb3IgdGhlIGZpcnN0XG4vLyBjb25uZWN0aW9uIHRvIHJlc29sdmUgdGhlIHNlc3Npb24gYW5kIG1pZ2h0IHRoZXJlZm9yZVxuLy8gcmVzb2x2ZSB0aGUgc2FtZSBzZXJ2ZXJuYW1lIG11bHRpcGxlIHRpbWVzIGV2ZW4gd2hlblxuLy8gcmUtdXNlIGlzIGVuYWJsZWQuXG5cbmxldCBTZXNzaW9uQ2FjaGVcbi8vIEZJWE1FOiByZW1vdmUgd29ya2Fyb3VuZCB3aGVuIHRoZSBOb2RlIGJ1ZyBpcyBmaXhlZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy80OTM0NCNpc3N1ZWNvbW1lbnQtMTc0MTc3NjMwOFxuaWYgKGdsb2JhbC5GaW5hbGl6YXRpb25SZWdpc3RyeSAmJiAhcHJvY2Vzcy5lbnYuTk9ERV9WOF9DT1ZFUkFHRSkge1xuICBTZXNzaW9uQ2FjaGUgPSBjbGFzcyBXZWFrU2Vzc2lvbkNhY2hlIHtcbiAgICBjb25zdHJ1Y3RvciAobWF4Q2FjaGVkU2Vzc2lvbnMpIHtcbiAgICAgIHRoaXMuX21heENhY2hlZFNlc3Npb25zID0gbWF4Q2FjaGVkU2Vzc2lvbnNcbiAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZSA9IG5ldyBNYXAoKVxuICAgICAgdGhpcy5fc2Vzc2lvblJlZ2lzdHJ5ID0gbmV3IGdsb2JhbC5GaW5hbGl6YXRpb25SZWdpc3RyeSgoa2V5KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9zZXNzaW9uQ2FjaGUuc2l6ZSA8IHRoaXMuX21heENhY2hlZFNlc3Npb25zKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWYgPSB0aGlzLl9zZXNzaW9uQ2FjaGUuZ2V0KGtleSlcbiAgICAgICAgaWYgKHJlZiAhPT0gdW5kZWZpbmVkICYmIHJlZi5kZXJlZigpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUuZGVsZXRlKGtleSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBnZXQgKHNlc3Npb25LZXkpIHtcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXMuX3Nlc3Npb25DYWNoZS5nZXQoc2Vzc2lvbktleSlcbiAgICAgIHJldHVybiByZWYgPyByZWYuZGVyZWYoKSA6IG51bGxcbiAgICB9XG5cbiAgICBzZXQgKHNlc3Npb25LZXksIHNlc3Npb24pIHtcbiAgICAgIGlmICh0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucyA9PT0gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlLnNldChzZXNzaW9uS2V5LCBuZXcgV2Vha1JlZihzZXNzaW9uKSlcbiAgICAgIHRoaXMuX3Nlc3Npb25SZWdpc3RyeS5yZWdpc3RlcihzZXNzaW9uLCBzZXNzaW9uS2V5KVxuICAgIH1cbiAgfVxufSBlbHNlIHtcbiAgU2Vzc2lvbkNhY2hlID0gY2xhc3MgU2ltcGxlU2Vzc2lvbkNhY2hlIHtcbiAgICBjb25zdHJ1Y3RvciAobWF4Q2FjaGVkU2Vzc2lvbnMpIHtcbiAgICAgIHRoaXMuX21heENhY2hlZFNlc3Npb25zID0gbWF4Q2FjaGVkU2Vzc2lvbnNcbiAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZSA9IG5ldyBNYXAoKVxuICAgIH1cblxuICAgIGdldCAoc2Vzc2lvbktleSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25DYWNoZS5nZXQoc2Vzc2lvbktleSlcbiAgICB9XG5cbiAgICBzZXQgKHNlc3Npb25LZXksIHNlc3Npb24pIHtcbiAgICAgIGlmICh0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucyA9PT0gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3Nlc3Npb25DYWNoZS5zaXplID49IHRoaXMuX21heENhY2hlZFNlc3Npb25zKSB7XG4gICAgICAgIC8vIHJlbW92ZSB0aGUgb2xkZXN0IHNlc3Npb25cbiAgICAgICAgY29uc3QgeyB2YWx1ZTogb2xkZXN0S2V5IH0gPSB0aGlzLl9zZXNzaW9uQ2FjaGUua2V5cygpLm5leHQoKVxuICAgICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUuZGVsZXRlKG9sZGVzdEtleSlcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlLnNldChzZXNzaW9uS2V5LCBzZXNzaW9uKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZENvbm5lY3RvciAoeyBhbGxvd0gyLCBtYXhDYWNoZWRTZXNzaW9ucywgc29ja2V0UGF0aCwgdGltZW91dCwgLi4ub3B0cyB9KSB7XG4gIGlmIChtYXhDYWNoZWRTZXNzaW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhDYWNoZWRTZXNzaW9ucykgfHwgbWF4Q2FjaGVkU2Vzc2lvbnMgPCAwKSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4Q2FjaGVkU2Vzc2lvbnMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgb3IgemVybycpXG4gIH1cblxuICBjb25zdCBvcHRpb25zID0geyBwYXRoOiBzb2NrZXRQYXRoLCAuLi5vcHRzIH1cbiAgY29uc3Qgc2Vzc2lvbkNhY2hlID0gbmV3IFNlc3Npb25DYWNoZShtYXhDYWNoZWRTZXNzaW9ucyA9PSBudWxsID8gMTAwIDogbWF4Q2FjaGVkU2Vzc2lvbnMpXG4gIHRpbWVvdXQgPSB0aW1lb3V0ID09IG51bGwgPyAxMGUzIDogdGltZW91dFxuICBhbGxvd0gyID0gYWxsb3dIMiAhPSBudWxsID8gYWxsb3dIMiA6IGZhbHNlXG4gIHJldHVybiBmdW5jdGlvbiBjb25uZWN0ICh7IGhvc3RuYW1lLCBob3N0LCBwcm90b2NvbCwgcG9ydCwgc2VydmVybmFtZSwgbG9jYWxBZGRyZXNzLCBodHRwU29ja2V0IH0sIGNhbGxiYWNrKSB7XG4gICAgbGV0IHNvY2tldFxuICAgIGlmIChwcm90b2NvbCA9PT0gJ2h0dHBzOicpIHtcbiAgICAgIGlmICghdGxzKSB7XG4gICAgICAgIHRscyA9IHJlcXVpcmUoJ3RscycpXG4gICAgICB9XG4gICAgICBzZXJ2ZXJuYW1lID0gc2VydmVybmFtZSB8fCBvcHRpb25zLnNlcnZlcm5hbWUgfHwgdXRpbC5nZXRTZXJ2ZXJOYW1lKGhvc3QpIHx8IG51bGxcblxuICAgICAgY29uc3Qgc2Vzc2lvbktleSA9IHNlcnZlcm5hbWUgfHwgaG9zdG5hbWVcbiAgICAgIGNvbnN0IHNlc3Npb24gPSBzZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25LZXkpIHx8IG51bGxcblxuICAgICAgYXNzZXJ0KHNlc3Npb25LZXkpXG5cbiAgICAgIHNvY2tldCA9IHRscy5jb25uZWN0KHtcbiAgICAgICAgaGlnaFdhdGVyTWFyazogMTYzODQsIC8vIFRMUyBpbiBub2RlIGNhbid0IGhhdmUgYmlnZ2VyIEhXTSBhbnl3YXkuLi5cbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgc2VydmVybmFtZSxcbiAgICAgICAgc2Vzc2lvbixcbiAgICAgICAgbG9jYWxBZGRyZXNzLFxuICAgICAgICAvLyBUT0RPKEhUVFAvMik6IEFkZCBzdXBwb3J0IGZvciBoMmNcbiAgICAgICAgQUxQTlByb3RvY29sczogYWxsb3dIMiA/IFsnaHR0cC8xLjEnLCAnaDInXSA6IFsnaHR0cC8xLjEnXSxcbiAgICAgICAgc29ja2V0OiBodHRwU29ja2V0LCAvLyB1cGdyYWRlIHNvY2tldCBjb25uZWN0aW9uXG4gICAgICAgIHBvcnQ6IHBvcnQgfHwgNDQzLFxuICAgICAgICBob3N0OiBob3N0bmFtZVxuICAgICAgfSlcblxuICAgICAgc29ja2V0XG4gICAgICAgIC5vbignc2Vzc2lvbicsIGZ1bmN0aW9uIChzZXNzaW9uKSB7XG4gICAgICAgICAgLy8gVE9ETyAoZml4KTogQ2FuIGEgc2Vzc2lvbiBiZWNvbWUgaW52YWxpZCBvbmNlIGVzdGFibGlzaGVkPyBEb24ndCB0aGluayBzbz9cbiAgICAgICAgICBzZXNzaW9uQ2FjaGUuc2V0KHNlc3Npb25LZXksIHNlc3Npb24pXG4gICAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydCghaHR0cFNvY2tldCwgJ2h0dHBTb2NrZXQgY2FuIG9ubHkgYmUgc2VudCBvbiBUTFMgdXBkYXRlJylcbiAgICAgIHNvY2tldCA9IG5ldC5jb25uZWN0KHtcbiAgICAgICAgaGlnaFdhdGVyTWFyazogNjQgKiAxMDI0LCAvLyBTYW1lIGFzIG5vZGVqcyBmcyBzdHJlYW1zLlxuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBsb2NhbEFkZHJlc3MsXG4gICAgICAgIHBvcnQ6IHBvcnQgfHwgODAsXG4gICAgICAgIGhvc3Q6IGhvc3RuYW1lXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIFNldCBUQ1Aga2VlcCBhbGl2ZSBvcHRpb25zIG9uIHRoZSBzb2NrZXQgaGVyZSBpbnN0ZWFkIG9mIGluIGNvbm5lY3QoKSBmb3IgdGhlIGNhc2Ugb2YgYXNzaWduaW5nIHRoZSBzb2NrZXRcbiAgICBpZiAob3B0aW9ucy5rZWVwQWxpdmUgPT0gbnVsbCB8fCBvcHRpb25zLmtlZXBBbGl2ZSkge1xuICAgICAgY29uc3Qga2VlcEFsaXZlSW5pdGlhbERlbGF5ID0gb3B0aW9ucy5rZWVwQWxpdmVJbml0aWFsRGVsYXkgPT09IHVuZGVmaW5lZCA/IDYwZTMgOiBvcHRpb25zLmtlZXBBbGl2ZUluaXRpYWxEZWxheVxuICAgICAgc29ja2V0LnNldEtlZXBBbGl2ZSh0cnVlLCBrZWVwQWxpdmVJbml0aWFsRGVsYXkpXG4gICAgfVxuXG4gICAgY29uc3QgY2FuY2VsVGltZW91dCA9IHNldHVwVGltZW91dCgoKSA9PiBvbkNvbm5lY3RUaW1lb3V0KHNvY2tldCksIHRpbWVvdXQpXG5cbiAgICBzb2NrZXRcbiAgICAgIC5zZXROb0RlbGF5KHRydWUpXG4gICAgICAub25jZShwcm90b2NvbCA9PT0gJ2h0dHBzOicgPyAnc2VjdXJlQ29ubmVjdCcgOiAnY29ubmVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2FuY2VsVGltZW91dCgpXG5cbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgY29uc3QgY2IgPSBjYWxsYmFja1xuICAgICAgICAgIGNhbGxiYWNrID0gbnVsbFxuICAgICAgICAgIGNiKG51bGwsIHRoaXMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBjYW5jZWxUaW1lb3V0KClcblxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICBjb25zdCBjYiA9IGNhbGxiYWNrXG4gICAgICAgICAgY2FsbGJhY2sgPSBudWxsXG4gICAgICAgICAgY2IoZXJyKVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgcmV0dXJuIHNvY2tldFxuICB9XG59XG5cbmZ1bmN0aW9uIHNldHVwVGltZW91dCAob25Db25uZWN0VGltZW91dCwgdGltZW91dCkge1xuICBpZiAoIXRpbWVvdXQpIHtcbiAgICByZXR1cm4gKCkgPT4ge31cbiAgfVxuXG4gIGxldCBzMSA9IG51bGxcbiAgbGV0IHMyID0gbnVsbFxuICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyBzZXRJbW1lZGlhdGUgaXMgYWRkZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgcHJpb3RvcmlzZSBzb2NrZXQgZXJyb3IgZXZlbnRzIG92ZXIgdGltZW91dHNcbiAgICBzMSA9IHNldEltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgICAgICAvLyBXaW5kb3dzIG5lZWRzIGFuIGV4dHJhIHNldEltbWVkaWF0ZSBwcm9iYWJseSBkdWUgdG8gaW1wbGVtZW50YXRpb24gZGlmZmVyZW5jZXMgaW4gdGhlIHNvY2tldCBsb2dpY1xuICAgICAgICBzMiA9IHNldEltbWVkaWF0ZSgoKSA9PiBvbkNvbm5lY3RUaW1lb3V0KCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbkNvbm5lY3RUaW1lb3V0KClcbiAgICAgIH1cbiAgICB9KVxuICB9LCB0aW1lb3V0KVxuICByZXR1cm4gKCkgPT4ge1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpXG4gICAgY2xlYXJJbW1lZGlhdGUoczEpXG4gICAgY2xlYXJJbW1lZGlhdGUoczIpXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Db25uZWN0VGltZW91dCAoc29ja2V0KSB7XG4gIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBDb25uZWN0VGltZW91dEVycm9yKCkpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDb25uZWN0b3JcbiIsIG51bGwsIG51bGwsICIndXNlIHN0cmljdCdcblxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGtCb2R5VXNlZCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCBFRSA9IHJlcXVpcmUoJ2V2ZW50cycpXG5cbmNvbnN0IHJlZGlyZWN0YWJsZVN0YXR1c0NvZGVzID0gWzMwMCwgMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdXG5cbmNvbnN0IGtCb2R5ID0gU3ltYm9sKCdib2R5JylcblxuY2xhc3MgQm9keUFzeW5jSXRlcmFibGUge1xuICBjb25zdHJ1Y3RvciAoYm9keSkge1xuICAgIHRoaXNba0JvZHldID0gYm9keVxuICAgIHRoaXNba0JvZHlVc2VkXSA9IGZhbHNlXG4gIH1cblxuICBhc3luYyAqIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gKCkge1xuICAgIGFzc2VydCghdGhpc1trQm9keVVzZWRdLCAnZGlzdHVyYmVkJylcbiAgICB0aGlzW2tCb2R5VXNlZF0gPSB0cnVlXG4gICAgeWllbGQgKiB0aGlzW2tCb2R5XVxuICB9XG59XG5cbmNsYXNzIFJlZGlyZWN0SGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yIChkaXNwYXRjaCwgbWF4UmVkaXJlY3Rpb25zLCBvcHRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKG1heFJlZGlyZWN0aW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZWRpcmVjdGlvbnMpIHx8IG1heFJlZGlyZWN0aW9ucyA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlZGlyZWN0aW9ucyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICB1dGlsLnZhbGlkYXRlSGFuZGxlcihoYW5kbGVyLCBvcHRzLm1ldGhvZCwgb3B0cy51cGdyYWRlKVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGRpc3BhdGNoXG4gICAgdGhpcy5sb2NhdGlvbiA9IG51bGxcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMub3B0cyA9IHsgLi4ub3B0cywgbWF4UmVkaXJlY3Rpb25zOiAwIH0gLy8gb3B0cyBtdXN0IGJlIGEgY29weVxuICAgIHRoaXMubWF4UmVkaXJlY3Rpb25zID0gbWF4UmVkaXJlY3Rpb25zXG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlclxuICAgIHRoaXMuaGlzdG9yeSA9IFtdXG5cbiAgICBpZiAodXRpbC5pc1N0cmVhbSh0aGlzLm9wdHMuYm9keSkpIHtcbiAgICAgIC8vIFRPRE8gKGZpeCk6IFByb3ZpZGUgc29tZSB3YXkgZm9yIHRoZSB1c2VyIHRvIGNhY2hlIHRoZSBmaWxlIHRvIGUuZy4gL3RtcFxuICAgICAgLy8gc28gdGhhdCBpdCBjYW4gYmUgZGlzcGF0Y2hlZCBhZ2Fpbj9cbiAgICAgIC8vIFRPRE8gKGZpeCk6IERvIHdlIG5lZWQgMTAwLWV4cGVjdCBzdXBwb3J0IHRvIHByb3ZpZGUgYSB3YXkgdG8gZG8gdGhpcyBwcm9wZXJseT9cbiAgICAgIGlmICh1dGlsLmJvZHlMZW5ndGgodGhpcy5vcHRzLmJvZHkpID09PSAwKSB7XG4gICAgICAgIHRoaXMub3B0cy5ib2R5XG4gICAgICAgICAgLm9uKCdkYXRhJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKVxuICAgICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRzLmJvZHkucmVhZGFibGVEaWRSZWFkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhpcy5vcHRzLmJvZHlba0JvZHlVc2VkXSA9IGZhbHNlXG4gICAgICAgIEVFLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMub3B0cy5ib2R5LCAnZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGlzW2tCb2R5VXNlZF0gPSB0cnVlXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuYm9keSAmJiB0eXBlb2YgdGhpcy5vcHRzLmJvZHkucGlwZVRvID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBUT0RPIChmaXgpOiBXZSBjYW4ndCBhY2Nlc3MgUmVhZGFibGVTdHJlYW0gaW50ZXJuYWwgc3RhdGVcbiAgICAgIC8vIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCBpdCBoYXMgYmVlbiBkaXN0dXJiZWQuIFRoaXMgaXMganVzdFxuICAgICAgLy8gYSB3b3JrYXJvdW5kLlxuICAgICAgdGhpcy5vcHRzLmJvZHkgPSBuZXcgQm9keUFzeW5jSXRlcmFibGUodGhpcy5vcHRzLmJvZHkpXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMub3B0cy5ib2R5ICYmXG4gICAgICB0eXBlb2YgdGhpcy5vcHRzLmJvZHkgIT09ICdzdHJpbmcnICYmXG4gICAgICAhQXJyYXlCdWZmZXIuaXNWaWV3KHRoaXMub3B0cy5ib2R5KSAmJlxuICAgICAgdXRpbC5pc0l0ZXJhYmxlKHRoaXMub3B0cy5ib2R5KVxuICAgICkge1xuICAgICAgLy8gVE9ETzogU2hvdWxkIHdlIGFsbG93IHJlLXVzaW5nIGl0ZXJhYmxlIGlmICF0aGlzLm9wdHMuaWRlbXBvdGVudFxuICAgICAgLy8gb3IgdGhyb3VnaCBzb21lIG90aGVyIGZsYWc/XG4gICAgICB0aGlzLm9wdHMuYm9keSA9IG5ldyBCb2R5QXN5bmNJdGVyYWJsZSh0aGlzLm9wdHMuYm9keSlcbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5oYW5kbGVyLm9uQ29ubmVjdChhYm9ydCwgeyBoaXN0b3J5OiB0aGlzLmhpc3RvcnkgfSlcbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgaGVhZGVycywgc29ja2V0KSB7XG4gICAgdGhpcy5oYW5kbGVyLm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gIH1cblxuICBvbkVycm9yIChlcnJvcikge1xuICAgIHRoaXMuaGFuZGxlci5vbkVycm9yKGVycm9yKVxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCBoZWFkZXJzLCByZXN1bWUsIHN0YXR1c1RleHQpIHtcbiAgICB0aGlzLmxvY2F0aW9uID0gdGhpcy5oaXN0b3J5Lmxlbmd0aCA+PSB0aGlzLm1heFJlZGlyZWN0aW9ucyB8fCB1dGlsLmlzRGlzdHVyYmVkKHRoaXMub3B0cy5ib2R5KVxuICAgICAgPyBudWxsXG4gICAgICA6IHBhcnNlTG9jYXRpb24oc3RhdHVzQ29kZSwgaGVhZGVycylcblxuICAgIGlmICh0aGlzLm9wdHMub3JpZ2luKSB7XG4gICAgICB0aGlzLmhpc3RvcnkucHVzaChuZXcgVVJMKHRoaXMub3B0cy5wYXRoLCB0aGlzLm9wdHMub3JpZ2luKSlcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubG9jYXRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25IZWFkZXJzKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHJlc3VtZSwgc3RhdHVzVGV4dClcbiAgICB9XG5cbiAgICBjb25zdCB7IG9yaWdpbiwgcGF0aG5hbWUsIHNlYXJjaCB9ID0gdXRpbC5wYXJzZVVSTChuZXcgVVJMKHRoaXMubG9jYXRpb24sIHRoaXMub3B0cy5vcmlnaW4gJiYgbmV3IFVSTCh0aGlzLm9wdHMucGF0aCwgdGhpcy5vcHRzLm9yaWdpbikpKVxuICAgIGNvbnN0IHBhdGggPSBzZWFyY2ggPyBgJHtwYXRobmFtZX0ke3NlYXJjaH1gIDogcGF0aG5hbWVcblxuICAgIC8vIFJlbW92ZSBoZWFkZXJzIHJlZmVycmluZyB0byB0aGUgb3JpZ2luYWwgVVJMLlxuICAgIC8vIEJ5IGRlZmF1bHQgaXQgaXMgSG9zdCBvbmx5LCB1bmxlc3MgaXQncyBhIDMwMyAoc2VlIGJlbG93KSwgd2hpY2ggcmVtb3ZlcyBhbHNvIGFsbCBDb250ZW50LSogaGVhZGVycy5cbiAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNFxuICAgIHRoaXMub3B0cy5oZWFkZXJzID0gY2xlYW5SZXF1ZXN0SGVhZGVycyh0aGlzLm9wdHMuaGVhZGVycywgc3RhdHVzQ29kZSA9PT0gMzAzLCB0aGlzLm9wdHMub3JpZ2luICE9PSBvcmlnaW4pXG4gICAgdGhpcy5vcHRzLnBhdGggPSBwYXRoXG4gICAgdGhpcy5vcHRzLm9yaWdpbiA9IG9yaWdpblxuICAgIHRoaXMub3B0cy5tYXhSZWRpcmVjdGlvbnMgPSAwXG4gICAgdGhpcy5vcHRzLnF1ZXJ5ID0gbnVsbFxuXG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjQuNFxuICAgIC8vIEluIGNhc2Ugb2YgSFRUUCAzMDMsIGFsd2F5cyByZXBsYWNlIG1ldGhvZCB0byBiZSBlaXRoZXIgSEVBRCBvciBHRVRcbiAgICBpZiAoc3RhdHVzQ29kZSA9PT0gMzAzICYmIHRoaXMub3B0cy5tZXRob2QgIT09ICdIRUFEJykge1xuICAgICAgdGhpcy5vcHRzLm1ldGhvZCA9ICdHRVQnXG4gICAgICB0aGlzLm9wdHMuYm9keSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgaWYgKHRoaXMubG9jYXRpb24pIHtcbiAgICAgIC8qXG4gICAgICAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40XG5cbiAgICAgICAgVExEUjogdW5kaWNpIGFsd2F5cyBpZ25vcmVzIDN4eCByZXNwb25zZSBib2RpZXMuXG5cbiAgICAgICAgUmVkaXJlY3Rpb24gaXMgdXNlZCB0byBzZXJ2ZSB0aGUgcmVxdWVzdGVkIHJlc291cmNlIGZyb20gYW5vdGhlciBVUkwsIHNvIGl0IGlzIGFzc3VtZXMgdGhhdFxuICAgICAgICBubyBib2R5IGlzIGdlbmVyYXRlZCAoYW5kIHRodXMgY2FuIGJlIGlnbm9yZWQpLiBFdmVuIHRob3VnaCBnZW5lcmF0aW5nIGEgYm9keSBpcyBub3QgcHJvaGliaXRlZC5cblxuICAgICAgICBGb3Igc3RhdHVzIDMwMSwgMzAyLCAzMDMsIDMwNyBhbmQgMzA4ICh0aGUgbGF0dGVyIGZyb20gUkZDIDcyMzgpLCB0aGUgc3BlY3MgbWVudGlvbiB0aGF0IHRoZSBib2R5IHVzdWFsbHlcbiAgICAgICAgKHdoaWNoIG1lYW5zIGl0J3Mgb3B0aW9uYWwgYW5kIG5vdCBtYW5kYXRlZCkgY29udGFpbiBqdXN0IGFuIGh5cGVybGluayB0byB0aGUgdmFsdWUgb2ZcbiAgICAgICAgdGhlIExvY2F0aW9uIHJlc3BvbnNlIGhlYWRlciwgc28gdGhlIGJvZHkgY2FuIGJlIGlnbm9yZWQgc2FmZWx5LlxuXG4gICAgICAgIEZvciBzdGF0dXMgMzAwLCB3aGljaCBpcyBcIk11bHRpcGxlIENob2ljZXNcIiwgdGhlIHNwZWMgbWVudGlvbnMgYm90aCBnZW5lcmF0aW5nIGEgTG9jYXRpb25cbiAgICAgICAgcmVzcG9uc2UgaGVhZGVyIEFORCBhIHJlc3BvbnNlIGJvZHkgd2l0aCB0aGUgb3RoZXIgcG9zc2libGUgbG9jYXRpb24gdG8gZm9sbG93LlxuICAgICAgICBTaW5jZSB0aGUgc3BlYyBleHBsaWNpdGlseSBjaG9vc2VzIG5vdCB0byBzcGVjaWZ5IGEgZm9ybWF0IGZvciBzdWNoIGJvZHkgYW5kIGxlYXZlIGl0IHRvXG4gICAgICAgIHNlcnZlcnMgYW5kIGJyb3dzZXJzIGltcGxlbWVudG9ycywgd2UgaWdub3JlIHRoZSBib2R5IGFzIHRoZXJlIGlzIG5vIHNwZWNpZmllZCB3YXkgdG8gZXZlbnR1YWxseSBwYXJzZSBpdC5cbiAgICAgICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25EYXRhKGNodW5rKVxuICAgIH1cbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgaWYgKHRoaXMubG9jYXRpb24pIHtcbiAgICAgIC8qXG4gICAgICAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40XG5cbiAgICAgICAgVExEUjogdW5kaWNpIGFsd2F5cyBpZ25vcmVzIDN4eCByZXNwb25zZSB0cmFpbGVycyBhcyB0aGV5IGFyZSBub3QgZXhwZWN0ZWQgaW4gY2FzZSBvZiByZWRpcmVjdGlvbnNcbiAgICAgICAgYW5kIG5laXRoZXIgYXJlIHVzZWZ1bCBpZiBwcmVzZW50LlxuXG4gICAgICAgIFNlZSBjb21tZW50IG9uIG9uRGF0YSBtZXRob2QgYWJvdmUgZm9yIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb25zLlxuICAgICAgKi9cblxuICAgICAgdGhpcy5sb2NhdGlvbiA9IG51bGxcbiAgICAgIHRoaXMuYWJvcnQgPSBudWxsXG5cbiAgICAgIHRoaXMuZGlzcGF0Y2godGhpcy5vcHRzLCB0aGlzKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhhbmRsZXIub25Db21wbGV0ZSh0cmFpbGVycylcbiAgICB9XG4gIH1cblxuICBvbkJvZHlTZW50IChjaHVuaykge1xuICAgIGlmICh0aGlzLmhhbmRsZXIub25Cb2R5U2VudCkge1xuICAgICAgdGhpcy5oYW5kbGVyLm9uQm9keVNlbnQoY2h1bmspXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlTG9jYXRpb24gKHN0YXR1c0NvZGUsIGhlYWRlcnMpIHtcbiAgaWYgKHJlZGlyZWN0YWJsZVN0YXR1c0NvZGVzLmluZGV4T2Yoc3RhdHVzQ29kZSkgPT09IC0xKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgIGlmIChoZWFkZXJzW2ldLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2xvY2F0aW9uJykge1xuICAgICAgcmV0dXJuIGhlYWRlcnNbaSArIDFdXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40LjRcbmZ1bmN0aW9uIHNob3VsZFJlbW92ZUhlYWRlciAoaGVhZGVyLCByZW1vdmVDb250ZW50LCB1bmtub3duT3JpZ2luKSB7XG4gIGlmIChoZWFkZXIubGVuZ3RoID09PSA0KSB7XG4gICAgcmV0dXJuIHV0aWwuaGVhZGVyTmFtZVRvU3RyaW5nKGhlYWRlcikgPT09ICdob3N0J1xuICB9XG4gIGlmIChyZW1vdmVDb250ZW50ICYmIHV0aWwuaGVhZGVyTmFtZVRvU3RyaW5nKGhlYWRlcikuc3RhcnRzV2l0aCgnY29udGVudC0nKSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgaWYgKHVua25vd25PcmlnaW4gJiYgKGhlYWRlci5sZW5ndGggPT09IDEzIHx8IGhlYWRlci5sZW5ndGggPT09IDYgfHwgaGVhZGVyLmxlbmd0aCA9PT0gMTkpKSB7XG4gICAgY29uc3QgbmFtZSA9IHV0aWwuaGVhZGVyTmFtZVRvU3RyaW5nKGhlYWRlcilcbiAgICByZXR1cm4gbmFtZSA9PT0gJ2F1dGhvcml6YXRpb24nIHx8IG5hbWUgPT09ICdjb29raWUnIHx8IG5hbWUgPT09ICdwcm94eS1hdXRob3JpemF0aW9uJ1xuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG4vLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNFxuZnVuY3Rpb24gY2xlYW5SZXF1ZXN0SGVhZGVycyAoaGVhZGVycywgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikge1xuICBjb25zdCByZXQgPSBbXVxuICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgaWYgKCFzaG91bGRSZW1vdmVIZWFkZXIoaGVhZGVyc1tpXSwgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikpIHtcbiAgICAgICAgcmV0LnB1c2goaGVhZGVyc1tpXSwgaGVhZGVyc1tpICsgMV0pXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGhlYWRlcnMgJiYgdHlwZW9mIGhlYWRlcnMgPT09ICdvYmplY3QnKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoaGVhZGVycykpIHtcbiAgICAgIGlmICghc2hvdWxkUmVtb3ZlSGVhZGVyKGtleSwgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikpIHtcbiAgICAgICAgcmV0LnB1c2goa2V5LCBoZWFkZXJzW2tleV0pXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGFzc2VydChoZWFkZXJzID09IG51bGwsICdoZWFkZXJzIG11c3QgYmUgYW4gb2JqZWN0IG9yIGFuIGFycmF5JylcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmVkaXJlY3RIYW5kbGVyXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFJlZGlyZWN0SGFuZGxlciA9IHJlcXVpcmUoJy4uL2hhbmRsZXIvUmVkaXJlY3RIYW5kbGVyJylcblxuZnVuY3Rpb24gY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciAoeyBtYXhSZWRpcmVjdGlvbnM6IGRlZmF1bHRNYXhSZWRpcmVjdGlvbnMgfSkge1xuICByZXR1cm4gKGRpc3BhdGNoKSA9PiB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIEludGVyY2VwdCAob3B0cywgaGFuZGxlcikge1xuICAgICAgY29uc3QgeyBtYXhSZWRpcmVjdGlvbnMgPSBkZWZhdWx0TWF4UmVkaXJlY3Rpb25zIH0gPSBvcHRzXG5cbiAgICAgIGlmICghbWF4UmVkaXJlY3Rpb25zKSB7XG4gICAgICAgIHJldHVybiBkaXNwYXRjaChvcHRzLCBoYW5kbGVyKVxuICAgICAgfVxuXG4gICAgICBjb25zdCByZWRpcmVjdEhhbmRsZXIgPSBuZXcgUmVkaXJlY3RIYW5kbGVyKGRpc3BhdGNoLCBtYXhSZWRpcmVjdGlvbnMsIG9wdHMsIGhhbmRsZXIpXG4gICAgICBvcHRzID0geyAuLi5vcHRzLCBtYXhSZWRpcmVjdGlvbnM6IDAgfSAvLyBTdG9wIHN1YiBkaXNwYXRjaGVyIGZyb20gYWxzbyByZWRpcmVjdGluZy5cbiAgICAgIHJldHVybiBkaXNwYXRjaChvcHRzLCByZWRpcmVjdEhhbmRsZXIpXG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvclxuIiwgIm1vZHVsZS5leHBvcnRzID0gJ0FHRnpiUUVBQUFBQk1BaGdBWDhCZjJBRGYzOS9BWDlnQkg5L2YzOEJmMkFBQUdBRGYzOS9BR0FCZndCZ0FuOS9BR0FHZjM5L2YzOS9BQUxMQVFnRFpXNTJHSGRoYzIxZmIyNWZhR1ZoWkdWeWMxOWpiMjF3YkdWMFpRQUNBMlZ1ZGhWM1lYTnRYMjl1WDIxbGMzTmhaMlZmWW1WbmFXNEFBQU5sYm5ZTGQyRnpiVjl2Ymw5MWNtd0FBUU5sYm5ZT2QyRnpiVjl2Ymw5emRHRjBkWE1BQVFObGJuWVVkMkZ6YlY5dmJsOW9aV0ZrWlhKZlptbGxiR1FBQVFObGJuWVVkMkZ6YlY5dmJsOW9aV0ZrWlhKZmRtRnNkV1VBQVFObGJuWU1kMkZ6YlY5dmJsOWliMlI1QUFFRFpXNTJHSGRoYzIxZmIyNWZiV1Z6YzJGblpWOWpiMjF3YkdWMFpRQUFBMFpGQXdNRUFBQUZBQUFBQUFBQUJRRUZBQVVGQlFBQUJnQUFBQUFHQmdZR0FRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFBQUJBUWNBQUFVRkF3QUJCQVVCY0FFU0VnVURBUUFDQmdnQmZ3RkJnTlFFQ3dmUkJTSUdiV1Z0YjNKNUFnQUxYMmx1YVhScFlXeHBlbVVBQ1JsZlgybHVaR2x5WldOMFgyWjFibU4wYVc5dVgzUmhZbXhsQVFBTGJHeG9kSFJ3WDJsdWFYUUFDaGhzYkdoMGRIQmZjMmh2ZFd4a1gydGxaWEJmWVd4cGRtVUFRUXhzYkdoMGRIQmZZV3hzYjJNQURBWnRZV3hzYjJNQVJndHNiR2gwZEhCZlpuSmxaUUFOQkdaeVpXVUFTQTlzYkdoMGRIQmZaMlYwWDNSNWNHVUFEaFZzYkdoMGRIQmZaMlYwWDJoMGRIQmZiV0ZxYjNJQUR4VnNiR2gwZEhCZloyVjBYMmgwZEhCZmJXbHViM0lBRUJGc2JHaDBkSEJmWjJWMFgyMWxkR2h2WkFBUkZteHNhSFIwY0Y5blpYUmZjM1JoZEhWelgyTnZaR1VBRWhKc2JHaDBkSEJmWjJWMFgzVndaM0poWkdVQUV3eHNiR2gwZEhCZmNtVnpaWFFBRkE1c2JHaDBkSEJmWlhobFkzVjBaUUFWRkd4c2FIUjBjRjl6WlhSMGFXNW5jMTlwYm1sMEFCWU5iR3hvZEhSd1gyWnBibWx6YUFBWERHeHNhSFIwY0Y5d1lYVnpaUUFZRFd4c2FIUjBjRjl5WlhOMWJXVUFHUnRzYkdoMGRIQmZjbVZ6ZFcxbFgyRm1kR1Z5WDNWd1ozSmhaR1VBR2hCc2JHaDBkSEJmWjJWMFgyVnljbTV2QUJzWGJHeG9kSFJ3WDJkbGRGOWxjbkp2Y2w5eVpXRnpiMjRBSEJkc2JHaDBkSEJmYzJWMFgyVnljbTl5WDNKbFlYTnZiZ0FkRkd4c2FIUjBjRjluWlhSZlpYSnliM0pmY0c5ekFCNFJiR3hvZEhSd1gyVnljbTV2WDI1aGJXVUFIeEpzYkdoMGRIQmZiV1YwYUc5a1gyNWhiV1VBSUJKc2JHaDBkSEJmYzNSaGRIVnpYMjVoYldVQUlScHNiR2gwZEhCZmMyVjBYMnhsYm1sbGJuUmZhR1ZoWkdWeWN3QWlJV3hzYUhSMGNGOXpaWFJmYkdWdWFXVnVkRjlqYUhWdWEyVmtYMnhsYm1kMGFBQWpIV3hzYUhSMGNGOXpaWFJmYkdWdWFXVnVkRjlyWldWd1gyRnNhWFpsQUNRa2JHeG9kSFJ3WDNObGRGOXNaVzVwWlc1MFgzUnlZVzV6Wm1WeVgyVnVZMjlrYVc1bkFDVVliR3hvZEhSd1gyMWxjM05oWjJWZmJtVmxaSE5mWlc5bUFEOEpGd0VBUVFFTEVRRUNBd1FGQ3dZSE5UazNNUzh0SnlzcENzTGdBa1VDQUFzSUFCQ0lnSUNBQUFzWkFDQUFFTUtBZ0lBQUdpQUFJQUkyQWpnZ0FDQUJPZ0FvQ3h3QUlBQWdBQzhCTWlBQUxRQXVJQUFRd1lDQWdBQVFnSUNBZ0FBTEtnRUJmMEhBQUJER2dJQ0FBQ0lCRU1LQWdJQUFHaUFCUVlDSWdJQUFOZ0k0SUFFZ0FEb0FLQ0FCQ3dvQUlBQVF5SUNBZ0FBTEJ3QWdBQzBBS0FzSEFDQUFMUUFxQ3djQUlBQXRBQ3NMQndBZ0FDMEFLUXNIQUNBQUx3RXlDd2NBSUFBdEFDNExSUUVFZnlBQUtBSVlJUUVnQUMwQUxTRUNJQUF0QUNnaEF5QUFLQUk0SVFRZ0FCRENnSUNBQUJvZ0FDQUVOZ0k0SUFBZ0F6b0FLQ0FBSUFJNkFDMGdBQ0FCTmdJWUN4RUFJQUFnQVNBQklBSnFFTU9BZ0lBQUN4QUFJQUJCQUVIY0FCRE1nSUNBQUJvTFp3RUJmMEVBSVFFQ1FDQUFLQUlNRFFBQ1FBSkFBa0FDUUNBQUxRQXZEZ01CQUFNQ0N5QUFLQUk0SWdGRkRRQWdBU2dDTENJQlJRMEFJQUFnQVJHQWdJQ0FBQUFpQVEwREMwRUFEd3NReW9DQWdBQUFDeUFBUWNPV2dJQUFOZ0lRUVE0aEFRc2dBUXNlQUFKQUlBQW9BZ3dOQUNBQVFkR2JnSUFBTmdJUUlBQkJGVFlDREFzTEZnQUNRQ0FBS0FJTVFSVkhEUUFnQUVFQU5nSU1Dd3NXQUFKQUlBQW9BZ3hCRmtjTkFDQUFRUUEyQWd3TEN3Y0FJQUFvQWd3TEJ3QWdBQ2dDRUFzSkFDQUFJQUUyQWhBTEJ3QWdBQ2dDRkFzaUFBSkFJQUJCSkVrTkFCREtnSUNBQUFBTElBQkJBblJCb0xPQWdBQnFLQUlBQ3lJQUFrQWdBRUV1U1EwQUVNcUFnSUFBQUFzZ0FFRUNkRUd3dElDQUFHb29BZ0FMN2dzQkFYOUI2NmlBZ0FBaEFRSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUJCbkg5cUR2UURZMklBQVdGaFlXRmhZUUlEQkFWaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhCZ2NJQ1FvTERBME9EMkZoWVdGaEVHRmhZV0ZoWVdGaFlXRmhFV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZUklURkJVV0Z4Z1pHaHRoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoSEIwZUh5QWhJaU1rSlNZbktDa3FLeXd0TGk4d01USXpORFUyWVRjNE9UcGhZV0ZoWVdGaFlUdGhZV0U4WVdGaFlUMCtQMkZoWVdGaFlXRmhRR0ZoUVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlVSkRSRVZHUjBoSlNrdE1UVTVQVUZGU1UyRmhZV0ZoWVdGaFZGVldWMWhaV2x0aFhGMWhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZlWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWDJCaEMwSGhwNENBQUE4TFFhU2hnSUFBRHd0Qnk2eUFnQUFQQzBIK3NZQ0FBQThMUWNDa2dJQUFEd3RCcTZTQWdBQVBDMEdOcUlDQUFBOExRZUttZ0lBQUR3dEJnTENBZ0FBUEMwRzVyNENBQUE4TFFkZWtnSUFBRHd0Qjc1K0FnQUFQQzBIaG40Q0FBQThMUWZxZmdJQUFEd3RCOHFDQWdBQVBDMEdvcjRDQUFBOExRYTZ5Z0lBQUR3dEJpTENBZ0FBUEMwSHNwNENBQUE4TFFZS2lnSUFBRHd0QmpwMkFnQUFQQzBIUXJvQ0FBQThMUWNxamdJQUFEd3RCeGJLQWdBQVBDMEhmbklDQUFBOExRZEtjZ0lBQUR3dEJ4S0NBZ0FBUEMwSFhvSUNBQUE4TFFhS2ZnSUFBRHd0QjdhNkFnQUFQQzBHcnNJQ0FBQThMUWRTbGdJQUFEd3RCeks2QWdBQVBDMEg2cm9DQUFBOExRZnlyZ0lBQUR3dEIwckNBZ0FBUEMwSHhuWUNBQUE4TFFidWdnSUFBRHd0Qjk2dUFnQUFQQzBHUXNZQ0FBQThMUWRleGdJQUFEd3RCb3EyQWdBQVBDMEhVcDRDQUFBOExRZUNyZ0lBQUR3dEJuNnlBZ0FBUEMwSHJzWUNBQUE4TFFkV2ZnSUFBRHd0QnlyR0FnQUFQQzBIZXBZQ0FBQThMUWRTZWdJQUFEd3RCOUp5QWdBQVBDMEduc29DQUFBOExRYkdkZ0lBQUR3dEJvSjJBZ0FBUEMwRzVzWUNBQUE4TFFieXdnSUFBRHd0QmtxR0FnQUFQQzBHenBvQ0FBQThMUWVtc2dJQUFEd3RCcko2QWdBQVBDMEhVcTRDQUFBOExRZmVtZ0lBQUR3dEJnS2FBZ0FBUEMwR3dvWUNBQUE4TFFmNmVnSUFBRHd0QmphT0FnQUFQQzBHSnJZQ0FBQThMUWZlaWdJQUFEd3RCb0xHQWdBQVBDMEd1bjRDQUFBOExRY2FsZ0lBQUR3dEI2SjZBZ0FBUEMwR1Rvb0NBQUE4TFFjS3ZnSUFBRHd0Qnc1MkFnQUFQQzBHTHJJQ0FBQThMUWVHZGdJQUFEd3RCamErQWdBQVBDMEhxb1lDQUFBOExRYlN0Z0lBQUR3dEIwcStBZ0FBUEMwSGZzb0NBQUE4TFFkS3lnSUFBRHd0QjhMQ0FnQUFQQzBHcG9vQ0FBQThMUWZtamdJQUFEd3RCbVo2QWdBQVBDMEcxcklDQUFBOExRWnV3Z0lBQUR3dEJrcktBZ0FBUEMwRzJxNENBQUE4TFFjS2lnSUFBRHd0QitMS0FnQUFQQzBHZXBZQ0FBQThMUWRDaWdJQUFEd3RCdXA2QWdBQVBDMEdCbm9DQUFBOExFTXFBZ0lBQUFBdEIxcUdBZ0FBaEFRc2dBUXNXQUNBQUlBQXRBQzFCL2dGeElBRkJBRWR5T2dBdEN4a0FJQUFnQUMwQUxVSDlBWEVnQVVFQVIwRUJkSEk2QUMwTEdRQWdBQ0FBTFFBdFFmc0JjU0FCUVFCSFFRSjBjam9BTFFzWkFDQUFJQUF0QUMxQjl3RnhJQUZCQUVkQkEzUnlPZ0F0Q3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BZ0FpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTFNRRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDQkNJRVJRMEFJQUFnQVNBQ0lBRnJJQVFSZ1lDQWdBQUFJZ05CZjBjTkFDQUFRY2FSZ0lBQU5nSVFRUmdoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJd0lnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDMGtCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FnZ2lCRVVOQUNBQUlBRWdBaUFCYXlBRUVZR0FnSUFBQUNJRFFYOUhEUUFnQUVIMmlvQ0FBRFlDRUVFWUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NOQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0SkFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUlNSWdSRkRRQWdBQ0FCSUFJZ0FXc2dCQkdCZ0lDQUFBQWlBMEYvUncwQUlBQkI3WnFBZ0FBMkFoQkJHQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWpnaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxTUUVDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0VDSUVSUTBBSUFBZ0FTQUNJQUZySUFRUmdZQ0FnQUFBSWdOQmYwY05BQ0FBUVpXUWdJQUFOZ0lRUVJnaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSThJZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQzBrQkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BaFFpQkVVTkFDQUFJQUVnQWlBQmF5QUVFWUdBZ0lBQUFDSURRWDlIRFFBZ0FFR3FtNENBQURZQ0VFRVlJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDUUNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEpBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJWUlnUkZEUUFnQUNBQklBSWdBV3NnQkJHQmdJQ0FBQUFpQTBGL1J3MEFJQUJCN1pPQWdBQTJBaEJCR0NFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FrUWlCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NKQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUlzSWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREMwa0JBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWlnaUJFVU5BQ0FBSUFFZ0FpQUJheUFFRVlHQWdJQUFBQ0lEUVg5SERRQWdBRUgyaUlDQUFEWUNFRUVZSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ1VDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RKQVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSWNJZ1JGRFFBZ0FDQUJJQUlnQVdzZ0JCR0JnSUNBQUFBaUEwRi9SdzBBSUFCQndwbUFnQUEyQWhCQkdDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9Ba2dpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTFNRRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDSUNJRVJRMEFJQUFnQVNBQ0lBRnJJQVFSZ1lDQWdBQUFJZ05CZjBjTkFDQUFRWlNVZ0lBQU5nSVFRUmdoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FKTUlnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FsUWlCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NXQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0RkFRRi9Ba0FDUUNBQUx3RXdRUlJ4UVJSSERRQkJBU0VESUFBdEFDaEJBVVlOQVNBQUx3RXlRZVVBUmlFRERBRUxJQUF0QUNsQkJVWWhBd3NnQUNBRE9nQXVRUUFML2dFQkEzOUJBU0VEQWtBZ0FDOEJNQ0lFUVFoeERRQWdBQ2tESUVJQVVpRURDd0pBQWtBZ0FDMEFMa1VOQUVFQklRVWdBQzBBS1VFRlJnMEJRUUVoQlNBRVFjQUFjVVVnQTNGQkFVY05BUXRCQUNFRklBUkJ3QUJ4RFFCQkFpRUZJQVJCLy84RGNTSURRUWh4RFFBQ1FDQURRWUFFY1VVTkFBSkFJQUF0QUNoQkFVY05BQ0FBTFFBdFFRcHhEUUJCQlE4TFFRUVBDd0pBSUFOQklIRU5BQUpBSUFBdEFDaEJBVVlOQUNBQUx3RXlRZi8vQTNFaUFFR2NmMnBCNUFCSkRRQWdBRUhNQVVZTkFDQUFRYkFDUmcwQVFRUWhCU0FFUVNoeFJRMENJQU5CaUFSeFFZQUVSZzBDQzBFQUR3dEJBRUVESUFBcEF5QlFHeUVGQ3lBRkMySUJBbjlCQUNFQkFrQWdBQzBBS0VFQlJnMEFJQUF2QVRKQi8vOERjU0lDUVp4L2FrSGtBRWtOQUNBQ1Fjd0JSZzBBSUFKQnNBSkdEUUFnQUM4Qk1DSUFRY0FBY1EwQVFRRWhBU0FBUVlnRWNVR0FCRVlOQUNBQVFTaHhSU0VCQ3lBQkM2Y0JBUU4vQWtBQ1FBSkFJQUF0QUNwRkRRQWdBQzBBSzBVTkFFRUFJUU1nQUM4Qk1DSUVRUUp4UlEwQkRBSUxRUUFoQXlBQUx3RXdJZ1JCQVhGRkRRRUxRUUVoQXlBQUxRQW9RUUZHRFFBZ0FDOEJNa0gvL3dOeElnVkJuSDlxUWVRQVNRMEFJQVZCekFGR0RRQWdCVUd3QWtZTkFDQUVRY0FBY1EwQVFRQWhBeUFFUVlnRWNVR0FCRVlOQUNBRVFTaHhRUUJISVFNTElBQkJBRHNCTUNBQVFRQTZBQzhnQXd1WkFRRUNmd0pBQWtBQ1FDQUFMUUFxUlEwQUlBQXRBQ3RGRFFCQkFDRUJJQUF2QVRBaUFrRUNjVVVOQVF3Q0MwRUFJUUVnQUM4Qk1DSUNRUUZ4UlEwQkMwRUJJUUVnQUMwQUtFRUJSZzBBSUFBdkFUSkIvLzhEY1NJQVFaeC9ha0hrQUVrTkFDQUFRY3dCUmcwQUlBQkJzQUpHRFFBZ0FrSEFBSEVOQUVFQUlRRWdBa0dJQkhGQmdBUkdEUUFnQWtFb2NVRUFSeUVCQ3lBQkMxa0FJQUJCR0dwQ0FEY0RBQ0FBUWdBM0F3QWdBRUU0YWtJQU53TUFJQUJCTUdwQ0FEY0RBQ0FBUVNocVFnQTNBd0FnQUVFZ2FrSUFOd01BSUFCQkVHcENBRGNEQUNBQVFRaHFRZ0EzQXdBZ0FFSGRBVFlDSEVFQUMzc0JBWDhDUUNBQUtBSU1JZ01OQUFKQUlBQW9BZ1JGRFFBZ0FDQUJOZ0lFQ3dKQUlBQWdBU0FDRU1TQWdJQUFJZ01OQUNBQUtBSU1Ed3NnQUNBRE5nSWNRUUFoQXlBQUtBSUVJZ0ZGRFFBZ0FDQUJJQUlnQUNnQ0NCR0JnSUNBQUFBaUFVVU5BQ0FBSUFJMkFoUWdBQ0FCTmdJTUlBRWhBd3NnQXd2azh3RUREbjhEZmdSL0k0Q0FnSUFBUVJCcklnTWtnSUNBZ0FBZ0FTRUVJQUVoQlNBQklRWWdBU0VISUFFaENDQUJJUWtnQVNFS0lBRWhDeUFCSVF3Z0FTRU5JQUVoRGlBQklROENRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdBQ2dDSENJUVFYOXFEdDBCMmdFQjJRRUNBd1FGQmdjSUNRb0xEQTBPMkFFUEVOY0JFUkxXQVJNVUZSWVhHQmthRytBQjN3RWNIUjdWQVI4Z0lTSWpKQ1hVQVNZbktDa3FLeXpUQWRJQkxTN1JBZEFCTHpBeE1qTTBOVFkzT0RrNk96dzlQajlBUVVKRFJFVkcyd0ZIU0VsS3p3SE9BVXZOQVV6TUFVMU9UMUJSVWxOVVZWWlhXRmxhVzF4ZFhsOWdZV0pqWkdWbVoyaHBhbXRzYlc1dmNIRnljM1IxZG5kNGVYcDdmSDErZjRBQmdRR0NBWU1CaEFHRkFZWUJod0dJQVlrQmlnR0xBWXdCalFHT0FZOEJrQUdSQVpJQmt3R1VBWlVCbGdHWEFaZ0JtUUdhQVpzQm5BR2RBWjRCbndHZ0FhRUJvZ0dqQWFRQnBRR21BYWNCcUFHcEFhb0Jxd0dzQWEwQnJnR3ZBYkFCc1FHeUFiTUJ0QUcxQWJZQnR3SExBY29CdUFISkFia0J5QUc2QWJzQnZBRzlBYjRCdndIQUFjRUJ3Z0hEQWNRQnhRSEdBUURjQVF0QkFDRVFETVlCQzBFT0lSQU14UUVMUVEwaEVBekVBUXRCRHlFUURNTUJDMEVRSVJBTXdnRUxRUk1oRUF6QkFRdEJGQ0VRRE1BQkMwRVZJUkFNdndFTFFSWWhFQXkrQVF0QkZ5RVFETDBCQzBFWUlSQU12QUVMUVJraEVBeTdBUXRCR2lFUURMb0JDMEViSVJBTXVRRUxRUndoRUF5NEFRdEJDQ0VRRExjQkMwRWRJUkFNdGdFTFFTQWhFQXkxQVF0Qkh5RVFETFFCQzBFSElSQU1zd0VMUVNFaEVBeXlBUXRCSWlFUURMRUJDMEVlSVJBTXNBRUxRU01oRUF5dkFRdEJFaUVRREs0QkMwRVJJUkFNclFFTFFTUWhFQXlzQVF0QkpTRVFES3NCQzBFbUlSQU1xZ0VMUVNjaEVBeXBBUXRCd3dFaEVBeW9BUXRCS1NFUURLY0JDMEVySVJBTXBnRUxRU3doRUF5bEFRdEJMU0VRREtRQkMwRXVJUkFNb3dFTFFTOGhFQXlpQVF0QnhBRWhFQXloQVF0Qk1DRVFES0FCQzBFMElSQU1ud0VMUVF3aEVBeWVBUXRCTVNFUURKMEJDMEV5SVJBTW5BRUxRVE1oRUF5YkFRdEJPU0VRREpvQkMwRTFJUkFNbVFFTFFjVUJJUkFNbUFFTFFRc2hFQXlYQVF0Qk9pRVFESllCQzBFMklSQU1sUUVMUVFvaEVBeVVBUXRCTnlFUURKTUJDMEU0SVJBTWtnRUxRVHdoRUF5UkFRdEJPeUVRREpBQkMwRTlJUkFNandFTFFRa2hFQXlPQVF0QktDRVFESTBCQzBFK0lSQU1qQUVMUVQ4aEVBeUxBUXRCd0FBaEVBeUtBUXRCd1FBaEVBeUpBUXRCd2dBaEVBeUlBUXRCd3dBaEVBeUhBUXRCeEFBaEVBeUdBUXRCeFFBaEVBeUZBUXRCeGdBaEVBeUVBUXRCS2lFUURJTUJDMEhIQUNFUURJSUJDMEhJQUNFUURJRUJDMEhKQUNFUURJQUJDMEhLQUNFUURIOExRY3NBSVJBTWZndEJ6UUFoRUF4OUMwSE1BQ0VRREh3TFFjNEFJUkFNZXd0Qnp3QWhFQXg2QzBIUUFDRVFESGtMUWRFQUlSQU1lQXRCMGdBaEVBeDNDMEhUQUNFUURIWUxRZFFBSVJBTWRRdEIxZ0FoRUF4MEMwSFZBQ0VRREhNTFFRWWhFQXh5QzBIWEFDRVFESEVMUVFVaEVBeHdDMEhZQUNFUURHOExRUVFoRUF4dUMwSFpBQ0VRREcwTFFkb0FJUkFNYkF0QjJ3QWhFQXhyQzBIY0FDRVFER29MUVFNaEVBeHBDMEhkQUNFUURHZ0xRZDRBSVJBTVp3dEIzd0FoRUF4bUMwSGhBQ0VRREdVTFFlQUFJUkFNWkF0QjRnQWhFQXhqQzBIakFDRVFER0lMUVFJaEVBeGhDMEhrQUNFUURHQUxRZVVBSVJBTVh3dEI1Z0FoRUF4ZUMwSG5BQ0VRREYwTFFlZ0FJUkFNWEF0QjZRQWhFQXhiQzBIcUFDRVFERm9MUWVzQUlSQU1XUXRCN0FBaEVBeFlDMEh0QUNFUURGY0xRZTRBSVJBTVZndEI3d0FoRUF4VkMwSHdBQ0VRREZRTFFmRUFJUkFNVXd0QjhnQWhFQXhTQzBIekFDRVFERkVMUWZRQUlSQU1VQXRCOVFBaEVBeFBDMEgyQUNFUURFNExRZmNBSVJBTVRRdEIrQUFoRUF4TUMwSDVBQ0VRREVzTFFmb0FJUkFNU2d0Qit3QWhFQXhKQzBIOEFDRVFERWdMUWYwQUlSQU1Sd3RCL2dBaEVBeEdDMEgvQUNFUURFVUxRWUFCSVJBTVJBdEJnUUVoRUF4REMwR0NBU0VRREVJTFFZTUJJUkFNUVF0QmhBRWhFQXhBQzBHRkFTRVFERDhMUVlZQklSQU1QZ3RCaHdFaEVBdzlDMEdJQVNFUUREd0xRWWtCSVJBTU93dEJpZ0VoRUF3NkMwR0xBU0VRRERrTFFZd0JJUkFNT0F0QmpRRWhFQXczQzBHT0FTRVFERFlMUVk4QklSQU1OUXRCa0FFaEVBdzBDMEdSQVNFUURETUxRWklCSVJBTU1ndEJrd0VoRUF3eEMwR1VBU0VRRERBTFFaVUJJUkFNTHd0QmxnRWhFQXd1QzBHWEFTRVFEQzBMUVpnQklSQU1MQXRCbVFFaEVBd3JDMEdhQVNFUURDb0xRWnNCSVJBTUtRdEJuQUVoRUF3b0MwR2RBU0VRRENjTFFaNEJJUkFNSmd0Qm53RWhFQXdsQzBHZ0FTRVFEQ1FMUWFFQklSQU1Jd3RCb2dFaEVBd2lDMEdqQVNFUURDRUxRYVFCSVJBTUlBdEJwUUVoRUF3ZkMwR21BU0VRREI0TFFhY0JJUkFNSFF0QnFBRWhFQXdjQzBHcEFTRVFEQnNMUWFvQklSQU1HZ3RCcXdFaEVBd1pDMEdzQVNFUURCZ0xRYTBCSVJBTUZ3dEJyZ0VoRUF3V0MwRUJJUkFNRlF0QnJ3RWhFQXdVQzBHd0FTRVFEQk1MUWJFQklSQU1FZ3RCc3dFaEVBd1JDMEd5QVNFUURCQUxRYlFCSVJBTUR3dEJ0UUVoRUF3T0MwRzJBU0VRREEwTFFiY0JJUkFNREF0QnVBRWhFQXdMQzBHNUFTRVFEQW9MUWJvQklSQU1DUXRCdXdFaEVBd0lDMEhHQVNFUURBY0xRYndCSVJBTUJndEJ2UUVoRUF3RkMwRytBU0VRREFRTFFiOEJJUkFNQXd0QndBRWhFQXdDQzBIQ0FTRVFEQUVMUWNFQklSQUxBMEFDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBUURzY0JBQUVDQXdRRkJnY0lDUW9MREEwT0R4QVJFaE1VRlJZWEdCa2FHeHdlSHlBaEl5VW9QMEJCUkVWR1IwaEpTa3RNVFU5UVVWSlQzZ05YV1Z0Y1hXQmlaV1puYUdscWEyeHRiM0J4Y25OMGRYWjNlSGw2ZTN4OWZvQUJnZ0dGQVlZQmh3R0pBWXNCakFHTkFZNEJqd0dRQVpFQmxBR1ZBWllCbHdHWUFaa0JtZ0diQVp3Qm5RR2VBWjhCb0FHaEFhSUJvd0drQWFVQnBnR25BYWdCcVFHcUFhc0JyQUd0QWE0QnJ3R3dBYkVCc2dHekFiUUJ0UUcyQWJjQnVBRzVBYm9CdXdHOEFiMEJ2Z0cvQWNBQndRSENBY01CeEFIRkFjWUJ4d0hJQWNrQnlnSExBY3dCelFIT0FjOEIwQUhSQWRJQjB3SFVBZFVCMWdIWEFkZ0IyUUhhQWRzQjNBSGRBZDRCNEFIaEFlSUI0d0hrQWVVQjVnSG5BZWdCNlFIcUFlc0I3QUh0QWU0Qjd3SHdBZkVCOGdIekFaa0NwQUt3QXY0Qy9nSUxJQUVpQkNBQ1J3M3pBVUhkQVNFUURQOERDeUFCSWhBZ0FrY04zUUZCd3dFaEVBeitBd3NnQVNJQklBSkhEWkFCUWZjQUlSQU0vUU1MSUFFaUFTQUNSdzJHQVVIdkFDRVFEUHdEQ3lBQklnRWdBa2NOZjBIcUFDRVFEUHNEQ3lBQklnRWdBa2NOZTBIb0FDRVFEUG9EQ3lBQklnRWdBa2NOZUVIbUFDRVFEUGtEQ3lBQklnRWdBa2NOR2tFWUlSQU0rQU1MSUFFaUFTQUNSdzBVUVJJaEVBejNBd3NnQVNJQklBSkhEVmxCeFFBaEVBejJBd3NnQVNJQklBSkhEVXBCUHlFUURQVURDeUFCSWdFZ0FrY05TRUU4SVJBTTlBTUxJQUVpQVNBQ1J3MUJRVEVoRUF6ekF3c2dBQzBBTGtFQlJnM3JBd3lIQWdzZ0FDQUJJZ0VnQWhEQWdJQ0FBRUVCUnczbUFTQUFRZ0EzQXlBTTV3RUxJQUFnQVNJQklBSVF0SUNBZ0FBaUVBM25BU0FCSVFFTTlRSUxBa0FnQVNJQklBSkhEUUJCQmlFUURQQURDeUFBSUFGQkFXb2lBU0FDRUx1QWdJQUFJaEFONkFFZ0FTRUJEREVMSUFCQ0FEY0RJRUVTSVJBTTFRTUxJQUVpRUNBQ1J3MHJRUjBoRUF6dEF3c0NRQ0FCSWdFZ0FrWU5BQ0FCUVFGcUlRRkJFQ0VRRE5RREMwRUhJUkFNN0FNTElBQkNBQ0FBS1FNZ0loRWdBaUFCSWhCcnJTSVNmU0lUSUJNZ0VWWWJOd01nSUJFZ0VsWWlGRVVONVFGQkNDRVFET3NEQ3dKQUlBRWlBU0FDUmcwQUlBQkJpWUNBZ0FBMkFnZ2dBQ0FCTmdJRUlBRWhBVUVVSVJBTTBnTUxRUWtoRUF6cUF3c2dBU0VCSUFBcEF5QlFEZVFCSUFFaEFRenlBZ3NDUUNBQklnRWdBa2NOQUVFTElSQU02UU1MSUFBZ0FVRUJhaUlCSUFJUXRvQ0FnQUFpRUEzbEFTQUJJUUVNOGdJTElBQWdBU0lCSUFJUXVJQ0FnQUFpRUEzbEFTQUJJUUVNOGdJTElBQWdBU0lCSUFJUXVJQ0FnQUFpRUEzbUFTQUJJUUVNRFFzZ0FDQUJJZ0VnQWhDNmdJQ0FBQ0lRRGVjQklBRWhBUXp3QWdzQ1FDQUJJZ0VnQWtjTkFFRVBJUkFNNVFNTElBRXRBQUFpRUVFN1JnMElJQkJCRFVjTjZBRWdBVUVCYWlFQkRPOENDeUFBSUFFaUFTQUNFTHFBZ0lBQUloQU42QUVnQVNFQkRQSUNDd05BQWtBZ0FTMEFBRUh3dFlDQUFHb3RBQUFpRUVFQlJnMEFJQkJCQWtjTjZ3RWdBQ2dDQkNFUUlBQkJBRFlDQkNBQUlCQWdBVUVCYWlJQkVMbUFnSUFBSWhBTjZnRWdBU0VCRFBRQ0N5QUJRUUZxSWdFZ0FrY05BQXRCRWlFUURPSURDeUFBSUFFaUFTQUNFTHFBZ0lBQUloQU42UUVnQVNFQkRBb0xJQUVpQVNBQ1J3MEdRUnNoRUF6Z0F3c0NRQ0FCSWdFZ0FrY05BRUVXSVJBTTRBTUxJQUJCaW9DQWdBQTJBZ2dnQUNBQk5nSUVJQUFnQVNBQ0VMaUFnSUFBSWhBTjZnRWdBU0VCUVNBaEVBekdBd3NDUUNBQklnRWdBa1lOQUFOQUFrQWdBUzBBQUVId3Q0Q0FBR290QUFBaUVFRUNSZzBBQWtBZ0VFRi9hZzRFNVFIc0FRRHJBZXdCQ3lBQlFRRnFJUUZCQ0NFUURNZ0RDeUFCUVFGcUlnRWdBa2NOQUF0QkZTRVFETjhEQzBFVklSQU0zZ01MQTBBQ1FDQUJMUUFBUWZDNWdJQUFhaTBBQUNJUVFRSkdEUUFnRUVGL2FnNEUzZ0hzQWVBQjZ3SHNBUXNnQVVFQmFpSUJJQUpIRFFBTFFSZ2hFQXpkQXdzQ1FDQUJJZ0VnQWtZTkFDQUFRWXVBZ0lBQU5nSUlJQUFnQVRZQ0JDQUJJUUZCQnlFUURNUURDMEVaSVJBTTNBTUxJQUZCQVdvaEFRd0NDd0pBSUFFaUZDQUNSdzBBUVJvaEVBemJBd3NnRkNFQkFrQWdGQzBBQUVGemFnNFUzUUx1QXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0lBN2dJTFFRQWhFQ0FBUVFBMkFod2dBRUd2aTRDQUFEWUNFQ0FBUVFJMkFnd2dBQ0FVUVFGcU5nSVVETm9EQ3dKQUlBRXRBQUFpRUVFN1JnMEFJQkJCRFVjTjZBRWdBVUVCYWlFQkRPVUNDeUFCUVFGcUlRRUxRU0loRUF5L0F3c0NRQ0FCSWhBZ0FrY05BRUVjSVJBTTJBTUxRZ0FoRVNBUUlRRWdFQzBBQUVGUWFnNDM1d0htQVFFQ0F3UUZCZ2NJQUFBQUFBQUFBQWtLQ3d3TkRnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUR4QVJFaE1VQUF0QkhpRVFETDBEQzBJQ0lSRU01UUVMUWdNaEVRemtBUXRDQkNFUkRPTUJDMElGSVJFTTRnRUxRZ1loRVF6aEFRdENCeUVSRE9BQkMwSUlJUkVNM3dFTFFna2hFUXplQVF0Q0NpRVJETjBCQzBJTElSRU0zQUVMUWd3aEVRemJBUXRDRFNFUkROb0JDMElPSVJFTTJRRUxRZzhoRVF6WUFRdENDaUVSRE5jQkMwSUxJUkVNMWdFTFFnd2hFUXpWQVF0Q0RTRVJETlFCQzBJT0lSRU0wd0VMUWc4aEVRelNBUXRDQUNFUkFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FRTFFBQVFWQnFEamZsQWVRQkFBRUNBd1FGQmdmbUFlWUI1Z0htQWVZQjVnSG1BUWdKQ2dzTURlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdFT0R4QVJFaFBtQVF0Q0FpRVJET1FCQzBJRElSRU00d0VMUWdRaEVRemlBUXRDQlNFUkRPRUJDMElHSVJFTTRBRUxRZ2NoRVF6ZkFRdENDQ0VSRE40QkMwSUpJUkVNM1FFTFFnb2hFUXpjQVF0Q0N5RVJETnNCQzBJTUlSRU0yZ0VMUWcwaEVRelpBUXRDRGlFUkROZ0JDMElQSVJFTTF3RUxRZ29oRVF6V0FRdENDeUVSRE5VQkMwSU1JUkVNMUFFTFFnMGhFUXpUQVF0Q0RpRVJETklCQzBJUElSRU0wUUVMSUFCQ0FDQUFLUU1nSWhFZ0FpQUJJaEJyclNJU2ZTSVRJQk1nRVZZYk53TWdJQkVnRWxZaUZFVU4wZ0ZCSHlFUURNQURDd0pBSUFFaUFTQUNSZzBBSUFCQmlZQ0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFVRWtJUkFNcHdNTFFTQWhFQXkvQXdzZ0FDQUJJaEFnQWhDK2dJQ0FBRUYvYWc0RnRnRUF4UUlCMFFIU0FRdEJFU0VRREtRREN5QUFRUUU2QUM4Z0VDRUJETHNEQ3lBQklnRWdBa2NOMGdGQkpDRVFETHNEQ3lBQklnMGdBa2NOSGtIR0FDRVFETG9EQ3lBQUlBRWlBU0FDRUxLQWdJQUFJaEFOMUFFZ0FTRUJETFVCQ3lBQkloQWdBa2NOSmtIUUFDRVFETGdEQ3dKQUlBRWlBU0FDUncwQVFTZ2hFQXk0QXdzZ0FFRUFOZ0lFSUFCQmpJQ0FnQUEyQWdnZ0FDQUJJQUVRc1lDQWdBQWlFQTNUQVNBQklRRU0yQUVMQWtBZ0FTSVFJQUpIRFFCQktTRVFETGNEQ3lBUUxRQUFJZ0ZCSUVZTkZDQUJRUWxIRGRNQklCQkJBV29oQVF3VkN3SkFJQUVpQVNBQ1JnMEFJQUZCQVdvaEFRd1hDMEVxSVJBTXRRTUxBa0FnQVNJUUlBSkhEUUJCS3lFUURMVURDd0pBSUJBdEFBQWlBVUVKUmcwQUlBRkJJRWNOMVFFTElBQXRBQ3hCQ0VZTjB3RWdFQ0VCREpFREN3SkFJQUVpQVNBQ1J3MEFRU3doRUF5MEF3c2dBUzBBQUVFS1J3M1ZBU0FCUVFGcUlRRU15UUlMSUFFaURpQUNSdzNWQVVFdklSQU1zZ01MQTBBQ1FDQUJMUUFBSWhCQklFWU5BQUpBSUJCQmRtb09CQURjQWR3QkFOb0JDeUFCSVFFTTRBRUxJQUZCQVdvaUFTQUNSdzBBQzBFeElSQU1zUU1MUVRJaEVDQUJJaFFnQWtZTnNBTWdBaUFVYXlBQUtBSUFJZ0ZxSVJVZ0ZDQUJhMEVEYWlFV0FrQURRQ0FVTFFBQUloZEJJSElnRnlBWFFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFmQzdnSUFBYWkwQUFFY05BUUpBSUFGQkEwY05BRUVHSVFFTWxnTUxJQUZCQVdvaEFTQVVRUUZxSWhRZ0FrY05BQXNnQUNBVk5nSUFETEVEQ3lBQVFRQTJBZ0FnRkNFQkROa0JDMEV6SVJBZ0FTSVVJQUpHRGE4RElBSWdGR3NnQUNnQ0FDSUJhaUVWSUJRZ0FXdEJDR29oRmdKQUEwQWdGQzBBQUNJWFFTQnlJQmNnRjBHL2YycEIvd0Z4UVJwSkcwSC9BWEVnQVVIMHU0Q0FBR290QUFCSERRRUNRQ0FCUVFoSERRQkJCU0VCREpVREN5QUJRUUZxSVFFZ0ZFRUJhaUlVSUFKSERRQUxJQUFnRlRZQ0FBeXdBd3NnQUVFQU5nSUFJQlFoQVF6WUFRdEJOQ0VRSUFFaUZDQUNSZzJ1QXlBQ0lCUnJJQUFvQWdBaUFXb2hGU0FVSUFGclFRVnFJUllDUUFOQUlCUXRBQUFpRjBFZ2NpQVhJQmRCdjM5cVFmOEJjVUVhU1J0Qi93RnhJQUZCME1LQWdBQnFMUUFBUncwQkFrQWdBVUVGUncwQVFRY2hBUXlVQXdzZ0FVRUJhaUVCSUJSQkFXb2lGQ0FDUncwQUN5QUFJQlUyQWdBTXJ3TUxJQUJCQURZQ0FDQVVJUUVNMXdFTEFrQWdBU0lCSUFKR0RRQURRQUpBSUFFdEFBQkJnTDZBZ0FCcUxRQUFJaEJCQVVZTkFDQVFRUUpHRFFvZ0FTRUJETjBCQ3lBQlFRRnFJZ0VnQWtjTkFBdEJNQ0VRREs0REMwRXdJUkFNclFNTEFrQWdBU0lCSUFKR0RRQURRQUpBSUFFdEFBQWlFRUVnUmcwQUlCQkJkbW9PQk5rQjJnSGFBZGtCMmdFTElBRkJBV29pQVNBQ1J3MEFDMEU0SVJBTXJRTUxRVGdoRUF5c0F3c0RRQUpBSUFFdEFBQWlFRUVnUmcwQUlCQkJDVWNOQXdzZ0FVRUJhaUlCSUFKSERRQUxRVHdoRUF5ckF3c0RRQUpBSUFFdEFBQWlFRUVnUmcwQUFrQUNRQ0FRUVhacURnVGFBUUVCMmdFQUN5QVFRU3hHRGRzQkN5QUJJUUVNQkFzZ0FVRUJhaUlCSUFKSERRQUxRVDhoRUF5cUF3c2dBU0VCRE5zQkMwSEFBQ0VRSUFFaUZDQUNSZzJvQXlBQ0lCUnJJQUFvQWdBaUFXb2hGaUFVSUFGclFRWnFJUmNDUUFOQUlCUXRBQUJCSUhJZ0FVR0F3SUNBQUdvdEFBQkhEUUVnQVVFR1JnMk9BeUFCUVFGcUlRRWdGRUVCYWlJVUlBSkhEUUFMSUFBZ0ZqWUNBQXlwQXdzZ0FFRUFOZ0lBSUJRaEFRdEJOaUVRREk0REN3SkFJQUVpRHlBQ1J3MEFRY0VBSVJBTXB3TUxJQUJCaklDQWdBQTJBZ2dnQUNBUE5nSUVJQThoQVNBQUxRQXNRWDlxRGdUTkFkVUIxd0haQVljREN5QUJRUUZxSVFFTXpBRUxBa0FnQVNJQklBSkdEUUFEUUFKQUlBRXRBQUFpRUVFZ2NpQVFJQkJCdjM5cVFmOEJjVUVhU1J0Qi93RnhJaEJCQ1VZTkFDQVFRU0JHRFFBQ1FBSkFBa0FDUUNBUVFaMS9hZzRUQUFNREF3TURBd01CQXdNREF3TURBd01EQWdNTElBRkJBV29oQVVFeElSQU1rUU1MSUFGQkFXb2hBVUV5SVJBTWtBTUxJQUZCQVdvaEFVRXpJUkFNandNTElBRWhBUXpRQVFzZ0FVRUJhaUlCSUFKSERRQUxRVFVoRUF5bEF3dEJOU0VRREtRREN3SkFJQUVpQVNBQ1JnMEFBMEFDUUNBQkxRQUFRWUM4Z0lBQWFpMEFBRUVCUmcwQUlBRWhBUXpUQVFzZ0FVRUJhaUlCSUFKSERRQUxRVDBoRUF5a0F3dEJQU0VRREtNREN5QUFJQUVpQVNBQ0VMQ0FnSUFBSWhBTjFnRWdBU0VCREFFTElCQkJBV29oQVF0QlBDRVFESWNEQ3dKQUlBRWlBU0FDUncwQVFjSUFJUkFNb0FNTEFrQURRQUpBSUFFdEFBQkJkMm9PR0FBQy9nTCtBb1FEL2dMK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDQVA0Q0N5QUJRUUZxSWdFZ0FrY05BQXRCd2dBaEVBeWdBd3NnQVVFQmFpRUJJQUF0QUMxQkFYRkZEYjBCSUFFaEFRdEJMQ0VRRElVREN5QUJJZ0VnQWtjTjB3RkJ4QUFoRUF5ZEF3c0RRQUpBSUFFdEFBQkJrTUNBZ0FCcUxRQUFRUUZHRFFBZ0FTRUJETGNDQ3lBQlFRRnFJZ0VnQWtjTkFBdEJ4UUFoRUF5Y0F3c2dEUzBBQUNJUVFTQkdEYk1CSUJCQk9rY05nUU1nQUNnQ0JDRUJJQUJCQURZQ0JDQUFJQUVnRFJDdmdJQ0FBQ0lCRGRBQklBMUJBV29oQVF5ekFndEJ4d0FoRUNBQklnMGdBa1lObWdNZ0FpQU5heUFBS0FJQUlnRnFJUllnRFNBQmEwRUZhaUVYQTBBZ0RTMEFBQ0lVUVNCeUlCUWdGRUcvZjJwQi93RnhRUnBKRzBIL0FYRWdBVUdRd29DQUFHb3RBQUJIRFlBRElBRkJCVVlOOUFJZ0FVRUJhaUVCSUExQkFXb2lEU0FDUncwQUN5QUFJQlkyQWdBTW1nTUxRY2dBSVJBZ0FTSU5JQUpHRFprRElBSWdEV3NnQUNnQ0FDSUJhaUVXSUEwZ0FXdEJDV29oRndOQUlBMHRBQUFpRkVFZ2NpQVVJQlJCdjM5cVFmOEJjVUVhU1J0Qi93RnhJQUZCbHNLQWdBQnFMUUFBUnczL0FnSkFJQUZCQ1VjTkFFRUNJUUVNOVFJTElBRkJBV29oQVNBTlFRRnFJZzBnQWtjTkFBc2dBQ0FXTmdJQURKa0RDd0pBSUFFaURTQUNSdzBBUWNrQUlSQU1tUU1MQWtBQ1FDQU5MUUFBSWdGQklISWdBU0FCUWI5L2FrSC9BWEZCR2trYlFmOEJjVUdTZjJvT0J3Q0FBNEFEZ0FPQUE0QURBWUFEQ3lBTlFRRnFJUUZCUGlFUURJQURDeUFOUVFGcUlRRkJQeUVRRFA4Q0MwSEtBQ0VRSUFFaURTQUNSZzJYQXlBQ0lBMXJJQUFvQWdBaUFXb2hGaUFOSUFGclFRRnFJUmNEUUNBTkxRQUFJaFJCSUhJZ0ZDQVVRYjkvYWtIL0FYRkJHa2tiUWY4QmNTQUJRYURDZ0lBQWFpMEFBRWNOL1FJZ0FVRUJSZzN3QWlBQlFRRnFJUUVnRFVFQmFpSU5JQUpIRFFBTElBQWdGallDQUF5WEF3dEJ5d0FoRUNBQklnMGdBa1lObGdNZ0FpQU5heUFBS0FJQUlnRnFJUllnRFNBQmEwRU9haUVYQTBBZ0RTMEFBQ0lVUVNCeUlCUWdGRUcvZjJwQi93RnhRUnBKRzBIL0FYRWdBVUdpd29DQUFHb3RBQUJIRGZ3Q0lBRkJEa1lOOEFJZ0FVRUJhaUVCSUExQkFXb2lEU0FDUncwQUN5QUFJQlkyQWdBTWxnTUxRY3dBSVJBZ0FTSU5JQUpHRFpVRElBSWdEV3NnQUNnQ0FDSUJhaUVXSUEwZ0FXdEJEMm9oRndOQUlBMHRBQUFpRkVFZ2NpQVVJQlJCdjM5cVFmOEJjVUVhU1J0Qi93RnhJQUZCd01LQWdBQnFMUUFBUnczN0FnSkFJQUZCRDBjTkFFRURJUUVNOFFJTElBRkJBV29oQVNBTlFRRnFJZzBnQWtjTkFBc2dBQ0FXTmdJQURKVURDMEhOQUNFUUlBRWlEU0FDUmcyVUF5QUNJQTFySUFBb0FnQWlBV29oRmlBTklBRnJRUVZxSVJjRFFDQU5MUUFBSWhSQklISWdGQ0FVUWI5L2FrSC9BWEZCR2trYlFmOEJjU0FCUWREQ2dJQUFhaTBBQUVjTitnSUNRQ0FCUVFWSERRQkJCQ0VCRFBBQ0N5QUJRUUZxSVFFZ0RVRUJhaUlOSUFKSERRQUxJQUFnRmpZQ0FBeVVBd3NDUUNBQklnMGdBa2NOQUVIT0FDRVFESlFEQ3dKQUFrQUNRQUpBSUEwdEFBQWlBVUVnY2lBQklBRkJ2MzlxUWY4QmNVRWFTUnRCL3dGeFFaMS9hZzRUQVAwQy9RTDlBdjBDL1FMOUF2MEMvUUw5QXYwQy9RTDlBZ0g5QXYwQy9RSUNBLzBDQ3lBTlFRRnFJUUZCd1FBaEVBejlBZ3NnRFVFQmFpRUJRY0lBSVJBTS9BSUxJQTFCQVdvaEFVSERBQ0VRRFBzQ0N5QU5RUUZxSVFGQnhBQWhFQXo2QWdzQ1FDQUJJZ0VnQWtZTkFDQUFRWTJBZ0lBQU5nSUlJQUFnQVRZQ0JDQUJJUUZCeFFBaEVBejZBZ3RCendBaEVBeVNBd3NnRUNFQkFrQUNRQ0FRTFFBQVFYWnFEZ1FCcUFLb0FnQ29BZ3NnRUVFQmFpRUJDMEVuSVJBTStBSUxBa0FnQVNJQklBSkhEUUJCMFFBaEVBeVJBd3NDUUNBQkxRQUFRU0JHRFFBZ0FTRUJESTBCQ3lBQlFRRnFJUUVnQUMwQUxVRUJjVVVOeHdFZ0FTRUJESXdCQ3lBQkloY2dBa2NOeUFGQjBnQWhFQXlQQXd0QjB3QWhFQ0FCSWhRZ0FrWU5qZ01nQWlBVWF5QUFLQUlBSWdGcUlSWWdGQ0FCYTBFQmFpRVhBMEFnRkMwQUFDQUJRZGJDZ0lBQWFpMEFBRWNOekFFZ0FVRUJSZzNIQVNBQlFRRnFJUUVnRkVFQmFpSVVJQUpIRFFBTElBQWdGallDQUF5T0F3c0NRQ0FCSWdFZ0FrY05BRUhWQUNFUURJNERDeUFCTFFBQVFRcEhEY3dCSUFGQkFXb2hBUXpIQVFzQ1FDQUJJZ0VnQWtjTkFFSFdBQ0VRREkwREN3SkFBa0FnQVMwQUFFRjJhZzRFQU0wQnpRRUJ6UUVMSUFGQkFXb2hBUXpIQVFzZ0FVRUJhaUVCUWNvQUlSQU04d0lMSUFBZ0FTSUJJQUlRcm9DQWdBQWlFQTNMQVNBQklRRkJ6UUFoRUF6eUFnc2dBQzBBS1VFaVJnMkZBd3ltQWdzQ1FDQUJJZ0VnQWtjTkFFSGJBQ0VRRElvREMwRUFJUlJCQVNFWFFRRWhGa0VBSVJBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBZ0FTMEFBRUZRYWc0SzFBSFRBUUFCQWdNRUJRWUkxUUVMUVFJaEVBd0dDMEVESVJBTUJRdEJCQ0VRREFRTFFRVWhFQXdEQzBFR0lSQU1BZ3RCQnlFUURBRUxRUWdoRUF0QkFDRVhRUUFoRmtFQUlSUU16QUVMUVFraEVFRUJJUlJCQUNFWFFRQWhGZ3pMQVFzQ1FDQUJJZ0VnQWtjTkFFSGRBQ0VRRElrREN5QUJMUUFBUVM1SERjd0JJQUZCQVdvaEFReW1BZ3NnQVNJQklBSkhEY3dCUWQ4QUlSQU1od01MQWtBZ0FTSUJJQUpHRFFBZ0FFR09nSUNBQURZQ0NDQUFJQUUyQWdRZ0FTRUJRZEFBSVJBTTdnSUxRZUFBSVJBTWhnTUxRZUVBSVJBZ0FTSUJJQUpHRFlVRElBSWdBV3NnQUNnQ0FDSVVhaUVXSUFFZ0ZHdEJBMm9oRndOQUlBRXRBQUFnRkVIaXdvQ0FBR290QUFCSERjMEJJQlJCQTBZTnpBRWdGRUVCYWlFVUlBRkJBV29pQVNBQ1J3MEFDeUFBSUJZMkFnQU1oUU1MUWVJQUlSQWdBU0lCSUFKR0RZUURJQUlnQVdzZ0FDZ0NBQ0lVYWlFV0lBRWdGR3RCQW1vaEZ3TkFJQUV0QUFBZ0ZFSG13b0NBQUdvdEFBQkhEY3dCSUJSQkFrWU56Z0VnRkVFQmFpRVVJQUZCQVdvaUFTQUNSdzBBQ3lBQUlCWTJBZ0FNaEFNTFFlTUFJUkFnQVNJQklBSkdEWU1ESUFJZ0FXc2dBQ2dDQUNJVWFpRVdJQUVnRkd0QkEyb2hGd05BSUFFdEFBQWdGRUhwd29DQUFHb3RBQUJIRGNzQklCUkJBMFlOemdFZ0ZFRUJhaUVVSUFGQkFXb2lBU0FDUncwQUN5QUFJQlkyQWdBTWd3TUxBa0FnQVNJQklBSkhEUUJCNVFBaEVBeURBd3NnQUNBQlFRRnFJZ0VnQWhDb2dJQ0FBQ0lRRGMwQklBRWhBVUhXQUNFUURPa0NDd0pBSUFFaUFTQUNSZzBBQTBBQ1FDQUJMUUFBSWhCQklFWU5BQUpBQWtBQ1FDQVFRYmgvYWc0TEFBSFBBYzhCendIUEFjOEJ6d0hQQWM4QkFzOEJDeUFCUVFGcUlRRkIwZ0FoRUF6dEFnc2dBVUVCYWlFQlFkTUFJUkFNN0FJTElBRkJBV29oQVVIVUFDRVFET3NDQ3lBQlFRRnFJZ0VnQWtjTkFBdEI1QUFoRUF5Q0F3dEI1QUFoRUF5QkF3c0RRQUpBSUFFdEFBQkI4TUtBZ0FCcUxRQUFJaEJCQVVZTkFDQVFRWDVxRGdQUEFkQUIwUUhTQVFzZ0FVRUJhaUlCSUFKSERRQUxRZVlBSVJBTWdBTUxBa0FnQVNJQklBSkdEUUFnQVVFQmFpRUJEQU1MUWVjQUlSQU0vd0lMQTBBQ1FDQUJMUUFBUWZERWdJQUFhaTBBQUNJUVFRRkdEUUFDUUNBUVFYNXFEZ1RTQWRNQjFBRUExUUVMSUFFaEFVSFhBQ0VRRE9jQ0N5QUJRUUZxSWdFZ0FrY05BQXRCNkFBaEVBeitBZ3NDUUNBQklnRWdBa2NOQUVIcEFDRVFEUDRDQ3dKQUlBRXRBQUFpRUVGMmFnNGF1Z0hWQWRVQnZBSFZBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSEtBZFVCMVFFQTB3RUxJQUZCQVdvaEFRdEJCaUVRRE9NQ0N3TkFBa0FnQVMwQUFFSHd4b0NBQUdvdEFBQkJBVVlOQUNBQklRRU1uZ0lMSUFGQkFXb2lBU0FDUncwQUMwSHFBQ0VRRFBzQ0N3SkFJQUVpQVNBQ1JnMEFJQUZCQVdvaEFRd0RDMEhyQUNFUURQb0NDd0pBSUFFaUFTQUNSdzBBUWV3QUlSQU0rZ0lMSUFGQkFXb2hBUXdCQ3dKQUlBRWlBU0FDUncwQVFlMEFJUkFNK1FJTElBRkJBV29oQVF0QkJDRVFETjRDQ3dKQUlBRWlGQ0FDUncwQVFlNEFJUkFNOXdJTElCUWhBUUpBQWtBQ1FDQVVMUUFBUWZESWdJQUFhaTBBQUVGL2FnNEgxQUhWQWRZQkFKd0NBUUxYQVFzZ0ZFRUJhaUVCREFvTElCUkJBV29oQVF6TkFRdEJBQ0VRSUFCQkFEWUNIQ0FBUVp1U2dJQUFOZ0lRSUFCQkJ6WUNEQ0FBSUJSQkFXbzJBaFFNOWdJTEFrQURRQUpBSUFFdEFBQkI4TWlBZ0FCcUxRQUFJaEJCQkVZTkFBSkFBa0FnRUVGL2FnNEgwZ0hUQWRRQjJRRUFCQUhaQVFzZ0FTRUJRZG9BSVJBTTRBSUxJQUZCQVdvaEFVSGNBQ0VRRE44Q0N5QUJRUUZxSWdFZ0FrY05BQXRCN3dBaEVBejJBZ3NnQVVFQmFpRUJETXNCQ3dKQUlBRWlGQ0FDUncwQVFmQUFJUkFNOVFJTElCUXRBQUJCTDBjTjFBRWdGRUVCYWlFQkRBWUxBa0FnQVNJVUlBSkhEUUJCOFFBaEVBejBBZ3NDUUNBVUxRQUFJZ0ZCTDBjTkFDQVVRUUZxSVFGQjNRQWhFQXpiQWdzZ0FVRjJhaUlFUVJaTERkTUJRUUVnQkhSQmlZQ0FBbkZGRGRNQkRNb0NDd0pBSUFFaUFTQUNSZzBBSUFGQkFXb2hBVUhlQUNFUUROb0NDMEh5QUNFUURQSUNDd0pBSUFFaUZDQUNSdzBBUWZRQUlSQU04Z0lMSUJRaEFRSkFJQlF0QUFCQjhNeUFnQUJxTFFBQVFYOXFEZ1BKQXBRQ0FOUUJDMEhoQUNFUUROZ0NDd0pBSUFFaUZDQUNSZzBBQTBBQ1FDQVVMUUFBUWZES2dJQUFhaTBBQUNJQlFRTkdEUUFDUUNBQlFYOXFEZ0xMQWdEVkFRc2dGQ0VCUWQ4QUlSQU0yZ0lMSUJSQkFXb2lGQ0FDUncwQUMwSHpBQ0VRRFBFQ0MwSHpBQ0VRRFBBQ0N3SkFJQUVpQVNBQ1JnMEFJQUJCajRDQWdBQTJBZ2dnQUNBQk5nSUVJQUVoQVVIZ0FDRVFETmNDQzBIMUFDRVFETzhDQ3dKQUlBRWlBU0FDUncwQVFmWUFJUkFNN3dJTElBQkJqNENBZ0FBMkFnZ2dBQ0FCTmdJRUlBRWhBUXRCQXlFUUROUUNDd05BSUFFdEFBQkJJRWNOd3dJZ0FVRUJhaUlCSUFKSERRQUxRZmNBSVJBTTdBSUxBa0FnQVNJQklBSkhEUUJCK0FBaEVBenNBZ3NnQVMwQUFFRWdSdzNPQVNBQlFRRnFJUUVNN3dFTElBQWdBU0lCSUFJUXJJQ0FnQUFpRUEzT0FTQUJJUUVNamdJTEFrQWdBU0lFSUFKSERRQkIrZ0FoRUF6cUFnc2dCQzBBQUVITUFFY04wUUVnQkVFQmFpRUJRUk1oRUF6UEFRc0NRQ0FCSWdRZ0FrY05BRUg3QUNFUURPa0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQURRQ0FFTFFBQUlBRkI4TTZBZ0FCcUxRQUFSdzNRQVNBQlFRVkdEYzRCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWZzQUlSQU02QUlMQWtBZ0FTSUVJQUpIRFFCQi9BQWhFQXpvQWdzQ1FBSkFJQVF0QUFCQnZYOXFEZ3dBMFFIUkFkRUIwUUhSQWRFQjBRSFJBZEVCMFFFQjBRRUxJQVJCQVdvaEFVSG1BQ0VRRE04Q0N5QUVRUUZxSVFGQjV3QWhFQXpPQWdzQ1FDQUJJZ1FnQWtjTkFFSDlBQ0VRRE9jQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSHR6NENBQUdvdEFBQkhEYzhCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUg5QUNFUURPY0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFSQWhFQXpNQVFzQ1FDQUJJZ1FnQWtjTkFFSCtBQ0VRRE9ZQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVZxSVJBQ1FBTkFJQVF0QUFBZ0FVSDJ6b0NBQUdvdEFBQkhEYzRCSUFGQkJVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUgrQUNFUURPWUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFSWWhFQXpMQVFzQ1FDQUJJZ1FnQWtjTkFFSC9BQ0VRRE9VQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUU5xSVJBQ1FBTkFJQVF0QUFBZ0FVSDh6b0NBQUdvdEFBQkhEYzBCSUFGQkEwWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUgvQUNFUURPVUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFRVWhFQXpLQVFzQ1FDQUJJZ1FnQWtjTkFFR0FBU0VRRE9RQ0N5QUVMUUFBUWRrQVJ3M0xBU0FFUVFGcUlRRkJDQ0VRRE1rQkN3SkFJQUVpQkNBQ1J3MEFRWUVCSVJBTTR3SUxBa0FDUUNBRUxRQUFRYkovYWc0REFNd0JBY3dCQ3lBRVFRRnFJUUZCNndBaEVBektBZ3NnQkVFQmFpRUJRZXdBSVJBTXlRSUxBa0FnQVNJRUlBSkhEUUJCZ2dFaEVBemlBZ3NDUUFKQUlBUXRBQUJCdUg5cURnZ0F5d0hMQWNzQnl3SExBY3NCQWNzQkN5QUVRUUZxSVFGQjZnQWhFQXpKQWdzZ0JFRUJhaUVCUWUwQUlSQU15QUlMQWtBZ0FTSUVJQUpIRFFCQmd3RWhFQXpoQWdzZ0FpQUVheUFBS0FJQUlnRnFJUkFnQkNBQmEwRUNhaUVVQWtBRFFDQUVMUUFBSUFGQmdNK0FnQUJxTFFBQVJ3M0pBU0FCUVFKR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJBMkFnQkJnd0VoRUF6aEFndEJBQ0VRSUFCQkFEWUNBQ0FVUVFGcUlRRU14Z0VMQWtBZ0FTSUVJQUpIRFFCQmhBRWhFQXpnQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUVhaUVRQWtBRFFDQUVMUUFBSUFGQmc4K0FnQUJxTFFBQVJ3M0lBU0FCUVFSR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJoQUVoRUF6Z0Fnc2dBRUVBTmdJQUlCQkJBV29oQVVFaklSQU14UUVMQWtBZ0FTSUVJQUpIRFFCQmhRRWhFQXpmQWdzQ1FBSkFJQVF0QUFCQnRIOXFEZ2dBeUFISUFjZ0J5QUhJQWNnQkFjZ0JDeUFFUVFGcUlRRkI3d0FoRUF6R0Fnc2dCRUVCYWlFQlFmQUFJUkFNeFFJTEFrQWdBU0lFSUFKSERRQkJoZ0VoRUF6ZUFnc2dCQzBBQUVIRkFFY054UUVnQkVFQmFpRUJESU1DQ3dKQUlBRWlCQ0FDUncwQVFZY0JJUkFNM1FJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBMm9oRUFKQUEwQWdCQzBBQUNBQlFZalBnSUFBYWkwQUFFY054UUVnQVVFRFJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWWNCSVJBTTNRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkxTRVFETUlCQ3dKQUlBRWlCQ0FDUncwQVFZZ0JJUkFNM0FJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJDR29oRUFKQUEwQWdCQzBBQUNBQlFkRFBnSUFBYWkwQUFFY054QUVnQVVFSVJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWWdCSVJBTTNBSUxJQUJCQURZQ0FDQVFRUUZxSVFGQktTRVFETUVCQ3dKQUlBRWlBU0FDUncwQVFZa0JJUkFNMndJTFFRRWhFQ0FCTFFBQVFkOEFSdzNBQVNBQlFRRnFJUUVNZ1FJTEFrQWdBU0lFSUFKSERRQkJpZ0VoRUF6YUFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUEwQWdCQzBBQUNBQlFZelBnSUFBYWkwQUFFY053UUVnQVVFQlJnMnZBaUFCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdLQVNFUUROa0NDd0pBSUFFaUJDQUNSdzBBUVlzQklSQU0yUUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFtb2hFQUpBQTBBZ0JDMEFBQ0FCUVk3UGdJQUFhaTBBQUVjTndRRWdBVUVDUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZc0JJUkFNMlFJTElBQkJBRFlDQUNBUVFRRnFJUUZCQWlFUURMNEJDd0pBSUFFaUJDQUNSdzBBUVl3QklSQU0yQUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWZEUGdJQUFhaTBBQUVjTndBRWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZd0JJUkFNMkFJTElBQkJBRFlDQUNBUVFRRnFJUUZCSHlFUURMMEJDd0pBSUFFaUJDQUNSdzBBUVkwQklSQU0xd0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWZMUGdJQUFhaTBBQUVjTnZ3RWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZMEJJUkFNMXdJTElBQkJBRFlDQUNBUVFRRnFJUUZCQ1NFUURMd0JDd0pBSUFFaUJDQUNSdzBBUVk0QklSQU0xZ0lMQWtBQ1FDQUVMUUFBUWJkL2FnNEhBTDhCdndHL0FiOEJ2d0VCdndFTElBUkJBV29oQVVINEFDRVFETDBDQ3lBRVFRRnFJUUZCK1FBaEVBeThBZ3NDUUNBQklnUWdBa2NOQUVHUEFTRVFETlVDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRVnFJUkFDUUFOQUlBUXRBQUFnQVVHUno0Q0FBR290QUFCSERiMEJJQUZCQlVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR1BBU0VRRE5VQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJnaEVBeTZBUXNDUUNBQklnUWdBa2NOQUVHUUFTRVFETlFDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVHWHo0Q0FBR290QUFCSERid0JJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR1FBU0VRRE5RQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJjaEVBeTVBUXNDUUNBQklnUWdBa2NOQUVHUkFTRVFETk1DQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRWnFJUkFDUUFOQUlBUXRBQUFnQVVHYXo0Q0FBR290QUFCSERic0JJQUZCQmtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR1JBU0VRRE5NQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJVaEVBeTRBUXNDUUNBQklnUWdBa2NOQUVHU0FTRVFETklDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRVnFJUkFDUUFOQUlBUXRBQUFnQVVHaHo0Q0FBR290QUFCSERib0JJQUZCQlVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR1NBU0VRRE5JQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVI0aEVBeTNBUXNDUUNBQklnUWdBa2NOQUVHVEFTRVFETkVDQ3lBRUxRQUFRY3dBUncyNEFTQUVRUUZxSVFGQkNpRVFETFlCQ3dKQUlBUWdBa2NOQUVHVUFTRVFETkFDQ3dKQUFrQWdCQzBBQUVHL2Yyb09Ed0M1QWJrQnVRRzVBYmtCdVFHNUFia0J1UUc1QWJrQnVRRzVBUUc1QVFzZ0JFRUJhaUVCUWY0QUlSQU10d0lMSUFSQkFXb2hBVUgvQUNFUURMWUNDd0pBSUFRZ0FrY05BRUdWQVNFUURNOENDd0pBQWtBZ0JDMEFBRUcvZjJvT0F3QzRBUUc0QVFzZ0JFRUJhaUVCUWYwQUlSQU10Z0lMSUFSQkFXb2hCRUdBQVNFUURMVUNDd0pBSUFRZ0FrY05BRUdXQVNFUURNNENDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFGcUlSQUNRQU5BSUFRdEFBQWdBVUduejRDQUFHb3RBQUJIRGJZQklBRkJBVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHV0FTRVFETTRDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUXNoRUF5ekFRc0NRQ0FFSUFKSERRQkJsd0VoRUF6TkFnc0NRQUpBQWtBQ1FDQUVMUUFBUVZOcURpTUF1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBUUc0QWJnQnVBRzRBYmdCQXJnQnVBRzRBUU80QVFzZ0JFRUJhaUVCUWZzQUlSQU10Z0lMSUFSQkFXb2hBVUg4QUNFUURMVUNDeUFFUVFGcUlRUkJnUUVoRUF5MEFnc2dCRUVCYWlFRVFZSUJJUkFNc3dJTEFrQWdCQ0FDUncwQVFaZ0JJUkFNekFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCR29oRUFKQUEwQWdCQzBBQUNBQlFhblBnSUFBYWkwQUFFY050QUVnQVVFRVJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWmdCSVJBTXpBSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkdTRVFETEVCQ3dKQUlBUWdBa2NOQUVHWkFTRVFETXNDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRVnFJUkFDUUFOQUlBUXRBQUFnQVVHdXo0Q0FBR290QUFCSERiTUJJQUZCQlVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR1pBU0VRRE1zQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVFZaEVBeXdBUXNDUUNBRUlBSkhEUUJCbWdFaEVBektBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBa0FEUUNBRUxRQUFJQUZCdE0rQWdBQnFMUUFBUncyeUFTQUJRUUZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQm1nRWhFQXpLQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVjSVJBTXJ3RUxBa0FnQkNBQ1J3MEFRWnNCSVJBTXlRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRYmJQZ0lBQWFpMEFBRWNOc1FFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpzQklSQU15UUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJKeUVRREs0QkN3SkFJQVFnQWtjTkFFR2NBU0VRRE1nQ0N3SkFBa0FnQkMwQUFFR3NmMm9PQWdBQnNRRUxJQVJCQVdvaEJFR0dBU0VRREs4Q0N5QUVRUUZxSVFSQmh3RWhFQXl1QWdzQ1FDQUVJQUpIRFFCQm5RRWhFQXpIQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQWtBRFFDQUVMUUFBSUFGQnVNK0FnQUJxTFFBQVJ3MnZBU0FCUVFGR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJuUUVoRUF6SEFnc2dBRUVBTmdJQUlCQkJBV29oQVVFbUlSQU1yQUVMQWtBZ0JDQUNSdzBBUVo0QklSQU14Z0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWJyUGdJQUFhaTBBQUVjTnJnRWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFaNEJJUkFNeGdJTElBQkJBRFlDQUNBUVFRRnFJUUZCQXlFUURLc0JDd0pBSUFRZ0FrY05BRUdmQVNFUURNVUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUh0ejRDQUFHb3RBQUJIRGEwQklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHZkFTRVFETVVDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUXdoRUF5cUFRc0NRQ0FFSUFKSERRQkJvQUVoRUF6RUFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVEYWlFUUFrQURRQ0FFTFFBQUlBRkJ2TStBZ0FCcUxRQUFSdzJzQVNBQlFRTkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCb0FFaEVBekVBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRU5JUkFNcVFFTEFrQWdCQ0FDUncwQVFhRUJJUkFNd3dJTEFrQUNRQ0FFTFFBQVFicC9hZzRMQUt3QnJBR3NBYXdCckFHc0Fhd0JyQUdzQVFHc0FRc2dCRUVCYWlFRVFZc0JJUkFNcWdJTElBUkJBV29oQkVHTUFTRVFES2tDQ3dKQUlBUWdBa2NOQUVHaUFTRVFETUlDQ3lBRUxRQUFRZEFBUncycEFTQUVRUUZxSVFRTTZRRUxBa0FnQkNBQ1J3MEFRYU1CSVJBTXdRSUxBa0FDUUNBRUxRQUFRYmQvYWc0SEFhb0JxZ0dxQWFvQnFnRUFxZ0VMSUFSQkFXb2hCRUdPQVNFUURLZ0NDeUFFUVFGcUlRRkJJaUVRREtZQkN3SkFJQVFnQWtjTkFFR2tBU0VRRE1BQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUZxSVJBQ1FBTkFJQVF0QUFBZ0FVSEF6NENBQUdvdEFBQkhEYWdCSUFGQkFVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdrQVNFUURNQUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFSMGhFQXlsQVFzQ1FDQUVJQUpIRFFCQnBRRWhFQXkvQWdzQ1FBSkFJQVF0QUFCQnJuOXFEZ01BcUFFQnFBRUxJQVJCQVdvaEJFR1FBU0VRREtZQ0N5QUVRUUZxSVFGQkJDRVFES1FCQ3dKQUlBUWdBa2NOQUVHbUFTRVFETDRDQ3dKQUFrQUNRQUpBQWtBZ0JDMEFBRUcvZjJvT0ZRQ3FBYW9CcWdHcUFhb0JxZ0dxQWFvQnFnR3FBUUdxQWFvQkFxb0JxZ0VEcWdHcUFRU3FBUXNnQkVFQmFpRUVRWWdCSVJBTXFBSUxJQVJCQVdvaEJFR0pBU0VRREtjQ0N5QUVRUUZxSVFSQmlnRWhFQXltQWdzZ0JFRUJhaUVFUVk4QklSQU1wUUlMSUFSQkFXb2hCRUdSQVNFUURLUUNDd0pBSUFRZ0FrY05BRUduQVNFUURMMENDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUh0ejRDQUFHb3RBQUJIRGFVQklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHbkFTRVFETDBDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUkVoRUF5aUFRc0NRQ0FFSUFKSERRQkJxQUVoRUF5OEFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVDYWlFUUFrQURRQ0FFTFFBQUlBRkJ3cytBZ0FCcUxRQUFSdzJrQVNBQlFRSkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCcUFFaEVBeThBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRXNJUkFNb1FFTEFrQWdCQ0FDUncwQVFha0JJUkFNdXdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCR29oRUFKQUEwQWdCQzBBQUNBQlFjWFBnSUFBYWkwQUFFY05vd0VnQVVFRVJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYWtCSVJBTXV3SUxJQUJCQURZQ0FDQVFRUUZxSVFGQkt5RVFES0FCQ3dKQUlBUWdBa2NOQUVHcUFTRVFETG9DQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIS3o0Q0FBR290QUFCSERhSUJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR3FBU0VRRExvQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJRaEVBeWZBUXNDUUNBRUlBSkhEUUJCcXdFaEVBeTVBZ3NDUUFKQUFrQUNRQ0FFTFFBQVFiNS9hZzRQQUFFQ3BBR2tBYVFCcEFHa0FhUUJwQUdrQWFRQnBBR2tBUU9rQVFzZ0JFRUJhaUVFUVpNQklSQU1vZ0lMSUFSQkFXb2hCRUdVQVNFUURLRUNDeUFFUVFGcUlRUkJsUUVoRUF5Z0Fnc2dCRUVCYWlFRVFaWUJJUkFNbndJTEFrQWdCQ0FDUncwQVFhd0JJUkFNdUFJTElBUXRBQUJCeFFCSERaOEJJQVJCQVdvaEJBemdBUXNDUUNBRUlBSkhEUUJCclFFaEVBeTNBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQ2FpRVFBa0FEUUNBRUxRQUFJQUZCemMrQWdBQnFMUUFBUncyZkFTQUJRUUpHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnJRRWhFQXkzQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVPSVJBTW5BRUxBa0FnQkNBQ1J3MEFRYTRCSVJBTXRnSUxJQVF0QUFCQjBBQkhEWjBCSUFSQkFXb2hBVUVsSVJBTW13RUxBa0FnQkNBQ1J3MEFRYThCSVJBTXRRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQ0dvaEVBSkFBMEFnQkMwQUFDQUJRZERQZ0lBQWFpMEFBRWNOblFFZ0FVRUlSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWE4QklSQU10UUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJLaUVRREpvQkN3SkFJQVFnQWtjTkFFR3dBU0VRRExRQ0N3SkFBa0FnQkMwQUFFR3JmMm9PQ3dDZEFaMEJuUUdkQVowQm5RR2RBWjBCblFFQm5RRUxJQVJCQVdvaEJFR2FBU0VRREpzQ0N5QUVRUUZxSVFSQm13RWhFQXlhQWdzQ1FDQUVJQUpIRFFCQnNRRWhFQXl6QWdzQ1FBSkFJQVF0QUFCQnYzOXFEaFFBbkFHY0Fad0JuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BR2NBWndCQVp3QkN5QUVRUUZxSVFSQm1RRWhFQXlhQWdzZ0JFRUJhaUVFUVp3QklSQU1tUUlMQWtBZ0JDQUNSdzBBUWJJQklSQU1zZ0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkEyb2hFQUpBQTBBZ0JDMEFBQ0FCUWRuUGdJQUFhaTBBQUVjTm1nRWdBVUVEUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFiSUJJUkFNc2dJTElBQkJBRFlDQUNBUVFRRnFJUUZCSVNFUURKY0JDd0pBSUFRZ0FrY05BRUd6QVNFUURMRUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFacUlSQUNRQU5BSUFRdEFBQWdBVUhkejRDQUFHb3RBQUJIRFprQklBRkJCa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHekFTRVFETEVDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUm9oRUF5V0FRc0NRQ0FFSUFKSERRQkJ0QUVoRUF5d0Fnc0NRQUpBQWtBZ0JDMEFBRUc3ZjJvT0VRQ2FBWm9CbWdHYUFab0JtZ0dhQVpvQm1nRUJtZ0dhQVpvQm1nR2FBUUthQVFzZ0JFRUJhaUVFUVowQklSQU1tQUlMSUFSQkFXb2hCRUdlQVNFUURKY0NDeUFFUVFGcUlRUkJud0VoRUF5V0Fnc0NRQ0FFSUFKSERRQkJ0UUVoRUF5dkFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVGYWlFUUFrQURRQ0FFTFFBQUlBRkI1TStBZ0FCcUxRQUFSdzJYQVNBQlFRVkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCdFFFaEVBeXZBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRW9JUkFNbEFFTEFrQWdCQ0FDUncwQVFiWUJJUkFNcmdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBbW9oRUFKQUEwQWdCQzBBQUNBQlFlclBnSUFBYWkwQUFFY05sZ0VnQVVFQ1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYllCSVJBTXJnSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkJ5RVFESk1CQ3dKQUlBUWdBa2NOQUVHM0FTRVFESzBDQ3dKQUFrQWdCQzBBQUVHN2Yyb09EZ0NXQVpZQmxnR1dBWllCbGdHV0FaWUJsZ0dXQVpZQmxnRUJsZ0VMSUFSQkFXb2hCRUdoQVNFUURKUUNDeUFFUVFGcUlRUkJvZ0VoRUF5VEFnc0NRQ0FFSUFKSERRQkJ1QUVoRUF5c0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVDYWlFUUFrQURRQ0FFTFFBQUlBRkI3YytBZ0FCcUxRQUFSdzJVQVNBQlFRSkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCdUFFaEVBeXNBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRVNJUkFNa1FFTEFrQWdCQ0FDUncwQVFia0JJUkFNcXdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFmRFBnSUFBYWkwQUFFY05rd0VnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYmtCSVJBTXF3SUxJQUJCQURZQ0FDQVFRUUZxSVFGQklDRVFESkFCQ3dKQUlBUWdBa2NOQUVHNkFTRVFES29DQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRRnFJUkFDUUFOQUlBUXRBQUFnQVVIeXo0Q0FBR290QUFCSERaSUJJQUZCQVVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFRzZBU0VRREtvQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVE4aEVBeVBBUXNDUUNBRUlBSkhEUUJCdXdFaEVBeXBBZ3NDUUFKQUlBUXRBQUJCdDM5cURnY0FrZ0dTQVpJQmtnR1NBUUdTQVFzZ0JFRUJhaUVFUWFVQklSQU1rQUlMSUFSQkFXb2hCRUdtQVNFUURJOENDd0pBSUFRZ0FrY05BRUc4QVNFUURLZ0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFkcUlSQUNRQU5BSUFRdEFBQWdBVUgwejRDQUFHb3RBQUJIRFpBQklBRkJCMFlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHOEFTRVFES2dDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUnNoRUF5TkFRc0NRQ0FFSUFKSERRQkJ2UUVoRUF5bkFnc0NRQUpBQWtBZ0JDMEFBRUcrZjJvT0VnQ1JBWkVCa1FHUkFaRUJrUUdSQVpFQmtRRUJrUUdSQVpFQmtRR1JBWkVCQXBFQkN5QUVRUUZxSVFSQnBBRWhFQXlQQWdzZ0JFRUJhaUVFUWFjQklSQU1qZ0lMSUFSQkFXb2hCRUdvQVNFUURJMENDd0pBSUFRZ0FrY05BRUcrQVNFUURLWUNDeUFFTFFBQVFjNEFSdzJOQVNBRVFRRnFJUVFNendFTEFrQWdCQ0FDUncwQVFiOEJJUkFNcFFJTEFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQkMwQUFFRy9mMm9PRlFBQkFnT2NBUVFGQnB3Qm5BR2NBUWNJQ1FvTG5BRU1EUTRQbkFFTElBUkJBV29oQVVIb0FDRVFESm9DQ3lBRVFRRnFJUUZCNlFBaEVBeVpBZ3NnQkVFQmFpRUJRZTRBSVJBTW1BSUxJQVJCQVdvaEFVSHlBQ0VRREpjQ0N5QUVRUUZxSVFGQjh3QWhFQXlXQWdzZ0JFRUJhaUVCUWZZQUlSQU1sUUlMSUFSQkFXb2hBVUgzQUNFUURKUUNDeUFFUVFGcUlRRkIrZ0FoRUF5VEFnc2dCRUVCYWlFRVFZTUJJUkFNa2dJTElBUkJBV29oQkVHRUFTRVFESkVDQ3lBRVFRRnFJUVJCaFFFaEVBeVFBZ3NnQkVFQmFpRUVRWklCSVJBTWp3SUxJQVJCQVdvaEJFR1lBU0VRREk0Q0N5QUVRUUZxSVFSQm9BRWhFQXlOQWdzZ0JFRUJhaUVFUWFNQklSQU1qQUlMSUFSQkFXb2hCRUdxQVNFUURJc0NDd0pBSUFRZ0FrWU5BQ0FBUVpDQWdJQUFOZ0lJSUFBZ0JEWUNCRUdyQVNFUURJc0NDMEhBQVNFUURLTUNDeUFBSUFVZ0FoQ3FnSUNBQUNJQkRZc0JJQVVoQVF4Y0N3SkFJQVlnQWtZTkFDQUdRUUZxSVFVTWpRRUxRY0lCSVJBTW9RSUxBMEFDUUNBUUxRQUFRWFpxRGdTTUFRQUFqd0VBQ3lBUVFRRnFJaEFnQWtjTkFBdEJ3d0VoRUF5Z0Fnc0NRQ0FISUFKR0RRQWdBRUdSZ0lDQUFEWUNDQ0FBSUFjMkFnUWdCeUVCUVFFaEVBeUhBZ3RCeEFFaEVBeWZBZ3NDUUNBSElBSkhEUUJCeFFFaEVBeWZBZ3NDUUFKQUlBY3RBQUJCZG1vT0JBSE9BYzRCQU00QkN5QUhRUUZxSVFZTWpRRUxJQWRCQVdvaEJReUpBUXNDUUNBSElBSkhEUUJCeGdFaEVBeWVBZ3NDUUFKQUlBY3RBQUJCZG1vT0Z3R1BBWThCQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVFDUEFRc2dCMEVCYWlFSEMwR3dBU0VRRElRQ0N3SkFJQWdnQWtjTkFFSElBU0VRREowQ0N5QUlMUUFBUVNCSERZMEJJQUJCQURzQk1pQUlRUUZxSVFGQnN3RWhFQXlEQWdzZ0FTRVhBa0FEUUNBWElnY2dBa1lOQVNBSExRQUFRVkJxUWY4QmNTSVFRUXBQRGN3QkFrQWdBQzhCTWlJVVFaa3pTdzBBSUFBZ0ZFRUtiQ0lVT3dFeUlCQkIvLzhEY3lBVVFmNy9BM0ZKRFFBZ0IwRUJhaUVYSUFBZ0ZDQVFhaUlRT3dFeUlCQkIvLzhEY1VIb0Iwa05BUXNMUVFBaEVDQUFRUUEyQWh3Z0FFSEJpWUNBQURZQ0VDQUFRUTAyQWd3Z0FDQUhRUUZxTmdJVURKd0NDMEhIQVNFUURKc0NDeUFBSUFnZ0FoQ3VnSUNBQUNJUVJRM0tBU0FRUVJWSERZd0JJQUJCeUFFMkFod2dBQ0FJTmdJVUlBQkJ5WmVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXlhQWdzQ1FDQUpJQUpIRFFCQnpBRWhFQXlhQWd0QkFDRVVRUUVoRjBFQklSWkJBQ0VRQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFrdEFBQkJVR29PQ3BZQmxRRUFBUUlEQkFVR0NKY0JDMEVDSVJBTUJndEJBeUVRREFVTFFRUWhFQXdFQzBFRklSQU1Bd3RCQmlFUURBSUxRUWNoRUF3QkMwRUlJUkFMUVFBaEYwRUFJUlpCQUNFVURJNEJDMEVKSVJCQkFTRVVRUUFoRjBFQUlSWU1qUUVMQWtBZ0NpQUNSdzBBUWM0QklSQU1tUUlMSUFvdEFBQkJMa2NOamdFZ0NrRUJhaUVKRE1vQkN5QUxJQUpIRFk0QlFkQUJJUkFNbHdJTEFrQWdDeUFDUmcwQUlBQkJqb0NBZ0FBMkFnZ2dBQ0FMTmdJRVFiY0JJUkFNL2dFTFFkRUJJUkFNbGdJTEFrQWdCQ0FDUncwQVFkSUJJUkFNbGdJTElBSWdCR3NnQUNnQ0FDSVFhaUVVSUFRZ0VHdEJCR29oQ3dOQUlBUXRBQUFnRUVIOHo0Q0FBR290QUFCSERZNEJJQkJCQkVZTjZRRWdFRUVCYWlFUUlBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkIwZ0VoRUF5VkFnc2dBQ0FNSUFJUXJJQ0FnQUFpQVEyTkFTQU1JUUVNdUFFTEFrQWdCQ0FDUncwQVFkUUJJUkFNbEFJTElBSWdCR3NnQUNnQ0FDSVFhaUVVSUFRZ0VHdEJBV29oREFOQUlBUXRBQUFnRUVHQjBJQ0FBR290QUFCSERZOEJJQkJCQVVZTmpnRWdFRUVCYWlFUUlBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkIxQUVoRUF5VEFnc0NRQ0FFSUFKSERRQkIxZ0VoRUF5VEFnc2dBaUFFYXlBQUtBSUFJaEJxSVJRZ0JDQVFhMEVDYWlFTEEwQWdCQzBBQUNBUVFZUFFnSUFBYWkwQUFFY05qZ0VnRUVFQ1JnMlFBU0FRUVFGcUlSQWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUhXQVNFUURKSUNDd0pBSUFRZ0FrY05BRUhYQVNFUURKSUNDd0pBQWtBZ0JDMEFBRUc3ZjJvT0VBQ1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJBWThCQ3lBRVFRRnFJUVJCdXdFaEVBejVBUXNnQkVFQmFpRUVRYndCSVJBTStBRUxBa0FnQkNBQ1J3MEFRZGdCSVJBTWtRSUxJQVF0QUFCQnlBQkhEWXdCSUFSQkFXb2hCQXpFQVFzQ1FDQUVJQUpHRFFBZ0FFR1FnSUNBQURZQ0NDQUFJQVEyQWdSQnZnRWhFQXozQVF0QjJRRWhFQXlQQWdzQ1FDQUVJQUpIRFFCQjJnRWhFQXlQQWdzZ0JDMEFBRUhJQUVZTnd3RWdBRUVCT2dBb0RMa0JDeUFBUVFJNkFDOGdBQ0FFSUFJUXBvQ0FnQUFpRUEyTkFVSENBU0VRRFBRQkN5QUFMUUFvUVg5cURnSzNBYmtCdUFFTEEwQUNRQ0FFTFFBQVFYWnFEZ1FBamdHT0FRQ09BUXNnQkVFQmFpSUVJQUpIRFFBTFFkMEJJUkFNaXdJTElBQkJBRG9BTHlBQUxRQXRRUVJ4UlEyRUFnc2dBRUVBT2dBdklBQkJBVG9BTkNBQklRRU1qQUVMSUJCQkZVWU4yZ0VnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYWVPZ0lBQU5nSVFJQUJCRWpZQ0RFRUFJUkFNaUFJTEFrQWdBQ0FRSUFJUXRJQ0FnQUFpQkEwQUlCQWhBUXlCQWdzQ1FDQUVRUlZIRFFBZ0FFRUROZ0ljSUFBZ0VEWUNGQ0FBUWJDWWdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTWlBSUxJQUJCQURZQ0hDQUFJQkEyQWhRZ0FFR25qb0NBQURZQ0VDQUFRUkkyQWd4QkFDRVFESWNDQ3lBUVFSVkdEZFlCSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhhallDQUFEWUNFQ0FBUVJRMkFneEJBQ0VRRElZQ0N5QUFLQUlFSVJjZ0FFRUFOZ0lFSUJBZ0VhZHFJaFloQVNBQUlCY2dFQ0FXSUJRYkloQVF0WUNBZ0FBaUZFVU5qUUVnQUVFSE5nSWNJQUFnRURZQ0ZDQUFJQlEyQWd4QkFDRVFESVVDQ3lBQUlBQXZBVEJCZ0FGeU93RXdJQUVoQVF0QktpRVFET29CQ3lBUVFSVkdEZEVCSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdEaklDQUFEWUNFQ0FBUVJNMkFneEJBQ0VRRElJQ0N5QVFRUlZHRGM4QklBQkJBRFlDSENBQUlBRTJBaFFnQUVHYWo0Q0FBRFlDRUNBQVFTSTJBZ3hCQUNFUURJRUNDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXQ0Q0FnQUFpRUEwQUlBRkJBV29oQVF5TkFRc2dBRUVNTmdJY0lBQWdFRFlDRENBQUlBRkJBV28yQWhSQkFDRVFESUFDQ3lBUVFSVkdEY3dCSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdhajRDQUFEWUNFQ0FBUVNJMkFneEJBQ0VRRFA4QkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRdDRDQWdBQWlFQTBBSUFGQkFXb2hBUXlNQVFzZ0FFRU5OZ0ljSUFBZ0VEWUNEQ0FBSUFGQkFXbzJBaFJCQUNFUURQNEJDeUFRUVJWR0Rja0JJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSEdqSUNBQURZQ0VDQUFRU00yQWd4QkFDRVFEUDBCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVF1WUNBZ0FBaUVBMEFJQUZCQVdvaEFReUxBUXNnQUVFT05nSWNJQUFnRURZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFB3QkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQndKV0FnQUEyQWhBZ0FFRUNOZ0lNUVFBaEVBejdBUXNnRUVFVlJnM0ZBU0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJ4b3lBZ0FBMkFoQWdBRUVqTmdJTVFRQWhFQXo2QVFzZ0FFRVFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRRFBrQkN5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRdVlDQWdBQWlCQTBBSUFGQkFXb2hBUXp4QVFzZ0FFRVJOZ0ljSUFBZ0JEWUNEQ0FBSUFGQkFXbzJBaFJCQUNFUURQZ0JDeUFRUVJWR0RjRUJJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSEdqSUNBQURZQ0VDQUFRU00yQWd4QkFDRVFEUGNCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVF1WUNBZ0FBaUVBMEFJQUZCQVdvaEFReUlBUXNnQUVFVE5nSWNJQUFnRURZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFBZQkN5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRdVlDQWdBQWlCQTBBSUFGQkFXb2hBUXp0QVFzZ0FFRVVOZ0ljSUFBZ0JEWUNEQ0FBSUFGQkFXbzJBaFJCQUNFUURQVUJDeUFRUVJWR0RiMEJJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR2FqNENBQURZQ0VDQUFRU0kyQWd4QkFDRVFEUFFCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVF0NENBZ0FBaUVBMEFJQUZCQVdvaEFReUdBUXNnQUVFV05nSWNJQUFnRURZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFBNQkN5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRdDRDQWdBQWlCQTBBSUFGQkFXb2hBUXpwQVFzZ0FFRVhOZ0ljSUFBZ0JEWUNEQ0FBSUFGQkFXbzJBaFJCQUNFUURQSUJDeUFBUVFBMkFod2dBQ0FCTmdJVUlBQkJ6Wk9BZ0FBMkFoQWdBRUVNTmdJTVFRQWhFQXp4QVF0Q0FTRVJDeUFRUVFGcUlRRUNRQ0FBS1FNZ0loSkMvLy8vLy8vLy8vOFBWZzBBSUFBZ0VrSUVoaUFSaERjRElDQUJJUUVNaEFFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVHdGlZQ0FBRFlDRUNBQVFRdzJBZ3hCQUNFUURPOEJDeUFBUVFBMkFod2dBQ0FRTmdJVUlBQkJ6Wk9BZ0FBMkFoQWdBRUVNTmdJTVFRQWhFQXp1QVFzZ0FDZ0NCQ0VYSUFCQkFEWUNCQ0FRSUJHbmFpSVdJUUVnQUNBWElCQWdGaUFVR3lJUUVMV0FnSUFBSWhSRkRYTWdBRUVGTmdJY0lBQWdFRFlDRkNBQUlCUTJBZ3hCQUNFUURPMEJDeUFBUVFBMkFod2dBQ0FRTmdJVUlBQkJxcHlBZ0FBMkFoQWdBRUVQTmdJTVFRQWhFQXpzQVFzZ0FDQVFJQUlRdElDQWdBQWlBUTBCSUJBaEFRdEJEaUVRRE5FQkN3SkFJQUZCRlVjTkFDQUFRUUkyQWh3Z0FDQVFOZ0lVSUFCQnNKaUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBenFBUXNnQUVFQU5nSWNJQUFnRURZQ0ZDQUFRYWVPZ0lBQU5nSVFJQUJCRWpZQ0RFRUFJUkFNNlFFTElBRkJBV29oRUFKQUlBQXZBVEFpQVVHQUFYRkZEUUFDUUNBQUlCQWdBaEM3Z0lDQUFDSUJEUUFnRUNFQkRIQUxJQUZCRlVjTnVnRWdBRUVGTmdJY0lBQWdFRFlDRkNBQVFmbVhnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU02UUVMQWtBZ0FVR2dCSEZCb0FSSERRQWdBQzBBTFVFQ2NRMEFJQUJCQURZQ0hDQUFJQkEyQWhRZ0FFR1drNENBQURZQ0VDQUFRUVEyQWd4QkFDRVFET2tCQ3lBQUlCQWdBaEM5Z0lDQUFCb2dFQ0VCQWtBQ1FBSkFBa0FDUUNBQUlCQWdBaEN6Z0lDQUFBNFdBZ0VBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQXdRTElBQkJBVG9BTGdzZ0FDQUFMd0V3UWNBQWNqc0JNQ0FRSVFFTFFTWWhFQXpSQVFzZ0FFRWpOZ0ljSUFBZ0VEWUNGQ0FBUWFXV2dJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTTZRRUxJQUJCQURZQ0hDQUFJQkEyQWhRZ0FFSFZpNENBQURZQ0VDQUFRUkUyQWd4QkFDRVFET2dCQ3lBQUxRQXRRUUZ4UlEwQlFjTUJJUkFNemdFTEFrQWdEU0FDUmcwQUEwQUNRQ0FOTFFBQVFTQkdEUUFnRFNFQkRNUUJDeUFOUVFGcUlnMGdBa2NOQUF0QkpTRVFET2NCQzBFbElSQU01Z0VMSUFBb0FnUWhCQ0FBUVFBMkFnUWdBQ0FFSUEwUXI0Q0FnQUFpQkVVTnJRRWdBRUVtTmdJY0lBQWdCRFlDRENBQUlBMUJBV28yQWhSQkFDRVFET1VCQ3lBUVFSVkdEYXNCSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUg5allDQUFEWUNFQ0FBUVIwMkFneEJBQ0VRRE9RQkN5QUFRU2MyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTTR3RUxJQkFoQVVFQklSUUNRQUpBQWtBQ1FBSkFBa0FDUUNBQUxRQXNRWDVxRGdjR0JRVURBUUlBQlFzZ0FDQUFMd0V3UVFoeU93RXdEQU1MUVFJaEZBd0JDMEVFSVJRTElBQkJBVG9BTENBQUlBQXZBVEFnRkhJN0FUQUxJQkFoQVF0Qkt5RVFETW9CQ3lBQVFRQTJBaHdnQUNBUU5nSVVJQUJCcTVLQWdBQTJBaEFnQUVFTE5nSU1RUUFoRUF6aUFRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFlR1BnSUFBTmdJUUlBQkJDallDREVFQUlSQU00UUVMSUFCQkFEb0FMQ0FRSVFFTXZRRUxJQkFoQVVFQklSUUNRQUpBQWtBQ1FBSkFJQUF0QUN4QmUyb09CQU1CQWdBRkN5QUFJQUF2QVRCQkNISTdBVEFNQXd0QkFpRVVEQUVMUVFRaEZBc2dBRUVCT2dBc0lBQWdBQzhCTUNBVWNqc0JNQXNnRUNFQkMwRXBJUkFNeFFFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVId2xJQ0FBRFlDRUNBQVFRTTJBZ3hCQUNFUUROMEJDd0pBSUE0dEFBQkJEVWNOQUNBQUtBSUVJUUVnQUVFQU5nSUVBa0FnQUNBQklBNFFzWUNBZ0FBaUFRMEFJQTVCQVdvaEFReDFDeUFBUVN3MkFod2dBQ0FCTmdJTUlBQWdEa0VCYWpZQ0ZFRUFJUkFNM1FFTElBQXRBQzFCQVhGRkRRRkJ4QUVoRUF6REFRc0NRQ0FPSUFKSERRQkJMU0VRRE53QkN3SkFBa0FEUUFKQUlBNHRBQUJCZG1vT0JBSUFBQU1BQ3lBT1FRRnFJZzRnQWtjTkFBdEJMU0VRRE4wQkN5QUFLQUlFSVFFZ0FFRUFOZ0lFQWtBZ0FDQUJJQTRRc1lDQWdBQWlBUTBBSUE0aEFReDBDeUFBUVN3MkFod2dBQ0FPTmdJVUlBQWdBVFlDREVFQUlSQU0zQUVMSUFBb0FnUWhBU0FBUVFBMkFnUUNRQ0FBSUFFZ0RoQ3hnSUNBQUNJQkRRQWdEa0VCYWlFQkRITUxJQUJCTERZQ0hDQUFJQUUyQWd3Z0FDQU9RUUZxTmdJVVFRQWhFQXpiQVFzZ0FDZ0NCQ0VFSUFCQkFEWUNCQ0FBSUFRZ0RoQ3hnSUNBQUNJRURhQUJJQTRoQVF6T0FRc2dFRUVzUncwQklBRkJBV29oRUVFQklRRUNRQUpBQWtBQ1FBSkFJQUF0QUN4QmUyb09CQU1CQWdRQUN5QVFJUUVNQkF0QkFpRUJEQUVMUVFRaEFRc2dBRUVCT2dBc0lBQWdBQzhCTUNBQmNqc0JNQ0FRSVFFTUFRc2dBQ0FBTHdFd1FRaHlPd0V3SUJBaEFRdEJPU0VRREw4QkN5QUFRUUE2QUN3Z0FTRUJDMEUwSVJBTXZRRUxJQUFnQUM4Qk1FRWdjanNCTUNBQklRRU1BZ3NnQUNnQ0JDRUVJQUJCQURZQ0JBSkFJQUFnQkNBQkVMR0FnSUFBSWdRTkFDQUJJUUVNeHdFTElBQkJOellDSENBQUlBRTJBaFFnQUNBRU5nSU1RUUFoRUF6VUFRc2dBRUVJT2dBc0lBRWhBUXRCTUNFUURMa0JDd0pBSUFBdEFDaEJBVVlOQUNBQklRRU1CQXNnQUMwQUxVRUljVVVOa3dFZ0FTRUJEQU1MSUFBdEFEQkJJSEVObEFGQnhRRWhFQXkzQVFzQ1FDQVBJQUpHRFFBQ1FBTkFBa0FnRHkwQUFFRlFhaUlCUWY4QmNVRUtTUTBBSUE4aEFVRTFJUkFNdWdFTElBQXBBeUFpRVVLWnMrYk1tYlBtekJsV0RRRWdBQ0FSUWdwK0loRTNBeUFnRVNBQnJVTC9BWU1pRWtKL2hWWU5BU0FBSUJFZ0VudzNBeUFnRDBFQmFpSVBJQUpIRFFBTFFUa2hFQXpSQVFzZ0FDZ0NCQ0VDSUFCQkFEWUNCQ0FBSUFJZ0QwRUJhaUlFRUxHQWdJQUFJZ0lObFFFZ0JDRUJETU1CQzBFNUlSQU16d0VMQWtBZ0FDOEJNQ0lCUVFoeFJRMEFJQUF0QUNoQkFVY05BQ0FBTFFBdFFRaHhSUTJRQVFzZ0FDQUJRZmY3QTNGQmdBUnlPd0V3SUE4aEFRdEJOeUVRRExRQkN5QUFJQUF2QVRCQkVISTdBVEFNcXdFTElCQkJGVVlOaXdFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWZDT2dJQUFOZ0lRSUFCQkhEWUNERUVBSVJBTXl3RUxJQUJCd3dBMkFod2dBQ0FCTmdJTUlBQWdEVUVCYWpZQ0ZFRUFJUkFNeWdFTEFrQWdBUzBBQUVFNlJ3MEFJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDdmdJQ0FBQ0lRRFFBZ0FVRUJhaUVCREdNTElBQkJ3d0EyQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU15Z0VMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUd4a1lDQUFEWUNFQ0FBUVFvMkFneEJBQ0VRRE1rQkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQm9KbUFnQUEyQWhBZ0FFRWVOZ0lNUVFBaEVBeklBUXNnQUVFQU5nSUFDeUFBUVlBU093RXFJQUFnRjBFQmFpSUJJQUlRcUlDQWdBQWlFQTBCSUFFaEFRdEJ4d0FoRUF5c0FRc2dFRUVWUncyREFTQUFRZEVBTmdJY0lBQWdBVFlDRkNBQVFlT1hnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU14QUVMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREY0TElBQkIwZ0EyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXd3RUxJQUJCQURZQ0hDQUFJQlEyQWhRZ0FFSEJxSUNBQURZQ0VDQUFRUWMyQWd3Z0FFRUFOZ0lBUVFBaEVBekNBUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNWFFzZ0FFSFRBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF6QkFRdEJBQ0VRSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdBa1lDQUFEWUNFQ0FBUVFrMkFnd013QUVMSUJCQkZVWU5mU0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJsSTJBZ0FBMkFoQWdBRUVoTmdJTVFRQWhFQXkvQVF0QkFTRVdRUUFoRjBFQUlSUkJBU0VRQ3lBQUlCQTZBQ3NnQVVFQmFpRUJBa0FDUUNBQUxRQXRRUkJ4RFFBQ1FBSkFBa0FnQUMwQUtnNERBUUFDQkFzZ0ZrVU5Bd3dDQ3lBVURRRU1BZ3NnRjBVTkFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUsyQWdJQUFJaEFOQUNBQklRRU1YQXNnQUVIWUFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXkrQVFzZ0FDZ0NCQ0VFSUFCQkFEWUNCQUpBSUFBZ0JDQUJFSzJBZ0lBQUlnUU5BQ0FCSVFFTXJRRUxJQUJCMlFBMkFod2dBQ0FCTmdJVUlBQWdCRFlDREVFQUlSQU12UUVMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQ3RnSUNBQUNJRURRQWdBU0VCREtzQkN5QUFRZG9BTmdJY0lBQWdBVFlDRkNBQUlBUTJBZ3hCQUNFUURMd0JDeUFBS0FJRUlRUWdBRUVBTmdJRUFrQWdBQ0FFSUFFUXJZQ0FnQUFpQkEwQUlBRWhBUXlwQVFzZ0FFSGNBRFlDSENBQUlBRTJBaFFnQUNBRU5nSU1RUUFoRUF5N0FRc0NRQ0FCTFFBQVFWQnFJaEJCL3dGeFFRcFBEUUFnQUNBUU9nQXFJQUZCQVdvaEFVSFBBQ0VRREtJQkN5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRcllDQWdBQWlCQTBBSUFFaEFReW5BUXNnQUVIZUFEWUNIQ0FBSUFFMkFoUWdBQ0FFTmdJTVFRQWhFQXk2QVFzZ0FFRUFOZ0lBSUJkQkFXb2hBUUpBSUFBdEFDbEJJMDhOQUNBQklRRU1XUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZE9KZ0lBQU5nSVFJQUJCQ0RZQ0RFRUFJUkFNdVFFTElBQkJBRFlDQUF0QkFDRVFJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR1FzNENBQURZQ0VDQUFRUWcyQWd3TXR3RUxJQUJCQURZQ0FDQVhRUUZxSVFFQ1FDQUFMUUFwUVNGSERRQWdBU0VCREZZTElBQkJBRFlDSENBQUlBRTJBaFFnQUVHYmlvQ0FBRFlDRUNBQVFRZzJBZ3hCQUNFUURMWUJDeUFBUVFBMkFnQWdGMEVCYWlFQkFrQWdBQzBBS1NJUVFWMXFRUXRQRFFBZ0FTRUJERlVMQWtBZ0VFRUdTdzBBUVFFZ0VIUkJ5Z0J4UlEwQUlBRWhBUXhWQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFmZUpnSUFBTmdJUUlBQkJDRFlDREF5MUFRc2dFRUVWUmcxeElBQkJBRFlDSENBQUlBRTJBaFFnQUVHNWpZQ0FBRFlDRUNBQVFSbzJBZ3hCQUNFUURMUUJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhVQ3lBQVFlVUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRRExNQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReE5DeUFBUWRJQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETElCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4TkN5QUFRZE1BTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURMRUJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhSQ3lBQVFlVUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRRExBQkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnhvcUFnQUEyQWhBZ0FFRUhOZ0lNUVFBaEVBeXZBUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNU1FzZ0FFSFNBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF5dUFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1TUXNnQUVIVEFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXl0QVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVRRc2dBRUhsQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeXNBUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZHlJZ0lBQU5nSVFJQUJCQnpZQ0RFRUFJUkFNcXdFTElCQkJQMGNOQVNBQlFRRnFJUUVMUVFVaEVBeVFBUXRCQUNFUUlBQkJBRFlDSENBQUlBRTJBaFFnQUVIOWtvQ0FBRFlDRUNBQVFRYzJBZ3dNcUFFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRFSUxJQUJCMGdBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1wd0VMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREVJTElBQkIwd0EyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXBnRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERVlMSUFCQjVRQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNcFFFTElBQW9BZ1FoQVNBQVFRQTJBZ1FDUUNBQUlBRWdGQkNuZ0lDQUFDSUJEUUFnRkNFQkREOExJQUJCMGdBMkFod2dBQ0FVTmdJVUlBQWdBVFlDREVFQUlSQU1wQUVMSUFBb0FnUWhBU0FBUVFBMkFnUUNRQ0FBSUFFZ0ZCQ25nSUNBQUNJQkRRQWdGQ0VCREQ4TElBQkIwd0EyQWh3Z0FDQVVOZ0lVSUFBZ0FUWUNERUVBSVJBTW93RUxJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRkJDbmdJQ0FBQ0lCRFFBZ0ZDRUJERU1MSUFCQjVRQTJBaHdnQUNBVU5nSVVJQUFnQVRZQ0RFRUFJUkFNb2dFTElBQkJBRFlDSENBQUlCUTJBaFFnQUVIRGo0Q0FBRFlDRUNBQVFRYzJBZ3hCQUNFUURLRUJDeUFBUVFBMkFod2dBQ0FCTmdJVUlBQkJ3NCtBZ0FBMkFoQWdBRUVITmdJTVFRQWhFQXlnQVF0QkFDRVFJQUJCQURZQ0hDQUFJQlEyQWhRZ0FFR01uSUNBQURZQ0VDQUFRUWMyQWd3TW53RUxJQUJCQURZQ0hDQUFJQlEyQWhRZ0FFR01uSUNBQURZQ0VDQUFRUWMyQWd4QkFDRVFESjRCQ3lBQVFRQTJBaHdnQUNBVU5nSVVJQUJCL3BHQWdBQTJBaEFnQUVFSE5nSU1RUUFoRUF5ZEFRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFZNmJnSUFBTmdJUUlBQkJCallDREVFQUlSQU1uQUVMSUJCQkZVWU5WeUFBUVFBMkFod2dBQ0FCTmdJVUlBQkJ6STZBZ0FBMkFoQWdBRUVnTmdJTVFRQWhFQXliQVFzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVrSVJBTElBQWdFRG9BS1NBQUtBSUVJUkFnQUVFQU5nSUVJQUFnRUNBQkVLdUFnSUFBSWhBTlZDQUJJUUVNUGdzZ0FFRUFOZ0lBQzBFQUlSQWdBRUVBTmdJY0lBQWdCRFlDRkNBQVFmR2JnSUFBTmdJUUlBQkJCallDREF5WEFRc2dBVUVWUmcxUUlBQkJBRFlDSENBQUlBVTJBaFFnQUVId2pJQ0FBRFlDRUNBQVFSczJBZ3hCQUNFUURKWUJDeUFBS0FJRUlRVWdBRUVBTmdJRUlBQWdCU0FRRUttQWdJQUFJZ1VOQVNBUVFRRnFJUVVMUWEwQklSQU1ld3NnQUVIQkFUWUNIQ0FBSUFVMkFnd2dBQ0FRUVFGcU5nSVVRUUFoRUF5VEFRc2dBQ2dDQkNFR0lBQkJBRFlDQkNBQUlBWWdFQkNwZ0lDQUFDSUdEUUVnRUVFQmFpRUdDMEd1QVNFUURIZ0xJQUJCd2dFMkFod2dBQ0FHTmdJTUlBQWdFRUVCYWpZQ0ZFRUFJUkFNa0FFTElBQkJBRFlDSENBQUlBYzJBaFFnQUVHWGk0Q0FBRFlDRUNBQVFRMDJBZ3hCQUNFUURJOEJDeUFBUVFBMkFod2dBQ0FJTmdJVUlBQkI0NUNBZ0FBMkFoQWdBRUVKTmdJTVFRQWhFQXlPQVFzZ0FFRUFOZ0ljSUFBZ0NEWUNGQ0FBUVpTTmdJQUFOZ0lRSUFCQklUWUNERUVBSVJBTWpRRUxRUUVoRmtFQUlSZEJBQ0VVUVFFaEVBc2dBQ0FRT2dBcklBbEJBV29oQ0FKQUFrQWdBQzBBTFVFUWNRMEFBa0FDUUFKQUlBQXRBQ29PQXdFQUFnUUxJQlpGRFFNTUFnc2dGQTBCREFJTElCZEZEUUVMSUFBb0FnUWhFQ0FBUVFBMkFnUWdBQ0FRSUFnUXJZQ0FnQUFpRUVVTlBTQUFRY2tCTmdJY0lBQWdDRFlDRkNBQUlCQTJBZ3hCQUNFUURJd0JDeUFBS0FJRUlRUWdBRUVBTmdJRUlBQWdCQ0FJRUsyQWdJQUFJZ1JGRFhZZ0FFSEtBVFlDSENBQUlBZzJBaFFnQUNBRU5nSU1RUUFoRUF5TEFRc2dBQ2dDQkNFRUlBQkJBRFlDQkNBQUlBUWdDUkN0Z0lDQUFDSUVSUTEwSUFCQnl3RTJBaHdnQUNBSk5nSVVJQUFnQkRZQ0RFRUFJUkFNaWdFTElBQW9BZ1FoQkNBQVFRQTJBZ1FnQUNBRUlBb1FyWUNBZ0FBaUJFVU5jaUFBUWMwQk5nSWNJQUFnQ2pZQ0ZDQUFJQVEyQWd4QkFDRVFESWtCQ3dKQUlBc3RBQUJCVUdvaUVFSC9BWEZCQ2s4TkFDQUFJQkE2QUNvZ0MwRUJhaUVLUWJZQklSQU1jQXNnQUNnQ0JDRUVJQUJCQURZQ0JDQUFJQVFnQ3hDdGdJQ0FBQ0lFUlExd0lBQkJ6d0UyQWh3Z0FDQUxOZ0lVSUFBZ0JEWUNERUVBSVJBTWlBRUxJQUJCQURZQ0hDQUFJQVEyQWhRZ0FFR1FzNENBQURZQ0VDQUFRUWcyQWd3Z0FFRUFOZ0lBUVFBaEVBeUhBUXNnQVVFVlJnMC9JQUJCQURZQ0hDQUFJQXcyQWhRZ0FFSE1qb0NBQURZQ0VDQUFRU0EyQWd4QkFDRVFESVlCQ3lBQVFZRUVPd0VvSUFBb0FnUWhFQ0FBUWdBM0F3QWdBQ0FRSUF4QkFXb2lEQkNyZ0lDQUFDSVFSUTA0SUFCQjB3RTJBaHdnQUNBTU5nSVVJQUFnRURZQ0RFRUFJUkFNaFFFTElBQkJBRFlDQUF0QkFDRVFJQUJCQURZQ0hDQUFJQVEyQWhRZ0FFSFltNENBQURZQ0VDQUFRUWcyQWd3TWd3RUxJQUFvQWdRaEVDQUFRZ0EzQXdBZ0FDQVFJQXRCQVdvaUN4Q3JnSUNBQUNJUURRRkJ4Z0VoRUF4cEN5QUFRUUk2QUNnTVZRc2dBRUhWQVRZQ0hDQUFJQXMyQWhRZ0FDQVFOZ0lNUVFBaEVBeUFBUXNnRUVFVlJnMDNJQUJCQURZQ0hDQUFJQVEyQWhRZ0FFR2tqSUNBQURZQ0VDQUFRUkEyQWd4QkFDRVFESDhMSUFBdEFEUkJBVWNOTkNBQUlBUWdBaEM4Z0lDQUFDSVFSUTAwSUJCQkZVY05OU0FBUWR3Qk5nSWNJQUFnQkRZQ0ZDQUFRZFdXZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNZmd0QkFDRVFJQUJCQURZQ0hDQUFRYStMZ0lBQU5nSVFJQUJCQWpZQ0RDQUFJQlJCQVdvMkFoUU1mUXRCQUNFUURHTUxRUUloRUF4aUMwRU5JUkFNWVF0QkR5RVFER0FMUVNVaEVBeGZDMEVUSVJBTVhndEJGU0VRREYwTFFSWWhFQXhjQzBFWElSQU1Xd3RCR0NFUURGb0xRUmtoRUF4WkMwRWFJUkFNV0F0Qkd5RVFERmNMUVJ3aEVBeFdDMEVkSVJBTVZRdEJIeUVRREZRTFFTRWhFQXhUQzBFaklSQU1VZ3RCeGdBaEVBeFJDMEV1SVJBTVVBdEJMeUVRREU4TFFUc2hFQXhPQzBFOUlSQU1UUXRCeUFBaEVBeE1DMEhKQUNFUURFc0xRY3NBSVJBTVNndEJ6QUFoRUF4SkMwSE9BQ0VRREVnTFFkRUFJUkFNUnd0QjFRQWhFQXhHQzBIWUFDRVFERVVMUWRrQUlSQU1SQXRCMndBaEVBeERDMEhrQUNFUURFSUxRZVVBSVJBTVFRdEI4UUFoRUF4QUMwSDBBQ0VRREQ4TFFZMEJJUkFNUGd0Qmx3RWhFQXc5QzBHcEFTRVFERHdMUWF3QklSQU1Pd3RCd0FFaEVBdzZDMEc1QVNFUUREa0xRYThCSVJBTU9BdEJzUUVoRUF3M0MwR3lBU0VRRERZTFFiUUJJUkFNTlF0QnRRRWhFQXcwQzBHNkFTRVFERE1MUWIwQklSQU1NZ3RCdndFaEVBd3hDMEhCQVNFUUREQUxJQUJCQURZQ0hDQUFJQVEyQWhRZ0FFSHBpNENBQURZQ0VDQUFRUjgyQWd4QkFDRVFERWdMSUFCQjJ3RTJBaHdnQUNBRU5nSVVJQUJCK3BhQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF4SEN5QUFRZmdBTmdJY0lBQWdERFlDRkNBQVFjcVlnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1SZ3NnQUVIUkFEWUNIQ0FBSUFVMkFoUWdBRUd3bDRDQUFEWUNFQ0FBUVJVMkFneEJBQ0VRREVVTElBQkIrUUEyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTVJBc2dBRUg0QURZQ0hDQUFJQUUyQWhRZ0FFSEttSUNBQURZQ0VDQUFRUlUyQWd4QkFDRVFERU1MSUFCQjVBQTJBaHdnQUNBQk5nSVVJQUJCNDVlQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF4Q0N5QUFRZGNBTmdJY0lBQWdBVFlDRkNBQVFjbVhnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1RUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYm1OZ0lBQU5nSVFJQUJCR2pZQ0RFRUFJUkFNUUFzZ0FFSENBRFlDSENBQUlBRTJBaFFnQUVIam1JQ0FBRFlDRUNBQVFSVTJBZ3hCQUNFUUREOExJQUJCQURZQ0JDQUFJQThnRHhDeGdJQ0FBQ0lFUlEwQklBQkJPallDSENBQUlBUTJBZ3dnQUNBUFFRRnFOZ0lVUVFBaEVBdytDeUFBS0FJRUlRUWdBRUVBTmdJRUFrQWdBQ0FFSUFFUXNZQ0FnQUFpQkVVTkFDQUFRVHMyQWh3Z0FDQUVOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU1QZ3NnQVVFQmFpRUJEQzBMSUE5QkFXb2hBUXd0Q3lBQVFRQTJBaHdnQUNBUE5nSVVJQUJCNUpLQWdBQTJBaEFnQUVFRU5nSU1RUUFoRUF3N0N5QUFRVFkyQWh3Z0FDQUVOZ0lVSUFBZ0FqWUNERUVBSVJBTU9nc2dBRUV1TmdJY0lBQWdEallDRkNBQUlBUTJBZ3hCQUNFUUREa0xJQUJCMEFBMkFod2dBQ0FCTmdJVUlBQkJrWmlBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXc0Q3lBTlFRRnFJUUVNTEFzZ0FFRVZOZ0ljSUFBZ0FUWUNGQ0FBUVlLWmdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTU5nc2dBRUViTmdJY0lBQWdBVFlDRkNBQVFaR1hnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1OUXNnQUVFUE5nSWNJQUFnQVRZQ0ZDQUFRWkdYZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTkFzZ0FFRUxOZ0ljSUFBZ0FUWUNGQ0FBUVpHWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTU13c2dBRUVhTmdJY0lBQWdBVFlDRkNBQVFZS1pnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1NZ3NnQUVFTE5nSWNJQUFnQVRZQ0ZDQUFRWUtaZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTVFzZ0FFRUtOZ0ljSUFBZ0FUWUNGQ0FBUWVTV2dJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTU1Bc2dBRUVlTmdJY0lBQWdBVFlDRkNBQVFmbVhnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1Md3NnQUVFQU5nSWNJQUFnRURZQ0ZDQUFRZHFOZ0lBQU5nSVFJQUJCRkRZQ0RFRUFJUkFNTGdzZ0FFRUVOZ0ljSUFBZ0FUWUNGQ0FBUWJDWWdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTUxRc2dBRUVBTmdJQUlBdEJBV29oQ3d0QnVBRWhFQXdTQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRZlVBSVJBTUVRc2dBU0VCQWtBZ0FDMEFLVUVGUncwQVFlTUFJUkFNRVF0QjRnQWhFQXdRQzBFQUlSQWdBRUVBTmdJY0lBQkI1SkdBZ0FBMkFoQWdBRUVITmdJTUlBQWdGRUVCYWpZQ0ZBd29DeUFBUVFBMkFnQWdGMEVCYWlFQlFjQUFJUkFNRGd0QkFTRUJDeUFBSUFFNkFDd2dBRUVBTmdJQUlCZEJBV29oQVF0QktDRVFEQXNMSUFFaEFRdEJPQ0VRREFrTEFrQWdBU0lQSUFKR0RRQURRQUpBSUE4dEFBQkJnTDZBZ0FCcUxRQUFJZ0ZCQVVZTkFDQUJRUUpIRFFNZ0QwRUJhaUVCREFRTElBOUJBV29pRHlBQ1J3MEFDMEUrSVJBTUlndEJQaUVRRENFTElBQkJBRG9BTENBUElRRU1BUXRCQ3lFUURBWUxRVG9oRUF3RkN5QUJRUUZxSVFGQkxTRVFEQVFMSUFBZ0FUb0FMQ0FBUVFBMkFnQWdGa0VCYWlFQlFRd2hFQXdEQ3lBQVFRQTJBZ0FnRjBFQmFpRUJRUW9oRUF3Q0N5QUFRUUEyQWdBTElBQkJBRG9BTENBTklRRkJDU0VRREFBTEMwRUFJUkFnQUVFQU5nSWNJQUFnQ3pZQ0ZDQUFRYzJRZ0lBQU5nSVFJQUJCQ1RZQ0RBd1hDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0NqWUNGQ0FBUWVtS2dJQUFOZ0lRSUFCQkNUWUNEQXdXQzBFQUlSQWdBRUVBTmdJY0lBQWdDVFlDRkNBQVFiZVFnSUFBTmdJUUlBQkJDVFlDREF3VkMwRUFJUkFnQUVFQU5nSWNJQUFnQ0RZQ0ZDQUFRWnlSZ0lBQU5nSVFJQUJCQ1RZQ0RBd1VDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWMyUWdJQUFOZ0lRSUFCQkNUWUNEQXdUQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFlbUtnSUFBTmdJUUlBQkJDVFlDREF3U0MwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYmVRZ0lBQU5nSVFJQUJCQ1RZQ0RBd1JDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVp5UmdJQUFOZ0lRSUFCQkNUWUNEQXdRQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFaZVZnSUFBTmdJUUlBQkJEellDREF3UEMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWmVWZ0lBQU5nSVFJQUJCRHpZQ0RBd09DMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWNDU2dJQUFOZ0lRSUFCQkN6WUNEQXdOQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFaV0pnSUFBTmdJUUlBQkJDellDREF3TUMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZUdQZ0lBQU5nSVFJQUJCQ2pZQ0RBd0xDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWZ1UGdJQUFOZ0lRSUFCQkNqWUNEQXdLQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFmR1pnSUFBTmdJUUlBQkJBallDREF3SkMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRY1NVZ0lBQU5nSVFJQUJCQWpZQ0RBd0lDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWZLVmdJQUFOZ0lRSUFCQkFqWUNEQXdIQ3lBQVFRSTJBaHdnQUNBQk5nSVVJQUJCbkpxQWdBQTJBaEFnQUVFV05nSU1RUUFoRUF3R0MwRUJJUkFNQlF0QjFBQWhFQ0FCSWdRZ0FrWU5CQ0FEUVFocUlBQWdCQ0FDUWRqQ2dJQUFRUW9ReFlDQWdBQWdBeWdDRENFRUlBTW9BZ2dPQXdFRUFnQUxFTXFBZ0lBQUFBc2dBRUVBTmdJY0lBQkJ0WnFBZ0FBMkFoQWdBRUVYTmdJTUlBQWdCRUVCYWpZQ0ZFRUFJUkFNQWdzZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWNxYWdJQUFOZ0lRSUFCQkNUWUNERUVBSVJBTUFRc0NRQ0FCSWdRZ0FrY05BRUVpSVJBTUFRc2dBRUdKZ0lDQUFEWUNDQ0FBSUFRMkFnUkJJU0VRQ3lBRFFSQnFKSUNBZ0lBQUlCQUxyd0VCQW44Z0FTZ0NBQ0VHQWtBQ1FDQUNJQU5HRFFBZ0JDQUdhaUVFSUFZZ0Eyb2dBbXNoQnlBQ0lBWkJmM01nQldvaUJtb2hCUU5BQWtBZ0FpMEFBQ0FFTFFBQVJnMEFRUUloQkF3REN3SkFJQVlOQUVFQUlRUWdCU0VDREFNTElBWkJmMm9oQmlBRVFRRnFJUVFnQWtFQmFpSUNJQU5IRFFBTElBY2hCaUFESVFJTElBQkJBVFlDQUNBQklBWTJBZ0FnQUNBQ05nSUVEd3NnQVVFQU5nSUFJQUFnQkRZQ0FDQUFJQUkyQWdRTENnQWdBQkRIZ0lDQUFBdnlOZ0VMZnlPQWdJQ0FBRUVRYXlJQkpJQ0FnSUFBQWtCQkFDZ0NvTkNBZ0FBTkFFRUFFTXVBZ0lBQVFZRFVoSUFBYXlJQ1Fka0FTUTBBUVFBaEF3SkFRUUFvQXVEVGdJQUFJZ1FOQUVFQVFuODNBdXpUZ0lBQVFRQkNnSUNFZ0lDQXdBQTNBdVRUZ0lBQVFRQWdBVUVJYWtGd2NVSFlxdFdxQlhNaUJEWUM0Tk9BZ0FCQkFFRUFOZ0wwMDRDQUFFRUFRUUEyQXNUVGdJQUFDMEVBSUFJMkFzelRnSUFBUVFCQmdOU0VnQUEyQXNqVGdJQUFRUUJCZ05TRWdBQTJBcGpRZ0lBQVFRQWdCRFlDck5DQWdBQkJBRUYvTmdLbzBJQ0FBQU5BSUFOQnhOQ0FnQUJxSUFOQnVOQ0FnQUJxSWdRMkFnQWdCQ0FEUWJEUWdJQUFhaUlGTmdJQUlBTkJ2TkNBZ0FCcUlBVTJBZ0FnQTBITTBJQ0FBR29nQTBIQTBJQ0FBR29pQlRZQ0FDQUZJQVEyQWdBZ0EwSFUwSUNBQUdvZ0EwSEkwSUNBQUdvaUJEWUNBQ0FFSUFVMkFnQWdBMEhRMElDQUFHb2dCRFlDQUNBRFFTQnFJZ05CZ0FKSERRQUxRWURVaElBQVFYaEJnTlNFZ0FCclFROXhRUUJCZ05TRWdBQkJDR3BCRDNFYklnTnFJZ1JCQkdvZ0FrRklhaUlGSUFOcklnTkJBWEkyQWdCQkFFRUFLQUx3MDRDQUFEWUNwTkNBZ0FCQkFDQUROZ0tVMElDQUFFRUFJQVEyQXFEUWdJQUFRWURVaElBQUlBVnFRVGcyQWdRTEFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQjdBRkxEUUFDUUVFQUtBS0kwSUNBQUNJR1FSQWdBRUVUYWtGd2NTQUFRUXRKR3lJQ1FRTjJJZ1IySWdOQkEzRkZEUUFDUUFKQUlBTkJBWEVnQkhKQkFYTWlCVUVEZENJRVFiRFFnSUFBYWlJRElBUkJ1TkNBZ0FCcUtBSUFJZ1FvQWdnaUFrY05BRUVBSUFaQmZpQUZkM0UyQW9qUWdJQUFEQUVMSUFNZ0FqWUNDQ0FDSUFNMkFnd0xJQVJCQ0dvaEF5QUVJQVZCQTNRaUJVRURjallDQkNBRUlBVnFJZ1FnQkNnQ0JFRUJjallDQkF3TUN5QUNRUUFvQXBEUWdJQUFJZ2RORFFFQ1FDQURSUTBBQWtBQ1FDQURJQVIwUVFJZ0JIUWlBMEVBSUFOcmNuRWlBMEVBSUFOcmNVRi9haUlESUFOQkRIWkJFSEVpQTNZaUJFRUZka0VJY1NJRklBTnlJQVFnQlhZaUEwRUNka0VFY1NJRWNpQURJQVIySWdOQkFYWkJBbkVpQkhJZ0F5QUVkaUlEUVFGMlFRRnhJZ1J5SUFNZ0JIWnFJZ1JCQTNRaUEwR3cwSUNBQUdvaUJTQURRYmpRZ0lBQWFpZ0NBQ0lES0FJSUlnQkhEUUJCQUNBR1FYNGdCSGR4SWdZMkFvalFnSUFBREFFTElBVWdBRFlDQ0NBQUlBVTJBZ3dMSUFNZ0FrRURjallDQkNBRElBUkJBM1FpQkdvZ0JDQUNheUlGTmdJQUlBTWdBbW9pQUNBRlFRRnlOZ0lFQWtBZ0IwVU5BQ0FIUVhoeFFiRFFnSUFBYWlFQ1FRQW9BcHpRZ0lBQUlRUUNRQUpBSUFaQkFTQUhRUU4yZENJSWNRMEFRUUFnQmlBSWNqWUNpTkNBZ0FBZ0FpRUlEQUVMSUFJb0FnZ2hDQXNnQ0NBRU5nSU1JQUlnQkRZQ0NDQUVJQUkyQWd3Z0JDQUlOZ0lJQ3lBRFFRaHFJUU5CQUNBQU5nS2MwSUNBQUVFQUlBVTJBcERRZ0lBQURBd0xRUUFvQW96UWdJQUFJZ2xGRFFFZ0NVRUFJQWxyY1VGL2FpSURJQU5CREhaQkVIRWlBM1lpQkVFRmRrRUljU0lGSUFOeUlBUWdCWFlpQTBFQ2RrRUVjU0lFY2lBRElBUjJJZ05CQVhaQkFuRWlCSElnQXlBRWRpSURRUUYyUVFGeElnUnlJQU1nQkhacVFRSjBRYmpTZ0lBQWFpZ0NBQ0lBS0FJRVFYaHhJQUpySVFRZ0FDRUZBa0FEUUFKQUlBVW9BaEFpQXcwQUlBVkJGR29vQWdBaUEwVU5BZ3NnQXlnQ0JFRjRjU0FDYXlJRklBUWdCU0FFU1NJRkd5RUVJQU1nQUNBRkd5RUFJQU1oQlF3QUN3c2dBQ2dDR0NFS0FrQWdBQ2dDRENJSUlBQkdEUUFnQUNnQ0NDSURRUUFvQXBqUWdJQUFTUm9nQ0NBRE5nSUlJQU1nQ0RZQ0RBd0xDd0pBSUFCQkZHb2lCU2dDQUNJRERRQWdBQ2dDRUNJRFJRMERJQUJCRUdvaEJRc0RRQ0FGSVFzZ0F5SUlRUlJxSWdVb0FnQWlBdzBBSUFoQkVHb2hCU0FJS0FJUUlnTU5BQXNnQzBFQU5nSUFEQW9MUVg4aEFpQUFRYjkvU3cwQUlBQkJFMm9pQTBGd2NTRUNRUUFvQW96UWdJQUFJZ2RGRFFCQkFDRUxBa0FnQWtHQUFra05BRUVmSVFzZ0FrSC8vLzhIU3cwQUlBTkJDSFlpQXlBRFFZRCtQMnBCRUhaQkNIRWlBM1FpQkNBRVFZRGdIMnBCRUhaQkJIRWlCSFFpQlNBRlFZQ0FEMnBCRUhaQkFuRWlCWFJCRDNZZ0F5QUVjaUFGY21zaUEwRUJkQ0FDSUFOQkZXcDJRUUZ4Y2tFY2FpRUxDMEVBSUFKcklRUUNRQUpBQWtBQ1FDQUxRUUowUWJqU2dJQUFhaWdDQUNJRkRRQkJBQ0VEUVFBaENBd0JDMEVBSVFNZ0FrRUFRUmtnQzBFQmRtc2dDMEVmUmh0MElRQkJBQ0VJQTBBQ1FDQUZLQUlFUVhoeElBSnJJZ1lnQkU4TkFDQUdJUVFnQlNFSUlBWU5BRUVBSVFRZ0JTRUlJQVVoQXd3REN5QURJQVZCRkdvb0FnQWlCaUFHSUFVZ0FFRWRka0VFY1dwQkVHb29BZ0FpQlVZYklBTWdCaHNoQXlBQVFRRjBJUUFnQlEwQUN3c0NRQ0FESUFoeURRQkJBQ0VJUVFJZ0MzUWlBMEVBSUFOcmNpQUhjU0lEUlEwRElBTkJBQ0FEYTNGQmYyb2lBeUFEUVF4MlFSQnhJZ04ySWdWQkJYWkJDSEVpQUNBRGNpQUZJQUIySWdOQkFuWkJCSEVpQlhJZ0F5QUZkaUlEUVFGMlFRSnhJZ1Z5SUFNZ0JYWWlBMEVCZGtFQmNTSUZjaUFESUFWMmFrRUNkRUc0MG9DQUFHb29BZ0FoQXdzZ0EwVU5BUXNEUUNBREtBSUVRWGh4SUFKcklnWWdCRWtoQUFKQUlBTW9BaEFpQlEwQUlBTkJGR29vQWdBaEJRc2dCaUFFSUFBYklRUWdBeUFJSUFBYklRZ2dCU0VESUFVTkFBc0xJQWhGRFFBZ0JFRUFLQUtRMElDQUFDQUNhMDhOQUNBSUtBSVlJUXNDUUNBSUtBSU1JZ0FnQ0VZTkFDQUlLQUlJSWdOQkFDZ0NtTkNBZ0FCSkdpQUFJQU0yQWdnZ0F5QUFOZ0lNREFrTEFrQWdDRUVVYWlJRktBSUFJZ01OQUNBSUtBSVFJZ05GRFFNZ0NFRVFhaUVGQ3dOQUlBVWhCaUFESWdCQkZHb2lCU2dDQUNJRERRQWdBRUVRYWlFRklBQW9BaEFpQXcwQUN5QUdRUUEyQWdBTUNBc0NRRUVBS0FLUTBJQ0FBQ0lESUFKSkRRQkJBQ2dDbk5DQWdBQWhCQUpBQWtBZ0F5QUNheUlGUVJCSkRRQWdCQ0FDYWlJQUlBVkJBWEkyQWdSQkFDQUZOZ0tRMElDQUFFRUFJQUEyQXB6UWdJQUFJQVFnQTJvZ0JUWUNBQ0FFSUFKQkEzSTJBZ1FNQVFzZ0JDQURRUU55TmdJRUlBUWdBMm9pQXlBREtBSUVRUUZ5TmdJRVFRQkJBRFlDbk5DQWdBQkJBRUVBTmdLUTBJQ0FBQXNnQkVFSWFpRUREQW9MQWtCQkFDZ0NsTkNBZ0FBaUFDQUNUUTBBUVFBb0FxRFFnSUFBSWdNZ0Ftb2lCQ0FBSUFKcklnVkJBWEkyQWdSQkFDQUZOZ0tVMElDQUFFRUFJQVEyQXFEUWdJQUFJQU1nQWtFRGNqWUNCQ0FEUVFocUlRTU1DZ3NDUUFKQVFRQW9BdURUZ0lBQVJRMEFRUUFvQXVqVGdJQUFJUVFNQVF0QkFFSi9Od0xzMDRDQUFFRUFRb0NBaElDQWdNQUFOd0xrMDRDQUFFRUFJQUZCREdwQmNIRkIyS3JWcWdWek5nTGcwNENBQUVFQVFRQTJBdlRUZ0lBQVFRQkJBRFlDeE5PQWdBQkJnSUFFSVFRTFFRQWhBd0pBSUFRZ0FrSEhBR29pQjJvaUJrRUFJQVJySWd0eElnZ2dBa3NOQUVFQVFUQTJBdmpUZ0lBQURBb0xBa0JCQUNnQ3dOT0FnQUFpQTBVTkFBSkFRUUFvQXJqVGdJQUFJZ1FnQ0dvaUJTQUVUUTBBSUFVZ0EwME5BUXRCQUNFRFFRQkJNRFlDK05PQWdBQU1DZ3RCQUMwQXhOT0FnQUJCQkhFTkJBSkFBa0FDUUVFQUtBS2cwSUNBQUNJRVJRMEFRY2pUZ0lBQUlRTURRQUpBSUFNb0FnQWlCU0FFU3cwQUlBVWdBeWdDQkdvZ0JFc05Bd3NnQXlnQ0NDSUREUUFMQzBFQUVNdUFnSUFBSWdCQmYwWU5CU0FJSVFZQ1FFRUFLQUxrMDRDQUFDSURRWDlxSWdRZ0FIRkZEUUFnQ0NBQWF5QUVJQUJxUVFBZ0EydHhhaUVHQ3lBR0lBSk5EUVVnQmtIKy8vLy9CMHNOQlFKQVFRQW9Bc0RUZ0lBQUlnTkZEUUJCQUNnQ3VOT0FnQUFpQkNBR2FpSUZJQVJORFFZZ0JTQURTdzBHQ3lBR0VNdUFnSUFBSWdNZ0FFY05BUXdIQ3lBR0lBQnJJQXR4SWdaQi92Ly8vd2RMRFFRZ0JoRExnSUNBQUNJQUlBTW9BZ0FnQXlnQ0JHcEdEUU1nQUNFREN3SkFJQU5CZjBZTkFDQUNRY2dBYWlBR1RRMEFBa0FnQnlBR2EwRUFLQUxvMDRDQUFDSUVha0VBSUFScmNTSUVRZjcvLy84SFRRMEFJQU1oQUF3SEN3SkFJQVFReTRDQWdBQkJmMFlOQUNBRUlBWnFJUVlnQXlFQURBY0xRUUFnQm1zUXk0Q0FnQUFhREFRTElBTWhBQ0FEUVg5SERRVU1Bd3RCQUNFSURBY0xRUUFoQUF3RkN5QUFRWDlIRFFJTFFRQkJBQ2dDeE5PQWdBQkJCSEkyQXNUVGdJQUFDeUFJUWY3Ly8vOEhTdzBCSUFnUXk0Q0FnQUFoQUVFQUVNdUFnSUFBSVFNZ0FFRi9SZzBCSUFOQmYwWU5BU0FBSUFOUERRRWdBeUFBYXlJR0lBSkJPR3BORFFFTFFRQkJBQ2dDdU5PQWdBQWdCbW9pQXpZQ3VOT0FnQUFDUUNBRFFRQW9BcnpUZ0lBQVRRMEFRUUFnQXpZQ3ZOT0FnQUFMQWtBQ1FBSkFBa0JCQUNnQ29OQ0FnQUFpQkVVTkFFSEkwNENBQUNFREEwQWdBQ0FES0FJQUlnVWdBeWdDQkNJSWFrWU5BaUFES0FJSUlnTU5BQXdEQ3dzQ1FBSkFRUUFvQXBqUWdJQUFJZ05GRFFBZ0FDQURUdzBCQzBFQUlBQTJBcGpRZ0lBQUMwRUFJUU5CQUNBR05nTE0wNENBQUVFQUlBQTJBc2pUZ0lBQVFRQkJmellDcU5DQWdBQkJBRUVBS0FMZzA0Q0FBRFlDck5DQWdBQkJBRUVBTmdMVTA0Q0FBQU5BSUFOQnhOQ0FnQUJxSUFOQnVOQ0FnQUJxSWdRMkFnQWdCQ0FEUWJEUWdJQUFhaUlGTmdJQUlBTkJ2TkNBZ0FCcUlBVTJBZ0FnQTBITTBJQ0FBR29nQTBIQTBJQ0FBR29pQlRZQ0FDQUZJQVEyQWdBZ0EwSFUwSUNBQUdvZ0EwSEkwSUNBQUdvaUJEWUNBQ0FFSUFVMkFnQWdBMEhRMElDQUFHb2dCRFlDQUNBRFFTQnFJZ05CZ0FKSERRQUxJQUJCZUNBQWEwRVBjVUVBSUFCQkNHcEJEM0ViSWdOcUlnUWdCa0ZJYWlJRklBTnJJZ05CQVhJMkFnUkJBRUVBS0FMdzA0Q0FBRFlDcE5DQWdBQkJBQ0FETmdLVTBJQ0FBRUVBSUFRMkFxRFFnSUFBSUFBZ0JXcEJPRFlDQkF3Q0N5QURMUUFNUVFoeERRQWdCQ0FGU1EwQUlBUWdBRThOQUNBRVFYZ2dCR3RCRDNGQkFDQUVRUWhxUVE5eEd5SUZhaUlBUVFBb0FwVFFnSUFBSUFacUlnc2dCV3NpQlVFQmNqWUNCQ0FESUFnZ0JtbzJBZ1JCQUVFQUtBTHcwNENBQURZQ3BOQ0FnQUJCQUNBRk5nS1UwSUNBQUVFQUlBQTJBcURRZ0lBQUlBUWdDMnBCT0RZQ0JBd0JDd0pBSUFCQkFDZ0NtTkNBZ0FBaUNFOE5BRUVBSUFBMkFwalFnSUFBSUFBaENBc2dBQ0FHYWlFRlFjalRnSUFBSVFNQ1FBSkFBa0FDUUFKQUFrQUNRQU5BSUFNb0FnQWdCVVlOQVNBREtBSUlJZ01OQUF3Q0N3c2dBeTBBREVFSWNVVU5BUXRCeU5PQWdBQWhBd05BQWtBZ0F5Z0NBQ0lGSUFSTERRQWdCU0FES0FJRWFpSUZJQVJMRFFNTElBTW9BZ2doQXd3QUN3c2dBeUFBTmdJQUlBTWdBeWdDQkNBR2FqWUNCQ0FBUVhnZ0FHdEJEM0ZCQUNBQVFRaHFRUTl4RzJvaUN5QUNRUU55TmdJRUlBVkJlQ0FGYTBFUGNVRUFJQVZCQ0dwQkQzRWJhaUlHSUFzZ0Ftb2lBbXNoQXdKQUlBWWdCRWNOQUVFQUlBSTJBcURRZ0lBQVFRQkJBQ2dDbE5DQWdBQWdBMm9pQXpZQ2xOQ0FnQUFnQWlBRFFRRnlOZ0lFREFNTEFrQWdCa0VBS0FLYzBJQ0FBRWNOQUVFQUlBSTJBcHpRZ0lBQVFRQkJBQ2dDa05DQWdBQWdBMm9pQXpZQ2tOQ0FnQUFnQWlBRFFRRnlOZ0lFSUFJZ0Eyb2dBellDQUF3REN3SkFJQVlvQWdRaUJFRURjVUVCUncwQUlBUkJlSEVoQndKQUFrQWdCRUgvQVVzTkFDQUdLQUlJSWdVZ0JFRURkaUlJUVFOMFFiRFFnSUFBYWlJQVJob0NRQ0FHS0FJTUlnUWdCVWNOQUVFQVFRQW9Bb2pRZ0lBQVFYNGdDSGR4TmdLSTBJQ0FBQXdDQ3lBRUlBQkdHaUFFSUFVMkFnZ2dCU0FFTmdJTURBRUxJQVlvQWhnaENRSkFBa0FnQmlnQ0RDSUFJQVpHRFFBZ0JpZ0NDQ0lFSUFoSkdpQUFJQVEyQWdnZ0JDQUFOZ0lNREFFTEFrQWdCa0VVYWlJRUtBSUFJZ1VOQUNBR1FSQnFJZ1FvQWdBaUJRMEFRUUFoQUF3QkN3TkFJQVFoQ0NBRklnQkJGR29pQkNnQ0FDSUZEUUFnQUVFUWFpRUVJQUFvQWhBaUJRMEFDeUFJUVFBMkFnQUxJQWxGRFFBQ1FBSkFJQVlnQmlnQ0hDSUZRUUowUWJqU2dJQUFhaUlFS0FJQVJ3MEFJQVFnQURZQ0FDQUFEUUZCQUVFQUtBS00wSUNBQUVGK0lBVjNjVFlDak5DQWdBQU1BZ3NnQ1VFUVFSUWdDU2dDRUNBR1JodHFJQUEyQWdBZ0FFVU5BUXNnQUNBSk5nSVlBa0FnQmlnQ0VDSUVSUTBBSUFBZ0JEWUNFQ0FFSUFBMkFoZ0xJQVlvQWhRaUJFVU5BQ0FBUVJScUlBUTJBZ0FnQkNBQU5nSVlDeUFISUFOcUlRTWdCaUFIYWlJR0tBSUVJUVFMSUFZZ0JFRitjVFlDQkNBQ0lBTnFJQU0yQWdBZ0FpQURRUUZ5TmdJRUFrQWdBMEgvQVVzTkFDQURRWGh4UWJEUWdJQUFhaUVFQWtBQ1FFRUFLQUtJMElDQUFDSUZRUUVnQTBFRGRuUWlBM0VOQUVFQUlBVWdBM0kyQW9qUWdJQUFJQVFoQXd3QkN5QUVLQUlJSVFNTElBTWdBallDRENBRUlBSTJBZ2dnQWlBRU5nSU1JQUlnQXpZQ0NBd0RDMEVmSVFRQ1FDQURRZi8vL3dkTERRQWdBMEVJZGlJRUlBUkJnUDQvYWtFUWRrRUljU0lFZENJRklBVkJnT0FmYWtFUWRrRUVjU0lGZENJQUlBQkJnSUFQYWtFUWRrRUNjU0lBZEVFUGRpQUVJQVZ5SUFCeWF5SUVRUUYwSUFNZ0JFRVZhblpCQVhGeVFSeHFJUVFMSUFJZ0JEWUNIQ0FDUWdBM0FoQWdCRUVDZEVHNDBvQ0FBR29oQlFKQVFRQW9Bb3pRZ0lBQUlnQkJBU0FFZENJSWNRMEFJQVVnQWpZQ0FFRUFJQUFnQ0hJMkFvelFnSUFBSUFJZ0JUWUNHQ0FDSUFJMkFnZ2dBaUFDTmdJTURBTUxJQU5CQUVFWklBUkJBWFpySUFSQkgwWWJkQ0VFSUFVb0FnQWhBQU5BSUFBaUJTZ0NCRUY0Y1NBRFJnMENJQVJCSFhZaEFDQUVRUUYwSVFRZ0JTQUFRUVJ4YWtFUWFpSUlLQUlBSWdBTkFBc2dDQ0FDTmdJQUlBSWdCVFlDR0NBQ0lBSTJBZ3dnQWlBQ05nSUlEQUlMSUFCQmVDQUFhMEVQY1VFQUlBQkJDR3BCRDNFYklnTnFJZ3NnQmtGSWFpSUlJQU5ySWdOQkFYSTJBZ1FnQUNBSWFrRTROZ0lFSUFRZ0JVRTNJQVZyUVE5eFFRQWdCVUZKYWtFUGNSdHFRVUZxSWdnZ0NDQUVRUkJxU1JzaUNFRWpOZ0lFUVFCQkFDZ0M4Tk9BZ0FBMkFxVFFnSUFBUVFBZ0F6WUNsTkNBZ0FCQkFDQUxOZ0tnMElDQUFDQUlRUkJxUVFBcEF0RFRnSUFBTndJQUlBaEJBQ2tDeU5PQWdBQTNBZ2hCQUNBSVFRaHFOZ0xRMDRDQUFFRUFJQVkyQXN6VGdJQUFRUUFnQURZQ3lOT0FnQUJCQUVFQU5nTFUwNENBQUNBSVFTUnFJUU1EUUNBRFFRYzJBZ0FnQTBFRWFpSURJQVZKRFFBTElBZ2dCRVlOQXlBSUlBZ29BZ1JCZm5FMkFnUWdDQ0FJSUFScklnQTJBZ0FnQkNBQVFRRnlOZ0lFQWtBZ0FFSC9BVXNOQUNBQVFYaHhRYkRRZ0lBQWFpRURBa0FDUUVFQUtBS0kwSUNBQUNJRlFRRWdBRUVEZG5RaUFIRU5BRUVBSUFVZ0FISTJBb2pRZ0lBQUlBTWhCUXdCQ3lBREtBSUlJUVVMSUFVZ0JEWUNEQ0FESUFRMkFnZ2dCQ0FETmdJTUlBUWdCVFlDQ0F3RUMwRWZJUU1DUUNBQVFmLy8vd2RMRFFBZ0FFRUlkaUlESUFOQmdQNC9ha0VRZGtFSWNTSURkQ0lGSUFWQmdPQWZha0VRZGtFRWNTSUZkQ0lJSUFoQmdJQVBha0VRZGtFQ2NTSUlkRUVQZGlBRElBVnlJQWh5YXlJRFFRRjBJQUFnQTBFVmFuWkJBWEZ5UVJ4cUlRTUxJQVFnQXpZQ0hDQUVRZ0EzQWhBZ0EwRUNkRUc0MG9DQUFHb2hCUUpBUVFBb0FvelFnSUFBSWdoQkFTQURkQ0lHY1EwQUlBVWdCRFlDQUVFQUlBZ2dCbkkyQW96UWdJQUFJQVFnQlRZQ0dDQUVJQVEyQWdnZ0JDQUVOZ0lNREFRTElBQkJBRUVaSUFOQkFYWnJJQU5CSDBZYmRDRURJQVVvQWdBaENBTkFJQWdpQlNnQ0JFRjRjU0FBUmcwRElBTkJIWFloQ0NBRFFRRjBJUU1nQlNBSVFRUnhha0VRYWlJR0tBSUFJZ2dOQUFzZ0JpQUVOZ0lBSUFRZ0JUWUNHQ0FFSUFRMkFnd2dCQ0FFTmdJSURBTUxJQVVvQWdnaUF5QUNOZ0lNSUFVZ0FqWUNDQ0FDUVFBMkFoZ2dBaUFGTmdJTUlBSWdBellDQ0FzZ0MwRUlhaUVEREFVTElBVW9BZ2dpQXlBRU5nSU1JQVVnQkRZQ0NDQUVRUUEyQWhnZ0JDQUZOZ0lNSUFRZ0F6WUNDQXRCQUNnQ2xOQ0FnQUFpQXlBQ1RRMEFRUUFvQXFEUWdJQUFJZ1FnQW1vaUJTQURJQUpySWdOQkFYSTJBZ1JCQUNBRE5nS1UwSUNBQUVFQUlBVTJBcURRZ0lBQUlBUWdBa0VEY2pZQ0JDQUVRUWhxSVFNTUF3dEJBQ0VEUVFCQk1EWUMrTk9BZ0FBTUFnc0NRQ0FMUlEwQUFrQUNRQ0FJSUFnb0Fod2lCVUVDZEVHNDBvQ0FBR29pQXlnQ0FFY05BQ0FESUFBMkFnQWdBQTBCUVFBZ0IwRitJQVYzY1NJSE5nS00wSUNBQUF3Q0N5QUxRUkJCRkNBTEtBSVFJQWhHRzJvZ0FEWUNBQ0FBUlEwQkN5QUFJQXMyQWhnQ1FDQUlLQUlRSWdORkRRQWdBQ0FETmdJUUlBTWdBRFlDR0FzZ0NFRVVhaWdDQUNJRFJRMEFJQUJCRkdvZ0F6WUNBQ0FESUFBMkFoZ0xBa0FDUUNBRVFROUxEUUFnQ0NBRUlBSnFJZ05CQTNJMkFnUWdDQ0FEYWlJRElBTW9BZ1JCQVhJMkFnUU1BUXNnQ0NBQ2FpSUFJQVJCQVhJMkFnUWdDQ0FDUVFOeU5nSUVJQUFnQkdvZ0JEWUNBQUpBSUFSQi93RkxEUUFnQkVGNGNVR3cwSUNBQUdvaEF3SkFBa0JCQUNnQ2lOQ0FnQUFpQlVFQklBUkJBM1owSWdSeERRQkJBQ0FGSUFSeU5nS0kwSUNBQUNBRElRUU1BUXNnQXlnQ0NDRUVDeUFFSUFBMkFnd2dBeUFBTmdJSUlBQWdBellDRENBQUlBUTJBZ2dNQVF0Qkh5RURBa0FnQkVILy8vOEhTdzBBSUFSQkNIWWlBeUFEUVlEK1AycEJFSFpCQ0hFaUEzUWlCU0FGUVlEZ0gycEJFSFpCQkhFaUJYUWlBaUFDUVlDQUQycEJFSFpCQW5FaUFuUkJEM1lnQXlBRmNpQUNjbXNpQTBFQmRDQUVJQU5CRldwMlFRRnhja0VjYWlFREN5QUFJQU0yQWh3Z0FFSUFOd0lRSUFOQkFuUkJ1TktBZ0FCcUlRVUNRQ0FIUVFFZ0EzUWlBbkVOQUNBRklBQTJBZ0JCQUNBSElBSnlOZ0tNMElDQUFDQUFJQVUyQWhnZ0FDQUFOZ0lJSUFBZ0FEWUNEQXdCQ3lBRVFRQkJHU0FEUVFGMmF5QURRUjlHRzNRaEF5QUZLQUlBSVFJQ1FBTkFJQUlpQlNnQ0JFRjRjU0FFUmcwQklBTkJIWFloQWlBRFFRRjBJUU1nQlNBQ1FRUnhha0VRYWlJR0tBSUFJZ0lOQUFzZ0JpQUFOZ0lBSUFBZ0JUWUNHQ0FBSUFBMkFnd2dBQ0FBTmdJSURBRUxJQVVvQWdnaUF5QUFOZ0lNSUFVZ0FEWUNDQ0FBUVFBMkFoZ2dBQ0FGTmdJTUlBQWdBellDQ0FzZ0NFRUlhaUVEREFFTEFrQWdDa1VOQUFKQUFrQWdBQ0FBS0FJY0lnVkJBblJCdU5LQWdBQnFJZ01vQWdCSERRQWdBeUFJTmdJQUlBZ05BVUVBSUFsQmZpQUZkM0UyQW96UWdJQUFEQUlMSUFwQkVFRVVJQW9vQWhBZ0FFWWJhaUFJTmdJQUlBaEZEUUVMSUFnZ0NqWUNHQUpBSUFBb0FoQWlBMFVOQUNBSUlBTTJBaEFnQXlBSU5nSVlDeUFBUVJScUtBSUFJZ05GRFFBZ0NFRVVhaUFETmdJQUlBTWdDRFlDR0FzQ1FBSkFJQVJCRDBzTkFDQUFJQVFnQW1vaUEwRURjallDQkNBQUlBTnFJZ01nQXlnQ0JFRUJjallDQkF3QkN5QUFJQUpxSWdVZ0JFRUJjallDQkNBQUlBSkJBM0kyQWdRZ0JTQUVhaUFFTmdJQUFrQWdCMFVOQUNBSFFYaHhRYkRRZ0lBQWFpRUNRUUFvQXB6UWdJQUFJUU1DUUFKQVFRRWdCMEVEZG5RaUNDQUdjUTBBUVFBZ0NDQUdjallDaU5DQWdBQWdBaUVJREFFTElBSW9BZ2doQ0FzZ0NDQUROZ0lNSUFJZ0F6WUNDQ0FESUFJMkFnd2dBeUFJTmdJSUMwRUFJQVUyQXB6UWdJQUFRUUFnQkRZQ2tOQ0FnQUFMSUFCQkNHb2hBd3NnQVVFUWFpU0FnSUNBQUNBREN3b0FJQUFReVlDQWdBQUw0ZzBCQjM4Q1FDQUFSUTBBSUFCQmVHb2lBU0FBUVh4cUtBSUFJZ0pCZUhFaUFHb2hBd0pBSUFKQkFYRU5BQ0FDUVFOeFJRMEJJQUVnQVNnQ0FDSUNheUlCUVFBb0FwalFnSUFBSWdSSkRRRWdBaUFBYWlFQUFrQWdBVUVBS0FLYzBJQ0FBRVlOQUFKQUlBSkIvd0ZMRFFBZ0FTZ0NDQ0lFSUFKQkEzWWlCVUVEZEVHdzBJQ0FBR29pQmtZYUFrQWdBU2dDRENJQ0lBUkhEUUJCQUVFQUtBS0kwSUNBQUVGK0lBVjNjVFlDaU5DQWdBQU1Bd3NnQWlBR1Job2dBaUFFTmdJSUlBUWdBallDREF3Q0N5QUJLQUlZSVFjQ1FBSkFJQUVvQWd3aUJpQUJSZzBBSUFFb0FnZ2lBaUFFU1JvZ0JpQUNOZ0lJSUFJZ0JqWUNEQXdCQ3dKQUlBRkJGR29pQWlnQ0FDSUVEUUFnQVVFUWFpSUNLQUlBSWdRTkFFRUFJUVlNQVFzRFFDQUNJUVVnQkNJR1FSUnFJZ0lvQWdBaUJBMEFJQVpCRUdvaEFpQUdLQUlRSWdRTkFBc2dCVUVBTmdJQUN5QUhSUTBCQWtBQ1FDQUJJQUVvQWh3aUJFRUNkRUc0MG9DQUFHb2lBaWdDQUVjTkFDQUNJQVkyQWdBZ0JnMEJRUUJCQUNnQ2pOQ0FnQUJCZmlBRWQzRTJBb3pRZ0lBQURBTUxJQWRCRUVFVUlBY29BaEFnQVVZYmFpQUdOZ0lBSUFaRkRRSUxJQVlnQnpZQ0dBSkFJQUVvQWhBaUFrVU5BQ0FHSUFJMkFoQWdBaUFHTmdJWUN5QUJLQUlVSWdKRkRRRWdCa0VVYWlBQ05nSUFJQUlnQmpZQ0dBd0JDeUFES0FJRUlnSkJBM0ZCQTBjTkFDQURJQUpCZm5FMkFnUkJBQ0FBTmdLUTBJQ0FBQ0FCSUFCcUlBQTJBZ0FnQVNBQVFRRnlOZ0lFRHdzZ0FTQURUdzBBSUFNb0FnUWlBa0VCY1VVTkFBSkFBa0FnQWtFQ2NRMEFBa0FnQTBFQUtBS2cwSUNBQUVjTkFFRUFJQUUyQXFEUWdJQUFRUUJCQUNnQ2xOQ0FnQUFnQUdvaUFEWUNsTkNBZ0FBZ0FTQUFRUUZ5TmdJRUlBRkJBQ2dDbk5DQWdBQkhEUU5CQUVFQU5nS1EwSUNBQUVFQVFRQTJBcHpRZ0lBQUR3c0NRQ0FEUVFBb0FwelFnSUFBUncwQVFRQWdBVFlDbk5DQWdBQkJBRUVBS0FLUTBJQ0FBQ0FBYWlJQU5nS1EwSUNBQUNBQklBQkJBWEkyQWdRZ0FTQUFhaUFBTmdJQUR3c2dBa0Y0Y1NBQWFpRUFBa0FDUUNBQ1FmOEJTdzBBSUFNb0FnZ2lCQ0FDUVFOMklnVkJBM1JCc05DQWdBQnFJZ1pHR2dKQUlBTW9BZ3dpQWlBRVJ3MEFRUUJCQUNnQ2lOQ0FnQUJCZmlBRmQzRTJBb2pRZ0lBQURBSUxJQUlnQmtZYUlBSWdCRFlDQ0NBRUlBSTJBZ3dNQVFzZ0F5Z0NHQ0VIQWtBQ1FDQURLQUlNSWdZZ0EwWU5BQ0FES0FJSUlnSkJBQ2dDbU5DQWdBQkpHaUFHSUFJMkFnZ2dBaUFHTmdJTURBRUxBa0FnQTBFVWFpSUNLQUlBSWdRTkFDQURRUkJxSWdJb0FnQWlCQTBBUVFBaEJnd0JDd05BSUFJaEJTQUVJZ1pCRkdvaUFpZ0NBQ0lFRFFBZ0JrRVFhaUVDSUFZb0FoQWlCQTBBQ3lBRlFRQTJBZ0FMSUFkRkRRQUNRQUpBSUFNZ0F5Z0NIQ0lFUVFKMFFialNnSUFBYWlJQ0tBSUFSdzBBSUFJZ0JqWUNBQ0FHRFFGQkFFRUFLQUtNMElDQUFFRitJQVIzY1RZQ2pOQ0FnQUFNQWdzZ0IwRVFRUlFnQnlnQ0VDQURSaHRxSUFZMkFnQWdCa1VOQVFzZ0JpQUhOZ0lZQWtBZ0F5Z0NFQ0lDUlEwQUlBWWdBallDRUNBQ0lBWTJBaGdMSUFNb0FoUWlBa1VOQUNBR1FSUnFJQUkyQWdBZ0FpQUdOZ0lZQ3lBQklBQnFJQUEyQWdBZ0FTQUFRUUZ5TmdJRUlBRkJBQ2dDbk5DQWdBQkhEUUZCQUNBQU5nS1EwSUNBQUE4TElBTWdBa0YrY1RZQ0JDQUJJQUJxSUFBMkFnQWdBU0FBUVFGeU5nSUVDd0pBSUFCQi93RkxEUUFnQUVGNGNVR3cwSUNBQUdvaEFnSkFBa0JCQUNnQ2lOQ0FnQUFpQkVFQklBQkJBM1owSWdCeERRQkJBQ0FFSUFCeU5nS0kwSUNBQUNBQ0lRQU1BUXNnQWlnQ0NDRUFDeUFBSUFFMkFnd2dBaUFCTmdJSUlBRWdBallDRENBQklBQTJBZ2dQQzBFZklRSUNRQ0FBUWYvLy93ZExEUUFnQUVFSWRpSUNJQUpCZ1A0L2FrRVFka0VJY1NJQ2RDSUVJQVJCZ09BZmFrRVFka0VFY1NJRWRDSUdJQVpCZ0lBUGFrRVFka0VDY1NJR2RFRVBkaUFDSUFSeUlBWnlheUlDUVFGMElBQWdBa0VWYW5aQkFYRnlRUnhxSVFJTElBRWdBallDSENBQlFnQTNBaEFnQWtFQ2RFRzQwb0NBQUdvaEJBSkFBa0JCQUNnQ2pOQ0FnQUFpQmtFQklBSjBJZ054RFFBZ0JDQUJOZ0lBUVFBZ0JpQURjallDak5DQWdBQWdBU0FFTmdJWUlBRWdBVFlDQ0NBQklBRTJBZ3dNQVFzZ0FFRUFRUmtnQWtFQmRtc2dBa0VmUmh0MElRSWdCQ2dDQUNFR0FrQURRQ0FHSWdRb0FnUkJlSEVnQUVZTkFTQUNRUjEySVFZZ0FrRUJkQ0VDSUFRZ0JrRUVjV3BCRUdvaUF5Z0NBQ0lHRFFBTElBTWdBVFlDQUNBQklBUTJBaGdnQVNBQk5nSU1JQUVnQVRZQ0NBd0JDeUFFS0FJSUlnQWdBVFlDRENBRUlBRTJBZ2dnQVVFQU5nSVlJQUVnQkRZQ0RDQUJJQUEyQWdnTFFRQkJBQ2dDcU5DQWdBQkJmMm9pQVVGL0lBRWJOZ0tvMElDQUFBc0xCQUFBQUF0T0FBSkFJQUFOQUQ4QVFSQjBEd3NDUUNBQVFmLy9BM0VOQUNBQVFYOU1EUUFDUUNBQVFSQjJRQUFpQUVGL1J3MEFRUUJCTURZQytOT0FnQUJCZnc4TElBQkJFSFFQQ3hES2dJQ0FBQUFMOGdJQ0EzOEJmZ0pBSUFKRkRRQWdBQ0FCT2dBQUlBSWdBR29pQTBGL2FpQUJPZ0FBSUFKQkEwa05BQ0FBSUFFNkFBSWdBQ0FCT2dBQklBTkJmV29nQVRvQUFDQURRWDVxSUFFNkFBQWdBa0VIU1EwQUlBQWdBVG9BQXlBRFFYeHFJQUU2QUFBZ0FrRUpTUTBBSUFCQkFDQUFhMEVEY1NJRWFpSURJQUZCL3dGeFFZR0NoQWhzSWdFMkFnQWdBeUFDSUFSclFYeHhJZ1JxSWdKQmZHb2dBVFlDQUNBRVFRbEpEUUFnQXlBQk5nSUlJQU1nQVRZQ0JDQUNRWGhxSUFFMkFnQWdBa0YwYWlBQk5nSUFJQVJCR1VrTkFDQURJQUUyQWhnZ0F5QUJOZ0lVSUFNZ0FUWUNFQ0FESUFFMkFnd2dBa0Z3YWlBQk5nSUFJQUpCYkdvZ0FUWUNBQ0FDUVdocUlBRTJBZ0FnQWtGa2FpQUJOZ0lBSUFRZ0EwRUVjVUVZY2lJRmF5SUNRU0JKRFFBZ0FhMUNnWUNBZ0JCK0lRWWdBeUFGYWlFQkEwQWdBU0FHTndNWUlBRWdCamNERUNBQklBWTNBd2dnQVNBR053TUFJQUZCSUdvaEFTQUNRV0JxSWdKQkgwc05BQXNMSUFBTEM0NUlBUUJCZ0FnTGhrZ0JBQUFBQWdBQUFBTUFBQUFBQUFBQUFBQUFBQVFBQUFBRkFBQUFBQUFBQUFBQUFBQUdBQUFBQndBQUFBZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRWx1ZG1Gc2FXUWdZMmhoY2lCcGJpQjFjbXdnY1hWbGNua0FVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOWliMlI1QUVOdmJuUmxiblF0VEdWdVozUm9JRzkyWlhKbWJHOTNBRU5vZFc1cklITnBlbVVnYjNabGNtWnNiM2NBVW1WemNHOXVjMlVnYjNabGNtWnNiM2NBU1c1MllXeHBaQ0J0WlhSb2IyUWdabTl5SUVoVVZGQXZlQzU0SUhKbGNYVmxjM1FBU1c1MllXeHBaQ0J0WlhSb2IyUWdabTl5SUZKVVUxQXZlQzU0SUhKbGNYVmxjM1FBUlhod1pXTjBaV1FnVTA5VlVrTkZJRzFsZEdodlpDQm1iM0lnU1VORkwzZ3VlQ0J5WlhGMVpYTjBBRWx1ZG1Gc2FXUWdZMmhoY2lCcGJpQjFjbXdnWm5KaFoyMWxiblFnYzNSaGNuUUFSWGh3WldOMFpXUWdaRzkwQUZOd1lXNGdZMkZzYkdKaFkyc2daWEp5YjNJZ2FXNGdiMjVmYzNSaGRIVnpBRWx1ZG1Gc2FXUWdjbVZ6Y0c5dWMyVWdjM1JoZEhWekFFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJR05vZFc1cklHVjRkR1Z1YzJsdmJuTUFWWE5sY2lCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmNtVnpaWFJnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5amFIVnVhMTlvWldGa1pYSmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDl0WlhOellXZGxYMkpsWjJsdVlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZZMmgxYm10ZlpYaDBaVzV6YVc5dVgzWmhiSFZsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmMzUmhkSFZ6WDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmRtVnljMmx2Ymw5amIyMXdiR1YwWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgzVnliRjlqYjIxd2JHVjBaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDJOb2RXNXJYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYUdWaFpHVnlYM1poYkhWbFgyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZiV1Z6YzJGblpWOWpiMjF3YkdWMFpXQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMjFsZEdodlpGOWpiMjF3YkdWMFpXQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMmhsWVdSbGNsOW1hV1ZzWkY5amIyMXdiR1YwWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyTm9kVzVyWDJWNGRHVnVjMmx2Ymw5dVlXMWxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQlZibVY0Y0dWamRHVmtJR05vWVhJZ2FXNGdkWEpzSUhObGNuWmxjZ0JKYm5aaGJHbGtJR2hsWVdSbGNpQjJZV3gxWlNCamFHRnlBRWx1ZG1Gc2FXUWdhR1ZoWkdWeUlHWnBaV3hrSUdOb1lYSUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOTJaWEp6YVc5dUFFbHVkbUZzYVdRZ2JXbHViM0lnZG1WeWMybHZiZ0JKYm5aaGJHbGtJRzFoYW05eUlIWmxjbk5wYjI0QVJYaHdaV04wWldRZ2MzQmhZMlVnWVdaMFpYSWdkbVZ5YzJsdmJnQkZlSEJsWTNSbFpDQkRVa3hHSUdGbWRHVnlJSFpsY25OcGIyNEFTVzUyWVd4cFpDQklWRlJRSUhabGNuTnBiMjRBU1c1MllXeHBaQ0JvWldGa1pYSWdkRzlyWlc0QVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5MWNtd0FTVzUyWVd4cFpDQmphR0Z5WVdOMFpYSnpJR2x1SUhWeWJBQlZibVY0Y0dWamRHVmtJSE4wWVhKMElHTm9ZWElnYVc0Z2RYSnNBRVJ2ZFdKc1pTQkFJR2x1SUhWeWJBQkZiWEIwZVNCRGIyNTBaVzUwTFV4bGJtZDBhQUJKYm5aaGJHbGtJR05vWVhKaFkzUmxjaUJwYmlCRGIyNTBaVzUwTFV4bGJtZDBhQUJFZFhCc2FXTmhkR1VnUTI5dWRHVnVkQzFNWlc1bmRHZ0FTVzUyWVd4cFpDQmphR0Z5SUdsdUlIVnliQ0J3WVhSb0FFTnZiblJsYm5RdFRHVnVaM1JvSUdOaGJpZDBJR0psSUhCeVpYTmxiblFnZDJsMGFDQlVjbUZ1YzJabGNpMUZibU52WkdsdVp3QkpiblpoYkdsa0lHTm9ZWEpoWTNSbGNpQnBiaUJqYUhWdWF5QnphWHBsQUZOd1lXNGdZMkZzYkdKaFkyc2daWEp5YjNJZ2FXNGdiMjVmYUdWaFpHVnlYM1poYkhWbEFGTndZVzRnWTJGc2JHSmhZMnNnWlhKeWIzSWdhVzRnYjI1ZlkyaDFibXRmWlhoMFpXNXphVzl1WDNaaGJIVmxBRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUdOb2RXNXJJR1Y0ZEdWdWMybHZibk1nZG1Gc2RXVUFUV2x6YzJsdVp5QmxlSEJsWTNSbFpDQk1SaUJoWm5SbGNpQm9aV0ZrWlhJZ2RtRnNkV1VBU1c1MllXeHBaQ0JnVkhKaGJuTm1aWEl0Ulc1amIyUnBibWRnSUdobFlXUmxjaUIyWVd4MVpRQkpiblpoYkdsa0lHTm9ZWEpoWTNSbGNpQnBiaUJqYUhWdWF5QmxlSFJsYm5OcGIyNXpJSEYxYjNSbElIWmhiSFZsQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUdWNGRHVnVjMmx2Ym5NZ2NYVnZkR1ZrSUhaaGJIVmxBRkJoZFhObFpDQmllU0J2Ymw5b1pXRmtaWEp6WDJOdmJYQnNaWFJsQUVsdWRtRnNhV1FnUlU5R0lITjBZWFJsQUc5dVgzSmxjMlYwSUhCaGRYTmxBRzl1WDJOb2RXNXJYMmhsWVdSbGNpQndZWFZ6WlFCdmJsOXRaWE56WVdkbFgySmxaMmx1SUhCaGRYTmxBRzl1WDJOb2RXNXJYMlY0ZEdWdWMybHZibDkyWVd4MVpTQndZWFZ6WlFCdmJsOXpkR0YwZFhOZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZmRtVnljMmx2Ymw5amIyMXdiR1YwWlNCd1lYVnpaUUJ2Ymw5MWNteGZZMjl0Y0d4bGRHVWdjR0YxYzJVQWIyNWZZMmgxYm10ZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZmFHVmhaR1Z5WDNaaGJIVmxYMk52YlhCc1pYUmxJSEJoZFhObEFHOXVYMjFsYzNOaFoyVmZZMjl0Y0d4bGRHVWdjR0YxYzJVQWIyNWZiV1YwYUc5a1gyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgyaGxZV1JsY2w5bWFXVnNaRjlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDlqYUhWdWExOWxlSFJsYm5OcGIyNWZibUZ0WlNCd1lYVnpaUUJWYm1WNGNHVmpkR1ZrSUhOd1lXTmxJR0ZtZEdWeUlITjBZWEowSUd4cGJtVUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOWphSFZ1YTE5bGVIUmxibk5wYjI1ZmJtRnRaUUJKYm5aaGJHbGtJR05vWVhKaFkzUmxjaUJwYmlCamFIVnVheUJsZUhSbGJuTnBiMjV6SUc1aGJXVUFVR0YxYzJVZ2IyNGdRMDlPVGtWRFZDOVZjR2R5WVdSbEFGQmhkWE5sSUc5dUlGQlNTUzlWY0dkeVlXUmxBRVY0Y0dWamRHVmtJRWhVVkZBdk1pQkRiMjV1WldOMGFXOXVJRkJ5WldaaFkyVUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOXRaWFJvYjJRQVJYaHdaV04wWldRZ2MzQmhZMlVnWVdaMFpYSWdiV1YwYUc5a0FGTndZVzRnWTJGc2JHSmhZMnNnWlhKeWIzSWdhVzRnYjI1ZmFHVmhaR1Z5WDJacFpXeGtBRkJoZFhObFpBQkpiblpoYkdsa0lIZHZjbVFnWlc1amIzVnVkR1Z5WldRQVNXNTJZV3hwWkNCdFpYUm9iMlFnWlc1amIzVnVkR1Z5WldRQVZXNWxlSEJsWTNSbFpDQmphR0Z5SUdsdUlIVnliQ0J6WTJobGJXRUFVbVZ4ZFdWemRDQm9ZWE1nYVc1MllXeHBaQ0JnVkhKaGJuTm1aWEl0Ulc1amIyUnBibWRnQUZOWFNWUkRTRjlRVWs5WVdRQlZVMFZmVUZKUFdGa0FUVXRCUTFSSlZrbFVXUUJWVGxCU1QwTkZVMU5CUWt4RlgwVk9WRWxVV1FCRFQxQlpBRTFQVmtWRVgxQkZVazFCVGtWT1ZFeFpBRlJQVDE5RlFWSk1XUUJPVDFSSlJsa0FSa0ZKVEVWRVgwUkZVRVZPUkVWT1Exa0FRa0ZFWDBkQlZFVlhRVmtBVUV4QldRQlFWVlFBUTBoRlEwdFBWVlFBUjBGVVJWZEJXVjlVU1UxRlQxVlVBRkpGVVZWRlUxUmZWRWxOUlU5VlZBQk9SVlJYVDFKTFgwTlBUazVGUTFSZlZFbE5SVTlWVkFCRFQwNU9SVU5VU1U5T1gxUkpUVVZQVlZRQVRFOUhTVTVmVkVsTlJVOVZWQUJPUlZSWFQxSkxYMUpGUVVSZlZFbE5SVTlWVkFCUVQxTlVBRTFKVTBSSlVrVkRWRVZFWDFKRlVWVkZVMVFBUTB4SlJVNVVYME5NVDFORlJGOVNSVkZWUlZOVUFFTk1TVVZPVkY5RFRFOVRSVVJmVEU5QlJGOUNRVXhCVGtORlJGOVNSVkZWUlZOVUFFSkJSRjlTUlZGVlJWTlVBRWhVVkZCZlVrVlJWVVZUVkY5VFJVNVVYMVJQWDBoVVZGQlRYMUJQVWxRQVVrVlFUMUpVQUVsTlgwRmZWRVZCVUU5VUFGSkZVMFZVWDBOUFRsUkZUbFFBVGs5ZlEwOU9WRVZPVkFCUVFWSlVTVUZNWDBOUFRsUkZUbFFBU0ZCRlgwbE9Wa0ZNU1VSZlEwOU9VMVJCVGxRQVNGQkZYME5DWDFKRlUwVlVBRWRGVkFCSVVFVmZVMVJTU1VOVUFFTlBUa1pNU1VOVUFGUkZUVkJQVWtGU1dWOVNSVVJKVWtWRFZBQlFSVkpOUVU1RlRsUmZVa1ZFU1ZKRlExUUFRMDlPVGtWRFZBQk5WVXhVU1Y5VFZFRlVWVk1BU0ZCRlgwbE9Wa0ZNU1VSZlUxUkJWRlZUQUZSUFQxOU5RVTVaWDFKRlVWVkZVMVJUQUVWQlVreFpYMGhKVGxSVEFGVk9RVlpCU1V4QlFreEZYMFpQVWw5TVJVZEJURjlTUlVGVFQwNVRBRTlRVkVsUFRsTUFVMWRKVkVOSVNVNUhYMUJTVDFSUFEwOU1Vd0JXUVZKSlFVNVVYMEZNVTA5ZlRrVkhUMVJKUVZSRlV3Qk5WVXhVU1ZCTVJWOURTRTlKUTBWVEFFbE9WRVZTVGtGTVgxTkZVbFpGVWw5RlVsSlBVZ0JYUlVKZlUwVlNWa1ZTWDFWT1MwNVBWMDVmUlZKU1QxSUFVa0ZKVEVkVlRsOUZVbEpQVWdCSlJFVk9WRWxVV1Y5UVVrOVdTVVJGVWw5QlZWUklSVTVVU1VOQlZFbFBUbDlGVWxKUFVnQlRVMHhmUTBWU1ZFbEdTVU5CVkVWZlJWSlNUMUlBU1U1V1FVeEpSRjlZWDBaUFVsZEJVa1JGUkY5R1QxSUFVMFZVWDFCQlVrRk5SVlJGVWdCSFJWUmZVRUZTUVUxRlZFVlNBRWhRUlY5VlUwVlNBRk5GUlY5UFZFaEZVZ0JJVUVWZlEwSmZRMGhWVGt0ZlNFVkJSRVZTQUUxTFEwRk1SVTVFUVZJQVUwVlVWVkFBVjBWQ1gxTkZVbFpGVWw5SlUxOUVUMWRPQUZSRlFWSkVUMWRPQUVoUVJWOURURTlUUlVSZlEwOU9Ua1ZEVkVsUFRnQklSVlZTU1ZOVVNVTmZSVmhRU1ZKQlZFbFBUZ0JFU1ZORFQwNU9SVU5VUlVSZlQxQkZVa0ZVU1U5T0FFNVBUbDlCVlZSSVQxSkpWRUZVU1ZaRlgwbE9SazlTVFVGVVNVOU9BRWhRUlY5SlRsWkJURWxFWDFaRlVsTkpUMDRBU0ZCRlgwTkNYMDFGVTFOQlIwVmZRa1ZIU1U0QVUwbFVSVjlKVTE5R1VrOWFSVTRBU0ZCRlgwbE9Wa0ZNU1VSZlNFVkJSRVZTWDFSUFMwVk9BRWxPVmtGTVNVUmZWRTlMUlU0QVJrOVNRa2xFUkVWT0FFVk9TRUZPUTBWZldVOVZVbDlEUVV4TkFFaFFSVjlKVGxaQlRFbEVYMVZTVEFCQ1RFOURTMFZFWDBKWlgxQkJVa1ZPVkVGTVgwTlBUbFJTVDB3QVRVdERUMHdBUVVOTUFFaFFSVjlKVGxSRlVrNUJUQUJTUlZGVlJWTlVYMGhGUVVSRlVsOUdTVVZNUkZOZlZFOVBYMHhCVWtkRlgxVk9UMFpHU1VOSlFVd0FTRkJGWDA5TEFGVk9URWxPU3dCVlRreFBRMHNBVUZKSkFGSkZWRkpaWDFkSlZFZ0FTRkJGWDBsT1ZrRk1TVVJmUTA5T1ZFVk9WRjlNUlU1SFZFZ0FTRkJGWDFWT1JWaFFSVU5VUlVSZlEwOU9WRVZPVkY5TVJVNUhWRWdBUmt4VlUwZ0FVRkpQVUZCQlZFTklBRTB0VTBWQlVrTklBRlZTU1Y5VVQwOWZURTlPUndCUVVrOURSVk5UU1U1SEFFMUpVME5GVEV4QlRrVlBWVk5mVUVWU1UwbFRWRVZPVkY5WFFWSk9TVTVIQUUxSlUwTkZURXhCVGtWUFZWTmZWMEZTVGtsT1J3QklVRVZmU1U1V1FVeEpSRjlVVWtGT1UwWkZVbDlGVGtOUFJFbE9Sd0JGZUhCbFkzUmxaQ0JEVWt4R0FFaFFSVjlKVGxaQlRFbEVYME5JVlU1TFgxTkpXa1VBVFU5V1JRQkRUMDVVU1U1VlJRQklVRVZmUTBKZlUxUkJWRlZUWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlJUlVGRVJWSlRYME5QVFZCTVJWUkZBRWhRUlY5RFFsOVdSVkpUU1U5T1gwTlBUVkJNUlZSRkFFaFFSVjlEUWw5VlVreGZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwTklWVTVMWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlJUlVGRVJWSmZWa0ZNVlVWZlEwOU5VRXhGVkVVQVNGQkZYME5DWDBOSVZVNUxYMFZZVkVWT1UwbFBUbDlXUVV4VlJWOURUMDFRVEVWVVJRQklVRVZmUTBKZlEwaFZUa3RmUlZoVVJVNVRTVTlPWDA1QlRVVmZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwMUZVMU5CUjBWZlEwOU5VRXhGVkVVQVNGQkZYME5DWDAxRlZFaFBSRjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZTRVZCUkVWU1gwWkpSVXhFWDBOUFRWQk1SVlJGQUVSRlRFVlVSUUJJVUVWZlNVNVdRVXhKUkY5RlQwWmZVMVJCVkVVQVNVNVdRVXhKUkY5VFUweGZRMFZTVkVsR1NVTkJWRVVBVUVGVlUwVUFUazlmVWtWVFVFOU9VMFVBVlU1VFZWQlFUMUpVUlVSZlRVVkVTVUZmVkZsUVJRQkhUMDVGQUU1UFZGOUJRME5GVUZSQlFreEZBRk5GVWxaSlEwVmZWVTVCVmtGSlRFRkNURVVBVWtGT1IwVmZUazlVWDFOQlZFbFRSa2xCUWt4RkFFOVNTVWRKVGw5SlUxOVZUbEpGUVVOSVFVSk1SUUJTUlZOUVQwNVRSVjlKVTE5VFZFRk1SUUJRVlZKSFJRQk5SVkpIUlFCU1JWRlZSVk5VWDBoRlFVUkZVbDlHU1VWTVJGTmZWRTlQWDB4QlVrZEZBRkpGVVZWRlUxUmZTRVZCUkVWU1gxUlBUMTlNUVZKSFJRQlFRVmxNVDBGRVgxUlBUMTlNUVZKSFJRQkpUbE5WUmtaSlEwbEZUbFJmVTFSUFVrRkhSUUJJVUVWZlVFRlZVMFZFWDFWUVIxSkJSRVVBU0ZCRlgxQkJWVk5GUkY5SU1sOVZVRWRTUVVSRkFGTlBWVkpEUlFCQlRrNVBWVTVEUlFCVVVrRkRSUUJJVUVWZlZVNUZXRkJGUTFSRlJGOVRVRUZEUlFCRVJWTkRVa2xDUlFCVlRsTlZRbE5EVWtsQ1JRQlNSVU5QVWtRQVNGQkZYMGxPVmtGTVNVUmZUVVZVU0U5RUFFNVBWRjlHVDFWT1JBQlFVazlRUmtsT1JBQlZUa0pKVGtRQVVrVkNTVTVFQUZWT1FWVlVTRTlTU1ZwRlJBQk5SVlJJVDBSZlRrOVVYMEZNVEU5WFJVUUFTRlJVVUY5V1JWSlRTVTlPWDA1UFZGOVRWVkJRVDFKVVJVUUFRVXhTUlVGRVdWOVNSVkJQVWxSRlJBQkJRME5GVUZSRlJBQk9UMVJmU1UxUVRFVk5SVTVVUlVRQVRFOVBVRjlFUlZSRlExUkZSQUJJVUVWZlExSmZSVmhRUlVOVVJVUUFTRkJGWDB4R1gwVllVRVZEVkVWRUFFTlNSVUZVUlVRQVNVMWZWVk5GUkFCSVVFVmZVRUZWVTBWRUFGUkpUVVZQVlZSZlQwTkRWVkpGUkFCUVFWbE5SVTVVWDFKRlVWVkpVa1ZFQUZCU1JVTlBUa1JKVkVsUFRsOVNSVkZWU1ZKRlJBQlFVazlZV1Y5QlZWUklSVTVVU1VOQlZFbFBUbDlTUlZGVlNWSkZSQUJPUlZSWFQxSkxYMEZWVkVoRlRsUkpRMEZVU1U5T1gxSkZVVlZKVWtWRUFFeEZUa2RVU0Y5U1JWRlZTVkpGUkFCVFUweGZRMFZTVkVsR1NVTkJWRVZmVWtWUlZVbFNSVVFBVlZCSFVrRkVSVjlTUlZGVlNWSkZSQUJRUVVkRlgwVllVRWxTUlVRQVVGSkZRMDlPUkVsVVNVOU9YMFpCU1V4RlJBQkZXRkJGUTFSQlZFbFBUbDlHUVVsTVJVUUFVa1ZXUVV4SlJFRlVTVTlPWDBaQlNVeEZSQUJUVTB4ZlNFRk9SRk5JUVV0RlgwWkJTVXhGUkFCTVQwTkxSVVFBVkZKQlRsTkdUMUpOUVZSSlQwNWZRVkJRVEVsRlJBQk9UMVJmVFU5RVNVWkpSVVFBVGs5VVgwVllWRVZPUkVWRUFFSkJUa1JYU1VSVVNGOU1TVTFKVkY5RldFTkZSVVJGUkFCVFNWUkZYMGxUWDA5V1JWSk1UMEZFUlVRQVNFVkJSQUJGZUhCbFkzUmxaQ0JJVkZSUUx3QUFYaE1BQUNZVEFBQXdFQUFBOEJjQUFKMFRBQUFWRWdBQU9SY0FBUEFTQUFBS0VBQUFkUklBQUswU0FBQ0NFd0FBVHhRQUFIOFFBQUNnRlFBQUl4UUFBSWtTQUFDTEZBQUFUUlVBQU5RUkFBRFBGQUFBRUJnQUFNa1dBQURjRmdBQXdSRUFBT0FYQUFDN0ZBQUFkQlFBQUh3VkFBRGxGQUFBQ0JjQUFCOFFBQUJsRlFBQW94UUFBQ2dWQUFBQ0ZRQUFtUlVBQUN3UUFBQ0xHUUFBVHc4QUFOUU9BQUJxRUFBQXpoQUFBQUlYQUFDSkRnQUFiaE1BQUJ3VEFBQm1GQUFBVmhjQUFNRVRBQURORXdBQWJCTUFBR2dYQUFCbUZ3QUFYeGNBQUNJVEFBRE9Ed0FBYVE0QUFOZ09BQUJqRmdBQXl4TUFBS29PQUFBb0Z3QUFKaGNBQU1VVEFBQmRGZ0FBNkJFQUFHY1RBQUJsRXdBQThoWUFBSE1UQUFBZEZ3QUErUllBQVBNUkFBRFBEZ0FBemhVQUFBd1NBQUN6RVFBQXBSRUFBR0VRQUFBeUZ3QUF1eE1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBUUlCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFJREFnSUNBZ0lBQUFJQ0FBSUNBQUlDQWdJQ0FnSUNBZ0lBQkFBQUFBQUFBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFBQUFDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdBQ0FBSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNBQUlDQWdJQ0FBQUNBZ0FDQWdBQ0FnSUNBZ0lDQWdJQ0FBTUFCQUFBQUFJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUFBQUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFBZ0FDQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWJHOXpaV1ZsY0MxaGJHbDJaUUFBQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQkFRRUJBUUVCQVFFQkFRSUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCWTJoMWJtdGxaQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRRUFBUUVCQVFFQUFBRUJBQUVCQUFFQkFRRUJBUUVCQVFFQUFBQUFBQUFBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQUFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCbFkzUnBiMjVsYm5RdGJHVnVaM1JvYjI1eWIzaDVMV052Ym01bFkzUnBiMjRBQUFBQUFBQUFBQUFBQUFBQUFBQnlZVzV6Wm1WeUxXVnVZMjlrYVc1bmNHZHlZV1JsRFFvTkNnMEtVMDBOQ2cwS1ZGUlFMME5GTDFSVFVDOEFBQUFBQUFBQUFBQUFBQUFCQWdBQkF3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBQUFBQUFBQUFBQUFRSUFBUU1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQVFFRkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFBQUFBQUFBQUFBQUVBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUJBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFBQUFBQUFBQUFBQUFRQUFBZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1FQUFBRUJBUUVCQVFFQkFRRUJBVUVCQVFFQkFRRUJBUUVCQVFBQkFBR0J3UUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUVBQVFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFJQUFBQUFBQUFEQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd0FBQUFBQUFBTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUlBQUFBQUFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNQUFBQUFBQUFEQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQk9UMVZPUTBWRlEwdFBWVlJPUlVOVVJWUkZRMUpKUWtWTVZWTklSVlJGUVVSVFJVRlNRMGhTUjBWRFZFbFdTVlJaVEVWT1JFRlNWa1ZQVkVsR1dWQlVTVTlPVTBOSVUwVkJXVk5VUVZSRFNFZEZUMUpFU1ZKRlExUlBVbFJTUTBoUVFWSkJUVVZVUlZKVlVrTkZRbE5EVWtsQ1JVRlNSRTlYVGtGRFJVbE9SRTVMUTB0VlFsTkRVa2xDUlVoVVZGQXZRVVJVVUM4PSdcbiIsICJtb2R1bGUuZXhwb3J0cyA9ICdBR0Z6YlFFQUFBQUJNQWhnQVg4QmYyQURmMzkvQVg5Z0JIOS9mMzhCZjJBQUFHQURmMzkvQUdBQmZ3QmdBbjkvQUdBR2YzOS9mMzkvQUFMTEFRZ0RaVzUyR0hkaGMyMWZiMjVmYUdWaFpHVnljMTlqYjIxd2JHVjBaUUFDQTJWdWRoVjNZWE50WDI5dVgyMWxjM05oWjJWZlltVm5hVzRBQUFObGJuWUxkMkZ6YlY5dmJsOTFjbXdBQVFObGJuWU9kMkZ6YlY5dmJsOXpkR0YwZFhNQUFRTmxibllVZDJGemJWOXZibDlvWldGa1pYSmZabWxsYkdRQUFRTmxibllVZDJGemJWOXZibDlvWldGa1pYSmZkbUZzZFdVQUFRTmxibllNZDJGemJWOXZibDlpYjJSNUFBRURaVzUyR0hkaGMyMWZiMjVmYldWemMyRm5aVjlqYjIxd2JHVjBaUUFBQTBaRkF3TUVBQUFGQUFBQUFBQUFCUUVGQUFVRkJRQUFCZ0FBQUFBR0JnWUdBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBQUFCQVFjQUFBVUZBd0FCQkFVQmNBRVNFZ1VEQVFBQ0JnZ0Jmd0ZCZ05RRUN3ZlJCU0lHYldWdGIzSjVBZ0FMWDJsdWFYUnBZV3hwZW1VQUNSbGZYMmx1WkdseVpXTjBYMloxYm1OMGFXOXVYM1JoWW14bEFRQUxiR3hvZEhSd1gybHVhWFFBQ2hoc2JHaDBkSEJmYzJodmRXeGtYMnRsWlhCZllXeHBkbVVBUVF4c2JHaDBkSEJmWVd4c2IyTUFEQVp0WVd4c2IyTUFSZ3RzYkdoMGRIQmZabkpsWlFBTkJHWnlaV1VBU0E5c2JHaDBkSEJmWjJWMFgzUjVjR1VBRGhWc2JHaDBkSEJmWjJWMFgyaDBkSEJmYldGcWIzSUFEeFZzYkdoMGRIQmZaMlYwWDJoMGRIQmZiV2x1YjNJQUVCRnNiR2gwZEhCZloyVjBYMjFsZEdodlpBQVJGbXhzYUhSMGNGOW5aWFJmYzNSaGRIVnpYMk52WkdVQUVoSnNiR2gwZEhCZloyVjBYM1Z3WjNKaFpHVUFFd3hzYkdoMGRIQmZjbVZ6WlhRQUZBNXNiR2gwZEhCZlpYaGxZM1YwWlFBVkZHeHNhSFIwY0Y5elpYUjBhVzVuYzE5cGJtbDBBQllOYkd4b2RIUndYMlpwYm1semFBQVhER3hzYUhSMGNGOXdZWFZ6WlFBWURXeHNhSFIwY0Y5eVpYTjFiV1VBR1J0c2JHaDBkSEJmY21WemRXMWxYMkZtZEdWeVgzVndaM0poWkdVQUdoQnNiR2gwZEhCZloyVjBYMlZ5Y201dkFCc1hiR3hvZEhSd1gyZGxkRjlsY25KdmNsOXlaV0Z6YjI0QUhCZHNiR2gwZEhCZmMyVjBYMlZ5Y205eVgzSmxZWE52YmdBZEZHeHNhSFIwY0Y5blpYUmZaWEp5YjNKZmNHOXpBQjRSYkd4b2RIUndYMlZ5Y201dlgyNWhiV1VBSHhKc2JHaDBkSEJmYldWMGFHOWtYMjVoYldVQUlCSnNiR2gwZEhCZmMzUmhkSFZ6WDI1aGJXVUFJUnBzYkdoMGRIQmZjMlYwWDJ4bGJtbGxiblJmYUdWaFpHVnljd0FpSVd4c2FIUjBjRjl6WlhSZmJHVnVhV1Z1ZEY5amFIVnVhMlZrWDJ4bGJtZDBhQUFqSFd4c2FIUjBjRjl6WlhSZmJHVnVhV1Z1ZEY5clpXVndYMkZzYVhabEFDUWtiR3hvZEhSd1gzTmxkRjlzWlc1cFpXNTBYM1J5WVc1elptVnlYMlZ1WTI5a2FXNW5BQ1VZYkd4b2RIUndYMjFsYzNOaFoyVmZibVZsWkhOZlpXOW1BRDhKRndFQVFRRUxFUUVDQXdRRkN3WUhOVGszTVM4dEp5c3BDckxnQWtVQ0FBc0lBQkNJZ0lDQUFBc1pBQ0FBRU1LQWdJQUFHaUFBSUFJMkFqZ2dBQ0FCT2dBb0N4d0FJQUFnQUM4Qk1pQUFMUUF1SUFBUXdZQ0FnQUFRZ0lDQWdBQUxLZ0VCZjBIQUFCREdnSUNBQUNJQkVNS0FnSUFBR2lBQlFZQ0lnSUFBTmdJNElBRWdBRG9BS0NBQkN3b0FJQUFReUlDQWdBQUxCd0FnQUMwQUtBc0hBQ0FBTFFBcUN3Y0FJQUF0QUNzTEJ3QWdBQzBBS1FzSEFDQUFMd0V5Q3djQUlBQXRBQzRMUlFFRWZ5QUFLQUlZSVFFZ0FDMEFMU0VDSUFBdEFDZ2hBeUFBS0FJNElRUWdBQkRDZ0lDQUFCb2dBQ0FFTmdJNElBQWdBem9BS0NBQUlBSTZBQzBnQUNBQk5nSVlDeEVBSUFBZ0FTQUJJQUpxRU1PQWdJQUFDeEFBSUFCQkFFSGNBQkRNZ0lDQUFCb0xad0VCZjBFQUlRRUNRQ0FBS0FJTURRQUNRQUpBQWtBQ1FDQUFMUUF2RGdNQkFBTUNDeUFBS0FJNElnRkZEUUFnQVNnQ0xDSUJSUTBBSUFBZ0FSR0FnSUNBQUFBaUFRMERDMEVBRHdzUXlvQ0FnQUFBQ3lBQVFjT1dnSUFBTmdJUVFRNGhBUXNnQVFzZUFBSkFJQUFvQWd3TkFDQUFRZEdiZ0lBQU5nSVFJQUJCRlRZQ0RBc0xGZ0FDUUNBQUtBSU1RUlZIRFFBZ0FFRUFOZ0lNQ3dzV0FBSkFJQUFvQWd4QkZrY05BQ0FBUVFBMkFnd0xDd2NBSUFBb0Fnd0xCd0FnQUNnQ0VBc0pBQ0FBSUFFMkFoQUxCd0FnQUNnQ0ZBc2lBQUpBSUFCQkpFa05BQkRLZ0lDQUFBQUxJQUJCQW5SQm9MT0FnQUJxS0FJQUN5SUFBa0FnQUVFdVNRMEFFTXFBZ0lBQUFBc2dBRUVDZEVHd3RJQ0FBR29vQWdBTDdnc0JBWDlCNjZpQWdBQWhBUUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQm5IOXFEdlFEWTJJQUFXRmhZV0ZoWVFJREJBVmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoQmdjSUNRb0xEQTBPRDJGaFlXRmhFR0ZoWVdGaFlXRmhZV0ZoRVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVJJVEZCVVdGeGdaR2h0aFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaEhCMGVIeUFoSWlNa0pTWW5LQ2txS3l3dExpOHdNVEl6TkRVMllUYzRPVHBoWVdGaFlXRmhZVHRoWVdFOFlXRmhZVDArUDJGaFlXRmhZV0ZoUUdGaFFXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZVUpEUkVWR1IwaEpTa3RNVFU1UFVGRlNVMkZoWVdGaFlXRmhWRlZXVjFoWldsdGhYRjFoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGZVlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFgyQmhDMEhocDRDQUFBOExRYVNoZ0lBQUR3dEJ5NnlBZ0FBUEMwSCtzWUNBQUE4TFFjQ2tnSUFBRHd0QnE2U0FnQUFQQzBHTnFJQ0FBQThMUWVLbWdJQUFEd3RCZ0xDQWdBQVBDMEc1cjRDQUFBOExRZGVrZ0lBQUR3dEI3NStBZ0FBUEMwSGhuNENBQUE4TFFmcWZnSUFBRHd0QjhxQ0FnQUFQQzBHb3I0Q0FBQThMUWE2eWdJQUFEd3RCaUxDQWdBQVBDMEhzcDRDQUFBOExRWUtpZ0lBQUR3dEJqcDJBZ0FBUEMwSFFyb0NBQUE4TFFjcWpnSUFBRHd0QnhiS0FnQUFQQzBIZm5JQ0FBQThMUWRLY2dJQUFEd3RCeEtDQWdBQVBDMEhYb0lDQUFBOExRYUtmZ0lBQUR3dEI3YTZBZ0FBUEMwR3JzSUNBQUE4TFFkU2xnSUFBRHd0QnpLNkFnQUFQQzBINnJvQ0FBQThMUWZ5cmdJQUFEd3RCMHJDQWdBQVBDMEh4bllDQUFBOExRYnVnZ0lBQUR3dEI5NnVBZ0FBUEMwR1FzWUNBQUE4TFFkZXhnSUFBRHd0Qm9xMkFnQUFQQzBIVXA0Q0FBQThMUWVDcmdJQUFEd3RCbjZ5QWdBQVBDMEhyc1lDQUFBOExRZFdmZ0lBQUR3dEJ5ckdBZ0FBUEMwSGVwWUNBQUE4TFFkU2VnSUFBRHd0QjlKeUFnQUFQQzBHbnNvQ0FBQThMUWJHZGdJQUFEd3RCb0oyQWdBQVBDMEc1c1lDQUFBOExRYnl3Z0lBQUR3dEJrcUdBZ0FBUEMwR3pwb0NBQUE4TFFlbXNnSUFBRHd0QnJKNkFnQUFQQzBIVXE0Q0FBQThMUWZlbWdJQUFEd3RCZ0thQWdBQVBDMEd3b1lDQUFBOExRZjZlZ0lBQUR3dEJqYU9BZ0FBUEMwR0pyWUNBQUE4TFFmZWlnSUFBRHd0Qm9MR0FnQUFQQzBHdW40Q0FBQThMUWNhbGdJQUFEd3RCNko2QWdBQVBDMEdUb29DQUFBOExRY0t2Z0lBQUR3dEJ3NTJBZ0FBUEMwR0xySUNBQUE4TFFlR2RnSUFBRHd0QmphK0FnQUFQQzBIcW9ZQ0FBQThMUWJTdGdJQUFEd3RCMHErQWdBQVBDMEhmc29DQUFBOExRZEt5Z0lBQUR3dEI4TENBZ0FBUEMwR3Bvb0NBQUE4TFFmbWpnSUFBRHd0Qm1aNkFnQUFQQzBHMXJJQ0FBQThMUVp1d2dJQUFEd3RCa3JLQWdBQVBDMEcycTRDQUFBOExRY0tpZ0lBQUR3dEIrTEtBZ0FBUEMwR2VwWUNBQUE4TFFkQ2lnSUFBRHd0QnVwNkFnQUFQQzBHQm5vQ0FBQThMRU1xQWdJQUFBQXRCMXFHQWdBQWhBUXNnQVFzV0FDQUFJQUF0QUMxQi9nRnhJQUZCQUVkeU9nQXRDeGtBSUFBZ0FDMEFMVUg5QVhFZ0FVRUFSMEVCZEhJNkFDMExHUUFnQUNBQUxRQXRRZnNCY1NBQlFRQkhRUUowY2pvQUxRc1pBQ0FBSUFBdEFDMUI5d0Z4SUFGQkFFZEJBM1J5T2dBdEN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWdBaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxTUUVDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0JDSUVSUTBBSUFBZ0FTQUNJQUZySUFRUmdZQ0FnQUFBSWdOQmYwY05BQ0FBUWNhUmdJQUFOZ0lRUVJnaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSXdJZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQzBrQkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BZ2dpQkVVTkFDQUFJQUVnQWlBQmF5QUVFWUdBZ0lBQUFDSURRWDlIRFFBZ0FFSDJpb0NBQURZQ0VFRVlJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDTkNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEpBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJTUlnUkZEUUFnQUNBQklBSWdBV3NnQkJHQmdJQ0FBQUFpQTBGL1J3MEFJQUJCN1pxQWdBQTJBaEJCR0NFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FqZ2lCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NFQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFaV1FnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUk4SWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREMwa0JBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWhRaUJFVU5BQ0FBSUFFZ0FpQUJheUFFRVlHQWdJQUFBQ0lEUVg5SERRQWdBRUdxbTRDQUFEWUNFRUVZSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ1FDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RKQVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSVlJZ1JGRFFBZ0FDQUJJQUlnQVdzZ0JCR0JnSUNBQUFBaUEwRi9SdzBBSUFCQjdaT0FnQUEyQWhCQkdDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9Ba1FpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDSkNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJc0lnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDMGtCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FpZ2lCRVVOQUNBQUlBRWdBaUFCYXlBRUVZR0FnSUFBQUNJRFFYOUhEUUFnQUVIMmlJQ0FBRFlDRUVFWUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NVQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0SkFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUljSWdSRkRRQWdBQ0FCSUFJZ0FXc2dCQkdCZ0lDQUFBQWlBMEYvUncwQUlBQkJ3cG1BZ0FBMkFoQkJHQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWtnaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxTUUVDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0lDSUVSUTBBSUFBZ0FTQUNJQUZySUFRUmdZQ0FnQUFBSWdOQmYwY05BQ0FBUVpTVWdJQUFOZ0lRUVJnaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSk1JZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BbFFpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDV0NJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEZBUUYvQWtBQ1FDQUFMd0V3UVJSeFFSUkhEUUJCQVNFRElBQXRBQ2hCQVVZTkFTQUFMd0V5UWVVQVJpRUREQUVMSUFBdEFDbEJCVVloQXdzZ0FDQURPZ0F1UVFBTC9nRUJBMzlCQVNFREFrQWdBQzhCTUNJRVFRaHhEUUFnQUNrRElFSUFVaUVEQ3dKQUFrQWdBQzBBTGtVTkFFRUJJUVVnQUMwQUtVRUZSZzBCUVFFaEJTQUVRY0FBY1VVZ0EzRkJBVWNOQVF0QkFDRUZJQVJCd0FCeERRQkJBaUVGSUFSQi8vOERjU0lEUVFoeERRQUNRQ0FEUVlBRWNVVU5BQUpBSUFBdEFDaEJBVWNOQUNBQUxRQXRRUXB4RFFCQkJROExRUVFQQ3dKQUlBTkJJSEVOQUFKQUlBQXRBQ2hCQVVZTkFDQUFMd0V5UWYvL0EzRWlBRUdjZjJwQjVBQkpEUUFnQUVITUFVWU5BQ0FBUWJBQ1JnMEFRUVFoQlNBRVFTaHhSUTBDSUFOQmlBUnhRWUFFUmcwQ0MwRUFEd3RCQUVFRElBQXBBeUJRR3lFRkN5QUZDMklCQW45QkFDRUJBa0FnQUMwQUtFRUJSZzBBSUFBdkFUSkIvLzhEY1NJQ1FaeC9ha0hrQUVrTkFDQUNRY3dCUmcwQUlBSkJzQUpHRFFBZ0FDOEJNQ0lBUWNBQWNRMEFRUUVoQVNBQVFZZ0VjVUdBQkVZTkFDQUFRU2h4UlNFQkN5QUJDNmNCQVFOL0FrQUNRQUpBSUFBdEFDcEZEUUFnQUMwQUswVU5BRUVBSVFNZ0FDOEJNQ0lFUVFKeFJRMEJEQUlMUVFBaEF5QUFMd0V3SWdSQkFYRkZEUUVMUVFFaEF5QUFMUUFvUVFGR0RRQWdBQzhCTWtILy93TnhJZ1ZCbkg5cVFlUUFTUTBBSUFWQnpBRkdEUUFnQlVHd0FrWU5BQ0FFUWNBQWNRMEFRUUFoQXlBRVFZZ0VjVUdBQkVZTkFDQUVRU2h4UVFCSElRTUxJQUJCQURzQk1DQUFRUUE2QUM4Z0F3dVpBUUVDZndKQUFrQUNRQ0FBTFFBcVJRMEFJQUF0QUN0RkRRQkJBQ0VCSUFBdkFUQWlBa0VDY1VVTkFRd0NDMEVBSVFFZ0FDOEJNQ0lDUVFGeFJRMEJDMEVCSVFFZ0FDMEFLRUVCUmcwQUlBQXZBVEpCLy84RGNTSUFRWngvYWtIa0FFa05BQ0FBUWN3QlJnMEFJQUJCc0FKR0RRQWdBa0hBQUhFTkFFRUFJUUVnQWtHSUJIRkJnQVJHRFFBZ0FrRW9jVUVBUnlFQkN5QUJDMGtCQVhzZ0FFRVFhdjBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0lCL1FzREFDQUFJQUg5Q3dNQUlBQkJNR29nQWYwTEF3QWdBRUVnYWlBQi9Rc0RBQ0FBUWQwQk5nSWNRUUFMZXdFQmZ3SkFJQUFvQWd3aUF3MEFBa0FnQUNnQ0JFVU5BQ0FBSUFFMkFnUUxBa0FnQUNBQklBSVF4SUNBZ0FBaUF3MEFJQUFvQWd3UEN5QUFJQU0yQWh4QkFDRURJQUFvQWdRaUFVVU5BQ0FBSUFFZ0FpQUFLQUlJRVlHQWdJQUFBQ0lCUlEwQUlBQWdBallDRkNBQUlBRTJBZ3dnQVNFREN5QURDK1R6QVFNT2Z3TitCSDhqZ0lDQWdBQkJFR3NpQXlTQWdJQ0FBQ0FCSVFRZ0FTRUZJQUVoQmlBQklRY2dBU0VJSUFFaENTQUJJUW9nQVNFTElBRWhEQ0FCSVEwZ0FTRU9JQUVoRHdKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBQUtBSWNJaEJCZjJvTzNRSGFBUUhaQVFJREJBVUdCd2dKQ2dzTURRN1lBUThRMXdFUkV0WUJFeFFWRmhjWUdSb2I0QUhmQVJ3ZEh0VUJIeUFoSWlNa0pkUUJKaWNvS1NvckxOTUIwZ0V0THRFQjBBRXZNREV5TXpRMU5qYzRPVG83UEQwK1AwQkJRa05FUlViYkFVZElTVXJQQWM0QlM4MEJUTXdCVFU1UFVGRlNVMVJWVmxkWVdWcGJYRjFlWDJCaFltTmtaV1puYUdscWEyeHRibTl3Y1hKemRIVjJkM2g1ZW50OGZYNS9nQUdCQVlJQmd3R0VBWVVCaGdHSEFZZ0JpUUdLQVlzQmpBR05BWTRCandHUUFaRUJrZ0dUQVpRQmxRR1dBWmNCbUFHWkFab0Jtd0djQVowQm5nR2ZBYUFCb1FHaUFhTUJwQUdsQWFZQnB3R29BYWtCcWdHckFhd0JyUUd1QWE4QnNBR3hBYklCc3dHMEFiVUJ0Z0czQWNzQnlnRzRBY2tCdVFISUFib0J1d0c4QWIwQnZnRy9BY0FCd1FIQ0FjTUJ4QUhGQWNZQkFOd0JDMEVBSVJBTXhnRUxRUTRoRUF6RkFRdEJEU0VRRE1RQkMwRVBJUkFNd3dFTFFSQWhFQXpDQVF0QkV5RVFETUVCQzBFVUlSQU13QUVMUVJVaEVBeS9BUXRCRmlFUURMNEJDMEVYSVJBTXZRRUxRUmdoRUF5OEFRdEJHU0VRRExzQkMwRWFJUkFNdWdFTFFSc2hFQXk1QVF0QkhDRVFETGdCQzBFSUlSQU10d0VMUVIwaEVBeTJBUXRCSUNFUURMVUJDMEVmSVJBTXRBRUxRUWNoRUF5ekFRdEJJU0VRRExJQkMwRWlJUkFNc1FFTFFSNGhFQXl3QVF0Qkl5RVFESzhCQzBFU0lSQU1yZ0VMUVJFaEVBeXRBUXRCSkNFUURLd0JDMEVsSVJBTXF3RUxRU1loRUF5cUFRdEJKeUVRREtrQkMwSERBU0VRREtnQkMwRXBJUkFNcHdFTFFTc2hFQXltQVF0QkxDRVFES1VCQzBFdElSQU1wQUVMUVM0aEVBeWpBUXRCTHlFUURLSUJDMEhFQVNFUURLRUJDMEV3SVJBTW9BRUxRVFFoRUF5ZkFRdEJEQ0VRREo0QkMwRXhJUkFNblFFTFFUSWhFQXljQVF0Qk15RVFESnNCQzBFNUlSQU1tZ0VMUVRVaEVBeVpBUXRCeFFFaEVBeVlBUXRCQ3lFUURKY0JDMEU2SVJBTWxnRUxRVFloRUF5VkFRdEJDaUVRREpRQkMwRTNJUkFNa3dFTFFUZ2hFQXlTQVF0QlBDRVFESkVCQzBFN0lSQU1rQUVMUVQwaEVBeVBBUXRCQ1NFUURJNEJDMEVvSVJBTWpRRUxRVDRoRUF5TUFRdEJQeUVRRElzQkMwSEFBQ0VRRElvQkMwSEJBQ0VRRElrQkMwSENBQ0VRRElnQkMwSERBQ0VRREljQkMwSEVBQ0VRRElZQkMwSEZBQ0VRRElVQkMwSEdBQ0VRRElRQkMwRXFJUkFNZ3dFTFFjY0FJUkFNZ2dFTFFjZ0FJUkFNZ1FFTFFja0FJUkFNZ0FFTFFjb0FJUkFNZnd0Qnl3QWhFQXgrQzBITkFDRVFESDBMUWN3QUlSQU1mQXRCemdBaEVBeDdDMEhQQUNFUURIb0xRZEFBSVJBTWVRdEIwUUFoRUF4NEMwSFNBQ0VRREhjTFFkTUFJUkFNZGd0QjFBQWhFQXgxQzBIV0FDRVFESFFMUWRVQUlSQU1jd3RCQmlFUURISUxRZGNBSVJBTWNRdEJCU0VRREhBTFFkZ0FJUkFNYnd0QkJDRVFERzRMUWRrQUlSQU1iUXRCMmdBaEVBeHNDMEhiQUNFUURHc0xRZHdBSVJBTWFndEJBeUVRREdrTFFkMEFJUkFNYUF0QjNnQWhFQXhuQzBIZkFDRVFER1lMUWVFQUlSQU1aUXRCNEFBaEVBeGtDMEhpQUNFUURHTUxRZU1BSVJBTVlndEJBaUVRREdFTFFlUUFJUkFNWUF0QjVRQWhFQXhmQzBIbUFDRVFERjRMUWVjQUlSQU1YUXRCNkFBaEVBeGNDMEhwQUNFUURGc0xRZW9BSVJBTVdndEI2d0FoRUF4WkMwSHNBQ0VRREZnTFFlMEFJUkFNVnd0QjdnQWhFQXhXQzBIdkFDRVFERlVMUWZBQUlSQU1WQXRCOFFBaEVBeFRDMEh5QUNFUURGSUxRZk1BSVJBTVVRdEI5QUFoRUF4UUMwSDFBQ0VRREU4TFFmWUFJUkFNVGd0Qjl3QWhFQXhOQzBINEFDRVFERXdMUWZrQUlSQU1Td3RCK2dBaEVBeEtDMEg3QUNFUURFa0xRZndBSVJBTVNBdEIvUUFoRUF4SEMwSCtBQ0VRREVZTFFmOEFJUkFNUlF0QmdBRWhFQXhFQzBHQkFTRVFERU1MUVlJQklSQU1RZ3RCZ3dFaEVBeEJDMEdFQVNFUURFQUxRWVVCSVJBTVB3dEJoZ0VoRUF3K0MwR0hBU0VRREQwTFFZZ0JJUkFNUEF0QmlRRWhFQXc3QzBHS0FTRVFERG9MUVlzQklSQU1PUXRCakFFaEVBdzRDMEdOQVNFUUREY0xRWTRCSVJBTU5ndEJqd0VoRUF3MUMwR1FBU0VRRERRTFFaRUJJUkFNTXd0QmtnRWhFQXd5QzBHVEFTRVFEREVMUVpRQklSQU1NQXRCbFFFaEVBd3ZDMEdXQVNFUURDNExRWmNCSVJBTUxRdEJtQUVoRUF3c0MwR1pBU0VRRENzTFFab0JJUkFNS2d0Qm13RWhFQXdwQzBHY0FTRVFEQ2dMUVowQklSQU1Kd3RCbmdFaEVBd21DMEdmQVNFUURDVUxRYUFCSVJBTUpBdEJvUUVoRUF3akMwR2lBU0VRRENJTFFhTUJJUkFNSVF0QnBBRWhFQXdnQzBHbEFTRVFEQjhMUWFZQklSQU1IZ3RCcHdFaEVBd2RDMEdvQVNFUURCd0xRYWtCSVJBTUd3dEJxZ0VoRUF3YUMwR3JBU0VRREJrTFFhd0JJUkFNR0F0QnJRRWhFQXdYQzBHdUFTRVFEQllMUVFFaEVBd1ZDMEd2QVNFUURCUUxRYkFCSVJBTUV3dEJzUUVoRUF3U0MwR3pBU0VRREJFTFFiSUJJUkFNRUF0QnRBRWhFQXdQQzBHMUFTRVFEQTRMUWJZQklSQU1EUXRCdHdFaEVBd01DMEc0QVNFUURBc0xRYmtCSVJBTUNndEJ1Z0VoRUF3SkMwRzdBU0VRREFnTFFjWUJJUkFNQnd0QnZBRWhFQXdHQzBHOUFTRVFEQVVMUWI0QklSQU1CQXRCdndFaEVBd0RDMEhBQVNFUURBSUxRY0lCSVJBTUFRdEJ3UUVoRUFzRFFBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQkFPeHdFQUFRSURCQVVHQndnSkNnc01EUTRQRUJFU0V4UVZGaGNZR1JvYkhCNGZJQ0VqSlNnL1FFRkVSVVpIU0VsS1MweE5UMUJSVWxQZUExZFpXMXhkWUdKbFptZG9hV3ByYkcxdmNIRnljM1IxZG5kNGVYcDdmSDErZ0FHQ0FZVUJoZ0dIQVlrQml3R01BWTBCamdHUEFaQUJrUUdVQVpVQmxnR1hBWmdCbVFHYUFac0JuQUdkQVo0Qm53R2dBYUVCb2dHakFhUUJwUUdtQWFjQnFBR3BBYW9CcXdHc0FhMEJyZ0d2QWJBQnNRR3lBYk1CdEFHMUFiWUJ0d0c0QWJrQnVnRzdBYndCdlFHK0FiOEJ3QUhCQWNJQnd3SEVBY1VCeGdISEFjZ0J5UUhLQWNzQnpBSE5BYzRCendIUUFkRUIwZ0hUQWRRQjFRSFdBZGNCMkFIWkFkb0Iyd0hjQWQwQjNnSGdBZUVCNGdIakFlUUI1UUhtQWVjQjZBSHBBZW9CNndIc0FlMEI3Z0h2QWZBQjhRSHlBZk1CbVFLa0FyQUMvZ0wrQWdzZ0FTSUVJQUpIRGZNQlFkMEJJUkFNL3dNTElBRWlFQ0FDUnczZEFVSERBU0VRRFA0REN5QUJJZ0VnQWtjTmtBRkI5d0FoRUF6OUF3c2dBU0lCSUFKSERZWUJRZThBSVJBTS9BTUxJQUVpQVNBQ1J3MS9RZW9BSVJBTSt3TUxJQUVpQVNBQ1J3MTdRZWdBSVJBTStnTUxJQUVpQVNBQ1J3MTRRZVlBSVJBTStRTUxJQUVpQVNBQ1J3MGFRUmdoRUF6NEF3c2dBU0lCSUFKSERSUkJFaUVRRFBjREN5QUJJZ0VnQWtjTldVSEZBQ0VRRFBZREN5QUJJZ0VnQWtjTlNrRS9JUkFNOVFNTElBRWlBU0FDUncxSVFUd2hFQXowQXdzZ0FTSUJJQUpIRFVGQk1TRVFEUE1EQ3lBQUxRQXVRUUZHRGVzRERJY0NDeUFBSUFFaUFTQUNFTUNBZ0lBQVFRRkhEZVlCSUFCQ0FEY0RJQXpuQVFzZ0FDQUJJZ0VnQWhDMGdJQ0FBQ0lRRGVjQklBRWhBUXoxQWdzQ1FDQUJJZ0VnQWtjTkFFRUdJUkFNOEFNTElBQWdBVUVCYWlJQklBSVF1NENBZ0FBaUVBM29BU0FCSVFFTU1Rc2dBRUlBTndNZ1FSSWhFQXpWQXdzZ0FTSVFJQUpIRFN0QkhTRVFETzBEQ3dKQUlBRWlBU0FDUmcwQUlBRkJBV29oQVVFUUlSQU0xQU1MUVFjaEVBenNBd3NnQUVJQUlBQXBBeUFpRVNBQ0lBRWlFR3V0SWhKOUloTWdFeUFSVmhzM0F5QWdFU0FTVmlJVVJRM2xBVUVJSVJBTTZ3TUxBa0FnQVNJQklBSkdEUUFnQUVHSmdJQ0FBRFlDQ0NBQUlBRTJBZ1FnQVNFQlFSUWhFQXpTQXd0QkNTRVFET29EQ3lBQklRRWdBQ2tESUZBTjVBRWdBU0VCRFBJQ0N3SkFJQUVpQVNBQ1J3MEFRUXNoRUF6cEF3c2dBQ0FCUVFGcUlnRWdBaEMyZ0lDQUFDSVFEZVVCSUFFaEFRenlBZ3NnQUNBQklnRWdBaEM0Z0lDQUFDSVFEZVVCSUFFaEFRenlBZ3NnQUNBQklnRWdBaEM0Z0lDQUFDSVFEZVlCSUFFaEFRd05DeUFBSUFFaUFTQUNFTHFBZ0lBQUloQU41d0VnQVNFQkRQQUNDd0pBSUFFaUFTQUNSdzBBUVE4aEVBemxBd3NnQVMwQUFDSVFRVHRHRFFnZ0VFRU5SdzNvQVNBQlFRRnFJUUVNN3dJTElBQWdBU0lCSUFJUXVvQ0FnQUFpRUEzb0FTQUJJUUVNOGdJTEEwQUNRQ0FCTFFBQVFmQzFnSUFBYWkwQUFDSVFRUUZHRFFBZ0VFRUNSdzNyQVNBQUtBSUVJUkFnQUVFQU5nSUVJQUFnRUNBQlFRRnFJZ0VRdVlDQWdBQWlFQTNxQVNBQklRRU05QUlMSUFGQkFXb2lBU0FDUncwQUMwRVNJUkFNNGdNTElBQWdBU0lCSUFJUXVvQ0FnQUFpRUEzcEFTQUJJUUVNQ2dzZ0FTSUJJQUpIRFFaQkd5RVFET0FEQ3dKQUlBRWlBU0FDUncwQVFSWWhFQXpnQXdzZ0FFR0tnSUNBQURZQ0NDQUFJQUUyQWdRZ0FDQUJJQUlRdUlDQWdBQWlFQTNxQVNBQklRRkJJQ0VRRE1ZREN3SkFJQUVpQVNBQ1JnMEFBMEFDUUNBQkxRQUFRZkMzZ0lBQWFpMEFBQ0lRUVFKR0RRQUNRQ0FRUVg5cURnVGxBZXdCQU9zQjdBRUxJQUZCQVdvaEFVRUlJUkFNeUFNTElBRkJBV29pQVNBQ1J3MEFDMEVWSVJBTTN3TUxRUlVoRUF6ZUF3c0RRQUpBSUFFdEFBQkI4TG1BZ0FCcUxRQUFJaEJCQWtZTkFDQVFRWDlxRGdUZUFld0I0QUhyQWV3QkN5QUJRUUZxSWdFZ0FrY05BQXRCR0NFUUROMERDd0pBSUFFaUFTQUNSZzBBSUFCQmk0Q0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFVRUhJUkFNeEFNTFFSa2hFQXpjQXdzZ0FVRUJhaUVCREFJTEFrQWdBU0lVSUFKSERRQkJHaUVRRE5zREN5QVVJUUVDUUNBVUxRQUFRWE5xRGhUZEF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUFnRHVBZ3RCQUNFUUlBQkJBRFlDSENBQVFhK0xnSUFBTmdJUUlBQkJBallDRENBQUlCUkJBV28yQWhRTTJnTUxBa0FnQVMwQUFDSVFRVHRHRFFBZ0VFRU5SdzNvQVNBQlFRRnFJUUVNNVFJTElBRkJBV29oQVF0QklpRVFETDhEQ3dKQUlBRWlFQ0FDUncwQVFSd2hFQXpZQXd0Q0FDRVJJQkFoQVNBUUxRQUFRVkJxRGpmbkFlWUJBUUlEQkFVR0J3Z0FBQUFBQUFBQUNRb0xEQTBPQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQRUJFU0V4UUFDMEVlSVJBTXZRTUxRZ0loRVF6bEFRdENBeUVSRE9RQkMwSUVJUkVNNHdFTFFnVWhFUXppQVF0Q0JpRVJET0VCQzBJSElSRU00QUVMUWdnaEVRemZBUXRDQ1NFUkRONEJDMElLSVJFTTNRRUxRZ3NoRVF6Y0FRdENEQ0VSRE5zQkMwSU5JUkVNMmdFTFFnNGhFUXpaQVF0Q0R5RVJETmdCQzBJS0lSRU0xd0VMUWdzaEVReldBUXRDRENFUkROVUJDMElOSVJFTTFBRUxRZzRoRVF6VEFRdENEeUVSRE5JQkMwSUFJUkVDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlCQXRBQUJCVUdvT04rVUI1QUVBQVFJREJBVUdCK1lCNWdIbUFlWUI1Z0htQWVZQkNBa0tDd3dONWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BUTRQRUJFU0UrWUJDMElDSVJFTTVBRUxRZ01oRVF6akFRdENCQ0VSRE9JQkMwSUZJUkVNNFFFTFFnWWhFUXpnQVF0Q0J5RVJETjhCQzBJSUlSRU0zZ0VMUWdraEVRemRBUXRDQ2lFUkROd0JDMElMSVJFTTJ3RUxRZ3doRVF6YUFRdENEU0VSRE5rQkMwSU9JUkVNMkFFTFFnOGhFUXpYQVF0Q0NpRVJETllCQzBJTElSRU0xUUVMUWd3aEVRelVBUXRDRFNFUkROTUJDMElPSVJFTTBnRUxRZzhoRVF6UkFRc2dBRUlBSUFBcEF5QWlFU0FDSUFFaUVHdXRJaEo5SWhNZ0V5QVJWaHMzQXlBZ0VTQVNWaUlVUlEzU0FVRWZJUkFNd0FNTEFrQWdBU0lCSUFKR0RRQWdBRUdKZ0lDQUFEWUNDQ0FBSUFFMkFnUWdBU0VCUVNRaEVBeW5Bd3RCSUNFUURMOERDeUFBSUFFaUVDQUNFTDZBZ0lBQVFYOXFEZ1cyQVFERkFnSFJBZElCQzBFUklSQU1wQU1MSUFCQkFUb0FMeUFRSVFFTXV3TUxJQUVpQVNBQ1J3M1NBVUVrSVJBTXV3TUxJQUVpRFNBQ1J3MGVRY1lBSVJBTXVnTUxJQUFnQVNJQklBSVFzb0NBZ0FBaUVBM1VBU0FCSVFFTXRRRUxJQUVpRUNBQ1J3MG1RZEFBSVJBTXVBTUxBa0FnQVNJQklBSkhEUUJCS0NFUURMZ0RDeUFBUVFBMkFnUWdBRUdNZ0lDQUFEWUNDQ0FBSUFFZ0FSQ3hnSUNBQUNJUURkTUJJQUVoQVF6WUFRc0NRQ0FCSWhBZ0FrY05BRUVwSVJBTXR3TUxJQkF0QUFBaUFVRWdSZzBVSUFGQkNVY04wd0VnRUVFQmFpRUJEQlVMQWtBZ0FTSUJJQUpHRFFBZ0FVRUJhaUVCREJjTFFTb2hFQXkxQXdzQ1FDQUJJaEFnQWtjTkFFRXJJUkFNdFFNTEFrQWdFQzBBQUNJQlFRbEdEUUFnQVVFZ1J3M1ZBUXNnQUMwQUxFRUlSZzNUQVNBUUlRRU1rUU1MQWtBZ0FTSUJJQUpIRFFCQkxDRVFETFFEQ3lBQkxRQUFRUXBIRGRVQklBRkJBV29oQVF6SkFnc2dBU0lPSUFKSERkVUJRUzhoRUF5eUF3c0RRQUpBSUFFdEFBQWlFRUVnUmcwQUFrQWdFRUYyYWc0RUFOd0IzQUVBMmdFTElBRWhBUXpnQVFzZ0FVRUJhaUlCSUFKSERRQUxRVEVoRUF5eEF3dEJNaUVRSUFFaUZDQUNSZzJ3QXlBQ0lCUnJJQUFvQWdBaUFXb2hGU0FVSUFGclFRTnFJUllDUUFOQUlCUXRBQUFpRjBFZ2NpQVhJQmRCdjM5cVFmOEJjVUVhU1J0Qi93RnhJQUZCOEx1QWdBQnFMUUFBUncwQkFrQWdBVUVEUncwQVFRWWhBUXlXQXdzZ0FVRUJhaUVCSUJSQkFXb2lGQ0FDUncwQUN5QUFJQlUyQWdBTXNRTUxJQUJCQURZQ0FDQVVJUUVNMlFFTFFUTWhFQ0FCSWhRZ0FrWU5yd01nQWlBVWF5QUFLQUlBSWdGcUlSVWdGQ0FCYTBFSWFpRVdBa0FEUUNBVUxRQUFJaGRCSUhJZ0Z5QVhRYjkvYWtIL0FYRkJHa2tiUWY4QmNTQUJRZlM3Z0lBQWFpMEFBRWNOQVFKQUlBRkJDRWNOQUVFRklRRU1sUU1MSUFGQkFXb2hBU0FVUVFGcUloUWdBa2NOQUFzZ0FDQVZOZ0lBRExBREN5QUFRUUEyQWdBZ0ZDRUJETmdCQzBFMElSQWdBU0lVSUFKR0RhNERJQUlnRkdzZ0FDZ0NBQ0lCYWlFVklCUWdBV3RCQldvaEZnSkFBMEFnRkMwQUFDSVhRU0J5SUJjZ0YwRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVSFF3b0NBQUdvdEFBQkhEUUVDUUNBQlFRVkhEUUJCQnlFQkRKUURDeUFCUVFGcUlRRWdGRUVCYWlJVUlBSkhEUUFMSUFBZ0ZUWUNBQXl2QXdzZ0FFRUFOZ0lBSUJRaEFRelhBUXNDUUNBQklnRWdBa1lOQUFOQUFrQWdBUzBBQUVHQXZvQ0FBR290QUFBaUVFRUJSZzBBSUJCQkFrWU5DaUFCSVFFTTNRRUxJQUZCQVdvaUFTQUNSdzBBQzBFd0lSQU1yZ01MUVRBaEVBeXRBd3NDUUNBQklnRWdBa1lOQUFOQUFrQWdBUzBBQUNJUVFTQkdEUUFnRUVGMmFnNEUyUUhhQWRvQjJRSGFBUXNnQVVFQmFpSUJJQUpIRFFBTFFUZ2hFQXl0QXd0Qk9DRVFES3dEQ3dOQUFrQWdBUzBBQUNJUVFTQkdEUUFnRUVFSlJ3MERDeUFCUVFGcUlnRWdBa2NOQUF0QlBDRVFES3NEQ3dOQUFrQWdBUzBBQUNJUVFTQkdEUUFDUUFKQUlCQkJkbW9PQk5vQkFRSGFBUUFMSUJCQkxFWU4yd0VMSUFFaEFRd0VDeUFCUVFGcUlnRWdBa2NOQUF0QlB5RVFES29EQ3lBQklRRU0yd0VMUWNBQUlSQWdBU0lVSUFKR0RhZ0RJQUlnRkdzZ0FDZ0NBQ0lCYWlFV0lCUWdBV3RCQm1vaEZ3SkFBMEFnRkMwQUFFRWdjaUFCUVlEQWdJQUFhaTBBQUVjTkFTQUJRUVpHRFk0RElBRkJBV29oQVNBVVFRRnFJaFFnQWtjTkFBc2dBQ0FXTmdJQURLa0RDeUFBUVFBMkFnQWdGQ0VCQzBFMklSQU1qZ01MQWtBZ0FTSVBJQUpIRFFCQndRQWhFQXluQXdzZ0FFR01nSUNBQURZQ0NDQUFJQTgyQWdRZ0R5RUJJQUF0QUN4QmYyb09CTTBCMVFIWEFka0Jod01MSUFGQkFXb2hBUXpNQVFzQ1FDQUJJZ0VnQWtZTkFBTkFBa0FnQVMwQUFDSVFRU0J5SUJBZ0VFRy9mMnBCL3dGeFFScEpHMEgvQVhFaUVFRUpSZzBBSUJCQklFWU5BQUpBQWtBQ1FBSkFJQkJCblg5cURoTUFBd01EQXdNREF3RURBd01EQXdNREF3TUNBd3NnQVVFQmFpRUJRVEVoRUF5UkF3c2dBVUVCYWlFQlFUSWhFQXlRQXdzZ0FVRUJhaUVCUVRNaEVBeVBBd3NnQVNFQkROQUJDeUFCUVFGcUlnRWdBa2NOQUF0Qk5TRVFES1VEQzBFMUlSQU1wQU1MQWtBZ0FTSUJJQUpHRFFBRFFBSkFJQUV0QUFCQmdMeUFnQUJxTFFBQVFRRkdEUUFnQVNFQkROTUJDeUFCUVFGcUlnRWdBa2NOQUF0QlBTRVFES1FEQzBFOUlSQU1vd01MSUFBZ0FTSUJJQUlRc0lDQWdBQWlFQTNXQVNBQklRRU1BUXNnRUVFQmFpRUJDMEU4SVJBTWh3TUxBa0FnQVNJQklBSkhEUUJCd2dBaEVBeWdBd3NDUUFOQUFrQWdBUzBBQUVGM2FnNFlBQUwrQXY0Q2hBUCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nSUEvZ0lMSUFGQkFXb2lBU0FDUncwQUMwSENBQ0VRREtBREN5QUJRUUZxSVFFZ0FDMEFMVUVCY1VVTnZRRWdBU0VCQzBFc0lSQU1oUU1MSUFFaUFTQUNSdzNUQVVIRUFDRVFESjBEQ3dOQUFrQWdBUzBBQUVHUXdJQ0FBR290QUFCQkFVWU5BQ0FCSVFFTXR3SUxJQUZCQVdvaUFTQUNSdzBBQzBIRkFDRVFESndEQ3lBTkxRQUFJaEJCSUVZTnN3RWdFRUU2UncyQkF5QUFLQUlFSVFFZ0FFRUFOZ0lFSUFBZ0FTQU5FSytBZ0lBQUlnRU4wQUVnRFVFQmFpRUJETE1DQzBISEFDRVFJQUVpRFNBQ1JnMmFBeUFDSUExcklBQW9BZ0FpQVdvaEZpQU5JQUZyUVFWcUlSY0RRQ0FOTFFBQUloUkJJSElnRkNBVVFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFaRENnSUFBYWkwQUFFY05nQU1nQVVFRlJnMzBBaUFCUVFGcUlRRWdEVUVCYWlJTklBSkhEUUFMSUFBZ0ZqWUNBQXlhQXd0QnlBQWhFQ0FCSWcwZ0FrWU5tUU1nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFSmFpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVR1d3b0NBQUdvdEFBQkhEZjhDQWtBZ0FVRUpSdzBBUVFJaEFRejFBZ3NnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbVFNTEFrQWdBU0lOSUFKSERRQkJ5UUFoRUF5WkF3c0NRQUpBSUEwdEFBQWlBVUVnY2lBQklBRkJ2MzlxUWY4QmNVRWFTUnRCL3dGeFFaSi9hZzRIQUlBRGdBT0FBNEFEZ0FNQmdBTUxJQTFCQVdvaEFVRStJUkFNZ0FNTElBMUJBV29oQVVFL0lSQU0vd0lMUWNvQUlSQWdBU0lOSUFKR0RaY0RJQUlnRFdzZ0FDZ0NBQ0lCYWlFV0lBMGdBV3RCQVdvaEZ3TkFJQTB0QUFBaUZFRWdjaUFVSUJSQnYzOXFRZjhCY1VFYVNSdEIvd0Z4SUFGQm9NS0FnQUJxTFFBQVJ3MzlBaUFCUVFGR0RmQUNJQUZCQVdvaEFTQU5RUUZxSWcwZ0FrY05BQXNnQUNBV05nSUFESmNEQzBITEFDRVFJQUVpRFNBQ1JnMldBeUFDSUExcklBQW9BZ0FpQVdvaEZpQU5JQUZyUVE1cUlSY0RRQ0FOTFFBQUloUkJJSElnRkNBVVFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFhTENnSUFBYWkwQUFFY04vQUlnQVVFT1JnM3dBaUFCUVFGcUlRRWdEVUVCYWlJTklBSkhEUUFMSUFBZ0ZqWUNBQXlXQXd0QnpBQWhFQ0FCSWcwZ0FrWU5sUU1nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFUGFpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVSEF3b0NBQUdvdEFBQkhEZnNDQWtBZ0FVRVBSdzBBUVFNaEFRenhBZ3NnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbFFNTFFjMEFJUkFnQVNJTklBSkdEWlFESUFJZ0RXc2dBQ2dDQUNJQmFpRVdJQTBnQVd0QkJXb2hGd05BSUEwdEFBQWlGRUVnY2lBVUlCUkJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkIwTUtBZ0FCcUxRQUFSdzM2QWdKQUlBRkJCVWNOQUVFRUlRRU04QUlMSUFGQkFXb2hBU0FOUVFGcUlnMGdBa2NOQUFzZ0FDQVdOZ0lBREpRREN3SkFJQUVpRFNBQ1J3MEFRYzRBSVJBTWxBTUxBa0FDUUFKQUFrQWdEUzBBQUNJQlFTQnlJQUVnQVVHL2YycEIvd0Z4UVJwSkcwSC9BWEZCblg5cURoTUEvUUw5QXYwQy9RTDlBdjBDL1FMOUF2MEMvUUw5QXYwQ0FmMEMvUUw5QWdJRC9RSUxJQTFCQVdvaEFVSEJBQ0VRRFAwQ0N5QU5RUUZxSVFGQndnQWhFQXo4QWdzZ0RVRUJhaUVCUWNNQUlSQU0rd0lMSUExQkFXb2hBVUhFQUNFUURQb0NDd0pBSUFFaUFTQUNSZzBBSUFCQmpZQ0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFVSEZBQ0VRRFBvQ0MwSFBBQ0VRREpJREN5QVFJUUVDUUFKQUlCQXRBQUJCZG1vT0JBR29BcWdDQUtnQ0N5QVFRUUZxSVFFTFFTY2hFQXo0QWdzQ1FDQUJJZ0VnQWtjTkFFSFJBQ0VRREpFREN3SkFJQUV0QUFCQklFWU5BQ0FCSVFFTWpRRUxJQUZCQVdvaEFTQUFMUUF0UVFGeFJRM0hBU0FCSVFFTWpBRUxJQUVpRnlBQ1J3M0lBVUhTQUNFUURJOERDMEhUQUNFUUlBRWlGQ0FDUmcyT0F5QUNJQlJySUFBb0FnQWlBV29oRmlBVUlBRnJRUUZxSVJjRFFDQVVMUUFBSUFGQjFzS0FnQUJxTFFBQVJ3M01BU0FCUVFGR0RjY0JJQUZCQVdvaEFTQVVRUUZxSWhRZ0FrY05BQXNnQUNBV05nSUFESTREQ3dKQUlBRWlBU0FDUncwQVFkVUFJUkFNamdNTElBRXRBQUJCQ2tjTnpBRWdBVUVCYWlFQkRNY0JDd0pBSUFFaUFTQUNSdzBBUWRZQUlSQU1qUU1MQWtBQ1FDQUJMUUFBUVhacURnUUF6UUhOQVFITkFRc2dBVUVCYWlFQkRNY0JDeUFCUVFGcUlRRkJ5Z0FoRUF6ekFnc2dBQ0FCSWdFZ0FoQ3VnSUNBQUNJUURjc0JJQUVoQVVITkFDRVFEUElDQ3lBQUxRQXBRU0pHRFlVRERLWUNDd0pBSUFFaUFTQUNSdzBBUWRzQUlSQU1pZ01MUVFBaEZFRUJJUmRCQVNFV1FRQWhFQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FCTFFBQVFWQnFEZ3JVQWRNQkFBRUNBd1FGQmdqVkFRdEJBaUVRREFZTFFRTWhFQXdGQzBFRUlSQU1CQXRCQlNFUURBTUxRUVloRUF3Q0MwRUhJUkFNQVF0QkNDRVFDMEVBSVJkQkFDRVdRUUFoRkF6TUFRdEJDU0VRUVFFaEZFRUFJUmRCQUNFV0RNc0JDd0pBSUFFaUFTQUNSdzBBUWQwQUlSQU1pUU1MSUFFdEFBQkJMa2NOekFFZ0FVRUJhaUVCREtZQ0N5QUJJZ0VnQWtjTnpBRkIzd0FoRUF5SEF3c0NRQ0FCSWdFZ0FrWU5BQ0FBUVk2QWdJQUFOZ0lJSUFBZ0FUWUNCQ0FCSVFGQjBBQWhFQXp1QWd0QjRBQWhFQXlHQXd0QjRRQWhFQ0FCSWdFZ0FrWU5oUU1nQWlBQmF5QUFLQUlBSWhScUlSWWdBU0FVYTBFRGFpRVhBMEFnQVMwQUFDQVVRZUxDZ0lBQWFpMEFBRWNOelFFZ0ZFRURSZzNNQVNBVVFRRnFJUlFnQVVFQmFpSUJJQUpIRFFBTElBQWdGallDQUF5RkF3dEI0Z0FoRUNBQklnRWdBa1lOaEFNZ0FpQUJheUFBS0FJQUloUnFJUllnQVNBVWEwRUNhaUVYQTBBZ0FTMEFBQ0FVUWViQ2dJQUFhaTBBQUVjTnpBRWdGRUVDUmczT0FTQVVRUUZxSVJRZ0FVRUJhaUlCSUFKSERRQUxJQUFnRmpZQ0FBeUVBd3RCNHdBaEVDQUJJZ0VnQWtZTmd3TWdBaUFCYXlBQUtBSUFJaFJxSVJZZ0FTQVVhMEVEYWlFWEEwQWdBUzBBQUNBVVFlbkNnSUFBYWkwQUFFY055d0VnRkVFRFJnM09BU0FVUVFGcUlSUWdBVUVCYWlJQklBSkhEUUFMSUFBZ0ZqWUNBQXlEQXdzQ1FDQUJJZ0VnQWtjTkFFSGxBQ0VRRElNREN5QUFJQUZCQVdvaUFTQUNFS2lBZ0lBQUloQU56UUVnQVNFQlFkWUFJUkFNNlFJTEFrQWdBU0lCSUFKR0RRQURRQUpBSUFFdEFBQWlFRUVnUmcwQUFrQUNRQUpBSUJCQnVIOXFEZ3NBQWM4Qnp3SFBBYzhCendIUEFjOEJ6d0VDendFTElBRkJBV29oQVVIU0FDRVFETzBDQ3lBQlFRRnFJUUZCMHdBaEVBenNBZ3NnQVVFQmFpRUJRZFFBSVJBTTZ3SUxJQUZCQVdvaUFTQUNSdzBBQzBIa0FDRVFESUlEQzBIa0FDRVFESUVEQ3dOQUFrQWdBUzBBQUVId3dvQ0FBR290QUFBaUVFRUJSZzBBSUJCQmZtb09BODhCMEFIUkFkSUJDeUFCUVFGcUlnRWdBa2NOQUF0QjVnQWhFQXlBQXdzQ1FDQUJJZ0VnQWtZTkFDQUJRUUZxSVFFTUF3dEI1d0FoRUF6L0Fnc0RRQUpBSUFFdEFBQkI4TVNBZ0FCcUxRQUFJaEJCQVVZTkFBSkFJQkJCZm1vT0JOSUIwd0hVQVFEVkFRc2dBU0VCUWRjQUlSQU01d0lMSUFGQkFXb2lBU0FDUncwQUMwSG9BQ0VRRFA0Q0N3SkFJQUVpQVNBQ1J3MEFRZWtBSVJBTS9nSUxBa0FnQVMwQUFDSVFRWFpxRGhxNkFkVUIxUUc4QWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWNvQjFRSFZBUURUQVFzZ0FVRUJhaUVCQzBFR0lSQU00d0lMQTBBQ1FDQUJMUUFBUWZER2dJQUFhaTBBQUVFQlJnMEFJQUVoQVF5ZUFnc2dBVUVCYWlJQklBSkhEUUFMUWVvQUlSQU0rd0lMQWtBZ0FTSUJJQUpHRFFBZ0FVRUJhaUVCREFNTFFlc0FJUkFNK2dJTEFrQWdBU0lCSUFKSERRQkI3QUFoRUF6NkFnc2dBVUVCYWlFQkRBRUxBa0FnQVNJQklBSkhEUUJCN1FBaEVBejVBZ3NnQVVFQmFpRUJDMEVFSVJBTTNnSUxBa0FnQVNJVUlBSkhEUUJCN2dBaEVBejNBZ3NnRkNFQkFrQUNRQUpBSUJRdEFBQkI4TWlBZ0FCcUxRQUFRWDlxRGdmVUFkVUIxZ0VBbkFJQkF0Y0JDeUFVUVFGcUlRRU1DZ3NnRkVFQmFpRUJETTBCQzBFQUlSQWdBRUVBTmdJY0lBQkJtNUtBZ0FBMkFoQWdBRUVITmdJTUlBQWdGRUVCYWpZQ0ZBejJBZ3NDUUFOQUFrQWdBUzBBQUVId3lJQ0FBR290QUFBaUVFRUVSZzBBQWtBQ1FDQVFRWDlxRGdmU0FkTUIxQUhaQVFBRUFka0JDeUFCSVFGQjJnQWhFQXpnQWdzZ0FVRUJhaUVCUWR3QUlSQU0zd0lMSUFGQkFXb2lBU0FDUncwQUMwSHZBQ0VRRFBZQ0N5QUJRUUZxSVFFTXl3RUxBa0FnQVNJVUlBSkhEUUJCOEFBaEVBejFBZ3NnRkMwQUFFRXZSdzNVQVNBVVFRRnFJUUVNQmdzQ1FDQUJJaFFnQWtjTkFFSHhBQ0VRRFBRQ0N3SkFJQlF0QUFBaUFVRXZSdzBBSUJSQkFXb2hBVUhkQUNFUUROc0NDeUFCUVhacUlnUkJGa3NOMHdGQkFTQUVkRUdKZ0lBQ2NVVU4wd0VNeWdJTEFrQWdBU0lCSUFKR0RRQWdBVUVCYWlFQlFkNEFJUkFNMmdJTFFmSUFJUkFNOGdJTEFrQWdBU0lVSUFKSERRQkI5QUFoRUF6eUFnc2dGQ0VCQWtBZ0ZDMEFBRUh3eklDQUFHb3RBQUJCZjJvT0E4a0NsQUlBMUFFTFFlRUFJUkFNMkFJTEFrQWdBU0lVSUFKR0RRQURRQUpBSUJRdEFBQkI4TXFBZ0FCcUxRQUFJZ0ZCQTBZTkFBSkFJQUZCZjJvT0Fzc0NBTlVCQ3lBVUlRRkIzd0FoRUF6YUFnc2dGRUVCYWlJVUlBSkhEUUFMUWZNQUlSQU04UUlMUWZNQUlSQU04QUlMQWtBZ0FTSUJJQUpHRFFBZ0FFR1BnSUNBQURZQ0NDQUFJQUUyQWdRZ0FTRUJRZUFBSVJBTTF3SUxRZlVBSVJBTTd3SUxBa0FnQVNJQklBSkhEUUJCOWdBaEVBenZBZ3NnQUVHUGdJQ0FBRFlDQ0NBQUlBRTJBZ1FnQVNFQkMwRURJUkFNMUFJTEEwQWdBUzBBQUVFZ1J3M0RBaUFCUVFGcUlnRWdBa2NOQUF0Qjl3QWhFQXpzQWdzQ1FDQUJJZ0VnQWtjTkFFSDRBQ0VRRE93Q0N5QUJMUUFBUVNCSERjNEJJQUZCQVdvaEFRenZBUXNnQUNBQklnRWdBaENzZ0lDQUFDSVFEYzRCSUFFaEFReU9BZ3NDUUNBQklnUWdBa2NOQUVINkFDRVFET29DQ3lBRUxRQUFRY3dBUnczUkFTQUVRUUZxSVFGQkV5RVFETThCQ3dKQUlBRWlCQ0FDUncwQVFmc0FJUkFNNlFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCV29oRUFOQUlBUXRBQUFnQVVId3pvQ0FBR290QUFCSERkQUJJQUZCQlVZTnpnRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkIrd0FoRUF6b0Fnc0NRQ0FCSWdRZ0FrY05BRUg4QUNFUURPZ0NDd0pBQWtBZ0JDMEFBRUc5ZjJvT0RBRFJBZEVCMFFIUkFkRUIwUUhSQWRFQjBRSFJBUUhSQVFzZ0JFRUJhaUVCUWVZQUlSQU16d0lMSUFSQkFXb2hBVUhuQUNFUURNNENDd0pBSUFFaUJDQUNSdzBBUWYwQUlSQU01d0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFtb2hFQUpBQTBBZ0JDMEFBQ0FCUWUzUGdJQUFhaTBBQUVjTnp3RWdBVUVDUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFmMEFJUkFNNXdJTElBQkJBRFlDQUNBUVFRRnFJUUZCRUNFUURNd0JDd0pBSUFFaUJDQUNSdzBBUWY0QUlSQU01Z0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJXb2hFQUpBQTBBZ0JDMEFBQ0FCUWZiT2dJQUFhaTBBQUVjTnpnRWdBVUVGUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFmNEFJUkFNNWdJTElBQkJBRFlDQUNBUVFRRnFJUUZCRmlFUURNc0JDd0pBSUFFaUJDQUNSdzBBUWY4QUlSQU01UUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkEyb2hFQUpBQTBBZ0JDMEFBQ0FCUWZ6T2dJQUFhaTBBQUVjTnpRRWdBVUVEUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFmOEFJUkFNNVFJTElBQkJBRFlDQUNBUVFRRnFJUUZCQlNFUURNb0JDd0pBSUFFaUJDQUNSdzBBUVlBQklSQU01QUlMSUFRdEFBQkIyUUJIRGNzQklBUkJBV29oQVVFSUlSQU15UUVMQWtBZ0FTSUVJQUpIRFFCQmdRRWhFQXpqQWdzQ1FBSkFJQVF0QUFCQnNuOXFEZ01BekFFQnpBRUxJQVJCQVdvaEFVSHJBQ0VRRE1vQ0N5QUVRUUZxSVFGQjdBQWhFQXpKQWdzQ1FDQUJJZ1FnQWtjTkFFR0NBU0VRRE9JQ0N3SkFBa0FnQkMwQUFFRzRmMm9PQ0FETEFjc0J5d0hMQWNzQnl3RUJ5d0VMSUFSQkFXb2hBVUhxQUNFUURNa0NDeUFFUVFGcUlRRkI3UUFoRUF6SUFnc0NRQ0FCSWdRZ0FrY05BRUdEQVNFUURPRUNDeUFDSUFScklBQW9BZ0FpQVdvaEVDQUVJQUZyUVFKcUlSUUNRQU5BSUFRdEFBQWdBVUdBejRDQUFHb3RBQUJIRGNrQklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdFRFlDQUVHREFTRVFET0VDQzBFQUlSQWdBRUVBTmdJQUlCUkJBV29oQVF6R0FRc0NRQ0FCSWdRZ0FrY05BRUdFQVNFUURPQUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFScUlSQUNRQU5BSUFRdEFBQWdBVUdEejRDQUFHb3RBQUJIRGNnQklBRkJCRVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHRUFTRVFET0FDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRU01oRUF6RkFRc0NRQ0FCSWdRZ0FrY05BRUdGQVNFUUROOENDd0pBQWtBZ0JDMEFBRUcwZjJvT0NBRElBY2dCeUFISUFjZ0J5QUVCeUFFTElBUkJBV29oQVVIdkFDRVFETVlDQ3lBRVFRRnFJUUZCOEFBaEVBekZBZ3NDUUNBQklnUWdBa2NOQUVHR0FTRVFETjRDQ3lBRUxRQUFRY1VBUnczRkFTQUVRUUZxSVFFTWd3SUxBa0FnQVNJRUlBSkhEUUJCaHdFaEVBemRBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRGFpRVFBa0FEUUNBRUxRQUFJQUZCaU0rQWdBQnFMUUFBUnczRkFTQUJRUU5HRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQmh3RWhFQXpkQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUV0SVJBTXdnRUxBa0FnQVNJRUlBSkhEUUJCaUFFaEVBemNBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFSWFpRVFBa0FEUUNBRUxRQUFJQUZCME0rQWdBQnFMUUFBUnczRUFTQUJRUWhHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQmlBRWhFQXpjQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVwSVJBTXdRRUxBa0FnQVNJQklBSkhEUUJCaVFFaEVBemJBZ3RCQVNFUUlBRXRBQUJCM3dCSERjQUJJQUZCQVdvaEFReUJBZ3NDUUNBQklnUWdBa2NOQUVHS0FTRVFETm9DQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRRnFJUkFEUUNBRUxRQUFJQUZCak0rQWdBQnFMUUFBUnczQkFTQUJRUUZHRGE4Q0lBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZb0JJUkFNMlFJTEFrQWdBU0lFSUFKSERRQkJpd0VoRUF6WkFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVDYWlFUUFrQURRQ0FFTFFBQUlBRkJqcytBZ0FCcUxRQUFSdzNCQVNBQlFRSkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCaXdFaEVBelpBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRUNJUkFNdmdFTEFrQWdBU0lFSUFKSERRQkJqQUVoRUF6WUFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkI4TStBZ0FCcUxRQUFSdzNBQVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCakFFaEVBellBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRWZJUkFNdlFFTEFrQWdBU0lFSUFKSERRQkJqUUVoRUF6WEFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkI4cytBZ0FCcUxRQUFSdzIvQVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCalFFaEVBelhBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRUpJUkFNdkFFTEFrQWdBU0lFSUFKSERRQkJqZ0VoRUF6V0Fnc0NRQUpBSUFRdEFBQkJ0MzlxRGdjQXZ3Ry9BYjhCdndHL0FRRy9BUXNnQkVFQmFpRUJRZmdBSVJBTXZRSUxJQVJCQVdvaEFVSDVBQ0VRREx3Q0N3SkFJQUVpQkNBQ1J3MEFRWThCSVJBTTFRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQldvaEVBSkFBMEFnQkMwQUFDQUJRWkhQZ0lBQWFpMEFBRWNOdlFFZ0FVRUZSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVk4QklSQU0xUUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJHQ0VRRExvQkN3SkFJQUVpQkNBQ1J3MEFRWkFCSVJBTTFBSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRWmZQZ0lBQWFpMEFBRWNOdkFFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpBQklSQU0xQUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJGeUVRRExrQkN3SkFJQUVpQkNBQ1J3MEFRWkVCSVJBTTB3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQm1vaEVBSkFBMEFnQkMwQUFDQUJRWnJQZ0lBQWFpMEFBRWNOdXdFZ0FVRUdSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpFQklSQU0wd0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJGU0VRRExnQkN3SkFJQUVpQkNBQ1J3MEFRWklCSVJBTTBnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQldvaEVBSkFBMEFnQkMwQUFDQUJRYUhQZ0lBQWFpMEFBRWNOdWdFZ0FVRUZSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpJQklSQU0wZ0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJIaUVRRExjQkN3SkFJQUVpQkNBQ1J3MEFRWk1CSVJBTTBRSUxJQVF0QUFCQnpBQkhEYmdCSUFSQkFXb2hBVUVLSVJBTXRnRUxBa0FnQkNBQ1J3MEFRWlFCSVJBTTBBSUxBa0FDUUNBRUxRQUFRYjkvYWc0UEFMa0J1UUc1QWJrQnVRRzVBYmtCdVFHNUFia0J1UUc1QWJrQkFia0JDeUFFUVFGcUlRRkIvZ0FoRUF5M0Fnc2dCRUVCYWlFQlFmOEFJUkFNdGdJTEFrQWdCQ0FDUncwQVFaVUJJUkFNendJTEFrQUNRQ0FFTFFBQVFiOS9hZzREQUxnQkFiZ0JDeUFFUVFGcUlRRkIvUUFoRUF5MkFnc2dCRUVCYWlFRVFZQUJJUkFNdFFJTEFrQWdCQ0FDUncwQVFaWUJJUkFNemdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFhZlBnSUFBYWkwQUFFY050Z0VnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWllCSVJBTXpnSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkN5RVFETE1CQ3dKQUlBUWdBa2NOQUVHWEFTRVFETTBDQ3dKQUFrQUNRQUpBSUFRdEFBQkJVMm9PSXdDNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQkFiZ0J1QUc0QWJnQnVBRUN1QUc0QWJnQkE3Z0JDeUFFUVFGcUlRRkIrd0FoRUF5MkFnc2dCRUVCYWlFQlFmd0FJUkFNdFFJTElBUkJBV29oQkVHQkFTRVFETFFDQ3lBRVFRRnFJUVJCZ2dFaEVBeXpBZ3NDUUNBRUlBSkhEUUJCbUFFaEVBek1BZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRWFpRVFBa0FEUUNBRUxRQUFJQUZCcWMrQWdBQnFMUUFBUncyMEFTQUJRUVJHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQm1BRWhFQXpNQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVaSVJBTXNRRUxBa0FnQkNBQ1J3MEFRWmtCSVJBTXl3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQldvaEVBSkFBMEFnQkMwQUFDQUJRYTdQZ0lBQWFpMEFBRWNOc3dFZ0FVRUZSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVprQklSQU15d0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJCaUVRRExBQkN3SkFJQVFnQWtjTkFFR2FBU0VRRE1vQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUZxSVJBQ1FBTkFJQVF0QUFBZ0FVRzB6NENBQUdvdEFBQkhEYklCSUFGQkFVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdhQVNFUURNb0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFSd2hFQXl2QVFzQ1FDQUVJQUpIRFFCQm13RWhFQXpKQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQWtBRFFDQUVMUUFBSUFGQnRzK0FnQUJxTFFBQVJ3MnhBU0FCUVFGR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJtd0VoRUF6SkFnc2dBRUVBTmdJQUlCQkJBV29oQVVFbklSQU1yZ0VMQWtBZ0JDQUNSdzBBUVp3QklSQU15QUlMQWtBQ1FDQUVMUUFBUWF4L2FnNENBQUd4QVFzZ0JFRUJhaUVFUVlZQklSQU1yd0lMSUFSQkFXb2hCRUdIQVNFUURLNENDd0pBSUFRZ0FrY05BRUdkQVNFUURNY0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFGcUlSQUNRQU5BSUFRdEFBQWdBVUc0ejRDQUFHb3RBQUJIRGE4QklBRkJBVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHZEFTRVFETWNDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRU1loRUF5c0FRc0NRQ0FFSUFKSERRQkJuZ0VoRUF6R0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkJ1cytBZ0FCcUxRQUFSdzJ1QVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCbmdFaEVBekdBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRURJUkFNcXdFTEFrQWdCQ0FDUncwQVFaOEJJUkFNeFFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBbW9oRUFKQUEwQWdCQzBBQUNBQlFlM1BnSUFBYWkwQUFFY05yUUVnQVVFQ1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWjhCSVJBTXhRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkRDRVFES29CQ3dKQUlBUWdBa2NOQUVHZ0FTRVFETVFDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRTnFJUkFDUUFOQUlBUXRBQUFnQVVHOHo0Q0FBR290QUFCSERhd0JJQUZCQTBZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR2dBU0VRRE1RQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVEwaEVBeXBBUXNDUUNBRUlBSkhEUUJCb1FFaEVBekRBZ3NDUUFKQUlBUXRBQUJCdW45cURnc0FyQUdzQWF3QnJBR3NBYXdCckFHc0Fhd0JBYXdCQ3lBRVFRRnFJUVJCaXdFaEVBeXFBZ3NnQkVFQmFpRUVRWXdCSVJBTXFRSUxBa0FnQkNBQ1J3MEFRYUlCSVJBTXdnSUxJQVF0QUFCQjBBQkhEYWtCSUFSQkFXb2hCQXpwQVFzQ1FDQUVJQUpIRFFCQm93RWhFQXpCQWdzQ1FBSkFJQVF0QUFCQnQzOXFEZ2NCcWdHcUFhb0JxZ0dxQVFDcUFRc2dCRUVCYWlFRVFZNEJJUkFNcUFJTElBUkJBV29oQVVFaUlSQU1wZ0VMQWtBZ0JDQUNSdzBBUWFRQklSQU13QUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWNEUGdJQUFhaTBBQUVjTnFBRWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFhUUJJUkFNd0FJTElBQkJBRFlDQUNBUVFRRnFJUUZCSFNFUURLVUJDd0pBSUFRZ0FrY05BRUdsQVNFUURMOENDd0pBQWtBZ0JDMEFBRUd1ZjJvT0F3Q29BUUdvQVFzZ0JFRUJhaUVFUVpBQklSQU1wZ0lMSUFSQkFXb2hBVUVFSVJBTXBBRUxBa0FnQkNBQ1J3MEFRYVlCSVJBTXZnSUxBa0FDUUFKQUFrQUNRQ0FFTFFBQVFiOS9hZzRWQUtvQnFnR3FBYW9CcWdHcUFhb0JxZ0dxQWFvQkFhb0JxZ0VDcWdHcUFRT3FBYW9CQktvQkN5QUVRUUZxSVFSQmlBRWhFQXlvQWdzZ0JFRUJhaUVFUVlrQklSQU1wd0lMSUFSQkFXb2hCRUdLQVNFUURLWUNDeUFFUVFGcUlRUkJqd0VoRUF5bEFnc2dCRUVCYWlFRVFaRUJJUkFNcEFJTEFrQWdCQ0FDUncwQVFhY0JJUkFNdlFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBbW9oRUFKQUEwQWdCQzBBQUNBQlFlM1BnSUFBYWkwQUFFY05wUUVnQVVFQ1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYWNCSVJBTXZRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkVTRVFES0lCQ3dKQUlBUWdBa2NOQUVHb0FTRVFETHdDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIQ3o0Q0FBR290QUFCSERhUUJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR29BU0VRREx3Q0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVN3aEVBeWhBUXNDUUNBRUlBSkhEUUJCcVFFaEVBeTdBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRWFpRVFBa0FEUUNBRUxRQUFJQUZCeGMrQWdBQnFMUUFBUncyakFTQUJRUVJHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnFRRWhFQXk3QWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVySVJBTW9BRUxBa0FnQkNBQ1J3MEFRYW9CSVJBTXVnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRY3JQZ0lBQWFpMEFBRWNOb2dFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWFvQklSQU11Z0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJGQ0VRREo4QkN3SkFJQVFnQWtjTkFFR3JBU0VRRExrQ0N3SkFBa0FDUUFKQUlBUXRBQUJCdm45cURnOEFBUUtrQWFRQnBBR2tBYVFCcEFHa0FhUUJwQUdrQWFRQkE2UUJDeUFFUVFGcUlRUkJrd0VoRUF5aUFnc2dCRUVCYWlFRVFaUUJJUkFNb1FJTElBUkJBV29oQkVHVkFTRVFES0FDQ3lBRVFRRnFJUVJCbGdFaEVBeWZBZ3NDUUNBRUlBSkhEUUJCckFFaEVBeTRBZ3NnQkMwQUFFSEZBRWNObndFZ0JFRUJhaUVFRE9BQkN3SkFJQVFnQWtjTkFFR3RBU0VRRExjQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSE56NENBQUdvdEFBQkhEWjhCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUd0QVNFUURMY0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFRNGhFQXljQVFzQ1FDQUVJQUpIRFFCQnJnRWhFQXkyQWdzZ0JDMEFBRUhRQUVjTm5RRWdCRUVCYWlFQlFTVWhFQXliQVFzQ1FDQUVJQUpIRFFCQnJ3RWhFQXkxQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUlhaUVRQWtBRFFDQUVMUUFBSUFGQjBNK0FnQUJxTFFBQVJ3MmRBU0FCUVFoR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJyd0VoRUF5MUFnc2dBRUVBTmdJQUlCQkJBV29oQVVFcUlSQU1tZ0VMQWtBZ0JDQUNSdzBBUWJBQklSQU10QUlMQWtBQ1FDQUVMUUFBUWF0L2FnNExBSjBCblFHZEFaMEJuUUdkQVowQm5RR2RBUUdkQVFzZ0JFRUJhaUVFUVpvQklSQU1td0lMSUFSQkFXb2hCRUdiQVNFUURKb0NDd0pBSUFRZ0FrY05BRUd4QVNFUURMTUNDd0pBQWtBZ0JDMEFBRUcvZjJvT0ZBQ2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BRUJuQUVMSUFSQkFXb2hCRUdaQVNFUURKb0NDeUFFUVFGcUlRUkJuQUVoRUF5WkFnc0NRQ0FFSUFKSERRQkJzZ0VoRUF5eUFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVEYWlFUUFrQURRQ0FFTFFBQUlBRkIyYytBZ0FCcUxRQUFSdzJhQVNBQlFRTkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCc2dFaEVBeXlBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRWhJUkFNbHdFTEFrQWdCQ0FDUncwQVFiTUJJUkFNc1FJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCbW9oRUFKQUEwQWdCQzBBQUNBQlFkM1BnSUFBYWkwQUFFY05tUUVnQVVFR1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYk1CSVJBTXNRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkdpRVFESllCQ3dKQUlBUWdBa2NOQUVHMEFTRVFETEFDQ3dKQUFrQUNRQ0FFTFFBQVFidC9hZzRSQUpvQm1nR2FBWm9CbWdHYUFab0JtZ0dhQVFHYUFab0JtZ0dhQVpvQkFwb0JDeUFFUVFGcUlRUkJuUUVoRUF5WUFnc2dCRUVCYWlFRVFaNEJJUkFNbHdJTElBUkJBV29oQkVHZkFTRVFESllDQ3dKQUlBUWdBa2NOQUVHMUFTRVFESzhDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRVnFJUkFDUUFOQUlBUXRBQUFnQVVIa3o0Q0FBR290QUFCSERaY0JJQUZCQlVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFRzFBU0VRREs4Q0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVNnaEVBeVVBUXNDUUNBRUlBSkhEUUJCdGdFaEVBeXVBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQ2FpRVFBa0FEUUNBRUxRQUFJQUZCNnMrQWdBQnFMUUFBUncyV0FTQUJRUUpHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnRnRWhFQXl1QWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVISVJBTWt3RUxBa0FnQkNBQ1J3MEFRYmNCSVJBTXJRSUxBa0FDUUNBRUxRQUFRYnQvYWc0T0FKWUJsZ0dXQVpZQmxnR1dBWllCbGdHV0FaWUJsZ0dXQVFHV0FRc2dCRUVCYWlFRVFhRUJJUkFNbEFJTElBUkJBV29oQkVHaUFTRVFESk1DQ3dKQUlBUWdBa2NOQUVHNEFTRVFES3dDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIdHo0Q0FBR290QUFCSERaUUJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFRzRBU0VRREt3Q0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJJaEVBeVJBUXNDUUNBRUlBSkhEUUJCdVFFaEVBeXJBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBa0FEUUNBRUxRQUFJQUZCOE0rQWdBQnFMUUFBUncyVEFTQUJRUUZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnVRRWhFQXlyQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVnSVJBTWtBRUxBa0FnQkNBQ1J3MEFRYm9CSVJBTXFnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRZkxQZ0lBQWFpMEFBRWNOa2dFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWJvQklSQU1xZ0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJEeUVRREk4QkN3SkFJQVFnQWtjTkFFRzdBU0VRREtrQ0N3SkFBa0FnQkMwQUFFRzNmMm9PQndDU0FaSUJrZ0dTQVpJQkFaSUJDeUFFUVFGcUlRUkJwUUVoRUF5UUFnc2dCRUVCYWlFRVFhWUJJUkFNandJTEFrQWdCQ0FDUncwQVFid0JJUkFNcUFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCMm9oRUFKQUEwQWdCQzBBQUNBQlFmVFBnSUFBYWkwQUFFY05rQUVnQVVFSFJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYndCSVJBTXFBSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkd5RVFESTBCQ3dKQUlBUWdBa2NOQUVHOUFTRVFES2NDQ3dKQUFrQUNRQ0FFTFFBQVFiNS9hZzRTQUpFQmtRR1JBWkVCa1FHUkFaRUJrUUdSQVFHUkFaRUJrUUdSQVpFQmtRRUNrUUVMSUFSQkFXb2hCRUdrQVNFUURJOENDeUFFUVFGcUlRUkJwd0VoRUF5T0Fnc2dCRUVCYWlFRVFhZ0JJUkFNalFJTEFrQWdCQ0FDUncwQVFiNEJJUkFNcGdJTElBUXRBQUJCemdCSERZMEJJQVJCQVdvaEJBelBBUXNDUUNBRUlBSkhEUUJCdndFaEVBeWxBZ3NDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUVMUUFBUWI5L2FnNFZBQUVDQTV3QkJBVUduQUdjQVp3QkJ3Z0pDZ3VjQVF3TkRnK2NBUXNnQkVFQmFpRUJRZWdBSVJBTW1nSUxJQVJCQVdvaEFVSHBBQ0VRREprQ0N5QUVRUUZxSVFGQjdnQWhFQXlZQWdzZ0JFRUJhaUVCUWZJQUlSQU1sd0lMSUFSQkFXb2hBVUh6QUNFUURKWUNDeUFFUVFGcUlRRkI5Z0FoRUF5VkFnc2dCRUVCYWlFQlFmY0FJUkFNbEFJTElBUkJBV29oQVVINkFDRVFESk1DQ3lBRVFRRnFJUVJCZ3dFaEVBeVNBZ3NnQkVFQmFpRUVRWVFCSVJBTWtRSUxJQVJCQVdvaEJFR0ZBU0VRREpBQ0N5QUVRUUZxSVFSQmtnRWhFQXlQQWdzZ0JFRUJhaUVFUVpnQklSQU1qZ0lMSUFSQkFXb2hCRUdnQVNFUURJMENDeUFFUVFGcUlRUkJvd0VoRUF5TUFnc2dCRUVCYWlFRVFhb0JJUkFNaXdJTEFrQWdCQ0FDUmcwQUlBQkJrSUNBZ0FBMkFnZ2dBQ0FFTmdJRVFhc0JJUkFNaXdJTFFjQUJJUkFNb3dJTElBQWdCU0FDRUtxQWdJQUFJZ0VOaXdFZ0JTRUJERndMQWtBZ0JpQUNSZzBBSUFaQkFXb2hCUXlOQVF0QndnRWhFQXloQWdzRFFBSkFJQkF0QUFCQmRtb09CSXdCQUFDUEFRQUxJQkJCQVdvaUVDQUNSdzBBQzBIREFTRVFES0FDQ3dKQUlBY2dBa1lOQUNBQVFaR0FnSUFBTmdJSUlBQWdCellDQkNBSElRRkJBU0VRREljQ0MwSEVBU0VRREo4Q0N3SkFJQWNnQWtjTkFFSEZBU0VRREo4Q0N3SkFBa0FnQnkwQUFFRjJhZzRFQWM0QnpnRUF6Z0VMSUFkQkFXb2hCZ3lOQVFzZ0IwRUJhaUVGRElrQkN3SkFJQWNnQWtjTkFFSEdBU0VRREo0Q0N3SkFBa0FnQnkwQUFFRjJhZzRYQVk4Qmp3RUJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJBSThCQ3lBSFFRRnFJUWNMUWJBQklSQU1oQUlMQWtBZ0NDQUNSdzBBUWNnQklSQU1uUUlMSUFndEFBQkJJRWNOalFFZ0FFRUFPd0V5SUFoQkFXb2hBVUd6QVNFUURJTUNDeUFCSVJjQ1FBTkFJQmNpQnlBQ1JnMEJJQWN0QUFCQlVHcEIvd0Z4SWhCQkNrOE56QUVDUUNBQUx3RXlJaFJCbVROTERRQWdBQ0FVUVFwc0loUTdBVElnRUVILy93TnpJQlJCL3Y4RGNVa05BQ0FIUVFGcUlSY2dBQ0FVSUJCcUloQTdBVElnRUVILy93TnhRZWdIU1EwQkN3dEJBQ0VRSUFCQkFEWUNIQ0FBUWNHSmdJQUFOZ0lRSUFCQkRUWUNEQ0FBSUFkQkFXbzJBaFFNbkFJTFFjY0JJUkFNbXdJTElBQWdDQ0FDRUs2QWdJQUFJaEJGRGNvQklCQkJGVWNOakFFZ0FFSElBVFlDSENBQUlBZzJBaFFnQUVISmw0Q0FBRFlDRUNBQVFSVTJBZ3hCQUNFUURKb0NDd0pBSUFrZ0FrY05BRUhNQVNFUURKb0NDMEVBSVJSQkFTRVhRUUVoRmtFQUlSQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdDUzBBQUVGUWFnNEtsZ0dWQVFBQkFnTUVCUVlJbHdFTFFRSWhFQXdHQzBFRElSQU1CUXRCQkNFUURBUUxRUVVoRUF3REMwRUdJUkFNQWd0QkJ5RVFEQUVMUVFnaEVBdEJBQ0VYUVFBaEZrRUFJUlFNamdFTFFRa2hFRUVCSVJSQkFDRVhRUUFoRmd5TkFRc0NRQ0FLSUFKSERRQkJ6Z0VoRUF5WkFnc2dDaTBBQUVFdVJ3Mk9BU0FLUVFGcUlRa015Z0VMSUFzZ0FrY05qZ0ZCMEFFaEVBeVhBZ3NDUUNBTElBSkdEUUFnQUVHT2dJQ0FBRFlDQ0NBQUlBczJBZ1JCdHdFaEVBeitBUXRCMFFFaEVBeVdBZ3NDUUNBRUlBSkhEUUJCMGdFaEVBeVdBZ3NnQWlBRWF5QUFLQUlBSWhCcUlSUWdCQ0FRYTBFRWFpRUxBMEFnQkMwQUFDQVFRZnpQZ0lBQWFpMEFBRWNOamdFZ0VFRUVSZzNwQVNBUVFRRnFJUkFnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVIU0FTRVFESlVDQ3lBQUlBd2dBaENzZ0lDQUFDSUJEWTBCSUF3aEFReTRBUXNDUUNBRUlBSkhEUUJCMUFFaEVBeVVBZ3NnQWlBRWF5QUFLQUlBSWhCcUlSUWdCQ0FRYTBFQmFpRU1BMEFnQkMwQUFDQVFRWUhRZ0lBQWFpMEFBRWNOandFZ0VFRUJSZzJPQVNBUVFRRnFJUkFnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVIVUFTRVFESk1DQ3dKQUlBUWdBa2NOQUVIV0FTRVFESk1DQ3lBQ0lBUnJJQUFvQWdBaUVHb2hGQ0FFSUJCclFRSnFJUXNEUUNBRUxRQUFJQkJCZzlDQWdBQnFMUUFBUncyT0FTQVFRUUpHRFpBQklCQkJBV29oRUNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFkWUJJUkFNa2dJTEFrQWdCQ0FDUncwQVFkY0JJUkFNa2dJTEFrQUNRQ0FFTFFBQVFidC9hZzRRQUk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandFQmp3RUxJQVJCQVdvaEJFRzdBU0VRRFBrQkN5QUVRUUZxSVFSQnZBRWhFQXo0QVFzQ1FDQUVJQUpIRFFCQjJBRWhFQXlSQWdzZ0JDMEFBRUhJQUVjTmpBRWdCRUVCYWlFRURNUUJDd0pBSUFRZ0FrWU5BQ0FBUVpDQWdJQUFOZ0lJSUFBZ0JEWUNCRUcrQVNFUURQY0JDMEhaQVNFUURJOENDd0pBSUFRZ0FrY05BRUhhQVNFUURJOENDeUFFTFFBQVFjZ0FSZzNEQVNBQVFRRTZBQ2dNdVFFTElBQkJBam9BTHlBQUlBUWdBaENtZ0lDQUFDSVFEWTBCUWNJQklSQU05QUVMSUFBdEFDaEJmMm9PQXJjQnVRRzRBUXNEUUFKQUlBUXRBQUJCZG1vT0JBQ09BWTRCQUk0QkN5QUVRUUZxSWdRZ0FrY05BQXRCM1FFaEVBeUxBZ3NnQUVFQU9nQXZJQUF0QUMxQkJIRkZEWVFDQ3lBQVFRQTZBQzhnQUVFQk9nQTBJQUVoQVF5TUFRc2dFRUVWUmczYUFTQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnA0NkFnQUEyQWhBZ0FFRVNOZ0lNUVFBaEVBeUlBZ3NDUUNBQUlCQWdBaEMwZ0lDQUFDSUVEUUFnRUNFQkRJRUNDd0pBSUFSQkZVY05BQ0FBUVFNMkFod2dBQ0FRTmdJVUlBQkJzSmlBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXlJQWdzZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUWFlT2dJQUFOZ0lRSUFCQkVqWUNERUVBSVJBTWh3SUxJQkJCRlVZTjFnRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFkcU5nSUFBTmdJUUlBQkJGRFlDREVFQUlSQU1oZ0lMSUFBb0FnUWhGeUFBUVFBMkFnUWdFQ0FScDJvaUZpRUJJQUFnRnlBUUlCWWdGQnNpRUJDMWdJQ0FBQ0lVUlEyTkFTQUFRUWMyQWh3Z0FDQVFOZ0lVSUFBZ0ZEWUNERUVBSVJBTWhRSUxJQUFnQUM4Qk1FR0FBWEk3QVRBZ0FTRUJDMEVxSVJBTTZnRUxJQkJCRlVZTjBRRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFZT01nSUFBTmdJUUlBQkJFellDREVFQUlSQU1nZ0lMSUJCQkZVWU56d0VnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWnFQZ0lBQU5nSVFJQUJCSWpZQ0RFRUFJUkFNZ1FJTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkMzZ0lDQUFDSVFEUUFnQVVFQmFpRUJESTBCQ3lBQVFRdzJBaHdnQUNBUU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTWdBSUxJQkJCRlVZTnpBRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFacVBnSUFBTmdJUUlBQkJJallDREVFQUlSQU0vd0VMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQzNnSUNBQUNJUURRQWdBVUVCYWlFQkRJd0JDeUFBUVEwMkFod2dBQ0FRTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNL2dFTElCQkJGVVlOeVFFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWNhTWdJQUFOZ0lRSUFCQkl6WUNERUVBSVJBTS9RRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDNWdJQ0FBQ0lRRFFBZ0FVRUJhaUVCRElzQkN5QUFRUTQyQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU0vQUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhBbFlDQUFEWUNFQ0FBUVFJMkFneEJBQ0VRRFBzQkN5QVFRUlZHRGNVQklBQkJBRFlDSENBQUlBRTJBaFFnQUVIR2pJQ0FBRFlDRUNBQVFTTTJBZ3hCQUNFUURQb0JDeUFBUVJBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU0rUUVMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQzVnSUNBQUNJRURRQWdBVUVCYWlFQkRQRUJDeUFBUVJFMkFod2dBQ0FFTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNK0FFTElCQkJGVVlOd1FFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWNhTWdJQUFOZ0lRSUFCQkl6WUNERUVBSVJBTTl3RUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDNWdJQ0FBQ0lRRFFBZ0FVRUJhaUVCRElnQkN5QUFRUk0yQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU05Z0VMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQzVnSUNBQUNJRURRQWdBVUVCYWlFQkRPMEJDeUFBUVJRMkFod2dBQ0FFTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNOVFFTElCQkJGVVlOdlFFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVpxUGdJQUFOZ0lRSUFCQklqWUNERUVBSVJBTTlBRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDM2dJQ0FBQ0lRRFFBZ0FVRUJhaUVCRElZQkN5QUFRUlkyQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU04d0VMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQzNnSUNBQUNJRURRQWdBVUVCYWlFQkRPa0JDeUFBUVJjMkFod2dBQ0FFTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNOGdFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVITms0Q0FBRFlDRUNBQVFRdzJBZ3hCQUNFUURQRUJDMElCSVJFTElCQkJBV29oQVFKQUlBQXBBeUFpRWtMLy8vLy8vLy8vL3c5V0RRQWdBQ0FTUWdTR0lCR0VOd01nSUFFaEFReUVBUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYTJKZ0lBQU5nSVFJQUJCRERZQ0RFRUFJUkFNN3dFTElBQkJBRFlDSENBQUlCQTJBaFFnQUVITms0Q0FBRFlDRUNBQVFRdzJBZ3hCQUNFUURPNEJDeUFBS0FJRUlSY2dBRUVBTmdJRUlCQWdFYWRxSWhZaEFTQUFJQmNnRUNBV0lCUWJJaEFRdFlDQWdBQWlGRVVOY3lBQVFRVTJBaHdnQUNBUU5nSVVJQUFnRkRZQ0RFRUFJUkFNN1FFTElBQkJBRFlDSENBQUlCQTJBaFFnQUVHcW5JQ0FBRFlDRUNBQVFRODJBZ3hCQUNFUURPd0JDeUFBSUJBZ0FoQzBnSUNBQUNJQkRRRWdFQ0VCQzBFT0lSQU0wUUVMQWtBZ0FVRVZSdzBBSUFCQkFqWUNIQ0FBSUJBMkFoUWdBRUd3bUlDQUFEWUNFQ0FBUVJVMkFneEJBQ0VRRE9vQkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQnA0NkFnQUEyQWhBZ0FFRVNOZ0lNUVFBaEVBenBBUXNnQVVFQmFpRVFBa0FnQUM4Qk1DSUJRWUFCY1VVTkFBSkFJQUFnRUNBQ0VMdUFnSUFBSWdFTkFDQVFJUUVNY0FzZ0FVRVZSdzI2QVNBQVFRVTJBaHdnQUNBUU5nSVVJQUJCK1plQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF6cEFRc0NRQ0FCUWFBRWNVR2dCRWNOQUNBQUxRQXRRUUp4RFFBZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUVphVGdJQUFOZ0lRSUFCQkJEWUNERUVBSVJBTTZRRUxJQUFnRUNBQ0VMMkFnSUFBR2lBUUlRRUNRQUpBQWtBQ1FBSkFJQUFnRUNBQ0VMT0FnSUFBRGhZQ0FRQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUURCQXNnQUVFQk9nQXVDeUFBSUFBdkFUQkJ3QUJ5T3dFd0lCQWhBUXRCSmlFUURORUJDeUFBUVNNMkFod2dBQ0FRTmdJVUlBQkJwWmFBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXpwQVFzZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUWRXTGdJQUFOZ0lRSUFCQkVUWUNERUVBSVJBTTZBRUxJQUF0QUMxQkFYRkZEUUZCd3dFaEVBek9BUXNDUUNBTklBSkdEUUFEUUFKQUlBMHRBQUJCSUVZTkFDQU5JUUVNeEFFTElBMUJBV29pRFNBQ1J3MEFDMEVsSVJBTTV3RUxRU1VoRUF6bUFRc2dBQ2dDQkNFRUlBQkJBRFlDQkNBQUlBUWdEUkN2Z0lDQUFDSUVSUTJ0QVNBQVFTWTJBaHdnQUNBRU5nSU1JQUFnRFVFQmFqWUNGRUVBSVJBTTVRRUxJQkJCRlVZTnF3RWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFmMk5nSUFBTmdJUUlBQkJIVFlDREVFQUlSQU01QUVMSUFCQkp6WUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXpqQVFzZ0VDRUJRUUVoRkFKQUFrQUNRQUpBQWtBQ1FBSkFJQUF0QUN4QmZtb09Cd1lGQlFNQkFnQUZDeUFBSUFBdkFUQkJDSEk3QVRBTUF3dEJBaUVVREFFTFFRUWhGQXNnQUVFQk9nQXNJQUFnQUM4Qk1DQVVjanNCTUFzZ0VDRUJDMEVySVJBTXlnRUxJQUJCQURZQ0hDQUFJQkEyQWhRZ0FFR3Jrb0NBQURZQ0VDQUFRUXMyQWd4QkFDRVFET0lCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCNFkrQWdBQTJBaEFnQUVFS05nSU1RUUFoRUF6aEFRc2dBRUVBT2dBc0lCQWhBUXk5QVFzZ0VDRUJRUUVoRkFKQUFrQUNRQUpBQWtBZ0FDMEFMRUY3YWc0RUF3RUNBQVVMSUFBZ0FDOEJNRUVJY2pzQk1Bd0RDMEVDSVJRTUFRdEJCQ0VVQ3lBQVFRRTZBQ3dnQUNBQUx3RXdJQlJ5T3dFd0N5QVFJUUVMUVNraEVBekZBUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZkNVZ0lBQU5nSVFJQUJCQXpZQ0RFRUFJUkFNM1FFTEFrQWdEaTBBQUVFTlJ3MEFJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRGhDeGdJQ0FBQ0lCRFFBZ0RrRUJhaUVCREhVTElBQkJMRFlDSENBQUlBRTJBZ3dnQUNBT1FRRnFOZ0lVUVFBaEVBemRBUXNnQUMwQUxVRUJjVVVOQVVIRUFTRVFETU1CQ3dKQUlBNGdBa2NOQUVFdElSQU0zQUVMQWtBQ1FBTkFBa0FnRGkwQUFFRjJhZzRFQWdBQUF3QUxJQTVCQVdvaURpQUNSdzBBQzBFdElSQU0zUUVMSUFBb0FnUWhBU0FBUVFBMkFnUUNRQ0FBSUFFZ0RoQ3hnSUNBQUNJQkRRQWdEaUVCREhRTElBQkJMRFlDSENBQUlBNDJBaFFnQUNBQk5nSU1RUUFoRUF6Y0FRc2dBQ2dDQkNFQklBQkJBRFlDQkFKQUlBQWdBU0FPRUxHQWdJQUFJZ0VOQUNBT1FRRnFJUUVNY3dzZ0FFRXNOZ0ljSUFBZ0FUWUNEQ0FBSUE1QkFXbzJBaFJCQUNFUUROc0JDeUFBS0FJRUlRUWdBRUVBTmdJRUlBQWdCQ0FPRUxHQWdJQUFJZ1FOb0FFZ0RpRUJETTRCQ3lBUVFTeEhEUUVnQVVFQmFpRVFRUUVoQVFKQUFrQUNRQUpBQWtBZ0FDMEFMRUY3YWc0RUF3RUNCQUFMSUJBaEFRd0VDMEVDSVFFTUFRdEJCQ0VCQ3lBQVFRRTZBQ3dnQUNBQUx3RXdJQUZ5T3dFd0lCQWhBUXdCQ3lBQUlBQXZBVEJCQ0hJN0FUQWdFQ0VCQzBFNUlSQU12d0VMSUFCQkFEb0FMQ0FCSVFFTFFUUWhFQXk5QVFzZ0FDQUFMd0V3UVNCeU93RXdJQUVoQVF3Q0N5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRc1lDQWdBQWlCQTBBSUFFaEFRekhBUXNnQUVFM05nSWNJQUFnQVRZQ0ZDQUFJQVEyQWd4QkFDRVFETlFCQ3lBQVFRZzZBQ3dnQVNFQkMwRXdJUkFNdVFFTEFrQWdBQzBBS0VFQlJnMEFJQUVoQVF3RUN5QUFMUUF0UVFoeFJRMlRBU0FCSVFFTUF3c2dBQzBBTUVFZ2NRMlVBVUhGQVNFUURMY0JDd0pBSUE4Z0FrWU5BQUpBQTBBQ1FDQVBMUUFBUVZCcUlnRkIvd0Z4UVFwSkRRQWdEeUVCUVRVaEVBeTZBUXNnQUNrRElDSVJRcG16NXN5WnMrYk1HVllOQVNBQUlCRkNDbjRpRVRjRElDQVJJQUd0UXY4Qmd5SVNRbitGVmcwQklBQWdFU0FTZkRjRElDQVBRUUZxSWc4Z0FrY05BQXRCT1NFUURORUJDeUFBS0FJRUlRSWdBRUVBTmdJRUlBQWdBaUFQUVFGcUlnUVFzWUNBZ0FBaUFnMlZBU0FFSVFFTXd3RUxRVGtoRUF6UEFRc0NRQ0FBTHdFd0lnRkJDSEZGRFFBZ0FDMEFLRUVCUncwQUlBQXRBQzFCQ0hGRkRaQUJDeUFBSUFGQjkvc0RjVUdBQkhJN0FUQWdEeUVCQzBFM0lSQU10QUVMSUFBZ0FDOEJNRUVRY2pzQk1BeXJBUXNnRUVFVlJnMkxBU0FBUVFBMkFod2dBQ0FCTmdJVUlBQkI4STZBZ0FBMkFoQWdBRUVjTmdJTVFRQWhFQXpMQVFzZ0FFSERBRFlDSENBQUlBRTJBZ3dnQUNBTlFRRnFOZ0lVUVFBaEVBektBUXNDUUNBQkxRQUFRVHBIRFFBZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFSytBZ0lBQUloQU5BQ0FCUVFGcUlRRU1Zd3NnQUVIREFEWUNIQ0FBSUJBMkFnd2dBQ0FCUVFGcU5nSVVRUUFoRUF6S0FRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFiR1JnSUFBTmdJUUlBQkJDallDREVFQUlSQU15UUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdnbVlDQUFEWUNFQ0FBUVI0MkFneEJBQ0VRRE1nQkN5QUFRUUEyQWdBTElBQkJnQkk3QVNvZ0FDQVhRUUZxSWdFZ0FoQ29nSUNBQUNJUURRRWdBU0VCQzBISEFDRVFES3dCQ3lBUVFSVkhEWU1CSUFCQjBRQTJBaHdnQUNBQk5nSVVJQUJCNDVlQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF6RUFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1YZ3NnQUVIU0FEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXpEQVFzZ0FFRUFOZ0ljSUFBZ0ZEWUNGQ0FBUWNHb2dJQUFOZ0lRSUFCQkJ6WUNEQ0FBUVFBMkFnQkJBQ0VRRE1JQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReGRDeUFBUWRNQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETUVCQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFZQ1JnSUFBTmdJUUlBQkJDVFlDREF6QUFRc2dFRUVWUmcxOUlBQkJBRFlDSENBQUlBRTJBaFFnQUVHVWpZQ0FBRFlDRUNBQVFTRTJBZ3hCQUNFUURMOEJDMEVCSVJaQkFDRVhRUUFoRkVFQklSQUxJQUFnRURvQUt5QUJRUUZxSVFFQ1FBSkFJQUF0QUMxQkVIRU5BQUpBQWtBQ1FDQUFMUUFxRGdNQkFBSUVDeUFXUlEwRERBSUxJQlFOQVF3Q0N5QVhSUTBCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFyWUNBZ0FBaUVBMEFJQUVoQVF4Y0N5QUFRZGdBTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURMNEJDeUFBS0FJRUlRUWdBRUVBTmdJRUFrQWdBQ0FFSUFFUXJZQ0FnQUFpQkEwQUlBRWhBUXl0QVFzZ0FFSFpBRFlDSENBQUlBRTJBaFFnQUNBRU5nSU1RUUFoRUF5OUFRc2dBQ2dDQkNFRUlBQkJBRFlDQkFKQUlBQWdCQ0FCRUsyQWdJQUFJZ1FOQUNBQklRRU1xd0VMSUFCQjJnQTJBaHdnQUNBQk5nSVVJQUFnQkRZQ0RFRUFJUkFNdkFFTElBQW9BZ1FoQkNBQVFRQTJBZ1FDUUNBQUlBUWdBUkN0Z0lDQUFDSUVEUUFnQVNFQkRLa0JDeUFBUWR3QU5nSWNJQUFnQVRZQ0ZDQUFJQVEyQWd4QkFDRVFETHNCQ3dKQUlBRXRBQUJCVUdvaUVFSC9BWEZCQ2s4TkFDQUFJQkE2QUNvZ0FVRUJhaUVCUWM4QUlSQU1vZ0VMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQ3RnSUNBQUNJRURRQWdBU0VCREtjQkN5QUFRZDRBTmdJY0lBQWdBVFlDRkNBQUlBUTJBZ3hCQUNFUURMb0JDeUFBUVFBMkFnQWdGMEVCYWlFQkFrQWdBQzBBS1VFalR3MEFJQUVoQVF4WkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjA0bUFnQUEyQWhBZ0FFRUlOZ0lNUVFBaEVBeTVBUXNnQUVFQU5nSUFDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVpDemdJQUFOZ0lRSUFCQkNEWUNEQXkzQVFzZ0FFRUFOZ0lBSUJkQkFXb2hBUUpBSUFBdEFDbEJJVWNOQUNBQklRRU1WZ3NnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWnVLZ0lBQU5nSVFJQUJCQ0RZQ0RFRUFJUkFNdGdFTElBQkJBRFlDQUNBWFFRRnFJUUVDUUNBQUxRQXBJaEJCWFdwQkMwOE5BQ0FCSVFFTVZRc0NRQ0FRUVFaTERRQkJBU0FRZEVIS0FIRkZEUUFnQVNFQkRGVUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCOTRtQWdBQTJBaEFnQUVFSU5nSU1ETFVCQ3lBUVFSVkdEWEVnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYm1OZ0lBQU5nSVFJQUJCR2pZQ0RFRUFJUkFNdEFFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRGUUxJQUJCNVFBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1zd0VMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREUwTElBQkIwZ0EyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXNnRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERTBMSUFCQjB3QTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNc1FFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRGRUxJQUJCNVFBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1zQUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhHaW9DQUFEWUNFQ0FBUVFjMkFneEJBQ0VRREs4QkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReEpDeUFBUWRJQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFESzRCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4SkN5QUFRZE1BTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURLMEJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhOQ3lBQVFlVUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRREt3QkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjNJaUFnQUEyQWhBZ0FFRUhOZ0lNUVFBaEVBeXJBUXNnRUVFL1J3MEJJQUZCQVdvaEFRdEJCU0VRREpBQkMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZjJTZ0lBQU5nSVFJQUJCQnpZQ0RBeW9BUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNUWdzZ0FFSFNBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF5bkFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1RZ3NnQUVIVEFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXltQVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVJnc2dBRUhsQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeWxBUXNnQUNnQ0JDRUJJQUJCQURZQ0JBSkFJQUFnQVNBVUVLZUFnSUFBSWdFTkFDQVVJUUVNUHdzZ0FFSFNBRFlDSENBQUlCUTJBaFFnQUNBQk5nSU1RUUFoRUF5a0FRc2dBQ2dDQkNFQklBQkJBRFlDQkFKQUlBQWdBU0FVRUtlQWdJQUFJZ0VOQUNBVUlRRU1Qd3NnQUVIVEFEWUNIQ0FBSUJRMkFoUWdBQ0FCTmdJTVFRQWhFQXlqQVFzZ0FDZ0NCQ0VCSUFCQkFEWUNCQUpBSUFBZ0FTQVVFS2VBZ0lBQUlnRU5BQ0FVSVFFTVF3c2dBRUhsQURZQ0hDQUFJQlEyQWhRZ0FDQUJOZ0lNUVFBaEVBeWlBUXNnQUVFQU5nSWNJQUFnRkRZQ0ZDQUFRY09QZ0lBQU5nSVFJQUJCQnpZQ0RFRUFJUkFNb1FFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVIRGo0Q0FBRFlDRUNBQVFRYzJBZ3hCQUNFUURLQUJDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0ZEWUNGQ0FBUVl5Y2dJQUFOZ0lRSUFCQkJ6WUNEQXlmQVFzZ0FFRUFOZ0ljSUFBZ0ZEWUNGQ0FBUVl5Y2dJQUFOZ0lRSUFCQkJ6WUNERUVBSVJBTW5nRUxJQUJCQURZQ0hDQUFJQlEyQWhRZ0FFSCtrWUNBQURZQ0VDQUFRUWMyQWd4QkFDRVFESjBCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCanB1QWdBQTJBaEFnQUVFR05nSU1RUUFoRUF5Y0FRc2dFRUVWUmcxWElBQkJBRFlDSENBQUlBRTJBaFFnQUVITWpvQ0FBRFlDRUNBQVFTQTJBZ3hCQUNFUURKc0JDeUFBUVFBMkFnQWdFRUVCYWlFQlFTUWhFQXNnQUNBUU9nQXBJQUFvQWdRaEVDQUFRUUEyQWdRZ0FDQVFJQUVRcTRDQWdBQWlFQTFVSUFFaEFRdytDeUFBUVFBMkFnQUxRUUFoRUNBQVFRQTJBaHdnQUNBRU5nSVVJQUJCOFp1QWdBQTJBaEFnQUVFR05nSU1ESmNCQ3lBQlFSVkdEVkFnQUVFQU5nSWNJQUFnQlRZQ0ZDQUFRZkNNZ0lBQU5nSVFJQUJCR3pZQ0RFRUFJUkFNbGdFTElBQW9BZ1FoQlNBQVFRQTJBZ1FnQUNBRklCQVFxWUNBZ0FBaUJRMEJJQkJCQVdvaEJRdEJyUUVoRUF4N0N5QUFRY0VCTmdJY0lBQWdCVFlDRENBQUlCQkJBV28yQWhSQkFDRVFESk1CQ3lBQUtBSUVJUVlnQUVFQU5nSUVJQUFnQmlBUUVLbUFnSUFBSWdZTkFTQVFRUUZxSVFZTFFhNEJJUkFNZUFzZ0FFSENBVFlDSENBQUlBWTJBZ3dnQUNBUVFRRnFOZ0lVUVFBaEVBeVFBUXNnQUVFQU5nSWNJQUFnQnpZQ0ZDQUFRWmVMZ0lBQU5nSVFJQUJCRFRZQ0RFRUFJUkFNandFTElBQkJBRFlDSENBQUlBZzJBaFFnQUVIamtJQ0FBRFlDRUNBQVFRazJBZ3hCQUNFUURJNEJDeUFBUVFBMkFod2dBQ0FJTmdJVUlBQkJsSTJBZ0FBMkFoQWdBRUVoTmdJTVFRQWhFQXlOQVF0QkFTRVdRUUFoRjBFQUlSUkJBU0VRQ3lBQUlCQTZBQ3NnQ1VFQmFpRUlBa0FDUUNBQUxRQXRRUkJ4RFFBQ1FBSkFBa0FnQUMwQUtnNERBUUFDQkFzZ0ZrVU5Bd3dDQ3lBVURRRU1BZ3NnRjBVTkFRc2dBQ2dDQkNFUUlBQkJBRFlDQkNBQUlCQWdDQkN0Z0lDQUFDSVFSUTA5SUFCQnlRRTJBaHdnQUNBSU5nSVVJQUFnRURZQ0RFRUFJUkFNakFFTElBQW9BZ1FoQkNBQVFRQTJBZ1FnQUNBRUlBZ1FyWUNBZ0FBaUJFVU5kaUFBUWNvQk5nSWNJQUFnQ0RZQ0ZDQUFJQVEyQWd4QkFDRVFESXNCQ3lBQUtBSUVJUVFnQUVFQU5nSUVJQUFnQkNBSkVLMkFnSUFBSWdSRkRYUWdBRUhMQVRZQ0hDQUFJQWsyQWhRZ0FDQUVOZ0lNUVFBaEVBeUtBUXNnQUNnQ0JDRUVJQUJCQURZQ0JDQUFJQVFnQ2hDdGdJQ0FBQ0lFUlExeUlBQkJ6UUUyQWh3Z0FDQUtOZ0lVSUFBZ0JEWUNERUVBSVJBTWlRRUxBa0FnQ3kwQUFFRlFhaUlRUWY4QmNVRUtUdzBBSUFBZ0VEb0FLaUFMUVFGcUlRcEJ0Z0VoRUF4d0N5QUFLQUlFSVFRZ0FFRUFOZ0lFSUFBZ0JDQUxFSzJBZ0lBQUlnUkZEWEFnQUVIUEFUWUNIQ0FBSUFzMkFoUWdBQ0FFTmdJTVFRQWhFQXlJQVFzZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUVpDemdJQUFOZ0lRSUFCQkNEWUNEQ0FBUVFBMkFnQkJBQ0VRREljQkN5QUJRUlZHRFQ4Z0FFRUFOZ0ljSUFBZ0REWUNGQ0FBUWN5T2dJQUFOZ0lRSUFCQklEWUNERUVBSVJBTWhnRUxJQUJCZ1FRN0FTZ2dBQ2dDQkNFUUlBQkNBRGNEQUNBQUlCQWdERUVCYWlJTUVLdUFnSUFBSWhCRkRUZ2dBRUhUQVRZQ0hDQUFJQXcyQWhRZ0FDQVFOZ0lNUVFBaEVBeUZBUXNnQUVFQU5nSUFDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWRpYmdJQUFOZ0lRSUFCQkNEWUNEQXlEQVFzZ0FDZ0NCQ0VRSUFCQ0FEY0RBQ0FBSUJBZ0MwRUJhaUlMRUt1QWdJQUFJaEFOQVVIR0FTRVFER2tMSUFCQkFqb0FLQXhWQ3lBQVFkVUJOZ0ljSUFBZ0N6WUNGQ0FBSUJBMkFneEJBQ0VRRElBQkN5QVFRUlZHRFRjZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWFTTWdJQUFOZ0lRSUFCQkVEWUNERUVBSVJBTWZ3c2dBQzBBTkVFQlJ3MDBJQUFnQkNBQ0VMeUFnSUFBSWhCRkRUUWdFRUVWUncwMUlBQkIzQUUyQWh3Z0FDQUVOZ0lVSUFCQjFaYUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBeCtDMEVBSVJBZ0FFRUFOZ0ljSUFCQnI0dUFnQUEyQWhBZ0FFRUNOZ0lNSUFBZ0ZFRUJhallDRkF4OUMwRUFJUkFNWXd0QkFpRVFER0lMUVEwaEVBeGhDMEVQSVJBTVlBdEJKU0VRREY4TFFSTWhFQXhlQzBFVklSQU1YUXRCRmlFUURGd0xRUmNoRUF4YkMwRVlJUkFNV2d0QkdTRVFERmtMUVJvaEVBeFlDMEViSVJBTVZ3dEJIQ0VRREZZTFFSMGhFQXhWQzBFZklSQU1WQXRCSVNFUURGTUxRU01oRUF4U0MwSEdBQ0VRREZFTFFTNGhFQXhRQzBFdklSQU1Ud3RCT3lFUURFNExRVDBoRUF4TkMwSElBQ0VRREV3TFFja0FJUkFNU3d0Qnl3QWhFQXhLQzBITUFDRVFERWtMUWM0QUlSQU1TQXRCMFFBaEVBeEhDMEhWQUNFUURFWUxRZGdBSVJBTVJRdEIyUUFoRUF4RUMwSGJBQ0VRREVNTFFlUUFJUkFNUWd0QjVRQWhFQXhCQzBIeEFDRVFERUFMUWZRQUlSQU1Qd3RCalFFaEVBdytDMEdYQVNFUUREMExRYWtCSVJBTVBBdEJyQUVoRUF3N0MwSEFBU0VRRERvTFFia0JJUkFNT1F0QnJ3RWhFQXc0QzBHeEFTRVFERGNMUWJJQklSQU1OZ3RCdEFFaEVBdzFDMEcxQVNFUUREUUxRYm9CSVJBTU13dEJ2UUVoRUF3eUMwRy9BU0VRRERFTFFjRUJJUkFNTUFzZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWVtTGdJQUFOZ0lRSUFCQkh6WUNERUVBSVJBTVNBc2dBRUhiQVRZQ0hDQUFJQVEyQWhRZ0FFSDZsb0NBQURZQ0VDQUFRUlUyQWd4QkFDRVFERWNMSUFCQitBQTJBaHdnQUNBTU5nSVVJQUJCeXBpQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF4R0N5QUFRZEVBTmdJY0lBQWdCVFlDRkNBQVFiQ1hnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1SUXNnQUVINUFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXhFQ3lBQVFmZ0FOZ0ljSUFBZ0FUWUNGQ0FBUWNxWWdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTVF3c2dBRUhrQURZQ0hDQUFJQUUyQWhRZ0FFSGpsNENBQURZQ0VDQUFRUlUyQWd4QkFDRVFERUlMSUFCQjF3QTJBaHdnQUNBQk5nSVVJQUJCeVplQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF4QkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnVZMkFnQUEyQWhBZ0FFRWFOZ0lNUVFBaEVBeEFDeUFBUWNJQU5nSWNJQUFnQVRZQ0ZDQUFRZU9ZZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNUHdzZ0FFRUFOZ0lFSUFBZ0R5QVBFTEdBZ0lBQUlnUkZEUUVnQUVFNk5nSWNJQUFnQkRZQ0RDQUFJQTlCQVdvMkFoUkJBQ0VRREQ0TElBQW9BZ1FoQkNBQVFRQTJBZ1FDUUNBQUlBUWdBUkN4Z0lDQUFDSUVSUTBBSUFCQk96WUNIQ0FBSUFRMkFnd2dBQ0FCUVFGcU5nSVVRUUFoRUF3K0N5QUJRUUZxSVFFTUxRc2dEMEVCYWlFQkRDMExJQUJCQURZQ0hDQUFJQTgyQWhRZ0FFSGtrb0NBQURZQ0VDQUFRUVEyQWd4QkFDRVFERHNMSUFCQk5qWUNIQ0FBSUFRMkFoUWdBQ0FDTmdJTVFRQWhFQXc2Q3lBQVFTNDJBaHdnQUNBT05nSVVJQUFnQkRZQ0RFRUFJUkFNT1FzZ0FFSFFBRFlDSENBQUlBRTJBaFFnQUVHUm1JQ0FBRFlDRUNBQVFSVTJBZ3hCQUNFUUREZ0xJQTFCQVdvaEFRd3NDeUFBUVJVMkFod2dBQ0FCTmdJVUlBQkJncG1BZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXcyQ3lBQVFSczJBaHdnQUNBQk5nSVVJQUJCa1plQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3MUN5QUFRUTgyQWh3Z0FDQUJOZ0lVSUFCQmtaZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBdzBDeUFBUVFzMkFod2dBQ0FCTmdJVUlBQkJrWmVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd6Q3lBQVFSbzJBaHdnQUNBQk5nSVVJQUJCZ3BtQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3eUN5QUFRUXMyQWh3Z0FDQUJOZ0lVSUFCQmdwbUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBd3hDeUFBUVFvMkFod2dBQ0FCTmdJVUlBQkI1SmFBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd3Q3lBQVFSNDJBaHdnQUNBQk5nSVVJQUJCK1plQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3dkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQjJvMkFnQUEyQWhBZ0FFRVVOZ0lNUVFBaEVBd3VDeUFBUVFRMkFod2dBQ0FCTmdJVUlBQkJzSmlBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd0Q3lBQVFRQTJBZ0FnQzBFQmFpRUxDMEc0QVNFUURCSUxJQUJCQURZQ0FDQVFRUUZxSVFGQjlRQWhFQXdSQ3lBQklRRUNRQ0FBTFFBcFFRVkhEUUJCNHdBaEVBd1JDMEhpQUNFUURCQUxRUUFoRUNBQVFRQTJBaHdnQUVIa2tZQ0FBRFlDRUNBQVFRYzJBZ3dnQUNBVVFRRnFOZ0lVRENnTElBQkJBRFlDQUNBWFFRRnFJUUZCd0FBaEVBd09DMEVCSVFFTElBQWdBVG9BTENBQVFRQTJBZ0FnRjBFQmFpRUJDMEVvSVJBTUN3c2dBU0VCQzBFNElSQU1DUXNDUUNBQklnOGdBa1lOQUFOQUFrQWdEeTBBQUVHQXZvQ0FBR290QUFBaUFVRUJSZzBBSUFGQkFrY05BeUFQUVFGcUlRRU1CQXNnRDBFQmFpSVBJQUpIRFFBTFFUNGhFQXdpQzBFK0lSQU1JUXNnQUVFQU9nQXNJQThoQVF3QkMwRUxJUkFNQmd0Qk9pRVFEQVVMSUFGQkFXb2hBVUV0SVJBTUJBc2dBQ0FCT2dBc0lBQkJBRFlDQUNBV1FRRnFJUUZCRENFUURBTUxJQUJCQURZQ0FDQVhRUUZxSVFGQkNpRVFEQUlMSUFCQkFEWUNBQXNnQUVFQU9nQXNJQTBoQVVFSklSQU1BQXNMUVFBaEVDQUFRUUEyQWh3Z0FDQUxOZ0lVSUFCQnpaQ0FnQUEyQWhBZ0FFRUpOZ0lNREJjTFFRQWhFQ0FBUVFBMkFod2dBQ0FLTmdJVUlBQkI2WXFBZ0FBMkFoQWdBRUVKTmdJTURCWUxRUUFoRUNBQVFRQTJBaHdnQUNBSk5nSVVJQUJCdDVDQWdBQTJBaEFnQUVFSk5nSU1EQlVMUVFBaEVDQUFRUUEyQWh3Z0FDQUlOZ0lVSUFCQm5KR0FnQUEyQWhBZ0FFRUpOZ0lNREJRTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJ6WkNBZ0FBMkFoQWdBRUVKTmdJTURCTUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCNllxQWdBQTJBaEFnQUVFSk5nSU1EQklMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnQ1Q0FnQUEyQWhBZ0FFRUpOZ0lNREJFTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJuSkdBZ0FBMkFoQWdBRUVKTmdJTURCQUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCbDVXQWdBQTJBaEFnQUVFUE5nSU1EQThMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQmw1V0FnQUEyQWhBZ0FFRVBOZ0lNREE0TFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJ3SktBZ0FBMkFoQWdBRUVMTmdJTURBMExRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCbFltQWdBQTJBaEFnQUVFTE5nSU1EQXdMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjRZK0FnQUEyQWhBZ0FFRUtOZ0lNREFzTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkIrNCtBZ0FBMkFoQWdBRUVLTmdJTURBb0xRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCOFptQWdBQTJBaEFnQUVFQ05nSU1EQWtMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnhKU0FnQUEyQWhBZ0FFRUNOZ0lNREFnTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkI4cFdBZ0FBMkFoQWdBRUVDTmdJTURBY0xJQUJCQWpZQ0hDQUFJQUUyQWhRZ0FFR2Ntb0NBQURZQ0VDQUFRUlkyQWd4QkFDRVFEQVlMUVFFaEVBd0ZDMEhVQUNFUUlBRWlCQ0FDUmcwRUlBTkJDR29nQUNBRUlBSkIyTUtBZ0FCQkNoREZnSUNBQUNBREtBSU1JUVFnQXlnQ0NBNERBUVFDQUFzUXlvQ0FnQUFBQ3lBQVFRQTJBaHdnQUVHMW1vQ0FBRFlDRUNBQVFSYzJBZ3dnQUNBRVFRRnFOZ0lVUVFBaEVBd0NDeUFBUVFBMkFod2dBQ0FFTmdJVUlBQkJ5cHFBZ0FBMkFoQWdBRUVKTmdJTVFRQWhFQXdCQ3dKQUlBRWlCQ0FDUncwQVFTSWhFQXdCQ3lBQVFZbUFnSUFBTmdJSUlBQWdCRFlDQkVFaElSQUxJQU5CRUdva2dJQ0FnQUFnRUF1dkFRRUNmeUFCS0FJQUlRWUNRQUpBSUFJZ0EwWU5BQ0FFSUFacUlRUWdCaUFEYWlBQ2F5RUhJQUlnQmtGL2N5QUZhaUlHYWlFRkEwQUNRQ0FDTFFBQUlBUXRBQUJHRFFCQkFpRUVEQU1MQWtBZ0JnMEFRUUFoQkNBRklRSU1Bd3NnQmtGL2FpRUdJQVJCQVdvaEJDQUNRUUZxSWdJZ0EwY05BQXNnQnlFR0lBTWhBZ3NnQUVFQk5nSUFJQUVnQmpZQ0FDQUFJQUkyQWdRUEN5QUJRUUEyQWdBZ0FDQUVOZ0lBSUFBZ0FqWUNCQXNLQUNBQUVNZUFnSUFBQy9JMkFRdC9JNENBZ0lBQVFSQnJJZ0VrZ0lDQWdBQUNRRUVBS0FLZzBJQ0FBQTBBUVFBUXk0Q0FnQUJCZ05TRWdBQnJJZ0pCMlFCSkRRQkJBQ0VEQWtCQkFDZ0M0Tk9BZ0FBaUJBMEFRUUJDZnpjQzdOT0FnQUJCQUVLQWdJU0FnSURBQURjQzVOT0FnQUJCQUNBQlFRaHFRWEJ4UWRpcTFhb0ZjeUlFTmdMZzA0Q0FBRUVBUVFBMkF2VFRnSUFBUVFCQkFEWUN4Tk9BZ0FBTFFRQWdBallDek5PQWdBQkJBRUdBMUlTQUFEWUN5Tk9BZ0FCQkFFR0ExSVNBQURZQ21OQ0FnQUJCQUNBRU5nS3MwSUNBQUVFQVFYODJBcWpRZ0lBQUEwQWdBMEhFMElDQUFHb2dBMEc0MElDQUFHb2lCRFlDQUNBRUlBTkJzTkNBZ0FCcUlnVTJBZ0FnQTBHODBJQ0FBR29nQlRZQ0FDQURRY3pRZ0lBQWFpQURRY0RRZ0lBQWFpSUZOZ0lBSUFVZ0JEWUNBQ0FEUWRUUWdJQUFhaUFEUWNqUWdJQUFhaUlFTmdJQUlBUWdCVFlDQUNBRFFkRFFnSUFBYWlBRU5nSUFJQU5CSUdvaUEwR0FBa2NOQUF0QmdOU0VnQUJCZUVHQTFJU0FBR3RCRDNGQkFFR0ExSVNBQUVFSWFrRVBjUnNpQTJvaUJFRUVhaUFDUVVocUlnVWdBMnNpQTBFQmNqWUNBRUVBUVFBb0F2RFRnSUFBTmdLazBJQ0FBRUVBSUFNMkFwVFFnSUFBUVFBZ0JEWUNvTkNBZ0FCQmdOU0VnQUFnQldwQk9EWUNCQXNDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdBRUhzQVVzTkFBSkFRUUFvQW9qUWdJQUFJZ1pCRUNBQVFSTnFRWEJ4SUFCQkMwa2JJZ0pCQTNZaUJIWWlBMEVEY1VVTkFBSkFBa0FnQTBFQmNTQUVja0VCY3lJRlFRTjBJZ1JCc05DQWdBQnFJZ01nQkVHNDBJQ0FBR29vQWdBaUJDZ0NDQ0lDUncwQVFRQWdCa0YrSUFWM2NUWUNpTkNBZ0FBTUFRc2dBeUFDTmdJSUlBSWdBellDREFzZ0JFRUlhaUVESUFRZ0JVRURkQ0lGUVFOeU5nSUVJQVFnQldvaUJDQUVLQUlFUVFGeU5nSUVEQXdMSUFKQkFDZ0NrTkNBZ0FBaUIwME5BUUpBSUFORkRRQUNRQUpBSUFNZ0JIUkJBaUFFZENJRFFRQWdBMnR5Y1NJRFFRQWdBMnR4UVg5cUlnTWdBMEVNZGtFUWNTSURkaUlFUVFWMlFRaHhJZ1VnQTNJZ0JDQUZkaUlEUVFKMlFRUnhJZ1J5SUFNZ0JIWWlBMEVCZGtFQ2NTSUVjaUFESUFSMklnTkJBWFpCQVhFaUJISWdBeUFFZG1vaUJFRURkQ0lEUWJEUWdJQUFhaUlGSUFOQnVOQ0FnQUJxS0FJQUlnTW9BZ2dpQUVjTkFFRUFJQVpCZmlBRWQzRWlCallDaU5DQWdBQU1BUXNnQlNBQU5nSUlJQUFnQlRZQ0RBc2dBeUFDUVFOeU5nSUVJQU1nQkVFRGRDSUVhaUFFSUFKcklnVTJBZ0FnQXlBQ2FpSUFJQVZCQVhJMkFnUUNRQ0FIUlEwQUlBZEJlSEZCc05DQWdBQnFJUUpCQUNnQ25OQ0FnQUFoQkFKQUFrQWdCa0VCSUFkQkEzWjBJZ2h4RFFCQkFDQUdJQWh5TmdLSTBJQ0FBQ0FDSVFnTUFRc2dBaWdDQ0NFSUN5QUlJQVEyQWd3Z0FpQUVOZ0lJSUFRZ0FqWUNEQ0FFSUFnMkFnZ0xJQU5CQ0dvaEEwRUFJQUEyQXB6UWdJQUFRUUFnQlRZQ2tOQ0FnQUFNREF0QkFDZ0NqTkNBZ0FBaUNVVU5BU0FKUVFBZ0NXdHhRWDlxSWdNZ0EwRU1ka0VRY1NJRGRpSUVRUVYyUVFoeElnVWdBM0lnQkNBRmRpSURRUUoyUVFSeElnUnlJQU1nQkhZaUEwRUJka0VDY1NJRWNpQURJQVIySWdOQkFYWkJBWEVpQkhJZ0F5QUVkbXBCQW5SQnVOS0FnQUJxS0FJQUlnQW9BZ1JCZUhFZ0Ftc2hCQ0FBSVFVQ1FBTkFBa0FnQlNnQ0VDSUREUUFnQlVFVWFpZ0NBQ0lEUlEwQ0N5QURLQUlFUVhoeElBSnJJZ1VnQkNBRklBUkpJZ1ViSVFRZ0F5QUFJQVViSVFBZ0F5RUZEQUFMQ3lBQUtBSVlJUW9DUUNBQUtBSU1JZ2dnQUVZTkFDQUFLQUlJSWdOQkFDZ0NtTkNBZ0FCSkdpQUlJQU0yQWdnZ0F5QUlOZ0lNREFzTEFrQWdBRUVVYWlJRktBSUFJZ01OQUNBQUtBSVFJZ05GRFFNZ0FFRVFhaUVGQ3dOQUlBVWhDeUFESWdoQkZHb2lCU2dDQUNJRERRQWdDRUVRYWlFRklBZ29BaEFpQXcwQUN5QUxRUUEyQWdBTUNndEJmeUVDSUFCQnYzOUxEUUFnQUVFVGFpSURRWEJ4SVFKQkFDZ0NqTkNBZ0FBaUIwVU5BRUVBSVFzQ1FDQUNRWUFDU1EwQVFSOGhDeUFDUWYvLy93ZExEUUFnQTBFSWRpSURJQU5CZ1A0L2FrRVFka0VJY1NJRGRDSUVJQVJCZ09BZmFrRVFka0VFY1NJRWRDSUZJQVZCZ0lBUGFrRVFka0VDY1NJRmRFRVBkaUFESUFSeUlBVnlheUlEUVFGMElBSWdBMEVWYW5aQkFYRnlRUnhxSVFzTFFRQWdBbXNoQkFKQUFrQUNRQUpBSUF0QkFuUkJ1TktBZ0FCcUtBSUFJZ1VOQUVFQUlRTkJBQ0VJREFFTFFRQWhBeUFDUVFCQkdTQUxRUUYyYXlBTFFSOUdHM1FoQUVFQUlRZ0RRQUpBSUFVb0FnUkJlSEVnQW1zaUJpQUVUdzBBSUFZaEJDQUZJUWdnQmcwQVFRQWhCQ0FGSVFnZ0JTRUREQU1MSUFNZ0JVRVVhaWdDQUNJR0lBWWdCU0FBUVIxMlFRUnhha0VRYWlnQ0FDSUZSaHNnQXlBR0d5RURJQUJCQVhRaEFDQUZEUUFMQ3dKQUlBTWdDSElOQUVFQUlRaEJBaUFMZENJRFFRQWdBMnR5SUFkeElnTkZEUU1nQTBFQUlBTnJjVUYvYWlJRElBTkJESFpCRUhFaUEzWWlCVUVGZGtFSWNTSUFJQU55SUFVZ0FIWWlBMEVDZGtFRWNTSUZjaUFESUFWMklnTkJBWFpCQW5FaUJYSWdBeUFGZGlJRFFRRjJRUUZ4SWdWeUlBTWdCWFpxUVFKMFFialNnSUFBYWlnQ0FDRURDeUFEUlEwQkN3TkFJQU1vQWdSQmVIRWdBbXNpQmlBRVNTRUFBa0FnQXlnQ0VDSUZEUUFnQTBFVWFpZ0NBQ0VGQ3lBR0lBUWdBQnNoQkNBRElBZ2dBQnNoQ0NBRklRTWdCUTBBQ3dzZ0NFVU5BQ0FFUVFBb0FwRFFnSUFBSUFKclR3MEFJQWdvQWhnaEN3SkFJQWdvQWd3aUFDQUlSZzBBSUFnb0FnZ2lBMEVBS0FLWTBJQ0FBRWthSUFBZ0F6WUNDQ0FESUFBMkFnd01DUXNDUUNBSVFSUnFJZ1VvQWdBaUF3MEFJQWdvQWhBaUEwVU5BeUFJUVJCcUlRVUxBMEFnQlNFR0lBTWlBRUVVYWlJRktBSUFJZ01OQUNBQVFSQnFJUVVnQUNnQ0VDSUREUUFMSUFaQkFEWUNBQXdJQ3dKQVFRQW9BcERRZ0lBQUlnTWdBa2tOQUVFQUtBS2MwSUNBQUNFRUFrQUNRQ0FESUFKcklnVkJFRWtOQUNBRUlBSnFJZ0FnQlVFQmNqWUNCRUVBSUFVMkFwRFFnSUFBUVFBZ0FEWUNuTkNBZ0FBZ0JDQURhaUFGTmdJQUlBUWdBa0VEY2pZQ0JBd0JDeUFFSUFOQkEzSTJBZ1FnQkNBRGFpSURJQU1vQWdSQkFYSTJBZ1JCQUVFQU5nS2MwSUNBQUVFQVFRQTJBcERRZ0lBQUN5QUVRUWhxSVFNTUNnc0NRRUVBS0FLVTBJQ0FBQ0lBSUFKTkRRQkJBQ2dDb05DQWdBQWlBeUFDYWlJRUlBQWdBbXNpQlVFQmNqWUNCRUVBSUFVMkFwVFFnSUFBUVFBZ0JEWUNvTkNBZ0FBZ0F5QUNRUU55TmdJRUlBTkJDR29oQXd3S0N3SkFBa0JCQUNnQzROT0FnQUJGRFFCQkFDZ0M2Tk9BZ0FBaEJBd0JDMEVBUW44M0F1elRnSUFBUVFCQ2dJQ0VnSUNBd0FBM0F1VFRnSUFBUVFBZ0FVRU1ha0Z3Y1VIWXF0V3FCWE0yQXVEVGdJQUFRUUJCQURZQzlOT0FnQUJCQUVFQU5nTEUwNENBQUVHQWdBUWhCQXRCQUNFREFrQWdCQ0FDUWNjQWFpSUhhaUlHUVFBZ0JHc2lDM0VpQ0NBQ1N3MEFRUUJCTURZQytOT0FnQUFNQ2dzQ1FFRUFLQUxBMDRDQUFDSURSUTBBQWtCQkFDZ0N1Tk9BZ0FBaUJDQUlhaUlGSUFSTkRRQWdCU0FEVFEwQkMwRUFJUU5CQUVFd05nTDQwNENBQUF3S0MwRUFMUURFMDRDQUFFRUVjUTBFQWtBQ1FBSkFRUUFvQXFEUWdJQUFJZ1JGRFFCQnlOT0FnQUFoQXdOQUFrQWdBeWdDQUNJRklBUkxEUUFnQlNBREtBSUVhaUFFU3cwREN5QURLQUlJSWdNTkFBc0xRUUFReTRDQWdBQWlBRUYvUmcwRklBZ2hCZ0pBUVFBb0F1VFRnSUFBSWdOQmYyb2lCQ0FBY1VVTkFDQUlJQUJySUFRZ0FHcEJBQ0FEYTNGcUlRWUxJQVlnQWswTkJTQUdRZjcvLy84SFN3MEZBa0JCQUNnQ3dOT0FnQUFpQTBVTkFFRUFLQUs0MDRDQUFDSUVJQVpxSWdVZ0JFME5CaUFGSUFOTERRWUxJQVlReTRDQWdBQWlBeUFBUncwQkRBY0xJQVlnQUdzZ0MzRWlCa0grLy8vL0Iwc05CQ0FHRU11QWdJQUFJZ0FnQXlnQ0FDQURLQUlFYWtZTkF5QUFJUU1MQWtBZ0EwRi9SZzBBSUFKQnlBQnFJQVpORFFBQ1FDQUhJQVpyUVFBb0F1alRnSUFBSWdScVFRQWdCR3R4SWdSQi92Ly8vd2RORFFBZ0F5RUFEQWNMQWtBZ0JCRExnSUNBQUVGL1JnMEFJQVFnQm1vaEJpQURJUUFNQnd0QkFDQUdheERMZ0lDQUFCb01CQXNnQXlFQUlBTkJmMGNOQlF3REMwRUFJUWdNQnd0QkFDRUFEQVVMSUFCQmYwY05BZ3RCQUVFQUtBTEUwNENBQUVFRWNqWUN4Tk9BZ0FBTElBaEIvdi8vL3dkTERRRWdDQkRMZ0lDQUFDRUFRUUFReTRDQWdBQWhBeUFBUVg5R0RRRWdBMEYvUmcwQklBQWdBMDhOQVNBRElBQnJJZ1lnQWtFNGFrME5BUXRCQUVFQUtBSzQwNENBQUNBR2FpSUROZ0s0MDRDQUFBSkFJQU5CQUNnQ3ZOT0FnQUJORFFCQkFDQUROZ0s4MDRDQUFBc0NRQUpBQWtBQ1FFRUFLQUtnMElDQUFDSUVSUTBBUWNqVGdJQUFJUU1EUUNBQUlBTW9BZ0FpQlNBREtBSUVJZ2hxUmcwQ0lBTW9BZ2dpQXcwQURBTUxDd0pBQWtCQkFDZ0NtTkNBZ0FBaUEwVU5BQ0FBSUFOUERRRUxRUUFnQURZQ21OQ0FnQUFMUVFBaEEwRUFJQVkyQXN6VGdJQUFRUUFnQURZQ3lOT0FnQUJCQUVGL05nS28wSUNBQUVFQVFRQW9BdURUZ0lBQU5nS3MwSUNBQUVFQVFRQTJBdFRUZ0lBQUEwQWdBMEhFMElDQUFHb2dBMEc0MElDQUFHb2lCRFlDQUNBRUlBTkJzTkNBZ0FCcUlnVTJBZ0FnQTBHODBJQ0FBR29nQlRZQ0FDQURRY3pRZ0lBQWFpQURRY0RRZ0lBQWFpSUZOZ0lBSUFVZ0JEWUNBQ0FEUWRUUWdJQUFhaUFEUWNqUWdJQUFhaUlFTmdJQUlBUWdCVFlDQUNBRFFkRFFnSUFBYWlBRU5nSUFJQU5CSUdvaUEwR0FBa2NOQUFzZ0FFRjRJQUJyUVE5eFFRQWdBRUVJYWtFUGNSc2lBMm9pQkNBR1FVaHFJZ1VnQTJzaUEwRUJjallDQkVFQVFRQW9BdkRUZ0lBQU5nS2swSUNBQUVFQUlBTTJBcFRRZ0lBQVFRQWdCRFlDb05DQWdBQWdBQ0FGYWtFNE5nSUVEQUlMSUFNdEFBeEJDSEVOQUNBRUlBVkpEUUFnQkNBQVR3MEFJQVJCZUNBRWEwRVBjVUVBSUFSQkNHcEJEM0ViSWdWcUlnQkJBQ2dDbE5DQWdBQWdCbW9pQ3lBRmF5SUZRUUZ5TmdJRUlBTWdDQ0FHYWpZQ0JFRUFRUUFvQXZEVGdJQUFOZ0trMElDQUFFRUFJQVUyQXBUUWdJQUFRUUFnQURZQ29OQ0FnQUFnQkNBTGFrRTROZ0lFREFFTEFrQWdBRUVBS0FLWTBJQ0FBQ0lJVHcwQVFRQWdBRFlDbU5DQWdBQWdBQ0VJQ3lBQUlBWnFJUVZCeU5PQWdBQWhBd0pBQWtBQ1FBSkFBa0FDUUFKQUEwQWdBeWdDQUNBRlJnMEJJQU1vQWdnaUF3MEFEQUlMQ3lBRExRQU1RUWh4UlEwQkMwSEkwNENBQUNFREEwQUNRQ0FES0FJQUlnVWdCRXNOQUNBRklBTW9BZ1JxSWdVZ0JFc05Bd3NnQXlnQ0NDRUREQUFMQ3lBRElBQTJBZ0FnQXlBREtBSUVJQVpxTmdJRUlBQkJlQ0FBYTBFUGNVRUFJQUJCQ0dwQkQzRWJhaUlMSUFKQkEzSTJBZ1FnQlVGNElBVnJRUTl4UVFBZ0JVRUlha0VQY1J0cUlnWWdDeUFDYWlJQ2F5RURBa0FnQmlBRVJ3MEFRUUFnQWpZQ29OQ0FnQUJCQUVFQUtBS1UwSUNBQUNBRGFpSUROZ0tVMElDQUFDQUNJQU5CQVhJMkFnUU1Bd3NDUUNBR1FRQW9BcHpRZ0lBQVJ3MEFRUUFnQWpZQ25OQ0FnQUJCQUVFQUtBS1EwSUNBQUNBRGFpSUROZ0tRMElDQUFDQUNJQU5CQVhJMkFnUWdBaUFEYWlBRE5nSUFEQU1MQWtBZ0JpZ0NCQ0lFUVFOeFFRRkhEUUFnQkVGNGNTRUhBa0FDUUNBRVFmOEJTdzBBSUFZb0FnZ2lCU0FFUVFOMklnaEJBM1JCc05DQWdBQnFJZ0JHR2dKQUlBWW9BZ3dpQkNBRlJ3MEFRUUJCQUNnQ2lOQ0FnQUJCZmlBSWQzRTJBb2pRZ0lBQURBSUxJQVFnQUVZYUlBUWdCVFlDQ0NBRklBUTJBZ3dNQVFzZ0JpZ0NHQ0VKQWtBQ1FDQUdLQUlNSWdBZ0JrWU5BQ0FHS0FJSUlnUWdDRWthSUFBZ0JEWUNDQ0FFSUFBMkFnd01BUXNDUUNBR1FSUnFJZ1FvQWdBaUJRMEFJQVpCRUdvaUJDZ0NBQ0lGRFFCQkFDRUFEQUVMQTBBZ0JDRUlJQVVpQUVFVWFpSUVLQUlBSWdVTkFDQUFRUkJxSVFRZ0FDZ0NFQ0lGRFFBTElBaEJBRFlDQUFzZ0NVVU5BQUpBQWtBZ0JpQUdLQUljSWdWQkFuUkJ1TktBZ0FCcUlnUW9BZ0JIRFFBZ0JDQUFOZ0lBSUFBTkFVRUFRUUFvQW96UWdJQUFRWDRnQlhkeE5nS00wSUNBQUF3Q0N5QUpRUkJCRkNBSktBSVFJQVpHRzJvZ0FEWUNBQ0FBUlEwQkN5QUFJQWsyQWhnQ1FDQUdLQUlRSWdSRkRRQWdBQ0FFTmdJUUlBUWdBRFlDR0FzZ0JpZ0NGQ0lFUlEwQUlBQkJGR29nQkRZQ0FDQUVJQUEyQWhnTElBY2dBMm9oQXlBR0lBZHFJZ1lvQWdRaEJBc2dCaUFFUVg1eE5nSUVJQUlnQTJvZ0F6WUNBQ0FDSUFOQkFYSTJBZ1FDUUNBRFFmOEJTdzBBSUFOQmVIRkJzTkNBZ0FCcUlRUUNRQUpBUVFBb0FvalFnSUFBSWdWQkFTQURRUU4yZENJRGNRMEFRUUFnQlNBRGNqWUNpTkNBZ0FBZ0JDRUREQUVMSUFRb0FnZ2hBd3NnQXlBQ05nSU1JQVFnQWpZQ0NDQUNJQVEyQWd3Z0FpQUROZ0lJREFNTFFSOGhCQUpBSUFOQi8vLy9CMHNOQUNBRFFRaDJJZ1FnQkVHQS9qOXFRUkIyUVFoeElnUjBJZ1VnQlVHQTRCOXFRUkIyUVFSeElnVjBJZ0FnQUVHQWdBOXFRUkIyUVFKeElnQjBRUTkySUFRZ0JYSWdBSEpySWdSQkFYUWdBeUFFUVJWcWRrRUJjWEpCSEdvaEJBc2dBaUFFTmdJY0lBSkNBRGNDRUNBRVFRSjBRYmpTZ0lBQWFpRUZBa0JCQUNnQ2pOQ0FnQUFpQUVFQklBUjBJZ2h4RFFBZ0JTQUNOZ0lBUVFBZ0FDQUljallDak5DQWdBQWdBaUFGTmdJWUlBSWdBallDQ0NBQ0lBSTJBZ3dNQXdzZ0EwRUFRUmtnQkVFQmRtc2dCRUVmUmh0MElRUWdCU2dDQUNFQUEwQWdBQ0lGS0FJRVFYaHhJQU5HRFFJZ0JFRWRkaUVBSUFSQkFYUWhCQ0FGSUFCQkJIRnFRUkJxSWdnb0FnQWlBQTBBQ3lBSUlBSTJBZ0FnQWlBRk5nSVlJQUlnQWpZQ0RDQUNJQUkyQWdnTUFnc2dBRUY0SUFCclFROXhRUUFnQUVFSWFrRVBjUnNpQTJvaUN5QUdRVWhxSWdnZ0Eyc2lBMEVCY2pZQ0JDQUFJQWhxUVRnMkFnUWdCQ0FGUVRjZ0JXdEJEM0ZCQUNBRlFVbHFRUTl4RzJwQlFXb2lDQ0FJSUFSQkVHcEpHeUlJUVNNMkFnUkJBRUVBS0FMdzA0Q0FBRFlDcE5DQWdBQkJBQ0FETmdLVTBJQ0FBRUVBSUFzMkFxRFFnSUFBSUFoQkVHcEJBQ2tDME5PQWdBQTNBZ0FnQ0VFQUtRTEkwNENBQURjQ0NFRUFJQWhCQ0dvMkF0RFRnSUFBUVFBZ0JqWUN6Tk9BZ0FCQkFDQUFOZ0xJMDRDQUFFRUFRUUEyQXRUVGdJQUFJQWhCSkdvaEF3TkFJQU5CQnpZQ0FDQURRUVJxSWdNZ0JVa05BQXNnQ0NBRVJnMERJQWdnQ0NnQ0JFRitjVFlDQkNBSUlBZ2dCR3NpQURZQ0FDQUVJQUJCQVhJMkFnUUNRQ0FBUWY4QlN3MEFJQUJCZUhGQnNOQ0FnQUJxSVFNQ1FBSkFRUUFvQW9qUWdJQUFJZ1ZCQVNBQVFRTjJkQ0lBY1EwQVFRQWdCU0FBY2pZQ2lOQ0FnQUFnQXlFRkRBRUxJQU1vQWdnaEJRc2dCU0FFTmdJTUlBTWdCRFlDQ0NBRUlBTTJBZ3dnQkNBRk5nSUlEQVFMUVI4aEF3SkFJQUJCLy8vL0Iwc05BQ0FBUVFoMklnTWdBMEdBL2o5cVFSQjJRUWh4SWdOMElnVWdCVUdBNEI5cVFSQjJRUVJ4SWdWMElnZ2dDRUdBZ0E5cVFSQjJRUUp4SWdoMFFROTJJQU1nQlhJZ0NISnJJZ05CQVhRZ0FDQURRUlZxZGtFQmNYSkJIR29oQXdzZ0JDQUROZ0ljSUFSQ0FEY0NFQ0FEUVFKMFFialNnSUFBYWlFRkFrQkJBQ2dDak5DQWdBQWlDRUVCSUFOMElnWnhEUUFnQlNBRU5nSUFRUUFnQ0NBR2NqWUNqTkNBZ0FBZ0JDQUZOZ0lZSUFRZ0JEWUNDQ0FFSUFRMkFnd01CQXNnQUVFQVFSa2dBMEVCZG1zZ0EwRWZSaHQwSVFNZ0JTZ0NBQ0VJQTBBZ0NDSUZLQUlFUVhoeElBQkdEUU1nQTBFZGRpRUlJQU5CQVhRaEF5QUZJQWhCQkhGcVFSQnFJZ1lvQWdBaUNBMEFDeUFHSUFRMkFnQWdCQ0FGTmdJWUlBUWdCRFlDRENBRUlBUTJBZ2dNQXdzZ0JTZ0NDQ0lESUFJMkFnd2dCU0FDTmdJSUlBSkJBRFlDR0NBQ0lBVTJBZ3dnQWlBRE5nSUlDeUFMUVFocUlRTU1CUXNnQlNnQ0NDSURJQVEyQWd3Z0JTQUVOZ0lJSUFSQkFEWUNHQ0FFSUFVMkFnd2dCQ0FETmdJSUMwRUFLQUtVMElDQUFDSURJQUpORFFCQkFDZ0NvTkNBZ0FBaUJDQUNhaUlGSUFNZ0Ftc2lBMEVCY2pZQ0JFRUFJQU0yQXBUUWdJQUFRUUFnQlRZQ29OQ0FnQUFnQkNBQ1FRTnlOZ0lFSUFSQkNHb2hBd3dEQzBFQUlRTkJBRUV3TmdMNDA0Q0FBQXdDQ3dKQUlBdEZEUUFDUUFKQUlBZ2dDQ2dDSENJRlFRSjBRYmpTZ0lBQWFpSURLQUlBUncwQUlBTWdBRFlDQUNBQURRRkJBQ0FIUVg0Z0JYZHhJZ2MyQW96UWdJQUFEQUlMSUF0QkVFRVVJQXNvQWhBZ0NFWWJhaUFBTmdJQUlBQkZEUUVMSUFBZ0N6WUNHQUpBSUFnb0FoQWlBMFVOQUNBQUlBTTJBaEFnQXlBQU5nSVlDeUFJUVJScUtBSUFJZ05GRFFBZ0FFRVVhaUFETmdJQUlBTWdBRFlDR0FzQ1FBSkFJQVJCRDBzTkFDQUlJQVFnQW1vaUEwRURjallDQkNBSUlBTnFJZ01nQXlnQ0JFRUJjallDQkF3QkN5QUlJQUpxSWdBZ0JFRUJjallDQkNBSUlBSkJBM0kyQWdRZ0FDQUVhaUFFTmdJQUFrQWdCRUgvQVVzTkFDQUVRWGh4UWJEUWdJQUFhaUVEQWtBQ1FFRUFLQUtJMElDQUFDSUZRUUVnQkVFRGRuUWlCSEVOQUVFQUlBVWdCSEkyQW9qUWdJQUFJQU1oQkF3QkN5QURLQUlJSVFRTElBUWdBRFlDRENBRElBQTJBZ2dnQUNBRE5nSU1JQUFnQkRZQ0NBd0JDMEVmSVFNQ1FDQUVRZi8vL3dkTERRQWdCRUVJZGlJRElBTkJnUDQvYWtFUWRrRUljU0lEZENJRklBVkJnT0FmYWtFUWRrRUVjU0lGZENJQ0lBSkJnSUFQYWtFUWRrRUNjU0lDZEVFUGRpQURJQVZ5SUFKeWF5SURRUUYwSUFRZ0EwRVZhblpCQVhGeVFSeHFJUU1MSUFBZ0F6WUNIQ0FBUWdBM0FoQWdBMEVDZEVHNDBvQ0FBR29oQlFKQUlBZEJBU0FEZENJQ2NRMEFJQVVnQURZQ0FFRUFJQWNnQW5JMkFvelFnSUFBSUFBZ0JUWUNHQ0FBSUFBMkFnZ2dBQ0FBTmdJTURBRUxJQVJCQUVFWklBTkJBWFpySUFOQkgwWWJkQ0VESUFVb0FnQWhBZ0pBQTBBZ0FpSUZLQUlFUVhoeElBUkdEUUVnQTBFZGRpRUNJQU5CQVhRaEF5QUZJQUpCQkhGcVFSQnFJZ1lvQWdBaUFnMEFDeUFHSUFBMkFnQWdBQ0FGTmdJWUlBQWdBRFlDRENBQUlBQTJBZ2dNQVFzZ0JTZ0NDQ0lESUFBMkFnd2dCU0FBTmdJSUlBQkJBRFlDR0NBQUlBVTJBZ3dnQUNBRE5nSUlDeUFJUVFocUlRTU1BUXNDUUNBS1JRMEFBa0FDUUNBQUlBQW9BaHdpQlVFQ2RFRzQwb0NBQUdvaUF5Z0NBRWNOQUNBRElBZzJBZ0FnQ0EwQlFRQWdDVUYrSUFWM2NUWUNqTkNBZ0FBTUFnc2dDa0VRUVJRZ0NpZ0NFQ0FBUmh0cUlBZzJBZ0FnQ0VVTkFRc2dDQ0FLTmdJWUFrQWdBQ2dDRUNJRFJRMEFJQWdnQXpZQ0VDQURJQWcyQWhnTElBQkJGR29vQWdBaUEwVU5BQ0FJUVJScUlBTTJBZ0FnQXlBSU5nSVlDd0pBQWtBZ0JFRVBTdzBBSUFBZ0JDQUNhaUlEUVFOeU5nSUVJQUFnQTJvaUF5QURLQUlFUVFGeU5nSUVEQUVMSUFBZ0Ftb2lCU0FFUVFGeU5nSUVJQUFnQWtFRGNqWUNCQ0FGSUFScUlBUTJBZ0FDUUNBSFJRMEFJQWRCZUhGQnNOQ0FnQUJxSVFKQkFDZ0NuTkNBZ0FBaEF3SkFBa0JCQVNBSFFRTjJkQ0lJSUFaeERRQkJBQ0FJSUFaeU5nS0kwSUNBQUNBQ0lRZ01BUXNnQWlnQ0NDRUlDeUFJSUFNMkFnd2dBaUFETmdJSUlBTWdBallDRENBRElBZzJBZ2dMUVFBZ0JUWUNuTkNBZ0FCQkFDQUVOZ0tRMElDQUFBc2dBRUVJYWlFREN5QUJRUkJxSklDQWdJQUFJQU1MQ2dBZ0FCREpnSUNBQUF2aURRRUhmd0pBSUFCRkRRQWdBRUY0YWlJQklBQkJmR29vQWdBaUFrRjRjU0lBYWlFREFrQWdBa0VCY1EwQUlBSkJBM0ZGRFFFZ0FTQUJLQUlBSWdKcklnRkJBQ2dDbU5DQWdBQWlCRWtOQVNBQ0lBQnFJUUFDUUNBQlFRQW9BcHpRZ0lBQVJnMEFBa0FnQWtIL0FVc05BQ0FCS0FJSUlnUWdBa0VEZGlJRlFRTjBRYkRRZ0lBQWFpSUdSaG9DUUNBQktBSU1JZ0lnQkVjTkFFRUFRUUFvQW9qUWdJQUFRWDRnQlhkeE5nS0kwSUNBQUF3REN5QUNJQVpHR2lBQ0lBUTJBZ2dnQkNBQ05nSU1EQUlMSUFFb0FoZ2hCd0pBQWtBZ0FTZ0NEQ0lHSUFGR0RRQWdBU2dDQ0NJQ0lBUkpHaUFHSUFJMkFnZ2dBaUFHTmdJTURBRUxBa0FnQVVFVWFpSUNLQUlBSWdRTkFDQUJRUkJxSWdJb0FnQWlCQTBBUVFBaEJnd0JDd05BSUFJaEJTQUVJZ1pCRkdvaUFpZ0NBQ0lFRFFBZ0JrRVFhaUVDSUFZb0FoQWlCQTBBQ3lBRlFRQTJBZ0FMSUFkRkRRRUNRQUpBSUFFZ0FTZ0NIQ0lFUVFKMFFialNnSUFBYWlJQ0tBSUFSdzBBSUFJZ0JqWUNBQ0FHRFFGQkFFRUFLQUtNMElDQUFFRitJQVIzY1RZQ2pOQ0FnQUFNQXdzZ0IwRVFRUlFnQnlnQ0VDQUJSaHRxSUFZMkFnQWdCa1VOQWdzZ0JpQUhOZ0lZQWtBZ0FTZ0NFQ0lDUlEwQUlBWWdBallDRUNBQ0lBWTJBaGdMSUFFb0FoUWlBa1VOQVNBR1FSUnFJQUkyQWdBZ0FpQUdOZ0lZREFFTElBTW9BZ1FpQWtFRGNVRURSdzBBSUFNZ0FrRitjVFlDQkVFQUlBQTJBcERRZ0lBQUlBRWdBR29nQURZQ0FDQUJJQUJCQVhJMkFnUVBDeUFCSUFOUERRQWdBeWdDQkNJQ1FRRnhSUTBBQWtBQ1FDQUNRUUp4RFFBQ1FDQURRUUFvQXFEUWdJQUFSdzBBUVFBZ0FUWUNvTkNBZ0FCQkFFRUFLQUtVMElDQUFDQUFhaUlBTmdLVTBJQ0FBQ0FCSUFCQkFYSTJBZ1FnQVVFQUtBS2MwSUNBQUVjTkEwRUFRUUEyQXBEUWdJQUFRUUJCQURZQ25OQ0FnQUFQQ3dKQUlBTkJBQ2dDbk5DQWdBQkhEUUJCQUNBQk5nS2MwSUNBQUVFQVFRQW9BcERRZ0lBQUlBQnFJZ0EyQXBEUWdJQUFJQUVnQUVFQmNqWUNCQ0FCSUFCcUlBQTJBZ0FQQ3lBQ1FYaHhJQUJxSVFBQ1FBSkFJQUpCL3dGTERRQWdBeWdDQ0NJRUlBSkJBM1lpQlVFRGRFR3cwSUNBQUdvaUJrWWFBa0FnQXlnQ0RDSUNJQVJIRFFCQkFFRUFLQUtJMElDQUFFRitJQVYzY1RZQ2lOQ0FnQUFNQWdzZ0FpQUdSaG9nQWlBRU5nSUlJQVFnQWpZQ0RBd0JDeUFES0FJWUlRY0NRQUpBSUFNb0Fnd2lCaUFEUmcwQUlBTW9BZ2dpQWtFQUtBS1kwSUNBQUVrYUlBWWdBallDQ0NBQ0lBWTJBZ3dNQVFzQ1FDQURRUlJxSWdJb0FnQWlCQTBBSUFOQkVHb2lBaWdDQUNJRURRQkJBQ0VHREFFTEEwQWdBaUVGSUFRaUJrRVVhaUlDS0FJQUlnUU5BQ0FHUVJCcUlRSWdCaWdDRUNJRURRQUxJQVZCQURZQ0FBc2dCMFVOQUFKQUFrQWdBeUFES0FJY0lnUkJBblJCdU5LQWdBQnFJZ0lvQWdCSERRQWdBaUFHTmdJQUlBWU5BVUVBUVFBb0FvelFnSUFBUVg0Z0JIZHhOZ0tNMElDQUFBd0NDeUFIUVJCQkZDQUhLQUlRSUFOR0cyb2dCallDQUNBR1JRMEJDeUFHSUFjMkFoZ0NRQ0FES0FJUUlnSkZEUUFnQmlBQ05nSVFJQUlnQmpZQ0dBc2dBeWdDRkNJQ1JRMEFJQVpCRkdvZ0FqWUNBQ0FDSUFZMkFoZ0xJQUVnQUdvZ0FEWUNBQ0FCSUFCQkFYSTJBZ1FnQVVFQUtBS2MwSUNBQUVjTkFVRUFJQUEyQXBEUWdJQUFEd3NnQXlBQ1FYNXhOZ0lFSUFFZ0FHb2dBRFlDQUNBQklBQkJBWEkyQWdRTEFrQWdBRUgvQVVzTkFDQUFRWGh4UWJEUWdJQUFhaUVDQWtBQ1FFRUFLQUtJMElDQUFDSUVRUUVnQUVFRGRuUWlBSEVOQUVFQUlBUWdBSEkyQW9qUWdJQUFJQUloQUF3QkN5QUNLQUlJSVFBTElBQWdBVFlDRENBQ0lBRTJBZ2dnQVNBQ05nSU1JQUVnQURZQ0NBOExRUjhoQWdKQUlBQkIvLy8vQjBzTkFDQUFRUWgySWdJZ0FrR0EvajlxUVJCMlFRaHhJZ0owSWdRZ0JFR0E0QjlxUVJCMlFRUnhJZ1IwSWdZZ0JrR0FnQTlxUVJCMlFRSnhJZ1owUVE5MklBSWdCSElnQm5KcklnSkJBWFFnQUNBQ1FSVnFka0VCY1hKQkhHb2hBZ3NnQVNBQ05nSWNJQUZDQURjQ0VDQUNRUUowUWJqU2dJQUFhaUVFQWtBQ1FFRUFLQUtNMElDQUFDSUdRUUVnQW5RaUEzRU5BQ0FFSUFFMkFnQkJBQ0FHSUFOeU5nS00wSUNBQUNBQklBUTJBaGdnQVNBQk5nSUlJQUVnQVRZQ0RBd0JDeUFBUVFCQkdTQUNRUUYyYXlBQ1FSOUdHM1FoQWlBRUtBSUFJUVlDUUFOQUlBWWlCQ2dDQkVGNGNTQUFSZzBCSUFKQkhYWWhCaUFDUVFGMElRSWdCQ0FHUVFSeGFrRVFhaUlES0FJQUlnWU5BQXNnQXlBQk5nSUFJQUVnQkRZQ0dDQUJJQUUyQWd3Z0FTQUJOZ0lJREFFTElBUW9BZ2dpQUNBQk5nSU1JQVFnQVRZQ0NDQUJRUUEyQWhnZ0FTQUVOZ0lNSUFFZ0FEWUNDQXRCQUVFQUtBS28wSUNBQUVGL2FpSUJRWDhnQVJzMkFxalFnSUFBQ3dzRUFBQUFDMDRBQWtBZ0FBMEFQd0JCRUhRUEN3SkFJQUJCLy84RGNRMEFJQUJCZjB3TkFBSkFJQUJCRUhaQUFDSUFRWDlIRFFCQkFFRXdOZ0w0MDRDQUFFRi9Ed3NnQUVFUWRBOExFTXFBZ0lBQUFBdnlBZ0lEZndGK0FrQWdBa1VOQUNBQUlBRTZBQUFnQWlBQWFpSURRWDlxSUFFNkFBQWdBa0VEU1EwQUlBQWdBVG9BQWlBQUlBRTZBQUVnQTBGOWFpQUJPZ0FBSUFOQmZtb2dBVG9BQUNBQ1FRZEpEUUFnQUNBQk9nQURJQU5CZkdvZ0FUb0FBQ0FDUVFsSkRRQWdBRUVBSUFCclFRTnhJZ1JxSWdNZ0FVSC9BWEZCZ1lLRUNHd2lBVFlDQUNBRElBSWdCR3RCZkhFaUJHb2lBa0Y4YWlBQk5nSUFJQVJCQ1VrTkFDQURJQUUyQWdnZ0F5QUJOZ0lFSUFKQmVHb2dBVFlDQUNBQ1FYUnFJQUUyQWdBZ0JFRVpTUTBBSUFNZ0FUWUNHQ0FESUFFMkFoUWdBeUFCTmdJUUlBTWdBVFlDRENBQ1FYQnFJQUUyQWdBZ0FrRnNhaUFCTmdJQUlBSkJhR29nQVRZQ0FDQUNRV1JxSUFFMkFnQWdCQ0FEUVFSeFFSaHlJZ1ZySWdKQklFa05BQ0FCclVLQmdJQ0FFSDRoQmlBRElBVnFJUUVEUUNBQklBWTNBeGdnQVNBR053TVFJQUVnQmpjRENDQUJJQVkzQXdBZ0FVRWdhaUVCSUFKQllHb2lBa0VmU3cwQUN3c2dBQXNMamtnQkFFR0FDQXVHU0FFQUFBQUNBQUFBQXdBQUFBQUFBQUFBQUFBQUJBQUFBQVVBQUFBQUFBQUFBQUFBQUFZQUFBQUhBQUFBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVNXNTJZV3hwWkNCamFHRnlJR2x1SUhWeWJDQnhkV1Z5ZVFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDJKdlpIa0FRMjl1ZEdWdWRDMU1aVzVuZEdnZ2IzWmxjbVpzYjNjQVEyaDFibXNnYzJsNlpTQnZkbVZ5Wm14dmR3QlNaWE53YjI1elpTQnZkbVZ5Wm14dmR3QkpiblpoYkdsa0lHMWxkR2h2WkNCbWIzSWdTRlJVVUM5NExuZ2djbVZ4ZFdWemRBQkpiblpoYkdsa0lHMWxkR2h2WkNCbWIzSWdVbFJUVUM5NExuZ2djbVZ4ZFdWemRBQkZlSEJsWTNSbFpDQlRUMVZTUTBVZ2JXVjBhRzlrSUdadmNpQkpRMFV2ZUM1NElISmxjWFZsYzNRQVNXNTJZV3hwWkNCamFHRnlJR2x1SUhWeWJDQm1jbUZuYldWdWRDQnpkR0Z5ZEFCRmVIQmxZM1JsWkNCa2IzUUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOXpkR0YwZFhNQVNXNTJZV3hwWkNCeVpYTndiMjV6WlNCemRHRjBkWE1BU1c1MllXeHBaQ0JqYUdGeVlXTjBaWElnYVc0Z1kyaDFibXNnWlhoMFpXNXphVzl1Y3dCVmMyVnlJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDl5WlhObGRHQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMk5vZFc1clgyaGxZV1JsY21BZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyMWxjM05oWjJWZlltVm5hVzVnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5amFIVnVhMTlsZUhSbGJuTnBiMjVmZG1Gc2RXVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDl6ZEdGMGRYTmZZMjl0Y0d4bGRHVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDkyWlhKemFXOXVYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmZFhKc1gyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZZMmgxYm10ZlkyOXRjR3hsZEdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOW9aV0ZrWlhKZmRtRnNkV1ZmWTI5dGNHeGxkR1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5dFpYTnpZV2RsWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmJXVjBhRzlrWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmFHVmhaR1Z5WDJacFpXeGtYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmWTJoMWJtdGZaWGgwWlc1emFXOXVYMjVoYldWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUZWdVpYaHdaV04wWldRZ1kyaGhjaUJwYmlCMWNtd2djMlZ5ZG1WeUFFbHVkbUZzYVdRZ2FHVmhaR1Z5SUhaaGJIVmxJR05vWVhJQVNXNTJZV3hwWkNCb1pXRmtaWElnWm1sbGJHUWdZMmhoY2dCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDNabGNuTnBiMjRBU1c1MllXeHBaQ0J0YVc1dmNpQjJaWEp6YVc5dUFFbHVkbUZzYVdRZ2JXRnFiM0lnZG1WeWMybHZiZ0JGZUhCbFkzUmxaQ0J6Y0dGalpTQmhablJsY2lCMlpYSnphVzl1QUVWNGNHVmpkR1ZrSUVOU1RFWWdZV1owWlhJZ2RtVnljMmx2YmdCSmJuWmhiR2xrSUVoVVZGQWdkbVZ5YzJsdmJnQkpiblpoYkdsa0lHaGxZV1JsY2lCMGIydGxiZ0JUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYM1Z5YkFCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY25NZ2FXNGdkWEpzQUZWdVpYaHdaV04wWldRZ2MzUmhjblFnWTJoaGNpQnBiaUIxY213QVJHOTFZbXhsSUVBZ2FXNGdkWEpzQUVWdGNIUjVJRU52Ym5SbGJuUXRUR1Z1WjNSb0FFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJRU52Ym5SbGJuUXRUR1Z1WjNSb0FFUjFjR3hwWTJGMFpTQkRiMjUwWlc1MExVeGxibWQwYUFCSmJuWmhiR2xrSUdOb1lYSWdhVzRnZFhKc0lIQmhkR2dBUTI5dWRHVnVkQzFNWlc1bmRHZ2dZMkZ1SjNRZ1ltVWdjSEpsYzJWdWRDQjNhWFJvSUZSeVlXNXpabVZ5TFVWdVkyOWthVzVuQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUhOcGVtVUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOW9aV0ZrWlhKZmRtRnNkV1VBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDlqYUhWdWExOWxlSFJsYm5OcGIyNWZkbUZzZFdVQVNXNTJZV3hwWkNCamFHRnlZV04wWlhJZ2FXNGdZMmgxYm1zZ1pYaDBaVzV6YVc5dWN5QjJZV3gxWlFCTmFYTnphVzVuSUdWNGNHVmpkR1ZrSUV4R0lHRm1kR1Z5SUdobFlXUmxjaUIyWVd4MVpRQkpiblpoYkdsa0lHQlVjbUZ1YzJabGNpMUZibU52WkdsdVoyQWdhR1ZoWkdWeUlIWmhiSFZsQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUdWNGRHVnVjMmx2Ym5NZ2NYVnZkR1VnZG1Gc2RXVUFTVzUyWVd4cFpDQmphR0Z5WVdOMFpYSWdhVzRnWTJoMWJtc2daWGgwWlc1emFXOXVjeUJ4ZFc5MFpXUWdkbUZzZFdVQVVHRjFjMlZrSUdKNUlHOXVYMmhsWVdSbGNuTmZZMjl0Y0d4bGRHVUFTVzUyWVd4cFpDQkZUMFlnYzNSaGRHVUFiMjVmY21WelpYUWdjR0YxYzJVQWIyNWZZMmgxYm10ZmFHVmhaR1Z5SUhCaGRYTmxBRzl1WDIxbGMzTmhaMlZmWW1WbmFXNGdjR0YxYzJVQWIyNWZZMmgxYm10ZlpYaDBaVzV6YVc5dVgzWmhiSFZsSUhCaGRYTmxBRzl1WDNOMFlYUjFjMTlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDkyWlhKemFXOXVYMk52YlhCc1pYUmxJSEJoZFhObEFHOXVYM1Z5YkY5amIyMXdiR1YwWlNCd1lYVnpaUUJ2Ymw5amFIVnVhMTlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDlvWldGa1pYSmZkbUZzZFdWZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWlNCd1lYVnpaUUJ2Ymw5dFpYUm9iMlJmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmYUdWaFpHVnlYMlpwWld4a1gyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgyTm9kVzVyWDJWNGRHVnVjMmx2Ymw5dVlXMWxJSEJoZFhObEFGVnVaWGh3WldOMFpXUWdjM0JoWTJVZ1lXWjBaWElnYzNSaGNuUWdiR2x1WlFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDJOb2RXNXJYMlY0ZEdWdWMybHZibDl1WVcxbEFFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJR05vZFc1cklHVjRkR1Z1YzJsdmJuTWdibUZ0WlFCUVlYVnpaU0J2YmlCRFQwNU9SVU5VTDFWd1ozSmhaR1VBVUdGMWMyVWdiMjRnVUZKSkwxVndaM0poWkdVQVJYaHdaV04wWldRZ1NGUlVVQzh5SUVOdmJtNWxZM1JwYjI0Z1VISmxabUZqWlFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDIxbGRHaHZaQUJGZUhCbFkzUmxaQ0J6Y0dGalpTQmhablJsY2lCdFpYUm9iMlFBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDlvWldGa1pYSmZabWxsYkdRQVVHRjFjMlZrQUVsdWRtRnNhV1FnZDI5eVpDQmxibU52ZFc1MFpYSmxaQUJKYm5aaGJHbGtJRzFsZEdodlpDQmxibU52ZFc1MFpYSmxaQUJWYm1WNGNHVmpkR1ZrSUdOb1lYSWdhVzRnZFhKc0lITmphR1Z0WVFCU1pYRjFaWE4wSUdoaGN5QnBiblpoYkdsa0lHQlVjbUZ1YzJabGNpMUZibU52WkdsdVoyQUFVMWRKVkVOSVgxQlNUMWhaQUZWVFJWOVFVazlZV1FCTlMwRkRWRWxXU1ZSWkFGVk9VRkpQUTBWVFUwRkNURVZmUlU1VVNWUlpBRU5QVUZrQVRVOVdSVVJmVUVWU1RVRk9SVTVVVEZrQVZFOVBYMFZCVWt4WkFFNVBWRWxHV1FCR1FVbE1SVVJmUkVWUVJVNUVSVTVEV1FCQ1FVUmZSMEZVUlZkQldRQlFURUZaQUZCVlZBQkRTRVZEUzA5VlZBQkhRVlJGVjBGWlgxUkpUVVZQVlZRQVVrVlJWVVZUVkY5VVNVMUZUMVZVQUU1RlZGZFBVa3RmUTA5T1RrVkRWRjlVU1UxRlQxVlVBRU5QVGs1RlExUkpUMDVmVkVsTlJVOVZWQUJNVDBkSlRsOVVTVTFGVDFWVUFFNUZWRmRQVWt0ZlVrVkJSRjlVU1UxRlQxVlVBRkJQVTFRQVRVbFRSRWxTUlVOVVJVUmZVa1ZSVlVWVFZBQkRURWxGVGxSZlEweFBVMFZFWDFKRlVWVkZVMVFBUTB4SlJVNVVYME5NVDFORlJGOU1UMEZFWDBKQlRFRk9RMFZFWDFKRlVWVkZVMVFBUWtGRVgxSkZVVlZGVTFRQVNGUlVVRjlTUlZGVlJWTlVYMU5GVGxSZlZFOWZTRlJVVUZOZlVFOVNWQUJTUlZCUFVsUUFTVTFmUVY5VVJVRlFUMVFBVWtWVFJWUmZRMDlPVkVWT1ZBQk9UMTlEVDA1VVJVNVVBRkJCVWxSSlFVeGZRMDlPVkVWT1ZBQklVRVZmU1U1V1FVeEpSRjlEVDA1VFZFRk9WQUJJVUVWZlEwSmZVa1ZUUlZRQVIwVlVBRWhRUlY5VFZGSkpRMVFBUTA5T1JreEpRMVFBVkVWTlVFOVNRVkpaWDFKRlJFbFNSVU5VQUZCRlVrMUJUa1ZPVkY5U1JVUkpVa1ZEVkFCRFQwNU9SVU5VQUUxVlRGUkpYMU5VUVZSVlV3QklVRVZmU1U1V1FVeEpSRjlUVkVGVVZWTUFWRTlQWDAxQlRsbGZVa1ZSVlVWVFZGTUFSVUZTVEZsZlNFbE9WRk1BVlU1QlZrRkpURUZDVEVWZlJrOVNYMHhGUjBGTVgxSkZRVk5QVGxNQVQxQlVTVTlPVXdCVFYwbFVRMGhKVGtkZlVGSlBWRTlEVDB4VEFGWkJVa2xCVGxSZlFVeFRUMTlPUlVkUFZFbEJWRVZUQUUxVlRGUkpVRXhGWDBOSVQwbERSVk1BU1U1VVJWSk9RVXhmVTBWU1ZrVlNYMFZTVWs5U0FGZEZRbDlUUlZKV1JWSmZWVTVMVGs5WFRsOUZVbEpQVWdCU1FVbE1SMVZPWDBWU1VrOVNBRWxFUlU1VVNWUlpYMUJTVDFaSlJFVlNYMEZWVkVoRlRsUkpRMEZVU1U5T1gwVlNVazlTQUZOVFRGOURSVkpVU1VaSlEwRlVSVjlGVWxKUFVnQkpUbFpCVEVsRVgxaGZSazlTVjBGU1JFVkVYMFpQVWdCVFJWUmZVRUZTUVUxRlZFVlNBRWRGVkY5UVFWSkJUVVZVUlZJQVNGQkZYMVZUUlZJQVUwVkZYMDlVU0VWU0FFaFFSVjlEUWw5RFNGVk9TMTlJUlVGRVJWSUFUVXREUVV4RlRrUkJVZ0JUUlZSVlVBQlhSVUpmVTBWU1ZrVlNYMGxUWDBSUFYwNEFWRVZCVWtSUFYwNEFTRkJGWDBOTVQxTkZSRjlEVDA1T1JVTlVTVTlPQUVoRlZWSkpVMVJKUTE5RldGQkpVa0ZVU1U5T0FFUkpVME5QVGs1RlExUkZSRjlQVUVWU1FWUkpUMDRBVGs5T1gwRlZWRWhQVWtsVVFWUkpWa1ZmU1U1R1QxSk5RVlJKVDA0QVNGQkZYMGxPVmtGTVNVUmZWa1ZTVTBsUFRnQklVRVZmUTBKZlRVVlRVMEZIUlY5Q1JVZEpUZ0JUU1ZSRlgwbFRYMFpTVDFwRlRnQklVRVZmU1U1V1FVeEpSRjlJUlVGRVJWSmZWRTlMUlU0QVNVNVdRVXhKUkY5VVQwdEZUZ0JHVDFKQ1NVUkVSVTRBUlU1SVFVNURSVjlaVDFWU1gwTkJURTBBU0ZCRlgwbE9Wa0ZNU1VSZlZWSk1BRUpNVDBOTFJVUmZRbGxmVUVGU1JVNVVRVXhmUTA5T1ZGSlBUQUJOUzBOUFRBQkJRMHdBU0ZCRlgwbE9WRVZTVGtGTUFGSkZVVlZGVTFSZlNFVkJSRVZTWDBaSlJVeEVVMTlVVDA5ZlRFRlNSMFZmVlU1UFJrWkpRMGxCVEFCSVVFVmZUMHNBVlU1TVNVNUxBRlZPVEU5RFN3QlFVa2tBVWtWVVVsbGZWMGxVU0FCSVVFVmZTVTVXUVV4SlJGOURUMDVVUlU1VVgweEZUa2RVU0FCSVVFVmZWVTVGV0ZCRlExUkZSRjlEVDA1VVJVNVVYMHhGVGtkVVNBQkdURlZUU0FCUVVrOVFVRUZVUTBnQVRTMVRSVUZTUTBnQVZWSkpYMVJQVDE5TVQwNUhBRkJTVDBORlUxTkpUa2NBVFVsVFEwVk1URUZPUlU5VlUxOVFSVkpUU1ZOVVJVNVVYMWRCVWs1SlRrY0FUVWxUUTBWTVRFRk9SVTlWVTE5WFFWSk9TVTVIQUVoUVJWOUpUbFpCVEVsRVgxUlNRVTVUUmtWU1gwVk9RMDlFU1U1SEFFVjRjR1ZqZEdWa0lFTlNURVlBU0ZCRlgwbE9Wa0ZNU1VSZlEwaFZUa3RmVTBsYVJRQk5UMVpGQUVOUFRsUkpUbFZGQUVoUVJWOURRbDlUVkVGVVZWTmZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwaEZRVVJGVWxOZlEwOU5VRXhGVkVVQVNGQkZYME5DWDFaRlVsTkpUMDVmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMVZTVEY5RFQwMVFURVZVUlFCSVVFVmZRMEpmUTBoVlRrdGZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwaEZRVVJGVWw5V1FVeFZSVjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZRMGhWVGt0ZlJWaFVSVTVUU1U5T1gxWkJURlZGWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlEU0ZWT1MxOUZXRlJGVGxOSlQwNWZUa0ZOUlY5RFQwMVFURVZVUlFCSVVFVmZRMEpmVFVWVFUwRkhSVjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZUVVZVU0U5RVgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5SVJVRkVSVkpmUmtsRlRFUmZRMDlOVUV4RlZFVUFSRVZNUlZSRkFFaFFSVjlKVGxaQlRFbEVYMFZQUmw5VFZFRlVSUUJKVGxaQlRFbEVYMU5UVEY5RFJWSlVTVVpKUTBGVVJRQlFRVlZUUlFCT1QxOVNSVk5RVDA1VFJRQlZUbE5WVUZCUFVsUkZSRjlOUlVSSlFWOVVXVkJGQUVkUFRrVUFUazlVWDBGRFEwVlFWRUZDVEVVQVUwVlNWa2xEUlY5VlRrRldRVWxNUVVKTVJRQlNRVTVIUlY5T1QxUmZVMEZVU1ZOR1NVRkNURVVBVDFKSlIwbE9YMGxUWDFWT1VrVkJRMGhCUWt4RkFGSkZVMUJQVGxORlgwbFRYMU5VUVV4RkFGQlZVa2RGQUUxRlVrZEZBRkpGVVZWRlUxUmZTRVZCUkVWU1gwWkpSVXhFVTE5VVQwOWZURUZTUjBVQVVrVlJWVVZUVkY5SVJVRkVSVkpmVkU5UFgweEJVa2RGQUZCQldVeFBRVVJmVkU5UFgweEJVa2RGQUVsT1UxVkdSa2xEU1VWT1ZGOVRWRTlTUVVkRkFFaFFSVjlRUVZWVFJVUmZWVkJIVWtGRVJRQklVRVZmVUVGVlUwVkVYMGd5WDFWUVIxSkJSRVVBVTA5VlVrTkZBRUZPVGs5VlRrTkZBRlJTUVVORkFFaFFSVjlWVGtWWVVFVkRWRVZFWDFOUVFVTkZBRVJGVTBOU1NVSkZBRlZPVTFWQ1UwTlNTVUpGQUZKRlEwOVNSQUJJVUVWZlNVNVdRVXhKUkY5TlJWUklUMFFBVGs5VVgwWlBWVTVFQUZCU1QxQkdTVTVFQUZWT1FrbE9SQUJTUlVKSlRrUUFWVTVCVlZSSVQxSkpXa1ZFQUUxRlZFaFBSRjlPVDFSZlFVeE1UMWRGUkFCSVZGUlFYMVpGVWxOSlQwNWZUazlVWDFOVlVGQlBVbFJGUkFCQlRGSkZRVVJaWDFKRlVFOVNWRVZFQUVGRFEwVlFWRVZFQUU1UFZGOUpUVkJNUlUxRlRsUkZSQUJNVDA5UVgwUkZWRVZEVkVWRUFFaFFSVjlEVWw5RldGQkZRMVJGUkFCSVVFVmZURVpmUlZoUVJVTlVSVVFBUTFKRlFWUkZSQUJKVFY5VlUwVkVBRWhRUlY5UVFWVlRSVVFBVkVsTlJVOVZWRjlQUTBOVlVrVkVBRkJCV1UxRlRsUmZVa1ZSVlVsU1JVUUFVRkpGUTA5T1JFbFVTVTlPWDFKRlVWVkpVa1ZFQUZCU1QxaFpYMEZWVkVoRlRsUkpRMEZVU1U5T1gxSkZVVlZKVWtWRUFFNUZWRmRQVWt0ZlFWVlVTRVZPVkVsRFFWUkpUMDVmVWtWUlZVbFNSVVFBVEVWT1IxUklYMUpGVVZWSlVrVkVBRk5UVEY5RFJWSlVTVVpKUTBGVVJWOVNSVkZWU1ZKRlJBQlZVRWRTUVVSRlgxSkZVVlZKVWtWRUFGQkJSMFZmUlZoUVNWSkZSQUJRVWtWRFQwNUVTVlJKVDA1ZlJrRkpURVZFQUVWWVVFVkRWRUZVU1U5T1gwWkJTVXhGUkFCU1JWWkJURWxFUVZSSlQwNWZSa0ZKVEVWRUFGTlRURjlJUVU1RVUwaEJTMFZmUmtGSlRFVkVBRXhQUTB0RlJBQlVVa0ZPVTBaUFVrMUJWRWxQVGw5QlVGQk1TVVZFQUU1UFZGOU5UMFJKUmtsRlJBQk9UMVJmUlZoVVJVNUVSVVFBUWtGT1JGZEpSRlJJWDB4SlRVbFVYMFZZUTBWRlJFVkVBRk5KVkVWZlNWTmZUMVpGVWt4UFFVUkZSQUJJUlVGRUFFVjRjR1ZqZEdWa0lFaFVWRkF2QUFCZUV3QUFKaE1BQURBUUFBRHdGd0FBblJNQUFCVVNBQUE1RndBQThCSUFBQW9RQUFCMUVnQUFyUklBQUlJVEFBQlBGQUFBZnhBQUFLQVZBQUFqRkFBQWlSSUFBSXNVQUFCTkZRQUExQkVBQU04VUFBQVFHQUFBeVJZQUFOd1dBQURCRVFBQTRCY0FBTHNVQUFCMEZBQUFmQlVBQU9VVUFBQUlGd0FBSHhBQUFHVVZBQUNqRkFBQUtCVUFBQUlWQUFDWkZRQUFMQkFBQUlzWkFBQlBEd0FBMUE0QUFHb1FBQURPRUFBQUFoY0FBSWtPQUFCdUV3QUFIQk1BQUdZVUFBQldGd0FBd1JNQUFNMFRBQUJzRXdBQWFCY0FBR1lYQUFCZkZ3QUFJaE1BQU00UEFBQnBEZ0FBMkE0QUFHTVdBQURMRXdBQXFnNEFBQ2dYQUFBbUZ3QUF4Uk1BQUYwV0FBRG9FUUFBWnhNQUFHVVRBQUR5RmdBQWN4TUFBQjBYQUFENUZnQUE4eEVBQU04T0FBRE9GUUFBREJJQUFMTVJBQUNsRVFBQVlSQUFBRElYQUFDN0V3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQkFnRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ01DQWdJQ0FnQUFBZ0lBQWdJQUFnSUNBZ0lDQWdJQ0FnQUVBQUFBQUFBQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdBQUFBSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBQUlBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFJQUFnSUNBZ0lBQUFJQ0FBSUNBQUlDQWdJQ0FnSUNBZ0lBQXdBRUFBQUFBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFBQUFDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdBQ0FBSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJzYjNObFpXVndMV0ZzYVhabEFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUVCQVFFQkFRRUJBUUVCQWdFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRmphSFZ1YTJWa0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQVFBQkFRRUJBUUFBQVFFQUFRRUFBUUVCQVFFQkFRRUJBUUFBQUFBQUFBQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR1ZqZEdsdmJtVnVkQzFzWlc1bmRHaHZibkp2ZUhrdFkyOXVibVZqZEdsdmJnQUFBQUFBQUFBQUFBQUFBQUFBQUhKaGJuTm1aWEl0Wlc1amIyUnBibWR3WjNKaFpHVU5DZzBLRFFwVFRRMEtEUXBVVkZBdlEwVXZWRk5RTHdBQUFBQUFBQUFBQUFBQUFBRUNBQUVEQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQUFBQUFBQUFBQUFCQWdBQkF3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUJBUVVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBQUFBQUFBQUFBQUFRQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFBQUFBQUFBQUFBQUFCQUFBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF3UUFBQVFFQkFRRUJBUUVCQVFFQlFRRUJBUUVCQVFFQkFRRUJBQUVBQVlIQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRQUJBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ0FBQUFBQUFBTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFBQUFBQUFBQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFBQUFnQUFBQUFDQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd0FBQUFBQUFBTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUU1UFZVNURSVVZEUzA5VlZFNUZRMVJGVkVWRFVrbENSVXhWVTBoRlZFVkJSRk5GUVZKRFNGSkhSVU5VU1ZaSlZGbE1SVTVFUVZKV1JVOVVTVVpaVUZSSlQwNVRRMGhUUlVGWlUxUkJWRU5JUjBWUFVrUkpVa1ZEVkU5U1ZGSkRTRkJCVWtGTlJWUkZVbFZTUTBWQ1UwTlNTVUpGUVZKRVQxZE9RVU5GU1U1RVRrdERTMVZDVTBOU1NVSkZTRlJVVUM5QlJGUlFMdz09J1xuIiwgIi8vIEB0cy1jaGVja1xuXG4ndXNlIHN0cmljdCdcblxuLyogZ2xvYmFsIFdlYkFzc2VtYmx5ICovXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCBuZXQgPSByZXF1aXJlKCduZXQnKVxuY29uc3QgaHR0cCA9IHJlcXVpcmUoJ2h0dHAnKVxuY29uc3QgeyBwaXBlbGluZSB9ID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL2NvcmUvdXRpbCcpXG5jb25zdCB0aW1lcnMgPSByZXF1aXJlKCcuL3RpbWVycycpXG5jb25zdCBSZXF1ZXN0ID0gcmVxdWlyZSgnLi9jb3JlL3JlcXVlc3QnKVxuY29uc3QgRGlzcGF0Y2hlckJhc2UgPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXItYmFzZScpXG5jb25zdCB7XG4gIFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcixcbiAgUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcixcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIFJlcXVlc3RBYm9ydGVkRXJyb3IsXG4gIEhlYWRlcnNUaW1lb3V0RXJyb3IsXG4gIEhlYWRlcnNPdmVyZmxvd0Vycm9yLFxuICBTb2NrZXRFcnJvcixcbiAgSW5mb3JtYXRpb25hbEVycm9yLFxuICBCb2R5VGltZW91dEVycm9yLFxuICBIVFRQUGFyc2VyRXJyb3IsXG4gIFJlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3IsXG4gIENsaWVudERlc3Ryb3llZEVycm9yXG59ID0gcmVxdWlyZSgnLi9jb3JlL2Vycm9ycycpXG5jb25zdCBidWlsZENvbm5lY3RvciA9IHJlcXVpcmUoJy4vY29yZS9jb25uZWN0JylcbmNvbnN0IHtcbiAga1VybCxcbiAga1Jlc2V0LFxuICBrU2VydmVyTmFtZSxcbiAga0NsaWVudCxcbiAga0J1c3ksXG4gIGtQYXJzZXIsXG4gIGtDb25uZWN0LFxuICBrQmxvY2tpbmcsXG4gIGtSZXN1bWluZyxcbiAga1J1bm5pbmcsXG4gIGtQZW5kaW5nLFxuICBrU2l6ZSxcbiAga1dyaXRpbmcsXG4gIGtRdWV1ZSxcbiAga0Nvbm5lY3RlZCxcbiAga0Nvbm5lY3RpbmcsXG4gIGtOZWVkRHJhaW4sXG4gIGtOb1JlZixcbiAga0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0LFxuICBrSG9zdEhlYWRlcixcbiAga1BlbmRpbmdJZHgsXG4gIGtSdW5uaW5nSWR4LFxuICBrRXJyb3IsXG4gIGtQaXBlbGluaW5nLFxuICBrU29ja2V0LFxuICBrS2VlcEFsaXZlVGltZW91dFZhbHVlLFxuICBrTWF4SGVhZGVyc1NpemUsXG4gIGtLZWVwQWxpdmVNYXhUaW1lb3V0LFxuICBrS2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCxcbiAga0hlYWRlcnNUaW1lb3V0LFxuICBrQm9keVRpbWVvdXQsXG4gIGtTdHJpY3RDb250ZW50TGVuZ3RoLFxuICBrQ29ubmVjdG9yLFxuICBrTWF4UmVkaXJlY3Rpb25zLFxuICBrTWF4UmVxdWVzdHMsXG4gIGtDb3VudGVyLFxuICBrQ2xvc2UsXG4gIGtEZXN0cm95LFxuICBrRGlzcGF0Y2gsXG4gIGtJbnRlcmNlcHRvcnMsXG4gIGtMb2NhbEFkZHJlc3MsXG4gIGtNYXhSZXNwb25zZVNpemUsXG4gIGtIVFRQQ29ublZlcnNpb24sXG4gIC8vIEhUVFAyXG4gIGtIb3N0LFxuICBrSFRUUDJTZXNzaW9uLFxuICBrSFRUUDJTZXNzaW9uU3RhdGUsXG4gIGtIVFRQMkJ1aWxkUmVxdWVzdCxcbiAga0hUVFAyQ29weUhlYWRlcnMsXG4gIGtIVFRQMUJ1aWxkUmVxdWVzdFxufSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcblxuLyoqIEB0eXBlIHtpbXBvcnQoJ2h0dHAyJyl9ICovXG5sZXQgaHR0cDJcbnRyeSB7XG4gIGh0dHAyID0gcmVxdWlyZSgnaHR0cDInKVxufSBjYXRjaCB7XG4gIC8vIEB0cy1pZ25vcmVcbiAgaHR0cDIgPSB7IGNvbnN0YW50czoge30gfVxufVxuXG5jb25zdCB7XG4gIGNvbnN0YW50czoge1xuICAgIEhUVFAyX0hFQURFUl9BVVRIT1JJVFksXG4gICAgSFRUUDJfSEVBREVSX01FVEhPRCxcbiAgICBIVFRQMl9IRUFERVJfUEFUSCxcbiAgICBIVFRQMl9IRUFERVJfU0NIRU1FLFxuICAgIEhUVFAyX0hFQURFUl9DT05URU5UX0xFTkdUSCxcbiAgICBIVFRQMl9IRUFERVJfRVhQRUNULFxuICAgIEhUVFAyX0hFQURFUl9TVEFUVVNcbiAgfVxufSA9IGh0dHAyXG5cbi8vIEV4cGVyaW1lbnRhbFxubGV0IGgyRXhwZXJpbWVudGFsV2FybmVkID0gZmFsc2VcblxuY29uc3QgRmFzdEJ1ZmZlciA9IEJ1ZmZlcltTeW1ib2wuc3BlY2llc11cblxuY29uc3Qga0Nsb3NlZFJlc29sdmUgPSBTeW1ib2woJ2tDbG9zZWRSZXNvbHZlJylcblxuY29uc3QgY2hhbm5lbHMgPSB7fVxuXG50cnkge1xuICBjb25zdCBkaWFnbm9zdGljc0NoYW5uZWwgPSByZXF1aXJlKCdkaWFnbm9zdGljc19jaGFubmVsJylcbiAgY2hhbm5lbHMuc2VuZEhlYWRlcnMgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOmNsaWVudDpzZW5kSGVhZGVycycpXG4gIGNoYW5uZWxzLmJlZm9yZUNvbm5lY3QgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOmNsaWVudDpiZWZvcmVDb25uZWN0JylcbiAgY2hhbm5lbHMuY29ubmVjdEVycm9yID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6Y29ubmVjdEVycm9yJylcbiAgY2hhbm5lbHMuY29ubmVjdGVkID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6Y29ubmVjdGVkJylcbn0gY2F0Y2gge1xuICBjaGFubmVscy5zZW5kSGVhZGVycyA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMuYmVmb3JlQ29ubmVjdCA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMuY29ubmVjdEVycm9yID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxuICBjaGFubmVscy5jb25uZWN0ZWQgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG59XG5cbi8qKlxuICogQHR5cGUge2ltcG9ydCgnLi4vdHlwZXMvY2xpZW50JykuZGVmYXVsdH1cbiAqL1xuY2xhc3MgQ2xpZW50IGV4dGVuZHMgRGlzcGF0Y2hlckJhc2Uge1xuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8VVJMfSB1cmxcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uL3R5cGVzL2NsaWVudCcpLkNsaWVudC5PcHRpb25zfSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3RvciAodXJsLCB7XG4gICAgaW50ZXJjZXB0b3JzLFxuICAgIG1heEhlYWRlclNpemUsXG4gICAgaGVhZGVyc1RpbWVvdXQsXG4gICAgc29ja2V0VGltZW91dCxcbiAgICByZXF1ZXN0VGltZW91dCxcbiAgICBjb25uZWN0VGltZW91dCxcbiAgICBib2R5VGltZW91dCxcbiAgICBpZGxlVGltZW91dCxcbiAgICBrZWVwQWxpdmUsXG4gICAga2VlcEFsaXZlVGltZW91dCxcbiAgICBtYXhLZWVwQWxpdmVUaW1lb3V0LFxuICAgIGtlZXBBbGl2ZU1heFRpbWVvdXQsXG4gICAga2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCxcbiAgICBzb2NrZXRQYXRoLFxuICAgIHBpcGVsaW5pbmcsXG4gICAgdGxzLFxuICAgIHN0cmljdENvbnRlbnRMZW5ndGgsXG4gICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgbWF4UmVkaXJlY3Rpb25zLFxuICAgIGNvbm5lY3QsXG4gICAgbWF4UmVxdWVzdHNQZXJDbGllbnQsXG4gICAgbG9jYWxBZGRyZXNzLFxuICAgIG1heFJlc3BvbnNlU2l6ZSxcbiAgICBhdXRvU2VsZWN0RmFtaWx5LFxuICAgIGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCxcbiAgICAvLyBoMlxuICAgIGFsbG93SDIsXG4gICAgbWF4Q29uY3VycmVudFN0cmVhbXNcbiAgfSA9IHt9KSB7XG4gICAgc3VwZXIoKVxuXG4gICAgaWYgKGtlZXBBbGl2ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIGtlZXBBbGl2ZSwgdXNlIHBpcGVsaW5pbmc9MCBpbnN0ZWFkJylcbiAgICB9XG5cbiAgICBpZiAoc29ja2V0VGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIHNvY2tldFRpbWVvdXQsIHVzZSBoZWFkZXJzVGltZW91dCAmIGJvZHlUaW1lb3V0IGluc3RlYWQnKVxuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0VGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIHJlcXVlc3RUaW1lb3V0LCB1c2UgaGVhZGVyc1RpbWVvdXQgJiBib2R5VGltZW91dCBpbnN0ZWFkJylcbiAgICB9XG5cbiAgICBpZiAoaWRsZVRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCBpZGxlVGltZW91dCwgdXNlIGtlZXBBbGl2ZVRpbWVvdXQgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKG1heEtlZXBBbGl2ZVRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCBtYXhLZWVwQWxpdmVUaW1lb3V0LCB1c2Uga2VlcEFsaXZlTWF4VGltZW91dCBpbnN0ZWFkJylcbiAgICB9XG5cbiAgICBpZiAobWF4SGVhZGVyU2l6ZSAhPSBudWxsICYmICFOdW1iZXIuaXNGaW5pdGUobWF4SGVhZGVyU2l6ZSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBtYXhIZWFkZXJTaXplJylcbiAgICB9XG5cbiAgICBpZiAoc29ja2V0UGF0aCAhPSBudWxsICYmIHR5cGVvZiBzb2NrZXRQYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHNvY2tldFBhdGgnKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0VGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGNvbm5lY3RUaW1lb3V0KSB8fCBjb25uZWN0VGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY29ubmVjdFRpbWVvdXQnKVxuICAgIH1cblxuICAgIGlmIChrZWVwQWxpdmVUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNGaW5pdGUoa2VlcEFsaXZlVGltZW91dCkgfHwga2VlcEFsaXZlVGltZW91dCA8PSAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGtlZXBBbGl2ZVRpbWVvdXQnKVxuICAgIH1cblxuICAgIGlmIChrZWVwQWxpdmVNYXhUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNGaW5pdGUoa2VlcEFsaXZlTWF4VGltZW91dCkgfHwga2VlcEFsaXZlTWF4VGltZW91dCA8PSAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGtlZXBBbGl2ZU1heFRpbWVvdXQnKVxuICAgIH1cblxuICAgIGlmIChrZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkICE9IG51bGwgJiYgIU51bWJlci5pc0Zpbml0ZShrZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQnKVxuICAgIH1cblxuICAgIGlmIChoZWFkZXJzVGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihoZWFkZXJzVGltZW91dCkgfHwgaGVhZGVyc1RpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzVGltZW91dCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBvciB6ZXJvJylcbiAgICB9XG5cbiAgICBpZiAoYm9keVRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIoYm9keVRpbWVvdXQpIHx8IGJvZHlUaW1lb3V0IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignYm9keVRpbWVvdXQgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgb3IgemVybycpXG4gICAgfVxuXG4gICAgaWYgKGNvbm5lY3QgIT0gbnVsbCAmJiB0eXBlb2YgY29ubmVjdCAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgY29ubmVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignY29ubmVjdCBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0JylcbiAgICB9XG5cbiAgICBpZiAobWF4UmVkaXJlY3Rpb25zICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heFJlZGlyZWN0aW9ucykgfHwgbWF4UmVkaXJlY3Rpb25zIDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4UmVkaXJlY3Rpb25zIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIGlmIChtYXhSZXF1ZXN0c1BlckNsaWVudCAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZXF1ZXN0c1BlckNsaWVudCkgfHwgbWF4UmVxdWVzdHNQZXJDbGllbnQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhSZXF1ZXN0c1BlckNsaWVudCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICBpZiAobG9jYWxBZGRyZXNzICE9IG51bGwgJiYgKHR5cGVvZiBsb2NhbEFkZHJlc3MgIT09ICdzdHJpbmcnIHx8IG5ldC5pc0lQKGxvY2FsQWRkcmVzcykgPT09IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2xvY2FsQWRkcmVzcyBtdXN0IGJlIHZhbGlkIHN0cmluZyBJUCBhZGRyZXNzJylcbiAgICB9XG5cbiAgICBpZiAobWF4UmVzcG9uc2VTaXplICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heFJlc3BvbnNlU2l6ZSkgfHwgbWF4UmVzcG9uc2VTaXplIDwgLTEpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlc3BvbnNlU2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgIT0gbnVsbCAmJlxuICAgICAgKCFOdW1iZXIuaXNJbnRlZ2VyKGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCkgfHwgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0IDwgLTEpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2F1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICAvLyBoMlxuICAgIGlmIChhbGxvd0gyICE9IG51bGwgJiYgdHlwZW9mIGFsbG93SDIgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdhbGxvd0gyIG11c3QgYmUgYSB2YWxpZCBib29sZWFuIHZhbHVlJylcbiAgICB9XG5cbiAgICBpZiAobWF4Q29uY3VycmVudFN0cmVhbXMgIT0gbnVsbCAmJiAodHlwZW9mIG1heENvbmN1cnJlbnRTdHJlYW1zICE9PSAnbnVtYmVyJyB8fCBtYXhDb25jdXJyZW50U3RyZWFtcyA8IDEpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heENvbmN1cnJlbnRTdHJlYW1zIG11c3QgYmUgYSBwb3NzaXRpdmUgaW50ZWdlciwgZ3JlYXRlciB0aGFuIDAnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29ubmVjdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29ubmVjdCA9IGJ1aWxkQ29ubmVjdG9yKHtcbiAgICAgICAgLi4udGxzLFxuICAgICAgICBtYXhDYWNoZWRTZXNzaW9ucyxcbiAgICAgICAgYWxsb3dIMixcbiAgICAgICAgc29ja2V0UGF0aCxcbiAgICAgICAgdGltZW91dDogY29ubmVjdFRpbWVvdXQsXG4gICAgICAgIC4uLih1dGlsLm5vZGVIYXNBdXRvU2VsZWN0RmFtaWx5ICYmIGF1dG9TZWxlY3RGYW1pbHkgPyB7IGF1dG9TZWxlY3RGYW1pbHksIGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCB9IDogdW5kZWZpbmVkKSxcbiAgICAgICAgLi4uY29ubmVjdFxuICAgICAgfSlcbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gaW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9ycy5DbGllbnQgJiYgQXJyYXkuaXNBcnJheShpbnRlcmNlcHRvcnMuQ2xpZW50KVxuICAgICAgPyBpbnRlcmNlcHRvcnMuQ2xpZW50XG4gICAgICA6IFtjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yKHsgbWF4UmVkaXJlY3Rpb25zIH0pXVxuICAgIHRoaXNba1VybF0gPSB1dGlsLnBhcnNlT3JpZ2luKHVybClcbiAgICB0aGlzW2tDb25uZWN0b3JdID0gY29ubmVjdFxuICAgIHRoaXNba1NvY2tldF0gPSBudWxsXG4gICAgdGhpc1trUGlwZWxpbmluZ10gPSBwaXBlbGluaW5nICE9IG51bGwgPyBwaXBlbGluaW5nIDogMVxuICAgIHRoaXNba01heEhlYWRlcnNTaXplXSA9IG1heEhlYWRlclNpemUgfHwgaHR0cC5tYXhIZWFkZXJTaXplXG4gICAgdGhpc1trS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXRdID0ga2VlcEFsaXZlVGltZW91dCA9PSBudWxsID8gNGUzIDoga2VlcEFsaXZlVGltZW91dFxuICAgIHRoaXNba0tlZXBBbGl2ZU1heFRpbWVvdXRdID0ga2VlcEFsaXZlTWF4VGltZW91dCA9PSBudWxsID8gNjAwZTMgOiBrZWVwQWxpdmVNYXhUaW1lb3V0XG4gICAgdGhpc1trS2VlcEFsaXZlVGltZW91dFRocmVzaG9sZF0gPSBrZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkID09IG51bGwgPyAxZTMgOiBrZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkXG4gICAgdGhpc1trS2VlcEFsaXZlVGltZW91dFZhbHVlXSA9IHRoaXNba0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0XVxuICAgIHRoaXNba1NlcnZlck5hbWVdID0gbnVsbFxuICAgIHRoaXNba0xvY2FsQWRkcmVzc10gPSBsb2NhbEFkZHJlc3MgIT0gbnVsbCA/IGxvY2FsQWRkcmVzcyA6IG51bGxcbiAgICB0aGlzW2tSZXN1bWluZ10gPSAwIC8vIDAsIGlkbGUsIDEsIHNjaGVkdWxlZCwgMiByZXN1bWluZ1xuICAgIHRoaXNba05lZWREcmFpbl0gPSAwIC8vIDAsIGlkbGUsIDEsIHNjaGVkdWxlZCwgMiByZXN1bWluZ1xuICAgIHRoaXNba0hvc3RIZWFkZXJdID0gYGhvc3Q6ICR7dGhpc1trVXJsXS5ob3N0bmFtZX0ke3RoaXNba1VybF0ucG9ydCA/IGA6JHt0aGlzW2tVcmxdLnBvcnR9YCA6ICcnfVxcclxcbmBcbiAgICB0aGlzW2tCb2R5VGltZW91dF0gPSBib2R5VGltZW91dCAhPSBudWxsID8gYm9keVRpbWVvdXQgOiAzMDBlM1xuICAgIHRoaXNba0hlYWRlcnNUaW1lb3V0XSA9IGhlYWRlcnNUaW1lb3V0ICE9IG51bGwgPyBoZWFkZXJzVGltZW91dCA6IDMwMGUzXG4gICAgdGhpc1trU3RyaWN0Q29udGVudExlbmd0aF0gPSBzdHJpY3RDb250ZW50TGVuZ3RoID09IG51bGwgPyB0cnVlIDogc3RyaWN0Q29udGVudExlbmd0aFxuICAgIHRoaXNba01heFJlZGlyZWN0aW9uc10gPSBtYXhSZWRpcmVjdGlvbnNcbiAgICB0aGlzW2tNYXhSZXF1ZXN0c10gPSBtYXhSZXF1ZXN0c1BlckNsaWVudFxuICAgIHRoaXNba0Nsb3NlZFJlc29sdmVdID0gbnVsbFxuICAgIHRoaXNba01heFJlc3BvbnNlU2l6ZV0gPSBtYXhSZXNwb25zZVNpemUgPiAtMSA/IG1heFJlc3BvbnNlU2l6ZSA6IC0xXG4gICAgdGhpc1trSFRUUENvbm5WZXJzaW9uXSA9ICdoMSdcblxuICAgIC8vIEhUVFAvMlxuICAgIHRoaXNba0hUVFAyU2Vzc2lvbl0gPSBudWxsXG4gICAgdGhpc1trSFRUUDJTZXNzaW9uU3RhdGVdID0gIWFsbG93SDJcbiAgICAgID8gbnVsbFxuICAgICAgOiB7XG4gICAgICAgIC8vIHN0cmVhbXM6IG51bGwsIC8vIEZpeGVkIHF1ZXVlIG9mIHN0cmVhbXMgLSBGb3IgZnV0dXJlIHN1cHBvcnQgb2YgYHB1c2hgXG4gICAgICAgICAgb3BlblN0cmVhbXM6IDAsIC8vIEtlZXAgdHJhY2sgb2YgdGhlbSB0byBkZWNpZGUgd2V0aGVyIG9yIG5vdCB1bnJlZiB0aGUgc2Vzc2lvblxuICAgICAgICAgIG1heENvbmN1cnJlbnRTdHJlYW1zOiBtYXhDb25jdXJyZW50U3RyZWFtcyAhPSBudWxsID8gbWF4Q29uY3VycmVudFN0cmVhbXMgOiAxMDAgLy8gTWF4IHBlZXJDb25jdXJyZW50U3RyZWFtcyBmb3IgYSBOb2RlIGgyIHNlcnZlclxuICAgICAgICB9XG4gICAgdGhpc1trSG9zdF0gPSBgJHt0aGlzW2tVcmxdLmhvc3RuYW1lfSR7dGhpc1trVXJsXS5wb3J0ID8gYDoke3RoaXNba1VybF0ucG9ydH1gIDogJyd9YFxuXG4gICAgLy8ga1F1ZXVlIGlzIGJ1aWx0IHVwIG9mIDMgc2VjdGlvbnMgc2VwYXJhdGVkIGJ5XG4gICAgLy8gdGhlIGtSdW5uaW5nSWR4IGFuZCBrUGVuZGluZ0lkeCBpbmRpY2VzLlxuICAgIC8vIHwgICBjb21wbGV0ZSAgIHwgICBydW5uaW5nICAgfCAgIHBlbmRpbmcgICB8XG4gICAgLy8gICAgICAgICAgICAgICAgXiBrUnVubmluZ0lkeCBeIGtQZW5kaW5nSWR4IF4ga1F1ZXVlLmxlbmd0aFxuICAgIC8vIGtSdW5uaW5nSWR4IHBvaW50cyB0byB0aGUgZmlyc3QgcnVubmluZyBlbGVtZW50LlxuICAgIC8vIGtQZW5kaW5nSWR4IHBvaW50cyB0byB0aGUgZmlyc3QgcGVuZGluZyBlbGVtZW50LlxuICAgIC8vIFRoaXMgaW1wbGVtZW50cyBhIGZhc3QgcXVldWUgd2l0aCBhbiBhbW9ydGl6ZWRcbiAgICAvLyB0aW1lIG9mIE8oMSkuXG5cbiAgICB0aGlzW2tRdWV1ZV0gPSBbXVxuICAgIHRoaXNba1J1bm5pbmdJZHhdID0gMFxuICAgIHRoaXNba1BlbmRpbmdJZHhdID0gMFxuICB9XG5cbiAgZ2V0IHBpcGVsaW5pbmcgKCkge1xuICAgIHJldHVybiB0aGlzW2tQaXBlbGluaW5nXVxuICB9XG5cbiAgc2V0IHBpcGVsaW5pbmcgKHZhbHVlKSB7XG4gICAgdGhpc1trUGlwZWxpbmluZ10gPSB2YWx1ZVxuICAgIHJlc3VtZSh0aGlzLCB0cnVlKVxuICB9XG5cbiAgZ2V0IFtrUGVuZGluZ10gKCkge1xuICAgIHJldHVybiB0aGlzW2tRdWV1ZV0ubGVuZ3RoIC0gdGhpc1trUGVuZGluZ0lkeF1cbiAgfVxuXG4gIGdldCBba1J1bm5pbmddICgpIHtcbiAgICByZXR1cm4gdGhpc1trUGVuZGluZ0lkeF0gLSB0aGlzW2tSdW5uaW5nSWR4XVxuICB9XG5cbiAgZ2V0IFtrU2l6ZV0gKCkge1xuICAgIHJldHVybiB0aGlzW2tRdWV1ZV0ubGVuZ3RoIC0gdGhpc1trUnVubmluZ0lkeF1cbiAgfVxuXG4gIGdldCBba0Nvbm5lY3RlZF0gKCkge1xuICAgIHJldHVybiAhIXRoaXNba1NvY2tldF0gJiYgIXRoaXNba0Nvbm5lY3RpbmddICYmICF0aGlzW2tTb2NrZXRdLmRlc3Ryb3llZFxuICB9XG5cbiAgZ2V0IFtrQnVzeV0gKCkge1xuICAgIGNvbnN0IHNvY2tldCA9IHRoaXNba1NvY2tldF1cbiAgICByZXR1cm4gKFxuICAgICAgKHNvY2tldCAmJiAoc29ja2V0W2tSZXNldF0gfHwgc29ja2V0W2tXcml0aW5nXSB8fCBzb2NrZXRba0Jsb2NraW5nXSkpIHx8XG4gICAgICAodGhpc1trU2l6ZV0gPj0gKHRoaXNba1BpcGVsaW5pbmddIHx8IDEpKSB8fFxuICAgICAgdGhpc1trUGVuZGluZ10gPiAwXG4gICAgKVxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlOiBvbmx5IHVzZWQgZm9yIHRlc3QgKi9cbiAgW2tDb25uZWN0XSAoY2IpIHtcbiAgICBjb25uZWN0KHRoaXMpXG4gICAgdGhpcy5vbmNlKCdjb25uZWN0JywgY2IpXG4gIH1cblxuICBba0Rpc3BhdGNoXSAob3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IG9yaWdpbiA9IG9wdHMub3JpZ2luIHx8IHRoaXNba1VybF0ub3JpZ2luXG5cbiAgICBjb25zdCByZXF1ZXN0ID0gdGhpc1trSFRUUENvbm5WZXJzaW9uXSA9PT0gJ2gyJ1xuICAgICAgPyBSZXF1ZXN0W2tIVFRQMkJ1aWxkUmVxdWVzdF0ob3JpZ2luLCBvcHRzLCBoYW5kbGVyKVxuICAgICAgOiBSZXF1ZXN0W2tIVFRQMUJ1aWxkUmVxdWVzdF0ob3JpZ2luLCBvcHRzLCBoYW5kbGVyKVxuXG4gICAgdGhpc1trUXVldWVdLnB1c2gocmVxdWVzdClcbiAgICBpZiAodGhpc1trUmVzdW1pbmddKSB7XG4gICAgICAvLyBEbyBub3RoaW5nLlxuICAgIH0gZWxzZSBpZiAodXRpbC5ib2R5TGVuZ3RoKHJlcXVlc3QuYm9keSkgPT0gbnVsbCAmJiB1dGlsLmlzSXRlcmFibGUocmVxdWVzdC5ib2R5KSkge1xuICAgICAgLy8gV2FpdCBhIHRpY2sgaW4gY2FzZSBzdHJlYW0vaXRlcmF0b3IgaXMgZW5kZWQgaW4gdGhlIHNhbWUgdGljay5cbiAgICAgIHRoaXNba1Jlc3VtaW5nXSA9IDFcbiAgICAgIHByb2Nlc3MubmV4dFRpY2socmVzdW1lLCB0aGlzKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bWUodGhpcywgdHJ1ZSlcbiAgICB9XG5cbiAgICBpZiAodGhpc1trUmVzdW1pbmddICYmIHRoaXNba05lZWREcmFpbl0gIT09IDIgJiYgdGhpc1trQnVzeV0pIHtcbiAgICAgIHRoaXNba05lZWREcmFpbl0gPSAyXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNba05lZWREcmFpbl0gPCAyXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgLy8gVE9ETzogZm9yIEgyIHdlIG5lZWQgdG8gZ3JhY2VmdWxseSBmbHVzaCB0aGUgcmVtYWluaW5nIGVucXVldWVkXG4gICAgLy8gcmVxdWVzdCBhbmQgY2xvc2UgZWFjaCBzdHJlYW0uXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBpZiAoIXRoaXNba1NpemVdKSB7XG4gICAgICAgIHJlc29sdmUobnVsbClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNba0Nsb3NlZFJlc29sdmVdID0gcmVzb2x2ZVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBhc3luYyBba0Rlc3Ryb3ldIChlcnIpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVlc3RzID0gdGhpc1trUXVldWVdLnNwbGljZSh0aGlzW2tQZW5kaW5nSWR4XSlcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVxdWVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RzW2ldXG4gICAgICAgIGVycm9yUmVxdWVzdCh0aGlzLCByZXF1ZXN0LCBlcnIpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgICBpZiAodGhpc1trQ2xvc2VkUmVzb2x2ZV0pIHtcbiAgICAgICAgICAvLyBUT0RPIChmaXgpOiBTaG91bGQgd2UgZXJyb3IgaGVyZSB3aXRoIENsaWVudERlc3Ryb3llZEVycm9yP1xuICAgICAgICAgIHRoaXNba0Nsb3NlZFJlc29sdmVdKClcbiAgICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKClcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXNba0hUVFAyU2Vzc2lvbl0gIT0gbnVsbCkge1xuICAgICAgICB1dGlsLmRlc3Ryb3kodGhpc1trSFRUUDJTZXNzaW9uXSwgZXJyKVxuICAgICAgICB0aGlzW2tIVFRQMlNlc3Npb25dID0gbnVsbFxuICAgICAgICB0aGlzW2tIVFRQMlNlc3Npb25TdGF0ZV0gPSBudWxsXG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpc1trU29ja2V0XSkge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzayhjYWxsYmFjaylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHV0aWwuZGVzdHJveSh0aGlzW2tTb2NrZXRdLm9uKCdjbG9zZScsIGNhbGxiYWNrKSwgZXJyKVxuICAgICAgfVxuXG4gICAgICByZXN1bWUodGhpcylcbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uSHR0cDJTZXNzaW9uRXJyb3IgKGVycikge1xuICBhc3NlcnQoZXJyLmNvZGUgIT09ICdFUlJfVExTX0NFUlRfQUxUTkFNRV9JTlZBTElEJylcblxuICB0aGlzW2tTb2NrZXRdW2tFcnJvcl0gPSBlcnJcblxuICBvbkVycm9yKHRoaXNba0NsaWVudF0sIGVycilcbn1cblxuZnVuY3Rpb24gb25IdHRwMkZyYW1lRXJyb3IgKHR5cGUsIGNvZGUsIGlkKSB7XG4gIGNvbnN0IGVyciA9IG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoYEhUVFAvMjogXCJmcmFtZUVycm9yXCIgcmVjZWl2ZWQgLSB0eXBlICR7dHlwZX0sIGNvZGUgJHtjb2RlfWApXG5cbiAgaWYgKGlkID09PSAwKSB7XG4gICAgdGhpc1trU29ja2V0XVtrRXJyb3JdID0gZXJyXG4gICAgb25FcnJvcih0aGlzW2tDbGllbnRdLCBlcnIpXG4gIH1cbn1cblxuZnVuY3Rpb24gb25IdHRwMlNlc3Npb25FbmQgKCkge1xuICB1dGlsLmRlc3Ryb3kodGhpcywgbmV3IFNvY2tldEVycm9yKCdvdGhlciBzaWRlIGNsb3NlZCcpKVxuICB1dGlsLmRlc3Ryb3kodGhpc1trU29ja2V0XSwgbmV3IFNvY2tldEVycm9yKCdvdGhlciBzaWRlIGNsb3NlZCcpKVxufVxuXG5mdW5jdGlvbiBvbkhUVFAyR29Bd2F5IChjb2RlKSB7XG4gIGNvbnN0IGNsaWVudCA9IHRoaXNba0NsaWVudF1cbiAgY29uc3QgZXJyID0gbmV3IEluZm9ybWF0aW9uYWxFcnJvcihgSFRUUC8yOiBcIkdPQVdBWVwiIGZyYW1lIHJlY2VpdmVkIHdpdGggY29kZSAke2NvZGV9YClcbiAgY2xpZW50W2tTb2NrZXRdID0gbnVsbFxuICBjbGllbnRba0hUVFAyU2Vzc2lvbl0gPSBudWxsXG5cbiAgaWYgKGNsaWVudC5kZXN0cm95ZWQpIHtcbiAgICBhc3NlcnQodGhpc1trUGVuZGluZ10gPT09IDApXG5cbiAgICAvLyBGYWlsIGVudGlyZSBxdWV1ZS5cbiAgICBjb25zdCByZXF1ZXN0cyA9IGNsaWVudFtrUXVldWVdLnNwbGljZShjbGllbnRba1J1bm5pbmdJZHhdKVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVxdWVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0c1tpXVxuICAgICAgZXJyb3JSZXF1ZXN0KHRoaXMsIHJlcXVlc3QsIGVycilcbiAgICB9XG4gIH0gZWxzZSBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDApIHtcbiAgICAvLyBGYWlsIGhlYWQgb2YgcGlwZWxpbmUuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XSsrXSA9IG51bGxcblxuICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgfVxuXG4gIGNsaWVudFtrUGVuZGluZ0lkeF0gPSBjbGllbnRba1J1bm5pbmdJZHhdXG5cbiAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDApXG5cbiAgY2xpZW50LmVtaXQoJ2Rpc2Nvbm5lY3QnLFxuICAgIGNsaWVudFtrVXJsXSxcbiAgICBbY2xpZW50XSxcbiAgICBlcnJcbiAgKVxuXG4gIHJlc3VtZShjbGllbnQpXG59XG5cbmNvbnN0IGNvbnN0YW50cyA9IHJlcXVpcmUoJy4vbGxodHRwL2NvbnN0YW50cycpXG5jb25zdCBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yID0gcmVxdWlyZSgnLi9pbnRlcmNlcHRvci9yZWRpcmVjdEludGVyY2VwdG9yJylcbmNvbnN0IEVNUFRZX0JVRiA9IEJ1ZmZlci5hbGxvYygwKVxuXG5hc3luYyBmdW5jdGlvbiBsYXp5bGxodHRwICgpIHtcbiAgY29uc3QgbGxodHRwV2FzbURhdGEgPSBwcm9jZXNzLmVudi5KRVNUX1dPUktFUl9JRCA/IHJlcXVpcmUoJy4vbGxodHRwL2xsaHR0cC13YXNtLmpzJykgOiB1bmRlZmluZWRcblxuICBsZXQgbW9kXG4gIHRyeSB7XG4gICAgbW9kID0gYXdhaXQgV2ViQXNzZW1ibHkuY29tcGlsZShCdWZmZXIuZnJvbShyZXF1aXJlKCcuL2xsaHR0cC9sbGh0dHBfc2ltZC13YXNtLmpzJyksICdiYXNlNjQnKSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cbiAgICAvLyBXZSBjb3VsZCBjaGVjayBpZiB0aGUgZXJyb3Igd2FzIGNhdXNlZCBieSB0aGUgc2ltZCBvcHRpb24gbm90XG4gICAgLy8gYmVpbmcgZW5hYmxlZCwgYnV0IHRoZSBvY2N1cnJpbmcgb2YgdGhpcyBvdGhlciBlcnJvclxuICAgIC8vICogaHR0cHM6Ly9naXRodWIuY29tL2Vtc2NyaXB0ZW4tY29yZS9lbXNjcmlwdGVuL2lzc3Vlcy8xMTQ5NVxuICAgIC8vIGdvdCBtZSB0byByZW1vdmUgdGhhdCBjaGVjayB0byBhdm9pZCBicmVha2luZyBOb2RlIDEyLlxuICAgIG1vZCA9IGF3YWl0IFdlYkFzc2VtYmx5LmNvbXBpbGUoQnVmZmVyLmZyb20obGxodHRwV2FzbURhdGEgfHwgcmVxdWlyZSgnLi9sbGh0dHAvbGxodHRwLXdhc20uanMnKSwgJ2Jhc2U2NCcpKVxuICB9XG5cbiAgcmV0dXJuIGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKG1vZCwge1xuICAgIGVudjoge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXG5cbiAgICAgIHdhc21fb25fdXJsOiAocCwgYXQsIGxlbikgPT4ge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICByZXR1cm4gMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25fc3RhdHVzOiAocCwgYXQsIGxlbikgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VycmVudFBhcnNlci5wdHIsIHApXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gYXQgLSBjdXJyZW50QnVmZmVyUHRyICsgY3VycmVudEJ1ZmZlclJlZi5ieXRlT2Zmc2V0XG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uU3RhdHVzKG5ldyBGYXN0QnVmZmVyKGN1cnJlbnRCdWZmZXJSZWYuYnVmZmVyLCBzdGFydCwgbGVuKSkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25fbWVzc2FnZV9iZWdpbjogKHApID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbk1lc3NhZ2VCZWdpbigpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX2hlYWRlcl9maWVsZDogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICBjb25zdCBzdGFydCA9IGF0IC0gY3VycmVudEJ1ZmZlclB0ciArIGN1cnJlbnRCdWZmZXJSZWYuYnl0ZU9mZnNldFxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbkhlYWRlckZpZWxkKG5ldyBGYXN0QnVmZmVyKGN1cnJlbnRCdWZmZXJSZWYuYnVmZmVyLCBzdGFydCwgbGVuKSkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25faGVhZGVyX3ZhbHVlOiAocCwgYXQsIGxlbikgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VycmVudFBhcnNlci5wdHIsIHApXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gYXQgLSBjdXJyZW50QnVmZmVyUHRyICsgY3VycmVudEJ1ZmZlclJlZi5ieXRlT2Zmc2V0XG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uSGVhZGVyVmFsdWUobmV3IEZhc3RCdWZmZXIoY3VycmVudEJ1ZmZlclJlZi5idWZmZXIsIHN0YXJ0LCBsZW4pKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9oZWFkZXJzX2NvbXBsZXRlOiAocCwgc3RhdHVzQ29kZSwgdXBncmFkZSwgc2hvdWxkS2VlcEFsaXZlKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjdXJyZW50UGFyc2VyLnB0ciwgcClcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25IZWFkZXJzQ29tcGxldGUoc3RhdHVzQ29kZSwgQm9vbGVhbih1cGdyYWRlKSwgQm9vbGVhbihzaG91bGRLZWVwQWxpdmUpKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9ib2R5OiAocCwgYXQsIGxlbikgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VycmVudFBhcnNlci5wdHIsIHApXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gYXQgLSBjdXJyZW50QnVmZmVyUHRyICsgY3VycmVudEJ1ZmZlclJlZi5ieXRlT2Zmc2V0XG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uQm9keShuZXcgRmFzdEJ1ZmZlcihjdXJyZW50QnVmZmVyUmVmLmJ1ZmZlciwgc3RhcnQsIGxlbikpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX21lc3NhZ2VfY29tcGxldGU6IChwKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjdXJyZW50UGFyc2VyLnB0ciwgcClcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25NZXNzYWdlQ29tcGxldGUoKSB8fCAwXG4gICAgICB9XG5cbiAgICAgIC8qIGVzbGludC1lbmFibGUgY2FtZWxjYXNlICovXG4gICAgfVxuICB9KVxufVxuXG5sZXQgbGxodHRwSW5zdGFuY2UgPSBudWxsXG5sZXQgbGxodHRwUHJvbWlzZSA9IGxhenlsbGh0dHAoKVxubGxodHRwUHJvbWlzZS5jYXRjaCgpXG5cbmxldCBjdXJyZW50UGFyc2VyID0gbnVsbFxubGV0IGN1cnJlbnRCdWZmZXJSZWYgPSBudWxsXG5sZXQgY3VycmVudEJ1ZmZlclNpemUgPSAwXG5sZXQgY3VycmVudEJ1ZmZlclB0ciA9IG51bGxcblxuY29uc3QgVElNRU9VVF9IRUFERVJTID0gMVxuY29uc3QgVElNRU9VVF9CT0RZID0gMlxuY29uc3QgVElNRU9VVF9JRExFID0gM1xuXG5jbGFzcyBQYXJzZXIge1xuICBjb25zdHJ1Y3RvciAoY2xpZW50LCBzb2NrZXQsIHsgZXhwb3J0cyB9KSB7XG4gICAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZShjbGllbnRba01heEhlYWRlcnNTaXplXSkgJiYgY2xpZW50W2tNYXhIZWFkZXJzU2l6ZV0gPiAwKVxuXG4gICAgdGhpcy5sbGh0dHAgPSBleHBvcnRzXG4gICAgdGhpcy5wdHIgPSB0aGlzLmxsaHR0cC5sbGh0dHBfYWxsb2MoY29uc3RhbnRzLlRZUEUuUkVTUE9OU0UpXG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnRcbiAgICB0aGlzLnNvY2tldCA9IHNvY2tldFxuICAgIHRoaXMudGltZW91dCA9IG51bGxcbiAgICB0aGlzLnRpbWVvdXRWYWx1ZSA9IG51bGxcbiAgICB0aGlzLnRpbWVvdXRUeXBlID0gbnVsbFxuICAgIHRoaXMuc3RhdHVzQ29kZSA9IG51bGxcbiAgICB0aGlzLnN0YXR1c1RleHQgPSAnJ1xuICAgIHRoaXMudXBncmFkZSA9IGZhbHNlXG4gICAgdGhpcy5oZWFkZXJzID0gW11cbiAgICB0aGlzLmhlYWRlcnNTaXplID0gMFxuICAgIHRoaXMuaGVhZGVyc01heFNpemUgPSBjbGllbnRba01heEhlYWRlcnNTaXplXVxuICAgIHRoaXMuc2hvdWxkS2VlcEFsaXZlID0gZmFsc2VcbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlXG4gICAgdGhpcy5yZXN1bWUgPSB0aGlzLnJlc3VtZS5iaW5kKHRoaXMpXG5cbiAgICB0aGlzLmJ5dGVzUmVhZCA9IDBcblxuICAgIHRoaXMua2VlcEFsaXZlID0gJydcbiAgICB0aGlzLmNvbnRlbnRMZW5ndGggPSAnJ1xuICAgIHRoaXMuY29ubmVjdGlvbiA9ICcnXG4gICAgdGhpcy5tYXhSZXNwb25zZVNpemUgPSBjbGllbnRba01heFJlc3BvbnNlU2l6ZV1cbiAgfVxuXG4gIHNldFRpbWVvdXQgKHZhbHVlLCB0eXBlKSB7XG4gICAgdGhpcy50aW1lb3V0VHlwZSA9IHR5cGVcbiAgICBpZiAodmFsdWUgIT09IHRoaXMudGltZW91dFZhbHVlKSB7XG4gICAgICB0aW1lcnMuY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dClcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB0aGlzLnRpbWVvdXQgPSB0aW1lcnMuc2V0VGltZW91dChvblBhcnNlclRpbWVvdXQsIHZhbHVlLCB0aGlzKVxuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgICBpZiAodGhpcy50aW1lb3V0LnVucmVmKSB7XG4gICAgICAgICAgdGhpcy50aW1lb3V0LnVucmVmKClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50aW1lb3V0ID0gbnVsbFxuICAgICAgfVxuICAgICAgdGhpcy50aW1lb3V0VmFsdWUgPSB2YWx1ZVxuICAgIH0gZWxzZSBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgaWYgKHRoaXMudGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgIHRoaXMudGltZW91dC5yZWZyZXNoKClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXN1bWUgKCkge1xuICAgIGlmICh0aGlzLnNvY2tldC5kZXN0cm95ZWQgfHwgIXRoaXMucGF1c2VkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBhc3NlcnQodGhpcy5wdHIgIT0gbnVsbClcbiAgICBhc3NlcnQoY3VycmVudFBhcnNlciA9PSBudWxsKVxuXG4gICAgdGhpcy5sbGh0dHAubGxodHRwX3Jlc3VtZSh0aGlzLnB0cilcblxuICAgIGFzc2VydCh0aGlzLnRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0JPRFkpXG4gICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICB0aGlzLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZVxuICAgIHRoaXMuZXhlY3V0ZSh0aGlzLnNvY2tldC5yZWFkKCkgfHwgRU1QVFlfQlVGKSAvLyBGbHVzaCBwYXJzZXIuXG4gICAgdGhpcy5yZWFkTW9yZSgpXG4gIH1cblxuICByZWFkTW9yZSAoKSB7XG4gICAgd2hpbGUgKCF0aGlzLnBhdXNlZCAmJiB0aGlzLnB0cikge1xuICAgICAgY29uc3QgY2h1bmsgPSB0aGlzLnNvY2tldC5yZWFkKClcbiAgICAgIGlmIChjaHVuayA9PT0gbnVsbCkge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgdGhpcy5leGVjdXRlKGNodW5rKVxuICAgIH1cbiAgfVxuXG4gIGV4ZWN1dGUgKGRhdGEpIHtcbiAgICBhc3NlcnQodGhpcy5wdHIgIT0gbnVsbClcbiAgICBhc3NlcnQoY3VycmVudFBhcnNlciA9PSBudWxsKVxuICAgIGFzc2VydCghdGhpcy5wYXVzZWQpXG5cbiAgICBjb25zdCB7IHNvY2tldCwgbGxodHRwIH0gPSB0aGlzXG5cbiAgICBpZiAoZGF0YS5sZW5ndGggPiBjdXJyZW50QnVmZmVyU2l6ZSkge1xuICAgICAgaWYgKGN1cnJlbnRCdWZmZXJQdHIpIHtcbiAgICAgICAgbGxodHRwLmZyZWUoY3VycmVudEJ1ZmZlclB0cilcbiAgICAgIH1cbiAgICAgIGN1cnJlbnRCdWZmZXJTaXplID0gTWF0aC5jZWlsKGRhdGEubGVuZ3RoIC8gNDA5NikgKiA0MDk2XG4gICAgICBjdXJyZW50QnVmZmVyUHRyID0gbGxodHRwLm1hbGxvYyhjdXJyZW50QnVmZmVyU2l6ZSlcbiAgICB9XG5cbiAgICBuZXcgVWludDhBcnJheShsbGh0dHAubWVtb3J5LmJ1ZmZlciwgY3VycmVudEJ1ZmZlclB0ciwgY3VycmVudEJ1ZmZlclNpemUpLnNldChkYXRhKVxuXG4gICAgLy8gQ2FsbCBgZXhlY3V0ZWAgb24gdGhlIHdhc20gcGFyc2VyLlxuICAgIC8vIFdlIHBhc3MgdGhlIGBsbGh0dHBfcGFyc2VyYCBwb2ludGVyIGFkZHJlc3MsIHRoZSBwb2ludGVyIGFkZHJlc3Mgb2YgYnVmZmVyIHZpZXcgZGF0YSxcbiAgICAvLyBhbmQgZmluYWxseSB0aGUgbGVuZ3RoIG9mIGJ5dGVzIHRvIHBhcnNlLlxuICAgIC8vIFRoZSByZXR1cm4gdmFsdWUgaXMgYW4gZXJyb3IgY29kZSBvciBgY29uc3RhbnRzLkVSUk9SLk9LYC5cbiAgICB0cnkge1xuICAgICAgbGV0IHJldFxuXG4gICAgICB0cnkge1xuICAgICAgICBjdXJyZW50QnVmZmVyUmVmID0gZGF0YVxuICAgICAgICBjdXJyZW50UGFyc2VyID0gdGhpc1xuICAgICAgICByZXQgPSBsbGh0dHAubGxodHRwX2V4ZWN1dGUodGhpcy5wdHIsIGN1cnJlbnRCdWZmZXJQdHIsIGRhdGEubGVuZ3RoKVxuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYXRjaCAqL1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBkaWZmaWN1bHQgdG8gbWFrZSBhIHRlc3QgY2FzZSBmb3IgKi9cbiAgICAgICAgdGhyb3cgZXJyXG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBjdXJyZW50UGFyc2VyID0gbnVsbFxuICAgICAgICBjdXJyZW50QnVmZmVyUmVmID0gbnVsbFxuICAgICAgfVxuXG4gICAgICBjb25zdCBvZmZzZXQgPSBsbGh0dHAubGxodHRwX2dldF9lcnJvcl9wb3ModGhpcy5wdHIpIC0gY3VycmVudEJ1ZmZlclB0clxuXG4gICAgICBpZiAocmV0ID09PSBjb25zdGFudHMuRVJST1IuUEFVU0VEX1VQR1JBREUpIHtcbiAgICAgICAgdGhpcy5vblVwZ3JhZGUoZGF0YS5zbGljZShvZmZzZXQpKVxuICAgICAgfSBlbHNlIGlmIChyZXQgPT09IGNvbnN0YW50cy5FUlJPUi5QQVVTRUQpIHtcbiAgICAgICAgdGhpcy5wYXVzZWQgPSB0cnVlXG4gICAgICAgIHNvY2tldC51bnNoaWZ0KGRhdGEuc2xpY2Uob2Zmc2V0KSlcbiAgICAgIH0gZWxzZSBpZiAocmV0ICE9PSBjb25zdGFudHMuRVJST1IuT0spIHtcbiAgICAgICAgY29uc3QgcHRyID0gbGxodHRwLmxsaHR0cF9nZXRfZXJyb3JfcmVhc29uKHRoaXMucHRyKVxuICAgICAgICBsZXQgbWVzc2FnZSA9ICcnXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBkaWZmaWN1bHQgdG8gbWFrZSBhIHRlc3QgY2FzZSBmb3IgKi9cbiAgICAgICAgaWYgKHB0cikge1xuICAgICAgICAgIGNvbnN0IGxlbiA9IG5ldyBVaW50OEFycmF5KGxsaHR0cC5tZW1vcnkuYnVmZmVyLCBwdHIpLmluZGV4T2YoMClcbiAgICAgICAgICBtZXNzYWdlID1cbiAgICAgICAgICAgICdSZXNwb25zZSBkb2VzIG5vdCBtYXRjaCB0aGUgSFRUUC8xLjEgcHJvdG9jb2wgKCcgK1xuICAgICAgICAgICAgQnVmZmVyLmZyb20obGxodHRwLm1lbW9yeS5idWZmZXIsIHB0ciwgbGVuKS50b1N0cmluZygpICtcbiAgICAgICAgICAgICcpJ1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBIVFRQUGFyc2VyRXJyb3IobWVzc2FnZSwgY29uc3RhbnRzLkVSUk9SW3JldF0sIGRhdGEuc2xpY2Uob2Zmc2V0KSlcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIGVycilcbiAgICB9XG4gIH1cblxuICBkZXN0cm95ICgpIHtcbiAgICBhc3NlcnQodGhpcy5wdHIgIT0gbnVsbClcbiAgICBhc3NlcnQoY3VycmVudFBhcnNlciA9PSBudWxsKVxuXG4gICAgdGhpcy5sbGh0dHAubGxodHRwX2ZyZWUodGhpcy5wdHIpXG4gICAgdGhpcy5wdHIgPSBudWxsXG5cbiAgICB0aW1lcnMuY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dClcbiAgICB0aGlzLnRpbWVvdXQgPSBudWxsXG4gICAgdGhpcy50aW1lb3V0VmFsdWUgPSBudWxsXG4gICAgdGhpcy50aW1lb3V0VHlwZSA9IG51bGxcblxuICAgIHRoaXMucGF1c2VkID0gZmFsc2VcbiAgfVxuXG4gIG9uU3RhdHVzIChidWYpIHtcbiAgICB0aGlzLnN0YXR1c1RleHQgPSBidWYudG9TdHJpbmcoKVxuICB9XG5cbiAgb25NZXNzYWdlQmVnaW4gKCkge1xuICAgIGNvbnN0IHsgc29ja2V0LCBjbGllbnQgfSA9IHRoaXNcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBkaWZmaWN1bHQgdG8gbWFrZSBhIHRlc3QgY2FzZSBmb3IgKi9cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gIH1cblxuICBvbkhlYWRlckZpZWxkIChidWYpIHtcbiAgICBjb25zdCBsZW4gPSB0aGlzLmhlYWRlcnMubGVuZ3RoXG5cbiAgICBpZiAoKGxlbiAmIDEpID09PSAwKSB7XG4gICAgICB0aGlzLmhlYWRlcnMucHVzaChidWYpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGVhZGVyc1tsZW4gLSAxXSA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuaGVhZGVyc1tsZW4gLSAxXSwgYnVmXSlcbiAgICB9XG5cbiAgICB0aGlzLnRyYWNrSGVhZGVyKGJ1Zi5sZW5ndGgpXG4gIH1cblxuICBvbkhlYWRlclZhbHVlIChidWYpIHtcbiAgICBsZXQgbGVuID0gdGhpcy5oZWFkZXJzLmxlbmd0aFxuXG4gICAgaWYgKChsZW4gJiAxKSA9PT0gMSkge1xuICAgICAgdGhpcy5oZWFkZXJzLnB1c2goYnVmKVxuICAgICAgbGVuICs9IDFcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oZWFkZXJzW2xlbiAtIDFdID0gQnVmZmVyLmNvbmNhdChbdGhpcy5oZWFkZXJzW2xlbiAtIDFdLCBidWZdKVxuICAgIH1cblxuICAgIGNvbnN0IGtleSA9IHRoaXMuaGVhZGVyc1tsZW4gLSAyXVxuICAgIGlmIChrZXkubGVuZ3RoID09PSAxMCAmJiBrZXkudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSAna2VlcC1hbGl2ZScpIHtcbiAgICAgIHRoaXMua2VlcEFsaXZlICs9IGJ1Zi50b1N0cmluZygpXG4gICAgfSBlbHNlIGlmIChrZXkubGVuZ3RoID09PSAxMCAmJiBrZXkudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSAnY29ubmVjdGlvbicpIHtcbiAgICAgIHRoaXMuY29ubmVjdGlvbiArPSBidWYudG9TdHJpbmcoKVxuICAgIH0gZWxzZSBpZiAoa2V5Lmxlbmd0aCA9PT0gMTQgJiYga2V5LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtbGVuZ3RoJykge1xuICAgICAgdGhpcy5jb250ZW50TGVuZ3RoICs9IGJ1Zi50b1N0cmluZygpXG4gICAgfVxuXG4gICAgdGhpcy50cmFja0hlYWRlcihidWYubGVuZ3RoKVxuICB9XG5cbiAgdHJhY2tIZWFkZXIgKGxlbikge1xuICAgIHRoaXMuaGVhZGVyc1NpemUgKz0gbGVuXG4gICAgaWYgKHRoaXMuaGVhZGVyc1NpemUgPj0gdGhpcy5oZWFkZXJzTWF4U2l6ZSkge1xuICAgICAgdXRpbC5kZXN0cm95KHRoaXMuc29ja2V0LCBuZXcgSGVhZGVyc092ZXJmbG93RXJyb3IoKSlcbiAgICB9XG4gIH1cblxuICBvblVwZ3JhZGUgKGhlYWQpIHtcbiAgICBjb25zdCB7IHVwZ3JhZGUsIGNsaWVudCwgc29ja2V0LCBoZWFkZXJzLCBzdGF0dXNDb2RlIH0gPSB0aGlzXG5cbiAgICBhc3NlcnQodXBncmFkZSlcblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGFzc2VydChyZXF1ZXN0KVxuXG4gICAgYXNzZXJ0KCFzb2NrZXQuZGVzdHJveWVkKVxuICAgIGFzc2VydChzb2NrZXQgPT09IGNsaWVudFtrU29ja2V0XSlcbiAgICBhc3NlcnQoIXRoaXMucGF1c2VkKVxuICAgIGFzc2VydChyZXF1ZXN0LnVwZ3JhZGUgfHwgcmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJylcblxuICAgIHRoaXMuc3RhdHVzQ29kZSA9IG51bGxcbiAgICB0aGlzLnN0YXR1c1RleHQgPSAnJ1xuICAgIHRoaXMuc2hvdWxkS2VlcEFsaXZlID0gbnVsbFxuXG4gICAgYXNzZXJ0KHRoaXMuaGVhZGVycy5sZW5ndGggJSAyID09PSAwKVxuICAgIHRoaXMuaGVhZGVycyA9IFtdXG4gICAgdGhpcy5oZWFkZXJzU2l6ZSA9IDBcblxuICAgIHNvY2tldC51bnNoaWZ0KGhlYWQpXG5cbiAgICBzb2NrZXRba1BhcnNlcl0uZGVzdHJveSgpXG4gICAgc29ja2V0W2tQYXJzZXJdID0gbnVsbFxuXG4gICAgc29ja2V0W2tDbGllbnRdID0gbnVsbFxuICAgIHNvY2tldFtrRXJyb3JdID0gbnVsbFxuICAgIHNvY2tldFxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uU29ja2V0RXJyb3IpXG4gICAgICAucmVtb3ZlTGlzdGVuZXIoJ3JlYWRhYmxlJywgb25Tb2NrZXRSZWFkYWJsZSlcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25Tb2NrZXRFbmQpXG4gICAgICAucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25Tb2NrZXRDbG9zZSlcblxuICAgIGNsaWVudFtrU29ja2V0XSA9IG51bGxcbiAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuICAgIGNsaWVudC5lbWl0KCdkaXNjb25uZWN0JywgY2xpZW50W2tVcmxdLCBbY2xpZW50XSwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcigndXBncmFkZScpKVxuXG4gICAgdHJ5IHtcbiAgICAgIHJlcXVlc3Qub25VcGdyYWRlKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIGVycilcbiAgICB9XG5cbiAgICByZXN1bWUoY2xpZW50KVxuICB9XG5cbiAgb25IZWFkZXJzQ29tcGxldGUgKHN0YXR1c0NvZGUsIHVwZ3JhZGUsIHNob3VsZEtlZXBBbGl2ZSkge1xuICAgIGNvbnN0IHsgY2xpZW50LCBzb2NrZXQsIGhlYWRlcnMsIHN0YXR1c1RleHQgfSA9IHRoaXNcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBkaWZmaWN1bHQgdG8gbWFrZSBhIHRlc3QgY2FzZSBmb3IgKi9cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBhc3NlcnQoIXRoaXMudXBncmFkZSlcbiAgICBhc3NlcnQodGhpcy5zdGF0dXNDb2RlIDwgMjAwKVxuXG4gICAgaWYgKHN0YXR1c0NvZGUgPT09IDEwMCkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFNvY2tldEVycm9yKCdiYWQgcmVzcG9uc2UnLCB1dGlsLmdldFNvY2tldEluZm8oc29ja2V0KSkpXG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICAvKiB0aGlzIGNhbiBvbmx5IGhhcHBlbiBpZiBzZXJ2ZXIgaXMgbWlzYmVoYXZpbmcgKi9cbiAgICBpZiAodXBncmFkZSAmJiAhcmVxdWVzdC51cGdyYWRlKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgU29ja2V0RXJyb3IoJ2JhZCB1cGdyYWRlJywgdXRpbC5nZXRTb2NrZXRJbmZvKHNvY2tldCkpKVxuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRoaXMudGltZW91dFR5cGUsIFRJTUVPVVRfSEVBREVSUylcblxuICAgIHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1c0NvZGVcbiAgICB0aGlzLnNob3VsZEtlZXBBbGl2ZSA9IChcbiAgICAgIHNob3VsZEtlZXBBbGl2ZSB8fFxuICAgICAgLy8gT3ZlcnJpZGUgbGxodHRwIHZhbHVlIHdoaWNoIGRvZXMgbm90IGFsbG93IGtlZXBBbGl2ZSBmb3IgSEVBRC5cbiAgICAgIChyZXF1ZXN0Lm1ldGhvZCA9PT0gJ0hFQUQnICYmICFzb2NrZXRba1Jlc2V0XSAmJiB0aGlzLmNvbm5lY3Rpb24udG9Mb3dlckNhc2UoKSA9PT0gJ2tlZXAtYWxpdmUnKVxuICAgIClcblxuICAgIGlmICh0aGlzLnN0YXR1c0NvZGUgPj0gMjAwKSB7XG4gICAgICBjb25zdCBib2R5VGltZW91dCA9IHJlcXVlc3QuYm9keVRpbWVvdXQgIT0gbnVsbFxuICAgICAgICA/IHJlcXVlc3QuYm9keVRpbWVvdXRcbiAgICAgICAgOiBjbGllbnRba0JvZHlUaW1lb3V0XVxuICAgICAgdGhpcy5zZXRUaW1lb3V0KGJvZHlUaW1lb3V0LCBUSU1FT1VUX0JPRFkpXG4gICAgfSBlbHNlIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAodGhpcy50aW1lb3V0LnJlZnJlc2gpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMSlcbiAgICAgIHRoaXMudXBncmFkZSA9IHRydWVcbiAgICAgIHJldHVybiAyXG4gICAgfVxuXG4gICAgaWYgKHVwZ3JhZGUpIHtcbiAgICAgIGFzc2VydChjbGllbnRba1J1bm5pbmddID09PSAxKVxuICAgICAgdGhpcy51cGdyYWRlID0gdHJ1ZVxuICAgICAgcmV0dXJuIDJcbiAgICB9XG5cbiAgICBhc3NlcnQodGhpcy5oZWFkZXJzLmxlbmd0aCAlIDIgPT09IDApXG4gICAgdGhpcy5oZWFkZXJzID0gW11cbiAgICB0aGlzLmhlYWRlcnNTaXplID0gMFxuXG4gICAgaWYgKHRoaXMuc2hvdWxkS2VlcEFsaXZlICYmIGNsaWVudFtrUGlwZWxpbmluZ10pIHtcbiAgICAgIGNvbnN0IGtlZXBBbGl2ZVRpbWVvdXQgPSB0aGlzLmtlZXBBbGl2ZSA/IHV0aWwucGFyc2VLZWVwQWxpdmVUaW1lb3V0KHRoaXMua2VlcEFsaXZlKSA6IG51bGxcblxuICAgICAgaWYgKGtlZXBBbGl2ZVRpbWVvdXQgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCB0aW1lb3V0ID0gTWF0aC5taW4oXG4gICAgICAgICAga2VlcEFsaXZlVGltZW91dCAtIGNsaWVudFtrS2VlcEFsaXZlVGltZW91dFRocmVzaG9sZF0sXG4gICAgICAgICAgY2xpZW50W2tLZWVwQWxpdmVNYXhUaW1lb3V0XVxuICAgICAgICApXG4gICAgICAgIGlmICh0aW1lb3V0IDw9IDApIHtcbiAgICAgICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0gPSB0aW1lb3V0XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsaWVudFtrS2VlcEFsaXZlVGltZW91dFZhbHVlXSA9IGNsaWVudFtrS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXRdXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0b3AgbW9yZSByZXF1ZXN0cyBmcm9tIGJlaW5nIGRpc3BhdGNoZWQuXG4gICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICB9XG5cbiAgICBjb25zdCBwYXVzZSA9IHJlcXVlc3Qub25IZWFkZXJzKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHRoaXMucmVzdW1lLCBzdGF0dXNUZXh0KSA9PT0gZmFsc2VcblxuICAgIGlmIChyZXF1ZXN0LmFib3J0ZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCA9PT0gJ0hFQUQnKSB7XG4gICAgICByZXR1cm4gMVxuICAgIH1cblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICByZXR1cm4gMVxuICAgIH1cblxuICAgIGlmIChzb2NrZXRba0Jsb2NraW5nXSkge1xuICAgICAgc29ja2V0W2tCbG9ja2luZ10gPSBmYWxzZVxuICAgICAgcmVzdW1lKGNsaWVudClcbiAgICB9XG5cbiAgICByZXR1cm4gcGF1c2UgPyBjb25zdGFudHMuRVJST1IuUEFVU0VEIDogMFxuICB9XG5cbiAgb25Cb2R5IChidWYpIHtcbiAgICBjb25zdCB7IGNsaWVudCwgc29ja2V0LCBzdGF0dXNDb2RlLCBtYXhSZXNwb25zZVNpemUgfSA9IHRoaXNcblxuICAgIGlmIChzb2NrZXQuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBhc3NlcnQocmVxdWVzdClcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0aGlzLnRpbWVvdXRUeXBlLCBUSU1FT1VUX0JPRFkpXG4gICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICB0aGlzLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgYXNzZXJ0KHN0YXR1c0NvZGUgPj0gMjAwKVxuXG4gICAgaWYgKG1heFJlc3BvbnNlU2l6ZSA+IC0xICYmIHRoaXMuYnl0ZXNSZWFkICsgYnVmLmxlbmd0aCA+IG1heFJlc3BvbnNlU2l6ZSkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFJlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3IoKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIHRoaXMuYnl0ZXNSZWFkICs9IGJ1Zi5sZW5ndGhcblxuICAgIGlmIChyZXF1ZXN0Lm9uRGF0YShidWYpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGNvbnN0YW50cy5FUlJPUi5QQVVTRURcbiAgICB9XG4gIH1cblxuICBvbk1lc3NhZ2VDb21wbGV0ZSAoKSB7XG4gICAgY29uc3QgeyBjbGllbnQsIHNvY2tldCwgc3RhdHVzQ29kZSwgdXBncmFkZSwgaGVhZGVycywgY29udGVudExlbmd0aCwgYnl0ZXNSZWFkLCBzaG91bGRLZWVwQWxpdmUgfSA9IHRoaXNcblxuICAgIGlmIChzb2NrZXQuZGVzdHJveWVkICYmICghc3RhdHVzQ29kZSB8fCBzaG91bGRLZWVwQWxpdmUpKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBpZiAodXBncmFkZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgYXNzZXJ0KHJlcXVlc3QpXG5cbiAgICBhc3NlcnQoc3RhdHVzQ29kZSA+PSAxMDApXG5cbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBudWxsXG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gJydcbiAgICB0aGlzLmJ5dGVzUmVhZCA9IDBcbiAgICB0aGlzLmNvbnRlbnRMZW5ndGggPSAnJ1xuICAgIHRoaXMua2VlcEFsaXZlID0gJydcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSAnJ1xuXG4gICAgYXNzZXJ0KHRoaXMuaGVhZGVycy5sZW5ndGggJSAyID09PSAwKVxuICAgIHRoaXMuaGVhZGVycyA9IFtdXG4gICAgdGhpcy5oZWFkZXJzU2l6ZSA9IDBcblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogc2hvdWxkIGJlIGhhbmRsZWQgYnkgbGxodHRwPyAqL1xuICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0hFQUQnICYmIGNvbnRlbnRMZW5ndGggJiYgYnl0ZXNSZWFkICE9PSBwYXJzZUludChjb250ZW50TGVuZ3RoLCAxMCkpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICByZXF1ZXN0Lm9uQ29tcGxldGUoaGVhZGVycylcblxuICAgIGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF0rK10gPSBudWxsXG5cbiAgICBpZiAoc29ja2V0W2tXcml0aW5nXSkge1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNsaWVudFtrUnVubmluZ10sIDApXG4gICAgICAvLyBSZXNwb25zZSBjb21wbGV0ZWQgYmVmb3JlIHJlcXVlc3QuXG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdyZXNldCcpKVxuICAgICAgcmV0dXJuIGNvbnN0YW50cy5FUlJPUi5QQVVTRURcbiAgICB9IGVsc2UgaWYgKCFzaG91bGRLZWVwQWxpdmUpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3Jlc2V0JykpXG4gICAgICByZXR1cm4gY29uc3RhbnRzLkVSUk9SLlBBVVNFRFxuICAgIH0gZWxzZSBpZiAoc29ja2V0W2tSZXNldF0gJiYgY2xpZW50W2tSdW5uaW5nXSA9PT0gMCkge1xuICAgICAgLy8gRGVzdHJveSBzb2NrZXQgb25jZSBhbGwgcmVxdWVzdHMgaGF2ZSBjb21wbGV0ZWQuXG4gICAgICAvLyBUaGUgcmVxdWVzdCBhdCB0aGUgdGFpbCBvZiB0aGUgcGlwZWxpbmUgaXMgdGhlIG9uZVxuICAgICAgLy8gdGhhdCByZXF1ZXN0ZWQgcmVzZXQgYW5kIG5vIGZ1cnRoZXIgcmVxdWVzdHMgc2hvdWxkXG4gICAgICAvLyBoYXZlIGJlZW4gcXVldWVkIHNpbmNlIHRoZW4uXG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdyZXNldCcpKVxuICAgICAgcmV0dXJuIGNvbnN0YW50cy5FUlJPUi5QQVVTRURcbiAgICB9IGVsc2UgaWYgKGNsaWVudFtrUGlwZWxpbmluZ10gPT09IDEpIHtcbiAgICAgIC8vIFdlIG11c3Qgd2FpdCBhIGZ1bGwgZXZlbnQgbG9vcCBjeWNsZSB0byByZXVzZSB0aGlzIHNvY2tldCB0byBtYWtlIHN1cmVcbiAgICAgIC8vIHRoYXQgbm9uLXNwZWMgY29tcGxpYW50IHNlcnZlcnMgYXJlIG5vdCBjbG9zaW5nIHRoZSBjb25uZWN0aW9uIGV2ZW4gaWYgdGhleVxuICAgICAgLy8gc2FpZCB0aGV5IHdvbid0LlxuICAgICAgc2V0SW1tZWRpYXRlKHJlc3VtZSwgY2xpZW50KVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bWUoY2xpZW50KVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBvblBhcnNlclRpbWVvdXQgKHBhcnNlcikge1xuICBjb25zdCB7IHNvY2tldCwgdGltZW91dFR5cGUsIGNsaWVudCB9ID0gcGFyc2VyXG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0hFQURFUlMpIHtcbiAgICBpZiAoIXNvY2tldFtrV3JpdGluZ10gfHwgc29ja2V0LndyaXRhYmxlTmVlZERyYWluIHx8IGNsaWVudFtrUnVubmluZ10gPiAxKSB7XG4gICAgICBhc3NlcnQoIXBhcnNlci5wYXVzZWQsICdjYW5ub3QgYmUgcGF1c2VkIHdoaWxlIHdhaXRpbmcgZm9yIGhlYWRlcnMnKVxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEhlYWRlcnNUaW1lb3V0RXJyb3IoKSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodGltZW91dFR5cGUgPT09IFRJTUVPVVRfQk9EWSkge1xuICAgIGlmICghcGFyc2VyLnBhdXNlZCkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEJvZHlUaW1lb3V0RXJyb3IoKSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodGltZW91dFR5cGUgPT09IFRJTUVPVVRfSURMRSkge1xuICAgIGFzc2VydChjbGllbnRba1J1bm5pbmddID09PSAwICYmIGNsaWVudFtrS2VlcEFsaXZlVGltZW91dFZhbHVlXSlcbiAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdzb2NrZXQgaWRsZSB0aW1lb3V0JykpXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRSZWFkYWJsZSAoKSB7XG4gIGNvbnN0IHsgW2tQYXJzZXJdOiBwYXJzZXIgfSA9IHRoaXNcbiAgaWYgKHBhcnNlcikge1xuICAgIHBhcnNlci5yZWFkTW9yZSgpXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRFcnJvciAoZXJyKSB7XG4gIGNvbnN0IHsgW2tDbGllbnRdOiBjbGllbnQsIFtrUGFyc2VyXTogcGFyc2VyIH0gPSB0aGlzXG5cbiAgYXNzZXJ0KGVyci5jb2RlICE9PSAnRVJSX1RMU19DRVJUX0FMVE5BTUVfSU5WQUxJRCcpXG5cbiAgaWYgKGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSAhPT0gJ2gyJykge1xuICAgIC8vIE9uIE1hYyBPUywgd2UgZ2V0IGFuIEVDT05OUkVTRVQgZXZlbiBpZiB0aGVyZSBpcyBhIGZ1bGwgYm9keSB0byBiZSBmb3J3YXJkZWRcbiAgICAvLyB0byB0aGUgdXNlci5cbiAgICBpZiAoZXJyLmNvZGUgPT09ICdFQ09OTlJFU0VUJyAmJiBwYXJzZXIuc3RhdHVzQ29kZSAmJiAhcGFyc2VyLnNob3VsZEtlZXBBbGl2ZSkge1xuICAgICAgLy8gV2UgdHJlYXQgYWxsIGluY29taW5nIGRhdGEgc28gZm9yIGFzIGEgdmFsaWQgcmVzcG9uc2UuXG4gICAgICBwYXJzZXIub25NZXNzYWdlQ29tcGxldGUoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9XG5cbiAgdGhpc1trRXJyb3JdID0gZXJyXG5cbiAgb25FcnJvcih0aGlzW2tDbGllbnRdLCBlcnIpXG59XG5cbmZ1bmN0aW9uIG9uRXJyb3IgKGNsaWVudCwgZXJyKSB7XG4gIGlmIChcbiAgICBjbGllbnRba1J1bm5pbmddID09PSAwICYmXG4gICAgZXJyLmNvZGUgIT09ICdVTkRfRVJSX0lORk8nICYmXG4gICAgZXJyLmNvZGUgIT09ICdVTkRfRVJSX1NPQ0tFVCdcbiAgKSB7XG4gICAgLy8gRXJyb3IgaXMgbm90IGNhdXNlZCBieSBydW5uaW5nIHJlcXVlc3QgYW5kIG5vdCBhIHJlY292ZXJhYmxlXG4gICAgLy8gc29ja2V0IGVycm9yLlxuXG4gICAgYXNzZXJ0KGNsaWVudFtrUGVuZGluZ0lkeF0gPT09IGNsaWVudFtrUnVubmluZ0lkeF0pXG5cbiAgICBjb25zdCByZXF1ZXN0cyA9IGNsaWVudFtrUXVldWVdLnNwbGljZShjbGllbnRba1J1bm5pbmdJZHhdKVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVxdWVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0c1tpXVxuICAgICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICAgIH1cbiAgICBhc3NlcnQoY2xpZW50W2tTaXplXSA9PT0gMClcbiAgfVxufVxuXG5mdW5jdGlvbiBvblNvY2tldEVuZCAoKSB7XG4gIGNvbnN0IHsgW2tQYXJzZXJdOiBwYXJzZXIsIFtrQ2xpZW50XTogY2xpZW50IH0gPSB0aGlzXG5cbiAgaWYgKGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSAhPT0gJ2gyJykge1xuICAgIGlmIChwYXJzZXIuc3RhdHVzQ29kZSAmJiAhcGFyc2VyLnNob3VsZEtlZXBBbGl2ZSkge1xuICAgICAgLy8gV2UgdHJlYXQgYWxsIGluY29taW5nIGRhdGEgc28gZmFyIGFzIGEgdmFsaWQgcmVzcG9uc2UuXG4gICAgICBwYXJzZXIub25NZXNzYWdlQ29tcGxldGUoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9XG5cbiAgdXRpbC5kZXN0cm95KHRoaXMsIG5ldyBTb2NrZXRFcnJvcignb3RoZXIgc2lkZSBjbG9zZWQnLCB1dGlsLmdldFNvY2tldEluZm8odGhpcykpKVxufVxuXG5mdW5jdGlvbiBvblNvY2tldENsb3NlICgpIHtcbiAgY29uc3QgeyBba0NsaWVudF06IGNsaWVudCwgW2tQYXJzZXJdOiBwYXJzZXIgfSA9IHRoaXNcblxuICBpZiAoY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID09PSAnaDEnICYmIHBhcnNlcikge1xuICAgIGlmICghdGhpc1trRXJyb3JdICYmIHBhcnNlci5zdGF0dXNDb2RlICYmICFwYXJzZXIuc2hvdWxkS2VlcEFsaXZlKSB7XG4gICAgICAvLyBXZSB0cmVhdCBhbGwgaW5jb21pbmcgZGF0YSBzbyBmYXIgYXMgYSB2YWxpZCByZXNwb25zZS5cbiAgICAgIHBhcnNlci5vbk1lc3NhZ2VDb21wbGV0ZSgpXG4gICAgfVxuXG4gICAgdGhpc1trUGFyc2VyXS5kZXN0cm95KClcbiAgICB0aGlzW2tQYXJzZXJdID0gbnVsbFxuICB9XG5cbiAgY29uc3QgZXJyID0gdGhpc1trRXJyb3JdIHx8IG5ldyBTb2NrZXRFcnJvcignY2xvc2VkJywgdXRpbC5nZXRTb2NrZXRJbmZvKHRoaXMpKVxuXG4gIGNsaWVudFtrU29ja2V0XSA9IG51bGxcblxuICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgIGFzc2VydChjbGllbnRba1BlbmRpbmddID09PSAwKVxuXG4gICAgLy8gRmFpbCBlbnRpcmUgcXVldWUuXG4gICAgY29uc3QgcmVxdWVzdHMgPSBjbGllbnRba1F1ZXVlXS5zcGxpY2UoY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdHNbaV1cbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgICB9XG4gIH0gZWxzZSBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgZXJyLmNvZGUgIT09ICdVTkRfRVJSX0lORk8nKSB7XG4gICAgLy8gRmFpbCBoZWFkIG9mIHBpcGVsaW5lLlxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF0rK10gPSBudWxsXG5cbiAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gIH1cblxuICBjbGllbnRba1BlbmRpbmdJZHhdID0gY2xpZW50W2tSdW5uaW5nSWR4XVxuXG4gIGFzc2VydChjbGllbnRba1J1bm5pbmddID09PSAwKVxuXG4gIGNsaWVudC5lbWl0KCdkaXNjb25uZWN0JywgY2xpZW50W2tVcmxdLCBbY2xpZW50XSwgZXJyKVxuXG4gIHJlc3VtZShjbGllbnQpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbm5lY3QgKGNsaWVudCkge1xuICBhc3NlcnQoIWNsaWVudFtrQ29ubmVjdGluZ10pXG4gIGFzc2VydCghY2xpZW50W2tTb2NrZXRdKVxuXG4gIGxldCB7IGhvc3QsIGhvc3RuYW1lLCBwcm90b2NvbCwgcG9ydCB9ID0gY2xpZW50W2tVcmxdXG5cbiAgLy8gUmVzb2x2ZSBpcHY2XG4gIGlmIChob3N0bmFtZVswXSA9PT0gJ1snKSB7XG4gICAgY29uc3QgaWR4ID0gaG9zdG5hbWUuaW5kZXhPZignXScpXG5cbiAgICBhc3NlcnQoaWR4ICE9PSAtMSlcbiAgICBjb25zdCBpcCA9IGhvc3RuYW1lLnN1YnN0cmluZygxLCBpZHgpXG5cbiAgICBhc3NlcnQobmV0LmlzSVAoaXApKVxuICAgIGhvc3RuYW1lID0gaXBcbiAgfVxuXG4gIGNsaWVudFtrQ29ubmVjdGluZ10gPSB0cnVlXG5cbiAgaWYgKGNoYW5uZWxzLmJlZm9yZUNvbm5lY3QuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICBjaGFubmVscy5iZWZvcmVDb25uZWN0LnB1Ymxpc2goe1xuICAgICAgY29ubmVjdFBhcmFtczoge1xuICAgICAgICBob3N0LFxuICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgIHBvcnQsXG4gICAgICAgIHNlcnZlcm5hbWU6IGNsaWVudFtrU2VydmVyTmFtZV0sXG4gICAgICAgIGxvY2FsQWRkcmVzczogY2xpZW50W2tMb2NhbEFkZHJlc3NdXG4gICAgICB9LFxuICAgICAgY29ubmVjdG9yOiBjbGllbnRba0Nvbm5lY3Rvcl1cbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzb2NrZXQgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjbGllbnRba0Nvbm5lY3Rvcl0oe1xuICAgICAgICBob3N0LFxuICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgIHBvcnQsXG4gICAgICAgIHNlcnZlcm5hbWU6IGNsaWVudFtrU2VydmVyTmFtZV0sXG4gICAgICAgIGxvY2FsQWRkcmVzczogY2xpZW50W2tMb2NhbEFkZHJlc3NdXG4gICAgICB9LCAoZXJyLCBzb2NrZXQpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZShzb2NrZXQpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcblxuICAgIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0Lm9uKCdlcnJvcicsICgpID0+IHt9KSwgbmV3IENsaWVudERlc3Ryb3llZEVycm9yKCkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjbGllbnRba0Nvbm5lY3RpbmddID0gZmFsc2VcblxuICAgIGFzc2VydChzb2NrZXQpXG5cbiAgICBjb25zdCBpc0gyID0gc29ja2V0LmFscG5Qcm90b2NvbCA9PT0gJ2gyJ1xuICAgIGlmIChpc0gyKSB7XG4gICAgICBpZiAoIWgyRXhwZXJpbWVudGFsV2FybmVkKSB7XG4gICAgICAgIGgyRXhwZXJpbWVudGFsV2FybmVkID0gdHJ1ZVxuICAgICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKCdIMiBzdXBwb3J0IGlzIGV4cGVyaW1lbnRhbCwgZXhwZWN0IHRoZW0gdG8gY2hhbmdlIGF0IGFueSB0aW1lLicsIHtcbiAgICAgICAgICBjb2RlOiAnVU5ESUNJLUgyJ1xuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzZXNzaW9uID0gaHR0cDIuY29ubmVjdChjbGllbnRba1VybF0sIHtcbiAgICAgICAgY3JlYXRlQ29ubmVjdGlvbjogKCkgPT4gc29ja2V0LFxuICAgICAgICBwZWVyTWF4Q29uY3VycmVudFN0cmVhbXM6IGNsaWVudFtrSFRUUDJTZXNzaW9uU3RhdGVdLm1heENvbmN1cnJlbnRTdHJlYW1zXG4gICAgICB9KVxuXG4gICAgICBjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gPSAnaDInXG4gICAgICBzZXNzaW9uW2tDbGllbnRdID0gY2xpZW50XG4gICAgICBzZXNzaW9uW2tTb2NrZXRdID0gc29ja2V0XG4gICAgICBzZXNzaW9uLm9uKCdlcnJvcicsIG9uSHR0cDJTZXNzaW9uRXJyb3IpXG4gICAgICBzZXNzaW9uLm9uKCdmcmFtZUVycm9yJywgb25IdHRwMkZyYW1lRXJyb3IpXG4gICAgICBzZXNzaW9uLm9uKCdlbmQnLCBvbkh0dHAyU2Vzc2lvbkVuZClcbiAgICAgIHNlc3Npb24ub24oJ2dvYXdheScsIG9uSFRUUDJHb0F3YXkpXG4gICAgICBzZXNzaW9uLm9uKCdjbG9zZScsIG9uU29ja2V0Q2xvc2UpXG4gICAgICBzZXNzaW9uLnVucmVmKClcblxuICAgICAgY2xpZW50W2tIVFRQMlNlc3Npb25dID0gc2Vzc2lvblxuICAgICAgc29ja2V0W2tIVFRQMlNlc3Npb25dID0gc2Vzc2lvblxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWxsaHR0cEluc3RhbmNlKSB7XG4gICAgICAgIGxsaHR0cEluc3RhbmNlID0gYXdhaXQgbGxodHRwUHJvbWlzZVxuICAgICAgICBsbGh0dHBQcm9taXNlID0gbnVsbFxuICAgICAgfVxuXG4gICAgICBzb2NrZXRba05vUmVmXSA9IGZhbHNlXG4gICAgICBzb2NrZXRba1dyaXRpbmddID0gZmFsc2VcbiAgICAgIHNvY2tldFtrUmVzZXRdID0gZmFsc2VcbiAgICAgIHNvY2tldFtrQmxvY2tpbmddID0gZmFsc2VcbiAgICAgIHNvY2tldFtrUGFyc2VyXSA9IG5ldyBQYXJzZXIoY2xpZW50LCBzb2NrZXQsIGxsaHR0cEluc3RhbmNlKVxuICAgIH1cblxuICAgIHNvY2tldFtrQ291bnRlcl0gPSAwXG4gICAgc29ja2V0W2tNYXhSZXF1ZXN0c10gPSBjbGllbnRba01heFJlcXVlc3RzXVxuICAgIHNvY2tldFtrQ2xpZW50XSA9IGNsaWVudFxuICAgIHNvY2tldFtrRXJyb3JdID0gbnVsbFxuXG4gICAgc29ja2V0XG4gICAgICAub24oJ2Vycm9yJywgb25Tb2NrZXRFcnJvcilcbiAgICAgIC5vbigncmVhZGFibGUnLCBvblNvY2tldFJlYWRhYmxlKVxuICAgICAgLm9uKCdlbmQnLCBvblNvY2tldEVuZClcbiAgICAgIC5vbignY2xvc2UnLCBvblNvY2tldENsb3NlKVxuXG4gICAgY2xpZW50W2tTb2NrZXRdID0gc29ja2V0XG5cbiAgICBpZiAoY2hhbm5lbHMuY29ubmVjdGVkLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5jb25uZWN0ZWQucHVibGlzaCh7XG4gICAgICAgIGNvbm5lY3RQYXJhbXM6IHtcbiAgICAgICAgICBob3N0LFxuICAgICAgICAgIGhvc3RuYW1lLFxuICAgICAgICAgIHByb3RvY29sLFxuICAgICAgICAgIHBvcnQsXG4gICAgICAgICAgc2VydmVybmFtZTogY2xpZW50W2tTZXJ2ZXJOYW1lXSxcbiAgICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgICB9LFxuICAgICAgICBjb25uZWN0b3I6IGNsaWVudFtrQ29ubmVjdG9yXSxcbiAgICAgICAgc29ja2V0XG4gICAgICB9KVxuICAgIH1cbiAgICBjbGllbnQuZW1pdCgnY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0pXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjbGllbnRba0Nvbm5lY3RpbmddID0gZmFsc2VcblxuICAgIGlmIChjaGFubmVscy5jb25uZWN0RXJyb3IuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmNvbm5lY3RFcnJvci5wdWJsaXNoKHtcbiAgICAgICAgY29ubmVjdFBhcmFtczoge1xuICAgICAgICAgIGhvc3QsXG4gICAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgICAgcG9ydCxcbiAgICAgICAgICBzZXJ2ZXJuYW1lOiBjbGllbnRba1NlcnZlck5hbWVdLFxuICAgICAgICAgIGxvY2FsQWRkcmVzczogY2xpZW50W2tMb2NhbEFkZHJlc3NdXG4gICAgICAgIH0sXG4gICAgICAgIGNvbm5lY3RvcjogY2xpZW50W2tDb25uZWN0b3JdLFxuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChlcnIuY29kZSA9PT0gJ0VSUl9UTFNfQ0VSVF9BTFROQU1FX0lOVkFMSUQnKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMClcbiAgICAgIHdoaWxlIChjbGllbnRba1BlbmRpbmddID4gMCAmJiBjbGllbnRba1F1ZXVlXVtjbGllbnRba1BlbmRpbmdJZHhdXS5zZXJ2ZXJuYW1lID09PSBjbGllbnRba1NlcnZlck5hbWVdKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1BlbmRpbmdJZHhdKytdXG4gICAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb25FcnJvcihjbGllbnQsIGVycilcbiAgICB9XG5cbiAgICBjbGllbnQuZW1pdCgnY29ubmVjdGlvbkVycm9yJywgY2xpZW50W2tVcmxdLCBbY2xpZW50XSwgZXJyKVxuICB9XG5cbiAgcmVzdW1lKGNsaWVudClcbn1cblxuZnVuY3Rpb24gZW1pdERyYWluIChjbGllbnQpIHtcbiAgY2xpZW50W2tOZWVkRHJhaW5dID0gMFxuICBjbGllbnQuZW1pdCgnZHJhaW4nLCBjbGllbnRba1VybF0sIFtjbGllbnRdKVxufVxuXG5mdW5jdGlvbiByZXN1bWUgKGNsaWVudCwgc3luYykge1xuICBpZiAoY2xpZW50W2tSZXN1bWluZ10gPT09IDIpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNsaWVudFtrUmVzdW1pbmddID0gMlxuXG4gIF9yZXN1bWUoY2xpZW50LCBzeW5jKVxuICBjbGllbnRba1Jlc3VtaW5nXSA9IDBcblxuICBpZiAoY2xpZW50W2tSdW5uaW5nSWR4XSA+IDI1Nikge1xuICAgIGNsaWVudFtrUXVldWVdLnNwbGljZSgwLCBjbGllbnRba1J1bm5pbmdJZHhdKVxuICAgIGNsaWVudFtrUGVuZGluZ0lkeF0gLT0gY2xpZW50W2tSdW5uaW5nSWR4XVxuICAgIGNsaWVudFtrUnVubmluZ0lkeF0gPSAwXG4gIH1cbn1cblxuZnVuY3Rpb24gX3Jlc3VtZSAoY2xpZW50LCBzeW5jKSB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKGNsaWVudC5kZXN0cm95ZWQpIHtcbiAgICAgIGFzc2VydChjbGllbnRba1BlbmRpbmddID09PSAwKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrQ2xvc2VkUmVzb2x2ZV0gJiYgIWNsaWVudFtrU2l6ZV0pIHtcbiAgICAgIGNsaWVudFtrQ2xvc2VkUmVzb2x2ZV0oKVxuICAgICAgY2xpZW50W2tDbG9zZWRSZXNvbHZlXSA9IG51bGxcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHNvY2tldCA9IGNsaWVudFtrU29ja2V0XVxuXG4gICAgaWYgKHNvY2tldCAmJiAhc29ja2V0LmRlc3Ryb3llZCAmJiBzb2NrZXQuYWxwblByb3RvY29sICE9PSAnaDInKSB7XG4gICAgICBpZiAoY2xpZW50W2tTaXplXSA9PT0gMCkge1xuICAgICAgICBpZiAoIXNvY2tldFtrTm9SZWZdICYmIHNvY2tldC51bnJlZikge1xuICAgICAgICAgIHNvY2tldC51bnJlZigpXG4gICAgICAgICAgc29ja2V0W2tOb1JlZl0gPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc29ja2V0W2tOb1JlZl0gJiYgc29ja2V0LnJlZikge1xuICAgICAgICBzb2NrZXQucmVmKClcbiAgICAgICAgc29ja2V0W2tOb1JlZl0gPSBmYWxzZVxuICAgICAgfVxuXG4gICAgICBpZiAoY2xpZW50W2tTaXplXSA9PT0gMCkge1xuICAgICAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXRUeXBlICE9PSBUSU1FT1VUX0lETEUpIHtcbiAgICAgICAgICBzb2NrZXRba1BhcnNlcl0uc2V0VGltZW91dChjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0sIFRJTUVPVVRfSURMRSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjbGllbnRba1J1bm5pbmddID4gMCAmJiBzb2NrZXRba1BhcnNlcl0uc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXRUeXBlICE9PSBUSU1FT1VUX0hFQURFUlMpIHtcbiAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICAgICAgICBjb25zdCBoZWFkZXJzVGltZW91dCA9IHJlcXVlc3QuaGVhZGVyc1RpbWVvdXQgIT0gbnVsbFxuICAgICAgICAgICAgPyByZXF1ZXN0LmhlYWRlcnNUaW1lb3V0XG4gICAgICAgICAgICA6IGNsaWVudFtrSGVhZGVyc1RpbWVvdXRdXG4gICAgICAgICAgc29ja2V0W2tQYXJzZXJdLnNldFRpbWVvdXQoaGVhZGVyc1RpbWVvdXQsIFRJTUVPVVRfSEVBREVSUylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjbGllbnRba0J1c3ldKSB7XG4gICAgICBjbGllbnRba05lZWREcmFpbl0gPSAyXG4gICAgfSBlbHNlIGlmIChjbGllbnRba05lZWREcmFpbl0gPT09IDIpIHtcbiAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgIGNsaWVudFtrTmVlZERyYWluXSA9IDFcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0RHJhaW4sIGNsaWVudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVtaXREcmFpbihjbGllbnQpXG4gICAgICB9XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmIChjbGllbnRba1BlbmRpbmddID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+PSAoY2xpZW50W2tQaXBlbGluaW5nXSB8fCAxKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUGVuZGluZ0lkeF1dXG5cbiAgICBpZiAoY2xpZW50W2tVcmxdLnByb3RvY29sID09PSAnaHR0cHM6JyAmJiBjbGllbnRba1NlcnZlck5hbWVdICE9PSByZXF1ZXN0LnNlcnZlcm5hbWUpIHtcbiAgICAgIGlmIChjbGllbnRba1J1bm5pbmddID4gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY2xpZW50W2tTZXJ2ZXJOYW1lXSA9IHJlcXVlc3Quc2VydmVybmFtZVxuXG4gICAgICBpZiAoc29ja2V0ICYmIHNvY2tldC5zZXJ2ZXJuYW1lICE9PSByZXF1ZXN0LnNlcnZlcm5hbWUpIHtcbiAgICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcignc2VydmVybmFtZSBjaGFuZ2VkJykpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjbGllbnRba0Nvbm5lY3RpbmddKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXNvY2tldCAmJiAhY2xpZW50W2tIVFRQMlNlc3Npb25dKSB7XG4gICAgICBjb25uZWN0KGNsaWVudClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChzb2NrZXQuZGVzdHJveWVkIHx8IHNvY2tldFtrV3JpdGluZ10gfHwgc29ja2V0W2tSZXNldF0gfHwgc29ja2V0W2tCbG9ja2luZ10pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjbGllbnRba1J1bm5pbmddID4gMCAmJiAhcmVxdWVzdC5pZGVtcG90ZW50KSB7XG4gICAgICAvLyBOb24taWRlbXBvdGVudCByZXF1ZXN0IGNhbm5vdCBiZSByZXRyaWVkLlxuICAgICAgLy8gRW5zdXJlIHRoYXQgbm8gb3RoZXIgcmVxdWVzdHMgYXJlIGluZmxpZ2h0IGFuZFxuICAgICAgLy8gY291bGQgY2F1c2UgZmFpbHVyZS5cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjbGllbnRba1J1bm5pbmddID4gMCAmJiAocmVxdWVzdC51cGdyYWRlIHx8IHJlcXVlc3QubWV0aG9kID09PSAnQ09OTkVDVCcpKSB7XG4gICAgICAvLyBEb24ndCBkaXNwYXRjaCBhbiB1cGdyYWRlIHVudGlsIGFsbCBwcmVjZWRpbmcgcmVxdWVzdHMgaGF2ZSBjb21wbGV0ZWQuXG4gICAgICAvLyBBIG1pc2JlaGF2aW5nIHNlcnZlciBtaWdodCB1cGdyYWRlIHRoZSBjb25uZWN0aW9uIGJlZm9yZSBhbGwgcGlwZWxpbmVkXG4gICAgICAvLyByZXF1ZXN0IGhhcyBjb21wbGV0ZWQuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgdXRpbC5ib2R5TGVuZ3RoKHJlcXVlc3QuYm9keSkgIT09IDAgJiZcbiAgICAgICh1dGlsLmlzU3RyZWFtKHJlcXVlc3QuYm9keSkgfHwgdXRpbC5pc0FzeW5jSXRlcmFibGUocmVxdWVzdC5ib2R5KSkpIHtcbiAgICAgIC8vIFJlcXVlc3Qgd2l0aCBzdHJlYW0gb3IgaXRlcmF0b3IgYm9keSBjYW4gZXJyb3Igd2hpbGUgb3RoZXIgcmVxdWVzdHNcbiAgICAgIC8vIGFyZSBpbmZsaWdodCBhbmQgaW5kaXJlY3RseSBlcnJvciB0aG9zZSBhcyB3ZWxsLlxuICAgICAgLy8gRW5zdXJlIHRoaXMgZG9lc24ndCBoYXBwZW4gYnkgd2FpdGluZyBmb3IgaW5mbGlnaHRcbiAgICAgIC8vIHRvIGNvbXBsZXRlIGJlZm9yZSBkaXNwYXRjaGluZy5cblxuICAgICAgLy8gUmVxdWVzdCB3aXRoIHN0cmVhbSBvciBpdGVyYXRvciBib2R5IGNhbm5vdCBiZSByZXRyaWVkLlxuICAgICAgLy8gRW5zdXJlIHRoYXQgbm8gb3RoZXIgcmVxdWVzdHMgYXJlIGluZmxpZ2h0IGFuZFxuICAgICAgLy8gY291bGQgY2F1c2UgZmFpbHVyZS5cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghcmVxdWVzdC5hYm9ydGVkICYmIHdyaXRlKGNsaWVudCwgcmVxdWVzdCkpIHtcbiAgICAgIGNsaWVudFtrUGVuZGluZ0lkeF0rK1xuICAgIH0gZWxzZSB7XG4gICAgICBjbGllbnRba1F1ZXVlXS5zcGxpY2UoY2xpZW50W2tQZW5kaW5nSWR4XSwgMSlcbiAgICB9XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzcyMzAjc2VjdGlvbi0zLjMuMlxuZnVuY3Rpb24gc2hvdWxkU2VuZENvbnRlbnRMZW5ndGggKG1ldGhvZCkge1xuICByZXR1cm4gbWV0aG9kICE9PSAnR0VUJyAmJiBtZXRob2QgIT09ICdIRUFEJyAmJiBtZXRob2QgIT09ICdPUFRJT05TJyAmJiBtZXRob2QgIT09ICdUUkFDRScgJiYgbWV0aG9kICE9PSAnQ09OTkVDVCdcbn1cblxuZnVuY3Rpb24gd3JpdGUgKGNsaWVudCwgcmVxdWVzdCkge1xuICBpZiAoY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID09PSAnaDInKSB7XG4gICAgd3JpdGVIMihjbGllbnQsIGNsaWVudFtrSFRUUDJTZXNzaW9uXSwgcmVxdWVzdClcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHsgYm9keSwgbWV0aG9kLCBwYXRoLCBob3N0LCB1cGdyYWRlLCBoZWFkZXJzLCBibG9ja2luZywgcmVzZXQgfSA9IHJlcXVlc3RcblxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy4xXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjJcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuNVxuXG4gIC8vIFNlbmRpbmcgYSBwYXlsb2FkIGJvZHkgb24gYSByZXF1ZXN0IHRoYXQgZG9lcyBub3RcbiAgLy8gZXhwZWN0IGl0IGNhbiBjYXVzZSB1bmRlZmluZWQgYmVoYXZpb3Igb24gc29tZVxuICAvLyBzZXJ2ZXJzIGFuZCBjb3JydXB0IGNvbm5lY3Rpb24gc3RhdGUuIERvIG5vdFxuICAvLyByZS11c2UgdGhlIGNvbm5lY3Rpb24gZm9yIGZ1cnRoZXIgcmVxdWVzdHMuXG5cbiAgY29uc3QgZXhwZWN0c1BheWxvYWQgPSAoXG4gICAgbWV0aG9kID09PSAnUFVUJyB8fFxuICAgIG1ldGhvZCA9PT0gJ1BPU1QnIHx8XG4gICAgbWV0aG9kID09PSAnUEFUQ0gnXG4gIClcblxuICBpZiAoYm9keSAmJiB0eXBlb2YgYm9keS5yZWFkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gVHJ5IHRvIHJlYWQgRU9GIGluIG9yZGVyIHRvIGdldCBsZW5ndGguXG4gICAgYm9keS5yZWFkKDApXG4gIH1cblxuICBjb25zdCBib2R5TGVuZ3RoID0gdXRpbC5ib2R5TGVuZ3RoKGJvZHkpXG5cbiAgbGV0IGNvbnRlbnRMZW5ndGggPSBib2R5TGVuZ3RoXG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT09IG51bGwpIHtcbiAgICBjb250ZW50TGVuZ3RoID0gcmVxdWVzdC5jb250ZW50TGVuZ3RoXG4gIH1cblxuICBpZiAoY29udGVudExlbmd0aCA9PT0gMCAmJiAhZXhwZWN0c1BheWxvYWQpIHtcbiAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMy4yXG4gICAgLy8gQSB1c2VyIGFnZW50IFNIT1VMRCBOT1Qgc2VuZCBhIENvbnRlbnQtTGVuZ3RoIGhlYWRlciBmaWVsZCB3aGVuXG4gICAgLy8gdGhlIHJlcXVlc3QgbWVzc2FnZSBkb2VzIG5vdCBjb250YWluIGEgcGF5bG9hZCBib2R5IGFuZCB0aGUgbWV0aG9kXG4gICAgLy8gc2VtYW50aWNzIGRvIG5vdCBhbnRpY2lwYXRlIHN1Y2ggYSBib2R5LlxuXG4gICAgY29udGVudExlbmd0aCA9IG51bGxcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8yMDQ2XG4gIC8vIEEgdXNlciBhZ2VudCBtYXkgc2VuZCBhIENvbnRlbnQtTGVuZ3RoIGhlYWRlciB3aXRoIDAgdmFsdWUsIHRoaXMgc2hvdWxkIGJlIGFsbG93ZWQuXG4gIGlmIChzaG91bGRTZW5kQ29udGVudExlbmd0aChtZXRob2QpICYmIGNvbnRlbnRMZW5ndGggPiAwICYmIHJlcXVlc3QuY29udGVudExlbmd0aCAhPT0gbnVsbCAmJiByZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT09IGNvbnRlbnRMZW5ndGgpIHtcbiAgICBpZiAoY2xpZW50W2tTdHJpY3RDb250ZW50TGVuZ3RoXSkge1xuICAgICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgbmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcHJvY2Vzcy5lbWl0V2FybmluZyhuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gIH1cblxuICBjb25zdCBzb2NrZXQgPSBjbGllbnRba1NvY2tldF1cblxuICB0cnkge1xuICAgIHJlcXVlc3Qub25Db25uZWN0KChlcnIpID0+IHtcbiAgICAgIGlmIChyZXF1ZXN0LmFib3J0ZWQgfHwgcmVxdWVzdC5jb21wbGV0ZWQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVyciB8fCBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpKVxuXG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdhYm9ydGVkJykpXG4gICAgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICB9XG5cbiAgaWYgKHJlcXVlc3QuYWJvcnRlZCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKG1ldGhvZCA9PT0gJ0hFQUQnKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21jb2xsaW5hL3VuZGljaS9pc3N1ZXMvMjU4XG4gICAgLy8gQ2xvc2UgYWZ0ZXIgYSBIRUFEIHJlcXVlc3QgdG8gaW50ZXJvcCB3aXRoIG1pc2JlaGF2aW5nIHNlcnZlcnNcbiAgICAvLyB0aGF0IG1heSBzZW5kIGEgYm9keSBpbiB0aGUgcmVzcG9uc2UuXG5cbiAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgfVxuXG4gIGlmICh1cGdyYWRlIHx8IG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgLy8gT24gQ09OTkVDVCBvciB1cGdyYWRlLCBibG9jayBwaXBlbGluZSBmcm9tIGRpc3BhdGNoaW5nIGZ1cnRoZXJcbiAgICAvLyByZXF1ZXN0cyBvbiB0aGlzIGNvbm5lY3Rpb24uXG5cbiAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgfVxuXG4gIGlmIChyZXNldCAhPSBudWxsKSB7XG4gICAgc29ja2V0W2tSZXNldF0gPSByZXNldFxuICB9XG5cbiAgaWYgKGNsaWVudFtrTWF4UmVxdWVzdHNdICYmIHNvY2tldFtrQ291bnRlcl0rKyA+PSBjbGllbnRba01heFJlcXVlc3RzXSkge1xuICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICB9XG5cbiAgaWYgKGJsb2NraW5nKSB7XG4gICAgc29ja2V0W2tCbG9ja2luZ10gPSB0cnVlXG4gIH1cblxuICBsZXQgaGVhZGVyID0gYCR7bWV0aG9kfSAke3BhdGh9IEhUVFAvMS4xXFxyXFxuYFxuXG4gIGlmICh0eXBlb2YgaG9zdCA9PT0gJ3N0cmluZycpIHtcbiAgICBoZWFkZXIgKz0gYGhvc3Q6ICR7aG9zdH1cXHJcXG5gXG4gIH0gZWxzZSB7XG4gICAgaGVhZGVyICs9IGNsaWVudFtrSG9zdEhlYWRlcl1cbiAgfVxuXG4gIGlmICh1cGdyYWRlKSB7XG4gICAgaGVhZGVyICs9IGBjb25uZWN0aW9uOiB1cGdyYWRlXFxyXFxudXBncmFkZTogJHt1cGdyYWRlfVxcclxcbmBcbiAgfSBlbHNlIGlmIChjbGllbnRba1BpcGVsaW5pbmddICYmICFzb2NrZXRba1Jlc2V0XSkge1xuICAgIGhlYWRlciArPSAnY29ubmVjdGlvbjoga2VlcC1hbGl2ZVxcclxcbidcbiAgfSBlbHNlIHtcbiAgICBoZWFkZXIgKz0gJ2Nvbm5lY3Rpb246IGNsb3NlXFxyXFxuJ1xuICB9XG5cbiAgaWYgKGhlYWRlcnMpIHtcbiAgICBoZWFkZXIgKz0gaGVhZGVyc1xuICB9XG5cbiAgaWYgKGNoYW5uZWxzLnNlbmRIZWFkZXJzLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgY2hhbm5lbHMuc2VuZEhlYWRlcnMucHVibGlzaCh7IHJlcXVlc3QsIGhlYWRlcnM6IGhlYWRlciwgc29ja2V0IH0pXG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogYXNzZXJ0aW9uICovXG4gIGlmICghYm9keSB8fCBib2R5TGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKGNvbnRlbnRMZW5ndGggPT09IDApIHtcbiAgICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9Y29udGVudC1sZW5ndGg6IDBcXHJcXG5cXHJcXG5gLCAnbGF0aW4xJylcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggPT09IG51bGwsICdubyBib2R5IG11c3Qgbm90IGhhdmUgY29udGVudCBsZW5ndGgnKVxuICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1cXHJcXG5gLCAnbGF0aW4xJylcbiAgICB9XG4gICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgfSBlbHNlIGlmICh1dGlsLmlzQnVmZmVyKGJvZHkpKSB7XG4gICAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggPT09IGJvZHkuYnl0ZUxlbmd0aCwgJ2J1ZmZlciBib2R5IG11c3QgaGF2ZSBjb250ZW50IGxlbmd0aCcpXG5cbiAgICBzb2NrZXQuY29yaygpXG4gICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1jb250ZW50LWxlbmd0aDogJHtjb250ZW50TGVuZ3RofVxcclxcblxcclxcbmAsICdsYXRpbjEnKVxuICAgIHNvY2tldC53cml0ZShib2R5KVxuICAgIHNvY2tldC51bmNvcmsoKVxuICAgIHJlcXVlc3Qub25Cb2R5U2VudChib2R5KVxuICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG4gICAgaWYgKCFleHBlY3RzUGF5bG9hZCkge1xuICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgfVxuICB9IGVsc2UgaWYgKHV0aWwuaXNCbG9iTGlrZShib2R5KSkge1xuICAgIGlmICh0eXBlb2YgYm9keS5zdHJlYW0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdyaXRlSXRlcmFibGUoeyBib2R5OiBib2R5LnN0cmVhbSgpLCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB3cml0ZUJsb2IoeyBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KVxuICAgIH1cbiAgfSBlbHNlIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgd3JpdGVTdHJlYW0oeyBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KVxuICB9IGVsc2UgaWYgKHV0aWwuaXNJdGVyYWJsZShib2R5KSkge1xuICAgIHdyaXRlSXRlcmFibGUoeyBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KVxuICB9IGVsc2Uge1xuICAgIGFzc2VydChmYWxzZSlcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIHdyaXRlSDIgKGNsaWVudCwgc2Vzc2lvbiwgcmVxdWVzdCkge1xuICBjb25zdCB7IGJvZHksIG1ldGhvZCwgcGF0aCwgaG9zdCwgdXBncmFkZSwgZXhwZWN0Q29udGludWUsIHNpZ25hbCwgaGVhZGVyczogcmVxSGVhZGVycyB9ID0gcmVxdWVzdFxuXG4gIGxldCBoZWFkZXJzXG4gIGlmICh0eXBlb2YgcmVxSGVhZGVycyA9PT0gJ3N0cmluZycpIGhlYWRlcnMgPSBSZXF1ZXN0W2tIVFRQMkNvcHlIZWFkZXJzXShyZXFIZWFkZXJzLnRyaW0oKSlcbiAgZWxzZSBoZWFkZXJzID0gcmVxSGVhZGVyc1xuXG4gIGlmICh1cGdyYWRlKSB7XG4gICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgbmV3IEVycm9yKCdVcGdyYWRlIG5vdCBzdXBwb3J0ZWQgZm9yIEgyJykpXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICB0cnkge1xuICAgIC8vIFRPRE8oSFRUUC8yKTogU2hvdWxkIHdlIGNhbGwgb25Db25uZWN0IGltbWVkaWF0ZWx5IG9yIG9uIHN0cmVhbSByZWFkeSBldmVudD9cbiAgICByZXF1ZXN0Lm9uQ29ubmVjdCgoZXJyKSA9PiB7XG4gICAgICBpZiAocmVxdWVzdC5hYm9ydGVkIHx8IHJlcXVlc3QuY29tcGxldGVkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIgfHwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcbiAgICB9KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gIH1cblxuICBpZiAocmVxdWVzdC5hYm9ydGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKiogQHR5cGUge2ltcG9ydCgnbm9kZTpodHRwMicpLkNsaWVudEh0dHAyU3RyZWFtfSAqL1xuICBsZXQgc3RyZWFtXG4gIGNvbnN0IGgyU3RhdGUgPSBjbGllbnRba0hUVFAyU2Vzc2lvblN0YXRlXVxuXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX0FVVEhPUklUWV0gPSBob3N0IHx8IGNsaWVudFtrSG9zdF1cbiAgaGVhZGVyc1tIVFRQMl9IRUFERVJfTUVUSE9EXSA9IG1ldGhvZFxuXG4gIGlmIChtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgIHNlc3Npb24ucmVmKClcbiAgICAvLyB3ZSBhcmUgYWxyZWFkeSBjb25uZWN0ZWQsIHN0cmVhbXMgYXJlIHBlbmRpbmcsIGZpcnN0IHJlcXVlc3RcbiAgICAvLyB3aWxsIGNyZWF0ZSBhIG5ldyBzdHJlYW0uIFdlIHRyaWdnZXIgYSByZXF1ZXN0IHRvIGNyZWF0ZSB0aGUgc3RyZWFtIGFuZCB3YWl0IHVudGlsXG4gICAgLy8gYHJlYWR5YCBldmVudCBpcyB0cmlnZ2VyZWRcbiAgICAvLyBXZSBkaXNhYmxlZCBlbmRTdHJlYW0gdG8gYWxsb3cgdGhlIHVzZXIgdG8gd3JpdGUgdG8gdGhlIHN0cmVhbVxuICAgIHN0cmVhbSA9IHNlc3Npb24ucmVxdWVzdChoZWFkZXJzLCB7IGVuZFN0cmVhbTogZmFsc2UsIHNpZ25hbCB9KVxuXG4gICAgaWYgKHN0cmVhbS5pZCAmJiAhc3RyZWFtLnBlbmRpbmcpIHtcbiAgICAgIHJlcXVlc3Qub25VcGdyYWRlKG51bGwsIG51bGwsIHN0cmVhbSlcbiAgICAgICsraDJTdGF0ZS5vcGVuU3RyZWFtc1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHJlYW0ub25jZSgncmVhZHknLCAoKSA9PiB7XG4gICAgICAgIHJlcXVlc3Qub25VcGdyYWRlKG51bGwsIG51bGwsIHN0cmVhbSlcbiAgICAgICAgKytoMlN0YXRlLm9wZW5TdHJlYW1zXG4gICAgICB9KVxuICAgIH1cblxuICAgIHN0cmVhbS5vbmNlKCdjbG9zZScsICgpID0+IHtcbiAgICAgIGgyU3RhdGUub3BlblN0cmVhbXMgLT0gMVxuICAgICAgLy8gVE9ETyhIVFRQLzIpOiB1bnJlZiBvbmx5IGlmIGN1cnJlbnQgc3RyZWFtcyBjb3VudCBpcyAwXG4gICAgICBpZiAoaDJTdGF0ZS5vcGVuU3RyZWFtcyA9PT0gMCkgc2Vzc2lvbi51bnJlZigpXG4gICAgfSlcblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzU0MCNzZWN0aW9uLTguM1xuICAvLyA6cGF0aCBhbmQgOnNjaGVtZSBoZWFkZXJzIG11c3QgYmUgb21pdGVkIHdoZW4gc2VuZGluZyBDT05ORUNUXG5cbiAgaGVhZGVyc1tIVFRQMl9IRUFERVJfUEFUSF0gPSBwYXRoXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX1NDSEVNRV0gPSAnaHR0cHMnXG5cbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuMVxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy4yXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjVcblxuICAvLyBTZW5kaW5nIGEgcGF5bG9hZCBib2R5IG9uIGEgcmVxdWVzdCB0aGF0IGRvZXMgbm90XG4gIC8vIGV4cGVjdCBpdCBjYW4gY2F1c2UgdW5kZWZpbmVkIGJlaGF2aW9yIG9uIHNvbWVcbiAgLy8gc2VydmVycyBhbmQgY29ycnVwdCBjb25uZWN0aW9uIHN0YXRlLiBEbyBub3RcbiAgLy8gcmUtdXNlIHRoZSBjb25uZWN0aW9uIGZvciBmdXJ0aGVyIHJlcXVlc3RzLlxuXG4gIGNvbnN0IGV4cGVjdHNQYXlsb2FkID0gKFxuICAgIG1ldGhvZCA9PT0gJ1BVVCcgfHxcbiAgICBtZXRob2QgPT09ICdQT1NUJyB8fFxuICAgIG1ldGhvZCA9PT0gJ1BBVENIJ1xuICApXG5cbiAgaWYgKGJvZHkgJiYgdHlwZW9mIGJvZHkucmVhZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIFRyeSB0byByZWFkIEVPRiBpbiBvcmRlciB0byBnZXQgbGVuZ3RoLlxuICAgIGJvZHkucmVhZCgwKVxuICB9XG5cbiAgbGV0IGNvbnRlbnRMZW5ndGggPSB1dGlsLmJvZHlMZW5ndGgoYm9keSlcblxuICBpZiAoY29udGVudExlbmd0aCA9PSBudWxsKSB7XG4gICAgY29udGVudExlbmd0aCA9IHJlcXVlc3QuY29udGVudExlbmd0aFxuICB9XG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT09IDAgfHwgIWV4cGVjdHNQYXlsb2FkKSB7XG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjMuMlxuICAgIC8vIEEgdXNlciBhZ2VudCBTSE9VTEQgTk9UIHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgZmllbGQgd2hlblxuICAgIC8vIHRoZSByZXF1ZXN0IG1lc3NhZ2UgZG9lcyBub3QgY29udGFpbiBhIHBheWxvYWQgYm9keSBhbmQgdGhlIG1ldGhvZFxuICAgIC8vIHNlbWFudGljcyBkbyBub3QgYW50aWNpcGF0ZSBzdWNoIGEgYm9keS5cblxuICAgIGNvbnRlbnRMZW5ndGggPSBudWxsXG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjA0NlxuICAvLyBBIHVzZXIgYWdlbnQgbWF5IHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgd2l0aCAwIHZhbHVlLCB0aGlzIHNob3VsZCBiZSBhbGxvd2VkLlxuICBpZiAoc2hvdWxkU2VuZENvbnRlbnRMZW5ndGgobWV0aG9kKSAmJiBjb250ZW50TGVuZ3RoID4gMCAmJiByZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT0gbnVsbCAmJiByZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT09IGNvbnRlbnRMZW5ndGgpIHtcbiAgICBpZiAoY2xpZW50W2tTdHJpY3RDb250ZW50TGVuZ3RoXSkge1xuICAgICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgbmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcHJvY2Vzcy5lbWl0V2FybmluZyhuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gIH1cblxuICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsKSB7XG4gICAgYXNzZXJ0KGJvZHksICdubyBib2R5IG11c3Qgbm90IGhhdmUgY29udGVudCBsZW5ndGgnKVxuICAgIGhlYWRlcnNbSFRUUDJfSEVBREVSX0NPTlRFTlRfTEVOR1RIXSA9IGAke2NvbnRlbnRMZW5ndGh9YFxuICB9XG5cbiAgc2Vzc2lvbi5yZWYoKVxuXG4gIGNvbnN0IHNob3VsZEVuZFN0cmVhbSA9IG1ldGhvZCA9PT0gJ0dFVCcgfHwgbWV0aG9kID09PSAnSEVBRCdcbiAgaWYgKGV4cGVjdENvbnRpbnVlKSB7XG4gICAgaGVhZGVyc1tIVFRQMl9IRUFERVJfRVhQRUNUXSA9ICcxMDAtY29udGludWUnXG4gICAgc3RyZWFtID0gc2Vzc2lvbi5yZXF1ZXN0KGhlYWRlcnMsIHsgZW5kU3RyZWFtOiBzaG91bGRFbmRTdHJlYW0sIHNpZ25hbCB9KVxuXG4gICAgc3RyZWFtLm9uY2UoJ2NvbnRpbnVlJywgd3JpdGVCb2R5SDIpXG4gIH0gZWxzZSB7XG4gICAgc3RyZWFtID0gc2Vzc2lvbi5yZXF1ZXN0KGhlYWRlcnMsIHtcbiAgICAgIGVuZFN0cmVhbTogc2hvdWxkRW5kU3RyZWFtLFxuICAgICAgc2lnbmFsXG4gICAgfSlcbiAgICB3cml0ZUJvZHlIMigpXG4gIH1cblxuICAvLyBJbmNyZW1lbnQgY291bnRlciBhcyB3ZSBoYXZlIG5ldyBzZXZlcmFsIHN0cmVhbXMgb3BlblxuICArK2gyU3RhdGUub3BlblN0cmVhbXNcblxuICBzdHJlYW0ub25jZSgncmVzcG9uc2UnLCBoZWFkZXJzID0+IHtcbiAgICBjb25zdCB7IFtIVFRQMl9IRUFERVJfU1RBVFVTXTogc3RhdHVzQ29kZSwgLi4ucmVhbEhlYWRlcnMgfSA9IGhlYWRlcnNcblxuICAgIGlmIChyZXF1ZXN0Lm9uSGVhZGVycyhOdW1iZXIoc3RhdHVzQ29kZSksIHJlYWxIZWFkZXJzLCBzdHJlYW0ucmVzdW1lLmJpbmQoc3RyZWFtKSwgJycpID09PSBmYWxzZSkge1xuICAgICAgc3RyZWFtLnBhdXNlKClcbiAgICB9XG4gIH0pXG5cbiAgc3RyZWFtLm9uY2UoJ2VuZCcsICgpID0+IHtcbiAgICByZXF1ZXN0Lm9uQ29tcGxldGUoW10pXG4gIH0pXG5cbiAgc3RyZWFtLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgaWYgKHJlcXVlc3Qub25EYXRhKGNodW5rKSA9PT0gZmFsc2UpIHtcbiAgICAgIHN0cmVhbS5wYXVzZSgpXG4gICAgfVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdjbG9zZScsICgpID0+IHtcbiAgICBoMlN0YXRlLm9wZW5TdHJlYW1zIC09IDFcbiAgICAvLyBUT0RPKEhUVFAvMik6IHVucmVmIG9ubHkgaWYgY3VycmVudCBzdHJlYW1zIGNvdW50IGlzIDBcbiAgICBpZiAoaDJTdGF0ZS5vcGVuU3RyZWFtcyA9PT0gMCkge1xuICAgICAgc2Vzc2lvbi51bnJlZigpXG4gICAgfVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICBpZiAoY2xpZW50W2tIVFRQMlNlc3Npb25dICYmICFjbGllbnRba0hUVFAyU2Vzc2lvbl0uZGVzdHJveWVkICYmICF0aGlzLmNsb3NlZCAmJiAhdGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgIGgyU3RhdGUuc3RyZWFtcyAtPSAxXG4gICAgICB1dGlsLmRlc3Ryb3koc3RyZWFtLCBlcnIpXG4gICAgfVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdmcmFtZUVycm9yJywgKHR5cGUsIGNvZGUpID0+IHtcbiAgICBjb25zdCBlcnIgPSBuZXcgSW5mb3JtYXRpb25hbEVycm9yKGBIVFRQLzI6IFwiZnJhbWVFcnJvclwiIHJlY2VpdmVkIC0gdHlwZSAke3R5cGV9LCBjb2RlICR7Y29kZX1gKVxuICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcblxuICAgIGlmIChjbGllbnRba0hUVFAyU2Vzc2lvbl0gJiYgIWNsaWVudFtrSFRUUDJTZXNzaW9uXS5kZXN0cm95ZWQgJiYgIXRoaXMuY2xvc2VkICYmICF0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgaDJTdGF0ZS5zdHJlYW1zIC09IDFcbiAgICAgIHV0aWwuZGVzdHJveShzdHJlYW0sIGVycilcbiAgICB9XG4gIH0pXG5cbiAgLy8gc3RyZWFtLm9uKCdhYm9ydGVkJywgKCkgPT4ge1xuICAvLyAgIC8vIFRPRE8oSFRUUC8yKTogU3VwcG9ydCBhYm9ydGVkXG4gIC8vIH0pXG5cbiAgLy8gc3RyZWFtLm9uKCd0aW1lb3V0JywgKCkgPT4ge1xuICAvLyAgIC8vIFRPRE8oSFRUUC8yKTogU3VwcG9ydCB0aW1lb3V0XG4gIC8vIH0pXG5cbiAgLy8gc3RyZWFtLm9uKCdwdXNoJywgaGVhZGVycyA9PiB7XG4gIC8vICAgLy8gVE9ETyhIVFRQLzIpOiBTdXBwb3IgcHVzaFxuICAvLyB9KVxuXG4gIC8vIHN0cmVhbS5vbigndHJhaWxlcnMnLCBoZWFkZXJzID0+IHtcbiAgLy8gICAvLyBUT0RPKEhUVFAvMik6IFN1cHBvcnQgdHJhaWxlcnNcbiAgLy8gfSlcblxuICByZXR1cm4gdHJ1ZVxuXG4gIGZ1bmN0aW9uIHdyaXRlQm9keUgyICgpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogYXNzZXJ0aW9uICovXG4gICAgaWYgKCFib2R5KSB7XG4gICAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuICAgIH0gZWxzZSBpZiAodXRpbC5pc0J1ZmZlcihib2R5KSkge1xuICAgICAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggPT09IGJvZHkuYnl0ZUxlbmd0aCwgJ2J1ZmZlciBib2R5IG11c3QgaGF2ZSBjb250ZW50IGxlbmd0aCcpXG4gICAgICBzdHJlYW0uY29yaygpXG4gICAgICBzdHJlYW0ud3JpdGUoYm9keSlcbiAgICAgIHN0cmVhbS51bmNvcmsoKVxuICAgICAgc3RyZWFtLmVuZCgpXG4gICAgICByZXF1ZXN0Lm9uQm9keVNlbnQoYm9keSlcbiAgICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzQmxvYkxpa2UoYm9keSkpIHtcbiAgICAgIGlmICh0eXBlb2YgYm9keS5zdHJlYW0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd3JpdGVJdGVyYWJsZSh7XG4gICAgICAgICAgY2xpZW50LFxuICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgICBoMnN0cmVhbTogc3RyZWFtLFxuICAgICAgICAgIGV4cGVjdHNQYXlsb2FkLFxuICAgICAgICAgIGJvZHk6IGJvZHkuc3RyZWFtKCksXG4gICAgICAgICAgc29ja2V0OiBjbGllbnRba1NvY2tldF0sXG4gICAgICAgICAgaGVhZGVyOiAnJ1xuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd3JpdGVCbG9iKHtcbiAgICAgICAgICBib2R5LFxuICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgICAgZXhwZWN0c1BheWxvYWQsXG4gICAgICAgICAgaDJzdHJlYW06IHN0cmVhbSxcbiAgICAgICAgICBoZWFkZXI6ICcnLFxuICAgICAgICAgIHNvY2tldDogY2xpZW50W2tTb2NrZXRdXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICB3cml0ZVN0cmVhbSh7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGNsaWVudCxcbiAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgZXhwZWN0c1BheWxvYWQsXG4gICAgICAgIHNvY2tldDogY2xpZW50W2tTb2NrZXRdLFxuICAgICAgICBoMnN0cmVhbTogc3RyZWFtLFxuICAgICAgICBoZWFkZXI6ICcnXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAodXRpbC5pc0l0ZXJhYmxlKGJvZHkpKSB7XG4gICAgICB3cml0ZUl0ZXJhYmxlKHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgY2xpZW50LFxuICAgICAgICByZXF1ZXN0LFxuICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICBleHBlY3RzUGF5bG9hZCxcbiAgICAgICAgaGVhZGVyOiAnJyxcbiAgICAgICAgaDJzdHJlYW06IHN0cmVhbSxcbiAgICAgICAgc29ja2V0OiBjbGllbnRba1NvY2tldF1cbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChmYWxzZSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd3JpdGVTdHJlYW0gKHsgaDJzdHJlYW0sIGJvZHksIGNsaWVudCwgcmVxdWVzdCwgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBoZWFkZXIsIGV4cGVjdHNQYXlsb2FkIH0pIHtcbiAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggIT09IDAgfHwgY2xpZW50W2tSdW5uaW5nXSA9PT0gMCwgJ3N0cmVhbSBib2R5IGNhbm5vdCBiZSBwaXBlbGluZWQnKVxuXG4gIGlmIChjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gPT09ICdoMicpIHtcbiAgICAvLyBGb3IgSFRUUC8yLCBpcyBlbm91Z2ggdG8gcGlwZSB0aGUgc3RyZWFtXG4gICAgY29uc3QgcGlwZSA9IHBpcGVsaW5lKFxuICAgICAgYm9keSxcbiAgICAgIGgyc3RyZWFtLFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgdXRpbC5kZXN0cm95KGJvZHksIGVycilcbiAgICAgICAgICB1dGlsLmRlc3Ryb3koaDJzdHJlYW0sIGVycilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKVxuXG4gICAgcGlwZS5vbignZGF0YScsIG9uUGlwZURhdGEpXG4gICAgcGlwZS5vbmNlKCdlbmQnLCAoKSA9PiB7XG4gICAgICBwaXBlLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25QaXBlRGF0YSlcbiAgICAgIHV0aWwuZGVzdHJveShwaXBlKVxuICAgIH0pXG5cbiAgICBmdW5jdGlvbiBvblBpcGVEYXRhIChjaHVuaykge1xuICAgICAgcmVxdWVzdC5vbkJvZHlTZW50KGNodW5rKVxuICAgIH1cblxuICAgIHJldHVyblxuICB9XG5cbiAgbGV0IGZpbmlzaGVkID0gZmFsc2VcblxuICBjb25zdCB3cml0ZXIgPSBuZXcgQXN5bmNXcml0ZXIoeyBzb2NrZXQsIHJlcXVlc3QsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgZXhwZWN0c1BheWxvYWQsIGhlYWRlciB9KVxuXG4gIGNvbnN0IG9uRGF0YSA9IGZ1bmN0aW9uIChjaHVuaykge1xuICAgIGlmIChmaW5pc2hlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghd3JpdGVyLndyaXRlKGNodW5rKSAmJiB0aGlzLnBhdXNlKSB7XG4gICAgICAgIHRoaXMucGF1c2UoKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdXRpbC5kZXN0cm95KHRoaXMsIGVycilcbiAgICB9XG4gIH1cbiAgY29uc3Qgb25EcmFpbiA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChib2R5LnJlc3VtZSkge1xuICAgICAgYm9keS5yZXN1bWUoKVxuICAgIH1cbiAgfVxuICBjb25zdCBvbkFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChmaW5pc2hlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IGVyciA9IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBvbkZpbmlzaGVkKGVycikpXG4gIH1cbiAgY29uc3Qgb25GaW5pc2hlZCA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGZpbmlzaGVkID0gdHJ1ZVxuXG4gICAgYXNzZXJ0KHNvY2tldC5kZXN0cm95ZWQgfHwgKHNvY2tldFtrV3JpdGluZ10gJiYgY2xpZW50W2tSdW5uaW5nXSA8PSAxKSlcblxuICAgIHNvY2tldFxuICAgICAgLm9mZignZHJhaW4nLCBvbkRyYWluKVxuICAgICAgLm9mZignZXJyb3InLCBvbkZpbmlzaGVkKVxuXG4gICAgYm9keVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25EYXRhKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbkZpbmlzaGVkKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uRmluaXNoZWQpXG4gICAgICAucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25BYm9ydClcblxuICAgIGlmICghZXJyKSB7XG4gICAgICB0cnkge1xuICAgICAgICB3cml0ZXIuZW5kKClcbiAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgIGVyciA9IGVyXG4gICAgICB9XG4gICAgfVxuXG4gICAgd3JpdGVyLmRlc3Ryb3koZXJyKVxuXG4gICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgIT09ICdVTkRfRVJSX0lORk8nIHx8IGVyci5tZXNzYWdlICE9PSAncmVzZXQnKSkge1xuICAgICAgdXRpbC5kZXN0cm95KGJvZHksIGVycilcbiAgICB9IGVsc2Uge1xuICAgICAgdXRpbC5kZXN0cm95KGJvZHkpXG4gICAgfVxuICB9XG5cbiAgYm9keVxuICAgIC5vbignZGF0YScsIG9uRGF0YSlcbiAgICAub24oJ2VuZCcsIG9uRmluaXNoZWQpXG4gICAgLm9uKCdlcnJvcicsIG9uRmluaXNoZWQpXG4gICAgLm9uKCdjbG9zZScsIG9uQWJvcnQpXG5cbiAgaWYgKGJvZHkucmVzdW1lKSB7XG4gICAgYm9keS5yZXN1bWUoKVxuICB9XG5cbiAgc29ja2V0XG4gICAgLm9uKCdkcmFpbicsIG9uRHJhaW4pXG4gICAgLm9uKCdlcnJvcicsIG9uRmluaXNoZWQpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlQmxvYiAoeyBoMnN0cmVhbSwgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSkge1xuICBhc3NlcnQoY29udGVudExlbmd0aCA9PT0gYm9keS5zaXplLCAnYmxvYiBib2R5IG11c3QgaGF2ZSBjb250ZW50IGxlbmd0aCcpXG5cbiAgY29uc3QgaXNIMiA9IGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSA9PT0gJ2gyJ1xuICB0cnkge1xuICAgIGlmIChjb250ZW50TGVuZ3RoICE9IG51bGwgJiYgY29udGVudExlbmd0aCAhPT0gYm9keS5zaXplKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKClcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShhd2FpdCBib2R5LmFycmF5QnVmZmVyKCkpXG5cbiAgICBpZiAoaXNIMikge1xuICAgICAgaDJzdHJlYW0uY29yaygpXG4gICAgICBoMnN0cmVhbS53cml0ZShidWZmZXIpXG4gICAgICBoMnN0cmVhbS51bmNvcmsoKVxuICAgIH0gZWxzZSB7XG4gICAgICBzb2NrZXQuY29yaygpXG4gICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAke2NvbnRlbnRMZW5ndGh9XFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICBzb2NrZXQud3JpdGUoYnVmZmVyKVxuICAgICAgc29ja2V0LnVuY29yaygpXG4gICAgfVxuXG4gICAgcmVxdWVzdC5vbkJvZHlTZW50KGJ1ZmZlcilcbiAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuXG4gICAgaWYgKCFleHBlY3RzUGF5bG9hZCkge1xuICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgfVxuXG4gICAgcmVzdW1lKGNsaWVudClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdXRpbC5kZXN0cm95KGlzSDIgPyBoMnN0cmVhbSA6IHNvY2tldCwgZXJyKVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlSXRlcmFibGUgKHsgaDJzdHJlYW0sIGJvZHksIGNsaWVudCwgcmVxdWVzdCwgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBoZWFkZXIsIGV4cGVjdHNQYXlsb2FkIH0pIHtcbiAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggIT09IDAgfHwgY2xpZW50W2tSdW5uaW5nXSA9PT0gMCwgJ2l0ZXJhdG9yIGJvZHkgY2Fubm90IGJlIHBpcGVsaW5lZCcpXG5cbiAgbGV0IGNhbGxiYWNrID0gbnVsbFxuICBmdW5jdGlvbiBvbkRyYWluICgpIHtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IGNiID0gY2FsbGJhY2tcbiAgICAgIGNhbGxiYWNrID0gbnVsbFxuICAgICAgY2IoKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHdhaXRGb3JEcmFpbiA9ICgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBhc3NlcnQoY2FsbGJhY2sgPT09IG51bGwpXG5cbiAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgIHJlamVjdChzb2NrZXRba0Vycm9yXSlcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2sgPSByZXNvbHZlXG4gICAgfVxuICB9KVxuXG4gIGlmIChjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gPT09ICdoMicpIHtcbiAgICBoMnN0cmVhbVxuICAgICAgLm9uKCdjbG9zZScsIG9uRHJhaW4pXG4gICAgICAub24oJ2RyYWluJywgb25EcmFpbilcblxuICAgIHRyeSB7XG4gICAgICAvLyBJdCdzIHVwIHRvIHRoZSB1c2VyIHRvIHNvbWVob3cgYWJvcnQgdGhlIGFzeW5jIGl0ZXJhYmxlLlxuICAgICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBib2R5KSB7XG4gICAgICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgICAgIHRocm93IHNvY2tldFtrRXJyb3JdXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXMgPSBoMnN0cmVhbS53cml0ZShjaHVuaylcbiAgICAgICAgcmVxdWVzdC5vbkJvZHlTZW50KGNodW5rKVxuICAgICAgICBpZiAoIXJlcykge1xuICAgICAgICAgIGF3YWl0IHdhaXRGb3JEcmFpbigpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGgyc3RyZWFtLmRlc3Ryb3koZXJyKVxuICAgIH0gZmluYWxseSB7XG4gICAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuICAgICAgaDJzdHJlYW0uZW5kKClcbiAgICAgIGgyc3RyZWFtXG4gICAgICAgIC5vZmYoJ2Nsb3NlJywgb25EcmFpbilcbiAgICAgICAgLm9mZignZHJhaW4nLCBvbkRyYWluKVxuICAgIH1cblxuICAgIHJldHVyblxuICB9XG5cbiAgc29ja2V0XG4gICAgLm9uKCdjbG9zZScsIG9uRHJhaW4pXG4gICAgLm9uKCdkcmFpbicsIG9uRHJhaW4pXG5cbiAgY29uc3Qgd3JpdGVyID0gbmV3IEFzeW5jV3JpdGVyKHsgc29ja2V0LCByZXF1ZXN0LCBjb250ZW50TGVuZ3RoLCBjbGllbnQsIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIgfSlcbiAgdHJ5IHtcbiAgICAvLyBJdCdzIHVwIHRvIHRoZSB1c2VyIHRvIHNvbWVob3cgYWJvcnQgdGhlIGFzeW5jIGl0ZXJhYmxlLlxuICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgYm9keSkge1xuICAgICAgaWYgKHNvY2tldFtrRXJyb3JdKSB7XG4gICAgICAgIHRocm93IHNvY2tldFtrRXJyb3JdXG4gICAgICB9XG5cbiAgICAgIGlmICghd3JpdGVyLndyaXRlKGNodW5rKSkge1xuICAgICAgICBhd2FpdCB3YWl0Rm9yRHJhaW4oKVxuICAgICAgfVxuICAgIH1cblxuICAgIHdyaXRlci5lbmQoKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICB3cml0ZXIuZGVzdHJveShlcnIpXG4gIH0gZmluYWxseSB7XG4gICAgc29ja2V0XG4gICAgICAub2ZmKCdjbG9zZScsIG9uRHJhaW4pXG4gICAgICAub2ZmKCdkcmFpbicsIG9uRHJhaW4pXG4gIH1cbn1cblxuY2xhc3MgQXN5bmNXcml0ZXIge1xuICBjb25zdHJ1Y3RvciAoeyBzb2NrZXQsIHJlcXVlc3QsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgZXhwZWN0c1BheWxvYWQsIGhlYWRlciB9KSB7XG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXRcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0XG4gICAgdGhpcy5jb250ZW50TGVuZ3RoID0gY29udGVudExlbmd0aFxuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50XG4gICAgdGhpcy5ieXRlc1dyaXR0ZW4gPSAwXG4gICAgdGhpcy5leHBlY3RzUGF5bG9hZCA9IGV4cGVjdHNQYXlsb2FkXG4gICAgdGhpcy5oZWFkZXIgPSBoZWFkZXJcblxuICAgIHNvY2tldFtrV3JpdGluZ10gPSB0cnVlXG4gIH1cblxuICB3cml0ZSAoY2h1bmspIHtcbiAgICBjb25zdCB7IHNvY2tldCwgcmVxdWVzdCwgY29udGVudExlbmd0aCwgY2xpZW50LCBieXRlc1dyaXR0ZW4sIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIgfSA9IHRoaXNcblxuICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgdGhyb3cgc29ja2V0W2tFcnJvcl1cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgY29uc3QgbGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgoY2h1bmspXG4gICAgaWYgKCFsZW4pIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gV2Ugc2hvdWxkIGRlZmVyIHdyaXRpbmcgY2h1bmtzLlxuICAgIGlmIChjb250ZW50TGVuZ3RoICE9PSBudWxsICYmIGJ5dGVzV3JpdHRlbiArIGxlbiA+IGNvbnRlbnRMZW5ndGgpIHtcbiAgICAgIGlmIChjbGllbnRba1N0cmljdENvbnRlbnRMZW5ndGhdKSB7XG4gICAgICAgIHRocm93IG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICB9XG5cbiAgICBzb2NrZXQuY29yaygpXG5cbiAgICBpZiAoYnl0ZXNXcml0dGVuID09PSAwKSB7XG4gICAgICBpZiAoIWV4cGVjdHNQYXlsb2FkKSB7XG4gICAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBpZiAoY29udGVudExlbmd0aCA9PT0gbnVsbCkge1xuICAgICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfXRyYW5zZmVyLWVuY29kaW5nOiBjaHVua2VkXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAke2NvbnRlbnRMZW5ndGh9XFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvbnRlbnRMZW5ndGggPT09IG51bGwpIHtcbiAgICAgIHNvY2tldC53cml0ZShgXFxyXFxuJHtsZW4udG9TdHJpbmcoMTYpfVxcclxcbmAsICdsYXRpbjEnKVxuICAgIH1cblxuICAgIHRoaXMuYnl0ZXNXcml0dGVuICs9IGxlblxuXG4gICAgY29uc3QgcmV0ID0gc29ja2V0LndyaXRlKGNodW5rKVxuXG4gICAgc29ja2V0LnVuY29yaygpXG5cbiAgICByZXF1ZXN0Lm9uQm9keVNlbnQoY2h1bmspXG5cbiAgICBpZiAoIXJldCkge1xuICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0ICYmIHNvY2tldFtrUGFyc2VyXS50aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9IRUFERVJTKSB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgICAgc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICBlbmQgKCkge1xuICAgIGNvbnN0IHsgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBjbGllbnQsIGJ5dGVzV3JpdHRlbiwgZXhwZWN0c1BheWxvYWQsIGhlYWRlciwgcmVxdWVzdCB9ID0gdGhpc1xuICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG5cbiAgICBzb2NrZXRba1dyaXRpbmddID0gZmFsc2VcblxuICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgdGhyb3cgc29ja2V0W2tFcnJvcl1cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGJ5dGVzV3JpdHRlbiA9PT0gMCkge1xuICAgICAgaWYgKGV4cGVjdHNQYXlsb2FkKSB7XG4gICAgICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4zLjJcbiAgICAgICAgLy8gQSB1c2VyIGFnZW50IFNIT1VMRCBzZW5kIGEgQ29udGVudC1MZW5ndGggaW4gYSByZXF1ZXN0IG1lc3NhZ2Ugd2hlblxuICAgICAgICAvLyBubyBUcmFuc2Zlci1FbmNvZGluZyBpcyBzZW50IGFuZCB0aGUgcmVxdWVzdCBtZXRob2QgZGVmaW5lcyBhIG1lYW5pbmdcbiAgICAgICAgLy8gZm9yIGFuIGVuY2xvc2VkIHBheWxvYWQgYm9keS5cblxuICAgICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAwXFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfVxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29udGVudExlbmd0aCA9PT0gbnVsbCkge1xuICAgICAgc29ja2V0LndyaXRlKCdcXHJcXG4wXFxyXFxuXFxyXFxuJywgJ2xhdGluMScpXG4gICAgfVxuXG4gICAgaWYgKGNvbnRlbnRMZW5ndGggIT09IG51bGwgJiYgYnl0ZXNXcml0dGVuICE9PSBjb250ZW50TGVuZ3RoKSB7XG4gICAgICBpZiAoY2xpZW50W2tTdHJpY3RDb250ZW50TGVuZ3RoXSkge1xuICAgICAgICB0aHJvdyBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcobmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dCAmJiBzb2NrZXRba1BhcnNlcl0udGltZW91dFR5cGUgPT09IFRJTUVPVVRfSEVBREVSUykge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgIHNvY2tldFtrUGFyc2VyXS50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJlc3VtZShjbGllbnQpXG4gIH1cblxuICBkZXN0cm95IChlcnIpIHtcbiAgICBjb25zdCB7IHNvY2tldCwgY2xpZW50IH0gPSB0aGlzXG5cbiAgICBzb2NrZXRba1dyaXRpbmddID0gZmFsc2VcblxuICAgIGlmIChlcnIpIHtcbiAgICAgIGFzc2VydChjbGllbnRba1J1bm5pbmddIDw9IDEsICdwaXBlbGluZSBzaG91bGQgb25seSBjb250YWluIHRoaXMgcmVxdWVzdCcpXG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBlcnIpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGVycm9yUmVxdWVzdCAoY2xpZW50LCByZXF1ZXN0LCBlcnIpIHtcbiAgdHJ5IHtcbiAgICByZXF1ZXN0Lm9uRXJyb3IoZXJyKVxuICAgIGFzc2VydChyZXF1ZXN0LmFib3J0ZWQpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNsaWVudC5lbWl0KCdlcnJvcicsIGVycilcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IENsaWVudFxuIiwgIi8qIGVzbGludC1kaXNhYmxlICovXG5cbid1c2Ugc3RyaWN0J1xuXG4vLyBFeHRyYWN0ZWQgZnJvbSBub2RlL2xpYi9pbnRlcm5hbC9maXhlZF9xdWV1ZS5qc1xuXG4vLyBDdXJyZW50bHkgb3B0aW1hbCBxdWV1ZSBzaXplLCB0ZXN0ZWQgb24gVjggNi4wIC0gNi42LiBNdXN0IGJlIHBvd2VyIG9mIHR3by5cbmNvbnN0IGtTaXplID0gMjA0ODtcbmNvbnN0IGtNYXNrID0ga1NpemUgLSAxO1xuXG4vLyBUaGUgRml4ZWRRdWV1ZSBpcyBpbXBsZW1lbnRlZCBhcyBhIHNpbmdseS1saW5rZWQgbGlzdCBvZiBmaXhlZC1zaXplXG4vLyBjaXJjdWxhciBidWZmZXJzLiBJdCBsb29rcyBzb21ldGhpbmcgbGlrZSB0aGlzOlxuLy9cbi8vICBoZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhaWxcbi8vICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuLy8gICAgdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2XG4vLyArLS0tLS0tLS0tLS0rIDwtLS0tLVxcICAgICAgICstLS0tLS0tLS0tLSsgPC0tLS0tLVxcICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy8gfCAgW251bGxdICAgfCAgICAgICAgXFwtLS0tLSB8ICAgbmV4dCAgICB8ICAgICAgICAgXFwtLS0tLS0tIHwgICBuZXh0ICAgIHxcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy8gfCAgIGl0ZW0gICAgfCA8LS0gYm90dG9tICAgIHwgICBpdGVtICAgIHwgPC0tIGJvdHRvbSAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgW2VtcHR5XSAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICBib3R0b20gLS0+IHwgICBpdGVtICAgIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgICAuLi4gICAgfCAgICAgICAgICAgICAgIHwgICAgLi4uICAgIHwgICAgICAgICAgICAgICAgICB8ICAgIC4uLiAgICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgW2VtcHR5XSAgfCA8LS0gdG9wICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8IDwtLSB0b3AgIHRvcCAtLT4gfCAgW2VtcHR5XSAgfFxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vL1xuLy8gT3IsIGlmIHRoZXJlIGlzIG9ubHkgb25lIGNpcmN1bGFyIGJ1ZmZlciwgaXQgbG9va3Mgc29tZXRoaW5nXG4vLyBsaWtlIGVpdGhlciBvZiB0aGVzZTpcbi8vXG4vLyAgaGVhZCAgIHRhaWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkICAgdGFpbFxuLy8gICAgfCAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8XG4vLyAgICB2ICAgICB2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgICAgIHZcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy8gfCAgW251bGxdICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBbbnVsbF0gICB8XG4vLyArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLStcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgW2VtcHR5XSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICAgaXRlbSAgICB8IDwtLSBib3R0b20gICAgICAgICAgICB0b3AgLS0+IHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgW2VtcHR5XSAgfFxuLy8gfCAgW2VtcHR5XSAgfCA8LS0gdG9wICAgICAgICAgICAgYm90dG9tIC0tPiB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy9cbi8vIEFkZGluZyBhIHZhbHVlIG1lYW5zIG1vdmluZyBgdG9wYCBmb3J3YXJkIGJ5IG9uZSwgcmVtb3ZpbmcgbWVhbnNcbi8vIG1vdmluZyBgYm90dG9tYCBmb3J3YXJkIGJ5IG9uZS4gQWZ0ZXIgcmVhY2hpbmcgdGhlIGVuZCwgdGhlIHF1ZXVlXG4vLyB3cmFwcyBhcm91bmQuXG4vL1xuLy8gV2hlbiBgdG9wID09PSBib3R0b21gIHRoZSBjdXJyZW50IHF1ZXVlIGlzIGVtcHR5IGFuZCB3aGVuXG4vLyBgdG9wICsgMSA9PT0gYm90dG9tYCBpdCdzIGZ1bGwuIFRoaXMgd2FzdGVzIGEgc2luZ2xlIHNwYWNlIG9mIHN0b3JhZ2Vcbi8vIGJ1dCBhbGxvd3MgbXVjaCBxdWlja2VyIGNoZWNrcy5cblxuY2xhc3MgRml4ZWRDaXJjdWxhckJ1ZmZlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuYm90dG9tID0gMDtcbiAgICB0aGlzLnRvcCA9IDA7XG4gICAgdGhpcy5saXN0ID0gbmV3IEFycmF5KGtTaXplKTtcbiAgICB0aGlzLm5leHQgPSBudWxsO1xuICB9XG5cbiAgaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gdGhpcy50b3AgPT09IHRoaXMuYm90dG9tO1xuICB9XG5cbiAgaXNGdWxsKCkge1xuICAgIHJldHVybiAoKHRoaXMudG9wICsgMSkgJiBrTWFzaykgPT09IHRoaXMuYm90dG9tO1xuICB9XG5cbiAgcHVzaChkYXRhKSB7XG4gICAgdGhpcy5saXN0W3RoaXMudG9wXSA9IGRhdGE7XG4gICAgdGhpcy50b3AgPSAodGhpcy50b3AgKyAxKSAmIGtNYXNrO1xuICB9XG5cbiAgc2hpZnQoKSB7XG4gICAgY29uc3QgbmV4dEl0ZW0gPSB0aGlzLmxpc3RbdGhpcy5ib3R0b21dO1xuICAgIGlmIChuZXh0SXRlbSA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgdGhpcy5saXN0W3RoaXMuYm90dG9tXSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmJvdHRvbSA9ICh0aGlzLmJvdHRvbSArIDEpICYga01hc2s7XG4gICAgcmV0dXJuIG5leHRJdGVtO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgRml4ZWRRdWV1ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG5ldyBGaXhlZENpcmN1bGFyQnVmZmVyKCk7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLmhlYWQuaXNFbXB0eSgpO1xuICB9XG5cbiAgcHVzaChkYXRhKSB7XG4gICAgaWYgKHRoaXMuaGVhZC5pc0Z1bGwoKSkge1xuICAgICAgLy8gSGVhZCBpcyBmdWxsOiBDcmVhdGVzIGEgbmV3IHF1ZXVlLCBzZXRzIHRoZSBvbGQgcXVldWUncyBgLm5leHRgIHRvIGl0LFxuICAgICAgLy8gYW5kIHNldHMgaXQgYXMgdGhlIG5ldyBtYWluIHF1ZXVlLlxuICAgICAgdGhpcy5oZWFkID0gdGhpcy5oZWFkLm5leHQgPSBuZXcgRml4ZWRDaXJjdWxhckJ1ZmZlcigpO1xuICAgIH1cbiAgICB0aGlzLmhlYWQucHVzaChkYXRhKTtcbiAgfVxuXG4gIHNoaWZ0KCkge1xuICAgIGNvbnN0IHRhaWwgPSB0aGlzLnRhaWw7XG4gICAgY29uc3QgbmV4dCA9IHRhaWwuc2hpZnQoKTtcbiAgICBpZiAodGFpbC5pc0VtcHR5KCkgJiYgdGFpbC5uZXh0ICE9PSBudWxsKSB7XG4gICAgICAvLyBJZiB0aGVyZSBpcyBhbm90aGVyIHF1ZXVlLCBpdCBmb3JtcyB0aGUgbmV3IHRhaWwuXG4gICAgICB0aGlzLnRhaWwgPSB0YWlsLm5leHQ7XG4gICAgfVxuICAgIHJldHVybiBuZXh0O1xuICB9XG59O1xuIiwgImNvbnN0IHsga0ZyZWUsIGtDb25uZWN0ZWQsIGtQZW5kaW5nLCBrUXVldWVkLCBrUnVubmluZywga1NpemUgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGtQb29sID0gU3ltYm9sKCdwb29sJylcblxuY2xhc3MgUG9vbFN0YXRzIHtcbiAgY29uc3RydWN0b3IgKHBvb2wpIHtcbiAgICB0aGlzW2tQb29sXSA9IHBvb2xcbiAgfVxuXG4gIGdldCBjb25uZWN0ZWQgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrQ29ubmVjdGVkXVxuICB9XG5cbiAgZ2V0IGZyZWUgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrRnJlZV1cbiAgfVxuXG4gIGdldCBwZW5kaW5nICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba1BlbmRpbmddXG4gIH1cblxuICBnZXQgcXVldWVkICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba1F1ZXVlZF1cbiAgfVxuXG4gIGdldCBydW5uaW5nICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba1J1bm5pbmddXG4gIH1cblxuICBnZXQgc2l6ZSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tTaXplXVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUG9vbFN0YXRzXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3QgRml4ZWRRdWV1ZSA9IHJlcXVpcmUoJy4vbm9kZS9maXhlZC1xdWV1ZScpXG5jb25zdCB7IGtDb25uZWN0ZWQsIGtTaXplLCBrUnVubmluZywga1BlbmRpbmcsIGtRdWV1ZWQsIGtCdXN5LCBrRnJlZSwga1VybCwga0Nsb3NlLCBrRGVzdHJveSwga0Rpc3BhdGNoIH0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5jb25zdCBQb29sU3RhdHMgPSByZXF1aXJlKCcuL3Bvb2wtc3RhdHMnKVxuXG5jb25zdCBrQ2xpZW50cyA9IFN5bWJvbCgnY2xpZW50cycpXG5jb25zdCBrTmVlZERyYWluID0gU3ltYm9sKCduZWVkRHJhaW4nKVxuY29uc3Qga1F1ZXVlID0gU3ltYm9sKCdxdWV1ZScpXG5jb25zdCBrQ2xvc2VkUmVzb2x2ZSA9IFN5bWJvbCgnY2xvc2VkIHJlc29sdmUnKVxuY29uc3Qga09uRHJhaW4gPSBTeW1ib2woJ29uRHJhaW4nKVxuY29uc3Qga09uQ29ubmVjdCA9IFN5bWJvbCgnb25Db25uZWN0JylcbmNvbnN0IGtPbkRpc2Nvbm5lY3QgPSBTeW1ib2woJ29uRGlzY29ubmVjdCcpXG5jb25zdCBrT25Db25uZWN0aW9uRXJyb3IgPSBTeW1ib2woJ29uQ29ubmVjdGlvbkVycm9yJylcbmNvbnN0IGtHZXREaXNwYXRjaGVyID0gU3ltYm9sKCdnZXQgZGlzcGF0Y2hlcicpXG5jb25zdCBrQWRkQ2xpZW50ID0gU3ltYm9sKCdhZGQgY2xpZW50JylcbmNvbnN0IGtSZW1vdmVDbGllbnQgPSBTeW1ib2woJ3JlbW92ZSBjbGllbnQnKVxuY29uc3Qga1N0YXRzID0gU3ltYm9sKCdzdGF0cycpXG5cbmNsYXNzIFBvb2xCYXNlIGV4dGVuZHMgRGlzcGF0Y2hlckJhc2Uge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpc1trUXVldWVdID0gbmV3IEZpeGVkUXVldWUoKVxuICAgIHRoaXNba0NsaWVudHNdID0gW11cbiAgICB0aGlzW2tRdWV1ZWRdID0gMFxuXG4gICAgY29uc3QgcG9vbCA9IHRoaXNcblxuICAgIHRoaXNba09uRHJhaW5dID0gZnVuY3Rpb24gb25EcmFpbiAob3JpZ2luLCB0YXJnZXRzKSB7XG4gICAgICBjb25zdCBxdWV1ZSA9IHBvb2xba1F1ZXVlXVxuXG4gICAgICBsZXQgbmVlZERyYWluID0gZmFsc2VcblxuICAgICAgd2hpbGUgKCFuZWVkRHJhaW4pIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHF1ZXVlLnNoaWZ0KClcbiAgICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBwb29sW2tRdWV1ZWRdLS1cbiAgICAgICAgbmVlZERyYWluID0gIXRoaXMuZGlzcGF0Y2goaXRlbS5vcHRzLCBpdGVtLmhhbmRsZXIpXG4gICAgICB9XG5cbiAgICAgIHRoaXNba05lZWREcmFpbl0gPSBuZWVkRHJhaW5cblxuICAgICAgaWYgKCF0aGlzW2tOZWVkRHJhaW5dICYmIHBvb2xba05lZWREcmFpbl0pIHtcbiAgICAgICAgcG9vbFtrTmVlZERyYWluXSA9IGZhbHNlXG4gICAgICAgIHBvb2wuZW1pdCgnZHJhaW4nLCBvcmlnaW4sIFtwb29sLCAuLi50YXJnZXRzXSlcbiAgICAgIH1cblxuICAgICAgaWYgKHBvb2xba0Nsb3NlZFJlc29sdmVdICYmIHF1ZXVlLmlzRW1wdHkoKSkge1xuICAgICAgICBQcm9taXNlXG4gICAgICAgICAgLmFsbChwb29sW2tDbGllbnRzXS5tYXAoYyA9PiBjLmNsb3NlKCkpKVxuICAgICAgICAgIC50aGVuKHBvb2xba0Nsb3NlZFJlc29sdmVdKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXNba09uQ29ubmVjdF0gPSAob3JpZ2luLCB0YXJnZXRzKSA9PiB7XG4gICAgICBwb29sLmVtaXQoJ2Nvbm5lY3QnLCBvcmlnaW4sIFtwb29sLCAuLi50YXJnZXRzXSlcbiAgICB9XG5cbiAgICB0aGlzW2tPbkRpc2Nvbm5lY3RdID0gKG9yaWdpbiwgdGFyZ2V0cywgZXJyKSA9PiB7XG4gICAgICBwb29sLmVtaXQoJ2Rpc2Nvbm5lY3QnLCBvcmlnaW4sIFtwb29sLCAuLi50YXJnZXRzXSwgZXJyKVxuICAgIH1cblxuICAgIHRoaXNba09uQ29ubmVjdGlvbkVycm9yXSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgcG9vbC5lbWl0KCdjb25uZWN0aW9uRXJyb3InLCBvcmlnaW4sIFtwb29sLCAuLi50YXJnZXRzXSwgZXJyKVxuICAgIH1cblxuICAgIHRoaXNba1N0YXRzXSA9IG5ldyBQb29sU3RhdHModGhpcylcbiAgfVxuXG4gIGdldCBba0J1c3ldICgpIHtcbiAgICByZXR1cm4gdGhpc1trTmVlZERyYWluXVxuICB9XG5cbiAgZ2V0IFtrQ29ubmVjdGVkXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0NsaWVudHNdLmZpbHRlcihjbGllbnQgPT4gY2xpZW50W2tDb25uZWN0ZWRdKS5sZW5ndGhcbiAgfVxuXG4gIGdldCBba0ZyZWVdICgpIHtcbiAgICByZXR1cm4gdGhpc1trQ2xpZW50c10uZmlsdGVyKGNsaWVudCA9PiBjbGllbnRba0Nvbm5lY3RlZF0gJiYgIWNsaWVudFtrTmVlZERyYWluXSkubGVuZ3RoXG4gIH1cblxuICBnZXQgW2tQZW5kaW5nXSAoKSB7XG4gICAgbGV0IHJldCA9IHRoaXNba1F1ZXVlZF1cbiAgICBmb3IgKGNvbnN0IHsgW2tQZW5kaW5nXTogcGVuZGluZyB9IG9mIHRoaXNba0NsaWVudHNdKSB7XG4gICAgICByZXQgKz0gcGVuZGluZ1xuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICBnZXQgW2tSdW5uaW5nXSAoKSB7XG4gICAgbGV0IHJldCA9IDBcbiAgICBmb3IgKGNvbnN0IHsgW2tSdW5uaW5nXTogcnVubmluZyB9IG9mIHRoaXNba0NsaWVudHNdKSB7XG4gICAgICByZXQgKz0gcnVubmluZ1xuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICBnZXQgW2tTaXplXSAoKSB7XG4gICAgbGV0IHJldCA9IHRoaXNba1F1ZXVlZF1cbiAgICBmb3IgKGNvbnN0IHsgW2tTaXplXTogc2l6ZSB9IG9mIHRoaXNba0NsaWVudHNdKSB7XG4gICAgICByZXQgKz0gc2l6ZVxuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICBnZXQgc3RhdHMgKCkge1xuICAgIHJldHVybiB0aGlzW2tTdGF0c11cbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICBpZiAodGhpc1trUXVldWVdLmlzRW1wdHkoKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHRoaXNba0NsaWVudHNdLm1hcChjID0+IGMuY2xvc2UoKSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IHJlc29sdmVcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgW2tEZXN0cm95XSAoZXJyKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzW2tRdWV1ZV0uc2hpZnQoKVxuICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBpdGVtLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHRoaXNba0NsaWVudHNdLm1hcChjID0+IGMuZGVzdHJveShlcnIpKSlcbiAgfVxuXG4gIFtrRGlzcGF0Y2hdIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgY29uc3QgZGlzcGF0Y2hlciA9IHRoaXNba0dldERpc3BhdGNoZXJdKClcblxuICAgIGlmICghZGlzcGF0Y2hlcikge1xuICAgICAgdGhpc1trTmVlZERyYWluXSA9IHRydWVcbiAgICAgIHRoaXNba1F1ZXVlXS5wdXNoKHsgb3B0cywgaGFuZGxlciB9KVxuICAgICAgdGhpc1trUXVldWVkXSsrXG4gICAgfSBlbHNlIGlmICghZGlzcGF0Y2hlci5kaXNwYXRjaChvcHRzLCBoYW5kbGVyKSkge1xuICAgICAgZGlzcGF0Y2hlcltrTmVlZERyYWluXSA9IHRydWVcbiAgICAgIHRoaXNba05lZWREcmFpbl0gPSAhdGhpc1trR2V0RGlzcGF0Y2hlcl0oKVxuICAgIH1cblxuICAgIHJldHVybiAhdGhpc1trTmVlZERyYWluXVxuICB9XG5cbiAgW2tBZGRDbGllbnRdIChjbGllbnQpIHtcbiAgICBjbGllbnRcbiAgICAgIC5vbignZHJhaW4nLCB0aGlzW2tPbkRyYWluXSlcbiAgICAgIC5vbignY29ubmVjdCcsIHRoaXNba09uQ29ubmVjdF0pXG4gICAgICAub24oJ2Rpc2Nvbm5lY3QnLCB0aGlzW2tPbkRpc2Nvbm5lY3RdKVxuICAgICAgLm9uKCdjb25uZWN0aW9uRXJyb3InLCB0aGlzW2tPbkNvbm5lY3Rpb25FcnJvcl0pXG5cbiAgICB0aGlzW2tDbGllbnRzXS5wdXNoKGNsaWVudClcblxuICAgIGlmICh0aGlzW2tOZWVkRHJhaW5dKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXNba05lZWREcmFpbl0pIHtcbiAgICAgICAgICB0aGlzW2tPbkRyYWluXShjbGllbnRba1VybF0sIFt0aGlzLCBjbGllbnRdKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBba1JlbW92ZUNsaWVudF0gKGNsaWVudCkge1xuICAgIGNsaWVudC5jbG9zZSgoKSA9PiB7XG4gICAgICBjb25zdCBpZHggPSB0aGlzW2tDbGllbnRzXS5pbmRleE9mKGNsaWVudClcbiAgICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICAgIHRoaXNba0NsaWVudHNdLnNwbGljZShpZHgsIDEpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXNba05lZWREcmFpbl0gPSB0aGlzW2tDbGllbnRzXS5zb21lKGRpc3BhdGNoZXIgPT4gKFxuICAgICAgIWRpc3BhdGNoZXJba05lZWREcmFpbl0gJiZcbiAgICAgIGRpc3BhdGNoZXIuY2xvc2VkICE9PSB0cnVlICYmXG4gICAgICBkaXNwYXRjaGVyLmRlc3Ryb3llZCAhPT0gdHJ1ZVxuICAgICkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFBvb2xCYXNlLFxuICBrQ2xpZW50cyxcbiAga05lZWREcmFpbixcbiAga0FkZENsaWVudCxcbiAga1JlbW92ZUNsaWVudCxcbiAga0dldERpc3BhdGNoZXJcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBQb29sQmFzZSxcbiAga0NsaWVudHMsXG4gIGtOZWVkRHJhaW4sXG4gIGtBZGRDbGllbnQsXG4gIGtHZXREaXNwYXRjaGVyXG59ID0gcmVxdWlyZSgnLi9wb29sLWJhc2UnKVxuY29uc3QgQ2xpZW50ID0gcmVxdWlyZSgnLi9jbGllbnQnKVxuY29uc3Qge1xuICBJbnZhbGlkQXJndW1lbnRFcnJvclxufSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vY29yZS91dGlsJylcbmNvbnN0IHsga1VybCwga0ludGVyY2VwdG9ycyB9ID0gcmVxdWlyZSgnLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgYnVpbGRDb25uZWN0b3IgPSByZXF1aXJlKCcuL2NvcmUvY29ubmVjdCcpXG5cbmNvbnN0IGtPcHRpb25zID0gU3ltYm9sKCdvcHRpb25zJylcbmNvbnN0IGtDb25uZWN0aW9ucyA9IFN5bWJvbCgnY29ubmVjdGlvbnMnKVxuY29uc3Qga0ZhY3RvcnkgPSBTeW1ib2woJ2ZhY3RvcnknKVxuXG5mdW5jdGlvbiBkZWZhdWx0RmFjdG9yeSAob3JpZ2luLCBvcHRzKSB7XG4gIHJldHVybiBuZXcgQ2xpZW50KG9yaWdpbiwgb3B0cylcbn1cblxuY2xhc3MgUG9vbCBleHRlbmRzIFBvb2xCYXNlIHtcbiAgY29uc3RydWN0b3IgKG9yaWdpbiwge1xuICAgIGNvbm5lY3Rpb25zLFxuICAgIGZhY3RvcnkgPSBkZWZhdWx0RmFjdG9yeSxcbiAgICBjb25uZWN0LFxuICAgIGNvbm5lY3RUaW1lb3V0LFxuICAgIHRscyxcbiAgICBtYXhDYWNoZWRTZXNzaW9ucyxcbiAgICBzb2NrZXRQYXRoLFxuICAgIGF1dG9TZWxlY3RGYW1pbHksXG4gICAgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0LFxuICAgIGFsbG93SDIsXG4gICAgLi4ub3B0aW9uc1xuICB9ID0ge30pIHtcbiAgICBzdXBlcigpXG5cbiAgICBpZiAoY29ubmVjdGlvbnMgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShjb25uZWN0aW9ucykgfHwgY29ubmVjdGlvbnMgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNvbm5lY3Rpb25zJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZmFjdG9yeSBtdXN0IGJlIGEgZnVuY3Rpb24uJylcbiAgICB9XG5cbiAgICBpZiAoY29ubmVjdCAhPSBudWxsICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdjb25uZWN0IG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29ubmVjdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29ubmVjdCA9IGJ1aWxkQ29ubmVjdG9yKHtcbiAgICAgICAgLi4udGxzLFxuICAgICAgICBtYXhDYWNoZWRTZXNzaW9ucyxcbiAgICAgICAgYWxsb3dIMixcbiAgICAgICAgc29ja2V0UGF0aCxcbiAgICAgICAgdGltZW91dDogY29ubmVjdFRpbWVvdXQsXG4gICAgICAgIC4uLih1dGlsLm5vZGVIYXNBdXRvU2VsZWN0RmFtaWx5ICYmIGF1dG9TZWxlY3RGYW1pbHkgPyB7IGF1dG9TZWxlY3RGYW1pbHksIGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCB9IDogdW5kZWZpbmVkKSxcbiAgICAgICAgLi4uY29ubmVjdFxuICAgICAgfSlcbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gb3B0aW9ucy5pbnRlcmNlcHRvcnMgJiYgb3B0aW9ucy5pbnRlcmNlcHRvcnMuUG9vbCAmJiBBcnJheS5pc0FycmF5KG9wdGlvbnMuaW50ZXJjZXB0b3JzLlBvb2wpXG4gICAgICA/IG9wdGlvbnMuaW50ZXJjZXB0b3JzLlBvb2xcbiAgICAgIDogW11cbiAgICB0aGlzW2tDb25uZWN0aW9uc10gPSBjb25uZWN0aW9ucyB8fCBudWxsXG4gICAgdGhpc1trVXJsXSA9IHV0aWwucGFyc2VPcmlnaW4ob3JpZ2luKVxuICAgIHRoaXNba09wdGlvbnNdID0geyAuLi51dGlsLmRlZXBDbG9uZShvcHRpb25zKSwgY29ubmVjdCwgYWxsb3dIMiB9XG4gICAgdGhpc1trT3B0aW9uc10uaW50ZXJjZXB0b3JzID0gb3B0aW9ucy5pbnRlcmNlcHRvcnNcbiAgICAgID8geyAuLi5vcHRpb25zLmludGVyY2VwdG9ycyB9XG4gICAgICA6IHVuZGVmaW5lZFxuICAgIHRoaXNba0ZhY3RvcnldID0gZmFjdG9yeVxuXG4gICAgdGhpcy5vbignY29ubmVjdGlvbkVycm9yJywgKG9yaWdpbiwgdGFyZ2V0cywgZXJyb3IpID0+IHtcbiAgICAgIC8vIElmIGEgY29ubmVjdGlvbiBlcnJvciBvY2N1cnMsIHdlIHJlbW92ZSB0aGUgY2xpZW50IGZyb20gdGhlIHBvb2wsXG4gICAgICAvLyBhbmQgZW1pdCBhIGNvbm5lY3Rpb25FcnJvciBldmVudC4gVGhleSB3aWxsIG5vdCBiZSByZS11c2VkLlxuICAgICAgLy8gRml4ZXMgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzM4OTVcbiAgICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldHMpIHtcbiAgICAgICAgLy8gRG8gbm90IHVzZSBrUmVtb3ZlQ2xpZW50IGhlcmUsIGFzIGl0IHdpbGwgY2xvc2UgdGhlIGNsaWVudCxcbiAgICAgICAgLy8gYnV0IHRoZSBjbGllbnQgY2Fubm90IGJlIGNsb3NlZCBpbiB0aGlzIHN0YXRlLlxuICAgICAgICBjb25zdCBpZHggPSB0aGlzW2tDbGllbnRzXS5pbmRleE9mKHRhcmdldClcbiAgICAgICAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICAgICAgICB0aGlzW2tDbGllbnRzXS5zcGxpY2UoaWR4LCAxKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIFtrR2V0RGlzcGF0Y2hlcl0gKCkge1xuICAgIGxldCBkaXNwYXRjaGVyID0gdGhpc1trQ2xpZW50c10uZmluZChkaXNwYXRjaGVyID0+ICFkaXNwYXRjaGVyW2tOZWVkRHJhaW5dKVxuXG4gICAgaWYgKGRpc3BhdGNoZXIpIHtcbiAgICAgIHJldHVybiBkaXNwYXRjaGVyXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzW2tDb25uZWN0aW9uc10gfHwgdGhpc1trQ2xpZW50c10ubGVuZ3RoIDwgdGhpc1trQ29ubmVjdGlvbnNdKSB7XG4gICAgICBkaXNwYXRjaGVyID0gdGhpc1trRmFjdG9yeV0odGhpc1trVXJsXSwgdGhpc1trT3B0aW9uc10pXG4gICAgICB0aGlzW2tBZGRDbGllbnRdKGRpc3BhdGNoZXIpXG4gICAgfVxuXG4gICAgcmV0dXJuIGRpc3BhdGNoZXJcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFBvb2xcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBCYWxhbmNlZFBvb2xNaXNzaW5nVXBzdHJlYW1FcnJvcixcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3Jcbn0gPSByZXF1aXJlKCcuL2NvcmUvZXJyb3JzJylcbmNvbnN0IHtcbiAgUG9vbEJhc2UsXG4gIGtDbGllbnRzLFxuICBrTmVlZERyYWluLFxuICBrQWRkQ2xpZW50LFxuICBrUmVtb3ZlQ2xpZW50LFxuICBrR2V0RGlzcGF0Y2hlclxufSA9IHJlcXVpcmUoJy4vcG9vbC1iYXNlJylcbmNvbnN0IFBvb2wgPSByZXF1aXJlKCcuL3Bvb2wnKVxuY29uc3QgeyBrVXJsLCBrSW50ZXJjZXB0b3JzIH0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5jb25zdCB7IHBhcnNlT3JpZ2luIH0gPSByZXF1aXJlKCcuL2NvcmUvdXRpbCcpXG5jb25zdCBrRmFjdG9yeSA9IFN5bWJvbCgnZmFjdG9yeScpXG5cbmNvbnN0IGtPcHRpb25zID0gU3ltYm9sKCdvcHRpb25zJylcbmNvbnN0IGtHcmVhdGVzdENvbW1vbkRpdmlzb3IgPSBTeW1ib2woJ2tHcmVhdGVzdENvbW1vbkRpdmlzb3InKVxuY29uc3Qga0N1cnJlbnRXZWlnaHQgPSBTeW1ib2woJ2tDdXJyZW50V2VpZ2h0JylcbmNvbnN0IGtJbmRleCA9IFN5bWJvbCgna0luZGV4JylcbmNvbnN0IGtXZWlnaHQgPSBTeW1ib2woJ2tXZWlnaHQnKVxuY29uc3Qga01heFdlaWdodFBlclNlcnZlciA9IFN5bWJvbCgna01heFdlaWdodFBlclNlcnZlcicpXG5jb25zdCBrRXJyb3JQZW5hbHR5ID0gU3ltYm9sKCdrRXJyb3JQZW5hbHR5JylcblxuZnVuY3Rpb24gZ2V0R3JlYXRlc3RDb21tb25EaXZpc29yIChhLCBiKSB7XG4gIGlmIChiID09PSAwKSByZXR1cm4gYVxuICByZXR1cm4gZ2V0R3JlYXRlc3RDb21tb25EaXZpc29yKGIsIGEgJSBiKVxufVxuXG5mdW5jdGlvbiBkZWZhdWx0RmFjdG9yeSAob3JpZ2luLCBvcHRzKSB7XG4gIHJldHVybiBuZXcgUG9vbChvcmlnaW4sIG9wdHMpXG59XG5cbmNsYXNzIEJhbGFuY2VkUG9vbCBleHRlbmRzIFBvb2xCYXNlIHtcbiAgY29uc3RydWN0b3IgKHVwc3RyZWFtcyA9IFtdLCB7IGZhY3RvcnkgPSBkZWZhdWx0RmFjdG9yeSwgLi4ub3B0cyB9ID0ge30pIHtcbiAgICBzdXBlcigpXG5cbiAgICB0aGlzW2tPcHRpb25zXSA9IG9wdHNcbiAgICB0aGlzW2tJbmRleF0gPSAtMVxuICAgIHRoaXNba0N1cnJlbnRXZWlnaHRdID0gMFxuXG4gICAgdGhpc1trTWF4V2VpZ2h0UGVyU2VydmVyXSA9IHRoaXNba09wdGlvbnNdLm1heFdlaWdodFBlclNlcnZlciB8fCAxMDBcbiAgICB0aGlzW2tFcnJvclBlbmFsdHldID0gdGhpc1trT3B0aW9uc10uZXJyb3JQZW5hbHR5IHx8IDE1XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodXBzdHJlYW1zKSkge1xuICAgICAgdXBzdHJlYW1zID0gW3Vwc3RyZWFtc11cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZmFjdG9yeSBtdXN0IGJlIGEgZnVuY3Rpb24uJylcbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gb3B0cy5pbnRlcmNlcHRvcnMgJiYgb3B0cy5pbnRlcmNlcHRvcnMuQmFsYW5jZWRQb29sICYmIEFycmF5LmlzQXJyYXkob3B0cy5pbnRlcmNlcHRvcnMuQmFsYW5jZWRQb29sKVxuICAgICAgPyBvcHRzLmludGVyY2VwdG9ycy5CYWxhbmNlZFBvb2xcbiAgICAgIDogW11cbiAgICB0aGlzW2tGYWN0b3J5XSA9IGZhY3RvcnlcblxuICAgIGZvciAoY29uc3QgdXBzdHJlYW0gb2YgdXBzdHJlYW1zKSB7XG4gICAgICB0aGlzLmFkZFVwc3RyZWFtKHVwc3RyZWFtKVxuICAgIH1cbiAgICB0aGlzLl91cGRhdGVCYWxhbmNlZFBvb2xTdGF0cygpXG4gIH1cblxuICBhZGRVcHN0cmVhbSAodXBzdHJlYW0pIHtcbiAgICBjb25zdCB1cHN0cmVhbU9yaWdpbiA9IHBhcnNlT3JpZ2luKHVwc3RyZWFtKS5vcmlnaW5cblxuICAgIGlmICh0aGlzW2tDbGllbnRzXS5maW5kKChwb29sKSA9PiAoXG4gICAgICBwb29sW2tVcmxdLm9yaWdpbiA9PT0gdXBzdHJlYW1PcmlnaW4gJiZcbiAgICAgIHBvb2wuY2xvc2VkICE9PSB0cnVlICYmXG4gICAgICBwb29sLmRlc3Ryb3llZCAhPT0gdHJ1ZVxuICAgICkpKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cbiAgICBjb25zdCBwb29sID0gdGhpc1trRmFjdG9yeV0odXBzdHJlYW1PcmlnaW4sIE9iamVjdC5hc3NpZ24oe30sIHRoaXNba09wdGlvbnNdKSlcblxuICAgIHRoaXNba0FkZENsaWVudF0ocG9vbClcbiAgICBwb29sLm9uKCdjb25uZWN0JywgKCkgPT4ge1xuICAgICAgcG9vbFtrV2VpZ2h0XSA9IE1hdGgubWluKHRoaXNba01heFdlaWdodFBlclNlcnZlcl0sIHBvb2xba1dlaWdodF0gKyB0aGlzW2tFcnJvclBlbmFsdHldKVxuICAgIH0pXG5cbiAgICBwb29sLm9uKCdjb25uZWN0aW9uRXJyb3InLCAoKSA9PiB7XG4gICAgICBwb29sW2tXZWlnaHRdID0gTWF0aC5tYXgoMSwgcG9vbFtrV2VpZ2h0XSAtIHRoaXNba0Vycm9yUGVuYWx0eV0pXG4gICAgICB0aGlzLl91cGRhdGVCYWxhbmNlZFBvb2xTdGF0cygpXG4gICAgfSlcblxuICAgIHBvb2wub24oJ2Rpc2Nvbm5lY3QnLCAoLi4uYXJncykgPT4ge1xuICAgICAgY29uc3QgZXJyID0gYXJnc1syXVxuICAgICAgaWYgKGVyciAmJiBlcnIuY29kZSA9PT0gJ1VORF9FUlJfU09DS0VUJykge1xuICAgICAgICAvLyBkZWNyZWFzZSB0aGUgd2VpZ2h0IG9mIHRoZSBwb29sLlxuICAgICAgICBwb29sW2tXZWlnaHRdID0gTWF0aC5tYXgoMSwgcG9vbFtrV2VpZ2h0XSAtIHRoaXNba0Vycm9yUGVuYWx0eV0pXG4gICAgICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgZm9yIChjb25zdCBjbGllbnQgb2YgdGhpc1trQ2xpZW50c10pIHtcbiAgICAgIGNsaWVudFtrV2VpZ2h0XSA9IHRoaXNba01heFdlaWdodFBlclNlcnZlcl1cbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVCYWxhbmNlZFBvb2xTdGF0cygpXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzICgpIHtcbiAgICB0aGlzW2tHcmVhdGVzdENvbW1vbkRpdmlzb3JdID0gdGhpc1trQ2xpZW50c10ubWFwKHAgPT4gcFtrV2VpZ2h0XSkucmVkdWNlKGdldEdyZWF0ZXN0Q29tbW9uRGl2aXNvciwgMClcbiAgfVxuXG4gIHJlbW92ZVVwc3RyZWFtICh1cHN0cmVhbSkge1xuICAgIGNvbnN0IHVwc3RyZWFtT3JpZ2luID0gcGFyc2VPcmlnaW4odXBzdHJlYW0pLm9yaWdpblxuXG4gICAgY29uc3QgcG9vbCA9IHRoaXNba0NsaWVudHNdLmZpbmQoKHBvb2wpID0+IChcbiAgICAgIHBvb2xba1VybF0ub3JpZ2luID09PSB1cHN0cmVhbU9yaWdpbiAmJlxuICAgICAgcG9vbC5jbG9zZWQgIT09IHRydWUgJiZcbiAgICAgIHBvb2wuZGVzdHJveWVkICE9PSB0cnVlXG4gICAgKSlcblxuICAgIGlmIChwb29sKSB7XG4gICAgICB0aGlzW2tSZW1vdmVDbGllbnRdKHBvb2wpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIGdldCB1cHN0cmVhbXMgKCkge1xuICAgIHJldHVybiB0aGlzW2tDbGllbnRzXVxuICAgICAgLmZpbHRlcihkaXNwYXRjaGVyID0+IGRpc3BhdGNoZXIuY2xvc2VkICE9PSB0cnVlICYmIGRpc3BhdGNoZXIuZGVzdHJveWVkICE9PSB0cnVlKVxuICAgICAgLm1hcCgocCkgPT4gcFtrVXJsXS5vcmlnaW4pXG4gIH1cblxuICBba0dldERpc3BhdGNoZXJdICgpIHtcbiAgICAvLyBXZSB2YWxpZGF0ZSB0aGF0IHBvb2xzIGlzIGdyZWF0ZXIgdGhhbiAwLFxuICAgIC8vIG90aGVyd2lzZSB3ZSB3b3VsZCBoYXZlIHRvIHdhaXQgdW50aWwgYW4gdXBzdHJlYW1cbiAgICAvLyBpcyBhZGRlZCwgd2hpY2ggbWlnaHQgbmV2ZXIgaGFwcGVuLlxuICAgIGlmICh0aGlzW2tDbGllbnRzXS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBCYWxhbmNlZFBvb2xNaXNzaW5nVXBzdHJlYW1FcnJvcigpXG4gICAgfVxuXG4gICAgY29uc3QgZGlzcGF0Y2hlciA9IHRoaXNba0NsaWVudHNdLmZpbmQoZGlzcGF0Y2hlciA9PiAoXG4gICAgICAhZGlzcGF0Y2hlcltrTmVlZERyYWluXSAmJlxuICAgICAgZGlzcGF0Y2hlci5jbG9zZWQgIT09IHRydWUgJiZcbiAgICAgIGRpc3BhdGNoZXIuZGVzdHJveWVkICE9PSB0cnVlXG4gICAgKSlcblxuICAgIGlmICghZGlzcGF0Y2hlcikge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgYWxsQ2xpZW50c0J1c3kgPSB0aGlzW2tDbGllbnRzXS5tYXAocG9vbCA9PiBwb29sW2tOZWVkRHJhaW5dKS5yZWR1Y2UoKGEsIGIpID0+IGEgJiYgYiwgdHJ1ZSlcblxuICAgIGlmIChhbGxDbGllbnRzQnVzeSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgbGV0IGNvdW50ZXIgPSAwXG5cbiAgICBsZXQgbWF4V2VpZ2h0SW5kZXggPSB0aGlzW2tDbGllbnRzXS5maW5kSW5kZXgocG9vbCA9PiAhcG9vbFtrTmVlZERyYWluXSlcblxuICAgIHdoaWxlIChjb3VudGVyKysgPCB0aGlzW2tDbGllbnRzXS5sZW5ndGgpIHtcbiAgICAgIHRoaXNba0luZGV4XSA9ICh0aGlzW2tJbmRleF0gKyAxKSAlIHRoaXNba0NsaWVudHNdLmxlbmd0aFxuICAgICAgY29uc3QgcG9vbCA9IHRoaXNba0NsaWVudHNdW3RoaXNba0luZGV4XV1cblxuICAgICAgLy8gZmluZCBwb29sIGluZGV4IHdpdGggdGhlIGxhcmdlc3Qgd2VpZ2h0XG4gICAgICBpZiAocG9vbFtrV2VpZ2h0XSA+IHRoaXNba0NsaWVudHNdW21heFdlaWdodEluZGV4XVtrV2VpZ2h0XSAmJiAhcG9vbFtrTmVlZERyYWluXSkge1xuICAgICAgICBtYXhXZWlnaHRJbmRleCA9IHRoaXNba0luZGV4XVxuICAgICAgfVxuXG4gICAgICAvLyBkZWNyZWFzZSB0aGUgY3VycmVudCB3ZWlnaHQgZXZlcnkgYHRoaXNba0NsaWVudHNdLmxlbmd0aGAuXG4gICAgICBpZiAodGhpc1trSW5kZXhdID09PSAwKSB7XG4gICAgICAgIC8vIFNldCB0aGUgY3VycmVudCB3ZWlnaHQgdG8gdGhlIG5leHQgbG93ZXIgd2VpZ2h0LlxuICAgICAgICB0aGlzW2tDdXJyZW50V2VpZ2h0XSA9IHRoaXNba0N1cnJlbnRXZWlnaHRdIC0gdGhpc1trR3JlYXRlc3RDb21tb25EaXZpc29yXVxuXG4gICAgICAgIGlmICh0aGlzW2tDdXJyZW50V2VpZ2h0XSA8PSAwKSB7XG4gICAgICAgICAgdGhpc1trQ3VycmVudFdlaWdodF0gPSB0aGlzW2tNYXhXZWlnaHRQZXJTZXJ2ZXJdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwb29sW2tXZWlnaHRdID49IHRoaXNba0N1cnJlbnRXZWlnaHRdICYmICghcG9vbFtrTmVlZERyYWluXSkpIHtcbiAgICAgICAgcmV0dXJuIHBvb2xcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tDdXJyZW50V2VpZ2h0XSA9IHRoaXNba0NsaWVudHNdW21heFdlaWdodEluZGV4XVtrV2VpZ2h0XVxuICAgIHRoaXNba0luZGV4XSA9IG1heFdlaWdodEluZGV4XG4gICAgcmV0dXJuIHRoaXNba0NsaWVudHNdW21heFdlaWdodEluZGV4XVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQmFsYW5jZWRQb29sXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBmaWxlOiBvbmx5IGZvciBOb2RlIDEyICovXG5cbmNvbnN0IHsga0Nvbm5lY3RlZCwga1NpemUgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5cbmNsYXNzIENvbXBhdFdlYWtSZWYge1xuICBjb25zdHJ1Y3RvciAodmFsdWUpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgfVxuXG4gIGRlcmVmICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZVtrQ29ubmVjdGVkXSA9PT0gMCAmJiB0aGlzLnZhbHVlW2tTaXplXSA9PT0gMFxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogdGhpcy52YWx1ZVxuICB9XG59XG5cbmNsYXNzIENvbXBhdEZpbmFsaXplciB7XG4gIGNvbnN0cnVjdG9yIChmaW5hbGl6ZXIpIHtcbiAgICB0aGlzLmZpbmFsaXplciA9IGZpbmFsaXplclxuICB9XG5cbiAgcmVnaXN0ZXIgKGRpc3BhdGNoZXIsIGtleSkge1xuICAgIGlmIChkaXNwYXRjaGVyLm9uKSB7XG4gICAgICBkaXNwYXRjaGVyLm9uKCdkaXNjb25uZWN0JywgKCkgPT4ge1xuICAgICAgICBpZiAoZGlzcGF0Y2hlcltrQ29ubmVjdGVkXSA9PT0gMCAmJiBkaXNwYXRjaGVyW2tTaXplXSA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuZmluYWxpemVyKGtleSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIEZJWE1FOiByZW1vdmUgd29ya2Fyb3VuZCB3aGVuIHRoZSBOb2RlIGJ1ZyBpcyBmaXhlZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzQ5MzQ0I2lzc3VlY29tbWVudC0xNzQxNzc2MzA4XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX1Y4X0NPVkVSQUdFKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFdlYWtSZWY6IENvbXBhdFdlYWtSZWYsXG4gICAgICBGaW5hbGl6YXRpb25SZWdpc3RyeTogQ29tcGF0RmluYWxpemVyXG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgV2Vha1JlZjogZ2xvYmFsLldlYWtSZWYgfHwgQ29tcGF0V2Vha1JlZixcbiAgICBGaW5hbGl6YXRpb25SZWdpc3RyeTogZ2xvYmFsLkZpbmFsaXphdGlvblJlZ2lzdHJ5IHx8IENvbXBhdEZpbmFsaXplclxuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgeyBrQ2xpZW50cywga1J1bm5pbmcsIGtDbG9zZSwga0Rlc3Ryb3ksIGtEaXNwYXRjaCwga0ludGVyY2VwdG9ycyB9ID0gcmVxdWlyZSgnLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgRGlzcGF0Y2hlckJhc2UgPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXItYmFzZScpXG5jb25zdCBQb29sID0gcmVxdWlyZSgnLi9wb29sJylcbmNvbnN0IENsaWVudCA9IHJlcXVpcmUoJy4vY2xpZW50JylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL2NvcmUvdXRpbCcpXG5jb25zdCBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yID0gcmVxdWlyZSgnLi9pbnRlcmNlcHRvci9yZWRpcmVjdEludGVyY2VwdG9yJylcbmNvbnN0IHsgV2Vha1JlZiwgRmluYWxpemF0aW9uUmVnaXN0cnkgfSA9IHJlcXVpcmUoJy4vY29tcGF0L2Rpc3BhdGNoZXItd2Vha3JlZicpKClcblxuY29uc3Qga09uQ29ubmVjdCA9IFN5bWJvbCgnb25Db25uZWN0JylcbmNvbnN0IGtPbkRpc2Nvbm5lY3QgPSBTeW1ib2woJ29uRGlzY29ubmVjdCcpXG5jb25zdCBrT25Db25uZWN0aW9uRXJyb3IgPSBTeW1ib2woJ29uQ29ubmVjdGlvbkVycm9yJylcbmNvbnN0IGtNYXhSZWRpcmVjdGlvbnMgPSBTeW1ib2woJ21heFJlZGlyZWN0aW9ucycpXG5jb25zdCBrT25EcmFpbiA9IFN5bWJvbCgnb25EcmFpbicpXG5jb25zdCBrRmFjdG9yeSA9IFN5bWJvbCgnZmFjdG9yeScpXG5jb25zdCBrRmluYWxpemVyID0gU3ltYm9sKCdmaW5hbGl6ZXInKVxuY29uc3Qga09wdGlvbnMgPSBTeW1ib2woJ29wdGlvbnMnKVxuXG5mdW5jdGlvbiBkZWZhdWx0RmFjdG9yeSAob3JpZ2luLCBvcHRzKSB7XG4gIHJldHVybiBvcHRzICYmIG9wdHMuY29ubmVjdGlvbnMgPT09IDFcbiAgICA/IG5ldyBDbGllbnQob3JpZ2luLCBvcHRzKVxuICAgIDogbmV3IFBvb2wob3JpZ2luLCBvcHRzKVxufVxuXG5jbGFzcyBBZ2VudCBleHRlbmRzIERpc3BhdGNoZXJCYXNlIHtcbiAgY29uc3RydWN0b3IgKHsgZmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5LCBtYXhSZWRpcmVjdGlvbnMgPSAwLCBjb25uZWN0LCAuLi5vcHRpb25zIH0gPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIGlmICh0eXBlb2YgZmFjdG9yeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdmYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICE9IG51bGwgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2Nvbm5lY3QgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heFJlZGlyZWN0aW9ucykgfHwgbWF4UmVkaXJlY3Rpb25zIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhSZWRpcmVjdGlvbnMgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgaWYgKGNvbm5lY3QgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbm5lY3QgPSB7IC4uLmNvbm5lY3QgfVxuICAgIH1cblxuICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBvcHRpb25zLmludGVyY2VwdG9ycyAmJiBvcHRpb25zLmludGVyY2VwdG9ycy5BZ2VudCAmJiBBcnJheS5pc0FycmF5KG9wdGlvbnMuaW50ZXJjZXB0b3JzLkFnZW50KVxuICAgICAgPyBvcHRpb25zLmludGVyY2VwdG9ycy5BZ2VudFxuICAgICAgOiBbY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvcih7IG1heFJlZGlyZWN0aW9ucyB9KV1cblxuICAgIHRoaXNba09wdGlvbnNdID0geyAuLi51dGlsLmRlZXBDbG9uZShvcHRpb25zKSwgY29ubmVjdCB9XG4gICAgdGhpc1trT3B0aW9uc10uaW50ZXJjZXB0b3JzID0gb3B0aW9ucy5pbnRlcmNlcHRvcnNcbiAgICAgID8geyAuLi5vcHRpb25zLmludGVyY2VwdG9ycyB9XG4gICAgICA6IHVuZGVmaW5lZFxuICAgIHRoaXNba01heFJlZGlyZWN0aW9uc10gPSBtYXhSZWRpcmVjdGlvbnNcbiAgICB0aGlzW2tGYWN0b3J5XSA9IGZhY3RvcnlcbiAgICB0aGlzW2tDbGllbnRzXSA9IG5ldyBNYXAoKVxuICAgIHRoaXNba0ZpbmFsaXplcl0gPSBuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGdjIGlzIHVuZGV0ZXJtaW5pc3RpYyAqLyBrZXkgPT4ge1xuICAgICAgY29uc3QgcmVmID0gdGhpc1trQ2xpZW50c10uZ2V0KGtleSlcbiAgICAgIGlmIChyZWYgIT09IHVuZGVmaW5lZCAmJiByZWYuZGVyZWYoKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXNba0NsaWVudHNdLmRlbGV0ZShrZXkpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGNvbnN0IGFnZW50ID0gdGhpc1xuXG4gICAgdGhpc1trT25EcmFpbl0gPSAob3JpZ2luLCB0YXJnZXRzKSA9PiB7XG4gICAgICBhZ2VudC5lbWl0KCdkcmFpbicsIG9yaWdpbiwgW2FnZW50LCAuLi50YXJnZXRzXSlcbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3RdID0gKG9yaWdpbiwgdGFyZ2V0cykgPT4ge1xuICAgICAgYWdlbnQuZW1pdCgnY29ubmVjdCcsIG9yaWdpbiwgW2FnZW50LCAuLi50YXJnZXRzXSlcbiAgICB9XG5cbiAgICB0aGlzW2tPbkRpc2Nvbm5lY3RdID0gKG9yaWdpbiwgdGFyZ2V0cywgZXJyKSA9PiB7XG4gICAgICBhZ2VudC5lbWl0KCdkaXNjb25uZWN0Jywgb3JpZ2luLCBbYWdlbnQsIC4uLnRhcmdldHNdLCBlcnIpXG4gICAgfVxuXG4gICAgdGhpc1trT25Db25uZWN0aW9uRXJyb3JdID0gKG9yaWdpbiwgdGFyZ2V0cywgZXJyKSA9PiB7XG4gICAgICBhZ2VudC5lbWl0KCdjb25uZWN0aW9uRXJyb3InLCBvcmlnaW4sIFthZ2VudCwgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG4gIH1cblxuICBnZXQgW2tSdW5uaW5nXSAoKSB7XG4gICAgbGV0IHJldCA9IDBcbiAgICBmb3IgKGNvbnN0IHJlZiBvZiB0aGlzW2tDbGllbnRzXS52YWx1ZXMoKSkge1xuICAgICAgY29uc3QgY2xpZW50ID0gcmVmLmRlcmVmKClcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBnYyBpcyB1bmRldGVybWluaXN0aWMgKi9cbiAgICAgIGlmIChjbGllbnQpIHtcbiAgICAgICAgcmV0ICs9IGNsaWVudFtrUnVubmluZ11cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgW2tEaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBsZXQga2V5XG4gICAgaWYgKG9wdHMub3JpZ2luICYmICh0eXBlb2Ygb3B0cy5vcmlnaW4gPT09ICdzdHJpbmcnIHx8IG9wdHMub3JpZ2luIGluc3RhbmNlb2YgVVJMKSkge1xuICAgICAga2V5ID0gU3RyaW5nKG9wdHMub3JpZ2luKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMub3JpZ2luIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIG9yIFVSTC4nKVxuICAgIH1cblxuICAgIGNvbnN0IHJlZiA9IHRoaXNba0NsaWVudHNdLmdldChrZXkpXG5cbiAgICBsZXQgZGlzcGF0Y2hlciA9IHJlZiA/IHJlZi5kZXJlZigpIDogbnVsbFxuICAgIGlmICghZGlzcGF0Y2hlcikge1xuICAgICAgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKG9wdHMub3JpZ2luLCB0aGlzW2tPcHRpb25zXSlcbiAgICAgICAgLm9uKCdkcmFpbicsIHRoaXNba09uRHJhaW5dKVxuICAgICAgICAub24oJ2Nvbm5lY3QnLCB0aGlzW2tPbkNvbm5lY3RdKVxuICAgICAgICAub24oJ2Rpc2Nvbm5lY3QnLCB0aGlzW2tPbkRpc2Nvbm5lY3RdKVxuICAgICAgICAub24oJ2Nvbm5lY3Rpb25FcnJvcicsIHRoaXNba09uQ29ubmVjdGlvbkVycm9yXSlcblxuICAgICAgdGhpc1trQ2xpZW50c10uc2V0KGtleSwgbmV3IFdlYWtSZWYoZGlzcGF0Y2hlcikpXG4gICAgICB0aGlzW2tGaW5hbGl6ZXJdLnJlZ2lzdGVyKGRpc3BhdGNoZXIsIGtleSlcbiAgICB9XG5cbiAgICByZXR1cm4gZGlzcGF0Y2hlci5kaXNwYXRjaChvcHRzLCBoYW5kbGVyKVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGNvbnN0IGNsb3NlUHJvbWlzZXMgPSBbXVxuICAgIGZvciAoY29uc3QgcmVmIG9mIHRoaXNba0NsaWVudHNdLnZhbHVlcygpKSB7XG4gICAgICBjb25zdCBjbGllbnQgPSByZWYuZGVyZWYoKVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGdjIGlzIHVuZGV0ZXJtaW5pc3RpYyAqL1xuICAgICAgaWYgKGNsaWVudCkge1xuICAgICAgICBjbG9zZVByb21pc2VzLnB1c2goY2xpZW50LmNsb3NlKCkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoY2xvc2VQcm9taXNlcylcbiAgfVxuXG4gIGFzeW5jIFtrRGVzdHJveV0gKGVycikge1xuICAgIGNvbnN0IGRlc3Ryb3lQcm9taXNlcyA9IFtdXG4gICAgZm9yIChjb25zdCByZWYgb2YgdGhpc1trQ2xpZW50c10udmFsdWVzKCkpIHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IHJlZi5kZXJlZigpXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogZ2MgaXMgdW5kZXRlcm1pbmlzdGljICovXG4gICAgICBpZiAoY2xpZW50KSB7XG4gICAgICAgIGRlc3Ryb3lQcm9taXNlcy5wdXNoKGNsaWVudC5kZXN0cm95KGVycikpXG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoZGVzdHJveVByb21pc2VzKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQWdlbnRcbiIsICIvLyBQb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9wdWxsLzkwN1xuXG4ndXNlIHN0cmljdCdcblxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgUmVhZGFibGUgfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB7IFJlcXVlc3RBYm9ydGVkRXJyb3IsIE5vdFN1cHBvcnRlZEVycm9yLCBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IFJlYWRhYmxlU3RyZWFtRnJvbSwgdG9VU1ZTdHJpbmcgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5cbmxldCBCbG9iXG5cbmNvbnN0IGtDb25zdW1lID0gU3ltYm9sKCdrQ29uc3VtZScpXG5jb25zdCBrUmVhZGluZyA9IFN5bWJvbCgna1JlYWRpbmcnKVxuY29uc3Qga0JvZHkgPSBTeW1ib2woJ2tCb2R5JylcbmNvbnN0IGtBYm9ydCA9IFN5bWJvbCgnYWJvcnQnKVxuY29uc3Qga0NvbnRlbnRUeXBlID0gU3ltYm9sKCdrQ29udGVudFR5cGUnKVxuXG5jb25zdCBub29wID0gKCkgPT4ge31cblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBCb2R5UmVhZGFibGUgZXh0ZW5kcyBSZWFkYWJsZSB7XG4gIGNvbnN0cnVjdG9yICh7XG4gICAgcmVzdW1lLFxuICAgIGFib3J0LFxuICAgIGNvbnRlbnRUeXBlID0gJycsXG4gICAgaGlnaFdhdGVyTWFyayA9IDY0ICogMTAyNCAvLyBTYW1lIGFzIG5vZGVqcyBmcyBzdHJlYW1zLlxuICB9KSB7XG4gICAgc3VwZXIoe1xuICAgICAgYXV0b0Rlc3Ryb3k6IHRydWUsXG4gICAgICByZWFkOiByZXN1bWUsXG4gICAgICBoaWdoV2F0ZXJNYXJrXG4gICAgfSlcblxuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGF0YUVtaXR0ZWQgPSBmYWxzZVxuXG4gICAgdGhpc1trQWJvcnRdID0gYWJvcnRcbiAgICB0aGlzW2tDb25zdW1lXSA9IG51bGxcbiAgICB0aGlzW2tCb2R5XSA9IG51bGxcbiAgICB0aGlzW2tDb250ZW50VHlwZV0gPSBjb250ZW50VHlwZVxuXG4gICAgLy8gSXMgc3RyZWFtIGJlaW5nIGNvbnN1bWVkIHRocm91Z2ggUmVhZGFibGUgQVBJP1xuICAgIC8vIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIHNvIHRoYXQgd2UgYXZvaWQgY2hlY2tpbmdcbiAgICAvLyBmb3IgJ2RhdGEnIGFuZCAncmVhZGFibGUnIGxpc3RlbmVycyBpbiB0aGUgaG90IHBhdGhcbiAgICAvLyBpbnNpZGUgcHVzaCgpLlxuICAgIHRoaXNba1JlYWRpbmddID0gZmFsc2VcbiAgfVxuXG4gIGRlc3Ryb3kgKGVycikge1xuICAgIGlmICh0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgLy8gTm9kZSA8IDE2XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIGlmICghZXJyICYmICF0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQpIHtcbiAgICAgIGVyciA9IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICB9XG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICB0aGlzW2tBYm9ydF0oKVxuICAgIH1cblxuICAgIHJldHVybiBzdXBlci5kZXN0cm95KGVycilcbiAgfVxuXG4gIGVtaXQgKGV2LCAuLi5hcmdzKSB7XG4gICAgaWYgKGV2ID09PSAnZGF0YScpIHtcbiAgICAgIC8vIE5vZGUgPCAxNi43XG4gICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRhdGFFbWl0dGVkID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAoZXYgPT09ICdlcnJvcicpIHtcbiAgICAgIC8vIE5vZGUgPCAxNlxuICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQgPSB0cnVlXG4gICAgfVxuICAgIHJldHVybiBzdXBlci5lbWl0KGV2LCAuLi5hcmdzKVxuICB9XG5cbiAgb24gKGV2LCAuLi5hcmdzKSB7XG4gICAgaWYgKGV2ID09PSAnZGF0YScgfHwgZXYgPT09ICdyZWFkYWJsZScpIHtcbiAgICAgIHRoaXNba1JlYWRpbmddID0gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gc3VwZXIub24oZXYsIC4uLmFyZ3MpXG4gIH1cblxuICBhZGRMaXN0ZW5lciAoZXYsIC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5vbihldiwgLi4uYXJncylcbiAgfVxuXG4gIG9mZiAoZXYsIC4uLmFyZ3MpIHtcbiAgICBjb25zdCByZXQgPSBzdXBlci5vZmYoZXYsIC4uLmFyZ3MpXG4gICAgaWYgKGV2ID09PSAnZGF0YScgfHwgZXYgPT09ICdyZWFkYWJsZScpIHtcbiAgICAgIHRoaXNba1JlYWRpbmddID0gKFxuICAgICAgICB0aGlzLmxpc3RlbmVyQ291bnQoJ2RhdGEnKSA+IDAgfHxcbiAgICAgICAgdGhpcy5saXN0ZW5lckNvdW50KCdyZWFkYWJsZScpID4gMFxuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICByZW1vdmVMaXN0ZW5lciAoZXYsIC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5vZmYoZXYsIC4uLmFyZ3MpXG4gIH1cblxuICBwdXNoIChjaHVuaykge1xuICAgIGlmICh0aGlzW2tDb25zdW1lXSAmJiBjaHVuayAhPT0gbnVsbCAmJiB0aGlzLnJlYWRhYmxlTGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zdW1lUHVzaCh0aGlzW2tDb25zdW1lXSwgY2h1bmspXG4gICAgICByZXR1cm4gdGhpc1trUmVhZGluZ10gPyBzdXBlci5wdXNoKGNodW5rKSA6IHRydWVcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLnB1c2goY2h1bmspXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWJvZHktdGV4dFxuICBhc3luYyB0ZXh0ICgpIHtcbiAgICByZXR1cm4gY29uc3VtZSh0aGlzLCAndGV4dCcpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWJvZHktanNvblxuICBhc3luYyBqc29uICgpIHtcbiAgICByZXR1cm4gY29uc3VtZSh0aGlzLCAnanNvbicpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWJvZHktYmxvYlxuICBhc3luYyBibG9iICgpIHtcbiAgICByZXR1cm4gY29uc3VtZSh0aGlzLCAnYmxvYicpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWJvZHktYXJyYXlidWZmZXJcbiAgYXN5bmMgYXJyYXlCdWZmZXIgKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICdhcnJheUJ1ZmZlcicpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWJvZHktZm9ybWRhdGFcbiAgYXN5bmMgZm9ybURhdGEgKCkge1xuICAgIC8vIFRPRE86IEltcGxlbWVudC5cbiAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXJyb3IoKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWJvZHl1c2VkXG4gIGdldCBib2R5VXNlZCAoKSB7XG4gICAgcmV0dXJuIHV0aWwuaXNEaXN0dXJiZWQodGhpcylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1ib2R5XG4gIGdldCBib2R5ICgpIHtcbiAgICBpZiAoIXRoaXNba0JvZHldKSB7XG4gICAgICB0aGlzW2tCb2R5XSA9IFJlYWRhYmxlU3RyZWFtRnJvbSh0aGlzKVxuICAgICAgaWYgKHRoaXNba0NvbnN1bWVdKSB7XG4gICAgICAgIC8vIFRPRE86IElzIHRoaXMgdGhlIGJlc3Qgd2F5IHRvIGZvcmNlIGEgbG9jaz9cbiAgICAgICAgdGhpc1trQm9keV0uZ2V0UmVhZGVyKCkgLy8gRW5zdXJlIHN0cmVhbSBpcyBsb2NrZWQuXG4gICAgICAgIGFzc2VydCh0aGlzW2tCb2R5XS5sb2NrZWQpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzW2tCb2R5XVxuICB9XG5cbiAgZHVtcCAob3B0cykge1xuICAgIGxldCBsaW1pdCA9IG9wdHMgJiYgTnVtYmVyLmlzRmluaXRlKG9wdHMubGltaXQpID8gb3B0cy5saW1pdCA6IDI2MjE0NFxuICAgIGNvbnN0IHNpZ25hbCA9IG9wdHMgJiYgb3B0cy5zaWduYWxcblxuICAgIGlmIChzaWduYWwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2lnbmFsICE9PSAnb2JqZWN0JyB8fCAhKCdhYm9ydGVkJyBpbiBzaWduYWwpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBBYm9ydFNpZ25hbCcpXG4gICAgICAgIH1cbiAgICAgICAgdXRpbC50aHJvd0lmQWJvcnRlZChzaWduYWwpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycilcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbClcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3Qgc2lnbmFsTGlzdGVuZXJDbGVhbnVwID0gc2lnbmFsXG4gICAgICAgID8gdXRpbC5hZGRBYm9ydExpc3RlbmVyKHNpZ25hbCwgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGVzdHJveSgpXG4gICAgICAgIH0pXG4gICAgICAgIDogbm9vcFxuXG4gICAgICB0aGlzXG4gICAgICAgIC5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc2lnbmFsTGlzdGVuZXJDbGVhbnVwKClcbiAgICAgICAgICBpZiAoc2lnbmFsICYmIHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZWplY3Qoc2lnbmFsLnJlYXNvbiB8fCBPYmplY3QuYXNzaWduKG5ldyBFcnJvcignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZCcpLCB7IG5hbWU6ICdBYm9ydEVycm9yJyB9KSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZShudWxsKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLm9uKCdlcnJvcicsIG5vb3ApXG4gICAgICAgIC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykge1xuICAgICAgICAgIGxpbWl0IC09IGNodW5rLmxlbmd0aFxuICAgICAgICAgIGlmIChsaW1pdCA8PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3koKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLnJlc3VtZSgpXG4gICAgfSlcbiAgfVxufVxuXG4vLyBodHRwczovL3N0cmVhbXMuc3BlYy53aGF0d2cub3JnLyNyZWFkYWJsZXN0cmVhbS1sb2NrZWRcbmZ1bmN0aW9uIGlzTG9ja2VkIChzZWxmKSB7XG4gIC8vIENvbnN1bWUgaXMgYW4gaW1wbGljaXQgbG9jay5cbiAgcmV0dXJuIChzZWxmW2tCb2R5XSAmJiBzZWxmW2tCb2R5XS5sb2NrZWQgPT09IHRydWUpIHx8IHNlbGZba0NvbnN1bWVdXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNib2R5LXVudXNhYmxlXG5mdW5jdGlvbiBpc1VudXNhYmxlIChzZWxmKSB7XG4gIHJldHVybiB1dGlsLmlzRGlzdHVyYmVkKHNlbGYpIHx8IGlzTG9ja2VkKHNlbGYpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbnN1bWUgKHN0cmVhbSwgdHlwZSkge1xuICBpZiAoaXNVbnVzYWJsZShzdHJlYW0pKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndW51c2FibGUnKVxuICB9XG5cbiAgYXNzZXJ0KCFzdHJlYW1ba0NvbnN1bWVdKVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgc3RyZWFtW2tDb25zdW1lXSA9IHtcbiAgICAgIHR5cGUsXG4gICAgICBzdHJlYW0sXG4gICAgICByZXNvbHZlLFxuICAgICAgcmVqZWN0LFxuICAgICAgbGVuZ3RoOiAwLFxuICAgICAgYm9keTogW11cbiAgICB9XG5cbiAgICBzdHJlYW1cbiAgICAgIC5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGNvbnN1bWVGaW5pc2godGhpc1trQ29uc3VtZV0sIGVycilcbiAgICAgIH0pXG4gICAgICAub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpc1trQ29uc3VtZV0uYm9keSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN1bWVGaW5pc2godGhpc1trQ29uc3VtZV0sIG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICBwcm9jZXNzLm5leHRUaWNrKGNvbnN1bWVTdGFydCwgc3RyZWFtW2tDb25zdW1lXSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gY29uc3VtZVN0YXJ0IChjb25zdW1lKSB7XG4gIGlmIChjb25zdW1lLmJvZHkgPT09IG51bGwpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHsgX3JlYWRhYmxlU3RhdGU6IHN0YXRlIH0gPSBjb25zdW1lLnN0cmVhbVxuXG4gIGZvciAoY29uc3QgY2h1bmsgb2Ygc3RhdGUuYnVmZmVyKSB7XG4gICAgY29uc3VtZVB1c2goY29uc3VtZSwgY2h1bmspXG4gIH1cblxuICBpZiAoc3RhdGUuZW5kRW1pdHRlZCkge1xuICAgIGNvbnN1bWVFbmQodGhpc1trQ29uc3VtZV0pXG4gIH0gZWxzZSB7XG4gICAgY29uc3VtZS5zdHJlYW0ub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN1bWVFbmQodGhpc1trQ29uc3VtZV0pXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN1bWUuc3RyZWFtLnJlc3VtZSgpXG5cbiAgd2hpbGUgKGNvbnN1bWUuc3RyZWFtLnJlYWQoKSAhPSBudWxsKSB7XG4gICAgLy8gTG9vcFxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVFbmQgKGNvbnN1bWUpIHtcbiAgY29uc3QgeyB0eXBlLCBib2R5LCByZXNvbHZlLCBzdHJlYW0sIGxlbmd0aCB9ID0gY29uc3VtZVxuXG4gIHRyeSB7XG4gICAgaWYgKHR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgcmVzb2x2ZSh0b1VTVlN0cmluZyhCdWZmZXIuY29uY2F0KGJvZHkpKSlcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdqc29uJykge1xuICAgICAgcmVzb2x2ZShKU09OLnBhcnNlKEJ1ZmZlci5jb25jYXQoYm9keSkpKVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2FycmF5QnVmZmVyJykge1xuICAgICAgY29uc3QgZHN0ID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKVxuXG4gICAgICBsZXQgcG9zID0gMFxuICAgICAgZm9yIChjb25zdCBidWYgb2YgYm9keSkge1xuICAgICAgICBkc3Quc2V0KGJ1ZiwgcG9zKVxuICAgICAgICBwb3MgKz0gYnVmLmJ5dGVMZW5ndGhcbiAgICAgIH1cblxuICAgICAgcmVzb2x2ZShkc3QuYnVmZmVyKVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2Jsb2InKSB7XG4gICAgICBpZiAoIUJsb2IpIHtcbiAgICAgICAgQmxvYiA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJsb2JcbiAgICAgIH1cbiAgICAgIHJlc29sdmUobmV3IEJsb2IoYm9keSwgeyB0eXBlOiBzdHJlYW1ba0NvbnRlbnRUeXBlXSB9KSlcbiAgICB9XG5cbiAgICBjb25zdW1lRmluaXNoKGNvbnN1bWUpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHN0cmVhbS5kZXN0cm95KGVycilcbiAgfVxufVxuXG5mdW5jdGlvbiBjb25zdW1lUHVzaCAoY29uc3VtZSwgY2h1bmspIHtcbiAgY29uc3VtZS5sZW5ndGggKz0gY2h1bmsubGVuZ3RoXG4gIGNvbnN1bWUuYm9keS5wdXNoKGNodW5rKVxufVxuXG5mdW5jdGlvbiBjb25zdW1lRmluaXNoIChjb25zdW1lLCBlcnIpIHtcbiAgaWYgKGNvbnN1bWUuYm9keSA9PT0gbnVsbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKGVycikge1xuICAgIGNvbnN1bWUucmVqZWN0KGVycilcbiAgfSBlbHNlIHtcbiAgICBjb25zdW1lLnJlc29sdmUoKVxuICB9XG5cbiAgY29uc3VtZS50eXBlID0gbnVsbFxuICBjb25zdW1lLnN0cmVhbSA9IG51bGxcbiAgY29uc3VtZS5yZXNvbHZlID0gbnVsbFxuICBjb25zdW1lLnJlamVjdCA9IG51bGxcbiAgY29uc3VtZS5sZW5ndGggPSAwXG4gIGNvbnN1bWUuYm9keSA9IG51bGxcbn1cbiIsICJjb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3Qge1xuICBSZXNwb25zZVN0YXR1c0NvZGVFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsgdG9VU1ZTdHJpbmcgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5cbmFzeW5jIGZ1bmN0aW9uIGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayAoeyBjYWxsYmFjaywgYm9keSwgY29udGVudFR5cGUsIHN0YXR1c0NvZGUsIHN0YXR1c01lc3NhZ2UsIGhlYWRlcnMgfSkge1xuICBhc3NlcnQoYm9keSlcblxuICBsZXQgY2h1bmtzID0gW11cbiAgbGV0IGxpbWl0ID0gMFxuXG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgYm9keSkge1xuICAgIGNodW5rcy5wdXNoKGNodW5rKVxuICAgIGxpbWl0ICs9IGNodW5rLmxlbmd0aFxuICAgIGlmIChsaW1pdCA+IDEyOCAqIDEwMjQpIHtcbiAgICAgIGNodW5rcyA9IG51bGxcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXR1c0NvZGUgPT09IDIwNCB8fCAhY29udGVudFR5cGUgfHwgIWNodW5rcykge1xuICAgIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2ssIG5ldyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcihgUmVzcG9uc2Ugc3RhdHVzIGNvZGUgJHtzdGF0dXNDb2RlfSR7c3RhdHVzTWVzc2FnZSA/IGA6ICR7c3RhdHVzTWVzc2FnZX1gIDogJyd9YCwgc3RhdHVzQ29kZSwgaGVhZGVycykpXG4gICAgcmV0dXJuXG4gIH1cblxuICB0cnkge1xuICAgIGlmIChjb250ZW50VHlwZS5zdGFydHNXaXRoKCdhcHBsaWNhdGlvbi9qc29uJykpIHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSBKU09OLnBhcnNlKHRvVVNWU3RyaW5nKEJ1ZmZlci5jb25jYXQoY2h1bmtzKSkpXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrLCBuZXcgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IoYFJlc3BvbnNlIHN0YXR1cyBjb2RlICR7c3RhdHVzQ29kZX0ke3N0YXR1c01lc3NhZ2UgPyBgOiAke3N0YXR1c01lc3NhZ2V9YCA6ICcnfWAsIHN0YXR1c0NvZGUsIGhlYWRlcnMsIHBheWxvYWQpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoJ3RleHQvJykpIHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB0b1VTVlN0cmluZyhCdWZmZXIuY29uY2F0KGNodW5rcykpXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrLCBuZXcgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IoYFJlc3BvbnNlIHN0YXR1cyBjb2RlICR7c3RhdHVzQ29kZX0ke3N0YXR1c01lc3NhZ2UgPyBgOiAke3N0YXR1c01lc3NhZ2V9YCA6ICcnfWAsIHN0YXR1c0NvZGUsIGhlYWRlcnMsIHBheWxvYWQpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBQcm9jZXNzIGluIGEgZmFsbGJhY2sgaWYgZXJyb3JcbiAgfVxuXG4gIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2ssIG5ldyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcihgUmVzcG9uc2Ugc3RhdHVzIGNvZGUgJHtzdGF0dXNDb2RlfSR7c3RhdHVzTWVzc2FnZSA/IGA6ICR7c3RhdHVzTWVzc2FnZX1gIDogJyd9YCwgc3RhdHVzQ29kZSwgaGVhZGVycykpXG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2sgfVxuIiwgImNvbnN0IHsgYWRkQWJvcnRMaXN0ZW5lciB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgUmVxdWVzdEFib3J0ZWRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG5jb25zdCBrTGlzdGVuZXIgPSBTeW1ib2woJ2tMaXN0ZW5lcicpXG5jb25zdCBrU2lnbmFsID0gU3ltYm9sKCdrU2lnbmFsJylcblxuZnVuY3Rpb24gYWJvcnQgKHNlbGYpIHtcbiAgaWYgKHNlbGYuYWJvcnQpIHtcbiAgICBzZWxmLmFib3J0KClcbiAgfSBlbHNlIHtcbiAgICBzZWxmLm9uRXJyb3IobmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRTaWduYWwgKHNlbGYsIHNpZ25hbCkge1xuICBzZWxmW2tTaWduYWxdID0gbnVsbFxuICBzZWxmW2tMaXN0ZW5lcl0gPSBudWxsXG5cbiAgaWYgKCFzaWduYWwpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgIGFib3J0KHNlbGYpXG4gICAgcmV0dXJuXG4gIH1cblxuICBzZWxmW2tTaWduYWxdID0gc2lnbmFsXG4gIHNlbGZba0xpc3RlbmVyXSA9ICgpID0+IHtcbiAgICBhYm9ydChzZWxmKVxuICB9XG5cbiAgYWRkQWJvcnRMaXN0ZW5lcihzZWxmW2tTaWduYWxdLCBzZWxmW2tMaXN0ZW5lcl0pXG59XG5cbmZ1bmN0aW9uIHJlbW92ZVNpZ25hbCAoc2VsZikge1xuICBpZiAoIXNlbGZba1NpZ25hbF0pIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmICgncmVtb3ZlRXZlbnRMaXN0ZW5lcicgaW4gc2VsZltrU2lnbmFsXSkge1xuICAgIHNlbGZba1NpZ25hbF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBzZWxmW2tMaXN0ZW5lcl0pXG4gIH0gZWxzZSB7XG4gICAgc2VsZltrU2lnbmFsXS5yZW1vdmVMaXN0ZW5lcignYWJvcnQnLCBzZWxmW2tMaXN0ZW5lcl0pXG4gIH1cblxuICBzZWxmW2tTaWduYWxdID0gbnVsbFxuICBzZWxmW2tMaXN0ZW5lcl0gPSBudWxsXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhZGRTaWduYWwsXG4gIHJlbW92ZVNpZ25hbFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBSZWFkYWJsZSA9IHJlcXVpcmUoJy4vcmVhZGFibGUnKVxuY29uc3Qge1xuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgUmVxdWVzdEFib3J0ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2sgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcblxuY2xhc3MgUmVxdWVzdEhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2lnbmFsLCBtZXRob2QsIG9wYXF1ZSwgYm9keSwgb25JbmZvLCByZXNwb25zZUhlYWRlcnMsIHRocm93T25FcnJvciwgaGlnaFdhdGVyTWFyayB9ID0gb3B0c1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNhbGxiYWNrJylcbiAgICAgIH1cblxuICAgICAgaWYgKGhpZ2hXYXRlck1hcmsgJiYgKHR5cGVvZiBoaWdoV2F0ZXJNYXJrICE9PSAnbnVtYmVyJyB8fCBoaWdoV2F0ZXJNYXJrIDwgMCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGhpZ2hXYXRlck1hcmsnKVxuICAgICAgfVxuXG4gICAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignc2lnbmFsIG11c3QgYmUgYW4gRXZlbnRFbWl0dGVyIG9yIEV2ZW50VGFyZ2V0JylcbiAgICAgIH1cblxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBtZXRob2QnKVxuICAgICAgfVxuXG4gICAgICBpZiAob25JbmZvICYmIHR5cGVvZiBvbkluZm8gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uSW5mbyBjYWxsYmFjaycpXG4gICAgICB9XG5cbiAgICAgIHN1cGVyKCdVTkRJQ0lfUkVRVUVTVCcpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgICB1dGlsLmRlc3Ryb3koYm9keS5vbignZXJyb3InLCB1dGlsLm5vcCksIGVycilcbiAgICAgIH1cbiAgICAgIHRocm93IGVyclxuICAgIH1cblxuICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzIHx8IG51bGxcbiAgICB0aGlzLm9wYXF1ZSA9IG9wYXF1ZSB8fCBudWxsXG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5yZXMgPSBudWxsXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmJvZHkgPSBib2R5XG4gICAgdGhpcy50cmFpbGVycyA9IHt9XG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbFxuICAgIHRoaXMub25JbmZvID0gb25JbmZvIHx8IG51bGxcbiAgICB0aGlzLnRocm93T25FcnJvciA9IHRocm93T25FcnJvclxuICAgIHRoaXMuaGlnaFdhdGVyTWFyayA9IGhpZ2hXYXRlck1hcmtcblxuICAgIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICBib2R5Lm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5vbkVycm9yKGVycilcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgYWRkU2lnbmFsKHRoaXMsIHNpZ25hbClcbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQsIGNvbnRleHQpIHtcbiAgICBpZiAoIXRoaXMuY2FsbGJhY2spIHtcbiAgICAgIHRocm93IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICB9XG5cbiAgICB0aGlzLmFib3J0ID0gYWJvcnRcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0XG4gIH1cblxuICBvbkhlYWRlcnMgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHJlc3VtZSwgc3RhdHVzTWVzc2FnZSkge1xuICAgIGNvbnN0IHsgY2FsbGJhY2ssIG9wYXF1ZSwgYWJvcnQsIGNvbnRleHQsIHJlc3BvbnNlSGVhZGVycywgaGlnaFdhdGVyTWFyayB9ID0gdGhpc1xuXG4gICAgY29uc3QgaGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgaWYgKHRoaXMub25JbmZvKSB7XG4gICAgICAgIHRoaXMub25JbmZvKHsgc3RhdHVzQ29kZSwgaGVhZGVycyB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKSA6IGhlYWRlcnNcbiAgICBjb25zdCBjb250ZW50VHlwZSA9IHBhcnNlZEhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddXG4gICAgY29uc3QgYm9keSA9IG5ldyBSZWFkYWJsZSh7IHJlc3VtZSwgYWJvcnQsIGNvbnRlbnRUeXBlLCBoaWdoV2F0ZXJNYXJrIH0pXG5cbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgIHRoaXMucmVzID0gYm9keVxuICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMudGhyb3dPbkVycm9yICYmIHN0YXR1c0NvZGUgPj0gNDAwKSB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjaywgbnVsbCxcbiAgICAgICAgICB7IGNhbGxiYWNrLCBib2R5LCBjb250ZW50VHlwZSwgc3RhdHVzQ29kZSwgc3RhdHVzTWVzc2FnZSwgaGVhZGVycyB9XG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBudWxsLCB7XG4gICAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgIHRyYWlsZXJzOiB0aGlzLnRyYWlsZXJzLFxuICAgICAgICAgIG9wYXF1ZSxcbiAgICAgICAgICBib2R5LFxuICAgICAgICAgIGNvbnRleHRcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcbiAgICByZXR1cm4gcmVzLnB1c2goY2h1bmspXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIHV0aWwucGFyc2VIZWFkZXJzKHRyYWlsZXJzLCB0aGlzLnRyYWlsZXJzKVxuXG4gICAgcmVzLnB1c2gobnVsbClcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgcmVzLCBjYWxsYmFjaywgYm9keSwgb3BhcXVlIH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgLy8gVE9ETzogRG9lcyB0aGlzIG5lZWQgcXVldWVNaWNyb3Rhc2s/XG4gICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyLCB7IG9wYXF1ZSB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAocmVzKSB7XG4gICAgICB0aGlzLnJlcyA9IG51bGxcbiAgICAgIC8vIEVuc3VyZSBhbGwgcXVldWVkIGhhbmRsZXJzIGFyZSBpbnZva2VkIGJlZm9yZSBkZXN0cm95aW5nIHJlcy5cbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgdXRpbC5kZXN0cm95KHJlcywgZXJyKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoYm9keSkge1xuICAgICAgdGhpcy5ib2R5ID0gbnVsbFxuICAgICAgdXRpbC5kZXN0cm95KGJvZHksIGVycilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVxdWVzdCAob3B0cywgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgcmVxdWVzdC5jYWxsKHRoaXMsIG9wdHMsIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICB0aGlzLmRpc3BhdGNoKG9wdHMsIG5ldyBSZXF1ZXN0SGFuZGxlcihvcHRzLCBjYWxsYmFjaykpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgICBjb25zdCBvcGFxdWUgPSBvcHRzICYmIG9wdHMub3BhcXVlXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gY2FsbGJhY2soZXJyLCB7IG9wYXF1ZSB9KSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVlc3Rcbm1vZHVsZS5leHBvcnRzLlJlcXVlc3RIYW5kbGVyID0gUmVxdWVzdEhhbmRsZXJcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBmaW5pc2hlZCwgUGFzc1Rocm91Z2ggfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcixcbiAgUmVxdWVzdEFib3J0ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2sgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcblxuY2xhc3MgU3RyZWFtSGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgZmFjdG9yeSwgY2FsbGJhY2spIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG1ldGhvZCwgb3BhcXVlLCBib2R5LCBvbkluZm8sIHJlc3BvbnNlSGVhZGVycywgdGhyb3dPbkVycm9yIH0gPSBvcHRzXG5cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGZhY3RvcnknKVxuICAgICAgfVxuXG4gICAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignc2lnbmFsIG11c3QgYmUgYW4gRXZlbnRFbWl0dGVyIG9yIEV2ZW50VGFyZ2V0JylcbiAgICAgIH1cblxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBtZXRob2QnKVxuICAgICAgfVxuXG4gICAgICBpZiAob25JbmZvICYmIHR5cGVvZiBvbkluZm8gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uSW5mbyBjYWxsYmFjaycpXG4gICAgICB9XG5cbiAgICAgIHN1cGVyKCdVTkRJQ0lfU1RSRUFNJylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShib2R5Lm9uKCdlcnJvcicsIHV0aWwubm9wKSwgZXJyKVxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuXG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgfHwgbnVsbFxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLmZhY3RvcnkgPSBmYWN0b3J5XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5yZXMgPSBudWxsXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG4gICAgdGhpcy50cmFpbGVycyA9IG51bGxcbiAgICB0aGlzLmJvZHkgPSBib2R5XG4gICAgdGhpcy5vbkluZm8gPSBvbkluZm8gfHwgbnVsbFxuICAgIHRoaXMudGhyb3dPbkVycm9yID0gdGhyb3dPbkVycm9yIHx8IGZhbHNlXG5cbiAgICBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgYm9keS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMub25FcnJvcihlcnIpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgaWYgKCF0aGlzLmNhbGxiYWNrKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCByZXN1bWUsIHN0YXR1c01lc3NhZ2UpIHtcbiAgICBjb25zdCB7IGZhY3RvcnksIG9wYXF1ZSwgY29udGV4dCwgY2FsbGJhY2ssIHJlc3BvbnNlSGVhZGVycyB9ID0gdGhpc1xuXG4gICAgY29uc3QgaGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgaWYgKHRoaXMub25JbmZvKSB7XG4gICAgICAgIHRoaXMub25JbmZvKHsgc3RhdHVzQ29kZSwgaGVhZGVycyB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5mYWN0b3J5ID0gbnVsbFxuXG4gICAgbGV0IHJlc1xuXG4gICAgaWYgKHRoaXMudGhyb3dPbkVycm9yICYmIHN0YXR1c0NvZGUgPj0gNDAwKSB7XG4gICAgICBjb25zdCBwYXJzZWRIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIDogaGVhZGVyc1xuICAgICAgY29uc3QgY29udGVudFR5cGUgPSBwYXJzZWRIZWFkZXJzWydjb250ZW50LXR5cGUnXVxuICAgICAgcmVzID0gbmV3IFBhc3NUaHJvdWdoKClcblxuICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjaywgbnVsbCxcbiAgICAgICAgeyBjYWxsYmFjaywgYm9keTogcmVzLCBjb250ZW50VHlwZSwgc3RhdHVzQ29kZSwgc3RhdHVzTWVzc2FnZSwgaGVhZGVycyB9XG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChmYWN0b3J5ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICByZXMgPSB0aGlzLnJ1bkluQXN5bmNTY29wZShmYWN0b3J5LCBudWxsLCB7XG4gICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIG9wYXF1ZSxcbiAgICAgICAgY29udGV4dFxuICAgICAgfSlcblxuICAgICAgaWYgKFxuICAgICAgICAhcmVzIHx8XG4gICAgICAgIHR5cGVvZiByZXMud3JpdGUgIT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgdHlwZW9mIHJlcy5lbmQgIT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgdHlwZW9mIHJlcy5vbiAhPT0gJ2Z1bmN0aW9uJ1xuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcignZXhwZWN0ZWQgV3JpdGFibGUnKVxuICAgICAgfVxuXG4gICAgICAvLyBUT0RPOiBBdm9pZCBmaW5pc2hlZC4gSXQgcmVnaXN0ZXJzIGFuIHVubmVjZXNzYXJ5IGFtb3VudCBvZiBsaXN0ZW5lcnMuXG4gICAgICBmaW5pc2hlZChyZXMsIHsgcmVhZGFibGU6IGZhbHNlIH0sIChlcnIpID0+IHtcbiAgICAgICAgY29uc3QgeyBjYWxsYmFjaywgcmVzLCBvcGFxdWUsIHRyYWlsZXJzLCBhYm9ydCB9ID0gdGhpc1xuXG4gICAgICAgIHRoaXMucmVzID0gbnVsbFxuICAgICAgICBpZiAoZXJyIHx8ICFyZXMucmVhZGFibGUpIHtcbiAgICAgICAgICB1dGlsLmRlc3Ryb3kocmVzLCBlcnIpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyIHx8IG51bGwsIHsgb3BhcXVlLCB0cmFpbGVycyB9KVxuXG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBhYm9ydCgpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmVzLm9uKCdkcmFpbicsIHJlc3VtZSlcblxuICAgIHRoaXMucmVzID0gcmVzXG5cbiAgICBjb25zdCBuZWVkRHJhaW4gPSByZXMud3JpdGFibGVOZWVkRHJhaW4gIT09IHVuZGVmaW5lZFxuICAgICAgPyByZXMud3JpdGFibGVOZWVkRHJhaW5cbiAgICAgIDogcmVzLl93cml0YWJsZVN0YXRlICYmIHJlcy5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW5cblxuICAgIHJldHVybiBuZWVkRHJhaW4gIT09IHRydWVcbiAgfVxuXG4gIG9uRGF0YSAoY2h1bmspIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuXG4gICAgcmV0dXJuIHJlcyA/IHJlcy53cml0ZShjaHVuaykgOiB0cnVlXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIGlmICghcmVzKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnRyYWlsZXJzID0gdXRpbC5wYXJzZUhlYWRlcnModHJhaWxlcnMpXG5cbiAgICByZXMuZW5kKClcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgcmVzLCBjYWxsYmFjaywgb3BhcXVlLCBib2R5IH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIHRoaXMuZmFjdG9yeSA9IG51bGxcblxuICAgIGlmIChyZXMpIHtcbiAgICAgIHRoaXMucmVzID0gbnVsbFxuICAgICAgdXRpbC5kZXN0cm95KHJlcywgZXJyKVxuICAgIH0gZWxzZSBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIsIHsgb3BhcXVlIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChib2R5KSB7XG4gICAgICB0aGlzLmJvZHkgPSBudWxsXG4gICAgICB1dGlsLmRlc3Ryb3koYm9keSwgZXJyKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzdHJlYW0gKG9wdHMsIGZhY3RvcnksIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHN0cmVhbS5jYWxsKHRoaXMsIG9wdHMsIGZhY3RvcnksIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICB0aGlzLmRpc3BhdGNoKG9wdHMsIG5ldyBTdHJlYW1IYW5kbGVyKG9wdHMsIGZhY3RvcnksIGNhbGxiYWNrKSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHMgJiYgb3B0cy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyZWFtXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgUmVhZGFibGUsXG4gIER1cGxleCxcbiAgUGFzc1Rocm91Z2hcbn0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3Qge1xuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgSW52YWxpZFJldHVyblZhbHVlRXJyb3IsXG4gIFJlcXVlc3RBYm9ydGVkRXJyb3Jcbn0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgQXN5bmNSZXNvdXJjZSB9ID0gcmVxdWlyZSgnYXN5bmNfaG9va3MnKVxuY29uc3QgeyBhZGRTaWduYWwsIHJlbW92ZVNpZ25hbCB9ID0gcmVxdWlyZSgnLi9hYm9ydC1zaWduYWwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxuY29uc3Qga1Jlc3VtZSA9IFN5bWJvbCgncmVzdW1lJylcblxuY2xhc3MgUGlwZWxpbmVSZXF1ZXN0IGV4dGVuZHMgUmVhZGFibGUge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoeyBhdXRvRGVzdHJveTogdHJ1ZSB9KVxuXG4gICAgdGhpc1trUmVzdW1lXSA9IG51bGxcbiAgfVxuXG4gIF9yZWFkICgpIHtcbiAgICBjb25zdCB7IFtrUmVzdW1lXTogcmVzdW1lIH0gPSB0aGlzXG5cbiAgICBpZiAocmVzdW1lKSB7XG4gICAgICB0aGlzW2tSZXN1bWVdID0gbnVsbFxuICAgICAgcmVzdW1lKClcbiAgICB9XG4gIH1cblxuICBfZGVzdHJveSAoZXJyLCBjYWxsYmFjaykge1xuICAgIHRoaXMuX3JlYWQoKVxuXG4gICAgY2FsbGJhY2soZXJyKVxuICB9XG59XG5cbmNsYXNzIFBpcGVsaW5lUmVzcG9uc2UgZXh0ZW5kcyBSZWFkYWJsZSB7XG4gIGNvbnN0cnVjdG9yIChyZXN1bWUpIHtcbiAgICBzdXBlcih7IGF1dG9EZXN0cm95OiB0cnVlIH0pXG4gICAgdGhpc1trUmVzdW1lXSA9IHJlc3VtZVxuICB9XG5cbiAgX3JlYWQgKCkge1xuICAgIHRoaXNba1Jlc3VtZV0oKVxuICB9XG5cbiAgX2Rlc3Ryb3kgKGVyciwgY2FsbGJhY2spIHtcbiAgICBpZiAoIWVyciAmJiAhdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgICBlcnIgPSBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgY2FsbGJhY2soZXJyKVxuICB9XG59XG5cbmNsYXNzIFBpcGVsaW5lSGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgaGFuZGxlcikge1xuICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBoYW5kbGVyJylcbiAgICB9XG5cbiAgICBjb25zdCB7IHNpZ25hbCwgbWV0aG9kLCBvcGFxdWUsIG9uSW5mbywgcmVzcG9uc2VIZWFkZXJzIH0gPSBvcHRzXG5cbiAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgfVxuXG4gICAgaWYgKG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgbWV0aG9kJylcbiAgICB9XG5cbiAgICBpZiAob25JbmZvICYmIHR5cGVvZiBvbkluZm8gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkluZm8gY2FsbGJhY2snKVxuICAgIH1cblxuICAgIHN1cGVyKCdVTkRJQ0lfUElQRUxJTkUnKVxuXG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWUgfHwgbnVsbFxuICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzIHx8IG51bGxcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG4gICAgdGhpcy5vbkluZm8gPSBvbkluZm8gfHwgbnVsbFxuXG4gICAgdGhpcy5yZXEgPSBuZXcgUGlwZWxpbmVSZXF1ZXN0KCkub24oJ2Vycm9yJywgdXRpbC5ub3ApXG5cbiAgICB0aGlzLnJldCA9IG5ldyBEdXBsZXgoe1xuICAgICAgcmVhZGFibGVPYmplY3RNb2RlOiBvcHRzLm9iamVjdE1vZGUsXG4gICAgICBhdXRvRGVzdHJveTogdHJ1ZSxcbiAgICAgIHJlYWQ6ICgpID0+IHtcbiAgICAgICAgY29uc3QgeyBib2R5IH0gPSB0aGlzXG5cbiAgICAgICAgaWYgKGJvZHkgJiYgYm9keS5yZXN1bWUpIHtcbiAgICAgICAgICBib2R5LnJlc3VtZSgpXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB3cml0ZTogKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spID0+IHtcbiAgICAgICAgY29uc3QgeyByZXEgfSA9IHRoaXNcblxuICAgICAgICBpZiAocmVxLnB1c2goY2h1bmssIGVuY29kaW5nKSB8fCByZXEuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkKSB7XG4gICAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcVtrUmVzdW1lXSA9IGNhbGxiYWNrXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBkZXN0cm95OiAoZXJyLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBjb25zdCB7IGJvZHksIHJlcSwgcmVzLCByZXQsIGFib3J0IH0gPSB0aGlzXG5cbiAgICAgICAgaWYgKCFlcnIgJiYgIXJldC5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgICAgICAgZXJyID0gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFib3J0ICYmIGVycikge1xuICAgICAgICAgIGFib3J0KClcbiAgICAgICAgfVxuXG4gICAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgICAgIHV0aWwuZGVzdHJveShyZXEsIGVycilcbiAgICAgICAgdXRpbC5kZXN0cm95KHJlcywgZXJyKVxuXG4gICAgICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgICAgIGNhbGxiYWNrKGVycilcbiAgICAgIH1cbiAgICB9KS5vbigncHJlZmluaXNoJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyByZXEgfSA9IHRoaXNcblxuICAgICAgLy8gTm9kZSA8IDE1IGRvZXMgbm90IGNhbGwgX2ZpbmFsIGluIHNhbWUgdGljay5cbiAgICAgIHJlcS5wdXNoKG51bGwpXG4gICAgfSlcblxuICAgIHRoaXMucmVzID0gbnVsbFxuXG4gICAgYWRkU2lnbmFsKHRoaXMsIHNpZ25hbClcbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQsIGNvbnRleHQpIHtcbiAgICBjb25zdCB7IHJldCwgcmVzIH0gPSB0aGlzXG5cbiAgICBhc3NlcnQoIXJlcywgJ3BpcGVsaW5lIGNhbm5vdCBiZSByZXRyaWVkJylcblxuICAgIGlmIChyZXQuZGVzdHJveWVkKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCByZXN1bWUpIHtcbiAgICBjb25zdCB7IG9wYXF1ZSwgaGFuZGxlciwgY29udGV4dCB9ID0gdGhpc1xuXG4gICAgaWYgKHN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgIGlmICh0aGlzLm9uSW5mbykge1xuICAgICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5yZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZVJhd0hlYWRlcnMocmF3SGVhZGVycykgOiB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuICAgICAgICB0aGlzLm9uSW5mbyh7IHN0YXR1c0NvZGUsIGhlYWRlcnMgfSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMucmVzID0gbmV3IFBpcGVsaW5lUmVzcG9uc2UocmVzdW1lKVxuXG4gICAgbGV0IGJvZHlcbiAgICB0cnkge1xuICAgICAgdGhpcy5oYW5kbGVyID0gbnVsbFxuICAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMucmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcbiAgICAgIGJvZHkgPSB0aGlzLnJ1bkluQXN5bmNTY29wZShoYW5kbGVyLCBudWxsLCB7XG4gICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIG9wYXF1ZSxcbiAgICAgICAgYm9keTogdGhpcy5yZXMsXG4gICAgICAgIGNvbnRleHRcbiAgICAgIH0pXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLnJlcy5vbignZXJyb3InLCB1dGlsLm5vcClcbiAgICAgIHRocm93IGVyclxuICAgIH1cblxuICAgIGlmICghYm9keSB8fCB0eXBlb2YgYm9keS5vbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRSZXR1cm5WYWx1ZUVycm9yKCdleHBlY3RlZCBSZWFkYWJsZScpXG4gICAgfVxuXG4gICAgYm9keVxuICAgICAgLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmV0LCBib2R5IH0gPSB0aGlzXG5cbiAgICAgICAgaWYgKCFyZXQucHVzaChjaHVuaykgJiYgYm9keS5wYXVzZSkge1xuICAgICAgICAgIGJvZHkucGF1c2UoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgICAgY29uc3QgeyByZXQgfSA9IHRoaXNcblxuICAgICAgICB1dGlsLmRlc3Ryb3kocmV0LCBlcnIpXG4gICAgICB9KVxuICAgICAgLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmV0IH0gPSB0aGlzXG5cbiAgICAgICAgcmV0LnB1c2gobnVsbClcbiAgICAgIH0pXG4gICAgICAub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB7IHJldCB9ID0gdGhpc1xuXG4gICAgICAgIGlmICghcmV0Ll9yZWFkYWJsZVN0YXRlLmVuZGVkKSB7XG4gICAgICAgICAgdXRpbC5kZXN0cm95KHJldCwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgIHRoaXMuYm9keSA9IGJvZHlcbiAgfVxuXG4gIG9uRGF0YSAoY2h1bmspIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuICAgIHJldHVybiByZXMucHVzaChjaHVuaylcbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcbiAgICByZXMucHVzaChudWxsKVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgY29uc3QgeyByZXQgfSA9IHRoaXNcbiAgICB0aGlzLmhhbmRsZXIgPSBudWxsXG4gICAgdXRpbC5kZXN0cm95KHJldCwgZXJyKVxuICB9XG59XG5cbmZ1bmN0aW9uIHBpcGVsaW5lIChvcHRzLCBoYW5kbGVyKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGlwZWxpbmVIYW5kbGVyID0gbmV3IFBpcGVsaW5lSGFuZGxlcihvcHRzLCBoYW5kbGVyKVxuICAgIHRoaXMuZGlzcGF0Y2goeyAuLi5vcHRzLCBib2R5OiBwaXBlbGluZUhhbmRsZXIucmVxIH0sIHBpcGVsaW5lSGFuZGxlcilcbiAgICByZXR1cm4gcGlwZWxpbmVIYW5kbGVyLnJldFxuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gbmV3IFBhc3NUaHJvdWdoKCkuZGVzdHJveShlcnIpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwaXBlbGluZVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBSZXF1ZXN0QWJvcnRlZEVycm9yLCBTb2NrZXRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgeyBBc3luY1Jlc291cmNlIH0gPSByZXF1aXJlKCdhc3luY19ob29rcycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbmNsYXNzIFVwZ3JhZGVIYW5kbGVyIGV4dGVuZHMgQXN5bmNSZXNvdXJjZSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBjYWxsYmFjaykge1xuICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2lnbmFsLCBvcGFxdWUsIHJlc3BvbnNlSGVhZGVycyB9ID0gb3B0c1xuXG4gICAgaWYgKHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsLm9uICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgIH1cblxuICAgIHN1cGVyKCdVTkRJQ0lfVVBHUkFERScpXG5cbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWUgfHwgbnVsbFxuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbFxuXG4gICAgYWRkU2lnbmFsKHRoaXMsIHNpZ25hbClcbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQsIGNvbnRleHQpIHtcbiAgICBpZiAoIXRoaXMuY2FsbGJhY2spIHtcbiAgICAgIHRocm93IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICB9XG5cbiAgICB0aGlzLmFib3J0ID0gYWJvcnRcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG4gIH1cblxuICBvbkhlYWRlcnMgKCkge1xuICAgIHRocm93IG5ldyBTb2NrZXRFcnJvcignYmFkIHVwZ3JhZGUnLCBudWxsKVxuICB9XG5cbiAgb25VcGdyYWRlIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCBzb2NrZXQpIHtcbiAgICBjb25zdCB7IGNhbGxiYWNrLCBvcGFxdWUsIGNvbnRleHQgfSA9IHRoaXNcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzdGF0dXNDb2RlLCAxMDEpXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMucmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcbiAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgbnVsbCwge1xuICAgICAgaGVhZGVycyxcbiAgICAgIHNvY2tldCxcbiAgICAgIG9wYXF1ZSxcbiAgICAgIGNvbnRleHRcbiAgICB9KVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlIH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIGVyciwgeyBvcGFxdWUgfSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZ3JhZGUgKG9wdHMsIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHVwZ3JhZGUuY2FsbCh0aGlzLCBvcHRzLCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgIHJldHVybiBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUoZGF0YSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgdXBncmFkZUhhbmRsZXIgPSBuZXcgVXBncmFkZUhhbmRsZXIob3B0cywgY2FsbGJhY2spXG4gICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICAuLi5vcHRzLFxuICAgICAgbWV0aG9kOiBvcHRzLm1ldGhvZCB8fCAnR0VUJyxcbiAgICAgIHVwZ3JhZGU6IG9wdHMucHJvdG9jb2wgfHwgJ1dlYnNvY2tldCdcbiAgICB9LCB1cGdyYWRlSGFuZGxlcilcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHMgJiYgb3B0cy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdXBncmFkZVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIFJlcXVlc3RBYm9ydGVkRXJyb3IsIFNvY2tldEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcblxuY2xhc3MgQ29ubmVjdEhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG9wYXF1ZSwgcmVzcG9uc2VIZWFkZXJzIH0gPSBvcHRzXG5cbiAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgfVxuXG4gICAgc3VwZXIoJ1VORElDSV9DT05ORUNUJylcblxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgaWYgKCF0aGlzLmNhbGxiYWNrKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxuICB9XG5cbiAgb25IZWFkZXJzICgpIHtcbiAgICB0aHJvdyBuZXcgU29ja2V0RXJyb3IoJ2JhZCBjb25uZWN0JywgbnVsbClcbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgc29ja2V0KSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlLCBjb250ZXh0IH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG5cbiAgICBsZXQgaGVhZGVycyA9IHJhd0hlYWRlcnNcbiAgICAvLyBJbmRpY2F0ZXMgaXMgYW4gSFRUUDJTZXNzaW9uXG4gICAgaWYgKGhlYWRlcnMgIT0gbnVsbCkge1xuICAgICAgaGVhZGVycyA9IHRoaXMucmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcbiAgICB9XG5cbiAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgbnVsbCwge1xuICAgICAgc3RhdHVzQ29kZSxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBzb2NrZXQsXG4gICAgICBvcGFxdWUsXG4gICAgICBjb250ZXh0XG4gICAgfSlcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgY2FsbGJhY2ssIG9wYXF1ZSB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIsIHsgb3BhcXVlIH0pXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb25uZWN0IChvcHRzLCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25uZWN0LmNhbGwodGhpcywgb3B0cywgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4gZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGNvbm5lY3RIYW5kbGVyID0gbmV3IENvbm5lY3RIYW5kbGVyKG9wdHMsIGNhbGxiYWNrKVxuICAgIHRoaXMuZGlzcGF0Y2goeyAuLi5vcHRzLCBtZXRob2Q6ICdDT05ORUNUJyB9LCBjb25uZWN0SGFuZGxlcilcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHMgJiYgb3B0cy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29ubmVjdFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cy5yZXF1ZXN0ID0gcmVxdWlyZSgnLi9hcGktcmVxdWVzdCcpXG5tb2R1bGUuZXhwb3J0cy5zdHJlYW0gPSByZXF1aXJlKCcuL2FwaS1zdHJlYW0nKVxubW9kdWxlLmV4cG9ydHMucGlwZWxpbmUgPSByZXF1aXJlKCcuL2FwaS1waXBlbGluZScpXG5tb2R1bGUuZXhwb3J0cy51cGdyYWRlID0gcmVxdWlyZSgnLi9hcGktdXBncmFkZScpXG5tb2R1bGUuZXhwb3J0cy5jb25uZWN0ID0gcmVxdWlyZSgnLi9hcGktY29ubmVjdCcpXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgVW5kaWNpRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuY2xhc3MgTW9ja05vdE1hdGNoZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIE1vY2tOb3RNYXRjaGVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ01vY2tOb3RNYXRjaGVkRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnVGhlIHJlcXVlc3QgZG9lcyBub3QgbWF0Y2ggYW55IHJlZ2lzdGVyZWQgbW9jayBkaXNwYXRjaGVzJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfTU9DS19FUlJfTU9DS19OT1RfTUFUQ0hFRCdcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgTW9ja05vdE1hdGNoZWRFcnJvclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga0FnZW50OiBTeW1ib2woJ2FnZW50JyksXG4gIGtPcHRpb25zOiBTeW1ib2woJ29wdGlvbnMnKSxcbiAga0ZhY3Rvcnk6IFN5bWJvbCgnZmFjdG9yeScpLFxuICBrRGlzcGF0Y2hlczogU3ltYm9sKCdkaXNwYXRjaGVzJyksXG4gIGtEaXNwYXRjaEtleTogU3ltYm9sKCdkaXNwYXRjaCBrZXknKSxcbiAga0RlZmF1bHRIZWFkZXJzOiBTeW1ib2woJ2RlZmF1bHQgaGVhZGVycycpLFxuICBrRGVmYXVsdFRyYWlsZXJzOiBTeW1ib2woJ2RlZmF1bHQgdHJhaWxlcnMnKSxcbiAga0NvbnRlbnRMZW5ndGg6IFN5bWJvbCgnY29udGVudCBsZW5ndGgnKSxcbiAga01vY2tBZ2VudDogU3ltYm9sKCdtb2NrIGFnZW50JyksXG4gIGtNb2NrQWdlbnRTZXQ6IFN5bWJvbCgnbW9jayBhZ2VudCBzZXQnKSxcbiAga01vY2tBZ2VudEdldDogU3ltYm9sKCdtb2NrIGFnZW50IGdldCcpLFxuICBrTW9ja0Rpc3BhdGNoOiBTeW1ib2woJ21vY2sgZGlzcGF0Y2gnKSxcbiAga0Nsb3NlOiBTeW1ib2woJ2Nsb3NlJyksXG4gIGtPcmlnaW5hbENsb3NlOiBTeW1ib2woJ29yaWdpbmFsIGFnZW50IGNsb3NlJyksXG4gIGtPcmlnaW46IFN5bWJvbCgnb3JpZ2luJyksXG4gIGtJc01vY2tBY3RpdmU6IFN5bWJvbCgnaXMgbW9jayBhY3RpdmUnKSxcbiAga05ldENvbm5lY3Q6IFN5bWJvbCgnbmV0IGNvbm5lY3QnKSxcbiAga0dldE5ldENvbm5lY3Q6IFN5bWJvbCgnZ2V0IG5ldCBjb25uZWN0JyksXG4gIGtDb25uZWN0ZWQ6IFN5bWJvbCgnY29ubmVjdGVkJylcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBNb2NrTm90TWF0Y2hlZEVycm9yIH0gPSByZXF1aXJlKCcuL21vY2stZXJyb3JzJylcbmNvbnN0IHtcbiAga0Rpc3BhdGNoZXMsXG4gIGtNb2NrQWdlbnQsXG4gIGtPcmlnaW5hbERpc3BhdGNoLFxuICBrT3JpZ2luLFxuICBrR2V0TmV0Q29ubmVjdFxufSA9IHJlcXVpcmUoJy4vbW9jay1zeW1ib2xzJylcbmNvbnN0IHsgYnVpbGRVUkwsIG5vcCB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgU1RBVFVTX0NPREVTIH0gPSByZXF1aXJlKCdodHRwJylcbmNvbnN0IHtcbiAgdHlwZXM6IHtcbiAgICBpc1Byb21pc2VcbiAgfVxufSA9IHJlcXVpcmUoJ3V0aWwnKVxuXG5mdW5jdGlvbiBtYXRjaFZhbHVlIChtYXRjaCwgdmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBtYXRjaCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gbWF0Y2ggPT09IHZhbHVlXG4gIH1cbiAgaWYgKG1hdGNoIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgcmV0dXJuIG1hdGNoLnRlc3QodmFsdWUpXG4gIH1cbiAgaWYgKHR5cGVvZiBtYXRjaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBtYXRjaCh2YWx1ZSkgPT09IHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gbG93ZXJDYXNlRW50cmllcyAoaGVhZGVycykge1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGhlYWRlcnMpLm1hcCgoW2hlYWRlck5hbWUsIGhlYWRlclZhbHVlXSkgPT4ge1xuICAgICAgcmV0dXJuIFtoZWFkZXJOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCksIGhlYWRlclZhbHVlXVxuICAgIH0pXG4gIClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vaW5kZXgnKS5IZWFkZXJzfHN0cmluZ1tdfFJlY29yZDxzdHJpbmcsIHN0cmluZz59IGhlYWRlcnNcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqL1xuZnVuY3Rpb24gZ2V0SGVhZGVyQnlOYW1lIChoZWFkZXJzLCBrZXkpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIGlmIChoZWFkZXJzW2ldLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09IGtleS50b0xvY2FsZUxvd2VyQ2FzZSgpKSB7XG4gICAgICAgIHJldHVybiBoZWFkZXJzW2kgKyAxXVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfSBlbHNlIGlmICh0eXBlb2YgaGVhZGVycy5nZXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gaGVhZGVycy5nZXQoa2V5KVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBsb3dlckNhc2VFbnRyaWVzKGhlYWRlcnMpW2tleS50b0xvY2FsZUxvd2VyQ2FzZSgpXVxuICB9XG59XG5cbi8qKiBAcGFyYW0ge3N0cmluZ1tdfSBoZWFkZXJzICovXG5mdW5jdGlvbiBidWlsZEhlYWRlcnNGcm9tQXJyYXkgKGhlYWRlcnMpIHsgLy8gZmV0Y2ggSGVhZGVyc0xpc3RcbiAgY29uc3QgY2xvbmUgPSBoZWFkZXJzLnNsaWNlKClcbiAgY29uc3QgZW50cmllcyA9IFtdXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjbG9uZS5sZW5ndGg7IGluZGV4ICs9IDIpIHtcbiAgICBlbnRyaWVzLnB1c2goW2Nsb25lW2luZGV4XSwgY2xvbmVbaW5kZXggKyAxXV0pXG4gIH1cbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhlbnRyaWVzKVxufVxuXG5mdW5jdGlvbiBtYXRjaEhlYWRlcnMgKG1vY2tEaXNwYXRjaCwgaGVhZGVycykge1xuICBpZiAodHlwZW9mIG1vY2tEaXNwYXRjaC5oZWFkZXJzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHsgLy8gZmV0Y2ggSGVhZGVyc0xpc3RcbiAgICAgIGhlYWRlcnMgPSBidWlsZEhlYWRlcnNGcm9tQXJyYXkoaGVhZGVycylcbiAgICB9XG4gICAgcmV0dXJuIG1vY2tEaXNwYXRjaC5oZWFkZXJzKGhlYWRlcnMgPyBsb3dlckNhc2VFbnRyaWVzKGhlYWRlcnMpIDoge30pXG4gIH1cbiAgaWYgKHR5cGVvZiBtb2NrRGlzcGF0Y2guaGVhZGVycyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIGlmICh0eXBlb2YgaGVhZGVycyAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIG1vY2tEaXNwYXRjaC5oZWFkZXJzICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZm9yIChjb25zdCBbbWF0Y2hIZWFkZXJOYW1lLCBtYXRjaEhlYWRlclZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhtb2NrRGlzcGF0Y2guaGVhZGVycykpIHtcbiAgICBjb25zdCBoZWFkZXJWYWx1ZSA9IGdldEhlYWRlckJ5TmFtZShoZWFkZXJzLCBtYXRjaEhlYWRlck5hbWUpXG5cbiAgICBpZiAoIW1hdGNoVmFsdWUobWF0Y2hIZWFkZXJWYWx1ZSwgaGVhZGVyVmFsdWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gc2FmZVVybCAocGF0aCkge1xuICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHBhdGhcbiAgfVxuXG4gIGNvbnN0IHBhdGhTZWdtZW50cyA9IHBhdGguc3BsaXQoJz8nKVxuXG4gIGlmIChwYXRoU2VnbWVudHMubGVuZ3RoICE9PSAyKSB7XG4gICAgcmV0dXJuIHBhdGhcbiAgfVxuXG4gIGNvbnN0IHFwID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhwYXRoU2VnbWVudHMucG9wKCkpXG4gIHFwLnNvcnQoKVxuICByZXR1cm4gWy4uLnBhdGhTZWdtZW50cywgcXAudG9TdHJpbmcoKV0uam9pbignPycpXG59XG5cbmZ1bmN0aW9uIG1hdGNoS2V5IChtb2NrRGlzcGF0Y2gsIHsgcGF0aCwgbWV0aG9kLCBib2R5LCBoZWFkZXJzIH0pIHtcbiAgY29uc3QgcGF0aE1hdGNoID0gbWF0Y2hWYWx1ZShtb2NrRGlzcGF0Y2gucGF0aCwgcGF0aClcbiAgY29uc3QgbWV0aG9kTWF0Y2ggPSBtYXRjaFZhbHVlKG1vY2tEaXNwYXRjaC5tZXRob2QsIG1ldGhvZClcbiAgY29uc3QgYm9keU1hdGNoID0gdHlwZW9mIG1vY2tEaXNwYXRjaC5ib2R5ICE9PSAndW5kZWZpbmVkJyA/IG1hdGNoVmFsdWUobW9ja0Rpc3BhdGNoLmJvZHksIGJvZHkpIDogdHJ1ZVxuICBjb25zdCBoZWFkZXJzTWF0Y2ggPSBtYXRjaEhlYWRlcnMobW9ja0Rpc3BhdGNoLCBoZWFkZXJzKVxuICByZXR1cm4gcGF0aE1hdGNoICYmIG1ldGhvZE1hdGNoICYmIGJvZHlNYXRjaCAmJiBoZWFkZXJzTWF0Y2hcbn1cblxuZnVuY3Rpb24gZ2V0UmVzcG9uc2VEYXRhIChkYXRhKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIHtcbiAgICByZXR1cm4gZGF0YVxuICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShkYXRhKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKClcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRNb2NrRGlzcGF0Y2ggKG1vY2tEaXNwYXRjaGVzLCBrZXkpIHtcbiAgY29uc3QgYmFzZVBhdGggPSBrZXkucXVlcnkgPyBidWlsZFVSTChrZXkucGF0aCwga2V5LnF1ZXJ5KSA6IGtleS5wYXRoXG4gIGNvbnN0IHJlc29sdmVkUGF0aCA9IHR5cGVvZiBiYXNlUGF0aCA9PT0gJ3N0cmluZycgPyBzYWZlVXJsKGJhc2VQYXRoKSA6IGJhc2VQYXRoXG5cbiAgLy8gTWF0Y2ggcGF0aFxuICBsZXQgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbW9ja0Rpc3BhdGNoZXMuZmlsdGVyKCh7IGNvbnN1bWVkIH0pID0+ICFjb25zdW1lZCkuZmlsdGVyKCh7IHBhdGggfSkgPT4gbWF0Y2hWYWx1ZShzYWZlVXJsKHBhdGgpLCByZXNvbHZlZFBhdGgpKVxuICBpZiAobWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBNb2NrTm90TWF0Y2hlZEVycm9yKGBNb2NrIGRpc3BhdGNoIG5vdCBtYXRjaGVkIGZvciBwYXRoICcke3Jlc29sdmVkUGF0aH0nYClcbiAgfVxuXG4gIC8vIE1hdGNoIG1ldGhvZFxuICBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMgPSBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMuZmlsdGVyKCh7IG1ldGhvZCB9KSA9PiBtYXRjaFZhbHVlKG1ldGhvZCwga2V5Lm1ldGhvZCkpXG4gIGlmIChtYXRjaGVkTW9ja0Rpc3BhdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYE1vY2sgZGlzcGF0Y2ggbm90IG1hdGNoZWQgZm9yIG1ldGhvZCAnJHtrZXkubWV0aG9kfSdgKVxuICB9XG5cbiAgLy8gTWF0Y2ggYm9keVxuICBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMgPSBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMuZmlsdGVyKCh7IGJvZHkgfSkgPT4gdHlwZW9mIGJvZHkgIT09ICd1bmRlZmluZWQnID8gbWF0Y2hWYWx1ZShib2R5LCBrZXkuYm9keSkgOiB0cnVlKVxuICBpZiAobWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBNb2NrTm90TWF0Y2hlZEVycm9yKGBNb2NrIGRpc3BhdGNoIG5vdCBtYXRjaGVkIGZvciBib2R5ICcke2tleS5ib2R5fSdgKVxuICB9XG5cbiAgLy8gTWF0Y2ggaGVhZGVyc1xuICBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMgPSBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMuZmlsdGVyKChtb2NrRGlzcGF0Y2gpID0+IG1hdGNoSGVhZGVycyhtb2NrRGlzcGF0Y2gsIGtleS5oZWFkZXJzKSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgTW9jayBkaXNwYXRjaCBub3QgbWF0Y2hlZCBmb3IgaGVhZGVycyAnJHt0eXBlb2Yga2V5LmhlYWRlcnMgPT09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkoa2V5LmhlYWRlcnMpIDoga2V5LmhlYWRlcnN9J2ApXG4gIH1cblxuICByZXR1cm4gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzWzBdXG59XG5cbmZ1bmN0aW9uIGFkZE1vY2tEaXNwYXRjaCAobW9ja0Rpc3BhdGNoZXMsIGtleSwgZGF0YSkge1xuICBjb25zdCBiYXNlRGF0YSA9IHsgdGltZXNJbnZva2VkOiAwLCB0aW1lczogMSwgcGVyc2lzdDogZmFsc2UsIGNvbnN1bWVkOiBmYWxzZSB9XG4gIGNvbnN0IHJlcGx5RGF0YSA9IHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nID8geyBjYWxsYmFjazogZGF0YSB9IDogeyAuLi5kYXRhIH1cbiAgY29uc3QgbmV3TW9ja0Rpc3BhdGNoID0geyAuLi5iYXNlRGF0YSwgLi4ua2V5LCBwZW5kaW5nOiB0cnVlLCBkYXRhOiB7IGVycm9yOiBudWxsLCAuLi5yZXBseURhdGEgfSB9XG4gIG1vY2tEaXNwYXRjaGVzLnB1c2gobmV3TW9ja0Rpc3BhdGNoKVxuICByZXR1cm4gbmV3TW9ja0Rpc3BhdGNoXG59XG5cbmZ1bmN0aW9uIGRlbGV0ZU1vY2tEaXNwYXRjaCAobW9ja0Rpc3BhdGNoZXMsIGtleSkge1xuICBjb25zdCBpbmRleCA9IG1vY2tEaXNwYXRjaGVzLmZpbmRJbmRleChkaXNwYXRjaCA9PiB7XG4gICAgaWYgKCFkaXNwYXRjaC5jb25zdW1lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHJldHVybiBtYXRjaEtleShkaXNwYXRjaCwga2V5KVxuICB9KVxuICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgbW9ja0Rpc3BhdGNoZXMuc3BsaWNlKGluZGV4LCAxKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkS2V5IChvcHRzKSB7XG4gIGNvbnN0IHsgcGF0aCwgbWV0aG9kLCBib2R5LCBoZWFkZXJzLCBxdWVyeSB9ID0gb3B0c1xuICByZXR1cm4ge1xuICAgIHBhdGgsXG4gICAgbWV0aG9kLFxuICAgIGJvZHksXG4gICAgaGVhZGVycyxcbiAgICBxdWVyeVxuICB9XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlS2V5VmFsdWVzIChkYXRhKSB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhkYXRhKS5yZWR1Y2UoKGtleVZhbHVlUGFpcnMsIFtrZXksIHZhbHVlXSkgPT4gW1xuICAgIC4uLmtleVZhbHVlUGFpcnMsXG4gICAgQnVmZmVyLmZyb20oYCR7a2V5fWApLFxuICAgIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUubWFwKHggPT4gQnVmZmVyLmZyb20oYCR7eH1gKSkgOiBCdWZmZXIuZnJvbShgJHt2YWx1ZX1gKVxuICBdLCBbXSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvU3RhdHVzXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhdHVzQ29kZVxuICovXG5mdW5jdGlvbiBnZXRTdGF0dXNUZXh0IChzdGF0dXNDb2RlKSB7XG4gIHJldHVybiBTVEFUVVNfQ09ERVNbc3RhdHVzQ29kZV0gfHwgJ3Vua25vd24nXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFJlc3BvbnNlIChib2R5KSB7XG4gIGNvbnN0IGJ1ZmZlcnMgPSBbXVxuICBmb3IgYXdhaXQgKGNvbnN0IGRhdGEgb2YgYm9keSkge1xuICAgIGJ1ZmZlcnMucHVzaChkYXRhKVxuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGJ1ZmZlcnMpLnRvU3RyaW5nKCd1dGY4Jylcbn1cblxuLyoqXG4gKiBNb2NrIGRpc3BhdGNoIGZ1bmN0aW9uIHVzZWQgdG8gc2ltdWxhdGUgdW5kaWNpIGRpc3BhdGNoZXNcbiAqL1xuZnVuY3Rpb24gbW9ja0Rpc3BhdGNoIChvcHRzLCBoYW5kbGVyKSB7XG4gIC8vIEdldCBtb2NrIGRpc3BhdGNoIGZyb20gYnVpbHQga2V5XG4gIGNvbnN0IGtleSA9IGJ1aWxkS2V5KG9wdHMpXG4gIGNvbnN0IG1vY2tEaXNwYXRjaCA9IGdldE1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwga2V5KVxuXG4gIG1vY2tEaXNwYXRjaC50aW1lc0ludm9rZWQrK1xuXG4gIC8vIEhlcmUncyB3aGVyZSB3ZSByZXNvbHZlIGEgY2FsbGJhY2sgaWYgYSBjYWxsYmFjayBpcyBwcmVzZW50IGZvciB0aGUgZGlzcGF0Y2ggZGF0YS5cbiAgaWYgKG1vY2tEaXNwYXRjaC5kYXRhLmNhbGxiYWNrKSB7XG4gICAgbW9ja0Rpc3BhdGNoLmRhdGEgPSB7IC4uLm1vY2tEaXNwYXRjaC5kYXRhLCAuLi5tb2NrRGlzcGF0Y2guZGF0YS5jYWxsYmFjayhvcHRzKSB9XG4gIH1cblxuICAvLyBQYXJzZSBtb2NrRGlzcGF0Y2ggZGF0YVxuICBjb25zdCB7IGRhdGE6IHsgc3RhdHVzQ29kZSwgZGF0YSwgaGVhZGVycywgdHJhaWxlcnMsIGVycm9yIH0sIGRlbGF5LCBwZXJzaXN0IH0gPSBtb2NrRGlzcGF0Y2hcbiAgY29uc3QgeyB0aW1lc0ludm9rZWQsIHRpbWVzIH0gPSBtb2NrRGlzcGF0Y2hcblxuICAvLyBJZiBpdCdzIHVzZWQgdXAgYW5kIG5vdCBwZXJzaXN0ZW50LCBtYXJrIGFzIGNvbnN1bWVkXG4gIG1vY2tEaXNwYXRjaC5jb25zdW1lZCA9ICFwZXJzaXN0ICYmIHRpbWVzSW52b2tlZCA+PSB0aW1lc1xuICBtb2NrRGlzcGF0Y2gucGVuZGluZyA9IHRpbWVzSW52b2tlZCA8IHRpbWVzXG5cbiAgLy8gSWYgc3BlY2lmaWVkLCB0cmlnZ2VyIGRpc3BhdGNoIGVycm9yXG4gIGlmIChlcnJvciAhPT0gbnVsbCkge1xuICAgIGRlbGV0ZU1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwga2V5KVxuICAgIGhhbmRsZXIub25FcnJvcihlcnJvcilcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gSGFuZGxlIHRoZSByZXF1ZXN0IHdpdGggYSBkZWxheSBpZiBuZWNlc3NhcnlcbiAgaWYgKHR5cGVvZiBkZWxheSA9PT0gJ251bWJlcicgJiYgZGVsYXkgPiAwKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBoYW5kbGVSZXBseSh0aGlzW2tEaXNwYXRjaGVzXSlcbiAgICB9LCBkZWxheSlcbiAgfSBlbHNlIHtcbiAgICBoYW5kbGVSZXBseSh0aGlzW2tEaXNwYXRjaGVzXSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVJlcGx5IChtb2NrRGlzcGF0Y2hlcywgX2RhdGEgPSBkYXRhKSB7XG4gICAgLy8gZmV0Y2gncyBIZWFkZXJzTGlzdCBpcyBhIDFEIHN0cmluZyBhcnJheVxuICAgIGNvbnN0IG9wdHNIZWFkZXJzID0gQXJyYXkuaXNBcnJheShvcHRzLmhlYWRlcnMpXG4gICAgICA/IGJ1aWxkSGVhZGVyc0Zyb21BcnJheShvcHRzLmhlYWRlcnMpXG4gICAgICA6IG9wdHMuaGVhZGVyc1xuICAgIGNvbnN0IGJvZHkgPSB0eXBlb2YgX2RhdGEgPT09ICdmdW5jdGlvbidcbiAgICAgID8gX2RhdGEoeyAuLi5vcHRzLCBoZWFkZXJzOiBvcHRzSGVhZGVycyB9KVxuICAgICAgOiBfZGF0YVxuXG4gICAgLy8gdXRpbC50eXBlcy5pc1Byb21pc2UgaXMgbGlrZWx5IG5lZWRlZCBmb3IgamVzdC5cbiAgICBpZiAoaXNQcm9taXNlKGJvZHkpKSB7XG4gICAgICAvLyBJZiBoYW5kbGVSZXBseSBpcyBhc3luY2hyb25vdXMsIHRocm93aW5nIGFuIGVycm9yXG4gICAgICAvLyBpbiB0aGUgY2FsbGJhY2sgd2lsbCByZWplY3QgdGhlIHByb21pc2UsIHJhdGhlciB0aGFuXG4gICAgICAvLyBzeW5jaHJvbm91c2x5IHRocm93IHRoZSBlcnJvciwgd2hpY2ggYnJlYWtzIHNvbWUgdGVzdHMuXG4gICAgICAvLyBSYXRoZXIsIHdlIHdhaXQgZm9yIHRoZSBjYWxsYmFjayB0byByZXNvbHZlIGlmIGl0IGlzIGFcbiAgICAgIC8vIHByb21pc2UsIGFuZCB0aGVuIHJlLXJ1biBoYW5kbGVSZXBseSB3aXRoIHRoZSBuZXcgYm9keS5cbiAgICAgIGJvZHkudGhlbigobmV3RGF0YSkgPT4gaGFuZGxlUmVwbHkobW9ja0Rpc3BhdGNoZXMsIG5ld0RhdGEpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2VEYXRhID0gZ2V0UmVzcG9uc2VEYXRhKGJvZHkpXG4gICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0gZ2VuZXJhdGVLZXlWYWx1ZXMoaGVhZGVycylcbiAgICBjb25zdCByZXNwb25zZVRyYWlsZXJzID0gZ2VuZXJhdGVLZXlWYWx1ZXModHJhaWxlcnMpXG5cbiAgICBoYW5kbGVyLmFib3J0ID0gbm9wXG4gICAgaGFuZGxlci5vbkhlYWRlcnMoc3RhdHVzQ29kZSwgcmVzcG9uc2VIZWFkZXJzLCByZXN1bWUsIGdldFN0YXR1c1RleHQoc3RhdHVzQ29kZSkpXG4gICAgaGFuZGxlci5vbkRhdGEoQnVmZmVyLmZyb20ocmVzcG9uc2VEYXRhKSlcbiAgICBoYW5kbGVyLm9uQ29tcGxldGUocmVzcG9uc2VUcmFpbGVycylcbiAgICBkZWxldGVNb2NrRGlzcGF0Y2gobW9ja0Rpc3BhdGNoZXMsIGtleSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc3VtZSAoKSB7fVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIGJ1aWxkTW9ja0Rpc3BhdGNoICgpIHtcbiAgY29uc3QgYWdlbnQgPSB0aGlzW2tNb2NrQWdlbnRdXG4gIGNvbnN0IG9yaWdpbiA9IHRoaXNba09yaWdpbl1cbiAgY29uc3Qgb3JpZ2luYWxEaXNwYXRjaCA9IHRoaXNba09yaWdpbmFsRGlzcGF0Y2hdXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGRpc3BhdGNoIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKGFnZW50LmlzTW9ja0FjdGl2ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbW9ja0Rpc3BhdGNoLmNhbGwodGhpcywgb3B0cywgaGFuZGxlcilcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIE1vY2tOb3RNYXRjaGVkRXJyb3IpIHtcbiAgICAgICAgICBjb25zdCBuZXRDb25uZWN0ID0gYWdlbnRba0dldE5ldENvbm5lY3RdKClcbiAgICAgICAgICBpZiAobmV0Q29ubmVjdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBNb2NrTm90TWF0Y2hlZEVycm9yKGAke2Vycm9yLm1lc3NhZ2V9OiBzdWJzZXF1ZW50IHJlcXVlc3QgdG8gb3JpZ2luICR7b3JpZ2lufSB3YXMgbm90IGFsbG93ZWQgKG5ldC5jb25uZWN0IGRpc2FibGVkKWApXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjaGVja05ldENvbm5lY3QobmV0Q29ubmVjdCwgb3JpZ2luKSkge1xuICAgICAgICAgICAgb3JpZ2luYWxEaXNwYXRjaC5jYWxsKHRoaXMsIG9wdHMsIGhhbmRsZXIpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBNb2NrTm90TWF0Y2hlZEVycm9yKGAke2Vycm9yLm1lc3NhZ2V9OiBzdWJzZXF1ZW50IHJlcXVlc3QgdG8gb3JpZ2luICR7b3JpZ2lufSB3YXMgbm90IGFsbG93ZWQgKG5ldC5jb25uZWN0IGlzIG5vdCBlbmFibGVkIGZvciB0aGlzIG9yaWdpbilgKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9yaWdpbmFsRGlzcGF0Y2guY2FsbCh0aGlzLCBvcHRzLCBoYW5kbGVyKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja05ldENvbm5lY3QgKG5ldENvbm5lY3QsIG9yaWdpbikge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKG9yaWdpbilcbiAgaWYgKG5ldENvbm5lY3QgPT09IHRydWUpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkobmV0Q29ubmVjdCkgJiYgbmV0Q29ubmVjdC5zb21lKChtYXRjaGVyKSA9PiBtYXRjaFZhbHVlKG1hdGNoZXIsIHVybC5ob3N0KSkpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBidWlsZE1vY2tPcHRpb25zIChvcHRzKSB7XG4gIGlmIChvcHRzKSB7XG4gICAgY29uc3QgeyBhZ2VudCwgLi4ubW9ja09wdGlvbnMgfSA9IG9wdHNcbiAgICByZXR1cm4gbW9ja09wdGlvbnNcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0UmVzcG9uc2VEYXRhLFxuICBnZXRNb2NrRGlzcGF0Y2gsXG4gIGFkZE1vY2tEaXNwYXRjaCxcbiAgZGVsZXRlTW9ja0Rpc3BhdGNoLFxuICBidWlsZEtleSxcbiAgZ2VuZXJhdGVLZXlWYWx1ZXMsXG4gIG1hdGNoVmFsdWUsXG4gIGdldFJlc3BvbnNlLFxuICBnZXRTdGF0dXNUZXh0LFxuICBtb2NrRGlzcGF0Y2gsXG4gIGJ1aWxkTW9ja0Rpc3BhdGNoLFxuICBjaGVja05ldENvbm5lY3QsXG4gIGJ1aWxkTW9ja09wdGlvbnMsXG4gIGdldEhlYWRlckJ5TmFtZVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGdldFJlc3BvbnNlRGF0YSwgYnVpbGRLZXksIGFkZE1vY2tEaXNwYXRjaCB9ID0gcmVxdWlyZSgnLi9tb2NrLXV0aWxzJylcbmNvbnN0IHtcbiAga0Rpc3BhdGNoZXMsXG4gIGtEaXNwYXRjaEtleSxcbiAga0RlZmF1bHRIZWFkZXJzLFxuICBrRGVmYXVsdFRyYWlsZXJzLFxuICBrQ29udGVudExlbmd0aCxcbiAga01vY2tEaXNwYXRjaFxufSA9IHJlcXVpcmUoJy4vbW9jay1zeW1ib2xzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsgYnVpbGRVUkwgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5cbi8qKlxuICogRGVmaW5lcyB0aGUgc2NvcGUgQVBJIGZvciBhbiBpbnRlcmNlcHRvciByZXBseVxuICovXG5jbGFzcyBNb2NrU2NvcGUge1xuICBjb25zdHJ1Y3RvciAobW9ja0Rpc3BhdGNoKSB7XG4gICAgdGhpc1trTW9ja0Rpc3BhdGNoXSA9IG1vY2tEaXNwYXRjaFxuICB9XG5cbiAgLyoqXG4gICAqIERlbGF5IGEgcmVwbHkgYnkgYSBzZXQgYW1vdW50IGluIG1zLlxuICAgKi9cbiAgZGVsYXkgKHdhaXRJbk1zKSB7XG4gICAgaWYgKHR5cGVvZiB3YWl0SW5NcyAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0ludGVnZXIod2FpdEluTXMpIHx8IHdhaXRJbk1zIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignd2FpdEluTXMgbXVzdCBiZSBhIHZhbGlkIGludGVnZXIgPiAwJylcbiAgICB9XG5cbiAgICB0aGlzW2tNb2NrRGlzcGF0Y2hdLmRlbGF5ID0gd2FpdEluTXNcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIEZvciBhIGRlZmluZWQgcmVwbHksIG5ldmVyIG1hcmsgYXMgY29uc3VtZWQuXG4gICAqL1xuICBwZXJzaXN0ICgpIHtcbiAgICB0aGlzW2tNb2NrRGlzcGF0Y2hdLnBlcnNpc3QgPSB0cnVlXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyBvbmUgdG8gZGVmaW5lIGEgcmVwbHkgZm9yIGEgc2V0IGFtb3VudCBvZiBtYXRjaGluZyByZXF1ZXN0cy5cbiAgICovXG4gIHRpbWVzIChyZXBlYXRUaW1lcykge1xuICAgIGlmICh0eXBlb2YgcmVwZWF0VGltZXMgIT09ICdudW1iZXInIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHJlcGVhdFRpbWVzKSB8fCByZXBlYXRUaW1lcyA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3JlcGVhdFRpbWVzIG11c3QgYmUgYSB2YWxpZCBpbnRlZ2VyID4gMCcpXG4gICAgfVxuXG4gICAgdGhpc1trTW9ja0Rpc3BhdGNoXS50aW1lcyA9IHJlcGVhdFRpbWVzXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxufVxuXG4vKipcbiAqIERlZmluZXMgYW4gaW50ZXJjZXB0b3IgZm9yIGEgTW9ja1xuICovXG5jbGFzcyBNb2NrSW50ZXJjZXB0b3Ige1xuICBjb25zdHJ1Y3RvciAob3B0cywgbW9ja0Rpc3BhdGNoZXMpIHtcbiAgICBpZiAodHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMgbXVzdCBiZSBhbiBvYmplY3QnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdHMucGF0aCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignb3B0cy5wYXRoIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0cy5tZXRob2QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBvcHRzLm1ldGhvZCA9ICdHRVQnXG4gICAgfVxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTI0NVxuICAgIC8vIEFzIHBlciBSRkMgMzk4NiwgY2xpZW50cyBhcmUgbm90IHN1cHBvc2VkIHRvIHNlbmQgVVJJXG4gICAgLy8gZnJhZ21lbnRzIHRvIHNlcnZlcnMgd2hlbiB0aGV5IHJldHJpZXZlIGEgZG9jdW1lbnQsXG4gICAgaWYgKHR5cGVvZiBvcHRzLnBhdGggPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAob3B0cy5xdWVyeSkge1xuICAgICAgICBvcHRzLnBhdGggPSBidWlsZFVSTChvcHRzLnBhdGgsIG9wdHMucXVlcnkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBNYXRjaGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2Jsb2IvbWFpbi9saWIvZmV0Y2gvaW5kZXguanMjTDE4MTFcbiAgICAgICAgY29uc3QgcGFyc2VkVVJMID0gbmV3IFVSTChvcHRzLnBhdGgsICdkYXRhOi8vJylcbiAgICAgICAgb3B0cy5wYXRoID0gcGFyc2VkVVJMLnBhdGhuYW1lICsgcGFyc2VkVVJMLnNlYXJjaFxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdHMubWV0aG9kID09PSAnc3RyaW5nJykge1xuICAgICAgb3B0cy5tZXRob2QgPSBvcHRzLm1ldGhvZC50b1VwcGVyQ2FzZSgpXG4gICAgfVxuXG4gICAgdGhpc1trRGlzcGF0Y2hLZXldID0gYnVpbGRLZXkob3B0cylcbiAgICB0aGlzW2tEaXNwYXRjaGVzXSA9IG1vY2tEaXNwYXRjaGVzXG4gICAgdGhpc1trRGVmYXVsdEhlYWRlcnNdID0ge31cbiAgICB0aGlzW2tEZWZhdWx0VHJhaWxlcnNdID0ge31cbiAgICB0aGlzW2tDb250ZW50TGVuZ3RoXSA9IGZhbHNlXG4gIH1cblxuICBjcmVhdGVNb2NrU2NvcGVEaXNwYXRjaERhdGEgKHN0YXR1c0NvZGUsIGRhdGEsIHJlc3BvbnNlT3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgcmVzcG9uc2VEYXRhID0gZ2V0UmVzcG9uc2VEYXRhKGRhdGEpXG4gICAgY29uc3QgY29udGVudExlbmd0aCA9IHRoaXNba0NvbnRlbnRMZW5ndGhdID8geyAnY29udGVudC1sZW5ndGgnOiByZXNwb25zZURhdGEubGVuZ3RoIH0gOiB7fVxuICAgIGNvbnN0IGhlYWRlcnMgPSB7IC4uLnRoaXNba0RlZmF1bHRIZWFkZXJzXSwgLi4uY29udGVudExlbmd0aCwgLi4ucmVzcG9uc2VPcHRpb25zLmhlYWRlcnMgfVxuICAgIGNvbnN0IHRyYWlsZXJzID0geyAuLi50aGlzW2tEZWZhdWx0VHJhaWxlcnNdLCAuLi5yZXNwb25zZU9wdGlvbnMudHJhaWxlcnMgfVxuXG4gICAgcmV0dXJuIHsgc3RhdHVzQ29kZSwgZGF0YSwgaGVhZGVycywgdHJhaWxlcnMgfVxuICB9XG5cbiAgdmFsaWRhdGVSZXBseVBhcmFtZXRlcnMgKHN0YXR1c0NvZGUsIGRhdGEsIHJlc3BvbnNlT3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygc3RhdHVzQ29kZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignc3RhdHVzQ29kZSBtdXN0IGJlIGRlZmluZWQnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2RhdGEgbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiByZXNwb25zZU9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Jlc3BvbnNlT3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1vY2sgYW4gdW5kaWNpIHJlcXVlc3Qgd2l0aCBhIGRlZmluZWQgcmVwbHkuXG4gICAqL1xuICByZXBseSAocmVwbHlEYXRhKSB7XG4gICAgLy8gVmFsdWVzIG9mIHJlcGx5IGFyZW4ndCBhdmFpbGFibGUgcmlnaHQgbm93IGFzIHRoZXlcbiAgICAvLyBjYW4gb25seSBiZSBhdmFpbGFibGUgd2hlbiB0aGUgcmVwbHkgY2FsbGJhY2sgaXMgaW52b2tlZC5cbiAgICBpZiAodHlwZW9mIHJlcGx5RGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gV2UnbGwgZmlyc3Qgd3JhcCB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgaW4gYW5vdGhlciBmdW5jdGlvbixcbiAgICAgIC8vIHRoaXMgZnVuY3Rpb24gd2lsbCBwcm9wZXJseSByZXNvbHZlIHRoZSBkYXRhIGZyb20gdGhlIGNhbGxiYWNrXG4gICAgICAvLyB3aGVuIGludm9rZWQuXG4gICAgICBjb25zdCB3cmFwcGVkRGVmYXVsdHNDYWxsYmFjayA9IChvcHRzKSA9PiB7XG4gICAgICAgIC8vIE91ciByZXBseSBvcHRpb25zIGNhbGxiYWNrIGNvbnRhaW5zIHRoZSBwYXJhbWV0ZXIgZm9yIHN0YXR1c0NvZGUsIGRhdGEgYW5kIG9wdGlvbnMuXG4gICAgICAgIGNvbnN0IHJlc29sdmVkRGF0YSA9IHJlcGx5RGF0YShvcHRzKVxuXG4gICAgICAgIC8vIENoZWNrIGlmIGl0IGlzIGluIHRoZSByaWdodCBmb3JtYXRcbiAgICAgICAgaWYgKHR5cGVvZiByZXNvbHZlZERhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdyZXBseSBvcHRpb25zIGNhbGxiYWNrIG11c3QgcmV0dXJuIGFuIG9iamVjdCcpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHN0YXR1c0NvZGUsIGRhdGEgPSAnJywgcmVzcG9uc2VPcHRpb25zID0ge30gfSA9IHJlc29sdmVkRGF0YVxuICAgICAgICB0aGlzLnZhbGlkYXRlUmVwbHlQYXJhbWV0ZXJzKHN0YXR1c0NvZGUsIGRhdGEsIHJlc3BvbnNlT3B0aW9ucylcbiAgICAgICAgLy8gU2luY2UgdGhlIHZhbHVlcyBjYW4gYmUgb2J0YWluZWQgaW1tZWRpYXRlbHkgd2UgcmV0dXJuIHRoZW1cbiAgICAgICAgLy8gZnJvbSB0aGlzIGhpZ2hlciBvcmRlciBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgcmVzb2x2ZWQgbGF0ZXIuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4udGhpcy5jcmVhdGVNb2NrU2NvcGVEaXNwYXRjaERhdGEoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCB1c3VhbCBkaXNwYXRjaCBkYXRhLCBidXQgdGhpcyB0aW1lIHNldCB0aGUgZGF0YSBwYXJhbWV0ZXIgdG8gZnVuY3Rpb24gdGhhdCB3aWxsIGV2ZW50dWFsbHkgcHJvdmlkZSBkYXRhLlxuICAgICAgY29uc3QgbmV3TW9ja0Rpc3BhdGNoID0gYWRkTW9ja0Rpc3BhdGNoKHRoaXNba0Rpc3BhdGNoZXNdLCB0aGlzW2tEaXNwYXRjaEtleV0sIHdyYXBwZWREZWZhdWx0c0NhbGxiYWNrKVxuICAgICAgcmV0dXJuIG5ldyBNb2NrU2NvcGUobmV3TW9ja0Rpc3BhdGNoKVxuICAgIH1cblxuICAgIC8vIFdlIGNhbiBoYXZlIGVpdGhlciBvbmUgb3IgdGhyZWUgcGFyYW1ldGVycywgaWYgd2UgZ2V0IGhlcmUsXG4gICAgLy8gd2Ugc2hvdWxkIGhhdmUgMS0zIHBhcmFtZXRlcnMuIFNvIHdlIHNwcmVhZCB0aGUgYXJndW1lbnRzIG9mXG4gICAgLy8gdGhpcyBmdW5jdGlvbiB0byBvYnRhaW4gdGhlIHBhcmFtZXRlcnMsIHNpbmNlIHJlcGx5RGF0YSB3aWxsIGFsd2F5c1xuICAgIC8vIGp1c3QgYmUgdGhlIHN0YXR1c0NvZGUuXG4gICAgY29uc3QgW3N0YXR1c0NvZGUsIGRhdGEgPSAnJywgcmVzcG9uc2VPcHRpb25zID0ge31dID0gWy4uLmFyZ3VtZW50c11cbiAgICB0aGlzLnZhbGlkYXRlUmVwbHlQYXJhbWV0ZXJzKHN0YXR1c0NvZGUsIGRhdGEsIHJlc3BvbnNlT3B0aW9ucylcblxuICAgIC8vIFNlbmQgaW4tYWxyZWFkeSBwcm92aWRlZCBkYXRhIGxpa2UgdXN1YWxcbiAgICBjb25zdCBkaXNwYXRjaERhdGEgPSB0aGlzLmNyZWF0ZU1vY2tTY29wZURpc3BhdGNoRGF0YShzdGF0dXNDb2RlLCBkYXRhLCByZXNwb25zZU9wdGlvbnMpXG4gICAgY29uc3QgbmV3TW9ja0Rpc3BhdGNoID0gYWRkTW9ja0Rpc3BhdGNoKHRoaXNba0Rpc3BhdGNoZXNdLCB0aGlzW2tEaXNwYXRjaEtleV0sIGRpc3BhdGNoRGF0YSlcbiAgICByZXR1cm4gbmV3IE1vY2tTY29wZShuZXdNb2NrRGlzcGF0Y2gpXG4gIH1cblxuICAvKipcbiAgICogTW9jayBhbiB1bmRpY2kgcmVxdWVzdCB3aXRoIGEgZGVmaW5lZCBlcnJvci5cbiAgICovXG4gIHJlcGx5V2l0aEVycm9yIChlcnJvcikge1xuICAgIGlmICh0eXBlb2YgZXJyb3IgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2Vycm9yIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuXG4gICAgY29uc3QgbmV3TW9ja0Rpc3BhdGNoID0gYWRkTW9ja0Rpc3BhdGNoKHRoaXNba0Rpc3BhdGNoZXNdLCB0aGlzW2tEaXNwYXRjaEtleV0sIHsgZXJyb3IgfSlcbiAgICByZXR1cm4gbmV3IE1vY2tTY29wZShuZXdNb2NrRGlzcGF0Y2gpXG4gIH1cblxuICAvKipcbiAgICogU2V0IGRlZmF1bHQgcmVwbHkgaGVhZGVycyBvbiB0aGUgaW50ZXJjZXB0b3IgZm9yIHN1YnNlcXVlbnQgcmVwbGllc1xuICAgKi9cbiAgZGVmYXVsdFJlcGx5SGVhZGVycyAoaGVhZGVycykge1xuICAgIGlmICh0eXBlb2YgaGVhZGVycyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVycyBtdXN0IGJlIGRlZmluZWQnKVxuICAgIH1cblxuICAgIHRoaXNba0RlZmF1bHRIZWFkZXJzXSA9IGhlYWRlcnNcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBkZWZhdWx0IHJlcGx5IHRyYWlsZXJzIG9uIHRoZSBpbnRlcmNlcHRvciBmb3Igc3Vic2VxdWVudCByZXBsaWVzXG4gICAqL1xuICBkZWZhdWx0UmVwbHlUcmFpbGVycyAodHJhaWxlcnMpIHtcbiAgICBpZiAodHlwZW9mIHRyYWlsZXJzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd0cmFpbGVycyBtdXN0IGJlIGRlZmluZWQnKVxuICAgIH1cblxuICAgIHRoaXNba0RlZmF1bHRUcmFpbGVyc10gPSB0cmFpbGVyc1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogU2V0IHJlcGx5IGNvbnRlbnQgbGVuZ3RoIGhlYWRlciBmb3IgcmVwbGllcyBvbiB0aGUgaW50ZXJjZXB0b3JcbiAgICovXG4gIHJlcGx5Q29udGVudExlbmd0aCAoKSB7XG4gICAgdGhpc1trQ29udGVudExlbmd0aF0gPSB0cnVlXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cy5Nb2NrSW50ZXJjZXB0b3IgPSBNb2NrSW50ZXJjZXB0b3Jcbm1vZHVsZS5leHBvcnRzLk1vY2tTY29wZSA9IE1vY2tTY29wZVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHByb21pc2lmeSB9ID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuLi9jbGllbnQnKVxuY29uc3QgeyBidWlsZE1vY2tEaXNwYXRjaCB9ID0gcmVxdWlyZSgnLi9tb2NrLXV0aWxzJylcbmNvbnN0IHtcbiAga0Rpc3BhdGNoZXMsXG4gIGtNb2NrQWdlbnQsXG4gIGtDbG9zZSxcbiAga09yaWdpbmFsQ2xvc2UsXG4gIGtPcmlnaW4sXG4gIGtPcmlnaW5hbERpc3BhdGNoLFxuICBrQ29ubmVjdGVkXG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgeyBNb2NrSW50ZXJjZXB0b3IgfSA9IHJlcXVpcmUoJy4vbW9jay1pbnRlcmNlcHRvcicpXG5jb25zdCBTeW1ib2xzID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuLyoqXG4gKiBNb2NrQ2xpZW50IHByb3ZpZGVzIGFuIEFQSSB0aGF0IGV4dGVuZHMgdGhlIENsaWVudCB0byBpbmZsdWVuY2UgdGhlIG1vY2tEaXNwYXRjaGVzLlxuICovXG5jbGFzcyBNb2NrQ2xpZW50IGV4dGVuZHMgQ2xpZW50IHtcbiAgY29uc3RydWN0b3IgKG9yaWdpbiwgb3B0cykge1xuICAgIHN1cGVyKG9yaWdpbiwgb3B0cylcblxuICAgIGlmICghb3B0cyB8fCAhb3B0cy5hZ2VudCB8fCB0eXBlb2Ygb3B0cy5hZ2VudC5kaXNwYXRjaCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdBcmd1bWVudCBvcHRzLmFnZW50IG11c3QgaW1wbGVtZW50IEFnZW50JylcbiAgICB9XG5cbiAgICB0aGlzW2tNb2NrQWdlbnRdID0gb3B0cy5hZ2VudFxuICAgIHRoaXNba09yaWdpbl0gPSBvcmlnaW5cbiAgICB0aGlzW2tEaXNwYXRjaGVzXSA9IFtdXG4gICAgdGhpc1trQ29ubmVjdGVkXSA9IDFcbiAgICB0aGlzW2tPcmlnaW5hbERpc3BhdGNoXSA9IHRoaXMuZGlzcGF0Y2hcbiAgICB0aGlzW2tPcmlnaW5hbENsb3NlXSA9IHRoaXMuY2xvc2UuYmluZCh0aGlzKVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGJ1aWxkTW9ja0Rpc3BhdGNoLmNhbGwodGhpcylcbiAgICB0aGlzLmNsb3NlID0gdGhpc1trQ2xvc2VdXG4gIH1cblxuICBnZXQgW1N5bWJvbHMua0Nvbm5lY3RlZF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tDb25uZWN0ZWRdXG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCB0aGUgYmFzZSBpbnRlcmNlcHRvciBmb3IgbW9ja2luZyByZXBsaWVzIGZyb20gdW5kaWNpLlxuICAgKi9cbiAgaW50ZXJjZXB0IChvcHRzKSB7XG4gICAgcmV0dXJuIG5ldyBNb2NrSW50ZXJjZXB0b3Iob3B0cywgdGhpc1trRGlzcGF0Y2hlc10pXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgYXdhaXQgcHJvbWlzaWZ5KHRoaXNba09yaWdpbmFsQ2xvc2VdKSgpXG4gICAgdGhpc1trQ29ubmVjdGVkXSA9IDBcbiAgICB0aGlzW2tNb2NrQWdlbnRdW1N5bWJvbHMua0NsaWVudHNdLmRlbGV0ZSh0aGlzW2tPcmlnaW5dKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTW9ja0NsaWVudFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHByb21pc2lmeSB9ID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCBQb29sID0gcmVxdWlyZSgnLi4vcG9vbCcpXG5jb25zdCB7IGJ1aWxkTW9ja0Rpc3BhdGNoIH0gPSByZXF1aXJlKCcuL21vY2stdXRpbHMnKVxuY29uc3Qge1xuICBrRGlzcGF0Y2hlcyxcbiAga01vY2tBZ2VudCxcbiAga0Nsb3NlLFxuICBrT3JpZ2luYWxDbG9zZSxcbiAga09yaWdpbixcbiAga09yaWdpbmFsRGlzcGF0Y2gsXG4gIGtDb25uZWN0ZWRcbn0gPSByZXF1aXJlKCcuL21vY2stc3ltYm9scycpXG5jb25zdCB7IE1vY2tJbnRlcmNlcHRvciB9ID0gcmVxdWlyZSgnLi9tb2NrLWludGVyY2VwdG9yJylcbmNvbnN0IFN5bWJvbHMgPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG4vKipcbiAqIE1vY2tQb29sIHByb3ZpZGVzIGFuIEFQSSB0aGF0IGV4dGVuZHMgdGhlIFBvb2wgdG8gaW5mbHVlbmNlIHRoZSBtb2NrRGlzcGF0Y2hlcy5cbiAqL1xuY2xhc3MgTW9ja1Bvb2wgZXh0ZW5kcyBQb29sIHtcbiAgY29uc3RydWN0b3IgKG9yaWdpbiwgb3B0cykge1xuICAgIHN1cGVyKG9yaWdpbiwgb3B0cylcblxuICAgIGlmICghb3B0cyB8fCAhb3B0cy5hZ2VudCB8fCB0eXBlb2Ygb3B0cy5hZ2VudC5kaXNwYXRjaCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdBcmd1bWVudCBvcHRzLmFnZW50IG11c3QgaW1wbGVtZW50IEFnZW50JylcbiAgICB9XG5cbiAgICB0aGlzW2tNb2NrQWdlbnRdID0gb3B0cy5hZ2VudFxuICAgIHRoaXNba09yaWdpbl0gPSBvcmlnaW5cbiAgICB0aGlzW2tEaXNwYXRjaGVzXSA9IFtdXG4gICAgdGhpc1trQ29ubmVjdGVkXSA9IDFcbiAgICB0aGlzW2tPcmlnaW5hbERpc3BhdGNoXSA9IHRoaXMuZGlzcGF0Y2hcbiAgICB0aGlzW2tPcmlnaW5hbENsb3NlXSA9IHRoaXMuY2xvc2UuYmluZCh0aGlzKVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGJ1aWxkTW9ja0Rpc3BhdGNoLmNhbGwodGhpcylcbiAgICB0aGlzLmNsb3NlID0gdGhpc1trQ2xvc2VdXG4gIH1cblxuICBnZXQgW1N5bWJvbHMua0Nvbm5lY3RlZF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tDb25uZWN0ZWRdXG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCB0aGUgYmFzZSBpbnRlcmNlcHRvciBmb3IgbW9ja2luZyByZXBsaWVzIGZyb20gdW5kaWNpLlxuICAgKi9cbiAgaW50ZXJjZXB0IChvcHRzKSB7XG4gICAgcmV0dXJuIG5ldyBNb2NrSW50ZXJjZXB0b3Iob3B0cywgdGhpc1trRGlzcGF0Y2hlc10pXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgYXdhaXQgcHJvbWlzaWZ5KHRoaXNba09yaWdpbmFsQ2xvc2VdKSgpXG4gICAgdGhpc1trQ29ubmVjdGVkXSA9IDBcbiAgICB0aGlzW2tNb2NrQWdlbnRdW1N5bWJvbHMua0NsaWVudHNdLmRlbGV0ZSh0aGlzW2tPcmlnaW5dKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTW9ja1Bvb2xcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qgc2luZ3VsYXJzID0ge1xuICBwcm9ub3VuOiAnaXQnLFxuICBpczogJ2lzJyxcbiAgd2FzOiAnd2FzJyxcbiAgdGhpczogJ3RoaXMnXG59XG5cbmNvbnN0IHBsdXJhbHMgPSB7XG4gIHByb25vdW46ICd0aGV5JyxcbiAgaXM6ICdhcmUnLFxuICB3YXM6ICd3ZXJlJyxcbiAgdGhpczogJ3RoZXNlJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIFBsdXJhbGl6ZXIge1xuICBjb25zdHJ1Y3RvciAoc2luZ3VsYXIsIHBsdXJhbCkge1xuICAgIHRoaXMuc2luZ3VsYXIgPSBzaW5ndWxhclxuICAgIHRoaXMucGx1cmFsID0gcGx1cmFsXG4gIH1cblxuICBwbHVyYWxpemUgKGNvdW50KSB7XG4gICAgY29uc3Qgb25lID0gY291bnQgPT09IDFcbiAgICBjb25zdCBrZXlzID0gb25lID8gc2luZ3VsYXJzIDogcGx1cmFsc1xuICAgIGNvbnN0IG5vdW4gPSBvbmUgPyB0aGlzLnNpbmd1bGFyIDogdGhpcy5wbHVyYWxcbiAgICByZXR1cm4geyAuLi5rZXlzLCBjb3VudCwgbm91biB9XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBUcmFuc2Zvcm0gfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB7IENvbnNvbGUgfSA9IHJlcXVpcmUoJ2NvbnNvbGUnKVxuXG4vKipcbiAqIEdldHMgdGhlIG91dHB1dCBvZiBgY29uc29sZS50YWJsZShcdTIwMjYpYCBhcyBhIHN0cmluZy5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBQZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyIHtcbiAgY29uc3RydWN0b3IgKHsgZGlzYWJsZUNvbG9ycyB9ID0ge30pIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IG5ldyBUcmFuc2Zvcm0oe1xuICAgICAgdHJhbnNmb3JtIChjaHVuaywgX2VuYywgY2IpIHtcbiAgICAgICAgY2IobnVsbCwgY2h1bmspXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMubG9nZ2VyID0gbmV3IENvbnNvbGUoe1xuICAgICAgc3Rkb3V0OiB0aGlzLnRyYW5zZm9ybSxcbiAgICAgIGluc3BlY3RPcHRpb25zOiB7XG4gICAgICAgIGNvbG9yczogIWRpc2FibGVDb2xvcnMgJiYgIXByb2Nlc3MuZW52LkNJXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZvcm1hdCAocGVuZGluZ0ludGVyY2VwdG9ycykge1xuICAgIGNvbnN0IHdpdGhQcmV0dHlIZWFkZXJzID0gcGVuZGluZ0ludGVyY2VwdG9ycy5tYXAoXG4gICAgICAoeyBtZXRob2QsIHBhdGgsIGRhdGE6IHsgc3RhdHVzQ29kZSB9LCBwZXJzaXN0LCB0aW1lcywgdGltZXNJbnZva2VkLCBvcmlnaW4gfSkgPT4gKHtcbiAgICAgICAgTWV0aG9kOiBtZXRob2QsXG4gICAgICAgIE9yaWdpbjogb3JpZ2luLFxuICAgICAgICBQYXRoOiBwYXRoLFxuICAgICAgICAnU3RhdHVzIGNvZGUnOiBzdGF0dXNDb2RlLFxuICAgICAgICBQZXJzaXN0ZW50OiBwZXJzaXN0ID8gJ1x1MjcwNScgOiAnXHUyNzRDJyxcbiAgICAgICAgSW52b2NhdGlvbnM6IHRpbWVzSW52b2tlZCxcbiAgICAgICAgUmVtYWluaW5nOiBwZXJzaXN0ID8gSW5maW5pdHkgOiB0aW1lcyAtIHRpbWVzSW52b2tlZFxuICAgICAgfSkpXG5cbiAgICB0aGlzLmxvZ2dlci50YWJsZSh3aXRoUHJldHR5SGVhZGVycylcbiAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0ucmVhZCgpLnRvU3RyaW5nKClcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtDbGllbnRzIH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuLi9hZ2VudCcpXG5jb25zdCB7XG4gIGtBZ2VudCxcbiAga01vY2tBZ2VudFNldCxcbiAga01vY2tBZ2VudEdldCxcbiAga0Rpc3BhdGNoZXMsXG4gIGtJc01vY2tBY3RpdmUsXG4gIGtOZXRDb25uZWN0LFxuICBrR2V0TmV0Q29ubmVjdCxcbiAga09wdGlvbnMsXG4gIGtGYWN0b3J5XG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgTW9ja0NsaWVudCA9IHJlcXVpcmUoJy4vbW9jay1jbGllbnQnKVxuY29uc3QgTW9ja1Bvb2wgPSByZXF1aXJlKCcuL21vY2stcG9vbCcpXG5jb25zdCB7IG1hdGNoVmFsdWUsIGJ1aWxkTW9ja09wdGlvbnMgfSA9IHJlcXVpcmUoJy4vbW9jay11dGlscycpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBVbmRpY2lFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgRGlzcGF0Y2hlciA9IHJlcXVpcmUoJy4uL2Rpc3BhdGNoZXInKVxuY29uc3QgUGx1cmFsaXplciA9IHJlcXVpcmUoJy4vcGx1cmFsaXplcicpXG5jb25zdCBQZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyID0gcmVxdWlyZSgnLi9wZW5kaW5nLWludGVyY2VwdG9ycy1mb3JtYXR0ZXInKVxuXG5jbGFzcyBGYWtlV2Vha1JlZiB7XG4gIGNvbnN0cnVjdG9yICh2YWx1ZSkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICB9XG5cbiAgZGVyZWYgKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlXG4gIH1cbn1cblxuY2xhc3MgTW9ja0FnZW50IGV4dGVuZHMgRGlzcGF0Y2hlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzKSB7XG4gICAgc3VwZXIob3B0cylcblxuICAgIHRoaXNba05ldENvbm5lY3RdID0gdHJ1ZVxuICAgIHRoaXNba0lzTW9ja0FjdGl2ZV0gPSB0cnVlXG5cbiAgICAvLyBJbnN0YW50aWF0ZSBBZ2VudCBhbmQgZW5jYXBzdWxhdGVcbiAgICBpZiAoKG9wdHMgJiYgb3B0cy5hZ2VudCAmJiB0eXBlb2Ygb3B0cy5hZ2VudC5kaXNwYXRjaCAhPT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignQXJndW1lbnQgb3B0cy5hZ2VudCBtdXN0IGltcGxlbWVudCBBZ2VudCcpXG4gICAgfVxuICAgIGNvbnN0IGFnZW50ID0gb3B0cyAmJiBvcHRzLmFnZW50ID8gb3B0cy5hZ2VudCA6IG5ldyBBZ2VudChvcHRzKVxuICAgIHRoaXNba0FnZW50XSA9IGFnZW50XG5cbiAgICB0aGlzW2tDbGllbnRzXSA9IGFnZW50W2tDbGllbnRzXVxuICAgIHRoaXNba09wdGlvbnNdID0gYnVpbGRNb2NrT3B0aW9ucyhvcHRzKVxuICB9XG5cbiAgZ2V0IChvcmlnaW4pIHtcbiAgICBsZXQgZGlzcGF0Y2hlciA9IHRoaXNba01vY2tBZ2VudEdldF0ob3JpZ2luKVxuXG4gICAgaWYgKCFkaXNwYXRjaGVyKSB7XG4gICAgICBkaXNwYXRjaGVyID0gdGhpc1trRmFjdG9yeV0ob3JpZ2luKVxuICAgICAgdGhpc1trTW9ja0FnZW50U2V0XShvcmlnaW4sIGRpc3BhdGNoZXIpXG4gICAgfVxuICAgIHJldHVybiBkaXNwYXRjaGVyXG4gIH1cblxuICBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIC8vIENhbGwgTW9ja0FnZW50LmdldCB0byBwZXJmb3JtIGFkZGl0aW9uYWwgc2V0dXAgYmVmb3JlIGRpc3BhdGNoaW5nIGFzIG5vcm1hbFxuICAgIHRoaXMuZ2V0KG9wdHMub3JpZ2luKVxuICAgIHJldHVybiB0aGlzW2tBZ2VudF0uZGlzcGF0Y2gob3B0cywgaGFuZGxlcilcbiAgfVxuXG4gIGFzeW5jIGNsb3NlICgpIHtcbiAgICBhd2FpdCB0aGlzW2tBZ2VudF0uY2xvc2UoKVxuICAgIHRoaXNba0NsaWVudHNdLmNsZWFyKClcbiAgfVxuXG4gIGRlYWN0aXZhdGUgKCkge1xuICAgIHRoaXNba0lzTW9ja0FjdGl2ZV0gPSBmYWxzZVxuICB9XG5cbiAgYWN0aXZhdGUgKCkge1xuICAgIHRoaXNba0lzTW9ja0FjdGl2ZV0gPSB0cnVlXG4gIH1cblxuICBlbmFibGVOZXRDb25uZWN0IChtYXRjaGVyKSB7XG4gICAgaWYgKHR5cGVvZiBtYXRjaGVyID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbWF0Y2hlciA9PT0gJ2Z1bmN0aW9uJyB8fCBtYXRjaGVyIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzW2tOZXRDb25uZWN0XSkpIHtcbiAgICAgICAgdGhpc1trTmV0Q29ubmVjdF0ucHVzaChtYXRjaGVyKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpc1trTmV0Q29ubmVjdF0gPSBbbWF0Y2hlcl1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtYXRjaGVyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpc1trTmV0Q29ubmVjdF0gPSB0cnVlXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignVW5zdXBwb3J0ZWQgbWF0Y2hlci4gTXVzdCBiZSBvbmUgb2YgU3RyaW5nfEZ1bmN0aW9ufFJlZ0V4cC4nKVxuICAgIH1cbiAgfVxuXG4gIGRpc2FibGVOZXRDb25uZWN0ICgpIHtcbiAgICB0aGlzW2tOZXRDb25uZWN0XSA9IGZhbHNlXG4gIH1cblxuICAvLyBUaGlzIGlzIHJlcXVpcmVkIHRvIGJ5cGFzcyBpc3N1ZXMgY2F1c2VkIGJ5IHVzaW5nIGdsb2JhbCBzeW1ib2xzIC0gc2VlOlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTQ0N1xuICBnZXQgaXNNb2NrQWN0aXZlICgpIHtcbiAgICByZXR1cm4gdGhpc1trSXNNb2NrQWN0aXZlXVxuICB9XG5cbiAgW2tNb2NrQWdlbnRTZXRdIChvcmlnaW4sIGRpc3BhdGNoZXIpIHtcbiAgICB0aGlzW2tDbGllbnRzXS5zZXQob3JpZ2luLCBuZXcgRmFrZVdlYWtSZWYoZGlzcGF0Y2hlcikpXG4gIH1cblxuICBba0ZhY3RvcnldIChvcmlnaW4pIHtcbiAgICBjb25zdCBtb2NrT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oeyBhZ2VudDogdGhpcyB9LCB0aGlzW2tPcHRpb25zXSlcbiAgICByZXR1cm4gdGhpc1trT3B0aW9uc10gJiYgdGhpc1trT3B0aW9uc10uY29ubmVjdGlvbnMgPT09IDFcbiAgICAgID8gbmV3IE1vY2tDbGllbnQob3JpZ2luLCBtb2NrT3B0aW9ucylcbiAgICAgIDogbmV3IE1vY2tQb29sKG9yaWdpbiwgbW9ja09wdGlvbnMpXG4gIH1cblxuICBba01vY2tBZ2VudEdldF0gKG9yaWdpbikge1xuICAgIC8vIEZpcnN0IGNoZWNrIGlmIHdlIGNhbiBpbW1lZGlhdGVseSBmaW5kIGl0XG4gICAgY29uc3QgcmVmID0gdGhpc1trQ2xpZW50c10uZ2V0KG9yaWdpbilcbiAgICBpZiAocmVmKSB7XG4gICAgICByZXR1cm4gcmVmLmRlcmVmKClcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgb3JpZ2luIGlzIG5vdCBhIHN0cmluZyBjcmVhdGUgYSBkdW1teSBwYXJlbnQgcG9vbCBhbmQgcmV0dXJuIHRvIHVzZXJcbiAgICBpZiAodHlwZW9mIG9yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IGRpc3BhdGNoZXIgPSB0aGlzW2tGYWN0b3J5XSgnaHR0cDovL2xvY2FsaG9zdDo5OTk5JylcbiAgICAgIHRoaXNba01vY2tBZ2VudFNldF0ob3JpZ2luLCBkaXNwYXRjaGVyKVxuICAgICAgcmV0dXJuIGRpc3BhdGNoZXJcbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBtYXRjaCwgY3JlYXRlIGEgcG9vbCBhbmQgYXNzaWduIHRoZSBzYW1lIGRpc3BhdGNoZXNcbiAgICBmb3IgKGNvbnN0IFtrZXlNYXRjaGVyLCBub25FeHBsaWNpdFJlZl0gb2YgQXJyYXkuZnJvbSh0aGlzW2tDbGllbnRzXSkpIHtcbiAgICAgIGNvbnN0IG5vbkV4cGxpY2l0RGlzcGF0Y2hlciA9IG5vbkV4cGxpY2l0UmVmLmRlcmVmKClcbiAgICAgIGlmIChub25FeHBsaWNpdERpc3BhdGNoZXIgJiYgdHlwZW9mIGtleU1hdGNoZXIgIT09ICdzdHJpbmcnICYmIG1hdGNoVmFsdWUoa2V5TWF0Y2hlciwgb3JpZ2luKSkge1xuICAgICAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trRmFjdG9yeV0ob3JpZ2luKVxuICAgICAgICB0aGlzW2tNb2NrQWdlbnRTZXRdKG9yaWdpbiwgZGlzcGF0Y2hlcilcbiAgICAgICAgZGlzcGF0Y2hlcltrRGlzcGF0Y2hlc10gPSBub25FeHBsaWNpdERpc3BhdGNoZXJba0Rpc3BhdGNoZXNdXG4gICAgICAgIHJldHVybiBkaXNwYXRjaGVyXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgW2tHZXROZXRDb25uZWN0XSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba05ldENvbm5lY3RdXG4gIH1cblxuICBwZW5kaW5nSW50ZXJjZXB0b3JzICgpIHtcbiAgICBjb25zdCBtb2NrQWdlbnRDbGllbnRzID0gdGhpc1trQ2xpZW50c11cblxuICAgIHJldHVybiBBcnJheS5mcm9tKG1vY2tBZ2VudENsaWVudHMuZW50cmllcygpKVxuICAgICAgLmZsYXRNYXAoKFtvcmlnaW4sIHNjb3BlXSkgPT4gc2NvcGUuZGVyZWYoKVtrRGlzcGF0Y2hlc10ubWFwKGRpc3BhdGNoID0+ICh7IC4uLmRpc3BhdGNoLCBvcmlnaW4gfSkpKVxuICAgICAgLmZpbHRlcigoeyBwZW5kaW5nIH0pID0+IHBlbmRpbmcpXG4gIH1cblxuICBhc3NlcnROb1BlbmRpbmdJbnRlcmNlcHRvcnMgKHsgcGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlciA9IG5ldyBQZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyKCkgfSA9IHt9KSB7XG4gICAgY29uc3QgcGVuZGluZyA9IHRoaXMucGVuZGluZ0ludGVyY2VwdG9ycygpXG5cbiAgICBpZiAocGVuZGluZy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHBsdXJhbGl6ZXIgPSBuZXcgUGx1cmFsaXplcignaW50ZXJjZXB0b3InLCAnaW50ZXJjZXB0b3JzJykucGx1cmFsaXplKHBlbmRpbmcubGVuZ3RoKVxuXG4gICAgdGhyb3cgbmV3IFVuZGljaUVycm9yKGBcbiR7cGx1cmFsaXplci5jb3VudH0gJHtwbHVyYWxpemVyLm5vdW59ICR7cGx1cmFsaXplci5pc30gcGVuZGluZzpcblxuJHtwZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyLmZvcm1hdChwZW5kaW5nKX1cbmAudHJpbSgpKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTW9ja0FnZW50XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga1Byb3h5LCBrQ2xvc2UsIGtEZXN0cm95LCBrSW50ZXJjZXB0b3JzIH0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5jb25zdCB7IFVSTCB9ID0gcmVxdWlyZSgndXJsJylcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi9hZ2VudCcpXG5jb25zdCBQb29sID0gcmVxdWlyZSgnLi9wb29sJylcbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgUmVxdWVzdEFib3J0ZWRFcnJvciB9ID0gcmVxdWlyZSgnLi9jb3JlL2Vycm9ycycpXG5jb25zdCBidWlsZENvbm5lY3RvciA9IHJlcXVpcmUoJy4vY29yZS9jb25uZWN0JylcblxuY29uc3Qga0FnZW50ID0gU3ltYm9sKCdwcm94eSBhZ2VudCcpXG5jb25zdCBrQ2xpZW50ID0gU3ltYm9sKCdwcm94eSBjbGllbnQnKVxuY29uc3Qga1Byb3h5SGVhZGVycyA9IFN5bWJvbCgncHJveHkgaGVhZGVycycpXG5jb25zdCBrUmVxdWVzdFRscyA9IFN5bWJvbCgncmVxdWVzdCB0bHMgc2V0dGluZ3MnKVxuY29uc3Qga1Byb3h5VGxzID0gU3ltYm9sKCdwcm94eSB0bHMgc2V0dGluZ3MnKVxuY29uc3Qga0Nvbm5lY3RFbmRwb2ludCA9IFN5bWJvbCgnY29ubmVjdCBlbmRwb2ludCBmdW5jdGlvbicpXG5cbmZ1bmN0aW9uIGRlZmF1bHRQcm90b2NvbFBvcnQgKHByb3RvY29sKSB7XG4gIHJldHVybiBwcm90b2NvbCA9PT0gJ2h0dHBzOicgPyA0NDMgOiA4MFxufVxuXG5mdW5jdGlvbiBidWlsZFByb3h5T3B0aW9ucyAob3B0cykge1xuICBpZiAodHlwZW9mIG9wdHMgPT09ICdzdHJpbmcnKSB7XG4gICAgb3B0cyA9IHsgdXJpOiBvcHRzIH1cbiAgfVxuXG4gIGlmICghb3B0cyB8fCAhb3B0cy51cmkpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Byb3h5IG9wdHMudXJpIGlzIG1hbmRhdG9yeScpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIHVyaTogb3B0cy51cmksXG4gICAgcHJvdG9jb2w6IG9wdHMucHJvdG9jb2wgfHwgJ2h0dHBzJ1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRGYWN0b3J5IChvcmlnaW4sIG9wdHMpIHtcbiAgcmV0dXJuIG5ldyBQb29sKG9yaWdpbiwgb3B0cylcbn1cblxuY2xhc3MgUHJveHlBZ2VudCBleHRlbmRzIERpc3BhdGNoZXJCYXNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMpIHtcbiAgICBzdXBlcihvcHRzKVxuICAgIHRoaXNba1Byb3h5XSA9IGJ1aWxkUHJveHlPcHRpb25zKG9wdHMpXG4gICAgdGhpc1trQWdlbnRdID0gbmV3IEFnZW50KG9wdHMpXG4gICAgdGhpc1trSW50ZXJjZXB0b3JzXSA9IG9wdHMuaW50ZXJjZXB0b3JzICYmIG9wdHMuaW50ZXJjZXB0b3JzLlByb3h5QWdlbnQgJiYgQXJyYXkuaXNBcnJheShvcHRzLmludGVyY2VwdG9ycy5Qcm94eUFnZW50KVxuICAgICAgPyBvcHRzLmludGVyY2VwdG9ycy5Qcm94eUFnZW50XG4gICAgICA6IFtdXG5cbiAgICBpZiAodHlwZW9mIG9wdHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBvcHRzID0geyB1cmk6IG9wdHMgfVxuICAgIH1cblxuICAgIGlmICghb3B0cyB8fCAhb3B0cy51cmkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignUHJveHkgb3B0cy51cmkgaXMgbWFuZGF0b3J5JylcbiAgICB9XG5cbiAgICBjb25zdCB7IGNsaWVudEZhY3RvcnkgPSBkZWZhdWx0RmFjdG9yeSB9ID0gb3B0c1xuXG4gICAgaWYgKHR5cGVvZiBjbGllbnRGYWN0b3J5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Byb3h5IG9wdHMuY2xpZW50RmFjdG9yeSBtdXN0IGJlIGEgZnVuY3Rpb24uJylcbiAgICB9XG5cbiAgICB0aGlzW2tSZXF1ZXN0VGxzXSA9IG9wdHMucmVxdWVzdFRsc1xuICAgIHRoaXNba1Byb3h5VGxzXSA9IG9wdHMucHJveHlUbHNcbiAgICB0aGlzW2tQcm94eUhlYWRlcnNdID0gb3B0cy5oZWFkZXJzIHx8IHt9XG5cbiAgICBjb25zdCByZXNvbHZlZFVybCA9IG5ldyBVUkwob3B0cy51cmkpXG4gICAgY29uc3QgeyBvcmlnaW4sIHBvcnQsIGhvc3QsIHVzZXJuYW1lLCBwYXNzd29yZCB9ID0gcmVzb2x2ZWRVcmxcblxuICAgIGlmIChvcHRzLmF1dGggJiYgb3B0cy50b2tlbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzLmF1dGggY2Fubm90IGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBvcHRzLnRva2VuJylcbiAgICB9IGVsc2UgaWYgKG9wdHMuYXV0aCkge1xuICAgICAgLyogQGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIG9wdHMudG9rZW4gKi9cbiAgICAgIHRoaXNba1Byb3h5SGVhZGVyc11bJ3Byb3h5LWF1dGhvcml6YXRpb24nXSA9IGBCYXNpYyAke29wdHMuYXV0aH1gXG4gICAgfSBlbHNlIGlmIChvcHRzLnRva2VuKSB7XG4gICAgICB0aGlzW2tQcm94eUhlYWRlcnNdWydwcm94eS1hdXRob3JpemF0aW9uJ10gPSBvcHRzLnRva2VuXG4gICAgfSBlbHNlIGlmICh1c2VybmFtZSAmJiBwYXNzd29yZCkge1xuICAgICAgdGhpc1trUHJveHlIZWFkZXJzXVsncHJveHktYXV0aG9yaXphdGlvbiddID0gYEJhc2ljICR7QnVmZmVyLmZyb20oYCR7ZGVjb2RlVVJJQ29tcG9uZW50KHVzZXJuYW1lKX06JHtkZWNvZGVVUklDb21wb25lbnQocGFzc3dvcmQpfWApLnRvU3RyaW5nKCdiYXNlNjQnKX1gXG4gICAgfVxuXG4gICAgY29uc3QgY29ubmVjdCA9IGJ1aWxkQ29ubmVjdG9yKHsgLi4ub3B0cy5wcm94eVRscyB9KVxuICAgIHRoaXNba0Nvbm5lY3RFbmRwb2ludF0gPSBidWlsZENvbm5lY3Rvcih7IC4uLm9wdHMucmVxdWVzdFRscyB9KVxuICAgIHRoaXNba0NsaWVudF0gPSBjbGllbnRGYWN0b3J5KHJlc29sdmVkVXJsLCB7IGNvbm5lY3QgfSlcbiAgICB0aGlzW2tBZ2VudF0gPSBuZXcgQWdlbnQoe1xuICAgICAgLi4ub3B0cyxcbiAgICAgIGNvbm5lY3Q6IGFzeW5jIChvcHRzLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBsZXQgcmVxdWVzdGVkSG9zdCA9IG9wdHMuaG9zdFxuICAgICAgICBpZiAoIW9wdHMucG9ydCkge1xuICAgICAgICAgIHJlcXVlc3RlZEhvc3QgKz0gYDoke2RlZmF1bHRQcm90b2NvbFBvcnQob3B0cy5wcm90b2NvbCl9YFxuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgeyBzb2NrZXQsIHN0YXR1c0NvZGUgfSA9IGF3YWl0IHRoaXNba0NsaWVudF0uY29ubmVjdCh7XG4gICAgICAgICAgICBvcmlnaW4sXG4gICAgICAgICAgICBwb3J0LFxuICAgICAgICAgICAgcGF0aDogcmVxdWVzdGVkSG9zdCxcbiAgICAgICAgICAgIHNpZ25hbDogb3B0cy5zaWduYWwsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgIC4uLnRoaXNba1Byb3h5SGVhZGVyc10sXG4gICAgICAgICAgICAgIGhvc3RcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmIChzdGF0dXNDb2RlICE9PSAyMDApIHtcbiAgICAgICAgICAgIHNvY2tldC5vbignZXJyb3InLCAoKSA9PiB7fSkuZGVzdHJveSgpXG4gICAgICAgICAgICBjYWxsYmFjayhuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcihgUHJveHkgcmVzcG9uc2UgKCR7c3RhdHVzQ29kZX0pICE9PSAyMDAgd2hlbiBIVFRQIFR1bm5lbGluZ2ApKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob3B0cy5wcm90b2NvbCAhPT0gJ2h0dHBzOicpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHNvY2tldClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgc2VydmVybmFtZVxuICAgICAgICAgIGlmICh0aGlzW2tSZXF1ZXN0VGxzXSkge1xuICAgICAgICAgICAgc2VydmVybmFtZSA9IHRoaXNba1JlcXVlc3RUbHNdLnNlcnZlcm5hbWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VydmVybmFtZSA9IG9wdHMuc2VydmVybmFtZVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzW2tDb25uZWN0RW5kcG9pbnRdKHsgLi4ub3B0cywgc2VydmVybmFtZSwgaHR0cFNvY2tldDogc29ja2V0IH0sIGNhbGxiYWNrKVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjYWxsYmFjayhlcnIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZGlzcGF0Y2ggKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBjb25zdCB7IGhvc3QgfSA9IG5ldyBVUkwob3B0cy5vcmlnaW4pXG4gICAgY29uc3QgaGVhZGVycyA9IGJ1aWxkSGVhZGVycyhvcHRzLmhlYWRlcnMpXG4gICAgdGhyb3dJZlByb3h5QXV0aElzU2VudChoZWFkZXJzKVxuICAgIHJldHVybiB0aGlzW2tBZ2VudF0uZGlzcGF0Y2goXG4gICAgICB7XG4gICAgICAgIC4uLm9wdHMsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAuLi5oZWFkZXJzLFxuICAgICAgICAgIGhvc3RcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGhhbmRsZXJcbiAgICApXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgYXdhaXQgdGhpc1trQWdlbnRdLmNsb3NlKClcbiAgICBhd2FpdCB0aGlzW2tDbGllbnRdLmNsb3NlKClcbiAgfVxuXG4gIGFzeW5jIFtrRGVzdHJveV0gKCkge1xuICAgIGF3YWl0IHRoaXNba0FnZW50XS5kZXN0cm95KClcbiAgICBhd2FpdCB0aGlzW2tDbGllbnRdLmRlc3Ryb3koKVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz59IGhlYWRlcnNcbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fVxuICovXG5mdW5jdGlvbiBidWlsZEhlYWRlcnMgKGhlYWRlcnMpIHtcbiAgLy8gV2hlbiB1c2luZyB1bmRpY2kuZmV0Y2gsIHRoZSBoZWFkZXJzIGxpc3QgaXMgc3RvcmVkXG4gIC8vIGFzIGFuIGFycmF5LlxuICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gKi9cbiAgICBjb25zdCBoZWFkZXJzUGFpciA9IHt9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIGhlYWRlcnNQYWlyW2hlYWRlcnNbaV1dID0gaGVhZGVyc1tpICsgMV1cbiAgICB9XG5cbiAgICByZXR1cm4gaGVhZGVyc1BhaXJcbiAgfVxuXG4gIHJldHVybiBoZWFkZXJzXG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBoZWFkZXJzXG4gKlxuICogUHJldmlvdXMgdmVyc2lvbnMgb2YgUHJveHlBZ2VudCBzdWdnZXN0cyB0aGUgUHJveHktQXV0aG9yaXphdGlvbiBpbiByZXF1ZXN0IGhlYWRlcnNcbiAqIE5ldmVydGhlbGVzcywgaXQgd2FzIGNoYW5nZWQgYW5kIHRvIGF2b2lkIGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSBieSBlbmQgdXNlcnNcbiAqIHRoaXMgY2hlY2sgd2FzIGNyZWF0ZWQuXG4gKiBJdCBzaG91bGQgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIGZvciBwZXJmb3JtYW5jZSByZWFzb25zXG4gKi9cbmZ1bmN0aW9uIHRocm93SWZQcm94eUF1dGhJc1NlbnQgKGhlYWRlcnMpIHtcbiAgY29uc3QgZXhpc3RQcm94eUF1dGggPSBoZWFkZXJzICYmIE9iamVjdC5rZXlzKGhlYWRlcnMpXG4gICAgLmZpbmQoKGtleSkgPT4ga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdwcm94eS1hdXRob3JpemF0aW9uJylcbiAgaWYgKGV4aXN0UHJveHlBdXRoKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdQcm94eS1BdXRob3JpemF0aW9uIHNob3VsZCBiZSBzZW50IGluIFByb3h5QWdlbnQgY29uc3RydWN0b3InKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUHJveHlBZ2VudFxuIiwgImNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbmNvbnN0IHsga1JldHJ5SGFuZGxlckRlZmF1bHRSZXRyeSB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgUmVxdWVzdFJldHJ5RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsgaXNEaXN0dXJiZWQsIHBhcnNlSGVhZGVycywgcGFyc2VSYW5nZUhlYWRlciB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuZnVuY3Rpb24gY2FsY3VsYXRlUmV0cnlBZnRlckhlYWRlciAocmV0cnlBZnRlcikge1xuICBjb25zdCBjdXJyZW50ID0gRGF0ZS5ub3coKVxuICBjb25zdCBkaWZmID0gbmV3IERhdGUocmV0cnlBZnRlcikuZ2V0VGltZSgpIC0gY3VycmVudFxuXG4gIHJldHVybiBkaWZmXG59XG5cbmNsYXNzIFJldHJ5SGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBoYW5kbGVycykge1xuICAgIGNvbnN0IHsgcmV0cnlPcHRpb25zLCAuLi5kaXNwYXRjaE9wdHMgfSA9IG9wdHNcbiAgICBjb25zdCB7XG4gICAgICAvLyBSZXRyeSBzY29wZWRcbiAgICAgIHJldHJ5OiByZXRyeUZuLFxuICAgICAgbWF4UmV0cmllcyxcbiAgICAgIG1heFRpbWVvdXQsXG4gICAgICBtaW5UaW1lb3V0LFxuICAgICAgdGltZW91dEZhY3RvcixcbiAgICAgIC8vIFJlc3BvbnNlIHNjb3BlZFxuICAgICAgbWV0aG9kcyxcbiAgICAgIGVycm9yQ29kZXMsXG4gICAgICByZXRyeUFmdGVyLFxuICAgICAgc3RhdHVzQ29kZXNcbiAgICB9ID0gcmV0cnlPcHRpb25zID8/IHt9XG5cbiAgICB0aGlzLmRpc3BhdGNoID0gaGFuZGxlcnMuZGlzcGF0Y2hcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVycy5oYW5kbGVyXG4gICAgdGhpcy5vcHRzID0gZGlzcGF0Y2hPcHRzXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZVxuICAgIHRoaXMucmV0cnlPcHRzID0ge1xuICAgICAgcmV0cnk6IHJldHJ5Rm4gPz8gUmV0cnlIYW5kbGVyW2tSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnldLFxuICAgICAgcmV0cnlBZnRlcjogcmV0cnlBZnRlciA/PyB0cnVlLFxuICAgICAgbWF4VGltZW91dDogbWF4VGltZW91dCA/PyAzMCAqIDEwMDAsIC8vIDMwcyxcbiAgICAgIHRpbWVvdXQ6IG1pblRpbWVvdXQgPz8gNTAwLCAvLyAuNXNcbiAgICAgIHRpbWVvdXRGYWN0b3I6IHRpbWVvdXRGYWN0b3IgPz8gMixcbiAgICAgIG1heFJldHJpZXM6IG1heFJldHJpZXMgPz8gNSxcbiAgICAgIC8vIFdoYXQgZXJyb3JzIHdlIHNob3VsZCByZXRyeVxuICAgICAgbWV0aG9kczogbWV0aG9kcyA/PyBbJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnUFVUJywgJ0RFTEVURScsICdUUkFDRSddLFxuICAgICAgLy8gSW5kaWNhdGVzIHdoaWNoIGVycm9ycyB0byByZXRyeVxuICAgICAgc3RhdHVzQ29kZXM6IHN0YXR1c0NvZGVzID8/IFs1MDAsIDUwMiwgNTAzLCA1MDQsIDQyOV0sXG4gICAgICAvLyBMaXN0IG9mIGVycm9ycyB0byByZXRyeVxuICAgICAgZXJyb3JDb2RlczogZXJyb3JDb2RlcyA/PyBbXG4gICAgICAgICdFQ09OTlJFU0VUJyxcbiAgICAgICAgJ0VDT05OUkVGVVNFRCcsXG4gICAgICAgICdFTk9URk9VTkQnLFxuICAgICAgICAnRU5FVERPV04nLFxuICAgICAgICAnRU5FVFVOUkVBQ0gnLFxuICAgICAgICAnRUhPU1RET1dOJyxcbiAgICAgICAgJ0VIT1NUVU5SRUFDSCcsXG4gICAgICAgICdFUElQRSdcbiAgICAgIF1cbiAgICB9XG5cbiAgICB0aGlzLnJldHJ5Q291bnQgPSAwXG4gICAgdGhpcy5zdGFydCA9IDBcbiAgICB0aGlzLmVuZCA9IG51bGxcbiAgICB0aGlzLmV0YWcgPSBudWxsXG4gICAgdGhpcy5yZXN1bWUgPSBudWxsXG5cbiAgICAvLyBIYW5kbGUgcG9zc2libGUgb25Db25uZWN0IGR1cGxpY2F0aW9uXG4gICAgdGhpcy5oYW5kbGVyLm9uQ29ubmVjdChyZWFzb24gPT4ge1xuICAgICAgdGhpcy5hYm9ydGVkID0gdHJ1ZVxuICAgICAgaWYgKHRoaXMuYWJvcnQpIHtcbiAgICAgICAgdGhpcy5hYm9ydChyZWFzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlYXNvbiA9IHJlYXNvblxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBvblJlcXVlc3RTZW50ICgpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyLm9uUmVxdWVzdFNlbnQpIHtcbiAgICAgIHRoaXMuaGFuZGxlci5vblJlcXVlc3RTZW50KClcbiAgICB9XG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXIub25VcGdyYWRlKSB7XG4gICAgICB0aGlzLmhhbmRsZXIub25VcGdyYWRlKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldClcbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgaWYgKHRoaXMuYWJvcnRlZCkge1xuICAgICAgYWJvcnQodGhpcy5yZWFzb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIH1cbiAgfVxuXG4gIG9uQm9keVNlbnQgKGNodW5rKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlci5vbkJvZHlTZW50KSByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQm9keVNlbnQoY2h1bmspXG4gIH1cblxuICBzdGF0aWMgW2tSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnldIChlcnIsIHsgc3RhdGUsIG9wdHMgfSwgY2IpIHtcbiAgICBjb25zdCB7IHN0YXR1c0NvZGUsIGNvZGUsIGhlYWRlcnMgfSA9IGVyclxuICAgIGNvbnN0IHsgbWV0aG9kLCByZXRyeU9wdGlvbnMgfSA9IG9wdHNcbiAgICBjb25zdCB7XG4gICAgICBtYXhSZXRyaWVzLFxuICAgICAgdGltZW91dCxcbiAgICAgIG1heFRpbWVvdXQsXG4gICAgICB0aW1lb3V0RmFjdG9yLFxuICAgICAgc3RhdHVzQ29kZXMsXG4gICAgICBlcnJvckNvZGVzLFxuICAgICAgbWV0aG9kc1xuICAgIH0gPSByZXRyeU9wdGlvbnNcbiAgICBsZXQgeyBjb3VudGVyLCBjdXJyZW50VGltZW91dCB9ID0gc3RhdGVcblxuICAgIGN1cnJlbnRUaW1lb3V0ID1cbiAgICAgIGN1cnJlbnRUaW1lb3V0ICE9IG51bGwgJiYgY3VycmVudFRpbWVvdXQgPiAwID8gY3VycmVudFRpbWVvdXQgOiB0aW1lb3V0XG5cbiAgICAvLyBBbnkgY29kZSB0aGF0IGlzIG5vdCBhIFVuZGljaSdzIG9yaWdpbmF0ZWQgYW5kIGFsbG93ZWQgdG8gcmV0cnlcbiAgICBpZiAoXG4gICAgICBjb2RlICYmXG4gICAgICBjb2RlICE9PSAnVU5EX0VSUl9SRVFfUkVUUlknICYmXG4gICAgICBjb2RlICE9PSAnVU5EX0VSUl9TT0NLRVQnICYmXG4gICAgICAhZXJyb3JDb2Rlcy5pbmNsdWRlcyhjb2RlKVxuICAgICkge1xuICAgICAgY2IoZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSWYgYSBzZXQgb2YgbWV0aG9kIGFyZSBwcm92aWRlZCBhbmQgdGhlIGN1cnJlbnQgbWV0aG9kIGlzIG5vdCBpbiB0aGUgbGlzdFxuICAgIGlmIChBcnJheS5pc0FycmF5KG1ldGhvZHMpICYmICFtZXRob2RzLmluY2x1ZGVzKG1ldGhvZCkpIHtcbiAgICAgIGNiKGVycilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIElmIGEgc2V0IG9mIHN0YXR1cyBjb2RlIGFyZSBwcm92aWRlZCBhbmQgdGhlIGN1cnJlbnQgc3RhdHVzIGNvZGUgaXMgbm90IGluIHRoZSBsaXN0XG4gICAgaWYgKFxuICAgICAgc3RhdHVzQ29kZSAhPSBudWxsICYmXG4gICAgICBBcnJheS5pc0FycmF5KHN0YXR1c0NvZGVzKSAmJlxuICAgICAgIXN0YXR1c0NvZGVzLmluY2x1ZGVzKHN0YXR1c0NvZGUpXG4gICAgKSB7XG4gICAgICBjYihlcnIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJZiB3ZSByZWFjaGVkIHRoZSBtYXggbnVtYmVyIG9mIHJldHJpZXNcbiAgICBpZiAoY291bnRlciA+IG1heFJldHJpZXMpIHtcbiAgICAgIGNiKGVycilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGxldCByZXRyeUFmdGVySGVhZGVyID0gaGVhZGVycyAhPSBudWxsICYmIGhlYWRlcnNbJ3JldHJ5LWFmdGVyJ11cbiAgICBpZiAocmV0cnlBZnRlckhlYWRlcikge1xuICAgICAgcmV0cnlBZnRlckhlYWRlciA9IE51bWJlcihyZXRyeUFmdGVySGVhZGVyKVxuICAgICAgcmV0cnlBZnRlckhlYWRlciA9IGlzTmFOKHJldHJ5QWZ0ZXJIZWFkZXIpXG4gICAgICAgID8gY2FsY3VsYXRlUmV0cnlBZnRlckhlYWRlcihyZXRyeUFmdGVySGVhZGVyKVxuICAgICAgICA6IHJldHJ5QWZ0ZXJIZWFkZXIgKiAxZTMgLy8gUmV0cnktQWZ0ZXIgaXMgaW4gc2Vjb25kc1xuICAgIH1cblxuICAgIGNvbnN0IHJldHJ5VGltZW91dCA9XG4gICAgICByZXRyeUFmdGVySGVhZGVyID4gMFxuICAgICAgICA/IE1hdGgubWluKHJldHJ5QWZ0ZXJIZWFkZXIsIG1heFRpbWVvdXQpXG4gICAgICAgIDogTWF0aC5taW4oY3VycmVudFRpbWVvdXQgKiB0aW1lb3V0RmFjdG9yICoqIGNvdW50ZXIsIG1heFRpbWVvdXQpXG5cbiAgICBzdGF0ZS5jdXJyZW50VGltZW91dCA9IHJldHJ5VGltZW91dFxuXG4gICAgc2V0VGltZW91dCgoKSA9PiBjYihudWxsKSwgcmV0cnlUaW1lb3V0KVxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCByZXN1bWUsIHN0YXR1c01lc3NhZ2UpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gcGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG5cbiAgICB0aGlzLnJldHJ5Q291bnQgKz0gMVxuXG4gICAgaWYgKHN0YXR1c0NvZGUgPj0gMzAwKSB7XG4gICAgICB0aGlzLmFib3J0KFxuICAgICAgICBuZXcgUmVxdWVzdFJldHJ5RXJyb3IoJ1JlcXVlc3QgZmFpbGVkJywgc3RhdHVzQ29kZSwge1xuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgY291bnQ6IHRoaXMucmV0cnlDb3VudFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gQ2hlY2twb2ludCBmb3IgcmVzdW1lIGZyb20gd2hlcmUgd2UgbGVmdCBpdFxuICAgIGlmICh0aGlzLnJlc3VtZSAhPSBudWxsKSB7XG4gICAgICB0aGlzLnJlc3VtZSA9IG51bGxcblxuICAgICAgaWYgKHN0YXR1c0NvZGUgIT09IDIwNikge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250ZW50UmFuZ2UgPSBwYXJzZVJhbmdlSGVhZGVyKGhlYWRlcnNbJ2NvbnRlbnQtcmFuZ2UnXSlcbiAgICAgIC8vIElmIG5vIGNvbnRlbnQgcmFuZ2VcbiAgICAgIGlmICghY29udGVudFJhbmdlKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoXG4gICAgICAgICAgbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdDb250ZW50LVJhbmdlIG1pc21hdGNoJywgc3RhdHVzQ29kZSwge1xuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgIGNvdW50OiB0aGlzLnJldHJ5Q291bnRcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICAvLyBMZXQncyBzdGFydCB3aXRoIGEgd2VhayBldGFnIGNoZWNrXG4gICAgICBpZiAodGhpcy5ldGFnICE9IG51bGwgJiYgdGhpcy5ldGFnICE9PSBoZWFkZXJzLmV0YWcpIHtcbiAgICAgICAgdGhpcy5hYm9ydChcbiAgICAgICAgICBuZXcgUmVxdWVzdFJldHJ5RXJyb3IoJ0VUYWcgbWlzbWF0Y2gnLCBzdGF0dXNDb2RlLCB7XG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgY291bnQ6IHRoaXMucmV0cnlDb3VudFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgc3RhcnQsIHNpemUsIGVuZCA9IHNpemUgfSA9IGNvbnRlbnRSYW5nZVxuXG4gICAgICBhc3NlcnQodGhpcy5zdGFydCA9PT0gc3RhcnQsICdjb250ZW50LXJhbmdlIG1pc21hdGNoJylcbiAgICAgIGFzc2VydCh0aGlzLmVuZCA9PSBudWxsIHx8IHRoaXMuZW5kID09PSBlbmQsICdjb250ZW50LXJhbmdlIG1pc21hdGNoJylcblxuICAgICAgdGhpcy5yZXN1bWUgPSByZXN1bWVcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5kID09IG51bGwpIHtcbiAgICAgIGlmIChzdGF0dXNDb2RlID09PSAyMDYpIHtcbiAgICAgICAgLy8gRmlyc3QgdGltZSB3ZSByZWNlaXZlIDIwNlxuICAgICAgICBjb25zdCByYW5nZSA9IHBhcnNlUmFuZ2VIZWFkZXIoaGVhZGVyc1snY29udGVudC1yYW5nZSddKVxuXG4gICAgICAgIGlmIChyYW5nZSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkhlYWRlcnMoXG4gICAgICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICAgICAgcmF3SGVhZGVycyxcbiAgICAgICAgICAgIHJlc3VtZSxcbiAgICAgICAgICAgIHN0YXR1c01lc3NhZ2VcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHN0YXJ0LCBzaXplLCBlbmQgPSBzaXplIH0gPSByYW5nZVxuXG4gICAgICAgIGFzc2VydChcbiAgICAgICAgICBzdGFydCAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZShzdGFydCkgJiYgdGhpcy5zdGFydCAhPT0gc3RhcnQsXG4gICAgICAgICAgJ2NvbnRlbnQtcmFuZ2UgbWlzbWF0Y2gnXG4gICAgICAgIClcbiAgICAgICAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZShzdGFydCkpXG4gICAgICAgIGFzc2VydChcbiAgICAgICAgICBlbmQgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUoZW5kKSAmJiB0aGlzLmVuZCAhPT0gZW5kLFxuICAgICAgICAgICdpbnZhbGlkIGNvbnRlbnQtbGVuZ3RoJ1xuICAgICAgICApXG5cbiAgICAgICAgdGhpcy5zdGFydCA9IHN0YXJ0XG4gICAgICAgIHRoaXMuZW5kID0gZW5kXG4gICAgICB9XG5cbiAgICAgIC8vIFdlIG1ha2Ugb3VyIGJlc3QgdG8gY2hlY2twb2ludCB0aGUgYm9keSBmb3IgZnVydGhlciByYW5nZSBoZWFkZXJzXG4gICAgICBpZiAodGhpcy5lbmQgPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gaGVhZGVyc1snY29udGVudC1sZW5ndGgnXVxuICAgICAgICB0aGlzLmVuZCA9IGNvbnRlbnRMZW5ndGggIT0gbnVsbCA/IE51bWJlcihjb250ZW50TGVuZ3RoKSA6IG51bGxcbiAgICAgIH1cblxuICAgICAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZSh0aGlzLnN0YXJ0KSlcbiAgICAgIGFzc2VydChcbiAgICAgICAgdGhpcy5lbmQgPT0gbnVsbCB8fCBOdW1iZXIuaXNGaW5pdGUodGhpcy5lbmQpLFxuICAgICAgICAnaW52YWxpZCBjb250ZW50LWxlbmd0aCdcbiAgICAgIClcblxuICAgICAgdGhpcy5yZXN1bWUgPSByZXN1bWVcbiAgICAgIHRoaXMuZXRhZyA9IGhlYWRlcnMuZXRhZyAhPSBudWxsID8gaGVhZGVycy5ldGFnIDogbnVsbFxuXG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uSGVhZGVycyhcbiAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgcmF3SGVhZGVycyxcbiAgICAgICAgcmVzdW1lLFxuICAgICAgICBzdGF0dXNNZXNzYWdlXG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgZXJyID0gbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdSZXF1ZXN0IGZhaWxlZCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBjb3VudDogdGhpcy5yZXRyeUNvdW50XG4gICAgfSlcblxuICAgIHRoaXMuYWJvcnQoZXJyKVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgdGhpcy5zdGFydCArPSBjaHVuay5sZW5ndGhcblxuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25EYXRhKGNodW5rKVxuICB9XG5cbiAgb25Db21wbGV0ZSAocmF3VHJhaWxlcnMpIHtcbiAgICB0aGlzLnJldHJ5Q291bnQgPSAwXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkNvbXBsZXRlKHJhd1RyYWlsZXJzKVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgaWYgKHRoaXMuYWJvcnRlZCB8fCBpc0Rpc3R1cmJlZCh0aGlzLm9wdHMuYm9keSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgfVxuXG4gICAgdGhpcy5yZXRyeU9wdHMucmV0cnkoXG4gICAgICBlcnIsXG4gICAgICB7XG4gICAgICAgIHN0YXRlOiB7IGNvdW50ZXI6IHRoaXMucmV0cnlDb3VudCsrLCBjdXJyZW50VGltZW91dDogdGhpcy5yZXRyeUFmdGVyIH0sXG4gICAgICAgIG9wdHM6IHsgcmV0cnlPcHRpb25zOiB0aGlzLnJldHJ5T3B0cywgLi4udGhpcy5vcHRzIH1cbiAgICAgIH0sXG4gICAgICBvblJldHJ5LmJpbmQodGhpcylcbiAgICApXG5cbiAgICBmdW5jdGlvbiBvblJldHJ5IChlcnIpIHtcbiAgICAgIGlmIChlcnIgIT0gbnVsbCB8fCB0aGlzLmFib3J0ZWQgfHwgaXNEaXN0dXJiZWQodGhpcy5vcHRzLmJvZHkpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnN0YXJ0ICE9PSAwKSB7XG4gICAgICAgIHRoaXMub3B0cyA9IHtcbiAgICAgICAgICAuLi50aGlzLm9wdHMsXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRzLmhlYWRlcnMsXG4gICAgICAgICAgICByYW5nZTogYGJ5dGVzPSR7dGhpcy5zdGFydH0tJHt0aGlzLmVuZCA/PyAnJ31gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2godGhpcy5vcHRzLCB0aGlzKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlci5vbkVycm9yKGVycilcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZXRyeUhhbmRsZXJcbiIsICIndXNlIHN0cmljdCdcblxuLy8gV2UgaW5jbHVkZSBhIHZlcnNpb24gbnVtYmVyIGZvciB0aGUgRGlzcGF0Y2hlciBBUEkuIEluIGNhc2Ugb2YgYnJlYWtpbmcgY2hhbmdlcyxcbi8vIHRoaXMgdmVyc2lvbiBudW1iZXIgbXVzdCBiZSBpbmNyZWFzZWQgdG8gYXZvaWQgY29uZmxpY3RzLlxuY29uc3QgZ2xvYmFsRGlzcGF0Y2hlciA9IFN5bWJvbC5mb3IoJ3VuZGljaS5nbG9iYWxEaXNwYXRjaGVyLjEnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi9jb3JlL2Vycm9ycycpXG5jb25zdCBBZ2VudCA9IHJlcXVpcmUoJy4vYWdlbnQnKVxuXG5pZiAoZ2V0R2xvYmFsRGlzcGF0Y2hlcigpID09PSB1bmRlZmluZWQpIHtcbiAgc2V0R2xvYmFsRGlzcGF0Y2hlcihuZXcgQWdlbnQoKSlcbn1cblxuZnVuY3Rpb24gc2V0R2xvYmFsRGlzcGF0Y2hlciAoYWdlbnQpIHtcbiAgaWYgKCFhZ2VudCB8fCB0eXBlb2YgYWdlbnQuZGlzcGF0Y2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0FyZ3VtZW50IGFnZW50IG11c3QgaW1wbGVtZW50IEFnZW50JylcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywgZ2xvYmFsRGlzcGF0Y2hlciwge1xuICAgIHZhbHVlOiBhZ2VudCxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGdldEdsb2JhbERpc3BhdGNoZXIgKCkge1xuICByZXR1cm4gZ2xvYmFsVGhpc1tnbG9iYWxEaXNwYXRjaGVyXVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0R2xvYmFsRGlzcGF0Y2hlcixcbiAgZ2V0R2xvYmFsRGlzcGF0Y2hlclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIERlY29yYXRvckhhbmRsZXIge1xuICBjb25zdHJ1Y3RvciAoaGFuZGxlcikge1xuICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXJcbiAgfVxuXG4gIG9uQ29ubmVjdCAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25Db25uZWN0KC4uLmFyZ3MpXG4gIH1cblxuICBvbkVycm9yICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkVycm9yKC4uLmFyZ3MpXG4gIH1cblxuICBvblVwZ3JhZGUgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uVXBncmFkZSguLi5hcmdzKVxuICB9XG5cbiAgb25IZWFkZXJzICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkhlYWRlcnMoLi4uYXJncylcbiAgfVxuXG4gIG9uRGF0YSAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25EYXRhKC4uLmFyZ3MpXG4gIH1cblxuICBvbkNvbXBsZXRlICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkNvbXBsZXRlKC4uLmFyZ3MpXG4gIH1cblxuICBvbkJvZHlTZW50ICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkJvZHlTZW50KC4uLmFyZ3MpXG4gIH1cbn1cbiIsICIvLyBodHRwczovL2dpdGh1Yi5jb20vRXRoYW4tQXJyb3dvb2QvdW5kaWNpLWZldGNoXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtIZWFkZXJzTGlzdCwga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsga0d1YXJkIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3Qge1xuICBtYWtlSXRlcmF0b3IsXG4gIGlzVmFsaWRIZWFkZXJOYW1lLFxuICBpc1ZhbGlkSGVhZGVyVmFsdWVcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbmNvbnN0IGtIZWFkZXJzTWFwID0gU3ltYm9sKCdoZWFkZXJzIG1hcCcpXG5jb25zdCBrSGVhZGVyc1NvcnRlZE1hcCA9IFN5bWJvbCgnaGVhZGVycyBtYXAgc29ydGVkJylcblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICovXG5mdW5jdGlvbiBpc0hUVFBXaGl0ZVNwYWNlQ2hhckNvZGUgKGNvZGUpIHtcbiAgcmV0dXJuIGNvZGUgPT09IDB4MDBhIHx8IGNvZGUgPT09IDB4MDBkIHx8IGNvZGUgPT09IDB4MDA5IHx8IGNvZGUgPT09IDB4MDIwXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItdmFsdWUtbm9ybWFsaXplXG4gKiBAcGFyYW0ge3N0cmluZ30gcG90ZW50aWFsVmFsdWVcbiAqL1xuZnVuY3Rpb24gaGVhZGVyVmFsdWVOb3JtYWxpemUgKHBvdGVudGlhbFZhbHVlKSB7XG4gIC8vICBUbyBub3JtYWxpemUgYSBieXRlIHNlcXVlbmNlIHBvdGVudGlhbFZhbHVlLCByZW1vdmVcbiAgLy8gIGFueSBsZWFkaW5nIGFuZCB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2UgYnl0ZXMgZnJvbVxuICAvLyAgcG90ZW50aWFsVmFsdWUuXG4gIGxldCBpID0gMDsgbGV0IGogPSBwb3RlbnRpYWxWYWx1ZS5sZW5ndGhcblxuICB3aGlsZSAoaiA+IGkgJiYgaXNIVFRQV2hpdGVTcGFjZUNoYXJDb2RlKHBvdGVudGlhbFZhbHVlLmNoYXJDb2RlQXQoaiAtIDEpKSkgLS1qXG4gIHdoaWxlIChqID4gaSAmJiBpc0hUVFBXaGl0ZVNwYWNlQ2hhckNvZGUocG90ZW50aWFsVmFsdWUuY2hhckNvZGVBdChpKSkpICsraVxuXG4gIHJldHVybiBpID09PSAwICYmIGogPT09IHBvdGVudGlhbFZhbHVlLmxlbmd0aCA/IHBvdGVudGlhbFZhbHVlIDogcG90ZW50aWFsVmFsdWUuc3Vic3RyaW5nKGksIGopXG59XG5cbmZ1bmN0aW9uIGZpbGwgKGhlYWRlcnMsIG9iamVjdCkge1xuICAvLyBUbyBmaWxsIGEgSGVhZGVycyBvYmplY3QgaGVhZGVycyB3aXRoIGEgZ2l2ZW4gb2JqZWN0IG9iamVjdCwgcnVuIHRoZXNlIHN0ZXBzOlxuXG4gIC8vIDEuIElmIG9iamVjdCBpcyBhIHNlcXVlbmNlLCB0aGVuIGZvciBlYWNoIGhlYWRlciBpbiBvYmplY3Q6XG4gIC8vIE5vdGU6IHdlYmlkbCBjb252ZXJzaW9uIHRvIGFycmF5IGhhcyBhbHJlYWR5IGJlZW4gZG9uZS5cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqZWN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBoZWFkZXIgPSBvYmplY3RbaV1cbiAgICAgIC8vIDEuIElmIGhlYWRlciBkb2VzIG5vdCBjb250YWluIGV4YWN0bHkgdHdvIGl0ZW1zLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGhlYWRlci5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogJ0hlYWRlcnMgY29uc3RydWN0b3InLFxuICAgICAgICAgIG1lc3NhZ2U6IGBleHBlY3RlZCBuYW1lL3ZhbHVlIHBhaXIgdG8gYmUgbGVuZ3RoIDIsIGZvdW5kICR7aGVhZGVyLmxlbmd0aH0uYFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyAyLiBBcHBlbmQgKGhlYWRlclx1MjAxOXMgZmlyc3QgaXRlbSwgaGVhZGVyXHUyMDE5cyBzZWNvbmQgaXRlbSkgdG8gaGVhZGVycy5cbiAgICAgIGFwcGVuZEhlYWRlcihoZWFkZXJzLCBoZWFkZXJbMF0sIGhlYWRlclsxXSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgLy8gTm90ZTogbnVsbCBzaG91bGQgdGhyb3dcblxuICAgIC8vIDIuIE90aGVyd2lzZSwgb2JqZWN0IGlzIGEgcmVjb3JkLCB0aGVuIGZvciBlYWNoIGtleSBcdTIxOTIgdmFsdWUgaW4gb2JqZWN0LFxuICAgIC8vICAgIGFwcGVuZCAoa2V5LCB2YWx1ZSkgdG8gaGVhZGVyc1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICBhcHBlbmRIZWFkZXIoaGVhZGVycywga2V5c1tpXSwgb2JqZWN0W2tleXNbaV1dKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQoe1xuICAgICAgcHJlZml4OiAnSGVhZGVycyBjb25zdHJ1Y3RvcicsXG4gICAgICBhcmd1bWVudDogJ0FyZ3VtZW50IDEnLFxuICAgICAgdHlwZXM6IFsnc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+JywgJ3JlY29yZDxCeXRlU3RyaW5nLCBCeXRlU3RyaW5nPiddXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVycy1hcHBlbmRcbiAqL1xuZnVuY3Rpb24gYXBwZW5kSGVhZGVyIChoZWFkZXJzLCBuYW1lLCB2YWx1ZSkge1xuICAvLyAxLiBOb3JtYWxpemUgdmFsdWUuXG4gIHZhbHVlID0gaGVhZGVyVmFsdWVOb3JtYWxpemUodmFsdWUpXG5cbiAgLy8gMi4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSBvciB2YWx1ZSBpcyBub3QgYVxuICAvLyAgICBoZWFkZXIgdmFsdWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICBwcmVmaXg6ICdIZWFkZXJzLmFwcGVuZCcsXG4gICAgICB2YWx1ZTogbmFtZSxcbiAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICB9KVxuICB9IGVsc2UgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsdWUpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQoe1xuICAgICAgcHJlZml4OiAnSGVhZGVycy5hcHBlbmQnLFxuICAgICAgdmFsdWUsXG4gICAgICB0eXBlOiAnaGVhZGVyIHZhbHVlJ1xuICAgIH0pXG4gIH1cblxuICAvLyAzLiBJZiBoZWFkZXJzXHUyMDE5cyBndWFyZCBpcyBcImltbXV0YWJsZVwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAvLyA0LiBPdGhlcndpc2UsIGlmIGhlYWRlcnNcdTIwMTlzIGd1YXJkIGlzIFwicmVxdWVzdFwiIGFuZCBuYW1lIGlzIGFcbiAgLy8gICAgZm9yYmlkZGVuIGhlYWRlciBuYW1lLCByZXR1cm4uXG4gIC8vIE5vdGU6IHVuZGljaSBkb2VzIG5vdCBpbXBsZW1lbnQgZm9yYmlkZGVuIGhlYWRlciBuYW1lc1xuICBpZiAoaGVhZGVyc1trR3VhcmRdID09PSAnaW1tdXRhYmxlJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ltbXV0YWJsZScpXG4gIH0gZWxzZSBpZiAoaGVhZGVyc1trR3VhcmRdID09PSAncmVxdWVzdC1uby1jb3JzJykge1xuICAgIC8vIDUuIE90aGVyd2lzZSwgaWYgaGVhZGVyc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIjpcbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyA2LiBPdGhlcndpc2UsIGlmIGhlYWRlcnNcdTIwMTlzIGd1YXJkIGlzIFwicmVzcG9uc2VcIiBhbmQgbmFtZSBpcyBhXG4gIC8vICAgIGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZSwgcmV0dXJuLlxuXG4gIC8vIDcuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGhlYWRlcnNcdTIwMTlzIGhlYWRlciBsaXN0LlxuICByZXR1cm4gaGVhZGVyc1trSGVhZGVyc0xpc3RdLmFwcGVuZChuYW1lLCB2YWx1ZSlcblxuICAvLyA4LiBJZiBoZWFkZXJzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiLCB0aGVuIHJlbW92ZVxuICAvLyAgICBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdCBoZWFkZXJzIGZyb20gaGVhZGVyc1xufVxuXG5jbGFzcyBIZWFkZXJzTGlzdCB7XG4gIC8qKiBAdHlwZSB7W3N0cmluZywgc3RyaW5nXVtdfG51bGx9ICovXG4gIGNvb2tpZXMgPSBudWxsXG5cbiAgY29uc3RydWN0b3IgKGluaXQpIHtcbiAgICBpZiAoaW5pdCBpbnN0YW5jZW9mIEhlYWRlcnNMaXN0KSB7XG4gICAgICB0aGlzW2tIZWFkZXJzTWFwXSA9IG5ldyBNYXAoaW5pdFtrSGVhZGVyc01hcF0pXG4gICAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IGluaXRba0hlYWRlcnNTb3J0ZWRNYXBdXG4gICAgICB0aGlzLmNvb2tpZXMgPSBpbml0LmNvb2tpZXMgPT09IG51bGwgPyBudWxsIDogWy4uLmluaXQuY29va2llc11cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trSGVhZGVyc01hcF0gPSBuZXcgTWFwKGluaXQpXG4gICAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaGVhZGVyLWxpc3QtY29udGFpbnNcbiAgY29udGFpbnMgKG5hbWUpIHtcbiAgICAvLyBBIGhlYWRlciBsaXN0IGxpc3QgY29udGFpbnMgYSBoZWFkZXIgbmFtZSBuYW1lIGlmIGxpc3RcbiAgICAvLyBjb250YWlucyBhIGhlYWRlciB3aG9zZSBuYW1lIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlXG4gICAgLy8gbWF0Y2ggZm9yIG5hbWUuXG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKVxuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNNYXBdLmhhcyhuYW1lKVxuICB9XG5cbiAgY2xlYXIgKCkge1xuICAgIHRoaXNba0hlYWRlcnNNYXBdLmNsZWFyKClcbiAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcbiAgICB0aGlzLmNvb2tpZXMgPSBudWxsXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1hcHBlbmRcbiAgYXBwZW5kIChuYW1lLCB2YWx1ZSkge1xuICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gbnVsbFxuXG4gICAgLy8gMS4gSWYgbGlzdCBjb250YWlucyBuYW1lLCB0aGVuIHNldCBuYW1lIHRvIHRoZSBmaXJzdCBzdWNoXG4gICAgLy8gICAgaGVhZGVyXHUyMDE5cyBuYW1lLlxuICAgIGNvbnN0IGxvd2VyY2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKClcbiAgICBjb25zdCBleGlzdHMgPSB0aGlzW2tIZWFkZXJzTWFwXS5nZXQobG93ZXJjYXNlTmFtZSlcblxuICAgIC8vIDIuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGxpc3QuXG4gICAgaWYgKGV4aXN0cykge1xuICAgICAgY29uc3QgZGVsaW1pdGVyID0gbG93ZXJjYXNlTmFtZSA9PT0gJ2Nvb2tpZScgPyAnOyAnIDogJywgJ1xuICAgICAgdGhpc1trSGVhZGVyc01hcF0uc2V0KGxvd2VyY2FzZU5hbWUsIHtcbiAgICAgICAgbmFtZTogZXhpc3RzLm5hbWUsXG4gICAgICAgIHZhbHVlOiBgJHtleGlzdHMudmFsdWV9JHtkZWxpbWl0ZXJ9JHt2YWx1ZX1gXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tIZWFkZXJzTWFwXS5zZXQobG93ZXJjYXNlTmFtZSwgeyBuYW1lLCB2YWx1ZSB9KVxuICAgIH1cblxuICAgIGlmIChsb3dlcmNhc2VOYW1lID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIHRoaXMuY29va2llcyA/Pz0gW11cbiAgICAgIHRoaXMuY29va2llcy5wdXNoKHZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LXNldFxuICBzZXQgKG5hbWUsIHZhbHVlKSB7XG4gICAgdGhpc1trSGVhZGVyc1NvcnRlZE1hcF0gPSBudWxsXG4gICAgY29uc3QgbG93ZXJjYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKVxuXG4gICAgaWYgKGxvd2VyY2FzZU5hbWUgPT09ICdzZXQtY29va2llJykge1xuICAgICAgdGhpcy5jb29raWVzID0gW3ZhbHVlXVxuICAgIH1cblxuICAgIC8vIDEuIElmIGxpc3QgY29udGFpbnMgbmFtZSwgdGhlbiBzZXQgdGhlIHZhbHVlIG9mXG4gICAgLy8gICAgdGhlIGZpcnN0IHN1Y2ggaGVhZGVyIHRvIHZhbHVlIGFuZCByZW1vdmUgdGhlXG4gICAgLy8gICAgb3RoZXJzLlxuICAgIC8vIDIuIE90aGVyd2lzZSwgYXBwZW5kIGhlYWRlciAobmFtZSwgdmFsdWUpIHRvIGxpc3QuXG4gICAgdGhpc1trSGVhZGVyc01hcF0uc2V0KGxvd2VyY2FzZU5hbWUsIHsgbmFtZSwgdmFsdWUgfSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LWRlbGV0ZVxuICBkZWxldGUgKG5hbWUpIHtcbiAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcblxuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKClcblxuICAgIGlmIChuYW1lID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIHRoaXMuY29va2llcyA9IG51bGxcbiAgICB9XG5cbiAgICB0aGlzW2tIZWFkZXJzTWFwXS5kZWxldGUobmFtZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LWdldFxuICBnZXQgKG5hbWUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXNba0hlYWRlcnNNYXBdLmdldChuYW1lLnRvTG93ZXJDYXNlKCkpXG5cbiAgICAvLyAxLiBJZiBsaXN0IGRvZXMgbm90IGNvbnRhaW4gbmFtZSwgdGhlbiByZXR1cm4gbnVsbC5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlcyBvZiBhbGwgaGVhZGVycyBpbiBsaXN0IHdob3NlIG5hbWVcbiAgICAvLyAgICBpcyBhIGJ5dGUtY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3IgbmFtZSxcbiAgICAvLyAgICBzZXBhcmF0ZWQgZnJvbSBlYWNoIG90aGVyIGJ5IDB4MkMgMHgyMCwgaW4gb3JkZXIuXG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyBudWxsIDogdmFsdWUudmFsdWVcbiAgfVxuXG4gICogW1N5bWJvbC5pdGVyYXRvcl0gKCkge1xuICAgIC8vIHVzZSB0aGUgbG93ZXJjYXNlZCBuYW1lXG4gICAgZm9yIChjb25zdCBbbmFtZSwgeyB2YWx1ZSB9XSBvZiB0aGlzW2tIZWFkZXJzTWFwXSkge1xuICAgICAgeWllbGQgW25hbWUsIHZhbHVlXVxuICAgIH1cbiAgfVxuXG4gIGdldCBlbnRyaWVzICgpIHtcbiAgICBjb25zdCBoZWFkZXJzID0ge31cblxuICAgIGlmICh0aGlzW2tIZWFkZXJzTWFwXS5zaXplKSB7XG4gICAgICBmb3IgKGNvbnN0IHsgbmFtZSwgdmFsdWUgfSBvZiB0aGlzW2tIZWFkZXJzTWFwXS52YWx1ZXMoKSkge1xuICAgICAgICBoZWFkZXJzW25hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGVhZGVyc1xuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXJzLWNsYXNzXG5jbGFzcyBIZWFkZXJzIHtcbiAgY29uc3RydWN0b3IgKGluaXQgPSB1bmRlZmluZWQpIHtcbiAgICBpZiAoaW5pdCA9PT0ga0NvbnN0cnVjdCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXNba0hlYWRlcnNMaXN0XSA9IG5ldyBIZWFkZXJzTGlzdCgpXG5cbiAgICAvLyBUaGUgbmV3IEhlYWRlcnMoaW5pdCkgY29uc3RydWN0b3Igc3RlcHMgYXJlOlxuXG4gICAgLy8gMS4gU2V0IHRoaXNcdTIwMTlzIGd1YXJkIHRvIFwibm9uZVwiLlxuICAgIHRoaXNba0d1YXJkXSA9ICdub25lJ1xuXG4gICAgLy8gMi4gSWYgaW5pdCBpcyBnaXZlbiwgdGhlbiBmaWxsIHRoaXMgd2l0aCBpbml0LlxuICAgIGlmIChpbml0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGluaXQgPSB3ZWJpZGwuY29udmVydGVycy5IZWFkZXJzSW5pdChpbml0KVxuICAgICAgZmlsbCh0aGlzLCBpbml0KVxuICAgIH1cbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1hcHBlbmRcbiAgYXBwZW5kIChuYW1lLCB2YWx1ZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnSGVhZGVycy5hcHBlbmQnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lKVxuICAgIHZhbHVlID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyh2YWx1ZSlcblxuICAgIHJldHVybiBhcHBlbmRIZWFkZXIodGhpcywgbmFtZSwgdmFsdWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtZGVsZXRlXG4gIGRlbGV0ZSAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnSGVhZGVycy5kZWxldGUnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lKVxuXG4gICAgLy8gMS4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKG5hbWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeDogJ0hlYWRlcnMuZGVsZXRlJyxcbiAgICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJpbW11dGFibGVcIiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAvLyAzLiBPdGhlcndpc2UsIGlmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwicmVxdWVzdFwiIGFuZCBuYW1lIGlzIGFcbiAgICAvLyAgICBmb3JiaWRkZW4gaGVhZGVyIG5hbWUsIHJldHVybi5cbiAgICAvLyA0LiBPdGhlcndpc2UsIGlmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwicmVxdWVzdC1uby1jb3JzXCIsIG5hbWVcbiAgICAvLyAgICBpcyBub3QgYSBuby1DT1JTLXNhZmVsaXN0ZWQgcmVxdWVzdC1oZWFkZXIgbmFtZSwgYW5kXG4gICAgLy8gICAgbmFtZSBpcyBub3QgYSBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdC1oZWFkZXIgbmFtZSxcbiAgICAvLyAgICByZXR1cm4uXG4gICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlc3BvbnNlXCIgYW5kIG5hbWUgaXNcbiAgICAvLyAgICBhIGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZSwgcmV0dXJuLlxuICAgIC8vIE5vdGU6IHVuZGljaSBkb2VzIG5vdCBpbXBsZW1lbnQgZm9yYmlkZGVuIGhlYWRlciBuYW1lc1xuICAgIGlmICh0aGlzW2tHdWFyZF0gPT09ICdpbW11dGFibGUnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbW11dGFibGUnKVxuICAgIH0gZWxzZSBpZiAodGhpc1trR3VhcmRdID09PSAncmVxdWVzdC1uby1jb3JzJykge1xuICAgICAgLy8gVE9ET1xuICAgIH1cblxuICAgIC8vIDYuIElmIHRoaXNcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gbmFtZSwgdGhlblxuICAgIC8vICAgIHJldHVybi5cbiAgICBpZiAoIXRoaXNba0hlYWRlcnNMaXN0XS5jb250YWlucyhuYW1lKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gNy4gRGVsZXRlIG5hbWUgZnJvbSB0aGlzXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAvLyA4LiBJZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiLCB0aGVuIHJlbW92ZVxuICAgIC8vICAgIHByaXZpbGVnZWQgbm8tQ09SUyByZXF1ZXN0IGhlYWRlcnMgZnJvbSB0aGlzLlxuICAgIHRoaXNba0hlYWRlcnNMaXN0XS5kZWxldGUobmFtZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1nZXRcbiAgZ2V0IChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdIZWFkZXJzLmdldCcgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKG5hbWUpXG5cbiAgICAvLyAxLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4OiAnSGVhZGVycy5nZXQnLFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBnZXR0aW5nIG5hbWUgZnJvbSB0aGlzXHUyMDE5cyBoZWFkZXJcbiAgICAvLyAgICBsaXN0LlxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzTGlzdF0uZ2V0KG5hbWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtaGFzXG4gIGhhcyAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnSGVhZGVycy5oYXMnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lKVxuXG4gICAgLy8gMS4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKG5hbWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeDogJ0hlYWRlcnMuaGFzJyxcbiAgICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gUmV0dXJuIHRydWUgaWYgdGhpc1x1MjAxOXMgaGVhZGVyIGxpc3QgY29udGFpbnMgbmFtZTtcbiAgICAvLyAgICBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNMaXN0XS5jb250YWlucyhuYW1lKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1oZWFkZXJzLXNldFxuICBzZXQgKG5hbWUsIHZhbHVlKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgeyBoZWFkZXI6ICdIZWFkZXJzLnNldCcgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKG5hbWUpXG4gICAgdmFsdWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKHZhbHVlKVxuXG4gICAgLy8gMS4gTm9ybWFsaXplIHZhbHVlLlxuICAgIHZhbHVlID0gaGVhZGVyVmFsdWVOb3JtYWxpemUodmFsdWUpXG5cbiAgICAvLyAyLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lIG9yIHZhbHVlIGlzIG5vdCBhXG4gICAgLy8gICAgaGVhZGVyIHZhbHVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4OiAnSGVhZGVycy5zZXQnLFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsdWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeDogJ0hlYWRlcnMuc2V0JyxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgdmFsdWUnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDMuIElmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwiaW1tdXRhYmxlXCIsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgLy8gNC4gT3RoZXJ3aXNlLCBpZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3RcIiBhbmQgbmFtZSBpcyBhXG4gICAgLy8gICAgZm9yYmlkZGVuIGhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiIGFuZFxuICAgIC8vICAgIG5hbWUvdmFsdWUgaXMgbm90IGEgbm8tQ09SUy1zYWZlbGlzdGVkIHJlcXVlc3QtaGVhZGVyLFxuICAgIC8vICAgIHJldHVybi5cbiAgICAvLyA2LiBPdGhlcndpc2UsIGlmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwicmVzcG9uc2VcIiBhbmQgbmFtZSBpcyBhXG4gICAgLy8gICAgZm9yYmlkZGVuIHJlc3BvbnNlLWhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBmb3JiaWRkZW4gaGVhZGVyIG5hbWVzXG4gICAgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ltbXV0YWJsZScpXG4gICAgfSBlbHNlIGlmICh0aGlzW2tHdWFyZF0gPT09ICdyZXF1ZXN0LW5vLWNvcnMnKSB7XG4gICAgICAvLyBUT0RPXG4gICAgfVxuXG4gICAgLy8gNy4gU2V0IChuYW1lLCB2YWx1ZSkgaW4gdGhpc1x1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgLy8gOC4gSWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIiwgdGhlbiByZW1vdmVcbiAgICAvLyAgICBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdCBoZWFkZXJzIGZyb20gdGhpc1xuICAgIHRoaXNba0hlYWRlcnNMaXN0XS5zZXQobmFtZSwgdmFsdWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtZ2V0c2V0Y29va2llXG4gIGdldFNldENvb2tpZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIC8vIDEuIElmIHRoaXNcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFNldC1Db29raWVgLCB0aGVuIHJldHVybiBcdTAwQUIgXHUwMEJCLlxuICAgIC8vIDIuIFJldHVybiB0aGUgdmFsdWVzIG9mIGFsbCBoZWFkZXJzIGluIHRoaXNcdTIwMTlzIGhlYWRlciBsaXN0IHdob3NlIG5hbWUgaXNcbiAgICAvLyAgICBhIGJ5dGUtY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3IgYFNldC1Db29raWVgLCBpbiBvcmRlci5cblxuICAgIGNvbnN0IGxpc3QgPSB0aGlzW2tIZWFkZXJzTGlzdF0uY29va2llc1xuXG4gICAgaWYgKGxpc3QpIHtcbiAgICAgIHJldHVybiBbLi4ubGlzdF1cbiAgICB9XG5cbiAgICByZXR1cm4gW11cbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LXNvcnQtYW5kLWNvbWJpbmVcbiAgZ2V0IFtrSGVhZGVyc1NvcnRlZE1hcF0gKCkge1xuICAgIGlmICh0aGlzW2tIZWFkZXJzTGlzdF1ba0hlYWRlcnNTb3J0ZWRNYXBdKSB7XG4gICAgICByZXR1cm4gdGhpc1trSGVhZGVyc0xpc3RdW2tIZWFkZXJzU29ydGVkTWFwXVxuICAgIH1cblxuICAgIC8vIDEuIExldCBoZWFkZXJzIGJlIGFuIGVtcHR5IGxpc3Qgb2YgaGVhZGVycyB3aXRoIHRoZSBrZXkgYmVpbmcgdGhlIG5hbWVcbiAgICAvLyAgICBhbmQgdmFsdWUgdGhlIHZhbHVlLlxuICAgIGNvbnN0IGhlYWRlcnMgPSBbXVxuXG4gICAgLy8gMi4gTGV0IG5hbWVzIGJlIHRoZSByZXN1bHQgb2YgY29udmVydCBoZWFkZXIgbmFtZXMgdG8gYSBzb3J0ZWQtbG93ZXJjYXNlXG4gICAgLy8gICAgc2V0IHdpdGggYWxsIHRoZSBuYW1lcyBvZiB0aGUgaGVhZGVycyBpbiBsaXN0LlxuICAgIGNvbnN0IG5hbWVzID0gWy4uLnRoaXNba0hlYWRlcnNMaXN0XV0uc29ydCgoYSwgYikgPT4gYVswXSA8IGJbMF0gPyAtMSA6IDEpXG4gICAgY29uc3QgY29va2llcyA9IHRoaXNba0hlYWRlcnNMaXN0XS5jb29raWVzXG5cbiAgICAvLyAzLiBGb3IgZWFjaCBuYW1lIG9mIG5hbWVzOlxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGNvbnN0IFtuYW1lLCB2YWx1ZV0gPSBuYW1lc1tpXVxuICAgICAgLy8gMS4gSWYgbmFtZSBpcyBgc2V0LWNvb2tpZWAsIHRoZW46XG4gICAgICBpZiAobmFtZSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICAgIC8vIDEuIExldCB2YWx1ZXMgYmUgYSBsaXN0IG9mIGFsbCB2YWx1ZXMgb2YgaGVhZGVycyBpbiBsaXN0IHdob3NlIG5hbWVcbiAgICAgICAgLy8gICAgaXMgYSBieXRlLWNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIG5hbWUsIGluIG9yZGVyLlxuXG4gICAgICAgIC8vIDIuIEZvciBlYWNoIHZhbHVlIG9mIHZhbHVlczpcbiAgICAgICAgLy8gMS4gQXBwZW5kIChuYW1lLCB2YWx1ZSkgdG8gaGVhZGVycy5cbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb29raWVzLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgaGVhZGVycy5wdXNoKFtuYW1lLCBjb29raWVzW2pdXSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gMi4gT3RoZXJ3aXNlOlxuXG4gICAgICAgIC8vIDEuIExldCB2YWx1ZSBiZSB0aGUgcmVzdWx0IG9mIGdldHRpbmcgbmFtZSBmcm9tIGxpc3QuXG5cbiAgICAgICAgLy8gMi4gQXNzZXJ0OiB2YWx1ZSBpcyBub24tbnVsbC5cbiAgICAgICAgYXNzZXJ0KHZhbHVlICE9PSBudWxsKVxuXG4gICAgICAgIC8vIDMuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGhlYWRlcnMuXG4gICAgICAgIGhlYWRlcnMucHVzaChbbmFtZSwgdmFsdWVdKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXNba0hlYWRlcnNMaXN0XVtrSGVhZGVyc1NvcnRlZE1hcF0gPSBoZWFkZXJzXG5cbiAgICAvLyA0LiBSZXR1cm4gaGVhZGVycy5cbiAgICByZXR1cm4gaGVhZGVyc1xuICB9XG5cbiAga2V5cyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIGlmICh0aGlzW2tHdWFyZF0gPT09ICdpbW11dGFibGUnKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdXG4gICAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKCgpID0+IHZhbHVlLCAnSGVhZGVycycsXG4gICAgICAgICdrZXknKVxuICAgIH1cblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IoXG4gICAgICAoKSA9PiBbLi4udGhpc1trSGVhZGVyc1NvcnRlZE1hcF0udmFsdWVzKCldLFxuICAgICAgJ0hlYWRlcnMnLFxuICAgICAgJ2tleSdcbiAgICApXG4gIH1cblxuICB2YWx1ZXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICBpZiAodGhpc1trR3VhcmRdID09PSAnaW1tdXRhYmxlJykge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXVxuICAgICAgcmV0dXJuIG1ha2VJdGVyYXRvcigoKSA9PiB2YWx1ZSwgJ0hlYWRlcnMnLFxuICAgICAgICAndmFsdWUnKVxuICAgIH1cblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IoXG4gICAgICAoKSA9PiBbLi4udGhpc1trSGVhZGVyc1NvcnRlZE1hcF0udmFsdWVzKCldLFxuICAgICAgJ0hlYWRlcnMnLFxuICAgICAgJ3ZhbHVlJ1xuICAgIClcbiAgfVxuXG4gIGVudHJpZXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICBpZiAodGhpc1trR3VhcmRdID09PSAnaW1tdXRhYmxlJykge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXVxuICAgICAgcmV0dXJuIG1ha2VJdGVyYXRvcigoKSA9PiB2YWx1ZSwgJ0hlYWRlcnMnLFxuICAgICAgICAna2V5K3ZhbHVlJylcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKFxuICAgICAgKCkgPT4gWy4uLnRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdLnZhbHVlcygpXSxcbiAgICAgICdIZWFkZXJzJyxcbiAgICAgICdrZXkrdmFsdWUnXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7KHZhbHVlOiBzdHJpbmcsIGtleTogc3RyaW5nLCBzZWxmOiBIZWFkZXJzKSA9PiB2b2lkfSBjYWxsYmFja0ZuXG4gICAqIEBwYXJhbSB7dW5rbm93bn0gdGhpc0FyZ1xuICAgKi9cbiAgZm9yRWFjaCAoY2FsbGJhY2tGbiwgdGhpc0FyZyA9IGdsb2JhbFRoaXMpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0hlYWRlcnMuZm9yRWFjaCcgfSlcblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2tGbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgXCJGYWlsZWQgdG8gZXhlY3V0ZSAnZm9yRWFjaCcgb24gJ0hlYWRlcnMnOiBwYXJhbWV0ZXIgMSBpcyBub3Qgb2YgdHlwZSAnRnVuY3Rpb24nLlwiXG4gICAgICApXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdGhpcykge1xuICAgICAgY2FsbGJhY2tGbi5hcHBseSh0aGlzQXJnLCBbdmFsdWUsIGtleSwgdGhpc10pXG4gICAgfVxuICB9XG5cbiAgW1N5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJyldICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNMaXN0XVxuICB9XG59XG5cbkhlYWRlcnMucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBIZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEhlYWRlcnMucHJvdG90eXBlLCB7XG4gIGFwcGVuZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZGVsZXRlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBnZXQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGhhczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc2V0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBnZXRTZXRDb29raWU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGtleXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHZhbHVlczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZW50cmllczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZm9yRWFjaDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC5pdGVyYXRvcl06IHsgZW51bWVyYWJsZTogZmFsc2UgfSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0hlYWRlcnMnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICBbdXRpbC5pbnNwZWN0LmN1c3RvbV06IHtcbiAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICB9XG59KVxuXG53ZWJpZGwuY29udmVydGVycy5IZWFkZXJzSW5pdCA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0Jykge1xuICAgIGlmIChWW1N5bWJvbC5pdGVyYXRvcl0pIHtcbiAgICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+J10oVilcbiAgICB9XG5cbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnNbJ3JlY29yZDxCeXRlU3RyaW5nLCBCeXRlU3RyaW5nPiddKFYpXG4gIH1cblxuICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQoe1xuICAgIHByZWZpeDogJ0hlYWRlcnMgY29uc3RydWN0b3InLFxuICAgIGFyZ3VtZW50OiAnQXJndW1lbnQgMScsXG4gICAgdHlwZXM6IFsnc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+JywgJ3JlY29yZDxCeXRlU3RyaW5nLCBCeXRlU3RyaW5nPiddXG4gIH0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBmaWxsLFxuICBIZWFkZXJzLFxuICBIZWFkZXJzTGlzdFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEhlYWRlcnMsIEhlYWRlcnNMaXN0LCBmaWxsIH0gPSByZXF1aXJlKCcuL2hlYWRlcnMnKVxuY29uc3QgeyBleHRyYWN0Qm9keSwgY2xvbmVCb2R5LCBtaXhpbkJvZHkgfSA9IHJlcXVpcmUoJy4vYm9keScpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gdXRpbFxuY29uc3Qge1xuICBpc1ZhbGlkUmVhc29uUGhyYXNlLFxuICBpc0NhbmNlbGxlZCxcbiAgaXNBYm9ydGVkLFxuICBpc0Jsb2JMaWtlLFxuICBzZXJpYWxpemVKYXZhc2NyaXB0VmFsdWVUb0pTT05TdHJpbmcsXG4gIGlzRXJyb3JMaWtlLFxuICBpc29tb3JwaGljRW5jb2RlXG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHtcbiAgcmVkaXJlY3RTdGF0dXNTZXQsXG4gIG51bGxCb2R5U3RhdHVzLFxuICBET01FeGNlcHRpb25cbn0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGtTdGF0ZSwga0hlYWRlcnMsIGtHdWFyZCwga1JlYWxtIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IHsgRm9ybURhdGEgfSA9IHJlcXVpcmUoJy4vZm9ybWRhdGEnKVxuY29uc3QgeyBnZXRHbG9iYWxPcmlnaW4gfSA9IHJlcXVpcmUoJy4vZ2xvYmFsJylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi9kYXRhVVJMJylcbmNvbnN0IHsga0hlYWRlcnNMaXN0LCBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgdHlwZXMgfSA9IHJlcXVpcmUoJ3V0aWwnKVxuXG5jb25zdCBSZWFkYWJsZVN0cmVhbSA9IGdsb2JhbFRoaXMuUmVhZGFibGVTdHJlYW0gfHwgcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG5jb25zdCB0ZXh0RW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigndXRmLTgnKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVzcG9uc2UtY2xhc3NcbmNsYXNzIFJlc3BvbnNlIHtcbiAgLy8gQ3JlYXRlcyBuZXR3b3JrIGVycm9yIFJlc3BvbnNlLlxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIC8vIFRPRE9cbiAgICBjb25zdCByZWxldmFudFJlYWxtID0geyBzZXR0aW5nc09iamVjdDoge30gfVxuXG4gICAgLy8gVGhlIHN0YXRpYyBlcnJvcigpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYVxuICAgIC8vIFJlc3BvbnNlIG9iamVjdCwgZ2l2ZW4gYSBuZXcgbmV0d29yayBlcnJvciwgXCJpbW11dGFibGVcIiwgYW5kIHRoaXNcdTIwMTlzXG4gICAgLy8gcmVsZXZhbnQgUmVhbG0uXG4gICAgY29uc3QgcmVzcG9uc2VPYmplY3QgPSBuZXcgUmVzcG9uc2UoKVxuICAgIHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0gPSBtYWtlTmV0d29ya0Vycm9yKClcbiAgICByZXNwb25zZU9iamVjdFtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gcmVzcG9uc2VPYmplY3Rba1N0YXRlXS5oZWFkZXJzTGlzdFxuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gJ2ltbXV0YWJsZSdcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cbiAgICByZXR1cm4gcmVzcG9uc2VPYmplY3RcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVzcG9uc2UtanNvblxuICBzdGF0aWMganNvbiAoZGF0YSwgaW5pdCA9IHt9KSB7XG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ1Jlc3BvbnNlLmpzb24nIH0pXG5cbiAgICBpZiAoaW5pdCAhPT0gbnVsbCkge1xuICAgICAgaW5pdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlc3BvbnNlSW5pdChpbml0KVxuICAgIH1cblxuICAgIC8vIDEuIExldCBieXRlcyB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgc2VyaWFsaXplIGEgSmF2YVNjcmlwdCB2YWx1ZSB0byBKU09OIGJ5dGVzIG9uIGRhdGEuXG4gICAgY29uc3QgYnl0ZXMgPSB0ZXh0RW5jb2Rlci5lbmNvZGUoXG4gICAgICBzZXJpYWxpemVKYXZhc2NyaXB0VmFsdWVUb0pTT05TdHJpbmcoZGF0YSlcbiAgICApXG5cbiAgICAvLyAyLiBMZXQgYm9keSBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgYnl0ZXMuXG4gICAgY29uc3QgYm9keSA9IGV4dHJhY3RCb2R5KGJ5dGVzKVxuXG4gICAgLy8gMy4gTGV0IHJlc3BvbnNlT2JqZWN0IGJlIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBSZXNwb25zZSBvYmplY3QsIGdpdmVuIGEgbmV3IHJlc3BvbnNlLFxuICAgIC8vICAgIFwicmVzcG9uc2VcIiwgYW5kIHRoaXNcdTIwMTlzIHJlbGV2YW50IFJlYWxtLlxuICAgIGNvbnN0IHJlbGV2YW50UmVhbG0gPSB7IHNldHRpbmdzT2JqZWN0OiB7fSB9XG4gICAgY29uc3QgcmVzcG9uc2VPYmplY3QgPSBuZXcgUmVzcG9uc2UoKVxuICAgIHJlc3BvbnNlT2JqZWN0W2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSAncmVzcG9uc2UnXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG5cbiAgICAvLyA0LiBQZXJmb3JtIGluaXRpYWxpemUgYSByZXNwb25zZSBnaXZlbiByZXNwb25zZU9iamVjdCwgaW5pdCwgYW5kIChib2R5LCBcImFwcGxpY2F0aW9uL2pzb25cIikuXG4gICAgaW5pdGlhbGl6ZVJlc3BvbnNlKHJlc3BvbnNlT2JqZWN0LCBpbml0LCB7IGJvZHk6IGJvZHlbMF0sIHR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyB9KVxuXG4gICAgLy8gNS4gUmV0dXJuIHJlc3BvbnNlT2JqZWN0LlxuICAgIHJldHVybiByZXNwb25zZU9iamVjdFxuICB9XG5cbiAgLy8gQ3JlYXRlcyBhIHJlZGlyZWN0IFJlc3BvbnNlIHRoYXQgcmVkaXJlY3RzIHRvIHVybCB3aXRoIHN0YXR1cyBzdGF0dXMuXG4gIHN0YXRpYyByZWRpcmVjdCAodXJsLCBzdGF0dXMgPSAzMDIpIHtcbiAgICBjb25zdCByZWxldmFudFJlYWxtID0geyBzZXR0aW5nc09iamVjdDoge30gfVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ1Jlc3BvbnNlLnJlZGlyZWN0JyB9KVxuXG4gICAgdXJsID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHVybClcbiAgICBzdGF0dXMgPSB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgc2hvcnQnXShzdGF0dXMpXG5cbiAgICAvLyAxLiBMZXQgcGFyc2VkVVJMIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyB1cmwgd2l0aCBjdXJyZW50IHNldHRpbmdzXG4gICAgLy8gb2JqZWN0XHUyMDE5cyBBUEkgYmFzZSBVUkwuXG4gICAgLy8gMi4gSWYgcGFyc2VkVVJMIGlzIGZhaWx1cmUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgLy8gVE9ETzogYmFzZS1VUkw/XG4gICAgbGV0IHBhcnNlZFVSTFxuICAgIHRyeSB7XG4gICAgICBwYXJzZWRVUkwgPSBuZXcgVVJMKHVybCwgZ2V0R2xvYmFsT3JpZ2luKCkpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBUeXBlRXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSBVUkwgZnJvbSAnICsgdXJsKSwge1xuICAgICAgICBjYXVzZTogZXJyXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDMuIElmIHN0YXR1cyBpcyBub3QgYSByZWRpcmVjdCBzdGF0dXMsIHRoZW4gdGhyb3cgYSBSYW5nZUVycm9yLlxuICAgIGlmICghcmVkaXJlY3RTdGF0dXNTZXQuaGFzKHN0YXR1cykpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHN0YXR1cyBjb2RlICcgKyBzdGF0dXMpXG4gICAgfVxuXG4gICAgLy8gNC4gTGV0IHJlc3BvbnNlT2JqZWN0IGJlIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBSZXNwb25zZSBvYmplY3QsXG4gICAgLy8gZ2l2ZW4gYSBuZXcgcmVzcG9uc2UsIFwiaW1tdXRhYmxlXCIsIGFuZCB0aGlzXHUyMDE5cyByZWxldmFudCBSZWFsbS5cbiAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IG5ldyBSZXNwb25zZSgpXG4gICAgcmVzcG9uc2VPYmplY3Rba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdpbW11dGFibGUnXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG5cbiAgICAvLyA1LiBTZXQgcmVzcG9uc2VPYmplY3RcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgdG8gc3RhdHVzLlxuICAgIHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0uc3RhdHVzID0gc3RhdHVzXG5cbiAgICAvLyA2LiBMZXQgdmFsdWUgYmUgcGFyc2VkVVJMLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQuXG4gICAgY29uc3QgdmFsdWUgPSBpc29tb3JwaGljRW5jb2RlKFVSTFNlcmlhbGl6ZXIocGFyc2VkVVJMKSlcblxuICAgIC8vIDcuIEFwcGVuZCBgTG9jYXRpb25gL3ZhbHVlIHRvIHJlc3BvbnNlT2JqZWN0XHUyMDE5cyByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXS5oZWFkZXJzTGlzdC5hcHBlbmQoJ2xvY2F0aW9uJywgdmFsdWUpXG5cbiAgICAvLyA4LiBSZXR1cm4gcmVzcG9uc2VPYmplY3QuXG4gICAgcmV0dXJuIHJlc3BvbnNlT2JqZWN0XG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLXJlc3BvbnNlXG4gIGNvbnN0cnVjdG9yIChib2R5ID0gbnVsbCwgaW5pdCA9IHt9KSB7XG4gICAgaWYgKGJvZHkgIT09IG51bGwpIHtcbiAgICAgIGJvZHkgPSB3ZWJpZGwuY29udmVydGVycy5Cb2R5SW5pdChib2R5KVxuICAgIH1cblxuICAgIGluaXQgPSB3ZWJpZGwuY29udmVydGVycy5SZXNwb25zZUluaXQoaW5pdClcblxuICAgIC8vIFRPRE9cbiAgICB0aGlzW2tSZWFsbV0gPSB7IHNldHRpbmdzT2JqZWN0OiB7fSB9XG5cbiAgICAvLyAxLiBTZXQgdGhpc1x1MjAxOXMgcmVzcG9uc2UgdG8gYSBuZXcgcmVzcG9uc2UuXG4gICAgdGhpc1trU3RhdGVdID0gbWFrZVJlc3BvbnNlKHt9KVxuXG4gICAgLy8gMi4gU2V0IHRoaXNcdTIwMTlzIGhlYWRlcnMgdG8gYSBuZXcgSGVhZGVycyBvYmplY3Qgd2l0aCB0aGlzXHUyMDE5cyByZWxldmFudFxuICAgIC8vIFJlYWxtLCB3aG9zZSBoZWFkZXIgbGlzdCBpcyB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QgYW5kIGd1YXJkXG4gICAgLy8gaXMgXCJyZXNwb25zZVwiLlxuICAgIHRoaXNba0hlYWRlcnNdID0gbmV3IEhlYWRlcnMoa0NvbnN0cnVjdClcbiAgICB0aGlzW2tIZWFkZXJzXVtrR3VhcmRdID0gJ3Jlc3BvbnNlJ1xuICAgIHRoaXNba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSB0aGlzW2tTdGF0ZV0uaGVhZGVyc0xpc3RcbiAgICB0aGlzW2tIZWFkZXJzXVtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG5cbiAgICAvLyAzLiBMZXQgYm9keVdpdGhUeXBlIGJlIG51bGwuXG4gICAgbGV0IGJvZHlXaXRoVHlwZSA9IG51bGxcblxuICAgIC8vIDQuIElmIGJvZHkgaXMgbm9uLW51bGwsIHRoZW4gc2V0IGJvZHlXaXRoVHlwZSB0byB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgYm9keS5cbiAgICBpZiAoYm9keSAhPSBudWxsKSB7XG4gICAgICBjb25zdCBbZXh0cmFjdGVkQm9keSwgdHlwZV0gPSBleHRyYWN0Qm9keShib2R5KVxuICAgICAgYm9keVdpdGhUeXBlID0geyBib2R5OiBleHRyYWN0ZWRCb2R5LCB0eXBlIH1cbiAgICB9XG5cbiAgICAvLyA1LiBQZXJmb3JtIGluaXRpYWxpemUgYSByZXNwb25zZSBnaXZlbiB0aGlzLCBpbml0LCBhbmQgYm9keVdpdGhUeXBlLlxuICAgIGluaXRpYWxpemVSZXNwb25zZSh0aGlzLCBpbml0LCBib2R5V2l0aFR5cGUpXG4gIH1cblxuICAvLyBSZXR1cm5zIHJlc3BvbnNlXHUyMDE5cyB0eXBlLCBlLmcuLCBcImNvcnNcIi5cbiAgZ2V0IHR5cGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIHR5cGUgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIHR5cGUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS50eXBlXG4gIH1cblxuICAvLyBSZXR1cm5zIHJlc3BvbnNlXHUyMDE5cyBVUkwsIGlmIGl0IGhhcyBvbmU7IG90aGVyd2lzZSB0aGUgZW1wdHkgc3RyaW5nLlxuICBnZXQgdXJsICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIGNvbnN0IHVybExpc3QgPSB0aGlzW2tTdGF0ZV0udXJsTGlzdFxuXG4gICAgLy8gVGhlIHVybCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgZW1wdHkgc3RyaW5nIGlmIHRoaXNcdTIwMTlzXG4gICAgLy8gcmVzcG9uc2VcdTIwMTlzIFVSTCBpcyBudWxsOyBvdGhlcndpc2UgdGhpc1x1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIFVSTCxcbiAgICAvLyBzZXJpYWxpemVkIHdpdGggZXhjbHVkZSBmcmFnbWVudCBzZXQgdG8gdHJ1ZS5cbiAgICBjb25zdCB1cmwgPSB1cmxMaXN0W3VybExpc3QubGVuZ3RoIC0gMV0gPz8gbnVsbFxuXG4gICAgaWYgKHVybCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuXG4gICAgcmV0dXJuIFVSTFNlcmlhbGl6ZXIodXJsLCB0cnVlKVxuICB9XG5cbiAgLy8gUmV0dXJucyB3aGV0aGVyIHJlc3BvbnNlIHdhcyBvYnRhaW5lZCB0aHJvdWdoIGEgcmVkaXJlY3QuXG4gIGdldCByZWRpcmVjdGVkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIFRoZSByZWRpcmVjdGVkIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRydWUgaWYgdGhpc1x1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIFVSTFxuICAgIC8vIGxpc3QgaGFzIG1vcmUgdGhhbiBvbmUgaXRlbTsgb3RoZXJ3aXNlIGZhbHNlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0udXJsTGlzdC5sZW5ndGggPiAxXG4gIH1cblxuICAvLyBSZXR1cm5zIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMuXG4gIGdldCBzdGF0dXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIHN0YXR1cyBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgc3RhdHVzLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uc3RhdHVzXG4gIH1cblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyBhbiBvayBzdGF0dXMuXG4gIGdldCBvayAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgb2sgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIGFuXG4gICAgLy8gb2sgc3RhdHVzOyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5zdGF0dXMgPj0gMjAwICYmIHRoaXNba1N0YXRlXS5zdGF0dXMgPD0gMjk5XG4gIH1cblxuICAvLyBSZXR1cm5zIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgbWVzc2FnZS5cbiAgZ2V0IHN0YXR1c1RleHQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIHN0YXR1c1RleHQgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIHN0YXR1c1xuICAgIC8vIG1lc3NhZ2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5zdGF0dXNUZXh0XG4gIH1cblxuICAvLyBSZXR1cm5zIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXJzIGFzIEhlYWRlcnMuXG4gIGdldCBoZWFkZXJzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIFRoZSBoZWFkZXJzIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIGhlYWRlcnMuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNdXG4gIH1cblxuICBnZXQgYm9keSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJvZHkgPyB0aGlzW2tTdGF0ZV0uYm9keS5zdHJlYW0gOiBudWxsXG4gIH1cblxuICBnZXQgYm9keVVzZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgcmV0dXJuICEhdGhpc1trU3RhdGVdLmJvZHkgJiYgdXRpbC5pc0Rpc3R1cmJlZCh0aGlzW2tTdGF0ZV0uYm9keS5zdHJlYW0pXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgY2xvbmUgb2YgcmVzcG9uc2UuXG4gIGNsb25lICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIDEuIElmIHRoaXMgaXMgdW51c2FibGUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHRoaXMuYm9keVVzZWQgfHwgKHRoaXMuYm9keSAmJiB0aGlzLmJvZHkubG9ja2VkKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdSZXNwb25zZS5jbG9uZScsXG4gICAgICAgIG1lc3NhZ2U6ICdCb2R5IGhhcyBhbHJlYWR5IGJlZW4gY29uc3VtZWQuJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBMZXQgY2xvbmVkUmVzcG9uc2UgYmUgdGhlIHJlc3VsdCBvZiBjbG9uaW5nIHRoaXNcdTIwMTlzIHJlc3BvbnNlLlxuICAgIGNvbnN0IGNsb25lZFJlc3BvbnNlID0gY2xvbmVSZXNwb25zZSh0aGlzW2tTdGF0ZV0pXG5cbiAgICAvLyAzLiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlc3BvbnNlIG9iamVjdCwgZ2l2ZW5cbiAgICAvLyBjbG9uZWRSZXNwb25zZSwgdGhpc1x1MjAxOXMgaGVhZGVyc1x1MjAxOXMgZ3VhcmQsIGFuZCB0aGlzXHUyMDE5cyByZWxldmFudCBSZWFsbS5cbiAgICBjb25zdCBjbG9uZWRSZXNwb25zZU9iamVjdCA9IG5ldyBSZXNwb25zZSgpXG4gICAgY2xvbmVkUmVzcG9uc2VPYmplY3Rba1N0YXRlXSA9IGNsb25lZFJlc3BvbnNlXG4gICAgY2xvbmVkUmVzcG9uc2VPYmplY3Rba1JlYWxtXSA9IHRoaXNba1JlYWxtXVxuICAgIGNsb25lZFJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gY2xvbmVkUmVzcG9uc2UuaGVhZGVyc0xpc3RcbiAgICBjbG9uZWRSZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9IHRoaXNba0hlYWRlcnNdW2tHdWFyZF1cbiAgICBjbG9uZWRSZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba1JlYWxtXSA9IHRoaXNba0hlYWRlcnNdW2tSZWFsbV1cblxuICAgIHJldHVybiBjbG9uZWRSZXNwb25zZU9iamVjdFxuICB9XG59XG5cbm1peGluQm9keShSZXNwb25zZSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmVzcG9uc2UucHJvdG90eXBlLCB7XG4gIHR5cGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHVybDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc3RhdHVzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvazoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVkaXJlY3RlZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc3RhdHVzVGV4dDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaGVhZGVyczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY2xvbmU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJvZHk6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJvZHlVc2VkOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnUmVzcG9uc2UnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZXNwb25zZSwge1xuICBqc29uOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWRpcmVjdDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHlcbn0pXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXJlc3BvbnNlLWNsb25lXG5mdW5jdGlvbiBjbG9uZVJlc3BvbnNlIChyZXNwb25zZSkge1xuICAvLyBUbyBjbG9uZSBhIHJlc3BvbnNlIHJlc3BvbnNlLCBydW4gdGhlc2Ugc3RlcHM6XG5cbiAgLy8gMS4gSWYgcmVzcG9uc2UgaXMgYSBmaWx0ZXJlZCByZXNwb25zZSwgdGhlbiByZXR1cm4gYSBuZXcgaWRlbnRpY2FsXG4gIC8vIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIGludGVybmFsIHJlc3BvbnNlIGlzIGEgY2xvbmUgb2YgcmVzcG9uc2VcdTIwMTlzXG4gIC8vIGludGVybmFsIHJlc3BvbnNlLlxuICBpZiAocmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZSkge1xuICAgIHJldHVybiBmaWx0ZXJSZXNwb25zZShcbiAgICAgIGNsb25lUmVzcG9uc2UocmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZSksXG4gICAgICByZXNwb25zZS50eXBlXG4gICAgKVxuICB9XG5cbiAgLy8gMi4gTGV0IG5ld1Jlc3BvbnNlIGJlIGEgY29weSBvZiByZXNwb25zZSwgZXhjZXB0IGZvciBpdHMgYm9keS5cbiAgY29uc3QgbmV3UmVzcG9uc2UgPSBtYWtlUmVzcG9uc2UoeyAuLi5yZXNwb25zZSwgYm9keTogbnVsbCB9KVxuXG4gIC8vIDMuIElmIHJlc3BvbnNlXHUyMDE5cyBib2R5IGlzIG5vbi1udWxsLCB0aGVuIHNldCBuZXdSZXNwb25zZVx1MjAxOXMgYm9keSB0byB0aGVcbiAgLy8gcmVzdWx0IG9mIGNsb25pbmcgcmVzcG9uc2VcdTIwMTlzIGJvZHkuXG4gIGlmIChyZXNwb25zZS5ib2R5ICE9IG51bGwpIHtcbiAgICBuZXdSZXNwb25zZS5ib2R5ID0gY2xvbmVCb2R5KHJlc3BvbnNlLmJvZHkpXG4gIH1cblxuICAvLyA0LiBSZXR1cm4gbmV3UmVzcG9uc2UuXG4gIHJldHVybiBuZXdSZXNwb25zZVxufVxuXG5mdW5jdGlvbiBtYWtlUmVzcG9uc2UgKGluaXQpIHtcbiAgcmV0dXJuIHtcbiAgICBhYm9ydGVkOiBmYWxzZSxcbiAgICByYW5nZVJlcXVlc3RlZDogZmFsc2UsXG4gICAgdGltaW5nQWxsb3dQYXNzZWQ6IGZhbHNlLFxuICAgIHJlcXVlc3RJbmNsdWRlc0NyZWRlbnRpYWxzOiBmYWxzZSxcbiAgICB0eXBlOiAnZGVmYXVsdCcsXG4gICAgc3RhdHVzOiAyMDAsXG4gICAgdGltaW5nSW5mbzogbnVsbCxcbiAgICBjYWNoZVN0YXRlOiAnJyxcbiAgICBzdGF0dXNUZXh0OiAnJyxcbiAgICAuLi5pbml0LFxuICAgIGhlYWRlcnNMaXN0OiBpbml0LmhlYWRlcnNMaXN0XG4gICAgICA/IG5ldyBIZWFkZXJzTGlzdChpbml0LmhlYWRlcnNMaXN0KVxuICAgICAgOiBuZXcgSGVhZGVyc0xpc3QoKSxcbiAgICB1cmxMaXN0OiBpbml0LnVybExpc3QgPyBbLi4uaW5pdC51cmxMaXN0XSA6IFtdXG4gIH1cbn1cblxuZnVuY3Rpb24gbWFrZU5ldHdvcmtFcnJvciAocmVhc29uKSB7XG4gIGNvbnN0IGlzRXJyb3IgPSBpc0Vycm9yTGlrZShyZWFzb24pXG4gIHJldHVybiBtYWtlUmVzcG9uc2Uoe1xuICAgIHR5cGU6ICdlcnJvcicsXG4gICAgc3RhdHVzOiAwLFxuICAgIGVycm9yOiBpc0Vycm9yXG4gICAgICA/IHJlYXNvblxuICAgICAgOiBuZXcgRXJyb3IocmVhc29uID8gU3RyaW5nKHJlYXNvbikgOiByZWFzb24pLFxuICAgIGFib3J0ZWQ6IHJlYXNvbiAmJiByZWFzb24ubmFtZSA9PT0gJ0Fib3J0RXJyb3InXG4gIH0pXG59XG5cbmZ1bmN0aW9uIG1ha2VGaWx0ZXJlZFJlc3BvbnNlIChyZXNwb25zZSwgc3RhdGUpIHtcbiAgc3RhdGUgPSB7XG4gICAgaW50ZXJuYWxSZXNwb25zZTogcmVzcG9uc2UsXG4gICAgLi4uc3RhdGVcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJveHkocmVzcG9uc2UsIHtcbiAgICBnZXQgKHRhcmdldCwgcCkge1xuICAgICAgcmV0dXJuIHAgaW4gc3RhdGUgPyBzdGF0ZVtwXSA6IHRhcmdldFtwXVxuICAgIH0sXG4gICAgc2V0ICh0YXJnZXQsIHAsIHZhbHVlKSB7XG4gICAgICBhc3NlcnQoIShwIGluIHN0YXRlKSlcbiAgICAgIHRhcmdldFtwXSA9IHZhbHVlXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfSlcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZmlsdGVyZWQtcmVzcG9uc2VcbmZ1bmN0aW9uIGZpbHRlclJlc3BvbnNlIChyZXNwb25zZSwgdHlwZSkge1xuICAvLyBTZXQgcmVzcG9uc2UgdG8gdGhlIGZvbGxvd2luZyBmaWx0ZXJlZCByZXNwb25zZSB3aXRoIHJlc3BvbnNlIGFzIGl0c1xuICAvLyBpbnRlcm5hbCByZXNwb25zZSwgZGVwZW5kaW5nIG9uIHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nOlxuICBpZiAodHlwZSA9PT0gJ2Jhc2ljJykge1xuICAgIC8vIEEgYmFzaWMgZmlsdGVyZWQgcmVzcG9uc2UgaXMgYSBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSB0eXBlIGlzIFwiYmFzaWNcIlxuICAgIC8vIGFuZCBoZWFkZXIgbGlzdCBleGNsdWRlcyBhbnkgaGVhZGVycyBpbiBpbnRlcm5hbCByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3RcbiAgICAvLyB3aG9zZSBuYW1lIGlzIGEgZm9yYmlkZGVuIHJlc3BvbnNlLWhlYWRlciBuYW1lLlxuXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBmb3JiaWRkZW4gcmVzcG9uc2UtaGVhZGVyIG5hbWVzXG4gICAgcmV0dXJuIG1ha2VGaWx0ZXJlZFJlc3BvbnNlKHJlc3BvbnNlLCB7XG4gICAgICB0eXBlOiAnYmFzaWMnLFxuICAgICAgaGVhZGVyc0xpc3Q6IHJlc3BvbnNlLmhlYWRlcnNMaXN0XG4gICAgfSlcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnY29ycycpIHtcbiAgICAvLyBBIENPUlMgZmlsdGVyZWQgcmVzcG9uc2UgaXMgYSBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSB0eXBlIGlzIFwiY29yc1wiXG4gICAgLy8gYW5kIGhlYWRlciBsaXN0IGV4Y2x1ZGVzIGFueSBoZWFkZXJzIGluIGludGVybmFsIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXJcbiAgICAvLyBsaXN0IHdob3NlIG5hbWUgaXMgbm90IGEgQ09SUy1zYWZlbGlzdGVkIHJlc3BvbnNlLWhlYWRlciBuYW1lLCBnaXZlblxuICAgIC8vIGludGVybmFsIHJlc3BvbnNlXHUyMDE5cyBDT1JTLWV4cG9zZWQgaGVhZGVyLW5hbWUgbGlzdC5cblxuICAgIC8vIE5vdGU6IHVuZGljaSBkb2VzIG5vdCBpbXBsZW1lbnQgQ09SUy1zYWZlbGlzdGVkIHJlc3BvbnNlLWhlYWRlciBuYW1lc1xuICAgIHJldHVybiBtYWtlRmlsdGVyZWRSZXNwb25zZShyZXNwb25zZSwge1xuICAgICAgdHlwZTogJ2NvcnMnLFxuICAgICAgaGVhZGVyc0xpc3Q6IHJlc3BvbnNlLmhlYWRlcnNMaXN0XG4gICAgfSlcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnb3BhcXVlJykge1xuICAgIC8vIEFuIG9wYXF1ZSBmaWx0ZXJlZCByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIHR5cGUgaXNcbiAgICAvLyBcIm9wYXF1ZVwiLCBVUkwgbGlzdCBpcyB0aGUgZW1wdHkgbGlzdCwgc3RhdHVzIGlzIDAsIHN0YXR1cyBtZXNzYWdlXG4gICAgLy8gaXMgdGhlIGVtcHR5IGJ5dGUgc2VxdWVuY2UsIGhlYWRlciBsaXN0IGlzIGVtcHR5LCBhbmQgYm9keSBpcyBudWxsLlxuXG4gICAgcmV0dXJuIG1ha2VGaWx0ZXJlZFJlc3BvbnNlKHJlc3BvbnNlLCB7XG4gICAgICB0eXBlOiAnb3BhcXVlJyxcbiAgICAgIHVybExpc3Q6IE9iamVjdC5mcmVlemUoW10pLFxuICAgICAgc3RhdHVzOiAwLFxuICAgICAgc3RhdHVzVGV4dDogJycsXG4gICAgICBib2R5OiBudWxsXG4gICAgfSlcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnb3BhcXVlcmVkaXJlY3QnKSB7XG4gICAgLy8gQW4gb3BhcXVlLXJlZGlyZWN0IGZpbHRlcmVkIHJlc3BvbnNlIGlzIGEgZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgdHlwZVxuICAgIC8vIGlzIFwib3BhcXVlcmVkaXJlY3RcIiwgc3RhdHVzIGlzIDAsIHN0YXR1cyBtZXNzYWdlIGlzIHRoZSBlbXB0eSBieXRlXG4gICAgLy8gc2VxdWVuY2UsIGhlYWRlciBsaXN0IGlzIGVtcHR5LCBhbmQgYm9keSBpcyBudWxsLlxuXG4gICAgcmV0dXJuIG1ha2VGaWx0ZXJlZFJlc3BvbnNlKHJlc3BvbnNlLCB7XG4gICAgICB0eXBlOiAnb3BhcXVlcmVkaXJlY3QnLFxuICAgICAgc3RhdHVzOiAwLFxuICAgICAgc3RhdHVzVGV4dDogJycsXG4gICAgICBoZWFkZXJzTGlzdDogW10sXG4gICAgICBib2R5OiBudWxsXG4gICAgfSlcbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQoZmFsc2UpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2FwcHJvcHJpYXRlLW5ldHdvcmstZXJyb3JcbmZ1bmN0aW9uIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvciAoZmV0Y2hQYXJhbXMsIGVyciA9IG51bGwpIHtcbiAgLy8gMS4gQXNzZXJ0OiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZC5cbiAgYXNzZXJ0KGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSlcblxuICAvLyAyLiBSZXR1cm4gYW4gYWJvcnRlZCBuZXR3b3JrIGVycm9yIGlmIGZldGNoUGFyYW1zIGlzIGFib3J0ZWQ7XG4gIC8vIG90aGVyd2lzZSByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICByZXR1cm4gaXNBYm9ydGVkKGZldGNoUGFyYW1zKVxuICAgID8gbWFrZU5ldHdvcmtFcnJvcihPYmplY3QuYXNzaWduKG5ldyBET01FeGNlcHRpb24oJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuJywgJ0Fib3J0RXJyb3InKSwgeyBjYXVzZTogZXJyIH0pKVxuICAgIDogbWFrZU5ldHdvcmtFcnJvcihPYmplY3QuYXNzaWduKG5ldyBET01FeGNlcHRpb24oJ1JlcXVlc3Qgd2FzIGNhbmNlbGxlZC4nKSwgeyBjYXVzZTogZXJyIH0pKVxufVxuXG4vLyBodHRwczovL3doYXRwci5vcmcvZmV0Y2gvMTM5Mi5odG1sI2luaXRpYWxpemUtYS1yZXNwb25zZVxuZnVuY3Rpb24gaW5pdGlhbGl6ZVJlc3BvbnNlIChyZXNwb25zZSwgaW5pdCwgYm9keSkge1xuICAvLyAxLiBJZiBpbml0W1wic3RhdHVzXCJdIGlzIG5vdCBpbiB0aGUgcmFuZ2UgMjAwIHRvIDU5OSwgaW5jbHVzaXZlLCB0aGVuXG4gIC8vICAgIHRocm93IGEgUmFuZ2VFcnJvci5cbiAgaWYgKGluaXQuc3RhdHVzICE9PSBudWxsICYmIChpbml0LnN0YXR1cyA8IDIwMCB8fCBpbml0LnN0YXR1cyA+IDU5OSkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignaW5pdFtcInN0YXR1c1wiXSBtdXN0IGJlIGluIHRoZSByYW5nZSBvZiAyMDAgdG8gNTk5LCBpbmNsdXNpdmUuJylcbiAgfVxuXG4gIC8vIDIuIElmIGluaXRbXCJzdGF0dXNUZXh0XCJdIGRvZXMgbm90IG1hdGNoIHRoZSByZWFzb24tcGhyYXNlIHRva2VuIHByb2R1Y3Rpb24sXG4gIC8vICAgIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmICgnc3RhdHVzVGV4dCcgaW4gaW5pdCAmJiBpbml0LnN0YXR1c1RleHQgIT0gbnVsbCkge1xuICAgIC8vIFNlZSwgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4xLjI6XG4gICAgLy8gICByZWFzb24tcGhyYXNlICA9ICooIEhUQUIgLyBTUCAvIFZDSEFSIC8gb2JzLXRleHQgKVxuICAgIGlmICghaXNWYWxpZFJlYXNvblBocmFzZShTdHJpbmcoaW5pdC5zdGF0dXNUZXh0KSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgc3RhdHVzVGV4dCcpXG4gICAgfVxuICB9XG5cbiAgLy8gMy4gU2V0IHJlc3BvbnNlXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgc3RhdHVzIHRvIGluaXRbXCJzdGF0dXNcIl0uXG4gIGlmICgnc3RhdHVzJyBpbiBpbml0ICYmIGluaXQuc3RhdHVzICE9IG51bGwpIHtcbiAgICByZXNwb25zZVtrU3RhdGVdLnN0YXR1cyA9IGluaXQuc3RhdHVzXG4gIH1cblxuICAvLyA0LiBTZXQgcmVzcG9uc2VcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgbWVzc2FnZSB0byBpbml0W1wic3RhdHVzVGV4dFwiXS5cbiAgaWYgKCdzdGF0dXNUZXh0JyBpbiBpbml0ICYmIGluaXQuc3RhdHVzVGV4dCAhPSBudWxsKSB7XG4gICAgcmVzcG9uc2Vba1N0YXRlXS5zdGF0dXNUZXh0ID0gaW5pdC5zdGF0dXNUZXh0XG4gIH1cblxuICAvLyA1LiBJZiBpbml0W1wiaGVhZGVyc1wiXSBleGlzdHMsIHRoZW4gZmlsbCByZXNwb25zZVx1MjAxOXMgaGVhZGVycyB3aXRoIGluaXRbXCJoZWFkZXJzXCJdLlxuICBpZiAoJ2hlYWRlcnMnIGluIGluaXQgJiYgaW5pdC5oZWFkZXJzICE9IG51bGwpIHtcbiAgICBmaWxsKHJlc3BvbnNlW2tIZWFkZXJzXSwgaW5pdC5oZWFkZXJzKVxuICB9XG5cbiAgLy8gNi4gSWYgYm9keSB3YXMgZ2l2ZW4sIHRoZW46XG4gIGlmIChib2R5KSB7XG4gICAgLy8gMS4gSWYgcmVzcG9uc2UncyBzdGF0dXMgaXMgYSBudWxsIGJvZHkgc3RhdHVzLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChudWxsQm9keVN0YXR1cy5pbmNsdWRlcyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1Jlc3BvbnNlIGNvbnN0cnVjdG9yJyxcbiAgICAgICAgbWVzc2FnZTogJ0ludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1c1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBTZXQgcmVzcG9uc2UncyBib2R5IHRvIGJvZHkncyBib2R5LlxuICAgIHJlc3BvbnNlW2tTdGF0ZV0uYm9keSA9IGJvZHkuYm9keVxuXG4gICAgLy8gMy4gSWYgYm9keSdzIHR5cGUgaXMgbm9uLW51bGwgYW5kIHJlc3BvbnNlJ3MgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpblxuICAgIC8vICAgIGBDb250ZW50LVR5cGVgLCB0aGVuIGFwcGVuZCAoYENvbnRlbnQtVHlwZWAsIGJvZHkncyB0eXBlKSB0byByZXNwb25zZSdzIGhlYWRlciBsaXN0LlxuICAgIGlmIChib2R5LnR5cGUgIT0gbnVsbCAmJiAhcmVzcG9uc2Vba1N0YXRlXS5oZWFkZXJzTGlzdC5jb250YWlucygnQ29udGVudC1UeXBlJykpIHtcbiAgICAgIHJlc3BvbnNlW2tTdGF0ZV0uaGVhZGVyc0xpc3QuYXBwZW5kKCdjb250ZW50LXR5cGUnLCBib2R5LnR5cGUpXG4gICAgfVxuICB9XG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLlJlYWRhYmxlU3RyZWFtID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgUmVhZGFibGVTdHJlYW1cbilcblxud2ViaWRsLmNvbnZlcnRlcnMuRm9ybURhdGEgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKFxuICBGb3JtRGF0YVxuKVxuXG53ZWJpZGwuY29udmVydGVycy5VUkxTZWFyY2hQYXJhbXMgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKFxuICBVUkxTZWFyY2hQYXJhbXNcbilcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3R5cGVkZWZkZWYteG1saHR0cHJlcXVlc3Rib2R5aW5pdFxud2ViaWRsLmNvbnZlcnRlcnMuWE1MSHR0cFJlcXVlc3RCb2R5SW5pdCA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmICh0eXBlb2YgViA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYpXG4gIH1cblxuICBpZiAoaXNCbG9iTGlrZShWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CbG9iKFYsIHsgc3RyaWN0OiBmYWxzZSB9KVxuICB9XG5cbiAgaWYgKHR5cGVzLmlzQXJyYXlCdWZmZXIoVikgfHwgdHlwZXMuaXNUeXBlZEFycmF5KFYpIHx8IHR5cGVzLmlzRGF0YVZpZXcoVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQnVmZmVyU291cmNlKFYpXG4gIH1cblxuICBpZiAodXRpbC5pc0Zvcm1EYXRhTGlrZShWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5Gb3JtRGF0YShWLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgfVxuXG4gIGlmIChWIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlVSTFNlYXJjaFBhcmFtcyhWKVxuICB9XG5cbiAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhWKVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keWluaXRcbndlYmlkbC5jb252ZXJ0ZXJzLkJvZHlJbml0ID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKFYgaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5SZWFkYWJsZVN0cmVhbShWKVxuICB9XG5cbiAgLy8gTm90ZTogdGhlIHNwZWMgZG9lc24ndCBpbmNsdWRlIGFzeW5jIGl0ZXJhYmxlcyxcbiAgLy8gdGhpcyBpcyBhbiB1bmRpY2kgZXh0ZW5zaW9uLlxuICBpZiAoVj8uW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSkge1xuICAgIHJldHVybiBWXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuWE1MSHR0cFJlcXVlc3RCb2R5SW5pdChWKVxufVxuXG53ZWJpZGwuY29udmVydGVycy5SZXNwb25zZUluaXQgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBrZXk6ICdzdGF0dXMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIHNob3J0J10sXG4gICAgZGVmYXVsdFZhbHVlOiAyMDBcbiAgfSxcbiAge1xuICAgIGtleTogJ3N0YXR1c1RleHQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdoZWFkZXJzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkhlYWRlcnNJbml0XG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtYWtlTmV0d29ya0Vycm9yLFxuICBtYWtlUmVzcG9uc2UsXG4gIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcixcbiAgZmlsdGVyUmVzcG9uc2UsXG4gIFJlc3BvbnNlLFxuICBjbG9uZVJlc3BvbnNlXG59XG4iLCAiLyogZ2xvYmFscyBBYm9ydENvbnRyb2xsZXIgKi9cblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgZXh0cmFjdEJvZHksIG1peGluQm9keSwgY2xvbmVCb2R5IH0gPSByZXF1aXJlKCcuL2JvZHknKVxuY29uc3QgeyBIZWFkZXJzLCBmaWxsOiBmaWxsSGVhZGVycywgSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4vaGVhZGVycycpXG5jb25zdCB7IEZpbmFsaXphdGlvblJlZ2lzdHJ5IH0gPSByZXF1aXJlKCcuLi9jb21wYXQvZGlzcGF0Y2hlci13ZWFrcmVmJykoKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7XG4gIGlzVmFsaWRIVFRQVG9rZW4sXG4gIHNhbWVPcmlnaW4sXG4gIG5vcm1hbGl6ZU1ldGhvZCxcbiAgbWFrZVBvbGljeUNvbnRhaW5lcixcbiAgbm9ybWFsaXplTWV0aG9kUmVjb3JkXG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHtcbiAgZm9yYmlkZGVuTWV0aG9kc1NldCxcbiAgY29yc1NhZmVMaXN0ZWRNZXRob2RzU2V0LFxuICByZWZlcnJlclBvbGljeSxcbiAgcmVxdWVzdFJlZGlyZWN0LFxuICByZXF1ZXN0TW9kZSxcbiAgcmVxdWVzdENyZWRlbnRpYWxzLFxuICByZXF1ZXN0Q2FjaGUsXG4gIHJlcXVlc3REdXBsZXhcbn0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHV0aWxcbmNvbnN0IHsga0hlYWRlcnMsIGtTaWduYWwsIGtTdGF0ZSwga0d1YXJkLCBrUmVhbG0gfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBnZXRHbG9iYWxPcmlnaW4gfSA9IHJlcXVpcmUoJy4vZ2xvYmFsJylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi9kYXRhVVJMJylcbmNvbnN0IHsga0hlYWRlcnNMaXN0LCBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgZ2V0TWF4TGlzdGVuZXJzLCBzZXRNYXhMaXN0ZW5lcnMsIGdldEV2ZW50TGlzdGVuZXJzLCBkZWZhdWx0TWF4TGlzdGVuZXJzIH0gPSByZXF1aXJlKCdldmVudHMnKVxuXG5sZXQgVHJhbnNmb3JtU3RyZWFtID0gZ2xvYmFsVGhpcy5UcmFuc2Zvcm1TdHJlYW1cblxuY29uc3Qga0Fib3J0Q29udHJvbGxlciA9IFN5bWJvbCgnYWJvcnRDb250cm9sbGVyJylcblxuY29uc3QgcmVxdWVzdEZpbmFsaXplciA9IG5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeSgoeyBzaWduYWwsIGFib3J0IH0pID0+IHtcbiAgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnQpXG59KVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdC1jbGFzc1xuY2xhc3MgUmVxdWVzdCB7XG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVxdWVzdFxuICBjb25zdHJ1Y3RvciAoaW5wdXQsIGluaXQgPSB7fSkge1xuICAgIGlmIChpbnB1dCA9PT0ga0NvbnN0cnVjdCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ1JlcXVlc3QgY29uc3RydWN0b3InIH0pXG5cbiAgICBpbnB1dCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKGlucHV0KVxuICAgIGluaXQgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5pdChpbml0KVxuXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI2Vudmlyb25tZW50LXNldHRpbmdzLW9iamVjdFxuICAgIHRoaXNba1JlYWxtXSA9IHtcbiAgICAgIHNldHRpbmdzT2JqZWN0OiB7XG4gICAgICAgIGJhc2VVcmw6IGdldEdsb2JhbE9yaWdpbigpLFxuICAgICAgICBnZXQgb3JpZ2luICgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsPy5vcmlnaW5cbiAgICAgICAgfSxcbiAgICAgICAgcG9saWN5Q29udGFpbmVyOiBtYWtlUG9saWN5Q29udGFpbmVyKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBudWxsLlxuICAgIGxldCByZXF1ZXN0ID0gbnVsbFxuXG4gICAgLy8gMi4gTGV0IGZhbGxiYWNrTW9kZSBiZSBudWxsLlxuICAgIGxldCBmYWxsYmFja01vZGUgPSBudWxsXG5cbiAgICAvLyAzLiBMZXQgYmFzZVVSTCBiZSB0aGlzXHUyMDE5cyByZWxldmFudCBzZXR0aW5ncyBvYmplY3RcdTIwMTlzIEFQSSBiYXNlIFVSTC5cbiAgICBjb25zdCBiYXNlVXJsID0gdGhpc1trUmVhbG1dLnNldHRpbmdzT2JqZWN0LmJhc2VVcmxcblxuICAgIC8vIDQuIExldCBzaWduYWwgYmUgbnVsbC5cbiAgICBsZXQgc2lnbmFsID0gbnVsbFxuXG4gICAgLy8gNS4gSWYgaW5wdXQgaXMgYSBzdHJpbmcsIHRoZW46XG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIDEuIExldCBwYXJzZWRVUkwgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIGlucHV0IHdpdGggYmFzZVVSTC5cbiAgICAgIC8vIDIuIElmIHBhcnNlZFVSTCBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgbGV0IHBhcnNlZFVSTFxuICAgICAgdHJ5IHtcbiAgICAgICAgcGFyc2VkVVJMID0gbmV3IFVSTChpbnB1dCwgYmFzZVVybClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGYWlsZWQgdG8gcGFyc2UgVVJMIGZyb20gJyArIGlucHV0LCB7IGNhdXNlOiBlcnIgfSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gSWYgcGFyc2VkVVJMIGluY2x1ZGVzIGNyZWRlbnRpYWxzLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKHBhcnNlZFVSTC51c2VybmFtZSB8fCBwYXJzZWRVUkwucGFzc3dvcmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnUmVxdWVzdCBjYW5ub3QgYmUgY29uc3RydWN0ZWQgZnJvbSBhIFVSTCB0aGF0IGluY2x1ZGVzIGNyZWRlbnRpYWxzOiAnICtcbiAgICAgICAgICAgIGlucHV0XG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gNC4gU2V0IHJlcXVlc3QgdG8gYSBuZXcgcmVxdWVzdCB3aG9zZSBVUkwgaXMgcGFyc2VkVVJMLlxuICAgICAgcmVxdWVzdCA9IG1ha2VSZXF1ZXN0KHsgdXJsTGlzdDogW3BhcnNlZFVSTF0gfSlcblxuICAgICAgLy8gNS4gU2V0IGZhbGxiYWNrTW9kZSB0byBcImNvcnNcIi5cbiAgICAgIGZhbGxiYWNrTW9kZSA9ICdjb3JzJ1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyA2LiBPdGhlcndpc2U6XG5cbiAgICAgIC8vIDcuIEFzc2VydDogaW5wdXQgaXMgYSBSZXF1ZXN0IG9iamVjdC5cbiAgICAgIGFzc2VydChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QpXG5cbiAgICAgIC8vIDguIFNldCByZXF1ZXN0IHRvIGlucHV0XHUyMDE5cyByZXF1ZXN0LlxuICAgICAgcmVxdWVzdCA9IGlucHV0W2tTdGF0ZV1cblxuICAgICAgLy8gOS4gU2V0IHNpZ25hbCB0byBpbnB1dFx1MjAxOXMgc2lnbmFsLlxuICAgICAgc2lnbmFsID0gaW5wdXRba1NpZ25hbF1cbiAgICB9XG5cbiAgICAvLyA3LiBMZXQgb3JpZ2luIGJlIHRoaXNcdTIwMTlzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdFx1MjAxOXMgb3JpZ2luLlxuICAgIGNvbnN0IG9yaWdpbiA9IHRoaXNba1JlYWxtXS5zZXR0aW5nc09iamVjdC5vcmlnaW5cblxuICAgIC8vIDguIExldCB3aW5kb3cgYmUgXCJjbGllbnRcIi5cbiAgICBsZXQgd2luZG93ID0gJ2NsaWVudCdcblxuICAgIC8vIDkuIElmIHJlcXVlc3RcdTIwMTlzIHdpbmRvdyBpcyBhbiBlbnZpcm9ubWVudCBzZXR0aW5ncyBvYmplY3QgYW5kIGl0cyBvcmlnaW5cbiAgICAvLyBpcyBzYW1lIG9yaWdpbiB3aXRoIG9yaWdpbiwgdGhlbiBzZXQgd2luZG93IHRvIHJlcXVlc3RcdTIwMTlzIHdpbmRvdy5cbiAgICBpZiAoXG4gICAgICByZXF1ZXN0LndpbmRvdz8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdFbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0JyAmJlxuICAgICAgc2FtZU9yaWdpbihyZXF1ZXN0LndpbmRvdywgb3JpZ2luKVxuICAgICkge1xuICAgICAgd2luZG93ID0gcmVxdWVzdC53aW5kb3dcbiAgICB9XG5cbiAgICAvLyAxMC4gSWYgaW5pdFtcIndpbmRvd1wiXSBleGlzdHMgYW5kIGlzIG5vbi1udWxsLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChpbml0LndpbmRvdyAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAnd2luZG93JyBvcHRpb24gJyR7d2luZG93fScgbXVzdCBiZSBudWxsYClcbiAgICB9XG5cbiAgICAvLyAxMS4gSWYgaW5pdFtcIndpbmRvd1wiXSBleGlzdHMsIHRoZW4gc2V0IHdpbmRvdyB0byBcIm5vLXdpbmRvd1wiLlxuICAgIGlmICgnd2luZG93JyBpbiBpbml0KSB7XG4gICAgICB3aW5kb3cgPSAnbm8td2luZG93J1xuICAgIH1cblxuICAgIC8vIDEyLiBTZXQgcmVxdWVzdCB0byBhIG5ldyByZXF1ZXN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgIHJlcXVlc3QgPSBtYWtlUmVxdWVzdCh7XG4gICAgICAvLyBVUkwgcmVxdWVzdFx1MjAxOXMgVVJMLlxuICAgICAgLy8gdW5kaWNpIGltcGxlbWVudGF0aW9uIG5vdGU6IHRoaXMgaXMgc2V0IGFzIHRoZSBmaXJzdCBpdGVtIGluIHJlcXVlc3QncyB1cmxMaXN0IGluIG1ha2VSZXF1ZXN0XG4gICAgICAvLyBtZXRob2QgcmVxdWVzdFx1MjAxOXMgbWV0aG9kLlxuICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgIC8vIGhlYWRlciBsaXN0IEEgY29weSBvZiByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAgIC8vIHVuZGljaSBpbXBsZW1lbnRhdGlvbiBub3RlOiBoZWFkZXJzTGlzdCBpcyBjbG9uZWQgaW4gbWFrZVJlcXVlc3RcbiAgICAgIGhlYWRlcnNMaXN0OiByZXF1ZXN0LmhlYWRlcnNMaXN0LFxuICAgICAgLy8gdW5zYWZlLXJlcXVlc3QgZmxhZyBTZXQuXG4gICAgICB1bnNhZmVSZXF1ZXN0OiByZXF1ZXN0LnVuc2FmZVJlcXVlc3QsXG4gICAgICAvLyBjbGllbnQgVGhpc1x1MjAxOXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0LlxuICAgICAgY2xpZW50OiB0aGlzW2tSZWFsbV0uc2V0dGluZ3NPYmplY3QsXG4gICAgICAvLyB3aW5kb3cgd2luZG93LlxuICAgICAgd2luZG93LFxuICAgICAgLy8gcHJpb3JpdHkgcmVxdWVzdFx1MjAxOXMgcHJpb3JpdHkuXG4gICAgICBwcmlvcml0eTogcmVxdWVzdC5wcmlvcml0eSxcbiAgICAgIC8vIG9yaWdpbiByZXF1ZXN0XHUyMDE5cyBvcmlnaW4uIFRoZSBwcm9wYWdhdGlvbiBvZiB0aGUgb3JpZ2luIGlzIG9ubHkgc2lnbmlmaWNhbnQgZm9yIG5hdmlnYXRpb24gcmVxdWVzdHNcbiAgICAgIC8vIGJlaW5nIGhhbmRsZWQgYnkgYSBzZXJ2aWNlIHdvcmtlci4gSW4gdGhpcyBzY2VuYXJpbyBhIHJlcXVlc3QgY2FuIGhhdmUgYW4gb3JpZ2luIHRoYXQgaXMgZGlmZmVyZW50XG4gICAgICAvLyBmcm9tIHRoZSBjdXJyZW50IGNsaWVudC5cbiAgICAgIG9yaWdpbjogcmVxdWVzdC5vcmlnaW4sXG4gICAgICAvLyByZWZlcnJlciByZXF1ZXN0XHUyMDE5cyByZWZlcnJlci5cbiAgICAgIHJlZmVycmVyOiByZXF1ZXN0LnJlZmVycmVyLFxuICAgICAgLy8gcmVmZXJyZXIgcG9saWN5IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeS5cbiAgICAgIHJlZmVycmVyUG9saWN5OiByZXF1ZXN0LnJlZmVycmVyUG9saWN5LFxuICAgICAgLy8gbW9kZSByZXF1ZXN0XHUyMDE5cyBtb2RlLlxuICAgICAgbW9kZTogcmVxdWVzdC5tb2RlLFxuICAgICAgLy8gY3JlZGVudGlhbHMgbW9kZSByZXF1ZXN0XHUyMDE5cyBjcmVkZW50aWFscyBtb2RlLlxuICAgICAgY3JlZGVudGlhbHM6IHJlcXVlc3QuY3JlZGVudGlhbHMsXG4gICAgICAvLyBjYWNoZSBtb2RlIHJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUuXG4gICAgICBjYWNoZTogcmVxdWVzdC5jYWNoZSxcbiAgICAgIC8vIHJlZGlyZWN0IG1vZGUgcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgbW9kZS5cbiAgICAgIHJlZGlyZWN0OiByZXF1ZXN0LnJlZGlyZWN0LFxuICAgICAgLy8gaW50ZWdyaXR5IG1ldGFkYXRhIHJlcXVlc3RcdTIwMTlzIGludGVncml0eSBtZXRhZGF0YS5cbiAgICAgIGludGVncml0eTogcmVxdWVzdC5pbnRlZ3JpdHksXG4gICAgICAvLyBrZWVwYWxpdmUgcmVxdWVzdFx1MjAxOXMga2VlcGFsaXZlLlxuICAgICAga2VlcGFsaXZlOiByZXF1ZXN0LmtlZXBhbGl2ZSxcbiAgICAgIC8vIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcgcmVxdWVzdFx1MjAxOXMgcmVsb2FkLW5hdmlnYXRpb24gZmxhZy5cbiAgICAgIHJlbG9hZE5hdmlnYXRpb246IHJlcXVlc3QucmVsb2FkTmF2aWdhdGlvbixcbiAgICAgIC8vIGhpc3RvcnktbmF2aWdhdGlvbiBmbGFnIHJlcXVlc3RcdTIwMTlzIGhpc3RvcnktbmF2aWdhdGlvbiBmbGFnLlxuICAgICAgaGlzdG9yeU5hdmlnYXRpb246IHJlcXVlc3QuaGlzdG9yeU5hdmlnYXRpb24sXG4gICAgICAvLyBVUkwgbGlzdCBBIGNsb25lIG9mIHJlcXVlc3RcdTIwMTlzIFVSTCBsaXN0LlxuICAgICAgdXJsTGlzdDogWy4uLnJlcXVlc3QudXJsTGlzdF1cbiAgICB9KVxuXG4gICAgY29uc3QgaW5pdEhhc0tleSA9IE9iamVjdC5rZXlzKGluaXQpLmxlbmd0aCAhPT0gMFxuXG4gICAgLy8gMTMuIElmIGluaXQgaXMgbm90IGVtcHR5LCB0aGVuOlxuICAgIGlmIChpbml0SGFzS2V5KSB7XG4gICAgICAvLyAxLiBJZiByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzIFwibmF2aWdhdGVcIiwgdGhlbiBzZXQgaXQgdG8gXCJzYW1lLW9yaWdpblwiLlxuICAgICAgaWYgKHJlcXVlc3QubW9kZSA9PT0gJ25hdmlnYXRlJykge1xuICAgICAgICByZXF1ZXN0Lm1vZGUgPSAnc2FtZS1vcmlnaW4nXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFVuc2V0IHJlcXVlc3RcdTIwMTlzIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcuXG4gICAgICByZXF1ZXN0LnJlbG9hZE5hdmlnYXRpb24gPSBmYWxzZVxuXG4gICAgICAvLyAzLiBVbnNldCByZXF1ZXN0XHUyMDE5cyBoaXN0b3J5LW5hdmlnYXRpb24gZmxhZy5cbiAgICAgIHJlcXVlc3QuaGlzdG9yeU5hdmlnYXRpb24gPSBmYWxzZVxuXG4gICAgICAvLyA0LiBTZXQgcmVxdWVzdFx1MjAxOXMgb3JpZ2luIHRvIFwiY2xpZW50XCIuXG4gICAgICByZXF1ZXN0Lm9yaWdpbiA9ICdjbGllbnQnXG5cbiAgICAgIC8vIDUuIFNldCByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciB0byBcImNsaWVudFwiXG4gICAgICByZXF1ZXN0LnJlZmVycmVyID0gJ2NsaWVudCdcblxuICAgICAgLy8gNi4gU2V0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeSB0byB0aGUgZW1wdHkgc3RyaW5nLlxuICAgICAgcmVxdWVzdC5yZWZlcnJlclBvbGljeSA9ICcnXG5cbiAgICAgIC8vIDcuIFNldCByZXF1ZXN0XHUyMDE5cyBVUkwgdG8gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkwuXG4gICAgICByZXF1ZXN0LnVybCA9IHJlcXVlc3QudXJsTGlzdFtyZXF1ZXN0LnVybExpc3QubGVuZ3RoIC0gMV1cblxuICAgICAgLy8gOC4gU2V0IHJlcXVlc3RcdTIwMTlzIFVSTCBsaXN0IHRvIFx1MDBBQiByZXF1ZXN0XHUyMDE5cyBVUkwgXHUwMEJCLlxuICAgICAgcmVxdWVzdC51cmxMaXN0ID0gW3JlcXVlc3QudXJsXVxuICAgIH1cblxuICAgIC8vIDE0LiBJZiBpbml0W1wicmVmZXJyZXJcIl0gZXhpc3RzLCB0aGVuOlxuICAgIGlmIChpbml0LnJlZmVycmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDEuIExldCByZWZlcnJlciBiZSBpbml0W1wicmVmZXJyZXJcIl0uXG4gICAgICBjb25zdCByZWZlcnJlciA9IGluaXQucmVmZXJyZXJcblxuICAgICAgLy8gMi4gSWYgcmVmZXJyZXIgaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgdG8gXCJuby1yZWZlcnJlclwiLlxuICAgICAgaWYgKHJlZmVycmVyID09PSAnJykge1xuICAgICAgICByZXF1ZXN0LnJlZmVycmVyID0gJ25vLXJlZmVycmVyJ1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gMS4gTGV0IHBhcnNlZFJlZmVycmVyIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyByZWZlcnJlciB3aXRoXG4gICAgICAgIC8vIGJhc2VVUkwuXG4gICAgICAgIC8vIDIuIElmIHBhcnNlZFJlZmVycmVyIGlzIGZhaWx1cmUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICAgIGxldCBwYXJzZWRSZWZlcnJlclxuICAgICAgICB0cnkge1xuICAgICAgICAgIHBhcnNlZFJlZmVycmVyID0gbmV3IFVSTChyZWZlcnJlciwgYmFzZVVybClcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgUmVmZXJyZXIgXCIke3JlZmVycmVyfVwiIGlzIG5vdCBhIHZhbGlkIFVSTC5gLCB7IGNhdXNlOiBlcnIgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDMuIElmIG9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWVcbiAgICAgICAgLy8gLSBwYXJzZWRSZWZlcnJlclx1MjAxOXMgc2NoZW1lIGlzIFwiYWJvdXRcIiBhbmQgcGF0aCBpcyB0aGUgc3RyaW5nIFwiY2xpZW50XCJcbiAgICAgICAgLy8gLSBwYXJzZWRSZWZlcnJlclx1MjAxOXMgb3JpZ2luIGlzIG5vdCBzYW1lIG9yaWdpbiB3aXRoIG9yaWdpblxuICAgICAgICAvLyB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciB0byBcImNsaWVudFwiLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgKHBhcnNlZFJlZmVycmVyLnByb3RvY29sID09PSAnYWJvdXQ6JyAmJiBwYXJzZWRSZWZlcnJlci5ob3N0bmFtZSA9PT0gJ2NsaWVudCcpIHx8XG4gICAgICAgICAgKG9yaWdpbiAmJiAhc2FtZU9yaWdpbihwYXJzZWRSZWZlcnJlciwgdGhpc1trUmVhbG1dLnNldHRpbmdzT2JqZWN0LmJhc2VVcmwpKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXF1ZXN0LnJlZmVycmVyID0gJ2NsaWVudCdcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyA0LiBPdGhlcndpc2UsIHNldCByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciB0byBwYXJzZWRSZWZlcnJlci5cbiAgICAgICAgICByZXF1ZXN0LnJlZmVycmVyID0gcGFyc2VkUmVmZXJyZXJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDE1LiBJZiBpbml0W1wicmVmZXJyZXJQb2xpY3lcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3lcbiAgICAvLyB0byBpdC5cbiAgICBpZiAoaW5pdC5yZWZlcnJlclBvbGljeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LnJlZmVycmVyUG9saWN5ID0gaW5pdC5yZWZlcnJlclBvbGljeVxuICAgIH1cblxuICAgIC8vIDE2LiBMZXQgbW9kZSBiZSBpbml0W1wibW9kZVwiXSBpZiBpdCBleGlzdHMsIGFuZCBmYWxsYmFja01vZGUgb3RoZXJ3aXNlLlxuICAgIGxldCBtb2RlXG4gICAgaWYgKGluaXQubW9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBtb2RlID0gaW5pdC5tb2RlXG4gICAgfSBlbHNlIHtcbiAgICAgIG1vZGUgPSBmYWxsYmFja01vZGVcbiAgICB9XG5cbiAgICAvLyAxNy4gSWYgbW9kZSBpcyBcIm5hdmlnYXRlXCIsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKG1vZGUgPT09ICduYXZpZ2F0ZScpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnUmVxdWVzdCBjb25zdHJ1Y3RvcicsXG4gICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkIHJlcXVlc3QgbW9kZSBuYXZpZ2F0ZS4nXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDE4LiBJZiBtb2RlIGlzIG5vbi1udWxsLCBzZXQgcmVxdWVzdFx1MjAxOXMgbW9kZSB0byBtb2RlLlxuICAgIGlmIChtb2RlICE9IG51bGwpIHtcbiAgICAgIHJlcXVlc3QubW9kZSA9IG1vZGVcbiAgICB9XG5cbiAgICAvLyAxOS4gSWYgaW5pdFtcImNyZWRlbnRpYWxzXCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgY3JlZGVudGlhbHMgbW9kZVxuICAgIC8vIHRvIGl0LlxuICAgIGlmIChpbml0LmNyZWRlbnRpYWxzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3QuY3JlZGVudGlhbHMgPSBpbml0LmNyZWRlbnRpYWxzXG4gICAgfVxuXG4gICAgLy8gMTguIElmIGluaXRbXCJjYWNoZVwiXSBleGlzdHMsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgdG8gaXQuXG4gICAgaWYgKGluaXQuY2FjaGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdC5jYWNoZSA9IGluaXQuY2FjaGVcbiAgICB9XG5cbiAgICAvLyAyMS4gSWYgcmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSBpcyBcIm9ubHktaWYtY2FjaGVkXCIgYW5kIHJlcXVlc3RcdTIwMTlzIG1vZGUgaXNcbiAgICAvLyBub3QgXCJzYW1lLW9yaWdpblwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChyZXF1ZXN0LmNhY2hlID09PSAnb25seS1pZi1jYWNoZWQnICYmIHJlcXVlc3QubW9kZSAhPT0gJ3NhbWUtb3JpZ2luJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgXCInb25seS1pZi1jYWNoZWQnIGNhbiBiZSBzZXQgb25seSB3aXRoICdzYW1lLW9yaWdpbicgbW9kZVwiXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gMjIuIElmIGluaXRbXCJyZWRpcmVjdFwiXSBleGlzdHMsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IG1vZGUgdG8gaXQuXG4gICAgaWYgKGluaXQucmVkaXJlY3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdC5yZWRpcmVjdCA9IGluaXQucmVkaXJlY3RcbiAgICB9XG5cbiAgICAvLyAyMy4gSWYgaW5pdFtcImludGVncml0eVwiXSBleGlzdHMsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIGludGVncml0eSBtZXRhZGF0YSB0byBpdC5cbiAgICBpZiAoaW5pdC5pbnRlZ3JpdHkgIT0gbnVsbCkge1xuICAgICAgcmVxdWVzdC5pbnRlZ3JpdHkgPSBTdHJpbmcoaW5pdC5pbnRlZ3JpdHkpXG4gICAgfVxuXG4gICAgLy8gMjQuIElmIGluaXRbXCJrZWVwYWxpdmVcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyBrZWVwYWxpdmUgdG8gaXQuXG4gICAgaWYgKGluaXQua2VlcGFsaXZlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3Qua2VlcGFsaXZlID0gQm9vbGVhbihpbml0LmtlZXBhbGl2ZSlcbiAgICB9XG5cbiAgICAvLyAyNS4gSWYgaW5pdFtcIm1ldGhvZFwiXSBleGlzdHMsIHRoZW46XG4gICAgaWYgKGluaXQubWV0aG9kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDEuIExldCBtZXRob2QgYmUgaW5pdFtcIm1ldGhvZFwiXS5cbiAgICAgIGxldCBtZXRob2QgPSBpbml0Lm1ldGhvZFxuXG4gICAgICAvLyAyLiBJZiBtZXRob2QgaXMgbm90IGEgbWV0aG9kIG9yIG1ldGhvZCBpcyBhIGZvcmJpZGRlbiBtZXRob2QsIHRoZW5cbiAgICAgIC8vIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKCFpc1ZhbGlkSFRUUFRva2VuKG1ldGhvZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJyR7bWV0aG9kfScgaXMgbm90IGEgdmFsaWQgSFRUUCBtZXRob2QuYClcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcmJpZGRlbk1ldGhvZHNTZXQuaGFzKG1ldGhvZC50b1VwcGVyQ2FzZSgpKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAnJHttZXRob2R9JyBIVFRQIG1ldGhvZCBpcyB1bnN1cHBvcnRlZC5gKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBOb3JtYWxpemUgbWV0aG9kLlxuICAgICAgbWV0aG9kID0gbm9ybWFsaXplTWV0aG9kUmVjb3JkW21ldGhvZF0gPz8gbm9ybWFsaXplTWV0aG9kKG1ldGhvZClcblxuICAgICAgLy8gNC4gU2V0IHJlcXVlc3RcdTIwMTlzIG1ldGhvZCB0byBtZXRob2QuXG4gICAgICByZXF1ZXN0Lm1ldGhvZCA9IG1ldGhvZFxuICAgIH1cblxuICAgIC8vIDI2LiBJZiBpbml0W1wic2lnbmFsXCJdIGV4aXN0cywgdGhlbiBzZXQgc2lnbmFsIHRvIGl0LlxuICAgIGlmIChpbml0LnNpZ25hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzaWduYWwgPSBpbml0LnNpZ25hbFxuICAgIH1cblxuICAgIC8vIDI3LiBTZXQgdGhpc1x1MjAxOXMgcmVxdWVzdCB0byByZXF1ZXN0LlxuICAgIHRoaXNba1N0YXRlXSA9IHJlcXVlc3RcblxuICAgIC8vIDI4LiBTZXQgdGhpc1x1MjAxOXMgc2lnbmFsIHRvIGEgbmV3IEFib3J0U2lnbmFsIG9iamVjdCB3aXRoIHRoaXNcdTIwMTlzIHJlbGV2YW50XG4gICAgLy8gUmVhbG0uXG4gICAgLy8gVE9ETzogY291bGQgdGhpcyBiZSBzaW1wbGlmaWVkIHdpdGggQWJvcnRTaWduYWwuYW55XG4gICAgLy8gKGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jZG9tLWFib3J0c2lnbmFsLWFueSlcbiAgICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIHRoaXNba1NpZ25hbF0gPSBhYy5zaWduYWxcbiAgICB0aGlzW2tTaWduYWxdW2tSZWFsbV0gPSB0aGlzW2tSZWFsbV1cblxuICAgIC8vIDI5LiBJZiBzaWduYWwgaXMgbm90IG51bGwsIHRoZW4gbWFrZSB0aGlzXHUyMDE5cyBzaWduYWwgZm9sbG93IHNpZ25hbC5cbiAgICBpZiAoc2lnbmFsICE9IG51bGwpIHtcbiAgICAgIGlmIChcbiAgICAgICAgIXNpZ25hbCB8fFxuICAgICAgICB0eXBlb2Ygc2lnbmFsLmFib3J0ZWQgIT09ICdib29sZWFuJyB8fFxuICAgICAgICB0eXBlb2Ygc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgIT09ICdmdW5jdGlvbidcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnUmVxdWVzdCc6IG1lbWJlciBzaWduYWwgaXMgbm90IG9mIHR5cGUgQWJvcnRTaWduYWwuXCJcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgYWMuYWJvcnQoc2lnbmFsLnJlYXNvbilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEtlZXAgYSBzdHJvbmcgcmVmIHRvIGFjIHdoaWxlIHJlcXVlc3Qgb2JqZWN0XG4gICAgICAgIC8vIGlzIGFsaXZlLiBUaGlzIGlzIG5lZWRlZCB0byBwcmV2ZW50IEFib3J0Q29udHJvbGxlclxuICAgICAgICAvLyBmcm9tIGJlaW5nIHByZW1hdHVyZWx5IGdhcmJhZ2UgY29sbGVjdGVkLlxuICAgICAgICAvLyBTZWUsIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xOTI2LlxuICAgICAgICB0aGlzW2tBYm9ydENvbnRyb2xsZXJdID0gYWNcblxuICAgICAgICBjb25zdCBhY1JlZiA9IG5ldyBXZWFrUmVmKGFjKVxuICAgICAgICBjb25zdCBhYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBhYyA9IGFjUmVmLmRlcmVmKClcbiAgICAgICAgICBpZiAoYWMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYWMuYWJvcnQodGhpcy5yZWFzb24pXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhpcmQtcGFydHkgQWJvcnRDb250cm9sbGVycyBtYXkgbm90IHdvcmsgd2l0aCB0aGVzZS5cbiAgICAgICAgLy8gU2VlLCBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9wdWxsLzE5MTAjaXNzdWVjb21tZW50LTE0NjQ0OTU2MTkuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gSWYgdGhlIG1heCBhbW91bnQgb2YgbGlzdGVuZXJzIGlzIGVxdWFsIHRvIHRoZSBkZWZhdWx0LCBpbmNyZWFzZSBpdFxuICAgICAgICAgIC8vIFRoaXMgaXMgb25seSBhdmFpbGFibGUgaW4gbm9kZSA+PSB2MTkuOS4wXG4gICAgICAgICAgaWYgKHR5cGVvZiBnZXRNYXhMaXN0ZW5lcnMgPT09ICdmdW5jdGlvbicgJiYgZ2V0TWF4TGlzdGVuZXJzKHNpZ25hbCkgPT09IGRlZmF1bHRNYXhMaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgIHNldE1heExpc3RlbmVycygxMDAsIHNpZ25hbClcbiAgICAgICAgICB9IGVsc2UgaWYgKGdldEV2ZW50TGlzdGVuZXJzKHNpZ25hbCwgJ2Fib3J0JykubGVuZ3RoID49IGRlZmF1bHRNYXhMaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgIHNldE1heExpc3RlbmVycygxMDAsIHNpZ25hbClcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge31cblxuICAgICAgICB1dGlsLmFkZEFib3J0TGlzdGVuZXIoc2lnbmFsLCBhYm9ydClcbiAgICAgICAgcmVxdWVzdEZpbmFsaXplci5yZWdpc3RlcihhYywgeyBzaWduYWwsIGFib3J0IH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMzAuIFNldCB0aGlzXHUyMDE5cyBoZWFkZXJzIHRvIGEgbmV3IEhlYWRlcnMgb2JqZWN0IHdpdGggdGhpc1x1MjAxOXMgcmVsZXZhbnRcbiAgICAvLyBSZWFsbSwgd2hvc2UgaGVhZGVyIGxpc3QgaXMgcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgYW5kIGd1YXJkIGlzXG4gICAgLy8gXCJyZXF1ZXN0XCIuXG4gICAgdGhpc1trSGVhZGVyc10gPSBuZXcgSGVhZGVycyhrQ29uc3RydWN0KVxuICAgIHRoaXNba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSByZXF1ZXN0LmhlYWRlcnNMaXN0XG4gICAgdGhpc1trSGVhZGVyc11ba0d1YXJkXSA9ICdyZXF1ZXN0J1xuICAgIHRoaXNba0hlYWRlcnNdW2tSZWFsbV0gPSB0aGlzW2tSZWFsbV1cblxuICAgIC8vIDMxLiBJZiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzIFwibm8tY29yc1wiLCB0aGVuOlxuICAgIGlmIChtb2RlID09PSAnbm8tY29ycycpIHtcbiAgICAgIC8vIDEuIElmIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpcyBub3QgYSBDT1JTLXNhZmVsaXN0ZWQgbWV0aG9kLFxuICAgICAgLy8gdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmICghY29yc1NhZmVMaXN0ZWRNZXRob2RzU2V0LmhhcyhyZXF1ZXN0Lm1ldGhvZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBgJyR7cmVxdWVzdC5tZXRob2R9IGlzIHVuc3VwcG9ydGVkIGluIG5vLWNvcnMgbW9kZS5gXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gMi4gU2V0IHRoaXNcdTIwMTlzIGhlYWRlcnNcdTIwMTlzIGd1YXJkIHRvIFwicmVxdWVzdC1uby1jb3JzXCIuXG4gICAgICB0aGlzW2tIZWFkZXJzXVtrR3VhcmRdID0gJ3JlcXVlc3Qtbm8tY29ycydcbiAgICB9XG5cbiAgICAvLyAzMi4gSWYgaW5pdCBpcyBub3QgZW1wdHksIHRoZW46XG4gICAgaWYgKGluaXRIYXNLZXkpIHtcbiAgICAgIC8qKiBAdHlwZSB7SGVhZGVyc0xpc3R9ICovXG4gICAgICBjb25zdCBoZWFkZXJzTGlzdCA9IHRoaXNba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF1cbiAgICAgIC8vIDEuIExldCBoZWFkZXJzIGJlIGEgY29weSBvZiB0aGlzXHUyMDE5cyBoZWFkZXJzIGFuZCBpdHMgYXNzb2NpYXRlZCBoZWFkZXJcbiAgICAgIC8vIGxpc3QuXG4gICAgICAvLyAyLiBJZiBpbml0W1wiaGVhZGVyc1wiXSBleGlzdHMsIHRoZW4gc2V0IGhlYWRlcnMgdG8gaW5pdFtcImhlYWRlcnNcIl0uXG4gICAgICBjb25zdCBoZWFkZXJzID0gaW5pdC5oZWFkZXJzICE9PSB1bmRlZmluZWQgPyBpbml0LmhlYWRlcnMgOiBuZXcgSGVhZGVyc0xpc3QoaGVhZGVyc0xpc3QpXG5cbiAgICAgIC8vIDMuIEVtcHR5IHRoaXNcdTIwMTlzIGhlYWRlcnNcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgICAgaGVhZGVyc0xpc3QuY2xlYXIoKVxuXG4gICAgICAvLyA0LiBJZiBoZWFkZXJzIGlzIGEgSGVhZGVycyBvYmplY3QsIHRoZW4gZm9yIGVhY2ggaGVhZGVyIGluIGl0cyBoZWFkZXJcbiAgICAgIC8vIGxpc3QsIGFwcGVuZCBoZWFkZXJcdTIwMTlzIG5hbWUvaGVhZGVyXHUyMDE5cyB2YWx1ZSB0byB0aGlzXHUyMDE5cyBoZWFkZXJzLlxuICAgICAgaWYgKGhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzTGlzdCkge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgaGVhZGVycykge1xuICAgICAgICAgIGhlYWRlcnNMaXN0LmFwcGVuZChrZXksIHZhbClcbiAgICAgICAgfVxuICAgICAgICAvLyBOb3RlOiBDb3B5IHRoZSBgc2V0LWNvb2tpZWAgbWV0YS1kYXRhLlxuICAgICAgICBoZWFkZXJzTGlzdC5jb29raWVzID0gaGVhZGVycy5jb29raWVzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyA1LiBPdGhlcndpc2UsIGZpbGwgdGhpc1x1MjAxOXMgaGVhZGVycyB3aXRoIGhlYWRlcnMuXG4gICAgICAgIGZpbGxIZWFkZXJzKHRoaXNba0hlYWRlcnNdLCBoZWFkZXJzKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDMzLiBMZXQgaW5wdXRCb2R5IGJlIGlucHV0XHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBib2R5IGlmIGlucHV0IGlzIGEgUmVxdWVzdFxuICAgIC8vIG9iamVjdDsgb3RoZXJ3aXNlIG51bGwuXG4gICAgY29uc3QgaW5wdXRCb2R5ID0gaW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0ID8gaW5wdXRba1N0YXRlXS5ib2R5IDogbnVsbFxuXG4gICAgLy8gMzQuIElmIGVpdGhlciBpbml0W1wiYm9keVwiXSBleGlzdHMgYW5kIGlzIG5vbi1udWxsIG9yIGlucHV0Qm9keSBpc1xuICAgIC8vIG5vbi1udWxsLCBhbmQgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzIGBHRVRgIG9yIGBIRUFEYCwgdGhlbiB0aHJvdyBhXG4gICAgLy8gVHlwZUVycm9yLlxuICAgIGlmIChcbiAgICAgIChpbml0LmJvZHkgIT0gbnVsbCB8fCBpbnB1dEJvZHkgIT0gbnVsbCkgJiZcbiAgICAgIChyZXF1ZXN0Lm1ldGhvZCA9PT0gJ0dFVCcgfHwgcmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJylcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlcXVlc3Qgd2l0aCBHRVQvSEVBRCBtZXRob2QgY2Fubm90IGhhdmUgYm9keS4nKVxuICAgIH1cblxuICAgIC8vIDM1LiBMZXQgaW5pdEJvZHkgYmUgbnVsbC5cbiAgICBsZXQgaW5pdEJvZHkgPSBudWxsXG5cbiAgICAvLyAzNi4gSWYgaW5pdFtcImJvZHlcIl0gZXhpc3RzIGFuZCBpcyBub24tbnVsbCwgdGhlbjpcbiAgICBpZiAoaW5pdC5ib2R5ICE9IG51bGwpIHtcbiAgICAgIC8vIDEuIExldCBDb250ZW50LVR5cGUgYmUgbnVsbC5cbiAgICAgIC8vIDIuIFNldCBpbml0Qm9keSBhbmQgQ29udGVudC1UeXBlIHRvIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZ1xuICAgICAgLy8gaW5pdFtcImJvZHlcIl0sIHdpdGgga2VlcGFsaXZlIHNldCB0byByZXF1ZXN0XHUyMDE5cyBrZWVwYWxpdmUuXG4gICAgICBjb25zdCBbZXh0cmFjdGVkQm9keSwgY29udGVudFR5cGVdID0gZXh0cmFjdEJvZHkoXG4gICAgICAgIGluaXQuYm9keSxcbiAgICAgICAgcmVxdWVzdC5rZWVwYWxpdmVcbiAgICAgIClcbiAgICAgIGluaXRCb2R5ID0gZXh0cmFjdGVkQm9keVxuXG4gICAgICAvLyAzLCBJZiBDb250ZW50LVR5cGUgaXMgbm9uLW51bGwgYW5kIHRoaXNcdTIwMTlzIGhlYWRlcnNcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXNcbiAgICAgIC8vIG5vdCBjb250YWluIGBDb250ZW50LVR5cGVgLCB0aGVuIGFwcGVuZCBgQ29udGVudC1UeXBlYC9Db250ZW50LVR5cGUgdG9cbiAgICAgIC8vIHRoaXNcdTIwMTlzIGhlYWRlcnMuXG4gICAgICBpZiAoY29udGVudFR5cGUgJiYgIXRoaXNba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0uY29udGFpbnMoJ2NvbnRlbnQtdHlwZScpKSB7XG4gICAgICAgIHRoaXNba0hlYWRlcnNdLmFwcGVuZCgnY29udGVudC10eXBlJywgY29udGVudFR5cGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMzcuIExldCBpbnB1dE9ySW5pdEJvZHkgYmUgaW5pdEJvZHkgaWYgaXQgaXMgbm9uLW51bGw7IG90aGVyd2lzZVxuICAgIC8vIGlucHV0Qm9keS5cbiAgICBjb25zdCBpbnB1dE9ySW5pdEJvZHkgPSBpbml0Qm9keSA/PyBpbnB1dEJvZHlcblxuICAgIC8vIDM4LiBJZiBpbnB1dE9ySW5pdEJvZHkgaXMgbm9uLW51bGwgYW5kIGlucHV0T3JJbml0Qm9keVx1MjAxOXMgc291cmNlIGlzXG4gICAgLy8gbnVsbCwgdGhlbjpcbiAgICBpZiAoaW5wdXRPckluaXRCb2R5ICE9IG51bGwgJiYgaW5wdXRPckluaXRCb2R5LnNvdXJjZSA9PSBudWxsKSB7XG4gICAgICAvLyAxLiBJZiBpbml0Qm9keSBpcyBub24tbnVsbCBhbmQgaW5pdFtcImR1cGxleFwiXSBkb2VzIG5vdCBleGlzdCxcbiAgICAgIC8vICAgIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAoaW5pdEJvZHkgIT0gbnVsbCAmJiBpbml0LmR1cGxleCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlcXVlc3RJbml0OiBkdXBsZXggb3B0aW9uIGlzIHJlcXVpcmVkIHdoZW4gc2VuZGluZyBhIGJvZHkuJylcbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBuZWl0aGVyIFwic2FtZS1vcmlnaW5cIiBub3IgXCJjb3JzXCIsXG4gICAgICAvLyB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKHJlcXVlc3QubW9kZSAhPT0gJ3NhbWUtb3JpZ2luJyAmJiByZXF1ZXN0Lm1vZGUgIT09ICdjb3JzJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICdJZiByZXF1ZXN0IGlzIG1hZGUgZnJvbSBSZWFkYWJsZVN0cmVhbSwgbW9kZSBzaG91bGQgYmUgXCJzYW1lLW9yaWdpblwiIG9yIFwiY29yc1wiJ1xuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIFNldCB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyB1c2UtQ09SUy1wcmVmbGlnaHQgZmxhZy5cbiAgICAgIHJlcXVlc3QudXNlQ09SU1ByZWZsaWdodEZsYWcgPSB0cnVlXG4gICAgfVxuXG4gICAgLy8gMzkuIExldCBmaW5hbEJvZHkgYmUgaW5wdXRPckluaXRCb2R5LlxuICAgIGxldCBmaW5hbEJvZHkgPSBpbnB1dE9ySW5pdEJvZHlcblxuICAgIC8vIDQwLiBJZiBpbml0Qm9keSBpcyBudWxsIGFuZCBpbnB1dEJvZHkgaXMgbm9uLW51bGwsIHRoZW46XG4gICAgaWYgKGluaXRCb2R5ID09IG51bGwgJiYgaW5wdXRCb2R5ICE9IG51bGwpIHtcbiAgICAgIC8vIDEuIElmIGlucHV0IGlzIHVudXNhYmxlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKHV0aWwuaXNEaXN0dXJiZWQoaW5wdXRCb2R5LnN0cmVhbSkgfHwgaW5wdXRCb2R5LnN0cmVhbS5sb2NrZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnQ2Fubm90IGNvbnN0cnVjdCBhIFJlcXVlc3Qgd2l0aCBhIFJlcXVlc3Qgb2JqZWN0IHRoYXQgaGFzIGFscmVhZHkgYmVlbiB1c2VkLidcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICAvLyAyLiBTZXQgZmluYWxCb2R5IHRvIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBwcm94eSBmb3IgaW5wdXRCb2R5LlxuICAgICAgaWYgKCFUcmFuc2Zvcm1TdHJlYW0pIHtcbiAgICAgICAgVHJhbnNmb3JtU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlRyYW5zZm9ybVN0cmVhbVxuICAgICAgfVxuXG4gICAgICAvLyBodHRwczovL3N0cmVhbXMuc3BlYy53aGF0d2cub3JnLyNyZWFkYWJsZXN0cmVhbS1jcmVhdGUtYS1wcm94eVxuICAgICAgY29uc3QgaWRlbnRpdHlUcmFuc2Zvcm0gPSBuZXcgVHJhbnNmb3JtU3RyZWFtKClcbiAgICAgIGlucHV0Qm9keS5zdHJlYW0ucGlwZVRocm91Z2goaWRlbnRpdHlUcmFuc2Zvcm0pXG4gICAgICBmaW5hbEJvZHkgPSB7XG4gICAgICAgIHNvdXJjZTogaW5wdXRCb2R5LnNvdXJjZSxcbiAgICAgICAgbGVuZ3RoOiBpbnB1dEJvZHkubGVuZ3RoLFxuICAgICAgICBzdHJlYW06IGlkZW50aXR5VHJhbnNmb3JtLnJlYWRhYmxlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNDEuIFNldCB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBib2R5IHRvIGZpbmFsQm9keS5cbiAgICB0aGlzW2tTdGF0ZV0uYm9keSA9IGZpbmFsQm9keVxuICB9XG5cbiAgLy8gUmV0dXJucyByZXF1ZXN0XHUyMDE5cyBIVFRQIG1ldGhvZCwgd2hpY2ggaXMgXCJHRVRcIiBieSBkZWZhdWx0LlxuICBnZXQgbWV0aG9kICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIG1ldGhvZCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBtZXRob2QuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5tZXRob2RcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIFVSTCBvZiByZXF1ZXN0IGFzIGEgc3RyaW5nLlxuICBnZXQgdXJsICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIHVybCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBVUkwsIHNlcmlhbGl6ZWQuXG4gICAgcmV0dXJuIFVSTFNlcmlhbGl6ZXIodGhpc1trU3RhdGVdLnVybClcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBIZWFkZXJzIG9iamVjdCBjb25zaXN0aW5nIG9mIHRoZSBoZWFkZXJzIGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LlxuICAvLyBOb3RlIHRoYXQgaGVhZGVycyBhZGRlZCBpbiB0aGUgbmV0d29yayBsYXllciBieSB0aGUgdXNlciBhZ2VudCB3aWxsIG5vdFxuICAvLyBiZSBhY2NvdW50ZWQgZm9yIGluIHRoaXMgb2JqZWN0LCBlLmcuLCB0aGUgXCJIb3N0XCIgaGVhZGVyLlxuICBnZXQgaGVhZGVycyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBoZWFkZXJzIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIGhlYWRlcnMuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNdXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBraW5kIG9mIHJlc291cmNlIHJlcXVlc3RlZCBieSByZXF1ZXN0LCBlLmcuLCBcImRvY3VtZW50XCJcbiAgLy8gb3IgXCJzY3JpcHRcIi5cbiAgZ2V0IGRlc3RpbmF0aW9uICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGRlc3RpbmF0aW9uIGdldHRlciBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGRlc3RpbmF0aW9uLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uZGVzdGluYXRpb25cbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIHJlZmVycmVyIG9mIHJlcXVlc3QuIEl0cyB2YWx1ZSBjYW4gYmUgYSBzYW1lLW9yaWdpbiBVUkwgaWZcbiAgLy8gZXhwbGljaXRseSBzZXQgaW4gaW5pdCwgdGhlIGVtcHR5IHN0cmluZyB0byBpbmRpY2F0ZSBubyByZWZlcnJlciwgYW5kXG4gIC8vIFwiYWJvdXQ6Y2xpZW50XCIgd2hlbiBkZWZhdWx0aW5nIHRvIHRoZSBnbG9iYWxcdTIwMTlzIGRlZmF1bHQuIFRoaXMgaXMgdXNlZFxuICAvLyBkdXJpbmcgZmV0Y2hpbmcgdG8gZGV0ZXJtaW5lIHRoZSB2YWx1ZSBvZiB0aGUgYFJlZmVyZXJgIGhlYWRlciBvZiB0aGVcbiAgLy8gcmVxdWVzdCBiZWluZyBtYWRlLlxuICBnZXQgcmVmZXJyZXIgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyAxLiBJZiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBpcyBcIm5vLXJlZmVycmVyXCIsIHRoZW4gcmV0dXJuIHRoZVxuICAgIC8vIGVtcHR5IHN0cmluZy5cbiAgICBpZiAodGhpc1trU3RhdGVdLnJlZmVycmVyID09PSAnbm8tcmVmZXJyZXInKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG5cbiAgICAvLyAyLiBJZiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBpcyBcImNsaWVudFwiLCB0aGVuIHJldHVyblxuICAgIC8vIFwiYWJvdXQ6Y2xpZW50XCIuXG4gICAgaWYgKHRoaXNba1N0YXRlXS5yZWZlcnJlciA9PT0gJ2NsaWVudCcpIHtcbiAgICAgIHJldHVybiAnYWJvdXQ6Y2xpZW50J1xuICAgIH1cblxuICAgIC8vIFJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciwgc2VyaWFsaXplZC5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnJlZmVycmVyLnRvU3RyaW5nKClcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIHJlZmVycmVyIHBvbGljeSBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdC5cbiAgLy8gVGhpcyBpcyB1c2VkIGR1cmluZyBmZXRjaGluZyB0byBjb21wdXRlIHRoZSB2YWx1ZSBvZiB0aGUgcmVxdWVzdFx1MjAxOXNcbiAgLy8gcmVmZXJyZXIuXG4gIGdldCByZWZlcnJlclBvbGljeSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSByZWZlcnJlclBvbGljeSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5yZWZlcnJlclBvbGljeVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgbW9kZSBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCwgd2hpY2ggaXMgYSBzdHJpbmcgaW5kaWNhdGluZ1xuICAvLyB3aGV0aGVyIHRoZSByZXF1ZXN0IHdpbGwgdXNlIENPUlMsIG9yIHdpbGwgYmUgcmVzdHJpY3RlZCB0byBzYW1lLW9yaWdpblxuICAvLyBVUkxzLlxuICBnZXQgbW9kZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBtb2RlIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIG1vZGUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5tb2RlXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBjcmVkZW50aWFscyBtb2RlIGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LFxuICAvLyB3aGljaCBpcyBhIHN0cmluZyBpbmRpY2F0aW5nIHdoZXRoZXIgY3JlZGVudGlhbHMgd2lsbCBiZSBzZW50IHdpdGggdGhlXG4gIC8vIHJlcXVlc3QgYWx3YXlzLCBuZXZlciwgb3Igb25seSB3aGVuIHNlbnQgdG8gYSBzYW1lLW9yaWdpbiBVUkwuXG4gIGdldCBjcmVkZW50aWFscyAoKSB7XG4gICAgLy8gVGhlIGNyZWRlbnRpYWxzIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGNyZWRlbnRpYWxzIG1vZGUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5jcmVkZW50aWFsc1xuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgY2FjaGUgbW9kZSBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCxcbiAgLy8gd2hpY2ggaXMgYSBzdHJpbmcgaW5kaWNhdGluZyBob3cgdGhlIHJlcXVlc3Qgd2lsbFxuICAvLyBpbnRlcmFjdCB3aXRoIHRoZSBicm93c2VyXHUyMDE5cyBjYWNoZSB3aGVuIGZldGNoaW5nLlxuICBnZXQgY2FjaGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgY2FjaGUgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmNhY2hlXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSByZWRpcmVjdCBtb2RlIGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LFxuICAvLyB3aGljaCBpcyBhIHN0cmluZyBpbmRpY2F0aW5nIGhvdyByZWRpcmVjdHMgZm9yIHRoZVxuICAvLyByZXF1ZXN0IHdpbGwgYmUgaGFuZGxlZCBkdXJpbmcgZmV0Y2hpbmcuIEEgcmVxdWVzdFxuICAvLyB3aWxsIGZvbGxvdyByZWRpcmVjdHMgYnkgZGVmYXVsdC5cbiAgZ2V0IHJlZGlyZWN0ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIHJlZGlyZWN0IGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IG1vZGUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5yZWRpcmVjdFxuICB9XG5cbiAgLy8gUmV0dXJucyByZXF1ZXN0XHUyMDE5cyBzdWJyZXNvdXJjZSBpbnRlZ3JpdHkgbWV0YWRhdGEsIHdoaWNoIGlzIGFcbiAgLy8gY3J5cHRvZ3JhcGhpYyBoYXNoIG9mIHRoZSByZXNvdXJjZSBiZWluZyBmZXRjaGVkLiBJdHMgdmFsdWVcbiAgLy8gY29uc2lzdHMgb2YgbXVsdGlwbGUgaGFzaGVzIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlLiBbU1JJXVxuICBnZXQgaW50ZWdyaXR5ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGludGVncml0eSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBpbnRlZ3JpdHlcbiAgICAvLyBtZXRhZGF0YS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmludGVncml0eVxuICB9XG5cbiAgLy8gUmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCByZXF1ZXN0IGNhbiBvdXRsaXZlIHRoZVxuICAvLyBnbG9iYWwgaW4gd2hpY2ggaXQgd2FzIGNyZWF0ZWQuXG4gIGdldCBrZWVwYWxpdmUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUga2VlcGFsaXZlIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGtlZXBhbGl2ZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmtlZXBhbGl2ZVxuICB9XG5cbiAgLy8gUmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCByZXF1ZXN0IGlzIGZvciBhIHJlbG9hZFxuICAvLyBuYXZpZ2F0aW9uLlxuICBnZXQgaXNSZWxvYWROYXZpZ2F0aW9uICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGlzUmVsb2FkTmF2aWdhdGlvbiBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoaXNcdTIwMTlzXG4gICAgLy8gcmVxdWVzdFx1MjAxOXMgcmVsb2FkLW5hdmlnYXRpb24gZmxhZyBpcyBzZXQ7IG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnJlbG9hZE5hdmlnYXRpb25cbiAgfVxuXG4gIC8vIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgcmVxdWVzdCBpcyBmb3IgYSBoaXN0b3J5XG4gIC8vIG5hdmlnYXRpb24gKGEuay5hLiBiYWNrLWZvd2FyZCBuYXZpZ2F0aW9uKS5cbiAgZ2V0IGlzSGlzdG9yeU5hdmlnYXRpb24gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgaXNIaXN0b3J5TmF2aWdhdGlvbiBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzXG4gICAgLy8gaGlzdG9yeS1uYXZpZ2F0aW9uIGZsYWcgaXMgc2V0OyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5oaXN0b3J5TmF2aWdhdGlvblxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgc2lnbmFsIGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LCB3aGljaCBpcyBhbiBBYm9ydFNpZ25hbFxuICAvLyBvYmplY3QgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCByZXF1ZXN0IGhhcyBiZWVuIGFib3J0ZWQsIGFuZCBpdHNcbiAgLy8gYWJvcnQgZXZlbnQgaGFuZGxlci5cbiAgZ2V0IHNpZ25hbCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBzaWduYWwgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgc2lnbmFsLlxuICAgIHJldHVybiB0aGlzW2tTaWduYWxdXG4gIH1cblxuICBnZXQgYm9keSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYm9keSA/IHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSA6IG51bGxcbiAgfVxuXG4gIGdldCBib2R5VXNlZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIHJldHVybiAhIXRoaXNba1N0YXRlXS5ib2R5ICYmIHV0aWwuaXNEaXN0dXJiZWQodGhpc1trU3RhdGVdLmJvZHkuc3RyZWFtKVxuICB9XG5cbiAgZ2V0IGR1cGxleCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIHJldHVybiAnaGFsZidcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBjbG9uZSBvZiByZXF1ZXN0LlxuICBjbG9uZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIDEuIElmIHRoaXMgaXMgdW51c2FibGUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHRoaXMuYm9keVVzZWQgfHwgdGhpcy5ib2R5Py5sb2NrZWQpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3VudXNhYmxlJylcbiAgICB9XG5cbiAgICAvLyAyLiBMZXQgY2xvbmVkUmVxdWVzdCBiZSB0aGUgcmVzdWx0IG9mIGNsb25pbmcgdGhpc1x1MjAxOXMgcmVxdWVzdC5cbiAgICBjb25zdCBjbG9uZWRSZXF1ZXN0ID0gY2xvbmVSZXF1ZXN0KHRoaXNba1N0YXRlXSlcblxuICAgIC8vIDMuIExldCBjbG9uZWRSZXF1ZXN0T2JqZWN0IGJlIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBSZXF1ZXN0IG9iamVjdCxcbiAgICAvLyBnaXZlbiBjbG9uZWRSZXF1ZXN0LCB0aGlzXHUyMDE5cyBoZWFkZXJzXHUyMDE5cyBndWFyZCwgYW5kIHRoaXNcdTIwMTlzIHJlbGV2YW50IFJlYWxtLlxuICAgIGNvbnN0IGNsb25lZFJlcXVlc3RPYmplY3QgPSBuZXcgUmVxdWVzdChrQ29uc3RydWN0KVxuICAgIGNsb25lZFJlcXVlc3RPYmplY3Rba1N0YXRlXSA9IGNsb25lZFJlcXVlc3RcbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tSZWFsbV0gPSB0aGlzW2tSZWFsbV1cbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tIZWFkZXJzXSA9IG5ldyBIZWFkZXJzKGtDb25zdHJ1Y3QpXG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IGNsb25lZFJlcXVlc3QuaGVhZGVyc0xpc3RcbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gdGhpc1trSGVhZGVyc11ba0d1YXJkXVxuICAgIGNsb25lZFJlcXVlc3RPYmplY3Rba0hlYWRlcnNdW2tSZWFsbV0gPSB0aGlzW2tIZWFkZXJzXVtrUmVhbG1dXG5cbiAgICAvLyA0LiBNYWtlIGNsb25lZFJlcXVlc3RPYmplY3RcdTIwMTlzIHNpZ25hbCBmb2xsb3cgdGhpc1x1MjAxOXMgc2lnbmFsLlxuICAgIGNvbnN0IGFjID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgaWYgKHRoaXMuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIGFjLmFib3J0KHRoaXMuc2lnbmFsLnJlYXNvbilcbiAgICB9IGVsc2Uge1xuICAgICAgdXRpbC5hZGRBYm9ydExpc3RlbmVyKFxuICAgICAgICB0aGlzLnNpZ25hbCxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGFjLmFib3J0KHRoaXMuc2lnbmFsLnJlYXNvbilcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tTaWduYWxdID0gYWMuc2lnbmFsXG5cbiAgICAvLyA0LiBSZXR1cm4gY2xvbmVkUmVxdWVzdE9iamVjdC5cbiAgICByZXR1cm4gY2xvbmVkUmVxdWVzdE9iamVjdFxuICB9XG59XG5cbm1peGluQm9keShSZXF1ZXN0KVxuXG5mdW5jdGlvbiBtYWtlUmVxdWVzdCAoaW5pdCkge1xuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdHNcbiAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICBtZXRob2Q6ICdHRVQnLFxuICAgIGxvY2FsVVJMc09ubHk6IGZhbHNlLFxuICAgIHVuc2FmZVJlcXVlc3Q6IGZhbHNlLFxuICAgIGJvZHk6IG51bGwsXG4gICAgY2xpZW50OiBudWxsLFxuICAgIHJlc2VydmVkQ2xpZW50OiBudWxsLFxuICAgIHJlcGxhY2VzQ2xpZW50SWQ6ICcnLFxuICAgIHdpbmRvdzogJ2NsaWVudCcsXG4gICAga2VlcGFsaXZlOiBmYWxzZSxcbiAgICBzZXJ2aWNlV29ya2VyczogJ2FsbCcsXG4gICAgaW5pdGlhdG9yOiAnJyxcbiAgICBkZXN0aW5hdGlvbjogJycsXG4gICAgcHJpb3JpdHk6IG51bGwsXG4gICAgb3JpZ2luOiAnY2xpZW50JyxcbiAgICBwb2xpY3lDb250YWluZXI6ICdjbGllbnQnLFxuICAgIHJlZmVycmVyOiAnY2xpZW50JyxcbiAgICByZWZlcnJlclBvbGljeTogJycsXG4gICAgbW9kZTogJ25vLWNvcnMnLFxuICAgIHVzZUNPUlNQcmVmbGlnaHRGbGFnOiBmYWxzZSxcbiAgICBjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyxcbiAgICB1c2VDcmVkZW50aWFsczogZmFsc2UsXG4gICAgY2FjaGU6ICdkZWZhdWx0JyxcbiAgICByZWRpcmVjdDogJ2ZvbGxvdycsXG4gICAgaW50ZWdyaXR5OiAnJyxcbiAgICBjcnlwdG9HcmFwaGljc05vbmNlTWV0YWRhdGE6ICcnLFxuICAgIHBhcnNlck1ldGFkYXRhOiAnJyxcbiAgICByZWxvYWROYXZpZ2F0aW9uOiBmYWxzZSxcbiAgICBoaXN0b3J5TmF2aWdhdGlvbjogZmFsc2UsXG4gICAgdXNlckFjdGl2YXRpb246IGZhbHNlLFxuICAgIHRhaW50ZWRPcmlnaW46IGZhbHNlLFxuICAgIHJlZGlyZWN0Q291bnQ6IDAsXG4gICAgcmVzcG9uc2VUYWludGluZzogJ2Jhc2ljJyxcbiAgICBwcmV2ZW50Tm9DYWNoZUNhY2hlQ29udHJvbEhlYWRlck1vZGlmaWNhdGlvbjogZmFsc2UsXG4gICAgZG9uZTogZmFsc2UsXG4gICAgdGltaW5nQWxsb3dGYWlsZWQ6IGZhbHNlLFxuICAgIC4uLmluaXQsXG4gICAgaGVhZGVyc0xpc3Q6IGluaXQuaGVhZGVyc0xpc3RcbiAgICAgID8gbmV3IEhlYWRlcnNMaXN0KGluaXQuaGVhZGVyc0xpc3QpXG4gICAgICA6IG5ldyBIZWFkZXJzTGlzdCgpXG4gIH1cbiAgcmVxdWVzdC51cmwgPSByZXF1ZXN0LnVybExpc3RbMF1cbiAgcmV0dXJuIHJlcXVlc3Rcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtcmVxdWVzdC1jbG9uZVxuZnVuY3Rpb24gY2xvbmVSZXF1ZXN0IChyZXF1ZXN0KSB7XG4gIC8vIFRvIGNsb25lIGEgcmVxdWVzdCByZXF1ZXN0LCBydW4gdGhlc2Ugc3RlcHM6XG5cbiAgLy8gMS4gTGV0IG5ld1JlcXVlc3QgYmUgYSBjb3B5IG9mIHJlcXVlc3QsIGV4Y2VwdCBmb3IgaXRzIGJvZHkuXG4gIGNvbnN0IG5ld1JlcXVlc3QgPSBtYWtlUmVxdWVzdCh7IC4uLnJlcXVlc3QsIGJvZHk6IG51bGwgfSlcblxuICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG5vbi1udWxsLCBzZXQgbmV3UmVxdWVzdFx1MjAxOXMgYm9keSB0byB0aGVcbiAgLy8gcmVzdWx0IG9mIGNsb25pbmcgcmVxdWVzdFx1MjAxOXMgYm9keS5cbiAgaWYgKHJlcXVlc3QuYm9keSAhPSBudWxsKSB7XG4gICAgbmV3UmVxdWVzdC5ib2R5ID0gY2xvbmVCb2R5KHJlcXVlc3QuYm9keSlcbiAgfVxuXG4gIC8vIDMuIFJldHVybiBuZXdSZXF1ZXN0LlxuICByZXR1cm4gbmV3UmVxdWVzdFxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZXF1ZXN0LnByb3RvdHlwZSwge1xuICBtZXRob2Q6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHVybDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaGVhZGVyczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVkaXJlY3Q6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNsb25lOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzaWduYWw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGR1cGxleDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZGVzdGluYXRpb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJvZHk6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJvZHlVc2VkOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBpc0hpc3RvcnlOYXZpZ2F0aW9uOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBpc1JlbG9hZE5hdmlnYXRpb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGtlZXBhbGl2ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaW50ZWdyaXR5OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjYWNoZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY3JlZGVudGlhbHM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGF0dHJpYnV0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVmZXJyZXJQb2xpY3k6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZmVycmVyOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBtb2RlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnUmVxdWVzdCcsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3QgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKFxuICBSZXF1ZXN0XG4pXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0aW5mb1xud2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8gPSBmdW5jdGlvbiAoVikge1xuICBpZiAodHlwZW9mIFYgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhWKVxuICB9XG5cbiAgaWYgKFYgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3QoVilcbiAgfVxuXG4gIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoVilcbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuQWJvcnRTaWduYWwgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKFxuICBBYm9ydFNpZ25hbFxuKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdGluaXRcbndlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAga2V5OiAnbWV0aG9kJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmdcbiAgfSxcbiAge1xuICAgIGtleTogJ2hlYWRlcnMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuSGVhZGVyc0luaXRcbiAgfSxcbiAge1xuICAgIGtleTogJ2JvZHknLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKFxuICAgICAgd2ViaWRsLmNvbnZlcnRlcnMuQm9keUluaXRcbiAgICApXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdyZWZlcnJlcicsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmdcbiAgfSxcbiAge1xuICAgIGtleTogJ3JlZmVycmVyUG9saWN5JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICAvLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jcmVmZXJyZXItcG9saWN5XG4gICAgYWxsb3dlZFZhbHVlczogcmVmZXJyZXJQb2xpY3lcbiAgfSxcbiAge1xuICAgIGtleTogJ21vZGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXJlcXVlc3QtbW9kZVxuICAgIGFsbG93ZWRWYWx1ZXM6IHJlcXVlc3RNb2RlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjcmVkZW50aWFscycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RjcmVkZW50aWFsc1xuICAgIGFsbG93ZWRWYWx1ZXM6IHJlcXVlc3RDcmVkZW50aWFsc1xuICB9LFxuICB7XG4gICAga2V5OiAnY2FjaGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0Y2FjaGVcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0Q2FjaGVcbiAgfSxcbiAge1xuICAgIGtleTogJ3JlZGlyZWN0JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdHJlZGlyZWN0XG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdFJlZGlyZWN0XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdpbnRlZ3JpdHknLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdrZWVwYWxpdmUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhblxuICB9LFxuICB7XG4gICAga2V5OiAnc2lnbmFsJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcihcbiAgICAgIChzaWduYWwpID0+IHdlYmlkbC5jb252ZXJ0ZXJzLkFib3J0U2lnbmFsKFxuICAgICAgICBzaWduYWwsXG4gICAgICAgIHsgc3RyaWN0OiBmYWxzZSB9XG4gICAgICApXG4gICAgKVxuICB9LFxuICB7XG4gICAga2V5OiAnd2luZG93JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmFueVxuICB9LFxuICB7XG4gICAga2V5OiAnZHVwbGV4JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0RHVwbGV4XG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0geyBSZXF1ZXN0LCBtYWtlUmVxdWVzdCB9XG4iLCAiLy8gaHR0cHM6Ly9naXRodWIuY29tL0V0aGFuLUFycm93b29kL3VuZGljaS1mZXRjaFxuXG4ndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBSZXNwb25zZSxcbiAgbWFrZU5ldHdvcmtFcnJvcixcbiAgbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yLFxuICBmaWx0ZXJSZXNwb25zZSxcbiAgbWFrZVJlc3BvbnNlXG59ID0gcmVxdWlyZSgnLi9yZXNwb25zZScpXG5jb25zdCB7IEhlYWRlcnMgfSA9IHJlcXVpcmUoJy4vaGVhZGVycycpXG5jb25zdCB7IFJlcXVlc3QsIG1ha2VSZXF1ZXN0IH0gPSByZXF1aXJlKCcuL3JlcXVlc3QnKVxuY29uc3QgemxpYiA9IHJlcXVpcmUoJ3psaWInKVxuY29uc3Qge1xuICBieXRlc01hdGNoLFxuICBtYWtlUG9saWN5Q29udGFpbmVyLFxuICBjbG9uZVBvbGljeUNvbnRhaW5lcixcbiAgcmVxdWVzdEJhZFBvcnQsXG4gIFRBT0NoZWNrLFxuICBhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyLFxuICByZXNwb25zZUxvY2F0aW9uVVJMLFxuICByZXF1ZXN0Q3VycmVudFVSTCxcbiAgc2V0UmVxdWVzdFJlZmVycmVyUG9saWN5T25SZWRpcmVjdCxcbiAgdHJ5VXBncmFkZVJlcXVlc3RUb0FQb3RlbnRpYWxseVRydXN0d29ydGh5VVJMLFxuICBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvLFxuICBhcHBlbmRGZXRjaE1ldGFkYXRhLFxuICBjb3JzQ2hlY2ssXG4gIGNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayxcbiAgZGV0ZXJtaW5lUmVxdWVzdHNSZWZlcnJlcixcbiAgY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUsXG4gIGNyZWF0ZURlZmVycmVkUHJvbWlzZSxcbiAgaXNCbG9iTGlrZSxcbiAgc2FtZU9yaWdpbixcbiAgaXNDYW5jZWxsZWQsXG4gIGlzQWJvcnRlZCxcbiAgaXNFcnJvckxpa2UsXG4gIGZ1bGx5UmVhZEJvZHksXG4gIHJlYWRhYmxlU3RyZWFtQ2xvc2UsXG4gIGlzb21vcnBoaWNFbmNvZGUsXG4gIHVybElzTG9jYWwsXG4gIHVybElzSHR0cEh0dHBzU2NoZW1lLFxuICB1cmxIYXNIdHRwc1NjaGVtZVxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGtTdGF0ZSwga0hlYWRlcnMsIGtHdWFyZCwga1JlYWxtIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgc2FmZWx5RXh0cmFjdEJvZHkgfSA9IHJlcXVpcmUoJy4vYm9keScpXG5jb25zdCB7XG4gIHJlZGlyZWN0U3RhdHVzU2V0LFxuICBudWxsQm9keVN0YXR1cyxcbiAgc2FmZU1ldGhvZHNTZXQsXG4gIHJlcXVlc3RCb2R5SGVhZGVyLFxuICBzdWJyZXNvdXJjZVNldCxcbiAgRE9NRXhjZXB0aW9uXG59ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBFRSA9IHJlcXVpcmUoJ2V2ZW50cycpXG5jb25zdCB7IFJlYWRhYmxlLCBwaXBlbGluZSB9ID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IHsgYWRkQWJvcnRMaXN0ZW5lciwgaXNFcnJvcmVkLCBpc1JlYWRhYmxlLCBub2RlTWFqb3IsIG5vZGVNaW5vciB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgZGF0YVVSTFByb2Nlc3Nvciwgc2VyaWFsaXplQU1pbWVUeXBlIH0gPSByZXF1aXJlKCcuL2RhdGFVUkwnKVxuY29uc3QgeyBUcmFuc2Zvcm1TdHJlYW0gfSA9IHJlcXVpcmUoJ3N0cmVhbS93ZWInKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuLi9nbG9iYWwnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IHsgU1RBVFVTX0NPREVTIH0gPSByZXF1aXJlKCdodHRwJylcbmNvbnN0IEdFVF9PUl9IRUFEID0gWydHRVQnLCAnSEVBRCddXG5cbi8qKiBAdHlwZSB7aW1wb3J0KCdidWZmZXInKS5yZXNvbHZlT2JqZWN0VVJMfSAqL1xubGV0IHJlc29sdmVPYmplY3RVUkxcbmxldCBSZWFkYWJsZVN0cmVhbSA9IGdsb2JhbFRoaXMuUmVhZGFibGVTdHJlYW1cblxuY2xhc3MgRmV0Y2ggZXh0ZW5kcyBFRSB7XG4gIGNvbnN0cnVjdG9yIChkaXNwYXRjaGVyKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpcy5kaXNwYXRjaGVyID0gZGlzcGF0Y2hlclxuICAgIHRoaXMuY29ubmVjdGlvbiA9IG51bGxcbiAgICB0aGlzLmR1bXAgPSBmYWxzZVxuICAgIHRoaXMuc3RhdGUgPSAnb25nb2luZydcbiAgICAvLyAyIHRlcm1pbmF0ZWQgbGlzdGVuZXJzIGdldCBhZGRlZCBwZXIgcmVxdWVzdCxcbiAgICAvLyBidXQgb25seSAxIGdldHMgcmVtb3ZlZC4gSWYgdGhlcmUgYXJlIDIwIHJlZGlyZWN0cyxcbiAgICAvLyAyMSBsaXN0ZW5lcnMgd2lsbCBiZSBhZGRlZC5cbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzE3MTFcbiAgICAvLyBUT0RPIChmaXgpOiBGaW5kIGFuZCBmaXggcm9vdCBjYXVzZSBmb3IgbGVha2VkIGxpc3RlbmVyLlxuICAgIHRoaXMuc2V0TWF4TGlzdGVuZXJzKDIxKVxuICB9XG5cbiAgdGVybWluYXRlIChyZWFzb24pIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gJ29uZ29pbmcnKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0gJ3Rlcm1pbmF0ZWQnXG4gICAgdGhpcy5jb25uZWN0aW9uPy5kZXN0cm95KHJlYXNvbilcbiAgICB0aGlzLmVtaXQoJ3Rlcm1pbmF0ZWQnLCByZWFzb24pXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmV0Y2gtY29udHJvbGxlci1hYm9ydFxuICBhYm9ydCAoZXJyb3IpIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gJ29uZ29pbmcnKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyAxLiBTZXQgY29udHJvbGxlclx1MjAxOXMgc3RhdGUgdG8gXCJhYm9ydGVkXCIuXG4gICAgdGhpcy5zdGF0ZSA9ICdhYm9ydGVkJ1xuXG4gICAgLy8gMi4gTGV0IGZhbGxiYWNrRXJyb3IgYmUgYW4gXCJBYm9ydEVycm9yXCIgRE9NRXhjZXB0aW9uLlxuICAgIC8vIDMuIFNldCBlcnJvciB0byBmYWxsYmFja0Vycm9yIGlmIGl0IGlzIG5vdCBnaXZlbi5cbiAgICBpZiAoIWVycm9yKSB7XG4gICAgICBlcnJvciA9IG5ldyBET01FeGNlcHRpb24oJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuJywgJ0Fib3J0RXJyb3InKVxuICAgIH1cblxuICAgIC8vIDQuIExldCBzZXJpYWxpemVkRXJyb3IgYmUgU3RydWN0dXJlZFNlcmlhbGl6ZShlcnJvcikuXG4gICAgLy8gICAgSWYgdGhhdCB0aHJldyBhbiBleGNlcHRpb24sIGNhdGNoIGl0LCBhbmQgbGV0XG4gICAgLy8gICAgc2VyaWFsaXplZEVycm9yIGJlIFN0cnVjdHVyZWRTZXJpYWxpemUoZmFsbGJhY2tFcnJvcikuXG5cbiAgICAvLyA1LiBTZXQgY29udHJvbGxlclx1MjAxOXMgc2VyaWFsaXplZCBhYm9ydCByZWFzb24gdG8gc2VyaWFsaXplZEVycm9yLlxuICAgIHRoaXMuc2VyaWFsaXplZEFib3J0UmVhc29uID0gZXJyb3JcblxuICAgIHRoaXMuY29ubmVjdGlvbj8uZGVzdHJveShlcnJvcilcbiAgICB0aGlzLmVtaXQoJ3Rlcm1pbmF0ZWQnLCBlcnJvcilcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmV0Y2gtbWV0aG9kXG5mdW5jdGlvbiBmZXRjaCAoaW5wdXQsIGluaXQgPSB7fSkge1xuICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnZ2xvYmFsVGhpcy5mZXRjaCcgfSlcblxuICAvLyAxLiBMZXQgcCBiZSBhIG5ldyBwcm9taXNlLlxuICBjb25zdCBwID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAvLyAyLiBMZXQgcmVxdWVzdE9iamVjdCBiZSB0aGUgcmVzdWx0IG9mIGludm9raW5nIHRoZSBpbml0aWFsIHZhbHVlIG9mXG4gIC8vIFJlcXVlc3QgYXMgY29uc3RydWN0b3Igd2l0aCBpbnB1dCBhbmQgaW5pdCBhcyBhcmd1bWVudHMuIElmIHRoaXMgdGhyb3dzXG4gIC8vIGFuIGV4Y2VwdGlvbiwgcmVqZWN0IHAgd2l0aCBpdCBhbmQgcmV0dXJuIHAuXG4gIGxldCByZXF1ZXN0T2JqZWN0XG5cbiAgdHJ5IHtcbiAgICByZXF1ZXN0T2JqZWN0ID0gbmV3IFJlcXVlc3QoaW5wdXQsIGluaXQpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBwLnJlamVjdChlKVxuICAgIHJldHVybiBwLnByb21pc2VcbiAgfVxuXG4gIC8vIDMuIExldCByZXF1ZXN0IGJlIHJlcXVlc3RPYmplY3RcdTIwMTlzIHJlcXVlc3QuXG4gIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0T2JqZWN0W2tTdGF0ZV1cblxuICAvLyA0LiBJZiByZXF1ZXN0T2JqZWN0XHUyMDE5cyBzaWduYWxcdTIwMTlzIGFib3J0ZWQgZmxhZyBpcyBzZXQsIHRoZW46XG4gIGlmIChyZXF1ZXN0T2JqZWN0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgLy8gMS4gQWJvcnQgdGhlIGZldGNoKCkgY2FsbCB3aXRoIHAsIHJlcXVlc3QsIG51bGwsIGFuZFxuICAgIC8vICAgIHJlcXVlc3RPYmplY3RcdTIwMTlzIHNpZ25hbFx1MjAxOXMgYWJvcnQgcmVhc29uLlxuICAgIGFib3J0RmV0Y2gocCwgcmVxdWVzdCwgbnVsbCwgcmVxdWVzdE9iamVjdC5zaWduYWwucmVhc29uKVxuXG4gICAgLy8gMi4gUmV0dXJuIHAuXG4gICAgcmV0dXJuIHAucHJvbWlzZVxuICB9XG5cbiAgLy8gNS4gTGV0IGdsb2JhbE9iamVjdCBiZSByZXF1ZXN0XHUyMDE5cyBjbGllbnRcdTIwMTlzIGdsb2JhbCBvYmplY3QuXG4gIGNvbnN0IGdsb2JhbE9iamVjdCA9IHJlcXVlc3QuY2xpZW50Lmdsb2JhbE9iamVjdFxuXG4gIC8vIDYuIElmIGdsb2JhbE9iamVjdCBpcyBhIFNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZSBvYmplY3QsIHRoZW4gc2V0XG4gIC8vIHJlcXVlc3RcdTIwMTlzIHNlcnZpY2Utd29ya2VycyBtb2RlIHRvIFwibm9uZVwiLlxuICBpZiAoZ2xvYmFsT2JqZWN0Py5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gJ1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZScpIHtcbiAgICByZXF1ZXN0LnNlcnZpY2VXb3JrZXJzID0gJ25vbmUnXG4gIH1cblxuICAvLyA3LiBMZXQgcmVzcG9uc2VPYmplY3QgYmUgbnVsbC5cbiAgbGV0IHJlc3BvbnNlT2JqZWN0ID0gbnVsbFxuXG4gIC8vIDguIExldCByZWxldmFudFJlYWxtIGJlIHRoaXNcdTIwMTlzIHJlbGV2YW50IFJlYWxtLlxuICBjb25zdCByZWxldmFudFJlYWxtID0gbnVsbFxuXG4gIC8vIDkuIExldCBsb2NhbGx5QWJvcnRlZCBiZSBmYWxzZS5cbiAgbGV0IGxvY2FsbHlBYm9ydGVkID0gZmFsc2VcblxuICAvLyAxMC4gTGV0IGNvbnRyb2xsZXIgYmUgbnVsbC5cbiAgbGV0IGNvbnRyb2xsZXIgPSBudWxsXG5cbiAgLy8gMTEuIEFkZCB0aGUgZm9sbG93aW5nIGFib3J0IHN0ZXBzIHRvIHJlcXVlc3RPYmplY3RcdTIwMTlzIHNpZ25hbDpcbiAgYWRkQWJvcnRMaXN0ZW5lcihcbiAgICByZXF1ZXN0T2JqZWN0LnNpZ25hbCxcbiAgICAoKSA9PiB7XG4gICAgICAvLyAxLiBTZXQgbG9jYWxseUFib3J0ZWQgdG8gdHJ1ZS5cbiAgICAgIGxvY2FsbHlBYm9ydGVkID0gdHJ1ZVxuXG4gICAgICAvLyAyLiBBc3NlcnQ6IGNvbnRyb2xsZXIgaXMgbm9uLW51bGwuXG4gICAgICBhc3NlcnQoY29udHJvbGxlciAhPSBudWxsKVxuXG4gICAgICAvLyAzLiBBYm9ydCBjb250cm9sbGVyIHdpdGggcmVxdWVzdE9iamVjdFx1MjAxOXMgc2lnbmFsXHUyMDE5cyBhYm9ydCByZWFzb24uXG4gICAgICBjb250cm9sbGVyLmFib3J0KHJlcXVlc3RPYmplY3Quc2lnbmFsLnJlYXNvbilcblxuICAgICAgLy8gNC4gQWJvcnQgdGhlIGZldGNoKCkgY2FsbCB3aXRoIHAsIHJlcXVlc3QsIHJlc3BvbnNlT2JqZWN0LFxuICAgICAgLy8gICAgYW5kIHJlcXVlc3RPYmplY3RcdTIwMTlzIHNpZ25hbFx1MjAxOXMgYWJvcnQgcmVhc29uLlxuICAgICAgYWJvcnRGZXRjaChwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgcmVxdWVzdE9iamVjdC5zaWduYWwucmVhc29uKVxuICAgIH1cbiAgKVxuXG4gIC8vIDEyLiBMZXQgaGFuZGxlRmV0Y2hEb25lIGdpdmVuIHJlc3BvbnNlIHJlc3BvbnNlIGJlIHRvIGZpbmFsaXplIGFuZFxuICAvLyByZXBvcnQgdGltaW5nIHdpdGggcmVzcG9uc2UsIGdsb2JhbE9iamVjdCwgYW5kIFwiZmV0Y2hcIi5cbiAgY29uc3QgaGFuZGxlRmV0Y2hEb25lID0gKHJlc3BvbnNlKSA9PlxuICAgIGZpbmFsaXplQW5kUmVwb3J0VGltaW5nKHJlc3BvbnNlLCAnZmV0Y2gnKVxuXG4gIC8vIDEzLiBTZXQgY29udHJvbGxlciB0byB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgZmV0Y2ggZ2l2ZW4gcmVxdWVzdCxcbiAgLy8gd2l0aCBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgc2V0IHRvIGhhbmRsZUZldGNoRG9uZSwgYW5kIHByb2Nlc3NSZXNwb25zZVxuICAvLyBnaXZlbiByZXNwb25zZSBiZWluZyB0aGVzZSBzdWJzdGVwczpcblxuICBjb25zdCBwcm9jZXNzUmVzcG9uc2UgPSAocmVzcG9uc2UpID0+IHtcbiAgICAvLyAxLiBJZiBsb2NhbGx5QWJvcnRlZCBpcyB0cnVlLCB0ZXJtaW5hdGUgdGhlc2Ugc3Vic3RlcHMuXG4gICAgaWYgKGxvY2FsbHlBYm9ydGVkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICB9XG5cbiAgICAvLyAyLiBJZiByZXNwb25zZVx1MjAxOXMgYWJvcnRlZCBmbGFnIGlzIHNldCwgdGhlbjpcbiAgICBpZiAocmVzcG9uc2UuYWJvcnRlZCkge1xuICAgICAgLy8gMS4gTGV0IGRlc2VyaWFsaXplZEVycm9yIGJlIHRoZSByZXN1bHQgb2YgZGVzZXJpYWxpemUgYSBzZXJpYWxpemVkXG4gICAgICAvLyAgICBhYm9ydCByZWFzb24gZ2l2ZW4gY29udHJvbGxlclx1MjAxOXMgc2VyaWFsaXplZCBhYm9ydCByZWFzb24gYW5kXG4gICAgICAvLyAgICByZWxldmFudFJlYWxtLlxuXG4gICAgICAvLyAyLiBBYm9ydCB0aGUgZmV0Y2goKSBjYWxsIHdpdGggcCwgcmVxdWVzdCwgcmVzcG9uc2VPYmplY3QsIGFuZFxuICAgICAgLy8gICAgZGVzZXJpYWxpemVkRXJyb3IuXG5cbiAgICAgIGFib3J0RmV0Y2gocCwgcmVxdWVzdCwgcmVzcG9uc2VPYmplY3QsIGNvbnRyb2xsZXIuc2VyaWFsaXplZEFib3J0UmVhc29uKVxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgfVxuXG4gICAgLy8gMy4gSWYgcmVzcG9uc2UgaXMgYSBuZXR3b3JrIGVycm9yLCB0aGVuIHJlamVjdCBwIHdpdGggYSBUeXBlRXJyb3JcbiAgICAvLyBhbmQgdGVybWluYXRlIHRoZXNlIHN1YnN0ZXBzLlxuICAgIGlmIChyZXNwb25zZS50eXBlID09PSAnZXJyb3InKSB7XG4gICAgICBwLnJlamVjdChcbiAgICAgICAgT2JqZWN0LmFzc2lnbihuZXcgVHlwZUVycm9yKCdmZXRjaCBmYWlsZWQnKSwgeyBjYXVzZTogcmVzcG9uc2UuZXJyb3IgfSlcbiAgICAgIClcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIH1cblxuICAgIC8vIDQuIFNldCByZXNwb25zZU9iamVjdCB0byB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgUmVzcG9uc2Ugb2JqZWN0LFxuICAgIC8vIGdpdmVuIHJlc3BvbnNlLCBcImltbXV0YWJsZVwiLCBhbmQgcmVsZXZhbnRSZWFsbS5cbiAgICByZXNwb25zZU9iamVjdCA9IG5ldyBSZXNwb25zZSgpXG4gICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXSA9IHJlc3BvbnNlXG4gICAgcmVzcG9uc2VPYmplY3Rba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0XG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSAnaW1tdXRhYmxlJ1xuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuXG4gICAgLy8gNS4gUmVzb2x2ZSBwIHdpdGggcmVzcG9uc2VPYmplY3QuXG4gICAgcC5yZXNvbHZlKHJlc3BvbnNlT2JqZWN0KVxuICB9XG5cbiAgY29udHJvbGxlciA9IGZldGNoaW5nKHtcbiAgICByZXF1ZXN0LFxuICAgIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keTogaGFuZGxlRmV0Y2hEb25lLFxuICAgIHByb2Nlc3NSZXNwb25zZSxcbiAgICBkaXNwYXRjaGVyOiBpbml0LmRpc3BhdGNoZXIgPz8gZ2V0R2xvYmFsRGlzcGF0Y2hlcigpIC8vIHVuZGljaVxuICB9KVxuXG4gIC8vIDE0LiBSZXR1cm4gcC5cbiAgcmV0dXJuIHAucHJvbWlzZVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmluYWxpemUtYW5kLXJlcG9ydC10aW1pbmdcbmZ1bmN0aW9uIGZpbmFsaXplQW5kUmVwb3J0VGltaW5nIChyZXNwb25zZSwgaW5pdGlhdG9yVHlwZSA9ICdvdGhlcicpIHtcbiAgLy8gMS4gSWYgcmVzcG9uc2UgaXMgYW4gYWJvcnRlZCBuZXR3b3JrIGVycm9yLCB0aGVuIHJldHVybi5cbiAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicgJiYgcmVzcG9uc2UuYWJvcnRlZCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gMi4gSWYgcmVzcG9uc2VcdTIwMTlzIFVSTCBsaXN0IGlzIG51bGwgb3IgZW1wdHksIHRoZW4gcmV0dXJuLlxuICBpZiAoIXJlc3BvbnNlLnVybExpc3Q/Lmxlbmd0aCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gMy4gTGV0IG9yaWdpbmFsVVJMIGJlIHJlc3BvbnNlXHUyMDE5cyBVUkwgbGlzdFswXS5cbiAgY29uc3Qgb3JpZ2luYWxVUkwgPSByZXNwb25zZS51cmxMaXN0WzBdXG5cbiAgLy8gNC4gTGV0IHRpbWluZ0luZm8gYmUgcmVzcG9uc2VcdTIwMTlzIHRpbWluZyBpbmZvLlxuICBsZXQgdGltaW5nSW5mbyA9IHJlc3BvbnNlLnRpbWluZ0luZm9cblxuICAvLyA1LiBMZXQgY2FjaGVTdGF0ZSBiZSByZXNwb25zZVx1MjAxOXMgY2FjaGUgc3RhdGUuXG4gIGxldCBjYWNoZVN0YXRlID0gcmVzcG9uc2UuY2FjaGVTdGF0ZVxuXG4gIC8vIDYuIElmIG9yaWdpbmFsVVJMXHUyMDE5cyBzY2hlbWUgaXMgbm90IGFuIEhUVFAoUykgc2NoZW1lLCB0aGVuIHJldHVybi5cbiAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShvcmlnaW5hbFVSTCkpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDcuIElmIHRpbWluZ0luZm8gaXMgbnVsbCwgdGhlbiByZXR1cm4uXG4gIGlmICh0aW1pbmdJbmZvID09PSBudWxsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyA4LiBJZiByZXNwb25zZVx1MjAxOXMgdGltaW5nIGFsbG93IHBhc3NlZCBmbGFnIGlzIG5vdCBzZXQsIHRoZW46XG4gIGlmICghcmVzcG9uc2UudGltaW5nQWxsb3dQYXNzZWQpIHtcbiAgICAvLyAgMS4gU2V0IHRpbWluZ0luZm8gdG8gYSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFuIG9wYXF1ZSB0aW1pbmcgaW5mbyBmb3IgdGltaW5nSW5mby5cbiAgICB0aW1pbmdJbmZvID0gY3JlYXRlT3BhcXVlVGltaW5nSW5mbyh7XG4gICAgICBzdGFydFRpbWU6IHRpbWluZ0luZm8uc3RhcnRUaW1lXG4gICAgfSlcblxuICAgIC8vICAyLiBTZXQgY2FjaGVTdGF0ZSB0byB0aGUgZW1wdHkgc3RyaW5nLlxuICAgIGNhY2hlU3RhdGUgPSAnJ1xuICB9XG5cbiAgLy8gOS4gU2V0IHRpbWluZ0luZm9cdTIwMTlzIGVuZCB0aW1lIHRvIHRoZSBjb2Fyc2VuZWQgc2hhcmVkIGN1cnJlbnQgdGltZVxuICAvLyBnaXZlbiBnbG9iYWxcdTIwMTlzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdFx1MjAxOXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkXG4gIC8vIGNhcGFiaWxpdHkuXG4gIC8vIFRPRE86IGdpdmVuIGdsb2JhbFx1MjAxOXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0XHUyMDE5cyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWRcbiAgLy8gY2FwYWJpbGl0eT9cbiAgdGltaW5nSW5mby5lbmRUaW1lID0gY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUoKVxuXG4gIC8vIDEwLiBTZXQgcmVzcG9uc2VcdTIwMTlzIHRpbWluZyBpbmZvIHRvIHRpbWluZ0luZm8uXG4gIHJlc3BvbnNlLnRpbWluZ0luZm8gPSB0aW1pbmdJbmZvXG5cbiAgLy8gMTEuIE1hcmsgcmVzb3VyY2UgdGltaW5nIGZvciB0aW1pbmdJbmZvLCBvcmlnaW5hbFVSTCwgaW5pdGlhdG9yVHlwZSxcbiAgLy8gZ2xvYmFsLCBhbmQgY2FjaGVTdGF0ZS5cbiAgbWFya1Jlc291cmNlVGltaW5nKFxuICAgIHRpbWluZ0luZm8sXG4gICAgb3JpZ2luYWxVUkwsXG4gICAgaW5pdGlhdG9yVHlwZSxcbiAgICBnbG9iYWxUaGlzLFxuICAgIGNhY2hlU3RhdGVcbiAgKVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vcmVzb3VyY2UtdGltaW5nLyNkZm4tbWFyay1yZXNvdXJjZS10aW1pbmdcbmZ1bmN0aW9uIG1hcmtSZXNvdXJjZVRpbWluZyAodGltaW5nSW5mbywgb3JpZ2luYWxVUkwsIGluaXRpYXRvclR5cGUsIGdsb2JhbFRoaXMsIGNhY2hlU3RhdGUpIHtcbiAgaWYgKG5vZGVNYWpvciA+IDE4IHx8IChub2RlTWFqb3IgPT09IDE4ICYmIG5vZGVNaW5vciA+PSAyKSkge1xuICAgIHBlcmZvcm1hbmNlLm1hcmtSZXNvdXJjZVRpbWluZyh0aW1pbmdJbmZvLCBvcmlnaW5hbFVSTC5ocmVmLCBpbml0aWF0b3JUeXBlLCBnbG9iYWxUaGlzLCBjYWNoZVN0YXRlKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNhYm9ydC1mZXRjaFxuZnVuY3Rpb24gYWJvcnRGZXRjaCAocCwgcmVxdWVzdCwgcmVzcG9uc2VPYmplY3QsIGVycm9yKSB7XG4gIC8vIE5vdGU6IEFib3J0U2lnbmFsLnJlYXNvbiB3YXMgYWRkZWQgaW4gbm9kZSB2MTcuMi4wXG4gIC8vIHdoaWNoIHdvdWxkIGdpdmUgdXMgYW4gdW5kZWZpbmVkIGVycm9yIHRvIHJlamVjdCB3aXRoLlxuICAvLyBSZW1vdmUgdGhpcyBvbmNlIG5vZGUgdjE2IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuXG4gIGlmICghZXJyb3IpIHtcbiAgICBlcnJvciA9IG5ldyBET01FeGNlcHRpb24oJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuJywgJ0Fib3J0RXJyb3InKVxuICB9XG5cbiAgLy8gMS4gUmVqZWN0IHByb21pc2Ugd2l0aCBlcnJvci5cbiAgcC5yZWplY3QoZXJyb3IpXG5cbiAgLy8gMi4gSWYgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBub3QgbnVsbCBhbmQgaXMgcmVhZGFibGUsIHRoZW4gY2FuY2VsIHJlcXVlc3RcdTIwMTlzXG4gIC8vIGJvZHkgd2l0aCBlcnJvci5cbiAgaWYgKHJlcXVlc3QuYm9keSAhPSBudWxsICYmIGlzUmVhZGFibGUocmVxdWVzdC5ib2R5Py5zdHJlYW0pKSB7XG4gICAgcmVxdWVzdC5ib2R5LnN0cmVhbS5jYW5jZWwoZXJyb3IpLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VSUl9JTlZBTElEX1NUQVRFJykge1xuICAgICAgICAvLyBOb2RlIGJ1Zz9cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJcbiAgICB9KVxuICB9XG5cbiAgLy8gMy4gSWYgcmVzcG9uc2VPYmplY3QgaXMgbnVsbCwgdGhlbiByZXR1cm4uXG4gIGlmIChyZXNwb25zZU9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyA0LiBMZXQgcmVzcG9uc2UgYmUgcmVzcG9uc2VPYmplY3RcdTIwMTlzIHJlc3BvbnNlLlxuICBjb25zdCByZXNwb25zZSA9IHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV1cblxuICAvLyA1LiBJZiByZXNwb25zZVx1MjAxOXMgYm9keSBpcyBub3QgbnVsbCBhbmQgaXMgcmVhZGFibGUsIHRoZW4gZXJyb3IgcmVzcG9uc2VcdTIwMTlzXG4gIC8vIGJvZHkgd2l0aCBlcnJvci5cbiAgaWYgKHJlc3BvbnNlLmJvZHkgIT0gbnVsbCAmJiBpc1JlYWRhYmxlKHJlc3BvbnNlLmJvZHk/LnN0cmVhbSkpIHtcbiAgICByZXNwb25zZS5ib2R5LnN0cmVhbS5jYW5jZWwoZXJyb3IpLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VSUl9JTlZBTElEX1NUQVRFJykge1xuICAgICAgICAvLyBOb2RlIGJ1Zz9cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJcbiAgICB9KVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmZXRjaGluZ1xuZnVuY3Rpb24gZmV0Y2hpbmcgKHtcbiAgcmVxdWVzdCxcbiAgcHJvY2Vzc1JlcXVlc3RCb2R5Q2h1bmtMZW5ndGgsXG4gIHByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5LFxuICBwcm9jZXNzUmVzcG9uc2UsXG4gIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSxcbiAgcHJvY2Vzc1Jlc3BvbnNlQ29uc3VtZUJvZHksXG4gIHVzZVBhcmFsbGVsUXVldWUgPSBmYWxzZSxcbiAgZGlzcGF0Y2hlciAvLyB1bmRpY2lcbn0pIHtcbiAgLy8gMS4gTGV0IHRhc2tEZXN0aW5hdGlvbiBiZSBudWxsLlxuICBsZXQgdGFza0Rlc3RpbmF0aW9uID0gbnVsbFxuXG4gIC8vIDIuIExldCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSBiZSBmYWxzZS5cbiAgbGV0IGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5ID0gZmFsc2VcblxuICAvLyAzLiBJZiByZXF1ZXN0XHUyMDE5cyBjbGllbnQgaXMgbm9uLW51bGwsIHRoZW46XG4gIGlmIChyZXF1ZXN0LmNsaWVudCAhPSBudWxsKSB7XG4gICAgLy8gMS4gU2V0IHRhc2tEZXN0aW5hdGlvbiB0byByZXF1ZXN0XHUyMDE5cyBjbGllbnRcdTIwMTlzIGdsb2JhbCBvYmplY3QuXG4gICAgdGFza0Rlc3RpbmF0aW9uID0gcmVxdWVzdC5jbGllbnQuZ2xvYmFsT2JqZWN0XG5cbiAgICAvLyAyLiBTZXQgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkgdG8gcmVxdWVzdFx1MjAxOXMgY2xpZW50XHUyMDE5cyBjcm9zcy1vcmlnaW5cbiAgICAvLyBpc29sYXRlZCBjYXBhYmlsaXR5LlxuICAgIGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5ID1cbiAgICAgIHJlcXVlc3QuY2xpZW50LmNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5XG4gIH1cblxuICAvLyA0LiBJZiB1c2VQYXJhbGxlbFF1ZXVlIGlzIHRydWUsIHRoZW4gc2V0IHRhc2tEZXN0aW5hdGlvbiB0byB0aGUgcmVzdWx0IG9mXG4gIC8vIHN0YXJ0aW5nIGEgbmV3IHBhcmFsbGVsIHF1ZXVlLlxuICAvLyBUT0RPXG5cbiAgLy8gNS4gTGV0IHRpbWluZ0luZm8gYmUgYSBuZXcgZmV0Y2ggdGltaW5nIGluZm8gd2hvc2Ugc3RhcnQgdGltZSBhbmRcbiAgLy8gcG9zdC1yZWRpcmVjdCBzdGFydCB0aW1lIGFyZSB0aGUgY29hcnNlbmVkIHNoYXJlZCBjdXJyZW50IHRpbWUgZ2l2ZW5cbiAgLy8gY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkuXG4gIGNvbnN0IGN1cnJlblRpbWUgPSBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZShjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSlcbiAgY29uc3QgdGltaW5nSW5mbyA9IGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8oe1xuICAgIHN0YXJ0VGltZTogY3VycmVuVGltZVxuICB9KVxuXG4gIC8vIDYuIExldCBmZXRjaFBhcmFtcyBiZSBhIG5ldyBmZXRjaCBwYXJhbXMgd2hvc2VcbiAgLy8gcmVxdWVzdCBpcyByZXF1ZXN0LFxuICAvLyB0aW1pbmcgaW5mbyBpcyB0aW1pbmdJbmZvLFxuICAvLyBwcm9jZXNzIHJlcXVlc3QgYm9keSBjaHVuayBsZW5ndGggaXMgcHJvY2Vzc1JlcXVlc3RCb2R5Q2h1bmtMZW5ndGgsXG4gIC8vIHByb2Nlc3MgcmVxdWVzdCBlbmQtb2YtYm9keSBpcyBwcm9jZXNzUmVxdWVzdEVuZE9mQm9keSxcbiAgLy8gcHJvY2VzcyByZXNwb25zZSBpcyBwcm9jZXNzUmVzcG9uc2UsXG4gIC8vIHByb2Nlc3MgcmVzcG9uc2UgY29uc3VtZSBib2R5IGlzIHByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5LFxuICAvLyBwcm9jZXNzIHJlc3BvbnNlIGVuZC1vZi1ib2R5IGlzIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSxcbiAgLy8gdGFzayBkZXN0aW5hdGlvbiBpcyB0YXNrRGVzdGluYXRpb24sXG4gIC8vIGFuZCBjcm9zcy1vcmlnaW4gaXNvbGF0ZWQgY2FwYWJpbGl0eSBpcyBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eS5cbiAgY29uc3QgZmV0Y2hQYXJhbXMgPSB7XG4gICAgY29udHJvbGxlcjogbmV3IEZldGNoKGRpc3BhdGNoZXIpLFxuICAgIHJlcXVlc3QsXG4gICAgdGltaW5nSW5mbyxcbiAgICBwcm9jZXNzUmVxdWVzdEJvZHlDaHVua0xlbmd0aCxcbiAgICBwcm9jZXNzUmVxdWVzdEVuZE9mQm9keSxcbiAgICBwcm9jZXNzUmVzcG9uc2UsXG4gICAgcHJvY2Vzc1Jlc3BvbnNlQ29uc3VtZUJvZHksXG4gICAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LFxuICAgIHRhc2tEZXN0aW5hdGlvbixcbiAgICBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eVxuICB9XG5cbiAgLy8gNy4gSWYgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBhIGJ5dGUgc2VxdWVuY2UsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIGJvZHkgdG9cbiAgLy8gICAgcmVxdWVzdFx1MjAxOXMgYm9keSBhcyBhIGJvZHkuXG4gIC8vIE5PVEU6IFNpbmNlIGZldGNoaW5nIGlzIG9ubHkgY2FsbGVkIGZyb20gZmV0Y2gsIGJvZHkgc2hvdWxkIGFscmVhZHkgYmVcbiAgLy8gZXh0cmFjdGVkLlxuICBhc3NlcnQoIXJlcXVlc3QuYm9keSB8fCByZXF1ZXN0LmJvZHkuc3RyZWFtKVxuXG4gIC8vIDguIElmIHJlcXVlc3RcdTIwMTlzIHdpbmRvdyBpcyBcImNsaWVudFwiLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyB3aW5kb3cgdG8gcmVxdWVzdFx1MjAxOXNcbiAgLy8gY2xpZW50LCBpZiByZXF1ZXN0XHUyMDE5cyBjbGllbnRcdTIwMTlzIGdsb2JhbCBvYmplY3QgaXMgYSBXaW5kb3cgb2JqZWN0OyBvdGhlcndpc2VcbiAgLy8gXCJuby13aW5kb3dcIi5cbiAgaWYgKHJlcXVlc3Qud2luZG93ID09PSAnY2xpZW50Jykge1xuICAgIC8vIFRPRE86IFdoYXQgaWYgcmVxdWVzdC5jbGllbnQgaXMgbnVsbD9cbiAgICByZXF1ZXN0LndpbmRvdyA9XG4gICAgICByZXF1ZXN0LmNsaWVudD8uZ2xvYmFsT2JqZWN0Py5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gJ1dpbmRvdydcbiAgICAgICAgPyByZXF1ZXN0LmNsaWVudFxuICAgICAgICA6ICduby13aW5kb3cnXG4gIH1cblxuICAvLyA5LiBJZiByZXF1ZXN0XHUyMDE5cyBvcmlnaW4gaXMgXCJjbGllbnRcIiwgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgb3JpZ2luIHRvIHJlcXVlc3RcdTIwMTlzXG4gIC8vIGNsaWVudFx1MjAxOXMgb3JpZ2luLlxuICBpZiAocmVxdWVzdC5vcmlnaW4gPT09ICdjbGllbnQnKSB7XG4gICAgLy8gVE9ETzogV2hhdCBpZiByZXF1ZXN0LmNsaWVudCBpcyBudWxsP1xuICAgIHJlcXVlc3Qub3JpZ2luID0gcmVxdWVzdC5jbGllbnQ/Lm9yaWdpblxuICB9XG5cbiAgLy8gMTAuIElmIGFsbCBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHRydWU6XG4gIC8vIFRPRE9cblxuICAvLyAxMS4gSWYgcmVxdWVzdFx1MjAxOXMgcG9saWN5IGNvbnRhaW5lciBpcyBcImNsaWVudFwiLCB0aGVuOlxuICBpZiAocmVxdWVzdC5wb2xpY3lDb250YWluZXIgPT09ICdjbGllbnQnKSB7XG4gICAgLy8gMS4gSWYgcmVxdWVzdFx1MjAxOXMgY2xpZW50IGlzIG5vbi1udWxsLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyBwb2xpY3lcbiAgICAvLyBjb250YWluZXIgdG8gYSBjbG9uZSBvZiByZXF1ZXN0XHUyMDE5cyBjbGllbnRcdTIwMTlzIHBvbGljeSBjb250YWluZXIuIFtIVE1MXVxuICAgIGlmIChyZXF1ZXN0LmNsaWVudCAhPSBudWxsKSB7XG4gICAgICByZXF1ZXN0LnBvbGljeUNvbnRhaW5lciA9IGNsb25lUG9saWN5Q29udGFpbmVyKFxuICAgICAgICByZXF1ZXN0LmNsaWVudC5wb2xpY3lDb250YWluZXJcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBzZXQgcmVxdWVzdFx1MjAxOXMgcG9saWN5IGNvbnRhaW5lciB0byBhIG5ldyBwb2xpY3lcbiAgICAgIC8vIGNvbnRhaW5lci5cbiAgICAgIHJlcXVlc3QucG9saWN5Q29udGFpbmVyID0gbWFrZVBvbGljeUNvbnRhaW5lcigpXG4gICAgfVxuICB9XG5cbiAgLy8gMTIuIElmIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYEFjY2VwdGAsIHRoZW46XG4gIGlmICghcmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnYWNjZXB0JykpIHtcbiAgICAvLyAxLiBMZXQgdmFsdWUgYmUgYCovKmAuXG4gICAgY29uc3QgdmFsdWUgPSAnKi8qJ1xuXG4gICAgLy8gMi4gQSB1c2VyIGFnZW50IHNob3VsZCBzZXQgdmFsdWUgdG8gdGhlIGZpcnN0IG1hdGNoaW5nIHN0YXRlbWVudCwgaWZcbiAgICAvLyBhbnksIHN3aXRjaGluZyBvbiByZXF1ZXN0XHUyMDE5cyBkZXN0aW5hdGlvbjpcbiAgICAvLyBcImRvY3VtZW50XCJcbiAgICAvLyBcImZyYW1lXCJcbiAgICAvLyBcImlmcmFtZVwiXG4gICAgLy8gYHRleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LCovKjtxPTAuOGBcbiAgICAvLyBcImltYWdlXCJcbiAgICAvLyBgaW1hZ2UvcG5nLGltYWdlL3N2Zyt4bWwsaW1hZ2UvKjtxPTAuOCwqLyo7cT0wLjVgXG4gICAgLy8gXCJzdHlsZVwiXG4gICAgLy8gYHRleHQvY3NzLCovKjtxPTAuMWBcbiAgICAvLyBUT0RPXG5cbiAgICAvLyAzLiBBcHBlbmQgYEFjY2VwdGAvdmFsdWUgdG8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2FjY2VwdCcsIHZhbHVlKVxuICB9XG5cbiAgLy8gMTMuIElmIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYEFjY2VwdC1MYW5ndWFnZWAsIHRoZW5cbiAgLy8gdXNlciBhZ2VudHMgc2hvdWxkIGFwcGVuZCBgQWNjZXB0LUxhbmd1YWdlYC9hbiBhcHByb3ByaWF0ZSB2YWx1ZSB0b1xuICAvLyByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgaWYgKCFyZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdhY2NlcHQtbGFuZ3VhZ2UnKSkge1xuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdhY2NlcHQtbGFuZ3VhZ2UnLCAnKicpXG4gIH1cblxuICAvLyAxNC4gSWYgcmVxdWVzdFx1MjAxOXMgcHJpb3JpdHkgaXMgbnVsbCwgdGhlbiB1c2UgcmVxdWVzdFx1MjAxOXMgaW5pdGlhdG9yIGFuZFxuICAvLyBkZXN0aW5hdGlvbiBhcHByb3ByaWF0ZWx5IGluIHNldHRpbmcgcmVxdWVzdFx1MjAxOXMgcHJpb3JpdHkgdG8gYVxuICAvLyB1c2VyLWFnZW50LWRlZmluZWQgb2JqZWN0LlxuICBpZiAocmVxdWVzdC5wcmlvcml0eSA9PT0gbnVsbCkge1xuICAgIC8vIFRPRE9cbiAgfVxuXG4gIC8vIDE1LiBJZiByZXF1ZXN0IGlzIGEgc3VicmVzb3VyY2UgcmVxdWVzdCwgdGhlbjpcbiAgaWYgKHN1YnJlc291cmNlU2V0LmhhcyhyZXF1ZXN0LmRlc3RpbmF0aW9uKSkge1xuICAgIC8vIFRPRE9cbiAgfVxuXG4gIC8vIDE2LiBSdW4gbWFpbiBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcy5cbiAgbWFpbkZldGNoKGZldGNoUGFyYW1zKVxuICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci50ZXJtaW5hdGUoZXJyKVxuICAgIH0pXG5cbiAgLy8gMTcuIFJldHVybiBmZXRjaFBhcmFtJ3MgY29udHJvbGxlclxuICByZXR1cm4gZmV0Y2hQYXJhbXMuY29udHJvbGxlclxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1tYWluLWZldGNoXG5hc3luYyBmdW5jdGlvbiBtYWluRmV0Y2ggKGZldGNoUGFyYW1zLCByZWN1cnNpdmUgPSBmYWxzZSkge1xuICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IGZldGNoUGFyYW1zLnJlcXVlc3RcblxuICAvLyAyLiBMZXQgcmVzcG9uc2UgYmUgbnVsbC5cbiAgbGV0IHJlc3BvbnNlID0gbnVsbFxuXG4gIC8vIDMuIElmIHJlcXVlc3RcdTIwMTlzIGxvY2FsLVVSTHMtb25seSBmbGFnIGlzIHNldCBhbmQgcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkwgaXNcbiAgLy8gbm90IGxvY2FsLCB0aGVuIHNldCByZXNwb25zZSB0byBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChyZXF1ZXN0LmxvY2FsVVJMc09ubHkgJiYgIXVybElzTG9jYWwocmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdCkpKSB7XG4gICAgcmVzcG9uc2UgPSBtYWtlTmV0d29ya0Vycm9yKCdsb2NhbCBVUkxzIG9ubHknKVxuICB9XG5cbiAgLy8gNC4gUnVuIHJlcG9ydCBDb250ZW50IFNlY3VyaXR5IFBvbGljeSB2aW9sYXRpb25zIGZvciByZXF1ZXN0LlxuICAvLyBUT0RPXG5cbiAgLy8gNS4gVXBncmFkZSByZXF1ZXN0IHRvIGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMLCBpZiBhcHByb3ByaWF0ZS5cbiAgdHJ5VXBncmFkZVJlcXVlc3RUb0FQb3RlbnRpYWxseVRydXN0d29ydGh5VVJMKHJlcXVlc3QpXG5cbiAgLy8gNi4gSWYgc2hvdWxkIHJlcXVlc3QgYmUgYmxvY2tlZCBkdWUgdG8gYSBiYWQgcG9ydCwgc2hvdWxkIGZldGNoaW5nIHJlcXVlc3RcbiAgLy8gYmUgYmxvY2tlZCBhcyBtaXhlZCBjb250ZW50LCBvciBzaG91bGQgcmVxdWVzdCBiZSBibG9ja2VkIGJ5IENvbnRlbnRcbiAgLy8gU2VjdXJpdHkgUG9saWN5IHJldHVybnMgYmxvY2tlZCwgdGhlbiBzZXQgcmVzcG9uc2UgdG8gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAocmVxdWVzdEJhZFBvcnQocmVxdWVzdCkgPT09ICdibG9ja2VkJykge1xuICAgIHJlc3BvbnNlID0gbWFrZU5ldHdvcmtFcnJvcignYmFkIHBvcnQnKVxuICB9XG4gIC8vIFRPRE86IHNob3VsZCBmZXRjaGluZyByZXF1ZXN0IGJlIGJsb2NrZWQgYXMgbWl4ZWQgY29udGVudD9cbiAgLy8gVE9ETzogc2hvdWxkIHJlcXVlc3QgYmUgYmxvY2tlZCBieSBDb250ZW50IFNlY3VyaXR5IFBvbGljeT9cblxuICAvLyA3LiBJZiByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kgaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXNcbiAgLy8gcmVmZXJyZXIgcG9saWN5IHRvIHJlcXVlc3RcdTIwMTlzIHBvbGljeSBjb250YWluZXJcdTIwMTlzIHJlZmVycmVyIHBvbGljeS5cbiAgaWYgKHJlcXVlc3QucmVmZXJyZXJQb2xpY3kgPT09ICcnKSB7XG4gICAgcmVxdWVzdC5yZWZlcnJlclBvbGljeSA9IHJlcXVlc3QucG9saWN5Q29udGFpbmVyLnJlZmVycmVyUG9saWN5XG4gIH1cblxuICAvLyA4LiBJZiByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBpcyBub3QgXCJuby1yZWZlcnJlclwiLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5c1xuICAvLyByZWZlcnJlciB0byB0aGUgcmVzdWx0IG9mIGludm9raW5nIGRldGVybWluZSByZXF1ZXN0XHUyMDE5cyByZWZlcnJlci5cbiAgaWYgKHJlcXVlc3QucmVmZXJyZXIgIT09ICduby1yZWZlcnJlcicpIHtcbiAgICByZXF1ZXN0LnJlZmVycmVyID0gZGV0ZXJtaW5lUmVxdWVzdHNSZWZlcnJlcihyZXF1ZXN0KVxuICB9XG5cbiAgLy8gOS4gU2V0IHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBzY2hlbWUgdG8gXCJodHRwc1wiIGlmIGFsbCBvZiB0aGUgZm9sbG93aW5nXG4gIC8vIGNvbmRpdGlvbnMgYXJlIHRydWU6XG4gIC8vIC0gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIHNjaGVtZSBpcyBcImh0dHBcIlxuICAvLyAtIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBob3N0IGlzIGEgZG9tYWluXG4gIC8vIC0gTWF0Y2hpbmcgcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIGhvc3QgcGVyIEtub3duIEhTVFMgSG9zdCBEb21haW4gTmFtZVxuICAvLyAgIE1hdGNoaW5nIHJlc3VsdHMgaW4gZWl0aGVyIGEgc3VwZXJkb21haW4gbWF0Y2ggd2l0aCBhbiBhc3NlcnRlZFxuICAvLyAgIGluY2x1ZGVTdWJEb21haW5zIGRpcmVjdGl2ZSBvciBhIGNvbmdydWVudCBtYXRjaCAod2l0aCBvciB3aXRob3V0IGFuXG4gIC8vICAgYXNzZXJ0ZWQgaW5jbHVkZVN1YkRvbWFpbnMgZGlyZWN0aXZlKS4gW0hTVFNdXG4gIC8vIFRPRE9cblxuICAvLyAxMC4gSWYgcmVjdXJzaXZlIGlzIGZhbHNlLCB0aGVuIHJ1biB0aGUgcmVtYWluaW5nIHN0ZXBzIGluIHBhcmFsbGVsLlxuICAvLyBUT0RPXG5cbiAgLy8gMTEuIElmIHJlc3BvbnNlIGlzIG51bGwsIHRoZW4gc2V0IHJlc3BvbnNlIHRvIHRoZSByZXN1bHQgb2YgcnVubmluZ1xuICAvLyB0aGUgc3RlcHMgY29ycmVzcG9uZGluZyB0byB0aGUgZmlyc3QgbWF0Y2hpbmcgc3RhdGVtZW50OlxuICBpZiAocmVzcG9uc2UgPT09IG51bGwpIHtcbiAgICByZXNwb25zZSA9IGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50VVJMID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAgICAgaWYgKFxuICAgICAgICAvLyAtIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBvcmlnaW4gaXMgc2FtZSBvcmlnaW4gd2l0aCByZXF1ZXN0XHUyMDE5cyBvcmlnaW4sXG4gICAgICAgIC8vICAgYW5kIHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIFwiYmFzaWNcIlxuICAgICAgICAoc2FtZU9yaWdpbihjdXJyZW50VVJMLCByZXF1ZXN0LnVybCkgJiYgcmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnYmFzaWMnKSB8fFxuICAgICAgICAvLyByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgc2NoZW1lIGlzIFwiZGF0YVwiXG4gICAgICAgIChjdXJyZW50VVJMLnByb3RvY29sID09PSAnZGF0YTonKSB8fFxuICAgICAgICAvLyAtIHJlcXVlc3RcdTIwMTlzIG1vZGUgaXMgXCJuYXZpZ2F0ZVwiIG9yIFwid2Vic29ja2V0XCJcbiAgICAgICAgKHJlcXVlc3QubW9kZSA9PT0gJ25hdmlnYXRlJyB8fCByZXF1ZXN0Lm1vZGUgPT09ICd3ZWJzb2NrZXQnKVxuICAgICAgKSB7XG4gICAgICAgIC8vIDEuIFNldCByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyB0byBcImJhc2ljXCIuXG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9ICdiYXNpYydcblxuICAgICAgICAvLyAyLiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5nIHNjaGVtZSBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcy5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHNjaGVtZUZldGNoKGZldGNoUGFyYW1zKVxuICAgICAgfVxuXG4gICAgICAvLyByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzIFwic2FtZS1vcmlnaW5cIlxuICAgICAgaWYgKHJlcXVlc3QubW9kZSA9PT0gJ3NhbWUtb3JpZ2luJykge1xuICAgICAgICAvLyAxLiBSZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcigncmVxdWVzdCBtb2RlIGNhbm5vdCBiZSBcInNhbWUtb3JpZ2luXCInKVxuICAgICAgfVxuXG4gICAgICAvLyByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzIFwibm8tY29yc1wiXG4gICAgICBpZiAocmVxdWVzdC5tb2RlID09PSAnbm8tY29ycycpIHtcbiAgICAgICAgLy8gMS4gSWYgcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgbW9kZSBpcyBub3QgXCJmb2xsb3dcIiwgdGhlbiByZXR1cm4gYSBuZXR3b3JrXG4gICAgICAgIC8vIGVycm9yLlxuICAgICAgICBpZiAocmVxdWVzdC5yZWRpcmVjdCAhPT0gJ2ZvbGxvdycpIHtcbiAgICAgICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcihcbiAgICAgICAgICAgICdyZWRpcmVjdCBtb2RlIGNhbm5vdCBiZSBcImZvbGxvd1wiIGZvciBcIm5vLWNvcnNcIiByZXF1ZXN0J1xuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDIuIFNldCByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyB0byBcIm9wYXF1ZVwiLlxuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPSAnb3BhcXVlJ1xuXG4gICAgICAgIC8vIDMuIFJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgc2NoZW1lIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICAgICAgICByZXR1cm4gYXdhaXQgc2NoZW1lRmV0Y2goZmV0Y2hQYXJhbXMpXG4gICAgICB9XG5cbiAgICAgIC8vIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBzY2hlbWUgaXMgbm90IGFuIEhUVFAoUykgc2NoZW1lXG4gICAgICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpKSkge1xuICAgICAgICAvLyBSZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcignVVJMIHNjaGVtZSBtdXN0IGJlIGEgSFRUUChTKSBzY2hlbWUnKVxuICAgICAgfVxuXG4gICAgICAvLyAtIHJlcXVlc3RcdTIwMTlzIHVzZS1DT1JTLXByZWZsaWdodCBmbGFnIGlzIHNldFxuICAgICAgLy8gLSByZXF1ZXN0XHUyMDE5cyB1bnNhZmUtcmVxdWVzdCBmbGFnIGlzIHNldCBhbmQgZWl0aGVyIHJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpc1xuICAgICAgLy8gICBub3QgYSBDT1JTLXNhZmVsaXN0ZWQgbWV0aG9kIG9yIENPUlMtdW5zYWZlIHJlcXVlc3QtaGVhZGVyIG5hbWVzIHdpdGhcbiAgICAgIC8vICAgcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgaXMgbm90IGVtcHR5XG4gICAgICAvLyAgICAxLiBTZXQgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgdG8gXCJjb3JzXCIuXG4gICAgICAvLyAgICAyLiBMZXQgY29yc1dpdGhQcmVmbGlnaHRSZXNwb25zZSBiZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUCBmZXRjaFxuICAgICAgLy8gICAgZ2l2ZW4gZmV0Y2hQYXJhbXMgYW5kIHRydWUuXG4gICAgICAvLyAgICAzLiBJZiBjb3JzV2l0aFByZWZsaWdodFJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvciwgdGhlbiBjbGVhciBjYWNoZVxuICAgICAgLy8gICAgZW50cmllcyB1c2luZyByZXF1ZXN0LlxuICAgICAgLy8gICAgNC4gUmV0dXJuIGNvcnNXaXRoUHJlZmxpZ2h0UmVzcG9uc2UuXG4gICAgICAvLyBUT0RPXG5cbiAgICAgIC8vIE90aGVyd2lzZVxuICAgICAgLy8gICAgMS4gU2V0IHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIHRvIFwiY29yc1wiLlxuICAgICAgcmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID0gJ2NvcnMnXG5cbiAgICAgIC8vICAgIDIuIFJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUCBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcy5cbiAgICAgIHJldHVybiBhd2FpdCBodHRwRmV0Y2goZmV0Y2hQYXJhbXMpXG4gICAgfSkoKVxuICB9XG5cbiAgLy8gMTIuIElmIHJlY3Vyc2l2ZSBpcyB0cnVlLCB0aGVuIHJldHVybiByZXNwb25zZS5cbiAgaWYgKHJlY3Vyc2l2ZSkge1xuICAgIHJldHVybiByZXNwb25zZVxuICB9XG5cbiAgLy8gMTMuIElmIHJlc3BvbnNlIGlzIG5vdCBhIG5ldHdvcmsgZXJyb3IgYW5kIHJlc3BvbnNlIGlzIG5vdCBhIGZpbHRlcmVkXG4gIC8vIHJlc3BvbnNlLCB0aGVuOlxuICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAwICYmICFyZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlKSB7XG4gICAgLy8gSWYgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJjb3JzXCIsIHRoZW46XG4gICAgaWYgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnKSB7XG4gICAgICAvLyAxLiBMZXQgaGVhZGVyTmFtZXMgYmUgdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nIGhlYWRlciBsaXN0IHZhbHVlc1xuICAgICAgLy8gZ2l2ZW4gYEFjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJzYCBhbmQgcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgICAgLy8gVE9ET1xuICAgICAgLy8gMi4gSWYgcmVxdWVzdFx1MjAxOXMgY3JlZGVudGlhbHMgbW9kZSBpcyBub3QgXCJpbmNsdWRlXCIgYW5kIGhlYWRlck5hbWVzXG4gICAgICAvLyBjb250YWlucyBgKmAsIHRoZW4gc2V0IHJlc3BvbnNlXHUyMDE5cyBDT1JTLWV4cG9zZWQgaGVhZGVyLW5hbWUgbGlzdCB0b1xuICAgICAgLy8gYWxsIHVuaXF1ZSBoZWFkZXIgbmFtZXMgaW4gcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgICAgLy8gVE9ET1xuICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBpZiBoZWFkZXJOYW1lcyBpcyBub3QgbnVsbCBvciBmYWlsdXJlLCB0aGVuIHNldFxuICAgICAgLy8gcmVzcG9uc2VcdTIwMTlzIENPUlMtZXhwb3NlZCBoZWFkZXItbmFtZSBsaXN0IHRvIGhlYWRlck5hbWVzLlxuICAgICAgLy8gVE9ET1xuICAgIH1cblxuICAgIC8vIFNldCByZXNwb25zZSB0byB0aGUgZm9sbG93aW5nIGZpbHRlcmVkIHJlc3BvbnNlIHdpdGggcmVzcG9uc2UgYXMgaXRzXG4gICAgLy8gaW50ZXJuYWwgcmVzcG9uc2UsIGRlcGVuZGluZyBvbiByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZzpcbiAgICBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnYmFzaWMnKSB7XG4gICAgICByZXNwb25zZSA9IGZpbHRlclJlc3BvbnNlKHJlc3BvbnNlLCAnYmFzaWMnKVxuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnY29ycycpIHtcbiAgICAgIHJlc3BvbnNlID0gZmlsdGVyUmVzcG9uc2UocmVzcG9uc2UsICdjb3JzJylcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ29wYXF1ZScpIHtcbiAgICAgIHJlc3BvbnNlID0gZmlsdGVyUmVzcG9uc2UocmVzcG9uc2UsICdvcGFxdWUnKVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQoZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgLy8gMTQuIExldCBpbnRlcm5hbFJlc3BvbnNlIGJlIHJlc3BvbnNlLCBpZiByZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3IsXG4gIC8vIGFuZCByZXNwb25zZVx1MjAxOXMgaW50ZXJuYWwgcmVzcG9uc2Ugb3RoZXJ3aXNlLlxuICBsZXQgaW50ZXJuYWxSZXNwb25zZSA9XG4gICAgcmVzcG9uc2Uuc3RhdHVzID09PSAwID8gcmVzcG9uc2UgOiByZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlXG5cbiAgLy8gMTUuIElmIGludGVybmFsUmVzcG9uc2VcdTIwMTlzIFVSTCBsaXN0IGlzIGVtcHR5LCB0aGVuIHNldCBpdCB0byBhIGNsb25lIG9mXG4gIC8vIHJlcXVlc3RcdTIwMTlzIFVSTCBsaXN0LlxuICBpZiAoaW50ZXJuYWxSZXNwb25zZS51cmxMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgIGludGVybmFsUmVzcG9uc2UudXJsTGlzdC5wdXNoKC4uLnJlcXVlc3QudXJsTGlzdClcbiAgfVxuXG4gIC8vIDE2LiBJZiByZXF1ZXN0XHUyMDE5cyB0aW1pbmcgYWxsb3cgZmFpbGVkIGZsYWcgaXMgdW5zZXQsIHRoZW4gc2V0XG4gIC8vIGludGVybmFsUmVzcG9uc2VcdTIwMTlzIHRpbWluZyBhbGxvdyBwYXNzZWQgZmxhZy5cbiAgaWYgKCFyZXF1ZXN0LnRpbWluZ0FsbG93RmFpbGVkKSB7XG4gICAgcmVzcG9uc2UudGltaW5nQWxsb3dQYXNzZWQgPSB0cnVlXG4gIH1cblxuICAvLyAxNy4gSWYgcmVzcG9uc2UgaXMgbm90IGEgbmV0d29yayBlcnJvciBhbmQgYW55IG9mIHRoZSBmb2xsb3dpbmcgcmV0dXJuc1xuICAvLyBibG9ja2VkXG4gIC8vIC0gc2hvdWxkIGludGVybmFsUmVzcG9uc2UgdG8gcmVxdWVzdCBiZSBibG9ja2VkIGFzIG1peGVkIGNvbnRlbnRcbiAgLy8gLSBzaG91bGQgaW50ZXJuYWxSZXNwb25zZSB0byByZXF1ZXN0IGJlIGJsb2NrZWQgYnkgQ29udGVudCBTZWN1cml0eSBQb2xpY3lcbiAgLy8gLSBzaG91bGQgaW50ZXJuYWxSZXNwb25zZSB0byByZXF1ZXN0IGJlIGJsb2NrZWQgZHVlIHRvIGl0cyBNSU1FIHR5cGVcbiAgLy8gLSBzaG91bGQgaW50ZXJuYWxSZXNwb25zZSB0byByZXF1ZXN0IGJlIGJsb2NrZWQgZHVlIHRvIG5vc25pZmZcbiAgLy8gVE9ET1xuXG4gIC8vIDE4LiBJZiByZXNwb25zZVx1MjAxOXMgdHlwZSBpcyBcIm9wYXF1ZVwiLCBpbnRlcm5hbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgMjA2LFxuICAvLyBpbnRlcm5hbFJlc3BvbnNlXHUyMDE5cyByYW5nZS1yZXF1ZXN0ZWQgZmxhZyBpcyBzZXQsIGFuZCByZXF1ZXN0XHUyMDE5cyBoZWFkZXJcbiAgLy8gbGlzdCBkb2VzIG5vdCBjb250YWluIGBSYW5nZWAsIHRoZW4gc2V0IHJlc3BvbnNlIGFuZCBpbnRlcm5hbFJlc3BvbnNlXG4gIC8vIHRvIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKFxuICAgIHJlc3BvbnNlLnR5cGUgPT09ICdvcGFxdWUnICYmXG4gICAgaW50ZXJuYWxSZXNwb25zZS5zdGF0dXMgPT09IDIwNiAmJlxuICAgIGludGVybmFsUmVzcG9uc2UucmFuZ2VSZXF1ZXN0ZWQgJiZcbiAgICAhcmVxdWVzdC5oZWFkZXJzLmNvbnRhaW5zKCdyYW5nZScpXG4gICkge1xuICAgIHJlc3BvbnNlID0gaW50ZXJuYWxSZXNwb25zZSA9IG1ha2VOZXR3b3JrRXJyb3IoKVxuICB9XG5cbiAgLy8gMTkuIElmIHJlc3BvbnNlIGlzIG5vdCBhIG5ldHdvcmsgZXJyb3IgYW5kIGVpdGhlciByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXNcbiAgLy8gYEhFQURgIG9yIGBDT05ORUNUYCwgb3IgaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIGEgbnVsbCBib2R5IHN0YXR1cyxcbiAgLy8gc2V0IGludGVybmFsUmVzcG9uc2VcdTIwMTlzIGJvZHkgdG8gbnVsbCBhbmQgZGlzcmVnYXJkIGFueSBlbnF1ZXVpbmcgdG93YXJkXG4gIC8vIGl0IChpZiBhbnkpLlxuICBpZiAoXG4gICAgcmVzcG9uc2Uuc3RhdHVzICE9PSAwICYmXG4gICAgKHJlcXVlc3QubWV0aG9kID09PSAnSEVBRCcgfHxcbiAgICAgIHJlcXVlc3QubWV0aG9kID09PSAnQ09OTkVDVCcgfHxcbiAgICAgIG51bGxCb2R5U3RhdHVzLmluY2x1ZGVzKGludGVybmFsUmVzcG9uc2Uuc3RhdHVzKSlcbiAgKSB7XG4gICAgaW50ZXJuYWxSZXNwb25zZS5ib2R5ID0gbnVsbFxuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuZHVtcCA9IHRydWVcbiAgfVxuXG4gIC8vIDIwLiBJZiByZXF1ZXN0XHUyMDE5cyBpbnRlZ3JpdHkgbWV0YWRhdGEgaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIHRoZW46XG4gIGlmIChyZXF1ZXN0LmludGVncml0eSkge1xuICAgIC8vIDEuIExldCBwcm9jZXNzQm9keUVycm9yIGJlIHRoaXMgc3RlcDogcnVuIGZldGNoIGZpbmFsZSBnaXZlbiBmZXRjaFBhcmFtc1xuICAgIC8vIGFuZCBhIG5ldHdvcmsgZXJyb3IuXG4gICAgY29uc3QgcHJvY2Vzc0JvZHlFcnJvciA9IChyZWFzb24pID0+XG4gICAgICBmZXRjaEZpbmFsZShmZXRjaFBhcmFtcywgbWFrZU5ldHdvcmtFcnJvcihyZWFzb24pKVxuXG4gICAgLy8gMi4gSWYgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJvcGFxdWVcIiwgb3IgcmVzcG9uc2VcdTIwMTlzIGJvZHkgaXMgbnVsbCxcbiAgICAvLyB0aGVuIHJ1biBwcm9jZXNzQm9keUVycm9yIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy5cbiAgICBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnb3BhcXVlJyB8fCByZXNwb25zZS5ib2R5ID09IG51bGwpIHtcbiAgICAgIHByb2Nlc3NCb2R5RXJyb3IocmVzcG9uc2UuZXJyb3IpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyAzLiBMZXQgcHJvY2Vzc0JvZHkgZ2l2ZW4gYnl0ZXMgYmUgdGhlc2Ugc3RlcHM6XG4gICAgY29uc3QgcHJvY2Vzc0JvZHkgPSAoYnl0ZXMpID0+IHtcbiAgICAgIC8vIDEuIElmIGJ5dGVzIGRvIG5vdCBtYXRjaCByZXF1ZXN0XHUyMDE5cyBpbnRlZ3JpdHkgbWV0YWRhdGEsXG4gICAgICAvLyB0aGVuIHJ1biBwcm9jZXNzQm9keUVycm9yIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4gW1NSSV1cbiAgICAgIGlmICghYnl0ZXNNYXRjaChieXRlcywgcmVxdWVzdC5pbnRlZ3JpdHkpKSB7XG4gICAgICAgIHByb2Nlc3NCb2R5RXJyb3IoJ2ludGVncml0eSBtaXNtYXRjaCcpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAyLiBTZXQgcmVzcG9uc2VcdTIwMTlzIGJvZHkgdG8gYnl0ZXMgYXMgYSBib2R5LlxuICAgICAgcmVzcG9uc2UuYm9keSA9IHNhZmVseUV4dHJhY3RCb2R5KGJ5dGVzKVswXVxuXG4gICAgICAvLyAzLiBSdW4gZmV0Y2ggZmluYWxlIGdpdmVuIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZS5cbiAgICAgIGZldGNoRmluYWxlKGZldGNoUGFyYW1zLCByZXNwb25zZSlcbiAgICB9XG5cbiAgICAvLyA0LiBGdWxseSByZWFkIHJlc3BvbnNlXHUyMDE5cyBib2R5IGdpdmVuIHByb2Nlc3NCb2R5IGFuZCBwcm9jZXNzQm9keUVycm9yLlxuICAgIGF3YWl0IGZ1bGx5UmVhZEJvZHkocmVzcG9uc2UuYm9keSwgcHJvY2Vzc0JvZHksIHByb2Nlc3NCb2R5RXJyb3IpXG4gIH0gZWxzZSB7XG4gICAgLy8gMjEuIE90aGVyd2lzZSwgcnVuIGZldGNoIGZpbmFsZSBnaXZlbiBmZXRjaFBhcmFtcyBhbmQgcmVzcG9uc2UuXG4gICAgZmV0Y2hGaW5hbGUoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXNjaGVtZS1mZXRjaFxuLy8gZ2l2ZW4gYSBmZXRjaCBwYXJhbXMgZmV0Y2hQYXJhbXNcbmZ1bmN0aW9uIHNjaGVtZUZldGNoIChmZXRjaFBhcmFtcykge1xuICAvLyBOb3RlOiBzaW5jZSB0aGUgY29ubmVjdGlvbiBpcyBkZXN0cm95ZWQgb24gcmVkaXJlY3QsIHdoaWNoIHNldHMgZmV0Y2hQYXJhbXMgdG8gYVxuICAvLyBjYW5jZWxsZWQgc3RhdGUsIHdlIGRvIG5vdCB3YW50IHRoaXMgY29uZGl0aW9uIHRvIHRyaWdnZXIgKnVubGVzcyogdGhlcmUgaGF2ZSBiZWVuXG4gIC8vIG5vIHJlZGlyZWN0cy4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xNzc2XG4gIC8vIDEuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlcnJvciBmb3IgZmV0Y2hQYXJhbXMuXG4gIGlmIChpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykgJiYgZmV0Y2hQYXJhbXMucmVxdWVzdC5yZWRpcmVjdENvdW50ID09PSAwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IoZmV0Y2hQYXJhbXMpKVxuICB9XG5cbiAgLy8gMi4gTGV0IHJlcXVlc3QgYmUgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3QuXG4gIGNvbnN0IHsgcmVxdWVzdCB9ID0gZmV0Y2hQYXJhbXNcblxuICBjb25zdCB7IHByb3RvY29sOiBzY2hlbWUgfSA9IHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpXG5cbiAgLy8gMy4gU3dpdGNoIG9uIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBzY2hlbWUgYW5kIHJ1biB0aGUgYXNzb2NpYXRlZCBzdGVwczpcbiAgc3dpdGNoIChzY2hlbWUpIHtcbiAgICBjYXNlICdhYm91dDonOiB7XG4gICAgICAvLyBJZiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgcGF0aCBpcyB0aGUgc3RyaW5nIFwiYmxhbmtcIiwgdGhlbiByZXR1cm4gYSBuZXcgcmVzcG9uc2VcbiAgICAgIC8vIHdob3NlIHN0YXR1cyBtZXNzYWdlIGlzIGBPS2AsIGhlYWRlciBsaXN0IGlzIFx1MDBBQiAoYENvbnRlbnQtVHlwZWAsIGB0ZXh0L2h0bWw7Y2hhcnNldD11dGYtOGApIFx1MDBCQixcbiAgICAgIC8vIGFuZCBib2R5IGlzIHRoZSBlbXB0eSBieXRlIHNlcXVlbmNlIGFzIGEgYm9keS5cblxuICAgICAgLy8gT3RoZXJ3aXNlLCByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdhYm91dCBzY2hlbWUgaXMgbm90IHN1cHBvcnRlZCcpKVxuICAgIH1cbiAgICBjYXNlICdibG9iOic6IHtcbiAgICAgIGlmICghcmVzb2x2ZU9iamVjdFVSTCkge1xuICAgICAgICByZXNvbHZlT2JqZWN0VVJMID0gcmVxdWlyZSgnYnVmZmVyJykucmVzb2x2ZU9iamVjdFVSTFxuICAgICAgfVxuXG4gICAgICAvLyAxLiBMZXQgYmxvYlVSTEVudHJ5IGJlIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBibG9iIFVSTCBlbnRyeS5cbiAgICAgIGNvbnN0IGJsb2JVUkxFbnRyeSA9IHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpXG5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0L2Jsb2IvN2IwZWJhY2NjNjJiNTY2YTE5NjUzOTZlNWJlN2JiMmJjMDZmODQxZi9GaWxlQVBJL3VybC9yZXNvdXJjZXMvZmV0Y2gtdGVzdHMuanMjTDUyLUw1NlxuICAgICAgLy8gQnVmZmVyLnJlc29sdmVPYmplY3RVUkwgZG9lcyBub3QgaWdub3JlIFVSTCBxdWVyaWVzLlxuICAgICAgaWYgKGJsb2JVUkxFbnRyeS5zZWFyY2gubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignTmV0d29ya0Vycm9yIHdoZW4gYXR0ZW1wdGluZyB0byBmZXRjaCByZXNvdXJjZS4nKSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmxvYlVSTEVudHJ5T2JqZWN0ID0gcmVzb2x2ZU9iamVjdFVSTChibG9iVVJMRW50cnkudG9TdHJpbmcoKSlcblxuICAgICAgLy8gMi4gSWYgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzIG5vdCBgR0VUYCwgYmxvYlVSTEVudHJ5IGlzIG51bGwsIG9yIGJsb2JVUkxFbnRyeVx1MjAxOXNcbiAgICAgIC8vICAgIG9iamVjdCBpcyBub3QgYSBCbG9iIG9iamVjdCwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgaWYgKHJlcXVlc3QubWV0aG9kICE9PSAnR0VUJyB8fCAhaXNCbG9iTGlrZShibG9iVVJMRW50cnlPYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignaW52YWxpZCBtZXRob2QnKSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gTGV0IGJvZHlXaXRoVHlwZSBiZSB0aGUgcmVzdWx0IG9mIHNhZmVseSBleHRyYWN0aW5nIGJsb2JVUkxFbnRyeVx1MjAxOXMgb2JqZWN0LlxuICAgICAgY29uc3QgYm9keVdpdGhUeXBlID0gc2FmZWx5RXh0cmFjdEJvZHkoYmxvYlVSTEVudHJ5T2JqZWN0KVxuXG4gICAgICAvLyA0LiBMZXQgYm9keSBiZSBib2R5V2l0aFR5cGVcdTIwMTlzIGJvZHkuXG4gICAgICBjb25zdCBib2R5ID0gYm9keVdpdGhUeXBlWzBdXG5cbiAgICAgIC8vIDUuIExldCBsZW5ndGggYmUgYm9keVx1MjAxOXMgbGVuZ3RoLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQuXG4gICAgICBjb25zdCBsZW5ndGggPSBpc29tb3JwaGljRW5jb2RlKGAke2JvZHkubGVuZ3RofWApXG5cbiAgICAgIC8vIDYuIExldCB0eXBlIGJlIGJvZHlXaXRoVHlwZVx1MjAxOXMgdHlwZSBpZiBpdCBpcyBub24tbnVsbDsgb3RoZXJ3aXNlIHRoZSBlbXB0eSBieXRlIHNlcXVlbmNlLlxuICAgICAgY29uc3QgdHlwZSA9IGJvZHlXaXRoVHlwZVsxXSA/PyAnJ1xuXG4gICAgICAvLyA3LiBSZXR1cm4gYSBuZXcgcmVzcG9uc2Ugd2hvc2Ugc3RhdHVzIG1lc3NhZ2UgaXMgYE9LYCwgaGVhZGVyIGxpc3QgaXNcbiAgICAgIC8vICAgIFx1MDBBQiAoYENvbnRlbnQtTGVuZ3RoYCwgbGVuZ3RoKSwgKGBDb250ZW50LVR5cGVgLCB0eXBlKSBcdTAwQkIsIGFuZCBib2R5IGlzIGJvZHkuXG4gICAgICBjb25zdCByZXNwb25zZSA9IG1ha2VSZXNwb25zZSh7XG4gICAgICAgIHN0YXR1c1RleHQ6ICdPSycsXG4gICAgICAgIGhlYWRlcnNMaXN0OiBbXG4gICAgICAgICAgWydjb250ZW50LWxlbmd0aCcsIHsgbmFtZTogJ0NvbnRlbnQtTGVuZ3RoJywgdmFsdWU6IGxlbmd0aCB9XSxcbiAgICAgICAgICBbJ2NvbnRlbnQtdHlwZScsIHsgbmFtZTogJ0NvbnRlbnQtVHlwZScsIHZhbHVlOiB0eXBlIH1dXG4gICAgICAgIF1cbiAgICAgIH0pXG5cbiAgICAgIHJlc3BvbnNlLmJvZHkgPSBib2R5XG5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpXG4gICAgfVxuICAgIGNhc2UgJ2RhdGE6Jzoge1xuICAgICAgLy8gMS4gTGV0IGRhdGFVUkxTdHJ1Y3QgYmUgdGhlIHJlc3VsdCBvZiBydW5uaW5nIHRoZVxuICAgICAgLy8gICAgZGF0YTogVVJMIHByb2Nlc3NvciBvbiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTC5cbiAgICAgIGNvbnN0IGN1cnJlbnRVUkwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuICAgICAgY29uc3QgZGF0YVVSTFN0cnVjdCA9IGRhdGFVUkxQcm9jZXNzb3IoY3VycmVudFVSTClcblxuICAgICAgLy8gMi4gSWYgZGF0YVVSTFN0cnVjdCBpcyBmYWlsdXJlLCB0aGVuIHJldHVybiBhXG4gICAgICAvLyAgICBuZXR3b3JrIGVycm9yLlxuICAgICAgaWYgKGRhdGFVUkxTdHJ1Y3QgPT09ICdmYWlsdXJlJykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ2ZhaWxlZCB0byBmZXRjaCB0aGUgZGF0YSBVUkwnKSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gTGV0IG1pbWVUeXBlIGJlIGRhdGFVUkxTdHJ1Y3RcdTIwMTlzIE1JTUUgdHlwZSwgc2VyaWFsaXplZC5cbiAgICAgIGNvbnN0IG1pbWVUeXBlID0gc2VyaWFsaXplQU1pbWVUeXBlKGRhdGFVUkxTdHJ1Y3QubWltZVR5cGUpXG5cbiAgICAgIC8vIDQuIFJldHVybiBhIHJlc3BvbnNlIHdob3NlIHN0YXR1cyBtZXNzYWdlIGlzIGBPS2AsXG4gICAgICAvLyAgICBoZWFkZXIgbGlzdCBpcyBcdTAwQUIgKGBDb250ZW50LVR5cGVgLCBtaW1lVHlwZSkgXHUwMEJCLFxuICAgICAgLy8gICAgYW5kIGJvZHkgaXMgZGF0YVVSTFN0cnVjdFx1MjAxOXMgYm9keSBhcyBhIGJvZHkuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VSZXNwb25zZSh7XG4gICAgICAgIHN0YXR1c1RleHQ6ICdPSycsXG4gICAgICAgIGhlYWRlcnNMaXN0OiBbXG4gICAgICAgICAgWydjb250ZW50LXR5cGUnLCB7IG5hbWU6ICdDb250ZW50LVR5cGUnLCB2YWx1ZTogbWltZVR5cGUgfV1cbiAgICAgICAgXSxcbiAgICAgICAgYm9keTogc2FmZWx5RXh0cmFjdEJvZHkoZGF0YVVSTFN0cnVjdC5ib2R5KVswXVxuICAgICAgfSkpXG4gICAgfVxuICAgIGNhc2UgJ2ZpbGU6Jzoge1xuICAgICAgLy8gRm9yIG5vdywgdW5mb3J0dW5hdGUgYXMgaXQgaXMsIGZpbGUgVVJMcyBhcmUgbGVmdCBhcyBhbiBleGVyY2lzZSBmb3IgdGhlIHJlYWRlci5cbiAgICAgIC8vIFdoZW4gaW4gZG91YnQsIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ25vdCBpbXBsZW1lbnRlZC4uLiB5ZXQuLi4nKSlcbiAgICB9XG4gICAgY2FzZSAnaHR0cDonOlxuICAgIGNhc2UgJ2h0dHBzOic6IHtcbiAgICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUCBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcy5cblxuICAgICAgcmV0dXJuIGh0dHBGZXRjaChmZXRjaFBhcmFtcylcbiAgICAgICAgLmNhdGNoKChlcnIpID0+IG1ha2VOZXR3b3JrRXJyb3IoZXJyKSlcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCd1bmtub3duIHNjaGVtZScpKVxuICAgIH1cbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmluYWxpemUtcmVzcG9uc2VcbmZ1bmN0aW9uIGZpbmFsaXplUmVzcG9uc2UgKGZldGNoUGFyYW1zLCByZXNwb25zZSkge1xuICAvLyAxLiBTZXQgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGRvbmUgZmxhZy5cbiAgZmV0Y2hQYXJhbXMucmVxdWVzdC5kb25lID0gdHJ1ZVxuXG4gIC8vIDIsIElmIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlc3BvbnNlIGRvbmUgaXMgbm90IG51bGwsIHRoZW4gcXVldWUgYSBmZXRjaFxuICAvLyB0YXNrIHRvIHJ1biBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXNwb25zZSBkb25lIGdpdmVuIHJlc3BvbnNlLCB3aXRoXG4gIC8vIGZldGNoUGFyYW1zXHUyMDE5cyB0YXNrIGRlc3RpbmF0aW9uLlxuICBpZiAoZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlRG9uZSAhPSBudWxsKSB7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlRG9uZShyZXNwb25zZSkpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZldGNoLWZpbmFsZVxuZnVuY3Rpb24gZmV0Y2hGaW5hbGUgKGZldGNoUGFyYW1zLCByZXNwb25zZSkge1xuICAvLyAxLiBJZiByZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3IsIHRoZW46XG4gIGlmIChyZXNwb25zZS50eXBlID09PSAnZXJyb3InKSB7XG4gICAgLy8gMS4gU2V0IHJlc3BvbnNlXHUyMDE5cyBVUkwgbGlzdCB0byBcdTAwQUIgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIFVSTCBsaXN0WzBdIFx1MDBCQi5cbiAgICByZXNwb25zZS51cmxMaXN0ID0gW2ZldGNoUGFyYW1zLnJlcXVlc3QudXJsTGlzdFswXV1cblxuICAgIC8vIDIuIFNldCByZXNwb25zZVx1MjAxOXMgdGltaW5nIGluZm8gdG8gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBvcGFxdWUgdGltaW5nXG4gICAgLy8gaW5mbyBmb3IgZmV0Y2hQYXJhbXNcdTIwMTlzIHRpbWluZyBpbmZvLlxuICAgIHJlc3BvbnNlLnRpbWluZ0luZm8gPSBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvKHtcbiAgICAgIHN0YXJ0VGltZTogZmV0Y2hQYXJhbXMudGltaW5nSW5mby5zdGFydFRpbWVcbiAgICB9KVxuICB9XG5cbiAgLy8gMi4gTGV0IHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSBiZSB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuICBjb25zdCBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgPSAoKSA9PiB7XG4gICAgLy8gMS4gU2V0IGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBkb25lIGZsYWcuXG4gICAgZmV0Y2hQYXJhbXMucmVxdWVzdC5kb25lID0gdHJ1ZVxuXG4gICAgLy8gSWYgZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVzcG9uc2UgZW5kLW9mLWJvZHkgaXMgbm90IG51bGwsXG4gICAgLy8gdGhlbiBxdWV1ZSBhIGZldGNoIHRhc2sgdG8gcnVuIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlc3BvbnNlXG4gICAgLy8gZW5kLW9mLWJvZHkgZ2l2ZW4gcmVzcG9uc2Ugd2l0aCBmZXRjaFBhcmFtc1x1MjAxOXMgdGFzayBkZXN0aW5hdGlvbi5cbiAgICBpZiAoZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5ICE9IG51bGwpIHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUVuZE9mQm9keShyZXNwb25zZSkpXG4gICAgfVxuICB9XG5cbiAgLy8gMy4gSWYgZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVzcG9uc2UgaXMgbm9uLW51bGwsIHRoZW4gcXVldWUgYSBmZXRjaCB0YXNrXG4gIC8vIHRvIHJ1biBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXNwb25zZSBnaXZlbiByZXNwb25zZSwgd2l0aCBmZXRjaFBhcmFtc1x1MjAxOXNcbiAgLy8gdGFzayBkZXN0aW5hdGlvbi5cbiAgaWYgKGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZSAhPSBudWxsKSB7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlKHJlc3BvbnNlKSlcbiAgfVxuXG4gIC8vIDQuIElmIHJlc3BvbnNlXHUyMDE5cyBib2R5IGlzIG51bGwsIHRoZW4gcnVuIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keS5cbiAgaWYgKHJlc3BvbnNlLmJvZHkgPT0gbnVsbCkge1xuICAgIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSgpXG4gIH0gZWxzZSB7XG4gIC8vIDUuIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIExldCB0cmFuc2Zvcm1TdHJlYW0gYmUgYSBuZXcgYSBUcmFuc2Zvcm1TdHJlYW0uXG5cbiAgICAvLyAyLiBMZXQgaWRlbnRpdHlUcmFuc2Zvcm1BbGdvcml0aG0gYmUgYW4gYWxnb3JpdGhtIHdoaWNoLCBnaXZlbiBjaHVuayxcbiAgICAvLyBlbnF1ZXVlcyBjaHVuayBpbiB0cmFuc2Zvcm1TdHJlYW0uXG4gICAgY29uc3QgaWRlbnRpdHlUcmFuc2Zvcm1BbGdvcml0aG0gPSAoY2h1bmssIGNvbnRyb2xsZXIpID0+IHtcbiAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShjaHVuaylcbiAgICB9XG5cbiAgICAvLyAzLiBTZXQgdXAgdHJhbnNmb3JtU3RyZWFtIHdpdGggdHJhbnNmb3JtQWxnb3JpdGhtIHNldCB0byBpZGVudGl0eVRyYW5zZm9ybUFsZ29yaXRobVxuICAgIC8vIGFuZCBmbHVzaEFsZ29yaXRobSBzZXQgdG8gcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LlxuICAgIGNvbnN0IHRyYW5zZm9ybVN0cmVhbSA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe1xuICAgICAgc3RhcnQgKCkge30sXG4gICAgICB0cmFuc2Zvcm06IGlkZW50aXR5VHJhbnNmb3JtQWxnb3JpdGhtLFxuICAgICAgZmx1c2g6IHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keVxuICAgIH0sIHtcbiAgICAgIHNpemUgKCkge1xuICAgICAgICByZXR1cm4gMVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIHNpemUgKCkge1xuICAgICAgICByZXR1cm4gMVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyA0LiBTZXQgcmVzcG9uc2VcdTIwMTlzIGJvZHkgdG8gdGhlIHJlc3VsdCBvZiBwaXBpbmcgcmVzcG9uc2VcdTIwMTlzIGJvZHkgdGhyb3VnaCB0cmFuc2Zvcm1TdHJlYW0uXG4gICAgcmVzcG9uc2UuYm9keSA9IHsgc3RyZWFtOiByZXNwb25zZS5ib2R5LnN0cmVhbS5waXBlVGhyb3VnaCh0cmFuc2Zvcm1TdHJlYW0pIH1cbiAgfVxuXG4gIC8vIDYuIElmIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlc3BvbnNlIGNvbnN1bWUgYm9keSBpcyBub24tbnVsbCwgdGhlbjpcbiAgaWYgKGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5ICE9IG51bGwpIHtcbiAgICAvLyAxLiBMZXQgcHJvY2Vzc0JvZHkgZ2l2ZW4gbnVsbE9yQnl0ZXMgYmUgdGhpcyBzdGVwOiBydW4gZmV0Y2hQYXJhbXNcdTIwMTlzXG4gICAgLy8gcHJvY2VzcyByZXNwb25zZSBjb25zdW1lIGJvZHkgZ2l2ZW4gcmVzcG9uc2UgYW5kIG51bGxPckJ5dGVzLlxuICAgIGNvbnN0IHByb2Nlc3NCb2R5ID0gKG51bGxPckJ5dGVzKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keShyZXNwb25zZSwgbnVsbE9yQnl0ZXMpXG5cbiAgICAvLyAyLiBMZXQgcHJvY2Vzc0JvZHlFcnJvciBiZSB0aGlzIHN0ZXA6IHJ1biBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2Vzc1xuICAgIC8vIHJlc3BvbnNlIGNvbnN1bWUgYm9keSBnaXZlbiByZXNwb25zZSBhbmQgZmFpbHVyZS5cbiAgICBjb25zdCBwcm9jZXNzQm9keUVycm9yID0gKGZhaWx1cmUpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5KHJlc3BvbnNlLCBmYWlsdXJlKVxuXG4gICAgLy8gMy4gSWYgcmVzcG9uc2VcdTIwMTlzIGJvZHkgaXMgbnVsbCwgdGhlbiBxdWV1ZSBhIGZldGNoIHRhc2sgdG8gcnVuIHByb2Nlc3NCb2R5XG4gICAgLy8gZ2l2ZW4gbnVsbCwgd2l0aCBmZXRjaFBhcmFtc1x1MjAxOXMgdGFzayBkZXN0aW5hdGlvbi5cbiAgICBpZiAocmVzcG9uc2UuYm9keSA9PSBudWxsKSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBwcm9jZXNzQm9keShudWxsKSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBmdWxseSByZWFkIHJlc3BvbnNlXHUyMDE5cyBib2R5IGdpdmVuIHByb2Nlc3NCb2R5LCBwcm9jZXNzQm9keUVycm9yLFxuICAgICAgLy8gYW5kIGZldGNoUGFyYW1zXHUyMDE5cyB0YXNrIGRlc3RpbmF0aW9uLlxuICAgICAgcmV0dXJuIGZ1bGx5UmVhZEJvZHkocmVzcG9uc2UuYm9keSwgcHJvY2Vzc0JvZHksIHByb2Nlc3NCb2R5RXJyb3IpXG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLWZldGNoXG5hc3luYyBmdW5jdGlvbiBodHRwRmV0Y2ggKGZldGNoUGFyYW1zKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gMy4gTGV0IGFjdHVhbFJlc3BvbnNlIGJlIG51bGwuXG4gIGxldCBhY3R1YWxSZXNwb25zZSA9IG51bGxcblxuICAvLyA0LiBMZXQgdGltaW5nSW5mbyBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgdGltaW5nIGluZm8uXG4gIGNvbnN0IHRpbWluZ0luZm8gPSBmZXRjaFBhcmFtcy50aW1pbmdJbmZvXG5cbiAgLy8gNS4gSWYgcmVxdWVzdFx1MjAxOXMgc2VydmljZS13b3JrZXJzIG1vZGUgaXMgXCJhbGxcIiwgdGhlbjpcbiAgaWYgKHJlcXVlc3Quc2VydmljZVdvcmtlcnMgPT09ICdhbGwnKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gNi4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbjpcbiAgaWYgKHJlc3BvbnNlID09PSBudWxsKSB7XG4gICAgLy8gMS4gSWYgbWFrZUNPUlNQcmVmbGlnaHQgaXMgdHJ1ZSBhbmQgb25lIG9mIHRoZXNlIGNvbmRpdGlvbnMgaXMgdHJ1ZTpcbiAgICAvLyBUT0RPXG5cbiAgICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBtb2RlIGlzIFwiZm9sbG93XCIsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzXG4gICAgLy8gc2VydmljZS13b3JrZXJzIG1vZGUgdG8gXCJub25lXCIuXG4gICAgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdmb2xsb3cnKSB7XG4gICAgICByZXF1ZXN0LnNlcnZpY2VXb3JrZXJzID0gJ25vbmUnXG4gICAgfVxuXG4gICAgLy8gMy4gU2V0IHJlc3BvbnNlIGFuZCBhY3R1YWxSZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgICAvLyBIVFRQLW5ldHdvcmstb3ItY2FjaGUgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgYWN0dWFsUmVzcG9uc2UgPSByZXNwb25zZSA9IGF3YWl0IGh0dHBOZXR3b3JrT3JDYWNoZUZldGNoKGZldGNoUGFyYW1zKVxuXG4gICAgLy8gNC4gSWYgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJjb3JzXCIgYW5kIGEgQ09SUyBjaGVja1xuICAgIC8vIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSByZXR1cm5zIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICBpZiAoXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJyAmJlxuICAgICAgY29yc0NoZWNrKHJlcXVlc3QsIHJlc3BvbnNlKSA9PT0gJ2ZhaWx1cmUnXG4gICAgKSB7XG4gICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcignY29ycyBmYWlsdXJlJylcbiAgICB9XG5cbiAgICAvLyA1LiBJZiB0aGUgVEFPIGNoZWNrIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSByZXR1cm5zIGZhaWx1cmUsIHRoZW4gc2V0XG4gICAgLy8gcmVxdWVzdFx1MjAxOXMgdGltaW5nIGFsbG93IGZhaWxlZCBmbGFnLlxuICAgIGlmIChUQU9DaGVjayhyZXF1ZXN0LCByZXNwb25zZSkgPT09ICdmYWlsdXJlJykge1xuICAgICAgcmVxdWVzdC50aW1pbmdBbGxvd0ZhaWxlZCA9IHRydWVcbiAgICB9XG4gIH1cblxuICAvLyA3LiBJZiBlaXRoZXIgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgb3IgcmVzcG9uc2VcdTIwMTlzIHR5cGVcbiAgLy8gaXMgXCJvcGFxdWVcIiwgYW5kIHRoZSBjcm9zcy1vcmlnaW4gcmVzb3VyY2UgcG9saWN5IGNoZWNrIHdpdGhcbiAgLy8gcmVxdWVzdFx1MjAxOXMgb3JpZ2luLCByZXF1ZXN0XHUyMDE5cyBjbGllbnQsIHJlcXVlc3RcdTIwMTlzIGRlc3RpbmF0aW9uLFxuICAvLyBhbmQgYWN0dWFsUmVzcG9uc2UgcmV0dXJucyBibG9ja2VkLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChcbiAgICAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnb3BhcXVlJyB8fCByZXNwb25zZS50eXBlID09PSAnb3BhcXVlJykgJiZcbiAgICBjcm9zc09yaWdpblJlc291cmNlUG9saWN5Q2hlY2soXG4gICAgICByZXF1ZXN0Lm9yaWdpbixcbiAgICAgIHJlcXVlc3QuY2xpZW50LFxuICAgICAgcmVxdWVzdC5kZXN0aW5hdGlvbixcbiAgICAgIGFjdHVhbFJlc3BvbnNlXG4gICAgKSA9PT0gJ2Jsb2NrZWQnXG4gICkge1xuICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdibG9ja2VkJylcbiAgfVxuXG4gIC8vIDguIElmIGFjdHVhbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgYSByZWRpcmVjdCBzdGF0dXMsIHRoZW46XG4gIGlmIChyZWRpcmVjdFN0YXR1c1NldC5oYXMoYWN0dWFsUmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIC8vIDEuIElmIGFjdHVhbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgbm90IDMwMywgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBub3QgbnVsbCxcbiAgICAvLyBhbmQgdGhlIGNvbm5lY3Rpb24gdXNlcyBIVFRQLzIsIHRoZW4gdXNlciBhZ2VudHMgbWF5LCBhbmQgYXJlIGV2ZW5cbiAgICAvLyBlbmNvdXJhZ2VkIHRvLCB0cmFuc21pdCBhbiBSU1RfU1RSRUFNIGZyYW1lLlxuICAgIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mZXRjaC9pc3N1ZXMvMTI4OFxuICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ICE9PSAnbWFudWFsJykge1xuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3koKVxuICAgIH1cblxuICAgIC8vIDIuIFN3aXRjaCBvbiByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBtb2RlOlxuICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ID09PSAnZXJyb3InKSB7XG4gICAgICAvLyBTZXQgcmVzcG9uc2UgdG8gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgcmVzcG9uc2UgPSBtYWtlTmV0d29ya0Vycm9yKCd1bmV4cGVjdGVkIHJlZGlyZWN0JylcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdtYW51YWwnKSB7XG4gICAgICAvLyBTZXQgcmVzcG9uc2UgdG8gYW4gb3BhcXVlLXJlZGlyZWN0IGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIGludGVybmFsXG4gICAgICAvLyByZXNwb25zZSBpcyBhY3R1YWxSZXNwb25zZS5cbiAgICAgIC8vIE5PVEUoc3BlYyk6IE9uIHRoZSB3ZWIgdGhpcyB3b3VsZCByZXR1cm4gYW4gYG9wYXF1ZXJlZGlyZWN0YCByZXNwb25zZSxcbiAgICAgIC8vIGJ1dCB0aGF0IGRvZXNuJ3QgbWFrZSBzZW5zZSBzZXJ2ZXIgc2lkZS5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTE5My5cbiAgICAgIHJlc3BvbnNlID0gYWN0dWFsUmVzcG9uc2VcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdmb2xsb3cnKSB7XG4gICAgICAvLyBTZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAtcmVkaXJlY3QgZmV0Y2ggZ2l2ZW5cbiAgICAgIC8vIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZS5cbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgaHR0cFJlZGlyZWN0RmV0Y2goZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQoZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgLy8gOS4gU2V0IHJlc3BvbnNlXHUyMDE5cyB0aW1pbmcgaW5mbyB0byB0aW1pbmdJbmZvLlxuICByZXNwb25zZS50aW1pbmdJbmZvID0gdGltaW5nSW5mb1xuXG4gIC8vIDEwLiBSZXR1cm4gcmVzcG9uc2UuXG4gIHJldHVybiByZXNwb25zZVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1yZWRpcmVjdC1mZXRjaFxuZnVuY3Rpb24gaHR0cFJlZGlyZWN0RmV0Y2ggKGZldGNoUGFyYW1zLCByZXNwb25zZSkge1xuICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IGZldGNoUGFyYW1zLnJlcXVlc3RcblxuICAvLyAyLiBMZXQgYWN0dWFsUmVzcG9uc2UgYmUgcmVzcG9uc2UsIGlmIHJlc3BvbnNlIGlzIG5vdCBhIGZpbHRlcmVkIHJlc3BvbnNlLFxuICAvLyBhbmQgcmVzcG9uc2VcdTIwMTlzIGludGVybmFsIHJlc3BvbnNlIG90aGVyd2lzZS5cbiAgY29uc3QgYWN0dWFsUmVzcG9uc2UgPSByZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlXG4gICAgPyByZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlXG4gICAgOiByZXNwb25zZVxuXG4gIC8vIDMuIExldCBsb2NhdGlvblVSTCBiZSBhY3R1YWxSZXNwb25zZVx1MjAxOXMgbG9jYXRpb24gVVJMIGdpdmVuIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnRcbiAgLy8gVVJMXHUyMDE5cyBmcmFnbWVudC5cbiAgbGV0IGxvY2F0aW9uVVJMXG5cbiAgdHJ5IHtcbiAgICBsb2NhdGlvblVSTCA9IHJlc3BvbnNlTG9jYXRpb25VUkwoXG4gICAgICBhY3R1YWxSZXNwb25zZSxcbiAgICAgIHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpLmhhc2hcbiAgICApXG5cbiAgICAvLyA0LiBJZiBsb2NhdGlvblVSTCBpcyBudWxsLCB0aGVuIHJldHVybiByZXNwb25zZS5cbiAgICBpZiAobG9jYXRpb25VUkwgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyA1LiBJZiBsb2NhdGlvblVSTCBpcyBmYWlsdXJlLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKGVycikpXG4gIH1cblxuICAvLyA2LiBJZiBsb2NhdGlvblVSTFx1MjAxOXMgc2NoZW1lIGlzIG5vdCBhbiBIVFRQKFMpIHNjaGVtZSwgdGhlbiByZXR1cm4gYSBuZXR3b3JrXG4gIC8vIGVycm9yLlxuICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKGxvY2F0aW9uVVJMKSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignVVJMIHNjaGVtZSBtdXN0IGJlIGEgSFRUUChTKSBzY2hlbWUnKSlcbiAgfVxuXG4gIC8vIDcuIElmIHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IGNvdW50IGlzIDIwLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChyZXF1ZXN0LnJlZGlyZWN0Q291bnQgPT09IDIwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdyZWRpcmVjdCBjb3VudCBleGNlZWRlZCcpKVxuICB9XG5cbiAgLy8gOC4gSW5jcmVhc2UgcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgY291bnQgYnkgMS5cbiAgcmVxdWVzdC5yZWRpcmVjdENvdW50ICs9IDFcblxuICAvLyA5LiBJZiByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzIFwiY29yc1wiLCBsb2NhdGlvblVSTCBpbmNsdWRlcyBjcmVkZW50aWFscywgYW5kXG4gIC8vIHJlcXVlc3RcdTIwMTlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCBsb2NhdGlvblVSTFx1MjAxOXMgb3JpZ2luLCB0aGVuIHJldHVyblxuICAvLyAgYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgcmVxdWVzdC5tb2RlID09PSAnY29ycycgJiZcbiAgICAobG9jYXRpb25VUkwudXNlcm5hbWUgfHwgbG9jYXRpb25VUkwucGFzc3dvcmQpICYmXG4gICAgIXNhbWVPcmlnaW4ocmVxdWVzdCwgbG9jYXRpb25VUkwpXG4gICkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignY3Jvc3Mgb3JpZ2luIG5vdCBhbGxvd2VkIGZvciByZXF1ZXN0IG1vZGUgXCJjb3JzXCInKSlcbiAgfVxuXG4gIC8vIDEwLiBJZiByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBcImNvcnNcIiBhbmQgbG9jYXRpb25VUkwgaW5jbHVkZXNcbiAgLy8gY3JlZGVudGlhbHMsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKFxuICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnICYmXG4gICAgKGxvY2F0aW9uVVJMLnVzZXJuYW1lIHx8IGxvY2F0aW9uVVJMLnBhc3N3b3JkKVxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoXG4gICAgICAnVVJMIGNhbm5vdCBjb250YWluIGNyZWRlbnRpYWxzIGZvciByZXF1ZXN0IG1vZGUgXCJjb3JzXCInXG4gICAgKSlcbiAgfVxuXG4gIC8vIDExLiBJZiBhY3R1YWxSZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIG5vdCAzMDMsIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm9uLW51bGwsXG4gIC8vIGFuZCByZXF1ZXN0XHUyMDE5cyBib2R5XHUyMDE5cyBzb3VyY2UgaXMgbnVsbCwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgYWN0dWFsUmVzcG9uc2Uuc3RhdHVzICE9PSAzMDMgJiZcbiAgICByZXF1ZXN0LmJvZHkgIT0gbnVsbCAmJlxuICAgIHJlcXVlc3QuYm9keS5zb3VyY2UgPT0gbnVsbFxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoKSlcbiAgfVxuXG4gIC8vIDEyLiBJZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlXG4gIC8vIC0gYWN0dWFsUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyAzMDEgb3IgMzAyIGFuZCByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgYFBPU1RgXG4gIC8vIC0gYWN0dWFsUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyAzMDMgYW5kIHJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpcyBub3QgYEdFVGAgb3IgYEhFQURgXG4gIGlmIChcbiAgICAoWzMwMSwgMzAyXS5pbmNsdWRlcyhhY3R1YWxSZXNwb25zZS5zdGF0dXMpICYmIHJlcXVlc3QubWV0aG9kID09PSAnUE9TVCcpIHx8XG4gICAgKGFjdHVhbFJlc3BvbnNlLnN0YXR1cyA9PT0gMzAzICYmXG4gICAgICAhR0VUX09SX0hFQUQuaW5jbHVkZXMocmVxdWVzdC5tZXRob2QpKVxuICApIHtcbiAgICAvLyB0aGVuOlxuICAgIC8vIDEuIFNldCByZXF1ZXN0XHUyMDE5cyBtZXRob2QgdG8gYEdFVGAgYW5kIHJlcXVlc3RcdTIwMTlzIGJvZHkgdG8gbnVsbC5cbiAgICByZXF1ZXN0Lm1ldGhvZCA9ICdHRVQnXG4gICAgcmVxdWVzdC5ib2R5ID0gbnVsbFxuXG4gICAgLy8gMi4gRm9yIGVhY2ggaGVhZGVyTmFtZSBvZiByZXF1ZXN0LWJvZHktaGVhZGVyIG5hbWUsIGRlbGV0ZSBoZWFkZXJOYW1lIGZyb21cbiAgICAvLyByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICBmb3IgKGNvbnN0IGhlYWRlck5hbWUgb2YgcmVxdWVzdEJvZHlIZWFkZXIpIHtcbiAgICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKGhlYWRlck5hbWUpXG4gICAgfVxuICB9XG5cbiAgLy8gMTMuIElmIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBvcmlnaW4gaXMgbm90IHNhbWUgb3JpZ2luIHdpdGggbG9jYXRpb25VUkxcdTIwMTlzXG4gIC8vICAgICBvcmlnaW4sIHRoZW4gZm9yIGVhY2ggaGVhZGVyTmFtZSBvZiBDT1JTIG5vbi13aWxkY2FyZCByZXF1ZXN0LWhlYWRlciBuYW1lLFxuICAvLyAgICAgZGVsZXRlIGhlYWRlck5hbWUgZnJvbSByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgaWYgKCFzYW1lT3JpZ2luKHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpLCBsb2NhdGlvblVSTCkpIHtcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29ycy1ub24td2lsZGNhcmQtcmVxdWVzdC1oZWFkZXItbmFtZVxuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKCdhdXRob3JpemF0aW9uJylcblxuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNhdXRoZW50aWNhdGlvbi1lbnRyaWVzXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5kZWxldGUoJ3Byb3h5LWF1dGhvcml6YXRpb24nLCB0cnVlKVxuXG4gICAgLy8gXCJDb29raWVcIiBhbmQgXCJIb3N0XCIgYXJlIGZvcmJpZGRlbiByZXF1ZXN0LWhlYWRlcnMsIHdoaWNoIHVuZGljaSBkb2Vzbid0IGltcGxlbWVudC5cbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgnY29va2llJylcbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgnaG9zdCcpXG4gIH1cblxuICAvLyAxNC4gSWYgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBub24tbnVsbCwgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgYm9keSB0byB0aGUgZmlyc3QgcmV0dXJuXG4gIC8vIHZhbHVlIG9mIHNhZmVseSBleHRyYWN0aW5nIHJlcXVlc3RcdTIwMTlzIGJvZHlcdTIwMTlzIHNvdXJjZS5cbiAgaWYgKHJlcXVlc3QuYm9keSAhPSBudWxsKSB7XG4gICAgYXNzZXJ0KHJlcXVlc3QuYm9keS5zb3VyY2UgIT0gbnVsbClcbiAgICByZXF1ZXN0LmJvZHkgPSBzYWZlbHlFeHRyYWN0Qm9keShyZXF1ZXN0LmJvZHkuc291cmNlKVswXVxuICB9XG5cbiAgLy8gMTUuIExldCB0aW1pbmdJbmZvIGJlIGZldGNoUGFyYW1zXHUyMDE5cyB0aW1pbmcgaW5mby5cbiAgY29uc3QgdGltaW5nSW5mbyA9IGZldGNoUGFyYW1zLnRpbWluZ0luZm9cblxuICAvLyAxNi4gU2V0IHRpbWluZ0luZm9cdTIwMTlzIHJlZGlyZWN0IGVuZCB0aW1lIGFuZCBwb3N0LXJlZGlyZWN0IHN0YXJ0IHRpbWUgdG8gdGhlXG4gIC8vIGNvYXJzZW5lZCBzaGFyZWQgY3VycmVudCB0aW1lIGdpdmVuIGZldGNoUGFyYW1zXHUyMDE5cyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWRcbiAgLy8gY2FwYWJpbGl0eS5cbiAgdGltaW5nSW5mby5yZWRpcmVjdEVuZFRpbWUgPSB0aW1pbmdJbmZvLnBvc3RSZWRpcmVjdFN0YXJ0VGltZSA9XG4gICAgY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUoZmV0Y2hQYXJhbXMuY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkpXG5cbiAgLy8gMTcuIElmIHRpbWluZ0luZm9cdTIwMTlzIHJlZGlyZWN0IHN0YXJ0IHRpbWUgaXMgMCwgdGhlbiBzZXQgdGltaW5nSW5mb1x1MjAxOXNcbiAgLy8gIHJlZGlyZWN0IHN0YXJ0IHRpbWUgdG8gdGltaW5nSW5mb1x1MjAxOXMgc3RhcnQgdGltZS5cbiAgaWYgKHRpbWluZ0luZm8ucmVkaXJlY3RTdGFydFRpbWUgPT09IDApIHtcbiAgICB0aW1pbmdJbmZvLnJlZGlyZWN0U3RhcnRUaW1lID0gdGltaW5nSW5mby5zdGFydFRpbWVcbiAgfVxuXG4gIC8vIDE4LiBBcHBlbmQgbG9jYXRpb25VUkwgdG8gcmVxdWVzdFx1MjAxOXMgVVJMIGxpc3QuXG4gIHJlcXVlc3QudXJsTGlzdC5wdXNoKGxvY2F0aW9uVVJMKVxuXG4gIC8vIDE5LiBJbnZva2Ugc2V0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeSBvbiByZWRpcmVjdCBvbiByZXF1ZXN0IGFuZFxuICAvLyBhY3R1YWxSZXNwb25zZS5cbiAgc2V0UmVxdWVzdFJlZmVycmVyUG9saWN5T25SZWRpcmVjdChyZXF1ZXN0LCBhY3R1YWxSZXNwb25zZSlcblxuICAvLyAyMC4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBtYWluIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zIGFuZCB0cnVlLlxuICByZXR1cm4gbWFpbkZldGNoKGZldGNoUGFyYW1zLCB0cnVlKVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1uZXR3b3JrLW9yLWNhY2hlLWZldGNoXG5hc3luYyBmdW5jdGlvbiBodHRwTmV0d29ya09yQ2FjaGVGZXRjaCAoXG4gIGZldGNoUGFyYW1zLFxuICBpc0F1dGhlbnRpY2F0aW9uRmV0Y2ggPSBmYWxzZSxcbiAgaXNOZXdDb25uZWN0aW9uRmV0Y2ggPSBmYWxzZVxuKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCBodHRwRmV0Y2hQYXJhbXMgYmUgbnVsbC5cbiAgbGV0IGh0dHBGZXRjaFBhcmFtcyA9IG51bGxcblxuICAvLyAzLiBMZXQgaHR0cFJlcXVlc3QgYmUgbnVsbC5cbiAgbGV0IGh0dHBSZXF1ZXN0ID0gbnVsbFxuXG4gIC8vIDQuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gNS4gTGV0IHN0b3JlZFJlc3BvbnNlIGJlIG51bGwuXG4gIC8vIFRPRE86IGNhY2hlXG5cbiAgLy8gNi4gTGV0IGh0dHBDYWNoZSBiZSBudWxsLlxuICBjb25zdCBodHRwQ2FjaGUgPSBudWxsXG5cbiAgLy8gNy4gTGV0IHRoZSByZXZhbGlkYXRpbmdGbGFnIGJlIHVuc2V0LlxuICBjb25zdCByZXZhbGlkYXRpbmdGbGFnID0gZmFsc2VcblxuICAvLyA4LiBSdW4gdGhlc2Ugc3RlcHMsIGJ1dCBhYm9ydCB3aGVuIHRoZSBvbmdvaW5nIGZldGNoIGlzIHRlcm1pbmF0ZWQ6XG5cbiAgLy8gICAgMS4gSWYgcmVxdWVzdFx1MjAxOXMgd2luZG93IGlzIFwibm8td2luZG93XCIgYW5kIHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IG1vZGUgaXNcbiAgLy8gICAgXCJlcnJvclwiLCB0aGVuIHNldCBodHRwRmV0Y2hQYXJhbXMgdG8gZmV0Y2hQYXJhbXMgYW5kIGh0dHBSZXF1ZXN0IHRvXG4gIC8vICAgIHJlcXVlc3QuXG4gIGlmIChyZXF1ZXN0LndpbmRvdyA9PT0gJ25vLXdpbmRvdycgJiYgcmVxdWVzdC5yZWRpcmVjdCA9PT0gJ2Vycm9yJykge1xuICAgIGh0dHBGZXRjaFBhcmFtcyA9IGZldGNoUGFyYW1zXG4gICAgaHR0cFJlcXVlc3QgPSByZXF1ZXN0XG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gU2V0IGh0dHBSZXF1ZXN0IHRvIGEgY2xvbmUgb2YgcmVxdWVzdC5cbiAgICBodHRwUmVxdWVzdCA9IG1ha2VSZXF1ZXN0KHJlcXVlc3QpXG5cbiAgICAvLyAyLiBTZXQgaHR0cEZldGNoUGFyYW1zIHRvIGEgY29weSBvZiBmZXRjaFBhcmFtcy5cbiAgICBodHRwRmV0Y2hQYXJhbXMgPSB7IC4uLmZldGNoUGFyYW1zIH1cblxuICAgIC8vIDMuIFNldCBodHRwRmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3QgdG8gaHR0cFJlcXVlc3QuXG4gICAgaHR0cEZldGNoUGFyYW1zLnJlcXVlc3QgPSBodHRwUmVxdWVzdFxuICB9XG5cbiAgLy8gICAgMy4gTGV0IGluY2x1ZGVDcmVkZW50aWFscyBiZSB0cnVlIGlmIG9uZSBvZlxuICBjb25zdCBpbmNsdWRlQ3JlZGVudGlhbHMgPVxuICAgIHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdpbmNsdWRlJyB8fFxuICAgIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnc2FtZS1vcmlnaW4nICYmXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdiYXNpYycpXG5cbiAgLy8gICAgNC4gTGV0IGNvbnRlbnRMZW5ndGggYmUgaHR0cFJlcXVlc3RcdTIwMTlzIGJvZHlcdTIwMTlzIGxlbmd0aCwgaWYgaHR0cFJlcXVlc3RcdTIwMTlzXG4gIC8vICAgIGJvZHkgaXMgbm9uLW51bGw7IG90aGVyd2lzZSBudWxsLlxuICBjb25zdCBjb250ZW50TGVuZ3RoID0gaHR0cFJlcXVlc3QuYm9keSA/IGh0dHBSZXF1ZXN0LmJvZHkubGVuZ3RoIDogbnVsbFxuXG4gIC8vICAgIDUuIExldCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgYmUgbnVsbC5cbiAgbGV0IGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSA9IG51bGxcblxuICAvLyAgICA2LiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgYm9keSBpcyBudWxsIGFuZCBodHRwUmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzIGBQT1NUYCBvclxuICAvLyAgICBgUFVUYCwgdGhlbiBzZXQgY29udGVudExlbmd0aEhlYWRlclZhbHVlIHRvIGAwYC5cbiAgaWYgKFxuICAgIGh0dHBSZXF1ZXN0LmJvZHkgPT0gbnVsbCAmJlxuICAgIFsnUE9TVCcsICdQVVQnXS5pbmNsdWRlcyhodHRwUmVxdWVzdC5tZXRob2QpXG4gICkge1xuICAgIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSA9ICcwJ1xuICB9XG5cbiAgLy8gICAgNy4gSWYgY29udGVudExlbmd0aCBpcyBub24tbnVsbCwgdGhlbiBzZXQgY29udGVudExlbmd0aEhlYWRlclZhbHVlIHRvXG4gIC8vICAgIGNvbnRlbnRMZW5ndGgsIHNlcmlhbGl6ZWQgYW5kIGlzb21vcnBoaWMgZW5jb2RlZC5cbiAgaWYgKGNvbnRlbnRMZW5ndGggIT0gbnVsbCkge1xuICAgIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSA9IGlzb21vcnBoaWNFbmNvZGUoYCR7Y29udGVudExlbmd0aH1gKVxuICB9XG5cbiAgLy8gICAgOC4gSWYgY29udGVudExlbmd0aEhlYWRlclZhbHVlIGlzIG5vbi1udWxsLCB0aGVuIGFwcGVuZFxuICAvLyAgICBgQ29udGVudC1MZW5ndGhgL2NvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSB0byBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyXG4gIC8vICAgIGxpc3QuXG4gIGlmIChjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgIT0gbnVsbCkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnY29udGVudC1sZW5ndGgnLCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUpXG4gIH1cblxuICAvLyAgICA5LiBJZiBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgaXMgbm9uLW51bGwsIHRoZW4gYXBwZW5kIChgQ29udGVudC1MZW5ndGhgLFxuICAvLyAgICBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUpIHRvIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cblxuICAvLyAgICAxMC4gSWYgY29udGVudExlbmd0aCBpcyBub24tbnVsbCBhbmQgaHR0cFJlcXVlc3RcdTIwMTlzIGtlZXBhbGl2ZSBpcyB0cnVlLFxuICAvLyAgICB0aGVuOlxuICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsICYmIGh0dHBSZXF1ZXN0LmtlZXBhbGl2ZSkge1xuICAgIC8vIE5PVEU6IGtlZXBhbGl2ZSBpcyBhIG5vb3Agb3V0c2lkZSBvZiBicm93c2VyIGNvbnRleHQuXG4gIH1cblxuICAvLyAgICAxMS4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIGlzIGEgVVJMLCB0aGVuIGFwcGVuZFxuICAvLyAgICBgUmVmZXJlcmAvaHR0cFJlcXVlc3RcdTIwMTlzIHJlZmVycmVyLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQsXG4gIC8vICAgICB0byBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGlmIChodHRwUmVxdWVzdC5yZWZlcnJlciBpbnN0YW5jZW9mIFVSTCkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgncmVmZXJlcicsIGlzb21vcnBoaWNFbmNvZGUoaHR0cFJlcXVlc3QucmVmZXJyZXIuaHJlZikpXG4gIH1cblxuICAvLyAgICAxMi4gQXBwZW5kIGEgcmVxdWVzdCBgT3JpZ2luYCBoZWFkZXIgZm9yIGh0dHBSZXF1ZXN0LlxuICBhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyKGh0dHBSZXF1ZXN0KVxuXG4gIC8vICAgIDEzLiBBcHBlbmQgdGhlIEZldGNoIG1ldGFkYXRhIGhlYWRlcnMgZm9yIGh0dHBSZXF1ZXN0LiBbRkVUQ0gtTUVUQURBVEFdXG4gIGFwcGVuZEZldGNoTWV0YWRhdGEoaHR0cFJlcXVlc3QpXG5cbiAgLy8gICAgMTQuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBVc2VyLUFnZW50YCwgdGhlblxuICAvLyAgICB1c2VyIGFnZW50cyBzaG91bGQgYXBwZW5kIGBVc2VyLUFnZW50YC9kZWZhdWx0IGBVc2VyLUFnZW50YCB2YWx1ZSB0b1xuICAvLyAgICBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGlmICghaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3VzZXItYWdlbnQnKSkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgndXNlci1hZ2VudCcsIHR5cGVvZiBlc2J1aWxkRGV0ZWN0aW9uID09PSAndW5kZWZpbmVkJyA/ICd1bmRpY2knIDogJ25vZGUnKVxuICB9XG5cbiAgLy8gICAgMTUuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIFwiZGVmYXVsdFwiIGFuZCBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyXG4gIC8vICAgIGxpc3QgY29udGFpbnMgYElmLU1vZGlmaWVkLVNpbmNlYCwgYElmLU5vbmUtTWF0Y2hgLFxuICAvLyAgICBgSWYtVW5tb2RpZmllZC1TaW5jZWAsIGBJZi1NYXRjaGAsIG9yIGBJZi1SYW5nZWAsIHRoZW4gc2V0XG4gIC8vICAgIGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIHRvIFwibm8tc3RvcmVcIi5cbiAgaWYgKFxuICAgIGh0dHBSZXF1ZXN0LmNhY2hlID09PSAnZGVmYXVsdCcgJiZcbiAgICAoaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2lmLW1vZGlmaWVkLXNpbmNlJykgfHxcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi1ub25lLW1hdGNoJykgfHxcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi11bm1vZGlmaWVkLXNpbmNlJykgfHxcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi1tYXRjaCcpIHx8XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnaWYtcmFuZ2UnKSlcbiAgKSB7XG4gICAgaHR0cFJlcXVlc3QuY2FjaGUgPSAnbm8tc3RvcmUnXG4gIH1cblxuICAvLyAgICAxNi4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgaXMgXCJuby1jYWNoZVwiLCBodHRwUmVxdWVzdFx1MjAxOXMgcHJldmVudFxuICAvLyAgICBuby1jYWNoZSBjYWNoZS1jb250cm9sIGhlYWRlciBtb2RpZmljYXRpb24gZmxhZyBpcyB1bnNldCwgYW5kXG4gIC8vICAgIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBDYWNoZS1Db250cm9sYCwgdGhlbiBhcHBlbmRcbiAgLy8gICAgYENhY2hlLUNvbnRyb2xgL2BtYXgtYWdlPTBgIHRvIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgaWYgKFxuICAgIGh0dHBSZXF1ZXN0LmNhY2hlID09PSAnbm8tY2FjaGUnICYmXG4gICAgIWh0dHBSZXF1ZXN0LnByZXZlbnROb0NhY2hlQ2FjaGVDb250cm9sSGVhZGVyTW9kaWZpY2F0aW9uICYmXG4gICAgIWh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdjYWNoZS1jb250cm9sJylcbiAgKSB7XG4gICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdjYWNoZS1jb250cm9sJywgJ21heC1hZ2U9MCcpXG4gIH1cblxuICAvLyAgICAxNy4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgaXMgXCJuby1zdG9yZVwiIG9yIFwicmVsb2FkXCIsIHRoZW46XG4gIGlmIChodHRwUmVxdWVzdC5jYWNoZSA9PT0gJ25vLXN0b3JlJyB8fCBodHRwUmVxdWVzdC5jYWNoZSA9PT0gJ3JlbG9hZCcpIHtcbiAgICAvLyAxLiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgUHJhZ21hYCwgdGhlbiBhcHBlbmRcbiAgICAvLyBgUHJhZ21hYC9gbm8tY2FjaGVgIHRvIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICBpZiAoIWh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdwcmFnbWEnKSkge1xuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdwcmFnbWEnLCAnbm8tY2FjaGUnKVxuICAgIH1cblxuICAgIC8vIDIuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBDYWNoZS1Db250cm9sYCxcbiAgICAvLyB0aGVuIGFwcGVuZCBgQ2FjaGUtQ29udHJvbGAvYG5vLWNhY2hlYCB0byBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgaWYgKCFodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnY2FjaGUtY29udHJvbCcpKSB7XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2NhY2hlLWNvbnRyb2wnLCAnbm8tY2FjaGUnKVxuICAgIH1cbiAgfVxuXG4gIC8vICAgIDE4LiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgY29udGFpbnMgYFJhbmdlYCwgdGhlbiBhcHBlbmRcbiAgLy8gICAgYEFjY2VwdC1FbmNvZGluZ2AvYGlkZW50aXR5YCB0byBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGlmIChodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygncmFuZ2UnKSkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0LWVuY29kaW5nJywgJ2lkZW50aXR5JylcbiAgfVxuXG4gIC8vICAgIDE5LiBNb2RpZnkgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IHBlciBIVFRQLiBEbyBub3QgYXBwZW5kIGEgZ2l2ZW5cbiAgLy8gICAgaGVhZGVyIGlmIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBjb250YWlucyB0aGF0IGhlYWRlclx1MjAxOXMgbmFtZS5cbiAgLy8gICAgVE9ETzogaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mZXRjaC9pc3N1ZXMvMTI4NSNpc3N1ZWNvbW1lbnQtODk2NTYwMTI5XG4gIGlmICghaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2FjY2VwdC1lbmNvZGluZycpKSB7XG4gICAgaWYgKHVybEhhc0h0dHBzU2NoZW1lKHJlcXVlc3RDdXJyZW50VVJMKGh0dHBSZXF1ZXN0KSkpIHtcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0LWVuY29kaW5nJywgJ2JyLCBnemlwLCBkZWZsYXRlJylcbiAgICB9IGVsc2Uge1xuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdhY2NlcHQtZW5jb2RpbmcnLCAnZ3ppcCwgZGVmbGF0ZScpXG4gICAgfVxuICB9XG5cbiAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKCdob3N0JylcblxuICAvLyAgICAyMC4gSWYgaW5jbHVkZUNyZWRlbnRpYWxzIGlzIHRydWUsIHRoZW46XG4gIGlmIChpbmNsdWRlQ3JlZGVudGlhbHMpIHtcbiAgICAvLyAxLiBJZiB0aGUgdXNlciBhZ2VudCBpcyBub3QgY29uZmlndXJlZCB0byBibG9jayBjb29raWVzIGZvciBodHRwUmVxdWVzdFxuICAgIC8vIChzZWUgc2VjdGlvbiA3IG9mIFtDT09LSUVTXSksIHRoZW46XG4gICAgLy8gVE9ETzogY3JlZGVudGlhbHNcbiAgICAvLyAyLiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQXV0aG9yaXphdGlvbmAsIHRoZW46XG4gICAgLy8gVE9ETzogY3JlZGVudGlhbHNcbiAgfVxuXG4gIC8vICAgIDIxLiBJZiB0aGVyZVx1MjAxOXMgYSBwcm94eS1hdXRoZW50aWNhdGlvbiBlbnRyeSwgdXNlIGl0IGFzIGFwcHJvcHJpYXRlLlxuICAvLyAgICBUT0RPOiBwcm94eS1hdXRoZW50aWNhdGlvblxuXG4gIC8vICAgIDIyLiBTZXQgaHR0cENhY2hlIHRvIHRoZSByZXN1bHQgb2YgZGV0ZXJtaW5pbmcgdGhlIEhUVFAgY2FjaGVcbiAgLy8gICAgcGFydGl0aW9uLCBnaXZlbiBodHRwUmVxdWVzdC5cbiAgLy8gICAgVE9ETzogY2FjaGVcblxuICAvLyAgICAyMy4gSWYgaHR0cENhY2hlIGlzIG51bGwsIHRoZW4gc2V0IGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIHRvXG4gIC8vICAgIFwibm8tc3RvcmVcIi5cbiAgaWYgKGh0dHBDYWNoZSA9PSBudWxsKSB7XG4gICAgaHR0cFJlcXVlc3QuY2FjaGUgPSAnbm8tc3RvcmUnXG4gIH1cblxuICAvLyAgICAyNC4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgaXMgbmVpdGhlciBcIm5vLXN0b3JlXCIgbm9yIFwicmVsb2FkXCIsXG4gIC8vICAgIHRoZW46XG4gIGlmIChodHRwUmVxdWVzdC5tb2RlICE9PSAnbm8tc3RvcmUnICYmIGh0dHBSZXF1ZXN0Lm1vZGUgIT09ICdyZWxvYWQnKSB7XG4gICAgLy8gVE9ETzogY2FjaGVcbiAgfVxuXG4gIC8vIDkuIElmIGFib3J0ZWQsIHRoZW4gcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgLy8gVE9ET1xuXG4gIC8vIDEwLiBJZiByZXNwb25zZSBpcyBudWxsLCB0aGVuOlxuICBpZiAocmVzcG9uc2UgPT0gbnVsbCkge1xuICAgIC8vIDEuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIFwib25seS1pZi1jYWNoZWRcIiwgdGhlbiByZXR1cm4gYVxuICAgIC8vIG5ldHdvcmsgZXJyb3IuXG4gICAgaWYgKGh0dHBSZXF1ZXN0Lm1vZGUgPT09ICdvbmx5LWlmLWNhY2hlZCcpIHtcbiAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdvbmx5IGlmIGNhY2hlZCcpXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IGZvcndhcmRSZXNwb25zZSBiZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUC1uZXR3b3JrIGZldGNoXG4gICAgLy8gZ2l2ZW4gaHR0cEZldGNoUGFyYW1zLCBpbmNsdWRlQ3JlZGVudGlhbHMsIGFuZCBpc05ld0Nvbm5lY3Rpb25GZXRjaC5cbiAgICBjb25zdCBmb3J3YXJkUmVzcG9uc2UgPSBhd2FpdCBodHRwTmV0d29ya0ZldGNoKFxuICAgICAgaHR0cEZldGNoUGFyYW1zLFxuICAgICAgaW5jbHVkZUNyZWRlbnRpYWxzLFxuICAgICAgaXNOZXdDb25uZWN0aW9uRmV0Y2hcbiAgICApXG5cbiAgICAvLyAzLiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzIHVuc2FmZSBhbmQgZm9yd2FyZFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXNcbiAgICAvLyBpbiB0aGUgcmFuZ2UgMjAwIHRvIDM5OSwgaW5jbHVzaXZlLCBpbnZhbGlkYXRlIGFwcHJvcHJpYXRlIHN0b3JlZFxuICAgIC8vIHJlc3BvbnNlcyBpbiBodHRwQ2FjaGUsIGFzIHBlciB0aGUgXCJJbnZhbGlkYXRpb25cIiBjaGFwdGVyIG9mIEhUVFBcbiAgICAvLyBDYWNoaW5nLCBhbmQgc2V0IHN0b3JlZFJlc3BvbnNlIHRvIG51bGwuIFtIVFRQLUNBQ0hJTkddXG4gICAgaWYgKFxuICAgICAgIXNhZmVNZXRob2RzU2V0LmhhcyhodHRwUmVxdWVzdC5tZXRob2QpICYmXG4gICAgICBmb3J3YXJkUmVzcG9uc2Uuc3RhdHVzID49IDIwMCAmJlxuICAgICAgZm9yd2FyZFJlc3BvbnNlLnN0YXR1cyA8PSAzOTlcbiAgICApIHtcbiAgICAgIC8vIFRPRE86IGNhY2hlXG4gICAgfVxuXG4gICAgLy8gNC4gSWYgdGhlIHJldmFsaWRhdGluZ0ZsYWcgaXMgc2V0IGFuZCBmb3J3YXJkUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyAzMDQsXG4gICAgLy8gdGhlbjpcbiAgICBpZiAocmV2YWxpZGF0aW5nRmxhZyAmJiBmb3J3YXJkUmVzcG9uc2Uuc3RhdHVzID09PSAzMDQpIHtcbiAgICAgIC8vIFRPRE86IGNhY2hlXG4gICAgfVxuXG4gICAgLy8gNS4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbjpcbiAgICBpZiAocmVzcG9uc2UgPT0gbnVsbCkge1xuICAgICAgLy8gMS4gU2V0IHJlc3BvbnNlIHRvIGZvcndhcmRSZXNwb25zZS5cbiAgICAgIHJlc3BvbnNlID0gZm9yd2FyZFJlc3BvbnNlXG5cbiAgICAgIC8vIDIuIFN0b3JlIGh0dHBSZXF1ZXN0IGFuZCBmb3J3YXJkUmVzcG9uc2UgaW4gaHR0cENhY2hlLCBhcyBwZXIgdGhlXG4gICAgICAvLyBcIlN0b3JpbmcgUmVzcG9uc2VzIGluIENhY2hlc1wiIGNoYXB0ZXIgb2YgSFRUUCBDYWNoaW5nLiBbSFRUUC1DQUNISU5HXVxuICAgICAgLy8gVE9ETzogY2FjaGVcbiAgICB9XG4gIH1cblxuICAvLyAxMS4gU2V0IHJlc3BvbnNlXHUyMDE5cyBVUkwgbGlzdCB0byBhIGNsb25lIG9mIGh0dHBSZXF1ZXN0XHUyMDE5cyBVUkwgbGlzdC5cbiAgcmVzcG9uc2UudXJsTGlzdCA9IFsuLi5odHRwUmVxdWVzdC51cmxMaXN0XVxuXG4gIC8vIDEyLiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgY29udGFpbnMgYFJhbmdlYCwgdGhlbiBzZXQgcmVzcG9uc2VcdTIwMTlzXG4gIC8vIHJhbmdlLXJlcXVlc3RlZCBmbGFnLlxuICBpZiAoaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3JhbmdlJykpIHtcbiAgICByZXNwb25zZS5yYW5nZVJlcXVlc3RlZCA9IHRydWVcbiAgfVxuXG4gIC8vIDEzLiBTZXQgcmVzcG9uc2VcdTIwMTlzIHJlcXVlc3QtaW5jbHVkZXMtY3JlZGVudGlhbHMgdG8gaW5jbHVkZUNyZWRlbnRpYWxzLlxuICByZXNwb25zZS5yZXF1ZXN0SW5jbHVkZXNDcmVkZW50aWFscyA9IGluY2x1ZGVDcmVkZW50aWFsc1xuXG4gIC8vIDE0LiBJZiByZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIDQwMSwgaHR0cFJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIG5vdFxuICAvLyBcImNvcnNcIiwgaW5jbHVkZUNyZWRlbnRpYWxzIGlzIHRydWUsIGFuZCByZXF1ZXN0XHUyMDE5cyB3aW5kb3cgaXMgYW4gZW52aXJvbm1lbnRcbiAgLy8gc2V0dGluZ3Mgb2JqZWN0LCB0aGVuOlxuICAvLyBUT0RPXG5cbiAgLy8gMTUuIElmIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgNDA3LCB0aGVuOlxuICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDcpIHtcbiAgICAvLyAxLiBJZiByZXF1ZXN0XHUyMDE5cyB3aW5kb3cgaXMgXCJuby13aW5kb3dcIiwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgIGlmIChyZXF1ZXN0LndpbmRvdyA9PT0gJ25vLXdpbmRvdycpIHtcbiAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKClcbiAgICB9XG5cbiAgICAvLyAyLiA/Pz9cblxuICAgIC8vIDMuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlcnJvciBmb3IgZmV0Y2hQYXJhbXMuXG4gICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgcmV0dXJuIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcylcbiAgICB9XG5cbiAgICAvLyA0LiBQcm9tcHQgdGhlIGVuZCB1c2VyIGFzIGFwcHJvcHJpYXRlIGluIHJlcXVlc3RcdTIwMTlzIHdpbmRvdyBhbmQgc3RvcmVcbiAgICAvLyB0aGUgcmVzdWx0IGFzIGEgcHJveHktYXV0aGVudGljYXRpb24gZW50cnkuIFtIVFRQLUFVVEhdXG4gICAgLy8gVE9ETzogSW52b2tlIHNvbWUga2luZCBvZiBjYWxsYmFjaz9cblxuICAgIC8vIDUuIFNldCByZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUC1uZXR3b3JrLW9yLWNhY2hlIGZldGNoIGdpdmVuXG4gICAgLy8gZmV0Y2hQYXJhbXMuXG4gICAgLy8gVE9ET1xuICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdwcm94eSBhdXRoZW50aWNhdGlvbiByZXF1aXJlZCcpXG4gIH1cblxuICAvLyAxNi4gSWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgYXJlIHRydWVcbiAgaWYgKFxuICAgIC8vIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgNDIxXG4gICAgcmVzcG9uc2Uuc3RhdHVzID09PSA0MjEgJiZcbiAgICAvLyBpc05ld0Nvbm5lY3Rpb25GZXRjaCBpcyBmYWxzZVxuICAgICFpc05ld0Nvbm5lY3Rpb25GZXRjaCAmJlxuICAgIC8vIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbnVsbCwgb3IgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBub24tbnVsbCBhbmQgcmVxdWVzdFx1MjAxOXMgYm9keVx1MjAxOXMgc291cmNlIGlzIG5vbi1udWxsXG4gICAgKHJlcXVlc3QuYm9keSA9PSBudWxsIHx8IHJlcXVlc3QuYm9keS5zb3VyY2UgIT0gbnVsbClcbiAgKSB7XG4gICAgLy8gdGhlbjpcblxuICAgIC8vIDEuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlcnJvciBmb3IgZmV0Y2hQYXJhbXMuXG4gICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgcmV0dXJuIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcylcbiAgICB9XG5cbiAgICAvLyAyLiBTZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAtbmV0d29yay1vci1jYWNoZVxuICAgIC8vIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLCBpc0F1dGhlbnRpY2F0aW9uRmV0Y2gsIGFuZCB0cnVlLlxuXG4gICAgLy8gVE9ETyAoc3BlYyk6IFRoZSBzcGVjIGRvZXNuJ3Qgc3BlY2lmeSB0aGlzIGJ1dCB3ZSBuZWVkIHRvIGNhbmNlbFxuICAgIC8vIHRoZSBhY3RpdmUgcmVzcG9uc2UgYmVmb3JlIHdlIGNhbiBzdGFydCBhIG5ldyBvbmUuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mZXRjaC9pc3N1ZXMvMTI5M1xuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbi5kZXN0cm95KClcblxuICAgIHJlc3BvbnNlID0gYXdhaXQgaHR0cE5ldHdvcmtPckNhY2hlRmV0Y2goXG4gICAgICBmZXRjaFBhcmFtcyxcbiAgICAgIGlzQXV0aGVudGljYXRpb25GZXRjaCxcbiAgICAgIHRydWVcbiAgICApXG4gIH1cblxuICAvLyAxNy4gSWYgaXNBdXRoZW50aWNhdGlvbkZldGNoIGlzIHRydWUsIHRoZW4gY3JlYXRlIGFuIGF1dGhlbnRpY2F0aW9uIGVudHJ5XG4gIGlmIChpc0F1dGhlbnRpY2F0aW9uRmV0Y2gpIHtcbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyAxOC4gUmV0dXJuIHJlc3BvbnNlLlxuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtbmV0d29yay1mZXRjaFxuYXN5bmMgZnVuY3Rpb24gaHR0cE5ldHdvcmtGZXRjaCAoXG4gIGZldGNoUGFyYW1zLFxuICBpbmNsdWRlQ3JlZGVudGlhbHMgPSBmYWxzZSxcbiAgZm9yY2VOZXdDb25uZWN0aW9uID0gZmFsc2Vcbikge1xuICBhc3NlcnQoIWZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbiB8fCBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveWVkKVxuXG4gIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbiA9IHtcbiAgICBhYm9ydDogbnVsbCxcbiAgICBkZXN0cm95ZWQ6IGZhbHNlLFxuICAgIGRlc3Ryb3kgKGVycikge1xuICAgICAgaWYgKCF0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWVcbiAgICAgICAgdGhpcy5hYm9ydD8uKGVyciA/PyBuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJykpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gMS4gTGV0IHJlcXVlc3QgYmUgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3QuXG4gIGNvbnN0IHJlcXVlc3QgPSBmZXRjaFBhcmFtcy5yZXF1ZXN0XG5cbiAgLy8gMi4gTGV0IHJlc3BvbnNlIGJlIG51bGwuXG4gIGxldCByZXNwb25zZSA9IG51bGxcblxuICAvLyAzLiBMZXQgdGltaW5nSW5mbyBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgdGltaW5nIGluZm8uXG4gIGNvbnN0IHRpbWluZ0luZm8gPSBmZXRjaFBhcmFtcy50aW1pbmdJbmZvXG5cbiAgLy8gNC4gTGV0IGh0dHBDYWNoZSBiZSB0aGUgcmVzdWx0IG9mIGRldGVybWluaW5nIHRoZSBIVFRQIGNhY2hlIHBhcnRpdGlvbixcbiAgLy8gZ2l2ZW4gcmVxdWVzdC5cbiAgLy8gVE9ETzogY2FjaGVcbiAgY29uc3QgaHR0cENhY2hlID0gbnVsbFxuXG4gIC8vIDUuIElmIGh0dHBDYWNoZSBpcyBudWxsLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIHRvIFwibm8tc3RvcmVcIi5cbiAgaWYgKGh0dHBDYWNoZSA9PSBudWxsKSB7XG4gICAgcmVxdWVzdC5jYWNoZSA9ICduby1zdG9yZSdcbiAgfVxuXG4gIC8vIDYuIExldCBuZXR3b3JrUGFydGl0aW9uS2V5IGJlIHRoZSByZXN1bHQgb2YgZGV0ZXJtaW5pbmcgdGhlIG5ldHdvcmtcbiAgLy8gcGFydGl0aW9uIGtleSBnaXZlbiByZXF1ZXN0LlxuICAvLyBUT0RPXG5cbiAgLy8gNy4gTGV0IG5ld0Nvbm5lY3Rpb24gYmUgXCJ5ZXNcIiBpZiBmb3JjZU5ld0Nvbm5lY3Rpb24gaXMgdHJ1ZTsgb3RoZXJ3aXNlXG4gIC8vIFwibm9cIi5cbiAgY29uc3QgbmV3Q29ubmVjdGlvbiA9IGZvcmNlTmV3Q29ubmVjdGlvbiA/ICd5ZXMnIDogJ25vJyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG5cbiAgLy8gOC4gU3dpdGNoIG9uIHJlcXVlc3RcdTIwMTlzIG1vZGU6XG4gIGlmIChyZXF1ZXN0Lm1vZGUgPT09ICd3ZWJzb2NrZXQnKSB7XG4gICAgLy8gTGV0IGNvbm5lY3Rpb24gYmUgdGhlIHJlc3VsdCBvZiBvYnRhaW5pbmcgYSBXZWJTb2NrZXQgY29ubmVjdGlvbixcbiAgICAvLyBnaXZlbiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTC5cbiAgICAvLyBUT0RPXG4gIH0gZWxzZSB7XG4gICAgLy8gTGV0IGNvbm5lY3Rpb24gYmUgdGhlIHJlc3VsdCBvZiBvYnRhaW5pbmcgYSBjb25uZWN0aW9uLCBnaXZlblxuICAgIC8vIG5ldHdvcmtQYXJ0aXRpb25LZXksIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBvcmlnaW4sXG4gICAgLy8gaW5jbHVkZUNyZWRlbnRpYWxzLCBhbmQgZm9yY2VOZXdDb25uZWN0aW9uLlxuICAgIC8vIFRPRE9cbiAgfVxuXG4gIC8vIDkuIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gdGhlIG9uZ29pbmcgZmV0Y2ggaXMgdGVybWluYXRlZDpcblxuICAvLyAgICAxLiBJZiBjb25uZWN0aW9uIGlzIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cblxuICAvLyAgICAyLiBTZXQgdGltaW5nSW5mb1x1MjAxOXMgZmluYWwgY29ubmVjdGlvbiB0aW1pbmcgaW5mbyB0byB0aGUgcmVzdWx0IG9mXG4gIC8vICAgIGNhbGxpbmcgY2xhbXAgYW5kIGNvYXJzZW4gY29ubmVjdGlvbiB0aW1pbmcgaW5mbyB3aXRoIGNvbm5lY3Rpb25cdTIwMTlzXG4gIC8vICAgIHRpbWluZyBpbmZvLCB0aW1pbmdJbmZvXHUyMDE5cyBwb3N0LXJlZGlyZWN0IHN0YXJ0IHRpbWUsIGFuZCBmZXRjaFBhcmFtc1x1MjAxOXNcbiAgLy8gICAgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkIGNhcGFiaWxpdHkuXG5cbiAgLy8gICAgMy4gSWYgY29ubmVjdGlvbiBpcyBub3QgYW4gSFRUUC8yIGNvbm5lY3Rpb24sIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm9uLW51bGwsXG4gIC8vICAgIGFuZCByZXF1ZXN0XHUyMDE5cyBib2R5XHUyMDE5cyBzb3VyY2UgaXMgbnVsbCwgdGhlbiBhcHBlbmQgKGBUcmFuc2Zlci1FbmNvZGluZ2AsXG4gIC8vICAgIGBjaHVua2VkYCkgdG8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG5cbiAgLy8gICAgNC4gU2V0IHRpbWluZ0luZm9cdTIwMTlzIGZpbmFsIG5ldHdvcmstcmVxdWVzdCBzdGFydCB0aW1lIHRvIHRoZSBjb2Fyc2VuZWRcbiAgLy8gICAgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlbiBmZXRjaFBhcmFtc1x1MjAxOXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkXG4gIC8vICAgIGNhcGFiaWxpdHkuXG5cbiAgLy8gICAgNS4gU2V0IHJlc3BvbnNlIHRvIHRoZSByZXN1bHQgb2YgbWFraW5nIGFuIEhUVFAgcmVxdWVzdCBvdmVyIGNvbm5lY3Rpb25cbiAgLy8gICAgdXNpbmcgcmVxdWVzdCB3aXRoIHRoZSBmb2xsb3dpbmcgY2F2ZWF0czpcblxuICAvLyAgICAgICAgLSBGb2xsb3cgdGhlIHJlbGV2YW50IHJlcXVpcmVtZW50cyBmcm9tIEhUVFAuIFtIVFRQXSBbSFRUUC1TRU1BTlRJQ1NdXG4gIC8vICAgICAgICBbSFRUUC1DT05EXSBbSFRUUC1DQUNISU5HXSBbSFRUUC1BVVRIXVxuXG4gIC8vICAgICAgICAtIElmIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm9uLW51bGwsIGFuZCByZXF1ZXN0XHUyMDE5cyBib2R5XHUyMDE5cyBzb3VyY2UgaXMgbnVsbCxcbiAgLy8gICAgICAgIHRoZW4gdGhlIHVzZXIgYWdlbnQgbWF5IGhhdmUgYSBidWZmZXIgb2YgdXAgdG8gNjQga2liaWJ5dGVzIGFuZCBzdG9yZVxuICAvLyAgICAgICAgYSBwYXJ0IG9mIHJlcXVlc3RcdTIwMTlzIGJvZHkgaW4gdGhhdCBidWZmZXIuIElmIHRoZSB1c2VyIGFnZW50IHJlYWRzIGZyb21cbiAgLy8gICAgICAgIHJlcXVlc3RcdTIwMTlzIGJvZHkgYmV5b25kIHRoYXQgYnVmZmVyXHUyMDE5cyBzaXplIGFuZCB0aGUgdXNlciBhZ2VudCBuZWVkcyB0b1xuICAvLyAgICAgICAgcmVzZW5kIHJlcXVlc3QsIHRoZW4gaW5zdGVhZCByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuXG4gIC8vICAgICAgICAtIFNldCB0aW1pbmdJbmZvXHUyMDE5cyBmaW5hbCBuZXR3b3JrLXJlc3BvbnNlIHN0YXJ0IHRpbWUgdG8gdGhlIGNvYXJzZW5lZFxuICAvLyAgICAgICAgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlbiBmZXRjaFBhcmFtc1x1MjAxOXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkIGNhcGFiaWxpdHksXG4gIC8vICAgICAgICBpbW1lZGlhdGVseSBhZnRlciB0aGUgdXNlciBhZ2VudFx1MjAxOXMgSFRUUCBwYXJzZXIgcmVjZWl2ZXMgdGhlIGZpcnN0IGJ5dGVcbiAgLy8gICAgICAgIG9mIHRoZSByZXNwb25zZSAoZS5nLiwgZnJhbWUgaGVhZGVyIGJ5dGVzIGZvciBIVFRQLzIgb3IgcmVzcG9uc2Ugc3RhdHVzXG4gIC8vICAgICAgICBsaW5lIGZvciBIVFRQLzEueCkuXG5cbiAgLy8gICAgICAgIC0gV2FpdCB1bnRpbCBhbGwgdGhlIGhlYWRlcnMgYXJlIHRyYW5zbWl0dGVkLlxuXG4gIC8vICAgICAgICAtIEFueSByZXNwb25zZXMgd2hvc2Ugc3RhdHVzIGlzIGluIHRoZSByYW5nZSAxMDAgdG8gMTk5LCBpbmNsdXNpdmUsXG4gIC8vICAgICAgICBhbmQgaXMgbm90IDEwMSwgYXJlIHRvIGJlIGlnbm9yZWQsIGV4Y2VwdCBmb3IgdGhlIHB1cnBvc2VzIG9mIHNldHRpbmdcbiAgLy8gICAgICAgIHRpbWluZ0luZm9cdTIwMTlzIGZpbmFsIG5ldHdvcmstcmVzcG9uc2Ugc3RhcnQgdGltZSBhYm92ZS5cblxuICAvLyAgICAtIElmIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGNvbnRhaW5zIGBUcmFuc2Zlci1FbmNvZGluZ2AvYGNodW5rZWRgIGFuZFxuICAvLyAgICByZXNwb25zZSBpcyB0cmFuc2ZlcnJlZCB2aWEgSFRUUC8xLjAgb3Igb2xkZXIsIHRoZW4gcmV0dXJuIGEgbmV0d29ya1xuICAvLyAgICBlcnJvci5cblxuICAvLyAgICAtIElmIHRoZSBIVFRQIHJlcXVlc3QgcmVzdWx0cyBpbiBhIFRMUyBjbGllbnQgY2VydGlmaWNhdGUgZGlhbG9nLCB0aGVuOlxuXG4gIC8vICAgICAgICAxLiBJZiByZXF1ZXN0XHUyMDE5cyB3aW5kb3cgaXMgYW4gZW52aXJvbm1lbnQgc2V0dGluZ3Mgb2JqZWN0LCBtYWtlIHRoZVxuICAvLyAgICAgICAgZGlhbG9nIGF2YWlsYWJsZSBpbiByZXF1ZXN0XHUyMDE5cyB3aW5kb3cuXG5cbiAgLy8gICAgICAgIDIuIE90aGVyd2lzZSwgcmV0dXJuIGEgbmV0d29yayBlcnJvci5cblxuICAvLyBUbyB0cmFuc21pdCByZXF1ZXN0XHUyMDE5cyBib2R5IGJvZHksIHJ1biB0aGVzZSBzdGVwczpcbiAgbGV0IHJlcXVlc3RCb2R5ID0gbnVsbFxuICAvLyAxLiBJZiBib2R5IGlzIG51bGwgYW5kIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlcXVlc3QgZW5kLW9mLWJvZHkgaXNcbiAgLy8gbm9uLW51bGwsIHRoZW4gcXVldWUgYSBmZXRjaCB0YXNrIGdpdmVuIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlcXVlc3RcbiAgLy8gZW5kLW9mLWJvZHkgYW5kIGZldGNoUGFyYW1zXHUyMDE5cyB0YXNrIGRlc3RpbmF0aW9uLlxuICBpZiAocmVxdWVzdC5ib2R5ID09IG51bGwgJiYgZmV0Y2hQYXJhbXMucHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHkpIHtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSgpKVxuICB9IGVsc2UgaWYgKHJlcXVlc3QuYm9keSAhPSBudWxsKSB7XG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBib2R5IGlzIG5vbi1udWxsOlxuXG4gICAgLy8gICAgMS4gTGV0IHByb2Nlc3NCb2R5Q2h1bmsgZ2l2ZW4gYnl0ZXMgYmUgdGhlc2Ugc3RlcHM6XG4gICAgY29uc3QgcHJvY2Vzc0JvZHlDaHVuayA9IGFzeW5jIGZ1bmN0aW9uICogKGJ5dGVzKSB7XG4gICAgICAvLyAxLiBJZiB0aGUgb25nb2luZyBmZXRjaCBpcyB0ZXJtaW5hdGVkLCB0aGVuIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gUnVuIHRoaXMgc3RlcCBpbiBwYXJhbGxlbDogdHJhbnNtaXQgYnl0ZXMuXG4gICAgICB5aWVsZCBieXRlc1xuXG4gICAgICAvLyAzLiBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXF1ZXN0IGJvZHkgaXMgbm9uLW51bGwsIHRoZW4gcnVuXG4gICAgICAvLyBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXF1ZXN0IGJvZHkgZ2l2ZW4gYnl0ZXNcdTIwMTlzIGxlbmd0aC5cbiAgICAgIGZldGNoUGFyYW1zLnByb2Nlc3NSZXF1ZXN0Qm9keUNodW5rTGVuZ3RoPy4oYnl0ZXMuYnl0ZUxlbmd0aClcbiAgICB9XG5cbiAgICAvLyAyLiBMZXQgcHJvY2Vzc0VuZE9mQm9keSBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzRW5kT2ZCb2R5ID0gKCkgPT4ge1xuICAgICAgLy8gMS4gSWYgZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQsIHRoZW4gYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgICBpZiAoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXF1ZXN0IGVuZC1vZi1ib2R5IGlzIG5vbi1udWxsLFxuICAgICAgLy8gdGhlbiBydW4gZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVxdWVzdCBlbmQtb2YtYm9keS5cbiAgICAgIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IHByb2Nlc3NCb2R5RXJyb3IgZ2l2ZW4gZSBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzQm9keUVycm9yID0gKGUpID0+IHtcbiAgICAgIC8vIDEuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgZSBpcyBhbiBcIkFib3J0RXJyb3JcIiBET01FeGNlcHRpb24sIHRoZW4gYWJvcnQgZmV0Y2hQYXJhbXNcdTIwMTlzIGNvbnRyb2xsZXIuXG4gICAgICBpZiAoZS5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5hYm9ydCgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZShlKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuIEluY3JlbWVudGFsbHkgcmVhZCByZXF1ZXN0XHUyMDE5cyBib2R5IGdpdmVuIHByb2Nlc3NCb2R5Q2h1bmssIHByb2Nlc3NFbmRPZkJvZHksXG4gICAgLy8gcHJvY2Vzc0JvZHlFcnJvciwgYW5kIGZldGNoUGFyYW1zXHUyMDE5cyB0YXNrIGRlc3RpbmF0aW9uLlxuICAgIHJlcXVlc3RCb2R5ID0gKGFzeW5jIGZ1bmN0aW9uICogKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBieXRlcyBvZiByZXF1ZXN0LmJvZHkuc3RyZWFtKSB7XG4gICAgICAgICAgeWllbGQgKiBwcm9jZXNzQm9keUNodW5rKGJ5dGVzKVxuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3NFbmRPZkJvZHkoKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHByb2Nlc3NCb2R5RXJyb3IoZXJyKVxuICAgICAgfVxuICAgIH0pKClcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gc29ja2V0IGlzIG9ubHkgcHJvdmlkZWQgZm9yIHdlYnNvY2tldHNcbiAgICBjb25zdCB7IGJvZHksIHN0YXR1cywgc3RhdHVzVGV4dCwgaGVhZGVyc0xpc3QsIHNvY2tldCB9ID0gYXdhaXQgZGlzcGF0Y2goeyBib2R5OiByZXF1ZXN0Qm9keSB9KVxuXG4gICAgaWYgKHNvY2tldCkge1xuICAgICAgcmVzcG9uc2UgPSBtYWtlUmVzcG9uc2UoeyBzdGF0dXMsIHN0YXR1c1RleHQsIGhlYWRlcnNMaXN0LCBzb2NrZXQgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaXRlcmF0b3IgPSBib2R5W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpXG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm5leHQgPSAoKSA9PiBpdGVyYXRvci5uZXh0KClcblxuICAgICAgcmVzcG9uc2UgPSBtYWtlUmVzcG9uc2UoeyBzdGF0dXMsIHN0YXR1c1RleHQsIGhlYWRlcnNMaXN0IH0pXG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyAxMC4gSWYgYWJvcnRlZCwgdGhlbjpcbiAgICBpZiAoZXJyLm5hbWUgPT09ICdBYm9ydEVycm9yJykge1xuICAgICAgLy8gMS4gSWYgY29ubmVjdGlvbiB1c2VzIEhUVFAvMiwgdGhlbiB0cmFuc21pdCBhbiBSU1RfU1RSRUFNIGZyYW1lLlxuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3koKVxuXG4gICAgICAvLyAyLiBSZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZXJyb3IgZm9yIGZldGNoUGFyYW1zLlxuICAgICAgcmV0dXJuIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcywgZXJyKVxuICAgIH1cblxuICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKGVycilcbiAgfVxuXG4gIC8vIDExLiBMZXQgcHVsbEFsZ29yaXRobSBiZSBhbiBhY3Rpb24gdGhhdCByZXN1bWVzIHRoZSBvbmdvaW5nIGZldGNoXG4gIC8vIGlmIGl0IGlzIHN1c3BlbmRlZC5cbiAgY29uc3QgcHVsbEFsZ29yaXRobSA9ICgpID0+IHtcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnJlc3VtZSgpXG4gIH1cblxuICAvLyAxMi4gTGV0IGNhbmNlbEFsZ29yaXRobSBiZSBhbiBhbGdvcml0aG0gdGhhdCBhYm9ydHMgZmV0Y2hQYXJhbXNcdTIwMTlzXG4gIC8vIGNvbnRyb2xsZXIgd2l0aCByZWFzb24sIGdpdmVuIHJlYXNvbi5cbiAgY29uc3QgY2FuY2VsQWxnb3JpdGhtID0gKHJlYXNvbikgPT4ge1xuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuYWJvcnQocmVhc29uKVxuICB9XG5cbiAgLy8gMTMuIExldCBoaWdoV2F0ZXJNYXJrIGJlIGEgbm9uLW5lZ2F0aXZlLCBub24tTmFOIG51bWJlciwgY2hvc2VuIGJ5XG4gIC8vIHRoZSB1c2VyIGFnZW50LlxuICAvLyBUT0RPXG5cbiAgLy8gMTQuIExldCBzaXplQWxnb3JpdGhtIGJlIGFuIGFsZ29yaXRobSB0aGF0IGFjY2VwdHMgYSBjaHVuayBvYmplY3RcbiAgLy8gYW5kIHJldHVybnMgYSBub24tbmVnYXRpdmUsIG5vbi1OYU4sIG5vbi1pbmZpbml0ZSBudW1iZXIsIGNob3NlbiBieSB0aGUgdXNlciBhZ2VudC5cbiAgLy8gVE9ET1xuXG4gIC8vIDE1LiBMZXQgc3RyZWFtIGJlIGEgbmV3IFJlYWRhYmxlU3RyZWFtLlxuICAvLyAxNi4gU2V0IHVwIHN0cmVhbSB3aXRoIHB1bGxBbGdvcml0aG0gc2V0IHRvIHB1bGxBbGdvcml0aG0sXG4gIC8vIGNhbmNlbEFsZ29yaXRobSBzZXQgdG8gY2FuY2VsQWxnb3JpdGhtLCBoaWdoV2F0ZXJNYXJrIHNldCB0b1xuICAvLyBoaWdoV2F0ZXJNYXJrLCBhbmQgc2l6ZUFsZ29yaXRobSBzZXQgdG8gc2l6ZUFsZ29yaXRobS5cbiAgaWYgKCFSZWFkYWJsZVN0cmVhbSkge1xuICAgIFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG4gIH1cblxuICBjb25zdCBzdHJlYW0gPSBuZXcgUmVhZGFibGVTdHJlYW0oXG4gICAge1xuICAgICAgYXN5bmMgc3RhcnQgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyID0gY29udHJvbGxlclxuICAgICAgfSxcbiAgICAgIGFzeW5jIHB1bGwgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgYXdhaXQgcHVsbEFsZ29yaXRobShjb250cm9sbGVyKVxuICAgICAgfSxcbiAgICAgIGFzeW5jIGNhbmNlbCAocmVhc29uKSB7XG4gICAgICAgIGF3YWl0IGNhbmNlbEFsZ29yaXRobShyZWFzb24pXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBoaWdoV2F0ZXJNYXJrOiAwLFxuICAgICAgc2l6ZSAoKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgICB9XG4gICAgfVxuICApXG5cbiAgLy8gMTcuIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gdGhlIG9uZ29pbmcgZmV0Y2ggaXMgdGVybWluYXRlZDpcblxuICAvLyAgICAxLiBTZXQgcmVzcG9uc2VcdTIwMTlzIGJvZHkgdG8gYSBuZXcgYm9keSB3aG9zZSBzdHJlYW0gaXMgc3RyZWFtLlxuICByZXNwb25zZS5ib2R5ID0geyBzdHJlYW0gfVxuXG4gIC8vICAgIDIuIElmIHJlc3BvbnNlIGlzIG5vdCBhIG5ldHdvcmsgZXJyb3IgYW5kIHJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgaXNcbiAgLy8gICAgbm90IFwibm8tc3RvcmVcIiwgdGhlbiB1cGRhdGUgcmVzcG9uc2UgaW4gaHR0cENhY2hlIGZvciByZXF1ZXN0LlxuICAvLyAgICBUT0RPXG5cbiAgLy8gICAgMy4gSWYgaW5jbHVkZUNyZWRlbnRpYWxzIGlzIHRydWUgYW5kIHRoZSB1c2VyIGFnZW50IGlzIG5vdCBjb25maWd1cmVkXG4gIC8vICAgIHRvIGJsb2NrIGNvb2tpZXMgZm9yIHJlcXVlc3QgKHNlZSBzZWN0aW9uIDcgb2YgW0NPT0tJRVNdKSwgdGhlbiBydW4gdGhlXG4gIC8vICAgIFwic2V0LWNvb2tpZS1zdHJpbmdcIiBwYXJzaW5nIGFsZ29yaXRobSAoc2VlIHNlY3Rpb24gNS4yIG9mIFtDT09LSUVTXSkgb25cbiAgLy8gICAgdGhlIHZhbHVlIG9mIGVhY2ggaGVhZGVyIHdob3NlIG5hbWUgaXMgYSBieXRlLWNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gIC8vICAgIGBTZXQtQ29va2llYCBpbiByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QsIGlmIGFueSwgYW5kIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMLlxuICAvLyAgICBUT0RPXG5cbiAgLy8gMTguIElmIGFib3J0ZWQsIHRoZW46XG4gIC8vIFRPRE9cblxuICAvLyAxOS4gUnVuIHRoZXNlIHN0ZXBzIGluIHBhcmFsbGVsOlxuXG4gIC8vICAgIDEuIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQ6XG4gIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIub24oJ3Rlcm1pbmF0ZWQnLCBvbkFib3J0ZWQpXG4gIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIucmVzdW1lID0gYXN5bmMgKCkgPT4ge1xuICAgIC8vIDEuIFdoaWxlIHRydWVcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgLy8gMS0zLiBTZWUgb25EYXRhLi4uXG5cbiAgICAgIC8vIDQuIFNldCBieXRlcyB0byB0aGUgcmVzdWx0IG9mIGhhbmRsaW5nIGNvbnRlbnQgY29kaW5ncyBnaXZlblxuICAgICAgLy8gY29kaW5ncyBhbmQgYnl0ZXMuXG4gICAgICBsZXQgYnl0ZXNcbiAgICAgIGxldCBpc0ZhaWx1cmVcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IGZldGNoUGFyYW1zLmNvbnRyb2xsZXIubmV4dCgpXG5cbiAgICAgICAgaWYgKGlzQWJvcnRlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG5cbiAgICAgICAgYnl0ZXMgPSBkb25lID8gdW5kZWZpbmVkIDogdmFsdWVcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoZmV0Y2hQYXJhbXMuY29udHJvbGxlci5lbmRlZCAmJiAhdGltaW5nSW5mby5lbmNvZGVkQm9keVNpemUpIHtcbiAgICAgICAgICAvLyB6bGliIGRvZXNuJ3QgbGlrZSBlbXB0eSBzdHJlYW1zLlxuICAgICAgICAgIGJ5dGVzID0gdW5kZWZpbmVkXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnl0ZXMgPSBlcnJcblxuICAgICAgICAgIC8vIGVyciBtYXkgYmUgcHJvcGFnYXRlZCBmcm9tIHRoZSByZXN1bHQgb2YgY2FsbGluZyByZWFkYWJsZXN0cmVhbS5jYW5jZWwsXG4gICAgICAgICAgLy8gd2hpY2ggbWlnaHQgbm90IGJlIGFuIGVycm9yLiBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjAwOVxuICAgICAgICAgIGlzRmFpbHVyZSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYnl0ZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyAyLiBPdGhlcndpc2UsIGlmIHRoZSBieXRlcyB0cmFuc21pc3Npb24gZm9yIHJlc3BvbnNlXHUyMDE5cyBtZXNzYWdlXG4gICAgICAgIC8vIGJvZHkgaXMgZG9uZSBub3JtYWxseSBhbmQgc3RyZWFtIGlzIHJlYWRhYmxlLCB0aGVuIGNsb3NlXG4gICAgICAgIC8vIHN0cmVhbSwgZmluYWxpemUgcmVzcG9uc2UgZm9yIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZSwgYW5kXG4gICAgICAgIC8vIGFib3J0IHRoZXNlIGluLXBhcmFsbGVsIHN0ZXBzLlxuICAgICAgICByZWFkYWJsZVN0cmVhbUNsb3NlKGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbGxlcilcblxuICAgICAgICBmaW5hbGl6ZVJlc3BvbnNlKGZldGNoUGFyYW1zLCByZXNwb25zZSlcblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gNS4gSW5jcmVhc2UgdGltaW5nSW5mb1x1MjAxOXMgZGVjb2RlZCBib2R5IHNpemUgYnkgYnl0ZXNcdTIwMTlzIGxlbmd0aC5cbiAgICAgIHRpbWluZ0luZm8uZGVjb2RlZEJvZHlTaXplICs9IGJ5dGVzPy5ieXRlTGVuZ3RoID8/IDBcblxuICAgICAgLy8gNi4gSWYgYnl0ZXMgaXMgZmFpbHVyZSwgdGhlbiB0ZXJtaW5hdGUgZmV0Y2hQYXJhbXNcdTIwMTlzIGNvbnRyb2xsZXIuXG4gICAgICBpZiAoaXNGYWlsdXJlKSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIudGVybWluYXRlKGJ5dGVzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gNy4gRW5xdWV1ZSBhIFVpbnQ4QXJyYXkgd3JhcHBpbmcgYW4gQXJyYXlCdWZmZXIgY29udGFpbmluZyBieXRlc1xuICAgICAgLy8gaW50byBzdHJlYW0uXG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVWludDhBcnJheShieXRlcykpXG5cbiAgICAgIC8vIDguIElmIHN0cmVhbSBpcyBlcnJvcmVkLCB0aGVuIHRlcm1pbmF0ZSB0aGUgb25nb2luZyBmZXRjaC5cbiAgICAgIGlmIChpc0Vycm9yZWQoc3RyZWFtKSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZSgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA5LiBJZiBzdHJlYW0gZG9lc25cdTIwMTl0IG5lZWQgbW9yZSBkYXRhIGFzayB0aGUgdXNlciBhZ2VudCB0byBzdXNwZW5kXG4gICAgICAvLyB0aGUgb25nb2luZyBmZXRjaC5cbiAgICAgIGlmICghZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyLmRlc2lyZWRTaXplKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vICAgIDIuIElmIGFib3J0ZWQsIHRoZW46XG4gIGZ1bmN0aW9uIG9uQWJvcnRlZCAocmVhc29uKSB7XG4gICAgLy8gMi4gSWYgZmV0Y2hQYXJhbXMgaXMgYWJvcnRlZCwgdGhlbjpcbiAgICBpZiAoaXNBYm9ydGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgLy8gMS4gU2V0IHJlc3BvbnNlXHUyMDE5cyBhYm9ydGVkIGZsYWcuXG4gICAgICByZXNwb25zZS5hYm9ydGVkID0gdHJ1ZVxuXG4gICAgICAvLyAyLiBJZiBzdHJlYW0gaXMgcmVhZGFibGUsIHRoZW4gZXJyb3Igc3RyZWFtIHdpdGggdGhlIHJlc3VsdCBvZlxuICAgICAgLy8gICAgZGVzZXJpYWxpemUgYSBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiBnaXZlbiBmZXRjaFBhcmFtc1x1MjAxOXNcbiAgICAgIC8vICAgIGNvbnRyb2xsZXJcdTIwMTlzIHNlcmlhbGl6ZWQgYWJvcnQgcmVhc29uIGFuZCBhblxuICAgICAgLy8gICAgaW1wbGVtZW50YXRpb24tZGVmaW5lZCByZWFsbS5cbiAgICAgIGlmIChpc1JlYWRhYmxlKHN0cmVhbSkpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyLmVycm9yKFxuICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuc2VyaWFsaXplZEFib3J0UmVhc29uXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBpZiBzdHJlYW0gaXMgcmVhZGFibGUsIGVycm9yIHN0cmVhbSB3aXRoIGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGlzUmVhZGFibGUoc3RyZWFtKSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIuZXJyb3IobmV3IFR5cGVFcnJvcigndGVybWluYXRlZCcsIHtcbiAgICAgICAgICBjYXVzZTogaXNFcnJvckxpa2UocmVhc29uKSA/IHJlYXNvbiA6IHVuZGVmaW5lZFxuICAgICAgICB9KSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBJZiBjb25uZWN0aW9uIHVzZXMgSFRUUC8yLCB0aGVuIHRyYW5zbWl0IGFuIFJTVF9TVFJFQU0gZnJhbWUuXG4gICAgLy8gNS4gT3RoZXJ3aXNlLCB0aGUgdXNlciBhZ2VudCBzaG91bGQgY2xvc2UgY29ubmVjdGlvbiB1bmxlc3MgaXQgd291bGQgYmUgYmFkIGZvciBwZXJmb3JtYW5jZSB0byBkbyBzby5cbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveSgpXG4gIH1cblxuICAvLyAyMC4gUmV0dXJuIHJlc3BvbnNlLlxuICByZXR1cm4gcmVzcG9uc2VcblxuICBhc3luYyBmdW5jdGlvbiBkaXNwYXRjaCAoeyBib2R5IH0pIHtcbiAgICBjb25zdCB1cmwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KCcuLi8uLicpLkFnZW50fSAqL1xuICAgIGNvbnN0IGFnZW50ID0gZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kaXNwYXRjaGVyXG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gYWdlbnQuZGlzcGF0Y2goXG4gICAgICB7XG4gICAgICAgIHBhdGg6IHVybC5wYXRobmFtZSArIHVybC5zZWFyY2gsXG4gICAgICAgIG9yaWdpbjogdXJsLm9yaWdpbixcbiAgICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgICAgYm9keTogZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kaXNwYXRjaGVyLmlzTW9ja0FjdGl2ZSA/IHJlcXVlc3QuYm9keSAmJiAocmVxdWVzdC5ib2R5LnNvdXJjZSB8fCByZXF1ZXN0LmJvZHkuc3RyZWFtKSA6IGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHJlcXVlc3QuaGVhZGVyc0xpc3QuZW50cmllcyxcbiAgICAgICAgbWF4UmVkaXJlY3Rpb25zOiAwLFxuICAgICAgICB1cGdyYWRlOiByZXF1ZXN0Lm1vZGUgPT09ICd3ZWJzb2NrZXQnID8gJ3dlYnNvY2tldCcgOiB1bmRlZmluZWRcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJvZHk6IG51bGwsXG4gICAgICAgIGFib3J0OiBudWxsLFxuXG4gICAgICAgIG9uQ29ubmVjdCAoYWJvcnQpIHtcbiAgICAgICAgICAvLyBUT0RPIChmaXgpOiBEbyB3ZSBuZWVkIGNvbm5lY3Rpb24gaGVyZT9cbiAgICAgICAgICBjb25zdCB7IGNvbm5lY3Rpb24gfSA9IGZldGNoUGFyYW1zLmNvbnRyb2xsZXJcblxuICAgICAgICAgIGlmIChjb25uZWN0aW9uLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgYWJvcnQobmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9uKCd0ZXJtaW5hdGVkJywgYWJvcnQpXG4gICAgICAgICAgICB0aGlzLmFib3J0ID0gY29ubmVjdGlvbi5hYm9ydCA9IGFib3J0XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uSGVhZGVycyAoc3RhdHVzLCBoZWFkZXJzTGlzdCwgcmVzdW1lLCBzdGF0dXNUZXh0KSB7XG4gICAgICAgICAgaWYgKHN0YXR1cyA8IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IGNvZGluZ3MgPSBbXVxuICAgICAgICAgIGxldCBsb2NhdGlvbiA9ICcnXG5cbiAgICAgICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuXG4gICAgICAgICAgLy8gRm9yIEgyLCB0aGUgaGVhZGVycyBhcmUgYSBwbGFpbiBKUyBvYmplY3RcbiAgICAgICAgICAvLyBXZSBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZW0gYW5kIGl0ZXJhdGUgYWNjb3JkaW5nbHlcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzTGlzdCkpIHtcbiAgICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgaGVhZGVyc0xpc3QubGVuZ3RoOyBuICs9IDIpIHtcbiAgICAgICAgICAgICAgY29uc3Qga2V5ID0gaGVhZGVyc0xpc3RbbiArIDBdLnRvU3RyaW5nKCdsYXRpbjEnKVxuICAgICAgICAgICAgICBjb25zdCB2YWwgPSBoZWFkZXJzTGlzdFtuICsgMV0udG9TdHJpbmcoJ2xhdGluMScpXG4gICAgICAgICAgICAgIGlmIChrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtZW5jb2RpbmcnKSB7XG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzcyMzEjc2VjdGlvbi0zLjEuMi4xXG4gICAgICAgICAgICAgICAgLy8gXCJBbGwgY29udGVudC1jb2RpbmcgdmFsdWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlLi4uXCJcbiAgICAgICAgICAgICAgICBjb2RpbmdzID0gdmFsLnRvTG93ZXJDYXNlKCkuc3BsaXQoJywnKS5tYXAoKHgpID0+IHgudHJpbSgpKVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSAnbG9jYXRpb24nKSB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb24gPSB2YWxcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGhlYWRlcnNba0hlYWRlcnNMaXN0XS5hcHBlbmQoa2V5LCB2YWwpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhoZWFkZXJzTGlzdClcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsID0gaGVhZGVyc0xpc3Rba2V5XVxuICAgICAgICAgICAgICBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWVuY29kaW5nJykge1xuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMxI3NlY3Rpb24tMy4xLjIuMVxuICAgICAgICAgICAgICAgIC8vIFwiQWxsIGNvbnRlbnQtY29kaW5nIHZhbHVlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZS4uLlwiXG4gICAgICAgICAgICAgICAgY29kaW5ncyA9IHZhbC50b0xvd2VyQ2FzZSgpLnNwbGl0KCcsJykubWFwKCh4KSA9PiB4LnRyaW0oKSkucmV2ZXJzZSgpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09ICdsb2NhdGlvbicpIHtcbiAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IHZhbFxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaGVhZGVyc1trSGVhZGVyc0xpc3RdLmFwcGVuZChrZXksIHZhbClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmJvZHkgPSBuZXcgUmVhZGFibGUoeyByZWFkOiByZXN1bWUgfSlcblxuICAgICAgICAgIGNvbnN0IGRlY29kZXJzID0gW11cblxuICAgICAgICAgIGNvbnN0IHdpbGxGb2xsb3cgPSByZXF1ZXN0LnJlZGlyZWN0ID09PSAnZm9sbG93JyAmJlxuICAgICAgICAgICAgbG9jYXRpb24gJiZcbiAgICAgICAgICAgIHJlZGlyZWN0U3RhdHVzU2V0LmhhcyhzdGF0dXMpXG5cbiAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvQ29udGVudC1FbmNvZGluZ1xuICAgICAgICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0hFQUQnICYmIHJlcXVlc3QubWV0aG9kICE9PSAnQ09OTkVDVCcgJiYgIW51bGxCb2R5U3RhdHVzLmluY2x1ZGVzKHN0YXR1cykgJiYgIXdpbGxGb2xsb3cpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29kaW5nIG9mIGNvZGluZ3MpIHtcbiAgICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzkxMTIuaHRtbCNzZWN0aW9uLTcuMlxuICAgICAgICAgICAgICBpZiAoY29kaW5nID09PSAneC1nemlwJyB8fCBjb2RpbmcgPT09ICdnemlwJykge1xuICAgICAgICAgICAgICAgIGRlY29kZXJzLnB1c2goemxpYi5jcmVhdGVHdW56aXAoe1xuICAgICAgICAgICAgICAgICAgLy8gQmUgbGVzcyBzdHJpY3Qgd2hlbiBkZWNvZGluZyBjb21wcmVzc2VkIHJlc3BvbnNlcywgc2luY2Ugc29tZXRpbWVzXG4gICAgICAgICAgICAgICAgICAvLyBzZXJ2ZXJzIHNlbmQgc2xpZ2h0bHkgaW52YWxpZCByZXNwb25zZXMgdGhhdCBhcmUgc3RpbGwgYWNjZXB0ZWRcbiAgICAgICAgICAgICAgICAgIC8vIGJ5IGNvbW1vbiBicm93c2Vycy5cbiAgICAgICAgICAgICAgICAgIC8vIEFsd2F5cyB1c2luZyBaX1NZTkNfRkxVU0ggaXMgd2hhdCBjVVJMIGRvZXMuXG4gICAgICAgICAgICAgICAgICBmbHVzaDogemxpYi5jb25zdGFudHMuWl9TWU5DX0ZMVVNILFxuICAgICAgICAgICAgICAgICAgZmluaXNoRmx1c2g6IHpsaWIuY29uc3RhbnRzLlpfU1lOQ19GTFVTSFxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGluZyA9PT0gJ2RlZmxhdGUnKSB7XG4gICAgICAgICAgICAgICAgZGVjb2RlcnMucHVzaCh6bGliLmNyZWF0ZUluZmxhdGUoKSlcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RpbmcgPT09ICdicicpIHtcbiAgICAgICAgICAgICAgICBkZWNvZGVycy5wdXNoKHpsaWIuY3JlYXRlQnJvdGxpRGVjb21wcmVzcygpKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlY29kZXJzLmxlbmd0aCA9IDBcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICBzdGF0dXNUZXh0LFxuICAgICAgICAgICAgaGVhZGVyc0xpc3Q6IGhlYWRlcnNba0hlYWRlcnNMaXN0XSxcbiAgICAgICAgICAgIGJvZHk6IGRlY29kZXJzLmxlbmd0aFxuICAgICAgICAgICAgICA/IHBpcGVsaW5lKHRoaXMuYm9keSwgLi4uZGVjb2RlcnMsICgpID0+IHsgfSlcbiAgICAgICAgICAgICAgOiB0aGlzLmJvZHkub24oJ2Vycm9yJywgKCkgPT4ge30pXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH0sXG5cbiAgICAgICAgb25EYXRhIChjaHVuaykge1xuICAgICAgICAgIGlmIChmZXRjaFBhcmFtcy5jb250cm9sbGVyLmR1bXApIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDEuIElmIG9uZSBvciBtb3JlIGJ5dGVzIGhhdmUgYmVlbiB0cmFuc21pdHRlZCBmcm9tIHJlc3BvbnNlXHUyMDE5c1xuICAgICAgICAgIC8vIG1lc3NhZ2UgYm9keSwgdGhlbjpcblxuICAgICAgICAgIC8vICAxLiBMZXQgYnl0ZXMgYmUgdGhlIHRyYW5zbWl0dGVkIGJ5dGVzLlxuICAgICAgICAgIGNvbnN0IGJ5dGVzID0gY2h1bmtcblxuICAgICAgICAgIC8vICAyLiBMZXQgY29kaW5ncyBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgaGVhZGVyIGxpc3QgdmFsdWVzXG4gICAgICAgICAgLy8gIGdpdmVuIGBDb250ZW50LUVuY29kaW5nYCBhbmQgcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgICAgICAgIC8vICBTZWUgcHVsbEFsZ29yaXRobS5cblxuICAgICAgICAgIC8vICAzLiBJbmNyZWFzZSB0aW1pbmdJbmZvXHUyMDE5cyBlbmNvZGVkIGJvZHkgc2l6ZSBieSBieXRlc1x1MjAxOXMgbGVuZ3RoLlxuICAgICAgICAgIHRpbWluZ0luZm8uZW5jb2RlZEJvZHlTaXplICs9IGJ5dGVzLmJ5dGVMZW5ndGhcblxuICAgICAgICAgIC8vICA0LiBTZWUgcHVsbEFsZ29yaXRobS4uLlxuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuYm9keS5wdXNoKGJ5dGVzKVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uQ29tcGxldGUgKCkge1xuICAgICAgICAgIGlmICh0aGlzLmFib3J0KSB7XG4gICAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9mZigndGVybWluYXRlZCcsIHRoaXMuYWJvcnQpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5lbmRlZCA9IHRydWVcblxuICAgICAgICAgIHRoaXMuYm9keS5wdXNoKG51bGwpXG4gICAgICAgIH0sXG5cbiAgICAgICAgb25FcnJvciAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAodGhpcy5hYm9ydCkge1xuICAgICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5vZmYoJ3Rlcm1pbmF0ZWQnLCB0aGlzLmFib3J0KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuYm9keT8uZGVzdHJveShlcnJvcilcblxuICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIudGVybWluYXRlKGVycm9yKVxuXG4gICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uVXBncmFkZSAoc3RhdHVzLCBoZWFkZXJzTGlzdCwgc29ja2V0KSB7XG4gICAgICAgICAgaWYgKHN0YXR1cyAhPT0gMTAxKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuXG4gICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBoZWFkZXJzTGlzdC5sZW5ndGg7IG4gKz0gMikge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gaGVhZGVyc0xpc3RbbiArIDBdLnRvU3RyaW5nKCdsYXRpbjEnKVxuICAgICAgICAgICAgY29uc3QgdmFsID0gaGVhZGVyc0xpc3RbbiArIDFdLnRvU3RyaW5nKCdsYXRpbjEnKVxuXG4gICAgICAgICAgICBoZWFkZXJzW2tIZWFkZXJzTGlzdF0uYXBwZW5kKGtleSwgdmFsKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dDogU1RBVFVTX0NPREVTW3N0YXR1c10sXG4gICAgICAgICAgICBoZWFkZXJzTGlzdDogaGVhZGVyc1trSGVhZGVyc0xpc3RdLFxuICAgICAgICAgICAgc29ja2V0XG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBmZXRjaCxcbiAgRmV0Y2gsXG4gIGZldGNoaW5nLFxuICBmaW5hbGl6ZUFuZFJlcG9ydFRpbWluZ1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga1N0YXRlOiBTeW1ib2woJ0ZpbGVSZWFkZXIgc3RhdGUnKSxcbiAga1Jlc3VsdDogU3ltYm9sKCdGaWxlUmVhZGVyIHJlc3VsdCcpLFxuICBrRXJyb3I6IFN5bWJvbCgnRmlsZVJlYWRlciBlcnJvcicpLFxuICBrTGFzdFByb2dyZXNzRXZlbnRGaXJlZDogU3ltYm9sKCdGaWxlUmVhZGVyIGxhc3QgcHJvZ3Jlc3MgZXZlbnQgZmlyZWQgdGltZXN0YW1wJyksXG4gIGtFdmVudHM6IFN5bWJvbCgnRmlsZVJlYWRlciBldmVudHMnKSxcbiAga0Fib3J0ZWQ6IFN5bWJvbCgnRmlsZVJlYWRlciBhYm9ydGVkJylcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5cbmNvbnN0IGtTdGF0ZSA9IFN5bWJvbCgnUHJvZ3Jlc3NFdmVudCBzdGF0ZScpXG5cbi8qKlxuICogQHNlZSBodHRwczovL3hoci5zcGVjLndoYXR3Zy5vcmcvI3Byb2dyZXNzZXZlbnRcbiAqL1xuY2xhc3MgUHJvZ3Jlc3NFdmVudCBleHRlbmRzIEV2ZW50IHtcbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QgPSB7fSkge1xuICAgIHR5cGUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcodHlwZSlcbiAgICBldmVudEluaXREaWN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUHJvZ3Jlc3NFdmVudEluaXQoZXZlbnRJbml0RGljdCA/PyB7fSlcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG5cbiAgICB0aGlzW2tTdGF0ZV0gPSB7XG4gICAgICBsZW5ndGhDb21wdXRhYmxlOiBldmVudEluaXREaWN0Lmxlbmd0aENvbXB1dGFibGUsXG4gICAgICBsb2FkZWQ6IGV2ZW50SW5pdERpY3QubG9hZGVkLFxuICAgICAgdG90YWw6IGV2ZW50SW5pdERpY3QudG90YWxcbiAgICB9XG4gIH1cblxuICBnZXQgbGVuZ3RoQ29tcHV0YWJsZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUHJvZ3Jlc3NFdmVudClcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubGVuZ3RoQ29tcHV0YWJsZVxuICB9XG5cbiAgZ2V0IGxvYWRlZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUHJvZ3Jlc3NFdmVudClcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubG9hZGVkXG4gIH1cblxuICBnZXQgdG90YWwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFByb2dyZXNzRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnRvdGFsXG4gIH1cbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuUHJvZ3Jlc3NFdmVudEluaXQgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBrZXk6ICdsZW5ndGhDb21wdXRhYmxlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnbG9hZGVkJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nIGxvbmcnXSxcbiAgICBkZWZhdWx0VmFsdWU6IDBcbiAgfSxcbiAge1xuICAgIGtleTogJ3RvdGFsJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nIGxvbmcnXSxcbiAgICBkZWZhdWx0VmFsdWU6IDBcbiAgfSxcbiAge1xuICAgIGtleTogJ2J1YmJsZXMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjYW5jZWxhYmxlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnY29tcG9zZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBQcm9ncmVzc0V2ZW50XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1lbmNvZGluZy1nZXRcbiAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gbGFiZWxcbiAqL1xuZnVuY3Rpb24gZ2V0RW5jb2RpbmcgKGxhYmVsKSB7XG4gIGlmICghbGFiZWwpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyAxLiBSZW1vdmUgYW55IGxlYWRpbmcgYW5kIHRyYWlsaW5nIEFTQ0lJIHdoaXRlc3BhY2UgZnJvbSBsYWJlbC5cbiAgLy8gMi4gSWYgbGFiZWwgaXMgYW4gQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3IgYW55IG9mIHRoZVxuICAvLyAgICBsYWJlbHMgbGlzdGVkIGluIHRoZSB0YWJsZSBiZWxvdywgdGhlbiByZXR1cm4gdGhlXG4gIC8vICAgIGNvcnJlc3BvbmRpbmcgZW5jb2Rpbmc7IG90aGVyd2lzZSByZXR1cm4gZmFpbHVyZS5cbiAgc3dpdGNoIChsYWJlbC50cmltKCkudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ3VuaWNvZGUtMS0xLXV0Zi04JzpcbiAgICBjYXNlICd1bmljb2RlMTF1dGY4JzpcbiAgICBjYXNlICd1bmljb2RlMjB1dGY4JzpcbiAgICBjYXNlICd1dGYtOCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAneC11bmljb2RlMjB1dGY4JzpcbiAgICAgIHJldHVybiAnVVRGLTgnXG4gICAgY2FzZSAnODY2JzpcbiAgICBjYXNlICdjcDg2Nic6XG4gICAgY2FzZSAnY3NpYm04NjYnOlxuICAgIGNhc2UgJ2libTg2Nic6XG4gICAgICByZXR1cm4gJ0lCTTg2NidcbiAgICBjYXNlICdjc2lzb2xhdGluMic6XG4gICAgY2FzZSAnaXNvLTg4NTktMic6XG4gICAgY2FzZSAnaXNvLWlyLTEwMSc6XG4gICAgY2FzZSAnaXNvODg1OS0yJzpcbiAgICBjYXNlICdpc284ODU5Mic6XG4gICAgY2FzZSAnaXNvXzg4NTktMic6XG4gICAgY2FzZSAnaXNvXzg4NTktMjoxOTg3JzpcbiAgICBjYXNlICdsMic6XG4gICAgY2FzZSAnbGF0aW4yJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMidcbiAgICBjYXNlICdjc2lzb2xhdGluMyc6XG4gICAgY2FzZSAnaXNvLTg4NTktMyc6XG4gICAgY2FzZSAnaXNvLWlyLTEwOSc6XG4gICAgY2FzZSAnaXNvODg1OS0zJzpcbiAgICBjYXNlICdpc284ODU5Myc6XG4gICAgY2FzZSAnaXNvXzg4NTktMyc6XG4gICAgY2FzZSAnaXNvXzg4NTktMzoxOTg4JzpcbiAgICBjYXNlICdsMyc6XG4gICAgY2FzZSAnbGF0aW4zJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMydcbiAgICBjYXNlICdjc2lzb2xhdGluNCc6XG4gICAgY2FzZSAnaXNvLTg4NTktNCc6XG4gICAgY2FzZSAnaXNvLWlyLTExMCc6XG4gICAgY2FzZSAnaXNvODg1OS00JzpcbiAgICBjYXNlICdpc284ODU5NCc6XG4gICAgY2FzZSAnaXNvXzg4NTktNCc6XG4gICAgY2FzZSAnaXNvXzg4NTktNDoxOTg4JzpcbiAgICBjYXNlICdsNCc6XG4gICAgY2FzZSAnbGF0aW40JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktNCdcbiAgICBjYXNlICdjc2lzb2xhdGluY3lyaWxsaWMnOlxuICAgIGNhc2UgJ2N5cmlsbGljJzpcbiAgICBjYXNlICdpc28tODg1OS01JzpcbiAgICBjYXNlICdpc28taXItMTQ0JzpcbiAgICBjYXNlICdpc284ODU5LTUnOlxuICAgIGNhc2UgJ2lzbzg4NTk1JzpcbiAgICBjYXNlICdpc29fODg1OS01JzpcbiAgICBjYXNlICdpc29fODg1OS01OjE5ODgnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS01J1xuICAgIGNhc2UgJ2FyYWJpYyc6XG4gICAgY2FzZSAnYXNtby03MDgnOlxuICAgIGNhc2UgJ2NzaXNvODg1OTZlJzpcbiAgICBjYXNlICdjc2lzbzg4NTk2aSc6XG4gICAgY2FzZSAnY3Npc29sYXRpbmFyYWJpYyc6XG4gICAgY2FzZSAnZWNtYS0xMTQnOlxuICAgIGNhc2UgJ2lzby04ODU5LTYnOlxuICAgIGNhc2UgJ2lzby04ODU5LTYtZSc6XG4gICAgY2FzZSAnaXNvLTg4NTktNi1pJzpcbiAgICBjYXNlICdpc28taXItMTI3JzpcbiAgICBjYXNlICdpc284ODU5LTYnOlxuICAgIGNhc2UgJ2lzbzg4NTk2JzpcbiAgICBjYXNlICdpc29fODg1OS02JzpcbiAgICBjYXNlICdpc29fODg1OS02OjE5ODcnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS02J1xuICAgIGNhc2UgJ2NzaXNvbGF0aW5ncmVlayc6XG4gICAgY2FzZSAnZWNtYS0xMTgnOlxuICAgIGNhc2UgJ2Vsb3RfOTI4JzpcbiAgICBjYXNlICdncmVlayc6XG4gICAgY2FzZSAnZ3JlZWs4JzpcbiAgICBjYXNlICdpc28tODg1OS03JzpcbiAgICBjYXNlICdpc28taXItMTI2JzpcbiAgICBjYXNlICdpc284ODU5LTcnOlxuICAgIGNhc2UgJ2lzbzg4NTk3JzpcbiAgICBjYXNlICdpc29fODg1OS03JzpcbiAgICBjYXNlICdpc29fODg1OS03OjE5ODcnOlxuICAgIGNhc2UgJ3N1bl9ldV9ncmVlayc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTcnXG4gICAgY2FzZSAnY3Npc284ODU5OGUnOlxuICAgIGNhc2UgJ2NzaXNvbGF0aW5oZWJyZXcnOlxuICAgIGNhc2UgJ2hlYnJldyc6XG4gICAgY2FzZSAnaXNvLTg4NTktOCc6XG4gICAgY2FzZSAnaXNvLTg4NTktOC1lJzpcbiAgICBjYXNlICdpc28taXItMTM4JzpcbiAgICBjYXNlICdpc284ODU5LTgnOlxuICAgIGNhc2UgJ2lzbzg4NTk4JzpcbiAgICBjYXNlICdpc29fODg1OS04JzpcbiAgICBjYXNlICdpc29fODg1OS04OjE5ODgnOlxuICAgIGNhc2UgJ3Zpc3VhbCc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTgnXG4gICAgY2FzZSAnY3Npc284ODU5OGknOlxuICAgIGNhc2UgJ2lzby04ODU5LTgtaSc6XG4gICAgY2FzZSAnbG9naWNhbCc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTgtSSdcbiAgICBjYXNlICdjc2lzb2xhdGluNic6XG4gICAgY2FzZSAnaXNvLTg4NTktMTAnOlxuICAgIGNhc2UgJ2lzby1pci0xNTcnOlxuICAgIGNhc2UgJ2lzbzg4NTktMTAnOlxuICAgIGNhc2UgJ2lzbzg4NTkxMCc6XG4gICAgY2FzZSAnbDYnOlxuICAgIGNhc2UgJ2xhdGluNic6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTEwJ1xuICAgIGNhc2UgJ2lzby04ODU5LTEzJzpcbiAgICBjYXNlICdpc284ODU5LTEzJzpcbiAgICBjYXNlICdpc284ODU5MTMnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0xMydcbiAgICBjYXNlICdpc28tODg1OS0xNCc6XG4gICAgY2FzZSAnaXNvODg1OS0xNCc6XG4gICAgY2FzZSAnaXNvODg1OTE0JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTQnXG4gICAgY2FzZSAnY3Npc29sYXRpbjknOlxuICAgIGNhc2UgJ2lzby04ODU5LTE1JzpcbiAgICBjYXNlICdpc284ODU5LTE1JzpcbiAgICBjYXNlICdpc284ODU5MTUnOlxuICAgIGNhc2UgJ2lzb184ODU5LTE1JzpcbiAgICBjYXNlICdsOSc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTE1J1xuICAgIGNhc2UgJ2lzby04ODU5LTE2JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTYnXG4gICAgY2FzZSAnY3Nrb2k4cic6XG4gICAgY2FzZSAna29pJzpcbiAgICBjYXNlICdrb2k4JzpcbiAgICBjYXNlICdrb2k4LXInOlxuICAgIGNhc2UgJ2tvaThfcic6XG4gICAgICByZXR1cm4gJ0tPSTgtUidcbiAgICBjYXNlICdrb2k4LXJ1JzpcbiAgICBjYXNlICdrb2k4LXUnOlxuICAgICAgcmV0dXJuICdLT0k4LVUnXG4gICAgY2FzZSAnY3NtYWNpbnRvc2gnOlxuICAgIGNhc2UgJ21hYyc6XG4gICAgY2FzZSAnbWFjaW50b3NoJzpcbiAgICBjYXNlICd4LW1hYy1yb21hbic6XG4gICAgICByZXR1cm4gJ21hY2ludG9zaCdcbiAgICBjYXNlICdpc28tODg1OS0xMSc6XG4gICAgY2FzZSAnaXNvODg1OS0xMSc6XG4gICAgY2FzZSAnaXNvODg1OTExJzpcbiAgICBjYXNlICd0aXMtNjIwJzpcbiAgICBjYXNlICd3aW5kb3dzLTg3NCc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtODc0J1xuICAgIGNhc2UgJ2NwMTI1MCc6XG4gICAgY2FzZSAnd2luZG93cy0xMjUwJzpcbiAgICBjYXNlICd4LWNwMTI1MCc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1MCdcbiAgICBjYXNlICdjcDEyNTEnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1MSc6XG4gICAgY2FzZSAneC1jcDEyNTEnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTEnXG4gICAgY2FzZSAnYW5zaV94My40LTE5NjgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdjcDEyNTInOlxuICAgIGNhc2UgJ2NwODE5JzpcbiAgICBjYXNlICdjc2lzb2xhdGluMSc6XG4gICAgY2FzZSAnaWJtODE5JzpcbiAgICBjYXNlICdpc28tODg1OS0xJzpcbiAgICBjYXNlICdpc28taXItMTAwJzpcbiAgICBjYXNlICdpc284ODU5LTEnOlxuICAgIGNhc2UgJ2lzbzg4NTkxJzpcbiAgICBjYXNlICdpc29fODg1OS0xJzpcbiAgICBjYXNlICdpc29fODg1OS0xOjE5ODcnOlxuICAgIGNhc2UgJ2wxJzpcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ3VzLWFzY2lpJzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTInOlxuICAgIGNhc2UgJ3gtY3AxMjUyJzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjUyJ1xuICAgIGNhc2UgJ2NwMTI1Myc6XG4gICAgY2FzZSAnd2luZG93cy0xMjUzJzpcbiAgICBjYXNlICd4LWNwMTI1Myc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1MydcbiAgICBjYXNlICdjcDEyNTQnOlxuICAgIGNhc2UgJ2NzaXNvbGF0aW41JzpcbiAgICBjYXNlICdpc28tODg1OS05JzpcbiAgICBjYXNlICdpc28taXItMTQ4JzpcbiAgICBjYXNlICdpc284ODU5LTknOlxuICAgIGNhc2UgJ2lzbzg4NTk5JzpcbiAgICBjYXNlICdpc29fODg1OS05JzpcbiAgICBjYXNlICdpc29fODg1OS05OjE5ODknOlxuICAgIGNhc2UgJ2w1JzpcbiAgICBjYXNlICdsYXRpbjUnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1NCc6XG4gICAgY2FzZSAneC1jcDEyNTQnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTQnXG4gICAgY2FzZSAnY3AxMjU1JzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTUnOlxuICAgIGNhc2UgJ3gtY3AxMjU1JzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjU1J1xuICAgIGNhc2UgJ2NwMTI1Nic6XG4gICAgY2FzZSAnd2luZG93cy0xMjU2JzpcbiAgICBjYXNlICd4LWNwMTI1Nic6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1NidcbiAgICBjYXNlICdjcDEyNTcnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1Nyc6XG4gICAgY2FzZSAneC1jcDEyNTcnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTcnXG4gICAgY2FzZSAnY3AxMjU4JzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTgnOlxuICAgIGNhc2UgJ3gtY3AxMjU4JzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjU4J1xuICAgIGNhc2UgJ3gtbWFjLWN5cmlsbGljJzpcbiAgICBjYXNlICd4LW1hYy11a3JhaW5pYW4nOlxuICAgICAgcmV0dXJuICd4LW1hYy1jeXJpbGxpYydcbiAgICBjYXNlICdjaGluZXNlJzpcbiAgICBjYXNlICdjc2diMjMxMic6XG4gICAgY2FzZSAnY3Npc281OGdiMjMxMjgwJzpcbiAgICBjYXNlICdnYjIzMTInOlxuICAgIGNhc2UgJ2diXzIzMTInOlxuICAgIGNhc2UgJ2diXzIzMTItODAnOlxuICAgIGNhc2UgJ2diayc6XG4gICAgY2FzZSAnaXNvLWlyLTU4JzpcbiAgICBjYXNlICd4LWdiayc6XG4gICAgICByZXR1cm4gJ0dCSydcbiAgICBjYXNlICdnYjE4MDMwJzpcbiAgICAgIHJldHVybiAnZ2IxODAzMCdcbiAgICBjYXNlICdiaWc1JzpcbiAgICBjYXNlICdiaWc1LWhrc2NzJzpcbiAgICBjYXNlICdjbi1iaWc1JzpcbiAgICBjYXNlICdjc2JpZzUnOlxuICAgIGNhc2UgJ3gteC1iaWc1JzpcbiAgICAgIHJldHVybiAnQmlnNSdcbiAgICBjYXNlICdjc2V1Y3BrZGZtdGphcGFuZXNlJzpcbiAgICBjYXNlICdldWMtanAnOlxuICAgIGNhc2UgJ3gtZXVjLWpwJzpcbiAgICAgIHJldHVybiAnRVVDLUpQJ1xuICAgIGNhc2UgJ2NzaXNvMjAyMmpwJzpcbiAgICBjYXNlICdpc28tMjAyMi1qcCc6XG4gICAgICByZXR1cm4gJ0lTTy0yMDIyLUpQJ1xuICAgIGNhc2UgJ2Nzc2hpZnRqaXMnOlxuICAgIGNhc2UgJ21zOTMyJzpcbiAgICBjYXNlICdtc19rYW5qaSc6XG4gICAgY2FzZSAnc2hpZnQtamlzJzpcbiAgICBjYXNlICdzaGlmdF9qaXMnOlxuICAgIGNhc2UgJ3NqaXMnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMzFqJzpcbiAgICBjYXNlICd4LXNqaXMnOlxuICAgICAgcmV0dXJuICdTaGlmdF9KSVMnXG4gICAgY2FzZSAnY3NldWNrcic6XG4gICAgY2FzZSAnY3Nrc2M1NjAxMTk4Nyc6XG4gICAgY2FzZSAnZXVjLWtyJzpcbiAgICBjYXNlICdpc28taXItMTQ5JzpcbiAgICBjYXNlICdrb3JlYW4nOlxuICAgIGNhc2UgJ2tzX2NfNTYwMS0xOTg3JzpcbiAgICBjYXNlICdrc19jXzU2MDEtMTk4OSc6XG4gICAgY2FzZSAna3NjNTYwMSc6XG4gICAgY2FzZSAna3NjXzU2MDEnOlxuICAgIGNhc2UgJ3dpbmRvd3MtOTQ5JzpcbiAgICAgIHJldHVybiAnRVVDLUtSJ1xuICAgIGNhc2UgJ2NzaXNvMjAyMmtyJzpcbiAgICBjYXNlICdoei1nYi0yMzEyJzpcbiAgICBjYXNlICdpc28tMjAyMi1jbic6XG4gICAgY2FzZSAnaXNvLTIwMjItY24tZXh0JzpcbiAgICBjYXNlICdpc28tMjAyMi1rcic6XG4gICAgY2FzZSAncmVwbGFjZW1lbnQnOlxuICAgICAgcmV0dXJuICdyZXBsYWNlbWVudCdcbiAgICBjYXNlICd1bmljb2RlZmZmZSc6XG4gICAgY2FzZSAndXRmLTE2YmUnOlxuICAgICAgcmV0dXJuICdVVEYtMTZCRSdcbiAgICBjYXNlICdjc3VuaWNvZGUnOlxuICAgIGNhc2UgJ2lzby0xMDY0Ni11Y3MtMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3VuaWNvZGUnOlxuICAgIGNhc2UgJ3VuaWNvZGVmZWZmJzpcbiAgICBjYXNlICd1dGYtMTYnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiAnVVRGLTE2TEUnXG4gICAgY2FzZSAneC11c2VyLWRlZmluZWQnOlxuICAgICAgcmV0dXJuICd4LXVzZXItZGVmaW5lZCdcbiAgICBkZWZhdWx0OiByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldEVuY29kaW5nXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAga1N0YXRlLFxuICBrRXJyb3IsXG4gIGtSZXN1bHQsXG4gIGtBYm9ydGVkLFxuICBrTGFzdFByb2dyZXNzRXZlbnRGaXJlZFxufSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IFByb2dyZXNzRXZlbnQgfSA9IHJlcXVpcmUoJy4vcHJvZ3Jlc3NldmVudCcpXG5jb25zdCB7IGdldEVuY29kaW5nIH0gPSByZXF1aXJlKCcuL2VuY29kaW5nJylcbmNvbnN0IHsgRE9NRXhjZXB0aW9uIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9jb25zdGFudHMnKVxuY29uc3QgeyBzZXJpYWxpemVBTWltZVR5cGUsIHBhcnNlTUlNRVR5cGUgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2RhdGFVUkwnKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCB7IFN0cmluZ0RlY29kZXIgfSA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyJylcbmNvbnN0IHsgYnRvYSB9ID0gcmVxdWlyZSgnYnVmZmVyJylcblxuLyoqIEB0eXBlIHtQcm9wZXJ0eURlc2NyaXB0b3J9ICovXG5jb25zdCBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzID0ge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICB3cml0YWJsZTogZmFsc2UsXG4gIGNvbmZpZ3VyYWJsZTogZmFsc2Vcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNyZWFkT3BlcmF0aW9uXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9maWxlcmVhZGVyJykuRmlsZVJlYWRlcn0gZnJcbiAqIEBwYXJhbSB7aW1wb3J0KCdidWZmZXInKS5CbG9ifSBibG9iXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtzdHJpbmc/fSBlbmNvZGluZ05hbWVcbiAqL1xuZnVuY3Rpb24gcmVhZE9wZXJhdGlvbiAoZnIsIGJsb2IsIHR5cGUsIGVuY29kaW5nTmFtZSkge1xuICAvLyAxLiBJZiBmclx1MjAxOXMgc3RhdGUgaXMgXCJsb2FkaW5nXCIsIHRocm93IGFuIEludmFsaWRTdGF0ZUVycm9yXG4gIC8vICAgIERPTUV4Y2VwdGlvbi5cbiAgaWYgKGZyW2tTdGF0ZV0gPT09ICdsb2FkaW5nJykge1xuICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ0ludmFsaWQgc3RhdGUnLCAnSW52YWxpZFN0YXRlRXJyb3InKVxuICB9XG5cbiAgLy8gMi4gU2V0IGZyXHUyMDE5cyBzdGF0ZSB0byBcImxvYWRpbmdcIi5cbiAgZnJba1N0YXRlXSA9ICdsb2FkaW5nJ1xuXG4gIC8vIDMuIFNldCBmclx1MjAxOXMgcmVzdWx0IHRvIG51bGwuXG4gIGZyW2tSZXN1bHRdID0gbnVsbFxuXG4gIC8vIDQuIFNldCBmclx1MjAxOXMgZXJyb3IgdG8gbnVsbC5cbiAgZnJba0Vycm9yXSA9IG51bGxcblxuICAvLyA1LiBMZXQgc3RyZWFtIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyBnZXQgc3RyZWFtIG9uIGJsb2IuXG4gIC8qKiBAdHlwZSB7aW1wb3J0KCdzdHJlYW0vd2ViJykuUmVhZGFibGVTdHJlYW19ICovXG4gIGNvbnN0IHN0cmVhbSA9IGJsb2Iuc3RyZWFtKClcblxuICAvLyA2LiBMZXQgcmVhZGVyIGJlIHRoZSByZXN1bHQgb2YgZ2V0dGluZyBhIHJlYWRlciBmcm9tIHN0cmVhbS5cbiAgY29uc3QgcmVhZGVyID0gc3RyZWFtLmdldFJlYWRlcigpXG5cbiAgLy8gNy4gTGV0IGJ5dGVzIGJlIGFuIGVtcHR5IGJ5dGUgc2VxdWVuY2UuXG4gIC8qKiBAdHlwZSB7VWludDhBcnJheVtdfSAqL1xuICBjb25zdCBieXRlcyA9IFtdXG5cbiAgLy8gOC4gTGV0IGNodW5rUHJvbWlzZSBiZSB0aGUgcmVzdWx0IG9mIHJlYWRpbmcgYSBjaHVuayBmcm9tXG4gIC8vICAgIHN0cmVhbSB3aXRoIHJlYWRlci5cbiAgbGV0IGNodW5rUHJvbWlzZSA9IHJlYWRlci5yZWFkKClcblxuICAvLyA5LiBMZXQgaXNGaXJzdENodW5rIGJlIHRydWUuXG4gIGxldCBpc0ZpcnN0Q2h1bmsgPSB0cnVlXG5cbiAgLy8gMTAuIEluIHBhcmFsbGVsLCB3aGlsZSB0cnVlOlxuICAvLyBOb3RlOiBcIkluIHBhcmFsbGVsXCIganVzdCBtZWFucyBub24tYmxvY2tpbmdcbiAgLy8gTm90ZSAyOiByZWFkT3BlcmF0aW9uIGl0c2VsZiBjYW5ub3QgYmUgYXN5bmMgYXMgZG91YmxlXG4gIC8vIHJlYWRpbmcgdGhlIGJvZHkgd291bGQgdGhlbiByZWplY3QgdGhlIHByb21pc2UsIGluc3RlYWRcbiAgLy8gb2YgdGhyb3dpbmcgYW4gZXJyb3IuXG4gIDsoYXN5bmMgKCkgPT4ge1xuICAgIHdoaWxlICghZnJba0Fib3J0ZWRdKSB7XG4gICAgICAvLyAxLiBXYWl0IGZvciBjaHVua1Byb21pc2UgdG8gYmUgZnVsZmlsbGVkIG9yIHJlamVjdGVkLlxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgY2h1bmtQcm9taXNlXG5cbiAgICAgICAgLy8gMi4gSWYgY2h1bmtQcm9taXNlIGlzIGZ1bGZpbGxlZCwgYW5kIGlzRmlyc3RDaHVuayBpc1xuICAgICAgICAvLyAgICB0cnVlLCBxdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZFxuICAgICAgICAvLyAgICBsb2Fkc3RhcnQgYXQgZnIuXG4gICAgICAgIGlmIChpc0ZpcnN0Q2h1bmsgJiYgIWZyW2tBYm9ydGVkXSkge1xuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnbG9hZHN0YXJ0JywgZnIpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDMuIFNldCBpc0ZpcnN0Q2h1bmsgdG8gZmFsc2UuXG4gICAgICAgIGlzRmlyc3RDaHVuayA9IGZhbHNlXG5cbiAgICAgICAgLy8gNC4gSWYgY2h1bmtQcm9taXNlIGlzIGZ1bGZpbGxlZCB3aXRoIGFuIG9iamVjdCB3aG9zZVxuICAgICAgICAvLyAgICBkb25lIHByb3BlcnR5IGlzIGZhbHNlIGFuZCB3aG9zZSB2YWx1ZSBwcm9wZXJ0eSBpc1xuICAgICAgICAvLyAgICBhIFVpbnQ4QXJyYXkgb2JqZWN0LCBydW4gdGhlc2Ugc3RlcHM6XG4gICAgICAgIGlmICghZG9uZSAmJiB0eXBlcy5pc1VpbnQ4QXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgLy8gMS4gTGV0IGJzIGJlIHRoZSBieXRlIHNlcXVlbmNlIHJlcHJlc2VudGVkIGJ5IHRoZVxuICAgICAgICAgIC8vICAgIFVpbnQ4QXJyYXkgb2JqZWN0LlxuXG4gICAgICAgICAgLy8gMi4gQXBwZW5kIGJzIHRvIGJ5dGVzLlxuICAgICAgICAgIGJ5dGVzLnB1c2godmFsdWUpXG5cbiAgICAgICAgICAvLyAzLiBJZiByb3VnaGx5IDUwbXMgaGF2ZSBwYXNzZWQgc2luY2UgdGhlc2Ugc3RlcHNcbiAgICAgICAgICAvLyAgICB3ZXJlIGxhc3QgaW52b2tlZCwgcXVldWUgYSB0YXNrIHRvIGZpcmUgYVxuICAgICAgICAgIC8vICAgIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBwcm9ncmVzcyBhdCBmci5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoXG4gICAgICAgICAgICAgIGZyW2tMYXN0UHJvZ3Jlc3NFdmVudEZpcmVkXSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgIERhdGUubm93KCkgLSBmcltrTGFzdFByb2dyZXNzRXZlbnRGaXJlZF0gPj0gNTBcbiAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICFmcltrQWJvcnRlZF1cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGZyW2tMYXN0UHJvZ3Jlc3NFdmVudEZpcmVkXSA9IERhdGUubm93KClcbiAgICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdwcm9ncmVzcycsIGZyKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA0LiBTZXQgY2h1bmtQcm9taXNlIHRvIHRoZSByZXN1bHQgb2YgcmVhZGluZyBhXG4gICAgICAgICAgLy8gICAgY2h1bmsgZnJvbSBzdHJlYW0gd2l0aCByZWFkZXIuXG4gICAgICAgICAgY2h1bmtQcm9taXNlID0gcmVhZGVyLnJlYWQoKVxuICAgICAgICB9IGVsc2UgaWYgKGRvbmUpIHtcbiAgICAgICAgICAvLyA1LiBPdGhlcndpc2UsIGlmIGNodW5rUHJvbWlzZSBpcyBmdWxmaWxsZWQgd2l0aCBhblxuICAgICAgICAgIC8vICAgIG9iamVjdCB3aG9zZSBkb25lIHByb3BlcnR5IGlzIHRydWUsIHF1ZXVlIGEgdGFza1xuICAgICAgICAgIC8vICAgIHRvIHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzIGFuZCBhYm9ydCB0aGlzIGFsZ29yaXRobTpcbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICAvLyAxLiBTZXQgZnJcdTIwMTlzIHN0YXRlIHRvIFwiZG9uZVwiLlxuICAgICAgICAgICAgZnJba1N0YXRlXSA9ICdkb25lJ1xuXG4gICAgICAgICAgICAvLyAyLiBMZXQgcmVzdWx0IGJlIHRoZSByZXN1bHQgb2YgcGFja2FnZSBkYXRhIGdpdmVuXG4gICAgICAgICAgICAvLyAgICBieXRlcywgdHlwZSwgYmxvYlx1MjAxOXMgdHlwZSwgYW5kIGVuY29kaW5nTmFtZS5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhY2thZ2VEYXRhKGJ5dGVzLCB0eXBlLCBibG9iLnR5cGUsIGVuY29kaW5nTmFtZSlcblxuICAgICAgICAgICAgICAvLyA0LiBFbHNlOlxuXG4gICAgICAgICAgICAgIGlmIChmcltrQWJvcnRlZF0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIDEuIFNldCBmclx1MjAxOXMgcmVzdWx0IHRvIHJlc3VsdC5cbiAgICAgICAgICAgICAgZnJba1Jlc3VsdF0gPSByZXN1bHRcblxuICAgICAgICAgICAgICAvLyAyLiBGaXJlIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIGxvYWQgYXQgdGhlIGZyLlxuICAgICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2xvYWQnLCBmcilcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIC8vIDMuIElmIHBhY2thZ2UgZGF0YSB0aHJldyBhbiBleGNlcHRpb24gZXJyb3I6XG5cbiAgICAgICAgICAgICAgLy8gMS4gU2V0IGZyXHUyMDE5cyBlcnJvciB0byBlcnJvci5cbiAgICAgICAgICAgICAgZnJba0Vycm9yXSA9IGVycm9yXG5cbiAgICAgICAgICAgICAgLy8gMi4gRmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBlcnJvciBhdCBmci5cbiAgICAgICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdlcnJvcicsIGZyKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyA1LiBJZiBmclx1MjAxOXMgc3RhdGUgaXMgbm90IFwibG9hZGluZ1wiLCBmaXJlIGEgcHJvZ3Jlc3NcbiAgICAgICAgICAgIC8vICAgIGV2ZW50IGNhbGxlZCBsb2FkZW5kIGF0IHRoZSBmci5cbiAgICAgICAgICAgIGlmIChmcltrU3RhdGVdICE9PSAnbG9hZGluZycpIHtcbiAgICAgICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2FkZW5kJywgZnIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChmcltrQWJvcnRlZF0pIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDYuIE90aGVyd2lzZSwgaWYgY2h1bmtQcm9taXNlIGlzIHJlamVjdGVkIHdpdGggYW5cbiAgICAgICAgLy8gICAgZXJyb3IgZXJyb3IsIHF1ZXVlIGEgdGFzayB0byBydW4gdGhlIGZvbGxvd2luZ1xuICAgICAgICAvLyAgICBzdGVwcyBhbmQgYWJvcnQgdGhpcyBhbGdvcml0aG06XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAvLyAxLiBTZXQgZnJcdTIwMTlzIHN0YXRlIHRvIFwiZG9uZVwiLlxuICAgICAgICAgIGZyW2tTdGF0ZV0gPSAnZG9uZSdcblxuICAgICAgICAgIC8vIDIuIFNldCBmclx1MjAxOXMgZXJyb3IgdG8gZXJyb3IuXG4gICAgICAgICAgZnJba0Vycm9yXSA9IGVycm9yXG5cbiAgICAgICAgICAvLyAzLiBGaXJlIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIGVycm9yIGF0IGZyLlxuICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnZXJyb3InLCBmcilcblxuICAgICAgICAgIC8vIDQuIElmIGZyXHUyMDE5cyBzdGF0ZSBpcyBub3QgXCJsb2FkaW5nXCIsIGZpcmUgYSBwcm9ncmVzc1xuICAgICAgICAgIC8vICAgIGV2ZW50IGNhbGxlZCBsb2FkZW5kIGF0IGZyLlxuICAgICAgICAgIGlmIChmcltrU3RhdGVdICE9PSAnbG9hZGluZycpIHtcbiAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnbG9hZGVuZCcsIGZyKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfSkoKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2ZpcmUtYS1wcm9ncmVzcy1ldmVudFxuICogQHNlZSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZXZlbnQtZmlyZVxuICogQHBhcmFtIHtzdHJpbmd9IGUgVGhlIG5hbWUgb2YgdGhlIGV2ZW50XG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9maWxlcmVhZGVyJykuRmlsZVJlYWRlcn0gcmVhZGVyXG4gKi9cbmZ1bmN0aW9uIGZpcmVBUHJvZ3Jlc3NFdmVudCAoZSwgcmVhZGVyKSB7XG4gIC8vIFRoZSBwcm9ncmVzcyBldmVudCBlIGRvZXMgbm90IGJ1YmJsZS4gZS5idWJibGVzIG11c3QgYmUgZmFsc2VcbiAgLy8gVGhlIHByb2dyZXNzIGV2ZW50IGUgaXMgTk9UIGNhbmNlbGFibGUuIGUuY2FuY2VsYWJsZSBtdXN0IGJlIGZhbHNlXG4gIGNvbnN0IGV2ZW50ID0gbmV3IFByb2dyZXNzRXZlbnQoZSwge1xuICAgIGJ1YmJsZXM6IGZhbHNlLFxuICAgIGNhbmNlbGFibGU6IGZhbHNlXG4gIH0pXG5cbiAgcmVhZGVyLmRpc3BhdGNoRXZlbnQoZXZlbnQpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jYmxvYi1wYWNrYWdlLWRhdGFcbiAqIEBwYXJhbSB7VWludDhBcnJheVtdfSBieXRlc1xuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nP30gbWltZVR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nP30gZW5jb2RpbmdOYW1lXG4gKi9cbmZ1bmN0aW9uIHBhY2thZ2VEYXRhIChieXRlcywgdHlwZSwgbWltZVR5cGUsIGVuY29kaW5nTmFtZSkge1xuICAvLyAxLiBBIEJsb2IgaGFzIGFuIGFzc29jaWF0ZWQgcGFja2FnZSBkYXRhIGFsZ29yaXRobSwgZ2l2ZW5cbiAgLy8gICAgYnl0ZXMsIGEgdHlwZSwgYSBvcHRpb25hbCBtaW1lVHlwZSwgYW5kIGEgb3B0aW9uYWxcbiAgLy8gICAgZW5jb2RpbmdOYW1lLCB3aGljaCBzd2l0Y2hlcyBvbiB0eXBlIGFuZCBydW5zIHRoZVxuICAvLyAgICBhc3NvY2lhdGVkIHN0ZXBzOlxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ0RhdGFVUkwnOiB7XG4gICAgICAvLyAxLiBSZXR1cm4gYnl0ZXMgYXMgYSBEYXRhVVJMIFtSRkMyMzk3XSBzdWJqZWN0IHRvXG4gICAgICAvLyAgICB0aGUgY29uc2lkZXJhdGlvbnMgYmVsb3c6XG4gICAgICAvLyAgKiBVc2UgbWltZVR5cGUgYXMgcGFydCBvZiB0aGUgRGF0YSBVUkwgaWYgaXQgaXNcbiAgICAgIC8vICAgIGF2YWlsYWJsZSBpbiBrZWVwaW5nIHdpdGggdGhlIERhdGEgVVJMXG4gICAgICAvLyAgICBzcGVjaWZpY2F0aW9uIFtSRkMyMzk3XS5cbiAgICAgIC8vICAqIElmIG1pbWVUeXBlIGlzIG5vdCBhdmFpbGFibGUgcmV0dXJuIGEgRGF0YSBVUkxcbiAgICAgIC8vICAgIHdpdGhvdXQgYSBtZWRpYS10eXBlLiBbUkZDMjM5N10uXG5cbiAgICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMjM5NyNzZWN0aW9uLTNcbiAgICAgIC8vIGRhdGF1cmwgICAgOj0gXCJkYXRhOlwiIFsgbWVkaWF0eXBlIF0gWyBcIjtiYXNlNjRcIiBdIFwiLFwiIGRhdGFcbiAgICAgIC8vIG1lZGlhdHlwZSAgOj0gWyB0eXBlIFwiL1wiIHN1YnR5cGUgXSAqKCBcIjtcIiBwYXJhbWV0ZXIgKVxuICAgICAgLy8gZGF0YSAgICAgICA6PSAqdXJsY2hhclxuICAgICAgLy8gcGFyYW1ldGVyICA6PSBhdHRyaWJ1dGUgXCI9XCIgdmFsdWVcbiAgICAgIGxldCBkYXRhVVJMID0gJ2RhdGE6J1xuXG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZU1JTUVUeXBlKG1pbWVUeXBlIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKVxuXG4gICAgICBpZiAocGFyc2VkICE9PSAnZmFpbHVyZScpIHtcbiAgICAgICAgZGF0YVVSTCArPSBzZXJpYWxpemVBTWltZVR5cGUocGFyc2VkKVxuICAgICAgfVxuXG4gICAgICBkYXRhVVJMICs9ICc7YmFzZTY0LCdcblxuICAgICAgY29uc3QgZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKCdsYXRpbjEnKVxuXG4gICAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGJ5dGVzKSB7XG4gICAgICAgIGRhdGFVUkwgKz0gYnRvYShkZWNvZGVyLndyaXRlKGNodW5rKSlcbiAgICAgIH1cblxuICAgICAgZGF0YVVSTCArPSBidG9hKGRlY29kZXIuZW5kKCkpXG5cbiAgICAgIHJldHVybiBkYXRhVVJMXG4gICAgfVxuICAgIGNhc2UgJ1RleHQnOiB7XG4gICAgICAvLyAxLiBMZXQgZW5jb2RpbmcgYmUgZmFpbHVyZVxuICAgICAgbGV0IGVuY29kaW5nID0gJ2ZhaWx1cmUnXG5cbiAgICAgIC8vIDIuIElmIHRoZSBlbmNvZGluZ05hbWUgaXMgcHJlc2VudCwgc2V0IGVuY29kaW5nIHRvIHRoZVxuICAgICAgLy8gICAgcmVzdWx0IG9mIGdldHRpbmcgYW4gZW5jb2RpbmcgZnJvbSBlbmNvZGluZ05hbWUuXG4gICAgICBpZiAoZW5jb2RpbmdOYW1lKSB7XG4gICAgICAgIGVuY29kaW5nID0gZ2V0RW5jb2RpbmcoZW5jb2RpbmdOYW1lKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBJZiBlbmNvZGluZyBpcyBmYWlsdXJlLCBhbmQgbWltZVR5cGUgaXMgcHJlc2VudDpcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gJ2ZhaWx1cmUnICYmIG1pbWVUeXBlKSB7XG4gICAgICAgIC8vIDEuIExldCB0eXBlIGJlIHRoZSByZXN1bHQgb2YgcGFyc2UgYSBNSU1FIHR5cGVcbiAgICAgICAgLy8gICAgZ2l2ZW4gbWltZVR5cGUuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBwYXJzZU1JTUVUeXBlKG1pbWVUeXBlKVxuXG4gICAgICAgIC8vIDIuIElmIHR5cGUgaXMgbm90IGZhaWx1cmUsIHNldCBlbmNvZGluZyB0byB0aGUgcmVzdWx0XG4gICAgICAgIC8vICAgIG9mIGdldHRpbmcgYW4gZW5jb2RpbmcgZnJvbSB0eXBlXHUyMDE5cyBwYXJhbWV0ZXJzW1wiY2hhcnNldFwiXS5cbiAgICAgICAgaWYgKHR5cGUgIT09ICdmYWlsdXJlJykge1xuICAgICAgICAgIGVuY29kaW5nID0gZ2V0RW5jb2RpbmcodHlwZS5wYXJhbWV0ZXJzLmdldCgnY2hhcnNldCcpKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIDQuIElmIGVuY29kaW5nIGlzIGZhaWx1cmUsIHRoZW4gc2V0IGVuY29kaW5nIHRvIFVURi04LlxuICAgICAgaWYgKGVuY29kaW5nID09PSAnZmFpbHVyZScpIHtcbiAgICAgICAgZW5jb2RpbmcgPSAnVVRGLTgnXG4gICAgICB9XG5cbiAgICAgIC8vIDUuIERlY29kZSBieXRlcyB1c2luZyBmYWxsYmFjayBlbmNvZGluZyBlbmNvZGluZywgYW5kXG4gICAgICAvLyAgICByZXR1cm4gdGhlIHJlc3VsdC5cbiAgICAgIHJldHVybiBkZWNvZGUoYnl0ZXMsIGVuY29kaW5nKVxuICAgIH1cbiAgICBjYXNlICdBcnJheUJ1ZmZlcic6IHtcbiAgICAgIC8vIFJldHVybiBhIG5ldyBBcnJheUJ1ZmZlciB3aG9zZSBjb250ZW50cyBhcmUgYnl0ZXMuXG4gICAgICBjb25zdCBzZXF1ZW5jZSA9IGNvbWJpbmVCeXRlU2VxdWVuY2VzKGJ5dGVzKVxuXG4gICAgICByZXR1cm4gc2VxdWVuY2UuYnVmZmVyXG4gICAgfVxuICAgIGNhc2UgJ0JpbmFyeVN0cmluZyc6IHtcbiAgICAgIC8vIFJldHVybiBieXRlcyBhcyBhIGJpbmFyeSBzdHJpbmcsIGluIHdoaWNoIGV2ZXJ5IGJ5dGVcbiAgICAgIC8vICBpcyByZXByZXNlbnRlZCBieSBhIGNvZGUgdW5pdCBvZiBlcXVhbCB2YWx1ZSBbMC4uMjU1XS5cbiAgICAgIGxldCBiaW5hcnlTdHJpbmcgPSAnJ1xuXG4gICAgICBjb25zdCBkZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIoJ2xhdGluMScpXG5cbiAgICAgIGZvciAoY29uc3QgY2h1bmsgb2YgYnl0ZXMpIHtcbiAgICAgICAgYmluYXJ5U3RyaW5nICs9IGRlY29kZXIud3JpdGUoY2h1bmspXG4gICAgICB9XG5cbiAgICAgIGJpbmFyeVN0cmluZyArPSBkZWNvZGVyLmVuZCgpXG5cbiAgICAgIHJldHVybiBiaW5hcnlTdHJpbmdcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyNkZWNvZGVcbiAqIEBwYXJhbSB7VWludDhBcnJheVtdfSBpb1F1ZXVlXG4gKiBAcGFyYW0ge3N0cmluZ30gZW5jb2RpbmdcbiAqL1xuZnVuY3Rpb24gZGVjb2RlIChpb1F1ZXVlLCBlbmNvZGluZykge1xuICBjb25zdCBieXRlcyA9IGNvbWJpbmVCeXRlU2VxdWVuY2VzKGlvUXVldWUpXG5cbiAgLy8gMS4gTGV0IEJPTUVuY29kaW5nIGJlIHRoZSByZXN1bHQgb2YgQk9NIHNuaWZmaW5nIGlvUXVldWUuXG4gIGNvbnN0IEJPTUVuY29kaW5nID0gQk9NU25pZmZpbmcoYnl0ZXMpXG5cbiAgbGV0IHNsaWNlID0gMFxuXG4gIC8vIDIuIElmIEJPTUVuY29kaW5nIGlzIG5vbi1udWxsOlxuICBpZiAoQk9NRW5jb2RpbmcgIT09IG51bGwpIHtcbiAgICAvLyAxLiBTZXQgZW5jb2RpbmcgdG8gQk9NRW5jb2RpbmcuXG4gICAgZW5jb2RpbmcgPSBCT01FbmNvZGluZ1xuXG4gICAgLy8gMi4gUmVhZCB0aHJlZSBieXRlcyBmcm9tIGlvUXVldWUsIGlmIEJPTUVuY29kaW5nIGlzXG4gICAgLy8gICAgVVRGLTg7IG90aGVyd2lzZSByZWFkIHR3byBieXRlcy5cbiAgICAvLyAgICAoRG8gbm90aGluZyB3aXRoIHRob3NlIGJ5dGVzLilcbiAgICBzbGljZSA9IEJPTUVuY29kaW5nID09PSAnVVRGLTgnID8gMyA6IDJcbiAgfVxuXG4gIC8vIDMuIFByb2Nlc3MgYSBxdWV1ZSB3aXRoIGFuIGluc3RhbmNlIG9mIGVuY29kaW5nXHUyMDE5c1xuICAvLyAgICBkZWNvZGVyLCBpb1F1ZXVlLCBvdXRwdXQsIGFuZCBcInJlcGxhY2VtZW50XCIuXG5cbiAgLy8gNC4gUmV0dXJuIG91dHB1dC5cblxuICBjb25zdCBzbGljZWQgPSBieXRlcy5zbGljZShzbGljZSlcbiAgcmV0dXJuIG5ldyBUZXh0RGVjb2RlcihlbmNvZGluZykuZGVjb2RlKHNsaWNlZClcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyNib20tc25pZmZcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gaW9RdWV1ZVxuICovXG5mdW5jdGlvbiBCT01TbmlmZmluZyAoaW9RdWV1ZSkge1xuICAvLyAxLiBMZXQgQk9NIGJlIHRoZSByZXN1bHQgb2YgcGVla2luZyAzIGJ5dGVzIGZyb20gaW9RdWV1ZSxcbiAgLy8gICAgY29udmVydGVkIHRvIGEgYnl0ZSBzZXF1ZW5jZS5cbiAgY29uc3QgW2EsIGIsIGNdID0gaW9RdWV1ZVxuXG4gIC8vIDIuIEZvciBlYWNoIG9mIHRoZSByb3dzIGluIHRoZSB0YWJsZSBiZWxvdywgc3RhcnRpbmcgd2l0aFxuICAvLyAgICB0aGUgZmlyc3Qgb25lIGFuZCBnb2luZyBkb3duLCBpZiBCT00gc3RhcnRzIHdpdGggdGhlXG4gIC8vICAgIGJ5dGVzIGdpdmVuIGluIHRoZSBmaXJzdCBjb2x1bW4sIHRoZW4gcmV0dXJuIHRoZVxuICAvLyAgICBlbmNvZGluZyBnaXZlbiBpbiB0aGUgY2VsbCBpbiB0aGUgc2Vjb25kIGNvbHVtbiBvZiB0aGF0XG4gIC8vICAgIHJvdy4gT3RoZXJ3aXNlLCByZXR1cm4gbnVsbC5cbiAgaWYgKGEgPT09IDB4RUYgJiYgYiA9PT0gMHhCQiAmJiBjID09PSAweEJGKSB7XG4gICAgcmV0dXJuICdVVEYtOCdcbiAgfSBlbHNlIGlmIChhID09PSAweEZFICYmIGIgPT09IDB4RkYpIHtcbiAgICByZXR1cm4gJ1VURi0xNkJFJ1xuICB9IGVsc2UgaWYgKGEgPT09IDB4RkYgJiYgYiA9PT0gMHhGRSkge1xuICAgIHJldHVybiAnVVRGLTE2TEUnXG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuXG4vKipcbiAqIEBwYXJhbSB7VWludDhBcnJheVtdfSBzZXF1ZW5jZXNcbiAqL1xuZnVuY3Rpb24gY29tYmluZUJ5dGVTZXF1ZW5jZXMgKHNlcXVlbmNlcykge1xuICBjb25zdCBzaXplID0gc2VxdWVuY2VzLnJlZHVjZSgoYSwgYikgPT4ge1xuICAgIHJldHVybiBhICsgYi5ieXRlTGVuZ3RoXG4gIH0sIDApXG5cbiAgbGV0IG9mZnNldCA9IDBcblxuICByZXR1cm4gc2VxdWVuY2VzLnJlZHVjZSgoYSwgYikgPT4ge1xuICAgIGEuc2V0KGIsIG9mZnNldClcbiAgICBvZmZzZXQgKz0gYi5ieXRlTGVuZ3RoXG4gICAgcmV0dXJuIGFcbiAgfSwgbmV3IFVpbnQ4QXJyYXkoc2l6ZSkpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICByZWFkT3BlcmF0aW9uLFxuICBmaXJlQVByb2dyZXNzRXZlbnRcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICByZWFkT3BlcmF0aW9uLFxuICBmaXJlQVByb2dyZXNzRXZlbnRcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3Qge1xuICBrU3RhdGUsXG4gIGtFcnJvcixcbiAga1Jlc3VsdCxcbiAga0V2ZW50cyxcbiAga0Fib3J0ZWRcbn0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5cbmNsYXNzIEZpbGVSZWFkZXIgZXh0ZW5kcyBFdmVudFRhcmdldCB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICBzdXBlcigpXG5cbiAgICB0aGlzW2tTdGF0ZV0gPSAnZW1wdHknXG4gICAgdGhpc1trUmVzdWx0XSA9IG51bGxcbiAgICB0aGlzW2tFcnJvcl0gPSBudWxsXG4gICAgdGhpc1trRXZlbnRzXSA9IHtcbiAgICAgIGxvYWRlbmQ6IG51bGwsXG4gICAgICBlcnJvcjogbnVsbCxcbiAgICAgIGFib3J0OiBudWxsLFxuICAgICAgbG9hZDogbnVsbCxcbiAgICAgIHByb2dyZXNzOiBudWxsLFxuICAgICAgbG9hZHN0YXJ0OiBudWxsXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2Rmbi1yZWFkQXNBcnJheUJ1ZmZlclxuICAgKiBAcGFyYW0ge2ltcG9ydCgnYnVmZmVyJykuQmxvYn0gYmxvYlxuICAgKi9cbiAgcmVhZEFzQXJyYXlCdWZmZXIgKGJsb2IpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0ZpbGVSZWFkZXIucmVhZEFzQXJyYXlCdWZmZXInIH0pXG5cbiAgICBibG9iID0gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihibG9iLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICAgIC8vIFRoZSByZWFkQXNBcnJheUJ1ZmZlcihibG9iKSBtZXRob2QsIHdoZW4gaW52b2tlZCxcbiAgICAvLyBtdXN0IGluaXRpYXRlIGEgcmVhZCBvcGVyYXRpb24gZm9yIGJsb2Igd2l0aCBBcnJheUJ1ZmZlci5cbiAgICByZWFkT3BlcmF0aW9uKHRoaXMsIGJsb2IsICdBcnJheUJ1ZmZlcicpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jcmVhZEFzQmluYXJ5U3RyaW5nXG4gICAqIEBwYXJhbSB7aW1wb3J0KCdidWZmZXInKS5CbG9ifSBibG9iXG4gICAqL1xuICByZWFkQXNCaW5hcnlTdHJpbmcgKGJsb2IpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0ZpbGVSZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nJyB9KVxuXG4gICAgYmxvYiA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoYmxvYiwgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgICAvLyBUaGUgcmVhZEFzQmluYXJ5U3RyaW5nKGJsb2IpIG1ldGhvZCwgd2hlbiBpbnZva2VkLFxuICAgIC8vIG11c3QgaW5pdGlhdGUgYSByZWFkIG9wZXJhdGlvbiBmb3IgYmxvYiB3aXRoIEJpbmFyeVN0cmluZy5cbiAgICByZWFkT3BlcmF0aW9uKHRoaXMsIGJsb2IsICdCaW5hcnlTdHJpbmcnKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI3JlYWRBc0RhdGFUZXh0XG4gICAqIEBwYXJhbSB7aW1wb3J0KCdidWZmZXInKS5CbG9ifSBibG9iXG4gICAqIEBwYXJhbSB7c3RyaW5nP30gZW5jb2RpbmdcbiAgICovXG4gIHJlYWRBc1RleHQgKGJsb2IsIGVuY29kaW5nID0gdW5kZWZpbmVkKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGaWxlUmVhZGVyLnJlYWRBc1RleHQnIH0pXG5cbiAgICBibG9iID0gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihibG9iLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICAgIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmNvZGluZyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhlbmNvZGluZylcbiAgICB9XG5cbiAgICAvLyBUaGUgcmVhZEFzVGV4dChibG9iLCBlbmNvZGluZykgbWV0aG9kLCB3aGVuIGludm9rZWQsXG4gICAgLy8gbXVzdCBpbml0aWF0ZSBhIHJlYWQgb3BlcmF0aW9uIGZvciBibG9iIHdpdGggVGV4dCBhbmQgZW5jb2RpbmcuXG4gICAgcmVhZE9wZXJhdGlvbih0aGlzLCBibG9iLCAnVGV4dCcsIGVuY29kaW5nKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2Rmbi1yZWFkQXNEYXRhVVJMXG4gICAqIEBwYXJhbSB7aW1wb3J0KCdidWZmZXInKS5CbG9ifSBibG9iXG4gICAqL1xuICByZWFkQXNEYXRhVVJMIChibG9iKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGaWxlUmVhZGVyLnJlYWRBc0RhdGFVUkwnIH0pXG5cbiAgICBibG9iID0gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihibG9iLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICAgIC8vIFRoZSByZWFkQXNEYXRhVVJMKGJsb2IpIG1ldGhvZCwgd2hlbiBpbnZva2VkLCBtdXN0XG4gICAgLy8gaW5pdGlhdGUgYSByZWFkIG9wZXJhdGlvbiBmb3IgYmxvYiB3aXRoIERhdGFVUkwuXG4gICAgcmVhZE9wZXJhdGlvbih0aGlzLCBibG9iLCAnRGF0YVVSTCcpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZGZuLWFib3J0XG4gICAqL1xuICBhYm9ydCAoKSB7XG4gICAgLy8gMS4gSWYgdGhpcydzIHN0YXRlIGlzIFwiZW1wdHlcIiBvciBpZiB0aGlzJ3Mgc3RhdGUgaXNcbiAgICAvLyAgICBcImRvbmVcIiBzZXQgdGhpcydzIHJlc3VsdCB0byBudWxsIGFuZCB0ZXJtaW5hdGVcbiAgICAvLyAgICB0aGlzIGFsZ29yaXRobS5cbiAgICBpZiAodGhpc1trU3RhdGVdID09PSAnZW1wdHknIHx8IHRoaXNba1N0YXRlXSA9PT0gJ2RvbmUnKSB7XG4gICAgICB0aGlzW2tSZXN1bHRdID0gbnVsbFxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhpcydzIHN0YXRlIGlzIFwibG9hZGluZ1wiIHNldCB0aGlzJ3Mgc3RhdGUgdG9cbiAgICAvLyAgICBcImRvbmVcIiBhbmQgc2V0IHRoaXMncyByZXN1bHQgdG8gbnVsbC5cbiAgICBpZiAodGhpc1trU3RhdGVdID09PSAnbG9hZGluZycpIHtcbiAgICAgIHRoaXNba1N0YXRlXSA9ICdkb25lJ1xuICAgICAgdGhpc1trUmVzdWx0XSA9IG51bGxcbiAgICB9XG5cbiAgICAvLyAzLiBJZiB0aGVyZSBhcmUgYW55IHRhc2tzIGZyb20gdGhpcyBvbiB0aGUgZmlsZSByZWFkaW5nXG4gICAgLy8gICAgdGFzayBzb3VyY2UgaW4gYW4gYWZmaWxpYXRlZCB0YXNrIHF1ZXVlLCB0aGVuIHJlbW92ZVxuICAgIC8vICAgIHRob3NlIHRhc2tzIGZyb20gdGhhdCB0YXNrIHF1ZXVlLlxuICAgIHRoaXNba0Fib3J0ZWRdID0gdHJ1ZVxuXG4gICAgLy8gNC4gVGVybWluYXRlIHRoZSBhbGdvcml0aG0gZm9yIHRoZSByZWFkIG1ldGhvZCBiZWluZyBwcm9jZXNzZWQuXG4gICAgLy8gVE9ET1xuXG4gICAgLy8gNS4gRmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBhYm9ydCBhdCB0aGlzLlxuICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnYWJvcnQnLCB0aGlzKVxuXG4gICAgLy8gNi4gSWYgdGhpcydzIHN0YXRlIGlzIG5vdCBcImxvYWRpbmdcIiwgZmlyZSBhIHByb2dyZXNzXG4gICAgLy8gICAgZXZlbnQgY2FsbGVkIGxvYWRlbmQgYXQgdGhpcy5cbiAgICBpZiAodGhpc1trU3RhdGVdICE9PSAnbG9hZGluZycpIHtcbiAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnbG9hZGVuZCcsIHRoaXMpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLXJlYWR5c3RhdGVcbiAgICovXG4gIGdldCByZWFkeVN0YXRlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgc3dpdGNoICh0aGlzW2tTdGF0ZV0pIHtcbiAgICAgIGNhc2UgJ2VtcHR5JzogcmV0dXJuIHRoaXMuRU1QVFlcbiAgICAgIGNhc2UgJ2xvYWRpbmcnOiByZXR1cm4gdGhpcy5MT0FESU5HXG4gICAgICBjYXNlICdkb25lJzogcmV0dXJuIHRoaXMuRE9ORVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkb20tZmlsZXJlYWRlci1yZXN1bHRcbiAgICovXG4gIGdldCByZXN1bHQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICAvLyBUaGUgcmVzdWx0IGF0dHJpYnV0ZVx1MjAxOXMgZ2V0dGVyLCB3aGVuIGludm9rZWQsIG11c3QgcmV0dXJuXG4gICAgLy8gdGhpcydzIHJlc3VsdC5cbiAgICByZXR1cm4gdGhpc1trUmVzdWx0XVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLWVycm9yXG4gICAqL1xuICBnZXQgZXJyb3IgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICAvLyBUaGUgZXJyb3IgYXR0cmlidXRlXHUyMDE5cyBnZXR0ZXIsIHdoZW4gaW52b2tlZCwgbXVzdCByZXR1cm5cbiAgICAvLyB0aGlzJ3MgZXJyb3IuXG4gICAgcmV0dXJuIHRoaXNba0Vycm9yXVxuICB9XG5cbiAgZ2V0IG9ubG9hZGVuZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLmxvYWRlbmRcbiAgfVxuXG4gIHNldCBvbmxvYWRlbmQgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLmxvYWRlbmQpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVuZCcsIHRoaXNba0V2ZW50c10ubG9hZGVuZClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWRlbmQgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdsb2FkZW5kJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0V2ZW50c10ubG9hZGVuZCA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25lcnJvciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLmVycm9yXG4gIH1cblxuICBzZXQgb25lcnJvciAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10uZXJyb3IpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzW2tFdmVudHNdLmVycm9yKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10uZXJyb3IgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmVycm9yID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmxvYWRzdGFydCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLmxvYWRzdGFydFxuICB9XG5cbiAgc2V0IG9ubG9hZHN0YXJ0IChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5sb2Fkc3RhcnQpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZHN0YXJ0JywgdGhpc1trRXZlbnRzXS5sb2Fkc3RhcnQpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2Fkc3RhcnQgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdsb2Fkc3RhcnQnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2Fkc3RhcnQgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9ucHJvZ3Jlc3MgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5wcm9ncmVzc1xuICB9XG5cbiAgc2V0IG9ucHJvZ3Jlc3MgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLnByb2dyZXNzKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpc1trRXZlbnRzXS5wcm9ncmVzcylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLnByb2dyZXNzID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5wcm9ncmVzcyA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25sb2FkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10ubG9hZFxuICB9XG5cbiAgc2V0IG9ubG9hZCAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10ubG9hZCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpc1trRXZlbnRzXS5sb2FkKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10ubG9hZCA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2FkID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmFib3J0ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10uYWJvcnRcbiAgfVxuXG4gIHNldCBvbmFib3J0IChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5hYm9ydCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXNba0V2ZW50c10uYWJvcnQpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5hYm9ydCA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0V2ZW50c10uYWJvcnQgPSBudWxsXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkb20tZmlsZXJlYWRlci1lbXB0eVxuRmlsZVJlYWRlci5FTVBUWSA9IEZpbGVSZWFkZXIucHJvdG90eXBlLkVNUFRZID0gMFxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLWxvYWRpbmdcbkZpbGVSZWFkZXIuTE9BRElORyA9IEZpbGVSZWFkZXIucHJvdG90eXBlLkxPQURJTkcgPSAxXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItZG9uZVxuRmlsZVJlYWRlci5ET05FID0gRmlsZVJlYWRlci5wcm90b3R5cGUuRE9ORSA9IDJcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRmlsZVJlYWRlci5wcm90b3R5cGUsIHtcbiAgRU1QVFk6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIExPQURJTkc6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIERPTkU6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIHJlYWRBc0FycmF5QnVmZmVyOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWFkQXNCaW5hcnlTdHJpbmc6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWRBc1RleHQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWRBc0RhdGFVUkw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGFib3J0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWFkeVN0YXRlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZXN1bHQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGVycm9yOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmxvYWRzdGFydDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25wcm9ncmVzczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25sb2FkOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmFib3J0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmVycm9yOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmxvYWRlbmQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdGaWxlUmVhZGVyJyxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEZpbGVSZWFkZXIsIHtcbiAgRU1QVFk6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIExPQURJTkc6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIERPTkU6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnNcbn0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBGaWxlUmVhZGVyXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrQ29uc3RydWN0OiByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKS5rQ29uc3RydWN0XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IFVSTFNlcmlhbGl6ZXIgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2RhdGFVUkwnKVxuY29uc3QgeyBpc1ZhbGlkSGVhZGVyTmFtZSB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvdXRpbCcpXG5cbi8qKlxuICogQHNlZSBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdXJsLWVxdWFsc1xuICogQHBhcmFtIHtVUkx9IEFcbiAqIEBwYXJhbSB7VVJMfSBCXG4gKiBAcGFyYW0ge2Jvb2xlYW4gfCB1bmRlZmluZWR9IGV4Y2x1ZGVGcmFnbWVudFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHVybEVxdWFscyAoQSwgQiwgZXhjbHVkZUZyYWdtZW50ID0gZmFsc2UpIHtcbiAgY29uc3Qgc2VyaWFsaXplZEEgPSBVUkxTZXJpYWxpemVyKEEsIGV4Y2x1ZGVGcmFnbWVudClcblxuICBjb25zdCBzZXJpYWxpemVkQiA9IFVSTFNlcmlhbGl6ZXIoQiwgZXhjbHVkZUZyYWdtZW50KVxuXG4gIHJldHVybiBzZXJpYWxpemVkQSA9PT0gc2VyaWFsaXplZEJcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJvbWl1bS9jaHJvbWl1bS9ibG9iLzY5NGQyMGQxMzRjYjU1M2Q4ZDg5ZTU1MDBiOTE0ODAxMmIxYmEyOTkvY29udGVudC9icm93c2VyL2NhY2hlX3N0b3JhZ2UvY2FjaGVfc3RvcmFnZV9jYWNoZS5jYyNMMjYwLUwyNjJcbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWFkZXJcbiAqL1xuZnVuY3Rpb24gZmllbGRWYWx1ZXMgKGhlYWRlcikge1xuICBhc3NlcnQoaGVhZGVyICE9PSBudWxsKVxuXG4gIGNvbnN0IHZhbHVlcyA9IFtdXG5cbiAgZm9yIChsZXQgdmFsdWUgb2YgaGVhZGVyLnNwbGl0KCcsJykpIHtcbiAgICB2YWx1ZSA9IHZhbHVlLnRyaW0oKVxuXG4gICAgaWYgKCF2YWx1ZS5sZW5ndGgpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfSBlbHNlIGlmICghaXNWYWxpZEhlYWRlck5hbWUodmFsdWUpKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIHZhbHVlcy5wdXNoKHZhbHVlKVxuICB9XG5cbiAgcmV0dXJuIHZhbHVlc1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdXJsRXF1YWxzLFxuICBmaWVsZFZhbHVlc1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHVybEVxdWFscywgZmllbGRWYWx1ZXM6IGdldEZpZWxkVmFsdWVzIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5LCBpc0Rpc3R1cmJlZCB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsga0hlYWRlcnNMaXN0IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IFJlc3BvbnNlLCBjbG9uZVJlc3BvbnNlIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9yZXNwb25zZScpXG5jb25zdCB7IFJlcXVlc3QgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3JlcXVlc3QnKVxuY29uc3QgeyBrU3RhdGUsIGtIZWFkZXJzLCBrR3VhcmQsIGtSZWFsbSB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvc3ltYm9scycpXG5jb25zdCB7IGZldGNoaW5nIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9pbmRleCcpXG5jb25zdCB7IHVybElzSHR0cEh0dHBzU2NoZW1lLCBjcmVhdGVEZWZlcnJlZFByb21pc2UsIHJlYWRBbGxCeXRlcyB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvdXRpbCcpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuLi9nbG9iYWwnKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2Rmbi1jYWNoZS1iYXRjaC1vcGVyYXRpb25cbiAqIEB0eXBlZGVmIHtPYmplY3R9IENhY2hlQmF0Y2hPcGVyYXRpb25cbiAqIEBwcm9wZXJ0eSB7J2RlbGV0ZScgfCAncHV0J30gdHlwZVxuICogQHByb3BlcnR5IHthbnl9IHJlcXVlc3RcbiAqIEBwcm9wZXJ0eSB7YW55fSByZXNwb25zZVxuICogQHByb3BlcnR5IHtpbXBvcnQoJy4uLy4uL3R5cGVzL2NhY2hlJykuQ2FjaGVRdWVyeU9wdGlvbnN9IG9wdGlvbnNcbiAqL1xuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2Rmbi1yZXF1ZXN0LXJlc3BvbnNlLWxpc3RcbiAqIEB0eXBlZGVmIHtbYW55LCBhbnldW119IHJlcXVlc3RSZXNwb25zZUxpc3RcbiAqL1xuXG5jbGFzcyBDYWNoZSB7XG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkZm4tcmVsZXZhbnQtcmVxdWVzdC1yZXNwb25zZS1saXN0XG4gICAqIEB0eXBlIHtyZXF1ZXN0UmVzcG9uc2VMaXN0fVxuICAgKi9cbiAgI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdFxuXG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICBpZiAoYXJndW1lbnRzWzBdICE9PSBrQ29uc3RydWN0KSB7XG4gICAgICB3ZWJpZGwuaWxsZWdhbENvbnN0cnVjdG9yKClcbiAgICB9XG5cbiAgICB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QgPSBhcmd1bWVudHNbMV1cbiAgfVxuXG4gIGFzeW5jIG1hdGNoIChyZXF1ZXN0LCBvcHRpb25zID0ge30pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGUubWF0Y2gnIH0pXG5cbiAgICByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucylcblxuICAgIGNvbnN0IHAgPSBhd2FpdCB0aGlzLm1hdGNoQWxsKHJlcXVlc3QsIG9wdGlvbnMpXG5cbiAgICBpZiAocC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHJldHVybiBwWzBdXG4gIH1cblxuICBhc3luYyBtYXRjaEFsbCAocmVxdWVzdCA9IHVuZGVmaW5lZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG5cbiAgICBpZiAocmVxdWVzdCAhPT0gdW5kZWZpbmVkKSByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucylcblxuICAgIC8vIDEuXG4gICAgbGV0IHIgPSBudWxsXG5cbiAgICAvLyAyLlxuICAgIGlmIChyZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgICAvLyAyLjEuMVxuICAgICAgICByID0gcmVxdWVzdFtrU3RhdGVdXG5cbiAgICAgICAgLy8gMi4xLjJcbiAgICAgICAgaWYgKHIubWV0aG9kICE9PSAnR0VUJyAmJiAhb3B0aW9ucy5pZ25vcmVNZXRob2QpIHtcbiAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVxdWVzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gMi4yLjFcbiAgICAgICAgciA9IG5ldyBSZXF1ZXN0KHJlcXVlc3QpW2tTdGF0ZV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LlxuICAgIC8vIDUuMVxuICAgIGNvbnN0IHJlc3BvbnNlcyA9IFtdXG5cbiAgICAvLyA1LjJcbiAgICBpZiAocmVxdWVzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyA1LjIuMVxuICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0KSB7XG4gICAgICAgIHJlc3BvbnNlcy5wdXNoKHJlcXVlc3RSZXNwb25zZVsxXSlcbiAgICAgIH1cbiAgICB9IGVsc2UgeyAvLyA1LjNcbiAgICAgIC8vIDUuMy4xXG4gICAgICBjb25zdCByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShyLCBvcHRpb25zKVxuXG4gICAgICAvLyA1LjMuMlxuICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgcmVxdWVzdFJlc3BvbnNlcykge1xuICAgICAgICByZXNwb25zZXMucHVzaChyZXF1ZXN0UmVzcG9uc2VbMV0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS40XG4gICAgLy8gV2UgZG9uJ3QgaW1wbGVtZW50IENPUnMgc28gd2UgZG9uJ3QgbmVlZCB0byBsb29wIG92ZXIgdGhlIHJlc3BvbnNlcywgeWF5IVxuXG4gICAgLy8gNS41LjFcbiAgICBjb25zdCByZXNwb25zZUxpc3QgPSBbXVxuXG4gICAgLy8gNS41LjJcbiAgICBmb3IgKGNvbnN0IHJlc3BvbnNlIG9mIHJlc3BvbnNlcykge1xuICAgICAgLy8gNS41LjIuMVxuICAgICAgY29uc3QgcmVzcG9uc2VPYmplY3QgPSBuZXcgUmVzcG9uc2UocmVzcG9uc2UuYm9keT8uc291cmNlID8/IG51bGwpXG4gICAgICBjb25zdCBib2R5ID0gcmVzcG9uc2VPYmplY3Rba1N0YXRlXS5ib2R5XG4gICAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdID0gcmVzcG9uc2VcbiAgICAgIHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0uYm9keSA9IGJvZHlcbiAgICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gcmVzcG9uc2UuaGVhZGVyc0xpc3RcbiAgICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gJ2ltbXV0YWJsZSdcblxuICAgICAgcmVzcG9uc2VMaXN0LnB1c2gocmVzcG9uc2VPYmplY3QpXG4gICAgfVxuXG4gICAgLy8gNi5cbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShyZXNwb25zZUxpc3QpXG4gIH1cblxuICBhc3luYyBhZGQgKHJlcXVlc3QpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGUuYWRkJyB9KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG5cbiAgICAvLyAxLlxuICAgIGNvbnN0IHJlcXVlc3RzID0gW3JlcXVlc3RdXG5cbiAgICAvLyAyLlxuICAgIGNvbnN0IHJlc3BvbnNlQXJyYXlQcm9taXNlID0gdGhpcy5hZGRBbGwocmVxdWVzdHMpXG5cbiAgICAvLyAzLlxuICAgIHJldHVybiBhd2FpdCByZXNwb25zZUFycmF5UHJvbWlzZVxuICB9XG5cbiAgYXN5bmMgYWRkQWxsIChyZXF1ZXN0cykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZS5hZGRBbGwnIH0pXG5cbiAgICByZXF1ZXN0cyA9IHdlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxSZXF1ZXN0SW5mbz4nXShyZXF1ZXN0cylcblxuICAgIC8vIDEuXG4gICAgY29uc3QgcmVzcG9uc2VQcm9taXNlcyA9IFtdXG5cbiAgICAvLyAyLlxuICAgIGNvbnN0IHJlcXVlc3RMaXN0ID0gW11cblxuICAgIC8vIDMuXG4gICAgZm9yIChjb25zdCByZXF1ZXN0IG9mIHJlcXVlc3RzKSB7XG4gICAgICBpZiAodHlwZW9mIHJlcXVlc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIDMuMVxuICAgICAgY29uc3QgciA9IHJlcXVlc3Rba1N0YXRlXVxuXG4gICAgICAvLyAzLjJcbiAgICAgIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUoci51cmwpIHx8IHIubWV0aG9kICE9PSAnR0VUJykge1xuICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuYWRkQWxsJyxcbiAgICAgICAgICBtZXNzYWdlOiAnRXhwZWN0ZWQgaHR0cC9zIHNjaGVtZSB3aGVuIG1ldGhvZCBpcyBub3QgR0VULidcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LlxuICAgIC8qKiBAdHlwZSB7UmV0dXJuVHlwZTx0eXBlb2YgZmV0Y2hpbmc+W119ICovXG4gICAgY29uc3QgZmV0Y2hDb250cm9sbGVycyA9IFtdXG5cbiAgICAvLyA1LlxuICAgIGZvciAoY29uc3QgcmVxdWVzdCBvZiByZXF1ZXN0cykge1xuICAgICAgLy8gNS4xXG4gICAgICBjb25zdCByID0gbmV3IFJlcXVlc3QocmVxdWVzdClba1N0YXRlXVxuXG4gICAgICAvLyA1LjJcbiAgICAgIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUoci51cmwpKSB7XG4gICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICBoZWFkZXI6ICdDYWNoZS5hZGRBbGwnLFxuICAgICAgICAgIG1lc3NhZ2U6ICdFeHBlY3RlZCBodHRwL3Mgc2NoZW1lLidcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgLy8gNS40XG4gICAgICByLmluaXRpYXRvciA9ICdmZXRjaCdcbiAgICAgIHIuZGVzdGluYXRpb24gPSAnc3VicmVzb3VyY2UnXG5cbiAgICAgIC8vIDUuNVxuICAgICAgcmVxdWVzdExpc3QucHVzaChyKVxuXG4gICAgICAvLyA1LjZcbiAgICAgIGNvbnN0IHJlc3BvbnNlUHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICAgIC8vIDUuN1xuICAgICAgZmV0Y2hDb250cm9sbGVycy5wdXNoKGZldGNoaW5nKHtcbiAgICAgICAgcmVxdWVzdDogcixcbiAgICAgICAgZGlzcGF0Y2hlcjogZ2V0R2xvYmFsRGlzcGF0Y2hlcigpLFxuICAgICAgICBwcm9jZXNzUmVzcG9uc2UgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgLy8gMS5cbiAgICAgICAgICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJyB8fCByZXNwb25zZS5zdGF0dXMgPT09IDIwNiB8fCByZXNwb25zZS5zdGF0dXMgPCAyMDAgfHwgcmVzcG9uc2Uuc3RhdHVzID4gMjk5KSB7XG4gICAgICAgICAgICByZXNwb25zZVByb21pc2UucmVqZWN0KHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuYWRkQWxsJyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ1JlY2VpdmVkIGFuIGludmFsaWQgc3RhdHVzIGNvZGUgb3IgdGhlIHJlcXVlc3QgZmFpbGVkLidcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3ZhcnknKSkgeyAvLyAyLlxuICAgICAgICAgICAgLy8gMi4xXG4gICAgICAgICAgICBjb25zdCBmaWVsZFZhbHVlcyA9IGdldEZpZWxkVmFsdWVzKHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgndmFyeScpKVxuXG4gICAgICAgICAgICAvLyAyLjJcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGRWYWx1ZSBvZiBmaWVsZFZhbHVlcykge1xuICAgICAgICAgICAgICAvLyAyLjIuMVxuICAgICAgICAgICAgICBpZiAoZmllbGRWYWx1ZSA9PT0gJyonKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VQcm9taXNlLnJlamVjdCh3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS5hZGRBbGwnLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ2ludmFsaWQgdmFyeSBmaWVsZCB2YWx1ZSdcbiAgICAgICAgICAgICAgICB9KSlcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY29udHJvbGxlciBvZiBmZXRjaENvbnRyb2xsZXJzKSB7XG4gICAgICAgICAgICAgICAgICBjb250cm9sbGVyLmFib3J0KClcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5IChyZXNwb25zZSkge1xuICAgICAgICAgIC8vIDEuXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJlc3BvbnNlUHJvbWlzZS5yZWplY3QobmV3IERPTUV4Y2VwdGlvbignYWJvcnRlZCcsICdBYm9ydEVycm9yJykpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyAyLlxuICAgICAgICAgIHJlc3BvbnNlUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKVxuICAgICAgICB9XG4gICAgICB9KSlcblxuICAgICAgLy8gNS44XG4gICAgICByZXNwb25zZVByb21pc2VzLnB1c2gocmVzcG9uc2VQcm9taXNlLnByb21pc2UpXG4gICAgfVxuXG4gICAgLy8gNi5cbiAgICBjb25zdCBwID0gUHJvbWlzZS5hbGwocmVzcG9uc2VQcm9taXNlcylcblxuICAgIC8vIDcuXG4gICAgY29uc3QgcmVzcG9uc2VzID0gYXdhaXQgcFxuXG4gICAgLy8gNy4xXG4gICAgY29uc3Qgb3BlcmF0aW9ucyA9IFtdXG5cbiAgICAvLyA3LjJcbiAgICBsZXQgaW5kZXggPSAwXG5cbiAgICAvLyA3LjNcbiAgICBmb3IgKGNvbnN0IHJlc3BvbnNlIG9mIHJlc3BvbnNlcykge1xuICAgICAgLy8gNy4zLjFcbiAgICAgIC8qKiBAdHlwZSB7Q2FjaGVCYXRjaE9wZXJhdGlvbn0gKi9cbiAgICAgIGNvbnN0IG9wZXJhdGlvbiA9IHtcbiAgICAgICAgdHlwZTogJ3B1dCcsIC8vIDcuMy4yXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RMaXN0W2luZGV4XSwgLy8gNy4zLjNcbiAgICAgICAgcmVzcG9uc2UgLy8gNy4zLjRcbiAgICAgIH1cblxuICAgICAgb3BlcmF0aW9ucy5wdXNoKG9wZXJhdGlvbikgLy8gNy4zLjVcblxuICAgICAgaW5kZXgrKyAvLyA3LjMuNlxuICAgIH1cblxuICAgIC8vIDcuNVxuICAgIGNvbnN0IGNhY2hlSm9iUHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICAvLyA3LjYuMVxuICAgIGxldCBlcnJvckRhdGEgPSBudWxsXG5cbiAgICAvLyA3LjYuMlxuICAgIHRyeSB7XG4gICAgICB0aGlzLiNiYXRjaENhY2hlT3BlcmF0aW9ucyhvcGVyYXRpb25zKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVycm9yRGF0YSA9IGVcbiAgICB9XG5cbiAgICAvLyA3LjYuM1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIC8vIDcuNi4zLjFcbiAgICAgIGlmIChlcnJvckRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gNy42LjMuMlxuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVqZWN0KGVycm9yRGF0YSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgLy8gNy43XG4gICAgcmV0dXJuIGNhY2hlSm9iUHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICBhc3luYyBwdXQgKHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCB7IGhlYWRlcjogJ0NhY2hlLnB1dCcgfSlcblxuICAgIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0KVxuICAgIHJlc3BvbnNlID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2UocmVzcG9uc2UpXG5cbiAgICAvLyAxLlxuICAgIGxldCBpbm5lclJlcXVlc3QgPSBudWxsXG5cbiAgICAvLyAyLlxuICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgaW5uZXJSZXF1ZXN0ID0gcmVxdWVzdFtrU3RhdGVdXG4gICAgfSBlbHNlIHsgLy8gMy5cbiAgICAgIGlubmVyUmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHJlcXVlc3QpW2tTdGF0ZV1cbiAgICB9XG5cbiAgICAvLyA0LlxuICAgIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUoaW5uZXJSZXF1ZXN0LnVybCkgfHwgaW5uZXJSZXF1ZXN0Lm1ldGhvZCAhPT0gJ0dFVCcpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnQ2FjaGUucHV0JyxcbiAgICAgICAgbWVzc2FnZTogJ0V4cGVjdGVkIGFuIGh0dHAvcyBzY2hlbWUgd2hlbiBtZXRob2QgaXMgbm90IEdFVCdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gNS5cbiAgICBjb25zdCBpbm5lclJlc3BvbnNlID0gcmVzcG9uc2Vba1N0YXRlXVxuXG4gICAgLy8gNi5cbiAgICBpZiAoaW5uZXJSZXNwb25zZS5zdGF0dXMgPT09IDIwNikge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdDYWNoZS5wdXQnLFxuICAgICAgICBtZXNzYWdlOiAnR290IDIwNiBzdGF0dXMnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDcuXG4gICAgaWYgKGlubmVyUmVzcG9uc2UuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3ZhcnknKSkge1xuICAgICAgLy8gNy4xLlxuICAgICAgY29uc3QgZmllbGRWYWx1ZXMgPSBnZXRGaWVsZFZhbHVlcyhpbm5lclJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgndmFyeScpKVxuXG4gICAgICAvLyA3LjIuXG4gICAgICBmb3IgKGNvbnN0IGZpZWxkVmFsdWUgb2YgZmllbGRWYWx1ZXMpIHtcbiAgICAgICAgLy8gNy4yLjFcbiAgICAgICAgaWYgKGZpZWxkVmFsdWUgPT09ICcqJykge1xuICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLnB1dCcsXG4gICAgICAgICAgICBtZXNzYWdlOiAnR290ICogdmFyeSBmaWVsZCB2YWx1ZSdcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gOC5cbiAgICBpZiAoaW5uZXJSZXNwb25zZS5ib2R5ICYmIChpc0Rpc3R1cmJlZChpbm5lclJlc3BvbnNlLmJvZHkuc3RyZWFtKSB8fCBpbm5lclJlc3BvbnNlLmJvZHkuc3RyZWFtLmxvY2tlZCkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnQ2FjaGUucHV0JyxcbiAgICAgICAgbWVzc2FnZTogJ1Jlc3BvbnNlIGJvZHkgaXMgbG9ja2VkIG9yIGRpc3R1cmJlZCdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gOS5cbiAgICBjb25zdCBjbG9uZWRSZXNwb25zZSA9IGNsb25lUmVzcG9uc2UoaW5uZXJSZXNwb25zZSlcblxuICAgIC8vIDEwLlxuICAgIGNvbnN0IGJvZHlSZWFkUHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICAvLyAxMS5cbiAgICBpZiAoaW5uZXJSZXNwb25zZS5ib2R5ICE9IG51bGwpIHtcbiAgICAgIC8vIDExLjFcbiAgICAgIGNvbnN0IHN0cmVhbSA9IGlubmVyUmVzcG9uc2UuYm9keS5zdHJlYW1cblxuICAgICAgLy8gMTEuMlxuICAgICAgY29uc3QgcmVhZGVyID0gc3RyZWFtLmdldFJlYWRlcigpXG5cbiAgICAgIC8vIDExLjNcbiAgICAgIHJlYWRBbGxCeXRlcyhyZWFkZXIpLnRoZW4oYm9keVJlYWRQcm9taXNlLnJlc29sdmUsIGJvZHlSZWFkUHJvbWlzZS5yZWplY3QpXG4gICAgfSBlbHNlIHtcbiAgICAgIGJvZHlSZWFkUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZClcbiAgICB9XG5cbiAgICAvLyAxMi5cbiAgICAvKiogQHR5cGUge0NhY2hlQmF0Y2hPcGVyYXRpb25bXX0gKi9cbiAgICBjb25zdCBvcGVyYXRpb25zID0gW11cblxuICAgIC8vIDEzLlxuICAgIC8qKiBAdHlwZSB7Q2FjaGVCYXRjaE9wZXJhdGlvbn0gKi9cbiAgICBjb25zdCBvcGVyYXRpb24gPSB7XG4gICAgICB0eXBlOiAncHV0JywgLy8gMTQuXG4gICAgICByZXF1ZXN0OiBpbm5lclJlcXVlc3QsIC8vIDE1LlxuICAgICAgcmVzcG9uc2U6IGNsb25lZFJlc3BvbnNlIC8vIDE2LlxuICAgIH1cblxuICAgIC8vIDE3LlxuICAgIG9wZXJhdGlvbnMucHVzaChvcGVyYXRpb24pXG5cbiAgICAvLyAxOS5cbiAgICBjb25zdCBieXRlcyA9IGF3YWl0IGJvZHlSZWFkUHJvbWlzZS5wcm9taXNlXG5cbiAgICBpZiAoY2xvbmVkUmVzcG9uc2UuYm9keSAhPSBudWxsKSB7XG4gICAgICBjbG9uZWRSZXNwb25zZS5ib2R5LnNvdXJjZSA9IGJ5dGVzXG4gICAgfVxuXG4gICAgLy8gMTkuMVxuICAgIGNvbnN0IGNhY2hlSm9iUHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICAvLyAxOS4yLjFcbiAgICBsZXQgZXJyb3JEYXRhID0gbnVsbFxuXG4gICAgLy8gMTkuMi4yXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuI2JhdGNoQ2FjaGVPcGVyYXRpb25zKG9wZXJhdGlvbnMpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3JEYXRhID0gZVxuICAgIH1cblxuICAgIC8vIDE5LjIuM1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIC8vIDE5LjIuMy4xXG4gICAgICBpZiAoZXJyb3JEYXRhID09PSBudWxsKSB7XG4gICAgICAgIGNhY2hlSm9iUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgIH0gZWxzZSB7IC8vIDE5LjIuMy4yXG4gICAgICAgIGNhY2hlSm9iUHJvbWlzZS5yZWplY3QoZXJyb3JEYXRhKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gY2FjaGVKb2JQcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZSAocmVxdWVzdCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlLmRlbGV0ZScgfSlcblxuICAgIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0KVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5DYWNoZVF1ZXJ5T3B0aW9ucyhvcHRpb25zKVxuXG4gICAgLyoqXG4gICAgICogQHR5cGUge1JlcXVlc3R9XG4gICAgICovXG4gICAgbGV0IHIgPSBudWxsXG5cbiAgICBpZiAocmVxdWVzdCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICAgIHIgPSByZXF1ZXN0W2tTdGF0ZV1cblxuICAgICAgaWYgKHIubWV0aG9kICE9PSAnR0VUJyAmJiAhb3B0aW9ucy5pZ25vcmVNZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydCh0eXBlb2YgcmVxdWVzdCA9PT0gJ3N0cmluZycpXG5cbiAgICAgIHIgPSBuZXcgUmVxdWVzdChyZXF1ZXN0KVtrU3RhdGVdXG4gICAgfVxuXG4gICAgLyoqIEB0eXBlIHtDYWNoZUJhdGNoT3BlcmF0aW9uW119ICovXG4gICAgY29uc3Qgb3BlcmF0aW9ucyA9IFtdXG5cbiAgICAvKiogQHR5cGUge0NhY2hlQmF0Y2hPcGVyYXRpb259ICovXG4gICAgY29uc3Qgb3BlcmF0aW9uID0ge1xuICAgICAgdHlwZTogJ2RlbGV0ZScsXG4gICAgICByZXF1ZXN0OiByLFxuICAgICAgb3B0aW9uc1xuICAgIH1cblxuICAgIG9wZXJhdGlvbnMucHVzaChvcGVyYXRpb24pXG5cbiAgICBjb25zdCBjYWNoZUpvYlByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gICAgbGV0IGVycm9yRGF0YSA9IG51bGxcbiAgICBsZXQgcmVxdWVzdFJlc3BvbnNlc1xuXG4gICAgdHJ5IHtcbiAgICAgIHJlcXVlc3RSZXNwb25zZXMgPSB0aGlzLiNiYXRjaENhY2hlT3BlcmF0aW9ucyhvcGVyYXRpb25zKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVycm9yRGF0YSA9IGVcbiAgICB9XG5cbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICBpZiAoZXJyb3JEYXRhID09PSBudWxsKSB7XG4gICAgICAgIGNhY2hlSm9iUHJvbWlzZS5yZXNvbHZlKCEhcmVxdWVzdFJlc3BvbnNlcz8ubGVuZ3RoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlamVjdChlcnJvckRhdGEpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiBjYWNoZUpvYlByb21pc2UucHJvbWlzZVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2RvbS1jYWNoZS1rZXlzXG4gICAqIEBwYXJhbSB7YW55fSByZXF1ZXN0XG4gICAqIEBwYXJhbSB7aW1wb3J0KCcuLi8uLi90eXBlcy9jYWNoZScpLkNhY2hlUXVlcnlPcHRpb25zfSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHtyZWFkb25seSBSZXF1ZXN0W119XG4gICAqL1xuICBhc3luYyBrZXlzIChyZXF1ZXN0ID0gdW5kZWZpbmVkLCBvcHRpb25zID0ge30pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcblxuICAgIGlmIChyZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0KVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5DYWNoZVF1ZXJ5T3B0aW9ucyhvcHRpb25zKVxuXG4gICAgLy8gMS5cbiAgICBsZXQgciA9IG51bGxcblxuICAgIC8vIDIuXG4gICAgaWYgKHJlcXVlc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gMi4xXG4gICAgICBpZiAocmVxdWVzdCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICAgICAgLy8gMi4xLjFcbiAgICAgICAgciA9IHJlcXVlc3Rba1N0YXRlXVxuXG4gICAgICAgIC8vIDIuMS4yXG4gICAgICAgIGlmIChyLm1ldGhvZCAhPT0gJ0dFVCcgJiYgIW9wdGlvbnMuaWdub3JlTWV0aG9kKSB7XG4gICAgICAgICAgcmV0dXJuIFtdXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlcXVlc3QgPT09ICdzdHJpbmcnKSB7IC8vIDIuMlxuICAgICAgICByID0gbmV3IFJlcXVlc3QocmVxdWVzdClba1N0YXRlXVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuXG4gICAgY29uc3QgcHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICAvLyA1LlxuICAgIC8vIDUuMVxuICAgIGNvbnN0IHJlcXVlc3RzID0gW11cblxuICAgIC8vIDUuMlxuICAgIGlmIChyZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDUuMi4xXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QpIHtcbiAgICAgICAgLy8gNS4yLjEuMVxuICAgICAgICByZXF1ZXN0cy5wdXNoKHJlcXVlc3RSZXNwb25zZVswXSlcbiAgICAgIH1cbiAgICB9IGVsc2UgeyAvLyA1LjNcbiAgICAgIC8vIDUuMy4xXG4gICAgICBjb25zdCByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShyLCBvcHRpb25zKVxuXG4gICAgICAvLyA1LjMuMlxuICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgcmVxdWVzdFJlc3BvbnNlcykge1xuICAgICAgICAvLyA1LjMuMi4xXG4gICAgICAgIHJlcXVlc3RzLnB1c2gocmVxdWVzdFJlc3BvbnNlWzBdKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDUuNFxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIC8vIDUuNC4xXG4gICAgICBjb25zdCByZXF1ZXN0TGlzdCA9IFtdXG5cbiAgICAgIC8vIDUuNC4yXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdHMpIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdE9iamVjdCA9IG5ldyBSZXF1ZXN0KCdodHRwczovL2EnKVxuICAgICAgICByZXF1ZXN0T2JqZWN0W2tTdGF0ZV0gPSByZXF1ZXN0XG4gICAgICAgIHJlcXVlc3RPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSByZXF1ZXN0LmhlYWRlcnNMaXN0XG4gICAgICAgIHJlcXVlc3RPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSAnaW1tdXRhYmxlJ1xuICAgICAgICByZXF1ZXN0T2JqZWN0W2tSZWFsbV0gPSByZXF1ZXN0LmNsaWVudFxuXG4gICAgICAgIC8vIDUuNC4yLjFcbiAgICAgICAgcmVxdWVzdExpc3QucHVzaChyZXF1ZXN0T2JqZWN0KVxuICAgICAgfVxuXG4gICAgICAvLyA1LjQuM1xuICAgICAgcHJvbWlzZS5yZXNvbHZlKE9iamVjdC5mcmVlemUocmVxdWVzdExpc3QpKVxuICAgIH0pXG5cbiAgICByZXR1cm4gcHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jYmF0Y2gtY2FjaGUtb3BlcmF0aW9ucy1hbGdvcml0aG1cbiAgICogQHBhcmFtIHtDYWNoZUJhdGNoT3BlcmF0aW9uW119IG9wZXJhdGlvbnNcbiAgICogQHJldHVybnMge3JlcXVlc3RSZXNwb25zZUxpc3R9XG4gICAqL1xuICAjYmF0Y2hDYWNoZU9wZXJhdGlvbnMgKG9wZXJhdGlvbnMpIHtcbiAgICAvLyAxLlxuICAgIGNvbnN0IGNhY2hlID0gdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0XG5cbiAgICAvLyAyLlxuICAgIGNvbnN0IGJhY2t1cENhY2hlID0gWy4uLmNhY2hlXVxuXG4gICAgLy8gMy5cbiAgICBjb25zdCBhZGRlZEl0ZW1zID0gW11cblxuICAgIC8vIDQuMVxuICAgIGNvbnN0IHJlc3VsdExpc3QgPSBbXVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIDQuMlxuICAgICAgZm9yIChjb25zdCBvcGVyYXRpb24gb2Ygb3BlcmF0aW9ucykge1xuICAgICAgICAvLyA0LjIuMVxuICAgICAgICBpZiAob3BlcmF0aW9uLnR5cGUgIT09ICdkZWxldGUnICYmIG9wZXJhdGlvbi50eXBlICE9PSAncHV0Jykge1xuICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICBtZXNzYWdlOiAnb3BlcmF0aW9uIHR5cGUgZG9lcyBub3QgbWF0Y2ggXCJkZWxldGVcIiBvciBcInB1dFwiJ1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyA0LjIuMlxuICAgICAgICBpZiAob3BlcmF0aW9uLnR5cGUgPT09ICdkZWxldGUnICYmIG9wZXJhdGlvbi5yZXNwb25zZSAhPSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuI2JhdGNoQ2FjaGVPcGVyYXRpb25zJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdkZWxldGUgb3BlcmF0aW9uIHNob3VsZCBub3QgaGF2ZSBhbiBhc3NvY2lhdGVkIHJlc3BvbnNlJ1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyA0LjIuM1xuICAgICAgICBpZiAodGhpcy4jcXVlcnlDYWNoZShvcGVyYXRpb24ucmVxdWVzdCwgb3BlcmF0aW9uLm9wdGlvbnMsIGFkZGVkSXRlbXMpLmxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJz8/PycsICdJbnZhbGlkU3RhdGVFcnJvcicpXG4gICAgICAgIH1cblxuICAgICAgICAvLyA0LjIuNFxuICAgICAgICBsZXQgcmVxdWVzdFJlc3BvbnNlc1xuXG4gICAgICAgIC8vIDQuMi41XG4gICAgICAgIGlmIChvcGVyYXRpb24udHlwZSA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgICAgICAvLyA0LjIuNS4xXG4gICAgICAgICAgcmVxdWVzdFJlc3BvbnNlcyA9IHRoaXMuI3F1ZXJ5Q2FjaGUob3BlcmF0aW9uLnJlcXVlc3QsIG9wZXJhdGlvbi5vcHRpb25zKVxuXG4gICAgICAgICAgLy8gVE9ETzogdGhlIHNwZWMgaXMgd3JvbmcsIHRoaXMgaXMgbmVlZGVkIHRvIHBhc3MgV1BUc1xuICAgICAgICAgIGlmIChyZXF1ZXN0UmVzcG9uc2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjUuMlxuICAgICAgICAgIGZvciAoY29uc3QgcmVxdWVzdFJlc3BvbnNlIG9mIHJlcXVlc3RSZXNwb25zZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGlkeCA9IGNhY2hlLmluZGV4T2YocmVxdWVzdFJlc3BvbnNlKVxuICAgICAgICAgICAgYXNzZXJ0KGlkeCAhPT0gLTEpXG5cbiAgICAgICAgICAgIC8vIDQuMi41LjIuMVxuICAgICAgICAgICAgY2FjaGUuc3BsaWNlKGlkeCwgMSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uLnR5cGUgPT09ICdwdXQnKSB7IC8vIDQuMi42XG4gICAgICAgICAgLy8gNC4yLjYuMVxuICAgICAgICAgIGlmIChvcGVyYXRpb24ucmVzcG9uc2UgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAncHV0IG9wZXJhdGlvbiBzaG91bGQgaGF2ZSBhbiBhc3NvY2lhdGVkIHJlc3BvbnNlJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA0LjIuNi4yXG4gICAgICAgICAgY29uc3QgciA9IG9wZXJhdGlvbi5yZXF1ZXN0XG5cbiAgICAgICAgICAvLyA0LjIuNi4zXG4gICAgICAgICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShyLnVybCkpIHtcbiAgICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuI2JhdGNoQ2FjaGVPcGVyYXRpb25zJyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ2V4cGVjdGVkIGh0dHAgb3IgaHR0cHMgc2NoZW1lJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA0LjIuNi40XG4gICAgICAgICAgaWYgKHIubWV0aG9kICE9PSAnR0VUJykge1xuICAgICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnbm90IGdldCBtZXRob2QnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjVcbiAgICAgICAgICBpZiAob3BlcmF0aW9uLm9wdGlvbnMgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnb3B0aW9ucyBtdXN0IG5vdCBiZSBkZWZpbmVkJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA0LjIuNi42XG4gICAgICAgICAgcmVxdWVzdFJlc3BvbnNlcyA9IHRoaXMuI3F1ZXJ5Q2FjaGUob3BlcmF0aW9uLnJlcXVlc3QpXG5cbiAgICAgICAgICAvLyA0LjIuNi43XG4gICAgICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgcmVxdWVzdFJlc3BvbnNlcykge1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gY2FjaGUuaW5kZXhPZihyZXF1ZXN0UmVzcG9uc2UpXG4gICAgICAgICAgICBhc3NlcnQoaWR4ICE9PSAtMSlcblxuICAgICAgICAgICAgLy8gNC4yLjYuNy4xXG4gICAgICAgICAgICBjYWNoZS5zcGxpY2UoaWR4LCAxKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjhcbiAgICAgICAgICBjYWNoZS5wdXNoKFtvcGVyYXRpb24ucmVxdWVzdCwgb3BlcmF0aW9uLnJlc3BvbnNlXSlcblxuICAgICAgICAgIC8vIDQuMi42LjEwXG4gICAgICAgICAgYWRkZWRJdGVtcy5wdXNoKFtvcGVyYXRpb24ucmVxdWVzdCwgb3BlcmF0aW9uLnJlc3BvbnNlXSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi43XG4gICAgICAgIHJlc3VsdExpc3QucHVzaChbb3BlcmF0aW9uLnJlcXVlc3QsIG9wZXJhdGlvbi5yZXNwb25zZV0pXG4gICAgICB9XG5cbiAgICAgIC8vIDQuM1xuICAgICAgcmV0dXJuIHJlc3VsdExpc3RcbiAgICB9IGNhdGNoIChlKSB7IC8vIDUuXG4gICAgICAvLyA1LjFcbiAgICAgIHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdC5sZW5ndGggPSAwXG5cbiAgICAgIC8vIDUuMlxuICAgICAgdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0ID0gYmFja3VwQ2FjaGVcblxuICAgICAgLy8gNS4zXG4gICAgICB0aHJvdyBlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI3F1ZXJ5LWNhY2hlXG4gICAqIEBwYXJhbSB7YW55fSByZXF1ZXN0UXVlcnlcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2NhY2hlJykuQ2FjaGVRdWVyeU9wdGlvbnN9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtyZXF1ZXN0UmVzcG9uc2VMaXN0fSB0YXJnZXRTdG9yYWdlXG4gICAqIEByZXR1cm5zIHtyZXF1ZXN0UmVzcG9uc2VMaXN0fVxuICAgKi9cbiAgI3F1ZXJ5Q2FjaGUgKHJlcXVlc3RRdWVyeSwgb3B0aW9ucywgdGFyZ2V0U3RvcmFnZSkge1xuICAgIC8qKiBAdHlwZSB7cmVxdWVzdFJlc3BvbnNlTGlzdH0gKi9cbiAgICBjb25zdCByZXN1bHRMaXN0ID0gW11cblxuICAgIGNvbnN0IHN0b3JhZ2UgPSB0YXJnZXRTdG9yYWdlID8/IHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdFxuXG4gICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2Ygc3RvcmFnZSkge1xuICAgICAgY29uc3QgW2NhY2hlZFJlcXVlc3QsIGNhY2hlZFJlc3BvbnNlXSA9IHJlcXVlc3RSZXNwb25zZVxuICAgICAgaWYgKHRoaXMuI3JlcXVlc3RNYXRjaGVzQ2FjaGVkSXRlbShyZXF1ZXN0UXVlcnksIGNhY2hlZFJlcXVlc3QsIGNhY2hlZFJlc3BvbnNlLCBvcHRpb25zKSkge1xuICAgICAgICByZXN1bHRMaXN0LnB1c2gocmVxdWVzdFJlc3BvbnNlKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRMaXN0XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jcmVxdWVzdC1tYXRjaGVzLWNhY2hlZC1pdGVtLWFsZ29yaXRobVxuICAgKiBAcGFyYW0ge2FueX0gcmVxdWVzdFF1ZXJ5XG4gICAqIEBwYXJhbSB7YW55fSByZXF1ZXN0XG4gICAqIEBwYXJhbSB7YW55IHwgbnVsbH0gcmVzcG9uc2VcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2NhY2hlJykuQ2FjaGVRdWVyeU9wdGlvbnMgfCB1bmRlZmluZWR9IG9wdGlvbnNcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICAjcmVxdWVzdE1hdGNoZXNDYWNoZWRJdGVtIChyZXF1ZXN0UXVlcnksIHJlcXVlc3QsIHJlc3BvbnNlID0gbnVsbCwgb3B0aW9ucykge1xuICAgIC8vIGlmIChvcHRpb25zPy5pZ25vcmVNZXRob2QgPT09IGZhbHNlICYmIHJlcXVlc3QubWV0aG9kID09PSAnR0VUJykge1xuICAgIC8vICAgcmV0dXJuIGZhbHNlXG4gICAgLy8gfVxuXG4gICAgY29uc3QgcXVlcnlVUkwgPSBuZXcgVVJMKHJlcXVlc3RRdWVyeS51cmwpXG5cbiAgICBjb25zdCBjYWNoZWRVUkwgPSBuZXcgVVJMKHJlcXVlc3QudXJsKVxuXG4gICAgaWYgKG9wdGlvbnM/Lmlnbm9yZVNlYXJjaCkge1xuICAgICAgY2FjaGVkVVJMLnNlYXJjaCA9ICcnXG5cbiAgICAgIHF1ZXJ5VVJMLnNlYXJjaCA9ICcnXG4gICAgfVxuXG4gICAgaWYgKCF1cmxFcXVhbHMocXVlcnlVUkwsIGNhY2hlZFVSTCwgdHJ1ZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHJlc3BvbnNlID09IG51bGwgfHxcbiAgICAgIG9wdGlvbnM/Lmlnbm9yZVZhcnkgfHxcbiAgICAgICFyZXNwb25zZS5oZWFkZXJzTGlzdC5jb250YWlucygndmFyeScpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGNvbnN0IGZpZWxkVmFsdWVzID0gZ2V0RmllbGRWYWx1ZXMocmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCd2YXJ5JykpXG5cbiAgICBmb3IgKGNvbnN0IGZpZWxkVmFsdWUgb2YgZmllbGRWYWx1ZXMpIHtcbiAgICAgIGlmIChmaWVsZFZhbHVlID09PSAnKicpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlcXVlc3RWYWx1ZSA9IHJlcXVlc3QuaGVhZGVyc0xpc3QuZ2V0KGZpZWxkVmFsdWUpXG4gICAgICBjb25zdCBxdWVyeVZhbHVlID0gcmVxdWVzdFF1ZXJ5LmhlYWRlcnNMaXN0LmdldChmaWVsZFZhbHVlKVxuXG4gICAgICAvLyBJZiBvbmUgaGFzIHRoZSBoZWFkZXIgYW5kIHRoZSBvdGhlciBkb2Vzbid0LCBvciBvbmUgaGFzXG4gICAgICAvLyBhIGRpZmZlcmVudCB2YWx1ZSB0aGFuIHRoZSBvdGhlciwgcmV0dXJuIGZhbHNlXG4gICAgICBpZiAocmVxdWVzdFZhbHVlICE9PSBxdWVyeVZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FjaGUucHJvdG90eXBlLCB7XG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdDYWNoZScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG1hdGNoOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBtYXRjaEFsbDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYWRkOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBhZGRBbGw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHB1dDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZGVsZXRlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBrZXlzOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG5jb25zdCBjYWNoZVF1ZXJ5T3B0aW9uQ29udmVydGVycyA9IFtcbiAge1xuICAgIGtleTogJ2lnbm9yZVNlYXJjaCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2lnbm9yZU1ldGhvZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2lnbm9yZVZhcnknLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH1cbl1cblxud2ViaWRsLmNvbnZlcnRlcnMuQ2FjaGVRdWVyeU9wdGlvbnMgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihjYWNoZVF1ZXJ5T3B0aW9uQ29udmVydGVycylcblxud2ViaWRsLmNvbnZlcnRlcnMuTXVsdGlDYWNoZVF1ZXJ5T3B0aW9ucyA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAgLi4uY2FjaGVRdWVyeU9wdGlvbkNvbnZlcnRlcnMsXG4gIHtcbiAgICBrZXk6ICdjYWNoZU5hbWUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nXG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLlJlc3BvbnNlID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihSZXNwb25zZSlcblxud2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPFJlcXVlc3RJbmZvPiddID0gd2ViaWRsLnNlcXVlbmNlQ29udmVydGVyKFxuICB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mb1xuKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ2FjaGVcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBDYWNoZSB9ID0gcmVxdWlyZSgnLi9jYWNoZScpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuY2xhc3MgQ2FjaGVTdG9yYWdlIHtcbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2Rmbi1yZWxldmFudC1uYW1lLXRvLWNhY2hlLW1hcFxuICAgKiBAdHlwZSB7TWFwPHN0cmluZywgaW1wb3J0KCcuL2NhY2hlJykucmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNjYWNoZXMgPSBuZXcgTWFwKClcblxuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgaWYgKGFyZ3VtZW50c1swXSAhPT0ga0NvbnN0cnVjdCkge1xuICAgICAgd2ViaWRsLmlsbGVnYWxDb25zdHJ1Y3RvcigpXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbWF0Y2ggKHJlcXVlc3QsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlU3RvcmFnZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGVTdG9yYWdlLm1hdGNoJyB9KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLk11bHRpQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucylcblxuICAgIC8vIDEuXG4gICAgaWYgKG9wdGlvbnMuY2FjaGVOYW1lICE9IG51bGwpIHtcbiAgICAgIC8vIDEuMS4xLjFcbiAgICAgIGlmICh0aGlzLiNjYWNoZXMuaGFzKG9wdGlvbnMuY2FjaGVOYW1lKSkge1xuICAgICAgICAvLyAxLjEuMS4xLjFcbiAgICAgICAgY29uc3QgY2FjaGVMaXN0ID0gdGhpcy4jY2FjaGVzLmdldChvcHRpb25zLmNhY2hlTmFtZSlcbiAgICAgICAgY29uc3QgY2FjaGUgPSBuZXcgQ2FjaGUoa0NvbnN0cnVjdCwgY2FjaGVMaXN0KVxuXG4gICAgICAgIHJldHVybiBhd2FpdCBjYWNoZS5tYXRjaChyZXF1ZXN0LCBvcHRpb25zKVxuICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIDIuXG4gICAgICAvLyAyLjJcbiAgICAgIGZvciAoY29uc3QgY2FjaGVMaXN0IG9mIHRoaXMuI2NhY2hlcy52YWx1ZXMoKSkge1xuICAgICAgICBjb25zdCBjYWNoZSA9IG5ldyBDYWNoZShrQ29uc3RydWN0LCBjYWNoZUxpc3QpXG5cbiAgICAgICAgLy8gMi4yLjEuMlxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNhY2hlLm1hdGNoKHJlcXVlc3QsIG9wdGlvbnMpXG5cbiAgICAgICAgaWYgKHJlc3BvbnNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNjYWNoZS1zdG9yYWdlLWhhc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgYXN5bmMgaGFzIChjYWNoZU5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlU3RvcmFnZS5oYXMnIH0pXG5cbiAgICBjYWNoZU5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoY2FjaGVOYW1lKVxuXG4gICAgLy8gMi4xLjFcbiAgICAvLyAyLjJcbiAgICByZXR1cm4gdGhpcy4jY2FjaGVzLmhhcyhjYWNoZU5hbWUpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZG9tLWNhY2hlc3RvcmFnZS1vcGVuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWVcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGU+fVxuICAgKi9cbiAgYXN5bmMgb3BlbiAoY2FjaGVOYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGVTdG9yYWdlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZVN0b3JhZ2Uub3BlbicgfSlcblxuICAgIGNhY2hlTmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhjYWNoZU5hbWUpXG5cbiAgICAvLyAyLjFcbiAgICBpZiAodGhpcy4jY2FjaGVzLmhhcyhjYWNoZU5hbWUpKSB7XG4gICAgICAvLyBhd2FpdCBjYWNoZXMub3BlbigndjEnKSAhPT0gYXdhaXQgY2FjaGVzLm9wZW4oJ3YxJylcblxuICAgICAgLy8gMi4xLjFcbiAgICAgIGNvbnN0IGNhY2hlID0gdGhpcy4jY2FjaGVzLmdldChjYWNoZU5hbWUpXG5cbiAgICAgIC8vIDIuMS4xLjFcbiAgICAgIHJldHVybiBuZXcgQ2FjaGUoa0NvbnN0cnVjdCwgY2FjaGUpXG4gICAgfVxuXG4gICAgLy8gMi4yXG4gICAgY29uc3QgY2FjaGUgPSBbXVxuXG4gICAgLy8gMi4zXG4gICAgdGhpcy4jY2FjaGVzLnNldChjYWNoZU5hbWUsIGNhY2hlKVxuXG4gICAgLy8gMi40XG4gICAgcmV0dXJuIG5ldyBDYWNoZShrQ29uc3RydWN0LCBjYWNoZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNjYWNoZS1zdG9yYWdlLWRlbGV0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlIChjYWNoZU5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlU3RvcmFnZS5kZWxldGUnIH0pXG5cbiAgICBjYWNoZU5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoY2FjaGVOYW1lKVxuXG4gICAgcmV0dXJuIHRoaXMuI2NhY2hlcy5kZWxldGUoY2FjaGVOYW1lKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2NhY2hlLXN0b3JhZ2Uta2V5c1xuICAgKiBAcmV0dXJucyB7c3RyaW5nW119XG4gICAqL1xuICBhc3luYyBrZXlzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG5cbiAgICAvLyAyLjFcbiAgICBjb25zdCBrZXlzID0gdGhpcy4jY2FjaGVzLmtleXMoKVxuXG4gICAgLy8gMi4yXG4gICAgcmV0dXJuIFsuLi5rZXlzXVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENhY2hlU3RvcmFnZS5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0NhY2hlU3RvcmFnZScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG1hdGNoOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoYXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9wZW46IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlbGV0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAga2V5czoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENhY2hlU3RvcmFnZVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBodHRwczovL3dpY2cuZ2l0aHViLmlvL2Nvb2tpZS1zdG9yZS8jY29va2llLW1heGltdW0tYXR0cmlidXRlLXZhbHVlLXNpemVcbmNvbnN0IG1heEF0dHJpYnV0ZVZhbHVlU2l6ZSA9IDEwMjRcblxuLy8gaHR0cHM6Ly93aWNnLmdpdGh1Yi5pby9jb29raWUtc3RvcmUvI2Nvb2tpZS1tYXhpbXVtLW5hbWUtdmFsdWUtcGFpci1zaXplXG5jb25zdCBtYXhOYW1lVmFsdWVQYWlyU2l6ZSA9IDQwOTZcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1heEF0dHJpYnV0ZVZhbHVlU2l6ZSxcbiAgbWF4TmFtZVZhbHVlUGFpclNpemVcbn1cbiIsICIndXNlIHN0cmljdCdcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0NUTEV4Y2x1ZGluZ0h0YWIgKHZhbHVlKSB7XG4gIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGZvciAoY29uc3QgY2hhciBvZiB2YWx1ZSkge1xuICAgIGNvbnN0IGNvZGUgPSBjaGFyLmNoYXJDb2RlQXQoMClcblxuICAgIGlmIChcbiAgICAgIChjb2RlID49IDB4MDAgfHwgY29kZSA8PSAweDA4KSB8fFxuICAgICAgKGNvZGUgPj0gMHgwQSB8fCBjb2RlIDw9IDB4MUYpIHx8XG4gICAgICBjb2RlID09PSAweDdGXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gQ0hBUiAgICAgICAgICAgPSA8YW55IFVTLUFTQ0lJIGNoYXJhY3RlciAob2N0ZXRzIDAgLSAxMjcpPlxuIHRva2VuICAgICAgICAgID0gMSo8YW55IENIQVIgZXhjZXB0IENUTHMgb3Igc2VwYXJhdG9ycz5cbiBzZXBhcmF0b3JzICAgICA9IFwiKFwiIHwgXCIpXCIgfCBcIjxcIiB8IFwiPlwiIHwgXCJAXCJcbiAgICAgICAgICAgICAgICB8IFwiLFwiIHwgXCI7XCIgfCBcIjpcIiB8IFwiXFxcIiB8IDxcIj5cbiAgICAgICAgICAgICAgICB8IFwiL1wiIHwgXCJbXCIgfCBcIl1cIiB8IFwiP1wiIHwgXCI9XCJcbiAgICAgICAgICAgICAgICB8IFwie1wiIHwgXCJ9XCIgfCBTUCB8IEhUXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvb2tpZU5hbWUgKG5hbWUpIHtcbiAgZm9yIChjb25zdCBjaGFyIG9mIG5hbWUpIHtcbiAgICBjb25zdCBjb2RlID0gY2hhci5jaGFyQ29kZUF0KDApXG5cbiAgICBpZiAoXG4gICAgICAoY29kZSA8PSAweDIwIHx8IGNvZGUgPiAweDdGKSB8fFxuICAgICAgY2hhciA9PT0gJygnIHx8XG4gICAgICBjaGFyID09PSAnKScgfHxcbiAgICAgIGNoYXIgPT09ICc+JyB8fFxuICAgICAgY2hhciA9PT0gJzwnIHx8XG4gICAgICBjaGFyID09PSAnQCcgfHxcbiAgICAgIGNoYXIgPT09ICcsJyB8fFxuICAgICAgY2hhciA9PT0gJzsnIHx8XG4gICAgICBjaGFyID09PSAnOicgfHxcbiAgICAgIGNoYXIgPT09ICdcXFxcJyB8fFxuICAgICAgY2hhciA9PT0gJ1wiJyB8fFxuICAgICAgY2hhciA9PT0gJy8nIHx8XG4gICAgICBjaGFyID09PSAnWycgfHxcbiAgICAgIGNoYXIgPT09ICddJyB8fFxuICAgICAgY2hhciA9PT0gJz8nIHx8XG4gICAgICBjaGFyID09PSAnPScgfHxcbiAgICAgIGNoYXIgPT09ICd7JyB8fFxuICAgICAgY2hhciA9PT0gJ30nXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29va2llIG5hbWUnKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiBjb29raWUtdmFsdWUgICAgICA9ICpjb29raWUtb2N0ZXQgLyAoIERRVU9URSAqY29va2llLW9jdGV0IERRVU9URSApXG4gY29va2llLW9jdGV0ICAgICAgPSAleDIxIC8gJXgyMy0yQiAvICV4MkQtM0EgLyAleDNDLTVCIC8gJXg1RC03RVxuICAgICAgICAgICAgICAgICAgICAgICA7IFVTLUFTQ0lJIGNoYXJhY3RlcnMgZXhjbHVkaW5nIENUTHMsXG4gICAgICAgICAgICAgICAgICAgICAgIDsgd2hpdGVzcGFjZSBEUVVPVEUsIGNvbW1hLCBzZW1pY29sb24sXG4gICAgICAgICAgICAgICAgICAgICAgIDsgYW5kIGJhY2tzbGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llVmFsdWUgKHZhbHVlKSB7XG4gIGZvciAoY29uc3QgY2hhciBvZiB2YWx1ZSkge1xuICAgIGNvbnN0IGNvZGUgPSBjaGFyLmNoYXJDb2RlQXQoMClcblxuICAgIGlmIChcbiAgICAgIGNvZGUgPCAweDIxIHx8IC8vIGV4Y2x1ZGUgQ1RMcyAoMC0zMSlcbiAgICAgIGNvZGUgPT09IDB4MjIgfHxcbiAgICAgIGNvZGUgPT09IDB4MkMgfHxcbiAgICAgIGNvZGUgPT09IDB4M0IgfHxcbiAgICAgIGNvZGUgPT09IDB4NUMgfHxcbiAgICAgIGNvZGUgPiAweDdFIC8vIG5vbi1hc2NpaVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGhlYWRlciB2YWx1ZScpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogcGF0aC12YWx1ZSAgICAgICAgPSA8YW55IENIQVIgZXhjZXB0IENUTHMgb3IgXCI7XCI+XG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvb2tpZVBhdGggKHBhdGgpIHtcbiAgZm9yIChjb25zdCBjaGFyIG9mIHBhdGgpIHtcbiAgICBjb25zdCBjb2RlID0gY2hhci5jaGFyQ29kZUF0KDApXG5cbiAgICBpZiAoY29kZSA8IDB4MjEgfHwgY2hhciA9PT0gJzsnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29va2llIHBhdGgnKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEkgaGF2ZSBubyBpZGVhIHdoeSB0aGVzZSB2YWx1ZXMgYXJlbid0IGFsbG93ZWQgdG8gYmUgaG9uZXN0LFxuICogYnV0IERlbm8gdGVzdHMgdGhlc2UuIC0gS2hhZnJhXG4gKiBAcGFyYW0ge3N0cmluZ30gZG9tYWluXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llRG9tYWluIChkb21haW4pIHtcbiAgaWYgKFxuICAgIGRvbWFpbi5zdGFydHNXaXRoKCctJykgfHxcbiAgICBkb21haW4uZW5kc1dpdGgoJy4nKSB8fFxuICAgIGRvbWFpbi5lbmRzV2l0aCgnLScpXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgZG9tYWluJylcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzcyMzEjc2VjdGlvbi03LjEuMS4xXG4gKiBAcGFyYW0ge251bWJlcnxEYXRlfSBkYXRlXG4gIElNRi1maXhkYXRlICA9IGRheS1uYW1lIFwiLFwiIFNQIGRhdGUxIFNQIHRpbWUtb2YtZGF5IFNQIEdNVFxuICA7IGZpeGVkIGxlbmd0aC96b25lL2NhcGl0YWxpemF0aW9uIHN1YnNldCBvZiB0aGUgZm9ybWF0XG4gIDsgc2VlIFNlY3Rpb24gMy4zIG9mIFtSRkM1MzIyXVxuXG4gIGRheS1uYW1lICAgICA9ICV4NEQuNkYuNkUgOyBcIk1vblwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NTQuNzUuNjUgOyBcIlR1ZVwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NTcuNjUuNjQgOyBcIldlZFwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NTQuNjguNzUgOyBcIlRodVwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDYuNzIuNjkgOyBcIkZyaVwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NTMuNjEuNzQgOyBcIlNhdFwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NTMuNzUuNkUgOyBcIlN1blwiLCBjYXNlLXNlbnNpdGl2ZVxuICBkYXRlMSAgICAgICAgPSBkYXkgU1AgbW9udGggU1AgeWVhclxuICAgICAgICAgICAgICAgICAgOyBlLmcuLCAwMiBKdW4gMTk4MlxuXG4gIGRheSAgICAgICAgICA9IDJESUdJVFxuICBtb250aCAgICAgICAgPSAleDRBLjYxLjZFIDsgXCJKYW5cIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDQ2LjY1LjYyIDsgXCJGZWJcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDRELjYxLjcyIDsgXCJNYXJcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDQxLjcwLjcyIDsgXCJBcHJcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDRELjYxLjc5IDsgXCJNYXlcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDRBLjc1LjZFIDsgXCJKdW5cIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDRBLjc1LjZDIDsgXCJKdWxcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDQxLjc1LjY3IDsgXCJBdWdcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDUzLjY1LjcwIDsgXCJTZXBcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDRGLjYzLjc0IDsgXCJPY3RcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDRFLjZGLjc2IDsgXCJOb3ZcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDQ0LjY1LjYzIDsgXCJEZWNcIiwgY2FzZS1zZW5zaXRpdmVcbiAgeWVhciAgICAgICAgID0gNERJR0lUXG5cbiAgR01UICAgICAgICAgID0gJXg0Ny40RC41NCA7IFwiR01UXCIsIGNhc2Utc2Vuc2l0aXZlXG5cbiAgdGltZS1vZi1kYXkgID0gaG91ciBcIjpcIiBtaW51dGUgXCI6XCIgc2Vjb25kXG4gICAgICAgICAgICAgIDsgMDA6MDA6MDAgLSAyMzo1OTo2MCAobGVhcCBzZWNvbmQpXG5cbiAgaG91ciAgICAgICAgID0gMkRJR0lUXG4gIG1pbnV0ZSAgICAgICA9IDJESUdJVFxuICBzZWNvbmQgICAgICAgPSAyRElHSVRcbiAqL1xuZnVuY3Rpb24gdG9JTUZEYXRlIChkYXRlKSB7XG4gIGlmICh0eXBlb2YgZGF0ZSA9PT0gJ251bWJlcicpIHtcbiAgICBkYXRlID0gbmV3IERhdGUoZGF0ZSlcbiAgfVxuXG4gIGNvbnN0IGRheXMgPSBbXG4gICAgJ1N1bicsICdNb24nLCAnVHVlJywgJ1dlZCcsXG4gICAgJ1RodScsICdGcmknLCAnU2F0J1xuICBdXG5cbiAgY29uc3QgbW9udGhzID0gW1xuICAgICdKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsXG4gICAgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ1xuICBdXG5cbiAgY29uc3QgZGF5TmFtZSA9IGRheXNbZGF0ZS5nZXRVVENEYXkoKV1cbiAgY29uc3QgZGF5ID0gZGF0ZS5nZXRVVENEYXRlKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXG4gIGNvbnN0IG1vbnRoID0gbW9udGhzW2RhdGUuZ2V0VVRDTW9udGgoKV1cbiAgY29uc3QgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKVxuICBjb25zdCBob3VyID0gZGF0ZS5nZXRVVENIb3VycygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxuICBjb25zdCBtaW51dGUgPSBkYXRlLmdldFVUQ01pbnV0ZXMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcbiAgY29uc3Qgc2Vjb25kID0gZGF0ZS5nZXRVVENTZWNvbmRzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXG5cbiAgcmV0dXJuIGAke2RheU5hbWV9LCAke2RheX0gJHttb250aH0gJHt5ZWFyfSAke2hvdXJ9OiR7bWludXRlfToke3NlY29uZH0gR01UYFxufVxuXG4vKipcbiBtYXgtYWdlLWF2ICAgICAgICA9IFwiTWF4LUFnZT1cIiBub24temVyby1kaWdpdCAqRElHSVRcbiAgICAgICAgICAgICAgICAgICAgICAgOyBJbiBwcmFjdGljZSwgYm90aCBleHBpcmVzLWF2IGFuZCBtYXgtYWdlLWF2XG4gICAgICAgICAgICAgICAgICAgICAgIDsgYXJlIGxpbWl0ZWQgdG8gZGF0ZXMgcmVwcmVzZW50YWJsZSBieSB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgOyB1c2VyIGFnZW50LlxuICogQHBhcmFtIHtudW1iZXJ9IG1heEFnZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvb2tpZU1heEFnZSAobWF4QWdlKSB7XG4gIGlmIChtYXhBZ2UgPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBtYXgtYWdlJylcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzYyNjUjc2VjdGlvbi00LjEuMVxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW5kZXgnKS5Db29raWV9IGNvb2tpZVxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnkgKGNvb2tpZSkge1xuICBpZiAoY29va2llLm5hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHZhbGlkYXRlQ29va2llTmFtZShjb29raWUubmFtZSlcbiAgdmFsaWRhdGVDb29raWVWYWx1ZShjb29raWUudmFsdWUpXG5cbiAgY29uc3Qgb3V0ID0gW2Ake2Nvb2tpZS5uYW1lfT0ke2Nvb2tpZS52YWx1ZX1gXVxuXG4gIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLWNvb2tpZS1wcmVmaXhlcy0wMCNzZWN0aW9uLTMuMVxuICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1jb29raWUtcHJlZml4ZXMtMDAjc2VjdGlvbi0zLjJcbiAgaWYgKGNvb2tpZS5uYW1lLnN0YXJ0c1dpdGgoJ19fU2VjdXJlLScpKSB7XG4gICAgY29va2llLnNlY3VyZSA9IHRydWVcbiAgfVxuXG4gIGlmIChjb29raWUubmFtZS5zdGFydHNXaXRoKCdfX0hvc3QtJykpIHtcbiAgICBjb29raWUuc2VjdXJlID0gdHJ1ZVxuICAgIGNvb2tpZS5kb21haW4gPSBudWxsXG4gICAgY29va2llLnBhdGggPSAnLydcbiAgfVxuXG4gIGlmIChjb29raWUuc2VjdXJlKSB7XG4gICAgb3V0LnB1c2goJ1NlY3VyZScpXG4gIH1cblxuICBpZiAoY29va2llLmh0dHBPbmx5KSB7XG4gICAgb3V0LnB1c2goJ0h0dHBPbmx5JylcbiAgfVxuXG4gIGlmICh0eXBlb2YgY29va2llLm1heEFnZSA9PT0gJ251bWJlcicpIHtcbiAgICB2YWxpZGF0ZUNvb2tpZU1heEFnZShjb29raWUubWF4QWdlKVxuICAgIG91dC5wdXNoKGBNYXgtQWdlPSR7Y29va2llLm1heEFnZX1gKVxuICB9XG5cbiAgaWYgKGNvb2tpZS5kb21haW4pIHtcbiAgICB2YWxpZGF0ZUNvb2tpZURvbWFpbihjb29raWUuZG9tYWluKVxuICAgIG91dC5wdXNoKGBEb21haW49JHtjb29raWUuZG9tYWlufWApXG4gIH1cblxuICBpZiAoY29va2llLnBhdGgpIHtcbiAgICB2YWxpZGF0ZUNvb2tpZVBhdGgoY29va2llLnBhdGgpXG4gICAgb3V0LnB1c2goYFBhdGg9JHtjb29raWUucGF0aH1gKVxuICB9XG5cbiAgaWYgKGNvb2tpZS5leHBpcmVzICYmIGNvb2tpZS5leHBpcmVzLnRvU3RyaW5nKCkgIT09ICdJbnZhbGlkIERhdGUnKSB7XG4gICAgb3V0LnB1c2goYEV4cGlyZXM9JHt0b0lNRkRhdGUoY29va2llLmV4cGlyZXMpfWApXG4gIH1cblxuICBpZiAoY29va2llLnNhbWVTaXRlKSB7XG4gICAgb3V0LnB1c2goYFNhbWVTaXRlPSR7Y29va2llLnNhbWVTaXRlfWApXG4gIH1cblxuICBmb3IgKGNvbnN0IHBhcnQgb2YgY29va2llLnVucGFyc2VkKSB7XG4gICAgaWYgKCFwYXJ0LmluY2x1ZGVzKCc9JykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB1bnBhcnNlZCcpXG4gICAgfVxuXG4gICAgY29uc3QgW2tleSwgLi4udmFsdWVdID0gcGFydC5zcGxpdCgnPScpXG5cbiAgICBvdXQucHVzaChgJHtrZXkudHJpbSgpfT0ke3ZhbHVlLmpvaW4oJz0nKX1gKVxuICB9XG5cbiAgcmV0dXJuIG91dC5qb2luKCc7ICcpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0NUTEV4Y2x1ZGluZ0h0YWIsXG4gIHZhbGlkYXRlQ29va2llTmFtZSxcbiAgdmFsaWRhdGVDb29raWVQYXRoLFxuICB2YWxpZGF0ZUNvb2tpZVZhbHVlLFxuICB0b0lNRkRhdGUsXG4gIHN0cmluZ2lmeVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IG1heE5hbWVWYWx1ZVBhaXJTaXplLCBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsgaXNDVExFeGNsdWRpbmdIdGFiIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZGF0YVVSTCcpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBQYXJzZXMgdGhlIGZpZWxkLXZhbHVlIGF0dHJpYnV0ZXMgb2YgYSBzZXQtY29va2llIGhlYWRlciBzdHJpbmcuXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjRcbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWFkZXJcbiAqIEByZXR1cm5zIGlmIHRoZSBoZWFkZXIgaXMgaW52YWxpZCwgbnVsbCB3aWxsIGJlIHJldHVybmVkXG4gKi9cbmZ1bmN0aW9uIHBhcnNlU2V0Q29va2llIChoZWFkZXIpIHtcbiAgLy8gMS4gSWYgdGhlIHNldC1jb29raWUtc3RyaW5nIGNvbnRhaW5zIGEgJXgwMC0wOCAvICV4MEEtMUYgLyAleDdGXG4gIC8vICAgIGNoYXJhY3RlciAoQ1RMIGNoYXJhY3RlcnMgZXhjbHVkaW5nIEhUQUIpOiBBYm9ydCB0aGVzZSBzdGVwcyBhbmRcbiAgLy8gICAgaWdub3JlIHRoZSBzZXQtY29va2llLXN0cmluZyBlbnRpcmVseS5cbiAgaWYgKGlzQ1RMRXhjbHVkaW5nSHRhYihoZWFkZXIpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGxldCBuYW1lVmFsdWVQYWlyID0gJydcbiAgbGV0IHVucGFyc2VkQXR0cmlidXRlcyA9ICcnXG4gIGxldCBuYW1lID0gJydcbiAgbGV0IHZhbHVlID0gJydcblxuICAvLyAyLiBJZiB0aGUgc2V0LWNvb2tpZS1zdHJpbmcgY29udGFpbnMgYSAleDNCIChcIjtcIikgY2hhcmFjdGVyOlxuICBpZiAoaGVhZGVyLmluY2x1ZGVzKCc7JykpIHtcbiAgICAvLyAxLiBUaGUgbmFtZS12YWx1ZS1wYWlyIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyB1cCB0byxcbiAgICAvLyAgICBidXQgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0IgKFwiO1wiKSwgYW5kIHRoZSB1bnBhcnNlZC1cbiAgICAvLyAgICBhdHRyaWJ1dGVzIGNvbnNpc3Qgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgc2V0LWNvb2tpZS1zdHJpbmdcbiAgICAvLyAgICAoaW5jbHVkaW5nIHRoZSAleDNCIChcIjtcIikgaW4gcXVlc3Rpb24pLlxuICAgIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgICBuYW1lVmFsdWVQYWlyID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoJzsnLCBoZWFkZXIsIHBvc2l0aW9uKVxuICAgIHVucGFyc2VkQXR0cmlidXRlcyA9IGhlYWRlci5zbGljZShwb3NpdGlvbi5wb3NpdGlvbilcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBUaGUgbmFtZS12YWx1ZS1wYWlyIHN0cmluZyBjb25zaXN0cyBvZiBhbGwgdGhlIGNoYXJhY3RlcnNcbiAgICAvLyAgICBjb250YWluZWQgaW4gdGhlIHNldC1jb29raWUtc3RyaW5nLCBhbmQgdGhlIHVucGFyc2VkLVxuICAgIC8vICAgIGF0dHJpYnV0ZXMgaXMgdGhlIGVtcHR5IHN0cmluZy5cbiAgICBuYW1lVmFsdWVQYWlyID0gaGVhZGVyXG4gIH1cblxuICAvLyAzLiBJZiB0aGUgbmFtZS12YWx1ZS1wYWlyIHN0cmluZyBsYWNrcyBhICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXIsIHRoZW5cbiAgLy8gICAgdGhlIG5hbWUgc3RyaW5nIGlzIGVtcHR5LCBhbmQgdGhlIHZhbHVlIHN0cmluZyBpcyB0aGUgdmFsdWUgb2ZcbiAgLy8gICAgbmFtZS12YWx1ZS1wYWlyLlxuICBpZiAoIW5hbWVWYWx1ZVBhaXIuaW5jbHVkZXMoJz0nKSkge1xuICAgIHZhbHVlID0gbmFtZVZhbHVlUGFpclxuICB9IGVsc2Uge1xuICAgIC8vICAgIE90aGVyd2lzZSwgdGhlIG5hbWUgc3RyaW5nIGNvbnNpc3RzIG9mIHRoZSBjaGFyYWN0ZXJzIHVwIHRvLCBidXRcbiAgICAvLyAgICBub3QgaW5jbHVkaW5nLCB0aGUgZmlyc3QgJXgzRCAoXCI9XCIpIGNoYXJhY3RlciwgYW5kIHRoZSAocG9zc2libHlcbiAgICAvLyAgICBlbXB0eSkgdmFsdWUgc3RyaW5nIGNvbnNpc3RzIG9mIHRoZSBjaGFyYWN0ZXJzIGFmdGVyIHRoZSBmaXJzdFxuICAgIC8vICAgICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXIuXG4gICAgY29uc3QgcG9zaXRpb24gPSB7IHBvc2l0aW9uOiAwIH1cbiAgICBuYW1lID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAnPScsXG4gICAgICBuYW1lVmFsdWVQYWlyLFxuICAgICAgcG9zaXRpb25cbiAgICApXG4gICAgdmFsdWUgPSBuYW1lVmFsdWVQYWlyLnNsaWNlKHBvc2l0aW9uLnBvc2l0aW9uICsgMSlcbiAgfVxuXG4gIC8vIDQuIFJlbW92ZSBhbnkgbGVhZGluZyBvciB0cmFpbGluZyBXU1AgY2hhcmFjdGVycyBmcm9tIHRoZSBuYW1lXG4gIC8vICAgIHN0cmluZyBhbmQgdGhlIHZhbHVlIHN0cmluZy5cbiAgbmFtZSA9IG5hbWUudHJpbSgpXG4gIHZhbHVlID0gdmFsdWUudHJpbSgpXG5cbiAgLy8gNS4gSWYgdGhlIHN1bSBvZiB0aGUgbGVuZ3RocyBvZiB0aGUgbmFtZSBzdHJpbmcgYW5kIHRoZSB2YWx1ZSBzdHJpbmdcbiAgLy8gICAgaXMgbW9yZSB0aGFuIDQwOTYgb2N0ZXRzLCBhYm9ydCB0aGVzZSBzdGVwcyBhbmQgaWdub3JlIHRoZSBzZXQtXG4gIC8vICAgIGNvb2tpZS1zdHJpbmcgZW50aXJlbHkuXG4gIGlmIChuYW1lLmxlbmd0aCArIHZhbHVlLmxlbmd0aCA+IG1heE5hbWVWYWx1ZVBhaXJTaXplKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIDYuIFRoZSBjb29raWUtbmFtZSBpcyB0aGUgbmFtZSBzdHJpbmcsIGFuZCB0aGUgY29va2llLXZhbHVlIGlzIHRoZVxuICAvLyAgICB2YWx1ZSBzdHJpbmcuXG4gIHJldHVybiB7XG4gICAgbmFtZSwgdmFsdWUsIC4uLnBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcylcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgcmVtYWluaW5nIGF0dHJpYnV0ZXMgb2YgYSBzZXQtY29va2llIGhlYWRlclxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40XG4gKiBAcGFyYW0ge3N0cmluZ30gdW5wYXJzZWRBdHRyaWJ1dGVzXG4gKiBAcGFyYW0ge1tPYmplY3QuPHN0cmluZywgdW5rbm93bj5dPXt9fSBjb29raWVBdHRyaWJ1dGVMaXN0XG4gKi9cbmZ1bmN0aW9uIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzICh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QgPSB7fSkge1xuICAvLyAxLiBJZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcyBzdHJpbmcgaXMgZW1wdHksIHNraXAgdGhlIHJlc3Qgb2ZcbiAgLy8gICAgdGhlc2Ugc3RlcHMuXG4gIGlmICh1bnBhcnNlZEF0dHJpYnV0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGNvb2tpZUF0dHJpYnV0ZUxpc3RcbiAgfVxuXG4gIC8vIDIuIERpc2NhcmQgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcyAod2hpY2hcbiAgLy8gICAgd2lsbCBiZSBhICV4M0IgKFwiO1wiKSBjaGFyYWN0ZXIpLlxuICBhc3NlcnQodW5wYXJzZWRBdHRyaWJ1dGVzWzBdID09PSAnOycpXG4gIHVucGFyc2VkQXR0cmlidXRlcyA9IHVucGFyc2VkQXR0cmlidXRlcy5zbGljZSgxKVxuXG4gIGxldCBjb29raWVBdiA9ICcnXG5cbiAgLy8gMy4gSWYgdGhlIHJlbWFpbmluZyB1bnBhcnNlZC1hdHRyaWJ1dGVzIGNvbnRhaW5zIGEgJXgzQiAoXCI7XCIpXG4gIC8vICAgIGNoYXJhY3RlcjpcbiAgaWYgKHVucGFyc2VkQXR0cmlidXRlcy5pbmNsdWRlcygnOycpKSB7XG4gICAgLy8gMS4gQ29uc3VtZSB0aGUgY2hhcmFjdGVycyBvZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcyB1cCB0bywgYnV0XG4gICAgLy8gICAgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0IgKFwiO1wiKSBjaGFyYWN0ZXIuXG4gICAgY29va2llQXYgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICc7JyxcbiAgICAgIHVucGFyc2VkQXR0cmlidXRlcyxcbiAgICAgIHsgcG9zaXRpb246IDAgfVxuICAgIClcbiAgICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSB1bnBhcnNlZEF0dHJpYnV0ZXMuc2xpY2UoY29va2llQXYubGVuZ3RoKVxuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIENvbnN1bWUgdGhlIHJlbWFpbmRlciBvZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcy5cbiAgICBjb29raWVBdiA9IHVucGFyc2VkQXR0cmlidXRlc1xuICAgIHVucGFyc2VkQXR0cmlidXRlcyA9ICcnXG4gIH1cblxuICAvLyBMZXQgdGhlIGNvb2tpZS1hdiBzdHJpbmcgYmUgdGhlIGNoYXJhY3RlcnMgY29uc3VtZWQgaW4gdGhpcyBzdGVwLlxuXG4gIGxldCBhdHRyaWJ1dGVOYW1lID0gJydcbiAgbGV0IGF0dHJpYnV0ZVZhbHVlID0gJydcblxuICAvLyA0LiBJZiB0aGUgY29va2llLWF2IHN0cmluZyBjb250YWlucyBhICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXI6XG4gIGlmIChjb29raWVBdi5pbmNsdWRlcygnPScpKSB7XG4gICAgLy8gMS4gVGhlIChwb3NzaWJseSBlbXB0eSkgYXR0cmlidXRlLW5hbWUgc3RyaW5nIGNvbnNpc3RzIG9mIHRoZVxuICAgIC8vICAgIGNoYXJhY3RlcnMgdXAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nLCB0aGUgZmlyc3QgJXgzRCAoXCI9XCIpXG4gICAgLy8gICAgY2hhcmFjdGVyLCBhbmQgdGhlIChwb3NzaWJseSBlbXB0eSkgYXR0cmlidXRlLXZhbHVlIHN0cmluZ1xuICAgIC8vICAgIGNvbnNpc3RzIG9mIHRoZSBjaGFyYWN0ZXJzIGFmdGVyIHRoZSBmaXJzdCAleDNEIChcIj1cIilcbiAgICAvLyAgICBjaGFyYWN0ZXIuXG4gICAgY29uc3QgcG9zaXRpb24gPSB7IHBvc2l0aW9uOiAwIH1cblxuICAgIGF0dHJpYnV0ZU5hbWUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICc9JyxcbiAgICAgIGNvb2tpZUF2LFxuICAgICAgcG9zaXRpb25cbiAgICApXG4gICAgYXR0cmlidXRlVmFsdWUgPSBjb29raWVBdi5zbGljZShwb3NpdGlvbi5wb3NpdGlvbiArIDEpXG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gVGhlIGF0dHJpYnV0ZS1uYW1lIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgZW50aXJlIGNvb2tpZS1hdlxuICAgIC8vICAgIHN0cmluZywgYW5kIHRoZSBhdHRyaWJ1dGUtdmFsdWUgc3RyaW5nIGlzIGVtcHR5LlxuICAgIGF0dHJpYnV0ZU5hbWUgPSBjb29raWVBdlxuICB9XG5cbiAgLy8gNS4gUmVtb3ZlIGFueSBsZWFkaW5nIG9yIHRyYWlsaW5nIFdTUCBjaGFyYWN0ZXJzIGZyb20gdGhlIGF0dHJpYnV0ZS1cbiAgLy8gICAgbmFtZSBzdHJpbmcgYW5kIHRoZSBhdHRyaWJ1dGUtdmFsdWUgc3RyaW5nLlxuICBhdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlTmFtZS50cmltKClcbiAgYXR0cmlidXRlVmFsdWUgPSBhdHRyaWJ1dGVWYWx1ZS50cmltKClcblxuICAvLyA2LiBJZiB0aGUgYXR0cmlidXRlLXZhbHVlIGlzIGxvbmdlciB0aGFuIDEwMjQgb2N0ZXRzLCBpZ25vcmUgdGhlXG4gIC8vICAgIGNvb2tpZS1hdiBzdHJpbmcgYW5kIHJldHVybiB0byBTdGVwIDEgb2YgdGhpcyBhbGdvcml0aG0uXG4gIGlmIChhdHRyaWJ1dGVWYWx1ZS5sZW5ndGggPiBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUpIHtcbiAgICByZXR1cm4gcGFyc2VVbnBhcnNlZEF0dHJpYnV0ZXModW5wYXJzZWRBdHRyaWJ1dGVzLCBjb29raWVBdHRyaWJ1dGVMaXN0KVxuICB9XG5cbiAgLy8gNy4gUHJvY2VzcyB0aGUgYXR0cmlidXRlLW5hbWUgYW5kIGF0dHJpYnV0ZS12YWx1ZSBhY2NvcmRpbmcgdG8gdGhlXG4gIC8vICAgIHJlcXVpcmVtZW50cyBpbiB0aGUgZm9sbG93aW5nIHN1YnNlY3Rpb25zLiAgKE5vdGljZSB0aGF0XG4gIC8vICAgIGF0dHJpYnV0ZXMgd2l0aCB1bnJlY29nbml6ZWQgYXR0cmlidXRlLW5hbWVzIGFyZSBpZ25vcmVkLilcbiAgY29uc3QgYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9IGF0dHJpYnV0ZU5hbWUudG9Mb3dlckNhc2UoKVxuXG4gIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuMVxuICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoZXMgdGhlIHN0cmluZ1xuICAvLyBcIkV4cGlyZXNcIiwgdGhlIHVzZXIgYWdlbnQgTVVTVCBwcm9jZXNzIHRoZSBjb29raWUtYXYgYXMgZm9sbG93cy5cbiAgaWYgKGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPT09ICdleHBpcmVzJykge1xuICAgIC8vIDEuIExldCB0aGUgZXhwaXJ5LXRpbWUgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHRoZSBhdHRyaWJ1dGUtdmFsdWVcbiAgICAvLyAgICBhcyBjb29raWUtZGF0ZSAoc2VlIFNlY3Rpb24gNS4xLjEpLlxuICAgIGNvbnN0IGV4cGlyeVRpbWUgPSBuZXcgRGF0ZShhdHRyaWJ1dGVWYWx1ZSlcblxuICAgIC8vIDIuIElmIHRoZSBhdHRyaWJ1dGUtdmFsdWUgZmFpbGVkIHRvIHBhcnNlIGFzIGEgY29va2llIGRhdGUsIGlnbm9yZVxuICAgIC8vICAgIHRoZSBjb29raWUtYXYuXG5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LmV4cGlyZXMgPSBleHBpcnlUaW1lXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ21heC1hZ2UnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC4yXG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmcgXCJNYXgtXG4gICAgLy8gQWdlXCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3MuXG5cbiAgICAvLyAxLiBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBhdHRyaWJ1dGUtdmFsdWUgaXMgbm90IGEgRElHSVQgb3IgYVxuICAgIC8vICAgIFwiLVwiIGNoYXJhY3RlciwgaWdub3JlIHRoZSBjb29raWUtYXYuXG4gICAgY29uc3QgY2hhckNvZGUgPSBhdHRyaWJ1dGVWYWx1ZS5jaGFyQ29kZUF0KDApXG5cbiAgICBpZiAoKGNoYXJDb2RlIDwgNDggfHwgY2hhckNvZGUgPiA1NykgJiYgYXR0cmlidXRlVmFsdWVbMF0gIT09ICctJykge1xuICAgICAgcmV0dXJuIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcywgY29va2llQXR0cmlidXRlTGlzdClcbiAgICB9XG5cbiAgICAvLyAyLiBJZiB0aGUgcmVtYWluZGVyIG9mIGF0dHJpYnV0ZS12YWx1ZSBjb250YWlucyBhIG5vbi1ESUdJVFxuICAgIC8vICAgIGNoYXJhY3RlciwgaWdub3JlIHRoZSBjb29raWUtYXYuXG4gICAgaWYgKCEvXlxcZCskLy50ZXN0KGF0dHJpYnV0ZVZhbHVlKSkge1xuICAgICAgcmV0dXJuIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcywgY29va2llQXR0cmlidXRlTGlzdClcbiAgICB9XG5cbiAgICAvLyAzLiBMZXQgZGVsdGEtc2Vjb25kcyBiZSB0aGUgYXR0cmlidXRlLXZhbHVlIGNvbnZlcnRlZCB0byBhbiBpbnRlZ2VyLlxuICAgIGNvbnN0IGRlbHRhU2Vjb25kcyA9IE51bWJlcihhdHRyaWJ1dGVWYWx1ZSlcblxuICAgIC8vIDQuIExldCBjb29raWUtYWdlLWxpbWl0IGJlIHRoZSBtYXhpbXVtIGFnZSBvZiB0aGUgY29va2llICh3aGljaFxuICAgIC8vICAgIFNIT1VMRCBiZSA0MDAgZGF5cyBvciBsZXNzLCBzZWUgU2VjdGlvbiA0LjEuMi4yKS5cblxuICAgIC8vIDUuIFNldCBkZWx0YS1zZWNvbmRzIHRvIHRoZSBzbWFsbGVyIG9mIGl0cyBwcmVzZW50IHZhbHVlIGFuZCBjb29raWUtXG4gICAgLy8gICAgYWdlLWxpbWl0LlxuICAgIC8vIGRlbHRhU2Vjb25kcyA9IE1hdGgubWluKGRlbHRhU2Vjb25kcyAqIDEwMDAsIG1heEV4cGlyZXNNcylcblxuICAgIC8vIDYuIElmIGRlbHRhLXNlY29uZHMgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8gKDApLCBsZXQgZXhwaXJ5LVxuICAgIC8vICAgIHRpbWUgYmUgdGhlIGVhcmxpZXN0IHJlcHJlc2VudGFibGUgZGF0ZSBhbmQgdGltZS4gIE90aGVyd2lzZSwgbGV0XG4gICAgLy8gICAgdGhlIGV4cGlyeS10aW1lIGJlIHRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUgcGx1cyBkZWx0YS1zZWNvbmRzXG4gICAgLy8gICAgc2Vjb25kcy5cbiAgICAvLyBjb25zdCBleHBpcnlUaW1lID0gZGVsdGFTZWNvbmRzIDw9IDAgPyBEYXRlLm5vdygpIDogRGF0ZS5ub3coKSArIGRlbHRhU2Vjb25kc1xuXG4gICAgLy8gNy4gQXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAvLyAgICBhdHRyaWJ1dGUtbmFtZSBvZiBNYXgtQWdlIGFuZCBhbiBhdHRyaWJ1dGUtdmFsdWUgb2YgZXhwaXJ5LXRpbWUuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5tYXhBZ2UgPSBkZWx0YVNlY29uZHNcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnZG9tYWluJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuM1xuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nIFwiRG9tYWluXCIsXG4gICAgLy8gdGhlIHVzZXIgYWdlbnQgTVVTVCBwcm9jZXNzIHRoZSBjb29raWUtYXYgYXMgZm9sbG93cy5cblxuICAgIC8vIDEuIExldCBjb29raWUtZG9tYWluIGJlIHRoZSBhdHRyaWJ1dGUtdmFsdWUuXG4gICAgbGV0IGNvb2tpZURvbWFpbiA9IGF0dHJpYnV0ZVZhbHVlXG5cbiAgICAvLyAyLiBJZiBjb29raWUtZG9tYWluIHN0YXJ0cyB3aXRoICV4MkUgKFwiLlwiKSwgbGV0IGNvb2tpZS1kb21haW4gYmVcbiAgICAvLyAgICBjb29raWUtZG9tYWluIHdpdGhvdXQgaXRzIGxlYWRpbmcgJXgyRSAoXCIuXCIpLlxuICAgIGlmIChjb29raWVEb21haW5bMF0gPT09ICcuJykge1xuICAgICAgY29va2llRG9tYWluID0gY29va2llRG9tYWluLnNsaWNlKDEpXG4gICAgfVxuXG4gICAgLy8gMy4gQ29udmVydCB0aGUgY29va2llLWRvbWFpbiB0byBsb3dlciBjYXNlLlxuICAgIGNvb2tpZURvbWFpbiA9IGNvb2tpZURvbWFpbi50b0xvd2VyQ2FzZSgpXG5cbiAgICAvLyA0LiBBcHBlbmQgYW4gYXR0cmlidXRlIHRvIHRoZSBjb29raWUtYXR0cmlidXRlLWxpc3Qgd2l0aCBhblxuICAgIC8vICAgIGF0dHJpYnV0ZS1uYW1lIG9mIERvbWFpbiBhbmQgYW4gYXR0cmlidXRlLXZhbHVlIG9mIGNvb2tpZS1kb21haW4uXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5kb21haW4gPSBjb29raWVEb21haW5cbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAncGF0aCcpIHtcbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjRcbiAgICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoZXMgdGhlIHN0cmluZyBcIlBhdGhcIixcbiAgICAvLyB0aGUgdXNlciBhZ2VudCBNVVNUIHByb2Nlc3MgdGhlIGNvb2tpZS1hdiBhcyBmb2xsb3dzLlxuXG4gICAgLy8gMS4gSWYgdGhlIGF0dHJpYnV0ZS12YWx1ZSBpcyBlbXB0eSBvciBpZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZVxuICAgIC8vICAgIGF0dHJpYnV0ZS12YWx1ZSBpcyBub3QgJXgyRiAoXCIvXCIpOlxuICAgIGxldCBjb29raWVQYXRoID0gJydcbiAgICBpZiAoYXR0cmlidXRlVmFsdWUubGVuZ3RoID09PSAwIHx8IGF0dHJpYnV0ZVZhbHVlWzBdICE9PSAnLycpIHtcbiAgICAgIC8vIDEuIExldCBjb29raWUtcGF0aCBiZSB0aGUgZGVmYXVsdC1wYXRoLlxuICAgICAgY29va2llUGF0aCA9ICcvJ1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2U6XG5cbiAgICAgIC8vIDEuIExldCBjb29raWUtcGF0aCBiZSB0aGUgYXR0cmlidXRlLXZhbHVlLlxuICAgICAgY29va2llUGF0aCA9IGF0dHJpYnV0ZVZhbHVlXG4gICAgfVxuXG4gICAgLy8gMi4gQXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAvLyAgICBhdHRyaWJ1dGUtbmFtZSBvZiBQYXRoIGFuZCBhbiBhdHRyaWJ1dGUtdmFsdWUgb2YgY29va2llLXBhdGguXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5wYXRoID0gY29va2llUGF0aFxuICB9IGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPT09ICdzZWN1cmUnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC41XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmcgXCJTZWN1cmVcIixcbiAgICAvLyB0aGUgdXNlciBhZ2VudCBNVVNUIGFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdFxuICAgIC8vIHdpdGggYW4gYXR0cmlidXRlLW5hbWUgb2YgU2VjdXJlIGFuZCBhbiBlbXB0eSBhdHRyaWJ1dGUtdmFsdWUuXG5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnNlY3VyZSA9IHRydWVcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnaHR0cG9ubHknKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC42XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmdcbiAgICAvLyBcIkh0dHBPbmx5XCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgYXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLVxuICAgIC8vIGF0dHJpYnV0ZS1saXN0IHdpdGggYW4gYXR0cmlidXRlLW5hbWUgb2YgSHR0cE9ubHkgYW5kIGFuIGVtcHR5XG4gICAgLy8gYXR0cmlidXRlLXZhbHVlLlxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5odHRwT25seSA9IHRydWVcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnc2FtZXNpdGUnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC43XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmdcbiAgICAvLyBcIlNhbWVTaXRlXCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3M6XG5cbiAgICAvLyAxLiBMZXQgZW5mb3JjZW1lbnQgYmUgXCJEZWZhdWx0XCIuXG4gICAgbGV0IGVuZm9yY2VtZW50ID0gJ0RlZmF1bHQnXG5cbiAgICBjb25zdCBhdHRyaWJ1dGVWYWx1ZUxvd2VyY2FzZSA9IGF0dHJpYnV0ZVZhbHVlLnRvTG93ZXJDYXNlKClcbiAgICAvLyAyLiBJZiBjb29raWUtYXYncyBhdHRyaWJ1dGUtdmFsdWUgaXMgYSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvclxuICAgIC8vICAgIFwiTm9uZVwiLCBzZXQgZW5mb3JjZW1lbnQgdG8gXCJOb25lXCIuXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlTG93ZXJjYXNlLmluY2x1ZGVzKCdub25lJykpIHtcbiAgICAgIGVuZm9yY2VtZW50ID0gJ05vbmUnXG4gICAgfVxuXG4gICAgLy8gMy4gSWYgY29va2llLWF2J3MgYXR0cmlidXRlLXZhbHVlIGlzIGEgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3JcbiAgICAvLyAgICBcIlN0cmljdFwiLCBzZXQgZW5mb3JjZW1lbnQgdG8gXCJTdHJpY3RcIi5cbiAgICBpZiAoYXR0cmlidXRlVmFsdWVMb3dlcmNhc2UuaW5jbHVkZXMoJ3N0cmljdCcpKSB7XG4gICAgICBlbmZvcmNlbWVudCA9ICdTdHJpY3QnXG4gICAgfVxuXG4gICAgLy8gNC4gSWYgY29va2llLWF2J3MgYXR0cmlidXRlLXZhbHVlIGlzIGEgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3JcbiAgICAvLyAgICBcIkxheFwiLCBzZXQgZW5mb3JjZW1lbnQgdG8gXCJMYXhcIi5cbiAgICBpZiAoYXR0cmlidXRlVmFsdWVMb3dlcmNhc2UuaW5jbHVkZXMoJ2xheCcpKSB7XG4gICAgICBlbmZvcmNlbWVudCA9ICdMYXgnXG4gICAgfVxuXG4gICAgLy8gNS4gQXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAvLyAgICBhdHRyaWJ1dGUtbmFtZSBvZiBcIlNhbWVTaXRlXCIgYW5kIGFuIGF0dHJpYnV0ZS12YWx1ZSBvZlxuICAgIC8vICAgIGVuZm9yY2VtZW50LlxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3Quc2FtZVNpdGUgPSBlbmZvcmNlbWVudFxuICB9IGVsc2Uge1xuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QudW5wYXJzZWQgPz89IFtdXG5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnVucGFyc2VkLnB1c2goYCR7YXR0cmlidXRlTmFtZX09JHthdHRyaWJ1dGVWYWx1ZX1gKVxuICB9XG5cbiAgLy8gOC4gUmV0dXJuIHRvIFN0ZXAgMSBvZiB0aGlzIGFsZ29yaXRobS5cbiAgcmV0dXJuIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcywgY29va2llQXR0cmlidXRlTGlzdClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHBhcnNlU2V0Q29va2llLFxuICBwYXJzZVVucGFyc2VkQXR0cmlidXRlc1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHBhcnNlU2V0Q29va2llIH0gPSByZXF1aXJlKCcuL3BhcnNlJylcbmNvbnN0IHsgc3RyaW5naWZ5IH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IEhlYWRlcnMgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2hlYWRlcnMnKVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENvb2tpZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZVxuICogQHByb3BlcnR5IHtEYXRlfG51bWJlcnx1bmRlZmluZWR9IGV4cGlyZXNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfHVuZGVmaW5lZH0gbWF4QWdlXG4gKiBAcHJvcGVydHkge3N0cmluZ3x1bmRlZmluZWR9IGRvbWFpblxuICogQHByb3BlcnR5IHtzdHJpbmd8dW5kZWZpbmVkfSBwYXRoXG4gKiBAcHJvcGVydHkge2Jvb2xlYW58dW5kZWZpbmVkfSBzZWN1cmVcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbnx1bmRlZmluZWR9IGh0dHBPbmx5XG4gKiBAcHJvcGVydHkgeydTdHJpY3QnfCdMYXgnfCdOb25lJ30gc2FtZVNpdGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IHVucGFyc2VkXG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge0hlYWRlcnN9IGhlYWRlcnNcbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fVxuICovXG5mdW5jdGlvbiBnZXRDb29raWVzIChoZWFkZXJzKSB7XG4gIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdnZXRDb29raWVzJyB9KVxuXG4gIHdlYmlkbC5icmFuZENoZWNrKGhlYWRlcnMsIEhlYWRlcnMsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gIGNvbnN0IGNvb2tpZSA9IGhlYWRlcnMuZ2V0KCdjb29raWUnKVxuICBjb25zdCBvdXQgPSB7fVxuXG4gIGlmICghY29va2llKSB7XG4gICAgcmV0dXJuIG91dFxuICB9XG5cbiAgZm9yIChjb25zdCBwaWVjZSBvZiBjb29raWUuc3BsaXQoJzsnKSkge1xuICAgIGNvbnN0IFtuYW1lLCAuLi52YWx1ZV0gPSBwaWVjZS5zcGxpdCgnPScpXG5cbiAgICBvdXRbbmFtZS50cmltKCldID0gdmFsdWUuam9pbignPScpXG4gIH1cblxuICByZXR1cm4gb3V0XG59XG5cbi8qKlxuICogQHBhcmFtIHtIZWFkZXJzfSBoZWFkZXJzXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHt7IHBhdGg/OiBzdHJpbmcsIGRvbWFpbj86IHN0cmluZyB9fHVuZGVmaW5lZH0gYXR0cmlidXRlc1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGRlbGV0ZUNvb2tpZSAoaGVhZGVycywgbmFtZSwgYXR0cmlidXRlcykge1xuICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnZGVsZXRlQ29va2llJyB9KVxuXG4gIHdlYmlkbC5icmFuZENoZWNrKGhlYWRlcnMsIEhlYWRlcnMsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcobmFtZSlcbiAgYXR0cmlidXRlcyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRlbGV0ZUNvb2tpZUF0dHJpYnV0ZXMoYXR0cmlidXRlcylcblxuICAvLyBNYXRjaGVzIGJlaGF2aW9yIG9mXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kZW5vbGFuZC9kZW5vX3N0ZC9ibG9iLzYzODI3YjE2MzMwYjgyNDg5YTA0NjE0MDI3YzMzYjc5MDRlMDhiZTUvaHR0cC9jb29raWUudHMjTDI3OFxuICBzZXRDb29raWUoaGVhZGVycywge1xuICAgIG5hbWUsXG4gICAgdmFsdWU6ICcnLFxuICAgIGV4cGlyZXM6IG5ldyBEYXRlKDApLFxuICAgIC4uLmF0dHJpYnV0ZXNcbiAgfSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0hlYWRlcnN9IGhlYWRlcnNcbiAqIEByZXR1cm5zIHtDb29raWVbXX1cbiAqL1xuZnVuY3Rpb24gZ2V0U2V0Q29va2llcyAoaGVhZGVycykge1xuICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnZ2V0U2V0Q29va2llcycgfSlcblxuICB3ZWJpZGwuYnJhbmRDaGVjayhoZWFkZXJzLCBIZWFkZXJzLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICBjb25zdCBjb29raWVzID0gaGVhZGVycy5nZXRTZXRDb29raWUoKVxuXG4gIGlmICghY29va2llcykge1xuICAgIHJldHVybiBbXVxuICB9XG5cbiAgcmV0dXJuIGNvb2tpZXMubWFwKChwYWlyKSA9PiBwYXJzZVNldENvb2tpZShwYWlyKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0hlYWRlcnN9IGhlYWRlcnNcbiAqIEBwYXJhbSB7Q29va2llfSBjb29raWVcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBzZXRDb29raWUgKGhlYWRlcnMsIGNvb2tpZSkge1xuICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnc2V0Q29va2llJyB9KVxuXG4gIHdlYmlkbC5icmFuZENoZWNrKGhlYWRlcnMsIEhlYWRlcnMsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gIGNvb2tpZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNvb2tpZShjb29raWUpXG5cbiAgY29uc3Qgc3RyID0gc3RyaW5naWZ5KGNvb2tpZSlcblxuICBpZiAoc3RyKSB7XG4gICAgaGVhZGVycy5hcHBlbmQoJ1NldC1Db29raWUnLCBzdHJpbmdpZnkoY29va2llKSlcbiAgfVxufVxuXG53ZWJpZGwuY29udmVydGVycy5EZWxldGVDb29raWVBdHRyaWJ1dGVzID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICdwYXRoJyxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyksXG4gICAga2V5OiAnZG9tYWluJyxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfVxuXSlcblxud2ViaWRsLmNvbnZlcnRlcnMuQ29va2llID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAga2V5OiAnbmFtZSdcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIGtleTogJ3ZhbHVlJ1xuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIoKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddKHZhbHVlKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpXG4gICAgfSksXG4gICAga2V5OiAnZXhwaXJlcycsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVyc1snbG9uZyBsb25nJ10pLFxuICAgIGtleTogJ21heEFnZScsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcpLFxuICAgIGtleTogJ2RvbWFpbicsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcpLFxuICAgIGtleTogJ3BhdGgnLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbiksXG4gICAga2V5OiAnc2VjdXJlJyxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4pLFxuICAgIGtleTogJ2h0dHBPbmx5JyxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nLFxuICAgIGtleTogJ3NhbWVTaXRlJyxcbiAgICBhbGxvd2VkVmFsdWVzOiBbJ1N0cmljdCcsICdMYXgnLCAnTm9uZSddXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcpLFxuICAgIGtleTogJ3VucGFyc2VkJyxcbiAgICBkZWZhdWx0VmFsdWU6IFtdXG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb29raWVzLFxuICBkZWxldGVDb29raWUsXG4gIGdldFNldENvb2tpZXMsXG4gIHNldENvb2tpZVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBUaGlzIGlzIGEgR2xvYmFsbHkgVW5pcXVlIElkZW50aWZpZXIgdW5pcXVlIHVzZWRcbi8vIHRvIHZhbGlkYXRlIHRoYXQgdGhlIGVuZHBvaW50IGFjY2VwdHMgd2Vic29ja2V0XG4vLyBjb25uZWN0aW9ucy5cbi8vIFNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNjQ1NS5odG1sI3NlY3Rpb24tMS4zXG5jb25zdCB1aWQgPSAnMjU4RUFGQTUtRTkxNC00N0RBLTk1Q0EtQzVBQjBEQzg1QjExJ1xuXG4vKiogQHR5cGUge1Byb3BlcnR5RGVzY3JpcHRvcn0gKi9cbmNvbnN0IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMgPSB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIHdyaXRhYmxlOiBmYWxzZSxcbiAgY29uZmlndXJhYmxlOiBmYWxzZVxufVxuXG5jb25zdCBzdGF0ZXMgPSB7XG4gIENPTk5FQ1RJTkc6IDAsXG4gIE9QRU46IDEsXG4gIENMT1NJTkc6IDIsXG4gIENMT1NFRDogM1xufVxuXG5jb25zdCBvcGNvZGVzID0ge1xuICBDT05USU5VQVRJT046IDB4MCxcbiAgVEVYVDogMHgxLFxuICBCSU5BUlk6IDB4MixcbiAgQ0xPU0U6IDB4OCxcbiAgUElORzogMHg5LFxuICBQT05HOiAweEFcbn1cblxuY29uc3QgbWF4VW5zaWduZWQxNkJpdCA9IDIgKiogMTYgLSAxIC8vIDY1NTM1XG5cbmNvbnN0IHBhcnNlclN0YXRlcyA9IHtcbiAgSU5GTzogMCxcbiAgUEFZTE9BRExFTkdUSF8xNjogMixcbiAgUEFZTE9BRExFTkdUSF82NDogMyxcbiAgUkVBRF9EQVRBOiA0XG59XG5cbmNvbnN0IGVtcHR5QnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKDApXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB1aWQsXG4gIHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIHN0YXRlcyxcbiAgb3Bjb2RlcyxcbiAgbWF4VW5zaWduZWQxNkJpdCxcbiAgcGFyc2VyU3RhdGVzLFxuICBlbXB0eUJ1ZmZlclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga1dlYlNvY2tldFVSTDogU3ltYm9sKCd1cmwnKSxcbiAga1JlYWR5U3RhdGU6IFN5bWJvbCgncmVhZHkgc3RhdGUnKSxcbiAga0NvbnRyb2xsZXI6IFN5bWJvbCgnY29udHJvbGxlcicpLFxuICBrUmVzcG9uc2U6IFN5bWJvbCgncmVzcG9uc2UnKSxcbiAga0JpbmFyeVR5cGU6IFN5bWJvbCgnYmluYXJ5IHR5cGUnKSxcbiAga1NlbnRDbG9zZTogU3ltYm9sKCdzZW50IGNsb3NlJyksXG4gIGtSZWNlaXZlZENsb3NlOiBTeW1ib2woJ3JlY2VpdmVkIGNsb3NlJyksXG4gIGtCeXRlUGFyc2VyOiBTeW1ib2woJ2J5dGUgcGFyc2VyJylcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IE1lc3NhZ2VQb3J0IH0gPSByZXF1aXJlKCd3b3JrZXJfdGhyZWFkcycpXG5cbi8qKlxuICogQHNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9jb21tcy5odG1sI21lc3NhZ2VldmVudFxuICovXG5jbGFzcyBNZXNzYWdlRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gICNldmVudEluaXRcblxuICBjb25zdHJ1Y3RvciAodHlwZSwgZXZlbnRJbml0RGljdCA9IHt9KSB7XG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ01lc3NhZ2VFdmVudCBjb25zdHJ1Y3RvcicgfSlcblxuICAgIHR5cGUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcodHlwZSlcbiAgICBldmVudEluaXREaWN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZUV2ZW50SW5pdChldmVudEluaXREaWN0KVxuXG4gICAgc3VwZXIodHlwZSwgZXZlbnRJbml0RGljdClcblxuICAgIHRoaXMuI2V2ZW50SW5pdCA9IGV2ZW50SW5pdERpY3RcbiAgfVxuXG4gIGdldCBkYXRhICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmRhdGFcbiAgfVxuXG4gIGdldCBvcmlnaW4gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIE1lc3NhZ2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQub3JpZ2luXG4gIH1cblxuICBnZXQgbGFzdEV2ZW50SWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIE1lc3NhZ2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQubGFzdEV2ZW50SWRcbiAgfVxuXG4gIGdldCBzb3VyY2UgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIE1lc3NhZ2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQuc291cmNlXG4gIH1cblxuICBnZXQgcG9ydHMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIE1lc3NhZ2VFdmVudClcblxuICAgIGlmICghT2JqZWN0LmlzRnJvemVuKHRoaXMuI2V2ZW50SW5pdC5wb3J0cykpIHtcbiAgICAgIE9iamVjdC5mcmVlemUodGhpcy4jZXZlbnRJbml0LnBvcnRzKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQucG9ydHNcbiAgfVxuXG4gIGluaXRNZXNzYWdlRXZlbnQgKFxuICAgIHR5cGUsXG4gICAgYnViYmxlcyA9IGZhbHNlLFxuICAgIGNhbmNlbGFibGUgPSBmYWxzZSxcbiAgICBkYXRhID0gbnVsbCxcbiAgICBvcmlnaW4gPSAnJyxcbiAgICBsYXN0RXZlbnRJZCA9ICcnLFxuICAgIHNvdXJjZSA9IG51bGwsXG4gICAgcG9ydHMgPSBbXVxuICApIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnTWVzc2FnZUV2ZW50LmluaXRNZXNzYWdlRXZlbnQnIH0pXG5cbiAgICByZXR1cm4gbmV3IE1lc3NhZ2VFdmVudCh0eXBlLCB7XG4gICAgICBidWJibGVzLCBjYW5jZWxhYmxlLCBkYXRhLCBvcmlnaW4sIGxhc3RFdmVudElkLCBzb3VyY2UsIHBvcnRzXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jdGhlLWNsb3NlZXZlbnQtaW50ZXJmYWNlXG4gKi9cbmNsYXNzIENsb3NlRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gICNldmVudEluaXRcblxuICBjb25zdHJ1Y3RvciAodHlwZSwgZXZlbnRJbml0RGljdCA9IHt9KSB7XG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0Nsb3NlRXZlbnQgY29uc3RydWN0b3InIH0pXG5cbiAgICB0eXBlID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKHR5cGUpXG4gICAgZXZlbnRJbml0RGljdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNsb3NlRXZlbnRJbml0KGV2ZW50SW5pdERpY3QpXG5cbiAgICBzdXBlcih0eXBlLCBldmVudEluaXREaWN0KVxuXG4gICAgdGhpcy4jZXZlbnRJbml0ID0gZXZlbnRJbml0RGljdFxuICB9XG5cbiAgZ2V0IHdhc0NsZWFuICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDbG9zZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC53YXNDbGVhblxuICB9XG5cbiAgZ2V0IGNvZGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENsb3NlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmNvZGVcbiAgfVxuXG4gIGdldCByZWFzb24gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENsb3NlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LnJlYXNvblxuICB9XG59XG5cbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCN0aGUtZXJyb3JldmVudC1pbnRlcmZhY2VcbmNsYXNzIEVycm9yRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gICNldmVudEluaXRcblxuICBjb25zdHJ1Y3RvciAodHlwZSwgZXZlbnRJbml0RGljdCkge1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdFcnJvckV2ZW50IGNvbnN0cnVjdG9yJyB9KVxuXG4gICAgc3VwZXIodHlwZSwgZXZlbnRJbml0RGljdClcblxuICAgIHR5cGUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcodHlwZSlcbiAgICBldmVudEluaXREaWN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuRXJyb3JFdmVudEluaXQoZXZlbnRJbml0RGljdCA/PyB7fSlcblxuICAgIHRoaXMuI2V2ZW50SW5pdCA9IGV2ZW50SW5pdERpY3RcbiAgfVxuXG4gIGdldCBtZXNzYWdlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBFcnJvckV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5tZXNzYWdlXG4gIH1cblxuICBnZXQgZmlsZW5hbWUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmZpbGVuYW1lXG4gIH1cblxuICBnZXQgbGluZW5vICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBFcnJvckV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5saW5lbm9cbiAgfVxuXG4gIGdldCBjb2xubyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQuY29sbm9cbiAgfVxuXG4gIGdldCBlcnJvciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQuZXJyb3JcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhNZXNzYWdlRXZlbnQucHJvdG90eXBlLCB7XG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdNZXNzYWdlRXZlbnQnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICBkYXRhOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvcmlnaW46IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGxhc3RFdmVudElkOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzb3VyY2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHBvcnRzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBpbml0TWVzc2FnZUV2ZW50OiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDbG9zZUV2ZW50LnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnQ2xvc2VFdmVudCcsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIHJlYXNvbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY29kZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgd2FzQ2xlYW46IGtFbnVtZXJhYmxlUHJvcGVydHlcbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEVycm9yRXZlbnQucHJvdG90eXBlLCB7XG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdFcnJvckV2ZW50JyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgbWVzc2FnZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZmlsZW5hbWU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGxpbmVubzoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY29sbm86IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGVycm9yOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG53ZWJpZGwuY29udmVydGVycy5NZXNzYWdlUG9ydCA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoTWVzc2FnZVBvcnQpXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxNZXNzYWdlUG9ydD4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZVBvcnRcbilcblxuY29uc3QgZXZlbnRJbml0ID0gW1xuICB7XG4gICAga2V5OiAnYnViYmxlcycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2NhbmNlbGFibGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb21wb3NlZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfVxuXVxuXG53ZWJpZGwuY29udmVydGVycy5NZXNzYWdlRXZlbnRJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICAuLi5ldmVudEluaXQsXG4gIHtcbiAgICBrZXk6ICdkYXRhJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmFueSxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfSxcbiAge1xuICAgIGtleTogJ29yaWdpbicsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiAnJ1xuICB9LFxuICB7XG4gICAga2V5OiAnbGFzdEV2ZW50SWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfSxcbiAge1xuICAgIGtleTogJ3NvdXJjZScsXG4gICAgLy8gTm9kZSBkb2Vzbid0IGltcGxlbWVudCBXaW5kb3dQcm94eSBvciBTZXJ2aWNlV29ya2VyLCBzbyB0aGUgb25seVxuICAgIC8vIHZhbGlkIHZhbHVlIGZvciBzb3VyY2UgaXMgYSBNZXNzYWdlUG9ydC5cbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5NZXNzYWdlUG9ydCksXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdwb3J0cycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8TWVzc2FnZVBvcnQ+J10sXG4gICAgZ2V0IGRlZmF1bHRWYWx1ZSAoKSB7XG4gICAgICByZXR1cm4gW11cbiAgICB9XG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkNsb3NlRXZlbnRJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICAuLi5ldmVudEluaXQsXG4gIHtcbiAgICBrZXk6ICd3YXNDbGVhbicsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2NvZGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIHNob3J0J10sXG4gICAgZGVmYXVsdFZhbHVlOiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdyZWFzb24nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfVxuXSlcblxud2ViaWRsLmNvbnZlcnRlcnMuRXJyb3JFdmVudEluaXQgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIC4uLmV2ZW50SW5pdCxcbiAge1xuICAgIGtleTogJ21lc3NhZ2UnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2ZpbGVuYW1lJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdsaW5lbm8nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcnXSxcbiAgICBkZWZhdWx0VmFsdWU6IDBcbiAgfSxcbiAge1xuICAgIGtleTogJ2NvbG5vJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nJ10sXG4gICAgZGVmYXVsdFZhbHVlOiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdlcnJvcicsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5hbnlcbiAgfVxuXSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIE1lc3NhZ2VFdmVudCxcbiAgQ2xvc2VFdmVudCxcbiAgRXJyb3JFdmVudFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtSZWFkeVN0YXRlLCBrQ29udHJvbGxlciwga1Jlc3BvbnNlLCBrQmluYXJ5VHlwZSwga1dlYlNvY2tldFVSTCB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgc3RhdGVzLCBvcGNvZGVzIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IE1lc3NhZ2VFdmVudCwgRXJyb3JFdmVudCB9ID0gcmVxdWlyZSgnLi9ldmVudHMnKVxuXG4vKiBnbG9iYWxzIEJsb2IgKi9cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi93ZWJzb2NrZXQnKS5XZWJTb2NrZXR9IHdzXG4gKi9cbmZ1bmN0aW9uIGlzRXN0YWJsaXNoZWQgKHdzKSB7XG4gIC8vIElmIHRoZSBzZXJ2ZXIncyByZXNwb25zZSBpcyB2YWxpZGF0ZWQgYXMgcHJvdmlkZWQgZm9yIGFib3ZlLCBpdCBpc1xuICAvLyBzYWlkIHRoYXQgX1RoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbiBpcyBFc3RhYmxpc2hlZF8gYW5kIHRoYXQgdGhlXG4gIC8vIFdlYlNvY2tldCBDb25uZWN0aW9uIGlzIGluIHRoZSBPUEVOIHN0YXRlLlxuICByZXR1cm4gd3Nba1JlYWR5U3RhdGVdID09PSBzdGF0ZXMuT1BFTlxufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqL1xuZnVuY3Rpb24gaXNDbG9zaW5nICh3cykge1xuICAvLyBVcG9uIGVpdGhlciBzZW5kaW5nIG9yIHJlY2VpdmluZyBhIENsb3NlIGNvbnRyb2wgZnJhbWUsIGl0IGlzIHNhaWRcbiAgLy8gdGhhdCBfVGhlIFdlYlNvY2tldCBDbG9zaW5nIEhhbmRzaGFrZSBpcyBTdGFydGVkXyBhbmQgdGhhdCB0aGVcbiAgLy8gV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgaW4gdGhlIENMT1NJTkcgc3RhdGUuXG4gIHJldHVybiB3c1trUmVhZHlTdGF0ZV0gPT09IHN0YXRlcy5DTE9TSU5HXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICovXG5mdW5jdGlvbiBpc0Nsb3NlZCAod3MpIHtcbiAgcmV0dXJuIHdzW2tSZWFkeVN0YXRlXSA9PT0gc3RhdGVzLkNMT1NFRFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWV2ZW50LWZpcmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBlXG4gKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fSB0YXJnZXRcbiAqIEBwYXJhbSB7RXZlbnRJbml0IHwgdW5kZWZpbmVkfSBldmVudEluaXREaWN0XG4gKi9cbmZ1bmN0aW9uIGZpcmVFdmVudCAoZSwgdGFyZ2V0LCBldmVudENvbnN0cnVjdG9yID0gRXZlbnQsIGV2ZW50SW5pdERpY3QpIHtcbiAgLy8gMS4gSWYgZXZlbnRDb25zdHJ1Y3RvciBpcyBub3QgZ2l2ZW4sIHRoZW4gbGV0IGV2ZW50Q29uc3RydWN0b3IgYmUgRXZlbnQuXG5cbiAgLy8gMi4gTGV0IGV2ZW50IGJlIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYW4gZXZlbnQgZ2l2ZW4gZXZlbnRDb25zdHJ1Y3RvcixcbiAgLy8gICAgaW4gdGhlIHJlbGV2YW50IHJlYWxtIG9mIHRhcmdldC5cbiAgLy8gMy4gSW5pdGlhbGl6ZSBldmVudFx1MjAxOXMgdHlwZSBhdHRyaWJ1dGUgdG8gZS5cbiAgY29uc3QgZXZlbnQgPSBuZXcgZXZlbnRDb25zdHJ1Y3RvcihlLCBldmVudEluaXREaWN0KSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5ldy1jYXBcblxuICAvLyA0LiBJbml0aWFsaXplIGFueSBvdGhlciBJREwgYXR0cmlidXRlcyBvZiBldmVudCBhcyBkZXNjcmliZWQgaW4gdGhlXG4gIC8vICAgIGludm9jYXRpb24gb2YgdGhpcyBhbGdvcml0aG0uXG5cbiAgLy8gNS4gUmV0dXJuIHRoZSByZXN1bHQgb2YgZGlzcGF0Y2hpbmcgZXZlbnQgYXQgdGFyZ2V0LCB3aXRoIGxlZ2FjeSB0YXJnZXRcbiAgLy8gICAgb3ZlcnJpZGUgZmxhZyBzZXQgaWYgc2V0LlxuICB0YXJnZXQuZGlzcGF0Y2hFdmVudChldmVudClcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2ZlZWRiYWNrLWZyb20tdGhlLXByb3RvY29sXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi93ZWJzb2NrZXQnKS5XZWJTb2NrZXR9IHdzXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZSBPcGNvZGVcbiAqIEBwYXJhbSB7QnVmZmVyfSBkYXRhIGFwcGxpY2F0aW9uIGRhdGFcbiAqL1xuZnVuY3Rpb24gd2Vic29ja2V0TWVzc2FnZVJlY2VpdmVkICh3cywgdHlwZSwgZGF0YSkge1xuICAvLyAxLiBJZiByZWFkeSBzdGF0ZSBpcyBub3QgT1BFTiAoMSksIHRoZW4gcmV0dXJuLlxuICBpZiAod3Nba1JlYWR5U3RhdGVdICE9PSBzdGF0ZXMuT1BFTikge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gMi4gTGV0IGRhdGFGb3JFdmVudCBiZSBkZXRlcm1pbmVkIGJ5IHN3aXRjaGluZyBvbiB0eXBlIGFuZCBiaW5hcnkgdHlwZTpcbiAgbGV0IGRhdGFGb3JFdmVudFxuXG4gIGlmICh0eXBlID09PSBvcGNvZGVzLlRFWFQpIHtcbiAgICAvLyAtPiB0eXBlIGluZGljYXRlcyB0aGF0IHRoZSBkYXRhIGlzIFRleHRcbiAgICAvLyAgICAgIGEgbmV3IERPTVN0cmluZyBjb250YWluaW5nIGRhdGFcbiAgICB0cnkge1xuICAgICAgZGF0YUZvckV2ZW50ID0gbmV3IFRleHREZWNvZGVyKCd1dGYtOCcsIHsgZmF0YWw6IHRydWUgfSkuZGVjb2RlKGRhdGEpXG4gICAgfSBjYXRjaCB7XG4gICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1JlY2VpdmVkIGludmFsaWQgVVRGLTggaW4gdGV4dCBmcmFtZS4nKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGUgPT09IG9wY29kZXMuQklOQVJZKSB7XG4gICAgaWYgKHdzW2tCaW5hcnlUeXBlXSA9PT0gJ2Jsb2InKSB7XG4gICAgICAvLyAtPiB0eXBlIGluZGljYXRlcyB0aGF0IHRoZSBkYXRhIGlzIEJpbmFyeSBhbmQgYmluYXJ5IHR5cGUgaXMgXCJibG9iXCJcbiAgICAgIC8vICAgICAgYSBuZXcgQmxvYiBvYmplY3QsIGNyZWF0ZWQgaW4gdGhlIHJlbGV2YW50IFJlYWxtIG9mIHRoZSBXZWJTb2NrZXRcbiAgICAgIC8vICAgICAgb2JqZWN0LCB0aGF0IHJlcHJlc2VudHMgZGF0YSBhcyBpdHMgcmF3IGRhdGFcbiAgICAgIGRhdGFGb3JFdmVudCA9IG5ldyBCbG9iKFtkYXRhXSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gLT4gdHlwZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZGF0YSBpcyBCaW5hcnkgYW5kIGJpbmFyeSB0eXBlIGlzIFwiYXJyYXlidWZmZXJcIlxuICAgICAgLy8gICAgICBhIG5ldyBBcnJheUJ1ZmZlciBvYmplY3QsIGNyZWF0ZWQgaW4gdGhlIHJlbGV2YW50IFJlYWxtIG9mIHRoZVxuICAgICAgLy8gICAgICBXZWJTb2NrZXQgb2JqZWN0LCB3aG9zZSBjb250ZW50cyBhcmUgZGF0YVxuICAgICAgZGF0YUZvckV2ZW50ID0gbmV3IFVpbnQ4QXJyYXkoZGF0YSkuYnVmZmVyXG4gICAgfVxuICB9XG5cbiAgLy8gMy4gRmlyZSBhbiBldmVudCBuYW1lZCBtZXNzYWdlIGF0IHRoZSBXZWJTb2NrZXQgb2JqZWN0LCB1c2luZyBNZXNzYWdlRXZlbnQsXG4gIC8vICAgIHdpdGggdGhlIG9yaWdpbiBhdHRyaWJ1dGUgaW5pdGlhbGl6ZWQgdG8gdGhlIHNlcmlhbGl6YXRpb24gb2YgdGhlIFdlYlNvY2tldFxuICAvLyAgICBvYmplY3RcdTIwMTlzIHVybCdzIG9yaWdpbiwgYW5kIHRoZSBkYXRhIGF0dHJpYnV0ZSBpbml0aWFsaXplZCB0byBkYXRhRm9yRXZlbnQuXG4gIGZpcmVFdmVudCgnbWVzc2FnZScsIHdzLCBNZXNzYWdlRXZlbnQsIHtcbiAgICBvcmlnaW46IHdzW2tXZWJTb2NrZXRVUkxdLm9yaWdpbixcbiAgICBkYXRhOiBkYXRhRm9yRXZlbnRcbiAgfSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NVxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzI2MTZcbiAqIEBzZWUgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mzk4NDA3XG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvdG9jb2xcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZFN1YnByb3RvY29sIChwcm90b2NvbCkge1xuICAvLyBJZiBwcmVzZW50LCB0aGlzIHZhbHVlIGluZGljYXRlcyBvbmVcbiAgLy8gb3IgbW9yZSBjb21tYS1zZXBhcmF0ZWQgc3VicHJvdG9jb2wgdGhlIGNsaWVudCB3aXNoZXMgdG8gc3BlYWssXG4gIC8vIG9yZGVyZWQgYnkgcHJlZmVyZW5jZS4gIFRoZSBlbGVtZW50cyB0aGF0IGNvbXByaXNlIHRoaXMgdmFsdWVcbiAgLy8gTVVTVCBiZSBub24tZW1wdHkgc3RyaW5ncyB3aXRoIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIFUrMDAyMSB0b1xuICAvLyBVKzAwN0Ugbm90IGluY2x1ZGluZyBzZXBhcmF0b3IgY2hhcmFjdGVycyBhcyBkZWZpbmVkIGluXG4gIC8vIFtSRkMyNjE2XSBhbmQgTVVTVCBhbGwgYmUgdW5pcXVlIHN0cmluZ3MuXG4gIGlmIChwcm90b2NvbC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGZvciAoY29uc3QgY2hhciBvZiBwcm90b2NvbCkge1xuICAgIGNvbnN0IGNvZGUgPSBjaGFyLmNoYXJDb2RlQXQoMClcblxuICAgIGlmIChcbiAgICAgIGNvZGUgPCAweDIxIHx8XG4gICAgICBjb2RlID4gMHg3RSB8fFxuICAgICAgY2hhciA9PT0gJygnIHx8XG4gICAgICBjaGFyID09PSAnKScgfHxcbiAgICAgIGNoYXIgPT09ICc8JyB8fFxuICAgICAgY2hhciA9PT0gJz4nIHx8XG4gICAgICBjaGFyID09PSAnQCcgfHxcbiAgICAgIGNoYXIgPT09ICcsJyB8fFxuICAgICAgY2hhciA9PT0gJzsnIHx8XG4gICAgICBjaGFyID09PSAnOicgfHxcbiAgICAgIGNoYXIgPT09ICdcXFxcJyB8fFxuICAgICAgY2hhciA9PT0gJ1wiJyB8fFxuICAgICAgY2hhciA9PT0gJy8nIHx8XG4gICAgICBjaGFyID09PSAnWycgfHxcbiAgICAgIGNoYXIgPT09ICddJyB8fFxuICAgICAgY2hhciA9PT0gJz8nIHx8XG4gICAgICBjaGFyID09PSAnPScgfHxcbiAgICAgIGNoYXIgPT09ICd7JyB8fFxuICAgICAgY2hhciA9PT0gJ30nIHx8XG4gICAgICBjb2RlID09PSAzMiB8fCAvLyBTUFxuICAgICAgY29kZSA9PT0gOSAvLyBIVFxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTctNFxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZFN0YXR1c0NvZGUgKGNvZGUpIHtcbiAgaWYgKGNvZGUgPj0gMTAwMCAmJiBjb2RlIDwgMTAxNSkge1xuICAgIHJldHVybiAoXG4gICAgICBjb2RlICE9PSAxMDA0ICYmIC8vIHJlc2VydmVkXG4gICAgICBjb2RlICE9PSAxMDA1ICYmIC8vIFwiTVVTVCBOT1QgYmUgc2V0IGFzIGEgc3RhdHVzIGNvZGVcIlxuICAgICAgY29kZSAhPT0gMTAwNiAvLyBcIk1VU1QgTk9UIGJlIHNldCBhcyBhIHN0YXR1cyBjb2RlXCJcbiAgICApXG4gIH1cblxuICByZXR1cm4gY29kZSA+PSAzMDAwICYmIGNvZGUgPD0gNDk5OVxufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gcmVhc29uXG4gKi9cbmZ1bmN0aW9uIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uICh3cywgcmVhc29uKSB7XG4gIGNvbnN0IHsgW2tDb250cm9sbGVyXTogY29udHJvbGxlciwgW2tSZXNwb25zZV06IHJlc3BvbnNlIH0gPSB3c1xuXG4gIGNvbnRyb2xsZXIuYWJvcnQoKVxuXG4gIGlmIChyZXNwb25zZT8uc29ja2V0ICYmICFyZXNwb25zZS5zb2NrZXQuZGVzdHJveWVkKSB7XG4gICAgcmVzcG9uc2Uuc29ja2V0LmRlc3Ryb3koKVxuICB9XG5cbiAgaWYgKHJlYXNvbikge1xuICAgIGZpcmVFdmVudCgnZXJyb3InLCB3cywgRXJyb3JFdmVudCwge1xuICAgICAgZXJyb3I6IG5ldyBFcnJvcihyZWFzb24pXG4gICAgfSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNFc3RhYmxpc2hlZCxcbiAgaXNDbG9zaW5nLFxuICBpc0Nsb3NlZCxcbiAgZmlyZUV2ZW50LFxuICBpc1ZhbGlkU3VicHJvdG9jb2wsXG4gIGlzVmFsaWRTdGF0dXNDb2RlLFxuICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbixcbiAgd2Vic29ja2V0TWVzc2FnZVJlY2VpdmVkXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGRpYWdub3N0aWNzQ2hhbm5lbCA9IHJlcXVpcmUoJ2RpYWdub3N0aWNzX2NoYW5uZWwnKVxuY29uc3QgeyB1aWQsIHN0YXRlcyB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3Qge1xuICBrUmVhZHlTdGF0ZSxcbiAga1NlbnRDbG9zZSxcbiAga0J5dGVQYXJzZXIsXG4gIGtSZWNlaXZlZENsb3NlXG59ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgZmlyZUV2ZW50LCBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbiB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgQ2xvc2VFdmVudCB9ID0gcmVxdWlyZSgnLi9ldmVudHMnKVxuY29uc3QgeyBtYWtlUmVxdWVzdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvcmVxdWVzdCcpXG5jb25zdCB7IGZldGNoaW5nIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9pbmRleCcpXG5jb25zdCB7IEhlYWRlcnMgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2hlYWRlcnMnKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuLi9nbG9iYWwnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cbmNoYW5uZWxzLm9wZW4gPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpvcGVuJylcbmNoYW5uZWxzLmNsb3NlID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6Y2xvc2UnKVxuY2hhbm5lbHMuc29ja2V0RXJyb3IgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpzb2NrZXRfZXJyb3InKVxuXG4vKiogQHR5cGUge2ltcG9ydCgnY3J5cHRvJyl9ICovXG5sZXQgY3J5cHRvXG50cnkge1xuICBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKVxufSBjYXRjaCB7XG5cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtd2Vic29ja2V0LWVzdGFibGlzaFxuICogQHBhcmFtIHtVUkx9IHVybFxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IHByb3RvY29sc1xuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICogQHBhcmFtIHsocmVzcG9uc2U6IGFueSkgPT4gdm9pZH0gb25Fc3RhYmxpc2hcbiAqIEBwYXJhbSB7UGFydGlhbDxpbXBvcnQoJy4uLy4uL3R5cGVzL3dlYnNvY2tldCcpLldlYlNvY2tldEluaXQ+fSBvcHRpb25zXG4gKi9cbmZ1bmN0aW9uIGVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24gKHVybCwgcHJvdG9jb2xzLCB3cywgb25Fc3RhYmxpc2gsIG9wdGlvbnMpIHtcbiAgLy8gMS4gTGV0IHJlcXVlc3RVUkwgYmUgYSBjb3B5IG9mIHVybCwgd2l0aCBpdHMgc2NoZW1lIHNldCB0byBcImh0dHBcIiwgaWYgdXJsXHUyMDE5c1xuICAvLyAgICBzY2hlbWUgaXMgXCJ3c1wiLCBhbmQgdG8gXCJodHRwc1wiIG90aGVyd2lzZS5cbiAgY29uc3QgcmVxdWVzdFVSTCA9IHVybFxuXG4gIHJlcXVlc3RVUkwucHJvdG9jb2wgPSB1cmwucHJvdG9jb2wgPT09ICd3czonID8gJ2h0dHA6JyA6ICdodHRwczonXG5cbiAgLy8gMi4gTGV0IHJlcXVlc3QgYmUgYSBuZXcgcmVxdWVzdCwgd2hvc2UgVVJMIGlzIHJlcXVlc3RVUkwsIGNsaWVudCBpcyBjbGllbnQsXG4gIC8vICAgIHNlcnZpY2Utd29ya2VycyBtb2RlIGlzIFwibm9uZVwiLCByZWZlcnJlciBpcyBcIm5vLXJlZmVycmVyXCIsIG1vZGUgaXNcbiAgLy8gICAgXCJ3ZWJzb2NrZXRcIiwgY3JlZGVudGlhbHMgbW9kZSBpcyBcImluY2x1ZGVcIiwgY2FjaGUgbW9kZSBpcyBcIm5vLXN0b3JlXCIgLFxuICAvLyAgICBhbmQgcmVkaXJlY3QgbW9kZSBpcyBcImVycm9yXCIuXG4gIGNvbnN0IHJlcXVlc3QgPSBtYWtlUmVxdWVzdCh7XG4gICAgdXJsTGlzdDogW3JlcXVlc3RVUkxdLFxuICAgIHNlcnZpY2VXb3JrZXJzOiAnbm9uZScsXG4gICAgcmVmZXJyZXI6ICduby1yZWZlcnJlcicsXG4gICAgbW9kZTogJ3dlYnNvY2tldCcsXG4gICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyxcbiAgICBjYWNoZTogJ25vLXN0b3JlJyxcbiAgICByZWRpcmVjdDogJ2Vycm9yJ1xuICB9KVxuXG4gIC8vIE5vdGU6IHVuZGljaSBleHRlbnNpb24sIGFsbG93IHNldHRpbmcgY3VzdG9tIGhlYWRlcnMuXG4gIGlmIChvcHRpb25zLmhlYWRlcnMpIHtcbiAgICBjb25zdCBoZWFkZXJzTGlzdCA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylba0hlYWRlcnNMaXN0XVxuXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdCA9IGhlYWRlcnNMaXN0XG4gIH1cblxuICAvLyAzLiBBcHBlbmQgKGBVcGdyYWRlYCwgYHdlYnNvY2tldGApIHRvIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAvLyA0LiBBcHBlbmQgKGBDb25uZWN0aW9uYCwgYFVwZ3JhZGVgKSB0byByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgLy8gTm90ZTogYm90aCBvZiB0aGVzZSBhcmUgaGFuZGxlZCBieSB1bmRpY2kgY3VycmVudGx5LlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9ibG9iLzY4YzI2OWM0MTQ0YzQ0NmYzZjEyMjA5NTEzMzhkYWVmNGE2YjVlYzQvbGliL2NsaWVudC5qcyNMMTM5N1xuXG4gIC8vIDUuIExldCBrZXlWYWx1ZSBiZSBhIG5vbmNlIGNvbnNpc3Rpbmcgb2YgYSByYW5kb21seSBzZWxlY3RlZFxuICAvLyAgICAxNi1ieXRlIHZhbHVlIHRoYXQgaGFzIGJlZW4gZm9yZ2l2aW5nLWJhc2U2NC1lbmNvZGVkIGFuZFxuICAvLyAgICBpc29tb3JwaGljIGVuY29kZWQuXG4gIGNvbnN0IGtleVZhbHVlID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDE2KS50b1N0cmluZygnYmFzZTY0JylcblxuICAvLyA2LiBBcHBlbmQgKGBTZWMtV2ViU29ja2V0LUtleWAsIGtleVZhbHVlKSB0byByZXF1ZXN0XHUyMDE5c1xuICAvLyAgICBoZWFkZXIgbGlzdC5cbiAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3NlYy13ZWJzb2NrZXQta2V5Jywga2V5VmFsdWUpXG5cbiAgLy8gNy4gQXBwZW5kIChgU2VjLVdlYlNvY2tldC1WZXJzaW9uYCwgYDEzYCkgdG8gcmVxdWVzdFx1MjAxOXNcbiAgLy8gICAgaGVhZGVyIGxpc3QuXG4gIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdzZWMtd2Vic29ja2V0LXZlcnNpb24nLCAnMTMnKVxuXG4gIC8vIDguIEZvciBlYWNoIHByb3RvY29sIGluIHByb3RvY29scywgY29tYmluZVxuICAvLyAgICAoYFNlYy1XZWJTb2NrZXQtUHJvdG9jb2xgLCBwcm90b2NvbCkgaW4gcmVxdWVzdFx1MjAxOXMgaGVhZGVyXG4gIC8vICAgIGxpc3QuXG4gIGZvciAoY29uc3QgcHJvdG9jb2wgb2YgcHJvdG9jb2xzKSB7XG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3NlYy13ZWJzb2NrZXQtcHJvdG9jb2wnLCBwcm90b2NvbClcbiAgfVxuXG4gIC8vIDkuIExldCBwZXJtZXNzYWdlRGVmbGF0ZSBiZSBhIHVzZXItYWdlbnQgZGVmaW5lZFxuICAvLyAgICBcInBlcm1lc3NhZ2UtZGVmbGF0ZVwiIGV4dGVuc2lvbiBoZWFkZXIgdmFsdWUuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL2dlY2tvLWRldi9ibG9iL2NlNzgyMzRmNWU2NTNhNWQzOTE2ODEzZmY5OTBmMDUzNTEwMjI3YmMvbmV0d2Vyay9wcm90b2NvbC93ZWJzb2NrZXQvV2ViU29ja2V0Q2hhbm5lbC5jcHAjTDI2NzNcbiAgLy8gVE9ETzogZW5hYmxlIG9uY2UgcGVybWVzc2FnZS1kZWZsYXRlIGlzIHN1cHBvcnRlZFxuICBjb25zdCBwZXJtZXNzYWdlRGVmbGF0ZSA9ICcnIC8vICdwZXJtZXNzYWdlLWRlZmxhdGU7IDE1J1xuXG4gIC8vIDEwLiBBcHBlbmQgKGBTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnNgLCBwZXJtZXNzYWdlRGVmbGF0ZSkgdG9cbiAgLy8gICAgIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAvLyByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnc2VjLXdlYnNvY2tldC1leHRlbnNpb25zJywgcGVybWVzc2FnZURlZmxhdGUpXG5cbiAgLy8gMTEuIEZldGNoIHJlcXVlc3Qgd2l0aCB1c2VQYXJhbGxlbFF1ZXVlIHNldCB0byB0cnVlLCBhbmRcbiAgLy8gICAgIHByb2Nlc3NSZXNwb25zZSBnaXZlbiByZXNwb25zZSBiZWluZyB0aGVzZSBzdGVwczpcbiAgY29uc3QgY29udHJvbGxlciA9IGZldGNoaW5nKHtcbiAgICByZXF1ZXN0LFxuICAgIHVzZVBhcmFsbGVsUXVldWU6IHRydWUsXG4gICAgZGlzcGF0Y2hlcjogb3B0aW9ucy5kaXNwYXRjaGVyID8/IGdldEdsb2JhbERpc3BhdGNoZXIoKSxcbiAgICBwcm9jZXNzUmVzcG9uc2UgKHJlc3BvbnNlKSB7XG4gICAgICAvLyAxLiBJZiByZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3Igb3IgaXRzIHN0YXR1cyBpcyBub3QgMTAxLFxuICAgICAgLy8gICAgZmFpbCB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uXG4gICAgICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJyB8fCByZXNwb25zZS5zdGF0dXMgIT09IDEwMSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1JlY2VpdmVkIG5ldHdvcmsgZXJyb3Igb3Igbm9uLTEwMSBzdGF0dXMgY29kZS4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgcHJvdG9jb2xzIGlzIG5vdCB0aGUgZW1wdHkgbGlzdCBhbmQgZXh0cmFjdGluZyBoZWFkZXJcbiAgICAgIC8vICAgIGxpc3QgdmFsdWVzIGdpdmVuIGBTZWMtV2ViU29ja2V0LVByb3RvY29sYCBhbmQgcmVzcG9uc2VcdTIwMTlzXG4gICAgICAvLyAgICBoZWFkZXIgbGlzdCByZXN1bHRzIGluIG51bGwsIGZhaWx1cmUsIG9yIHRoZSBlbXB0eSBieXRlXG4gICAgICAvLyAgICBzZXF1ZW5jZSwgdGhlbiBmYWlsIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi5cbiAgICAgIGlmIChwcm90b2NvbHMubGVuZ3RoICE9PSAwICYmICFyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2wnKSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlcnZlciBkaWQgbm90IHJlc3BvbmQgd2l0aCBzZW50IHByb3RvY29scy4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMy4gRm9sbG93IHRoZSByZXF1aXJlbWVudHMgc3RhdGVkIHN0ZXAgMiB0byBzdGVwIDYsIGluY2x1c2l2ZSxcbiAgICAgIC8vICAgIG9mIHRoZSBsYXN0IHNldCBvZiBzdGVwcyBpbiBzZWN0aW9uIDQuMSBvZiBUaGUgV2ViU29ja2V0XG4gICAgICAvLyAgICBQcm90b2NvbCB0byB2YWxpZGF0ZSByZXNwb25zZS4gVGhpcyBlaXRoZXIgcmVzdWx0cyBpbiBmYWlsXG4gICAgICAvLyAgICB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gb3IgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzXG4gICAgICAvLyAgICBlc3RhYmxpc2hlZC5cblxuICAgICAgLy8gMi4gSWYgdGhlIHJlc3BvbnNlIGxhY2tzIGFuIHxVcGdyYWRlfCBoZWFkZXIgZmllbGQgb3IgdGhlIHxVcGdyYWRlfFxuICAgICAgLy8gICAgaGVhZGVyIGZpZWxkIGNvbnRhaW5zIGEgdmFsdWUgdGhhdCBpcyBub3QgYW4gQVNDSUkgY2FzZS1cbiAgICAgIC8vICAgIGluc2Vuc2l0aXZlIG1hdGNoIGZvciB0aGUgdmFsdWUgXCJ3ZWJzb2NrZXRcIiwgdGhlIGNsaWVudCBNVVNUXG4gICAgICAvLyAgICBfRmFpbCB0aGUgV2ViU29ja2V0IENvbm5lY3Rpb25fLlxuICAgICAgaWYgKHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnVXBncmFkZScpPy50b0xvd2VyQ2FzZSgpICE9PSAnd2Vic29ja2V0Jykge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlcnZlciBkaWQgbm90IHNldCBVcGdyYWRlIGhlYWRlciB0byBcIndlYnNvY2tldFwiLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAzLiBJZiB0aGUgcmVzcG9uc2UgbGFja3MgYSB8Q29ubmVjdGlvbnwgaGVhZGVyIGZpZWxkIG9yIHRoZVxuICAgICAgLy8gICAgfENvbm5lY3Rpb258IGhlYWRlciBmaWVsZCBkb2Vzbid0IGNvbnRhaW4gYSB0b2tlbiB0aGF0IGlzIGFuXG4gICAgICAvLyAgICBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciB0aGUgdmFsdWUgXCJVcGdyYWRlXCIsIHRoZSBjbGllbnRcbiAgICAgIC8vICAgIE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy5cbiAgICAgIGlmIChyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ0Nvbm5lY3Rpb24nKT8udG9Mb3dlckNhc2UoKSAhPT0gJ3VwZ3JhZGUnKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnU2VydmVyIGRpZCBub3Qgc2V0IENvbm5lY3Rpb24gaGVhZGVyIHRvIFwidXBncmFkZVwiLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiB0aGUgcmVzcG9uc2UgbGFja3MgYSB8U2VjLVdlYlNvY2tldC1BY2NlcHR8IGhlYWRlciBmaWVsZCBvclxuICAgICAgLy8gICAgdGhlIHxTZWMtV2ViU29ja2V0LUFjY2VwdHwgY29udGFpbnMgYSB2YWx1ZSBvdGhlciB0aGFuIHRoZVxuICAgICAgLy8gICAgYmFzZTY0LWVuY29kZWQgU0hBLTEgb2YgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHxTZWMtV2ViU29ja2V0LVxuICAgICAgLy8gICAgS2V5fCAoYXMgYSBzdHJpbmcsIG5vdCBiYXNlNjQtZGVjb2RlZCkgd2l0aCB0aGUgc3RyaW5nIFwiMjU4RUFGQTUtXG4gICAgICAvLyAgICBFOTE0LTQ3REEtOTVDQS1DNUFCMERDODVCMTFcIiBidXQgaWdub3JpbmcgYW55IGxlYWRpbmcgYW5kXG4gICAgICAvLyAgICB0cmFpbGluZyB3aGl0ZXNwYWNlLCB0aGUgY2xpZW50IE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gICAgQ29ubmVjdGlvbl8uXG4gICAgICBjb25zdCBzZWNXU0FjY2VwdCA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1BY2NlcHQnKVxuICAgICAgY29uc3QgZGlnZXN0ID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUoa2V5VmFsdWUgKyB1aWQpLmRpZ2VzdCgnYmFzZTY0JylcbiAgICAgIGlmIChzZWNXU0FjY2VwdCAhPT0gZGlnZXN0KSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnSW5jb3JyZWN0IGhhc2ggcmVjZWl2ZWQgaW4gU2VjLVdlYlNvY2tldC1BY2NlcHQgaGVhZGVyLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA1LiBJZiB0aGUgcmVzcG9uc2UgaW5jbHVkZXMgYSB8U2VjLVdlYlNvY2tldC1FeHRlbnNpb25zfCBoZWFkZXJcbiAgICAgIC8vICAgIGZpZWxkIGFuZCB0aGlzIGhlYWRlciBmaWVsZCBpbmRpY2F0ZXMgdGhlIHVzZSBvZiBhbiBleHRlbnNpb25cbiAgICAgIC8vICAgIHRoYXQgd2FzIG5vdCBwcmVzZW50IGluIHRoZSBjbGllbnQncyBoYW5kc2hha2UgKHRoZSBzZXJ2ZXIgaGFzXG4gICAgICAvLyAgICBpbmRpY2F0ZWQgYW4gZXh0ZW5zaW9uIG5vdCByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCksIHRoZSBjbGllbnRcbiAgICAgIC8vICAgIE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy4gIChUaGUgcGFyc2luZyBvZiB0aGlzXG4gICAgICAvLyAgICBoZWFkZXIgZmllbGQgdG8gZGV0ZXJtaW5lIHdoaWNoIGV4dGVuc2lvbnMgYXJlIHJlcXVlc3RlZCBpc1xuICAgICAgLy8gICAgZGlzY3Vzc2VkIGluIFNlY3Rpb24gOS4xLilcbiAgICAgIGNvbnN0IHNlY0V4dGVuc2lvbiA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zJylcblxuICAgICAgaWYgKHNlY0V4dGVuc2lvbiAhPT0gbnVsbCAmJiBzZWNFeHRlbnNpb24gIT09IHBlcm1lc3NhZ2VEZWZsYXRlKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnUmVjZWl2ZWQgZGlmZmVyZW50IHBlcm1lc3NhZ2UtZGVmbGF0ZSB0aGFuIHRoZSBvbmUgc2V0LicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA2LiBJZiB0aGUgcmVzcG9uc2UgaW5jbHVkZXMgYSB8U2VjLVdlYlNvY2tldC1Qcm90b2NvbHwgaGVhZGVyIGZpZWxkXG4gICAgICAvLyAgICBhbmQgdGhpcyBoZWFkZXIgZmllbGQgaW5kaWNhdGVzIHRoZSB1c2Ugb2YgYSBzdWJwcm90b2NvbCB0aGF0IHdhc1xuICAgICAgLy8gICAgbm90IHByZXNlbnQgaW4gdGhlIGNsaWVudCdzIGhhbmRzaGFrZSAodGhlIHNlcnZlciBoYXMgaW5kaWNhdGVkIGFcbiAgICAgIC8vICAgIHN1YnByb3RvY29sIG5vdCByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCksIHRoZSBjbGllbnQgTVVTVCBfRmFpbFxuICAgICAgLy8gICAgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy5cbiAgICAgIGNvbnN0IHNlY1Byb3RvY29sID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdTZWMtV2ViU29ja2V0LVByb3RvY29sJylcblxuICAgICAgaWYgKHNlY1Byb3RvY29sICE9PSBudWxsICYmIHNlY1Byb3RvY29sICE9PSByZXF1ZXN0LmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1Qcm90b2NvbCcpKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnUHJvdG9jb2wgd2FzIG5vdCBzZXQgaW4gdGhlIG9wZW5pbmcgaGFuZHNoYWtlLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICByZXNwb25zZS5zb2NrZXQub24oJ2RhdGEnLCBvblNvY2tldERhdGEpXG4gICAgICByZXNwb25zZS5zb2NrZXQub24oJ2Nsb3NlJywgb25Tb2NrZXRDbG9zZSlcbiAgICAgIHJlc3BvbnNlLnNvY2tldC5vbignZXJyb3InLCBvblNvY2tldEVycm9yKVxuXG4gICAgICBpZiAoY2hhbm5lbHMub3Blbi5oYXNTdWJzY3JpYmVycykge1xuICAgICAgICBjaGFubmVscy5vcGVuLnB1Ymxpc2goe1xuICAgICAgICAgIGFkZHJlc3M6IHJlc3BvbnNlLnNvY2tldC5hZGRyZXNzKCksXG4gICAgICAgICAgcHJvdG9jb2w6IHNlY1Byb3RvY29sLFxuICAgICAgICAgIGV4dGVuc2lvbnM6IHNlY0V4dGVuc2lvblxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBvbkVzdGFibGlzaChyZXNwb25zZSlcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIGNvbnRyb2xsZXJcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gY2h1bmtcbiAqL1xuZnVuY3Rpb24gb25Tb2NrZXREYXRhIChjaHVuaykge1xuICBpZiAoIXRoaXMud3Nba0J5dGVQYXJzZXJdLndyaXRlKGNodW5rKSkge1xuICAgIHRoaXMucGF1c2UoKVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNmZWVkYmFjay1mcm9tLXRoZS1wcm90b2NvbFxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi03LjEuNFxuICovXG5mdW5jdGlvbiBvblNvY2tldENsb3NlICgpIHtcbiAgY29uc3QgeyB3cyB9ID0gdGhpc1xuXG4gIC8vIElmIHRoZSBUQ1AgY29ubmVjdGlvbiB3YXMgY2xvc2VkIGFmdGVyIHRoZVxuICAvLyBXZWJTb2NrZXQgY2xvc2luZyBoYW5kc2hha2Ugd2FzIGNvbXBsZXRlZCwgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uXG4gIC8vIGlzIHNhaWQgdG8gaGF2ZSBiZWVuIGNsb3NlZCBfY2xlYW5seV8uXG4gIGNvbnN0IHdhc0NsZWFuID0gd3Nba1NlbnRDbG9zZV0gJiYgd3Nba1JlY2VpdmVkQ2xvc2VdXG5cbiAgbGV0IGNvZGUgPSAxMDA1XG4gIGxldCByZWFzb24gPSAnJ1xuXG4gIGNvbnN0IHJlc3VsdCA9IHdzW2tCeXRlUGFyc2VyXS5jbG9zaW5nSW5mb1xuXG4gIGlmIChyZXN1bHQpIHtcbiAgICBjb2RlID0gcmVzdWx0LmNvZGUgPz8gMTAwNVxuICAgIHJlYXNvbiA9IHJlc3VsdC5yZWFzb25cbiAgfSBlbHNlIGlmICghd3Nba1NlbnRDbG9zZV0pIHtcbiAgICAvLyBJZiBfVGhlIFdlYlNvY2tldFxuICAgIC8vIENvbm5lY3Rpb24gaXMgQ2xvc2VkXyBhbmQgbm8gQ2xvc2UgY29udHJvbCBmcmFtZSB3YXMgcmVjZWl2ZWQgYnkgdGhlXG4gICAgLy8gZW5kcG9pbnQgKHN1Y2ggYXMgY291bGQgb2NjdXIgaWYgdGhlIHVuZGVybHlpbmcgdHJhbnNwb3J0IGNvbm5lY3Rpb25cbiAgICAvLyBpcyBsb3N0KSwgX1RoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbiBDbG9zZSBDb2RlXyBpcyBjb25zaWRlcmVkIHRvIGJlXG4gICAgLy8gMTAwNi5cbiAgICBjb2RlID0gMTAwNlxuICB9XG5cbiAgLy8gMS4gQ2hhbmdlIHRoZSByZWFkeSBzdGF0ZSB0byBDTE9TRUQgKDMpLlxuICB3c1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuQ0xPU0VEXG5cbiAgLy8gMi4gSWYgdGhlIHVzZXIgYWdlbnQgd2FzIHJlcXVpcmVkIHRvIGZhaWwgdGhlIFdlYlNvY2tldFxuICAvLyAgICBjb25uZWN0aW9uLCBvciBpZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gd2FzIGNsb3NlZFxuICAvLyAgICBhZnRlciBiZWluZyBmbGFnZ2VkIGFzIGZ1bGwsIGZpcmUgYW4gZXZlbnQgbmFtZWQgZXJyb3JcbiAgLy8gICAgYXQgdGhlIFdlYlNvY2tldCBvYmplY3QuXG4gIC8vIFRPRE9cblxuICAvLyAzLiBGaXJlIGFuIGV2ZW50IG5hbWVkIGNsb3NlIGF0IHRoZSBXZWJTb2NrZXQgb2JqZWN0LFxuICAvLyAgICB1c2luZyBDbG9zZUV2ZW50LCB3aXRoIHRoZSB3YXNDbGVhbiBhdHRyaWJ1dGVcbiAgLy8gICAgaW5pdGlhbGl6ZWQgdG8gdHJ1ZSBpZiB0aGUgY29ubmVjdGlvbiBjbG9zZWQgY2xlYW5seVxuICAvLyAgICBhbmQgZmFsc2Ugb3RoZXJ3aXNlLCB0aGUgY29kZSBhdHRyaWJ1dGUgaW5pdGlhbGl6ZWQgdG9cbiAgLy8gICAgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGNsb3NlIGNvZGUsIGFuZCB0aGUgcmVhc29uXG4gIC8vICAgIGF0dHJpYnV0ZSBpbml0aWFsaXplZCB0byB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIFVURi04XG4gIC8vICAgIGRlY29kZSB3aXRob3V0IEJPTSB0byB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gY2xvc2VcbiAgLy8gICAgcmVhc29uLlxuICBmaXJlRXZlbnQoJ2Nsb3NlJywgd3MsIENsb3NlRXZlbnQsIHtcbiAgICB3YXNDbGVhbiwgY29kZSwgcmVhc29uXG4gIH0pXG5cbiAgaWYgKGNoYW5uZWxzLmNsb3NlLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgY2hhbm5lbHMuY2xvc2UucHVibGlzaCh7XG4gICAgICB3ZWJzb2NrZXQ6IHdzLFxuICAgICAgY29kZSxcbiAgICAgIHJlYXNvblxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRFcnJvciAoZXJyb3IpIHtcbiAgY29uc3QgeyB3cyB9ID0gdGhpc1xuXG4gIHdzW2tSZWFkeVN0YXRlXSA9IHN0YXRlcy5DTE9TSU5HXG5cbiAgaWYgKGNoYW5uZWxzLnNvY2tldEVycm9yLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgY2hhbm5lbHMuc29ja2V0RXJyb3IucHVibGlzaChlcnJvcilcbiAgfVxuXG4gIHRoaXMuZGVzdHJveSgpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBlc3RhYmxpc2hXZWJTb2NrZXRDb25uZWN0aW9uXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgbWF4VW5zaWduZWQxNkJpdCB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuXG4vKiogQHR5cGUge2ltcG9ydCgnY3J5cHRvJyl9ICovXG5sZXQgY3J5cHRvXG50cnkge1xuICBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKVxufSBjYXRjaCB7XG5cbn1cblxuY2xhc3MgV2Vic29ja2V0RnJhbWVTZW5kIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7QnVmZmVyfHVuZGVmaW5lZH0gZGF0YVxuICAgKi9cbiAgY29uc3RydWN0b3IgKGRhdGEpIHtcbiAgICB0aGlzLmZyYW1lRGF0YSA9IGRhdGFcbiAgICB0aGlzLm1hc2tLZXkgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoNClcbiAgfVxuXG4gIGNyZWF0ZUZyYW1lIChvcGNvZGUpIHtcbiAgICBjb25zdCBib2R5TGVuZ3RoID0gdGhpcy5mcmFtZURhdGE/LmJ5dGVMZW5ndGggPz8gMFxuXG4gICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gICAgbGV0IHBheWxvYWRMZW5ndGggPSBib2R5TGVuZ3RoIC8vIDAtMTI1XG4gICAgbGV0IG9mZnNldCA9IDZcblxuICAgIGlmIChib2R5TGVuZ3RoID4gbWF4VW5zaWduZWQxNkJpdCkge1xuICAgICAgb2Zmc2V0ICs9IDggLy8gcGF5bG9hZCBsZW5ndGggaXMgbmV4dCA4IGJ5dGVzXG4gICAgICBwYXlsb2FkTGVuZ3RoID0gMTI3XG4gICAgfSBlbHNlIGlmIChib2R5TGVuZ3RoID4gMTI1KSB7XG4gICAgICBvZmZzZXQgKz0gMiAvLyBwYXlsb2FkIGxlbmd0aCBpcyBuZXh0IDIgYnl0ZXNcbiAgICAgIHBheWxvYWRMZW5ndGggPSAxMjZcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUoYm9keUxlbmd0aCArIG9mZnNldClcblxuICAgIC8vIENsZWFyIGZpcnN0IDIgYnl0ZXMsIGV2ZXJ5dGhpbmcgZWxzZSBpcyBvdmVyd3JpdHRlblxuICAgIGJ1ZmZlclswXSA9IGJ1ZmZlclsxXSA9IDBcbiAgICBidWZmZXJbMF0gfD0gMHg4MCAvLyBGSU5cbiAgICBidWZmZXJbMF0gPSAoYnVmZmVyWzBdICYgMHhGMCkgKyBvcGNvZGUgLy8gb3Bjb2RlXG5cbiAgICAvKiEgd3MuIE1JVCBMaWNlbnNlLiBFaW5hciBPdHRvIFN0YW5ndmlrIDxlaW5hcm9zQGdtYWlsLmNvbT4gKi9cbiAgICBidWZmZXJbb2Zmc2V0IC0gNF0gPSB0aGlzLm1hc2tLZXlbMF1cbiAgICBidWZmZXJbb2Zmc2V0IC0gM10gPSB0aGlzLm1hc2tLZXlbMV1cbiAgICBidWZmZXJbb2Zmc2V0IC0gMl0gPSB0aGlzLm1hc2tLZXlbMl1cbiAgICBidWZmZXJbb2Zmc2V0IC0gMV0gPSB0aGlzLm1hc2tLZXlbM11cblxuICAgIGJ1ZmZlclsxXSA9IHBheWxvYWRMZW5ndGhcblxuICAgIGlmIChwYXlsb2FkTGVuZ3RoID09PSAxMjYpIHtcbiAgICAgIGJ1ZmZlci53cml0ZVVJbnQxNkJFKGJvZHlMZW5ndGgsIDIpXG4gICAgfSBlbHNlIGlmIChwYXlsb2FkTGVuZ3RoID09PSAxMjcpIHtcbiAgICAgIC8vIENsZWFyIGV4dGVuZGVkIHBheWxvYWQgbGVuZ3RoXG4gICAgICBidWZmZXJbMl0gPSBidWZmZXJbM10gPSAwXG4gICAgICBidWZmZXIud3JpdGVVSW50QkUoYm9keUxlbmd0aCwgNCwgNilcbiAgICB9XG5cbiAgICBidWZmZXJbMV0gfD0gMHg4MCAvLyBNQVNLXG5cbiAgICAvLyBtYXNrIGJvZHlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJvZHlMZW5ndGg7IGkrKykge1xuICAgICAgYnVmZmVyW29mZnNldCArIGldID0gdGhpcy5mcmFtZURhdGFbaV0gXiB0aGlzLm1hc2tLZXlbaSAlIDRdXG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlclxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBXZWJzb2NrZXRGcmFtZVNlbmRcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBXcml0YWJsZSB9ID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IGRpYWdub3N0aWNzQ2hhbm5lbCA9IHJlcXVpcmUoJ2RpYWdub3N0aWNzX2NoYW5uZWwnKVxuY29uc3QgeyBwYXJzZXJTdGF0ZXMsIG9wY29kZXMsIHN0YXRlcywgZW1wdHlCdWZmZXIgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsga1JlYWR5U3RhdGUsIGtTZW50Q2xvc2UsIGtSZXNwb25zZSwga1JlY2VpdmVkQ2xvc2UgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IGlzVmFsaWRTdGF0dXNDb2RlLCBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbiwgd2Vic29ja2V0TWVzc2FnZVJlY2VpdmVkIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBXZWJzb2NrZXRGcmFtZVNlbmQgfSA9IHJlcXVpcmUoJy4vZnJhbWUnKVxuXG4vLyBUaGlzIGNvZGUgd2FzIGluZmx1ZW5jZWQgYnkgd3MgcmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IChjKSAyMDExIEVpbmFyIE90dG8gU3Rhbmd2aWsgPGVpbmFyb3NAZ21haWwuY29tPlxuLy8gQ29weXJpZ2h0IChjKSAyMDEzIEFybm91dCBLYXplbWllciBhbmQgY29udHJpYnV0b3JzXG4vLyBDb3B5cmlnaHQgKGMpIDIwMTYgTHVpZ2kgUGluY2EgYW5kIGNvbnRyaWJ1dG9yc1xuXG5jb25zdCBjaGFubmVscyA9IHt9XG5jaGFubmVscy5waW5nID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6cGluZycpXG5jaGFubmVscy5wb25nID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6cG9uZycpXG5cbmNsYXNzIEJ5dGVQYXJzZXIgZXh0ZW5kcyBXcml0YWJsZSB7XG4gICNidWZmZXJzID0gW11cbiAgI2J5dGVPZmZzZXQgPSAwXG5cbiAgI3N0YXRlID0gcGFyc2VyU3RhdGVzLklORk9cblxuICAjaW5mbyA9IHt9XG4gICNmcmFnbWVudHMgPSBbXVxuXG4gIGNvbnN0cnVjdG9yICh3cykge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXMud3MgPSB3c1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBjaHVua1xuICAgKiBAcGFyYW0geygpID0+IHZvaWR9IGNhbGxiYWNrXG4gICAqL1xuICBfd3JpdGUgKGNodW5rLCBfLCBjYWxsYmFjaykge1xuICAgIHRoaXMuI2J1ZmZlcnMucHVzaChjaHVuaylcbiAgICB0aGlzLiNieXRlT2Zmc2V0ICs9IGNodW5rLmxlbmd0aFxuXG4gICAgdGhpcy5ydW4oY2FsbGJhY2spXG4gIH1cblxuICAvKipcbiAgICogUnVucyB3aGVuZXZlciBhIG5ldyBjaHVuayBpcyByZWNlaXZlZC5cbiAgICogQ2FsbGJhY2sgaXMgY2FsbGVkIHdoZW5ldmVyIHRoZXJlIGFyZSBubyBtb3JlIGNodW5rcyBidWZmZXJpbmcsXG4gICAqIG9yIG5vdCBlbm91Z2ggYnl0ZXMgYXJlIGJ1ZmZlcmVkIHRvIHBhcnNlLlxuICAgKi9cbiAgcnVuIChjYWxsYmFjaykge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAodGhpcy4jc3RhdGUgPT09IHBhcnNlclN0YXRlcy5JTkZPKSB7XG4gICAgICAgIC8vIElmIHRoZXJlIGFyZW4ndCBlbm91Z2ggYnl0ZXMgdG8gcGFyc2UgdGhlIHBheWxvYWQgbGVuZ3RoLCBldGMuXG4gICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0IDwgMikge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBidWZmZXIgPSB0aGlzLmNvbnN1bWUoMilcblxuICAgICAgICB0aGlzLiNpbmZvLmZpbiA9IChidWZmZXJbMF0gJiAweDgwKSAhPT0gMFxuICAgICAgICB0aGlzLiNpbmZvLm9wY29kZSA9IGJ1ZmZlclswXSAmIDB4MEZcblxuICAgICAgICAvLyBJZiB3ZSByZWNlaXZlIGEgZnJhZ21lbnRlZCBtZXNzYWdlLCB3ZSB1c2UgdGhlIHR5cGUgb2YgdGhlIGZpcnN0XG4gICAgICAgIC8vIGZyYW1lIHRvIHBhcnNlIHRoZSBmdWxsIG1lc3NhZ2UgYXMgYmluYXJ5L3RleHQsIHdoZW4gaXQncyB0ZXJtaW5hdGVkXG4gICAgICAgIHRoaXMuI2luZm8ub3JpZ2luYWxPcGNvZGUgPz89IHRoaXMuI2luZm8ub3Bjb2RlXG5cbiAgICAgICAgdGhpcy4jaW5mby5mcmFnbWVudGVkID0gIXRoaXMuI2luZm8uZmluICYmIHRoaXMuI2luZm8ub3Bjb2RlICE9PSBvcGNvZGVzLkNPTlRJTlVBVElPTlxuXG4gICAgICAgIGlmICh0aGlzLiNpbmZvLmZyYWdtZW50ZWQgJiYgdGhpcy4jaW5mby5vcGNvZGUgIT09IG9wY29kZXMuQklOQVJZICYmIHRoaXMuI2luZm8ub3Bjb2RlICE9PSBvcGNvZGVzLlRFWFQpIHtcbiAgICAgICAgICAvLyBPbmx5IHRleHQgYW5kIGJpbmFyeSBmcmFtZXMgY2FuIGJlIGZyYWdtZW50ZWRcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnSW52YWxpZCBmcmFtZSB0eXBlIHdhcyBmcmFnbWVudGVkLicpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXlsb2FkTGVuZ3RoID0gYnVmZmVyWzFdICYgMHg3RlxuXG4gICAgICAgIGlmIChwYXlsb2FkTGVuZ3RoIDw9IDEyNSkge1xuICAgICAgICAgIHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aCA9IHBheWxvYWRMZW5ndGhcbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5SRUFEX0RBVEFcbiAgICAgICAgfSBlbHNlIGlmIChwYXlsb2FkTGVuZ3RoID09PSAxMjYpIHtcbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5QQVlMT0FETEVOR1RIXzE2XG4gICAgICAgIH0gZWxzZSBpZiAocGF5bG9hZExlbmd0aCA9PT0gMTI3KSB7XG4gICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuUEFZTE9BRExFTkdUSF82NFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuI2luZm8uZnJhZ21lbnRlZCAmJiBwYXlsb2FkTGVuZ3RoID4gMTI1KSB7XG4gICAgICAgICAgLy8gQSBmcmFnbWVudGVkIGZyYW1lIGNhbid0IGJlIGZyYWdtZW50ZWQgaXRzZWxmXG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ0ZyYWdtZW50ZWQgZnJhbWUgZXhjZWVkZWQgMTI1IGJ5dGVzLicpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgKHRoaXMuI2luZm8ub3Bjb2RlID09PSBvcGNvZGVzLlBJTkcgfHxcbiAgICAgICAgICAgIHRoaXMuI2luZm8ub3Bjb2RlID09PSBvcGNvZGVzLlBPTkcgfHxcbiAgICAgICAgICAgIHRoaXMuI2luZm8ub3Bjb2RlID09PSBvcGNvZGVzLkNMT1NFKSAmJlxuICAgICAgICAgIHBheWxvYWRMZW5ndGggPiAxMjVcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gQ29udHJvbCBmcmFtZXMgY2FuIGhhdmUgYSBwYXlsb2FkIGxlbmd0aCBvZiAxMjUgYnl0ZXMgTUFYXG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ1BheWxvYWQgbGVuZ3RoIGZvciBjb250cm9sIGZyYW1lIGV4Y2VlZGVkIDEyNSBieXRlcy4nKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuI2luZm8ub3Bjb2RlID09PSBvcGNvZGVzLkNMT1NFKSB7XG4gICAgICAgICAgaWYgKHBheWxvYWRMZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdSZWNlaXZlZCBjbG9zZSBmcmFtZSB3aXRoIGEgMS1ieXRlIGJvZHkuJylcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLmNvbnN1bWUocGF5bG9hZExlbmd0aClcblxuICAgICAgICAgIHRoaXMuI2luZm8uY2xvc2VJbmZvID0gdGhpcy5wYXJzZUNsb3NlQm9keShmYWxzZSwgYm9keSlcblxuICAgICAgICAgIGlmICghdGhpcy53c1trU2VudENsb3NlXSkge1xuICAgICAgICAgICAgLy8gSWYgYW4gZW5kcG9pbnQgcmVjZWl2ZXMgYSBDbG9zZSBmcmFtZSBhbmQgZGlkIG5vdCBwcmV2aW91c2x5IHNlbmQgYVxuICAgICAgICAgICAgLy8gQ2xvc2UgZnJhbWUsIHRoZSBlbmRwb2ludCBNVVNUIHNlbmQgYSBDbG9zZSBmcmFtZSBpbiByZXNwb25zZS4gIChXaGVuXG4gICAgICAgICAgICAvLyBzZW5kaW5nIGEgQ2xvc2UgZnJhbWUgaW4gcmVzcG9uc2UsIHRoZSBlbmRwb2ludCB0eXBpY2FsbHkgZWNob3MgdGhlXG4gICAgICAgICAgICAvLyBzdGF0dXMgY29kZSBpdCByZWNlaXZlZC4pXG4gICAgICAgICAgICBjb25zdCBib2R5ID0gQnVmZmVyLmFsbG9jVW5zYWZlKDIpXG4gICAgICAgICAgICBib2R5LndyaXRlVUludDE2QkUodGhpcy4jaW5mby5jbG9zZUluZm8uY29kZSwgMClcbiAgICAgICAgICAgIGNvbnN0IGNsb3NlRnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKGJvZHkpXG5cbiAgICAgICAgICAgIHRoaXMud3Nba1Jlc3BvbnNlXS5zb2NrZXQud3JpdGUoXG4gICAgICAgICAgICAgIGNsb3NlRnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5DTE9TRSksXG4gICAgICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgICAgICAgICAgdGhpcy53c1trU2VudENsb3NlXSA9IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBVcG9uIGVpdGhlciBzZW5kaW5nIG9yIHJlY2VpdmluZyBhIENsb3NlIGNvbnRyb2wgZnJhbWUsIGl0IGlzIHNhaWRcbiAgICAgICAgICAvLyB0aGF0IF9UaGUgV2ViU29ja2V0IENsb3NpbmcgSGFuZHNoYWtlIGlzIFN0YXJ0ZWRfIGFuZCB0aGF0IHRoZVxuICAgICAgICAgIC8vIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGluIHRoZSBDTE9TSU5HIHN0YXRlLlxuICAgICAgICAgIHRoaXMud3Nba1JlYWR5U3RhdGVdID0gc3RhdGVzLkNMT1NJTkdcbiAgICAgICAgICB0aGlzLndzW2tSZWNlaXZlZENsb3NlXSA9IHRydWVcblxuICAgICAgICAgIHRoaXMuZW5kKClcblxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuI2luZm8ub3Bjb2RlID09PSBvcGNvZGVzLlBJTkcpIHtcbiAgICAgICAgICAvLyBVcG9uIHJlY2VpcHQgb2YgYSBQaW5nIGZyYW1lLCBhbiBlbmRwb2ludCBNVVNUIHNlbmQgYSBQb25nIGZyYW1lIGluXG4gICAgICAgICAgLy8gcmVzcG9uc2UsIHVubGVzcyBpdCBhbHJlYWR5IHJlY2VpdmVkIGEgQ2xvc2UgZnJhbWUuXG4gICAgICAgICAgLy8gQSBQb25nIGZyYW1lIHNlbnQgaW4gcmVzcG9uc2UgdG8gYSBQaW5nIGZyYW1lIG11c3QgaGF2ZSBpZGVudGljYWxcbiAgICAgICAgICAvLyBcIkFwcGxpY2F0aW9uIGRhdGFcIlxuXG4gICAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuY29uc3VtZShwYXlsb2FkTGVuZ3RoKVxuXG4gICAgICAgICAgaWYgKCF0aGlzLndzW2tSZWNlaXZlZENsb3NlXSkge1xuICAgICAgICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKGJvZHkpXG5cbiAgICAgICAgICAgIHRoaXMud3Nba1Jlc3BvbnNlXS5zb2NrZXQud3JpdGUoZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5QT05HKSlcblxuICAgICAgICAgICAgaWYgKGNoYW5uZWxzLnBpbmcuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgICAgICAgICAgY2hhbm5lbHMucGluZy5wdWJsaXNoKHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkOiBib2R5XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuSU5GT1xuXG4gICAgICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPiAwKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuUE9ORykge1xuICAgICAgICAgIC8vIEEgUG9uZyBmcmFtZSBNQVkgYmUgc2VudCB1bnNvbGljaXRlZC4gIFRoaXMgc2VydmVzIGFzIGFcbiAgICAgICAgICAvLyB1bmlkaXJlY3Rpb25hbCBoZWFydGJlYXQuICBBIHJlc3BvbnNlIHRvIGFuIHVuc29saWNpdGVkIFBvbmcgZnJhbWUgaXNcbiAgICAgICAgICAvLyBub3QgZXhwZWN0ZWQuXG5cbiAgICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5jb25zdW1lKHBheWxvYWRMZW5ndGgpXG5cbiAgICAgICAgICBpZiAoY2hhbm5lbHMucG9uZy5oYXNTdWJzY3JpYmVycykge1xuICAgICAgICAgICAgY2hhbm5lbHMucG9uZy5wdWJsaXNoKHtcbiAgICAgICAgICAgICAgcGF5bG9hZDogYm9keVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA+IDApIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLiNzdGF0ZSA9PT0gcGFyc2VyU3RhdGVzLlBBWUxPQURMRU5HVEhfMTYpIHtcbiAgICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPCAyKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuY29uc3VtZSgyKVxuXG4gICAgICAgIHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aCA9IGJ1ZmZlci5yZWFkVUludDE2QkUoMClcbiAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuUkVBRF9EQVRBXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuI3N0YXRlID09PSBwYXJzZXJTdGF0ZXMuUEFZTE9BRExFTkdUSF82NCkge1xuICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA8IDgpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnVmZmVyID0gdGhpcy5jb25zdW1lKDgpXG4gICAgICAgIGNvbnN0IHVwcGVyID0gYnVmZmVyLnJlYWRVSW50MzJCRSgwKVxuXG4gICAgICAgIC8vIDJeMzEgaXMgdGhlIG1heGluaW11bSBieXRlcyBhbiBhcnJheWJ1ZmZlciBjYW4gY29udGFpblxuICAgICAgICAvLyBvbiAzMi1iaXQgc3lzdGVtcy4gQWx0aG91Z2gsIG9uIDY0LWJpdCBzeXN0ZW1zLCB0aGlzIGlzXG4gICAgICAgIC8vIDJeNTMtMSBieXRlcy5cbiAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvRXJyb3JzL0ludmFsaWRfYXJyYXlfbGVuZ3RoXG4gICAgICAgIC8vIGh0dHBzOi8vc291cmNlLmNocm9taXVtLm9yZy9jaHJvbWl1bS9jaHJvbWl1bS9zcmMvKy9tYWluOnY4L3NyYy9jb21tb24vZ2xvYmFscy5oO2RyYz0xOTQ2MjEyYWMwMTAwNjY4ZjE0ZWI5ZTI4NDNiZGQ4NDZlNTEwYTFlO2Jwdj0xO2JwdD0xO2w9MTI3NVxuICAgICAgICAvLyBodHRwczovL3NvdXJjZS5jaHJvbWl1bS5vcmcvY2hyb21pdW0vY2hyb21pdW0vc3JjLysvbWFpbjp2OC9zcmMvb2JqZWN0cy9qcy1hcnJheS1idWZmZXIuaDtsPTM0O2RyYz0xOTQ2MjEyYWMwMTAwNjY4ZjE0ZWI5ZTI4NDNiZGQ4NDZlNTEwYTFlXG4gICAgICAgIGlmICh1cHBlciA+IDIgKiogMzEgLSAxKSB7XG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ1JlY2VpdmVkIHBheWxvYWQgbGVuZ3RoID4gMl4zMSBieXRlcy4nKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbG93ZXIgPSBidWZmZXIucmVhZFVJbnQzMkJFKDQpXG5cbiAgICAgICAgdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoID0gKHVwcGVyIDw8IDgpICsgbG93ZXJcbiAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuUkVBRF9EQVRBXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuI3N0YXRlID09PSBwYXJzZXJTdGF0ZXMuUkVBRF9EQVRBKSB7XG4gICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0IDwgdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoKSB7XG4gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgc3RpbGwgbW9yZSBkYXRhIGluIHRoaXMgY2h1bmsgdGhhdCBuZWVkcyB0byBiZSByZWFkXG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKClcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLiNieXRlT2Zmc2V0ID49IHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aCkge1xuICAgICAgICAgIC8vIElmIHRoZSBzZXJ2ZXIgc2VudCBtdWx0aXBsZSBmcmFtZXMgaW4gYSBzaW5nbGUgY2h1bmtcblxuICAgICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLmNvbnN1bWUodGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoKVxuXG4gICAgICAgICAgdGhpcy4jZnJhZ21lbnRzLnB1c2goYm9keSlcblxuICAgICAgICAgIC8vIElmIHRoZSBmcmFtZSBpcyB1bmZyYWdtZW50ZWQsIG9yIGEgZnJhZ21lbnRlZCBmcmFtZSB3YXMgdGVybWluYXRlZCxcbiAgICAgICAgICAvLyBhIG1lc3NhZ2Ugd2FzIHJlY2VpdmVkXG4gICAgICAgICAgaWYgKCF0aGlzLiNpbmZvLmZyYWdtZW50ZWQgfHwgKHRoaXMuI2luZm8uZmluICYmIHRoaXMuI2luZm8ub3Bjb2RlID09PSBvcGNvZGVzLkNPTlRJTlVBVElPTikpIHtcbiAgICAgICAgICAgIGNvbnN0IGZ1bGxNZXNzYWdlID0gQnVmZmVyLmNvbmNhdCh0aGlzLiNmcmFnbWVudHMpXG5cbiAgICAgICAgICAgIHdlYnNvY2tldE1lc3NhZ2VSZWNlaXZlZCh0aGlzLndzLCB0aGlzLiNpbmZvLm9yaWdpbmFsT3Bjb2RlLCBmdWxsTWVzc2FnZSlcblxuICAgICAgICAgICAgdGhpcy4jaW5mbyA9IHt9XG4gICAgICAgICAgICB0aGlzLiNmcmFnbWVudHMubGVuZ3RoID0gMFxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLklORk9cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA+IDApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGFrZSBuIGJ5dGVzIGZyb20gdGhlIGJ1ZmZlcmVkIEJ1ZmZlcnNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG5cbiAgICogQHJldHVybnMge0J1ZmZlcnxudWxsfVxuICAgKi9cbiAgY29uc3VtZSAobikge1xuICAgIGlmIChuID4gdGhpcy4jYnl0ZU9mZnNldCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9IGVsc2UgaWYgKG4gPT09IDApIHtcbiAgICAgIHJldHVybiBlbXB0eUJ1ZmZlclxuICAgIH1cblxuICAgIGlmICh0aGlzLiNidWZmZXJzWzBdLmxlbmd0aCA9PT0gbikge1xuICAgICAgdGhpcy4jYnl0ZU9mZnNldCAtPSB0aGlzLiNidWZmZXJzWzBdLmxlbmd0aFxuICAgICAgcmV0dXJuIHRoaXMuI2J1ZmZlcnMuc2hpZnQoKVxuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuKVxuICAgIGxldCBvZmZzZXQgPSAwXG5cbiAgICB3aGlsZSAob2Zmc2V0ICE9PSBuKSB7XG4gICAgICBjb25zdCBuZXh0ID0gdGhpcy4jYnVmZmVyc1swXVxuICAgICAgY29uc3QgeyBsZW5ndGggfSA9IG5leHRcblxuICAgICAgaWYgKGxlbmd0aCArIG9mZnNldCA9PT0gbikge1xuICAgICAgICBidWZmZXIuc2V0KHRoaXMuI2J1ZmZlcnMuc2hpZnQoKSwgb2Zmc2V0KVxuICAgICAgICBicmVha1xuICAgICAgfSBlbHNlIGlmIChsZW5ndGggKyBvZmZzZXQgPiBuKSB7XG4gICAgICAgIGJ1ZmZlci5zZXQobmV4dC5zdWJhcnJheSgwLCBuIC0gb2Zmc2V0KSwgb2Zmc2V0KVxuICAgICAgICB0aGlzLiNidWZmZXJzWzBdID0gbmV4dC5zdWJhcnJheShuIC0gb2Zmc2V0KVxuICAgICAgICBicmVha1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnVmZmVyLnNldCh0aGlzLiNidWZmZXJzLnNoaWZ0KCksIG9mZnNldClcbiAgICAgICAgb2Zmc2V0ICs9IG5leHQubGVuZ3RoXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy4jYnl0ZU9mZnNldCAtPSBuXG5cbiAgICByZXR1cm4gYnVmZmVyXG4gIH1cblxuICBwYXJzZUNsb3NlQm9keSAob25seUNvZGUsIGRhdGEpIHtcbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi03LjEuNVxuICAgIC8qKiBAdHlwZSB7bnVtYmVyfHVuZGVmaW5lZH0gKi9cbiAgICBsZXQgY29kZVxuXG4gICAgaWYgKGRhdGEubGVuZ3RoID49IDIpIHtcbiAgICAgIC8vIF9UaGUgV2ViU29ja2V0IENvbm5lY3Rpb24gQ2xvc2UgQ29kZV8gaXNcbiAgICAgIC8vIGRlZmluZWQgYXMgdGhlIHN0YXR1cyBjb2RlIChTZWN0aW9uIDcuNCkgY29udGFpbmVkIGluIHRoZSBmaXJzdCBDbG9zZVxuICAgICAgLy8gY29udHJvbCBmcmFtZSByZWNlaXZlZCBieSB0aGUgYXBwbGljYXRpb25cbiAgICAgIGNvZGUgPSBkYXRhLnJlYWRVSW50MTZCRSgwKVxuICAgIH1cblxuICAgIGlmIChvbmx5Q29kZSkge1xuICAgICAgaWYgKCFpc1ZhbGlkU3RhdHVzQ29kZShjb2RlKSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuXG4gICAgICByZXR1cm4geyBjb2RlIH1cbiAgICB9XG5cbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi03LjEuNlxuICAgIC8qKiBAdHlwZSB7QnVmZmVyfSAqL1xuICAgIGxldCByZWFzb24gPSBkYXRhLnN1YmFycmF5KDIpXG5cbiAgICAvLyBSZW1vdmUgQk9NXG4gICAgaWYgKHJlYXNvblswXSA9PT0gMHhFRiAmJiByZWFzb25bMV0gPT09IDB4QkIgJiYgcmVhc29uWzJdID09PSAweEJGKSB7XG4gICAgICByZWFzb24gPSByZWFzb24uc3ViYXJyYXkoMylcbiAgICB9XG5cbiAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkICYmICFpc1ZhbGlkU3RhdHVzQ29kZShjb2RlKSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gVE9ETzogb3B0aW1pemUgdGhpc1xuICAgICAgcmVhc29uID0gbmV3IFRleHREZWNvZGVyKCd1dGYtOCcsIHsgZmF0YWw6IHRydWUgfSkuZGVjb2RlKHJlYXNvbilcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY29kZSwgcmVhc29uIH1cbiAgfVxuXG4gIGdldCBjbG9zaW5nSW5mbyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2luZm8uY2xvc2VJbmZvXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEJ5dGVQYXJzZXJcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IERPTUV4Y2VwdGlvbiB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvY29uc3RhbnRzJylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZGF0YVVSTCcpXG5jb25zdCB7IGdldEdsb2JhbE9yaWdpbiB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZ2xvYmFsJylcbmNvbnN0IHsgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycywgc3RhdGVzLCBvcGNvZGVzLCBlbXB0eUJ1ZmZlciB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3Qge1xuICBrV2ViU29ja2V0VVJMLFxuICBrUmVhZHlTdGF0ZSxcbiAga0NvbnRyb2xsZXIsXG4gIGtCaW5hcnlUeXBlLFxuICBrUmVzcG9uc2UsXG4gIGtTZW50Q2xvc2UsXG4gIGtCeXRlUGFyc2VyXG59ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgaXNFc3RhYmxpc2hlZCwgaXNDbG9zaW5nLCBpc1ZhbGlkU3VicHJvdG9jb2wsIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uLCBmaXJlRXZlbnQgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24gfSA9IHJlcXVpcmUoJy4vY29ubmVjdGlvbicpXG5jb25zdCB7IFdlYnNvY2tldEZyYW1lU2VuZCB9ID0gcmVxdWlyZSgnLi9mcmFtZScpXG5jb25zdCB7IEJ5dGVQYXJzZXIgfSA9IHJlcXVpcmUoJy4vcmVjZWl2ZXInKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5LCBpc0Jsb2JMaWtlIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuLi9nbG9iYWwnKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgndXRpbCcpXG5cbmxldCBleHBlcmltZW50YWxXYXJuZWQgPSBmYWxzZVxuXG4vLyBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNpbnRlcmZhY2UtZGVmaW5pdGlvblxuY2xhc3MgV2ViU29ja2V0IGV4dGVuZHMgRXZlbnRUYXJnZXQge1xuICAjZXZlbnRzID0ge1xuICAgIG9wZW46IG51bGwsXG4gICAgZXJyb3I6IG51bGwsXG4gICAgY2xvc2U6IG51bGwsXG4gICAgbWVzc2FnZTogbnVsbFxuICB9XG5cbiAgI2J1ZmZlcmVkQW1vdW50ID0gMFxuICAjcHJvdG9jb2wgPSAnJ1xuICAjZXh0ZW5zaW9ucyA9ICcnXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IHByb3RvY29sc1xuICAgKi9cbiAgY29uc3RydWN0b3IgKHVybCwgcHJvdG9jb2xzID0gW10pIHtcbiAgICBzdXBlcigpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnV2ViU29ja2V0IGNvbnN0cnVjdG9yJyB9KVxuXG4gICAgaWYgKCFleHBlcmltZW50YWxXYXJuZWQpIHtcbiAgICAgIGV4cGVyaW1lbnRhbFdhcm5lZCA9IHRydWVcbiAgICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcoJ1dlYlNvY2tldHMgYXJlIGV4cGVyaW1lbnRhbCwgZXhwZWN0IHRoZW0gdG8gY2hhbmdlIGF0IGFueSB0aW1lLicsIHtcbiAgICAgICAgY29kZTogJ1VORElDSS1XUydcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzWydET01TdHJpbmcgb3Igc2VxdWVuY2U8RE9NU3RyaW5nPiBvciBXZWJTb2NrZXRJbml0J10ocHJvdG9jb2xzKVxuXG4gICAgdXJsID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHVybClcbiAgICBwcm90b2NvbHMgPSBvcHRpb25zLnByb3RvY29sc1xuXG4gICAgLy8gMS4gTGV0IGJhc2VVUkwgYmUgdGhpcydzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdCdzIEFQSSBiYXNlIFVSTC5cbiAgICBjb25zdCBiYXNlVVJMID0gZ2V0R2xvYmFsT3JpZ2luKClcblxuICAgIC8vIDEuIExldCB1cmxSZWNvcmQgYmUgdGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUgVVJMIHBhcnNlciB0byB1cmwgd2l0aCBiYXNlVVJMLlxuICAgIGxldCB1cmxSZWNvcmRcblxuICAgIHRyeSB7XG4gICAgICB1cmxSZWNvcmQgPSBuZXcgVVJMKHVybCwgYmFzZVVSTClcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyAzLiBJZiB1cmxSZWNvcmQgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGUsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gNC4gSWYgdXJsUmVjb3JkXHUyMDE5cyBzY2hlbWUgaXMgXCJodHRwXCIsIHRoZW4gc2V0IHVybFJlY29yZFx1MjAxOXMgc2NoZW1lIHRvIFwid3NcIi5cbiAgICBpZiAodXJsUmVjb3JkLnByb3RvY29sID09PSAnaHR0cDonKSB7XG4gICAgICB1cmxSZWNvcmQucHJvdG9jb2wgPSAnd3M6J1xuICAgIH0gZWxzZSBpZiAodXJsUmVjb3JkLnByb3RvY29sID09PSAnaHR0cHM6Jykge1xuICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB1cmxSZWNvcmRcdTIwMTlzIHNjaGVtZSBpcyBcImh0dHBzXCIsIHNldCB1cmxSZWNvcmRcdTIwMTlzIHNjaGVtZSB0byBcIndzc1wiLlxuICAgICAgdXJsUmVjb3JkLnByb3RvY29sID0gJ3dzczonXG4gICAgfVxuXG4gICAgLy8gNi4gSWYgdXJsUmVjb3JkXHUyMDE5cyBzY2hlbWUgaXMgbm90IFwid3NcIiBvciBcIndzc1wiLCB0aGVuIHRocm93IGEgXCJTeW50YXhFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAodXJsUmVjb3JkLnByb3RvY29sICE9PSAnd3M6JyAmJiB1cmxSZWNvcmQucHJvdG9jb2wgIT09ICd3c3M6Jykge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihcbiAgICAgICAgYEV4cGVjdGVkIGEgd3M6IG9yIHdzczogcHJvdG9jb2wsIGdvdCAke3VybFJlY29yZC5wcm90b2NvbH1gLFxuICAgICAgICAnU3ludGF4RXJyb3InXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gNy4gSWYgdXJsUmVjb3JkXHUyMDE5cyBmcmFnbWVudCBpcyBub24tbnVsbCwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIlxuICAgIC8vICAgIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAodXJsUmVjb3JkLmhhc2ggfHwgdXJsUmVjb3JkLmhyZWYuZW5kc1dpdGgoJyMnKSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignR290IGZyYWdtZW50JywgJ1N5bnRheEVycm9yJylcbiAgICB9XG5cbiAgICAvLyA4LiBJZiBwcm90b2NvbHMgaXMgYSBzdHJpbmcsIHNldCBwcm90b2NvbHMgdG8gYSBzZXF1ZW5jZSBjb25zaXN0aW5nXG4gICAgLy8gICAgb2YganVzdCB0aGF0IHN0cmluZy5cbiAgICBpZiAodHlwZW9mIHByb3RvY29scyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHByb3RvY29scyA9IFtwcm90b2NvbHNdXG4gICAgfVxuXG4gICAgLy8gOS4gSWYgYW55IG9mIHRoZSB2YWx1ZXMgaW4gcHJvdG9jb2xzIG9jY3VyIG1vcmUgdGhhbiBvbmNlIG9yIG90aGVyd2lzZVxuICAgIC8vICAgIGZhaWwgdG8gbWF0Y2ggdGhlIHJlcXVpcmVtZW50cyBmb3IgZWxlbWVudHMgdGhhdCBjb21wcmlzZSB0aGUgdmFsdWVcbiAgICAvLyAgICBvZiBgU2VjLVdlYlNvY2tldC1Qcm90b2NvbGAgZmllbGRzIGFzIGRlZmluZWQgYnkgVGhlIFdlYlNvY2tldFxuICAgIC8vICAgIHByb3RvY29sLCB0aGVuIHRocm93IGEgXCJTeW50YXhFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAocHJvdG9jb2xzLmxlbmd0aCAhPT0gbmV3IFNldChwcm90b2NvbHMubWFwKHAgPT4gcC50b0xvd2VyQ2FzZSgpKSkuc2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignSW52YWxpZCBTZWMtV2ViU29ja2V0LVByb3RvY29sIHZhbHVlJywgJ1N5bnRheEVycm9yJylcbiAgICB9XG5cbiAgICBpZiAocHJvdG9jb2xzLmxlbmd0aCA+IDAgJiYgIXByb3RvY29scy5ldmVyeShwID0+IGlzVmFsaWRTdWJwcm90b2NvbChwKSkpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ0ludmFsaWQgU2VjLVdlYlNvY2tldC1Qcm90b2NvbCB2YWx1ZScsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gMTAuIFNldCB0aGlzJ3MgdXJsIHRvIHVybFJlY29yZC5cbiAgICB0aGlzW2tXZWJTb2NrZXRVUkxdID0gbmV3IFVSTCh1cmxSZWNvcmQuaHJlZilcblxuICAgIC8vIDExLiBMZXQgY2xpZW50IGJlIHRoaXMncyByZWxldmFudCBzZXR0aW5ncyBvYmplY3QuXG5cbiAgICAvLyAxMi4gUnVuIHRoaXMgc3RlcCBpbiBwYXJhbGxlbDpcblxuICAgIC8vICAgIDEuIEVzdGFibGlzaCBhIFdlYlNvY2tldCBjb25uZWN0aW9uIGdpdmVuIHVybFJlY29yZCwgcHJvdG9jb2xzLFxuICAgIC8vICAgICAgIGFuZCBjbGllbnQuXG4gICAgdGhpc1trQ29udHJvbGxlcl0gPSBlc3RhYmxpc2hXZWJTb2NrZXRDb25uZWN0aW9uKFxuICAgICAgdXJsUmVjb3JkLFxuICAgICAgcHJvdG9jb2xzLFxuICAgICAgdGhpcyxcbiAgICAgIChyZXNwb25zZSkgPT4gdGhpcy4jb25Db25uZWN0aW9uRXN0YWJsaXNoZWQocmVzcG9uc2UpLFxuICAgICAgb3B0aW9uc1xuICAgIClcblxuICAgIC8vIEVhY2ggV2ViU29ja2V0IG9iamVjdCBoYXMgYW4gYXNzb2NpYXRlZCByZWFkeSBzdGF0ZSwgd2hpY2ggaXMgYVxuICAgIC8vIG51bWJlciByZXByZXNlbnRpbmcgdGhlIHN0YXRlIG9mIHRoZSBjb25uZWN0aW9uLiBJbml0aWFsbHkgaXQgbXVzdFxuICAgIC8vIGJlIENPTk5FQ1RJTkcgKDApLlxuICAgIHRoaXNba1JlYWR5U3RhdGVdID0gV2ViU29ja2V0LkNPTk5FQ1RJTkdcblxuICAgIC8vIFRoZSBleHRlbnNpb25zIGF0dHJpYnV0ZSBtdXN0IGluaXRpYWxseSByZXR1cm4gdGhlIGVtcHR5IHN0cmluZy5cblxuICAgIC8vIFRoZSBwcm90b2NvbCBhdHRyaWJ1dGUgbXVzdCBpbml0aWFsbHkgcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcuXG5cbiAgICAvLyBFYWNoIFdlYlNvY2tldCBvYmplY3QgaGFzIGFuIGFzc29jaWF0ZWQgYmluYXJ5IHR5cGUsIHdoaWNoIGlzIGFcbiAgICAvLyBCaW5hcnlUeXBlLiBJbml0aWFsbHkgaXQgbXVzdCBiZSBcImJsb2JcIi5cbiAgICB0aGlzW2tCaW5hcnlUeXBlXSA9ICdibG9iJ1xuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1jbG9zZVxuICAgKiBAcGFyYW0ge251bWJlcnx1bmRlZmluZWR9IGNvZGVcbiAgICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSByZWFzb25cbiAgICovXG4gIGNsb3NlIChjb2RlID0gdW5kZWZpbmVkLCByZWFzb24gPSB1bmRlZmluZWQpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb2RlID0gd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIHNob3J0J10oY29kZSwgeyBjbGFtcDogdHJ1ZSB9KVxuICAgIH1cblxuICAgIGlmIChyZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVhc29uID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHJlYXNvbilcbiAgICB9XG5cbiAgICAvLyAxLiBJZiBjb2RlIGlzIHByZXNlbnQsIGJ1dCBpcyBuZWl0aGVyIGFuIGludGVnZXIgZXF1YWwgdG8gMTAwMCBub3IgYW5cbiAgICAvLyAgICBpbnRlZ2VyIGluIHRoZSByYW5nZSAzMDAwIHRvIDQ5OTksIGluY2x1c2l2ZSwgdGhyb3cgYW5cbiAgICAvLyAgICBcIkludmFsaWRBY2Nlc3NFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoY29kZSAhPT0gMTAwMCAmJiAoY29kZSA8IDMwMDAgfHwgY29kZSA+IDQ5OTkpKSB7XG4gICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ2ludmFsaWQgY29kZScsICdJbnZhbGlkQWNjZXNzRXJyb3InKVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCByZWFzb25CeXRlTGVuZ3RoID0gMFxuXG4gICAgLy8gMi4gSWYgcmVhc29uIGlzIHByZXNlbnQsIHRoZW4gcnVuIHRoZXNlIHN1YnN0ZXBzOlxuICAgIGlmIChyZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gMS4gTGV0IHJlYXNvbkJ5dGVzIGJlIHRoZSByZXN1bHQgb2YgZW5jb2RpbmcgcmVhc29uLlxuICAgICAgLy8gMi4gSWYgcmVhc29uQnl0ZXMgaXMgbG9uZ2VyIHRoYW4gMTIzIGJ5dGVzLCB0aGVuIHRocm93IGFcbiAgICAgIC8vICAgIFwiU3ludGF4RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgICByZWFzb25CeXRlTGVuZ3RoID0gQnVmZmVyLmJ5dGVMZW5ndGgocmVhc29uKVxuXG4gICAgICBpZiAocmVhc29uQnl0ZUxlbmd0aCA+IDEyMykge1xuICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKFxuICAgICAgICAgIGBSZWFzb24gbXVzdCBiZSBsZXNzIHRoYW4gMTIzIGJ5dGVzOyByZWNlaXZlZCAke3JlYXNvbkJ5dGVMZW5ndGh9YCxcbiAgICAgICAgICAnU3ludGF4RXJyb3InXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzLiBSdW4gdGhlIGZpcnN0IG1hdGNoaW5nIHN0ZXBzIGZyb20gdGhlIGZvbGxvd2luZyBsaXN0OlxuICAgIGlmICh0aGlzW2tSZWFkeVN0YXRlXSA9PT0gV2ViU29ja2V0LkNMT1NJTkcgfHwgdGhpc1trUmVhZHlTdGF0ZV0gPT09IFdlYlNvY2tldC5DTE9TRUQpIHtcbiAgICAgIC8vIElmIHRoaXMncyByZWFkeSBzdGF0ZSBpcyBDTE9TSU5HICgyKSBvciBDTE9TRUQgKDMpXG4gICAgICAvLyBEbyBub3RoaW5nLlxuICAgIH0gZWxzZSBpZiAoIWlzRXN0YWJsaXNoZWQodGhpcykpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBub3QgeWV0IGVzdGFibGlzaGVkXG4gICAgICAvLyBGYWlsIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBhbmQgc2V0IHRoaXMncyByZWFkeSBzdGF0ZVxuICAgICAgLy8gdG8gQ0xPU0lORyAoMikuXG4gICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLCAnQ29ubmVjdGlvbiB3YXMgY2xvc2VkIGJlZm9yZSBpdCB3YXMgZXN0YWJsaXNoZWQuJylcbiAgICAgIHRoaXNba1JlYWR5U3RhdGVdID0gV2ViU29ja2V0LkNMT1NJTkdcbiAgICB9IGVsc2UgaWYgKCFpc0Nsb3NpbmcodGhpcykpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgYmVlbiBzdGFydGVkXG4gICAgICAvLyBTdGFydCB0aGUgV2ViU29ja2V0IGNsb3NpbmcgaGFuZHNoYWtlIGFuZCBzZXQgdGhpcydzIHJlYWR5XG4gICAgICAvLyBzdGF0ZSB0byBDTE9TSU5HICgyKS5cbiAgICAgIC8vIC0gSWYgbmVpdGhlciBjb2RlIG5vciByZWFzb24gaXMgcHJlc2VudCwgdGhlIFdlYlNvY2tldCBDbG9zZVxuICAgICAgLy8gICBtZXNzYWdlIG11c3Qgbm90IGhhdmUgYSBib2R5LlxuICAgICAgLy8gLSBJZiBjb2RlIGlzIHByZXNlbnQsIHRoZW4gdGhlIHN0YXR1cyBjb2RlIHRvIHVzZSBpbiB0aGVcbiAgICAgIC8vICAgV2ViU29ja2V0IENsb3NlIG1lc3NhZ2UgbXVzdCBiZSB0aGUgaW50ZWdlciBnaXZlbiBieSBjb2RlLlxuICAgICAgLy8gLSBJZiByZWFzb24gaXMgYWxzbyBwcmVzZW50LCB0aGVuIHJlYXNvbkJ5dGVzIG11c3QgYmVcbiAgICAgIC8vICAgcHJvdmlkZWQgaW4gdGhlIENsb3NlIG1lc3NhZ2UgYWZ0ZXIgdGhlIHN0YXR1cyBjb2RlLlxuXG4gICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoKVxuXG4gICAgICAvLyBJZiBuZWl0aGVyIGNvZGUgbm9yIHJlYXNvbiBpcyBwcmVzZW50LCB0aGUgV2ViU29ja2V0IENsb3NlXG4gICAgICAvLyBtZXNzYWdlIG11c3Qgbm90IGhhdmUgYSBib2R5LlxuXG4gICAgICAvLyBJZiBjb2RlIGlzIHByZXNlbnQsIHRoZW4gdGhlIHN0YXR1cyBjb2RlIHRvIHVzZSBpbiB0aGVcbiAgICAgIC8vIFdlYlNvY2tldCBDbG9zZSBtZXNzYWdlIG11c3QgYmUgdGhlIGludGVnZXIgZ2l2ZW4gYnkgY29kZS5cbiAgICAgIGlmIChjb2RlICE9PSB1bmRlZmluZWQgJiYgcmVhc29uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZnJhbWUuZnJhbWVEYXRhID0gQnVmZmVyLmFsbG9jVW5zYWZlKDIpXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YS53cml0ZVVJbnQxNkJFKGNvZGUsIDApXG4gICAgICB9IGVsc2UgaWYgKGNvZGUgIT09IHVuZGVmaW5lZCAmJiByZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBJZiByZWFzb24gaXMgYWxzbyBwcmVzZW50LCB0aGVuIHJlYXNvbkJ5dGVzIG11c3QgYmVcbiAgICAgICAgLy8gcHJvdmlkZWQgaW4gdGhlIENsb3NlIG1lc3NhZ2UgYWZ0ZXIgdGhlIHN0YXR1cyBjb2RlLlxuICAgICAgICBmcmFtZS5mcmFtZURhdGEgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMiArIHJlYXNvbkJ5dGVMZW5ndGgpXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YS53cml0ZVVJbnQxNkJFKGNvZGUsIDApXG4gICAgICAgIC8vIHRoZSBib2R5IE1BWSBjb250YWluIFVURi04LWVuY29kZWQgZGF0YSB3aXRoIHZhbHVlIC9yZWFzb24vXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YS53cml0ZShyZWFzb24sIDIsICd1dGYtOCcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmcmFtZS5mcmFtZURhdGEgPSBlbXB0eUJ1ZmZlclxuICAgICAgfVxuXG4gICAgICAvKiogQHR5cGUge2ltcG9ydCgnc3RyZWFtJykuRHVwbGV4fSAqL1xuICAgICAgY29uc3Qgc29ja2V0ID0gdGhpc1trUmVzcG9uc2VdLnNvY2tldFxuXG4gICAgICBzb2NrZXQud3JpdGUoZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5DTE9TRSksIChlcnIpID0+IHtcbiAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICB0aGlzW2tTZW50Q2xvc2VdID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICAvLyBVcG9uIGVpdGhlciBzZW5kaW5nIG9yIHJlY2VpdmluZyBhIENsb3NlIGNvbnRyb2wgZnJhbWUsIGl0IGlzIHNhaWRcbiAgICAgIC8vIHRoYXQgX1RoZSBXZWJTb2NrZXQgQ2xvc2luZyBIYW5kc2hha2UgaXMgU3RhcnRlZF8gYW5kIHRoYXQgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBpbiB0aGUgQ0xPU0lORyBzdGF0ZS5cbiAgICAgIHRoaXNba1JlYWR5U3RhdGVdID0gc3RhdGVzLkNMT1NJTkdcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAvLyBTZXQgdGhpcydzIHJlYWR5IHN0YXRlIHRvIENMT1NJTkcgKDIpLlxuICAgICAgdGhpc1trUmVhZHlTdGF0ZV0gPSBXZWJTb2NrZXQuQ0xPU0lOR1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtc2VuZFxuICAgKiBAcGFyYW0ge05vZGVKUy5UeXBlZEFycmF5fEFycmF5QnVmZmVyfEJsb2J8c3RyaW5nfSBkYXRhXG4gICAqL1xuICBzZW5kIChkYXRhKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ1dlYlNvY2tldC5zZW5kJyB9KVxuXG4gICAgZGF0YSA9IHdlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldFNlbmREYXRhKGRhdGEpXG5cbiAgICAvLyAxLiBJZiB0aGlzJ3MgcmVhZHkgc3RhdGUgaXMgQ09OTkVDVElORywgdGhlbiB0aHJvdyBhblxuICAgIC8vICAgIFwiSW52YWxpZFN0YXRlRXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgaWYgKHRoaXNba1JlYWR5U3RhdGVdID09PSBXZWJTb2NrZXQuQ09OTkVDVElORykge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignU2VudCBiZWZvcmUgY29ubmVjdGVkLicsICdJbnZhbGlkU3RhdGVFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gMi4gUnVuIHRoZSBhcHByb3ByaWF0ZSBzZXQgb2Ygc3RlcHMgZnJvbSB0aGUgZm9sbG93aW5nIGxpc3Q6XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNi4xXG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNS4yXG5cbiAgICBpZiAoIWlzRXN0YWJsaXNoZWQodGhpcykgfHwgaXNDbG9zaW5nKHRoaXMpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvKiogQHR5cGUge2ltcG9ydCgnc3RyZWFtJykuRHVwbGV4fSAqL1xuICAgIGNvbnN0IHNvY2tldCA9IHRoaXNba1Jlc3BvbnNlXS5zb2NrZXRcblxuICAgIC8vIElmIGRhdGEgaXMgYSBzdHJpbmdcbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgYW5kIHRoZSBXZWJTb2NrZXRcbiAgICAgIC8vIGNsb3NpbmcgaGFuZHNoYWtlIGhhcyBub3QgeWV0IHN0YXJ0ZWQsIHRoZW4gdGhlIHVzZXIgYWdlbnRcbiAgICAgIC8vIG11c3Qgc2VuZCBhIFdlYlNvY2tldCBNZXNzYWdlIGNvbXByaXNlZCBvZiB0aGUgZGF0YSBhcmd1bWVudFxuICAgICAgLy8gdXNpbmcgYSB0ZXh0IGZyYW1lIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy5cbiAgICAgIC8vIGJlY2F1c2UgaXQgd291bGQgbmVlZCB0byBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLFxuICAgICAgLy8gdGhlIHVzZXIgYWdlbnQgbXVzdCBmbGFnIHRoZSBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZVxuICAgICAgLy8gdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uLiBBbnkgaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIGFcbiAgICAgIC8vIHN0cmluZyBhcmd1bWVudCB0aGF0IGRvZXMgbm90IHRocm93IGFuIGV4Y2VwdGlvbiBtdXN0IGluY3JlYXNlXG4gICAgICAvLyB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlIGJ5IHRoZSBudW1iZXIgb2YgYnl0ZXMgbmVlZGVkIHRvXG4gICAgICAvLyBleHByZXNzIHRoZSBhcmd1bWVudCBhcyBVVEYtOC5cblxuICAgICAgY29uc3QgdmFsdWUgPSBCdWZmZXIuZnJvbShkYXRhKVxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKHZhbHVlKVxuICAgICAgY29uc3QgYnVmZmVyID0gZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5URVhUKVxuXG4gICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCArPSB2YWx1ZS5ieXRlTGVuZ3RoXG4gICAgICBzb2NrZXQud3JpdGUoYnVmZmVyLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50IC09IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmICh0eXBlcy5pc0FycmF5QnVmZmVyKGRhdGEpKSB7XG4gICAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQsIGFuZCB0aGUgV2ViU29ja2V0XG4gICAgICAvLyBjbG9zaW5nIGhhbmRzaGFrZSBoYXMgbm90IHlldCBzdGFydGVkLCB0aGVuIHRoZSB1c2VyIGFnZW50IG11c3RcbiAgICAgIC8vIHNlbmQgYSBXZWJTb2NrZXQgTWVzc2FnZSBjb21wcmlzZWQgb2YgZGF0YSB1c2luZyBhIGJpbmFyeSBmcmFtZVxuICAgICAgLy8gb3Bjb2RlOyBpZiB0aGUgZGF0YSBjYW5ub3QgYmUgc2VudCwgZS5nLiBiZWNhdXNlIGl0IHdvdWxkIG5lZWRcbiAgICAgIC8vIHRvIGJlIGJ1ZmZlcmVkIGJ1dCB0aGUgYnVmZmVyIGlzIGZ1bGwsIHRoZSB1c2VyIGFnZW50IG11c3QgZmxhZ1xuICAgICAgLy8gdGhlIFdlYlNvY2tldCBhcyBmdWxsIGFuZCB0aGVuIGNsb3NlIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi5cbiAgICAgIC8vIFRoZSBkYXRhIHRvIGJlIHNlbnQgaXMgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBidWZmZXIgZGVzY3JpYmVkXG4gICAgICAvLyBieSB0aGUgQXJyYXlCdWZmZXIgb2JqZWN0LiBBbnkgaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIGFuXG4gICAgICAvLyBBcnJheUJ1ZmZlciBhcmd1bWVudCB0aGF0IGRvZXMgbm90IHRocm93IGFuIGV4Y2VwdGlvbiBtdXN0XG4gICAgICAvLyBpbmNyZWFzZSB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlIGJ5IHRoZSBsZW5ndGggb2YgdGhlXG4gICAgICAvLyBBcnJheUJ1ZmZlciBpbiBieXRlcy5cblxuICAgICAgY29uc3QgdmFsdWUgPSBCdWZmZXIuZnJvbShkYXRhKVxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKHZhbHVlKVxuICAgICAgY29uc3QgYnVmZmVyID0gZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5CSU5BUlkpXG5cbiAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50ICs9IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgIHNvY2tldC53cml0ZShidWZmZXIsICgpID0+IHtcbiAgICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgLT0gdmFsdWUuYnl0ZUxlbmd0aFxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhkYXRhKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBhbmQgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgc3RhcnRlZCwgdGhlbiB0aGUgdXNlciBhZ2VudCBtdXN0XG4gICAgICAvLyBzZW5kIGEgV2ViU29ja2V0IE1lc3NhZ2UgY29tcHJpc2VkIG9mIGRhdGEgdXNpbmcgYSBiaW5hcnkgZnJhbWVcbiAgICAgIC8vIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy4gYmVjYXVzZSBpdCB3b3VsZCBuZWVkIHRvXG4gICAgICAvLyBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLCB0aGUgdXNlciBhZ2VudCBtdXN0IGZsYWcgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZSB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uIFRoZVxuICAgICAgLy8gZGF0YSB0byBiZSBzZW50IGlzIHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgc2VjdGlvbiBvZiB0aGUgYnVmZmVyXG4gICAgICAvLyBkZXNjcmliZWQgYnkgdGhlIEFycmF5QnVmZmVyIG9iamVjdCB0aGF0IGRhdGEgcmVmZXJlbmNlcy4gQW55XG4gICAgICAvLyBpbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpdGggdGhpcyBraW5kIG9mIGFyZ3VtZW50IHRoYXQgZG9lc1xuICAgICAgLy8gbm90IHRocm93IGFuIGV4Y2VwdGlvbiBtdXN0IGluY3JlYXNlIHRoZSBidWZmZXJlZEFtb3VudCBhdHRyaWJ1dGVcbiAgICAgIC8vIGJ5IHRoZSBsZW5ndGggb2YgZGF0YVx1MjAxOXMgYnVmZmVyIGluIGJ5dGVzLlxuXG4gICAgICBjb25zdCBhYiA9IEJ1ZmZlci5mcm9tKGRhdGEsIGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5ieXRlTGVuZ3RoKVxuXG4gICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoYWIpXG4gICAgICBjb25zdCBidWZmZXIgPSBmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkJJTkFSWSlcblxuICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgKz0gYWIuYnl0ZUxlbmd0aFxuICAgICAgc29ja2V0LndyaXRlKGJ1ZmZlciwgKCkgPT4ge1xuICAgICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCAtPSBhYi5ieXRlTGVuZ3RoXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShkYXRhKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBhbmQgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgc3RhcnRlZCwgdGhlbiB0aGUgdXNlciBhZ2VudCBtdXN0XG4gICAgICAvLyBzZW5kIGEgV2ViU29ja2V0IE1lc3NhZ2UgY29tcHJpc2VkIG9mIGRhdGEgdXNpbmcgYSBiaW5hcnkgZnJhbWVcbiAgICAgIC8vIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy4gYmVjYXVzZSBpdCB3b3VsZCBuZWVkIHRvXG4gICAgICAvLyBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLCB0aGUgdXNlciBhZ2VudCBtdXN0IGZsYWcgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZSB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uIFRoZSBkYXRhXG4gICAgICAvLyB0byBiZSBzZW50IGlzIHRoZSByYXcgZGF0YSByZXByZXNlbnRlZCBieSB0aGUgQmxvYiBvYmplY3QuIEFueVxuICAgICAgLy8gaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIGEgQmxvYiBhcmd1bWVudCB0aGF0IGRvZXMgbm90IHRocm93XG4gICAgICAvLyBhbiBleGNlcHRpb24gbXVzdCBpbmNyZWFzZSB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlIGJ5IHRoZSBzaXplXG4gICAgICAvLyBvZiB0aGUgQmxvYiBvYmplY3RcdTIwMTlzIHJhdyBkYXRhLCBpbiBieXRlcy5cblxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKClcblxuICAgICAgZGF0YS5hcnJheUJ1ZmZlcigpLnRoZW4oKGFiKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gQnVmZmVyLmZyb20oYWIpXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YSA9IHZhbHVlXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IGZyYW1lLmNyZWF0ZUZyYW1lKG9wY29kZXMuQklOQVJZKVxuXG4gICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50ICs9IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgICAgc29ja2V0LndyaXRlKGJ1ZmZlciwgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50IC09IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZ2V0IHJlYWR5U3RhdGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIC8vIFRoZSByZWFkeVN0YXRlIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXMncyByZWFkeSBzdGF0ZS5cbiAgICByZXR1cm4gdGhpc1trUmVhZHlTdGF0ZV1cbiAgfVxuXG4gIGdldCBidWZmZXJlZEFtb3VudCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2J1ZmZlcmVkQW1vdW50XG4gIH1cblxuICBnZXQgdXJsICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICAvLyBUaGUgdXJsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXMncyB1cmwsIHNlcmlhbGl6ZWQuXG4gICAgcmV0dXJuIFVSTFNlcmlhbGl6ZXIodGhpc1trV2ViU29ja2V0VVJMXSlcbiAgfVxuXG4gIGdldCBleHRlbnNpb25zICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXh0ZW5zaW9uc1xuICB9XG5cbiAgZ2V0IHByb3RvY29sICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jcHJvdG9jb2xcbiAgfVxuXG4gIGdldCBvbm9wZW4gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNldmVudHMub3BlblxuICB9XG5cbiAgc2V0IG9ub3BlbiAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAodGhpcy4jZXZlbnRzLm9wZW4pIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignb3BlbicsIHRoaXMuI2V2ZW50cy5vcGVuKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5vcGVuID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignb3BlbicsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMub3BlbiA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25lcnJvciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5lcnJvclxuICB9XG5cbiAgc2V0IG9uZXJyb3IgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgaWYgKHRoaXMuI2V2ZW50cy5lcnJvcikge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuI2V2ZW50cy5lcnJvcilcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLiNldmVudHMuZXJyb3IgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMuZXJyb3IgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9uY2xvc2UgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNldmVudHMuY2xvc2VcbiAgfVxuXG4gIHNldCBvbmNsb3NlIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0aGlzLiNldmVudHMuY2xvc2UpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xvc2UnLCB0aGlzLiNldmVudHMuY2xvc2UpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy4jZXZlbnRzLmNsb3NlID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignY2xvc2UnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jZXZlbnRzLmNsb3NlID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbm1lc3NhZ2UgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNldmVudHMubWVzc2FnZVxuICB9XG5cbiAgc2V0IG9ubWVzc2FnZSAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAodGhpcy4jZXZlbnRzLm1lc3NhZ2UpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMuI2V2ZW50cy5tZXNzYWdlKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5tZXNzYWdlID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMubWVzc2FnZSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgYmluYXJ5VHlwZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXNba0JpbmFyeVR5cGVdXG4gIH1cblxuICBzZXQgYmluYXJ5VHlwZSAodHlwZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0eXBlICE9PSAnYmxvYicgJiYgdHlwZSAhPT0gJ2FycmF5YnVmZmVyJykge1xuICAgICAgdGhpc1trQmluYXJ5VHlwZV0gPSAnYmxvYidcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trQmluYXJ5VHlwZV0gPSB0eXBlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZmVlZGJhY2stZnJvbS10aGUtcHJvdG9jb2xcbiAgICovXG4gICNvbkNvbm5lY3Rpb25Fc3RhYmxpc2hlZCAocmVzcG9uc2UpIHtcbiAgICAvLyBwcm9jZXNzUmVzcG9uc2UgaXMgY2FsbGVkIHdoZW4gdGhlIFwicmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0IGhhcyBiZWVuIHJlY2VpdmVkIGFuZCBpbml0aWFsaXplZC5cIlxuICAgIC8vIG9uY2UgdGhpcyBoYXBwZW5zLCB0aGUgY29ubmVjdGlvbiBpcyBvcGVuXG4gICAgdGhpc1trUmVzcG9uc2VdID0gcmVzcG9uc2VcblxuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBCeXRlUGFyc2VyKHRoaXMpXG4gICAgcGFyc2VyLm9uKCdkcmFpbicsIGZ1bmN0aW9uIG9uUGFyc2VyRHJhaW4gKCkge1xuICAgICAgdGhpcy53c1trUmVzcG9uc2VdLnNvY2tldC5yZXN1bWUoKVxuICAgIH0pXG5cbiAgICByZXNwb25zZS5zb2NrZXQud3MgPSB0aGlzXG4gICAgdGhpc1trQnl0ZVBhcnNlcl0gPSBwYXJzZXJcblxuICAgIC8vIDEuIENoYW5nZSB0aGUgcmVhZHkgc3RhdGUgdG8gT1BFTiAoMSkuXG4gICAgdGhpc1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuT1BFTlxuXG4gICAgLy8gMi4gQ2hhbmdlIHRoZSBleHRlbnNpb25zIGF0dHJpYnV0ZVx1MjAxOXMgdmFsdWUgdG8gdGhlIGV4dGVuc2lvbnMgaW4gdXNlLCBpZlxuICAgIC8vICAgIGl0IGlzIG5vdCB0aGUgbnVsbCB2YWx1ZS5cbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi05LjFcbiAgICBjb25zdCBleHRlbnNpb25zID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdzZWMtd2Vic29ja2V0LWV4dGVuc2lvbnMnKVxuXG4gICAgaWYgKGV4dGVuc2lvbnMgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuI2V4dGVuc2lvbnMgPSBleHRlbnNpb25zXG4gICAgfVxuXG4gICAgLy8gMy4gQ2hhbmdlIHRoZSBwcm90b2NvbCBhdHRyaWJ1dGVcdTIwMTlzIHZhbHVlIHRvIHRoZSBzdWJwcm90b2NvbCBpbiB1c2UsIGlmXG4gICAgLy8gICAgaXQgaXMgbm90IHRoZSBudWxsIHZhbHVlLlxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTEuOVxuICAgIGNvbnN0IHByb3RvY29sID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdzZWMtd2Vic29ja2V0LXByb3RvY29sJylcblxuICAgIGlmIChwcm90b2NvbCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy4jcHJvdG9jb2wgPSBwcm90b2NvbFxuICAgIH1cblxuICAgIC8vIDQuIEZpcmUgYW4gZXZlbnQgbmFtZWQgb3BlbiBhdCB0aGUgV2ViU29ja2V0IG9iamVjdC5cbiAgICBmaXJlRXZlbnQoJ29wZW4nLCB0aGlzKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtY29ubmVjdGluZ1xuV2ViU29ja2V0LkNPTk5FQ1RJTkcgPSBXZWJTb2NrZXQucHJvdG90eXBlLkNPTk5FQ1RJTkcgPSBzdGF0ZXMuQ09OTkVDVElOR1xuLy8gaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1vcGVuXG5XZWJTb2NrZXQuT1BFTiA9IFdlYlNvY2tldC5wcm90b3R5cGUuT1BFTiA9IHN0YXRlcy5PUEVOXG4vLyBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNkb20td2Vic29ja2V0LWNsb3NpbmdcbldlYlNvY2tldC5DTE9TSU5HID0gV2ViU29ja2V0LnByb3RvdHlwZS5DTE9TSU5HID0gc3RhdGVzLkNMT1NJTkdcbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtY2xvc2VkXG5XZWJTb2NrZXQuQ0xPU0VEID0gV2ViU29ja2V0LnByb3RvdHlwZS5DTE9TRUQgPSBzdGF0ZXMuQ0xPU0VEXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdlYlNvY2tldC5wcm90b3R5cGUsIHtcbiAgQ09OTkVDVElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgT1BFTjogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgQ0xPU0lORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgQ0xPU0VEOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICB1cmw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWR5U3RhdGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJ1ZmZlcmVkQW1vdW50OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbm9wZW46IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uY2xvc2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNsb3NlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbm1lc3NhZ2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJpbmFyeVR5cGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNlbmQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGV4dGVuc2lvbnM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHByb3RvY29sOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnV2ViU29ja2V0JyxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdlYlNvY2tldCwge1xuICBDT05ORUNUSU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBPUEVOOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBDTE9TSU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBDTE9TRUQ6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnNcbn0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxET01TdHJpbmc+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZ1xuKVxuXG53ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4nXSA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0JyAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gVikge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8RE9NU3RyaW5nPiddKFYpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYpXG59XG5cbi8vIFRoaXMgaW1wbGVtZW50cyB0aGUgcHJvcHNhbCBtYWRlIGluIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvd2Vic29ja2V0cy9pc3N1ZXMvNDJcbndlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldEluaXQgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBrZXk6ICdwcm90b2NvbHMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ0RPTVN0cmluZyBvciBzZXF1ZW5jZTxET01TdHJpbmc+J10sXG4gICAgZ2V0IGRlZmF1bHRWYWx1ZSAoKSB7XG4gICAgICByZXR1cm4gW11cbiAgICB9XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdkaXNwYXRjaGVyJyxcbiAgICBjb252ZXJ0ZXI6IChWKSA9PiBWLFxuICAgIGdldCBkZWZhdWx0VmFsdWUgKCkge1xuICAgICAgcmV0dXJuIGdldEdsb2JhbERpc3BhdGNoZXIoKVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGtleTogJ2hlYWRlcnMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkhlYWRlcnNJbml0KVxuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4gb3IgV2ViU29ja2V0SW5pdCddID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgPT09ICdPYmplY3QnICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldEluaXQoVilcbiAgfVxuXG4gIHJldHVybiB7IHByb3RvY29sczogd2ViaWRsLmNvbnZlcnRlcnNbJ0RPTVN0cmluZyBvciBzZXF1ZW5jZTxET01TdHJpbmc+J10oVikgfVxufVxuXG53ZWJpZGwuY29udmVydGVycy5XZWJTb2NrZXRTZW5kRGF0YSA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0Jykge1xuICAgIGlmIChpc0Jsb2JMaWtlKFYpKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihWLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgICB9XG5cbiAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KFYpIHx8IHR5cGVzLmlzQW55QXJyYXlCdWZmZXIoVikpIHtcbiAgICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CdWZmZXJTb3VyY2UoVilcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBXZWJTb2NrZXRcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgQ2xpZW50ID0gcmVxdWlyZSgnLi9saWIvY2xpZW50JylcbmNvbnN0IERpc3BhdGNoZXIgPSByZXF1aXJlKCcuL2xpYi9kaXNwYXRjaGVyJylcbmNvbnN0IGVycm9ycyA9IHJlcXVpcmUoJy4vbGliL2NvcmUvZXJyb3JzJylcbmNvbnN0IFBvb2wgPSByZXF1aXJlKCcuL2xpYi9wb29sJylcbmNvbnN0IEJhbGFuY2VkUG9vbCA9IHJlcXVpcmUoJy4vbGliL2JhbGFuY2VkLXBvb2wnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuL2xpYi9hZ2VudCcpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi9saWIvY29yZS91dGlsJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IGVycm9yc1xuY29uc3QgYXBpID0gcmVxdWlyZSgnLi9saWIvYXBpJylcbmNvbnN0IGJ1aWxkQ29ubmVjdG9yID0gcmVxdWlyZSgnLi9saWIvY29yZS9jb25uZWN0JylcbmNvbnN0IE1vY2tDbGllbnQgPSByZXF1aXJlKCcuL2xpYi9tb2NrL21vY2stY2xpZW50JylcbmNvbnN0IE1vY2tBZ2VudCA9IHJlcXVpcmUoJy4vbGliL21vY2svbW9jay1hZ2VudCcpXG5jb25zdCBNb2NrUG9vbCA9IHJlcXVpcmUoJy4vbGliL21vY2svbW9jay1wb29sJylcbmNvbnN0IG1vY2tFcnJvcnMgPSByZXF1aXJlKCcuL2xpYi9tb2NrL21vY2stZXJyb3JzJylcbmNvbnN0IFByb3h5QWdlbnQgPSByZXF1aXJlKCcuL2xpYi9wcm94eS1hZ2VudCcpXG5jb25zdCBSZXRyeUhhbmRsZXIgPSByZXF1aXJlKCcuL2xpYi9oYW5kbGVyL1JldHJ5SGFuZGxlcicpXG5jb25zdCB7IGdldEdsb2JhbERpc3BhdGNoZXIsIHNldEdsb2JhbERpc3BhdGNoZXIgfSA9IHJlcXVpcmUoJy4vbGliL2dsb2JhbCcpXG5jb25zdCBEZWNvcmF0b3JIYW5kbGVyID0gcmVxdWlyZSgnLi9saWIvaGFuZGxlci9EZWNvcmF0b3JIYW5kbGVyJylcbmNvbnN0IFJlZGlyZWN0SGFuZGxlciA9IHJlcXVpcmUoJy4vbGliL2hhbmRsZXIvUmVkaXJlY3RIYW5kbGVyJylcbmNvbnN0IGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IgPSByZXF1aXJlKCcuL2xpYi9pbnRlcmNlcHRvci9yZWRpcmVjdEludGVyY2VwdG9yJylcblxubGV0IGhhc0NyeXB0b1xudHJ5IHtcbiAgcmVxdWlyZSgnY3J5cHRvJylcbiAgaGFzQ3J5cHRvID0gdHJ1ZVxufSBjYXRjaCB7XG4gIGhhc0NyeXB0byA9IGZhbHNlXG59XG5cbk9iamVjdC5hc3NpZ24oRGlzcGF0Y2hlci5wcm90b3R5cGUsIGFwaSlcblxubW9kdWxlLmV4cG9ydHMuRGlzcGF0Y2hlciA9IERpc3BhdGNoZXJcbm1vZHVsZS5leHBvcnRzLkNsaWVudCA9IENsaWVudFxubW9kdWxlLmV4cG9ydHMuUG9vbCA9IFBvb2xcbm1vZHVsZS5leHBvcnRzLkJhbGFuY2VkUG9vbCA9IEJhbGFuY2VkUG9vbFxubW9kdWxlLmV4cG9ydHMuQWdlbnQgPSBBZ2VudFxubW9kdWxlLmV4cG9ydHMuUHJveHlBZ2VudCA9IFByb3h5QWdlbnRcbm1vZHVsZS5leHBvcnRzLlJldHJ5SGFuZGxlciA9IFJldHJ5SGFuZGxlclxuXG5tb2R1bGUuZXhwb3J0cy5EZWNvcmF0b3JIYW5kbGVyID0gRGVjb3JhdG9ySGFuZGxlclxubW9kdWxlLmV4cG9ydHMuUmVkaXJlY3RIYW5kbGVyID0gUmVkaXJlY3RIYW5kbGVyXG5tb2R1bGUuZXhwb3J0cy5jcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yID0gY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvclxuXG5tb2R1bGUuZXhwb3J0cy5idWlsZENvbm5lY3RvciA9IGJ1aWxkQ29ubmVjdG9yXG5tb2R1bGUuZXhwb3J0cy5lcnJvcnMgPSBlcnJvcnNcblxuZnVuY3Rpb24gbWFrZURpc3BhdGNoZXIgKGZuKSB7XG4gIHJldHVybiAodXJsLCBvcHRzLCBoYW5kbGVyKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBoYW5kbGVyID0gb3B0c1xuICAgICAgb3B0cyA9IG51bGxcbiAgICB9XG5cbiAgICBpZiAoIXVybCB8fCAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycgJiYgdHlwZW9mIHVybCAhPT0gJ29iamVjdCcgJiYgISh1cmwgaW5zdGFuY2VvZiBVUkwpKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHVybCcpXG4gICAgfVxuXG4gICAgaWYgKG9wdHMgIT0gbnVsbCAmJiB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzJylcbiAgICB9XG5cbiAgICBpZiAob3B0cyAmJiBvcHRzLnBhdGggIT0gbnVsbCkge1xuICAgICAgaWYgKHR5cGVvZiBvcHRzLnBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzLnBhdGgnKVxuICAgICAgfVxuXG4gICAgICBsZXQgcGF0aCA9IG9wdHMucGF0aFxuICAgICAgaWYgKCFvcHRzLnBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgIHBhdGggPSBgLyR7cGF0aH1gXG4gICAgICB9XG5cbiAgICAgIHVybCA9IG5ldyBVUkwodXRpbC5wYXJzZU9yaWdpbih1cmwpLm9yaWdpbiArIHBhdGgpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghb3B0cykge1xuICAgICAgICBvcHRzID0gdHlwZW9mIHVybCA9PT0gJ29iamVjdCcgPyB1cmwgOiB7fVxuICAgICAgfVxuXG4gICAgICB1cmwgPSB1dGlsLnBhcnNlVVJMKHVybClcbiAgICB9XG5cbiAgICBjb25zdCB7IGFnZW50LCBkaXNwYXRjaGVyID0gZ2V0R2xvYmFsRGlzcGF0Y2hlcigpIH0gPSBvcHRzXG5cbiAgICBpZiAoYWdlbnQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgb3B0cy5hZ2VudC4gRGlkIHlvdSBtZWFuIG9wdHMuY2xpZW50PycpXG4gICAgfVxuXG4gICAgcmV0dXJuIGZuLmNhbGwoZGlzcGF0Y2hlciwge1xuICAgICAgLi4ub3B0cyxcbiAgICAgIG9yaWdpbjogdXJsLm9yaWdpbixcbiAgICAgIHBhdGg6IHVybC5zZWFyY2ggPyBgJHt1cmwucGF0aG5hbWV9JHt1cmwuc2VhcmNofWAgOiB1cmwucGF0aG5hbWUsXG4gICAgICBtZXRob2Q6IG9wdHMubWV0aG9kIHx8IChvcHRzLmJvZHkgPyAnUFVUJyA6ICdHRVQnKVxuICAgIH0sIGhhbmRsZXIpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMuc2V0R2xvYmFsRGlzcGF0Y2hlciA9IHNldEdsb2JhbERpc3BhdGNoZXJcbm1vZHVsZS5leHBvcnRzLmdldEdsb2JhbERpc3BhdGNoZXIgPSBnZXRHbG9iYWxEaXNwYXRjaGVyXG5cbmlmICh1dGlsLm5vZGVNYWpvciA+IDE2IHx8ICh1dGlsLm5vZGVNYWpvciA9PT0gMTYgJiYgdXRpbC5ub2RlTWlub3IgPj0gOCkpIHtcbiAgbGV0IGZldGNoSW1wbCA9IG51bGxcbiAgbW9kdWxlLmV4cG9ydHMuZmV0Y2ggPSBhc3luYyBmdW5jdGlvbiBmZXRjaCAocmVzb3VyY2UpIHtcbiAgICBpZiAoIWZldGNoSW1wbCkge1xuICAgICAgZmV0Y2hJbXBsID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gnKS5mZXRjaFxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgZmV0Y2hJbXBsKC4uLmFyZ3VtZW50cylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0eXBlb2YgZXJyID09PSAnb2JqZWN0Jykge1xuICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShlcnIsIHRoaXMpXG4gICAgICB9XG5cbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgfVxuICBtb2R1bGUuZXhwb3J0cy5IZWFkZXJzID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gvaGVhZGVycycpLkhlYWRlcnNcbiAgbW9kdWxlLmV4cG9ydHMuUmVzcG9uc2UgPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9yZXNwb25zZScpLlJlc3BvbnNlXG4gIG1vZHVsZS5leHBvcnRzLlJlcXVlc3QgPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9yZXF1ZXN0JykuUmVxdWVzdFxuICBtb2R1bGUuZXhwb3J0cy5Gb3JtRGF0YSA9IHJlcXVpcmUoJy4vbGliL2ZldGNoL2Zvcm1kYXRhJykuRm9ybURhdGFcbiAgbW9kdWxlLmV4cG9ydHMuRmlsZSA9IHJlcXVpcmUoJy4vbGliL2ZldGNoL2ZpbGUnKS5GaWxlXG4gIG1vZHVsZS5leHBvcnRzLkZpbGVSZWFkZXIgPSByZXF1aXJlKCcuL2xpYi9maWxlYXBpL2ZpbGVyZWFkZXInKS5GaWxlUmVhZGVyXG5cbiAgY29uc3QgeyBzZXRHbG9iYWxPcmlnaW4sIGdldEdsb2JhbE9yaWdpbiB9ID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gvZ2xvYmFsJylcblxuICBtb2R1bGUuZXhwb3J0cy5zZXRHbG9iYWxPcmlnaW4gPSBzZXRHbG9iYWxPcmlnaW5cbiAgbW9kdWxlLmV4cG9ydHMuZ2V0R2xvYmFsT3JpZ2luID0gZ2V0R2xvYmFsT3JpZ2luXG5cbiAgY29uc3QgeyBDYWNoZVN0b3JhZ2UgfSA9IHJlcXVpcmUoJy4vbGliL2NhY2hlL2NhY2hlc3RvcmFnZScpXG4gIGNvbnN0IHsga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi9saWIvY2FjaGUvc3ltYm9scycpXG5cbiAgLy8gQ2FjaGUgJiBDYWNoZVN0b3JhZ2UgYXJlIHRpZ2h0bHkgY291cGxlZCB3aXRoIGZldGNoLiBFdmVuIGlmIGl0IG1heSBydW5cbiAgLy8gaW4gYW4gb2xkZXIgdmVyc2lvbiBvZiBOb2RlLCBpdCBkb2Vzbid0IGhhdmUgYW55IHVzZSB3aXRob3V0IGZldGNoLlxuICBtb2R1bGUuZXhwb3J0cy5jYWNoZXMgPSBuZXcgQ2FjaGVTdG9yYWdlKGtDb25zdHJ1Y3QpXG59XG5cbmlmICh1dGlsLm5vZGVNYWpvciA+PSAxNikge1xuICBjb25zdCB7IGRlbGV0ZUNvb2tpZSwgZ2V0Q29va2llcywgZ2V0U2V0Q29va2llcywgc2V0Q29va2llIH0gPSByZXF1aXJlKCcuL2xpYi9jb29raWVzJylcblxuICBtb2R1bGUuZXhwb3J0cy5kZWxldGVDb29raWUgPSBkZWxldGVDb29raWVcbiAgbW9kdWxlLmV4cG9ydHMuZ2V0Q29va2llcyA9IGdldENvb2tpZXNcbiAgbW9kdWxlLmV4cG9ydHMuZ2V0U2V0Q29va2llcyA9IGdldFNldENvb2tpZXNcbiAgbW9kdWxlLmV4cG9ydHMuc2V0Q29va2llID0gc2V0Q29va2llXG5cbiAgY29uc3QgeyBwYXJzZU1JTUVUeXBlLCBzZXJpYWxpemVBTWltZVR5cGUgfSA9IHJlcXVpcmUoJy4vbGliL2ZldGNoL2RhdGFVUkwnKVxuXG4gIG1vZHVsZS5leHBvcnRzLnBhcnNlTUlNRVR5cGUgPSBwYXJzZU1JTUVUeXBlXG4gIG1vZHVsZS5leHBvcnRzLnNlcmlhbGl6ZUFNaW1lVHlwZSA9IHNlcmlhbGl6ZUFNaW1lVHlwZVxufVxuXG5pZiAodXRpbC5ub2RlTWFqb3IgPj0gMTggJiYgaGFzQ3J5cHRvKSB7XG4gIGNvbnN0IHsgV2ViU29ja2V0IH0gPSByZXF1aXJlKCcuL2xpYi93ZWJzb2NrZXQvd2Vic29ja2V0JylcblxuICBtb2R1bGUuZXhwb3J0cy5XZWJTb2NrZXQgPSBXZWJTb2NrZXRcbn1cblxubW9kdWxlLmV4cG9ydHMucmVxdWVzdCA9IG1ha2VEaXNwYXRjaGVyKGFwaS5yZXF1ZXN0KVxubW9kdWxlLmV4cG9ydHMuc3RyZWFtID0gbWFrZURpc3BhdGNoZXIoYXBpLnN0cmVhbSlcbm1vZHVsZS5leHBvcnRzLnBpcGVsaW5lID0gbWFrZURpc3BhdGNoZXIoYXBpLnBpcGVsaW5lKVxubW9kdWxlLmV4cG9ydHMuY29ubmVjdCA9IG1ha2VEaXNwYXRjaGVyKGFwaS5jb25uZWN0KVxubW9kdWxlLmV4cG9ydHMudXBncmFkZSA9IG1ha2VEaXNwYXRjaGVyKGFwaS51cGdyYWRlKVxuXG5tb2R1bGUuZXhwb3J0cy5Nb2NrQ2xpZW50ID0gTW9ja0NsaWVudFxubW9kdWxlLmV4cG9ydHMuTW9ja1Bvb2wgPSBNb2NrUG9vbFxubW9kdWxlLmV4cG9ydHMuTW9ja0FnZW50ID0gTW9ja0FnZW50XG5tb2R1bGUuZXhwb3J0cy5tb2NrRXJyb3JzID0gbW9ja0Vycm9yc1xuIiwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBOdWxsT2JqZWN0ID0gZnVuY3Rpb24gTnVsbE9iamVjdCAoKSB7IH1cbk51bGxPYmplY3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuXG4vKipcbiAqIFJlZ0V4cCB0byBtYXRjaCAqKCBcIjtcIiBwYXJhbWV0ZXIgKSBpbiBSRkMgNzIzMSBzZWMgMy4xLjEuMVxuICpcbiAqIHBhcmFtZXRlciAgICAgPSB0b2tlbiBcIj1cIiAoIHRva2VuIC8gcXVvdGVkLXN0cmluZyApXG4gKiB0b2tlbiAgICAgICAgID0gMSp0Y2hhclxuICogdGNoYXIgICAgICAgICA9IFwiIVwiIC8gXCIjXCIgLyBcIiRcIiAvIFwiJVwiIC8gXCImXCIgLyBcIidcIiAvIFwiKlwiXG4gKiAgICAgICAgICAgICAgIC8gXCIrXCIgLyBcIi1cIiAvIFwiLlwiIC8gXCJeXCIgLyBcIl9cIiAvIFwiYFwiIC8gXCJ8XCIgLyBcIn5cIlxuICogICAgICAgICAgICAgICAvIERJR0lUIC8gQUxQSEFcbiAqICAgICAgICAgICAgICAgOyBhbnkgVkNIQVIsIGV4Y2VwdCBkZWxpbWl0ZXJzXG4gKiBxdW90ZWQtc3RyaW5nID0gRFFVT1RFICooIHFkdGV4dCAvIHF1b3RlZC1wYWlyICkgRFFVT1RFXG4gKiBxZHRleHQgICAgICAgID0gSFRBQiAvIFNQIC8gJXgyMSAvICV4MjMtNUIgLyAleDVELTdFIC8gb2JzLXRleHRcbiAqIG9icy10ZXh0ICAgICAgPSAleDgwLUZGXG4gKiBxdW90ZWQtcGFpciAgID0gXCJcXFwiICggSFRBQiAvIFNQIC8gVkNIQVIgLyBvYnMtdGV4dCApXG4gKi9cbmNvbnN0IHBhcmFtUkUgPSAvOyAqKFshIyQlJicqKy5eXFx3YHx+LV0rKT0oXCIoPzpbXFx2XFx1MDAyMFxcdTAwMjFcXHUwMDIzLVxcdTAwNWJcXHUwMDVkLVxcdTAwN2VcXHUwMDgwLVxcdTAwZmZdfFxcXFxbXFx2XFx1MDAyMC1cXHUwMGZmXSkqXCJ8WyEjJCUmJyorLl5cXHdgfH4tXSspICovZ3VcblxuLyoqXG4gKiBSZWdFeHAgdG8gbWF0Y2ggcXVvdGVkLXBhaXIgaW4gUkZDIDcyMzAgc2VjIDMuMi42XG4gKlxuICogcXVvdGVkLXBhaXIgPSBcIlxcXCIgKCBIVEFCIC8gU1AgLyBWQ0hBUiAvIG9icy10ZXh0IClcbiAqIG9icy10ZXh0ICAgID0gJXg4MC1GRlxuICovXG5jb25zdCBxdW90ZWRQYWlyUkUgPSAvXFxcXChbXFx2XFx1MDAyMC1cXHUwMGZmXSkvZ3VcblxuLyoqXG4gKiBSZWdFeHAgdG8gbWF0Y2ggdHlwZSBpbiBSRkMgNzIzMSBzZWMgMy4xLjEuMVxuICpcbiAqIG1lZGlhLXR5cGUgPSB0eXBlIFwiL1wiIHN1YnR5cGVcbiAqIHR5cGUgICAgICAgPSB0b2tlblxuICogc3VidHlwZSAgICA9IHRva2VuXG4gKi9cbmNvbnN0IG1lZGlhVHlwZVJFID0gL15bISMkJSYnKisuXlxcd3x+LV0rXFwvWyEjJCUmJyorLl5cXHd8fi1dKyQvdVxuXG4vLyBkZWZhdWx0IENvbnRlbnRUeXBlIHRvIHByZXZlbnQgcmVwZWF0ZWQgb2JqZWN0IGNyZWF0aW9uXG5jb25zdCBkZWZhdWx0Q29udGVudFR5cGUgPSB7IHR5cGU6ICcnLCBwYXJhbWV0ZXJzOiBuZXcgTnVsbE9iamVjdCgpIH1cbk9iamVjdC5mcmVlemUoZGVmYXVsdENvbnRlbnRUeXBlLnBhcmFtZXRlcnMpXG5PYmplY3QuZnJlZXplKGRlZmF1bHRDb250ZW50VHlwZSlcblxuLyoqXG4gKiBQYXJzZSBtZWRpYSB0eXBlIHRvIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IGhlYWRlclxuICogQHJldHVybiB7T2JqZWN0fVxuICogQHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIHBhcnNlIChoZWFkZXIpIHtcbiAgaWYgKHR5cGVvZiBoZWFkZXIgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgaGVhZGVyIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGEgc3RyaW5nJylcbiAgfVxuXG4gIGxldCBpbmRleCA9IGhlYWRlci5pbmRleE9mKCc7JylcbiAgY29uc3QgdHlwZSA9IGluZGV4ICE9PSAtMVxuICAgID8gaGVhZGVyLnNsaWNlKDAsIGluZGV4KS50cmltKClcbiAgICA6IGhlYWRlci50cmltKClcblxuICBpZiAobWVkaWFUeXBlUkUudGVzdCh0eXBlKSA9PT0gZmFsc2UpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIG1lZGlhIHR5cGUnKVxuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIHR5cGU6IHR5cGUudG9Mb3dlckNhc2UoKSxcbiAgICBwYXJhbWV0ZXJzOiBuZXcgTnVsbE9iamVjdCgpXG4gIH1cblxuICAvLyBwYXJzZSBwYXJhbWV0ZXJzXG4gIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBsZXQga2V5XG4gIGxldCBtYXRjaFxuICBsZXQgdmFsdWVcblxuICBwYXJhbVJFLmxhc3RJbmRleCA9IGluZGV4XG5cbiAgd2hpbGUgKChtYXRjaCA9IHBhcmFtUkUuZXhlYyhoZWFkZXIpKSkge1xuICAgIGlmIChtYXRjaC5pbmRleCAhPT0gaW5kZXgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgcGFyYW1ldGVyIGZvcm1hdCcpXG4gICAgfVxuXG4gICAgaW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoXG4gICAga2V5ID0gbWF0Y2hbMV0udG9Mb3dlckNhc2UoKVxuICAgIHZhbHVlID0gbWF0Y2hbMl1cblxuICAgIGlmICh2YWx1ZVswXSA9PT0gJ1wiJykge1xuICAgICAgLy8gcmVtb3ZlIHF1b3RlcyBhbmQgZXNjYXBlc1xuICAgICAgdmFsdWUgPSB2YWx1ZVxuICAgICAgICAuc2xpY2UoMSwgdmFsdWUubGVuZ3RoIC0gMSlcblxuICAgICAgcXVvdGVkUGFpclJFLnRlc3QodmFsdWUpICYmICh2YWx1ZSA9IHZhbHVlLnJlcGxhY2UocXVvdGVkUGFpclJFLCAnJDEnKSlcbiAgICB9XG5cbiAgICByZXN1bHQucGFyYW1ldGVyc1trZXldID0gdmFsdWVcbiAgfVxuXG4gIGlmIChpbmRleCAhPT0gaGVhZGVyLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgcGFyYW1ldGVyIGZvcm1hdCcpXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbmZ1bmN0aW9uIHNhZmVQYXJzZSAoaGVhZGVyKSB7XG4gIGlmICh0eXBlb2YgaGVhZGVyICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkZWZhdWx0Q29udGVudFR5cGVcbiAgfVxuXG4gIGxldCBpbmRleCA9IGhlYWRlci5pbmRleE9mKCc7JylcbiAgY29uc3QgdHlwZSA9IGluZGV4ICE9PSAtMVxuICAgID8gaGVhZGVyLnNsaWNlKDAsIGluZGV4KS50cmltKClcbiAgICA6IGhlYWRlci50cmltKClcblxuICBpZiAobWVkaWFUeXBlUkUudGVzdCh0eXBlKSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZGVmYXVsdENvbnRlbnRUeXBlXG4gIH1cblxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgdHlwZTogdHlwZS50b0xvd2VyQ2FzZSgpLFxuICAgIHBhcmFtZXRlcnM6IG5ldyBOdWxsT2JqZWN0KClcbiAgfVxuXG4gIC8vIHBhcnNlIHBhcmFtZXRlcnNcbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGxldCBrZXlcbiAgbGV0IG1hdGNoXG4gIGxldCB2YWx1ZVxuXG4gIHBhcmFtUkUubGFzdEluZGV4ID0gaW5kZXhcblxuICB3aGlsZSAoKG1hdGNoID0gcGFyYW1SRS5leGVjKGhlYWRlcikpKSB7XG4gICAgaWYgKG1hdGNoLmluZGV4ICE9PSBpbmRleCkge1xuICAgICAgcmV0dXJuIGRlZmF1bHRDb250ZW50VHlwZVxuICAgIH1cblxuICAgIGluZGV4ICs9IG1hdGNoWzBdLmxlbmd0aFxuICAgIGtleSA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKClcbiAgICB2YWx1ZSA9IG1hdGNoWzJdXG5cbiAgICBpZiAodmFsdWVbMF0gPT09ICdcIicpIHtcbiAgICAgIC8vIHJlbW92ZSBxdW90ZXMgYW5kIGVzY2FwZXNcbiAgICAgIHZhbHVlID0gdmFsdWVcbiAgICAgICAgLnNsaWNlKDEsIHZhbHVlLmxlbmd0aCAtIDEpXG5cbiAgICAgIHF1b3RlZFBhaXJSRS50ZXN0KHZhbHVlKSAmJiAodmFsdWUgPSB2YWx1ZS5yZXBsYWNlKHF1b3RlZFBhaXJSRSwgJyQxJykpXG4gICAgfVxuXG4gICAgcmVzdWx0LnBhcmFtZXRlcnNba2V5XSA9IHZhbHVlXG4gIH1cblxuICBpZiAoaW5kZXggIT09IGhlYWRlci5sZW5ndGgpIHtcbiAgICByZXR1cm4gZGVmYXVsdENvbnRlbnRUeXBlXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSB7IHBhcnNlLCBzYWZlUGFyc2UgfVxubW9kdWxlLmV4cG9ydHMucGFyc2UgPSBwYXJzZVxubW9kdWxlLmV4cG9ydHMuc2FmZVBhcnNlID0gc2FmZVBhcnNlXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0Q29udGVudFR5cGUgPSBkZWZhdWx0Q29udGVudFR5cGVcbiIsICJpbXBvcnQgeyBDb21tYW5kLCBPcHRpb24gfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0ICogYXMgb3MgZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHBrZyBmcm9tIFwiLi4vcGFja2FnZS5qc29uXCIgYXNzZXJ0IHsgdHlwZTogXCJqc29uXCIgfTtcblxuaW1wb3J0IHsgcmVhZFNlcnZlckluZm8gfSBmcm9tIFwiLi9yZWFkU2VydmVySW5mb1wiO1xuaW1wb3J0IHtcbiAgU2FuZGJveE1vZGUsXG4gIE91dHB1dFNjaGVtYVNvdXJjZSxcbiAgUHJvbXB0U291cmNlLFxuICBydW5Db2RleEV4ZWMsXG4gIFNhZmV0eVN0cmF0ZWd5LFxufSBmcm9tIFwiLi9ydW5Db2RleEV4ZWNcIjtcbmltcG9ydCB7IGRyb3BTdWRvIH0gZnJvbSBcIi4vZHJvcFN1ZG9cIjtcbmltcG9ydCB7IGVuc3VyZUFjdG9ySGFzV3JpdGVBY2Nlc3MgfSBmcm9tIFwiLi9jaGVja0FjdG9yUGVybWlzc2lvbnNcIjtcbmltcG9ydCBwYXJzZUFyZ3NTdHJpbmdUb0FyZ3YgZnJvbSBcInN0cmluZy1hcmd2XCI7XG5pbXBvcnQgeyB3cml0ZVByb3h5Q29uZmlnIH0gZnJvbSBcIi4vd3JpdGVQcm94eUNvbmZpZ1wiO1xuaW1wb3J0IHsgY2hlY2tPdXRwdXQgfSBmcm9tIFwiLi9jaGVja091dHB1dFwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcbiAgY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kKCk7XG5cbiAgcHJvZ3JhbVxuICAgIC5uYW1lKFwiY29kZXgtYWN0aW9uXCIpXG4gICAgLnZlcnNpb24ocGtnLnZlcnNpb24pXG4gICAgLmRlc2NyaXB0aW9uKFwiTXVsdGl0b29sIHRvIHN1cHBvcnQgb3BlbmFpL2NvZGV4LWFjdGlvbi5cIik7XG5cbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKFwicmVhZC1zZXJ2ZXItaW5mb1wiKVxuICAgIC5kZXNjcmlwdGlvbihcIlJlYWQgc2VydmVyIGluZm8gZnJvbSB0aGUgcmVzcG9uc2VzIEFQSSBwcm94eVwiKVxuICAgIC5hcmd1bWVudChcIjxzZXJ2ZXJJbmZvRmlsZT5cIiwgXCJQYXRoIHRvIHRoZSBzZXJ2ZXIgaW5mbyBmaWxlXCIpXG4gICAgLmFjdGlvbihhc3luYyAoc2VydmVySW5mb0ZpbGU6IHN0cmluZykgPT4ge1xuICAgICAgYXdhaXQgcmVhZFNlcnZlckluZm8oc2VydmVySW5mb0ZpbGUpO1xuICAgIH0pO1xuXG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChcInJlc29sdmUtY29kZXgtaG9tZVwiKVxuICAgIC5kZXNjcmlwdGlvbihcbiAgICAgIFwiUmVzb2x2ZSB0aGUgQ29kZXggaG9tZSBkaXJlY3Rvcnkgd2l0aCBwcmVjZWRlbmNlOiBpbnB1dCwgZW52LCBkZWZhdWx0ICh+Ly5jb2RleClcIlxuICAgIClcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tY29kZXgtaG9tZS1vdmVycmlkZSA8RElSRUNUT1JZPlwiLFxuICAgICAgXCJPcHRpb25hbCBjb2RleC1ob21lIGlucHV0IHZhbHVlIChtYXkgYmUgZW1wdHkpXCJcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFxuICAgICAgXCItLXNhZmV0eS1zdHJhdGVneSA8c3RyYXRlZ3k+XCIsXG4gICAgICBcIlNhZmV0eSBzdHJhdGVneSB0byB0YWtlIGludG8gYWNjb3VudCB3aGVuIHBpY2tpbmcgZGVmYXVsdHNcIlxuICAgIClcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tY29kZXgtdXNlciA8dXNlcj5cIixcbiAgICAgIFwiQ29kZXggdXNlciB0byBjb25zaWRlciB3aGVuIHNhZmV0eSBzdHJhdGVneSBpcyAndW5wcml2aWxlZ2VkLXVzZXInXCJcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFwiLS1naXRodWItcnVuLWlkIDxpZD5cIiwgXCJHaXRIdWIgcnVuIElEXCIpXG4gICAgLmFjdGlvbihcbiAgICAgIGFzeW5jIChvcHRpb25zOiB7XG4gICAgICAgIGNvZGV4SG9tZU92ZXJyaWRlOiBzdHJpbmc7XG4gICAgICAgIHNhZmV0eVN0cmF0ZWd5OiBzdHJpbmc7XG4gICAgICAgIGNvZGV4VXNlcjogc3RyaW5nO1xuICAgICAgICBnaXRodWJSdW5JZDogc3RyaW5nO1xuICAgICAgfSkgPT4ge1xuICAgICAgICBjb25zdCBzYWZldHlTdHJhdGVneSA9IHRvU2FmZXR5U3RyYXRlZ3kob3B0aW9ucy5zYWZldHlTdHJhdGVneSk7XG4gICAgICAgIGNvbnN0IGNvZGV4VXNlciA9IGVtcHR5QXNOdWxsKG9wdGlvbnMuY29kZXhVc2VyKTtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSBhd2FpdCByZXNvbHZlQ29kZXhIb21lKFxuICAgICAgICAgIGVtcHR5QXNOdWxsKG9wdGlvbnMuY29kZXhIb21lT3ZlcnJpZGUpLFxuICAgICAgICAgIHNhZmV0eVN0cmF0ZWd5LFxuICAgICAgICAgIGNvZGV4VXNlcixcbiAgICAgICAgICBvcHRpb25zLmdpdGh1YlJ1bklkXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgeyBzZXRPdXRwdXQgfSA9IGF3YWl0IGltcG9ydChcIkBhY3Rpb25zL2NvcmVcIik7XG4gICAgICAgIHNldE91dHB1dChcImNvZGV4LWhvbWVcIiwgcmVzb2x2ZWQpO1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVzb2x2ZWQgQ29kZXggaG9tZTogJHtyZXNvbHZlZH1gKTtcbiAgICAgIH1cbiAgICApO1xuXG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChcIndyaXRlLXByb3h5LWNvbmZpZ1wiKVxuICAgIC5kZXNjcmlwdGlvbihcbiAgICAgIFwiV3JpdGUgdGhlIE9wZW5BSSBQcm94eSBtb2RlbCBwcm92aWRlciBjb25maWcgaW50byBDT0RFWF9IT01FL2NvbmZpZy50b21sXCJcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFwiLS1jb2RleC1ob21lIDxESVJFQ1RPUlk+XCIsIFwiUGF0aCB0byBDb2RleCBob21lIGRpcmVjdG9yeVwiKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcIi0tcG9ydCA8cG9ydD5cIiwgXCJQcm94eSBzZXJ2ZXIgcG9ydFwiLCBwYXJzZUludFN0cmljdClcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tc2FmZXR5LXN0cmF0ZWd5IDxzdHJhdGVneT5cIixcbiAgICAgIFwiU2FmZXR5IHN0cmF0ZWd5IHRvIHVzZS4gT25lIG9mICdkcm9wLXN1ZG8nLCAncmVhZC1vbmx5JywgJ3VucHJpdmlsZWdlZC11c2VyJywgb3IgJ3Vuc2FmZScuXCJcbiAgICApXG4gICAgLmFjdGlvbihcbiAgICAgIGFzeW5jIChvcHRpb25zOiB7XG4gICAgICAgIGNvZGV4SG9tZTogc3RyaW5nO1xuICAgICAgICBwb3J0OiBudW1iZXI7XG4gICAgICAgIHNhZmV0eVN0cmF0ZWd5OiBzdHJpbmc7XG4gICAgICB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHNhZmV0eVN0cmF0ZWd5ID0gdG9TYWZldHlTdHJhdGVneShvcHRpb25zLnNhZmV0eVN0cmF0ZWd5KTtcbiAgICAgICAgYXdhaXQgd3JpdGVQcm94eUNvbmZpZyhvcHRpb25zLmNvZGV4SG9tZSwgb3B0aW9ucy5wb3J0LCBzYWZldHlTdHJhdGVneSk7XG4gICAgICB9XG4gICAgKTtcblxuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoXCJkcm9wLXN1ZG9cIilcbiAgICAuZGVzY3JpcHRpb24oXCJEcm9wcyBzdWRvIHByaXZpbGVnZXMgZm9yIHRoZSBjb25maWd1cmVkIHVzZXIuXCIpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKFwiLS11c2VyIDx1c2VyPlwiLCBcIlVzZXIgdG8gbW9kaWZ5XCIpLmRlZmF1bHQoXCJydW5uZXJcIikpXG4gICAgLmFkZE9wdGlvbihcbiAgICAgIG5ldyBPcHRpb24oXCItLWdyb3VwIDxncm91cD5cIiwgXCJHcm91cCBncmFudGluZyBzdWRvIHByaXZpbGVnZXNcIikuZGVmYXVsdChcbiAgICAgICAgXCJzdWRvXCJcbiAgICAgIClcbiAgICApXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKFwiLS1yb290LXBoYXNlXCIsIFwiaW50ZXJuYWxcIikuZGVmYXVsdChmYWxzZSkuaGlkZUhlbHAoKSlcbiAgICAuYWN0aW9uKFxuICAgICAgYXN5bmMgKG9wdGlvbnM6IHsgdXNlcjogc3RyaW5nOyBncm91cDogc3RyaW5nOyByb290UGhhc2U6IGJvb2xlYW4gfSkgPT4ge1xuICAgICAgICBhd2FpdCBkcm9wU3Vkbyh7XG4gICAgICAgICAgdXNlcjogb3B0aW9ucy51c2VyLFxuICAgICAgICAgIGdyb3VwOiBvcHRpb25zLmdyb3VwLFxuICAgICAgICAgIHJvb3RQaGFzZTogb3B0aW9ucy5yb290UGhhc2UsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICk7XG5cbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKFwicnVuLWNvZGV4LWV4ZWNcIilcbiAgICAuZGVzY3JpcHRpb24oXCJJbnZva2VzIGBjb2RleCBleGVjYCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBhcmd1bWVudHNcIilcbiAgICAucmVxdWlyZWRPcHRpb24oXCItLXByb21wdCA8cHJvbXB0PlwiLCBcIlByb21wdCB0byBwYXNzIHRvIGBjb2RleCBleGVjYC5cIilcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tcHJvbXB0LWZpbGUgPEZJTEU+XCIsXG4gICAgICBcIkZpbGUgY29udGFpbmluZyB0aGUgcHJvbXB0IHRvIHBhc3MgdG8gYGNvZGV4IGV4ZWNgLlwiXG4gICAgKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcbiAgICAgIFwiLS1jb2RleC1ob21lIDxESVJFQ1RPUlk+XCIsXG4gICAgICBcIlBhdGggdG8gdGhlIENvZGV4IENMSSBob21lIGRpcmVjdG9yeSAod2hlcmUgY29uZmlnIGZpbGVzIGFyZSBzdG9yZWQpLlwiXG4gICAgKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcIi0tY2QgPERJUkVDVE9SWT5cIiwgXCJXb3JraW5nIGRpcmVjdG9yeSBmb3IgQ29kZXhcIilcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tZXh0cmEtYXJncyA8YXJncz5cIixcbiAgICAgIFwiQWRkaXRpb25hbCBhcmdzIHRvIHBhc3MgdGhyb3VnaCB0byBgY29kZXggZXhlY2AgYXMgSlNPTiBhcnJheSBvciBzaGVsbCBzdHJpbmcuXCIsXG4gICAgICBwYXJzZUV4dHJhQXJnc1xuICAgIClcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tb3V0cHV0LWZpbGUgPEZJTEU+XCIsXG4gICAgICBcIlBhdGggd2hlcmUgdGhlIGZpbmFsIG1lc3NhZ2UgZnJvbSBgY29kZXggZXhlY2Agd2lsbCBiZSB3cml0dGVuLlwiXG4gICAgKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcbiAgICAgIFwiLS1vdXRwdXQtc2NoZW1hLWZpbGUgPEZJTEU+XCIsXG4gICAgICBcIlBhdGggdG8gYSBzY2hlbWEgZmlsZSB0byBwYXNzIHRvIGBjb2RleCBleGVjIC0tb3V0cHV0LXNjaGVtYWAuXCJcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFxuICAgICAgXCItLW91dHB1dC1zY2hlbWEgPFNDSEVNQT5cIixcbiAgICAgIFwiSW5saW5lIHNjaGVtYSBjb250ZW50cyB0byBwYXNzIHRvIGBjb2RleCBleGVjIC0tb3V0cHV0LXNjaGVtYWAuXCJcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFxuICAgICAgXCItLXNhbmRib3ggPFNBTkRCT1g+XCIsXG4gICAgICBcIlNhbmRib3ggbW9kZSBvdmVycmlkZSB0byBwYXNzIHRvIGBjb2RleCBleGVjYC5cIlxuICAgIClcbiAgICAucmVxdWlyZWRPcHRpb24oXCItLW1vZGVsIDxtb2RlbD5cIiwgXCJNb2RlbCB0aGUgYWdlbnQgc2hvdWxkIHVzZVwiKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcIi0tZWZmb3J0IDxlZmZvcnQ+XCIsIFwiUmVhc29uaW5nIGVmZm9ydCB0aGUgYWdlbnQgc2hvdWxkIHVzZVwiKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcbiAgICAgIFwiLS1zYWZldHktc3RyYXRlZ3kgPHN0cmF0ZWd5PlwiLFxuICAgICAgXCJTYWZldHkgc3RyYXRlZ3kgdG8gdXNlLiBPbmUgb2YgJ2Ryb3Atc3VkbycsICdyZWFkLW9ubHknLCAndW5wcml2aWxlZ2VkLXVzZXInLCBvciAndW5zYWZlJy5cIlxuICAgIClcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tY29kZXgtdXNlciA8dXNlcj5cIixcbiAgICAgIFwiVXNlciB0byBydW4gY29kZXggZXhlYyBhcyB3aGVuIHVzaW5nIHRoZSAndW5wcml2aWxlZ2VkLXVzZXInIHNhZmV0eSBzdHJhdGVneS5cIlxuICAgIClcbiAgICAuYWN0aW9uKFxuICAgICAgYXN5bmMgKG9wdGlvbnM6IHtcbiAgICAgICAgcHJvbXB0OiBzdHJpbmc7XG4gICAgICAgIHByb21wdEZpbGU6IHN0cmluZztcbiAgICAgICAgY29kZXhIb21lOiBzdHJpbmc7XG4gICAgICAgIGNkOiBzdHJpbmc7XG4gICAgICAgIGV4dHJhQXJnczogQXJyYXk8c3RyaW5nPjtcbiAgICAgICAgb3V0cHV0RmlsZTogc3RyaW5nO1xuICAgICAgICBvdXRwdXRTY2hlbWFGaWxlOiBzdHJpbmc7XG4gICAgICAgIG91dHB1dFNjaGVtYTogc3RyaW5nO1xuICAgICAgICBzYW5kYm94OiBzdHJpbmc7XG4gICAgICAgIG1vZGVsOiBzdHJpbmc7XG4gICAgICAgIGVmZm9ydDogc3RyaW5nO1xuICAgICAgICBzYWZldHlTdHJhdGVneTogc3RyaW5nO1xuICAgICAgICBjb2RleFVzZXI6IHN0cmluZztcbiAgICAgIH0pID0+IHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHByb21wdCxcbiAgICAgICAgICBwcm9tcHRGaWxlLFxuICAgICAgICAgIG91dHB1dEZpbGUsXG4gICAgICAgICAgY29kZXhIb21lLFxuICAgICAgICAgIGNkLFxuICAgICAgICAgIGV4dHJhQXJncyxcbiAgICAgICAgICBvdXRwdXRTY2hlbWEsXG4gICAgICAgICAgb3V0cHV0U2NoZW1hRmlsZSxcbiAgICAgICAgICBzYW5kYm94LFxuICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgIGVmZm9ydCxcbiAgICAgICAgICBzYWZldHlTdHJhdGVneSxcbiAgICAgICAgICBjb2RleFVzZXIsXG4gICAgICAgIH0gPSBvcHRpb25zO1xuXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQcm9tcHQgPSBlbXB0eUFzTnVsbChwcm9tcHQpO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkUHJvbXB0RmlsZSA9IGVtcHR5QXNOdWxsKHByb21wdEZpbGUpO1xuICAgICAgICBpZiAobm9ybWFsaXplZFByb21wdCAhPSBudWxsICYmIG5vcm1hbGl6ZWRQcm9tcHRGaWxlICE9IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIk9ubHkgb25lIG9mIGBwcm9tcHRgIG9yIGBwcm9tcHQtZmlsZWAgbWF5IGJlIHNwZWNpZmllZC5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcHJvbXB0U291cmNlOiBQcm9tcHRTb3VyY2U7XG4gICAgICAgIGlmIChub3JtYWxpemVkUHJvbXB0ICE9IG51bGwpIHtcbiAgICAgICAgICBwcm9tcHRTb3VyY2UgPSB7IHR5cGU6IFwiaW5saW5lXCIsIGNvbnRlbnQ6IG5vcm1hbGl6ZWRQcm9tcHQgfTtcbiAgICAgICAgfSBlbHNlIGlmIChub3JtYWxpemVkUHJvbXB0RmlsZSAhPSBudWxsKSB7XG4gICAgICAgICAgcHJvbXB0U291cmNlID0geyB0eXBlOiBcImZpbGVcIiwgcGF0aDogbm9ybWFsaXplZFByb21wdEZpbGUgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIkVpdGhlciBgcHJvbXB0YCBvciBgcHJvbXB0LWZpbGVgIG11c3QgYmUgc3BlY2lmaWVkLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEN1c3RvbSBvcHRpb24gcHJvY2Vzc2luZyB0byBjb2VyY2VzIHRvIG51bGwgZG9lcyBub3Qgd29yayB3aXRoXG4gICAgICAgIC8vIENvbW1hbmRlci5qcydzIHJlcXVpcmVkT3B0aW9uLCBzbyB3ZSBoYXZlIHRvIHBvc3QtcHJvY2VzcyBoZXJlLlxuICAgICAgICBjb25zdCBub3JtYWxpemVkT3V0cHV0U2NoZW1hRmlsZSA9IGVtcHR5QXNOdWxsKG91dHB1dFNjaGVtYUZpbGUpO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkT3V0cHV0U2NoZW1hID0gZW1wdHlBc051bGwob3V0cHV0U2NoZW1hKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgbm9ybWFsaXplZE91dHB1dFNjaGVtYUZpbGUgIT0gbnVsbCAmJlxuICAgICAgICAgIG5vcm1hbGl6ZWRPdXRwdXRTY2hlbWEgIT0gbnVsbFxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIk9ubHkgb25lIG9mIGBvdXRwdXQtc2NoZW1hYCBvciBgb3V0cHV0LXNjaGVtYS1maWxlYCBtYXkgYmUgc3BlY2lmaWVkLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBvdXRwdXRTY2hlbWFTb3VyY2U6IE91dHB1dFNjaGVtYVNvdXJjZSB8IG51bGwgPSBudWxsO1xuICAgICAgICBpZiAobm9ybWFsaXplZE91dHB1dFNjaGVtYSAhPSBudWxsKSB7XG4gICAgICAgICAgb3V0cHV0U2NoZW1hU291cmNlID0ge1xuICAgICAgICAgICAgdHlwZTogXCJpbmxpbmVcIixcbiAgICAgICAgICAgIGNvbnRlbnQ6IG5vcm1hbGl6ZWRPdXRwdXRTY2hlbWEsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChub3JtYWxpemVkT3V0cHV0U2NoZW1hRmlsZSAhPSBudWxsKSB7XG4gICAgICAgICAgb3V0cHV0U2NoZW1hU291cmNlID0ge1xuICAgICAgICAgICAgdHlwZTogXCJmaWxlXCIsXG4gICAgICAgICAgICBwYXRoOiBub3JtYWxpemVkT3V0cHV0U2NoZW1hRmlsZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgcnVuQ29kZXhFeGVjKHtcbiAgICAgICAgICBwcm9tcHQ6IHByb21wdFNvdXJjZSxcbiAgICAgICAgICBjb2RleEhvbWU6IGVtcHR5QXNOdWxsKGNvZGV4SG9tZSksXG4gICAgICAgICAgY2QsXG4gICAgICAgICAgZXh0cmFBcmdzLFxuICAgICAgICAgIGV4cGxpY2l0T3V0cHV0RmlsZTogZW1wdHlBc051bGwob3V0cHV0RmlsZSksXG4gICAgICAgICAgb3V0cHV0U2NoZW1hOiBvdXRwdXRTY2hlbWFTb3VyY2UsXG4gICAgICAgICAgc2FuZGJveDogdG9TYW5kYm94TW9kZShzYW5kYm94KSxcbiAgICAgICAgICBtb2RlbDogZW1wdHlBc051bGwobW9kZWwpLFxuICAgICAgICAgIGVmZm9ydDogZW1wdHlBc051bGwoZWZmb3J0KSxcbiAgICAgICAgICBzYWZldHlTdHJhdGVneTogdG9TYWZldHlTdHJhdGVneShzYWZldHlTdHJhdGVneSksXG4gICAgICAgICAgY29kZXhVc2VyOiBlbXB0eUFzTnVsbChjb2RleFVzZXIpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICApO1xuXG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChcImNoZWNrLXdyaXRlLWFjY2Vzc1wiKVxuICAgIC5kZXNjcmlwdGlvbihcbiAgICAgIFwiQ2hlY2tzIHRoYXQgdGhlIHRyaWdnZXJpbmcgYWN0b3IgaGFzIHdyaXRlIGFjY2VzcyB0byB0aGUgcmVwb3NpdG9yeVwiXG4gICAgKVxuICAgIC5vcHRpb24oXG4gICAgICBcIi0tYWxsb3ctYm90cyA8Ym9vbGVhbj5cIixcbiAgICAgIFwiQWxsb3cgR2l0SHViIEFwcCBhbmQgYm90IGFjdG9ycyB0byBieXBhc3MgdGhlIHdyaXRlLWFjY2VzcyBjaGVjayAoZGVmYXVsdDogdHJ1ZSkuXCIsXG4gICAgICBwYXJzZUJvb2xlYW4sXG4gICAgICB0cnVlXG4gICAgKVxuICAgIC5vcHRpb24oXG4gICAgICBcIi0tYWxsb3ctdXNlcnMgPHVzZXJzPlwiLFxuICAgICAgXCJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBHaXRIdWIgdXNlcm5hbWVzIHdobyBjYW4gcnVuIHRoaXMgYWN0aW9uLCBvciAnKicgdG8gYWxsb3cgYWxsIHVzZXJzLlwiLFxuICAgICAgXCJcIlxuICAgIClcbiAgICAuYWN0aW9uKFxuICAgICAgYXN5bmMgKHtcbiAgICAgICAgYWxsb3dCb3RzLFxuICAgICAgICBhbGxvd1VzZXJzLFxuICAgICAgfToge1xuICAgICAgICBhbGxvd0JvdHM6IGJvb2xlYW47XG4gICAgICAgIGFsbG93VXNlcnM6IHN0cmluZztcbiAgICAgIH0pID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZW5zdXJlQWN0b3JIYXNXcml0ZUFjY2Vzcyh7XG4gICAgICAgICAgYWxsb3dCb3RBY3RvcnM6IGFsbG93Qm90cyxcbiAgICAgICAgICBhbGxvd1VzZXJzLFxuICAgICAgICB9KTtcbiAgICAgICAgc3dpdGNoIChyZXN1bHQuc3RhdHVzKSB7XG4gICAgICAgICAgY2FzZSBcImFwcHJvdmVkXCI6IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBBY3RvciAnJHtyZXN1bHQuYWN0b3J9JyBpcyBwZXJtaXR0ZWQgdG8gY29udGludWUuYCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBcInJlamVjdGVkXCI6IHtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgQWN0b3IgJyR7cmVzdWx0LmFjdG9yfScgaXMgbm90IHBlcm1pdHRlZCB0byBydW4gdGhpcyBhY3Rpb246ICR7cmVzdWx0LnJlYXNvbn1gO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuXG4gIHByb2dyYW0ucGFyc2UoKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VJbnRTdHJpY3QodmFsdWU6IHN0cmluZyk6IG51bWJlciB7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gIGlmIChpc05hTihwYXJzZWQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGludGVnZXI6ICR7dmFsdWV9YCk7XG4gIH1cbiAgcmV0dXJuIHBhcnNlZDtcbn1cblxuZnVuY3Rpb24gcGFyc2VFeHRyYUFyZ3ModmFsdWU6IHN0cmluZyk6IEFycmF5PHN0cmluZz4ge1xuICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoXCJbXCIpKSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBwYXJzZUFyZ3NTdHJpbmdUb0FyZ3YodmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvU2FmZXR5U3RyYXRlZ3kodmFsdWU6IHN0cmluZyk6IFNhZmV0eVN0cmF0ZWd5IHtcbiAgc3dpdGNoICh2YWx1ZSkge1xuICAgIGNhc2UgXCJkcm9wLXN1ZG9cIjpcbiAgICBjYXNlIFwicmVhZC1vbmx5XCI6XG4gICAgY2FzZSBcInVucHJpdmlsZWdlZC11c2VyXCI6XG4gICAgY2FzZSBcInVuc2FmZVwiOlxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHNhZmV0eSBzdHJhdGVneTogJHt2YWx1ZX0uIE11c3QgYmUgb25lIG9mICdkcm9wLXN1ZG8nLCAncmVhZC1vbmx5JywgJ3VucHJpdmlsZWdlZC11c2VyJywgb3IgJ3Vuc2FmZScuYFxuICAgICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0b1NhbmRib3hNb2RlKHZhbHVlOiBzdHJpbmcpOiBTYW5kYm94TW9kZSB7XG4gIHN3aXRjaCAodmFsdWUpIHtcbiAgICBjYXNlIFwicmVhZC1vbmx5XCI6XG4gICAgY2FzZSBcIndvcmtzcGFjZS13cml0ZVwiOlxuICAgIGNhc2UgXCJkYW5nZXItZnVsbC1hY2Nlc3NcIjpcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBzYW5kYm94OiAke3ZhbHVlfS4gTXVzdCBiZSBvbmUgb2YgJ3JlYWQtb25seScsICd3b3Jrc3BhY2Utd3JpdGUnLCBvciAnZGFuZ2VyLWZ1bGwtYWNjZXNzJy5gXG4gICAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVtcHR5QXNOdWxsKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgcmV0dXJuIHZhbHVlLnRyaW0oKS5sZW5ndGggPT0gMCA/IG51bGwgOiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gcGFyc2VCb29sZWFuKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHZhbHVlLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAoW1widHJ1ZVwiLCBcIjFcIiwgXCJ5ZXNcIiwgXCJ5XCJdLmluY2x1ZGVzKG5vcm1hbGl6ZWQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKFtcImZhbHNlXCIsIFwiMFwiLCBcIm5vXCIsIFwiblwiXS5pbmNsdWRlcyhub3JtYWxpemVkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgYm9vbGVhbiB2YWx1ZTogJHt2YWx1ZX1gKTtcbn1cblxubWFpbigpO1xuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlQ29kZXhIb21lKFxuICBpbnB1dENvZGV4SG9tZTogc3RyaW5nIHwgbnVsbCxcbiAgc2FmZXR5U3RyYXRlZ3k6IFNhZmV0eVN0cmF0ZWd5LFxuICBjb2RleFVzZXI6IHN0cmluZyB8IG51bGwsXG4gIGdpdGh1YlJ1bklkOiBzdHJpbmdcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChpbnB1dENvZGV4SG9tZSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIGV4cGFuZFRpbGRlKGlucHV0Q29kZXhIb21lKTtcbiAgfVxuICBjb25zdCBlbnZIb21lID0gZW1wdHlBc051bGwocHJvY2Vzcy5lbnYuQ09ERVhfSE9NRSA/PyBcIlwiKTtcbiAgaWYgKGVudkhvbWUgIT0gbnVsbCkge1xuICAgIHJldHVybiBlbnZIb21lO1xuICB9XG5cbiAgaWYgKHNhZmV0eVN0cmF0ZWd5ID09PSBcInVucHJpdmlsZWdlZC11c2VyXCIpIHtcbiAgICBpZiAoY29kZXhVc2VyID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJjb2RleC11c2VyIGlucHV0IG11c3QgYmUgcHJvdmlkZWQgd2hlbiB1c2luZyAndW5wcml2aWxlZ2VkLXVzZXInIHNhZmV0eSBzdHJhdGVneSBhbmQgbm8gY29kZXgtaG9tZSBpcyBzcGVjaWZpZWQuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IGRlcml2ZVNoYXJlZENvZGV4SG9tZUZvclVucHJpdmlsZWdlZFVzZXIoXG4gICAgICBjb2RleFVzZXIsXG4gICAgICBnaXRodWJSdW5JZFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgY29kZXhIb21lID0gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgXCIuY29kZXhcIik7XG4gICAgLy8gRW5zdXJlIGRpcmVjdG9yeSBleGlzdHMgZm9yIGRvd25zdHJlYW0gc3RlcHMgdGhhdCB3aWxsIHdyaXRlIGZpbGVzIGhlcmUuXG4gICAgYXdhaXQgZnMubWtkaXIoY29kZXhIb21lLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICByZXR1cm4gY29kZXhIb21lO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRlcml2ZVNoYXJlZENvZGV4SG9tZUZvclVucHJpdmlsZWdlZFVzZXIoXG4gIHVzZXI6IHN0cmluZyxcbiAgZ2l0aHViUnVuSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgaG9tZSA9IChcbiAgICBhd2FpdCBjaGVja091dHB1dChbXCJzdWRvXCIsIFwiLXVcIiwgdXNlciwgXCItLVwiLCBcInByaW50ZW52XCIsIFwiSE9NRVwiXSlcbiAgKS50cmltKCk7XG4gIGlmICghaG9tZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGRldGVybWluZSBob21lIGRpcmVjdG9yeSBmb3IgdXNlciAnJHt1c2VyfScuYCk7XG4gIH1cbiAgY29uc3QgY29kZXhIb21lID0gcGF0aC5qb2luKGhvbWUsIFwiLmNvZGV4XCIpO1xuICB0cnkge1xuICAgIGNvbnN0IHN0YXQgPSBhd2FpdCBmcy5zdGF0KGNvZGV4SG9tZSk7XG4gICAgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgLy8gRGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzIGFuZCBtYXkgY29udGFpbiBhIGNvbmZpZy50b21sIGNyZWF0ZWQgYnkgdGhlXG4gICAgICAvLyB1c2VyIChvciBhIHByZXZpb3VzIGludm9jYXRpb24gb2YgY29kZXgtYWN0aW9uKSwgc28gYXNzdW1lIGl0J3NcbiAgICAgIC8vIGNvcnJlY3RseSBwZXJtaXNzaW9uZWQuXG4gICAgICByZXR1cm4gY29kZXhIb21lO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gSWdub3JlIHN0YXQgZXJyb3JzIGFuZCB0cnkgdG8gY3JlYXRlIHRoZSBkaXJlY3RvcnkuXG4gIH1cblxuICAvLyBXZSBtdXN0IHVzZSBzdWRvIGZvciB0aGUgZm9sbG93aW5nIGZpbGUgc3lzdGVtIG9wZXJhdGlvbnMgYmVjYXVzZSB3ZVxuICAvLyBhcmUgd3JpdGluZyB0byB0aGUgaG9tZSBkaXJlY3Rvcnkgb2YgYSBkaWZmZXJlbnQgdXNlci5cbiAgYXdhaXQgY2hlY2tPdXRwdXQoW1wic3Vkb1wiLCBcIm1rZGlyXCIsIGNvZGV4SG9tZV0pO1xuICBhd2FpdCBjaGVja091dHB1dChbXCJzdWRvXCIsIFwiY2hvd25cIiwgYCR7dXNlcn1gLCBjb2RleEhvbWVdKTtcbiAgYXdhaXQgY2hlY2tPdXRwdXQoW1wic3Vkb1wiLCBcImNobW9kXCIsIFwiNzU1XCIsIGNvZGV4SG9tZV0pO1xuXG4gIC8vIGNvZGV4LXJlc3BvbnNlcy1hcGktcHJveHkgd2lsbCBuZWVkIHRvIHdyaXRlIHRoZSBzZXJ2ZXIgaW5mbyBmaWxlLlxuICBjb25zdCBzZXJ2ZXJJbmZvRmlsZSA9IHBhdGguam9pbihjb2RleEhvbWUsIGAke2dpdGh1YlJ1bklkfS5qc29uYCk7XG4gIGF3YWl0IGNoZWNrT3V0cHV0KFtcInN1ZG9cIiwgXCJ0b3VjaFwiLCBzZXJ2ZXJJbmZvRmlsZV0pO1xuICAvLyBNYWtlIHRoZSBmaWxlIHdvcmxkLXdyaXRhYmxlIGZvciB0aGUgbW9tZW50LCBidXQgdGhpcyB3aWxsIGJlIGxvY2tlZCBkb3duXG4gIC8vIHRvIHJlYWQtb25seSBieSByb290IGJlZm9yZSB0aGUgYWN0aW9uIGNvbXBsZXRlcy5cbiAgYXdhaXQgY2hlY2tPdXRwdXQoW1wic3Vkb1wiLCBcImNobW9kXCIsIFwiNjY2XCIsIHNlcnZlckluZm9GaWxlXSk7XG5cbiAgcmV0dXJuIGNvZGV4SG9tZTtcbn1cblxuZnVuY3Rpb24gZXhwYW5kVGlsZGUocDogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHAgPT09IFwiflwiKSB7XG4gICAgcmV0dXJuIG9zLmhvbWVkaXIoKTtcbiAgfVxuICBpZiAocC5zdGFydHNXaXRoKFwifi9cIikgfHwgcC5zdGFydHNXaXRoKFwiflxcXFxcIikpIHtcbiAgICByZXR1cm4gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgcC5zbGljZSgyKSk7XG4gIH1cbiAgcmV0dXJuIHA7XG59XG4iLCAiaW1wb3J0IGNvbW1hbmRlciBmcm9tICcuL2luZGV4LmpzJztcblxuLy8gd3JhcHBlciB0byBwcm92aWRlIG5hbWVkIGV4cG9ydHMgZm9yIEVTTS5cbmV4cG9ydCBjb25zdCB7XG4gIHByb2dyYW0sXG4gIGNyZWF0ZUNvbW1hbmQsXG4gIGNyZWF0ZUFyZ3VtZW50LFxuICBjcmVhdGVPcHRpb24sXG4gIENvbW1hbmRlckVycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgSW52YWxpZE9wdGlvbkFyZ3VtZW50RXJyb3IsIC8vIGRlcHJlY2F0ZWQgb2xkIG5hbWVcbiAgQ29tbWFuZCxcbiAgQXJndW1lbnQsXG4gIE9wdGlvbixcbiAgSGVscCxcbn0gPSBjb21tYW5kZXI7XG4iLCAie1xuICBcIm5hbWVcIjogXCJAb3BlbmFpL2NvZGV4LWFjdGlvblwiLFxuICBcInZlcnNpb25cIjogXCIwLjAuMFwiLFxuICBcImRlc2NyaXB0aW9uXCI6IFwiR2l0SHViIEFjdGlvbiB0byBydW4gY29kZXggZXhlYyB2aWEgdGhlIENvZGV4IENMSSB3aXRoIGFjY29tcGFueWluZyBoZWxwZXIgc3RlcHNcIixcbiAgXCJwcml2YXRlXCI6IHRydWUsXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJidWlsZFwiOiBcImVzYnVpbGQgc3JjL21haW4udHMgLS1zb3VyY2VtYXA9aW5saW5lIC0tZm9ybWF0PWNqcyAtLWJ1bmRsZSAtLXBsYXRmb3JtPW5vZGUgLS10YXJnZXQ9bm9kZTIwIC0tb3V0ZGlyPWRpc3RcIixcbiAgICBcImNoZWNrXCI6IFwidHNjIC0tbm9FbWl0XCJcbiAgfSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiQGFjdGlvbnMvY29yZVwiOiBcIl4xLjExLjFcIixcbiAgICBcIkBvY3Rva2l0L2dyYXBocWxcIjogXCJeOC4yLjJcIixcbiAgICBcIkBvY3Rva2l0L3Jlc3RcIjogXCJeMjEuMS4xXCIsXG4gICAgXCJjb21tYW5kZXJcIjogXCIxNC4wLjFcIixcbiAgICBcInN0cmluZy1hcmd2XCI6IFwiMC4zLjJcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJAdHlwZXMvbm9kZVwiOiBcIl4yMC4xMi43XCIsXG4gICAgXCJlc2J1aWxkXCI6IFwiXjAuMjMuMFwiLFxuICAgIFwidHlwZXNjcmlwdFwiOiBcIl41LjQuNVwiXG4gIH0sXG4gIFwicGFja2FnZU1hbmFnZXJcIjogXCJwbnBtQDEwLjE3LjFcIlxufVxuIiwgImltcG9ydCAqIGFzIGNvcmUgZnJvbSBcIkBhY3Rpb25zL2NvcmVcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmcy9wcm9taXNlc1wiO1xuXG4vKipcbiAqIEluIHRoZW9yeSwgdGhpcyBpcyBub3QgY2FsbGVkIHVudGlsIGBzZXJ2ZXJJbmZvRmlsZWAgaXMgbm9uLWVtcHR5LCBidXQgd2VcbiAqIHdpbGwgcG9sbCBpbiB0aGUgcmFyZSBjYXNlIHRoYXQgaXQgd2FzIGEgcGFydGlhbCB3cml0ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRTZXJ2ZXJJbmZvKHNlcnZlckluZm9GaWxlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPCAxMDA7IGF0dGVtcHQrKykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb250ZW50cyA9IGF3YWl0IGZzLnJlYWRGaWxlKHNlcnZlckluZm9GaWxlLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KTtcbiAgICAgIGNvbnN0IHsgcG9ydCB9ID0gSlNPTi5wYXJzZShjb250ZW50cyk7XG4gICAgICBpZiAodHlwZW9mIHBvcnQgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvcmUuc2V0T3V0cHV0KFwicG9ydFwiLCBwb3J0LnRvU3RyaW5nKCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBFcnJvciByZWFkaW5nIHNlcnZlciBpbmZvOiAke2Vycm9yfWApO1xuICAgICAgYXdhaXQgc2xlZXAoMTAwKTtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBFcnJvcihgRmFpbGVkIHRvIHJlYWQgc2VydmVyIGluZm8gZnJvbSAke3NlcnZlckluZm9GaWxlfWApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xufVxuIiwgImltcG9ydCB7IHNwYXduIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IGNobW9kLCBta2R0ZW1wLCByZWFkRmlsZSwgcm0sIHdyaXRlRmlsZSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCBvcyBmcm9tIFwib3NcIjtcbmltcG9ydCB7IHNldE91dHB1dCB9IGZyb20gXCJAYWN0aW9ucy9jb3JlXCI7XG5pbXBvcnQgeyBjaGVja091dHB1dCB9IGZyb20gXCIuL2NoZWNrT3V0cHV0XCI7XG5cbmV4cG9ydCB0eXBlIFByb21wdFNvdXJjZSA9XG4gIHwge1xuICAgICAgdHlwZTogXCJpbmxpbmVcIjtcbiAgICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogXCJmaWxlXCI7XG4gICAgICBwYXRoOiBzdHJpbmc7XG4gICAgfTtcblxuZXhwb3J0IHR5cGUgU2FmZXR5U3RyYXRlZ3kgPVxuICB8IFwiZHJvcC1zdWRvXCJcbiAgfCBcInJlYWQtb25seVwiXG4gIHwgXCJ1bnByaXZpbGVnZWQtdXNlclwiXG4gIHwgXCJ1bnNhZmVcIjtcblxuZXhwb3J0IHR5cGUgU2FuZGJveE1vZGUgPVxuICB8IFwicmVhZC1vbmx5XCJcbiAgfCBcIndvcmtzcGFjZS13cml0ZVwiXG4gIHwgXCJkYW5nZXItZnVsbC1hY2Nlc3NcIjtcblxuZXhwb3J0IHR5cGUgT3V0cHV0U2NoZW1hU291cmNlID1cbiAgfCB7XG4gICAgICB0eXBlOiBcImZpbGVcIjtcbiAgICAgIHBhdGg6IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogXCJpbmxpbmVcIjtcbiAgICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICB9O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQ29kZXhFeGVjKHtcbiAgcHJvbXB0LFxuICBjb2RleEhvbWUsXG4gIGNkLFxuICBleHRyYUFyZ3MsXG4gIGV4cGxpY2l0T3V0cHV0RmlsZSxcbiAgb3V0cHV0U2NoZW1hLFxuICBtb2RlbCxcbiAgZWZmb3J0LFxuICBzYWZldHlTdHJhdGVneSxcbiAgY29kZXhVc2VyLFxuICBzYW5kYm94LFxufToge1xuICBwcm9tcHQ6IFByb21wdFNvdXJjZTtcbiAgY29kZXhIb21lOiBzdHJpbmcgfCBudWxsO1xuICBjZDogc3RyaW5nO1xuICBleHRyYUFyZ3M6IEFycmF5PHN0cmluZz47XG4gIGV4cGxpY2l0T3V0cHV0RmlsZTogc3RyaW5nIHwgbnVsbDtcbiAgb3V0cHV0U2NoZW1hOiBPdXRwdXRTY2hlbWFTb3VyY2UgfCBudWxsO1xuICBtb2RlbDogc3RyaW5nIHwgbnVsbDtcbiAgZWZmb3J0OiBzdHJpbmcgfCBudWxsO1xuICBzYWZldHlTdHJhdGVneTogU2FmZXR5U3RyYXRlZ3k7XG4gIGNvZGV4VXNlcjogc3RyaW5nIHwgbnVsbDtcbiAgc2FuZGJveDogU2FuZGJveE1vZGU7XG59KTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCBpbnB1dDogc3RyaW5nO1xuICBzd2l0Y2ggKHByb21wdC50eXBlKSB7XG4gICAgY2FzZSBcImlubGluZVwiOlxuICAgICAgaW5wdXQgPSBwcm9tcHQuY29udGVudDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJmaWxlXCI6XG4gICAgICBpbnB1dCA9IGF3YWl0IHJlYWRGaWxlKHByb21wdC5wYXRoLCBcInV0ZjhcIik7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGNvbnN0IHJ1bkFzVXNlcjogc3RyaW5nIHwgbnVsbCA9XG4gICAgc2FmZXR5U3RyYXRlZ3kgPT09IFwidW5wcml2aWxlZ2VkLXVzZXJcIiA/IGNvZGV4VXNlciA6IG51bGw7XG5cbiAgbGV0IG91dHB1dEZpbGU6IE91dHB1dEZpbGU7XG4gIGlmIChleHBsaWNpdE91dHB1dEZpbGUgIT0gbnVsbCkge1xuICAgIG91dHB1dEZpbGUgPSB7IHR5cGU6IFwiZXhwbGljaXRcIiwgZmlsZTogZXhwbGljaXRPdXRwdXRGaWxlIH07XG4gIH0gZWxzZSB7XG4gICAgb3V0cHV0RmlsZSA9IGF3YWl0IGNyZWF0ZVRlbXBPdXRwdXRGaWxlKHsgcnVuQXNVc2VyIH0pO1xuICB9XG5cbiAgY29uc3QgcmVzb2x2ZWRPdXRwdXRTY2hlbWEgPSBhd2FpdCByZXNvbHZlT3V0cHV0U2NoZW1hKFxuICAgIG91dHB1dFNjaGVtYSxcbiAgICBydW5Bc1VzZXJcbiAgKTtcbiAgY29uc3Qgc2FuZGJveE1vZGUgPSBhd2FpdCBkZXRlcm1pbmVTYW5kYm94TW9kZSh7XG4gICAgc2FmZXR5U3RyYXRlZ3ksXG4gICAgcmVxdWVzdGVkU2FuZGJveDogc2FuZGJveCxcbiAgfSk7XG5cbiAgY29uc3QgY29tbWFuZDogQXJyYXk8c3RyaW5nPiA9IFtdO1xuXG4gIGxldCBwYXRoVG9Db2RleCA9IFwiY29kZXhcIjtcbiAgaWYgKHNhZmV0eVN0cmF0ZWd5ID09PSBcInVucHJpdmlsZWdlZC11c2VyXCIpIHtcbiAgICBpZiAoY29kZXhVc2VyID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJjb2RleFVzZXIgbXVzdCBiZSBzcGVjaWZpZWQgd2hlbiB1c2luZyB0aGUgJ3VucHJpdmlsZWdlZC11c2VyJyBzYWZldHkgc3RyYXRlZ3kuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09IFwid2luMzJcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcInRoZSAndW5wcml2aWxlZ2VkLXVzZXInIHNhZmV0eSBzdHJhdGVneSBpcyBub3Qgc3VwcG9ydGVkIG9uIFdpbmRvd3MuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gV2UgYXJlIGN1cnJlbnRseSBydW5uaW5nIGFzIGEgcHJpdmlsZWdlZCB1c2VyLCBidXQgYGNvZGV4VXNlcmAgd2lsbCBydW5cbiAgICAvLyB3aXRoIGEgZGlmZmVyZW50ICRQQVRIIHZhcmlhYmxlLCBzbyB3ZSBuZWVkIHRvIGZpbmQgdGhlIGZ1bGwgcGF0aCB0b1xuICAgIC8vIGBjb2RleGAuXG4gICAgcGF0aFRvQ29kZXggPSAoYXdhaXQgY2hlY2tPdXRwdXQoW1wid2hpY2hcIiwgXCJjb2RleFwiXSkpLnRyaW0oKTtcbiAgICBpZiAoIXBhdGhUb0NvZGV4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjb3VsZCBub3QgZmluZCAnY29kZXgnIGluIFBBVEhcIik7XG4gICAgfVxuXG4gICAgY29tbWFuZC5wdXNoKFwic3Vkb1wiLCBcIi11XCIsIGNvZGV4VXNlciwgXCItLVwiKTtcbiAgfVxuXG4gIGNvbW1hbmQucHVzaChcbiAgICBwYXRoVG9Db2RleCxcbiAgICBcImV4ZWNcIixcbiAgICBcIi0tc2tpcC1naXQtcmVwby1jaGVja1wiLFxuICAgIFwiLS1jZFwiLFxuICAgIGNkLFxuICAgIFwiLS1vdXRwdXQtbGFzdC1tZXNzYWdlXCIsXG4gICAgb3V0cHV0RmlsZS5maWxlXG4gICk7XG5cbiAgaWYgKHJlc29sdmVkT3V0cHV0U2NoZW1hICE9IG51bGwpIHtcbiAgICBjb21tYW5kLnB1c2goXCItLW91dHB1dC1zY2hlbWFcIiwgcmVzb2x2ZWRPdXRwdXRTY2hlbWEuZmlsZSk7XG4gIH1cblxuICBpZiAobW9kZWwgIT0gbnVsbCkge1xuICAgIGNvbW1hbmQucHVzaChcIi0tbW9kZWxcIiwgbW9kZWwpO1xuICB9XG5cbiAgaWYgKGVmZm9ydCAhPSBudWxsKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL29wZW5haS9jb2RleC9ibG9iLzAwZGViYjYzOTllYjUxYzRiOTI3M2YwYmMwMTI5MTJjNDJmZTZjOTEvZG9jcy9jb25maWcubWQjY29uZmlnXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL29wZW5haS9jb2RleC9ibG9iLzAwZGViYjYzOTllYjUxYzRiOTI3M2YwYmMwMTI5MTJjNDJmZTZjOTEvZG9jcy9jb25maWcubWQjbW9kZWxfcmVhc29uaW5nX2VmZm9ydFxuICAgIGNvbW1hbmQucHVzaChcIi0tY29uZmlnXCIsIGBtb2RlbF9yZWFzb25pbmdfZWZmb3J0PVwiJHtlZmZvcnR9XCJgKTtcbiAgfVxuXG4gIGNvbW1hbmQucHVzaCguLi5leHRyYUFyZ3MpO1xuXG4gIGNvbW1hbmQucHVzaChcIi0tc2FuZGJveFwiLCBzYW5kYm94TW9kZSk7XG5cbiAgY29uc3QgZW52ID0geyAuLi5wcm9jZXNzLmVudiB9O1xuICBpZiAoIWVudi5DT0RFWF9JTlRFUk5BTF9PUklHSU5BVE9SX09WRVJSSURFKSB7XG4gICAgZW52LkNPREVYX0lOVEVSTkFMX09SSUdJTkFUT1JfT1ZFUlJJREUgPSBcImNvZGV4X2dpdGh1Yl9hY3Rpb25cIjtcbiAgfVxuICBsZXQgZXh0cmFFbnYgPSBcIlwiO1xuICBpZiAoY29kZXhIb21lICE9IG51bGwpIHtcbiAgICBlbnYuQ09ERVhfSE9NRSA9IGNvZGV4SG9tZTtcbiAgICBleHRyYUVudiA9IGBDT0RFWF9IT01FPSR7Y29kZXhIb21lfSBgO1xuICB9XG5cbiAgLy8gU3BsaXQgdGhlIGBwcm9ncmFtYCBmcm9tIHRoZSBgYXJnc2AgZm9yIGBzcGF3bigpYC5cbiAgY29uc3QgcHJvZ3JhbSA9IGNvbW1hbmQuc2hpZnQoKSE7XG4gIGNvbnNvbGUubG9nKFxuICAgIGBSdW5uaW5nOiAke2V4dHJhRW52fSR7cHJvZ3JhbX0gJHtjb21tYW5kXG4gICAgICAubWFwKChhKSA9PiBKU09OLnN0cmluZ2lmeShhKSlcbiAgICAgIC5qb2luKFwiIFwiKX1gXG4gICk7XG4gIHRyeSB7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgY2hpbGQgPSBzcGF3bihwcm9ncmFtLCBjb21tYW5kLCB7XG4gICAgICAgIGVudixcbiAgICAgICAgc3RkaW86IFtcInBpcGVcIiwgXCJpbmhlcml0XCIsIFwiaW5oZXJpdFwiXSxcbiAgICAgIH0pO1xuICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoaW5wdXQpO1xuICAgICAgY2hpbGQuc3RkaW4uZW5kKCk7XG5cbiAgICAgIGNoaWxkLm9uKFwiZXJyb3JcIiwgcmVqZWN0KTtcblxuICAgICAgY2hpbGQub24oXCJjbG9zZVwiLCBhc3luYyAoY29kZSkgPT4ge1xuICAgICAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYCR7cHJvZ3JhbX0gZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgZmluYWxpemVFeGVjdXRpb24ob3V0cHV0RmlsZSwgcnVuQXNVc2VyKTtcbiAgICAgICAgICByZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBjbGVhbnVwT3V0cHV0U2NoZW1hKHJlc29sdmVkT3V0cHV0U2NoZW1hKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBmaW5hbGl6ZUV4ZWN1dGlvbihcbiAgb3V0cHV0RmlsZTogT3V0cHV0RmlsZSxcbiAgcnVuQXNVc2VyOiBzdHJpbmcgfCBudWxsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBsZXQgbGFzdE1lc3NhZ2U6IHN0cmluZztcbiAgICBpZiAocnVuQXNVc2VyID09IG51bGwpIHtcbiAgICAgIGxhc3RNZXNzYWdlID0gYXdhaXQgcmVhZEZpbGUob3V0cHV0RmlsZS5maWxlLCBcInV0ZjhcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhc3RNZXNzYWdlID0gYXdhaXQgY2hlY2tPdXRwdXQoW1xuICAgICAgICBcInN1ZG9cIixcbiAgICAgICAgXCItdVwiLFxuICAgICAgICBydW5Bc1VzZXIsXG4gICAgICAgIFwiY2F0XCIsXG4gICAgICAgIG91dHB1dEZpbGUuZmlsZSxcbiAgICAgIF0pO1xuICAgIH1cbiAgICBzZXRPdXRwdXQoXCJmaW5hbC1tZXNzYWdlXCIsIGxhc3RNZXNzYWdlKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBjbGVhbnVwVGVtcE91dHB1dChvdXRwdXRGaWxlLCBydW5Bc1VzZXIpO1xuICB9XG59XG5cbnR5cGUgT3V0cHV0RmlsZSA9XG4gIHwge1xuICAgICAgdHlwZTogXCJleHBsaWNpdFwiO1xuICAgICAgZmlsZTogc3RyaW5nO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiBcInRlbXBcIjtcbiAgICAgIGZpbGU6IHN0cmluZztcbiAgICB9O1xuXG50eXBlIFJlc29sdmVkT3V0cHV0U2NoZW1hID1cbiAgfCB7XG4gICAgICB0eXBlOiBcImV4cGxpY2l0XCI7XG4gICAgICBmaWxlOiBzdHJpbmc7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IFwidGVtcFwiO1xuICAgICAgZmlsZTogc3RyaW5nO1xuICAgICAgZGlyOiBzdHJpbmc7XG4gICAgfTtcblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlVGVtcE91dHB1dEZpbGUoe1xuICBydW5Bc1VzZXIsXG59OiB7XG4gIHJ1bkFzVXNlcjogc3RyaW5nIHwgbnVsbDtcbn0pOiBQcm9taXNlPE91dHB1dEZpbGU+IHtcbiAgY29uc3QgZGlyID0gYXdhaXQgY3JlYXRlVGVtcERpcihcImNvZGV4LWV4ZWMtXCIsIHJ1bkFzVXNlcik7XG4gIHJldHVybiB7IHR5cGU6IFwidGVtcFwiLCBmaWxlOiBwYXRoLmpvaW4oZGlyLCBcIm91dHB1dC5tZFwiKSB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBjbGVhbnVwVGVtcE91dHB1dChcbiAgb3V0cHV0RmlsZTogT3V0cHV0RmlsZSxcbiAgcnVuQXNVc2VyOiBzdHJpbmcgfCBudWxsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgc3dpdGNoIChvdXRwdXRGaWxlLnR5cGUpIHtcbiAgICBjYXNlIFwiZXhwbGljaXRcIjpcbiAgICAgIC8vIERvIG5vdCBkZWxldGUgdXNlci1zcGVjaWZpZWQgb3V0cHV0IGZpbGVzLlxuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgXCJ0ZW1wXCI6IHtcbiAgICAgIGNvbnN0IHsgZmlsZSB9ID0gb3V0cHV0RmlsZTtcbiAgICAgIGlmIChydW5Bc1VzZXIgPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZmlsZSk7XG4gICAgICAgIGF3YWl0IHJtKGRpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgY2hlY2tPdXRwdXQoW1wic3Vkb1wiLCBcInJtXCIsIFwiLXJmXCIsIHBhdGguZGlybmFtZShmaWxlKV0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVPdXRwdXRTY2hlbWEoXG4gIHNjaGVtYTogT3V0cHV0U2NoZW1hU291cmNlIHwgbnVsbCxcbiAgcnVuQXNVc2VyOiBzdHJpbmcgfCBudWxsXG4pOiBQcm9taXNlPFJlc29sdmVkT3V0cHV0U2NoZW1hIHwgbnVsbD4ge1xuICBpZiAoc2NoZW1hID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN3aXRjaCAoc2NoZW1hLnR5cGUpIHtcbiAgICBjYXNlIFwiZmlsZVwiOlxuICAgICAgcmV0dXJuIHsgdHlwZTogXCJleHBsaWNpdFwiLCBmaWxlOiBzY2hlbWEucGF0aCB9O1xuICAgIGNhc2UgXCJpbmxpbmVcIjoge1xuICAgICAgY29uc3QgZGlyID0gYXdhaXQgY3JlYXRlVGVtcERpcihcImNvZGV4LW91dHB1dC1zY2hlbWEtXCIsIHJ1bkFzVXNlcik7XG4gICAgICBjb25zdCBmaWxlID0gcGF0aC5qb2luKGRpciwgXCJzY2hlbWEuanNvblwiKTtcbiAgICAgIGF3YWl0IHdyaXRlRmlsZShmaWxlLCBzY2hlbWEuY29udGVudCk7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRlbXBcIiwgZmlsZSwgZGlyIH07XG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNsZWFudXBPdXRwdXRTY2hlbWEoXG4gIHNjaGVtYTogUmVzb2x2ZWRPdXRwdXRTY2hlbWEgfCBudWxsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKHNjaGVtYSA9PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3dpdGNoIChzY2hlbWEudHlwZSkge1xuICAgIGNhc2UgXCJleHBsaWNpdFwiOlxuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgXCJ0ZW1wXCI6XG4gICAgICBhd2FpdCBybShzY2hlbWEuZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgICByZXR1cm47XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlVGVtcERpcihcbiAgcHJlZml4OiBzdHJpbmcsXG4gIHJ1bkFzVXNlcjogc3RyaW5nIHwgbnVsbFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgaWYgKHJ1bkFzVXNlciA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGF3YWl0IG1rZHRlbXAocGF0aC5qb2luKG9zLnRtcGRpcigpLCBwcmVmaXgpKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKFxuICAgICAgYXdhaXQgY2hlY2tPdXRwdXQoW1xuICAgICAgICBcInN1ZG9cIixcbiAgICAgICAgXCItdVwiLFxuICAgICAgICBydW5Bc1VzZXIsXG4gICAgICAgIFwibWt0ZW1wXCIsXG4gICAgICAgIFwiLWRcIixcbiAgICAgICAgXCItdFwiLFxuICAgICAgICBgJHtwcmVmaXh9LlhYWFhYWGAsXG4gICAgICBdKVxuICAgICkudHJpbSgpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRldGVybWluZVNhbmRib3hNb2RlKHtcbiAgc2FmZXR5U3RyYXRlZ3ksXG4gIHJlcXVlc3RlZFNhbmRib3gsXG59OiB7XG4gIHNhZmV0eVN0cmF0ZWd5OiBTYWZldHlTdHJhdGVneTtcbiAgcmVxdWVzdGVkU2FuZGJveDogU2FuZGJveE1vZGU7XG59KTogUHJvbWlzZTxTYW5kYm94TW9kZT4ge1xuICBpZiAoc2FmZXR5U3RyYXRlZ3kgPT09IFwicmVhZC1vbmx5XCIpIHtcbiAgICByZXR1cm4gXCJyZWFkLW9ubHlcIjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcmVxdWVzdGVkU2FuZGJveDtcbiAgfVxufVxuIiwgImltcG9ydCB7IHNwYXduIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrT3V0cHV0KGNvbW1hbmQ6IEFycmF5PHN0cmluZz4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBbcHJvZywgLi4uYXJnc10gPSBjb21tYW5kO1xuICByZXR1cm4gbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgcHJvYyA9IHNwYXduKHByb2csIGFyZ3MsIHtcbiAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwicGlwZVwiLCBcImluaGVyaXRcIl0sXG4gICAgfSk7XG5cbiAgICBwcm9jLm9uKFwiZXJyb3JcIiwgcmVqZWN0KTtcblxuICAgIGxldCBvdXRwdXQgPSBcIlwiO1xuICAgIHByb2Muc3Rkb3V0Lm9uKFwiZGF0YVwiLCAoY2h1bmspID0+IHtcbiAgICAgIG91dHB1dCArPSBjaHVuay50b1N0cmluZygpO1xuICAgIH0pO1xuXG4gICAgcHJvYy5vbihcImNsb3NlXCIsIChjb2RlKSA9PiB7XG4gICAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGAke3Byb2d9IGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZXNvbHZlKG91dHB1dCk7XG4gICAgfSk7XG4gIH0pO1xufVxuIiwgImltcG9ydCB7IHNwYXduIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5cbmludGVyZmFjZSBFeGVjT3B0aW9ucyB7XG4gIGNhcHR1cmU/OiBib29sZWFuO1xuICBpZ25vcmVGYWlsdXJlPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEV4ZWNSZXN1bHQge1xuICBjb2RlOiBudW1iZXI7XG4gIHN0ZG91dDogc3RyaW5nO1xuICBzdGRlcnI6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEcm9wU3Vkb09wdGlvbnMge1xuICB1c2VyOiBzdHJpbmc7XG4gIGdyb3VwOiBzdHJpbmc7XG4gIHJvb3RQaGFzZTogYm9vbGVhbjtcbn1cblxuY29uc3QgTElOVVhfUExBVEZPUk0gPSBcImxpbnV4XCI7XG5jb25zdCBNQUNPU19QTEFURk9STSA9IFwiZGFyd2luXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkcm9wU3VkbyhvcHRpb25zOiBEcm9wU3Vkb09wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcGxhdGZvcm0gPSBwcm9jZXNzLnBsYXRmb3JtO1xuICBpZiAoIVtMSU5VWF9QTEFURk9STSwgTUFDT1NfUExBVEZPUk1dLmluY2x1ZGVzKHBsYXRmb3JtKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBVbnN1cHBvcnRlZCBPUyBmb3IgZHJvcC1zdWRvIHNhZmV0eSBzdHJhdGVneTogJHtwbGF0Zm9ybX1gXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHsgcm9vdFBoYXNlIH0gPSBvcHRpb25zO1xuICBpZiAocm9vdFBoYXNlKSB7XG4gICAgYXdhaXQgZHJvcFN1ZG9XaXRoUHJpdmlsZWdlcyhvcHRpb25zKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBhd2FpdCBlbnN1cmVQYXNzd29yZGxlc3NTdWRvKCk7XG4gIC8vIGBzdWRvIC1LYCBpbnZhbGlkYXRlcyBjYWNoZWQgY3JlZGVudGlhbHMgYnV0IGV4aXRzIG5vbi16ZXJvIHdoZW4gbm8gdGlja2V0XG4gIC8vIGV4aXN0cyB5ZXQuIElnbm9yZSB0aGF0IGZhaWx1cmUgc28gZnJlc2ggcnVubmVycyBkb24ndCBibG93IHVwLlxuICBhd2FpdCBleGVjQ29tbWFuZChcInN1ZG9cIiwgW1wiLUtcIl0sIHsgaWdub3JlRmFpbHVyZTogdHJ1ZSB9KTtcblxuICBjb25zdCBleGVjQXJncyA9IFsuLi5wcm9jZXNzLmV4ZWNBcmd2XTtcbiAgY29uc3Qgc2NyaXB0UGF0aCA9IHByb2Nlc3MuYXJndlsxXTtcbiAgLy8gUmUtZW50ZXIgdGhpcyBjb21tYW5kIHVuZGVyIHN1ZG8gc28gdGhlIHByaXZpbGVnZS1kcm9wcGluZyB3b3JrIGhhcHBlbnMgaW4gYVxuICAvLyBzaW5nbGUgcGxhY2UgcmVnYXJkbGVzcyBvZiB0aGUgaG9zdCBwbGF0Zm9ybS5cbiAgYXdhaXQgZXhlY0NvbW1hbmQoXCJzdWRvXCIsIFtcbiAgICBcIi1uXCIsXG4gICAgXCJub2RlXCIsXG4gICAgLi4uZXhlY0FyZ3MsXG4gICAgc2NyaXB0UGF0aCxcbiAgICBcImRyb3Atc3Vkb1wiLFxuICAgIFwiLS1yb290LXBoYXNlXCIsXG4gICAgXCItLXVzZXJcIixcbiAgICBvcHRpb25zLnVzZXIsXG4gICAgXCItLWdyb3VwXCIsXG4gICAgb3B0aW9ucy5ncm91cCxcbiAgXSk7XG5cbiAgLy8gSW52YWxpZGF0ZSB0aGUgc3VkbyB0aWNrZXQgYWdhaW47IGlnbm9yZSBmYWlsdXJlcyBmb3IgdGhlIHNhbWUgcmVhc29uIGFzXG4gIC8vIGFib3ZlIChzb21lIGVudmlyb25tZW50cyByZXR1cm4gYW4gZXJyb3Igd2hlbiBubyB0aW1lc3RhbXAgZXhpc3RzKS5cbiAgYXdhaXQgZXhlY0NvbW1hbmQoXCJzdWRvXCIsIFtcIi1LXCJdLCB7IGlnbm9yZUZhaWx1cmU6IHRydWUgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRyb3BTdWRvV2l0aFByaXZpbGVnZXMob3B0aW9uczogRHJvcFN1ZG9PcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICh0eXBlb2YgcHJvY2Vzcy5nZXR1aWQgPT09IFwiZnVuY3Rpb25cIiAmJiBwcm9jZXNzLmdldHVpZCgpICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiZHJvcC1zdWRvIHJvb3QgcGhhc2UgbXVzdCBydW4gYXMgcm9vdC5cIik7XG4gIH1cblxuICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuXG4gIHN3aXRjaCAocHJvY2Vzcy5wbGF0Zm9ybSkge1xuICAgIGNhc2UgTElOVVhfUExBVEZPUk06IHtcbiAgICAgIGlmIChhd2FpdCBpc1VzZXJJbkdyb3VwKG9wdGlvbnMudXNlciwgb3B0aW9ucy5ncm91cCkpIHtcbiAgICAgICAgaWYgKGF3YWl0IGNvbW1hbmRFeGlzdHMoXCJkZWx1c2VyXCIpKSB7XG4gICAgICAgICAgYXdhaXQgZXhlY0NvbW1hbmQoXCJkZWx1c2VyXCIsIFtvcHRpb25zLnVzZXIsIG9wdGlvbnMuZ3JvdXBdKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGBVc2VkICdkZWx1c2VyICR7b3B0aW9ucy51c2VyfSAke29wdGlvbnMuZ3JvdXB9JyB0byBkcm9wIHN1ZG8gcHJpdmlsZWdlLmBcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGF3YWl0IGNvbW1hbmRFeGlzdHMoXCJncGFzc3dkXCIpKSB7XG4gICAgICAgICAgYXdhaXQgZXhlY0NvbW1hbmQoXCJncGFzc3dkXCIsIFtcIi1kXCIsIG9wdGlvbnMudXNlciwgb3B0aW9ucy5ncm91cF0pO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYFVzZWQgJ2dwYXNzd2QgLWQgJHtvcHRpb25zLnVzZXJ9ICR7b3B0aW9ucy5ncm91cH0nIHRvIGRyb3Agc3VkbyBwcml2aWxlZ2UuYFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTmVpdGhlciBkZWx1c2VyIG5vciBncGFzc3dkIGF2YWlsYWJsZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgJHtvcHRpb25zLnVzZXJ9IGlzIG5vdCBhIG1lbWJlciBvZiB0aGUgJHtvcHRpb25zLmdyb3VwfSBncm91cC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBNQUNPU19QTEFURk9STToge1xuICAgICAgaWYgKGF3YWl0IGlzVXNlckluR3JvdXAob3B0aW9ucy51c2VyLCBvcHRpb25zLmdyb3VwKSkge1xuICAgICAgICBhd2FpdCBleGVjQ29tbWFuZChcImRzZWRpdGdyb3VwXCIsIFtcbiAgICAgICAgICBcIi1vXCIsXG4gICAgICAgICAgXCJlZGl0XCIsXG4gICAgICAgICAgXCItZFwiLFxuICAgICAgICAgIG9wdGlvbnMudXNlcixcbiAgICAgICAgICBcIi10XCIsXG4gICAgICAgICAgXCJ1c2VyXCIsXG4gICAgICAgICAgb3B0aW9ucy5ncm91cCxcbiAgICAgICAgXSk7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGBVc2VkICdkc2VkaXRncm91cCAtbyBlZGl0IC1kICR7b3B0aW9ucy51c2VyfSAtdCB1c2VyICR7b3B0aW9ucy5ncm91cH0nIHRvIGRyb3Agc3VkbyBwcml2aWxlZ2UuYFxuICAgICAgICApO1xuICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGAke29wdGlvbnMudXNlcn0gaXMgbm90IGEgbWVtYmVyIG9mIHRoZSAke29wdGlvbnMuZ3JvdXB9IGdyb3VwLmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBVbnN1cHBvcnRlZCBPUyBmb3IgZHJvcC1zdWRvIHNhZmV0eSBzdHJhdGVneTogJHtwcm9jZXNzLnBsYXRmb3JtfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWVzc2FnZXMgPSBhd2FpdCByZW1vdmVVc2VyRnJvbVN1ZG9lcnNEKG9wdGlvbnMudXNlcik7XG4gIGlmIChtZXNzYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgZm9yIChjb25zdCBtZXNzYWdlIG9mIG1lc3NhZ2VzKSB7XG4gICAgICBjb25zb2xlLmxvZyhtZXNzYWdlKTtcbiAgICB9XG4gICAgY2hhbmdlZCA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgTm8gJHtvcHRpb25zLnVzZXJ9IGVudHJpZXMgZm91bmQgaW4gL2V0Yy9zdWRvZXJzLmQgcmVxdWlyaW5nIGNoYW5nZXMuYFxuICAgICk7XG4gIH1cblxuICBjb25zdCBzdWRvZXJzTWVzc2FnZSA9IGF3YWl0IHN0cmlwVXNlckVudHJpZXNGcm9tRmlsZShcbiAgICBcIi9ldGMvc3Vkb2Vyc1wiLFxuICAgIG9wdGlvbnMudXNlclxuICApO1xuICBpZiAoc3Vkb2Vyc01lc3NhZ2UpIHtcbiAgICBjb25zb2xlLmxvZyhzdWRvZXJzTWVzc2FnZSk7XG4gICAgY2hhbmdlZCA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgTm8gJHtvcHRpb25zLnVzZXJ9IGVudHJpZXMgZm91bmQgaW4gL2V0Yy9zdWRvZXJzIHJlcXVpcmluZyBjaGFuZ2VzLmBcbiAgICApO1xuICB9XG5cbiAgaWYgKCFjaGFuZ2VkKSB7XG4gICAgY29uc29sZS5sb2coYCR7b3B0aW9ucy51c2VyfSBhbHJlYWR5IGxhY2tzIHN1ZG8gcHJpdmlsZWdlcy5gKTtcbiAgfVxuXG4gIGNvbnN0IGdyb3Vwc0FmdGVyID0gYXdhaXQgZXhlY0NvbW1hbmQoXCJpZFwiLCBbXCItR25cIiwgb3B0aW9ucy51c2VyXSwge1xuICAgIGNhcHR1cmU6IHRydWUsXG4gIH0pO1xuICBjb25zb2xlLmxvZyhcbiAgICBgR3JvdXBzIGZvciAke29wdGlvbnMudXNlcn0gYWZ0ZXIgY2xlYW51cDogJHtncm91cHNBZnRlci5zdGRvdXQudHJpbSgpfWBcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZW5zdXJlUGFzc3dvcmRsZXNzU3VkbygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBleGVjQ29tbWFuZChcInN1ZG9cIiwgW1wiLW5cIiwgXCJ0cnVlXCJdLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZDogcGFzc3dvcmRsZXNzIHN1ZG8gbm90IGF2YWlsYWJsZS5cIik7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNVc2VySW5Hcm91cCh1c2VyOiBzdHJpbmcsIGdyb3VwOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY0NvbW1hbmQoXCJpZFwiLCBbXCItbkdcIiwgdXNlcl0sIHtcbiAgICBjYXB0dXJlOiB0cnVlLFxuICAgIGlnbm9yZUZhaWx1cmU6IHRydWUsXG4gIH0pO1xuICBpZiAocmVzdWx0LmNvZGUgIT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgZ3JvdXBzID0gcmVzdWx0LnN0ZG91dFxuICAgIC50cmltKClcbiAgICAuc3BsaXQoL1xccysvKVxuICAgIC5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZS5sZW5ndGggPiAwKTtcbiAgcmV0dXJuIGdyb3Vwcy5pbmNsdWRlcyhncm91cCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbW1hbmRFeGlzdHMoYmluYXJ5OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY0NvbW1hbmQoXCJzaFwiLCBbXCItY1wiLCBgY29tbWFuZCAtdiAke2JpbmFyeX1gXSwge1xuICAgIGNhcHR1cmU6IHRydWUsXG4gICAgaWdub3JlRmFpbHVyZTogdHJ1ZSxcbiAgfSk7XG4gIHJldHVybiByZXN1bHQuY29kZSA9PT0gMDtcbn1cblxuLyoqXG4gKiBTdHJpcHMgbm9uLWNvbW1lbnQgZW50cmllcyBncmFudGluZyBzdWRvIHRvIGB1c2VyYCBhY3Jvc3MgYC9ldGMvc3Vkb2Vycy5kYFxuICogZmlsZXMuXG4gKlxuICogU3RyYXRlZ3k6XG4gKiAgIC0gZW51bWVyYXRlIHJlZ3VsYXIgZmlsZXMgdW5kZXIgYC9ldGMvc3Vkb2Vycy5kYFxuICogICAtIHJlbW92ZSBsaW5lcyB3aG9zZSBmaXJzdCB0b2tlbiBtYXRjaGVzIHRoZSB0YXJnZXQgdXNlciB3aGlsZSBrZWVwaW5nXG4gKiAgICAgY29tbWVudHMvYmxhbmsgbGluZXMgaW50YWN0XG4gKiAgIC0gcmV3cml0ZSBmaWxlcyBpbi1wbGFjZSB3aXRoIG9yaWdpbmFsIG5ld2xpbmUgc3R5bGUgYW5kIHBlcm1pc3Npb25zXG4gKiAgIC0gcmVwb3J0IHdoaWNoIGZpbGVzIHdlcmUgY2hhbmdlZCBzbyBjYWxsZXJzIGNhbiBzdXJmYWNlIHVzZWZ1bCBsb2dzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlbW92ZVVzZXJGcm9tU3Vkb2Vyc0QodXNlcjogc3RyaW5nKTogUHJvbWlzZTxBcnJheTxzdHJpbmc+PiB7XG4gIGNvbnN0IHN1ZG9lcnNEaXIgPSBcIi9ldGMvc3Vkb2Vycy5kXCI7XG4gIGxldCBlbnRyaWVzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gIHRyeSB7XG4gICAgY29uc3QgZGlyRW50cmllcyA9IGF3YWl0IGZzLnJlYWRkaXIoc3Vkb2Vyc0RpciwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuICAgIGVudHJpZXMgPSBkaXJFbnRyaWVzXG4gICAgICAuZmlsdGVyKChkaXJlbnQpID0+IGRpcmVudC5pc0ZpbGUoKSlcbiAgICAgIC5tYXAoKGRpcmVudCkgPT4gcGF0aC5qb2luKHN1ZG9lcnNEaXIsIGRpcmVudC5uYW1lKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKChlcnJvciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUgPT09IFwiRU5PRU5UXCIpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cblxuICBjb25zdCBtZXNzYWdlczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuXG4gIGZvciAoY29uc3QgZW50cnlQYXRoIG9mIGVudHJpZXMpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgc3RyaXBVc2VyRW50cmllc0Zyb21GaWxlKGVudHJ5UGF0aCwgdXNlcik7XG4gICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgIG1lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lc3NhZ2VzO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdHJpcFVzZXJFbnRyaWVzRnJvbUZpbGUoXG4gIGZpbGVQYXRoOiBzdHJpbmcsXG4gIHVzZXI6IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gIGxldCBzdGF0cztcbiAgbGV0IG9yaWdpbmFsOiBzdHJpbmc7XG4gIHRyeSB7XG4gICAgc3RhdHMgPSBhd2FpdCBmcy5zdGF0KGZpbGVQYXRoKTtcbiAgICBvcmlnaW5hbCA9IGF3YWl0IGZzLnJlYWRGaWxlKGZpbGVQYXRoLCBcInV0ZjhcIik7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgbmV3bGluZSA9IG9yaWdpbmFsLmluY2x1ZGVzKFwiXFxyXFxuXCIpID8gXCJcXHJcXG5cIiA6IFwiXFxuXCI7XG4gIGNvbnN0IGVuZHNXaXRoTmV3bGluZSA9XG4gICAgb3JpZ2luYWwuZW5kc1dpdGgoXCJcXG5cIikgfHwgb3JpZ2luYWwuZW5kc1dpdGgoXCJcXHJcXG5cIik7XG4gIGNvbnN0IHJhd0xpbmVzID0gb3JpZ2luYWwuc3BsaXQoL1xccj9cXG4vKTtcbiAgaWYgKHJhd0xpbmVzLmxlbmd0aCA+IDAgJiYgcmF3TGluZXNbcmF3TGluZXMubGVuZ3RoIC0gMV0gPT09IFwiXCIpIHtcbiAgICByYXdMaW5lcy5wb3AoKTtcbiAgfVxuXG4gIGNvbnN0IGZpbHRlcmVkTGluZXM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcblxuICBmb3IgKGNvbnN0IGxpbmUgb2YgcmF3TGluZXMpIHtcbiAgICBjb25zdCB0cmltbWVkTGVhZGluZyA9IGxpbmUudHJpbVN0YXJ0KCk7XG4gICAgaWYgKHRyaW1tZWRMZWFkaW5nLnN0YXJ0c1dpdGgoXCIjXCIpKSB7XG4gICAgICBmaWx0ZXJlZExpbmVzLnB1c2gobGluZSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHRyaW1tZWRMZWFkaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZmlsdGVyZWRMaW5lcy5wdXNoKGxpbmUpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHRva2VucyA9IHRyaW1tZWRMZWFkaW5nLnNwbGl0KC9cXHMrLyk7XG4gICAgaWYgKHRva2Vuc1swXSA9PT0gdXNlcikge1xuICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZmlsdGVyZWRMaW5lcy5wdXNoKGxpbmUpO1xuICB9XG5cbiAgaWYgKCFjaGFuZ2VkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCByZWJ1aWx0ID0gZmlsdGVyZWRMaW5lcy5qb2luKG5ld2xpbmUpICsgKGVuZHNXaXRoTmV3bGluZSA/IG5ld2xpbmUgOiBcIlwiKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoZmlsZVBhdGgsIHJlYnVpbHQsIFwidXRmOFwiKTtcbiAgICBhd2FpdCBmcy5jaG1vZChmaWxlUGF0aCwgc3RhdHMubW9kZSAmIDBvNzc3KTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gYFJlbW92ZWQgJHt1c2VyfSBlbnRyeSBmcm9tICR7ZmlsZVBhdGh9YDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY0NvbW1hbmQoXG4gIGNvbW1hbmQ6IHN0cmluZyxcbiAgYXJnczogQXJyYXk8c3RyaW5nPixcbiAgb3B0aW9uczogRXhlY09wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxFeGVjUmVzdWx0PiB7XG4gIGNvbnN0IGNhcHR1cmUgPSBvcHRpb25zLmNhcHR1cmUgPz8gZmFsc2U7XG4gIGNvbnN0IGNoaWxkID0gc3Bhd24oY29tbWFuZCwgYXJncywge1xuICAgIHN0ZGlvOiBjYXB0dXJlID8gW1wiaWdub3JlXCIsIFwicGlwZVwiLCBcInBpcGVcIl0gOiBcImluaGVyaXRcIixcbiAgfSk7XG5cbiAgbGV0IHN0ZG91dCA9IFwiXCI7XG4gIGxldCBzdGRlcnIgPSBcIlwiO1xuXG4gIGlmIChjYXB0dXJlICYmIGNoaWxkLnN0ZG91dCkge1xuICAgIGNoaWxkLnN0ZG91dC5zZXRFbmNvZGluZyhcInV0ZjhcIik7XG4gICAgY2hpbGQuc3Rkb3V0Lm9uKFwiZGF0YVwiLCAoY2h1bmspID0+IHtcbiAgICAgIHN0ZG91dCArPSBjaHVuaztcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChjYXB0dXJlICYmIGNoaWxkLnN0ZGVycikge1xuICAgIGNoaWxkLnN0ZGVyci5zZXRFbmNvZGluZyhcInV0ZjhcIik7XG4gICAgY2hpbGQuc3RkZXJyLm9uKFwiZGF0YVwiLCAoY2h1bmspID0+IHtcbiAgICAgIHN0ZGVyciArPSBjaHVuaztcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZTxFeGVjUmVzdWx0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY2hpbGQub24oXCJlcnJvclwiLCAoZXJyb3IpID0+IHtcbiAgICAgIHJlamVjdChlcnJvcik7XG4gICAgfSk7XG5cbiAgICBjaGlsZC5vbihcImNsb3NlXCIsIChjb2RlKSA9PiB7XG4gICAgICBjb25zdCBleGl0Q29kZSA9IGNvZGUgPz8gMDtcbiAgICAgIGlmIChleGl0Q29kZSAhPT0gMCAmJiAhb3B0aW9ucy5pZ25vcmVGYWlsdXJlKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgICAgIGBDb21tYW5kIGZhaWxlZDogJHtjb21tYW5kfSAke2FyZ3Muam9pbihcIiBcIil9IChleGl0IGNvZGUgJHtleGl0Q29kZX0pYFxuICAgICAgICApO1xuICAgICAgICAoZXJyb3IgYXMgRXhlY0Vycm9yKS5jb2RlID0gZXhpdENvZGU7XG4gICAgICAgIChlcnJvciBhcyBFeGVjRXJyb3IpLnN0ZG91dCA9IHN0ZG91dDtcbiAgICAgICAgKGVycm9yIGFzIEV4ZWNFcnJvcikuc3RkZXJyID0gc3RkZXJyO1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXNvbHZlKHsgY29kZTogZXhpdENvZGUsIHN0ZG91dCwgc3RkZXJyIH0pO1xuICAgIH0pO1xuICB9KTtcbn1cblxuaW50ZXJmYWNlIEV4ZWNFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29kZTogbnVtYmVyO1xuICBzdGRvdXQ6IHN0cmluZztcbiAgc3RkZXJyOiBzdHJpbmc7XG59XG4iLCAiaW1wb3J0ICogYXMgY29yZSBmcm9tIFwiQGFjdGlvbnMvY29yZVwiO1xuaW1wb3J0IHsgT2N0b2tpdCB9IGZyb20gXCJAb2N0b2tpdC9yZXN0XCI7XG5cbmV4cG9ydCB0eXBlIFdyaXRlQWNjZXNzQ2hlY2sgPVxuICB8IHtcbiAgICAgIHN0YXR1czogXCJhcHByb3ZlZFwiO1xuICAgICAgYWN0b3I6IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAgc3RhdHVzOiBcInJlamVjdGVkXCI7XG4gICAgICBhY3Rvcjogc3RyaW5nO1xuICAgICAgcmVhc29uOiBzdHJpbmc7XG4gICAgfTtcblxudHlwZSBFbnN1cmVXcml0ZUFjY2Vzc09wdGlvbnMgPSB7XG4gIG9jdG9raXQ/OiBPY3Rva2l0O1xuICB0b2tlbj86IHN0cmluZztcbiAgYWN0b3I/OiBzdHJpbmc7XG4gIHJlcG9zaXRvcnk/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBib3QgYWN0b3JzIHN1Y2ggYXMgZGVwZW5kYWJvdCBhcmUgYWxsb3dlZCB3aXRob3V0XG4gICAqIGNoZWNraW5nIGNvbGxhYm9yYXRvciBwZXJtaXNzaW9ucy4gU2V0IHRvIGZhbHNlIHRvIHJlcXVpcmUgYm90cyB0byBwYXNzIHRoZVxuICAgKiBzYW1lIGNoZWNrcyBhcyBodW1hbiB1c2Vycy5cbiAgICovXG4gIGFsbG93Qm90QWN0b3JzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIENvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGFsbG93ZWQgR2l0SHViIHVzZXJuYW1lcyBvciAnKicgdG8gYWxsb3cgYWxsIHVzZXJzLlxuICAgKiBDYXNlLWluc2Vuc2l0aXZlOyBlbXB0eSBzdHJpbmcgb3IgdW5kZWZpbmVkIGRpc2FibGVzIHRoaXMgb3ZlcnJpZGUuXG4gICAqL1xuICBhbGxvd1VzZXJzPzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBDaGVja3MgdGhhdCB0aGUgR2l0SHViIGFjdG9yIHdoaWNoIHRyaWdnZXJlZCB0aGUgY3VycmVudCB3b3JrZmxvdyBoYXMgd3JpdGVcbiAqIGFjY2VzcyB0byB0aGUgcmVwb3NpdG9yeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZUFjdG9ySGFzV3JpdGVBY2Nlc3MoXG4gIG9wdGlvbnM6IEVuc3VyZVdyaXRlQWNjZXNzT3B0aW9ucyA9IHt9LFxuKTogUHJvbWlzZTxXcml0ZUFjY2Vzc0NoZWNrPiB7XG4gIGNvbnN0IGFjdG9yID0gb3B0aW9ucy5hY3RvciA/PyBwcm9jZXNzLmVudi5HSVRIVUJfQUNUT1I7XG4gIGNvbnN0IHJlcG9zaXRvcnkgPSBvcHRpb25zLnJlcG9zaXRvcnkgPz8gcHJvY2Vzcy5lbnYuR0lUSFVCX1JFUE9TSVRPUlk7XG4gIGNvbnN0IGFsbG93Qm90QWN0b3JzID0gb3B0aW9ucy5hbGxvd0JvdEFjdG9ycyA/PyB0cnVlO1xuXG4gIGlmICghYWN0b3IgfHwgYWN0b3IudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IFwicmVqZWN0ZWRcIixcbiAgICAgIGFjdG9yOiBhY3RvciA/PyBcIjx1bmtub3duPlwiLFxuICAgICAgcmVhc29uOiBcIkdJVEhVQl9BQ1RPUiBpcyBub3Qgc2V0OyBjYW5ub3QgZGV0ZXJtaW5lIHRyaWdnZXJpbmcgdXNlci5cIixcbiAgICB9O1xuICB9XG5cbiAgaWYgKCFyZXBvc2l0b3J5IHx8IHJlcG9zaXRvcnkudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IFwicmVqZWN0ZWRcIixcbiAgICAgIGFjdG9yLFxuICAgICAgcmVhc29uOiBcIkdJVEhVQl9SRVBPU0lUT1JZIGlzIG5vdCBzZXQ7IGNhbm5vdCBkZXRlcm1pbmUgdGFyZ2V0IHJlcG9zaXRvcnkuXCIsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IFtvd25lciwgcmVwb10gPSByZXBvc2l0b3J5LnNwbGl0KFwiL1wiKTtcbiAgaWYgKCFvd25lciB8fCAhcmVwbykge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IFwicmVqZWN0ZWRcIixcbiAgICAgIGFjdG9yLFxuICAgICAgcmVhc29uOiBgR0lUSFVCX1JFUE9TSVRPUlkgbXVzdCBiZSBpbiB0aGUgZm9ybWF0ICdvd25lci9yZXBvJywgcmVjZWl2ZWQ6ICcke3JlcG9zaXRvcnl9Jy5gLFxuICAgIH07XG4gIH1cblxuICAvLyBHaXRIdWItYnVpbHQgd29ya2Zsb3dzIChlLmcuIGRlcGVuZGFib3QsIGdpdGh1Yi1hY3Rpb25zW2JvdF0pIGRvIG5vdCBoYXZlIGFcbiAgLy8gbWVhbmluZ2Z1bCB3cml0ZSBwZXJtaXNzaW9uIGNvbmNlcHQuIFRoZXkgaW1wbGljaXRseSBydW4gd2l0aCB0aGUgdG9rZW4ncyBwZXJtaXNzaW9ucy5cbiAgaWYgKGFsbG93Qm90QWN0b3JzICYmIGFjdG9yLmVuZHNXaXRoKFwiW2JvdF1cIikpIHtcbiAgICBjb3JlLmluZm8oYEFjdG9yICcke2FjdG9yfScgaXMgYSBib3QgYWNjb3VudDsgc2tpcHBpbmcgZXhwbGljaXQgcGVybWlzc2lvbiBjaGVjay5gKTtcbiAgICByZXR1cm4geyBzdGF0dXM6IFwiYXBwcm92ZWRcIiwgYWN0b3IgfTtcbiAgfVxuXG4gIC8vIEFsbG93LWxpc3Qgb3ZlcnJpZGU6IGlmIGFsbG93VXNlcnMgaXMgJyonIGFsbG93IGFsbCB1c2Vycy4gSWYgaXQgaXMgYVxuICAvLyBjb21tYS1zZXBhcmF0ZWQgbGlzdCwgYWxsb3cgbGlzdGVkIHVzZXJzIChjYXNlLWluc2Vuc2l0aXZlKSB3aXRob3V0IGNoZWNraW5nXG4gIC8vIGNvbGxhYm9yYXRvciBwZXJtaXNzaW9ucy5cbiAgY29uc3QgYWxsb3dVc2Vyc1NwZWMgPSAob3B0aW9ucy5hbGxvd1VzZXJzID8/IFwiXCIpLnRyaW0oKTtcbiAgaWYgKGFsbG93VXNlcnNTcGVjLmxlbmd0aCA+IDApIHtcbiAgICBpZiAoYWxsb3dVc2Vyc1NwZWMgPT09IFwiKlwiKSB7XG4gICAgICBjb3JlLmluZm8oXCJhbGxvdy11c2Vycz0nKicgc3BlY2lmaWVkOyBhbGxvd2luZyBhbGwgdXNlcnMgdG8gcHJvY2VlZC5cIik7XG4gICAgICByZXR1cm4geyBzdGF0dXM6IFwiYXBwcm92ZWRcIiwgYWN0b3IgfTtcbiAgICB9XG4gICAgY29uc3QgYWxsb3dlZCA9IG5ldyBTZXQoXG4gICAgICBhbGxvd1VzZXJzU3BlY1xuICAgICAgICAuc3BsaXQoXCIsXCIpXG4gICAgICAgIC5tYXAoKHMpID0+IHMudHJpbSgpLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgIC5maWx0ZXIoKHMpID0+IHMubGVuZ3RoID4gMCksXG4gICAgKTtcbiAgICBpZiAoYWxsb3dlZC5oYXMoYWN0b3IudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgIGNvcmUuaW5mbyhgQWN0b3IgJyR7YWN0b3J9JyBpcyBleHBsaWNpdGx5IGFsbG93ZWQgdmlhIGFsbG93LXVzZXJzLmApO1xuICAgICAgcmV0dXJuIHsgc3RhdHVzOiBcImFwcHJvdmVkXCIsIGFjdG9yIH07XG4gICAgfVxuICB9XG5cbiAgY29uc3QgdG9rZW4gPSBvcHRpb25zLnRva2VuID8/IGdldFRva2VuRnJvbUVudigpO1xuICBpZiAoIXRva2VuKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogXCJyZWplY3RlZFwiLFxuICAgICAgYWN0b3IsXG4gICAgICByZWFzb246IFwiQSBHaXRIdWIgdG9rZW4gaXMgcmVxdWlyZWQgdG8gY2hlY2sgcGVybWlzc2lvbnMgKHNldCBHSVRIVUJfVE9LRU4gb3IgR0hfVE9LRU4pLlwiLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBvY3Rva2l0ID0gb3B0aW9ucy5vY3Rva2l0ID8/IG5ldyBPY3Rva2l0KHsgYXV0aDogdG9rZW4gfSk7XG5cbiAgY29yZS5pbmZvKGBDaGVja2luZyB3cml0ZSBhY2Nlc3MgZm9yIGFjdG9yICcke2FjdG9yfScgb24gJHtvd25lcn0vJHtyZXBvfWApO1xuXG4gIGxldCBwZXJtaXNzaW9uOiBzdHJpbmc7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBvY3Rva2l0LnJlcG9zLmdldENvbGxhYm9yYXRvclBlcm1pc3Npb25MZXZlbCh7XG4gICAgICBvd25lcixcbiAgICAgIHJlcG8sXG4gICAgICB1c2VybmFtZTogYWN0b3IsXG4gICAgfSk7XG4gICAgcGVybWlzc2lvbiA9IHJlc3BvbnNlLmRhdGEucGVybWlzc2lvbiA/PyBcIm5vbmVcIjtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoaXNOb3RGb3VuZEVycm9yKGVycm9yKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiBcInJlamVjdGVkXCIsXG4gICAgICAgIGFjdG9yLFxuICAgICAgICByZWFzb246IGBBY3RvciAnJHthY3Rvcn0nIGlzIG5vdCBhIGNvbGxhYm9yYXRvciBvbiAke293bmVyfS8ke3JlcG99OyB3cml0ZSBhY2Nlc3MgaXMgcmVxdWlyZWQuYCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgbWVzc2FnZSA9XG4gICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yXG4gICAgICAgID8gZXJyb3IubWVzc2FnZVxuICAgICAgICA6IFwiRmFpbGVkIHRvIHZlcmlmeSBwZXJtaXNzaW9ucyBmb3IgYWN0b3IgZHVlIHRvIHVua25vd24gZXJyb3IuXCI7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiBcInJlamVjdGVkXCIsXG4gICAgICBhY3RvcixcbiAgICAgIHJlYXNvbjogYEZhaWxlZCB0byB2ZXJpZnkgcGVybWlzc2lvbnMgZm9yICcke2FjdG9yfSc6ICR7bWVzc2FnZX1gLFxuICAgIH07XG4gIH1cblxuICBjb3JlLmluZm8oYEFjdG9yICcke2FjdG9yfScgaGFzIHBlcm1pc3Npb24gbGV2ZWwgJyR7cGVybWlzc2lvbn0nLmApO1xuXG4gIGlmIChwZXJtaXNzaW9uID09PSBcImFkbWluXCIgfHwgcGVybWlzc2lvbiA9PT0gXCJ3cml0ZVwiIHx8IHBlcm1pc3Npb24gPT09IFwibWFpbnRhaW5cIikge1xuICAgIHJldHVybiB7IHN0YXR1czogXCJhcHByb3ZlZFwiLCBhY3RvciB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdGF0dXM6IFwicmVqZWN0ZWRcIixcbiAgICBhY3RvcixcbiAgICByZWFzb246IGBBY3RvciAnJHthY3Rvcn0nIG11c3QgaGF2ZSB3cml0ZSBhY2Nlc3MgdG8gJHtvd25lcn0vJHtyZXBvfS4gRGV0ZWN0ZWQgcGVybWlzc2lvbjogJyR7cGVybWlzc2lvbn0nLmAsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFRva2VuRnJvbUVudigpOiBzdHJpbmcge1xuICBjb25zdCB0b2tlbiA9IHByb2Nlc3MuZW52LkdJVEhVQl9UT0tFTiA/PyBwcm9jZXNzLmVudi5HSF9UT0tFTjtcbiAgcmV0dXJuIHRva2VuICYmIHRva2VuLnRyaW0oKS5sZW5ndGggPiAwID8gdG9rZW4gOiBcIlwiO1xufVxuXG5mdW5jdGlvbiBpc05vdEZvdW5kRXJyb3IoZXJyb3I6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIEJvb2xlYW4oXG4gICAgZXJyb3IgJiYgdHlwZW9mIGVycm9yID09PSBcIm9iamVjdFwiICYmIFwic3RhdHVzXCIgaW4gZXJyb3IgJiYgKGVycm9yIGFzIHsgc3RhdHVzPzogbnVtYmVyIH0pLnN0YXR1cyA9PT0gNDA0LFxuICApO1xufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBnZXRVc2VyQWdlbnQoKSB7XG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yID09PSBcIm9iamVjdFwiICYmIFwidXNlckFnZW50XCIgaW4gbmF2aWdhdG9yKSB7XG4gICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQ7XG4gIH1cblxuICBpZiAodHlwZW9mIHByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiYgcHJvY2Vzcy52ZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYE5vZGUuanMvJHtwcm9jZXNzLnZlcnNpb24uc3Vic3RyKDEpfSAoJHtwcm9jZXNzLnBsYXRmb3JtfTsgJHtcbiAgICAgIHByb2Nlc3MuYXJjaFxuICAgIH0pYDtcbiAgfVxuXG4gIHJldHVybiBcIjxlbnZpcm9ubWVudCB1bmRldGVjdGFibGU+XCI7XG59XG4iLCAiLy8gQHRzLWNoZWNrXG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlcihzdGF0ZSwgbmFtZSwgbWV0aG9kLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgbWV0aG9kICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJtZXRob2QgZm9yIGJlZm9yZSBob29rIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcbiAgfVxuXG4gIGlmICghb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgcmV0dXJuIG5hbWUucmV2ZXJzZSgpLnJlZHVjZSgoY2FsbGJhY2ssIG5hbWUpID0+IHtcbiAgICAgIHJldHVybiByZWdpc3Rlci5iaW5kKG51bGwsIHN0YXRlLCBuYW1lLCBjYWxsYmFjaywgb3B0aW9ucyk7XG4gICAgfSwgbWV0aG9kKSgpO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgIGlmICghc3RhdGUucmVnaXN0cnlbbmFtZV0pIHtcbiAgICAgIHJldHVybiBtZXRob2Qob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlLnJlZ2lzdHJ5W25hbWVdLnJlZHVjZSgobWV0aG9kLCByZWdpc3RlcmVkKSA9PiB7XG4gICAgICByZXR1cm4gcmVnaXN0ZXJlZC5ob29rLmJpbmQobnVsbCwgbWV0aG9kLCBvcHRpb25zKTtcbiAgICB9LCBtZXRob2QpKCk7XG4gIH0pO1xufVxuIiwgIi8vIEB0cy1jaGVja1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkSG9vayhzdGF0ZSwga2luZCwgbmFtZSwgaG9vaykge1xuICBjb25zdCBvcmlnID0gaG9vaztcbiAgaWYgKCFzdGF0ZS5yZWdpc3RyeVtuYW1lXSkge1xuICAgIHN0YXRlLnJlZ2lzdHJ5W25hbWVdID0gW107XG4gIH1cblxuICBpZiAoa2luZCA9PT0gXCJiZWZvcmVcIikge1xuICAgIGhvb2sgPSAobWV0aG9kLCBvcHRpb25zKSA9PiB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgLnRoZW4ob3JpZy5iaW5kKG51bGwsIG9wdGlvbnMpKVxuICAgICAgICAudGhlbihtZXRob2QuYmluZChudWxsLCBvcHRpb25zKSk7XG4gICAgfTtcbiAgfVxuXG4gIGlmIChraW5kID09PSBcImFmdGVyXCIpIHtcbiAgICBob29rID0gKG1ldGhvZCwgb3B0aW9ucykgPT4ge1xuICAgICAgbGV0IHJlc3VsdDtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAudGhlbihtZXRob2QuYmluZChudWxsLCBvcHRpb25zKSlcbiAgICAgICAgLnRoZW4oKHJlc3VsdF8pID0+IHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHRfO1xuICAgICAgICAgIHJldHVybiBvcmlnKHJlc3VsdCwgb3B0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgaWYgKGtpbmQgPT09IFwiZXJyb3JcIikge1xuICAgIGhvb2sgPSAobWV0aG9kLCBvcHRpb25zKSA9PiB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgLnRoZW4obWV0aG9kLmJpbmQobnVsbCwgb3B0aW9ucykpXG4gICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICByZXR1cm4gb3JpZyhlcnJvciwgb3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICBzdGF0ZS5yZWdpc3RyeVtuYW1lXS5wdXNoKHtcbiAgICBob29rOiBob29rLFxuICAgIG9yaWc6IG9yaWcsXG4gIH0pO1xufVxuIiwgIi8vIEB0cy1jaGVja1xuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlSG9vayhzdGF0ZSwgbmFtZSwgbWV0aG9kKSB7XG4gIGlmICghc3RhdGUucmVnaXN0cnlbbmFtZV0pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBpbmRleCA9IHN0YXRlLnJlZ2lzdHJ5W25hbWVdXG4gICAgLm1hcCgocmVnaXN0ZXJlZCkgPT4ge1xuICAgICAgcmV0dXJuIHJlZ2lzdGVyZWQub3JpZztcbiAgICB9KVxuICAgIC5pbmRleE9mKG1ldGhvZCk7XG5cbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRlLnJlZ2lzdHJ5W25hbWVdLnNwbGljZShpbmRleCwgMSk7XG59XG4iLCAiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7IHJlZ2lzdGVyIH0gZnJvbSBcIi4vbGliL3JlZ2lzdGVyLmpzXCI7XG5pbXBvcnQgeyBhZGRIb29rIH0gZnJvbSBcIi4vbGliL2FkZC5qc1wiO1xuaW1wb3J0IHsgcmVtb3ZlSG9vayB9IGZyb20gXCIuL2xpYi9yZW1vdmUuanNcIjtcblxuLy8gYmluZCB3aXRoIGFycmF5IG9mIGFyZ3VtZW50czogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIxNzkyOTEzXG5jb25zdCBiaW5kID0gRnVuY3Rpb24uYmluZDtcbmNvbnN0IGJpbmRhYmxlID0gYmluZC5iaW5kKGJpbmQpO1xuXG5mdW5jdGlvbiBiaW5kQXBpKGhvb2ssIHN0YXRlLCBuYW1lKSB7XG4gIGNvbnN0IHJlbW92ZUhvb2tSZWYgPSBiaW5kYWJsZShyZW1vdmVIb29rLCBudWxsKS5hcHBseShcbiAgICBudWxsLFxuICAgIG5hbWUgPyBbc3RhdGUsIG5hbWVdIDogW3N0YXRlXVxuICApO1xuICBob29rLmFwaSA9IHsgcmVtb3ZlOiByZW1vdmVIb29rUmVmIH07XG4gIGhvb2sucmVtb3ZlID0gcmVtb3ZlSG9va1JlZjtcbiAgW1wiYmVmb3JlXCIsIFwiZXJyb3JcIiwgXCJhZnRlclwiLCBcIndyYXBcIl0uZm9yRWFjaCgoa2luZCkgPT4ge1xuICAgIGNvbnN0IGFyZ3MgPSBuYW1lID8gW3N0YXRlLCBraW5kLCBuYW1lXSA6IFtzdGF0ZSwga2luZF07XG4gICAgaG9va1traW5kXSA9IGhvb2suYXBpW2tpbmRdID0gYmluZGFibGUoYWRkSG9vaywgbnVsbCkuYXBwbHkobnVsbCwgYXJncyk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBTaW5ndWxhcigpIHtcbiAgY29uc3Qgc2luZ3VsYXJIb29rTmFtZSA9IFN5bWJvbChcIlNpbmd1bGFyXCIpO1xuICBjb25zdCBzaW5ndWxhckhvb2tTdGF0ZSA9IHtcbiAgICByZWdpc3RyeToge30sXG4gIH07XG4gIGNvbnN0IHNpbmd1bGFySG9vayA9IHJlZ2lzdGVyLmJpbmQobnVsbCwgc2luZ3VsYXJIb29rU3RhdGUsIHNpbmd1bGFySG9va05hbWUpO1xuICBiaW5kQXBpKHNpbmd1bGFySG9vaywgc2luZ3VsYXJIb29rU3RhdGUsIHNpbmd1bGFySG9va05hbWUpO1xuICByZXR1cm4gc2luZ3VsYXJIb29rO1xufVxuXG5mdW5jdGlvbiBDb2xsZWN0aW9uKCkge1xuICBjb25zdCBzdGF0ZSA9IHtcbiAgICByZWdpc3RyeToge30sXG4gIH07XG5cbiAgY29uc3QgaG9vayA9IHJlZ2lzdGVyLmJpbmQobnVsbCwgc3RhdGUpO1xuICBiaW5kQXBpKGhvb2ssIHN0YXRlKTtcblxuICByZXR1cm4gaG9vaztcbn1cblxuZXhwb3J0IGRlZmF1bHQgeyBTaW5ndWxhciwgQ29sbGVjdGlvbiB9O1xuIiwgIi8vIHBrZy9kaXN0LXNyYy9kZWZhdWx0cy5qc1xuaW1wb3J0IHsgZ2V0VXNlckFnZW50IH0gZnJvbSBcInVuaXZlcnNhbC11c2VyLWFnZW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiMC4wLjAtZGV2ZWxvcG1lbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2RlZmF1bHRzLmpzXG52YXIgdXNlckFnZW50ID0gYG9jdG9raXQtZW5kcG9pbnQuanMvJHtWRVJTSU9OfSAke2dldFVzZXJBZ2VudCgpfWA7XG52YXIgREVGQVVMVFMgPSB7XG4gIG1ldGhvZDogXCJHRVRcIixcbiAgYmFzZVVybDogXCJodHRwczovL2FwaS5naXRodWIuY29tXCIsXG4gIGhlYWRlcnM6IHtcbiAgICBhY2NlcHQ6IFwiYXBwbGljYXRpb24vdm5kLmdpdGh1Yi52Mytqc29uXCIsXG4gICAgXCJ1c2VyLWFnZW50XCI6IHVzZXJBZ2VudFxuICB9LFxuICBtZWRpYVR5cGU6IHtcbiAgICBmb3JtYXQ6IFwiXCJcbiAgfVxufTtcblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvbG93ZXJjYXNlLWtleXMuanNcbmZ1bmN0aW9uIGxvd2VyY2FzZUtleXMob2JqZWN0KSB7XG4gIGlmICghb2JqZWN0KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpLnJlZHVjZSgobmV3T2JqLCBrZXkpID0+IHtcbiAgICBuZXdPYmpba2V5LnRvTG93ZXJDYXNlKCldID0gb2JqZWN0W2tleV07XG4gICAgcmV0dXJuIG5ld09iajtcbiAgfSwge30pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9pcy1wbGFpbi1vYmplY3QuanNcbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSAhPT0gXCJbb2JqZWN0IE9iamVjdF1cIikgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XG4gIGlmIChwcm90byA9PT0gbnVsbCkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IEN0b3IgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocHJvdG8sIFwiY29uc3RydWN0b3JcIikgJiYgcHJvdG8uY29uc3RydWN0b3I7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PT0gXCJmdW5jdGlvblwiICYmIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmIEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKEN0b3IpID09PSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCh2YWx1ZSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL21lcmdlLWRlZXAuanNcbmZ1bmN0aW9uIG1lcmdlRGVlcChkZWZhdWx0cywgb3B0aW9ucykge1xuICBjb25zdCByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0cyk7XG4gIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KG9wdGlvbnNba2V5XSkpIHtcbiAgICAgIGlmICghKGtleSBpbiBkZWZhdWx0cykpIE9iamVjdC5hc3NpZ24ocmVzdWx0LCB7IFtrZXldOiBvcHRpb25zW2tleV0gfSk7XG4gICAgICBlbHNlIHJlc3VsdFtrZXldID0gbWVyZ2VEZWVwKGRlZmF1bHRzW2tleV0sIG9wdGlvbnNba2V5XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ocmVzdWx0LCB7IFtrZXldOiBvcHRpb25zW2tleV0gfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvcmVtb3ZlLXVuZGVmaW5lZC1wcm9wZXJ0aWVzLmpzXG5mdW5jdGlvbiByZW1vdmVVbmRlZmluZWRQcm9wZXJ0aWVzKG9iaikge1xuICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICBpZiAob2JqW2tleV0gPT09IHZvaWQgMCkge1xuICAgICAgZGVsZXRlIG9ialtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvbWVyZ2UuanNcbmZ1bmN0aW9uIG1lcmdlKGRlZmF1bHRzLCByb3V0ZSwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIHJvdXRlID09PSBcInN0cmluZ1wiKSB7XG4gICAgbGV0IFttZXRob2QsIHVybF0gPSByb3V0ZS5zcGxpdChcIiBcIik7XG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24odXJsID8geyBtZXRob2QsIHVybCB9IDogeyB1cmw6IG1ldGhvZCB9LCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgcm91dGUpO1xuICB9XG4gIG9wdGlvbnMuaGVhZGVycyA9IGxvd2VyY2FzZUtleXMob3B0aW9ucy5oZWFkZXJzKTtcbiAgcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhvcHRpb25zKTtcbiAgcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhvcHRpb25zLmhlYWRlcnMpO1xuICBjb25zdCBtZXJnZWRPcHRpb25zID0gbWVyZ2VEZWVwKGRlZmF1bHRzIHx8IHt9LCBvcHRpb25zKTtcbiAgaWYgKG9wdGlvbnMudXJsID09PSBcIi9ncmFwaHFsXCIpIHtcbiAgICBpZiAoZGVmYXVsdHMgJiYgZGVmYXVsdHMubWVkaWFUeXBlLnByZXZpZXdzPy5sZW5ndGgpIHtcbiAgICAgIG1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzID0gZGVmYXVsdHMubWVkaWFUeXBlLnByZXZpZXdzLmZpbHRlcihcbiAgICAgICAgKHByZXZpZXcpID0+ICFtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cy5pbmNsdWRlcyhwcmV2aWV3KVxuICAgICAgKS5jb25jYXQobWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MpO1xuICAgIH1cbiAgICBtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyA9IChtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyB8fCBbXSkubWFwKChwcmV2aWV3KSA9PiBwcmV2aWV3LnJlcGxhY2UoLy1wcmV2aWV3LywgXCJcIikpO1xuICB9XG4gIHJldHVybiBtZXJnZWRPcHRpb25zO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9hZGQtcXVlcnktcGFyYW1ldGVycy5qc1xuZnVuY3Rpb24gYWRkUXVlcnlQYXJhbWV0ZXJzKHVybCwgcGFyYW1ldGVycykge1xuICBjb25zdCBzZXBhcmF0b3IgPSAvXFw/Ly50ZXN0KHVybCkgPyBcIiZcIiA6IFwiP1wiO1xuICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKHBhcmFtZXRlcnMpO1xuICBpZiAobmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICByZXR1cm4gdXJsICsgc2VwYXJhdG9yICsgbmFtZXMubWFwKChuYW1lKSA9PiB7XG4gICAgaWYgKG5hbWUgPT09IFwicVwiKSB7XG4gICAgICByZXR1cm4gXCJxPVwiICsgcGFyYW1ldGVycy5xLnNwbGl0KFwiK1wiKS5tYXAoZW5jb2RlVVJJQ29tcG9uZW50KS5qb2luKFwiK1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIGAke25hbWV9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtZXRlcnNbbmFtZV0pfWA7XG4gIH0pLmpvaW4oXCImXCIpO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9leHRyYWN0LXVybC12YXJpYWJsZS1uYW1lcy5qc1xudmFyIHVybFZhcmlhYmxlUmVnZXggPSAvXFx7W157fX1dK1xcfS9nO1xuZnVuY3Rpb24gcmVtb3ZlTm9uQ2hhcnModmFyaWFibGVOYW1lKSB7XG4gIHJldHVybiB2YXJpYWJsZU5hbWUucmVwbGFjZSgvKD86XlxcVyspfCg/Oig/PCFcXFcpXFxXKyQpL2csIFwiXCIpLnNwbGl0KC8sLyk7XG59XG5mdW5jdGlvbiBleHRyYWN0VXJsVmFyaWFibGVOYW1lcyh1cmwpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IHVybC5tYXRjaCh1cmxWYXJpYWJsZVJlZ2V4KTtcbiAgaWYgKCFtYXRjaGVzKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBtYXRjaGVzLm1hcChyZW1vdmVOb25DaGFycykucmVkdWNlKChhLCBiKSA9PiBhLmNvbmNhdChiKSwgW10pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9vbWl0LmpzXG5mdW5jdGlvbiBvbWl0KG9iamVjdCwga2V5c1RvT21pdCkge1xuICBjb25zdCByZXN1bHQgPSB7IF9fcHJvdG9fXzogbnVsbCB9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmplY3QpKSB7XG4gICAgaWYgKGtleXNUb09taXQuaW5kZXhPZihrZXkpID09PSAtMSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBvYmplY3Rba2V5XTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvdXJsLXRlbXBsYXRlLmpzXG5mdW5jdGlvbiBlbmNvZGVSZXNlcnZlZChzdHIpIHtcbiAgcmV0dXJuIHN0ci5zcGxpdCgvKCVbMC05QS1GYS1mXXsyfSkvZykubWFwKGZ1bmN0aW9uKHBhcnQpIHtcbiAgICBpZiAoIS8lWzAtOUEtRmEtZl0vLnRlc3QocGFydCkpIHtcbiAgICAgIHBhcnQgPSBlbmNvZGVVUkkocGFydCkucmVwbGFjZSgvJTVCL2csIFwiW1wiKS5yZXBsYWNlKC8lNUQvZywgXCJdXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcGFydDtcbiAgfSkuam9pbihcIlwiKTtcbn1cbmZ1bmN0aW9uIGVuY29kZVVucmVzZXJ2ZWQoc3RyKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC9bIScoKSpdL2csIGZ1bmN0aW9uKGMpIHtcbiAgICByZXR1cm4gXCIlXCIgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlLCBrZXkpIHtcbiAgdmFsdWUgPSBvcGVyYXRvciA9PT0gXCIrXCIgfHwgb3BlcmF0b3IgPT09IFwiI1wiID8gZW5jb2RlUmVzZXJ2ZWQodmFsdWUpIDogZW5jb2RlVW5yZXNlcnZlZCh2YWx1ZSk7XG4gIGlmIChrZXkpIHtcbiAgICByZXR1cm4gZW5jb2RlVW5yZXNlcnZlZChrZXkpICsgXCI9XCIgKyB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzRGVmaW5lZCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZvaWQgMCAmJiB2YWx1ZSAhPT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpIHtcbiAgcmV0dXJuIG9wZXJhdG9yID09PSBcIjtcIiB8fCBvcGVyYXRvciA9PT0gXCImXCIgfHwgb3BlcmF0b3IgPT09IFwiP1wiO1xufVxuZnVuY3Rpb24gZ2V0VmFsdWVzKGNvbnRleHQsIG9wZXJhdG9yLCBrZXksIG1vZGlmaWVyKSB7XG4gIHZhciB2YWx1ZSA9IGNvbnRleHRba2V5XSwgcmVzdWx0ID0gW107XG4gIGlmIChpc0RlZmluZWQodmFsdWUpICYmIHZhbHVlICE9PSBcIlwiKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgaWYgKG1vZGlmaWVyICYmIG1vZGlmaWVyICE9PSBcIipcIikge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCBwYXJzZUludChtb2RpZmllciwgMTApKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUsIGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpID8ga2V5IDogXCJcIilcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChtb2RpZmllciA9PT0gXCIqXCIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUuZmlsdGVyKGlzRGVmaW5lZCkuZm9yRWFjaChmdW5jdGlvbih2YWx1ZTIpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUyLCBpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSA/IGtleSA6IFwiXCIpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQodmFsdWVba10pKSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZVtrXSwgaykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB0bXAgPSBbXTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUuZmlsdGVyKGlzRGVmaW5lZCkuZm9yRWFjaChmdW5jdGlvbih2YWx1ZTIpIHtcbiAgICAgICAgICAgIHRtcC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZTIpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHZhbHVlW2tdKSkge1xuICAgICAgICAgICAgICB0bXAucHVzaChlbmNvZGVVbnJlc2VydmVkKGspKTtcbiAgICAgICAgICAgICAgdG1wLnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlW2tdLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNLZXlPcGVyYXRvcihvcGVyYXRvcikpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGVVbnJlc2VydmVkKGtleSkgKyBcIj1cIiArIHRtcC5qb2luKFwiLFwiKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodG1wLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHRtcC5qb2luKFwiLFwiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKG9wZXJhdG9yID09PSBcIjtcIikge1xuICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBcIlwiICYmIChvcGVyYXRvciA9PT0gXCImXCIgfHwgb3BlcmF0b3IgPT09IFwiP1wiKSkge1xuICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpICsgXCI9XCIpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFwiXCIpIHtcbiAgICAgIHJlc3VsdC5wdXNoKFwiXCIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gcGFyc2VVcmwodGVtcGxhdGUpIHtcbiAgcmV0dXJuIHtcbiAgICBleHBhbmQ6IGV4cGFuZC5iaW5kKG51bGwsIHRlbXBsYXRlKVxuICB9O1xufVxuZnVuY3Rpb24gZXhwYW5kKHRlbXBsYXRlLCBjb250ZXh0KSB7XG4gIHZhciBvcGVyYXRvcnMgPSBbXCIrXCIsIFwiI1wiLCBcIi5cIiwgXCIvXCIsIFwiO1wiLCBcIj9cIiwgXCImXCJdO1xuICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnJlcGxhY2UoXG4gICAgL1xceyhbXlxce1xcfV0rKVxcfXwoW15cXHtcXH1dKykvZyxcbiAgICBmdW5jdGlvbihfLCBleHByZXNzaW9uLCBsaXRlcmFsKSB7XG4gICAgICBpZiAoZXhwcmVzc2lvbikge1xuICAgICAgICBsZXQgb3BlcmF0b3IgPSBcIlwiO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgaWYgKG9wZXJhdG9ycy5pbmRleE9mKGV4cHJlc3Npb24uY2hhckF0KDApKSAhPT0gLTEpIHtcbiAgICAgICAgICBvcGVyYXRvciA9IGV4cHJlc3Npb24uY2hhckF0KDApO1xuICAgICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnN1YnN0cigxKTtcbiAgICAgICAgfVxuICAgICAgICBleHByZXNzaW9uLnNwbGl0KC8sL2cpLmZvckVhY2goZnVuY3Rpb24odmFyaWFibGUpIHtcbiAgICAgICAgICB2YXIgdG1wID0gLyhbXjpcXCpdKikoPzo6KFxcZCspfChcXCopKT8vLmV4ZWModmFyaWFibGUpO1xuICAgICAgICAgIHZhbHVlcy5wdXNoKGdldFZhbHVlcyhjb250ZXh0LCBvcGVyYXRvciwgdG1wWzFdLCB0bXBbMl0gfHwgdG1wWzNdKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAob3BlcmF0b3IgJiYgb3BlcmF0b3IgIT09IFwiK1wiKSB7XG4gICAgICAgICAgdmFyIHNlcGFyYXRvciA9IFwiLFwiO1xuICAgICAgICAgIGlmIChvcGVyYXRvciA9PT0gXCI/XCIpIHtcbiAgICAgICAgICAgIHNlcGFyYXRvciA9IFwiJlwiO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0b3IgIT09IFwiI1wiKSB7XG4gICAgICAgICAgICBzZXBhcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICh2YWx1ZXMubGVuZ3RoICE9PSAwID8gb3BlcmF0b3IgOiBcIlwiKSArIHZhbHVlcy5qb2luKHNlcGFyYXRvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlcy5qb2luKFwiLFwiKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGVuY29kZVJlc2VydmVkKGxpdGVyYWwpO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbiAgaWYgKHRlbXBsYXRlID09PSBcIi9cIikge1xuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZSgvXFwvJC8sIFwiXCIpO1xuICB9XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9wYXJzZS5qc1xuZnVuY3Rpb24gcGFyc2Uob3B0aW9ucykge1xuICBsZXQgbWV0aG9kID0gb3B0aW9ucy5tZXRob2QudG9VcHBlckNhc2UoKTtcbiAgbGV0IHVybCA9IChvcHRpb25zLnVybCB8fCBcIi9cIikucmVwbGFjZSgvOihbYS16XVxcdyspL2csIFwieyQxfVwiKTtcbiAgbGV0IGhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmhlYWRlcnMpO1xuICBsZXQgYm9keTtcbiAgbGV0IHBhcmFtZXRlcnMgPSBvbWl0KG9wdGlvbnMsIFtcbiAgICBcIm1ldGhvZFwiLFxuICAgIFwiYmFzZVVybFwiLFxuICAgIFwidXJsXCIsXG4gICAgXCJoZWFkZXJzXCIsXG4gICAgXCJyZXF1ZXN0XCIsXG4gICAgXCJtZWRpYVR5cGVcIlxuICBdKTtcbiAgY29uc3QgdXJsVmFyaWFibGVOYW1lcyA9IGV4dHJhY3RVcmxWYXJpYWJsZU5hbWVzKHVybCk7XG4gIHVybCA9IHBhcnNlVXJsKHVybCkuZXhwYW5kKHBhcmFtZXRlcnMpO1xuICBpZiAoIS9eaHR0cC8udGVzdCh1cmwpKSB7XG4gICAgdXJsID0gb3B0aW9ucy5iYXNlVXJsICsgdXJsO1xuICB9XG4gIGNvbnN0IG9taXR0ZWRQYXJhbWV0ZXJzID0gT2JqZWN0LmtleXMob3B0aW9ucykuZmlsdGVyKChvcHRpb24pID0+IHVybFZhcmlhYmxlTmFtZXMuaW5jbHVkZXMob3B0aW9uKSkuY29uY2F0KFwiYmFzZVVybFwiKTtcbiAgY29uc3QgcmVtYWluaW5nUGFyYW1ldGVycyA9IG9taXQocGFyYW1ldGVycywgb21pdHRlZFBhcmFtZXRlcnMpO1xuICBjb25zdCBpc0JpbmFyeVJlcXVlc3QgPSAvYXBwbGljYXRpb25cXC9vY3RldC1zdHJlYW0vaS50ZXN0KGhlYWRlcnMuYWNjZXB0KTtcbiAgaWYgKCFpc0JpbmFyeVJlcXVlc3QpIHtcbiAgICBpZiAob3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0KSB7XG4gICAgICBoZWFkZXJzLmFjY2VwdCA9IGhlYWRlcnMuYWNjZXB0LnNwbGl0KC8sLykubWFwKFxuICAgICAgICAoZm9ybWF0KSA9PiBmb3JtYXQucmVwbGFjZShcbiAgICAgICAgICAvYXBwbGljYXRpb25cXC92bmQoXFwuXFx3KykoXFwudjMpPyhcXC5cXHcrKT8oXFwranNvbik/JC8sXG4gICAgICAgICAgYGFwcGxpY2F0aW9uL3ZuZCQxJDIuJHtvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXR9YFxuICAgICAgICApXG4gICAgICApLmpvaW4oXCIsXCIpO1xuICAgIH1cbiAgICBpZiAodXJsLmVuZHNXaXRoKFwiL2dyYXBocWxcIikpIHtcbiAgICAgIGlmIChvcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHByZXZpZXdzRnJvbUFjY2VwdEhlYWRlciA9IGhlYWRlcnMuYWNjZXB0Lm1hdGNoKC8oPzwhW1xcdy1dKVtcXHctXSsoPz0tcHJldmlldykvZykgfHwgW107XG4gICAgICAgIGhlYWRlcnMuYWNjZXB0ID0gcHJldmlld3NGcm9tQWNjZXB0SGVhZGVyLmNvbmNhdChvcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cykubWFwKChwcmV2aWV3KSA9PiB7XG4gICAgICAgICAgY29uc3QgZm9ybWF0ID0gb3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0ID8gYC4ke29wdGlvbnMubWVkaWFUeXBlLmZvcm1hdH1gIDogXCIranNvblwiO1xuICAgICAgICAgIHJldHVybiBgYXBwbGljYXRpb24vdm5kLmdpdGh1Yi4ke3ByZXZpZXd9LXByZXZpZXcke2Zvcm1hdH1gO1xuICAgICAgICB9KS5qb2luKFwiLFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKFtcIkdFVFwiLCBcIkhFQURcIl0uaW5jbHVkZXMobWV0aG9kKSkge1xuICAgIHVybCA9IGFkZFF1ZXJ5UGFyYW1ldGVycyh1cmwsIHJlbWFpbmluZ1BhcmFtZXRlcnMpO1xuICB9IGVsc2Uge1xuICAgIGlmIChcImRhdGFcIiBpbiByZW1haW5pbmdQYXJhbWV0ZXJzKSB7XG4gICAgICBib2R5ID0gcmVtYWluaW5nUGFyYW1ldGVycy5kYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoT2JqZWN0LmtleXMocmVtYWluaW5nUGFyYW1ldGVycykubGVuZ3RoKSB7XG4gICAgICAgIGJvZHkgPSByZW1haW5pbmdQYXJhbWV0ZXJzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoIWhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0gJiYgdHlwZW9mIGJvZHkgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBoZWFkZXJzW1wiY29udGVudC10eXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCI7XG4gIH1cbiAgaWYgKFtcIlBBVENIXCIsIFwiUFVUXCJdLmluY2x1ZGVzKG1ldGhvZCkgJiYgdHlwZW9mIGJvZHkgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBib2R5ID0gXCJcIjtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmFzc2lnbihcbiAgICB7IG1ldGhvZCwgdXJsLCBoZWFkZXJzIH0sXG4gICAgdHlwZW9mIGJvZHkgIT09IFwidW5kZWZpbmVkXCIgPyB7IGJvZHkgfSA6IG51bGwsXG4gICAgb3B0aW9ucy5yZXF1ZXN0ID8geyByZXF1ZXN0OiBvcHRpb25zLnJlcXVlc3QgfSA6IG51bGxcbiAgKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2VuZHBvaW50LXdpdGgtZGVmYXVsdHMuanNcbmZ1bmN0aW9uIGVuZHBvaW50V2l0aERlZmF1bHRzKGRlZmF1bHRzLCByb3V0ZSwgb3B0aW9ucykge1xuICByZXR1cm4gcGFyc2UobWVyZ2UoZGVmYXVsdHMsIHJvdXRlLCBvcHRpb25zKSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG5mdW5jdGlvbiB3aXRoRGVmYXVsdHMob2xkRGVmYXVsdHMsIG5ld0RlZmF1bHRzKSB7XG4gIGNvbnN0IERFRkFVTFRTMiA9IG1lcmdlKG9sZERlZmF1bHRzLCBuZXdEZWZhdWx0cyk7XG4gIGNvbnN0IGVuZHBvaW50MiA9IGVuZHBvaW50V2l0aERlZmF1bHRzLmJpbmQobnVsbCwgREVGQVVMVFMyKTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oZW5kcG9pbnQyLCB7XG4gICAgREVGQVVMVFM6IERFRkFVTFRTMixcbiAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgREVGQVVMVFMyKSxcbiAgICBtZXJnZTogbWVyZ2UuYmluZChudWxsLCBERUZBVUxUUzIpLFxuICAgIHBhcnNlXG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBlbmRwb2ludCA9IHdpdGhEZWZhdWx0cyhudWxsLCBERUZBVUxUUyk7XG5leHBvcnQge1xuICBlbmRwb2ludFxufTtcbiIsICIvLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbmltcG9ydCB7IGVuZHBvaW50IH0gZnJvbSBcIkBvY3Rva2l0L2VuZHBvaW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy9kZWZhdWx0cy5qc1xuaW1wb3J0IHsgZ2V0VXNlckFnZW50IH0gZnJvbSBcInVuaXZlcnNhbC11c2VyLWFnZW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiOS4yLjRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2RlZmF1bHRzLmpzXG52YXIgZGVmYXVsdHNfZGVmYXVsdCA9IHtcbiAgaGVhZGVyczoge1xuICAgIFwidXNlci1hZ2VudFwiOiBgb2N0b2tpdC1yZXF1ZXN0LmpzLyR7VkVSU0lPTn0gJHtnZXRVc2VyQWdlbnQoKX1gXG4gIH1cbn07XG5cbi8vIHBrZy9kaXN0LXNyYy9mZXRjaC13cmFwcGVyLmpzXG5pbXBvcnQgeyBzYWZlUGFyc2UgfSBmcm9tIFwiZmFzdC1jb250ZW50LXR5cGUtcGFyc2VcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2lzLXBsYWluLW9iamVjdC5qc1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpICE9PSBcIltvYmplY3QgT2JqZWN0XVwiKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgQ3RvciA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgXCJjb25zdHJ1Y3RvclwiKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiYgRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwoQ3RvcikgPT09IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKHZhbHVlKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2ZldGNoLXdyYXBwZXIuanNcbmltcG9ydCB7IFJlcXVlc3RFcnJvciB9IGZyb20gXCJAb2N0b2tpdC9yZXF1ZXN0LWVycm9yXCI7XG5hc3luYyBmdW5jdGlvbiBmZXRjaFdyYXBwZXIocmVxdWVzdE9wdGlvbnMpIHtcbiAgY29uc3QgZmV0Y2ggPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0Py5mZXRjaCB8fCBnbG9iYWxUaGlzLmZldGNoO1xuICBpZiAoIWZldGNoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJmZXRjaCBpcyBub3Qgc2V0LiBQbGVhc2UgcGFzcyBhIGZldGNoIGltcGxlbWVudGF0aW9uIGFzIG5ldyBPY3Rva2l0KHsgcmVxdWVzdDogeyBmZXRjaCB9fSkuIExlYXJuIG1vcmUgYXQgaHR0cHM6Ly9naXRodWIuY29tL29jdG9raXQvb2N0b2tpdC5qcy8jZmV0Y2gtbWlzc2luZ1wiXG4gICAgKTtcbiAgfVxuICBjb25zdCBsb2cgPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0Py5sb2cgfHwgY29uc29sZTtcbiAgY29uc3QgcGFyc2VTdWNjZXNzUmVzcG9uc2VCb2R5ID0gcmVxdWVzdE9wdGlvbnMucmVxdWVzdD8ucGFyc2VTdWNjZXNzUmVzcG9uc2VCb2R5ICE9PSBmYWxzZTtcbiAgY29uc3QgYm9keSA9IGlzUGxhaW5PYmplY3QocmVxdWVzdE9wdGlvbnMuYm9keSkgfHwgQXJyYXkuaXNBcnJheShyZXF1ZXN0T3B0aW9ucy5ib2R5KSA/IEpTT04uc3RyaW5naWZ5KHJlcXVlc3RPcHRpb25zLmJvZHkpIDogcmVxdWVzdE9wdGlvbnMuYm9keTtcbiAgY29uc3QgcmVxdWVzdEhlYWRlcnMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMocmVxdWVzdE9wdGlvbnMuaGVhZGVycykubWFwKChbbmFtZSwgdmFsdWVdKSA9PiBbXG4gICAgICBuYW1lLFxuICAgICAgU3RyaW5nKHZhbHVlKVxuICAgIF0pXG4gICk7XG4gIGxldCBmZXRjaFJlc3BvbnNlO1xuICB0cnkge1xuICAgIGZldGNoUmVzcG9uc2UgPSBhd2FpdCBmZXRjaChyZXF1ZXN0T3B0aW9ucy51cmwsIHtcbiAgICAgIG1ldGhvZDogcmVxdWVzdE9wdGlvbnMubWV0aG9kLFxuICAgICAgYm9keSxcbiAgICAgIHJlZGlyZWN0OiByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0Py5yZWRpcmVjdCxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgc2lnbmFsOiByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0Py5zaWduYWwsXG4gICAgICAvLyBkdXBsZXggbXVzdCBiZSBzZXQgaWYgcmVxdWVzdC5ib2R5IGlzIFJlYWRhYmxlU3RyZWFtIG9yIEFzeW5jIEl0ZXJhYmxlcy5cbiAgICAgIC8vIFNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLXJlcXVlc3Rpbml0LWR1cGxleC5cbiAgICAgIC4uLnJlcXVlc3RPcHRpb25zLmJvZHkgJiYgeyBkdXBsZXg6IFwiaGFsZlwiIH1cbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsZXQgbWVzc2FnZSA9IFwiVW5rbm93biBFcnJvclwiO1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IubmFtZSA9PT0gXCJBYm9ydEVycm9yXCIpIHtcbiAgICAgICAgZXJyb3Iuc3RhdHVzID0gNTAwO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIG1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlO1xuICAgICAgaWYgKGVycm9yLm5hbWUgPT09IFwiVHlwZUVycm9yXCIgJiYgXCJjYXVzZVwiIGluIGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvci5jYXVzZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgbWVzc2FnZSA9IGVycm9yLmNhdXNlLm1lc3NhZ2U7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVycm9yLmNhdXNlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgbWVzc2FnZSA9IGVycm9yLmNhdXNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJlcXVlc3RFcnJvciA9IG5ldyBSZXF1ZXN0RXJyb3IobWVzc2FnZSwgNTAwLCB7XG4gICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0aW9uc1xuICAgIH0pO1xuICAgIHJlcXVlc3RFcnJvci5jYXVzZSA9IGVycm9yO1xuICAgIHRocm93IHJlcXVlc3RFcnJvcjtcbiAgfVxuICBjb25zdCBzdGF0dXMgPSBmZXRjaFJlc3BvbnNlLnN0YXR1cztcbiAgY29uc3QgdXJsID0gZmV0Y2hSZXNwb25zZS51cmw7XG4gIGNvbnN0IHJlc3BvbnNlSGVhZGVycyA9IHt9O1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBmZXRjaFJlc3BvbnNlLmhlYWRlcnMpIHtcbiAgICByZXNwb25zZUhlYWRlcnNba2V5XSA9IHZhbHVlO1xuICB9XG4gIGNvbnN0IG9jdG9raXRSZXNwb25zZSA9IHtcbiAgICB1cmwsXG4gICAgc3RhdHVzLFxuICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICBkYXRhOiBcIlwiXG4gIH07XG4gIGlmIChcImRlcHJlY2F0aW9uXCIgaW4gcmVzcG9uc2VIZWFkZXJzKSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IHJlc3BvbnNlSGVhZGVycy5saW5rICYmIHJlc3BvbnNlSGVhZGVycy5saW5rLm1hdGNoKC88KFtePD5dKyk+OyByZWw9XCJkZXByZWNhdGlvblwiLyk7XG4gICAgY29uc3QgZGVwcmVjYXRpb25MaW5rID0gbWF0Y2hlcyAmJiBtYXRjaGVzLnBvcCgpO1xuICAgIGxvZy53YXJuKFxuICAgICAgYFtAb2N0b2tpdC9yZXF1ZXN0XSBcIiR7cmVxdWVzdE9wdGlvbnMubWV0aG9kfSAke3JlcXVlc3RPcHRpb25zLnVybH1cIiBpcyBkZXByZWNhdGVkLiBJdCBpcyBzY2hlZHVsZWQgdG8gYmUgcmVtb3ZlZCBvbiAke3Jlc3BvbnNlSGVhZGVycy5zdW5zZXR9JHtkZXByZWNhdGlvbkxpbmsgPyBgLiBTZWUgJHtkZXByZWNhdGlvbkxpbmt9YCA6IFwiXCJ9YFxuICAgICk7XG4gIH1cbiAgaWYgKHN0YXR1cyA9PT0gMjA0IHx8IHN0YXR1cyA9PT0gMjA1KSB7XG4gICAgcmV0dXJuIG9jdG9raXRSZXNwb25zZTtcbiAgfVxuICBpZiAocmVxdWVzdE9wdGlvbnMubWV0aG9kID09PSBcIkhFQURcIikge1xuICAgIGlmIChzdGF0dXMgPCA0MDApIHtcbiAgICAgIHJldHVybiBvY3Rva2l0UmVzcG9uc2U7XG4gICAgfVxuICAgIHRocm93IG5ldyBSZXF1ZXN0RXJyb3IoZmV0Y2hSZXNwb25zZS5zdGF0dXNUZXh0LCBzdGF0dXMsIHtcbiAgICAgIHJlc3BvbnNlOiBvY3Rva2l0UmVzcG9uc2UsXG4gICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0aW9uc1xuICAgIH0pO1xuICB9XG4gIGlmIChzdGF0dXMgPT09IDMwNCkge1xuICAgIG9jdG9raXRSZXNwb25zZS5kYXRhID0gYXdhaXQgZ2V0UmVzcG9uc2VEYXRhKGZldGNoUmVzcG9uc2UpO1xuICAgIHRocm93IG5ldyBSZXF1ZXN0RXJyb3IoXCJOb3QgbW9kaWZpZWRcIiwgc3RhdHVzLCB7XG4gICAgICByZXNwb25zZTogb2N0b2tpdFJlc3BvbnNlLFxuICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdGlvbnNcbiAgICB9KTtcbiAgfVxuICBpZiAoc3RhdHVzID49IDQwMCkge1xuICAgIG9jdG9raXRSZXNwb25zZS5kYXRhID0gYXdhaXQgZ2V0UmVzcG9uc2VEYXRhKGZldGNoUmVzcG9uc2UpO1xuICAgIHRocm93IG5ldyBSZXF1ZXN0RXJyb3IodG9FcnJvck1lc3NhZ2Uob2N0b2tpdFJlc3BvbnNlLmRhdGEpLCBzdGF0dXMsIHtcbiAgICAgIHJlc3BvbnNlOiBvY3Rva2l0UmVzcG9uc2UsXG4gICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0aW9uc1xuICAgIH0pO1xuICB9XG4gIG9jdG9raXRSZXNwb25zZS5kYXRhID0gcGFyc2VTdWNjZXNzUmVzcG9uc2VCb2R5ID8gYXdhaXQgZ2V0UmVzcG9uc2VEYXRhKGZldGNoUmVzcG9uc2UpIDogZmV0Y2hSZXNwb25zZS5ib2R5O1xuICByZXR1cm4gb2N0b2tpdFJlc3BvbnNlO1xufVxuYXN5bmMgZnVuY3Rpb24gZ2V0UmVzcG9uc2VEYXRhKHJlc3BvbnNlKSB7XG4gIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIik7XG4gIGlmICghY29udGVudFR5cGUpIHtcbiAgICByZXR1cm4gcmVzcG9uc2UudGV4dCgpLmNhdGNoKCgpID0+IFwiXCIpO1xuICB9XG4gIGNvbnN0IG1pbWV0eXBlID0gc2FmZVBhcnNlKGNvbnRlbnRUeXBlKTtcbiAgaWYgKGlzSlNPTlJlc3BvbnNlKG1pbWV0eXBlKSkge1xuICAgIGxldCB0ZXh0ID0gXCJcIjtcbiAgICB0cnkge1xuICAgICAgdGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKHRleHQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICB9IGVsc2UgaWYgKG1pbWV0eXBlLnR5cGUuc3RhcnRzV2l0aChcInRleHQvXCIpIHx8IG1pbWV0eXBlLnBhcmFtZXRlcnMuY2hhcnNldD8udG9Mb3dlckNhc2UoKSA9PT0gXCJ1dGYtOFwiKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKS5jYXRjaCgoKSA9PiBcIlwiKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcmVzcG9uc2UuYXJyYXlCdWZmZXIoKS5jYXRjaCgoKSA9PiBuZXcgQXJyYXlCdWZmZXIoMCkpO1xuICB9XG59XG5mdW5jdGlvbiBpc0pTT05SZXNwb25zZShtaW1ldHlwZSkge1xuICByZXR1cm4gbWltZXR5cGUudHlwZSA9PT0gXCJhcHBsaWNhdGlvbi9qc29uXCIgfHwgbWltZXR5cGUudHlwZSA9PT0gXCJhcHBsaWNhdGlvbi9zY2ltK2pzb25cIjtcbn1cbmZ1bmN0aW9uIHRvRXJyb3JNZXNzYWdlKGRhdGEpIHtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgIHJldHVybiBcIlVua25vd24gZXJyb3JcIjtcbiAgfVxuICBpZiAoXCJtZXNzYWdlXCIgaW4gZGF0YSkge1xuICAgIGNvbnN0IHN1ZmZpeCA9IFwiZG9jdW1lbnRhdGlvbl91cmxcIiBpbiBkYXRhID8gYCAtICR7ZGF0YS5kb2N1bWVudGF0aW9uX3VybH1gIDogXCJcIjtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShkYXRhLmVycm9ycykgPyBgJHtkYXRhLm1lc3NhZ2V9OiAke2RhdGEuZXJyb3JzLm1hcCgodikgPT4gSlNPTi5zdHJpbmdpZnkodikpLmpvaW4oXCIsIFwiKX0ke3N1ZmZpeH1gIDogYCR7ZGF0YS5tZXNzYWdlfSR7c3VmZml4fWA7XG4gIH1cbiAgcmV0dXJuIGBVbmtub3duIGVycm9yOiAke0pTT04uc3RyaW5naWZ5KGRhdGEpfWA7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG5mdW5jdGlvbiB3aXRoRGVmYXVsdHMob2xkRW5kcG9pbnQsIG5ld0RlZmF1bHRzKSB7XG4gIGNvbnN0IGVuZHBvaW50MiA9IG9sZEVuZHBvaW50LmRlZmF1bHRzKG5ld0RlZmF1bHRzKTtcbiAgY29uc3QgbmV3QXBpID0gZnVuY3Rpb24ocm91dGUsIHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBlbmRwb2ludE9wdGlvbnMgPSBlbmRwb2ludDIubWVyZ2Uocm91dGUsIHBhcmFtZXRlcnMpO1xuICAgIGlmICghZW5kcG9pbnRPcHRpb25zLnJlcXVlc3QgfHwgIWVuZHBvaW50T3B0aW9ucy5yZXF1ZXN0Lmhvb2spIHtcbiAgICAgIHJldHVybiBmZXRjaFdyYXBwZXIoZW5kcG9pbnQyLnBhcnNlKGVuZHBvaW50T3B0aW9ucykpO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0MiA9IChyb3V0ZTIsIHBhcmFtZXRlcnMyKSA9PiB7XG4gICAgICByZXR1cm4gZmV0Y2hXcmFwcGVyKFxuICAgICAgICBlbmRwb2ludDIucGFyc2UoZW5kcG9pbnQyLm1lcmdlKHJvdXRlMiwgcGFyYW1ldGVyczIpKVxuICAgICAgKTtcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24ocmVxdWVzdDIsIHtcbiAgICAgIGVuZHBvaW50OiBlbmRwb2ludDIsXG4gICAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgZW5kcG9pbnQyKVxuICAgIH0pO1xuICAgIHJldHVybiBlbmRwb2ludE9wdGlvbnMucmVxdWVzdC5ob29rKHJlcXVlc3QyLCBlbmRwb2ludE9wdGlvbnMpO1xuICB9O1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXdBcGksIHtcbiAgICBlbmRwb2ludDogZW5kcG9pbnQyLFxuICAgIGRlZmF1bHRzOiB3aXRoRGVmYXVsdHMuYmluZChudWxsLCBlbmRwb2ludDIpXG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciByZXF1ZXN0ID0gd2l0aERlZmF1bHRzKGVuZHBvaW50LCBkZWZhdWx0c19kZWZhdWx0KTtcbmV4cG9ydCB7XG4gIHJlcXVlc3Rcbn07XG4iLCAiY2xhc3MgUmVxdWVzdEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBuYW1lO1xuICAvKipcbiAgICogaHR0cCBzdGF0dXMgY29kZVxuICAgKi9cbiAgc3RhdHVzO1xuICAvKipcbiAgICogUmVxdWVzdCBvcHRpb25zIHRoYXQgbGVhZCB0byB0aGUgZXJyb3IuXG4gICAqL1xuICByZXF1ZXN0O1xuICAvKipcbiAgICogUmVzcG9uc2Ugb2JqZWN0IGlmIGEgcmVzcG9uc2Ugd2FzIHJlY2VpdmVkXG4gICAqL1xuICByZXNwb25zZTtcbiAgY29uc3RydWN0b3IobWVzc2FnZSwgc3RhdHVzQ29kZSwgb3B0aW9ucykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9IFwiSHR0cEVycm9yXCI7XG4gICAgdGhpcy5zdGF0dXMgPSBOdW1iZXIucGFyc2VJbnQoc3RhdHVzQ29kZSk7XG4gICAgaWYgKE51bWJlci5pc05hTih0aGlzLnN0YXR1cykpIHtcbiAgICAgIHRoaXMuc3RhdHVzID0gMDtcbiAgICB9XG4gICAgaWYgKFwicmVzcG9uc2VcIiBpbiBvcHRpb25zKSB7XG4gICAgICB0aGlzLnJlc3BvbnNlID0gb3B0aW9ucy5yZXNwb25zZTtcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdENvcHkgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLnJlcXVlc3QpO1xuICAgIGlmIChvcHRpb25zLnJlcXVlc3QuaGVhZGVycy5hdXRob3JpemF0aW9uKSB7XG4gICAgICByZXF1ZXN0Q29weS5oZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMsIHtcbiAgICAgICAgYXV0aG9yaXphdGlvbjogb3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMuYXV0aG9yaXphdGlvbi5yZXBsYWNlKFxuICAgICAgICAgIC8oPzwhICkgLiokLyxcbiAgICAgICAgICBcIiBbUkVEQUNURURdXCJcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJlcXVlc3RDb3B5LnVybCA9IHJlcXVlc3RDb3B5LnVybC5yZXBsYWNlKC9cXGJjbGllbnRfc2VjcmV0PVxcdysvZywgXCJjbGllbnRfc2VjcmV0PVtSRURBQ1RFRF1cIikucmVwbGFjZSgvXFxiYWNjZXNzX3Rva2VuPVxcdysvZywgXCJhY2Nlc3NfdG9rZW49W1JFREFDVEVEXVwiKTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0Q29weTtcbiAgfVxufVxuZXhwb3J0IHtcbiAgUmVxdWVzdEVycm9yXG59O1xuIiwgIi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xuaW1wb3J0IHsgcmVxdWVzdCB9IGZyb20gXCJAb2N0b2tpdC9yZXF1ZXN0XCI7XG5pbXBvcnQgeyBnZXRVc2VyQWdlbnQgfSBmcm9tIFwidW5pdmVyc2FsLXVzZXItYWdlbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL3ZlcnNpb24uanNcbnZhciBWRVJTSU9OID0gXCIwLjAuMC1kZXZlbG9wbWVudFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvd2l0aC1kZWZhdWx0cy5qc1xuaW1wb3J0IHsgcmVxdWVzdCBhcyBSZXF1ZXN0MiB9IGZyb20gXCJAb2N0b2tpdC9yZXF1ZXN0XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy9ncmFwaHFsLmpzXG5pbXBvcnQgeyByZXF1ZXN0IGFzIFJlcXVlc3QgfSBmcm9tIFwiQG9jdG9raXQvcmVxdWVzdFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvZXJyb3IuanNcbmZ1bmN0aW9uIF9idWlsZE1lc3NhZ2VGb3JSZXNwb25zZUVycm9ycyhkYXRhKSB7XG4gIHJldHVybiBgUmVxdWVzdCBmYWlsZWQgZHVlIHRvIGZvbGxvd2luZyByZXNwb25zZSBlcnJvcnM6XG5gICsgZGF0YS5lcnJvcnMubWFwKChlKSA9PiBgIC0gJHtlLm1lc3NhZ2V9YCkuam9pbihcIlxcblwiKTtcbn1cbnZhciBHcmFwaHFsUmVzcG9uc2VFcnJvciA9IGNsYXNzIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZXF1ZXN0MiwgaGVhZGVycywgcmVzcG9uc2UpIHtcbiAgICBzdXBlcihfYnVpbGRNZXNzYWdlRm9yUmVzcG9uc2VFcnJvcnMocmVzcG9uc2UpKTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0MjtcbiAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzO1xuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICB0aGlzLmVycm9ycyA9IHJlc3BvbnNlLmVycm9ycztcbiAgICB0aGlzLmRhdGEgPSByZXNwb25zZS5kYXRhO1xuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuICB9XG4gIG5hbWUgPSBcIkdyYXBocWxSZXNwb25zZUVycm9yXCI7XG4gIGVycm9ycztcbiAgZGF0YTtcbn07XG5cbi8vIHBrZy9kaXN0LXNyYy9ncmFwaHFsLmpzXG52YXIgTk9OX1ZBUklBQkxFX09QVElPTlMgPSBbXG4gIFwibWV0aG9kXCIsXG4gIFwiYmFzZVVybFwiLFxuICBcInVybFwiLFxuICBcImhlYWRlcnNcIixcbiAgXCJyZXF1ZXN0XCIsXG4gIFwicXVlcnlcIixcbiAgXCJtZWRpYVR5cGVcIixcbiAgXCJvcGVyYXRpb25OYW1lXCJcbl07XG52YXIgRk9SQklEREVOX1ZBUklBQkxFX09QVElPTlMgPSBbXCJxdWVyeVwiLCBcIm1ldGhvZFwiLCBcInVybFwiXTtcbnZhciBHSEVTX1YzX1NVRkZJWF9SRUdFWCA9IC9cXC9hcGlcXC92M1xcLz8kLztcbmZ1bmN0aW9uIGdyYXBocWwocmVxdWVzdDIsIHF1ZXJ5LCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBxdWVyeSA9PT0gXCJzdHJpbmdcIiAmJiBcInF1ZXJ5XCIgaW4gb3B0aW9ucykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgICBuZXcgRXJyb3IoYFtAb2N0b2tpdC9ncmFwaHFsXSBcInF1ZXJ5XCIgY2Fubm90IGJlIHVzZWQgYXMgdmFyaWFibGUgbmFtZWApXG4gICAgICApO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvcHRpb25zKSB7XG4gICAgICBpZiAoIUZPUkJJRERFTl9WQVJJQUJMRV9PUFRJT05TLmluY2x1ZGVzKGtleSkpIGNvbnRpbnVlO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgYFtAb2N0b2tpdC9ncmFwaHFsXSBcIiR7a2V5fVwiIGNhbm5vdCBiZSB1c2VkIGFzIHZhcmlhYmxlIG5hbWVgXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHBhcnNlZE9wdGlvbnMgPSB0eXBlb2YgcXVlcnkgPT09IFwic3RyaW5nXCIgPyBPYmplY3QuYXNzaWduKHsgcXVlcnkgfSwgb3B0aW9ucykgOiBxdWVyeTtcbiAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSBPYmplY3Qua2V5cyhcbiAgICBwYXJzZWRPcHRpb25zXG4gICkucmVkdWNlKChyZXN1bHQsIGtleSkgPT4ge1xuICAgIGlmIChOT05fVkFSSUFCTEVfT1BUSU9OUy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHBhcnNlZE9wdGlvbnNba2V5XTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGlmICghcmVzdWx0LnZhcmlhYmxlcykge1xuICAgICAgcmVzdWx0LnZhcmlhYmxlcyA9IHt9O1xuICAgIH1cbiAgICByZXN1bHQudmFyaWFibGVzW2tleV0gPSBwYXJzZWRPcHRpb25zW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwge30pO1xuICBjb25zdCBiYXNlVXJsID0gcGFyc2VkT3B0aW9ucy5iYXNlVXJsIHx8IHJlcXVlc3QyLmVuZHBvaW50LkRFRkFVTFRTLmJhc2VVcmw7XG4gIGlmIChHSEVTX1YzX1NVRkZJWF9SRUdFWC50ZXN0KGJhc2VVcmwpKSB7XG4gICAgcmVxdWVzdE9wdGlvbnMudXJsID0gYmFzZVVybC5yZXBsYWNlKEdIRVNfVjNfU1VGRklYX1JFR0VYLCBcIi9hcGkvZ3JhcGhxbFwiKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdDIocmVxdWVzdE9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3JzKSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0ge307XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhyZXNwb25zZS5oZWFkZXJzKSkge1xuICAgICAgICBoZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzW2tleV07XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgR3JhcGhxbFJlc3BvbnNlRXJyb3IoXG4gICAgICAgIHJlcXVlc3RPcHRpb25zLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICByZXNwb25zZS5kYXRhXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhO1xuICB9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3dpdGgtZGVmYXVsdHMuanNcbmZ1bmN0aW9uIHdpdGhEZWZhdWx0cyhyZXF1ZXN0MiwgbmV3RGVmYXVsdHMpIHtcbiAgY29uc3QgbmV3UmVxdWVzdCA9IHJlcXVlc3QyLmRlZmF1bHRzKG5ld0RlZmF1bHRzKTtcbiAgY29uc3QgbmV3QXBpID0gKHF1ZXJ5LCBvcHRpb25zKSA9PiB7XG4gICAgcmV0dXJuIGdyYXBocWwobmV3UmVxdWVzdCwgcXVlcnksIG9wdGlvbnMpO1xuICB9O1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXdBcGksIHtcbiAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgbmV3UmVxdWVzdCksXG4gICAgZW5kcG9pbnQ6IG5ld1JlcXVlc3QuZW5kcG9pbnRcbiAgfSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xudmFyIGdyYXBocWwyID0gd2l0aERlZmF1bHRzKHJlcXVlc3QsIHtcbiAgaGVhZGVyczoge1xuICAgIFwidXNlci1hZ2VudFwiOiBgb2N0b2tpdC1ncmFwaHFsLmpzLyR7VkVSU0lPTn0gJHtnZXRVc2VyQWdlbnQoKX1gXG4gIH0sXG4gIG1ldGhvZDogXCJQT1NUXCIsXG4gIHVybDogXCIvZ3JhcGhxbFwiXG59KTtcbmZ1bmN0aW9uIHdpdGhDdXN0b21SZXF1ZXN0KGN1c3RvbVJlcXVlc3QpIHtcbiAgcmV0dXJuIHdpdGhEZWZhdWx0cyhjdXN0b21SZXF1ZXN0LCB7XG4gICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICB1cmw6IFwiL2dyYXBocWxcIlxuICB9KTtcbn1cbmV4cG9ydCB7XG4gIEdyYXBocWxSZXNwb25zZUVycm9yLFxuICBncmFwaHFsMiBhcyBncmFwaHFsLFxuICB3aXRoQ3VzdG9tUmVxdWVzdFxufTtcbiIsICIvLyBwa2cvZGlzdC1zcmMvaXMtand0LmpzXG52YXIgYjY0dXJsID0gXCIoPzpbYS16QS1aMC05Xy1dKylcIjtcbnZhciBzZXAgPSBcIlxcXFwuXCI7XG52YXIgand0UkUgPSBuZXcgUmVnRXhwKGBeJHtiNjR1cmx9JHtzZXB9JHtiNjR1cmx9JHtzZXB9JHtiNjR1cmx9JGApO1xudmFyIGlzSldUID0gand0UkUudGVzdC5iaW5kKGp3dFJFKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2F1dGguanNcbmFzeW5jIGZ1bmN0aW9uIGF1dGgodG9rZW4pIHtcbiAgY29uc3QgaXNBcHAgPSBpc0pXVCh0b2tlbik7XG4gIGNvbnN0IGlzSW5zdGFsbGF0aW9uID0gdG9rZW4uc3RhcnRzV2l0aChcInYxLlwiKSB8fCB0b2tlbi5zdGFydHNXaXRoKFwiZ2hzX1wiKTtcbiAgY29uc3QgaXNVc2VyVG9TZXJ2ZXIgPSB0b2tlbi5zdGFydHNXaXRoKFwiZ2h1X1wiKTtcbiAgY29uc3QgdG9rZW5UeXBlID0gaXNBcHAgPyBcImFwcFwiIDogaXNJbnN0YWxsYXRpb24gPyBcImluc3RhbGxhdGlvblwiIDogaXNVc2VyVG9TZXJ2ZXIgPyBcInVzZXItdG8tc2VydmVyXCIgOiBcIm9hdXRoXCI7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJ0b2tlblwiLFxuICAgIHRva2VuLFxuICAgIHRva2VuVHlwZVxuICB9O1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvd2l0aC1hdXRob3JpemF0aW9uLXByZWZpeC5qc1xuZnVuY3Rpb24gd2l0aEF1dGhvcml6YXRpb25QcmVmaXgodG9rZW4pIHtcbiAgaWYgKHRva2VuLnNwbGl0KC9cXC4vKS5sZW5ndGggPT09IDMpIHtcbiAgICByZXR1cm4gYGJlYXJlciAke3Rva2VufWA7XG4gIH1cbiAgcmV0dXJuIGB0b2tlbiAke3Rva2VufWA7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9ob29rLmpzXG5hc3luYyBmdW5jdGlvbiBob29rKHRva2VuLCByZXF1ZXN0LCByb3V0ZSwgcGFyYW1ldGVycykge1xuICBjb25zdCBlbmRwb2ludCA9IHJlcXVlc3QuZW5kcG9pbnQubWVyZ2UoXG4gICAgcm91dGUsXG4gICAgcGFyYW1ldGVyc1xuICApO1xuICBlbmRwb2ludC5oZWFkZXJzLmF1dGhvcml6YXRpb24gPSB3aXRoQXV0aG9yaXphdGlvblByZWZpeCh0b2tlbik7XG4gIHJldHVybiByZXF1ZXN0KGVuZHBvaW50KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgY3JlYXRlVG9rZW5BdXRoID0gZnVuY3Rpb24gY3JlYXRlVG9rZW5BdXRoMih0b2tlbikge1xuICBpZiAoIXRva2VuKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiW0BvY3Rva2l0L2F1dGgtdG9rZW5dIE5vIHRva2VuIHBhc3NlZCB0byBjcmVhdGVUb2tlbkF1dGhcIik7XG4gIH1cbiAgaWYgKHR5cGVvZiB0b2tlbiAhPT0gXCJzdHJpbmdcIikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiW0BvY3Rva2l0L2F1dGgtdG9rZW5dIFRva2VuIHBhc3NlZCB0byBjcmVhdGVUb2tlbkF1dGggaXMgbm90IGEgc3RyaW5nXCJcbiAgICApO1xuICB9XG4gIHRva2VuID0gdG9rZW4ucmVwbGFjZSgvXih0b2tlbnxiZWFyZXIpICsvaSwgXCJcIik7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKGF1dGguYmluZChudWxsLCB0b2tlbiksIHtcbiAgICBob29rOiBob29rLmJpbmQobnVsbCwgdG9rZW4pXG4gIH0pO1xufTtcbmV4cG9ydCB7XG4gIGNyZWF0ZVRva2VuQXV0aFxufTtcbiIsICJjb25zdCBWRVJTSU9OID0gXCI2LjEuNlwiO1xuZXhwb3J0IHtcbiAgVkVSU0lPTlxufTtcbiIsICJpbXBvcnQgeyBnZXRVc2VyQWdlbnQgfSBmcm9tIFwidW5pdmVyc2FsLXVzZXItYWdlbnRcIjtcbmltcG9ydCBIb29rIGZyb20gXCJiZWZvcmUtYWZ0ZXItaG9va1wiO1xuaW1wb3J0IHsgcmVxdWVzdCB9IGZyb20gXCJAb2N0b2tpdC9yZXF1ZXN0XCI7XG5pbXBvcnQgeyB3aXRoQ3VzdG9tUmVxdWVzdCB9IGZyb20gXCJAb2N0b2tpdC9ncmFwaHFsXCI7XG5pbXBvcnQgeyBjcmVhdGVUb2tlbkF1dGggfSBmcm9tIFwiQG9jdG9raXQvYXV0aC10b2tlblwiO1xuaW1wb3J0IHsgVkVSU0lPTiB9IGZyb20gXCIuL3ZlcnNpb24uanNcIjtcbmNvbnN0IG5vb3AgPSAoKSA9PiB7XG59O1xuY29uc3QgY29uc29sZVdhcm4gPSBjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTtcbmNvbnN0IGNvbnNvbGVFcnJvciA9IGNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlKTtcbmZ1bmN0aW9uIGNyZWF0ZUxvZ2dlcihsb2dnZXIgPSB7fSkge1xuICBpZiAodHlwZW9mIGxvZ2dlci5kZWJ1ZyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbG9nZ2VyLmRlYnVnID0gbm9vcDtcbiAgfVxuICBpZiAodHlwZW9mIGxvZ2dlci5pbmZvICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBsb2dnZXIuaW5mbyA9IG5vb3A7XG4gIH1cbiAgaWYgKHR5cGVvZiBsb2dnZXIud2FybiAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbG9nZ2VyLndhcm4gPSBjb25zb2xlV2FybjtcbiAgfVxuICBpZiAodHlwZW9mIGxvZ2dlci5lcnJvciAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbG9nZ2VyLmVycm9yID0gY29uc29sZUVycm9yO1xuICB9XG4gIHJldHVybiBsb2dnZXI7XG59XG5jb25zdCB1c2VyQWdlbnRUcmFpbCA9IGBvY3Rva2l0LWNvcmUuanMvJHtWRVJTSU9OfSAke2dldFVzZXJBZ2VudCgpfWA7XG5jbGFzcyBPY3Rva2l0IHtcbiAgc3RhdGljIFZFUlNJT04gPSBWRVJTSU9OO1xuICBzdGF0aWMgZGVmYXVsdHMoZGVmYXVsdHMpIHtcbiAgICBjb25zdCBPY3Rva2l0V2l0aERlZmF1bHRzID0gY2xhc3MgZXh0ZW5kcyB0aGlzIHtcbiAgICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGFyZ3NbMF0gfHwge307XG4gICAgICAgIGlmICh0eXBlb2YgZGVmYXVsdHMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHN1cGVyKGRlZmF1bHRzKG9wdGlvbnMpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgZGVmYXVsdHMsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgb3B0aW9ucy51c2VyQWdlbnQgJiYgZGVmYXVsdHMudXNlckFnZW50ID8ge1xuICAgICAgICAgICAgICB1c2VyQWdlbnQ6IGAke29wdGlvbnMudXNlckFnZW50fSAke2RlZmF1bHRzLnVzZXJBZ2VudH1gXG4gICAgICAgICAgICB9IDogbnVsbFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBPY3Rva2l0V2l0aERlZmF1bHRzO1xuICB9XG4gIHN0YXRpYyBwbHVnaW5zID0gW107XG4gIC8qKlxuICAgKiBBdHRhY2ggYSBwbHVnaW4gKG9yIG1hbnkpIHRvIHlvdXIgT2N0b2tpdCBpbnN0YW5jZS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3QgQVBJID0gT2N0b2tpdC5wbHVnaW4ocGx1Z2luMSwgcGx1Z2luMiwgcGx1Z2luMywgLi4uKVxuICAgKi9cbiAgc3RhdGljIHBsdWdpbiguLi5uZXdQbHVnaW5zKSB7XG4gICAgY29uc3QgY3VycmVudFBsdWdpbnMgPSB0aGlzLnBsdWdpbnM7XG4gICAgY29uc3QgTmV3T2N0b2tpdCA9IGNsYXNzIGV4dGVuZHMgdGhpcyB7XG4gICAgICBzdGF0aWMgcGx1Z2lucyA9IGN1cnJlbnRQbHVnaW5zLmNvbmNhdChcbiAgICAgICAgbmV3UGx1Z2lucy5maWx0ZXIoKHBsdWdpbikgPT4gIWN1cnJlbnRQbHVnaW5zLmluY2x1ZGVzKHBsdWdpbikpXG4gICAgICApO1xuICAgIH07XG4gICAgcmV0dXJuIE5ld09jdG9raXQ7XG4gIH1cbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgaG9vayA9IG5ldyBIb29rLkNvbGxlY3Rpb24oKTtcbiAgICBjb25zdCByZXF1ZXN0RGVmYXVsdHMgPSB7XG4gICAgICBiYXNlVXJsOiByZXF1ZXN0LmVuZHBvaW50LkRFRkFVTFRTLmJhc2VVcmwsXG4gICAgICBoZWFkZXJzOiB7fSxcbiAgICAgIHJlcXVlc3Q6IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMucmVxdWVzdCwge1xuICAgICAgICAvLyBAdHMtaWdub3JlIGludGVybmFsIHVzYWdlIG9ubHksIG5vIG5lZWQgdG8gdHlwZVxuICAgICAgICBob29rOiBob29rLmJpbmQobnVsbCwgXCJyZXF1ZXN0XCIpXG4gICAgICB9KSxcbiAgICAgIG1lZGlhVHlwZToge1xuICAgICAgICBwcmV2aWV3czogW10sXG4gICAgICAgIGZvcm1hdDogXCJcIlxuICAgICAgfVxuICAgIH07XG4gICAgcmVxdWVzdERlZmF1bHRzLmhlYWRlcnNbXCJ1c2VyLWFnZW50XCJdID0gb3B0aW9ucy51c2VyQWdlbnQgPyBgJHtvcHRpb25zLnVzZXJBZ2VudH0gJHt1c2VyQWdlbnRUcmFpbH1gIDogdXNlckFnZW50VHJhaWw7XG4gICAgaWYgKG9wdGlvbnMuYmFzZVVybCkge1xuICAgICAgcmVxdWVzdERlZmF1bHRzLmJhc2VVcmwgPSBvcHRpb25zLmJhc2VVcmw7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnByZXZpZXdzKSB7XG4gICAgICByZXF1ZXN0RGVmYXVsdHMubWVkaWFUeXBlLnByZXZpZXdzID0gb3B0aW9ucy5wcmV2aWV3cztcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudGltZVpvbmUpIHtcbiAgICAgIHJlcXVlc3REZWZhdWx0cy5oZWFkZXJzW1widGltZS16b25lXCJdID0gb3B0aW9ucy50aW1lWm9uZTtcbiAgICB9XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdC5kZWZhdWx0cyhyZXF1ZXN0RGVmYXVsdHMpO1xuICAgIHRoaXMuZ3JhcGhxbCA9IHdpdGhDdXN0b21SZXF1ZXN0KHRoaXMucmVxdWVzdCkuZGVmYXVsdHMocmVxdWVzdERlZmF1bHRzKTtcbiAgICB0aGlzLmxvZyA9IGNyZWF0ZUxvZ2dlcihvcHRpb25zLmxvZyk7XG4gICAgdGhpcy5ob29rID0gaG9vaztcbiAgICBpZiAoIW9wdGlvbnMuYXV0aFN0cmF0ZWd5KSB7XG4gICAgICBpZiAoIW9wdGlvbnMuYXV0aCkge1xuICAgICAgICB0aGlzLmF1dGggPSBhc3luYyAoKSA9PiAoe1xuICAgICAgICAgIHR5cGU6IFwidW5hdXRoZW50aWNhdGVkXCJcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBhdXRoID0gY3JlYXRlVG9rZW5BdXRoKG9wdGlvbnMuYXV0aCk7XG4gICAgICAgIGhvb2sud3JhcChcInJlcXVlc3RcIiwgYXV0aC5ob29rKTtcbiAgICAgICAgdGhpcy5hdXRoID0gYXV0aDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgeyBhdXRoU3RyYXRlZ3ksIC4uLm90aGVyT3B0aW9ucyB9ID0gb3B0aW9ucztcbiAgICAgIGNvbnN0IGF1dGggPSBhdXRoU3RyYXRlZ3koXG4gICAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAge1xuICAgICAgICAgICAgcmVxdWVzdDogdGhpcy5yZXF1ZXN0LFxuICAgICAgICAgICAgbG9nOiB0aGlzLmxvZyxcbiAgICAgICAgICAgIC8vIHdlIHBhc3MgdGhlIGN1cnJlbnQgb2N0b2tpdCBpbnN0YW5jZSBhcyB3ZWxsIGFzIGl0cyBjb25zdHJ1Y3RvciBvcHRpb25zXG4gICAgICAgICAgICAvLyB0byBhbGxvdyBmb3IgYXV0aGVudGljYXRpb24gc3RyYXRlZ2llcyB0aGF0IHJldHVybiBhIG5ldyBvY3Rva2l0IGluc3RhbmNlXG4gICAgICAgICAgICAvLyB0aGF0IHNoYXJlcyB0aGUgc2FtZSBpbnRlcm5hbCBzdGF0ZSBhcyB0aGUgY3VycmVudCBvbmUuIFRoZSBvcmlnaW5hbFxuICAgICAgICAgICAgLy8gcmVxdWlyZW1lbnQgZm9yIHRoaXMgd2FzIHRoZSBcImV2ZW50LW9jdG9raXRcIiBhdXRoZW50aWNhdGlvbiBzdHJhdGVneVxuICAgICAgICAgICAgLy8gb2YgaHR0cHM6Ly9naXRodWIuY29tL3Byb2JvdC9vY3Rva2l0LWF1dGgtcHJvYm90LlxuICAgICAgICAgICAgb2N0b2tpdDogdGhpcyxcbiAgICAgICAgICAgIG9jdG9raXRPcHRpb25zOiBvdGhlck9wdGlvbnNcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9wdGlvbnMuYXV0aFxuICAgICAgICApXG4gICAgICApO1xuICAgICAgaG9vay53cmFwKFwicmVxdWVzdFwiLCBhdXRoLmhvb2spO1xuICAgICAgdGhpcy5hdXRoID0gYXV0aDtcbiAgICB9XG4gICAgY29uc3QgY2xhc3NDb25zdHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbGFzc0NvbnN0cnVjdG9yLnBsdWdpbnMubGVuZ3RoOyArK2kpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgY2xhc3NDb25zdHJ1Y3Rvci5wbHVnaW5zW2ldKHRoaXMsIG9wdGlvbnMpKTtcbiAgICB9XG4gIH1cbiAgLy8gYXNzaWduZWQgZHVyaW5nIGNvbnN0cnVjdG9yXG4gIHJlcXVlc3Q7XG4gIGdyYXBocWw7XG4gIGxvZztcbiAgaG9vaztcbiAgLy8gVE9ETzogdHlwZSBgb2N0b2tpdC5hdXRoYCBiYXNlZCBvbiBwYXNzZWQgb3B0aW9ucy5hdXRoU3RyYXRlZ3lcbiAgYXV0aDtcbn1cbmV4cG9ydCB7XG4gIE9jdG9raXRcbn07XG4iLCAiY29uc3QgVkVSU0lPTiA9IFwiNS4zLjFcIjtcbmV4cG9ydCB7XG4gIFZFUlNJT05cbn07XG4iLCAiaW1wb3J0IHsgVkVSU0lPTiB9IGZyb20gXCIuL3ZlcnNpb24uanNcIjtcbmZ1bmN0aW9uIHJlcXVlc3RMb2cob2N0b2tpdCkge1xuICBvY3Rva2l0Lmhvb2sud3JhcChcInJlcXVlc3RcIiwgKHJlcXVlc3QsIG9wdGlvbnMpID0+IHtcbiAgICBvY3Rva2l0LmxvZy5kZWJ1ZyhcInJlcXVlc3RcIiwgb3B0aW9ucyk7XG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gb2N0b2tpdC5yZXF1ZXN0LmVuZHBvaW50LnBhcnNlKG9wdGlvbnMpO1xuICAgIGNvbnN0IHBhdGggPSByZXF1ZXN0T3B0aW9ucy51cmwucmVwbGFjZShvcHRpb25zLmJhc2VVcmwsIFwiXCIpO1xuICAgIHJldHVybiByZXF1ZXN0KG9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0SWQgPSByZXNwb25zZS5oZWFkZXJzW1wieC1naXRodWItcmVxdWVzdC1pZFwiXTtcbiAgICAgIG9jdG9raXQubG9nLmluZm8oXG4gICAgICAgIGAke3JlcXVlc3RPcHRpb25zLm1ldGhvZH0gJHtwYXRofSAtICR7cmVzcG9uc2Uuc3RhdHVzfSB3aXRoIGlkICR7cmVxdWVzdElkfSBpbiAke0RhdGUubm93KCkgLSBzdGFydH1tc2BcbiAgICAgICk7XG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0SWQgPSBlcnJvci5yZXNwb25zZT8uaGVhZGVyc1tcIngtZ2l0aHViLXJlcXVlc3QtaWRcIl0gfHwgXCJVTktOT1dOXCI7XG4gICAgICBvY3Rva2l0LmxvZy5lcnJvcihcbiAgICAgICAgYCR7cmVxdWVzdE9wdGlvbnMubWV0aG9kfSAke3BhdGh9IC0gJHtlcnJvci5zdGF0dXN9IHdpdGggaWQgJHtyZXF1ZXN0SWR9IGluICR7RGF0ZS5ub3coKSAtIHN0YXJ0fW1zYFxuICAgICAgKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xuICB9KTtcbn1cbnJlcXVlc3RMb2cuVkVSU0lPTiA9IFZFUlNJT047XG5leHBvcnQge1xuICByZXF1ZXN0TG9nXG59O1xuIiwgIi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiMC4wLjAtZGV2ZWxvcG1lbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL25vcm1hbGl6ZS1wYWdpbmF0ZWQtbGlzdC1yZXNwb25zZS5qc1xuZnVuY3Rpb24gbm9ybWFsaXplUGFnaW5hdGVkTGlzdFJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gIGlmICghcmVzcG9uc2UuZGF0YSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5yZXNwb25zZSxcbiAgICAgIGRhdGE6IFtdXG4gICAgfTtcbiAgfVxuICBjb25zdCByZXNwb25zZU5lZWRzTm9ybWFsaXphdGlvbiA9IFwidG90YWxfY291bnRcIiBpbiByZXNwb25zZS5kYXRhICYmICEoXCJ1cmxcIiBpbiByZXNwb25zZS5kYXRhKTtcbiAgaWYgKCFyZXNwb25zZU5lZWRzTm9ybWFsaXphdGlvbikgcmV0dXJuIHJlc3BvbnNlO1xuICBjb25zdCBpbmNvbXBsZXRlUmVzdWx0cyA9IHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzO1xuICBjb25zdCByZXBvc2l0b3J5U2VsZWN0aW9uID0gcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbjtcbiAgY29uc3QgdG90YWxDb3VudCA9IHJlc3BvbnNlLmRhdGEudG90YWxfY291bnQ7XG4gIGRlbGV0ZSByZXNwb25zZS5kYXRhLmluY29tcGxldGVfcmVzdWx0cztcbiAgZGVsZXRlIHJlc3BvbnNlLmRhdGEucmVwb3NpdG9yeV9zZWxlY3Rpb247XG4gIGRlbGV0ZSByZXNwb25zZS5kYXRhLnRvdGFsX2NvdW50O1xuICBjb25zdCBuYW1lc3BhY2VLZXkgPSBPYmplY3Qua2V5cyhyZXNwb25zZS5kYXRhKVswXTtcbiAgY29uc3QgZGF0YSA9IHJlc3BvbnNlLmRhdGFbbmFtZXNwYWNlS2V5XTtcbiAgcmVzcG9uc2UuZGF0YSA9IGRhdGE7XG4gIGlmICh0eXBlb2YgaW5jb21wbGV0ZVJlc3VsdHMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXNwb25zZS5kYXRhLmluY29tcGxldGVfcmVzdWx0cyA9IGluY29tcGxldGVSZXN1bHRzO1xuICB9XG4gIGlmICh0eXBlb2YgcmVwb3NpdG9yeVNlbGVjdGlvbiAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJlc3BvbnNlLmRhdGEucmVwb3NpdG9yeV9zZWxlY3Rpb24gPSByZXBvc2l0b3J5U2VsZWN0aW9uO1xuICB9XG4gIHJlc3BvbnNlLmRhdGEudG90YWxfY291bnQgPSB0b3RhbENvdW50O1xuICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pdGVyYXRvci5qc1xuZnVuY3Rpb24gaXRlcmF0b3Iob2N0b2tpdCwgcm91dGUsIHBhcmFtZXRlcnMpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHR5cGVvZiByb3V0ZSA9PT0gXCJmdW5jdGlvblwiID8gcm91dGUuZW5kcG9pbnQocGFyYW1ldGVycykgOiBvY3Rva2l0LnJlcXVlc3QuZW5kcG9pbnQocm91dGUsIHBhcmFtZXRlcnMpO1xuICBjb25zdCByZXF1ZXN0TWV0aG9kID0gdHlwZW9mIHJvdXRlID09PSBcImZ1bmN0aW9uXCIgPyByb3V0ZSA6IG9jdG9raXQucmVxdWVzdDtcbiAgY29uc3QgbWV0aG9kID0gb3B0aW9ucy5tZXRob2Q7XG4gIGNvbnN0IGhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnM7XG4gIGxldCB1cmwgPSBvcHRpb25zLnVybDtcbiAgcmV0dXJuIHtcbiAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdOiAoKSA9PiAoe1xuICAgICAgYXN5bmMgbmV4dCgpIHtcbiAgICAgICAgaWYgKCF1cmwpIHJldHVybiB7IGRvbmU6IHRydWUgfTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RNZXRob2QoeyBtZXRob2QsIHVybCwgaGVhZGVycyB9KTtcbiAgICAgICAgICBjb25zdCBub3JtYWxpemVkUmVzcG9uc2UgPSBub3JtYWxpemVQYWdpbmF0ZWRMaXN0UmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICAgIHVybCA9ICgobm9ybWFsaXplZFJlc3BvbnNlLmhlYWRlcnMubGluayB8fCBcIlwiKS5tYXRjaChcbiAgICAgICAgICAgIC88KFtePD5dKyk+O1xccypyZWw9XCJuZXh0XCIvXG4gICAgICAgICAgKSB8fCBbXSlbMV07XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG5vcm1hbGl6ZWRSZXNwb25zZSB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgIT09IDQwOSkgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgdXJsID0gXCJcIjtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgc3RhdHVzOiAyMDAsXG4gICAgICAgICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICAgICAgICBkYXRhOiBbXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9O1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvcGFnaW5hdGUuanNcbmZ1bmN0aW9uIHBhZ2luYXRlKG9jdG9raXQsIHJvdXRlLCBwYXJhbWV0ZXJzLCBtYXBGbikge1xuICBpZiAodHlwZW9mIHBhcmFtZXRlcnMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIG1hcEZuID0gcGFyYW1ldGVycztcbiAgICBwYXJhbWV0ZXJzID0gdm9pZCAwO1xuICB9XG4gIHJldHVybiBnYXRoZXIoXG4gICAgb2N0b2tpdCxcbiAgICBbXSxcbiAgICBpdGVyYXRvcihvY3Rva2l0LCByb3V0ZSwgcGFyYW1ldGVycylbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCksXG4gICAgbWFwRm5cbiAgKTtcbn1cbmZ1bmN0aW9uIGdhdGhlcihvY3Rva2l0LCByZXN1bHRzLCBpdGVyYXRvcjIsIG1hcEZuKSB7XG4gIHJldHVybiBpdGVyYXRvcjIubmV4dCgpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgIGlmIChyZXN1bHQuZG9uZSkge1xuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIGxldCBlYXJseUV4aXQgPSBmYWxzZTtcbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgZWFybHlFeGl0ID0gdHJ1ZTtcbiAgICB9XG4gICAgcmVzdWx0cyA9IHJlc3VsdHMuY29uY2F0KFxuICAgICAgbWFwRm4gPyBtYXBGbihyZXN1bHQudmFsdWUsIGRvbmUpIDogcmVzdWx0LnZhbHVlLmRhdGFcbiAgICApO1xuICAgIGlmIChlYXJseUV4aXQpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICByZXR1cm4gZ2F0aGVyKG9jdG9raXQsIHJlc3VsdHMsIGl0ZXJhdG9yMiwgbWFwRm4pO1xuICB9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2NvbXBvc2UtcGFnaW5hdGUuanNcbnZhciBjb21wb3NlUGFnaW5hdGVSZXN0ID0gT2JqZWN0LmFzc2lnbihwYWdpbmF0ZSwge1xuICBpdGVyYXRvclxufSk7XG5cbi8vIHBrZy9kaXN0LXNyYy9nZW5lcmF0ZWQvcGFnaW5hdGluZy1lbmRwb2ludHMuanNcbnZhciBwYWdpbmF0aW5nRW5kcG9pbnRzID0gW1xuICBcIkdFVCAvYWR2aXNvcmllc1wiLFxuICBcIkdFVCAvYXBwL2hvb2svZGVsaXZlcmllc1wiLFxuICBcIkdFVCAvYXBwL2luc3RhbGxhdGlvbi1yZXF1ZXN0c1wiLFxuICBcIkdFVCAvYXBwL2luc3RhbGxhdGlvbnNcIixcbiAgXCJHRVQgL2Fzc2lnbm1lbnRzL3thc3NpZ25tZW50X2lkfS9hY2NlcHRlZF9hc3NpZ25tZW50c1wiLFxuICBcIkdFVCAvY2xhc3Nyb29tc1wiLFxuICBcIkdFVCAvY2xhc3Nyb29tcy97Y2xhc3Nyb29tX2lkfS9hc3NpZ25tZW50c1wiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnNcIixcbiAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9kZXBlbmRhYm90L2FsZXJ0c1wiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3NlY3JldC1zY2FubmluZy9hbGVydHNcIixcbiAgXCJHRVQgL2V2ZW50c1wiLFxuICBcIkdFVCAvZ2lzdHNcIixcbiAgXCJHRVQgL2dpc3RzL3B1YmxpY1wiLFxuICBcIkdFVCAvZ2lzdHMvc3RhcnJlZFwiLFxuICBcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWl0c1wiLFxuICBcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2ZvcmtzXCIsXG4gIFwiR0VUIC9pbnN0YWxsYXRpb24vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9pc3N1ZXNcIixcbiAgXCJHRVQgL2xpY2Vuc2VzXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiLFxuICBcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCIsXG4gIFwiR0VUIC9uZXR3b3Jrcy97b3duZXJ9L3tyZXBvfS9ldmVudHNcIixcbiAgXCJHRVQgL25vdGlmaWNhdGlvbnNcIixcbiAgXCJHRVQgL29yZ2FuaXphdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9jYWNoZS91c2FnZS1ieS1yZXBvc2l0b3J5XCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXItZ3JvdXBzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyLWdyb3Vwcy97cnVubmVyX2dyb3VwX2lkfS9ob3N0ZWQtcnVubmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lci1ncm91cHMve3J1bm5lcl9ncm91cF9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyLWdyb3Vwcy97cnVubmVyX2dyb3VwX2lkfS9ydW5uZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYXR0ZXN0YXRpb25zL3tzdWJqZWN0X2RpZ2VzdH1cIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGUtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VhdHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9tZXRyaWNzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvcGlsb3QvdXNhZ2VcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9hbGVydHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9ldmVudHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZmFpbGVkX2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2hvb2tzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2luc2lnaHRzL2FwaS9yb3V0ZS1zdGF0cy97YWN0b3JfdHlwZX0ve2FjdG9yX2lkfVwiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pbnNpZ2h0cy9hcGkvc3ViamVjdC1zdGF0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pbnNpZ2h0cy9hcGkvdXNlci1zdGF0cy97dXNlcl9pZH1cIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaW5zdGFsbGF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH0vdGVhbXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaXNzdWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9L2NvZGVzcGFjZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9L3RlYW1zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy97cm9sZV9pZH0vdXNlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbi1yZXF1ZXN0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHMve3BhdF9yZXF1ZXN0X2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2Vuc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zL3twYXRfaWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wcml2YXRlLXJlZ2lzdHJpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcHJvamVjdHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy92YWx1ZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcmVwb3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMvcnVsZS1zdWl0ZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9L2hpc3RvcnlcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9zZWN1cml0eS1hZHZpc29yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstY29uZmlndXJhdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbS97dGVhbV9zbHVnfS9jb3BpbG90L21ldHJpY3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbS97dGVhbV9zbHVnfS9jb3BpbG90L3VzYWdlXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9pbnZpdGF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9tZW1iZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3JlcG9zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3RlYW1zXCIsXG4gIFwiR0VUIC9wcm9qZWN0cy9jb2x1bW5zL3tjb2x1bW5faWR9L2NhcmRzXCIsXG4gIFwiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9yc1wiLFxuICBcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbHVtbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vcmdhbml6YXRpb24tc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vcmdhbml6YXRpb24tdmFyaWFibGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVuc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2FydGlmYWN0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2F0dGVtcHRzL3thdHRlbXB0X251bWJlcn0vam9ic1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2pvYnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L3J1bnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGl2aXR5XCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F0dGVzdGF0aW9ucy97c3ViamVjdF9kaWdlc3R9XCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfS9hbm5vdGF0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3tjaGVja19zdWl0ZV9pZH0vY2hlY2stcnVuc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2luc3RhbmNlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9kZXZjb250YWluZXJzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vcHVsbHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stcnVuc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9jaGVjay1zdWl0ZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vc3RhdHVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250cmlidXRvcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3QvYWxlcnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50LWJyYW5jaC1wb2xpY2llc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXMvYXBwc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZXZlbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9mb3Jrc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3NcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnZpdGF0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvZXZlbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9ldmVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9zdWJfaXNzdWVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vdGltZWxpbmVcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn0vbGFiZWxzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ub3RpZmljYXRpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb2plY3RzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWl0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9maWxlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlcy9icmFuY2hlcy97YnJhbmNofVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy97cnVsZXNldF9pZH0vaGlzdG9yeVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9sb2NhdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXJnYXplcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmliZXJzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90ZWFtc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdG9waWNzXCIsXG4gIFwiR0VUIC9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL3NlYXJjaC9jb2RlXCIsXG4gIFwiR0VUIC9zZWFyY2gvY29tbWl0c1wiLFxuICBcIkdFVCAvc2VhcmNoL2lzc3Vlc1wiLFxuICBcIkdFVCAvc2VhcmNoL2xhYmVsc1wiLFxuICBcIkdFVCAvc2VhcmNoL3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvc2VhcmNoL3RvcGljc1wiLFxuICBcIkdFVCAvc2VhcmNoL3VzZXJzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9tZW1iZXJzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vcHJvamVjdHNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9yZXBvc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L3RlYW1zXCIsXG4gIFwiR0VUIC91c2VyL2Jsb2Nrc1wiLFxuICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzXCIsXG4gIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0c1wiLFxuICBcIkdFVCAvdXNlci9lbWFpbHNcIixcbiAgXCJHRVQgL3VzZXIvZm9sbG93ZXJzXCIsXG4gIFwiR0VUIC91c2VyL2ZvbGxvd2luZ1wiLFxuICBcIkdFVCAvdXNlci9ncGdfa2V5c1wiLFxuICBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zXCIsXG4gIFwiR0VUIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC91c2VyL2lzc3Vlc1wiLFxuICBcIkdFVCAvdXNlci9rZXlzXCIsXG4gIFwiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlc1wiLFxuICBcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXMvc3R1YmJlZFwiLFxuICBcIkdFVCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzXCIsXG4gIFwiR0VUIC91c2VyL21pZ3JhdGlvbnNcIixcbiAgXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL3VzZXIvb3Jnc1wiLFxuICBcIkdFVCAvdXNlci9wYWNrYWdlc1wiLFxuICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICBcIkdFVCAvdXNlci9wdWJsaWNfZW1haWxzXCIsXG4gIFwiR0VUIC91c2VyL3JlcG9zXCIsXG4gIFwiR0VUIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL3VzZXIvc29jaWFsX2FjY291bnRzXCIsXG4gIFwiR0VUIC91c2VyL3NzaF9zaWduaW5nX2tleXNcIixcbiAgXCJHRVQgL3VzZXIvc3RhcnJlZFwiLFxuICBcIkdFVCAvdXNlci9zdWJzY3JpcHRpb25zXCIsXG4gIFwiR0VUIC91c2VyL3RlYW1zXCIsXG4gIFwiR0VUIC91c2Vyc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9hdHRlc3RhdGlvbnMve3N1YmplY3RfZGlnZXN0fVwiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL29yZ3Mve29yZ31cIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL3B1YmxpY1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dlcnNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93aW5nXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dpc3RzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dwZ19rZXlzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2tleXNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vb3Jnc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzL3B1YmxpY1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZXBvc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zb2NpYWxfYWNjb3VudHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3NoX3NpZ25pbmdfa2V5c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdGFycmVkXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N1YnNjcmlwdGlvbnNcIlxuXTtcblxuLy8gcGtnL2Rpc3Qtc3JjL3BhZ2luYXRpbmctZW5kcG9pbnRzLmpzXG5mdW5jdGlvbiBpc1BhZ2luYXRpbmdFbmRwb2ludChhcmcpIHtcbiAgaWYgKHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gcGFnaW5hdGluZ0VuZHBvaW50cy5pbmNsdWRlcyhhcmcpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbmZ1bmN0aW9uIHBhZ2luYXRlUmVzdChvY3Rva2l0KSB7XG4gIHJldHVybiB7XG4gICAgcGFnaW5hdGU6IE9iamVjdC5hc3NpZ24ocGFnaW5hdGUuYmluZChudWxsLCBvY3Rva2l0KSwge1xuICAgICAgaXRlcmF0b3I6IGl0ZXJhdG9yLmJpbmQobnVsbCwgb2N0b2tpdClcbiAgICB9KVxuICB9O1xufVxucGFnaW5hdGVSZXN0LlZFUlNJT04gPSBWRVJTSU9OO1xuZXhwb3J0IHtcbiAgY29tcG9zZVBhZ2luYXRlUmVzdCxcbiAgaXNQYWdpbmF0aW5nRW5kcG9pbnQsXG4gIHBhZ2luYXRlUmVzdCxcbiAgcGFnaW5hdGluZ0VuZHBvaW50c1xufTtcbiIsICJleHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiMTMuNS4wXCI7XG4iLCAiaW1wb3J0IHR5cGUgeyBFbmRwb2ludHNEZWZhdWx0c0FuZERlY29yYXRpb25zIH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG5jb25zdCBFbmRwb2ludHM6IEVuZHBvaW50c0RlZmF1bHRzQW5kRGVjb3JhdGlvbnMgPSB7XG4gIGFjdGlvbnM6IHtcbiAgICBhZGRDdXN0b21MYWJlbHNUb1NlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBhZGRDdXN0b21MYWJlbHNUb1NlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIGFkZFJlcG9BY2Nlc3NUb1NlbGZIb3N0ZWRSdW5uZXJHcm91cEluT3JnOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lci1ncm91cHMve3J1bm5lcl9ncm91cF9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgYWRkU2VsZWN0ZWRSZXBvVG9PcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICBdLFxuICAgIGFkZFNlbGVjdGVkUmVwb1RvT3JnVmFyaWFibGU6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBhcHByb3ZlV29ya2Zsb3dSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2FwcHJvdmVcIixcbiAgICBdLFxuICAgIGNhbmNlbFdvcmtmbG93UnVuOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9jYW5jZWxcIixcbiAgICBdLFxuICAgIGNyZWF0ZUVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS92YXJpYWJsZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZUhvc3RlZFJ1bm5lckZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlRW52aXJvbm1lbnRTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVPcmdTZWNyZXQ6IFtcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBjcmVhdGVPclVwZGF0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlT3JnVmFyaWFibGU6IFtcIlBPU1QgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXNcIl0sXG4gICAgY3JlYXRlUmVnaXN0cmF0aW9uVG9rZW5Gb3JPcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvcmVnaXN0cmF0aW9uLXRva2VuXCIsXG4gICAgXSxcbiAgICBjcmVhdGVSZWdpc3RyYXRpb25Ub2tlbkZvclJlcG86IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3JlZ2lzdHJhdGlvbi10b2tlblwiLFxuICAgIF0sXG4gICAgY3JlYXRlUmVtb3ZlVG9rZW5Gb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3JlbW92ZS10b2tlblwiXSxcbiAgICBjcmVhdGVSZW1vdmVUb2tlbkZvclJlcG86IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3JlbW92ZS10b2tlblwiLFxuICAgIF0sXG4gICAgY3JlYXRlUmVwb1ZhcmlhYmxlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlc1wiXSxcbiAgICBjcmVhdGVXb3JrZmxvd0Rpc3BhdGNoOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vZGlzcGF0Y2hlc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlQWN0aW9uc0NhY2hlQnlJZDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGVzL3tjYWNoZV9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUFjdGlvbnNDYWNoZUJ5S2V5OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZXN7P2tleSxyZWZ9XCIsXG4gICAgXSxcbiAgICBkZWxldGVBcnRpZmFjdDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzL3thcnRpZmFjdF9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUVudmlyb25tZW50U2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlcy97bmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9ob3N0ZWQtcnVubmVycy97aG9zdGVkX3J1bm5lcl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZU9yZ1ZhcmlhYmxlOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlUmVwb1ZhcmlhYmxlOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCIsXG4gICAgXSxcbiAgICBkZWxldGVTZWxmSG9zdGVkUnVubmVyRnJvbU9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVTZWxmSG9zdGVkUnVubmVyRnJvbVJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVdvcmtmbG93UnVuOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfVwiXSxcbiAgICBkZWxldGVXb3JrZmxvd1J1bkxvZ3M6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vbG9nc1wiLFxuICAgIF0sXG4gICAgZGlzYWJsZVNlbGVjdGVkUmVwb3NpdG9yeUdpdGh1YkFjdGlvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgZGlzYWJsZVdvcmtmbG93OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9kaXNhYmxlXCIsXG4gICAgXSxcbiAgICBkb3dubG9hZEFydGlmYWN0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHMve2FydGlmYWN0X2lkfS97YXJjaGl2ZV9mb3JtYXR9XCIsXG4gICAgXSxcbiAgICBkb3dubG9hZEpvYkxvZ3NGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvam9icy97am9iX2lkfS9sb2dzXCIsXG4gICAgXSxcbiAgICBkb3dubG9hZFdvcmtmbG93UnVuQXR0ZW1wdExvZ3M6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfS9sb2dzXCIsXG4gICAgXSxcbiAgICBkb3dubG9hZFdvcmtmbG93UnVuTG9nczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9sb2dzXCIsXG4gICAgXSxcbiAgICBlbmFibGVTZWxlY3RlZFJlcG9zaXRvcnlHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICBdLFxuICAgIGVuYWJsZVdvcmtmbG93OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9lbmFibGVcIixcbiAgICBdLFxuICAgIGZvcmNlQ2FuY2VsV29ya2Zsb3dSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2ZvcmNlLWNhbmNlbFwiLFxuICAgIF0sXG4gICAgZ2VuZXJhdGVSdW5uZXJKaXRjb25maWdGb3JPcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvZ2VuZXJhdGUtaml0Y29uZmlnXCIsXG4gICAgXSxcbiAgICBnZW5lcmF0ZVJ1bm5lckppdGNvbmZpZ0ZvclJlcG86IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL2dlbmVyYXRlLWppdGNvbmZpZ1wiLFxuICAgIF0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlTGlzdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlc1wiXSxcbiAgICBnZXRBY3Rpb25zQ2FjaGVVc2FnZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlL3VzYWdlXCJdLFxuICAgIGdldEFjdGlvbnNDYWNoZVVzYWdlQnlSZXBvRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlLWJ5LXJlcG9zaXRvcnlcIixcbiAgICBdLFxuICAgIGdldEFjdGlvbnNDYWNoZVVzYWdlRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9jYWNoZS91c2FnZVwiXSxcbiAgICBnZXRBbGxvd2VkQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCIsXG4gICAgXSxcbiAgICBnZXRBbGxvd2VkQWN0aW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGdldEFydGlmYWN0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzL3thcnRpZmFjdF9pZH1cIl0sXG4gICAgZ2V0Q3VzdG9tT2lkY1N1YkNsYWltRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvb2lkYy9jdXN0b21pemF0aW9uL3N1YlwiLFxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnRQdWJsaWNLZXk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMvcHVibGljLWtleVwiLFxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnRTZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnRWYXJpYWJsZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy93b3JrZmxvd1wiLFxuICAgIF0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zXCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0SG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL3tob3N0ZWRfcnVubmVyX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0SG9zdGVkUnVubmVyc0dpdGh1Yk93bmVkSW1hZ2VzRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL2ltYWdlcy9naXRodWItb3duZWRcIixcbiAgICBdLFxuICAgIGdldEhvc3RlZFJ1bm5lcnNMaW1pdHNGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMvbGltaXRzXCIsXG4gICAgXSxcbiAgICBnZXRIb3N0ZWRSdW5uZXJzTWFjaGluZVNwZWNzRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL21hY2hpbmUtc2l6ZXNcIixcbiAgICBdLFxuICAgIGdldEhvc3RlZFJ1bm5lcnNQYXJ0bmVySW1hZ2VzRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL2ltYWdlcy9wYXJ0bmVyXCIsXG4gICAgXSxcbiAgICBnZXRIb3N0ZWRSdW5uZXJzUGxhdGZvcm1zRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL3BsYXRmb3Jtc1wiLFxuICAgIF0sXG4gICAgZ2V0Sm9iRm9yV29ya2Zsb3dSdW46IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9qb2JzL3tqb2JfaWR9XCJdLFxuICAgIGdldE9yZ1B1YmxpY0tleTogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy9wdWJsaWMta2V5XCJdLFxuICAgIGdldE9yZ1NlY3JldDogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldE9yZ1ZhcmlhYmxlOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIGdldFBlbmRpbmdEZXBsb3ltZW50c0ZvclJ1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9wZW5kaW5nX2RlcGxveW1lbnRzXCIsXG4gICAgXSxcbiAgICBnZXRSZXBvUGVybWlzc2lvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiYWN0aW9uc1wiLCBcImdldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnlcIl0gfSxcbiAgICBdLFxuICAgIGdldFJlcG9QdWJsaWNLZXk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRSZXBvVmFyaWFibGU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIGdldFJldmlld3NGb3JSdW46IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXBwcm92YWxzXCIsXG4gICAgXSxcbiAgICBnZXRTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCJdLFxuICAgIGdldFNlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRXb3JrZmxvdzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9XCJdLFxuICAgIGdldFdvcmtmbG93QWNjZXNzVG9SZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy9hY2Nlc3NcIixcbiAgICBdLFxuICAgIGdldFdvcmtmbG93UnVuOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfVwiXSxcbiAgICBnZXRXb3JrZmxvd1J1bkF0dGVtcHQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgZ2V0V29ya2Zsb3dSdW5Vc2FnZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS90aW1pbmdcIixcbiAgICBdLFxuICAgIGdldFdvcmtmbG93VXNhZ2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L3RpbWluZ1wiLFxuICAgIF0sXG4gICAgbGlzdEFydGlmYWN0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHNcIl0sXG4gICAgbGlzdEVudmlyb25tZW50U2VjcmV0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0c1wiLFxuICAgIF0sXG4gICAgbGlzdEVudmlyb25tZW50VmFyaWFibGVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS92YXJpYWJsZXNcIixcbiAgICBdLFxuICAgIGxpc3RHaXRodWJIb3N0ZWRSdW5uZXJzSW5Hcm91cEZvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXItZ3JvdXBzL3tydW5uZXJfZ3JvdXBfaWR9L2hvc3RlZC1ydW5uZXJzXCIsXG4gICAgXSxcbiAgICBsaXN0SG9zdGVkUnVubmVyc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnNcIl0sXG4gICAgbGlzdEpvYnNGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9qb2JzXCIsXG4gICAgXSxcbiAgICBsaXN0Sm9ic0ZvcldvcmtmbG93UnVuQXR0ZW1wdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9L2pvYnNcIixcbiAgICBdLFxuICAgIGxpc3RMYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBsaXN0TGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBsaXN0T3JnU2VjcmV0czogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0c1wiXSxcbiAgICBsaXN0T3JnVmFyaWFibGVzOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXNcIl0sXG4gICAgbGlzdFJlcG9Pcmdhbml6YXRpb25TZWNyZXRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vcmdhbml6YXRpb24tc2VjcmV0c1wiLFxuICAgIF0sXG4gICAgbGlzdFJlcG9Pcmdhbml6YXRpb25WYXJpYWJsZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi12YXJpYWJsZXNcIixcbiAgICBdLFxuICAgIGxpc3RSZXBvU2VjcmV0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9WYXJpYWJsZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXNcIl0sXG4gICAgbGlzdFJlcG9Xb3JrZmxvd3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3NcIl0sXG4gICAgbGlzdFJ1bm5lckFwcGxpY2F0aW9uc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy9kb3dubG9hZHNcIl0sXG4gICAgbGlzdFJ1bm5lckFwcGxpY2F0aW9uc0ZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvZG93bmxvYWRzXCIsXG4gICAgXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1ZhcmlhYmxlOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc2l0b3JpZXNFbmFibGVkR2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGxpc3RTZWxmSG9zdGVkUnVubmVyc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyc1wiXSxcbiAgICBsaXN0U2VsZkhvc3RlZFJ1bm5lcnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVyc1wiXSxcbiAgICBsaXN0V29ya2Zsb3dSdW5BcnRpZmFjdHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXJ0aWZhY3RzXCIsXG4gICAgXSxcbiAgICBsaXN0V29ya2Zsb3dSdW5zOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9ydW5zXCIsXG4gICAgXSxcbiAgICBsaXN0V29ya2Zsb3dSdW5zRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnNcIl0sXG4gICAgcmVSdW5Kb2JGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2pvYnMve2pvYl9pZH0vcmVydW5cIixcbiAgICBdLFxuICAgIHJlUnVuV29ya2Zsb3c6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9yZXJ1blwiXSxcbiAgICByZVJ1bldvcmtmbG93RmFpbGVkSm9iczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vcmVydW4tZmFpbGVkLWpvYnNcIixcbiAgICBdLFxuICAgIHJlbW92ZUFsbEN1c3RvbUxhYmVsc0Zyb21TZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICByZW1vdmVBbGxDdXN0b21MYWJlbHNGcm9tU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICByZW1vdmVDdXN0b21MYWJlbEZyb21TZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlQ3VzdG9tTGFiZWxGcm9tU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1ZhcmlhYmxlOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmV2aWV3Q3VzdG9tR2F0ZXNGb3JSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlXCIsXG4gICAgXSxcbiAgICByZXZpZXdQZW5kaW5nRGVwbG95bWVudHNGb3JSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3BlbmRpbmdfZGVwbG95bWVudHNcIixcbiAgICBdLFxuICAgIHNldEFsbG93ZWRBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIixcbiAgICBdLFxuICAgIHNldEFsbG93ZWRBY3Rpb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgc2V0Q3VzdG9tTGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiLFxuICAgIF0sXG4gICAgc2V0Q3VzdG9tTGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBzZXRDdXN0b21PaWRjU3ViQ2xhaW1Gb3JSZXBvOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vaWRjL2N1c3RvbWl6YXRpb24vc3ViXCIsXG4gICAgXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIixcbiAgICBdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCIsXG4gICAgXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnNcIixcbiAgICBdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCIsXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHNldFNlbGVjdGVkUmVwb3NGb3JPcmdWYXJpYWJsZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc2l0b3JpZXNFbmFibGVkR2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHNldFdvcmtmbG93QWNjZXNzVG9SZXBvc2l0b3J5OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy9hY2Nlc3NcIixcbiAgICBdLFxuICAgIHVwZGF0ZUVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMve2hvc3RlZF9ydW5uZXJfaWR9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVPcmdWYXJpYWJsZTogW1wiUEFUQ0ggL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIHVwZGF0ZVJlcG9WYXJpYWJsZTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCIsXG4gICAgXSxcbiAgfSxcbiAgYWN0aXZpdHk6IHtcbiAgICBjaGVja1JlcG9Jc1N0YXJyZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc3RhcnJlZC97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBkZWxldGVSZXBvU3Vic2NyaXB0aW9uOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBkZWxldGVUaHJlYWRTdWJzY3JpcHRpb246IFtcbiAgICAgIFwiREVMRVRFIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH0vc3Vic2NyaXB0aW9uXCIsXG4gICAgXSxcbiAgICBnZXRGZWVkczogW1wiR0VUIC9mZWVkc1wiXSxcbiAgICBnZXRSZXBvU3Vic2NyaXB0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBnZXRUaHJlYWQ6IFtcIkdFVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9XCJdLFxuICAgIGdldFRocmVhZFN1YnNjcmlwdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9L3N1YnNjcmlwdGlvblwiLFxuICAgIF0sXG4gICAgbGlzdEV2ZW50c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzXCJdLFxuICAgIGxpc3ROb3RpZmljYXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvbm90aWZpY2F0aW9uc1wiXSxcbiAgICBsaXN0T3JnRXZlbnRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50cy9vcmdzL3tvcmd9XCIsXG4gICAgXSxcbiAgICBsaXN0UHVibGljRXZlbnRzOiBbXCJHRVQgL2V2ZW50c1wiXSxcbiAgICBsaXN0UHVibGljRXZlbnRzRm9yUmVwb05ldHdvcms6IFtcIkdFVCAvbmV0d29ya3Mve293bmVyfS97cmVwb30vZXZlbnRzXCJdLFxuICAgIGxpc3RQdWJsaWNFdmVudHNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL3B1YmxpY1wiXSxcbiAgICBsaXN0UHVibGljT3JnRXZlbnRzOiBbXCJHRVQgL29yZ3Mve29yZ30vZXZlbnRzXCJdLFxuICAgIGxpc3RSZWNlaXZlZEV2ZW50c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHNcIl0sXG4gICAgbGlzdFJlY2VpdmVkUHVibGljRXZlbnRzRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzL3B1YmxpY1wiLFxuICAgIF0sXG4gICAgbGlzdFJlcG9FdmVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZXZlbnRzXCJdLFxuICAgIGxpc3RSZXBvTm90aWZpY2F0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbm90aWZpY2F0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdFJlcG9zU3RhcnJlZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zdGFycmVkXCJdLFxuICAgIGxpc3RSZXBvc1N0YXJyZWRCeVVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdGFycmVkXCJdLFxuICAgIGxpc3RSZXBvc1dhdGNoZWRCeVVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdWJzY3JpcHRpb25zXCJdLFxuICAgIGxpc3RTdGFyZ2F6ZXJzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGFyZ2F6ZXJzXCJdLFxuICAgIGxpc3RXYXRjaGVkUmVwb3NGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3N1YnNjcmlwdGlvbnNcIl0sXG4gICAgbGlzdFdhdGNoZXJzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdWJzY3JpYmVyc1wiXSxcbiAgICBtYXJrTm90aWZpY2F0aW9uc0FzUmVhZDogW1wiUFVUIC9ub3RpZmljYXRpb25zXCJdLFxuICAgIG1hcmtSZXBvTm90aWZpY2F0aW9uc0FzUmVhZDogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ub3RpZmljYXRpb25zXCJdLFxuICAgIG1hcmtUaHJlYWRBc0RvbmU6IFtcIkRFTEVURSAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9XCJdLFxuICAgIG1hcmtUaHJlYWRBc1JlYWQ6IFtcIlBBVENIIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH1cIl0sXG4gICAgc2V0UmVwb1N1YnNjcmlwdGlvbjogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdWJzY3JpcHRpb25cIl0sXG4gICAgc2V0VGhyZWFkU3Vic2NyaXB0aW9uOiBbXG4gICAgICBcIlBVVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9L3N1YnNjcmlwdGlvblwiLFxuICAgIF0sXG4gICAgc3RhclJlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC91c2VyL3N0YXJyZWQve293bmVyfS97cmVwb31cIl0sXG4gICAgdW5zdGFyUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvc3RhcnJlZC97b3duZXJ9L3tyZXBvfVwiXSxcbiAgfSxcbiAgYXBwczoge1xuICAgIGFkZFJlcG9Ub0luc3RhbGxhdGlvbjogW1xuICAgICAgXCJQVVQgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiYXBwc1wiLCBcImFkZFJlcG9Ub0luc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBhZGRSZXBvVG9JbnN0YWxsYXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBjaGVja1Rva2VuOiBbXCJQT1NUIC9hcHBsaWNhdGlvbnMve2NsaWVudF9pZH0vdG9rZW5cIl0sXG4gICAgY3JlYXRlRnJvbU1hbmlmZXN0OiBbXCJQT1NUIC9hcHAtbWFuaWZlc3RzL3tjb2RlfS9jb252ZXJzaW9uc1wiXSxcbiAgICBjcmVhdGVJbnN0YWxsYXRpb25BY2Nlc3NUb2tlbjogW1xuICAgICAgXCJQT1NUIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9hY2Nlc3NfdG9rZW5zXCIsXG4gICAgXSxcbiAgICBkZWxldGVBdXRob3JpemF0aW9uOiBbXCJERUxFVEUgL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS9ncmFudFwiXSxcbiAgICBkZWxldGVJbnN0YWxsYXRpb246IFtcIkRFTEVURSAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH1cIl0sXG4gICAgZGVsZXRlVG9rZW46IFtcIkRFTEVURSAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuXCJdLFxuICAgIGdldEF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvYXBwXCJdLFxuICAgIGdldEJ5U2x1ZzogW1wiR0VUIC9hcHBzL3thcHBfc2x1Z31cIl0sXG4gICAgZ2V0SW5zdGFsbGF0aW9uOiBbXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9XCJdLFxuICAgIGdldE9yZ0luc3RhbGxhdGlvbjogW1wiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRSZXBvSW5zdGFsbGF0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRTdWJzY3JpcHRpb25QbGFuRm9yQWNjb3VudDogW1xuICAgICAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvYWNjb3VudHMve2FjY291bnRfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRTdWJzY3JpcHRpb25QbGFuRm9yQWNjb3VudFN0dWJiZWQ6IFtcbiAgICAgIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvYWNjb3VudHMve2FjY291bnRfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRVc2VySW5zdGFsbGF0aW9uOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vaW5zdGFsbGF0aW9uXCJdLFxuICAgIGdldFdlYmhvb2tDb25maWdGb3JBcHA6IFtcIkdFVCAvYXBwL2hvb2svY29uZmlnXCJdLFxuICAgIGdldFdlYmhvb2tEZWxpdmVyeTogW1wiR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIl0sXG4gICAgbGlzdEFjY291bnRzRm9yUGxhbjogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiXSxcbiAgICBsaXN0QWNjb3VudHNGb3JQbGFuU3R1YmJlZDogW1xuICAgICAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9wbGFucy97cGxhbl9pZH0vYWNjb3VudHNcIixcbiAgICBdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25SZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgbGlzdEluc3RhbGxhdGlvblJlcXVlc3RzRm9yQXV0aGVudGljYXRlZEFwcDogW1xuICAgICAgXCJHRVQgL2FwcC9pbnN0YWxsYXRpb24tcmVxdWVzdHNcIixcbiAgICBdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25zOiBbXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zXCJdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zXCJdLFxuICAgIGxpc3RQbGFuczogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zXCJdLFxuICAgIGxpc3RQbGFuc1N0dWJiZWQ6IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zXCJdLFxuICAgIGxpc3RSZXBvc0FjY2Vzc2libGVUb0luc3RhbGxhdGlvbjogW1wiR0VUIC9pbnN0YWxsYXRpb24vcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RTdWJzY3JpcHRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXNcIl0sXG4gICAgbGlzdFN1YnNjcmlwdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclN0dWJiZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlcy9zdHViYmVkXCIsXG4gICAgXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcIkdFVCAvYXBwL2hvb2svZGVsaXZlcmllc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiUE9TVCAvYXBwL2hvb2svZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCIsXG4gICAgXSxcbiAgICByZW1vdmVSZXBvRnJvbUluc3RhbGxhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiYXBwc1wiLCBcInJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIHJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmVzZXRUb2tlbjogW1wiUEFUQ0ggL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS90b2tlblwiXSxcbiAgICByZXZva2VJbnN0YWxsYXRpb25BY2Nlc3NUb2tlbjogW1wiREVMRVRFIC9pbnN0YWxsYXRpb24vdG9rZW5cIl0sXG4gICAgc2NvcGVUb2tlbjogW1wiUE9TVCAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuL3Njb3BlZFwiXSxcbiAgICBzdXNwZW5kSW5zdGFsbGF0aW9uOiBbXCJQVVQgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3N1c3BlbmRlZFwiXSxcbiAgICB1bnN1c3BlbmRJbnN0YWxsYXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9zdXNwZW5kZWRcIixcbiAgICBdLFxuICAgIHVwZGF0ZVdlYmhvb2tDb25maWdGb3JBcHA6IFtcIlBBVENIIC9hcHAvaG9vay9jb25maWdcIl0sXG4gIH0sXG4gIGJpbGxpbmc6IHtcbiAgICBnZXRHaXRodWJBY3Rpb25zQmlsbGluZ09yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvYWN0aW9uc1wiXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zQmlsbGluZ1VzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0R2l0aHViQmlsbGluZ1VzYWdlUmVwb3J0T3JnOiBbXG4gICAgICBcIkdFVCAvb3JnYW5pemF0aW9ucy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL3VzYWdlXCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJQYWNrYWdlc0JpbGxpbmdPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL3BhY2thZ2VzXCJdLFxuICAgIGdldEdpdGh1YlBhY2thZ2VzQmlsbGluZ1VzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvcGFja2FnZXNcIixcbiAgICBdLFxuICAgIGdldFNoYXJlZFN0b3JhZ2VCaWxsaW5nT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL3NoYXJlZC1zdG9yYWdlXCIsXG4gICAgXSxcbiAgICBnZXRTaGFyZWRTdG9yYWdlQmlsbGluZ1VzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvc2hhcmVkLXN0b3JhZ2VcIixcbiAgICBdLFxuICB9LFxuICBjaGVja3M6IHtcbiAgICBjcmVhdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnNcIl0sXG4gICAgY3JlYXRlU3VpdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlc1wiXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfVwiXSxcbiAgICBnZXRTdWl0ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfVwiXSxcbiAgICBsaXN0QW5ub3RhdGlvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L2Fubm90YXRpb25zXCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yUmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stcnVuc1wiXSxcbiAgICBsaXN0Rm9yU3VpdGU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfS9jaGVjay1ydW5zXCIsXG4gICAgXSxcbiAgICBsaXN0U3VpdGVzRm9yUmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stc3VpdGVzXCJdLFxuICAgIHJlcmVxdWVzdFJ1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L3JlcmVxdWVzdFwiLFxuICAgIF0sXG4gICAgcmVyZXF1ZXN0U3VpdGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3tjaGVja19zdWl0ZV9pZH0vcmVyZXF1ZXN0XCIsXG4gICAgXSxcbiAgICBzZXRTdWl0ZXNQcmVmZXJlbmNlczogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3ByZWZlcmVuY2VzXCIsXG4gICAgXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9XCJdLFxuICB9LFxuICBjb2RlU2Nhbm5pbmc6IHtcbiAgICBjb21taXRBdXRvZml4OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2F1dG9maXgvY29tbWl0c1wiLFxuICAgIF0sXG4gICAgY3JlYXRlQXV0b2ZpeDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9hdXRvZml4XCIsXG4gICAgXSxcbiAgICBjcmVhdGVWYXJpYW50QW5hbHlzaXM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9jb2RlcWwvdmFyaWFudC1hbmFseXNlc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlQW5hbHlzaXM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzL3thbmFseXNpc19pZH17P2NvbmZpcm1fZGVsZXRlfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlQ29kZXFsRGF0YWJhc2U6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC9kYXRhYmFzZXMve2xhbmd1YWdlfVwiLFxuICAgIF0sXG4gICAgZ2V0QWxlcnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWRQYXJhbWV0ZXJzOiB7IGFsZXJ0X2lkOiBcImFsZXJ0X251bWJlclwiIH0gfSxcbiAgICBdLFxuICAgIGdldEFuYWx5c2lzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlcy97YW5hbHlzaXNfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRBdXRvZml4OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vYXV0b2ZpeFwiLFxuICAgIF0sXG4gICAgZ2V0Q29kZXFsRGF0YWJhc2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC9kYXRhYmFzZXMve2xhbmd1YWdlfVwiLFxuICAgIF0sXG4gICAgZ2V0RGVmYXVsdFNldHVwOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvZGVmYXVsdC1zZXR1cFwiXSxcbiAgICBnZXRTYXJpZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL3Nhcmlmcy97c2FyaWZfaWR9XCJdLFxuICAgIGdldFZhcmlhbnRBbmFseXNpczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvY29kZXFsL3ZhcmlhbnQtYW5hbHlzZXMve2NvZGVxbF92YXJpYW50X2FuYWx5c2lzX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0VmFyaWFudEFuYWx5c2lzUmVwb1Rhc2s6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC92YXJpYW50LWFuYWx5c2VzL3tjb2RlcWxfdmFyaWFudF9hbmFseXNpc19pZH0vcmVwb3Mve3JlcG9fb3duZXJ9L3tyZXBvX25hbWV9XCIsXG4gICAgXSxcbiAgICBsaXN0QWxlcnRJbnN0YW5jZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9pbnN0YW5jZXNcIixcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzSW5zdGFuY2VzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vaW5zdGFuY2VzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiY29kZVNjYW5uaW5nXCIsIFwibGlzdEFsZXJ0SW5zdGFuY2VzXCJdIH0sXG4gICAgXSxcbiAgICBsaXN0Q29kZXFsRGF0YWJhc2VzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9jb2RlcWwvZGF0YWJhc2VzXCIsXG4gICAgXSxcbiAgICBsaXN0UmVjZW50QW5hbHlzZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlc1wiXSxcbiAgICB1cGRhdGVBbGVydDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn1cIixcbiAgICBdLFxuICAgIHVwZGF0ZURlZmF1bHRTZXR1cDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9kZWZhdWx0LXNldHVwXCIsXG4gICAgXSxcbiAgICB1cGxvYWRTYXJpZjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9zYXJpZnNcIl0sXG4gIH0sXG4gIGNvZGVTZWN1cml0eToge1xuICAgIGF0dGFjaENvbmZpZ3VyYXRpb246IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9hdHRhY2hcIixcbiAgICBdLFxuICAgIGF0dGFjaEVudGVycHJpc2VDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIlBPU1QgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9hdHRhY2hcIixcbiAgICBdLFxuICAgIGNyZWF0ZUNvbmZpZ3VyYXRpb246IFtcIlBPU1QgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiXSxcbiAgICBjcmVhdGVDb25maWd1cmF0aW9uRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJQT1NUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlQ29uZmlndXJhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUNvbmZpZ3VyYXRpb25Gb3JFbnRlcnByaXNlOiBbXG4gICAgICBcIkRFTEVURSAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZXRhY2hDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL2RldGFjaFwiLFxuICAgIF0sXG4gICAgZ2V0Q29uZmlndXJhdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGdldENvbmZpZ3VyYXRpb25Gb3JSZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zZWN1cml0eS1jb25maWd1cmF0aW9uXCIsXG4gICAgXSxcbiAgICBnZXRDb25maWd1cmF0aW9uc0ZvckVudGVycHJpc2U6IFtcbiAgICAgIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0Q29uZmlndXJhdGlvbnNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zXCJdLFxuICAgIGdldERlZmF1bHRDb25maWd1cmF0aW9uczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy9kZWZhdWx0c1wiLFxuICAgIF0sXG4gICAgZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb25zRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL2RlZmF1bHRzXCIsXG4gICAgXSxcbiAgICBnZXRSZXBvc2l0b3JpZXNGb3JDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGdldFJlcG9zaXRvcmllc0ZvckVudGVycHJpc2VDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgZ2V0U2luZ2xlQ29uZmlndXJhdGlvbkZvckVudGVycHJpc2U6IFtcbiAgICAgIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIHNldENvbmZpZ3VyYXRpb25Bc0RlZmF1bHQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L2RlZmF1bHRzXCIsXG4gICAgXSxcbiAgICBzZXRDb25maWd1cmF0aW9uQXNEZWZhdWx0Rm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJQVVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9kZWZhdWx0c1wiLFxuICAgIF0sXG4gICAgdXBkYXRlQ29uZmlndXJhdGlvbjogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlRW50ZXJwcmlzZUNvbmZpZ3VyYXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gIH0sXG4gIGNvZGVzT2ZDb25kdWN0OiB7XG4gICAgZ2V0QWxsQ29kZXNPZkNvbmR1Y3Q6IFtcIkdFVCAvY29kZXNfb2ZfY29uZHVjdFwiXSxcbiAgICBnZXRDb25kdWN0Q29kZTogW1wiR0VUIC9jb2Rlc19vZl9jb25kdWN0L3trZXl9XCJdLFxuICB9LFxuICBjb2Rlc3BhY2VzOiB7XG4gICAgYWRkUmVwb3NpdG9yeUZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBhZGRTZWxlY3RlZFJlcG9Ub09yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgY2hlY2tQZXJtaXNzaW9uc0ZvckRldmNvbnRhaW5lcjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvcGVybWlzc2lvbnNfY2hlY2tcIixcbiAgICBdLFxuICAgIGNvZGVzcGFjZU1hY2hpbmVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9tYWNoaW5lc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvY29kZXNwYWNlc1wiXSxcbiAgICBjcmVhdGVPclVwZGF0ZU9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZVNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlV2l0aFByRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb2Rlc3BhY2VzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVXaXRoUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXNcIixcbiAgICBdLFxuICAgIGRlbGV0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJdLFxuICAgIGRlbGV0ZUZyb21Pcmdhbml6YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlU2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBleHBvcnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9leHBvcnRzXCIsXG4gICAgXSxcbiAgICBnZXRDb2Rlc3BhY2VzRm9yVXNlckluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlc1wiLFxuICAgIF0sXG4gICAgZ2V0RXhwb3J0RGV0YWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vZXhwb3J0cy97ZXhwb3J0X2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0UHVibGljS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy9wdWJsaWMta2V5XCIsXG4gICAgXSxcbiAgICBnZXRSZXBvUHVibGljS2V5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzL3B1YmxpYy1rZXlcIixcbiAgICBdLFxuICAgIGdldFJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0U2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBsaXN0RGV2Y29udGFpbmVyc0luUmVwb3NpdG9yeUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9kZXZjb250YWluZXJzXCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9jb2Rlc3BhY2VzXCJdLFxuICAgIGxpc3RJbk9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWRQYXJhbWV0ZXJzOiB7IG9yZ19pZDogXCJvcmdcIiB9IH0sXG4gICAgXSxcbiAgICBsaXN0SW5SZXBvc2l0b3J5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzXCIsXG4gICAgXSxcbiAgICBsaXN0T3JnU2VjcmV0czogW1wiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0c1wiXSxcbiAgICBsaXN0UmVwb1NlY3JldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzXCJdLFxuICAgIGxpc3RSZXBvc2l0b3JpZXNGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0U2VjcmV0c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzXCJdLFxuICAgIGxpc3RTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHByZUZsaWdodFdpdGhSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL25ld1wiLFxuICAgIF0sXG4gICAgcHVibGlzaEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3B1Ymxpc2hcIixcbiAgICBdLFxuICAgIHJlbW92ZVJlcG9zaXRvcnlGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmVwb01hY2hpbmVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL21hY2hpbmVzXCIsXG4gICAgXSxcbiAgICBzZXRSZXBvc2l0b3JpZXNGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHN0YXJ0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3N0YXJ0XCJdLFxuICAgIHN0b3BGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vc3RvcFwiXSxcbiAgICBzdG9wSW5Pcmdhbml6YXRpb246IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3N0b3BcIixcbiAgICBdLFxuICAgIHVwZGF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQQVRDSCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIl0sXG4gIH0sXG4gIGNvcGlsb3Q6IHtcbiAgICBhZGRDb3BpbG90U2VhdHNGb3JUZWFtczogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWxlY3RlZF90ZWFtc1wiLFxuICAgIF0sXG4gICAgYWRkQ29waWxvdFNlYXRzRm9yVXNlcnM6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdXNlcnNcIixcbiAgICBdLFxuICAgIGNhbmNlbENvcGlsb3RTZWF0QXNzaWdubWVudEZvclRlYW1zOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdGVhbXNcIixcbiAgICBdLFxuICAgIGNhbmNlbENvcGlsb3RTZWF0QXNzaWdubWVudEZvclVzZXJzOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdXNlcnNcIixcbiAgICBdLFxuICAgIGNvcGlsb3RNZXRyaWNzRm9yT3JnYW5pemF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9tZXRyaWNzXCJdLFxuICAgIGNvcGlsb3RNZXRyaWNzRm9yVGVhbTogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW0ve3RlYW1fc2x1Z30vY29waWxvdC9tZXRyaWNzXCJdLFxuICAgIGdldENvcGlsb3RPcmdhbml6YXRpb25EZXRhaWxzOiBbXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nXCJdLFxuICAgIGdldENvcGlsb3RTZWF0RGV0YWlsc0ZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb3BpbG90XCIsXG4gICAgXSxcbiAgICBsaXN0Q29waWxvdFNlYXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nL3NlYXRzXCJdLFxuICAgIHVzYWdlTWV0cmljc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2NvcGlsb3QvdXNhZ2VcIl0sXG4gICAgdXNhZ2VNZXRyaWNzRm9yVGVhbTogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW0ve3RlYW1fc2x1Z30vY29waWxvdC91c2FnZVwiXSxcbiAgfSxcbiAgZGVwZW5kYWJvdDoge1xuICAgIGFkZFNlbGVjdGVkUmVwb1RvT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZU9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBkZWxldGVPcmdTZWNyZXQ6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBkZWxldGVSZXBvU2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGdldEFsZXJ0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3QvYWxlcnRzL3thbGVydF9udW1iZXJ9XCJdLFxuICAgIGdldE9yZ1B1YmxpY0tleTogW1wiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy9wdWJsaWMta2V5XCJdLFxuICAgIGdldE9yZ1NlY3JldDogW1wiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldFJlcG9QdWJsaWNLZXk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHMvcHVibGljLWtleVwiLFxuICAgIF0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9kZXBlbmRhYm90L2FsZXJ0c1wiLFxuICAgIF0sXG4gICAgbGlzdEFsZXJ0c0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3QvYWxlcnRzXCJdLFxuICAgIGxpc3RBbGVydHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3QvYWxlcnRzXCJdLFxuICAgIGxpc3RPcmdTZWNyZXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzXCJdLFxuICAgIGxpc3RSZXBvU2VjcmV0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHNcIl0sXG4gICAgbGlzdFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICB1cGRhdGVBbGVydDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHMve2FsZXJ0X251bWJlcn1cIixcbiAgICBdLFxuICB9LFxuICBkZXBlbmRlbmN5R3JhcGg6IHtcbiAgICBjcmVhdGVSZXBvc2l0b3J5U25hcHNob3Q6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kZW5jeS1ncmFwaC9zbmFwc2hvdHNcIixcbiAgICBdLFxuICAgIGRpZmZSYW5nZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGVuY3ktZ3JhcGgvY29tcGFyZS97YmFzZWhlYWR9XCIsXG4gICAgXSxcbiAgICBleHBvcnRTYm9tOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGVuY3ktZ3JhcGgvc2JvbVwiXSxcbiAgfSxcbiAgZW1vamlzOiB7IGdldDogW1wiR0VUIC9lbW9qaXNcIl0gfSxcbiAgZ2lzdHM6IHtcbiAgICBjaGVja0lzU3RhcnJlZDogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vc3RhclwiXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL2dpc3RzXCJdLFxuICAgIGNyZWF0ZUNvbW1lbnQ6IFtcIlBPU1QgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50c1wiXSxcbiAgICBkZWxldGU6IFtcIkRFTEVURSAvZ2lzdHMve2dpc3RfaWR9XCJdLFxuICAgIGRlbGV0ZUNvbW1lbnQ6IFtcIkRFTEVURSAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBmb3JrOiBbXCJQT1NUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIl0sXG4gICAgZ2V0OiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfVwiXSxcbiAgICBnZXRDb21tZW50OiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZ2V0UmV2aXNpb246IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L3tzaGF9XCJdLFxuICAgIGxpc3Q6IFtcIkdFVCAvZ2lzdHNcIl0sXG4gICAgbGlzdENvbW1lbnRzOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWl0c1wiXSxcbiAgICBsaXN0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dpc3RzXCJdLFxuICAgIGxpc3RGb3JrczogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIl0sXG4gICAgbGlzdFB1YmxpYzogW1wiR0VUIC9naXN0cy9wdWJsaWNcIl0sXG4gICAgbGlzdFN0YXJyZWQ6IFtcIkdFVCAvZ2lzdHMvc3RhcnJlZFwiXSxcbiAgICBzdGFyOiBbXCJQVVQgL2dpc3RzL3tnaXN0X2lkfS9zdGFyXCJdLFxuICAgIHVuc3RhcjogW1wiREVMRVRFIC9naXN0cy97Z2lzdF9pZH0vc3RhclwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9naXN0cy97Z2lzdF9pZH1cIl0sXG4gICAgdXBkYXRlQ29tbWVudDogW1wiUEFUQ0ggL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gIH0sXG4gIGdpdDoge1xuICAgIGNyZWF0ZUJsb2I6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9ibG9ic1wiXSxcbiAgICBjcmVhdGVDb21taXQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9jb21taXRzXCJdLFxuICAgIGNyZWF0ZVJlZjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3JlZnNcIl0sXG4gICAgY3JlYXRlVGFnOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdGFnc1wiXSxcbiAgICBjcmVhdGVUcmVlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdHJlZXNcIl0sXG4gICAgZGVsZXRlUmVmOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9yZWZzL3tyZWZ9XCJdLFxuICAgIGdldEJsb2I6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2Jsb2JzL3tmaWxlX3NoYX1cIl0sXG4gICAgZ2V0Q29tbWl0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9jb21taXRzL3tjb21taXRfc2hhfVwiXSxcbiAgICBnZXRSZWY6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3JlZi97cmVmfVwiXSxcbiAgICBnZXRUYWc6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3RhZ3Mve3RhZ19zaGF9XCJdLFxuICAgIGdldFRyZWU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3RyZWVzL3t0cmVlX3NoYX1cIl0sXG4gICAgbGlzdE1hdGNoaW5nUmVmczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvbWF0Y2hpbmctcmVmcy97cmVmfVwiXSxcbiAgICB1cGRhdGVSZWY6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmcy97cmVmfVwiXSxcbiAgfSxcbiAgZ2l0aWdub3JlOiB7XG4gICAgZ2V0QWxsVGVtcGxhdGVzOiBbXCJHRVQgL2dpdGlnbm9yZS90ZW1wbGF0ZXNcIl0sXG4gICAgZ2V0VGVtcGxhdGU6IFtcIkdFVCAvZ2l0aWdub3JlL3RlbXBsYXRlcy97bmFtZX1cIl0sXG4gIH0sXG4gIGhvc3RlZENvbXB1dGU6IHtcbiAgICBjcmVhdGVOZXR3b3JrQ29uZmlndXJhdGlvbkZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstY29uZmlndXJhdGlvbnNcIixcbiAgICBdLFxuICAgIGRlbGV0ZU5ldHdvcmtDb25maWd1cmF0aW9uRnJvbU9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vc2V0dGluZ3MvbmV0d29yay1jb25maWd1cmF0aW9ucy97bmV0d29ya19jb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0TmV0d29ya0NvbmZpZ3VyYXRpb25Gb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstY29uZmlndXJhdGlvbnMve25ldHdvcmtfY29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGdldE5ldHdvcmtTZXR0aW5nc0Zvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vc2V0dGluZ3MvbmV0d29yay1zZXR0aW5ncy97bmV0d29ya19zZXR0aW5nc19pZH1cIixcbiAgICBdLFxuICAgIGxpc3ROZXR3b3JrQ29uZmlndXJhdGlvbnNGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstY29uZmlndXJhdGlvbnNcIixcbiAgICBdLFxuICAgIHVwZGF0ZU5ldHdvcmtDb25maWd1cmF0aW9uRm9yT3JnOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstY29uZmlndXJhdGlvbnMve25ldHdvcmtfY29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICB9LFxuICBpbnRlcmFjdGlvbnM6IHtcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgZ2V0UmVzdHJpY3Rpb25zRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgZ2V0UmVzdHJpY3Rpb25zRm9yWW91clB1YmxpY1JlcG9zOiBbXG4gICAgICBcIkdFVCAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJpbnRlcmFjdGlvbnNcIiwgXCJnZXRSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgcmVtb3ZlUmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgcmVtb3ZlUmVzdHJpY3Rpb25zRm9yT3JnOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvclJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnRlcmFjdGlvbi1saW1pdHNcIixcbiAgICBdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvcllvdXJQdWJsaWNSZXBvczogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiaW50ZXJhY3Rpb25zXCIsIFwicmVtb3ZlUmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIHNldFJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQVVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHNldFJlc3RyaWN0aW9uc0Zvck9yZzogW1wiUFVUIC9vcmdzL3tvcmd9L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBzZXRSZXN0cmljdGlvbnNGb3JSZXBvOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBzZXRSZXN0cmljdGlvbnNGb3JZb3VyUHVibGljUmVwb3M6IFtcbiAgICAgIFwiUFVUIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcImludGVyYWN0aW9uc1wiLCBcInNldFJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgfSxcbiAgaXNzdWVzOiB7XG4gICAgYWRkQXNzaWduZWVzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9hc3NpZ25lZXNcIixcbiAgICBdLFxuICAgIGFkZExhYmVsczogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiXSxcbiAgICBhZGRTdWJJc3N1ZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vc3ViX2lzc3Vlc1wiLFxuICAgIF0sXG4gICAgY2hlY2tVc2VyQ2FuQmVBc3NpZ25lZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXMve2Fzc2lnbmVlfVwiXSxcbiAgICBjaGVja1VzZXJDYW5CZUFzc2lnbmVkVG9Jc3N1ZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9hc3NpZ25lZXMve2Fzc2lnbmVlfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXNcIl0sXG4gICAgY3JlYXRlQ29tbWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vY29tbWVudHNcIixcbiAgICBdLFxuICAgIGNyZWF0ZUxhYmVsOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHNcIl0sXG4gICAgY3JlYXRlTWlsZXN0b25lOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzXCJdLFxuICAgIGRlbGV0ZUNvbW1lbnQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVMYWJlbDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIGRlbGV0ZU1pbGVzdG9uZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXMve21pbGVzdG9uZV9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9XCJdLFxuICAgIGdldENvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBnZXRFdmVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvZXZlbnRzL3tldmVudF9pZH1cIl0sXG4gICAgZ2V0TGFiZWw6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICBnZXRNaWxlc3RvbmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC9pc3N1ZXNcIl0sXG4gICAgbGlzdEFzc2lnbmVlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXNcIl0sXG4gICAgbGlzdENvbW1lbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9ldmVudHNcIl0sXG4gICAgbGlzdEV2ZW50c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2V2ZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzRm9yVGltZWxpbmU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vdGltZWxpbmVcIixcbiAgICBdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2lzc3Vlc1wiXSxcbiAgICBsaXN0Rm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vaXNzdWVzXCJdLFxuICAgIGxpc3RGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlc1wiXSxcbiAgICBsaXN0TGFiZWxzRm9yTWlsZXN0b25lOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBsaXN0TGFiZWxzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHNcIl0sXG4gICAgbGlzdExhYmVsc09uSXNzdWU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBsaXN0TWlsZXN0b25lczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzXCJdLFxuICAgIGxpc3RTdWJJc3N1ZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vc3ViX2lzc3Vlc1wiLFxuICAgIF0sXG4gICAgbG9jazogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbG9ja1wiXSxcbiAgICByZW1vdmVBbGxMYWJlbHM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICByZW1vdmVBc3NpZ25lZXM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vYXNzaWduZWVzXCIsXG4gICAgXSxcbiAgICByZW1vdmVMYWJlbDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHMve25hbWV9XCIsXG4gICAgXSxcbiAgICByZW1vdmVTdWJJc3N1ZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9zdWJfaXNzdWVcIixcbiAgICBdLFxuICAgIHJlcHJpb3JpdGl6ZVN1Yklzc3VlOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vc3ViX2lzc3Vlcy9wcmlvcml0eVwiLFxuICAgIF0sXG4gICAgc2V0TGFiZWxzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIl0sXG4gICAgdW5sb2NrOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sb2NrXCJdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfVwiXSxcbiAgICB1cGRhdGVDb21tZW50OiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICB1cGRhdGVMYWJlbDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVscy97bmFtZX1cIl0sXG4gICAgdXBkYXRlTWlsZXN0b25lOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfVwiLFxuICAgIF0sXG4gIH0sXG4gIGxpY2Vuc2VzOiB7XG4gICAgZ2V0OiBbXCJHRVQgL2xpY2Vuc2VzL3tsaWNlbnNlfVwiXSxcbiAgICBnZXRBbGxDb21tb25seVVzZWQ6IFtcIkdFVCAvbGljZW5zZXNcIl0sXG4gICAgZ2V0Rm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9saWNlbnNlXCJdLFxuICB9LFxuICBtYXJrZG93bjoge1xuICAgIHJlbmRlcjogW1wiUE9TVCAvbWFya2Rvd25cIl0sXG4gICAgcmVuZGVyUmF3OiBbXG4gICAgICBcIlBPU1QgL21hcmtkb3duL3Jhd1wiLFxuICAgICAgeyBoZWFkZXJzOiB7IFwiY29udGVudC10eXBlXCI6IFwidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOFwiIH0gfSxcbiAgICBdLFxuICB9LFxuICBtZXRhOiB7XG4gICAgZ2V0OiBbXCJHRVQgL21ldGFcIl0sXG4gICAgZ2V0QWxsVmVyc2lvbnM6IFtcIkdFVCAvdmVyc2lvbnNcIl0sXG4gICAgZ2V0T2N0b2NhdDogW1wiR0VUIC9vY3RvY2F0XCJdLFxuICAgIGdldFplbjogW1wiR0VUIC96ZW5cIl0sXG4gICAgcm9vdDogW1wiR0VUIC9cIl0sXG4gIH0sXG4gIG1pZ3JhdGlvbnM6IHtcbiAgICBkZWxldGVBcmNoaXZlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiLFxuICAgIF0sXG4gICAgZGVsZXRlQXJjaGl2ZUZvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9hcmNoaXZlXCIsXG4gICAgXSxcbiAgICBkb3dubG9hZEFyY2hpdmVGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiLFxuICAgIF0sXG4gICAgZ2V0QXJjaGl2ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIixcbiAgICBdLFxuICAgIGdldFN0YXR1c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfVwiXSxcbiAgICBnZXRTdGF0dXNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9XCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21pZ3JhdGlvbnNcIl0sXG4gICAgbGlzdEZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnNcIl0sXG4gICAgbGlzdFJlcG9zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0UmVwb3NGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiXSxcbiAgICBsaXN0UmVwb3NGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcIm1pZ3JhdGlvbnNcIiwgXCJsaXN0UmVwb3NGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgc3RhcnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9taWdyYXRpb25zXCJdLFxuICAgIHN0YXJ0Rm9yT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnNcIl0sXG4gICAgdW5sb2NrUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zL3tyZXBvX25hbWV9L2xvY2tcIixcbiAgICBdLFxuICAgIHVubG9ja1JlcG9Gb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3Mve3JlcG9fbmFtZX0vbG9ja1wiLFxuICAgIF0sXG4gIH0sXG4gIG9pZGM6IHtcbiAgICBnZXRPaWRjQ3VzdG9tU3ViVGVtcGxhdGVGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvb2lkYy9jdXN0b21pemF0aW9uL3N1YlwiLFxuICAgIF0sXG4gICAgdXBkYXRlT2lkY0N1c3RvbVN1YlRlbXBsYXRlRm9yT3JnOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL29pZGMvY3VzdG9taXphdGlvbi9zdWJcIixcbiAgICBdLFxuICB9LFxuICBvcmdzOiB7XG4gICAgYWRkU2VjdXJpdHlNYW5hZ2VyVGVhbTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vc2VjdXJpdHktbWFuYWdlcnMvdGVhbXMve3RlYW1fc2x1Z31cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0Lm9yZ3MuYWRkU2VjdXJpdHlNYW5hZ2VyVGVhbSgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L29yZ3Mvc2VjdXJpdHktbWFuYWdlcnMjYWRkLWEtc2VjdXJpdHktbWFuYWdlci10ZWFtXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgYXNzaWduVGVhbVRvT3JnUm9sZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3RlYW1zL3t0ZWFtX3NsdWd9L3tyb2xlX2lkfVwiLFxuICAgIF0sXG4gICAgYXNzaWduVXNlclRvT3JnUm9sZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3VzZXJzL3t1c2VybmFtZX0ve3JvbGVfaWR9XCIsXG4gICAgXSxcbiAgICBibG9ja1VzZXI6IFtcIlBVVCAvb3Jncy97b3JnfS9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjYW5jZWxJbnZpdGF0aW9uOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCJdLFxuICAgIGNoZWNrQmxvY2tlZFVzZXI6IFtcIkdFVCAvb3Jncy97b3JnfS9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja01lbWJlcnNoaXBGb3JVc2VyOiBbXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9XCJdLFxuICAgIGNoZWNrUHVibGljTWVtYmVyc2hpcEZvclVzZXI6IFtcIkdFVCAvb3Jncy97b3JnfS9wdWJsaWNfbWVtYmVycy97dXNlcm5hbWV9XCJdLFxuICAgIGNvbnZlcnRNZW1iZXJUb091dHNpZGVDb2xsYWJvcmF0b3I6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L291dHNpZGVfY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVJbnZpdGF0aW9uOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCJdLFxuICAgIGNyZWF0ZUlzc3VlVHlwZTogW1wiUE9TVCAvb3Jncy97b3JnfS9pc3N1ZS10eXBlc1wiXSxcbiAgICBjcmVhdGVPclVwZGF0ZUN1c3RvbVByb3BlcnRpZXM6IFtcIlBBVENIIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlQ3VzdG9tUHJvcGVydGllc1ZhbHVlc0ZvclJlcG9zOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvdmFsdWVzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZUN1c3RvbVByb3BlcnR5OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9wcm9wZXJ0aWVzL3NjaGVtYS97Y3VzdG9tX3Byb3BlcnR5X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVXZWJob29rOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2hvb2tzXCJdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9vcmdzL3tvcmd9XCJdLFxuICAgIGRlbGV0ZUlzc3VlVHlwZTogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2lzc3VlLXR5cGVzL3tpc3N1ZV90eXBlX2lkfVwiXSxcbiAgICBkZWxldGVXZWJob29rOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9XCJdLFxuICAgIGVuYWJsZU9yRGlzYWJsZVNlY3VyaXR5UHJvZHVjdE9uQWxsT3JnUmVwb3M6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS97c2VjdXJpdHlfcHJvZHVjdH0ve2VuYWJsZW1lbnR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5vcmdzLmVuYWJsZU9yRGlzYWJsZVNlY3VyaXR5UHJvZHVjdE9uQWxsT3JnUmVwb3MoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9vcmdzL29yZ3MjZW5hYmxlLW9yLWRpc2FibGUtYS1zZWN1cml0eS1mZWF0dXJlLWZvci1hbi1vcmdhbml6YXRpb25cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvb3Jncy97b3JnfVwiXSxcbiAgICBnZXRBbGxDdXN0b21Qcm9wZXJ0aWVzOiBbXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWFcIl0sXG4gICAgZ2V0Q3VzdG9tUHJvcGVydHk6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hL3tjdXN0b21fcHJvcGVydHlfbmFtZX1cIixcbiAgICBdLFxuICAgIGdldE1lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21lbWJlcnNoaXBzL29yZ3Mve29yZ31cIl0sXG4gICAgZ2V0TWVtYmVyc2hpcEZvclVzZXI6IFtcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCJdLFxuICAgIGdldE9yZ1JvbGU6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9XCJdLFxuICAgIGdldE9yZ1J1bGVzZXRIaXN0b3J5OiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9L2hpc3RvcnlcIl0sXG4gICAgZ2V0T3JnUnVsZXNldFZlcnNpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3tydWxlc2V0X2lkfS9oaXN0b3J5L3t2ZXJzaW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0V2ViaG9vazogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIixcbiAgICBdLFxuICAgIGxpc3Q6IFtcIkdFVCAvb3JnYW5pemF0aW9uc1wiXSxcbiAgICBsaXN0QXBwSW5zdGFsbGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvbnNcIl0sXG4gICAgbGlzdEF0dGVzdGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2F0dGVzdGF0aW9ucy97c3ViamVjdF9kaWdlc3R9XCJdLFxuICAgIGxpc3RCbG9ja2VkVXNlcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9ibG9ja3NcIl0sXG4gICAgbGlzdEN1c3RvbVByb3BlcnRpZXNWYWx1ZXNGb3JSZXBvczogW1wiR0VUIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvdmFsdWVzXCJdLFxuICAgIGxpc3RGYWlsZWRJbnZpdGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2ZhaWxlZF9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9vcmdzXCJdLFxuICAgIGxpc3RGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vb3Jnc1wiXSxcbiAgICBsaXN0SW52aXRhdGlvblRlYW1zOiBbXCJHRVQgL29yZ3Mve29yZ30vaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9L3RlYW1zXCJdLFxuICAgIGxpc3RJc3N1ZVR5cGVzOiBbXCJHRVQgL29yZ3Mve29yZ30vaXNzdWUtdHlwZXNcIl0sXG4gICAgbGlzdE1lbWJlcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzXCJdLFxuICAgIGxpc3RNZW1iZXJzaGlwc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWVtYmVyc2hpcHMvb3Jnc1wiXSxcbiAgICBsaXN0T3JnUm9sZVRlYW1zOiBbXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS90ZWFtc1wiXSxcbiAgICBsaXN0T3JnUm9sZVVzZXJzOiBbXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS91c2Vyc1wiXSxcbiAgICBsaXN0T3JnUm9sZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXNcIl0sXG4gICAgbGlzdE9yZ2FuaXphdGlvbkZpbmVHcmFpbmVkUGVybWlzc2lvbnM6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1maW5lLWdyYWluZWQtcGVybWlzc2lvbnNcIixcbiAgICBdLFxuICAgIGxpc3RPdXRzaWRlQ29sbGFib3JhdG9yczogW1wiR0VUIC9vcmdzL3tvcmd9L291dHNpZGVfY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0UGF0R3JhbnRSZXBvc2l0b3JpZXM6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnMve3BhdF9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0UGF0R3JhbnRSZXF1ZXN0UmVwb3NpdG9yaWVzOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHMve3BhdF9yZXF1ZXN0X2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGxpc3RQYXRHcmFudFJlcXVlc3RzOiBbXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzXCJdLFxuICAgIGxpc3RQYXRHcmFudHM6IFtcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zXCJdLFxuICAgIGxpc3RQZW5kaW5nSW52aXRhdGlvbnM6IFtcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0UHVibGljTWVtYmVyczogW1wiR0VUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzXCJdLFxuICAgIGxpc3RTZWN1cml0eU1hbmFnZXJUZWFtczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vc2VjdXJpdHktbWFuYWdlcnNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0Lm9yZ3MubGlzdFNlY3VyaXR5TWFuYWdlclRlYW1zKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3Qvb3Jncy9zZWN1cml0eS1tYW5hZ2VycyNsaXN0LXNlY3VyaXR5LW1hbmFnZXItdGVhbXNcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiXSxcbiAgICBsaXN0V2ViaG9va3M6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rc1wiXSxcbiAgICBwaW5nV2ViaG9vazogW1wiUE9TVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vcGluZ3NcIl0sXG4gICAgcmVkZWxpdmVyV2ViaG9va0RlbGl2ZXJ5OiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfS9hdHRlbXB0c1wiLFxuICAgIF0sXG4gICAgcmVtb3ZlQ3VzdG9tUHJvcGVydHk6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hL3tjdXN0b21fcHJvcGVydHlfbmFtZX1cIixcbiAgICBdLFxuICAgIHJlbW92ZU1lbWJlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICByZW1vdmVNZW1iZXJzaGlwRm9yVXNlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgcmVtb3ZlT3V0c2lkZUNvbGxhYm9yYXRvcjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIixcbiAgICBdLFxuICAgIHJlbW92ZVB1YmxpY01lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VjdXJpdHlNYW5hZ2VyVGVhbTogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vc2VjdXJpdHktbWFuYWdlcnMvdGVhbXMve3RlYW1fc2x1Z31cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0Lm9yZ3MucmVtb3ZlU2VjdXJpdHlNYW5hZ2VyVGVhbSgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L29yZ3Mvc2VjdXJpdHktbWFuYWdlcnMjcmVtb3ZlLWEtc2VjdXJpdHktbWFuYWdlci10ZWFtXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgcmV2aWV3UGF0R3JhbnRSZXF1ZXN0OiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzL3twYXRfcmVxdWVzdF9pZH1cIixcbiAgICBdLFxuICAgIHJldmlld1BhdEdyYW50UmVxdWVzdHNJbkJ1bGs6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHNcIixcbiAgICBdLFxuICAgIHJldm9rZUFsbE9yZ1JvbGVzVGVhbTogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3RlYW1zL3t0ZWFtX3NsdWd9XCIsXG4gICAgXSxcbiAgICByZXZva2VBbGxPcmdSb2xlc1VzZXI6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy91c2Vycy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICByZXZva2VPcmdSb2xlVGVhbTogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3RlYW1zL3t0ZWFtX3NsdWd9L3tyb2xlX2lkfVwiLFxuICAgIF0sXG4gICAgcmV2b2tlT3JnUm9sZVVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy91c2Vycy97dXNlcm5hbWV9L3tyb2xlX2lkfVwiLFxuICAgIF0sXG4gICAgc2V0TWVtYmVyc2hpcEZvclVzZXI6IFtcIlBVVCAvb3Jncy97b3JnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCJdLFxuICAgIHNldFB1YmxpY01lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgdW5ibG9ja1VzZXI6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9vcmdzL3tvcmd9XCJdLFxuICAgIHVwZGF0ZUlzc3VlVHlwZTogW1wiUFVUIC9vcmdzL3tvcmd9L2lzc3VlLXR5cGVzL3tpc3N1ZV90eXBlX2lkfVwiXSxcbiAgICB1cGRhdGVNZW1iZXJzaGlwRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvbWVtYmVyc2hpcHMvb3Jncy97b3JnfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlUGF0QWNjZXNzOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnMve3BhdF9pZH1cIl0sXG4gICAgdXBkYXRlUGF0QWNjZXNzZXM6IFtcIlBPU1QgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2Vuc1wiXSxcbiAgICB1cGRhdGVXZWJob29rOiBbXCJQQVRDSCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgdXBkYXRlV2ViaG9va0NvbmZpZ0Zvck9yZzogW1wiUEFUQ0ggL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXSxcbiAgfSxcbiAgcGFja2FnZXM6IHtcbiAgICBkZWxldGVQYWNrYWdlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCIsXG4gICAgXSxcbiAgICBkZWxldGVQYWNrYWdlRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlUGFja2FnZUZvclVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCIsXG4gICAgXSxcbiAgICBkZWxldGVQYWNrYWdlVmVyc2lvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlUGFja2FnZVZlcnNpb25Gb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVQYWNrYWdlVmVyc2lvbkZvclVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JBUGFja2FnZU93bmVkQnlBbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJwYWNrYWdlc1wiLCBcImdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5T3JnXCJdIH0sXG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JBUGFja2FnZU93bmVkQnlUaGVBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICByZW5hbWVkOiBbXG4gICAgICAgICAgXCJwYWNrYWdlc1wiLFxuICAgICAgICAgIFwiZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlBdXRoZW50aWNhdGVkVXNlclwiLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeU9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgICBdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5VXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgICBdLFxuICAgIGdldFBhY2thZ2VGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIixcbiAgICBdLFxuICAgIGdldFBhY2thZ2VGb3JPcmdhbml6YXRpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCIsXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIixcbiAgICBdLFxuICAgIGdldFBhY2thZ2VWZXJzaW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlVmVyc2lvbkZvck9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIixcbiAgICBdLFxuICAgIGdldFBhY2thZ2VWZXJzaW9uRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIixcbiAgICBdLFxuICAgIGxpc3REb2NrZXJNaWdyYXRpb25Db25mbGljdGluZ1BhY2thZ2VzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2RvY2tlci9jb25mbGljdHNcIixcbiAgICBdLFxuICAgIGxpc3REb2NrZXJNaWdyYXRpb25Db25mbGljdGluZ1BhY2thZ2VzRm9yT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9kb2NrZXIvY29uZmxpY3RzXCIsXG4gICAgXSxcbiAgICBsaXN0RG9ja2VyTWlncmF0aW9uQ29uZmxpY3RpbmdQYWNrYWdlc0ZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2RvY2tlci9jb25mbGljdHNcIixcbiAgICBdLFxuICAgIGxpc3RQYWNrYWdlc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcGFja2FnZXNcIl0sXG4gICAgbGlzdFBhY2thZ2VzRm9yT3JnYW5pemF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXNcIl0sXG4gICAgbGlzdFBhY2thZ2VzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzXCJdLFxuICAgIHJlc3RvcmVQYWNrYWdlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS9yZXN0b3Jlez90b2tlbn1cIixcbiAgICBdLFxuICAgIHJlc3RvcmVQYWNrYWdlRm9yT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vcmVzdG9yZXs/dG9rZW59XCIsXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZUZvclVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS9yZXN0b3Jlez90b2tlbn1cIixcbiAgICBdLFxuICAgIHJlc3RvcmVQYWNrYWdlVmVyc2lvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH0vcmVzdG9yZVwiLFxuICAgIF0sXG4gICAgcmVzdG9yZVBhY2thZ2VWZXJzaW9uRm9yT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH0vcmVzdG9yZVwiLFxuICAgIF0sXG4gICAgcmVzdG9yZVBhY2thZ2VWZXJzaW9uRm9yVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9L3Jlc3RvcmVcIixcbiAgICBdLFxuICB9LFxuICBwcml2YXRlUmVnaXN0cmllczoge1xuICAgIGNyZWF0ZU9yZ1ByaXZhdGVSZWdpc3RyeTogW1wiUE9TVCAvb3Jncy97b3JnfS9wcml2YXRlLXJlZ2lzdHJpZXNcIl0sXG4gICAgZGVsZXRlT3JnUHJpdmF0ZVJlZ2lzdHJ5OiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wcml2YXRlLXJlZ2lzdHJpZXMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0T3JnUHJpdmF0ZVJlZ2lzdHJ5OiBbXCJHRVQgL29yZ3Mve29yZ30vcHJpdmF0ZS1yZWdpc3RyaWVzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vcHJpdmF0ZS1yZWdpc3RyaWVzL3B1YmxpYy1rZXlcIl0sXG4gICAgbGlzdE9yZ1ByaXZhdGVSZWdpc3RyaWVzOiBbXCJHRVQgL29yZ3Mve29yZ30vcHJpdmF0ZS1yZWdpc3RyaWVzXCJdLFxuICAgIHVwZGF0ZU9yZ1ByaXZhdGVSZWdpc3RyeTogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS9wcml2YXRlLXJlZ2lzdHJpZXMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gIH0sXG4gIHByb2plY3RzOiB7XG4gICAgYWRkQ29sbGFib3JhdG9yOiBbXG4gICAgICBcIlBVVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMuYWRkQ29sbGFib3JhdG9yKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY29sbGFib3JhdG9ycyNhZGQtcHJvamVjdC1jb2xsYWJvcmF0b3JcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjcmVhdGVDYXJkOiBbXG4gICAgICBcIlBPU1QgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vY2FyZHNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmNyZWF0ZUNhcmQoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jYXJkcyNjcmVhdGUtYS1wcm9qZWN0LWNhcmRcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjcmVhdGVDb2x1bW46IFtcbiAgICAgIFwiUE9TVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbHVtbnNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmNyZWF0ZUNvbHVtbigpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NvbHVtbnMjY3JlYXRlLWEtcHJvamVjdC1jb2x1bW5cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjcmVhdGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2VyL3Byb2plY3RzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5jcmVhdGVGb3JBdXRoZW50aWNhdGVkVXNlcigpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL3Byb2plY3RzI2NyZWF0ZS1hLXVzZXItcHJvamVjdFwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGNyZWF0ZUZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3Byb2plY3RzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5jcmVhdGVGb3JPcmcoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9wcm9qZWN0cyNjcmVhdGUtYW4tb3JnYW5pemF0aW9uLXByb2plY3RcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjcmVhdGVGb3JSZXBvOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb2plY3RzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5jcmVhdGVGb3JSZXBvKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvcHJvamVjdHMjY3JlYXRlLWEtcmVwb3NpdG9yeS1wcm9qZWN0XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgZGVsZXRlOiBbXG4gICAgICBcIkRFTEVURSAvcHJvamVjdHMve3Byb2plY3RfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5kZWxldGUoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9wcm9qZWN0cyNkZWxldGUtYS1wcm9qZWN0XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgZGVsZXRlQ2FyZDogW1xuICAgICAgXCJERUxFVEUgL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5kZWxldGVDYXJkKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY2FyZHMjZGVsZXRlLWEtcHJvamVjdC1jYXJkXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgZGVsZXRlQ29sdW1uOiBbXG4gICAgICBcIkRFTEVURSAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMuZGVsZXRlQ29sdW1uKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY29sdW1ucyNkZWxldGUtYS1wcm9qZWN0LWNvbHVtblwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGdldDogW1xuICAgICAgXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMuZ2V0KCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvcHJvamVjdHMjZ2V0LWEtcHJvamVjdFwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGdldENhcmQ6IFtcbiAgICAgIFwiR0VUIC9wcm9qZWN0cy9jb2x1bW5zL2NhcmRzL3tjYXJkX2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMuZ2V0Q2FyZCgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NhcmRzI2dldC1hLXByb2plY3QtY2FyZFwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGdldENvbHVtbjogW1xuICAgICAgXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmdldENvbHVtbigpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NvbHVtbnMjZ2V0LWEtcHJvamVjdC1jb2x1bW5cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBnZXRQZXJtaXNzaW9uRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX0vcGVybWlzc2lvblwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMuZ2V0UGVybWlzc2lvbkZvclVzZXIoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jb2xsYWJvcmF0b3JzI2dldC1wcm9qZWN0LXBlcm1pc3Npb24tZm9yLWEtdXNlclwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RDYXJkczogW1xuICAgICAgXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vY2FyZHNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmxpc3RDYXJkcygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NhcmRzI2xpc3QtcHJvamVjdC1jYXJkc1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RDb2xsYWJvcmF0b3JzOiBbXG4gICAgICBcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbGxhYm9yYXRvcnNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmxpc3RDb2xsYWJvcmF0b3JzKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY29sbGFib3JhdG9ycyNsaXN0LXByb2plY3QtY29sbGFib3JhdG9yc1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RDb2x1bW5zOiBbXG4gICAgICBcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbHVtbnNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmxpc3RDb2x1bW5zKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY29sdW1ucyNsaXN0LXByb2plY3QtY29sdW1uc1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3Byb2plY3RzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5saXN0Rm9yT3JnKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvcHJvamVjdHMjbGlzdC1vcmdhbml6YXRpb24tcHJvamVjdHNcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBsaXN0Rm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb2plY3RzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5saXN0Rm9yUmVwbygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL3Byb2plY3RzI2xpc3QtcmVwb3NpdG9yeS1wcm9qZWN0c1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMubGlzdEZvclVzZXIoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9wcm9qZWN0cyNsaXN0LXVzZXItcHJvamVjdHNcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBtb3ZlQ2FyZDogW1xuICAgICAgXCJQT1NUIC9wcm9qZWN0cy9jb2x1bW5zL2NhcmRzL3tjYXJkX2lkfS9tb3Zlc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMubW92ZUNhcmQoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jYXJkcyNtb3ZlLWEtcHJvamVjdC1jYXJkXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgbW92ZUNvbHVtbjogW1xuICAgICAgXCJQT1NUIC9wcm9qZWN0cy9jb2x1bW5zL3tjb2x1bW5faWR9L21vdmVzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5tb3ZlQ29sdW1uKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY29sdW1ucyNtb3ZlLWEtcHJvamVjdC1jb2x1bW5cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICByZW1vdmVDb2xsYWJvcmF0b3I6IFtcbiAgICAgIFwiREVMRVRFIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5yZW1vdmVDb2xsYWJvcmF0b3IoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jb2xsYWJvcmF0b3JzI3JlbW92ZS11c2VyLWFzLWEtY29sbGFib3JhdG9yXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgdXBkYXRlOiBbXG4gICAgICBcIlBBVENIIC9wcm9qZWN0cy97cHJvamVjdF9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLnVwZGF0ZSgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL3Byb2plY3RzI3VwZGF0ZS1hLXByb2plY3RcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICB1cGRhdGVDYXJkOiBbXG4gICAgICBcIlBBVENIIC9wcm9qZWN0cy9jb2x1bW5zL2NhcmRzL3tjYXJkX2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMudXBkYXRlQ2FyZCgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NhcmRzI3VwZGF0ZS1hbi1leGlzdGluZy1wcm9qZWN0LWNhcmRcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICB1cGRhdGVDb2x1bW46IFtcbiAgICAgIFwiUEFUQ0ggL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLnVwZGF0ZUNvbHVtbigpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NvbHVtbnMjdXBkYXRlLWFuLWV4aXN0aW5nLXByb2plY3QtY29sdW1uXCIsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG4gIHB1bGxzOiB7XG4gICAgY2hlY2tJZk1lcmdlZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L21lcmdlXCJdLFxuICAgIGNyZWF0ZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHNcIl0sXG4gICAgY3JlYXRlUmVwbHlGb3JSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlcGxpZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZVJldmlldzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCJdLFxuICAgIGNyZWF0ZVJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgZGVsZXRlUGVuZGluZ1JldmlldzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlUmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiLFxuICAgIF0sXG4gICAgZGlzbWlzc1JldmlldzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfS9kaXNtaXNzYWxzXCIsXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfVwiXSxcbiAgICBnZXRSZXZpZXc6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH1cIixcbiAgICBdLFxuICAgIGdldFJldmlld0NvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGxpc3Q6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHNcIl0sXG4gICAgbGlzdENvbW1lbnRzRm9yUmV2aWV3OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2NvbW1lbnRzXCIsXG4gICAgXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1pdHNcIl0sXG4gICAgbGlzdEZpbGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vZmlsZXNcIl0sXG4gICAgbGlzdFJlcXVlc3RlZFJldmlld2VyczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmVxdWVzdGVkX3Jldmlld2Vyc1wiLFxuICAgIF0sXG4gICAgbGlzdFJldmlld0NvbW1lbnRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgbGlzdFJldmlld0NvbW1lbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50c1wiXSxcbiAgICBsaXN0UmV2aWV3czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3NcIl0sXG4gICAgbWVyZ2U6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9tZXJnZVwiXSxcbiAgICByZW1vdmVSZXF1ZXN0ZWRSZXZpZXdlcnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3JlcXVlc3RlZF9yZXZpZXdlcnNcIixcbiAgICBdLFxuICAgIHJlcXVlc3RSZXZpZXdlcnM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXF1ZXN0ZWRfcmV2aWV3ZXJzXCIsXG4gICAgXSxcbiAgICBzdWJtaXRSZXZpZXc6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2V2ZW50c1wiLFxuICAgIF0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfVwiXSxcbiAgICB1cGRhdGVCcmFuY2g6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3VwZGF0ZS1icmFuY2hcIixcbiAgICBdLFxuICAgIHVwZGF0ZVJldmlldzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlUmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9XCIsXG4gICAgXSxcbiAgfSxcbiAgcmF0ZUxpbWl0OiB7IGdldDogW1wiR0VUIC9yYXRlX2xpbWl0XCJdIH0sXG4gIHJlYWN0aW9uczoge1xuICAgIGNyZWF0ZUZvckNvbW1pdENvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9ySXNzdWU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9ySXNzdWVDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBjcmVhdGVGb3JQdWxsUmVxdWVzdFJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9yUmVsZWFzZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBjcmVhdGVGb3JUZWFtRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGNyZWF0ZUZvclRlYW1EaXNjdXNzaW9uSW5Pcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9yQ29tbWl0Q29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9ySXNzdWU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUZvcklzc3VlQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUZvclB1bGxSZXF1ZXN0Q29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9yUmVsZWFzZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9yVGVhbURpc2N1c3Npb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUZvclRlYW1EaXNjdXNzaW9uQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yQ29tbWl0Q29tbWVudDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGxpc3RGb3JJc3N1ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zXCJdLFxuICAgIGxpc3RGb3JJc3N1ZUNvbW1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdEZvclB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGxpc3RGb3JSZWxlYXNlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdEZvclRlYW1EaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yVGVhbURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICB9LFxuICByZXBvczoge1xuICAgIGFjY2VwdEludml0YXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcImFjY2VwdEludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgYWNjZXB0SW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBBVENIIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBhZGRBcHBBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJhcHBzXCIgfSxcbiAgICBdLFxuICAgIGFkZENvbGxhYm9yYXRvcjogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIl0sXG4gICAgYWRkU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiY29udGV4dHNcIiB9LFxuICAgIF0sXG4gICAgYWRkVGVhbUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ0ZWFtc1wiIH0sXG4gICAgXSxcbiAgICBhZGRVc2VyQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3VzZXJzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcInVzZXJzXCIgfSxcbiAgICBdLFxuICAgIGNhbmNlbFBhZ2VzRGVwbG95bWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9kZXBsb3ltZW50cy97cGFnZXNfZGVwbG95bWVudF9pZH0vY2FuY2VsXCIsXG4gICAgXSxcbiAgICBjaGVja0F1dG9tYXRlZFNlY3VyaXR5Rml4ZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbWF0ZWQtc2VjdXJpdHktZml4ZXNcIixcbiAgICBdLFxuICAgIGNoZWNrQ29sbGFib3JhdG9yOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja1ByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0aW5nOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJpdmF0ZS12dWxuZXJhYmlsaXR5LXJlcG9ydGluZ1wiLFxuICAgIF0sXG4gICAgY2hlY2tWdWxuZXJhYmlsaXR5QWxlcnRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdnVsbmVyYWJpbGl0eS1hbGVydHNcIixcbiAgICBdLFxuICAgIGNvZGVvd25lcnNFcnJvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZW93bmVycy9lcnJvcnNcIl0sXG4gICAgY29tcGFyZUNvbW1pdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tcGFyZS97YmFzZX0uLi57aGVhZH1cIl0sXG4gICAgY29tcGFyZUNvbW1pdHNXaXRoQmFzZWhlYWQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21wYXJlL3tiYXNlaGVhZH1cIixcbiAgICBdLFxuICAgIGNyZWF0ZUF0dGVzdGF0aW9uOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdHRlc3RhdGlvbnNcIl0sXG4gICAgY3JlYXRlQXV0b2xpbms6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rc1wiXSxcbiAgICBjcmVhdGVDb21taXRDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2NvbW1lbnRzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVDb21taXRTaWduYXR1cmVQcm90ZWN0aW9uOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc2lnbmF0dXJlc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlQ29tbWl0U3RhdHVzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0dXNlcy97c2hhfVwiXSxcbiAgICBjcmVhdGVEZXBsb3lLZXk6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIl0sXG4gICAgY3JlYXRlRGVwbG95bWVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHNcIl0sXG4gICAgY3JlYXRlRGVwbG95bWVudEJyYW5jaFBvbGljeTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVEZXBsb3ltZW50UHJvdGVjdGlvblJ1bGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZURlcGxveW1lbnRTdGF0dXM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9L3N0YXR1c2VzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVEaXNwYXRjaEV2ZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kaXNwYXRjaGVzXCJdLFxuICAgIGNyZWF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL3JlcG9zXCJdLFxuICAgIGNyZWF0ZUZvcms6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ZvcmtzXCJdLFxuICAgIGNyZWF0ZUluT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3JlcG9zXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlQ3VzdG9tUHJvcGVydGllc1ZhbHVlczogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvcGVydGllcy92YWx1ZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlRW52aXJvbm1lbnQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZUZpbGVDb250ZW50czogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgY3JlYXRlT3JnUnVsZXNldDogW1wiUE9TVCAvb3Jncy97b3JnfS9ydWxlc2V0c1wiXSxcbiAgICBjcmVhdGVQYWdlc0RlcGxveW1lbnQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2RlcGxveW1lbnRzXCJdLFxuICAgIGNyZWF0ZVBhZ2VzU2l0ZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgY3JlYXRlUmVsZWFzZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXNcIl0sXG4gICAgY3JlYXRlUmVwb1J1bGVzZXQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzXCJdLFxuICAgIGNyZWF0ZVVzaW5nVGVtcGxhdGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve3RlbXBsYXRlX293bmVyfS97dGVtcGxhdGVfcmVwb30vZ2VuZXJhdGVcIixcbiAgICBdLFxuICAgIGNyZWF0ZVdlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCJdLFxuICAgIGRlY2xpbmVJbnZpdGF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInJlcG9zXCIsIFwiZGVjbGluZUludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgZGVjbGluZUludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBkZWxldGVBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9uc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlQWRtaW5CcmFuY2hQcm90ZWN0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9lbmZvcmNlX2FkbWluc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlQW5FbnZpcm9ubWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUF1dG9saW5rOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rcy97YXV0b2xpbmtfaWR9XCJdLFxuICAgIGRlbGV0ZUJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uXCIsXG4gICAgXSxcbiAgICBkZWxldGVDb21taXRDb21tZW50OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBkZWxldGVDb21taXRTaWduYXR1cmVQcm90ZWN0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zaWduYXR1cmVzXCIsXG4gICAgXSxcbiAgICBkZWxldGVEZXBsb3lLZXk6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30va2V5cy97a2V5X2lkfVwiXSxcbiAgICBkZWxldGVEZXBsb3ltZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVEZXBsb3ltZW50QnJhbmNoUG9saWN5OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50LWJyYW5jaC1wb2xpY2llcy97YnJhbmNoX3BvbGljeV9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUZpbGU6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29udGVudHMve3BhdGh9XCJdLFxuICAgIGRlbGV0ZUludml0YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1J1bGVzZXQ6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9ydWxlc2V0cy97cnVsZXNldF9pZH1cIl0sXG4gICAgZGVsZXRlUGFnZXNTaXRlOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIGRlbGV0ZVB1bGxSZXF1ZXN0UmV2aWV3UHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIixcbiAgICBdLFxuICAgIGRlbGV0ZVJlbGVhc2U6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9XCJdLFxuICAgIGRlbGV0ZVJlbGVhc2VBc3NldDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2Fzc2V0cy97YXNzZXRfaWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVSZXBvUnVsZXNldDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy97cnVsZXNldF9pZH1cIl0sXG4gICAgZGVsZXRlV2ViaG9vazogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZGlzYWJsZUF1dG9tYXRlZFNlY3VyaXR5Rml4ZXM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbWF0ZWQtc2VjdXJpdHktZml4ZXNcIixcbiAgICBdLFxuICAgIGRpc2FibGVEZXBsb3ltZW50UHJvdGVjdGlvblJ1bGU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlcy97cHJvdGVjdGlvbl9ydWxlX2lkfVwiLFxuICAgIF0sXG4gICAgZGlzYWJsZVByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0aW5nOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHJpdmF0ZS12dWxuZXJhYmlsaXR5LXJlcG9ydGluZ1wiLFxuICAgIF0sXG4gICAgZGlzYWJsZVZ1bG5lcmFiaWxpdHlBbGVydHM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS92dWxuZXJhYmlsaXR5LWFsZXJ0c1wiLFxuICAgIF0sXG4gICAgZG93bmxvYWRBcmNoaXZlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vemlwYmFsbC97cmVmfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInJlcG9zXCIsIFwiZG93bmxvYWRaaXBiYWxsQXJjaGl2ZVwiXSB9LFxuICAgIF0sXG4gICAgZG93bmxvYWRUYXJiYWxsQXJjaGl2ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YXJiYWxsL3tyZWZ9XCJdLFxuICAgIGRvd25sb2FkWmlwYmFsbEFyY2hpdmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vemlwYmFsbC97cmVmfVwiXSxcbiAgICBlbmFibGVBdXRvbWF0ZWRTZWN1cml0eUZpeGVzOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b21hdGVkLXNlY3VyaXR5LWZpeGVzXCIsXG4gICAgXSxcbiAgICBlbmFibGVQcml2YXRlVnVsbmVyYWJpbGl0eVJlcG9ydGluZzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ByaXZhdGUtdnVsbmVyYWJpbGl0eS1yZXBvcnRpbmdcIixcbiAgICBdLFxuICAgIGVuYWJsZVZ1bG5lcmFiaWxpdHlBbGVydHM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS92dWxuZXJhYmlsaXR5LWFsZXJ0c1wiLFxuICAgIF0sXG4gICAgZ2VuZXJhdGVSZWxlYXNlTm90ZXM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvZ2VuZXJhdGUtbm90ZXNcIixcbiAgICBdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBnZXRBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0QWRtaW5CcmFuY2hQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9lbmZvcmNlX2FkbWluc1wiLFxuICAgIF0sXG4gICAgZ2V0QWxsRGVwbG95bWVudFByb3RlY3Rpb25SdWxlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzXCIsXG4gICAgXSxcbiAgICBnZXRBbGxFbnZpcm9ubWVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzXCJdLFxuICAgIGdldEFsbFN0YXR1c0NoZWNrQ29udGV4dHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIixcbiAgICBdLFxuICAgIGdldEFsbFRvcGljczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90b3BpY3NcIl0sXG4gICAgZ2V0QXBwc1dpdGhBY2Nlc3NUb1Byb3RlY3RlZEJyYW5jaDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL2FwcHNcIixcbiAgICBdLFxuICAgIGdldEF1dG9saW5rOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rcy97YXV0b2xpbmtfaWR9XCJdLFxuICAgIGdldEJyYW5jaDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofVwiXSxcbiAgICBnZXRCcmFuY2hQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvblwiLFxuICAgIF0sXG4gICAgZ2V0QnJhbmNoUnVsZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXMvYnJhbmNoZXMve2JyYW5jaH1cIl0sXG4gICAgZ2V0Q2xvbmVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvY2xvbmVzXCJdLFxuICAgIGdldENvZGVGcmVxdWVuY3lTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9jb2RlX2ZyZXF1ZW5jeVwiXSxcbiAgICBnZXRDb2xsYWJvcmF0b3JQZXJtaXNzaW9uTGV2ZWw6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX0vcGVybWlzc2lvblwiLFxuICAgIF0sXG4gICAgZ2V0Q29tYmluZWRTdGF0dXNGb3JSZWY6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9zdGF0dXNcIl0sXG4gICAgZ2V0Q29tbWl0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn1cIl0sXG4gICAgZ2V0Q29tbWl0QWN0aXZpdHlTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9jb21taXRfYWN0aXZpdHlcIl0sXG4gICAgZ2V0Q29tbWl0Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZ2V0Q29tbWl0U2lnbmF0dXJlUHJvdGVjdGlvbjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc2lnbmF0dXJlc1wiLFxuICAgIF0sXG4gICAgZ2V0Q29tbXVuaXR5UHJvZmlsZU1ldHJpY3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbXVuaXR5L3Byb2ZpbGVcIl0sXG4gICAgZ2V0Q29udGVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgZ2V0Q29udHJpYnV0b3JzU3RhdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHMvY29udHJpYnV0b3JzXCJdLFxuICAgIGdldEN1c3RvbURlcGxveW1lbnRQcm90ZWN0aW9uUnVsZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL3twcm90ZWN0aW9uX3J1bGVfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRDdXN0b21Qcm9wZXJ0aWVzVmFsdWVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb3BlcnRpZXMvdmFsdWVzXCJdLFxuICAgIGdldERlcGxveUtleTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGdldERlcGxveW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9XCJdLFxuICAgIGdldERlcGxveW1lbnRCcmFuY2hQb2xpY3k6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzL3ticmFuY2hfcG9saWN5X2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0RGVwbG95bWVudFN0YXR1czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfS9zdGF0dXNlcy97c3RhdHVzX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9XCIsXG4gICAgXSxcbiAgICBnZXRMYXRlc3RQYWdlc0J1aWxkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkcy9sYXRlc3RcIl0sXG4gICAgZ2V0TGF0ZXN0UmVsZWFzZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9sYXRlc3RcIl0sXG4gICAgZ2V0T3JnUnVsZVN1aXRlOiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMvcnVsZS1zdWl0ZXMve3J1bGVfc3VpdGVfaWR9XCJdLFxuICAgIGdldE9yZ1J1bGVTdWl0ZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy9ydWxlLXN1aXRlc1wiXSxcbiAgICBnZXRPcmdSdWxlc2V0OiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIGdldE9yZ1J1bGVzZXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHNcIl0sXG4gICAgZ2V0UGFnZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgZ2V0UGFnZXNCdWlsZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHMve2J1aWxkX2lkfVwiXSxcbiAgICBnZXRQYWdlc0RlcGxveW1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9kZXBsb3ltZW50cy97cGFnZXNfZGVwbG95bWVudF9pZH1cIixcbiAgICBdLFxuICAgIGdldFBhZ2VzSGVhbHRoQ2hlY2s6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvaGVhbHRoXCJdLFxuICAgIGdldFBhcnRpY2lwYXRpb25TdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9wYXJ0aWNpcGF0aW9uXCJdLFxuICAgIGdldFB1bGxSZXF1ZXN0UmV2aWV3UHJvdGVjdGlvbjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIixcbiAgICBdLFxuICAgIGdldFB1bmNoQ2FyZFN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL3B1bmNoX2NhcmRcIl0sXG4gICAgZ2V0UmVhZG1lOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlYWRtZVwiXSxcbiAgICBnZXRSZWFkbWVJbkRpcmVjdG9yeTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWFkbWUve2Rpcn1cIl0sXG4gICAgZ2V0UmVsZWFzZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgZ2V0UmVsZWFzZUFzc2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2Fzc2V0cy97YXNzZXRfaWR9XCJdLFxuICAgIGdldFJlbGVhc2VCeVRhZzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy90YWdzL3t0YWd9XCJdLFxuICAgIGdldFJlcG9SdWxlU3VpdGU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy9ydWxlLXN1aXRlcy97cnVsZV9zdWl0ZV9pZH1cIixcbiAgICBdLFxuICAgIGdldFJlcG9SdWxlU3VpdGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCJdLFxuICAgIGdldFJlcG9SdWxlc2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICBnZXRSZXBvUnVsZXNldEhpc3Rvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy97cnVsZXNldF9pZH0vaGlzdG9yeVwiLFxuICAgIF0sXG4gICAgZ2V0UmVwb1J1bGVzZXRWZXJzaW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMve3J1bGVzZXRfaWR9L2hpc3Rvcnkve3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBnZXRSZXBvUnVsZXNldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHNcIl0sXG4gICAgZ2V0U3RhdHVzQ2hlY2tzUHJvdGVjdGlvbjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiLFxuICAgIF0sXG4gICAgZ2V0VGVhbXNXaXRoQWNjZXNzVG9Qcm90ZWN0ZWRCcmFuY2g6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgIF0sXG4gICAgZ2V0VG9wUGF0aHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy9wb3B1bGFyL3BhdGhzXCJdLFxuICAgIGdldFRvcFJlZmVycmVyczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90cmFmZmljL3BvcHVsYXIvcmVmZXJyZXJzXCJdLFxuICAgIGdldFVzZXJzV2l0aEFjY2Vzc1RvUHJvdGVjdGVkQnJhbmNoOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIixcbiAgICBdLFxuICAgIGdldFZpZXdzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvdmlld3NcIl0sXG4gICAgZ2V0V2ViaG9vazogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZ2V0V2ViaG9va0NvbmZpZ0ZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vY29uZmlnXCIsXG4gICAgXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9XCIsXG4gICAgXSxcbiAgICBsaXN0QWN0aXZpdGllczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpdml0eVwiXSxcbiAgICBsaXN0QXR0ZXN0YXRpb25zOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXR0ZXN0YXRpb25zL3tzdWJqZWN0X2RpZ2VzdH1cIixcbiAgICBdLFxuICAgIGxpc3RBdXRvbGlua3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzXCJdLFxuICAgIGxpc3RCcmFuY2hlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlc1wiXSxcbiAgICBsaXN0QnJhbmNoZXNGb3JIZWFkQ29tbWl0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vYnJhbmNoZXMtd2hlcmUtaGVhZFwiLFxuICAgIF0sXG4gICAgbGlzdENvbGxhYm9yYXRvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JDb21taXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgbGlzdENvbW1pdENvbW1lbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWl0U3RhdHVzZXNGb3JSZWY6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c2VzXCIsXG4gICAgXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzXCJdLFxuICAgIGxpc3RDb250cmlidXRvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29udHJpYnV0b3JzXCJdLFxuICAgIGxpc3RDdXN0b21EZXBsb3ltZW50UnVsZUludGVncmF0aW9uczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL2FwcHNcIixcbiAgICBdLFxuICAgIGxpc3REZXBsb3lLZXlzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIl0sXG4gICAgbGlzdERlcGxveW1lbnRCcmFuY2hQb2xpY2llczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXNcIixcbiAgICBdLFxuICAgIGxpc3REZXBsb3ltZW50U3RhdHVzZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXNcIixcbiAgICBdLFxuICAgIGxpc3REZXBsb3ltZW50czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50c1wiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9yZXBvc1wiXSxcbiAgICBsaXN0Rm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vcmVwb3NcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZXBvc1wiXSxcbiAgICBsaXN0Rm9ya3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZm9ya3NcIl0sXG4gICAgbGlzdEludml0YXRpb25zOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RJbnZpdGF0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0TGFuZ3VhZ2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhbmd1YWdlc1wiXSxcbiAgICBsaXN0UGFnZXNCdWlsZHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzXCJdLFxuICAgIGxpc3RQdWJsaWM6IFtcIkdFVCAvcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RQdWxsUmVxdWVzdHNBc3NvY2lhdGVkV2l0aENvbW1pdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L3B1bGxzXCIsXG4gICAgXSxcbiAgICBsaXN0UmVsZWFzZUFzc2V0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9hc3NldHNcIixcbiAgICBdLFxuICAgIGxpc3RSZWxlYXNlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlc1wiXSxcbiAgICBsaXN0VGFnczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzXCJdLFxuICAgIGxpc3RUZWFtczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90ZWFtc1wiXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiLFxuICAgIF0sXG4gICAgbGlzdFdlYmhvb2tzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCJdLFxuICAgIG1lcmdlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9tZXJnZXNcIl0sXG4gICAgbWVyZ2VVcHN0cmVhbTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWVyZ2UtdXBzdHJlYW1cIl0sXG4gICAgcGluZ1dlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9waW5nc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfS9hdHRlbXB0c1wiLFxuICAgIF0sXG4gICAgcmVtb3ZlQXBwQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJhcHBzXCIgfSxcbiAgICBdLFxuICAgIHJlbW92ZUNvbGxhYm9yYXRvcjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJjb250ZXh0c1wiIH0sXG4gICAgXSxcbiAgICByZW1vdmVTdGF0dXNDaGVja1Byb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIixcbiAgICBdLFxuICAgIHJlbW92ZVRlYW1BY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ0ZWFtc1wiIH0sXG4gICAgXSxcbiAgICByZW1vdmVVc2VyQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwidXNlcnNcIiB9LFxuICAgIF0sXG4gICAgcmVuYW1lQnJhbmNoOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9yZW5hbWVcIl0sXG4gICAgcmVwbGFjZUFsbFRvcGljczogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90b3BpY3NcIl0sXG4gICAgcmVxdWVzdFBhZ2VzQnVpbGQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkc1wiXSxcbiAgICBzZXRBZG1pbkJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9lbmZvcmNlX2FkbWluc1wiLFxuICAgIF0sXG4gICAgc2V0QXBwQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJhcHBzXCIgfSxcbiAgICBdLFxuICAgIHNldFN0YXR1c0NoZWNrQ29udGV4dHM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiY29udGV4dHNcIiB9LFxuICAgIF0sXG4gICAgc2V0VGVhbUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3RlYW1zXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcInRlYW1zXCIgfSxcbiAgICBdLFxuICAgIHNldFVzZXJBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ1c2Vyc1wiIH0sXG4gICAgXSxcbiAgICB0ZXN0UHVzaFdlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS90ZXN0c1wiXSxcbiAgICB0cmFuc2ZlcjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhbnNmZXJcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb31cIl0sXG4gICAgdXBkYXRlQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIixcbiAgICBdLFxuICAgIHVwZGF0ZUNvbW1pdENvbW1lbnQ6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgdXBkYXRlRGVwbG95bWVudEJyYW5jaFBvbGljeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXMve2JyYW5jaF9wb2xpY3lfaWR9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVJbmZvcm1hdGlvbkFib3V0UGFnZXNTaXRlOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIHVwZGF0ZUludml0YXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlT3JnUnVsZXNldDogW1wiUFVUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICB1cGRhdGVQdWxsUmVxdWVzdFJldmlld1Byb3RlY3Rpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIixcbiAgICBdLFxuICAgIHVwZGF0ZVJlbGVhc2U6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgdXBkYXRlUmVsZWFzZUFzc2V0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9hc3NldHMve2Fzc2V0X2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlUmVwb1J1bGVzZXQ6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIHVwZGF0ZVN0YXR1c0NoZWNrUG90ZWN0aW9uOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcInVwZGF0ZVN0YXR1c0NoZWNrUHJvdGVjdGlvblwiXSB9LFxuICAgIF0sXG4gICAgdXBkYXRlU3RhdHVzQ2hlY2tQcm90ZWN0aW9uOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIixcbiAgICBdLFxuICAgIHVwZGF0ZVdlYmhvb2s6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgdXBkYXRlV2ViaG9va0NvbmZpZ0ZvclJlcG86IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9jb25maWdcIixcbiAgICBdLFxuICAgIHVwbG9hZFJlbGVhc2VBc3NldDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzez9uYW1lLGxhYmVsfVwiLFxuICAgICAgeyBiYXNlVXJsOiBcImh0dHBzOi8vdXBsb2Fkcy5naXRodWIuY29tXCIgfSxcbiAgICBdLFxuICB9LFxuICBzZWFyY2g6IHtcbiAgICBjb2RlOiBbXCJHRVQgL3NlYXJjaC9jb2RlXCJdLFxuICAgIGNvbW1pdHM6IFtcIkdFVCAvc2VhcmNoL2NvbW1pdHNcIl0sXG4gICAgaXNzdWVzQW5kUHVsbFJlcXVlc3RzOiBbXG4gICAgICBcIkdFVCAvc2VhcmNoL2lzc3Vlc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3Quc2VhcmNoLmlzc3Vlc0FuZFB1bGxSZXF1ZXN0cygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3NlYXJjaC9zZWFyY2gjc2VhcmNoLWlzc3Vlcy1hbmQtcHVsbC1yZXF1ZXN0c1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxhYmVsczogW1wiR0VUIC9zZWFyY2gvbGFiZWxzXCJdLFxuICAgIHJlcG9zOiBbXCJHRVQgL3NlYXJjaC9yZXBvc2l0b3JpZXNcIl0sXG4gICAgdG9waWNzOiBbXCJHRVQgL3NlYXJjaC90b3BpY3NcIl0sXG4gICAgdXNlcnM6IFtcIkdFVCAvc2VhcmNoL3VzZXJzXCJdLFxuICB9LFxuICBzZWNyZXRTY2FubmluZzoge1xuICAgIGNyZWF0ZVB1c2hQcm90ZWN0aW9uQnlwYXNzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3JldC1zY2FubmluZy9wdXNoLXByb3RlY3Rpb24tYnlwYXNzZXNcIixcbiAgICBdLFxuICAgIGdldEFsZXJ0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgZ2V0U2Nhbkhpc3Rvcnk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL3NjYW4taGlzdG9yeVwiXSxcbiAgICBsaXN0QWxlcnRzRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCJdLFxuICAgIGxpc3RMb2NhdGlvbnNGb3JBbGVydDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3JldC1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vbG9jYXRpb25zXCIsXG4gICAgXSxcbiAgICB1cGRhdGVBbGVydDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiLFxuICAgIF0sXG4gIH0sXG4gIHNlY3VyaXR5QWR2aXNvcmllczoge1xuICAgIGNyZWF0ZUZvcms6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy97Z2hzYV9pZH0vZm9ya3NcIixcbiAgICBdLFxuICAgIGNyZWF0ZVByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXMvcmVwb3J0c1wiLFxuICAgIF0sXG4gICAgY3JlYXRlUmVwb3NpdG9yeUFkdmlzb3J5OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZVJlcG9zaXRvcnlBZHZpc29yeUN2ZVJlcXVlc3Q6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy97Z2hzYV9pZH0vY3ZlXCIsXG4gICAgXSxcbiAgICBnZXRHbG9iYWxBZHZpc29yeTogW1wiR0VUIC9hZHZpc29yaWVzL3tnaHNhX2lkfVwiXSxcbiAgICBnZXRSZXBvc2l0b3J5QWR2aXNvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3tnaHNhX2lkfVwiLFxuICAgIF0sXG4gICAgbGlzdEdsb2JhbEFkdmlzb3JpZXM6IFtcIkdFVCAvYWR2aXNvcmllc1wiXSxcbiAgICBsaXN0T3JnUmVwb3NpdG9yeUFkdmlzb3JpZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9zZWN1cml0eS1hZHZpc29yaWVzXCJdLFxuICAgIGxpc3RSZXBvc2l0b3J5QWR2aXNvcmllczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzXCJdLFxuICAgIHVwZGF0ZVJlcG9zaXRvcnlBZHZpc29yeTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy97Z2hzYV9pZH1cIixcbiAgICBdLFxuICB9LFxuICB0ZWFtczoge1xuICAgIGFkZE9yVXBkYXRlTWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgYWRkT3JVcGRhdGVQcm9qZWN0UGVybWlzc2lvbnNJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHMve3Byb2plY3RfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC50ZWFtcy5hZGRPclVwZGF0ZVByb2plY3RQZXJtaXNzaW9uc0luT3JnKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvdGVhbXMvdGVhbXMjYWRkLW9yLXVwZGF0ZS10ZWFtLXByb2plY3QtcGVybWlzc2lvbnNcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBhZGRPclVwZGF0ZVByb2plY3RQZXJtaXNzaW9uc0xlZ2FjeTogW1xuICAgICAgXCJQVVQgL3RlYW1zL3t0ZWFtX2lkfS9wcm9qZWN0cy97cHJvamVjdF9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnRlYW1zLmFkZE9yVXBkYXRlUHJvamVjdFBlcm1pc3Npb25zTGVnYWN5KCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvdGVhbXMvdGVhbXMjYWRkLW9yLXVwZGF0ZS10ZWFtLXByb2plY3QtcGVybWlzc2lvbnMtbGVnYWN5XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgYWRkT3JVcGRhdGVSZXBvUGVybWlzc2lvbnNJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3Mve293bmVyfS97cmVwb31cIixcbiAgICBdLFxuICAgIGNoZWNrUGVybWlzc2lvbnNGb3JQcm9qZWN0SW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzL3twcm9qZWN0X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QudGVhbXMuY2hlY2tQZXJtaXNzaW9uc0ZvclByb2plY3RJbk9yZygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3RlYW1zL3RlYW1zI2NoZWNrLXRlYW0tcGVybWlzc2lvbnMtZm9yLWEtcHJvamVjdFwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGNoZWNrUGVybWlzc2lvbnNGb3JQcm9qZWN0TGVnYWN5OiBbXG4gICAgICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L3Byb2plY3RzL3twcm9qZWN0X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QudGVhbXMuY2hlY2tQZXJtaXNzaW9uc0ZvclByb2plY3RMZWdhY3koKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC90ZWFtcy90ZWFtcyNjaGVjay10ZWFtLXBlcm1pc3Npb25zLWZvci1hLXByb2plY3QtbGVnYWN5XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgY2hlY2tQZXJtaXNzaW9uc0ZvclJlcG9Jbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3Mve293bmVyfS97cmVwb31cIixcbiAgICBdLFxuICAgIGNyZWF0ZTogW1wiUE9TVCAvb3Jncy97b3JnfS90ZWFtc1wiXSxcbiAgICBjcmVhdGVEaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRGlzY3Vzc2lvbkluT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zXCJdLFxuICAgIGRlbGV0ZURpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRGlzY3Vzc2lvbkluT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICBkZWxldGVJbk9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9XCJdLFxuICAgIGdldEJ5TmFtZTogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9XCJdLFxuICAgIGdldERpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgZ2V0RGlzY3Vzc2lvbkluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICBnZXRNZW1iZXJzaGlwRm9yVXNlckluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICBsaXN0OiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXNcIl0sXG4gICAgbGlzdENoaWxkSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS90ZWFtc1wiXSxcbiAgICBsaXN0RGlzY3Vzc2lvbkNvbW1lbnRzSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHNcIixcbiAgICBdLFxuICAgIGxpc3REaXNjdXNzaW9uc0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnNcIl0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvdGVhbXNcIl0sXG4gICAgbGlzdE1lbWJlcnNJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNcIl0sXG4gICAgbGlzdFBlbmRpbmdJbnZpdGF0aW9uc0luT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9pbnZpdGF0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdFByb2plY3RzSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC50ZWFtcy5saXN0UHJvamVjdHNJbk9yZygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3RlYW1zL3RlYW1zI2xpc3QtdGVhbS1wcm9qZWN0c1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RQcm9qZWN0c0xlZ2FjeTogW1xuICAgICAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9wcm9qZWN0c1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QudGVhbXMubGlzdFByb2plY3RzTGVnYWN5KCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvdGVhbXMvdGVhbXMjbGlzdC10ZWFtLXByb2plY3RzLWxlZ2FjeVwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RSZXBvc0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3NcIl0sXG4gICAgcmVtb3ZlTWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlUHJvamVjdEluT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9wcm9qZWN0cy97cHJvamVjdF9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnRlYW1zLnJlbW92ZVByb2plY3RJbk9yZygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3RlYW1zL3RlYW1zI3JlbW92ZS1hLXByb2plY3QtZnJvbS1hLXRlYW1cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICByZW1vdmVQcm9qZWN0TGVnYWN5OiBbXG4gICAgICBcIkRFTEVURSAvdGVhbXMve3RlYW1faWR9L3Byb2plY3RzL3twcm9qZWN0X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QudGVhbXMucmVtb3ZlUHJvamVjdExlZ2FjeSgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3RlYW1zL3RlYW1zI3JlbW92ZS1hLXByb2plY3QtZnJvbS1hLXRlYW0tbGVnYWN5XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgcmVtb3ZlUmVwb0luT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvcy97b3duZXJ9L3tyZXBvfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn1cIixcbiAgICBdLFxuICAgIHVwZGF0ZURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVJbk9yZzogW1wiUEFUQ0ggL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z31cIl0sXG4gIH0sXG4gIHVzZXJzOiB7XG4gICAgYWRkRW1haWxGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvZW1haWxzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2VtYWlsc1wiXSxcbiAgICBhZGRTb2NpYWxBY2NvdW50Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvc29jaWFsX2FjY291bnRzXCJdLFxuICAgIGJsb2NrOiBbXCJQVVQgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tCbG9ja2VkOiBbXCJHRVQgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tGb2xsb3dpbmdGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93aW5nL3t0YXJnZXRfdXNlcn1cIl0sXG4gICAgY2hlY2tQZXJzb25Jc0ZvbGxvd2VkQnlBdXRoZW50aWNhdGVkOiBbXCJHRVQgL3VzZXIvZm9sbG93aW5nL3t1c2VybmFtZX1cIl0sXG4gICAgY3JlYXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJQT1NUIC91c2VyL2dwZ19rZXlzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJjcmVhdGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgY3JlYXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvZ3BnX2tleXNcIl0sXG4gICAgY3JlYXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJQT1NUIC91c2VyL2tleXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImNyZWF0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBjcmVhdGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9rZXlzXCJdLFxuICAgIGNyZWF0ZVNzaFNpZ25pbmdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9zc2hfc2lnbmluZ19rZXlzXCJdLFxuICAgIGRlbGV0ZUVtYWlsRm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvZW1haWxzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJkZWxldGVFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBkZWxldGVFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvZW1haWxzXCJdLFxuICAgIGRlbGV0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2dwZ19rZXlzL3tncGdfa2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGRlbGV0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCJdLFxuICAgIGRlbGV0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2tleXMve2tleV9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImRlbGV0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBkZWxldGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL2tleXMve2tleV9pZH1cIl0sXG4gICAgZGVsZXRlU29jaWFsQWNjb3VudEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvc29jaWFsX2FjY291bnRzXCJdLFxuICAgIGRlbGV0ZVNzaFNpZ25pbmdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvc3NoX3NpZ25pbmdfa2V5cy97c3NoX3NpZ25pbmdfa2V5X2lkfVwiLFxuICAgIF0sXG4gICAgZm9sbG93OiBbXCJQVVQgL3VzZXIvZm9sbG93aW5nL3t1c2VybmFtZX1cIl0sXG4gICAgZ2V0QXV0aGVudGljYXRlZDogW1wiR0VUIC91c2VyXCJdLFxuICAgIGdldEJ5SWQ6IFtcIkdFVCAvdXNlci97YWNjb3VudF9pZH1cIl0sXG4gICAgZ2V0QnlVc2VybmFtZTogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9XCJdLFxuICAgIGdldENvbnRleHRGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vaG92ZXJjYXJkXCJdLFxuICAgIGdldEdwZ0tleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2dwZ19rZXlzL3tncGdfa2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZ2V0R3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGdldEdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCJdLFxuICAgIGdldFB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2tleXMve2tleV9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImdldFB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBnZXRQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2tleXMve2tleV9pZH1cIl0sXG4gICAgZ2V0U3NoU2lnbmluZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9zc2hfc2lnbmluZ19rZXlzL3tzc2hfc2lnbmluZ19rZXlfaWR9XCIsXG4gICAgXSxcbiAgICBsaXN0OiBbXCJHRVQgL3VzZXJzXCJdLFxuICAgIGxpc3RBdHRlc3RhdGlvbnM6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9hdHRlc3RhdGlvbnMve3N1YmplY3RfZGlnZXN0fVwiXSxcbiAgICBsaXN0QmxvY2tlZEJ5QXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvYmxvY2tzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0QmxvY2tlZEJ5QXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGxpc3RCbG9ja2VkQnlBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2Jsb2Nrc1wiXSxcbiAgICBsaXN0RW1haWxzRm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvZW1haWxzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0RW1haWxzRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGxpc3RFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2VtYWlsc1wiXSxcbiAgICBsaXN0Rm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2ZvbGxvd2luZ1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEZvbGxvd2VkQnlBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgbGlzdEZvbGxvd2VkQnlBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2ZvbGxvd2luZ1wiXSxcbiAgICBsaXN0Rm9sbG93ZXJzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9mb2xsb3dlcnNcIl0sXG4gICAgbGlzdEZvbGxvd2Vyc0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dlcnNcIl0sXG4gICAgbGlzdEZvbGxvd2luZ0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dpbmdcIl0sXG4gICAgbGlzdEdwZ0tleXNGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9ncGdfa2V5c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEdwZ0tleXNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgbGlzdEdwZ0tleXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2dwZ19rZXlzXCJdLFxuICAgIGxpc3RHcGdLZXlzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dwZ19rZXlzXCJdLFxuICAgIGxpc3RQdWJsaWNFbWFpbHNGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9wdWJsaWNfZW1haWxzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0UHVibGljRW1haWxzRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGxpc3RQdWJsaWNFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3B1YmxpY19lbWFpbHNcIl0sXG4gICAgbGlzdFB1YmxpY0tleXNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0va2V5c1wiXSxcbiAgICBsaXN0UHVibGljU3NoS2V5c0ZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2tleXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RQdWJsaWNTc2hLZXlzRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGxpc3RQdWJsaWNTc2hLZXlzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9rZXlzXCJdLFxuICAgIGxpc3RTb2NpYWxBY2NvdW50c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc29jaWFsX2FjY291bnRzXCJdLFxuICAgIGxpc3RTb2NpYWxBY2NvdW50c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zb2NpYWxfYWNjb3VudHNcIl0sXG4gICAgbGlzdFNzaFNpZ25pbmdLZXlzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zc2hfc2lnbmluZ19rZXlzXCJdLFxuICAgIGxpc3RTc2hTaWduaW5nS2V5c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zc2hfc2lnbmluZ19rZXlzXCJdLFxuICAgIHNldFByaW1hcnlFbWFpbFZpc2liaWxpdHlGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBBVENIIC91c2VyL2VtYWlsL3Zpc2liaWxpdHlcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcInNldFByaW1hcnlFbWFpbFZpc2liaWxpdHlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgc2V0UHJpbWFyeUVtYWlsVmlzaWJpbGl0eUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBBVENIIC91c2VyL2VtYWlsL3Zpc2liaWxpdHlcIixcbiAgICBdLFxuICAgIHVuYmxvY2s6IFtcIkRFTEVURSAvdXNlci9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICB1bmZvbGxvdzogW1wiREVMRVRFIC91c2VyL2ZvbGxvd2luZy97dXNlcm5hbWV9XCJdLFxuICAgIHVwZGF0ZUF1dGhlbnRpY2F0ZWQ6IFtcIlBBVENIIC91c2VyXCJdLFxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgRW5kcG9pbnRzO1xuIiwgImltcG9ydCB0eXBlIHsgT2N0b2tpdCB9IGZyb20gXCJAb2N0b2tpdC9jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IEVuZHBvaW50T3B0aW9ucywgUmVxdWVzdFBhcmFtZXRlcnMsIFJvdXRlIH0gZnJvbSBcIkBvY3Rva2l0L3R5cGVzXCI7XG5pbXBvcnQgRU5EUE9JTlRTIGZyb20gXCIuL2dlbmVyYXRlZC9lbmRwb2ludHMuanNcIjtcbmltcG9ydCB0eXBlIHsgUmVzdEVuZHBvaW50TWV0aG9kcyB9IGZyb20gXCIuL2dlbmVyYXRlZC9tZXRob2QtdHlwZXMuanNcIjtcbmltcG9ydCB0eXBlIHsgRW5kcG9pbnREZWNvcmF0aW9ucyB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5cbi8vIFRoZSBmb2xsb3dpbmcgY29kZSB3YXMgcmVmYWN0b3JlZCBpbjogaHR0cHM6Ly9naXRodWIuY29tL29jdG9raXQvcGx1Z2luLXJlc3QtZW5kcG9pbnQtbWV0aG9kcy5qcy9wdWxsLzYyMlxuLy8gdG8gb3B0aW1pc2UgdGhlIHJ1bnRpbWUgcGVyZm9ybWFuY2Ugb2YgT2N0b2tpdCBpbml0aWFsaXphdGlvbi5cbi8vXG4vLyBUaGlzIG9wdGltaXphdGlvbiBpbnZvbHZlcyB0d28ga2V5IGNoYW5nZXM6XG4vLyAxLiBQcmUtQ29tcHV0YXRpb246IFRoZSBlbmRwb2ludCBtZXRob2RzIGFyZSBwcmUtY29tcHV0ZWQgb25jZSBhdCBtb2R1bGUgbG9hZFxuLy8gICAgdGltZSBpbnN0ZWFkIG9mIGVhY2ggaW52b2NhdGlvbiBvZiBgZW5kcG9pbnRzVG9NZXRob2RzKClgLlxuLy8gMi4gTGF6eSBpbml0aWFsaXphdGlvbiBhbmQgY2FjaGluZzogV2UgdXNlIGEgUHJveHkgZm9yIGVhY2ggc2NvcGUgdG8gb25seVxuLy8gICAgaW5pdGlhbGl6ZSBtZXRob2RzIHRoYXQgYXJlIGFjdHVhbGx5IGNhbGxlZC4gVGhpcyByZWR1Y2VzIHJ1bnRpbWUgb3ZlcmhlYWRcbi8vICAgIGFzIHRoZSBpbml0aWFsaXphdGlvbiBpbnZvbHZlcyBkZWVwIG1lcmdpbmcgb2Ygb2JqZWN0cy4gVGhlIGluaXRpYWxpemVkXG4vLyAgICBtZXRob2RzIGFyZSB0aGVuIGNhY2hlZCBmb3IgZnV0dXJlIHVzZS5cblxuY29uc3QgZW5kcG9pbnRNZXRob2RzTWFwID0gbmV3IE1hcCgpO1xuZm9yIChjb25zdCBbc2NvcGUsIGVuZHBvaW50c10gb2YgT2JqZWN0LmVudHJpZXMoRU5EUE9JTlRTKSkge1xuICBmb3IgKGNvbnN0IFttZXRob2ROYW1lLCBlbmRwb2ludF0gb2YgT2JqZWN0LmVudHJpZXMoZW5kcG9pbnRzKSkge1xuICAgIGNvbnN0IFtyb3V0ZSwgZGVmYXVsdHMsIGRlY29yYXRpb25zXSA9IGVuZHBvaW50O1xuICAgIGNvbnN0IFttZXRob2QsIHVybF0gPSByb3V0ZS5zcGxpdCgvIC8pO1xuICAgIGNvbnN0IGVuZHBvaW50RGVmYXVsdHMgPSBPYmplY3QuYXNzaWduKFxuICAgICAge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIHVybCxcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0cyxcbiAgICApO1xuXG4gICAgaWYgKCFlbmRwb2ludE1ldGhvZHNNYXAuaGFzKHNjb3BlKSkge1xuICAgICAgZW5kcG9pbnRNZXRob2RzTWFwLnNldChzY29wZSwgbmV3IE1hcCgpKTtcbiAgICB9XG5cbiAgICBlbmRwb2ludE1ldGhvZHNNYXAuZ2V0KHNjb3BlKS5zZXQobWV0aG9kTmFtZSwge1xuICAgICAgc2NvcGUsXG4gICAgICBtZXRob2ROYW1lLFxuICAgICAgZW5kcG9pbnREZWZhdWx0cyxcbiAgICAgIGRlY29yYXRpb25zLFxuICAgIH0pO1xuICB9XG59XG5cbnR5cGUgUHJveHlUYXJnZXQgPSB7XG4gIG9jdG9raXQ6IE9jdG9raXQ7XG4gIHNjb3BlOiBzdHJpbmc7XG4gIGNhY2hlOiBSZWNvcmQ8c3RyaW5nLCAoLi4uYXJnczogYW55W10pID0+IGFueT47XG59O1xuXG5jb25zdCBoYW5kbGVyID0ge1xuICBoYXMoeyBzY29wZSB9OiBQcm94eVRhcmdldCwgbWV0aG9kTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGVuZHBvaW50TWV0aG9kc01hcC5nZXQoc2NvcGUpLmhhcyhtZXRob2ROYW1lKTtcbiAgfSxcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldDogUHJveHlUYXJnZXQsIG1ldGhvZE5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdGhpcy5nZXQodGFyZ2V0LCBtZXRob2ROYW1lKSwgLy8gZW5zdXJlcyBtZXRob2QgaXMgaW4gdGhlIGNhY2hlXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgfTtcbiAgfSxcbiAgZGVmaW5lUHJvcGVydHkoXG4gICAgdGFyZ2V0OiBQcm94eVRhcmdldCxcbiAgICBtZXRob2ROYW1lOiBzdHJpbmcsXG4gICAgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yLFxuICApIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LmNhY2hlLCBtZXRob2ROYW1lLCBkZXNjcmlwdG9yKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgZGVsZXRlUHJvcGVydHkodGFyZ2V0OiBQcm94eVRhcmdldCwgbWV0aG9kTmFtZTogc3RyaW5nKSB7XG4gICAgZGVsZXRlIHRhcmdldC5jYWNoZVttZXRob2ROYW1lXTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgb3duS2V5cyh7IHNjb3BlIH06IFByb3h5VGFyZ2V0KSB7XG4gICAgcmV0dXJuIFsuLi5lbmRwb2ludE1ldGhvZHNNYXAuZ2V0KHNjb3BlKS5rZXlzKCldO1xuICB9LFxuICBzZXQodGFyZ2V0OiBQcm94eVRhcmdldCwgbWV0aG9kTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuICh0YXJnZXQuY2FjaGVbbWV0aG9kTmFtZV0gPSB2YWx1ZSk7XG4gIH0sXG4gIGdldCh7IG9jdG9raXQsIHNjb3BlLCBjYWNoZSB9OiBQcm94eVRhcmdldCwgbWV0aG9kTmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKGNhY2hlW21ldGhvZE5hbWVdKSB7XG4gICAgICByZXR1cm4gY2FjaGVbbWV0aG9kTmFtZV07XG4gICAgfVxuXG4gICAgY29uc3QgbWV0aG9kID0gZW5kcG9pbnRNZXRob2RzTWFwLmdldChzY29wZSkuZ2V0KG1ldGhvZE5hbWUpO1xuICAgIGlmICghbWV0aG9kKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHsgZW5kcG9pbnREZWZhdWx0cywgZGVjb3JhdGlvbnMgfSA9IG1ldGhvZDtcblxuICAgIGlmIChkZWNvcmF0aW9ucykge1xuICAgICAgY2FjaGVbbWV0aG9kTmFtZV0gPSBkZWNvcmF0ZShcbiAgICAgICAgb2N0b2tpdCxcbiAgICAgICAgc2NvcGUsXG4gICAgICAgIG1ldGhvZE5hbWUsXG4gICAgICAgIGVuZHBvaW50RGVmYXVsdHMsXG4gICAgICAgIGRlY29yYXRpb25zLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FjaGVbbWV0aG9kTmFtZV0gPSBvY3Rva2l0LnJlcXVlc3QuZGVmYXVsdHMoZW5kcG9pbnREZWZhdWx0cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhY2hlW21ldGhvZE5hbWVdO1xuICB9LFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGVuZHBvaW50c1RvTWV0aG9kcyhvY3Rva2l0OiBPY3Rva2l0KTogUmVzdEVuZHBvaW50TWV0aG9kcyB7XG4gIGNvbnN0IG5ld01ldGhvZHMgPSB7fSBhcyB7IFtrZXk6IHN0cmluZ106IG9iamVjdCB9O1xuXG4gIGZvciAoY29uc3Qgc2NvcGUgb2YgZW5kcG9pbnRNZXRob2RzTWFwLmtleXMoKSkge1xuICAgIG5ld01ldGhvZHNbc2NvcGVdID0gbmV3IFByb3h5KHsgb2N0b2tpdCwgc2NvcGUsIGNhY2hlOiB7fSB9LCBoYW5kbGVyKTtcbiAgfVxuXG4gIHJldHVybiBuZXdNZXRob2RzIGFzIFJlc3RFbmRwb2ludE1ldGhvZHM7XG59XG5cbmZ1bmN0aW9uIGRlY29yYXRlKFxuICBvY3Rva2l0OiBPY3Rva2l0LFxuICBzY29wZTogc3RyaW5nLFxuICBtZXRob2ROYW1lOiBzdHJpbmcsXG4gIGRlZmF1bHRzOiBFbmRwb2ludE9wdGlvbnMsXG4gIGRlY29yYXRpb25zOiBFbmRwb2ludERlY29yYXRpb25zLFxuKSB7XG4gIGNvbnN0IHJlcXVlc3RXaXRoRGVmYXVsdHMgPSBvY3Rva2l0LnJlcXVlc3QuZGVmYXVsdHMoZGVmYXVsdHMpO1xuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGZ1bmN0aW9uIHdpdGhEZWNvcmF0aW9ucyhcbiAgICAuLi5hcmdzOiBbUm91dGUsIFJlcXVlc3RQYXJhbWV0ZXJzP10gfCBbRW5kcG9pbnRPcHRpb25zXVxuICApIHtcbiAgICAvLyBAdHMtaWdub3JlIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMjU0ODhcbiAgICBsZXQgb3B0aW9ucyA9IHJlcXVlc3RXaXRoRGVmYXVsdHMuZW5kcG9pbnQubWVyZ2UoLi4uYXJncyk7XG5cbiAgICAvLyBUaGVyZSBhcmUgY3VycmVudGx5IG5vIG90aGVyIGRlY29yYXRpb25zIHRoYW4gYC5tYXBUb0RhdGFgXG4gICAgaWYgKGRlY29yYXRpb25zLm1hcFRvRGF0YSkge1xuICAgICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcbiAgICAgICAgZGF0YTogb3B0aW9uc1tkZWNvcmF0aW9ucy5tYXBUb0RhdGFdLFxuICAgICAgICBbZGVjb3JhdGlvbnMubWFwVG9EYXRhXTogdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVxdWVzdFdpdGhEZWZhdWx0cyhvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAoZGVjb3JhdGlvbnMucmVuYW1lZCkge1xuICAgICAgY29uc3QgW25ld1Njb3BlLCBuZXdNZXRob2ROYW1lXSA9IGRlY29yYXRpb25zLnJlbmFtZWQ7XG4gICAgICBvY3Rva2l0LmxvZy53YXJuKFxuICAgICAgICBgb2N0b2tpdC4ke3Njb3BlfS4ke21ldGhvZE5hbWV9KCkgaGFzIGJlZW4gcmVuYW1lZCB0byBvY3Rva2l0LiR7bmV3U2NvcGV9LiR7bmV3TWV0aG9kTmFtZX0oKWAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoZGVjb3JhdGlvbnMuZGVwcmVjYXRlZCkge1xuICAgICAgb2N0b2tpdC5sb2cud2FybihkZWNvcmF0aW9ucy5kZXByZWNhdGVkKTtcbiAgICB9XG5cbiAgICBpZiAoZGVjb3JhdGlvbnMucmVuYW1lZFBhcmFtZXRlcnMpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmUgaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yNTQ4OFxuICAgICAgY29uc3Qgb3B0aW9ucyA9IHJlcXVlc3RXaXRoRGVmYXVsdHMuZW5kcG9pbnQubWVyZ2UoLi4uYXJncyk7XG5cbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGFsaWFzXSBvZiBPYmplY3QuZW50cmllcyhcbiAgICAgICAgZGVjb3JhdGlvbnMucmVuYW1lZFBhcmFtZXRlcnMsXG4gICAgICApKSB7XG4gICAgICAgIGlmIChuYW1lIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICBvY3Rva2l0LmxvZy53YXJuKFxuICAgICAgICAgICAgYFwiJHtuYW1lfVwiIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIGZvciBcIm9jdG9raXQuJHtzY29wZX0uJHttZXRob2ROYW1lfSgpXCIuIFVzZSBcIiR7YWxpYXN9XCIgaW5zdGVhZGAsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIShhbGlhcyBpbiBvcHRpb25zKSkge1xuICAgICAgICAgICAgb3B0aW9uc1thbGlhc10gPSBvcHRpb25zW25hbWVdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWxldGUgb3B0aW9uc1tuYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcXVlc3RXaXRoRGVmYXVsdHMob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLy8gQHRzLWlnbm9yZSBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzI1NDg4XG4gICAgcmV0dXJuIHJlcXVlc3RXaXRoRGVmYXVsdHMoLi4uYXJncyk7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24od2l0aERlY29yYXRpb25zLCByZXF1ZXN0V2l0aERlZmF1bHRzKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IE9jdG9raXQgfSBmcm9tIFwiQG9jdG9raXQvY29yZVwiO1xuXG5leHBvcnQgdHlwZSB7IFJlc3RFbmRwb2ludE1ldGhvZFR5cGVzIH0gZnJvbSBcIi4vZ2VuZXJhdGVkL3BhcmFtZXRlcnMtYW5kLXJlc3BvbnNlLXR5cGVzLmpzXCI7XG5pbXBvcnQgeyBWRVJTSU9OIH0gZnJvbSBcIi4vdmVyc2lvbi5qc1wiO1xuaW1wb3J0IHR5cGUgeyBBcGkgfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgZW5kcG9pbnRzVG9NZXRob2RzIH0gZnJvbSBcIi4vZW5kcG9pbnRzLXRvLW1ldGhvZHMuanNcIjtcblxuLy8gRXhwb3J0IHRoZSB0eXBlIGZvciBkb3duc3RyZWFtIHVzZXJzIGluIG9yZGVyIHRvIGZpeCBhIFR5cGVTY3JpcHQgZXJyb3Jcbi8vIFRoZSBpbmZlcnJlZCB0eXBlIG9mICdPY3Rva2l0JyBjYW5ub3QgYmUgbmFtZWQgd2l0aG91dCBhIHJlZmVyZW5jZSB0byAnLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHMvZGlzdC10eXBlcy90eXBlcy5qcycuIFRoaXMgaXMgbGlrZWx5IG5vdCBwb3J0YWJsZS4gQSB0eXBlIGFubm90YXRpb24gaXMgbmVjZXNzYXJ5LlxuZXhwb3J0IHR5cGUgeyBBcGkgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlc3RFbmRwb2ludE1ldGhvZHMob2N0b2tpdDogT2N0b2tpdCk6IEFwaSB7XG4gIGNvbnN0IGFwaSA9IGVuZHBvaW50c1RvTWV0aG9kcyhvY3Rva2l0KTtcbiAgcmV0dXJuIHtcbiAgICByZXN0OiBhcGksXG4gIH07XG59XG5yZXN0RW5kcG9pbnRNZXRob2RzLlZFUlNJT04gPSBWRVJTSU9OO1xuXG5leHBvcnQgZnVuY3Rpb24gbGVnYWN5UmVzdEVuZHBvaW50TWV0aG9kcyhvY3Rva2l0OiBPY3Rva2l0KTogQXBpW1wicmVzdFwiXSAmIEFwaSB7XG4gIGNvbnN0IGFwaSA9IGVuZHBvaW50c1RvTWV0aG9kcyhvY3Rva2l0KTtcbiAgcmV0dXJuIHtcbiAgICAuLi5hcGksXG4gICAgcmVzdDogYXBpLFxuICB9O1xufVxubGVnYWN5UmVzdEVuZHBvaW50TWV0aG9kcy5WRVJTSU9OID0gVkVSU0lPTjtcbiIsICJjb25zdCBWRVJTSU9OID0gXCIyMS4xLjFcIjtcbmV4cG9ydCB7XG4gIFZFUlNJT05cbn07XG4iLCAiaW1wb3J0IHsgT2N0b2tpdCBhcyBDb3JlIH0gZnJvbSBcIkBvY3Rva2l0L2NvcmVcIjtcbmltcG9ydCB7IHJlcXVlc3RMb2cgfSBmcm9tIFwiQG9jdG9raXQvcGx1Z2luLXJlcXVlc3QtbG9nXCI7XG5pbXBvcnQge1xuICBwYWdpbmF0ZVJlc3Rcbn0gZnJvbSBcIkBvY3Rva2l0L3BsdWdpbi1wYWdpbmF0ZS1yZXN0XCI7XG5pbXBvcnQgeyBsZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzIH0gZnJvbSBcIkBvY3Rva2l0L3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHNcIjtcbmltcG9ydCB7IFZFUlNJT04gfSBmcm9tIFwiLi92ZXJzaW9uLmpzXCI7XG5jb25zdCBPY3Rva2l0ID0gQ29yZS5wbHVnaW4ocmVxdWVzdExvZywgbGVnYWN5UmVzdEVuZHBvaW50TWV0aG9kcywgcGFnaW5hdGVSZXN0KS5kZWZhdWx0cyhcbiAge1xuICAgIHVzZXJBZ2VudDogYG9jdG9raXQtcmVzdC5qcy8ke1ZFUlNJT059YFxuICB9XG4pO1xuZXhwb3J0IHtcbiAgT2N0b2tpdFxufTtcbiIsICJleHBvcnQgeyBwYXJzZUFyZ3NTdHJpbmdUb0FyZ3YgfTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBhcnNlQXJnc1N0cmluZ1RvQXJndih2YWx1ZSwgZW52LCBmaWxlKSB7XG4gICAgLy8gKFteXFxzJ1wiXShbXlxccydcIl0qKFsnXCJdKShbXlxcM10qPylcXDMpK1teXFxzJ1wiXSopIE1hdGNoZXMgbmVzdGVkIHF1b3RlcyB1bnRpbCB0aGUgZmlyc3Qgc3BhY2Ugb3V0c2lkZSBvZiBxdW90ZXNcbiAgICAvLyBbXlxccydcIl0rIG9yIE1hdGNoIGlmIG5vdCBhIHNwYWNlICcgb3IgXCJcbiAgICAvLyAoWydcIl0pKFteXFw1XSo/KVxcNSBvciBNYXRjaCBcInF1b3RlZCB0ZXh0XCIgd2l0aG91dCBxdW90ZXNcbiAgICAvLyBgXFwzYCBhbmQgYFxcNWAgYXJlIGEgYmFja3JlZmVyZW5jZSB0byB0aGUgcXVvdGUgc3R5bGUgKCcgb3IgXCIpIGNhcHR1cmVkXG4gICAgdmFyIG15UmVnZXhwID0gLyhbXlxccydcIl0oW15cXHMnXCJdKihbJ1wiXSkoW15cXDNdKj8pXFwzKStbXlxccydcIl0qKXxbXlxccydcIl0rfChbJ1wiXSkoW15cXDVdKj8pXFw1L2dpO1xuICAgIHZhciBteVN0cmluZyA9IHZhbHVlO1xuICAgIHZhciBteUFycmF5ID0gW107XG4gICAgaWYgKGVudikge1xuICAgICAgICBteUFycmF5LnB1c2goZW52KTtcbiAgICB9XG4gICAgaWYgKGZpbGUpIHtcbiAgICAgICAgbXlBcnJheS5wdXNoKGZpbGUpO1xuICAgIH1cbiAgICB2YXIgbWF0Y2g7XG4gICAgZG8ge1xuICAgICAgICAvLyBFYWNoIGNhbGwgdG8gZXhlYyByZXR1cm5zIHRoZSBuZXh0IHJlZ2V4IG1hdGNoIGFzIGFuIGFycmF5XG4gICAgICAgIG1hdGNoID0gbXlSZWdleHAuZXhlYyhteVN0cmluZyk7XG4gICAgICAgIGlmIChtYXRjaCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gSW5kZXggMSBpbiB0aGUgYXJyYXkgaXMgdGhlIGNhcHR1cmVkIGdyb3VwIGlmIGl0IGV4aXN0c1xuICAgICAgICAgICAgLy8gSW5kZXggMCBpcyB0aGUgbWF0Y2hlZCB0ZXh0LCB3aGljaCB3ZSB1c2UgaWYgbm8gY2FwdHVyZWQgZ3JvdXAgZXhpc3RzXG4gICAgICAgICAgICBteUFycmF5LnB1c2goZmlyc3RTdHJpbmcobWF0Y2hbMV0sIG1hdGNoWzZdLCBtYXRjaFswXSkpO1xuICAgICAgICB9XG4gICAgfSB3aGlsZSAobWF0Y2ggIT09IG51bGwpO1xuICAgIHJldHVybiBteUFycmF5O1xufVxuLy8gQWNjZXB0cyBhbnkgbnVtYmVyIG9mIGFyZ3VtZW50cywgYW5kIHJldHVybnMgdGhlIGZpcnN0IG9uZSB0aGF0IGlzIGEgc3RyaW5nXG4vLyAoZXZlbiBhbiBlbXB0eSBzdHJpbmcpXG5mdW5jdGlvbiBmaXJzdFN0cmluZygpIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBhcmcgPSBhcmdzW2ldO1xuICAgICAgICBpZiAodHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIGFyZztcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsICJpbXBvcnQgKiBhcyBmcyBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgKiBhcyBvcyBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgU2FmZXR5U3RyYXRlZ3kgfSBmcm9tIFwiLi9ydW5Db2RleEV4ZWNcIjtcbmltcG9ydCB7IGNoZWNrT3V0cHV0IH0gZnJvbSBcIi4vY2hlY2tPdXRwdXRcIjtcblxuY29uc3QgTU9ERUxfUFJPVklERVIgPSBcIm9wZW5haS1wcm94eVwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gd3JpdGVQcm94eUNvbmZpZyhcbiAgY29kZXhIb21lOiBzdHJpbmcsXG4gIHBvcnQ6IG51bWJlcixcbiAgc2FmZXR5U3RyYXRlZ3k6IFNhZmV0eVN0cmF0ZWd5XG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgY29uZmlnUGF0aCA9IHBhdGguam9pbihjb2RleEhvbWUsIFwiY29uZmlnLnRvbWxcIik7XG5cbiAgbGV0IGV4aXN0aW5nID0gXCJcIjtcbiAgdHJ5IHtcbiAgICBleGlzdGluZyA9IGF3YWl0IGZzLnJlYWRGaWxlKGNvbmZpZ1BhdGgsIFwidXRmOFwiKTtcbiAgfSBjYXRjaCB7XG4gICAgZXhpc3RpbmcgPSBcIlwiO1xuICB9XG5cbiAgY29uc3QgaGVhZGVyID0gYCMgQWRkZWQgYnkgY29kZXgtYWN0aW9uLlxubW9kZWxfcHJvdmlkZXIgPSBcIiR7TU9ERUxfUFJPVklERVJ9XCJcblxuXG5gO1xuICBjb25zdCB0YWJsZSA9IGBcblxuIyBBZGRlZCBieSBjb2RleC1hY3Rpb24uXG5bbW9kZWxfcHJvdmlkZXJzLiR7TU9ERUxfUFJPVklERVJ9XVxubmFtZSA9IFwiT3BlbkFJIFByb3h5XCJcbmJhc2VfdXJsID0gXCJodHRwOi8vMTI3LjAuMC4xOiR7cG9ydH0vdjFcIlxud2lyZV9hcGkgPSBcInJlc3BvbnNlc1wiXG5gO1xuXG4gIC8vIFByZXBlbmQgbW9kZWxfcHJvdmlkZXIgYXQgdGhlIHZlcnkgdG9wLlxuICBsZXQgb3V0cHV0ID0gYCR7aGVhZGVyfSR7ZXhpc3Rpbmd9JHt0YWJsZX1gO1xuXG4gIGlmIChzYWZldHlTdHJhdGVneSA9PT0gXCJ1bnByaXZpbGVnZWQtdXNlclwiKSB7XG4gICAgLy8gV2Uga25vdyB3ZSBoYXZlIGFscmVhZHkgY3JlYXRlZCB0aGUgQ09ERVhfSE9NRSBkaXJlY3RvcnksIGJ1dCBpdCBpcyBvd25lZFxuICAgIC8vIGJ5IGFub3RoZXIgdXNlciwgc28gd2UgbmVlZCB0byB1c2Ugc3VkbyB0byB3cml0ZSB0aGUgZmlsZS5cbiAgICBjb25zdCB0ZW1wRGlyID0gYXdhaXQgZnMubWtkdGVtcChwYXRoLmpvaW4ob3MudG1wZGlyKCksIFwiY29kZXgtY29uZmlnXCIpKTtcbiAgICB0cnkge1xuICAgICAgY29uc3QgdGVtcENvbmZpZ1BhdGggPSBwYXRoLmpvaW4odGVtcERpciwgXCJjb25maWcudG9tbFwiKTtcbiAgICAgIGF3YWl0IGZzLndyaXRlRmlsZSh0ZW1wQ29uZmlnUGF0aCwgb3V0cHV0LCBcInV0ZjhcIik7XG4gICAgICBhd2FpdCBjaGVja091dHB1dChbXCJzdWRvXCIsIFwibXZcIiwgdGVtcENvbmZpZ1BhdGgsIGNvbmZpZ1BhdGhdKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgYXdhaXQgZnMucm0odGVtcERpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBhd2FpdCBmcy5ta2Rpcihjb2RleEhvbWUsIHsgcmVjdXJzaXZlOiB0cnVlIH0pO1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShjb25maWdQYXRoLCBvdXRwdXQsIFwidXRmOFwiKTtcbiAgfVxufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUE7QUFBQSw0RUFBQUEsVUFBQTtBQUdBLFFBQU1DLGtCQUFOLGNBQTZCLE1BQU07QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQU9qQyxZQUFZLFVBQVUsTUFBTSxTQUFTO0FBQ25DLGNBQU0sT0FBTztBQUViLGNBQU0sa0JBQWtCLE1BQU0sS0FBSyxXQUFXO0FBQzlDLGFBQUssT0FBTyxLQUFLLFlBQVk7QUFDN0IsYUFBSyxPQUFPO0FBQ1osYUFBSyxXQUFXO0FBQ2hCLGFBQUssY0FBYztBQUFBLE1BQ3JCO0FBQUEsSUFDRjtBQUtBLFFBQU1DLHdCQUFOLGNBQW1DRCxnQkFBZTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsTUFLaEQsWUFBWSxTQUFTO0FBQ25CLGNBQU0sR0FBRyw2QkFBNkIsT0FBTztBQUU3QyxjQUFNLGtCQUFrQixNQUFNLEtBQUssV0FBVztBQUM5QyxhQUFLLE9BQU8sS0FBSyxZQUFZO0FBQUEsTUFDL0I7QUFBQSxJQUNGO0FBRUEsSUFBQUQsU0FBUSxpQkFBaUJDO0FB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USxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87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QUFBQSxJQUNuQjtBQUVBLGFBQVMsWUFBWSxRQUFRO0FBRTdCLGVBQVcsVUFBVSxRQUFRLFNBQVUsR0FBRztBQUFBLElBQUM7QUFFM0MsSUFBQUEsUUFBTyxVQUFVO0FBQUE7QUFBQTs7O0FDalRqQjtBQUFBLCtGQUFBQyxVQUFBQyxTQUFBO0FBQUE7QUFFQSxRQUFNLFVBQVU7QUFFaEIsUUFBTSxNQUFNO0FBQUEsTUFDVjtBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQzdDO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFDN0M7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUM3QztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQzdDO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFBLE1BQUc7QUFBQSxNQUFHO0FBQUEsTUFBRztBQUFB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QSxPQUFBLDJCQUFBLElBQUEsRUFBQSxJQUFBO0FBRUEsTUFBQUEsT0FBQUEsT0FBQSxrQkFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLE9BQUFBLE9BQUEscUJBQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxPQUFBQSxPQUFBLHFCQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsT0FBQUEsT0FBQSxpQkFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLE9BQUFBLE9BQUEsbUJBQUEsSUFBQSxFQUFBLElBQUE7QUFFQSxNQUFBQSxPQUFBQSxPQUFBLFFBQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxPQUFBQSxPQUFBLGdCQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsT0FBQUEsT0FBQSxtQkFBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLE9BQUFBLE9BQUEsTUFBQSxJQUFBLEVBQUEsSUFBQTtJQUNGLEdBN0JZLFFBQUFDLFNBQUEsVUFBQUEsU0FBQSxRQUFLLENBQUEsRUFBQTtBQStCakIsUUFBWTtBQUFaLEtBQUEsU0FBWUMsT0FBSTtBQUNkLE1BQUFBLE1BQUFBLE1BQUEsTUFBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLE1BQUFBLE1BQUEsU0FBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLE1BQUFBLE1BQUEsVUFBQSxJQUFBLENBQUEsSUFBQTtJQUNGLEdBSlksT0FBQUQsU0FBQSxTQUFBQSxTQUFBLE9BQUksQ0FBQSxFQUFBO0FBTWhCLFFBQVk7QUFBWixLQUFBLFNBQVlFLFFBQUs7QUFDZixNQUFBQSxPQUFBQSxPQUFBLHVCQUFBLElBQUEsQ0FBQSxJQUFBO0FBQ0EsTUFBQUEsT0FBQUEsT0FBQSxrQkFBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLE9BQUFBLE9BQUEsb0JBQUEsSUFBQSxDQUFBLElBQUE7QUFDQSxNQUFBQSxPQUFBQSxPQUFBLFNBQUEsSUFBQSxDQUFBLElBQUE7QUFDQSxNQUFBQSxPQUFBQSxPQUFBLFNBQUEsSUFBQSxFQUFBLElBQUE7QUFDQSxNQUFBQSxPQUFBQSxPQUFBLGdCQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsT0FBQUEsT0FBQSxVQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsT0FBQUEsT0FBQSxVQUFBLElBQUEsR0FBQSxJQUFBO0FBRUEsTUFBQUEsT0FBQUEsT0FBQSxtQkFBQSxJQUFBLEdBQUEsSUFBQTtJQUNGLEdBWFksUUFBQUYsU0FBQSxVQUFBQSxTQUFBLFFBQUssQ0FBQSxFQUFBO0FBYWpCLFFBQVk7QUFBWixLQUFBLFNBQVlHLGdCQUFhO0FBQ3ZCLE1BQUFBLGVBQUFBLGVBQUEsU0FBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLGVBQUFBLGVBQUEsZ0JBQUEsSUFBQSxDQUFBLElBQUE7QUFDQSxNQUFBQSxlQUFBQSxlQUFBLFlBQUEsSUFBQSxDQUFBLElBQUE7SUFDRixHQUpZLGdCQUFBSCxTQUFBLGtCQUFBQSxTQUFBLGdCQUFhLENBQUEsRUFBQTtBQU16QixRQUFZO0FBQVosS0FBQSxTQUFZSSxVQUFPO0FBQ2pCLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsS0FBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsTUFBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsTUFBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsS0FBQSxJQUFBLENBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsU0FBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsU0FBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsT0FBQSxJQUFBLENBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsTUFBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsTUFBQSxJQUFBLENBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsT0FBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsTUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsVUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsV0FBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsTUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsS0FBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsWUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsVUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsT0FBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsVUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsV0FBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsYUFBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsT0FBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsT0FBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsWUFBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsTUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsS0FBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsVUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsVUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsT0FBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsTUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsT0FBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsVUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsZUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsZUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsVUFBQSxJQUFBLEVBQUEsSUFBQTtBQUNBLE1BQUFBLFNBQUFBLFNBQUEsUUFBQSxJQUFBLEVBQUEsSUFBQTtBQUVBLE1BQUFBLFNBQUFBLFNBQUEsT0FBQSxJQUFBLEVBQUEsSUFBQTtJQUNGLEdBMURZLFVBQUFKLFNBQUEsWUFBQUEsU0FBQSxVQUFPLENBQUEsRUFBQTtBQTRETixJQUFBQSxTQUFBLGVBQWU7TUFDMUIsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNS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LEdBQUc7QUFBQSxRQUNsQyxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FB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QSxNQUFBLENBQUE7QUFDQSxRQUFBLFFBQUEsYUFBQSxRQUFBLE9BQUEsQ0FBQTtBQUdBLFFBQUEsS0FBQSxhQUFBLGVBQUE7QUFDQSxRQUFBLFNBQUEsYUFBQSxpQkFBQTtBQUNBLFFBQUEsV0FBQTtBQUVBLFFBQVk7QUFBWixLQUFBLFNBQVlJLFlBQVM7QUFDbkIsTUFBQUEsV0FBQUEsV0FBQSxJQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsTUFBQUEsV0FBQUEsV0FBQSxpQkFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLE1BQUFBLFdBQUFBLFdBQUEsa0JBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxNQUFBQSxXQUFBQSxXQUFBLGVBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxNQUFBQSxXQUFBQSxXQUFBLFVBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxNQUFBQSxXQUFBQSxXQUFBLGFBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxNQUFBQSxXQUFBQSxXQUFBLFVBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxNQUFBQSxXQUFBQSxXQUFBLGFBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxNQUFBQSxXQUFBQSxXQUFBLG1CQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsTUFBQUEsV0FBQUEsV0FBQSxtQkFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLE1BQUFBLFdBQUFBLFdBQUEsWUFBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLE1BQUFBLFdBQUFBLFdBQUEsY0FBQSxJQUFBLEdBQUEsSUFBQTtBQUNBLE1BQUFBLFdBQUFBLFdBQUEsaUJBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxNQUFBQSxXQUFBQSxXQUFBLFdBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxNQUFBQSxXQUFBQSxXQUFBLFVBQUEsSUFBQSxHQUFBLElBQUE7QUFDQSxNQUFBQSxXQUFBQSxXQUFBLGtCQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsTUFBQUEsV0FBQUEsV0FBQSxlQUFBLElBQUEsR0FBQSxJQUFBO0FBQ0EsTUFBQUEsV0FBQUEsV0FBQSw2QkFBQSxJQUFBLEdB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QUFTLEdBQUcsSUFBSSxJQUFJLFNBQVMsQ0FBQztBQUN6RCxRQUFNLFlBQVksQ0FBQyxRQUFRLFNBQVMsT0FBTyxTQUFTLENBQUM7QUFHckQsUUFBTSxpQkFBc0IsV0FBSyxXQUFXLEdBQUcsV0FBVyxPQUFPO0FBQ2pFLFFBQU0sWUFBWSxDQUFDLFFBQVEsU0FBUyxjQUFjLENBQUM7QUFHbkQsUUFBTSxZQUFZLENBQUMsUUFBUSxTQUFTLE9BQU8sY0FBYyxDQUFDO0FBRTFELFNBQU87QUFDVDtBQUVBLFNBQVMsWUFBWSxHQUFtQjtBQUN0QyxNQUFJLE1BQU0sS0FBSztBQUNiLFdBQVUsWUFBUTtBQUFBLEVBQ3BCO0FBQ0EsTUFBSSxFQUFFLFdBQVcsSUFBSSxLQUFLLEVBQUUsV0FBVyxLQUFLLEdBQUc7QUFDN0MsV0FBWSxXQUFRLFlBQVEsR0FBRyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQUEsRUFDM0M7QUFDQSxTQUFPO0FBQ1Q7IiwKICAibmFtZXMiOiBbImV4cG9ydHMiLCAiQ29tbWFuZGVyRXJyb3IiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiZXhwb3J0cyIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJBcmd1bWVudCIsICJleHBvcnRzIiwgIkhlbHAiLCAiY21kIiwgImV4cG9ydHMiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiT3B0aW9uIiwgInN0ciIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAicGF0aCIsICJmcyIsICJwcm9jZXNzIiwgIkFyZ3VtZW50IiwgIkNvbW1hbmRlckVycm9yIiwgIkhlbHAiLCAiT3B0aW9uIiwgIkNvbW1hbmQiLCAiaG9vayIsICJvcHRpb24iLCAiZXhwb3J0cyIsICJBcmd1bWVudCIsICJDb21tYW5kIiwgIkNvbW1hbmRlckVycm9yIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIkhlbHAiLCAiT3B0aW9uIiwgImV4cG9ydHMiLCAib3MiLCAiQ29tbWFuZCIsICJleHBvcnRzIiwgImZzIiwgIm9zIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgIm9wdGlvbnMiLCAic29ja2V0IiwgInJlcXVpcmVfdHVubmVsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIkJsb2IiLCAicGF0aCIsICJpZHgiLCAic3RyZWFtIiwgImVyciIsICJoYW5kbGVyIiwgIml0ZXJhdG9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInBhdGgiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV9jb25zdGFudHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiRE9NRXhjZXB0aW9uIiwgInN0cnVjdHVyZWRDbG9uZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3V0aWwiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGVyZm9ybWFuY2UiLCAicmVxdWVzdCIsICJpdGVyYXRvciIsICJraW5kIiwgInJlcXVpcmVfc3ltYm9scyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJrZXlzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImF0b2IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiQmxvYiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJCbG9iIiwgImVudHJ5IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkRPTUV4Y2VwdGlvbiIsICJCbG9iIiwgImNodW5rIiwgIml0ZXJhdG9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgInBhdGgiLCAiaGFuZGxlciIsICJyZXF1ZXN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImVyciIsICJoYW5kbGVyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgInNlc3Npb24iLCAib25Db25uZWN0VGltZW91dCIsICJleHBvcnRzIiwgIkVSUk9SIiwgImV4cG9ydHMiLCAiVFlQRSIsICJGTEFHUyIsICJMRU5JRU5UX0ZMQUdTIiwgIk1FVEhPRFMiLCAiRklOSVNIIiwgIkhFQURFUl9TVEFURSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJoYW5kbGVyIiwgInBhdGgiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiaGFuZGxlciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJjb25uZWN0IiwgImhhbmRsZXIiLCAicmVxdWVzdCIsICJzb2NrZXQiLCAicGF0aCIsICJoZWFkZXJzIiwgImVyciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJoYW5kbGVyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIm9yaWdpbiIsICJkaXNwYXRjaGVyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgInBvb2wiLCAiZGlzcGF0Y2hlciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJXZWFrUmVmIiwgImhhbmRsZXIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiQmxvYiIsICJub29wIiwgImNvbnN1bWUiLCAicmVxdWlyZV91dGlsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgInJlcXVlc3QiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiY2FsbGJhY2siLCAicmVzIiwgIm9wYXF1ZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJoYW5kbGVyIiwgImJvZHkiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAibW9ja0Rpc3BhdGNoIiwgInBhdGgiLCAiZ2V0UmVzcG9uc2VEYXRhIiwgImhhbmRsZXIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZ2V0UmVzcG9uc2VEYXRhIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgInN0YXR1c0NvZGUiLCAiZGF0YSIsICJyZXNwb25zZU9wdGlvbnMiLCAibmV3TW9ja0Rpc3BhdGNoIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInBhdGgiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiaGFuZGxlciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJVUkwiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAib3B0cyIsICJoYW5kbGVyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImVyciIsICJyZXF1aXJlX2dsb2JhbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJoYW5kbGVyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkRPTUV4Y2VwdGlvbiIsICJyZXF1aXJlX3JlcXVlc3QiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWVzdCIsICJhYyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJET01FeGNlcHRpb24iLCAicmVxdWVzdCIsICJnbG9iYWxUaGlzIiwgIml0ZXJhdG9yIiwgInJlcXVpcmVfc3ltYm9scyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3V0aWwiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiRE9NRXhjZXB0aW9uIiwgInR5cGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV9zeW1ib2xzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlcXVpcmVfdXRpbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1ZXN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlcXVlc3QiLCAiY2FjaGUiLCAicmVxdWlyZV9jb25zdGFudHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV91dGlsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInBhdGgiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV9jb25zdGFudHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV9zeW1ib2xzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlcXVpcmVfdXRpbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1ZXN0IiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImJvZHkiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiRE9NRXhjZXB0aW9uIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImhhbmRsZXIiLCAicGF0aCIsICJIdHRwQ29kZXMiLCAiZXhwb3J0cyIsICJIZWFkZXJzIiwgIk1lZGlhVHlwZXMiLCAidXNlckFnZW50IiwgImluZm8iLCAiaGFuZGxlciIsICJsb3dlcmNhc2VLZXlzIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJ3cml0ZUZpbGUiLCAiZXhwb3J0cyIsICJwYXRoIiwgImV4cG9ydHMiLCAiZnMiLCAicGF0aCIsICJleHBvcnRzIiwgIl9hIiwgInBhdGgiLCAiZXhwb3J0cyIsICJvcyIsICJwYXRoIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgIm9zIiwgInBhdGgiLCAiRXhpdENvZGUiLCAiZXhwb3J0cyIsICJzZXRPdXRwdXQiLCAiaW5mbyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJOdWxsT2JqZWN0IiwgInBhcnNlIiwgInNhZmVQYXJzZSIsICJjb21tYW5kZXIiLCAiZnMiLCAib3MiLCAicGF0aCIsICJpbXBvcnRfY2hpbGRfcHJvY2VzcyIsICJwcm9ncmFtIiwgInBhdGgiLCAib3MiLCAicGF0aCIsICJmcyIsICJjb3JlIiwgIm5hbWUiLCAibWV0aG9kIiwgImhvb2siLCAiaG9vayIsICJWRVJTSU9OIiwgImlzUGxhaW5PYmplY3QiLCAid2l0aERlZmF1bHRzIiwgIlZFUlNJT04iLCAid2l0aERlZmF1bHRzIiwgInJlcXVlc3QiLCAiZW5kcG9pbnQiLCAiVkVSU0lPTiIsICJWRVJTSU9OIiwgImhvb2siLCAiYXV0aCIsICJWRVJTSU9OIiwgInJlcXVlc3QiLCAicGF0aCIsICJWRVJTSU9OIiwgIlZFUlNJT04iLCAiVkVSU0lPTiIsICJWRVJTSU9OIiwgImVuZHBvaW50IiwgIm9wdGlvbnMiLCAiVkVSU0lPTiIsICJWRVJTSU9OIiwgIk9jdG9raXQiLCAiVkVSU0lPTiIsICJPY3Rva2l0IiwgImZzIiwgInBhdGgiLCAib3MiLCAicHJvZ3JhbSIsICJzZXRPdXRwdXQiLCAic3RhdCJdCn0K +//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvZXJyb3IuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvYXJndW1lbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvaGVscC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY29tbWFuZGVyQDE0LjAuMS9ub2RlX21vZHVsZXMvY29tbWFuZGVyL2xpYi9vcHRpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvc3VnZ2VzdFNpbWlsYXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hbmRlckAxNC4wLjEvbm9kZV9tb2R1bGVzL2NvbW1hbmRlci9saWIvY29tbWFuZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vY29tbWFuZGVyQDE0LjAuMS9ub2RlX21vZHVsZXMvY29tbWFuZGVyL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytjb3JlQDEuMTEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvdXRpbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhY3Rpb25zK2NvcmVAMS4xMS4xL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL3NyYy9jb21tYW5kLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytjb3JlQDEuMTEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvZmlsZS1jb21tYW5kLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytodHRwLWNsaWVudEAyLjIuMy9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvc3JjL3Byb3h5LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS90dW5uZWxAMC4wLjYvbm9kZV9tb2R1bGVzL3R1bm5lbC9saWIvdHVubmVsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS90dW5uZWxAMC4wLjYvbm9kZV9tb2R1bGVzL3R1bm5lbC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9lcnJvcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS9jb25zdGFudHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY29yZS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3RpbWVycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvZGVwcy9zdHJlYW1zZWFyY2gvc2JtaC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvZGVwcy9kaWNlci9saWIvUGFydFN0cmVhbS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL3V0aWxzL2dldExpbWl0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFzdGlmeStidXNib3lAMi4xLjEvbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9kZXBzL2RpY2VyL2xpYi9IZWFkZXJQYXJzZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmYXN0aWZ5K2J1c2JveUAyLjEuMS9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2RlcHMvZGljZXIvbGliL0RpY2VyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFzdGlmeStidXNib3lAMi4xLjEvbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdXRpbHMvZGVjb2RlVGV4dC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL3V0aWxzL3BhcnNlUGFyYW1zLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFzdGlmeStidXNib3lAMi4xLjEvbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdXRpbHMvYmFzZW5hbWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmYXN0aWZ5K2J1c2JveUAyLjEuMS9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2xpYi90eXBlcy9tdWx0aXBhcnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BmYXN0aWZ5K2J1c2JveUAyLjEuMS9ub2RlX21vZHVsZXMvQGZhc3RpZnkvYnVzYm95L2xpYi91dGlscy9EZWNvZGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AZmFzdGlmeStidXNib3lAMi4xLjEvbm9kZV9tb2R1bGVzL0BmYXN0aWZ5L2J1c2JveS9saWIvdHlwZXMvdXJsZW5jb2RlZC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGZhc3RpZnkrYnVzYm95QDIuMS4xL25vZGVfbW9kdWxlcy9AZmFzdGlmeS9idXNib3kvbGliL21haW4uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2dsb2JhbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvd2ViaWRsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2RhdGFVUkwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvZmlsZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9mb3JtZGF0YS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9ib2R5LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvcmUvcmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9kaXNwYXRjaGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Rpc3BhdGNoZXItYmFzZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb3JlL2Nvbm5lY3QuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9zcmMvbGxodHRwL3V0aWxzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvc3JjL2xsaHR0cC9jb25zdGFudHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaGFuZGxlci9SZWRpcmVjdEhhbmRsZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaW50ZXJjZXB0b3IvcmVkaXJlY3RJbnRlcmNlcHRvci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9sbGh0dHAvbGxodHRwLXdhc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbGxodHRwL2xsaHR0cF9zaW1kLXdhc20uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY2xpZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL25vZGUvZml4ZWQtcXVldWUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvcG9vbC1zdGF0cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9wb29sLWJhc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvcG9vbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9iYWxhbmNlZC1wb29sLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NvbXBhdC9kaXNwYXRjaGVyLXdlYWtyZWYuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYWdlbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL3JlYWRhYmxlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hYm9ydC1zaWduYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2FwaS1yZXF1ZXN0LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktc3RyZWFtLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktcGlwZWxpbmUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvYXBpL2FwaS11cGdyYWRlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2FwaS9hcGktY29ubmVjdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9hcGkvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLWVycm9ycy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9tb2NrL21vY2stdXRpbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLWludGVyY2VwdG9yLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1jbGllbnQuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9tb2NrLXBvb2wuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvbW9jay9wbHVyYWxpemVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svcGVuZGluZy1pbnRlcmNlcHRvcnMtZm9ybWF0dGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL21vY2svbW9jay1hZ2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9wcm94eS1hZ2VudC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9oYW5kbGVyL1JldHJ5SGFuZGxlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9nbG9iYWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvaGFuZGxlci9EZWNvcmF0b3JIYW5kbGVyLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZldGNoL2hlYWRlcnMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvcmVzcG9uc2UuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmV0Y2gvcmVxdWVzdC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9mZXRjaC9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9maWxlYXBpL3N5bWJvbHMuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmlsZWFwaS9wcm9ncmVzc2V2ZW50LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZpbGVhcGkvZW5jb2RpbmcuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvZmlsZWFwaS91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2ZpbGVhcGkvZmlsZXJlYWRlci5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jYWNoZS9zeW1ib2xzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2NhY2hlL3V0aWwuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY2FjaGUvY2FjaGUuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvY2FjaGUvY2FjaGVzdG9yYWdlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Nvb2tpZXMvY29uc3RhbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Nvb2tpZXMvdXRpbC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi9jb29raWVzL3BhcnNlLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL2Nvb2tpZXMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L2NvbnN0YW50cy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvc3ltYm9scy5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvZXZlbnRzLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC91dGlsLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC9jb25uZWN0aW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bmRpY2lANS4yOS4wL25vZGVfbW9kdWxlcy91bmRpY2kvbGliL3dlYnNvY2tldC9mcmFtZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2xpYi93ZWJzb2NrZXQvcmVjZWl2ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL3VuZGljaUA1LjI5LjAvbm9kZV9tb2R1bGVzL3VuZGljaS9saWIvd2Vic29ja2V0L3dlYnNvY2tldC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vdW5kaWNpQDUuMjkuMC9ub2RlX21vZHVsZXMvdW5kaWNpL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytodHRwLWNsaWVudEAyLjIuMy9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvc3JjL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytodHRwLWNsaWVudEAyLjIuMy9ub2RlX21vZHVsZXMvQGFjdGlvbnMvaHR0cC1jbGllbnQvc3JjL2F1dGgudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhY3Rpb25zK2NvcmVAMS4xMS4xL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9jb3JlL3NyYy9vaWRjLXV0aWxzLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytjb3JlQDEuMTEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvc3VtbWFyeS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMrY29yZUAxLjExLjEvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvc3JjL3BhdGgtdXRpbHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BhY3Rpb25zK2lvQDEuMS4zL25vZGVfbW9kdWxlcy9AYWN0aW9ucy9pby9zcmMvaW8tdXRpbC50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMraW9AMS4xLjMvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2lvL3NyYy9pby50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMrZXhlY0AxLjEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZXhlYy9zcmMvdG9vbHJ1bm5lci50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMrZXhlY0AxLjEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvZXhlYy9zcmMvZXhlYy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQGFjdGlvbnMrY29yZUAxLjExLjEvbm9kZV9tb2R1bGVzL0BhY3Rpb25zL2NvcmUvc3JjL3BsYXRmb3JtLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9AYWN0aW9ucytjb3JlQDEuMTEuMS9ub2RlX21vZHVsZXMvQGFjdGlvbnMvY29yZS9zcmMvY29yZS50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vZmFzdC1jb250ZW50LXR5cGUtcGFyc2VAMi4wLjEvbm9kZV9tb2R1bGVzL2Zhc3QtY29udGVudC10eXBlLXBhcnNlL2luZGV4LmpzIiwgIi4uL3NyYy9tYWluLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9jb21tYW5kZXJAMTQuMC4xL25vZGVfbW9kdWxlcy9jb21tYW5kZXIvZXNtLm1qcyIsICIuLi9wYWNrYWdlLmpzb24iLCAiLi4vc3JjL3JlYWRTZXJ2ZXJJbmZvLnRzIiwgIi4uL3NyYy9ydW5Db2RleEV4ZWMudHMiLCAiLi4vc3JjL2NoZWNrT3V0cHV0LnRzIiwgIi4uL3NyYy9kcm9wU3Vkby50cyIsICIuLi9zcmMvY2hlY2tBY3RvclBlcm1pc3Npb25zLnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS91bml2ZXJzYWwtdXNlci1hZ2VudEA3LjAuMy9ub2RlX21vZHVsZXMvdW5pdmVyc2FsLXVzZXItYWdlbnQvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2JlZm9yZS1hZnRlci1ob29rQDMuMC4yL25vZGVfbW9kdWxlcy9iZWZvcmUtYWZ0ZXItaG9vay9saWIvcmVnaXN0ZXIuanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL2JlZm9yZS1hZnRlci1ob29rQDMuMC4yL25vZGVfbW9kdWxlcy9iZWZvcmUtYWZ0ZXItaG9vay9saWIvYWRkLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9iZWZvcmUtYWZ0ZXItaG9va0AzLjAuMi9ub2RlX21vZHVsZXMvYmVmb3JlLWFmdGVyLWhvb2svbGliL3JlbW92ZS5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vYmVmb3JlLWFmdGVyLWhvb2tAMy4wLjIvbm9kZV9tb2R1bGVzL2JlZm9yZS1hZnRlci1ob29rL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtlbmRwb2ludEAxMC4xLjQvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2VuZHBvaW50L2Rpc3QtYnVuZGxlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtyZXF1ZXN0QDkuMi40L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9yZXF1ZXN0L2Rpc3QtYnVuZGxlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtyZXF1ZXN0LWVycm9yQDYuMS44L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9yZXF1ZXN0LWVycm9yL2Rpc3Qtc3JjL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtncmFwaHFsQDguMi4yL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9ncmFwaHFsL2Rpc3QtYnVuZGxlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCthdXRoLXRva2VuQDUuMS4yL25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9hdXRoLXRva2VuL2Rpc3QtYnVuZGxlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtjb3JlQDYuMS42L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9jb3JlL2Rpc3Qtc3JjL3ZlcnNpb24uanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K2NvcmVANi4xLjYvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L2NvcmUvZGlzdC1zcmMvaW5kZXguanMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K3BsdWdpbi1yZXF1ZXN0LWxvZ0A1LjMuMV9Ab2N0b2tpdCtjb3JlQDYuMS42L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9wbHVnaW4tcmVxdWVzdC1sb2cvZGlzdC1zcmMvdmVyc2lvbi5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrcGx1Z2luLXJlcXVlc3QtbG9nQDUuMy4xX0BvY3Rva2l0K2NvcmVANi4xLjYvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3BsdWdpbi1yZXF1ZXN0LWxvZy9kaXN0LXNyYy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrcGx1Z2luLXBhZ2luYXRlLXJlc3RAMTEuNi4wX0BvY3Rva2l0K2NvcmVANi4xLjYvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3BsdWdpbi1wYWdpbmF0ZS1yZXN0L2Rpc3QtYnVuZGxlL2luZGV4LmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtwbHVnaW4tcmVzdC1lbmRwb2ludC1tZXRob2RzQDEzLjUuMF9Ab2N0b2tpdCtjb3JlQDYuMS42L25vZGVfbW9kdWxlcy9Ab2N0b2tpdC9zcmMvdmVyc2lvbi50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrcGx1Z2luLXJlc3QtZW5kcG9pbnQtbWV0aG9kc0AxMy41LjBfQG9jdG9raXQrY29yZUA2LjEuNi9ub2RlX21vZHVsZXMvQG9jdG9raXQvc3JjL2dlbmVyYXRlZC9lbmRwb2ludHMudHMiLCAiLi4vbm9kZV9tb2R1bGVzLy5wbnBtL0BvY3Rva2l0K3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHNAMTMuNS4wX0BvY3Rva2l0K2NvcmVANi4xLjYvbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3NyYy9lbmRwb2ludHMtdG8tbWV0aG9kcy50cyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vQG9jdG9raXQrcGx1Z2luLXJlc3QtZW5kcG9pbnQtbWV0aG9kc0AxMy41LjBfQG9jdG9raXQrY29yZUA2LjEuNi9ub2RlX21vZHVsZXMvQG9jdG9raXQvc3JjL2luZGV4LnRzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtyZXN0QDIxLjEuMS9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVzdC9kaXN0LXNyYy92ZXJzaW9uLmpzIiwgIi4uL25vZGVfbW9kdWxlcy8ucG5wbS9Ab2N0b2tpdCtyZXN0QDIxLjEuMS9ub2RlX21vZHVsZXMvQG9jdG9raXQvcmVzdC9kaXN0LXNyYy9pbmRleC5qcyIsICIuLi9ub2RlX21vZHVsZXMvLnBucG0vc3RyaW5nLWFyZ3ZAMC4zLjIvbm9kZV9tb2R1bGVzL3N0cmluZy1hcmd2L2luZGV4LmpzIiwgIi4uL3NyYy93cml0ZVByb3h5Q29uZmlnLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIENvbW1hbmRlckVycm9yIGNsYXNzXG4gKi9cbmNsYXNzIENvbW1hbmRlckVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICAvKipcbiAgICogQ29uc3RydWN0cyB0aGUgQ29tbWFuZGVyRXJyb3IgY2xhc3NcbiAgICogQHBhcmFtIHtudW1iZXJ9IGV4aXRDb2RlIHN1Z2dlc3RlZCBleGl0IGNvZGUgd2hpY2ggY291bGQgYmUgdXNlZCB3aXRoIHByb2Nlc3MuZXhpdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZSBhbiBpZCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBlcnJvclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgZXJyb3JcbiAgICovXG4gIGNvbnN0cnVjdG9yKGV4aXRDb2RlLCBjb2RlLCBtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSk7XG4gICAgLy8gcHJvcGVybHkgY2FwdHVyZSBzdGFjayB0cmFjZSBpbiBOb2RlLmpzXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgdGhpcy5uYW1lID0gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lO1xuICAgIHRoaXMuY29kZSA9IGNvZGU7XG4gICAgdGhpcy5leGl0Q29kZSA9IGV4aXRDb2RlO1xuICAgIHRoaXMubmVzdGVkRXJyb3IgPSB1bmRlZmluZWQ7XG4gIH1cbn1cblxuLyoqXG4gKiBJbnZhbGlkQXJndW1lbnRFcnJvciBjbGFzc1xuICovXG5jbGFzcyBJbnZhbGlkQXJndW1lbnRFcnJvciBleHRlbmRzIENvbW1hbmRlckVycm9yIHtcbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgdGhlIEludmFsaWRBcmd1bWVudEVycm9yIGNsYXNzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZV0gZXhwbGFuYXRpb24gb2Ygd2h5IGFyZ3VtZW50IGlzIGludmFsaWRcbiAgICovXG4gIGNvbnN0cnVjdG9yKG1lc3NhZ2UpIHtcbiAgICBzdXBlcigxLCAnY29tbWFuZGVyLmludmFsaWRBcmd1bWVudCcsIG1lc3NhZ2UpO1xuICAgIC8vIHByb3Blcmx5IGNhcHR1cmUgc3RhY2sgdHJhY2UgaW4gTm9kZS5qc1xuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIHRoaXMuY29uc3RydWN0b3IpO1xuICAgIHRoaXMubmFtZSA9IHRoaXMuY29uc3RydWN0b3IubmFtZTtcbiAgfVxufVxuXG5leHBvcnRzLkNvbW1hbmRlckVycm9yID0gQ29tbWFuZGVyRXJyb3I7XG5leHBvcnRzLkludmFsaWRBcmd1bWVudEVycm9yID0gSW52YWxpZEFyZ3VtZW50RXJyb3I7XG4iLCAiY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi9lcnJvci5qcycpO1xuXG5jbGFzcyBBcmd1bWVudCB7XG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGEgbmV3IGNvbW1hbmQgYXJndW1lbnQgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBhbmQgZGVzY3JpcHRpb24uXG4gICAqIFRoZSBkZWZhdWx0IGlzIHRoYXQgdGhlIGFyZ3VtZW50IGlzIHJlcXVpcmVkLCBhbmQgeW91IGNhbiBleHBsaWNpdGx5XG4gICAqIGluZGljYXRlIHRoaXMgd2l0aCA8PiBhcm91bmQgdGhlIG5hbWUuIFB1dCBbXSBhcm91bmQgdGhlIG5hbWUgZm9yIGFuIG9wdGlvbmFsIGFyZ3VtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXVxuICAgKi9cblxuICBjb25zdHJ1Y3RvcihuYW1lLCBkZXNjcmlwdGlvbikge1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbiB8fCAnJztcbiAgICB0aGlzLnZhcmlhZGljID0gZmFsc2U7XG4gICAgdGhpcy5wYXJzZUFyZyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmRlZmF1bHRWYWx1ZURlc2NyaXB0aW9uID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYXJnQ2hvaWNlcyA9IHVuZGVmaW5lZDtcblxuICAgIHN3aXRjaCAobmFtZVswXSkge1xuICAgICAgY2FzZSAnPCc6IC8vIGUuZy4gPHJlcXVpcmVkPlxuICAgICAgICB0aGlzLnJlcXVpcmVkID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5fbmFtZSA9IG5hbWUuc2xpY2UoMSwgLTEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ1snOiAvLyBlLmcuIFtvcHRpb25hbF1cbiAgICAgICAgdGhpcy5yZXF1aXJlZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9uYW1lID0gbmFtZS5zbGljZSgxLCAtMSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhpcy5yZXF1aXJlZCA9IHRydWU7XG4gICAgICAgIHRoaXMuX25hbWUgPSBuYW1lO1xuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fbmFtZS5lbmRzV2l0aCgnLi4uJykpIHtcbiAgICAgIHRoaXMudmFyaWFkaWMgPSB0cnVlO1xuICAgICAgdGhpcy5fbmFtZSA9IHRoaXMuX25hbWUuc2xpY2UoMCwgLTMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYXJndW1lbnQgbmFtZS5cbiAgICpcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuICBuYW1lKCkge1xuICAgIHJldHVybiB0aGlzLl9uYW1lO1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYWNrYWdlXG4gICAqL1xuXG4gIF9jb2xsZWN0VmFsdWUodmFsdWUsIHByZXZpb3VzKSB7XG4gICAgaWYgKHByZXZpb3VzID09PSB0aGlzLmRlZmF1bHRWYWx1ZSB8fCAhQXJyYXkuaXNBcnJheShwcmV2aW91cykpIHtcbiAgICAgIHJldHVybiBbdmFsdWVdO1xuICAgIH1cblxuICAgIHByZXZpb3VzLnB1c2godmFsdWUpO1xuICAgIHJldHVybiBwcmV2aW91cztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGRlZmF1bHQgdmFsdWUsIGFuZCBvcHRpb25hbGx5IHN1cHBseSB0aGUgZGVzY3JpcHRpb24gdG8gYmUgZGlzcGxheWVkIGluIHRoZSBoZWxwLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dXG4gICAqIEByZXR1cm4ge0FyZ3VtZW50fVxuICAgKi9cblxuICBkZWZhdWx0KHZhbHVlLCBkZXNjcmlwdGlvbikge1xuICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gdmFsdWU7XG4gICAgdGhpcy5kZWZhdWx0VmFsdWVEZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY3VzdG9tIGhhbmRsZXIgZm9yIHByb2Nlc3NpbmcgQ0xJIGNvbW1hbmQgYXJndW1lbnRzIGludG8gYXJndW1lbnQgdmFsdWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZm5dXG4gICAqIEByZXR1cm4ge0FyZ3VtZW50fVxuICAgKi9cblxuICBhcmdQYXJzZXIoZm4pIHtcbiAgICB0aGlzLnBhcnNlQXJnID0gZm47XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogT25seSBhbGxvdyBhcmd1bWVudCB2YWx1ZSB0byBiZSBvbmUgb2YgY2hvaWNlcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gdmFsdWVzXG4gICAqIEByZXR1cm4ge0FyZ3VtZW50fVxuICAgKi9cblxuICBjaG9pY2VzKHZhbHVlcykge1xuICAgIHRoaXMuYXJnQ2hvaWNlcyA9IHZhbHVlcy5zbGljZSgpO1xuICAgIHRoaXMucGFyc2VBcmcgPSAoYXJnLCBwcmV2aW91cykgPT4ge1xuICAgICAgaWYgKCF0aGlzLmFyZ0Nob2ljZXMuaW5jbHVkZXMoYXJnKSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgICAgYEFsbG93ZWQgY2hvaWNlcyBhcmUgJHt0aGlzLmFyZ0Nob2ljZXMuam9pbignLCAnKX0uYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnZhcmlhZGljKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2xsZWN0VmFsdWUoYXJnLCBwcmV2aW91cyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJnO1xuICAgIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBhcmd1bWVudCByZXF1aXJlZC5cbiAgICpcbiAgICogQHJldHVybnMge0FyZ3VtZW50fVxuICAgKi9cbiAgYXJnUmVxdWlyZWQoKSB7XG4gICAgdGhpcy5yZXF1aXJlZCA9IHRydWU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogTWFrZSBhcmd1bWVudCBvcHRpb25hbC5cbiAgICpcbiAgICogQHJldHVybnMge0FyZ3VtZW50fVxuICAgKi9cbiAgYXJnT3B0aW9uYWwoKSB7XG4gICAgdGhpcy5yZXF1aXJlZCA9IGZhbHNlO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG59XG5cbi8qKlxuICogVGFrZXMgYW4gYXJndW1lbnQgYW5kIHJldHVybnMgaXRzIGh1bWFuIHJlYWRhYmxlIGVxdWl2YWxlbnQgZm9yIGhlbHAgdXNhZ2UuXG4gKlxuICogQHBhcmFtIHtBcmd1bWVudH0gYXJnXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGh1bWFuUmVhZGFibGVBcmdOYW1lKGFyZykge1xuICBjb25zdCBuYW1lT3V0cHV0ID0gYXJnLm5hbWUoKSArIChhcmcudmFyaWFkaWMgPT09IHRydWUgPyAnLi4uJyA6ICcnKTtcblxuICByZXR1cm4gYXJnLnJlcXVpcmVkID8gJzwnICsgbmFtZU91dHB1dCArICc+JyA6ICdbJyArIG5hbWVPdXRwdXQgKyAnXSc7XG59XG5cbmV4cG9ydHMuQXJndW1lbnQgPSBBcmd1bWVudDtcbmV4cG9ydHMuaHVtYW5SZWFkYWJsZUFyZ05hbWUgPSBodW1hblJlYWRhYmxlQXJnTmFtZTtcbiIsICJjb25zdCB7IGh1bWFuUmVhZGFibGVBcmdOYW1lIH0gPSByZXF1aXJlKCcuL2FyZ3VtZW50LmpzJyk7XG5cbi8qKlxuICogVHlwZVNjcmlwdCBpbXBvcnQgdHlwZXMgZm9yIEpTRG9jLCB1c2VkIGJ5IFZpc3VhbCBTdHVkaW8gQ29kZSBJbnRlbGxpU2Vuc2UgYW5kIGBucG0gcnVuIHR5cGVzY3JpcHQtY2hlY2tKU2BcbiAqIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rL2pzZG9jLXN1cHBvcnRlZC10eXBlcy5odG1sI2ltcG9ydC10eXBlc1xuICogQHR5cGVkZWYgeyBpbXBvcnQoXCIuL2FyZ3VtZW50LmpzXCIpLkFyZ3VtZW50IH0gQXJndW1lbnRcbiAqIEB0eXBlZGVmIHsgaW1wb3J0KFwiLi9jb21tYW5kLmpzXCIpLkNvbW1hbmQgfSBDb21tYW5kXG4gKiBAdHlwZWRlZiB7IGltcG9ydChcIi4vb3B0aW9uLmpzXCIpLk9wdGlvbiB9IE9wdGlvblxuICovXG5cbi8vIEFsdGhvdWdoIHRoaXMgaXMgYSBjbGFzcywgbWV0aG9kcyBhcmUgc3RhdGljIGluIHN0eWxlIHRvIGFsbG93IG92ZXJyaWRlIHVzaW5nIHN1YmNsYXNzIG9yIGp1c3QgZnVuY3Rpb25zLlxuY2xhc3MgSGVscCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaGVscFdpZHRoID0gdW5kZWZpbmVkO1xuICAgIHRoaXMubWluV2lkdGhUb1dyYXAgPSA0MDtcbiAgICB0aGlzLnNvcnRTdWJjb21tYW5kcyA9IGZhbHNlO1xuICAgIHRoaXMuc29ydE9wdGlvbnMgPSBmYWxzZTtcbiAgICB0aGlzLnNob3dHbG9iYWxPcHRpb25zID0gZmFsc2U7XG4gIH1cblxuICAvKipcbiAgICogcHJlcGFyZUNvbnRleHQgaXMgY2FsbGVkIGJ5IENvbW1hbmRlciBhZnRlciBhcHBseWluZyBvdmVycmlkZXMgZnJvbSBgQ29tbWFuZC5jb25maWd1cmVIZWxwKClgXG4gICAqIGFuZCBqdXN0IGJlZm9yZSBjYWxsaW5nIGBmb3JtYXRIZWxwKClgLlxuICAgKlxuICAgKiBDb21tYW5kZXIganVzdCB1c2VzIHRoZSBoZWxwV2lkdGggYW5kIHRoZSByZXN0IGlzIHByb3ZpZGVkIGZvciBvcHRpb25hbCB1c2UgYnkgbW9yZSBjb21wbGV4IHN1YmNsYXNzZXMuXG4gICAqXG4gICAqIEBwYXJhbSB7eyBlcnJvcj86IGJvb2xlYW4sIGhlbHBXaWR0aD86IG51bWJlciwgb3V0cHV0SGFzQ29sb3JzPzogYm9vbGVhbiB9fSBjb250ZXh0T3B0aW9uc1xuICAgKi9cbiAgcHJlcGFyZUNvbnRleHQoY29udGV4dE9wdGlvbnMpIHtcbiAgICB0aGlzLmhlbHBXaWR0aCA9IHRoaXMuaGVscFdpZHRoID8/IGNvbnRleHRPcHRpb25zLmhlbHBXaWR0aCA/PyA4MDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgYW4gYXJyYXkgb2YgdGhlIHZpc2libGUgc3ViY29tbWFuZHMuIEluY2x1ZGVzIGEgcGxhY2Vob2xkZXIgZm9yIHRoZSBpbXBsaWNpdCBoZWxwIGNvbW1hbmQsIGlmIHRoZXJlIGlzIG9uZS5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHJldHVybnMge0NvbW1hbmRbXX1cbiAgICovXG5cbiAgdmlzaWJsZUNvbW1hbmRzKGNtZCkge1xuICAgIGNvbnN0IHZpc2libGVDb21tYW5kcyA9IGNtZC5jb21tYW5kcy5maWx0ZXIoKGNtZCkgPT4gIWNtZC5faGlkZGVuKTtcbiAgICBjb25zdCBoZWxwQ29tbWFuZCA9IGNtZC5fZ2V0SGVscENvbW1hbmQoKTtcbiAgICBpZiAoaGVscENvbW1hbmQgJiYgIWhlbHBDb21tYW5kLl9oaWRkZW4pIHtcbiAgICAgIHZpc2libGVDb21tYW5kcy5wdXNoKGhlbHBDb21tYW5kKTtcbiAgICB9XG4gICAgaWYgKHRoaXMuc29ydFN1YmNvbW1hbmRzKSB7XG4gICAgICB2aXNpYmxlQ29tbWFuZHMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAvLyBAdHMtaWdub3JlOiBiZWNhdXNlIG92ZXJsb2FkZWQgcmV0dXJuIHR5cGVcbiAgICAgICAgcmV0dXJuIGEubmFtZSgpLmxvY2FsZUNvbXBhcmUoYi5uYW1lKCkpO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiB2aXNpYmxlQ29tbWFuZHM7XG4gIH1cblxuICAvKipcbiAgICogQ29tcGFyZSBvcHRpb25zIGZvciBzb3J0LlxuICAgKlxuICAgKiBAcGFyYW0ge09wdGlvbn0gYVxuICAgKiBAcGFyYW0ge09wdGlvbn0gYlxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgY29tcGFyZU9wdGlvbnMoYSwgYikge1xuICAgIGNvbnN0IGdldFNvcnRLZXkgPSAob3B0aW9uKSA9PiB7XG4gICAgICAvLyBXWVNJV1lHIGZvciBvcmRlciBkaXNwbGF5ZWQgaW4gaGVscC4gU2hvcnQgdXNlZCBmb3IgY29tcGFyaXNvbiBpZiBwcmVzZW50LiBObyBzcGVjaWFsIGhhbmRsaW5nIGZvciBuZWdhdGVkLlxuICAgICAgcmV0dXJuIG9wdGlvbi5zaG9ydFxuICAgICAgICA/IG9wdGlvbi5zaG9ydC5yZXBsYWNlKC9eLS8sICcnKVxuICAgICAgICA6IG9wdGlvbi5sb25nLnJlcGxhY2UoL14tLS8sICcnKTtcbiAgICB9O1xuICAgIHJldHVybiBnZXRTb3J0S2V5KGEpLmxvY2FsZUNvbXBhcmUoZ2V0U29ydEtleShiKSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIGFycmF5IG9mIHRoZSB2aXNpYmxlIG9wdGlvbnMuIEluY2x1ZGVzIGEgcGxhY2Vob2xkZXIgZm9yIHRoZSBpbXBsaWNpdCBoZWxwIG9wdGlvbiwgaWYgdGhlcmUgaXMgb25lLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcmV0dXJucyB7T3B0aW9uW119XG4gICAqL1xuXG4gIHZpc2libGVPcHRpb25zKGNtZCkge1xuICAgIGNvbnN0IHZpc2libGVPcHRpb25zID0gY21kLm9wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+ICFvcHRpb24uaGlkZGVuKTtcbiAgICAvLyBCdWlsdC1pbiBoZWxwIG9wdGlvbi5cbiAgICBjb25zdCBoZWxwT3B0aW9uID0gY21kLl9nZXRIZWxwT3B0aW9uKCk7XG4gICAgaWYgKGhlbHBPcHRpb24gJiYgIWhlbHBPcHRpb24uaGlkZGVuKSB7XG4gICAgICAvLyBBdXRvbWF0aWNhbGx5IGhpZGUgY29uZmxpY3RpbmcgZmxhZ3MuIEJpdCBkdWJpb3VzIGJ1dCBhIGhpc3RvcmljYWwgYmVoYXZpb3VyIHRoYXQgaXMgY29udmVuaWVudCBmb3Igc2luZ2xlLWNvbW1hbmQgcHJvZ3JhbXMuXG4gICAgICBjb25zdCByZW1vdmVTaG9ydCA9IGhlbHBPcHRpb24uc2hvcnQgJiYgY21kLl9maW5kT3B0aW9uKGhlbHBPcHRpb24uc2hvcnQpO1xuICAgICAgY29uc3QgcmVtb3ZlTG9uZyA9IGhlbHBPcHRpb24ubG9uZyAmJiBjbWQuX2ZpbmRPcHRpb24oaGVscE9wdGlvbi5sb25nKTtcbiAgICAgIGlmICghcmVtb3ZlU2hvcnQgJiYgIXJlbW92ZUxvbmcpIHtcbiAgICAgICAgdmlzaWJsZU9wdGlvbnMucHVzaChoZWxwT3B0aW9uKTsgLy8gbm8gY2hhbmdlcyBuZWVkZWRcbiAgICAgIH0gZWxzZSBpZiAoaGVscE9wdGlvbi5sb25nICYmICFyZW1vdmVMb25nKSB7XG4gICAgICAgIHZpc2libGVPcHRpb25zLnB1c2goXG4gICAgICAgICAgY21kLmNyZWF0ZU9wdGlvbihoZWxwT3B0aW9uLmxvbmcsIGhlbHBPcHRpb24uZGVzY3JpcHRpb24pLFxuICAgICAgICApO1xuICAgICAgfSBlbHNlIGlmIChoZWxwT3B0aW9uLnNob3J0ICYmICFyZW1vdmVTaG9ydCkge1xuICAgICAgICB2aXNpYmxlT3B0aW9ucy5wdXNoKFxuICAgICAgICAgIGNtZC5jcmVhdGVPcHRpb24oaGVscE9wdGlvbi5zaG9ydCwgaGVscE9wdGlvbi5kZXNjcmlwdGlvbiksXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIGlmICh0aGlzLnNvcnRPcHRpb25zKSB7XG4gICAgICB2aXNpYmxlT3B0aW9ucy5zb3J0KHRoaXMuY29tcGFyZU9wdGlvbnMpO1xuICAgIH1cbiAgICByZXR1cm4gdmlzaWJsZU9wdGlvbnM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IGFuIGFycmF5IG9mIHRoZSB2aXNpYmxlIGdsb2JhbCBvcHRpb25zLiAoTm90IGluY2x1ZGluZyBoZWxwLilcbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHJldHVybnMge09wdGlvbltdfVxuICAgKi9cblxuICB2aXNpYmxlR2xvYmFsT3B0aW9ucyhjbWQpIHtcbiAgICBpZiAoIXRoaXMuc2hvd0dsb2JhbE9wdGlvbnMpIHJldHVybiBbXTtcblxuICAgIGNvbnN0IGdsb2JhbE9wdGlvbnMgPSBbXTtcbiAgICBmb3IgKFxuICAgICAgbGV0IGFuY2VzdG9yQ21kID0gY21kLnBhcmVudDtcbiAgICAgIGFuY2VzdG9yQ21kO1xuICAgICAgYW5jZXN0b3JDbWQgPSBhbmNlc3RvckNtZC5wYXJlbnRcbiAgICApIHtcbiAgICAgIGNvbnN0IHZpc2libGVPcHRpb25zID0gYW5jZXN0b3JDbWQub3B0aW9ucy5maWx0ZXIoXG4gICAgICAgIChvcHRpb24pID0+ICFvcHRpb24uaGlkZGVuLFxuICAgICAgKTtcbiAgICAgIGdsb2JhbE9wdGlvbnMucHVzaCguLi52aXNpYmxlT3B0aW9ucyk7XG4gICAgfVxuICAgIGlmICh0aGlzLnNvcnRPcHRpb25zKSB7XG4gICAgICBnbG9iYWxPcHRpb25zLnNvcnQodGhpcy5jb21wYXJlT3B0aW9ucyk7XG4gICAgfVxuICAgIHJldHVybiBnbG9iYWxPcHRpb25zO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBhbiBhcnJheSBvZiB0aGUgYXJndW1lbnRzIGlmIGFueSBoYXZlIGEgZGVzY3JpcHRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEByZXR1cm5zIHtBcmd1bWVudFtdfVxuICAgKi9cblxuICB2aXNpYmxlQXJndW1lbnRzKGNtZCkge1xuICAgIC8vIFNpZGUgZWZmZWN0ISBBcHBseSB0aGUgbGVnYWN5IGRlc2NyaXB0aW9ucyBiZWZvcmUgdGhlIGFyZ3VtZW50cyBhcmUgZGlzcGxheWVkLlxuICAgIGlmIChjbWQuX2FyZ3NEZXNjcmlwdGlvbikge1xuICAgICAgY21kLnJlZ2lzdGVyZWRBcmd1bWVudHMuZm9yRWFjaCgoYXJndW1lbnQpID0+IHtcbiAgICAgICAgYXJndW1lbnQuZGVzY3JpcHRpb24gPVxuICAgICAgICAgIGFyZ3VtZW50LmRlc2NyaXB0aW9uIHx8IGNtZC5fYXJnc0Rlc2NyaXB0aW9uW2FyZ3VtZW50Lm5hbWUoKV0gfHwgJyc7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBJZiB0aGVyZSBhcmUgYW55IGFyZ3VtZW50cyB3aXRoIGEgZGVzY3JpcHRpb24gdGhlbiByZXR1cm4gYWxsIHRoZSBhcmd1bWVudHMuXG4gICAgaWYgKGNtZC5yZWdpc3RlcmVkQXJndW1lbnRzLmZpbmQoKGFyZ3VtZW50KSA9PiBhcmd1bWVudC5kZXNjcmlwdGlvbikpIHtcbiAgICAgIHJldHVybiBjbWQucmVnaXN0ZXJlZEFyZ3VtZW50cztcbiAgICB9XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgY29tbWFuZCB0ZXJtIHRvIHNob3cgaW4gdGhlIGxpc3Qgb2Ygc3ViY29tbWFuZHMuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuXG4gIHN1YmNvbW1hbmRUZXJtKGNtZCkge1xuICAgIC8vIExlZ2FjeS4gSWdub3JlcyBjdXN0b20gdXNhZ2Ugc3RyaW5nLCBhbmQgbmVzdGVkIGNvbW1hbmRzLlxuICAgIGNvbnN0IGFyZ3MgPSBjbWQucmVnaXN0ZXJlZEFyZ3VtZW50c1xuICAgICAgLm1hcCgoYXJnKSA9PiBodW1hblJlYWRhYmxlQXJnTmFtZShhcmcpKVxuICAgICAgLmpvaW4oJyAnKTtcbiAgICByZXR1cm4gKFxuICAgICAgY21kLl9uYW1lICtcbiAgICAgIChjbWQuX2FsaWFzZXNbMF0gPyAnfCcgKyBjbWQuX2FsaWFzZXNbMF0gOiAnJykgK1xuICAgICAgKGNtZC5vcHRpb25zLmxlbmd0aCA/ICcgW29wdGlvbnNdJyA6ICcnKSArIC8vIHNpbXBsaXN0aWMgY2hlY2sgZm9yIG5vbi1oZWxwIG9wdGlvblxuICAgICAgKGFyZ3MgPyAnICcgKyBhcmdzIDogJycpXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIG9wdGlvbiB0ZXJtIHRvIHNob3cgaW4gdGhlIGxpc3Qgb2Ygb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtPcHRpb259IG9wdGlvblxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cblxuICBvcHRpb25UZXJtKG9wdGlvbikge1xuICAgIHJldHVybiBvcHRpb24uZmxhZ3M7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBhcmd1bWVudCB0ZXJtIHRvIHNob3cgaW4gdGhlIGxpc3Qgb2YgYXJndW1lbnRzLlxuICAgKlxuICAgKiBAcGFyYW0ge0FyZ3VtZW50fSBhcmd1bWVudFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cblxuICBhcmd1bWVudFRlcm0oYXJndW1lbnQpIHtcbiAgICByZXR1cm4gYXJndW1lbnQubmFtZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgbG9uZ2VzdCBjb21tYW5kIHRlcm0gbGVuZ3RoLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcGFyYW0ge0hlbHB9IGhlbHBlclxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cblxuICBsb25nZXN0U3ViY29tbWFuZFRlcm1MZW5ndGgoY21kLCBoZWxwZXIpIHtcbiAgICByZXR1cm4gaGVscGVyLnZpc2libGVDb21tYW5kcyhjbWQpLnJlZHVjZSgobWF4LCBjb21tYW5kKSA9PiB7XG4gICAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICAgIG1heCxcbiAgICAgICAgdGhpcy5kaXNwbGF5V2lkdGgoXG4gICAgICAgICAgaGVscGVyLnN0eWxlU3ViY29tbWFuZFRlcm0oaGVscGVyLnN1YmNvbW1hbmRUZXJtKGNvbW1hbmQpKSxcbiAgICAgICAgKSxcbiAgICAgICk7XG4gICAgfSwgMCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBsb25nZXN0IG9wdGlvbiB0ZXJtIGxlbmd0aC5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHBhcmFtIHtIZWxwfSBoZWxwZXJcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG5cbiAgbG9uZ2VzdE9wdGlvblRlcm1MZW5ndGgoY21kLCBoZWxwZXIpIHtcbiAgICByZXR1cm4gaGVscGVyLnZpc2libGVPcHRpb25zKGNtZCkucmVkdWNlKChtYXgsIG9wdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgICBtYXgsXG4gICAgICAgIHRoaXMuZGlzcGxheVdpZHRoKGhlbHBlci5zdHlsZU9wdGlvblRlcm0oaGVscGVyLm9wdGlvblRlcm0ob3B0aW9uKSkpLFxuICAgICAgKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxvbmdlc3QgZ2xvYmFsIG9wdGlvbiB0ZXJtIGxlbmd0aC5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHBhcmFtIHtIZWxwfSBoZWxwZXJcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG5cbiAgbG9uZ2VzdEdsb2JhbE9wdGlvblRlcm1MZW5ndGgoY21kLCBoZWxwZXIpIHtcbiAgICByZXR1cm4gaGVscGVyLnZpc2libGVHbG9iYWxPcHRpb25zKGNtZCkucmVkdWNlKChtYXgsIG9wdGlvbikgPT4ge1xuICAgICAgcmV0dXJuIE1hdGgubWF4KFxuICAgICAgICBtYXgsXG4gICAgICAgIHRoaXMuZGlzcGxheVdpZHRoKGhlbHBlci5zdHlsZU9wdGlvblRlcm0oaGVscGVyLm9wdGlvblRlcm0ob3B0aW9uKSkpLFxuICAgICAgKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGxvbmdlc3QgYXJndW1lbnQgdGVybSBsZW5ndGguXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEBwYXJhbSB7SGVscH0gaGVscGVyXG4gICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAqL1xuXG4gIGxvbmdlc3RBcmd1bWVudFRlcm1MZW5ndGgoY21kLCBoZWxwZXIpIHtcbiAgICByZXR1cm4gaGVscGVyLnZpc2libGVBcmd1bWVudHMoY21kKS5yZWR1Y2UoKG1heCwgYXJndW1lbnQpID0+IHtcbiAgICAgIHJldHVybiBNYXRoLm1heChcbiAgICAgICAgbWF4LFxuICAgICAgICB0aGlzLmRpc3BsYXlXaWR0aChcbiAgICAgICAgICBoZWxwZXIuc3R5bGVBcmd1bWVudFRlcm0oaGVscGVyLmFyZ3VtZW50VGVybShhcmd1bWVudCkpLFxuICAgICAgICApLFxuICAgICAgKTtcbiAgICB9LCAwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdGhlIGNvbW1hbmQgdXNhZ2UgdG8gYmUgZGlzcGxheWVkIGF0IHRoZSB0b3Agb2YgdGhlIGJ1aWx0LWluIGhlbHAuXG4gICAqXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gY21kXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuXG4gIGNvbW1hbmRVc2FnZShjbWQpIHtcbiAgICAvLyBVc2FnZVxuICAgIGxldCBjbWROYW1lID0gY21kLl9uYW1lO1xuICAgIGlmIChjbWQuX2FsaWFzZXNbMF0pIHtcbiAgICAgIGNtZE5hbWUgPSBjbWROYW1lICsgJ3wnICsgY21kLl9hbGlhc2VzWzBdO1xuICAgIH1cbiAgICBsZXQgYW5jZXN0b3JDbWROYW1lcyA9ICcnO1xuICAgIGZvciAoXG4gICAgICBsZXQgYW5jZXN0b3JDbWQgPSBjbWQucGFyZW50O1xuICAgICAgYW5jZXN0b3JDbWQ7XG4gICAgICBhbmNlc3RvckNtZCA9IGFuY2VzdG9yQ21kLnBhcmVudFxuICAgICkge1xuICAgICAgYW5jZXN0b3JDbWROYW1lcyA9IGFuY2VzdG9yQ21kLm5hbWUoKSArICcgJyArIGFuY2VzdG9yQ21kTmFtZXM7XG4gICAgfVxuICAgIHJldHVybiBhbmNlc3RvckNtZE5hbWVzICsgY21kTmFtZSArICcgJyArIGNtZC51c2FnZSgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgZGVzY3JpcHRpb24gZm9yIHRoZSBjb21tYW5kLlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cblxuICBjb21tYW5kRGVzY3JpcHRpb24oY21kKSB7XG4gICAgLy8gQHRzLWlnbm9yZTogYmVjYXVzZSBvdmVybG9hZGVkIHJldHVybiB0eXBlXG4gICAgcmV0dXJuIGNtZC5kZXNjcmlwdGlvbigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCB0aGUgc3ViY29tbWFuZCBzdW1tYXJ5IHRvIHNob3cgaW4gdGhlIGxpc3Qgb2Ygc3ViY29tbWFuZHMuXG4gICAqIChGYWxsYmFjayB0byBkZXNjcmlwdGlvbiBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuKVxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cblxuICBzdWJjb21tYW5kRGVzY3JpcHRpb24oY21kKSB7XG4gICAgLy8gQHRzLWlnbm9yZTogYmVjYXVzZSBvdmVybG9hZGVkIHJldHVybiB0eXBlXG4gICAgcmV0dXJuIGNtZC5zdW1tYXJ5KCkgfHwgY21kLmRlc2NyaXB0aW9uKCk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBvcHRpb24gZGVzY3JpcHRpb24gdG8gc2hvdyBpbiB0aGUgbGlzdCBvZiBvcHRpb25zLlxuICAgKlxuICAgKiBAcGFyYW0ge09wdGlvbn0gb3B0aW9uXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cbiAgb3B0aW9uRGVzY3JpcHRpb24ob3B0aW9uKSB7XG4gICAgY29uc3QgZXh0cmFJbmZvID0gW107XG5cbiAgICBpZiAob3B0aW9uLmFyZ0Nob2ljZXMpIHtcbiAgICAgIGV4dHJhSW5mby5wdXNoKFxuICAgICAgICAvLyB1c2Ugc3RyaW5naWZ5IHRvIG1hdGNoIHRoZSBkaXNwbGF5IG9mIHRoZSBkZWZhdWx0IHZhbHVlXG4gICAgICAgIGBjaG9pY2VzOiAke29wdGlvbi5hcmdDaG9pY2VzLm1hcCgoY2hvaWNlKSA9PiBKU09OLnN0cmluZ2lmeShjaG9pY2UpKS5qb2luKCcsICcpfWAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAob3B0aW9uLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBkZWZhdWx0IGZvciBib29sZWFuIGFuZCBuZWdhdGVkIG1vcmUgZm9yIHByb2dyYW1tZXIgdGhhbiBlbmQgdXNlcixcbiAgICAgIC8vIGJ1dCBzaG93IHRydWUvZmFsc2UgZm9yIGJvb2xlYW4gb3B0aW9uIGFzIG1heSBiZSBmb3IgaGFuZC1yb2xsZWQgZW52IG9yIGNvbmZpZyBwcm9jZXNzaW5nLlxuICAgICAgY29uc3Qgc2hvd0RlZmF1bHQgPVxuICAgICAgICBvcHRpb24ucmVxdWlyZWQgfHxcbiAgICAgICAgb3B0aW9uLm9wdGlvbmFsIHx8XG4gICAgICAgIChvcHRpb24uaXNCb29sZWFuKCkgJiYgdHlwZW9mIG9wdGlvbi5kZWZhdWx0VmFsdWUgPT09ICdib29sZWFuJyk7XG4gICAgICBpZiAoc2hvd0RlZmF1bHQpIHtcbiAgICAgICAgZXh0cmFJbmZvLnB1c2goXG4gICAgICAgICAgYGRlZmF1bHQ6ICR7b3B0aW9uLmRlZmF1bHRWYWx1ZURlc2NyaXB0aW9uIHx8IEpTT04uc3RyaW5naWZ5KG9wdGlvbi5kZWZhdWx0VmFsdWUpfWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIHByZXNldCBmb3IgYm9vbGVhbiBhbmQgbmVnYXRlZCBhcmUgbW9yZSBmb3IgcHJvZ3JhbW1lciB0aGFuIGVuZCB1c2VyXG4gICAgaWYgKG9wdGlvbi5wcmVzZXRBcmcgIT09IHVuZGVmaW5lZCAmJiBvcHRpb24ub3B0aW9uYWwpIHtcbiAgICAgIGV4dHJhSW5mby5wdXNoKGBwcmVzZXQ6ICR7SlNPTi5zdHJpbmdpZnkob3B0aW9uLnByZXNldEFyZyl9YCk7XG4gICAgfVxuICAgIGlmIChvcHRpb24uZW52VmFyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGV4dHJhSW5mby5wdXNoKGBlbnY6ICR7b3B0aW9uLmVudlZhcn1gKTtcbiAgICB9XG4gICAgaWYgKGV4dHJhSW5mby5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBleHRyYURlc2NyaXB0aW9uID0gYCgke2V4dHJhSW5mby5qb2luKCcsICcpfSlgO1xuICAgICAgaWYgKG9wdGlvbi5kZXNjcmlwdGlvbikge1xuICAgICAgICByZXR1cm4gYCR7b3B0aW9uLmRlc2NyaXB0aW9ufSAke2V4dHJhRGVzY3JpcHRpb259YDtcbiAgICAgIH1cbiAgICAgIHJldHVybiBleHRyYURlc2NyaXB0aW9uO1xuICAgIH1cblxuICAgIHJldHVybiBvcHRpb24uZGVzY3JpcHRpb247XG4gIH1cblxuICAvKipcbiAgICogR2V0IHRoZSBhcmd1bWVudCBkZXNjcmlwdGlvbiB0byBzaG93IGluIHRoZSBsaXN0IG9mIGFyZ3VtZW50cy5cbiAgICpcbiAgICogQHBhcmFtIHtBcmd1bWVudH0gYXJndW1lbnRcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuICBhcmd1bWVudERlc2NyaXB0aW9uKGFyZ3VtZW50KSB7XG4gICAgY29uc3QgZXh0cmFJbmZvID0gW107XG4gICAgaWYgKGFyZ3VtZW50LmFyZ0Nob2ljZXMpIHtcbiAgICAgIGV4dHJhSW5mby5wdXNoKFxuICAgICAgICAvLyB1c2Ugc3RyaW5naWZ5IHRvIG1hdGNoIHRoZSBkaXNwbGF5IG9mIHRoZSBkZWZhdWx0IHZhbHVlXG4gICAgICAgIGBjaG9pY2VzOiAke2FyZ3VtZW50LmFyZ0Nob2ljZXMubWFwKChjaG9pY2UpID0+IEpTT04uc3RyaW5naWZ5KGNob2ljZSkpLmpvaW4oJywgJyl9YCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhcmd1bWVudC5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgZXh0cmFJbmZvLnB1c2goXG4gICAgICAgIGBkZWZhdWx0OiAke2FyZ3VtZW50LmRlZmF1bHRWYWx1ZURlc2NyaXB0aW9uIHx8IEpTT04uc3RyaW5naWZ5KGFyZ3VtZW50LmRlZmF1bHRWYWx1ZSl9YCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChleHRyYUluZm8ubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZXh0cmFEZXNjcmlwdGlvbiA9IGAoJHtleHRyYUluZm8uam9pbignLCAnKX0pYDtcbiAgICAgIGlmIChhcmd1bWVudC5kZXNjcmlwdGlvbikge1xuICAgICAgICByZXR1cm4gYCR7YXJndW1lbnQuZGVzY3JpcHRpb259ICR7ZXh0cmFEZXNjcmlwdGlvbn1gO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGV4dHJhRGVzY3JpcHRpb247XG4gICAgfVxuICAgIHJldHVybiBhcmd1bWVudC5kZXNjcmlwdGlvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBGb3JtYXQgYSBsaXN0IG9mIGl0ZW1zLCBnaXZlbiBhIGhlYWRpbmcgYW5kIGFuIGFycmF5IG9mIGZvcm1hdHRlZCBpdGVtcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGhlYWRpbmdcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gaXRlbXNcbiAgICogQHBhcmFtIHtIZWxwfSBoZWxwZXJcbiAgICogQHJldHVybnMgc3RyaW5nW11cbiAgICovXG4gIGZvcm1hdEl0ZW1MaXN0KGhlYWRpbmcsIGl0ZW1zLCBoZWxwZXIpIHtcbiAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSByZXR1cm4gW107XG5cbiAgICByZXR1cm4gW2hlbHBlci5zdHlsZVRpdGxlKGhlYWRpbmcpLCAuLi5pdGVtcywgJyddO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyb3VwIGl0ZW1zIGJ5IHRoZWlyIGhlbHAgZ3JvdXAgaGVhZGluZy5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kW10gfCBPcHRpb25bXX0gdW5zb3J0ZWRJdGVtc1xuICAgKiBAcGFyYW0ge0NvbW1hbmRbXSB8IE9wdGlvbltdfSB2aXNpYmxlSXRlbXNcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZ2V0R3JvdXBcbiAgICogQHJldHVybnMge01hcDxzdHJpbmcsIENvbW1hbmRbXSB8IE9wdGlvbltdPn1cbiAgICovXG4gIGdyb3VwSXRlbXModW5zb3J0ZWRJdGVtcywgdmlzaWJsZUl0ZW1zLCBnZXRHcm91cCkge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBNYXAoKTtcbiAgICAvLyBBZGQgZ3JvdXBzIGluIG9yZGVyIG9mIGFwcGVhcmFuY2UgaW4gdW5zb3J0ZWRJdGVtcy5cbiAgICB1bnNvcnRlZEl0ZW1zLmZvckVhY2goKGl0ZW0pID0+IHtcbiAgICAgIGNvbnN0IGdyb3VwID0gZ2V0R3JvdXAoaXRlbSk7XG4gICAgICBpZiAoIXJlc3VsdC5oYXMoZ3JvdXApKSByZXN1bHQuc2V0KGdyb3VwLCBbXSk7XG4gICAgfSk7XG4gICAgLy8gQWRkIGl0ZW1zIGluIG9yZGVyIG9mIGFwcGVhcmFuY2UgaW4gdmlzaWJsZUl0ZW1zLlxuICAgIHZpc2libGVJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICBjb25zdCBncm91cCA9IGdldEdyb3VwKGl0ZW0pO1xuICAgICAgaWYgKCFyZXN1bHQuaGFzKGdyb3VwKSkge1xuICAgICAgICByZXN1bHQuc2V0KGdyb3VwLCBbXSk7XG4gICAgICB9XG4gICAgICByZXN1bHQuZ2V0KGdyb3VwKS5wdXNoKGl0ZW0pO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGUgdGhlIGJ1aWx0LWluIGhlbHAgdGV4dC5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHBhcmFtIHtIZWxwfSBoZWxwZXJcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG5cbiAgZm9ybWF0SGVscChjbWQsIGhlbHBlcikge1xuICAgIGNvbnN0IHRlcm1XaWR0aCA9IGhlbHBlci5wYWRXaWR0aChjbWQsIGhlbHBlcik7XG4gICAgY29uc3QgaGVscFdpZHRoID0gaGVscGVyLmhlbHBXaWR0aCA/PyA4MDsgLy8gaW4gY2FzZSBwcmVwYXJlQ29udGV4dCgpIHdhcyBub3QgY2FsbGVkXG5cbiAgICBmdW5jdGlvbiBjYWxsRm9ybWF0SXRlbSh0ZXJtLCBkZXNjcmlwdGlvbikge1xuICAgICAgcmV0dXJuIGhlbHBlci5mb3JtYXRJdGVtKHRlcm0sIHRlcm1XaWR0aCwgZGVzY3JpcHRpb24sIGhlbHBlcik7XG4gICAgfVxuXG4gICAgLy8gVXNhZ2VcbiAgICBsZXQgb3V0cHV0ID0gW1xuICAgICAgYCR7aGVscGVyLnN0eWxlVGl0bGUoJ1VzYWdlOicpfSAke2hlbHBlci5zdHlsZVVzYWdlKGhlbHBlci5jb21tYW5kVXNhZ2UoY21kKSl9YCxcbiAgICAgICcnLFxuICAgIF07XG5cbiAgICAvLyBEZXNjcmlwdGlvblxuICAgIGNvbnN0IGNvbW1hbmREZXNjcmlwdGlvbiA9IGhlbHBlci5jb21tYW5kRGVzY3JpcHRpb24oY21kKTtcbiAgICBpZiAoY29tbWFuZERlc2NyaXB0aW9uLmxlbmd0aCA+IDApIHtcbiAgICAgIG91dHB1dCA9IG91dHB1dC5jb25jYXQoW1xuICAgICAgICBoZWxwZXIuYm94V3JhcChcbiAgICAgICAgICBoZWxwZXIuc3R5bGVDb21tYW5kRGVzY3JpcHRpb24oY29tbWFuZERlc2NyaXB0aW9uKSxcbiAgICAgICAgICBoZWxwV2lkdGgsXG4gICAgICAgICksXG4gICAgICAgICcnLFxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgLy8gQXJndW1lbnRzXG4gICAgY29uc3QgYXJndW1lbnRMaXN0ID0gaGVscGVyLnZpc2libGVBcmd1bWVudHMoY21kKS5tYXAoKGFyZ3VtZW50KSA9PiB7XG4gICAgICByZXR1cm4gY2FsbEZvcm1hdEl0ZW0oXG4gICAgICAgIGhlbHBlci5zdHlsZUFyZ3VtZW50VGVybShoZWxwZXIuYXJndW1lbnRUZXJtKGFyZ3VtZW50KSksXG4gICAgICAgIGhlbHBlci5zdHlsZUFyZ3VtZW50RGVzY3JpcHRpb24oaGVscGVyLmFyZ3VtZW50RGVzY3JpcHRpb24oYXJndW1lbnQpKSxcbiAgICAgICk7XG4gICAgfSk7XG4gICAgb3V0cHV0ID0gb3V0cHV0LmNvbmNhdChcbiAgICAgIHRoaXMuZm9ybWF0SXRlbUxpc3QoJ0FyZ3VtZW50czonLCBhcmd1bWVudExpc3QsIGhlbHBlciksXG4gICAgKTtcblxuICAgIC8vIE9wdGlvbnNcbiAgICBjb25zdCBvcHRpb25Hcm91cHMgPSB0aGlzLmdyb3VwSXRlbXMoXG4gICAgICBjbWQub3B0aW9ucyxcbiAgICAgIGhlbHBlci52aXNpYmxlT3B0aW9ucyhjbWQpLFxuICAgICAgKG9wdGlvbikgPT4gb3B0aW9uLmhlbHBHcm91cEhlYWRpbmcgPz8gJ09wdGlvbnM6JyxcbiAgICApO1xuICAgIG9wdGlvbkdyb3Vwcy5mb3JFYWNoKChvcHRpb25zLCBncm91cCkgPT4ge1xuICAgICAgY29uc3Qgb3B0aW9uTGlzdCA9IG9wdGlvbnMubWFwKChvcHRpb24pID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbGxGb3JtYXRJdGVtKFxuICAgICAgICAgIGhlbHBlci5zdHlsZU9wdGlvblRlcm0oaGVscGVyLm9wdGlvblRlcm0ob3B0aW9uKSksXG4gICAgICAgICAgaGVscGVyLnN0eWxlT3B0aW9uRGVzY3JpcHRpb24oaGVscGVyLm9wdGlvbkRlc2NyaXB0aW9uKG9wdGlvbikpLFxuICAgICAgICApO1xuICAgICAgfSk7XG4gICAgICBvdXRwdXQgPSBvdXRwdXQuY29uY2F0KHRoaXMuZm9ybWF0SXRlbUxpc3QoZ3JvdXAsIG9wdGlvbkxpc3QsIGhlbHBlcikpO1xuICAgIH0pO1xuXG4gICAgaWYgKGhlbHBlci5zaG93R2xvYmFsT3B0aW9ucykge1xuICAgICAgY29uc3QgZ2xvYmFsT3B0aW9uTGlzdCA9IGhlbHBlclxuICAgICAgICAudmlzaWJsZUdsb2JhbE9wdGlvbnMoY21kKVxuICAgICAgICAubWFwKChvcHRpb24pID0+IHtcbiAgICAgICAgICByZXR1cm4gY2FsbEZvcm1hdEl0ZW0oXG4gICAgICAgICAgICBoZWxwZXIuc3R5bGVPcHRpb25UZXJtKGhlbHBlci5vcHRpb25UZXJtKG9wdGlvbikpLFxuICAgICAgICAgICAgaGVscGVyLnN0eWxlT3B0aW9uRGVzY3JpcHRpb24oaGVscGVyLm9wdGlvbkRlc2NyaXB0aW9uKG9wdGlvbikpLFxuICAgICAgICAgICk7XG4gICAgICAgIH0pO1xuICAgICAgb3V0cHV0ID0gb3V0cHV0LmNvbmNhdChcbiAgICAgICAgdGhpcy5mb3JtYXRJdGVtTGlzdCgnR2xvYmFsIE9wdGlvbnM6JywgZ2xvYmFsT3B0aW9uTGlzdCwgaGVscGVyKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQ29tbWFuZHNcbiAgICBjb25zdCBjb21tYW5kR3JvdXBzID0gdGhpcy5ncm91cEl0ZW1zKFxuICAgICAgY21kLmNvbW1hbmRzLFxuICAgICAgaGVscGVyLnZpc2libGVDb21tYW5kcyhjbWQpLFxuICAgICAgKHN1YikgPT4gc3ViLmhlbHBHcm91cCgpIHx8ICdDb21tYW5kczonLFxuICAgICk7XG4gICAgY29tbWFuZEdyb3Vwcy5mb3JFYWNoKChjb21tYW5kcywgZ3JvdXApID0+IHtcbiAgICAgIGNvbnN0IGNvbW1hbmRMaXN0ID0gY29tbWFuZHMubWFwKChzdWIpID0+IHtcbiAgICAgICAgcmV0dXJuIGNhbGxGb3JtYXRJdGVtKFxuICAgICAgICAgIGhlbHBlci5zdHlsZVN1YmNvbW1hbmRUZXJtKGhlbHBlci5zdWJjb21tYW5kVGVybShzdWIpKSxcbiAgICAgICAgICBoZWxwZXIuc3R5bGVTdWJjb21tYW5kRGVzY3JpcHRpb24oaGVscGVyLnN1YmNvbW1hbmREZXNjcmlwdGlvbihzdWIpKSxcbiAgICAgICAgKTtcbiAgICAgIH0pO1xuICAgICAgb3V0cHV0ID0gb3V0cHV0LmNvbmNhdCh0aGlzLmZvcm1hdEl0ZW1MaXN0KGdyb3VwLCBjb21tYW5kTGlzdCwgaGVscGVyKSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gb3V0cHV0LmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBkaXNwbGF5IHdpZHRoIG9mIHN0cmluZywgaWdub3JpbmcgQU5TSSBlc2NhcGUgc2VxdWVuY2VzLiBVc2VkIGluIHBhZGRpbmcgYW5kIHdyYXBwaW5nIGNhbGN1bGF0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgKi9cbiAgZGlzcGxheVdpZHRoKHN0cikge1xuICAgIHJldHVybiBzdHJpcENvbG9yKHN0cikubGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIFN0eWxlIHRoZSB0aXRsZSBmb3IgZGlzcGxheWluZyBpbiB0aGUgaGVscC4gQ2FsbGVkIHdpdGggJ1VzYWdlOicsICdPcHRpb25zOicsIGV0Yy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgKi9cbiAgc3R5bGVUaXRsZShzdHIpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG5cbiAgc3R5bGVVc2FnZShzdHIpIHtcbiAgICAvLyBVc2FnZSBoYXMgbG90cyBvZiBwYXJ0cyB0aGUgdXNlciBtaWdodCBsaWtlIHRvIGNvbG9yIHNlcGFyYXRlbHkhIEFzc3VtZSBkZWZhdWx0IHVzYWdlIHN0cmluZyB3aGljaCBpcyBmb3JtZWQgbGlrZTpcbiAgICAvLyAgICBjb21tYW5kIHN1YmNvbW1hbmQgW29wdGlvbnNdIFtjb21tYW5kXSA8Zm9vPiBbYmFyXVxuICAgIHJldHVybiBzdHJcbiAgICAgIC5zcGxpdCgnICcpXG4gICAgICAubWFwKCh3b3JkKSA9PiB7XG4gICAgICAgIGlmICh3b3JkID09PSAnW29wdGlvbnNdJykgcmV0dXJuIHRoaXMuc3R5bGVPcHRpb25UZXh0KHdvcmQpO1xuICAgICAgICBpZiAod29yZCA9PT0gJ1tjb21tYW5kXScpIHJldHVybiB0aGlzLnN0eWxlU3ViY29tbWFuZFRleHQod29yZCk7XG4gICAgICAgIGlmICh3b3JkWzBdID09PSAnWycgfHwgd29yZFswXSA9PT0gJzwnKVxuICAgICAgICAgIHJldHVybiB0aGlzLnN0eWxlQXJndW1lbnRUZXh0KHdvcmQpO1xuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZUNvbW1hbmRUZXh0KHdvcmQpOyAvLyBSZXN0cmljdCB0byBpbml0aWFsIHdvcmRzP1xuICAgICAgfSlcbiAgICAgIC5qb2luKCcgJyk7XG4gIH1cbiAgc3R5bGVDb21tYW5kRGVzY3JpcHRpb24oc3RyKSB7XG4gICAgcmV0dXJuIHRoaXMuc3R5bGVEZXNjcmlwdGlvblRleHQoc3RyKTtcbiAgfVxuICBzdHlsZU9wdGlvbkRlc2NyaXB0aW9uKHN0cikge1xuICAgIHJldHVybiB0aGlzLnN0eWxlRGVzY3JpcHRpb25UZXh0KHN0cik7XG4gIH1cbiAgc3R5bGVTdWJjb21tYW5kRGVzY3JpcHRpb24oc3RyKSB7XG4gICAgcmV0dXJuIHRoaXMuc3R5bGVEZXNjcmlwdGlvblRleHQoc3RyKTtcbiAgfVxuICBzdHlsZUFyZ3VtZW50RGVzY3JpcHRpb24oc3RyKSB7XG4gICAgcmV0dXJuIHRoaXMuc3R5bGVEZXNjcmlwdGlvblRleHQoc3RyKTtcbiAgfVxuICBzdHlsZURlc2NyaXB0aW9uVGV4dChzdHIpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIHN0eWxlT3B0aW9uVGVybShzdHIpIHtcbiAgICByZXR1cm4gdGhpcy5zdHlsZU9wdGlvblRleHQoc3RyKTtcbiAgfVxuICBzdHlsZVN1YmNvbW1hbmRUZXJtKHN0cikge1xuICAgIC8vIFRoaXMgaXMgdmVyeSBsaWtlIHVzYWdlIHdpdGggbG90cyBvZiBwYXJ0cyEgQXNzdW1lIGRlZmF1bHQgc3RyaW5nIHdoaWNoIGlzIGZvcm1lZCBsaWtlOlxuICAgIC8vICAgIHN1YmNvbW1hbmQgW29wdGlvbnNdIDxmb28+IFtiYXJdXG4gICAgcmV0dXJuIHN0clxuICAgICAgLnNwbGl0KCcgJylcbiAgICAgIC5tYXAoKHdvcmQpID0+IHtcbiAgICAgICAgaWYgKHdvcmQgPT09ICdbb3B0aW9uc10nKSByZXR1cm4gdGhpcy5zdHlsZU9wdGlvblRleHQod29yZCk7XG4gICAgICAgIGlmICh3b3JkWzBdID09PSAnWycgfHwgd29yZFswXSA9PT0gJzwnKVxuICAgICAgICAgIHJldHVybiB0aGlzLnN0eWxlQXJndW1lbnRUZXh0KHdvcmQpO1xuICAgICAgICByZXR1cm4gdGhpcy5zdHlsZVN1YmNvbW1hbmRUZXh0KHdvcmQpOyAvLyBSZXN0cmljdCB0byBpbml0aWFsIHdvcmRzP1xuICAgICAgfSlcbiAgICAgIC5qb2luKCcgJyk7XG4gIH1cbiAgc3R5bGVBcmd1bWVudFRlcm0oc3RyKSB7XG4gICAgcmV0dXJuIHRoaXMuc3R5bGVBcmd1bWVudFRleHQoc3RyKTtcbiAgfVxuICBzdHlsZU9wdGlvblRleHQoc3RyKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuICBzdHlsZUFyZ3VtZW50VGV4dChzdHIpIHtcbiAgICByZXR1cm4gc3RyO1xuICB9XG4gIHN0eWxlU3ViY29tbWFuZFRleHQoc3RyKSB7XG4gICAgcmV0dXJuIHN0cjtcbiAgfVxuICBzdHlsZUNvbW1hbmRUZXh0KHN0cikge1xuICAgIHJldHVybiBzdHI7XG4gIH1cblxuICAvKipcbiAgICogQ2FsY3VsYXRlIHRoZSBwYWQgd2lkdGggZnJvbSB0aGUgbWF4aW11bSB0ZXJtIGxlbmd0aC5cbiAgICpcbiAgICogQHBhcmFtIHtDb21tYW5kfSBjbWRcbiAgICogQHBhcmFtIHtIZWxwfSBoZWxwZXJcbiAgICogQHJldHVybnMge251bWJlcn1cbiAgICovXG5cbiAgcGFkV2lkdGgoY21kLCBoZWxwZXIpIHtcbiAgICByZXR1cm4gTWF0aC5tYXgoXG4gICAgICBoZWxwZXIubG9uZ2VzdE9wdGlvblRlcm1MZW5ndGgoY21kLCBoZWxwZXIpLFxuICAgICAgaGVscGVyLmxvbmdlc3RHbG9iYWxPcHRpb25UZXJtTGVuZ3RoKGNtZCwgaGVscGVyKSxcbiAgICAgIGhlbHBlci5sb25nZXN0U3ViY29tbWFuZFRlcm1MZW5ndGgoY21kLCBoZWxwZXIpLFxuICAgICAgaGVscGVyLmxvbmdlc3RBcmd1bWVudFRlcm1MZW5ndGgoY21kLCBoZWxwZXIpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogRGV0ZWN0IG1hbnVhbGx5IHdyYXBwZWQgYW5kIGluZGVudGVkIHN0cmluZ3MgYnkgY2hlY2tpbmcgZm9yIGxpbmUgYnJlYWsgZm9sbG93ZWQgYnkgd2hpdGVzcGFjZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHN0clxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn1cbiAgICovXG4gIHByZWZvcm1hdHRlZChzdHIpIHtcbiAgICByZXR1cm4gL1xcblteXFxTXFxyXFxuXS8udGVzdChzdHIpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCB0aGUgXCJpdGVtXCIsIHdoaWNoIGNvbnNpc3RzIG9mIGEgdGVybSBhbmQgZGVzY3JpcHRpb24uIFBhZCB0aGUgdGVybSBhbmQgd3JhcCB0aGUgZGVzY3JpcHRpb24sIGluZGVudGluZyB0aGUgZm9sbG93aW5nIGxpbmVzLlxuICAgKlxuICAgKiBTbyBcIlRUVFwiLCA1LCBcIkRERCBEREREIEREIERERFwiIG1pZ2h0IGJlIGZvcm1hdHRlZCBmb3IgdGhpcy5oZWxwV2lkdGg9MTcgbGlrZSBzbzpcbiAgICogICBUVFQgIERERCBEREREXG4gICAqICAgICAgICBERCBERERcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IHRlcm1cbiAgICogQHBhcmFtIHtudW1iZXJ9IHRlcm1XaWR0aFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZGVzY3JpcHRpb25cbiAgICogQHBhcmFtIHtIZWxwfSBoZWxwZXJcbiAgICogQHJldHVybnMge3N0cmluZ31cbiAgICovXG4gIGZvcm1hdEl0ZW0odGVybSwgdGVybVdpZHRoLCBkZXNjcmlwdGlvbiwgaGVscGVyKSB7XG4gICAgY29uc3QgaXRlbUluZGVudCA9IDI7XG4gICAgY29uc3QgaXRlbUluZGVudFN0ciA9ICcgJy5yZXBlYXQoaXRlbUluZGVudCk7XG4gICAgaWYgKCFkZXNjcmlwdGlvbikgcmV0dXJuIGl0ZW1JbmRlbnRTdHIgKyB0ZXJtO1xuXG4gICAgLy8gUGFkIHRoZSB0ZXJtIG91dCB0byBhIGNvbnNpc3RlbnQgd2lkdGgsIHNvIGRlc2NyaXB0aW9ucyBhcmUgYWxpZ25lZC5cbiAgICBjb25zdCBwYWRkZWRUZXJtID0gdGVybS5wYWRFbmQoXG4gICAgICB0ZXJtV2lkdGggKyB0ZXJtLmxlbmd0aCAtIGhlbHBlci5kaXNwbGF5V2lkdGgodGVybSksXG4gICAgKTtcblxuICAgIC8vIEZvcm1hdCB0aGUgZGVzY3JpcHRpb24uXG4gICAgY29uc3Qgc3BhY2VyV2lkdGggPSAyOyAvLyBiZXR3ZWVuIHRlcm0gYW5kIGRlc2NyaXB0aW9uXG4gICAgY29uc3QgaGVscFdpZHRoID0gdGhpcy5oZWxwV2lkdGggPz8gODA7IC8vIGluIGNhc2UgcHJlcGFyZUNvbnRleHQoKSB3YXMgbm90IGNhbGxlZFxuICAgIGNvbnN0IHJlbWFpbmluZ1dpZHRoID0gaGVscFdpZHRoIC0gdGVybVdpZHRoIC0gc3BhY2VyV2lkdGggLSBpdGVtSW5kZW50O1xuICAgIGxldCBmb3JtYXR0ZWREZXNjcmlwdGlvbjtcbiAgICBpZiAoXG4gICAgICByZW1haW5pbmdXaWR0aCA8IHRoaXMubWluV2lkdGhUb1dyYXAgfHxcbiAgICAgIGhlbHBlci5wcmVmb3JtYXR0ZWQoZGVzY3JpcHRpb24pXG4gICAgKSB7XG4gICAgICBmb3JtYXR0ZWREZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCB3cmFwcGVkRGVzY3JpcHRpb24gPSBoZWxwZXIuYm94V3JhcChkZXNjcmlwdGlvbiwgcmVtYWluaW5nV2lkdGgpO1xuICAgICAgZm9ybWF0dGVkRGVzY3JpcHRpb24gPSB3cmFwcGVkRGVzY3JpcHRpb24ucmVwbGFjZShcbiAgICAgICAgL1xcbi9nLFxuICAgICAgICAnXFxuJyArICcgJy5yZXBlYXQodGVybVdpZHRoICsgc3BhY2VyV2lkdGgpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBDb25zdHJ1Y3QgYW5kIG92ZXJhbGwgaW5kZW50LlxuICAgIHJldHVybiAoXG4gICAgICBpdGVtSW5kZW50U3RyICtcbiAgICAgIHBhZGRlZFRlcm0gK1xuICAgICAgJyAnLnJlcGVhdChzcGFjZXJXaWR0aCkgK1xuICAgICAgZm9ybWF0dGVkRGVzY3JpcHRpb24ucmVwbGFjZSgvXFxuL2csIGBcXG4ke2l0ZW1JbmRlbnRTdHJ9YClcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFdyYXAgYSBzdHJpbmcgYXQgd2hpdGVzcGFjZSwgcHJlc2VydmluZyBleGlzdGluZyBsaW5lIGJyZWFrcy5cbiAgICogV3JhcHBpbmcgaXMgc2tpcHBlZCBpZiB0aGUgd2lkdGggaXMgbGVzcyB0aGFuIGBtaW5XaWR0aFRvV3JhcGAuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAgICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoXG4gICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAqL1xuICBib3hXcmFwKHN0ciwgd2lkdGgpIHtcbiAgICBpZiAod2lkdGggPCB0aGlzLm1pbldpZHRoVG9XcmFwKSByZXR1cm4gc3RyO1xuXG4gICAgY29uc3QgcmF3TGluZXMgPSBzdHIuc3BsaXQoL1xcclxcbnxcXG4vKTtcbiAgICAvLyBzcGxpdCB1cCB0ZXh0IGJ5IHdoaXRlc3BhY2VcbiAgICBjb25zdCBjaHVua1BhdHRlcm4gPSAvW1xcc10qW15cXHNdKy9nO1xuICAgIGNvbnN0IHdyYXBwZWRMaW5lcyA9IFtdO1xuICAgIHJhd0xpbmVzLmZvckVhY2goKGxpbmUpID0+IHtcbiAgICAgIGNvbnN0IGNodW5rcyA9IGxpbmUubWF0Y2goY2h1bmtQYXR0ZXJuKTtcbiAgICAgIGlmIChjaHVua3MgPT09IG51bGwpIHtcbiAgICAgICAgd3JhcHBlZExpbmVzLnB1c2goJycpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGxldCBzdW1DaHVua3MgPSBbY2h1bmtzLnNoaWZ0KCldO1xuICAgICAgbGV0IHN1bVdpZHRoID0gdGhpcy5kaXNwbGF5V2lkdGgoc3VtQ2h1bmtzWzBdKTtcbiAgICAgIGNodW5rcy5mb3JFYWNoKChjaHVuaykgPT4ge1xuICAgICAgICBjb25zdCB2aXNpYmxlV2lkdGggPSB0aGlzLmRpc3BsYXlXaWR0aChjaHVuayk7XG4gICAgICAgIC8vIEFjY3VtdWxhdGUgY2h1bmtzIHdoaWxlIHRoZXkgZml0IGludG8gd2lkdGguXG4gICAgICAgIGlmIChzdW1XaWR0aCArIHZpc2libGVXaWR0aCA8PSB3aWR0aCkge1xuICAgICAgICAgIHN1bUNodW5rcy5wdXNoKGNodW5rKTtcbiAgICAgICAgICBzdW1XaWR0aCArPSB2aXNpYmxlV2lkdGg7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHdyYXBwZWRMaW5lcy5wdXNoKHN1bUNodW5rcy5qb2luKCcnKSk7XG5cbiAgICAgICAgY29uc3QgbmV4dENodW5rID0gY2h1bmsudHJpbVN0YXJ0KCk7IC8vIHRyaW0gc3BhY2UgYXQgbGluZSBicmVha1xuICAgICAgICBzdW1DaHVua3MgPSBbbmV4dENodW5rXTtcbiAgICAgICAgc3VtV2lkdGggPSB0aGlzLmRpc3BsYXlXaWR0aChuZXh0Q2h1bmspO1xuICAgICAgfSk7XG4gICAgICB3cmFwcGVkTGluZXMucHVzaChzdW1DaHVua3Muam9pbignJykpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHdyYXBwZWRMaW5lcy5qb2luKCdcXG4nKTtcbiAgfVxufVxuXG4vKipcbiAqIFN0cmlwIHN0eWxlIEFOU0kgZXNjYXBlIHNlcXVlbmNlcyBmcm9tIHRoZSBzdHJpbmcuIEluIHBhcnRpY3VsYXIsIFNHUiAoU2VsZWN0IEdyYXBoaWMgUmVuZGl0aW9uKSBjb2Rlcy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICogQHBhY2thZ2VcbiAqL1xuXG5mdW5jdGlvbiBzdHJpcENvbG9yKHN0cikge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleFxuICBjb25zdCBzZ3JQYXR0ZXJuID0gL1xceDFiXFxbXFxkKig7XFxkKikqbS9nO1xuICByZXR1cm4gc3RyLnJlcGxhY2Uoc2dyUGF0dGVybiwgJycpO1xufVxuXG5leHBvcnRzLkhlbHAgPSBIZWxwO1xuZXhwb3J0cy5zdHJpcENvbG9yID0gc3RyaXBDb2xvcjtcbiIsICJjb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuL2Vycm9yLmpzJyk7XG5cbmNsYXNzIE9wdGlvbiB7XG4gIC8qKlxuICAgKiBJbml0aWFsaXplIGEgbmV3IGBPcHRpb25gIHdpdGggdGhlIGdpdmVuIGBmbGFnc2AgYW5kIGBkZXNjcmlwdGlvbmAuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmbGFnc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXVxuICAgKi9cblxuICBjb25zdHJ1Y3RvcihmbGFncywgZGVzY3JpcHRpb24pIHtcbiAgICB0aGlzLmZsYWdzID0gZmxhZ3M7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IGRlc2NyaXB0aW9uIHx8ICcnO1xuXG4gICAgdGhpcy5yZXF1aXJlZCA9IGZsYWdzLmluY2x1ZGVzKCc8Jyk7IC8vIEEgdmFsdWUgbXVzdCBiZSBzdXBwbGllZCB3aGVuIHRoZSBvcHRpb24gaXMgc3BlY2lmaWVkLlxuICAgIHRoaXMub3B0aW9uYWwgPSBmbGFncy5pbmNsdWRlcygnWycpOyAvLyBBIHZhbHVlIGlzIG9wdGlvbmFsIHdoZW4gdGhlIG9wdGlvbiBpcyBzcGVjaWZpZWQuXG4gICAgLy8gdmFyaWFkaWMgdGVzdCBpZ25vcmVzIDx2YWx1ZSwuLi4+IGV0IGFsIHdoaWNoIG1pZ2h0IGJlIHVzZWQgdG8gZGVzY3JpYmUgY3VzdG9tIHNwbGl0dGluZyBvZiBzaW5nbGUgYXJndW1lbnRcbiAgICB0aGlzLnZhcmlhZGljID0gL1xcd1xcLlxcLlxcLls+XFxdXSQvLnRlc3QoZmxhZ3MpOyAvLyBUaGUgb3B0aW9uIGNhbiB0YWtlIG11bHRpcGxlIHZhbHVlcy5cbiAgICB0aGlzLm1hbmRhdG9yeSA9IGZhbHNlOyAvLyBUaGUgb3B0aW9uIG11c3QgaGF2ZSBhIHZhbHVlIGFmdGVyIHBhcnNpbmcsIHdoaWNoIHVzdWFsbHkgbWVhbnMgaXQgbXVzdCBiZSBzcGVjaWZpZWQgb24gY29tbWFuZCBsaW5lLlxuICAgIGNvbnN0IG9wdGlvbkZsYWdzID0gc3BsaXRPcHRpb25GbGFncyhmbGFncyk7XG4gICAgdGhpcy5zaG9ydCA9IG9wdGlvbkZsYWdzLnNob3J0RmxhZzsgLy8gTWF5IGJlIGEgc2hvcnQgZmxhZywgdW5kZWZpbmVkLCBvciBldmVuIGEgbG9uZyBmbGFnIChpZiBvcHRpb24gaGFzIHR3byBsb25nIGZsYWdzKS5cbiAgICB0aGlzLmxvbmcgPSBvcHRpb25GbGFncy5sb25nRmxhZztcbiAgICB0aGlzLm5lZ2F0ZSA9IGZhbHNlO1xuICAgIGlmICh0aGlzLmxvbmcpIHtcbiAgICAgIHRoaXMubmVnYXRlID0gdGhpcy5sb25nLnN0YXJ0c1dpdGgoJy0tbm8tJyk7XG4gICAgfVxuICAgIHRoaXMuZGVmYXVsdFZhbHVlID0gdW5kZWZpbmVkO1xuICAgIHRoaXMuZGVmYXVsdFZhbHVlRGVzY3JpcHRpb24gPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5wcmVzZXRBcmcgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5lbnZWYXIgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5wYXJzZUFyZyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmhpZGRlbiA9IGZhbHNlO1xuICAgIHRoaXMuYXJnQ2hvaWNlcyA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmNvbmZsaWN0c1dpdGggPSBbXTtcbiAgICB0aGlzLmltcGxpZWQgPSB1bmRlZmluZWQ7XG4gICAgdGhpcy5oZWxwR3JvdXBIZWFkaW5nID0gdW5kZWZpbmVkOyAvLyBzb2Z0IGluaXRpYWxpc2VkIHdoZW4gb3B0aW9uIGFkZGVkIHRvIGNvbW1hbmRcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdGhlIGRlZmF1bHQgdmFsdWUsIGFuZCBvcHRpb25hbGx5IHN1cHBseSB0aGUgZGVzY3JpcHRpb24gdG8gYmUgZGlzcGxheWVkIGluIHRoZSBoZWxwLlxuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dXG4gICAqIEByZXR1cm4ge09wdGlvbn1cbiAgICovXG5cbiAgZGVmYXVsdCh2YWx1ZSwgZGVzY3JpcHRpb24pIHtcbiAgICB0aGlzLmRlZmF1bHRWYWx1ZSA9IHZhbHVlO1xuICAgIHRoaXMuZGVmYXVsdFZhbHVlRGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBQcmVzZXQgdG8gdXNlIHdoZW4gb3B0aW9uIHVzZWQgd2l0aG91dCBvcHRpb24tYXJndW1lbnQsIGVzcGVjaWFsbHkgb3B0aW9uYWwgYnV0IGFsc28gYm9vbGVhbiBhbmQgbmVnYXRlZC5cbiAgICogVGhlIGN1c3RvbSBwcm9jZXNzaW5nIChwYXJzZUFyZykgaXMgY2FsbGVkLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBuZXcgT3B0aW9uKCctLWNvbG9yJykuZGVmYXVsdCgnR1JFWVNDQUxFJykucHJlc2V0KCdSR0InKTtcbiAgICogbmV3IE9wdGlvbignLS1kb25hdGUgW2Ftb3VudF0nKS5wcmVzZXQoJzIwJykuYXJnUGFyc2VyKHBhcnNlRmxvYXQpO1xuICAgKlxuICAgKiBAcGFyYW0geyp9IGFyZ1xuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqL1xuXG4gIHByZXNldChhcmcpIHtcbiAgICB0aGlzLnByZXNldEFyZyA9IGFyZztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgb3B0aW9uIG5hbWUocykgdGhhdCBjb25mbGljdCB3aXRoIHRoaXMgb3B0aW9uLlxuICAgKiBBbiBlcnJvciB3aWxsIGJlIGRpc3BsYXllZCBpZiBjb25mbGljdGluZyBvcHRpb25zIGFyZSBmb3VuZCBkdXJpbmcgcGFyc2luZy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogbmV3IE9wdGlvbignLS1yZ2InKS5jb25mbGljdHMoJ2NteWsnKTtcbiAgICogbmV3IE9wdGlvbignLS1qcycpLmNvbmZsaWN0cyhbJ3RzJywgJ2pzeCddKTtcbiAgICpcbiAgICogQHBhcmFtIHsoc3RyaW5nIHwgc3RyaW5nW10pfSBuYW1lc1xuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqL1xuXG4gIGNvbmZsaWN0cyhuYW1lcykge1xuICAgIHRoaXMuY29uZmxpY3RzV2l0aCA9IHRoaXMuY29uZmxpY3RzV2l0aC5jb25jYXQobmFtZXMpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNwZWNpZnkgaW1wbGllZCBvcHRpb24gdmFsdWVzIGZvciB3aGVuIHRoaXMgb3B0aW9uIGlzIHNldCBhbmQgdGhlIGltcGxpZWQgb3B0aW9ucyBhcmUgbm90LlxuICAgKlxuICAgKiBUaGUgY3VzdG9tIHByb2Nlc3NpbmcgKHBhcnNlQXJnKSBpcyBub3QgY2FsbGVkIG9uIHRoZSBpbXBsaWVkIHZhbHVlcy5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcHJvZ3JhbVxuICAgKiAgIC5hZGRPcHRpb24obmV3IE9wdGlvbignLS1sb2cnLCAnd3JpdGUgbG9nZ2luZyBpbmZvcm1hdGlvbiB0byBmaWxlJykpXG4gICAqICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKCctLXRyYWNlJywgJ2xvZyBleHRyYSBkZXRhaWxzJykuaW1wbGllcyh7IGxvZzogJ3RyYWNlLnR4dCcgfSkpO1xuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gaW1wbGllZE9wdGlvblZhbHVlc1xuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqL1xuICBpbXBsaWVzKGltcGxpZWRPcHRpb25WYWx1ZXMpIHtcbiAgICBsZXQgbmV3SW1wbGllZCA9IGltcGxpZWRPcHRpb25WYWx1ZXM7XG4gICAgaWYgKHR5cGVvZiBpbXBsaWVkT3B0aW9uVmFsdWVzID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gc3RyaW5nIGlzIG5vdCBkb2N1bWVudGVkLCBidXQgZWFzeSBtaXN0YWtlIGFuZCB3ZSBjYW4gZG8gd2hhdCB1c2VyIHByb2JhYmx5IGludGVuZGVkLlxuICAgICAgbmV3SW1wbGllZCA9IHsgW2ltcGxpZWRPcHRpb25WYWx1ZXNdOiB0cnVlIH07XG4gICAgfVxuICAgIHRoaXMuaW1wbGllZCA9IE9iamVjdC5hc3NpZ24odGhpcy5pbXBsaWVkIHx8IHt9LCBuZXdJbXBsaWVkKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gY2hlY2sgZm9yIG9wdGlvbiB2YWx1ZS5cbiAgICpcbiAgICogQW4gZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgb25seSB1c2VkIGlmIHdoZW4gcHJvY2Vzc2VkIHRoZSBjdXJyZW50IG9wdGlvbiB2YWx1ZSBpc1xuICAgKiB1bmRlZmluZWQsIG9yIHRoZSBzb3VyY2Ugb2YgdGhlIGN1cnJlbnQgdmFsdWUgaXMgJ2RlZmF1bHQnIG9yICdjb25maWcnIG9yICdlbnYnLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqL1xuXG4gIGVudihuYW1lKSB7XG4gICAgdGhpcy5lbnZWYXIgPSBuYW1lO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgY3VzdG9tIGhhbmRsZXIgZm9yIHByb2Nlc3NpbmcgQ0xJIG9wdGlvbiBhcmd1bWVudHMgaW50byBvcHRpb24gdmFsdWVzLlxuICAgKlxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbZm5dXG4gICAqIEByZXR1cm4ge09wdGlvbn1cbiAgICovXG5cbiAgYXJnUGFyc2VyKGZuKSB7XG4gICAgdGhpcy5wYXJzZUFyZyA9IGZuO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIG9wdGlvbiBpcyBtYW5kYXRvcnkgYW5kIG11c3QgaGF2ZSBhIHZhbHVlIGFmdGVyIHBhcnNpbmcuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW21hbmRhdG9yeT10cnVlXVxuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqL1xuXG4gIG1ha2VPcHRpb25NYW5kYXRvcnkobWFuZGF0b3J5ID0gdHJ1ZSkge1xuICAgIHRoaXMubWFuZGF0b3J5ID0gISFtYW5kYXRvcnk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogSGlkZSBvcHRpb24gaW4gaGVscC5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbaGlkZT10cnVlXVxuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqL1xuXG4gIGhpZGVIZWxwKGhpZGUgPSB0cnVlKSB7XG4gICAgdGhpcy5oaWRkZW4gPSAhIWhpZGU7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQHBhY2thZ2VcbiAgICovXG5cbiAgX2NvbGxlY3RWYWx1ZSh2YWx1ZSwgcHJldmlvdXMpIHtcbiAgICBpZiAocHJldmlvdXMgPT09IHRoaXMuZGVmYXVsdFZhbHVlIHx8ICFBcnJheS5pc0FycmF5KHByZXZpb3VzKSkge1xuICAgICAgcmV0dXJuIFt2YWx1ZV07XG4gICAgfVxuXG4gICAgcHJldmlvdXMucHVzaCh2YWx1ZSk7XG4gICAgcmV0dXJuIHByZXZpb3VzO1xuICB9XG5cbiAgLyoqXG4gICAqIE9ubHkgYWxsb3cgb3B0aW9uIHZhbHVlIHRvIGJlIG9uZSBvZiBjaG9pY2VzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSB2YWx1ZXNcbiAgICogQHJldHVybiB7T3B0aW9ufVxuICAgKi9cblxuICBjaG9pY2VzKHZhbHVlcykge1xuICAgIHRoaXMuYXJnQ2hvaWNlcyA9IHZhbHVlcy5zbGljZSgpO1xuICAgIHRoaXMucGFyc2VBcmcgPSAoYXJnLCBwcmV2aW91cykgPT4ge1xuICAgICAgaWYgKCF0aGlzLmFyZ0Nob2ljZXMuaW5jbHVkZXMoYXJnKSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoXG4gICAgICAgICAgYEFsbG93ZWQgY2hvaWNlcyBhcmUgJHt0aGlzLmFyZ0Nob2ljZXMuam9pbignLCAnKX0uYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGlmICh0aGlzLnZhcmlhZGljKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb2xsZWN0VmFsdWUoYXJnLCBwcmV2aW91cyk7XG4gICAgICB9XG4gICAgICByZXR1cm4gYXJnO1xuICAgIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIG9wdGlvbiBuYW1lLlxuICAgKlxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG4gIG5hbWUoKSB7XG4gICAgaWYgKHRoaXMubG9uZykge1xuICAgICAgcmV0dXJuIHRoaXMubG9uZy5yZXBsYWNlKC9eLS0vLCAnJyk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnNob3J0LnJlcGxhY2UoL14tLywgJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiBvcHRpb24gbmFtZSwgaW4gYSBjYW1lbGNhc2UgZm9ybWF0IHRoYXQgY2FuIGJlIHVzZWRcbiAgICogYXMgYW4gb2JqZWN0IGF0dHJpYnV0ZSBrZXkuXG4gICAqXG4gICAqIEByZXR1cm4ge3N0cmluZ31cbiAgICovXG5cbiAgYXR0cmlidXRlTmFtZSgpIHtcbiAgICBpZiAodGhpcy5uZWdhdGUpIHtcbiAgICAgIHJldHVybiBjYW1lbGNhc2UodGhpcy5uYW1lKCkucmVwbGFjZSgvXm5vLS8sICcnKSk7XG4gICAgfVxuICAgIHJldHVybiBjYW1lbGNhc2UodGhpcy5uYW1lKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgaGVscCBncm91cCBoZWFkaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gaGVhZGluZ1xuICAgKiBAcmV0dXJuIHtPcHRpb259XG4gICAqL1xuICBoZWxwR3JvdXAoaGVhZGluZykge1xuICAgIHRoaXMuaGVscEdyb3VwSGVhZGluZyA9IGhlYWRpbmc7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2sgaWYgYGFyZ2AgbWF0Y2hlcyB0aGUgc2hvcnQgb3IgbG9uZyBmbGFnLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJnXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XG4gICAqIEBwYWNrYWdlXG4gICAqL1xuXG4gIGlzKGFyZykge1xuICAgIHJldHVybiB0aGlzLnNob3J0ID09PSBhcmcgfHwgdGhpcy5sb25nID09PSBhcmc7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgYSBib29sZWFuIG9wdGlvbi5cbiAgICpcbiAgICogT3B0aW9ucyBhcmUgb25lIG9mIGJvb2xlYW4sIG5lZ2F0ZWQsIHJlcXVpcmVkIGFyZ3VtZW50LCBvciBvcHRpb25hbCBhcmd1bWVudC5cbiAgICpcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cbiAgICogQHBhY2thZ2VcbiAgICovXG5cbiAgaXNCb29sZWFuKCkge1xuICAgIHJldHVybiAhdGhpcy5yZXF1aXJlZCAmJiAhdGhpcy5vcHRpb25hbCAmJiAhdGhpcy5uZWdhdGU7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGlzIGNsYXNzIGlzIHRvIG1ha2UgaXQgZWFzaWVyIHRvIHdvcmsgd2l0aCBkdWFsIG9wdGlvbnMsIHdpdGhvdXQgY2hhbmdpbmcgdGhlIGV4aXN0aW5nXG4gKiBpbXBsZW1lbnRhdGlvbi4gV2Ugc3VwcG9ydCBzZXBhcmF0ZSBkdWFsIG9wdGlvbnMgZm9yIHNlcGFyYXRlIHBvc2l0aXZlIGFuZCBuZWdhdGl2ZSBvcHRpb25zLFxuICogbGlrZSBgLS1idWlsZGAgYW5kIGAtLW5vLWJ1aWxkYCwgd2hpY2ggc2hhcmUgYSBzaW5nbGUgb3B0aW9uIHZhbHVlLiBUaGlzIHdvcmtzIG5pY2VseSBmb3Igc29tZVxuICogdXNlIGNhc2VzLCBidXQgaXMgdHJpY2t5IGZvciBvdGhlcnMgd2hlcmUgd2Ugd2FudCBzZXBhcmF0ZSBiZWhhdmlvdXJzIGRlc3BpdGVcbiAqIHRoZSBzaW5nbGUgc2hhcmVkIG9wdGlvbiB2YWx1ZS5cbiAqL1xuY2xhc3MgRHVhbE9wdGlvbnMge1xuICAvKipcbiAgICogQHBhcmFtIHtPcHRpb25bXX0gb3B0aW9uc1xuICAgKi9cbiAgY29uc3RydWN0b3Iob3B0aW9ucykge1xuICAgIHRoaXMucG9zaXRpdmVPcHRpb25zID0gbmV3IE1hcCgpO1xuICAgIHRoaXMubmVnYXRpdmVPcHRpb25zID0gbmV3IE1hcCgpO1xuICAgIHRoaXMuZHVhbE9wdGlvbnMgPSBuZXcgU2V0KCk7XG4gICAgb3B0aW9ucy5mb3JFYWNoKChvcHRpb24pID0+IHtcbiAgICAgIGlmIChvcHRpb24ubmVnYXRlKSB7XG4gICAgICAgIHRoaXMubmVnYXRpdmVPcHRpb25zLnNldChvcHRpb24uYXR0cmlidXRlTmFtZSgpLCBvcHRpb24pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wb3NpdGl2ZU9wdGlvbnMuc2V0KG9wdGlvbi5hdHRyaWJ1dGVOYW1lKCksIG9wdGlvbik7XG4gICAgICB9XG4gICAgfSk7XG4gICAgdGhpcy5uZWdhdGl2ZU9wdGlvbnMuZm9yRWFjaCgodmFsdWUsIGtleSkgPT4ge1xuICAgICAgaWYgKHRoaXMucG9zaXRpdmVPcHRpb25zLmhhcyhrZXkpKSB7XG4gICAgICAgIHRoaXMuZHVhbE9wdGlvbnMuYWRkKGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRGlkIHRoZSB2YWx1ZSBjb21lIGZyb20gdGhlIG9wdGlvbiwgYW5kIG5vdCBmcm9tIHBvc3NpYmxlIG1hdGNoaW5nIGR1YWwgb3B0aW9uP1xuICAgKlxuICAgKiBAcGFyYW0geyp9IHZhbHVlXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBvcHRpb25cbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICB2YWx1ZUZyb21PcHRpb24odmFsdWUsIG9wdGlvbikge1xuICAgIGNvbnN0IG9wdGlvbktleSA9IG9wdGlvbi5hdHRyaWJ1dGVOYW1lKCk7XG4gICAgaWYgKCF0aGlzLmR1YWxPcHRpb25zLmhhcyhvcHRpb25LZXkpKSByZXR1cm4gdHJ1ZTtcblxuICAgIC8vIFVzZSB0aGUgdmFsdWUgdG8gZGVkdWNlIGlmIChwcm9iYWJseSkgY2FtZSBmcm9tIHRoZSBvcHRpb24uXG4gICAgY29uc3QgcHJlc2V0ID0gdGhpcy5uZWdhdGl2ZU9wdGlvbnMuZ2V0KG9wdGlvbktleSkucHJlc2V0QXJnO1xuICAgIGNvbnN0IG5lZ2F0aXZlVmFsdWUgPSBwcmVzZXQgIT09IHVuZGVmaW5lZCA/IHByZXNldCA6IGZhbHNlO1xuICAgIHJldHVybiBvcHRpb24ubmVnYXRlID09PSAobmVnYXRpdmVWYWx1ZSA9PT0gdmFsdWUpO1xuICB9XG59XG5cbi8qKlxuICogQ29udmVydCBzdHJpbmcgZnJvbSBrZWJhYi1jYXNlIHRvIGNhbWVsQ2FzZS5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gc3RyXG4gKiBAcmV0dXJuIHtzdHJpbmd9XG4gKiBAcHJpdmF0ZVxuICovXG5cbmZ1bmN0aW9uIGNhbWVsY2FzZShzdHIpIHtcbiAgcmV0dXJuIHN0ci5zcGxpdCgnLScpLnJlZHVjZSgoc3RyLCB3b3JkKSA9PiB7XG4gICAgcmV0dXJuIHN0ciArIHdvcmRbMF0udG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSk7XG4gIH0pO1xufVxuXG4vKipcbiAqIFNwbGl0IHRoZSBzaG9ydCBhbmQgbG9uZyBmbGFnIG91dCBvZiBzb21ldGhpbmcgbGlrZSAnLW0sLS1taXhlZCA8dmFsdWU+J1xuICpcbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gc3BsaXRPcHRpb25GbGFncyhmbGFncykge1xuICBsZXQgc2hvcnRGbGFnO1xuICBsZXQgbG9uZ0ZsYWc7XG4gIC8vIHNob3J0IGZsYWcsIHNpbmdsZSBkYXNoIGFuZCBzaW5nbGUgY2hhcmFjdGVyXG4gIGNvbnN0IHNob3J0RmxhZ0V4cCA9IC9eLVteLV0kLztcbiAgLy8gbG9uZyBmbGFnLCBkb3VibGUgZGFzaCBhbmQgYXQgbGVhc3Qgb25lIGNoYXJhY3RlclxuICBjb25zdCBsb25nRmxhZ0V4cCA9IC9eLS1bXi1dLztcblxuICBjb25zdCBmbGFnUGFydHMgPSBmbGFncy5zcGxpdCgvWyB8LF0rLykuY29uY2F0KCdndWFyZCcpO1xuICAvLyBOb3JtYWwgaXMgc2hvcnQgYW5kL29yIGxvbmcuXG4gIGlmIChzaG9ydEZsYWdFeHAudGVzdChmbGFnUGFydHNbMF0pKSBzaG9ydEZsYWcgPSBmbGFnUGFydHMuc2hpZnQoKTtcbiAgaWYgKGxvbmdGbGFnRXhwLnRlc3QoZmxhZ1BhcnRzWzBdKSkgbG9uZ0ZsYWcgPSBmbGFnUGFydHMuc2hpZnQoKTtcbiAgLy8gTG9uZyB0aGVuIHNob3J0LiBSYXJlbHkgdXNlZCBidXQgZmluZS5cbiAgaWYgKCFzaG9ydEZsYWcgJiYgc2hvcnRGbGFnRXhwLnRlc3QoZmxhZ1BhcnRzWzBdKSlcbiAgICBzaG9ydEZsYWcgPSBmbGFnUGFydHMuc2hpZnQoKTtcbiAgLy8gQWxsb3cgdHdvIGxvbmcgZmxhZ3MsIGxpa2UgJy0td3MsIC0td29ya3NwYWNlJ1xuICAvLyBUaGlzIGlzIHRoZSBzdXBwb3J0ZWQgd2F5IHRvIGhhdmUgYSBzaG9ydGlzaCBvcHRpb24gZmxhZy5cbiAgaWYgKCFzaG9ydEZsYWcgJiYgbG9uZ0ZsYWdFeHAudGVzdChmbGFnUGFydHNbMF0pKSB7XG4gICAgc2hvcnRGbGFnID0gbG9uZ0ZsYWc7XG4gICAgbG9uZ0ZsYWcgPSBmbGFnUGFydHMuc2hpZnQoKTtcbiAgfVxuXG4gIC8vIENoZWNrIGZvciB1bnByb2Nlc3NlZCBmbGFnLiBGYWlsIG5vaXNpbHkgcmF0aGVyIHRoYW4gc2lsZW50bHkgaWdub3JlLlxuICBpZiAoZmxhZ1BhcnRzWzBdLnN0YXJ0c1dpdGgoJy0nKSkge1xuICAgIGNvbnN0IHVuc3VwcG9ydGVkRmxhZyA9IGZsYWdQYXJ0c1swXTtcbiAgICBjb25zdCBiYXNlRXJyb3IgPSBgb3B0aW9uIGNyZWF0aW9uIGZhaWxlZCBkdWUgdG8gJyR7dW5zdXBwb3J0ZWRGbGFnfScgaW4gb3B0aW9uIGZsYWdzICcke2ZsYWdzfSdgO1xuICAgIGlmICgvXi1bXi1dW14tXS8udGVzdCh1bnN1cHBvcnRlZEZsYWcpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgJHtiYXNlRXJyb3J9XG4tIGEgc2hvcnQgZmxhZyBpcyBhIHNpbmdsZSBkYXNoIGFuZCBhIHNpbmdsZSBjaGFyYWN0ZXJcbiAgLSBlaXRoZXIgdXNlIGEgc2luZ2xlIGRhc2ggYW5kIGEgc2luZ2xlIGNoYXJhY3RlciAoZm9yIGEgc2hvcnQgZmxhZylcbiAgLSBvciB1c2UgYSBkb3VibGUgZGFzaCBmb3IgYSBsb25nIG9wdGlvbiAoYW5kIGNhbiBoYXZlIHR3bywgbGlrZSAnLS13cywgLS13b3Jrc3BhY2UnKWAsXG4gICAgICApO1xuICAgIGlmIChzaG9ydEZsYWdFeHAudGVzdCh1bnN1cHBvcnRlZEZsYWcpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2Jhc2VFcnJvcn1cbi0gdG9vIG1hbnkgc2hvcnQgZmxhZ3NgKTtcbiAgICBpZiAobG9uZ0ZsYWdFeHAudGVzdCh1bnN1cHBvcnRlZEZsYWcpKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKGAke2Jhc2VFcnJvcn1cbi0gdG9vIG1hbnkgbG9uZyBmbGFnc2ApO1xuXG4gICAgdGhyb3cgbmV3IEVycm9yKGAke2Jhc2VFcnJvcn1cbi0gdW5yZWNvZ25pc2VkIGZsYWcgZm9ybWF0YCk7XG4gIH1cbiAgaWYgKHNob3J0RmxhZyA9PT0gdW5kZWZpbmVkICYmIGxvbmdGbGFnID09PSB1bmRlZmluZWQpXG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYG9wdGlvbiBjcmVhdGlvbiBmYWlsZWQgZHVlIHRvIG5vIGZsYWdzIGZvdW5kIGluICcke2ZsYWdzfScuYCxcbiAgICApO1xuXG4gIHJldHVybiB7IHNob3J0RmxhZywgbG9uZ0ZsYWcgfTtcbn1cblxuZXhwb3J0cy5PcHRpb24gPSBPcHRpb247XG5leHBvcnRzLkR1YWxPcHRpb25zID0gRHVhbE9wdGlvbnM7XG4iLCAiY29uc3QgbWF4RGlzdGFuY2UgPSAzO1xuXG5mdW5jdGlvbiBlZGl0RGlzdGFuY2UoYSwgYikge1xuICAvLyBodHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EYW1lcmF1XHUyMDEzTGV2ZW5zaHRlaW5fZGlzdGFuY2VcbiAgLy8gQ2FsY3VsYXRpbmcgb3B0aW1hbCBzdHJpbmcgYWxpZ25tZW50IGRpc3RhbmNlLCBubyBzdWJzdHJpbmcgaXMgZWRpdGVkIG1vcmUgdGhhbiBvbmNlLlxuICAvLyAoU2ltcGxlIGltcGxlbWVudGF0aW9uLilcblxuICAvLyBRdWljayBlYXJseSBleGl0LCByZXR1cm4gd29yc3QgY2FzZS5cbiAgaWYgKE1hdGguYWJzKGEubGVuZ3RoIC0gYi5sZW5ndGgpID4gbWF4RGlzdGFuY2UpXG4gICAgcmV0dXJuIE1hdGgubWF4KGEubGVuZ3RoLCBiLmxlbmd0aCk7XG5cbiAgLy8gZGlzdGFuY2UgYmV0d2VlbiBwcmVmaXggc3Vic3RyaW5ncyBvZiBhIGFuZCBiXG4gIGNvbnN0IGQgPSBbXTtcblxuICAvLyBwdXJlIGRlbGV0aW9ucyB0dXJuIGEgaW50byBlbXB0eSBzdHJpbmdcbiAgZm9yIChsZXQgaSA9IDA7IGkgPD0gYS5sZW5ndGg7IGkrKykge1xuICAgIGRbaV0gPSBbaV07XG4gIH1cbiAgLy8gcHVyZSBpbnNlcnRpb25zIHR1cm4gZW1wdHkgc3RyaW5nIGludG8gYlxuICBmb3IgKGxldCBqID0gMDsgaiA8PSBiLmxlbmd0aDsgaisrKSB7XG4gICAgZFswXVtqXSA9IGo7XG4gIH1cblxuICAvLyBmaWxsIG1hdHJpeFxuICBmb3IgKGxldCBqID0gMTsgaiA8PSBiLmxlbmd0aDsgaisrKSB7XG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gYS5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGNvc3QgPSAxO1xuICAgICAgaWYgKGFbaSAtIDFdID09PSBiW2ogLSAxXSkge1xuICAgICAgICBjb3N0ID0gMDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvc3QgPSAxO1xuICAgICAgfVxuICAgICAgZFtpXVtqXSA9IE1hdGgubWluKFxuICAgICAgICBkW2kgLSAxXVtqXSArIDEsIC8vIGRlbGV0aW9uXG4gICAgICAgIGRbaV1baiAtIDFdICsgMSwgLy8gaW5zZXJ0aW9uXG4gICAgICAgIGRbaSAtIDFdW2ogLSAxXSArIGNvc3QsIC8vIHN1YnN0aXR1dGlvblxuICAgICAgKTtcbiAgICAgIC8vIHRyYW5zcG9zaXRpb25cbiAgICAgIGlmIChpID4gMSAmJiBqID4gMSAmJiBhW2kgLSAxXSA9PT0gYltqIC0gMl0gJiYgYVtpIC0gMl0gPT09IGJbaiAtIDFdKSB7XG4gICAgICAgIGRbaV1bal0gPSBNYXRoLm1pbihkW2ldW2pdLCBkW2kgLSAyXVtqIC0gMl0gKyAxKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gZFthLmxlbmd0aF1bYi5sZW5ndGhdO1xufVxuXG4vKipcbiAqIEZpbmQgY2xvc2UgbWF0Y2hlcywgcmVzdHJpY3RlZCB0byBzYW1lIG51bWJlciBvZiBlZGl0cy5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ30gd29yZFxuICogQHBhcmFtIHtzdHJpbmdbXX0gY2FuZGlkYXRlc1xuICogQHJldHVybnMge3N0cmluZ31cbiAqL1xuXG5mdW5jdGlvbiBzdWdnZXN0U2ltaWxhcih3b3JkLCBjYW5kaWRhdGVzKSB7XG4gIGlmICghY2FuZGlkYXRlcyB8fCBjYW5kaWRhdGVzLmxlbmd0aCA9PT0gMCkgcmV0dXJuICcnO1xuICAvLyByZW1vdmUgcG9zc2libGUgZHVwbGljYXRlc1xuICBjYW5kaWRhdGVzID0gQXJyYXkuZnJvbShuZXcgU2V0KGNhbmRpZGF0ZXMpKTtcblxuICBjb25zdCBzZWFyY2hpbmdPcHRpb25zID0gd29yZC5zdGFydHNXaXRoKCctLScpO1xuICBpZiAoc2VhcmNoaW5nT3B0aW9ucykge1xuICAgIHdvcmQgPSB3b3JkLnNsaWNlKDIpO1xuICAgIGNhbmRpZGF0ZXMgPSBjYW5kaWRhdGVzLm1hcCgoY2FuZGlkYXRlKSA9PiBjYW5kaWRhdGUuc2xpY2UoMikpO1xuICB9XG5cbiAgbGV0IHNpbWlsYXIgPSBbXTtcbiAgbGV0IGJlc3REaXN0YW5jZSA9IG1heERpc3RhbmNlO1xuICBjb25zdCBtaW5TaW1pbGFyaXR5ID0gMC40O1xuICBjYW5kaWRhdGVzLmZvckVhY2goKGNhbmRpZGF0ZSkgPT4ge1xuICAgIGlmIChjYW5kaWRhdGUubGVuZ3RoIDw9IDEpIHJldHVybjsgLy8gbm8gb25lIGNoYXJhY3RlciBndWVzc2VzXG5cbiAgICBjb25zdCBkaXN0YW5jZSA9IGVkaXREaXN0YW5jZSh3b3JkLCBjYW5kaWRhdGUpO1xuICAgIGNvbnN0IGxlbmd0aCA9IE1hdGgubWF4KHdvcmQubGVuZ3RoLCBjYW5kaWRhdGUubGVuZ3RoKTtcbiAgICBjb25zdCBzaW1pbGFyaXR5ID0gKGxlbmd0aCAtIGRpc3RhbmNlKSAvIGxlbmd0aDtcbiAgICBpZiAoc2ltaWxhcml0eSA+IG1pblNpbWlsYXJpdHkpIHtcbiAgICAgIGlmIChkaXN0YW5jZSA8IGJlc3REaXN0YW5jZSkge1xuICAgICAgICAvLyBiZXR0ZXIgZWRpdCBkaXN0YW5jZSwgdGhyb3cgYXdheSBwcmV2aW91cyB3b3JzZSBtYXRjaGVzXG4gICAgICAgIGJlc3REaXN0YW5jZSA9IGRpc3RhbmNlO1xuICAgICAgICBzaW1pbGFyID0gW2NhbmRpZGF0ZV07XG4gICAgICB9IGVsc2UgaWYgKGRpc3RhbmNlID09PSBiZXN0RGlzdGFuY2UpIHtcbiAgICAgICAgc2ltaWxhci5wdXNoKGNhbmRpZGF0ZSk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcblxuICBzaW1pbGFyLnNvcnQoKGEsIGIpID0+IGEubG9jYWxlQ29tcGFyZShiKSk7XG4gIGlmIChzZWFyY2hpbmdPcHRpb25zKSB7XG4gICAgc2ltaWxhciA9IHNpbWlsYXIubWFwKChjYW5kaWRhdGUpID0+IGAtLSR7Y2FuZGlkYXRlfWApO1xuICB9XG5cbiAgaWYgKHNpbWlsYXIubGVuZ3RoID4gMSkge1xuICAgIHJldHVybiBgXFxuKERpZCB5b3UgbWVhbiBvbmUgb2YgJHtzaW1pbGFyLmpvaW4oJywgJyl9PylgO1xuICB9XG4gIGlmIChzaW1pbGFyLmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBgXFxuKERpZCB5b3UgbWVhbiAke3NpbWlsYXJbMF19PylgO1xuICB9XG4gIHJldHVybiAnJztcbn1cblxuZXhwb3J0cy5zdWdnZXN0U2ltaWxhciA9IHN1Z2dlc3RTaW1pbGFyO1xuIiwgImNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ25vZGU6ZXZlbnRzJykuRXZlbnRFbWl0dGVyO1xuY29uc3QgY2hpbGRQcm9jZXNzID0gcmVxdWlyZSgnbm9kZTpjaGlsZF9wcm9jZXNzJyk7XG5jb25zdCBwYXRoID0gcmVxdWlyZSgnbm9kZTpwYXRoJyk7XG5jb25zdCBmcyA9IHJlcXVpcmUoJ25vZGU6ZnMnKTtcbmNvbnN0IHByb2Nlc3MgPSByZXF1aXJlKCdub2RlOnByb2Nlc3MnKTtcblxuY29uc3QgeyBBcmd1bWVudCwgaHVtYW5SZWFkYWJsZUFyZ05hbWUgfSA9IHJlcXVpcmUoJy4vYXJndW1lbnQuanMnKTtcbmNvbnN0IHsgQ29tbWFuZGVyRXJyb3IgfSA9IHJlcXVpcmUoJy4vZXJyb3IuanMnKTtcbmNvbnN0IHsgSGVscCwgc3RyaXBDb2xvciB9ID0gcmVxdWlyZSgnLi9oZWxwLmpzJyk7XG5jb25zdCB7IE9wdGlvbiwgRHVhbE9wdGlvbnMgfSA9IHJlcXVpcmUoJy4vb3B0aW9uLmpzJyk7XG5jb25zdCB7IHN1Z2dlc3RTaW1pbGFyIH0gPSByZXF1aXJlKCcuL3N1Z2dlc3RTaW1pbGFyJyk7XG5cbmNsYXNzIENvbW1hbmQgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICAvKipcbiAgICogSW5pdGlhbGl6ZSBhIG5ldyBgQ29tbWFuZGAuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbbmFtZV1cbiAgICovXG5cbiAgY29uc3RydWN0b3IobmFtZSkge1xuICAgIHN1cGVyKCk7XG4gICAgLyoqIEB0eXBlIHtDb21tYW5kW119ICovXG4gICAgdGhpcy5jb21tYW5kcyA9IFtdO1xuICAgIC8qKiBAdHlwZSB7T3B0aW9uW119ICovXG4gICAgdGhpcy5vcHRpb25zID0gW107XG4gICAgdGhpcy5wYXJlbnQgPSBudWxsO1xuICAgIHRoaXMuX2FsbG93VW5rbm93bk9wdGlvbiA9IGZhbHNlO1xuICAgIHRoaXMuX2FsbG93RXhjZXNzQXJndW1lbnRzID0gZmFsc2U7XG4gICAgLyoqIEB0eXBlIHtBcmd1bWVudFtdfSAqL1xuICAgIHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cyA9IFtdO1xuICAgIHRoaXMuX2FyZ3MgPSB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHM7IC8vIGRlcHJlY2F0ZWQgb2xkIG5hbWVcbiAgICAvKiogQHR5cGUge3N0cmluZ1tdfSAqL1xuICAgIHRoaXMuYXJncyA9IFtdOyAvLyBjbGkgYXJncyB3aXRoIG9wdGlvbnMgcmVtb3ZlZFxuICAgIHRoaXMucmF3QXJncyA9IFtdO1xuICAgIHRoaXMucHJvY2Vzc2VkQXJncyA9IFtdOyAvLyBsaWtlIC5hcmdzIGJ1dCBhZnRlciBjdXN0b20gcHJvY2Vzc2luZyBhbmQgY29sbGVjdGluZyB2YXJpYWRpY1xuICAgIHRoaXMuX3NjcmlwdFBhdGggPSBudWxsO1xuICAgIHRoaXMuX25hbWUgPSBuYW1lIHx8ICcnO1xuICAgIHRoaXMuX29wdGlvblZhbHVlcyA9IHt9O1xuICAgIHRoaXMuX29wdGlvblZhbHVlU291cmNlcyA9IHt9OyAvLyBkZWZhdWx0LCBlbnYsIGNsaSBldGNcbiAgICB0aGlzLl9zdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMgPSBmYWxzZTtcbiAgICB0aGlzLl9hY3Rpb25IYW5kbGVyID0gbnVsbDtcbiAgICB0aGlzLl9leGVjdXRhYmxlSGFuZGxlciA9IGZhbHNlO1xuICAgIHRoaXMuX2V4ZWN1dGFibGVGaWxlID0gbnVsbDsgLy8gY3VzdG9tIG5hbWUgZm9yIGV4ZWN1dGFibGVcbiAgICB0aGlzLl9leGVjdXRhYmxlRGlyID0gbnVsbDsgLy8gY3VzdG9tIHNlYXJjaCBkaXJlY3RvcnkgZm9yIHN1YmNvbW1hbmRzXG4gICAgdGhpcy5fZGVmYXVsdENvbW1hbmROYW1lID0gbnVsbDtcbiAgICB0aGlzLl9leGl0Q2FsbGJhY2sgPSBudWxsO1xuICAgIHRoaXMuX2FsaWFzZXMgPSBbXTtcbiAgICB0aGlzLl9jb21iaW5lRmxhZ0FuZE9wdGlvbmFsVmFsdWUgPSB0cnVlO1xuICAgIHRoaXMuX2Rlc2NyaXB0aW9uID0gJyc7XG4gICAgdGhpcy5fc3VtbWFyeSA9ICcnO1xuICAgIHRoaXMuX2FyZ3NEZXNjcmlwdGlvbiA9IHVuZGVmaW5lZDsgLy8gbGVnYWN5XG4gICAgdGhpcy5fZW5hYmxlUG9zaXRpb25hbE9wdGlvbnMgPSBmYWxzZTtcbiAgICB0aGlzLl9wYXNzVGhyb3VnaE9wdGlvbnMgPSBmYWxzZTtcbiAgICB0aGlzLl9saWZlQ3ljbGVIb29rcyA9IHt9OyAvLyBhIGhhc2ggb2YgYXJyYXlzXG4gICAgLyoqIEB0eXBlIHsoYm9vbGVhbiB8IHN0cmluZyl9ICovXG4gICAgdGhpcy5fc2hvd0hlbHBBZnRlckVycm9yID0gZmFsc2U7XG4gICAgdGhpcy5fc2hvd1N1Z2dlc3Rpb25BZnRlckVycm9yID0gdHJ1ZTtcbiAgICB0aGlzLl9zYXZlZFN0YXRlID0gbnVsbDsgLy8gdXNlZCBpbiBzYXZlL3Jlc3RvcmVTdGF0ZUJlZm9yZVBhcnNlXG5cbiAgICAvLyBzZWUgY29uZmlndXJlT3V0cHV0KCkgZm9yIGRvY3NcbiAgICB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uID0ge1xuICAgICAgd3JpdGVPdXQ6IChzdHIpID0+IHByb2Nlc3Muc3Rkb3V0LndyaXRlKHN0ciksXG4gICAgICB3cml0ZUVycjogKHN0cikgPT4gcHJvY2Vzcy5zdGRlcnIud3JpdGUoc3RyKSxcbiAgICAgIG91dHB1dEVycm9yOiAoc3RyLCB3cml0ZSkgPT4gd3JpdGUoc3RyKSxcbiAgICAgIGdldE91dEhlbHBXaWR0aDogKCkgPT5cbiAgICAgICAgcHJvY2Vzcy5zdGRvdXQuaXNUVFkgPyBwcm9jZXNzLnN0ZG91dC5jb2x1bW5zIDogdW5kZWZpbmVkLFxuICAgICAgZ2V0RXJySGVscFdpZHRoOiAoKSA9PlxuICAgICAgICBwcm9jZXNzLnN0ZGVyci5pc1RUWSA/IHByb2Nlc3Muc3RkZXJyLmNvbHVtbnMgOiB1bmRlZmluZWQsXG4gICAgICBnZXRPdXRIYXNDb2xvcnM6ICgpID0+XG4gICAgICAgIHVzZUNvbG9yKCkgPz8gKHByb2Nlc3Muc3Rkb3V0LmlzVFRZICYmIHByb2Nlc3Muc3Rkb3V0Lmhhc0NvbG9ycz8uKCkpLFxuICAgICAgZ2V0RXJySGFzQ29sb3JzOiAoKSA9PlxuICAgICAgICB1c2VDb2xvcigpID8/IChwcm9jZXNzLnN0ZGVyci5pc1RUWSAmJiBwcm9jZXNzLnN0ZGVyci5oYXNDb2xvcnM/LigpKSxcbiAgICAgIHN0cmlwQ29sb3I6IChzdHIpID0+IHN0cmlwQ29sb3Ioc3RyKSxcbiAgICB9O1xuXG4gICAgdGhpcy5faGlkZGVuID0gZmFsc2U7XG4gICAgLyoqIEB0eXBlIHsoT3B0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZCl9ICovXG4gICAgdGhpcy5faGVscE9wdGlvbiA9IHVuZGVmaW5lZDsgLy8gTGF6eSBjcmVhdGVkIG9uIGRlbWFuZC4gTWF5IGJlIG51bGwgaWYgaGVscCBvcHRpb24gaXMgZGlzYWJsZWQuXG4gICAgdGhpcy5fYWRkSW1wbGljaXRIZWxwQ29tbWFuZCA9IHVuZGVmaW5lZDsgLy8gdW5kZWNpZGVkIHdoZXRoZXIgdHJ1ZSBvciBmYWxzZSB5ZXQsIG5vdCBpbmhlcml0ZWRcbiAgICAvKiogQHR5cGUge0NvbW1hbmR9ICovXG4gICAgdGhpcy5faGVscENvbW1hbmQgPSB1bmRlZmluZWQ7IC8vIGxhenkgaW5pdGlhbGlzZWQsIGluaGVyaXRlZFxuICAgIHRoaXMuX2hlbHBDb25maWd1cmF0aW9uID0ge307XG4gICAgLyoqIEB0eXBlIHtzdHJpbmcgfCB1bmRlZmluZWR9ICovXG4gICAgdGhpcy5faGVscEdyb3VwSGVhZGluZyA9IHVuZGVmaW5lZDsgLy8gc29mdCBpbml0aWFsaXNlZCB3aGVuIGFkZGVkIHRvIHBhcmVudFxuICAgIC8qKiBAdHlwZSB7c3RyaW5nIHwgdW5kZWZpbmVkfSAqL1xuICAgIHRoaXMuX2RlZmF1bHRDb21tYW5kR3JvdXAgPSB1bmRlZmluZWQ7XG4gICAgLyoqIEB0eXBlIHtzdHJpbmcgfCB1bmRlZmluZWR9ICovXG4gICAgdGhpcy5fZGVmYXVsdE9wdGlvbkdyb3VwID0gdW5kZWZpbmVkO1xuICB9XG5cbiAgLyoqXG4gICAqIENvcHkgc2V0dGluZ3MgdGhhdCBhcmUgdXNlZnVsIHRvIGhhdmUgaW4gY29tbW9uIGFjcm9zcyByb290IGNvbW1hbmQgYW5kIHN1YmNvbW1hbmRzLlxuICAgKlxuICAgKiAoVXNlZCBpbnRlcm5hbGx5IHdoZW4gYWRkaW5nIGEgY29tbWFuZCB1c2luZyBgLmNvbW1hbmQoKWAgc28gc3ViY29tbWFuZHMgaW5oZXJpdCBwYXJlbnQgc2V0dGluZ3MuKVxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IHNvdXJjZUNvbW1hbmRcbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBjb3B5SW5oZXJpdGVkU2V0dGluZ3Moc291cmNlQ29tbWFuZCkge1xuICAgIHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24gPSBzb3VyY2VDb21tYW5kLl9vdXRwdXRDb25maWd1cmF0aW9uO1xuICAgIHRoaXMuX2hlbHBPcHRpb24gPSBzb3VyY2VDb21tYW5kLl9oZWxwT3B0aW9uO1xuICAgIHRoaXMuX2hlbHBDb21tYW5kID0gc291cmNlQ29tbWFuZC5faGVscENvbW1hbmQ7XG4gICAgdGhpcy5faGVscENvbmZpZ3VyYXRpb24gPSBzb3VyY2VDb21tYW5kLl9oZWxwQ29uZmlndXJhdGlvbjtcbiAgICB0aGlzLl9leGl0Q2FsbGJhY2sgPSBzb3VyY2VDb21tYW5kLl9leGl0Q2FsbGJhY2s7XG4gICAgdGhpcy5fc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzID0gc291cmNlQ29tbWFuZC5fc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzO1xuICAgIHRoaXMuX2NvbWJpbmVGbGFnQW5kT3B0aW9uYWxWYWx1ZSA9XG4gICAgICBzb3VyY2VDb21tYW5kLl9jb21iaW5lRmxhZ0FuZE9wdGlvbmFsVmFsdWU7XG4gICAgdGhpcy5fYWxsb3dFeGNlc3NBcmd1bWVudHMgPSBzb3VyY2VDb21tYW5kLl9hbGxvd0V4Y2Vzc0FyZ3VtZW50cztcbiAgICB0aGlzLl9lbmFibGVQb3NpdGlvbmFsT3B0aW9ucyA9IHNvdXJjZUNvbW1hbmQuX2VuYWJsZVBvc2l0aW9uYWxPcHRpb25zO1xuICAgIHRoaXMuX3Nob3dIZWxwQWZ0ZXJFcnJvciA9IHNvdXJjZUNvbW1hbmQuX3Nob3dIZWxwQWZ0ZXJFcnJvcjtcbiAgICB0aGlzLl9zaG93U3VnZ2VzdGlvbkFmdGVyRXJyb3IgPSBzb3VyY2VDb21tYW5kLl9zaG93U3VnZ2VzdGlvbkFmdGVyRXJyb3I7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBAcmV0dXJucyB7Q29tbWFuZFtdfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfZ2V0Q29tbWFuZEFuZEFuY2VzdG9ycygpIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICBmb3IgKGxldCBjb21tYW5kID0gdGhpczsgY29tbWFuZDsgY29tbWFuZCA9IGNvbW1hbmQucGFyZW50KSB7XG4gICAgICByZXN1bHQucHVzaChjb21tYW5kKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmUgYSBjb21tYW5kLlxuICAgKlxuICAgKiBUaGVyZSBhcmUgdHdvIHN0eWxlcyBvZiBjb21tYW5kOiBwYXkgYXR0ZW50aW9uIHRvIHdoZXJlIHRvIHB1dCB0aGUgZGVzY3JpcHRpb24uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIC8vIENvbW1hbmQgaW1wbGVtZW50ZWQgdXNpbmcgYWN0aW9uIGhhbmRsZXIgKGRlc2NyaXB0aW9uIGlzIHN1cHBsaWVkIHNlcGFyYXRlbHkgdG8gYC5jb21tYW5kYClcbiAgICogcHJvZ3JhbVxuICAgKiAgIC5jb21tYW5kKCdjbG9uZSA8c291cmNlPiBbZGVzdGluYXRpb25dJylcbiAgICogICAuZGVzY3JpcHRpb24oJ2Nsb25lIGEgcmVwb3NpdG9yeSBpbnRvIGEgbmV3bHkgY3JlYXRlZCBkaXJlY3RvcnknKVxuICAgKiAgIC5hY3Rpb24oKHNvdXJjZSwgZGVzdGluYXRpb24pID0+IHtcbiAgICogICAgIGNvbnNvbGUubG9nKCdjbG9uZSBjb21tYW5kIGNhbGxlZCcpO1xuICAgKiAgIH0pO1xuICAgKlxuICAgKiAvLyBDb21tYW5kIGltcGxlbWVudGVkIHVzaW5nIHNlcGFyYXRlIGV4ZWN1dGFibGUgZmlsZSAoZGVzY3JpcHRpb24gaXMgc2Vjb25kIHBhcmFtZXRlciB0byBgLmNvbW1hbmRgKVxuICAgKiBwcm9ncmFtXG4gICAqICAgLmNvbW1hbmQoJ3N0YXJ0IDxzZXJ2aWNlPicsICdzdGFydCBuYW1lZCBzZXJ2aWNlJylcbiAgICogICAuY29tbWFuZCgnc3RvcCBbc2VydmljZV0nLCAnc3RvcCBuYW1lZCBzZXJ2aWNlLCBvciBhbGwgaWYgbm8gbmFtZSBzdXBwbGllZCcpO1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZUFuZEFyZ3MgLSBjb21tYW5kIG5hbWUgYW5kIGFyZ3VtZW50cywgYXJncyBhcmUgYDxyZXF1aXJlZD5gIG9yIGBbb3B0aW9uYWxdYCBhbmQgbGFzdCBtYXkgYWxzbyBiZSBgdmFyaWFkaWMuLi5gXG4gICAqIEBwYXJhbSB7KG9iamVjdCB8IHN0cmluZyl9IFthY3Rpb25PcHRzT3JFeGVjRGVzY10gLSBjb25maWd1cmF0aW9uIG9wdGlvbnMgKGZvciBhY3Rpb24pLCBvciBkZXNjcmlwdGlvbiAoZm9yIGV4ZWN1dGFibGUpXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbZXhlY09wdHNdIC0gY29uZmlndXJhdGlvbiBvcHRpb25zIChmb3IgZXhlY3V0YWJsZSlcbiAgICogQHJldHVybiB7Q29tbWFuZH0gcmV0dXJucyBuZXcgY29tbWFuZCBmb3IgYWN0aW9uIGhhbmRsZXIsIG9yIGB0aGlzYCBmb3IgZXhlY3V0YWJsZSBjb21tYW5kXG4gICAqL1xuXG4gIGNvbW1hbmQobmFtZUFuZEFyZ3MsIGFjdGlvbk9wdHNPckV4ZWNEZXNjLCBleGVjT3B0cykge1xuICAgIGxldCBkZXNjID0gYWN0aW9uT3B0c09yRXhlY0Rlc2M7XG4gICAgbGV0IG9wdHMgPSBleGVjT3B0cztcbiAgICBpZiAodHlwZW9mIGRlc2MgPT09ICdvYmplY3QnICYmIGRlc2MgIT09IG51bGwpIHtcbiAgICAgIG9wdHMgPSBkZXNjO1xuICAgICAgZGVzYyA9IG51bGw7XG4gICAgfVxuICAgIG9wdHMgPSBvcHRzIHx8IHt9O1xuICAgIGNvbnN0IFssIG5hbWUsIGFyZ3NdID0gbmFtZUFuZEFyZ3MubWF0Y2goLyhbXiBdKykgKiguKikvKTtcblxuICAgIGNvbnN0IGNtZCA9IHRoaXMuY3JlYXRlQ29tbWFuZChuYW1lKTtcbiAgICBpZiAoZGVzYykge1xuICAgICAgY21kLmRlc2NyaXB0aW9uKGRlc2MpO1xuICAgICAgY21kLl9leGVjdXRhYmxlSGFuZGxlciA9IHRydWU7XG4gICAgfVxuICAgIGlmIChvcHRzLmlzRGVmYXVsdCkgdGhpcy5fZGVmYXVsdENvbW1hbmROYW1lID0gY21kLl9uYW1lO1xuICAgIGNtZC5faGlkZGVuID0gISEob3B0cy5ub0hlbHAgfHwgb3B0cy5oaWRkZW4pOyAvLyBub0hlbHAgaXMgZGVwcmVjYXRlZCBvbGQgbmFtZSBmb3IgaGlkZGVuXG4gICAgY21kLl9leGVjdXRhYmxlRmlsZSA9IG9wdHMuZXhlY3V0YWJsZUZpbGUgfHwgbnVsbDsgLy8gQ3VzdG9tIG5hbWUgZm9yIGV4ZWN1dGFibGUgZmlsZSwgc2V0IG1pc3NpbmcgdG8gbnVsbCB0byBtYXRjaCBjb25zdHJ1Y3RvclxuICAgIGlmIChhcmdzKSBjbWQuYXJndW1lbnRzKGFyZ3MpO1xuICAgIHRoaXMuX3JlZ2lzdGVyQ29tbWFuZChjbWQpO1xuICAgIGNtZC5wYXJlbnQgPSB0aGlzO1xuICAgIGNtZC5jb3B5SW5oZXJpdGVkU2V0dGluZ3ModGhpcyk7XG5cbiAgICBpZiAoZGVzYykgcmV0dXJuIHRoaXM7XG4gICAgcmV0dXJuIGNtZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBGYWN0b3J5IHJvdXRpbmUgdG8gY3JlYXRlIGEgbmV3IHVuYXR0YWNoZWQgY29tbWFuZC5cbiAgICpcbiAgICogU2VlIC5jb21tYW5kKCkgZm9yIGNyZWF0aW5nIGFuIGF0dGFjaGVkIHN1YmNvbW1hbmQsIHdoaWNoIHVzZXMgdGhpcyByb3V0aW5lIHRvXG4gICAqIGNyZWF0ZSB0aGUgY29tbWFuZC4gWW91IGNhbiBvdmVycmlkZSBjcmVhdGVDb21tYW5kIHRvIGN1c3RvbWlzZSBzdWJjb21tYW5kcy5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtuYW1lXVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBuZXcgY29tbWFuZFxuICAgKi9cblxuICBjcmVhdGVDb21tYW5kKG5hbWUpIHtcbiAgICByZXR1cm4gbmV3IENvbW1hbmQobmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogWW91IGNhbiBjdXN0b21pc2UgdGhlIGhlbHAgd2l0aCBhIHN1YmNsYXNzIG9mIEhlbHAgYnkgb3ZlcnJpZGluZyBjcmVhdGVIZWxwLFxuICAgKiBvciBieSBvdmVycmlkaW5nIEhlbHAgcHJvcGVydGllcyB1c2luZyBjb25maWd1cmVIZWxwKCkuXG4gICAqXG4gICAqIEByZXR1cm4ge0hlbHB9XG4gICAqL1xuXG4gIGNyZWF0ZUhlbHAoKSB7XG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24obmV3IEhlbHAoKSwgdGhpcy5jb25maWd1cmVIZWxwKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFlvdSBjYW4gY3VzdG9taXNlIHRoZSBoZWxwIGJ5IG92ZXJyaWRpbmcgSGVscCBwcm9wZXJ0aWVzIHVzaW5nIGNvbmZpZ3VyZUhlbHAoKSxcbiAgICogb3Igd2l0aCBhIHN1YmNsYXNzIG9mIEhlbHAgYnkgb3ZlcnJpZGluZyBjcmVhdGVIZWxwKCkuXG4gICAqXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbY29uZmlndXJhdGlvbl0gLSBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAgICogQHJldHVybiB7KENvbW1hbmQgfCBvYmplY3QpfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmcsIG9yIHN0b3JlZCBjb25maWd1cmF0aW9uXG4gICAqL1xuXG4gIGNvbmZpZ3VyZUhlbHAoY29uZmlndXJhdGlvbikge1xuICAgIGlmIChjb25maWd1cmF0aW9uID09PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLl9oZWxwQ29uZmlndXJhdGlvbjtcblxuICAgIHRoaXMuX2hlbHBDb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZGVmYXVsdCBvdXRwdXQgZ29lcyB0byBzdGRvdXQgYW5kIHN0ZGVyci4gWW91IGNhbiBjdXN0b21pc2UgdGhpcyBmb3Igc3BlY2lhbFxuICAgKiBhcHBsaWNhdGlvbnMuIFlvdSBjYW4gYWxzbyBjdXN0b21pc2UgdGhlIGRpc3BsYXkgb2YgZXJyb3JzIGJ5IG92ZXJyaWRpbmcgb3V0cHV0RXJyb3IuXG4gICAqXG4gICAqIFRoZSBjb25maWd1cmF0aW9uIHByb3BlcnRpZXMgYXJlIGFsbCBmdW5jdGlvbnM6XG4gICAqXG4gICAqICAgICAvLyBjaGFuZ2UgaG93IG91dHB1dCBiZWluZyB3cml0dGVuLCBkZWZhdWx0cyB0byBzdGRvdXQgYW5kIHN0ZGVyclxuICAgKiAgICAgd3JpdGVPdXQoc3RyKVxuICAgKiAgICAgd3JpdGVFcnIoc3RyKVxuICAgKiAgICAgLy8gY2hhbmdlIGhvdyBvdXRwdXQgYmVpbmcgd3JpdHRlbiBmb3IgZXJyb3JzLCBkZWZhdWx0cyB0byB3cml0ZUVyclxuICAgKiAgICAgb3V0cHV0RXJyb3Ioc3RyLCB3cml0ZSkgLy8gdXNlZCBmb3IgZGlzcGxheWluZyBlcnJvcnMgYW5kIG5vdCB1c2VkIGZvciBkaXNwbGF5aW5nIGhlbHBcbiAgICogICAgIC8vIHNwZWNpZnkgd2lkdGggZm9yIHdyYXBwaW5nIGhlbHBcbiAgICogICAgIGdldE91dEhlbHBXaWR0aCgpXG4gICAqICAgICBnZXRFcnJIZWxwV2lkdGgoKVxuICAgKiAgICAgLy8gY29sb3Igc3VwcG9ydCwgY3VycmVudGx5IG9ubHkgdXNlZCB3aXRoIEhlbHBcbiAgICogICAgIGdldE91dEhhc0NvbG9ycygpXG4gICAqICAgICBnZXRFcnJIYXNDb2xvcnMoKVxuICAgKiAgICAgc3RyaXBDb2xvcigpIC8vIHVzZWQgdG8gcmVtb3ZlIEFOU0kgZXNjYXBlIGNvZGVzIGlmIG91dHB1dCBkb2VzIG5vdCBoYXZlIGNvbG9yc1xuICAgKlxuICAgKiBAcGFyYW0ge29iamVjdH0gW2NvbmZpZ3VyYXRpb25dIC0gY29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAqIEByZXR1cm4geyhDb21tYW5kIHwgb2JqZWN0KX0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nLCBvciBzdG9yZWQgY29uZmlndXJhdGlvblxuICAgKi9cblxuICBjb25maWd1cmVPdXRwdXQoY29uZmlndXJhdGlvbikge1xuICAgIGlmIChjb25maWd1cmF0aW9uID09PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uO1xuXG4gICAgdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbiA9IHtcbiAgICAgIC4uLnRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24sXG4gICAgICAuLi5jb25maWd1cmF0aW9uLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheSB0aGUgaGVscCBvciBhIGN1c3RvbSBtZXNzYWdlIGFmdGVyIGFuIGVycm9yIG9jY3Vycy5cbiAgICpcbiAgICogQHBhcmFtIHsoYm9vbGVhbnxzdHJpbmcpfSBbZGlzcGxheUhlbHBdXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgc2hvd0hlbHBBZnRlckVycm9yKGRpc3BsYXlIZWxwID0gdHJ1ZSkge1xuICAgIGlmICh0eXBlb2YgZGlzcGxheUhlbHAgIT09ICdzdHJpbmcnKSBkaXNwbGF5SGVscCA9ICEhZGlzcGxheUhlbHA7XG4gICAgdGhpcy5fc2hvd0hlbHBBZnRlckVycm9yID0gZGlzcGxheUhlbHA7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogRGlzcGxheSBzdWdnZXN0aW9uIG9mIHNpbWlsYXIgY29tbWFuZHMgZm9yIHVua25vd24gY29tbWFuZHMsIG9yIG9wdGlvbnMgZm9yIHVua25vd24gb3B0aW9ucy5cbiAgICpcbiAgICogQHBhcmFtIHtib29sZWFufSBbZGlzcGxheVN1Z2dlc3Rpb25dXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgc2hvd1N1Z2dlc3Rpb25BZnRlckVycm9yKGRpc3BsYXlTdWdnZXN0aW9uID0gdHJ1ZSkge1xuICAgIHRoaXMuX3Nob3dTdWdnZXN0aW9uQWZ0ZXJFcnJvciA9ICEhZGlzcGxheVN1Z2dlc3Rpb247XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgcHJlcGFyZWQgc3ViY29tbWFuZC5cbiAgICpcbiAgICogU2VlIC5jb21tYW5kKCkgZm9yIGNyZWF0aW5nIGFuIGF0dGFjaGVkIHN1YmNvbW1hbmQgd2hpY2ggaW5oZXJpdHMgc2V0dGluZ3MgZnJvbSBpdHMgcGFyZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZCAtIG5ldyBzdWJjb21tYW5kXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBbb3B0c10gLSBjb25maWd1cmF0aW9uIG9wdGlvbnNcbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIGFkZENvbW1hbmQoY21kLCBvcHRzKSB7XG4gICAgaWYgKCFjbWQuX25hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgQ29tbWFuZCBwYXNzZWQgdG8gLmFkZENvbW1hbmQoKSBtdXN0IGhhdmUgYSBuYW1lXG4tIHNwZWNpZnkgdGhlIG5hbWUgaW4gQ29tbWFuZCBjb25zdHJ1Y3RvciBvciB1c2luZyAubmFtZSgpYCk7XG4gICAgfVxuXG4gICAgb3B0cyA9IG9wdHMgfHwge307XG4gICAgaWYgKG9wdHMuaXNEZWZhdWx0KSB0aGlzLl9kZWZhdWx0Q29tbWFuZE5hbWUgPSBjbWQuX25hbWU7XG4gICAgaWYgKG9wdHMubm9IZWxwIHx8IG9wdHMuaGlkZGVuKSBjbWQuX2hpZGRlbiA9IHRydWU7IC8vIG1vZGlmeWluZyBwYXNzZWQgY29tbWFuZCBkdWUgdG8gZXhpc3RpbmcgaW1wbGVtZW50YXRpb25cblxuICAgIHRoaXMuX3JlZ2lzdGVyQ29tbWFuZChjbWQpO1xuICAgIGNtZC5wYXJlbnQgPSB0aGlzO1xuICAgIGNtZC5fY2hlY2tGb3JCcm9rZW5QYXNzVGhyb3VnaCgpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogRmFjdG9yeSByb3V0aW5lIHRvIGNyZWF0ZSBhIG5ldyB1bmF0dGFjaGVkIGFyZ3VtZW50LlxuICAgKlxuICAgKiBTZWUgLmFyZ3VtZW50KCkgZm9yIGNyZWF0aW5nIGFuIGF0dGFjaGVkIGFyZ3VtZW50LCB3aGljaCB1c2VzIHRoaXMgcm91dGluZSB0b1xuICAgKiBjcmVhdGUgdGhlIGFyZ3VtZW50LiBZb3UgY2FuIG92ZXJyaWRlIGNyZWF0ZUFyZ3VtZW50IHRvIHJldHVybiBhIGN1c3RvbSBhcmd1bWVudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXNjcmlwdGlvbl1cbiAgICogQHJldHVybiB7QXJndW1lbnR9IG5ldyBhcmd1bWVudFxuICAgKi9cblxuICBjcmVhdGVBcmd1bWVudChuYW1lLCBkZXNjcmlwdGlvbikge1xuICAgIHJldHVybiBuZXcgQXJndW1lbnQobmFtZSwgZGVzY3JpcHRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZSBhcmd1bWVudCBzeW50YXggZm9yIGNvbW1hbmQuXG4gICAqXG4gICAqIFRoZSBkZWZhdWx0IGlzIHRoYXQgdGhlIGFyZ3VtZW50IGlzIHJlcXVpcmVkLCBhbmQgeW91IGNhbiBleHBsaWNpdGx5XG4gICAqIGluZGljYXRlIHRoaXMgd2l0aCA8PiBhcm91bmQgdGhlIG5hbWUuIFB1dCBbXSBhcm91bmQgdGhlIG5hbWUgZm9yIGFuIG9wdGlvbmFsIGFyZ3VtZW50LlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwcm9ncmFtLmFyZ3VtZW50KCc8aW5wdXQtZmlsZT4nKTtcbiAgICogcHJvZ3JhbS5hcmd1bWVudCgnW291dHB1dC1maWxlXScpO1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXVxuICAgKiBAcGFyYW0geyhGdW5jdGlvbnwqKX0gW3BhcnNlQXJnXSAtIGN1c3RvbSBhcmd1bWVudCBwcm9jZXNzaW5nIGZ1bmN0aW9uIG9yIGRlZmF1bHQgdmFsdWVcbiAgICogQHBhcmFtIHsqfSBbZGVmYXVsdFZhbHVlXVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIGFyZ3VtZW50KG5hbWUsIGRlc2NyaXB0aW9uLCBwYXJzZUFyZywgZGVmYXVsdFZhbHVlKSB7XG4gICAgY29uc3QgYXJndW1lbnQgPSB0aGlzLmNyZWF0ZUFyZ3VtZW50KG5hbWUsIGRlc2NyaXB0aW9uKTtcbiAgICBpZiAodHlwZW9mIHBhcnNlQXJnID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBhcmd1bWVudC5kZWZhdWx0KGRlZmF1bHRWYWx1ZSkuYXJnUGFyc2VyKHBhcnNlQXJnKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXJndW1lbnQuZGVmYXVsdChwYXJzZUFyZyk7XG4gICAgfVxuICAgIHRoaXMuYWRkQXJndW1lbnQoYXJndW1lbnQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZSBhcmd1bWVudCBzeW50YXggZm9yIGNvbW1hbmQsIGFkZGluZyBtdWx0aXBsZSBhdCBvbmNlICh3aXRob3V0IGRlc2NyaXB0aW9ucykuXG4gICAqXG4gICAqIFNlZSBhbHNvIC5hcmd1bWVudCgpLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwcm9ncmFtLmFyZ3VtZW50cygnPGNtZD4gW2Vudl0nKTtcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG5hbWVzXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBhcmd1bWVudHMobmFtZXMpIHtcbiAgICBuYW1lc1xuICAgICAgLnRyaW0oKVxuICAgICAgLnNwbGl0KC8gKy8pXG4gICAgICAuZm9yRWFjaCgoZGV0YWlsKSA9PiB7XG4gICAgICAgIHRoaXMuYXJndW1lbnQoZGV0YWlsKTtcbiAgICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZSBhcmd1bWVudCBzeW50YXggZm9yIGNvbW1hbmQsIGFkZGluZyBhIHByZXBhcmVkIGFyZ3VtZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge0FyZ3VtZW50fSBhcmd1bWVudFxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIGFkZEFyZ3VtZW50KGFyZ3VtZW50KSB7XG4gICAgY29uc3QgcHJldmlvdXNBcmd1bWVudCA9IHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cy5zbGljZSgtMSlbMF07XG4gICAgaWYgKHByZXZpb3VzQXJndW1lbnQ/LnZhcmlhZGljKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBvbmx5IHRoZSBsYXN0IGFyZ3VtZW50IGNhbiBiZSB2YXJpYWRpYyAnJHtwcmV2aW91c0FyZ3VtZW50Lm5hbWUoKX0nYCxcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChcbiAgICAgIGFyZ3VtZW50LnJlcXVpcmVkICYmXG4gICAgICBhcmd1bWVudC5kZWZhdWx0VmFsdWUgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgYXJndW1lbnQucGFyc2VBcmcgPT09IHVuZGVmaW5lZFxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgYSBkZWZhdWx0IHZhbHVlIGZvciBhIHJlcXVpcmVkIGFyZ3VtZW50IGlzIG5ldmVyIHVzZWQ6ICcke2FyZ3VtZW50Lm5hbWUoKX0nYCxcbiAgICAgICk7XG4gICAgfVxuICAgIHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cy5wdXNoKGFyZ3VtZW50KTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBDdXN0b21pc2Ugb3Igb3ZlcnJpZGUgZGVmYXVsdCBoZWxwIGNvbW1hbmQuIEJ5IGRlZmF1bHQgYSBoZWxwIGNvbW1hbmQgaXMgYXV0b21hdGljYWxseSBhZGRlZCBpZiB5b3VyIGNvbW1hbmQgaGFzIHN1YmNvbW1hbmRzLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAgICBwcm9ncmFtLmhlbHBDb21tYW5kKCdoZWxwIFtjbWRdJyk7XG4gICAqICAgIHByb2dyYW0uaGVscENvbW1hbmQoJ2hlbHAgW2NtZF0nLCAnc2hvdyBoZWxwJyk7XG4gICAqICAgIHByb2dyYW0uaGVscENvbW1hbmQoZmFsc2UpOyAvLyBzdXBwcmVzcyBkZWZhdWx0IGhlbHAgY29tbWFuZFxuICAgKiAgICBwcm9ncmFtLmhlbHBDb21tYW5kKHRydWUpOyAvLyBhZGQgaGVscCBjb21tYW5kIGV2ZW4gaWYgbm8gc3ViY29tbWFuZHNcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8Ym9vbGVhbn0gZW5hYmxlT3JOYW1lQW5kQXJncyAtIGVuYWJsZSB3aXRoIGN1c3RvbSBuYW1lIGFuZC9vciBhcmd1bWVudHMsIG9yIGJvb2xlYW4gdG8gb3ZlcnJpZGUgd2hldGhlciBhZGRlZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXSAtIGN1c3RvbSBkZXNjcmlwdGlvblxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgaGVscENvbW1hbmQoZW5hYmxlT3JOYW1lQW5kQXJncywgZGVzY3JpcHRpb24pIHtcbiAgICBpZiAodHlwZW9mIGVuYWJsZU9yTmFtZUFuZEFyZ3MgPT09ICdib29sZWFuJykge1xuICAgICAgdGhpcy5fYWRkSW1wbGljaXRIZWxwQ29tbWFuZCA9IGVuYWJsZU9yTmFtZUFuZEFyZ3M7XG4gICAgICBpZiAoZW5hYmxlT3JOYW1lQW5kQXJncyAmJiB0aGlzLl9kZWZhdWx0Q29tbWFuZEdyb3VwKSB7XG4gICAgICAgIC8vIG1ha2UgdGhlIGNvbW1hbmQgdG8gc3RvcmUgdGhlIGdyb3VwXG4gICAgICAgIHRoaXMuX2luaXRDb21tYW5kR3JvdXAodGhpcy5fZ2V0SGVscENvbW1hbmQoKSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICBjb25zdCBuYW1lQW5kQXJncyA9IGVuYWJsZU9yTmFtZUFuZEFyZ3MgPz8gJ2hlbHAgW2NvbW1hbmRdJztcbiAgICBjb25zdCBbLCBoZWxwTmFtZSwgaGVscEFyZ3NdID0gbmFtZUFuZEFyZ3MubWF0Y2goLyhbXiBdKykgKiguKikvKTtcbiAgICBjb25zdCBoZWxwRGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbiA/PyAnZGlzcGxheSBoZWxwIGZvciBjb21tYW5kJztcblxuICAgIGNvbnN0IGhlbHBDb21tYW5kID0gdGhpcy5jcmVhdGVDb21tYW5kKGhlbHBOYW1lKTtcbiAgICBoZWxwQ29tbWFuZC5oZWxwT3B0aW9uKGZhbHNlKTtcbiAgICBpZiAoaGVscEFyZ3MpIGhlbHBDb21tYW5kLmFyZ3VtZW50cyhoZWxwQXJncyk7XG4gICAgaWYgKGhlbHBEZXNjcmlwdGlvbikgaGVscENvbW1hbmQuZGVzY3JpcHRpb24oaGVscERlc2NyaXB0aW9uKTtcblxuICAgIHRoaXMuX2FkZEltcGxpY2l0SGVscENvbW1hbmQgPSB0cnVlO1xuICAgIHRoaXMuX2hlbHBDb21tYW5kID0gaGVscENvbW1hbmQ7XG4gICAgLy8gaW5pdCBncm91cCB1bmxlc3MgbGF6eSBjcmVhdGVcbiAgICBpZiAoZW5hYmxlT3JOYW1lQW5kQXJncyB8fCBkZXNjcmlwdGlvbikgdGhpcy5faW5pdENvbW1hbmRHcm91cChoZWxwQ29tbWFuZCk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgcHJlcGFyZWQgY3VzdG9tIGhlbHAgY29tbWFuZC5cbiAgICpcbiAgICogQHBhcmFtIHsoQ29tbWFuZHxzdHJpbmd8Ym9vbGVhbil9IGhlbHBDb21tYW5kIC0gY3VzdG9tIGhlbHAgY29tbWFuZCwgb3IgZGVwcmVjYXRlZCBlbmFibGVPck5hbWVBbmRBcmdzIGFzIGZvciBgLmhlbHBDb21tYW5kKClgXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVwcmVjYXRlZERlc2NyaXB0aW9uXSAtIGRlcHJlY2F0ZWQgY3VzdG9tIGRlc2NyaXB0aW9uIHVzZWQgd2l0aCBjdXN0b20gbmFtZSBvbmx5XG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgYWRkSGVscENvbW1hbmQoaGVscENvbW1hbmQsIGRlcHJlY2F0ZWREZXNjcmlwdGlvbikge1xuICAgIC8vIElmIG5vdCBwYXNzZWQgYW4gb2JqZWN0LCBjYWxsIHRocm91Z2ggdG8gaGVscENvbW1hbmQgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LFxuICAgIC8vIGFzIGFkZEhlbHBDb21tYW5kIHdhcyBvcmlnaW5hbGx5IHVzZWQgbGlrZSBoZWxwQ29tbWFuZCBpcyBub3cuXG4gICAgaWYgKHR5cGVvZiBoZWxwQ29tbWFuZCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRoaXMuaGVscENvbW1hbmQoaGVscENvbW1hbmQsIGRlcHJlY2F0ZWREZXNjcmlwdGlvbik7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICB0aGlzLl9hZGRJbXBsaWNpdEhlbHBDb21tYW5kID0gdHJ1ZTtcbiAgICB0aGlzLl9oZWxwQ29tbWFuZCA9IGhlbHBDb21tYW5kO1xuICAgIHRoaXMuX2luaXRDb21tYW5kR3JvdXAoaGVscENvbW1hbmQpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIExhenkgY3JlYXRlIGhlbHAgY29tbWFuZC5cbiAgICpcbiAgICogQHJldHVybiB7KENvbW1hbmR8bnVsbCl9XG4gICAqIEBwYWNrYWdlXG4gICAqL1xuICBfZ2V0SGVscENvbW1hbmQoKSB7XG4gICAgY29uc3QgaGFzSW1wbGljaXRIZWxwQ29tbWFuZCA9XG4gICAgICB0aGlzLl9hZGRJbXBsaWNpdEhlbHBDb21tYW5kID8/XG4gICAgICAodGhpcy5jb21tYW5kcy5sZW5ndGggJiZcbiAgICAgICAgIXRoaXMuX2FjdGlvbkhhbmRsZXIgJiZcbiAgICAgICAgIXRoaXMuX2ZpbmRDb21tYW5kKCdoZWxwJykpO1xuXG4gICAgaWYgKGhhc0ltcGxpY2l0SGVscENvbW1hbmQpIHtcbiAgICAgIGlmICh0aGlzLl9oZWxwQ29tbWFuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuaGVscENvbW1hbmQodW5kZWZpbmVkLCB1bmRlZmluZWQpOyAvLyB1c2UgZGVmYXVsdCBuYW1lIGFuZCBkZXNjcmlwdGlvblxuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuX2hlbHBDb21tYW5kO1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgaG9vayBmb3IgbGlmZSBjeWNsZSBldmVudC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV2ZW50XG4gICAqIEBwYXJhbSB7RnVuY3Rpb259IGxpc3RlbmVyXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBob29rKGV2ZW50LCBsaXN0ZW5lcikge1xuICAgIGNvbnN0IGFsbG93ZWRWYWx1ZXMgPSBbJ3ByZVN1YmNvbW1hbmQnLCAncHJlQWN0aW9uJywgJ3Bvc3RBY3Rpb24nXTtcbiAgICBpZiAoIWFsbG93ZWRWYWx1ZXMuaW5jbHVkZXMoZXZlbnQpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgdmFsdWUgZm9yIGV2ZW50IHBhc3NlZCB0byBob29rIDogJyR7ZXZlbnR9Jy5cbkV4cGVjdGluZyBvbmUgb2YgJyR7YWxsb3dlZFZhbHVlcy5qb2luKFwiJywgJ1wiKX0nYCk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9saWZlQ3ljbGVIb29rc1tldmVudF0pIHtcbiAgICAgIHRoaXMuX2xpZmVDeWNsZUhvb2tzW2V2ZW50XS5wdXNoKGxpc3RlbmVyKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbGlmZUN5Y2xlSG9va3NbZXZlbnRdID0gW2xpc3RlbmVyXTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgY2FsbGJhY2sgdG8gdXNlIGFzIHJlcGxhY2VtZW50IGZvciBjYWxsaW5nIHByb2Nlc3MuZXhpdC5cbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gW2ZuXSBvcHRpb25hbCBjYWxsYmFjayB3aGljaCB3aWxsIGJlIHBhc3NlZCBhIENvbW1hbmRlckVycm9yLCBkZWZhdWx0cyB0byB0aHJvd2luZ1xuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgZXhpdE92ZXJyaWRlKGZuKSB7XG4gICAgaWYgKGZuKSB7XG4gICAgICB0aGlzLl9leGl0Q2FsbGJhY2sgPSBmbjtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZXhpdENhbGxiYWNrID0gKGVycikgPT4ge1xuICAgICAgICBpZiAoZXJyLmNvZGUgIT09ICdjb21tYW5kZXIuZXhlY3V0ZVN1YkNvbW1hbmRBc3luYycpIHtcbiAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgLy8gQXN5bmMgY2FsbGJhY2sgZnJvbSBzcGF3biBldmVudHMsIG5vdCB1c2VmdWwgdG8gdGhyb3cuXG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgfVxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGwgcHJvY2Vzcy5leGl0LCBhbmQgX2V4aXRDYWxsYmFjayBpZiBkZWZpbmVkLlxuICAgKlxuICAgKiBAcGFyYW0ge251bWJlcn0gZXhpdENvZGUgZXhpdCBjb2RlIGZvciB1c2luZyB3aXRoIHByb2Nlc3MuZXhpdFxuICAgKiBAcGFyYW0ge3N0cmluZ30gY29kZSBhbiBpZCBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBlcnJvclxuICAgKiBAcGFyYW0ge3N0cmluZ30gbWVzc2FnZSBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBvZiB0aGUgZXJyb3JcbiAgICogQHJldHVybiBuZXZlclxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfZXhpdChleGl0Q29kZSwgY29kZSwgbWVzc2FnZSkge1xuICAgIGlmICh0aGlzLl9leGl0Q2FsbGJhY2spIHtcbiAgICAgIHRoaXMuX2V4aXRDYWxsYmFjayhuZXcgQ29tbWFuZGVyRXJyb3IoZXhpdENvZGUsIGNvZGUsIG1lc3NhZ2UpKTtcbiAgICAgIC8vIEV4cGVjdGluZyB0aGlzIGxpbmUgaXMgbm90IHJlYWNoZWQuXG4gICAgfVxuICAgIHByb2Nlc3MuZXhpdChleGl0Q29kZSk7XG4gIH1cblxuICAvKipcbiAgICogUmVnaXN0ZXIgY2FsbGJhY2sgYGZuYCBmb3IgdGhlIGNvbW1hbmQuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHByb2dyYW1cbiAgICogICAuY29tbWFuZCgnc2VydmUnKVxuICAgKiAgIC5kZXNjcmlwdGlvbignc3RhcnQgc2VydmljZScpXG4gICAqICAgLmFjdGlvbihmdW5jdGlvbigpIHtcbiAgICogICAgICAvLyBkbyB3b3JrIGhlcmVcbiAgICogICB9KTtcbiAgICpcbiAgICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIGFjdGlvbihmbikge1xuICAgIGNvbnN0IGxpc3RlbmVyID0gKGFyZ3MpID0+IHtcbiAgICAgIC8vIFRoZSAuYWN0aW9uIGNhbGxiYWNrIHRha2VzIGFuIGV4dHJhIHBhcmFtZXRlciB3aGljaCBpcyB0aGUgY29tbWFuZCBvciBvcHRpb25zLlxuICAgICAgY29uc3QgZXhwZWN0ZWRBcmdzQ291bnQgPSB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMubGVuZ3RoO1xuICAgICAgY29uc3QgYWN0aW9uQXJncyA9IGFyZ3Muc2xpY2UoMCwgZXhwZWN0ZWRBcmdzQ291bnQpO1xuICAgICAgaWYgKHRoaXMuX3N0b3JlT3B0aW9uc0FzUHJvcGVydGllcykge1xuICAgICAgICBhY3Rpb25BcmdzW2V4cGVjdGVkQXJnc0NvdW50XSA9IHRoaXM7IC8vIGJhY2t3YXJkcyBjb21wYXRpYmxlIFwib3B0aW9uc1wiXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3Rpb25BcmdzW2V4cGVjdGVkQXJnc0NvdW50XSA9IHRoaXMub3B0cygpO1xuICAgICAgfVxuICAgICAgYWN0aW9uQXJncy5wdXNoKHRoaXMpO1xuXG4gICAgICByZXR1cm4gZm4uYXBwbHkodGhpcywgYWN0aW9uQXJncyk7XG4gICAgfTtcbiAgICB0aGlzLl9hY3Rpb25IYW5kbGVyID0gbGlzdGVuZXI7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogRmFjdG9yeSByb3V0aW5lIHRvIGNyZWF0ZSBhIG5ldyB1bmF0dGFjaGVkIG9wdGlvbi5cbiAgICpcbiAgICogU2VlIC5vcHRpb24oKSBmb3IgY3JlYXRpbmcgYW4gYXR0YWNoZWQgb3B0aW9uLCB3aGljaCB1c2VzIHRoaXMgcm91dGluZSB0b1xuICAgKiBjcmVhdGUgdGhlIG9wdGlvbi4gWW91IGNhbiBvdmVycmlkZSBjcmVhdGVPcHRpb24gdG8gcmV0dXJuIGEgY3VzdG9tIG9wdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZsYWdzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb25dXG4gICAqIEByZXR1cm4ge09wdGlvbn0gbmV3IG9wdGlvblxuICAgKi9cblxuICBjcmVhdGVPcHRpb24oZmxhZ3MsIGRlc2NyaXB0aW9uKSB7XG4gICAgcmV0dXJuIG5ldyBPcHRpb24oZmxhZ3MsIGRlc2NyaXB0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBXcmFwIHBhcnNlQXJncyB0byBjYXRjaCAnY29tbWFuZGVyLmludmFsaWRBcmd1bWVudCcuXG4gICAqXG4gICAqIEBwYXJhbSB7KE9wdGlvbiB8IEFyZ3VtZW50KX0gdGFyZ2V0XG4gICAqIEBwYXJhbSB7c3RyaW5nfSB2YWx1ZVxuICAgKiBAcGFyYW0geyp9IHByZXZpb3VzXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBpbnZhbGlkQXJndW1lbnRNZXNzYWdlXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9jYWxsUGFyc2VBcmcodGFyZ2V0LCB2YWx1ZSwgcHJldmlvdXMsIGludmFsaWRBcmd1bWVudE1lc3NhZ2UpIHtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRhcmdldC5wYXJzZUFyZyh2YWx1ZSwgcHJldmlvdXMpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgaWYgKGVyci5jb2RlID09PSAnY29tbWFuZGVyLmludmFsaWRBcmd1bWVudCcpIHtcbiAgICAgICAgY29uc3QgbWVzc2FnZSA9IGAke2ludmFsaWRBcmd1bWVudE1lc3NhZ2V9ICR7ZXJyLm1lc3NhZ2V9YDtcbiAgICAgICAgdGhpcy5lcnJvcihtZXNzYWdlLCB7IGV4aXRDb2RlOiBlcnIuZXhpdENvZGUsIGNvZGU6IGVyci5jb2RlIH0pO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBmb3Igb3B0aW9uIGZsYWcgY29uZmxpY3RzLlxuICAgKiBSZWdpc3RlciBvcHRpb24gaWYgbm8gY29uZmxpY3RzIGZvdW5kLCBvciB0aHJvdyBvbiBjb25mbGljdC5cbiAgICpcbiAgICogQHBhcmFtIHtPcHRpb259IG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfcmVnaXN0ZXJPcHRpb24ob3B0aW9uKSB7XG4gICAgY29uc3QgbWF0Y2hpbmdPcHRpb24gPVxuICAgICAgKG9wdGlvbi5zaG9ydCAmJiB0aGlzLl9maW5kT3B0aW9uKG9wdGlvbi5zaG9ydCkpIHx8XG4gICAgICAob3B0aW9uLmxvbmcgJiYgdGhpcy5fZmluZE9wdGlvbihvcHRpb24ubG9uZykpO1xuICAgIGlmIChtYXRjaGluZ09wdGlvbikge1xuICAgICAgY29uc3QgbWF0Y2hpbmdGbGFnID1cbiAgICAgICAgb3B0aW9uLmxvbmcgJiYgdGhpcy5fZmluZE9wdGlvbihvcHRpb24ubG9uZylcbiAgICAgICAgICA/IG9wdGlvbi5sb25nXG4gICAgICAgICAgOiBvcHRpb24uc2hvcnQ7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBhZGQgb3B0aW9uICcke29wdGlvbi5mbGFnc30nJHt0aGlzLl9uYW1lICYmIGAgdG8gY29tbWFuZCAnJHt0aGlzLl9uYW1lfSdgfSBkdWUgdG8gY29uZmxpY3RpbmcgZmxhZyAnJHttYXRjaGluZ0ZsYWd9J1xuLSAgYWxyZWFkeSB1c2VkIGJ5IG9wdGlvbiAnJHttYXRjaGluZ09wdGlvbi5mbGFnc30nYCk7XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdE9wdGlvbkdyb3VwKG9wdGlvbik7XG4gICAgdGhpcy5vcHRpb25zLnB1c2gob3B0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayBmb3IgY29tbWFuZCBuYW1lIGFuZCBhbGlhcyBjb25mbGljdHMgd2l0aCBleGlzdGluZyBjb21tYW5kcy5cbiAgICogUmVnaXN0ZXIgY29tbWFuZCBpZiBubyBjb25mbGljdHMgZm91bmQsIG9yIHRocm93IG9uIGNvbmZsaWN0LlxuICAgKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNvbW1hbmRcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX3JlZ2lzdGVyQ29tbWFuZChjb21tYW5kKSB7XG4gICAgY29uc3Qga25vd25CeSA9IChjbWQpID0+IHtcbiAgICAgIHJldHVybiBbY21kLm5hbWUoKV0uY29uY2F0KGNtZC5hbGlhc2VzKCkpO1xuICAgIH07XG5cbiAgICBjb25zdCBhbHJlYWR5VXNlZCA9IGtub3duQnkoY29tbWFuZCkuZmluZCgobmFtZSkgPT5cbiAgICAgIHRoaXMuX2ZpbmRDb21tYW5kKG5hbWUpLFxuICAgICk7XG4gICAgaWYgKGFscmVhZHlVc2VkKSB7XG4gICAgICBjb25zdCBleGlzdGluZ0NtZCA9IGtub3duQnkodGhpcy5fZmluZENvbW1hbmQoYWxyZWFkeVVzZWQpKS5qb2luKCd8Jyk7XG4gICAgICBjb25zdCBuZXdDbWQgPSBrbm93bkJ5KGNvbW1hbmQpLmpvaW4oJ3wnKTtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYGNhbm5vdCBhZGQgY29tbWFuZCAnJHtuZXdDbWR9JyBhcyBhbHJlYWR5IGhhdmUgY29tbWFuZCAnJHtleGlzdGluZ0NtZH0nYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdENvbW1hbmRHcm91cChjb21tYW5kKTtcbiAgICB0aGlzLmNvbW1hbmRzLnB1c2goY29tbWFuZCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIG9wdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtPcHRpb259IG9wdGlvblxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIGFkZE9wdGlvbihvcHRpb24pIHtcbiAgICB0aGlzLl9yZWdpc3Rlck9wdGlvbihvcHRpb24pO1xuXG4gICAgY29uc3Qgb25hbWUgPSBvcHRpb24ubmFtZSgpO1xuICAgIGNvbnN0IG5hbWUgPSBvcHRpb24uYXR0cmlidXRlTmFtZSgpO1xuXG4gICAgLy8gc3RvcmUgZGVmYXVsdCB2YWx1ZVxuICAgIGlmIChvcHRpb24ubmVnYXRlKSB7XG4gICAgICAvLyAtLW5vLWZvbyBpcyBzcGVjaWFsIGFuZCBkZWZhdWx0cyBmb28gdG8gdHJ1ZSwgdW5sZXNzIGEgLS1mb28gb3B0aW9uIGlzIGFscmVhZHkgZGVmaW5lZFxuICAgICAgY29uc3QgcG9zaXRpdmVMb25nRmxhZyA9IG9wdGlvbi5sb25nLnJlcGxhY2UoL14tLW5vLS8sICctLScpO1xuICAgICAgaWYgKCF0aGlzLl9maW5kT3B0aW9uKHBvc2l0aXZlTG9uZ0ZsYWcpKSB7XG4gICAgICAgIHRoaXMuc2V0T3B0aW9uVmFsdWVXaXRoU291cmNlKFxuICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgb3B0aW9uLmRlZmF1bHRWYWx1ZSA9PT0gdW5kZWZpbmVkID8gdHJ1ZSA6IG9wdGlvbi5kZWZhdWx0VmFsdWUsXG4gICAgICAgICAgJ2RlZmF1bHQnLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAob3B0aW9uLmRlZmF1bHRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aGlzLnNldE9wdGlvblZhbHVlV2l0aFNvdXJjZShuYW1lLCBvcHRpb24uZGVmYXVsdFZhbHVlLCAnZGVmYXVsdCcpO1xuICAgIH1cblxuICAgIC8vIGhhbmRsZXIgZm9yIGNsaSBhbmQgZW52IHN1cHBsaWVkIHZhbHVlc1xuICAgIGNvbnN0IGhhbmRsZU9wdGlvblZhbHVlID0gKHZhbCwgaW52YWxpZFZhbHVlTWVzc2FnZSwgdmFsdWVTb3VyY2UpID0+IHtcbiAgICAgIC8vIHZhbCBpcyBudWxsIGZvciBvcHRpb25hbCBvcHRpb24gdXNlZCB3aXRob3V0IGFuIG9wdGlvbmFsLWFyZ3VtZW50LlxuICAgICAgLy8gdmFsIGlzIHVuZGVmaW5lZCBmb3IgYm9vbGVhbiBhbmQgbmVnYXRlZCBvcHRpb24uXG4gICAgICBpZiAodmFsID09IG51bGwgJiYgb3B0aW9uLnByZXNldEFyZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbCA9IG9wdGlvbi5wcmVzZXRBcmc7XG4gICAgICB9XG5cbiAgICAgIC8vIGN1c3RvbSBwcm9jZXNzaW5nXG4gICAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuZ2V0T3B0aW9uVmFsdWUobmFtZSk7XG4gICAgICBpZiAodmFsICE9PSBudWxsICYmIG9wdGlvbi5wYXJzZUFyZykge1xuICAgICAgICB2YWwgPSB0aGlzLl9jYWxsUGFyc2VBcmcob3B0aW9uLCB2YWwsIG9sZFZhbHVlLCBpbnZhbGlkVmFsdWVNZXNzYWdlKTtcbiAgICAgIH0gZWxzZSBpZiAodmFsICE9PSBudWxsICYmIG9wdGlvbi52YXJpYWRpYykge1xuICAgICAgICB2YWwgPSBvcHRpb24uX2NvbGxlY3RWYWx1ZSh2YWwsIG9sZFZhbHVlKTtcbiAgICAgIH1cblxuICAgICAgLy8gRmlsbC1pbiBhcHByb3ByaWF0ZSBtaXNzaW5nIHZhbHVlcy4gTG9uZyB3aW5kZWQgYnV0IGVhc3kgdG8gZm9sbG93LlxuICAgICAgaWYgKHZhbCA9PSBudWxsKSB7XG4gICAgICAgIGlmIChvcHRpb24ubmVnYXRlKSB7XG4gICAgICAgICAgdmFsID0gZmFsc2U7XG4gICAgICAgIH0gZWxzZSBpZiAob3B0aW9uLmlzQm9vbGVhbigpIHx8IG9wdGlvbi5vcHRpb25hbCkge1xuICAgICAgICAgIHZhbCA9IHRydWU7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdmFsID0gJyc7IC8vIG5vdCBub3JtYWwsIHBhcnNlQXJnIG1pZ2h0IGhhdmUgZmFpbGVkIG9yIGJlIGEgbW9jayBmdW5jdGlvbiBmb3IgdGVzdGluZ1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLnNldE9wdGlvblZhbHVlV2l0aFNvdXJjZShuYW1lLCB2YWwsIHZhbHVlU291cmNlKTtcbiAgICB9O1xuXG4gICAgdGhpcy5vbignb3B0aW9uOicgKyBvbmFtZSwgKHZhbCkgPT4ge1xuICAgICAgY29uc3QgaW52YWxpZFZhbHVlTWVzc2FnZSA9IGBlcnJvcjogb3B0aW9uICcke29wdGlvbi5mbGFnc30nIGFyZ3VtZW50ICcke3ZhbH0nIGlzIGludmFsaWQuYDtcbiAgICAgIGhhbmRsZU9wdGlvblZhbHVlKHZhbCwgaW52YWxpZFZhbHVlTWVzc2FnZSwgJ2NsaScpO1xuICAgIH0pO1xuXG4gICAgaWYgKG9wdGlvbi5lbnZWYXIpIHtcbiAgICAgIHRoaXMub24oJ29wdGlvbkVudjonICsgb25hbWUsICh2YWwpID0+IHtcbiAgICAgICAgY29uc3QgaW52YWxpZFZhbHVlTWVzc2FnZSA9IGBlcnJvcjogb3B0aW9uICcke29wdGlvbi5mbGFnc30nIHZhbHVlICcke3ZhbH0nIGZyb20gZW52ICcke29wdGlvbi5lbnZWYXJ9JyBpcyBpbnZhbGlkLmA7XG4gICAgICAgIGhhbmRsZU9wdGlvblZhbHVlKHZhbCwgaW52YWxpZFZhbHVlTWVzc2FnZSwgJ2VudicpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogSW50ZXJuYWwgaW1wbGVtZW50YXRpb24gc2hhcmVkIGJ5IC5vcHRpb24oKSBhbmQgLnJlcXVpcmVkT3B0aW9uKClcbiAgICpcbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfb3B0aW9uRXgoY29uZmlnLCBmbGFncywgZGVzY3JpcHRpb24sIGZuLCBkZWZhdWx0VmFsdWUpIHtcbiAgICBpZiAodHlwZW9mIGZsYWdzID09PSAnb2JqZWN0JyAmJiBmbGFncyBpbnN0YW5jZW9mIE9wdGlvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnVG8gYWRkIGFuIE9wdGlvbiBvYmplY3QgdXNlIGFkZE9wdGlvbigpIGluc3RlYWQgb2Ygb3B0aW9uKCkgb3IgcmVxdWlyZWRPcHRpb24oKScsXG4gICAgICApO1xuICAgIH1cbiAgICBjb25zdCBvcHRpb24gPSB0aGlzLmNyZWF0ZU9wdGlvbihmbGFncywgZGVzY3JpcHRpb24pO1xuICAgIG9wdGlvbi5tYWtlT3B0aW9uTWFuZGF0b3J5KCEhY29uZmlnLm1hbmRhdG9yeSk7XG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgb3B0aW9uLmRlZmF1bHQoZGVmYXVsdFZhbHVlKS5hcmdQYXJzZXIoZm4pO1xuICAgIH0gZWxzZSBpZiAoZm4gaW5zdGFuY2VvZiBSZWdFeHApIHtcbiAgICAgIC8vIGRlcHJlY2F0ZWRcbiAgICAgIGNvbnN0IHJlZ2V4ID0gZm47XG4gICAgICBmbiA9ICh2YWwsIGRlZikgPT4ge1xuICAgICAgICBjb25zdCBtID0gcmVnZXguZXhlYyh2YWwpO1xuICAgICAgICByZXR1cm4gbSA/IG1bMF0gOiBkZWY7XG4gICAgICB9O1xuICAgICAgb3B0aW9uLmRlZmF1bHQoZGVmYXVsdFZhbHVlKS5hcmdQYXJzZXIoZm4pO1xuICAgIH0gZWxzZSB7XG4gICAgICBvcHRpb24uZGVmYXVsdChmbik7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuYWRkT3B0aW9uKG9wdGlvbik7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lIG9wdGlvbiB3aXRoIGBmbGFnc2AsIGBkZXNjcmlwdGlvbmAsIGFuZCBvcHRpb25hbCBhcmd1bWVudCBwYXJzaW5nIGZ1bmN0aW9uIG9yIGBkZWZhdWx0VmFsdWVgIG9yIGJvdGguXG4gICAqXG4gICAqIFRoZSBgZmxhZ3NgIHN0cmluZyBjb250YWlucyB0aGUgc2hvcnQgYW5kL29yIGxvbmcgZmxhZ3MsIHNlcGFyYXRlZCBieSBjb21tYSwgYSBwaXBlIG9yIHNwYWNlLiBBIHJlcXVpcmVkXG4gICAqIG9wdGlvbi1hcmd1bWVudCBpcyBpbmRpY2F0ZWQgYnkgYDw+YCBhbmQgYW4gb3B0aW9uYWwgb3B0aW9uLWFyZ3VtZW50IGJ5IGBbXWAuXG4gICAqXG4gICAqIFNlZSB0aGUgUkVBRE1FIGZvciBtb3JlIGRldGFpbHMsIGFuZCBzZWUgYWxzbyBhZGRPcHRpb24oKSBhbmQgcmVxdWlyZWRPcHRpb24oKS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcHJvZ3JhbVxuICAgKiAgICAgLm9wdGlvbignLXAsIC0tcGVwcGVyJywgJ2FkZCBwZXBwZXInKVxuICAgKiAgICAgLm9wdGlvbignLS1wdCwgLS1waXp6YS10eXBlIDxUWVBFPicsICd0eXBlIG9mIHBpenphJykgLy8gcmVxdWlyZWQgb3B0aW9uLWFyZ3VtZW50XG4gICAqICAgICAub3B0aW9uKCctYywgLS1jaGVlc2UgW0NIRUVTRV0nLCAnYWRkIGV4dHJhIGNoZWVzZScsICdtb3p6YXJlbGxhJykgLy8gb3B0aW9uYWwgb3B0aW9uLWFyZ3VtZW50IHdpdGggZGVmYXVsdFxuICAgKiAgICAgLm9wdGlvbignLXQsIC0tdGlwIDxWQUxVRT4nLCAnYWRkIHRpcCB0byBwdXJjaGFzZSBjb3N0JywgcGFyc2VGbG9hdCkgLy8gY3VzdG9tIHBhcnNlIGZ1bmN0aW9uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmbGFnc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXVxuICAgKiBAcGFyYW0geyhGdW5jdGlvbnwqKX0gW3BhcnNlQXJnXSAtIGN1c3RvbSBvcHRpb24gcHJvY2Vzc2luZyBmdW5jdGlvbiBvciBkZWZhdWx0IHZhbHVlXG4gICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV1cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIG9wdGlvbihmbGFncywgZGVzY3JpcHRpb24sIHBhcnNlQXJnLCBkZWZhdWx0VmFsdWUpIHtcbiAgICByZXR1cm4gdGhpcy5fb3B0aW9uRXgoe30sIGZsYWdzLCBkZXNjcmlwdGlvbiwgcGFyc2VBcmcsIGRlZmF1bHRWYWx1ZSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGEgcmVxdWlyZWQgb3B0aW9uIHdoaWNoIG11c3QgaGF2ZSBhIHZhbHVlIGFmdGVyIHBhcnNpbmcuIFRoaXMgdXN1YWxseSBtZWFuc1xuICAgKiB0aGUgb3B0aW9uIG11c3QgYmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUuIChPdGhlcndpc2UgdGhlIHNhbWUgYXMgLm9wdGlvbigpLilcbiAgICpcbiAgICogVGhlIGBmbGFnc2Agc3RyaW5nIGNvbnRhaW5zIHRoZSBzaG9ydCBhbmQvb3IgbG9uZyBmbGFncywgc2VwYXJhdGVkIGJ5IGNvbW1hLCBhIHBpcGUgb3Igc3BhY2UuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmbGFnc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXVxuICAgKiBAcGFyYW0geyhGdW5jdGlvbnwqKX0gW3BhcnNlQXJnXSAtIGN1c3RvbSBvcHRpb24gcHJvY2Vzc2luZyBmdW5jdGlvbiBvciBkZWZhdWx0IHZhbHVlXG4gICAqIEBwYXJhbSB7Kn0gW2RlZmF1bHRWYWx1ZV1cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIHJlcXVpcmVkT3B0aW9uKGZsYWdzLCBkZXNjcmlwdGlvbiwgcGFyc2VBcmcsIGRlZmF1bHRWYWx1ZSkge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25FeChcbiAgICAgIHsgbWFuZGF0b3J5OiB0cnVlIH0sXG4gICAgICBmbGFncyxcbiAgICAgIGRlc2NyaXB0aW9uLFxuICAgICAgcGFyc2VBcmcsXG4gICAgICBkZWZhdWx0VmFsdWUsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBbHRlciBwYXJzaW5nIG9mIHNob3J0IGZsYWdzIHdpdGggb3B0aW9uYWwgdmFsdWVzLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiAvLyBmb3IgYC5vcHRpb24oJy1mLC0tZmxhZyBbdmFsdWVdJyk6XG4gICAqIHByb2dyYW0uY29tYmluZUZsYWdBbmRPcHRpb25hbFZhbHVlKHRydWUpOyAgLy8gYC1mODBgIGlzIHRyZWF0ZWQgbGlrZSBgLS1mbGFnPTgwYCwgdGhpcyBpcyB0aGUgZGVmYXVsdCBiZWhhdmlvdXJcbiAgICogcHJvZ3JhbS5jb21iaW5lRmxhZ0FuZE9wdGlvbmFsVmFsdWUoZmFsc2UpIC8vIGAtZmJgIGlzIHRyZWF0ZWQgbGlrZSBgLWYgLWJgXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvbWJpbmVdIC0gaWYgYHRydWVgIG9yIG9taXR0ZWQsIGFuIG9wdGlvbmFsIHZhbHVlIGNhbiBiZSBzcGVjaWZpZWQgZGlyZWN0bHkgYWZ0ZXIgdGhlIGZsYWcuXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgY29tYmluZUZsYWdBbmRPcHRpb25hbFZhbHVlKGNvbWJpbmUgPSB0cnVlKSB7XG4gICAgdGhpcy5fY29tYmluZUZsYWdBbmRPcHRpb25hbFZhbHVlID0gISFjb21iaW5lO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIEFsbG93IHVua25vd24gb3B0aW9ucyBvbiB0aGUgY29tbWFuZCBsaW5lLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFthbGxvd1Vua25vd25dIC0gaWYgYHRydWVgIG9yIG9taXR0ZWQsIG5vIGVycm9yIHdpbGwgYmUgdGhyb3duIGZvciB1bmtub3duIG9wdGlvbnMuXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgYWxsb3dVbmtub3duT3B0aW9uKGFsbG93VW5rbm93biA9IHRydWUpIHtcbiAgICB0aGlzLl9hbGxvd1Vua25vd25PcHRpb24gPSAhIWFsbG93VW5rbm93bjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyBleGNlc3MgY29tbWFuZC1hcmd1bWVudHMgb24gdGhlIGNvbW1hbmQgbGluZS4gUGFzcyBmYWxzZSB0byBtYWtlIGV4Y2VzcyBhcmd1bWVudHMgYW4gZXJyb3IuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW2FsbG93RXhjZXNzXSAtIGlmIGB0cnVlYCBvciBvbWl0dGVkLCBubyBlcnJvciB3aWxsIGJlIHRocm93biBmb3IgZXhjZXNzIGFyZ3VtZW50cy5cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBhbGxvd0V4Y2Vzc0FyZ3VtZW50cyhhbGxvd0V4Y2VzcyA9IHRydWUpIHtcbiAgICB0aGlzLl9hbGxvd0V4Y2Vzc0FyZ3VtZW50cyA9ICEhYWxsb3dFeGNlc3M7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogRW5hYmxlIHBvc2l0aW9uYWwgb3B0aW9ucy4gUG9zaXRpb25hbCBtZWFucyBnbG9iYWwgb3B0aW9ucyBhcmUgc3BlY2lmaWVkIGJlZm9yZSBzdWJjb21tYW5kcyB3aGljaCBsZXRzXG4gICAqIHN1YmNvbW1hbmRzIHJldXNlIHRoZSBzYW1lIG9wdGlvbiBuYW1lcywgYW5kIGFsc28gZW5hYmxlcyBzdWJjb21tYW5kcyB0byB0dXJuIG9uIHBhc3NUaHJvdWdoT3B0aW9ucy5cbiAgICogVGhlIGRlZmF1bHQgYmVoYXZpb3VyIGlzIG5vbi1wb3NpdGlvbmFsIGFuZCBnbG9iYWwgb3B0aW9ucyBtYXkgYXBwZWFyIGFueXdoZXJlIG9uIHRoZSBjb21tYW5kIGxpbmUuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3Bvc2l0aW9uYWxdXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cbiAgZW5hYmxlUG9zaXRpb25hbE9wdGlvbnMocG9zaXRpb25hbCA9IHRydWUpIHtcbiAgICB0aGlzLl9lbmFibGVQb3NpdGlvbmFsT3B0aW9ucyA9ICEhcG9zaXRpb25hbDtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXNzIHRocm91Z2ggb3B0aW9ucyB0aGF0IGNvbWUgYWZ0ZXIgY29tbWFuZC1hcmd1bWVudHMgcmF0aGVyIHRoYW4gdHJlYXQgdGhlbSBhcyBjb21tYW5kLW9wdGlvbnMsXG4gICAqIHNvIGFjdHVhbCBjb21tYW5kLW9wdGlvbnMgY29tZSBiZWZvcmUgY29tbWFuZC1hcmd1bWVudHMuIFR1cm5pbmcgdGhpcyBvbiBmb3IgYSBzdWJjb21tYW5kIHJlcXVpcmVzXG4gICAqIHBvc2l0aW9uYWwgb3B0aW9ucyB0byBoYXZlIGJlZW4gZW5hYmxlZCBvbiB0aGUgcHJvZ3JhbSAocGFyZW50IGNvbW1hbmRzKS5cbiAgICogVGhlIGRlZmF1bHQgYmVoYXZpb3VyIGlzIG5vbi1wb3NpdGlvbmFsIGFuZCBvcHRpb25zIG1heSBhcHBlYXIgYmVmb3JlIG9yIGFmdGVyIGNvbW1hbmQtYXJndW1lbnRzLlxuICAgKlxuICAgKiBAcGFyYW0ge2Jvb2xlYW59IFtwYXNzVGhyb3VnaF0gZm9yIHVua25vd24gb3B0aW9ucy5cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuICBwYXNzVGhyb3VnaE9wdGlvbnMocGFzc1Rocm91Z2ggPSB0cnVlKSB7XG4gICAgdGhpcy5fcGFzc1Rocm91Z2hPcHRpb25zID0gISFwYXNzVGhyb3VnaDtcbiAgICB0aGlzLl9jaGVja0ZvckJyb2tlblBhc3NUaHJvdWdoKCk7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2NoZWNrRm9yQnJva2VuUGFzc1Rocm91Z2goKSB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5wYXJlbnQgJiZcbiAgICAgIHRoaXMuX3Bhc3NUaHJvdWdoT3B0aW9ucyAmJlxuICAgICAgIXRoaXMucGFyZW50Ll9lbmFibGVQb3NpdGlvbmFsT3B0aW9uc1xuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgcGFzc1Rocm91Z2hPcHRpb25zIGNhbm5vdCBiZSB1c2VkIGZvciAnJHt0aGlzLl9uYW1lfScgd2l0aG91dCB0dXJuaW5nIG9uIGVuYWJsZVBvc2l0aW9uYWxPcHRpb25zIGZvciBwYXJlbnQgY29tbWFuZChzKWAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHN0b3JlIG9wdGlvbiB2YWx1ZXMgYXMgcHJvcGVydGllcyBvbiBjb21tYW5kIG9iamVjdCxcbiAgICogb3Igc3RvcmUgc2VwYXJhdGVseSAoc3BlY2lmeSBmYWxzZSkuIEluIGJvdGggY2FzZXMgdGhlIG9wdGlvbiB2YWx1ZXMgY2FuIGJlIGFjY2Vzc2VkIHVzaW5nIC5vcHRzKCkuXG4gICAqXG4gICAqIEBwYXJhbSB7Ym9vbGVhbn0gW3N0b3JlQXNQcm9wZXJ0aWVzPXRydWVdXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBzdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMoc3RvcmVBc1Byb3BlcnRpZXMgPSB0cnVlKSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignY2FsbCAuc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzKCkgYmVmb3JlIGFkZGluZyBvcHRpb25zJyk7XG4gICAgfVxuICAgIGlmIChPYmplY3Qua2V5cyh0aGlzLl9vcHRpb25WYWx1ZXMpLmxlbmd0aCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnY2FsbCAuc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzKCkgYmVmb3JlIHNldHRpbmcgb3B0aW9uIHZhbHVlcycsXG4gICAgICApO1xuICAgIH1cbiAgICB0aGlzLl9zdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMgPSAhIXN0b3JlQXNQcm9wZXJ0aWVzO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHJpZXZlIG9wdGlvbiB2YWx1ZS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKiBAcmV0dXJuIHtvYmplY3R9IHZhbHVlXG4gICAqL1xuXG4gIGdldE9wdGlvblZhbHVlKGtleSkge1xuICAgIGlmICh0aGlzLl9zdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMpIHtcbiAgICAgIHJldHVybiB0aGlzW2tleV07XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9vcHRpb25WYWx1ZXNba2V5XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZSBvcHRpb24gdmFsdWUuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHBhcmFtIHtvYmplY3R9IHZhbHVlXG4gICAqIEByZXR1cm4ge0NvbW1hbmR9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZ1xuICAgKi9cblxuICBzZXRPcHRpb25WYWx1ZShrZXksIHZhbHVlKSB7XG4gICAgcmV0dXJuIHRoaXMuc2V0T3B0aW9uVmFsdWVXaXRoU291cmNlKGtleSwgdmFsdWUsIHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKipcbiAgICogU3RvcmUgb3B0aW9uIHZhbHVlIGFuZCB3aGVyZSB0aGUgdmFsdWUgY2FtZSBmcm9tLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30ga2V5XG4gICAqIEBwYXJhbSB7b2JqZWN0fSB2YWx1ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gc291cmNlIC0gZXhwZWN0ZWQgdmFsdWVzIGFyZSBkZWZhdWx0L2NvbmZpZy9lbnYvY2xpL2ltcGxpZWRcbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIHNldE9wdGlvblZhbHVlV2l0aFNvdXJjZShrZXksIHZhbHVlLCBzb3VyY2UpIHtcbiAgICBpZiAodGhpcy5fc3RvcmVPcHRpb25zQXNQcm9wZXJ0aWVzKSB7XG4gICAgICB0aGlzW2tleV0gPSB2YWx1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fb3B0aW9uVmFsdWVzW2tleV0gPSB2YWx1ZTtcbiAgICB9XG4gICAgdGhpcy5fb3B0aW9uVmFsdWVTb3VyY2VzW2tleV0gPSBzb3VyY2U7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHNvdXJjZSBvZiBvcHRpb24gdmFsdWUuXG4gICAqIEV4cGVjdGVkIHZhbHVlcyBhcmUgZGVmYXVsdCB8IGNvbmZpZyB8IGVudiB8IGNsaSB8IGltcGxpZWRcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGtleVxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG4gIGdldE9wdGlvblZhbHVlU291cmNlKGtleSkge1xuICAgIHJldHVybiB0aGlzLl9vcHRpb25WYWx1ZVNvdXJjZXNba2V5XTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgc291cmNlIG9mIG9wdGlvbiB2YWx1ZS4gU2VlIGFsc28gLm9wdHNXaXRoR2xvYmFscygpLlxuICAgKiBFeHBlY3RlZCB2YWx1ZXMgYXJlIGRlZmF1bHQgfCBjb25maWcgfCBlbnYgfCBjbGkgfCBpbXBsaWVkXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAgICogQHJldHVybiB7c3RyaW5nfVxuICAgKi9cblxuICBnZXRPcHRpb25WYWx1ZVNvdXJjZVdpdGhHbG9iYWxzKGtleSkge1xuICAgIC8vIGdsb2JhbCBvdmVyd3JpdGVzIGxvY2FsLCBsaWtlIG9wdHNXaXRoR2xvYmFsc1xuICAgIGxldCBzb3VyY2U7XG4gICAgdGhpcy5fZ2V0Q29tbWFuZEFuZEFuY2VzdG9ycygpLmZvckVhY2goKGNtZCkgPT4ge1xuICAgICAgaWYgKGNtZC5nZXRPcHRpb25WYWx1ZVNvdXJjZShrZXkpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgc291cmNlID0gY21kLmdldE9wdGlvblZhbHVlU291cmNlKGtleSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmV0dXJuIHNvdXJjZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgdXNlciBhcmd1bWVudHMgZnJvbSBpbXBsaWVkIG9yIGV4cGxpY2l0IGFyZ3VtZW50cy5cbiAgICogU2lkZS1lZmZlY3RzOiBzZXQgX3NjcmlwdFBhdGggaWYgYXJncyBpbmNsdWRlZCBzY3JpcHQuIFVzZWQgZm9yIGRlZmF1bHQgcHJvZ3JhbSBuYW1lLCBhbmQgc3ViY29tbWFuZCBzZWFyY2hlcy5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX3ByZXBhcmVVc2VyQXJncyhhcmd2LCBwYXJzZU9wdGlvbnMpIHtcbiAgICBpZiAoYXJndiAhPT0gdW5kZWZpbmVkICYmICFBcnJheS5pc0FycmF5KGFyZ3YpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2ZpcnN0IHBhcmFtZXRlciB0byBwYXJzZSBtdXN0IGJlIGFycmF5IG9yIHVuZGVmaW5lZCcpO1xuICAgIH1cbiAgICBwYXJzZU9wdGlvbnMgPSBwYXJzZU9wdGlvbnMgfHwge307XG5cbiAgICAvLyBhdXRvLWRldGVjdCBhcmd1bWVudCBjb252ZW50aW9ucyBpZiBub3RoaW5nIHN1cHBsaWVkXG4gICAgaWYgKGFyZ3YgPT09IHVuZGVmaW5lZCAmJiBwYXJzZU9wdGlvbnMuZnJvbSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAocHJvY2Vzcy52ZXJzaW9ucz8uZWxlY3Ryb24pIHtcbiAgICAgICAgcGFyc2VPcHRpb25zLmZyb20gPSAnZWxlY3Ryb24nO1xuICAgICAgfVxuICAgICAgLy8gY2hlY2sgbm9kZSBzcGVjaWZpYyBvcHRpb25zIGZvciBzY2VuYXJpb3Mgd2hlcmUgdXNlciBDTEkgYXJncyBmb2xsb3cgZXhlY3V0YWJsZSB3aXRob3V0IHNjcmlwdG5hbWVcbiAgICAgIGNvbnN0IGV4ZWNBcmd2ID0gcHJvY2Vzcy5leGVjQXJndiA/PyBbXTtcbiAgICAgIGlmIChcbiAgICAgICAgZXhlY0FyZ3YuaW5jbHVkZXMoJy1lJykgfHxcbiAgICAgICAgZXhlY0FyZ3YuaW5jbHVkZXMoJy0tZXZhbCcpIHx8XG4gICAgICAgIGV4ZWNBcmd2LmluY2x1ZGVzKCctcCcpIHx8XG4gICAgICAgIGV4ZWNBcmd2LmluY2x1ZGVzKCctLXByaW50JylcbiAgICAgICkge1xuICAgICAgICBwYXJzZU9wdGlvbnMuZnJvbSA9ICdldmFsJzsgLy8gaW50ZXJuYWwgdXNhZ2UsIG5vdCBkb2N1bWVudGVkXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gZGVmYXVsdCB0byB1c2luZyBwcm9jZXNzLmFyZ3ZcbiAgICBpZiAoYXJndiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBhcmd2ID0gcHJvY2Vzcy5hcmd2O1xuICAgIH1cbiAgICB0aGlzLnJhd0FyZ3MgPSBhcmd2LnNsaWNlKCk7XG5cbiAgICAvLyBleHRyYWN0IHRoZSB1c2VyIGFyZ3MgYW5kIHNjcmlwdFBhdGhcbiAgICBsZXQgdXNlckFyZ3M7XG4gICAgc3dpdGNoIChwYXJzZU9wdGlvbnMuZnJvbSkge1xuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICBjYXNlICdub2RlJzpcbiAgICAgICAgdGhpcy5fc2NyaXB0UGF0aCA9IGFyZ3ZbMV07XG4gICAgICAgIHVzZXJBcmdzID0gYXJndi5zbGljZSgyKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdlbGVjdHJvbic6XG4gICAgICAgIC8vIEB0cy1pZ25vcmU6IGJlY2F1c2UgZGVmYXVsdEFwcCBpcyBhbiB1bmtub3duIHByb3BlcnR5XG4gICAgICAgIGlmIChwcm9jZXNzLmRlZmF1bHRBcHApIHtcbiAgICAgICAgICB0aGlzLl9zY3JpcHRQYXRoID0gYXJndlsxXTtcbiAgICAgICAgICB1c2VyQXJncyA9IGFyZ3Yuc2xpY2UoMik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdXNlckFyZ3MgPSBhcmd2LnNsaWNlKDEpO1xuICAgICAgICB9XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAndXNlcic6XG4gICAgICAgIHVzZXJBcmdzID0gYXJndi5zbGljZSgwKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdldmFsJzpcbiAgICAgICAgdXNlckFyZ3MgPSBhcmd2LnNsaWNlKDEpO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgdW5leHBlY3RlZCBwYXJzZSBvcHRpb24geyBmcm9tOiAnJHtwYXJzZU9wdGlvbnMuZnJvbX0nIH1gLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIEZpbmQgZGVmYXVsdCBuYW1lIGZvciBwcm9ncmFtIGZyb20gYXJndW1lbnRzLlxuICAgIGlmICghdGhpcy5fbmFtZSAmJiB0aGlzLl9zY3JpcHRQYXRoKVxuICAgICAgdGhpcy5uYW1lRnJvbUZpbGVuYW1lKHRoaXMuX3NjcmlwdFBhdGgpO1xuICAgIHRoaXMuX25hbWUgPSB0aGlzLl9uYW1lIHx8ICdwcm9ncmFtJztcblxuICAgIHJldHVybiB1c2VyQXJncztcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBgYXJndmAsIHNldHRpbmcgb3B0aW9ucyBhbmQgaW52b2tpbmcgY29tbWFuZHMgd2hlbiBkZWZpbmVkLlxuICAgKlxuICAgKiBVc2UgcGFyc2VBc3luYyBpbnN0ZWFkIG9mIHBhcnNlIGlmIGFueSBvZiB5b3VyIGFjdGlvbiBoYW5kbGVycyBhcmUgYXN5bmMuXG4gICAqXG4gICAqIENhbGwgd2l0aCBubyBwYXJhbWV0ZXJzIHRvIHBhcnNlIGBwcm9jZXNzLmFyZ3ZgLiBEZXRlY3RzIEVsZWN0cm9uIGFuZCBzcGVjaWFsIG5vZGUgb3B0aW9ucyBsaWtlIGBub2RlIC0tZXZhbGAuIEVhc3kgbW9kZSFcbiAgICpcbiAgICogT3IgY2FsbCB3aXRoIGFuIGFycmF5IG9mIHN0cmluZ3MgdG8gcGFyc2UsIGFuZCBvcHRpb25hbGx5IHdoZXJlIHRoZSB1c2VyIGFyZ3VtZW50cyBzdGFydCBieSBzcGVjaWZ5aW5nIHdoZXJlIHRoZSBhcmd1bWVudHMgYXJlIGBmcm9tYDpcbiAgICogLSBgJ25vZGUnYDogZGVmYXVsdCwgYGFyZ3ZbMF1gIGlzIHRoZSBhcHBsaWNhdGlvbiBhbmQgYGFyZ3ZbMV1gIGlzIHRoZSBzY3JpcHQgYmVpbmcgcnVuLCB3aXRoIHVzZXIgYXJndW1lbnRzIGFmdGVyIHRoYXRcbiAgICogLSBgJ2VsZWN0cm9uJ2A6IGBhcmd2WzBdYCBpcyB0aGUgYXBwbGljYXRpb24gYW5kIGBhcmd2WzFdYCB2YXJpZXMgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGVsZWN0cm9uIGFwcGxpY2F0aW9uIGlzIHBhY2thZ2VkXG4gICAqIC0gYCd1c2VyJ2A6IGp1c3QgdXNlciBhcmd1bWVudHNcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcHJvZ3JhbS5wYXJzZSgpOyAvLyBwYXJzZSBwcm9jZXNzLmFyZ3YgYW5kIGF1dG8tZGV0ZWN0IGVsZWN0cm9uIGFuZCBzcGVjaWFsIG5vZGUgZmxhZ3NcbiAgICogcHJvZ3JhbS5wYXJzZShwcm9jZXNzLmFyZ3YpOyAvLyBhc3N1bWUgYXJndlswXSBpcyBhcHAgYW5kIGFyZ3ZbMV0gaXMgc2NyaXB0XG4gICAqIHByb2dyYW0ucGFyc2UobXktYXJncywgeyBmcm9tOiAndXNlcicgfSk7IC8vIGp1c3QgdXNlciBzdXBwbGllZCBhcmd1bWVudHMsIG5vdGhpbmcgc3BlY2lhbCBhYm91dCBhcmd2WzBdXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IFthcmd2XSAtIG9wdGlvbmFsLCBkZWZhdWx0cyB0byBwcm9jZXNzLmFyZ3ZcbiAgICogQHBhcmFtIHtvYmplY3R9IFtwYXJzZU9wdGlvbnNdIC0gb3B0aW9uYWxseSBzcGVjaWZ5IHN0eWxlIG9mIG9wdGlvbnMgd2l0aCBmcm9tOiBub2RlL3VzZXIvZWxlY3Ryb25cbiAgICogQHBhcmFtIHtzdHJpbmd9IFtwYXJzZU9wdGlvbnMuZnJvbV0gLSB3aGVyZSB0aGUgYXJncyBhcmUgZnJvbTogJ25vZGUnLCAndXNlcicsICdlbGVjdHJvbidcbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIHBhcnNlKGFyZ3YsIHBhcnNlT3B0aW9ucykge1xuICAgIHRoaXMuX3ByZXBhcmVGb3JQYXJzZSgpO1xuICAgIGNvbnN0IHVzZXJBcmdzID0gdGhpcy5fcHJlcGFyZVVzZXJBcmdzKGFyZ3YsIHBhcnNlT3B0aW9ucyk7XG4gICAgdGhpcy5fcGFyc2VDb21tYW5kKFtdLCB1c2VyQXJncyk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBQYXJzZSBgYXJndmAsIHNldHRpbmcgb3B0aW9ucyBhbmQgaW52b2tpbmcgY29tbWFuZHMgd2hlbiBkZWZpbmVkLlxuICAgKlxuICAgKiBDYWxsIHdpdGggbm8gcGFyYW1ldGVycyB0byBwYXJzZSBgcHJvY2Vzcy5hcmd2YC4gRGV0ZWN0cyBFbGVjdHJvbiBhbmQgc3BlY2lhbCBub2RlIG9wdGlvbnMgbGlrZSBgbm9kZSAtLWV2YWxgLiBFYXN5IG1vZGUhXG4gICAqXG4gICAqIE9yIGNhbGwgd2l0aCBhbiBhcnJheSBvZiBzdHJpbmdzIHRvIHBhcnNlLCBhbmQgb3B0aW9uYWxseSB3aGVyZSB0aGUgdXNlciBhcmd1bWVudHMgc3RhcnQgYnkgc3BlY2lmeWluZyB3aGVyZSB0aGUgYXJndW1lbnRzIGFyZSBgZnJvbWA6XG4gICAqIC0gYCdub2RlJ2A6IGRlZmF1bHQsIGBhcmd2WzBdYCBpcyB0aGUgYXBwbGljYXRpb24gYW5kIGBhcmd2WzFdYCBpcyB0aGUgc2NyaXB0IGJlaW5nIHJ1biwgd2l0aCB1c2VyIGFyZ3VtZW50cyBhZnRlciB0aGF0XG4gICAqIC0gYCdlbGVjdHJvbidgOiBgYXJndlswXWAgaXMgdGhlIGFwcGxpY2F0aW9uIGFuZCBgYXJndlsxXWAgdmFyaWVzIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBlbGVjdHJvbiBhcHBsaWNhdGlvbiBpcyBwYWNrYWdlZFxuICAgKiAtIGAndXNlcidgOiBqdXN0IHVzZXIgYXJndW1lbnRzXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIGF3YWl0IHByb2dyYW0ucGFyc2VBc3luYygpOyAvLyBwYXJzZSBwcm9jZXNzLmFyZ3YgYW5kIGF1dG8tZGV0ZWN0IGVsZWN0cm9uIGFuZCBzcGVjaWFsIG5vZGUgZmxhZ3NcbiAgICogYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKHByb2Nlc3MuYXJndik7IC8vIGFzc3VtZSBhcmd2WzBdIGlzIGFwcCBhbmQgYXJndlsxXSBpcyBzY3JpcHRcbiAgICogYXdhaXQgcHJvZ3JhbS5wYXJzZUFzeW5jKG15LWFyZ3MsIHsgZnJvbTogJ3VzZXInIH0pOyAvLyBqdXN0IHVzZXIgc3VwcGxpZWQgYXJndW1lbnRzLCBub3RoaW5nIHNwZWNpYWwgYWJvdXQgYXJndlswXVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbYXJndl1cbiAgICogQHBhcmFtIHtvYmplY3R9IFtwYXJzZU9wdGlvbnNdXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBwYXJzZU9wdGlvbnMuZnJvbSAtIHdoZXJlIHRoZSBhcmdzIGFyZSBmcm9tOiAnbm9kZScsICd1c2VyJywgJ2VsZWN0cm9uJ1xuICAgKiBAcmV0dXJuIHtQcm9taXNlfVxuICAgKi9cblxuICBhc3luYyBwYXJzZUFzeW5jKGFyZ3YsIHBhcnNlT3B0aW9ucykge1xuICAgIHRoaXMuX3ByZXBhcmVGb3JQYXJzZSgpO1xuICAgIGNvbnN0IHVzZXJBcmdzID0gdGhpcy5fcHJlcGFyZVVzZXJBcmdzKGFyZ3YsIHBhcnNlT3B0aW9ucyk7XG4gICAgYXdhaXQgdGhpcy5fcGFyc2VDb21tYW5kKFtdLCB1c2VyQXJncyk7XG5cbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIF9wcmVwYXJlRm9yUGFyc2UoKSB7XG4gICAgaWYgKHRoaXMuX3NhdmVkU3RhdGUgPT09IG51bGwpIHtcbiAgICAgIHRoaXMuc2F2ZVN0YXRlQmVmb3JlUGFyc2UoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5yZXN0b3JlU3RhdGVCZWZvcmVQYXJzZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDYWxsZWQgdGhlIGZpcnN0IHRpbWUgcGFyc2UgaXMgY2FsbGVkIHRvIHNhdmUgc3RhdGUgYW5kIGFsbG93IGEgcmVzdG9yZSBiZWZvcmUgc3Vic2VxdWVudCBjYWxscyB0byBwYXJzZS5cbiAgICogTm90IHVzdWFsbHkgY2FsbGVkIGRpcmVjdGx5LCBidXQgYXZhaWxhYmxlIGZvciBzdWJjbGFzc2VzIHRvIHNhdmUgdGhlaXIgY3VzdG9tIHN0YXRlLlxuICAgKlxuICAgKiBUaGlzIGlzIGNhbGxlZCBpbiBhIGxhenkgd2F5LiBPbmx5IGNvbW1hbmRzIHVzZWQgaW4gcGFyc2luZyBjaGFpbiB3aWxsIGhhdmUgc3RhdGUgc2F2ZWQuXG4gICAqL1xuICBzYXZlU3RhdGVCZWZvcmVQYXJzZSgpIHtcbiAgICB0aGlzLl9zYXZlZFN0YXRlID0ge1xuICAgICAgLy8gbmFtZSBpcyBzdGFibGUgaWYgc3VwcGxpZWQgYnkgYXV0aG9yLCBidXQgbWF5IGJlIHVuc3BlY2lmaWVkIGZvciByb290IGNvbW1hbmQgYW5kIGRlZHVjZWQgZHVyaW5nIHBhcnNpbmdcbiAgICAgIF9uYW1lOiB0aGlzLl9uYW1lLFxuICAgICAgLy8gb3B0aW9uIHZhbHVlcyBiZWZvcmUgcGFyc2UgaGF2ZSBkZWZhdWx0IHZhbHVlcyAoaW5jbHVkaW5nIGZhbHNlIGZvciBuZWdhdGVkIG9wdGlvbnMpXG4gICAgICAvLyBzaGFsbG93IGNsb25lc1xuICAgICAgX29wdGlvblZhbHVlczogeyAuLi50aGlzLl9vcHRpb25WYWx1ZXMgfSxcbiAgICAgIF9vcHRpb25WYWx1ZVNvdXJjZXM6IHsgLi4udGhpcy5fb3B0aW9uVmFsdWVTb3VyY2VzIH0sXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXN0b3JlIHN0YXRlIGJlZm9yZSBwYXJzZSBmb3IgY2FsbHMgYWZ0ZXIgdGhlIGZpcnN0LlxuICAgKiBOb3QgdXN1YWxseSBjYWxsZWQgZGlyZWN0bHksIGJ1dCBhdmFpbGFibGUgZm9yIHN1YmNsYXNzZXMgdG8gc2F2ZSB0aGVpciBjdXN0b20gc3RhdGUuXG4gICAqXG4gICAqIFRoaXMgaXMgY2FsbGVkIGluIGEgbGF6eSB3YXkuIE9ubHkgY29tbWFuZHMgdXNlZCBpbiBwYXJzaW5nIGNoYWluIHdpbGwgaGF2ZSBzdGF0ZSByZXN0b3JlZC5cbiAgICovXG4gIHJlc3RvcmVTdGF0ZUJlZm9yZVBhcnNlKCkge1xuICAgIGlmICh0aGlzLl9zdG9yZU9wdGlvbnNBc1Byb3BlcnRpZXMpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbiBub3QgY2FsbCBwYXJzZSBhZ2FpbiB3aGVuIHN0b3JlT3B0aW9uc0FzUHJvcGVydGllcyBpcyB0cnVlLlxuLSBlaXRoZXIgbWFrZSBhIG5ldyBDb21tYW5kIGZvciBlYWNoIGNhbGwgdG8gcGFyc2UsIG9yIHN0b3Agc3RvcmluZyBvcHRpb25zIGFzIHByb3BlcnRpZXNgKTtcblxuICAgIC8vIGNsZWFyIHN0YXRlIGZyb20gX3ByZXBhcmVVc2VyQXJnc1xuICAgIHRoaXMuX25hbWUgPSB0aGlzLl9zYXZlZFN0YXRlLl9uYW1lO1xuICAgIHRoaXMuX3NjcmlwdFBhdGggPSBudWxsO1xuICAgIHRoaXMucmF3QXJncyA9IFtdO1xuICAgIC8vIGNsZWFyIHN0YXRlIGZyb20gc2V0T3B0aW9uVmFsdWVXaXRoU291cmNlXG4gICAgdGhpcy5fb3B0aW9uVmFsdWVzID0geyAuLi50aGlzLl9zYXZlZFN0YXRlLl9vcHRpb25WYWx1ZXMgfTtcbiAgICB0aGlzLl9vcHRpb25WYWx1ZVNvdXJjZXMgPSB7IC4uLnRoaXMuX3NhdmVkU3RhdGUuX29wdGlvblZhbHVlU291cmNlcyB9O1xuICAgIC8vIGNsZWFyIHN0YXRlIGZyb20gX3BhcnNlQ29tbWFuZFxuICAgIHRoaXMuYXJncyA9IFtdO1xuICAgIC8vIGNsZWFyIHN0YXRlIGZyb20gX3Byb2Nlc3NBcmd1bWVudHNcbiAgICB0aGlzLnByb2Nlc3NlZEFyZ3MgPSBbXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaHJvdyBpZiBleHBlY3RlZCBleGVjdXRhYmxlIGlzIG1pc3NpbmcuIEFkZCBsb3RzIG9mIGhlbHAgZm9yIGF1dGhvci5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGV4ZWN1dGFibGVGaWxlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBleGVjdXRhYmxlRGlyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBzdWJjb21tYW5kTmFtZVxuICAgKi9cbiAgX2NoZWNrRm9yTWlzc2luZ0V4ZWN1dGFibGUoZXhlY3V0YWJsZUZpbGUsIGV4ZWN1dGFibGVEaXIsIHN1YmNvbW1hbmROYW1lKSB7XG4gICAgaWYgKGZzLmV4aXN0c1N5bmMoZXhlY3V0YWJsZUZpbGUpKSByZXR1cm47XG5cbiAgICBjb25zdCBleGVjdXRhYmxlRGlyTWVzc2FnZSA9IGV4ZWN1dGFibGVEaXJcbiAgICAgID8gYHNlYXJjaGVkIGZvciBsb2NhbCBzdWJjb21tYW5kIHJlbGF0aXZlIHRvIGRpcmVjdG9yeSAnJHtleGVjdXRhYmxlRGlyfSdgXG4gICAgICA6ICdubyBkaXJlY3RvcnkgZm9yIHNlYXJjaCBmb3IgbG9jYWwgc3ViY29tbWFuZCwgdXNlIC5leGVjdXRhYmxlRGlyKCkgdG8gc3VwcGx5IGEgY3VzdG9tIGRpcmVjdG9yeSc7XG4gICAgY29uc3QgZXhlY3V0YWJsZU1pc3NpbmcgPSBgJyR7ZXhlY3V0YWJsZUZpbGV9JyBkb2VzIG5vdCBleGlzdFxuIC0gaWYgJyR7c3ViY29tbWFuZE5hbWV9JyBpcyBub3QgbWVhbnQgdG8gYmUgYW4gZXhlY3V0YWJsZSBjb21tYW5kLCByZW1vdmUgZGVzY3JpcHRpb24gcGFyYW1ldGVyIGZyb20gJy5jb21tYW5kKCknIGFuZCB1c2UgJy5kZXNjcmlwdGlvbigpJyBpbnN0ZWFkXG4gLSBpZiB0aGUgZGVmYXVsdCBleGVjdXRhYmxlIG5hbWUgaXMgbm90IHN1aXRhYmxlLCB1c2UgdGhlIGV4ZWN1dGFibGVGaWxlIG9wdGlvbiB0byBzdXBwbHkgYSBjdXN0b20gbmFtZSBvciBwYXRoXG4gLSAke2V4ZWN1dGFibGVEaXJNZXNzYWdlfWA7XG4gICAgdGhyb3cgbmV3IEVycm9yKGV4ZWN1dGFibGVNaXNzaW5nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgc3ViLWNvbW1hbmQgZXhlY3V0YWJsZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2V4ZWN1dGVTdWJDb21tYW5kKHN1YmNvbW1hbmQsIGFyZ3MpIHtcbiAgICBhcmdzID0gYXJncy5zbGljZSgpO1xuICAgIGxldCBsYXVuY2hXaXRoTm9kZSA9IGZhbHNlOyAvLyBVc2Ugbm9kZSBmb3Igc291cmNlIHRhcmdldHMgc28gZG8gbm90IG5lZWQgdG8gZ2V0IHBlcm1pc3Npb25zIGNvcnJlY3QsIGFuZCBvbiBXaW5kb3dzLlxuICAgIGNvbnN0IHNvdXJjZUV4dCA9IFsnLmpzJywgJy50cycsICcudHN4JywgJy5tanMnLCAnLmNqcyddO1xuXG4gICAgZnVuY3Rpb24gZmluZEZpbGUoYmFzZURpciwgYmFzZU5hbWUpIHtcbiAgICAgIC8vIExvb2sgZm9yIHNwZWNpZmllZCBmaWxlXG4gICAgICBjb25zdCBsb2NhbEJpbiA9IHBhdGgucmVzb2x2ZShiYXNlRGlyLCBiYXNlTmFtZSk7XG4gICAgICBpZiAoZnMuZXhpc3RzU3luYyhsb2NhbEJpbikpIHJldHVybiBsb2NhbEJpbjtcblxuICAgICAgLy8gU3RvcCBsb29raW5nIGlmIGNhbmRpZGF0ZSBhbHJlYWR5IGhhcyBhbiBleHBlY3RlZCBleHRlbnNpb24uXG4gICAgICBpZiAoc291cmNlRXh0LmluY2x1ZGVzKHBhdGguZXh0bmFtZShiYXNlTmFtZSkpKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgICAvLyBUcnkgYWxsIHRoZSBleHRlbnNpb25zLlxuICAgICAgY29uc3QgZm91bmRFeHQgPSBzb3VyY2VFeHQuZmluZCgoZXh0KSA9PlxuICAgICAgICBmcy5leGlzdHNTeW5jKGAke2xvY2FsQmlufSR7ZXh0fWApLFxuICAgICAgKTtcbiAgICAgIGlmIChmb3VuZEV4dCkgcmV0dXJuIGAke2xvY2FsQmlufSR7Zm91bmRFeHR9YDtcblxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICAvLyBOb3QgY2hlY2tpbmcgZm9yIGhlbHAgZmlyc3QuIFVubGlrZWx5IHRvIGhhdmUgbWFuZGF0b3J5IGFuZCBleGVjdXRhYmxlLCBhbmQgY2FuJ3Qgcm9idXN0bHkgdGVzdCBmb3IgaGVscCBmbGFncyBpbiBleHRlcm5hbCBjb21tYW5kLlxuICAgIHRoaXMuX2NoZWNrRm9yTWlzc2luZ01hbmRhdG9yeU9wdGlvbnMoKTtcbiAgICB0aGlzLl9jaGVja0ZvckNvbmZsaWN0aW5nT3B0aW9ucygpO1xuXG4gICAgLy8gZXhlY3V0YWJsZUZpbGUgYW5kIGV4ZWN1dGFibGVEaXIgbWlnaHQgYmUgZnVsbCBwYXRoLCBvciBqdXN0IGEgbmFtZVxuICAgIGxldCBleGVjdXRhYmxlRmlsZSA9XG4gICAgICBzdWJjb21tYW5kLl9leGVjdXRhYmxlRmlsZSB8fCBgJHt0aGlzLl9uYW1lfS0ke3N1YmNvbW1hbmQuX25hbWV9YDtcbiAgICBsZXQgZXhlY3V0YWJsZURpciA9IHRoaXMuX2V4ZWN1dGFibGVEaXIgfHwgJyc7XG4gICAgaWYgKHRoaXMuX3NjcmlwdFBhdGgpIHtcbiAgICAgIGxldCByZXNvbHZlZFNjcmlwdFBhdGg7IC8vIHJlc29sdmUgcG9zc2libGUgc3ltbGluayBmb3IgaW5zdGFsbGVkIG5wbSBiaW5hcnlcbiAgICAgIHRyeSB7XG4gICAgICAgIHJlc29sdmVkU2NyaXB0UGF0aCA9IGZzLnJlYWxwYXRoU3luYyh0aGlzLl9zY3JpcHRQYXRoKTtcbiAgICAgIH0gY2F0Y2gge1xuICAgICAgICByZXNvbHZlZFNjcmlwdFBhdGggPSB0aGlzLl9zY3JpcHRQYXRoO1xuICAgICAgfVxuICAgICAgZXhlY3V0YWJsZURpciA9IHBhdGgucmVzb2x2ZShcbiAgICAgICAgcGF0aC5kaXJuYW1lKHJlc29sdmVkU2NyaXB0UGF0aCksXG4gICAgICAgIGV4ZWN1dGFibGVEaXIsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIExvb2sgZm9yIGEgbG9jYWwgZmlsZSBpbiBwcmVmZXJlbmNlIHRvIGEgY29tbWFuZCBpbiBQQVRILlxuICAgIGlmIChleGVjdXRhYmxlRGlyKSB7XG4gICAgICBsZXQgbG9jYWxGaWxlID0gZmluZEZpbGUoZXhlY3V0YWJsZURpciwgZXhlY3V0YWJsZUZpbGUpO1xuXG4gICAgICAvLyBMZWdhY3kgc2VhcmNoIHVzaW5nIHByZWZpeCBvZiBzY3JpcHQgbmFtZSBpbnN0ZWFkIG9mIGNvbW1hbmQgbmFtZVxuICAgICAgaWYgKCFsb2NhbEZpbGUgJiYgIXN1YmNvbW1hbmQuX2V4ZWN1dGFibGVGaWxlICYmIHRoaXMuX3NjcmlwdFBhdGgpIHtcbiAgICAgICAgY29uc3QgbGVnYWN5TmFtZSA9IHBhdGguYmFzZW5hbWUoXG4gICAgICAgICAgdGhpcy5fc2NyaXB0UGF0aCxcbiAgICAgICAgICBwYXRoLmV4dG5hbWUodGhpcy5fc2NyaXB0UGF0aCksXG4gICAgICAgICk7XG4gICAgICAgIGlmIChsZWdhY3lOYW1lICE9PSB0aGlzLl9uYW1lKSB7XG4gICAgICAgICAgbG9jYWxGaWxlID0gZmluZEZpbGUoXG4gICAgICAgICAgICBleGVjdXRhYmxlRGlyLFxuICAgICAgICAgICAgYCR7bGVnYWN5TmFtZX0tJHtzdWJjb21tYW5kLl9uYW1lfWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZXhlY3V0YWJsZUZpbGUgPSBsb2NhbEZpbGUgfHwgZXhlY3V0YWJsZUZpbGU7XG4gICAgfVxuXG4gICAgbGF1bmNoV2l0aE5vZGUgPSBzb3VyY2VFeHQuaW5jbHVkZXMocGF0aC5leHRuYW1lKGV4ZWN1dGFibGVGaWxlKSk7XG5cbiAgICBsZXQgcHJvYztcbiAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSAhPT0gJ3dpbjMyJykge1xuICAgICAgaWYgKGxhdW5jaFdpdGhOb2RlKSB7XG4gICAgICAgIGFyZ3MudW5zaGlmdChleGVjdXRhYmxlRmlsZSk7XG4gICAgICAgIC8vIGFkZCBleGVjdXRhYmxlIGFyZ3VtZW50cyB0byBzcGF3blxuICAgICAgICBhcmdzID0gaW5jcmVtZW50Tm9kZUluc3BlY3RvclBvcnQocHJvY2Vzcy5leGVjQXJndikuY29uY2F0KGFyZ3MpO1xuXG4gICAgICAgIHByb2MgPSBjaGlsZFByb2Nlc3Muc3Bhd24ocHJvY2Vzcy5hcmd2WzBdLCBhcmdzLCB7IHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBwcm9jID0gY2hpbGRQcm9jZXNzLnNwYXduKGV4ZWN1dGFibGVGaWxlLCBhcmdzLCB7IHN0ZGlvOiAnaW5oZXJpdCcgfSk7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2NoZWNrRm9yTWlzc2luZ0V4ZWN1dGFibGUoXG4gICAgICAgIGV4ZWN1dGFibGVGaWxlLFxuICAgICAgICBleGVjdXRhYmxlRGlyLFxuICAgICAgICBzdWJjb21tYW5kLl9uYW1lLFxuICAgICAgKTtcbiAgICAgIGFyZ3MudW5zaGlmdChleGVjdXRhYmxlRmlsZSk7XG4gICAgICAvLyBhZGQgZXhlY3V0YWJsZSBhcmd1bWVudHMgdG8gc3Bhd25cbiAgICAgIGFyZ3MgPSBpbmNyZW1lbnROb2RlSW5zcGVjdG9yUG9ydChwcm9jZXNzLmV4ZWNBcmd2KS5jb25jYXQoYXJncyk7XG4gICAgICBwcm9jID0gY2hpbGRQcm9jZXNzLnNwYXduKHByb2Nlc3MuZXhlY1BhdGgsIGFyZ3MsIHsgc3RkaW86ICdpbmhlcml0JyB9KTtcbiAgICB9XG5cbiAgICBpZiAoIXByb2Mua2lsbGVkKSB7XG4gICAgICAvLyB0ZXN0aW5nIG1haW5seSB0byBhdm9pZCBsZWFrIHdhcm5pbmdzIGR1cmluZyB1bml0IHRlc3RzIHdpdGggbW9ja2VkIHNwYXduXG4gICAgICBjb25zdCBzaWduYWxzID0gWydTSUdVU1IxJywgJ1NJR1VTUjInLCAnU0lHVEVSTScsICdTSUdJTlQnLCAnU0lHSFVQJ107XG4gICAgICBzaWduYWxzLmZvckVhY2goKHNpZ25hbCkgPT4ge1xuICAgICAgICBwcm9jZXNzLm9uKHNpZ25hbCwgKCkgPT4ge1xuICAgICAgICAgIGlmIChwcm9jLmtpbGxlZCA9PT0gZmFsc2UgJiYgcHJvYy5leGl0Q29kZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gQHRzLWlnbm9yZSBiZWNhdXNlIHNpZ25hbHMgbm90IHR5cGVkIHRvIGtub3duIHN0cmluZ3NcbiAgICAgICAgICAgIHByb2Mua2lsbChzaWduYWwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICAvLyBCeSBkZWZhdWx0IHRlcm1pbmF0ZSBwcm9jZXNzIHdoZW4gc3Bhd25lZCBwcm9jZXNzIHRlcm1pbmF0ZXMuXG4gICAgY29uc3QgZXhpdENhbGxiYWNrID0gdGhpcy5fZXhpdENhbGxiYWNrO1xuICAgIHByb2Mub24oJ2Nsb3NlJywgKGNvZGUpID0+IHtcbiAgICAgIGNvZGUgPSBjb2RlID8/IDE7IC8vIGNvZGUgaXMgbnVsbCBpZiBzcGF3bmVkIHByb2Nlc3MgdGVybWluYXRlZCBkdWUgdG8gYSBzaWduYWxcbiAgICAgIGlmICghZXhpdENhbGxiYWNrKSB7XG4gICAgICAgIHByb2Nlc3MuZXhpdChjb2RlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGV4aXRDYWxsYmFjayhcbiAgICAgICAgICBuZXcgQ29tbWFuZGVyRXJyb3IoXG4gICAgICAgICAgICBjb2RlLFxuICAgICAgICAgICAgJ2NvbW1hbmRlci5leGVjdXRlU3ViQ29tbWFuZEFzeW5jJyxcbiAgICAgICAgICAgICcoY2xvc2UpJyxcbiAgICAgICAgICApLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHByb2Mub24oJ2Vycm9yJywgKGVycikgPT4ge1xuICAgICAgLy8gQHRzLWlnbm9yZTogYmVjYXVzZSBlcnIuY29kZSBpcyBhbiB1bmtub3duIHByb3BlcnR5XG4gICAgICBpZiAoZXJyLmNvZGUgPT09ICdFTk9FTlQnKSB7XG4gICAgICAgIHRoaXMuX2NoZWNrRm9yTWlzc2luZ0V4ZWN1dGFibGUoXG4gICAgICAgICAgZXhlY3V0YWJsZUZpbGUsXG4gICAgICAgICAgZXhlY3V0YWJsZURpcixcbiAgICAgICAgICBzdWJjb21tYW5kLl9uYW1lLFxuICAgICAgICApO1xuICAgICAgICAvLyBAdHMtaWdub3JlOiBiZWNhdXNlIGVyci5jb2RlIGlzIGFuIHVua25vd24gcHJvcGVydHlcbiAgICAgIH0gZWxzZSBpZiAoZXJyLmNvZGUgPT09ICdFQUNDRVMnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgJyR7ZXhlY3V0YWJsZUZpbGV9JyBub3QgZXhlY3V0YWJsZWApO1xuICAgICAgfVxuICAgICAgaWYgKCFleGl0Q2FsbGJhY2spIHtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3Qgd3JhcHBlZEVycm9yID0gbmV3IENvbW1hbmRlckVycm9yKFxuICAgICAgICAgIDEsXG4gICAgICAgICAgJ2NvbW1hbmRlci5leGVjdXRlU3ViQ29tbWFuZEFzeW5jJyxcbiAgICAgICAgICAnKGVycm9yKScsXG4gICAgICAgICk7XG4gICAgICAgIHdyYXBwZWRFcnJvci5uZXN0ZWRFcnJvciA9IGVycjtcbiAgICAgICAgZXhpdENhbGxiYWNrKHdyYXBwZWRFcnJvcik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICAvLyBTdG9yZSB0aGUgcmVmZXJlbmNlIHRvIHRoZSBjaGlsZCBwcm9jZXNzXG4gICAgdGhpcy5ydW5uaW5nQ29tbWFuZCA9IHByb2M7XG4gIH1cblxuICAvKipcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2Rpc3BhdGNoU3ViY29tbWFuZChjb21tYW5kTmFtZSwgb3BlcmFuZHMsIHVua25vd24pIHtcbiAgICBjb25zdCBzdWJDb21tYW5kID0gdGhpcy5fZmluZENvbW1hbmQoY29tbWFuZE5hbWUpO1xuICAgIGlmICghc3ViQ29tbWFuZCkgdGhpcy5oZWxwKHsgZXJyb3I6IHRydWUgfSk7XG5cbiAgICBzdWJDb21tYW5kLl9wcmVwYXJlRm9yUGFyc2UoKTtcbiAgICBsZXQgcHJvbWlzZUNoYWluO1xuICAgIHByb21pc2VDaGFpbiA9IHRoaXMuX2NoYWluT3JDYWxsU3ViQ29tbWFuZEhvb2soXG4gICAgICBwcm9taXNlQ2hhaW4sXG4gICAgICBzdWJDb21tYW5kLFxuICAgICAgJ3ByZVN1YmNvbW1hbmQnLFxuICAgICk7XG4gICAgcHJvbWlzZUNoYWluID0gdGhpcy5fY2hhaW5PckNhbGwocHJvbWlzZUNoYWluLCAoKSA9PiB7XG4gICAgICBpZiAoc3ViQ29tbWFuZC5fZXhlY3V0YWJsZUhhbmRsZXIpIHtcbiAgICAgICAgdGhpcy5fZXhlY3V0ZVN1YkNvbW1hbmQoc3ViQ29tbWFuZCwgb3BlcmFuZHMuY29uY2F0KHVua25vd24pKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJldHVybiBzdWJDb21tYW5kLl9wYXJzZUNvbW1hbmQob3BlcmFuZHMsIHVua25vd24pO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiBwcm9taXNlQ2hhaW47XG4gIH1cblxuICAvKipcbiAgICogSW52b2tlIGhlbHAgZGlyZWN0bHkgaWYgcG9zc2libGUsIG9yIGRpc3BhdGNoIGlmIG5lY2Vzc2FyeS5cbiAgICogZS5nLiBoZWxwIGZvb1xuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfZGlzcGF0Y2hIZWxwQ29tbWFuZChzdWJjb21tYW5kTmFtZSkge1xuICAgIGlmICghc3ViY29tbWFuZE5hbWUpIHtcbiAgICAgIHRoaXMuaGVscCgpO1xuICAgIH1cbiAgICBjb25zdCBzdWJDb21tYW5kID0gdGhpcy5fZmluZENvbW1hbmQoc3ViY29tbWFuZE5hbWUpO1xuICAgIGlmIChzdWJDb21tYW5kICYmICFzdWJDb21tYW5kLl9leGVjdXRhYmxlSGFuZGxlcikge1xuICAgICAgc3ViQ29tbWFuZC5oZWxwKCk7XG4gICAgfVxuXG4gICAgLy8gRmFsbGJhY2sgdG8gcGFyc2luZyB0aGUgaGVscCBmbGFnIHRvIGludm9rZSB0aGUgaGVscC5cbiAgICByZXR1cm4gdGhpcy5fZGlzcGF0Y2hTdWJjb21tYW5kKFxuICAgICAgc3ViY29tbWFuZE5hbWUsXG4gICAgICBbXSxcbiAgICAgIFt0aGlzLl9nZXRIZWxwT3B0aW9uKCk/LmxvbmcgPz8gdGhpcy5fZ2V0SGVscE9wdGlvbigpPy5zaG9ydCA/PyAnLS1oZWxwJ10sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVjayB0aGlzLmFyZ3MgYWdhaW5zdCBleHBlY3RlZCB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9jaGVja051bWJlck9mQXJndW1lbnRzKCkge1xuICAgIC8vIHRvbyBmZXdcbiAgICB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMuZm9yRWFjaCgoYXJnLCBpKSA9PiB7XG4gICAgICBpZiAoYXJnLnJlcXVpcmVkICYmIHRoaXMuYXJnc1tpXSA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMubWlzc2luZ0FyZ3VtZW50KGFyZy5uYW1lKCkpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIC8vIHRvbyBtYW55XG4gICAgaWYgKFxuICAgICAgdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzLmxlbmd0aCA+IDAgJiZcbiAgICAgIHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50c1t0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMubGVuZ3RoIC0gMV0udmFyaWFkaWNcbiAgICApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKHRoaXMuYXJncy5sZW5ndGggPiB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMubGVuZ3RoKSB7XG4gICAgICB0aGlzLl9leGNlc3NBcmd1bWVudHModGhpcy5hcmdzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUHJvY2VzcyB0aGlzLmFyZ3MgdXNpbmcgdGhpcy5yZWdpc3RlcmVkQXJndW1lbnRzIGFuZCBzYXZlIGFzIHRoaXMucHJvY2Vzc2VkQXJncyFcbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX3Byb2Nlc3NBcmd1bWVudHMoKSB7XG4gICAgY29uc3QgbXlQYXJzZUFyZyA9IChhcmd1bWVudCwgdmFsdWUsIHByZXZpb3VzKSA9PiB7XG4gICAgICAvLyBFeHRyYSBwcm9jZXNzaW5nIGZvciBuaWNlIGVycm9yIG1lc3NhZ2Ugb24gcGFyc2luZyBmYWlsdXJlLlxuICAgICAgbGV0IHBhcnNlZFZhbHVlID0gdmFsdWU7XG4gICAgICBpZiAodmFsdWUgIT09IG51bGwgJiYgYXJndW1lbnQucGFyc2VBcmcpIHtcbiAgICAgICAgY29uc3QgaW52YWxpZFZhbHVlTWVzc2FnZSA9IGBlcnJvcjogY29tbWFuZC1hcmd1bWVudCB2YWx1ZSAnJHt2YWx1ZX0nIGlzIGludmFsaWQgZm9yIGFyZ3VtZW50ICcke2FyZ3VtZW50Lm5hbWUoKX0nLmA7XG4gICAgICAgIHBhcnNlZFZhbHVlID0gdGhpcy5fY2FsbFBhcnNlQXJnKFxuICAgICAgICAgIGFyZ3VtZW50LFxuICAgICAgICAgIHZhbHVlLFxuICAgICAgICAgIHByZXZpb3VzLFxuICAgICAgICAgIGludmFsaWRWYWx1ZU1lc3NhZ2UsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcGFyc2VkVmFsdWU7XG4gICAgfTtcblxuICAgIHRoaXMuX2NoZWNrTnVtYmVyT2ZBcmd1bWVudHMoKTtcblxuICAgIGNvbnN0IHByb2Nlc3NlZEFyZ3MgPSBbXTtcbiAgICB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMuZm9yRWFjaCgoZGVjbGFyZWRBcmcsIGluZGV4KSA9PiB7XG4gICAgICBsZXQgdmFsdWUgPSBkZWNsYXJlZEFyZy5kZWZhdWx0VmFsdWU7XG4gICAgICBpZiAoZGVjbGFyZWRBcmcudmFyaWFkaWMpIHtcbiAgICAgICAgLy8gQ29sbGVjdCB0b2dldGhlciByZW1haW5pbmcgYXJndW1lbnRzIGZvciBwYXNzaW5nIHRvZ2V0aGVyIGFzIGFuIGFycmF5LlxuICAgICAgICBpZiAoaW5kZXggPCB0aGlzLmFyZ3MubGVuZ3RoKSB7XG4gICAgICAgICAgdmFsdWUgPSB0aGlzLmFyZ3Muc2xpY2UoaW5kZXgpO1xuICAgICAgICAgIGlmIChkZWNsYXJlZEFyZy5wYXJzZUFyZykge1xuICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZS5yZWR1Y2UoKHByb2Nlc3NlZCwgdikgPT4ge1xuICAgICAgICAgICAgICByZXR1cm4gbXlQYXJzZUFyZyhkZWNsYXJlZEFyZywgdiwgcHJvY2Vzc2VkKTtcbiAgICAgICAgICAgIH0sIGRlY2xhcmVkQXJnLmRlZmF1bHRWYWx1ZSk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB2YWx1ZSA9IFtdO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGluZGV4IDwgdGhpcy5hcmdzLmxlbmd0aCkge1xuICAgICAgICB2YWx1ZSA9IHRoaXMuYXJnc1tpbmRleF07XG4gICAgICAgIGlmIChkZWNsYXJlZEFyZy5wYXJzZUFyZykge1xuICAgICAgICAgIHZhbHVlID0gbXlQYXJzZUFyZyhkZWNsYXJlZEFyZywgdmFsdWUsIGRlY2xhcmVkQXJnLmRlZmF1bHRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHByb2Nlc3NlZEFyZ3NbaW5kZXhdID0gdmFsdWU7XG4gICAgfSk7XG4gICAgdGhpcy5wcm9jZXNzZWRBcmdzID0gcHJvY2Vzc2VkQXJncztcbiAgfVxuXG4gIC8qKlxuICAgKiBPbmNlIHdlIGhhdmUgYSBwcm9taXNlIHdlIGNoYWluLCBidXQgY2FsbCBzeW5jaHJvbm91c2x5IHVudGlsIHRoZW4uXG4gICAqXG4gICAqIEBwYXJhbSB7KFByb21pc2V8dW5kZWZpbmVkKX0gcHJvbWlzZVxuICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICAgKiBAcmV0dXJuIHsoUHJvbWlzZXx1bmRlZmluZWQpfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfY2hhaW5PckNhbGwocHJvbWlzZSwgZm4pIHtcbiAgICAvLyB0aGVuYWJsZVxuICAgIGlmIChwcm9taXNlPy50aGVuICYmIHR5cGVvZiBwcm9taXNlLnRoZW4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIC8vIGFscmVhZHkgaGF2ZSBhIHByb21pc2UsIGNoYWluIGNhbGxiYWNrXG4gICAgICByZXR1cm4gcHJvbWlzZS50aGVuKCgpID0+IGZuKCkpO1xuICAgIH1cbiAgICAvLyBjYWxsYmFjayBtaWdodCByZXR1cm4gYSBwcm9taXNlXG4gICAgcmV0dXJuIGZuKCk7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHsoUHJvbWlzZXx1bmRlZmluZWQpfSBwcm9taXNlXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBldmVudFxuICAgKiBAcmV0dXJuIHsoUHJvbWlzZXx1bmRlZmluZWQpfVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfY2hhaW5PckNhbGxIb29rcyhwcm9taXNlLCBldmVudCkge1xuICAgIGxldCByZXN1bHQgPSBwcm9taXNlO1xuICAgIGNvbnN0IGhvb2tzID0gW107XG4gICAgdGhpcy5fZ2V0Q29tbWFuZEFuZEFuY2VzdG9ycygpXG4gICAgICAucmV2ZXJzZSgpXG4gICAgICAuZmlsdGVyKChjbWQpID0+IGNtZC5fbGlmZUN5Y2xlSG9va3NbZXZlbnRdICE9PSB1bmRlZmluZWQpXG4gICAgICAuZm9yRWFjaCgoaG9va2VkQ29tbWFuZCkgPT4ge1xuICAgICAgICBob29rZWRDb21tYW5kLl9saWZlQ3ljbGVIb29rc1tldmVudF0uZm9yRWFjaCgoY2FsbGJhY2spID0+IHtcbiAgICAgICAgICBob29rcy5wdXNoKHsgaG9va2VkQ29tbWFuZCwgY2FsbGJhY2sgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgaWYgKGV2ZW50ID09PSAncG9zdEFjdGlvbicpIHtcbiAgICAgIGhvb2tzLnJldmVyc2UoKTtcbiAgICB9XG5cbiAgICBob29rcy5mb3JFYWNoKChob29rRGV0YWlsKSA9PiB7XG4gICAgICByZXN1bHQgPSB0aGlzLl9jaGFpbk9yQ2FsbChyZXN1bHQsICgpID0+IHtcbiAgICAgICAgcmV0dXJuIGhvb2tEZXRhaWwuY2FsbGJhY2soaG9va0RldGFpbC5ob29rZWRDb21tYW5kLCB0aGlzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHsoUHJvbWlzZXx1bmRlZmluZWQpfSBwcm9taXNlXG4gICAqIEBwYXJhbSB7Q29tbWFuZH0gc3ViQ29tbWFuZFxuICAgKiBAcGFyYW0ge3N0cmluZ30gZXZlbnRcbiAgICogQHJldHVybiB7KFByb21pc2V8dW5kZWZpbmVkKX1cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgX2NoYWluT3JDYWxsU3ViQ29tbWFuZEhvb2socHJvbWlzZSwgc3ViQ29tbWFuZCwgZXZlbnQpIHtcbiAgICBsZXQgcmVzdWx0ID0gcHJvbWlzZTtcbiAgICBpZiAodGhpcy5fbGlmZUN5Y2xlSG9va3NbZXZlbnRdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuX2xpZmVDeWNsZUhvb2tzW2V2ZW50XS5mb3JFYWNoKChob29rKSA9PiB7XG4gICAgICAgIHJlc3VsdCA9IHRoaXMuX2NoYWluT3JDYWxsKHJlc3VsdCwgKCkgPT4ge1xuICAgICAgICAgIHJldHVybiBob29rKHRoaXMsIHN1YkNvbW1hbmQpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIFByb2Nlc3MgYXJndW1lbnRzIGluIGNvbnRleHQgb2YgdGhpcyBjb21tYW5kLlxuICAgKiBSZXR1cm5zIGFjdGlvbiByZXN1bHQsIGluIGNhc2UgaXQgaXMgYSBwcm9taXNlLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfcGFyc2VDb21tYW5kKG9wZXJhbmRzLCB1bmtub3duKSB7XG4gICAgY29uc3QgcGFyc2VkID0gdGhpcy5wYXJzZU9wdGlvbnModW5rbm93bik7XG4gICAgdGhpcy5fcGFyc2VPcHRpb25zRW52KCk7IC8vIGFmdGVyIGNsaSwgc28gcGFyc2VBcmcgbm90IGNhbGxlZCBvbiBib3RoIGNsaSBhbmQgZW52XG4gICAgdGhpcy5fcGFyc2VPcHRpb25zSW1wbGllZCgpO1xuICAgIG9wZXJhbmRzID0gb3BlcmFuZHMuY29uY2F0KHBhcnNlZC5vcGVyYW5kcyk7XG4gICAgdW5rbm93biA9IHBhcnNlZC51bmtub3duO1xuICAgIHRoaXMuYXJncyA9IG9wZXJhbmRzLmNvbmNhdCh1bmtub3duKTtcblxuICAgIGlmIChvcGVyYW5kcyAmJiB0aGlzLl9maW5kQ29tbWFuZChvcGVyYW5kc1swXSkpIHtcbiAgICAgIHJldHVybiB0aGlzLl9kaXNwYXRjaFN1YmNvbW1hbmQob3BlcmFuZHNbMF0sIG9wZXJhbmRzLnNsaWNlKDEpLCB1bmtub3duKTtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy5fZ2V0SGVscENvbW1hbmQoKSAmJlxuICAgICAgb3BlcmFuZHNbMF0gPT09IHRoaXMuX2dldEhlbHBDb21tYW5kKCkubmFtZSgpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdGhpcy5fZGlzcGF0Y2hIZWxwQ29tbWFuZChvcGVyYW5kc1sxXSk7XG4gICAgfVxuICAgIGlmICh0aGlzLl9kZWZhdWx0Q29tbWFuZE5hbWUpIHtcbiAgICAgIHRoaXMuX291dHB1dEhlbHBJZlJlcXVlc3RlZCh1bmtub3duKTsgLy8gUnVuIHRoZSBoZWxwIGZvciBkZWZhdWx0IGNvbW1hbmQgZnJvbSBwYXJlbnQgcmF0aGVyIHRoYW4gcGFzc2luZyB0byBkZWZhdWx0IGNvbW1hbmRcbiAgICAgIHJldHVybiB0aGlzLl9kaXNwYXRjaFN1YmNvbW1hbmQoXG4gICAgICAgIHRoaXMuX2RlZmF1bHRDb21tYW5kTmFtZSxcbiAgICAgICAgb3BlcmFuZHMsXG4gICAgICAgIHVua25vd24sXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoXG4gICAgICB0aGlzLmNvbW1hbmRzLmxlbmd0aCAmJlxuICAgICAgdGhpcy5hcmdzLmxlbmd0aCA9PT0gMCAmJlxuICAgICAgIXRoaXMuX2FjdGlvbkhhbmRsZXIgJiZcbiAgICAgICF0aGlzLl9kZWZhdWx0Q29tbWFuZE5hbWVcbiAgICApIHtcbiAgICAgIC8vIHByb2JhYmx5IG1pc3Npbmcgc3ViY29tbWFuZCBhbmQgbm8gaGFuZGxlciwgdXNlciBuZWVkcyBoZWxwIChhbmQgZXhpdClcbiAgICAgIHRoaXMuaGVscCh7IGVycm9yOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIHRoaXMuX291dHB1dEhlbHBJZlJlcXVlc3RlZChwYXJzZWQudW5rbm93bik7XG4gICAgdGhpcy5fY2hlY2tGb3JNaXNzaW5nTWFuZGF0b3J5T3B0aW9ucygpO1xuICAgIHRoaXMuX2NoZWNrRm9yQ29uZmxpY3RpbmdPcHRpb25zKCk7XG5cbiAgICAvLyBXZSBkbyBub3QgYWx3YXlzIGNhbGwgdGhpcyBjaGVjayB0byBhdm9pZCBtYXNraW5nIGEgXCJiZXR0ZXJcIiBlcnJvciwgbGlrZSB1bmtub3duIGNvbW1hbmQuXG4gICAgY29uc3QgY2hlY2tGb3JVbmtub3duT3B0aW9ucyA9ICgpID0+IHtcbiAgICAgIGlmIChwYXJzZWQudW5rbm93bi5sZW5ndGggPiAwKSB7XG4gICAgICAgIHRoaXMudW5rbm93bk9wdGlvbihwYXJzZWQudW5rbm93blswXSk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0IGNvbW1hbmRFdmVudCA9IGBjb21tYW5kOiR7dGhpcy5uYW1lKCl9YDtcbiAgICBpZiAodGhpcy5fYWN0aW9uSGFuZGxlcikge1xuICAgICAgY2hlY2tGb3JVbmtub3duT3B0aW9ucygpO1xuICAgICAgdGhpcy5fcHJvY2Vzc0FyZ3VtZW50cygpO1xuXG4gICAgICBsZXQgcHJvbWlzZUNoYWluO1xuICAgICAgcHJvbWlzZUNoYWluID0gdGhpcy5fY2hhaW5PckNhbGxIb29rcyhwcm9taXNlQ2hhaW4sICdwcmVBY3Rpb24nKTtcbiAgICAgIHByb21pc2VDaGFpbiA9IHRoaXMuX2NoYWluT3JDYWxsKHByb21pc2VDaGFpbiwgKCkgPT5cbiAgICAgICAgdGhpcy5fYWN0aW9uSGFuZGxlcih0aGlzLnByb2Nlc3NlZEFyZ3MpLFxuICAgICAgKTtcbiAgICAgIGlmICh0aGlzLnBhcmVudCkge1xuICAgICAgICBwcm9taXNlQ2hhaW4gPSB0aGlzLl9jaGFpbk9yQ2FsbChwcm9taXNlQ2hhaW4sICgpID0+IHtcbiAgICAgICAgICB0aGlzLnBhcmVudC5lbWl0KGNvbW1hbmRFdmVudCwgb3BlcmFuZHMsIHVua25vd24pOyAvLyBsZWdhY3lcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgICBwcm9taXNlQ2hhaW4gPSB0aGlzLl9jaGFpbk9yQ2FsbEhvb2tzKHByb21pc2VDaGFpbiwgJ3Bvc3RBY3Rpb24nKTtcbiAgICAgIHJldHVybiBwcm9taXNlQ2hhaW47XG4gICAgfVxuICAgIGlmICh0aGlzLnBhcmVudD8ubGlzdGVuZXJDb3VudChjb21tYW5kRXZlbnQpKSB7XG4gICAgICBjaGVja0ZvclVua25vd25PcHRpb25zKCk7XG4gICAgICB0aGlzLl9wcm9jZXNzQXJndW1lbnRzKCk7XG4gICAgICB0aGlzLnBhcmVudC5lbWl0KGNvbW1hbmRFdmVudCwgb3BlcmFuZHMsIHVua25vd24pOyAvLyBsZWdhY3lcbiAgICB9IGVsc2UgaWYgKG9wZXJhbmRzLmxlbmd0aCkge1xuICAgICAgaWYgKHRoaXMuX2ZpbmRDb21tYW5kKCcqJykpIHtcbiAgICAgICAgLy8gbGVnYWN5IGRlZmF1bHQgY29tbWFuZFxuICAgICAgICByZXR1cm4gdGhpcy5fZGlzcGF0Y2hTdWJjb21tYW5kKCcqJywgb3BlcmFuZHMsIHVua25vd24pO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMubGlzdGVuZXJDb3VudCgnY29tbWFuZDoqJykpIHtcbiAgICAgICAgLy8gc2tpcCBvcHRpb24gY2hlY2ssIGVtaXQgZXZlbnQgZm9yIHBvc3NpYmxlIG1pc3NwZWxsaW5nIHN1Z2dlc3Rpb25cbiAgICAgICAgdGhpcy5lbWl0KCdjb21tYW5kOionLCBvcGVyYW5kcywgdW5rbm93bik7XG4gICAgICB9IGVsc2UgaWYgKHRoaXMuY29tbWFuZHMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMudW5rbm93bkNvbW1hbmQoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNoZWNrRm9yVW5rbm93bk9wdGlvbnMoKTtcbiAgICAgICAgdGhpcy5fcHJvY2Vzc0FyZ3VtZW50cygpO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAodGhpcy5jb21tYW5kcy5sZW5ndGgpIHtcbiAgICAgIGNoZWNrRm9yVW5rbm93bk9wdGlvbnMoKTtcbiAgICAgIC8vIFRoaXMgY29tbWFuZCBoYXMgc3ViY29tbWFuZHMgYW5kIG5vdGhpbmcgaG9va2VkIHVwIGF0IHRoaXMgbGV2ZWwsIHNvIGRpc3BsYXkgaGVscCAoYW5kIGV4aXQpLlxuICAgICAgdGhpcy5oZWxwKHsgZXJyb3I6IHRydWUgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoZWNrRm9yVW5rbm93bk9wdGlvbnMoKTtcbiAgICAgIHRoaXMuX3Byb2Nlc3NBcmd1bWVudHMoKTtcbiAgICAgIC8vIGZhbGwgdGhyb3VnaCBmb3IgY2FsbGVyIHRvIGhhbmRsZSBhZnRlciBjYWxsaW5nIC5wYXJzZSgpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZpbmQgbWF0Y2hpbmcgY29tbWFuZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICogQHJldHVybiB7Q29tbWFuZCB8IHVuZGVmaW5lZH1cbiAgICovXG4gIF9maW5kQ29tbWFuZChuYW1lKSB7XG4gICAgaWYgKCFuYW1lKSByZXR1cm4gdW5kZWZpbmVkO1xuICAgIHJldHVybiB0aGlzLmNvbW1hbmRzLmZpbmQoXG4gICAgICAoY21kKSA9PiBjbWQuX25hbWUgPT09IG5hbWUgfHwgY21kLl9hbGlhc2VzLmluY2x1ZGVzKG5hbWUpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIGFuIG9wdGlvbiBtYXRjaGluZyBgYXJnYCBpZiBhbnkuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdcbiAgICogQHJldHVybiB7T3B0aW9ufVxuICAgKiBAcGFja2FnZVxuICAgKi9cblxuICBfZmluZE9wdGlvbihhcmcpIHtcbiAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZpbmQoKG9wdGlvbikgPT4gb3B0aW9uLmlzKGFyZykpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BsYXkgYW4gZXJyb3IgbWVzc2FnZSBpZiBhIG1hbmRhdG9yeSBvcHRpb24gZG9lcyBub3QgaGF2ZSBhIHZhbHVlLlxuICAgKiBDYWxsZWQgYWZ0ZXIgY2hlY2tpbmcgZm9yIGhlbHAgZmxhZ3MgaW4gbGVhZiBzdWJjb21tYW5kLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfY2hlY2tGb3JNaXNzaW5nTWFuZGF0b3J5T3B0aW9ucygpIHtcbiAgICAvLyBXYWxrIHVwIGhpZXJhcmNoeSBzbyBjYW4gY2FsbCBpbiBzdWJjb21tYW5kIGFmdGVyIGNoZWNraW5nIGZvciBkaXNwbGF5aW5nIGhlbHAuXG4gICAgdGhpcy5fZ2V0Q29tbWFuZEFuZEFuY2VzdG9ycygpLmZvckVhY2goKGNtZCkgPT4ge1xuICAgICAgY21kLm9wdGlvbnMuZm9yRWFjaCgoYW5PcHRpb24pID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGFuT3B0aW9uLm1hbmRhdG9yeSAmJlxuICAgICAgICAgIGNtZC5nZXRPcHRpb25WYWx1ZShhbk9wdGlvbi5hdHRyaWJ1dGVOYW1lKCkpID09PSB1bmRlZmluZWRcbiAgICAgICAgKSB7XG4gICAgICAgICAgY21kLm1pc3NpbmdNYW5kYXRvcnlPcHRpb25WYWx1ZShhbk9wdGlvbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIERpc3BsYXkgYW4gZXJyb3IgbWVzc2FnZSBpZiBjb25mbGljdGluZyBvcHRpb25zIGFyZSB1c2VkIHRvZ2V0aGVyIGluIHRoaXMuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY2hlY2tGb3JDb25mbGljdGluZ0xvY2FsT3B0aW9ucygpIHtcbiAgICBjb25zdCBkZWZpbmVkTm9uRGVmYXVsdE9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKChvcHRpb24pID0+IHtcbiAgICAgIGNvbnN0IG9wdGlvbktleSA9IG9wdGlvbi5hdHRyaWJ1dGVOYW1lKCk7XG4gICAgICBpZiAodGhpcy5nZXRPcHRpb25WYWx1ZShvcHRpb25LZXkpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMuZ2V0T3B0aW9uVmFsdWVTb3VyY2Uob3B0aW9uS2V5KSAhPT0gJ2RlZmF1bHQnO1xuICAgIH0pO1xuXG4gICAgY29uc3Qgb3B0aW9uc1dpdGhDb25mbGljdGluZyA9IGRlZmluZWROb25EZWZhdWx0T3B0aW9ucy5maWx0ZXIoXG4gICAgICAob3B0aW9uKSA9PiBvcHRpb24uY29uZmxpY3RzV2l0aC5sZW5ndGggPiAwLFxuICAgICk7XG5cbiAgICBvcHRpb25zV2l0aENvbmZsaWN0aW5nLmZvckVhY2goKG9wdGlvbikgPT4ge1xuICAgICAgY29uc3QgY29uZmxpY3RpbmdBbmREZWZpbmVkID0gZGVmaW5lZE5vbkRlZmF1bHRPcHRpb25zLmZpbmQoKGRlZmluZWQpID0+XG4gICAgICAgIG9wdGlvbi5jb25mbGljdHNXaXRoLmluY2x1ZGVzKGRlZmluZWQuYXR0cmlidXRlTmFtZSgpKSxcbiAgICAgICk7XG4gICAgICBpZiAoY29uZmxpY3RpbmdBbmREZWZpbmVkKSB7XG4gICAgICAgIHRoaXMuX2NvbmZsaWN0aW5nT3B0aW9uKG9wdGlvbiwgY29uZmxpY3RpbmdBbmREZWZpbmVkKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2UgaWYgY29uZmxpY3Rpbmcgb3B0aW9ucyBhcmUgdXNlZCB0b2dldGhlci5cbiAgICogQ2FsbGVkIGFmdGVyIGNoZWNraW5nIGZvciBoZWxwIGZsYWdzIGluIGxlYWYgc3ViY29tbWFuZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9jaGVja0ZvckNvbmZsaWN0aW5nT3B0aW9ucygpIHtcbiAgICAvLyBXYWxrIHVwIGhpZXJhcmNoeSBzbyBjYW4gY2FsbCBpbiBzdWJjb21tYW5kIGFmdGVyIGNoZWNraW5nIGZvciBkaXNwbGF5aW5nIGhlbHAuXG4gICAgdGhpcy5fZ2V0Q29tbWFuZEFuZEFuY2VzdG9ycygpLmZvckVhY2goKGNtZCkgPT4ge1xuICAgICAgY21kLl9jaGVja0ZvckNvbmZsaWN0aW5nTG9jYWxPcHRpb25zKCk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogUGFyc2Ugb3B0aW9ucyBmcm9tIGBhcmd2YCByZW1vdmluZyBrbm93biBvcHRpb25zLFxuICAgKiBhbmQgcmV0dXJuIGFyZ3Ygc3BsaXQgaW50byBvcGVyYW5kcyBhbmQgdW5rbm93biBhcmd1bWVudHMuXG4gICAqXG4gICAqIFNpZGUgZWZmZWN0czogbW9kaWZpZXMgY29tbWFuZCBieSBzdG9yaW5nIG9wdGlvbnMuIERvZXMgbm90IHJlc2V0IHN0YXRlIGlmIGNhbGxlZCBhZ2Fpbi5cbiAgICpcbiAgICogRXhhbXBsZXM6XG4gICAqXG4gICAqICAgICBhcmd2ID0+IG9wZXJhbmRzLCB1bmtub3duXG4gICAqICAgICAtLWtub3duIGtrayBvcCA9PiBbb3BdLCBbXVxuICAgKiAgICAgb3AgLS1rbm93biBra2sgPT4gW29wXSwgW11cbiAgICogICAgIHN1YiAtLXVua25vd24gdXV1IG9wID0+IFtzdWJdLCBbLS11bmtub3duIHV1dSBvcF1cbiAgICogICAgIHN1YiAtLSAtLXVua25vd24gdXV1IG9wID0+IFtzdWIgLS11bmtub3duIHV1dSBvcF0sIFtdXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nW119IGFyZ3NcbiAgICogQHJldHVybiB7e29wZXJhbmRzOiBzdHJpbmdbXSwgdW5rbm93bjogc3RyaW5nW119fVxuICAgKi9cblxuICBwYXJzZU9wdGlvbnMoYXJncykge1xuICAgIGNvbnN0IG9wZXJhbmRzID0gW107IC8vIG9wZXJhbmRzLCBub3Qgb3B0aW9ucyBvciB2YWx1ZXNcbiAgICBjb25zdCB1bmtub3duID0gW107IC8vIGZpcnN0IHVua25vd24gb3B0aW9uIGFuZCByZW1haW5pbmcgdW5rbm93biBhcmdzXG4gICAgbGV0IGRlc3QgPSBvcGVyYW5kcztcblxuICAgIGZ1bmN0aW9uIG1heWJlT3B0aW9uKGFyZykge1xuICAgICAgcmV0dXJuIGFyZy5sZW5ndGggPiAxICYmIGFyZ1swXSA9PT0gJy0nO1xuICAgIH1cblxuICAgIGNvbnN0IG5lZ2F0aXZlTnVtYmVyQXJnID0gKGFyZykgPT4ge1xuICAgICAgLy8gcmV0dXJuIGZhbHNlIGlmIG5vdCBhIG5lZ2F0aXZlIG51bWJlclxuICAgICAgaWYgKCEvXi1cXGQqXFwuP1xcZCsoZVsrLV0/XFxkKyk/JC8udGVzdChhcmcpKSByZXR1cm4gZmFsc2U7XG4gICAgICAvLyBuZWdhdGl2ZSBudW1iZXIgaXMgb2sgdW5sZXNzIGRpZ2l0IHVzZWQgYXMgYW4gb3B0aW9uIGluIGNvbW1hbmQgaGllcmFyY2h5XG4gICAgICByZXR1cm4gIXRoaXMuX2dldENvbW1hbmRBbmRBbmNlc3RvcnMoKS5zb21lKChjbWQpID0+XG4gICAgICAgIGNtZC5vcHRpb25zXG4gICAgICAgICAgLm1hcCgob3B0KSA9PiBvcHQuc2hvcnQpXG4gICAgICAgICAgLnNvbWUoKHNob3J0KSA9PiAvXi1cXGQkLy50ZXN0KHNob3J0KSksXG4gICAgICApO1xuICAgIH07XG5cbiAgICAvLyBwYXJzZSBvcHRpb25zXG4gICAgbGV0IGFjdGl2ZVZhcmlhZGljT3B0aW9uID0gbnVsbDtcbiAgICBsZXQgYWN0aXZlR3JvdXAgPSBudWxsOyAvLyB3b3JraW5nIHRocm91Z2ggZ3JvdXAgb2Ygc2hvcnQgb3B0aW9ucywgbGlrZSAtYWJjXG4gICAgbGV0IGkgPSAwO1xuICAgIHdoaWxlIChpIDwgYXJncy5sZW5ndGggfHwgYWN0aXZlR3JvdXApIHtcbiAgICAgIGNvbnN0IGFyZyA9IGFjdGl2ZUdyb3VwID8/IGFyZ3NbaSsrXTtcbiAgICAgIGFjdGl2ZUdyb3VwID0gbnVsbDtcblxuICAgICAgLy8gbGl0ZXJhbFxuICAgICAgaWYgKGFyZyA9PT0gJy0tJykge1xuICAgICAgICBpZiAoZGVzdCA9PT0gdW5rbm93bikgZGVzdC5wdXNoKGFyZyk7XG4gICAgICAgIGRlc3QucHVzaCguLi5hcmdzLnNsaWNlKGkpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICB9XG5cbiAgICAgIGlmIChcbiAgICAgICAgYWN0aXZlVmFyaWFkaWNPcHRpb24gJiZcbiAgICAgICAgKCFtYXliZU9wdGlvbihhcmcpIHx8IG5lZ2F0aXZlTnVtYmVyQXJnKGFyZykpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5lbWl0KGBvcHRpb246JHthY3RpdmVWYXJpYWRpY09wdGlvbi5uYW1lKCl9YCwgYXJnKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBhY3RpdmVWYXJpYWRpY09wdGlvbiA9IG51bGw7XG5cbiAgICAgIGlmIChtYXliZU9wdGlvbihhcmcpKSB7XG4gICAgICAgIGNvbnN0IG9wdGlvbiA9IHRoaXMuX2ZpbmRPcHRpb24oYXJnKTtcbiAgICAgICAgLy8gcmVjb2duaXNlZCBvcHRpb24sIGNhbGwgbGlzdGVuZXIgdG8gYXNzaWduIHZhbHVlIHdpdGggcG9zc2libGUgY3VzdG9tIHByb2Nlc3NpbmdcbiAgICAgICAgaWYgKG9wdGlvbikge1xuICAgICAgICAgIGlmIChvcHRpb24ucmVxdWlyZWQpIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gYXJnc1tpKytdO1xuICAgICAgICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHRoaXMub3B0aW9uTWlzc2luZ0FyZ3VtZW50KG9wdGlvbik7XG4gICAgICAgICAgICB0aGlzLmVtaXQoYG9wdGlvbjoke29wdGlvbi5uYW1lKCl9YCwgdmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9uLm9wdGlvbmFsKSB7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgLy8gaGlzdG9yaWNhbCBiZWhhdmlvdXIgaXMgb3B0aW9uYWwgdmFsdWUgaXMgZm9sbG93aW5nIGFyZyB1bmxlc3MgYW4gb3B0aW9uXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgIGkgPCBhcmdzLmxlbmd0aCAmJlxuICAgICAgICAgICAgICAoIW1heWJlT3B0aW9uKGFyZ3NbaV0pIHx8IG5lZ2F0aXZlTnVtYmVyQXJnKGFyZ3NbaV0pKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgIHZhbHVlID0gYXJnc1tpKytdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5lbWl0KGBvcHRpb246JHtvcHRpb24ubmFtZSgpfWAsIHZhbHVlKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gYm9vbGVhbiBmbGFnXG4gICAgICAgICAgICB0aGlzLmVtaXQoYG9wdGlvbjoke29wdGlvbi5uYW1lKCl9YCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGFjdGl2ZVZhcmlhZGljT3B0aW9uID0gb3B0aW9uLnZhcmlhZGljID8gb3B0aW9uIDogbnVsbDtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBMb29rIGZvciBjb21ibyBvcHRpb25zIGZvbGxvd2luZyBzaW5nbGUgZGFzaCwgZWF0IGZpcnN0IG9uZSBpZiBrbm93bi5cbiAgICAgIGlmIChhcmcubGVuZ3RoID4gMiAmJiBhcmdbMF0gPT09ICctJyAmJiBhcmdbMV0gIT09ICctJykge1xuICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLl9maW5kT3B0aW9uKGAtJHthcmdbMV19YCk7XG4gICAgICAgIGlmIChvcHRpb24pIHtcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICBvcHRpb24ucmVxdWlyZWQgfHxcbiAgICAgICAgICAgIChvcHRpb24ub3B0aW9uYWwgJiYgdGhpcy5fY29tYmluZUZsYWdBbmRPcHRpb25hbFZhbHVlKVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgLy8gb3B0aW9uIHdpdGggdmFsdWUgZm9sbG93aW5nIGluIHNhbWUgYXJndW1lbnRcbiAgICAgICAgICAgIHRoaXMuZW1pdChgb3B0aW9uOiR7b3B0aW9uLm5hbWUoKX1gLCBhcmcuc2xpY2UoMikpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBib29sZWFuIG9wdGlvblxuICAgICAgICAgICAgdGhpcy5lbWl0KGBvcHRpb246JHtvcHRpb24ubmFtZSgpfWApO1xuICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSBwcm9jZXNzZWQgb3B0aW9uIGFuZCBrZWVwIHByb2Nlc3NpbmcgZ3JvdXBcbiAgICAgICAgICAgIGFjdGl2ZUdyb3VwID0gYC0ke2FyZy5zbGljZSgyKX1gO1xuICAgICAgICAgIH1cbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBMb29rIGZvciBrbm93biBsb25nIGZsYWcgd2l0aCB2YWx1ZSwgbGlrZSAtLWZvbz1iYXJcbiAgICAgIGlmICgvXi0tW149XSs9Ly50ZXN0KGFyZykpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBhcmcuaW5kZXhPZignPScpO1xuICAgICAgICBjb25zdCBvcHRpb24gPSB0aGlzLl9maW5kT3B0aW9uKGFyZy5zbGljZSgwLCBpbmRleCkpO1xuICAgICAgICBpZiAob3B0aW9uICYmIChvcHRpb24ucmVxdWlyZWQgfHwgb3B0aW9uLm9wdGlvbmFsKSkge1xuICAgICAgICAgIHRoaXMuZW1pdChgb3B0aW9uOiR7b3B0aW9uLm5hbWUoKX1gLCBhcmcuc2xpY2UoaW5kZXggKyAxKSk7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gTm90IGEgcmVjb2duaXNlZCBvcHRpb24gYnkgdGhpcyBjb21tYW5kLlxuICAgICAgLy8gTWlnaHQgYmUgYSBjb21tYW5kLWFyZ3VtZW50LCBvciBzdWJjb21tYW5kIG9wdGlvbiwgb3IgdW5rbm93biBvcHRpb24sIG9yIGhlbHAgY29tbWFuZCBvciBvcHRpb24uXG5cbiAgICAgIC8vIEFuIHVua25vd24gb3B0aW9uIG1lYW5zIGZ1cnRoZXIgYXJndW1lbnRzIGFsc28gY2xhc3NpZmllZCBhcyB1bmtub3duIHNvIGNhbiBiZSByZXByb2Nlc3NlZCBieSBzdWJjb21tYW5kcy5cbiAgICAgIC8vIEEgbmVnYXRpdmUgbnVtYmVyIGluIGEgbGVhZiBjb21tYW5kIGlzIG5vdCBhbiB1bmtub3duIG9wdGlvbi5cbiAgICAgIGlmIChcbiAgICAgICAgZGVzdCA9PT0gb3BlcmFuZHMgJiZcbiAgICAgICAgbWF5YmVPcHRpb24oYXJnKSAmJlxuICAgICAgICAhKHRoaXMuY29tbWFuZHMubGVuZ3RoID09PSAwICYmIG5lZ2F0aXZlTnVtYmVyQXJnKGFyZykpXG4gICAgICApIHtcbiAgICAgICAgZGVzdCA9IHVua25vd247XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHVzaW5nIHBvc2l0aW9uYWxPcHRpb25zLCBzdG9wIHByb2Nlc3Npbmcgb3VyIG9wdGlvbnMgYXQgc3ViY29tbWFuZC5cbiAgICAgIGlmIChcbiAgICAgICAgKHRoaXMuX2VuYWJsZVBvc2l0aW9uYWxPcHRpb25zIHx8IHRoaXMuX3Bhc3NUaHJvdWdoT3B0aW9ucykgJiZcbiAgICAgICAgb3BlcmFuZHMubGVuZ3RoID09PSAwICYmXG4gICAgICAgIHVua25vd24ubGVuZ3RoID09PSAwXG4gICAgICApIHtcbiAgICAgICAgaWYgKHRoaXMuX2ZpbmRDb21tYW5kKGFyZykpIHtcbiAgICAgICAgICBvcGVyYW5kcy5wdXNoKGFyZyk7XG4gICAgICAgICAgdW5rbm93bi5wdXNoKC4uLmFyZ3Muc2xpY2UoaSkpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9IGVsc2UgaWYgKFxuICAgICAgICAgIHRoaXMuX2dldEhlbHBDb21tYW5kKCkgJiZcbiAgICAgICAgICBhcmcgPT09IHRoaXMuX2dldEhlbHBDb21tYW5kKCkubmFtZSgpXG4gICAgICAgICkge1xuICAgICAgICAgIG9wZXJhbmRzLnB1c2goYXJnLCAuLi5hcmdzLnNsaWNlKGkpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9kZWZhdWx0Q29tbWFuZE5hbWUpIHtcbiAgICAgICAgICB1bmtub3duLnB1c2goYXJnLCAuLi5hcmdzLnNsaWNlKGkpKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBJZiB1c2luZyBwYXNzVGhyb3VnaE9wdGlvbnMsIHN0b3AgcHJvY2Vzc2luZyBvcHRpb25zIGF0IGZpcnN0IGNvbW1hbmQtYXJndW1lbnQuXG4gICAgICBpZiAodGhpcy5fcGFzc1Rocm91Z2hPcHRpb25zKSB7XG4gICAgICAgIGRlc3QucHVzaChhcmcsIC4uLmFyZ3Muc2xpY2UoaSkpO1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgLy8gYWRkIGFyZ1xuICAgICAgZGVzdC5wdXNoKGFyZyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgb3BlcmFuZHMsIHVua25vd24gfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gb2JqZWN0IGNvbnRhaW5pbmcgbG9jYWwgb3B0aW9uIHZhbHVlcyBhcyBrZXktdmFsdWUgcGFpcnMuXG4gICAqXG4gICAqIEByZXR1cm4ge29iamVjdH1cbiAgICovXG4gIG9wdHMoKSB7XG4gICAgaWYgKHRoaXMuX3N0b3JlT3B0aW9uc0FzUHJvcGVydGllcykge1xuICAgICAgLy8gUHJlc2VydmUgb3JpZ2luYWwgYmVoYXZpb3VyIHNvIGJhY2t3YXJkcyBjb21wYXRpYmxlIHdoZW4gc3RpbGwgdXNpbmcgcHJvcGVydGllc1xuICAgICAgY29uc3QgcmVzdWx0ID0ge307XG4gICAgICBjb25zdCBsZW4gPSB0aGlzLm9wdGlvbnMubGVuZ3RoO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGtleSA9IHRoaXMub3B0aW9uc1tpXS5hdHRyaWJ1dGVOYW1lKCk7XG4gICAgICAgIHJlc3VsdFtrZXldID1cbiAgICAgICAgICBrZXkgPT09IHRoaXMuX3ZlcnNpb25PcHRpb25OYW1lID8gdGhpcy5fdmVyc2lvbiA6IHRoaXNba2V5XTtcbiAgICAgIH1cbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX29wdGlvblZhbHVlcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gYW4gb2JqZWN0IGNvbnRhaW5pbmcgbWVyZ2VkIGxvY2FsIGFuZCBnbG9iYWwgb3B0aW9uIHZhbHVlcyBhcyBrZXktdmFsdWUgcGFpcnMuXG4gICAqXG4gICAqIEByZXR1cm4ge29iamVjdH1cbiAgICovXG4gIG9wdHNXaXRoR2xvYmFscygpIHtcbiAgICAvLyBnbG9iYWxzIG92ZXJ3cml0ZSBsb2NhbHNcbiAgICByZXR1cm4gdGhpcy5fZ2V0Q29tbWFuZEFuZEFuY2VzdG9ycygpLnJlZHVjZShcbiAgICAgIChjb21iaW5lZE9wdGlvbnMsIGNtZCkgPT4gT2JqZWN0LmFzc2lnbihjb21iaW5lZE9wdGlvbnMsIGNtZC5vcHRzKCkpLFxuICAgICAge30sXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXNwbGF5IGVycm9yIG1lc3NhZ2UgYW5kIGV4aXQgKG9yIGNhbGwgZXhpdE92ZXJyaWRlKS5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2VcbiAgICogQHBhcmFtIHtvYmplY3R9IFtlcnJvck9wdGlvbnNdXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbZXJyb3JPcHRpb25zLmNvZGVdIC0gYW4gaWQgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgZXJyb3JcbiAgICogQHBhcmFtIHtudW1iZXJ9IFtlcnJvck9wdGlvbnMuZXhpdENvZGVdIC0gdXNlZCB3aXRoIHByb2Nlc3MuZXhpdFxuICAgKi9cbiAgZXJyb3IobWVzc2FnZSwgZXJyb3JPcHRpb25zKSB7XG4gICAgLy8gb3V0cHV0IGhhbmRsaW5nXG4gICAgdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbi5vdXRwdXRFcnJvcihcbiAgICAgIGAke21lc3NhZ2V9XFxuYCxcbiAgICAgIHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24ud3JpdGVFcnIsXG4gICAgKTtcbiAgICBpZiAodHlwZW9mIHRoaXMuX3Nob3dIZWxwQWZ0ZXJFcnJvciA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24ud3JpdGVFcnIoYCR7dGhpcy5fc2hvd0hlbHBBZnRlckVycm9yfVxcbmApO1xuICAgIH0gZWxzZSBpZiAodGhpcy5fc2hvd0hlbHBBZnRlckVycm9yKSB7XG4gICAgICB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLndyaXRlRXJyKCdcXG4nKTtcbiAgICAgIHRoaXMub3V0cHV0SGVscCh7IGVycm9yOiB0cnVlIH0pO1xuICAgIH1cblxuICAgIC8vIGV4aXQgaGFuZGxpbmdcbiAgICBjb25zdCBjb25maWcgPSBlcnJvck9wdGlvbnMgfHwge307XG4gICAgY29uc3QgZXhpdENvZGUgPSBjb25maWcuZXhpdENvZGUgfHwgMTtcbiAgICBjb25zdCBjb2RlID0gY29uZmlnLmNvZGUgfHwgJ2NvbW1hbmRlci5lcnJvcic7XG4gICAgdGhpcy5fZXhpdChleGl0Q29kZSwgY29kZSwgbWVzc2FnZSk7XG4gIH1cblxuICAvKipcbiAgICogQXBwbHkgYW55IG9wdGlvbiByZWxhdGVkIGVudmlyb25tZW50IHZhcmlhYmxlcywgaWYgb3B0aW9uIGRvZXNcbiAgICogbm90IGhhdmUgYSB2YWx1ZSBmcm9tIGNsaSBvciBjbGllbnQgY29kZS5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIF9wYXJzZU9wdGlvbnNFbnYoKSB7XG4gICAgdGhpcy5vcHRpb25zLmZvckVhY2goKG9wdGlvbikgPT4ge1xuICAgICAgaWYgKG9wdGlvbi5lbnZWYXIgJiYgb3B0aW9uLmVudlZhciBpbiBwcm9jZXNzLmVudikge1xuICAgICAgICBjb25zdCBvcHRpb25LZXkgPSBvcHRpb24uYXR0cmlidXRlTmFtZSgpO1xuICAgICAgICAvLyBQcmlvcml0eSBjaGVjay4gRG8gbm90IG92ZXJ3cml0ZSBjbGkgb3Igb3B0aW9ucyBmcm9tIHVua25vd24gc291cmNlIChjbGllbnQtY29kZSkuXG4gICAgICAgIGlmIChcbiAgICAgICAgICB0aGlzLmdldE9wdGlvblZhbHVlKG9wdGlvbktleSkgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgIFsnZGVmYXVsdCcsICdjb25maWcnLCAnZW52J10uaW5jbHVkZXMoXG4gICAgICAgICAgICB0aGlzLmdldE9wdGlvblZhbHVlU291cmNlKG9wdGlvbktleSksXG4gICAgICAgICAgKVxuICAgICAgICApIHtcbiAgICAgICAgICBpZiAob3B0aW9uLnJlcXVpcmVkIHx8IG9wdGlvbi5vcHRpb25hbCkge1xuICAgICAgICAgICAgLy8gb3B0aW9uIGNhbiB0YWtlIGEgdmFsdWVcbiAgICAgICAgICAgIC8vIGtlZXAgdmVyeSBzaW1wbGUsIG9wdGlvbmFsIGFsd2F5cyB0YWtlcyB2YWx1ZVxuICAgICAgICAgICAgdGhpcy5lbWl0KGBvcHRpb25FbnY6JHtvcHRpb24ubmFtZSgpfWAsIHByb2Nlc3MuZW52W29wdGlvbi5lbnZWYXJdKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8gYm9vbGVhblxuICAgICAgICAgICAgLy8ga2VlcCB2ZXJ5IHNpbXBsZSwgb25seSBjYXJlIHRoYXQgZW52VmFyIGRlZmluZWQgYW5kIG5vdCB0aGUgdmFsdWVcbiAgICAgICAgICAgIHRoaXMuZW1pdChgb3B0aW9uRW52OiR7b3B0aW9uLm5hbWUoKX1gKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBcHBseSBhbnkgaW1wbGllZCBvcHRpb24gdmFsdWVzLCBpZiBvcHRpb24gaXMgdW5kZWZpbmVkIG9yIGRlZmF1bHQgdmFsdWUuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfcGFyc2VPcHRpb25zSW1wbGllZCgpIHtcbiAgICBjb25zdCBkdWFsSGVscGVyID0gbmV3IER1YWxPcHRpb25zKHRoaXMub3B0aW9ucyk7XG4gICAgY29uc3QgaGFzQ3VzdG9tT3B0aW9uVmFsdWUgPSAob3B0aW9uS2V5KSA9PiB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICB0aGlzLmdldE9wdGlvblZhbHVlKG9wdGlvbktleSkgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAhWydkZWZhdWx0JywgJ2ltcGxpZWQnXS5pbmNsdWRlcyh0aGlzLmdldE9wdGlvblZhbHVlU291cmNlKG9wdGlvbktleSkpXG4gICAgICApO1xuICAgIH07XG4gICAgdGhpcy5vcHRpb25zXG4gICAgICAuZmlsdGVyKFxuICAgICAgICAob3B0aW9uKSA9PlxuICAgICAgICAgIG9wdGlvbi5pbXBsaWVkICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICBoYXNDdXN0b21PcHRpb25WYWx1ZShvcHRpb24uYXR0cmlidXRlTmFtZSgpKSAmJlxuICAgICAgICAgIGR1YWxIZWxwZXIudmFsdWVGcm9tT3B0aW9uKFxuICAgICAgICAgICAgdGhpcy5nZXRPcHRpb25WYWx1ZShvcHRpb24uYXR0cmlidXRlTmFtZSgpKSxcbiAgICAgICAgICAgIG9wdGlvbixcbiAgICAgICAgICApLFxuICAgICAgKVxuICAgICAgLmZvckVhY2goKG9wdGlvbikgPT4ge1xuICAgICAgICBPYmplY3Qua2V5cyhvcHRpb24uaW1wbGllZClcbiAgICAgICAgICAuZmlsdGVyKChpbXBsaWVkS2V5KSA9PiAhaGFzQ3VzdG9tT3B0aW9uVmFsdWUoaW1wbGllZEtleSkpXG4gICAgICAgICAgLmZvckVhY2goKGltcGxpZWRLZXkpID0+IHtcbiAgICAgICAgICAgIHRoaXMuc2V0T3B0aW9uVmFsdWVXaXRoU291cmNlKFxuICAgICAgICAgICAgICBpbXBsaWVkS2V5LFxuICAgICAgICAgICAgICBvcHRpb24uaW1wbGllZFtpbXBsaWVkS2V5XSxcbiAgICAgICAgICAgICAgJ2ltcGxpZWQnLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFyZ3VtZW50IGBuYW1lYCBpcyBtaXNzaW5nLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBtaXNzaW5nQXJndW1lbnQobmFtZSkge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBgZXJyb3I6IG1pc3NpbmcgcmVxdWlyZWQgYXJndW1lbnQgJyR7bmFtZX0nYDtcbiAgICB0aGlzLmVycm9yKG1lc3NhZ2UsIHsgY29kZTogJ2NvbW1hbmRlci5taXNzaW5nQXJndW1lbnQnIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGBPcHRpb25gIGlzIG1pc3NpbmcgYW4gYXJndW1lbnQuXG4gICAqXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBvcHRpb25cbiAgICogQHByaXZhdGVcbiAgICovXG5cbiAgb3B0aW9uTWlzc2luZ0FyZ3VtZW50KG9wdGlvbikge1xuICAgIGNvbnN0IG1lc3NhZ2UgPSBgZXJyb3I6IG9wdGlvbiAnJHtvcHRpb24uZmxhZ3N9JyBhcmd1bWVudCBtaXNzaW5nYDtcbiAgICB0aGlzLmVycm9yKG1lc3NhZ2UsIHsgY29kZTogJ2NvbW1hbmRlci5vcHRpb25NaXNzaW5nQXJndW1lbnQnIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIGBPcHRpb25gIGRvZXMgbm90IGhhdmUgYSB2YWx1ZSwgYW5kIGlzIGEgbWFuZGF0b3J5IG9wdGlvbi5cbiAgICpcbiAgICogQHBhcmFtIHtPcHRpb259IG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBtaXNzaW5nTWFuZGF0b3J5T3B0aW9uVmFsdWUob3B0aW9uKSB7XG4gICAgY29uc3QgbWVzc2FnZSA9IGBlcnJvcjogcmVxdWlyZWQgb3B0aW9uICcke29wdGlvbi5mbGFnc30nIG5vdCBzcGVjaWZpZWRgO1xuICAgIHRoaXMuZXJyb3IobWVzc2FnZSwgeyBjb2RlOiAnY29tbWFuZGVyLm1pc3NpbmdNYW5kYXRvcnlPcHRpb25WYWx1ZScgfSk7XG4gIH1cblxuICAvKipcbiAgICogYE9wdGlvbmAgY29uZmxpY3RzIHdpdGggYW5vdGhlciBvcHRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7T3B0aW9ufSBvcHRpb25cbiAgICogQHBhcmFtIHtPcHRpb259IGNvbmZsaWN0aW5nT3B0aW9uXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBfY29uZmxpY3RpbmdPcHRpb24ob3B0aW9uLCBjb25mbGljdGluZ09wdGlvbikge1xuICAgIC8vIFRoZSBjYWxsaW5nIGNvZGUgZG9lcyBub3Qga25vdyB3aGV0aGVyIGEgbmVnYXRlZCBvcHRpb24gaXMgdGhlIHNvdXJjZSBvZiB0aGVcbiAgICAvLyB2YWx1ZSwgc28gZG8gc29tZSB3b3JrIHRvIHRha2UgYW4gZWR1Y2F0ZWQgZ3Vlc3MuXG4gICAgY29uc3QgZmluZEJlc3RPcHRpb25Gcm9tVmFsdWUgPSAob3B0aW9uKSA9PiB7XG4gICAgICBjb25zdCBvcHRpb25LZXkgPSBvcHRpb24uYXR0cmlidXRlTmFtZSgpO1xuICAgICAgY29uc3Qgb3B0aW9uVmFsdWUgPSB0aGlzLmdldE9wdGlvblZhbHVlKG9wdGlvbktleSk7XG4gICAgICBjb25zdCBuZWdhdGl2ZU9wdGlvbiA9IHRoaXMub3B0aW9ucy5maW5kKFxuICAgICAgICAodGFyZ2V0KSA9PiB0YXJnZXQubmVnYXRlICYmIG9wdGlvbktleSA9PT0gdGFyZ2V0LmF0dHJpYnV0ZU5hbWUoKSxcbiAgICAgICk7XG4gICAgICBjb25zdCBwb3NpdGl2ZU9wdGlvbiA9IHRoaXMub3B0aW9ucy5maW5kKFxuICAgICAgICAodGFyZ2V0KSA9PiAhdGFyZ2V0Lm5lZ2F0ZSAmJiBvcHRpb25LZXkgPT09IHRhcmdldC5hdHRyaWJ1dGVOYW1lKCksXG4gICAgICApO1xuICAgICAgaWYgKFxuICAgICAgICBuZWdhdGl2ZU9wdGlvbiAmJlxuICAgICAgICAoKG5lZ2F0aXZlT3B0aW9uLnByZXNldEFyZyA9PT0gdW5kZWZpbmVkICYmIG9wdGlvblZhbHVlID09PSBmYWxzZSkgfHxcbiAgICAgICAgICAobmVnYXRpdmVPcHRpb24ucHJlc2V0QXJnICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAgIG9wdGlvblZhbHVlID09PSBuZWdhdGl2ZU9wdGlvbi5wcmVzZXRBcmcpKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBuZWdhdGl2ZU9wdGlvbjtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwb3NpdGl2ZU9wdGlvbiB8fCBvcHRpb247XG4gICAgfTtcblxuICAgIGNvbnN0IGdldEVycm9yTWVzc2FnZSA9IChvcHRpb24pID0+IHtcbiAgICAgIGNvbnN0IGJlc3RPcHRpb24gPSBmaW5kQmVzdE9wdGlvbkZyb21WYWx1ZShvcHRpb24pO1xuICAgICAgY29uc3Qgb3B0aW9uS2V5ID0gYmVzdE9wdGlvbi5hdHRyaWJ1dGVOYW1lKCk7XG4gICAgICBjb25zdCBzb3VyY2UgPSB0aGlzLmdldE9wdGlvblZhbHVlU291cmNlKG9wdGlvbktleSk7XG4gICAgICBpZiAoc291cmNlID09PSAnZW52Jykge1xuICAgICAgICByZXR1cm4gYGVudmlyb25tZW50IHZhcmlhYmxlICcke2Jlc3RPcHRpb24uZW52VmFyfSdgO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGBvcHRpb24gJyR7YmVzdE9wdGlvbi5mbGFnc30nYDtcbiAgICB9O1xuXG4gICAgY29uc3QgbWVzc2FnZSA9IGBlcnJvcjogJHtnZXRFcnJvck1lc3NhZ2Uob3B0aW9uKX0gY2Fubm90IGJlIHVzZWQgd2l0aCAke2dldEVycm9yTWVzc2FnZShjb25mbGljdGluZ09wdGlvbil9YDtcbiAgICB0aGlzLmVycm9yKG1lc3NhZ2UsIHsgY29kZTogJ2NvbW1hbmRlci5jb25mbGljdGluZ09wdGlvbicgfSk7XG4gIH1cblxuICAvKipcbiAgICogVW5rbm93biBvcHRpb24gYGZsYWdgLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gZmxhZ1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICB1bmtub3duT3B0aW9uKGZsYWcpIHtcbiAgICBpZiAodGhpcy5fYWxsb3dVbmtub3duT3B0aW9uKSByZXR1cm47XG4gICAgbGV0IHN1Z2dlc3Rpb24gPSAnJztcblxuICAgIGlmIChmbGFnLnN0YXJ0c1dpdGgoJy0tJykgJiYgdGhpcy5fc2hvd1N1Z2dlc3Rpb25BZnRlckVycm9yKSB7XG4gICAgICAvLyBMb29waW5nIHRvIHBpY2sgdXAgdGhlIGdsb2JhbCBvcHRpb25zIHRvb1xuICAgICAgbGV0IGNhbmRpZGF0ZUZsYWdzID0gW107XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXRoaXMtYWxpYXNcbiAgICAgIGxldCBjb21tYW5kID0gdGhpcztcbiAgICAgIGRvIHtcbiAgICAgICAgY29uc3QgbW9yZUZsYWdzID0gY29tbWFuZFxuICAgICAgICAgIC5jcmVhdGVIZWxwKClcbiAgICAgICAgICAudmlzaWJsZU9wdGlvbnMoY29tbWFuZClcbiAgICAgICAgICAuZmlsdGVyKChvcHRpb24pID0+IG9wdGlvbi5sb25nKVxuICAgICAgICAgIC5tYXAoKG9wdGlvbikgPT4gb3B0aW9uLmxvbmcpO1xuICAgICAgICBjYW5kaWRhdGVGbGFncyA9IGNhbmRpZGF0ZUZsYWdzLmNvbmNhdChtb3JlRmxhZ3MpO1xuICAgICAgICBjb21tYW5kID0gY29tbWFuZC5wYXJlbnQ7XG4gICAgICB9IHdoaWxlIChjb21tYW5kICYmICFjb21tYW5kLl9lbmFibGVQb3NpdGlvbmFsT3B0aW9ucyk7XG4gICAgICBzdWdnZXN0aW9uID0gc3VnZ2VzdFNpbWlsYXIoZmxhZywgY2FuZGlkYXRlRmxhZ3MpO1xuICAgIH1cblxuICAgIGNvbnN0IG1lc3NhZ2UgPSBgZXJyb3I6IHVua25vd24gb3B0aW9uICcke2ZsYWd9JyR7c3VnZ2VzdGlvbn1gO1xuICAgIHRoaXMuZXJyb3IobWVzc2FnZSwgeyBjb2RlOiAnY29tbWFuZGVyLnVua25vd25PcHRpb24nIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4Y2VzcyBhcmd1bWVudHMsIG1vcmUgdGhhbiBleHBlY3RlZC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gcmVjZWl2ZWRBcmdzXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIF9leGNlc3NBcmd1bWVudHMocmVjZWl2ZWRBcmdzKSB7XG4gICAgaWYgKHRoaXMuX2FsbG93RXhjZXNzQXJndW1lbnRzKSByZXR1cm47XG5cbiAgICBjb25zdCBleHBlY3RlZCA9IHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cy5sZW5ndGg7XG4gICAgY29uc3QgcyA9IGV4cGVjdGVkID09PSAxID8gJycgOiAncyc7XG4gICAgY29uc3QgZm9yU3ViY29tbWFuZCA9IHRoaXMucGFyZW50ID8gYCBmb3IgJyR7dGhpcy5uYW1lKCl9J2AgOiAnJztcbiAgICBjb25zdCBtZXNzYWdlID0gYGVycm9yOiB0b28gbWFueSBhcmd1bWVudHMke2ZvclN1YmNvbW1hbmR9LiBFeHBlY3RlZCAke2V4cGVjdGVkfSBhcmd1bWVudCR7c30gYnV0IGdvdCAke3JlY2VpdmVkQXJncy5sZW5ndGh9LmA7XG4gICAgdGhpcy5lcnJvcihtZXNzYWdlLCB7IGNvZGU6ICdjb21tYW5kZXIuZXhjZXNzQXJndW1lbnRzJyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBVbmtub3duIGNvbW1hbmQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuXG4gIHVua25vd25Db21tYW5kKCkge1xuICAgIGNvbnN0IHVua25vd25OYW1lID0gdGhpcy5hcmdzWzBdO1xuICAgIGxldCBzdWdnZXN0aW9uID0gJyc7XG5cbiAgICBpZiAodGhpcy5fc2hvd1N1Z2dlc3Rpb25BZnRlckVycm9yKSB7XG4gICAgICBjb25zdCBjYW5kaWRhdGVOYW1lcyA9IFtdO1xuICAgICAgdGhpcy5jcmVhdGVIZWxwKClcbiAgICAgICAgLnZpc2libGVDb21tYW5kcyh0aGlzKVxuICAgICAgICAuZm9yRWFjaCgoY29tbWFuZCkgPT4ge1xuICAgICAgICAgIGNhbmRpZGF0ZU5hbWVzLnB1c2goY29tbWFuZC5uYW1lKCkpO1xuICAgICAgICAgIC8vIGp1c3QgdmlzaWJsZSBhbGlhc1xuICAgICAgICAgIGlmIChjb21tYW5kLmFsaWFzKCkpIGNhbmRpZGF0ZU5hbWVzLnB1c2goY29tbWFuZC5hbGlhcygpKTtcbiAgICAgICAgfSk7XG4gICAgICBzdWdnZXN0aW9uID0gc3VnZ2VzdFNpbWlsYXIodW5rbm93bk5hbWUsIGNhbmRpZGF0ZU5hbWVzKTtcbiAgICB9XG5cbiAgICBjb25zdCBtZXNzYWdlID0gYGVycm9yOiB1bmtub3duIGNvbW1hbmQgJyR7dW5rbm93bk5hbWV9JyR7c3VnZ2VzdGlvbn1gO1xuICAgIHRoaXMuZXJyb3IobWVzc2FnZSwgeyBjb2RlOiAnY29tbWFuZGVyLnVua25vd25Db21tYW5kJyB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgb3Igc2V0IHRoZSBwcm9ncmFtIHZlcnNpb24uXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGF1dG8tcmVnaXN0ZXJzIHRoZSBcIi1WLCAtLXZlcnNpb25cIiBvcHRpb24gd2hpY2ggd2lsbCBwcmludCB0aGUgdmVyc2lvbiBudW1iZXIuXG4gICAqXG4gICAqIFlvdSBjYW4gb3B0aW9uYWxseSBzdXBwbHkgdGhlIGZsYWdzIGFuZCBkZXNjcmlwdGlvbiB0byBvdmVycmlkZSB0aGUgZGVmYXVsdHMuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyXVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2ZsYWdzXVxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2Rlc2NyaXB0aW9uXVxuICAgKiBAcmV0dXJuIHsodGhpcyB8IHN0cmluZyB8IHVuZGVmaW5lZCl9IGB0aGlzYCBjb21tYW5kIGZvciBjaGFpbmluZywgb3IgdmVyc2lvbiBzdHJpbmcgaWYgbm8gYXJndW1lbnRzXG4gICAqL1xuXG4gIHZlcnNpb24oc3RyLCBmbGFncywgZGVzY3JpcHRpb24pIHtcbiAgICBpZiAoc3RyID09PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLl92ZXJzaW9uO1xuICAgIHRoaXMuX3ZlcnNpb24gPSBzdHI7XG4gICAgZmxhZ3MgPSBmbGFncyB8fCAnLVYsIC0tdmVyc2lvbic7XG4gICAgZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbiB8fCAnb3V0cHV0IHRoZSB2ZXJzaW9uIG51bWJlcic7XG4gICAgY29uc3QgdmVyc2lvbk9wdGlvbiA9IHRoaXMuY3JlYXRlT3B0aW9uKGZsYWdzLCBkZXNjcmlwdGlvbik7XG4gICAgdGhpcy5fdmVyc2lvbk9wdGlvbk5hbWUgPSB2ZXJzaW9uT3B0aW9uLmF0dHJpYnV0ZU5hbWUoKTtcbiAgICB0aGlzLl9yZWdpc3Rlck9wdGlvbih2ZXJzaW9uT3B0aW9uKTtcblxuICAgIHRoaXMub24oJ29wdGlvbjonICsgdmVyc2lvbk9wdGlvbi5uYW1lKCksICgpID0+IHtcbiAgICAgIHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24ud3JpdGVPdXQoYCR7c3RyfVxcbmApO1xuICAgICAgdGhpcy5fZXhpdCgwLCAnY29tbWFuZGVyLnZlcnNpb24nLCBzdHIpO1xuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCB0aGUgZGVzY3JpcHRpb24uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbc3RyXVxuICAgKiBAcGFyYW0ge29iamVjdH0gW2FyZ3NEZXNjcmlwdGlvbl1cbiAgICogQHJldHVybiB7KHN0cmluZ3xDb21tYW5kKX1cbiAgICovXG4gIGRlc2NyaXB0aW9uKHN0ciwgYXJnc0Rlc2NyaXB0aW9uKSB7XG4gICAgaWYgKHN0ciA9PT0gdW5kZWZpbmVkICYmIGFyZ3NEZXNjcmlwdGlvbiA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuIHRoaXMuX2Rlc2NyaXB0aW9uO1xuICAgIHRoaXMuX2Rlc2NyaXB0aW9uID0gc3RyO1xuICAgIGlmIChhcmdzRGVzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuX2FyZ3NEZXNjcmlwdGlvbiA9IGFyZ3NEZXNjcmlwdGlvbjtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBzdW1tYXJ5LiBVc2VkIHdoZW4gbGlzdGVkIGFzIHN1YmNvbW1hbmQgb2YgcGFyZW50LlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cl1cbiAgICogQHJldHVybiB7KHN0cmluZ3xDb21tYW5kKX1cbiAgICovXG4gIHN1bW1hcnkoc3RyKSB7XG4gICAgaWYgKHN0ciA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5fc3VtbWFyeTtcbiAgICB0aGlzLl9zdW1tYXJ5ID0gc3RyO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBhbiBhbGlhcyBmb3IgdGhlIGNvbW1hbmQuXG4gICAqXG4gICAqIFlvdSBtYXkgY2FsbCBtb3JlIHRoYW4gb25jZSB0byBhZGQgbXVsdGlwbGUgYWxpYXNlcy4gT25seSB0aGUgZmlyc3QgYWxpYXMgaXMgc2hvd24gaW4gdGhlIGF1dG8tZ2VuZXJhdGVkIGhlbHAuXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbYWxpYXNdXG4gICAqIEByZXR1cm4geyhzdHJpbmd8Q29tbWFuZCl9XG4gICAqL1xuXG4gIGFsaWFzKGFsaWFzKSB7XG4gICAgaWYgKGFsaWFzID09PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLl9hbGlhc2VzWzBdOyAvLyBqdXN0IHJldHVybiBmaXJzdCwgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5cbiAgICAvKiogQHR5cGUge0NvbW1hbmR9ICovXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby10aGlzLWFsaWFzXG4gICAgbGV0IGNvbW1hbmQgPSB0aGlzO1xuICAgIGlmIChcbiAgICAgIHRoaXMuY29tbWFuZHMubGVuZ3RoICE9PSAwICYmXG4gICAgICB0aGlzLmNvbW1hbmRzW3RoaXMuY29tbWFuZHMubGVuZ3RoIC0gMV0uX2V4ZWN1dGFibGVIYW5kbGVyXG4gICAgKSB7XG4gICAgICAvLyBhc3N1bWUgYWRkaW5nIGFsaWFzIGZvciBsYXN0IGFkZGVkIGV4ZWN1dGFibGUgc3ViY29tbWFuZCwgcmF0aGVyIHRoYW4gdGhpc1xuICAgICAgY29tbWFuZCA9IHRoaXMuY29tbWFuZHNbdGhpcy5jb21tYW5kcy5sZW5ndGggLSAxXTtcbiAgICB9XG5cbiAgICBpZiAoYWxpYXMgPT09IGNvbW1hbmQuX25hbWUpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDb21tYW5kIGFsaWFzIGNhbid0IGJlIHRoZSBzYW1lIGFzIGl0cyBuYW1lXCIpO1xuICAgIGNvbnN0IG1hdGNoaW5nQ29tbWFuZCA9IHRoaXMucGFyZW50Py5fZmluZENvbW1hbmQoYWxpYXMpO1xuICAgIGlmIChtYXRjaGluZ0NvbW1hbmQpIHtcbiAgICAgIC8vIGMuZi4gX3JlZ2lzdGVyQ29tbWFuZFxuICAgICAgY29uc3QgZXhpc3RpbmdDbWQgPSBbbWF0Y2hpbmdDb21tYW5kLm5hbWUoKV1cbiAgICAgICAgLmNvbmNhdChtYXRjaGluZ0NvbW1hbmQuYWxpYXNlcygpKVxuICAgICAgICAuam9pbignfCcpO1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgY2Fubm90IGFkZCBhbGlhcyAnJHthbGlhc30nIHRvIGNvbW1hbmQgJyR7dGhpcy5uYW1lKCl9JyBhcyBhbHJlYWR5IGhhdmUgY29tbWFuZCAnJHtleGlzdGluZ0NtZH0nYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29tbWFuZC5fYWxpYXNlcy5wdXNoKGFsaWFzKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgYWxpYXNlcyBmb3IgdGhlIGNvbW1hbmQuXG4gICAqXG4gICAqIE9ubHkgdGhlIGZpcnN0IGFsaWFzIGlzIHNob3duIGluIHRoZSBhdXRvLWdlbmVyYXRlZCBoZWxwLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBbYWxpYXNlc11cbiAgICogQHJldHVybiB7KHN0cmluZ1tdfENvbW1hbmQpfVxuICAgKi9cblxuICBhbGlhc2VzKGFsaWFzZXMpIHtcbiAgICAvLyBHZXR0ZXIgZm9yIHRoZSBhcnJheSBvZiBhbGlhc2VzIGlzIHRoZSBtYWluIHJlYXNvbiBmb3IgaGF2aW5nIGFsaWFzZXMoKSBpbiBhZGRpdGlvbiB0byBhbGlhcygpLlxuICAgIGlmIChhbGlhc2VzID09PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLl9hbGlhc2VzO1xuXG4gICAgYWxpYXNlcy5mb3JFYWNoKChhbGlhcykgPT4gdGhpcy5hbGlhcyhhbGlhcykpO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCAvIGdldCB0aGUgY29tbWFuZCB1c2FnZSBgc3RyYC5cbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtzdHJdXG4gICAqIEByZXR1cm4geyhzdHJpbmd8Q29tbWFuZCl9XG4gICAqL1xuXG4gIHVzYWdlKHN0cikge1xuICAgIGlmIChzdHIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgaWYgKHRoaXMuX3VzYWdlKSByZXR1cm4gdGhpcy5fdXNhZ2U7XG5cbiAgICAgIGNvbnN0IGFyZ3MgPSB0aGlzLnJlZ2lzdGVyZWRBcmd1bWVudHMubWFwKChhcmcpID0+IHtcbiAgICAgICAgcmV0dXJuIGh1bWFuUmVhZGFibGVBcmdOYW1lKGFyZyk7XG4gICAgICB9KTtcbiAgICAgIHJldHVybiBbXVxuICAgICAgICAuY29uY2F0KFxuICAgICAgICAgIHRoaXMub3B0aW9ucy5sZW5ndGggfHwgdGhpcy5faGVscE9wdGlvbiAhPT0gbnVsbCA/ICdbb3B0aW9uc10nIDogW10sXG4gICAgICAgICAgdGhpcy5jb21tYW5kcy5sZW5ndGggPyAnW2NvbW1hbmRdJyA6IFtdLFxuICAgICAgICAgIHRoaXMucmVnaXN0ZXJlZEFyZ3VtZW50cy5sZW5ndGggPyBhcmdzIDogW10sXG4gICAgICAgIClcbiAgICAgICAgLmpvaW4oJyAnKTtcbiAgICB9XG5cbiAgICB0aGlzLl91c2FnZSA9IHN0cjtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgb3Igc2V0IHRoZSBuYW1lIG9mIHRoZSBjb21tYW5kLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3N0cl1cbiAgICogQHJldHVybiB7KHN0cmluZ3xDb21tYW5kKX1cbiAgICovXG5cbiAgbmFtZShzdHIpIHtcbiAgICBpZiAoc3RyID09PSB1bmRlZmluZWQpIHJldHVybiB0aGlzLl9uYW1lO1xuICAgIHRoaXMuX25hbWUgPSBzdHI7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0L2dldCB0aGUgaGVscCBncm91cCBoZWFkaW5nIGZvciB0aGlzIHN1YmNvbW1hbmQgaW4gcGFyZW50IGNvbW1hbmQncyBoZWxwLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2hlYWRpbmddXG4gICAqIEByZXR1cm4ge0NvbW1hbmQgfCBzdHJpbmd9XG4gICAqL1xuXG4gIGhlbHBHcm91cChoZWFkaW5nKSB7XG4gICAgaWYgKGhlYWRpbmcgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuX2hlbHBHcm91cEhlYWRpbmcgPz8gJyc7XG4gICAgdGhpcy5faGVscEdyb3VwSGVhZGluZyA9IGhlYWRpbmc7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogU2V0L2dldCB0aGUgZGVmYXVsdCBoZWxwIGdyb3VwIGhlYWRpbmcgZm9yIHN1YmNvbW1hbmRzIGFkZGVkIHRvIHRoaXMgY29tbWFuZC5cbiAgICogKFRoaXMgZG9lcyBub3Qgb3ZlcnJpZGUgYSBncm91cCBzZXQgZGlyZWN0bHkgb24gdGhlIHN1YmNvbW1hbmQgdXNpbmcgLmhlbHBHcm91cCgpLilcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcHJvZ3JhbS5jb21tYW5kc0dyb3VwKCdEZXZlbG9wbWVudCBDb21tYW5kczopO1xuICAgKiBwcm9ncmFtLmNvbW1hbmQoJ3dhdGNoJykuLi5cbiAgICogcHJvZ3JhbS5jb21tYW5kKCdsaW50JykuLi5cbiAgICogLi4uXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBbaGVhZGluZ11cbiAgICogQHJldHVybnMge0NvbW1hbmQgfCBzdHJpbmd9XG4gICAqL1xuICBjb21tYW5kc0dyb3VwKGhlYWRpbmcpIHtcbiAgICBpZiAoaGVhZGluZyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5fZGVmYXVsdENvbW1hbmRHcm91cCA/PyAnJztcbiAgICB0aGlzLl9kZWZhdWx0Q29tbWFuZEdyb3VwID0gaGVhZGluZztcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQvZ2V0IHRoZSBkZWZhdWx0IGhlbHAgZ3JvdXAgaGVhZGluZyBmb3Igb3B0aW9ucyBhZGRlZCB0byB0aGlzIGNvbW1hbmQuXG4gICAqIChUaGlzIGRvZXMgbm90IG92ZXJyaWRlIGEgZ3JvdXAgc2V0IGRpcmVjdGx5IG9uIHRoZSBvcHRpb24gdXNpbmcgLmhlbHBHcm91cCgpLilcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcHJvZ3JhbVxuICAgKiAgIC5vcHRpb25zR3JvdXAoJ0RldmVsb3BtZW50IE9wdGlvbnM6JylcbiAgICogICAub3B0aW9uKCctZCwgLS1kZWJ1ZycsICdvdXRwdXQgZXh0cmEgZGVidWdnaW5nJylcbiAgICogICAub3B0aW9uKCctcCwgLS1wcm9maWxlJywgJ291dHB1dCBwcm9maWxpbmcgaW5mb3JtYXRpb24nKVxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW2hlYWRpbmddXG4gICAqIEByZXR1cm5zIHtDb21tYW5kIHwgc3RyaW5nfVxuICAgKi9cbiAgb3B0aW9uc0dyb3VwKGhlYWRpbmcpIHtcbiAgICBpZiAoaGVhZGluZyA9PT0gdW5kZWZpbmVkKSByZXR1cm4gdGhpcy5fZGVmYXVsdE9wdGlvbkdyb3VwID8/ICcnO1xuICAgIHRoaXMuX2RlZmF1bHRPcHRpb25Hcm91cCA9IGhlYWRpbmc7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHtPcHRpb259IG9wdGlvblxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXRPcHRpb25Hcm91cChvcHRpb24pIHtcbiAgICBpZiAodGhpcy5fZGVmYXVsdE9wdGlvbkdyb3VwICYmICFvcHRpb24uaGVscEdyb3VwSGVhZGluZylcbiAgICAgIG9wdGlvbi5oZWxwR3JvdXAodGhpcy5fZGVmYXVsdE9wdGlvbkdyb3VwKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBAcGFyYW0ge0NvbW1hbmR9IGNtZFxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgX2luaXRDb21tYW5kR3JvdXAoY21kKSB7XG4gICAgaWYgKHRoaXMuX2RlZmF1bHRDb21tYW5kR3JvdXAgJiYgIWNtZC5oZWxwR3JvdXAoKSlcbiAgICAgIGNtZC5oZWxwR3JvdXAodGhpcy5fZGVmYXVsdENvbW1hbmRHcm91cCk7XG4gIH1cblxuICAvKipcbiAgICogU2V0IHRoZSBuYW1lIG9mIHRoZSBjb21tYW5kIGZyb20gc2NyaXB0IGZpbGVuYW1lLCBzdWNoIGFzIHByb2Nlc3MuYXJndlsxXSxcbiAgICogb3IgcmVxdWlyZS5tYWluLmZpbGVuYW1lLCBvciBfX2ZpbGVuYW1lLlxuICAgKlxuICAgKiAoVXNlZCBpbnRlcm5hbGx5IGFuZCBwdWJsaWMgYWx0aG91Z2ggbm90IGRvY3VtZW50ZWQgaW4gUkVBRE1FLilcbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogcHJvZ3JhbS5uYW1lRnJvbUZpbGVuYW1lKHJlcXVpcmUubWFpbi5maWxlbmFtZSk7XG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBmaWxlbmFtZVxuICAgKiBAcmV0dXJuIHtDb21tYW5kfVxuICAgKi9cblxuICBuYW1lRnJvbUZpbGVuYW1lKGZpbGVuYW1lKSB7XG4gICAgdGhpcy5fbmFtZSA9IHBhdGguYmFzZW5hbWUoZmlsZW5hbWUsIHBhdGguZXh0bmFtZShmaWxlbmFtZSkpO1xuXG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogR2V0IG9yIHNldCB0aGUgZGlyZWN0b3J5IGZvciBzZWFyY2hpbmcgZm9yIGV4ZWN1dGFibGUgc3ViY29tbWFuZHMgb2YgdGhpcyBjb21tYW5kLlxuICAgKlxuICAgKiBAZXhhbXBsZVxuICAgKiBwcm9ncmFtLmV4ZWN1dGFibGVEaXIoX19kaXJuYW1lKTtcbiAgICogLy8gb3JcbiAgICogcHJvZ3JhbS5leGVjdXRhYmxlRGlyKCdzdWJjb21tYW5kcycpO1xuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gW3BhdGhdXG4gICAqIEByZXR1cm4geyhzdHJpbmd8bnVsbHxDb21tYW5kKX1cbiAgICovXG5cbiAgZXhlY3V0YWJsZURpcihwYXRoKSB7XG4gICAgaWYgKHBhdGggPT09IHVuZGVmaW5lZCkgcmV0dXJuIHRoaXMuX2V4ZWN1dGFibGVEaXI7XG4gICAgdGhpcy5fZXhlY3V0YWJsZURpciA9IHBhdGg7XG4gICAgcmV0dXJuIHRoaXM7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHByb2dyYW0gaGVscCBkb2N1bWVudGF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0ge3sgZXJyb3I6IGJvb2xlYW4gfX0gW2NvbnRleHRPcHRpb25zXSAtIHBhc3Mge2Vycm9yOnRydWV9IHRvIHdyYXAgZm9yIHN0ZGVyciBpbnN0ZWFkIG9mIHN0ZG91dFxuICAgKiBAcmV0dXJuIHtzdHJpbmd9XG4gICAqL1xuXG4gIGhlbHBJbmZvcm1hdGlvbihjb250ZXh0T3B0aW9ucykge1xuICAgIGNvbnN0IGhlbHBlciA9IHRoaXMuY3JlYXRlSGVscCgpO1xuICAgIGNvbnN0IGNvbnRleHQgPSB0aGlzLl9nZXRPdXRwdXRDb250ZXh0KGNvbnRleHRPcHRpb25zKTtcbiAgICBoZWxwZXIucHJlcGFyZUNvbnRleHQoe1xuICAgICAgZXJyb3I6IGNvbnRleHQuZXJyb3IsXG4gICAgICBoZWxwV2lkdGg6IGNvbnRleHQuaGVscFdpZHRoLFxuICAgICAgb3V0cHV0SGFzQ29sb3JzOiBjb250ZXh0Lmhhc0NvbG9ycyxcbiAgICB9KTtcbiAgICBjb25zdCB0ZXh0ID0gaGVscGVyLmZvcm1hdEhlbHAodGhpcywgaGVscGVyKTtcbiAgICBpZiAoY29udGV4dC5oYXNDb2xvcnMpIHJldHVybiB0ZXh0O1xuICAgIHJldHVybiB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLnN0cmlwQ29sb3IodGV4dCk7XG4gIH1cblxuICAvKipcbiAgICogQHR5cGVkZWYgSGVscENvbnRleHRcbiAgICogQHR5cGUge29iamVjdH1cbiAgICogQHByb3BlcnR5IHtib29sZWFufSBlcnJvclxuICAgKiBAcHJvcGVydHkge251bWJlcn0gaGVscFdpZHRoXG4gICAqIEBwcm9wZXJ0eSB7Ym9vbGVhbn0gaGFzQ29sb3JzXG4gICAqIEBwcm9wZXJ0eSB7ZnVuY3Rpb259IHdyaXRlIC0gaW5jbHVkZXMgc3RyaXBDb2xvciBpZiBuZWVkZWRcbiAgICpcbiAgICogQHJldHVybnMge0hlbHBDb250ZXh0fVxuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfZ2V0T3V0cHV0Q29udGV4dChjb250ZXh0T3B0aW9ucykge1xuICAgIGNvbnRleHRPcHRpb25zID0gY29udGV4dE9wdGlvbnMgfHwge307XG4gICAgY29uc3QgZXJyb3IgPSAhIWNvbnRleHRPcHRpb25zLmVycm9yO1xuICAgIGxldCBiYXNlV3JpdGU7XG4gICAgbGV0IGhhc0NvbG9ycztcbiAgICBsZXQgaGVscFdpZHRoO1xuICAgIGlmIChlcnJvcikge1xuICAgICAgYmFzZVdyaXRlID0gKHN0cikgPT4gdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbi53cml0ZUVycihzdHIpO1xuICAgICAgaGFzQ29sb3JzID0gdGhpcy5fb3V0cHV0Q29uZmlndXJhdGlvbi5nZXRFcnJIYXNDb2xvcnMoKTtcbiAgICAgIGhlbHBXaWR0aCA9IHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24uZ2V0RXJySGVscFdpZHRoKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGJhc2VXcml0ZSA9IChzdHIpID0+IHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24ud3JpdGVPdXQoc3RyKTtcbiAgICAgIGhhc0NvbG9ycyA9IHRoaXMuX291dHB1dENvbmZpZ3VyYXRpb24uZ2V0T3V0SGFzQ29sb3JzKCk7XG4gICAgICBoZWxwV2lkdGggPSB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLmdldE91dEhlbHBXaWR0aCgpO1xuICAgIH1cbiAgICBjb25zdCB3cml0ZSA9IChzdHIpID0+IHtcbiAgICAgIGlmICghaGFzQ29sb3JzKSBzdHIgPSB0aGlzLl9vdXRwdXRDb25maWd1cmF0aW9uLnN0cmlwQ29sb3Ioc3RyKTtcbiAgICAgIHJldHVybiBiYXNlV3JpdGUoc3RyKTtcbiAgICB9O1xuICAgIHJldHVybiB7IGVycm9yLCB3cml0ZSwgaGFzQ29sb3JzLCBoZWxwV2lkdGggfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBPdXRwdXQgaGVscCBpbmZvcm1hdGlvbiBmb3IgdGhpcyBjb21tYW5kLlxuICAgKlxuICAgKiBPdXRwdXRzIGJ1aWx0LWluIGhlbHAsIGFuZCBjdXN0b20gdGV4dCBhZGRlZCB1c2luZyBgLmFkZEhlbHBUZXh0KClgLlxuICAgKlxuICAgKiBAcGFyYW0ge3sgZXJyb3I6IGJvb2xlYW4gfSB8IEZ1bmN0aW9ufSBbY29udGV4dE9wdGlvbnNdIC0gcGFzcyB7ZXJyb3I6dHJ1ZX0gdG8gd3JpdGUgdG8gc3RkZXJyIGluc3RlYWQgb2Ygc3Rkb3V0XG4gICAqL1xuXG4gIG91dHB1dEhlbHAoY29udGV4dE9wdGlvbnMpIHtcbiAgICBsZXQgZGVwcmVjYXRlZENhbGxiYWNrO1xuICAgIGlmICh0eXBlb2YgY29udGV4dE9wdGlvbnMgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGRlcHJlY2F0ZWRDYWxsYmFjayA9IGNvbnRleHRPcHRpb25zO1xuICAgICAgY29udGV4dE9wdGlvbnMgPSB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgY29uc3Qgb3V0cHV0Q29udGV4dCA9IHRoaXMuX2dldE91dHB1dENvbnRleHQoY29udGV4dE9wdGlvbnMpO1xuICAgIC8qKiBAdHlwZSB7SGVscFRleHRFdmVudENvbnRleHR9ICovXG4gICAgY29uc3QgZXZlbnRDb250ZXh0ID0ge1xuICAgICAgZXJyb3I6IG91dHB1dENvbnRleHQuZXJyb3IsXG4gICAgICB3cml0ZTogb3V0cHV0Q29udGV4dC53cml0ZSxcbiAgICAgIGNvbW1hbmQ6IHRoaXMsXG4gICAgfTtcblxuICAgIHRoaXMuX2dldENvbW1hbmRBbmRBbmNlc3RvcnMoKVxuICAgICAgLnJldmVyc2UoKVxuICAgICAgLmZvckVhY2goKGNvbW1hbmQpID0+IGNvbW1hbmQuZW1pdCgnYmVmb3JlQWxsSGVscCcsIGV2ZW50Q29udGV4dCkpO1xuICAgIHRoaXMuZW1pdCgnYmVmb3JlSGVscCcsIGV2ZW50Q29udGV4dCk7XG5cbiAgICBsZXQgaGVscEluZm9ybWF0aW9uID0gdGhpcy5oZWxwSW5mb3JtYXRpb24oeyBlcnJvcjogb3V0cHV0Q29udGV4dC5lcnJvciB9KTtcbiAgICBpZiAoZGVwcmVjYXRlZENhbGxiYWNrKSB7XG4gICAgICBoZWxwSW5mb3JtYXRpb24gPSBkZXByZWNhdGVkQ2FsbGJhY2soaGVscEluZm9ybWF0aW9uKTtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIGhlbHBJbmZvcm1hdGlvbiAhPT0gJ3N0cmluZycgJiZcbiAgICAgICAgIUJ1ZmZlci5pc0J1ZmZlcihoZWxwSW5mb3JtYXRpb24pXG4gICAgICApIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdvdXRwdXRIZWxwIGNhbGxiYWNrIG11c3QgcmV0dXJuIGEgc3RyaW5nIG9yIGEgQnVmZmVyJyk7XG4gICAgICB9XG4gICAgfVxuICAgIG91dHB1dENvbnRleHQud3JpdGUoaGVscEluZm9ybWF0aW9uKTtcblxuICAgIGlmICh0aGlzLl9nZXRIZWxwT3B0aW9uKCk/LmxvbmcpIHtcbiAgICAgIHRoaXMuZW1pdCh0aGlzLl9nZXRIZWxwT3B0aW9uKCkubG9uZyk7IC8vIGRlcHJlY2F0ZWRcbiAgICB9XG4gICAgdGhpcy5lbWl0KCdhZnRlckhlbHAnLCBldmVudENvbnRleHQpO1xuICAgIHRoaXMuX2dldENvbW1hbmRBbmRBbmNlc3RvcnMoKS5mb3JFYWNoKChjb21tYW5kKSA9PlxuICAgICAgY29tbWFuZC5lbWl0KCdhZnRlckFsbEhlbHAnLCBldmVudENvbnRleHQpLFxuICAgICk7XG4gIH1cblxuICAvKipcbiAgICogWW91IGNhbiBwYXNzIGluIGZsYWdzIGFuZCBhIGRlc2NyaXB0aW9uIHRvIGN1c3RvbWlzZSB0aGUgYnVpbHQtaW4gaGVscCBvcHRpb24uXG4gICAqIFBhc3MgaW4gZmFsc2UgdG8gZGlzYWJsZSB0aGUgYnVpbHQtaW4gaGVscCBvcHRpb24uXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqIHByb2dyYW0uaGVscE9wdGlvbignLT8sIC0taGVscCcgJ3Nob3cgaGVscCcpOyAvLyBjdXN0b21pc2VcbiAgICogcHJvZ3JhbS5oZWxwT3B0aW9uKGZhbHNlKTsgLy8gZGlzYWJsZVxuICAgKlxuICAgKiBAcGFyYW0geyhzdHJpbmcgfCBib29sZWFuKX0gZmxhZ3NcbiAgICogQHBhcmFtIHtzdHJpbmd9IFtkZXNjcmlwdGlvbl1cbiAgICogQHJldHVybiB7Q29tbWFuZH0gYHRoaXNgIGNvbW1hbmQgZm9yIGNoYWluaW5nXG4gICAqL1xuXG4gIGhlbHBPcHRpb24oZmxhZ3MsIGRlc2NyaXB0aW9uKSB7XG4gICAgLy8gU3VwcG9ydCBlbmFibGluZy9kaXNhYmxpbmcgYnVpbHQtaW4gaGVscCBvcHRpb24uXG4gICAgaWYgKHR5cGVvZiBmbGFncyA9PT0gJ2Jvb2xlYW4nKSB7XG4gICAgICBpZiAoZmxhZ3MpIHtcbiAgICAgICAgaWYgKHRoaXMuX2hlbHBPcHRpb24gPT09IG51bGwpIHRoaXMuX2hlbHBPcHRpb24gPSB1bmRlZmluZWQ7IC8vIHJlZW5hYmxlXG4gICAgICAgIGlmICh0aGlzLl9kZWZhdWx0T3B0aW9uR3JvdXApIHtcbiAgICAgICAgICAvLyBtYWtlIHRoZSBvcHRpb24gdG8gc3RvcmUgdGhlIGdyb3VwXG4gICAgICAgICAgdGhpcy5faW5pdE9wdGlvbkdyb3VwKHRoaXMuX2dldEhlbHBPcHRpb24oKSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuX2hlbHBPcHRpb24gPSBudWxsOyAvLyBkaXNhYmxlXG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9XG5cbiAgICAvLyBDdXN0b21pc2UgZmxhZ3MgYW5kIGRlc2NyaXB0aW9uLlxuICAgIHRoaXMuX2hlbHBPcHRpb24gPSB0aGlzLmNyZWF0ZU9wdGlvbihcbiAgICAgIGZsYWdzID8/ICctaCwgLS1oZWxwJyxcbiAgICAgIGRlc2NyaXB0aW9uID8/ICdkaXNwbGF5IGhlbHAgZm9yIGNvbW1hbmQnLFxuICAgICk7XG4gICAgLy8gaW5pdCBncm91cCB1bmxlc3MgbGF6eSBjcmVhdGVcbiAgICBpZiAoZmxhZ3MgfHwgZGVzY3JpcHRpb24pIHRoaXMuX2luaXRPcHRpb25Hcm91cCh0aGlzLl9oZWxwT3B0aW9uKTtcblxuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIExhenkgY3JlYXRlIGhlbHAgb3B0aW9uLlxuICAgKiBSZXR1cm5zIG51bGwgaWYgaGFzIGJlZW4gZGlzYWJsZWQgd2l0aCAuaGVscE9wdGlvbihmYWxzZSkuXG4gICAqXG4gICAqIEByZXR1cm5zIHsoT3B0aW9uIHwgbnVsbCl9IHRoZSBoZWxwIG9wdGlvblxuICAgKiBAcGFja2FnZVxuICAgKi9cbiAgX2dldEhlbHBPcHRpb24oKSB7XG4gICAgLy8gTGF6eSBjcmVhdGUgaGVscCBvcHRpb24gb24gZGVtYW5kLlxuICAgIGlmICh0aGlzLl9oZWxwT3B0aW9uID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHRoaXMuaGVscE9wdGlvbih1bmRlZmluZWQsIHVuZGVmaW5lZCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9oZWxwT3B0aW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIFN1cHBseSB5b3VyIG93biBvcHRpb24gdG8gdXNlIGZvciB0aGUgYnVpbHQtaW4gaGVscCBvcHRpb24uXG4gICAqIFRoaXMgaXMgYW4gYWx0ZXJuYXRpdmUgdG8gdXNpbmcgaGVscE9wdGlvbigpIHRvIGN1c3RvbWlzZSB0aGUgZmxhZ3MgYW5kIGRlc2NyaXB0aW9uIGV0Yy5cbiAgICpcbiAgICogQHBhcmFtIHtPcHRpb259IG9wdGlvblxuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG4gIGFkZEhlbHBPcHRpb24ob3B0aW9uKSB7XG4gICAgdGhpcy5faGVscE9wdGlvbiA9IG9wdGlvbjtcbiAgICB0aGlzLl9pbml0T3B0aW9uR3JvdXAob3B0aW9uKTtcbiAgICByZXR1cm4gdGhpcztcbiAgfVxuXG4gIC8qKlxuICAgKiBPdXRwdXQgaGVscCBpbmZvcm1hdGlvbiBhbmQgZXhpdC5cbiAgICpcbiAgICogT3V0cHV0cyBidWlsdC1pbiBoZWxwLCBhbmQgY3VzdG9tIHRleHQgYWRkZWQgdXNpbmcgYC5hZGRIZWxwVGV4dCgpYC5cbiAgICpcbiAgICogQHBhcmFtIHt7IGVycm9yOiBib29sZWFuIH19IFtjb250ZXh0T3B0aW9uc10gLSBwYXNzIHtlcnJvcjp0cnVlfSB0byB3cml0ZSB0byBzdGRlcnIgaW5zdGVhZCBvZiBzdGRvdXRcbiAgICovXG5cbiAgaGVscChjb250ZXh0T3B0aW9ucykge1xuICAgIHRoaXMub3V0cHV0SGVscChjb250ZXh0T3B0aW9ucyk7XG4gICAgbGV0IGV4aXRDb2RlID0gTnVtYmVyKHByb2Nlc3MuZXhpdENvZGUgPz8gMCk7IC8vIHByb2Nlc3MuZXhpdENvZGUgZG9lcyBhbGxvdyBhIHN0cmluZyBvciBhbiBpbnRlZ2VyLCBidXQgd2UgcHJlZmVyIGp1c3QgYSBudW1iZXJcbiAgICBpZiAoXG4gICAgICBleGl0Q29kZSA9PT0gMCAmJlxuICAgICAgY29udGV4dE9wdGlvbnMgJiZcbiAgICAgIHR5cGVvZiBjb250ZXh0T3B0aW9ucyAhPT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgY29udGV4dE9wdGlvbnMuZXJyb3JcbiAgICApIHtcbiAgICAgIGV4aXRDb2RlID0gMTtcbiAgICB9XG4gICAgLy8gbWVzc2FnZTogZG8gbm90IGhhdmUgYWxsIGRpc3BsYXllZCB0ZXh0IGF2YWlsYWJsZSBzbyBvbmx5IHBhc3NpbmcgcGxhY2Vob2xkZXIuXG4gICAgdGhpcy5fZXhpdChleGl0Q29kZSwgJ2NvbW1hbmRlci5oZWxwJywgJyhvdXRwdXRIZWxwKScpO1xuICB9XG5cbiAgLyoqXG4gICAqIC8vIERvIGEgbGl0dGxlIHR5cGluZyB0byBjb29yZGluYXRlIGVtaXQgYW5kIGxpc3RlbmVyIGZvciB0aGUgaGVscCB0ZXh0IGV2ZW50cy5cbiAgICogQHR5cGVkZWYgSGVscFRleHRFdmVudENvbnRleHRcbiAgICogQHR5cGUge29iamVjdH1cbiAgICogQHByb3BlcnR5IHtib29sZWFufSBlcnJvclxuICAgKiBAcHJvcGVydHkge0NvbW1hbmR9IGNvbW1hbmRcbiAgICogQHByb3BlcnR5IHtmdW5jdGlvbn0gd3JpdGVcbiAgICovXG5cbiAgLyoqXG4gICAqIEFkZCBhZGRpdGlvbmFsIHRleHQgdG8gYmUgZGlzcGxheWVkIHdpdGggdGhlIGJ1aWx0LWluIGhlbHAuXG4gICAqXG4gICAqIFBvc2l0aW9uIGlzICdiZWZvcmUnIG9yICdhZnRlcicgdG8gYWZmZWN0IGp1c3QgdGhpcyBjb21tYW5kLFxuICAgKiBhbmQgJ2JlZm9yZUFsbCcgb3IgJ2FmdGVyQWxsJyB0byBhZmZlY3QgdGhpcyBjb21tYW5kIGFuZCBhbGwgaXRzIHN1YmNvbW1hbmRzLlxuICAgKlxuICAgKiBAcGFyYW0ge3N0cmluZ30gcG9zaXRpb24gLSBiZWZvcmUgb3IgYWZ0ZXIgYnVpbHQtaW4gaGVscFxuICAgKiBAcGFyYW0geyhzdHJpbmcgfCBGdW5jdGlvbil9IHRleHQgLSBzdHJpbmcgdG8gYWRkLCBvciBhIGZ1bmN0aW9uIHJldHVybmluZyBhIHN0cmluZ1xuICAgKiBAcmV0dXJuIHtDb21tYW5kfSBgdGhpc2AgY29tbWFuZCBmb3IgY2hhaW5pbmdcbiAgICovXG5cbiAgYWRkSGVscFRleHQocG9zaXRpb24sIHRleHQpIHtcbiAgICBjb25zdCBhbGxvd2VkVmFsdWVzID0gWydiZWZvcmVBbGwnLCAnYmVmb3JlJywgJ2FmdGVyJywgJ2FmdGVyQWxsJ107XG4gICAgaWYgKCFhbGxvd2VkVmFsdWVzLmluY2x1ZGVzKHBvc2l0aW9uKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmV4cGVjdGVkIHZhbHVlIGZvciBwb3NpdGlvbiB0byBhZGRIZWxwVGV4dC5cbkV4cGVjdGluZyBvbmUgb2YgJyR7YWxsb3dlZFZhbHVlcy5qb2luKFwiJywgJ1wiKX0nYCk7XG4gICAgfVxuXG4gICAgY29uc3QgaGVscEV2ZW50ID0gYCR7cG9zaXRpb259SGVscGA7XG4gICAgdGhpcy5vbihoZWxwRXZlbnQsICgvKiogQHR5cGUge0hlbHBUZXh0RXZlbnRDb250ZXh0fSAqLyBjb250ZXh0KSA9PiB7XG4gICAgICBsZXQgaGVscFN0cjtcbiAgICAgIGlmICh0eXBlb2YgdGV4dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBoZWxwU3RyID0gdGV4dCh7IGVycm9yOiBjb250ZXh0LmVycm9yLCBjb21tYW5kOiBjb250ZXh0LmNvbW1hbmQgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBoZWxwU3RyID0gdGV4dDtcbiAgICAgIH1cbiAgICAgIC8vIElnbm9yZSBmYWxzeSB2YWx1ZSB3aGVuIG5vdGhpbmcgdG8gb3V0cHV0LlxuICAgICAgaWYgKGhlbHBTdHIpIHtcbiAgICAgICAgY29udGV4dC53cml0ZShgJHtoZWxwU3RyfVxcbmApO1xuICAgICAgfVxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgLyoqXG4gICAqIE91dHB1dCBoZWxwIGluZm9ybWF0aW9uIGlmIGhlbHAgZmxhZ3Mgc3BlY2lmaWVkXG4gICAqXG4gICAqIEBwYXJhbSB7QXJyYXl9IGFyZ3MgLSBhcnJheSBvZiBvcHRpb25zIHRvIHNlYXJjaCBmb3IgaGVscCBmbGFnc1xuICAgKiBAcHJpdmF0ZVxuICAgKi9cblxuICBfb3V0cHV0SGVscElmUmVxdWVzdGVkKGFyZ3MpIHtcbiAgICBjb25zdCBoZWxwT3B0aW9uID0gdGhpcy5fZ2V0SGVscE9wdGlvbigpO1xuICAgIGNvbnN0IGhlbHBSZXF1ZXN0ZWQgPSBoZWxwT3B0aW9uICYmIGFyZ3MuZmluZCgoYXJnKSA9PiBoZWxwT3B0aW9uLmlzKGFyZykpO1xuICAgIGlmIChoZWxwUmVxdWVzdGVkKSB7XG4gICAgICB0aGlzLm91dHB1dEhlbHAoKTtcbiAgICAgIC8vIChEbyBub3QgaGF2ZSBhbGwgZGlzcGxheWVkIHRleHQgYXZhaWxhYmxlIHNvIG9ubHkgcGFzc2luZyBwbGFjZWhvbGRlci4pXG4gICAgICB0aGlzLl9leGl0KDAsICdjb21tYW5kZXIuaGVscERpc3BsYXllZCcsICcob3V0cHV0SGVscCknKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBTY2FuIGFyZ3VtZW50cyBhbmQgaW5jcmVtZW50IHBvcnQgbnVtYmVyIGZvciBpbnNwZWN0IGNhbGxzICh0byBhdm9pZCBjb25mbGljdHMgd2hlbiBzcGF3bmluZyBuZXcgY29tbWFuZCkuXG4gKlxuICogQHBhcmFtIHtzdHJpbmdbXX0gYXJncyAtIGFycmF5IG9mIGFyZ3VtZW50cyBmcm9tIG5vZGUuZXhlY0FyZ3ZcbiAqIEByZXR1cm5zIHtzdHJpbmdbXX1cbiAqIEBwcml2YXRlXG4gKi9cblxuZnVuY3Rpb24gaW5jcmVtZW50Tm9kZUluc3BlY3RvclBvcnQoYXJncykge1xuICAvLyBUZXN0aW5nIGZvciB0aGVzZSBvcHRpb25zOlxuICAvLyAgLS1pbnNwZWN0Wz1baG9zdDpdcG9ydF1cbiAgLy8gIC0taW5zcGVjdC1icmtbPVtob3N0Ol1wb3J0XVxuICAvLyAgLS1pbnNwZWN0LXBvcnQ9W2hvc3Q6XXBvcnRcbiAgcmV0dXJuIGFyZ3MubWFwKChhcmcpID0+IHtcbiAgICBpZiAoIWFyZy5zdGFydHNXaXRoKCctLWluc3BlY3QnKSkge1xuICAgICAgcmV0dXJuIGFyZztcbiAgICB9XG4gICAgbGV0IGRlYnVnT3B0aW9uO1xuICAgIGxldCBkZWJ1Z0hvc3QgPSAnMTI3LjAuMC4xJztcbiAgICBsZXQgZGVidWdQb3J0ID0gJzkyMjknO1xuICAgIGxldCBtYXRjaDtcbiAgICBpZiAoKG1hdGNoID0gYXJnLm1hdGNoKC9eKC0taW5zcGVjdCgtYnJrKT8pJC8pKSAhPT0gbnVsbCkge1xuICAgICAgLy8gZS5nLiAtLWluc3BlY3RcbiAgICAgIGRlYnVnT3B0aW9uID0gbWF0Y2hbMV07XG4gICAgfSBlbHNlIGlmIChcbiAgICAgIChtYXRjaCA9IGFyZy5tYXRjaCgvXigtLWluc3BlY3QoLWJya3wtcG9ydCk/KT0oW146XSspJC8pKSAhPT0gbnVsbFxuICAgICkge1xuICAgICAgZGVidWdPcHRpb24gPSBtYXRjaFsxXTtcbiAgICAgIGlmICgvXlxcZCskLy50ZXN0KG1hdGNoWzNdKSkge1xuICAgICAgICAvLyBlLmcuIC0taW5zcGVjdD0xMjM0XG4gICAgICAgIGRlYnVnUG9ydCA9IG1hdGNoWzNdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gZS5nLiAtLWluc3BlY3Q9bG9jYWxob3N0XG4gICAgICAgIGRlYnVnSG9zdCA9IG1hdGNoWzNdO1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICAobWF0Y2ggPSBhcmcubWF0Y2goL14oLS1pbnNwZWN0KC1icmt8LXBvcnQpPyk9KFteOl0rKTooXFxkKykkLykpICE9PSBudWxsXG4gICAgKSB7XG4gICAgICAvLyBlLmcuIC0taW5zcGVjdD1sb2NhbGhvc3Q6MTIzNFxuICAgICAgZGVidWdPcHRpb24gPSBtYXRjaFsxXTtcbiAgICAgIGRlYnVnSG9zdCA9IG1hdGNoWzNdO1xuICAgICAgZGVidWdQb3J0ID0gbWF0Y2hbNF07XG4gICAgfVxuXG4gICAgaWYgKGRlYnVnT3B0aW9uICYmIGRlYnVnUG9ydCAhPT0gJzAnKSB7XG4gICAgICByZXR1cm4gYCR7ZGVidWdPcHRpb259PSR7ZGVidWdIb3N0fToke3BhcnNlSW50KGRlYnVnUG9ydCkgKyAxfWA7XG4gICAgfVxuICAgIHJldHVybiBhcmc7XG4gIH0pO1xufVxuXG4vKipcbiAqIEByZXR1cm5zIHtib29sZWFuIHwgdW5kZWZpbmVkfVxuICogQHBhY2thZ2VcbiAqL1xuZnVuY3Rpb24gdXNlQ29sb3IoKSB7XG4gIC8vIFRlc3QgZm9yIGNvbW1vbiBjb252ZW50aW9ucy5cbiAgLy8gTkI6IHRoZSBvYnNlcnZlZCBiZWhhdmlvdXIgaXMgaW4gY29tYmluYXRpb24gd2l0aCBob3cgYXV0aG9yIGFkZHMgY29sb3IhIEZvciBleGFtcGxlOlxuICAvLyAgIC0gd2UgZG8gbm90IHRlc3QgTk9ERV9ESVNBQkxFX0NPTE9SUywgYnV0IHV0aWw6c3R5bGV0ZXh0IGRvZXNcbiAgLy8gICAtIHdlIGRvIHRlc3QgTk9fQ09MT1IsIGJ1dCBDaGFsayBkb2VzIG5vdFxuICAvL1xuICAvLyBSZWZlcmVuY2VzOlxuICAvLyBodHRwczovL25vLWNvbG9yLm9yZ1xuICAvLyBodHRwczovL2JpeGVuc2UuY29tL2NsaWNvbG9ycy9cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvMGEwMDIxN2E1ZjY3ZWY0YTIyMzg0Y2ZjODBlYjZkZDlhOTE3ZmRjMS9saWIvaW50ZXJuYWwvdHR5LmpzI0wxMDlcbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2NoYWxrL3N1cHBvcnRzLWNvbG9yL2Jsb2IvYzIxNDMxNGExNGJjYjE3NGIxMmIzMDE0YjJiMGE4ZGUzNzUwMjlhZS9pbmRleC5qcyNMMzNcbiAgLy8gKGh0dHBzOi8vZm9yY2UtY29sb3Iub3JnIHJlY2VudCB3ZWIgcGFnZSBmcm9tIDIwMjMsIGRvZXMgbm90IG1hdGNoIG1ham9yIGphdmFzY3JpcHQgaW1wbGVtZW50YXRpb25zKVxuXG4gIGlmIChcbiAgICBwcm9jZXNzLmVudi5OT19DT0xPUiB8fFxuICAgIHByb2Nlc3MuZW52LkZPUkNFX0NPTE9SID09PSAnMCcgfHxcbiAgICBwcm9jZXNzLmVudi5GT1JDRV9DT0xPUiA9PT0gJ2ZhbHNlJ1xuICApXG4gICAgcmV0dXJuIGZhbHNlO1xuICBpZiAocHJvY2Vzcy5lbnYuRk9SQ0VfQ09MT1IgfHwgcHJvY2Vzcy5lbnYuQ0xJQ09MT1JfRk9SQ0UgIT09IHVuZGVmaW5lZClcbiAgICByZXR1cm4gdHJ1ZTtcbiAgcmV0dXJuIHVuZGVmaW5lZDtcbn1cblxuZXhwb3J0cy5Db21tYW5kID0gQ29tbWFuZDtcbmV4cG9ydHMudXNlQ29sb3IgPSB1c2VDb2xvcjsgLy8gZXhwb3J0aW5nIGZvciB0ZXN0c1xuIiwgImNvbnN0IHsgQXJndW1lbnQgfSA9IHJlcXVpcmUoJy4vbGliL2FyZ3VtZW50LmpzJyk7XG5jb25zdCB7IENvbW1hbmQgfSA9IHJlcXVpcmUoJy4vbGliL2NvbW1hbmQuanMnKTtcbmNvbnN0IHsgQ29tbWFuZGVyRXJyb3IsIEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuL2xpYi9lcnJvci5qcycpO1xuY29uc3QgeyBIZWxwIH0gPSByZXF1aXJlKCcuL2xpYi9oZWxwLmpzJyk7XG5jb25zdCB7IE9wdGlvbiB9ID0gcmVxdWlyZSgnLi9saWIvb3B0aW9uLmpzJyk7XG5cbmV4cG9ydHMucHJvZ3JhbSA9IG5ldyBDb21tYW5kKCk7XG5cbmV4cG9ydHMuY3JlYXRlQ29tbWFuZCA9IChuYW1lKSA9PiBuZXcgQ29tbWFuZChuYW1lKTtcbmV4cG9ydHMuY3JlYXRlT3B0aW9uID0gKGZsYWdzLCBkZXNjcmlwdGlvbikgPT4gbmV3IE9wdGlvbihmbGFncywgZGVzY3JpcHRpb24pO1xuZXhwb3J0cy5jcmVhdGVBcmd1bWVudCA9IChuYW1lLCBkZXNjcmlwdGlvbikgPT4gbmV3IEFyZ3VtZW50KG5hbWUsIGRlc2NyaXB0aW9uKTtcblxuLyoqXG4gKiBFeHBvc2UgY2xhc3Nlc1xuICovXG5cbmV4cG9ydHMuQ29tbWFuZCA9IENvbW1hbmQ7XG5leHBvcnRzLk9wdGlvbiA9IE9wdGlvbjtcbmV4cG9ydHMuQXJndW1lbnQgPSBBcmd1bWVudDtcbmV4cG9ydHMuSGVscCA9IEhlbHA7XG5cbmV4cG9ydHMuQ29tbWFuZGVyRXJyb3IgPSBDb21tYW5kZXJFcnJvcjtcbmV4cG9ydHMuSW52YWxpZEFyZ3VtZW50RXJyb3IgPSBJbnZhbGlkQXJndW1lbnRFcnJvcjtcbmV4cG9ydHMuSW52YWxpZE9wdGlvbkFyZ3VtZW50RXJyb3IgPSBJbnZhbGlkQXJndW1lbnRFcnJvcjsgLy8gRGVwcmVjYXRlZFxuIiwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgIid1c2Ugc3RyaWN0JztcblxudmFyIG5ldCA9IHJlcXVpcmUoJ25ldCcpO1xudmFyIHRscyA9IHJlcXVpcmUoJ3RscycpO1xudmFyIGh0dHAgPSByZXF1aXJlKCdodHRwJyk7XG52YXIgaHR0cHMgPSByZXF1aXJlKCdodHRwcycpO1xudmFyIGV2ZW50cyA9IHJlcXVpcmUoJ2V2ZW50cycpO1xudmFyIGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpO1xudmFyIHV0aWwgPSByZXF1aXJlKCd1dGlsJyk7XG5cblxuZXhwb3J0cy5odHRwT3Zlckh0dHAgPSBodHRwT3Zlckh0dHA7XG5leHBvcnRzLmh0dHBzT3Zlckh0dHAgPSBodHRwc092ZXJIdHRwO1xuZXhwb3J0cy5odHRwT3Zlckh0dHBzID0gaHR0cE92ZXJIdHRwcztcbmV4cG9ydHMuaHR0cHNPdmVySHR0cHMgPSBodHRwc092ZXJIdHRwcztcblxuXG5mdW5jdGlvbiBodHRwT3Zlckh0dHAob3B0aW9ucykge1xuICB2YXIgYWdlbnQgPSBuZXcgVHVubmVsaW5nQWdlbnQob3B0aW9ucyk7XG4gIGFnZW50LnJlcXVlc3QgPSBodHRwLnJlcXVlc3Q7XG4gIHJldHVybiBhZ2VudDtcbn1cblxuZnVuY3Rpb24gaHR0cHNPdmVySHR0cChvcHRpb25zKSB7XG4gIHZhciBhZ2VudCA9IG5ldyBUdW5uZWxpbmdBZ2VudChvcHRpb25zKTtcbiAgYWdlbnQucmVxdWVzdCA9IGh0dHAucmVxdWVzdDtcbiAgYWdlbnQuY3JlYXRlU29ja2V0ID0gY3JlYXRlU2VjdXJlU29ja2V0O1xuICBhZ2VudC5kZWZhdWx0UG9ydCA9IDQ0MztcbiAgcmV0dXJuIGFnZW50O1xufVxuXG5mdW5jdGlvbiBodHRwT3Zlckh0dHBzKG9wdGlvbnMpIHtcbiAgdmFyIGFnZW50ID0gbmV3IFR1bm5lbGluZ0FnZW50KG9wdGlvbnMpO1xuICBhZ2VudC5yZXF1ZXN0ID0gaHR0cHMucmVxdWVzdDtcbiAgcmV0dXJuIGFnZW50O1xufVxuXG5mdW5jdGlvbiBodHRwc092ZXJIdHRwcyhvcHRpb25zKSB7XG4gIHZhciBhZ2VudCA9IG5ldyBUdW5uZWxpbmdBZ2VudChvcHRpb25zKTtcbiAgYWdlbnQucmVxdWVzdCA9IGh0dHBzLnJlcXVlc3Q7XG4gIGFnZW50LmNyZWF0ZVNvY2tldCA9IGNyZWF0ZVNlY3VyZVNvY2tldDtcbiAgYWdlbnQuZGVmYXVsdFBvcnQgPSA0NDM7XG4gIHJldHVybiBhZ2VudDtcbn1cblxuXG5mdW5jdGlvbiBUdW5uZWxpbmdBZ2VudChvcHRpb25zKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgc2VsZi5vcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcbiAgc2VsZi5wcm94eU9wdGlvbnMgPSBzZWxmLm9wdGlvbnMucHJveHkgfHwge307XG4gIHNlbGYubWF4U29ja2V0cyA9IHNlbGYub3B0aW9ucy5tYXhTb2NrZXRzIHx8IGh0dHAuQWdlbnQuZGVmYXVsdE1heFNvY2tldHM7XG4gIHNlbGYucmVxdWVzdHMgPSBbXTtcbiAgc2VsZi5zb2NrZXRzID0gW107XG5cbiAgc2VsZi5vbignZnJlZScsIGZ1bmN0aW9uIG9uRnJlZShzb2NrZXQsIGhvc3QsIHBvcnQsIGxvY2FsQWRkcmVzcykge1xuICAgIHZhciBvcHRpb25zID0gdG9PcHRpb25zKGhvc3QsIHBvcnQsIGxvY2FsQWRkcmVzcyk7XG4gICAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHNlbGYucmVxdWVzdHMubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgIHZhciBwZW5kaW5nID0gc2VsZi5yZXF1ZXN0c1tpXTtcbiAgICAgIGlmIChwZW5kaW5nLmhvc3QgPT09IG9wdGlvbnMuaG9zdCAmJiBwZW5kaW5nLnBvcnQgPT09IG9wdGlvbnMucG9ydCkge1xuICAgICAgICAvLyBEZXRlY3QgdGhlIHJlcXVlc3QgdG8gY29ubmVjdCBzYW1lIG9yaWdpbiBzZXJ2ZXIsXG4gICAgICAgIC8vIHJldXNlIHRoZSBjb25uZWN0aW9uLlxuICAgICAgICBzZWxmLnJlcXVlc3RzLnNwbGljZShpLCAxKTtcbiAgICAgICAgcGVuZGluZy5yZXF1ZXN0Lm9uU29ja2V0KHNvY2tldCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgc29ja2V0LmRlc3Ryb3koKTtcbiAgICBzZWxmLnJlbW92ZVNvY2tldChzb2NrZXQpO1xuICB9KTtcbn1cbnV0aWwuaW5oZXJpdHMoVHVubmVsaW5nQWdlbnQsIGV2ZW50cy5FdmVudEVtaXR0ZXIpO1xuXG5UdW5uZWxpbmdBZ2VudC5wcm90b3R5cGUuYWRkUmVxdWVzdCA9IGZ1bmN0aW9uIGFkZFJlcXVlc3QocmVxLCBob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICB2YXIgb3B0aW9ucyA9IG1lcmdlT3B0aW9ucyh7cmVxdWVzdDogcmVxfSwgc2VsZi5vcHRpb25zLCB0b09wdGlvbnMoaG9zdCwgcG9ydCwgbG9jYWxBZGRyZXNzKSk7XG5cbiAgaWYgKHNlbGYuc29ja2V0cy5sZW5ndGggPj0gdGhpcy5tYXhTb2NrZXRzKSB7XG4gICAgLy8gV2UgYXJlIG92ZXIgbGltaXQgc28gd2UnbGwgYWRkIGl0IHRvIHRoZSBxdWV1ZS5cbiAgICBzZWxmLnJlcXVlc3RzLnB1c2gob3B0aW9ucyk7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgLy8gSWYgd2UgYXJlIHVuZGVyIG1heFNvY2tldHMgY3JlYXRlIGEgbmV3IG9uZS5cbiAgc2VsZi5jcmVhdGVTb2NrZXQob3B0aW9ucywgZnVuY3Rpb24oc29ja2V0KSB7XG4gICAgc29ja2V0Lm9uKCdmcmVlJywgb25GcmVlKTtcbiAgICBzb2NrZXQub24oJ2Nsb3NlJywgb25DbG9zZU9yUmVtb3ZlKTtcbiAgICBzb2NrZXQub24oJ2FnZW50UmVtb3ZlJywgb25DbG9zZU9yUmVtb3ZlKTtcbiAgICByZXEub25Tb2NrZXQoc29ja2V0KTtcblxuICAgIGZ1bmN0aW9uIG9uRnJlZSgpIHtcbiAgICAgIHNlbGYuZW1pdCgnZnJlZScsIHNvY2tldCwgb3B0aW9ucyk7XG4gICAgfVxuXG4gICAgZnVuY3Rpb24gb25DbG9zZU9yUmVtb3ZlKGVycikge1xuICAgICAgc2VsZi5yZW1vdmVTb2NrZXQoc29ja2V0KTtcbiAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignZnJlZScsIG9uRnJlZSk7XG4gICAgICBzb2NrZXQucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25DbG9zZU9yUmVtb3ZlKTtcbiAgICAgIHNvY2tldC5yZW1vdmVMaXN0ZW5lcignYWdlbnRSZW1vdmUnLCBvbkNsb3NlT3JSZW1vdmUpO1xuICAgIH1cbiAgfSk7XG59O1xuXG5UdW5uZWxpbmdBZ2VudC5wcm90b3R5cGUuY3JlYXRlU29ja2V0ID0gZnVuY3Rpb24gY3JlYXRlU29ja2V0KG9wdGlvbnMsIGNiKSB7XG4gIHZhciBzZWxmID0gdGhpcztcbiAgdmFyIHBsYWNlaG9sZGVyID0ge307XG4gIHNlbGYuc29ja2V0cy5wdXNoKHBsYWNlaG9sZGVyKTtcblxuICB2YXIgY29ubmVjdE9wdGlvbnMgPSBtZXJnZU9wdGlvbnMoe30sIHNlbGYucHJveHlPcHRpb25zLCB7XG4gICAgbWV0aG9kOiAnQ09OTkVDVCcsXG4gICAgcGF0aDogb3B0aW9ucy5ob3N0ICsgJzonICsgb3B0aW9ucy5wb3J0LFxuICAgIGFnZW50OiBmYWxzZSxcbiAgICBoZWFkZXJzOiB7XG4gICAgICBob3N0OiBvcHRpb25zLmhvc3QgKyAnOicgKyBvcHRpb25zLnBvcnRcbiAgICB9XG4gIH0pO1xuICBpZiAob3B0aW9ucy5sb2NhbEFkZHJlc3MpIHtcbiAgICBjb25uZWN0T3B0aW9ucy5sb2NhbEFkZHJlc3MgPSBvcHRpb25zLmxvY2FsQWRkcmVzcztcbiAgfVxuICBpZiAoY29ubmVjdE9wdGlvbnMucHJveHlBdXRoKSB7XG4gICAgY29ubmVjdE9wdGlvbnMuaGVhZGVycyA9IGNvbm5lY3RPcHRpb25zLmhlYWRlcnMgfHwge307XG4gICAgY29ubmVjdE9wdGlvbnMuaGVhZGVyc1snUHJveHktQXV0aG9yaXphdGlvbiddID0gJ0Jhc2ljICcgK1xuICAgICAgICBuZXcgQnVmZmVyKGNvbm5lY3RPcHRpb25zLnByb3h5QXV0aCkudG9TdHJpbmcoJ2Jhc2U2NCcpO1xuICB9XG5cbiAgZGVidWcoJ21ha2luZyBDT05ORUNUIHJlcXVlc3QnKTtcbiAgdmFyIGNvbm5lY3RSZXEgPSBzZWxmLnJlcXVlc3QoY29ubmVjdE9wdGlvbnMpO1xuICBjb25uZWN0UmVxLnVzZUNodW5rZWRFbmNvZGluZ0J5RGVmYXVsdCA9IGZhbHNlOyAvLyBmb3IgdjAuNlxuICBjb25uZWN0UmVxLm9uY2UoJ3Jlc3BvbnNlJywgb25SZXNwb25zZSk7IC8vIGZvciB2MC42XG4gIGNvbm5lY3RSZXEub25jZSgndXBncmFkZScsIG9uVXBncmFkZSk7ICAgLy8gZm9yIHYwLjZcbiAgY29ubmVjdFJlcS5vbmNlKCdjb25uZWN0Jywgb25Db25uZWN0KTsgICAvLyBmb3IgdjAuNyBvciBsYXRlclxuICBjb25uZWN0UmVxLm9uY2UoJ2Vycm9yJywgb25FcnJvcik7XG4gIGNvbm5lY3RSZXEuZW5kKCk7XG5cbiAgZnVuY3Rpb24gb25SZXNwb25zZShyZXMpIHtcbiAgICAvLyBWZXJ5IGhhY2t5LiBUaGlzIGlzIG5lY2Vzc2FyeSB0byBhdm9pZCBodHRwLXBhcnNlciBsZWFrcy5cbiAgICByZXMudXBncmFkZSA9IHRydWU7XG4gIH1cblxuICBmdW5jdGlvbiBvblVwZ3JhZGUocmVzLCBzb2NrZXQsIGhlYWQpIHtcbiAgICAvLyBIYWNreS5cbiAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uKCkge1xuICAgICAgb25Db25uZWN0KHJlcywgc29ja2V0LCBoZWFkKTtcbiAgICB9KTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9uQ29ubmVjdChyZXMsIHNvY2tldCwgaGVhZCkge1xuICAgIGNvbm5lY3RSZXEucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG4gICAgc29ja2V0LnJlbW92ZUFsbExpc3RlbmVycygpO1xuXG4gICAgaWYgKHJlcy5zdGF0dXNDb2RlICE9PSAyMDApIHtcbiAgICAgIGRlYnVnKCd0dW5uZWxpbmcgc29ja2V0IGNvdWxkIG5vdCBiZSBlc3RhYmxpc2hlZCwgc3RhdHVzQ29kZT0lZCcsXG4gICAgICAgIHJlcy5zdGF0dXNDb2RlKTtcbiAgICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IoJ3R1bm5lbGluZyBzb2NrZXQgY291bGQgbm90IGJlIGVzdGFibGlzaGVkLCAnICtcbiAgICAgICAgJ3N0YXR1c0NvZGU9JyArIHJlcy5zdGF0dXNDb2RlKTtcbiAgICAgIGVycm9yLmNvZGUgPSAnRUNPTk5SRVNFVCc7XG4gICAgICBvcHRpb25zLnJlcXVlc3QuZW1pdCgnZXJyb3InLCBlcnJvcik7XG4gICAgICBzZWxmLnJlbW92ZVNvY2tldChwbGFjZWhvbGRlcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChoZWFkLmxlbmd0aCA+IDApIHtcbiAgICAgIGRlYnVnKCdnb3QgaWxsZWdhbCByZXNwb25zZSBib2R5IGZyb20gcHJveHknKTtcbiAgICAgIHNvY2tldC5kZXN0cm95KCk7XG4gICAgICB2YXIgZXJyb3IgPSBuZXcgRXJyb3IoJ2dvdCBpbGxlZ2FsIHJlc3BvbnNlIGJvZHkgZnJvbSBwcm94eScpO1xuICAgICAgZXJyb3IuY29kZSA9ICdFQ09OTlJFU0VUJztcbiAgICAgIG9wdGlvbnMucmVxdWVzdC5lbWl0KCdlcnJvcicsIGVycm9yKTtcbiAgICAgIHNlbGYucmVtb3ZlU29ja2V0KHBsYWNlaG9sZGVyKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZGVidWcoJ3R1bm5lbGluZyBjb25uZWN0aW9uIGhhcyBlc3RhYmxpc2hlZCcpO1xuICAgIHNlbGYuc29ja2V0c1tzZWxmLnNvY2tldHMuaW5kZXhPZihwbGFjZWhvbGRlcildID0gc29ja2V0O1xuICAgIHJldHVybiBjYihzb2NrZXQpO1xuICB9XG5cbiAgZnVuY3Rpb24gb25FcnJvcihjYXVzZSkge1xuICAgIGNvbm5lY3RSZXEucmVtb3ZlQWxsTGlzdGVuZXJzKCk7XG5cbiAgICBkZWJ1ZygndHVubmVsaW5nIHNvY2tldCBjb3VsZCBub3QgYmUgZXN0YWJsaXNoZWQsIGNhdXNlPSVzXFxuJyxcbiAgICAgICAgICBjYXVzZS5tZXNzYWdlLCBjYXVzZS5zdGFjayk7XG4gICAgdmFyIGVycm9yID0gbmV3IEVycm9yKCd0dW5uZWxpbmcgc29ja2V0IGNvdWxkIG5vdCBiZSBlc3RhYmxpc2hlZCwgJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICdjYXVzZT0nICsgY2F1c2UubWVzc2FnZSk7XG4gICAgZXJyb3IuY29kZSA9ICdFQ09OTlJFU0VUJztcbiAgICBvcHRpb25zLnJlcXVlc3QuZW1pdCgnZXJyb3InLCBlcnJvcik7XG4gICAgc2VsZi5yZW1vdmVTb2NrZXQocGxhY2Vob2xkZXIpO1xuICB9XG59O1xuXG5UdW5uZWxpbmdBZ2VudC5wcm90b3R5cGUucmVtb3ZlU29ja2V0ID0gZnVuY3Rpb24gcmVtb3ZlU29ja2V0KHNvY2tldCkge1xuICB2YXIgcG9zID0gdGhpcy5zb2NrZXRzLmluZGV4T2Yoc29ja2V0KVxuICBpZiAocG9zID09PSAtMSkge1xuICAgIHJldHVybjtcbiAgfVxuICB0aGlzLnNvY2tldHMuc3BsaWNlKHBvcywgMSk7XG5cbiAgdmFyIHBlbmRpbmcgPSB0aGlzLnJlcXVlc3RzLnNoaWZ0KCk7XG4gIGlmIChwZW5kaW5nKSB7XG4gICAgLy8gSWYgd2UgaGF2ZSBwZW5kaW5nIHJlcXVlc3RzIGFuZCBhIHNvY2tldCBnZXRzIGNsb3NlZCBhIG5ldyBvbmVcbiAgICAvLyBuZWVkcyB0byBiZSBjcmVhdGVkIHRvIHRha2Ugb3ZlciBpbiB0aGUgcG9vbCBmb3IgdGhlIG9uZSB0aGF0IGNsb3NlZC5cbiAgICB0aGlzLmNyZWF0ZVNvY2tldChwZW5kaW5nLCBmdW5jdGlvbihzb2NrZXQpIHtcbiAgICAgIHBlbmRpbmcucmVxdWVzdC5vblNvY2tldChzb2NrZXQpO1xuICAgIH0pO1xuICB9XG59O1xuXG5mdW5jdGlvbiBjcmVhdGVTZWN1cmVTb2NrZXQob3B0aW9ucywgY2IpIHtcbiAgdmFyIHNlbGYgPSB0aGlzO1xuICBUdW5uZWxpbmdBZ2VudC5wcm90b3R5cGUuY3JlYXRlU29ja2V0LmNhbGwoc2VsZiwgb3B0aW9ucywgZnVuY3Rpb24oc29ja2V0KSB7XG4gICAgdmFyIGhvc3RIZWFkZXIgPSBvcHRpb25zLnJlcXVlc3QuZ2V0SGVhZGVyKCdob3N0Jyk7XG4gICAgdmFyIHRsc09wdGlvbnMgPSBtZXJnZU9wdGlvbnMoe30sIHNlbGYub3B0aW9ucywge1xuICAgICAgc29ja2V0OiBzb2NrZXQsXG4gICAgICBzZXJ2ZXJuYW1lOiBob3N0SGVhZGVyID8gaG9zdEhlYWRlci5yZXBsYWNlKC86LiokLywgJycpIDogb3B0aW9ucy5ob3N0XG4gICAgfSk7XG5cbiAgICAvLyAwIGlzIGR1bW15IHBvcnQgZm9yIHYwLjZcbiAgICB2YXIgc2VjdXJlU29ja2V0ID0gdGxzLmNvbm5lY3QoMCwgdGxzT3B0aW9ucyk7XG4gICAgc2VsZi5zb2NrZXRzW3NlbGYuc29ja2V0cy5pbmRleE9mKHNvY2tldCldID0gc2VjdXJlU29ja2V0O1xuICAgIGNiKHNlY3VyZVNvY2tldCk7XG4gIH0pO1xufVxuXG5cbmZ1bmN0aW9uIHRvT3B0aW9ucyhob3N0LCBwb3J0LCBsb2NhbEFkZHJlc3MpIHtcbiAgaWYgKHR5cGVvZiBob3N0ID09PSAnc3RyaW5nJykgeyAvLyBzaW5jZSB2MC4xMFxuICAgIHJldHVybiB7XG4gICAgICBob3N0OiBob3N0LFxuICAgICAgcG9ydDogcG9ydCxcbiAgICAgIGxvY2FsQWRkcmVzczogbG9jYWxBZGRyZXNzXG4gICAgfTtcbiAgfVxuICByZXR1cm4gaG9zdDsgLy8gZm9yIHYwLjExIG9yIGxhdGVyXG59XG5cbmZ1bmN0aW9uIG1lcmdlT3B0aW9ucyh0YXJnZXQpIHtcbiAgZm9yICh2YXIgaSA9IDEsIGxlbiA9IGFyZ3VtZW50cy5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgIHZhciBvdmVycmlkZXMgPSBhcmd1bWVudHNbaV07XG4gICAgaWYgKHR5cGVvZiBvdmVycmlkZXMgPT09ICdvYmplY3QnKSB7XG4gICAgICB2YXIga2V5cyA9IE9iamVjdC5rZXlzKG92ZXJyaWRlcyk7XG4gICAgICBmb3IgKHZhciBqID0gMCwga2V5TGVuID0ga2V5cy5sZW5ndGg7IGogPCBrZXlMZW47ICsraikge1xuICAgICAgICB2YXIgayA9IGtleXNbal07XG4gICAgICAgIGlmIChvdmVycmlkZXNba10gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRhcmdldFtrXSA9IG92ZXJyaWRlc1trXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuICByZXR1cm4gdGFyZ2V0O1xufVxuXG5cbnZhciBkZWJ1ZztcbmlmIChwcm9jZXNzLmVudi5OT0RFX0RFQlVHICYmIC9cXGJ0dW5uZWxcXGIvLnRlc3QocHJvY2Vzcy5lbnYuTk9ERV9ERUJVRykpIHtcbiAgZGVidWcgPSBmdW5jdGlvbigpIHtcbiAgICB2YXIgYXJncyA9IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgaWYgKHR5cGVvZiBhcmdzWzBdID09PSAnc3RyaW5nJykge1xuICAgICAgYXJnc1swXSA9ICdUVU5ORUw6ICcgKyBhcmdzWzBdO1xuICAgIH0gZWxzZSB7XG4gICAgICBhcmdzLnVuc2hpZnQoJ1RVTk5FTDonKTtcbiAgICB9XG4gICAgY29uc29sZS5lcnJvci5hcHBseShjb25zb2xlLCBhcmdzKTtcbiAgfVxufSBlbHNlIHtcbiAgZGVidWcgPSBmdW5jdGlvbigpIHt9O1xufVxuZXhwb3J0cy5kZWJ1ZyA9IGRlYnVnOyAvLyBmb3IgdGVzdFxuIiwgIm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9saWIvdHVubmVsJyk7XG4iLCAibW9kdWxlLmV4cG9ydHMgPSB7XG4gIGtDbG9zZTogU3ltYm9sKCdjbG9zZScpLFxuICBrRGVzdHJveTogU3ltYm9sKCdkZXN0cm95JyksXG4gIGtEaXNwYXRjaDogU3ltYm9sKCdkaXNwYXRjaCcpLFxuICBrVXJsOiBTeW1ib2woJ3VybCcpLFxuICBrV3JpdGluZzogU3ltYm9sKCd3cml0aW5nJyksXG4gIGtSZXN1bWluZzogU3ltYm9sKCdyZXN1bWluZycpLFxuICBrUXVldWU6IFN5bWJvbCgncXVldWUnKSxcbiAga0Nvbm5lY3Q6IFN5bWJvbCgnY29ubmVjdCcpLFxuICBrQ29ubmVjdGluZzogU3ltYm9sKCdjb25uZWN0aW5nJyksXG4gIGtIZWFkZXJzTGlzdDogU3ltYm9sKCdoZWFkZXJzIGxpc3QnKSxcbiAga0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0OiBTeW1ib2woJ2RlZmF1bHQga2VlcCBhbGl2ZSB0aW1lb3V0JyksXG4gIGtLZWVwQWxpdmVNYXhUaW1lb3V0OiBTeW1ib2woJ21heCBrZWVwIGFsaXZlIHRpbWVvdXQnKSxcbiAga0tlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQ6IFN5bWJvbCgna2VlcCBhbGl2ZSB0aW1lb3V0IHRocmVzaG9sZCcpLFxuICBrS2VlcEFsaXZlVGltZW91dFZhbHVlOiBTeW1ib2woJ2tlZXAgYWxpdmUgdGltZW91dCcpLFxuICBrS2VlcEFsaXZlOiBTeW1ib2woJ2tlZXAgYWxpdmUnKSxcbiAga0hlYWRlcnNUaW1lb3V0OiBTeW1ib2woJ2hlYWRlcnMgdGltZW91dCcpLFxuICBrQm9keVRpbWVvdXQ6IFN5bWJvbCgnYm9keSB0aW1lb3V0JyksXG4gIGtTZXJ2ZXJOYW1lOiBTeW1ib2woJ3NlcnZlciBuYW1lJyksXG4gIGtMb2NhbEFkZHJlc3M6IFN5bWJvbCgnbG9jYWwgYWRkcmVzcycpLFxuICBrSG9zdDogU3ltYm9sKCdob3N0JyksXG4gIGtOb1JlZjogU3ltYm9sKCdubyByZWYnKSxcbiAga0JvZHlVc2VkOiBTeW1ib2woJ3VzZWQnKSxcbiAga1J1bm5pbmc6IFN5bWJvbCgncnVubmluZycpLFxuICBrQmxvY2tpbmc6IFN5bWJvbCgnYmxvY2tpbmcnKSxcbiAga1BlbmRpbmc6IFN5bWJvbCgncGVuZGluZycpLFxuICBrU2l6ZTogU3ltYm9sKCdzaXplJyksXG4gIGtCdXN5OiBTeW1ib2woJ2J1c3knKSxcbiAga1F1ZXVlZDogU3ltYm9sKCdxdWV1ZWQnKSxcbiAga0ZyZWU6IFN5bWJvbCgnZnJlZScpLFxuICBrQ29ubmVjdGVkOiBTeW1ib2woJ2Nvbm5lY3RlZCcpLFxuICBrQ2xvc2VkOiBTeW1ib2woJ2Nsb3NlZCcpLFxuICBrTmVlZERyYWluOiBTeW1ib2woJ25lZWQgZHJhaW4nKSxcbiAga1Jlc2V0OiBTeW1ib2woJ3Jlc2V0JyksXG4gIGtEZXN0cm95ZWQ6IFN5bWJvbC5mb3IoJ25vZGVqcy5zdHJlYW0uZGVzdHJveWVkJyksXG4gIGtNYXhIZWFkZXJzU2l6ZTogU3ltYm9sKCdtYXggaGVhZGVycyBzaXplJyksXG4gIGtSdW5uaW5nSWR4OiBTeW1ib2woJ3J1bm5pbmcgaW5kZXgnKSxcbiAga1BlbmRpbmdJZHg6IFN5bWJvbCgncGVuZGluZyBpbmRleCcpLFxuICBrRXJyb3I6IFN5bWJvbCgnZXJyb3InKSxcbiAga0NsaWVudHM6IFN5bWJvbCgnY2xpZW50cycpLFxuICBrQ2xpZW50OiBTeW1ib2woJ2NsaWVudCcpLFxuICBrUGFyc2VyOiBTeW1ib2woJ3BhcnNlcicpLFxuICBrT25EZXN0cm95ZWQ6IFN5bWJvbCgnZGVzdHJveSBjYWxsYmFja3MnKSxcbiAga1BpcGVsaW5pbmc6IFN5bWJvbCgncGlwZWxpbmluZycpLFxuICBrU29ja2V0OiBTeW1ib2woJ3NvY2tldCcpLFxuICBrSG9zdEhlYWRlcjogU3ltYm9sKCdob3N0IGhlYWRlcicpLFxuICBrQ29ubmVjdG9yOiBTeW1ib2woJ2Nvbm5lY3RvcicpLFxuICBrU3RyaWN0Q29udGVudExlbmd0aDogU3ltYm9sKCdzdHJpY3QgY29udGVudCBsZW5ndGgnKSxcbiAga01heFJlZGlyZWN0aW9uczogU3ltYm9sKCdtYXhSZWRpcmVjdGlvbnMnKSxcbiAga01heFJlcXVlc3RzOiBTeW1ib2woJ21heFJlcXVlc3RzUGVyQ2xpZW50JyksXG4gIGtQcm94eTogU3ltYm9sKCdwcm94eSBhZ2VudCBvcHRpb25zJyksXG4gIGtDb3VudGVyOiBTeW1ib2woJ3NvY2tldCByZXF1ZXN0IGNvdW50ZXInKSxcbiAga0ludGVyY2VwdG9yczogU3ltYm9sKCdkaXNwYXRjaCBpbnRlcmNlcHRvcnMnKSxcbiAga01heFJlc3BvbnNlU2l6ZTogU3ltYm9sKCdtYXggcmVzcG9uc2Ugc2l6ZScpLFxuICBrSFRUUDJTZXNzaW9uOiBTeW1ib2woJ2h0dHAyU2Vzc2lvbicpLFxuICBrSFRUUDJTZXNzaW9uU3RhdGU6IFN5bWJvbCgnaHR0cDJTZXNzaW9uIHN0YXRlJyksXG4gIGtIVFRQMkJ1aWxkUmVxdWVzdDogU3ltYm9sKCdodHRwMiBidWlsZCByZXF1ZXN0JyksXG4gIGtIVFRQMUJ1aWxkUmVxdWVzdDogU3ltYm9sKCdodHRwMSBidWlsZCByZXF1ZXN0JyksXG4gIGtIVFRQMkNvcHlIZWFkZXJzOiBTeW1ib2woJ2h0dHAyIGNvcHkgaGVhZGVycycpLFxuICBrSFRUUENvbm5WZXJzaW9uOiBTeW1ib2woJ2h0dHAgY29ubmVjdGlvbiB2ZXJzaW9uJyksXG4gIGtSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnk6IFN5bWJvbCgncmV0cnkgYWdlbnQgZGVmYXVsdCByZXRyeScpLFxuICBrQ29uc3RydWN0OiBTeW1ib2woJ2NvbnN0cnVjdGFibGUnKVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jbGFzcyBVbmRpY2lFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIHRoaXMubmFtZSA9ICdVbmRpY2lFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUidcbiAgfVxufVxuXG5jbGFzcyBDb25uZWN0VGltZW91dEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgQ29ubmVjdFRpbWVvdXRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnQ29ubmVjdFRpbWVvdXRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdDb25uZWN0IFRpbWVvdXQgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfQ09OTkVDVF9USU1FT1VUJ1xuICB9XG59XG5cbmNsYXNzIEhlYWRlcnNUaW1lb3V0RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBIZWFkZXJzVGltZW91dEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdIZWFkZXJzVGltZW91dEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0hlYWRlcnMgVGltZW91dCBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9IRUFERVJTX1RJTUVPVVQnXG4gIH1cbn1cblxuY2xhc3MgSGVhZGVyc092ZXJmbG93RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBIZWFkZXJzT3ZlcmZsb3dFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnSGVhZGVyc092ZXJmbG93RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnSGVhZGVycyBPdmVyZmxvdyBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9IRUFERVJTX09WRVJGTE9XJ1xuICB9XG59XG5cbmNsYXNzIEJvZHlUaW1lb3V0RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBCb2R5VGltZW91dEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdCb2R5VGltZW91dEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ0JvZHkgVGltZW91dCBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9CT0RZX1RJTUVPVVQnXG4gIH1cbn1cblxuY2xhc3MgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlLCBzdGF0dXNDb2RlLCBoZWFkZXJzLCBib2R5KSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVzcG9uc2UgU3RhdHVzIENvZGUgRXJyb3InXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfUkVTUE9OU0VfU1RBVFVTX0NPREUnXG4gICAgdGhpcy5ib2R5ID0gYm9keVxuICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzQ29kZVxuICAgIHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1c0NvZGVcbiAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzXG4gIH1cbn1cblxuY2xhc3MgSW52YWxpZEFyZ3VtZW50RXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBJbnZhbGlkQXJndW1lbnRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnSW52YWxpZEFyZ3VtZW50RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnSW52YWxpZCBBcmd1bWVudCBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9JTlZBTElEX0FSRydcbiAgfVxufVxuXG5jbGFzcyBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIEludmFsaWRSZXR1cm5WYWx1ZUVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdJbnZhbGlkIFJldHVybiBWYWx1ZSBFcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9JTlZBTElEX1JFVFVSTl9WQUxVRSdcbiAgfVxufVxuXG5jbGFzcyBSZXF1ZXN0QWJvcnRlZEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVxdWVzdEFib3J0ZWRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnQWJvcnRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXF1ZXN0IGFib3J0ZWQnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfQUJPUlRFRCdcbiAgfVxufVxuXG5jbGFzcyBJbmZvcm1hdGlvbmFsRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBJbmZvcm1hdGlvbmFsRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0luZm9ybWF0aW9uYWxFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXF1ZXN0IGluZm9ybWF0aW9uJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0lORk8nXG4gIH1cbn1cblxuY2xhc3MgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVxdWVzdCBib2R5IGxlbmd0aCBkb2VzIG5vdCBtYXRjaCBjb250ZW50LWxlbmd0aCBoZWFkZXInXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfUkVRX0NPTlRFTlRfTEVOR1RIX01JU01BVENIJ1xuICB9XG59XG5cbmNsYXNzIFJlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1Jlc3BvbnNlIGJvZHkgbGVuZ3RoIGRvZXMgbm90IG1hdGNoIGNvbnRlbnQtbGVuZ3RoIGhlYWRlcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9SRVNfQ09OVEVOVF9MRU5HVEhfTUlTTUFUQ0gnXG4gIH1cbn1cblxuY2xhc3MgQ2xpZW50RGVzdHJveWVkRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBDbGllbnREZXN0cm95ZWRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnQ2xpZW50RGVzdHJveWVkRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnVGhlIGNsaWVudCBpcyBkZXN0cm95ZWQnXG4gICAgdGhpcy5jb2RlID0gJ1VORF9FUlJfREVTVFJPWUVEJ1xuICB9XG59XG5cbmNsYXNzIENsaWVudENsb3NlZEVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgQ2xpZW50Q2xvc2VkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0NsaWVudENsb3NlZEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1RoZSBjbGllbnQgaXMgY2xvc2VkJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX0NMT1NFRCdcbiAgfVxufVxuXG5jbGFzcyBTb2NrZXRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UsIHNvY2tldCkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgU29ja2V0RXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ1NvY2tldEVycm9yJ1xuICAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2UgfHwgJ1NvY2tldCBlcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9TT0NLRVQnXG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXRcbiAgfVxufVxuXG5jbGFzcyBOb3RTdXBwb3J0ZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIE5vdFN1cHBvcnRlZEVycm9yKVxuICAgIHRoaXMubmFtZSA9ICdOb3RTdXBwb3J0ZWRFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdOb3Qgc3VwcG9ydGVkIGVycm9yJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX05PVF9TVVBQT1JURUQnXG4gIH1cbn1cblxuY2xhc3MgQmFsYW5jZWRQb29sTWlzc2luZ1Vwc3RyZWFtRXJyb3IgZXh0ZW5kcyBVbmRpY2lFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBOb3RTdXBwb3J0ZWRFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnTWlzc2luZ1Vwc3RyZWFtRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnTm8gdXBzdHJlYW0gaGFzIGJlZW4gYWRkZWQgdG8gdGhlIEJhbGFuY2VkUG9vbCdcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9CUExfTUlTU0lOR19VUFNUUkVBTSdcbiAgfVxufVxuXG5jbGFzcyBIVFRQUGFyc2VyRXJyb3IgZXh0ZW5kcyBFcnJvciB7XG4gIGNvbnN0cnVjdG9yIChtZXNzYWdlLCBjb2RlLCBkYXRhKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBIVFRQUGFyc2VyRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ0hUVFBQYXJzZXJFcnJvcidcbiAgICB0aGlzLmNvZGUgPSBjb2RlID8gYEhQRV8ke2NvZGV9YCA6IHVuZGVmaW5lZFxuICAgIHRoaXMuZGF0YSA9IGRhdGEgPyBkYXRhLnRvU3RyaW5nKCkgOiB1bmRlZmluZWRcbiAgfVxufVxuXG5jbGFzcyBSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yIGV4dGVuZHMgVW5kaWNpRXJyb3Ige1xuICBjb25zdHJ1Y3RvciAobWVzc2FnZSkge1xuICAgIHN1cGVyKG1lc3NhZ2UpXG4gICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnUmVzcG9uc2VFeGNlZWRlZE1heFNpemVFcnJvcidcbiAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlIHx8ICdSZXNwb25zZSBjb250ZW50IGV4Y2VlZGVkIG1heCBzaXplJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfRVJSX1JFU19FWENFRURFRF9NQVhfU0laRSdcbiAgfVxufVxuXG5jbGFzcyBSZXF1ZXN0UmV0cnlFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UsIGNvZGUsIHsgaGVhZGVycywgZGF0YSB9KSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLCBSZXF1ZXN0UmV0cnlFcnJvcilcbiAgICB0aGlzLm5hbWUgPSAnUmVxdWVzdFJldHJ5RXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnUmVxdWVzdCByZXRyeSBlcnJvcidcbiAgICB0aGlzLmNvZGUgPSAnVU5EX0VSUl9SRVFfUkVUUlknXG4gICAgdGhpcy5zdGF0dXNDb2RlID0gY29kZVxuICAgIHRoaXMuZGF0YSA9IGRhdGFcbiAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEhUVFBQYXJzZXJFcnJvcixcbiAgVW5kaWNpRXJyb3IsXG4gIEhlYWRlcnNUaW1lb3V0RXJyb3IsXG4gIEhlYWRlcnNPdmVyZmxvd0Vycm9yLFxuICBCb2R5VGltZW91dEVycm9yLFxuICBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IsXG4gIENvbm5lY3RUaW1lb3V0RXJyb3IsXG4gIFJlc3BvbnNlU3RhdHVzQ29kZUVycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgSW52YWxpZFJldHVyblZhbHVlRXJyb3IsXG4gIFJlcXVlc3RBYm9ydGVkRXJyb3IsXG4gIENsaWVudERlc3Ryb3llZEVycm9yLFxuICBDbGllbnRDbG9zZWRFcnJvcixcbiAgSW5mb3JtYXRpb25hbEVycm9yLFxuICBTb2NrZXRFcnJvcixcbiAgTm90U3VwcG9ydGVkRXJyb3IsXG4gIFJlc3BvbnNlQ29udGVudExlbmd0aE1pc21hdGNoRXJyb3IsXG4gIEJhbGFuY2VkUG9vbE1pc3NpbmdVcHN0cmVhbUVycm9yLFxuICBSZXNwb25zZUV4Y2VlZGVkTWF4U2l6ZUVycm9yLFxuICBSZXF1ZXN0UmV0cnlFcnJvclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD59ICovXG5jb25zdCBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZCA9IHt9XG5cbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2RvY3MvV2ViL0hUVFAvSGVhZGVyc1xuY29uc3Qgd2VsbGtub3duSGVhZGVyTmFtZXMgPSBbXG4gICdBY2NlcHQnLFxuICAnQWNjZXB0LUVuY29kaW5nJyxcbiAgJ0FjY2VwdC1MYW5ndWFnZScsXG4gICdBY2NlcHQtUmFuZ2VzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LUNyZWRlbnRpYWxzJyxcbiAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMnLFxuICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kcycsXG4gICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nLFxuICAnQWNjZXNzLUNvbnRyb2wtRXhwb3NlLUhlYWRlcnMnLFxuICAnQWNjZXNzLUNvbnRyb2wtTWF4LUFnZScsXG4gICdBY2Nlc3MtQ29udHJvbC1SZXF1ZXN0LUhlYWRlcnMnLFxuICAnQWNjZXNzLUNvbnRyb2wtUmVxdWVzdC1NZXRob2QnLFxuICAnQWdlJyxcbiAgJ0FsbG93JyxcbiAgJ0FsdC1TdmMnLFxuICAnQWx0LVVzZWQnLFxuICAnQXV0aG9yaXphdGlvbicsXG4gICdDYWNoZS1Db250cm9sJyxcbiAgJ0NsZWFyLVNpdGUtRGF0YScsXG4gICdDb25uZWN0aW9uJyxcbiAgJ0NvbnRlbnQtRGlzcG9zaXRpb24nLFxuICAnQ29udGVudC1FbmNvZGluZycsXG4gICdDb250ZW50LUxhbmd1YWdlJyxcbiAgJ0NvbnRlbnQtTGVuZ3RoJyxcbiAgJ0NvbnRlbnQtTG9jYXRpb24nLFxuICAnQ29udGVudC1SYW5nZScsXG4gICdDb250ZW50LVNlY3VyaXR5LVBvbGljeScsXG4gICdDb250ZW50LVNlY3VyaXR5LVBvbGljeS1SZXBvcnQtT25seScsXG4gICdDb250ZW50LVR5cGUnLFxuICAnQ29va2llJyxcbiAgJ0Nyb3NzLU9yaWdpbi1FbWJlZGRlci1Qb2xpY3knLFxuICAnQ3Jvc3MtT3JpZ2luLU9wZW5lci1Qb2xpY3knLFxuICAnQ3Jvc3MtT3JpZ2luLVJlc291cmNlLVBvbGljeScsXG4gICdEYXRlJyxcbiAgJ0RldmljZS1NZW1vcnknLFxuICAnRG93bmxpbmsnLFxuICAnRUNUJyxcbiAgJ0VUYWcnLFxuICAnRXhwZWN0JyxcbiAgJ0V4cGVjdC1DVCcsXG4gICdFeHBpcmVzJyxcbiAgJ0ZvcndhcmRlZCcsXG4gICdGcm9tJyxcbiAgJ0hvc3QnLFxuICAnSWYtTWF0Y2gnLFxuICAnSWYtTW9kaWZpZWQtU2luY2UnLFxuICAnSWYtTm9uZS1NYXRjaCcsXG4gICdJZi1SYW5nZScsXG4gICdJZi1Vbm1vZGlmaWVkLVNpbmNlJyxcbiAgJ0tlZXAtQWxpdmUnLFxuICAnTGFzdC1Nb2RpZmllZCcsXG4gICdMaW5rJyxcbiAgJ0xvY2F0aW9uJyxcbiAgJ01heC1Gb3J3YXJkcycsXG4gICdPcmlnaW4nLFxuICAnUGVybWlzc2lvbnMtUG9saWN5JyxcbiAgJ1ByYWdtYScsXG4gICdQcm94eS1BdXRoZW50aWNhdGUnLFxuICAnUHJveHktQXV0aG9yaXphdGlvbicsXG4gICdSVFQnLFxuICAnUmFuZ2UnLFxuICAnUmVmZXJlcicsXG4gICdSZWZlcnJlci1Qb2xpY3knLFxuICAnUmVmcmVzaCcsXG4gICdSZXRyeS1BZnRlcicsXG4gICdTZWMtV2ViU29ja2V0LUFjY2VwdCcsXG4gICdTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnMnLFxuICAnU2VjLVdlYlNvY2tldC1LZXknLFxuICAnU2VjLVdlYlNvY2tldC1Qcm90b2NvbCcsXG4gICdTZWMtV2ViU29ja2V0LVZlcnNpb24nLFxuICAnU2VydmVyJyxcbiAgJ1NlcnZlci1UaW1pbmcnLFxuICAnU2VydmljZS1Xb3JrZXItQWxsb3dlZCcsXG4gICdTZXJ2aWNlLVdvcmtlci1OYXZpZ2F0aW9uLVByZWxvYWQnLFxuICAnU2V0LUNvb2tpZScsXG4gICdTb3VyY2VNYXAnLFxuICAnU3RyaWN0LVRyYW5zcG9ydC1TZWN1cml0eScsXG4gICdTdXBwb3J0cy1Mb2FkaW5nLU1vZGUnLFxuICAnVEUnLFxuICAnVGltaW5nLUFsbG93LU9yaWdpbicsXG4gICdUcmFpbGVyJyxcbiAgJ1RyYW5zZmVyLUVuY29kaW5nJyxcbiAgJ1VwZ3JhZGUnLFxuICAnVXBncmFkZS1JbnNlY3VyZS1SZXF1ZXN0cycsXG4gICdVc2VyLUFnZW50JyxcbiAgJ1ZhcnknLFxuICAnVmlhJyxcbiAgJ1dXVy1BdXRoZW50aWNhdGUnLFxuICAnWC1Db250ZW50LVR5cGUtT3B0aW9ucycsXG4gICdYLUROUy1QcmVmZXRjaC1Db250cm9sJyxcbiAgJ1gtRnJhbWUtT3B0aW9ucycsXG4gICdYLVBlcm1pdHRlZC1Dcm9zcy1Eb21haW4tUG9saWNpZXMnLFxuICAnWC1Qb3dlcmVkLUJ5JyxcbiAgJ1gtUmVxdWVzdGVkLVdpdGgnLFxuICAnWC1YU1MtUHJvdGVjdGlvbidcbl1cblxuZm9yIChsZXQgaSA9IDA7IGkgPCB3ZWxsa25vd25IZWFkZXJOYW1lcy5sZW5ndGg7ICsraSkge1xuICBjb25zdCBrZXkgPSB3ZWxsa25vd25IZWFkZXJOYW1lc1tpXVxuICBjb25zdCBsb3dlckNhc2VkS2V5ID0ga2V5LnRvTG93ZXJDYXNlKClcbiAgaGVhZGVyTmFtZUxvd2VyQ2FzZWRSZWNvcmRba2V5XSA9IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkW2xvd2VyQ2FzZWRLZXldID1cbiAgICBsb3dlckNhc2VkS2V5XG59XG5cbi8vIE5vdGU6IG9iamVjdCBwcm90b3R5cGVzIHNob3VsZCBub3QgYmUgYWJsZSB0byBiZSByZWZlcmVuY2VkLiBlLmcuIGBPYmplY3QjaGFzT3duUHJvcGVydHlgLlxuT2JqZWN0LnNldFByb3RvdHlwZU9mKGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkLCBudWxsKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgd2VsbGtub3duSGVhZGVyTmFtZXMsXG4gIGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IGtEZXN0cm95ZWQsIGtCb2R5VXNlZCB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgSW5jb21pbmdNZXNzYWdlIH0gPSByZXF1aXJlKCdodHRwJylcbmNvbnN0IHN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCBuZXQgPSByZXF1aXJlKCduZXQnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi9lcnJvcnMnKVxuY29uc3QgeyBCbG9iIH0gPSByZXF1aXJlKCdidWZmZXInKVxuY29uc3Qgbm9kZVV0aWwgPSByZXF1aXJlKCd1dGlsJylcbmNvbnN0IHsgc3RyaW5naWZ5IH0gPSByZXF1aXJlKCdxdWVyeXN0cmluZycpXG5jb25zdCB7IGhlYWRlck5hbWVMb3dlckNhc2VkUmVjb3JkIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5cbmNvbnN0IFtub2RlTWFqb3IsIG5vZGVNaW5vcl0gPSBwcm9jZXNzLnZlcnNpb25zLm5vZGUuc3BsaXQoJy4nKS5tYXAodiA9PiBOdW1iZXIodikpXG5cbmZ1bmN0aW9uIG5vcCAoKSB7fVxuXG5mdW5jdGlvbiBpc1N0cmVhbSAob2JqKSB7XG4gIHJldHVybiBvYmogJiYgdHlwZW9mIG9iaiA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG9iai5waXBlID09PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBvYmoub24gPT09ICdmdW5jdGlvbidcbn1cblxuLy8gYmFzZWQgb24gaHR0cHM6Ly9naXRodWIuY29tL25vZGUtZmV0Y2gvZmV0Y2gtYmxvYi9ibG9iLzhhYjU4N2QzNDA4MGRlOTQxNDBiNTRmMDcxNjg0NTFlN2QwYjY1NWUvaW5kZXguanMjTDIyOS1MMjQxIChNSVQgTGljZW5zZSlcbmZ1bmN0aW9uIGlzQmxvYkxpa2UgKG9iamVjdCkge1xuICByZXR1cm4gKEJsb2IgJiYgb2JqZWN0IGluc3RhbmNlb2YgQmxvYikgfHwgKFxuICAgIG9iamVjdCAmJlxuICAgIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXG4gICAgKHR5cGVvZiBvYmplY3Quc3RyZWFtID09PSAnZnVuY3Rpb24nIHx8XG4gICAgICB0eXBlb2Ygb2JqZWN0LmFycmF5QnVmZmVyID09PSAnZnVuY3Rpb24nKSAmJlxuICAgIC9eKEJsb2J8RmlsZSkkLy50ZXN0KG9iamVjdFtTeW1ib2wudG9TdHJpbmdUYWddKVxuICApXG59XG5cbmZ1bmN0aW9uIGJ1aWxkVVJMICh1cmwsIHF1ZXJ5UGFyYW1zKSB7XG4gIGlmICh1cmwuaW5jbHVkZXMoJz8nKSB8fCB1cmwuaW5jbHVkZXMoJyMnKSkge1xuICAgIHRocm93IG5ldyBFcnJvcignUXVlcnkgcGFyYW1zIGNhbm5vdCBiZSBwYXNzZWQgd2hlbiB1cmwgYWxyZWFkeSBjb250YWlucyBcIj9cIiBvciBcIiNcIi4nKVxuICB9XG5cbiAgY29uc3Qgc3RyaW5naWZpZWQgPSBzdHJpbmdpZnkocXVlcnlQYXJhbXMpXG5cbiAgaWYgKHN0cmluZ2lmaWVkKSB7XG4gICAgdXJsICs9ICc/JyArIHN0cmluZ2lmaWVkXG4gIH1cblxuICByZXR1cm4gdXJsXG59XG5cbmZ1bmN0aW9uIHBhcnNlVVJMICh1cmwpIHtcbiAgaWYgKHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnKSB7XG4gICAgdXJsID0gbmV3IFVSTCh1cmwpXG5cbiAgICBpZiAoIS9eaHR0cHM/Oi8udGVzdCh1cmwub3JpZ2luIHx8IHVybC5wcm90b2NvbCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgcHJvdG9jb2w6IHRoZSBVUkwgbXVzdCBzdGFydCB3aXRoIGBodHRwOmAgb3IgYGh0dHBzOmAuJylcbiAgICB9XG5cbiAgICByZXR1cm4gdXJsXG4gIH1cblxuICBpZiAoIXVybCB8fCB0eXBlb2YgdXJsICE9PSAnb2JqZWN0Jykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkw6IFRoZSBVUkwgYXJndW1lbnQgbXVzdCBiZSBhIG5vbi1udWxsIG9iamVjdC4nKVxuICB9XG5cbiAgaWYgKCEvXmh0dHBzPzovLnRlc3QodXJsLm9yaWdpbiB8fCB1cmwucHJvdG9jb2wpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBwcm90b2NvbDogdGhlIFVSTCBtdXN0IHN0YXJ0IHdpdGggYGh0dHA6YCBvciBgaHR0cHM6YC4nKVxuICB9XG5cbiAgaWYgKCEodXJsIGluc3RhbmNlb2YgVVJMKSkge1xuICAgIGlmICh1cmwucG9ydCAhPSBudWxsICYmIHVybC5wb3J0ICE9PSAnJyAmJiAhTnVtYmVyLmlzRmluaXRlKHBhcnNlSW50KHVybC5wb3J0KSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkw6IHBvcnQgbXVzdCBiZSBhIHZhbGlkIGludGVnZXIgb3IgYSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgYW4gaW50ZWdlci4nKVxuICAgIH1cblxuICAgIGlmICh1cmwucGF0aCAhPSBudWxsICYmIHR5cGVvZiB1cmwucGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgcGF0aDogdGhlIHBhdGggbXVzdCBiZSBhIHN0cmluZyBvciBudWxsL3VuZGVmaW5lZC4nKVxuICAgIH1cblxuICAgIGlmICh1cmwucGF0aG5hbWUgIT0gbnVsbCAmJiB0eXBlb2YgdXJsLnBhdGhuYW1lICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdJbnZhbGlkIFVSTCBwYXRobmFtZTogdGhlIHBhdGhuYW1lIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWQuJylcbiAgICB9XG5cbiAgICBpZiAodXJsLmhvc3RuYW1lICE9IG51bGwgJiYgdHlwZW9mIHVybC5ob3N0bmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgaG9zdG5hbWU6IHRoZSBob3N0bmFtZSBtdXN0IGJlIGEgc3RyaW5nIG9yIG51bGwvdW5kZWZpbmVkLicpXG4gICAgfVxuXG4gICAgaWYgKHVybC5vcmlnaW4gIT0gbnVsbCAmJiB0eXBlb2YgdXJsLm9yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignSW52YWxpZCBVUkwgb3JpZ2luOiB0aGUgb3JpZ2luIG11c3QgYmUgYSBzdHJpbmcgb3IgbnVsbC91bmRlZmluZWQuJylcbiAgICB9XG5cbiAgICBjb25zdCBwb3J0ID0gdXJsLnBvcnQgIT0gbnVsbFxuICAgICAgPyB1cmwucG9ydFxuICAgICAgOiAodXJsLnByb3RvY29sID09PSAnaHR0cHM6JyA/IDQ0MyA6IDgwKVxuICAgIGxldCBvcmlnaW4gPSB1cmwub3JpZ2luICE9IG51bGxcbiAgICAgID8gdXJsLm9yaWdpblxuICAgICAgOiBgJHt1cmwucHJvdG9jb2x9Ly8ke3VybC5ob3N0bmFtZX06JHtwb3J0fWBcbiAgICBsZXQgcGF0aCA9IHVybC5wYXRoICE9IG51bGxcbiAgICAgID8gdXJsLnBhdGhcbiAgICAgIDogYCR7dXJsLnBhdGhuYW1lIHx8ICcnfSR7dXJsLnNlYXJjaCB8fCAnJ31gXG5cbiAgICBpZiAob3JpZ2luLmVuZHNXaXRoKCcvJykpIHtcbiAgICAgIG9yaWdpbiA9IG9yaWdpbi5zdWJzdHJpbmcoMCwgb3JpZ2luLmxlbmd0aCAtIDEpXG4gICAgfVxuXG4gICAgaWYgKHBhdGggJiYgIXBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICBwYXRoID0gYC8ke3BhdGh9YFxuICAgIH1cbiAgICAvLyBuZXcgVVJMKHBhdGgsIG9yaWdpbikgaXMgdW5zYWZlIHdoZW4gYHBhdGhgIGNvbnRhaW5zIGFuIGFic29sdXRlIFVSTFxuICAgIC8vIEZyb20gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1VSTC9VUkw6XG4gICAgLy8gSWYgZmlyc3QgcGFyYW1ldGVyIGlzIGEgcmVsYXRpdmUgVVJMLCBzZWNvbmQgcGFyYW0gaXMgcmVxdWlyZWQsIGFuZCB3aWxsIGJlIHVzZWQgYXMgdGhlIGJhc2UgVVJMLlxuICAgIC8vIElmIGZpcnN0IHBhcmFtZXRlciBpcyBhbiBhYnNvbHV0ZSBVUkwsIGEgZ2l2ZW4gc2Vjb25kIHBhcmFtIHdpbGwgYmUgaWdub3JlZC5cbiAgICB1cmwgPSBuZXcgVVJMKG9yaWdpbiArIHBhdGgpXG4gIH1cblxuICByZXR1cm4gdXJsXG59XG5cbmZ1bmN0aW9uIHBhcnNlT3JpZ2luICh1cmwpIHtcbiAgdXJsID0gcGFyc2VVUkwodXJsKVxuXG4gIGlmICh1cmwucGF0aG5hbWUgIT09ICcvJyB8fCB1cmwuc2VhcmNoIHx8IHVybC5oYXNoKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHVybCcpXG4gIH1cblxuICByZXR1cm4gdXJsXG59XG5cbmZ1bmN0aW9uIGdldEhvc3RuYW1lIChob3N0KSB7XG4gIGlmIChob3N0WzBdID09PSAnWycpIHtcbiAgICBjb25zdCBpZHggPSBob3N0LmluZGV4T2YoJ10nKVxuXG4gICAgYXNzZXJ0KGlkeCAhPT0gLTEpXG4gICAgcmV0dXJuIGhvc3Quc3Vic3RyaW5nKDEsIGlkeClcbiAgfVxuXG4gIGNvbnN0IGlkeCA9IGhvc3QuaW5kZXhPZignOicpXG4gIGlmIChpZHggPT09IC0xKSByZXR1cm4gaG9zdFxuXG4gIHJldHVybiBob3N0LnN1YnN0cmluZygwLCBpZHgpXG59XG5cbi8vIElQIGFkZHJlc3NlcyBhcmUgbm90IHZhbGlkIHNlcnZlciBuYW1lcyBwZXIgUkZDNjA2NlxuLy8gPiBDdXJyZW50bHksIHRoZSBvbmx5IHNlcnZlciBuYW1lcyBzdXBwb3J0ZWQgYXJlIEROUyBob3N0bmFtZXNcbmZ1bmN0aW9uIGdldFNlcnZlck5hbWUgKGhvc3QpIHtcbiAgaWYgKCFob3N0KSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGFzc2VydC5zdHJpY3RFcXVhbCh0eXBlb2YgaG9zdCwgJ3N0cmluZycpXG5cbiAgY29uc3Qgc2VydmVybmFtZSA9IGdldEhvc3RuYW1lKGhvc3QpXG4gIGlmIChuZXQuaXNJUChzZXJ2ZXJuYW1lKSkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgcmV0dXJuIHNlcnZlcm5hbWVcbn1cblxuZnVuY3Rpb24gZGVlcENsb25lIChvYmopIHtcbiAgcmV0dXJuIEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob2JqKSlcbn1cblxuZnVuY3Rpb24gaXNBc3luY0l0ZXJhYmxlIChvYmopIHtcbiAgcmV0dXJuICEhKG9iaiAhPSBudWxsICYmIHR5cGVvZiBvYmpbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID09PSAnZnVuY3Rpb24nKVxufVxuXG5mdW5jdGlvbiBpc0l0ZXJhYmxlIChvYmopIHtcbiAgcmV0dXJuICEhKG9iaiAhPSBudWxsICYmICh0eXBlb2Ygb2JqW1N5bWJvbC5pdGVyYXRvcl0gPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIG9ialtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gPT09ICdmdW5jdGlvbicpKVxufVxuXG5mdW5jdGlvbiBib2R5TGVuZ3RoIChib2R5KSB7XG4gIGlmIChib2R5ID09IG51bGwpIHtcbiAgICByZXR1cm4gMFxuICB9IGVsc2UgaWYgKGlzU3RyZWFtKGJvZHkpKSB7XG4gICAgY29uc3Qgc3RhdGUgPSBib2R5Ll9yZWFkYWJsZVN0YXRlXG4gICAgcmV0dXJuIHN0YXRlICYmIHN0YXRlLm9iamVjdE1vZGUgPT09IGZhbHNlICYmIHN0YXRlLmVuZGVkID09PSB0cnVlICYmIE51bWJlci5pc0Zpbml0ZShzdGF0ZS5sZW5ndGgpXG4gICAgICA/IHN0YXRlLmxlbmd0aFxuICAgICAgOiBudWxsXG4gIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShib2R5KSkge1xuICAgIHJldHVybiBib2R5LnNpemUgIT0gbnVsbCA/IGJvZHkuc2l6ZSA6IG51bGxcbiAgfSBlbHNlIGlmIChpc0J1ZmZlcihib2R5KSkge1xuICAgIHJldHVybiBib2R5LmJ5dGVMZW5ndGhcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIGlzRGVzdHJveWVkIChzdHJlYW0pIHtcbiAgcmV0dXJuICFzdHJlYW0gfHwgISEoc3RyZWFtLmRlc3Ryb3llZCB8fCBzdHJlYW1ba0Rlc3Ryb3llZF0pXG59XG5cbmZ1bmN0aW9uIGlzUmVhZGFibGVBYm9ydGVkIChzdHJlYW0pIHtcbiAgY29uc3Qgc3RhdGUgPSBzdHJlYW0gJiYgc3RyZWFtLl9yZWFkYWJsZVN0YXRlXG4gIHJldHVybiBpc0Rlc3Ryb3llZChzdHJlYW0pICYmIHN0YXRlICYmICFzdGF0ZS5lbmRFbWl0dGVkXG59XG5cbmZ1bmN0aW9uIGRlc3Ryb3kgKHN0cmVhbSwgZXJyKSB7XG4gIGlmIChzdHJlYW0gPT0gbnVsbCB8fCAhaXNTdHJlYW0oc3RyZWFtKSB8fCBpc0Rlc3Ryb3llZChzdHJlYW0pKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAodHlwZW9mIHN0cmVhbS5kZXN0cm95ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKE9iamVjdC5nZXRQcm90b3R5cGVPZihzdHJlYW0pLmNvbnN0cnVjdG9yID09PSBJbmNvbWluZ01lc3NhZ2UpIHtcbiAgICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvMzg1MDUvZmlsZXNcbiAgICAgIHN0cmVhbS5zb2NrZXQgPSBudWxsXG4gICAgfVxuXG4gICAgc3RyZWFtLmRlc3Ryb3koZXJyKVxuICB9IGVsc2UgaWYgKGVycikge1xuICAgIHByb2Nlc3MubmV4dFRpY2soKHN0cmVhbSwgZXJyKSA9PiB7XG4gICAgICBzdHJlYW0uZW1pdCgnZXJyb3InLCBlcnIpXG4gICAgfSwgc3RyZWFtLCBlcnIpXG4gIH1cblxuICBpZiAoc3RyZWFtLmRlc3Ryb3llZCAhPT0gdHJ1ZSkge1xuICAgIHN0cmVhbVtrRGVzdHJveWVkXSA9IHRydWVcbiAgfVxufVxuXG5jb25zdCBLRUVQQUxJVkVfVElNRU9VVF9FWFBSID0gL3RpbWVvdXQ9KFxcZCspL1xuZnVuY3Rpb24gcGFyc2VLZWVwQWxpdmVUaW1lb3V0ICh2YWwpIHtcbiAgY29uc3QgbSA9IHZhbC50b1N0cmluZygpLm1hdGNoKEtFRVBBTElWRV9USU1FT1VUX0VYUFIpXG4gIHJldHVybiBtID8gcGFyc2VJbnQobVsxXSwgMTApICogMTAwMCA6IG51bGxcbn1cblxuLyoqXG4gKiBSZXRyaWV2ZXMgYSBoZWFkZXIgbmFtZSBhbmQgcmV0dXJucyBpdHMgbG93ZXJjYXNlIHZhbHVlLlxuICogQHBhcmFtIHtzdHJpbmcgfCBCdWZmZXJ9IHZhbHVlIEhlYWRlciBuYW1lXG4gKiBAcmV0dXJucyB7c3RyaW5nfVxuICovXG5mdW5jdGlvbiBoZWFkZXJOYW1lVG9TdHJpbmcgKHZhbHVlKSB7XG4gIHJldHVybiBoZWFkZXJOYW1lTG93ZXJDYXNlZFJlY29yZFt2YWx1ZV0gfHwgdmFsdWUudG9Mb3dlckNhc2UoKVxufVxuXG5mdW5jdGlvbiBwYXJzZUhlYWRlcnMgKGhlYWRlcnMsIG9iaiA9IHt9KSB7XG4gIC8vIEZvciBIMiBzdXBwb3J0XG4gIGlmICghQXJyYXkuaXNBcnJheShoZWFkZXJzKSkgcmV0dXJuIGhlYWRlcnNcblxuICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICBjb25zdCBrZXkgPSBoZWFkZXJzW2ldLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKVxuICAgIGxldCB2YWwgPSBvYmpba2V5XVxuXG4gICAgaWYgKCF2YWwpIHtcbiAgICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnNbaSArIDFdKSkge1xuICAgICAgICBvYmpba2V5XSA9IGhlYWRlcnNbaSArIDFdLm1hcCh4ID0+IHgudG9TdHJpbmcoJ3V0ZjgnKSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9ialtrZXldID0gaGVhZGVyc1tpICsgMV0udG9TdHJpbmcoJ3V0ZjgnKVxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsKSkge1xuICAgICAgICB2YWwgPSBbdmFsXVxuICAgICAgICBvYmpba2V5XSA9IHZhbFxuICAgICAgfVxuICAgICAgdmFsLnB1c2goaGVhZGVyc1tpICsgMV0udG9TdHJpbmcoJ3V0ZjgnKSlcbiAgICB9XG4gIH1cblxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL3B1bGwvNDY1MjhcbiAgaWYgKCdjb250ZW50LWxlbmd0aCcgaW4gb2JqICYmICdjb250ZW50LWRpc3Bvc2l0aW9uJyBpbiBvYmopIHtcbiAgICBvYmpbJ2NvbnRlbnQtZGlzcG9zaXRpb24nXSA9IEJ1ZmZlci5mcm9tKG9ialsnY29udGVudC1kaXNwb3NpdGlvbiddKS50b1N0cmluZygnbGF0aW4xJylcbiAgfVxuXG4gIHJldHVybiBvYmpcbn1cblxuZnVuY3Rpb24gcGFyc2VSYXdIZWFkZXJzIChoZWFkZXJzKSB7XG4gIGNvbnN0IHJldCA9IFtdXG4gIGxldCBoYXNDb250ZW50TGVuZ3RoID0gZmFsc2VcbiAgbGV0IGNvbnRlbnREaXNwb3NpdGlvbklkeCA9IC0xXG5cbiAgZm9yIChsZXQgbiA9IDA7IG4gPCBoZWFkZXJzLmxlbmd0aDsgbiArPSAyKSB7XG4gICAgY29uc3Qga2V5ID0gaGVhZGVyc1tuICsgMF0udG9TdHJpbmcoKVxuICAgIGNvbnN0IHZhbCA9IGhlYWRlcnNbbiArIDFdLnRvU3RyaW5nKCd1dGY4JylcblxuICAgIGlmIChrZXkubGVuZ3RoID09PSAxNCAmJiAoa2V5ID09PSAnY29udGVudC1sZW5ndGgnIHx8IGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC1sZW5ndGgnKSkge1xuICAgICAgcmV0LnB1c2goa2V5LCB2YWwpXG4gICAgICBoYXNDb250ZW50TGVuZ3RoID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAoa2V5Lmxlbmd0aCA9PT0gMTkgJiYgKGtleSA9PT0gJ2NvbnRlbnQtZGlzcG9zaXRpb24nIHx8IGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29udGVudC1kaXNwb3NpdGlvbicpKSB7XG4gICAgICBjb250ZW50RGlzcG9zaXRpb25JZHggPSByZXQucHVzaChrZXksIHZhbCkgLSAxXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldC5wdXNoKGtleSwgdmFsKVxuICAgIH1cbiAgfVxuXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvcHVsbC80NjUyOFxuICBpZiAoaGFzQ29udGVudExlbmd0aCAmJiBjb250ZW50RGlzcG9zaXRpb25JZHggIT09IC0xKSB7XG4gICAgcmV0W2NvbnRlbnREaXNwb3NpdGlvbklkeF0gPSBCdWZmZXIuZnJvbShyZXRbY29udGVudERpc3Bvc2l0aW9uSWR4XSkudG9TdHJpbmcoJ2xhdGluMScpXG4gIH1cblxuICByZXR1cm4gcmV0XG59XG5cbmZ1bmN0aW9uIGlzQnVmZmVyIChidWZmZXIpIHtcbiAgLy8gU2VlLCBodHRwczovL2dpdGh1Yi5jb20vbWNvbGxpbmEvdW5kaWNpL3B1bGwvMzE5XG4gIHJldHVybiBidWZmZXIgaW5zdGFuY2VvZiBVaW50OEFycmF5IHx8IEJ1ZmZlci5pc0J1ZmZlcihidWZmZXIpXG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlSGFuZGxlciAoaGFuZGxlciwgbWV0aG9kLCB1cGdyYWRlKSB7XG4gIGlmICghaGFuZGxlciB8fCB0eXBlb2YgaGFuZGxlciAhPT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hhbmRsZXIgbXVzdCBiZSBhbiBvYmplY3QnKVxuICB9XG5cbiAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uQ29ubmVjdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkNvbm5lY3QgbWV0aG9kJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgaGFuZGxlci5vbkVycm9yICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uRXJyb3IgbWV0aG9kJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgaGFuZGxlci5vbkJvZHlTZW50ICE9PSAnZnVuY3Rpb24nICYmIGhhbmRsZXIub25Cb2R5U2VudCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uQm9keVNlbnQgbWV0aG9kJylcbiAgfVxuXG4gIGlmICh1cGdyYWRlIHx8IG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uVXBncmFkZSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uVXBncmFkZSBtZXRob2QnKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAodHlwZW9mIGhhbmRsZXIub25IZWFkZXJzICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25IZWFkZXJzIG1ldGhvZCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBoYW5kbGVyLm9uRGF0YSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uRGF0YSBtZXRob2QnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgaGFuZGxlci5vbkNvbXBsZXRlICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25Db21wbGV0ZSBtZXRob2QnKVxuICAgIH1cbiAgfVxufVxuXG4vLyBBIGJvZHkgaXMgZGlzdHVyYmVkIGlmIGl0IGhhcyBiZWVuIHJlYWQgZnJvbSBhbmQgaXQgY2Fubm90XG4vLyBiZSByZS11c2VkIHdpdGhvdXQgbG9zaW5nIHN0YXRlIG9yIGRhdGEuXG5mdW5jdGlvbiBpc0Rpc3R1cmJlZCAoYm9keSkge1xuICByZXR1cm4gISEoYm9keSAmJiAoXG4gICAgc3RyZWFtLmlzRGlzdHVyYmVkXG4gICAgICA/IHN0cmVhbS5pc0Rpc3R1cmJlZChib2R5KSB8fCBib2R5W2tCb2R5VXNlZF0gLy8gVE9ETyAoZml4KTogV2h5IGlzIGJvZHlba0JvZHlVc2VkXSBuZWVkZWQ/XG4gICAgICA6IGJvZHlba0JvZHlVc2VkXSB8fFxuICAgICAgICBib2R5LnJlYWRhYmxlRGlkUmVhZCB8fFxuICAgICAgICAoYm9keS5fcmVhZGFibGVTdGF0ZSAmJiBib2R5Ll9yZWFkYWJsZVN0YXRlLmRhdGFFbWl0dGVkKSB8fFxuICAgICAgICBpc1JlYWRhYmxlQWJvcnRlZChib2R5KVxuICApKVxufVxuXG5mdW5jdGlvbiBpc0Vycm9yZWQgKGJvZHkpIHtcbiAgcmV0dXJuICEhKGJvZHkgJiYgKFxuICAgIHN0cmVhbS5pc0Vycm9yZWRcbiAgICAgID8gc3RyZWFtLmlzRXJyb3JlZChib2R5KVxuICAgICAgOiAvc3RhdGU6ICdlcnJvcmVkJy8udGVzdChub2RlVXRpbC5pbnNwZWN0KGJvZHkpXG4gICAgICApKSlcbn1cblxuZnVuY3Rpb24gaXNSZWFkYWJsZSAoYm9keSkge1xuICByZXR1cm4gISEoYm9keSAmJiAoXG4gICAgc3RyZWFtLmlzUmVhZGFibGVcbiAgICAgID8gc3RyZWFtLmlzUmVhZGFibGUoYm9keSlcbiAgICAgIDogL3N0YXRlOiAncmVhZGFibGUnLy50ZXN0KG5vZGVVdGlsLmluc3BlY3QoYm9keSlcbiAgICAgICkpKVxufVxuXG5mdW5jdGlvbiBnZXRTb2NrZXRJbmZvIChzb2NrZXQpIHtcbiAgcmV0dXJuIHtcbiAgICBsb2NhbEFkZHJlc3M6IHNvY2tldC5sb2NhbEFkZHJlc3MsXG4gICAgbG9jYWxQb3J0OiBzb2NrZXQubG9jYWxQb3J0LFxuICAgIHJlbW90ZUFkZHJlc3M6IHNvY2tldC5yZW1vdGVBZGRyZXNzLFxuICAgIHJlbW90ZVBvcnQ6IHNvY2tldC5yZW1vdGVQb3J0LFxuICAgIHJlbW90ZUZhbWlseTogc29ja2V0LnJlbW90ZUZhbWlseSxcbiAgICB0aW1lb3V0OiBzb2NrZXQudGltZW91dCxcbiAgICBieXRlc1dyaXR0ZW46IHNvY2tldC5ieXRlc1dyaXR0ZW4sXG4gICAgYnl0ZXNSZWFkOiBzb2NrZXQuYnl0ZXNSZWFkXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gKiBjb252ZXJ0SXRlcmFibGVUb0J1ZmZlciAoaXRlcmFibGUpIHtcbiAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBpdGVyYWJsZSkge1xuICAgIHlpZWxkIEJ1ZmZlci5pc0J1ZmZlcihjaHVuaykgPyBjaHVuayA6IEJ1ZmZlci5mcm9tKGNodW5rKVxuICB9XG59XG5cbmxldCBSZWFkYWJsZVN0cmVhbVxuZnVuY3Rpb24gUmVhZGFibGVTdHJlYW1Gcm9tIChpdGVyYWJsZSkge1xuICBpZiAoIVJlYWRhYmxlU3RyZWFtKSB7XG4gICAgUmVhZGFibGVTdHJlYW0gPSByZXF1aXJlKCdzdHJlYW0vd2ViJykuUmVhZGFibGVTdHJlYW1cbiAgfVxuXG4gIGlmIChSZWFkYWJsZVN0cmVhbS5mcm9tKSB7XG4gICAgcmV0dXJuIFJlYWRhYmxlU3RyZWFtLmZyb20oY29udmVydEl0ZXJhYmxlVG9CdWZmZXIoaXRlcmFibGUpKVxuICB9XG5cbiAgbGV0IGl0ZXJhdG9yXG4gIHJldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oXG4gICAge1xuICAgICAgYXN5bmMgc3RhcnQgKCkge1xuICAgICAgICBpdGVyYXRvciA9IGl0ZXJhYmxlW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpXG4gICAgICB9LFxuICAgICAgYXN5bmMgcHVsbCAoY29udHJvbGxlcikge1xuICAgICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KClcbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKClcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbnN0IGJ1ZiA9IEJ1ZmZlci5pc0J1ZmZlcih2YWx1ZSkgPyB2YWx1ZSA6IEJ1ZmZlci5mcm9tKHZhbHVlKVxuICAgICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVWludDhBcnJheShidWYpKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjb250cm9sbGVyLmRlc2lyZWRTaXplID4gMFxuICAgICAgfSxcbiAgICAgIGFzeW5jIGNhbmNlbCAocmVhc29uKSB7XG4gICAgICAgIGF3YWl0IGl0ZXJhdG9yLnJldHVybigpXG4gICAgICB9XG4gICAgfSxcbiAgICAwXG4gIClcbn1cblxuLy8gVGhlIGNodW5rIHNob3VsZCBiZSBhIEZvcm1EYXRhIGluc3RhbmNlIGFuZCBjb250YWluc1xuLy8gYWxsIHRoZSByZXF1aXJlZCBtZXRob2RzLlxuZnVuY3Rpb24gaXNGb3JtRGF0YUxpa2UgKG9iamVjdCkge1xuICByZXR1cm4gKFxuICAgIG9iamVjdCAmJlxuICAgIHR5cGVvZiBvYmplY3QgPT09ICdvYmplY3QnICYmXG4gICAgdHlwZW9mIG9iamVjdC5hcHBlbmQgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmRlbGV0ZSA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3QuZ2V0ID09PSAnZnVuY3Rpb24nICYmXG4gICAgdHlwZW9mIG9iamVjdC5nZXRBbGwgPT09ICdmdW5jdGlvbicgJiZcbiAgICB0eXBlb2Ygb2JqZWN0LmhhcyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBvYmplY3Quc2V0ID09PSAnZnVuY3Rpb24nICYmXG4gICAgb2JqZWN0W1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdGb3JtRGF0YSdcbiAgKVxufVxuXG5mdW5jdGlvbiB0aHJvd0lmQWJvcnRlZCAoc2lnbmFsKSB7XG4gIGlmICghc2lnbmFsKSB7IHJldHVybiB9XG4gIGlmICh0eXBlb2Ygc2lnbmFsLnRocm93SWZBYm9ydGVkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgc2lnbmFsLnRocm93SWZBYm9ydGVkKClcbiAgfSBlbHNlIHtcbiAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIC8vIERPTUV4Y2VwdGlvbiBub3QgYXZhaWxhYmxlIDwgdjE3LjAuMFxuICAgICAgY29uc3QgZXJyID0gbmV3IEVycm9yKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkJylcbiAgICAgIGVyci5uYW1lID0gJ0Fib3J0RXJyb3InXG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gYWRkQWJvcnRMaXN0ZW5lciAoc2lnbmFsLCBsaXN0ZW5lcikge1xuICBpZiAoJ2FkZEV2ZW50TGlzdGVuZXInIGluIHNpZ25hbCkge1xuICAgIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyLCB7IG9uY2U6IHRydWUgfSlcbiAgICByZXR1cm4gKCkgPT4gc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgbGlzdGVuZXIpXG4gIH1cbiAgc2lnbmFsLmFkZExpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyKVxuICByZXR1cm4gKCkgPT4gc2lnbmFsLnJlbW92ZUxpc3RlbmVyKCdhYm9ydCcsIGxpc3RlbmVyKVxufVxuXG5jb25zdCBoYXNUb1dlbGxGb3JtZWQgPSAhIVN0cmluZy5wcm90b3R5cGUudG9XZWxsRm9ybWVkXG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmd9IHZhbFxuICovXG5mdW5jdGlvbiB0b1VTVlN0cmluZyAodmFsKSB7XG4gIGlmIChoYXNUb1dlbGxGb3JtZWQpIHtcbiAgICByZXR1cm4gYCR7dmFsfWAudG9XZWxsRm9ybWVkKClcbiAgfSBlbHNlIGlmIChub2RlVXRpbC50b1VTVlN0cmluZykge1xuICAgIHJldHVybiBub2RlVXRpbC50b1VTVlN0cmluZyh2YWwpXG4gIH1cblxuICByZXR1cm4gYCR7dmFsfWBcbn1cblxuLy8gUGFyc2VkIGFjY29yZGluZ2x5IHRvIFJGQyA5MTEwXG4vLyBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjOTExMCNmaWVsZC5jb250ZW50LXJhbmdlXG5mdW5jdGlvbiBwYXJzZVJhbmdlSGVhZGVyIChyYW5nZSkge1xuICBpZiAocmFuZ2UgPT0gbnVsbCB8fCByYW5nZSA9PT0gJycpIHJldHVybiB7IHN0YXJ0OiAwLCBlbmQ6IG51bGwsIHNpemU6IG51bGwgfVxuXG4gIGNvbnN0IG0gPSByYW5nZSA/IHJhbmdlLm1hdGNoKC9eYnl0ZXMgKFxcZCspLShcXGQrKVxcLyhcXGQrKT8kLykgOiBudWxsXG4gIHJldHVybiBtXG4gICAgPyB7XG4gICAgICAgIHN0YXJ0OiBwYXJzZUludChtWzFdKSxcbiAgICAgICAgZW5kOiBtWzJdID8gcGFyc2VJbnQobVsyXSkgOiBudWxsLFxuICAgICAgICBzaXplOiBtWzNdID8gcGFyc2VJbnQobVszXSkgOiBudWxsXG4gICAgICB9XG4gICAgOiBudWxsXG59XG5cbmNvbnN0IGtFbnVtZXJhYmxlUHJvcGVydHkgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5rRW51bWVyYWJsZVByb3BlcnR5LmVudW1lcmFibGUgPSB0cnVlXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBub3AsXG4gIGlzRGlzdHVyYmVkLFxuICBpc0Vycm9yZWQsXG4gIGlzUmVhZGFibGUsXG4gIHRvVVNWU3RyaW5nLFxuICBpc1JlYWRhYmxlQWJvcnRlZCxcbiAgaXNCbG9iTGlrZSxcbiAgcGFyc2VPcmlnaW4sXG4gIHBhcnNlVVJMLFxuICBnZXRTZXJ2ZXJOYW1lLFxuICBpc1N0cmVhbSxcbiAgaXNJdGVyYWJsZSxcbiAgaXNBc3luY0l0ZXJhYmxlLFxuICBpc0Rlc3Ryb3llZCxcbiAgaGVhZGVyTmFtZVRvU3RyaW5nLFxuICBwYXJzZVJhd0hlYWRlcnMsXG4gIHBhcnNlSGVhZGVycyxcbiAgcGFyc2VLZWVwQWxpdmVUaW1lb3V0LFxuICBkZXN0cm95LFxuICBib2R5TGVuZ3RoLFxuICBkZWVwQ2xvbmUsXG4gIFJlYWRhYmxlU3RyZWFtRnJvbSxcbiAgaXNCdWZmZXIsXG4gIHZhbGlkYXRlSGFuZGxlcixcbiAgZ2V0U29ja2V0SW5mbyxcbiAgaXNGb3JtRGF0YUxpa2UsXG4gIGJ1aWxkVVJMLFxuICB0aHJvd0lmQWJvcnRlZCxcbiAgYWRkQWJvcnRMaXN0ZW5lcixcbiAgcGFyc2VSYW5nZUhlYWRlcixcbiAgbm9kZU1ham9yLFxuICBub2RlTWlub3IsXG4gIG5vZGVIYXNBdXRvU2VsZWN0RmFtaWx5OiBub2RlTWFqb3IgPiAxOCB8fCAobm9kZU1ham9yID09PSAxOCAmJiBub2RlTWlub3IgPj0gMTMpLFxuICBzYWZlSFRUUE1ldGhvZHM6IFsnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdUUkFDRSddXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmxldCBmYXN0Tm93ID0gRGF0ZS5ub3coKVxubGV0IGZhc3ROb3dUaW1lb3V0XG5cbmNvbnN0IGZhc3RUaW1lcnMgPSBbXVxuXG5mdW5jdGlvbiBvblRpbWVvdXQgKCkge1xuICBmYXN0Tm93ID0gRGF0ZS5ub3coKVxuXG4gIGxldCBsZW4gPSBmYXN0VGltZXJzLmxlbmd0aFxuICBsZXQgaWR4ID0gMFxuICB3aGlsZSAoaWR4IDwgbGVuKSB7XG4gICAgY29uc3QgdGltZXIgPSBmYXN0VGltZXJzW2lkeF1cblxuICAgIGlmICh0aW1lci5zdGF0ZSA9PT0gMCkge1xuICAgICAgdGltZXIuc3RhdGUgPSBmYXN0Tm93ICsgdGltZXIuZGVsYXlcbiAgICB9IGVsc2UgaWYgKHRpbWVyLnN0YXRlID4gMCAmJiBmYXN0Tm93ID49IHRpbWVyLnN0YXRlKSB7XG4gICAgICB0aW1lci5zdGF0ZSA9IC0xXG4gICAgICB0aW1lci5jYWxsYmFjayh0aW1lci5vcGFxdWUpXG4gICAgfVxuXG4gICAgaWYgKHRpbWVyLnN0YXRlID09PSAtMSkge1xuICAgICAgdGltZXIuc3RhdGUgPSAtMlxuICAgICAgaWYgKGlkeCAhPT0gbGVuIC0gMSkge1xuICAgICAgICBmYXN0VGltZXJzW2lkeF0gPSBmYXN0VGltZXJzLnBvcCgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmYXN0VGltZXJzLnBvcCgpXG4gICAgICB9XG4gICAgICBsZW4gLT0gMVxuICAgIH0gZWxzZSB7XG4gICAgICBpZHggKz0gMVxuICAgIH1cbiAgfVxuXG4gIGlmIChmYXN0VGltZXJzLmxlbmd0aCA+IDApIHtcbiAgICByZWZyZXNoVGltZW91dCgpXG4gIH1cbn1cblxuZnVuY3Rpb24gcmVmcmVzaFRpbWVvdXQgKCkge1xuICBpZiAoZmFzdE5vd1RpbWVvdXQgJiYgZmFzdE5vd1RpbWVvdXQucmVmcmVzaCkge1xuICAgIGZhc3ROb3dUaW1lb3V0LnJlZnJlc2goKVxuICB9IGVsc2Uge1xuICAgIGNsZWFyVGltZW91dChmYXN0Tm93VGltZW91dClcbiAgICBmYXN0Tm93VGltZW91dCA9IHNldFRpbWVvdXQob25UaW1lb3V0LCAxZTMpXG4gICAgaWYgKGZhc3ROb3dUaW1lb3V0LnVucmVmKSB7XG4gICAgICBmYXN0Tm93VGltZW91dC51bnJlZigpXG4gICAgfVxuICB9XG59XG5cbmNsYXNzIFRpbWVvdXQge1xuICBjb25zdHJ1Y3RvciAoY2FsbGJhY2ssIGRlbGF5LCBvcGFxdWUpIHtcbiAgICB0aGlzLmNhbGxiYWNrID0gY2FsbGJhY2tcbiAgICB0aGlzLmRlbGF5ID0gZGVsYXlcbiAgICB0aGlzLm9wYXF1ZSA9IG9wYXF1ZVxuXG4gICAgLy8gIC0yIG5vdCBpbiB0aW1lciBsaXN0XG4gICAgLy8gIC0xIGluIHRpbWVyIGxpc3QgYnV0IGluYWN0aXZlXG4gICAgLy8gICAwIGluIHRpbWVyIGxpc3Qgd2FpdGluZyBmb3IgdGltZVxuICAgIC8vID4gMCBpbiB0aW1lciBsaXN0IHdhaXRpbmcgZm9yIHRpbWUgdG8gZXhwaXJlXG4gICAgdGhpcy5zdGF0ZSA9IC0yXG5cbiAgICB0aGlzLnJlZnJlc2goKVxuICB9XG5cbiAgcmVmcmVzaCAoKSB7XG4gICAgaWYgKHRoaXMuc3RhdGUgPT09IC0yKSB7XG4gICAgICBmYXN0VGltZXJzLnB1c2godGhpcylcbiAgICAgIGlmICghZmFzdE5vd1RpbWVvdXQgfHwgZmFzdFRpbWVycy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgcmVmcmVzaFRpbWVvdXQoKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuc3RhdGUgPSAwXG4gIH1cblxuICBjbGVhciAoKSB7XG4gICAgdGhpcy5zdGF0ZSA9IC0xXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHNldFRpbWVvdXQgKGNhbGxiYWNrLCBkZWxheSwgb3BhcXVlKSB7XG4gICAgcmV0dXJuIGRlbGF5IDwgMWUzXG4gICAgICA/IHNldFRpbWVvdXQoY2FsbGJhY2ssIGRlbGF5LCBvcGFxdWUpXG4gICAgICA6IG5ldyBUaW1lb3V0KGNhbGxiYWNrLCBkZWxheSwgb3BhcXVlKVxuICB9LFxuICBjbGVhclRpbWVvdXQgKHRpbWVvdXQpIHtcbiAgICBpZiAodGltZW91dCBpbnN0YW5jZW9mIFRpbWVvdXQpIHtcbiAgICAgIHRpbWVvdXQuY2xlYXIoKVxuICAgIH0gZWxzZSB7XG4gICAgICBjbGVhclRpbWVvdXQodGltZW91dClcbiAgICB9XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCdcblxuLyoqXG4gKiBDb3B5cmlnaHQgQnJpYW4gV2hpdGUuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vbXNjZGV4L3N0cmVhbXNlYXJjaFxuICpcbiAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHlcbiAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlIFwiU29mdHdhcmVcIiksIHRvXG4gKiBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZVxuICogcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yXG4gKiBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpc1xuICogZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczpcbiAqXG4gKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpblxuICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuXG4gKlxuICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIFwiQVMgSVNcIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUlxuICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksXG4gKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEVcbiAqIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVJcbiAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HXG4gKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTXG4gKiBJTiBUSEUgU09GVFdBUkUuXG4gKlxuICogQmFzZWQgaGVhdmlseSBvbiB0aGUgU3RyZWFtaW5nIEJveWVyLU1vb3JlLUhvcnNwb29sIEMrKyBpbXBsZW1lbnRhdGlvblxuICogYnkgSG9uZ2xpIExhaSBhdDogaHR0cHM6Ly9naXRodWIuY29tL0Zvb0JhcldpZGdldC9ib3llci1tb29yZS1ob3JzcG9vbFxuICovXG5jb25zdCBFdmVudEVtaXR0ZXIgPSByZXF1aXJlKCdub2RlOmV2ZW50cycpLkV2ZW50RW1pdHRlclxuY29uc3QgaW5oZXJpdHMgPSByZXF1aXJlKCdub2RlOnV0aWwnKS5pbmhlcml0c1xuXG5mdW5jdGlvbiBTQk1IIChuZWVkbGUpIHtcbiAgaWYgKHR5cGVvZiBuZWVkbGUgPT09ICdzdHJpbmcnKSB7XG4gICAgbmVlZGxlID0gQnVmZmVyLmZyb20obmVlZGxlKVxuICB9XG5cbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIobmVlZGxlKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBuZWVkbGUgaGFzIHRvIGJlIGEgU3RyaW5nIG9yIGEgQnVmZmVyLicpXG4gIH1cblxuICBjb25zdCBuZWVkbGVMZW5ndGggPSBuZWVkbGUubGVuZ3RoXG5cbiAgaWYgKG5lZWRsZUxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIG5lZWRsZSBjYW5ub3QgYmUgYW4gZW1wdHkgU3RyaW5nL0J1ZmZlci4nKVxuICB9XG5cbiAgaWYgKG5lZWRsZUxlbmd0aCA+IDI1Nikge1xuICAgIHRocm93IG5ldyBFcnJvcignVGhlIG5lZWRsZSBjYW5ub3QgaGF2ZSBhIGxlbmd0aCBiaWdnZXIgdGhhbiAyNTYuJylcbiAgfVxuXG4gIHRoaXMubWF4TWF0Y2hlcyA9IEluZmluaXR5XG4gIHRoaXMubWF0Y2hlcyA9IDBcblxuICB0aGlzLl9vY2MgPSBuZXcgQXJyYXkoMjU2KVxuICAgIC5maWxsKG5lZWRsZUxlbmd0aCkgLy8gSW5pdGlhbGl6ZSBvY2N1cnJlbmNlIHRhYmxlLlxuICB0aGlzLl9sb29rYmVoaW5kX3NpemUgPSAwXG4gIHRoaXMuX25lZWRsZSA9IG5lZWRsZVxuICB0aGlzLl9idWZwb3MgPSAwXG5cbiAgdGhpcy5fbG9va2JlaGluZCA9IEJ1ZmZlci5hbGxvYyhuZWVkbGVMZW5ndGgpXG5cbiAgLy8gUG9wdWxhdGUgb2NjdXJyZW5jZSB0YWJsZSB3aXRoIGFuYWx5c2lzIG9mIHRoZSBuZWVkbGUsXG4gIC8vIGlnbm9yaW5nIGxhc3QgbGV0dGVyLlxuICBmb3IgKHZhciBpID0gMDsgaSA8IG5lZWRsZUxlbmd0aCAtIDE7ICsraSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXZhclxuICAgIHRoaXMuX29jY1tuZWVkbGVbaV1dID0gbmVlZGxlTGVuZ3RoIC0gMSAtIGlcbiAgfVxufVxuaW5oZXJpdHMoU0JNSCwgRXZlbnRFbWl0dGVyKVxuXG5TQk1ILnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5fbG9va2JlaGluZF9zaXplID0gMFxuICB0aGlzLm1hdGNoZXMgPSAwXG4gIHRoaXMuX2J1ZnBvcyA9IDBcbn1cblxuU0JNSC5wcm90b3R5cGUucHVzaCA9IGZ1bmN0aW9uIChjaHVuaywgcG9zKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGNodW5rKSkge1xuICAgIGNodW5rID0gQnVmZmVyLmZyb20oY2h1bmssICdiaW5hcnknKVxuICB9XG4gIGNvbnN0IGNobGVuID0gY2h1bmsubGVuZ3RoXG4gIHRoaXMuX2J1ZnBvcyA9IHBvcyB8fCAwXG4gIGxldCByXG4gIHdoaWxlIChyICE9PSBjaGxlbiAmJiB0aGlzLm1hdGNoZXMgPCB0aGlzLm1heE1hdGNoZXMpIHsgciA9IHRoaXMuX3NibWhfZmVlZChjaHVuaykgfVxuICByZXR1cm4gclxufVxuXG5TQk1ILnByb3RvdHlwZS5fc2JtaF9mZWVkID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgY29uc3QgbGVuID0gZGF0YS5sZW5ndGhcbiAgY29uc3QgbmVlZGxlID0gdGhpcy5fbmVlZGxlXG4gIGNvbnN0IG5lZWRsZUxlbmd0aCA9IG5lZWRsZS5sZW5ndGhcbiAgY29uc3QgbGFzdE5lZWRsZUNoYXIgPSBuZWVkbGVbbmVlZGxlTGVuZ3RoIC0gMV1cblxuICAvLyBQb3NpdGl2ZTogcG9pbnRzIHRvIGEgcG9zaXRpb24gaW4gYGRhdGFgXG4gIC8vICAgICAgICAgICBwb3MgPT0gMyBwb2ludHMgdG8gZGF0YVszXVxuICAvLyBOZWdhdGl2ZTogcG9pbnRzIHRvIGEgcG9zaXRpb24gaW4gdGhlIGxvb2tiZWhpbmQgYnVmZmVyXG4gIC8vICAgICAgICAgICBwb3MgPT0gLTIgcG9pbnRzIHRvIGxvb2tiZWhpbmRbbG9va2JlaGluZF9zaXplIC0gMl1cbiAgbGV0IHBvcyA9IC10aGlzLl9sb29rYmVoaW5kX3NpemVcbiAgbGV0IGNoXG5cbiAgaWYgKHBvcyA8IDApIHtcbiAgICAvLyBMb29rYmVoaW5kIGJ1ZmZlciBpcyBub3QgZW1wdHkuIFBlcmZvcm0gQm95ZXItTW9vcmUtSG9yc3Bvb2xcbiAgICAvLyBzZWFyY2ggd2l0aCBjaGFyYWN0ZXIgbG9va3VwIGNvZGUgdGhhdCBjb25zaWRlcnMgYm90aCB0aGVcbiAgICAvLyBsb29rYmVoaW5kIGJ1ZmZlciBhbmQgdGhlIGN1cnJlbnQgcm91bmQncyBoYXlzdGFjayBkYXRhLlxuICAgIC8vXG4gICAgLy8gTG9vcCB1bnRpbFxuICAgIC8vICAgdGhlcmUgaXMgYSBtYXRjaC5cbiAgICAvLyBvciB1bnRpbFxuICAgIC8vICAgd2UndmUgbW92ZWQgcGFzdCB0aGUgcG9zaXRpb24gdGhhdCByZXF1aXJlcyB0aGVcbiAgICAvLyAgIGxvb2tiZWhpbmQgYnVmZmVyLiBJbiB0aGlzIGNhc2Ugd2Ugc3dpdGNoIHRvIHRoZVxuICAgIC8vICAgb3B0aW1pemVkIGxvb3AuXG4gICAgLy8gb3IgdW50aWxcbiAgICAvLyAgIHRoZSBjaGFyYWN0ZXIgdG8gbG9vayBhdCBsaWVzIG91dHNpZGUgdGhlIGhheXN0YWNrLlxuICAgIHdoaWxlIChwb3MgPCAwICYmIHBvcyA8PSBsZW4gLSBuZWVkbGVMZW5ndGgpIHtcbiAgICAgIGNoID0gdGhpcy5fc2JtaF9sb29rdXBfY2hhcihkYXRhLCBwb3MgKyBuZWVkbGVMZW5ndGggLSAxKVxuXG4gICAgICBpZiAoXG4gICAgICAgIGNoID09PSBsYXN0TmVlZGxlQ2hhciAmJlxuICAgICAgICB0aGlzLl9zYm1oX21lbWNtcChkYXRhLCBwb3MsIG5lZWRsZUxlbmd0aCAtIDEpXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5fbG9va2JlaGluZF9zaXplID0gMFxuICAgICAgICArK3RoaXMubWF0Y2hlc1xuICAgICAgICB0aGlzLmVtaXQoJ2luZm8nLCB0cnVlKVxuXG4gICAgICAgIHJldHVybiAodGhpcy5fYnVmcG9zID0gcG9zICsgbmVlZGxlTGVuZ3RoKVxuICAgICAgfVxuICAgICAgcG9zICs9IHRoaXMuX29jY1tjaF1cbiAgICB9XG5cbiAgICAvLyBObyBtYXRjaC5cblxuICAgIGlmIChwb3MgPCAwKSB7XG4gICAgICAvLyBUaGVyZSdzIHRvbyBmZXcgZGF0YSBmb3IgQm95ZXItTW9vcmUtSG9yc3Bvb2wgdG8gcnVuLFxuICAgICAgLy8gc28gbGV0J3MgdXNlIGEgZGlmZmVyZW50IGFsZ29yaXRobSB0byBza2lwIGFzIG11Y2ggYXNcbiAgICAgIC8vIHdlIGNhbi5cbiAgICAgIC8vIEZvcndhcmQgcG9zIHVudGlsXG4gICAgICAvLyAgIHRoZSB0cmFpbGluZyBwYXJ0IG9mIGxvb2tiZWhpbmQgKyBkYXRhXG4gICAgICAvLyAgIGxvb2tzIGxpa2UgdGhlIGJlZ2lubmluZyBvZiB0aGUgbmVlZGxlXG4gICAgICAvLyBvciB1bnRpbFxuICAgICAgLy8gICBwb3MgPT0gMFxuICAgICAgd2hpbGUgKHBvcyA8IDAgJiYgIXRoaXMuX3NibWhfbWVtY21wKGRhdGEsIHBvcywgbGVuIC0gcG9zKSkgeyArK3BvcyB9XG4gICAgfVxuXG4gICAgaWYgKHBvcyA+PSAwKSB7XG4gICAgICAvLyBEaXNjYXJkIGxvb2tiZWhpbmQgYnVmZmVyLlxuICAgICAgdGhpcy5lbWl0KCdpbmZvJywgZmFsc2UsIHRoaXMuX2xvb2tiZWhpbmQsIDAsIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSlcbiAgICAgIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSA9IDBcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gQ3V0IG9mZiBwYXJ0IG9mIHRoZSBsb29rYmVoaW5kIGJ1ZmZlciB0aGF0IGhhc1xuICAgICAgLy8gYmVlbiBwcm9jZXNzZWQgYW5kIGFwcGVuZCB0aGUgZW50aXJlIGhheXN0YWNrXG4gICAgICAvLyBpbnRvIGl0LlxuICAgICAgY29uc3QgYnl0ZXNUb0N1dE9mZiA9IHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSArIHBvc1xuICAgICAgaWYgKGJ5dGVzVG9DdXRPZmYgPiAwKSB7XG4gICAgICAgIC8vIFRoZSBjdXQgb2ZmIGRhdGEgaXMgZ3VhcmFudGVlZCBub3QgdG8gY29udGFpbiB0aGUgbmVlZGxlLlxuICAgICAgICB0aGlzLmVtaXQoJ2luZm8nLCBmYWxzZSwgdGhpcy5fbG9va2JlaGluZCwgMCwgYnl0ZXNUb0N1dE9mZilcbiAgICAgIH1cblxuICAgICAgdGhpcy5fbG9va2JlaGluZC5jb3B5KHRoaXMuX2xvb2tiZWhpbmQsIDAsIGJ5dGVzVG9DdXRPZmYsXG4gICAgICAgIHRoaXMuX2xvb2tiZWhpbmRfc2l6ZSAtIGJ5dGVzVG9DdXRPZmYpXG4gICAgICB0aGlzLl9sb29rYmVoaW5kX3NpemUgLT0gYnl0ZXNUb0N1dE9mZlxuXG4gICAgICBkYXRhLmNvcHkodGhpcy5fbG9va2JlaGluZCwgdGhpcy5fbG9va2JlaGluZF9zaXplKVxuICAgICAgdGhpcy5fbG9va2JlaGluZF9zaXplICs9IGxlblxuXG4gICAgICB0aGlzLl9idWZwb3MgPSBsZW5cbiAgICAgIHJldHVybiBsZW5cbiAgICB9XG4gIH1cblxuICBwb3MgKz0gKHBvcyA+PSAwKSAqIHRoaXMuX2J1ZnBvc1xuXG4gIC8vIExvb2tiZWhpbmQgYnVmZmVyIGlzIG5vdyBlbXB0eS4gV2Ugb25seSBuZWVkIHRvIGNoZWNrIGlmIHRoZVxuICAvLyBuZWVkbGUgaXMgaW4gdGhlIGhheXN0YWNrLlxuICBpZiAoZGF0YS5pbmRleE9mKG5lZWRsZSwgcG9zKSAhPT0gLTEpIHtcbiAgICBwb3MgPSBkYXRhLmluZGV4T2YobmVlZGxlLCBwb3MpXG4gICAgKyt0aGlzLm1hdGNoZXNcbiAgICBpZiAocG9zID4gMCkgeyB0aGlzLmVtaXQoJ2luZm8nLCB0cnVlLCBkYXRhLCB0aGlzLl9idWZwb3MsIHBvcykgfSBlbHNlIHsgdGhpcy5lbWl0KCdpbmZvJywgdHJ1ZSkgfVxuXG4gICAgcmV0dXJuICh0aGlzLl9idWZwb3MgPSBwb3MgKyBuZWVkbGVMZW5ndGgpXG4gIH0gZWxzZSB7XG4gICAgcG9zID0gbGVuIC0gbmVlZGxlTGVuZ3RoXG4gIH1cblxuICAvLyBUaGVyZSB3YXMgbm8gbWF0Y2guIElmIHRoZXJlJ3MgdHJhaWxpbmcgaGF5c3RhY2sgZGF0YSB0aGF0IHdlIGNhbm5vdFxuICAvLyBtYXRjaCB5ZXQgdXNpbmcgdGhlIEJveWVyLU1vb3JlLUhvcnNwb29sIGFsZ29yaXRobSAoYmVjYXVzZSB0aGUgdHJhaWxpbmdcbiAgLy8gZGF0YSBpcyBsZXNzIHRoYW4gdGhlIG5lZWRsZSBzaXplKSB0aGVuIG1hdGNoIHVzaW5nIGEgbW9kaWZpZWRcbiAgLy8gYWxnb3JpdGhtIHRoYXQgc3RhcnRzIG1hdGNoaW5nIGZyb20gdGhlIGJlZ2lubmluZyBpbnN0ZWFkIG9mIHRoZSBlbmQuXG4gIC8vIFdoYXRldmVyIHRyYWlsaW5nIGRhdGEgaXMgbGVmdCBhZnRlciBydW5uaW5nIHRoaXMgYWxnb3JpdGhtIGlzIGFkZGVkIHRvXG4gIC8vIHRoZSBsb29rYmVoaW5kIGJ1ZmZlci5cbiAgd2hpbGUgKFxuICAgIHBvcyA8IGxlbiAmJlxuICAgIChcbiAgICAgIGRhdGFbcG9zXSAhPT0gbmVlZGxlWzBdIHx8XG4gICAgICAoXG4gICAgICAgIChCdWZmZXIuY29tcGFyZShcbiAgICAgICAgICBkYXRhLnN1YmFycmF5KHBvcywgcG9zICsgbGVuIC0gcG9zKSxcbiAgICAgICAgICBuZWVkbGUuc3ViYXJyYXkoMCwgbGVuIC0gcG9zKVxuICAgICAgICApICE9PSAwKVxuICAgICAgKVxuICAgIClcbiAgKSB7XG4gICAgKytwb3NcbiAgfVxuICBpZiAocG9zIDwgbGVuKSB7XG4gICAgZGF0YS5jb3B5KHRoaXMuX2xvb2tiZWhpbmQsIDAsIHBvcywgcG9zICsgKGxlbiAtIHBvcykpXG4gICAgdGhpcy5fbG9va2JlaGluZF9zaXplID0gbGVuIC0gcG9zXG4gIH1cblxuICAvLyBFdmVyeXRoaW5nIHVudGlsIHBvcyBpcyBndWFyYW50ZWVkIG5vdCB0byBjb250YWluIG5lZWRsZSBkYXRhLlxuICBpZiAocG9zID4gMCkgeyB0aGlzLmVtaXQoJ2luZm8nLCBmYWxzZSwgZGF0YSwgdGhpcy5fYnVmcG9zLCBwb3MgPCBsZW4gPyBwb3MgOiBsZW4pIH1cblxuICB0aGlzLl9idWZwb3MgPSBsZW5cbiAgcmV0dXJuIGxlblxufVxuXG5TQk1ILnByb3RvdHlwZS5fc2JtaF9sb29rdXBfY2hhciA9IGZ1bmN0aW9uIChkYXRhLCBwb3MpIHtcbiAgcmV0dXJuIChwb3MgPCAwKVxuICAgID8gdGhpcy5fbG9va2JlaGluZFt0aGlzLl9sb29rYmVoaW5kX3NpemUgKyBwb3NdXG4gICAgOiBkYXRhW3Bvc11cbn1cblxuU0JNSC5wcm90b3R5cGUuX3NibWhfbWVtY21wID0gZnVuY3Rpb24gKGRhdGEsIHBvcywgbGVuKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby12YXJcbiAgICBpZiAodGhpcy5fc2JtaF9sb29rdXBfY2hhcihkYXRhLCBwb3MgKyBpKSAhPT0gdGhpcy5fbmVlZGxlW2ldKSB7IHJldHVybiBmYWxzZSB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxubW9kdWxlLmV4cG9ydHMgPSBTQk1IXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnbm9kZTp1dGlsJykuaW5oZXJpdHNcbmNvbnN0IFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKS5SZWFkYWJsZVxuXG5mdW5jdGlvbiBQYXJ0U3RyZWFtIChvcHRzKSB7XG4gIFJlYWRhYmxlU3RyZWFtLmNhbGwodGhpcywgb3B0cylcbn1cbmluaGVyaXRzKFBhcnRTdHJlYW0sIFJlYWRhYmxlU3RyZWFtKVxuXG5QYXJ0U3RyZWFtLnByb3RvdHlwZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7fVxuXG5tb2R1bGUuZXhwb3J0cyA9IFBhcnRTdHJlYW1cbiIsICIndXNlIHN0cmljdCdcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiBnZXRMaW1pdCAobGltaXRzLCBuYW1lLCBkZWZhdWx0TGltaXQpIHtcbiAgaWYgKFxuICAgICFsaW1pdHMgfHxcbiAgICBsaW1pdHNbbmFtZV0gPT09IHVuZGVmaW5lZCB8fFxuICAgIGxpbWl0c1tuYW1lXSA9PT0gbnVsbFxuICApIHsgcmV0dXJuIGRlZmF1bHRMaW1pdCB9XG5cbiAgaWYgKFxuICAgIHR5cGVvZiBsaW1pdHNbbmFtZV0gIT09ICdudW1iZXInIHx8XG4gICAgaXNOYU4obGltaXRzW25hbWVdKVxuICApIHsgdGhyb3cgbmV3IFR5cGVFcnJvcignTGltaXQgJyArIG5hbWUgKyAnIGlzIG5vdCBhIHZhbGlkIG51bWJlcicpIH1cblxuICByZXR1cm4gbGltaXRzW25hbWVdXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ25vZGU6ZXZlbnRzJykuRXZlbnRFbWl0dGVyXG5jb25zdCBpbmhlcml0cyA9IHJlcXVpcmUoJ25vZGU6dXRpbCcpLmluaGVyaXRzXG5jb25zdCBnZXRMaW1pdCA9IHJlcXVpcmUoJy4uLy4uLy4uL2xpYi91dGlscy9nZXRMaW1pdCcpXG5cbmNvbnN0IFN0cmVhbVNlYXJjaCA9IHJlcXVpcmUoJy4uLy4uL3N0cmVhbXNlYXJjaC9zYm1oJylcblxuY29uc3QgQl9EQ1JMRiA9IEJ1ZmZlci5mcm9tKCdcXHJcXG5cXHJcXG4nKVxuY29uc3QgUkVfQ1JMRiA9IC9cXHJcXG4vZ1xuY29uc3QgUkVfSERSID0gL14oW146XSspOlsgXFx0XT8oW1xceDAwLVxceEZGXSspPyQvIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29udHJvbC1yZWdleFxuXG5mdW5jdGlvbiBIZWFkZXJQYXJzZXIgKGNmZykge1xuICBFdmVudEVtaXR0ZXIuY2FsbCh0aGlzKVxuXG4gIGNmZyA9IGNmZyB8fCB7fVxuICBjb25zdCBzZWxmID0gdGhpc1xuICB0aGlzLm5yZWFkID0gMFxuICB0aGlzLm1heGVkID0gZmFsc2VcbiAgdGhpcy5ucGFpcnMgPSAwXG4gIHRoaXMubWF4SGVhZGVyUGFpcnMgPSBnZXRMaW1pdChjZmcsICdtYXhIZWFkZXJQYWlycycsIDIwMDApXG4gIHRoaXMubWF4SGVhZGVyU2l6ZSA9IGdldExpbWl0KGNmZywgJ21heEhlYWRlclNpemUnLCA4MCAqIDEwMjQpXG4gIHRoaXMuYnVmZmVyID0gJydcbiAgdGhpcy5oZWFkZXIgPSB7fVxuICB0aGlzLmZpbmlzaGVkID0gZmFsc2VcbiAgdGhpcy5zcyA9IG5ldyBTdHJlYW1TZWFyY2goQl9EQ1JMRilcbiAgdGhpcy5zcy5vbignaW5mbycsIGZ1bmN0aW9uIChpc01hdGNoLCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgaWYgKGRhdGEgJiYgIXNlbGYubWF4ZWQpIHtcbiAgICAgIGlmIChzZWxmLm5yZWFkICsgZW5kIC0gc3RhcnQgPj0gc2VsZi5tYXhIZWFkZXJTaXplKSB7XG4gICAgICAgIGVuZCA9IHNlbGYubWF4SGVhZGVyU2l6ZSAtIHNlbGYubnJlYWQgKyBzdGFydFxuICAgICAgICBzZWxmLm5yZWFkID0gc2VsZi5tYXhIZWFkZXJTaXplXG4gICAgICAgIHNlbGYubWF4ZWQgPSB0cnVlXG4gICAgICB9IGVsc2UgeyBzZWxmLm5yZWFkICs9IChlbmQgLSBzdGFydCkgfVxuXG4gICAgICBzZWxmLmJ1ZmZlciArPSBkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCBzdGFydCwgZW5kKVxuICAgIH1cbiAgICBpZiAoaXNNYXRjaCkgeyBzZWxmLl9maW5pc2goKSB9XG4gIH0pXG59XG5pbmhlcml0cyhIZWFkZXJQYXJzZXIsIEV2ZW50RW1pdHRlcilcblxuSGVhZGVyUGFyc2VyLnByb3RvdHlwZS5wdXNoID0gZnVuY3Rpb24gKGRhdGEpIHtcbiAgY29uc3QgciA9IHRoaXMuc3MucHVzaChkYXRhKVxuICBpZiAodGhpcy5maW5pc2hlZCkgeyByZXR1cm4gciB9XG59XG5cbkhlYWRlclBhcnNlci5wcm90b3R5cGUucmVzZXQgPSBmdW5jdGlvbiAoKSB7XG4gIHRoaXMuZmluaXNoZWQgPSBmYWxzZVxuICB0aGlzLmJ1ZmZlciA9ICcnXG4gIHRoaXMuaGVhZGVyID0ge31cbiAgdGhpcy5zcy5yZXNldCgpXG59XG5cbkhlYWRlclBhcnNlci5wcm90b3R5cGUuX2ZpbmlzaCA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMuYnVmZmVyKSB7IHRoaXMuX3BhcnNlSGVhZGVyKCkgfVxuICB0aGlzLnNzLm1hdGNoZXMgPSB0aGlzLnNzLm1heE1hdGNoZXNcbiAgY29uc3QgaGVhZGVyID0gdGhpcy5oZWFkZXJcbiAgdGhpcy5oZWFkZXIgPSB7fVxuICB0aGlzLmJ1ZmZlciA9ICcnXG4gIHRoaXMuZmluaXNoZWQgPSB0cnVlXG4gIHRoaXMubnJlYWQgPSB0aGlzLm5wYWlycyA9IDBcbiAgdGhpcy5tYXhlZCA9IGZhbHNlXG4gIHRoaXMuZW1pdCgnaGVhZGVyJywgaGVhZGVyKVxufVxuXG5IZWFkZXJQYXJzZXIucHJvdG90eXBlLl9wYXJzZUhlYWRlciA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKHRoaXMubnBhaXJzID09PSB0aGlzLm1heEhlYWRlclBhaXJzKSB7IHJldHVybiB9XG5cbiAgY29uc3QgbGluZXMgPSB0aGlzLmJ1ZmZlci5zcGxpdChSRV9DUkxGKVxuICBjb25zdCBsZW4gPSBsaW5lcy5sZW5ndGhcbiAgbGV0IG0sIGhcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdmFyXG4gICAgaWYgKGxpbmVzW2ldLmxlbmd0aCA9PT0gMCkgeyBjb250aW51ZSB9XG4gICAgaWYgKGxpbmVzW2ldWzBdID09PSAnXFx0JyB8fCBsaW5lc1tpXVswXSA9PT0gJyAnKSB7XG4gICAgICAvLyBmb2xkZWQgaGVhZGVyIGNvbnRlbnRcbiAgICAgIC8vIFJGQzI4MjIgc2F5cyB0byBqdXN0IHJlbW92ZSB0aGUgQ1JMRiBhbmQgbm90IHRoZSB3aGl0ZXNwYWNlIGZvbGxvd2luZ1xuICAgICAgLy8gaXQsIHNvIHdlIGZvbGxvdyB0aGUgUkZDIGFuZCBpbmNsdWRlIHRoZSBsZWFkaW5nIHdoaXRlc3BhY2UgLi4uXG4gICAgICBpZiAoaCkge1xuICAgICAgICB0aGlzLmhlYWRlcltoXVt0aGlzLmhlYWRlcltoXS5sZW5ndGggLSAxXSArPSBsaW5lc1tpXVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHBvc0NvbG9uID0gbGluZXNbaV0uaW5kZXhPZignOicpXG4gICAgaWYgKFxuICAgICAgcG9zQ29sb24gPT09IC0xIHx8XG4gICAgICBwb3NDb2xvbiA9PT0gMFxuICAgICkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIG0gPSBSRV9IRFIuZXhlYyhsaW5lc1tpXSlcbiAgICBoID0gbVsxXS50b0xvd2VyQ2FzZSgpXG4gICAgdGhpcy5oZWFkZXJbaF0gPSB0aGlzLmhlYWRlcltoXSB8fCBbXVxuICAgIHRoaXMuaGVhZGVyW2hdLnB1c2goKG1bMl0gfHwgJycpKVxuICAgIGlmICgrK3RoaXMubnBhaXJzID09PSB0aGlzLm1heEhlYWRlclBhaXJzKSB7IGJyZWFrIH1cbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IEhlYWRlclBhcnNlclxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBXcml0YWJsZVN0cmVhbSA9IHJlcXVpcmUoJ25vZGU6c3RyZWFtJykuV3JpdGFibGVcbmNvbnN0IGluaGVyaXRzID0gcmVxdWlyZSgnbm9kZTp1dGlsJykuaW5oZXJpdHNcblxuY29uc3QgU3RyZWFtU2VhcmNoID0gcmVxdWlyZSgnLi4vLi4vc3RyZWFtc2VhcmNoL3NibWgnKVxuXG5jb25zdCBQYXJ0U3RyZWFtID0gcmVxdWlyZSgnLi9QYXJ0U3RyZWFtJylcbmNvbnN0IEhlYWRlclBhcnNlciA9IHJlcXVpcmUoJy4vSGVhZGVyUGFyc2VyJylcblxuY29uc3QgREFTSCA9IDQ1XG5jb25zdCBCX09ORURBU0ggPSBCdWZmZXIuZnJvbSgnLScpXG5jb25zdCBCX0NSTEYgPSBCdWZmZXIuZnJvbSgnXFxyXFxuJylcbmNvbnN0IEVNUFRZX0ZOID0gZnVuY3Rpb24gKCkge31cblxuZnVuY3Rpb24gRGljZXIgKGNmZykge1xuICBpZiAoISh0aGlzIGluc3RhbmNlb2YgRGljZXIpKSB7IHJldHVybiBuZXcgRGljZXIoY2ZnKSB9XG4gIFdyaXRhYmxlU3RyZWFtLmNhbGwodGhpcywgY2ZnKVxuXG4gIGlmICghY2ZnIHx8ICghY2ZnLmhlYWRlckZpcnN0ICYmIHR5cGVvZiBjZmcuYm91bmRhcnkgIT09ICdzdHJpbmcnKSkgeyB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb3VuZGFyeSByZXF1aXJlZCcpIH1cblxuICBpZiAodHlwZW9mIGNmZy5ib3VuZGFyeSA9PT0gJ3N0cmluZycpIHsgdGhpcy5zZXRCb3VuZGFyeShjZmcuYm91bmRhcnkpIH0gZWxzZSB7IHRoaXMuX2JwYXJzZXIgPSB1bmRlZmluZWQgfVxuXG4gIHRoaXMuX2hlYWRlckZpcnN0ID0gY2ZnLmhlYWRlckZpcnN0XG5cbiAgdGhpcy5fZGFzaGVzID0gMFxuICB0aGlzLl9wYXJ0cyA9IDBcbiAgdGhpcy5fZmluaXNoZWQgPSBmYWxzZVxuICB0aGlzLl9yZWFsRmluaXNoID0gZmFsc2VcbiAgdGhpcy5faXNQcmVhbWJsZSA9IHRydWVcbiAgdGhpcy5fanVzdE1hdGNoZWQgPSBmYWxzZVxuICB0aGlzLl9maXJzdFdyaXRlID0gdHJ1ZVxuICB0aGlzLl9pbkhlYWRlciA9IHRydWVcbiAgdGhpcy5fcGFydCA9IHVuZGVmaW5lZFxuICB0aGlzLl9jYiA9IHVuZGVmaW5lZFxuICB0aGlzLl9pZ25vcmVEYXRhID0gZmFsc2VcbiAgdGhpcy5fcGFydE9wdHMgPSB7IGhpZ2hXYXRlck1hcms6IGNmZy5wYXJ0SHdtIH1cbiAgdGhpcy5fcGF1c2UgPSBmYWxzZVxuXG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHRoaXMuX2hwYXJzZXIgPSBuZXcgSGVhZGVyUGFyc2VyKGNmZylcbiAgdGhpcy5faHBhcnNlci5vbignaGVhZGVyJywgZnVuY3Rpb24gKGhlYWRlcikge1xuICAgIHNlbGYuX2luSGVhZGVyID0gZmFsc2VcbiAgICBzZWxmLl9wYXJ0LmVtaXQoJ2hlYWRlcicsIGhlYWRlcilcbiAgfSlcbn1cbmluaGVyaXRzKERpY2VyLCBXcml0YWJsZVN0cmVhbSlcblxuRGljZXIucHJvdG90eXBlLmVtaXQgPSBmdW5jdGlvbiAoZXYpIHtcbiAgaWYgKGV2ID09PSAnZmluaXNoJyAmJiAhdGhpcy5fcmVhbEZpbmlzaCkge1xuICAgIGlmICghdGhpcy5fZmluaXNoZWQpIHtcbiAgICAgIGNvbnN0IHNlbGYgPSB0aGlzXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgc2VsZi5lbWl0KCdlcnJvcicsIG5ldyBFcnJvcignVW5leHBlY3RlZCBlbmQgb2YgbXVsdGlwYXJ0IGRhdGEnKSlcbiAgICAgICAgaWYgKHNlbGYuX3BhcnQgJiYgIXNlbGYuX2lnbm9yZURhdGEpIHtcbiAgICAgICAgICBjb25zdCB0eXBlID0gKHNlbGYuX2lzUHJlYW1ibGUgPyAnUHJlYW1ibGUnIDogJ1BhcnQnKVxuICAgICAgICAgIHNlbGYuX3BhcnQuZW1pdCgnZXJyb3InLCBuZXcgRXJyb3IodHlwZSArICcgdGVybWluYXRlZCBlYXJseSBkdWUgdG8gdW5leHBlY3RlZCBlbmQgb2YgbXVsdGlwYXJ0IGRhdGEnKSlcbiAgICAgICAgICBzZWxmLl9wYXJ0LnB1c2gobnVsbClcbiAgICAgICAgICBwcm9jZXNzLm5leHRUaWNrKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSB0cnVlXG4gICAgICAgICAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpXG4gICAgICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gZmFsc2VcbiAgICAgICAgICB9KVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG4gICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSB0cnVlXG4gICAgICAgIHNlbGYuZW1pdCgnZmluaXNoJylcbiAgICAgICAgc2VsZi5fcmVhbEZpbmlzaCA9IGZhbHNlXG4gICAgICB9KVxuICAgIH1cbiAgfSBlbHNlIHsgV3JpdGFibGVTdHJlYW0ucHJvdG90eXBlLmVtaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKSB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5fd3JpdGUgPSBmdW5jdGlvbiAoZGF0YSwgZW5jb2RpbmcsIGNiKSB7XG4gIC8vIGlnbm9yZSB1bmV4cGVjdGVkIGRhdGEgKGUuZy4gZXh0cmEgdHJhaWxlciBkYXRhIGFmdGVyIGZpbmlzaGVkKVxuICBpZiAoIXRoaXMuX2hwYXJzZXIgJiYgIXRoaXMuX2JwYXJzZXIpIHsgcmV0dXJuIGNiKCkgfVxuXG4gIGlmICh0aGlzLl9oZWFkZXJGaXJzdCAmJiB0aGlzLl9pc1ByZWFtYmxlKSB7XG4gICAgaWYgKCF0aGlzLl9wYXJ0KSB7XG4gICAgICB0aGlzLl9wYXJ0ID0gbmV3IFBhcnRTdHJlYW0odGhpcy5fcGFydE9wdHMpXG4gICAgICBpZiAodGhpcy5saXN0ZW5lckNvdW50KCdwcmVhbWJsZScpICE9PSAwKSB7IHRoaXMuZW1pdCgncHJlYW1ibGUnLCB0aGlzLl9wYXJ0KSB9IGVsc2UgeyB0aGlzLl9pZ25vcmUoKSB9XG4gICAgfVxuICAgIGNvbnN0IHIgPSB0aGlzLl9ocGFyc2VyLnB1c2goZGF0YSlcbiAgICBpZiAoIXRoaXMuX2luSGVhZGVyICYmIHIgIT09IHVuZGVmaW5lZCAmJiByIDwgZGF0YS5sZW5ndGgpIHsgZGF0YSA9IGRhdGEuc2xpY2UocikgfSBlbHNlIHsgcmV0dXJuIGNiKCkgfVxuICB9XG5cbiAgLy8gYWxsb3dzIGZvciBcImVhc2llclwiIHRlc3RpbmdcbiAgaWYgKHRoaXMuX2ZpcnN0V3JpdGUpIHtcbiAgICB0aGlzLl9icGFyc2VyLnB1c2goQl9DUkxGKVxuICAgIHRoaXMuX2ZpcnN0V3JpdGUgPSBmYWxzZVxuICB9XG5cbiAgdGhpcy5fYnBhcnNlci5wdXNoKGRhdGEpXG5cbiAgaWYgKHRoaXMuX3BhdXNlKSB7IHRoaXMuX2NiID0gY2IgfSBlbHNlIHsgY2IoKSB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5yZXNldCA9IGZ1bmN0aW9uICgpIHtcbiAgdGhpcy5fcGFydCA9IHVuZGVmaW5lZFxuICB0aGlzLl9icGFyc2VyID0gdW5kZWZpbmVkXG4gIHRoaXMuX2hwYXJzZXIgPSB1bmRlZmluZWRcbn1cblxuRGljZXIucHJvdG90eXBlLnNldEJvdW5kYXJ5ID0gZnVuY3Rpb24gKGJvdW5kYXJ5KSB7XG4gIGNvbnN0IHNlbGYgPSB0aGlzXG4gIHRoaXMuX2JwYXJzZXIgPSBuZXcgU3RyZWFtU2VhcmNoKCdcXHJcXG4tLScgKyBib3VuZGFyeSlcbiAgdGhpcy5fYnBhcnNlci5vbignaW5mbycsIGZ1bmN0aW9uIChpc01hdGNoLCBkYXRhLCBzdGFydCwgZW5kKSB7XG4gICAgc2VsZi5fb25pbmZvKGlzTWF0Y2gsIGRhdGEsIHN0YXJ0LCBlbmQpXG4gIH0pXG59XG5cbkRpY2VyLnByb3RvdHlwZS5faWdub3JlID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5fcGFydCAmJiAhdGhpcy5faWdub3JlRGF0YSkge1xuICAgIHRoaXMuX2lnbm9yZURhdGEgPSB0cnVlXG4gICAgdGhpcy5fcGFydC5vbignZXJyb3InLCBFTVBUWV9GTilcbiAgICAvLyB3ZSBtdXN0IHBlcmZvcm0gc29tZSBraW5kIG9mIHJlYWQgb24gdGhlIHN0cmVhbSBldmVuIHRob3VnaCB3ZSBhcmVcbiAgICAvLyBpZ25vcmluZyB0aGUgZGF0YSwgb3RoZXJ3aXNlIG5vZGUncyBSZWFkYWJsZSBzdHJlYW0gd2lsbCBub3QgZW1pdCAnZW5kJ1xuICAgIC8vIGFmdGVyIHB1c2hpbmcgbnVsbCB0byB0aGUgc3RyZWFtXG4gICAgdGhpcy5fcGFydC5yZXN1bWUoKVxuICB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5fb25pbmZvID0gZnVuY3Rpb24gKGlzTWF0Y2gsIGRhdGEsIHN0YXJ0LCBlbmQpIHtcbiAgbGV0IGJ1ZjsgY29uc3Qgc2VsZiA9IHRoaXM7IGxldCBpID0gMDsgbGV0IHI7IGxldCBzaG91bGRXcml0ZU1vcmUgPSB0cnVlXG5cbiAgaWYgKCF0aGlzLl9wYXJ0ICYmIHRoaXMuX2p1c3RNYXRjaGVkICYmIGRhdGEpIHtcbiAgICB3aGlsZSAodGhpcy5fZGFzaGVzIDwgMiAmJiAoc3RhcnQgKyBpKSA8IGVuZCkge1xuICAgICAgaWYgKGRhdGFbc3RhcnQgKyBpXSA9PT0gREFTSCkge1xuICAgICAgICArK2lcbiAgICAgICAgKyt0aGlzLl9kYXNoZXNcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmICh0aGlzLl9kYXNoZXMpIHsgYnVmID0gQl9PTkVEQVNIIH1cbiAgICAgICAgdGhpcy5fZGFzaGVzID0gMFxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5fZGFzaGVzID09PSAyKSB7XG4gICAgICBpZiAoKHN0YXJ0ICsgaSkgPCBlbmQgJiYgdGhpcy5saXN0ZW5lckNvdW50KCd0cmFpbGVyJykgIT09IDApIHsgdGhpcy5lbWl0KCd0cmFpbGVyJywgZGF0YS5zbGljZShzdGFydCArIGksIGVuZCkpIH1cbiAgICAgIHRoaXMucmVzZXQoKVxuICAgICAgdGhpcy5fZmluaXNoZWQgPSB0cnVlXG4gICAgICAvLyBubyBtb3JlIHBhcnRzIHdpbGwgYmUgYWRkZWRcbiAgICAgIGlmIChzZWxmLl9wYXJ0cyA9PT0gMCkge1xuICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gdHJ1ZVxuICAgICAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpXG4gICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSBmYWxzZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodGhpcy5fZGFzaGVzKSB7IHJldHVybiB9XG4gIH1cbiAgaWYgKHRoaXMuX2p1c3RNYXRjaGVkKSB7IHRoaXMuX2p1c3RNYXRjaGVkID0gZmFsc2UgfVxuICBpZiAoIXRoaXMuX3BhcnQpIHtcbiAgICB0aGlzLl9wYXJ0ID0gbmV3IFBhcnRTdHJlYW0odGhpcy5fcGFydE9wdHMpXG4gICAgdGhpcy5fcGFydC5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gICAgICBzZWxmLl91bnBhdXNlKClcbiAgICB9XG4gICAgaWYgKHRoaXMuX2lzUHJlYW1ibGUgJiYgdGhpcy5saXN0ZW5lckNvdW50KCdwcmVhbWJsZScpICE9PSAwKSB7XG4gICAgICB0aGlzLmVtaXQoJ3ByZWFtYmxlJywgdGhpcy5fcGFydClcbiAgICB9IGVsc2UgaWYgKHRoaXMuX2lzUHJlYW1ibGUgIT09IHRydWUgJiYgdGhpcy5saXN0ZW5lckNvdW50KCdwYXJ0JykgIT09IDApIHtcbiAgICAgIHRoaXMuZW1pdCgncGFydCcsIHRoaXMuX3BhcnQpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2lnbm9yZSgpXG4gICAgfVxuICAgIGlmICghdGhpcy5faXNQcmVhbWJsZSkgeyB0aGlzLl9pbkhlYWRlciA9IHRydWUgfVxuICB9XG4gIGlmIChkYXRhICYmIHN0YXJ0IDwgZW5kICYmICF0aGlzLl9pZ25vcmVEYXRhKSB7XG4gICAgaWYgKHRoaXMuX2lzUHJlYW1ibGUgfHwgIXRoaXMuX2luSGVhZGVyKSB7XG4gICAgICBpZiAoYnVmKSB7IHNob3VsZFdyaXRlTW9yZSA9IHRoaXMuX3BhcnQucHVzaChidWYpIH1cbiAgICAgIHNob3VsZFdyaXRlTW9yZSA9IHRoaXMuX3BhcnQucHVzaChkYXRhLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICAgICAgaWYgKCFzaG91bGRXcml0ZU1vcmUpIHsgdGhpcy5fcGF1c2UgPSB0cnVlIH1cbiAgICB9IGVsc2UgaWYgKCF0aGlzLl9pc1ByZWFtYmxlICYmIHRoaXMuX2luSGVhZGVyKSB7XG4gICAgICBpZiAoYnVmKSB7IHRoaXMuX2hwYXJzZXIucHVzaChidWYpIH1cbiAgICAgIHIgPSB0aGlzLl9ocGFyc2VyLnB1c2goZGF0YS5zbGljZShzdGFydCwgZW5kKSlcbiAgICAgIGlmICghdGhpcy5faW5IZWFkZXIgJiYgciAhPT0gdW5kZWZpbmVkICYmIHIgPCBlbmQpIHsgdGhpcy5fb25pbmZvKGZhbHNlLCBkYXRhLCBzdGFydCArIHIsIGVuZCkgfVxuICAgIH1cbiAgfVxuICBpZiAoaXNNYXRjaCkge1xuICAgIHRoaXMuX2hwYXJzZXIucmVzZXQoKVxuICAgIGlmICh0aGlzLl9pc1ByZWFtYmxlKSB7IHRoaXMuX2lzUHJlYW1ibGUgPSBmYWxzZSB9IGVsc2Uge1xuICAgICAgaWYgKHN0YXJ0ICE9PSBlbmQpIHtcbiAgICAgICAgKyt0aGlzLl9wYXJ0c1xuICAgICAgICB0aGlzLl9wYXJ0Lm9uKCdlbmQnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKC0tc2VsZi5fcGFydHMgPT09IDApIHtcbiAgICAgICAgICAgIGlmIChzZWxmLl9maW5pc2hlZCkge1xuICAgICAgICAgICAgICBzZWxmLl9yZWFsRmluaXNoID0gdHJ1ZVxuICAgICAgICAgICAgICBzZWxmLmVtaXQoJ2ZpbmlzaCcpXG4gICAgICAgICAgICAgIHNlbGYuX3JlYWxGaW5pc2ggPSBmYWxzZVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgc2VsZi5fdW5wYXVzZSgpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLl9wYXJ0LnB1c2gobnVsbClcbiAgICB0aGlzLl9wYXJ0ID0gdW5kZWZpbmVkXG4gICAgdGhpcy5faWdub3JlRGF0YSA9IGZhbHNlXG4gICAgdGhpcy5fanVzdE1hdGNoZWQgPSB0cnVlXG4gICAgdGhpcy5fZGFzaGVzID0gMFxuICB9XG59XG5cbkRpY2VyLnByb3RvdHlwZS5fdW5wYXVzZSA9IGZ1bmN0aW9uICgpIHtcbiAgaWYgKCF0aGlzLl9wYXVzZSkgeyByZXR1cm4gfVxuXG4gIHRoaXMuX3BhdXNlID0gZmFsc2VcbiAgaWYgKHRoaXMuX2NiKSB7XG4gICAgY29uc3QgY2IgPSB0aGlzLl9jYlxuICAgIHRoaXMuX2NiID0gdW5kZWZpbmVkXG4gICAgY2IoKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gRGljZXJcbiIsICIndXNlIHN0cmljdCdcblxuLy8gTm9kZSBoYXMgYWx3YXlzIHV0Zi04XG5jb25zdCB1dGY4RGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigndXRmLTgnKVxuY29uc3QgdGV4dERlY29kZXJzID0gbmV3IE1hcChbXG4gIFsndXRmLTgnLCB1dGY4RGVjb2Rlcl0sXG4gIFsndXRmOCcsIHV0ZjhEZWNvZGVyXVxuXSlcblxuZnVuY3Rpb24gZ2V0RGVjb2RlciAoY2hhcnNldCkge1xuICBsZXQgbGNcbiAgd2hpbGUgKHRydWUpIHtcbiAgICBzd2l0Y2ggKGNoYXJzZXQpIHtcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgICByZXR1cm4gZGVjb2RlcnMudXRmOFxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2FzY2lpJzogLy8gVE9ETzogTWFrZSB0aGVzZSBhIHNlcGFyYXRlLCBzdHJpY3QgZGVjb2Rlcj9cbiAgICAgIGNhc2UgJ3VzLWFzY2lpJzpcbiAgICAgIGNhc2UgJ2lzby04ODU5LTEnOlxuICAgICAgY2FzZSAnaXNvODg1OS0xJzpcbiAgICAgIGNhc2UgJ2lzbzg4NTkxJzpcbiAgICAgIGNhc2UgJ2lzb184ODU5LTEnOlxuICAgICAgY2FzZSAnd2luZG93cy0xMjUyJzpcbiAgICAgIGNhc2UgJ2lzb184ODU5LTE6MTk4Nyc6XG4gICAgICBjYXNlICdjcDEyNTInOlxuICAgICAgY2FzZSAneC1jcDEyNTInOlxuICAgICAgICByZXR1cm4gZGVjb2RlcnMubGF0aW4xXG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgICByZXR1cm4gZGVjb2RlcnMudXRmMTZsZVxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGRlY29kZXJzLmJhc2U2NFxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxjID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBsYyA9IHRydWVcbiAgICAgICAgICBjaGFyc2V0ID0gY2hhcnNldC50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZGVjb2RlcnMub3RoZXIuYmluZChjaGFyc2V0KVxuICAgIH1cbiAgfVxufVxuXG5jb25zdCBkZWNvZGVycyA9IHtcbiAgdXRmODogKGRhdGEsIHNvdXJjZUVuY29kaW5nKSA9PiB7XG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJykge1xuICAgICAgZGF0YSA9IEJ1ZmZlci5mcm9tKGRhdGEsIHNvdXJjZUVuY29kaW5nKVxuICAgIH1cbiAgICByZXR1cm4gZGF0YS51dGY4U2xpY2UoMCwgZGF0YS5sZW5ndGgpXG4gIH0sXG5cbiAgbGF0aW4xOiAoZGF0YSwgc291cmNlRW5jb2RpbmcpID0+IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gZGF0YVxuICAgIH1cbiAgICByZXR1cm4gZGF0YS5sYXRpbjFTbGljZSgwLCBkYXRhLmxlbmd0aClcbiAgfSxcblxuICB1dGYxNmxlOiAoZGF0YSwgc291cmNlRW5jb2RpbmcpID0+IHtcbiAgICBpZiAoZGF0YS5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAnJ1xuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICBkYXRhID0gQnVmZmVyLmZyb20oZGF0YSwgc291cmNlRW5jb2RpbmcpXG4gICAgfVxuICAgIHJldHVybiBkYXRhLnVjczJTbGljZSgwLCBkYXRhLmxlbmd0aClcbiAgfSxcblxuICBiYXNlNjQ6IChkYXRhLCBzb3VyY2VFbmNvZGluZykgPT4ge1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCBzb3VyY2VFbmNvZGluZylcbiAgICB9XG4gICAgcmV0dXJuIGRhdGEuYmFzZTY0U2xpY2UoMCwgZGF0YS5sZW5ndGgpXG4gIH0sXG5cbiAgb3RoZXI6IChkYXRhLCBzb3VyY2VFbmNvZGluZykgPT4ge1xuICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZGF0YSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGRhdGEgPSBCdWZmZXIuZnJvbShkYXRhLCBzb3VyY2VFbmNvZGluZylcbiAgICB9XG5cbiAgICBpZiAodGV4dERlY29kZXJzLmhhcyh0aGlzLnRvU3RyaW5nKCkpKSB7XG4gICAgICB0cnkge1xuICAgICAgICByZXR1cm4gdGV4dERlY29kZXJzLmdldCh0aGlzKS5kZWNvZGUoZGF0YSlcbiAgICAgIH0gY2F0Y2gge31cbiAgICB9XG4gICAgcmV0dXJuIHR5cGVvZiBkYXRhID09PSAnc3RyaW5nJ1xuICAgICAgPyBkYXRhXG4gICAgICA6IGRhdGEudG9TdHJpbmcoKVxuICB9XG59XG5cbmZ1bmN0aW9uIGRlY29kZVRleHQgKHRleHQsIHNvdXJjZUVuY29kaW5nLCBkZXN0RW5jb2RpbmcpIHtcbiAgaWYgKHRleHQpIHtcbiAgICByZXR1cm4gZ2V0RGVjb2RlcihkZXN0RW5jb2RpbmcpKHRleHQsIHNvdXJjZUVuY29kaW5nKVxuICB9XG4gIHJldHVybiB0ZXh0XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZGVjb2RlVGV4dFxuIiwgIi8qIGVzbGludC1kaXNhYmxlIG9iamVjdC1wcm9wZXJ0eS1uZXdsaW5lICovXG4ndXNlIHN0cmljdCdcblxuY29uc3QgZGVjb2RlVGV4dCA9IHJlcXVpcmUoJy4vZGVjb2RlVGV4dCcpXG5cbmNvbnN0IFJFX0VOQ09ERUQgPSAvJVthLWZBLUYwLTldW2EtZkEtRjAtOV0vZ1xuXG5jb25zdCBFbmNvZGVkTG9va3VwID0ge1xuICAnJTAwJzogJ1xceDAwJywgJyUwMSc6ICdcXHgwMScsICclMDInOiAnXFx4MDInLCAnJTAzJzogJ1xceDAzJywgJyUwNCc6ICdcXHgwNCcsXG4gICclMDUnOiAnXFx4MDUnLCAnJTA2JzogJ1xceDA2JywgJyUwNyc6ICdcXHgwNycsICclMDgnOiAnXFx4MDgnLCAnJTA5JzogJ1xceDA5JyxcbiAgJyUwYSc6ICdcXHgwYScsICclMEEnOiAnXFx4MGEnLCAnJTBiJzogJ1xceDBiJywgJyUwQic6ICdcXHgwYicsICclMGMnOiAnXFx4MGMnLFxuICAnJTBDJzogJ1xceDBjJywgJyUwZCc6ICdcXHgwZCcsICclMEQnOiAnXFx4MGQnLCAnJTBlJzogJ1xceDBlJywgJyUwRSc6ICdcXHgwZScsXG4gICclMGYnOiAnXFx4MGYnLCAnJTBGJzogJ1xceDBmJywgJyUxMCc6ICdcXHgxMCcsICclMTEnOiAnXFx4MTEnLCAnJTEyJzogJ1xceDEyJyxcbiAgJyUxMyc6ICdcXHgxMycsICclMTQnOiAnXFx4MTQnLCAnJTE1JzogJ1xceDE1JywgJyUxNic6ICdcXHgxNicsICclMTcnOiAnXFx4MTcnLFxuICAnJTE4JzogJ1xceDE4JywgJyUxOSc6ICdcXHgxOScsICclMWEnOiAnXFx4MWEnLCAnJTFBJzogJ1xceDFhJywgJyUxYic6ICdcXHgxYicsXG4gICclMUInOiAnXFx4MWInLCAnJTFjJzogJ1xceDFjJywgJyUxQyc6ICdcXHgxYycsICclMWQnOiAnXFx4MWQnLCAnJTFEJzogJ1xceDFkJyxcbiAgJyUxZSc6ICdcXHgxZScsICclMUUnOiAnXFx4MWUnLCAnJTFmJzogJ1xceDFmJywgJyUxRic6ICdcXHgxZicsICclMjAnOiAnXFx4MjAnLFxuICAnJTIxJzogJ1xceDIxJywgJyUyMic6ICdcXHgyMicsICclMjMnOiAnXFx4MjMnLCAnJTI0JzogJ1xceDI0JywgJyUyNSc6ICdcXHgyNScsXG4gICclMjYnOiAnXFx4MjYnLCAnJTI3JzogJ1xceDI3JywgJyUyOCc6ICdcXHgyOCcsICclMjknOiAnXFx4MjknLCAnJTJhJzogJ1xceDJhJyxcbiAgJyUyQSc6ICdcXHgyYScsICclMmInOiAnXFx4MmInLCAnJTJCJzogJ1xceDJiJywgJyUyYyc6ICdcXHgyYycsICclMkMnOiAnXFx4MmMnLFxuICAnJTJkJzogJ1xceDJkJywgJyUyRCc6ICdcXHgyZCcsICclMmUnOiAnXFx4MmUnLCAnJTJFJzogJ1xceDJlJywgJyUyZic6ICdcXHgyZicsXG4gICclMkYnOiAnXFx4MmYnLCAnJTMwJzogJ1xceDMwJywgJyUzMSc6ICdcXHgzMScsICclMzInOiAnXFx4MzInLCAnJTMzJzogJ1xceDMzJyxcbiAgJyUzNCc6ICdcXHgzNCcsICclMzUnOiAnXFx4MzUnLCAnJTM2JzogJ1xceDM2JywgJyUzNyc6ICdcXHgzNycsICclMzgnOiAnXFx4MzgnLFxuICAnJTM5JzogJ1xceDM5JywgJyUzYSc6ICdcXHgzYScsICclM0EnOiAnXFx4M2EnLCAnJTNiJzogJ1xceDNiJywgJyUzQic6ICdcXHgzYicsXG4gICclM2MnOiAnXFx4M2MnLCAnJTNDJzogJ1xceDNjJywgJyUzZCc6ICdcXHgzZCcsICclM0QnOiAnXFx4M2QnLCAnJTNlJzogJ1xceDNlJyxcbiAgJyUzRSc6ICdcXHgzZScsICclM2YnOiAnXFx4M2YnLCAnJTNGJzogJ1xceDNmJywgJyU0MCc6ICdcXHg0MCcsICclNDEnOiAnXFx4NDEnLFxuICAnJTQyJzogJ1xceDQyJywgJyU0Myc6ICdcXHg0MycsICclNDQnOiAnXFx4NDQnLCAnJTQ1JzogJ1xceDQ1JywgJyU0Nic6ICdcXHg0NicsXG4gICclNDcnOiAnXFx4NDcnLCAnJTQ4JzogJ1xceDQ4JywgJyU0OSc6ICdcXHg0OScsICclNGEnOiAnXFx4NGEnLCAnJTRBJzogJ1xceDRhJyxcbiAgJyU0Yic6ICdcXHg0YicsICclNEInOiAnXFx4NGInLCAnJTRjJzogJ1xceDRjJywgJyU0Qyc6ICdcXHg0YycsICclNGQnOiAnXFx4NGQnLFxuICAnJTREJzogJ1xceDRkJywgJyU0ZSc6ICdcXHg0ZScsICclNEUnOiAnXFx4NGUnLCAnJTRmJzogJ1xceDRmJywgJyU0Ric6ICdcXHg0ZicsXG4gICclNTAnOiAnXFx4NTAnLCAnJTUxJzogJ1xceDUxJywgJyU1Mic6ICdcXHg1MicsICclNTMnOiAnXFx4NTMnLCAnJTU0JzogJ1xceDU0JyxcbiAgJyU1NSc6ICdcXHg1NScsICclNTYnOiAnXFx4NTYnLCAnJTU3JzogJ1xceDU3JywgJyU1OCc6ICdcXHg1OCcsICclNTknOiAnXFx4NTknLFxuICAnJTVhJzogJ1xceDVhJywgJyU1QSc6ICdcXHg1YScsICclNWInOiAnXFx4NWInLCAnJTVCJzogJ1xceDViJywgJyU1Yyc6ICdcXHg1YycsXG4gICclNUMnOiAnXFx4NWMnLCAnJTVkJzogJ1xceDVkJywgJyU1RCc6ICdcXHg1ZCcsICclNWUnOiAnXFx4NWUnLCAnJTVFJzogJ1xceDVlJyxcbiAgJyU1Zic6ICdcXHg1ZicsICclNUYnOiAnXFx4NWYnLCAnJTYwJzogJ1xceDYwJywgJyU2MSc6ICdcXHg2MScsICclNjInOiAnXFx4NjInLFxuICAnJTYzJzogJ1xceDYzJywgJyU2NCc6ICdcXHg2NCcsICclNjUnOiAnXFx4NjUnLCAnJTY2JzogJ1xceDY2JywgJyU2Nyc6ICdcXHg2NycsXG4gICclNjgnOiAnXFx4NjgnLCAnJTY5JzogJ1xceDY5JywgJyU2YSc6ICdcXHg2YScsICclNkEnOiAnXFx4NmEnLCAnJTZiJzogJ1xceDZiJyxcbiAgJyU2Qic6ICdcXHg2YicsICclNmMnOiAnXFx4NmMnLCAnJTZDJzogJ1xceDZjJywgJyU2ZCc6ICdcXHg2ZCcsICclNkQnOiAnXFx4NmQnLFxuICAnJTZlJzogJ1xceDZlJywgJyU2RSc6ICdcXHg2ZScsICclNmYnOiAnXFx4NmYnLCAnJTZGJzogJ1xceDZmJywgJyU3MCc6ICdcXHg3MCcsXG4gICclNzEnOiAnXFx4NzEnLCAnJTcyJzogJ1xceDcyJywgJyU3Myc6ICdcXHg3MycsICclNzQnOiAnXFx4NzQnLCAnJTc1JzogJ1xceDc1JyxcbiAgJyU3Nic6ICdcXHg3NicsICclNzcnOiAnXFx4NzcnLCAnJTc4JzogJ1xceDc4JywgJyU3OSc6ICdcXHg3OScsICclN2EnOiAnXFx4N2EnLFxuICAnJTdBJzogJ1xceDdhJywgJyU3Yic6ICdcXHg3YicsICclN0InOiAnXFx4N2InLCAnJTdjJzogJ1xceDdjJywgJyU3Qyc6ICdcXHg3YycsXG4gICclN2QnOiAnXFx4N2QnLCAnJTdEJzogJ1xceDdkJywgJyU3ZSc6ICdcXHg3ZScsICclN0UnOiAnXFx4N2UnLCAnJTdmJzogJ1xceDdmJyxcbiAgJyU3Ric6ICdcXHg3ZicsICclODAnOiAnXFx4ODAnLCAnJTgxJzogJ1xceDgxJywgJyU4Mic6ICdcXHg4MicsICclODMnOiAnXFx4ODMnLFxuICAnJTg0JzogJ1xceDg0JywgJyU4NSc6ICdcXHg4NScsICclODYnOiAnXFx4ODYnLCAnJTg3JzogJ1xceDg3JywgJyU4OCc6ICdcXHg4OCcsXG4gICclODknOiAnXFx4ODknLCAnJThhJzogJ1xceDhhJywgJyU4QSc6ICdcXHg4YScsICclOGInOiAnXFx4OGInLCAnJThCJzogJ1xceDhiJyxcbiAgJyU4Yyc6ICdcXHg4YycsICclOEMnOiAnXFx4OGMnLCAnJThkJzogJ1xceDhkJywgJyU4RCc6ICdcXHg4ZCcsICclOGUnOiAnXFx4OGUnLFxuICAnJThFJzogJ1xceDhlJywgJyU4Zic6ICdcXHg4ZicsICclOEYnOiAnXFx4OGYnLCAnJTkwJzogJ1xceDkwJywgJyU5MSc6ICdcXHg5MScsXG4gICclOTInOiAnXFx4OTInLCAnJTkzJzogJ1xceDkzJywgJyU5NCc6ICdcXHg5NCcsICclOTUnOiAnXFx4OTUnLCAnJTk2JzogJ1xceDk2JyxcbiAgJyU5Nyc6ICdcXHg5NycsICclOTgnOiAnXFx4OTgnLCAnJTk5JzogJ1xceDk5JywgJyU5YSc6ICdcXHg5YScsICclOUEnOiAnXFx4OWEnLFxuICAnJTliJzogJ1xceDliJywgJyU5Qic6ICdcXHg5YicsICclOWMnOiAnXFx4OWMnLCAnJTlDJzogJ1xceDljJywgJyU5ZCc6ICdcXHg5ZCcsXG4gICclOUQnOiAnXFx4OWQnLCAnJTllJzogJ1xceDllJywgJyU5RSc6ICdcXHg5ZScsICclOWYnOiAnXFx4OWYnLCAnJTlGJzogJ1xceDlmJyxcbiAgJyVhMCc6ICdcXHhhMCcsICclQTAnOiAnXFx4YTAnLCAnJWExJzogJ1xceGExJywgJyVBMSc6ICdcXHhhMScsICclYTInOiAnXFx4YTInLFxuICAnJUEyJzogJ1xceGEyJywgJyVhMyc6ICdcXHhhMycsICclQTMnOiAnXFx4YTMnLCAnJWE0JzogJ1xceGE0JywgJyVBNCc6ICdcXHhhNCcsXG4gICclYTUnOiAnXFx4YTUnLCAnJUE1JzogJ1xceGE1JywgJyVhNic6ICdcXHhhNicsICclQTYnOiAnXFx4YTYnLCAnJWE3JzogJ1xceGE3JyxcbiAgJyVBNyc6ICdcXHhhNycsICclYTgnOiAnXFx4YTgnLCAnJUE4JzogJ1xceGE4JywgJyVhOSc6ICdcXHhhOScsICclQTknOiAnXFx4YTknLFxuICAnJWFhJzogJ1xceGFhJywgJyVBYSc6ICdcXHhhYScsICclYUEnOiAnXFx4YWEnLCAnJUFBJzogJ1xceGFhJywgJyVhYic6ICdcXHhhYicsXG4gICclQWInOiAnXFx4YWInLCAnJWFCJzogJ1xceGFiJywgJyVBQic6ICdcXHhhYicsICclYWMnOiAnXFx4YWMnLCAnJUFjJzogJ1xceGFjJyxcbiAgJyVhQyc6ICdcXHhhYycsICclQUMnOiAnXFx4YWMnLCAnJWFkJzogJ1xceGFkJywgJyVBZCc6ICdcXHhhZCcsICclYUQnOiAnXFx4YWQnLFxuICAnJUFEJzogJ1xceGFkJywgJyVhZSc6ICdcXHhhZScsICclQWUnOiAnXFx4YWUnLCAnJWFFJzogJ1xceGFlJywgJyVBRSc6ICdcXHhhZScsXG4gICclYWYnOiAnXFx4YWYnLCAnJUFmJzogJ1xceGFmJywgJyVhRic6ICdcXHhhZicsICclQUYnOiAnXFx4YWYnLCAnJWIwJzogJ1xceGIwJyxcbiAgJyVCMCc6ICdcXHhiMCcsICclYjEnOiAnXFx4YjEnLCAnJUIxJzogJ1xceGIxJywgJyViMic6ICdcXHhiMicsICclQjInOiAnXFx4YjInLFxuICAnJWIzJzogJ1xceGIzJywgJyVCMyc6ICdcXHhiMycsICclYjQnOiAnXFx4YjQnLCAnJUI0JzogJ1xceGI0JywgJyViNSc6ICdcXHhiNScsXG4gICclQjUnOiAnXFx4YjUnLCAnJWI2JzogJ1xceGI2JywgJyVCNic6ICdcXHhiNicsICclYjcnOiAnXFx4YjcnLCAnJUI3JzogJ1xceGI3JyxcbiAgJyViOCc6ICdcXHhiOCcsICclQjgnOiAnXFx4YjgnLCAnJWI5JzogJ1xceGI5JywgJyVCOSc6ICdcXHhiOScsICclYmEnOiAnXFx4YmEnLFxuICAnJUJhJzogJ1xceGJhJywgJyViQSc6ICdcXHhiYScsICclQkEnOiAnXFx4YmEnLCAnJWJiJzogJ1xceGJiJywgJyVCYic6ICdcXHhiYicsXG4gICclYkInOiAnXFx4YmInLCAnJUJCJzogJ1xceGJiJywgJyViYyc6ICdcXHhiYycsICclQmMnOiAnXFx4YmMnLCAnJWJDJzogJ1xceGJjJyxcbiAgJyVCQyc6ICdcXHhiYycsICclYmQnOiAnXFx4YmQnLCAnJUJkJzogJ1xceGJkJywgJyViRCc6ICdcXHhiZCcsICclQkQnOiAnXFx4YmQnLFxuICAnJWJlJzogJ1xceGJlJywgJyVCZSc6ICdcXHhiZScsICclYkUnOiAnXFx4YmUnLCAnJUJFJzogJ1xceGJlJywgJyViZic6ICdcXHhiZicsXG4gICclQmYnOiAnXFx4YmYnLCAnJWJGJzogJ1xceGJmJywgJyVCRic6ICdcXHhiZicsICclYzAnOiAnXFx4YzAnLCAnJUMwJzogJ1xceGMwJyxcbiAgJyVjMSc6ICdcXHhjMScsICclQzEnOiAnXFx4YzEnLCAnJWMyJzogJ1xceGMyJywgJyVDMic6ICdcXHhjMicsICclYzMnOiAnXFx4YzMnLFxuICAnJUMzJzogJ1xceGMzJywgJyVjNCc6ICdcXHhjNCcsICclQzQnOiAnXFx4YzQnLCAnJWM1JzogJ1xceGM1JywgJyVDNSc6ICdcXHhjNScsXG4gICclYzYnOiAnXFx4YzYnLCAnJUM2JzogJ1xceGM2JywgJyVjNyc6ICdcXHhjNycsICclQzcnOiAnXFx4YzcnLCAnJWM4JzogJ1xceGM4JyxcbiAgJyVDOCc6ICdcXHhjOCcsICclYzknOiAnXFx4YzknLCAnJUM5JzogJ1xceGM5JywgJyVjYSc6ICdcXHhjYScsICclQ2EnOiAnXFx4Y2EnLFxuICAnJWNBJzogJ1xceGNhJywgJyVDQSc6ICdcXHhjYScsICclY2InOiAnXFx4Y2InLCAnJUNiJzogJ1xceGNiJywgJyVjQic6ICdcXHhjYicsXG4gICclQ0InOiAnXFx4Y2InLCAnJWNjJzogJ1xceGNjJywgJyVDYyc6ICdcXHhjYycsICclY0MnOiAnXFx4Y2MnLCAnJUNDJzogJ1xceGNjJyxcbiAgJyVjZCc6ICdcXHhjZCcsICclQ2QnOiAnXFx4Y2QnLCAnJWNEJzogJ1xceGNkJywgJyVDRCc6ICdcXHhjZCcsICclY2UnOiAnXFx4Y2UnLFxuICAnJUNlJzogJ1xceGNlJywgJyVjRSc6ICdcXHhjZScsICclQ0UnOiAnXFx4Y2UnLCAnJWNmJzogJ1xceGNmJywgJyVDZic6ICdcXHhjZicsXG4gICclY0YnOiAnXFx4Y2YnLCAnJUNGJzogJ1xceGNmJywgJyVkMCc6ICdcXHhkMCcsICclRDAnOiAnXFx4ZDAnLCAnJWQxJzogJ1xceGQxJyxcbiAgJyVEMSc6ICdcXHhkMScsICclZDInOiAnXFx4ZDInLCAnJUQyJzogJ1xceGQyJywgJyVkMyc6ICdcXHhkMycsICclRDMnOiAnXFx4ZDMnLFxuICAnJWQ0JzogJ1xceGQ0JywgJyVENCc6ICdcXHhkNCcsICclZDUnOiAnXFx4ZDUnLCAnJUQ1JzogJ1xceGQ1JywgJyVkNic6ICdcXHhkNicsXG4gICclRDYnOiAnXFx4ZDYnLCAnJWQ3JzogJ1xceGQ3JywgJyVENyc6ICdcXHhkNycsICclZDgnOiAnXFx4ZDgnLCAnJUQ4JzogJ1xceGQ4JyxcbiAgJyVkOSc6ICdcXHhkOScsICclRDknOiAnXFx4ZDknLCAnJWRhJzogJ1xceGRhJywgJyVEYSc6ICdcXHhkYScsICclZEEnOiAnXFx4ZGEnLFxuICAnJURBJzogJ1xceGRhJywgJyVkYic6ICdcXHhkYicsICclRGInOiAnXFx4ZGInLCAnJWRCJzogJ1xceGRiJywgJyVEQic6ICdcXHhkYicsXG4gICclZGMnOiAnXFx4ZGMnLCAnJURjJzogJ1xceGRjJywgJyVkQyc6ICdcXHhkYycsICclREMnOiAnXFx4ZGMnLCAnJWRkJzogJ1xceGRkJyxcbiAgJyVEZCc6ICdcXHhkZCcsICclZEQnOiAnXFx4ZGQnLCAnJUREJzogJ1xceGRkJywgJyVkZSc6ICdcXHhkZScsICclRGUnOiAnXFx4ZGUnLFxuICAnJWRFJzogJ1xceGRlJywgJyVERSc6ICdcXHhkZScsICclZGYnOiAnXFx4ZGYnLCAnJURmJzogJ1xceGRmJywgJyVkRic6ICdcXHhkZicsXG4gICclREYnOiAnXFx4ZGYnLCAnJWUwJzogJ1xceGUwJywgJyVFMCc6ICdcXHhlMCcsICclZTEnOiAnXFx4ZTEnLCAnJUUxJzogJ1xceGUxJyxcbiAgJyVlMic6ICdcXHhlMicsICclRTInOiAnXFx4ZTInLCAnJWUzJzogJ1xceGUzJywgJyVFMyc6ICdcXHhlMycsICclZTQnOiAnXFx4ZTQnLFxuICAnJUU0JzogJ1xceGU0JywgJyVlNSc6ICdcXHhlNScsICclRTUnOiAnXFx4ZTUnLCAnJWU2JzogJ1xceGU2JywgJyVFNic6ICdcXHhlNicsXG4gICclZTcnOiAnXFx4ZTcnLCAnJUU3JzogJ1xceGU3JywgJyVlOCc6ICdcXHhlOCcsICclRTgnOiAnXFx4ZTgnLCAnJWU5JzogJ1xceGU5JyxcbiAgJyVFOSc6ICdcXHhlOScsICclZWEnOiAnXFx4ZWEnLCAnJUVhJzogJ1xceGVhJywgJyVlQSc6ICdcXHhlYScsICclRUEnOiAnXFx4ZWEnLFxuICAnJWViJzogJ1xceGViJywgJyVFYic6ICdcXHhlYicsICclZUInOiAnXFx4ZWInLCAnJUVCJzogJ1xceGViJywgJyVlYyc6ICdcXHhlYycsXG4gICclRWMnOiAnXFx4ZWMnLCAnJWVDJzogJ1xceGVjJywgJyVFQyc6ICdcXHhlYycsICclZWQnOiAnXFx4ZWQnLCAnJUVkJzogJ1xceGVkJyxcbiAgJyVlRCc6ICdcXHhlZCcsICclRUQnOiAnXFx4ZWQnLCAnJWVlJzogJ1xceGVlJywgJyVFZSc6ICdcXHhlZScsICclZUUnOiAnXFx4ZWUnLFxuICAnJUVFJzogJ1xceGVlJywgJyVlZic6ICdcXHhlZicsICclRWYnOiAnXFx4ZWYnLCAnJWVGJzogJ1xceGVmJywgJyVFRic6ICdcXHhlZicsXG4gICclZjAnOiAnXFx4ZjAnLCAnJUYwJzogJ1xceGYwJywgJyVmMSc6ICdcXHhmMScsICclRjEnOiAnXFx4ZjEnLCAnJWYyJzogJ1xceGYyJyxcbiAgJyVGMic6ICdcXHhmMicsICclZjMnOiAnXFx4ZjMnLCAnJUYzJzogJ1xceGYzJywgJyVmNCc6ICdcXHhmNCcsICclRjQnOiAnXFx4ZjQnLFxuICAnJWY1JzogJ1xceGY1JywgJyVGNSc6ICdcXHhmNScsICclZjYnOiAnXFx4ZjYnLCAnJUY2JzogJ1xceGY2JywgJyVmNyc6ICdcXHhmNycsXG4gICclRjcnOiAnXFx4ZjcnLCAnJWY4JzogJ1xceGY4JywgJyVGOCc6ICdcXHhmOCcsICclZjknOiAnXFx4ZjknLCAnJUY5JzogJ1xceGY5JyxcbiAgJyVmYSc6ICdcXHhmYScsICclRmEnOiAnXFx4ZmEnLCAnJWZBJzogJ1xceGZhJywgJyVGQSc6ICdcXHhmYScsICclZmInOiAnXFx4ZmInLFxuICAnJUZiJzogJ1xceGZiJywgJyVmQic6ICdcXHhmYicsICclRkInOiAnXFx4ZmInLCAnJWZjJzogJ1xceGZjJywgJyVGYyc6ICdcXHhmYycsXG4gICclZkMnOiAnXFx4ZmMnLCAnJUZDJzogJ1xceGZjJywgJyVmZCc6ICdcXHhmZCcsICclRmQnOiAnXFx4ZmQnLCAnJWZEJzogJ1xceGZkJyxcbiAgJyVGRCc6ICdcXHhmZCcsICclZmUnOiAnXFx4ZmUnLCAnJUZlJzogJ1xceGZlJywgJyVmRSc6ICdcXHhmZScsICclRkUnOiAnXFx4ZmUnLFxuICAnJWZmJzogJ1xceGZmJywgJyVGZic6ICdcXHhmZicsICclZkYnOiAnXFx4ZmYnLCAnJUZGJzogJ1xceGZmJ1xufVxuXG5mdW5jdGlvbiBlbmNvZGVkUmVwbGFjZXIgKG1hdGNoKSB7XG4gIHJldHVybiBFbmNvZGVkTG9va3VwW21hdGNoXVxufVxuXG5jb25zdCBTVEFURV9LRVkgPSAwXG5jb25zdCBTVEFURV9WQUxVRSA9IDFcbmNvbnN0IFNUQVRFX0NIQVJTRVQgPSAyXG5jb25zdCBTVEFURV9MQU5HID0gM1xuXG5mdW5jdGlvbiBwYXJzZVBhcmFtcyAoc3RyKSB7XG4gIGNvbnN0IHJlcyA9IFtdXG4gIGxldCBzdGF0ZSA9IFNUQVRFX0tFWVxuICBsZXQgY2hhcnNldCA9ICcnXG4gIGxldCBpbnF1b3RlID0gZmFsc2VcbiAgbGV0IGVzY2FwaW5nID0gZmFsc2VcbiAgbGV0IHAgPSAwXG4gIGxldCB0bXAgPSAnJ1xuICBjb25zdCBsZW4gPSBzdHIubGVuZ3RoXG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47ICsraSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXZhclxuICAgIGNvbnN0IGNoYXIgPSBzdHJbaV1cbiAgICBpZiAoY2hhciA9PT0gJ1xcXFwnICYmIGlucXVvdGUpIHtcbiAgICAgIGlmIChlc2NhcGluZykgeyBlc2NhcGluZyA9IGZhbHNlIH0gZWxzZSB7XG4gICAgICAgIGVzY2FwaW5nID0gdHJ1ZVxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2hhciA9PT0gJ1wiJykge1xuICAgICAgaWYgKCFlc2NhcGluZykge1xuICAgICAgICBpZiAoaW5xdW90ZSkge1xuICAgICAgICAgIGlucXVvdGUgPSBmYWxzZVxuICAgICAgICAgIHN0YXRlID0gU1RBVEVfS0VZXG4gICAgICAgIH0gZWxzZSB7IGlucXVvdGUgPSB0cnVlIH1cbiAgICAgICAgY29udGludWVcbiAgICAgIH0gZWxzZSB7IGVzY2FwaW5nID0gZmFsc2UgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoZXNjYXBpbmcgJiYgaW5xdW90ZSkgeyB0bXAgKz0gJ1xcXFwnIH1cbiAgICAgIGVzY2FwaW5nID0gZmFsc2VcbiAgICAgIGlmICgoc3RhdGUgPT09IFNUQVRFX0NIQVJTRVQgfHwgc3RhdGUgPT09IFNUQVRFX0xBTkcpICYmIGNoYXIgPT09IFwiJ1wiKSB7XG4gICAgICAgIGlmIChzdGF0ZSA9PT0gU1RBVEVfQ0hBUlNFVCkge1xuICAgICAgICAgIHN0YXRlID0gU1RBVEVfTEFOR1xuICAgICAgICAgIGNoYXJzZXQgPSB0bXAuc3Vic3RyaW5nKDEpXG4gICAgICAgIH0gZWxzZSB7IHN0YXRlID0gU1RBVEVfVkFMVUUgfVxuICAgICAgICB0bXAgPSAnJ1xuICAgICAgICBjb250aW51ZVxuICAgICAgfSBlbHNlIGlmIChzdGF0ZSA9PT0gU1RBVEVfS0VZICYmXG4gICAgICAgIChjaGFyID09PSAnKicgfHwgY2hhciA9PT0gJz0nKSAmJlxuICAgICAgICByZXMubGVuZ3RoKSB7XG4gICAgICAgIHN0YXRlID0gY2hhciA9PT0gJyonXG4gICAgICAgICAgPyBTVEFURV9DSEFSU0VUXG4gICAgICAgICAgOiBTVEFURV9WQUxVRVxuICAgICAgICByZXNbcF0gPSBbdG1wLCB1bmRlZmluZWRdXG4gICAgICAgIHRtcCA9ICcnXG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9IGVsc2UgaWYgKCFpbnF1b3RlICYmIGNoYXIgPT09ICc7Jykge1xuICAgICAgICBzdGF0ZSA9IFNUQVRFX0tFWVxuICAgICAgICBpZiAoY2hhcnNldCkge1xuICAgICAgICAgIGlmICh0bXAubGVuZ3RoKSB7XG4gICAgICAgICAgICB0bXAgPSBkZWNvZGVUZXh0KHRtcC5yZXBsYWNlKFJFX0VOQ09ERUQsIGVuY29kZWRSZXBsYWNlciksXG4gICAgICAgICAgICAgICdiaW5hcnknLFxuICAgICAgICAgICAgICBjaGFyc2V0KVxuICAgICAgICAgIH1cbiAgICAgICAgICBjaGFyc2V0ID0gJydcbiAgICAgICAgfSBlbHNlIGlmICh0bXAubGVuZ3RoKSB7XG4gICAgICAgICAgdG1wID0gZGVjb2RlVGV4dCh0bXAsICdiaW5hcnknLCAndXRmOCcpXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJlc1twXSA9PT0gdW5kZWZpbmVkKSB7IHJlc1twXSA9IHRtcCB9IGVsc2UgeyByZXNbcF1bMV0gPSB0bXAgfVxuICAgICAgICB0bXAgPSAnJ1xuICAgICAgICArK3BcbiAgICAgICAgY29udGludWVcbiAgICAgIH0gZWxzZSBpZiAoIWlucXVvdGUgJiYgKGNoYXIgPT09ICcgJyB8fCBjaGFyID09PSAnXFx0JykpIHsgY29udGludWUgfVxuICAgIH1cbiAgICB0bXAgKz0gY2hhclxuICB9XG4gIGlmIChjaGFyc2V0ICYmIHRtcC5sZW5ndGgpIHtcbiAgICB0bXAgPSBkZWNvZGVUZXh0KHRtcC5yZXBsYWNlKFJFX0VOQ09ERUQsIGVuY29kZWRSZXBsYWNlciksXG4gICAgICAnYmluYXJ5JyxcbiAgICAgIGNoYXJzZXQpXG4gIH0gZWxzZSBpZiAodG1wKSB7XG4gICAgdG1wID0gZGVjb2RlVGV4dCh0bXAsICdiaW5hcnknLCAndXRmOCcpXG4gIH1cblxuICBpZiAocmVzW3BdID09PSB1bmRlZmluZWQpIHtcbiAgICBpZiAodG1wKSB7IHJlc1twXSA9IHRtcCB9XG4gIH0gZWxzZSB7IHJlc1twXVsxXSA9IHRtcCB9XG5cbiAgcmV0dXJuIHJlc1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHBhcnNlUGFyYW1zXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmFzZW5hbWUgKHBhdGgpIHtcbiAgaWYgKHR5cGVvZiBwYXRoICE9PSAnc3RyaW5nJykgeyByZXR1cm4gJycgfVxuICBmb3IgKHZhciBpID0gcGF0aC5sZW5ndGggLSAxOyBpID49IDA7IC0taSkgeyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXZhclxuICAgIHN3aXRjaCAocGF0aC5jaGFyQ29kZUF0KGkpKSB7XG4gICAgICBjYXNlIDB4MkY6IC8vICcvJ1xuICAgICAgY2FzZSAweDVDOiAvLyAnXFwnXG4gICAgICAgIHBhdGggPSBwYXRoLnNsaWNlKGkgKyAxKVxuICAgICAgICByZXR1cm4gKHBhdGggPT09ICcuLicgfHwgcGF0aCA9PT0gJy4nID8gJycgOiBwYXRoKVxuICAgIH1cbiAgfVxuICByZXR1cm4gKHBhdGggPT09ICcuLicgfHwgcGF0aCA9PT0gJy4nID8gJycgOiBwYXRoKVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBUT0RPOlxuLy8gICogc3VwcG9ydCAxIG5lc3RlZCBtdWx0aXBhcnQgbGV2ZWxcbi8vICAgIChzZWUgc2Vjb25kIG11bHRpcGFydCBleGFtcGxlIGhlcmU6XG4vLyAgICAgaHR0cDovL3d3dy53My5vcmcvVFIvaHRtbDQwMS9pbnRlcmFjdC9mb3Jtcy5odG1sI2RpZHgtbXVsdGlwYXJ0Zm9ybS1kYXRhKVxuLy8gICogc3VwcG9ydCBsaW1pdHMuZmllbGROYW1lU2l6ZVxuLy8gICAgIC0tIHRoaXMgd2lsbCByZXF1aXJlIG1vZGlmaWNhdGlvbnMgdG8gdXRpbHMucGFyc2VQYXJhbXNcblxuY29uc3QgeyBSZWFkYWJsZSB9ID0gcmVxdWlyZSgnbm9kZTpzdHJlYW0nKVxuY29uc3QgeyBpbmhlcml0cyB9ID0gcmVxdWlyZSgnbm9kZTp1dGlsJylcblxuY29uc3QgRGljZXIgPSByZXF1aXJlKCcuLi8uLi9kZXBzL2RpY2VyL2xpYi9EaWNlcicpXG5cbmNvbnN0IHBhcnNlUGFyYW1zID0gcmVxdWlyZSgnLi4vdXRpbHMvcGFyc2VQYXJhbXMnKVxuY29uc3QgZGVjb2RlVGV4dCA9IHJlcXVpcmUoJy4uL3V0aWxzL2RlY29kZVRleHQnKVxuY29uc3QgYmFzZW5hbWUgPSByZXF1aXJlKCcuLi91dGlscy9iYXNlbmFtZScpXG5jb25zdCBnZXRMaW1pdCA9IHJlcXVpcmUoJy4uL3V0aWxzL2dldExpbWl0JylcblxuY29uc3QgUkVfQk9VTkRBUlkgPSAvXmJvdW5kYXJ5JC9pXG5jb25zdCBSRV9GSUVMRCA9IC9eZm9ybS1kYXRhJC9pXG5jb25zdCBSRV9DSEFSU0VUID0gL15jaGFyc2V0JC9pXG5jb25zdCBSRV9GSUxFTkFNRSA9IC9eZmlsZW5hbWUkL2lcbmNvbnN0IFJFX05BTUUgPSAvXm5hbWUkL2lcblxuTXVsdGlwYXJ0LmRldGVjdCA9IC9ebXVsdGlwYXJ0XFwvZm9ybS1kYXRhL2lcbmZ1bmN0aW9uIE11bHRpcGFydCAoYm95LCBjZmcpIHtcbiAgbGV0IGlcbiAgbGV0IGxlblxuICBjb25zdCBzZWxmID0gdGhpc1xuICBsZXQgYm91bmRhcnlcbiAgY29uc3QgbGltaXRzID0gY2ZnLmxpbWl0c1xuICBjb25zdCBpc1BhcnRBRmlsZSA9IGNmZy5pc1BhcnRBRmlsZSB8fCAoKGZpZWxkTmFtZSwgY29udGVudFR5cGUsIGZpbGVOYW1lKSA9PiAoY29udGVudFR5cGUgPT09ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nIHx8IGZpbGVOYW1lICE9PSB1bmRlZmluZWQpKVxuICBjb25zdCBwYXJzZWRDb25UeXBlID0gY2ZnLnBhcnNlZENvblR5cGUgfHwgW11cbiAgY29uc3QgZGVmQ2hhcnNldCA9IGNmZy5kZWZDaGFyc2V0IHx8ICd1dGY4J1xuICBjb25zdCBwcmVzZXJ2ZVBhdGggPSBjZmcucHJlc2VydmVQYXRoXG4gIGNvbnN0IGZpbGVPcHRzID0geyBoaWdoV2F0ZXJNYXJrOiBjZmcuZmlsZUh3bSB9XG5cbiAgZm9yIChpID0gMCwgbGVuID0gcGFyc2VkQ29uVHlwZS5sZW5ndGg7IGkgPCBsZW47ICsraSkge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHBhcnNlZENvblR5cGVbaV0pICYmXG4gICAgICBSRV9CT1VOREFSWS50ZXN0KHBhcnNlZENvblR5cGVbaV1bMF0pKSB7XG4gICAgICBib3VuZGFyeSA9IHBhcnNlZENvblR5cGVbaV1bMV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gY2hlY2tGaW5pc2hlZCAoKSB7XG4gICAgaWYgKG5lbmRzID09PSAwICYmIGZpbmlzaGVkICYmICFib3kuX2RvbmUpIHtcbiAgICAgIGZpbmlzaGVkID0gZmFsc2VcbiAgICAgIHNlbGYuZW5kKClcbiAgICB9XG4gIH1cblxuICBpZiAodHlwZW9mIGJvdW5kYXJ5ICE9PSAnc3RyaW5nJykgeyB0aHJvdyBuZXcgRXJyb3IoJ011bHRpcGFydDogQm91bmRhcnkgbm90IGZvdW5kJykgfVxuXG4gIGNvbnN0IGZpZWxkU2l6ZUxpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnZmllbGRTaXplJywgMSAqIDEwMjQgKiAxMDI0KVxuICBjb25zdCBmaWxlU2l6ZUxpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnZmlsZVNpemUnLCBJbmZpbml0eSlcbiAgY29uc3QgZmlsZXNMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpbGVzJywgSW5maW5pdHkpXG4gIGNvbnN0IGZpZWxkc0xpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnZmllbGRzJywgSW5maW5pdHkpXG4gIGNvbnN0IHBhcnRzTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdwYXJ0cycsIEluZmluaXR5KVxuICBjb25zdCBoZWFkZXJQYWlyc0xpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnaGVhZGVyUGFpcnMnLCAyMDAwKVxuICBjb25zdCBoZWFkZXJTaXplTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdoZWFkZXJTaXplJywgODAgKiAxMDI0KVxuXG4gIGxldCBuZmlsZXMgPSAwXG4gIGxldCBuZmllbGRzID0gMFxuICBsZXQgbmVuZHMgPSAwXG4gIGxldCBjdXJGaWxlXG4gIGxldCBjdXJGaWVsZFxuICBsZXQgZmluaXNoZWQgPSBmYWxzZVxuXG4gIHRoaXMuX25lZWREcmFpbiA9IGZhbHNlXG4gIHRoaXMuX3BhdXNlID0gZmFsc2VcbiAgdGhpcy5fY2IgPSB1bmRlZmluZWRcbiAgdGhpcy5fbnBhcnRzID0gMFxuICB0aGlzLl9ib3kgPSBib3lcblxuICBjb25zdCBwYXJzZXJDZmcgPSB7XG4gICAgYm91bmRhcnksXG4gICAgbWF4SGVhZGVyUGFpcnM6IGhlYWRlclBhaXJzTGltaXQsXG4gICAgbWF4SGVhZGVyU2l6ZTogaGVhZGVyU2l6ZUxpbWl0LFxuICAgIHBhcnRId206IGZpbGVPcHRzLmhpZ2hXYXRlck1hcmssXG4gICAgaGlnaFdhdGVyTWFyazogY2ZnLmhpZ2hXYXRlck1hcmtcbiAgfVxuXG4gIHRoaXMucGFyc2VyID0gbmV3IERpY2VyKHBhcnNlckNmZylcbiAgdGhpcy5wYXJzZXIub24oJ2RyYWluJywgZnVuY3Rpb24gKCkge1xuICAgIHNlbGYuX25lZWREcmFpbiA9IGZhbHNlXG4gICAgaWYgKHNlbGYuX2NiICYmICFzZWxmLl9wYXVzZSkge1xuICAgICAgY29uc3QgY2IgPSBzZWxmLl9jYlxuICAgICAgc2VsZi5fY2IgPSB1bmRlZmluZWRcbiAgICAgIGNiKClcbiAgICB9XG4gIH0pLm9uKCdwYXJ0JywgZnVuY3Rpb24gb25QYXJ0IChwYXJ0KSB7XG4gICAgaWYgKCsrc2VsZi5fbnBhcnRzID4gcGFydHNMaW1pdCkge1xuICAgICAgc2VsZi5wYXJzZXIucmVtb3ZlTGlzdGVuZXIoJ3BhcnQnLCBvblBhcnQpXG4gICAgICBzZWxmLnBhcnNlci5vbigncGFydCcsIHNraXBQYXJ0KVxuICAgICAgYm95LmhpdFBhcnRzTGltaXQgPSB0cnVlXG4gICAgICBib3kuZW1pdCgncGFydHNMaW1pdCcpXG4gICAgICByZXR1cm4gc2tpcFBhcnQocGFydClcbiAgICB9XG5cbiAgICAvLyBoYWNrIGJlY2F1c2Ugc3RyZWFtczIgX2Fsd2F5c18gZG9lc24ndCBlbWl0ICdlbmQnIHVudGlsIG5leHRUaWNrLCBzbyBsZXRcbiAgICAvLyB1cyBlbWl0ICdlbmQnIGVhcmx5IHNpbmNlIHdlIGtub3cgdGhlIHBhcnQgaGFzIGVuZGVkIGlmIHdlIGFyZSBhbHJlYWR5XG4gICAgLy8gc2VlaW5nIHRoZSBuZXh0IHBhcnRcbiAgICBpZiAoY3VyRmllbGQpIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gY3VyRmllbGRcbiAgICAgIGZpZWxkLmVtaXQoJ2VuZCcpXG4gICAgICBmaWVsZC5yZW1vdmVBbGxMaXN0ZW5lcnMoJ2VuZCcpXG4gICAgfVxuXG4gICAgcGFydC5vbignaGVhZGVyJywgZnVuY3Rpb24gKGhlYWRlcikge1xuICAgICAgbGV0IGNvbnR5cGVcbiAgICAgIGxldCBmaWVsZG5hbWVcbiAgICAgIGxldCBwYXJzZWRcbiAgICAgIGxldCBjaGFyc2V0XG4gICAgICBsZXQgZW5jb2RpbmdcbiAgICAgIGxldCBmaWxlbmFtZVxuICAgICAgbGV0IG5zaXplID0gMFxuXG4gICAgICBpZiAoaGVhZGVyWydjb250ZW50LXR5cGUnXSkge1xuICAgICAgICBwYXJzZWQgPSBwYXJzZVBhcmFtcyhoZWFkZXJbJ2NvbnRlbnQtdHlwZSddWzBdKVxuICAgICAgICBpZiAocGFyc2VkWzBdKSB7XG4gICAgICAgICAgY29udHlwZSA9IHBhcnNlZFswXS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgZm9yIChpID0gMCwgbGVuID0gcGFyc2VkLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICAgICAgICBpZiAoUkVfQ0hBUlNFVC50ZXN0KHBhcnNlZFtpXVswXSkpIHtcbiAgICAgICAgICAgICAgY2hhcnNldCA9IHBhcnNlZFtpXVsxXS50b0xvd2VyQ2FzZSgpXG4gICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGlmIChjb250eXBlID09PSB1bmRlZmluZWQpIHsgY29udHlwZSA9ICd0ZXh0L3BsYWluJyB9XG4gICAgICBpZiAoY2hhcnNldCA9PT0gdW5kZWZpbmVkKSB7IGNoYXJzZXQgPSBkZWZDaGFyc2V0IH1cblxuICAgICAgaWYgKGhlYWRlclsnY29udGVudC1kaXNwb3NpdGlvbiddKSB7XG4gICAgICAgIHBhcnNlZCA9IHBhcnNlUGFyYW1zKGhlYWRlclsnY29udGVudC1kaXNwb3NpdGlvbiddWzBdKVxuICAgICAgICBpZiAoIVJFX0ZJRUxELnRlc3QocGFyc2VkWzBdKSkgeyByZXR1cm4gc2tpcFBhcnQocGFydCkgfVxuICAgICAgICBmb3IgKGkgPSAwLCBsZW4gPSBwYXJzZWQubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgICBpZiAoUkVfTkFNRS50ZXN0KHBhcnNlZFtpXVswXSkpIHtcbiAgICAgICAgICAgIGZpZWxkbmFtZSA9IHBhcnNlZFtpXVsxXVxuICAgICAgICAgIH0gZWxzZSBpZiAoUkVfRklMRU5BTUUudGVzdChwYXJzZWRbaV1bMF0pKSB7XG4gICAgICAgICAgICBmaWxlbmFtZSA9IHBhcnNlZFtpXVsxXVxuICAgICAgICAgICAgaWYgKCFwcmVzZXJ2ZVBhdGgpIHsgZmlsZW5hbWUgPSBiYXNlbmFtZShmaWxlbmFtZSkgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHsgcmV0dXJuIHNraXBQYXJ0KHBhcnQpIH1cblxuICAgICAgaWYgKGhlYWRlclsnY29udGVudC10cmFuc2Zlci1lbmNvZGluZyddKSB7IGVuY29kaW5nID0gaGVhZGVyWydjb250ZW50LXRyYW5zZmVyLWVuY29kaW5nJ11bMF0udG9Mb3dlckNhc2UoKSB9IGVsc2UgeyBlbmNvZGluZyA9ICc3Yml0JyB9XG5cbiAgICAgIGxldCBvbkRhdGEsXG4gICAgICAgIG9uRW5kXG5cbiAgICAgIGlmIChpc1BhcnRBRmlsZShmaWVsZG5hbWUsIGNvbnR5cGUsIGZpbGVuYW1lKSkge1xuICAgICAgICAvLyBmaWxlL2JpbmFyeSBmaWVsZFxuICAgICAgICBpZiAobmZpbGVzID09PSBmaWxlc0xpbWl0KSB7XG4gICAgICAgICAgaWYgKCFib3kuaGl0RmlsZXNMaW1pdCkge1xuICAgICAgICAgICAgYm95LmhpdEZpbGVzTGltaXQgPSB0cnVlXG4gICAgICAgICAgICBib3kuZW1pdCgnZmlsZXNMaW1pdCcpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBza2lwUGFydChwYXJ0KVxuICAgICAgICB9XG5cbiAgICAgICAgKytuZmlsZXNcblxuICAgICAgICBpZiAoYm95Lmxpc3RlbmVyQ291bnQoJ2ZpbGUnKSA9PT0gMCkge1xuICAgICAgICAgIHNlbGYucGFyc2VyLl9pZ25vcmUoKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgKytuZW5kc1xuICAgICAgICBjb25zdCBmaWxlID0gbmV3IEZpbGVTdHJlYW0oZmlsZU9wdHMpXG4gICAgICAgIGN1ckZpbGUgPSBmaWxlXG4gICAgICAgIGZpbGUub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAtLW5lbmRzXG4gICAgICAgICAgc2VsZi5fcGF1c2UgPSBmYWxzZVxuICAgICAgICAgIGNoZWNrRmluaXNoZWQoKVxuICAgICAgICAgIGlmIChzZWxmLl9jYiAmJiAhc2VsZi5fbmVlZERyYWluKSB7XG4gICAgICAgICAgICBjb25zdCBjYiA9IHNlbGYuX2NiXG4gICAgICAgICAgICBzZWxmLl9jYiA9IHVuZGVmaW5lZFxuICAgICAgICAgICAgY2IoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgZmlsZS5fcmVhZCA9IGZ1bmN0aW9uIChuKSB7XG4gICAgICAgICAgaWYgKCFzZWxmLl9wYXVzZSkgeyByZXR1cm4gfVxuICAgICAgICAgIHNlbGYuX3BhdXNlID0gZmFsc2VcbiAgICAgICAgICBpZiAoc2VsZi5fY2IgJiYgIXNlbGYuX25lZWREcmFpbikge1xuICAgICAgICAgICAgY29uc3QgY2IgPSBzZWxmLl9jYlxuICAgICAgICAgICAgc2VsZi5fY2IgPSB1bmRlZmluZWRcbiAgICAgICAgICAgIGNiKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgYm95LmVtaXQoJ2ZpbGUnLCBmaWVsZG5hbWUsIGZpbGUsIGZpbGVuYW1lLCBlbmNvZGluZywgY29udHlwZSlcblxuICAgICAgICBvbkRhdGEgPSBmdW5jdGlvbiAoZGF0YSkge1xuICAgICAgICAgIGlmICgobnNpemUgKz0gZGF0YS5sZW5ndGgpID4gZmlsZVNpemVMaW1pdCkge1xuICAgICAgICAgICAgY29uc3QgZXh0cmFsZW4gPSBmaWxlU2l6ZUxpbWl0IC0gbnNpemUgKyBkYXRhLmxlbmd0aFxuICAgICAgICAgICAgaWYgKGV4dHJhbGVuID4gMCkgeyBmaWxlLnB1c2goZGF0YS5zbGljZSgwLCBleHRyYWxlbikpIH1cbiAgICAgICAgICAgIGZpbGUudHJ1bmNhdGVkID0gdHJ1ZVxuICAgICAgICAgICAgZmlsZS5ieXRlc1JlYWQgPSBmaWxlU2l6ZUxpbWl0XG4gICAgICAgICAgICBwYXJ0LnJlbW92ZUFsbExpc3RlbmVycygnZGF0YScpXG4gICAgICAgICAgICBmaWxlLmVtaXQoJ2xpbWl0JylcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH0gZWxzZSBpZiAoIWZpbGUucHVzaChkYXRhKSkgeyBzZWxmLl9wYXVzZSA9IHRydWUgfVxuXG4gICAgICAgICAgZmlsZS5ieXRlc1JlYWQgPSBuc2l6ZVxuICAgICAgICB9XG5cbiAgICAgICAgb25FbmQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgY3VyRmlsZSA9IHVuZGVmaW5lZFxuICAgICAgICAgIGZpbGUucHVzaChudWxsKVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBub24tZmlsZSBmaWVsZFxuICAgICAgICBpZiAobmZpZWxkcyA9PT0gZmllbGRzTGltaXQpIHtcbiAgICAgICAgICBpZiAoIWJveS5oaXRGaWVsZHNMaW1pdCkge1xuICAgICAgICAgICAgYm95LmhpdEZpZWxkc0xpbWl0ID0gdHJ1ZVxuICAgICAgICAgICAgYm95LmVtaXQoJ2ZpZWxkc0xpbWl0JylcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIHNraXBQYXJ0KHBhcnQpXG4gICAgICAgIH1cblxuICAgICAgICArK25maWVsZHNcbiAgICAgICAgKytuZW5kc1xuICAgICAgICBsZXQgYnVmZmVyID0gJydcbiAgICAgICAgbGV0IHRydW5jYXRlZCA9IGZhbHNlXG4gICAgICAgIGN1ckZpZWxkID0gcGFydFxuXG4gICAgICAgIG9uRGF0YSA9IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICAgICAgaWYgKChuc2l6ZSArPSBkYXRhLmxlbmd0aCkgPiBmaWVsZFNpemVMaW1pdCkge1xuICAgICAgICAgICAgY29uc3QgZXh0cmFsZW4gPSAoZmllbGRTaXplTGltaXQgLSAobnNpemUgLSBkYXRhLmxlbmd0aCkpXG4gICAgICAgICAgICBidWZmZXIgKz0gZGF0YS50b1N0cmluZygnYmluYXJ5JywgMCwgZXh0cmFsZW4pXG4gICAgICAgICAgICB0cnVuY2F0ZWQgPSB0cnVlXG4gICAgICAgICAgICBwYXJ0LnJlbW92ZUFsbExpc3RlbmVycygnZGF0YScpXG4gICAgICAgICAgfSBlbHNlIHsgYnVmZmVyICs9IGRhdGEudG9TdHJpbmcoJ2JpbmFyeScpIH1cbiAgICAgICAgfVxuXG4gICAgICAgIG9uRW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGN1ckZpZWxkID0gdW5kZWZpbmVkXG4gICAgICAgICAgaWYgKGJ1ZmZlci5sZW5ndGgpIHsgYnVmZmVyID0gZGVjb2RlVGV4dChidWZmZXIsICdiaW5hcnknLCBjaGFyc2V0KSB9XG4gICAgICAgICAgYm95LmVtaXQoJ2ZpZWxkJywgZmllbGRuYW1lLCBidWZmZXIsIGZhbHNlLCB0cnVuY2F0ZWQsIGVuY29kaW5nLCBjb250eXBlKVxuICAgICAgICAgIC0tbmVuZHNcbiAgICAgICAgICBjaGVja0ZpbmlzaGVkKClcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvKiBBcyBvZiBub2RlQDJlZmU0YWI3NjE2NjYgKHYwLjEwLjI5Ky92MC4xMS4xNCspLCBidXNib3kgaGFkIGJlY29tZVxuICAgICAgICAgYnJva2VuLiBTdHJlYW1zMi9zdHJlYW1zMyBpcyBhIGh1Z2UgYmxhY2sgYm94IG9mIGNvbmZ1c2lvbiwgYnV0XG4gICAgICAgICBzb21laG93IG92ZXJyaWRpbmcgdGhlIHN5bmMgc3RhdGUgc2VlbXMgdG8gZml4IHRoaW5ncyBhZ2FpbiAoYW5kIHN0aWxsXG4gICAgICAgICBzZWVtcyB0byB3b3JrIGZvciBwcmV2aW91cyBub2RlIHZlcnNpb25zKS5cbiAgICAgICovXG4gICAgICBwYXJ0Ll9yZWFkYWJsZVN0YXRlLnN5bmMgPSBmYWxzZVxuXG4gICAgICBwYXJ0Lm9uKCdkYXRhJywgb25EYXRhKVxuICAgICAgcGFydC5vbignZW5kJywgb25FbmQpXG4gICAgfSkub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgaWYgKGN1ckZpbGUpIHsgY3VyRmlsZS5lbWl0KCdlcnJvcicsIGVycikgfVxuICAgIH0pXG4gIH0pLm9uKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICBib3kuZW1pdCgnZXJyb3InLCBlcnIpXG4gIH0pLm9uKCdmaW5pc2gnLCBmdW5jdGlvbiAoKSB7XG4gICAgZmluaXNoZWQgPSB0cnVlXG4gICAgY2hlY2tGaW5pc2hlZCgpXG4gIH0pXG59XG5cbk11bHRpcGFydC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoY2h1bmssIGNiKSB7XG4gIGNvbnN0IHIgPSB0aGlzLnBhcnNlci53cml0ZShjaHVuaylcbiAgaWYgKHIgJiYgIXRoaXMuX3BhdXNlKSB7XG4gICAgY2IoKVxuICB9IGVsc2Uge1xuICAgIHRoaXMuX25lZWREcmFpbiA9ICFyXG4gICAgdGhpcy5fY2IgPSBjYlxuICB9XG59XG5cbk11bHRpcGFydC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKCkge1xuICBjb25zdCBzZWxmID0gdGhpc1xuXG4gIGlmIChzZWxmLnBhcnNlci53cml0YWJsZSkge1xuICAgIHNlbGYucGFyc2VyLmVuZCgpXG4gIH0gZWxzZSBpZiAoIXNlbGYuX2JveS5fZG9uZSkge1xuICAgIHByb2Nlc3MubmV4dFRpY2soZnVuY3Rpb24gKCkge1xuICAgICAgc2VsZi5fYm95Ll9kb25lID0gdHJ1ZVxuICAgICAgc2VsZi5fYm95LmVtaXQoJ2ZpbmlzaCcpXG4gICAgfSlcbiAgfVxufVxuXG5mdW5jdGlvbiBza2lwUGFydCAocGFydCkge1xuICBwYXJ0LnJlc3VtZSgpXG59XG5cbmZ1bmN0aW9uIEZpbGVTdHJlYW0gKG9wdHMpIHtcbiAgUmVhZGFibGUuY2FsbCh0aGlzLCBvcHRzKVxuXG4gIHRoaXMuYnl0ZXNSZWFkID0gMFxuXG4gIHRoaXMudHJ1bmNhdGVkID0gZmFsc2Vcbn1cblxuaW5oZXJpdHMoRmlsZVN0cmVhbSwgUmVhZGFibGUpXG5cbkZpbGVTdHJlYW0ucHJvdG90eXBlLl9yZWFkID0gZnVuY3Rpb24gKG4pIHt9XG5cbm1vZHVsZS5leHBvcnRzID0gTXVsdGlwYXJ0XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFJFX1BMVVMgPSAvXFwrL2dcblxuY29uc3QgSEVYID0gW1xuICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLFxuICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLFxuICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLFxuICAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLFxuICAwLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLFxuICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLFxuICAwLCAxLCAxLCAxLCAxLCAxLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLFxuICAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwXG5dXG5cbmZ1bmN0aW9uIERlY29kZXIgKCkge1xuICB0aGlzLmJ1ZmZlciA9IHVuZGVmaW5lZFxufVxuRGVjb2Rlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoc3RyKSB7XG4gIC8vIFJlcGxhY2UgJysnIHdpdGggJyAnIGJlZm9yZSBkZWNvZGluZ1xuICBzdHIgPSBzdHIucmVwbGFjZShSRV9QTFVTLCAnICcpXG4gIGxldCByZXMgPSAnJ1xuICBsZXQgaSA9IDA7IGxldCBwID0gMDsgY29uc3QgbGVuID0gc3RyLmxlbmd0aFxuICBmb3IgKDsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKHRoaXMuYnVmZmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICghSEVYW3N0ci5jaGFyQ29kZUF0KGkpXSkge1xuICAgICAgICByZXMgKz0gJyUnICsgdGhpcy5idWZmZXJcbiAgICAgICAgdGhpcy5idWZmZXIgPSB1bmRlZmluZWRcbiAgICAgICAgLS1pIC8vIHJldHJ5IGNoYXJhY3RlclxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5idWZmZXIgKz0gc3RyW2ldXG4gICAgICAgICsrcFxuICAgICAgICBpZiAodGhpcy5idWZmZXIubGVuZ3RoID09PSAyKSB7XG4gICAgICAgICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQodGhpcy5idWZmZXIsIDE2KSlcbiAgICAgICAgICB0aGlzLmJ1ZmZlciA9IHVuZGVmaW5lZFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChzdHJbaV0gPT09ICclJykge1xuICAgICAgaWYgKGkgPiBwKSB7XG4gICAgICAgIHJlcyArPSBzdHIuc3Vic3RyaW5nKHAsIGkpXG4gICAgICAgIHAgPSBpXG4gICAgICB9XG4gICAgICB0aGlzLmJ1ZmZlciA9ICcnXG4gICAgICArK3BcbiAgICB9XG4gIH1cbiAgaWYgKHAgPCBsZW4gJiYgdGhpcy5idWZmZXIgPT09IHVuZGVmaW5lZCkgeyByZXMgKz0gc3RyLnN1YnN0cmluZyhwKSB9XG4gIHJldHVybiByZXNcbn1cbkRlY29kZXIucHJvdG90eXBlLnJlc2V0ID0gZnVuY3Rpb24gKCkge1xuICB0aGlzLmJ1ZmZlciA9IHVuZGVmaW5lZFxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERlY29kZXJcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgRGVjb2RlciA9IHJlcXVpcmUoJy4uL3V0aWxzL0RlY29kZXInKVxuY29uc3QgZGVjb2RlVGV4dCA9IHJlcXVpcmUoJy4uL3V0aWxzL2RlY29kZVRleHQnKVxuY29uc3QgZ2V0TGltaXQgPSByZXF1aXJlKCcuLi91dGlscy9nZXRMaW1pdCcpXG5cbmNvbnN0IFJFX0NIQVJTRVQgPSAvXmNoYXJzZXQkL2lcblxuVXJsRW5jb2RlZC5kZXRlY3QgPSAvXmFwcGxpY2F0aW9uXFwveC13d3ctZm9ybS11cmxlbmNvZGVkL2lcbmZ1bmN0aW9uIFVybEVuY29kZWQgKGJveSwgY2ZnKSB7XG4gIGNvbnN0IGxpbWl0cyA9IGNmZy5saW1pdHNcbiAgY29uc3QgcGFyc2VkQ29uVHlwZSA9IGNmZy5wYXJzZWRDb25UeXBlXG4gIHRoaXMuYm95ID0gYm95XG5cbiAgdGhpcy5maWVsZFNpemVMaW1pdCA9IGdldExpbWl0KGxpbWl0cywgJ2ZpZWxkU2l6ZScsIDEgKiAxMDI0ICogMTAyNClcbiAgdGhpcy5maWVsZE5hbWVTaXplTGltaXQgPSBnZXRMaW1pdChsaW1pdHMsICdmaWVsZE5hbWVTaXplJywgMTAwKVxuICB0aGlzLmZpZWxkc0xpbWl0ID0gZ2V0TGltaXQobGltaXRzLCAnZmllbGRzJywgSW5maW5pdHkpXG5cbiAgbGV0IGNoYXJzZXRcbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IHBhcnNlZENvblR5cGUubGVuZ3RoOyBpIDwgbGVuOyArK2kpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby12YXJcbiAgICBpZiAoQXJyYXkuaXNBcnJheShwYXJzZWRDb25UeXBlW2ldKSAmJlxuICAgICAgICBSRV9DSEFSU0VULnRlc3QocGFyc2VkQ29uVHlwZVtpXVswXSkpIHtcbiAgICAgIGNoYXJzZXQgPSBwYXJzZWRDb25UeXBlW2ldWzFdLnRvTG93ZXJDYXNlKClcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKGNoYXJzZXQgPT09IHVuZGVmaW5lZCkgeyBjaGFyc2V0ID0gY2ZnLmRlZkNoYXJzZXQgfHwgJ3V0ZjgnIH1cblxuICB0aGlzLmRlY29kZXIgPSBuZXcgRGVjb2RlcigpXG4gIHRoaXMuY2hhcnNldCA9IGNoYXJzZXRcbiAgdGhpcy5fZmllbGRzID0gMFxuICB0aGlzLl9zdGF0ZSA9ICdrZXknXG4gIHRoaXMuX2NoZWNraW5nQnl0ZXMgPSB0cnVlXG4gIHRoaXMuX2J5dGVzS2V5ID0gMFxuICB0aGlzLl9ieXRlc1ZhbCA9IDBcbiAgdGhpcy5fa2V5ID0gJydcbiAgdGhpcy5fdmFsID0gJydcbiAgdGhpcy5fa2V5VHJ1bmMgPSBmYWxzZVxuICB0aGlzLl92YWxUcnVuYyA9IGZhbHNlXG4gIHRoaXMuX2hpdExpbWl0ID0gZmFsc2Vcbn1cblxuVXJsRW5jb2RlZC5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiAoZGF0YSwgY2IpIHtcbiAgaWYgKHRoaXMuX2ZpZWxkcyA9PT0gdGhpcy5maWVsZHNMaW1pdCkge1xuICAgIGlmICghdGhpcy5ib3kuaGl0RmllbGRzTGltaXQpIHtcbiAgICAgIHRoaXMuYm95LmhpdEZpZWxkc0xpbWl0ID0gdHJ1ZVxuICAgICAgdGhpcy5ib3kuZW1pdCgnZmllbGRzTGltaXQnKVxuICAgIH1cbiAgICByZXR1cm4gY2IoKVxuICB9XG5cbiAgbGV0IGlkeGVxOyBsZXQgaWR4YW1wOyBsZXQgaTsgbGV0IHAgPSAwOyBjb25zdCBsZW4gPSBkYXRhLmxlbmd0aFxuXG4gIHdoaWxlIChwIDwgbGVuKSB7XG4gICAgaWYgKHRoaXMuX3N0YXRlID09PSAna2V5Jykge1xuICAgICAgaWR4ZXEgPSBpZHhhbXAgPSB1bmRlZmluZWRcbiAgICAgIGZvciAoaSA9IHA7IGkgPCBsZW47ICsraSkge1xuICAgICAgICBpZiAoIXRoaXMuX2NoZWNraW5nQnl0ZXMpIHsgKytwIH1cbiAgICAgICAgaWYgKGRhdGFbaV0gPT09IDB4M0QvKiA9ICovKSB7XG4gICAgICAgICAgaWR4ZXEgPSBpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfSBlbHNlIGlmIChkYXRhW2ldID09PSAweDI2LyogJiAqLykge1xuICAgICAgICAgIGlkeGFtcCA9IGlcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLl9jaGVja2luZ0J5dGVzICYmIHRoaXMuX2J5dGVzS2V5ID09PSB0aGlzLmZpZWxkTmFtZVNpemVMaW1pdCkge1xuICAgICAgICAgIHRoaXMuX2hpdExpbWl0ID0gdHJ1ZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5fY2hlY2tpbmdCeXRlcykgeyArK3RoaXMuX2J5dGVzS2V5IH1cbiAgICAgIH1cblxuICAgICAgaWYgKGlkeGVxICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgLy8ga2V5IHdpdGggYXNzaWdubWVudFxuICAgICAgICBpZiAoaWR4ZXEgPiBwKSB7IHRoaXMuX2tleSArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCwgaWR4ZXEpKSB9XG4gICAgICAgIHRoaXMuX3N0YXRlID0gJ3ZhbCdcblxuICAgICAgICB0aGlzLl9oaXRMaW1pdCA9IGZhbHNlXG4gICAgICAgIHRoaXMuX2NoZWNraW5nQnl0ZXMgPSB0cnVlXG4gICAgICAgIHRoaXMuX3ZhbCA9ICcnXG4gICAgICAgIHRoaXMuX2J5dGVzVmFsID0gMFxuICAgICAgICB0aGlzLl92YWxUcnVuYyA9IGZhbHNlXG4gICAgICAgIHRoaXMuZGVjb2Rlci5yZXNldCgpXG5cbiAgICAgICAgcCA9IGlkeGVxICsgMVxuICAgICAgfSBlbHNlIGlmIChpZHhhbXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBrZXkgd2l0aCBubyBhc3NpZ25tZW50XG4gICAgICAgICsrdGhpcy5fZmllbGRzXG4gICAgICAgIGxldCBrZXk7IGNvbnN0IGtleVRydW5jID0gdGhpcy5fa2V5VHJ1bmNcbiAgICAgICAgaWYgKGlkeGFtcCA+IHApIHsga2V5ID0gKHRoaXMuX2tleSArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCwgaWR4YW1wKSkpIH0gZWxzZSB7IGtleSA9IHRoaXMuX2tleSB9XG5cbiAgICAgICAgdGhpcy5faGl0TGltaXQgPSBmYWxzZVxuICAgICAgICB0aGlzLl9jaGVja2luZ0J5dGVzID0gdHJ1ZVxuICAgICAgICB0aGlzLl9rZXkgPSAnJ1xuICAgICAgICB0aGlzLl9ieXRlc0tleSA9IDBcbiAgICAgICAgdGhpcy5fa2V5VHJ1bmMgPSBmYWxzZVxuICAgICAgICB0aGlzLmRlY29kZXIucmVzZXQoKVxuXG4gICAgICAgIGlmIChrZXkubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KGtleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICAgICAgICAnJyxcbiAgICAgICAgICAgIGtleVRydW5jLFxuICAgICAgICAgICAgZmFsc2UpXG4gICAgICAgIH1cblxuICAgICAgICBwID0gaWR4YW1wICsgMVxuICAgICAgICBpZiAodGhpcy5fZmllbGRzID09PSB0aGlzLmZpZWxkc0xpbWl0KSB7IHJldHVybiBjYigpIH1cbiAgICAgIH0gZWxzZSBpZiAodGhpcy5faGl0TGltaXQpIHtcbiAgICAgICAgLy8gd2UgbWF5IG5vdCBoYXZlIGhpdCB0aGUgYWN0dWFsIGxpbWl0IGlmIHRoZXJlIGFyZSBlbmNvZGVkIGJ5dGVzLi4uXG4gICAgICAgIGlmIChpID4gcCkgeyB0aGlzLl9rZXkgKz0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHAsIGkpKSB9XG4gICAgICAgIHAgPSBpXG4gICAgICAgIGlmICgodGhpcy5fYnl0ZXNLZXkgPSB0aGlzLl9rZXkubGVuZ3RoKSA9PT0gdGhpcy5maWVsZE5hbWVTaXplTGltaXQpIHtcbiAgICAgICAgICAvLyB5ZXAsIHdlIGFjdHVhbGx5IGRpZCBoaXQgdGhlIGxpbWl0XG4gICAgICAgICAgdGhpcy5fY2hlY2tpbmdCeXRlcyA9IGZhbHNlXG4gICAgICAgICAgdGhpcy5fa2V5VHJ1bmMgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChwIDwgbGVuKSB7IHRoaXMuX2tleSArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCkpIH1cbiAgICAgICAgcCA9IGxlblxuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBpZHhhbXAgPSB1bmRlZmluZWRcbiAgICAgIGZvciAoaSA9IHA7IGkgPCBsZW47ICsraSkge1xuICAgICAgICBpZiAoIXRoaXMuX2NoZWNraW5nQnl0ZXMpIHsgKytwIH1cbiAgICAgICAgaWYgKGRhdGFbaV0gPT09IDB4MjYvKiAmICovKSB7XG4gICAgICAgICAgaWR4YW1wID0gaVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2NoZWNraW5nQnl0ZXMgJiYgdGhpcy5fYnl0ZXNWYWwgPT09IHRoaXMuZmllbGRTaXplTGltaXQpIHtcbiAgICAgICAgICB0aGlzLl9oaXRMaW1pdCA9IHRydWVcbiAgICAgICAgICBicmVha1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuX2NoZWNraW5nQnl0ZXMpIHsgKyt0aGlzLl9ieXRlc1ZhbCB9XG4gICAgICB9XG5cbiAgICAgIGlmIChpZHhhbXAgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICArK3RoaXMuX2ZpZWxkc1xuICAgICAgICBpZiAoaWR4YW1wID4gcCkgeyB0aGlzLl92YWwgKz0gdGhpcy5kZWNvZGVyLndyaXRlKGRhdGEudG9TdHJpbmcoJ2JpbmFyeScsIHAsIGlkeGFtcCkpIH1cbiAgICAgICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KHRoaXMuX2tleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICAgICAgZGVjb2RlVGV4dCh0aGlzLl92YWwsICdiaW5hcnknLCB0aGlzLmNoYXJzZXQpLFxuICAgICAgICAgIHRoaXMuX2tleVRydW5jLFxuICAgICAgICAgIHRoaXMuX3ZhbFRydW5jKVxuICAgICAgICB0aGlzLl9zdGF0ZSA9ICdrZXknXG5cbiAgICAgICAgdGhpcy5faGl0TGltaXQgPSBmYWxzZVxuICAgICAgICB0aGlzLl9jaGVja2luZ0J5dGVzID0gdHJ1ZVxuICAgICAgICB0aGlzLl9rZXkgPSAnJ1xuICAgICAgICB0aGlzLl9ieXRlc0tleSA9IDBcbiAgICAgICAgdGhpcy5fa2V5VHJ1bmMgPSBmYWxzZVxuICAgICAgICB0aGlzLmRlY29kZXIucmVzZXQoKVxuXG4gICAgICAgIHAgPSBpZHhhbXAgKyAxXG4gICAgICAgIGlmICh0aGlzLl9maWVsZHMgPT09IHRoaXMuZmllbGRzTGltaXQpIHsgcmV0dXJuIGNiKCkgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLl9oaXRMaW1pdCkge1xuICAgICAgICAvLyB3ZSBtYXkgbm90IGhhdmUgaGl0IHRoZSBhY3R1YWwgbGltaXQgaWYgdGhlcmUgYXJlIGVuY29kZWQgYnl0ZXMuLi5cbiAgICAgICAgaWYgKGkgPiBwKSB7IHRoaXMuX3ZhbCArPSB0aGlzLmRlY29kZXIud3JpdGUoZGF0YS50b1N0cmluZygnYmluYXJ5JywgcCwgaSkpIH1cbiAgICAgICAgcCA9IGlcbiAgICAgICAgaWYgKCh0aGlzLl92YWwgPT09ICcnICYmIHRoaXMuZmllbGRTaXplTGltaXQgPT09IDApIHx8XG4gICAgICAgICAgICAodGhpcy5fYnl0ZXNWYWwgPSB0aGlzLl92YWwubGVuZ3RoKSA9PT0gdGhpcy5maWVsZFNpemVMaW1pdCkge1xuICAgICAgICAgIC8vIHllcCwgd2UgYWN0dWFsbHkgZGlkIGhpdCB0aGUgbGltaXRcbiAgICAgICAgICB0aGlzLl9jaGVja2luZ0J5dGVzID0gZmFsc2VcbiAgICAgICAgICB0aGlzLl92YWxUcnVuYyA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKHAgPCBsZW4pIHsgdGhpcy5fdmFsICs9IHRoaXMuZGVjb2Rlci53cml0ZShkYXRhLnRvU3RyaW5nKCdiaW5hcnknLCBwKSkgfVxuICAgICAgICBwID0gbGVuXG4gICAgICB9XG4gICAgfVxuICB9XG4gIGNiKClcbn1cblxuVXJsRW5jb2RlZC5wcm90b3R5cGUuZW5kID0gZnVuY3Rpb24gKCkge1xuICBpZiAodGhpcy5ib3kuX2RvbmUpIHsgcmV0dXJuIH1cblxuICBpZiAodGhpcy5fc3RhdGUgPT09ICdrZXknICYmIHRoaXMuX2tleS5sZW5ndGggPiAwKSB7XG4gICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KHRoaXMuX2tleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICAnJyxcbiAgICAgIHRoaXMuX2tleVRydW5jLFxuICAgICAgZmFsc2UpXG4gIH0gZWxzZSBpZiAodGhpcy5fc3RhdGUgPT09ICd2YWwnKSB7XG4gICAgdGhpcy5ib3kuZW1pdCgnZmllbGQnLCBkZWNvZGVUZXh0KHRoaXMuX2tleSwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICBkZWNvZGVUZXh0KHRoaXMuX3ZhbCwgJ2JpbmFyeScsIHRoaXMuY2hhcnNldCksXG4gICAgICB0aGlzLl9rZXlUcnVuYyxcbiAgICAgIHRoaXMuX3ZhbFRydW5jKVxuICB9XG4gIHRoaXMuYm95Ll9kb25lID0gdHJ1ZVxuICB0aGlzLmJveS5lbWl0KCdmaW5pc2gnKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFVybEVuY29kZWRcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgV3JpdGFibGVTdHJlYW0gPSByZXF1aXJlKCdub2RlOnN0cmVhbScpLldyaXRhYmxlXG5jb25zdCB7IGluaGVyaXRzIH0gPSByZXF1aXJlKCdub2RlOnV0aWwnKVxuY29uc3QgRGljZXIgPSByZXF1aXJlKCcuLi9kZXBzL2RpY2VyL2xpYi9EaWNlcicpXG5cbmNvbnN0IE11bHRpcGFydFBhcnNlciA9IHJlcXVpcmUoJy4vdHlwZXMvbXVsdGlwYXJ0JylcbmNvbnN0IFVybGVuY29kZWRQYXJzZXIgPSByZXF1aXJlKCcuL3R5cGVzL3VybGVuY29kZWQnKVxuY29uc3QgcGFyc2VQYXJhbXMgPSByZXF1aXJlKCcuL3V0aWxzL3BhcnNlUGFyYW1zJylcblxuZnVuY3Rpb24gQnVzYm95IChvcHRzKSB7XG4gIGlmICghKHRoaXMgaW5zdGFuY2VvZiBCdXNib3kpKSB7IHJldHVybiBuZXcgQnVzYm95KG9wdHMpIH1cblxuICBpZiAodHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQnVzYm95IGV4cGVjdGVkIGFuIG9wdGlvbnMtT2JqZWN0LicpXG4gIH1cbiAgaWYgKHR5cGVvZiBvcHRzLmhlYWRlcnMgIT09ICdvYmplY3QnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQnVzYm95IGV4cGVjdGVkIGFuIG9wdGlvbnMtT2JqZWN0IHdpdGggaGVhZGVycy1hdHRyaWJ1dGUuJylcbiAgfVxuICBpZiAodHlwZW9mIG9wdHMuaGVhZGVyc1snY29udGVudC10eXBlJ10gIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignTWlzc2luZyBDb250ZW50LVR5cGUtaGVhZGVyLicpXG4gIH1cblxuICBjb25zdCB7XG4gICAgaGVhZGVycyxcbiAgICAuLi5zdHJlYW1PcHRpb25zXG4gIH0gPSBvcHRzXG5cbiAgdGhpcy5vcHRzID0ge1xuICAgIGF1dG9EZXN0cm95OiBmYWxzZSxcbiAgICAuLi5zdHJlYW1PcHRpb25zXG4gIH1cbiAgV3JpdGFibGVTdHJlYW0uY2FsbCh0aGlzLCB0aGlzLm9wdHMpXG5cbiAgdGhpcy5fZG9uZSA9IGZhbHNlXG4gIHRoaXMuX3BhcnNlciA9IHRoaXMuZ2V0UGFyc2VyQnlIZWFkZXJzKGhlYWRlcnMpXG4gIHRoaXMuX2ZpbmlzaGVkID0gZmFsc2Vcbn1cbmluaGVyaXRzKEJ1c2JveSwgV3JpdGFibGVTdHJlYW0pXG5cbkJ1c2JveS5wcm90b3R5cGUuZW1pdCA9IGZ1bmN0aW9uIChldikge1xuICBpZiAoZXYgPT09ICdmaW5pc2gnKSB7XG4gICAgaWYgKCF0aGlzLl9kb25lKSB7XG4gICAgICB0aGlzLl9wYXJzZXI/LmVuZCgpXG4gICAgICByZXR1cm5cbiAgICB9IGVsc2UgaWYgKHRoaXMuX2ZpbmlzaGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5fZmluaXNoZWQgPSB0cnVlXG4gIH1cbiAgV3JpdGFibGVTdHJlYW0ucHJvdG90eXBlLmVtaXQuYXBwbHkodGhpcywgYXJndW1lbnRzKVxufVxuXG5CdXNib3kucHJvdG90eXBlLmdldFBhcnNlckJ5SGVhZGVycyA9IGZ1bmN0aW9uIChoZWFkZXJzKSB7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlUGFyYW1zKGhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddKVxuXG4gIGNvbnN0IGNmZyA9IHtcbiAgICBkZWZDaGFyc2V0OiB0aGlzLm9wdHMuZGVmQ2hhcnNldCxcbiAgICBmaWxlSHdtOiB0aGlzLm9wdHMuZmlsZUh3bSxcbiAgICBoZWFkZXJzLFxuICAgIGhpZ2hXYXRlck1hcms6IHRoaXMub3B0cy5oaWdoV2F0ZXJNYXJrLFxuICAgIGlzUGFydEFGaWxlOiB0aGlzLm9wdHMuaXNQYXJ0QUZpbGUsXG4gICAgbGltaXRzOiB0aGlzLm9wdHMubGltaXRzLFxuICAgIHBhcnNlZENvblR5cGU6IHBhcnNlZCxcbiAgICBwcmVzZXJ2ZVBhdGg6IHRoaXMub3B0cy5wcmVzZXJ2ZVBhdGhcbiAgfVxuXG4gIGlmIChNdWx0aXBhcnRQYXJzZXIuZGV0ZWN0LnRlc3QocGFyc2VkWzBdKSkge1xuICAgIHJldHVybiBuZXcgTXVsdGlwYXJ0UGFyc2VyKHRoaXMsIGNmZylcbiAgfVxuICBpZiAoVXJsZW5jb2RlZFBhcnNlci5kZXRlY3QudGVzdChwYXJzZWRbMF0pKSB7XG4gICAgcmV0dXJuIG5ldyBVcmxlbmNvZGVkUGFyc2VyKHRoaXMsIGNmZylcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIENvbnRlbnQtVHlwZS4nKVxufVxuXG5CdXNib3kucHJvdG90eXBlLl93cml0ZSA9IGZ1bmN0aW9uIChjaHVuaywgZW5jb2RpbmcsIGNiKSB7XG4gIHRoaXMuX3BhcnNlci53cml0ZShjaHVuaywgY2IpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gQnVzYm95XG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0ID0gQnVzYm95XG5tb2R1bGUuZXhwb3J0cy5CdXNib3kgPSBCdXNib3lcblxubW9kdWxlLmV4cG9ydHMuRGljZXIgPSBEaWNlclxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IE1lc3NhZ2VDaGFubmVsLCByZWNlaXZlTWVzc2FnZU9uUG9ydCB9ID0gcmVxdWlyZSgnd29ya2VyX3RocmVhZHMnKVxuXG5jb25zdCBjb3JzU2FmZUxpc3RlZE1ldGhvZHMgPSBbJ0dFVCcsICdIRUFEJywgJ1BPU1QnXVxuY29uc3QgY29yc1NhZmVMaXN0ZWRNZXRob2RzU2V0ID0gbmV3IFNldChjb3JzU2FmZUxpc3RlZE1ldGhvZHMpXG5cbmNvbnN0IG51bGxCb2R5U3RhdHVzID0gWzEwMSwgMjA0LCAyMDUsIDMwNF1cblxuY29uc3QgcmVkaXJlY3RTdGF0dXMgPSBbMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdXG5jb25zdCByZWRpcmVjdFN0YXR1c1NldCA9IG5ldyBTZXQocmVkaXJlY3RTdGF0dXMpXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNibG9jay1iYWQtcG9ydFxuY29uc3QgYmFkUG9ydHMgPSBbXG4gICcxJywgJzcnLCAnOScsICcxMScsICcxMycsICcxNScsICcxNycsICcxOScsICcyMCcsICcyMScsICcyMicsICcyMycsICcyNScsICczNycsICc0MicsICc0MycsICc1MycsICc2OScsICc3NycsICc3OScsXG4gICc4NycsICc5NScsICcxMDEnLCAnMTAyJywgJzEwMycsICcxMDQnLCAnMTA5JywgJzExMCcsICcxMTEnLCAnMTEzJywgJzExNScsICcxMTcnLCAnMTE5JywgJzEyMycsICcxMzUnLCAnMTM3JyxcbiAgJzEzOScsICcxNDMnLCAnMTYxJywgJzE3OScsICczODknLCAnNDI3JywgJzQ2NScsICc1MTInLCAnNTEzJywgJzUxNCcsICc1MTUnLCAnNTI2JywgJzUzMCcsICc1MzEnLCAnNTMyJyxcbiAgJzU0MCcsICc1NDgnLCAnNTU0JywgJzU1NicsICc1NjMnLCAnNTg3JywgJzYwMScsICc2MzYnLCAnOTg5JywgJzk5MCcsICc5OTMnLCAnOTk1JywgJzE3MTknLCAnMTcyMCcsICcxNzIzJyxcbiAgJzIwNDknLCAnMzY1OScsICc0MDQ1JywgJzUwNjAnLCAnNTA2MScsICc2MDAwJywgJzY1NjYnLCAnNjY2NScsICc2NjY2JywgJzY2NjcnLCAnNjY2OCcsICc2NjY5JywgJzY2OTcnLFxuICAnMTAwODAnXG5dXG5cbmNvbnN0IGJhZFBvcnRzU2V0ID0gbmV3IFNldChiYWRQb3J0cylcblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1yZWZlcnJlci1wb2xpY3kvI3JlZmVycmVyLXBvbGljaWVzXG5jb25zdCByZWZlcnJlclBvbGljeSA9IFtcbiAgJycsXG4gICduby1yZWZlcnJlcicsXG4gICduby1yZWZlcnJlci13aGVuLWRvd25ncmFkZScsXG4gICdzYW1lLW9yaWdpbicsXG4gICdvcmlnaW4nLFxuICAnc3RyaWN0LW9yaWdpbicsXG4gICdvcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nLFxuICAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbicsXG4gICd1bnNhZmUtdXJsJ1xuXVxuY29uc3QgcmVmZXJyZXJQb2xpY3lTZXQgPSBuZXcgU2V0KHJlZmVycmVyUG9saWN5KVxuXG5jb25zdCByZXF1ZXN0UmVkaXJlY3QgPSBbJ2ZvbGxvdycsICdtYW51YWwnLCAnZXJyb3InXVxuXG5jb25zdCBzYWZlTWV0aG9kcyA9IFsnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdUUkFDRSddXG5jb25zdCBzYWZlTWV0aG9kc1NldCA9IG5ldyBTZXQoc2FmZU1ldGhvZHMpXG5cbmNvbnN0IHJlcXVlc3RNb2RlID0gWyduYXZpZ2F0ZScsICdzYW1lLW9yaWdpbicsICduby1jb3JzJywgJ2NvcnMnXVxuXG5jb25zdCByZXF1ZXN0Q3JlZGVudGlhbHMgPSBbJ29taXQnLCAnc2FtZS1vcmlnaW4nLCAnaW5jbHVkZSddXG5cbmNvbnN0IHJlcXVlc3RDYWNoZSA9IFtcbiAgJ2RlZmF1bHQnLFxuICAnbm8tc3RvcmUnLFxuICAncmVsb2FkJyxcbiAgJ25vLWNhY2hlJyxcbiAgJ2ZvcmNlLWNhY2hlJyxcbiAgJ29ubHktaWYtY2FjaGVkJ1xuXVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdC1ib2R5LWhlYWRlci1uYW1lXG5jb25zdCByZXF1ZXN0Qm9keUhlYWRlciA9IFtcbiAgJ2NvbnRlbnQtZW5jb2RpbmcnLFxuICAnY29udGVudC1sYW5ndWFnZScsXG4gICdjb250ZW50LWxvY2F0aW9uJyxcbiAgJ2NvbnRlbnQtdHlwZScsXG4gIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjAyMVxuICAvLyAnQ29udGVudC1MZW5ndGgnIGlzIGEgZm9yYmlkZGVuIGhlYWRlciBuYW1lLCB3aGljaCBpcyB0eXBpY2FsbHlcbiAgLy8gcmVtb3ZlZCBpbiB0aGUgSGVhZGVycyBpbXBsZW1lbnRhdGlvbi4gSG93ZXZlciwgdW5kaWNpIGRvZXNuJ3RcbiAgLy8gZmlsdGVyIG91dCBoZWFkZXJzLCBzbyB3ZSBhZGQgaXQgaGVyZS5cbiAgJ2NvbnRlbnQtbGVuZ3RoJ1xuXVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZW51bWRlZi1yZXF1ZXN0ZHVwbGV4XG5jb25zdCByZXF1ZXN0RHVwbGV4ID0gW1xuICAnaGFsZidcbl1cblxuLy8gaHR0cDovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZm9yYmlkZGVuLW1ldGhvZFxuY29uc3QgZm9yYmlkZGVuTWV0aG9kcyA9IFsnQ09OTkVDVCcsICdUUkFDRScsICdUUkFDSyddXG5jb25zdCBmb3JiaWRkZW5NZXRob2RzU2V0ID0gbmV3IFNldChmb3JiaWRkZW5NZXRob2RzKVxuXG5jb25zdCBzdWJyZXNvdXJjZSA9IFtcbiAgJ2F1ZGlvJyxcbiAgJ2F1ZGlvd29ya2xldCcsXG4gICdmb250JyxcbiAgJ2ltYWdlJyxcbiAgJ21hbmlmZXN0JyxcbiAgJ3BhaW50d29ya2xldCcsXG4gICdzY3JpcHQnLFxuICAnc3R5bGUnLFxuICAndHJhY2snLFxuICAndmlkZW8nLFxuICAneHNsdCcsXG4gICcnXG5dXG5jb25zdCBzdWJyZXNvdXJjZVNldCA9IG5ldyBTZXQoc3VicmVzb3VyY2UpXG5cbi8qKiBAdHlwZSB7Z2xvYmFsVGhpc1snRE9NRXhjZXB0aW9uJ119ICovXG5jb25zdCBET01FeGNlcHRpb24gPSBnbG9iYWxUaGlzLkRPTUV4Y2VwdGlvbiA/PyAoKCkgPT4ge1xuICAvLyBET01FeGNlcHRpb24gd2FzIG9ubHkgbWFkZSBhIGdsb2JhbCBpbiBOb2RlIHYxNy4wLjAsXG4gIC8vIGJ1dCBmZXRjaCBzdXBwb3J0cyA+PSB2MTYuOC5cbiAgdHJ5IHtcbiAgICBhdG9iKCd+JylcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgcmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihlcnIpLmNvbnN0cnVjdG9yXG4gIH1cbn0pKClcblxubGV0IGNoYW5uZWxcblxuLyoqIEB0eXBlIHtnbG9iYWxUaGlzWydzdHJ1Y3R1cmVkQ2xvbmUnXX0gKi9cbmNvbnN0IHN0cnVjdHVyZWRDbG9uZSA9XG4gIGdsb2JhbFRoaXMuc3RydWN0dXJlZENsb25lID8/XG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL2IyN2FlMjRkY2M0MjUxYmFkNzI2ZDlkODRiYWY2NzhkMWY3MDdmZWQvbGliL2ludGVybmFsL3N0cnVjdHVyZWRfY2xvbmUuanNcbiAgLy8gc3RydWN0dXJlZENsb25lIHdhcyBhZGRlZCBpbiB2MTcuMC4wLCBidXQgZmV0Y2ggc3VwcG9ydHMgdjE2LjhcbiAgZnVuY3Rpb24gc3RydWN0dXJlZENsb25lICh2YWx1ZSwgb3B0aW9ucyA9IHVuZGVmaW5lZCkge1xuICAgIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdtaXNzaW5nIGFyZ3VtZW50JylcbiAgICB9XG5cbiAgICBpZiAoIWNoYW5uZWwpIHtcbiAgICAgIGNoYW5uZWwgPSBuZXcgTWVzc2FnZUNoYW5uZWwoKVxuICAgIH1cbiAgICBjaGFubmVsLnBvcnQxLnVucmVmKClcbiAgICBjaGFubmVsLnBvcnQyLnVucmVmKClcbiAgICBjaGFubmVsLnBvcnQxLnBvc3RNZXNzYWdlKHZhbHVlLCBvcHRpb25zPy50cmFuc2ZlcilcbiAgICByZXR1cm4gcmVjZWl2ZU1lc3NhZ2VPblBvcnQoY2hhbm5lbC5wb3J0MikubWVzc2FnZVxuICB9XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBET01FeGNlcHRpb24sXG4gIHN0cnVjdHVyZWRDbG9uZSxcbiAgc3VicmVzb3VyY2UsXG4gIGZvcmJpZGRlbk1ldGhvZHMsXG4gIHJlcXVlc3RCb2R5SGVhZGVyLFxuICByZWZlcnJlclBvbGljeSxcbiAgcmVxdWVzdFJlZGlyZWN0LFxuICByZXF1ZXN0TW9kZSxcbiAgcmVxdWVzdENyZWRlbnRpYWxzLFxuICByZXF1ZXN0Q2FjaGUsXG4gIHJlZGlyZWN0U3RhdHVzLFxuICBjb3JzU2FmZUxpc3RlZE1ldGhvZHMsXG4gIG51bGxCb2R5U3RhdHVzLFxuICBzYWZlTWV0aG9kcyxcbiAgYmFkUG9ydHMsXG4gIHJlcXVlc3REdXBsZXgsXG4gIHN1YnJlc291cmNlU2V0LFxuICBiYWRQb3J0c1NldCxcbiAgcmVkaXJlY3RTdGF0dXNTZXQsXG4gIGNvcnNTYWZlTGlzdGVkTWV0aG9kc1NldCxcbiAgc2FmZU1ldGhvZHNTZXQsXG4gIGZvcmJpZGRlbk1ldGhvZHNTZXQsXG4gIHJlZmVycmVyUG9saWN5U2V0XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8vIEluIGNhc2Ugb2YgYnJlYWtpbmcgY2hhbmdlcywgaW5jcmVhc2UgdGhlIHZlcnNpb25cbi8vIG51bWJlciB0byBhdm9pZCBjb25mbGljdHMuXG5jb25zdCBnbG9iYWxPcmlnaW4gPSBTeW1ib2wuZm9yKCd1bmRpY2kuZ2xvYmFsT3JpZ2luLjEnKVxuXG5mdW5jdGlvbiBnZXRHbG9iYWxPcmlnaW4gKCkge1xuICByZXR1cm4gZ2xvYmFsVGhpc1tnbG9iYWxPcmlnaW5dXG59XG5cbmZ1bmN0aW9uIHNldEdsb2JhbE9yaWdpbiAobmV3T3JpZ2luKSB7XG4gIGlmIChuZXdPcmlnaW4gPT09IHVuZGVmaW5lZCkge1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShnbG9iYWxUaGlzLCBnbG9iYWxPcmlnaW4sIHtcbiAgICAgIHZhbHVlOiB1bmRlZmluZWQsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICAgIH0pXG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHBhcnNlZFVSTCA9IG5ldyBVUkwobmV3T3JpZ2luKVxuXG4gIGlmIChwYXJzZWRVUkwucHJvdG9jb2wgIT09ICdodHRwOicgJiYgcGFyc2VkVVJMLnByb3RvY29sICE9PSAnaHR0cHM6Jykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE9ubHkgaHR0cCAmIGh0dHBzIHVybHMgYXJlIGFsbG93ZWQsIHJlY2VpdmVkICR7cGFyc2VkVVJMLnByb3RvY29sfWApXG4gIH1cblxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywgZ2xvYmFsT3JpZ2luLCB7XG4gICAgdmFsdWU6IHBhcnNlZFVSTCxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlXG4gIH0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRHbG9iYWxPcmlnaW4sXG4gIHNldEdsb2JhbE9yaWdpblxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHJlZGlyZWN0U3RhdHVzU2V0LCByZWZlcnJlclBvbGljeVNldDogcmVmZXJyZXJQb2xpY3lUb2tlbnMsIGJhZFBvcnRzU2V0IH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGdldEdsb2JhbE9yaWdpbiB9ID0gcmVxdWlyZSgnLi9nbG9iYWwnKVxuY29uc3QgeyBwZXJmb3JtYW5jZSB9ID0gcmVxdWlyZSgncGVyZl9ob29rcycpXG5jb25zdCB7IGlzQmxvYkxpa2UsIHRvVVNWU3RyaW5nLCBSZWFkYWJsZVN0cmVhbUZyb20gfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBpc1VpbnQ4QXJyYXkgfSA9IHJlcXVpcmUoJ3V0aWwvdHlwZXMnKVxuXG5sZXQgc3VwcG9ydGVkSGFzaGVzID0gW11cblxuLy8gaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9jcnlwdG8uaHRtbCNkZXRlcm1pbmluZy1pZi1jcnlwdG8tc3VwcG9ydC1pcy11bmF2YWlsYWJsZVxuLyoqIEB0eXBlIHtpbXBvcnQoJ2NyeXB0bycpfHVuZGVmaW5lZH0gKi9cbmxldCBjcnlwdG9cblxudHJ5IHtcbiAgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJylcbiAgY29uc3QgcG9zc2libGVSZWxldmFudEhhc2hlcyA9IFsnc2hhMjU2JywgJ3NoYTM4NCcsICdzaGE1MTInXVxuICBzdXBwb3J0ZWRIYXNoZXMgPSBjcnlwdG8uZ2V0SGFzaGVzKCkuZmlsdGVyKChoYXNoKSA9PiBwb3NzaWJsZVJlbGV2YW50SGFzaGVzLmluY2x1ZGVzKGhhc2gpKVxuLyogYzggaWdub3JlIG5leHQgMyAqL1xufSBjYXRjaCB7XG59XG5cbmZ1bmN0aW9uIHJlc3BvbnNlVVJMIChyZXNwb25zZSkge1xuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVzcG9uc2VzXG4gIC8vIEEgcmVzcG9uc2UgaGFzIGFuIGFzc29jaWF0ZWQgVVJMLiBJdCBpcyBhIHBvaW50ZXIgdG8gdGhlIGxhc3QgVVJMXG4gIC8vIGluIHJlc3BvbnNlXHUyMDE5cyBVUkwgbGlzdCBhbmQgbnVsbCBpZiByZXNwb25zZVx1MjAxOXMgVVJMIGxpc3QgaXMgZW1wdHkuXG4gIGNvbnN0IHVybExpc3QgPSByZXNwb25zZS51cmxMaXN0XG4gIGNvbnN0IGxlbmd0aCA9IHVybExpc3QubGVuZ3RoXG4gIHJldHVybiBsZW5ndGggPT09IDAgPyBudWxsIDogdXJsTGlzdFtsZW5ndGggLSAxXS50b1N0cmluZygpXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXJlc3BvbnNlLWxvY2F0aW9uLXVybFxuZnVuY3Rpb24gcmVzcG9uc2VMb2NhdGlvblVSTCAocmVzcG9uc2UsIHJlcXVlc3RGcmFnbWVudCkge1xuICAvLyAxLiBJZiByZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIG5vdCBhIHJlZGlyZWN0IHN0YXR1cywgdGhlbiByZXR1cm4gbnVsbC5cbiAgaWYgKCFyZWRpcmVjdFN0YXR1c1NldC5oYXMocmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyAyLiBMZXQgbG9jYXRpb24gYmUgdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nIGhlYWRlciBsaXN0IHZhbHVlcyBnaXZlblxuICAvLyBgTG9jYXRpb25gIGFuZCByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGxldCBsb2NhdGlvbiA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnbG9jYXRpb24nKVxuXG4gIC8vIDMuIElmIGxvY2F0aW9uIGlzIGEgaGVhZGVyIHZhbHVlLCB0aGVuIHNldCBsb2NhdGlvbiB0byB0aGUgcmVzdWx0IG9mXG4gIC8vICAgIHBhcnNpbmcgbG9jYXRpb24gd2l0aCByZXNwb25zZVx1MjAxOXMgVVJMLlxuICBpZiAobG9jYXRpb24gIT09IG51bGwgJiYgaXNWYWxpZEhlYWRlclZhbHVlKGxvY2F0aW9uKSkge1xuICAgIGxvY2F0aW9uID0gbmV3IFVSTChsb2NhdGlvbiwgcmVzcG9uc2VVUkwocmVzcG9uc2UpKVxuICB9XG5cbiAgLy8gNC4gSWYgbG9jYXRpb24gaXMgYSBVUkwgd2hvc2UgZnJhZ21lbnQgaXMgbnVsbCwgdGhlbiBzZXQgbG9jYXRpb25cdTIwMTlzXG4gIC8vIGZyYWdtZW50IHRvIHJlcXVlc3RGcmFnbWVudC5cbiAgaWYgKGxvY2F0aW9uICYmICFsb2NhdGlvbi5oYXNoKSB7XG4gICAgbG9jYXRpb24uaGFzaCA9IHJlcXVlc3RGcmFnbWVudFxuICB9XG5cbiAgLy8gNS4gUmV0dXJuIGxvY2F0aW9uLlxuICByZXR1cm4gbG9jYXRpb25cbn1cblxuLyoqIEByZXR1cm5zIHtVUkx9ICovXG5mdW5jdGlvbiByZXF1ZXN0Q3VycmVudFVSTCAocmVxdWVzdCkge1xuICByZXR1cm4gcmVxdWVzdC51cmxMaXN0W3JlcXVlc3QudXJsTGlzdC5sZW5ndGggLSAxXVxufVxuXG5mdW5jdGlvbiByZXF1ZXN0QmFkUG9ydCAocmVxdWVzdCkge1xuICAvLyAxLiBMZXQgdXJsIGJlIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMLlxuICBjb25zdCB1cmwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gIC8vIDIuIElmIHVybFx1MjAxOXMgc2NoZW1lIGlzIGFuIEhUVFAoUykgc2NoZW1lIGFuZCB1cmxcdTIwMTlzIHBvcnQgaXMgYSBiYWQgcG9ydCxcbiAgLy8gdGhlbiByZXR1cm4gYmxvY2tlZC5cbiAgaWYgKHVybElzSHR0cEh0dHBzU2NoZW1lKHVybCkgJiYgYmFkUG9ydHNTZXQuaGFzKHVybC5wb3J0KSkge1xuICAgIHJldHVybiAnYmxvY2tlZCdcbiAgfVxuXG4gIC8vIDMuIFJldHVybiBhbGxvd2VkLlxuICByZXR1cm4gJ2FsbG93ZWQnXG59XG5cbmZ1bmN0aW9uIGlzRXJyb3JMaWtlIChvYmplY3QpIHtcbiAgcmV0dXJuIG9iamVjdCBpbnN0YW5jZW9mIEVycm9yIHx8IChcbiAgICBvYmplY3Q/LmNvbnN0cnVjdG9yPy5uYW1lID09PSAnRXJyb3InIHx8XG4gICAgb2JqZWN0Py5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gJ0RPTUV4Y2VwdGlvbidcbiAgKVxufVxuXG4vLyBDaGVjayB3aGV0aGVyIHxzdGF0dXNUZXh0fCBpcyBhIEJ5dGVTdHJpbmcgYW5kXG4vLyBtYXRjaGVzIHRoZSBSZWFzb24tUGhyYXNlIHRva2VuIHByb2R1Y3Rpb24uXG4vLyBSRkMgMjYxNjogaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzI2MTZcbi8vIFJGQyA3MjMwOiBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMFxuLy8gXCJyZWFzb24tcGhyYXNlID0gKiggSFRBQiAvIFNQIC8gVkNIQVIgLyBvYnMtdGV4dCApXCJcbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJvbWl1bS9jaHJvbWl1bS9ibG9iLzk0LjAuNDYwNC4xL3RoaXJkX3BhcnR5L2JsaW5rL3JlbmRlcmVyL2NvcmUvZmV0Y2gvcmVzcG9uc2UuY2MjTDExNlxuZnVuY3Rpb24gaXNWYWxpZFJlYXNvblBocmFzZSAoc3RhdHVzVGV4dCkge1xuICBmb3IgKGxldCBpID0gMDsgaSA8IHN0YXR1c1RleHQubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBjID0gc3RhdHVzVGV4dC5jaGFyQ29kZUF0KGkpXG4gICAgaWYgKFxuICAgICAgIShcbiAgICAgICAgKFxuICAgICAgICAgIGMgPT09IDB4MDkgfHwgLy8gSFRBQlxuICAgICAgICAgIChjID49IDB4MjAgJiYgYyA8PSAweDdlKSB8fCAvLyBTUCAvIFZDSEFSXG4gICAgICAgICAgKGMgPj0gMHg4MCAmJiBjIDw9IDB4ZmYpXG4gICAgICAgICkgLy8gb2JzLXRleHRcbiAgICAgIClcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjIuNlxuICogQHBhcmFtIHtudW1iZXJ9IGNcbiAqL1xuZnVuY3Rpb24gaXNUb2tlbkNoYXJDb2RlIChjKSB7XG4gIHN3aXRjaCAoYykge1xuICAgIGNhc2UgMHgyMjpcbiAgICBjYXNlIDB4Mjg6XG4gICAgY2FzZSAweDI5OlxuICAgIGNhc2UgMHgyYzpcbiAgICBjYXNlIDB4MmY6XG4gICAgY2FzZSAweDNhOlxuICAgIGNhc2UgMHgzYjpcbiAgICBjYXNlIDB4M2M6XG4gICAgY2FzZSAweDNkOlxuICAgIGNhc2UgMHgzZTpcbiAgICBjYXNlIDB4M2Y6XG4gICAgY2FzZSAweDQwOlxuICAgIGNhc2UgMHg1YjpcbiAgICBjYXNlIDB4NWM6XG4gICAgY2FzZSAweDVkOlxuICAgIGNhc2UgMHg3YjpcbiAgICBjYXNlIDB4N2Q6XG4gICAgICAvLyBEUVVPVEUgYW5kIFwiKCksLzo7PD0+P0BbXFxde31cIlxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgZGVmYXVsdDpcbiAgICAgIC8vIFZDSEFSICV4MjEtN0VcbiAgICAgIHJldHVybiBjID49IDB4MjEgJiYgYyA8PSAweDdlXG4gIH1cbn1cblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhcmFjdGVyc1xuICovXG5mdW5jdGlvbiBpc1ZhbGlkSFRUUFRva2VuIChjaGFyYWN0ZXJzKSB7XG4gIGlmIChjaGFyYWN0ZXJzLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgY2hhcmFjdGVycy5sZW5ndGg7ICsraSkge1xuICAgIGlmICghaXNUb2tlbkNoYXJDb2RlKGNoYXJhY3RlcnMuY2hhckNvZGVBdChpKSkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cbiAgfVxuICByZXR1cm4gdHJ1ZVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2hlYWRlci1uYW1lXG4gKiBAcGFyYW0ge3N0cmluZ30gcG90ZW50aWFsVmFsdWVcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZEhlYWRlck5hbWUgKHBvdGVudGlhbFZhbHVlKSB7XG4gIHJldHVybiBpc1ZhbGlkSFRUUFRva2VuKHBvdGVudGlhbFZhbHVlKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2hlYWRlci12YWx1ZVxuICogQHBhcmFtIHtzdHJpbmd9IHBvdGVudGlhbFZhbHVlXG4gKi9cbmZ1bmN0aW9uIGlzVmFsaWRIZWFkZXJWYWx1ZSAocG90ZW50aWFsVmFsdWUpIHtcbiAgLy8gLSBIYXMgbm8gbGVhZGluZyBvciB0cmFpbGluZyBIVFRQIHRhYiBvciBzcGFjZSBieXRlcy5cbiAgLy8gLSBDb250YWlucyBubyAweDAwIChOVUwpIG9yIEhUVFAgbmV3bGluZSBieXRlcy5cbiAgaWYgKFxuICAgIHBvdGVudGlhbFZhbHVlLnN0YXJ0c1dpdGgoJ1xcdCcpIHx8XG4gICAgcG90ZW50aWFsVmFsdWUuc3RhcnRzV2l0aCgnICcpIHx8XG4gICAgcG90ZW50aWFsVmFsdWUuZW5kc1dpdGgoJ1xcdCcpIHx8XG4gICAgcG90ZW50aWFsVmFsdWUuZW5kc1dpdGgoJyAnKVxuICApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmIChcbiAgICBwb3RlbnRpYWxWYWx1ZS5pbmNsdWRlcygnXFwwJykgfHxcbiAgICBwb3RlbnRpYWxWYWx1ZS5pbmNsdWRlcygnXFxyJykgfHxcbiAgICBwb3RlbnRpYWxWYWx1ZS5pbmNsdWRlcygnXFxuJylcbiAgKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jc2V0LXJlcXVlc3RzLXJlZmVycmVyLXBvbGljeS1vbi1yZWRpcmVjdFxuZnVuY3Rpb24gc2V0UmVxdWVzdFJlZmVycmVyUG9saWN5T25SZWRpcmVjdCAocmVxdWVzdCwgYWN0dWFsUmVzcG9uc2UpIHtcbiAgLy8gIEdpdmVuIGEgcmVxdWVzdCByZXF1ZXN0IGFuZCBhIHJlc3BvbnNlIGFjdHVhbFJlc3BvbnNlLCB0aGlzIGFsZ29yaXRobVxuICAvLyAgdXBkYXRlcyByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kgYWNjb3JkaW5nIHRvIHRoZSBSZWZlcnJlci1Qb2xpY3lcbiAgLy8gIGhlYWRlciAoaWYgYW55KSBpbiBhY3R1YWxSZXNwb25zZS5cblxuICAvLyAxLiBMZXQgcG9saWN5IGJlIHRoZSByZXN1bHQgb2YgZXhlY3V0aW5nIFx1MDBBNyA4LjEgUGFyc2UgYSByZWZlcnJlciBwb2xpY3lcbiAgLy8gZnJvbSBhIFJlZmVycmVyLVBvbGljeSBoZWFkZXIgb24gYWN0dWFsUmVzcG9uc2UuXG5cbiAgLy8gOC4xIFBhcnNlIGEgcmVmZXJyZXIgcG9saWN5IGZyb20gYSBSZWZlcnJlci1Qb2xpY3kgaGVhZGVyXG4gIC8vIDEuIExldCBwb2xpY3ktdG9rZW5zIGJlIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZyBoZWFkZXIgbGlzdCB2YWx1ZXMgZ2l2ZW4gYFJlZmVycmVyLVBvbGljeWAgYW5kIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgY29uc3QgeyBoZWFkZXJzTGlzdCB9ID0gYWN0dWFsUmVzcG9uc2VcbiAgLy8gMi4gTGV0IHBvbGljeSBiZSB0aGUgZW1wdHkgc3RyaW5nLlxuICAvLyAzLiBGb3IgZWFjaCB0b2tlbiBpbiBwb2xpY3ktdG9rZW5zLCBpZiB0b2tlbiBpcyBhIHJlZmVycmVyIHBvbGljeSBhbmQgdG9rZW4gaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIHRoZW4gc2V0IHBvbGljeSB0byB0b2tlbi5cbiAgLy8gNC4gUmV0dXJuIHBvbGljeS5cbiAgY29uc3QgcG9saWN5SGVhZGVyID0gKGhlYWRlcnNMaXN0LmdldCgncmVmZXJyZXItcG9saWN5JykgPz8gJycpLnNwbGl0KCcsJylcblxuICAvLyBOb3RlOiBBcyB0aGUgcmVmZXJyZXItcG9saWN5IGNhbiBjb250YWluIG11bHRpcGxlIHBvbGljaWVzXG4gIC8vIHNlcGFyYXRlZCBieSBjb21tYSwgd2UgbmVlZCB0byBsb29wIHRocm91Z2ggYWxsIG9mIHRoZW1cbiAgLy8gYW5kIHBpY2sgdGhlIGZpcnN0IHZhbGlkIG9uZS5cbiAgLy8gUmVmOiBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvUmVmZXJyZXItUG9saWN5I3NwZWNpZnlfYV9mYWxsYmFja19wb2xpY3lcbiAgbGV0IHBvbGljeSA9ICcnXG4gIGlmIChwb2xpY3lIZWFkZXIubGVuZ3RoID4gMCkge1xuICAgIC8vIFRoZSByaWdodC1tb3N0IHBvbGljeSB0YWtlcyBwcmVjZWRlbmNlLlxuICAgIC8vIFRoZSBsZWZ0LW1vc3QgcG9saWN5IGlzIHRoZSBmYWxsYmFjay5cbiAgICBmb3IgKGxldCBpID0gcG9saWN5SGVhZGVyLmxlbmd0aDsgaSAhPT0gMDsgaS0tKSB7XG4gICAgICBjb25zdCB0b2tlbiA9IHBvbGljeUhlYWRlcltpIC0gMV0udHJpbSgpXG4gICAgICBpZiAocmVmZXJyZXJQb2xpY3lUb2tlbnMuaGFzKHRva2VuKSkge1xuICAgICAgICBwb2xpY3kgPSB0b2tlblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vIDIuIElmIHBvbGljeSBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgcG9saWN5IHRvIHBvbGljeS5cbiAgaWYgKHBvbGljeSAhPT0gJycpIHtcbiAgICByZXF1ZXN0LnJlZmVycmVyUG9saWN5ID0gcG9saWN5XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2Nyb3NzLW9yaWdpbi1yZXNvdXJjZS1wb2xpY3ktY2hlY2tcbmZ1bmN0aW9uIGNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayAoKSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuICdhbGxvd2VkJ1xufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1jb3JzLWNoZWNrXG5mdW5jdGlvbiBjb3JzQ2hlY2sgKCkge1xuICAvLyBUT0RPXG4gIHJldHVybiAnc3VjY2Vzcydcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdGFvLWNoZWNrXG5mdW5jdGlvbiBUQU9DaGVjayAoKSB7XG4gIC8vIFRPRE9cbiAgcmV0dXJuICdzdWNjZXNzJ1xufVxuXG5mdW5jdGlvbiBhcHBlbmRGZXRjaE1ldGFkYXRhIChodHRwUmVxdWVzdCkge1xuICAvLyAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1mZXRjaC1tZXRhZGF0YS8jc2VjLWZldGNoLWRlc3QtaGVhZGVyXG4gIC8vICBUT0RPXG5cbiAgLy8gIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtZmV0Y2gtbWV0YWRhdGEvI3NlYy1mZXRjaC1tb2RlLWhlYWRlclxuXG4gIC8vICAxLiBBc3NlcnQ6IHJcdTIwMTlzIHVybCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTC5cbiAgLy8gIFRPRE9cblxuICAvLyAgMi4gTGV0IGhlYWRlciBiZSBhIFN0cnVjdHVyZWQgSGVhZGVyIHdob3NlIHZhbHVlIGlzIGEgdG9rZW4uXG4gIGxldCBoZWFkZXIgPSBudWxsXG5cbiAgLy8gIDMuIFNldCBoZWFkZXJcdTIwMTlzIHZhbHVlIHRvIHJcdTIwMTlzIG1vZGUuXG4gIGhlYWRlciA9IGh0dHBSZXF1ZXN0Lm1vZGVcblxuICAvLyAgNC4gU2V0IGEgc3RydWN0dXJlZCBmaWVsZCB2YWx1ZSBgU2VjLUZldGNoLU1vZGVgL2hlYWRlciBpbiByXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3Quc2V0KCdzZWMtZmV0Y2gtbW9kZScsIGhlYWRlcilcblxuICAvLyAgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1mZXRjaC1tZXRhZGF0YS8jc2VjLWZldGNoLXNpdGUtaGVhZGVyXG4gIC8vICBUT0RPXG5cbiAgLy8gIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtZmV0Y2gtbWV0YWRhdGEvI3NlYy1mZXRjaC11c2VyLWhlYWRlclxuICAvLyAgVE9ET1xufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYXBwZW5kLWEtcmVxdWVzdC1vcmlnaW4taGVhZGVyXG5mdW5jdGlvbiBhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyIChyZXF1ZXN0KSB7XG4gIC8vIDEuIExldCBzZXJpYWxpemVkT3JpZ2luIGJlIHRoZSByZXN1bHQgb2YgYnl0ZS1zZXJpYWxpemluZyBhIHJlcXVlc3Qgb3JpZ2luIHdpdGggcmVxdWVzdC5cbiAgbGV0IHNlcmlhbGl6ZWRPcmlnaW4gPSByZXF1ZXN0Lm9yaWdpblxuXG4gIC8vIDIuIElmIHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIFwiY29yc1wiIG9yIHJlcXVlc3RcdTIwMTlzIG1vZGUgaXMgXCJ3ZWJzb2NrZXRcIiwgdGhlbiBhcHBlbmQgKGBPcmlnaW5gLCBzZXJpYWxpemVkT3JpZ2luKSB0byByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgaWYgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnIHx8IHJlcXVlc3QubW9kZSA9PT0gJ3dlYnNvY2tldCcpIHtcbiAgICBpZiAoc2VyaWFsaXplZE9yaWdpbikge1xuICAgICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ29yaWdpbicsIHNlcmlhbGl6ZWRPcmlnaW4pXG4gICAgfVxuXG4gIC8vIDMuIE90aGVyd2lzZSwgaWYgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzIG5laXRoZXIgYEdFVGAgbm9yIGBIRUFEYCwgdGhlbjpcbiAgfSBlbHNlIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0dFVCcgJiYgcmVxdWVzdC5tZXRob2QgIT09ICdIRUFEJykge1xuICAgIC8vIDEuIFN3aXRjaCBvbiByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3k6XG4gICAgc3dpdGNoIChyZXF1ZXN0LnJlZmVycmVyUG9saWN5KSB7XG4gICAgICBjYXNlICduby1yZWZlcnJlcic6XG4gICAgICAgIC8vIFNldCBzZXJpYWxpemVkT3JpZ2luIHRvIGBudWxsYC5cbiAgICAgICAgc2VyaWFsaXplZE9yaWdpbiA9IG51bGxcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ25vLXJlZmVycmVyLXdoZW4tZG93bmdyYWRlJzpcbiAgICAgIGNhc2UgJ3N0cmljdC1vcmlnaW4nOlxuICAgICAgY2FzZSAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbic6XG4gICAgICAgIC8vIElmIHJlcXVlc3RcdTIwMTlzIG9yaWdpbiBpcyBhIHR1cGxlIG9yaWdpbiwgaXRzIHNjaGVtZSBpcyBcImh0dHBzXCIsIGFuZCByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgc2NoZW1lIGlzIG5vdCBcImh0dHBzXCIsIHRoZW4gc2V0IHNlcmlhbGl6ZWRPcmlnaW4gdG8gYG51bGxgLlxuICAgICAgICBpZiAocmVxdWVzdC5vcmlnaW4gJiYgdXJsSGFzSHR0cHNTY2hlbWUocmVxdWVzdC5vcmlnaW4pICYmICF1cmxIYXNIdHRwc1NjaGVtZShyZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KSkpIHtcbiAgICAgICAgICBzZXJpYWxpemVkT3JpZ2luID0gbnVsbFxuICAgICAgICB9XG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdzYW1lLW9yaWdpbic6XG4gICAgICAgIC8vIElmIHJlcXVlc3RcdTIwMTlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgb3JpZ2luLCB0aGVuIHNldCBzZXJpYWxpemVkT3JpZ2luIHRvIGBudWxsYC5cbiAgICAgICAgaWYgKCFzYW1lT3JpZ2luKHJlcXVlc3QsIHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpKSkge1xuICAgICAgICAgIHNlcmlhbGl6ZWRPcmlnaW4gPSBudWxsXG4gICAgICAgIH1cbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIC8vIERvIG5vdGhpbmcuXG4gICAgfVxuXG4gICAgaWYgKHNlcmlhbGl6ZWRPcmlnaW4pIHtcbiAgICAgIC8vIDIuIEFwcGVuZCAoYE9yaWdpbmAsIHNlcmlhbGl6ZWRPcmlnaW4pIHRvIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ29yaWdpbicsIHNlcmlhbGl6ZWRPcmlnaW4pXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGNvYXJzZW5lZFNoYXJlZEN1cnJlbnRUaW1lIChjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSkge1xuICAvLyBUT0RPXG4gIHJldHVybiBwZXJmb3JtYW5jZS5ub3coKVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY3JlYXRlLWFuLW9wYXF1ZS10aW1pbmctaW5mb1xuZnVuY3Rpb24gY3JlYXRlT3BhcXVlVGltaW5nSW5mbyAodGltaW5nSW5mbykge1xuICByZXR1cm4ge1xuICAgIHN0YXJ0VGltZTogdGltaW5nSW5mby5zdGFydFRpbWUgPz8gMCxcbiAgICByZWRpcmVjdFN0YXJ0VGltZTogMCxcbiAgICByZWRpcmVjdEVuZFRpbWU6IDAsXG4gICAgcG9zdFJlZGlyZWN0U3RhcnRUaW1lOiB0aW1pbmdJbmZvLnN0YXJ0VGltZSA/PyAwLFxuICAgIGZpbmFsU2VydmljZVdvcmtlclN0YXJ0VGltZTogMCxcbiAgICBmaW5hbE5ldHdvcmtSZXNwb25zZVN0YXJ0VGltZTogMCxcbiAgICBmaW5hbE5ldHdvcmtSZXF1ZXN0U3RhcnRUaW1lOiAwLFxuICAgIGVuZFRpbWU6IDAsXG4gICAgZW5jb2RlZEJvZHlTaXplOiAwLFxuICAgIGRlY29kZWRCb2R5U2l6ZTogMCxcbiAgICBmaW5hbENvbm5lY3Rpb25UaW1pbmdJbmZvOiBudWxsXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvb3JpZ2luLmh0bWwjcG9saWN5LWNvbnRhaW5lclxuZnVuY3Rpb24gbWFrZVBvbGljeUNvbnRhaW5lciAoKSB7XG4gIC8vIE5vdGU6IHRoZSBmZXRjaCBzcGVjIGRvZXNuJ3QgbWFrZSB1c2Ugb2YgZW1iZWRkZXIgcG9saWN5IG9yIENTUCBsaXN0XG4gIHJldHVybiB7XG4gICAgcmVmZXJyZXJQb2xpY3k6ICdzdHJpY3Qtb3JpZ2luLXdoZW4tY3Jvc3Mtb3JpZ2luJ1xuICB9XG59XG5cbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL29yaWdpbi5odG1sI2Nsb25lLWEtcG9saWN5LWNvbnRhaW5lclxuZnVuY3Rpb24gY2xvbmVQb2xpY3lDb250YWluZXIgKHBvbGljeUNvbnRhaW5lcikge1xuICByZXR1cm4ge1xuICAgIHJlZmVycmVyUG9saWN5OiBwb2xpY3lDb250YWluZXIucmVmZXJyZXJQb2xpY3lcbiAgfVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jZGV0ZXJtaW5lLXJlcXVlc3RzLXJlZmVycmVyXG5mdW5jdGlvbiBkZXRlcm1pbmVSZXF1ZXN0c1JlZmVycmVyIChyZXF1ZXN0KSB7XG4gIC8vIDEuIExldCBwb2xpY3kgYmUgcmVxdWVzdCdzIHJlZmVycmVyIHBvbGljeS5cbiAgY29uc3QgcG9saWN5ID0gcmVxdWVzdC5yZWZlcnJlclBvbGljeVxuXG4gIC8vIE5vdGU6IHBvbGljeSBjYW5ub3QgKHNob3VsZG4ndCkgYmUgbnVsbCBvciBhbiBlbXB0eSBzdHJpbmcuXG4gIGFzc2VydChwb2xpY3kpXG5cbiAgLy8gMi4gTGV0IGVudmlyb25tZW50IGJlIHJlcXVlc3RcdTIwMTlzIGNsaWVudC5cblxuICBsZXQgcmVmZXJyZXJTb3VyY2UgPSBudWxsXG5cbiAgLy8gMy4gU3dpdGNoIG9uIHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyOlxuICBpZiAocmVxdWVzdC5yZWZlcnJlciA9PT0gJ2NsaWVudCcpIHtcbiAgICAvLyBOb3RlOiBub2RlIGlzbid0IGEgYnJvd3NlciBhbmQgZG9lc24ndCBpbXBsZW1lbnQgZG9jdW1lbnQvaWZyYW1lcyxcbiAgICAvLyBzbyB3ZSBieXBhc3MgdGhpcyBzdGVwIGFuZCByZXBsYWNlIGl0IHdpdGggb3VyIG93bi5cblxuICAgIGNvbnN0IGdsb2JhbE9yaWdpbiA9IGdldEdsb2JhbE9yaWdpbigpXG5cbiAgICBpZiAoIWdsb2JhbE9yaWdpbiB8fCBnbG9iYWxPcmlnaW4ub3JpZ2luID09PSAnbnVsbCcpIHtcbiAgICAgIHJldHVybiAnbm8tcmVmZXJyZXInXG4gICAgfVxuXG4gICAgLy8gbm90ZTogd2UgbmVlZCB0byBjbG9uZSBpdCBhcyBpdCdzIG11dGF0ZWRcbiAgICByZWZlcnJlclNvdXJjZSA9IG5ldyBVUkwoZ2xvYmFsT3JpZ2luKVxuICB9IGVsc2UgaWYgKHJlcXVlc3QucmVmZXJyZXIgaW5zdGFuY2VvZiBVUkwpIHtcbiAgICAvLyBMZXQgcmVmZXJyZXJTb3VyY2UgYmUgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIuXG4gICAgcmVmZXJyZXJTb3VyY2UgPSByZXF1ZXN0LnJlZmVycmVyXG4gIH1cblxuICAvLyA0LiBMZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXJVUkwgYmUgdGhlIHJlc3VsdCBvZiBzdHJpcHBpbmcgcmVmZXJyZXJTb3VyY2UgZm9yXG4gIC8vICAgIHVzZSBhcyBhIHJlZmVycmVyLlxuICBsZXQgcmVmZXJyZXJVUkwgPSBzdHJpcFVSTEZvclJlZmVycmVyKHJlZmVycmVyU291cmNlKVxuXG4gIC8vIDUuIExldCByZWZlcnJlck9yaWdpbiBiZSB0aGUgcmVzdWx0IG9mIHN0cmlwcGluZyByZWZlcnJlclNvdXJjZSBmb3IgdXNlIGFzXG4gIC8vICAgIGEgcmVmZXJyZXIsIHdpdGggdGhlIG9yaWdpbi1vbmx5IGZsYWcgc2V0IHRvIHRydWUuXG4gIGNvbnN0IHJlZmVycmVyT3JpZ2luID0gc3RyaXBVUkxGb3JSZWZlcnJlcihyZWZlcnJlclNvdXJjZSwgdHJ1ZSlcblxuICAvLyA2LiBJZiB0aGUgcmVzdWx0IG9mIHNlcmlhbGl6aW5nIHJlZmVycmVyVVJMIGlzIGEgc3RyaW5nIHdob3NlIGxlbmd0aCBpc1xuICAvLyAgICBncmVhdGVyIHRoYW4gNDA5Niwgc2V0IHJlZmVycmVyVVJMIHRvIHJlZmVycmVyT3JpZ2luLlxuICBpZiAocmVmZXJyZXJVUkwudG9TdHJpbmcoKS5sZW5ndGggPiA0MDk2KSB7XG4gICAgcmVmZXJyZXJVUkwgPSByZWZlcnJlck9yaWdpblxuICB9XG5cbiAgY29uc3QgYXJlU2FtZU9yaWdpbiA9IHNhbWVPcmlnaW4ocmVxdWVzdCwgcmVmZXJyZXJVUkwpXG4gIGNvbnN0IGlzTm9uUG90ZW50aWFsbHlUcnVzdFdvcnRoeSA9IGlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShyZWZlcnJlclVSTCkgJiZcbiAgICAhaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5KHJlcXVlc3QudXJsKVxuXG4gIC8vIDguIEV4ZWN1dGUgdGhlIHN3aXRjaCBzdGF0ZW1lbnRzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHZhbHVlIG9mIHBvbGljeTpcbiAgc3dpdGNoIChwb2xpY3kpIHtcbiAgICBjYXNlICdvcmlnaW4nOiByZXR1cm4gcmVmZXJyZXJPcmlnaW4gIT0gbnVsbCA/IHJlZmVycmVyT3JpZ2luIDogc3RyaXBVUkxGb3JSZWZlcnJlcihyZWZlcnJlclNvdXJjZSwgdHJ1ZSlcbiAgICBjYXNlICd1bnNhZmUtdXJsJzogcmV0dXJuIHJlZmVycmVyVVJMXG4gICAgY2FzZSAnc2FtZS1vcmlnaW4nOlxuICAgICAgcmV0dXJuIGFyZVNhbWVPcmlnaW4gPyByZWZlcnJlck9yaWdpbiA6ICduby1yZWZlcnJlcidcbiAgICBjYXNlICdvcmlnaW4td2hlbi1jcm9zcy1vcmlnaW4nOlxuICAgICAgcmV0dXJuIGFyZVNhbWVPcmlnaW4gPyByZWZlcnJlclVSTCA6IHJlZmVycmVyT3JpZ2luXG4gICAgY2FzZSAnc3RyaWN0LW9yaWdpbi13aGVuLWNyb3NzLW9yaWdpbic6IHtcbiAgICAgIGNvbnN0IGN1cnJlbnRVUkwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuXG4gICAgICAvLyAxLiBJZiB0aGUgb3JpZ2luIG9mIHJlZmVycmVyVVJMIGFuZCB0aGUgb3JpZ2luIG9mIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnRcbiAgICAgIC8vICAgIFVSTCBhcmUgdGhlIHNhbWUsIHRoZW4gcmV0dXJuIHJlZmVycmVyVVJMLlxuICAgICAgaWYgKHNhbWVPcmlnaW4ocmVmZXJyZXJVUkwsIGN1cnJlbnRVUkwpKSB7XG4gICAgICAgIHJldHVybiByZWZlcnJlclVSTFxuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiByZWZlcnJlclVSTCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCBhbmQgcmVxdWVzdFx1MjAxOXNcbiAgICAgIC8vICAgIGN1cnJlbnQgVVJMIGlzIG5vdCBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCwgdGhlbiByZXR1cm4gbm9cbiAgICAgIC8vICAgIHJlZmVycmVyLlxuICAgICAgaWYgKGlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShyZWZlcnJlclVSTCkgJiYgIWlzVVJMUG90ZW50aWFsbHlUcnVzdHdvcnRoeShjdXJyZW50VVJMKSkge1xuICAgICAgICByZXR1cm4gJ25vLXJlZmVycmVyJ1xuICAgICAgfVxuXG4gICAgICAvLyAzLiBSZXR1cm4gcmVmZXJyZXJPcmlnaW4uXG4gICAgICByZXR1cm4gcmVmZXJyZXJPcmlnaW5cbiAgICB9XG4gICAgY2FzZSAnc3RyaWN0LW9yaWdpbic6IC8vIGVzbGludC1kaXNhYmxlLWxpbmVcbiAgICAgIC8qKlxuICAgICAgICAgKiAxLiBJZiByZWZlcnJlclVSTCBpcyBhIHBvdGVudGlhbGx5IHRydXN0d29ydGh5IFVSTCBhbmRcbiAgICAgICAgICogcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkwgaXMgbm90IGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMLFxuICAgICAgICAgKiB0aGVuIHJldHVybiBubyByZWZlcnJlci5cbiAgICAgICAgICogMi4gUmV0dXJuIHJlZmVycmVyT3JpZ2luXG4gICAgICAgICovXG4gICAgY2FzZSAnbm8tcmVmZXJyZXItd2hlbi1kb3duZ3JhZGUnOiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICAvKipcbiAgICAgICAqIDEuIElmIHJlZmVycmVyVVJMIGlzIGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMIGFuZFxuICAgICAgICogcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkwgaXMgbm90IGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMLFxuICAgICAgICogdGhlbiByZXR1cm4gbm8gcmVmZXJyZXIuXG4gICAgICAgKiAyLiBSZXR1cm4gcmVmZXJyZXJPcmlnaW5cbiAgICAgICovXG5cbiAgICBkZWZhdWx0OiAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4gICAgICByZXR1cm4gaXNOb25Qb3RlbnRpYWxseVRydXN0V29ydGh5ID8gJ25vLXJlZmVycmVyJyA6IHJlZmVycmVyT3JpZ2luXG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby93ZWJhcHBzZWMtcmVmZXJyZXItcG9saWN5LyNzdHJpcC11cmxcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqIEBwYXJhbSB7Ym9vbGVhbnx1bmRlZmluZWR9IG9yaWdpbk9ubHlcbiAqL1xuZnVuY3Rpb24gc3RyaXBVUkxGb3JSZWZlcnJlciAodXJsLCBvcmlnaW5Pbmx5KSB7XG4gIC8vIDEuIEFzc2VydDogdXJsIGlzIGEgVVJMLlxuICBhc3NlcnQodXJsIGluc3RhbmNlb2YgVVJMKVxuXG4gIC8vIDIuIElmIHVybFx1MjAxOXMgc2NoZW1lIGlzIGEgbG9jYWwgc2NoZW1lLCB0aGVuIHJldHVybiBubyByZWZlcnJlci5cbiAgaWYgKHVybC5wcm90b2NvbCA9PT0gJ2ZpbGU6JyB8fCB1cmwucHJvdG9jb2wgPT09ICdhYm91dDonIHx8IHVybC5wcm90b2NvbCA9PT0gJ2JsYW5rOicpIHtcbiAgICByZXR1cm4gJ25vLXJlZmVycmVyJ1xuICB9XG5cbiAgLy8gMy4gU2V0IHVybFx1MjAxOXMgdXNlcm5hbWUgdG8gdGhlIGVtcHR5IHN0cmluZy5cbiAgdXJsLnVzZXJuYW1lID0gJydcblxuICAvLyA0LiBTZXQgdXJsXHUyMDE5cyBwYXNzd29yZCB0byB0aGUgZW1wdHkgc3RyaW5nLlxuICB1cmwucGFzc3dvcmQgPSAnJ1xuXG4gIC8vIDUuIFNldCB1cmxcdTIwMTlzIGZyYWdtZW50IHRvIG51bGwuXG4gIHVybC5oYXNoID0gJydcblxuICAvLyA2LiBJZiB0aGUgb3JpZ2luLW9ubHkgZmxhZyBpcyB0cnVlLCB0aGVuOlxuICBpZiAob3JpZ2luT25seSkge1xuICAgIC8vIDEuIFNldCB1cmxcdTIwMTlzIHBhdGggdG8gXHUwMEFCIHRoZSBlbXB0eSBzdHJpbmcgXHUwMEJCLlxuICAgIHVybC5wYXRobmFtZSA9ICcnXG5cbiAgICAvLyAyLiBTZXQgdXJsXHUyMDE5cyBxdWVyeSB0byBudWxsLlxuICAgIHVybC5zZWFyY2ggPSAnJ1xuICB9XG5cbiAgLy8gNy4gUmV0dXJuIHVybC5cbiAgcmV0dXJuIHVybFxufVxuXG5mdW5jdGlvbiBpc1VSTFBvdGVudGlhbGx5VHJ1c3R3b3J0aHkgKHVybCkge1xuICBpZiAoISh1cmwgaW5zdGFuY2VvZiBVUkwpKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvLyBJZiBjaGlsZCBvZiBhYm91dCwgcmV0dXJuIHRydWVcbiAgaWYgKHVybC5ocmVmID09PSAnYWJvdXQ6YmxhbmsnIHx8IHVybC5ocmVmID09PSAnYWJvdXQ6c3JjZG9jJykge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyBJZiBzY2hlbWUgaXMgZGF0YSwgcmV0dXJuIHRydWVcbiAgaWYgKHVybC5wcm90b2NvbCA9PT0gJ2RhdGE6JykgcmV0dXJuIHRydWVcblxuICAvLyBJZiBmaWxlLCByZXR1cm4gdHJ1ZVxuICBpZiAodXJsLnByb3RvY29sID09PSAnZmlsZTonKSByZXR1cm4gdHJ1ZVxuXG4gIHJldHVybiBpc09yaWdpblBvdGVudGlhbGx5VHJ1c3R3b3J0aHkodXJsLm9yaWdpbilcblxuICBmdW5jdGlvbiBpc09yaWdpblBvdGVudGlhbGx5VHJ1c3R3b3J0aHkgKG9yaWdpbikge1xuICAgIC8vIElmIG9yaWdpbiBpcyBleHBsaWNpdGx5IG51bGwsIHJldHVybiBmYWxzZVxuICAgIGlmIChvcmlnaW4gPT0gbnVsbCB8fCBvcmlnaW4gPT09ICdudWxsJykgcmV0dXJuIGZhbHNlXG5cbiAgICBjb25zdCBvcmlnaW5Bc1VSTCA9IG5ldyBVUkwob3JpZ2luKVxuXG4gICAgLy8gSWYgc2VjdXJlLCByZXR1cm4gdHJ1ZVxuICAgIGlmIChvcmlnaW5Bc1VSTC5wcm90b2NvbCA9PT0gJ2h0dHBzOicgfHwgb3JpZ2luQXNVUkwucHJvdG9jb2wgPT09ICd3c3M6Jykge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICAvLyBJZiBsb2NhbGhvc3Qgb3IgdmFyaWFudHMsIHJldHVybiB0cnVlXG4gICAgaWYgKC9eMTI3KD86XFwuWzAtOV0rKXswLDJ9XFwuWzAtOV0rJHxeXFxbKD86MCo6KSo/Oj8wKjFcXF0kLy50ZXN0KG9yaWdpbkFzVVJMLmhvc3RuYW1lKSB8fFxuICAgICAob3JpZ2luQXNVUkwuaG9zdG5hbWUgPT09ICdsb2NhbGhvc3QnIHx8IG9yaWdpbkFzVVJMLmhvc3RuYW1lLmluY2x1ZGVzKCdsb2NhbGhvc3QuJykpIHx8XG4gICAgIChvcmlnaW5Bc1VSTC5ob3N0bmFtZS5lbmRzV2l0aCgnLmxvY2FsaG9zdCcpKSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG5cbiAgICAvLyBJZiBhbnkgb3RoZXIsIHJldHVybiBmYWxzZVxuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXN1YnJlc291cmNlLWludGVncml0eS8jZG9lcy1yZXNwb25zZS1tYXRjaC1tZXRhZGF0YWxpc3RcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gYnl0ZXNcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRhZGF0YUxpc3RcbiAqL1xuZnVuY3Rpb24gYnl0ZXNNYXRjaCAoYnl0ZXMsIG1ldGFkYXRhTGlzdCkge1xuICAvLyBJZiBub2RlIGlzIG5vdCBidWlsdCB3aXRoIE9wZW5TU0wgc3VwcG9ydCwgd2UgY2Fubm90IGNoZWNrXG4gIC8vIGEgcmVxdWVzdCdzIGludGVncml0eSwgc28gYWxsb3cgaXQgYnkgZGVmYXVsdCAodGhlIHNwZWMgd2lsbFxuICAvLyBhbGxvdyByZXF1ZXN0cyBpZiBhbiBpbnZhbGlkIGhhc2ggaXMgZ2l2ZW4sIGFzIHByZWNlZGVuY2UpLlxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgaWY6IG9ubHkgaWYgbm9kZSBpcyBidWlsdCB3aXRoIC0td2l0aG91dC1zc2wgKi9cbiAgaWYgKGNyeXB0byA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIDEuIExldCBwYXJzZWRNZXRhZGF0YSBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgbWV0YWRhdGFMaXN0LlxuICBjb25zdCBwYXJzZWRNZXRhZGF0YSA9IHBhcnNlTWV0YWRhdGEobWV0YWRhdGFMaXN0KVxuXG4gIC8vIDIuIElmIHBhcnNlZE1ldGFkYXRhIGlzIG5vIG1ldGFkYXRhLCByZXR1cm4gdHJ1ZS5cbiAgaWYgKHBhcnNlZE1ldGFkYXRhID09PSAnbm8gbWV0YWRhdGEnKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIDMuIElmIHJlc3BvbnNlIGlzIG5vdCBlbGlnaWJsZSBmb3IgaW50ZWdyaXR5IHZhbGlkYXRpb24sIHJldHVybiBmYWxzZS5cbiAgLy8gVE9ET1xuXG4gIC8vIDQuIElmIHBhcnNlZE1ldGFkYXRhIGlzIHRoZSBlbXB0eSBzZXQsIHJldHVybiB0cnVlLlxuICBpZiAocGFyc2VkTWV0YWRhdGEubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIC8vIDUuIExldCBtZXRhZGF0YSBiZSB0aGUgcmVzdWx0IG9mIGdldHRpbmcgdGhlIHN0cm9uZ2VzdFxuICAvLyAgICBtZXRhZGF0YSBmcm9tIHBhcnNlZE1ldGFkYXRhLlxuICBjb25zdCBzdHJvbmdlc3QgPSBnZXRTdHJvbmdlc3RNZXRhZGF0YShwYXJzZWRNZXRhZGF0YSlcbiAgY29uc3QgbWV0YWRhdGEgPSBmaWx0ZXJNZXRhZGF0YUxpc3RCeUFsZ29yaXRobShwYXJzZWRNZXRhZGF0YSwgc3Ryb25nZXN0KVxuXG4gIC8vIDYuIEZvciBlYWNoIGl0ZW0gaW4gbWV0YWRhdGE6XG4gIGZvciAoY29uc3QgaXRlbSBvZiBtZXRhZGF0YSkge1xuICAgIC8vIDEuIExldCBhbGdvcml0aG0gYmUgdGhlIGFsZyBjb21wb25lbnQgb2YgaXRlbS5cbiAgICBjb25zdCBhbGdvcml0aG0gPSBpdGVtLmFsZ29cblxuICAgIC8vIDIuIExldCBleHBlY3RlZFZhbHVlIGJlIHRoZSB2YWwgY29tcG9uZW50IG9mIGl0ZW0uXG4gICAgY29uc3QgZXhwZWN0ZWRWYWx1ZSA9IGl0ZW0uaGFzaFxuXG4gICAgLy8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0L2NvbW1pdC9lNGM1Y2M3YTVlNDgwOTMyMjA1MjhkZmRkMWM0MDEyZGMzODM3YTBlXG4gICAgLy8gXCJiZSBsaWJlcmFsIHdpdGggcGFkZGluZ1wiLiBUaGlzIGlzIGFubm95aW5nLCBhbmQgaXQncyBub3QgZXZlbiBpbiB0aGUgc3BlYy5cblxuICAgIC8vIDMuIExldCBhY3R1YWxWYWx1ZSBiZSB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIGFsZ29yaXRobSB0byBieXRlcy5cbiAgICBsZXQgYWN0dWFsVmFsdWUgPSBjcnlwdG8uY3JlYXRlSGFzaChhbGdvcml0aG0pLnVwZGF0ZShieXRlcykuZGlnZXN0KCdiYXNlNjQnKVxuXG4gICAgaWYgKGFjdHVhbFZhbHVlW2FjdHVhbFZhbHVlLmxlbmd0aCAtIDFdID09PSAnPScpIHtcbiAgICAgIGlmIChhY3R1YWxWYWx1ZVthY3R1YWxWYWx1ZS5sZW5ndGggLSAyXSA9PT0gJz0nKSB7XG4gICAgICAgIGFjdHVhbFZhbHVlID0gYWN0dWFsVmFsdWUuc2xpY2UoMCwgLTIpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBhY3R1YWxWYWx1ZSA9IGFjdHVhbFZhbHVlLnNsaWNlKDAsIC0xKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuIElmIGFjdHVhbFZhbHVlIGlzIGEgY2FzZS1zZW5zaXRpdmUgbWF0Y2ggZm9yIGV4cGVjdGVkVmFsdWUsXG4gICAgLy8gICAgcmV0dXJuIHRydWUuXG4gICAgaWYgKGNvbXBhcmVCYXNlNjRNaXhlZChhY3R1YWxWYWx1ZSwgZXhwZWN0ZWRWYWx1ZSkpIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuICB9XG5cbiAgLy8gNy4gUmV0dXJuIGZhbHNlLlxuICByZXR1cm4gZmFsc2Vcbn1cblxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL3dlYmFwcHNlYy1zdWJyZXNvdXJjZS1pbnRlZ3JpdHkvI2dyYW1tYXJkZWYtaGFzaC13aXRoLW9wdGlvbnNcbi8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9DU1AyLyNzb3VyY2UtbGlzdC1zeW50YXhcbi8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM1MjM0I2FwcGVuZGl4LUIuMVxuY29uc3QgcGFyc2VIYXNoV2l0aE9wdGlvbnMgPSAvKD88YWxnbz5zaGEyNTZ8c2hhMzg0fHNoYTUxMiktKCg/PGhhc2g+W0EtWmEtejAtOSsvXSt8W0EtWmEtejAtOV8tXSspPXswLDJ9KD86XFxzfCQpKCArWyEtfl0qKT8pPy9pXG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXN1YnJlc291cmNlLWludGVncml0eS8jcGFyc2UtbWV0YWRhdGFcbiAqIEBwYXJhbSB7c3RyaW5nfSBtZXRhZGF0YVxuICovXG5mdW5jdGlvbiBwYXJzZU1ldGFkYXRhIChtZXRhZGF0YSkge1xuICAvLyAxLiBMZXQgcmVzdWx0IGJlIHRoZSBlbXB0eSBzZXQuXG4gIC8qKiBAdHlwZSB7eyBhbGdvOiBzdHJpbmcsIGhhc2g6IHN0cmluZyB9W119ICovXG4gIGNvbnN0IHJlc3VsdCA9IFtdXG5cbiAgLy8gMi4gTGV0IGVtcHR5IGJlIGVxdWFsIHRvIHRydWUuXG4gIGxldCBlbXB0eSA9IHRydWVcblxuICAvLyAzLiBGb3IgZWFjaCB0b2tlbiByZXR1cm5lZCBieSBzcGxpdHRpbmcgbWV0YWRhdGEgb24gc3BhY2VzOlxuICBmb3IgKGNvbnN0IHRva2VuIG9mIG1ldGFkYXRhLnNwbGl0KCcgJykpIHtcbiAgICAvLyAxLiBTZXQgZW1wdHkgdG8gZmFsc2UuXG4gICAgZW1wdHkgPSBmYWxzZVxuXG4gICAgLy8gMi4gUGFyc2UgdG9rZW4gYXMgYSBoYXNoLXdpdGgtb3B0aW9ucy5cbiAgICBjb25zdCBwYXJzZWRUb2tlbiA9IHBhcnNlSGFzaFdpdGhPcHRpb25zLmV4ZWModG9rZW4pXG5cbiAgICAvLyAzLiBJZiB0b2tlbiBkb2VzIG5vdCBwYXJzZSwgY29udGludWUgdG8gdGhlIG5leHQgdG9rZW4uXG4gICAgaWYgKFxuICAgICAgcGFyc2VkVG9rZW4gPT09IG51bGwgfHxcbiAgICAgIHBhcnNlZFRva2VuLmdyb3VwcyA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICBwYXJzZWRUb2tlbi5ncm91cHMuYWxnbyA9PT0gdW5kZWZpbmVkXG4gICAgKSB7XG4gICAgICAvLyBOb3RlOiBDaHJvbWl1bSBibG9ja3MgdGhlIHJlcXVlc3QgYXQgdGhpcyBwb2ludCwgYnV0IEZpcmVmb3hcbiAgICAgIC8vIGdpdmVzIGEgd2FybmluZyB0aGF0IGFuIGludmFsaWQgaW50ZWdyaXR5IHdhcyBnaXZlbi4gVGhlXG4gICAgICAvLyBjb3JyZWN0IGJlaGF2aW9yIGlzIHRvIGlnbm9yZSB0aGVzZSwgYW5kIHN1YnNlcXVlbnRseSBub3RcbiAgICAgIC8vIGNoZWNrIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIHJlc291cmNlLlxuICAgICAgY29udGludWVcbiAgICB9XG5cbiAgICAvLyA0LiBMZXQgYWxnb3JpdGhtIGJlIHRoZSBoYXNoLWFsZ28gY29tcG9uZW50IG9mIHRva2VuLlxuICAgIGNvbnN0IGFsZ29yaXRobSA9IHBhcnNlZFRva2VuLmdyb3Vwcy5hbGdvLnRvTG93ZXJDYXNlKClcblxuICAgIC8vIDUuIElmIGFsZ29yaXRobSBpcyBhIGhhc2ggZnVuY3Rpb24gcmVjb2duaXplZCBieSB0aGUgdXNlclxuICAgIC8vICAgIGFnZW50LCBhZGQgdGhlIHBhcnNlZCB0b2tlbiB0byByZXN1bHQuXG4gICAgaWYgKHN1cHBvcnRlZEhhc2hlcy5pbmNsdWRlcyhhbGdvcml0aG0pKSB7XG4gICAgICByZXN1bHQucHVzaChwYXJzZWRUb2tlbi5ncm91cHMpXG4gICAgfVxuICB9XG5cbiAgLy8gNC4gUmV0dXJuIG5vIG1ldGFkYXRhIGlmIGVtcHR5IGlzIHRydWUsIG90aGVyd2lzZSByZXR1cm4gcmVzdWx0LlxuICBpZiAoZW1wdHkgPT09IHRydWUpIHtcbiAgICByZXR1cm4gJ25vIG1ldGFkYXRhJ1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdFxufVxuXG4vKipcbiAqIEBwYXJhbSB7eyBhbGdvOiAnc2hhMjU2JyB8ICdzaGEzODQnIHwgJ3NoYTUxMicgfVtdfSBtZXRhZGF0YUxpc3RcbiAqL1xuZnVuY3Rpb24gZ2V0U3Ryb25nZXN0TWV0YWRhdGEgKG1ldGFkYXRhTGlzdCkge1xuICAvLyBMZXQgYWxnb3JpdGhtIGJlIHRoZSBhbGdvIGNvbXBvbmVudCBvZiB0aGUgZmlyc3QgaXRlbSBpbiBtZXRhZGF0YUxpc3QuXG4gIC8vIENhbiBiZSBzaGEyNTZcbiAgbGV0IGFsZ29yaXRobSA9IG1ldGFkYXRhTGlzdFswXS5hbGdvXG4gIC8vIElmIHRoZSBhbGdvcml0aG0gaXMgc2hhNTEyLCB0aGVuIGl0IGlzIHRoZSBzdHJvbmdlc3RcbiAgLy8gYW5kIHdlIGNhbiByZXR1cm4gaW1tZWRpYXRlbHlcbiAgaWYgKGFsZ29yaXRobVszXSA9PT0gJzUnKSB7XG4gICAgcmV0dXJuIGFsZ29yaXRobVxuICB9XG5cbiAgZm9yIChsZXQgaSA9IDE7IGkgPCBtZXRhZGF0YUxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICBjb25zdCBtZXRhZGF0YSA9IG1ldGFkYXRhTGlzdFtpXVxuICAgIC8vIElmIHRoZSBhbGdvcml0aG0gaXMgc2hhNTEyLCB0aGVuIGl0IGlzIHRoZSBzdHJvbmdlc3RcbiAgICAvLyBhbmQgd2UgY2FuIGJyZWFrIHRoZSBsb29wIGltbWVkaWF0ZWx5XG4gICAgaWYgKG1ldGFkYXRhLmFsZ29bM10gPT09ICc1Jykge1xuICAgICAgYWxnb3JpdGhtID0gJ3NoYTUxMidcbiAgICAgIGJyZWFrXG4gICAgLy8gSWYgdGhlIGFsZ29yaXRobSBpcyBzaGEzODQsIHRoZW4gYSBwb3RlbnRpYWwgc2hhMjU2IG9yIHNoYTM4NCBpcyBpZ25vcmVkXG4gICAgfSBlbHNlIGlmIChhbGdvcml0aG1bM10gPT09ICczJykge1xuICAgICAgY29udGludWVcbiAgICAvLyBhbGdvcml0aG0gaXMgc2hhMjU2LCBjaGVjayBpZiBhbGdvcml0aG0gaXMgc2hhMzg0IGFuZCBpZiBzbywgc2V0IGl0IGFzXG4gICAgLy8gdGhlIHN0cm9uZ2VzdFxuICAgIH0gZWxzZSBpZiAobWV0YWRhdGEuYWxnb1szXSA9PT0gJzMnKSB7XG4gICAgICBhbGdvcml0aG0gPSAnc2hhMzg0J1xuICAgIH1cbiAgfVxuICByZXR1cm4gYWxnb3JpdGhtXG59XG5cbmZ1bmN0aW9uIGZpbHRlck1ldGFkYXRhTGlzdEJ5QWxnb3JpdGhtIChtZXRhZGF0YUxpc3QsIGFsZ29yaXRobSkge1xuICBpZiAobWV0YWRhdGFMaXN0Lmxlbmd0aCA9PT0gMSkge1xuICAgIHJldHVybiBtZXRhZGF0YUxpc3RcbiAgfVxuXG4gIGxldCBwb3MgPSAwXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbWV0YWRhdGFMaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKG1ldGFkYXRhTGlzdFtpXS5hbGdvID09PSBhbGdvcml0aG0pIHtcbiAgICAgIG1ldGFkYXRhTGlzdFtwb3MrK10gPSBtZXRhZGF0YUxpc3RbaV1cbiAgICB9XG4gIH1cblxuICBtZXRhZGF0YUxpc3QubGVuZ3RoID0gcG9zXG5cbiAgcmV0dXJuIG1ldGFkYXRhTGlzdFxufVxuXG4vKipcbiAqIENvbXBhcmVzIHR3byBiYXNlNjQgc3RyaW5ncywgYWxsb3dpbmcgZm9yIGJhc2U2NHVybFxuICogaW4gdGhlIHNlY29uZCBzdHJpbmcuXG4gKlxuKiBAcGFyYW0ge3N0cmluZ30gYWN0dWFsVmFsdWUgYWx3YXlzIGJhc2U2NFxuICogQHBhcmFtIHtzdHJpbmd9IGV4cGVjdGVkVmFsdWUgYmFzZTY0IG9yIGJhc2U2NHVybFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIGNvbXBhcmVCYXNlNjRNaXhlZCAoYWN0dWFsVmFsdWUsIGV4cGVjdGVkVmFsdWUpIHtcbiAgaWYgKGFjdHVhbFZhbHVlLmxlbmd0aCAhPT0gZXhwZWN0ZWRWYWx1ZS5sZW5ndGgpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuICBmb3IgKGxldCBpID0gMDsgaSA8IGFjdHVhbFZhbHVlLmxlbmd0aDsgKytpKSB7XG4gICAgaWYgKGFjdHVhbFZhbHVlW2ldICE9PSBleHBlY3RlZFZhbHVlW2ldKSB7XG4gICAgICBpZiAoXG4gICAgICAgIChhY3R1YWxWYWx1ZVtpXSA9PT0gJysnICYmIGV4cGVjdGVkVmFsdWVbaV0gPT09ICctJykgfHxcbiAgICAgICAgKGFjdHVhbFZhbHVlW2ldID09PSAnLycgJiYgZXhwZWN0ZWRWYWx1ZVtpXSA9PT0gJ18nKVxuICAgICAgKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXVwZ3JhZGUtaW5zZWN1cmUtcmVxdWVzdHMvI3VwZ3JhZGUtcmVxdWVzdFxuZnVuY3Rpb24gdHJ5VXBncmFkZVJlcXVlc3RUb0FQb3RlbnRpYWxseVRydXN0d29ydGh5VVJMIChyZXF1ZXN0KSB7XG4gIC8vIFRPRE9cbn1cblxuLyoqXG4gKiBAbGluayB7aHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvb3JpZ2luLmh0bWwjc2FtZS1vcmlnaW59XG4gKiBAcGFyYW0ge1VSTH0gQVxuICogQHBhcmFtIHtVUkx9IEJcbiAqL1xuZnVuY3Rpb24gc2FtZU9yaWdpbiAoQSwgQikge1xuICAvLyAxLiBJZiBBIGFuZCBCIGFyZSB0aGUgc2FtZSBvcGFxdWUgb3JpZ2luLCB0aGVuIHJldHVybiB0cnVlLlxuICBpZiAoQS5vcmlnaW4gPT09IEIub3JpZ2luICYmIEEub3JpZ2luID09PSAnbnVsbCcpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gMi4gSWYgQSBhbmQgQiBhcmUgYm90aCB0dXBsZSBvcmlnaW5zIGFuZCB0aGVpciBzY2hlbWVzLFxuICAvLyAgICBob3N0cywgYW5kIHBvcnQgYXJlIGlkZW50aWNhbCwgdGhlbiByZXR1cm4gdHJ1ZS5cbiAgaWYgKEEucHJvdG9jb2wgPT09IEIucHJvdG9jb2wgJiYgQS5ob3N0bmFtZSA9PT0gQi5ob3N0bmFtZSAmJiBBLnBvcnQgPT09IEIucG9ydCkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gZmFsc2UuXG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBjcmVhdGVEZWZlcnJlZFByb21pc2UgKCkge1xuICBsZXQgcmVzXG4gIGxldCByZWpcbiAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICByZXMgPSByZXNvbHZlXG4gICAgcmVqID0gcmVqZWN0XG4gIH0pXG5cbiAgcmV0dXJuIHsgcHJvbWlzZSwgcmVzb2x2ZTogcmVzLCByZWplY3Q6IHJlaiB9XG59XG5cbmZ1bmN0aW9uIGlzQWJvcnRlZCAoZmV0Y2hQYXJhbXMpIHtcbiAgcmV0dXJuIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuc3RhdGUgPT09ICdhYm9ydGVkJ1xufVxuXG5mdW5jdGlvbiBpc0NhbmNlbGxlZCAoZmV0Y2hQYXJhbXMpIHtcbiAgcmV0dXJuIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuc3RhdGUgPT09ICdhYm9ydGVkJyB8fFxuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuc3RhdGUgPT09ICd0ZXJtaW5hdGVkJ1xufVxuXG5jb25zdCBub3JtYWxpemVNZXRob2RSZWNvcmQgPSB7XG4gIGRlbGV0ZTogJ0RFTEVURScsXG4gIERFTEVURTogJ0RFTEVURScsXG4gIGdldDogJ0dFVCcsXG4gIEdFVDogJ0dFVCcsXG4gIGhlYWQ6ICdIRUFEJyxcbiAgSEVBRDogJ0hFQUQnLFxuICBvcHRpb25zOiAnT1BUSU9OUycsXG4gIE9QVElPTlM6ICdPUFRJT05TJyxcbiAgcG9zdDogJ1BPU1QnLFxuICBQT1NUOiAnUE9TVCcsXG4gIHB1dDogJ1BVVCcsXG4gIFBVVDogJ1BVVCdcbn1cblxuLy8gTm90ZTogb2JqZWN0IHByb3RvdHlwZXMgc2hvdWxkIG5vdCBiZSBhYmxlIHRvIGJlIHJlZmVyZW5jZWQuIGUuZy4gYE9iamVjdCNoYXNPd25Qcm9wZXJ0eWAuXG5PYmplY3Quc2V0UHJvdG90eXBlT2Yobm9ybWFsaXplTWV0aG9kUmVjb3JkLCBudWxsKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtbWV0aG9kLW5vcm1hbGl6ZVxuICogQHBhcmFtIHtzdHJpbmd9IG1ldGhvZFxuICovXG5mdW5jdGlvbiBub3JtYWxpemVNZXRob2QgKG1ldGhvZCkge1xuICByZXR1cm4gbm9ybWFsaXplTWV0aG9kUmVjb3JkW21ldGhvZC50b0xvd2VyQ2FzZSgpXSA/PyBtZXRob2Rcbn1cblxuLy8gaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI3NlcmlhbGl6ZS1hLWphdmFzY3JpcHQtdmFsdWUtdG8tYS1qc29uLXN0cmluZ1xuZnVuY3Rpb24gc2VyaWFsaXplSmF2YXNjcmlwdFZhbHVlVG9KU09OU3RyaW5nICh2YWx1ZSkge1xuICAvLyAxLiBMZXQgcmVzdWx0IGJlID8gQ2FsbCglSlNPTi5zdHJpbmdpZnklLCB1bmRlZmluZWQsIFx1MDBBQiB2YWx1ZSBcdTAwQkIpLlxuICBjb25zdCByZXN1bHQgPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSlcblxuICAvLyAyLiBJZiByZXN1bHQgaXMgdW5kZWZpbmVkLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBpZiAocmVzdWx0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdWYWx1ZSBpcyBub3QgSlNPTiBzZXJpYWxpemFibGUnKVxuICB9XG5cbiAgLy8gMy4gQXNzZXJ0OiByZXN1bHQgaXMgYSBzdHJpbmcuXG4gIGFzc2VydCh0eXBlb2YgcmVzdWx0ID09PSAnc3RyaW5nJylcblxuICAvLyA0LiBSZXR1cm4gcmVzdWx0LlxuICByZXR1cm4gcmVzdWx0XG59XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtJTI1aXRlcmF0b3Jwcm90b3R5cGUlMjUtb2JqZWN0XG5jb25zdCBlc0l0ZXJhdG9yUHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKE9iamVjdC5nZXRQcm90b3R5cGVPZihbXVtTeW1ib2wuaXRlcmF0b3JdKCkpKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNkZm4taXRlcmF0b3ItcHJvdG90eXBlLW9iamVjdFxuICogQHBhcmFtIHsoKSA9PiB1bmtub3duW119IGl0ZXJhdG9yXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBuYW1lIG9mIHRoZSBpbnN0YW5jZVxuICogQHBhcmFtIHsna2V5J3wndmFsdWUnfCdrZXkrdmFsdWUnfSBraW5kXG4gKi9cbmZ1bmN0aW9uIG1ha2VJdGVyYXRvciAoaXRlcmF0b3IsIG5hbWUsIGtpbmQpIHtcbiAgY29uc3Qgb2JqZWN0ID0ge1xuICAgIGluZGV4OiAwLFxuICAgIGtpbmQsXG4gICAgdGFyZ2V0OiBpdGVyYXRvclxuICB9XG5cbiAgY29uc3QgaSA9IHtcbiAgICBuZXh0ICgpIHtcbiAgICAgIC8vIDEuIExldCBpbnRlcmZhY2UgYmUgdGhlIGludGVyZmFjZSBmb3Igd2hpY2ggdGhlIGl0ZXJhdG9yIHByb3RvdHlwZSBvYmplY3QgZXhpc3RzLlxuXG4gICAgICAvLyAyLiBMZXQgdGhpc1ZhbHVlIGJlIHRoZSB0aGlzIHZhbHVlLlxuXG4gICAgICAvLyAzLiBMZXQgb2JqZWN0IGJlID8gVG9PYmplY3QodGhpc1ZhbHVlKS5cblxuICAgICAgLy8gNC4gSWYgb2JqZWN0IGlzIGEgcGxhdGZvcm0gb2JqZWN0LCB0aGVuIHBlcmZvcm0gYSBzZWN1cml0eVxuICAgICAgLy8gICAgY2hlY2ssIHBhc3Npbmc6XG5cbiAgICAgIC8vIDUuIElmIG9iamVjdCBpcyBub3QgYSBkZWZhdWx0IGl0ZXJhdG9yIG9iamVjdCBmb3IgaW50ZXJmYWNlLFxuICAgICAgLy8gICAgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmIChPYmplY3QuZ2V0UHJvdG90eXBlT2YodGhpcykgIT09IGkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBgJ25leHQnIGNhbGxlZCBvbiBhbiBvYmplY3QgdGhhdCBkb2VzIG5vdCBpbXBsZW1lbnQgaW50ZXJmYWNlICR7bmFtZX0gSXRlcmF0b3IuYFxuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIDYuIExldCBpbmRleCBiZSBvYmplY3RcdTIwMTlzIGluZGV4LlxuICAgICAgLy8gNy4gTGV0IGtpbmQgYmUgb2JqZWN0XHUyMDE5cyBraW5kLlxuICAgICAgLy8gOC4gTGV0IHZhbHVlcyBiZSBvYmplY3RcdTIwMTlzIHRhcmdldCdzIHZhbHVlIHBhaXJzIHRvIGl0ZXJhdGUgb3Zlci5cbiAgICAgIGNvbnN0IHsgaW5kZXgsIGtpbmQsIHRhcmdldCB9ID0gb2JqZWN0XG4gICAgICBjb25zdCB2YWx1ZXMgPSB0YXJnZXQoKVxuXG4gICAgICAvLyA5LiBMZXQgbGVuIGJlIHRoZSBsZW5ndGggb2YgdmFsdWVzLlxuICAgICAgY29uc3QgbGVuID0gdmFsdWVzLmxlbmd0aFxuXG4gICAgICAvLyAxMC4gSWYgaW5kZXggaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIGxlbiwgdGhlbiByZXR1cm5cbiAgICAgIC8vICAgICBDcmVhdGVJdGVyUmVzdWx0T2JqZWN0KHVuZGVmaW5lZCwgdHJ1ZSkuXG4gICAgICBpZiAoaW5kZXggPj0gbGVuKSB7XG4gICAgICAgIHJldHVybiB7IHZhbHVlOiB1bmRlZmluZWQsIGRvbmU6IHRydWUgfVxuICAgICAgfVxuXG4gICAgICAvLyAxMS4gTGV0IHBhaXIgYmUgdGhlIGVudHJ5IGluIHZhbHVlcyBhdCBpbmRleCBpbmRleC5cbiAgICAgIGNvbnN0IHBhaXIgPSB2YWx1ZXNbaW5kZXhdXG5cbiAgICAgIC8vIDEyLiBTZXQgb2JqZWN0XHUyMDE5cyBpbmRleCB0byBpbmRleCArIDEuXG4gICAgICBvYmplY3QuaW5kZXggPSBpbmRleCArIDFcblxuICAgICAgLy8gMTMuIFJldHVybiB0aGUgaXRlcmF0b3IgcmVzdWx0IGZvciBwYWlyIGFuZCBraW5kLlxuICAgICAgcmV0dXJuIGl0ZXJhdG9yUmVzdWx0KHBhaXIsIGtpbmQpXG4gICAgfSxcbiAgICAvLyBUaGUgY2xhc3Mgc3RyaW5nIG9mIGFuIGl0ZXJhdG9yIHByb3RvdHlwZSBvYmplY3QgZm9yIGEgZ2l2ZW4gaW50ZXJmYWNlIGlzIHRoZVxuICAgIC8vIHJlc3VsdCBvZiBjb25jYXRlbmF0aW5nIHRoZSBpZGVudGlmaWVyIG9mIHRoZSBpbnRlcmZhY2UgYW5kIHRoZSBzdHJpbmcgXCIgSXRlcmF0b3JcIi5cbiAgICBbU3ltYm9sLnRvU3RyaW5nVGFnXTogYCR7bmFtZX0gSXRlcmF0b3JgXG4gIH1cblxuICAvLyBUaGUgW1tQcm90b3R5cGVdXSBpbnRlcm5hbCBzbG90IG9mIGFuIGl0ZXJhdG9yIHByb3RvdHlwZSBvYmplY3QgbXVzdCBiZSAlSXRlcmF0b3JQcm90b3R5cGUlLlxuICBPYmplY3Quc2V0UHJvdG90eXBlT2YoaSwgZXNJdGVyYXRvclByb3RvdHlwZSlcbiAgLy8gZXNJdGVyYXRvclByb3RvdHlwZSBuZWVkcyB0byBiZSB0aGUgcHJvdG90eXBlIG9mIGlcbiAgLy8gd2hpY2ggaXMgdGhlIHByb3RvdHlwZSBvZiBhbiBlbXB0eSBvYmplY3QuIFllcywgaXQncyBjb25mdXNpbmcuXG4gIHJldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Yoe30sIGkpXG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jaXRlcmF0b3ItcmVzdWx0XG5mdW5jdGlvbiBpdGVyYXRvclJlc3VsdCAocGFpciwga2luZCkge1xuICBsZXQgcmVzdWx0XG5cbiAgLy8gMS4gTGV0IHJlc3VsdCBiZSBhIHZhbHVlIGRldGVybWluZWQgYnkgdGhlIHZhbHVlIG9mIGtpbmQ6XG4gIHN3aXRjaCAoa2luZCkge1xuICAgIGNhc2UgJ2tleSc6IHtcbiAgICAgIC8vIDEuIExldCBpZGxLZXkgYmUgcGFpclx1MjAxOXMga2V5LlxuICAgICAgLy8gMi4gTGV0IGtleSBiZSB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgaWRsS2V5IHRvIGFuXG4gICAgICAvLyAgICBFQ01BU2NyaXB0IHZhbHVlLlxuICAgICAgLy8gMy4gcmVzdWx0IGlzIGtleS5cbiAgICAgIHJlc3VsdCA9IHBhaXJbMF1cbiAgICAgIGJyZWFrXG4gICAgfVxuICAgIGNhc2UgJ3ZhbHVlJzoge1xuICAgICAgLy8gMS4gTGV0IGlkbFZhbHVlIGJlIHBhaXJcdTIwMTlzIHZhbHVlLlxuICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBpZGxWYWx1ZSB0b1xuICAgICAgLy8gICAgYW4gRUNNQVNjcmlwdCB2YWx1ZS5cbiAgICAgIC8vIDMuIHJlc3VsdCBpcyB2YWx1ZS5cbiAgICAgIHJlc3VsdCA9IHBhaXJbMV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICAgIGNhc2UgJ2tleSt2YWx1ZSc6IHtcbiAgICAgIC8vIDEuIExldCBpZGxLZXkgYmUgcGFpclx1MjAxOXMga2V5LlxuICAgICAgLy8gMi4gTGV0IGlkbFZhbHVlIGJlIHBhaXJcdTIwMTlzIHZhbHVlLlxuICAgICAgLy8gMy4gTGV0IGtleSBiZSB0aGUgcmVzdWx0IG9mIGNvbnZlcnRpbmcgaWRsS2V5IHRvIGFuXG4gICAgICAvLyAgICBFQ01BU2NyaXB0IHZhbHVlLlxuICAgICAgLy8gNC4gTGV0IHZhbHVlIGJlIHRoZSByZXN1bHQgb2YgY29udmVydGluZyBpZGxWYWx1ZSB0b1xuICAgICAgLy8gICAgYW4gRUNNQVNjcmlwdCB2YWx1ZS5cbiAgICAgIC8vIDUuIExldCBhcnJheSBiZSAhIEFycmF5Q3JlYXRlKDIpLlxuICAgICAgLy8gNi4gQ2FsbCAhIENyZWF0ZURhdGFQcm9wZXJ0eShhcnJheSwgXCIwXCIsIGtleSkuXG4gICAgICAvLyA3LiBDYWxsICEgQ3JlYXRlRGF0YVByb3BlcnR5KGFycmF5LCBcIjFcIiwgdmFsdWUpLlxuICAgICAgLy8gOC4gcmVzdWx0IGlzIGFycmF5LlxuICAgICAgcmVzdWx0ID0gcGFpclxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICAvLyAyLiBSZXR1cm4gQ3JlYXRlSXRlclJlc3VsdE9iamVjdChyZXN1bHQsIGZhbHNlKS5cbiAgcmV0dXJuIHsgdmFsdWU6IHJlc3VsdCwgZG9uZTogZmFsc2UgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2JvZHktZnVsbHktcmVhZFxuICovXG5hc3luYyBmdW5jdGlvbiBmdWxseVJlYWRCb2R5IChib2R5LCBwcm9jZXNzQm9keSwgcHJvY2Vzc0JvZHlFcnJvcikge1xuICAvLyAxLiBJZiB0YXNrRGVzdGluYXRpb24gaXMgbnVsbCwgdGhlbiBzZXQgdGFza0Rlc3RpbmF0aW9uIHRvXG4gIC8vICAgIHRoZSByZXN1bHQgb2Ygc3RhcnRpbmcgYSBuZXcgcGFyYWxsZWwgcXVldWUuXG5cbiAgLy8gMi4gTGV0IHN1Y2Nlc3NTdGVwcyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgYnl0ZXMgYmUgdG8gcXVldWUgYVxuICAvLyAgICBmZXRjaCB0YXNrIHRvIHJ1biBwcm9jZXNzQm9keSBnaXZlbiBieXRlcywgd2l0aCB0YXNrRGVzdGluYXRpb24uXG4gIGNvbnN0IHN1Y2Nlc3NTdGVwcyA9IHByb2Nlc3NCb2R5XG5cbiAgLy8gMy4gTGV0IGVycm9yU3RlcHMgYmUgdG8gcXVldWUgYSBmZXRjaCB0YXNrIHRvIHJ1biBwcm9jZXNzQm9keUVycm9yLFxuICAvLyAgICB3aXRoIHRhc2tEZXN0aW5hdGlvbi5cbiAgY29uc3QgZXJyb3JTdGVwcyA9IHByb2Nlc3NCb2R5RXJyb3JcblxuICAvLyA0LiBMZXQgcmVhZGVyIGJlIHRoZSByZXN1bHQgb2YgZ2V0dGluZyBhIHJlYWRlciBmb3IgYm9keVx1MjAxOXMgc3RyZWFtLlxuICAvLyAgICBJZiB0aGF0IHRocmV3IGFuIGV4Y2VwdGlvbiwgdGhlbiBydW4gZXJyb3JTdGVwcyB3aXRoIHRoYXRcbiAgLy8gICAgZXhjZXB0aW9uIGFuZCByZXR1cm4uXG4gIGxldCByZWFkZXJcblxuICB0cnkge1xuICAgIHJlYWRlciA9IGJvZHkuc3RyZWFtLmdldFJlYWRlcigpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBlcnJvclN0ZXBzKGUpXG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyA1LiBSZWFkIGFsbCBieXRlcyBmcm9tIHJlYWRlciwgZ2l2ZW4gc3VjY2Vzc1N0ZXBzIGFuZCBlcnJvclN0ZXBzLlxuICB0cnkge1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJlYWRBbGxCeXRlcyhyZWFkZXIpXG4gICAgc3VjY2Vzc1N0ZXBzKHJlc3VsdClcbiAgfSBjYXRjaCAoZSkge1xuICAgIGVycm9yU3RlcHMoZSlcbiAgfVxufVxuXG4vKiogQHR5cGUge1JlYWRhYmxlU3RyZWFtfSAqL1xubGV0IFJlYWRhYmxlU3RyZWFtID0gZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbVxuXG5mdW5jdGlvbiBpc1JlYWRhYmxlU3RyZWFtTGlrZSAoc3RyZWFtKSB7XG4gIGlmICghUmVhZGFibGVTdHJlYW0pIHtcbiAgICBSZWFkYWJsZVN0cmVhbSA9IHJlcXVpcmUoJ3N0cmVhbS93ZWInKS5SZWFkYWJsZVN0cmVhbVxuICB9XG5cbiAgcmV0dXJuIHN0cmVhbSBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtIHx8IChcbiAgICBzdHJlYW1bU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gJ1JlYWRhYmxlU3RyZWFtJyAmJlxuICAgIHR5cGVvZiBzdHJlYW0udGVlID09PSAnZnVuY3Rpb24nXG4gIClcbn1cblxuY29uc3QgTUFYSU1VTV9BUkdVTUVOVF9MRU5HVEggPSA2NTUzNVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI2lzb21vcnBoaWMtZGVjb2RlXG4gKiBAcGFyYW0ge251bWJlcltdfFVpbnQ4QXJyYXl9IGlucHV0XG4gKi9cbmZ1bmN0aW9uIGlzb21vcnBoaWNEZWNvZGUgKGlucHV0KSB7XG4gIC8vIDEuIFRvIGlzb21vcnBoaWMgZGVjb2RlIGEgYnl0ZSBzZXF1ZW5jZSBpbnB1dCwgcmV0dXJuIGEgc3RyaW5nIHdob3NlIGNvZGUgcG9pbnRcbiAgLy8gICAgbGVuZ3RoIGlzIGVxdWFsIHRvIGlucHV0XHUyMDE5cyBsZW5ndGggYW5kIHdob3NlIGNvZGUgcG9pbnRzIGhhdmUgdGhlIHNhbWUgdmFsdWVzXG4gIC8vICAgIGFzIHRoZSB2YWx1ZXMgb2YgaW5wdXRcdTIwMTlzIGJ5dGVzLCBpbiB0aGUgc2FtZSBvcmRlci5cblxuICBpZiAoaW5wdXQubGVuZ3RoIDwgTUFYSU1VTV9BUkdVTUVOVF9MRU5HVEgpIHtcbiAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSguLi5pbnB1dClcbiAgfVxuXG4gIHJldHVybiBpbnB1dC5yZWR1Y2UoKHByZXZpb3VzLCBjdXJyZW50KSA9PiBwcmV2aW91cyArIFN0cmluZy5mcm9tQ2hhckNvZGUoY3VycmVudCksICcnKVxufVxuXG4vKipcbiAqIEBwYXJhbSB7UmVhZGFibGVTdHJlYW1Db250cm9sbGVyPFVpbnQ4QXJyYXk+fSBjb250cm9sbGVyXG4gKi9cbmZ1bmN0aW9uIHJlYWRhYmxlU3RyZWFtQ2xvc2UgKGNvbnRyb2xsZXIpIHtcbiAgdHJ5IHtcbiAgICBjb250cm9sbGVyLmNsb3NlKClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gVE9ETzogYWRkIGNvbW1lbnQgZXhwbGFpbmluZyB3aHkgdGhpcyBlcnJvciBvY2N1cnMuXG4gICAgaWYgKCFlcnIubWVzc2FnZS5pbmNsdWRlcygnQ29udHJvbGxlciBpcyBhbHJlYWR5IGNsb3NlZCcpKSB7XG4gICAgICB0aHJvdyBlcnJcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNpc29tb3JwaGljLWVuY29kZVxuICogQHBhcmFtIHtzdHJpbmd9IGlucHV0XG4gKi9cbmZ1bmN0aW9uIGlzb21vcnBoaWNFbmNvZGUgKGlucHV0KSB7XG4gIC8vIDEuIEFzc2VydDogaW5wdXQgY29udGFpbnMgbm8gY29kZSBwb2ludHMgZ3JlYXRlciB0aGFuIFUrMDBGRi5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbnB1dC5sZW5ndGg7IGkrKykge1xuICAgIGFzc2VydChpbnB1dC5jaGFyQ29kZUF0KGkpIDw9IDB4RkYpXG4gIH1cblxuICAvLyAyLiBSZXR1cm4gYSBieXRlIHNlcXVlbmNlIHdob3NlIGxlbmd0aCBpcyBlcXVhbCB0byBpbnB1dFx1MjAxOXMgY29kZVxuICAvLyAgICBwb2ludCBsZW5ndGggYW5kIHdob3NlIGJ5dGVzIGhhdmUgdGhlIHNhbWUgdmFsdWVzIGFzIHRoZVxuICAvLyAgICB2YWx1ZXMgb2YgaW5wdXRcdTIwMTlzIGNvZGUgcG9pbnRzLCBpbiB0aGUgc2FtZSBvcmRlclxuICByZXR1cm4gaW5wdXRcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vc3RyZWFtcy5zcGVjLndoYXR3Zy5vcmcvI3JlYWRhYmxlc3RyZWFtZGVmYXVsdHJlYWRlci1yZWFkLWFsbC1ieXRlc1xuICogQHNlZSBodHRwczovL3N0cmVhbXMuc3BlYy53aGF0d2cub3JnLyNyZWFkLWxvb3BcbiAqIEBwYXJhbSB7UmVhZGFibGVTdHJlYW1EZWZhdWx0UmVhZGVyfSByZWFkZXJcbiAqL1xuYXN5bmMgZnVuY3Rpb24gcmVhZEFsbEJ5dGVzIChyZWFkZXIpIHtcbiAgY29uc3QgYnl0ZXMgPSBbXVxuICBsZXQgYnl0ZUxlbmd0aCA9IDBcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIGNvbnN0IHsgZG9uZSwgdmFsdWU6IGNodW5rIH0gPSBhd2FpdCByZWFkZXIucmVhZCgpXG5cbiAgICBpZiAoZG9uZSkge1xuICAgICAgLy8gMS4gQ2FsbCBzdWNjZXNzU3RlcHMgd2l0aCBieXRlcy5cbiAgICAgIHJldHVybiBCdWZmZXIuY29uY2F0KGJ5dGVzLCBieXRlTGVuZ3RoKVxuICAgIH1cblxuICAgIC8vIDEuIElmIGNodW5rIGlzIG5vdCBhIFVpbnQ4QXJyYXkgb2JqZWN0LCBjYWxsIGZhaWx1cmVTdGVwc1xuICAgIC8vICAgIHdpdGggYSBUeXBlRXJyb3IgYW5kIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgIGlmICghaXNVaW50OEFycmF5KGNodW5rKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignUmVjZWl2ZWQgbm9uLVVpbnQ4QXJyYXkgY2h1bmsnKVxuICAgIH1cblxuICAgIC8vIDIuIEFwcGVuZCB0aGUgYnl0ZXMgcmVwcmVzZW50ZWQgYnkgY2h1bmsgdG8gYnl0ZXMuXG4gICAgYnl0ZXMucHVzaChjaHVuaylcbiAgICBieXRlTGVuZ3RoICs9IGNodW5rLmxlbmd0aFxuXG4gICAgLy8gMy4gUmVhZC1sb29wIGdpdmVuIHJlYWRlciwgYnl0ZXMsIHN1Y2Nlc3NTdGVwcywgYW5kIGZhaWx1cmVTdGVwcy5cbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2lzLWxvY2FsXG4gKiBAcGFyYW0ge1VSTH0gdXJsXG4gKi9cbmZ1bmN0aW9uIHVybElzTG9jYWwgKHVybCkge1xuICBhc3NlcnQoJ3Byb3RvY29sJyBpbiB1cmwpIC8vIGVuc3VyZSBpdCdzIGEgdXJsIG9iamVjdFxuXG4gIGNvbnN0IHByb3RvY29sID0gdXJsLnByb3RvY29sXG5cbiAgcmV0dXJuIHByb3RvY29sID09PSAnYWJvdXQ6JyB8fCBwcm90b2NvbCA9PT0gJ2Jsb2I6JyB8fCBwcm90b2NvbCA9PT0gJ2RhdGE6J1xufVxuXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfFVSTH0gdXJsXG4gKi9cbmZ1bmN0aW9uIHVybEhhc0h0dHBzU2NoZW1lICh1cmwpIHtcbiAgaWYgKHR5cGVvZiB1cmwgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHVybC5zdGFydHNXaXRoKCdodHRwczonKVxuICB9XG5cbiAgcmV0dXJuIHVybC5wcm90b2NvbCA9PT0gJ2h0dHBzOidcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLXNjaGVtZVxuICogQHBhcmFtIHtVUkx9IHVybFxuICovXG5mdW5jdGlvbiB1cmxJc0h0dHBIdHRwc1NjaGVtZSAodXJsKSB7XG4gIGFzc2VydCgncHJvdG9jb2wnIGluIHVybCkgLy8gZW5zdXJlIGl0J3MgYSB1cmwgb2JqZWN0XG5cbiAgY29uc3QgcHJvdG9jb2wgPSB1cmwucHJvdG9jb2xcblxuICByZXR1cm4gcHJvdG9jb2wgPT09ICdodHRwOicgfHwgcHJvdG9jb2wgPT09ICdodHRwczonXG59XG5cbi8qKlxuICogRmV0Y2ggc3VwcG9ydHMgbm9kZSA+PSAxNi44LjAsIGJ1dCBPYmplY3QuaGFzT3duIHdhcyBhZGRlZCBpbiB2MTYuOS4wLlxuICovXG5jb25zdCBoYXNPd24gPSBPYmplY3QuaGFzT3duIHx8ICgoZGljdCwga2V5KSA9PiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZGljdCwga2V5KSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGlzQWJvcnRlZCxcbiAgaXNDYW5jZWxsZWQsXG4gIGNyZWF0ZURlZmVycmVkUHJvbWlzZSxcbiAgUmVhZGFibGVTdHJlYW1Gcm9tLFxuICB0b1VTVlN0cmluZyxcbiAgdHJ5VXBncmFkZVJlcXVlc3RUb0FQb3RlbnRpYWxseVRydXN0d29ydGh5VVJMLFxuICBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZSxcbiAgZGV0ZXJtaW5lUmVxdWVzdHNSZWZlcnJlcixcbiAgbWFrZVBvbGljeUNvbnRhaW5lcixcbiAgY2xvbmVQb2xpY3lDb250YWluZXIsXG4gIGFwcGVuZEZldGNoTWV0YWRhdGEsXG4gIGFwcGVuZFJlcXVlc3RPcmlnaW5IZWFkZXIsXG4gIFRBT0NoZWNrLFxuICBjb3JzQ2hlY2ssXG4gIGNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayxcbiAgY3JlYXRlT3BhcXVlVGltaW5nSW5mbyxcbiAgc2V0UmVxdWVzdFJlZmVycmVyUG9saWN5T25SZWRpcmVjdCxcbiAgaXNWYWxpZEhUVFBUb2tlbixcbiAgcmVxdWVzdEJhZFBvcnQsXG4gIHJlcXVlc3RDdXJyZW50VVJMLFxuICByZXNwb25zZVVSTCxcbiAgcmVzcG9uc2VMb2NhdGlvblVSTCxcbiAgaXNCbG9iTGlrZSxcbiAgaXNVUkxQb3RlbnRpYWxseVRydXN0d29ydGh5LFxuICBpc1ZhbGlkUmVhc29uUGhyYXNlLFxuICBzYW1lT3JpZ2luLFxuICBub3JtYWxpemVNZXRob2QsXG4gIHNlcmlhbGl6ZUphdmFzY3JpcHRWYWx1ZVRvSlNPTlN0cmluZyxcbiAgbWFrZUl0ZXJhdG9yLFxuICBpc1ZhbGlkSGVhZGVyTmFtZSxcbiAgaXNWYWxpZEhlYWRlclZhbHVlLFxuICBoYXNPd24sXG4gIGlzRXJyb3JMaWtlLFxuICBmdWxseVJlYWRCb2R5LFxuICBieXRlc01hdGNoLFxuICBpc1JlYWRhYmxlU3RyZWFtTGlrZSxcbiAgcmVhZGFibGVTdHJlYW1DbG9zZSxcbiAgaXNvbW9ycGhpY0VuY29kZSxcbiAgaXNvbW9ycGhpY0RlY29kZSxcbiAgdXJsSXNMb2NhbCxcbiAgdXJsSGFzSHR0cHNTY2hlbWUsXG4gIHVybElzSHR0cEh0dHBzU2NoZW1lLFxuICByZWFkQWxsQnl0ZXMsXG4gIG5vcm1hbGl6ZU1ldGhvZFJlY29yZCxcbiAgcGFyc2VNZXRhZGF0YVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga1VybDogU3ltYm9sKCd1cmwnKSxcbiAga0hlYWRlcnM6IFN5bWJvbCgnaGVhZGVycycpLFxuICBrU2lnbmFsOiBTeW1ib2woJ3NpZ25hbCcpLFxuICBrU3RhdGU6IFN5bWJvbCgnc3RhdGUnKSxcbiAga0d1YXJkOiBTeW1ib2woJ2d1YXJkJyksXG4gIGtSZWFsbTogU3ltYm9sKCdyZWFsbScpXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgdHlwZXMgfSA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgeyBoYXNPd24sIHRvVVNWU3RyaW5nIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuXG4vKiogQHR5cGUge2ltcG9ydCgnLi4vLi4vdHlwZXMvd2ViaWRsJykuV2ViaWRsfSAqL1xuY29uc3Qgd2ViaWRsID0ge31cbndlYmlkbC5jb252ZXJ0ZXJzID0ge31cbndlYmlkbC51dGlsID0ge31cbndlYmlkbC5lcnJvcnMgPSB7fVxuXG53ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbiA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7XG4gIHJldHVybiBuZXcgVHlwZUVycm9yKGAke21lc3NhZ2UuaGVhZGVyfTogJHttZXNzYWdlLm1lc3NhZ2V9YClcbn1cblxud2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkID0gZnVuY3Rpb24gKGNvbnRleHQpIHtcbiAgY29uc3QgcGx1cmFsID0gY29udGV4dC50eXBlcy5sZW5ndGggPT09IDEgPyAnJyA6ICcgb25lIG9mJ1xuICBjb25zdCBtZXNzYWdlID1cbiAgICBgJHtjb250ZXh0LmFyZ3VtZW50fSBjb3VsZCBub3QgYmUgY29udmVydGVkIHRvYCArXG4gICAgYCR7cGx1cmFsfTogJHtjb250ZXh0LnR5cGVzLmpvaW4oJywgJyl9LmBcblxuICByZXR1cm4gd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgIGhlYWRlcjogY29udGV4dC5wcmVmaXgsXG4gICAgbWVzc2FnZVxuICB9KVxufVxuXG53ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCA9IGZ1bmN0aW9uIChjb250ZXh0KSB7XG4gIHJldHVybiB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgaGVhZGVyOiBjb250ZXh0LnByZWZpeCxcbiAgICBtZXNzYWdlOiBgXCIke2NvbnRleHQudmFsdWV9XCIgaXMgYW4gaW52YWxpZCAke2NvbnRleHQudHlwZX0uYFxuICB9KVxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2ltcGxlbWVudHNcbndlYmlkbC5icmFuZENoZWNrID0gZnVuY3Rpb24gKFYsIEksIG9wdHMgPSB1bmRlZmluZWQpIHtcbiAgaWYgKG9wdHM/LnN0cmljdCAhPT0gZmFsc2UgJiYgIShWIGluc3RhbmNlb2YgSSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbGxlZ2FsIGludm9jYXRpb24nKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBWPy5bU3ltYm9sLnRvU3RyaW5nVGFnXSA9PT0gSS5wcm90b3R5cGVbU3ltYm9sLnRvU3RyaW5nVGFnXVxuICB9XG59XG5cbndlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrID0gZnVuY3Rpb24gKHsgbGVuZ3RoIH0sIG1pbiwgY3R4KSB7XG4gIGlmIChsZW5ndGggPCBtaW4pIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICBtZXNzYWdlOiBgJHttaW59IGFyZ3VtZW50JHttaW4gIT09IDEgPyAncycgOiAnJ30gcmVxdWlyZWQsIGAgK1xuICAgICAgICAgICAgICAgYGJ1dCR7bGVuZ3RoID8gJyBvbmx5JyA6ICcnfSAke2xlbmd0aH0gZm91bmQuYCxcbiAgICAgIC4uLmN0eFxuICAgIH0pXG4gIH1cbn1cblxud2ViaWRsLmlsbGVnYWxDb25zdHJ1Y3RvciA9IGZ1bmN0aW9uICgpIHtcbiAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgIGhlYWRlcjogJ1R5cGVFcnJvcicsXG4gICAgbWVzc2FnZTogJ0lsbGVnYWwgY29uc3RydWN0b3InXG4gIH0pXG59XG5cbi8vIGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtZWNtYXNjcmlwdC1kYXRhLXR5cGVzLWFuZC12YWx1ZXNcbndlYmlkbC51dGlsLlR5cGUgPSBmdW5jdGlvbiAoVikge1xuICBzd2l0Y2ggKHR5cGVvZiBWKSB7XG4gICAgY2FzZSAndW5kZWZpbmVkJzogcmV0dXJuICdVbmRlZmluZWQnXG4gICAgY2FzZSAnYm9vbGVhbic6IHJldHVybiAnQm9vbGVhbidcbiAgICBjYXNlICdzdHJpbmcnOiByZXR1cm4gJ1N0cmluZydcbiAgICBjYXNlICdzeW1ib2wnOiByZXR1cm4gJ1N5bWJvbCdcbiAgICBjYXNlICdudW1iZXInOiByZXR1cm4gJ051bWJlcidcbiAgICBjYXNlICdiaWdpbnQnOiByZXR1cm4gJ0JpZ0ludCdcbiAgICBjYXNlICdmdW5jdGlvbic6XG4gICAgY2FzZSAnb2JqZWN0Jzoge1xuICAgICAgaWYgKFYgPT09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuICdOdWxsJ1xuICAgICAgfVxuXG4gICAgICByZXR1cm4gJ09iamVjdCdcbiAgICB9XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNhYnN0cmFjdC1vcGRlZi1jb252ZXJ0dG9pbnRcbndlYmlkbC51dGlsLkNvbnZlcnRUb0ludCA9IGZ1bmN0aW9uIChWLCBiaXRMZW5ndGgsIHNpZ25lZG5lc3MsIG9wdHMgPSB7fSkge1xuICBsZXQgdXBwZXJCb3VuZFxuICBsZXQgbG93ZXJCb3VuZFxuXG4gIC8vIDEuIElmIGJpdExlbmd0aCBpcyA2NCwgdGhlbjpcbiAgaWYgKGJpdExlbmd0aCA9PT0gNjQpIHtcbiAgICAvLyAxLiBMZXQgdXBwZXJCb3VuZCBiZSAyXjUzIFx1MjIxMiAxLlxuICAgIHVwcGVyQm91bmQgPSBNYXRoLnBvdygyLCA1MykgLSAxXG5cbiAgICAvLyAyLiBJZiBzaWduZWRuZXNzIGlzIFwidW5zaWduZWRcIiwgdGhlbiBsZXQgbG93ZXJCb3VuZCBiZSAwLlxuICAgIGlmIChzaWduZWRuZXNzID09PSAndW5zaWduZWQnKSB7XG4gICAgICBsb3dlckJvdW5kID0gMFxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAzLiBPdGhlcndpc2UgbGV0IGxvd2VyQm91bmQgYmUgXHUyMjEyMl41MyArIDEuXG4gICAgICBsb3dlckJvdW5kID0gTWF0aC5wb3coLTIsIDUzKSArIDFcbiAgICB9XG4gIH0gZWxzZSBpZiAoc2lnbmVkbmVzcyA9PT0gJ3Vuc2lnbmVkJykge1xuICAgIC8vIDIuIE90aGVyd2lzZSwgaWYgc2lnbmVkbmVzcyBpcyBcInVuc2lnbmVkXCIsIHRoZW46XG5cbiAgICAvLyAxLiBMZXQgbG93ZXJCb3VuZCBiZSAwLlxuICAgIGxvd2VyQm91bmQgPSAwXG5cbiAgICAvLyAyLiBMZXQgdXBwZXJCb3VuZCBiZSAyXmJpdExlbmd0aCBcdTIyMTIgMS5cbiAgICB1cHBlckJvdW5kID0gTWF0aC5wb3coMiwgYml0TGVuZ3RoKSAtIDFcbiAgfSBlbHNlIHtcbiAgICAvLyAzLiBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBMZXQgbG93ZXJCb3VuZCBiZSAtMl5iaXRMZW5ndGggXHUyMjEyIDEuXG4gICAgbG93ZXJCb3VuZCA9IE1hdGgucG93KC0yLCBiaXRMZW5ndGgpIC0gMVxuXG4gICAgLy8gMi4gTGV0IHVwcGVyQm91bmQgYmUgMl5iaXRMZW5ndGggXHUyMjEyIDEgXHUyMjEyIDEuXG4gICAgdXBwZXJCb3VuZCA9IE1hdGgucG93KDIsIGJpdExlbmd0aCAtIDEpIC0gMVxuICB9XG5cbiAgLy8gNC4gTGV0IHggYmUgPyBUb051bWJlcihWKS5cbiAgbGV0IHggPSBOdW1iZXIoVilcblxuICAvLyA1LiBJZiB4IGlzIFx1MjIxMjAsIHRoZW4gc2V0IHggdG8gKzAuXG4gIGlmICh4ID09PSAwKSB7XG4gICAgeCA9IDBcbiAgfVxuXG4gIC8vIDYuIElmIHRoZSBjb252ZXJzaW9uIGlzIHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0VuZm9yY2VSYW5nZV0gZXh0ZW5kZWQgYXR0cmlidXRlLCB0aGVuOlxuICBpZiAob3B0cy5lbmZvcmNlUmFuZ2UgPT09IHRydWUpIHtcbiAgICAvLyAxLiBJZiB4IGlzIE5hTiwgK1x1MjIxRSwgb3IgXHUyMjEyXHUyMjFFLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChcbiAgICAgIE51bWJlci5pc05hTih4KSB8fFxuICAgICAgeCA9PT0gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIHx8XG4gICAgICB4ID09PSBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFlcbiAgICApIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnSW50ZWdlciBjb252ZXJzaW9uJyxcbiAgICAgICAgbWVzc2FnZTogYENvdWxkIG5vdCBjb252ZXJ0ICR7Vn0gdG8gYW4gaW50ZWdlci5gXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDIuIFNldCB4IHRvIEludGVnZXJQYXJ0KHgpLlxuICAgIHggPSB3ZWJpZGwudXRpbC5JbnRlZ2VyUGFydCh4KVxuXG4gICAgLy8gMy4gSWYgeCA8IGxvd2VyQm91bmQgb3IgeCA+IHVwcGVyQm91bmQsIHRoZW5cbiAgICAvLyAgICB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoeCA8IGxvd2VyQm91bmQgfHwgeCA+IHVwcGVyQm91bmQpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnSW50ZWdlciBjb252ZXJzaW9uJyxcbiAgICAgICAgbWVzc2FnZTogYFZhbHVlIG11c3QgYmUgYmV0d2VlbiAke2xvd2VyQm91bmR9LSR7dXBwZXJCb3VuZH0sIGdvdCAke3h9LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gNC4gUmV0dXJuIHguXG4gICAgcmV0dXJuIHhcbiAgfVxuXG4gIC8vIDcuIElmIHggaXMgbm90IE5hTiBhbmQgdGhlIGNvbnZlcnNpb24gaXMgdG8gYW4gSURMXG4gIC8vICAgIHR5cGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBbQ2xhbXBdIGV4dGVuZGVkXG4gIC8vICAgIGF0dHJpYnV0ZSwgdGhlbjpcbiAgaWYgKCFOdW1iZXIuaXNOYU4oeCkgJiYgb3B0cy5jbGFtcCA9PT0gdHJ1ZSkge1xuICAgIC8vIDEuIFNldCB4IHRvIG1pbihtYXgoeCwgbG93ZXJCb3VuZCksIHVwcGVyQm91bmQpLlxuICAgIHggPSBNYXRoLm1pbihNYXRoLm1heCh4LCBsb3dlckJvdW5kKSwgdXBwZXJCb3VuZClcblxuICAgIC8vIDIuIFJvdW5kIHggdG8gdGhlIG5lYXJlc3QgaW50ZWdlciwgY2hvb3NpbmcgdGhlXG4gICAgLy8gICAgZXZlbiBpbnRlZ2VyIGlmIGl0IGxpZXMgaGFsZndheSBiZXR3ZWVuIHR3byxcbiAgICAvLyAgICBhbmQgY2hvb3NpbmcgKzAgcmF0aGVyIHRoYW4gXHUyMjEyMC5cbiAgICBpZiAoTWF0aC5mbG9vcih4KSAlIDIgPT09IDApIHtcbiAgICAgIHggPSBNYXRoLmZsb29yKHgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHggPSBNYXRoLmNlaWwoeClcbiAgICB9XG5cbiAgICAvLyAzLiBSZXR1cm4geC5cbiAgICByZXR1cm4geFxuICB9XG5cbiAgLy8gOC4gSWYgeCBpcyBOYU4sICswLCArXHUyMjFFLCBvciBcdTIyMTJcdTIyMUUsIHRoZW4gcmV0dXJuICswLlxuICBpZiAoXG4gICAgTnVtYmVyLmlzTmFOKHgpIHx8XG4gICAgKHggPT09IDAgJiYgT2JqZWN0LmlzKDAsIHgpKSB8fFxuICAgIHggPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSB8fFxuICAgIHggPT09IE51bWJlci5ORUdBVElWRV9JTkZJTklUWVxuICApIHtcbiAgICByZXR1cm4gMFxuICB9XG5cbiAgLy8gOS4gU2V0IHggdG8gSW50ZWdlclBhcnQoeCkuXG4gIHggPSB3ZWJpZGwudXRpbC5JbnRlZ2VyUGFydCh4KVxuXG4gIC8vIDEwLiBTZXQgeCB0byB4IG1vZHVsbyAyXmJpdExlbmd0aC5cbiAgeCA9IHggJSBNYXRoLnBvdygyLCBiaXRMZW5ndGgpXG5cbiAgLy8gMTEuIElmIHNpZ25lZG5lc3MgaXMgXCJzaWduZWRcIiBhbmQgeCBcdTIyNjUgMl5iaXRMZW5ndGggXHUyMjEyIDEsXG4gIC8vICAgIHRoZW4gcmV0dXJuIHggXHUyMjEyIDJeYml0TGVuZ3RoLlxuICBpZiAoc2lnbmVkbmVzcyA9PT0gJ3NpZ25lZCcgJiYgeCA+PSBNYXRoLnBvdygyLCBiaXRMZW5ndGgpIC0gMSkge1xuICAgIHJldHVybiB4IC0gTWF0aC5wb3coMiwgYml0TGVuZ3RoKVxuICB9XG5cbiAgLy8gMTIuIE90aGVyd2lzZSwgcmV0dXJuIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jYWJzdHJhY3Qtb3BkZWYtaW50ZWdlcnBhcnRcbndlYmlkbC51dGlsLkludGVnZXJQYXJ0ID0gZnVuY3Rpb24gKG4pIHtcbiAgLy8gMS4gTGV0IHIgYmUgZmxvb3IoYWJzKG4pKS5cbiAgY29uc3QgciA9IE1hdGguZmxvb3IoTWF0aC5hYnMobikpXG5cbiAgLy8gMi4gSWYgbiA8IDAsIHRoZW4gcmV0dXJuIC0xIFx1MDBENyByLlxuICBpZiAobiA8IDApIHtcbiAgICByZXR1cm4gLTEgKiByXG4gIH1cblxuICAvLyAzLiBPdGhlcndpc2UsIHJldHVybiByLlxuICByZXR1cm4gclxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLXNlcXVlbmNlXG53ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIgPSBmdW5jdGlvbiAoY29udmVydGVyKSB7XG4gIHJldHVybiAoVikgPT4ge1xuICAgIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1NlcXVlbmNlJyxcbiAgICAgICAgbWVzc2FnZTogYFZhbHVlIG9mIHR5cGUgJHt3ZWJpZGwudXRpbC5UeXBlKFYpfSBpcyBub3QgYW4gT2JqZWN0LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IG1ldGhvZCBiZSA/IEdldE1ldGhvZChWLCBAQGl0ZXJhdG9yKS5cbiAgICAvKiogQHR5cGUge0dlbmVyYXRvcn0gKi9cbiAgICBjb25zdCBtZXRob2QgPSBWPy5bU3ltYm9sLml0ZXJhdG9yXT8uKClcbiAgICBjb25zdCBzZXEgPSBbXVxuXG4gICAgLy8gMy4gSWYgbWV0aG9kIGlzIHVuZGVmaW5lZCwgdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKFxuICAgICAgbWV0aG9kID09PSB1bmRlZmluZWQgfHxcbiAgICAgIHR5cGVvZiBtZXRob2QubmV4dCAhPT0gJ2Z1bmN0aW9uJ1xuICAgICkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdTZXF1ZW5jZScsXG4gICAgICAgIG1lc3NhZ2U6ICdPYmplY3QgaXMgbm90IGFuIGl0ZXJhdG9yLidcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNjcmVhdGUtc2VxdWVuY2UtZnJvbS1pdGVyYWJsZVxuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBjb25zdCB7IGRvbmUsIHZhbHVlIH0gPSBtZXRob2QubmV4dCgpXG5cbiAgICAgIGlmIChkb25lKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG5cbiAgICAgIHNlcS5wdXNoKGNvbnZlcnRlcih2YWx1ZSkpXG4gICAgfVxuXG4gICAgcmV0dXJuIHNlcVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtdG8tcmVjb3JkXG53ZWJpZGwucmVjb3JkQ29udmVydGVyID0gZnVuY3Rpb24gKGtleUNvbnZlcnRlciwgdmFsdWVDb252ZXJ0ZXIpIHtcbiAgcmV0dXJuIChPKSA9PiB7XG4gICAgLy8gMS4gSWYgVHlwZShPKSBpcyBub3QgT2JqZWN0LCB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAod2ViaWRsLnV0aWwuVHlwZShPKSAhPT0gJ09iamVjdCcpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnUmVjb3JkJyxcbiAgICAgICAgbWVzc2FnZTogYFZhbHVlIG9mIHR5cGUgJHt3ZWJpZGwudXRpbC5UeXBlKE8pfSBpcyBub3QgYW4gT2JqZWN0LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IHJlc3VsdCBiZSBhIG5ldyBlbXB0eSBpbnN0YW5jZSBvZiByZWNvcmQ8SywgVj4uXG4gICAgY29uc3QgcmVzdWx0ID0ge31cblxuICAgIGlmICghdHlwZXMuaXNQcm94eShPKSkge1xuICAgICAgLy8gT2JqZWN0LmtleXMgb25seSByZXR1cm5zIGVudW1lcmFibGUgcHJvcGVydGllc1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKE8pXG5cbiAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgLy8gMS4gTGV0IHR5cGVkS2V5IGJlIGtleSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgSy5cbiAgICAgICAgY29uc3QgdHlwZWRLZXkgPSBrZXlDb252ZXJ0ZXIoa2V5KVxuXG4gICAgICAgIC8vIDIuIExldCB2YWx1ZSBiZSA/IEdldChPLCBrZXkpLlxuICAgICAgICAvLyAzLiBMZXQgdHlwZWRWYWx1ZSBiZSB2YWx1ZSBjb252ZXJ0ZWQgdG8gYW4gSURMIHZhbHVlIG9mIHR5cGUgVi5cbiAgICAgICAgY29uc3QgdHlwZWRWYWx1ZSA9IHZhbHVlQ29udmVydGVyKE9ba2V5XSlcblxuICAgICAgICAvLyA0LiBTZXQgcmVzdWx0W3R5cGVkS2V5XSB0byB0eXBlZFZhbHVlLlxuICAgICAgICByZXN1bHRbdHlwZWRLZXldID0gdHlwZWRWYWx1ZVxuICAgICAgfVxuXG4gICAgICAvLyA1LiBSZXR1cm4gcmVzdWx0LlxuICAgICAgcmV0dXJuIHJlc3VsdFxuICAgIH1cblxuICAgIC8vIDMuIExldCBrZXlzIGJlID8gTy5bW093blByb3BlcnR5S2V5c11dKCkuXG4gICAgY29uc3Qga2V5cyA9IFJlZmxlY3Qub3duS2V5cyhPKVxuXG4gICAgLy8gNC4gRm9yIGVhY2gga2V5IG9mIGtleXMuXG4gICAgZm9yIChjb25zdCBrZXkgb2Yga2V5cykge1xuICAgICAgLy8gMS4gTGV0IGRlc2MgYmUgPyBPLltbR2V0T3duUHJvcGVydHldXShrZXkpLlxuICAgICAgY29uc3QgZGVzYyA9IFJlZmxlY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKE8sIGtleSlcblxuICAgICAgLy8gMi4gSWYgZGVzYyBpcyBub3QgdW5kZWZpbmVkIGFuZCBkZXNjLltbRW51bWVyYWJsZV1dIGlzIHRydWU6XG4gICAgICBpZiAoZGVzYz8uZW51bWVyYWJsZSkge1xuICAgICAgICAvLyAxLiBMZXQgdHlwZWRLZXkgYmUga2V5IGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBLLlxuICAgICAgICBjb25zdCB0eXBlZEtleSA9IGtleUNvbnZlcnRlcihrZXkpXG5cbiAgICAgICAgLy8gMi4gTGV0IHZhbHVlIGJlID8gR2V0KE8sIGtleSkuXG4gICAgICAgIC8vIDMuIExldCB0eXBlZFZhbHVlIGJlIHZhbHVlIGNvbnZlcnRlZCB0byBhbiBJREwgdmFsdWUgb2YgdHlwZSBWLlxuICAgICAgICBjb25zdCB0eXBlZFZhbHVlID0gdmFsdWVDb252ZXJ0ZXIoT1trZXldKVxuXG4gICAgICAgIC8vIDQuIFNldCByZXN1bHRbdHlwZWRLZXldIHRvIHR5cGVkVmFsdWUuXG4gICAgICAgIHJlc3VsdFt0eXBlZEtleV0gPSB0eXBlZFZhbHVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS4gUmV0dXJuIHJlc3VsdC5cbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cbn1cblxud2ViaWRsLmludGVyZmFjZUNvbnZlcnRlciA9IGZ1bmN0aW9uIChpKSB7XG4gIHJldHVybiAoViwgb3B0cyA9IHt9KSA9PiB7XG4gICAgaWYgKG9wdHMuc3RyaWN0ICE9PSBmYWxzZSAmJiAhKFYgaW5zdGFuY2VvZiBpKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6IGkubmFtZSxcbiAgICAgICAgbWVzc2FnZTogYEV4cGVjdGVkICR7Vn0gdG8gYmUgYW4gaW5zdGFuY2Ugb2YgJHtpLm5hbWV9LmBcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmV0dXJuIFZcbiAgfVxufVxuXG53ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlciA9IGZ1bmN0aW9uIChjb252ZXJ0ZXJzKSB7XG4gIHJldHVybiAoZGljdGlvbmFyeSkgPT4ge1xuICAgIGNvbnN0IHR5cGUgPSB3ZWJpZGwudXRpbC5UeXBlKGRpY3Rpb25hcnkpXG4gICAgY29uc3QgZGljdCA9IHt9XG5cbiAgICBpZiAodHlwZSA9PT0gJ051bGwnIHx8IHR5cGUgPT09ICdVbmRlZmluZWQnKSB7XG4gICAgICByZXR1cm4gZGljdFxuICAgIH0gZWxzZSBpZiAodHlwZSAhPT0gJ09iamVjdCcpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnRGljdGlvbmFyeScsXG4gICAgICAgIG1lc3NhZ2U6IGBFeHBlY3RlZCAke2RpY3Rpb25hcnl9IHRvIGJlIG9uZSBvZjogTnVsbCwgVW5kZWZpbmVkLCBPYmplY3QuYFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IG9wdGlvbnMgb2YgY29udmVydGVycykge1xuICAgICAgY29uc3QgeyBrZXksIGRlZmF1bHRWYWx1ZSwgcmVxdWlyZWQsIGNvbnZlcnRlciB9ID0gb3B0aW9uc1xuXG4gICAgICBpZiAocmVxdWlyZWQgPT09IHRydWUpIHtcbiAgICAgICAgaWYgKCFoYXNPd24oZGljdGlvbmFyeSwga2V5KSkge1xuICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgIGhlYWRlcjogJ0RpY3Rpb25hcnknLFxuICAgICAgICAgICAgbWVzc2FnZTogYE1pc3NpbmcgcmVxdWlyZWQga2V5IFwiJHtrZXl9XCIuYFxuICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgbGV0IHZhbHVlID0gZGljdGlvbmFyeVtrZXldXG4gICAgICBjb25zdCBoYXNEZWZhdWx0ID0gaGFzT3duKG9wdGlvbnMsICdkZWZhdWx0VmFsdWUnKVxuXG4gICAgICAvLyBPbmx5IHVzZSBkZWZhdWx0VmFsdWUgaWYgdmFsdWUgaXMgdW5kZWZpbmVkIGFuZFxuICAgICAgLy8gYSBkZWZhdWx0VmFsdWUgb3B0aW9ucyB3YXMgcHJvdmlkZWQuXG4gICAgICBpZiAoaGFzRGVmYXVsdCAmJiB2YWx1ZSAhPT0gbnVsbCkge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlID8/IGRlZmF1bHRWYWx1ZVxuICAgICAgfVxuXG4gICAgICAvLyBBIGtleSBjYW4gYmUgb3B0aW9uYWwgYW5kIGhhdmUgbm8gZGVmYXVsdCB2YWx1ZS5cbiAgICAgIC8vIFdoZW4gdGhpcyBoYXBwZW5zLCBkbyBub3QgcGVyZm9ybSBhIGNvbnZlcnNpb24sXG4gICAgICAvLyBhbmQgZG8gbm90IGFzc2lnbiB0aGUga2V5IGEgdmFsdWUuXG4gICAgICBpZiAocmVxdWlyZWQgfHwgaGFzRGVmYXVsdCB8fCB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHZhbHVlID0gY29udmVydGVyKHZhbHVlKVxuXG4gICAgICAgIGlmIChcbiAgICAgICAgICBvcHRpb25zLmFsbG93ZWRWYWx1ZXMgJiZcbiAgICAgICAgICAhb3B0aW9ucy5hbGxvd2VkVmFsdWVzLmluY2x1ZGVzKHZhbHVlKVxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICBoZWFkZXI6ICdEaWN0aW9uYXJ5JyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IGAke3ZhbHVlfSBpcyBub3QgYW4gYWNjZXB0ZWQgdHlwZS4gRXhwZWN0ZWQgb25lIG9mICR7b3B0aW9ucy5hbGxvd2VkVmFsdWVzLmpvaW4oJywgJyl9LmBcbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgZGljdFtrZXldID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZGljdFxuICB9XG59XG5cbndlYmlkbC5udWxsYWJsZUNvbnZlcnRlciA9IGZ1bmN0aW9uIChjb252ZXJ0ZXIpIHtcbiAgcmV0dXJuIChWKSA9PiB7XG4gICAgaWYgKFYgPT09IG51bGwpIHtcbiAgICAgIHJldHVybiBWXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbnZlcnRlcihWKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtRE9NU3RyaW5nXG53ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcgPSBmdW5jdGlvbiAoViwgb3B0cyA9IHt9KSB7XG4gIC8vIDEuIElmIFYgaXMgbnVsbCBhbmQgdGhlIGNvbnZlcnNpb24gaXMgdG8gYW4gSURMIHR5cGVcbiAgLy8gICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBbTGVnYWN5TnVsbFRvRW1wdHlTdHJpbmddXG4gIC8vICAgIGV4dGVuZGVkIGF0dHJpYnV0ZSwgdGhlbiByZXR1cm4gdGhlIERPTVN0cmluZyB2YWx1ZVxuICAvLyAgICB0aGF0IHJlcHJlc2VudHMgdGhlIGVtcHR5IHN0cmluZy5cbiAgaWYgKFYgPT09IG51bGwgJiYgb3B0cy5sZWdhY3lOdWxsVG9FbXB0eVN0cmluZykge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gMi4gTGV0IHggYmUgPyBUb1N0cmluZyhWKS5cbiAgaWYgKHR5cGVvZiBWID09PSAnc3ltYm9sJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0NvdWxkIG5vdCBjb252ZXJ0IGFyZ3VtZW50IG9mIHR5cGUgc3ltYm9sIHRvIHN0cmluZy4nKVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIHRoZSBJREwgRE9NU3RyaW5nIHZhbHVlIHRoYXQgcmVwcmVzZW50cyB0aGVcbiAgLy8gICAgc2FtZSBzZXF1ZW5jZSBvZiBjb2RlIHVuaXRzIGFzIHRoZSBvbmUgdGhlXG4gIC8vICAgIEVDTUFTY3JpcHQgU3RyaW5nIHZhbHVlIHggcmVwcmVzZW50cy5cbiAgcmV0dXJuIFN0cmluZyhWKVxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLUJ5dGVTdHJpbmdcbndlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcgPSBmdW5jdGlvbiAoVikge1xuICAvLyAxLiBMZXQgeCBiZSA/IFRvU3RyaW5nKFYpLlxuICAvLyBOb3RlOiBET01TdHJpbmcgY29udmVydGVyIHBlcmZvcm0gPyBUb1N0cmluZyhWKVxuICBjb25zdCB4ID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYpXG5cbiAgLy8gMi4gSWYgdGhlIHZhbHVlIG9mIGFueSBlbGVtZW50IG9mIHggaXMgZ3JlYXRlciB0aGFuXG4gIC8vICAgIDI1NSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IHgubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgaWYgKHguY2hhckNvZGVBdChpbmRleCkgPiAyNTUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgICdDYW5ub3QgY29udmVydCBhcmd1bWVudCB0byBhIEJ5dGVTdHJpbmcgYmVjYXVzZSB0aGUgY2hhcmFjdGVyIGF0ICcgK1xuICAgICAgICBgaW5kZXggJHtpbmRleH0gaGFzIGEgdmFsdWUgb2YgJHt4LmNoYXJDb2RlQXQoaW5kZXgpfSB3aGljaCBpcyBncmVhdGVyIHRoYW4gMjU1LmBcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICAvLyAzLiBSZXR1cm4gYW4gSURMIEJ5dGVTdHJpbmcgdmFsdWUgd2hvc2UgbGVuZ3RoIGlzIHRoZVxuICAvLyAgICBsZW5ndGggb2YgeCwgYW5kIHdoZXJlIHRoZSB2YWx1ZSBvZiBlYWNoIGVsZW1lbnQgaXNcbiAgLy8gICAgdGhlIHZhbHVlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnQgb2YgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1VU1ZTdHJpbmdcbndlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyA9IHRvVVNWU3RyaW5nXG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtYm9vbGVhblxud2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbiA9IGZ1bmN0aW9uIChWKSB7XG4gIC8vIDEuIExldCB4IGJlIHRoZSByZXN1bHQgb2YgY29tcHV0aW5nIFRvQm9vbGVhbihWKS5cbiAgY29uc3QgeCA9IEJvb2xlYW4oVilcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCBib29sZWFuIHZhbHVlIHRoYXQgaXMgdGhlIG9uZSB0aGF0IHJlcHJlc2VudHNcbiAgLy8gICAgdGhlIHNhbWUgdHJ1dGggdmFsdWUgYXMgdGhlIEVDTUFTY3JpcHQgQm9vbGVhbiB2YWx1ZSB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLWFueVxud2ViaWRsLmNvbnZlcnRlcnMuYW55ID0gZnVuY3Rpb24gKFYpIHtcbiAgcmV0dXJuIFZcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy1sb25nLWxvbmdcbndlYmlkbC5jb252ZXJ0ZXJzWydsb25nIGxvbmcnXSA9IGZ1bmN0aW9uIChWKSB7XG4gIC8vIDEuIExldCB4IGJlID8gQ29udmVydFRvSW50KFYsIDY0LCBcInNpZ25lZFwiKS5cbiAgY29uc3QgeCA9IHdlYmlkbC51dGlsLkNvbnZlcnRUb0ludChWLCA2NCwgJ3NpZ25lZCcpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBJREwgbG9uZyBsb25nIHZhbHVlIHRoYXQgcmVwcmVzZW50c1xuICAvLyAgICB0aGUgc2FtZSBudW1lcmljIHZhbHVlIGFzIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jZXMtdW5zaWduZWQtbG9uZy1sb25nXG53ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyBsb25nJ10gPSBmdW5jdGlvbiAoVikge1xuICAvLyAxLiBMZXQgeCBiZSA/IENvbnZlcnRUb0ludChWLCA2NCwgXCJ1bnNpZ25lZFwiKS5cbiAgY29uc3QgeCA9IHdlYmlkbC51dGlsLkNvbnZlcnRUb0ludChWLCA2NCwgJ3Vuc2lnbmVkJylcblxuICAvLyAyLiBSZXR1cm4gdGhlIElETCB1bnNpZ25lZCBsb25nIGxvbmcgdmFsdWUgdGhhdFxuICAvLyAgICByZXByZXNlbnRzIHRoZSBzYW1lIG51bWVyaWMgdmFsdWUgYXMgeC5cbiAgcmV0dXJuIHhcbn1cblxuLy8gaHR0cHM6Ly93ZWJpZGwuc3BlYy53aGF0d2cub3JnLyNlcy11bnNpZ25lZC1sb25nXG53ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgbG9uZyddID0gZnVuY3Rpb24gKFYpIHtcbiAgLy8gMS4gTGV0IHggYmUgPyBDb252ZXJ0VG9JbnQoViwgMzIsIFwidW5zaWduZWRcIikuXG4gIGNvbnN0IHggPSB3ZWJpZGwudXRpbC5Db252ZXJ0VG9JbnQoViwgMzIsICd1bnNpZ25lZCcpXG5cbiAgLy8gMi4gUmV0dXJuIHRoZSBJREwgdW5zaWduZWQgbG9uZyB2YWx1ZSB0aGF0XG4gIC8vICAgIHJlcHJlc2VudHMgdGhlIHNhbWUgbnVtZXJpYyB2YWx1ZSBhcyB4LlxuICByZXR1cm4geFxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI2VzLXVuc2lnbmVkLXNob3J0XG53ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgc2hvcnQnXSA9IGZ1bmN0aW9uIChWLCBvcHRzKSB7XG4gIC8vIDEuIExldCB4IGJlID8gQ29udmVydFRvSW50KFYsIDE2LCBcInVuc2lnbmVkXCIpLlxuICBjb25zdCB4ID0gd2ViaWRsLnV0aWwuQ29udmVydFRvSW50KFYsIDE2LCAndW5zaWduZWQnLCBvcHRzKVxuXG4gIC8vIDIuIFJldHVybiB0aGUgSURMIHVuc2lnbmVkIHNob3J0IHZhbHVlIHRoYXQgcmVwcmVzZW50c1xuICAvLyAgICB0aGUgc2FtZSBudW1lcmljIHZhbHVlIGFzIHguXG4gIHJldHVybiB4XG59XG5cbi8vIGh0dHBzOi8vd2ViaWRsLnNwZWMud2hhdHdnLm9yZy8jaWRsLUFycmF5QnVmZmVyXG53ZWJpZGwuY29udmVydGVycy5BcnJheUJ1ZmZlciA9IGZ1bmN0aW9uIChWLCBvcHRzID0ge30pIHtcbiAgLy8gMS4gSWYgVHlwZShWKSBpcyBub3QgT2JqZWN0LCBvciBWIGRvZXMgbm90IGhhdmUgYW5cbiAgLy8gICAgW1tBcnJheUJ1ZmZlckRhdGFdXSBpbnRlcm5hbCBzbG90LCB0aGVuIHRocm93IGFcbiAgLy8gICAgVHlwZUVycm9yLlxuICAvLyBzZWU6IGh0dHBzOi8vdGMzOS5lcy9lY21hMjYyLyNzZWMtcHJvcGVydGllcy1vZi10aGUtYXJyYXlidWZmZXItaW5zdGFuY2VzXG4gIC8vIHNlZTogaHR0cHM6Ly90YzM5LmVzL2VjbWEyNjIvI3NlYy1wcm9wZXJ0aWVzLW9mLXRoZS1zaGFyZWRhcnJheWJ1ZmZlci1pbnN0YW5jZXNcbiAgaWYgKFxuICAgIHdlYmlkbC51dGlsLlR5cGUoVikgIT09ICdPYmplY3QnIHx8XG4gICAgIXR5cGVzLmlzQW55QXJyYXlCdWZmZXIoVilcbiAgKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgIHByZWZpeDogYCR7Vn1gLFxuICAgICAgYXJndW1lbnQ6IGAke1Z9YCxcbiAgICAgIHR5cGVzOiBbJ0FycmF5QnVmZmVyJ11cbiAgICB9KVxuICB9XG5cbiAgLy8gMi4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93U2hhcmVkXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1NoYXJlZEFycmF5QnVmZmVyKFYpIGlzIHRydWUsIHRoZW4gdGhyb3cgYVxuICAvLyAgICBUeXBlRXJyb3IuXG4gIGlmIChvcHRzLmFsbG93U2hhcmVkID09PSBmYWxzZSAmJiB0eXBlcy5pc1NoYXJlZEFycmF5QnVmZmVyKFYpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgaGVhZGVyOiAnQXJyYXlCdWZmZXInLFxuICAgICAgbWVzc2FnZTogJ1NoYXJlZEFycmF5QnVmZmVyIGlzIG5vdCBhbGxvd2VkLidcbiAgICB9KVxuICB9XG5cbiAgLy8gMy4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93UmVzaXphYmxlXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1Jlc2l6YWJsZUFycmF5QnVmZmVyKFYpIGlzIHRydWUsIHRoZW4gdGhyb3cgYVxuICAvLyAgICBUeXBlRXJyb3IuXG4gIC8vIE5vdGU6IHJlc2l6YWJsZSBBcnJheUJ1ZmZlcnMgYXJlIGN1cnJlbnRseSBhIHByb3Bvc2FsLlxuXG4gIC8vIDQuIFJldHVybiB0aGUgSURMIEFycmF5QnVmZmVyIHZhbHVlIHRoYXQgaXMgYVxuICAvLyAgICByZWZlcmVuY2UgdG8gdGhlIHNhbWUgb2JqZWN0IGFzIFYuXG4gIHJldHVybiBWXG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLlR5cGVkQXJyYXkgPSBmdW5jdGlvbiAoViwgVCwgb3B0cyA9IHt9KSB7XG4gIC8vIDEuIExldCBUIGJlIHRoZSBJREwgdHlwZSBWIGlzIGJlaW5nIGNvbnZlcnRlZCB0by5cblxuICAvLyAyLiBJZiBUeXBlKFYpIGlzIG5vdCBPYmplY3QsIG9yIFYgZG9lcyBub3QgaGF2ZSBhXG4gIC8vICAgIFtbVHlwZWRBcnJheU5hbWVdXSBpbnRlcm5hbCBzbG90IHdpdGggYSB2YWx1ZVxuICAvLyAgICBlcXVhbCB0byBUXHUyMDE5cyBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICBpZiAoXG4gICAgd2ViaWRsLnV0aWwuVHlwZShWKSAhPT0gJ09iamVjdCcgfHxcbiAgICAhdHlwZXMuaXNUeXBlZEFycmF5KFYpIHx8XG4gICAgVi5jb25zdHJ1Y3Rvci5uYW1lICE9PSBULm5hbWVcbiAgKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5jb252ZXJzaW9uRmFpbGVkKHtcbiAgICAgIHByZWZpeDogYCR7VC5uYW1lfWAsXG4gICAgICBhcmd1bWVudDogYCR7Vn1gLFxuICAgICAgdHlwZXM6IFtULm5hbWVdXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1NoYXJlZF0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNTaGFyZWRBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgaWYgKG9wdHMuYWxsb3dTaGFyZWQgPT09IGZhbHNlICYmIHR5cGVzLmlzU2hhcmVkQXJyYXlCdWZmZXIoVi5idWZmZXIpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgaGVhZGVyOiAnQXJyYXlCdWZmZXInLFxuICAgICAgbWVzc2FnZTogJ1NoYXJlZEFycmF5QnVmZmVyIGlzIG5vdCBhbGxvd2VkLidcbiAgICB9KVxuICB9XG5cbiAgLy8gNC4gSWYgdGhlIGNvbnZlcnNpb24gaXMgbm90IHRvIGFuIElETCB0eXBlIGFzc29jaWF0ZWRcbiAgLy8gICAgd2l0aCB0aGUgW0FsbG93UmVzaXphYmxlXSBleHRlbmRlZCBhdHRyaWJ1dGUsIGFuZFxuICAvLyAgICBJc1Jlc2l6YWJsZUFycmF5QnVmZmVyKFYuW1tWaWV3ZWRBcnJheUJ1ZmZlcl1dKSBpc1xuICAvLyAgICB0cnVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAvLyBOb3RlOiByZXNpemFibGUgYXJyYXkgYnVmZmVycyBhcmUgY3VycmVudGx5IGEgcHJvcG9zYWxcblxuICAvLyA1LiBSZXR1cm4gdGhlIElETCB2YWx1ZSBvZiB0eXBlIFQgdGhhdCBpcyBhIHJlZmVyZW5jZVxuICAvLyAgICB0byB0aGUgc2FtZSBvYmplY3QgYXMgVi5cbiAgcmV0dXJuIFZcbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuRGF0YVZpZXcgPSBmdW5jdGlvbiAoViwgb3B0cyA9IHt9KSB7XG4gIC8vIDEuIElmIFR5cGUoVikgaXMgbm90IE9iamVjdCwgb3IgViBkb2VzIG5vdCBoYXZlIGFcbiAgLy8gICAgW1tEYXRhVmlld11dIGludGVybmFsIHNsb3QsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpICE9PSAnT2JqZWN0JyB8fCAhdHlwZXMuaXNEYXRhVmlldyhWKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0RhdGFWaWV3JyxcbiAgICAgIG1lc3NhZ2U6ICdPYmplY3QgaXMgbm90IGEgRGF0YVZpZXcuJ1xuICAgIH0pXG4gIH1cblxuICAvLyAyLiBJZiB0aGUgY29udmVyc2lvbiBpcyBub3QgdG8gYW4gSURMIHR5cGUgYXNzb2NpYXRlZFxuICAvLyAgICB3aXRoIHRoZSBbQWxsb3dTaGFyZWRdIGV4dGVuZGVkIGF0dHJpYnV0ZSwgYW5kXG4gIC8vICAgIElzU2hhcmVkQXJyYXlCdWZmZXIoVi5bW1ZpZXdlZEFycmF5QnVmZmVyXV0pIGlzIHRydWUsXG4gIC8vICAgIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmIChvcHRzLmFsbG93U2hhcmVkID09PSBmYWxzZSAmJiB0eXBlcy5pc1NoYXJlZEFycmF5QnVmZmVyKFYuYnVmZmVyKSkge1xuICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgIGhlYWRlcjogJ0FycmF5QnVmZmVyJyxcbiAgICAgIG1lc3NhZ2U6ICdTaGFyZWRBcnJheUJ1ZmZlciBpcyBub3QgYWxsb3dlZC4nXG4gICAgfSlcbiAgfVxuXG4gIC8vIDMuIElmIHRoZSBjb252ZXJzaW9uIGlzIG5vdCB0byBhbiBJREwgdHlwZSBhc3NvY2lhdGVkXG4gIC8vICAgIHdpdGggdGhlIFtBbGxvd1Jlc2l6YWJsZV0gZXh0ZW5kZWQgYXR0cmlidXRlLCBhbmRcbiAgLy8gICAgSXNSZXNpemFibGVBcnJheUJ1ZmZlcihWLltbVmlld2VkQXJyYXlCdWZmZXJdXSkgaXNcbiAgLy8gICAgdHJ1ZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgLy8gTm90ZTogcmVzaXphYmxlIEFycmF5QnVmZmVycyBhcmUgY3VycmVudGx5IGEgcHJvcG9zYWxcblxuICAvLyA0LiBSZXR1cm4gdGhlIElETCBEYXRhVmlldyB2YWx1ZSB0aGF0IGlzIGEgcmVmZXJlbmNlXG4gIC8vICAgIHRvIHRoZSBzYW1lIG9iamVjdCBhcyBWLlxuICByZXR1cm4gVlxufVxuXG4vLyBodHRwczovL3dlYmlkbC5zcGVjLndoYXR3Zy5vcmcvI0J1ZmZlclNvdXJjZVxud2ViaWRsLmNvbnZlcnRlcnMuQnVmZmVyU291cmNlID0gZnVuY3Rpb24gKFYsIG9wdHMgPSB7fSkge1xuICBpZiAodHlwZXMuaXNBbnlBcnJheUJ1ZmZlcihWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5BcnJheUJ1ZmZlcihWLCBvcHRzKVxuICB9XG5cbiAgaWYgKHR5cGVzLmlzVHlwZWRBcnJheShWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5UeXBlZEFycmF5KFYsIFYuY29uc3RydWN0b3IpXG4gIH1cblxuICBpZiAodHlwZXMuaXNEYXRhVmlldyhWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5EYXRhVmlldyhWLCBvcHRzKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcihgQ291bGQgbm90IGNvbnZlcnQgJHtWfSB0byBhIEJ1ZmZlclNvdXJjZS5gKVxufVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8Qnl0ZVN0cmluZz4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZ1xuKVxuXG53ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxCeXRlU3RyaW5nPiddXG4pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydyZWNvcmQ8Qnl0ZVN0cmluZywgQnl0ZVN0cmluZz4nXSA9IHdlYmlkbC5yZWNvcmRDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmcsXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmdcbilcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHdlYmlkbFxufVxuIiwgImNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IGF0b2IgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5jb25zdCB7IGlzb21vcnBoaWNEZWNvZGUgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5cbmNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNodHRwLXRva2VuLWNvZGUtcG9pbnRcbiAqL1xuY29uc3QgSFRUUF9UT0tFTl9DT0RFUE9JTlRTID0gL15bISMkJSYnKistLl5ffH5BLVphLXowLTldKyQvXG5jb25zdCBIVFRQX1dISVRFU1BBQ0VfUkVHRVggPSAvKFxcdTAwMEF8XFx1MDAwRHxcXHUwMDA5fFxcdTAwMjApLyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNodHRwLXF1b3RlZC1zdHJpbmctdG9rZW4tY29kZS1wb2ludFxuICovXG5jb25zdCBIVFRQX1FVT1RFRF9TVFJJTkdfVE9LRU5TID0gL1tcXHUwMDA5fFxcdTAwMjAtXFx1MDA3RXxcXHUwMDgwLVxcdTAwRkZdLyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkYXRhLXVybC1wcm9jZXNzb3Jcbi8qKiBAcGFyYW0ge1VSTH0gZGF0YVVSTCAqL1xuZnVuY3Rpb24gZGF0YVVSTFByb2Nlc3NvciAoZGF0YVVSTCkge1xuICAvLyAxLiBBc3NlcnQ6IGRhdGFVUkxcdTIwMTlzIHNjaGVtZSBpcyBcImRhdGFcIi5cbiAgYXNzZXJ0KGRhdGFVUkwucHJvdG9jb2wgPT09ICdkYXRhOicpXG5cbiAgLy8gMi4gTGV0IGlucHV0IGJlIHRoZSByZXN1bHQgb2YgcnVubmluZyB0aGUgVVJMXG4gIC8vIHNlcmlhbGl6ZXIgb24gZGF0YVVSTCB3aXRoIGV4Y2x1ZGUgZnJhZ21lbnRcbiAgLy8gc2V0IHRvIHRydWUuXG4gIGxldCBpbnB1dCA9IFVSTFNlcmlhbGl6ZXIoZGF0YVVSTCwgdHJ1ZSlcblxuICAvLyAzLiBSZW1vdmUgdGhlIGxlYWRpbmcgXCJkYXRhOlwiIHN0cmluZyBmcm9tIGlucHV0LlxuICBpbnB1dCA9IGlucHV0LnNsaWNlKDUpXG5cbiAgLy8gNC4gTGV0IHBvc2l0aW9uIHBvaW50IGF0IHRoZSBzdGFydCBvZiBpbnB1dC5cbiAgY29uc3QgcG9zaXRpb24gPSB7IHBvc2l0aW9uOiAwIH1cblxuICAvLyA1LiBMZXQgbWltZVR5cGUgYmUgdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nIGFcbiAgLy8gc2VxdWVuY2Ugb2YgY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IGVxdWFsXG4gIC8vIHRvIFUrMDAyQyAoLCksIGdpdmVuIHBvc2l0aW9uLlxuICBsZXQgbWltZVR5cGUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAnLCcsXG4gICAgaW5wdXQsXG4gICAgcG9zaXRpb25cbiAgKVxuXG4gIC8vIDYuIFN0cmlwIGxlYWRpbmcgYW5kIHRyYWlsaW5nIEFTQ0lJIHdoaXRlc3BhY2VcbiAgLy8gZnJvbSBtaW1lVHlwZS5cbiAgLy8gVW5kaWNpIGltcGxlbWVudGF0aW9uIG5vdGU6IHdlIG5lZWQgdG8gc3RvcmUgdGhlXG4gIC8vIGxlbmd0aCBiZWNhdXNlIGlmIHRoZSBtaW1ldHlwZSBoYXMgc3BhY2VzIHJlbW92ZWQsXG4gIC8vIHRoZSB3cm9uZyBhbW91bnQgd2lsbCBiZSBzbGljZWQgZnJvbSB0aGUgaW5wdXQgaW5cbiAgLy8gc3RlcCAjOVxuICBjb25zdCBtaW1lVHlwZUxlbmd0aCA9IG1pbWVUeXBlLmxlbmd0aFxuICBtaW1lVHlwZSA9IHJlbW92ZUFTQ0lJV2hpdGVzcGFjZShtaW1lVHlwZSwgdHJ1ZSwgdHJ1ZSlcblxuICAvLyA3LiBJZiBwb3NpdGlvbiBpcyBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW5cbiAgLy8gcmV0dXJuIGZhaWx1cmVcbiAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIC8vIDguIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gIC8vIDkuIExldCBlbmNvZGVkQm9keSBiZSB0aGUgcmVtYWluZGVyIG9mIGlucHV0LlxuICBjb25zdCBlbmNvZGVkQm9keSA9IGlucHV0LnNsaWNlKG1pbWVUeXBlTGVuZ3RoICsgMSlcblxuICAvLyAxMC4gTGV0IGJvZHkgYmUgdGhlIHBlcmNlbnQtZGVjb2Rpbmcgb2YgZW5jb2RlZEJvZHkuXG4gIGxldCBib2R5ID0gc3RyaW5nUGVyY2VudERlY29kZShlbmNvZGVkQm9keSlcblxuICAvLyAxMS4gSWYgbWltZVR5cGUgZW5kcyB3aXRoIFUrMDAzQiAoOyksIGZvbGxvd2VkIGJ5XG4gIC8vIHplcm8gb3IgbW9yZSBVKzAwMjAgU1BBQ0UsIGZvbGxvd2VkIGJ5IGFuIEFTQ0lJXG4gIC8vIGNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIFwiYmFzZTY0XCIsIHRoZW46XG4gIGlmICgvOyhcXHUwMDIwKXswLH1iYXNlNjQkL2kudGVzdChtaW1lVHlwZSkpIHtcbiAgICAvLyAxLiBMZXQgc3RyaW5nQm9keSBiZSB0aGUgaXNvbW9ycGhpYyBkZWNvZGUgb2YgYm9keS5cbiAgICBjb25zdCBzdHJpbmdCb2R5ID0gaXNvbW9ycGhpY0RlY29kZShib2R5KVxuXG4gICAgLy8gMi4gU2V0IGJvZHkgdG8gdGhlIGZvcmdpdmluZy1iYXNlNjQgZGVjb2RlIG9mXG4gICAgLy8gc3RyaW5nQm9keS5cbiAgICBib2R5ID0gZm9yZ2l2aW5nQmFzZTY0KHN0cmluZ0JvZHkpXG5cbiAgICAvLyAzLiBJZiBib2R5IGlzIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gICAgaWYgKGJvZHkgPT09ICdmYWlsdXJlJykge1xuICAgICAgcmV0dXJuICdmYWlsdXJlJ1xuICAgIH1cblxuICAgIC8vIDQuIFJlbW92ZSB0aGUgbGFzdCA2IGNvZGUgcG9pbnRzIGZyb20gbWltZVR5cGUuXG4gICAgbWltZVR5cGUgPSBtaW1lVHlwZS5zbGljZSgwLCAtNilcblxuICAgIC8vIDUuIFJlbW92ZSB0cmFpbGluZyBVKzAwMjAgU1BBQ0UgY29kZSBwb2ludHMgZnJvbSBtaW1lVHlwZSxcbiAgICAvLyBpZiBhbnkuXG4gICAgbWltZVR5cGUgPSBtaW1lVHlwZS5yZXBsYWNlKC8oXFx1MDAyMCkrJC8sICcnKVxuXG4gICAgLy8gNi4gUmVtb3ZlIHRoZSBsYXN0IFUrMDAzQiAoOykgY29kZSBwb2ludCBmcm9tIG1pbWVUeXBlLlxuICAgIG1pbWVUeXBlID0gbWltZVR5cGUuc2xpY2UoMCwgLTEpXG4gIH1cblxuICAvLyAxMi4gSWYgbWltZVR5cGUgc3RhcnRzIHdpdGggVSswMDNCICg7KSwgdGhlbiBwcmVwZW5kXG4gIC8vIFwidGV4dC9wbGFpblwiIHRvIG1pbWVUeXBlLlxuICBpZiAobWltZVR5cGUuc3RhcnRzV2l0aCgnOycpKSB7XG4gICAgbWltZVR5cGUgPSAndGV4dC9wbGFpbicgKyBtaW1lVHlwZVxuICB9XG5cbiAgLy8gMTMuIExldCBtaW1lVHlwZVJlY29yZCBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmdcbiAgLy8gbWltZVR5cGUuXG4gIGxldCBtaW1lVHlwZVJlY29yZCA9IHBhcnNlTUlNRVR5cGUobWltZVR5cGUpXG5cbiAgLy8gMTQuIElmIG1pbWVUeXBlUmVjb3JkIGlzIGZhaWx1cmUsIHRoZW4gc2V0XG4gIC8vIG1pbWVUeXBlUmVjb3JkIHRvIHRleHQvcGxhaW47Y2hhcnNldD1VUy1BU0NJSS5cbiAgaWYgKG1pbWVUeXBlUmVjb3JkID09PSAnZmFpbHVyZScpIHtcbiAgICBtaW1lVHlwZVJlY29yZCA9IHBhcnNlTUlNRVR5cGUoJ3RleHQvcGxhaW47Y2hhcnNldD1VUy1BU0NJSScpXG4gIH1cblxuICAvLyAxNS4gUmV0dXJuIGEgbmV3IGRhdGE6IFVSTCBzdHJ1Y3Qgd2hvc2UgTUlNRVxuICAvLyB0eXBlIGlzIG1pbWVUeXBlUmVjb3JkIGFuZCBib2R5IGlzIGJvZHkuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkYXRhLXVybC1zdHJ1Y3RcbiAgcmV0dXJuIHsgbWltZVR5cGU6IG1pbWVUeXBlUmVjb3JkLCBib2R5IH1cbn1cblxuLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXVybC1zZXJpYWxpemVyXG4vKipcbiAqIEBwYXJhbSB7VVJMfSB1cmxcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gZXhjbHVkZUZyYWdtZW50XG4gKi9cbmZ1bmN0aW9uIFVSTFNlcmlhbGl6ZXIgKHVybCwgZXhjbHVkZUZyYWdtZW50ID0gZmFsc2UpIHtcbiAgaWYgKCFleGNsdWRlRnJhZ21lbnQpIHtcbiAgICByZXR1cm4gdXJsLmhyZWZcbiAgfVxuXG4gIGNvbnN0IGhyZWYgPSB1cmwuaHJlZlxuICBjb25zdCBoYXNoTGVuZ3RoID0gdXJsLmhhc2gubGVuZ3RoXG5cbiAgcmV0dXJuIGhhc2hMZW5ndGggPT09IDAgPyBocmVmIDogaHJlZi5zdWJzdHJpbmcoMCwgaHJlZi5sZW5ndGggLSBoYXNoTGVuZ3RoKVxufVxuXG4vLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jY29sbGVjdC1hLXNlcXVlbmNlLW9mLWNvZGUtcG9pbnRzXG4vKipcbiAqIEBwYXJhbSB7KGNoYXI6IHN0cmluZykgPT4gYm9vbGVhbn0gY29uZGl0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gaW5wdXRcbiAqIEBwYXJhbSB7eyBwb3NpdGlvbjogbnVtYmVyIH19IHBvc2l0aW9uXG4gKi9cbmZ1bmN0aW9uIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHMgKGNvbmRpdGlvbiwgaW5wdXQsIHBvc2l0aW9uKSB7XG4gIC8vIDEuIExldCByZXN1bHQgYmUgdGhlIGVtcHR5IHN0cmluZy5cbiAgbGV0IHJlc3VsdCA9ICcnXG5cbiAgLy8gMi4gV2hpbGUgcG9zaXRpb24gZG9lc25cdTIwMTl0IHBvaW50IHBhc3QgdGhlIGVuZCBvZiBpbnB1dCBhbmQgdGhlXG4gIC8vIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0IG1lZXRzIHRoZSBjb25kaXRpb24gY29uZGl0aW9uOlxuICB3aGlsZSAocG9zaXRpb24ucG9zaXRpb24gPCBpbnB1dC5sZW5ndGggJiYgY29uZGl0aW9uKGlucHV0W3Bvc2l0aW9uLnBvc2l0aW9uXSkpIHtcbiAgICAvLyAxLiBBcHBlbmQgdGhhdCBjb2RlIHBvaW50IHRvIHRoZSBlbmQgb2YgcmVzdWx0LlxuICAgIHJlc3VsdCArPSBpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl1cblxuICAgIC8vIDIuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG4gIH1cblxuICAvLyAzLiBSZXR1cm4gcmVzdWx0LlxuICByZXR1cm4gcmVzdWx0XG59XG5cbi8qKlxuICogQSBmYXN0ZXIgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyB0aGF0IG9ubHkgd29ya3Mgd2hlbiBjb21wYXJpbmcgYSBzaW5nbGUgY2hhcmFjdGVyLlxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFxuICogQHBhcmFtIHt7IHBvc2l0aW9uOiBudW1iZXIgfX0gcG9zaXRpb25cbiAqL1xuZnVuY3Rpb24gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QgKGNoYXIsIGlucHV0LCBwb3NpdGlvbikge1xuICBjb25zdCBpZHggPSBpbnB1dC5pbmRleE9mKGNoYXIsIHBvc2l0aW9uLnBvc2l0aW9uKVxuICBjb25zdCBzdGFydCA9IHBvc2l0aW9uLnBvc2l0aW9uXG5cbiAgaWYgKGlkeCA9PT0gLTEpIHtcbiAgICBwb3NpdGlvbi5wb3NpdGlvbiA9IGlucHV0Lmxlbmd0aFxuICAgIHJldHVybiBpbnB1dC5zbGljZShzdGFydClcbiAgfVxuXG4gIHBvc2l0aW9uLnBvc2l0aW9uID0gaWR4XG4gIHJldHVybiBpbnB1dC5zbGljZShzdGFydCwgcG9zaXRpb24ucG9zaXRpb24pXG59XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jc3RyaW5nLXBlcmNlbnQtZGVjb2RlXG4vKiogQHBhcmFtIHtzdHJpbmd9IGlucHV0ICovXG5mdW5jdGlvbiBzdHJpbmdQZXJjZW50RGVjb2RlIChpbnB1dCkge1xuICAvLyAxLiBMZXQgYnl0ZXMgYmUgdGhlIFVURi04IGVuY29kaW5nIG9mIGlucHV0LlxuICBjb25zdCBieXRlcyA9IGVuY29kZXIuZW5jb2RlKGlucHV0KVxuXG4gIC8vIDIuIFJldHVybiB0aGUgcGVyY2VudC1kZWNvZGluZyBvZiBieXRlcy5cbiAgcmV0dXJuIHBlcmNlbnREZWNvZGUoYnl0ZXMpXG59XG5cbi8vIGh0dHBzOi8vdXJsLnNwZWMud2hhdHdnLm9yZy8jcGVyY2VudC1kZWNvZGVcbi8qKiBAcGFyYW0ge1VpbnQ4QXJyYXl9IGlucHV0ICovXG5mdW5jdGlvbiBwZXJjZW50RGVjb2RlIChpbnB1dCkge1xuICAvLyAxLiBMZXQgb3V0cHV0IGJlIGFuIGVtcHR5IGJ5dGUgc2VxdWVuY2UuXG4gIC8qKiBAdHlwZSB7bnVtYmVyW119ICovXG4gIGNvbnN0IG91dHB1dCA9IFtdXG5cbiAgLy8gMi4gRm9yIGVhY2ggYnl0ZSBieXRlIGluIGlucHV0OlxuICBmb3IgKGxldCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aDsgaSsrKSB7XG4gICAgY29uc3QgYnl0ZSA9IGlucHV0W2ldXG5cbiAgICAvLyAxLiBJZiBieXRlIGlzIG5vdCAweDI1ICglKSwgdGhlbiBhcHBlbmQgYnl0ZSB0byBvdXRwdXQuXG4gICAgaWYgKGJ5dGUgIT09IDB4MjUpIHtcbiAgICAgIG91dHB1dC5wdXNoKGJ5dGUpXG5cbiAgICAvLyAyLiBPdGhlcndpc2UsIGlmIGJ5dGUgaXMgMHgyNSAoJSkgYW5kIHRoZSBuZXh0IHR3byBieXRlc1xuICAgIC8vIGFmdGVyIGJ5dGUgaW4gaW5wdXQgYXJlIG5vdCBpbiB0aGUgcmFuZ2VzXG4gICAgLy8gMHgzMCAoMCkgdG8gMHgzOSAoOSksIDB4NDEgKEEpIHRvIDB4NDYgKEYpLFxuICAgIC8vIGFuZCAweDYxIChhKSB0byAweDY2IChmKSwgYWxsIGluY2x1c2l2ZSwgYXBwZW5kIGJ5dGVcbiAgICAvLyB0byBvdXRwdXQuXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIGJ5dGUgPT09IDB4MjUgJiZcbiAgICAgICEvXlswLTlBLUZhLWZdezJ9JC9pLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShpbnB1dFtpICsgMV0sIGlucHV0W2kgKyAyXSkpXG4gICAgKSB7XG4gICAgICBvdXRwdXQucHVzaCgweDI1KVxuXG4gICAgLy8gMy4gT3RoZXJ3aXNlOlxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAxLiBMZXQgYnl0ZVBvaW50IGJlIHRoZSB0d28gYnl0ZXMgYWZ0ZXIgYnl0ZSBpbiBpbnB1dCxcbiAgICAgIC8vIGRlY29kZWQsIGFuZCB0aGVuIGludGVycHJldGVkIGFzIGhleGFkZWNpbWFsIG51bWJlci5cbiAgICAgIGNvbnN0IG5leHRUd29CeXRlcyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoaW5wdXRbaSArIDFdLCBpbnB1dFtpICsgMl0pXG4gICAgICBjb25zdCBieXRlUG9pbnQgPSBOdW1iZXIucGFyc2VJbnQobmV4dFR3b0J5dGVzLCAxNilcblxuICAgICAgLy8gMi4gQXBwZW5kIGEgYnl0ZSB3aG9zZSB2YWx1ZSBpcyBieXRlUG9pbnQgdG8gb3V0cHV0LlxuICAgICAgb3V0cHV0LnB1c2goYnl0ZVBvaW50KVxuXG4gICAgICAvLyAzLiBTa2lwIHRoZSBuZXh0IHR3byBieXRlcyBpbiBpbnB1dC5cbiAgICAgIGkgKz0gMlxuICAgIH1cbiAgfVxuXG4gIC8vIDMuIFJldHVybiBvdXRwdXQuXG4gIHJldHVybiBVaW50OEFycmF5LmZyb20ob3V0cHV0KVxufVxuXG4vLyBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI3BhcnNlLWEtbWltZS10eXBlXG4vKiogQHBhcmFtIHtzdHJpbmd9IGlucHV0ICovXG5mdW5jdGlvbiBwYXJzZU1JTUVUeXBlIChpbnB1dCkge1xuICAvLyAxLiBSZW1vdmUgYW55IGxlYWRpbmcgYW5kIHRyYWlsaW5nIEhUVFAgd2hpdGVzcGFjZVxuICAvLyBmcm9tIGlucHV0LlxuICBpbnB1dCA9IHJlbW92ZUhUVFBXaGl0ZXNwYWNlKGlucHV0LCB0cnVlLCB0cnVlKVxuXG4gIC8vIDIuIExldCBwb3NpdGlvbiBiZSBhIHBvc2l0aW9uIHZhcmlhYmxlIGZvciBpbnB1dCxcbiAgLy8gaW5pdGlhbGx5IHBvaW50aW5nIGF0IHRoZSBzdGFydCBvZiBpbnB1dC5cbiAgY29uc3QgcG9zaXRpb24gPSB7IHBvc2l0aW9uOiAwIH1cblxuICAvLyAzLiBMZXQgdHlwZSBiZSB0aGUgcmVzdWx0IG9mIGNvbGxlY3RpbmcgYSBzZXF1ZW5jZVxuICAvLyBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3QgVSswMDJGICgvKSBmcm9tXG4gIC8vIGlucHV0LCBnaXZlbiBwb3NpdGlvbi5cbiAgY29uc3QgdHlwZSA9IGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICcvJyxcbiAgICBpbnB1dCxcbiAgICBwb3NpdGlvblxuICApXG5cbiAgLy8gNC4gSWYgdHlwZSBpcyB0aGUgZW1wdHkgc3RyaW5nIG9yIGRvZXMgbm90IHNvbGVseVxuICAvLyBjb250YWluIEhUVFAgdG9rZW4gY29kZSBwb2ludHMsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIC8vIGh0dHBzOi8vbWltZXNuaWZmLnNwZWMud2hhdHdnLm9yZy8jaHR0cC10b2tlbi1jb2RlLXBvaW50XG4gIGlmICh0eXBlLmxlbmd0aCA9PT0gMCB8fCAhSFRUUF9UT0tFTl9DT0RFUE9JTlRTLnRlc3QodHlwZSkpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyA1LiBJZiBwb3NpdGlvbiBpcyBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW4gcmV0dXJuXG4gIC8vIGZhaWx1cmVcbiAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID4gaW5wdXQubGVuZ3RoKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgLy8gNi4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLiAoVGhpcyBza2lwcyBwYXN0IFUrMDAyRiAoLykuKVxuICBwb3NpdGlvbi5wb3NpdGlvbisrXG5cbiAgLy8gNy4gTGV0IHN1YnR5cGUgYmUgdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nIGEgc2VxdWVuY2Ugb2ZcbiAgLy8gY29kZSBwb2ludHMgdGhhdCBhcmUgbm90IFUrMDAzQiAoOykgZnJvbSBpbnB1dCwgZ2l2ZW5cbiAgLy8gcG9zaXRpb24uXG4gIGxldCBzdWJ0eXBlID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgJzsnLFxuICAgIGlucHV0LFxuICAgIHBvc2l0aW9uXG4gIClcblxuICAvLyA4LiBSZW1vdmUgYW55IHRyYWlsaW5nIEhUVFAgd2hpdGVzcGFjZSBmcm9tIHN1YnR5cGUuXG4gIHN1YnR5cGUgPSByZW1vdmVIVFRQV2hpdGVzcGFjZShzdWJ0eXBlLCBmYWxzZSwgdHJ1ZSlcblxuICAvLyA5LiBJZiBzdWJ0eXBlIGlzIHRoZSBlbXB0eSBzdHJpbmcgb3IgZG9lcyBub3Qgc29sZWx5XG4gIC8vIGNvbnRhaW4gSFRUUCB0b2tlbiBjb2RlIHBvaW50cywgdGhlbiByZXR1cm4gZmFpbHVyZS5cbiAgaWYgKHN1YnR5cGUubGVuZ3RoID09PSAwIHx8ICFIVFRQX1RPS0VOX0NPREVQT0lOVFMudGVzdChzdWJ0eXBlKSkge1xuICAgIHJldHVybiAnZmFpbHVyZSdcbiAgfVxuXG4gIGNvbnN0IHR5cGVMb3dlcmNhc2UgPSB0eXBlLnRvTG93ZXJDYXNlKClcbiAgY29uc3Qgc3VidHlwZUxvd2VyY2FzZSA9IHN1YnR5cGUudG9Mb3dlckNhc2UoKVxuXG4gIC8vIDEwLiBMZXQgbWltZVR5cGUgYmUgYSBuZXcgTUlNRSB0eXBlIHJlY29yZCB3aG9zZSB0eXBlXG4gIC8vIGlzIHR5cGUsIGluIEFTQ0lJIGxvd2VyY2FzZSwgYW5kIHN1YnR5cGUgaXMgc3VidHlwZSxcbiAgLy8gaW4gQVNDSUkgbG93ZXJjYXNlLlxuICAvLyBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI21pbWUtdHlwZVxuICBjb25zdCBtaW1lVHlwZSA9IHtcbiAgICB0eXBlOiB0eXBlTG93ZXJjYXNlLFxuICAgIHN1YnR5cGU6IHN1YnR5cGVMb3dlcmNhc2UsXG4gICAgLyoqIEB0eXBlIHtNYXA8c3RyaW5nLCBzdHJpbmc+fSAqL1xuICAgIHBhcmFtZXRlcnM6IG5ldyBNYXAoKSxcbiAgICAvLyBodHRwczovL21pbWVzbmlmZi5zcGVjLndoYXR3Zy5vcmcvI21pbWUtdHlwZS1lc3NlbmNlXG4gICAgZXNzZW5jZTogYCR7dHlwZUxvd2VyY2FzZX0vJHtzdWJ0eXBlTG93ZXJjYXNlfWBcbiAgfVxuXG4gIC8vIDExLiBXaGlsZSBwb3NpdGlvbiBpcyBub3QgcGFzdCB0aGUgZW5kIG9mIGlucHV0OlxuICB3aGlsZSAocG9zaXRpb24ucG9zaXRpb24gPCBpbnB1dC5sZW5ndGgpIHtcbiAgICAvLyAxLiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuIChUaGlzIHNraXBzIHBhc3QgVSswMDNCICg7KS4pXG4gICAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gICAgLy8gMi4gQ29sbGVjdCBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIEhUVFBcbiAgICAvLyB3aGl0ZXNwYWNlIGZyb20gaW5wdXQgZ2l2ZW4gcG9zaXRpb24uXG4gICAgY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLXdoaXRlc3BhY2VcbiAgICAgIGNoYXIgPT4gSFRUUF9XSElURVNQQUNFX1JFR0VYLnRlc3QoY2hhciksXG4gICAgICBpbnB1dCxcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuXG4gICAgLy8gMy4gTGV0IHBhcmFtZXRlck5hbWUgYmUgdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nIGFcbiAgICAvLyBzZXF1ZW5jZSBvZiBjb2RlIHBvaW50cyB0aGF0IGFyZSBub3QgVSswMDNCICg7KVxuICAgIC8vIG9yIFUrMDAzRCAoPSkgZnJvbSBpbnB1dCwgZ2l2ZW4gcG9zaXRpb24uXG4gICAgbGV0IHBhcmFtZXRlck5hbWUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzKFxuICAgICAgKGNoYXIpID0+IGNoYXIgIT09ICc7JyAmJiBjaGFyICE9PSAnPScsXG4gICAgICBpbnB1dCxcbiAgICAgIHBvc2l0aW9uXG4gICAgKVxuXG4gICAgLy8gNC4gU2V0IHBhcmFtZXRlck5hbWUgdG8gcGFyYW1ldGVyTmFtZSwgaW4gQVNDSUlcbiAgICAvLyBsb3dlcmNhc2UuXG4gICAgcGFyYW1ldGVyTmFtZSA9IHBhcmFtZXRlck5hbWUudG9Mb3dlckNhc2UoKVxuXG4gICAgLy8gNS4gSWYgcG9zaXRpb24gaXMgbm90IHBhc3QgdGhlIGVuZCBvZiBpbnB1dCwgdGhlbjpcbiAgICBpZiAocG9zaXRpb24ucG9zaXRpb24gPCBpbnB1dC5sZW5ndGgpIHtcbiAgICAgIC8vIDEuIElmIHRoZSBjb2RlIHBvaW50IGF0IHBvc2l0aW9uIHdpdGhpbiBpbnB1dCBpc1xuICAgICAgLy8gVSswMDNCICg7KSwgdGhlbiBjb250aW51ZS5cbiAgICAgIGlmIChpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0gPT09ICc7Jykge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAyLiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuIChUaGlzIHNraXBzIHBhc3QgVSswMDNEICg9KS4pXG4gICAgICBwb3NpdGlvbi5wb3NpdGlvbisrXG4gICAgfVxuXG4gICAgLy8gNi4gSWYgcG9zaXRpb24gaXMgcGFzdCB0aGUgZW5kIG9mIGlucHV0LCB0aGVuIGJyZWFrLlxuICAgIGlmIChwb3NpdGlvbi5wb3NpdGlvbiA+IGlucHV0Lmxlbmd0aCkge1xuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICAvLyA3LiBMZXQgcGFyYW1ldGVyVmFsdWUgYmUgbnVsbC5cbiAgICBsZXQgcGFyYW1ldGVyVmFsdWUgPSBudWxsXG5cbiAgICAvLyA4LiBJZiB0aGUgY29kZSBwb2ludCBhdCBwb3NpdGlvbiB3aXRoaW4gaW5wdXQgaXNcbiAgICAvLyBVKzAwMjIgKFwiKSwgdGhlbjpcbiAgICBpZiAoaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dID09PSAnXCInKSB7XG4gICAgICAvLyAxLiBTZXQgcGFyYW1ldGVyVmFsdWUgdG8gdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nXG4gICAgICAvLyBhbiBIVFRQIHF1b3RlZCBzdHJpbmcgZnJvbSBpbnB1dCwgZ2l2ZW4gcG9zaXRpb25cbiAgICAgIC8vIGFuZCB0aGUgZXh0cmFjdC12YWx1ZSBmbGFnLlxuICAgICAgcGFyYW1ldGVyVmFsdWUgPSBjb2xsZWN0QW5IVFRQUXVvdGVkU3RyaW5nKGlucHV0LCBwb3NpdGlvbiwgdHJ1ZSlcblxuICAgICAgLy8gMi4gQ29sbGVjdCBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdFxuICAgICAgLy8gVSswMDNCICg7KSBmcm9tIGlucHV0LCBnaXZlbiBwb3NpdGlvbi5cbiAgICAgIGNvbGxlY3RBU2VxdWVuY2VPZkNvZGVQb2ludHNGYXN0KFxuICAgICAgICAnOycsXG4gICAgICAgIGlucHV0LFxuICAgICAgICBwb3NpdGlvblxuICAgICAgKVxuXG4gICAgLy8gOS4gT3RoZXJ3aXNlOlxuICAgIH0gZWxzZSB7XG4gICAgICAvLyAxLiBTZXQgcGFyYW1ldGVyVmFsdWUgdG8gdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nXG4gICAgICAvLyBhIHNlcXVlbmNlIG9mIGNvZGUgcG9pbnRzIHRoYXQgYXJlIG5vdCBVKzAwM0IgKDspXG4gICAgICAvLyBmcm9tIGlucHV0LCBnaXZlbiBwb3NpdGlvbi5cbiAgICAgIHBhcmFtZXRlclZhbHVlID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAgICc7JyxcbiAgICAgICAgaW5wdXQsXG4gICAgICAgIHBvc2l0aW9uXG4gICAgICApXG5cbiAgICAgIC8vIDIuIFJlbW92ZSBhbnkgdHJhaWxpbmcgSFRUUCB3aGl0ZXNwYWNlIGZyb20gcGFyYW1ldGVyVmFsdWUuXG4gICAgICBwYXJhbWV0ZXJWYWx1ZSA9IHJlbW92ZUhUVFBXaGl0ZXNwYWNlKHBhcmFtZXRlclZhbHVlLCBmYWxzZSwgdHJ1ZSlcblxuICAgICAgLy8gMy4gSWYgcGFyYW1ldGVyVmFsdWUgaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlbiBjb250aW51ZS5cbiAgICAgIGlmIChwYXJhbWV0ZXJWYWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAxMC4gSWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgYXJlIHRydWVcbiAgICAvLyAtIHBhcmFtZXRlck5hbWUgaXMgbm90IHRoZSBlbXB0eSBzdHJpbmdcbiAgICAvLyAtIHBhcmFtZXRlck5hbWUgc29sZWx5IGNvbnRhaW5zIEhUVFAgdG9rZW4gY29kZSBwb2ludHNcbiAgICAvLyAtIHBhcmFtZXRlclZhbHVlIHNvbGVseSBjb250YWlucyBIVFRQIHF1b3RlZC1zdHJpbmcgdG9rZW4gY29kZSBwb2ludHNcbiAgICAvLyAtIG1pbWVUeXBlXHUyMDE5cyBwYXJhbWV0ZXJzW3BhcmFtZXRlck5hbWVdIGRvZXMgbm90IGV4aXN0XG4gICAgLy8gdGhlbiBzZXQgbWltZVR5cGVcdTIwMTlzIHBhcmFtZXRlcnNbcGFyYW1ldGVyTmFtZV0gdG8gcGFyYW1ldGVyVmFsdWUuXG4gICAgaWYgKFxuICAgICAgcGFyYW1ldGVyTmFtZS5sZW5ndGggIT09IDAgJiZcbiAgICAgIEhUVFBfVE9LRU5fQ09ERVBPSU5UUy50ZXN0KHBhcmFtZXRlck5hbWUpICYmXG4gICAgICAocGFyYW1ldGVyVmFsdWUubGVuZ3RoID09PSAwIHx8IEhUVFBfUVVPVEVEX1NUUklOR19UT0tFTlMudGVzdChwYXJhbWV0ZXJWYWx1ZSkpICYmXG4gICAgICAhbWltZVR5cGUucGFyYW1ldGVycy5oYXMocGFyYW1ldGVyTmFtZSlcbiAgICApIHtcbiAgICAgIG1pbWVUeXBlLnBhcmFtZXRlcnMuc2V0KHBhcmFtZXRlck5hbWUsIHBhcmFtZXRlclZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIC8vIDEyLiBSZXR1cm4gbWltZVR5cGUuXG4gIHJldHVybiBtaW1lVHlwZVxufVxuXG4vLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jZm9yZ2l2aW5nLWJhc2U2NC1kZWNvZGVcbi8qKiBAcGFyYW0ge3N0cmluZ30gZGF0YSAqL1xuZnVuY3Rpb24gZm9yZ2l2aW5nQmFzZTY0IChkYXRhKSB7XG4gIC8vIDEuIFJlbW92ZSBhbGwgQVNDSUkgd2hpdGVzcGFjZSBmcm9tIGRhdGEuXG4gIGRhdGEgPSBkYXRhLnJlcGxhY2UoL1tcXHUwMDA5XFx1MDAwQVxcdTAwMENcXHUwMDBEXFx1MDAyMF0vZywgJycpICAvLyBlc2xpbnQtZGlzYWJsZS1saW5lXG5cbiAgLy8gMi4gSWYgZGF0YVx1MjAxOXMgY29kZSBwb2ludCBsZW5ndGggZGl2aWRlcyBieSA0IGxlYXZpbmdcbiAgLy8gbm8gcmVtYWluZGVyLCB0aGVuOlxuICBpZiAoZGF0YS5sZW5ndGggJSA0ID09PSAwKSB7XG4gICAgLy8gMS4gSWYgZGF0YSBlbmRzIHdpdGggb25lIG9yIHR3byBVKzAwM0QgKD0pIGNvZGUgcG9pbnRzLFxuICAgIC8vIHRoZW4gcmVtb3ZlIHRoZW0gZnJvbSBkYXRhLlxuICAgIGRhdGEgPSBkYXRhLnJlcGxhY2UoLz0/PSQvLCAnJylcbiAgfVxuXG4gIC8vIDMuIElmIGRhdGFcdTIwMTlzIGNvZGUgcG9pbnQgbGVuZ3RoIGRpdmlkZXMgYnkgNCBsZWF2aW5nXG4gIC8vIGEgcmVtYWluZGVyIG9mIDEsIHRoZW4gcmV0dXJuIGZhaWx1cmUuXG4gIGlmIChkYXRhLmxlbmd0aCAlIDQgPT09IDEpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyA0LiBJZiBkYXRhIGNvbnRhaW5zIGEgY29kZSBwb2ludCB0aGF0IGlzIG5vdCBvbmUgb2ZcbiAgLy8gIFUrMDAyQiAoKylcbiAgLy8gIFUrMDAyRiAoLylcbiAgLy8gIEFTQ0lJIGFscGhhbnVtZXJpY1xuICAvLyB0aGVuIHJldHVybiBmYWlsdXJlLlxuICBpZiAoL1teKy8wLTlBLVphLXpdLy50ZXN0KGRhdGEpKSB7XG4gICAgcmV0dXJuICdmYWlsdXJlJ1xuICB9XG5cbiAgY29uc3QgYmluYXJ5ID0gYXRvYihkYXRhKVxuICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJpbmFyeS5sZW5ndGgpXG5cbiAgZm9yIChsZXQgYnl0ZSA9IDA7IGJ5dGUgPCBiaW5hcnkubGVuZ3RoOyBieXRlKyspIHtcbiAgICBieXRlc1tieXRlXSA9IGJpbmFyeS5jaGFyQ29kZUF0KGJ5dGUpXG4gIH1cblxuICByZXR1cm4gYnl0ZXNcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbGxlY3QtYW4taHR0cC1xdW90ZWQtc3RyaW5nXG4vLyB0ZXN0czogaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2V4YW1wbGUtaHR0cC1xdW90ZWQtc3RyaW5nXG4vKipcbiAqIEBwYXJhbSB7c3RyaW5nfSBpbnB1dFxuICogQHBhcmFtIHt7IHBvc2l0aW9uOiBudW1iZXIgfX0gcG9zaXRpb25cbiAqIEBwYXJhbSB7Ym9vbGVhbj99IGV4dHJhY3RWYWx1ZVxuICovXG5mdW5jdGlvbiBjb2xsZWN0QW5IVFRQUXVvdGVkU3RyaW5nIChpbnB1dCwgcG9zaXRpb24sIGV4dHJhY3RWYWx1ZSkge1xuICAvLyAxLiBMZXQgcG9zaXRpb25TdGFydCBiZSBwb3NpdGlvbi5cbiAgY29uc3QgcG9zaXRpb25TdGFydCA9IHBvc2l0aW9uLnBvc2l0aW9uXG5cbiAgLy8gMi4gTGV0IHZhbHVlIGJlIHRoZSBlbXB0eSBzdHJpbmcuXG4gIGxldCB2YWx1ZSA9ICcnXG5cbiAgLy8gMy4gQXNzZXJ0OiB0aGUgY29kZSBwb2ludCBhdCBwb3NpdGlvbiB3aXRoaW4gaW5wdXRcbiAgLy8gaXMgVSswMDIyIChcIikuXG4gIGFzc2VydChpbnB1dFtwb3NpdGlvbi5wb3NpdGlvbl0gPT09ICdcIicpXG5cbiAgLy8gNC4gQWR2YW5jZSBwb3NpdGlvbiBieSAxLlxuICBwb3NpdGlvbi5wb3NpdGlvbisrXG5cbiAgLy8gNS4gV2hpbGUgdHJ1ZTpcbiAgd2hpbGUgKHRydWUpIHtcbiAgICAvLyAxLiBBcHBlbmQgdGhlIHJlc3VsdCBvZiBjb2xsZWN0aW5nIGEgc2VxdWVuY2Ugb2YgY29kZSBwb2ludHNcbiAgICAvLyB0aGF0IGFyZSBub3QgVSswMDIyIChcIikgb3IgVSswMDVDIChcXCkgZnJvbSBpbnB1dCwgZ2l2ZW5cbiAgICAvLyBwb3NpdGlvbiwgdG8gdmFsdWUuXG4gICAgdmFsdWUgKz0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50cyhcbiAgICAgIChjaGFyKSA9PiBjaGFyICE9PSAnXCInICYmIGNoYXIgIT09ICdcXFxcJyxcbiAgICAgIGlucHV0LFxuICAgICAgcG9zaXRpb25cbiAgICApXG5cbiAgICAvLyAyLiBJZiBwb3NpdGlvbiBpcyBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW4gYnJlYWsuXG4gICAgaWYgKHBvc2l0aW9uLnBvc2l0aW9uID49IGlucHV0Lmxlbmd0aCkge1xuICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICAvLyAzLiBMZXQgcXVvdGVPckJhY2tzbGFzaCBiZSB0aGUgY29kZSBwb2ludCBhdCBwb3NpdGlvbiB3aXRoaW5cbiAgICAvLyBpbnB1dC5cbiAgICBjb25zdCBxdW90ZU9yQmFja3NsYXNoID0gaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dXG5cbiAgICAvLyA0LiBBZHZhbmNlIHBvc2l0aW9uIGJ5IDEuXG4gICAgcG9zaXRpb24ucG9zaXRpb24rK1xuXG4gICAgLy8gNS4gSWYgcXVvdGVPckJhY2tzbGFzaCBpcyBVKzAwNUMgKFxcKSwgdGhlbjpcbiAgICBpZiAocXVvdGVPckJhY2tzbGFzaCA9PT0gJ1xcXFwnKSB7XG4gICAgICAvLyAxLiBJZiBwb3NpdGlvbiBpcyBwYXN0IHRoZSBlbmQgb2YgaW5wdXQsIHRoZW4gYXBwZW5kXG4gICAgICAvLyBVKzAwNUMgKFxcKSB0byB2YWx1ZSBhbmQgYnJlYWsuXG4gICAgICBpZiAocG9zaXRpb24ucG9zaXRpb24gPj0gaW5wdXQubGVuZ3RoKSB7XG4gICAgICAgIHZhbHVlICs9ICdcXFxcJ1xuICAgICAgICBicmVha1xuICAgICAgfVxuXG4gICAgICAvLyAyLiBBcHBlbmQgdGhlIGNvZGUgcG9pbnQgYXQgcG9zaXRpb24gd2l0aGluIGlucHV0IHRvIHZhbHVlLlxuICAgICAgdmFsdWUgKz0gaW5wdXRbcG9zaXRpb24ucG9zaXRpb25dXG5cbiAgICAgIC8vIDMuIEFkdmFuY2UgcG9zaXRpb24gYnkgMS5cbiAgICAgIHBvc2l0aW9uLnBvc2l0aW9uKytcblxuICAgIC8vIDYuIE90aGVyd2lzZTpcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMS4gQXNzZXJ0OiBxdW90ZU9yQmFja3NsYXNoIGlzIFUrMDAyMiAoXCIpLlxuICAgICAgYXNzZXJ0KHF1b3RlT3JCYWNrc2xhc2ggPT09ICdcIicpXG5cbiAgICAgIC8vIDIuIEJyZWFrLlxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICAvLyA2LiBJZiB0aGUgZXh0cmFjdC12YWx1ZSBmbGFnIGlzIHNldCwgdGhlbiByZXR1cm4gdmFsdWUuXG4gIGlmIChleHRyYWN0VmFsdWUpIHtcbiAgICByZXR1cm4gdmFsdWVcbiAgfVxuXG4gIC8vIDcuIFJldHVybiB0aGUgY29kZSBwb2ludHMgZnJvbSBwb3NpdGlvblN0YXJ0IHRvIHBvc2l0aW9uLFxuICAvLyBpbmNsdXNpdmUsIHdpdGhpbiBpbnB1dC5cbiAgcmV0dXJuIGlucHV0LnNsaWNlKHBvc2l0aW9uU3RhcnQsIHBvc2l0aW9uLnBvc2l0aW9uKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9taW1lc25pZmYuc3BlYy53aGF0d2cub3JnLyNzZXJpYWxpemUtYS1taW1lLXR5cGVcbiAqL1xuZnVuY3Rpb24gc2VyaWFsaXplQU1pbWVUeXBlIChtaW1lVHlwZSkge1xuICBhc3NlcnQobWltZVR5cGUgIT09ICdmYWlsdXJlJylcbiAgY29uc3QgeyBwYXJhbWV0ZXJzLCBlc3NlbmNlIH0gPSBtaW1lVHlwZVxuXG4gIC8vIDEuIExldCBzZXJpYWxpemF0aW9uIGJlIHRoZSBjb25jYXRlbmF0aW9uIG9mIG1pbWVUeXBlXHUyMDE5c1xuICAvLyAgICB0eXBlLCBVKzAwMkYgKC8pLCBhbmQgbWltZVR5cGVcdTIwMTlzIHN1YnR5cGUuXG4gIGxldCBzZXJpYWxpemF0aW9uID0gZXNzZW5jZVxuXG4gIC8vIDIuIEZvciBlYWNoIG5hbWUgXHUyMTkyIHZhbHVlIG9mIG1pbWVUeXBlXHUyMDE5cyBwYXJhbWV0ZXJzOlxuICBmb3IgKGxldCBbbmFtZSwgdmFsdWVdIG9mIHBhcmFtZXRlcnMuZW50cmllcygpKSB7XG4gICAgLy8gMS4gQXBwZW5kIFUrMDAzQiAoOykgdG8gc2VyaWFsaXphdGlvbi5cbiAgICBzZXJpYWxpemF0aW9uICs9ICc7J1xuXG4gICAgLy8gMi4gQXBwZW5kIG5hbWUgdG8gc2VyaWFsaXphdGlvbi5cbiAgICBzZXJpYWxpemF0aW9uICs9IG5hbWVcblxuICAgIC8vIDMuIEFwcGVuZCBVKzAwM0QgKD0pIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSAnPSdcblxuICAgIC8vIDQuIElmIHZhbHVlIGRvZXMgbm90IHNvbGVseSBjb250YWluIEhUVFAgdG9rZW4gY29kZVxuICAgIC8vICAgIHBvaW50cyBvciB2YWx1ZSBpcyB0aGUgZW1wdHkgc3RyaW5nLCB0aGVuOlxuICAgIGlmICghSFRUUF9UT0tFTl9DT0RFUE9JTlRTLnRlc3QodmFsdWUpKSB7XG4gICAgICAvLyAxLiBQcmVjZWRlIGVhY2ggb2NjdXJlbmNlIG9mIFUrMDAyMiAoXCIpIG9yXG4gICAgICAvLyAgICBVKzAwNUMgKFxcKSBpbiB2YWx1ZSB3aXRoIFUrMDA1QyAoXFwpLlxuICAgICAgdmFsdWUgPSB2YWx1ZS5yZXBsYWNlKC8oXFxcXHxcIikvZywgJ1xcXFwkMScpXG5cbiAgICAgIC8vIDIuIFByZXBlbmQgVSswMDIyIChcIikgdG8gdmFsdWUuXG4gICAgICB2YWx1ZSA9ICdcIicgKyB2YWx1ZVxuXG4gICAgICAvLyAzLiBBcHBlbmQgVSswMDIyIChcIikgdG8gdmFsdWUuXG4gICAgICB2YWx1ZSArPSAnXCInXG4gICAgfVxuXG4gICAgLy8gNS4gQXBwZW5kIHZhbHVlIHRvIHNlcmlhbGl6YXRpb24uXG4gICAgc2VyaWFsaXphdGlvbiArPSB2YWx1ZVxuICB9XG5cbiAgLy8gMy4gUmV0dXJuIHNlcmlhbGl6YXRpb24uXG4gIHJldHVybiBzZXJpYWxpemF0aW9uXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC13aGl0ZXNwYWNlXG4gKiBAcGFyYW0ge3N0cmluZ30gY2hhclxuICovXG5mdW5jdGlvbiBpc0hUVFBXaGl0ZVNwYWNlIChjaGFyKSB7XG4gIHJldHVybiBjaGFyID09PSAnXFxyJyB8fCBjaGFyID09PSAnXFxuJyB8fCBjaGFyID09PSAnXFx0JyB8fCBjaGFyID09PSAnICdcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLXdoaXRlc3BhY2VcbiAqIEBwYXJhbSB7c3RyaW5nfSBzdHJcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlSFRUUFdoaXRlc3BhY2UgKHN0ciwgbGVhZGluZyA9IHRydWUsIHRyYWlsaW5nID0gdHJ1ZSkge1xuICBsZXQgbGVhZCA9IDBcbiAgbGV0IHRyYWlsID0gc3RyLmxlbmd0aCAtIDFcblxuICBpZiAobGVhZGluZykge1xuICAgIGZvciAoOyBsZWFkIDwgc3RyLmxlbmd0aCAmJiBpc0hUVFBXaGl0ZVNwYWNlKHN0cltsZWFkXSk7IGxlYWQrKyk7XG4gIH1cblxuICBpZiAodHJhaWxpbmcpIHtcbiAgICBmb3IgKDsgdHJhaWwgPiAwICYmIGlzSFRUUFdoaXRlU3BhY2Uoc3RyW3RyYWlsXSk7IHRyYWlsLS0pO1xuICB9XG5cbiAgcmV0dXJuIHN0ci5zbGljZShsZWFkLCB0cmFpbCArIDEpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jYXNjaWktd2hpdGVzcGFjZVxuICogQHBhcmFtIHtzdHJpbmd9IGNoYXJcbiAqL1xuZnVuY3Rpb24gaXNBU0NJSVdoaXRlc3BhY2UgKGNoYXIpIHtcbiAgcmV0dXJuIGNoYXIgPT09ICdcXHInIHx8IGNoYXIgPT09ICdcXG4nIHx8IGNoYXIgPT09ICdcXHQnIHx8IGNoYXIgPT09ICdcXGYnIHx8IGNoYXIgPT09ICcgJ1xufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9pbmZyYS5zcGVjLndoYXR3Zy5vcmcvI3N0cmlwLWxlYWRpbmctYW5kLXRyYWlsaW5nLWFzY2lpLXdoaXRlc3BhY2VcbiAqL1xuZnVuY3Rpb24gcmVtb3ZlQVNDSUlXaGl0ZXNwYWNlIChzdHIsIGxlYWRpbmcgPSB0cnVlLCB0cmFpbGluZyA9IHRydWUpIHtcbiAgbGV0IGxlYWQgPSAwXG4gIGxldCB0cmFpbCA9IHN0ci5sZW5ndGggLSAxXG5cbiAgaWYgKGxlYWRpbmcpIHtcbiAgICBmb3IgKDsgbGVhZCA8IHN0ci5sZW5ndGggJiYgaXNBU0NJSVdoaXRlc3BhY2Uoc3RyW2xlYWRdKTsgbGVhZCsrKTtcbiAgfVxuXG4gIGlmICh0cmFpbGluZykge1xuICAgIGZvciAoOyB0cmFpbCA+IDAgJiYgaXNBU0NJSVdoaXRlc3BhY2Uoc3RyW3RyYWlsXSk7IHRyYWlsLS0pO1xuICB9XG5cbiAgcmV0dXJuIHN0ci5zbGljZShsZWFkLCB0cmFpbCArIDEpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBkYXRhVVJMUHJvY2Vzc29yLFxuICBVUkxTZXJpYWxpemVyLFxuICBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzLFxuICBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCxcbiAgc3RyaW5nUGVyY2VudERlY29kZSxcbiAgcGFyc2VNSU1FVHlwZSxcbiAgY29sbGVjdEFuSFRUUFF1b3RlZFN0cmluZyxcbiAgc2VyaWFsaXplQU1pbWVUeXBlXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgQmxvYiwgRmlsZTogTmF0aXZlRmlsZSB9ID0gcmVxdWlyZSgnYnVmZmVyJylcbmNvbnN0IHsgdHlwZXMgfSA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgeyBrU3RhdGUgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IGlzQmxvYkxpa2UgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBwYXJzZU1JTUVUeXBlLCBzZXJpYWxpemVBTWltZVR5cGUgfSA9IHJlcXVpcmUoJy4vZGF0YVVSTCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKClcblxuY2xhc3MgRmlsZSBleHRlbmRzIEJsb2Ige1xuICBjb25zdHJ1Y3RvciAoZmlsZUJpdHMsIGZpbGVOYW1lLCBvcHRpb25zID0ge30pIHtcbiAgICAvLyBUaGUgRmlsZSBjb25zdHJ1Y3RvciBpcyBpbnZva2VkIHdpdGggdHdvIG9yIHRocmVlIHBhcmFtZXRlcnMsIGRlcGVuZGluZ1xuICAgIC8vIG9uIHdoZXRoZXIgdGhlIG9wdGlvbmFsIGRpY3Rpb25hcnkgcGFyYW1ldGVyIGlzIHVzZWQuIFdoZW4gdGhlIEZpbGUoKVxuICAgIC8vIGNvbnN0cnVjdG9yIGlzIGludm9rZWQsIHVzZXIgYWdlbnRzIG11c3QgcnVuIHRoZSBmb2xsb3dpbmcgc3RlcHM6XG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCB7IGhlYWRlcjogJ0ZpbGUgY29uc3RydWN0b3InIH0pXG5cbiAgICBmaWxlQml0cyA9IHdlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxCbG9iUGFydD4nXShmaWxlQml0cylcbiAgICBmaWxlTmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhmaWxlTmFtZSlcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuRmlsZVByb3BlcnR5QmFnKG9wdGlvbnMpXG5cbiAgICAvLyAxLiBMZXQgYnl0ZXMgYmUgdGhlIHJlc3VsdCBvZiBwcm9jZXNzaW5nIGJsb2IgcGFydHMgZ2l2ZW4gZmlsZUJpdHMgYW5kXG4gICAgLy8gb3B0aW9ucy5cbiAgICAvLyBOb3RlOiBCbG9iIGhhbmRsZXMgdGhpcyBmb3IgdXNcblxuICAgIC8vIDIuIExldCBuIGJlIHRoZSBmaWxlTmFtZSBhcmd1bWVudCB0byB0aGUgY29uc3RydWN0b3IuXG4gICAgY29uc3QgbiA9IGZpbGVOYW1lXG5cbiAgICAvLyAzLiBQcm9jZXNzIEZpbGVQcm9wZXJ0eUJhZyBkaWN0aW9uYXJ5IGFyZ3VtZW50IGJ5IHJ1bm5pbmcgdGhlIGZvbGxvd2luZ1xuICAgIC8vIHN1YnN0ZXBzOlxuXG4gICAgLy8gICAgMS4gSWYgdGhlIHR5cGUgbWVtYmVyIGlzIHByb3ZpZGVkIGFuZCBpcyBub3QgdGhlIGVtcHR5IHN0cmluZywgbGV0IHRcbiAgICAvLyAgICBiZSBzZXQgdG8gdGhlIHR5cGUgZGljdGlvbmFyeSBtZW1iZXIuIElmIHQgY29udGFpbnMgYW55IGNoYXJhY3RlcnNcbiAgICAvLyAgICBvdXRzaWRlIHRoZSByYW5nZSBVKzAwMjAgdG8gVSswMDdFLCB0aGVuIHNldCB0IHRvIHRoZSBlbXB0eSBzdHJpbmdcbiAgICAvLyAgICBhbmQgcmV0dXJuIGZyb20gdGhlc2Ugc3Vic3RlcHMuXG4gICAgLy8gICAgMi4gQ29udmVydCBldmVyeSBjaGFyYWN0ZXIgaW4gdCB0byBBU0NJSSBsb3dlcmNhc2UuXG4gICAgbGV0IHQgPSBvcHRpb25zLnR5cGVcbiAgICBsZXQgZFxuXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWxhYmVsc1xuICAgIHN1YnN0ZXA6IHtcbiAgICAgIGlmICh0KSB7XG4gICAgICAgIHQgPSBwYXJzZU1JTUVUeXBlKHQpXG5cbiAgICAgICAgaWYgKHQgPT09ICdmYWlsdXJlJykge1xuICAgICAgICAgIHQgPSAnJ1xuICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1sYWJlbHNcbiAgICAgICAgICBicmVhayBzdWJzdGVwXG4gICAgICAgIH1cblxuICAgICAgICB0ID0gc2VyaWFsaXplQU1pbWVUeXBlKHQpLnRvTG93ZXJDYXNlKClcbiAgICAgIH1cblxuICAgICAgLy8gICAgMy4gSWYgdGhlIGxhc3RNb2RpZmllZCBtZW1iZXIgaXMgcHJvdmlkZWQsIGxldCBkIGJlIHNldCB0byB0aGVcbiAgICAgIC8vICAgIGxhc3RNb2RpZmllZCBkaWN0aW9uYXJ5IG1lbWJlci4gSWYgaXQgaXMgbm90IHByb3ZpZGVkLCBzZXQgZCB0byB0aGVcbiAgICAgIC8vICAgIGN1cnJlbnQgZGF0ZSBhbmQgdGltZSByZXByZXNlbnRlZCBhcyB0aGUgbnVtYmVyIG9mIG1pbGxpc2Vjb25kcyBzaW5jZVxuICAgICAgLy8gICAgdGhlIFVuaXggRXBvY2ggKHdoaWNoIGlzIHRoZSBlcXVpdmFsZW50IG9mIERhdGUubm93KCkgW0VDTUEtMjYyXSkuXG4gICAgICBkID0gb3B0aW9ucy5sYXN0TW9kaWZpZWRcbiAgICB9XG5cbiAgICAvLyA0LiBSZXR1cm4gYSBuZXcgRmlsZSBvYmplY3QgRiBzdWNoIHRoYXQ6XG4gICAgLy8gRiByZWZlcnMgdG8gdGhlIGJ5dGVzIGJ5dGUgc2VxdWVuY2UuXG4gICAgLy8gRi5zaXplIGlzIHNldCB0byB0aGUgbnVtYmVyIG9mIHRvdGFsIGJ5dGVzIGluIGJ5dGVzLlxuICAgIC8vIEYubmFtZSBpcyBzZXQgdG8gbi5cbiAgICAvLyBGLnR5cGUgaXMgc2V0IHRvIHQuXG4gICAgLy8gRi5sYXN0TW9kaWZpZWQgaXMgc2V0IHRvIGQuXG5cbiAgICBzdXBlcihwcm9jZXNzQmxvYlBhcnRzKGZpbGVCaXRzLCBvcHRpb25zKSwgeyB0eXBlOiB0IH0pXG4gICAgdGhpc1trU3RhdGVdID0ge1xuICAgICAgbmFtZTogbixcbiAgICAgIGxhc3RNb2RpZmllZDogZCxcbiAgICAgIHR5cGU6IHRcbiAgICB9XG4gIH1cblxuICBnZXQgbmFtZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubmFtZVxuICB9XG5cbiAgZ2V0IGxhc3RNb2RpZmllZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubGFzdE1vZGlmaWVkXG4gIH1cblxuICBnZXQgdHlwZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0udHlwZVxuICB9XG59XG5cbmNsYXNzIEZpbGVMaWtlIHtcbiAgY29uc3RydWN0b3IgKGJsb2JMaWtlLCBmaWxlTmFtZSwgb3B0aW9ucyA9IHt9KSB7XG4gICAgLy8gVE9ETzogYXJndW1lbnQgaWRsIHR5cGUgY2hlY2tcblxuICAgIC8vIFRoZSBGaWxlIGNvbnN0cnVjdG9yIGlzIGludm9rZWQgd2l0aCB0d28gb3IgdGhyZWUgcGFyYW1ldGVycywgZGVwZW5kaW5nXG4gICAgLy8gb24gd2hldGhlciB0aGUgb3B0aW9uYWwgZGljdGlvbmFyeSBwYXJhbWV0ZXIgaXMgdXNlZC4gV2hlbiB0aGUgRmlsZSgpXG4gICAgLy8gY29uc3RydWN0b3IgaXMgaW52b2tlZCwgdXNlciBhZ2VudHMgbXVzdCBydW4gdGhlIGZvbGxvd2luZyBzdGVwczpcblxuICAgIC8vIDEuIExldCBieXRlcyBiZSB0aGUgcmVzdWx0IG9mIHByb2Nlc3NpbmcgYmxvYiBwYXJ0cyBnaXZlbiBmaWxlQml0cyBhbmRcbiAgICAvLyBvcHRpb25zLlxuXG4gICAgLy8gMi4gTGV0IG4gYmUgdGhlIGZpbGVOYW1lIGFyZ3VtZW50IHRvIHRoZSBjb25zdHJ1Y3Rvci5cbiAgICBjb25zdCBuID0gZmlsZU5hbWVcblxuICAgIC8vIDMuIFByb2Nlc3MgRmlsZVByb3BlcnR5QmFnIGRpY3Rpb25hcnkgYXJndW1lbnQgYnkgcnVubmluZyB0aGUgZm9sbG93aW5nXG4gICAgLy8gc3Vic3RlcHM6XG5cbiAgICAvLyAgICAxLiBJZiB0aGUgdHlwZSBtZW1iZXIgaXMgcHJvdmlkZWQgYW5kIGlzIG5vdCB0aGUgZW1wdHkgc3RyaW5nLCBsZXQgdFxuICAgIC8vICAgIGJlIHNldCB0byB0aGUgdHlwZSBkaWN0aW9uYXJ5IG1lbWJlci4gSWYgdCBjb250YWlucyBhbnkgY2hhcmFjdGVyc1xuICAgIC8vICAgIG91dHNpZGUgdGhlIHJhbmdlIFUrMDAyMCB0byBVKzAwN0UsIHRoZW4gc2V0IHQgdG8gdGhlIGVtcHR5IHN0cmluZ1xuICAgIC8vICAgIGFuZCByZXR1cm4gZnJvbSB0aGVzZSBzdWJzdGVwcy5cbiAgICAvLyAgICBUT0RPXG4gICAgY29uc3QgdCA9IG9wdGlvbnMudHlwZVxuXG4gICAgLy8gICAgMi4gQ29udmVydCBldmVyeSBjaGFyYWN0ZXIgaW4gdCB0byBBU0NJSSBsb3dlcmNhc2UuXG4gICAgLy8gICAgVE9ET1xuXG4gICAgLy8gICAgMy4gSWYgdGhlIGxhc3RNb2RpZmllZCBtZW1iZXIgaXMgcHJvdmlkZWQsIGxldCBkIGJlIHNldCB0byB0aGVcbiAgICAvLyAgICBsYXN0TW9kaWZpZWQgZGljdGlvbmFyeSBtZW1iZXIuIElmIGl0IGlzIG5vdCBwcm92aWRlZCwgc2V0IGQgdG8gdGhlXG4gICAgLy8gICAgY3VycmVudCBkYXRlIGFuZCB0aW1lIHJlcHJlc2VudGVkIGFzIHRoZSBudW1iZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlXG4gICAgLy8gICAgdGhlIFVuaXggRXBvY2ggKHdoaWNoIGlzIHRoZSBlcXVpdmFsZW50IG9mIERhdGUubm93KCkgW0VDTUEtMjYyXSkuXG4gICAgY29uc3QgZCA9IG9wdGlvbnMubGFzdE1vZGlmaWVkID8/IERhdGUubm93KClcblxuICAgIC8vIDQuIFJldHVybiBhIG5ldyBGaWxlIG9iamVjdCBGIHN1Y2ggdGhhdDpcbiAgICAvLyBGIHJlZmVycyB0byB0aGUgYnl0ZXMgYnl0ZSBzZXF1ZW5jZS5cbiAgICAvLyBGLnNpemUgaXMgc2V0IHRvIHRoZSBudW1iZXIgb2YgdG90YWwgYnl0ZXMgaW4gYnl0ZXMuXG4gICAgLy8gRi5uYW1lIGlzIHNldCB0byBuLlxuICAgIC8vIEYudHlwZSBpcyBzZXQgdG8gdC5cbiAgICAvLyBGLmxhc3RNb2RpZmllZCBpcyBzZXQgdG8gZC5cblxuICAgIHRoaXNba1N0YXRlXSA9IHtcbiAgICAgIGJsb2JMaWtlLFxuICAgICAgbmFtZTogbixcbiAgICAgIHR5cGU6IHQsXG4gICAgICBsYXN0TW9kaWZpZWQ6IGRcbiAgICB9XG4gIH1cblxuICBzdHJlYW0gKC4uLmFyZ3MpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYmxvYkxpa2Uuc3RyZWFtKC4uLmFyZ3MpXG4gIH1cblxuICBhcnJheUJ1ZmZlciAoLi4uYXJncykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS5hcnJheUJ1ZmZlciguLi5hcmdzKVxuICB9XG5cbiAgc2xpY2UgKC4uLmFyZ3MpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYmxvYkxpa2Uuc2xpY2UoLi4uYXJncylcbiAgfVxuXG4gIHRleHQgKC4uLmFyZ3MpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYmxvYkxpa2UudGV4dCguLi5hcmdzKVxuICB9XG5cbiAgZ2V0IHNpemUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVMaWtlKVxuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5ibG9iTGlrZS5zaXplXG4gIH1cblxuICBnZXQgdHlwZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJsb2JMaWtlLnR5cGVcbiAgfVxuXG4gIGdldCBuYW1lICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlTGlrZSlcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubmFtZVxuICB9XG5cbiAgZ2V0IGxhc3RNb2RpZmllZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZUxpa2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmxhc3RNb2RpZmllZFxuICB9XG5cbiAgZ2V0IFtTeW1ib2wudG9TdHJpbmdUYWddICgpIHtcbiAgICByZXR1cm4gJ0ZpbGUnXG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRmlsZS5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0ZpbGUnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICBuYW1lOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBsYXN0TW9kaWZpZWQ6IGtFbnVtZXJhYmxlUHJvcGVydHlcbn0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkJsb2IgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKEJsb2IpXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkJsb2JQYXJ0ID0gZnVuY3Rpb24gKFYsIG9wdHMpIHtcbiAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgPT09ICdPYmplY3QnKSB7XG4gICAgaWYgKGlzQmxvYkxpa2UoVikpIHtcbiAgICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CbG9iKFYsIHsgc3RyaWN0OiBmYWxzZSB9KVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIEFycmF5QnVmZmVyLmlzVmlldyhWKSB8fFxuICAgICAgdHlwZXMuaXNBbnlBcnJheUJ1ZmZlcihWKVxuICAgICkge1xuICAgICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkJ1ZmZlclNvdXJjZShWLCBvcHRzKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoViwgb3B0cylcbn1cblxud2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPEJsb2JQYXJ0PiddID0gd2ViaWRsLnNlcXVlbmNlQ29udmVydGVyKFxuICB3ZWJpZGwuY29udmVydGVycy5CbG9iUGFydFxuKVxuXG4vLyBodHRwczovL3d3dy53My5vcmcvVFIvRmlsZUFQSS8jZGZuLUZpbGVQcm9wZXJ0eUJhZ1xud2ViaWRsLmNvbnZlcnRlcnMuRmlsZVByb3BlcnR5QmFnID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAga2V5OiAnbGFzdE1vZGlmaWVkJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWydsb25nIGxvbmcnXSxcbiAgICBnZXQgZGVmYXVsdFZhbHVlICgpIHtcbiAgICAgIHJldHVybiBEYXRlLm5vdygpXG4gICAgfVxuICB9LFxuICB7XG4gICAga2V5OiAndHlwZScsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiAnJ1xuICB9LFxuICB7XG4gICAga2V5OiAnZW5kaW5ncycsXG4gICAgY29udmVydGVyOiAodmFsdWUpID0+IHtcbiAgICAgIHZhbHVlID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKHZhbHVlKVxuICAgICAgdmFsdWUgPSB2YWx1ZS50b0xvd2VyQ2FzZSgpXG5cbiAgICAgIGlmICh2YWx1ZSAhPT0gJ25hdGl2ZScpIHtcbiAgICAgICAgdmFsdWUgPSAndHJhbnNwYXJlbnQnXG4gICAgICB9XG5cbiAgICAgIHJldHVybiB2YWx1ZVxuICAgIH0sXG4gICAgZGVmYXVsdFZhbHVlOiAndHJhbnNwYXJlbnQnXG4gIH1cbl0pXG5cbi8qKlxuICogQHNlZSBodHRwczovL3d3dy53My5vcmcvVFIvRmlsZUFQSS8jcHJvY2Vzcy1ibG9iLXBhcnRzXG4gKiBAcGFyYW0geyhOb2RlSlMuVHlwZWRBcnJheXxCbG9ifHN0cmluZylbXX0gcGFydHNcbiAqIEBwYXJhbSB7eyB0eXBlOiBzdHJpbmcsIGVuZGluZ3M6IHN0cmluZyB9fSBvcHRpb25zXG4gKi9cbmZ1bmN0aW9uIHByb2Nlc3NCbG9iUGFydHMgKHBhcnRzLCBvcHRpb25zKSB7XG4gIC8vIDEuIExldCBieXRlcyBiZSBhbiBlbXB0eSBzZXF1ZW5jZSBvZiBieXRlcy5cbiAgLyoqIEB0eXBlIHtOb2RlSlMuVHlwZWRBcnJheVtdfSAqL1xuICBjb25zdCBieXRlcyA9IFtdXG5cbiAgLy8gMi4gRm9yIGVhY2ggZWxlbWVudCBpbiBwYXJ0czpcbiAgZm9yIChjb25zdCBlbGVtZW50IG9mIHBhcnRzKSB7XG4gICAgLy8gMS4gSWYgZWxlbWVudCBpcyBhIFVTVlN0cmluZywgcnVuIHRoZSBmb2xsb3dpbmcgc3Vic3RlcHM6XG4gICAgaWYgKHR5cGVvZiBlbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgICAgLy8gMS4gTGV0IHMgYmUgZWxlbWVudC5cbiAgICAgIGxldCBzID0gZWxlbWVudFxuXG4gICAgICAvLyAyLiBJZiB0aGUgZW5kaW5ncyBtZW1iZXIgb2Ygb3B0aW9ucyBpcyBcIm5hdGl2ZVwiLCBzZXQgc1xuICAgICAgLy8gICAgdG8gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGxpbmUgZW5kaW5ncyB0byBuYXRpdmVcbiAgICAgIC8vICAgIG9mIGVsZW1lbnQuXG4gICAgICBpZiAob3B0aW9ucy5lbmRpbmdzID09PSAnbmF0aXZlJykge1xuICAgICAgICBzID0gY29udmVydExpbmVFbmRpbmdzTmF0aXZlKHMpXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIEFwcGVuZCB0aGUgcmVzdWx0IG9mIFVURi04IGVuY29kaW5nIHMgdG8gYnl0ZXMuXG4gICAgICBieXRlcy5wdXNoKGVuY29kZXIuZW5jb2RlKHMpKVxuICAgIH0gZWxzZSBpZiAoXG4gICAgICB0eXBlcy5pc0FueUFycmF5QnVmZmVyKGVsZW1lbnQpIHx8XG4gICAgICB0eXBlcy5pc1R5cGVkQXJyYXkoZWxlbWVudClcbiAgICApIHtcbiAgICAgIC8vIDIuIElmIGVsZW1lbnQgaXMgYSBCdWZmZXJTb3VyY2UsIGdldCBhIGNvcHkgb2YgdGhlXG4gICAgICAvLyAgICBieXRlcyBoZWxkIGJ5IHRoZSBidWZmZXIgc291cmNlLCBhbmQgYXBwZW5kIHRob3NlXG4gICAgICAvLyAgICBieXRlcyB0byBieXRlcy5cbiAgICAgIGlmICghZWxlbWVudC5idWZmZXIpIHsgLy8gQXJyYXlCdWZmZXJcbiAgICAgICAgYnl0ZXMucHVzaChuZXcgVWludDhBcnJheShlbGVtZW50KSlcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgICAgbmV3IFVpbnQ4QXJyYXkoZWxlbWVudC5idWZmZXIsIGVsZW1lbnQuYnl0ZU9mZnNldCwgZWxlbWVudC5ieXRlTGVuZ3RoKVxuICAgICAgICApXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChpc0Jsb2JMaWtlKGVsZW1lbnQpKSB7XG4gICAgICAvLyAzLiBJZiBlbGVtZW50IGlzIGEgQmxvYiwgYXBwZW5kIHRoZSBieXRlcyBpdCByZXByZXNlbnRzXG4gICAgICAvLyAgICB0byBieXRlcy5cbiAgICAgIGJ5dGVzLnB1c2goZWxlbWVudClcbiAgICB9XG4gIH1cblxuICAvLyAzLiBSZXR1cm4gYnl0ZXMuXG4gIHJldHVybiBieXRlc1xufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93d3cudzMub3JnL1RSL0ZpbGVBUEkvI2NvbnZlcnQtbGluZS1lbmRpbmdzLXRvLW5hdGl2ZVxuICogQHBhcmFtIHtzdHJpbmd9IHNcbiAqL1xuZnVuY3Rpb24gY29udmVydExpbmVFbmRpbmdzTmF0aXZlIChzKSB7XG4gIC8vIDEuIExldCBuYXRpdmUgbGluZSBlbmRpbmcgYmUgYmUgdGhlIGNvZGUgcG9pbnQgVSswMDBBIExGLlxuICBsZXQgbmF0aXZlTGluZUVuZGluZyA9ICdcXG4nXG5cbiAgLy8gMi4gSWYgdGhlIHVuZGVybHlpbmcgcGxhdGZvcm1cdTIwMTlzIGNvbnZlbnRpb25zIGFyZSB0b1xuICAvLyAgICByZXByZXNlbnQgbmV3bGluZXMgYXMgYSBjYXJyaWFnZSByZXR1cm4gYW5kIGxpbmUgZmVlZFxuICAvLyAgICBzZXF1ZW5jZSwgc2V0IG5hdGl2ZSBsaW5lIGVuZGluZyB0byB0aGUgY29kZSBwb2ludFxuICAvLyAgICBVKzAwMEQgQ1IgZm9sbG93ZWQgYnkgdGhlIGNvZGUgcG9pbnQgVSswMDBBIExGLlxuICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgIG5hdGl2ZUxpbmVFbmRpbmcgPSAnXFxyXFxuJ1xuICB9XG5cbiAgcmV0dXJuIHMucmVwbGFjZSgvXFxyP1xcbi9nLCBuYXRpdmVMaW5lRW5kaW5nKVxufVxuXG4vLyBJZiB0aGlzIGZ1bmN0aW9uIGlzIG1vdmVkIHRvIC4vdXRpbC5qcywgc29tZSB0b29scyAoc3VjaCBhc1xuLy8gcm9sbHVwKSB3aWxsIHdhcm4gYWJvdXQgY2lyY3VsYXIgZGVwZW5kZW5jaWVzLiBTZWU6XG4vLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTYyOVxuZnVuY3Rpb24gaXNGaWxlTGlrZSAob2JqZWN0KSB7XG4gIHJldHVybiAoXG4gICAgKE5hdGl2ZUZpbGUgJiYgb2JqZWN0IGluc3RhbmNlb2YgTmF0aXZlRmlsZSkgfHxcbiAgICBvYmplY3QgaW5zdGFuY2VvZiBGaWxlIHx8IChcbiAgICAgIG9iamVjdCAmJlxuICAgICAgKHR5cGVvZiBvYmplY3Quc3RyZWFtID09PSAnZnVuY3Rpb24nIHx8XG4gICAgICB0eXBlb2Ygb2JqZWN0LmFycmF5QnVmZmVyID09PSAnZnVuY3Rpb24nKSAmJlxuICAgICAgb2JqZWN0W1N5bWJvbC50b1N0cmluZ1RhZ10gPT09ICdGaWxlJ1xuICAgIClcbiAgKVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHsgRmlsZSwgRmlsZUxpa2UsIGlzRmlsZUxpa2UgfVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGlzQmxvYkxpa2UsIHRvVVNWU3RyaW5nLCBtYWtlSXRlcmF0b3IgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGtTdGF0ZSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgRmlsZTogVW5kaWNpRmlsZSwgRmlsZUxpa2UsIGlzRmlsZUxpa2UgfSA9IHJlcXVpcmUoJy4vZmlsZScpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBCbG9iLCBGaWxlOiBOYXRpdmVGaWxlIH0gPSByZXF1aXJlKCdidWZmZXInKVxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ0ZpbGUnXX0gKi9cbmNvbnN0IEZpbGUgPSBOYXRpdmVGaWxlID8/IFVuZGljaUZpbGVcblxuLy8gaHR0cHM6Ly94aHIuc3BlYy53aGF0d2cub3JnLyNmb3JtZGF0YVxuY2xhc3MgRm9ybURhdGEge1xuICBjb25zdHJ1Y3RvciAoZm9ybSkge1xuICAgIGlmIChmb3JtICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuY29udmVyc2lvbkZhaWxlZCh7XG4gICAgICAgIHByZWZpeDogJ0Zvcm1EYXRhIGNvbnN0cnVjdG9yJyxcbiAgICAgICAgYXJndW1lbnQ6ICdBcmd1bWVudCAxJyxcbiAgICAgICAgdHlwZXM6IFsndW5kZWZpbmVkJ11cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpc1trU3RhdGVdID0gW11cbiAgfVxuXG4gIGFwcGVuZCAobmFtZSwgdmFsdWUsIGZpbGVuYW1lID0gdW5kZWZpbmVkKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnRm9ybURhdGEuYXBwZW5kJyB9KVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgIWlzQmxvYkxpa2UodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdhcHBlbmQnIG9uICdGb3JtRGF0YSc6IHBhcmFtZXRlciAyIGlzIG5vdCBvZiB0eXBlICdCbG9iJ1wiXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gMS4gTGV0IHZhbHVlIGJlIHZhbHVlIGlmIGdpdmVuOyBvdGhlcndpc2UgYmxvYlZhbHVlLlxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuICAgIHZhbHVlID0gaXNCbG9iTGlrZSh2YWx1ZSlcbiAgICAgID8gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYih2YWx1ZSwgeyBzdHJpY3Q6IGZhbHNlIH0pXG4gICAgICA6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyh2YWx1ZSlcbiAgICBmaWxlbmFtZSA9IGFyZ3VtZW50cy5sZW5ndGggPT09IDNcbiAgICAgID8gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKGZpbGVuYW1lKVxuICAgICAgOiB1bmRlZmluZWRcblxuICAgIC8vIDIuIExldCBlbnRyeSBiZSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFuIGVudHJ5IHdpdGhcbiAgICAvLyBuYW1lLCB2YWx1ZSwgYW5kIGZpbGVuYW1lIGlmIGdpdmVuLlxuICAgIGNvbnN0IGVudHJ5ID0gbWFrZUVudHJ5KG5hbWUsIHZhbHVlLCBmaWxlbmFtZSlcblxuICAgIC8vIDMuIEFwcGVuZCBlbnRyeSB0byB0aGlzXHUyMDE5cyBlbnRyeSBsaXN0LlxuICAgIHRoaXNba1N0YXRlXS5wdXNoKGVudHJ5KVxuICB9XG5cbiAgZGVsZXRlIChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRm9ybURhdGEuZGVsZXRlJyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuXG4gICAgLy8gVGhlIGRlbGV0ZShuYW1lKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJlbW92ZSBhbGwgZW50cmllcyB3aG9zZSBuYW1lXG4gICAgLy8gaXMgbmFtZSBmcm9tIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QuXG4gICAgdGhpc1trU3RhdGVdID0gdGhpc1trU3RhdGVdLmZpbHRlcihlbnRyeSA9PiBlbnRyeS5uYW1lICE9PSBuYW1lKVxuICB9XG5cbiAgZ2V0IChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnRm9ybURhdGEuZ2V0JyB9KVxuXG4gICAgbmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhuYW1lKVxuXG4gICAgLy8gMS4gSWYgdGhlcmUgaXMgbm8gZW50cnkgd2hvc2UgbmFtZSBpcyBuYW1lIGluIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QsXG4gICAgLy8gdGhlbiByZXR1cm4gbnVsbC5cbiAgICBjb25zdCBpZHggPSB0aGlzW2tTdGF0ZV0uZmluZEluZGV4KChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSlcbiAgICBpZiAoaWR4ID09PSAtMSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlIG9mIHRoZSBmaXJzdCBlbnRyeSB3aG9zZSBuYW1lIGlzIG5hbWUgZnJvbVxuICAgIC8vIHRoaXNcdTIwMTlzIGVudHJ5IGxpc3QuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXVtpZHhdLnZhbHVlXG4gIH1cblxuICBnZXRBbGwgKG5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGb3JtRGF0YS5nZXRBbGwnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUpXG5cbiAgICAvLyAxLiBJZiB0aGVyZSBpcyBubyBlbnRyeSB3aG9zZSBuYW1lIGlzIG5hbWUgaW4gdGhpc1x1MjAxOXMgZW50cnkgbGlzdCxcbiAgICAvLyB0aGVuIHJldHVybiB0aGUgZW1wdHkgbGlzdC5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlcyBvZiBhbGwgZW50cmllcyB3aG9zZSBuYW1lIGlzIG5hbWUsIGluIG9yZGVyLFxuICAgIC8vIGZyb20gdGhpc1x1MjAxOXMgZW50cnkgbGlzdC5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdXG4gICAgICAuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkubmFtZSA9PT0gbmFtZSlcbiAgICAgIC5tYXAoKGVudHJ5KSA9PiBlbnRyeS52YWx1ZSlcbiAgfVxuXG4gIGhhcyAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0Zvcm1EYXRhLmhhcycgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcobmFtZSlcblxuICAgIC8vIFRoZSBoYXMobmFtZSkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGVyZSBpcyBhbiBlbnRyeVxuICAgIC8vIHdob3NlIG5hbWUgaXMgbmFtZSBpbiB0aGlzXHUyMDE5cyBlbnRyeSBsaXN0OyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5maW5kSW5kZXgoKGVudHJ5KSA9PiBlbnRyeS5uYW1lID09PSBuYW1lKSAhPT0gLTFcbiAgfVxuXG4gIHNldCAobmFtZSwgdmFsdWUsIGZpbGVuYW1lID0gdW5kZWZpbmVkKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRm9ybURhdGEpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnRm9ybURhdGEuc2V0JyB9KVxuXG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDMgJiYgIWlzQmxvYkxpa2UodmFsdWUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdzZXQnIG9uICdGb3JtRGF0YSc6IHBhcmFtZXRlciAyIGlzIG5vdCBvZiB0eXBlICdCbG9iJ1wiXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gVGhlIHNldChuYW1lLCB2YWx1ZSkgYW5kIHNldChuYW1lLCBibG9iVmFsdWUsIGZpbGVuYW1lKSBtZXRob2Qgc3RlcHNcbiAgICAvLyBhcmU6XG5cbiAgICAvLyAxLiBMZXQgdmFsdWUgYmUgdmFsdWUgaWYgZ2l2ZW47IG90aGVyd2lzZSBibG9iVmFsdWUuXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKG5hbWUpXG4gICAgdmFsdWUgPSBpc0Jsb2JMaWtlKHZhbHVlKVxuICAgICAgPyB3ZWJpZGwuY29udmVydGVycy5CbG9iKHZhbHVlLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgICAgIDogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHZhbHVlKVxuICAgIGZpbGVuYW1lID0gYXJndW1lbnRzLmxlbmd0aCA9PT0gM1xuICAgICAgPyB0b1VTVlN0cmluZyhmaWxlbmFtZSlcbiAgICAgIDogdW5kZWZpbmVkXG5cbiAgICAvLyAyLiBMZXQgZW50cnkgYmUgdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBlbnRyeSB3aXRoIG5hbWUsIHZhbHVlLCBhbmRcbiAgICAvLyBmaWxlbmFtZSBpZiBnaXZlbi5cbiAgICBjb25zdCBlbnRyeSA9IG1ha2VFbnRyeShuYW1lLCB2YWx1ZSwgZmlsZW5hbWUpXG5cbiAgICAvLyAzLiBJZiB0aGVyZSBhcmUgZW50cmllcyBpbiB0aGlzXHUyMDE5cyBlbnRyeSBsaXN0IHdob3NlIG5hbWUgaXMgbmFtZSwgdGhlblxuICAgIC8vIHJlcGxhY2UgdGhlIGZpcnN0IHN1Y2ggZW50cnkgd2l0aCBlbnRyeSBhbmQgcmVtb3ZlIHRoZSBvdGhlcnMuXG4gICAgY29uc3QgaWR4ID0gdGhpc1trU3RhdGVdLmZpbmRJbmRleCgoZW50cnkpID0+IGVudHJ5Lm5hbWUgPT09IG5hbWUpXG4gICAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICAgIHRoaXNba1N0YXRlXSA9IFtcbiAgICAgICAgLi4udGhpc1trU3RhdGVdLnNsaWNlKDAsIGlkeCksXG4gICAgICAgIGVudHJ5LFxuICAgICAgICAuLi50aGlzW2tTdGF0ZV0uc2xpY2UoaWR4ICsgMSkuZmlsdGVyKChlbnRyeSkgPT4gZW50cnkubmFtZSAhPT0gbmFtZSlcbiAgICAgIF1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBhcHBlbmQgZW50cnkgdG8gdGhpc1x1MjAxOXMgZW50cnkgbGlzdC5cbiAgICAgIHRoaXNba1N0YXRlXS5wdXNoKGVudHJ5KVxuICAgIH1cbiAgfVxuXG4gIGVudHJpZXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZvcm1EYXRhKVxuXG4gICAgcmV0dXJuIG1ha2VJdGVyYXRvcihcbiAgICAgICgpID0+IHRoaXNba1N0YXRlXS5tYXAocGFpciA9PiBbcGFpci5uYW1lLCBwYWlyLnZhbHVlXSksXG4gICAgICAnRm9ybURhdGEnLFxuICAgICAgJ2tleSt2YWx1ZSdcbiAgICApXG4gIH1cblxuICBrZXlzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IoXG4gICAgICAoKSA9PiB0aGlzW2tTdGF0ZV0ubWFwKHBhaXIgPT4gW3BhaXIubmFtZSwgcGFpci52YWx1ZV0pLFxuICAgICAgJ0Zvcm1EYXRhJyxcbiAgICAgICdrZXknXG4gICAgKVxuICB9XG5cbiAgdmFsdWVzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IoXG4gICAgICAoKSA9PiB0aGlzW2tTdGF0ZV0ubWFwKHBhaXIgPT4gW3BhaXIubmFtZSwgcGFpci52YWx1ZV0pLFxuICAgICAgJ0Zvcm1EYXRhJyxcbiAgICAgICd2YWx1ZSdcbiAgICApXG4gIH1cblxuICAvKipcbiAgICogQHBhcmFtIHsodmFsdWU6IHN0cmluZywga2V5OiBzdHJpbmcsIHNlbGY6IEZvcm1EYXRhKSA9PiB2b2lkfSBjYWxsYmFja0ZuXG4gICAqIEBwYXJhbSB7dW5rbm93bn0gdGhpc0FyZ1xuICAgKi9cbiAgZm9yRWFjaCAoY2FsbGJhY2tGbiwgdGhpc0FyZyA9IGdsb2JhbFRoaXMpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGb3JtRGF0YSlcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGb3JtRGF0YS5mb3JFYWNoJyB9KVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFja0ZuICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBcIkZhaWxlZCB0byBleGVjdXRlICdmb3JFYWNoJyBvbiAnRm9ybURhdGEnOiBwYXJhbWV0ZXIgMSBpcyBub3Qgb2YgdHlwZSAnRnVuY3Rpb24nLlwiXG4gICAgICApXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdGhpcykge1xuICAgICAgY2FsbGJhY2tGbi5hcHBseSh0aGlzQXJnLCBbdmFsdWUsIGtleSwgdGhpc10pXG4gICAgfVxuICB9XG59XG5cbkZvcm1EYXRhLnByb3RvdHlwZVtTeW1ib2wuaXRlcmF0b3JdID0gRm9ybURhdGEucHJvdG90eXBlLmVudHJpZXNcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRm9ybURhdGEucHJvdG90eXBlLCB7XG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdGb3JtRGF0YScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbi8qKlxuICogQHNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3JtLWNvbnRyb2wtaW5mcmFzdHJ1Y3R1cmUuaHRtbCNjcmVhdGUtYW4tZW50cnlcbiAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lXG4gKiBAcGFyYW0ge3N0cmluZ3xCbG9ifSB2YWx1ZVxuICogQHBhcmFtIHs/c3RyaW5nfSBmaWxlbmFtZVxuICogQHJldHVybnNcbiAqL1xuZnVuY3Rpb24gbWFrZUVudHJ5IChuYW1lLCB2YWx1ZSwgZmlsZW5hbWUpIHtcbiAgLy8gMS4gU2V0IG5hbWUgdG8gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIG5hbWUgaW50byBhIHNjYWxhciB2YWx1ZSBzdHJpbmcuXG4gIC8vIFwiVG8gY29udmVydCBhIHN0cmluZyBpbnRvIGEgc2NhbGFyIHZhbHVlIHN0cmluZywgcmVwbGFjZSBhbnkgc3Vycm9nYXRlc1xuICAvLyAgd2l0aCBVK0ZGRkQuXCJcbiAgLy8gc2VlOiBodHRwczovL25vZGVqcy5vcmcvZGlzdC9sYXRlc3QtdjE4LngvZG9jcy9hcGkvYnVmZmVyLmh0bWwjYnVmdG9zdHJpbmdlbmNvZGluZy1zdGFydC1lbmRcbiAgbmFtZSA9IEJ1ZmZlci5mcm9tKG5hbWUpLnRvU3RyaW5nKCd1dGY4JylcblxuICAvLyAyLiBJZiB2YWx1ZSBpcyBhIHN0cmluZywgdGhlbiBzZXQgdmFsdWUgdG8gdGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nXG4gIC8vICAgIHZhbHVlIGludG8gYSBzY2FsYXIgdmFsdWUgc3RyaW5nLlxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHZhbHVlID0gQnVmZmVyLmZyb20odmFsdWUpLnRvU3RyaW5nKCd1dGY4JylcbiAgfSBlbHNlIHtcbiAgICAvLyAzLiBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBJZiB2YWx1ZSBpcyBub3QgYSBGaWxlIG9iamVjdCwgdGhlbiBzZXQgdmFsdWUgdG8gYSBuZXcgRmlsZSBvYmplY3QsXG4gICAgLy8gICAgcmVwcmVzZW50aW5nIHRoZSBzYW1lIGJ5dGVzLCB3aG9zZSBuYW1lIGF0dHJpYnV0ZSB2YWx1ZSBpcyBcImJsb2JcIlxuICAgIGlmICghaXNGaWxlTGlrZSh2YWx1ZSkpIHtcbiAgICAgIHZhbHVlID0gdmFsdWUgaW5zdGFuY2VvZiBCbG9iXG4gICAgICAgID8gbmV3IEZpbGUoW3ZhbHVlXSwgJ2Jsb2InLCB7IHR5cGU6IHZhbHVlLnR5cGUgfSlcbiAgICAgICAgOiBuZXcgRmlsZUxpa2UodmFsdWUsICdibG9iJywgeyB0eXBlOiB2YWx1ZS50eXBlIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgZmlsZW5hbWUgaXMgZ2l2ZW4sIHRoZW4gc2V0IHZhbHVlIHRvIGEgbmV3IEZpbGUgb2JqZWN0LFxuICAgIC8vICAgIHJlcHJlc2VudGluZyB0aGUgc2FtZSBieXRlcywgd2hvc2UgbmFtZSBhdHRyaWJ1dGUgaXMgZmlsZW5hbWUuXG4gICAgaWYgKGZpbGVuYW1lICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8qKiBAdHlwZSB7RmlsZVByb3BlcnR5QmFnfSAqL1xuICAgICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgICAgdHlwZTogdmFsdWUudHlwZSxcbiAgICAgICAgbGFzdE1vZGlmaWVkOiB2YWx1ZS5sYXN0TW9kaWZpZWRcbiAgICAgIH1cblxuICAgICAgdmFsdWUgPSAoTmF0aXZlRmlsZSAmJiB2YWx1ZSBpbnN0YW5jZW9mIE5hdGl2ZUZpbGUpIHx8IHZhbHVlIGluc3RhbmNlb2YgVW5kaWNpRmlsZVxuICAgICAgICA/IG5ldyBGaWxlKFt2YWx1ZV0sIGZpbGVuYW1lLCBvcHRpb25zKVxuICAgICAgICA6IG5ldyBGaWxlTGlrZSh2YWx1ZSwgZmlsZW5hbWUsIG9wdGlvbnMpXG4gICAgfVxuICB9XG5cbiAgLy8gNC4gUmV0dXJuIGFuIGVudHJ5IHdob3NlIG5hbWUgaXMgbmFtZSBhbmQgd2hvc2UgdmFsdWUgaXMgdmFsdWUuXG4gIHJldHVybiB7IG5hbWUsIHZhbHVlIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7IEZvcm1EYXRhIH1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgQnVzYm95ID0gcmVxdWlyZSgnQGZhc3RpZnkvYnVzYm95JylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3Qge1xuICBSZWFkYWJsZVN0cmVhbUZyb20sXG4gIGlzQmxvYkxpa2UsXG4gIGlzUmVhZGFibGVTdHJlYW1MaWtlLFxuICByZWFkYWJsZVN0cmVhbUNsb3NlLFxuICBjcmVhdGVEZWZlcnJlZFByb21pc2UsXG4gIGZ1bGx5UmVhZEJvZHlcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBGb3JtRGF0YSB9ID0gcmVxdWlyZSgnLi9mb3JtZGF0YScpXG5jb25zdCB7IGtTdGF0ZSB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgd2ViaWRsIH0gPSByZXF1aXJlKCcuL3dlYmlkbCcpXG5jb25zdCB7IERPTUV4Y2VwdGlvbiwgc3RydWN0dXJlZENsb25lIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IEJsb2IsIEZpbGU6IE5hdGl2ZUZpbGUgfSA9IHJlcXVpcmUoJ2J1ZmZlcicpXG5jb25zdCB7IGtCb2R5VXNlZCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IGlzRXJyb3JlZCB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgaXNVaW50OEFycmF5LCBpc0FycmF5QnVmZmVyIH0gPSByZXF1aXJlKCd1dGlsL3R5cGVzJylcbmNvbnN0IHsgRmlsZTogVW5kaWNpRmlsZSB9ID0gcmVxdWlyZSgnLi9maWxlJylcbmNvbnN0IHsgcGFyc2VNSU1FVHlwZSwgc2VyaWFsaXplQU1pbWVUeXBlIH0gPSByZXF1aXJlKCcuL2RhdGFVUkwnKVxuXG5sZXQgcmFuZG9tXG50cnkge1xuICBjb25zdCBjcnlwdG8gPSByZXF1aXJlKCdub2RlOmNyeXB0bycpXG4gIHJhbmRvbSA9IChtYXgpID0+IGNyeXB0by5yYW5kb21JbnQoMCwgbWF4KVxufSBjYXRjaCB7XG4gIHJhbmRvbSA9IChtYXgpID0+IE1hdGguZmxvb3IoTWF0aC5yYW5kb20obWF4KSlcbn1cblxubGV0IFJlYWRhYmxlU3RyZWFtID0gZ2xvYmFsVGhpcy5SZWFkYWJsZVN0cmVhbVxuXG4vKiogQHR5cGUge2dsb2JhbFRoaXNbJ0ZpbGUnXX0gKi9cbmNvbnN0IEZpbGUgPSBOYXRpdmVGaWxlID8/IFVuZGljaUZpbGVcbmNvbnN0IHRleHRFbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKClcbmNvbnN0IHRleHREZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKClcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtYm9keWluaXQtZXh0cmFjdFxuZnVuY3Rpb24gZXh0cmFjdEJvZHkgKG9iamVjdCwga2VlcGFsaXZlID0gZmFsc2UpIHtcbiAgaWYgKCFSZWFkYWJsZVN0cmVhbSkge1xuICAgIFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG4gIH1cblxuICAvLyAxLiBMZXQgc3RyZWFtIGJlIG51bGwuXG4gIGxldCBzdHJlYW0gPSBudWxsXG5cbiAgLy8gMi4gSWYgb2JqZWN0IGlzIGEgUmVhZGFibGVTdHJlYW0gb2JqZWN0LCB0aGVuIHNldCBzdHJlYW0gdG8gb2JqZWN0LlxuICBpZiAob2JqZWN0IGluc3RhbmNlb2YgUmVhZGFibGVTdHJlYW0pIHtcbiAgICBzdHJlYW0gPSBvYmplY3RcbiAgfSBlbHNlIGlmIChpc0Jsb2JMaWtlKG9iamVjdCkpIHtcbiAgICAvLyAzLiBPdGhlcndpc2UsIGlmIG9iamVjdCBpcyBhIEJsb2Igb2JqZWN0LCBzZXQgc3RyZWFtIHRvIHRoZVxuICAgIC8vICAgIHJlc3VsdCBvZiBydW5uaW5nIG9iamVjdFx1MjAxOXMgZ2V0IHN0cmVhbS5cbiAgICBzdHJlYW0gPSBvYmplY3Quc3RyZWFtKClcbiAgfSBlbHNlIHtcbiAgICAvLyA0LiBPdGhlcndpc2UsIHNldCBzdHJlYW0gdG8gYSBuZXcgUmVhZGFibGVTdHJlYW0gb2JqZWN0LCBhbmQgc2V0XG4gICAgLy8gICAgdXAgc3RyZWFtLlxuICAgIHN0cmVhbSA9IG5ldyBSZWFkYWJsZVN0cmVhbSh7XG4gICAgICBhc3luYyBwdWxsIChjb250cm9sbGVyKSB7XG4gICAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShcbiAgICAgICAgICB0eXBlb2Ygc291cmNlID09PSAnc3RyaW5nJyA/IHRleHRFbmNvZGVyLmVuY29kZShzb3VyY2UpIDogc291cmNlXG4gICAgICAgIClcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gcmVhZGFibGVTdHJlYW1DbG9zZShjb250cm9sbGVyKSlcbiAgICAgIH0sXG4gICAgICBzdGFydCAoKSB7fSxcbiAgICAgIHR5cGU6IHVuZGVmaW5lZFxuICAgIH0pXG4gIH1cblxuICAvLyA1LiBBc3NlcnQ6IHN0cmVhbSBpcyBhIFJlYWRhYmxlU3RyZWFtIG9iamVjdC5cbiAgYXNzZXJ0KGlzUmVhZGFibGVTdHJlYW1MaWtlKHN0cmVhbSkpXG5cbiAgLy8gNi4gTGV0IGFjdGlvbiBiZSBudWxsLlxuICBsZXQgYWN0aW9uID0gbnVsbFxuXG4gIC8vIDcuIExldCBzb3VyY2UgYmUgbnVsbC5cbiAgbGV0IHNvdXJjZSA9IG51bGxcblxuICAvLyA4LiBMZXQgbGVuZ3RoIGJlIG51bGwuXG4gIGxldCBsZW5ndGggPSBudWxsXG5cbiAgLy8gOS4gTGV0IHR5cGUgYmUgbnVsbC5cbiAgbGV0IHR5cGUgPSBudWxsXG5cbiAgLy8gMTAuIFN3aXRjaCBvbiBvYmplY3Q6XG4gIGlmICh0eXBlb2Ygb2JqZWN0ID09PSAnc3RyaW5nJykge1xuICAgIC8vIFNldCBzb3VyY2UgdG8gdGhlIFVURi04IGVuY29kaW5nIG9mIG9iamVjdC5cbiAgICAvLyBOb3RlOiBzZXR0aW5nIHNvdXJjZSB0byBhIFVpbnQ4QXJyYXkgaGVyZSBicmVha3Mgc29tZSBtb2NraW5nIGFzc3VtcHRpb25zLlxuICAgIHNvdXJjZSA9IG9iamVjdFxuXG4gICAgLy8gU2V0IHR5cGUgdG8gYHRleHQvcGxhaW47Y2hhcnNldD1VVEYtOGAuXG4gICAgdHlwZSA9ICd0ZXh0L3BsYWluO2NoYXJzZXQ9VVRGLTgnXG4gIH0gZWxzZSBpZiAob2JqZWN0IGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zKSB7XG4gICAgLy8gVVJMU2VhcmNoUGFyYW1zXG5cbiAgICAvLyBzcGVjIHNheXMgdG8gcnVuIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBvbiBib2R5Lmxpc3RcbiAgICAvLyB0aGlzIGlzIGltcGxlbWVudGVkIGluIE5vZGUuanMgYXMgYXBhcnQgb2YgYW4gVVJMU2VhcmNoUGFyYW1zIGluc3RhbmNlIHRvU3RyaW5nIG1ldGhvZFxuICAgIC8vIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvZTQ2YzY4MGJmMmIyMTFiYmQ1MmNmOTU5Y2ExN2VlOThjN2Y2NTdmNS9saWIvaW50ZXJuYWwvdXJsLmpzI0w0OTBcbiAgICAvLyBhbmQgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2Jsb2IvZTQ2YzY4MGJmMmIyMTFiYmQ1MmNmOTU5Y2ExN2VlOThjN2Y2NTdmNS9saWIvaW50ZXJuYWwvdXJsLmpzI0wxMTAwXG5cbiAgICAvLyBTZXQgc291cmNlIHRvIHRoZSByZXN1bHQgb2YgcnVubmluZyB0aGUgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIHNlcmlhbGl6ZXIgd2l0aCBvYmplY3RcdTIwMTlzIGxpc3QuXG4gICAgc291cmNlID0gb2JqZWN0LnRvU3RyaW5nKClcblxuICAgIC8vIFNldCB0eXBlIHRvIGBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOGAuXG4gICAgdHlwZSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD1VVEYtOCdcbiAgfSBlbHNlIGlmIChpc0FycmF5QnVmZmVyKG9iamVjdCkpIHtcbiAgICAvLyBCdWZmZXJTb3VyY2UvQXJyYXlCdWZmZXJcblxuICAgIC8vIFNldCBzb3VyY2UgdG8gYSBjb3B5IG9mIHRoZSBieXRlcyBoZWxkIGJ5IG9iamVjdC5cbiAgICBzb3VyY2UgPSBuZXcgVWludDhBcnJheShvYmplY3Quc2xpY2UoKSlcbiAgfSBlbHNlIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcob2JqZWN0KSkge1xuICAgIC8vIEJ1ZmZlclNvdXJjZS9BcnJheUJ1ZmZlclZpZXdcblxuICAgIC8vIFNldCBzb3VyY2UgdG8gYSBjb3B5IG9mIHRoZSBieXRlcyBoZWxkIGJ5IG9iamVjdC5cbiAgICBzb3VyY2UgPSBuZXcgVWludDhBcnJheShvYmplY3QuYnVmZmVyLnNsaWNlKG9iamVjdC5ieXRlT2Zmc2V0LCBvYmplY3QuYnl0ZU9mZnNldCArIG9iamVjdC5ieXRlTGVuZ3RoKSlcbiAgfSBlbHNlIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKG9iamVjdCkpIHtcbiAgICBjb25zdCBib3VuZGFyeSA9IGAtLS0tZm9ybWRhdGEtdW5kaWNpLTAke2Ake3JhbmRvbSgxZTExKX1gLnBhZFN0YXJ0KDExLCAnMCcpfWBcbiAgICBjb25zdCBwcmVmaXggPSBgLS0ke2JvdW5kYXJ5fVxcclxcbkNvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0YWBcblxuICAgIC8qISBmb3JtZGF0YS1wb2x5ZmlsbC4gTUlUIExpY2Vuc2UuIEppbW15IFdcdTAwRTRydGluZyA8aHR0cHM6Ly9qaW1teS53YXJ0aW5nLnNlL29wZW5zb3VyY2U+ICovXG4gICAgY29uc3QgZXNjYXBlID0gKHN0cikgPT5cbiAgICAgIHN0ci5yZXBsYWNlKC9cXG4vZywgJyUwQScpLnJlcGxhY2UoL1xcci9nLCAnJTBEJykucmVwbGFjZSgvXCIvZywgJyUyMicpXG4gICAgY29uc3Qgbm9ybWFsaXplTGluZWZlZWRzID0gKHZhbHVlKSA9PiB2YWx1ZS5yZXBsYWNlKC9cXHI/XFxufFxcci9nLCAnXFxyXFxuJylcblxuICAgIC8vIFNldCBhY3Rpb24gdG8gdGhpcyBzdGVwOiBydW4gdGhlIG11bHRpcGFydC9mb3JtLWRhdGFcbiAgICAvLyBlbmNvZGluZyBhbGdvcml0aG0sIHdpdGggb2JqZWN0XHUyMDE5cyBlbnRyeSBsaXN0IGFuZCBVVEYtOC5cbiAgICAvLyAtIFRoaXMgZW5zdXJlcyB0aGF0IHRoZSBib2R5IGlzIGltbXV0YWJsZSBhbmQgY2FuJ3QgYmUgY2hhbmdlZCBhZnRlcndvcmRzXG4gICAgLy8gLSBUaGF0IHRoZSBjb250ZW50LWxlbmd0aCBpcyBjYWxjdWxhdGVkIGluIGFkdmFuY2UuXG4gICAgLy8gLSBBbmQgdGhhdCBhbGwgcGFydHMgYXJlIHByZS1lbmNvZGVkIGFuZCByZWFkeSB0byBiZSBzZW50LlxuXG4gICAgY29uc3QgYmxvYlBhcnRzID0gW11cbiAgICBjb25zdCBybiA9IG5ldyBVaW50OEFycmF5KFsxMywgMTBdKSAvLyAnXFxyXFxuJ1xuICAgIGxlbmd0aCA9IDBcbiAgICBsZXQgaGFzVW5rbm93blNpemVWYWx1ZSA9IGZhbHNlXG5cbiAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2Ygb2JqZWN0KSB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICBjb25zdCBjaHVuayA9IHRleHRFbmNvZGVyLmVuY29kZShwcmVmaXggK1xuICAgICAgICAgIGA7IG5hbWU9XCIke2VzY2FwZShub3JtYWxpemVMaW5lZmVlZHMobmFtZSkpfVwiYCArXG4gICAgICAgICAgYFxcclxcblxcclxcbiR7bm9ybWFsaXplTGluZWZlZWRzKHZhbHVlKX1cXHJcXG5gKVxuICAgICAgICBibG9iUGFydHMucHVzaChjaHVuaylcbiAgICAgICAgbGVuZ3RoICs9IGNodW5rLmJ5dGVMZW5ndGhcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnN0IGNodW5rID0gdGV4dEVuY29kZXIuZW5jb2RlKGAke3ByZWZpeH07IG5hbWU9XCIke2VzY2FwZShub3JtYWxpemVMaW5lZmVlZHMobmFtZSkpfVwiYCArXG4gICAgICAgICAgKHZhbHVlLm5hbWUgPyBgOyBmaWxlbmFtZT1cIiR7ZXNjYXBlKHZhbHVlLm5hbWUpfVwiYCA6ICcnKSArICdcXHJcXG4nICtcbiAgICAgICAgICBgQ29udGVudC1UeXBlOiAke1xuICAgICAgICAgICAgdmFsdWUudHlwZSB8fCAnYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJ1xuICAgICAgICAgIH1cXHJcXG5cXHJcXG5gKVxuICAgICAgICBibG9iUGFydHMucHVzaChjaHVuaywgdmFsdWUsIHJuKVxuICAgICAgICBpZiAodHlwZW9mIHZhbHVlLnNpemUgPT09ICdudW1iZXInKSB7XG4gICAgICAgICAgbGVuZ3RoICs9IGNodW5rLmJ5dGVMZW5ndGggKyB2YWx1ZS5zaXplICsgcm4uYnl0ZUxlbmd0aFxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGhhc1Vua25vd25TaXplVmFsdWUgPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBjaHVuayA9IHRleHRFbmNvZGVyLmVuY29kZShgLS0ke2JvdW5kYXJ5fS0tYClcbiAgICBibG9iUGFydHMucHVzaChjaHVuaylcbiAgICBsZW5ndGggKz0gY2h1bmsuYnl0ZUxlbmd0aFxuICAgIGlmIChoYXNVbmtub3duU2l6ZVZhbHVlKSB7XG4gICAgICBsZW5ndGggPSBudWxsXG4gICAgfVxuXG4gICAgLy8gU2V0IHNvdXJjZSB0byBvYmplY3QuXG4gICAgc291cmNlID0gb2JqZWN0XG5cbiAgICBhY3Rpb24gPSBhc3luYyBmdW5jdGlvbiAqICgpIHtcbiAgICAgIGZvciAoY29uc3QgcGFydCBvZiBibG9iUGFydHMpIHtcbiAgICAgICAgaWYgKHBhcnQuc3RyZWFtKSB7XG4gICAgICAgICAgeWllbGQgKiBwYXJ0LnN0cmVhbSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgeWllbGQgcGFydFxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2V0IHR5cGUgdG8gYG11bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PWAsXG4gICAgLy8gZm9sbG93ZWQgYnkgdGhlIG11bHRpcGFydC9mb3JtLWRhdGEgYm91bmRhcnkgc3RyaW5nIGdlbmVyYXRlZFxuICAgIC8vIGJ5IHRoZSBtdWx0aXBhcnQvZm9ybS1kYXRhIGVuY29kaW5nIGFsZ29yaXRobS5cbiAgICB0eXBlID0gJ211bHRpcGFydC9mb3JtLWRhdGE7IGJvdW5kYXJ5PScgKyBib3VuZGFyeVxuICB9IGVsc2UgaWYgKGlzQmxvYkxpa2Uob2JqZWN0KSkge1xuICAgIC8vIEJsb2JcblxuICAgIC8vIFNldCBzb3VyY2UgdG8gb2JqZWN0LlxuICAgIHNvdXJjZSA9IG9iamVjdFxuXG4gICAgLy8gU2V0IGxlbmd0aCB0byBvYmplY3RcdTIwMTlzIHNpemUuXG4gICAgbGVuZ3RoID0gb2JqZWN0LnNpemVcblxuICAgIC8vIElmIG9iamVjdFx1MjAxOXMgdHlwZSBhdHRyaWJ1dGUgaXMgbm90IHRoZSBlbXB0eSBieXRlIHNlcXVlbmNlLCBzZXRcbiAgICAvLyB0eXBlIHRvIGl0cyB2YWx1ZS5cbiAgICBpZiAob2JqZWN0LnR5cGUpIHtcbiAgICAgIHR5cGUgPSBvYmplY3QudHlwZVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2Ygb2JqZWN0W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIElmIGtlZXBhbGl2ZSBpcyB0cnVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChrZWVwYWxpdmUpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2tlZXBhbGl2ZScpXG4gICAgfVxuXG4gICAgLy8gSWYgb2JqZWN0IGlzIGRpc3R1cmJlZCBvciBsb2NrZWQsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHV0aWwuaXNEaXN0dXJiZWQob2JqZWN0KSB8fCBvYmplY3QubG9ja2VkKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAnUmVzcG9uc2UgYm9keSBvYmplY3Qgc2hvdWxkIG5vdCBiZSBkaXN0dXJiZWQgb3IgbG9ja2VkJ1xuICAgICAgKVxuICAgIH1cblxuICAgIHN0cmVhbSA9XG4gICAgICBvYmplY3QgaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSA/IG9iamVjdCA6IFJlYWRhYmxlU3RyZWFtRnJvbShvYmplY3QpXG4gIH1cblxuICAvLyAxMS4gSWYgc291cmNlIGlzIGEgYnl0ZSBzZXF1ZW5jZSwgdGhlbiBzZXQgYWN0aW9uIHRvIGFcbiAgLy8gc3RlcCB0aGF0IHJldHVybnMgc291cmNlIGFuZCBsZW5ndGggdG8gc291cmNlXHUyMDE5cyBsZW5ndGguXG4gIGlmICh0eXBlb2Ygc291cmNlID09PSAnc3RyaW5nJyB8fCB1dGlsLmlzQnVmZmVyKHNvdXJjZSkpIHtcbiAgICBsZW5ndGggPSBCdWZmZXIuYnl0ZUxlbmd0aChzb3VyY2UpXG4gIH1cblxuICAvLyAxMi4gSWYgYWN0aW9uIGlzIG5vbi1udWxsLCB0aGVuIHJ1biB0aGVzZSBzdGVwcyBpbiBpbiBwYXJhbGxlbDpcbiAgaWYgKGFjdGlvbiAhPSBudWxsKSB7XG4gICAgLy8gUnVuIGFjdGlvbi5cbiAgICBsZXQgaXRlcmF0b3JcbiAgICBzdHJlYW0gPSBuZXcgUmVhZGFibGVTdHJlYW0oe1xuICAgICAgYXN5bmMgc3RhcnQgKCkge1xuICAgICAgICBpdGVyYXRvciA9IGFjdGlvbihvYmplY3QpW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpXG4gICAgICB9LFxuICAgICAgYXN5bmMgcHVsbCAoY29udHJvbGxlcikge1xuICAgICAgICBjb25zdCB7IHZhbHVlLCBkb25lIH0gPSBhd2FpdCBpdGVyYXRvci5uZXh0KClcbiAgICAgICAgaWYgKGRvbmUpIHtcbiAgICAgICAgICAvLyBXaGVuIHJ1bm5pbmcgYWN0aW9uIGlzIGRvbmUsIGNsb3NlIHN0cmVhbS5cbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICBjb250cm9sbGVyLmNsb3NlKClcbiAgICAgICAgICB9KVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIC8vIFdoZW5ldmVyIG9uZSBvciBtb3JlIGJ5dGVzIGFyZSBhdmFpbGFibGUgYW5kIHN0cmVhbSBpcyBub3QgZXJyb3JlZCxcbiAgICAgICAgICAvLyBlbnF1ZXVlIGEgVWludDhBcnJheSB3cmFwcGluZyBhbiBBcnJheUJ1ZmZlciBjb250YWluaW5nIHRoZSBhdmFpbGFibGVcbiAgICAgICAgICAvLyBieXRlcyBpbnRvIHN0cmVhbS5cbiAgICAgICAgICBpZiAoIWlzRXJyb3JlZChzdHJlYW0pKSB7XG4gICAgICAgICAgICBjb250cm9sbGVyLmVucXVldWUobmV3IFVpbnQ4QXJyYXkodmFsdWUpKVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gY29udHJvbGxlci5kZXNpcmVkU2l6ZSA+IDBcbiAgICAgIH0sXG4gICAgICBhc3luYyBjYW5jZWwgKHJlYXNvbikge1xuICAgICAgICBhd2FpdCBpdGVyYXRvci5yZXR1cm4oKVxuICAgICAgfSxcbiAgICAgIHR5cGU6IHVuZGVmaW5lZFxuICAgIH0pXG4gIH1cblxuICAvLyAxMy4gTGV0IGJvZHkgYmUgYSBib2R5IHdob3NlIHN0cmVhbSBpcyBzdHJlYW0sIHNvdXJjZSBpcyBzb3VyY2UsXG4gIC8vIGFuZCBsZW5ndGggaXMgbGVuZ3RoLlxuICBjb25zdCBib2R5ID0geyBzdHJlYW0sIHNvdXJjZSwgbGVuZ3RoIH1cblxuICAvLyAxNC4gUmV0dXJuIChib2R5LCB0eXBlKS5cbiAgcmV0dXJuIFtib2R5LCB0eXBlXVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keWluaXQtc2FmZWx5LWV4dHJhY3RcbmZ1bmN0aW9uIHNhZmVseUV4dHJhY3RCb2R5IChvYmplY3QsIGtlZXBhbGl2ZSA9IGZhbHNlKSB7XG4gIGlmICghUmVhZGFibGVTdHJlYW0pIHtcbiAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgIFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG4gIH1cblxuICAvLyBUbyBzYWZlbHkgZXh0cmFjdCBhIGJvZHkgYW5kIGEgYENvbnRlbnQtVHlwZWAgdmFsdWUgZnJvbVxuICAvLyBhIGJ5dGUgc2VxdWVuY2Ugb3IgQm9keUluaXQgb2JqZWN0IG9iamVjdCwgcnVuIHRoZXNlIHN0ZXBzOlxuXG4gIC8vIDEuIElmIG9iamVjdCBpcyBhIFJlYWRhYmxlU3RyZWFtIG9iamVjdCwgdGhlbjpcbiAgaWYgKG9iamVjdCBpbnN0YW5jZW9mIFJlYWRhYmxlU3RyZWFtKSB7XG4gICAgLy8gQXNzZXJ0OiBvYmplY3QgaXMgbmVpdGhlciBkaXN0dXJiZWQgbm9yIGxvY2tlZC5cbiAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgbmV4dFxuICAgIGFzc2VydCghdXRpbC5pc0Rpc3R1cmJlZChvYmplY3QpLCAnVGhlIGJvZHkgaGFzIGFscmVhZHkgYmVlbiBjb25zdW1lZC4nKVxuICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgYXNzZXJ0KCFvYmplY3QubG9ja2VkLCAnVGhlIHN0cmVhbSBpcyBsb2NrZWQuJylcbiAgfVxuXG4gIC8vIDIuIFJldHVybiB0aGUgcmVzdWx0cyBvZiBleHRyYWN0aW5nIG9iamVjdC5cbiAgcmV0dXJuIGV4dHJhY3RCb2R5KG9iamVjdCwga2VlcGFsaXZlKVxufVxuXG5mdW5jdGlvbiBjbG9uZUJvZHkgKGJvZHkpIHtcbiAgLy8gVG8gY2xvbmUgYSBib2R5IGJvZHksIHJ1biB0aGVzZSBzdGVwczpcblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ib2R5LWNsb25lXG5cbiAgLy8gMS4gTGV0IFx1MDBBQiBvdXQxLCBvdXQyIFx1MDBCQiBiZSB0aGUgcmVzdWx0IG9mIHRlZWluZyBib2R5XHUyMDE5cyBzdHJlYW0uXG4gIGNvbnN0IFtvdXQxLCBvdXQyXSA9IGJvZHkuc3RyZWFtLnRlZSgpXG4gIGNvbnN0IG91dDJDbG9uZSA9IHN0cnVjdHVyZWRDbG9uZShvdXQyLCB7IHRyYW5zZmVyOiBbb3V0Ml0gfSlcbiAgLy8gVGhpcywgZm9yIHdoYXRldmVyIHJlYXNvbnMsIHVucmVmcyBvdXQyQ2xvbmUgd2hpY2ggYWxsb3dzXG4gIC8vIHRoZSBwcm9jZXNzIHRvIGV4aXQgYnkgaXRzZWxmLlxuICBjb25zdCBbLCBmaW5hbENsb25lXSA9IG91dDJDbG9uZS50ZWUoKVxuXG4gIC8vIDIuIFNldCBib2R5XHUyMDE5cyBzdHJlYW0gdG8gb3V0MS5cbiAgYm9keS5zdHJlYW0gPSBvdXQxXG5cbiAgLy8gMy4gUmV0dXJuIGEgYm9keSB3aG9zZSBzdHJlYW0gaXMgb3V0MiBhbmQgb3RoZXIgbWVtYmVycyBhcmUgY29waWVkIGZyb20gYm9keS5cbiAgcmV0dXJuIHtcbiAgICBzdHJlYW06IGZpbmFsQ2xvbmUsXG4gICAgbGVuZ3RoOiBib2R5Lmxlbmd0aCxcbiAgICBzb3VyY2U6IGJvZHkuc291cmNlXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gKiBjb25zdW1lQm9keSAoYm9keSkge1xuICBpZiAoYm9keSkge1xuICAgIGlmIChpc1VpbnQ4QXJyYXkoYm9keSkpIHtcbiAgICAgIHlpZWxkIGJvZHlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3Qgc3RyZWFtID0gYm9keS5zdHJlYW1cblxuICAgICAgaWYgKHV0aWwuaXNEaXN0dXJiZWQoc3RyZWFtKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdUaGUgYm9keSBoYXMgYWxyZWFkeSBiZWVuIGNvbnN1bWVkLicpXG4gICAgICB9XG5cbiAgICAgIGlmIChzdHJlYW0ubG9ja2VkKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1RoZSBzdHJlYW0gaXMgbG9ja2VkLicpXG4gICAgICB9XG5cbiAgICAgIC8vIENvbXBhdC5cbiAgICAgIHN0cmVhbVtrQm9keVVzZWRdID0gdHJ1ZVxuXG4gICAgICB5aWVsZCAqIHN0cmVhbVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiB0aHJvd0lmQWJvcnRlZCAoc3RhdGUpIHtcbiAgaWYgKHN0YXRlLmFib3J0ZWQpIHtcbiAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJylcbiAgfVxufVxuXG5mdW5jdGlvbiBib2R5TWl4aW5NZXRob2RzIChpbnN0YW5jZSkge1xuICBjb25zdCBtZXRob2RzID0ge1xuICAgIGJsb2IgKCkge1xuICAgICAgLy8gVGhlIGJsb2IoKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mXG4gICAgICAvLyBydW5uaW5nIGNvbnN1bWUgYm9keSB3aXRoIHRoaXMgYW5kIHRoZSBmb2xsb3dpbmcgc3RlcFxuICAgICAgLy8gZ2l2ZW4gYSBieXRlIHNlcXVlbmNlIGJ5dGVzOiByZXR1cm4gYSBCbG9iIHdob3NlXG4gICAgICAvLyBjb250ZW50cyBhcmUgYnl0ZXMgYW5kIHdob3NlIHR5cGUgYXR0cmlidXRlIGlzIHRoaXNcdTIwMTlzXG4gICAgICAvLyBNSU1FIHR5cGUuXG4gICAgICByZXR1cm4gc3BlY0NvbnN1bWVCb2R5KHRoaXMsIChieXRlcykgPT4ge1xuICAgICAgICBsZXQgbWltZVR5cGUgPSBib2R5TWltZVR5cGUodGhpcylcblxuICAgICAgICBpZiAobWltZVR5cGUgPT09ICdmYWlsdXJlJykge1xuICAgICAgICAgIG1pbWVUeXBlID0gJydcbiAgICAgICAgfSBlbHNlIGlmIChtaW1lVHlwZSkge1xuICAgICAgICAgIG1pbWVUeXBlID0gc2VyaWFsaXplQU1pbWVUeXBlKG1pbWVUeXBlKVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gUmV0dXJuIGEgQmxvYiB3aG9zZSBjb250ZW50cyBhcmUgYnl0ZXMgYW5kIHR5cGUgYXR0cmlidXRlXG4gICAgICAgIC8vIGlzIG1pbWVUeXBlLlxuICAgICAgICByZXR1cm4gbmV3IEJsb2IoW2J5dGVzXSwgeyB0eXBlOiBtaW1lVHlwZSB9KVxuICAgICAgfSwgaW5zdGFuY2UpXG4gICAgfSxcblxuICAgIGFycmF5QnVmZmVyICgpIHtcbiAgICAgIC8vIFRoZSBhcnJheUJ1ZmZlcigpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHRcbiAgICAgIC8vIG9mIHJ1bm5pbmcgY29uc3VtZSBib2R5IHdpdGggdGhpcyBhbmQgdGhlIGZvbGxvd2luZyBzdGVwXG4gICAgICAvLyBnaXZlbiBhIGJ5dGUgc2VxdWVuY2UgYnl0ZXM6IHJldHVybiBhIG5ldyBBcnJheUJ1ZmZlclxuICAgICAgLy8gd2hvc2UgY29udGVudHMgYXJlIGJ5dGVzLlxuICAgICAgcmV0dXJuIHNwZWNDb25zdW1lQm9keSh0aGlzLCAoYnl0ZXMpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KGJ5dGVzKS5idWZmZXJcbiAgICAgIH0sIGluc3RhbmNlKVxuICAgIH0sXG5cbiAgICB0ZXh0ICgpIHtcbiAgICAgIC8vIFRoZSB0ZXh0KCkgbWV0aG9kIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5nXG4gICAgICAvLyBjb25zdW1lIGJvZHkgd2l0aCB0aGlzIGFuZCBVVEYtOCBkZWNvZGUuXG4gICAgICByZXR1cm4gc3BlY0NvbnN1bWVCb2R5KHRoaXMsIHV0ZjhEZWNvZGVCeXRlcywgaW5zdGFuY2UpXG4gICAgfSxcblxuICAgIGpzb24gKCkge1xuICAgICAgLy8gVGhlIGpzb24oKSBtZXRob2Qgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgICAgIC8vIGNvbnN1bWUgYm9keSB3aXRoIHRoaXMgYW5kIHBhcnNlIEpTT04gZnJvbSBieXRlcy5cbiAgICAgIHJldHVybiBzcGVjQ29uc3VtZUJvZHkodGhpcywgcGFyc2VKU09ORnJvbUJ5dGVzLCBpbnN0YW5jZSlcbiAgICB9LFxuXG4gICAgYXN5bmMgZm9ybURhdGEgKCkge1xuICAgICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgaW5zdGFuY2UpXG5cbiAgICAgIHRocm93SWZBYm9ydGVkKHRoaXNba1N0YXRlXSlcblxuICAgICAgY29uc3QgY29udGVudFR5cGUgPSB0aGlzLmhlYWRlcnMuZ2V0KCdDb250ZW50LVR5cGUnKVxuXG4gICAgICAvLyBJZiBtaW1lVHlwZVx1MjAxOXMgZXNzZW5jZSBpcyBcIm11bHRpcGFydC9mb3JtLWRhdGFcIiwgdGhlbjpcbiAgICAgIGlmICgvbXVsdGlwYXJ0XFwvZm9ybS1kYXRhLy50ZXN0KGNvbnRlbnRUeXBlKSkge1xuICAgICAgICBjb25zdCBoZWFkZXJzID0ge31cbiAgICAgICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdGhpcy5oZWFkZXJzKSBoZWFkZXJzW2tleS50b0xvd2VyQ2FzZSgpXSA9IHZhbHVlXG5cbiAgICAgICAgY29uc3QgcmVzcG9uc2VGb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpXG5cbiAgICAgICAgbGV0IGJ1c2JveVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYnVzYm95ID0gbmV3IEJ1c2JveSh7XG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgcHJlc2VydmVQYXRoOiB0cnVlXG4gICAgICAgICAgfSlcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihgJHtlcnJ9YCwgJ0Fib3J0RXJyb3InKVxuICAgICAgICB9XG5cbiAgICAgICAgYnVzYm95Lm9uKCdmaWVsZCcsIChuYW1lLCB2YWx1ZSkgPT4ge1xuICAgICAgICAgIHJlc3BvbnNlRm9ybURhdGEuYXBwZW5kKG5hbWUsIHZhbHVlKVxuICAgICAgICB9KVxuICAgICAgICBidXNib3kub24oJ2ZpbGUnLCAobmFtZSwgdmFsdWUsIGZpbGVuYW1lLCBlbmNvZGluZywgbWltZVR5cGUpID0+IHtcbiAgICAgICAgICBjb25zdCBjaHVua3MgPSBbXVxuXG4gICAgICAgICAgaWYgKGVuY29kaW5nID09PSAnYmFzZTY0JyB8fCBlbmNvZGluZy50b0xvd2VyQ2FzZSgpID09PSAnYmFzZTY0Jykge1xuICAgICAgICAgICAgbGV0IGJhc2U2NGNodW5rID0gJydcblxuICAgICAgICAgICAgdmFsdWUub24oJ2RhdGEnLCAoY2h1bmspID0+IHtcbiAgICAgICAgICAgICAgYmFzZTY0Y2h1bmsgKz0gY2h1bmsudG9TdHJpbmcoKS5yZXBsYWNlKC9bXFxyXFxuXS9nbSwgJycpXG5cbiAgICAgICAgICAgICAgY29uc3QgZW5kID0gYmFzZTY0Y2h1bmsubGVuZ3RoIC0gYmFzZTY0Y2h1bmsubGVuZ3RoICUgNFxuICAgICAgICAgICAgICBjaHVua3MucHVzaChCdWZmZXIuZnJvbShiYXNlNjRjaHVuay5zbGljZSgwLCBlbmQpLCAnYmFzZTY0JykpXG5cbiAgICAgICAgICAgICAgYmFzZTY0Y2h1bmsgPSBiYXNlNjRjaHVuay5zbGljZShlbmQpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgdmFsdWUub24oJ2VuZCcsICgpID0+IHtcbiAgICAgICAgICAgICAgY2h1bmtzLnB1c2goQnVmZmVyLmZyb20oYmFzZTY0Y2h1bmssICdiYXNlNjQnKSlcbiAgICAgICAgICAgICAgcmVzcG9uc2VGb3JtRGF0YS5hcHBlbmQobmFtZSwgbmV3IEZpbGUoY2h1bmtzLCBmaWxlbmFtZSwgeyB0eXBlOiBtaW1lVHlwZSB9KSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhbHVlLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgICAgICAgICAgIGNodW5rcy5wdXNoKGNodW5rKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIHZhbHVlLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgIHJlc3BvbnNlRm9ybURhdGEuYXBwZW5kKG5hbWUsIG5ldyBGaWxlKGNodW5rcywgZmlsZW5hbWUsIHsgdHlwZTogbWltZVR5cGUgfSkpXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICBjb25zdCBidXNib3lSZXNvbHZlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgIGJ1c2JveS5vbignZmluaXNoJywgcmVzb2x2ZSlcbiAgICAgICAgICBidXNib3kub24oJ2Vycm9yJywgKGVycikgPT4gcmVqZWN0KG5ldyBUeXBlRXJyb3IoZXJyKSkpXG4gICAgICAgIH0pXG5cbiAgICAgICAgaWYgKHRoaXMuYm9keSAhPT0gbnVsbCkgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBjb25zdW1lQm9keSh0aGlzW2tTdGF0ZV0uYm9keSkpIGJ1c2JveS53cml0ZShjaHVuaylcbiAgICAgICAgYnVzYm95LmVuZCgpXG4gICAgICAgIGF3YWl0IGJ1c2JveVJlc29sdmVcblxuICAgICAgICByZXR1cm4gcmVzcG9uc2VGb3JtRGF0YVxuICAgICAgfSBlbHNlIGlmICgvYXBwbGljYXRpb25cXC94LXd3dy1mb3JtLXVybGVuY29kZWQvLnRlc3QoY29udGVudFR5cGUpKSB7XG4gICAgICAgIC8vIE90aGVyd2lzZSwgaWYgbWltZVR5cGVcdTIwMTlzIGVzc2VuY2UgaXMgXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWRcIiwgdGhlbjpcblxuICAgICAgICAvLyAxLiBMZXQgZW50cmllcyBiZSB0aGUgcmVzdWx0IG9mIHBhcnNpbmcgYnl0ZXMuXG4gICAgICAgIGxldCBlbnRyaWVzXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgbGV0IHRleHQgPSAnJ1xuICAgICAgICAgIC8vIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCBwYXJzZXIgd2lsbCBrZWVwIHRoZSBCT00uXG4gICAgICAgICAgLy8gaHR0cHM6Ly91cmwuc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXVybGVuY29kZWQtcGFyc2VyXG4gICAgICAgICAgLy8gTm90ZSB0aGF0IHN0cmVhbWluZyBkZWNvZGVyIGlzIHN0YXRlZnVsIGFuZCBjYW5ub3QgYmUgcmV1c2VkXG4gICAgICAgICAgY29uc3Qgc3RyZWFtaW5nRGVjb2RlciA9IG5ldyBUZXh0RGVjb2RlcigndXRmLTgnLCB7IGlnbm9yZUJPTTogdHJ1ZSB9KVxuXG4gICAgICAgICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBjb25zdW1lQm9keSh0aGlzW2tTdGF0ZV0uYm9keSkpIHtcbiAgICAgICAgICAgIGlmICghaXNVaW50OEFycmF5KGNodW5rKSkge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBVaW50OEFycmF5IGNodW5rJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRleHQgKz0gc3RyZWFtaW5nRGVjb2Rlci5kZWNvZGUoY2h1bmssIHsgc3RyZWFtOiB0cnVlIH0pXG4gICAgICAgICAgfVxuICAgICAgICAgIHRleHQgKz0gc3RyZWFtaW5nRGVjb2Rlci5kZWNvZGUoKVxuICAgICAgICAgIGVudHJpZXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHRleHQpXG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBVbmNsZWFyIHdoZW4gbmV3IFVSTFNlYXJjaFBhcmFtcyBjYW4gZmFpbCBvbiBhIHN0cmluZy5cbiAgICAgICAgICAvLyAyLiBJZiBlbnRyaWVzIGlzIGZhaWx1cmUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICAgICAgdGhyb3cgT2JqZWN0LmFzc2lnbihuZXcgVHlwZUVycm9yKCksIHsgY2F1c2U6IGVyciB9KVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gMy4gUmV0dXJuIGEgbmV3IEZvcm1EYXRhIG9iamVjdCB3aG9zZSBlbnRyaWVzIGFyZSBlbnRyaWVzLlxuICAgICAgICBjb25zdCBmb3JtRGF0YSA9IG5ldyBGb3JtRGF0YSgpXG4gICAgICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBlbnRyaWVzKSB7XG4gICAgICAgICAgZm9ybURhdGEuYXBwZW5kKG5hbWUsIHZhbHVlKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmb3JtRGF0YVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gV2FpdCBhIHRpY2sgYmVmb3JlIGNoZWNraW5nIGlmIHRoZSByZXF1ZXN0IGhhcyBiZWVuIGFib3J0ZWQuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgYSBUeXBlRXJyb3IgY2FuIGJlIHRocm93biB3aGVuIGFuIEFib3J0RXJyb3Igc2hvdWxkLlxuICAgICAgICBhd2FpdCBQcm9taXNlLnJlc29sdmUoKVxuXG4gICAgICAgIHRocm93SWZBYm9ydGVkKHRoaXNba1N0YXRlXSlcblxuICAgICAgICAvLyBPdGhlcndpc2UsIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgaGVhZGVyOiBgJHtpbnN0YW5jZS5uYW1lfS5mb3JtRGF0YWAsXG4gICAgICAgICAgbWVzc2FnZTogJ0NvdWxkIG5vdCBwYXJzZSBjb250ZW50IGFzIEZvcm1EYXRhLidcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbWV0aG9kc1xufVxuXG5mdW5jdGlvbiBtaXhpbkJvZHkgKHByb3RvdHlwZSkge1xuICBPYmplY3QuYXNzaWduKHByb3RvdHlwZS5wcm90b3R5cGUsIGJvZHlNaXhpbk1ldGhvZHMocHJvdG90eXBlKSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWJvZHktY29uc3VtZS1ib2R5XG4gKiBAcGFyYW0ge1Jlc3BvbnNlfFJlcXVlc3R9IG9iamVjdFxuICogQHBhcmFtIHsodmFsdWU6IHVua25vd24pID0+IHVua25vd259IGNvbnZlcnRCeXRlc1RvSlNWYWx1ZVxuICogQHBhcmFtIHtSZXNwb25zZXxSZXF1ZXN0fSBpbnN0YW5jZVxuICovXG5hc3luYyBmdW5jdGlvbiBzcGVjQ29uc3VtZUJvZHkgKG9iamVjdCwgY29udmVydEJ5dGVzVG9KU1ZhbHVlLCBpbnN0YW5jZSkge1xuICB3ZWJpZGwuYnJhbmRDaGVjayhvYmplY3QsIGluc3RhbmNlKVxuXG4gIHRocm93SWZBYm9ydGVkKG9iamVjdFtrU3RhdGVdKVxuXG4gIC8vIDEuIElmIG9iamVjdCBpcyB1bnVzYWJsZSwgdGhlbiByZXR1cm4gYSBwcm9taXNlIHJlamVjdGVkXG4gIC8vICAgIHdpdGggYSBUeXBlRXJyb3IuXG4gIGlmIChib2R5VW51c2FibGUob2JqZWN0W2tTdGF0ZV0uYm9keSkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb2R5IGlzIHVudXNhYmxlJylcbiAgfVxuXG4gIC8vIDIuIExldCBwcm9taXNlIGJlIGEgbmV3IHByb21pc2UuXG4gIGNvbnN0IHByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gIC8vIDMuIExldCBlcnJvclN0ZXBzIGdpdmVuIGVycm9yIGJlIHRvIHJlamVjdCBwcm9taXNlIHdpdGggZXJyb3IuXG4gIGNvbnN0IGVycm9yU3RlcHMgPSAoZXJyb3IpID0+IHByb21pc2UucmVqZWN0KGVycm9yKVxuXG4gIC8vIDQuIExldCBzdWNjZXNzU3RlcHMgZ2l2ZW4gYSBieXRlIHNlcXVlbmNlIGRhdGEgYmUgdG8gcmVzb2x2ZVxuICAvLyAgICBwcm9taXNlIHdpdGggdGhlIHJlc3VsdCBvZiBydW5uaW5nIGNvbnZlcnRCeXRlc1RvSlNWYWx1ZVxuICAvLyAgICB3aXRoIGRhdGEuIElmIHRoYXQgdGhyZXcgYW4gZXhjZXB0aW9uLCB0aGVuIHJ1biBlcnJvclN0ZXBzXG4gIC8vICAgIHdpdGggdGhhdCBleGNlcHRpb24uXG4gIGNvbnN0IHN1Y2Nlc3NTdGVwcyA9IChkYXRhKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHByb21pc2UucmVzb2x2ZShjb252ZXJ0Qnl0ZXNUb0pTVmFsdWUoZGF0YSkpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3JTdGVwcyhlKVxuICAgIH1cbiAgfVxuXG4gIC8vIDUuIElmIG9iamVjdFx1MjAxOXMgYm9keSBpcyBudWxsLCB0aGVuIHJ1biBzdWNjZXNzU3RlcHMgd2l0aCBhblxuICAvLyAgICBlbXB0eSBieXRlIHNlcXVlbmNlLlxuICBpZiAob2JqZWN0W2tTdGF0ZV0uYm9keSA9PSBudWxsKSB7XG4gICAgc3VjY2Vzc1N0ZXBzKG5ldyBVaW50OEFycmF5KCkpXG4gICAgcmV0dXJuIHByb21pc2UucHJvbWlzZVxuICB9XG5cbiAgLy8gNi4gT3RoZXJ3aXNlLCBmdWxseSByZWFkIG9iamVjdFx1MjAxOXMgYm9keSBnaXZlbiBzdWNjZXNzU3RlcHMsXG4gIC8vICAgIGVycm9yU3RlcHMsIGFuZCBvYmplY3RcdTIwMTlzIHJlbGV2YW50IGdsb2JhbCBvYmplY3QuXG4gIGF3YWl0IGZ1bGx5UmVhZEJvZHkob2JqZWN0W2tTdGF0ZV0uYm9keSwgc3VjY2Vzc1N0ZXBzLCBlcnJvclN0ZXBzKVxuXG4gIC8vIDcuIFJldHVybiBwcm9taXNlLlxuICByZXR1cm4gcHJvbWlzZS5wcm9taXNlXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNib2R5LXVudXNhYmxlXG5mdW5jdGlvbiBib2R5VW51c2FibGUgKGJvZHkpIHtcbiAgLy8gQW4gb2JqZWN0IGluY2x1ZGluZyB0aGUgQm9keSBpbnRlcmZhY2UgbWl4aW4gaXNcbiAgLy8gc2FpZCB0byBiZSB1bnVzYWJsZSBpZiBpdHMgYm9keSBpcyBub24tbnVsbCBhbmRcbiAgLy8gaXRzIGJvZHlcdTIwMTlzIHN0cmVhbSBpcyBkaXN0dXJiZWQgb3IgbG9ja2VkLlxuICByZXR1cm4gYm9keSAhPSBudWxsICYmIChib2R5LnN0cmVhbS5sb2NrZWQgfHwgdXRpbC5pc0Rpc3R1cmJlZChib2R5LnN0cmVhbSkpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jdXRmLTgtZGVjb2RlXG4gKiBAcGFyYW0ge0J1ZmZlcn0gYnVmZmVyXG4gKi9cbmZ1bmN0aW9uIHV0ZjhEZWNvZGVCeXRlcyAoYnVmZmVyKSB7XG4gIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICAvLyAxLiBMZXQgYnVmZmVyIGJlIHRoZSByZXN1bHQgb2YgcGVla2luZyB0aHJlZSBieXRlcyBmcm9tXG4gIC8vICAgIGlvUXVldWUsIGNvbnZlcnRlZCB0byBhIGJ5dGUgc2VxdWVuY2UuXG5cbiAgLy8gMi4gSWYgYnVmZmVyIGlzIDB4RUYgMHhCQiAweEJGLCB0aGVuIHJlYWQgdGhyZWVcbiAgLy8gICAgYnl0ZXMgZnJvbSBpb1F1ZXVlLiAoRG8gbm90aGluZyB3aXRoIHRob3NlIGJ5dGVzLilcbiAgaWYgKGJ1ZmZlclswXSA9PT0gMHhFRiAmJiBidWZmZXJbMV0gPT09IDB4QkIgJiYgYnVmZmVyWzJdID09PSAweEJGKSB7XG4gICAgYnVmZmVyID0gYnVmZmVyLnN1YmFycmF5KDMpXG4gIH1cblxuICAvLyAzLiBQcm9jZXNzIGEgcXVldWUgd2l0aCBhbiBpbnN0YW5jZSBvZiBVVEYtOFx1MjAxOXNcbiAgLy8gICAgZGVjb2RlciwgaW9RdWV1ZSwgb3V0cHV0LCBhbmQgXCJyZXBsYWNlbWVudFwiLlxuICBjb25zdCBvdXRwdXQgPSB0ZXh0RGVjb2Rlci5kZWNvZGUoYnVmZmVyKVxuXG4gIC8vIDQuIFJldHVybiBvdXRwdXQuXG4gIHJldHVybiBvdXRwdXRcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNwYXJzZS1qc29uLWJ5dGVzLXRvLWEtamF2YXNjcmlwdC12YWx1ZVxuICogQHBhcmFtIHtVaW50OEFycmF5fSBieXRlc1xuICovXG5mdW5jdGlvbiBwYXJzZUpTT05Gcm9tQnl0ZXMgKGJ5dGVzKSB7XG4gIHJldHVybiBKU09OLnBhcnNlKHV0ZjhEZWNvZGVCeXRlcyhieXRlcykpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1ib2R5LW1pbWUtdHlwZVxuICogQHBhcmFtIHtpbXBvcnQoJy4vcmVzcG9uc2UnKS5SZXNwb25zZXxpbXBvcnQoJy4vcmVxdWVzdCcpLlJlcXVlc3R9IG9iamVjdFxuICovXG5mdW5jdGlvbiBib2R5TWltZVR5cGUgKG9iamVjdCkge1xuICBjb25zdCB7IGhlYWRlcnNMaXN0IH0gPSBvYmplY3Rba1N0YXRlXVxuICBjb25zdCBjb250ZW50VHlwZSA9IGhlYWRlcnNMaXN0LmdldCgnY29udGVudC10eXBlJylcblxuICBpZiAoY29udGVudFR5cGUgPT09IG51bGwpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICByZXR1cm4gcGFyc2VNSU1FVHlwZShjb250ZW50VHlwZSlcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGV4dHJhY3RCb2R5LFxuICBzYWZlbHlFeHRyYWN0Qm9keSxcbiAgY2xvbmVCb2R5LFxuICBtaXhpbkJvZHlcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgTm90U3VwcG9ydGVkRXJyb3Jcbn0gPSByZXF1aXJlKCcuL2Vycm9ycycpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBrSFRUUDJCdWlsZFJlcXVlc3QsIGtIVFRQMkNvcHlIZWFkZXJzLCBrSFRUUDFCdWlsZFJlcXVlc3QgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi91dGlsJylcblxuLy8gdG9rZW5SZWdFeHAgYW5kIGhlYWRlckNoYXJSZWdleCBoYXZlIGJlZW4gbGlmdGVkIGZyb21cbi8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvbm9kZS9ibG9iL21haW4vbGliL19odHRwX2NvbW1vbi5qc1xuXG4vKipcbiAqIFZlcmlmaWVzIHRoYXQgdGhlIGdpdmVuIHZhbCBpcyBhIHZhbGlkIEhUVFAgdG9rZW5cbiAqIHBlciB0aGUgcnVsZXMgZGVmaW5lZCBpbiBSRkMgNzIzMFxuICogU2VlIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4yLjZcbiAqL1xuY29uc3QgdG9rZW5SZWdFeHAgPSAvXltcXF5fYGEtekEtWlxcLTAtOSEjJCUmJyorLnx+XSskL1xuXG4vKipcbiAqIE1hdGNoZXMgaWYgdmFsIGNvbnRhaW5zIGFuIGludmFsaWQgZmllbGQtdmNoYXJcbiAqICBmaWVsZC12YWx1ZSAgICA9ICooIGZpZWxkLWNvbnRlbnQgLyBvYnMtZm9sZCApXG4gKiAgZmllbGQtY29udGVudCAgPSBmaWVsZC12Y2hhciBbIDEqKCBTUCAvIEhUQUIgKSBmaWVsZC12Y2hhciBdXG4gKiAgZmllbGQtdmNoYXIgICAgPSBWQ0hBUiAvIG9icy10ZXh0XG4gKi9cbmNvbnN0IGhlYWRlckNoYXJSZWdleCA9IC9bXlxcdFxceDIwLVxceDdlXFx4ODAtXFx4ZmZdL1xuXG4vLyBWZXJpZmllcyB0aGF0IGEgZ2l2ZW4gcGF0aCBpcyB2YWxpZCBkb2VzIG5vdCBjb250YWluIGNvbnRyb2wgY2hhcnMgXFx4MDAgdG8gXFx4MjBcbmNvbnN0IGludmFsaWRQYXRoUmVnZXggPSAvW15cXHUwMDIxLVxcdTAwZmZdL1xuXG5jb25zdCBrSGFuZGxlciA9IFN5bWJvbCgnaGFuZGxlcicpXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cblxubGV0IGV4dHJhY3RCb2R5XG5cbnRyeSB7XG4gIGNvbnN0IGRpYWdub3N0aWNzQ2hhbm5lbCA9IHJlcXVpcmUoJ2RpYWdub3N0aWNzX2NoYW5uZWwnKVxuICBjaGFubmVscy5jcmVhdGUgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6Y3JlYXRlJylcbiAgY2hhbm5lbHMuYm9keVNlbnQgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOnJlcXVlc3Q6Ym9keVNlbnQnKVxuICBjaGFubmVscy5oZWFkZXJzID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OmhlYWRlcnMnKVxuICBjaGFubmVscy50cmFpbGVycyA9IGRpYWdub3N0aWNzQ2hhbm5lbC5jaGFubmVsKCd1bmRpY2k6cmVxdWVzdDp0cmFpbGVycycpXG4gIGNoYW5uZWxzLmVycm9yID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpyZXF1ZXN0OmVycm9yJylcbn0gY2F0Y2gge1xuICBjaGFubmVscy5jcmVhdGUgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG4gIGNoYW5uZWxzLmJvZHlTZW50ID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxuICBjaGFubmVscy5oZWFkZXJzID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxuICBjaGFubmVscy50cmFpbGVycyA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMuZXJyb3IgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG59XG5cbmNsYXNzIFJlcXVlc3Qge1xuICBjb25zdHJ1Y3RvciAob3JpZ2luLCB7XG4gICAgcGF0aCxcbiAgICBtZXRob2QsXG4gICAgYm9keSxcbiAgICBoZWFkZXJzLFxuICAgIHF1ZXJ5LFxuICAgIGlkZW1wb3RlbnQsXG4gICAgYmxvY2tpbmcsXG4gICAgdXBncmFkZSxcbiAgICBoZWFkZXJzVGltZW91dCxcbiAgICBib2R5VGltZW91dCxcbiAgICByZXNldCxcbiAgICB0aHJvd09uRXJyb3IsXG4gICAgZXhwZWN0Q29udGludWVcbiAgfSwgaGFuZGxlcikge1xuICAgIGlmICh0eXBlb2YgcGF0aCAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigncGF0aCBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgcGF0aFswXSAhPT0gJy8nICYmXG4gICAgICAhKHBhdGguc3RhcnRzV2l0aCgnaHR0cDovLycpIHx8IHBhdGguc3RhcnRzV2l0aCgnaHR0cHM6Ly8nKSkgJiZcbiAgICAgIG1ldGhvZCAhPT0gJ0NPTk5FQ1QnXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3BhdGggbXVzdCBiZSBhbiBhYnNvbHV0ZSBVUkwgb3Igc3RhcnQgd2l0aCBhIHNsYXNoJylcbiAgICB9IGVsc2UgaWYgKGludmFsaWRQYXRoUmVnZXguZXhlYyhwYXRoKSAhPT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHJlcXVlc3QgcGF0aCcpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBtZXRob2QgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21ldGhvZCBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9IGVsc2UgaWYgKHRva2VuUmVnRXhwLmV4ZWMobWV0aG9kKSA9PT0gbnVsbCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHJlcXVlc3QgbWV0aG9kJylcbiAgICB9XG5cbiAgICBpZiAodXBncmFkZSAmJiB0eXBlb2YgdXBncmFkZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndXBncmFkZSBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG5cbiAgICBpZiAoaGVhZGVyc1RpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShoZWFkZXJzVGltZW91dCkgfHwgaGVhZGVyc1RpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGhlYWRlcnNUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAoYm9keVRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShib2R5VGltZW91dCkgfHwgYm9keVRpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGJvZHlUaW1lb3V0JylcbiAgICB9XG5cbiAgICBpZiAocmVzZXQgIT0gbnVsbCAmJiB0eXBlb2YgcmVzZXQgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHJlc2V0JylcbiAgICB9XG5cbiAgICBpZiAoZXhwZWN0Q29udGludWUgIT0gbnVsbCAmJiB0eXBlb2YgZXhwZWN0Q29udGludWUgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGV4cGVjdENvbnRpbnVlJylcbiAgICB9XG5cbiAgICB0aGlzLmhlYWRlcnNUaW1lb3V0ID0gaGVhZGVyc1RpbWVvdXRcblxuICAgIHRoaXMuYm9keVRpbWVvdXQgPSBib2R5VGltZW91dFxuXG4gICAgdGhpcy50aHJvd09uRXJyb3IgPSB0aHJvd09uRXJyb3IgPT09IHRydWVcblxuICAgIHRoaXMubWV0aG9kID0gbWV0aG9kXG5cbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuXG4gICAgaWYgKGJvZHkgPT0gbnVsbCkge1xuICAgICAgdGhpcy5ib2R5ID0gbnVsbFxuICAgIH0gZWxzZSBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keVxuXG4gICAgICBjb25zdCByU3RhdGUgPSB0aGlzLmJvZHkuX3JlYWRhYmxlU3RhdGVcbiAgICAgIGlmICghclN0YXRlIHx8ICFyU3RhdGUuYXV0b0Rlc3Ryb3kpIHtcbiAgICAgICAgdGhpcy5lbmRIYW5kbGVyID0gZnVuY3Rpb24gYXV0b0Rlc3Ryb3kgKCkge1xuICAgICAgICAgIHV0aWwuZGVzdHJveSh0aGlzKVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuYm9keS5vbignZW5kJywgdGhpcy5lbmRIYW5kbGVyKVxuICAgICAgfVxuXG4gICAgICB0aGlzLmVycm9ySGFuZGxlciA9IGVyciA9PiB7XG4gICAgICAgIGlmICh0aGlzLmFib3J0KSB7XG4gICAgICAgICAgdGhpcy5hYm9ydChlcnIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5lcnJvciA9IGVyclxuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmJvZHkub24oJ2Vycm9yJywgdGhpcy5lcnJvckhhbmRsZXIpXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzQnVmZmVyKGJvZHkpKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5LmJ5dGVMZW5ndGggPyBib2R5IDogbnVsbFxuICAgIH0gZWxzZSBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KGJvZHkpKSB7XG4gICAgICB0aGlzLmJvZHkgPSBib2R5LmJ1ZmZlci5ieXRlTGVuZ3RoID8gQnVmZmVyLmZyb20oYm9keS5idWZmZXIsIGJvZHkuYnl0ZU9mZnNldCwgYm9keS5ieXRlTGVuZ3RoKSA6IG51bGxcbiAgICB9IGVsc2UgaWYgKGJvZHkgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgICAgdGhpcy5ib2R5ID0gYm9keS5ieXRlTGVuZ3RoID8gQnVmZmVyLmZyb20oYm9keSkgOiBudWxsXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHkubGVuZ3RoID8gQnVmZmVyLmZyb20oYm9keSkgOiBudWxsXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKGJvZHkpIHx8IHV0aWwuaXNJdGVyYWJsZShib2R5KSB8fCB1dGlsLmlzQmxvYkxpa2UoYm9keSkpIHtcbiAgICAgIHRoaXMuYm9keSA9IGJvZHlcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdib2R5IG11c3QgYmUgYSBzdHJpbmcsIGEgQnVmZmVyLCBhIFJlYWRhYmxlIHN0cmVhbSwgYW4gaXRlcmFibGUsIG9yIGFuIGFzeW5jIGl0ZXJhYmxlJylcbiAgICB9XG5cbiAgICB0aGlzLmNvbXBsZXRlZCA9IGZhbHNlXG5cbiAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZVxuXG4gICAgdGhpcy51cGdyYWRlID0gdXBncmFkZSB8fCBudWxsXG5cbiAgICB0aGlzLnBhdGggPSBxdWVyeSA/IHV0aWwuYnVpbGRVUkwocGF0aCwgcXVlcnkpIDogcGF0aFxuXG4gICAgdGhpcy5vcmlnaW4gPSBvcmlnaW5cblxuICAgIHRoaXMuaWRlbXBvdGVudCA9IGlkZW1wb3RlbnQgPT0gbnVsbFxuICAgICAgPyBtZXRob2QgPT09ICdIRUFEJyB8fCBtZXRob2QgPT09ICdHRVQnXG4gICAgICA6IGlkZW1wb3RlbnRcblxuICAgIHRoaXMuYmxvY2tpbmcgPSBibG9ja2luZyA9PSBudWxsID8gZmFsc2UgOiBibG9ja2luZ1xuXG4gICAgdGhpcy5yZXNldCA9IHJlc2V0ID09IG51bGwgPyBudWxsIDogcmVzZXRcblxuICAgIHRoaXMuaG9zdCA9IG51bGxcblxuICAgIHRoaXMuY29udGVudExlbmd0aCA9IG51bGxcblxuICAgIHRoaXMuY29udGVudFR5cGUgPSBudWxsXG5cbiAgICB0aGlzLmhlYWRlcnMgPSAnJ1xuXG4gICAgLy8gT25seSBmb3IgSDJcbiAgICB0aGlzLmV4cGVjdENvbnRpbnVlID0gZXhwZWN0Q29udGludWUgIT0gbnVsbCA/IGV4cGVjdENvbnRpbnVlIDogZmFsc2VcblxuICAgIGlmIChBcnJheS5pc0FycmF5KGhlYWRlcnMpKSB7XG4gICAgICBpZiAoaGVhZGVycy5sZW5ndGggJSAyICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVycyBhcnJheSBtdXN0IGJlIGV2ZW4nKVxuICAgICAgfVxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBoZWFkZXJzLmxlbmd0aDsgaSArPSAyKSB7XG4gICAgICAgIHByb2Nlc3NIZWFkZXIodGhpcywgaGVhZGVyc1tpXSwgaGVhZGVyc1tpICsgMV0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoZWFkZXJzICYmIHR5cGVvZiBoZWFkZXJzID09PSAnb2JqZWN0Jykge1xuICAgICAgY29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKGhlYWRlcnMpXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGtleXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3Qga2V5ID0ga2V5c1tpXVxuICAgICAgICBwcm9jZXNzSGVhZGVyKHRoaXMsIGtleSwgaGVhZGVyc1trZXldKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoaGVhZGVycyAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hlYWRlcnMgbXVzdCBiZSBhbiBvYmplY3Qgb3IgYW4gYXJyYXknKVxuICAgIH1cblxuICAgIGlmICh1dGlsLmlzRm9ybURhdGFMaWtlKHRoaXMuYm9keSkpIHtcbiAgICAgIGlmICh1dGlsLm5vZGVNYWpvciA8IDE2IHx8ICh1dGlsLm5vZGVNYWpvciA9PT0gMTYgJiYgdXRpbC5ub2RlTWlub3IgPCA4KSkge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0Zvcm0tRGF0YSBib2RpZXMgYXJlIG9ubHkgc3VwcG9ydGVkIGluIG5vZGUgdjE2LjggYW5kIG5ld2VyLicpXG4gICAgICB9XG5cbiAgICAgIGlmICghZXh0cmFjdEJvZHkpIHtcbiAgICAgICAgZXh0cmFjdEJvZHkgPSByZXF1aXJlKCcuLi9mZXRjaC9ib2R5LmpzJykuZXh0cmFjdEJvZHlcbiAgICAgIH1cblxuICAgICAgY29uc3QgW2JvZHlTdHJlYW0sIGNvbnRlbnRUeXBlXSA9IGV4dHJhY3RCb2R5KGJvZHkpXG4gICAgICBpZiAodGhpcy5jb250ZW50VHlwZSA9PSBudWxsKSB7XG4gICAgICAgIHRoaXMuY29udGVudFR5cGUgPSBjb250ZW50VHlwZVxuICAgICAgICB0aGlzLmhlYWRlcnMgKz0gYGNvbnRlbnQtdHlwZTogJHtjb250ZW50VHlwZX1cXHJcXG5gXG4gICAgICB9XG4gICAgICB0aGlzLmJvZHkgPSBib2R5U3RyZWFtLnN0cmVhbVxuICAgICAgdGhpcy5jb250ZW50TGVuZ3RoID0gYm9keVN0cmVhbS5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHV0aWwuaXNCbG9iTGlrZShib2R5KSAmJiB0aGlzLmNvbnRlbnRUeXBlID09IG51bGwgJiYgYm9keS50eXBlKSB7XG4gICAgICB0aGlzLmNvbnRlbnRUeXBlID0gYm9keS50eXBlXG4gICAgICB0aGlzLmhlYWRlcnMgKz0gYGNvbnRlbnQtdHlwZTogJHtib2R5LnR5cGV9XFxyXFxuYFxuICAgIH1cblxuICAgIHV0aWwudmFsaWRhdGVIYW5kbGVyKGhhbmRsZXIsIG1ldGhvZCwgdXBncmFkZSlcblxuICAgIHRoaXMuc2VydmVybmFtZSA9IHV0aWwuZ2V0U2VydmVyTmFtZSh0aGlzLmhvc3QpXG5cbiAgICB0aGlzW2tIYW5kbGVyXSA9IGhhbmRsZXJcblxuICAgIGlmIChjaGFubmVscy5jcmVhdGUuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmNyZWF0ZS5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcyB9KVxuICAgIH1cbiAgfVxuXG4gIG9uQm9keVNlbnQgKGNodW5rKSB7XG4gICAgaWYgKHRoaXNba0hhbmRsZXJdLm9uQm9keVNlbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkJvZHlTZW50KGNodW5rKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uUmVxdWVzdFNlbnQgKCkge1xuICAgIGlmIChjaGFubmVscy5ib2R5U2VudC5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuYm9keVNlbnQucHVibGlzaCh7IHJlcXVlc3Q6IHRoaXMgfSlcbiAgICB9XG5cbiAgICBpZiAodGhpc1trSGFuZGxlcl0ub25SZXF1ZXN0U2VudCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uUmVxdWVzdFNlbnQoKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQpIHtcbiAgICBhc3NlcnQoIXRoaXMuYWJvcnRlZClcbiAgICBhc3NlcnQoIXRoaXMuY29tcGxldGVkKVxuXG4gICAgaWYgKHRoaXMuZXJyb3IpIHtcbiAgICAgIGFib3J0KHRoaXMuZXJyb3IpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uQ29ubmVjdChhYm9ydClcbiAgICB9XG4gIH1cblxuICBvbkhlYWRlcnMgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHJlc3VtZSwgc3RhdHVzVGV4dCkge1xuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuICAgIGFzc2VydCghdGhpcy5jb21wbGV0ZWQpXG5cbiAgICBpZiAoY2hhbm5lbHMuaGVhZGVycy5oYXNTdWJzY3JpYmVycykge1xuICAgICAgY2hhbm5lbHMuaGVhZGVycy5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcywgcmVzcG9uc2U6IHsgc3RhdHVzQ29kZSwgaGVhZGVycywgc3RhdHVzVGV4dCB9IH0pXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiB0aGlzW2tIYW5kbGVyXS5vbkhlYWRlcnMoc3RhdHVzQ29kZSwgaGVhZGVycywgcmVzdW1lLCBzdGF0dXNUZXh0KVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdGhpcy5hYm9ydChlcnIpXG4gICAgfVxuICB9XG5cbiAgb25EYXRhIChjaHVuaykge1xuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuICAgIGFzc2VydCghdGhpcy5jb21wbGV0ZWQpXG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uRGF0YShjaHVuaylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHRoaXMuYWJvcnQoZXJyKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgb25VcGdyYWRlIChzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpIHtcbiAgICBhc3NlcnQoIXRoaXMuYWJvcnRlZClcbiAgICBhc3NlcnQoIXRoaXMuY29tcGxldGVkKVxuXG4gICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIHRoaXMub25GaW5hbGx5KClcblxuICAgIGFzc2VydCghdGhpcy5hYm9ydGVkKVxuXG4gICAgdGhpcy5jb21wbGV0ZWQgPSB0cnVlXG4gICAgaWYgKGNoYW5uZWxzLnRyYWlsZXJzLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy50cmFpbGVycy5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcywgdHJhaWxlcnMgfSlcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uQ29tcGxldGUodHJhaWxlcnMpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAvLyBUT0RPIChmaXgpOiBUaGlzIG1pZ2h0IGJlIGEgYmFkIGlkZWE/XG4gICAgICB0aGlzLm9uRXJyb3IoZXJyKVxuICAgIH1cbiAgfVxuXG4gIG9uRXJyb3IgKGVycm9yKSB7XG4gICAgdGhpcy5vbkZpbmFsbHkoKVxuXG4gICAgaWYgKGNoYW5uZWxzLmVycm9yLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5lcnJvci5wdWJsaXNoKHsgcmVxdWVzdDogdGhpcywgZXJyb3IgfSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5hYm9ydGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhpcy5hYm9ydGVkID0gdHJ1ZVxuXG4gICAgcmV0dXJuIHRoaXNba0hhbmRsZXJdLm9uRXJyb3IoZXJyb3IpXG4gIH1cblxuICBvbkZpbmFsbHkgKCkge1xuICAgIGlmICh0aGlzLmVycm9ySGFuZGxlcikge1xuICAgICAgdGhpcy5ib2R5Lm9mZignZXJyb3InLCB0aGlzLmVycm9ySGFuZGxlcilcbiAgICAgIHRoaXMuZXJyb3JIYW5kbGVyID0gbnVsbFxuICAgIH1cblxuICAgIGlmICh0aGlzLmVuZEhhbmRsZXIpIHtcbiAgICAgIHRoaXMuYm9keS5vZmYoJ2VuZCcsIHRoaXMuZW5kSGFuZGxlcilcbiAgICAgIHRoaXMuZW5kSGFuZGxlciA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvLyBUT0RPOiBhZGp1c3QgdG8gc3VwcG9ydCBIMlxuICBhZGRIZWFkZXIgKGtleSwgdmFsdWUpIHtcbiAgICBwcm9jZXNzSGVhZGVyKHRoaXMsIGtleSwgdmFsdWUpXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIHN0YXRpYyBba0hUVFAxQnVpbGRSZXF1ZXN0XSAob3JpZ2luLCBvcHRzLCBoYW5kbGVyKSB7XG4gICAgLy8gVE9ETzogTWlncmF0ZSBoZWFkZXIgcGFyc2luZyBoZXJlLCB0byBtYWtlIFJlcXVlc3RzXG4gICAgLy8gSFRUUCBhZ25vc3RpY1xuICAgIHJldHVybiBuZXcgUmVxdWVzdChvcmlnaW4sIG9wdHMsIGhhbmRsZXIpXG4gIH1cblxuICBzdGF0aWMgW2tIVFRQMkJ1aWxkUmVxdWVzdF0gKG9yaWdpbiwgb3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IGhlYWRlcnMgPSBvcHRzLmhlYWRlcnNcbiAgICBvcHRzID0geyAuLi5vcHRzLCBoZWFkZXJzOiBudWxsIH1cblxuICAgIGNvbnN0IHJlcXVlc3QgPSBuZXcgUmVxdWVzdChvcmlnaW4sIG9wdHMsIGhhbmRsZXIpXG5cbiAgICByZXF1ZXN0LmhlYWRlcnMgPSB7fVxuXG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICAgIGlmIChoZWFkZXJzLmxlbmd0aCAlIDIgIT09IDApIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzIGFycmF5IG11c3QgYmUgZXZlbicpXG4gICAgICB9XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgICAgcHJvY2Vzc0hlYWRlcihyZXF1ZXN0LCBoZWFkZXJzW2ldLCBoZWFkZXJzW2kgKyAxXSwgdHJ1ZSlcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGhlYWRlcnMgJiYgdHlwZW9mIGhlYWRlcnMgPT09ICdvYmplY3QnKSB7XG4gICAgICBjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoaGVhZGVycylcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBrZXkgPSBrZXlzW2ldXG4gICAgICAgIHByb2Nlc3NIZWFkZXIocmVxdWVzdCwga2V5LCBoZWFkZXJzW2tleV0sIHRydWUpXG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChoZWFkZXJzICE9IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVycyBtdXN0IGJlIGFuIG9iamVjdCBvciBhbiBhcnJheScpXG4gICAgfVxuXG4gICAgcmV0dXJuIHJlcXVlc3RcbiAgfVxuXG4gIHN0YXRpYyBba0hUVFAyQ29weUhlYWRlcnNdIChyYXcpIHtcbiAgICBjb25zdCByYXdIZWFkZXJzID0gcmF3LnNwbGl0KCdcXHJcXG4nKVxuICAgIGNvbnN0IGhlYWRlcnMgPSB7fVxuXG4gICAgZm9yIChjb25zdCBoZWFkZXIgb2YgcmF3SGVhZGVycykge1xuICAgICAgY29uc3QgW2tleSwgdmFsdWVdID0gaGVhZGVyLnNwbGl0KCc6ICcpXG5cbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlLmxlbmd0aCA9PT0gMCkgY29udGludWVcblxuICAgICAgaWYgKGhlYWRlcnNba2V5XSkgaGVhZGVyc1trZXldICs9IGAsJHt2YWx1ZX1gXG4gICAgICBlbHNlIGhlYWRlcnNba2V5XSA9IHZhbHVlXG4gICAgfVxuXG4gICAgcmV0dXJuIGhlYWRlcnNcbiAgfVxufVxuXG5mdW5jdGlvbiBwcm9jZXNzSGVhZGVyVmFsdWUgKGtleSwgdmFsLCBza2lwQXBwZW5kKSB7XG4gIGlmICh2YWwgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoYGludmFsaWQgJHtrZXl9IGhlYWRlcmApXG4gIH1cblxuICB2YWwgPSB2YWwgIT0gbnVsbCA/IGAke3ZhbH1gIDogJydcblxuICBpZiAoaGVhZGVyQ2hhclJlZ2V4LmV4ZWModmFsKSAhPT0gbnVsbCkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgaW52YWxpZCAke2tleX0gaGVhZGVyYClcbiAgfVxuXG4gIHJldHVybiBza2lwQXBwZW5kID8gdmFsIDogYCR7a2V5fTogJHt2YWx9XFxyXFxuYFxufVxuXG5mdW5jdGlvbiBwcm9jZXNzSGVhZGVyIChyZXF1ZXN0LCBrZXksIHZhbCwgc2tpcEFwcGVuZCA9IGZhbHNlKSB7XG4gIGlmICh2YWwgJiYgKHR5cGVvZiB2YWwgPT09ICdvYmplY3QnICYmICFBcnJheS5pc0FycmF5KHZhbCkpKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKGBpbnZhbGlkICR7a2V5fSBoZWFkZXJgKVxuICB9IGVsc2UgaWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoXG4gICAgcmVxdWVzdC5ob3N0ID09PSBudWxsICYmXG4gICAga2V5Lmxlbmd0aCA9PT0gNCAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAnaG9zdCdcbiAgKSB7XG4gICAgaWYgKGhlYWRlckNoYXJSZWdleC5leGVjKHZhbCkgIT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcihgaW52YWxpZCAke2tleX0gaGVhZGVyYClcbiAgICB9XG4gICAgLy8gQ29uc3VtZWQgYnkgQ2xpZW50XG4gICAgcmVxdWVzdC5ob3N0ID0gdmFsXG4gIH0gZWxzZSBpZiAoXG4gICAgcmVxdWVzdC5jb250ZW50TGVuZ3RoID09PSBudWxsICYmXG4gICAga2V5Lmxlbmd0aCA9PT0gMTQgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtbGVuZ3RoJ1xuICApIHtcbiAgICByZXF1ZXN0LmNvbnRlbnRMZW5ndGggPSBwYXJzZUludCh2YWwsIDEwKVxuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHJlcXVlc3QuY29udGVudExlbmd0aCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjb250ZW50LWxlbmd0aCBoZWFkZXInKVxuICAgIH1cbiAgfSBlbHNlIGlmIChcbiAgICByZXF1ZXN0LmNvbnRlbnRUeXBlID09PSBudWxsICYmXG4gICAga2V5Lmxlbmd0aCA9PT0gMTIgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtdHlwZSdcbiAgKSB7XG4gICAgcmVxdWVzdC5jb250ZW50VHlwZSA9IHZhbFxuICAgIGlmIChza2lwQXBwZW5kKSByZXF1ZXN0LmhlYWRlcnNba2V5XSA9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbCwgc2tpcEFwcGVuZClcbiAgICBlbHNlIHJlcXVlc3QuaGVhZGVycyArPSBwcm9jZXNzSGVhZGVyVmFsdWUoa2V5LCB2YWwpXG4gIH0gZWxzZSBpZiAoXG4gICAga2V5Lmxlbmd0aCA9PT0gMTcgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3RyYW5zZmVyLWVuY29kaW5nJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgdHJhbnNmZXItZW5jb2RpbmcgaGVhZGVyJylcbiAgfSBlbHNlIGlmIChcbiAgICBrZXkubGVuZ3RoID09PSAxMCAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAnY29ubmVjdGlvbidcbiAgKSB7XG4gICAgY29uc3QgdmFsdWUgPSB0eXBlb2YgdmFsID09PSAnc3RyaW5nJyA/IHZhbC50b0xvd2VyQ2FzZSgpIDogbnVsbFxuICAgIGlmICh2YWx1ZSAhPT0gJ2Nsb3NlJyAmJiB2YWx1ZSAhPT0gJ2tlZXAtYWxpdmUnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY29ubmVjdGlvbiBoZWFkZXInKVxuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09ICdjbG9zZScpIHtcbiAgICAgIHJlcXVlc3QucmVzZXQgPSB0cnVlXG4gICAgfVxuICB9IGVsc2UgaWYgKFxuICAgIGtleS5sZW5ndGggPT09IDEwICYmXG4gICAga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdrZWVwLWFsaXZlJ1xuICApIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQga2VlcC1hbGl2ZSBoZWFkZXInKVxuICB9IGVsc2UgaWYgKFxuICAgIGtleS5sZW5ndGggPT09IDcgJiZcbiAgICBrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ3VwZ3JhZGUnXG4gICkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCB1cGdyYWRlIGhlYWRlcicpXG4gIH0gZWxzZSBpZiAoXG4gICAga2V5Lmxlbmd0aCA9PT0gNiAmJlxuICAgIGtleS50b0xvd2VyQ2FzZSgpID09PSAnZXhwZWN0J1xuICApIHtcbiAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXJyb3IoJ2V4cGVjdCBoZWFkZXIgbm90IHN1cHBvcnRlZCcpXG4gIH0gZWxzZSBpZiAodG9rZW5SZWdFeHAuZXhlYyhrZXkpID09PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGhlYWRlciBrZXknKVxuICB9IGVsc2Uge1xuICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChza2lwQXBwZW5kKSB7XG4gICAgICAgICAgaWYgKHJlcXVlc3QuaGVhZGVyc1trZXldKSByZXF1ZXN0LmhlYWRlcnNba2V5XSArPSBgLCR7cHJvY2Vzc0hlYWRlclZhbHVlKGtleSwgdmFsW2ldLCBza2lwQXBwZW5kKX1gXG4gICAgICAgICAgZWxzZSByZXF1ZXN0LmhlYWRlcnNba2V5XSA9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbFtpXSwgc2tpcEFwcGVuZClcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMgKz0gcHJvY2Vzc0hlYWRlclZhbHVlKGtleSwgdmFsW2ldKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChza2lwQXBwZW5kKSByZXF1ZXN0LmhlYWRlcnNba2V5XSA9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbCwgc2tpcEFwcGVuZClcbiAgICAgIGVsc2UgcmVxdWVzdC5oZWFkZXJzICs9IHByb2Nlc3NIZWFkZXJWYWx1ZShrZXksIHZhbClcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZXF1ZXN0XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IEV2ZW50RW1pdHRlciA9IHJlcXVpcmUoJ2V2ZW50cycpXG5cbmNsYXNzIERpc3BhdGNoZXIgZXh0ZW5kcyBFdmVudEVtaXR0ZXIge1xuICBkaXNwYXRjaCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdub3QgaW1wbGVtZW50ZWQnKVxuICB9XG5cbiAgY2xvc2UgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJylcbiAgfVxuXG4gIGRlc3Ryb3kgKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbm90IGltcGxlbWVudGVkJylcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IERpc3BhdGNoZXJcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgRGlzcGF0Y2hlciA9IHJlcXVpcmUoJy4vZGlzcGF0Y2hlcicpXG5jb25zdCB7XG4gIENsaWVudERlc3Ryb3llZEVycm9yLFxuICBDbGllbnRDbG9zZWRFcnJvcixcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3Jcbn0gPSByZXF1aXJlKCcuL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsga0Rlc3Ryb3ksIGtDbG9zZSwga0Rpc3BhdGNoLCBrSW50ZXJjZXB0b3JzIH0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5cbmNvbnN0IGtEZXN0cm95ZWQgPSBTeW1ib2woJ2Rlc3Ryb3llZCcpXG5jb25zdCBrQ2xvc2VkID0gU3ltYm9sKCdjbG9zZWQnKVxuY29uc3Qga09uRGVzdHJveWVkID0gU3ltYm9sKCdvbkRlc3Ryb3llZCcpXG5jb25zdCBrT25DbG9zZWQgPSBTeW1ib2woJ29uQ2xvc2VkJylcbmNvbnN0IGtJbnRlcmNlcHRlZERpc3BhdGNoID0gU3ltYm9sKCdJbnRlcmNlcHRlZCBEaXNwYXRjaCcpXG5cbmNsYXNzIERpc3BhdGNoZXJCYXNlIGV4dGVuZHMgRGlzcGF0Y2hlciB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICBzdXBlcigpXG5cbiAgICB0aGlzW2tEZXN0cm95ZWRdID0gZmFsc2VcbiAgICB0aGlzW2tPbkRlc3Ryb3llZF0gPSBudWxsXG4gICAgdGhpc1trQ2xvc2VkXSA9IGZhbHNlXG4gICAgdGhpc1trT25DbG9zZWRdID0gW11cbiAgfVxuXG4gIGdldCBkZXN0cm95ZWQgKCkge1xuICAgIHJldHVybiB0aGlzW2tEZXN0cm95ZWRdXG4gIH1cblxuICBnZXQgY2xvc2VkICgpIHtcbiAgICByZXR1cm4gdGhpc1trQ2xvc2VkXVxuICB9XG5cbiAgZ2V0IGludGVyY2VwdG9ycyAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0ludGVyY2VwdG9yc11cbiAgfVxuXG4gIHNldCBpbnRlcmNlcHRvcnMgKG5ld0ludGVyY2VwdG9ycykge1xuICAgIGlmIChuZXdJbnRlcmNlcHRvcnMpIHtcbiAgICAgIGZvciAobGV0IGkgPSBuZXdJbnRlcmNlcHRvcnMubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgY29uc3QgaW50ZXJjZXB0b3IgPSB0aGlzW2tJbnRlcmNlcHRvcnNdW2ldXG4gICAgICAgIGlmICh0eXBlb2YgaW50ZXJjZXB0b3IgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludGVyY2VwdG9yIG11c3QgYmUgYW4gZnVuY3Rpb24nKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpc1trSW50ZXJjZXB0b3JzXSA9IG5ld0ludGVyY2VwdG9yc1xuICB9XG5cbiAgY2xvc2UgKGNhbGxiYWNrKSB7XG4gICAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIHRoaXMuY2xvc2UoKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICAgIHJldHVybiBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUoZGF0YSlcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNhbGxiYWNrJylcbiAgICB9XG5cbiAgICBpZiAodGhpc1trRGVzdHJveWVkXSkge1xuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gY2FsbGJhY2sobmV3IENsaWVudERlc3Ryb3llZEVycm9yKCksIG51bGwpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXNba0Nsb3NlZF0pIHtcbiAgICAgIGlmICh0aGlzW2tPbkNsb3NlZF0pIHtcbiAgICAgICAgdGhpc1trT25DbG9zZWRdLnB1c2goY2FsbGJhY2spXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhudWxsLCBudWxsKSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXNba0Nsb3NlZF0gPSB0cnVlXG4gICAgdGhpc1trT25DbG9zZWRdLnB1c2goY2FsbGJhY2spXG5cbiAgICBjb25zdCBvbkNsb3NlZCA9ICgpID0+IHtcbiAgICAgIGNvbnN0IGNhbGxiYWNrcyA9IHRoaXNba09uQ2xvc2VkXVxuICAgICAgdGhpc1trT25DbG9zZWRdID0gbnVsbFxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjYWxsYmFja3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY2FsbGJhY2tzW2ldKG51bGwsIG51bGwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gU2hvdWxkIG5vdCBlcnJvci5cbiAgICB0aGlzW2tDbG9zZV0oKVxuICAgICAgLnRoZW4oKCkgPT4gdGhpcy5kZXN0cm95KCkpXG4gICAgICAudGhlbigoKSA9PiB7XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKG9uQ2xvc2VkKVxuICAgICAgfSlcbiAgfVxuXG4gIGRlc3Ryb3kgKGVyciwgY2FsbGJhY2spIHtcbiAgICBpZiAodHlwZW9mIGVyciA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY2FsbGJhY2sgPSBlcnJcbiAgICAgIGVyciA9IG51bGxcbiAgICB9XG5cbiAgICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgICAgdGhpcy5kZXN0cm95KGVyciwgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICAgIHJldHVybiBlcnIgPyAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogc2hvdWxkIG5ldmVyIGVycm9yICovIHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgICB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgIH1cblxuICAgIGlmICh0aGlzW2tEZXN0cm95ZWRdKSB7XG4gICAgICBpZiAodGhpc1trT25EZXN0cm95ZWRdKSB7XG4gICAgICAgIHRoaXNba09uRGVzdHJveWVkXS5wdXNoKGNhbGxiYWNrKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gY2FsbGJhY2sobnVsbCwgbnVsbCkpXG4gICAgICB9XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIWVycikge1xuICAgICAgZXJyID0gbmV3IENsaWVudERlc3Ryb3llZEVycm9yKClcbiAgICB9XG5cbiAgICB0aGlzW2tEZXN0cm95ZWRdID0gdHJ1ZVxuICAgIHRoaXNba09uRGVzdHJveWVkXSA9IHRoaXNba09uRGVzdHJveWVkXSB8fCBbXVxuICAgIHRoaXNba09uRGVzdHJveWVkXS5wdXNoKGNhbGxiYWNrKVxuXG4gICAgY29uc3Qgb25EZXN0cm95ZWQgPSAoKSA9PiB7XG4gICAgICBjb25zdCBjYWxsYmFja3MgPSB0aGlzW2tPbkRlc3Ryb3llZF1cbiAgICAgIHRoaXNba09uRGVzdHJveWVkXSA9IG51bGxcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgY2FsbGJhY2tzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNhbGxiYWNrc1tpXShudWxsLCBudWxsKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFNob3VsZCBub3QgZXJyb3IuXG4gICAgdGhpc1trRGVzdHJveV0oZXJyKS50aGVuKCgpID0+IHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKG9uRGVzdHJveWVkKVxuICAgIH0pXG4gIH1cblxuICBba0ludGVyY2VwdGVkRGlzcGF0Y2hdIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKCF0aGlzW2tJbnRlcmNlcHRvcnNdIHx8IHRoaXNba0ludGVyY2VwdG9yc10ubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzW2tJbnRlcmNlcHRlZERpc3BhdGNoXSA9IHRoaXNba0Rpc3BhdGNoXVxuICAgICAgcmV0dXJuIHRoaXNba0Rpc3BhdGNoXShvcHRzLCBoYW5kbGVyKVxuICAgIH1cblxuICAgIGxldCBkaXNwYXRjaCA9IHRoaXNba0Rpc3BhdGNoXS5iaW5kKHRoaXMpXG4gICAgZm9yIChsZXQgaSA9IHRoaXNba0ludGVyY2VwdG9yc10ubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIGRpc3BhdGNoID0gdGhpc1trSW50ZXJjZXB0b3JzXVtpXShkaXNwYXRjaClcbiAgICB9XG4gICAgdGhpc1trSW50ZXJjZXB0ZWREaXNwYXRjaF0gPSBkaXNwYXRjaFxuICAgIHJldHVybiBkaXNwYXRjaChvcHRzLCBoYW5kbGVyKVxuICB9XG5cbiAgZGlzcGF0Y2ggKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBpZiAoIWhhbmRsZXIgfHwgdHlwZW9mIGhhbmRsZXIgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2hhbmRsZXIgbXVzdCBiZSBhbiBvYmplY3QnKVxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignb3B0cyBtdXN0IGJlIGFuIG9iamVjdC4nKVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpc1trRGVzdHJveWVkXSB8fCB0aGlzW2tPbkRlc3Ryb3llZF0pIHtcbiAgICAgICAgdGhyb3cgbmV3IENsaWVudERlc3Ryb3llZEVycm9yKClcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXNba0Nsb3NlZF0pIHtcbiAgICAgICAgdGhyb3cgbmV3IENsaWVudENsb3NlZEVycm9yKClcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHRoaXNba0ludGVyY2VwdGVkRGlzcGF0Y2hdKG9wdHMsIGhhbmRsZXIpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodHlwZW9mIGhhbmRsZXIub25FcnJvciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb25FcnJvciBtZXRob2QnKVxuICAgICAgfVxuXG4gICAgICBoYW5kbGVyLm9uRXJyb3IoZXJyKVxuXG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBEaXNwYXRjaGVyQmFzZVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBuZXQgPSByZXF1aXJlKCduZXQnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgQ29ubmVjdFRpbWVvdXRFcnJvciB9ID0gcmVxdWlyZSgnLi9lcnJvcnMnKVxuXG5sZXQgdGxzIC8vIGluY2x1ZGUgdGxzIGNvbmRpdGlvbmFsbHkgc2luY2UgaXQgaXMgbm90IGFsd2F5cyBhdmFpbGFibGVcblxuLy8gVE9ETzogc2Vzc2lvbiByZS11c2UgZG9lcyBub3Qgd2FpdCBmb3IgdGhlIGZpcnN0XG4vLyBjb25uZWN0aW9uIHRvIHJlc29sdmUgdGhlIHNlc3Npb24gYW5kIG1pZ2h0IHRoZXJlZm9yZVxuLy8gcmVzb2x2ZSB0aGUgc2FtZSBzZXJ2ZXJuYW1lIG11bHRpcGxlIHRpbWVzIGV2ZW4gd2hlblxuLy8gcmUtdXNlIGlzIGVuYWJsZWQuXG5cbmxldCBTZXNzaW9uQ2FjaGVcbi8vIEZJWE1FOiByZW1vdmUgd29ya2Fyb3VuZCB3aGVuIHRoZSBOb2RlIGJ1ZyBpcyBmaXhlZFxuLy8gaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy9ub2RlL2lzc3Vlcy80OTM0NCNpc3N1ZWNvbW1lbnQtMTc0MTc3NjMwOFxuaWYgKGdsb2JhbC5GaW5hbGl6YXRpb25SZWdpc3RyeSAmJiAhcHJvY2Vzcy5lbnYuTk9ERV9WOF9DT1ZFUkFHRSkge1xuICBTZXNzaW9uQ2FjaGUgPSBjbGFzcyBXZWFrU2Vzc2lvbkNhY2hlIHtcbiAgICBjb25zdHJ1Y3RvciAobWF4Q2FjaGVkU2Vzc2lvbnMpIHtcbiAgICAgIHRoaXMuX21heENhY2hlZFNlc3Npb25zID0gbWF4Q2FjaGVkU2Vzc2lvbnNcbiAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZSA9IG5ldyBNYXAoKVxuICAgICAgdGhpcy5fc2Vzc2lvblJlZ2lzdHJ5ID0gbmV3IGdsb2JhbC5GaW5hbGl6YXRpb25SZWdpc3RyeSgoa2V5KSA9PiB7XG4gICAgICAgIGlmICh0aGlzLl9zZXNzaW9uQ2FjaGUuc2l6ZSA8IHRoaXMuX21heENhY2hlZFNlc3Npb25zKSB7XG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZWYgPSB0aGlzLl9zZXNzaW9uQ2FjaGUuZ2V0KGtleSlcbiAgICAgICAgaWYgKHJlZiAhPT0gdW5kZWZpbmVkICYmIHJlZi5kZXJlZigpID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUuZGVsZXRlKGtleSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBnZXQgKHNlc3Npb25LZXkpIHtcbiAgICAgIGNvbnN0IHJlZiA9IHRoaXMuX3Nlc3Npb25DYWNoZS5nZXQoc2Vzc2lvbktleSlcbiAgICAgIHJldHVybiByZWYgPyByZWYuZGVyZWYoKSA6IG51bGxcbiAgICB9XG5cbiAgICBzZXQgKHNlc3Npb25LZXksIHNlc3Npb24pIHtcbiAgICAgIGlmICh0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucyA9PT0gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlLnNldChzZXNzaW9uS2V5LCBuZXcgV2Vha1JlZihzZXNzaW9uKSlcbiAgICAgIHRoaXMuX3Nlc3Npb25SZWdpc3RyeS5yZWdpc3RlcihzZXNzaW9uLCBzZXNzaW9uS2V5KVxuICAgIH1cbiAgfVxufSBlbHNlIHtcbiAgU2Vzc2lvbkNhY2hlID0gY2xhc3MgU2ltcGxlU2Vzc2lvbkNhY2hlIHtcbiAgICBjb25zdHJ1Y3RvciAobWF4Q2FjaGVkU2Vzc2lvbnMpIHtcbiAgICAgIHRoaXMuX21heENhY2hlZFNlc3Npb25zID0gbWF4Q2FjaGVkU2Vzc2lvbnNcbiAgICAgIHRoaXMuX3Nlc3Npb25DYWNoZSA9IG5ldyBNYXAoKVxuICAgIH1cblxuICAgIGdldCAoc2Vzc2lvbktleSkge1xuICAgICAgcmV0dXJuIHRoaXMuX3Nlc3Npb25DYWNoZS5nZXQoc2Vzc2lvbktleSlcbiAgICB9XG5cbiAgICBzZXQgKHNlc3Npb25LZXksIHNlc3Npb24pIHtcbiAgICAgIGlmICh0aGlzLl9tYXhDYWNoZWRTZXNzaW9ucyA9PT0gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXMuX3Nlc3Npb25DYWNoZS5zaXplID49IHRoaXMuX21heENhY2hlZFNlc3Npb25zKSB7XG4gICAgICAgIC8vIHJlbW92ZSB0aGUgb2xkZXN0IHNlc3Npb25cbiAgICAgICAgY29uc3QgeyB2YWx1ZTogb2xkZXN0S2V5IH0gPSB0aGlzLl9zZXNzaW9uQ2FjaGUua2V5cygpLm5leHQoKVxuICAgICAgICB0aGlzLl9zZXNzaW9uQ2FjaGUuZGVsZXRlKG9sZGVzdEtleSlcbiAgICAgIH1cblxuICAgICAgdGhpcy5fc2Vzc2lvbkNhY2hlLnNldChzZXNzaW9uS2V5LCBzZXNzaW9uKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBidWlsZENvbm5lY3RvciAoeyBhbGxvd0gyLCBtYXhDYWNoZWRTZXNzaW9ucywgc29ja2V0UGF0aCwgdGltZW91dCwgLi4ub3B0cyB9KSB7XG4gIGlmIChtYXhDYWNoZWRTZXNzaW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhDYWNoZWRTZXNzaW9ucykgfHwgbWF4Q2FjaGVkU2Vzc2lvbnMgPCAwKSkge1xuICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4Q2FjaGVkU2Vzc2lvbnMgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgb3IgemVybycpXG4gIH1cblxuICBjb25zdCBvcHRpb25zID0geyBwYXRoOiBzb2NrZXRQYXRoLCAuLi5vcHRzIH1cbiAgY29uc3Qgc2Vzc2lvbkNhY2hlID0gbmV3IFNlc3Npb25DYWNoZShtYXhDYWNoZWRTZXNzaW9ucyA9PSBudWxsID8gMTAwIDogbWF4Q2FjaGVkU2Vzc2lvbnMpXG4gIHRpbWVvdXQgPSB0aW1lb3V0ID09IG51bGwgPyAxMGUzIDogdGltZW91dFxuICBhbGxvd0gyID0gYWxsb3dIMiAhPSBudWxsID8gYWxsb3dIMiA6IGZhbHNlXG4gIHJldHVybiBmdW5jdGlvbiBjb25uZWN0ICh7IGhvc3RuYW1lLCBob3N0LCBwcm90b2NvbCwgcG9ydCwgc2VydmVybmFtZSwgbG9jYWxBZGRyZXNzLCBodHRwU29ja2V0IH0sIGNhbGxiYWNrKSB7XG4gICAgbGV0IHNvY2tldFxuICAgIGlmIChwcm90b2NvbCA9PT0gJ2h0dHBzOicpIHtcbiAgICAgIGlmICghdGxzKSB7XG4gICAgICAgIHRscyA9IHJlcXVpcmUoJ3RscycpXG4gICAgICB9XG4gICAgICBzZXJ2ZXJuYW1lID0gc2VydmVybmFtZSB8fCBvcHRpb25zLnNlcnZlcm5hbWUgfHwgdXRpbC5nZXRTZXJ2ZXJOYW1lKGhvc3QpIHx8IG51bGxcblxuICAgICAgY29uc3Qgc2Vzc2lvbktleSA9IHNlcnZlcm5hbWUgfHwgaG9zdG5hbWVcbiAgICAgIGNvbnN0IHNlc3Npb24gPSBzZXNzaW9uQ2FjaGUuZ2V0KHNlc3Npb25LZXkpIHx8IG51bGxcblxuICAgICAgYXNzZXJ0KHNlc3Npb25LZXkpXG5cbiAgICAgIHNvY2tldCA9IHRscy5jb25uZWN0KHtcbiAgICAgICAgaGlnaFdhdGVyTWFyazogMTYzODQsIC8vIFRMUyBpbiBub2RlIGNhbid0IGhhdmUgYmlnZ2VyIEhXTSBhbnl3YXkuLi5cbiAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgc2VydmVybmFtZSxcbiAgICAgICAgc2Vzc2lvbixcbiAgICAgICAgbG9jYWxBZGRyZXNzLFxuICAgICAgICAvLyBUT0RPKEhUVFAvMik6IEFkZCBzdXBwb3J0IGZvciBoMmNcbiAgICAgICAgQUxQTlByb3RvY29sczogYWxsb3dIMiA/IFsnaHR0cC8xLjEnLCAnaDInXSA6IFsnaHR0cC8xLjEnXSxcbiAgICAgICAgc29ja2V0OiBodHRwU29ja2V0LCAvLyB1cGdyYWRlIHNvY2tldCBjb25uZWN0aW9uXG4gICAgICAgIHBvcnQ6IHBvcnQgfHwgNDQzLFxuICAgICAgICBob3N0OiBob3N0bmFtZVxuICAgICAgfSlcblxuICAgICAgc29ja2V0XG4gICAgICAgIC5vbignc2Vzc2lvbicsIGZ1bmN0aW9uIChzZXNzaW9uKSB7XG4gICAgICAgICAgLy8gVE9ETyAoZml4KTogQ2FuIGEgc2Vzc2lvbiBiZWNvbWUgaW52YWxpZCBvbmNlIGVzdGFibGlzaGVkPyBEb24ndCB0aGluayBzbz9cbiAgICAgICAgICBzZXNzaW9uQ2FjaGUuc2V0KHNlc3Npb25LZXksIHNlc3Npb24pXG4gICAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydCghaHR0cFNvY2tldCwgJ2h0dHBTb2NrZXQgY2FuIG9ubHkgYmUgc2VudCBvbiBUTFMgdXBkYXRlJylcbiAgICAgIHNvY2tldCA9IG5ldC5jb25uZWN0KHtcbiAgICAgICAgaGlnaFdhdGVyTWFyazogNjQgKiAxMDI0LCAvLyBTYW1lIGFzIG5vZGVqcyBmcyBzdHJlYW1zLlxuICAgICAgICAuLi5vcHRpb25zLFxuICAgICAgICBsb2NhbEFkZHJlc3MsXG4gICAgICAgIHBvcnQ6IHBvcnQgfHwgODAsXG4gICAgICAgIGhvc3Q6IGhvc3RuYW1lXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIFNldCBUQ1Aga2VlcCBhbGl2ZSBvcHRpb25zIG9uIHRoZSBzb2NrZXQgaGVyZSBpbnN0ZWFkIG9mIGluIGNvbm5lY3QoKSBmb3IgdGhlIGNhc2Ugb2YgYXNzaWduaW5nIHRoZSBzb2NrZXRcbiAgICBpZiAob3B0aW9ucy5rZWVwQWxpdmUgPT0gbnVsbCB8fCBvcHRpb25zLmtlZXBBbGl2ZSkge1xuICAgICAgY29uc3Qga2VlcEFsaXZlSW5pdGlhbERlbGF5ID0gb3B0aW9ucy5rZWVwQWxpdmVJbml0aWFsRGVsYXkgPT09IHVuZGVmaW5lZCA/IDYwZTMgOiBvcHRpb25zLmtlZXBBbGl2ZUluaXRpYWxEZWxheVxuICAgICAgc29ja2V0LnNldEtlZXBBbGl2ZSh0cnVlLCBrZWVwQWxpdmVJbml0aWFsRGVsYXkpXG4gICAgfVxuXG4gICAgY29uc3QgY2FuY2VsVGltZW91dCA9IHNldHVwVGltZW91dCgoKSA9PiBvbkNvbm5lY3RUaW1lb3V0KHNvY2tldCksIHRpbWVvdXQpXG5cbiAgICBzb2NrZXRcbiAgICAgIC5zZXROb0RlbGF5KHRydWUpXG4gICAgICAub25jZShwcm90b2NvbCA9PT0gJ2h0dHBzOicgPyAnc2VjdXJlQ29ubmVjdCcgOiAnY29ubmVjdCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgY2FuY2VsVGltZW91dCgpXG5cbiAgICAgICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICAgICAgY29uc3QgY2IgPSBjYWxsYmFja1xuICAgICAgICAgIGNhbGxiYWNrID0gbnVsbFxuICAgICAgICAgIGNiKG51bGwsIHRoaXMpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAub24oJ2Vycm9yJywgZnVuY3Rpb24gKGVycikge1xuICAgICAgICBjYW5jZWxUaW1lb3V0KClcblxuICAgICAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgICAgICBjb25zdCBjYiA9IGNhbGxiYWNrXG4gICAgICAgICAgY2FsbGJhY2sgPSBudWxsXG4gICAgICAgICAgY2IoZXJyKVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgcmV0dXJuIHNvY2tldFxuICB9XG59XG5cbmZ1bmN0aW9uIHNldHVwVGltZW91dCAob25Db25uZWN0VGltZW91dCwgdGltZW91dCkge1xuICBpZiAoIXRpbWVvdXQpIHtcbiAgICByZXR1cm4gKCkgPT4ge31cbiAgfVxuXG4gIGxldCBzMSA9IG51bGxcbiAgbGV0IHMyID0gbnVsbFxuICBjb25zdCB0aW1lb3V0SWQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAvLyBzZXRJbW1lZGlhdGUgaXMgYWRkZWQgdG8gbWFrZSBzdXJlIHRoYXQgd2UgcHJpb3RvcmlzZSBzb2NrZXQgZXJyb3IgZXZlbnRzIG92ZXIgdGltZW91dHNcbiAgICBzMSA9IHNldEltbWVkaWF0ZSgoKSA9PiB7XG4gICAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gJ3dpbjMyJykge1xuICAgICAgICAvLyBXaW5kb3dzIG5lZWRzIGFuIGV4dHJhIHNldEltbWVkaWF0ZSBwcm9iYWJseSBkdWUgdG8gaW1wbGVtZW50YXRpb24gZGlmZmVyZW5jZXMgaW4gdGhlIHNvY2tldCBsb2dpY1xuICAgICAgICBzMiA9IHNldEltbWVkaWF0ZSgoKSA9PiBvbkNvbm5lY3RUaW1lb3V0KCkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvbkNvbm5lY3RUaW1lb3V0KClcbiAgICAgIH1cbiAgICB9KVxuICB9LCB0aW1lb3V0KVxuICByZXR1cm4gKCkgPT4ge1xuICAgIGNsZWFyVGltZW91dCh0aW1lb3V0SWQpXG4gICAgY2xlYXJJbW1lZGlhdGUoczEpXG4gICAgY2xlYXJJbW1lZGlhdGUoczIpXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Db25uZWN0VGltZW91dCAoc29ja2V0KSB7XG4gIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBDb25uZWN0VGltZW91dEVycm9yKCkpXG59XG5cbm1vZHVsZS5leHBvcnRzID0gYnVpbGRDb25uZWN0b3JcbiIsIG51bGwsIG51bGwsICIndXNlIHN0cmljdCdcblxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IGtCb2R5VXNlZCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCBFRSA9IHJlcXVpcmUoJ2V2ZW50cycpXG5cbmNvbnN0IHJlZGlyZWN0YWJsZVN0YXR1c0NvZGVzID0gWzMwMCwgMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdXG5cbmNvbnN0IGtCb2R5ID0gU3ltYm9sKCdib2R5JylcblxuY2xhc3MgQm9keUFzeW5jSXRlcmFibGUge1xuICBjb25zdHJ1Y3RvciAoYm9keSkge1xuICAgIHRoaXNba0JvZHldID0gYm9keVxuICAgIHRoaXNba0JvZHlVc2VkXSA9IGZhbHNlXG4gIH1cblxuICBhc3luYyAqIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0gKCkge1xuICAgIGFzc2VydCghdGhpc1trQm9keVVzZWRdLCAnZGlzdHVyYmVkJylcbiAgICB0aGlzW2tCb2R5VXNlZF0gPSB0cnVlXG4gICAgeWllbGQgKiB0aGlzW2tCb2R5XVxuICB9XG59XG5cbmNsYXNzIFJlZGlyZWN0SGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yIChkaXNwYXRjaCwgbWF4UmVkaXJlY3Rpb25zLCBvcHRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKG1heFJlZGlyZWN0aW9ucyAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZWRpcmVjdGlvbnMpIHx8IG1heFJlZGlyZWN0aW9ucyA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlZGlyZWN0aW9ucyBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICB1dGlsLnZhbGlkYXRlSGFuZGxlcihoYW5kbGVyLCBvcHRzLm1ldGhvZCwgb3B0cy51cGdyYWRlKVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGRpc3BhdGNoXG4gICAgdGhpcy5sb2NhdGlvbiA9IG51bGxcbiAgICB0aGlzLmFib3J0ID0gbnVsbFxuICAgIHRoaXMub3B0cyA9IHsgLi4ub3B0cywgbWF4UmVkaXJlY3Rpb25zOiAwIH0gLy8gb3B0cyBtdXN0IGJlIGEgY29weVxuICAgIHRoaXMubWF4UmVkaXJlY3Rpb25zID0gbWF4UmVkaXJlY3Rpb25zXG4gICAgdGhpcy5oYW5kbGVyID0gaGFuZGxlclxuICAgIHRoaXMuaGlzdG9yeSA9IFtdXG5cbiAgICBpZiAodXRpbC5pc1N0cmVhbSh0aGlzLm9wdHMuYm9keSkpIHtcbiAgICAgIC8vIFRPRE8gKGZpeCk6IFByb3ZpZGUgc29tZSB3YXkgZm9yIHRoZSB1c2VyIHRvIGNhY2hlIHRoZSBmaWxlIHRvIGUuZy4gL3RtcFxuICAgICAgLy8gc28gdGhhdCBpdCBjYW4gYmUgZGlzcGF0Y2hlZCBhZ2Fpbj9cbiAgICAgIC8vIFRPRE8gKGZpeCk6IERvIHdlIG5lZWQgMTAwLWV4cGVjdCBzdXBwb3J0IHRvIHByb3ZpZGUgYSB3YXkgdG8gZG8gdGhpcyBwcm9wZXJseT9cbiAgICAgIGlmICh1dGlsLmJvZHlMZW5ndGgodGhpcy5vcHRzLmJvZHkpID09PSAwKSB7XG4gICAgICAgIHRoaXMub3B0cy5ib2R5XG4gICAgICAgICAgLm9uKCdkYXRhJywgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgYXNzZXJ0KGZhbHNlKVxuICAgICAgICAgIH0pXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgdGhpcy5vcHRzLmJvZHkucmVhZGFibGVEaWRSZWFkICE9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgdGhpcy5vcHRzLmJvZHlba0JvZHlVc2VkXSA9IGZhbHNlXG4gICAgICAgIEVFLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMub3B0cy5ib2R5LCAnZGF0YScsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICB0aGlzW2tCb2R5VXNlZF0gPSB0cnVlXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh0aGlzLm9wdHMuYm9keSAmJiB0eXBlb2YgdGhpcy5vcHRzLmJvZHkucGlwZVRvID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBUT0RPIChmaXgpOiBXZSBjYW4ndCBhY2Nlc3MgUmVhZGFibGVTdHJlYW0gaW50ZXJuYWwgc3RhdGVcbiAgICAgIC8vIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCBpdCBoYXMgYmVlbiBkaXN0dXJiZWQuIFRoaXMgaXMganVzdFxuICAgICAgLy8gYSB3b3JrYXJvdW5kLlxuICAgICAgdGhpcy5vcHRzLmJvZHkgPSBuZXcgQm9keUFzeW5jSXRlcmFibGUodGhpcy5vcHRzLmJvZHkpXG4gICAgfSBlbHNlIGlmIChcbiAgICAgIHRoaXMub3B0cy5ib2R5ICYmXG4gICAgICB0eXBlb2YgdGhpcy5vcHRzLmJvZHkgIT09ICdzdHJpbmcnICYmXG4gICAgICAhQXJyYXlCdWZmZXIuaXNWaWV3KHRoaXMub3B0cy5ib2R5KSAmJlxuICAgICAgdXRpbC5pc0l0ZXJhYmxlKHRoaXMub3B0cy5ib2R5KVxuICAgICkge1xuICAgICAgLy8gVE9ETzogU2hvdWxkIHdlIGFsbG93IHJlLXVzaW5nIGl0ZXJhYmxlIGlmICF0aGlzLm9wdHMuaWRlbXBvdGVudFxuICAgICAgLy8gb3IgdGhyb3VnaCBzb21lIG90aGVyIGZsYWc/XG4gICAgICB0aGlzLm9wdHMuYm9keSA9IG5ldyBCb2R5QXN5bmNJdGVyYWJsZSh0aGlzLm9wdHMuYm9keSlcbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5oYW5kbGVyLm9uQ29ubmVjdChhYm9ydCwgeyBoaXN0b3J5OiB0aGlzLmhpc3RvcnkgfSlcbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgaGVhZGVycywgc29ja2V0KSB7XG4gICAgdGhpcy5oYW5kbGVyLm9uVXBncmFkZShzdGF0dXNDb2RlLCBoZWFkZXJzLCBzb2NrZXQpXG4gIH1cblxuICBvbkVycm9yIChlcnJvcikge1xuICAgIHRoaXMuaGFuZGxlci5vbkVycm9yKGVycm9yKVxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCBoZWFkZXJzLCByZXN1bWUsIHN0YXR1c1RleHQpIHtcbiAgICB0aGlzLmxvY2F0aW9uID0gdGhpcy5oaXN0b3J5Lmxlbmd0aCA+PSB0aGlzLm1heFJlZGlyZWN0aW9ucyB8fCB1dGlsLmlzRGlzdHVyYmVkKHRoaXMub3B0cy5ib2R5KVxuICAgICAgPyBudWxsXG4gICAgICA6IHBhcnNlTG9jYXRpb24oc3RhdHVzQ29kZSwgaGVhZGVycylcblxuICAgIGlmICh0aGlzLm9wdHMub3JpZ2luKSB7XG4gICAgICB0aGlzLmhpc3RvcnkucHVzaChuZXcgVVJMKHRoaXMub3B0cy5wYXRoLCB0aGlzLm9wdHMub3JpZ2luKSlcbiAgICB9XG5cbiAgICBpZiAoIXRoaXMubG9jYXRpb24pIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25IZWFkZXJzKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHJlc3VtZSwgc3RhdHVzVGV4dClcbiAgICB9XG5cbiAgICBjb25zdCB7IG9yaWdpbiwgcGF0aG5hbWUsIHNlYXJjaCB9ID0gdXRpbC5wYXJzZVVSTChuZXcgVVJMKHRoaXMubG9jYXRpb24sIHRoaXMub3B0cy5vcmlnaW4gJiYgbmV3IFVSTCh0aGlzLm9wdHMucGF0aCwgdGhpcy5vcHRzLm9yaWdpbikpKVxuICAgIGNvbnN0IHBhdGggPSBzZWFyY2ggPyBgJHtwYXRobmFtZX0ke3NlYXJjaH1gIDogcGF0aG5hbWVcblxuICAgIC8vIFJlbW92ZSBoZWFkZXJzIHJlZmVycmluZyB0byB0aGUgb3JpZ2luYWwgVVJMLlxuICAgIC8vIEJ5IGRlZmF1bHQgaXQgaXMgSG9zdCBvbmx5LCB1bmxlc3MgaXQncyBhIDMwMyAoc2VlIGJlbG93KSwgd2hpY2ggcmVtb3ZlcyBhbHNvIGFsbCBDb250ZW50LSogaGVhZGVycy5cbiAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNFxuICAgIHRoaXMub3B0cy5oZWFkZXJzID0gY2xlYW5SZXF1ZXN0SGVhZGVycyh0aGlzLm9wdHMuaGVhZGVycywgc3RhdHVzQ29kZSA9PT0gMzAzLCB0aGlzLm9wdHMub3JpZ2luICE9PSBvcmlnaW4pXG4gICAgdGhpcy5vcHRzLnBhdGggPSBwYXRoXG4gICAgdGhpcy5vcHRzLm9yaWdpbiA9IG9yaWdpblxuICAgIHRoaXMub3B0cy5tYXhSZWRpcmVjdGlvbnMgPSAwXG4gICAgdGhpcy5vcHRzLnF1ZXJ5ID0gbnVsbFxuXG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi02LjQuNFxuICAgIC8vIEluIGNhc2Ugb2YgSFRUUCAzMDMsIGFsd2F5cyByZXBsYWNlIG1ldGhvZCB0byBiZSBlaXRoZXIgSEVBRCBvciBHRVRcbiAgICBpZiAoc3RhdHVzQ29kZSA9PT0gMzAzICYmIHRoaXMub3B0cy5tZXRob2QgIT09ICdIRUFEJykge1xuICAgICAgdGhpcy5vcHRzLm1ldGhvZCA9ICdHRVQnXG4gICAgICB0aGlzLm9wdHMuYm9keSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgaWYgKHRoaXMubG9jYXRpb24pIHtcbiAgICAgIC8qXG4gICAgICAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40XG5cbiAgICAgICAgVExEUjogdW5kaWNpIGFsd2F5cyBpZ25vcmVzIDN4eCByZXNwb25zZSBib2RpZXMuXG5cbiAgICAgICAgUmVkaXJlY3Rpb24gaXMgdXNlZCB0byBzZXJ2ZSB0aGUgcmVxdWVzdGVkIHJlc291cmNlIGZyb20gYW5vdGhlciBVUkwsIHNvIGl0IGlzIGFzc3VtZXMgdGhhdFxuICAgICAgICBubyBib2R5IGlzIGdlbmVyYXRlZCAoYW5kIHRodXMgY2FuIGJlIGlnbm9yZWQpLiBFdmVuIHRob3VnaCBnZW5lcmF0aW5nIGEgYm9keSBpcyBub3QgcHJvaGliaXRlZC5cblxuICAgICAgICBGb3Igc3RhdHVzIDMwMSwgMzAyLCAzMDMsIDMwNyBhbmQgMzA4ICh0aGUgbGF0dGVyIGZyb20gUkZDIDcyMzgpLCB0aGUgc3BlY3MgbWVudGlvbiB0aGF0IHRoZSBib2R5IHVzdWFsbHlcbiAgICAgICAgKHdoaWNoIG1lYW5zIGl0J3Mgb3B0aW9uYWwgYW5kIG5vdCBtYW5kYXRlZCkgY29udGFpbiBqdXN0IGFuIGh5cGVybGluayB0byB0aGUgdmFsdWUgb2ZcbiAgICAgICAgdGhlIExvY2F0aW9uIHJlc3BvbnNlIGhlYWRlciwgc28gdGhlIGJvZHkgY2FuIGJlIGlnbm9yZWQgc2FmZWx5LlxuXG4gICAgICAgIEZvciBzdGF0dXMgMzAwLCB3aGljaCBpcyBcIk11bHRpcGxlIENob2ljZXNcIiwgdGhlIHNwZWMgbWVudGlvbnMgYm90aCBnZW5lcmF0aW5nIGEgTG9jYXRpb25cbiAgICAgICAgcmVzcG9uc2UgaGVhZGVyIEFORCBhIHJlc3BvbnNlIGJvZHkgd2l0aCB0aGUgb3RoZXIgcG9zc2libGUgbG9jYXRpb24gdG8gZm9sbG93LlxuICAgICAgICBTaW5jZSB0aGUgc3BlYyBleHBsaWNpdGlseSBjaG9vc2VzIG5vdCB0byBzcGVjaWZ5IGEgZm9ybWF0IGZvciBzdWNoIGJvZHkgYW5kIGxlYXZlIGl0IHRvXG4gICAgICAgIHNlcnZlcnMgYW5kIGJyb3dzZXJzIGltcGxlbWVudG9ycywgd2UgaWdub3JlIHRoZSBib2R5IGFzIHRoZXJlIGlzIG5vIHNwZWNpZmllZCB3YXkgdG8gZXZlbnR1YWxseSBwYXJzZSBpdC5cbiAgICAgICovXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25EYXRhKGNodW5rKVxuICAgIH1cbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgaWYgKHRoaXMubG9jYXRpb24pIHtcbiAgICAgIC8qXG4gICAgICAgIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40XG5cbiAgICAgICAgVExEUjogdW5kaWNpIGFsd2F5cyBpZ25vcmVzIDN4eCByZXNwb25zZSB0cmFpbGVycyBhcyB0aGV5IGFyZSBub3QgZXhwZWN0ZWQgaW4gY2FzZSBvZiByZWRpcmVjdGlvbnNcbiAgICAgICAgYW5kIG5laXRoZXIgYXJlIHVzZWZ1bCBpZiBwcmVzZW50LlxuXG4gICAgICAgIFNlZSBjb21tZW50IG9uIG9uRGF0YSBtZXRob2QgYWJvdmUgZm9yIG1vcmUgZGV0YWlsZWQgaW5mb3JtYXRpb25zLlxuICAgICAgKi9cblxuICAgICAgdGhpcy5sb2NhdGlvbiA9IG51bGxcbiAgICAgIHRoaXMuYWJvcnQgPSBudWxsXG5cbiAgICAgIHRoaXMuZGlzcGF0Y2godGhpcy5vcHRzLCB0aGlzKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmhhbmRsZXIub25Db21wbGV0ZSh0cmFpbGVycylcbiAgICB9XG4gIH1cblxuICBvbkJvZHlTZW50IChjaHVuaykge1xuICAgIGlmICh0aGlzLmhhbmRsZXIub25Cb2R5U2VudCkge1xuICAgICAgdGhpcy5oYW5kbGVyLm9uQm9keVNlbnQoY2h1bmspXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHBhcnNlTG9jYXRpb24gKHN0YXR1c0NvZGUsIGhlYWRlcnMpIHtcbiAgaWYgKHJlZGlyZWN0YWJsZVN0YXR1c0NvZGVzLmluZGV4T2Yoc3RhdHVzQ29kZSkgPT09IC0xKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgIGlmIChoZWFkZXJzW2ldLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2xvY2F0aW9uJykge1xuICAgICAgcmV0dXJuIGhlYWRlcnNbaSArIDFdXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNi40LjRcbmZ1bmN0aW9uIHNob3VsZFJlbW92ZUhlYWRlciAoaGVhZGVyLCByZW1vdmVDb250ZW50LCB1bmtub3duT3JpZ2luKSB7XG4gIGlmIChoZWFkZXIubGVuZ3RoID09PSA0KSB7XG4gICAgcmV0dXJuIHV0aWwuaGVhZGVyTmFtZVRvU3RyaW5nKGhlYWRlcikgPT09ICdob3N0J1xuICB9XG4gIGlmIChyZW1vdmVDb250ZW50ICYmIHV0aWwuaGVhZGVyTmFtZVRvU3RyaW5nKGhlYWRlcikuc3RhcnRzV2l0aCgnY29udGVudC0nKSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cbiAgaWYgKHVua25vd25PcmlnaW4gJiYgKGhlYWRlci5sZW5ndGggPT09IDEzIHx8IGhlYWRlci5sZW5ndGggPT09IDYgfHwgaGVhZGVyLmxlbmd0aCA9PT0gMTkpKSB7XG4gICAgY29uc3QgbmFtZSA9IHV0aWwuaGVhZGVyTmFtZVRvU3RyaW5nKGhlYWRlcilcbiAgICByZXR1cm4gbmFtZSA9PT0gJ2F1dGhvcml6YXRpb24nIHx8IG5hbWUgPT09ICdjb29raWUnIHx8IG5hbWUgPT09ICdwcm94eS1hdXRob3JpemF0aW9uJ1xuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG4vLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTYuNFxuZnVuY3Rpb24gY2xlYW5SZXF1ZXN0SGVhZGVycyAoaGVhZGVycywgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikge1xuICBjb25zdCByZXQgPSBbXVxuICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaGVhZGVycy5sZW5ndGg7IGkgKz0gMikge1xuICAgICAgaWYgKCFzaG91bGRSZW1vdmVIZWFkZXIoaGVhZGVyc1tpXSwgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikpIHtcbiAgICAgICAgcmV0LnB1c2goaGVhZGVyc1tpXSwgaGVhZGVyc1tpICsgMV0pXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2UgaWYgKGhlYWRlcnMgJiYgdHlwZW9mIGhlYWRlcnMgPT09ICdvYmplY3QnKSB7XG4gICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMoaGVhZGVycykpIHtcbiAgICAgIGlmICghc2hvdWxkUmVtb3ZlSGVhZGVyKGtleSwgcmVtb3ZlQ29udGVudCwgdW5rbm93bk9yaWdpbikpIHtcbiAgICAgICAgcmV0LnB1c2goa2V5LCBoZWFkZXJzW2tleV0pXG4gICAgICB9XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGFzc2VydChoZWFkZXJzID09IG51bGwsICdoZWFkZXJzIG11c3QgYmUgYW4gb2JqZWN0IG9yIGFuIGFycmF5JylcbiAgfVxuICByZXR1cm4gcmV0XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUmVkaXJlY3RIYW5kbGVyXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IFJlZGlyZWN0SGFuZGxlciA9IHJlcXVpcmUoJy4uL2hhbmRsZXIvUmVkaXJlY3RIYW5kbGVyJylcblxuZnVuY3Rpb24gY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvciAoeyBtYXhSZWRpcmVjdGlvbnM6IGRlZmF1bHRNYXhSZWRpcmVjdGlvbnMgfSkge1xuICByZXR1cm4gKGRpc3BhdGNoKSA9PiB7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIEludGVyY2VwdCAob3B0cywgaGFuZGxlcikge1xuICAgICAgY29uc3QgeyBtYXhSZWRpcmVjdGlvbnMgPSBkZWZhdWx0TWF4UmVkaXJlY3Rpb25zIH0gPSBvcHRzXG5cbiAgICAgIGlmICghbWF4UmVkaXJlY3Rpb25zKSB7XG4gICAgICAgIHJldHVybiBkaXNwYXRjaChvcHRzLCBoYW5kbGVyKVxuICAgICAgfVxuXG4gICAgICBjb25zdCByZWRpcmVjdEhhbmRsZXIgPSBuZXcgUmVkaXJlY3RIYW5kbGVyKGRpc3BhdGNoLCBtYXhSZWRpcmVjdGlvbnMsIG9wdHMsIGhhbmRsZXIpXG4gICAgICBvcHRzID0geyAuLi5vcHRzLCBtYXhSZWRpcmVjdGlvbnM6IDAgfSAvLyBTdG9wIHN1YiBkaXNwYXRjaGVyIGZyb20gYWxzbyByZWRpcmVjdGluZy5cbiAgICAgIHJldHVybiBkaXNwYXRjaChvcHRzLCByZWRpcmVjdEhhbmRsZXIpXG4gICAgfVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvclxuIiwgIm1vZHVsZS5leHBvcnRzID0gJ0FHRnpiUUVBQUFBQk1BaGdBWDhCZjJBRGYzOS9BWDlnQkg5L2YzOEJmMkFBQUdBRGYzOS9BR0FCZndCZ0FuOS9BR0FHZjM5L2YzOS9BQUxMQVFnRFpXNTJHSGRoYzIxZmIyNWZhR1ZoWkdWeWMxOWpiMjF3YkdWMFpRQUNBMlZ1ZGhWM1lYTnRYMjl1WDIxbGMzTmhaMlZmWW1WbmFXNEFBQU5sYm5ZTGQyRnpiVjl2Ymw5MWNtd0FBUU5sYm5ZT2QyRnpiVjl2Ymw5emRHRjBkWE1BQVFObGJuWVVkMkZ6YlY5dmJsOW9aV0ZrWlhKZlptbGxiR1FBQVFObGJuWVVkMkZ6YlY5dmJsOW9aV0ZrWlhKZmRtRnNkV1VBQVFObGJuWU1kMkZ6YlY5dmJsOWliMlI1QUFFRFpXNTJHSGRoYzIxZmIyNWZiV1Z6YzJGblpWOWpiMjF3YkdWMFpRQUFBMFpGQXdNRUFBQUZBQUFBQUFBQUJRRUZBQVVGQlFBQUJnQUFBQUFHQmdZR0FRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQkFBQUJBUWNBQUFVRkF3QUJCQVVCY0FFU0VnVURBUUFDQmdnQmZ3RkJnTlFFQ3dmUkJTSUdiV1Z0YjNKNUFnQUxYMmx1YVhScFlXeHBlbVVBQ1JsZlgybHVaR2x5WldOMFgyWjFibU4wYVc5dVgzUmhZbXhsQVFBTGJHeG9kSFJ3WDJsdWFYUUFDaGhzYkdoMGRIQmZjMmh2ZFd4a1gydGxaWEJmWVd4cGRtVUFRUXhzYkdoMGRIQmZZV3hzYjJNQURBWnRZV3hzYjJNQVJndHNiR2gwZEhCZlpuSmxaUUFOQkdaeVpXVUFTQTlzYkdoMGRIQmZaMlYwWDNSNWNHVUFEaFZzYkdoMGRIQmZaMlYwWDJoMGRIQmZiV0ZxYjNJQUR4VnNiR2gwZEhCZloyVjBYMmgwZEhCZmJXbHViM0lBRUJGc2JHaDBkSEJmWjJWMFgyMWxkR2h2WkFBUkZteHNhSFIwY0Y5blpYUmZjM1JoZEhWelgyTnZaR1VBRWhKc2JHaDBkSEJmWjJWMFgzVndaM0poWkdVQUV3eHNiR2gwZEhCZmNtVnpaWFFBRkE1c2JHaDBkSEJmWlhobFkzVjBaUUFWRkd4c2FIUjBjRjl6WlhSMGFXNW5jMTlwYm1sMEFCWU5iR3hvZEhSd1gyWnBibWx6YUFBWERHeHNhSFIwY0Y5d1lYVnpaUUFZRFd4c2FIUjBjRjl5WlhOMWJXVUFHUnRzYkdoMGRIQmZjbVZ6ZFcxbFgyRm1kR1Z5WDNWd1ozSmhaR1VBR2hCc2JHaDBkSEJmWjJWMFgyVnljbTV2QUJzWGJHeG9kSFJ3WDJkbGRGOWxjbkp2Y2w5eVpXRnpiMjRBSEJkc2JHaDBkSEJmYzJWMFgyVnljbTl5WDNKbFlYTnZiZ0FkRkd4c2FIUjBjRjluWlhSZlpYSnliM0pmY0c5ekFCNFJiR3hvZEhSd1gyVnljbTV2WDI1aGJXVUFIeEpzYkdoMGRIQmZiV1YwYUc5a1gyNWhiV1VBSUJKc2JHaDBkSEJmYzNSaGRIVnpYMjVoYldVQUlScHNiR2gwZEhCZmMyVjBYMnhsYm1sbGJuUmZhR1ZoWkdWeWN3QWlJV3hzYUhSMGNGOXpaWFJmYkdWdWFXVnVkRjlqYUhWdWEyVmtYMnhsYm1kMGFBQWpIV3hzYUhSMGNGOXpaWFJmYkdWdWFXVnVkRjlyWldWd1gyRnNhWFpsQUNRa2JHeG9kSFJ3WDNObGRGOXNaVzVwWlc1MFgzUnlZVzV6Wm1WeVgyVnVZMjlrYVc1bkFDVVliR3hvZEhSd1gyMWxjM05oWjJWZmJtVmxaSE5mWlc5bUFEOEpGd0VBUVFFTEVRRUNBd1FGQ3dZSE5UazNNUzh0SnlzcENzTGdBa1VDQUFzSUFCQ0lnSUNBQUFzWkFDQUFFTUtBZ0lBQUdpQUFJQUkyQWpnZ0FDQUJPZ0FvQ3h3QUlBQWdBQzhCTWlBQUxRQXVJQUFRd1lDQWdBQVFnSUNBZ0FBTEtnRUJmMEhBQUJER2dJQ0FBQ0lCRU1LQWdJQUFHaUFCUVlDSWdJQUFOZ0k0SUFFZ0FEb0FLQ0FCQ3dvQUlBQVF5SUNBZ0FBTEJ3QWdBQzBBS0FzSEFDQUFMUUFxQ3djQUlBQXRBQ3NMQndBZ0FDMEFLUXNIQUNBQUx3RXlDd2NBSUFBdEFDNExSUUVFZnlBQUtBSVlJUUVnQUMwQUxTRUNJQUF0QUNnaEF5QUFLQUk0SVFRZ0FCRENnSUNBQUJvZ0FDQUVOZ0k0SUFBZ0F6b0FLQ0FBSUFJNkFDMGdBQ0FCTmdJWUN4RUFJQUFnQVNBQklBSnFFTU9BZ0lBQUN4QUFJQUJCQUVIY0FCRE1nSUNBQUJvTFp3RUJmMEVBSVFFQ1FDQUFLQUlNRFFBQ1FBSkFBa0FDUUNBQUxRQXZEZ01CQUFNQ0N5QUFLQUk0SWdGRkRRQWdBU2dDTENJQlJRMEFJQUFnQVJHQWdJQ0FBQUFpQVEwREMwRUFEd3NReW9DQWdBQUFDeUFBUWNPV2dJQUFOZ0lRUVE0aEFRc2dBUXNlQUFKQUlBQW9BZ3dOQUNBQVFkR2JnSUFBTmdJUUlBQkJGVFlDREFzTEZnQUNRQ0FBS0FJTVFSVkhEUUFnQUVFQU5nSU1Dd3NXQUFKQUlBQW9BZ3hCRmtjTkFDQUFRUUEyQWd3TEN3Y0FJQUFvQWd3TEJ3QWdBQ2dDRUFzSkFDQUFJQUUyQWhBTEJ3QWdBQ2dDRkFzaUFBSkFJQUJCSkVrTkFCREtnSUNBQUFBTElBQkJBblJCb0xPQWdBQnFLQUlBQ3lJQUFrQWdBRUV1U1EwQUVNcUFnSUFBQUFzZ0FFRUNkRUd3dElDQUFHb29BZ0FMN2dzQkFYOUI2NmlBZ0FBaEFRSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUJCbkg5cUR2UURZMklBQVdGaFlXRmhZUUlEQkFWaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhCZ2NJQ1FvTERBME9EMkZoWVdGaEVHRmhZV0ZoWVdGaFlXRmhFV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZUklURkJVV0Z4Z1pHaHRoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoSEIwZUh5QWhJaU1rSlNZbktDa3FLeXd0TGk4d01USXpORFUyWVRjNE9UcGhZV0ZoWVdGaFlUdGhZV0U4WVdGaFlUMCtQMkZoWVdGaFlXRmhRR0ZoUVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlVSkRSRVZHUjBoSlNrdE1UVTVQVUZGU1UyRmhZV0ZoWVdGaFZGVldWMWhaV2x0aFhGMWhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZlWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWDJCaEMwSGhwNENBQUE4TFFhU2hnSUFBRHd0Qnk2eUFnQUFQQzBIK3NZQ0FBQThMUWNDa2dJQUFEd3RCcTZTQWdBQVBDMEdOcUlDQUFBOExRZUttZ0lBQUR3dEJnTENBZ0FBUEMwRzVyNENBQUE4TFFkZWtnSUFBRHd0Qjc1K0FnQUFQQzBIaG40Q0FBQThMUWZxZmdJQUFEd3RCOHFDQWdBQVBDMEdvcjRDQUFBOExRYTZ5Z0lBQUR3dEJpTENBZ0FBUEMwSHNwNENBQUE4TFFZS2lnSUFBRHd0QmpwMkFnQUFQQzBIUXJvQ0FBQThMUWNxamdJQUFEd3RCeGJLQWdBQVBDMEhmbklDQUFBOExRZEtjZ0lBQUR3dEJ4S0NBZ0FBUEMwSFhvSUNBQUE4TFFhS2ZnSUFBRHd0QjdhNkFnQUFQQzBHcnNJQ0FBQThMUWRTbGdJQUFEd3RCeks2QWdBQVBDMEg2cm9DQUFBOExRZnlyZ0lBQUR3dEIwckNBZ0FBUEMwSHhuWUNBQUE4TFFidWdnSUFBRHd0Qjk2dUFnQUFQQzBHUXNZQ0FBQThMUWRleGdJQUFEd3RCb3EyQWdBQVBDMEhVcDRDQUFBOExRZUNyZ0lBQUR3dEJuNnlBZ0FBUEMwSHJzWUNBQUE4TFFkV2ZnSUFBRHd0QnlyR0FnQUFQQzBIZXBZQ0FBQThMUWRTZWdJQUFEd3RCOUp5QWdBQVBDMEduc29DQUFBOExRYkdkZ0lBQUR3dEJvSjJBZ0FBUEMwRzVzWUNBQUE4TFFieXdnSUFBRHd0QmtxR0FnQUFQQzBHenBvQ0FBQThMUWVtc2dJQUFEd3RCcko2QWdBQVBDMEhVcTRDQUFBOExRZmVtZ0lBQUR3dEJnS2FBZ0FBUEMwR3dvWUNBQUE4TFFmNmVnSUFBRHd0QmphT0FnQUFQQzBHSnJZQ0FBQThMUWZlaWdJQUFEd3RCb0xHQWdBQVBDMEd1bjRDQUFBOExRY2FsZ0lBQUR3dEI2SjZBZ0FBUEMwR1Rvb0NBQUE4TFFjS3ZnSUFBRHd0Qnc1MkFnQUFQQzBHTHJJQ0FBQThMUWVHZGdJQUFEd3RCamErQWdBQVBDMEhxb1lDQUFBOExRYlN0Z0lBQUR3dEIwcStBZ0FBUEMwSGZzb0NBQUE4TFFkS3lnSUFBRHd0QjhMQ0FnQUFQQzBHcG9vQ0FBQThMUWZtamdJQUFEd3RCbVo2QWdBQVBDMEcxcklDQUFBOExRWnV3Z0lBQUR3dEJrcktBZ0FBUEMwRzJxNENBQUE4TFFjS2lnSUFBRHd0QitMS0FnQUFQQzBHZXBZQ0FBQThMUWRDaWdJQUFEd3RCdXA2QWdBQVBDMEdCbm9DQUFBOExFTXFBZ0lBQUFBdEIxcUdBZ0FBaEFRc2dBUXNXQUNBQUlBQXRBQzFCL2dGeElBRkJBRWR5T2dBdEN4a0FJQUFnQUMwQUxVSDlBWEVnQVVFQVIwRUJkSEk2QUMwTEdRQWdBQ0FBTFFBdFFmc0JjU0FCUVFCSFFRSjBjam9BTFFzWkFDQUFJQUF0QUMxQjl3RnhJQUZCQUVkQkEzUnlPZ0F0Q3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BZ0FpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTFNRRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDQkNJRVJRMEFJQUFnQVNBQ0lBRnJJQVFSZ1lDQWdBQUFJZ05CZjBjTkFDQUFRY2FSZ0lBQU5nSVFRUmdoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJd0lnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDMGtCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FnZ2lCRVVOQUNBQUlBRWdBaUFCYXlBRUVZR0FnSUFBQUNJRFFYOUhEUUFnQUVIMmlvQ0FBRFlDRUVFWUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NOQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0SkFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUlNSWdSRkRRQWdBQ0FCSUFJZ0FXc2dCQkdCZ0lDQUFBQWlBMEYvUncwQUlBQkI3WnFBZ0FBMkFoQkJHQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWpnaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxTUUVDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0VDSUVSUTBBSUFBZ0FTQUNJQUZySUFRUmdZQ0FnQUFBSWdOQmYwY05BQ0FBUVpXUWdJQUFOZ0lRUVJnaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSThJZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQzBrQkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BaFFpQkVVTkFDQUFJQUVnQWlBQmF5QUVFWUdBZ0lBQUFDSURRWDlIRFFBZ0FFR3FtNENBQURZQ0VFRVlJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDUUNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEpBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJWUlnUkZEUUFnQUNBQklBSWdBV3NnQkJHQmdJQ0FBQUFpQTBGL1J3MEFJQUJCN1pPQWdBQTJBaEJCR0NFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FrUWlCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NKQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUlzSWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREMwa0JBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWlnaUJFVU5BQ0FBSUFFZ0FpQUJheUFFRVlHQWdJQUFBQ0lEUVg5SERRQWdBRUgyaUlDQUFEWUNFRUVZSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ1VDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RKQVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSWNJZ1JGRFFBZ0FDQUJJQUlnQVdzZ0JCR0JnSUNBQUFBaUEwRi9SdzBBSUFCQndwbUFnQUEyQWhCQkdDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9Ba2dpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTFNRRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDSUNJRVJRMEFJQUFnQVNBQ0lBRnJJQVFSZ1lDQWdBQUFJZ05CZjBjTkFDQUFRWlNVZ0lBQU5nSVFRUmdoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FKTUlnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FsUWlCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NXQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0RkFRRi9Ba0FDUUNBQUx3RXdRUlJ4UVJSSERRQkJBU0VESUFBdEFDaEJBVVlOQVNBQUx3RXlRZVVBUmlFRERBRUxJQUF0QUNsQkJVWWhBd3NnQUNBRE9nQXVRUUFML2dFQkEzOUJBU0VEQWtBZ0FDOEJNQ0lFUVFoeERRQWdBQ2tESUVJQVVpRURDd0pBQWtBZ0FDMEFMa1VOQUVFQklRVWdBQzBBS1VFRlJnMEJRUUVoQlNBRVFjQUFjVVVnQTNGQkFVY05BUXRCQUNFRklBUkJ3QUJ4RFFCQkFpRUZJQVJCLy84RGNTSURRUWh4RFFBQ1FDQURRWUFFY1VVTkFBSkFJQUF0QUNoQkFVY05BQ0FBTFFBdFFRcHhEUUJCQlE4TFFRUVBDd0pBSUFOQklIRU5BQUpBSUFBdEFDaEJBVVlOQUNBQUx3RXlRZi8vQTNFaUFFR2NmMnBCNUFCSkRRQWdBRUhNQVVZTkFDQUFRYkFDUmcwQVFRUWhCU0FFUVNoeFJRMENJQU5CaUFSeFFZQUVSZzBDQzBFQUR3dEJBRUVESUFBcEF5QlFHeUVGQ3lBRkMySUJBbjlCQUNFQkFrQWdBQzBBS0VFQlJnMEFJQUF2QVRKQi8vOERjU0lDUVp4L2FrSGtBRWtOQUNBQ1Fjd0JSZzBBSUFKQnNBSkdEUUFnQUM4Qk1DSUFRY0FBY1EwQVFRRWhBU0FBUVlnRWNVR0FCRVlOQUNBQVFTaHhSU0VCQ3lBQkM2Y0JBUU4vQWtBQ1FBSkFJQUF0QUNwRkRRQWdBQzBBSzBVTkFFRUFJUU1nQUM4Qk1DSUVRUUp4UlEwQkRBSUxRUUFoQXlBQUx3RXdJZ1JCQVhGRkRRRUxRUUVoQXlBQUxRQW9RUUZHRFFBZ0FDOEJNa0gvL3dOeElnVkJuSDlxUWVRQVNRMEFJQVZCekFGR0RRQWdCVUd3QWtZTkFDQUVRY0FBY1EwQVFRQWhBeUFFUVlnRWNVR0FCRVlOQUNBRVFTaHhRUUJISVFNTElBQkJBRHNCTUNBQVFRQTZBQzhnQXd1WkFRRUNmd0pBQWtBQ1FDQUFMUUFxUlEwQUlBQXRBQ3RGRFFCQkFDRUJJQUF2QVRBaUFrRUNjVVVOQVF3Q0MwRUFJUUVnQUM4Qk1DSUNRUUZ4UlEwQkMwRUJJUUVnQUMwQUtFRUJSZzBBSUFBdkFUSkIvLzhEY1NJQVFaeC9ha0hrQUVrTkFDQUFRY3dCUmcwQUlBQkJzQUpHRFFBZ0FrSEFBSEVOQUVFQUlRRWdBa0dJQkhGQmdBUkdEUUFnQWtFb2NVRUFSeUVCQ3lBQkMxa0FJQUJCR0dwQ0FEY0RBQ0FBUWdBM0F3QWdBRUU0YWtJQU53TUFJQUJCTUdwQ0FEY0RBQ0FBUVNocVFnQTNBd0FnQUVFZ2FrSUFOd01BSUFCQkVHcENBRGNEQUNBQVFRaHFRZ0EzQXdBZ0FFSGRBVFlDSEVFQUMzc0JBWDhDUUNBQUtBSU1JZ01OQUFKQUlBQW9BZ1JGRFFBZ0FDQUJOZ0lFQ3dKQUlBQWdBU0FDRU1TQWdJQUFJZ01OQUNBQUtBSU1Ed3NnQUNBRE5nSWNRUUFoQXlBQUtBSUVJZ0ZGRFFBZ0FDQUJJQUlnQUNnQ0NCR0JnSUNBQUFBaUFVVU5BQ0FBSUFJMkFoUWdBQ0FCTmdJTUlBRWhBd3NnQXd2azh3RUREbjhEZmdSL0k0Q0FnSUFBUVJCcklnTWtnSUNBZ0FBZ0FTRUVJQUVoQlNBQklRWWdBU0VISUFFaENDQUJJUWtnQVNFS0lBRWhDeUFCSVF3Z0FTRU5JQUVoRGlBQklROENRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdBQ2dDSENJUVFYOXFEdDBCMmdFQjJRRUNBd1FGQmdjSUNRb0xEQTBPMkFFUEVOY0JFUkxXQVJNVUZSWVhHQmthRytBQjN3RWNIUjdWQVI4Z0lTSWpKQ1hVQVNZbktDa3FLeXpUQWRJQkxTN1JBZEFCTHpBeE1qTTBOVFkzT0RrNk96dzlQajlBUVVKRFJFVkcyd0ZIU0VsS3p3SE9BVXZOQVV6TUFVMU9UMUJSVWxOVVZWWlhXRmxhVzF4ZFhsOWdZV0pqWkdWbVoyaHBhbXRzYlc1dmNIRnljM1IxZG5kNGVYcDdmSDErZjRBQmdRR0NBWU1CaEFHRkFZWUJod0dJQVlrQmlnR0xBWXdCalFHT0FZOEJrQUdSQVpJQmt3R1VBWlVCbGdHWEFaZ0JtUUdhQVpzQm5BR2RBWjRCbndHZ0FhRUJvZ0dqQWFRQnBRR21BYWNCcUFHcEFhb0Jxd0dzQWEwQnJnR3ZBYkFCc1FHeUFiTUJ0QUcxQWJZQnR3SExBY29CdUFISkFia0J5QUc2QWJzQnZBRzlBYjRCdndIQUFjRUJ3Z0hEQWNRQnhRSEdBUURjQVF0QkFDRVFETVlCQzBFT0lSQU14UUVMUVEwaEVBekVBUXRCRHlFUURNTUJDMEVRSVJBTXdnRUxRUk1oRUF6QkFRdEJGQ0VRRE1BQkMwRVZJUkFNdndFTFFSWWhFQXkrQVF0QkZ5RVFETDBCQzBFWUlSQU12QUVMUVJraEVBeTdBUXRCR2lFUURMb0JDMEViSVJBTXVRRUxRUndoRUF5NEFRdEJDQ0VRRExjQkMwRWRJUkFNdGdFTFFTQWhFQXkxQVF0Qkh5RVFETFFCQzBFSElSQU1zd0VMUVNFaEVBeXlBUXRCSWlFUURMRUJDMEVlSVJBTXNBRUxRU01oRUF5dkFRdEJFaUVRREs0QkMwRVJJUkFNclFFTFFTUWhFQXlzQVF0QkpTRVFES3NCQzBFbUlSQU1xZ0VMUVNjaEVBeXBBUXRCd3dFaEVBeW9BUXRCS1NFUURLY0JDMEVySVJBTXBnRUxRU3doRUF5bEFRdEJMU0VRREtRQkMwRXVJUkFNb3dFTFFTOGhFQXlpQVF0QnhBRWhFQXloQVF0Qk1DRVFES0FCQzBFMElSQU1ud0VMUVF3aEVBeWVBUXRCTVNFUURKMEJDMEV5SVJBTW5BRUxRVE1oRUF5YkFRdEJPU0VRREpvQkMwRTFJUkFNbVFFTFFjVUJJUkFNbUFFTFFRc2hFQXlYQVF0Qk9pRVFESllCQzBFMklSQU1sUUVMUVFvaEVBeVVBUXRCTnlFUURKTUJDMEU0SVJBTWtnRUxRVHdoRUF5UkFRdEJPeUVRREpBQkMwRTlJUkFNandFTFFRa2hFQXlPQVF0QktDRVFESTBCQzBFK0lSQU1qQUVMUVQ4aEVBeUxBUXRCd0FBaEVBeUtBUXRCd1FBaEVBeUpBUXRCd2dBaEVBeUlBUXRCd3dBaEVBeUhBUXRCeEFBaEVBeUdBUXRCeFFBaEVBeUZBUXRCeGdBaEVBeUVBUXRCS2lFUURJTUJDMEhIQUNFUURJSUJDMEhJQUNFUURJRUJDMEhKQUNFUURJQUJDMEhLQUNFUURIOExRY3NBSVJBTWZndEJ6UUFoRUF4OUMwSE1BQ0VRREh3TFFjNEFJUkFNZXd0Qnp3QWhFQXg2QzBIUUFDRVFESGtMUWRFQUlSQU1lQXRCMGdBaEVBeDNDMEhUQUNFUURIWUxRZFFBSVJBTWRRdEIxZ0FoRUF4MEMwSFZBQ0VRREhNTFFRWWhFQXh5QzBIWEFDRVFESEVMUVFVaEVBeHdDMEhZQUNFUURHOExRUVFoRUF4dUMwSFpBQ0VRREcwTFFkb0FJUkFNYkF0QjJ3QWhFQXhyQzBIY0FDRVFER29MUVFNaEVBeHBDMEhkQUNFUURHZ0xRZDRBSVJBTVp3dEIzd0FoRUF4bUMwSGhBQ0VRREdVTFFlQUFJUkFNWkF0QjRnQWhFQXhqQzBIakFDRVFER0lMUVFJaEVBeGhDMEhrQUNFUURHQUxRZVVBSVJBTVh3dEI1Z0FoRUF4ZUMwSG5BQ0VRREYwTFFlZ0FJUkFNWEF0QjZRQWhFQXhiQzBIcUFDRVFERm9MUWVzQUlSQU1XUXRCN0FBaEVBeFlDMEh0QUNFUURGY0xRZTRBSVJBTVZndEI3d0FoRUF4VkMwSHdBQ0VRREZRTFFmRUFJUkFNVXd0QjhnQWhFQXhTQzBIekFDRVFERkVMUWZRQUlSQU1VQXRCOVFBaEVBeFBDMEgyQUNFUURFNExRZmNBSVJBTVRRdEIrQUFoRUF4TUMwSDVBQ0VRREVzTFFmb0FJUkFNU2d0Qit3QWhFQXhKQzBIOEFDRVFERWdMUWYwQUlSQU1Sd3RCL2dBaEVBeEdDMEgvQUNFUURFVUxRWUFCSVJBTVJBdEJnUUVoRUF4REMwR0NBU0VRREVJTFFZTUJJUkFNUVF0QmhBRWhFQXhBQzBHRkFTRVFERDhMUVlZQklSQU1QZ3RCaHdFaEVBdzlDMEdJQVNFUUREd0xRWWtCSVJBTU93dEJpZ0VoRUF3NkMwR0xBU0VRRERrTFFZd0JJUkFNT0F0QmpRRWhFQXczQzBHT0FTRVFERFlMUVk4QklSQU1OUXRCa0FFaEVBdzBDMEdSQVNFUURETUxRWklCSVJBTU1ndEJrd0VoRUF3eEMwR1VBU0VRRERBTFFaVUJJUkFNTHd0QmxnRWhFQXd1QzBHWEFTRVFEQzBMUVpnQklSQU1MQXRCbVFFaEVBd3JDMEdhQVNFUURDb0xRWnNCSVJBTUtRdEJuQUVoRUF3b0MwR2RBU0VRRENjTFFaNEJJUkFNSmd0Qm53RWhFQXdsQzBHZ0FTRVFEQ1FMUWFFQklSQU1Jd3RCb2dFaEVBd2lDMEdqQVNFUURDRUxRYVFCSVJBTUlBdEJwUUVoRUF3ZkMwR21BU0VRREI0TFFhY0JJUkFNSFF0QnFBRWhFQXdjQzBHcEFTRVFEQnNMUWFvQklSQU1HZ3RCcXdFaEVBd1pDMEdzQVNFUURCZ0xRYTBCSVJBTUZ3dEJyZ0VoRUF3V0MwRUJJUkFNRlF0QnJ3RWhFQXdVQzBHd0FTRVFEQk1MUWJFQklSQU1FZ3RCc3dFaEVBd1JDMEd5QVNFUURCQUxRYlFCSVJBTUR3dEJ0UUVoRUF3T0MwRzJBU0VRREEwTFFiY0JJUkFNREF0QnVBRWhFQXdMQzBHNUFTRVFEQW9MUWJvQklSQU1DUXRCdXdFaEVBd0lDMEhHQVNFUURBY0xRYndCSVJBTUJndEJ2UUVoRUF3RkMwRytBU0VRREFRTFFiOEJJUkFNQXd0QndBRWhFQXdDQzBIQ0FTRVFEQUVMUWNFQklSQUxBMEFDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBUURzY0JBQUVDQXdRRkJnY0lDUW9MREEwT0R4QVJFaE1VRlJZWEdCa2FHeHdlSHlBaEl5VW9QMEJCUkVWR1IwaEpTa3RNVFU5UVVWSlQzZ05YV1Z0Y1hXQmlaV1puYUdscWEyeHRiM0J4Y25OMGRYWjNlSGw2ZTN4OWZvQUJnZ0dGQVlZQmh3R0pBWXNCakFHTkFZNEJqd0dRQVpFQmxBR1ZBWllCbHdHWUFaa0JtZ0diQVp3Qm5RR2VBWjhCb0FHaEFhSUJvd0drQWFVQnBnR25BYWdCcVFHcUFhc0JyQUd0QWE0QnJ3R3dBYkVCc2dHekFiUUJ0UUcyQWJjQnVBRzVBYm9CdXdHOEFiMEJ2Z0cvQWNBQndRSENBY01CeEFIRkFjWUJ4d0hJQWNrQnlnSExBY3dCelFIT0FjOEIwQUhSQWRJQjB3SFVBZFVCMWdIWEFkZ0IyUUhhQWRzQjNBSGRBZDRCNEFIaEFlSUI0d0hrQWVVQjVnSG5BZWdCNlFIcUFlc0I3QUh0QWU0Qjd3SHdBZkVCOGdIekFaa0NwQUt3QXY0Qy9nSUxJQUVpQkNBQ1J3M3pBVUhkQVNFUURQOERDeUFCSWhBZ0FrY04zUUZCd3dFaEVBeitBd3NnQVNJQklBSkhEWkFCUWZjQUlSQU0vUU1MSUFFaUFTQUNSdzJHQVVIdkFDRVFEUHdEQ3lBQklnRWdBa2NOZjBIcUFDRVFEUHNEQ3lBQklnRWdBa2NOZTBIb0FDRVFEUG9EQ3lBQklnRWdBa2NOZUVIbUFDRVFEUGtEQ3lBQklnRWdBa2NOR2tFWUlSQU0rQU1MSUFFaUFTQUNSdzBVUVJJaEVBejNBd3NnQVNJQklBSkhEVmxCeFFBaEVBejJBd3NnQVNJQklBSkhEVXBCUHlFUURQVURDeUFCSWdFZ0FrY05TRUU4SVJBTTlBTUxJQUVpQVNBQ1J3MUJRVEVoRUF6ekF3c2dBQzBBTGtFQlJnM3JBd3lIQWdzZ0FDQUJJZ0VnQWhEQWdJQ0FBRUVCUnczbUFTQUFRZ0EzQXlBTTV3RUxJQUFnQVNJQklBSVF0SUNBZ0FBaUVBM25BU0FCSVFFTTlRSUxBa0FnQVNJQklBSkhEUUJCQmlFUURQQURDeUFBSUFGQkFXb2lBU0FDRUx1QWdJQUFJaEFONkFFZ0FTRUJEREVMSUFCQ0FEY0RJRUVTSVJBTTFRTUxJQUVpRUNBQ1J3MHJRUjBoRUF6dEF3c0NRQ0FCSWdFZ0FrWU5BQ0FCUVFGcUlRRkJFQ0VRRE5RREMwRUhJUkFNN0FNTElBQkNBQ0FBS1FNZ0loRWdBaUFCSWhCcnJTSVNmU0lUSUJNZ0VWWWJOd01nSUJFZ0VsWWlGRVVONVFGQkNDRVFET3NEQ3dKQUlBRWlBU0FDUmcwQUlBQkJpWUNBZ0FBMkFnZ2dBQ0FCTmdJRUlBRWhBVUVVSVJBTTBnTUxRUWtoRUF6cUF3c2dBU0VCSUFBcEF5QlFEZVFCSUFFaEFRenlBZ3NDUUNBQklnRWdBa2NOQUVFTElSQU02UU1MSUFBZ0FVRUJhaUlCSUFJUXRvQ0FnQUFpRUEzbEFTQUJJUUVNOGdJTElBQWdBU0lCSUFJUXVJQ0FnQUFpRUEzbEFTQUJJUUVNOGdJTElBQWdBU0lCSUFJUXVJQ0FnQUFpRUEzbUFTQUJJUUVNRFFzZ0FDQUJJZ0VnQWhDNmdJQ0FBQ0lRRGVjQklBRWhBUXp3QWdzQ1FDQUJJZ0VnQWtjTkFFRVBJUkFNNVFNTElBRXRBQUFpRUVFN1JnMElJQkJCRFVjTjZBRWdBVUVCYWlFQkRPOENDeUFBSUFFaUFTQUNFTHFBZ0lBQUloQU42QUVnQVNFQkRQSUNDd05BQWtBZ0FTMEFBRUh3dFlDQUFHb3RBQUFpRUVFQlJnMEFJQkJCQWtjTjZ3RWdBQ2dDQkNFUUlBQkJBRFlDQkNBQUlCQWdBVUVCYWlJQkVMbUFnSUFBSWhBTjZnRWdBU0VCRFBRQ0N5QUJRUUZxSWdFZ0FrY05BQXRCRWlFUURPSURDeUFBSUFFaUFTQUNFTHFBZ0lBQUloQU42UUVnQVNFQkRBb0xJQUVpQVNBQ1J3MEdRUnNoRUF6Z0F3c0NRQ0FCSWdFZ0FrY05BRUVXSVJBTTRBTUxJQUJCaW9DQWdBQTJBZ2dnQUNBQk5nSUVJQUFnQVNBQ0VMaUFnSUFBSWhBTjZnRWdBU0VCUVNBaEVBekdBd3NDUUNBQklnRWdBa1lOQUFOQUFrQWdBUzBBQUVId3Q0Q0FBR290QUFBaUVFRUNSZzBBQWtBZ0VFRi9hZzRFNVFIc0FRRHJBZXdCQ3lBQlFRRnFJUUZCQ0NFUURNZ0RDeUFCUVFGcUlnRWdBa2NOQUF0QkZTRVFETjhEQzBFVklSQU0zZ01MQTBBQ1FDQUJMUUFBUWZDNWdJQUFhaTBBQUNJUVFRSkdEUUFnRUVGL2FnNEUzZ0hzQWVBQjZ3SHNBUXNnQVVFQmFpSUJJQUpIRFFBTFFSZ2hFQXpkQXdzQ1FDQUJJZ0VnQWtZTkFDQUFRWXVBZ0lBQU5nSUlJQUFnQVRZQ0JDQUJJUUZCQnlFUURNUURDMEVaSVJBTTNBTUxJQUZCQVdvaEFRd0NDd0pBSUFFaUZDQUNSdzBBUVJvaEVBemJBd3NnRkNFQkFrQWdGQzBBQUVGemFnNFUzUUx1QXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0lBN2dJTFFRQWhFQ0FBUVFBMkFod2dBRUd2aTRDQUFEWUNFQ0FBUVFJMkFnd2dBQ0FVUVFGcU5nSVVETm9EQ3dKQUlBRXRBQUFpRUVFN1JnMEFJQkJCRFVjTjZBRWdBVUVCYWlFQkRPVUNDeUFCUVFGcUlRRUxRU0loRUF5L0F3c0NRQ0FCSWhBZ0FrY05BRUVjSVJBTTJBTUxRZ0FoRVNBUUlRRWdFQzBBQUVGUWFnNDM1d0htQVFFQ0F3UUZCZ2NJQUFBQUFBQUFBQWtLQ3d3TkRnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUR4QVJFaE1VQUF0QkhpRVFETDBEQzBJQ0lSRU01UUVMUWdNaEVRemtBUXRDQkNFUkRPTUJDMElGSVJFTTRnRUxRZ1loRVF6aEFRdENCeUVSRE9BQkMwSUlJUkVNM3dFTFFna2hFUXplQVF0Q0NpRVJETjBCQzBJTElSRU0zQUVMUWd3aEVRemJBUXRDRFNFUkROb0JDMElPSVJFTTJRRUxRZzhoRVF6WUFRdENDaUVSRE5jQkMwSUxJUkVNMWdFTFFnd2hFUXpWQVF0Q0RTRVJETlFCQzBJT0lSRU0wd0VMUWc4aEVRelNBUXRDQUNFUkFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FRTFFBQVFWQnFEamZsQWVRQkFBRUNBd1FGQmdmbUFlWUI1Z0htQWVZQjVnSG1BUWdKQ2dzTURlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdFT0R4QVJFaFBtQVF0Q0FpRVJET1FCQzBJRElSRU00d0VMUWdRaEVRemlBUXRDQlNFUkRPRUJDMElHSVJFTTRBRUxRZ2NoRVF6ZkFRdENDQ0VSRE40QkMwSUpJUkVNM1FFTFFnb2hFUXpjQVF0Q0N5RVJETnNCQzBJTUlSRU0yZ0VMUWcwaEVRelpBUXRDRGlFUkROZ0JDMElQSVJFTTF3RUxRZ29oRVF6V0FRdENDeUVSRE5VQkMwSU1JUkVNMUFFTFFnMGhFUXpUQVF0Q0RpRVJETklCQzBJUElSRU0wUUVMSUFCQ0FDQUFLUU1nSWhFZ0FpQUJJaEJyclNJU2ZTSVRJQk1nRVZZYk53TWdJQkVnRWxZaUZFVU4wZ0ZCSHlFUURNQURDd0pBSUFFaUFTQUNSZzBBSUFCQmlZQ0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFVRWtJUkFNcHdNTFFTQWhFQXkvQXdzZ0FDQUJJaEFnQWhDK2dJQ0FBRUYvYWc0RnRnRUF4UUlCMFFIU0FRdEJFU0VRREtRREN5QUFRUUU2QUM4Z0VDRUJETHNEQ3lBQklnRWdBa2NOMGdGQkpDRVFETHNEQ3lBQklnMGdBa2NOSGtIR0FDRVFETG9EQ3lBQUlBRWlBU0FDRUxLQWdJQUFJaEFOMUFFZ0FTRUJETFVCQ3lBQkloQWdBa2NOSmtIUUFDRVFETGdEQ3dKQUlBRWlBU0FDUncwQVFTZ2hFQXk0QXdzZ0FFRUFOZ0lFSUFCQmpJQ0FnQUEyQWdnZ0FDQUJJQUVRc1lDQWdBQWlFQTNUQVNBQklRRU0yQUVMQWtBZ0FTSVFJQUpIRFFCQktTRVFETGNEQ3lBUUxRQUFJZ0ZCSUVZTkZDQUJRUWxIRGRNQklCQkJBV29oQVF3VkN3SkFJQUVpQVNBQ1JnMEFJQUZCQVdvaEFRd1hDMEVxSVJBTXRRTUxBa0FnQVNJUUlBSkhEUUJCS3lFUURMVURDd0pBSUJBdEFBQWlBVUVKUmcwQUlBRkJJRWNOMVFFTElBQXRBQ3hCQ0VZTjB3RWdFQ0VCREpFREN3SkFJQUVpQVNBQ1J3MEFRU3doRUF5MEF3c2dBUzBBQUVFS1J3M1ZBU0FCUVFGcUlRRU15UUlMSUFFaURpQUNSdzNWQVVFdklSQU1zZ01MQTBBQ1FDQUJMUUFBSWhCQklFWU5BQUpBSUJCQmRtb09CQURjQWR3QkFOb0JDeUFCSVFFTTRBRUxJQUZCQVdvaUFTQUNSdzBBQzBFeElSQU1zUU1MUVRJaEVDQUJJaFFnQWtZTnNBTWdBaUFVYXlBQUtBSUFJZ0ZxSVJVZ0ZDQUJhMEVEYWlFV0FrQURRQ0FVTFFBQUloZEJJSElnRnlBWFFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFmQzdnSUFBYWkwQUFFY05BUUpBSUFGQkEwY05BRUVHSVFFTWxnTUxJQUZCQVdvaEFTQVVRUUZxSWhRZ0FrY05BQXNnQUNBVk5nSUFETEVEQ3lBQVFRQTJBZ0FnRkNFQkROa0JDMEV6SVJBZ0FTSVVJQUpHRGE4RElBSWdGR3NnQUNnQ0FDSUJhaUVWSUJRZ0FXdEJDR29oRmdKQUEwQWdGQzBBQUNJWFFTQnlJQmNnRjBHL2YycEIvd0Z4UVJwSkcwSC9BWEVnQVVIMHU0Q0FBR290QUFCSERRRUNRQ0FCUVFoSERRQkJCU0VCREpVREN5QUJRUUZxSVFFZ0ZFRUJhaUlVSUFKSERRQUxJQUFnRlRZQ0FBeXdBd3NnQUVFQU5nSUFJQlFoQVF6WUFRdEJOQ0VRSUFFaUZDQUNSZzJ1QXlBQ0lCUnJJQUFvQWdBaUFXb2hGU0FVSUFGclFRVnFJUllDUUFOQUlCUXRBQUFpRjBFZ2NpQVhJQmRCdjM5cVFmOEJjVUVhU1J0Qi93RnhJQUZCME1LQWdBQnFMUUFBUncwQkFrQWdBVUVGUncwQVFRY2hBUXlVQXdzZ0FVRUJhaUVCSUJSQkFXb2lGQ0FDUncwQUN5QUFJQlUyQWdBTXJ3TUxJQUJCQURZQ0FDQVVJUUVNMXdFTEFrQWdBU0lCSUFKR0RRQURRQUpBSUFFdEFBQkJnTDZBZ0FCcUxRQUFJaEJCQVVZTkFDQVFRUUpHRFFvZ0FTRUJETjBCQ3lBQlFRRnFJZ0VnQWtjTkFBdEJNQ0VRREs0REMwRXdJUkFNclFNTEFrQWdBU0lCSUFKR0RRQURRQUpBSUFFdEFBQWlFRUVnUmcwQUlCQkJkbW9PQk5rQjJnSGFBZGtCMmdFTElBRkJBV29pQVNBQ1J3MEFDMEU0SVJBTXJRTUxRVGdoRUF5c0F3c0RRQUpBSUFFdEFBQWlFRUVnUmcwQUlCQkJDVWNOQXdzZ0FVRUJhaUlCSUFKSERRQUxRVHdoRUF5ckF3c0RRQUpBSUFFdEFBQWlFRUVnUmcwQUFrQUNRQ0FRUVhacURnVGFBUUVCMmdFQUN5QVFRU3hHRGRzQkN5QUJJUUVNQkFzZ0FVRUJhaUlCSUFKSERRQUxRVDhoRUF5cUF3c2dBU0VCRE5zQkMwSEFBQ0VRSUFFaUZDQUNSZzJvQXlBQ0lCUnJJQUFvQWdBaUFXb2hGaUFVSUFGclFRWnFJUmNDUUFOQUlCUXRBQUJCSUhJZ0FVR0F3SUNBQUdvdEFBQkhEUUVnQVVFR1JnMk9BeUFCUVFGcUlRRWdGRUVCYWlJVUlBSkhEUUFMSUFBZ0ZqWUNBQXlwQXdzZ0FFRUFOZ0lBSUJRaEFRdEJOaUVRREk0REN3SkFJQUVpRHlBQ1J3MEFRY0VBSVJBTXB3TUxJQUJCaklDQWdBQTJBZ2dnQUNBUE5nSUVJQThoQVNBQUxRQXNRWDlxRGdUTkFkVUIxd0haQVljREN5QUJRUUZxSVFFTXpBRUxBa0FnQVNJQklBSkdEUUFEUUFKQUlBRXRBQUFpRUVFZ2NpQVFJQkJCdjM5cVFmOEJjVUVhU1J0Qi93RnhJaEJCQ1VZTkFDQVFRU0JHRFFBQ1FBSkFBa0FDUUNBUVFaMS9hZzRUQUFNREF3TURBd01CQXdNREF3TURBd01EQWdNTElBRkJBV29oQVVFeElSQU1rUU1MSUFGQkFXb2hBVUV5SVJBTWtBTUxJQUZCQVdvaEFVRXpJUkFNandNTElBRWhBUXpRQVFzZ0FVRUJhaUlCSUFKSERRQUxRVFVoRUF5bEF3dEJOU0VRREtRREN3SkFJQUVpQVNBQ1JnMEFBMEFDUUNBQkxRQUFRWUM4Z0lBQWFpMEFBRUVCUmcwQUlBRWhBUXpUQVFzZ0FVRUJhaUlCSUFKSERRQUxRVDBoRUF5a0F3dEJQU0VRREtNREN5QUFJQUVpQVNBQ0VMQ0FnSUFBSWhBTjFnRWdBU0VCREFFTElCQkJBV29oQVF0QlBDRVFESWNEQ3dKQUlBRWlBU0FDUncwQVFjSUFJUkFNb0FNTEFrQURRQUpBSUFFdEFBQkJkMm9PR0FBQy9nTCtBb1FEL2dMK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDQVA0Q0N5QUJRUUZxSWdFZ0FrY05BQXRCd2dBaEVBeWdBd3NnQVVFQmFpRUJJQUF0QUMxQkFYRkZEYjBCSUFFaEFRdEJMQ0VRRElVREN5QUJJZ0VnQWtjTjB3RkJ4QUFoRUF5ZEF3c0RRQUpBSUFFdEFBQkJrTUNBZ0FCcUxRQUFRUUZHRFFBZ0FTRUJETGNDQ3lBQlFRRnFJZ0VnQWtjTkFBdEJ4UUFoRUF5Y0F3c2dEUzBBQUNJUVFTQkdEYk1CSUJCQk9rY05nUU1nQUNnQ0JDRUJJQUJCQURZQ0JDQUFJQUVnRFJDdmdJQ0FBQ0lCRGRBQklBMUJBV29oQVF5ekFndEJ4d0FoRUNBQklnMGdBa1lObWdNZ0FpQU5heUFBS0FJQUlnRnFJUllnRFNBQmEwRUZhaUVYQTBBZ0RTMEFBQ0lVUVNCeUlCUWdGRUcvZjJwQi93RnhRUnBKRzBIL0FYRWdBVUdRd29DQUFHb3RBQUJIRFlBRElBRkJCVVlOOUFJZ0FVRUJhaUVCSUExQkFXb2lEU0FDUncwQUN5QUFJQlkyQWdBTW1nTUxRY2dBSVJBZ0FTSU5JQUpHRFprRElBSWdEV3NnQUNnQ0FDSUJhaUVXSUEwZ0FXdEJDV29oRndOQUlBMHRBQUFpRkVFZ2NpQVVJQlJCdjM5cVFmOEJjVUVhU1J0Qi93RnhJQUZCbHNLQWdBQnFMUUFBUnczL0FnSkFJQUZCQ1VjTkFFRUNJUUVNOVFJTElBRkJBV29oQVNBTlFRRnFJZzBnQWtjTkFBc2dBQ0FXTmdJQURKa0RDd0pBSUFFaURTQUNSdzBBUWNrQUlSQU1tUU1MQWtBQ1FDQU5MUUFBSWdGQklISWdBU0FCUWI5L2FrSC9BWEZCR2trYlFmOEJjVUdTZjJvT0J3Q0FBNEFEZ0FPQUE0QURBWUFEQ3lBTlFRRnFJUUZCUGlFUURJQURDeUFOUVFGcUlRRkJQeUVRRFA4Q0MwSEtBQ0VRSUFFaURTQUNSZzJYQXlBQ0lBMXJJQUFvQWdBaUFXb2hGaUFOSUFGclFRRnFJUmNEUUNBTkxRQUFJaFJCSUhJZ0ZDQVVRYjkvYWtIL0FYRkJHa2tiUWY4QmNTQUJRYURDZ0lBQWFpMEFBRWNOL1FJZ0FVRUJSZzN3QWlBQlFRRnFJUUVnRFVFQmFpSU5JQUpIRFFBTElBQWdGallDQUF5WEF3dEJ5d0FoRUNBQklnMGdBa1lObGdNZ0FpQU5heUFBS0FJQUlnRnFJUllnRFNBQmEwRU9haUVYQTBBZ0RTMEFBQ0lVUVNCeUlCUWdGRUcvZjJwQi93RnhRUnBKRzBIL0FYRWdBVUdpd29DQUFHb3RBQUJIRGZ3Q0lBRkJEa1lOOEFJZ0FVRUJhaUVCSUExQkFXb2lEU0FDUncwQUN5QUFJQlkyQWdBTWxnTUxRY3dBSVJBZ0FTSU5JQUpHRFpVRElBSWdEV3NnQUNnQ0FDSUJhaUVXSUEwZ0FXdEJEMm9oRndOQUlBMHRBQUFpRkVFZ2NpQVVJQlJCdjM5cVFmOEJjVUVhU1J0Qi93RnhJQUZCd01LQWdBQnFMUUFBUnczN0FnSkFJQUZCRDBjTkFFRURJUUVNOFFJTElBRkJBV29oQVNBTlFRRnFJZzBnQWtjTkFBc2dBQ0FXTmdJQURKVURDMEhOQUNFUUlBRWlEU0FDUmcyVUF5QUNJQTFySUFBb0FnQWlBV29oRmlBTklBRnJRUVZxSVJjRFFDQU5MUUFBSWhSQklISWdGQ0FVUWI5L2FrSC9BWEZCR2trYlFmOEJjU0FCUWREQ2dJQUFhaTBBQUVjTitnSUNRQ0FCUVFWSERRQkJCQ0VCRFBBQ0N5QUJRUUZxSVFFZ0RVRUJhaUlOSUFKSERRQUxJQUFnRmpZQ0FBeVVBd3NDUUNBQklnMGdBa2NOQUVIT0FDRVFESlFEQ3dKQUFrQUNRQUpBSUEwdEFBQWlBVUVnY2lBQklBRkJ2MzlxUWY4QmNVRWFTUnRCL3dGeFFaMS9hZzRUQVAwQy9RTDlBdjBDL1FMOUF2MEMvUUw5QXYwQy9RTDlBZ0g5QXYwQy9RSUNBLzBDQ3lBTlFRRnFJUUZCd1FBaEVBejlBZ3NnRFVFQmFpRUJRY0lBSVJBTS9BSUxJQTFCQVdvaEFVSERBQ0VRRFBzQ0N5QU5RUUZxSVFGQnhBQWhFQXo2QWdzQ1FDQUJJZ0VnQWtZTkFDQUFRWTJBZ0lBQU5nSUlJQUFnQVRZQ0JDQUJJUUZCeFFBaEVBejZBZ3RCendBaEVBeVNBd3NnRUNFQkFrQUNRQ0FRTFFBQVFYWnFEZ1FCcUFLb0FnQ29BZ3NnRUVFQmFpRUJDMEVuSVJBTStBSUxBa0FnQVNJQklBSkhEUUJCMFFBaEVBeVJBd3NDUUNBQkxRQUFRU0JHRFFBZ0FTRUJESTBCQ3lBQlFRRnFJUUVnQUMwQUxVRUJjVVVOeHdFZ0FTRUJESXdCQ3lBQkloY2dBa2NOeUFGQjBnQWhFQXlQQXd0QjB3QWhFQ0FCSWhRZ0FrWU5qZ01nQWlBVWF5QUFLQUlBSWdGcUlSWWdGQ0FCYTBFQmFpRVhBMEFnRkMwQUFDQUJRZGJDZ0lBQWFpMEFBRWNOekFFZ0FVRUJSZzNIQVNBQlFRRnFJUUVnRkVFQmFpSVVJQUpIRFFBTElBQWdGallDQUF5T0F3c0NRQ0FCSWdFZ0FrY05BRUhWQUNFUURJNERDeUFCTFFBQVFRcEhEY3dCSUFGQkFXb2hBUXpIQVFzQ1FDQUJJZ0VnQWtjTkFFSFdBQ0VRREkwREN3SkFBa0FnQVMwQUFFRjJhZzRFQU0wQnpRRUJ6UUVMSUFGQkFXb2hBUXpIQVFzZ0FVRUJhaUVCUWNvQUlSQU04d0lMSUFBZ0FTSUJJQUlRcm9DQWdBQWlFQTNMQVNBQklRRkJ6UUFoRUF6eUFnc2dBQzBBS1VFaVJnMkZBd3ltQWdzQ1FDQUJJZ0VnQWtjTkFFSGJBQ0VRRElvREMwRUFJUlJCQVNFWFFRRWhGa0VBSVJBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBZ0FTMEFBRUZRYWc0SzFBSFRBUUFCQWdNRUJRWUkxUUVMUVFJaEVBd0dDMEVESVJBTUJRdEJCQ0VRREFRTFFRVWhFQXdEQzBFR0lSQU1BZ3RCQnlFUURBRUxRUWdoRUF0QkFDRVhRUUFoRmtFQUlSUU16QUVMUVFraEVFRUJJUlJCQUNFWFFRQWhGZ3pMQVFzQ1FDQUJJZ0VnQWtjTkFFSGRBQ0VRRElrREN5QUJMUUFBUVM1SERjd0JJQUZCQVdvaEFReW1BZ3NnQVNJQklBSkhEY3dCUWQ4QUlSQU1od01MQWtBZ0FTSUJJQUpHRFFBZ0FFR09nSUNBQURZQ0NDQUFJQUUyQWdRZ0FTRUJRZEFBSVJBTTdnSUxRZUFBSVJBTWhnTUxRZUVBSVJBZ0FTSUJJQUpHRFlVRElBSWdBV3NnQUNnQ0FDSVVhaUVXSUFFZ0ZHdEJBMm9oRndOQUlBRXRBQUFnRkVIaXdvQ0FBR290QUFCSERjMEJJQlJCQTBZTnpBRWdGRUVCYWlFVUlBRkJBV29pQVNBQ1J3MEFDeUFBSUJZMkFnQU1oUU1MUWVJQUlSQWdBU0lCSUFKR0RZUURJQUlnQVdzZ0FDZ0NBQ0lVYWlFV0lBRWdGR3RCQW1vaEZ3TkFJQUV0QUFBZ0ZFSG13b0NBQUdvdEFBQkhEY3dCSUJSQkFrWU56Z0VnRkVFQmFpRVVJQUZCQVdvaUFTQUNSdzBBQ3lBQUlCWTJBZ0FNaEFNTFFlTUFJUkFnQVNJQklBSkdEWU1ESUFJZ0FXc2dBQ2dDQUNJVWFpRVdJQUVnRkd0QkEyb2hGd05BSUFFdEFBQWdGRUhwd29DQUFHb3RBQUJIRGNzQklCUkJBMFlOemdFZ0ZFRUJhaUVVSUFGQkFXb2lBU0FDUncwQUN5QUFJQlkyQWdBTWd3TUxBa0FnQVNJQklBSkhEUUJCNVFBaEVBeURBd3NnQUNBQlFRRnFJZ0VnQWhDb2dJQ0FBQ0lRRGMwQklBRWhBVUhXQUNFUURPa0NDd0pBSUFFaUFTQUNSZzBBQTBBQ1FDQUJMUUFBSWhCQklFWU5BQUpBQWtBQ1FDQVFRYmgvYWc0TEFBSFBBYzhCendIUEFjOEJ6d0hQQWM4QkFzOEJDeUFCUVFGcUlRRkIwZ0FoRUF6dEFnc2dBVUVCYWlFQlFkTUFJUkFNN0FJTElBRkJBV29oQVVIVUFDRVFET3NDQ3lBQlFRRnFJZ0VnQWtjTkFBdEI1QUFoRUF5Q0F3dEI1QUFoRUF5QkF3c0RRQUpBSUFFdEFBQkI4TUtBZ0FCcUxRQUFJaEJCQVVZTkFDQVFRWDVxRGdQUEFkQUIwUUhTQVFzZ0FVRUJhaUlCSUFKSERRQUxRZVlBSVJBTWdBTUxBa0FnQVNJQklBSkdEUUFnQVVFQmFpRUJEQU1MUWVjQUlSQU0vd0lMQTBBQ1FDQUJMUUFBUWZERWdJQUFhaTBBQUNJUVFRRkdEUUFDUUNBUVFYNXFEZ1RTQWRNQjFBRUExUUVMSUFFaEFVSFhBQ0VRRE9jQ0N5QUJRUUZxSWdFZ0FrY05BQXRCNkFBaEVBeitBZ3NDUUNBQklnRWdBa2NOQUVIcEFDRVFEUDRDQ3dKQUlBRXRBQUFpRUVGMmFnNGF1Z0hWQWRVQnZBSFZBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSEtBZFVCMVFFQTB3RUxJQUZCQVdvaEFRdEJCaUVRRE9NQ0N3TkFBa0FnQVMwQUFFSHd4b0NBQUdvdEFBQkJBVVlOQUNBQklRRU1uZ0lMSUFGQkFXb2lBU0FDUncwQUMwSHFBQ0VRRFBzQ0N3SkFJQUVpQVNBQ1JnMEFJQUZCQVdvaEFRd0RDMEhyQUNFUURQb0NDd0pBSUFFaUFTQUNSdzBBUWV3QUlSQU0rZ0lMSUFGQkFXb2hBUXdCQ3dKQUlBRWlBU0FDUncwQVFlMEFJUkFNK1FJTElBRkJBV29oQVF0QkJDRVFETjRDQ3dKQUlBRWlGQ0FDUncwQVFlNEFJUkFNOXdJTElCUWhBUUpBQWtBQ1FDQVVMUUFBUWZESWdJQUFhaTBBQUVGL2FnNEgxQUhWQWRZQkFKd0NBUUxYQVFzZ0ZFRUJhaUVCREFvTElCUkJBV29oQVF6TkFRdEJBQ0VRSUFCQkFEWUNIQ0FBUVp1U2dJQUFOZ0lRSUFCQkJ6WUNEQ0FBSUJSQkFXbzJBaFFNOWdJTEFrQURRQUpBSUFFdEFBQkI4TWlBZ0FCcUxRQUFJaEJCQkVZTkFBSkFBa0FnRUVGL2FnNEgwZ0hUQWRRQjJRRUFCQUhaQVFzZ0FTRUJRZG9BSVJBTTRBSUxJQUZCQVdvaEFVSGNBQ0VRRE44Q0N5QUJRUUZxSWdFZ0FrY05BQXRCN3dBaEVBejJBZ3NnQVVFQmFpRUJETXNCQ3dKQUlBRWlGQ0FDUncwQVFmQUFJUkFNOVFJTElCUXRBQUJCTDBjTjFBRWdGRUVCYWlFQkRBWUxBa0FnQVNJVUlBSkhEUUJCOFFBaEVBejBBZ3NDUUNBVUxRQUFJZ0ZCTDBjTkFDQVVRUUZxSVFGQjNRQWhFQXpiQWdzZ0FVRjJhaUlFUVJaTERkTUJRUUVnQkhSQmlZQ0FBbkZGRGRNQkRNb0NDd0pBSUFFaUFTQUNSZzBBSUFGQkFXb2hBVUhlQUNFUUROb0NDMEh5QUNFUURQSUNDd0pBSUFFaUZDQUNSdzBBUWZRQUlSQU04Z0lMSUJRaEFRSkFJQlF0QUFCQjhNeUFnQUJxTFFBQVFYOXFEZ1BKQXBRQ0FOUUJDMEhoQUNFUUROZ0NDd0pBSUFFaUZDQUNSZzBBQTBBQ1FDQVVMUUFBUWZES2dJQUFhaTBBQUNJQlFRTkdEUUFDUUNBQlFYOXFEZ0xMQWdEVkFRc2dGQ0VCUWQ4QUlSQU0yZ0lMSUJSQkFXb2lGQ0FDUncwQUMwSHpBQ0VRRFBFQ0MwSHpBQ0VRRFBBQ0N3SkFJQUVpQVNBQ1JnMEFJQUJCajRDQWdBQTJBZ2dnQUNBQk5nSUVJQUVoQVVIZ0FDRVFETmNDQzBIMUFDRVFETzhDQ3dKQUlBRWlBU0FDUncwQVFmWUFJUkFNN3dJTElBQkJqNENBZ0FBMkFnZ2dBQ0FCTmdJRUlBRWhBUXRCQXlFUUROUUNDd05BSUFFdEFBQkJJRWNOd3dJZ0FVRUJhaUlCSUFKSERRQUxRZmNBSVJBTTdBSUxBa0FnQVNJQklBSkhEUUJCK0FBaEVBenNBZ3NnQVMwQUFFRWdSdzNPQVNBQlFRRnFJUUVNN3dFTElBQWdBU0lCSUFJUXJJQ0FnQUFpRUEzT0FTQUJJUUVNamdJTEFrQWdBU0lFSUFKSERRQkIrZ0FoRUF6cUFnc2dCQzBBQUVITUFFY04wUUVnQkVFQmFpRUJRUk1oRUF6UEFRc0NRQ0FCSWdRZ0FrY05BRUg3QUNFUURPa0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFWcUlSQURRQ0FFTFFBQUlBRkI4TTZBZ0FCcUxRQUFSdzNRQVNBQlFRVkdEYzRCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWZzQUlSQU02QUlMQWtBZ0FTSUVJQUpIRFFCQi9BQWhFQXpvQWdzQ1FBSkFJQVF0QUFCQnZYOXFEZ3dBMFFIUkFkRUIwUUhSQWRFQjBRSFJBZEVCMFFFQjBRRUxJQVJCQVdvaEFVSG1BQ0VRRE04Q0N5QUVRUUZxSVFGQjV3QWhFQXpPQWdzQ1FDQUJJZ1FnQWtjTkFFSDlBQ0VRRE9jQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSHR6NENBQUdvdEFBQkhEYzhCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUg5QUNFUURPY0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFSQWhFQXpNQVFzQ1FDQUJJZ1FnQWtjTkFFSCtBQ0VRRE9ZQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUVZxSVJBQ1FBTkFJQVF0QUFBZ0FVSDJ6b0NBQUdvdEFBQkhEYzRCSUFGQkJVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUgrQUNFUURPWUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFSWWhFQXpMQVFzQ1FDQUJJZ1FnQWtjTkFFSC9BQ0VRRE9VQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUU5xSVJBQ1FBTkFJQVF0QUFBZ0FVSDh6b0NBQUdvdEFBQkhEYzBCSUFGQkEwWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUgvQUNFUURPVUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFRVWhFQXpLQVFzQ1FDQUJJZ1FnQWtjTkFFR0FBU0VRRE9RQ0N5QUVMUUFBUWRrQVJ3M0xBU0FFUVFGcUlRRkJDQ0VRRE1rQkN3SkFJQUVpQkNBQ1J3MEFRWUVCSVJBTTR3SUxBa0FDUUNBRUxRQUFRYkovYWc0REFNd0JBY3dCQ3lBRVFRRnFJUUZCNndBaEVBektBZ3NnQkVFQmFpRUJRZXdBSVJBTXlRSUxBa0FnQVNJRUlBSkhEUUJCZ2dFaEVBemlBZ3NDUUFKQUlBUXRBQUJCdUg5cURnZ0F5d0hMQWNzQnl3SExBY3NCQWNzQkN5QUVRUUZxSVFGQjZnQWhFQXpKQWdzZ0JFRUJhaUVCUWUwQUlSQU15QUlMQWtBZ0FTSUVJQUpIRFFCQmd3RWhFQXpoQWdzZ0FpQUVheUFBS0FJQUlnRnFJUkFnQkNBQmEwRUNhaUVVQWtBRFFDQUVMUUFBSUFGQmdNK0FnQUJxTFFBQVJ3M0pBU0FCUVFKR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJBMkFnQkJnd0VoRUF6aEFndEJBQ0VRSUFCQkFEWUNBQ0FVUVFGcUlRRU14Z0VMQWtBZ0FTSUVJQUpIRFFCQmhBRWhFQXpnQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUVhaUVRQWtBRFFDQUVMUUFBSUFGQmc4K0FnQUJxTFFBQVJ3M0lBU0FCUVFSR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJoQUVoRUF6Z0Fnc2dBRUVBTmdJQUlCQkJBV29oQVVFaklSQU14UUVMQWtBZ0FTSUVJQUpIRFFCQmhRRWhFQXpmQWdzQ1FBSkFJQVF0QUFCQnRIOXFEZ2dBeUFISUFjZ0J5QUhJQWNnQkFjZ0JDeUFFUVFGcUlRRkI3d0FoRUF6R0Fnc2dCRUVCYWlFQlFmQUFJUkFNeFFJTEFrQWdBU0lFSUFKSERRQkJoZ0VoRUF6ZUFnc2dCQzBBQUVIRkFFY054UUVnQkVFQmFpRUJESU1DQ3dKQUlBRWlCQ0FDUncwQVFZY0JJUkFNM1FJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBMm9oRUFKQUEwQWdCQzBBQUNBQlFZalBnSUFBYWkwQUFFY054UUVnQVVFRFJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWWNCSVJBTTNRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkxTRVFETUlCQ3dKQUlBRWlCQ0FDUncwQVFZZ0JJUkFNM0FJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJDR29oRUFKQUEwQWdCQzBBQUNBQlFkRFBnSUFBYWkwQUFFY054QUVnQVVFSVJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWWdCSVJBTTNBSUxJQUJCQURZQ0FDQVFRUUZxSVFGQktTRVFETUVCQ3dKQUlBRWlBU0FDUncwQVFZa0JJUkFNMndJTFFRRWhFQ0FCTFFBQVFkOEFSdzNBQVNBQlFRRnFJUUVNZ1FJTEFrQWdBU0lFSUFKSERRQkJpZ0VoRUF6YUFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUEwQWdCQzBBQUNBQlFZelBnSUFBYWkwQUFFY053UUVnQVVFQlJnMnZBaUFCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdLQVNFUUROa0NDd0pBSUFFaUJDQUNSdzBBUVlzQklSQU0yUUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFtb2hFQUpBQTBBZ0JDMEFBQ0FCUVk3UGdJQUFhaTBBQUVjTndRRWdBVUVDUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZc0JJUkFNMlFJTElBQkJBRFlDQUNBUVFRRnFJUUZCQWlFUURMNEJDd0pBSUFFaUJDQUNSdzBBUVl3QklSQU0yQUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWZEUGdJQUFhaTBBQUVjTndBRWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZd0JJUkFNMkFJTElBQkJBRFlDQUNBUVFRRnFJUUZCSHlFUURMMEJDd0pBSUFFaUJDQUNSdzBBUVkwQklSQU0xd0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWZMUGdJQUFhaTBBQUVjTnZ3RWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZMEJJUkFNMXdJTElBQkJBRFlDQUNBUVFRRnFJUUZCQ1NFUURMd0JDd0pBSUFFaUJDQUNSdzBBUVk0QklSQU0xZ0lMQWtBQ1FDQUVMUUFBUWJkL2FnNEhBTDhCdndHL0FiOEJ2d0VCdndFTElBUkJBV29oQVVINEFDRVFETDBDQ3lBRVFRRnFJUUZCK1FBaEVBeThBZ3NDUUNBQklnUWdBa2NOQUVHUEFTRVFETlVDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRVnFJUkFDUUFOQUlBUXRBQUFnQVVHUno0Q0FBR290QUFCSERiMEJJQUZCQlVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR1BBU0VRRE5VQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJnaEVBeTZBUXNDUUNBQklnUWdBa2NOQUVHUUFTRVFETlFDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVHWHo0Q0FBR290QUFCSERid0JJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR1FBU0VRRE5RQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJjaEVBeTVBUXNDUUNBQklnUWdBa2NOQUVHUkFTRVFETk1DQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRWnFJUkFDUUFOQUlBUXRBQUFnQVVHYXo0Q0FBR290QUFCSERic0JJQUZCQmtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR1JBU0VRRE5NQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJVaEVBeTRBUXNDUUNBQklnUWdBa2NOQUVHU0FTRVFETklDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRVnFJUkFDUUFOQUlBUXRBQUFnQVVHaHo0Q0FBR290QUFCSERib0JJQUZCQlVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR1NBU0VRRE5JQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVI0aEVBeTNBUXNDUUNBQklnUWdBa2NOQUVHVEFTRVFETkVDQ3lBRUxRQUFRY3dBUncyNEFTQUVRUUZxSVFGQkNpRVFETFlCQ3dKQUlBUWdBa2NOQUVHVUFTRVFETkFDQ3dKQUFrQWdCQzBBQUVHL2Yyb09Ed0M1QWJrQnVRRzVBYmtCdVFHNUFia0J1UUc1QWJrQnVRRzVBUUc1QVFzZ0JFRUJhaUVCUWY0QUlSQU10d0lMSUFSQkFXb2hBVUgvQUNFUURMWUNDd0pBSUFRZ0FrY05BRUdWQVNFUURNOENDd0pBQWtBZ0JDMEFBRUcvZjJvT0F3QzRBUUc0QVFzZ0JFRUJhaUVCUWYwQUlSQU10Z0lMSUFSQkFXb2hCRUdBQVNFUURMVUNDd0pBSUFRZ0FrY05BRUdXQVNFUURNNENDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFGcUlSQUNRQU5BSUFRdEFBQWdBVUduejRDQUFHb3RBQUJIRGJZQklBRkJBVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHV0FTRVFETTRDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUXNoRUF5ekFRc0NRQ0FFSUFKSERRQkJsd0VoRUF6TkFnc0NRQUpBQWtBQ1FDQUVMUUFBUVZOcURpTUF1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBUUc0QWJnQnVBRzRBYmdCQXJnQnVBRzRBUU80QVFzZ0JFRUJhaUVCUWZzQUlSQU10Z0lMSUFSQkFXb2hBVUg4QUNFUURMVUNDeUFFUVFGcUlRUkJnUUVoRUF5MEFnc2dCRUVCYWlFRVFZSUJJUkFNc3dJTEFrQWdCQ0FDUncwQVFaZ0JJUkFNekFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCR29oRUFKQUEwQWdCQzBBQUNBQlFhblBnSUFBYWkwQUFFY050QUVnQVVFRVJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWmdCSVJBTXpBSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkdTRVFETEVCQ3dKQUlBUWdBa2NOQUVHWkFTRVFETXNDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRVnFJUkFDUUFOQUlBUXRBQUFnQVVHdXo0Q0FBR290QUFCSERiTUJJQUZCQlVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR1pBU0VRRE1zQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVFZaEVBeXdBUXNDUUNBRUlBSkhEUUJCbWdFaEVBektBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBa0FEUUNBRUxRQUFJQUZCdE0rQWdBQnFMUUFBUncyeUFTQUJRUUZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQm1nRWhFQXpLQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVjSVJBTXJ3RUxBa0FnQkNBQ1J3MEFRWnNCSVJBTXlRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRYmJQZ0lBQWFpMEFBRWNOc1FFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpzQklSQU15UUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJKeUVRREs0QkN3SkFJQVFnQWtjTkFFR2NBU0VRRE1nQ0N3SkFBa0FnQkMwQUFFR3NmMm9PQWdBQnNRRUxJQVJCQVdvaEJFR0dBU0VRREs4Q0N5QUVRUUZxSVFSQmh3RWhFQXl1QWdzQ1FDQUVJQUpIRFFCQm5RRWhFQXpIQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQWtBRFFDQUVMUUFBSUFGQnVNK0FnQUJxTFFBQVJ3MnZBU0FCUVFGR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJuUUVoRUF6SEFnc2dBRUVBTmdJQUlCQkJBV29oQVVFbUlSQU1yQUVMQWtBZ0JDQUNSdzBBUVo0QklSQU14Z0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWJyUGdJQUFhaTBBQUVjTnJnRWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFaNEJJUkFNeGdJTElBQkJBRFlDQUNBUVFRRnFJUUZCQXlFUURLc0JDd0pBSUFRZ0FrY05BRUdmQVNFUURNVUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUh0ejRDQUFHb3RBQUJIRGEwQklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHZkFTRVFETVVDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUXdoRUF5cUFRc0NRQ0FFSUFKSERRQkJvQUVoRUF6RUFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVEYWlFUUFrQURRQ0FFTFFBQUlBRkJ2TStBZ0FCcUxRQUFSdzJzQVNBQlFRTkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCb0FFaEVBekVBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRU5JUkFNcVFFTEFrQWdCQ0FDUncwQVFhRUJJUkFNd3dJTEFrQUNRQ0FFTFFBQVFicC9hZzRMQUt3QnJBR3NBYXdCckFHc0Fhd0JyQUdzQVFHc0FRc2dCRUVCYWlFRVFZc0JJUkFNcWdJTElBUkJBV29oQkVHTUFTRVFES2tDQ3dKQUlBUWdBa2NOQUVHaUFTRVFETUlDQ3lBRUxRQUFRZEFBUncycEFTQUVRUUZxSVFRTTZRRUxBa0FnQkNBQ1J3MEFRYU1CSVJBTXdRSUxBa0FDUUNBRUxRQUFRYmQvYWc0SEFhb0JxZ0dxQWFvQnFnRUFxZ0VMSUFSQkFXb2hCRUdPQVNFUURLZ0NDeUFFUVFGcUlRRkJJaUVRREtZQkN3SkFJQVFnQWtjTkFFR2tBU0VRRE1BQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUZxSVJBQ1FBTkFJQVF0QUFBZ0FVSEF6NENBQUdvdEFBQkhEYWdCSUFGQkFVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdrQVNFUURNQUNDeUFBUVFBMkFnQWdFRUVCYWlFQlFSMGhFQXlsQVFzQ1FDQUVJQUpIRFFCQnBRRWhFQXkvQWdzQ1FBSkFJQVF0QUFCQnJuOXFEZ01BcUFFQnFBRUxJQVJCQVdvaEJFR1FBU0VRREtZQ0N5QUVRUUZxSVFGQkJDRVFES1FCQ3dKQUlBUWdBa2NOQUVHbUFTRVFETDRDQ3dKQUFrQUNRQUpBQWtBZ0JDMEFBRUcvZjJvT0ZRQ3FBYW9CcWdHcUFhb0JxZ0dxQWFvQnFnR3FBUUdxQWFvQkFxb0JxZ0VEcWdHcUFRU3FBUXNnQkVFQmFpRUVRWWdCSVJBTXFBSUxJQVJCQVdvaEJFR0pBU0VRREtjQ0N5QUVRUUZxSVFSQmlnRWhFQXltQWdzZ0JFRUJhaUVFUVk4QklSQU1wUUlMSUFSQkFXb2hCRUdSQVNFUURLUUNDd0pBSUFRZ0FrY05BRUduQVNFUURMMENDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFKcUlSQUNRQU5BSUFRdEFBQWdBVUh0ejRDQUFHb3RBQUJIRGFVQklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHbkFTRVFETDBDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUkVoRUF5aUFRc0NRQ0FFSUFKSERRQkJxQUVoRUF5OEFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVDYWlFUUFrQURRQ0FFTFFBQUlBRkJ3cytBZ0FCcUxRQUFSdzJrQVNBQlFRSkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCcUFFaEVBeThBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRXNJUkFNb1FFTEFrQWdCQ0FDUncwQVFha0JJUkFNdXdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCR29oRUFKQUEwQWdCQzBBQUNBQlFjWFBnSUFBYWkwQUFFY05vd0VnQVVFRVJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYWtCSVJBTXV3SUxJQUJCQURZQ0FDQVFRUUZxSVFGQkt5RVFES0FCQ3dKQUlBUWdBa2NOQUVHcUFTRVFETG9DQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIS3o0Q0FBR290QUFCSERhSUJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR3FBU0VRRExvQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJRaEVBeWZBUXNDUUNBRUlBSkhEUUJCcXdFaEVBeTVBZ3NDUUFKQUFrQUNRQ0FFTFFBQVFiNS9hZzRQQUFFQ3BBR2tBYVFCcEFHa0FhUUJwQUdrQWFRQnBBR2tBUU9rQVFzZ0JFRUJhaUVFUVpNQklSQU1vZ0lMSUFSQkFXb2hCRUdVQVNFUURLRUNDeUFFUVFGcUlRUkJsUUVoRUF5Z0Fnc2dCRUVCYWlFRVFaWUJJUkFNbndJTEFrQWdCQ0FDUncwQVFhd0JJUkFNdUFJTElBUXRBQUJCeFFCSERaOEJJQVJCQVdvaEJBemdBUXNDUUNBRUlBSkhEUUJCclFFaEVBeTNBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQ2FpRVFBa0FEUUNBRUxRQUFJQUZCemMrQWdBQnFMUUFBUncyZkFTQUJRUUpHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnJRRWhFQXkzQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVPSVJBTW5BRUxBa0FnQkNBQ1J3MEFRYTRCSVJBTXRnSUxJQVF0QUFCQjBBQkhEWjBCSUFSQkFXb2hBVUVsSVJBTW13RUxBa0FnQkNBQ1J3MEFRYThCSVJBTXRRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQ0dvaEVBSkFBMEFnQkMwQUFDQUJRZERQZ0lBQWFpMEFBRWNOblFFZ0FVRUlSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWE4QklSQU10UUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJLaUVRREpvQkN3SkFJQVFnQWtjTkFFR3dBU0VRRExRQ0N3SkFBa0FnQkMwQUFFR3JmMm9PQ3dDZEFaMEJuUUdkQVowQm5RR2RBWjBCblFFQm5RRUxJQVJCQVdvaEJFR2FBU0VRREpzQ0N5QUVRUUZxSVFSQm13RWhFQXlhQWdzQ1FDQUVJQUpIRFFCQnNRRWhFQXl6QWdzQ1FBSkFJQVF0QUFCQnYzOXFEaFFBbkFHY0Fad0JuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BR2NBWndCQVp3QkN5QUVRUUZxSVFSQm1RRWhFQXlhQWdzZ0JFRUJhaUVFUVp3QklSQU1tUUlMQWtBZ0JDQUNSdzBBUWJJQklSQU1zZ0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkEyb2hFQUpBQTBBZ0JDMEFBQ0FCUWRuUGdJQUFhaTBBQUVjTm1nRWdBVUVEUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFiSUJJUkFNc2dJTElBQkJBRFlDQUNBUVFRRnFJUUZCSVNFUURKY0JDd0pBSUFRZ0FrY05BRUd6QVNFUURMRUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFacUlSQUNRQU5BSUFRdEFBQWdBVUhkejRDQUFHb3RBQUJIRFprQklBRkJCa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHekFTRVFETEVDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUm9oRUF5V0FRc0NRQ0FFSUFKSERRQkJ0QUVoRUF5d0Fnc0NRQUpBQWtBZ0JDMEFBRUc3ZjJvT0VRQ2FBWm9CbWdHYUFab0JtZ0dhQVpvQm1nRUJtZ0dhQVpvQm1nR2FBUUthQVFzZ0JFRUJhaUVFUVowQklSQU1tQUlMSUFSQkFXb2hCRUdlQVNFUURKY0NDeUFFUVFGcUlRUkJud0VoRUF5V0Fnc0NRQ0FFSUFKSERRQkJ0UUVoRUF5dkFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVGYWlFUUFrQURRQ0FFTFFBQUlBRkI1TStBZ0FCcUxRQUFSdzJYQVNBQlFRVkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCdFFFaEVBeXZBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRW9JUkFNbEFFTEFrQWdCQ0FDUncwQVFiWUJJUkFNcmdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBbW9oRUFKQUEwQWdCQzBBQUNBQlFlclBnSUFBYWkwQUFFY05sZ0VnQVVFQ1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYllCSVJBTXJnSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkJ5RVFESk1CQ3dKQUlBUWdBa2NOQUVHM0FTRVFESzBDQ3dKQUFrQWdCQzBBQUVHN2Yyb09EZ0NXQVpZQmxnR1dBWllCbGdHV0FaWUJsZ0dXQVpZQmxnRUJsZ0VMSUFSQkFXb2hCRUdoQVNFUURKUUNDeUFFUVFGcUlRUkJvZ0VoRUF5VEFnc0NRQ0FFSUFKSERRQkJ1QUVoRUF5c0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVDYWlFUUFrQURRQ0FFTFFBQUlBRkI3YytBZ0FCcUxRQUFSdzJVQVNBQlFRSkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCdUFFaEVBeXNBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRVNJUkFNa1FFTEFrQWdCQ0FDUncwQVFia0JJUkFNcXdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFmRFBnSUFBYWkwQUFFY05rd0VnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYmtCSVJBTXF3SUxJQUJCQURZQ0FDQVFRUUZxSVFGQklDRVFESkFCQ3dKQUlBUWdBa2NOQUVHNkFTRVFES29DQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRRnFJUkFDUUFOQUlBUXRBQUFnQVVIeXo0Q0FBR290QUFCSERaSUJJQUZCQVVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFRzZBU0VRREtvQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVE4aEVBeVBBUXNDUUNBRUlBSkhEUUJCdXdFaEVBeXBBZ3NDUUFKQUlBUXRBQUJCdDM5cURnY0FrZ0dTQVpJQmtnR1NBUUdTQVFzZ0JFRUJhaUVFUWFVQklSQU1rQUlMSUFSQkFXb2hCRUdtQVNFUURJOENDd0pBSUFRZ0FrY05BRUc4QVNFUURLZ0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFkcUlSQUNRQU5BSUFRdEFBQWdBVUgwejRDQUFHb3RBQUJIRFpBQklBRkJCMFlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHOEFTRVFES2dDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRUnNoRUF5TkFRc0NRQ0FFSUFKSERRQkJ2UUVoRUF5bkFnc0NRQUpBQWtBZ0JDMEFBRUcrZjJvT0VnQ1JBWkVCa1FHUkFaRUJrUUdSQVpFQmtRRUJrUUdSQVpFQmtRR1JBWkVCQXBFQkN5QUVRUUZxSVFSQnBBRWhFQXlQQWdzZ0JFRUJhaUVFUWFjQklSQU1qZ0lMSUFSQkFXb2hCRUdvQVNFUURJMENDd0pBSUFRZ0FrY05BRUcrQVNFUURLWUNDeUFFTFFBQVFjNEFSdzJOQVNBRVFRRnFJUVFNendFTEFrQWdCQ0FDUncwQVFiOEJJUkFNcFFJTEFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FnQkMwQUFFRy9mMm9PRlFBQkFnT2NBUVFGQnB3Qm5BR2NBUWNJQ1FvTG5BRU1EUTRQbkFFTElBUkJBV29oQVVIb0FDRVFESm9DQ3lBRVFRRnFJUUZCNlFBaEVBeVpBZ3NnQkVFQmFpRUJRZTRBSVJBTW1BSUxJQVJCQVdvaEFVSHlBQ0VRREpjQ0N5QUVRUUZxSVFGQjh3QWhFQXlXQWdzZ0JFRUJhaUVCUWZZQUlSQU1sUUlMSUFSQkFXb2hBVUgzQUNFUURKUUNDeUFFUVFGcUlRRkIrZ0FoRUF5VEFnc2dCRUVCYWlFRVFZTUJJUkFNa2dJTElBUkJBV29oQkVHRUFTRVFESkVDQ3lBRVFRRnFJUVJCaFFFaEVBeVFBZ3NnQkVFQmFpRUVRWklCSVJBTWp3SUxJQVJCQVdvaEJFR1lBU0VRREk0Q0N5QUVRUUZxSVFSQm9BRWhFQXlOQWdzZ0JFRUJhaUVFUWFNQklSQU1qQUlMSUFSQkFXb2hCRUdxQVNFUURJc0NDd0pBSUFRZ0FrWU5BQ0FBUVpDQWdJQUFOZ0lJSUFBZ0JEWUNCRUdyQVNFUURJc0NDMEhBQVNFUURLTUNDeUFBSUFVZ0FoQ3FnSUNBQUNJQkRZc0JJQVVoQVF4Y0N3SkFJQVlnQWtZTkFDQUdRUUZxSVFVTWpRRUxRY0lCSVJBTW9RSUxBMEFDUUNBUUxRQUFRWFpxRGdTTUFRQUFqd0VBQ3lBUVFRRnFJaEFnQWtjTkFBdEJ3d0VoRUF5Z0Fnc0NRQ0FISUFKR0RRQWdBRUdSZ0lDQUFEWUNDQ0FBSUFjMkFnUWdCeUVCUVFFaEVBeUhBZ3RCeEFFaEVBeWZBZ3NDUUNBSElBSkhEUUJCeFFFaEVBeWZBZ3NDUUFKQUlBY3RBQUJCZG1vT0JBSE9BYzRCQU00QkN5QUhRUUZxSVFZTWpRRUxJQWRCQVdvaEJReUpBUXNDUUNBSElBSkhEUUJCeGdFaEVBeWVBZ3NDUUFKQUlBY3RBQUJCZG1vT0Z3R1BBWThCQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVFDUEFRc2dCMEVCYWlFSEMwR3dBU0VRRElRQ0N3SkFJQWdnQWtjTkFFSElBU0VRREowQ0N5QUlMUUFBUVNCSERZMEJJQUJCQURzQk1pQUlRUUZxSVFGQnN3RWhFQXlEQWdzZ0FTRVhBa0FEUUNBWElnY2dBa1lOQVNBSExRQUFRVkJxUWY4QmNTSVFRUXBQRGN3QkFrQWdBQzhCTWlJVVFaa3pTdzBBSUFBZ0ZFRUtiQ0lVT3dFeUlCQkIvLzhEY3lBVVFmNy9BM0ZKRFFBZ0IwRUJhaUVYSUFBZ0ZDQVFhaUlRT3dFeUlCQkIvLzhEY1VIb0Iwa05BUXNMUVFBaEVDQUFRUUEyQWh3Z0FFSEJpWUNBQURZQ0VDQUFRUTAyQWd3Z0FDQUhRUUZxTmdJVURKd0NDMEhIQVNFUURKc0NDeUFBSUFnZ0FoQ3VnSUNBQUNJUVJRM0tBU0FRUVJWSERZd0JJQUJCeUFFMkFod2dBQ0FJTmdJVUlBQkJ5WmVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXlhQWdzQ1FDQUpJQUpIRFFCQnpBRWhFQXlhQWd0QkFDRVVRUUVoRjBFQklSWkJBQ0VRQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFrdEFBQkJVR29PQ3BZQmxRRUFBUUlEQkFVR0NKY0JDMEVDSVJBTUJndEJBeUVRREFVTFFRUWhFQXdFQzBFRklSQU1Bd3RCQmlFUURBSUxRUWNoRUF3QkMwRUlJUkFMUVFBaEYwRUFJUlpCQUNFVURJNEJDMEVKSVJCQkFTRVVRUUFoRjBFQUlSWU1qUUVMQWtBZ0NpQUNSdzBBUWM0QklSQU1tUUlMSUFvdEFBQkJMa2NOamdFZ0NrRUJhaUVKRE1vQkN5QUxJQUpIRFk0QlFkQUJJUkFNbHdJTEFrQWdDeUFDUmcwQUlBQkJqb0NBZ0FBMkFnZ2dBQ0FMTmdJRVFiY0JJUkFNL2dFTFFkRUJJUkFNbGdJTEFrQWdCQ0FDUncwQVFkSUJJUkFNbGdJTElBSWdCR3NnQUNnQ0FDSVFhaUVVSUFRZ0VHdEJCR29oQ3dOQUlBUXRBQUFnRUVIOHo0Q0FBR290QUFCSERZNEJJQkJCQkVZTjZRRWdFRUVCYWlFUUlBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkIwZ0VoRUF5VkFnc2dBQ0FNSUFJUXJJQ0FnQUFpQVEyTkFTQU1JUUVNdUFFTEFrQWdCQ0FDUncwQVFkUUJJUkFNbEFJTElBSWdCR3NnQUNnQ0FDSVFhaUVVSUFRZ0VHdEJBV29oREFOQUlBUXRBQUFnRUVHQjBJQ0FBR290QUFCSERZOEJJQkJCQVVZTmpnRWdFRUVCYWlFUUlBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkIxQUVoRUF5VEFnc0NRQ0FFSUFKSERRQkIxZ0VoRUF5VEFnc2dBaUFFYXlBQUtBSUFJaEJxSVJRZ0JDQVFhMEVDYWlFTEEwQWdCQzBBQUNBUVFZUFFnSUFBYWkwQUFFY05qZ0VnRUVFQ1JnMlFBU0FRUVFGcUlSQWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUhXQVNFUURKSUNDd0pBSUFRZ0FrY05BRUhYQVNFUURKSUNDd0pBQWtBZ0JDMEFBRUc3ZjJvT0VBQ1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJBWThCQ3lBRVFRRnFJUVJCdXdFaEVBejVBUXNnQkVFQmFpRUVRYndCSVJBTStBRUxBa0FnQkNBQ1J3MEFRZGdCSVJBTWtRSUxJQVF0QUFCQnlBQkhEWXdCSUFSQkFXb2hCQXpFQVFzQ1FDQUVJQUpHRFFBZ0FFR1FnSUNBQURZQ0NDQUFJQVEyQWdSQnZnRWhFQXozQVF0QjJRRWhFQXlQQWdzQ1FDQUVJQUpIRFFCQjJnRWhFQXlQQWdzZ0JDMEFBRUhJQUVZTnd3RWdBRUVCT2dBb0RMa0JDeUFBUVFJNkFDOGdBQ0FFSUFJUXBvQ0FnQUFpRUEyTkFVSENBU0VRRFBRQkN5QUFMUUFvUVg5cURnSzNBYmtCdUFFTEEwQUNRQ0FFTFFBQVFYWnFEZ1FBamdHT0FRQ09BUXNnQkVFQmFpSUVJQUpIRFFBTFFkMEJJUkFNaXdJTElBQkJBRG9BTHlBQUxRQXRRUVJ4UlEyRUFnc2dBRUVBT2dBdklBQkJBVG9BTkNBQklRRU1qQUVMSUJCQkZVWU4yZ0VnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYWVPZ0lBQU5nSVFJQUJCRWpZQ0RFRUFJUkFNaUFJTEFrQWdBQ0FRSUFJUXRJQ0FnQUFpQkEwQUlCQWhBUXlCQWdzQ1FDQUVRUlZIRFFBZ0FFRUROZ0ljSUFBZ0VEWUNGQ0FBUWJDWWdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTWlBSUxJQUJCQURZQ0hDQUFJQkEyQWhRZ0FFR25qb0NBQURZQ0VDQUFRUkkyQWd4QkFDRVFESWNDQ3lBUVFSVkdEZFlCSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhhallDQUFEWUNFQ0FBUVJRMkFneEJBQ0VRRElZQ0N5QUFLQUlFSVJjZ0FFRUFOZ0lFSUJBZ0VhZHFJaFloQVNBQUlCY2dFQ0FXSUJRYkloQVF0WUNBZ0FBaUZFVU5qUUVnQUVFSE5nSWNJQUFnRURZQ0ZDQUFJQlEyQWd4QkFDRVFESVVDQ3lBQUlBQXZBVEJCZ0FGeU93RXdJQUVoQVF0QktpRVFET29CQ3lBUVFSVkdEZEVCSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdEaklDQUFEWUNFQ0FBUVJNMkFneEJBQ0VRRElJQ0N5QVFRUlZHRGM4QklBQkJBRFlDSENBQUlBRTJBaFFnQUVHYWo0Q0FBRFlDRUNBQVFTSTJBZ3hCQUNFUURJRUNDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXQ0Q0FnQUFpRUEwQUlBRkJBV29oQVF5TkFRc2dBRUVNTmdJY0lBQWdFRFlDRENBQUlBRkJBV28yQWhSQkFDRVFESUFDQ3lBUVFSVkdEY3dCSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdhajRDQUFEWUNFQ0FBUVNJMkFneEJBQ0VRRFA4QkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRdDRDQWdBQWlFQTBBSUFGQkFXb2hBUXlNQVFzZ0FFRU5OZ0ljSUFBZ0VEWUNEQ0FBSUFGQkFXbzJBaFJCQUNFUURQNEJDeUFRUVJWR0Rja0JJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSEdqSUNBQURZQ0VDQUFRU00yQWd4QkFDRVFEUDBCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVF1WUNBZ0FBaUVBMEFJQUZCQVdvaEFReUxBUXNnQUVFT05nSWNJQUFnRURZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFB3QkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQndKV0FnQUEyQWhBZ0FFRUNOZ0lNUVFBaEVBejdBUXNnRUVFVlJnM0ZBU0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJ4b3lBZ0FBMkFoQWdBRUVqTmdJTVFRQWhFQXo2QVFzZ0FFRVFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRRFBrQkN5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRdVlDQWdBQWlCQTBBSUFGQkFXb2hBUXp4QVFzZ0FFRVJOZ0ljSUFBZ0JEWUNEQ0FBSUFGQkFXbzJBaFJCQUNFUURQZ0JDeUFRUVJWR0RjRUJJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFSEdqSUNBQURZQ0VDQUFRU00yQWd4QkFDRVFEUGNCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVF1WUNBZ0FBaUVBMEFJQUZCQVdvaEFReUlBUXNnQUVFVE5nSWNJQUFnRURZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFBZQkN5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRdVlDQWdBQWlCQTBBSUFGQkFXb2hBUXp0QVFzZ0FFRVVOZ0ljSUFBZ0JEWUNEQ0FBSUFGQkFXbzJBaFJCQUNFUURQVUJDeUFRUVJWR0RiMEJJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR2FqNENBQURZQ0VDQUFRU0kyQWd4QkFDRVFEUFFCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVF0NENBZ0FBaUVBMEFJQUZCQVdvaEFReUdBUXNnQUVFV05nSWNJQUFnRURZQ0RDQUFJQUZCQVdvMkFoUkJBQ0VRRFBNQkN5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRdDRDQWdBQWlCQTBBSUFGQkFXb2hBUXpwQVFzZ0FFRVhOZ0ljSUFBZ0JEWUNEQ0FBSUFGQkFXbzJBaFJCQUNFUURQSUJDeUFBUVFBMkFod2dBQ0FCTmdJVUlBQkJ6Wk9BZ0FBMkFoQWdBRUVNTmdJTVFRQWhFQXp4QVF0Q0FTRVJDeUFRUVFGcUlRRUNRQ0FBS1FNZ0loSkMvLy8vLy8vLy8vOFBWZzBBSUFBZ0VrSUVoaUFSaERjRElDQUJJUUVNaEFFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVHdGlZQ0FBRFlDRUNBQVFRdzJBZ3hCQUNFUURPOEJDeUFBUVFBMkFod2dBQ0FRTmdJVUlBQkJ6Wk9BZ0FBMkFoQWdBRUVNTmdJTVFRQWhFQXp1QVFzZ0FDZ0NCQ0VYSUFCQkFEWUNCQ0FRSUJHbmFpSVdJUUVnQUNBWElCQWdGaUFVR3lJUUVMV0FnSUFBSWhSRkRYTWdBRUVGTmdJY0lBQWdFRFlDRkNBQUlCUTJBZ3hCQUNFUURPMEJDeUFBUVFBMkFod2dBQ0FRTmdJVUlBQkJxcHlBZ0FBMkFoQWdBRUVQTmdJTVFRQWhFQXpzQVFzZ0FDQVFJQUlRdElDQWdBQWlBUTBCSUJBaEFRdEJEaUVRRE5FQkN3SkFJQUZCRlVjTkFDQUFRUUkyQWh3Z0FDQVFOZ0lVSUFCQnNKaUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBenFBUXNnQUVFQU5nSWNJQUFnRURZQ0ZDQUFRYWVPZ0lBQU5nSVFJQUJCRWpZQ0RFRUFJUkFNNlFFTElBRkJBV29oRUFKQUlBQXZBVEFpQVVHQUFYRkZEUUFDUUNBQUlCQWdBaEM3Z0lDQUFDSUJEUUFnRUNFQkRIQUxJQUZCRlVjTnVnRWdBRUVGTmdJY0lBQWdFRFlDRkNBQVFmbVhnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU02UUVMQWtBZ0FVR2dCSEZCb0FSSERRQWdBQzBBTFVFQ2NRMEFJQUJCQURZQ0hDQUFJQkEyQWhRZ0FFR1drNENBQURZQ0VDQUFRUVEyQWd4QkFDRVFET2tCQ3lBQUlCQWdBaEM5Z0lDQUFCb2dFQ0VCQWtBQ1FBSkFBa0FDUUNBQUlCQWdBaEN6Z0lDQUFBNFdBZ0VBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQXdRTElBQkJBVG9BTGdzZ0FDQUFMd0V3UWNBQWNqc0JNQ0FRSVFFTFFTWWhFQXpSQVFzZ0FFRWpOZ0ljSUFBZ0VEWUNGQ0FBUWFXV2dJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTTZRRUxJQUJCQURZQ0hDQUFJQkEyQWhRZ0FFSFZpNENBQURZQ0VDQUFRUkUyQWd4QkFDRVFET2dCQ3lBQUxRQXRRUUZ4UlEwQlFjTUJJUkFNemdFTEFrQWdEU0FDUmcwQUEwQUNRQ0FOTFFBQVFTQkdEUUFnRFNFQkRNUUJDeUFOUVFGcUlnMGdBa2NOQUF0QkpTRVFET2NCQzBFbElSQU01Z0VMSUFBb0FnUWhCQ0FBUVFBMkFnUWdBQ0FFSUEwUXI0Q0FnQUFpQkVVTnJRRWdBRUVtTmdJY0lBQWdCRFlDRENBQUlBMUJBV28yQWhSQkFDRVFET1VCQ3lBUVFSVkdEYXNCSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUg5allDQUFEWUNFQ0FBUVIwMkFneEJBQ0VRRE9RQkN5QUFRU2MyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTTR3RUxJQkFoQVVFQklSUUNRQUpBQWtBQ1FBSkFBa0FDUUNBQUxRQXNRWDVxRGdjR0JRVURBUUlBQlFzZ0FDQUFMd0V3UVFoeU93RXdEQU1MUVFJaEZBd0JDMEVFSVJRTElBQkJBVG9BTENBQUlBQXZBVEFnRkhJN0FUQUxJQkFoQVF0Qkt5RVFETW9CQ3lBQVFRQTJBaHdnQUNBUU5nSVVJQUJCcTVLQWdBQTJBaEFnQUVFTE5nSU1RUUFoRUF6aUFRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFlR1BnSUFBTmdJUUlBQkJDallDREVFQUlSQU00UUVMSUFCQkFEb0FMQ0FRSVFFTXZRRUxJQkFoQVVFQklSUUNRQUpBQWtBQ1FBSkFJQUF0QUN4QmUyb09CQU1CQWdBRkN5QUFJQUF2QVRCQkNISTdBVEFNQXd0QkFpRVVEQUVMUVFRaEZBc2dBRUVCT2dBc0lBQWdBQzhCTUNBVWNqc0JNQXNnRUNFQkMwRXBJUkFNeFFFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVId2xJQ0FBRFlDRUNBQVFRTTJBZ3hCQUNFUUROMEJDd0pBSUE0dEFBQkJEVWNOQUNBQUtBSUVJUUVnQUVFQU5nSUVBa0FnQUNBQklBNFFzWUNBZ0FBaUFRMEFJQTVCQVdvaEFReDFDeUFBUVN3MkFod2dBQ0FCTmdJTUlBQWdEa0VCYWpZQ0ZFRUFJUkFNM1FFTElBQXRBQzFCQVhGRkRRRkJ4QUVoRUF6REFRc0NRQ0FPSUFKSERRQkJMU0VRRE53QkN3SkFBa0FEUUFKQUlBNHRBQUJCZG1vT0JBSUFBQU1BQ3lBT1FRRnFJZzRnQWtjTkFBdEJMU0VRRE4wQkN5QUFLQUlFSVFFZ0FFRUFOZ0lFQWtBZ0FDQUJJQTRRc1lDQWdBQWlBUTBBSUE0aEFReDBDeUFBUVN3MkFod2dBQ0FPTmdJVUlBQWdBVFlDREVFQUlSQU0zQUVMSUFBb0FnUWhBU0FBUVFBMkFnUUNRQ0FBSUFFZ0RoQ3hnSUNBQUNJQkRRQWdEa0VCYWlFQkRITUxJQUJCTERZQ0hDQUFJQUUyQWd3Z0FDQU9RUUZxTmdJVVFRQWhFQXpiQVFzZ0FDZ0NCQ0VFSUFCQkFEWUNCQ0FBSUFRZ0RoQ3hnSUNBQUNJRURhQUJJQTRoQVF6T0FRc2dFRUVzUncwQklBRkJBV29oRUVFQklRRUNRQUpBQWtBQ1FBSkFJQUF0QUN4QmUyb09CQU1CQWdRQUN5QVFJUUVNQkF0QkFpRUJEQUVMUVFRaEFRc2dBRUVCT2dBc0lBQWdBQzhCTUNBQmNqc0JNQ0FRSVFFTUFRc2dBQ0FBTHdFd1FRaHlPd0V3SUJBaEFRdEJPU0VRREw4QkN5QUFRUUE2QUN3Z0FTRUJDMEUwSVJBTXZRRUxJQUFnQUM4Qk1FRWdjanNCTUNBQklRRU1BZ3NnQUNnQ0JDRUVJQUJCQURZQ0JBSkFJQUFnQkNBQkVMR0FnSUFBSWdRTkFDQUJJUUVNeHdFTElBQkJOellDSENBQUlBRTJBaFFnQUNBRU5nSU1RUUFoRUF6VUFRc2dBRUVJT2dBc0lBRWhBUXRCTUNFUURMa0JDd0pBSUFBdEFDaEJBVVlOQUNBQklRRU1CQXNnQUMwQUxVRUljVVVOa3dFZ0FTRUJEQU1MSUFBdEFEQkJJSEVObEFGQnhRRWhFQXkzQVFzQ1FDQVBJQUpHRFFBQ1FBTkFBa0FnRHkwQUFFRlFhaUlCUWY4QmNVRUtTUTBBSUE4aEFVRTFJUkFNdWdFTElBQXBBeUFpRVVLWnMrYk1tYlBtekJsV0RRRWdBQ0FSUWdwK0loRTNBeUFnRVNBQnJVTC9BWU1pRWtKL2hWWU5BU0FBSUJFZ0VudzNBeUFnRDBFQmFpSVBJQUpIRFFBTFFUa2hFQXpSQVFzZ0FDZ0NCQ0VDSUFCQkFEWUNCQ0FBSUFJZ0QwRUJhaUlFRUxHQWdJQUFJZ0lObFFFZ0JDRUJETU1CQzBFNUlSQU16d0VMQWtBZ0FDOEJNQ0lCUVFoeFJRMEFJQUF0QUNoQkFVY05BQ0FBTFFBdFFRaHhSUTJRQVFzZ0FDQUJRZmY3QTNGQmdBUnlPd0V3SUE4aEFRdEJOeUVRRExRQkN5QUFJQUF2QVRCQkVISTdBVEFNcXdFTElCQkJGVVlOaXdFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWZDT2dJQUFOZ0lRSUFCQkhEWUNERUVBSVJBTXl3RUxJQUJCd3dBMkFod2dBQ0FCTmdJTUlBQWdEVUVCYWpZQ0ZFRUFJUkFNeWdFTEFrQWdBUzBBQUVFNlJ3MEFJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDdmdJQ0FBQ0lRRFFBZ0FVRUJhaUVCREdNTElBQkJ3d0EyQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU15Z0VMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUd4a1lDQUFEWUNFQ0FBUVFvMkFneEJBQ0VRRE1rQkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQm9KbUFnQUEyQWhBZ0FFRWVOZ0lNUVFBaEVBeklBUXNnQUVFQU5nSUFDeUFBUVlBU093RXFJQUFnRjBFQmFpSUJJQUlRcUlDQWdBQWlFQTBCSUFFaEFRdEJ4d0FoRUF5c0FRc2dFRUVWUncyREFTQUFRZEVBTmdJY0lBQWdBVFlDRkNBQVFlT1hnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU14QUVMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREY0TElBQkIwZ0EyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXd3RUxJQUJCQURZQ0hDQUFJQlEyQWhRZ0FFSEJxSUNBQURZQ0VDQUFRUWMyQWd3Z0FFRUFOZ0lBUVFBaEVBekNBUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNWFFzZ0FFSFRBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF6QkFRdEJBQ0VRSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdBa1lDQUFEWUNFQ0FBUVFrMkFnd013QUVMSUJCQkZVWU5mU0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJsSTJBZ0FBMkFoQWdBRUVoTmdJTVFRQWhFQXkvQVF0QkFTRVdRUUFoRjBFQUlSUkJBU0VRQ3lBQUlCQTZBQ3NnQVVFQmFpRUJBa0FDUUNBQUxRQXRRUkJ4RFFBQ1FBSkFBa0FnQUMwQUtnNERBUUFDQkFzZ0ZrVU5Bd3dDQ3lBVURRRU1BZ3NnRjBVTkFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUsyQWdJQUFJaEFOQUNBQklRRU1YQXNnQUVIWUFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXkrQVFzZ0FDZ0NCQ0VFSUFCQkFEWUNCQUpBSUFBZ0JDQUJFSzJBZ0lBQUlnUU5BQ0FCSVFFTXJRRUxJQUJCMlFBMkFod2dBQ0FCTmdJVUlBQWdCRFlDREVFQUlSQU12UUVMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQ3RnSUNBQUNJRURRQWdBU0VCREtzQkN5QUFRZG9BTmdJY0lBQWdBVFlDRkNBQUlBUTJBZ3hCQUNFUURMd0JDeUFBS0FJRUlRUWdBRUVBTmdJRUFrQWdBQ0FFSUFFUXJZQ0FnQUFpQkEwQUlBRWhBUXlwQVFzZ0FFSGNBRFlDSENBQUlBRTJBaFFnQUNBRU5nSU1RUUFoRUF5N0FRc0NRQ0FCTFFBQVFWQnFJaEJCL3dGeFFRcFBEUUFnQUNBUU9nQXFJQUZCQVdvaEFVSFBBQ0VRREtJQkN5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRcllDQWdBQWlCQTBBSUFFaEFReW5BUXNnQUVIZUFEWUNIQ0FBSUFFMkFoUWdBQ0FFTmdJTVFRQWhFQXk2QVFzZ0FFRUFOZ0lBSUJkQkFXb2hBUUpBSUFBdEFDbEJJMDhOQUNBQklRRU1XUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZE9KZ0lBQU5nSVFJQUJCQ0RZQ0RFRUFJUkFNdVFFTElBQkJBRFlDQUF0QkFDRVFJQUJCQURZQ0hDQUFJQUUyQWhRZ0FFR1FzNENBQURZQ0VDQUFRUWcyQWd3TXR3RUxJQUJCQURZQ0FDQVhRUUZxSVFFQ1FDQUFMUUFwUVNGSERRQWdBU0VCREZZTElBQkJBRFlDSENBQUlBRTJBaFFnQUVHYmlvQ0FBRFlDRUNBQVFRZzJBZ3hCQUNFUURMWUJDeUFBUVFBMkFnQWdGMEVCYWlFQkFrQWdBQzBBS1NJUVFWMXFRUXRQRFFBZ0FTRUJERlVMQWtBZ0VFRUdTdzBBUVFFZ0VIUkJ5Z0J4UlEwQUlBRWhBUXhWQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFmZUpnSUFBTmdJUUlBQkJDRFlDREF5MUFRc2dFRUVWUmcxeElBQkJBRFlDSENBQUlBRTJBaFFnQUVHNWpZQ0FBRFlDRUNBQVFSbzJBZ3hCQUNFUURMUUJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhVQ3lBQVFlVUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRRExNQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReE5DeUFBUWRJQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETElCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4TkN5QUFRZE1BTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURMRUJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhSQ3lBQVFlVUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRRExBQkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnhvcUFnQUEyQWhBZ0FFRUhOZ0lNUVFBaEVBeXZBUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNU1FzZ0FFSFNBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF5dUFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1TUXNnQUVIVEFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXl0QVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVRRc2dBRUhsQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeXNBUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZHlJZ0lBQU5nSVFJQUJCQnpZQ0RFRUFJUkFNcXdFTElCQkJQMGNOQVNBQlFRRnFJUUVMUVFVaEVBeVFBUXRCQUNFUUlBQkJBRFlDSENBQUlBRTJBaFFnQUVIOWtvQ0FBRFlDRUNBQVFRYzJBZ3dNcUFFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRFSUxJQUJCMGdBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1wd0VMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREVJTElBQkIwd0EyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXBnRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERVlMSUFCQjVRQTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNcFFFTElBQW9BZ1FoQVNBQVFRQTJBZ1FDUUNBQUlBRWdGQkNuZ0lDQUFDSUJEUUFnRkNFQkREOExJQUJCMGdBMkFod2dBQ0FVTmdJVUlBQWdBVFlDREVFQUlSQU1wQUVMSUFBb0FnUWhBU0FBUVFBMkFnUUNRQ0FBSUFFZ0ZCQ25nSUNBQUNJQkRRQWdGQ0VCREQ4TElBQkIwd0EyQWh3Z0FDQVVOZ0lVSUFBZ0FUWUNERUVBSVJBTW93RUxJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRkJDbmdJQ0FBQ0lCRFFBZ0ZDRUJERU1MSUFCQjVRQTJBaHdnQUNBVU5nSVVJQUFnQVRZQ0RFRUFJUkFNb2dFTElBQkJBRFlDSENBQUlCUTJBaFFnQUVIRGo0Q0FBRFlDRUNBQVFRYzJBZ3hCQUNFUURLRUJDeUFBUVFBMkFod2dBQ0FCTmdJVUlBQkJ3NCtBZ0FBMkFoQWdBRUVITmdJTVFRQWhFQXlnQVF0QkFDRVFJQUJCQURZQ0hDQUFJQlEyQWhRZ0FFR01uSUNBQURZQ0VDQUFRUWMyQWd3TW53RUxJQUJCQURZQ0hDQUFJQlEyQWhRZ0FFR01uSUNBQURZQ0VDQUFRUWMyQWd4QkFDRVFESjRCQ3lBQVFRQTJBaHdnQUNBVU5nSVVJQUJCL3BHQWdBQTJBaEFnQUVFSE5nSU1RUUFoRUF5ZEFRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFZNmJnSUFBTmdJUUlBQkJCallDREVFQUlSQU1uQUVMSUJCQkZVWU5WeUFBUVFBMkFod2dBQ0FCTmdJVUlBQkJ6STZBZ0FBMkFoQWdBRUVnTmdJTVFRQWhFQXliQVFzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVrSVJBTElBQWdFRG9BS1NBQUtBSUVJUkFnQUVFQU5nSUVJQUFnRUNBQkVLdUFnSUFBSWhBTlZDQUJJUUVNUGdzZ0FFRUFOZ0lBQzBFQUlSQWdBRUVBTmdJY0lBQWdCRFlDRkNBQVFmR2JnSUFBTmdJUUlBQkJCallDREF5WEFRc2dBVUVWUmcxUUlBQkJBRFlDSENBQUlBVTJBaFFnQUVId2pJQ0FBRFlDRUNBQVFSczJBZ3hCQUNFUURKWUJDeUFBS0FJRUlRVWdBRUVBTmdJRUlBQWdCU0FRRUttQWdJQUFJZ1VOQVNBUVFRRnFJUVVMUWEwQklSQU1ld3NnQUVIQkFUWUNIQ0FBSUFVMkFnd2dBQ0FRUVFGcU5nSVVRUUFoRUF5VEFRc2dBQ2dDQkNFR0lBQkJBRFlDQkNBQUlBWWdFQkNwZ0lDQUFDSUdEUUVnRUVFQmFpRUdDMEd1QVNFUURIZ0xJQUJCd2dFMkFod2dBQ0FHTmdJTUlBQWdFRUVCYWpZQ0ZFRUFJUkFNa0FFTElBQkJBRFlDSENBQUlBYzJBaFFnQUVHWGk0Q0FBRFlDRUNBQVFRMDJBZ3hCQUNFUURJOEJDeUFBUVFBMkFod2dBQ0FJTmdJVUlBQkI0NUNBZ0FBMkFoQWdBRUVKTmdJTVFRQWhFQXlPQVFzZ0FFRUFOZ0ljSUFBZ0NEWUNGQ0FBUVpTTmdJQUFOZ0lRSUFCQklUWUNERUVBSVJBTWpRRUxRUUVoRmtFQUlSZEJBQ0VVUVFFaEVBc2dBQ0FRT2dBcklBbEJBV29oQ0FKQUFrQWdBQzBBTFVFUWNRMEFBa0FDUUFKQUlBQXRBQ29PQXdFQUFnUUxJQlpGRFFNTUFnc2dGQTBCREFJTElCZEZEUUVMSUFBb0FnUWhFQ0FBUVFBMkFnUWdBQ0FRSUFnUXJZQ0FnQUFpRUVVTlBTQUFRY2tCTmdJY0lBQWdDRFlDRkNBQUlCQTJBZ3hCQUNFUURJd0JDeUFBS0FJRUlRUWdBRUVBTmdJRUlBQWdCQ0FJRUsyQWdJQUFJZ1JGRFhZZ0FFSEtBVFlDSENBQUlBZzJBaFFnQUNBRU5nSU1RUUFoRUF5TEFRc2dBQ2dDQkNFRUlBQkJBRFlDQkNBQUlBUWdDUkN0Z0lDQUFDSUVSUTEwSUFCQnl3RTJBaHdnQUNBSk5nSVVJQUFnQkRZQ0RFRUFJUkFNaWdFTElBQW9BZ1FoQkNBQVFRQTJBZ1FnQUNBRUlBb1FyWUNBZ0FBaUJFVU5jaUFBUWMwQk5nSWNJQUFnQ2pZQ0ZDQUFJQVEyQWd4QkFDRVFESWtCQ3dKQUlBc3RBQUJCVUdvaUVFSC9BWEZCQ2s4TkFDQUFJQkE2QUNvZ0MwRUJhaUVLUWJZQklSQU1jQXNnQUNnQ0JDRUVJQUJCQURZQ0JDQUFJQVFnQ3hDdGdJQ0FBQ0lFUlExd0lBQkJ6d0UyQWh3Z0FDQUxOZ0lVSUFBZ0JEWUNERUVBSVJBTWlBRUxJQUJCQURZQ0hDQUFJQVEyQWhRZ0FFR1FzNENBQURZQ0VDQUFRUWcyQWd3Z0FFRUFOZ0lBUVFBaEVBeUhBUXNnQVVFVlJnMC9JQUJCQURZQ0hDQUFJQXcyQWhRZ0FFSE1qb0NBQURZQ0VDQUFRU0EyQWd4QkFDRVFESVlCQ3lBQVFZRUVPd0VvSUFBb0FnUWhFQ0FBUWdBM0F3QWdBQ0FRSUF4QkFXb2lEQkNyZ0lDQUFDSVFSUTA0SUFCQjB3RTJBaHdnQUNBTU5nSVVJQUFnRURZQ0RFRUFJUkFNaFFFTElBQkJBRFlDQUF0QkFDRVFJQUJCQURZQ0hDQUFJQVEyQWhRZ0FFSFltNENBQURZQ0VDQUFRUWcyQWd3TWd3RUxJQUFvQWdRaEVDQUFRZ0EzQXdBZ0FDQVFJQXRCQVdvaUN4Q3JnSUNBQUNJUURRRkJ4Z0VoRUF4cEN5QUFRUUk2QUNnTVZRc2dBRUhWQVRZQ0hDQUFJQXMyQWhRZ0FDQVFOZ0lNUVFBaEVBeUFBUXNnRUVFVlJnMDNJQUJCQURZQ0hDQUFJQVEyQWhRZ0FFR2tqSUNBQURZQ0VDQUFRUkEyQWd4QkFDRVFESDhMSUFBdEFEUkJBVWNOTkNBQUlBUWdBaEM4Z0lDQUFDSVFSUTAwSUJCQkZVY05OU0FBUWR3Qk5nSWNJQUFnQkRZQ0ZDQUFRZFdXZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNZmd0QkFDRVFJQUJCQURZQ0hDQUFRYStMZ0lBQU5nSVFJQUJCQWpZQ0RDQUFJQlJCQVdvMkFoUU1mUXRCQUNFUURHTUxRUUloRUF4aUMwRU5JUkFNWVF0QkR5RVFER0FMUVNVaEVBeGZDMEVUSVJBTVhndEJGU0VRREYwTFFSWWhFQXhjQzBFWElSQU1Xd3RCR0NFUURGb0xRUmtoRUF4WkMwRWFJUkFNV0F0Qkd5RVFERmNMUVJ3aEVBeFdDMEVkSVJBTVZRdEJIeUVRREZRTFFTRWhFQXhUQzBFaklSQU1VZ3RCeGdBaEVBeFJDMEV1SVJBTVVBdEJMeUVRREU4TFFUc2hFQXhPQzBFOUlSQU1UUXRCeUFBaEVBeE1DMEhKQUNFUURFc0xRY3NBSVJBTVNndEJ6QUFoRUF4SkMwSE9BQ0VRREVnTFFkRUFJUkFNUnd0QjFRQWhFQXhHQzBIWUFDRVFERVVMUWRrQUlSQU1SQXRCMndBaEVBeERDMEhrQUNFUURFSUxRZVVBSVJBTVFRdEI4UUFoRUF4QUMwSDBBQ0VRREQ4TFFZMEJJUkFNUGd0Qmx3RWhFQXc5QzBHcEFTRVFERHdMUWF3QklSQU1Pd3RCd0FFaEVBdzZDMEc1QVNFUUREa0xRYThCSVJBTU9BdEJzUUVoRUF3M0MwR3lBU0VRRERZTFFiUUJJUkFNTlF0QnRRRWhFQXcwQzBHNkFTRVFERE1MUWIwQklSQU1NZ3RCdndFaEVBd3hDMEhCQVNFUUREQUxJQUJCQURZQ0hDQUFJQVEyQWhRZ0FFSHBpNENBQURZQ0VDQUFRUjgyQWd4QkFDRVFERWdMSUFCQjJ3RTJBaHdnQUNBRU5nSVVJQUJCK3BhQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF4SEN5QUFRZmdBTmdJY0lBQWdERFlDRkNBQVFjcVlnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1SZ3NnQUVIUkFEWUNIQ0FBSUFVMkFoUWdBRUd3bDRDQUFEWUNFQ0FBUVJVMkFneEJBQ0VRREVVTElBQkIrUUEyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTVJBc2dBRUg0QURZQ0hDQUFJQUUyQWhRZ0FFSEttSUNBQURZQ0VDQUFRUlUyQWd4QkFDRVFERU1MSUFCQjVBQTJBaHdnQUNBQk5nSVVJQUJCNDVlQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF4Q0N5QUFRZGNBTmdJY0lBQWdBVFlDRkNBQVFjbVhnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1RUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYm1OZ0lBQU5nSVFJQUJCR2pZQ0RFRUFJUkFNUUFzZ0FFSENBRFlDSENBQUlBRTJBaFFnQUVIam1JQ0FBRFlDRUNBQVFSVTJBZ3hCQUNFUUREOExJQUJCQURZQ0JDQUFJQThnRHhDeGdJQ0FBQ0lFUlEwQklBQkJPallDSENBQUlBUTJBZ3dnQUNBUFFRRnFOZ0lVUVFBaEVBdytDeUFBS0FJRUlRUWdBRUVBTmdJRUFrQWdBQ0FFSUFFUXNZQ0FnQUFpQkVVTkFDQUFRVHMyQWh3Z0FDQUVOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU1QZ3NnQVVFQmFpRUJEQzBMSUE5QkFXb2hBUXd0Q3lBQVFRQTJBaHdnQUNBUE5nSVVJQUJCNUpLQWdBQTJBaEFnQUVFRU5nSU1RUUFoRUF3N0N5QUFRVFkyQWh3Z0FDQUVOZ0lVSUFBZ0FqWUNERUVBSVJBTU9nc2dBRUV1TmdJY0lBQWdEallDRkNBQUlBUTJBZ3hCQUNFUUREa0xJQUJCMEFBMkFod2dBQ0FCTmdJVUlBQkJrWmlBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXc0Q3lBTlFRRnFJUUVNTEFzZ0FFRVZOZ0ljSUFBZ0FUWUNGQ0FBUVlLWmdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTU5nc2dBRUViTmdJY0lBQWdBVFlDRkNBQVFaR1hnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1OUXNnQUVFUE5nSWNJQUFnQVRZQ0ZDQUFRWkdYZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTkFzZ0FFRUxOZ0ljSUFBZ0FUWUNGQ0FBUVpHWGdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTU13c2dBRUVhTmdJY0lBQWdBVFlDRkNBQVFZS1pnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1NZ3NnQUVFTE5nSWNJQUFnQVRZQ0ZDQUFRWUtaZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNTVFzZ0FFRUtOZ0ljSUFBZ0FUWUNGQ0FBUWVTV2dJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTU1Bc2dBRUVlTmdJY0lBQWdBVFlDRkNBQVFmbVhnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1Md3NnQUVFQU5nSWNJQUFnRURZQ0ZDQUFRZHFOZ0lBQU5nSVFJQUJCRkRZQ0RFRUFJUkFNTGdzZ0FFRUVOZ0ljSUFBZ0FUWUNGQ0FBUWJDWWdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTUxRc2dBRUVBTmdJQUlBdEJBV29oQ3d0QnVBRWhFQXdTQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRZlVBSVJBTUVRc2dBU0VCQWtBZ0FDMEFLVUVGUncwQVFlTUFJUkFNRVF0QjRnQWhFQXdRQzBFQUlSQWdBRUVBTmdJY0lBQkI1SkdBZ0FBMkFoQWdBRUVITmdJTUlBQWdGRUVCYWpZQ0ZBd29DeUFBUVFBMkFnQWdGMEVCYWlFQlFjQUFJUkFNRGd0QkFTRUJDeUFBSUFFNkFDd2dBRUVBTmdJQUlCZEJBV29oQVF0QktDRVFEQXNMSUFFaEFRdEJPQ0VRREFrTEFrQWdBU0lQSUFKR0RRQURRQUpBSUE4dEFBQkJnTDZBZ0FCcUxRQUFJZ0ZCQVVZTkFDQUJRUUpIRFFNZ0QwRUJhaUVCREFRTElBOUJBV29pRHlBQ1J3MEFDMEUrSVJBTUlndEJQaUVRRENFTElBQkJBRG9BTENBUElRRU1BUXRCQ3lFUURBWUxRVG9oRUF3RkN5QUJRUUZxSVFGQkxTRVFEQVFMSUFBZ0FUb0FMQ0FBUVFBMkFnQWdGa0VCYWlFQlFRd2hFQXdEQ3lBQVFRQTJBZ0FnRjBFQmFpRUJRUW9oRUF3Q0N5QUFRUUEyQWdBTElBQkJBRG9BTENBTklRRkJDU0VRREFBTEMwRUFJUkFnQUVFQU5nSWNJQUFnQ3pZQ0ZDQUFRYzJRZ0lBQU5nSVFJQUJCQ1RZQ0RBd1hDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0NqWUNGQ0FBUWVtS2dJQUFOZ0lRSUFCQkNUWUNEQXdXQzBFQUlSQWdBRUVBTmdJY0lBQWdDVFlDRkNBQVFiZVFnSUFBTmdJUUlBQkJDVFlDREF3VkMwRUFJUkFnQUVFQU5nSWNJQUFnQ0RZQ0ZDQUFRWnlSZ0lBQU5nSVFJQUJCQ1RZQ0RBd1VDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWMyUWdJQUFOZ0lRSUFCQkNUWUNEQXdUQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFlbUtnSUFBTmdJUUlBQkJDVFlDREF3U0MwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYmVRZ0lBQU5nSVFJQUJCQ1RZQ0RBd1JDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVp5UmdJQUFOZ0lRSUFCQkNUWUNEQXdRQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFaZVZnSUFBTmdJUUlBQkJEellDREF3UEMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWmVWZ0lBQU5nSVFJQUJCRHpZQ0RBd09DMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWNDU2dJQUFOZ0lRSUFCQkN6WUNEQXdOQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFaV0pnSUFBTmdJUUlBQkJDellDREF3TUMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZUdQZ0lBQU5nSVFJQUJCQ2pZQ0RBd0xDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWZ1UGdJQUFOZ0lRSUFCQkNqWUNEQXdLQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFmR1pnSUFBTmdJUUlBQkJBallDREF3SkMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRY1NVZ0lBQU5nSVFJQUJCQWpZQ0RBd0lDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWZLVmdJQUFOZ0lRSUFCQkFqWUNEQXdIQ3lBQVFRSTJBaHdnQUNBQk5nSVVJQUJCbkpxQWdBQTJBaEFnQUVFV05nSU1RUUFoRUF3R0MwRUJJUkFNQlF0QjFBQWhFQ0FCSWdRZ0FrWU5CQ0FEUVFocUlBQWdCQ0FDUWRqQ2dJQUFRUW9ReFlDQWdBQWdBeWdDRENFRUlBTW9BZ2dPQXdFRUFnQUxFTXFBZ0lBQUFBc2dBRUVBTmdJY0lBQkJ0WnFBZ0FBMkFoQWdBRUVYTmdJTUlBQWdCRUVCYWpZQ0ZFRUFJUkFNQWdzZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWNxYWdJQUFOZ0lRSUFCQkNUWUNERUVBSVJBTUFRc0NRQ0FCSWdRZ0FrY05BRUVpSVJBTUFRc2dBRUdKZ0lDQUFEWUNDQ0FBSUFRMkFnUkJJU0VRQ3lBRFFSQnFKSUNBZ0lBQUlCQUxyd0VCQW44Z0FTZ0NBQ0VHQWtBQ1FDQUNJQU5HRFFBZ0JDQUdhaUVFSUFZZ0Eyb2dBbXNoQnlBQ0lBWkJmM01nQldvaUJtb2hCUU5BQWtBZ0FpMEFBQ0FFTFFBQVJnMEFRUUloQkF3REN3SkFJQVlOQUVFQUlRUWdCU0VDREFNTElBWkJmMm9oQmlBRVFRRnFJUVFnQWtFQmFpSUNJQU5IRFFBTElBY2hCaUFESVFJTElBQkJBVFlDQUNBQklBWTJBZ0FnQUNBQ05nSUVEd3NnQVVFQU5nSUFJQUFnQkRZQ0FDQUFJQUkyQWdRTENnQWdBQkRIZ0lDQUFBdnlOZ0VMZnlPQWdJQ0FBRUVRYXlJQkpJQ0FnSUFBQWtCQkFDZ0NvTkNBZ0FBTkFFRUFFTXVBZ0lBQVFZRFVoSUFBYXlJQ1Fka0FTUTBBUVFBaEF3SkFRUUFvQXVEVGdJQUFJZ1FOQUVFQVFuODNBdXpUZ0lBQVFRQkNnSUNFZ0lDQXdBQTNBdVRUZ0lBQVFRQWdBVUVJYWtGd2NVSFlxdFdxQlhNaUJEWUM0Tk9BZ0FCQkFFRUFOZ0wwMDRDQUFFRUFRUUEyQXNUVGdJQUFDMEVBSUFJMkFzelRnSUFBUVFCQmdOU0VnQUEyQXNqVGdJQUFRUUJCZ05TRWdBQTJBcGpRZ0lBQVFRQWdCRFlDck5DQWdBQkJBRUYvTmdLbzBJQ0FBQU5BSUFOQnhOQ0FnQUJxSUFOQnVOQ0FnQUJxSWdRMkFnQWdCQ0FEUWJEUWdJQUFhaUlGTmdJQUlBTkJ2TkNBZ0FCcUlBVTJBZ0FnQTBITTBJQ0FBR29nQTBIQTBJQ0FBR29pQlRZQ0FDQUZJQVEyQWdBZ0EwSFUwSUNBQUdvZ0EwSEkwSUNBQUdvaUJEWUNBQ0FFSUFVMkFnQWdBMEhRMElDQUFHb2dCRFlDQUNBRFFTQnFJZ05CZ0FKSERRQUxRWURVaElBQVFYaEJnTlNFZ0FCclFROXhRUUJCZ05TRWdBQkJDR3BCRDNFYklnTnFJZ1JCQkdvZ0FrRklhaUlGSUFOcklnTkJBWEkyQWdCQkFFRUFLQUx3MDRDQUFEWUNwTkNBZ0FCQkFDQUROZ0tVMElDQUFFRUFJQVEyQXFEUWdJQUFRWURVaElBQUlBVnFRVGcyQWdRTEFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQjdBRkxEUUFDUUVFQUtBS0kwSUNBQUNJR1FSQWdBRUVUYWtGd2NTQUFRUXRKR3lJQ1FRTjJJZ1IySWdOQkEzRkZEUUFDUUFKQUlBTkJBWEVnQkhKQkFYTWlCVUVEZENJRVFiRFFnSUFBYWlJRElBUkJ1TkNBZ0FCcUtBSUFJZ1FvQWdnaUFrY05BRUVBSUFaQmZpQUZkM0UyQW9qUWdJQUFEQUVMSUFNZ0FqWUNDQ0FDSUFNMkFnd0xJQVJCQ0dvaEF5QUVJQVZCQTNRaUJVRURjallDQkNBRUlBVnFJZ1FnQkNnQ0JFRUJjallDQkF3TUN5QUNRUUFvQXBEUWdJQUFJZ2RORFFFQ1FDQURSUTBBQWtBQ1FDQURJQVIwUVFJZ0JIUWlBMEVBSUFOcmNuRWlBMEVBSUFOcmNVRi9haUlESUFOQkRIWkJFSEVpQTNZaUJFRUZka0VJY1NJRklBTnlJQVFnQlhZaUEwRUNka0VFY1NJRWNpQURJQVIySWdOQkFYWkJBbkVpQkhJZ0F5QUVkaUlEUVFGMlFRRnhJZ1J5SUFNZ0JIWnFJZ1JCQTNRaUEwR3cwSUNBQUdvaUJTQURRYmpRZ0lBQWFpZ0NBQ0lES0FJSUlnQkhEUUJCQUNBR1FYNGdCSGR4SWdZMkFvalFnSUFBREFFTElBVWdBRFlDQ0NBQUlBVTJBZ3dMSUFNZ0FrRURjallDQkNBRElBUkJBM1FpQkdvZ0JDQUNheUlGTmdJQUlBTWdBbW9pQUNBRlFRRnlOZ0lFQWtBZ0IwVU5BQ0FIUVhoeFFiRFFnSUFBYWlFQ1FRQW9BcHpRZ0lBQUlRUUNRQUpBSUFaQkFTQUhRUU4yZENJSWNRMEFRUUFnQmlBSWNqWUNpTkNBZ0FBZ0FpRUlEQUVMSUFJb0FnZ2hDQXNnQ0NBRU5nSU1JQUlnQkRZQ0NDQUVJQUkyQWd3Z0JDQUlOZ0lJQ3lBRFFRaHFJUU5CQUNBQU5nS2MwSUNBQUVFQUlBVTJBcERRZ0lBQURBd0xRUUFvQW96UWdJQUFJZ2xGRFFFZ0NVRUFJQWxyY1VGL2FpSURJQU5CREhaQkVIRWlBM1lpQkVFRmRrRUljU0lGSUFOeUlBUWdCWFlpQTBFQ2RrRUVjU0lFY2lBRElBUjJJZ05CQVhaQkFuRWlCSElnQXlBRWRpSURRUUYyUVFGeElnUnlJQU1nQkhacVFRSjBRYmpTZ0lBQWFpZ0NBQ0lBS0FJRVFYaHhJQUpySVFRZ0FDRUZBa0FEUUFKQUlBVW9BaEFpQXcwQUlBVkJGR29vQWdBaUEwVU5BZ3NnQXlnQ0JFRjRjU0FDYXlJRklBUWdCU0FFU1NJRkd5RUVJQU1nQUNBRkd5RUFJQU1oQlF3QUN3c2dBQ2dDR0NFS0FrQWdBQ2dDRENJSUlBQkdEUUFnQUNnQ0NDSURRUUFvQXBqUWdJQUFTUm9nQ0NBRE5nSUlJQU1nQ0RZQ0RBd0xDd0pBSUFCQkZHb2lCU2dDQUNJRERRQWdBQ2dDRUNJRFJRMERJQUJCRUdvaEJRc0RRQ0FGSVFzZ0F5SUlRUlJxSWdVb0FnQWlBdzBBSUFoQkVHb2hCU0FJS0FJUUlnTU5BQXNnQzBFQU5nSUFEQW9MUVg4aEFpQUFRYjkvU3cwQUlBQkJFMm9pQTBGd2NTRUNRUUFvQW96UWdJQUFJZ2RGRFFCQkFDRUxBa0FnQWtHQUFra05BRUVmSVFzZ0FrSC8vLzhIU3cwQUlBTkJDSFlpQXlBRFFZRCtQMnBCRUhaQkNIRWlBM1FpQkNBRVFZRGdIMnBCRUhaQkJIRWlCSFFpQlNBRlFZQ0FEMnBCRUhaQkFuRWlCWFJCRDNZZ0F5QUVjaUFGY21zaUEwRUJkQ0FDSUFOQkZXcDJRUUZ4Y2tFY2FpRUxDMEVBSUFKcklRUUNRQUpBQWtBQ1FDQUxRUUowUWJqU2dJQUFhaWdDQUNJRkRRQkJBQ0VEUVFBaENBd0JDMEVBSVFNZ0FrRUFRUmtnQzBFQmRtc2dDMEVmUmh0MElRQkJBQ0VJQTBBQ1FDQUZLQUlFUVhoeElBSnJJZ1lnQkU4TkFDQUdJUVFnQlNFSUlBWU5BRUVBSVFRZ0JTRUlJQVVoQXd3REN5QURJQVZCRkdvb0FnQWlCaUFHSUFVZ0FFRWRka0VFY1dwQkVHb29BZ0FpQlVZYklBTWdCaHNoQXlBQVFRRjBJUUFnQlEwQUN3c0NRQ0FESUFoeURRQkJBQ0VJUVFJZ0MzUWlBMEVBSUFOcmNpQUhjU0lEUlEwRElBTkJBQ0FEYTNGQmYyb2lBeUFEUVF4MlFSQnhJZ04ySWdWQkJYWkJDSEVpQUNBRGNpQUZJQUIySWdOQkFuWkJCSEVpQlhJZ0F5QUZkaUlEUVFGMlFRSnhJZ1Z5SUFNZ0JYWWlBMEVCZGtFQmNTSUZjaUFESUFWMmFrRUNkRUc0MG9DQUFHb29BZ0FoQXdzZ0EwVU5BUXNEUUNBREtBSUVRWGh4SUFKcklnWWdCRWtoQUFKQUlBTW9BaEFpQlEwQUlBTkJGR29vQWdBaEJRc2dCaUFFSUFBYklRUWdBeUFJSUFBYklRZ2dCU0VESUFVTkFBc0xJQWhGRFFBZ0JFRUFLQUtRMElDQUFDQUNhMDhOQUNBSUtBSVlJUXNDUUNBSUtBSU1JZ0FnQ0VZTkFDQUlLQUlJSWdOQkFDZ0NtTkNBZ0FCSkdpQUFJQU0yQWdnZ0F5QUFOZ0lNREFrTEFrQWdDRUVVYWlJRktBSUFJZ01OQUNBSUtBSVFJZ05GRFFNZ0NFRVFhaUVGQ3dOQUlBVWhCaUFESWdCQkZHb2lCU2dDQUNJRERRQWdBRUVRYWlFRklBQW9BaEFpQXcwQUN5QUdRUUEyQWdBTUNBc0NRRUVBS0FLUTBJQ0FBQ0lESUFKSkRRQkJBQ2dDbk5DQWdBQWhCQUpBQWtBZ0F5QUNheUlGUVJCSkRRQWdCQ0FDYWlJQUlBVkJBWEkyQWdSQkFDQUZOZ0tRMElDQUFFRUFJQUEyQXB6UWdJQUFJQVFnQTJvZ0JUWUNBQ0FFSUFKQkEzSTJBZ1FNQVFzZ0JDQURRUU55TmdJRUlBUWdBMm9pQXlBREtBSUVRUUZ5TmdJRVFRQkJBRFlDbk5DQWdBQkJBRUVBTmdLUTBJQ0FBQXNnQkVFSWFpRUREQW9MQWtCQkFDZ0NsTkNBZ0FBaUFDQUNUUTBBUVFBb0FxRFFnSUFBSWdNZ0Ftb2lCQ0FBSUFKcklnVkJBWEkyQWdSQkFDQUZOZ0tVMElDQUFFRUFJQVEyQXFEUWdJQUFJQU1nQWtFRGNqWUNCQ0FEUVFocUlRTU1DZ3NDUUFKQVFRQW9BdURUZ0lBQVJRMEFRUUFvQXVqVGdJQUFJUVFNQVF0QkFFSi9Od0xzMDRDQUFFRUFRb0NBaElDQWdNQUFOd0xrMDRDQUFFRUFJQUZCREdwQmNIRkIyS3JWcWdWek5nTGcwNENBQUVFQVFRQTJBdlRUZ0lBQVFRQkJBRFlDeE5PQWdBQkJnSUFFSVFRTFFRQWhBd0pBSUFRZ0FrSEhBR29pQjJvaUJrRUFJQVJySWd0eElnZ2dBa3NOQUVFQVFUQTJBdmpUZ0lBQURBb0xBa0JCQUNnQ3dOT0FnQUFpQTBVTkFBSkFRUUFvQXJqVGdJQUFJZ1FnQ0dvaUJTQUVUUTBBSUFVZ0EwME5BUXRCQUNFRFFRQkJNRFlDK05PQWdBQU1DZ3RCQUMwQXhOT0FnQUJCQkhFTkJBSkFBa0FDUUVFQUtBS2cwSUNBQUNJRVJRMEFRY2pUZ0lBQUlRTURRQUpBSUFNb0FnQWlCU0FFU3cwQUlBVWdBeWdDQkdvZ0JFc05Bd3NnQXlnQ0NDSUREUUFMQzBFQUVNdUFnSUFBSWdCQmYwWU5CU0FJSVFZQ1FFRUFLQUxrMDRDQUFDSURRWDlxSWdRZ0FIRkZEUUFnQ0NBQWF5QUVJQUJxUVFBZ0EydHhhaUVHQ3lBR0lBSk5EUVVnQmtIKy8vLy9CMHNOQlFKQVFRQW9Bc0RUZ0lBQUlnTkZEUUJCQUNnQ3VOT0FnQUFpQkNBR2FpSUZJQVJORFFZZ0JTQURTdzBHQ3lBR0VNdUFnSUFBSWdNZ0FFY05BUXdIQ3lBR0lBQnJJQXR4SWdaQi92Ly8vd2RMRFFRZ0JoRExnSUNBQUNJQUlBTW9BZ0FnQXlnQ0JHcEdEUU1nQUNFREN3SkFJQU5CZjBZTkFDQUNRY2dBYWlBR1RRMEFBa0FnQnlBR2EwRUFLQUxvMDRDQUFDSUVha0VBSUFScmNTSUVRZjcvLy84SFRRMEFJQU1oQUF3SEN3SkFJQVFReTRDQWdBQkJmMFlOQUNBRUlBWnFJUVlnQXlFQURBY0xRUUFnQm1zUXk0Q0FnQUFhREFRTElBTWhBQ0FEUVg5SERRVU1Bd3RCQUNFSURBY0xRUUFoQUF3RkN5QUFRWDlIRFFJTFFRQkJBQ2dDeE5PQWdBQkJCSEkyQXNUVGdJQUFDeUFJUWY3Ly8vOEhTdzBCSUFnUXk0Q0FnQUFoQUVFQUVNdUFnSUFBSVFNZ0FFRi9SZzBCSUFOQmYwWU5BU0FBSUFOUERRRWdBeUFBYXlJR0lBSkJPR3BORFFFTFFRQkJBQ2dDdU5PQWdBQWdCbW9pQXpZQ3VOT0FnQUFDUUNBRFFRQW9BcnpUZ0lBQVRRMEFRUUFnQXpZQ3ZOT0FnQUFMQWtBQ1FBSkFBa0JCQUNnQ29OQ0FnQUFpQkVVTkFFSEkwNENBQUNFREEwQWdBQ0FES0FJQUlnVWdBeWdDQkNJSWFrWU5BaUFES0FJSUlnTU5BQXdEQ3dzQ1FBSkFRUUFvQXBqUWdJQUFJZ05GRFFBZ0FDQURUdzBCQzBFQUlBQTJBcGpRZ0lBQUMwRUFJUU5CQUNBR05nTE0wNENBQUVFQUlBQTJBc2pUZ0lBQVFRQkJmellDcU5DQWdBQkJBRUVBS0FMZzA0Q0FBRFlDck5DQWdBQkJBRUVBTmdMVTA0Q0FBQU5BSUFOQnhOQ0FnQUJxSUFOQnVOQ0FnQUJxSWdRMkFnQWdCQ0FEUWJEUWdJQUFhaUlGTmdJQUlBTkJ2TkNBZ0FCcUlBVTJBZ0FnQTBITTBJQ0FBR29nQTBIQTBJQ0FBR29pQlRZQ0FDQUZJQVEyQWdBZ0EwSFUwSUNBQUdvZ0EwSEkwSUNBQUdvaUJEWUNBQ0FFSUFVMkFnQWdBMEhRMElDQUFHb2dCRFlDQUNBRFFTQnFJZ05CZ0FKSERRQUxJQUJCZUNBQWEwRVBjVUVBSUFCQkNHcEJEM0ViSWdOcUlnUWdCa0ZJYWlJRklBTnJJZ05CQVhJMkFnUkJBRUVBS0FMdzA0Q0FBRFlDcE5DQWdBQkJBQ0FETmdLVTBJQ0FBRUVBSUFRMkFxRFFnSUFBSUFBZ0JXcEJPRFlDQkF3Q0N5QURMUUFNUVFoeERRQWdCQ0FGU1EwQUlBUWdBRThOQUNBRVFYZ2dCR3RCRDNGQkFDQUVRUWhxUVE5eEd5SUZhaUlBUVFBb0FwVFFnSUFBSUFacUlnc2dCV3NpQlVFQmNqWUNCQ0FESUFnZ0JtbzJBZ1JCQUVFQUtBTHcwNENBQURZQ3BOQ0FnQUJCQUNBRk5nS1UwSUNBQUVFQUlBQTJBcURRZ0lBQUlBUWdDMnBCT0RZQ0JBd0JDd0pBSUFCQkFDZ0NtTkNBZ0FBaUNFOE5BRUVBSUFBMkFwalFnSUFBSUFBaENBc2dBQ0FHYWlFRlFjalRnSUFBSVFNQ1FBSkFBa0FDUUFKQUFrQUNRQU5BSUFNb0FnQWdCVVlOQVNBREtBSUlJZ01OQUF3Q0N3c2dBeTBBREVFSWNVVU5BUXRCeU5PQWdBQWhBd05BQWtBZ0F5Z0NBQ0lGSUFSTERRQWdCU0FES0FJRWFpSUZJQVJMRFFNTElBTW9BZ2doQXd3QUN3c2dBeUFBTmdJQUlBTWdBeWdDQkNBR2FqWUNCQ0FBUVhnZ0FHdEJEM0ZCQUNBQVFRaHFRUTl4RzJvaUN5QUNRUU55TmdJRUlBVkJlQ0FGYTBFUGNVRUFJQVZCQ0dwQkQzRWJhaUlHSUFzZ0Ftb2lBbXNoQXdKQUlBWWdCRWNOQUVFQUlBSTJBcURRZ0lBQVFRQkJBQ2dDbE5DQWdBQWdBMm9pQXpZQ2xOQ0FnQUFnQWlBRFFRRnlOZ0lFREFNTEFrQWdCa0VBS0FLYzBJQ0FBRWNOQUVFQUlBSTJBcHpRZ0lBQVFRQkJBQ2dDa05DQWdBQWdBMm9pQXpZQ2tOQ0FnQUFnQWlBRFFRRnlOZ0lFSUFJZ0Eyb2dBellDQUF3REN3SkFJQVlvQWdRaUJFRURjVUVCUncwQUlBUkJlSEVoQndKQUFrQWdCRUgvQVVzTkFDQUdLQUlJSWdVZ0JFRURkaUlJUVFOMFFiRFFnSUFBYWlJQVJob0NRQ0FHS0FJTUlnUWdCVWNOQUVFQVFRQW9Bb2pRZ0lBQVFYNGdDSGR4TmdLSTBJQ0FBQXdDQ3lBRUlBQkdHaUFFSUFVMkFnZ2dCU0FFTmdJTURBRUxJQVlvQWhnaENRSkFBa0FnQmlnQ0RDSUFJQVpHRFFBZ0JpZ0NDQ0lFSUFoSkdpQUFJQVEyQWdnZ0JDQUFOZ0lNREFFTEFrQWdCa0VVYWlJRUtBSUFJZ1VOQUNBR1FSQnFJZ1FvQWdBaUJRMEFRUUFoQUF3QkN3TkFJQVFoQ0NBRklnQkJGR29pQkNnQ0FDSUZEUUFnQUVFUWFpRUVJQUFvQWhBaUJRMEFDeUFJUVFBMkFnQUxJQWxGRFFBQ1FBSkFJQVlnQmlnQ0hDSUZRUUowUWJqU2dJQUFhaUlFS0FJQVJ3MEFJQVFnQURZQ0FDQUFEUUZCQUVFQUtBS00wSUNBQUVGK0lBVjNjVFlDak5DQWdBQU1BZ3NnQ1VFUVFSUWdDU2dDRUNBR1JodHFJQUEyQWdBZ0FFVU5BUXNnQUNBSk5nSVlBa0FnQmlnQ0VDSUVSUTBBSUFBZ0JEWUNFQ0FFSUFBMkFoZ0xJQVlvQWhRaUJFVU5BQ0FBUVJScUlBUTJBZ0FnQkNBQU5nSVlDeUFISUFOcUlRTWdCaUFIYWlJR0tBSUVJUVFMSUFZZ0JFRitjVFlDQkNBQ0lBTnFJQU0yQWdBZ0FpQURRUUZ5TmdJRUFrQWdBMEgvQVVzTkFDQURRWGh4UWJEUWdJQUFhaUVFQWtBQ1FFRUFLQUtJMElDQUFDSUZRUUVnQTBFRGRuUWlBM0VOQUVFQUlBVWdBM0kyQW9qUWdJQUFJQVFoQXd3QkN5QUVLQUlJSVFNTElBTWdBallDRENBRUlBSTJBZ2dnQWlBRU5nSU1JQUlnQXpZQ0NBd0RDMEVmSVFRQ1FDQURRZi8vL3dkTERRQWdBMEVJZGlJRUlBUkJnUDQvYWtFUWRrRUljU0lFZENJRklBVkJnT0FmYWtFUWRrRUVjU0lGZENJQUlBQkJnSUFQYWtFUWRrRUNjU0lBZEVFUGRpQUVJQVZ5SUFCeWF5SUVRUUYwSUFNZ0JFRVZhblpCQVhGeVFSeHFJUVFMSUFJZ0JEWUNIQ0FDUWdBM0FoQWdCRUVDZEVHNDBvQ0FBR29oQlFKQVFRQW9Bb3pRZ0lBQUlnQkJBU0FFZENJSWNRMEFJQVVnQWpZQ0FFRUFJQUFnQ0hJMkFvelFnSUFBSUFJZ0JUWUNHQ0FDSUFJMkFnZ2dBaUFDTmdJTURBTUxJQU5CQUVFWklBUkJBWFpySUFSQkgwWWJkQ0VFSUFVb0FnQWhBQU5BSUFBaUJTZ0NCRUY0Y1NBRFJnMENJQVJCSFhZaEFDQUVRUUYwSVFRZ0JTQUFRUVJ4YWtFUWFpSUlLQUlBSWdBTkFBc2dDQ0FDTmdJQUlBSWdCVFlDR0NBQ0lBSTJBZ3dnQWlBQ05nSUlEQUlMSUFCQmVDQUFhMEVQY1VFQUlBQkJDR3BCRDNFYklnTnFJZ3NnQmtGSWFpSUlJQU5ySWdOQkFYSTJBZ1FnQUNBSWFrRTROZ0lFSUFRZ0JVRTNJQVZyUVE5eFFRQWdCVUZKYWtFUGNSdHFRVUZxSWdnZ0NDQUVRUkJxU1JzaUNFRWpOZ0lFUVFCQkFDZ0M4Tk9BZ0FBMkFxVFFnSUFBUVFBZ0F6WUNsTkNBZ0FCQkFDQUxOZ0tnMElDQUFDQUlRUkJxUVFBcEF0RFRnSUFBTndJQUlBaEJBQ2tDeU5PQWdBQTNBZ2hCQUNBSVFRaHFOZ0xRMDRDQUFFRUFJQVkyQXN6VGdJQUFRUUFnQURZQ3lOT0FnQUJCQUVFQU5nTFUwNENBQUNBSVFTUnFJUU1EUUNBRFFRYzJBZ0FnQTBFRWFpSURJQVZKRFFBTElBZ2dCRVlOQXlBSUlBZ29BZ1JCZm5FMkFnUWdDQ0FJSUFScklnQTJBZ0FnQkNBQVFRRnlOZ0lFQWtBZ0FFSC9BVXNOQUNBQVFYaHhRYkRRZ0lBQWFpRURBa0FDUUVFQUtBS0kwSUNBQUNJRlFRRWdBRUVEZG5RaUFIRU5BRUVBSUFVZ0FISTJBb2pRZ0lBQUlBTWhCUXdCQ3lBREtBSUlJUVVMSUFVZ0JEWUNEQ0FESUFRMkFnZ2dCQ0FETmdJTUlBUWdCVFlDQ0F3RUMwRWZJUU1DUUNBQVFmLy8vd2RMRFFBZ0FFRUlkaUlESUFOQmdQNC9ha0VRZGtFSWNTSURkQ0lGSUFWQmdPQWZha0VRZGtFRWNTSUZkQ0lJSUFoQmdJQVBha0VRZGtFQ2NTSUlkRUVQZGlBRElBVnlJQWh5YXlJRFFRRjBJQUFnQTBFVmFuWkJBWEZ5UVJ4cUlRTUxJQVFnQXpZQ0hDQUVRZ0EzQWhBZ0EwRUNkRUc0MG9DQUFHb2hCUUpBUVFBb0FvelFnSUFBSWdoQkFTQURkQ0lHY1EwQUlBVWdCRFlDQUVFQUlBZ2dCbkkyQW96UWdJQUFJQVFnQlRZQ0dDQUVJQVEyQWdnZ0JDQUVOZ0lNREFRTElBQkJBRUVaSUFOQkFYWnJJQU5CSDBZYmRDRURJQVVvQWdBaENBTkFJQWdpQlNnQ0JFRjRjU0FBUmcwRElBTkJIWFloQ0NBRFFRRjBJUU1nQlNBSVFRUnhha0VRYWlJR0tBSUFJZ2dOQUFzZ0JpQUVOZ0lBSUFRZ0JUWUNHQ0FFSUFRMkFnd2dCQ0FFTmdJSURBTUxJQVVvQWdnaUF5QUNOZ0lNSUFVZ0FqWUNDQ0FDUVFBMkFoZ2dBaUFGTmdJTUlBSWdBellDQ0FzZ0MwRUlhaUVEREFVTElBVW9BZ2dpQXlBRU5nSU1JQVVnQkRZQ0NDQUVRUUEyQWhnZ0JDQUZOZ0lNSUFRZ0F6WUNDQXRCQUNnQ2xOQ0FnQUFpQXlBQ1RRMEFRUUFvQXFEUWdJQUFJZ1FnQW1vaUJTQURJQUpySWdOQkFYSTJBZ1JCQUNBRE5nS1UwSUNBQUVFQUlBVTJBcURRZ0lBQUlBUWdBa0VEY2pZQ0JDQUVRUWhxSVFNTUF3dEJBQ0VEUVFCQk1EWUMrTk9BZ0FBTUFnc0NRQ0FMUlEwQUFrQUNRQ0FJSUFnb0Fod2lCVUVDZEVHNDBvQ0FBR29pQXlnQ0FFY05BQ0FESUFBMkFnQWdBQTBCUVFBZ0IwRitJQVYzY1NJSE5nS00wSUNBQUF3Q0N5QUxRUkJCRkNBTEtBSVFJQWhHRzJvZ0FEWUNBQ0FBUlEwQkN5QUFJQXMyQWhnQ1FDQUlLQUlRSWdORkRRQWdBQ0FETmdJUUlBTWdBRFlDR0FzZ0NFRVVhaWdDQUNJRFJRMEFJQUJCRkdvZ0F6WUNBQ0FESUFBMkFoZ0xBa0FDUUNBRVFROUxEUUFnQ0NBRUlBSnFJZ05CQTNJMkFnUWdDQ0FEYWlJRElBTW9BZ1JCQVhJMkFnUU1BUXNnQ0NBQ2FpSUFJQVJCQVhJMkFnUWdDQ0FDUVFOeU5nSUVJQUFnQkdvZ0JEWUNBQUpBSUFSQi93RkxEUUFnQkVGNGNVR3cwSUNBQUdvaEF3SkFBa0JCQUNnQ2lOQ0FnQUFpQlVFQklBUkJBM1owSWdSeERRQkJBQ0FGSUFSeU5nS0kwSUNBQUNBRElRUU1BUXNnQXlnQ0NDRUVDeUFFSUFBMkFnd2dBeUFBTmdJSUlBQWdBellDRENBQUlBUTJBZ2dNQVF0Qkh5RURBa0FnQkVILy8vOEhTdzBBSUFSQkNIWWlBeUFEUVlEK1AycEJFSFpCQ0hFaUEzUWlCU0FGUVlEZ0gycEJFSFpCQkhFaUJYUWlBaUFDUVlDQUQycEJFSFpCQW5FaUFuUkJEM1lnQXlBRmNpQUNjbXNpQTBFQmRDQUVJQU5CRldwMlFRRnhja0VjYWlFREN5QUFJQU0yQWh3Z0FFSUFOd0lRSUFOQkFuUkJ1TktBZ0FCcUlRVUNRQ0FIUVFFZ0EzUWlBbkVOQUNBRklBQTJBZ0JCQUNBSElBSnlOZ0tNMElDQUFDQUFJQVUyQWhnZ0FDQUFOZ0lJSUFBZ0FEWUNEQXdCQ3lBRVFRQkJHU0FEUVFGMmF5QURRUjlHRzNRaEF5QUZLQUlBSVFJQ1FBTkFJQUlpQlNnQ0JFRjRjU0FFUmcwQklBTkJIWFloQWlBRFFRRjBJUU1nQlNBQ1FRUnhha0VRYWlJR0tBSUFJZ0lOQUFzZ0JpQUFOZ0lBSUFBZ0JUWUNHQ0FBSUFBMkFnd2dBQ0FBTmdJSURBRUxJQVVvQWdnaUF5QUFOZ0lNSUFVZ0FEWUNDQ0FBUVFBMkFoZ2dBQ0FGTmdJTUlBQWdBellDQ0FzZ0NFRUlhaUVEREFFTEFrQWdDa1VOQUFKQUFrQWdBQ0FBS0FJY0lnVkJBblJCdU5LQWdBQnFJZ01vQWdCSERRQWdBeUFJTmdJQUlBZ05BVUVBSUFsQmZpQUZkM0UyQW96UWdJQUFEQUlMSUFwQkVFRVVJQW9vQWhBZ0FFWWJhaUFJTmdJQUlBaEZEUUVMSUFnZ0NqWUNHQUpBSUFBb0FoQWlBMFVOQUNBSUlBTTJBaEFnQXlBSU5nSVlDeUFBUVJScUtBSUFJZ05GRFFBZ0NFRVVhaUFETmdJQUlBTWdDRFlDR0FzQ1FBSkFJQVJCRDBzTkFDQUFJQVFnQW1vaUEwRURjallDQkNBQUlBTnFJZ01nQXlnQ0JFRUJjallDQkF3QkN5QUFJQUpxSWdVZ0JFRUJjallDQkNBQUlBSkJBM0kyQWdRZ0JTQUVhaUFFTmdJQUFrQWdCMFVOQUNBSFFYaHhRYkRRZ0lBQWFpRUNRUUFvQXB6UWdJQUFJUU1DUUFKQVFRRWdCMEVEZG5RaUNDQUdjUTBBUVFBZ0NDQUdjallDaU5DQWdBQWdBaUVJREFFTElBSW9BZ2doQ0FzZ0NDQUROZ0lNSUFJZ0F6WUNDQ0FESUFJMkFnd2dBeUFJTmdJSUMwRUFJQVUyQXB6UWdJQUFRUUFnQkRZQ2tOQ0FnQUFMSUFCQkNHb2hBd3NnQVVFUWFpU0FnSUNBQUNBREN3b0FJQUFReVlDQWdBQUw0ZzBCQjM4Q1FDQUFSUTBBSUFCQmVHb2lBU0FBUVh4cUtBSUFJZ0pCZUhFaUFHb2hBd0pBSUFKQkFYRU5BQ0FDUVFOeFJRMEJJQUVnQVNnQ0FDSUNheUlCUVFBb0FwalFnSUFBSWdSSkRRRWdBaUFBYWlFQUFrQWdBVUVBS0FLYzBJQ0FBRVlOQUFKQUlBSkIvd0ZMRFFBZ0FTZ0NDQ0lFSUFKQkEzWWlCVUVEZEVHdzBJQ0FBR29pQmtZYUFrQWdBU2dDRENJQ0lBUkhEUUJCQUVFQUtBS0kwSUNBQUVGK0lBVjNjVFlDaU5DQWdBQU1Bd3NnQWlBR1Job2dBaUFFTmdJSUlBUWdBallDREF3Q0N5QUJLQUlZSVFjQ1FBSkFJQUVvQWd3aUJpQUJSZzBBSUFFb0FnZ2lBaUFFU1JvZ0JpQUNOZ0lJSUFJZ0JqWUNEQXdCQ3dKQUlBRkJGR29pQWlnQ0FDSUVEUUFnQVVFUWFpSUNLQUlBSWdRTkFFRUFJUVlNQVFzRFFDQUNJUVVnQkNJR1FSUnFJZ0lvQWdBaUJBMEFJQVpCRUdvaEFpQUdLQUlRSWdRTkFBc2dCVUVBTmdJQUN5QUhSUTBCQWtBQ1FDQUJJQUVvQWh3aUJFRUNkRUc0MG9DQUFHb2lBaWdDQUVjTkFDQUNJQVkyQWdBZ0JnMEJRUUJCQUNnQ2pOQ0FnQUJCZmlBRWQzRTJBb3pRZ0lBQURBTUxJQWRCRUVFVUlBY29BaEFnQVVZYmFpQUdOZ0lBSUFaRkRRSUxJQVlnQnpZQ0dBSkFJQUVvQWhBaUFrVU5BQ0FHSUFJMkFoQWdBaUFHTmdJWUN5QUJLQUlVSWdKRkRRRWdCa0VVYWlBQ05nSUFJQUlnQmpZQ0dBd0JDeUFES0FJRUlnSkJBM0ZCQTBjTkFDQURJQUpCZm5FMkFnUkJBQ0FBTmdLUTBJQ0FBQ0FCSUFCcUlBQTJBZ0FnQVNBQVFRRnlOZ0lFRHdzZ0FTQURUdzBBSUFNb0FnUWlBa0VCY1VVTkFBSkFBa0FnQWtFQ2NRMEFBa0FnQTBFQUtBS2cwSUNBQUVjTkFFRUFJQUUyQXFEUWdJQUFRUUJCQUNnQ2xOQ0FnQUFnQUdvaUFEWUNsTkNBZ0FBZ0FTQUFRUUZ5TmdJRUlBRkJBQ2dDbk5DQWdBQkhEUU5CQUVFQU5nS1EwSUNBQUVFQVFRQTJBcHpRZ0lBQUR3c0NRQ0FEUVFBb0FwelFnSUFBUncwQVFRQWdBVFlDbk5DQWdBQkJBRUVBS0FLUTBJQ0FBQ0FBYWlJQU5nS1EwSUNBQUNBQklBQkJBWEkyQWdRZ0FTQUFhaUFBTmdJQUR3c2dBa0Y0Y1NBQWFpRUFBa0FDUUNBQ1FmOEJTdzBBSUFNb0FnZ2lCQ0FDUVFOMklnVkJBM1JCc05DQWdBQnFJZ1pHR2dKQUlBTW9BZ3dpQWlBRVJ3MEFRUUJCQUNnQ2lOQ0FnQUJCZmlBRmQzRTJBb2pRZ0lBQURBSUxJQUlnQmtZYUlBSWdCRFlDQ0NBRUlBSTJBZ3dNQVFzZ0F5Z0NHQ0VIQWtBQ1FDQURLQUlNSWdZZ0EwWU5BQ0FES0FJSUlnSkJBQ2dDbU5DQWdBQkpHaUFHSUFJMkFnZ2dBaUFHTmdJTURBRUxBa0FnQTBFVWFpSUNLQUlBSWdRTkFDQURRUkJxSWdJb0FnQWlCQTBBUVFBaEJnd0JDd05BSUFJaEJTQUVJZ1pCRkdvaUFpZ0NBQ0lFRFFBZ0JrRVFhaUVDSUFZb0FoQWlCQTBBQ3lBRlFRQTJBZ0FMSUFkRkRRQUNRQUpBSUFNZ0F5Z0NIQ0lFUVFKMFFialNnSUFBYWlJQ0tBSUFSdzBBSUFJZ0JqWUNBQ0FHRFFGQkFFRUFLQUtNMElDQUFFRitJQVIzY1RZQ2pOQ0FnQUFNQWdzZ0IwRVFRUlFnQnlnQ0VDQURSaHRxSUFZMkFnQWdCa1VOQVFzZ0JpQUhOZ0lZQWtBZ0F5Z0NFQ0lDUlEwQUlBWWdBallDRUNBQ0lBWTJBaGdMSUFNb0FoUWlBa1VOQUNBR1FSUnFJQUkyQWdBZ0FpQUdOZ0lZQ3lBQklBQnFJQUEyQWdBZ0FTQUFRUUZ5TmdJRUlBRkJBQ2dDbk5DQWdBQkhEUUZCQUNBQU5nS1EwSUNBQUE4TElBTWdBa0YrY1RZQ0JDQUJJQUJxSUFBMkFnQWdBU0FBUVFGeU5nSUVDd0pBSUFCQi93RkxEUUFnQUVGNGNVR3cwSUNBQUdvaEFnSkFBa0JCQUNnQ2lOQ0FnQUFpQkVFQklBQkJBM1owSWdCeERRQkJBQ0FFSUFCeU5nS0kwSUNBQUNBQ0lRQU1BUXNnQWlnQ0NDRUFDeUFBSUFFMkFnd2dBaUFCTmdJSUlBRWdBallDRENBQklBQTJBZ2dQQzBFZklRSUNRQ0FBUWYvLy93ZExEUUFnQUVFSWRpSUNJQUpCZ1A0L2FrRVFka0VJY1NJQ2RDSUVJQVJCZ09BZmFrRVFka0VFY1NJRWRDSUdJQVpCZ0lBUGFrRVFka0VDY1NJR2RFRVBkaUFDSUFSeUlBWnlheUlDUVFGMElBQWdBa0VWYW5aQkFYRnlRUnhxSVFJTElBRWdBallDSENBQlFnQTNBaEFnQWtFQ2RFRzQwb0NBQUdvaEJBSkFBa0JCQUNnQ2pOQ0FnQUFpQmtFQklBSjBJZ054RFFBZ0JDQUJOZ0lBUVFBZ0JpQURjallDak5DQWdBQWdBU0FFTmdJWUlBRWdBVFlDQ0NBQklBRTJBZ3dNQVFzZ0FFRUFRUmtnQWtFQmRtc2dBa0VmUmh0MElRSWdCQ2dDQUNFR0FrQURRQ0FHSWdRb0FnUkJlSEVnQUVZTkFTQUNRUjEySVFZZ0FrRUJkQ0VDSUFRZ0JrRUVjV3BCRUdvaUF5Z0NBQ0lHRFFBTElBTWdBVFlDQUNBQklBUTJBaGdnQVNBQk5nSU1JQUVnQVRZQ0NBd0JDeUFFS0FJSUlnQWdBVFlDRENBRUlBRTJBZ2dnQVVFQU5nSVlJQUVnQkRZQ0RDQUJJQUEyQWdnTFFRQkJBQ2dDcU5DQWdBQkJmMm9pQVVGL0lBRWJOZ0tvMElDQUFBc0xCQUFBQUF0T0FBSkFJQUFOQUQ4QVFSQjBEd3NDUUNBQVFmLy9BM0VOQUNBQVFYOU1EUUFDUUNBQVFSQjJRQUFpQUVGL1J3MEFRUUJCTURZQytOT0FnQUJCZnc4TElBQkJFSFFQQ3hES2dJQ0FBQUFMOGdJQ0EzOEJmZ0pBSUFKRkRRQWdBQ0FCT2dBQUlBSWdBR29pQTBGL2FpQUJPZ0FBSUFKQkEwa05BQ0FBSUFFNkFBSWdBQ0FCT2dBQklBTkJmV29nQVRvQUFDQURRWDVxSUFFNkFBQWdBa0VIU1EwQUlBQWdBVG9BQXlBRFFYeHFJQUU2QUFBZ0FrRUpTUTBBSUFCQkFDQUFhMEVEY1NJRWFpSURJQUZCL3dGeFFZR0NoQWhzSWdFMkFnQWdBeUFDSUFSclFYeHhJZ1JxSWdKQmZHb2dBVFlDQUNBRVFRbEpEUUFnQXlBQk5nSUlJQU1nQVRZQ0JDQUNRWGhxSUFFMkFnQWdBa0YwYWlBQk5nSUFJQVJCR1VrTkFDQURJQUUyQWhnZ0F5QUJOZ0lVSUFNZ0FUWUNFQ0FESUFFMkFnd2dBa0Z3YWlBQk5nSUFJQUpCYkdvZ0FUWUNBQ0FDUVdocUlBRTJBZ0FnQWtGa2FpQUJOZ0lBSUFRZ0EwRUVjVUVZY2lJRmF5SUNRU0JKRFFBZ0FhMUNnWUNBZ0JCK0lRWWdBeUFGYWlFQkEwQWdBU0FHTndNWUlBRWdCamNERUNBQklBWTNBd2dnQVNBR053TUFJQUZCSUdvaEFTQUNRV0JxSWdKQkgwc05BQXNMSUFBTEM0NUlBUUJCZ0FnTGhrZ0JBQUFBQWdBQUFBTUFBQUFBQUFBQUFBQUFBQVFBQUFBRkFBQUFBQUFBQUFBQUFBQUdBQUFBQndBQUFBZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRWx1ZG1Gc2FXUWdZMmhoY2lCcGJpQjFjbXdnY1hWbGNua0FVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOWliMlI1QUVOdmJuUmxiblF0VEdWdVozUm9JRzkyWlhKbWJHOTNBRU5vZFc1cklITnBlbVVnYjNabGNtWnNiM2NBVW1WemNHOXVjMlVnYjNabGNtWnNiM2NBU1c1MllXeHBaQ0J0WlhSb2IyUWdabTl5SUVoVVZGQXZlQzU0SUhKbGNYVmxjM1FBU1c1MllXeHBaQ0J0WlhSb2IyUWdabTl5SUZKVVUxQXZlQzU0SUhKbGNYVmxjM1FBUlhod1pXTjBaV1FnVTA5VlVrTkZJRzFsZEdodlpDQm1iM0lnU1VORkwzZ3VlQ0J5WlhGMVpYTjBBRWx1ZG1Gc2FXUWdZMmhoY2lCcGJpQjFjbXdnWm5KaFoyMWxiblFnYzNSaGNuUUFSWGh3WldOMFpXUWdaRzkwQUZOd1lXNGdZMkZzYkdKaFkyc2daWEp5YjNJZ2FXNGdiMjVmYzNSaGRIVnpBRWx1ZG1Gc2FXUWdjbVZ6Y0c5dWMyVWdjM1JoZEhWekFFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJR05vZFc1cklHVjRkR1Z1YzJsdmJuTUFWWE5sY2lCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmNtVnpaWFJnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5amFIVnVhMTlvWldGa1pYSmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDl0WlhOellXZGxYMkpsWjJsdVlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZZMmgxYm10ZlpYaDBaVzV6YVc5dVgzWmhiSFZsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmMzUmhkSFZ6WDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmRtVnljMmx2Ymw5amIyMXdiR1YwWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgzVnliRjlqYjIxd2JHVjBaV0FnWTJGc2JHSmhZMnNnWlhKeWIzSUFZRzl1WDJOb2RXNXJYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmYUdWaFpHVnlYM1poYkhWbFgyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZiV1Z6YzJGblpWOWpiMjF3YkdWMFpXQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMjFsZEdodlpGOWpiMjF3YkdWMFpXQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMmhsWVdSbGNsOW1hV1ZzWkY5amIyMXdiR1YwWldBZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyTm9kVzVyWDJWNGRHVnVjMmx2Ymw5dVlXMWxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQlZibVY0Y0dWamRHVmtJR05vWVhJZ2FXNGdkWEpzSUhObGNuWmxjZ0JKYm5aaGJHbGtJR2hsWVdSbGNpQjJZV3gxWlNCamFHRnlBRWx1ZG1Gc2FXUWdhR1ZoWkdWeUlHWnBaV3hrSUdOb1lYSUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOTJaWEp6YVc5dUFFbHVkbUZzYVdRZ2JXbHViM0lnZG1WeWMybHZiZ0JKYm5aaGJHbGtJRzFoYW05eUlIWmxjbk5wYjI0QVJYaHdaV04wWldRZ2MzQmhZMlVnWVdaMFpYSWdkbVZ5YzJsdmJnQkZlSEJsWTNSbFpDQkRVa3hHSUdGbWRHVnlJSFpsY25OcGIyNEFTVzUyWVd4cFpDQklWRlJRSUhabGNuTnBiMjRBU1c1MllXeHBaQ0JvWldGa1pYSWdkRzlyWlc0QVUzQmhiaUJqWVd4c1ltRmpheUJsY25KdmNpQnBiaUJ2Ymw5MWNtd0FTVzUyWVd4cFpDQmphR0Z5WVdOMFpYSnpJR2x1SUhWeWJBQlZibVY0Y0dWamRHVmtJSE4wWVhKMElHTm9ZWElnYVc0Z2RYSnNBRVJ2ZFdKc1pTQkFJR2x1SUhWeWJBQkZiWEIwZVNCRGIyNTBaVzUwTFV4bGJtZDBhQUJKYm5aaGJHbGtJR05vWVhKaFkzUmxjaUJwYmlCRGIyNTBaVzUwTFV4bGJtZDBhQUJFZFhCc2FXTmhkR1VnUTI5dWRHVnVkQzFNWlc1bmRHZ0FTVzUyWVd4cFpDQmphR0Z5SUdsdUlIVnliQ0J3WVhSb0FFTnZiblJsYm5RdFRHVnVaM1JvSUdOaGJpZDBJR0psSUhCeVpYTmxiblFnZDJsMGFDQlVjbUZ1YzJabGNpMUZibU52WkdsdVp3QkpiblpoYkdsa0lHTm9ZWEpoWTNSbGNpQnBiaUJqYUhWdWF5QnphWHBsQUZOd1lXNGdZMkZzYkdKaFkyc2daWEp5YjNJZ2FXNGdiMjVmYUdWaFpHVnlYM1poYkhWbEFGTndZVzRnWTJGc2JHSmhZMnNnWlhKeWIzSWdhVzRnYjI1ZlkyaDFibXRmWlhoMFpXNXphVzl1WDNaaGJIVmxBRWx1ZG1Gc2FXUWdZMmhoY21GamRHVnlJR2x1SUdOb2RXNXJJR1Y0ZEdWdWMybHZibk1nZG1Gc2RXVUFUV2x6YzJsdVp5QmxlSEJsWTNSbFpDQk1SaUJoWm5SbGNpQm9aV0ZrWlhJZ2RtRnNkV1VBU1c1MllXeHBaQ0JnVkhKaGJuTm1aWEl0Ulc1amIyUnBibWRnSUdobFlXUmxjaUIyWVd4MVpRQkpiblpoYkdsa0lHTm9ZWEpoWTNSbGNpQnBiaUJqYUhWdWF5QmxlSFJsYm5OcGIyNXpJSEYxYjNSbElIWmhiSFZsQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUdWNGRHVnVjMmx2Ym5NZ2NYVnZkR1ZrSUhaaGJIVmxBRkJoZFhObFpDQmllU0J2Ymw5b1pXRmtaWEp6WDJOdmJYQnNaWFJsQUVsdWRtRnNhV1FnUlU5R0lITjBZWFJsQUc5dVgzSmxjMlYwSUhCaGRYTmxBRzl1WDJOb2RXNXJYMmhsWVdSbGNpQndZWFZ6WlFCdmJsOXRaWE56WVdkbFgySmxaMmx1SUhCaGRYTmxBRzl1WDJOb2RXNXJYMlY0ZEdWdWMybHZibDkyWVd4MVpTQndZWFZ6WlFCdmJsOXpkR0YwZFhOZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZmRtVnljMmx2Ymw5amIyMXdiR1YwWlNCd1lYVnpaUUJ2Ymw5MWNteGZZMjl0Y0d4bGRHVWdjR0YxYzJVQWIyNWZZMmgxYm10ZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZmFHVmhaR1Z5WDNaaGJIVmxYMk52YlhCc1pYUmxJSEJoZFhObEFHOXVYMjFsYzNOaFoyVmZZMjl0Y0d4bGRHVWdjR0YxYzJVQWIyNWZiV1YwYUc5a1gyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgyaGxZV1JsY2w5bWFXVnNaRjlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDlqYUhWdWExOWxlSFJsYm5OcGIyNWZibUZ0WlNCd1lYVnpaUUJWYm1WNGNHVmpkR1ZrSUhOd1lXTmxJR0ZtZEdWeUlITjBZWEowSUd4cGJtVUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOWphSFZ1YTE5bGVIUmxibk5wYjI1ZmJtRnRaUUJKYm5aaGJHbGtJR05vWVhKaFkzUmxjaUJwYmlCamFIVnVheUJsZUhSbGJuTnBiMjV6SUc1aGJXVUFVR0YxYzJVZ2IyNGdRMDlPVGtWRFZDOVZjR2R5WVdSbEFGQmhkWE5sSUc5dUlGQlNTUzlWY0dkeVlXUmxBRVY0Y0dWamRHVmtJRWhVVkZBdk1pQkRiMjV1WldOMGFXOXVJRkJ5WldaaFkyVUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOXRaWFJvYjJRQVJYaHdaV04wWldRZ2MzQmhZMlVnWVdaMFpYSWdiV1YwYUc5a0FGTndZVzRnWTJGc2JHSmhZMnNnWlhKeWIzSWdhVzRnYjI1ZmFHVmhaR1Z5WDJacFpXeGtBRkJoZFhObFpBQkpiblpoYkdsa0lIZHZjbVFnWlc1amIzVnVkR1Z5WldRQVNXNTJZV3hwWkNCdFpYUm9iMlFnWlc1amIzVnVkR1Z5WldRQVZXNWxlSEJsWTNSbFpDQmphR0Z5SUdsdUlIVnliQ0J6WTJobGJXRUFVbVZ4ZFdWemRDQm9ZWE1nYVc1MllXeHBaQ0JnVkhKaGJuTm1aWEl0Ulc1amIyUnBibWRnQUZOWFNWUkRTRjlRVWs5WVdRQlZVMFZmVUZKUFdGa0FUVXRCUTFSSlZrbFVXUUJWVGxCU1QwTkZVMU5CUWt4RlgwVk9WRWxVV1FCRFQxQlpBRTFQVmtWRVgxQkZVazFCVGtWT1ZFeFpBRlJQVDE5RlFWSk1XUUJPVDFSSlJsa0FSa0ZKVEVWRVgwUkZVRVZPUkVWT1Exa0FRa0ZFWDBkQlZFVlhRVmtBVUV4QldRQlFWVlFBUTBoRlEwdFBWVlFBUjBGVVJWZEJXVjlVU1UxRlQxVlVBRkpGVVZWRlUxUmZWRWxOUlU5VlZBQk9SVlJYVDFKTFgwTlBUazVGUTFSZlZFbE5SVTlWVkFCRFQwNU9SVU5VU1U5T1gxUkpUVVZQVlZRQVRFOUhTVTVmVkVsTlJVOVZWQUJPUlZSWFQxSkxYMUpGUVVSZlZFbE5SVTlWVkFCUVQxTlVBRTFKVTBSSlVrVkRWRVZFWDFKRlVWVkZVMVFBUTB4SlJVNVVYME5NVDFORlJGOVNSVkZWUlZOVUFFTk1TVVZPVkY5RFRFOVRSVVJmVEU5QlJGOUNRVXhCVGtORlJGOVNSVkZWUlZOVUFFSkJSRjlTUlZGVlJWTlVBRWhVVkZCZlVrVlJWVVZUVkY5VFJVNVVYMVJQWDBoVVZGQlRYMUJQVWxRQVVrVlFUMUpVQUVsTlgwRmZWRVZCVUU5VUFGSkZVMFZVWDBOUFRsUkZUbFFBVGs5ZlEwOU9WRVZPVkFCUVFWSlVTVUZNWDBOUFRsUkZUbFFBU0ZCRlgwbE9Wa0ZNU1VSZlEwOU9VMVJCVGxRQVNGQkZYME5DWDFKRlUwVlVBRWRGVkFCSVVFVmZVMVJTU1VOVUFFTlBUa1pNU1VOVUFGUkZUVkJQVWtGU1dWOVNSVVJKVWtWRFZBQlFSVkpOUVU1RlRsUmZVa1ZFU1ZKRlExUUFRMDlPVGtWRFZBQk5WVXhVU1Y5VFZFRlVWVk1BU0ZCRlgwbE9Wa0ZNU1VSZlUxUkJWRlZUQUZSUFQxOU5RVTVaWDFKRlVWVkZVMVJUQUVWQlVreFpYMGhKVGxSVEFGVk9RVlpCU1V4QlFreEZYMFpQVWw5TVJVZEJURjlTUlVGVFQwNVRBRTlRVkVsUFRsTUFVMWRKVkVOSVNVNUhYMUJTVDFSUFEwOU1Vd0JXUVZKSlFVNVVYMEZNVTA5ZlRrVkhUMVJKUVZSRlV3Qk5WVXhVU1ZCTVJWOURTRTlKUTBWVEFFbE9WRVZTVGtGTVgxTkZVbFpGVWw5RlVsSlBVZ0JYUlVKZlUwVlNWa1ZTWDFWT1MwNVBWMDVmUlZKU1QxSUFVa0ZKVEVkVlRsOUZVbEpQVWdCSlJFVk9WRWxVV1Y5UVVrOVdTVVJGVWw5QlZWUklSVTVVU1VOQlZFbFBUbDlGVWxKUFVnQlRVMHhmUTBWU1ZFbEdTVU5CVkVWZlJWSlNUMUlBU1U1V1FVeEpSRjlZWDBaUFVsZEJVa1JGUkY5R1QxSUFVMFZVWDFCQlVrRk5SVlJGVWdCSFJWUmZVRUZTUVUxRlZFVlNBRWhRUlY5VlUwVlNBRk5GUlY5UFZFaEZVZ0JJVUVWZlEwSmZRMGhWVGt0ZlNFVkJSRVZTQUUxTFEwRk1SVTVFUVZJQVUwVlVWVkFBVjBWQ1gxTkZVbFpGVWw5SlUxOUVUMWRPQUZSRlFWSkVUMWRPQUVoUVJWOURURTlUUlVSZlEwOU9Ua1ZEVkVsUFRnQklSVlZTU1ZOVVNVTmZSVmhRU1ZKQlZFbFBUZ0JFU1ZORFQwNU9SVU5VUlVSZlQxQkZVa0ZVU1U5T0FFNVBUbDlCVlZSSVQxSkpWRUZVU1ZaRlgwbE9SazlTVFVGVVNVOU9BRWhRUlY5SlRsWkJURWxFWDFaRlVsTkpUMDRBU0ZCRlgwTkNYMDFGVTFOQlIwVmZRa1ZIU1U0QVUwbFVSVjlKVTE5R1VrOWFSVTRBU0ZCRlgwbE9Wa0ZNU1VSZlNFVkJSRVZTWDFSUFMwVk9BRWxPVmtGTVNVUmZWRTlMUlU0QVJrOVNRa2xFUkVWT0FFVk9TRUZPUTBWZldVOVZVbDlEUVV4TkFFaFFSVjlKVGxaQlRFbEVYMVZTVEFCQ1RFOURTMFZFWDBKWlgxQkJVa1ZPVkVGTVgwTlBUbFJTVDB3QVRVdERUMHdBUVVOTUFFaFFSVjlKVGxSRlVrNUJUQUJTUlZGVlJWTlVYMGhGUVVSRlVsOUdTVVZNUkZOZlZFOVBYMHhCVWtkRlgxVk9UMFpHU1VOSlFVd0FTRkJGWDA5TEFGVk9URWxPU3dCVlRreFBRMHNBVUZKSkFGSkZWRkpaWDFkSlZFZ0FTRkJGWDBsT1ZrRk1TVVJmUTA5T1ZFVk9WRjlNUlU1SFZFZ0FTRkJGWDFWT1JWaFFSVU5VUlVSZlEwOU9WRVZPVkY5TVJVNUhWRWdBUmt4VlUwZ0FVRkpQVUZCQlZFTklBRTB0VTBWQlVrTklBRlZTU1Y5VVQwOWZURTlPUndCUVVrOURSVk5UU1U1SEFFMUpVME5GVEV4QlRrVlBWVk5mVUVWU1UwbFRWRVZPVkY5WFFWSk9TVTVIQUUxSlUwTkZURXhCVGtWUFZWTmZWMEZTVGtsT1J3QklVRVZmU1U1V1FVeEpSRjlVVWtGT1UwWkZVbDlGVGtOUFJFbE9Sd0JGZUhCbFkzUmxaQ0JEVWt4R0FFaFFSVjlKVGxaQlRFbEVYME5JVlU1TFgxTkpXa1VBVFU5V1JRQkRUMDVVU1U1VlJRQklVRVZmUTBKZlUxUkJWRlZUWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlJUlVGRVJWSlRYME5QVFZCTVJWUkZBRWhRUlY5RFFsOVdSVkpUU1U5T1gwTlBUVkJNUlZSRkFFaFFSVjlEUWw5VlVreGZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwTklWVTVMWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlJUlVGRVJWSmZWa0ZNVlVWZlEwOU5VRXhGVkVVQVNGQkZYME5DWDBOSVZVNUxYMFZZVkVWT1UwbFBUbDlXUVV4VlJWOURUMDFRVEVWVVJRQklVRVZmUTBKZlEwaFZUa3RmUlZoVVJVNVRTVTlPWDA1QlRVVmZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwMUZVMU5CUjBWZlEwOU5VRXhGVkVVQVNGQkZYME5DWDAxRlZFaFBSRjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZTRVZCUkVWU1gwWkpSVXhFWDBOUFRWQk1SVlJGQUVSRlRFVlVSUUJJVUVWZlNVNVdRVXhKUkY5RlQwWmZVMVJCVkVVQVNVNVdRVXhKUkY5VFUweGZRMFZTVkVsR1NVTkJWRVVBVUVGVlUwVUFUazlmVWtWVFVFOU9VMFVBVlU1VFZWQlFUMUpVUlVSZlRVVkVTVUZmVkZsUVJRQkhUMDVGQUU1UFZGOUJRME5GVUZSQlFreEZBRk5GVWxaSlEwVmZWVTVCVmtGSlRFRkNURVVBVWtGT1IwVmZUazlVWDFOQlZFbFRSa2xCUWt4RkFFOVNTVWRKVGw5SlUxOVZUbEpGUVVOSVFVSk1SUUJTUlZOUVQwNVRSVjlKVTE5VFZFRk1SUUJRVlZKSFJRQk5SVkpIUlFCU1JWRlZSVk5VWDBoRlFVUkZVbDlHU1VWTVJGTmZWRTlQWDB4QlVrZEZBRkpGVVZWRlUxUmZTRVZCUkVWU1gxUlBUMTlNUVZKSFJRQlFRVmxNVDBGRVgxUlBUMTlNUVZKSFJRQkpUbE5WUmtaSlEwbEZUbFJmVTFSUFVrRkhSUUJJVUVWZlVFRlZVMFZFWDFWUVIxSkJSRVVBU0ZCRlgxQkJWVk5GUkY5SU1sOVZVRWRTUVVSRkFGTlBWVkpEUlFCQlRrNVBWVTVEUlFCVVVrRkRSUUJJVUVWZlZVNUZXRkJGUTFSRlJGOVRVRUZEUlFCRVJWTkRVa2xDUlFCVlRsTlZRbE5EVWtsQ1JRQlNSVU5QVWtRQVNGQkZYMGxPVmtGTVNVUmZUVVZVU0U5RUFFNVBWRjlHVDFWT1JBQlFVazlRUmtsT1JBQlZUa0pKVGtRQVVrVkNTVTVFQUZWT1FWVlVTRTlTU1ZwRlJBQk5SVlJJVDBSZlRrOVVYMEZNVEU5WFJVUUFTRlJVVUY5V1JWSlRTVTlPWDA1UFZGOVRWVkJRVDFKVVJVUUFRVXhTUlVGRVdWOVNSVkJQVWxSRlJBQkJRME5GVUZSRlJBQk9UMVJmU1UxUVRFVk5SVTVVUlVRQVRFOVBVRjlFUlZSRlExUkZSQUJJVUVWZlExSmZSVmhRUlVOVVJVUUFTRkJGWDB4R1gwVllVRVZEVkVWRUFFTlNSVUZVUlVRQVNVMWZWVk5GUkFCSVVFVmZVRUZWVTBWRUFGUkpUVVZQVlZSZlQwTkRWVkpGUkFCUVFWbE5SVTVVWDFKRlVWVkpVa1ZFQUZCU1JVTlBUa1JKVkVsUFRsOVNSVkZWU1ZKRlJBQlFVazlZV1Y5QlZWUklSVTVVU1VOQlZFbFBUbDlTUlZGVlNWSkZSQUJPUlZSWFQxSkxYMEZWVkVoRlRsUkpRMEZVU1U5T1gxSkZVVlZKVWtWRUFFeEZUa2RVU0Y5U1JWRlZTVkpGUkFCVFUweGZRMFZTVkVsR1NVTkJWRVZmVWtWUlZVbFNSVVFBVlZCSFVrRkVSVjlTUlZGVlNWSkZSQUJRUVVkRlgwVllVRWxTUlVRQVVGSkZRMDlPUkVsVVNVOU9YMFpCU1V4RlJBQkZXRkJGUTFSQlZFbFBUbDlHUVVsTVJVUUFVa1ZXUVV4SlJFRlVTVTlPWDBaQlNVeEZSQUJUVTB4ZlNFRk9SRk5JUVV0RlgwWkJTVXhGUkFCTVQwTkxSVVFBVkZKQlRsTkdUMUpOUVZSSlQwNWZRVkJRVEVsRlJBQk9UMVJmVFU5RVNVWkpSVVFBVGs5VVgwVllWRVZPUkVWRUFFSkJUa1JYU1VSVVNGOU1TVTFKVkY5RldFTkZSVVJGUkFCVFNWUkZYMGxUWDA5V1JWSk1UMEZFUlVRQVNFVkJSQUJGZUhCbFkzUmxaQ0JJVkZSUUx3QUFYaE1BQUNZVEFBQXdFQUFBOEJjQUFKMFRBQUFWRWdBQU9SY0FBUEFTQUFBS0VBQUFkUklBQUswU0FBQ0NFd0FBVHhRQUFIOFFBQUNnRlFBQUl4UUFBSWtTQUFDTEZBQUFUUlVBQU5RUkFBRFBGQUFBRUJnQUFNa1dBQURjRmdBQXdSRUFBT0FYQUFDN0ZBQUFkQlFBQUh3VkFBRGxGQUFBQ0JjQUFCOFFBQUJsRlFBQW94UUFBQ2dWQUFBQ0ZRQUFtUlVBQUN3UUFBQ0xHUUFBVHc4QUFOUU9BQUJxRUFBQXpoQUFBQUlYQUFDSkRnQUFiaE1BQUJ3VEFBQm1GQUFBVmhjQUFNRVRBQURORXdBQWJCTUFBR2dYQUFCbUZ3QUFYeGNBQUNJVEFBRE9Ed0FBYVE0QUFOZ09BQUJqRmdBQXl4TUFBS29PQUFBb0Z3QUFKaGNBQU1VVEFBQmRGZ0FBNkJFQUFHY1RBQUJsRXdBQThoWUFBSE1UQUFBZEZ3QUErUllBQVBNUkFBRFBEZ0FBemhVQUFBd1NBQUN6RVFBQXBSRUFBR0VRQUFBeUZ3QUF1eE1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBUUlCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFJREFnSUNBZ0lBQUFJQ0FBSUNBQUlDQWdJQ0FnSUNBZ0lBQkFBQUFBQUFBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFBQUFDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdBQ0FBSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNBQUlDQWdJQ0FBQUNBZ0FDQWdBQ0FnSUNBZ0lDQWdJQ0FBTUFCQUFBQUFJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQUFBQUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFBZ0FDQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWJHOXpaV1ZsY0MxaGJHbDJaUUFBQUFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQkFRRUJBUUVCQVFFQkFRSUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCWTJoMWJtdGxaQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRRUFBUUVCQVFFQUFBRUJBQUVCQUFFQkFRRUJBUUVCQVFFQUFBQUFBQUFBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQUFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCbFkzUnBiMjVsYm5RdGJHVnVaM1JvYjI1eWIzaDVMV052Ym01bFkzUnBiMjRBQUFBQUFBQUFBQUFBQUFBQUFBQnlZVzV6Wm1WeUxXVnVZMjlrYVc1bmNHZHlZV1JsRFFvTkNnMEtVMDBOQ2cwS1ZGUlFMME5GTDFSVFVDOEFBQUFBQUFBQUFBQUFBQUFCQWdBQkF3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBQUFBQUFBQUFBQUFRSUFBUU1BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQVFFRkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFBQUFBQUFBQUFBQUVBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUJBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFBQUFBQUFBQUFBQUFRQUFBZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU1FQUFBRUJBUUVCQVFFQkFRRUJBVUVCQVFFQkFRRUJBUUVCQVFBQkFBR0J3UUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUVBQVFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFJQUFBQUFBQUFEQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd0FBQUFBQUFBTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUlBQUFBQUFnQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNQUFBQUFBQUFEQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQk9UMVZPUTBWRlEwdFBWVlJPUlVOVVJWUkZRMUpKUWtWTVZWTklSVlJGUVVSVFJVRlNRMGhTUjBWRFZFbFdTVlJaVEVWT1JFRlNWa1ZQVkVsR1dWQlVTVTlPVTBOSVUwVkJXVk5VUVZSRFNFZEZUMUpFU1ZKRlExUlBVbFJTUTBoUVFWSkJUVVZVUlZKVlVrTkZRbE5EVWtsQ1JVRlNSRTlYVGtGRFJVbE9SRTVMUTB0VlFsTkRVa2xDUlVoVVZGQXZRVVJVVUM4PSdcbiIsICJtb2R1bGUuZXhwb3J0cyA9ICdBR0Z6YlFFQUFBQUJNQWhnQVg4QmYyQURmMzkvQVg5Z0JIOS9mMzhCZjJBQUFHQURmMzkvQUdBQmZ3QmdBbjkvQUdBR2YzOS9mMzkvQUFMTEFRZ0RaVzUyR0hkaGMyMWZiMjVmYUdWaFpHVnljMTlqYjIxd2JHVjBaUUFDQTJWdWRoVjNZWE50WDI5dVgyMWxjM05oWjJWZlltVm5hVzRBQUFObGJuWUxkMkZ6YlY5dmJsOTFjbXdBQVFObGJuWU9kMkZ6YlY5dmJsOXpkR0YwZFhNQUFRTmxibllVZDJGemJWOXZibDlvWldGa1pYSmZabWxsYkdRQUFRTmxibllVZDJGemJWOXZibDlvWldGa1pYSmZkbUZzZFdVQUFRTmxibllNZDJGemJWOXZibDlpYjJSNUFBRURaVzUyR0hkaGMyMWZiMjVmYldWemMyRm5aVjlqYjIxd2JHVjBaUUFBQTBaRkF3TUVBQUFGQUFBQUFBQUFCUUVGQUFVRkJRQUFCZ0FBQUFBR0JnWUdBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBQUFCQVFjQUFBVUZBd0FCQkFVQmNBRVNFZ1VEQVFBQ0JnZ0Jmd0ZCZ05RRUN3ZlJCU0lHYldWdGIzSjVBZ0FMWDJsdWFYUnBZV3hwZW1VQUNSbGZYMmx1WkdseVpXTjBYMloxYm1OMGFXOXVYM1JoWW14bEFRQUxiR3hvZEhSd1gybHVhWFFBQ2hoc2JHaDBkSEJmYzJodmRXeGtYMnRsWlhCZllXeHBkbVVBUVF4c2JHaDBkSEJmWVd4c2IyTUFEQVp0WVd4c2IyTUFSZ3RzYkdoMGRIQmZabkpsWlFBTkJHWnlaV1VBU0E5c2JHaDBkSEJmWjJWMFgzUjVjR1VBRGhWc2JHaDBkSEJmWjJWMFgyaDBkSEJmYldGcWIzSUFEeFZzYkdoMGRIQmZaMlYwWDJoMGRIQmZiV2x1YjNJQUVCRnNiR2gwZEhCZloyVjBYMjFsZEdodlpBQVJGbXhzYUhSMGNGOW5aWFJmYzNSaGRIVnpYMk52WkdVQUVoSnNiR2gwZEhCZloyVjBYM1Z3WjNKaFpHVUFFd3hzYkdoMGRIQmZjbVZ6WlhRQUZBNXNiR2gwZEhCZlpYaGxZM1YwWlFBVkZHeHNhSFIwY0Y5elpYUjBhVzVuYzE5cGJtbDBBQllOYkd4b2RIUndYMlpwYm1semFBQVhER3hzYUhSMGNGOXdZWFZ6WlFBWURXeHNhSFIwY0Y5eVpYTjFiV1VBR1J0c2JHaDBkSEJmY21WemRXMWxYMkZtZEdWeVgzVndaM0poWkdVQUdoQnNiR2gwZEhCZloyVjBYMlZ5Y201dkFCc1hiR3hvZEhSd1gyZGxkRjlsY25KdmNsOXlaV0Z6YjI0QUhCZHNiR2gwZEhCZmMyVjBYMlZ5Y205eVgzSmxZWE52YmdBZEZHeHNhSFIwY0Y5blpYUmZaWEp5YjNKZmNHOXpBQjRSYkd4b2RIUndYMlZ5Y201dlgyNWhiV1VBSHhKc2JHaDBkSEJmYldWMGFHOWtYMjVoYldVQUlCSnNiR2gwZEhCZmMzUmhkSFZ6WDI1aGJXVUFJUnBzYkdoMGRIQmZjMlYwWDJ4bGJtbGxiblJmYUdWaFpHVnljd0FpSVd4c2FIUjBjRjl6WlhSZmJHVnVhV1Z1ZEY5amFIVnVhMlZrWDJ4bGJtZDBhQUFqSFd4c2FIUjBjRjl6WlhSZmJHVnVhV1Z1ZEY5clpXVndYMkZzYVhabEFDUWtiR3hvZEhSd1gzTmxkRjlzWlc1cFpXNTBYM1J5WVc1elptVnlYMlZ1WTI5a2FXNW5BQ1VZYkd4b2RIUndYMjFsYzNOaFoyVmZibVZsWkhOZlpXOW1BRDhKRndFQVFRRUxFUUVDQXdRRkN3WUhOVGszTVM4dEp5c3BDckxnQWtVQ0FBc0lBQkNJZ0lDQUFBc1pBQ0FBRU1LQWdJQUFHaUFBSUFJMkFqZ2dBQ0FCT2dBb0N4d0FJQUFnQUM4Qk1pQUFMUUF1SUFBUXdZQ0FnQUFRZ0lDQWdBQUxLZ0VCZjBIQUFCREdnSUNBQUNJQkVNS0FnSUFBR2lBQlFZQ0lnSUFBTmdJNElBRWdBRG9BS0NBQkN3b0FJQUFReUlDQWdBQUxCd0FnQUMwQUtBc0hBQ0FBTFFBcUN3Y0FJQUF0QUNzTEJ3QWdBQzBBS1FzSEFDQUFMd0V5Q3djQUlBQXRBQzRMUlFFRWZ5QUFLQUlZSVFFZ0FDMEFMU0VDSUFBdEFDZ2hBeUFBS0FJNElRUWdBQkRDZ0lDQUFCb2dBQ0FFTmdJNElBQWdBem9BS0NBQUlBSTZBQzBnQUNBQk5nSVlDeEVBSUFBZ0FTQUJJQUpxRU1PQWdJQUFDeEFBSUFCQkFFSGNBQkRNZ0lDQUFCb0xad0VCZjBFQUlRRUNRQ0FBS0FJTURRQUNRQUpBQWtBQ1FDQUFMUUF2RGdNQkFBTUNDeUFBS0FJNElnRkZEUUFnQVNnQ0xDSUJSUTBBSUFBZ0FSR0FnSUNBQUFBaUFRMERDMEVBRHdzUXlvQ0FnQUFBQ3lBQVFjT1dnSUFBTmdJUVFRNGhBUXNnQVFzZUFBSkFJQUFvQWd3TkFDQUFRZEdiZ0lBQU5nSVFJQUJCRlRZQ0RBc0xGZ0FDUUNBQUtBSU1RUlZIRFFBZ0FFRUFOZ0lNQ3dzV0FBSkFJQUFvQWd4QkZrY05BQ0FBUVFBMkFnd0xDd2NBSUFBb0Fnd0xCd0FnQUNnQ0VBc0pBQ0FBSUFFMkFoQUxCd0FnQUNnQ0ZBc2lBQUpBSUFCQkpFa05BQkRLZ0lDQUFBQUxJQUJCQW5SQm9MT0FnQUJxS0FJQUN5SUFBa0FnQUVFdVNRMEFFTXFBZ0lBQUFBc2dBRUVDZEVHd3RJQ0FBR29vQWdBTDdnc0JBWDlCNjZpQWdBQWhBUUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQm5IOXFEdlFEWTJJQUFXRmhZV0ZoWVFJREJBVmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoQmdjSUNRb0xEQTBPRDJGaFlXRmhFR0ZoWVdGaFlXRmhZV0ZoRVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVJJVEZCVVdGeGdaR2h0aFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaEhCMGVIeUFoSWlNa0pTWW5LQ2txS3l3dExpOHdNVEl6TkRVMllUYzRPVHBoWVdGaFlXRmhZVHRoWVdFOFlXRmhZVDArUDJGaFlXRmhZV0ZoUUdGaFFXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZVUpEUkVWR1IwaEpTa3RNVFU1UFVGRlNVMkZoWVdGaFlXRmhWRlZXVjFoWldsdGhYRjFoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGZVlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFgyQmhDMEhocDRDQUFBOExRYVNoZ0lBQUR3dEJ5NnlBZ0FBUEMwSCtzWUNBQUE4TFFjQ2tnSUFBRHd0QnE2U0FnQUFQQzBHTnFJQ0FBQThMUWVLbWdJQUFEd3RCZ0xDQWdBQVBDMEc1cjRDQUFBOExRZGVrZ0lBQUR3dEI3NStBZ0FBUEMwSGhuNENBQUE4TFFmcWZnSUFBRHd0QjhxQ0FnQUFQQzBHb3I0Q0FBQThMUWE2eWdJQUFEd3RCaUxDQWdBQVBDMEhzcDRDQUFBOExRWUtpZ0lBQUR3dEJqcDJBZ0FBUEMwSFFyb0NBQUE4TFFjcWpnSUFBRHd0QnhiS0FnQUFQQzBIZm5JQ0FBQThMUWRLY2dJQUFEd3RCeEtDQWdBQVBDMEhYb0lDQUFBOExRYUtmZ0lBQUR3dEI3YTZBZ0FBUEMwR3JzSUNBQUE4TFFkU2xnSUFBRHd0QnpLNkFnQUFQQzBINnJvQ0FBQThMUWZ5cmdJQUFEd3RCMHJDQWdBQVBDMEh4bllDQUFBOExRYnVnZ0lBQUR3dEI5NnVBZ0FBUEMwR1FzWUNBQUE4TFFkZXhnSUFBRHd0Qm9xMkFnQUFQQzBIVXA0Q0FBQThMUWVDcmdJQUFEd3RCbjZ5QWdBQVBDMEhyc1lDQUFBOExRZFdmZ0lBQUR3dEJ5ckdBZ0FBUEMwSGVwWUNBQUE4TFFkU2VnSUFBRHd0QjlKeUFnQUFQQzBHbnNvQ0FBQThMUWJHZGdJQUFEd3RCb0oyQWdBQVBDMEc1c1lDQUFBOExRYnl3Z0lBQUR3dEJrcUdBZ0FBUEMwR3pwb0NBQUE4TFFlbXNnSUFBRHd0QnJKNkFnQUFQQzBIVXE0Q0FBQThMUWZlbWdJQUFEd3RCZ0thQWdBQVBDMEd3b1lDQUFBOExRZjZlZ0lBQUR3dEJqYU9BZ0FBUEMwR0pyWUNBQUE4TFFmZWlnSUFBRHd0Qm9MR0FnQUFQQzBHdW40Q0FBQThMUWNhbGdJQUFEd3RCNko2QWdBQVBDMEdUb29DQUFBOExRY0t2Z0lBQUR3dEJ3NTJBZ0FBUEMwR0xySUNBQUE4TFFlR2RnSUFBRHd0QmphK0FnQUFQQzBIcW9ZQ0FBQThMUWJTdGdJQUFEd3RCMHErQWdBQVBDMEhmc29DQUFBOExRZEt5Z0lBQUR3dEI4TENBZ0FBUEMwR3Bvb0NBQUE4TFFmbWpnSUFBRHd0Qm1aNkFnQUFQQzBHMXJJQ0FBQThMUVp1d2dJQUFEd3RCa3JLQWdBQVBDMEcycTRDQUFBOExRY0tpZ0lBQUR3dEIrTEtBZ0FBUEMwR2VwWUNBQUE4TFFkQ2lnSUFBRHd0QnVwNkFnQUFQQzBHQm5vQ0FBQThMRU1xQWdJQUFBQXRCMXFHQWdBQWhBUXNnQVFzV0FDQUFJQUF0QUMxQi9nRnhJQUZCQUVkeU9nQXRDeGtBSUFBZ0FDMEFMVUg5QVhFZ0FVRUFSMEVCZEhJNkFDMExHUUFnQUNBQUxRQXRRZnNCY1NBQlFRQkhRUUowY2pvQUxRc1pBQ0FBSUFBdEFDMUI5d0Z4SUFGQkFFZEJBM1J5T2dBdEN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWdBaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxTUUVDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0JDSUVSUTBBSUFBZ0FTQUNJQUZySUFRUmdZQ0FnQUFBSWdOQmYwY05BQ0FBUWNhUmdJQUFOZ0lRUVJnaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSXdJZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQzBrQkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BZ2dpQkVVTkFDQUFJQUVnQWlBQmF5QUVFWUdBZ0lBQUFDSURRWDlIRFFBZ0FFSDJpb0NBQURZQ0VFRVlJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDTkNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEpBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJTUlnUkZEUUFnQUNBQklBSWdBV3NnQkJHQmdJQ0FBQUFpQTBGL1J3MEFJQUJCN1pxQWdBQTJBaEJCR0NFREN5QURDeTRCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FqZ2lCRVVOQUNBQUlBUVJnSUNBZ0FBQUlRTUxJQU1MU1FFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NFQ0lFUlEwQUlBQWdBU0FDSUFGcklBUVJnWUNBZ0FBQUlnTkJmMGNOQUNBQVFaV1FnSUFBTmdJUVFSZ2hBd3NnQXdzdUFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUk4SWdSRkRRQWdBQ0FFRVlDQWdJQUFBQ0VEQ3lBREMwa0JBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWhRaUJFVU5BQ0FBSUFFZ0FpQUJheUFFRVlHQWdJQUFBQ0lEUVg5SERRQWdBRUdxbTRDQUFEWUNFRUVZSVFNTElBTUxMZ0VDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ1FDSUVSUTBBSUFBZ0JCR0FnSUNBQUFBaEF3c2dBd3RKQVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSVlJZ1JGRFFBZ0FDQUJJQUlnQVdzZ0JCR0JnSUNBQUFBaUEwRi9SdzBBSUFCQjdaT0FnQUEyQWhCQkdDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9Ba1FpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDSkNJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3c3VBUUovUVFBaEF3SkFJQUFvQWpnaUJFVU5BQ0FFS0FJc0lnUkZEUUFnQUNBRUVZQ0FnSUFBQUNFREN5QURDMGtCQW45QkFDRURBa0FnQUNnQ09DSUVSUTBBSUFRb0FpZ2lCRVVOQUNBQUlBRWdBaUFCYXlBRUVZR0FnSUFBQUNJRFFYOUhEUUFnQUVIMmlJQ0FBRFlDRUVFWUlRTUxJQU1MTGdFQ2YwRUFJUU1DUUNBQUtBSTRJZ1JGRFFBZ0JDZ0NVQ0lFUlEwQUlBQWdCQkdBZ0lDQUFBQWhBd3NnQXd0SkFRSi9RUUFoQXdKQUlBQW9BamdpQkVVTkFDQUVLQUljSWdSRkRRQWdBQ0FCSUFJZ0FXc2dCQkdCZ0lDQUFBQWlBMEYvUncwQUlBQkJ3cG1BZ0FBMkFoQkJHQ0VEQ3lBREN5NEJBbjlCQUNFREFrQWdBQ2dDT0NJRVJRMEFJQVFvQWtnaUJFVU5BQ0FBSUFRUmdJQ0FnQUFBSVFNTElBTUxTUUVDZjBFQUlRTUNRQ0FBS0FJNElnUkZEUUFnQkNnQ0lDSUVSUTBBSUFBZ0FTQUNJQUZySUFRUmdZQ0FnQUFBSWdOQmYwY05BQ0FBUVpTVWdJQUFOZ0lRUVJnaEF3c2dBd3N1QVFKL1FRQWhBd0pBSUFBb0FqZ2lCRVVOQUNBRUtBSk1JZ1JGRFFBZ0FDQUVFWUNBZ0lBQUFDRURDeUFEQ3k0QkFuOUJBQ0VEQWtBZ0FDZ0NPQ0lFUlEwQUlBUW9BbFFpQkVVTkFDQUFJQVFSZ0lDQWdBQUFJUU1MSUFNTExnRUNmMEVBSVFNQ1FDQUFLQUk0SWdSRkRRQWdCQ2dDV0NJRVJRMEFJQUFnQkJHQWdJQ0FBQUFoQXdzZ0F3dEZBUUYvQWtBQ1FDQUFMd0V3UVJSeFFSUkhEUUJCQVNFRElBQXRBQ2hCQVVZTkFTQUFMd0V5UWVVQVJpRUREQUVMSUFBdEFDbEJCVVloQXdzZ0FDQURPZ0F1UVFBTC9nRUJBMzlCQVNFREFrQWdBQzhCTUNJRVFRaHhEUUFnQUNrRElFSUFVaUVEQ3dKQUFrQWdBQzBBTGtVTkFFRUJJUVVnQUMwQUtVRUZSZzBCUVFFaEJTQUVRY0FBY1VVZ0EzRkJBVWNOQVF0QkFDRUZJQVJCd0FCeERRQkJBaUVGSUFSQi8vOERjU0lEUVFoeERRQUNRQ0FEUVlBRWNVVU5BQUpBSUFBdEFDaEJBVWNOQUNBQUxRQXRRUXB4RFFCQkJROExRUVFQQ3dKQUlBTkJJSEVOQUFKQUlBQXRBQ2hCQVVZTkFDQUFMd0V5UWYvL0EzRWlBRUdjZjJwQjVBQkpEUUFnQUVITUFVWU5BQ0FBUWJBQ1JnMEFRUVFoQlNBRVFTaHhSUTBDSUFOQmlBUnhRWUFFUmcwQ0MwRUFEd3RCQUVFRElBQXBBeUJRR3lFRkN5QUZDMklCQW45QkFDRUJBa0FnQUMwQUtFRUJSZzBBSUFBdkFUSkIvLzhEY1NJQ1FaeC9ha0hrQUVrTkFDQUNRY3dCUmcwQUlBSkJzQUpHRFFBZ0FDOEJNQ0lBUWNBQWNRMEFRUUVoQVNBQVFZZ0VjVUdBQkVZTkFDQUFRU2h4UlNFQkN5QUJDNmNCQVFOL0FrQUNRQUpBSUFBdEFDcEZEUUFnQUMwQUswVU5BRUVBSVFNZ0FDOEJNQ0lFUVFKeFJRMEJEQUlMUVFBaEF5QUFMd0V3SWdSQkFYRkZEUUVMUVFFaEF5QUFMUUFvUVFGR0RRQWdBQzhCTWtILy93TnhJZ1ZCbkg5cVFlUUFTUTBBSUFWQnpBRkdEUUFnQlVHd0FrWU5BQ0FFUWNBQWNRMEFRUUFoQXlBRVFZZ0VjVUdBQkVZTkFDQUVRU2h4UVFCSElRTUxJQUJCQURzQk1DQUFRUUE2QUM4Z0F3dVpBUUVDZndKQUFrQUNRQ0FBTFFBcVJRMEFJQUF0QUN0RkRRQkJBQ0VCSUFBdkFUQWlBa0VDY1VVTkFRd0NDMEVBSVFFZ0FDOEJNQ0lDUVFGeFJRMEJDMEVCSVFFZ0FDMEFLRUVCUmcwQUlBQXZBVEpCLy84RGNTSUFRWngvYWtIa0FFa05BQ0FBUWN3QlJnMEFJQUJCc0FKR0RRQWdBa0hBQUhFTkFFRUFJUUVnQWtHSUJIRkJnQVJHRFFBZ0FrRW9jVUVBUnlFQkN5QUJDMGtCQVhzZ0FFRVFhdjBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0lCL1FzREFDQUFJQUg5Q3dNQUlBQkJNR29nQWYwTEF3QWdBRUVnYWlBQi9Rc0RBQ0FBUWQwQk5nSWNRUUFMZXdFQmZ3SkFJQUFvQWd3aUF3MEFBa0FnQUNnQ0JFVU5BQ0FBSUFFMkFnUUxBa0FnQUNBQklBSVF4SUNBZ0FBaUF3MEFJQUFvQWd3UEN5QUFJQU0yQWh4QkFDRURJQUFvQWdRaUFVVU5BQ0FBSUFFZ0FpQUFLQUlJRVlHQWdJQUFBQ0lCUlEwQUlBQWdBallDRkNBQUlBRTJBZ3dnQVNFREN5QURDK1R6QVFNT2Z3TitCSDhqZ0lDQWdBQkJFR3NpQXlTQWdJQ0FBQ0FCSVFRZ0FTRUZJQUVoQmlBQklRY2dBU0VJSUFFaENTQUJJUW9nQVNFTElBRWhEQ0FCSVEwZ0FTRU9JQUVoRHdKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBQUtBSWNJaEJCZjJvTzNRSGFBUUhaQVFJREJBVUdCd2dKQ2dzTURRN1lBUThRMXdFUkV0WUJFeFFWRmhjWUdSb2I0QUhmQVJ3ZEh0VUJIeUFoSWlNa0pkUUJKaWNvS1NvckxOTUIwZ0V0THRFQjBBRXZNREV5TXpRMU5qYzRPVG83UEQwK1AwQkJRa05FUlViYkFVZElTVXJQQWM0QlM4MEJUTXdCVFU1UFVGRlNVMVJWVmxkWVdWcGJYRjFlWDJCaFltTmtaV1puYUdscWEyeHRibTl3Y1hKemRIVjJkM2g1ZW50OGZYNS9nQUdCQVlJQmd3R0VBWVVCaGdHSEFZZ0JpUUdLQVlzQmpBR05BWTRCandHUUFaRUJrZ0dUQVpRQmxRR1dBWmNCbUFHWkFab0Jtd0djQVowQm5nR2ZBYUFCb1FHaUFhTUJwQUdsQWFZQnB3R29BYWtCcWdHckFhd0JyUUd1QWE4QnNBR3hBYklCc3dHMEFiVUJ0Z0czQWNzQnlnRzRBY2tCdVFISUFib0J1d0c4QWIwQnZnRy9BY0FCd1FIQ0FjTUJ4QUhGQWNZQkFOd0JDMEVBSVJBTXhnRUxRUTRoRUF6RkFRdEJEU0VRRE1RQkMwRVBJUkFNd3dFTFFSQWhFQXpDQVF0QkV5RVFETUVCQzBFVUlSQU13QUVMUVJVaEVBeS9BUXRCRmlFUURMNEJDMEVYSVJBTXZRRUxRUmdoRUF5OEFRdEJHU0VRRExzQkMwRWFJUkFNdWdFTFFSc2hFQXk1QVF0QkhDRVFETGdCQzBFSUlSQU10d0VMUVIwaEVBeTJBUXRCSUNFUURMVUJDMEVmSVJBTXRBRUxRUWNoRUF5ekFRdEJJU0VRRExJQkMwRWlJUkFNc1FFTFFSNGhFQXl3QVF0Qkl5RVFESzhCQzBFU0lSQU1yZ0VMUVJFaEVBeXRBUXRCSkNFUURLd0JDMEVsSVJBTXF3RUxRU1loRUF5cUFRdEJKeUVRREtrQkMwSERBU0VRREtnQkMwRXBJUkFNcHdFTFFTc2hFQXltQVF0QkxDRVFES1VCQzBFdElSQU1wQUVMUVM0aEVBeWpBUXRCTHlFUURLSUJDMEhFQVNFUURLRUJDMEV3SVJBTW9BRUxRVFFoRUF5ZkFRdEJEQ0VRREo0QkMwRXhJUkFNblFFTFFUSWhFQXljQVF0Qk15RVFESnNCQzBFNUlSQU1tZ0VMUVRVaEVBeVpBUXRCeFFFaEVBeVlBUXRCQ3lFUURKY0JDMEU2SVJBTWxnRUxRVFloRUF5VkFRdEJDaUVRREpRQkMwRTNJUkFNa3dFTFFUZ2hFQXlTQVF0QlBDRVFESkVCQzBFN0lSQU1rQUVMUVQwaEVBeVBBUXRCQ1NFUURJNEJDMEVvSVJBTWpRRUxRVDRoRUF5TUFRdEJQeUVRRElzQkMwSEFBQ0VRRElvQkMwSEJBQ0VRRElrQkMwSENBQ0VRRElnQkMwSERBQ0VRREljQkMwSEVBQ0VRRElZQkMwSEZBQ0VRRElVQkMwSEdBQ0VRRElRQkMwRXFJUkFNZ3dFTFFjY0FJUkFNZ2dFTFFjZ0FJUkFNZ1FFTFFja0FJUkFNZ0FFTFFjb0FJUkFNZnd0Qnl3QWhFQXgrQzBITkFDRVFESDBMUWN3QUlSQU1mQXRCemdBaEVBeDdDMEhQQUNFUURIb0xRZEFBSVJBTWVRdEIwUUFoRUF4NEMwSFNBQ0VRREhjTFFkTUFJUkFNZGd0QjFBQWhFQXgxQzBIV0FDRVFESFFMUWRVQUlSQU1jd3RCQmlFUURISUxRZGNBSVJBTWNRdEJCU0VRREhBTFFkZ0FJUkFNYnd0QkJDRVFERzRMUWRrQUlSQU1iUXRCMmdBaEVBeHNDMEhiQUNFUURHc0xRZHdBSVJBTWFndEJBeUVRREdrTFFkMEFJUkFNYUF0QjNnQWhFQXhuQzBIZkFDRVFER1lMUWVFQUlSQU1aUXRCNEFBaEVBeGtDMEhpQUNFUURHTUxRZU1BSVJBTVlndEJBaUVRREdFTFFlUUFJUkFNWUF0QjVRQWhFQXhmQzBIbUFDRVFERjRMUWVjQUlSQU1YUXRCNkFBaEVBeGNDMEhwQUNFUURGc0xRZW9BSVJBTVdndEI2d0FoRUF4WkMwSHNBQ0VRREZnTFFlMEFJUkFNVnd0QjdnQWhFQXhXQzBIdkFDRVFERlVMUWZBQUlSQU1WQXRCOFFBaEVBeFRDMEh5QUNFUURGSUxRZk1BSVJBTVVRdEI5QUFoRUF4UUMwSDFBQ0VRREU4TFFmWUFJUkFNVGd0Qjl3QWhFQXhOQzBINEFDRVFERXdMUWZrQUlSQU1Td3RCK2dBaEVBeEtDMEg3QUNFUURFa0xRZndBSVJBTVNBdEIvUUFoRUF4SEMwSCtBQ0VRREVZTFFmOEFJUkFNUlF0QmdBRWhFQXhFQzBHQkFTRVFERU1MUVlJQklSQU1RZ3RCZ3dFaEVBeEJDMEdFQVNFUURFQUxRWVVCSVJBTVB3dEJoZ0VoRUF3K0MwR0hBU0VRREQwTFFZZ0JJUkFNUEF0QmlRRWhFQXc3QzBHS0FTRVFERG9MUVlzQklSQU1PUXRCakFFaEVBdzRDMEdOQVNFUUREY0xRWTRCSVJBTU5ndEJqd0VoRUF3MUMwR1FBU0VRRERRTFFaRUJJUkFNTXd0QmtnRWhFQXd5QzBHVEFTRVFEREVMUVpRQklSQU1NQXRCbFFFaEVBd3ZDMEdXQVNFUURDNExRWmNCSVJBTUxRdEJtQUVoRUF3c0MwR1pBU0VRRENzTFFab0JJUkFNS2d0Qm13RWhFQXdwQzBHY0FTRVFEQ2dMUVowQklSQU1Kd3RCbmdFaEVBd21DMEdmQVNFUURDVUxRYUFCSVJBTUpBdEJvUUVoRUF3akMwR2lBU0VRRENJTFFhTUJJUkFNSVF0QnBBRWhFQXdnQzBHbEFTRVFEQjhMUWFZQklSQU1IZ3RCcHdFaEVBd2RDMEdvQVNFUURCd0xRYWtCSVJBTUd3dEJxZ0VoRUF3YUMwR3JBU0VRREJrTFFhd0JJUkFNR0F0QnJRRWhFQXdYQzBHdUFTRVFEQllMUVFFaEVBd1ZDMEd2QVNFUURCUUxRYkFCSVJBTUV3dEJzUUVoRUF3U0MwR3pBU0VRREJFTFFiSUJJUkFNRUF0QnRBRWhFQXdQQzBHMUFTRVFEQTRMUWJZQklSQU1EUXRCdHdFaEVBd01DMEc0QVNFUURBc0xRYmtCSVJBTUNndEJ1Z0VoRUF3SkMwRzdBU0VRREFnTFFjWUJJUkFNQnd0QnZBRWhFQXdHQzBHOUFTRVFEQVVMUWI0QklSQU1CQXRCdndFaEVBd0RDMEhBQVNFUURBSUxRY0lCSVJBTUFRdEJ3UUVoRUFzRFFBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQkFPeHdFQUFRSURCQVVHQndnSkNnc01EUTRQRUJFU0V4UVZGaGNZR1JvYkhCNGZJQ0VqSlNnL1FFRkVSVVpIU0VsS1MweE5UMUJSVWxQZUExZFpXMXhkWUdKbFptZG9hV3ByYkcxdmNIRnljM1IxZG5kNGVYcDdmSDErZ0FHQ0FZVUJoZ0dIQVlrQml3R01BWTBCamdHUEFaQUJrUUdVQVpVQmxnR1hBWmdCbVFHYUFac0JuQUdkQVo0Qm53R2dBYUVCb2dHakFhUUJwUUdtQWFjQnFBR3BBYW9CcXdHc0FhMEJyZ0d2QWJBQnNRR3lBYk1CdEFHMUFiWUJ0d0c0QWJrQnVnRzdBYndCdlFHK0FiOEJ3QUhCQWNJQnd3SEVBY1VCeGdISEFjZ0J5UUhLQWNzQnpBSE5BYzRCendIUUFkRUIwZ0hUQWRRQjFRSFdBZGNCMkFIWkFkb0Iyd0hjQWQwQjNnSGdBZUVCNGdIakFlUUI1UUhtQWVjQjZBSHBBZW9CNndIc0FlMEI3Z0h2QWZBQjhRSHlBZk1CbVFLa0FyQUMvZ0wrQWdzZ0FTSUVJQUpIRGZNQlFkMEJJUkFNL3dNTElBRWlFQ0FDUnczZEFVSERBU0VRRFA0REN5QUJJZ0VnQWtjTmtBRkI5d0FoRUF6OUF3c2dBU0lCSUFKSERZWUJRZThBSVJBTS9BTUxJQUVpQVNBQ1J3MS9RZW9BSVJBTSt3TUxJQUVpQVNBQ1J3MTdRZWdBSVJBTStnTUxJQUVpQVNBQ1J3MTRRZVlBSVJBTStRTUxJQUVpQVNBQ1J3MGFRUmdoRUF6NEF3c2dBU0lCSUFKSERSUkJFaUVRRFBjREN5QUJJZ0VnQWtjTldVSEZBQ0VRRFBZREN5QUJJZ0VnQWtjTlNrRS9JUkFNOVFNTElBRWlBU0FDUncxSVFUd2hFQXowQXdzZ0FTSUJJQUpIRFVGQk1TRVFEUE1EQ3lBQUxRQXVRUUZHRGVzRERJY0NDeUFBSUFFaUFTQUNFTUNBZ0lBQVFRRkhEZVlCSUFCQ0FEY0RJQXpuQVFzZ0FDQUJJZ0VnQWhDMGdJQ0FBQ0lRRGVjQklBRWhBUXoxQWdzQ1FDQUJJZ0VnQWtjTkFFRUdJUkFNOEFNTElBQWdBVUVCYWlJQklBSVF1NENBZ0FBaUVBM29BU0FCSVFFTU1Rc2dBRUlBTndNZ1FSSWhFQXpWQXdzZ0FTSVFJQUpIRFN0QkhTRVFETzBEQ3dKQUlBRWlBU0FDUmcwQUlBRkJBV29oQVVFUUlSQU0xQU1MUVFjaEVBenNBd3NnQUVJQUlBQXBBeUFpRVNBQ0lBRWlFR3V0SWhKOUloTWdFeUFSVmhzM0F5QWdFU0FTVmlJVVJRM2xBVUVJSVJBTTZ3TUxBa0FnQVNJQklBSkdEUUFnQUVHSmdJQ0FBRFlDQ0NBQUlBRTJBZ1FnQVNFQlFSUWhFQXpTQXd0QkNTRVFET29EQ3lBQklRRWdBQ2tESUZBTjVBRWdBU0VCRFBJQ0N3SkFJQUVpQVNBQ1J3MEFRUXNoRUF6cEF3c2dBQ0FCUVFGcUlnRWdBaEMyZ0lDQUFDSVFEZVVCSUFFaEFRenlBZ3NnQUNBQklnRWdBaEM0Z0lDQUFDSVFEZVVCSUFFaEFRenlBZ3NnQUNBQklnRWdBaEM0Z0lDQUFDSVFEZVlCSUFFaEFRd05DeUFBSUFFaUFTQUNFTHFBZ0lBQUloQU41d0VnQVNFQkRQQUNDd0pBSUFFaUFTQUNSdzBBUVE4aEVBemxBd3NnQVMwQUFDSVFRVHRHRFFnZ0VFRU5SdzNvQVNBQlFRRnFJUUVNN3dJTElBQWdBU0lCSUFJUXVvQ0FnQUFpRUEzb0FTQUJJUUVNOGdJTEEwQUNRQ0FCTFFBQVFmQzFnSUFBYWkwQUFDSVFRUUZHRFFBZ0VFRUNSdzNyQVNBQUtBSUVJUkFnQUVFQU5nSUVJQUFnRUNBQlFRRnFJZ0VRdVlDQWdBQWlFQTNxQVNBQklRRU05QUlMSUFGQkFXb2lBU0FDUncwQUMwRVNJUkFNNGdNTElBQWdBU0lCSUFJUXVvQ0FnQUFpRUEzcEFTQUJJUUVNQ2dzZ0FTSUJJQUpIRFFaQkd5RVFET0FEQ3dKQUlBRWlBU0FDUncwQVFSWWhFQXpnQXdzZ0FFR0tnSUNBQURZQ0NDQUFJQUUyQWdRZ0FDQUJJQUlRdUlDQWdBQWlFQTNxQVNBQklRRkJJQ0VRRE1ZREN3SkFJQUVpQVNBQ1JnMEFBMEFDUUNBQkxRQUFRZkMzZ0lBQWFpMEFBQ0lRUVFKR0RRQUNRQ0FRUVg5cURnVGxBZXdCQU9zQjdBRUxJQUZCQVdvaEFVRUlJUkFNeUFNTElBRkJBV29pQVNBQ1J3MEFDMEVWSVJBTTN3TUxRUlVoRUF6ZUF3c0RRQUpBSUFFdEFBQkI4TG1BZ0FCcUxRQUFJaEJCQWtZTkFDQVFRWDlxRGdUZUFld0I0QUhyQWV3QkN5QUJRUUZxSWdFZ0FrY05BQXRCR0NFUUROMERDd0pBSUFFaUFTQUNSZzBBSUFCQmk0Q0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFVRUhJUkFNeEFNTFFSa2hFQXpjQXdzZ0FVRUJhaUVCREFJTEFrQWdBU0lVSUFKSERRQkJHaUVRRE5zREN5QVVJUUVDUUNBVUxRQUFRWE5xRGhUZEF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUF1NEM3Z0x1QXU0QzdnTHVBdTRDN2dMdUFnRHVBZ3RCQUNFUUlBQkJBRFlDSENBQVFhK0xnSUFBTmdJUUlBQkJBallDRENBQUlCUkJBV28yQWhRTTJnTUxBa0FnQVMwQUFDSVFRVHRHRFFBZ0VFRU5SdzNvQVNBQlFRRnFJUUVNNVFJTElBRkJBV29oQVF0QklpRVFETDhEQ3dKQUlBRWlFQ0FDUncwQVFSd2hFQXpZQXd0Q0FDRVJJQkFoQVNBUUxRQUFRVkJxRGpmbkFlWUJBUUlEQkFVR0J3Z0FBQUFBQUFBQUNRb0xEQTBPQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFQRUJFU0V4UUFDMEVlSVJBTXZRTUxRZ0loRVF6bEFRdENBeUVSRE9RQkMwSUVJUkVNNHdFTFFnVWhFUXppQVF0Q0JpRVJET0VCQzBJSElSRU00QUVMUWdnaEVRemZBUXRDQ1NFUkRONEJDMElLSVJFTTNRRUxRZ3NoRVF6Y0FRdENEQ0VSRE5zQkMwSU5JUkVNMmdFTFFnNGhFUXpaQVF0Q0R5RVJETmdCQzBJS0lSRU0xd0VMUWdzaEVReldBUXRDRENFUkROVUJDMElOSVJFTTFBRUxRZzRoRVF6VEFRdENEeUVSRE5JQkMwSUFJUkVDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlCQXRBQUJCVUdvT04rVUI1QUVBQVFJREJBVUdCK1lCNWdIbUFlWUI1Z0htQWVZQkNBa0tDd3dONWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BZVlCNWdIbUFlWUI1Z0htQWVZQjVnSG1BUTRQRUJFU0UrWUJDMElDSVJFTTVBRUxRZ01oRVF6akFRdENCQ0VSRE9JQkMwSUZJUkVNNFFFTFFnWWhFUXpnQVF0Q0J5RVJETjhCQzBJSUlSRU0zZ0VMUWdraEVRemRBUXRDQ2lFUkROd0JDMElMSVJFTTJ3RUxRZ3doRVF6YUFRdENEU0VSRE5rQkMwSU9JUkVNMkFFTFFnOGhFUXpYQVF0Q0NpRVJETllCQzBJTElSRU0xUUVMUWd3aEVRelVBUXRDRFNFUkROTUJDMElPSVJFTTBnRUxRZzhoRVF6UkFRc2dBRUlBSUFBcEF5QWlFU0FDSUFFaUVHdXRJaEo5SWhNZ0V5QVJWaHMzQXlBZ0VTQVNWaUlVUlEzU0FVRWZJUkFNd0FNTEFrQWdBU0lCSUFKR0RRQWdBRUdKZ0lDQUFEWUNDQ0FBSUFFMkFnUWdBU0VCUVNRaEVBeW5Bd3RCSUNFUURMOERDeUFBSUFFaUVDQUNFTDZBZ0lBQVFYOXFEZ1cyQVFERkFnSFJBZElCQzBFUklSQU1wQU1MSUFCQkFUb0FMeUFRSVFFTXV3TUxJQUVpQVNBQ1J3M1NBVUVrSVJBTXV3TUxJQUVpRFNBQ1J3MGVRY1lBSVJBTXVnTUxJQUFnQVNJQklBSVFzb0NBZ0FBaUVBM1VBU0FCSVFFTXRRRUxJQUVpRUNBQ1J3MG1RZEFBSVJBTXVBTUxBa0FnQVNJQklBSkhEUUJCS0NFUURMZ0RDeUFBUVFBMkFnUWdBRUdNZ0lDQUFEWUNDQ0FBSUFFZ0FSQ3hnSUNBQUNJUURkTUJJQUVoQVF6WUFRc0NRQ0FCSWhBZ0FrY05BRUVwSVJBTXR3TUxJQkF0QUFBaUFVRWdSZzBVSUFGQkNVY04wd0VnRUVFQmFpRUJEQlVMQWtBZ0FTSUJJQUpHRFFBZ0FVRUJhaUVCREJjTFFTb2hFQXkxQXdzQ1FDQUJJaEFnQWtjTkFFRXJJUkFNdFFNTEFrQWdFQzBBQUNJQlFRbEdEUUFnQVVFZ1J3M1ZBUXNnQUMwQUxFRUlSZzNUQVNBUUlRRU1rUU1MQWtBZ0FTSUJJQUpIRFFCQkxDRVFETFFEQ3lBQkxRQUFRUXBIRGRVQklBRkJBV29oQVF6SkFnc2dBU0lPSUFKSERkVUJRUzhoRUF5eUF3c0RRQUpBSUFFdEFBQWlFRUVnUmcwQUFrQWdFRUYyYWc0RUFOd0IzQUVBMmdFTElBRWhBUXpnQVFzZ0FVRUJhaUlCSUFKSERRQUxRVEVoRUF5eEF3dEJNaUVRSUFFaUZDQUNSZzJ3QXlBQ0lCUnJJQUFvQWdBaUFXb2hGU0FVSUFGclFRTnFJUllDUUFOQUlCUXRBQUFpRjBFZ2NpQVhJQmRCdjM5cVFmOEJjVUVhU1J0Qi93RnhJQUZCOEx1QWdBQnFMUUFBUncwQkFrQWdBVUVEUncwQVFRWWhBUXlXQXdzZ0FVRUJhaUVCSUJSQkFXb2lGQ0FDUncwQUN5QUFJQlUyQWdBTXNRTUxJQUJCQURZQ0FDQVVJUUVNMlFFTFFUTWhFQ0FCSWhRZ0FrWU5yd01nQWlBVWF5QUFLQUlBSWdGcUlSVWdGQ0FCYTBFSWFpRVdBa0FEUUNBVUxRQUFJaGRCSUhJZ0Z5QVhRYjkvYWtIL0FYRkJHa2tiUWY4QmNTQUJRZlM3Z0lBQWFpMEFBRWNOQVFKQUlBRkJDRWNOQUVFRklRRU1sUU1MSUFGQkFXb2hBU0FVUVFGcUloUWdBa2NOQUFzZ0FDQVZOZ0lBRExBREN5QUFRUUEyQWdBZ0ZDRUJETmdCQzBFMElSQWdBU0lVSUFKR0RhNERJQUlnRkdzZ0FDZ0NBQ0lCYWlFVklCUWdBV3RCQldvaEZnSkFBMEFnRkMwQUFDSVhRU0J5SUJjZ0YwRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVSFF3b0NBQUdvdEFBQkhEUUVDUUNBQlFRVkhEUUJCQnlFQkRKUURDeUFCUVFGcUlRRWdGRUVCYWlJVUlBSkhEUUFMSUFBZ0ZUWUNBQXl2QXdzZ0FFRUFOZ0lBSUJRaEFRelhBUXNDUUNBQklnRWdBa1lOQUFOQUFrQWdBUzBBQUVHQXZvQ0FBR290QUFBaUVFRUJSZzBBSUJCQkFrWU5DaUFCSVFFTTNRRUxJQUZCQVdvaUFTQUNSdzBBQzBFd0lSQU1yZ01MUVRBaEVBeXRBd3NDUUNBQklnRWdBa1lOQUFOQUFrQWdBUzBBQUNJUVFTQkdEUUFnRUVGMmFnNEUyUUhhQWRvQjJRSGFBUXNnQVVFQmFpSUJJQUpIRFFBTFFUZ2hFQXl0QXd0Qk9DRVFES3dEQ3dOQUFrQWdBUzBBQUNJUVFTQkdEUUFnRUVFSlJ3MERDeUFCUVFGcUlnRWdBa2NOQUF0QlBDRVFES3NEQ3dOQUFrQWdBUzBBQUNJUVFTQkdEUUFDUUFKQUlCQkJkbW9PQk5vQkFRSGFBUUFMSUJCQkxFWU4yd0VMSUFFaEFRd0VDeUFCUVFGcUlnRWdBa2NOQUF0QlB5RVFES29EQ3lBQklRRU0yd0VMUWNBQUlSQWdBU0lVSUFKR0RhZ0RJQUlnRkdzZ0FDZ0NBQ0lCYWlFV0lCUWdBV3RCQm1vaEZ3SkFBMEFnRkMwQUFFRWdjaUFCUVlEQWdJQUFhaTBBQUVjTkFTQUJRUVpHRFk0RElBRkJBV29oQVNBVVFRRnFJaFFnQWtjTkFBc2dBQ0FXTmdJQURLa0RDeUFBUVFBMkFnQWdGQ0VCQzBFMklSQU1qZ01MQWtBZ0FTSVBJQUpIRFFCQndRQWhFQXluQXdzZ0FFR01nSUNBQURZQ0NDQUFJQTgyQWdRZ0R5RUJJQUF0QUN4QmYyb09CTTBCMVFIWEFka0Jod01MSUFGQkFXb2hBUXpNQVFzQ1FDQUJJZ0VnQWtZTkFBTkFBa0FnQVMwQUFDSVFRU0J5SUJBZ0VFRy9mMnBCL3dGeFFScEpHMEgvQVhFaUVFRUpSZzBBSUJCQklFWU5BQUpBQWtBQ1FBSkFJQkJCblg5cURoTUFBd01EQXdNREF3RURBd01EQXdNREF3TUNBd3NnQVVFQmFpRUJRVEVoRUF5UkF3c2dBVUVCYWlFQlFUSWhFQXlRQXdzZ0FVRUJhaUVCUVRNaEVBeVBBd3NnQVNFQkROQUJDeUFCUVFGcUlnRWdBa2NOQUF0Qk5TRVFES1VEQzBFMUlSQU1wQU1MQWtBZ0FTSUJJQUpHRFFBRFFBSkFJQUV0QUFCQmdMeUFnQUJxTFFBQVFRRkdEUUFnQVNFQkROTUJDeUFCUVFGcUlnRWdBa2NOQUF0QlBTRVFES1FEQzBFOUlSQU1vd01MSUFBZ0FTSUJJQUlRc0lDQWdBQWlFQTNXQVNBQklRRU1BUXNnRUVFQmFpRUJDMEU4SVJBTWh3TUxBa0FnQVNJQklBSkhEUUJCd2dBaEVBeWdBd3NDUUFOQUFrQWdBUzBBQUVGM2FnNFlBQUwrQXY0Q2hBUCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nTCtBdjRDL2dMK0F2NEMvZ0wrQXY0Qy9nSUEvZ0lMSUFGQkFXb2lBU0FDUncwQUMwSENBQ0VRREtBREN5QUJRUUZxSVFFZ0FDMEFMVUVCY1VVTnZRRWdBU0VCQzBFc0lSQU1oUU1MSUFFaUFTQUNSdzNUQVVIRUFDRVFESjBEQ3dOQUFrQWdBUzBBQUVHUXdJQ0FBR290QUFCQkFVWU5BQ0FCSVFFTXR3SUxJQUZCQVdvaUFTQUNSdzBBQzBIRkFDRVFESndEQ3lBTkxRQUFJaEJCSUVZTnN3RWdFRUU2UncyQkF5QUFLQUlFSVFFZ0FFRUFOZ0lFSUFBZ0FTQU5FSytBZ0lBQUlnRU4wQUVnRFVFQmFpRUJETE1DQzBISEFDRVFJQUVpRFNBQ1JnMmFBeUFDSUExcklBQW9BZ0FpQVdvaEZpQU5JQUZyUVFWcUlSY0RRQ0FOTFFBQUloUkJJSElnRkNBVVFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFaRENnSUFBYWkwQUFFY05nQU1nQVVFRlJnMzBBaUFCUVFGcUlRRWdEVUVCYWlJTklBSkhEUUFMSUFBZ0ZqWUNBQXlhQXd0QnlBQWhFQ0FCSWcwZ0FrWU5tUU1nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFSmFpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVR1d3b0NBQUdvdEFBQkhEZjhDQWtBZ0FVRUpSdzBBUVFJaEFRejFBZ3NnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbVFNTEFrQWdBU0lOSUFKSERRQkJ5UUFoRUF5WkF3c0NRQUpBSUEwdEFBQWlBVUVnY2lBQklBRkJ2MzlxUWY4QmNVRWFTUnRCL3dGeFFaSi9hZzRIQUlBRGdBT0FBNEFEZ0FNQmdBTUxJQTFCQVdvaEFVRStJUkFNZ0FNTElBMUJBV29oQVVFL0lSQU0vd0lMUWNvQUlSQWdBU0lOSUFKR0RaY0RJQUlnRFdzZ0FDZ0NBQ0lCYWlFV0lBMGdBV3RCQVdvaEZ3TkFJQTB0QUFBaUZFRWdjaUFVSUJSQnYzOXFRZjhCY1VFYVNSdEIvd0Z4SUFGQm9NS0FnQUJxTFFBQVJ3MzlBaUFCUVFGR0RmQUNJQUZCQVdvaEFTQU5RUUZxSWcwZ0FrY05BQXNnQUNBV05nSUFESmNEQzBITEFDRVFJQUVpRFNBQ1JnMldBeUFDSUExcklBQW9BZ0FpQVdvaEZpQU5JQUZyUVE1cUlSY0RRQ0FOTFFBQUloUkJJSElnRkNBVVFiOS9ha0gvQVhGQkdra2JRZjhCY1NBQlFhTENnSUFBYWkwQUFFY04vQUlnQVVFT1JnM3dBaUFCUVFGcUlRRWdEVUVCYWlJTklBSkhEUUFMSUFBZ0ZqWUNBQXlXQXd0QnpBQWhFQ0FCSWcwZ0FrWU5sUU1nQWlBTmF5QUFLQUlBSWdGcUlSWWdEU0FCYTBFUGFpRVhBMEFnRFMwQUFDSVVRU0J5SUJRZ0ZFRy9mMnBCL3dGeFFScEpHMEgvQVhFZ0FVSEF3b0NBQUdvdEFBQkhEZnNDQWtBZ0FVRVBSdzBBUVFNaEFRenhBZ3NnQVVFQmFpRUJJQTFCQVdvaURTQUNSdzBBQ3lBQUlCWTJBZ0FNbFFNTFFjMEFJUkFnQVNJTklBSkdEWlFESUFJZ0RXc2dBQ2dDQUNJQmFpRVdJQTBnQVd0QkJXb2hGd05BSUEwdEFBQWlGRUVnY2lBVUlCUkJ2MzlxUWY4QmNVRWFTUnRCL3dGeElBRkIwTUtBZ0FCcUxRQUFSdzM2QWdKQUlBRkJCVWNOQUVFRUlRRU04QUlMSUFGQkFXb2hBU0FOUVFGcUlnMGdBa2NOQUFzZ0FDQVdOZ0lBREpRREN3SkFJQUVpRFNBQ1J3MEFRYzRBSVJBTWxBTUxBa0FDUUFKQUFrQWdEUzBBQUNJQlFTQnlJQUVnQVVHL2YycEIvd0Z4UVJwSkcwSC9BWEZCblg5cURoTUEvUUw5QXYwQy9RTDlBdjBDL1FMOUF2MEMvUUw5QXYwQ0FmMEMvUUw5QWdJRC9RSUxJQTFCQVdvaEFVSEJBQ0VRRFAwQ0N5QU5RUUZxSVFGQndnQWhFQXo4QWdzZ0RVRUJhaUVCUWNNQUlSQU0rd0lMSUExQkFXb2hBVUhFQUNFUURQb0NDd0pBSUFFaUFTQUNSZzBBSUFCQmpZQ0FnQUEyQWdnZ0FDQUJOZ0lFSUFFaEFVSEZBQ0VRRFBvQ0MwSFBBQ0VRREpJREN5QVFJUUVDUUFKQUlCQXRBQUJCZG1vT0JBR29BcWdDQUtnQ0N5QVFRUUZxSVFFTFFTY2hFQXo0QWdzQ1FDQUJJZ0VnQWtjTkFFSFJBQ0VRREpFREN3SkFJQUV0QUFCQklFWU5BQ0FCSVFFTWpRRUxJQUZCQVdvaEFTQUFMUUF0UVFGeFJRM0hBU0FCSVFFTWpBRUxJQUVpRnlBQ1J3M0lBVUhTQUNFUURJOERDMEhUQUNFUUlBRWlGQ0FDUmcyT0F5QUNJQlJySUFBb0FnQWlBV29oRmlBVUlBRnJRUUZxSVJjRFFDQVVMUUFBSUFGQjFzS0FnQUJxTFFBQVJ3M01BU0FCUVFGR0RjY0JJQUZCQVdvaEFTQVVRUUZxSWhRZ0FrY05BQXNnQUNBV05nSUFESTREQ3dKQUlBRWlBU0FDUncwQVFkVUFJUkFNamdNTElBRXRBQUJCQ2tjTnpBRWdBVUVCYWlFQkRNY0JDd0pBSUFFaUFTQUNSdzBBUWRZQUlSQU1qUU1MQWtBQ1FDQUJMUUFBUVhacURnUUF6UUhOQVFITkFRc2dBVUVCYWlFQkRNY0JDeUFCUVFGcUlRRkJ5Z0FoRUF6ekFnc2dBQ0FCSWdFZ0FoQ3VnSUNBQUNJUURjc0JJQUVoQVVITkFDRVFEUElDQ3lBQUxRQXBRU0pHRFlVRERLWUNDd0pBSUFFaUFTQUNSdzBBUWRzQUlSQU1pZ01MUVFBaEZFRUJJUmRCQVNFV1FRQWhFQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FCTFFBQVFWQnFEZ3JVQWRNQkFBRUNBd1FGQmdqVkFRdEJBaUVRREFZTFFRTWhFQXdGQzBFRUlSQU1CQXRCQlNFUURBTUxRUVloRUF3Q0MwRUhJUkFNQVF0QkNDRVFDMEVBSVJkQkFDRVdRUUFoRkF6TUFRdEJDU0VRUVFFaEZFRUFJUmRCQUNFV0RNc0JDd0pBSUFFaUFTQUNSdzBBUWQwQUlSQU1pUU1MSUFFdEFBQkJMa2NOekFFZ0FVRUJhaUVCREtZQ0N5QUJJZ0VnQWtjTnpBRkIzd0FoRUF5SEF3c0NRQ0FCSWdFZ0FrWU5BQ0FBUVk2QWdJQUFOZ0lJSUFBZ0FUWUNCQ0FCSVFGQjBBQWhFQXp1QWd0QjRBQWhFQXlHQXd0QjRRQWhFQ0FCSWdFZ0FrWU5oUU1nQWlBQmF5QUFLQUlBSWhScUlSWWdBU0FVYTBFRGFpRVhBMEFnQVMwQUFDQVVRZUxDZ0lBQWFpMEFBRWNOelFFZ0ZFRURSZzNNQVNBVVFRRnFJUlFnQVVFQmFpSUJJQUpIRFFBTElBQWdGallDQUF5RkF3dEI0Z0FoRUNBQklnRWdBa1lOaEFNZ0FpQUJheUFBS0FJQUloUnFJUllnQVNBVWEwRUNhaUVYQTBBZ0FTMEFBQ0FVUWViQ2dJQUFhaTBBQUVjTnpBRWdGRUVDUmczT0FTQVVRUUZxSVJRZ0FVRUJhaUlCSUFKSERRQUxJQUFnRmpZQ0FBeUVBd3RCNHdBaEVDQUJJZ0VnQWtZTmd3TWdBaUFCYXlBQUtBSUFJaFJxSVJZZ0FTQVVhMEVEYWlFWEEwQWdBUzBBQUNBVVFlbkNnSUFBYWkwQUFFY055d0VnRkVFRFJnM09BU0FVUVFGcUlSUWdBVUVCYWlJQklBSkhEUUFMSUFBZ0ZqWUNBQXlEQXdzQ1FDQUJJZ0VnQWtjTkFFSGxBQ0VRRElNREN5QUFJQUZCQVdvaUFTQUNFS2lBZ0lBQUloQU56UUVnQVNFQlFkWUFJUkFNNlFJTEFrQWdBU0lCSUFKR0RRQURRQUpBSUFFdEFBQWlFRUVnUmcwQUFrQUNRQUpBSUJCQnVIOXFEZ3NBQWM4Qnp3SFBBYzhCendIUEFjOEJ6d0VDendFTElBRkJBV29oQVVIU0FDRVFETzBDQ3lBQlFRRnFJUUZCMHdBaEVBenNBZ3NnQVVFQmFpRUJRZFFBSVJBTTZ3SUxJQUZCQVdvaUFTQUNSdzBBQzBIa0FDRVFESUlEQzBIa0FDRVFESUVEQ3dOQUFrQWdBUzBBQUVId3dvQ0FBR290QUFBaUVFRUJSZzBBSUJCQmZtb09BODhCMEFIUkFkSUJDeUFCUVFGcUlnRWdBa2NOQUF0QjVnQWhFQXlBQXdzQ1FDQUJJZ0VnQWtZTkFDQUJRUUZxSVFFTUF3dEI1d0FoRUF6L0Fnc0RRQUpBSUFFdEFBQkI4TVNBZ0FCcUxRQUFJaEJCQVVZTkFBSkFJQkJCZm1vT0JOSUIwd0hVQVFEVkFRc2dBU0VCUWRjQUlSQU01d0lMSUFGQkFXb2lBU0FDUncwQUMwSG9BQ0VRRFA0Q0N3SkFJQUVpQVNBQ1J3MEFRZWtBSVJBTS9nSUxBa0FnQVMwQUFDSVFRWFpxRGhxNkFkVUIxUUc4QWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWRVQjFRSFZBZFVCMVFIVkFkVUIxUUhWQWNvQjFRSFZBUURUQVFzZ0FVRUJhaUVCQzBFR0lSQU00d0lMQTBBQ1FDQUJMUUFBUWZER2dJQUFhaTBBQUVFQlJnMEFJQUVoQVF5ZUFnc2dBVUVCYWlJQklBSkhEUUFMUWVvQUlSQU0rd0lMQWtBZ0FTSUJJQUpHRFFBZ0FVRUJhaUVCREFNTFFlc0FJUkFNK2dJTEFrQWdBU0lCSUFKSERRQkI3QUFoRUF6NkFnc2dBVUVCYWlFQkRBRUxBa0FnQVNJQklBSkhEUUJCN1FBaEVBejVBZ3NnQVVFQmFpRUJDMEVFSVJBTTNnSUxBa0FnQVNJVUlBSkhEUUJCN2dBaEVBejNBZ3NnRkNFQkFrQUNRQUpBSUJRdEFBQkI4TWlBZ0FCcUxRQUFRWDlxRGdmVUFkVUIxZ0VBbkFJQkF0Y0JDeUFVUVFGcUlRRU1DZ3NnRkVFQmFpRUJETTBCQzBFQUlSQWdBRUVBTmdJY0lBQkJtNUtBZ0FBMkFoQWdBRUVITmdJTUlBQWdGRUVCYWpZQ0ZBejJBZ3NDUUFOQUFrQWdBUzBBQUVId3lJQ0FBR290QUFBaUVFRUVSZzBBQWtBQ1FDQVFRWDlxRGdmU0FkTUIxQUhaQVFBRUFka0JDeUFCSVFGQjJnQWhFQXpnQWdzZ0FVRUJhaUVCUWR3QUlSQU0zd0lMSUFGQkFXb2lBU0FDUncwQUMwSHZBQ0VRRFBZQ0N5QUJRUUZxSVFFTXl3RUxBa0FnQVNJVUlBSkhEUUJCOEFBaEVBejFBZ3NnRkMwQUFFRXZSdzNVQVNBVVFRRnFJUUVNQmdzQ1FDQUJJaFFnQWtjTkFFSHhBQ0VRRFBRQ0N3SkFJQlF0QUFBaUFVRXZSdzBBSUJSQkFXb2hBVUhkQUNFUUROc0NDeUFCUVhacUlnUkJGa3NOMHdGQkFTQUVkRUdKZ0lBQ2NVVU4wd0VNeWdJTEFrQWdBU0lCSUFKR0RRQWdBVUVCYWlFQlFkNEFJUkFNMmdJTFFmSUFJUkFNOGdJTEFrQWdBU0lVSUFKSERRQkI5QUFoRUF6eUFnc2dGQ0VCQWtBZ0ZDMEFBRUh3eklDQUFHb3RBQUJCZjJvT0E4a0NsQUlBMUFFTFFlRUFJUkFNMkFJTEFrQWdBU0lVSUFKR0RRQURRQUpBSUJRdEFBQkI4TXFBZ0FCcUxRQUFJZ0ZCQTBZTkFBSkFJQUZCZjJvT0Fzc0NBTlVCQ3lBVUlRRkIzd0FoRUF6YUFnc2dGRUVCYWlJVUlBSkhEUUFMUWZNQUlSQU04UUlMUWZNQUlSQU04QUlMQWtBZ0FTSUJJQUpHRFFBZ0FFR1BnSUNBQURZQ0NDQUFJQUUyQWdRZ0FTRUJRZUFBSVJBTTF3SUxRZlVBSVJBTTd3SUxBa0FnQVNJQklBSkhEUUJCOWdBaEVBenZBZ3NnQUVHUGdJQ0FBRFlDQ0NBQUlBRTJBZ1FnQVNFQkMwRURJUkFNMUFJTEEwQWdBUzBBQUVFZ1J3M0RBaUFCUVFGcUlnRWdBa2NOQUF0Qjl3QWhFQXpzQWdzQ1FDQUJJZ0VnQWtjTkFFSDRBQ0VRRE93Q0N5QUJMUUFBUVNCSERjNEJJQUZCQVdvaEFRenZBUXNnQUNBQklnRWdBaENzZ0lDQUFDSVFEYzRCSUFFaEFReU9BZ3NDUUNBQklnUWdBa2NOQUVINkFDRVFET29DQ3lBRUxRQUFRY3dBUnczUkFTQUVRUUZxSVFGQkV5RVFETThCQ3dKQUlBRWlCQ0FDUncwQVFmc0FJUkFNNlFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCV29oRUFOQUlBUXRBQUFnQVVId3pvQ0FBR290QUFCSERkQUJJQUZCQlVZTnpnRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkIrd0FoRUF6b0Fnc0NRQ0FCSWdRZ0FrY05BRUg4QUNFUURPZ0NDd0pBQWtBZ0JDMEFBRUc5ZjJvT0RBRFJBZEVCMFFIUkFkRUIwUUhSQWRFQjBRSFJBUUhSQVFzZ0JFRUJhaUVCUWVZQUlSQU16d0lMSUFSQkFXb2hBVUhuQUNFUURNNENDd0pBSUFFaUJDQUNSdzBBUWYwQUlSQU01d0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFtb2hFQUpBQTBBZ0JDMEFBQ0FCUWUzUGdJQUFhaTBBQUVjTnp3RWdBVUVDUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFmMEFJUkFNNXdJTElBQkJBRFlDQUNBUVFRRnFJUUZCRUNFUURNd0JDd0pBSUFFaUJDQUNSdzBBUWY0QUlSQU01Z0lMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkJXb2hFQUpBQTBBZ0JDMEFBQ0FCUWZiT2dJQUFhaTBBQUVjTnpnRWdBVUVGUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFmNEFJUkFNNWdJTElBQkJBRFlDQUNBUVFRRnFJUUZCRmlFUURNc0JDd0pBSUFFaUJDQUNSdzBBUWY4QUlSQU01UUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkEyb2hFQUpBQTBBZ0JDMEFBQ0FCUWZ6T2dJQUFhaTBBQUVjTnpRRWdBVUVEUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFmOEFJUkFNNVFJTElBQkJBRFlDQUNBUVFRRnFJUUZCQlNFUURNb0JDd0pBSUFFaUJDQUNSdzBBUVlBQklSQU01QUlMSUFRdEFBQkIyUUJIRGNzQklBUkJBV29oQVVFSUlSQU15UUVMQWtBZ0FTSUVJQUpIRFFCQmdRRWhFQXpqQWdzQ1FBSkFJQVF0QUFCQnNuOXFEZ01BekFFQnpBRUxJQVJCQVdvaEFVSHJBQ0VRRE1vQ0N5QUVRUUZxSVFGQjdBQWhFQXpKQWdzQ1FDQUJJZ1FnQWtjTkFFR0NBU0VRRE9JQ0N3SkFBa0FnQkMwQUFFRzRmMm9PQ0FETEFjc0J5d0hMQWNzQnl3RUJ5d0VMSUFSQkFXb2hBVUhxQUNFUURNa0NDeUFFUVFGcUlRRkI3UUFoRUF6SUFnc0NRQ0FCSWdRZ0FrY05BRUdEQVNFUURPRUNDeUFDSUFScklBQW9BZ0FpQVdvaEVDQUVJQUZyUVFKcUlSUUNRQU5BSUFRdEFBQWdBVUdBejRDQUFHb3RBQUJIRGNrQklBRkJBa1lOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdFRFlDQUVHREFTRVFET0VDQzBFQUlSQWdBRUVBTmdJQUlCUkJBV29oQVF6R0FRc0NRQ0FCSWdRZ0FrY05BRUdFQVNFUURPQUNDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFScUlSQUNRQU5BSUFRdEFBQWdBVUdEejRDQUFHb3RBQUJIRGNnQklBRkJCRVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHRUFTRVFET0FDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRU01oRUF6RkFRc0NRQ0FCSWdRZ0FrY05BRUdGQVNFUUROOENDd0pBQWtBZ0JDMEFBRUcwZjJvT0NBRElBY2dCeUFISUFjZ0J5QUVCeUFFTElBUkJBV29oQVVIdkFDRVFETVlDQ3lBRVFRRnFJUUZCOEFBaEVBekZBZ3NDUUNBQklnUWdBa2NOQUVHR0FTRVFETjRDQ3lBRUxRQUFRY1VBUnczRkFTQUVRUUZxSVFFTWd3SUxBa0FnQVNJRUlBSkhEUUJCaHdFaEVBemRBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRGFpRVFBa0FEUUNBRUxRQUFJQUZCaU0rQWdBQnFMUUFBUnczRkFTQUJRUU5HRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQmh3RWhFQXpkQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUV0SVJBTXdnRUxBa0FnQVNJRUlBSkhEUUJCaUFFaEVBemNBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFSWFpRVFBa0FEUUNBRUxRQUFJQUZCME0rQWdBQnFMUUFBUnczRUFTQUJRUWhHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQmlBRWhFQXpjQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVwSVJBTXdRRUxBa0FnQVNJQklBSkhEUUJCaVFFaEVBemJBZ3RCQVNFUUlBRXRBQUJCM3dCSERjQUJJQUZCQVdvaEFReUJBZ3NDUUNBQklnUWdBa2NOQUVHS0FTRVFETm9DQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRRnFJUkFEUUNBRUxRQUFJQUZCak0rQWdBQnFMUUFBUnczQkFTQUJRUUZHRGE4Q0lBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFZb0JJUkFNMlFJTEFrQWdBU0lFSUFKSERRQkJpd0VoRUF6WkFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVDYWlFUUFrQURRQ0FFTFFBQUlBRkJqcytBZ0FCcUxRQUFSdzNCQVNBQlFRSkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCaXdFaEVBelpBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRUNJUkFNdmdFTEFrQWdBU0lFSUFKSERRQkJqQUVoRUF6WUFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkI4TStBZ0FCcUxRQUFSdzNBQVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCakFFaEVBellBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRWZJUkFNdlFFTEFrQWdBU0lFSUFKSERRQkJqUUVoRUF6WEFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkI4cytBZ0FCcUxRQUFSdzIvQVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCalFFaEVBelhBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRUpJUkFNdkFFTEFrQWdBU0lFSUFKSERRQkJqZ0VoRUF6V0Fnc0NRQUpBSUFRdEFBQkJ0MzlxRGdjQXZ3Ry9BYjhCdndHL0FRRy9BUXNnQkVFQmFpRUJRZmdBSVJBTXZRSUxJQVJCQVdvaEFVSDVBQ0VRREx3Q0N3SkFJQUVpQkNBQ1J3MEFRWThCSVJBTTFRSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQldvaEVBSkFBMEFnQkMwQUFDQUJRWkhQZ0lBQWFpMEFBRWNOdlFFZ0FVRUZSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVk4QklSQU0xUUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJHQ0VRRExvQkN3SkFJQUVpQkNBQ1J3MEFRWkFCSVJBTTFBSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRWmZQZ0lBQWFpMEFBRWNOdkFFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpBQklSQU0xQUlMSUFCQkFEWUNBQ0FRUVFGcUlRRkJGeUVRRExrQkN3SkFJQUVpQkNBQ1J3MEFRWkVCSVJBTTB3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQm1vaEVBSkFBMEFnQkMwQUFDQUJRWnJQZ0lBQWFpMEFBRWNOdXdFZ0FVRUdSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpFQklSQU0wd0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJGU0VRRExnQkN3SkFJQUVpQkNBQ1J3MEFRWklCSVJBTTBnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQldvaEVBSkFBMEFnQkMwQUFDQUJRYUhQZ0lBQWFpMEFBRWNOdWdFZ0FVRUZSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVpJQklSQU0wZ0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJIaUVRRExjQkN3SkFJQUVpQkNBQ1J3MEFRWk1CSVJBTTBRSUxJQVF0QUFCQnpBQkhEYmdCSUFSQkFXb2hBVUVLSVJBTXRnRUxBa0FnQkNBQ1J3MEFRWlFCSVJBTTBBSUxBa0FDUUNBRUxRQUFRYjkvYWc0UEFMa0J1UUc1QWJrQnVRRzVBYmtCdVFHNUFia0J1UUc1QWJrQkFia0JDeUFFUVFGcUlRRkIvZ0FoRUF5M0Fnc2dCRUVCYWlFQlFmOEFJUkFNdGdJTEFrQWdCQ0FDUncwQVFaVUJJUkFNendJTEFrQUNRQ0FFTFFBQVFiOS9hZzREQUxnQkFiZ0JDeUFFUVFGcUlRRkIvUUFoRUF5MkFnc2dCRUVCYWlFRVFZQUJJUkFNdFFJTEFrQWdCQ0FDUncwQVFaWUJJUkFNemdJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBV29oRUFKQUEwQWdCQzBBQUNBQlFhZlBnSUFBYWkwQUFFY050Z0VnQVVFQlJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWllCSVJBTXpnSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkN5RVFETE1CQ3dKQUlBUWdBa2NOQUVHWEFTRVFETTBDQ3dKQUFrQUNRQUpBSUFRdEFBQkJVMm9PSXdDNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQnVBRzRBYmdCdUFHNEFiZ0J1QUc0QWJnQkFiZ0J1QUc0QWJnQnVBRUN1QUc0QWJnQkE3Z0JDeUFFUVFGcUlRRkIrd0FoRUF5MkFnc2dCRUVCYWlFQlFmd0FJUkFNdFFJTElBUkJBV29oQkVHQkFTRVFETFFDQ3lBRVFRRnFJUVJCZ2dFaEVBeXpBZ3NDUUNBRUlBSkhEUUJCbUFFaEVBek1BZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRWFpRVFBa0FEUUNBRUxRQUFJQUZCcWMrQWdBQnFMUUFBUncyMEFTQUJRUVJHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQm1BRWhFQXpNQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVaSVJBTXNRRUxBa0FnQkNBQ1J3MEFRWmtCSVJBTXl3SUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQldvaEVBSkFBMEFnQkMwQUFDQUJRYTdQZ0lBQWFpMEFBRWNOc3dFZ0FVRUZSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUVprQklSQU15d0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJCaUVRRExBQkN3SkFJQVFnQWtjTkFFR2FBU0VRRE1vQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUZxSVJBQ1FBTkFJQVF0QUFBZ0FVRzB6NENBQUdvdEFBQkhEYklCSUFGQkFVWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUdhQVNFUURNb0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFSd2hFQXl2QVFzQ1FDQUVJQUpIRFFCQm13RWhFQXpKQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUJhaUVRQWtBRFFDQUVMUUFBSUFGQnRzK0FnQUJxTFFBQVJ3MnhBU0FCUVFGR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJtd0VoRUF6SkFnc2dBRUVBTmdJQUlCQkJBV29oQVVFbklSQU1yZ0VMQWtBZ0JDQUNSdzBBUVp3QklSQU15QUlMQWtBQ1FDQUVMUUFBUWF4L2FnNENBQUd4QVFzZ0JFRUJhaUVFUVlZQklSQU1yd0lMSUFSQkFXb2hCRUdIQVNFUURLNENDd0pBSUFRZ0FrY05BRUdkQVNFUURNY0NDeUFDSUFScklBQW9BZ0FpQVdvaEZDQUVJQUZyUVFGcUlSQUNRQU5BSUFRdEFBQWdBVUc0ejRDQUFHb3RBQUJIRGE4QklBRkJBVVlOQVNBQlFRRnFJUUVnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVHZEFTRVFETWNDQ3lBQVFRQTJBZ0FnRUVFQmFpRUJRU1loRUF5c0FRc0NRQ0FFSUFKSERRQkJuZ0VoRUF6R0Fnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVCYWlFUUFrQURRQ0FFTFFBQUlBRkJ1cytBZ0FCcUxRQUFSdzJ1QVNBQlFRRkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCbmdFaEVBekdBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRURJUkFNcXdFTEFrQWdCQ0FDUncwQVFaOEJJUkFNeFFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBbW9oRUFKQUEwQWdCQzBBQUNBQlFlM1BnSUFBYWkwQUFFY05yUUVnQVVFQ1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRWjhCSVJBTXhRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkRDRVFES29CQ3dKQUlBUWdBa2NOQUVHZ0FTRVFETVFDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRTnFJUkFDUUFOQUlBUXRBQUFnQVVHOHo0Q0FBR290QUFCSERhd0JJQUZCQTBZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR2dBU0VRRE1RQ0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVEwaEVBeXBBUXNDUUNBRUlBSkhEUUJCb1FFaEVBekRBZ3NDUUFKQUlBUXRBQUJCdW45cURnc0FyQUdzQWF3QnJBR3NBYXdCckFHc0Fhd0JBYXdCQ3lBRVFRRnFJUVJCaXdFaEVBeXFBZ3NnQkVFQmFpRUVRWXdCSVJBTXFRSUxBa0FnQkNBQ1J3MEFRYUlCSVJBTXdnSUxJQVF0QUFCQjBBQkhEYWtCSUFSQkFXb2hCQXpwQVFzQ1FDQUVJQUpIRFFCQm93RWhFQXpCQWdzQ1FBSkFJQVF0QUFCQnQzOXFEZ2NCcWdHcUFhb0JxZ0dxQVFDcUFRc2dCRUVCYWlFRVFZNEJJUkFNcUFJTElBUkJBV29oQVVFaUlSQU1wZ0VMQWtBZ0JDQUNSdzBBUWFRQklSQU13QUlMSUFJZ0JHc2dBQ2dDQUNJQmFpRVVJQVFnQVd0QkFXb2hFQUpBQTBBZ0JDMEFBQ0FCUWNEUGdJQUFhaTBBQUVjTnFBRWdBVUVCUmcwQklBRkJBV29oQVNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFhUUJJUkFNd0FJTElBQkJBRFlDQUNBUVFRRnFJUUZCSFNFUURLVUJDd0pBSUFRZ0FrY05BRUdsQVNFUURMOENDd0pBQWtBZ0JDMEFBRUd1ZjJvT0F3Q29BUUdvQVFzZ0JFRUJhaUVFUVpBQklSQU1wZ0lMSUFSQkFXb2hBVUVFSVJBTXBBRUxBa0FnQkNBQ1J3MEFRYVlCSVJBTXZnSUxBa0FDUUFKQUFrQUNRQ0FFTFFBQVFiOS9hZzRWQUtvQnFnR3FBYW9CcWdHcUFhb0JxZ0dxQWFvQkFhb0JxZ0VDcWdHcUFRT3FBYW9CQktvQkN5QUVRUUZxSVFSQmlBRWhFQXlvQWdzZ0JFRUJhaUVFUVlrQklSQU1wd0lMSUFSQkFXb2hCRUdLQVNFUURLWUNDeUFFUVFGcUlRUkJqd0VoRUF5bEFnc2dCRUVCYWlFRVFaRUJJUkFNcEFJTEFrQWdCQ0FDUncwQVFhY0JJUkFNdlFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJBbW9oRUFKQUEwQWdCQzBBQUNBQlFlM1BnSUFBYWkwQUFFY05wUUVnQVVFQ1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYWNCSVJBTXZRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkVTRVFES0lCQ3dKQUlBUWdBa2NOQUVHb0FTRVFETHdDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIQ3o0Q0FBR290QUFCSERhUUJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFR29BU0VRREx3Q0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVN3aEVBeWhBUXNDUUNBRUlBSkhEUUJCcVFFaEVBeTdBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFRWFpRVFBa0FEUUNBRUxRQUFJQUZCeGMrQWdBQnFMUUFBUncyakFTQUJRUVJHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnFRRWhFQXk3QWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVySVJBTW9BRUxBa0FnQkNBQ1J3MEFRYW9CSVJBTXVnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQW1vaEVBSkFBMEFnQkMwQUFDQUJRY3JQZ0lBQWFpMEFBRWNOb2dFZ0FVRUNSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWFvQklSQU11Z0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJGQ0VRREo4QkN3SkFJQVFnQWtjTkFFR3JBU0VRRExrQ0N3SkFBa0FDUUFKQUlBUXRBQUJCdm45cURnOEFBUUtrQWFRQnBBR2tBYVFCcEFHa0FhUUJwQUdrQWFRQkE2UUJDeUFFUVFGcUlRUkJrd0VoRUF5aUFnc2dCRUVCYWlFRVFaUUJJUkFNb1FJTElBUkJBV29oQkVHVkFTRVFES0FDQ3lBRVFRRnFJUVJCbGdFaEVBeWZBZ3NDUUNBRUlBSkhEUUJCckFFaEVBeTRBZ3NnQkMwQUFFSEZBRWNObndFZ0JFRUJhaUVFRE9BQkN3SkFJQVFnQWtjTkFFR3RBU0VRRExjQ0N5QUNJQVJySUFBb0FnQWlBV29oRkNBRUlBRnJRUUpxSVJBQ1FBTkFJQVF0QUFBZ0FVSE56NENBQUdvdEFBQkhEWjhCSUFGQkFrWU5BU0FCUVFGcUlRRWdCRUVCYWlJRUlBSkhEUUFMSUFBZ0ZEWUNBRUd0QVNFUURMY0NDeUFBUVFBMkFnQWdFRUVCYWlFQlFRNGhFQXljQVFzQ1FDQUVJQUpIRFFCQnJnRWhFQXkyQWdzZ0JDMEFBRUhRQUVjTm5RRWdCRUVCYWlFQlFTVWhFQXliQVFzQ1FDQUVJQUpIRFFCQnJ3RWhFQXkxQWdzZ0FpQUVheUFBS0FJQUlnRnFJUlFnQkNBQmEwRUlhaUVRQWtBRFFDQUVMUUFBSUFGQjBNK0FnQUJxTFFBQVJ3MmRBU0FCUVFoR0RRRWdBVUVCYWlFQklBUkJBV29pQkNBQ1J3MEFDeUFBSUJRMkFnQkJyd0VoRUF5MUFnc2dBRUVBTmdJQUlCQkJBV29oQVVFcUlSQU1tZ0VMQWtBZ0JDQUNSdzBBUWJBQklSQU10QUlMQWtBQ1FDQUVMUUFBUWF0L2FnNExBSjBCblFHZEFaMEJuUUdkQVowQm5RR2RBUUdkQVFzZ0JFRUJhaUVFUVpvQklSQU1td0lMSUFSQkFXb2hCRUdiQVNFUURKb0NDd0pBSUFRZ0FrY05BRUd4QVNFUURMTUNDd0pBQWtBZ0JDMEFBRUcvZjJvT0ZBQ2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BR2NBWndCbkFHY0Fad0JuQUdjQVp3Qm5BRUJuQUVMSUFSQkFXb2hCRUdaQVNFUURKb0NDeUFFUVFGcUlRUkJuQUVoRUF5WkFnc0NRQ0FFSUFKSERRQkJzZ0VoRUF5eUFnc2dBaUFFYXlBQUtBSUFJZ0ZxSVJRZ0JDQUJhMEVEYWlFUUFrQURRQ0FFTFFBQUlBRkIyYytBZ0FCcUxRQUFSdzJhQVNBQlFRTkdEUUVnQVVFQmFpRUJJQVJCQVdvaUJDQUNSdzBBQ3lBQUlCUTJBZ0JCc2dFaEVBeXlBZ3NnQUVFQU5nSUFJQkJCQVdvaEFVRWhJUkFNbHdFTEFrQWdCQ0FDUncwQVFiTUJJUkFNc1FJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCbW9oRUFKQUEwQWdCQzBBQUNBQlFkM1BnSUFBYWkwQUFFY05tUUVnQVVFR1JnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYk1CSVJBTXNRSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkdpRVFESllCQ3dKQUlBUWdBa2NOQUVHMEFTRVFETEFDQ3dKQUFrQUNRQ0FFTFFBQVFidC9hZzRSQUpvQm1nR2FBWm9CbWdHYUFab0JtZ0dhQVFHYUFab0JtZ0dhQVpvQkFwb0JDeUFFUVFGcUlRUkJuUUVoRUF5WUFnc2dCRUVCYWlFRVFaNEJJUkFNbHdJTElBUkJBV29oQkVHZkFTRVFESllDQ3dKQUlBUWdBa2NOQUVHMUFTRVFESzhDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRVnFJUkFDUUFOQUlBUXRBQUFnQVVIa3o0Q0FBR290QUFCSERaY0JJQUZCQlVZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFRzFBU0VRREs4Q0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVNnaEVBeVVBUXNDUUNBRUlBSkhEUUJCdGdFaEVBeXVBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQ2FpRVFBa0FEUUNBRUxRQUFJQUZCNnMrQWdBQnFMUUFBUncyV0FTQUJRUUpHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnRnRWhFQXl1QWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVISVJBTWt3RUxBa0FnQkNBQ1J3MEFRYmNCSVJBTXJRSUxBa0FDUUNBRUxRQUFRYnQvYWc0T0FKWUJsZ0dXQVpZQmxnR1dBWllCbGdHV0FaWUJsZ0dXQVFHV0FRc2dCRUVCYWlFRVFhRUJJUkFNbEFJTElBUkJBV29oQkVHaUFTRVFESk1DQ3dKQUlBUWdBa2NOQUVHNEFTRVFES3dDQ3lBQ0lBUnJJQUFvQWdBaUFXb2hGQ0FFSUFGclFRSnFJUkFDUUFOQUlBUXRBQUFnQVVIdHo0Q0FBR290QUFCSERaUUJJQUZCQWtZTkFTQUJRUUZxSVFFZ0JFRUJhaUlFSUFKSERRQUxJQUFnRkRZQ0FFRzRBU0VRREt3Q0N5QUFRUUEyQWdBZ0VFRUJhaUVCUVJJaEVBeVJBUXNDUUNBRUlBSkhEUUJCdVFFaEVBeXJBZ3NnQWlBRWF5QUFLQUlBSWdGcUlSUWdCQ0FCYTBFQmFpRVFBa0FEUUNBRUxRQUFJQUZCOE0rQWdBQnFMUUFBUncyVEFTQUJRUUZHRFFFZ0FVRUJhaUVCSUFSQkFXb2lCQ0FDUncwQUN5QUFJQlEyQWdCQnVRRWhFQXlyQWdzZ0FFRUFOZ0lBSUJCQkFXb2hBVUVnSVJBTWtBRUxBa0FnQkNBQ1J3MEFRYm9CSVJBTXFnSUxJQUlnQkdzZ0FDZ0NBQ0lCYWlFVUlBUWdBV3RCQVdvaEVBSkFBMEFnQkMwQUFDQUJRZkxQZ0lBQWFpMEFBRWNOa2dFZ0FVRUJSZzBCSUFGQkFXb2hBU0FFUVFGcUlnUWdBa2NOQUFzZ0FDQVVOZ0lBUWJvQklSQU1xZ0lMSUFCQkFEWUNBQ0FRUVFGcUlRRkJEeUVRREk4QkN3SkFJQVFnQWtjTkFFRzdBU0VRREtrQ0N3SkFBa0FnQkMwQUFFRzNmMm9PQndDU0FaSUJrZ0dTQVpJQkFaSUJDeUFFUVFGcUlRUkJwUUVoRUF5UUFnc2dCRUVCYWlFRVFhWUJJUkFNandJTEFrQWdCQ0FDUncwQVFid0JJUkFNcUFJTElBSWdCR3NnQUNnQ0FDSUJhaUVVSUFRZ0FXdEJCMm9oRUFKQUEwQWdCQzBBQUNBQlFmVFBnSUFBYWkwQUFFY05rQUVnQVVFSFJnMEJJQUZCQVdvaEFTQUVRUUZxSWdRZ0FrY05BQXNnQUNBVU5nSUFRYndCSVJBTXFBSUxJQUJCQURZQ0FDQVFRUUZxSVFGQkd5RVFESTBCQ3dKQUlBUWdBa2NOQUVHOUFTRVFES2NDQ3dKQUFrQUNRQ0FFTFFBQVFiNS9hZzRTQUpFQmtRR1JBWkVCa1FHUkFaRUJrUUdSQVFHUkFaRUJrUUdSQVpFQmtRRUNrUUVMSUFSQkFXb2hCRUdrQVNFUURJOENDeUFFUVFGcUlRUkJwd0VoRUF5T0Fnc2dCRUVCYWlFRVFhZ0JJUkFNalFJTEFrQWdCQ0FDUncwQVFiNEJJUkFNcGdJTElBUXRBQUJCemdCSERZMEJJQVJCQVdvaEJBelBBUXNDUUNBRUlBSkhEUUJCdndFaEVBeWxBZ3NDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUVMUUFBUWI5L2FnNFZBQUVDQTV3QkJBVUduQUdjQVp3QkJ3Z0pDZ3VjQVF3TkRnK2NBUXNnQkVFQmFpRUJRZWdBSVJBTW1nSUxJQVJCQVdvaEFVSHBBQ0VRREprQ0N5QUVRUUZxSVFGQjdnQWhFQXlZQWdzZ0JFRUJhaUVCUWZJQUlSQU1sd0lMSUFSQkFXb2hBVUh6QUNFUURKWUNDeUFFUVFGcUlRRkI5Z0FoRUF5VkFnc2dCRUVCYWlFQlFmY0FJUkFNbEFJTElBUkJBV29oQVVINkFDRVFESk1DQ3lBRVFRRnFJUVJCZ3dFaEVBeVNBZ3NnQkVFQmFpRUVRWVFCSVJBTWtRSUxJQVJCQVdvaEJFR0ZBU0VRREpBQ0N5QUVRUUZxSVFSQmtnRWhFQXlQQWdzZ0JFRUJhaUVFUVpnQklSQU1qZ0lMSUFSQkFXb2hCRUdnQVNFUURJMENDeUFFUVFGcUlRUkJvd0VoRUF5TUFnc2dCRUVCYWlFRVFhb0JJUkFNaXdJTEFrQWdCQ0FDUmcwQUlBQkJrSUNBZ0FBMkFnZ2dBQ0FFTmdJRVFhc0JJUkFNaXdJTFFjQUJJUkFNb3dJTElBQWdCU0FDRUtxQWdJQUFJZ0VOaXdFZ0JTRUJERndMQWtBZ0JpQUNSZzBBSUFaQkFXb2hCUXlOQVF0QndnRWhFQXloQWdzRFFBSkFJQkF0QUFCQmRtb09CSXdCQUFDUEFRQUxJQkJCQVdvaUVDQUNSdzBBQzBIREFTRVFES0FDQ3dKQUlBY2dBa1lOQUNBQVFaR0FnSUFBTmdJSUlBQWdCellDQkNBSElRRkJBU0VRREljQ0MwSEVBU0VRREo4Q0N3SkFJQWNnQWtjTkFFSEZBU0VRREo4Q0N3SkFBa0FnQnkwQUFFRjJhZzRFQWM0QnpnRUF6Z0VMSUFkQkFXb2hCZ3lOQVFzZ0IwRUJhaUVGRElrQkN3SkFJQWNnQWtjTkFFSEdBU0VRREo0Q0N3SkFBa0FnQnkwQUFFRjJhZzRYQVk4Qmp3RUJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandHUEFZOEJBSThCQ3lBSFFRRnFJUWNMUWJBQklSQU1oQUlMQWtBZ0NDQUNSdzBBUWNnQklSQU1uUUlMSUFndEFBQkJJRWNOalFFZ0FFRUFPd0V5SUFoQkFXb2hBVUd6QVNFUURJTUNDeUFCSVJjQ1FBTkFJQmNpQnlBQ1JnMEJJQWN0QUFCQlVHcEIvd0Z4SWhCQkNrOE56QUVDUUNBQUx3RXlJaFJCbVROTERRQWdBQ0FVUVFwc0loUTdBVElnRUVILy93TnpJQlJCL3Y4RGNVa05BQ0FIUVFGcUlSY2dBQ0FVSUJCcUloQTdBVElnRUVILy93TnhRZWdIU1EwQkN3dEJBQ0VRSUFCQkFEWUNIQ0FBUWNHSmdJQUFOZ0lRSUFCQkRUWUNEQ0FBSUFkQkFXbzJBaFFNbkFJTFFjY0JJUkFNbXdJTElBQWdDQ0FDRUs2QWdJQUFJaEJGRGNvQklCQkJGVWNOakFFZ0FFSElBVFlDSENBQUlBZzJBaFFnQUVISmw0Q0FBRFlDRUNBQVFSVTJBZ3hCQUNFUURKb0NDd0pBSUFrZ0FrY05BRUhNQVNFUURKb0NDMEVBSVJSQkFTRVhRUUVoRmtFQUlSQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdDUzBBQUVGUWFnNEtsZ0dWQVFBQkFnTUVCUVlJbHdFTFFRSWhFQXdHQzBFRElSQU1CUXRCQkNFUURBUUxRUVVoRUF3REMwRUdJUkFNQWd0QkJ5RVFEQUVMUVFnaEVBdEJBQ0VYUVFBaEZrRUFJUlFNamdFTFFRa2hFRUVCSVJSQkFDRVhRUUFoRmd5TkFRc0NRQ0FLSUFKSERRQkJ6Z0VoRUF5WkFnc2dDaTBBQUVFdVJ3Mk9BU0FLUVFGcUlRa015Z0VMSUFzZ0FrY05qZ0ZCMEFFaEVBeVhBZ3NDUUNBTElBSkdEUUFnQUVHT2dJQ0FBRFlDQ0NBQUlBczJBZ1JCdHdFaEVBeitBUXRCMFFFaEVBeVdBZ3NDUUNBRUlBSkhEUUJCMGdFaEVBeVdBZ3NnQWlBRWF5QUFLQUlBSWhCcUlSUWdCQ0FRYTBFRWFpRUxBMEFnQkMwQUFDQVFRZnpQZ0lBQWFpMEFBRWNOamdFZ0VFRUVSZzNwQVNBUVFRRnFJUkFnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVIU0FTRVFESlVDQ3lBQUlBd2dBaENzZ0lDQUFDSUJEWTBCSUF3aEFReTRBUXNDUUNBRUlBSkhEUUJCMUFFaEVBeVVBZ3NnQWlBRWF5QUFLQUlBSWhCcUlSUWdCQ0FRYTBFQmFpRU1BMEFnQkMwQUFDQVFRWUhRZ0lBQWFpMEFBRWNOandFZ0VFRUJSZzJPQVNBUVFRRnFJUkFnQkVFQmFpSUVJQUpIRFFBTElBQWdGRFlDQUVIVUFTRVFESk1DQ3dKQUlBUWdBa2NOQUVIV0FTRVFESk1DQ3lBQ0lBUnJJQUFvQWdBaUVHb2hGQ0FFSUJCclFRSnFJUXNEUUNBRUxRQUFJQkJCZzlDQWdBQnFMUUFBUncyT0FTQVFRUUpHRFpBQklCQkJBV29oRUNBRVFRRnFJZ1FnQWtjTkFBc2dBQ0FVTmdJQVFkWUJJUkFNa2dJTEFrQWdCQ0FDUncwQVFkY0JJUkFNa2dJTEFrQUNRQ0FFTFFBQVFidC9hZzRRQUk4Qmp3R1BBWThCandHUEFZOEJqd0dQQVk4Qmp3R1BBWThCandFQmp3RUxJQVJCQVdvaEJFRzdBU0VRRFBrQkN5QUVRUUZxSVFSQnZBRWhFQXo0QVFzQ1FDQUVJQUpIRFFCQjJBRWhFQXlSQWdzZ0JDMEFBRUhJQUVjTmpBRWdCRUVCYWlFRURNUUJDd0pBSUFRZ0FrWU5BQ0FBUVpDQWdJQUFOZ0lJSUFBZ0JEWUNCRUcrQVNFUURQY0JDMEhaQVNFUURJOENDd0pBSUFRZ0FrY05BRUhhQVNFUURJOENDeUFFTFFBQVFjZ0FSZzNEQVNBQVFRRTZBQ2dNdVFFTElBQkJBam9BTHlBQUlBUWdBaENtZ0lDQUFDSVFEWTBCUWNJQklSQU05QUVMSUFBdEFDaEJmMm9PQXJjQnVRRzRBUXNEUUFKQUlBUXRBQUJCZG1vT0JBQ09BWTRCQUk0QkN5QUVRUUZxSWdRZ0FrY05BQXRCM1FFaEVBeUxBZ3NnQUVFQU9nQXZJQUF0QUMxQkJIRkZEWVFDQ3lBQVFRQTZBQzhnQUVFQk9nQTBJQUVoQVF5TUFRc2dFRUVWUmczYUFTQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnA0NkFnQUEyQWhBZ0FFRVNOZ0lNUVFBaEVBeUlBZ3NDUUNBQUlCQWdBaEMwZ0lDQUFDSUVEUUFnRUNFQkRJRUNDd0pBSUFSQkZVY05BQ0FBUVFNMkFod2dBQ0FRTmdJVUlBQkJzSmlBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXlJQWdzZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUWFlT2dJQUFOZ0lRSUFCQkVqWUNERUVBSVJBTWh3SUxJQkJCRlVZTjFnRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFkcU5nSUFBTmdJUUlBQkJGRFlDREVFQUlSQU1oZ0lMSUFBb0FnUWhGeUFBUVFBMkFnUWdFQ0FScDJvaUZpRUJJQUFnRnlBUUlCWWdGQnNpRUJDMWdJQ0FBQ0lVUlEyTkFTQUFRUWMyQWh3Z0FDQVFOZ0lVSUFBZ0ZEWUNERUVBSVJBTWhRSUxJQUFnQUM4Qk1FR0FBWEk3QVRBZ0FTRUJDMEVxSVJBTTZnRUxJQkJCRlVZTjBRRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFZT01nSUFBTmdJUUlBQkJFellDREVFQUlSQU1nZ0lMSUJCQkZVWU56d0VnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWnFQZ0lBQU5nSVFJQUJCSWpZQ0RFRUFJUkFNZ1FJTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkMzZ0lDQUFDSVFEUUFnQVVFQmFpRUJESTBCQ3lBQVFRdzJBaHdnQUNBUU5nSU1JQUFnQVVFQmFqWUNGRUVBSVJBTWdBSUxJQkJCRlVZTnpBRWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFacVBnSUFBTmdJUUlBQkJJallDREVFQUlSQU0vd0VMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQzNnSUNBQUNJUURRQWdBVUVCYWlFQkRJd0JDeUFBUVEwMkFod2dBQ0FRTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNL2dFTElCQkJGVVlOeVFFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWNhTWdJQUFOZ0lRSUFCQkl6WUNERUVBSVJBTS9RRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDNWdJQ0FBQ0lRRFFBZ0FVRUJhaUVCRElzQkN5QUFRUTQyQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU0vQUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhBbFlDQUFEWUNFQ0FBUVFJMkFneEJBQ0VRRFBzQkN5QVFRUlZHRGNVQklBQkJBRFlDSENBQUlBRTJBaFFnQUVIR2pJQ0FBRFlDRUNBQVFTTTJBZ3hCQUNFUURQb0JDeUFBUVJBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU0rUUVMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQzVnSUNBQUNJRURRQWdBVUVCYWlFQkRQRUJDeUFBUVJFMkFod2dBQ0FFTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNK0FFTElCQkJGVVlOd1FFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUWNhTWdJQUFOZ0lRSUFCQkl6WUNERUVBSVJBTTl3RUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDNWdJQ0FBQ0lRRFFBZ0FVRUJhaUVCRElnQkN5QUFRUk0yQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU05Z0VMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQzVnSUNBQUNJRURRQWdBVUVCYWlFQkRPMEJDeUFBUVJRMkFod2dBQ0FFTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNOVFFTElCQkJGVVlOdlFFZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVpxUGdJQUFOZ0lRSUFCQklqWUNERUVBSVJBTTlBRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDM2dJQ0FBQ0lRRFFBZ0FVRUJhaUVCRElZQkN5QUFRUlkyQWh3Z0FDQVFOZ0lNSUFBZ0FVRUJhallDRkVFQUlSQU04d0VMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQzNnSUNBQUNJRURRQWdBVUVCYWlFQkRPa0JDeUFBUVJjMkFod2dBQ0FFTmdJTUlBQWdBVUVCYWpZQ0ZFRUFJUkFNOGdFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVITms0Q0FBRFlDRUNBQVFRdzJBZ3hCQUNFUURQRUJDMElCSVJFTElCQkJBV29oQVFKQUlBQXBBeUFpRWtMLy8vLy8vLy8vL3c5V0RRQWdBQ0FTUWdTR0lCR0VOd01nSUFFaEFReUVBUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYTJKZ0lBQU5nSVFJQUJCRERZQ0RFRUFJUkFNN3dFTElBQkJBRFlDSENBQUlCQTJBaFFnQUVITms0Q0FBRFlDRUNBQVFRdzJBZ3hCQUNFUURPNEJDeUFBS0FJRUlSY2dBRUVBTmdJRUlCQWdFYWRxSWhZaEFTQUFJQmNnRUNBV0lCUWJJaEFRdFlDQWdBQWlGRVVOY3lBQVFRVTJBaHdnQUNBUU5nSVVJQUFnRkRZQ0RFRUFJUkFNN1FFTElBQkJBRFlDSENBQUlCQTJBaFFnQUVHcW5JQ0FBRFlDRUNBQVFRODJBZ3hCQUNFUURPd0JDeUFBSUJBZ0FoQzBnSUNBQUNJQkRRRWdFQ0VCQzBFT0lSQU0wUUVMQWtBZ0FVRVZSdzBBSUFCQkFqWUNIQ0FBSUJBMkFoUWdBRUd3bUlDQUFEWUNFQ0FBUVJVMkFneEJBQ0VRRE9vQkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQnA0NkFnQUEyQWhBZ0FFRVNOZ0lNUVFBaEVBenBBUXNnQVVFQmFpRVFBa0FnQUM4Qk1DSUJRWUFCY1VVTkFBSkFJQUFnRUNBQ0VMdUFnSUFBSWdFTkFDQVFJUUVNY0FzZ0FVRVZSdzI2QVNBQVFRVTJBaHdnQUNBUU5nSVVJQUJCK1plQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF6cEFRc0NRQ0FCUWFBRWNVR2dCRWNOQUNBQUxRQXRRUUp4RFFBZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUVphVGdJQUFOZ0lRSUFCQkJEWUNERUVBSVJBTTZRRUxJQUFnRUNBQ0VMMkFnSUFBR2lBUUlRRUNRQUpBQWtBQ1FBSkFJQUFnRUNBQ0VMT0FnSUFBRGhZQ0FRQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUURCQXNnQUVFQk9nQXVDeUFBSUFBdkFUQkJ3QUJ5T3dFd0lCQWhBUXRCSmlFUURORUJDeUFBUVNNMkFod2dBQ0FRTmdJVUlBQkJwWmFBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXpwQVFzZ0FFRUFOZ0ljSUFBZ0VEWUNGQ0FBUWRXTGdJQUFOZ0lRSUFCQkVUWUNERUVBSVJBTTZBRUxJQUF0QUMxQkFYRkZEUUZCd3dFaEVBek9BUXNDUUNBTklBSkdEUUFEUUFKQUlBMHRBQUJCSUVZTkFDQU5JUUVNeEFFTElBMUJBV29pRFNBQ1J3MEFDMEVsSVJBTTV3RUxRU1VoRUF6bUFRc2dBQ2dDQkNFRUlBQkJBRFlDQkNBQUlBUWdEUkN2Z0lDQUFDSUVSUTJ0QVNBQVFTWTJBaHdnQUNBRU5nSU1JQUFnRFVFQmFqWUNGRUVBSVJBTTVRRUxJQkJCRlVZTnF3RWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFmMk5nSUFBTmdJUUlBQkJIVFlDREVFQUlSQU01QUVMSUFCQkp6WUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXpqQVFzZ0VDRUJRUUVoRkFKQUFrQUNRQUpBQWtBQ1FBSkFJQUF0QUN4QmZtb09Cd1lGQlFNQkFnQUZDeUFBSUFBdkFUQkJDSEk3QVRBTUF3dEJBaUVVREFFTFFRUWhGQXNnQUVFQk9nQXNJQUFnQUM4Qk1DQVVjanNCTUFzZ0VDRUJDMEVySVJBTXlnRUxJQUJCQURZQ0hDQUFJQkEyQWhRZ0FFR3Jrb0NBQURZQ0VDQUFRUXMyQWd4QkFDRVFET0lCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCNFkrQWdBQTJBaEFnQUVFS05nSU1RUUFoRUF6aEFRc2dBRUVBT2dBc0lCQWhBUXk5QVFzZ0VDRUJRUUVoRkFKQUFrQUNRQUpBQWtBZ0FDMEFMRUY3YWc0RUF3RUNBQVVMSUFBZ0FDOEJNRUVJY2pzQk1Bd0RDMEVDSVJRTUFRdEJCQ0VVQ3lBQVFRRTZBQ3dnQUNBQUx3RXdJQlJ5T3dFd0N5QVFJUUVMUVNraEVBekZBUXNnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZkNVZ0lBQU5nSVFJQUJCQXpZQ0RFRUFJUkFNM1FFTEFrQWdEaTBBQUVFTlJ3MEFJQUFvQWdRaEFTQUFRUUEyQWdRQ1FDQUFJQUVnRGhDeGdJQ0FBQ0lCRFFBZ0RrRUJhaUVCREhVTElBQkJMRFlDSENBQUlBRTJBZ3dnQUNBT1FRRnFOZ0lVUVFBaEVBemRBUXNnQUMwQUxVRUJjVVVOQVVIRUFTRVFETU1CQ3dKQUlBNGdBa2NOQUVFdElSQU0zQUVMQWtBQ1FBTkFBa0FnRGkwQUFFRjJhZzRFQWdBQUF3QUxJQTVCQVdvaURpQUNSdzBBQzBFdElSQU0zUUVMSUFBb0FnUWhBU0FBUVFBMkFnUUNRQ0FBSUFFZ0RoQ3hnSUNBQUNJQkRRQWdEaUVCREhRTElBQkJMRFlDSENBQUlBNDJBaFFnQUNBQk5nSU1RUUFoRUF6Y0FRc2dBQ2dDQkNFQklBQkJBRFlDQkFKQUlBQWdBU0FPRUxHQWdJQUFJZ0VOQUNBT1FRRnFJUUVNY3dzZ0FFRXNOZ0ljSUFBZ0FUWUNEQ0FBSUE1QkFXbzJBaFJCQUNFUUROc0JDeUFBS0FJRUlRUWdBRUVBTmdJRUlBQWdCQ0FPRUxHQWdJQUFJZ1FOb0FFZ0RpRUJETTRCQ3lBUVFTeEhEUUVnQVVFQmFpRVFRUUVoQVFKQUFrQUNRQUpBQWtBZ0FDMEFMRUY3YWc0RUF3RUNCQUFMSUJBaEFRd0VDMEVDSVFFTUFRdEJCQ0VCQ3lBQVFRRTZBQ3dnQUNBQUx3RXdJQUZ5T3dFd0lCQWhBUXdCQ3lBQUlBQXZBVEJCQ0hJN0FUQWdFQ0VCQzBFNUlSQU12d0VMSUFCQkFEb0FMQ0FCSVFFTFFUUWhFQXk5QVFzZ0FDQUFMd0V3UVNCeU93RXdJQUVoQVF3Q0N5QUFLQUlFSVFRZ0FFRUFOZ0lFQWtBZ0FDQUVJQUVRc1lDQWdBQWlCQTBBSUFFaEFRekhBUXNnQUVFM05nSWNJQUFnQVRZQ0ZDQUFJQVEyQWd4QkFDRVFETlFCQ3lBQVFRZzZBQ3dnQVNFQkMwRXdJUkFNdVFFTEFrQWdBQzBBS0VFQlJnMEFJQUVoQVF3RUN5QUFMUUF0UVFoeFJRMlRBU0FCSVFFTUF3c2dBQzBBTUVFZ2NRMlVBVUhGQVNFUURMY0JDd0pBSUE4Z0FrWU5BQUpBQTBBQ1FDQVBMUUFBUVZCcUlnRkIvd0Z4UVFwSkRRQWdEeUVCUVRVaEVBeTZBUXNnQUNrRElDSVJRcG16NXN5WnMrYk1HVllOQVNBQUlCRkNDbjRpRVRjRElDQVJJQUd0UXY4Qmd5SVNRbitGVmcwQklBQWdFU0FTZkRjRElDQVBRUUZxSWc4Z0FrY05BQXRCT1NFUURORUJDeUFBS0FJRUlRSWdBRUVBTmdJRUlBQWdBaUFQUVFGcUlnUVFzWUNBZ0FBaUFnMlZBU0FFSVFFTXd3RUxRVGtoRUF6UEFRc0NRQ0FBTHdFd0lnRkJDSEZGRFFBZ0FDMEFLRUVCUncwQUlBQXRBQzFCQ0hGRkRaQUJDeUFBSUFGQjkvc0RjVUdBQkhJN0FUQWdEeUVCQzBFM0lSQU10QUVMSUFBZ0FDOEJNRUVRY2pzQk1BeXJBUXNnRUVFVlJnMkxBU0FBUVFBMkFod2dBQ0FCTmdJVUlBQkI4STZBZ0FBMkFoQWdBRUVjTmdJTVFRQWhFQXpMQVFzZ0FFSERBRFlDSENBQUlBRTJBZ3dnQUNBTlFRRnFOZ0lVUVFBaEVBektBUXNDUUNBQkxRQUFRVHBIRFFBZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFSytBZ0lBQUloQU5BQ0FCUVFGcUlRRU1Zd3NnQUVIREFEWUNIQ0FBSUJBMkFnd2dBQ0FCUVFGcU5nSVVRUUFoRUF6S0FRc2dBRUVBTmdJY0lBQWdBVFlDRkNBQVFiR1JnSUFBTmdJUUlBQkJDallDREVFQUlSQU15UUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUdnbVlDQUFEWUNFQ0FBUVI0MkFneEJBQ0VRRE1nQkN5QUFRUUEyQWdBTElBQkJnQkk3QVNvZ0FDQVhRUUZxSWdFZ0FoQ29nSUNBQUNJUURRRWdBU0VCQzBISEFDRVFES3dCQ3lBUVFSVkhEWU1CSUFCQjBRQTJBaHdnQUNBQk5nSVVJQUJCNDVlQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF6RUFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1YZ3NnQUVIU0FEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXpEQVFzZ0FFRUFOZ0ljSUFBZ0ZEWUNGQ0FBUWNHb2dJQUFOZ0lRSUFCQkJ6WUNEQ0FBUVFBMkFnQkJBQ0VRRE1JQkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReGRDeUFBUWRNQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFETUVCQzBFQUlSQWdBRUVBTmdJY0lBQWdBVFlDRkNBQVFZQ1JnSUFBTmdJUUlBQkJDVFlDREF6QUFRc2dFRUVWUmcxOUlBQkJBRFlDSENBQUlBRTJBaFFnQUVHVWpZQ0FBRFlDRUNBQVFTRTJBZ3hCQUNFUURMOEJDMEVCSVJaQkFDRVhRUUFoRkVFQklSQUxJQUFnRURvQUt5QUJRUUZxSVFFQ1FBSkFJQUF0QUMxQkVIRU5BQUpBQWtBQ1FDQUFMUUFxRGdNQkFBSUVDeUFXUlEwRERBSUxJQlFOQVF3Q0N5QVhSUTBCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFyWUNBZ0FBaUVBMEFJQUVoQVF4Y0N5QUFRZGdBTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURMNEJDeUFBS0FJRUlRUWdBRUVBTmdJRUFrQWdBQ0FFSUFFUXJZQ0FnQUFpQkEwQUlBRWhBUXl0QVFzZ0FFSFpBRFlDSENBQUlBRTJBaFFnQUNBRU5nSU1RUUFoRUF5OUFRc2dBQ2dDQkNFRUlBQkJBRFlDQkFKQUlBQWdCQ0FCRUsyQWdJQUFJZ1FOQUNBQklRRU1xd0VMSUFCQjJnQTJBaHdnQUNBQk5nSVVJQUFnQkRZQ0RFRUFJUkFNdkFFTElBQW9BZ1FoQkNBQVFRQTJBZ1FDUUNBQUlBUWdBUkN0Z0lDQUFDSUVEUUFnQVNFQkRLa0JDeUFBUWR3QU5nSWNJQUFnQVRZQ0ZDQUFJQVEyQWd4QkFDRVFETHNCQ3dKQUlBRXRBQUJCVUdvaUVFSC9BWEZCQ2s4TkFDQUFJQkE2QUNvZ0FVRUJhaUVCUWM4QUlSQU1vZ0VMSUFBb0FnUWhCQ0FBUVFBMkFnUUNRQ0FBSUFRZ0FSQ3RnSUNBQUNJRURRQWdBU0VCREtjQkN5QUFRZDRBTmdJY0lBQWdBVFlDRkNBQUlBUTJBZ3hCQUNFUURMb0JDeUFBUVFBMkFnQWdGMEVCYWlFQkFrQWdBQzBBS1VFalR3MEFJQUVoQVF4WkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjA0bUFnQUEyQWhBZ0FFRUlOZ0lNUVFBaEVBeTVBUXNnQUVFQU5nSUFDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0FUWUNGQ0FBUVpDemdJQUFOZ0lRSUFCQkNEWUNEQXkzQVFzZ0FFRUFOZ0lBSUJkQkFXb2hBUUpBSUFBdEFDbEJJVWNOQUNBQklRRU1WZ3NnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRWnVLZ0lBQU5nSVFJQUJCQ0RZQ0RFRUFJUkFNdGdFTElBQkJBRFlDQUNBWFFRRnFJUUVDUUNBQUxRQXBJaEJCWFdwQkMwOE5BQ0FCSVFFTVZRc0NRQ0FRUVFaTERRQkJBU0FRZEVIS0FIRkZEUUFnQVNFQkRGVUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCOTRtQWdBQTJBaEFnQUVFSU5nSU1ETFVCQ3lBUVFSVkdEWEVnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRYm1OZ0lBQU5nSVFJQUJCR2pZQ0RFRUFJUkFNdEFFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRGUUxJQUJCNVFBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1zd0VMSUFBb0FnUWhFQ0FBUVFBMkFnUUNRQ0FBSUJBZ0FSQ25nSUNBQUNJUURRQWdBU0VCREUwTElBQkIwZ0EyQWh3Z0FDQUJOZ0lVSUFBZ0VEWUNERUVBSVJBTXNnRUxJQUFvQWdRaEVDQUFRUUEyQWdRQ1FDQUFJQkFnQVJDbmdJQ0FBQ0lRRFFBZ0FTRUJERTBMSUFCQjB3QTJBaHdnQUNBQk5nSVVJQUFnRURZQ0RFRUFJUkFNc1FFTElBQW9BZ1FoRUNBQVFRQTJBZ1FDUUNBQUlCQWdBUkNuZ0lDQUFDSVFEUUFnQVNFQkRGRUxJQUJCNVFBMkFod2dBQ0FCTmdJVUlBQWdFRFlDREVFQUlSQU1zQUVMSUFCQkFEWUNIQ0FBSUFFMkFoUWdBRUhHaW9DQUFEWUNFQ0FBUVFjMkFneEJBQ0VRREs4QkN5QUFLQUlFSVJBZ0FFRUFOZ0lFQWtBZ0FDQVFJQUVRcDRDQWdBQWlFQTBBSUFFaEFReEpDeUFBUWRJQU5nSWNJQUFnQVRZQ0ZDQUFJQkEyQWd4QkFDRVFESzRCQ3lBQUtBSUVJUkFnQUVFQU5nSUVBa0FnQUNBUUlBRVFwNENBZ0FBaUVBMEFJQUVoQVF4SkN5QUFRZE1BTmdJY0lBQWdBVFlDRkNBQUlCQTJBZ3hCQUNFUURLMEJDeUFBS0FJRUlSQWdBRUVBTmdJRUFrQWdBQ0FRSUFFUXA0Q0FnQUFpRUEwQUlBRWhBUXhOQ3lBQVFlVUFOZ0ljSUFBZ0FUWUNGQ0FBSUJBMkFneEJBQ0VRREt3QkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjNJaUFnQUEyQWhBZ0FFRUhOZ0lNUVFBaEVBeXJBUXNnRUVFL1J3MEJJQUZCQVdvaEFRdEJCU0VRREpBQkMwRUFJUkFnQUVFQU5nSWNJQUFnQVRZQ0ZDQUFRZjJTZ0lBQU5nSVFJQUJCQnpZQ0RBeW9BUXNnQUNnQ0JDRVFJQUJCQURZQ0JBSkFJQUFnRUNBQkVLZUFnSUFBSWhBTkFDQUJJUUVNUWdzZ0FFSFNBRFlDSENBQUlBRTJBaFFnQUNBUU5nSU1RUUFoRUF5bkFRc2dBQ2dDQkNFUUlBQkJBRFlDQkFKQUlBQWdFQ0FCRUtlQWdJQUFJaEFOQUNBQklRRU1RZ3NnQUVIVEFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXltQVFzZ0FDZ0NCQ0VRSUFCQkFEWUNCQUpBSUFBZ0VDQUJFS2VBZ0lBQUloQU5BQ0FCSVFFTVJnc2dBRUhsQURZQ0hDQUFJQUUyQWhRZ0FDQVFOZ0lNUVFBaEVBeWxBUXNnQUNnQ0JDRUJJQUJCQURZQ0JBSkFJQUFnQVNBVUVLZUFnSUFBSWdFTkFDQVVJUUVNUHdzZ0FFSFNBRFlDSENBQUlCUTJBaFFnQUNBQk5nSU1RUUFoRUF5a0FRc2dBQ2dDQkNFQklBQkJBRFlDQkFKQUlBQWdBU0FVRUtlQWdJQUFJZ0VOQUNBVUlRRU1Qd3NnQUVIVEFEWUNIQ0FBSUJRMkFoUWdBQ0FCTmdJTVFRQWhFQXlqQVFzZ0FDZ0NCQ0VCSUFCQkFEWUNCQUpBSUFBZ0FTQVVFS2VBZ0lBQUlnRU5BQ0FVSVFFTVF3c2dBRUhsQURZQ0hDQUFJQlEyQWhRZ0FDQUJOZ0lNUVFBaEVBeWlBUXNnQUVFQU5nSWNJQUFnRkRZQ0ZDQUFRY09QZ0lBQU5nSVFJQUJCQnpZQ0RFRUFJUkFNb1FFTElBQkJBRFlDSENBQUlBRTJBaFFnQUVIRGo0Q0FBRFlDRUNBQVFRYzJBZ3hCQUNFUURLQUJDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0ZEWUNGQ0FBUVl5Y2dJQUFOZ0lRSUFCQkJ6WUNEQXlmQVFzZ0FFRUFOZ0ljSUFBZ0ZEWUNGQ0FBUVl5Y2dJQUFOZ0lRSUFCQkJ6WUNERUVBSVJBTW5nRUxJQUJCQURZQ0hDQUFJQlEyQWhRZ0FFSCtrWUNBQURZQ0VDQUFRUWMyQWd4QkFDRVFESjBCQ3lBQVFRQTJBaHdnQUNBQk5nSVVJQUJCanB1QWdBQTJBaEFnQUVFR05nSU1RUUFoRUF5Y0FRc2dFRUVWUmcxWElBQkJBRFlDSENBQUlBRTJBaFFnQUVITWpvQ0FBRFlDRUNBQVFTQTJBZ3hCQUNFUURKc0JDeUFBUVFBMkFnQWdFRUVCYWlFQlFTUWhFQXNnQUNBUU9nQXBJQUFvQWdRaEVDQUFRUUEyQWdRZ0FDQVFJQUVRcTRDQWdBQWlFQTFVSUFFaEFRdytDeUFBUVFBMkFnQUxRUUFoRUNBQVFRQTJBaHdnQUNBRU5nSVVJQUJCOFp1QWdBQTJBaEFnQUVFR05nSU1ESmNCQ3lBQlFSVkdEVkFnQUVFQU5nSWNJQUFnQlRZQ0ZDQUFRZkNNZ0lBQU5nSVFJQUJCR3pZQ0RFRUFJUkFNbGdFTElBQW9BZ1FoQlNBQVFRQTJBZ1FnQUNBRklCQVFxWUNBZ0FBaUJRMEJJQkJCQVdvaEJRdEJyUUVoRUF4N0N5QUFRY0VCTmdJY0lBQWdCVFlDRENBQUlCQkJBV28yQWhSQkFDRVFESk1CQ3lBQUtBSUVJUVlnQUVFQU5nSUVJQUFnQmlBUUVLbUFnSUFBSWdZTkFTQVFRUUZxSVFZTFFhNEJJUkFNZUFzZ0FFSENBVFlDSENBQUlBWTJBZ3dnQUNBUVFRRnFOZ0lVUVFBaEVBeVFBUXNnQUVFQU5nSWNJQUFnQnpZQ0ZDQUFRWmVMZ0lBQU5nSVFJQUJCRFRZQ0RFRUFJUkFNandFTElBQkJBRFlDSENBQUlBZzJBaFFnQUVIamtJQ0FBRFlDRUNBQVFRazJBZ3hCQUNFUURJNEJDeUFBUVFBMkFod2dBQ0FJTmdJVUlBQkJsSTJBZ0FBMkFoQWdBRUVoTmdJTVFRQWhFQXlOQVF0QkFTRVdRUUFoRjBFQUlSUkJBU0VRQ3lBQUlCQTZBQ3NnQ1VFQmFpRUlBa0FDUUNBQUxRQXRRUkJ4RFFBQ1FBSkFBa0FnQUMwQUtnNERBUUFDQkFzZ0ZrVU5Bd3dDQ3lBVURRRU1BZ3NnRjBVTkFRc2dBQ2dDQkNFUUlBQkJBRFlDQkNBQUlCQWdDQkN0Z0lDQUFDSVFSUTA5SUFCQnlRRTJBaHdnQUNBSU5nSVVJQUFnRURZQ0RFRUFJUkFNakFFTElBQW9BZ1FoQkNBQVFRQTJBZ1FnQUNBRUlBZ1FyWUNBZ0FBaUJFVU5kaUFBUWNvQk5nSWNJQUFnQ0RZQ0ZDQUFJQVEyQWd4QkFDRVFESXNCQ3lBQUtBSUVJUVFnQUVFQU5nSUVJQUFnQkNBSkVLMkFnSUFBSWdSRkRYUWdBRUhMQVRZQ0hDQUFJQWsyQWhRZ0FDQUVOZ0lNUVFBaEVBeUtBUXNnQUNnQ0JDRUVJQUJCQURZQ0JDQUFJQVFnQ2hDdGdJQ0FBQ0lFUlExeUlBQkJ6UUUyQWh3Z0FDQUtOZ0lVSUFBZ0JEWUNERUVBSVJBTWlRRUxBa0FnQ3kwQUFFRlFhaUlRUWY4QmNVRUtUdzBBSUFBZ0VEb0FLaUFMUVFGcUlRcEJ0Z0VoRUF4d0N5QUFLQUlFSVFRZ0FFRUFOZ0lFSUFBZ0JDQUxFSzJBZ0lBQUlnUkZEWEFnQUVIUEFUWUNIQ0FBSUFzMkFoUWdBQ0FFTmdJTVFRQWhFQXlJQVFzZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUVpDemdJQUFOZ0lRSUFCQkNEWUNEQ0FBUVFBMkFnQkJBQ0VRREljQkN5QUJRUlZHRFQ4Z0FFRUFOZ0ljSUFBZ0REWUNGQ0FBUWN5T2dJQUFOZ0lRSUFCQklEWUNERUVBSVJBTWhnRUxJQUJCZ1FRN0FTZ2dBQ2dDQkNFUUlBQkNBRGNEQUNBQUlCQWdERUVCYWlJTUVLdUFnSUFBSWhCRkRUZ2dBRUhUQVRZQ0hDQUFJQXcyQWhRZ0FDQVFOZ0lNUVFBaEVBeUZBUXNnQUVFQU5nSUFDMEVBSVJBZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWRpYmdJQUFOZ0lRSUFCQkNEWUNEQXlEQVFzZ0FDZ0NCQ0VRSUFCQ0FEY0RBQ0FBSUJBZ0MwRUJhaUlMRUt1QWdJQUFJaEFOQVVIR0FTRVFER2tMSUFCQkFqb0FLQXhWQ3lBQVFkVUJOZ0ljSUFBZ0N6WUNGQ0FBSUJBMkFneEJBQ0VRRElBQkN5QVFRUlZHRFRjZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWFTTWdJQUFOZ0lRSUFCQkVEWUNERUVBSVJBTWZ3c2dBQzBBTkVFQlJ3MDBJQUFnQkNBQ0VMeUFnSUFBSWhCRkRUUWdFRUVWUncwMUlBQkIzQUUyQWh3Z0FDQUVOZ0lVSUFCQjFaYUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBeCtDMEVBSVJBZ0FFRUFOZ0ljSUFCQnI0dUFnQUEyQWhBZ0FFRUNOZ0lNSUFBZ0ZFRUJhallDRkF4OUMwRUFJUkFNWXd0QkFpRVFER0lMUVEwaEVBeGhDMEVQSVJBTVlBdEJKU0VRREY4TFFSTWhFQXhlQzBFVklSQU1YUXRCRmlFUURGd0xRUmNoRUF4YkMwRVlJUkFNV2d0QkdTRVFERmtMUVJvaEVBeFlDMEViSVJBTVZ3dEJIQ0VRREZZTFFSMGhFQXhWQzBFZklSQU1WQXRCSVNFUURGTUxRU01oRUF4U0MwSEdBQ0VRREZFTFFTNGhFQXhRQzBFdklSQU1Ud3RCT3lFUURFNExRVDBoRUF4TkMwSElBQ0VRREV3TFFja0FJUkFNU3d0Qnl3QWhFQXhLQzBITUFDRVFERWtMUWM0QUlSQU1TQXRCMFFBaEVBeEhDMEhWQUNFUURFWUxRZGdBSVJBTVJRdEIyUUFoRUF4RUMwSGJBQ0VRREVNTFFlUUFJUkFNUWd0QjVRQWhFQXhCQzBIeEFDRVFERUFMUWZRQUlSQU1Qd3RCalFFaEVBdytDMEdYQVNFUUREMExRYWtCSVJBTVBBdEJyQUVoRUF3N0MwSEFBU0VRRERvTFFia0JJUkFNT1F0QnJ3RWhFQXc0QzBHeEFTRVFERGNMUWJJQklSQU1OZ3RCdEFFaEVBdzFDMEcxQVNFUUREUUxRYm9CSVJBTU13dEJ2UUVoRUF3eUMwRy9BU0VRRERFTFFjRUJJUkFNTUFzZ0FFRUFOZ0ljSUFBZ0JEWUNGQ0FBUWVtTGdJQUFOZ0lRSUFCQkh6WUNERUVBSVJBTVNBc2dBRUhiQVRZQ0hDQUFJQVEyQWhRZ0FFSDZsb0NBQURZQ0VDQUFRUlUyQWd4QkFDRVFERWNMSUFCQitBQTJBaHdnQUNBTU5nSVVJQUJCeXBpQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF4R0N5QUFRZEVBTmdJY0lBQWdCVFlDRkNBQVFiQ1hnSUFBTmdJUUlBQkJGVFlDREVFQUlSQU1SUXNnQUVINUFEWUNIQ0FBSUFFMkFoUWdBQ0FRTmdJTVFRQWhFQXhFQ3lBQVFmZ0FOZ0ljSUFBZ0FUWUNGQ0FBUWNxWWdJQUFOZ0lRSUFCQkZUWUNERUVBSVJBTVF3c2dBRUhrQURZQ0hDQUFJQUUyQWhRZ0FFSGpsNENBQURZQ0VDQUFRUlUyQWd4QkFDRVFERUlMSUFCQjF3QTJBaHdnQUNBQk5nSVVJQUJCeVplQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF4QkN5QUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnVZMkFnQUEyQWhBZ0FFRWFOZ0lNUVFBaEVBeEFDeUFBUWNJQU5nSWNJQUFnQVRZQ0ZDQUFRZU9ZZ0lBQU5nSVFJQUJCRlRZQ0RFRUFJUkFNUHdzZ0FFRUFOZ0lFSUFBZ0R5QVBFTEdBZ0lBQUlnUkZEUUVnQUVFNk5nSWNJQUFnQkRZQ0RDQUFJQTlCQVdvMkFoUkJBQ0VRREQ0TElBQW9BZ1FoQkNBQVFRQTJBZ1FDUUNBQUlBUWdBUkN4Z0lDQUFDSUVSUTBBSUFCQk96WUNIQ0FBSUFRMkFnd2dBQ0FCUVFGcU5nSVVRUUFoRUF3K0N5QUJRUUZxSVFFTUxRc2dEMEVCYWlFQkRDMExJQUJCQURZQ0hDQUFJQTgyQWhRZ0FFSGtrb0NBQURZQ0VDQUFRUVEyQWd4QkFDRVFERHNMSUFCQk5qWUNIQ0FBSUFRMkFoUWdBQ0FDTmdJTVFRQWhFQXc2Q3lBQVFTNDJBaHdnQUNBT05nSVVJQUFnQkRZQ0RFRUFJUkFNT1FzZ0FFSFFBRFlDSENBQUlBRTJBaFFnQUVHUm1JQ0FBRFlDRUNBQVFSVTJBZ3hCQUNFUUREZ0xJQTFCQVdvaEFRd3NDeUFBUVJVMkFod2dBQ0FCTmdJVUlBQkJncG1BZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXcyQ3lBQVFSczJBaHdnQUNBQk5nSVVJQUJCa1plQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3MUN5QUFRUTgyQWh3Z0FDQUJOZ0lVSUFCQmtaZUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBdzBDeUFBUVFzMkFod2dBQ0FCTmdJVUlBQkJrWmVBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd6Q3lBQVFSbzJBaHdnQUNBQk5nSVVJQUJCZ3BtQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3eUN5QUFRUXMyQWh3Z0FDQUJOZ0lVSUFCQmdwbUFnQUEyQWhBZ0FFRVZOZ0lNUVFBaEVBd3hDeUFBUVFvMkFod2dBQ0FCTmdJVUlBQkI1SmFBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd3Q3lBQVFSNDJBaHdnQUNBQk5nSVVJQUJCK1plQWdBQTJBaEFnQUVFVk5nSU1RUUFoRUF3dkN5QUFRUUEyQWh3Z0FDQVFOZ0lVSUFCQjJvMkFnQUEyQWhBZ0FFRVVOZ0lNUVFBaEVBd3VDeUFBUVFRMkFod2dBQ0FCTmdJVUlBQkJzSmlBZ0FBMkFoQWdBRUVWTmdJTVFRQWhFQXd0Q3lBQVFRQTJBZ0FnQzBFQmFpRUxDMEc0QVNFUURCSUxJQUJCQURZQ0FDQVFRUUZxSVFGQjlRQWhFQXdSQ3lBQklRRUNRQ0FBTFFBcFFRVkhEUUJCNHdBaEVBd1JDMEhpQUNFUURCQUxRUUFoRUNBQVFRQTJBaHdnQUVIa2tZQ0FBRFlDRUNBQVFRYzJBZ3dnQUNBVVFRRnFOZ0lVRENnTElBQkJBRFlDQUNBWFFRRnFJUUZCd0FBaEVBd09DMEVCSVFFTElBQWdBVG9BTENBQVFRQTJBZ0FnRjBFQmFpRUJDMEVvSVJBTUN3c2dBU0VCQzBFNElSQU1DUXNDUUNBQklnOGdBa1lOQUFOQUFrQWdEeTBBQUVHQXZvQ0FBR290QUFBaUFVRUJSZzBBSUFGQkFrY05BeUFQUVFGcUlRRU1CQXNnRDBFQmFpSVBJQUpIRFFBTFFUNGhFQXdpQzBFK0lSQU1JUXNnQUVFQU9nQXNJQThoQVF3QkMwRUxJUkFNQmd0Qk9pRVFEQVVMSUFGQkFXb2hBVUV0SVJBTUJBc2dBQ0FCT2dBc0lBQkJBRFlDQUNBV1FRRnFJUUZCRENFUURBTUxJQUJCQURZQ0FDQVhRUUZxSVFGQkNpRVFEQUlMSUFCQkFEWUNBQXNnQUVFQU9nQXNJQTBoQVVFSklSQU1BQXNMUVFBaEVDQUFRUUEyQWh3Z0FDQUxOZ0lVSUFCQnpaQ0FnQUEyQWhBZ0FFRUpOZ0lNREJjTFFRQWhFQ0FBUVFBMkFod2dBQ0FLTmdJVUlBQkI2WXFBZ0FBMkFoQWdBRUVKTmdJTURCWUxRUUFoRUNBQVFRQTJBaHdnQUNBSk5nSVVJQUJCdDVDQWdBQTJBaEFnQUVFSk5nSU1EQlVMUVFBaEVDQUFRUUEyQWh3Z0FDQUlOZ0lVSUFCQm5KR0FnQUEyQWhBZ0FFRUpOZ0lNREJRTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJ6WkNBZ0FBMkFoQWdBRUVKTmdJTURCTUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCNllxQWdBQTJBaEFnQUVFSk5nSU1EQklMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnQ1Q0FnQUEyQWhBZ0FFRUpOZ0lNREJFTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJuSkdBZ0FBMkFoQWdBRUVKTmdJTURCQUxRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCbDVXQWdBQTJBaEFnQUVFUE5nSU1EQThMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQmw1V0FnQUEyQWhBZ0FFRVBOZ0lNREE0TFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkJ3SktBZ0FBMkFoQWdBRUVMTmdJTURBMExRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCbFltQWdBQTJBaEFnQUVFTE5nSU1EQXdMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQjRZK0FnQUEyQWhBZ0FFRUtOZ0lNREFzTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkIrNCtBZ0FBMkFoQWdBRUVLTmdJTURBb0xRUUFoRUNBQVFRQTJBaHdnQUNBQk5nSVVJQUJCOFptQWdBQTJBaEFnQUVFQ05nSU1EQWtMUVFBaEVDQUFRUUEyQWh3Z0FDQUJOZ0lVSUFCQnhKU0FnQUEyQWhBZ0FFRUNOZ0lNREFnTFFRQWhFQ0FBUVFBMkFod2dBQ0FCTmdJVUlBQkI4cFdBZ0FBMkFoQWdBRUVDTmdJTURBY0xJQUJCQWpZQ0hDQUFJQUUyQWhRZ0FFR2Ntb0NBQURZQ0VDQUFRUlkyQWd4QkFDRVFEQVlMUVFFaEVBd0ZDMEhVQUNFUUlBRWlCQ0FDUmcwRUlBTkJDR29nQUNBRUlBSkIyTUtBZ0FCQkNoREZnSUNBQUNBREtBSU1JUVFnQXlnQ0NBNERBUVFDQUFzUXlvQ0FnQUFBQ3lBQVFRQTJBaHdnQUVHMW1vQ0FBRFlDRUNBQVFSYzJBZ3dnQUNBRVFRRnFOZ0lVUVFBaEVBd0NDeUFBUVFBMkFod2dBQ0FFTmdJVUlBQkJ5cHFBZ0FBMkFoQWdBRUVKTmdJTVFRQWhFQXdCQ3dKQUlBRWlCQ0FDUncwQVFTSWhFQXdCQ3lBQVFZbUFnSUFBTmdJSUlBQWdCRFlDQkVFaElSQUxJQU5CRUdva2dJQ0FnQUFnRUF1dkFRRUNmeUFCS0FJQUlRWUNRQUpBSUFJZ0EwWU5BQ0FFSUFacUlRUWdCaUFEYWlBQ2F5RUhJQUlnQmtGL2N5QUZhaUlHYWlFRkEwQUNRQ0FDTFFBQUlBUXRBQUJHRFFCQkFpRUVEQU1MQWtBZ0JnMEFRUUFoQkNBRklRSU1Bd3NnQmtGL2FpRUdJQVJCQVdvaEJDQUNRUUZxSWdJZ0EwY05BQXNnQnlFR0lBTWhBZ3NnQUVFQk5nSUFJQUVnQmpZQ0FDQUFJQUkyQWdRUEN5QUJRUUEyQWdBZ0FDQUVOZ0lBSUFBZ0FqWUNCQXNLQUNBQUVNZUFnSUFBQy9JMkFRdC9JNENBZ0lBQVFSQnJJZ0VrZ0lDQWdBQUNRRUVBS0FLZzBJQ0FBQTBBUVFBUXk0Q0FnQUJCZ05TRWdBQnJJZ0pCMlFCSkRRQkJBQ0VEQWtCQkFDZ0M0Tk9BZ0FBaUJBMEFRUUJDZnpjQzdOT0FnQUJCQUVLQWdJU0FnSURBQURjQzVOT0FnQUJCQUNBQlFRaHFRWEJ4UWRpcTFhb0ZjeUlFTmdMZzA0Q0FBRUVBUVFBMkF2VFRnSUFBUVFCQkFEWUN4Tk9BZ0FBTFFRQWdBallDek5PQWdBQkJBRUdBMUlTQUFEWUN5Tk9BZ0FCQkFFR0ExSVNBQURZQ21OQ0FnQUJCQUNBRU5nS3MwSUNBQUVFQVFYODJBcWpRZ0lBQUEwQWdBMEhFMElDQUFHb2dBMEc0MElDQUFHb2lCRFlDQUNBRUlBTkJzTkNBZ0FCcUlnVTJBZ0FnQTBHODBJQ0FBR29nQlRZQ0FDQURRY3pRZ0lBQWFpQURRY0RRZ0lBQWFpSUZOZ0lBSUFVZ0JEWUNBQ0FEUWRUUWdJQUFhaUFEUWNqUWdJQUFhaUlFTmdJQUlBUWdCVFlDQUNBRFFkRFFnSUFBYWlBRU5nSUFJQU5CSUdvaUEwR0FBa2NOQUF0QmdOU0VnQUJCZUVHQTFJU0FBR3RCRDNGQkFFR0ExSVNBQUVFSWFrRVBjUnNpQTJvaUJFRUVhaUFDUVVocUlnVWdBMnNpQTBFQmNqWUNBRUVBUVFBb0F2RFRnSUFBTmdLazBJQ0FBRUVBSUFNMkFwVFFnSUFBUVFBZ0JEWUNvTkNBZ0FCQmdOU0VnQUFnQldwQk9EWUNCQXNDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQWdBRUhzQVVzTkFBSkFRUUFvQW9qUWdJQUFJZ1pCRUNBQVFSTnFRWEJ4SUFCQkMwa2JJZ0pCQTNZaUJIWWlBMEVEY1VVTkFBSkFBa0FnQTBFQmNTQUVja0VCY3lJRlFRTjBJZ1JCc05DQWdBQnFJZ01nQkVHNDBJQ0FBR29vQWdBaUJDZ0NDQ0lDUncwQVFRQWdCa0YrSUFWM2NUWUNpTkNBZ0FBTUFRc2dBeUFDTmdJSUlBSWdBellDREFzZ0JFRUlhaUVESUFRZ0JVRURkQ0lGUVFOeU5nSUVJQVFnQldvaUJDQUVLQUlFUVFGeU5nSUVEQXdMSUFKQkFDZ0NrTkNBZ0FBaUIwME5BUUpBSUFORkRRQUNRQUpBSUFNZ0JIUkJBaUFFZENJRFFRQWdBMnR5Y1NJRFFRQWdBMnR4UVg5cUlnTWdBMEVNZGtFUWNTSURkaUlFUVFWMlFRaHhJZ1VnQTNJZ0JDQUZkaUlEUVFKMlFRUnhJZ1J5SUFNZ0JIWWlBMEVCZGtFQ2NTSUVjaUFESUFSMklnTkJBWFpCQVhFaUJISWdBeUFFZG1vaUJFRURkQ0lEUWJEUWdJQUFhaUlGSUFOQnVOQ0FnQUJxS0FJQUlnTW9BZ2dpQUVjTkFFRUFJQVpCZmlBRWQzRWlCallDaU5DQWdBQU1BUXNnQlNBQU5nSUlJQUFnQlRZQ0RBc2dBeUFDUVFOeU5nSUVJQU1nQkVFRGRDSUVhaUFFSUFKcklnVTJBZ0FnQXlBQ2FpSUFJQVZCQVhJMkFnUUNRQ0FIUlEwQUlBZEJlSEZCc05DQWdBQnFJUUpCQUNnQ25OQ0FnQUFoQkFKQUFrQWdCa0VCSUFkQkEzWjBJZ2h4RFFCQkFDQUdJQWh5TmdLSTBJQ0FBQ0FDSVFnTUFRc2dBaWdDQ0NFSUN5QUlJQVEyQWd3Z0FpQUVOZ0lJSUFRZ0FqWUNEQ0FFSUFnMkFnZ0xJQU5CQ0dvaEEwRUFJQUEyQXB6UWdJQUFRUUFnQlRZQ2tOQ0FnQUFNREF0QkFDZ0NqTkNBZ0FBaUNVVU5BU0FKUVFBZ0NXdHhRWDlxSWdNZ0EwRU1ka0VRY1NJRGRpSUVRUVYyUVFoeElnVWdBM0lnQkNBRmRpSURRUUoyUVFSeElnUnlJQU1nQkhZaUEwRUJka0VDY1NJRWNpQURJQVIySWdOQkFYWkJBWEVpQkhJZ0F5QUVkbXBCQW5SQnVOS0FnQUJxS0FJQUlnQW9BZ1JCZUhFZ0Ftc2hCQ0FBSVFVQ1FBTkFBa0FnQlNnQ0VDSUREUUFnQlVFVWFpZ0NBQ0lEUlEwQ0N5QURLQUlFUVhoeElBSnJJZ1VnQkNBRklBUkpJZ1ViSVFRZ0F5QUFJQVViSVFBZ0F5RUZEQUFMQ3lBQUtBSVlJUW9DUUNBQUtBSU1JZ2dnQUVZTkFDQUFLQUlJSWdOQkFDZ0NtTkNBZ0FCSkdpQUlJQU0yQWdnZ0F5QUlOZ0lNREFzTEFrQWdBRUVVYWlJRktBSUFJZ01OQUNBQUtBSVFJZ05GRFFNZ0FFRVFhaUVGQ3dOQUlBVWhDeUFESWdoQkZHb2lCU2dDQUNJRERRQWdDRUVRYWlFRklBZ29BaEFpQXcwQUN5QUxRUUEyQWdBTUNndEJmeUVDSUFCQnYzOUxEUUFnQUVFVGFpSURRWEJ4SVFKQkFDZ0NqTkNBZ0FBaUIwVU5BRUVBSVFzQ1FDQUNRWUFDU1EwQVFSOGhDeUFDUWYvLy93ZExEUUFnQTBFSWRpSURJQU5CZ1A0L2FrRVFka0VJY1NJRGRDSUVJQVJCZ09BZmFrRVFka0VFY1NJRWRDSUZJQVZCZ0lBUGFrRVFka0VDY1NJRmRFRVBkaUFESUFSeUlBVnlheUlEUVFGMElBSWdBMEVWYW5aQkFYRnlRUnhxSVFzTFFRQWdBbXNoQkFKQUFrQUNRQUpBSUF0QkFuUkJ1TktBZ0FCcUtBSUFJZ1VOQUVFQUlRTkJBQ0VJREFFTFFRQWhBeUFDUVFCQkdTQUxRUUYyYXlBTFFSOUdHM1FoQUVFQUlRZ0RRQUpBSUFVb0FnUkJlSEVnQW1zaUJpQUVUdzBBSUFZaEJDQUZJUWdnQmcwQVFRQWhCQ0FGSVFnZ0JTRUREQU1MSUFNZ0JVRVVhaWdDQUNJR0lBWWdCU0FBUVIxMlFRUnhha0VRYWlnQ0FDSUZSaHNnQXlBR0d5RURJQUJCQVhRaEFDQUZEUUFMQ3dKQUlBTWdDSElOQUVFQUlRaEJBaUFMZENJRFFRQWdBMnR5SUFkeElnTkZEUU1nQTBFQUlBTnJjVUYvYWlJRElBTkJESFpCRUhFaUEzWWlCVUVGZGtFSWNTSUFJQU55SUFVZ0FIWWlBMEVDZGtFRWNTSUZjaUFESUFWMklnTkJBWFpCQW5FaUJYSWdBeUFGZGlJRFFRRjJRUUZ4SWdWeUlBTWdCWFpxUVFKMFFialNnSUFBYWlnQ0FDRURDeUFEUlEwQkN3TkFJQU1vQWdSQmVIRWdBbXNpQmlBRVNTRUFBa0FnQXlnQ0VDSUZEUUFnQTBFVWFpZ0NBQ0VGQ3lBR0lBUWdBQnNoQkNBRElBZ2dBQnNoQ0NBRklRTWdCUTBBQ3dzZ0NFVU5BQ0FFUVFBb0FwRFFnSUFBSUFKclR3MEFJQWdvQWhnaEN3SkFJQWdvQWd3aUFDQUlSZzBBSUFnb0FnZ2lBMEVBS0FLWTBJQ0FBRWthSUFBZ0F6WUNDQ0FESUFBMkFnd01DUXNDUUNBSVFSUnFJZ1VvQWdBaUF3MEFJQWdvQWhBaUEwVU5BeUFJUVJCcUlRVUxBMEFnQlNFR0lBTWlBRUVVYWlJRktBSUFJZ01OQUNBQVFSQnFJUVVnQUNnQ0VDSUREUUFMSUFaQkFEWUNBQXdJQ3dKQVFRQW9BcERRZ0lBQUlnTWdBa2tOQUVFQUtBS2MwSUNBQUNFRUFrQUNRQ0FESUFKcklnVkJFRWtOQUNBRUlBSnFJZ0FnQlVFQmNqWUNCRUVBSUFVMkFwRFFnSUFBUVFBZ0FEWUNuTkNBZ0FBZ0JDQURhaUFGTmdJQUlBUWdBa0VEY2pZQ0JBd0JDeUFFSUFOQkEzSTJBZ1FnQkNBRGFpSURJQU1vQWdSQkFYSTJBZ1JCQUVFQU5nS2MwSUNBQUVFQVFRQTJBcERRZ0lBQUN5QUVRUWhxSVFNTUNnc0NRRUVBS0FLVTBJQ0FBQ0lBSUFKTkRRQkJBQ2dDb05DQWdBQWlBeUFDYWlJRUlBQWdBbXNpQlVFQmNqWUNCRUVBSUFVMkFwVFFnSUFBUVFBZ0JEWUNvTkNBZ0FBZ0F5QUNRUU55TmdJRUlBTkJDR29oQXd3S0N3SkFBa0JCQUNnQzROT0FnQUJGRFFCQkFDZ0M2Tk9BZ0FBaEJBd0JDMEVBUW44M0F1elRnSUFBUVFCQ2dJQ0VnSUNBd0FBM0F1VFRnSUFBUVFBZ0FVRU1ha0Z3Y1VIWXF0V3FCWE0yQXVEVGdJQUFRUUJCQURZQzlOT0FnQUJCQUVFQU5nTEUwNENBQUVHQWdBUWhCQXRCQUNFREFrQWdCQ0FDUWNjQWFpSUhhaUlHUVFBZ0JHc2lDM0VpQ0NBQ1N3MEFRUUJCTURZQytOT0FnQUFNQ2dzQ1FFRUFLQUxBMDRDQUFDSURSUTBBQWtCQkFDZ0N1Tk9BZ0FBaUJDQUlhaUlGSUFSTkRRQWdCU0FEVFEwQkMwRUFJUU5CQUVFd05nTDQwNENBQUF3S0MwRUFMUURFMDRDQUFFRUVjUTBFQWtBQ1FBSkFRUUFvQXFEUWdJQUFJZ1JGRFFCQnlOT0FnQUFoQXdOQUFrQWdBeWdDQUNJRklBUkxEUUFnQlNBREtBSUVhaUFFU3cwREN5QURLQUlJSWdNTkFBc0xRUUFReTRDQWdBQWlBRUYvUmcwRklBZ2hCZ0pBUVFBb0F1VFRnSUFBSWdOQmYyb2lCQ0FBY1VVTkFDQUlJQUJySUFRZ0FHcEJBQ0FEYTNGcUlRWUxJQVlnQWswTkJTQUdRZjcvLy84SFN3MEZBa0JCQUNnQ3dOT0FnQUFpQTBVTkFFRUFLQUs0MDRDQUFDSUVJQVpxSWdVZ0JFME5CaUFGSUFOTERRWUxJQVlReTRDQWdBQWlBeUFBUncwQkRBY0xJQVlnQUdzZ0MzRWlCa0grLy8vL0Iwc05CQ0FHRU11QWdJQUFJZ0FnQXlnQ0FDQURLQUlFYWtZTkF5QUFJUU1MQWtBZ0EwRi9SZzBBSUFKQnlBQnFJQVpORFFBQ1FDQUhJQVpyUVFBb0F1alRnSUFBSWdScVFRQWdCR3R4SWdSQi92Ly8vd2RORFFBZ0F5RUFEQWNMQWtBZ0JCRExnSUNBQUVGL1JnMEFJQVFnQm1vaEJpQURJUUFNQnd0QkFDQUdheERMZ0lDQUFCb01CQXNnQXlFQUlBTkJmMGNOQlF3REMwRUFJUWdNQnd0QkFDRUFEQVVMSUFCQmYwY05BZ3RCQUVFQUtBTEUwNENBQUVFRWNqWUN4Tk9BZ0FBTElBaEIvdi8vL3dkTERRRWdDQkRMZ0lDQUFDRUFRUUFReTRDQWdBQWhBeUFBUVg5R0RRRWdBMEYvUmcwQklBQWdBMDhOQVNBRElBQnJJZ1lnQWtFNGFrME5BUXRCQUVFQUtBSzQwNENBQUNBR2FpSUROZ0s0MDRDQUFBSkFJQU5CQUNnQ3ZOT0FnQUJORFFCQkFDQUROZ0s4MDRDQUFBc0NRQUpBQWtBQ1FFRUFLQUtnMElDQUFDSUVSUTBBUWNqVGdJQUFJUU1EUUNBQUlBTW9BZ0FpQlNBREtBSUVJZ2hxUmcwQ0lBTW9BZ2dpQXcwQURBTUxDd0pBQWtCQkFDZ0NtTkNBZ0FBaUEwVU5BQ0FBSUFOUERRRUxRUUFnQURZQ21OQ0FnQUFMUVFBaEEwRUFJQVkyQXN6VGdJQUFRUUFnQURZQ3lOT0FnQUJCQUVGL05nS28wSUNBQUVFQVFRQW9BdURUZ0lBQU5nS3MwSUNBQUVFQVFRQTJBdFRUZ0lBQUEwQWdBMEhFMElDQUFHb2dBMEc0MElDQUFHb2lCRFlDQUNBRUlBTkJzTkNBZ0FCcUlnVTJBZ0FnQTBHODBJQ0FBR29nQlRZQ0FDQURRY3pRZ0lBQWFpQURRY0RRZ0lBQWFpSUZOZ0lBSUFVZ0JEWUNBQ0FEUWRUUWdJQUFhaUFEUWNqUWdJQUFhaUlFTmdJQUlBUWdCVFlDQUNBRFFkRFFnSUFBYWlBRU5nSUFJQU5CSUdvaUEwR0FBa2NOQUFzZ0FFRjRJQUJyUVE5eFFRQWdBRUVJYWtFUGNSc2lBMm9pQkNBR1FVaHFJZ1VnQTJzaUEwRUJjallDQkVFQVFRQW9BdkRUZ0lBQU5nS2swSUNBQUVFQUlBTTJBcFRRZ0lBQVFRQWdCRFlDb05DQWdBQWdBQ0FGYWtFNE5nSUVEQUlMSUFNdEFBeEJDSEVOQUNBRUlBVkpEUUFnQkNBQVR3MEFJQVJCZUNBRWEwRVBjVUVBSUFSQkNHcEJEM0ViSWdWcUlnQkJBQ2dDbE5DQWdBQWdCbW9pQ3lBRmF5SUZRUUZ5TmdJRUlBTWdDQ0FHYWpZQ0JFRUFRUUFvQXZEVGdJQUFOZ0trMElDQUFFRUFJQVUyQXBUUWdJQUFRUUFnQURZQ29OQ0FnQUFnQkNBTGFrRTROZ0lFREFFTEFrQWdBRUVBS0FLWTBJQ0FBQ0lJVHcwQVFRQWdBRFlDbU5DQWdBQWdBQ0VJQ3lBQUlBWnFJUVZCeU5PQWdBQWhBd0pBQWtBQ1FBSkFBa0FDUUFKQUEwQWdBeWdDQUNBRlJnMEJJQU1vQWdnaUF3MEFEQUlMQ3lBRExRQU1RUWh4UlEwQkMwSEkwNENBQUNFREEwQUNRQ0FES0FJQUlnVWdCRXNOQUNBRklBTW9BZ1JxSWdVZ0JFc05Bd3NnQXlnQ0NDRUREQUFMQ3lBRElBQTJBZ0FnQXlBREtBSUVJQVpxTmdJRUlBQkJlQ0FBYTBFUGNVRUFJQUJCQ0dwQkQzRWJhaUlMSUFKQkEzSTJBZ1FnQlVGNElBVnJRUTl4UVFBZ0JVRUlha0VQY1J0cUlnWWdDeUFDYWlJQ2F5RURBa0FnQmlBRVJ3MEFRUUFnQWpZQ29OQ0FnQUJCQUVFQUtBS1UwSUNBQUNBRGFpSUROZ0tVMElDQUFDQUNJQU5CQVhJMkFnUU1Bd3NDUUNBR1FRQW9BcHpRZ0lBQVJ3MEFRUUFnQWpZQ25OQ0FnQUJCQUVFQUtBS1EwSUNBQUNBRGFpSUROZ0tRMElDQUFDQUNJQU5CQVhJMkFnUWdBaUFEYWlBRE5nSUFEQU1MQWtBZ0JpZ0NCQ0lFUVFOeFFRRkhEUUFnQkVGNGNTRUhBa0FDUUNBRVFmOEJTdzBBSUFZb0FnZ2lCU0FFUVFOMklnaEJBM1JCc05DQWdBQnFJZ0JHR2dKQUlBWW9BZ3dpQkNBRlJ3MEFRUUJCQUNnQ2lOQ0FnQUJCZmlBSWQzRTJBb2pRZ0lBQURBSUxJQVFnQUVZYUlBUWdCVFlDQ0NBRklBUTJBZ3dNQVFzZ0JpZ0NHQ0VKQWtBQ1FDQUdLQUlNSWdBZ0JrWU5BQ0FHS0FJSUlnUWdDRWthSUFBZ0JEWUNDQ0FFSUFBMkFnd01BUXNDUUNBR1FSUnFJZ1FvQWdBaUJRMEFJQVpCRUdvaUJDZ0NBQ0lGRFFCQkFDRUFEQUVMQTBBZ0JDRUlJQVVpQUVFVWFpSUVLQUlBSWdVTkFDQUFRUkJxSVFRZ0FDZ0NFQ0lGRFFBTElBaEJBRFlDQUFzZ0NVVU5BQUpBQWtBZ0JpQUdLQUljSWdWQkFuUkJ1TktBZ0FCcUlnUW9BZ0JIRFFBZ0JDQUFOZ0lBSUFBTkFVRUFRUUFvQW96UWdJQUFRWDRnQlhkeE5nS00wSUNBQUF3Q0N5QUpRUkJCRkNBSktBSVFJQVpHRzJvZ0FEWUNBQ0FBUlEwQkN5QUFJQWsyQWhnQ1FDQUdLQUlRSWdSRkRRQWdBQ0FFTmdJUUlBUWdBRFlDR0FzZ0JpZ0NGQ0lFUlEwQUlBQkJGR29nQkRZQ0FDQUVJQUEyQWhnTElBY2dBMm9oQXlBR0lBZHFJZ1lvQWdRaEJBc2dCaUFFUVg1eE5nSUVJQUlnQTJvZ0F6WUNBQ0FDSUFOQkFYSTJBZ1FDUUNBRFFmOEJTdzBBSUFOQmVIRkJzTkNBZ0FCcUlRUUNRQUpBUVFBb0FvalFnSUFBSWdWQkFTQURRUU4yZENJRGNRMEFRUUFnQlNBRGNqWUNpTkNBZ0FBZ0JDRUREQUVMSUFRb0FnZ2hBd3NnQXlBQ05nSU1JQVFnQWpZQ0NDQUNJQVEyQWd3Z0FpQUROZ0lJREFNTFFSOGhCQUpBSUFOQi8vLy9CMHNOQUNBRFFRaDJJZ1FnQkVHQS9qOXFRUkIyUVFoeElnUjBJZ1VnQlVHQTRCOXFRUkIyUVFSeElnVjBJZ0FnQUVHQWdBOXFRUkIyUVFKeElnQjBRUTkySUFRZ0JYSWdBSEpySWdSQkFYUWdBeUFFUVJWcWRrRUJjWEpCSEdvaEJBc2dBaUFFTmdJY0lBSkNBRGNDRUNBRVFRSjBRYmpTZ0lBQWFpRUZBa0JCQUNnQ2pOQ0FnQUFpQUVFQklBUjBJZ2h4RFFBZ0JTQUNOZ0lBUVFBZ0FDQUljallDak5DQWdBQWdBaUFGTmdJWUlBSWdBallDQ0NBQ0lBSTJBZ3dNQXdzZ0EwRUFRUmtnQkVFQmRtc2dCRUVmUmh0MElRUWdCU2dDQUNFQUEwQWdBQ0lGS0FJRVFYaHhJQU5HRFFJZ0JFRWRkaUVBSUFSQkFYUWhCQ0FGSUFCQkJIRnFRUkJxSWdnb0FnQWlBQTBBQ3lBSUlBSTJBZ0FnQWlBRk5nSVlJQUlnQWpZQ0RDQUNJQUkyQWdnTUFnc2dBRUY0SUFCclFROXhRUUFnQUVFSWFrRVBjUnNpQTJvaUN5QUdRVWhxSWdnZ0Eyc2lBMEVCY2pZQ0JDQUFJQWhxUVRnMkFnUWdCQ0FGUVRjZ0JXdEJEM0ZCQUNBRlFVbHFRUTl4RzJwQlFXb2lDQ0FJSUFSQkVHcEpHeUlJUVNNMkFnUkJBRUVBS0FMdzA0Q0FBRFlDcE5DQWdBQkJBQ0FETmdLVTBJQ0FBRUVBSUFzMkFxRFFnSUFBSUFoQkVHcEJBQ2tDME5PQWdBQTNBZ0FnQ0VFQUtRTEkwNENBQURjQ0NFRUFJQWhCQ0dvMkF0RFRnSUFBUVFBZ0JqWUN6Tk9BZ0FCQkFDQUFOZ0xJMDRDQUFFRUFRUUEyQXRUVGdJQUFJQWhCSkdvaEF3TkFJQU5CQnpZQ0FDQURRUVJxSWdNZ0JVa05BQXNnQ0NBRVJnMERJQWdnQ0NnQ0JFRitjVFlDQkNBSUlBZ2dCR3NpQURZQ0FDQUVJQUJCQVhJMkFnUUNRQ0FBUWY4QlN3MEFJQUJCZUhGQnNOQ0FnQUJxSVFNQ1FBSkFRUUFvQW9qUWdJQUFJZ1ZCQVNBQVFRTjJkQ0lBY1EwQVFRQWdCU0FBY2pZQ2lOQ0FnQUFnQXlFRkRBRUxJQU1vQWdnaEJRc2dCU0FFTmdJTUlBTWdCRFlDQ0NBRUlBTTJBZ3dnQkNBRk5nSUlEQVFMUVI4aEF3SkFJQUJCLy8vL0Iwc05BQ0FBUVFoMklnTWdBMEdBL2o5cVFSQjJRUWh4SWdOMElnVWdCVUdBNEI5cVFSQjJRUVJ4SWdWMElnZ2dDRUdBZ0E5cVFSQjJRUUp4SWdoMFFROTJJQU1nQlhJZ0NISnJJZ05CQVhRZ0FDQURRUlZxZGtFQmNYSkJIR29oQXdzZ0JDQUROZ0ljSUFSQ0FEY0NFQ0FEUVFKMFFialNnSUFBYWlFRkFrQkJBQ2dDak5DQWdBQWlDRUVCSUFOMElnWnhEUUFnQlNBRU5nSUFRUUFnQ0NBR2NqWUNqTkNBZ0FBZ0JDQUZOZ0lZSUFRZ0JEWUNDQ0FFSUFRMkFnd01CQXNnQUVFQVFSa2dBMEVCZG1zZ0EwRWZSaHQwSVFNZ0JTZ0NBQ0VJQTBBZ0NDSUZLQUlFUVhoeElBQkdEUU1nQTBFZGRpRUlJQU5CQVhRaEF5QUZJQWhCQkhGcVFSQnFJZ1lvQWdBaUNBMEFDeUFHSUFRMkFnQWdCQ0FGTmdJWUlBUWdCRFlDRENBRUlBUTJBZ2dNQXdzZ0JTZ0NDQ0lESUFJMkFnd2dCU0FDTmdJSUlBSkJBRFlDR0NBQ0lBVTJBZ3dnQWlBRE5nSUlDeUFMUVFocUlRTU1CUXNnQlNnQ0NDSURJQVEyQWd3Z0JTQUVOZ0lJSUFSQkFEWUNHQ0FFSUFVMkFnd2dCQ0FETmdJSUMwRUFLQUtVMElDQUFDSURJQUpORFFCQkFDZ0NvTkNBZ0FBaUJDQUNhaUlGSUFNZ0Ftc2lBMEVCY2pZQ0JFRUFJQU0yQXBUUWdJQUFRUUFnQlRZQ29OQ0FnQUFnQkNBQ1FRTnlOZ0lFSUFSQkNHb2hBd3dEQzBFQUlRTkJBRUV3TmdMNDA0Q0FBQXdDQ3dKQUlBdEZEUUFDUUFKQUlBZ2dDQ2dDSENJRlFRSjBRYmpTZ0lBQWFpSURLQUlBUncwQUlBTWdBRFlDQUNBQURRRkJBQ0FIUVg0Z0JYZHhJZ2MyQW96UWdJQUFEQUlMSUF0QkVFRVVJQXNvQWhBZ0NFWWJhaUFBTmdJQUlBQkZEUUVMSUFBZ0N6WUNHQUpBSUFnb0FoQWlBMFVOQUNBQUlBTTJBaEFnQXlBQU5nSVlDeUFJUVJScUtBSUFJZ05GRFFBZ0FFRVVhaUFETmdJQUlBTWdBRFlDR0FzQ1FBSkFJQVJCRDBzTkFDQUlJQVFnQW1vaUEwRURjallDQkNBSUlBTnFJZ01nQXlnQ0JFRUJjallDQkF3QkN5QUlJQUpxSWdBZ0JFRUJjallDQkNBSUlBSkJBM0kyQWdRZ0FDQUVhaUFFTmdJQUFrQWdCRUgvQVVzTkFDQUVRWGh4UWJEUWdJQUFhaUVEQWtBQ1FFRUFLQUtJMElDQUFDSUZRUUVnQkVFRGRuUWlCSEVOQUVFQUlBVWdCSEkyQW9qUWdJQUFJQU1oQkF3QkN5QURLQUlJSVFRTElBUWdBRFlDRENBRElBQTJBZ2dnQUNBRE5nSU1JQUFnQkRZQ0NBd0JDMEVmSVFNQ1FDQUVRZi8vL3dkTERRQWdCRUVJZGlJRElBTkJnUDQvYWtFUWRrRUljU0lEZENJRklBVkJnT0FmYWtFUWRrRUVjU0lGZENJQ0lBSkJnSUFQYWtFUWRrRUNjU0lDZEVFUGRpQURJQVZ5SUFKeWF5SURRUUYwSUFRZ0EwRVZhblpCQVhGeVFSeHFJUU1MSUFBZ0F6WUNIQ0FBUWdBM0FoQWdBMEVDZEVHNDBvQ0FBR29oQlFKQUlBZEJBU0FEZENJQ2NRMEFJQVVnQURZQ0FFRUFJQWNnQW5JMkFvelFnSUFBSUFBZ0JUWUNHQ0FBSUFBMkFnZ2dBQ0FBTmdJTURBRUxJQVJCQUVFWklBTkJBWFpySUFOQkgwWWJkQ0VESUFVb0FnQWhBZ0pBQTBBZ0FpSUZLQUlFUVhoeElBUkdEUUVnQTBFZGRpRUNJQU5CQVhRaEF5QUZJQUpCQkhGcVFSQnFJZ1lvQWdBaUFnMEFDeUFHSUFBMkFnQWdBQ0FGTmdJWUlBQWdBRFlDRENBQUlBQTJBZ2dNQVFzZ0JTZ0NDQ0lESUFBMkFnd2dCU0FBTmdJSUlBQkJBRFlDR0NBQUlBVTJBZ3dnQUNBRE5nSUlDeUFJUVFocUlRTU1BUXNDUUNBS1JRMEFBa0FDUUNBQUlBQW9BaHdpQlVFQ2RFRzQwb0NBQUdvaUF5Z0NBRWNOQUNBRElBZzJBZ0FnQ0EwQlFRQWdDVUYrSUFWM2NUWUNqTkNBZ0FBTUFnc2dDa0VRUVJRZ0NpZ0NFQ0FBUmh0cUlBZzJBZ0FnQ0VVTkFRc2dDQ0FLTmdJWUFrQWdBQ2dDRUNJRFJRMEFJQWdnQXpZQ0VDQURJQWcyQWhnTElBQkJGR29vQWdBaUEwVU5BQ0FJUVJScUlBTTJBZ0FnQXlBSU5nSVlDd0pBQWtBZ0JFRVBTdzBBSUFBZ0JDQUNhaUlEUVFOeU5nSUVJQUFnQTJvaUF5QURLQUlFUVFGeU5nSUVEQUVMSUFBZ0Ftb2lCU0FFUVFGeU5nSUVJQUFnQWtFRGNqWUNCQ0FGSUFScUlBUTJBZ0FDUUNBSFJRMEFJQWRCZUhGQnNOQ0FnQUJxSVFKQkFDZ0NuTkNBZ0FBaEF3SkFBa0JCQVNBSFFRTjJkQ0lJSUFaeERRQkJBQ0FJSUFaeU5nS0kwSUNBQUNBQ0lRZ01BUXNnQWlnQ0NDRUlDeUFJSUFNMkFnd2dBaUFETmdJSUlBTWdBallDRENBRElBZzJBZ2dMUVFBZ0JUWUNuTkNBZ0FCQkFDQUVOZ0tRMElDQUFBc2dBRUVJYWlFREN5QUJRUkJxSklDQWdJQUFJQU1MQ2dBZ0FCREpnSUNBQUF2aURRRUhmd0pBSUFCRkRRQWdBRUY0YWlJQklBQkJmR29vQWdBaUFrRjRjU0lBYWlFREFrQWdBa0VCY1EwQUlBSkJBM0ZGRFFFZ0FTQUJLQUlBSWdKcklnRkJBQ2dDbU5DQWdBQWlCRWtOQVNBQ0lBQnFJUUFDUUNBQlFRQW9BcHpRZ0lBQVJnMEFBa0FnQWtIL0FVc05BQ0FCS0FJSUlnUWdBa0VEZGlJRlFRTjBRYkRRZ0lBQWFpSUdSaG9DUUNBQktBSU1JZ0lnQkVjTkFFRUFRUUFvQW9qUWdJQUFRWDRnQlhkeE5nS0kwSUNBQUF3REN5QUNJQVpHR2lBQ0lBUTJBZ2dnQkNBQ05nSU1EQUlMSUFFb0FoZ2hCd0pBQWtBZ0FTZ0NEQ0lHSUFGR0RRQWdBU2dDQ0NJQ0lBUkpHaUFHSUFJMkFnZ2dBaUFHTmdJTURBRUxBa0FnQVVFVWFpSUNLQUlBSWdRTkFDQUJRUkJxSWdJb0FnQWlCQTBBUVFBaEJnd0JDd05BSUFJaEJTQUVJZ1pCRkdvaUFpZ0NBQ0lFRFFBZ0JrRVFhaUVDSUFZb0FoQWlCQTBBQ3lBRlFRQTJBZ0FMSUFkRkRRRUNRQUpBSUFFZ0FTZ0NIQ0lFUVFKMFFialNnSUFBYWlJQ0tBSUFSdzBBSUFJZ0JqWUNBQ0FHRFFGQkFFRUFLQUtNMElDQUFFRitJQVIzY1RZQ2pOQ0FnQUFNQXdzZ0IwRVFRUlFnQnlnQ0VDQUJSaHRxSUFZMkFnQWdCa1VOQWdzZ0JpQUhOZ0lZQWtBZ0FTZ0NFQ0lDUlEwQUlBWWdBallDRUNBQ0lBWTJBaGdMSUFFb0FoUWlBa1VOQVNBR1FSUnFJQUkyQWdBZ0FpQUdOZ0lZREFFTElBTW9BZ1FpQWtFRGNVRURSdzBBSUFNZ0FrRitjVFlDQkVFQUlBQTJBcERRZ0lBQUlBRWdBR29nQURZQ0FDQUJJQUJCQVhJMkFnUVBDeUFCSUFOUERRQWdBeWdDQkNJQ1FRRnhSUTBBQWtBQ1FDQUNRUUp4RFFBQ1FDQURRUUFvQXFEUWdJQUFSdzBBUVFBZ0FUWUNvTkNBZ0FCQkFFRUFLQUtVMElDQUFDQUFhaUlBTmdLVTBJQ0FBQ0FCSUFCQkFYSTJBZ1FnQVVFQUtBS2MwSUNBQUVjTkEwRUFRUUEyQXBEUWdJQUFRUUJCQURZQ25OQ0FnQUFQQ3dKQUlBTkJBQ2dDbk5DQWdBQkhEUUJCQUNBQk5nS2MwSUNBQUVFQVFRQW9BcERRZ0lBQUlBQnFJZ0EyQXBEUWdJQUFJQUVnQUVFQmNqWUNCQ0FCSUFCcUlBQTJBZ0FQQ3lBQ1FYaHhJQUJxSVFBQ1FBSkFJQUpCL3dGTERRQWdBeWdDQ0NJRUlBSkJBM1lpQlVFRGRFR3cwSUNBQUdvaUJrWWFBa0FnQXlnQ0RDSUNJQVJIRFFCQkFFRUFLQUtJMElDQUFFRitJQVYzY1RZQ2lOQ0FnQUFNQWdzZ0FpQUdSaG9nQWlBRU5nSUlJQVFnQWpZQ0RBd0JDeUFES0FJWUlRY0NRQUpBSUFNb0Fnd2lCaUFEUmcwQUlBTW9BZ2dpQWtFQUtBS1kwSUNBQUVrYUlBWWdBallDQ0NBQ0lBWTJBZ3dNQVFzQ1FDQURRUlJxSWdJb0FnQWlCQTBBSUFOQkVHb2lBaWdDQUNJRURRQkJBQ0VHREFFTEEwQWdBaUVGSUFRaUJrRVVhaUlDS0FJQUlnUU5BQ0FHUVJCcUlRSWdCaWdDRUNJRURRQUxJQVZCQURZQ0FBc2dCMFVOQUFKQUFrQWdBeUFES0FJY0lnUkJBblJCdU5LQWdBQnFJZ0lvQWdCSERRQWdBaUFHTmdJQUlBWU5BVUVBUVFBb0FvelFnSUFBUVg0Z0JIZHhOZ0tNMElDQUFBd0NDeUFIUVJCQkZDQUhLQUlRSUFOR0cyb2dCallDQUNBR1JRMEJDeUFHSUFjMkFoZ0NRQ0FES0FJUUlnSkZEUUFnQmlBQ05nSVFJQUlnQmpZQ0dBc2dBeWdDRkNJQ1JRMEFJQVpCRkdvZ0FqWUNBQ0FDSUFZMkFoZ0xJQUVnQUdvZ0FEWUNBQ0FCSUFCQkFYSTJBZ1FnQVVFQUtBS2MwSUNBQUVjTkFVRUFJQUEyQXBEUWdJQUFEd3NnQXlBQ1FYNXhOZ0lFSUFFZ0FHb2dBRFlDQUNBQklBQkJBWEkyQWdRTEFrQWdBRUgvQVVzTkFDQUFRWGh4UWJEUWdJQUFhaUVDQWtBQ1FFRUFLQUtJMElDQUFDSUVRUUVnQUVFRGRuUWlBSEVOQUVFQUlBUWdBSEkyQW9qUWdJQUFJQUloQUF3QkN5QUNLQUlJSVFBTElBQWdBVFlDRENBQ0lBRTJBZ2dnQVNBQ05nSU1JQUVnQURZQ0NBOExRUjhoQWdKQUlBQkIvLy8vQjBzTkFDQUFRUWgySWdJZ0FrR0EvajlxUVJCMlFRaHhJZ0owSWdRZ0JFR0E0QjlxUVJCMlFRUnhJZ1IwSWdZZ0JrR0FnQTlxUVJCMlFRSnhJZ1owUVE5MklBSWdCSElnQm5KcklnSkJBWFFnQUNBQ1FSVnFka0VCY1hKQkhHb2hBZ3NnQVNBQ05nSWNJQUZDQURjQ0VDQUNRUUowUWJqU2dJQUFhaUVFQWtBQ1FFRUFLQUtNMElDQUFDSUdRUUVnQW5RaUEzRU5BQ0FFSUFFMkFnQkJBQ0FHSUFOeU5nS00wSUNBQUNBQklBUTJBaGdnQVNBQk5nSUlJQUVnQVRZQ0RBd0JDeUFBUVFCQkdTQUNRUUYyYXlBQ1FSOUdHM1FoQWlBRUtBSUFJUVlDUUFOQUlBWWlCQ2dDQkVGNGNTQUFSZzBCSUFKQkhYWWhCaUFDUVFGMElRSWdCQ0FHUVFSeGFrRVFhaUlES0FJQUlnWU5BQXNnQXlBQk5nSUFJQUVnQkRZQ0dDQUJJQUUyQWd3Z0FTQUJOZ0lJREFFTElBUW9BZ2dpQUNBQk5nSU1JQVFnQVRZQ0NDQUJRUUEyQWhnZ0FTQUVOZ0lNSUFFZ0FEWUNDQXRCQUVFQUtBS28wSUNBQUVGL2FpSUJRWDhnQVJzMkFxalFnSUFBQ3dzRUFBQUFDMDRBQWtBZ0FBMEFQd0JCRUhRUEN3SkFJQUJCLy84RGNRMEFJQUJCZjB3TkFBSkFJQUJCRUhaQUFDSUFRWDlIRFFCQkFFRXdOZ0w0MDRDQUFFRi9Ed3NnQUVFUWRBOExFTXFBZ0lBQUFBdnlBZ0lEZndGK0FrQWdBa1VOQUNBQUlBRTZBQUFnQWlBQWFpSURRWDlxSUFFNkFBQWdBa0VEU1EwQUlBQWdBVG9BQWlBQUlBRTZBQUVnQTBGOWFpQUJPZ0FBSUFOQmZtb2dBVG9BQUNBQ1FRZEpEUUFnQUNBQk9nQURJQU5CZkdvZ0FUb0FBQ0FDUVFsSkRRQWdBRUVBSUFCclFRTnhJZ1JxSWdNZ0FVSC9BWEZCZ1lLRUNHd2lBVFlDQUNBRElBSWdCR3RCZkhFaUJHb2lBa0Y4YWlBQk5nSUFJQVJCQ1VrTkFDQURJQUUyQWdnZ0F5QUJOZ0lFSUFKQmVHb2dBVFlDQUNBQ1FYUnFJQUUyQWdBZ0JFRVpTUTBBSUFNZ0FUWUNHQ0FESUFFMkFoUWdBeUFCTmdJUUlBTWdBVFlDRENBQ1FYQnFJQUUyQWdBZ0FrRnNhaUFCTmdJQUlBSkJhR29nQVRZQ0FDQUNRV1JxSUFFMkFnQWdCQ0FEUVFSeFFSaHlJZ1ZySWdKQklFa05BQ0FCclVLQmdJQ0FFSDRoQmlBRElBVnFJUUVEUUNBQklBWTNBeGdnQVNBR053TVFJQUVnQmpjRENDQUJJQVkzQXdBZ0FVRWdhaUVCSUFKQllHb2lBa0VmU3cwQUN3c2dBQXNMamtnQkFFR0FDQXVHU0FFQUFBQUNBQUFBQXdBQUFBQUFBQUFBQUFBQUJBQUFBQVVBQUFBQUFBQUFBQUFBQUFZQUFBQUhBQUFBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVNXNTJZV3hwWkNCamFHRnlJR2x1SUhWeWJDQnhkV1Z5ZVFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDJKdlpIa0FRMjl1ZEdWdWRDMU1aVzVuZEdnZ2IzWmxjbVpzYjNjQVEyaDFibXNnYzJsNlpTQnZkbVZ5Wm14dmR3QlNaWE53YjI1elpTQnZkbVZ5Wm14dmR3QkpiblpoYkdsa0lHMWxkR2h2WkNCbWIzSWdTRlJVVUM5NExuZ2djbVZ4ZFdWemRBQkpiblpoYkdsa0lHMWxkR2h2WkNCbWIzSWdVbFJUVUM5NExuZ2djbVZ4ZFdWemRBQkZlSEJsWTNSbFpDQlRUMVZTUTBVZ2JXVjBhRzlrSUdadmNpQkpRMFV2ZUM1NElISmxjWFZsYzNRQVNXNTJZV3hwWkNCamFHRnlJR2x1SUhWeWJDQm1jbUZuYldWdWRDQnpkR0Z5ZEFCRmVIQmxZM1JsWkNCa2IzUUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOXpkR0YwZFhNQVNXNTJZV3hwWkNCeVpYTndiMjV6WlNCemRHRjBkWE1BU1c1MllXeHBaQ0JqYUdGeVlXTjBaWElnYVc0Z1kyaDFibXNnWlhoMFpXNXphVzl1Y3dCVmMyVnlJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDl5WlhObGRHQWdZMkZzYkdKaFkyc2daWEp5YjNJQVlHOXVYMk5vZFc1clgyaGxZV1JsY21BZ1kyRnNiR0poWTJzZ1pYSnliM0lBWUc5dVgyMWxjM05oWjJWZlltVm5hVzVnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5amFIVnVhMTlsZUhSbGJuTnBiMjVmZG1Gc2RXVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDl6ZEdGMGRYTmZZMjl0Y0d4bGRHVmdJR05oYkd4aVlXTnJJR1Z5Y205eUFHQnZibDkyWlhKemFXOXVYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmZFhKc1gyTnZiWEJzWlhSbFlDQmpZV3hzWW1GamF5Qmxjbkp2Y2dCZ2IyNWZZMmgxYm10ZlkyOXRjR3hsZEdWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUdCdmJsOW9aV0ZrWlhKZmRtRnNkV1ZmWTI5dGNHeGxkR1ZnSUdOaGJHeGlZV05ySUdWeWNtOXlBR0J2Ymw5dFpYTnpZV2RsWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmJXVjBhRzlrWDJOdmJYQnNaWFJsWUNCallXeHNZbUZqYXlCbGNuSnZjZ0JnYjI1ZmFHVmhaR1Z5WDJacFpXeGtYMk52YlhCc1pYUmxZQ0JqWVd4c1ltRmpheUJsY25KdmNnQmdiMjVmWTJoMWJtdGZaWGgwWlc1emFXOXVYMjVoYldWZ0lHTmhiR3hpWVdOcklHVnljbTl5QUZWdVpYaHdaV04wWldRZ1kyaGhjaUJwYmlCMWNtd2djMlZ5ZG1WeUFFbHVkbUZzYVdRZ2FHVmhaR1Z5SUhaaGJIVmxJR05vWVhJQVNXNTJZV3hwWkNCb1pXRmtaWElnWm1sbGJHUWdZMmhoY2dCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDNabGNuTnBiMjRBU1c1MllXeHBaQ0J0YVc1dmNpQjJaWEp6YVc5dUFFbHVkbUZzYVdRZ2JXRnFiM0lnZG1WeWMybHZiZ0JGZUhCbFkzUmxaQ0J6Y0dGalpTQmhablJsY2lCMlpYSnphVzl1QUVWNGNHVmpkR1ZrSUVOU1RFWWdZV1owWlhJZ2RtVnljMmx2YmdCSmJuWmhiR2xrSUVoVVZGQWdkbVZ5YzJsdmJnQkpiblpoYkdsa0lHaGxZV1JsY2lCMGIydGxiZ0JUY0dGdUlHTmhiR3hpWVdOcklHVnljbTl5SUdsdUlHOXVYM1Z5YkFCSmJuWmhiR2xrSUdOb1lYSmhZM1JsY25NZ2FXNGdkWEpzQUZWdVpYaHdaV04wWldRZ2MzUmhjblFnWTJoaGNpQnBiaUIxY213QVJHOTFZbXhsSUVBZ2FXNGdkWEpzQUVWdGNIUjVJRU52Ym5SbGJuUXRUR1Z1WjNSb0FFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJRU52Ym5SbGJuUXRUR1Z1WjNSb0FFUjFjR3hwWTJGMFpTQkRiMjUwWlc1MExVeGxibWQwYUFCSmJuWmhiR2xrSUdOb1lYSWdhVzRnZFhKc0lIQmhkR2dBUTI5dWRHVnVkQzFNWlc1bmRHZ2dZMkZ1SjNRZ1ltVWdjSEpsYzJWdWRDQjNhWFJvSUZSeVlXNXpabVZ5TFVWdVkyOWthVzVuQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUhOcGVtVUFVM0JoYmlCallXeHNZbUZqYXlCbGNuSnZjaUJwYmlCdmJsOW9aV0ZrWlhKZmRtRnNkV1VBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDlqYUhWdWExOWxlSFJsYm5OcGIyNWZkbUZzZFdVQVNXNTJZV3hwWkNCamFHRnlZV04wWlhJZ2FXNGdZMmgxYm1zZ1pYaDBaVzV6YVc5dWN5QjJZV3gxWlFCTmFYTnphVzVuSUdWNGNHVmpkR1ZrSUV4R0lHRm1kR1Z5SUdobFlXUmxjaUIyWVd4MVpRQkpiblpoYkdsa0lHQlVjbUZ1YzJabGNpMUZibU52WkdsdVoyQWdhR1ZoWkdWeUlIWmhiSFZsQUVsdWRtRnNhV1FnWTJoaGNtRmpkR1Z5SUdsdUlHTm9kVzVySUdWNGRHVnVjMmx2Ym5NZ2NYVnZkR1VnZG1Gc2RXVUFTVzUyWVd4cFpDQmphR0Z5WVdOMFpYSWdhVzRnWTJoMWJtc2daWGgwWlc1emFXOXVjeUJ4ZFc5MFpXUWdkbUZzZFdVQVVHRjFjMlZrSUdKNUlHOXVYMmhsWVdSbGNuTmZZMjl0Y0d4bGRHVUFTVzUyWVd4cFpDQkZUMFlnYzNSaGRHVUFiMjVmY21WelpYUWdjR0YxYzJVQWIyNWZZMmgxYm10ZmFHVmhaR1Z5SUhCaGRYTmxBRzl1WDIxbGMzTmhaMlZmWW1WbmFXNGdjR0YxYzJVQWIyNWZZMmgxYm10ZlpYaDBaVzV6YVc5dVgzWmhiSFZsSUhCaGRYTmxBRzl1WDNOMFlYUjFjMTlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDkyWlhKemFXOXVYMk52YlhCc1pYUmxJSEJoZFhObEFHOXVYM1Z5YkY5amIyMXdiR1YwWlNCd1lYVnpaUUJ2Ymw5amFIVnVhMTlqYjIxd2JHVjBaU0J3WVhWelpRQnZibDlvWldGa1pYSmZkbUZzZFdWZlkyOXRjR3hsZEdVZ2NHRjFjMlVBYjI1ZmJXVnpjMkZuWlY5amIyMXdiR1YwWlNCd1lYVnpaUUJ2Ymw5dFpYUm9iMlJmWTI5dGNHeGxkR1VnY0dGMWMyVUFiMjVmYUdWaFpHVnlYMlpwWld4a1gyTnZiWEJzWlhSbElIQmhkWE5sQUc5dVgyTm9kVzVyWDJWNGRHVnVjMmx2Ymw5dVlXMWxJSEJoZFhObEFGVnVaWGh3WldOMFpXUWdjM0JoWTJVZ1lXWjBaWElnYzNSaGNuUWdiR2x1WlFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDJOb2RXNXJYMlY0ZEdWdWMybHZibDl1WVcxbEFFbHVkbUZzYVdRZ1kyaGhjbUZqZEdWeUlHbHVJR05vZFc1cklHVjRkR1Z1YzJsdmJuTWdibUZ0WlFCUVlYVnpaU0J2YmlCRFQwNU9SVU5VTDFWd1ozSmhaR1VBVUdGMWMyVWdiMjRnVUZKSkwxVndaM0poWkdVQVJYaHdaV04wWldRZ1NGUlVVQzh5SUVOdmJtNWxZM1JwYjI0Z1VISmxabUZqWlFCVGNHRnVJR05oYkd4aVlXTnJJR1Z5Y205eUlHbHVJRzl1WDIxbGRHaHZaQUJGZUhCbFkzUmxaQ0J6Y0dGalpTQmhablJsY2lCdFpYUm9iMlFBVTNCaGJpQmpZV3hzWW1GamF5Qmxjbkp2Y2lCcGJpQnZibDlvWldGa1pYSmZabWxsYkdRQVVHRjFjMlZrQUVsdWRtRnNhV1FnZDI5eVpDQmxibU52ZFc1MFpYSmxaQUJKYm5aaGJHbGtJRzFsZEdodlpDQmxibU52ZFc1MFpYSmxaQUJWYm1WNGNHVmpkR1ZrSUdOb1lYSWdhVzRnZFhKc0lITmphR1Z0WVFCU1pYRjFaWE4wSUdoaGN5QnBiblpoYkdsa0lHQlVjbUZ1YzJabGNpMUZibU52WkdsdVoyQUFVMWRKVkVOSVgxQlNUMWhaQUZWVFJWOVFVazlZV1FCTlMwRkRWRWxXU1ZSWkFGVk9VRkpQUTBWVFUwRkNURVZmUlU1VVNWUlpBRU5QVUZrQVRVOVdSVVJmVUVWU1RVRk9SVTVVVEZrQVZFOVBYMFZCVWt4WkFFNVBWRWxHV1FCR1FVbE1SVVJmUkVWUVJVNUVSVTVEV1FCQ1FVUmZSMEZVUlZkQldRQlFURUZaQUZCVlZBQkRTRVZEUzA5VlZBQkhRVlJGVjBGWlgxUkpUVVZQVlZRQVVrVlJWVVZUVkY5VVNVMUZUMVZVQUU1RlZGZFBVa3RmUTA5T1RrVkRWRjlVU1UxRlQxVlVBRU5QVGs1RlExUkpUMDVmVkVsTlJVOVZWQUJNVDBkSlRsOVVTVTFGVDFWVUFFNUZWRmRQVWt0ZlVrVkJSRjlVU1UxRlQxVlVBRkJQVTFRQVRVbFRSRWxTUlVOVVJVUmZVa1ZSVlVWVFZBQkRURWxGVGxSZlEweFBVMFZFWDFKRlVWVkZVMVFBUTB4SlJVNVVYME5NVDFORlJGOU1UMEZFWDBKQlRFRk9RMFZFWDFKRlVWVkZVMVFBUWtGRVgxSkZVVlZGVTFRQVNGUlVVRjlTUlZGVlJWTlVYMU5GVGxSZlZFOWZTRlJVVUZOZlVFOVNWQUJTUlZCUFVsUUFTVTFmUVY5VVJVRlFUMVFBVWtWVFJWUmZRMDlPVkVWT1ZBQk9UMTlEVDA1VVJVNVVBRkJCVWxSSlFVeGZRMDlPVkVWT1ZBQklVRVZmU1U1V1FVeEpSRjlEVDA1VFZFRk9WQUJJVUVWZlEwSmZVa1ZUUlZRQVIwVlVBRWhRUlY5VFZGSkpRMVFBUTA5T1JreEpRMVFBVkVWTlVFOVNRVkpaWDFKRlJFbFNSVU5VQUZCRlVrMUJUa1ZPVkY5U1JVUkpVa1ZEVkFCRFQwNU9SVU5VQUUxVlRGUkpYMU5VUVZSVlV3QklVRVZmU1U1V1FVeEpSRjlUVkVGVVZWTUFWRTlQWDAxQlRsbGZVa1ZSVlVWVFZGTUFSVUZTVEZsZlNFbE9WRk1BVlU1QlZrRkpURUZDVEVWZlJrOVNYMHhGUjBGTVgxSkZRVk5QVGxNQVQxQlVTVTlPVXdCVFYwbFVRMGhKVGtkZlVGSlBWRTlEVDB4VEFGWkJVa2xCVGxSZlFVeFRUMTlPUlVkUFZFbEJWRVZUQUUxVlRGUkpVRXhGWDBOSVQwbERSVk1BU1U1VVJWSk9RVXhmVTBWU1ZrVlNYMFZTVWs5U0FGZEZRbDlUUlZKV1JWSmZWVTVMVGs5WFRsOUZVbEpQVWdCU1FVbE1SMVZPWDBWU1VrOVNBRWxFUlU1VVNWUlpYMUJTVDFaSlJFVlNYMEZWVkVoRlRsUkpRMEZVU1U5T1gwVlNVazlTQUZOVFRGOURSVkpVU1VaSlEwRlVSVjlGVWxKUFVnQkpUbFpCVEVsRVgxaGZSazlTVjBGU1JFVkVYMFpQVWdCVFJWUmZVRUZTUVUxRlZFVlNBRWRGVkY5UVFWSkJUVVZVUlZJQVNGQkZYMVZUUlZJQVUwVkZYMDlVU0VWU0FFaFFSVjlEUWw5RFNGVk9TMTlJUlVGRVJWSUFUVXREUVV4RlRrUkJVZ0JUUlZSVlVBQlhSVUpmVTBWU1ZrVlNYMGxUWDBSUFYwNEFWRVZCVWtSUFYwNEFTRkJGWDBOTVQxTkZSRjlEVDA1T1JVTlVTVTlPQUVoRlZWSkpVMVJKUTE5RldGQkpVa0ZVU1U5T0FFUkpVME5QVGs1RlExUkZSRjlQVUVWU1FWUkpUMDRBVGs5T1gwRlZWRWhQVWtsVVFWUkpWa1ZmU1U1R1QxSk5RVlJKVDA0QVNGQkZYMGxPVmtGTVNVUmZWa1ZTVTBsUFRnQklVRVZmUTBKZlRVVlRVMEZIUlY5Q1JVZEpUZ0JUU1ZSRlgwbFRYMFpTVDFwRlRnQklVRVZmU1U1V1FVeEpSRjlJUlVGRVJWSmZWRTlMUlU0QVNVNVdRVXhKUkY5VVQwdEZUZ0JHVDFKQ1NVUkVSVTRBUlU1SVFVNURSVjlaVDFWU1gwTkJURTBBU0ZCRlgwbE9Wa0ZNU1VSZlZWSk1BRUpNVDBOTFJVUmZRbGxmVUVGU1JVNVVRVXhmUTA5T1ZGSlBUQUJOUzBOUFRBQkJRMHdBU0ZCRlgwbE9WRVZTVGtGTUFGSkZVVlZGVTFSZlNFVkJSRVZTWDBaSlJVeEVVMTlVVDA5ZlRFRlNSMFZmVlU1UFJrWkpRMGxCVEFCSVVFVmZUMHNBVlU1TVNVNUxBRlZPVEU5RFN3QlFVa2tBVWtWVVVsbGZWMGxVU0FCSVVFVmZTVTVXUVV4SlJGOURUMDVVUlU1VVgweEZUa2RVU0FCSVVFVmZWVTVGV0ZCRlExUkZSRjlEVDA1VVJVNVVYMHhGVGtkVVNBQkdURlZUU0FCUVVrOVFVRUZVUTBnQVRTMVRSVUZTUTBnQVZWSkpYMVJQVDE5TVQwNUhBRkJTVDBORlUxTkpUa2NBVFVsVFEwVk1URUZPUlU5VlUxOVFSVkpUU1ZOVVJVNVVYMWRCVWs1SlRrY0FUVWxUUTBWTVRFRk9SVTlWVTE5WFFWSk9TVTVIQUVoUVJWOUpUbFpCVEVsRVgxUlNRVTVUUmtWU1gwVk9RMDlFU1U1SEFFVjRjR1ZqZEdWa0lFTlNURVlBU0ZCRlgwbE9Wa0ZNU1VSZlEwaFZUa3RmVTBsYVJRQk5UMVpGQUVOUFRsUkpUbFZGQUVoUVJWOURRbDlUVkVGVVZWTmZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwaEZRVVJGVWxOZlEwOU5VRXhGVkVVQVNGQkZYME5DWDFaRlVsTkpUMDVmUTA5TlVFeEZWRVVBU0ZCRlgwTkNYMVZTVEY5RFQwMVFURVZVUlFCSVVFVmZRMEpmUTBoVlRrdGZRMDlOVUV4RlZFVUFTRkJGWDBOQ1gwaEZRVVJGVWw5V1FVeFZSVjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZRMGhWVGt0ZlJWaFVSVTVUU1U5T1gxWkJURlZGWDBOUFRWQk1SVlJGQUVoUVJWOURRbDlEU0ZWT1MxOUZXRlJGVGxOSlQwNWZUa0ZOUlY5RFQwMVFURVZVUlFCSVVFVmZRMEpmVFVWVFUwRkhSVjlEVDAxUVRFVlVSUUJJVUVWZlEwSmZUVVZVU0U5RVgwTlBUVkJNUlZSRkFFaFFSVjlEUWw5SVJVRkVSVkpmUmtsRlRFUmZRMDlOVUV4RlZFVUFSRVZNUlZSRkFFaFFSVjlKVGxaQlRFbEVYMFZQUmw5VFZFRlVSUUJKVGxaQlRFbEVYMU5UVEY5RFJWSlVTVVpKUTBGVVJRQlFRVlZUUlFCT1QxOVNSVk5RVDA1VFJRQlZUbE5WVUZCUFVsUkZSRjlOUlVSSlFWOVVXVkJGQUVkUFRrVUFUazlVWDBGRFEwVlFWRUZDVEVVQVUwVlNWa2xEUlY5VlRrRldRVWxNUVVKTVJRQlNRVTVIUlY5T1QxUmZVMEZVU1ZOR1NVRkNURVVBVDFKSlIwbE9YMGxUWDFWT1VrVkJRMGhCUWt4RkFGSkZVMUJQVGxORlgwbFRYMU5VUVV4RkFGQlZVa2RGQUUxRlVrZEZBRkpGVVZWRlUxUmZTRVZCUkVWU1gwWkpSVXhFVTE5VVQwOWZURUZTUjBVQVVrVlJWVVZUVkY5SVJVRkVSVkpmVkU5UFgweEJVa2RGQUZCQldVeFBRVVJmVkU5UFgweEJVa2RGQUVsT1UxVkdSa2xEU1VWT1ZGOVRWRTlTUVVkRkFFaFFSVjlRUVZWVFJVUmZWVkJIVWtGRVJRQklVRVZmVUVGVlUwVkVYMGd5WDFWUVIxSkJSRVVBVTA5VlVrTkZBRUZPVGs5VlRrTkZBRlJTUVVORkFFaFFSVjlWVGtWWVVFVkRWRVZFWDFOUVFVTkZBRVJGVTBOU1NVSkZBRlZPVTFWQ1UwTlNTVUpGQUZKRlEwOVNSQUJJVUVWZlNVNVdRVXhKUkY5TlJWUklUMFFBVGs5VVgwWlBWVTVFQUZCU1QxQkdTVTVFQUZWT1FrbE9SQUJTUlVKSlRrUUFWVTVCVlZSSVQxSkpXa1ZFQUUxRlZFaFBSRjlPVDFSZlFVeE1UMWRGUkFCSVZGUlFYMVpGVWxOSlQwNWZUazlVWDFOVlVGQlBVbFJGUkFCQlRGSkZRVVJaWDFKRlVFOVNWRVZFQUVGRFEwVlFWRVZFQUU1UFZGOUpUVkJNUlUxRlRsUkZSQUJNVDA5UVgwUkZWRVZEVkVWRUFFaFFSVjlEVWw5RldGQkZRMVJGUkFCSVVFVmZURVpmUlZoUVJVTlVSVVFBUTFKRlFWUkZSQUJKVFY5VlUwVkVBRWhRUlY5UVFWVlRSVVFBVkVsTlJVOVZWRjlQUTBOVlVrVkVBRkJCV1UxRlRsUmZVa1ZSVlVsU1JVUUFVRkpGUTA5T1JFbFVTVTlPWDFKRlVWVkpVa1ZFQUZCU1QxaFpYMEZWVkVoRlRsUkpRMEZVU1U5T1gxSkZVVlZKVWtWRUFFNUZWRmRQVWt0ZlFWVlVTRVZPVkVsRFFWUkpUMDVmVWtWUlZVbFNSVVFBVEVWT1IxUklYMUpGVVZWSlVrVkVBRk5UVEY5RFJWSlVTVVpKUTBGVVJWOVNSVkZWU1ZKRlJBQlZVRWRTUVVSRlgxSkZVVlZKVWtWRUFGQkJSMFZmUlZoUVNWSkZSQUJRVWtWRFQwNUVTVlJKVDA1ZlJrRkpURVZFQUVWWVVFVkRWRUZVU1U5T1gwWkJTVXhGUkFCU1JWWkJURWxFUVZSSlQwNWZSa0ZKVEVWRUFGTlRURjlJUVU1RVUwaEJTMFZmUmtGSlRFVkVBRXhQUTB0RlJBQlVVa0ZPVTBaUFVrMUJWRWxQVGw5QlVGQk1TVVZFQUU1UFZGOU5UMFJKUmtsRlJBQk9UMVJmUlZoVVJVNUVSVVFBUWtGT1JGZEpSRlJJWDB4SlRVbFVYMFZZUTBWRlJFVkVBRk5KVkVWZlNWTmZUMVpGVWt4UFFVUkZSQUJJUlVGRUFFVjRjR1ZqZEdWa0lFaFVWRkF2QUFCZUV3QUFKaE1BQURBUUFBRHdGd0FBblJNQUFCVVNBQUE1RndBQThCSUFBQW9RQUFCMUVnQUFyUklBQUlJVEFBQlBGQUFBZnhBQUFLQVZBQUFqRkFBQWlSSUFBSXNVQUFCTkZRQUExQkVBQU04VUFBQVFHQUFBeVJZQUFOd1dBQURCRVFBQTRCY0FBTHNVQUFCMEZBQUFmQlVBQU9VVUFBQUlGd0FBSHhBQUFHVVZBQUNqRkFBQUtCVUFBQUlWQUFDWkZRQUFMQkFBQUlzWkFBQlBEd0FBMUE0QUFHb1FBQURPRUFBQUFoY0FBSWtPQUFCdUV3QUFIQk1BQUdZVUFBQldGd0FBd1JNQUFNMFRBQUJzRXdBQWFCY0FBR1lYQUFCZkZ3QUFJaE1BQU00UEFBQnBEZ0FBMkE0QUFHTVdBQURMRXdBQXFnNEFBQ2dYQUFBbUZ3QUF4Uk1BQUYwV0FBRG9FUUFBWnhNQUFHVVRBQUR5RmdBQWN4TUFBQjBYQUFENUZnQUE4eEVBQU04T0FBRE9GUUFBREJJQUFMTVJBQUNsRVFBQVlSQUFBRElYQUFDN0V3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFFQkFnRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ01DQWdJQ0FnQUFBZ0lBQWdJQUFnSUNBZ0lDQWdJQ0FnQUVBQUFBQUFBQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdBQUFBSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBQUlBQWdBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFJQUFnSUNBZ0lBQUFJQ0FBSUNBQUlDQWdJQ0FnSUNBZ0lBQXdBRUFBQUFBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUFBQUFDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdBQ0FBSUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJzYjNObFpXVndMV0ZzYVhabEFBQUFBQUFBQUFBQUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFBQUFBQUFBQUFBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUVCQVFFQkFRRUJBUUVCQWdFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRmphSFZ1YTJWa0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCQVFBQkFRRUJBUUFBQVFFQUFRRUFBUUVCQVFFQkFRRUJBUUFBQUFBQUFBQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUFBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBR1ZqZEdsdmJtVnVkQzFzWlc1bmRHaHZibkp2ZUhrdFkyOXVibVZqZEdsdmJnQUFBQUFBQUFBQUFBQUFBQUFBQUhKaGJuTm1aWEl0Wlc1amIyUnBibWR3WjNKaFpHVU5DZzBLRFFwVFRRMEtEUXBVVkZBdlEwVXZWRk5RTHdBQUFBQUFBQUFBQUFBQUFBRUNBQUVEQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUFBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVBQUFBQUFBQUFBQUFCQWdBQkF3QUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUUJBUVVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQUFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBQUFBQUFBQUFBQUFRQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVFFQUFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFBRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRQUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUFBQUFBQUFBQUFBQUFCQUFBQ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUF3UUFBQVFFQkFRRUJBUUVCQVFFQlFRRUJBUUVCQVFFQkFRRUJBQUVBQVlIQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQUFRQUJBQUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBUUVCQVFFQkFRRUJBQUFBQVFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZ0FBQUFBQUFBTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFBQUFBQUFBQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUVBQUFFQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQkFBQUFBQUFBQUFBQUFnQUFBQUFDQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFEQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREF3TURBd0FBQUFBQUFBTURBd01EQXdNREF3TURBd01EQXdNREF3TURBd01EQXdNREFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUU1UFZVNURSVVZEUzA5VlZFNUZRMVJGVkVWRFVrbENSVXhWVTBoRlZFVkJSRk5GUVZKRFNGSkhSVU5VU1ZaSlZGbE1SVTVFUVZKV1JVOVVTVVpaVUZSSlQwNVRRMGhUUlVGWlUxUkJWRU5JUjBWUFVrUkpVa1ZEVkU5U1ZGSkRTRkJCVWtGTlJWUkZVbFZTUTBWQ1UwTlNTVUpGUVZKRVQxZE9RVU5GU1U1RVRrdERTMVZDVTBOU1NVSkZTRlJVVUM5QlJGUlFMdz09J1xuIiwgIi8vIEB0cy1jaGVja1xuXG4ndXNlIHN0cmljdCdcblxuLyogZ2xvYmFsIFdlYkFzc2VtYmx5ICovXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCBuZXQgPSByZXF1aXJlKCduZXQnKVxuY29uc3QgaHR0cCA9IHJlcXVpcmUoJ2h0dHAnKVxuY29uc3QgeyBwaXBlbGluZSB9ID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL2NvcmUvdXRpbCcpXG5jb25zdCB0aW1lcnMgPSByZXF1aXJlKCcuL3RpbWVycycpXG5jb25zdCBSZXF1ZXN0ID0gcmVxdWlyZSgnLi9jb3JlL3JlcXVlc3QnKVxuY29uc3QgRGlzcGF0Y2hlckJhc2UgPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXItYmFzZScpXG5jb25zdCB7XG4gIFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcixcbiAgUmVzcG9uc2VDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcixcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3IsXG4gIFJlcXVlc3RBYm9ydGVkRXJyb3IsXG4gIEhlYWRlcnNUaW1lb3V0RXJyb3IsXG4gIEhlYWRlcnNPdmVyZmxvd0Vycm9yLFxuICBTb2NrZXRFcnJvcixcbiAgSW5mb3JtYXRpb25hbEVycm9yLFxuICBCb2R5VGltZW91dEVycm9yLFxuICBIVFRQUGFyc2VyRXJyb3IsXG4gIFJlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3IsXG4gIENsaWVudERlc3Ryb3llZEVycm9yXG59ID0gcmVxdWlyZSgnLi9jb3JlL2Vycm9ycycpXG5jb25zdCBidWlsZENvbm5lY3RvciA9IHJlcXVpcmUoJy4vY29yZS9jb25uZWN0JylcbmNvbnN0IHtcbiAga1VybCxcbiAga1Jlc2V0LFxuICBrU2VydmVyTmFtZSxcbiAga0NsaWVudCxcbiAga0J1c3ksXG4gIGtQYXJzZXIsXG4gIGtDb25uZWN0LFxuICBrQmxvY2tpbmcsXG4gIGtSZXN1bWluZyxcbiAga1J1bm5pbmcsXG4gIGtQZW5kaW5nLFxuICBrU2l6ZSxcbiAga1dyaXRpbmcsXG4gIGtRdWV1ZSxcbiAga0Nvbm5lY3RlZCxcbiAga0Nvbm5lY3RpbmcsXG4gIGtOZWVkRHJhaW4sXG4gIGtOb1JlZixcbiAga0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0LFxuICBrSG9zdEhlYWRlcixcbiAga1BlbmRpbmdJZHgsXG4gIGtSdW5uaW5nSWR4LFxuICBrRXJyb3IsXG4gIGtQaXBlbGluaW5nLFxuICBrU29ja2V0LFxuICBrS2VlcEFsaXZlVGltZW91dFZhbHVlLFxuICBrTWF4SGVhZGVyc1NpemUsXG4gIGtLZWVwQWxpdmVNYXhUaW1lb3V0LFxuICBrS2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCxcbiAga0hlYWRlcnNUaW1lb3V0LFxuICBrQm9keVRpbWVvdXQsXG4gIGtTdHJpY3RDb250ZW50TGVuZ3RoLFxuICBrQ29ubmVjdG9yLFxuICBrTWF4UmVkaXJlY3Rpb25zLFxuICBrTWF4UmVxdWVzdHMsXG4gIGtDb3VudGVyLFxuICBrQ2xvc2UsXG4gIGtEZXN0cm95LFxuICBrRGlzcGF0Y2gsXG4gIGtJbnRlcmNlcHRvcnMsXG4gIGtMb2NhbEFkZHJlc3MsXG4gIGtNYXhSZXNwb25zZVNpemUsXG4gIGtIVFRQQ29ublZlcnNpb24sXG4gIC8vIEhUVFAyXG4gIGtIb3N0LFxuICBrSFRUUDJTZXNzaW9uLFxuICBrSFRUUDJTZXNzaW9uU3RhdGUsXG4gIGtIVFRQMkJ1aWxkUmVxdWVzdCxcbiAga0hUVFAyQ29weUhlYWRlcnMsXG4gIGtIVFRQMUJ1aWxkUmVxdWVzdFxufSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcblxuLyoqIEB0eXBlIHtpbXBvcnQoJ2h0dHAyJyl9ICovXG5sZXQgaHR0cDJcbnRyeSB7XG4gIGh0dHAyID0gcmVxdWlyZSgnaHR0cDInKVxufSBjYXRjaCB7XG4gIC8vIEB0cy1pZ25vcmVcbiAgaHR0cDIgPSB7IGNvbnN0YW50czoge30gfVxufVxuXG5jb25zdCB7XG4gIGNvbnN0YW50czoge1xuICAgIEhUVFAyX0hFQURFUl9BVVRIT1JJVFksXG4gICAgSFRUUDJfSEVBREVSX01FVEhPRCxcbiAgICBIVFRQMl9IRUFERVJfUEFUSCxcbiAgICBIVFRQMl9IRUFERVJfU0NIRU1FLFxuICAgIEhUVFAyX0hFQURFUl9DT05URU5UX0xFTkdUSCxcbiAgICBIVFRQMl9IRUFERVJfRVhQRUNULFxuICAgIEhUVFAyX0hFQURFUl9TVEFUVVNcbiAgfVxufSA9IGh0dHAyXG5cbi8vIEV4cGVyaW1lbnRhbFxubGV0IGgyRXhwZXJpbWVudGFsV2FybmVkID0gZmFsc2VcblxuY29uc3QgRmFzdEJ1ZmZlciA9IEJ1ZmZlcltTeW1ib2wuc3BlY2llc11cblxuY29uc3Qga0Nsb3NlZFJlc29sdmUgPSBTeW1ib2woJ2tDbG9zZWRSZXNvbHZlJylcblxuY29uc3QgY2hhbm5lbHMgPSB7fVxuXG50cnkge1xuICBjb25zdCBkaWFnbm9zdGljc0NoYW5uZWwgPSByZXF1aXJlKCdkaWFnbm9zdGljc19jaGFubmVsJylcbiAgY2hhbm5lbHMuc2VuZEhlYWRlcnMgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOmNsaWVudDpzZW5kSGVhZGVycycpXG4gIGNoYW5uZWxzLmJlZm9yZUNvbm5lY3QgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOmNsaWVudDpiZWZvcmVDb25uZWN0JylcbiAgY2hhbm5lbHMuY29ubmVjdEVycm9yID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6Y29ubmVjdEVycm9yJylcbiAgY2hhbm5lbHMuY29ubmVjdGVkID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTpjbGllbnQ6Y29ubmVjdGVkJylcbn0gY2F0Y2gge1xuICBjaGFubmVscy5zZW5kSGVhZGVycyA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMuYmVmb3JlQ29ubmVjdCA9IHsgaGFzU3Vic2NyaWJlcnM6IGZhbHNlIH1cbiAgY2hhbm5lbHMuY29ubmVjdEVycm9yID0geyBoYXNTdWJzY3JpYmVyczogZmFsc2UgfVxuICBjaGFubmVscy5jb25uZWN0ZWQgPSB7IGhhc1N1YnNjcmliZXJzOiBmYWxzZSB9XG59XG5cbi8qKlxuICogQHR5cGUge2ltcG9ydCgnLi4vdHlwZXMvY2xpZW50JykuZGVmYXVsdH1cbiAqL1xuY2xhc3MgQ2xpZW50IGV4dGVuZHMgRGlzcGF0Y2hlckJhc2Uge1xuICAvKipcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd8VVJMfSB1cmxcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uL3R5cGVzL2NsaWVudCcpLkNsaWVudC5PcHRpb25zfSBvcHRpb25zXG4gICAqL1xuICBjb25zdHJ1Y3RvciAodXJsLCB7XG4gICAgaW50ZXJjZXB0b3JzLFxuICAgIG1heEhlYWRlclNpemUsXG4gICAgaGVhZGVyc1RpbWVvdXQsXG4gICAgc29ja2V0VGltZW91dCxcbiAgICByZXF1ZXN0VGltZW91dCxcbiAgICBjb25uZWN0VGltZW91dCxcbiAgICBib2R5VGltZW91dCxcbiAgICBpZGxlVGltZW91dCxcbiAgICBrZWVwQWxpdmUsXG4gICAga2VlcEFsaXZlVGltZW91dCxcbiAgICBtYXhLZWVwQWxpdmVUaW1lb3V0LFxuICAgIGtlZXBBbGl2ZU1heFRpbWVvdXQsXG4gICAga2VlcEFsaXZlVGltZW91dFRocmVzaG9sZCxcbiAgICBzb2NrZXRQYXRoLFxuICAgIHBpcGVsaW5pbmcsXG4gICAgdGxzLFxuICAgIHN0cmljdENvbnRlbnRMZW5ndGgsXG4gICAgbWF4Q2FjaGVkU2Vzc2lvbnMsXG4gICAgbWF4UmVkaXJlY3Rpb25zLFxuICAgIGNvbm5lY3QsXG4gICAgbWF4UmVxdWVzdHNQZXJDbGllbnQsXG4gICAgbG9jYWxBZGRyZXNzLFxuICAgIG1heFJlc3BvbnNlU2l6ZSxcbiAgICBhdXRvU2VsZWN0RmFtaWx5LFxuICAgIGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCxcbiAgICAvLyBoMlxuICAgIGFsbG93SDIsXG4gICAgbWF4Q29uY3VycmVudFN0cmVhbXNcbiAgfSA9IHt9KSB7XG4gICAgc3VwZXIoKVxuXG4gICAgaWYgKGtlZXBBbGl2ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIGtlZXBBbGl2ZSwgdXNlIHBpcGVsaW5pbmc9MCBpbnN0ZWFkJylcbiAgICB9XG5cbiAgICBpZiAoc29ja2V0VGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIHNvY2tldFRpbWVvdXQsIHVzZSBoZWFkZXJzVGltZW91dCAmIGJvZHlUaW1lb3V0IGluc3RlYWQnKVxuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0VGltZW91dCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Vuc3VwcG9ydGVkIHJlcXVlc3RUaW1lb3V0LCB1c2UgaGVhZGVyc1RpbWVvdXQgJiBib2R5VGltZW91dCBpbnN0ZWFkJylcbiAgICB9XG5cbiAgICBpZiAoaWRsZVRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCBpZGxlVGltZW91dCwgdXNlIGtlZXBBbGl2ZVRpbWVvdXQgaW5zdGVhZCcpXG4gICAgfVxuXG4gICAgaWYgKG1heEtlZXBBbGl2ZVRpbWVvdXQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd1bnN1cHBvcnRlZCBtYXhLZWVwQWxpdmVUaW1lb3V0LCB1c2Uga2VlcEFsaXZlTWF4VGltZW91dCBpbnN0ZWFkJylcbiAgICB9XG5cbiAgICBpZiAobWF4SGVhZGVyU2l6ZSAhPSBudWxsICYmICFOdW1iZXIuaXNGaW5pdGUobWF4SGVhZGVyU2l6ZSkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBtYXhIZWFkZXJTaXplJylcbiAgICB9XG5cbiAgICBpZiAoc29ja2V0UGF0aCAhPSBudWxsICYmIHR5cGVvZiBzb2NrZXRQYXRoICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHNvY2tldFBhdGgnKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0VGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzRmluaXRlKGNvbm5lY3RUaW1lb3V0KSB8fCBjb25uZWN0VGltZW91dCA8IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY29ubmVjdFRpbWVvdXQnKVxuICAgIH1cblxuICAgIGlmIChrZWVwQWxpdmVUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNGaW5pdGUoa2VlcEFsaXZlVGltZW91dCkgfHwga2VlcEFsaXZlVGltZW91dCA8PSAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGtlZXBBbGl2ZVRpbWVvdXQnKVxuICAgIH1cblxuICAgIGlmIChrZWVwQWxpdmVNYXhUaW1lb3V0ICE9IG51bGwgJiYgKCFOdW1iZXIuaXNGaW5pdGUoa2VlcEFsaXZlTWF4VGltZW91dCkgfHwga2VlcEFsaXZlTWF4VGltZW91dCA8PSAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGtlZXBBbGl2ZU1heFRpbWVvdXQnKVxuICAgIH1cblxuICAgIGlmIChrZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkICE9IG51bGwgJiYgIU51bWJlci5pc0Zpbml0ZShrZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGtlZXBBbGl2ZVRpbWVvdXRUaHJlc2hvbGQnKVxuICAgIH1cblxuICAgIGlmIChoZWFkZXJzVGltZW91dCAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihoZWFkZXJzVGltZW91dCkgfHwgaGVhZGVyc1RpbWVvdXQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdoZWFkZXJzVGltZW91dCBtdXN0IGJlIGEgcG9zaXRpdmUgaW50ZWdlciBvciB6ZXJvJylcbiAgICB9XG5cbiAgICBpZiAoYm9keVRpbWVvdXQgIT0gbnVsbCAmJiAoIU51bWJlci5pc0ludGVnZXIoYm9keVRpbWVvdXQpIHx8IGJvZHlUaW1lb3V0IDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignYm9keVRpbWVvdXQgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIgb3IgemVybycpXG4gICAgfVxuXG4gICAgaWYgKGNvbm5lY3QgIT0gbnVsbCAmJiB0eXBlb2YgY29ubmVjdCAhPT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgY29ubmVjdCAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignY29ubmVjdCBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYW4gb2JqZWN0JylcbiAgICB9XG5cbiAgICBpZiAobWF4UmVkaXJlY3Rpb25zICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heFJlZGlyZWN0aW9ucykgfHwgbWF4UmVkaXJlY3Rpb25zIDwgMCkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignbWF4UmVkaXJlY3Rpb25zIG11c3QgYmUgYSBwb3NpdGl2ZSBudW1iZXInKVxuICAgIH1cblxuICAgIGlmIChtYXhSZXF1ZXN0c1BlckNsaWVudCAhPSBudWxsICYmICghTnVtYmVyLmlzSW50ZWdlcihtYXhSZXF1ZXN0c1BlckNsaWVudCkgfHwgbWF4UmVxdWVzdHNQZXJDbGllbnQgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhSZXF1ZXN0c1BlckNsaWVudCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICBpZiAobG9jYWxBZGRyZXNzICE9IG51bGwgJiYgKHR5cGVvZiBsb2NhbEFkZHJlc3MgIT09ICdzdHJpbmcnIHx8IG5ldC5pc0lQKGxvY2FsQWRkcmVzcykgPT09IDApKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2xvY2FsQWRkcmVzcyBtdXN0IGJlIHZhbGlkIHN0cmluZyBJUCBhZGRyZXNzJylcbiAgICB9XG5cbiAgICBpZiAobWF4UmVzcG9uc2VTaXplICE9IG51bGwgJiYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heFJlc3BvbnNlU2l6ZSkgfHwgbWF4UmVzcG9uc2VTaXplIDwgLTEpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heFJlc3BvbnNlU2l6ZSBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICBpZiAoXG4gICAgICBhdXRvU2VsZWN0RmFtaWx5QXR0ZW1wdFRpbWVvdXQgIT0gbnVsbCAmJlxuICAgICAgKCFOdW1iZXIuaXNJbnRlZ2VyKGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCkgfHwgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0IDwgLTEpXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2F1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyJylcbiAgICB9XG5cbiAgICAvLyBoMlxuICAgIGlmIChhbGxvd0gyICE9IG51bGwgJiYgdHlwZW9mIGFsbG93SDIgIT09ICdib29sZWFuJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdhbGxvd0gyIG11c3QgYmUgYSB2YWxpZCBib29sZWFuIHZhbHVlJylcbiAgICB9XG5cbiAgICBpZiAobWF4Q29uY3VycmVudFN0cmVhbXMgIT0gbnVsbCAmJiAodHlwZW9mIG1heENvbmN1cnJlbnRTdHJlYW1zICE9PSAnbnVtYmVyJyB8fCBtYXhDb25jdXJyZW50U3RyZWFtcyA8IDEpKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ21heENvbmN1cnJlbnRTdHJlYW1zIG11c3QgYmUgYSBwb3NzaXRpdmUgaW50ZWdlciwgZ3JlYXRlciB0aGFuIDAnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29ubmVjdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29ubmVjdCA9IGJ1aWxkQ29ubmVjdG9yKHtcbiAgICAgICAgLi4udGxzLFxuICAgICAgICBtYXhDYWNoZWRTZXNzaW9ucyxcbiAgICAgICAgYWxsb3dIMixcbiAgICAgICAgc29ja2V0UGF0aCxcbiAgICAgICAgdGltZW91dDogY29ubmVjdFRpbWVvdXQsXG4gICAgICAgIC4uLih1dGlsLm5vZGVIYXNBdXRvU2VsZWN0RmFtaWx5ICYmIGF1dG9TZWxlY3RGYW1pbHkgPyB7IGF1dG9TZWxlY3RGYW1pbHksIGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCB9IDogdW5kZWZpbmVkKSxcbiAgICAgICAgLi4uY29ubmVjdFxuICAgICAgfSlcbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gaW50ZXJjZXB0b3JzICYmIGludGVyY2VwdG9ycy5DbGllbnQgJiYgQXJyYXkuaXNBcnJheShpbnRlcmNlcHRvcnMuQ2xpZW50KVxuICAgICAgPyBpbnRlcmNlcHRvcnMuQ2xpZW50XG4gICAgICA6IFtjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yKHsgbWF4UmVkaXJlY3Rpb25zIH0pXVxuICAgIHRoaXNba1VybF0gPSB1dGlsLnBhcnNlT3JpZ2luKHVybClcbiAgICB0aGlzW2tDb25uZWN0b3JdID0gY29ubmVjdFxuICAgIHRoaXNba1NvY2tldF0gPSBudWxsXG4gICAgdGhpc1trUGlwZWxpbmluZ10gPSBwaXBlbGluaW5nICE9IG51bGwgPyBwaXBlbGluaW5nIDogMVxuICAgIHRoaXNba01heEhlYWRlcnNTaXplXSA9IG1heEhlYWRlclNpemUgfHwgaHR0cC5tYXhIZWFkZXJTaXplXG4gICAgdGhpc1trS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXRdID0ga2VlcEFsaXZlVGltZW91dCA9PSBudWxsID8gNGUzIDoga2VlcEFsaXZlVGltZW91dFxuICAgIHRoaXNba0tlZXBBbGl2ZU1heFRpbWVvdXRdID0ga2VlcEFsaXZlTWF4VGltZW91dCA9PSBudWxsID8gNjAwZTMgOiBrZWVwQWxpdmVNYXhUaW1lb3V0XG4gICAgdGhpc1trS2VlcEFsaXZlVGltZW91dFRocmVzaG9sZF0gPSBrZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkID09IG51bGwgPyAxZTMgOiBrZWVwQWxpdmVUaW1lb3V0VGhyZXNob2xkXG4gICAgdGhpc1trS2VlcEFsaXZlVGltZW91dFZhbHVlXSA9IHRoaXNba0tlZXBBbGl2ZURlZmF1bHRUaW1lb3V0XVxuICAgIHRoaXNba1NlcnZlck5hbWVdID0gbnVsbFxuICAgIHRoaXNba0xvY2FsQWRkcmVzc10gPSBsb2NhbEFkZHJlc3MgIT0gbnVsbCA/IGxvY2FsQWRkcmVzcyA6IG51bGxcbiAgICB0aGlzW2tSZXN1bWluZ10gPSAwIC8vIDAsIGlkbGUsIDEsIHNjaGVkdWxlZCwgMiByZXN1bWluZ1xuICAgIHRoaXNba05lZWREcmFpbl0gPSAwIC8vIDAsIGlkbGUsIDEsIHNjaGVkdWxlZCwgMiByZXN1bWluZ1xuICAgIHRoaXNba0hvc3RIZWFkZXJdID0gYGhvc3Q6ICR7dGhpc1trVXJsXS5ob3N0bmFtZX0ke3RoaXNba1VybF0ucG9ydCA/IGA6JHt0aGlzW2tVcmxdLnBvcnR9YCA6ICcnfVxcclxcbmBcbiAgICB0aGlzW2tCb2R5VGltZW91dF0gPSBib2R5VGltZW91dCAhPSBudWxsID8gYm9keVRpbWVvdXQgOiAzMDBlM1xuICAgIHRoaXNba0hlYWRlcnNUaW1lb3V0XSA9IGhlYWRlcnNUaW1lb3V0ICE9IG51bGwgPyBoZWFkZXJzVGltZW91dCA6IDMwMGUzXG4gICAgdGhpc1trU3RyaWN0Q29udGVudExlbmd0aF0gPSBzdHJpY3RDb250ZW50TGVuZ3RoID09IG51bGwgPyB0cnVlIDogc3RyaWN0Q29udGVudExlbmd0aFxuICAgIHRoaXNba01heFJlZGlyZWN0aW9uc10gPSBtYXhSZWRpcmVjdGlvbnNcbiAgICB0aGlzW2tNYXhSZXF1ZXN0c10gPSBtYXhSZXF1ZXN0c1BlckNsaWVudFxuICAgIHRoaXNba0Nsb3NlZFJlc29sdmVdID0gbnVsbFxuICAgIHRoaXNba01heFJlc3BvbnNlU2l6ZV0gPSBtYXhSZXNwb25zZVNpemUgPiAtMSA/IG1heFJlc3BvbnNlU2l6ZSA6IC0xXG4gICAgdGhpc1trSFRUUENvbm5WZXJzaW9uXSA9ICdoMSdcblxuICAgIC8vIEhUVFAvMlxuICAgIHRoaXNba0hUVFAyU2Vzc2lvbl0gPSBudWxsXG4gICAgdGhpc1trSFRUUDJTZXNzaW9uU3RhdGVdID0gIWFsbG93SDJcbiAgICAgID8gbnVsbFxuICAgICAgOiB7XG4gICAgICAgIC8vIHN0cmVhbXM6IG51bGwsIC8vIEZpeGVkIHF1ZXVlIG9mIHN0cmVhbXMgLSBGb3IgZnV0dXJlIHN1cHBvcnQgb2YgYHB1c2hgXG4gICAgICAgICAgb3BlblN0cmVhbXM6IDAsIC8vIEtlZXAgdHJhY2sgb2YgdGhlbSB0byBkZWNpZGUgd2V0aGVyIG9yIG5vdCB1bnJlZiB0aGUgc2Vzc2lvblxuICAgICAgICAgIG1heENvbmN1cnJlbnRTdHJlYW1zOiBtYXhDb25jdXJyZW50U3RyZWFtcyAhPSBudWxsID8gbWF4Q29uY3VycmVudFN0cmVhbXMgOiAxMDAgLy8gTWF4IHBlZXJDb25jdXJyZW50U3RyZWFtcyBmb3IgYSBOb2RlIGgyIHNlcnZlclxuICAgICAgICB9XG4gICAgdGhpc1trSG9zdF0gPSBgJHt0aGlzW2tVcmxdLmhvc3RuYW1lfSR7dGhpc1trVXJsXS5wb3J0ID8gYDoke3RoaXNba1VybF0ucG9ydH1gIDogJyd9YFxuXG4gICAgLy8ga1F1ZXVlIGlzIGJ1aWx0IHVwIG9mIDMgc2VjdGlvbnMgc2VwYXJhdGVkIGJ5XG4gICAgLy8gdGhlIGtSdW5uaW5nSWR4IGFuZCBrUGVuZGluZ0lkeCBpbmRpY2VzLlxuICAgIC8vIHwgICBjb21wbGV0ZSAgIHwgICBydW5uaW5nICAgfCAgIHBlbmRpbmcgICB8XG4gICAgLy8gICAgICAgICAgICAgICAgXiBrUnVubmluZ0lkeCBeIGtQZW5kaW5nSWR4IF4ga1F1ZXVlLmxlbmd0aFxuICAgIC8vIGtSdW5uaW5nSWR4IHBvaW50cyB0byB0aGUgZmlyc3QgcnVubmluZyBlbGVtZW50LlxuICAgIC8vIGtQZW5kaW5nSWR4IHBvaW50cyB0byB0aGUgZmlyc3QgcGVuZGluZyBlbGVtZW50LlxuICAgIC8vIFRoaXMgaW1wbGVtZW50cyBhIGZhc3QgcXVldWUgd2l0aCBhbiBhbW9ydGl6ZWRcbiAgICAvLyB0aW1lIG9mIE8oMSkuXG5cbiAgICB0aGlzW2tRdWV1ZV0gPSBbXVxuICAgIHRoaXNba1J1bm5pbmdJZHhdID0gMFxuICAgIHRoaXNba1BlbmRpbmdJZHhdID0gMFxuICB9XG5cbiAgZ2V0IHBpcGVsaW5pbmcgKCkge1xuICAgIHJldHVybiB0aGlzW2tQaXBlbGluaW5nXVxuICB9XG5cbiAgc2V0IHBpcGVsaW5pbmcgKHZhbHVlKSB7XG4gICAgdGhpc1trUGlwZWxpbmluZ10gPSB2YWx1ZVxuICAgIHJlc3VtZSh0aGlzLCB0cnVlKVxuICB9XG5cbiAgZ2V0IFtrUGVuZGluZ10gKCkge1xuICAgIHJldHVybiB0aGlzW2tRdWV1ZV0ubGVuZ3RoIC0gdGhpc1trUGVuZGluZ0lkeF1cbiAgfVxuXG4gIGdldCBba1J1bm5pbmddICgpIHtcbiAgICByZXR1cm4gdGhpc1trUGVuZGluZ0lkeF0gLSB0aGlzW2tSdW5uaW5nSWR4XVxuICB9XG5cbiAgZ2V0IFtrU2l6ZV0gKCkge1xuICAgIHJldHVybiB0aGlzW2tRdWV1ZV0ubGVuZ3RoIC0gdGhpc1trUnVubmluZ0lkeF1cbiAgfVxuXG4gIGdldCBba0Nvbm5lY3RlZF0gKCkge1xuICAgIHJldHVybiAhIXRoaXNba1NvY2tldF0gJiYgIXRoaXNba0Nvbm5lY3RpbmddICYmICF0aGlzW2tTb2NrZXRdLmRlc3Ryb3llZFxuICB9XG5cbiAgZ2V0IFtrQnVzeV0gKCkge1xuICAgIGNvbnN0IHNvY2tldCA9IHRoaXNba1NvY2tldF1cbiAgICByZXR1cm4gKFxuICAgICAgKHNvY2tldCAmJiAoc29ja2V0W2tSZXNldF0gfHwgc29ja2V0W2tXcml0aW5nXSB8fCBzb2NrZXRba0Jsb2NraW5nXSkpIHx8XG4gICAgICAodGhpc1trU2l6ZV0gPj0gKHRoaXNba1BpcGVsaW5pbmddIHx8IDEpKSB8fFxuICAgICAgdGhpc1trUGVuZGluZ10gPiAwXG4gICAgKVxuICB9XG5cbiAgLyogaXN0YW5idWwgaWdub3JlOiBvbmx5IHVzZWQgZm9yIHRlc3QgKi9cbiAgW2tDb25uZWN0XSAoY2IpIHtcbiAgICBjb25uZWN0KHRoaXMpXG4gICAgdGhpcy5vbmNlKCdjb25uZWN0JywgY2IpXG4gIH1cblxuICBba0Rpc3BhdGNoXSAob3B0cywgaGFuZGxlcikge1xuICAgIGNvbnN0IG9yaWdpbiA9IG9wdHMub3JpZ2luIHx8IHRoaXNba1VybF0ub3JpZ2luXG5cbiAgICBjb25zdCByZXF1ZXN0ID0gdGhpc1trSFRUUENvbm5WZXJzaW9uXSA9PT0gJ2gyJ1xuICAgICAgPyBSZXF1ZXN0W2tIVFRQMkJ1aWxkUmVxdWVzdF0ob3JpZ2luLCBvcHRzLCBoYW5kbGVyKVxuICAgICAgOiBSZXF1ZXN0W2tIVFRQMUJ1aWxkUmVxdWVzdF0ob3JpZ2luLCBvcHRzLCBoYW5kbGVyKVxuXG4gICAgdGhpc1trUXVldWVdLnB1c2gocmVxdWVzdClcbiAgICBpZiAodGhpc1trUmVzdW1pbmddKSB7XG4gICAgICAvLyBEbyBub3RoaW5nLlxuICAgIH0gZWxzZSBpZiAodXRpbC5ib2R5TGVuZ3RoKHJlcXVlc3QuYm9keSkgPT0gbnVsbCAmJiB1dGlsLmlzSXRlcmFibGUocmVxdWVzdC5ib2R5KSkge1xuICAgICAgLy8gV2FpdCBhIHRpY2sgaW4gY2FzZSBzdHJlYW0vaXRlcmF0b3IgaXMgZW5kZWQgaW4gdGhlIHNhbWUgdGljay5cbiAgICAgIHRoaXNba1Jlc3VtaW5nXSA9IDFcbiAgICAgIHByb2Nlc3MubmV4dFRpY2socmVzdW1lLCB0aGlzKVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bWUodGhpcywgdHJ1ZSlcbiAgICB9XG5cbiAgICBpZiAodGhpc1trUmVzdW1pbmddICYmIHRoaXNba05lZWREcmFpbl0gIT09IDIgJiYgdGhpc1trQnVzeV0pIHtcbiAgICAgIHRoaXNba05lZWREcmFpbl0gPSAyXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNba05lZWREcmFpbl0gPCAyXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgLy8gVE9ETzogZm9yIEgyIHdlIG5lZWQgdG8gZ3JhY2VmdWxseSBmbHVzaCB0aGUgcmVtYWluaW5nIGVucXVldWVkXG4gICAgLy8gcmVxdWVzdCBhbmQgY2xvc2UgZWFjaCBzdHJlYW0uXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBpZiAoIXRoaXNba1NpemVdKSB7XG4gICAgICAgIHJlc29sdmUobnVsbClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXNba0Nsb3NlZFJlc29sdmVdID0gcmVzb2x2ZVxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBhc3luYyBba0Rlc3Ryb3ldIChlcnIpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUpID0+IHtcbiAgICAgIGNvbnN0IHJlcXVlc3RzID0gdGhpc1trUXVldWVdLnNwbGljZSh0aGlzW2tQZW5kaW5nSWR4XSlcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVxdWVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdCA9IHJlcXVlc3RzW2ldXG4gICAgICAgIGVycm9yUmVxdWVzdCh0aGlzLCByZXF1ZXN0LCBlcnIpXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgICBpZiAodGhpc1trQ2xvc2VkUmVzb2x2ZV0pIHtcbiAgICAgICAgICAvLyBUT0RPIChmaXgpOiBTaG91bGQgd2UgZXJyb3IgaGVyZSB3aXRoIENsaWVudERlc3Ryb3llZEVycm9yP1xuICAgICAgICAgIHRoaXNba0Nsb3NlZFJlc29sdmVdKClcbiAgICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IG51bGxcbiAgICAgICAgfVxuICAgICAgICByZXNvbHZlKClcbiAgICAgIH1cblxuICAgICAgaWYgKHRoaXNba0hUVFAyU2Vzc2lvbl0gIT0gbnVsbCkge1xuICAgICAgICB1dGlsLmRlc3Ryb3kodGhpc1trSFRUUDJTZXNzaW9uXSwgZXJyKVxuICAgICAgICB0aGlzW2tIVFRQMlNlc3Npb25dID0gbnVsbFxuICAgICAgICB0aGlzW2tIVFRQMlNlc3Npb25TdGF0ZV0gPSBudWxsXG4gICAgICB9XG5cbiAgICAgIGlmICghdGhpc1trU29ja2V0XSkge1xuICAgICAgICBxdWV1ZU1pY3JvdGFzayhjYWxsYmFjaylcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHV0aWwuZGVzdHJveSh0aGlzW2tTb2NrZXRdLm9uKCdjbG9zZScsIGNhbGxiYWNrKSwgZXJyKVxuICAgICAgfVxuXG4gICAgICByZXN1bWUodGhpcylcbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIG9uSHR0cDJTZXNzaW9uRXJyb3IgKGVycikge1xuICBhc3NlcnQoZXJyLmNvZGUgIT09ICdFUlJfVExTX0NFUlRfQUxUTkFNRV9JTlZBTElEJylcblxuICB0aGlzW2tTb2NrZXRdW2tFcnJvcl0gPSBlcnJcblxuICBvbkVycm9yKHRoaXNba0NsaWVudF0sIGVycilcbn1cblxuZnVuY3Rpb24gb25IdHRwMkZyYW1lRXJyb3IgKHR5cGUsIGNvZGUsIGlkKSB7XG4gIGNvbnN0IGVyciA9IG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoYEhUVFAvMjogXCJmcmFtZUVycm9yXCIgcmVjZWl2ZWQgLSB0eXBlICR7dHlwZX0sIGNvZGUgJHtjb2RlfWApXG5cbiAgaWYgKGlkID09PSAwKSB7XG4gICAgdGhpc1trU29ja2V0XVtrRXJyb3JdID0gZXJyXG4gICAgb25FcnJvcih0aGlzW2tDbGllbnRdLCBlcnIpXG4gIH1cbn1cblxuZnVuY3Rpb24gb25IdHRwMlNlc3Npb25FbmQgKCkge1xuICB1dGlsLmRlc3Ryb3kodGhpcywgbmV3IFNvY2tldEVycm9yKCdvdGhlciBzaWRlIGNsb3NlZCcpKVxuICB1dGlsLmRlc3Ryb3kodGhpc1trU29ja2V0XSwgbmV3IFNvY2tldEVycm9yKCdvdGhlciBzaWRlIGNsb3NlZCcpKVxufVxuXG5mdW5jdGlvbiBvbkhUVFAyR29Bd2F5IChjb2RlKSB7XG4gIGNvbnN0IGNsaWVudCA9IHRoaXNba0NsaWVudF1cbiAgY29uc3QgZXJyID0gbmV3IEluZm9ybWF0aW9uYWxFcnJvcihgSFRUUC8yOiBcIkdPQVdBWVwiIGZyYW1lIHJlY2VpdmVkIHdpdGggY29kZSAke2NvZGV9YClcbiAgY2xpZW50W2tTb2NrZXRdID0gbnVsbFxuICBjbGllbnRba0hUVFAyU2Vzc2lvbl0gPSBudWxsXG5cbiAgaWYgKGNsaWVudC5kZXN0cm95ZWQpIHtcbiAgICBhc3NlcnQodGhpc1trUGVuZGluZ10gPT09IDApXG5cbiAgICAvLyBGYWlsIGVudGlyZSBxdWV1ZS5cbiAgICBjb25zdCByZXF1ZXN0cyA9IGNsaWVudFtrUXVldWVdLnNwbGljZShjbGllbnRba1J1bm5pbmdJZHhdKVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVxdWVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0c1tpXVxuICAgICAgZXJyb3JSZXF1ZXN0KHRoaXMsIHJlcXVlc3QsIGVycilcbiAgICB9XG4gIH0gZWxzZSBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDApIHtcbiAgICAvLyBGYWlsIGhlYWQgb2YgcGlwZWxpbmUuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XSsrXSA9IG51bGxcblxuICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgfVxuXG4gIGNsaWVudFtrUGVuZGluZ0lkeF0gPSBjbGllbnRba1J1bm5pbmdJZHhdXG5cbiAgYXNzZXJ0KGNsaWVudFtrUnVubmluZ10gPT09IDApXG5cbiAgY2xpZW50LmVtaXQoJ2Rpc2Nvbm5lY3QnLFxuICAgIGNsaWVudFtrVXJsXSxcbiAgICBbY2xpZW50XSxcbiAgICBlcnJcbiAgKVxuXG4gIHJlc3VtZShjbGllbnQpXG59XG5cbmNvbnN0IGNvbnN0YW50cyA9IHJlcXVpcmUoJy4vbGxodHRwL2NvbnN0YW50cycpXG5jb25zdCBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yID0gcmVxdWlyZSgnLi9pbnRlcmNlcHRvci9yZWRpcmVjdEludGVyY2VwdG9yJylcbmNvbnN0IEVNUFRZX0JVRiA9IEJ1ZmZlci5hbGxvYygwKVxuXG5hc3luYyBmdW5jdGlvbiBsYXp5bGxodHRwICgpIHtcbiAgY29uc3QgbGxodHRwV2FzbURhdGEgPSBwcm9jZXNzLmVudi5KRVNUX1dPUktFUl9JRCA/IHJlcXVpcmUoJy4vbGxodHRwL2xsaHR0cC13YXNtLmpzJykgOiB1bmRlZmluZWRcblxuICBsZXQgbW9kXG4gIHRyeSB7XG4gICAgbW9kID0gYXdhaXQgV2ViQXNzZW1ibHkuY29tcGlsZShCdWZmZXIuZnJvbShyZXF1aXJlKCcuL2xsaHR0cC9sbGh0dHBfc2ltZC13YXNtLmpzJyksICdiYXNlNjQnKSlcbiAgfSBjYXRjaCAoZSkge1xuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5cbiAgICAvLyBXZSBjb3VsZCBjaGVjayBpZiB0aGUgZXJyb3Igd2FzIGNhdXNlZCBieSB0aGUgc2ltZCBvcHRpb24gbm90XG4gICAgLy8gYmVpbmcgZW5hYmxlZCwgYnV0IHRoZSBvY2N1cnJpbmcgb2YgdGhpcyBvdGhlciBlcnJvclxuICAgIC8vICogaHR0cHM6Ly9naXRodWIuY29tL2Vtc2NyaXB0ZW4tY29yZS9lbXNjcmlwdGVuL2lzc3Vlcy8xMTQ5NVxuICAgIC8vIGdvdCBtZSB0byByZW1vdmUgdGhhdCBjaGVjayB0byBhdm9pZCBicmVha2luZyBOb2RlIDEyLlxuICAgIG1vZCA9IGF3YWl0IFdlYkFzc2VtYmx5LmNvbXBpbGUoQnVmZmVyLmZyb20obGxodHRwV2FzbURhdGEgfHwgcmVxdWlyZSgnLi9sbGh0dHAvbGxodHRwLXdhc20uanMnKSwgJ2Jhc2U2NCcpKVxuICB9XG5cbiAgcmV0dXJuIGF3YWl0IFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKG1vZCwge1xuICAgIGVudjoge1xuICAgICAgLyogZXNsaW50LWRpc2FibGUgY2FtZWxjYXNlICovXG5cbiAgICAgIHdhc21fb25fdXJsOiAocCwgYXQsIGxlbikgPT4ge1xuICAgICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuICAgICAgICByZXR1cm4gMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25fc3RhdHVzOiAocCwgYXQsIGxlbikgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VycmVudFBhcnNlci5wdHIsIHApXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gYXQgLSBjdXJyZW50QnVmZmVyUHRyICsgY3VycmVudEJ1ZmZlclJlZi5ieXRlT2Zmc2V0XG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uU3RhdHVzKG5ldyBGYXN0QnVmZmVyKGN1cnJlbnRCdWZmZXJSZWYuYnVmZmVyLCBzdGFydCwgbGVuKSkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25fbWVzc2FnZV9iZWdpbjogKHApID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbk1lc3NhZ2VCZWdpbigpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX2hlYWRlcl9maWVsZDogKHAsIGF0LCBsZW4pID0+IHtcbiAgICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGN1cnJlbnRQYXJzZXIucHRyLCBwKVxuICAgICAgICBjb25zdCBzdGFydCA9IGF0IC0gY3VycmVudEJ1ZmZlclB0ciArIGN1cnJlbnRCdWZmZXJSZWYuYnl0ZU9mZnNldFxuICAgICAgICByZXR1cm4gY3VycmVudFBhcnNlci5vbkhlYWRlckZpZWxkKG5ldyBGYXN0QnVmZmVyKGN1cnJlbnRCdWZmZXJSZWYuYnVmZmVyLCBzdGFydCwgbGVuKSkgfHwgMFxuICAgICAgfSxcbiAgICAgIHdhc21fb25faGVhZGVyX3ZhbHVlOiAocCwgYXQsIGxlbikgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VycmVudFBhcnNlci5wdHIsIHApXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gYXQgLSBjdXJyZW50QnVmZmVyUHRyICsgY3VycmVudEJ1ZmZlclJlZi5ieXRlT2Zmc2V0XG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uSGVhZGVyVmFsdWUobmV3IEZhc3RCdWZmZXIoY3VycmVudEJ1ZmZlclJlZi5idWZmZXIsIHN0YXJ0LCBsZW4pKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9oZWFkZXJzX2NvbXBsZXRlOiAocCwgc3RhdHVzQ29kZSwgdXBncmFkZSwgc2hvdWxkS2VlcEFsaXZlKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjdXJyZW50UGFyc2VyLnB0ciwgcClcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25IZWFkZXJzQ29tcGxldGUoc3RhdHVzQ29kZSwgQm9vbGVhbih1cGdyYWRlKSwgQm9vbGVhbihzaG91bGRLZWVwQWxpdmUpKSB8fCAwXG4gICAgICB9LFxuICAgICAgd2FzbV9vbl9ib2R5OiAocCwgYXQsIGxlbikgPT4ge1xuICAgICAgICBhc3NlcnQuc3RyaWN0RXF1YWwoY3VycmVudFBhcnNlci5wdHIsIHApXG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gYXQgLSBjdXJyZW50QnVmZmVyUHRyICsgY3VycmVudEJ1ZmZlclJlZi5ieXRlT2Zmc2V0XG4gICAgICAgIHJldHVybiBjdXJyZW50UGFyc2VyLm9uQm9keShuZXcgRmFzdEJ1ZmZlcihjdXJyZW50QnVmZmVyUmVmLmJ1ZmZlciwgc3RhcnQsIGxlbikpIHx8IDBcbiAgICAgIH0sXG4gICAgICB3YXNtX29uX21lc3NhZ2VfY29tcGxldGU6IChwKSA9PiB7XG4gICAgICAgIGFzc2VydC5zdHJpY3RFcXVhbChjdXJyZW50UGFyc2VyLnB0ciwgcClcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRQYXJzZXIub25NZXNzYWdlQ29tcGxldGUoKSB8fCAwXG4gICAgICB9XG5cbiAgICAgIC8qIGVzbGludC1lbmFibGUgY2FtZWxjYXNlICovXG4gICAgfVxuICB9KVxufVxuXG5sZXQgbGxodHRwSW5zdGFuY2UgPSBudWxsXG5sZXQgbGxodHRwUHJvbWlzZSA9IGxhenlsbGh0dHAoKVxubGxodHRwUHJvbWlzZS5jYXRjaCgpXG5cbmxldCBjdXJyZW50UGFyc2VyID0gbnVsbFxubGV0IGN1cnJlbnRCdWZmZXJSZWYgPSBudWxsXG5sZXQgY3VycmVudEJ1ZmZlclNpemUgPSAwXG5sZXQgY3VycmVudEJ1ZmZlclB0ciA9IG51bGxcblxuY29uc3QgVElNRU9VVF9IRUFERVJTID0gMVxuY29uc3QgVElNRU9VVF9CT0RZID0gMlxuY29uc3QgVElNRU9VVF9JRExFID0gM1xuXG5jbGFzcyBQYXJzZXIge1xuICBjb25zdHJ1Y3RvciAoY2xpZW50LCBzb2NrZXQsIHsgZXhwb3J0cyB9KSB7XG4gICAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZShjbGllbnRba01heEhlYWRlcnNTaXplXSkgJiYgY2xpZW50W2tNYXhIZWFkZXJzU2l6ZV0gPiAwKVxuXG4gICAgdGhpcy5sbGh0dHAgPSBleHBvcnRzXG4gICAgdGhpcy5wdHIgPSB0aGlzLmxsaHR0cC5sbGh0dHBfYWxsb2MoY29uc3RhbnRzLlRZUEUuUkVTUE9OU0UpXG4gICAgdGhpcy5jbGllbnQgPSBjbGllbnRcbiAgICB0aGlzLnNvY2tldCA9IHNvY2tldFxuICAgIHRoaXMudGltZW91dCA9IG51bGxcbiAgICB0aGlzLnRpbWVvdXRWYWx1ZSA9IG51bGxcbiAgICB0aGlzLnRpbWVvdXRUeXBlID0gbnVsbFxuICAgIHRoaXMuc3RhdHVzQ29kZSA9IG51bGxcbiAgICB0aGlzLnN0YXR1c1RleHQgPSAnJ1xuICAgIHRoaXMudXBncmFkZSA9IGZhbHNlXG4gICAgdGhpcy5oZWFkZXJzID0gW11cbiAgICB0aGlzLmhlYWRlcnNTaXplID0gMFxuICAgIHRoaXMuaGVhZGVyc01heFNpemUgPSBjbGllbnRba01heEhlYWRlcnNTaXplXVxuICAgIHRoaXMuc2hvdWxkS2VlcEFsaXZlID0gZmFsc2VcbiAgICB0aGlzLnBhdXNlZCA9IGZhbHNlXG4gICAgdGhpcy5yZXN1bWUgPSB0aGlzLnJlc3VtZS5iaW5kKHRoaXMpXG5cbiAgICB0aGlzLmJ5dGVzUmVhZCA9IDBcblxuICAgIHRoaXMua2VlcEFsaXZlID0gJydcbiAgICB0aGlzLmNvbnRlbnRMZW5ndGggPSAnJ1xuICAgIHRoaXMuY29ubmVjdGlvbiA9ICcnXG4gICAgdGhpcy5tYXhSZXNwb25zZVNpemUgPSBjbGllbnRba01heFJlc3BvbnNlU2l6ZV1cbiAgfVxuXG4gIHNldFRpbWVvdXQgKHZhbHVlLCB0eXBlKSB7XG4gICAgdGhpcy50aW1lb3V0VHlwZSA9IHR5cGVcbiAgICBpZiAodmFsdWUgIT09IHRoaXMudGltZW91dFZhbHVlKSB7XG4gICAgICB0aW1lcnMuY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dClcbiAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICB0aGlzLnRpbWVvdXQgPSB0aW1lcnMuc2V0VGltZW91dChvblBhcnNlclRpbWVvdXQsIHZhbHVlLCB0aGlzKVxuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgICBpZiAodGhpcy50aW1lb3V0LnVucmVmKSB7XG4gICAgICAgICAgdGhpcy50aW1lb3V0LnVucmVmKClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy50aW1lb3V0ID0gbnVsbFxuICAgICAgfVxuICAgICAgdGhpcy50aW1lb3V0VmFsdWUgPSB2YWx1ZVxuICAgIH0gZWxzZSBpZiAodGhpcy50aW1lb3V0KSB7XG4gICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogb25seSBmb3IgamVzdFxuICAgICAgaWYgKHRoaXMudGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgIHRoaXMudGltZW91dC5yZWZyZXNoKClcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICByZXN1bWUgKCkge1xuICAgIGlmICh0aGlzLnNvY2tldC5kZXN0cm95ZWQgfHwgIXRoaXMucGF1c2VkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBhc3NlcnQodGhpcy5wdHIgIT0gbnVsbClcbiAgICBhc3NlcnQoY3VycmVudFBhcnNlciA9PSBudWxsKVxuXG4gICAgdGhpcy5sbGh0dHAubGxodHRwX3Jlc3VtZSh0aGlzLnB0cilcblxuICAgIGFzc2VydCh0aGlzLnRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0JPRFkpXG4gICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICB0aGlzLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5wYXVzZWQgPSBmYWxzZVxuICAgIHRoaXMuZXhlY3V0ZSh0aGlzLnNvY2tldC5yZWFkKCkgfHwgRU1QVFlfQlVGKSAvLyBGbHVzaCBwYXJzZXIuXG4gICAgdGhpcy5yZWFkTW9yZSgpXG4gIH1cblxuICByZWFkTW9yZSAoKSB7XG4gICAgd2hpbGUgKCF0aGlzLnBhdXNlZCAmJiB0aGlzLnB0cikge1xuICAgICAgY29uc3QgY2h1bmsgPSB0aGlzLnNvY2tldC5yZWFkKClcbiAgICAgIGlmIChjaHVuayA9PT0gbnVsbCkge1xuICAgICAgICBicmVha1xuICAgICAgfVxuICAgICAgdGhpcy5leGVjdXRlKGNodW5rKVxuICAgIH1cbiAgfVxuXG4gIGV4ZWN1dGUgKGRhdGEpIHtcbiAgICBhc3NlcnQodGhpcy5wdHIgIT0gbnVsbClcbiAgICBhc3NlcnQoY3VycmVudFBhcnNlciA9PSBudWxsKVxuICAgIGFzc2VydCghdGhpcy5wYXVzZWQpXG5cbiAgICBjb25zdCB7IHNvY2tldCwgbGxodHRwIH0gPSB0aGlzXG5cbiAgICBpZiAoZGF0YS5sZW5ndGggPiBjdXJyZW50QnVmZmVyU2l6ZSkge1xuICAgICAgaWYgKGN1cnJlbnRCdWZmZXJQdHIpIHtcbiAgICAgICAgbGxodHRwLmZyZWUoY3VycmVudEJ1ZmZlclB0cilcbiAgICAgIH1cbiAgICAgIGN1cnJlbnRCdWZmZXJTaXplID0gTWF0aC5jZWlsKGRhdGEubGVuZ3RoIC8gNDA5NikgKiA0MDk2XG4gICAgICBjdXJyZW50QnVmZmVyUHRyID0gbGxodHRwLm1hbGxvYyhjdXJyZW50QnVmZmVyU2l6ZSlcbiAgICB9XG5cbiAgICBuZXcgVWludDhBcnJheShsbGh0dHAubWVtb3J5LmJ1ZmZlciwgY3VycmVudEJ1ZmZlclB0ciwgY3VycmVudEJ1ZmZlclNpemUpLnNldChkYXRhKVxuXG4gICAgLy8gQ2FsbCBgZXhlY3V0ZWAgb24gdGhlIHdhc20gcGFyc2VyLlxuICAgIC8vIFdlIHBhc3MgdGhlIGBsbGh0dHBfcGFyc2VyYCBwb2ludGVyIGFkZHJlc3MsIHRoZSBwb2ludGVyIGFkZHJlc3Mgb2YgYnVmZmVyIHZpZXcgZGF0YSxcbiAgICAvLyBhbmQgZmluYWxseSB0aGUgbGVuZ3RoIG9mIGJ5dGVzIHRvIHBhcnNlLlxuICAgIC8vIFRoZSByZXR1cm4gdmFsdWUgaXMgYW4gZXJyb3IgY29kZSBvciBgY29uc3RhbnRzLkVSUk9SLk9LYC5cbiAgICB0cnkge1xuICAgICAgbGV0IHJldFxuXG4gICAgICB0cnkge1xuICAgICAgICBjdXJyZW50QnVmZmVyUmVmID0gZGF0YVxuICAgICAgICBjdXJyZW50UGFyc2VyID0gdGhpc1xuICAgICAgICByZXQgPSBsbGh0dHAubGxodHRwX2V4ZWN1dGUodGhpcy5wdHIsIGN1cnJlbnRCdWZmZXJQdHIsIGRhdGEubGVuZ3RoKVxuICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdXNlbGVzcy1jYXRjaCAqL1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBkaWZmaWN1bHQgdG8gbWFrZSBhIHRlc3QgY2FzZSBmb3IgKi9cbiAgICAgICAgdGhyb3cgZXJyXG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBjdXJyZW50UGFyc2VyID0gbnVsbFxuICAgICAgICBjdXJyZW50QnVmZmVyUmVmID0gbnVsbFxuICAgICAgfVxuXG4gICAgICBjb25zdCBvZmZzZXQgPSBsbGh0dHAubGxodHRwX2dldF9lcnJvcl9wb3ModGhpcy5wdHIpIC0gY3VycmVudEJ1ZmZlclB0clxuXG4gICAgICBpZiAocmV0ID09PSBjb25zdGFudHMuRVJST1IuUEFVU0VEX1VQR1JBREUpIHtcbiAgICAgICAgdGhpcy5vblVwZ3JhZGUoZGF0YS5zbGljZShvZmZzZXQpKVxuICAgICAgfSBlbHNlIGlmIChyZXQgPT09IGNvbnN0YW50cy5FUlJPUi5QQVVTRUQpIHtcbiAgICAgICAgdGhpcy5wYXVzZWQgPSB0cnVlXG4gICAgICAgIHNvY2tldC51bnNoaWZ0KGRhdGEuc2xpY2Uob2Zmc2V0KSlcbiAgICAgIH0gZWxzZSBpZiAocmV0ICE9PSBjb25zdGFudHMuRVJST1IuT0spIHtcbiAgICAgICAgY29uc3QgcHRyID0gbGxodHRwLmxsaHR0cF9nZXRfZXJyb3JfcmVhc29uKHRoaXMucHRyKVxuICAgICAgICBsZXQgbWVzc2FnZSA9ICcnXG4gICAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBkaWZmaWN1bHQgdG8gbWFrZSBhIHRlc3QgY2FzZSBmb3IgKi9cbiAgICAgICAgaWYgKHB0cikge1xuICAgICAgICAgIGNvbnN0IGxlbiA9IG5ldyBVaW50OEFycmF5KGxsaHR0cC5tZW1vcnkuYnVmZmVyLCBwdHIpLmluZGV4T2YoMClcbiAgICAgICAgICBtZXNzYWdlID1cbiAgICAgICAgICAgICdSZXNwb25zZSBkb2VzIG5vdCBtYXRjaCB0aGUgSFRUUC8xLjEgcHJvdG9jb2wgKCcgK1xuICAgICAgICAgICAgQnVmZmVyLmZyb20obGxodHRwLm1lbW9yeS5idWZmZXIsIHB0ciwgbGVuKS50b1N0cmluZygpICtcbiAgICAgICAgICAgICcpJ1xuICAgICAgICB9XG4gICAgICAgIHRocm93IG5ldyBIVFRQUGFyc2VyRXJyb3IobWVzc2FnZSwgY29uc3RhbnRzLkVSUk9SW3JldF0sIGRhdGEuc2xpY2Uob2Zmc2V0KSlcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIGVycilcbiAgICB9XG4gIH1cblxuICBkZXN0cm95ICgpIHtcbiAgICBhc3NlcnQodGhpcy5wdHIgIT0gbnVsbClcbiAgICBhc3NlcnQoY3VycmVudFBhcnNlciA9PSBudWxsKVxuXG4gICAgdGhpcy5sbGh0dHAubGxodHRwX2ZyZWUodGhpcy5wdHIpXG4gICAgdGhpcy5wdHIgPSBudWxsXG5cbiAgICB0aW1lcnMuY2xlYXJUaW1lb3V0KHRoaXMudGltZW91dClcbiAgICB0aGlzLnRpbWVvdXQgPSBudWxsXG4gICAgdGhpcy50aW1lb3V0VmFsdWUgPSBudWxsXG4gICAgdGhpcy50aW1lb3V0VHlwZSA9IG51bGxcblxuICAgIHRoaXMucGF1c2VkID0gZmFsc2VcbiAgfVxuXG4gIG9uU3RhdHVzIChidWYpIHtcbiAgICB0aGlzLnN0YXR1c1RleHQgPSBidWYudG9TdHJpbmcoKVxuICB9XG5cbiAgb25NZXNzYWdlQmVnaW4gKCkge1xuICAgIGNvbnN0IHsgc29ja2V0LCBjbGllbnQgfSA9IHRoaXNcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBkaWZmaWN1bHQgdG8gbWFrZSBhIHRlc3QgY2FzZSBmb3IgKi9cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gIH1cblxuICBvbkhlYWRlckZpZWxkIChidWYpIHtcbiAgICBjb25zdCBsZW4gPSB0aGlzLmhlYWRlcnMubGVuZ3RoXG5cbiAgICBpZiAoKGxlbiAmIDEpID09PSAwKSB7XG4gICAgICB0aGlzLmhlYWRlcnMucHVzaChidWYpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuaGVhZGVyc1tsZW4gLSAxXSA9IEJ1ZmZlci5jb25jYXQoW3RoaXMuaGVhZGVyc1tsZW4gLSAxXSwgYnVmXSlcbiAgICB9XG5cbiAgICB0aGlzLnRyYWNrSGVhZGVyKGJ1Zi5sZW5ndGgpXG4gIH1cblxuICBvbkhlYWRlclZhbHVlIChidWYpIHtcbiAgICBsZXQgbGVuID0gdGhpcy5oZWFkZXJzLmxlbmd0aFxuXG4gICAgaWYgKChsZW4gJiAxKSA9PT0gMSkge1xuICAgICAgdGhpcy5oZWFkZXJzLnB1c2goYnVmKVxuICAgICAgbGVuICs9IDFcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5oZWFkZXJzW2xlbiAtIDFdID0gQnVmZmVyLmNvbmNhdChbdGhpcy5oZWFkZXJzW2xlbiAtIDFdLCBidWZdKVxuICAgIH1cblxuICAgIGNvbnN0IGtleSA9IHRoaXMuaGVhZGVyc1tsZW4gLSAyXVxuICAgIGlmIChrZXkubGVuZ3RoID09PSAxMCAmJiBrZXkudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSAna2VlcC1hbGl2ZScpIHtcbiAgICAgIHRoaXMua2VlcEFsaXZlICs9IGJ1Zi50b1N0cmluZygpXG4gICAgfSBlbHNlIGlmIChrZXkubGVuZ3RoID09PSAxMCAmJiBrZXkudG9TdHJpbmcoKS50b0xvd2VyQ2FzZSgpID09PSAnY29ubmVjdGlvbicpIHtcbiAgICAgIHRoaXMuY29ubmVjdGlvbiArPSBidWYudG9TdHJpbmcoKVxuICAgIH0gZWxzZSBpZiAoa2V5Lmxlbmd0aCA9PT0gMTQgJiYga2V5LnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtbGVuZ3RoJykge1xuICAgICAgdGhpcy5jb250ZW50TGVuZ3RoICs9IGJ1Zi50b1N0cmluZygpXG4gICAgfVxuXG4gICAgdGhpcy50cmFja0hlYWRlcihidWYubGVuZ3RoKVxuICB9XG5cbiAgdHJhY2tIZWFkZXIgKGxlbikge1xuICAgIHRoaXMuaGVhZGVyc1NpemUgKz0gbGVuXG4gICAgaWYgKHRoaXMuaGVhZGVyc1NpemUgPj0gdGhpcy5oZWFkZXJzTWF4U2l6ZSkge1xuICAgICAgdXRpbC5kZXN0cm95KHRoaXMuc29ja2V0LCBuZXcgSGVhZGVyc092ZXJmbG93RXJyb3IoKSlcbiAgICB9XG4gIH1cblxuICBvblVwZ3JhZGUgKGhlYWQpIHtcbiAgICBjb25zdCB7IHVwZ3JhZGUsIGNsaWVudCwgc29ja2V0LCBoZWFkZXJzLCBzdGF0dXNDb2RlIH0gPSB0aGlzXG5cbiAgICBhc3NlcnQodXBncmFkZSlcblxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGFzc2VydChyZXF1ZXN0KVxuXG4gICAgYXNzZXJ0KCFzb2NrZXQuZGVzdHJveWVkKVxuICAgIGFzc2VydChzb2NrZXQgPT09IGNsaWVudFtrU29ja2V0XSlcbiAgICBhc3NlcnQoIXRoaXMucGF1c2VkKVxuICAgIGFzc2VydChyZXF1ZXN0LnVwZ3JhZGUgfHwgcmVxdWVzdC5tZXRob2QgPT09ICdDT05ORUNUJylcblxuICAgIHRoaXMuc3RhdHVzQ29kZSA9IG51bGxcbiAgICB0aGlzLnN0YXR1c1RleHQgPSAnJ1xuICAgIHRoaXMuc2hvdWxkS2VlcEFsaXZlID0gbnVsbFxuXG4gICAgYXNzZXJ0KHRoaXMuaGVhZGVycy5sZW5ndGggJSAyID09PSAwKVxuICAgIHRoaXMuaGVhZGVycyA9IFtdXG4gICAgdGhpcy5oZWFkZXJzU2l6ZSA9IDBcblxuICAgIHNvY2tldC51bnNoaWZ0KGhlYWQpXG5cbiAgICBzb2NrZXRba1BhcnNlcl0uZGVzdHJveSgpXG4gICAgc29ja2V0W2tQYXJzZXJdID0gbnVsbFxuXG4gICAgc29ja2V0W2tDbGllbnRdID0gbnVsbFxuICAgIHNvY2tldFtrRXJyb3JdID0gbnVsbFxuICAgIHNvY2tldFxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uU29ja2V0RXJyb3IpXG4gICAgICAucmVtb3ZlTGlzdGVuZXIoJ3JlYWRhYmxlJywgb25Tb2NrZXRSZWFkYWJsZSlcbiAgICAgIC5yZW1vdmVMaXN0ZW5lcignZW5kJywgb25Tb2NrZXRFbmQpXG4gICAgICAucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25Tb2NrZXRDbG9zZSlcblxuICAgIGNsaWVudFtrU29ja2V0XSA9IG51bGxcbiAgICBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdKytdID0gbnVsbFxuICAgIGNsaWVudC5lbWl0KCdkaXNjb25uZWN0JywgY2xpZW50W2tVcmxdLCBbY2xpZW50XSwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcigndXBncmFkZScpKVxuXG4gICAgdHJ5IHtcbiAgICAgIHJlcXVlc3Qub25VcGdyYWRlKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldClcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIGVycilcbiAgICB9XG5cbiAgICByZXN1bWUoY2xpZW50KVxuICB9XG5cbiAgb25IZWFkZXJzQ29tcGxldGUgKHN0YXR1c0NvZGUsIHVwZ3JhZGUsIHNob3VsZEtlZXBBbGl2ZSkge1xuICAgIGNvbnN0IHsgY2xpZW50LCBzb2NrZXQsIGhlYWRlcnMsIHN0YXR1c1RleHQgfSA9IHRoaXNcblxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBkaWZmaWN1bHQgdG8gbWFrZSBhIHRlc3QgY2FzZSBmb3IgKi9cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogZGlmZmljdWx0IHRvIG1ha2UgYSB0ZXN0IGNhc2UgZm9yICovXG4gICAgaWYgKCFyZXF1ZXN0KSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBhc3NlcnQoIXRoaXMudXBncmFkZSlcbiAgICBhc3NlcnQodGhpcy5zdGF0dXNDb2RlIDwgMjAwKVxuXG4gICAgaWYgKHN0YXR1c0NvZGUgPT09IDEwMCkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFNvY2tldEVycm9yKCdiYWQgcmVzcG9uc2UnLCB1dGlsLmdldFNvY2tldEluZm8oc29ja2V0KSkpXG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICAvKiB0aGlzIGNhbiBvbmx5IGhhcHBlbiBpZiBzZXJ2ZXIgaXMgbWlzYmVoYXZpbmcgKi9cbiAgICBpZiAodXBncmFkZSAmJiAhcmVxdWVzdC51cGdyYWRlKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgU29ja2V0RXJyb3IoJ2JhZCB1cGdyYWRlJywgdXRpbC5nZXRTb2NrZXRJbmZvKHNvY2tldCkpKVxuICAgICAgcmV0dXJuIC0xXG4gICAgfVxuXG4gICAgYXNzZXJ0LnN0cmljdEVxdWFsKHRoaXMudGltZW91dFR5cGUsIFRJTUVPVVRfSEVBREVSUylcblxuICAgIHRoaXMuc3RhdHVzQ29kZSA9IHN0YXR1c0NvZGVcbiAgICB0aGlzLnNob3VsZEtlZXBBbGl2ZSA9IChcbiAgICAgIHNob3VsZEtlZXBBbGl2ZSB8fFxuICAgICAgLy8gT3ZlcnJpZGUgbGxodHRwIHZhbHVlIHdoaWNoIGRvZXMgbm90IGFsbG93IGtlZXBBbGl2ZSBmb3IgSEVBRC5cbiAgICAgIChyZXF1ZXN0Lm1ldGhvZCA9PT0gJ0hFQUQnICYmICFzb2NrZXRba1Jlc2V0XSAmJiB0aGlzLmNvbm5lY3Rpb24udG9Mb3dlckNhc2UoKSA9PT0gJ2tlZXAtYWxpdmUnKVxuICAgIClcblxuICAgIGlmICh0aGlzLnN0YXR1c0NvZGUgPj0gMjAwKSB7XG4gICAgICBjb25zdCBib2R5VGltZW91dCA9IHJlcXVlc3QuYm9keVRpbWVvdXQgIT0gbnVsbFxuICAgICAgICA/IHJlcXVlc3QuYm9keVRpbWVvdXRcbiAgICAgICAgOiBjbGllbnRba0JvZHlUaW1lb3V0XVxuICAgICAgdGhpcy5zZXRUaW1lb3V0KGJvZHlUaW1lb3V0LCBUSU1FT1VUX0JPRFkpXG4gICAgfSBlbHNlIGlmICh0aGlzLnRpbWVvdXQpIHtcbiAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICBpZiAodGhpcy50aW1lb3V0LnJlZnJlc2gpIHtcbiAgICAgICAgdGhpcy50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMSlcbiAgICAgIHRoaXMudXBncmFkZSA9IHRydWVcbiAgICAgIHJldHVybiAyXG4gICAgfVxuXG4gICAgaWYgKHVwZ3JhZGUpIHtcbiAgICAgIGFzc2VydChjbGllbnRba1J1bm5pbmddID09PSAxKVxuICAgICAgdGhpcy51cGdyYWRlID0gdHJ1ZVxuICAgICAgcmV0dXJuIDJcbiAgICB9XG5cbiAgICBhc3NlcnQodGhpcy5oZWFkZXJzLmxlbmd0aCAlIDIgPT09IDApXG4gICAgdGhpcy5oZWFkZXJzID0gW11cbiAgICB0aGlzLmhlYWRlcnNTaXplID0gMFxuXG4gICAgaWYgKHRoaXMuc2hvdWxkS2VlcEFsaXZlICYmIGNsaWVudFtrUGlwZWxpbmluZ10pIHtcbiAgICAgIGNvbnN0IGtlZXBBbGl2ZVRpbWVvdXQgPSB0aGlzLmtlZXBBbGl2ZSA/IHV0aWwucGFyc2VLZWVwQWxpdmVUaW1lb3V0KHRoaXMua2VlcEFsaXZlKSA6IG51bGxcblxuICAgICAgaWYgKGtlZXBBbGl2ZVRpbWVvdXQgIT0gbnVsbCkge1xuICAgICAgICBjb25zdCB0aW1lb3V0ID0gTWF0aC5taW4oXG4gICAgICAgICAga2VlcEFsaXZlVGltZW91dCAtIGNsaWVudFtrS2VlcEFsaXZlVGltZW91dFRocmVzaG9sZF0sXG4gICAgICAgICAgY2xpZW50W2tLZWVwQWxpdmVNYXhUaW1lb3V0XVxuICAgICAgICApXG4gICAgICAgIGlmICh0aW1lb3V0IDw9IDApIHtcbiAgICAgICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0gPSB0aW1lb3V0XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNsaWVudFtrS2VlcEFsaXZlVGltZW91dFZhbHVlXSA9IGNsaWVudFtrS2VlcEFsaXZlRGVmYXVsdFRpbWVvdXRdXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0b3AgbW9yZSByZXF1ZXN0cyBmcm9tIGJlaW5nIGRpc3BhdGNoZWQuXG4gICAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgICB9XG5cbiAgICBjb25zdCBwYXVzZSA9IHJlcXVlc3Qub25IZWFkZXJzKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHRoaXMucmVzdW1lLCBzdGF0dXNUZXh0KSA9PT0gZmFsc2VcblxuICAgIGlmIChyZXF1ZXN0LmFib3J0ZWQpIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCA9PT0gJ0hFQUQnKSB7XG4gICAgICByZXR1cm4gMVxuICAgIH1cblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICByZXR1cm4gMVxuICAgIH1cblxuICAgIGlmIChzb2NrZXRba0Jsb2NraW5nXSkge1xuICAgICAgc29ja2V0W2tCbG9ja2luZ10gPSBmYWxzZVxuICAgICAgcmVzdW1lKGNsaWVudClcbiAgICB9XG5cbiAgICByZXR1cm4gcGF1c2UgPyBjb25zdGFudHMuRVJST1IuUEFVU0VEIDogMFxuICB9XG5cbiAgb25Cb2R5IChidWYpIHtcbiAgICBjb25zdCB7IGNsaWVudCwgc29ja2V0LCBzdGF0dXNDb2RlLCBtYXhSZXNwb25zZVNpemUgfSA9IHRoaXNcblxuICAgIGlmIChzb2NrZXQuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICBhc3NlcnQocmVxdWVzdClcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbCh0aGlzLnRpbWVvdXRUeXBlLCBUSU1FT1VUX0JPRFkpXG4gICAgaWYgKHRoaXMudGltZW91dCkge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmICh0aGlzLnRpbWVvdXQucmVmcmVzaCkge1xuICAgICAgICB0aGlzLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgYXNzZXJ0KHN0YXR1c0NvZGUgPj0gMjAwKVxuXG4gICAgaWYgKG1heFJlc3BvbnNlU2l6ZSA+IC0xICYmIHRoaXMuYnl0ZXNSZWFkICsgYnVmLmxlbmd0aCA+IG1heFJlc3BvbnNlU2l6ZSkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IFJlc3BvbnNlRXhjZWVkZWRNYXhTaXplRXJyb3IoKSlcbiAgICAgIHJldHVybiAtMVxuICAgIH1cblxuICAgIHRoaXMuYnl0ZXNSZWFkICs9IGJ1Zi5sZW5ndGhcblxuICAgIGlmIChyZXF1ZXN0Lm9uRGF0YShidWYpID09PSBmYWxzZSkge1xuICAgICAgcmV0dXJuIGNvbnN0YW50cy5FUlJPUi5QQVVTRURcbiAgICB9XG4gIH1cblxuICBvbk1lc3NhZ2VDb21wbGV0ZSAoKSB7XG4gICAgY29uc3QgeyBjbGllbnQsIHNvY2tldCwgc3RhdHVzQ29kZSwgdXBncmFkZSwgaGVhZGVycywgY29udGVudExlbmd0aCwgYnl0ZXNSZWFkLCBzaG91bGRLZWVwQWxpdmUgfSA9IHRoaXNcblxuICAgIGlmIChzb2NrZXQuZGVzdHJveWVkICYmICghc3RhdHVzQ29kZSB8fCBzaG91bGRLZWVwQWxpdmUpKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICBpZiAodXBncmFkZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF1dXG4gICAgYXNzZXJ0KHJlcXVlc3QpXG5cbiAgICBhc3NlcnQoc3RhdHVzQ29kZSA+PSAxMDApXG5cbiAgICB0aGlzLnN0YXR1c0NvZGUgPSBudWxsXG4gICAgdGhpcy5zdGF0dXNUZXh0ID0gJydcbiAgICB0aGlzLmJ5dGVzUmVhZCA9IDBcbiAgICB0aGlzLmNvbnRlbnRMZW5ndGggPSAnJ1xuICAgIHRoaXMua2VlcEFsaXZlID0gJydcbiAgICB0aGlzLmNvbm5lY3Rpb24gPSAnJ1xuXG4gICAgYXNzZXJ0KHRoaXMuaGVhZGVycy5sZW5ndGggJSAyID09PSAwKVxuICAgIHRoaXMuaGVhZGVycyA9IFtdXG4gICAgdGhpcy5oZWFkZXJzU2l6ZSA9IDBcblxuICAgIGlmIChzdGF0dXNDb2RlIDwgMjAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dDogc2hvdWxkIGJlIGhhbmRsZWQgYnkgbGxodHRwPyAqL1xuICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0hFQUQnICYmIGNvbnRlbnRMZW5ndGggJiYgYnl0ZXNSZWFkICE9PSBwYXJzZUludChjb250ZW50TGVuZ3RoLCAxMCkpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBSZXNwb25zZUNvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gICAgICByZXR1cm4gLTFcbiAgICB9XG5cbiAgICByZXF1ZXN0Lm9uQ29tcGxldGUoaGVhZGVycylcblxuICAgIGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF0rK10gPSBudWxsXG5cbiAgICBpZiAoc29ja2V0W2tXcml0aW5nXSkge1xuICAgICAgYXNzZXJ0LnN0cmljdEVxdWFsKGNsaWVudFtrUnVubmluZ10sIDApXG4gICAgICAvLyBSZXNwb25zZSBjb21wbGV0ZWQgYmVmb3JlIHJlcXVlc3QuXG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdyZXNldCcpKVxuICAgICAgcmV0dXJuIGNvbnN0YW50cy5FUlJPUi5QQVVTRURcbiAgICB9IGVsc2UgaWYgKCFzaG91bGRLZWVwQWxpdmUpIHtcbiAgICAgIHV0aWwuZGVzdHJveShzb2NrZXQsIG5ldyBJbmZvcm1hdGlvbmFsRXJyb3IoJ3Jlc2V0JykpXG4gICAgICByZXR1cm4gY29uc3RhbnRzLkVSUk9SLlBBVVNFRFxuICAgIH0gZWxzZSBpZiAoc29ja2V0W2tSZXNldF0gJiYgY2xpZW50W2tSdW5uaW5nXSA9PT0gMCkge1xuICAgICAgLy8gRGVzdHJveSBzb2NrZXQgb25jZSBhbGwgcmVxdWVzdHMgaGF2ZSBjb21wbGV0ZWQuXG4gICAgICAvLyBUaGUgcmVxdWVzdCBhdCB0aGUgdGFpbCBvZiB0aGUgcGlwZWxpbmUgaXMgdGhlIG9uZVxuICAgICAgLy8gdGhhdCByZXF1ZXN0ZWQgcmVzZXQgYW5kIG5vIGZ1cnRoZXIgcmVxdWVzdHMgc2hvdWxkXG4gICAgICAvLyBoYXZlIGJlZW4gcXVldWVkIHNpbmNlIHRoZW4uXG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdyZXNldCcpKVxuICAgICAgcmV0dXJuIGNvbnN0YW50cy5FUlJPUi5QQVVTRURcbiAgICB9IGVsc2UgaWYgKGNsaWVudFtrUGlwZWxpbmluZ10gPT09IDEpIHtcbiAgICAgIC8vIFdlIG11c3Qgd2FpdCBhIGZ1bGwgZXZlbnQgbG9vcCBjeWNsZSB0byByZXVzZSB0aGlzIHNvY2tldCB0byBtYWtlIHN1cmVcbiAgICAgIC8vIHRoYXQgbm9uLXNwZWMgY29tcGxpYW50IHNlcnZlcnMgYXJlIG5vdCBjbG9zaW5nIHRoZSBjb25uZWN0aW9uIGV2ZW4gaWYgdGhleVxuICAgICAgLy8gc2FpZCB0aGV5IHdvbid0LlxuICAgICAgc2V0SW1tZWRpYXRlKHJlc3VtZSwgY2xpZW50KVxuICAgIH0gZWxzZSB7XG4gICAgICByZXN1bWUoY2xpZW50KVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBvblBhcnNlclRpbWVvdXQgKHBhcnNlcikge1xuICBjb25zdCB7IHNvY2tldCwgdGltZW91dFR5cGUsIGNsaWVudCB9ID0gcGFyc2VyXG5cbiAgLyogaXN0YW5idWwgaWdub3JlIGVsc2UgKi9cbiAgaWYgKHRpbWVvdXRUeXBlID09PSBUSU1FT1VUX0hFQURFUlMpIHtcbiAgICBpZiAoIXNvY2tldFtrV3JpdGluZ10gfHwgc29ja2V0LndyaXRhYmxlTmVlZERyYWluIHx8IGNsaWVudFtrUnVubmluZ10gPiAxKSB7XG4gICAgICBhc3NlcnQoIXBhcnNlci5wYXVzZWQsICdjYW5ub3QgYmUgcGF1c2VkIHdoaWxlIHdhaXRpbmcgZm9yIGhlYWRlcnMnKVxuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEhlYWRlcnNUaW1lb3V0RXJyb3IoKSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodGltZW91dFR5cGUgPT09IFRJTUVPVVRfQk9EWSkge1xuICAgIGlmICghcGFyc2VyLnBhdXNlZCkge1xuICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEJvZHlUaW1lb3V0RXJyb3IoKSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodGltZW91dFR5cGUgPT09IFRJTUVPVVRfSURMRSkge1xuICAgIGFzc2VydChjbGllbnRba1J1bm5pbmddID09PSAwICYmIGNsaWVudFtrS2VlcEFsaXZlVGltZW91dFZhbHVlXSlcbiAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdzb2NrZXQgaWRsZSB0aW1lb3V0JykpXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRSZWFkYWJsZSAoKSB7XG4gIGNvbnN0IHsgW2tQYXJzZXJdOiBwYXJzZXIgfSA9IHRoaXNcbiAgaWYgKHBhcnNlcikge1xuICAgIHBhcnNlci5yZWFkTW9yZSgpXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRFcnJvciAoZXJyKSB7XG4gIGNvbnN0IHsgW2tDbGllbnRdOiBjbGllbnQsIFtrUGFyc2VyXTogcGFyc2VyIH0gPSB0aGlzXG5cbiAgYXNzZXJ0KGVyci5jb2RlICE9PSAnRVJSX1RMU19DRVJUX0FMVE5BTUVfSU5WQUxJRCcpXG5cbiAgaWYgKGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSAhPT0gJ2gyJykge1xuICAgIC8vIE9uIE1hYyBPUywgd2UgZ2V0IGFuIEVDT05OUkVTRVQgZXZlbiBpZiB0aGVyZSBpcyBhIGZ1bGwgYm9keSB0byBiZSBmb3J3YXJkZWRcbiAgICAvLyB0byB0aGUgdXNlci5cbiAgICBpZiAoZXJyLmNvZGUgPT09ICdFQ09OTlJFU0VUJyAmJiBwYXJzZXIuc3RhdHVzQ29kZSAmJiAhcGFyc2VyLnNob3VsZEtlZXBBbGl2ZSkge1xuICAgICAgLy8gV2UgdHJlYXQgYWxsIGluY29taW5nIGRhdGEgc28gZm9yIGFzIGEgdmFsaWQgcmVzcG9uc2UuXG4gICAgICBwYXJzZXIub25NZXNzYWdlQ29tcGxldGUoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9XG5cbiAgdGhpc1trRXJyb3JdID0gZXJyXG5cbiAgb25FcnJvcih0aGlzW2tDbGllbnRdLCBlcnIpXG59XG5cbmZ1bmN0aW9uIG9uRXJyb3IgKGNsaWVudCwgZXJyKSB7XG4gIGlmIChcbiAgICBjbGllbnRba1J1bm5pbmddID09PSAwICYmXG4gICAgZXJyLmNvZGUgIT09ICdVTkRfRVJSX0lORk8nICYmXG4gICAgZXJyLmNvZGUgIT09ICdVTkRfRVJSX1NPQ0tFVCdcbiAgKSB7XG4gICAgLy8gRXJyb3IgaXMgbm90IGNhdXNlZCBieSBydW5uaW5nIHJlcXVlc3QgYW5kIG5vdCBhIHJlY292ZXJhYmxlXG4gICAgLy8gc29ja2V0IGVycm9yLlxuXG4gICAgYXNzZXJ0KGNsaWVudFtrUGVuZGluZ0lkeF0gPT09IGNsaWVudFtrUnVubmluZ0lkeF0pXG5cbiAgICBjb25zdCByZXF1ZXN0cyA9IGNsaWVudFtrUXVldWVdLnNwbGljZShjbGllbnRba1J1bm5pbmdJZHhdKVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcmVxdWVzdHMubGVuZ3RoOyBpKyspIHtcbiAgICAgIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0c1tpXVxuICAgICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICAgIH1cbiAgICBhc3NlcnQoY2xpZW50W2tTaXplXSA9PT0gMClcbiAgfVxufVxuXG5mdW5jdGlvbiBvblNvY2tldEVuZCAoKSB7XG4gIGNvbnN0IHsgW2tQYXJzZXJdOiBwYXJzZXIsIFtrQ2xpZW50XTogY2xpZW50IH0gPSB0aGlzXG5cbiAgaWYgKGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSAhPT0gJ2gyJykge1xuICAgIGlmIChwYXJzZXIuc3RhdHVzQ29kZSAmJiAhcGFyc2VyLnNob3VsZEtlZXBBbGl2ZSkge1xuICAgICAgLy8gV2UgdHJlYXQgYWxsIGluY29taW5nIGRhdGEgc28gZmFyIGFzIGEgdmFsaWQgcmVzcG9uc2UuXG4gICAgICBwYXJzZXIub25NZXNzYWdlQ29tcGxldGUoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9XG5cbiAgdXRpbC5kZXN0cm95KHRoaXMsIG5ldyBTb2NrZXRFcnJvcignb3RoZXIgc2lkZSBjbG9zZWQnLCB1dGlsLmdldFNvY2tldEluZm8odGhpcykpKVxufVxuXG5mdW5jdGlvbiBvblNvY2tldENsb3NlICgpIHtcbiAgY29uc3QgeyBba0NsaWVudF06IGNsaWVudCwgW2tQYXJzZXJdOiBwYXJzZXIgfSA9IHRoaXNcblxuICBpZiAoY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID09PSAnaDEnICYmIHBhcnNlcikge1xuICAgIGlmICghdGhpc1trRXJyb3JdICYmIHBhcnNlci5zdGF0dXNDb2RlICYmICFwYXJzZXIuc2hvdWxkS2VlcEFsaXZlKSB7XG4gICAgICAvLyBXZSB0cmVhdCBhbGwgaW5jb21pbmcgZGF0YSBzbyBmYXIgYXMgYSB2YWxpZCByZXNwb25zZS5cbiAgICAgIHBhcnNlci5vbk1lc3NhZ2VDb21wbGV0ZSgpXG4gICAgfVxuXG4gICAgdGhpc1trUGFyc2VyXS5kZXN0cm95KClcbiAgICB0aGlzW2tQYXJzZXJdID0gbnVsbFxuICB9XG5cbiAgY29uc3QgZXJyID0gdGhpc1trRXJyb3JdIHx8IG5ldyBTb2NrZXRFcnJvcignY2xvc2VkJywgdXRpbC5nZXRTb2NrZXRJbmZvKHRoaXMpKVxuXG4gIGNsaWVudFtrU29ja2V0XSA9IG51bGxcblxuICBpZiAoY2xpZW50LmRlc3Ryb3llZCkge1xuICAgIGFzc2VydChjbGllbnRba1BlbmRpbmddID09PSAwKVxuXG4gICAgLy8gRmFpbCBlbnRpcmUgcXVldWUuXG4gICAgY29uc3QgcmVxdWVzdHMgPSBjbGllbnRba1F1ZXVlXS5zcGxpY2UoY2xpZW50W2tSdW5uaW5nSWR4XSlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJlcXVlc3RzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBjb25zdCByZXF1ZXN0ID0gcmVxdWVzdHNbaV1cbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgICB9XG4gIH0gZWxzZSBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgZXJyLmNvZGUgIT09ICdVTkRfRVJSX0lORk8nKSB7XG4gICAgLy8gRmFpbCBoZWFkIG9mIHBpcGVsaW5lLlxuICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1J1bm5pbmdJZHhdXVxuICAgIGNsaWVudFtrUXVldWVdW2NsaWVudFtrUnVubmluZ0lkeF0rK10gPSBudWxsXG5cbiAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gIH1cblxuICBjbGllbnRba1BlbmRpbmdJZHhdID0gY2xpZW50W2tSdW5uaW5nSWR4XVxuXG4gIGFzc2VydChjbGllbnRba1J1bm5pbmddID09PSAwKVxuXG4gIGNsaWVudC5lbWl0KCdkaXNjb25uZWN0JywgY2xpZW50W2tVcmxdLCBbY2xpZW50XSwgZXJyKVxuXG4gIHJlc3VtZShjbGllbnQpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbm5lY3QgKGNsaWVudCkge1xuICBhc3NlcnQoIWNsaWVudFtrQ29ubmVjdGluZ10pXG4gIGFzc2VydCghY2xpZW50W2tTb2NrZXRdKVxuXG4gIGxldCB7IGhvc3QsIGhvc3RuYW1lLCBwcm90b2NvbCwgcG9ydCB9ID0gY2xpZW50W2tVcmxdXG5cbiAgLy8gUmVzb2x2ZSBpcHY2XG4gIGlmIChob3N0bmFtZVswXSA9PT0gJ1snKSB7XG4gICAgY29uc3QgaWR4ID0gaG9zdG5hbWUuaW5kZXhPZignXScpXG5cbiAgICBhc3NlcnQoaWR4ICE9PSAtMSlcbiAgICBjb25zdCBpcCA9IGhvc3RuYW1lLnN1YnN0cmluZygxLCBpZHgpXG5cbiAgICBhc3NlcnQobmV0LmlzSVAoaXApKVxuICAgIGhvc3RuYW1lID0gaXBcbiAgfVxuXG4gIGNsaWVudFtrQ29ubmVjdGluZ10gPSB0cnVlXG5cbiAgaWYgKGNoYW5uZWxzLmJlZm9yZUNvbm5lY3QuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICBjaGFubmVscy5iZWZvcmVDb25uZWN0LnB1Ymxpc2goe1xuICAgICAgY29ubmVjdFBhcmFtczoge1xuICAgICAgICBob3N0LFxuICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgIHBvcnQsXG4gICAgICAgIHNlcnZlcm5hbWU6IGNsaWVudFtrU2VydmVyTmFtZV0sXG4gICAgICAgIGxvY2FsQWRkcmVzczogY2xpZW50W2tMb2NhbEFkZHJlc3NdXG4gICAgICB9LFxuICAgICAgY29ubmVjdG9yOiBjbGllbnRba0Nvbm5lY3Rvcl1cbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzb2NrZXQgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjbGllbnRba0Nvbm5lY3Rvcl0oe1xuICAgICAgICBob3N0LFxuICAgICAgICBob3N0bmFtZSxcbiAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgIHBvcnQsXG4gICAgICAgIHNlcnZlcm5hbWU6IGNsaWVudFtrU2VydmVyTmFtZV0sXG4gICAgICAgIGxvY2FsQWRkcmVzczogY2xpZW50W2tMb2NhbEFkZHJlc3NdXG4gICAgICB9LCAoZXJyLCBzb2NrZXQpID0+IHtcbiAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmVzb2x2ZShzb2NrZXQpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSlcblxuICAgIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0Lm9uKCdlcnJvcicsICgpID0+IHt9KSwgbmV3IENsaWVudERlc3Ryb3llZEVycm9yKCkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjbGllbnRba0Nvbm5lY3RpbmddID0gZmFsc2VcblxuICAgIGFzc2VydChzb2NrZXQpXG5cbiAgICBjb25zdCBpc0gyID0gc29ja2V0LmFscG5Qcm90b2NvbCA9PT0gJ2gyJ1xuICAgIGlmIChpc0gyKSB7XG4gICAgICBpZiAoIWgyRXhwZXJpbWVudGFsV2FybmVkKSB7XG4gICAgICAgIGgyRXhwZXJpbWVudGFsV2FybmVkID0gdHJ1ZVxuICAgICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKCdIMiBzdXBwb3J0IGlzIGV4cGVyaW1lbnRhbCwgZXhwZWN0IHRoZW0gdG8gY2hhbmdlIGF0IGFueSB0aW1lLicsIHtcbiAgICAgICAgICBjb2RlOiAnVU5ESUNJLUgyJ1xuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBjb25zdCBzZXNzaW9uID0gaHR0cDIuY29ubmVjdChjbGllbnRba1VybF0sIHtcbiAgICAgICAgY3JlYXRlQ29ubmVjdGlvbjogKCkgPT4gc29ja2V0LFxuICAgICAgICBwZWVyTWF4Q29uY3VycmVudFN0cmVhbXM6IGNsaWVudFtrSFRUUDJTZXNzaW9uU3RhdGVdLm1heENvbmN1cnJlbnRTdHJlYW1zXG4gICAgICB9KVxuXG4gICAgICBjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gPSAnaDInXG4gICAgICBzZXNzaW9uW2tDbGllbnRdID0gY2xpZW50XG4gICAgICBzZXNzaW9uW2tTb2NrZXRdID0gc29ja2V0XG4gICAgICBzZXNzaW9uLm9uKCdlcnJvcicsIG9uSHR0cDJTZXNzaW9uRXJyb3IpXG4gICAgICBzZXNzaW9uLm9uKCdmcmFtZUVycm9yJywgb25IdHRwMkZyYW1lRXJyb3IpXG4gICAgICBzZXNzaW9uLm9uKCdlbmQnLCBvbkh0dHAyU2Vzc2lvbkVuZClcbiAgICAgIHNlc3Npb24ub24oJ2dvYXdheScsIG9uSFRUUDJHb0F3YXkpXG4gICAgICBzZXNzaW9uLm9uKCdjbG9zZScsIG9uU29ja2V0Q2xvc2UpXG4gICAgICBzZXNzaW9uLnVucmVmKClcblxuICAgICAgY2xpZW50W2tIVFRQMlNlc3Npb25dID0gc2Vzc2lvblxuICAgICAgc29ja2V0W2tIVFRQMlNlc3Npb25dID0gc2Vzc2lvblxuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoIWxsaHR0cEluc3RhbmNlKSB7XG4gICAgICAgIGxsaHR0cEluc3RhbmNlID0gYXdhaXQgbGxodHRwUHJvbWlzZVxuICAgICAgICBsbGh0dHBQcm9taXNlID0gbnVsbFxuICAgICAgfVxuXG4gICAgICBzb2NrZXRba05vUmVmXSA9IGZhbHNlXG4gICAgICBzb2NrZXRba1dyaXRpbmddID0gZmFsc2VcbiAgICAgIHNvY2tldFtrUmVzZXRdID0gZmFsc2VcbiAgICAgIHNvY2tldFtrQmxvY2tpbmddID0gZmFsc2VcbiAgICAgIHNvY2tldFtrUGFyc2VyXSA9IG5ldyBQYXJzZXIoY2xpZW50LCBzb2NrZXQsIGxsaHR0cEluc3RhbmNlKVxuICAgIH1cblxuICAgIHNvY2tldFtrQ291bnRlcl0gPSAwXG4gICAgc29ja2V0W2tNYXhSZXF1ZXN0c10gPSBjbGllbnRba01heFJlcXVlc3RzXVxuICAgIHNvY2tldFtrQ2xpZW50XSA9IGNsaWVudFxuICAgIHNvY2tldFtrRXJyb3JdID0gbnVsbFxuXG4gICAgc29ja2V0XG4gICAgICAub24oJ2Vycm9yJywgb25Tb2NrZXRFcnJvcilcbiAgICAgIC5vbigncmVhZGFibGUnLCBvblNvY2tldFJlYWRhYmxlKVxuICAgICAgLm9uKCdlbmQnLCBvblNvY2tldEVuZClcbiAgICAgIC5vbignY2xvc2UnLCBvblNvY2tldENsb3NlKVxuXG4gICAgY2xpZW50W2tTb2NrZXRdID0gc29ja2V0XG5cbiAgICBpZiAoY2hhbm5lbHMuY29ubmVjdGVkLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgICBjaGFubmVscy5jb25uZWN0ZWQucHVibGlzaCh7XG4gICAgICAgIGNvbm5lY3RQYXJhbXM6IHtcbiAgICAgICAgICBob3N0LFxuICAgICAgICAgIGhvc3RuYW1lLFxuICAgICAgICAgIHByb3RvY29sLFxuICAgICAgICAgIHBvcnQsXG4gICAgICAgICAgc2VydmVybmFtZTogY2xpZW50W2tTZXJ2ZXJOYW1lXSxcbiAgICAgICAgICBsb2NhbEFkZHJlc3M6IGNsaWVudFtrTG9jYWxBZGRyZXNzXVxuICAgICAgICB9LFxuICAgICAgICBjb25uZWN0b3I6IGNsaWVudFtrQ29ubmVjdG9yXSxcbiAgICAgICAgc29ja2V0XG4gICAgICB9KVxuICAgIH1cbiAgICBjbGllbnQuZW1pdCgnY29ubmVjdCcsIGNsaWVudFtrVXJsXSwgW2NsaWVudF0pXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmIChjbGllbnQuZGVzdHJveWVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjbGllbnRba0Nvbm5lY3RpbmddID0gZmFsc2VcblxuICAgIGlmIChjaGFubmVscy5jb25uZWN0RXJyb3IuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgIGNoYW5uZWxzLmNvbm5lY3RFcnJvci5wdWJsaXNoKHtcbiAgICAgICAgY29ubmVjdFBhcmFtczoge1xuICAgICAgICAgIGhvc3QsXG4gICAgICAgICAgaG9zdG5hbWUsXG4gICAgICAgICAgcHJvdG9jb2wsXG4gICAgICAgICAgcG9ydCxcbiAgICAgICAgICBzZXJ2ZXJuYW1lOiBjbGllbnRba1NlcnZlck5hbWVdLFxuICAgICAgICAgIGxvY2FsQWRkcmVzczogY2xpZW50W2tMb2NhbEFkZHJlc3NdXG4gICAgICAgIH0sXG4gICAgICAgIGNvbm5lY3RvcjogY2xpZW50W2tDb25uZWN0b3JdLFxuICAgICAgICBlcnJvcjogZXJyXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChlcnIuY29kZSA9PT0gJ0VSUl9UTFNfQ0VSVF9BTFROQU1FX0lOVkFMSUQnKSB7XG4gICAgICBhc3NlcnQoY2xpZW50W2tSdW5uaW5nXSA9PT0gMClcbiAgICAgIHdoaWxlIChjbGllbnRba1BlbmRpbmddID4gMCAmJiBjbGllbnRba1F1ZXVlXVtjbGllbnRba1BlbmRpbmdJZHhdXS5zZXJ2ZXJuYW1lID09PSBjbGllbnRba1NlcnZlck5hbWVdKSB7XG4gICAgICAgIGNvbnN0IHJlcXVlc3QgPSBjbGllbnRba1F1ZXVlXVtjbGllbnRba1BlbmRpbmdJZHhdKytdXG4gICAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgb25FcnJvcihjbGllbnQsIGVycilcbiAgICB9XG5cbiAgICBjbGllbnQuZW1pdCgnY29ubmVjdGlvbkVycm9yJywgY2xpZW50W2tVcmxdLCBbY2xpZW50XSwgZXJyKVxuICB9XG5cbiAgcmVzdW1lKGNsaWVudClcbn1cblxuZnVuY3Rpb24gZW1pdERyYWluIChjbGllbnQpIHtcbiAgY2xpZW50W2tOZWVkRHJhaW5dID0gMFxuICBjbGllbnQuZW1pdCgnZHJhaW4nLCBjbGllbnRba1VybF0sIFtjbGllbnRdKVxufVxuXG5mdW5jdGlvbiByZXN1bWUgKGNsaWVudCwgc3luYykge1xuICBpZiAoY2xpZW50W2tSZXN1bWluZ10gPT09IDIpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNsaWVudFtrUmVzdW1pbmddID0gMlxuXG4gIF9yZXN1bWUoY2xpZW50LCBzeW5jKVxuICBjbGllbnRba1Jlc3VtaW5nXSA9IDBcblxuICBpZiAoY2xpZW50W2tSdW5uaW5nSWR4XSA+IDI1Nikge1xuICAgIGNsaWVudFtrUXVldWVdLnNwbGljZSgwLCBjbGllbnRba1J1bm5pbmdJZHhdKVxuICAgIGNsaWVudFtrUGVuZGluZ0lkeF0gLT0gY2xpZW50W2tSdW5uaW5nSWR4XVxuICAgIGNsaWVudFtrUnVubmluZ0lkeF0gPSAwXG4gIH1cbn1cblxuZnVuY3Rpb24gX3Jlc3VtZSAoY2xpZW50LCBzeW5jKSB7XG4gIHdoaWxlICh0cnVlKSB7XG4gICAgaWYgKGNsaWVudC5kZXN0cm95ZWQpIHtcbiAgICAgIGFzc2VydChjbGllbnRba1BlbmRpbmddID09PSAwKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNsaWVudFtrQ2xvc2VkUmVzb2x2ZV0gJiYgIWNsaWVudFtrU2l6ZV0pIHtcbiAgICAgIGNsaWVudFtrQ2xvc2VkUmVzb2x2ZV0oKVxuICAgICAgY2xpZW50W2tDbG9zZWRSZXNvbHZlXSA9IG51bGxcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHNvY2tldCA9IGNsaWVudFtrU29ja2V0XVxuXG4gICAgaWYgKHNvY2tldCAmJiAhc29ja2V0LmRlc3Ryb3llZCAmJiBzb2NrZXQuYWxwblByb3RvY29sICE9PSAnaDInKSB7XG4gICAgICBpZiAoY2xpZW50W2tTaXplXSA9PT0gMCkge1xuICAgICAgICBpZiAoIXNvY2tldFtrTm9SZWZdICYmIHNvY2tldC51bnJlZikge1xuICAgICAgICAgIHNvY2tldC51bnJlZigpXG4gICAgICAgICAgc29ja2V0W2tOb1JlZl0gPSB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoc29ja2V0W2tOb1JlZl0gJiYgc29ja2V0LnJlZikge1xuICAgICAgICBzb2NrZXQucmVmKClcbiAgICAgICAgc29ja2V0W2tOb1JlZl0gPSBmYWxzZVxuICAgICAgfVxuXG4gICAgICBpZiAoY2xpZW50W2tTaXplXSA9PT0gMCkge1xuICAgICAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXRUeXBlICE9PSBUSU1FT1VUX0lETEUpIHtcbiAgICAgICAgICBzb2NrZXRba1BhcnNlcl0uc2V0VGltZW91dChjbGllbnRba0tlZXBBbGl2ZVRpbWVvdXRWYWx1ZV0sIFRJTUVPVVRfSURMRSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChjbGllbnRba1J1bm5pbmddID4gMCAmJiBzb2NrZXRba1BhcnNlcl0uc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgICBpZiAoc29ja2V0W2tQYXJzZXJdLnRpbWVvdXRUeXBlICE9PSBUSU1FT1VUX0hFQURFUlMpIHtcbiAgICAgICAgICBjb25zdCByZXF1ZXN0ID0gY2xpZW50W2tRdWV1ZV1bY2xpZW50W2tSdW5uaW5nSWR4XV1cbiAgICAgICAgICBjb25zdCBoZWFkZXJzVGltZW91dCA9IHJlcXVlc3QuaGVhZGVyc1RpbWVvdXQgIT0gbnVsbFxuICAgICAgICAgICAgPyByZXF1ZXN0LmhlYWRlcnNUaW1lb3V0XG4gICAgICAgICAgICA6IGNsaWVudFtrSGVhZGVyc1RpbWVvdXRdXG4gICAgICAgICAgc29ja2V0W2tQYXJzZXJdLnNldFRpbWVvdXQoaGVhZGVyc1RpbWVvdXQsIFRJTUVPVVRfSEVBREVSUylcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjbGllbnRba0J1c3ldKSB7XG4gICAgICBjbGllbnRba05lZWREcmFpbl0gPSAyXG4gICAgfSBlbHNlIGlmIChjbGllbnRba05lZWREcmFpbl0gPT09IDIpIHtcbiAgICAgIGlmIChzeW5jKSB7XG4gICAgICAgIGNsaWVudFtrTmVlZERyYWluXSA9IDFcbiAgICAgICAgcHJvY2Vzcy5uZXh0VGljayhlbWl0RHJhaW4sIGNsaWVudClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVtaXREcmFpbihjbGllbnQpXG4gICAgICB9XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIGlmIChjbGllbnRba1BlbmRpbmddID09PSAwKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+PSAoY2xpZW50W2tQaXBlbGluaW5nXSB8fCAxKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcmVxdWVzdCA9IGNsaWVudFtrUXVldWVdW2NsaWVudFtrUGVuZGluZ0lkeF1dXG5cbiAgICBpZiAoY2xpZW50W2tVcmxdLnByb3RvY29sID09PSAnaHR0cHM6JyAmJiBjbGllbnRba1NlcnZlck5hbWVdICE9PSByZXF1ZXN0LnNlcnZlcm5hbWUpIHtcbiAgICAgIGlmIChjbGllbnRba1J1bm5pbmddID4gMCkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgY2xpZW50W2tTZXJ2ZXJOYW1lXSA9IHJlcXVlc3Quc2VydmVybmFtZVxuXG4gICAgICBpZiAoc29ja2V0ICYmIHNvY2tldC5zZXJ2ZXJuYW1lICE9PSByZXF1ZXN0LnNlcnZlcm5hbWUpIHtcbiAgICAgICAgdXRpbC5kZXN0cm95KHNvY2tldCwgbmV3IEluZm9ybWF0aW9uYWxFcnJvcignc2VydmVybmFtZSBjaGFuZ2VkJykpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChjbGllbnRba0Nvbm5lY3RpbmddKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIXNvY2tldCAmJiAhY2xpZW50W2tIVFRQMlNlc3Npb25dKSB7XG4gICAgICBjb25uZWN0KGNsaWVudClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChzb2NrZXQuZGVzdHJveWVkIHx8IHNvY2tldFtrV3JpdGluZ10gfHwgc29ja2V0W2tSZXNldF0gfHwgc29ja2V0W2tCbG9ja2luZ10pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjbGllbnRba1J1bm5pbmddID4gMCAmJiAhcmVxdWVzdC5pZGVtcG90ZW50KSB7XG4gICAgICAvLyBOb24taWRlbXBvdGVudCByZXF1ZXN0IGNhbm5vdCBiZSByZXRyaWVkLlxuICAgICAgLy8gRW5zdXJlIHRoYXQgbm8gb3RoZXIgcmVxdWVzdHMgYXJlIGluZmxpZ2h0IGFuZFxuICAgICAgLy8gY291bGQgY2F1c2UgZmFpbHVyZS5cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChjbGllbnRba1J1bm5pbmddID4gMCAmJiAocmVxdWVzdC51cGdyYWRlIHx8IHJlcXVlc3QubWV0aG9kID09PSAnQ09OTkVDVCcpKSB7XG4gICAgICAvLyBEb24ndCBkaXNwYXRjaCBhbiB1cGdyYWRlIHVudGlsIGFsbCBwcmVjZWRpbmcgcmVxdWVzdHMgaGF2ZSBjb21wbGV0ZWQuXG4gICAgICAvLyBBIG1pc2JlaGF2aW5nIHNlcnZlciBtaWdodCB1cGdyYWRlIHRoZSBjb25uZWN0aW9uIGJlZm9yZSBhbGwgcGlwZWxpbmVkXG4gICAgICAvLyByZXF1ZXN0IGhhcyBjb21wbGV0ZWQuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoY2xpZW50W2tSdW5uaW5nXSA+IDAgJiYgdXRpbC5ib2R5TGVuZ3RoKHJlcXVlc3QuYm9keSkgIT09IDAgJiZcbiAgICAgICh1dGlsLmlzU3RyZWFtKHJlcXVlc3QuYm9keSkgfHwgdXRpbC5pc0FzeW5jSXRlcmFibGUocmVxdWVzdC5ib2R5KSkpIHtcbiAgICAgIC8vIFJlcXVlc3Qgd2l0aCBzdHJlYW0gb3IgaXRlcmF0b3IgYm9keSBjYW4gZXJyb3Igd2hpbGUgb3RoZXIgcmVxdWVzdHNcbiAgICAgIC8vIGFyZSBpbmZsaWdodCBhbmQgaW5kaXJlY3RseSBlcnJvciB0aG9zZSBhcyB3ZWxsLlxuICAgICAgLy8gRW5zdXJlIHRoaXMgZG9lc24ndCBoYXBwZW4gYnkgd2FpdGluZyBmb3IgaW5mbGlnaHRcbiAgICAgIC8vIHRvIGNvbXBsZXRlIGJlZm9yZSBkaXNwYXRjaGluZy5cblxuICAgICAgLy8gUmVxdWVzdCB3aXRoIHN0cmVhbSBvciBpdGVyYXRvciBib2R5IGNhbm5vdCBiZSByZXRyaWVkLlxuICAgICAgLy8gRW5zdXJlIHRoYXQgbm8gb3RoZXIgcmVxdWVzdHMgYXJlIGluZmxpZ2h0IGFuZFxuICAgICAgLy8gY291bGQgY2F1c2UgZmFpbHVyZS5cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghcmVxdWVzdC5hYm9ydGVkICYmIHdyaXRlKGNsaWVudCwgcmVxdWVzdCkpIHtcbiAgICAgIGNsaWVudFtrUGVuZGluZ0lkeF0rK1xuICAgIH0gZWxzZSB7XG4gICAgICBjbGllbnRba1F1ZXVlXS5zcGxpY2UoY2xpZW50W2tQZW5kaW5nSWR4XSwgMSlcbiAgICB9XG4gIH1cbn1cblxuLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzcyMzAjc2VjdGlvbi0zLjMuMlxuZnVuY3Rpb24gc2hvdWxkU2VuZENvbnRlbnRMZW5ndGggKG1ldGhvZCkge1xuICByZXR1cm4gbWV0aG9kICE9PSAnR0VUJyAmJiBtZXRob2QgIT09ICdIRUFEJyAmJiBtZXRob2QgIT09ICdPUFRJT05TJyAmJiBtZXRob2QgIT09ICdUUkFDRScgJiYgbWV0aG9kICE9PSAnQ09OTkVDVCdcbn1cblxuZnVuY3Rpb24gd3JpdGUgKGNsaWVudCwgcmVxdWVzdCkge1xuICBpZiAoY2xpZW50W2tIVFRQQ29ublZlcnNpb25dID09PSAnaDInKSB7XG4gICAgd3JpdGVIMihjbGllbnQsIGNsaWVudFtrSFRUUDJTZXNzaW9uXSwgcmVxdWVzdClcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHsgYm9keSwgbWV0aG9kLCBwYXRoLCBob3N0LCB1cGdyYWRlLCBoZWFkZXJzLCBibG9ja2luZywgcmVzZXQgfSA9IHJlcXVlc3RcblxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy4xXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjJcbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuNVxuXG4gIC8vIFNlbmRpbmcgYSBwYXlsb2FkIGJvZHkgb24gYSByZXF1ZXN0IHRoYXQgZG9lcyBub3RcbiAgLy8gZXhwZWN0IGl0IGNhbiBjYXVzZSB1bmRlZmluZWQgYmVoYXZpb3Igb24gc29tZVxuICAvLyBzZXJ2ZXJzIGFuZCBjb3JydXB0IGNvbm5lY3Rpb24gc3RhdGUuIERvIG5vdFxuICAvLyByZS11c2UgdGhlIGNvbm5lY3Rpb24gZm9yIGZ1cnRoZXIgcmVxdWVzdHMuXG5cbiAgY29uc3QgZXhwZWN0c1BheWxvYWQgPSAoXG4gICAgbWV0aG9kID09PSAnUFVUJyB8fFxuICAgIG1ldGhvZCA9PT0gJ1BPU1QnIHx8XG4gICAgbWV0aG9kID09PSAnUEFUQ0gnXG4gIClcblxuICBpZiAoYm9keSAmJiB0eXBlb2YgYm9keS5yZWFkID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gVHJ5IHRvIHJlYWQgRU9GIGluIG9yZGVyIHRvIGdldCBsZW5ndGguXG4gICAgYm9keS5yZWFkKDApXG4gIH1cblxuICBjb25zdCBib2R5TGVuZ3RoID0gdXRpbC5ib2R5TGVuZ3RoKGJvZHkpXG5cbiAgbGV0IGNvbnRlbnRMZW5ndGggPSBib2R5TGVuZ3RoXG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT09IG51bGwpIHtcbiAgICBjb250ZW50TGVuZ3RoID0gcmVxdWVzdC5jb250ZW50TGVuZ3RoXG4gIH1cblxuICBpZiAoY29udGVudExlbmd0aCA9PT0gMCAmJiAhZXhwZWN0c1BheWxvYWQpIHtcbiAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMCNzZWN0aW9uLTMuMy4yXG4gICAgLy8gQSB1c2VyIGFnZW50IFNIT1VMRCBOT1Qgc2VuZCBhIENvbnRlbnQtTGVuZ3RoIGhlYWRlciBmaWVsZCB3aGVuXG4gICAgLy8gdGhlIHJlcXVlc3QgbWVzc2FnZSBkb2VzIG5vdCBjb250YWluIGEgcGF5bG9hZCBib2R5IGFuZCB0aGUgbWV0aG9kXG4gICAgLy8gc2VtYW50aWNzIGRvIG5vdCBhbnRpY2lwYXRlIHN1Y2ggYSBib2R5LlxuXG4gICAgY29udGVudExlbmd0aCA9IG51bGxcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8yMDQ2XG4gIC8vIEEgdXNlciBhZ2VudCBtYXkgc2VuZCBhIENvbnRlbnQtTGVuZ3RoIGhlYWRlciB3aXRoIDAgdmFsdWUsIHRoaXMgc2hvdWxkIGJlIGFsbG93ZWQuXG4gIGlmIChzaG91bGRTZW5kQ29udGVudExlbmd0aChtZXRob2QpICYmIGNvbnRlbnRMZW5ndGggPiAwICYmIHJlcXVlc3QuY29udGVudExlbmd0aCAhPT0gbnVsbCAmJiByZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT09IGNvbnRlbnRMZW5ndGgpIHtcbiAgICBpZiAoY2xpZW50W2tTdHJpY3RDb250ZW50TGVuZ3RoXSkge1xuICAgICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgbmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcHJvY2Vzcy5lbWl0V2FybmluZyhuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gIH1cblxuICBjb25zdCBzb2NrZXQgPSBjbGllbnRba1NvY2tldF1cblxuICB0cnkge1xuICAgIHJlcXVlc3Qub25Db25uZWN0KChlcnIpID0+IHtcbiAgICAgIGlmIChyZXF1ZXN0LmFib3J0ZWQgfHwgcmVxdWVzdC5jb21wbGV0ZWQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVyciB8fCBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpKVxuXG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBuZXcgSW5mb3JtYXRpb25hbEVycm9yKCdhYm9ydGVkJykpXG4gICAgfSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgZXJyKVxuICB9XG5cbiAgaWYgKHJlcXVlc3QuYWJvcnRlZCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKG1ldGhvZCA9PT0gJ0hFQUQnKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL21jb2xsaW5hL3VuZGljaS9pc3N1ZXMvMjU4XG4gICAgLy8gQ2xvc2UgYWZ0ZXIgYSBIRUFEIHJlcXVlc3QgdG8gaW50ZXJvcCB3aXRoIG1pc2JlaGF2aW5nIHNlcnZlcnNcbiAgICAvLyB0aGF0IG1heSBzZW5kIGEgYm9keSBpbiB0aGUgcmVzcG9uc2UuXG5cbiAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgfVxuXG4gIGlmICh1cGdyYWRlIHx8IG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgLy8gT24gQ09OTkVDVCBvciB1cGdyYWRlLCBibG9jayBwaXBlbGluZSBmcm9tIGRpc3BhdGNoaW5nIGZ1cnRoZXJcbiAgICAvLyByZXF1ZXN0cyBvbiB0aGlzIGNvbm5lY3Rpb24uXG5cbiAgICBzb2NrZXRba1Jlc2V0XSA9IHRydWVcbiAgfVxuXG4gIGlmIChyZXNldCAhPSBudWxsKSB7XG4gICAgc29ja2V0W2tSZXNldF0gPSByZXNldFxuICB9XG5cbiAgaWYgKGNsaWVudFtrTWF4UmVxdWVzdHNdICYmIHNvY2tldFtrQ291bnRlcl0rKyA+PSBjbGllbnRba01heFJlcXVlc3RzXSkge1xuICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICB9XG5cbiAgaWYgKGJsb2NraW5nKSB7XG4gICAgc29ja2V0W2tCbG9ja2luZ10gPSB0cnVlXG4gIH1cblxuICBsZXQgaGVhZGVyID0gYCR7bWV0aG9kfSAke3BhdGh9IEhUVFAvMS4xXFxyXFxuYFxuXG4gIGlmICh0eXBlb2YgaG9zdCA9PT0gJ3N0cmluZycpIHtcbiAgICBoZWFkZXIgKz0gYGhvc3Q6ICR7aG9zdH1cXHJcXG5gXG4gIH0gZWxzZSB7XG4gICAgaGVhZGVyICs9IGNsaWVudFtrSG9zdEhlYWRlcl1cbiAgfVxuXG4gIGlmICh1cGdyYWRlKSB7XG4gICAgaGVhZGVyICs9IGBjb25uZWN0aW9uOiB1cGdyYWRlXFxyXFxudXBncmFkZTogJHt1cGdyYWRlfVxcclxcbmBcbiAgfSBlbHNlIGlmIChjbGllbnRba1BpcGVsaW5pbmddICYmICFzb2NrZXRba1Jlc2V0XSkge1xuICAgIGhlYWRlciArPSAnY29ubmVjdGlvbjoga2VlcC1hbGl2ZVxcclxcbidcbiAgfSBlbHNlIHtcbiAgICBoZWFkZXIgKz0gJ2Nvbm5lY3Rpb246IGNsb3NlXFxyXFxuJ1xuICB9XG5cbiAgaWYgKGhlYWRlcnMpIHtcbiAgICBoZWFkZXIgKz0gaGVhZGVyc1xuICB9XG5cbiAgaWYgKGNoYW5uZWxzLnNlbmRIZWFkZXJzLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgY2hhbm5lbHMuc2VuZEhlYWRlcnMucHVibGlzaCh7IHJlcXVlc3QsIGhlYWRlcnM6IGhlYWRlciwgc29ja2V0IH0pXG4gIH1cblxuICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogYXNzZXJ0aW9uICovXG4gIGlmICghYm9keSB8fCBib2R5TGVuZ3RoID09PSAwKSB7XG4gICAgaWYgKGNvbnRlbnRMZW5ndGggPT09IDApIHtcbiAgICAgIHNvY2tldC53cml0ZShgJHtoZWFkZXJ9Y29udGVudC1sZW5ndGg6IDBcXHJcXG5cXHJcXG5gLCAnbGF0aW4xJylcbiAgICB9IGVsc2Uge1xuICAgICAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggPT09IG51bGwsICdubyBib2R5IG11c3Qgbm90IGhhdmUgY29udGVudCBsZW5ndGgnKVxuICAgICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1cXHJcXG5gLCAnbGF0aW4xJylcbiAgICB9XG4gICAgcmVxdWVzdC5vblJlcXVlc3RTZW50KClcbiAgfSBlbHNlIGlmICh1dGlsLmlzQnVmZmVyKGJvZHkpKSB7XG4gICAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggPT09IGJvZHkuYnl0ZUxlbmd0aCwgJ2J1ZmZlciBib2R5IG11c3QgaGF2ZSBjb250ZW50IGxlbmd0aCcpXG5cbiAgICBzb2NrZXQuY29yaygpXG4gICAgc29ja2V0LndyaXRlKGAke2hlYWRlcn1jb250ZW50LWxlbmd0aDogJHtjb250ZW50TGVuZ3RofVxcclxcblxcclxcbmAsICdsYXRpbjEnKVxuICAgIHNvY2tldC53cml0ZShib2R5KVxuICAgIHNvY2tldC51bmNvcmsoKVxuICAgIHJlcXVlc3Qub25Cb2R5U2VudChib2R5KVxuICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG4gICAgaWYgKCFleHBlY3RzUGF5bG9hZCkge1xuICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgfVxuICB9IGVsc2UgaWYgKHV0aWwuaXNCbG9iTGlrZShib2R5KSkge1xuICAgIGlmICh0eXBlb2YgYm9keS5zdHJlYW0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHdyaXRlSXRlcmFibGUoeyBib2R5OiBib2R5LnN0cmVhbSgpLCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB3cml0ZUJsb2IoeyBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KVxuICAgIH1cbiAgfSBlbHNlIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgd3JpdGVTdHJlYW0oeyBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KVxuICB9IGVsc2UgaWYgKHV0aWwuaXNJdGVyYWJsZShib2R5KSkge1xuICAgIHdyaXRlSXRlcmFibGUoeyBib2R5LCBjbGllbnQsIHJlcXVlc3QsIHNvY2tldCwgY29udGVudExlbmd0aCwgaGVhZGVyLCBleHBlY3RzUGF5bG9hZCB9KVxuICB9IGVsc2Uge1xuICAgIGFzc2VydChmYWxzZSlcbiAgfVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIHdyaXRlSDIgKGNsaWVudCwgc2Vzc2lvbiwgcmVxdWVzdCkge1xuICBjb25zdCB7IGJvZHksIG1ldGhvZCwgcGF0aCwgaG9zdCwgdXBncmFkZSwgZXhwZWN0Q29udGludWUsIHNpZ25hbCwgaGVhZGVyczogcmVxSGVhZGVycyB9ID0gcmVxdWVzdFxuXG4gIGxldCBoZWFkZXJzXG4gIGlmICh0eXBlb2YgcmVxSGVhZGVycyA9PT0gJ3N0cmluZycpIGhlYWRlcnMgPSBSZXF1ZXN0W2tIVFRQMkNvcHlIZWFkZXJzXShyZXFIZWFkZXJzLnRyaW0oKSlcbiAgZWxzZSBoZWFkZXJzID0gcmVxSGVhZGVyc1xuXG4gIGlmICh1cGdyYWRlKSB7XG4gICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgbmV3IEVycm9yKCdVcGdyYWRlIG5vdCBzdXBwb3J0ZWQgZm9yIEgyJykpXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICB0cnkge1xuICAgIC8vIFRPRE8oSFRUUC8yKTogU2hvdWxkIHdlIGNhbGwgb25Db25uZWN0IGltbWVkaWF0ZWx5IG9yIG9uIHN0cmVhbSByZWFkeSBldmVudD9cbiAgICByZXF1ZXN0Lm9uQ29ubmVjdCgoZXJyKSA9PiB7XG4gICAgICBpZiAocmVxdWVzdC5hYm9ydGVkIHx8IHJlcXVlc3QuY29tcGxldGVkKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIgfHwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcbiAgICB9KVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICBlcnJvclJlcXVlc3QoY2xpZW50LCByZXF1ZXN0LCBlcnIpXG4gIH1cblxuICBpZiAocmVxdWVzdC5hYm9ydGVkKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICAvKiogQHR5cGUge2ltcG9ydCgnbm9kZTpodHRwMicpLkNsaWVudEh0dHAyU3RyZWFtfSAqL1xuICBsZXQgc3RyZWFtXG4gIGNvbnN0IGgyU3RhdGUgPSBjbGllbnRba0hUVFAyU2Vzc2lvblN0YXRlXVxuXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX0FVVEhPUklUWV0gPSBob3N0IHx8IGNsaWVudFtrSG9zdF1cbiAgaGVhZGVyc1tIVFRQMl9IRUFERVJfTUVUSE9EXSA9IG1ldGhvZFxuXG4gIGlmIChtZXRob2QgPT09ICdDT05ORUNUJykge1xuICAgIHNlc3Npb24ucmVmKClcbiAgICAvLyB3ZSBhcmUgYWxyZWFkeSBjb25uZWN0ZWQsIHN0cmVhbXMgYXJlIHBlbmRpbmcsIGZpcnN0IHJlcXVlc3RcbiAgICAvLyB3aWxsIGNyZWF0ZSBhIG5ldyBzdHJlYW0uIFdlIHRyaWdnZXIgYSByZXF1ZXN0IHRvIGNyZWF0ZSB0aGUgc3RyZWFtIGFuZCB3YWl0IHVudGlsXG4gICAgLy8gYHJlYWR5YCBldmVudCBpcyB0cmlnZ2VyZWRcbiAgICAvLyBXZSBkaXNhYmxlZCBlbmRTdHJlYW0gdG8gYWxsb3cgdGhlIHVzZXIgdG8gd3JpdGUgdG8gdGhlIHN0cmVhbVxuICAgIHN0cmVhbSA9IHNlc3Npb24ucmVxdWVzdChoZWFkZXJzLCB7IGVuZFN0cmVhbTogZmFsc2UsIHNpZ25hbCB9KVxuXG4gICAgaWYgKHN0cmVhbS5pZCAmJiAhc3RyZWFtLnBlbmRpbmcpIHtcbiAgICAgIHJlcXVlc3Qub25VcGdyYWRlKG51bGwsIG51bGwsIHN0cmVhbSlcbiAgICAgICsraDJTdGF0ZS5vcGVuU3RyZWFtc1xuICAgIH0gZWxzZSB7XG4gICAgICBzdHJlYW0ub25jZSgncmVhZHknLCAoKSA9PiB7XG4gICAgICAgIHJlcXVlc3Qub25VcGdyYWRlKG51bGwsIG51bGwsIHN0cmVhbSlcbiAgICAgICAgKytoMlN0YXRlLm9wZW5TdHJlYW1zXG4gICAgICB9KVxuICAgIH1cblxuICAgIHN0cmVhbS5vbmNlKCdjbG9zZScsICgpID0+IHtcbiAgICAgIGgyU3RhdGUub3BlblN0cmVhbXMgLT0gMVxuICAgICAgLy8gVE9ETyhIVFRQLzIpOiB1bnJlZiBvbmx5IGlmIGN1cnJlbnQgc3RyZWFtcyBjb3VudCBpcyAwXG4gICAgICBpZiAoaDJTdGF0ZS5vcGVuU3RyZWFtcyA9PT0gMCkgc2Vzc2lvbi51bnJlZigpXG4gICAgfSlcblxuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzU0MCNzZWN0aW9uLTguM1xuICAvLyA6cGF0aCBhbmQgOnNjaGVtZSBoZWFkZXJzIG11c3QgYmUgb21pdGVkIHdoZW4gc2VuZGluZyBDT05ORUNUXG5cbiAgaGVhZGVyc1tIVFRQMl9IRUFERVJfUEFUSF0gPSBwYXRoXG4gIGhlYWRlcnNbSFRUUDJfSEVBREVSX1NDSEVNRV0gPSAnaHR0cHMnXG5cbiAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzEjc2VjdGlvbi00LjMuMVxuICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjNzIzMSNzZWN0aW9uLTQuMy4yXG4gIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMxI3NlY3Rpb24tNC4zLjVcblxuICAvLyBTZW5kaW5nIGEgcGF5bG9hZCBib2R5IG9uIGEgcmVxdWVzdCB0aGF0IGRvZXMgbm90XG4gIC8vIGV4cGVjdCBpdCBjYW4gY2F1c2UgdW5kZWZpbmVkIGJlaGF2aW9yIG9uIHNvbWVcbiAgLy8gc2VydmVycyBhbmQgY29ycnVwdCBjb25uZWN0aW9uIHN0YXRlLiBEbyBub3RcbiAgLy8gcmUtdXNlIHRoZSBjb25uZWN0aW9uIGZvciBmdXJ0aGVyIHJlcXVlc3RzLlxuXG4gIGNvbnN0IGV4cGVjdHNQYXlsb2FkID0gKFxuICAgIG1ldGhvZCA9PT0gJ1BVVCcgfHxcbiAgICBtZXRob2QgPT09ICdQT1NUJyB8fFxuICAgIG1ldGhvZCA9PT0gJ1BBVENIJ1xuICApXG5cbiAgaWYgKGJvZHkgJiYgdHlwZW9mIGJvZHkucmVhZCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIC8vIFRyeSB0byByZWFkIEVPRiBpbiBvcmRlciB0byBnZXQgbGVuZ3RoLlxuICAgIGJvZHkucmVhZCgwKVxuICB9XG5cbiAgbGV0IGNvbnRlbnRMZW5ndGggPSB1dGlsLmJvZHlMZW5ndGgoYm9keSlcblxuICBpZiAoY29udGVudExlbmd0aCA9PSBudWxsKSB7XG4gICAgY29udGVudExlbmd0aCA9IHJlcXVlc3QuY29udGVudExlbmd0aFxuICB9XG5cbiAgaWYgKGNvbnRlbnRMZW5ndGggPT09IDAgfHwgIWV4cGVjdHNQYXlsb2FkKSB7XG4gICAgLy8gaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzcyMzAjc2VjdGlvbi0zLjMuMlxuICAgIC8vIEEgdXNlciBhZ2VudCBTSE9VTEQgTk9UIHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgZmllbGQgd2hlblxuICAgIC8vIHRoZSByZXF1ZXN0IG1lc3NhZ2UgZG9lcyBub3QgY29udGFpbiBhIHBheWxvYWQgYm9keSBhbmQgdGhlIG1ldGhvZFxuICAgIC8vIHNlbWFudGljcyBkbyBub3QgYW50aWNpcGF0ZSBzdWNoIGEgYm9keS5cblxuICAgIGNvbnRlbnRMZW5ndGggPSBudWxsXG4gIH1cblxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjA0NlxuICAvLyBBIHVzZXIgYWdlbnQgbWF5IHNlbmQgYSBDb250ZW50LUxlbmd0aCBoZWFkZXIgd2l0aCAwIHZhbHVlLCB0aGlzIHNob3VsZCBiZSBhbGxvd2VkLlxuICBpZiAoc2hvdWxkU2VuZENvbnRlbnRMZW5ndGgobWV0aG9kKSAmJiBjb250ZW50TGVuZ3RoID4gMCAmJiByZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT0gbnVsbCAmJiByZXF1ZXN0LmNvbnRlbnRMZW5ndGggIT09IGNvbnRlbnRMZW5ndGgpIHtcbiAgICBpZiAoY2xpZW50W2tTdHJpY3RDb250ZW50TGVuZ3RoXSkge1xuICAgICAgZXJyb3JSZXF1ZXN0KGNsaWVudCwgcmVxdWVzdCwgbmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgcHJvY2Vzcy5lbWl0V2FybmluZyhuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKCkpXG4gIH1cblxuICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsKSB7XG4gICAgYXNzZXJ0KGJvZHksICdubyBib2R5IG11c3Qgbm90IGhhdmUgY29udGVudCBsZW5ndGgnKVxuICAgIGhlYWRlcnNbSFRUUDJfSEVBREVSX0NPTlRFTlRfTEVOR1RIXSA9IGAke2NvbnRlbnRMZW5ndGh9YFxuICB9XG5cbiAgc2Vzc2lvbi5yZWYoKVxuXG4gIGNvbnN0IHNob3VsZEVuZFN0cmVhbSA9IG1ldGhvZCA9PT0gJ0dFVCcgfHwgbWV0aG9kID09PSAnSEVBRCdcbiAgaWYgKGV4cGVjdENvbnRpbnVlKSB7XG4gICAgaGVhZGVyc1tIVFRQMl9IRUFERVJfRVhQRUNUXSA9ICcxMDAtY29udGludWUnXG4gICAgc3RyZWFtID0gc2Vzc2lvbi5yZXF1ZXN0KGhlYWRlcnMsIHsgZW5kU3RyZWFtOiBzaG91bGRFbmRTdHJlYW0sIHNpZ25hbCB9KVxuXG4gICAgc3RyZWFtLm9uY2UoJ2NvbnRpbnVlJywgd3JpdGVCb2R5SDIpXG4gIH0gZWxzZSB7XG4gICAgc3RyZWFtID0gc2Vzc2lvbi5yZXF1ZXN0KGhlYWRlcnMsIHtcbiAgICAgIGVuZFN0cmVhbTogc2hvdWxkRW5kU3RyZWFtLFxuICAgICAgc2lnbmFsXG4gICAgfSlcbiAgICB3cml0ZUJvZHlIMigpXG4gIH1cblxuICAvLyBJbmNyZW1lbnQgY291bnRlciBhcyB3ZSBoYXZlIG5ldyBzZXZlcmFsIHN0cmVhbXMgb3BlblxuICArK2gyU3RhdGUub3BlblN0cmVhbXNcblxuICBzdHJlYW0ub25jZSgncmVzcG9uc2UnLCBoZWFkZXJzID0+IHtcbiAgICBjb25zdCB7IFtIVFRQMl9IRUFERVJfU1RBVFVTXTogc3RhdHVzQ29kZSwgLi4ucmVhbEhlYWRlcnMgfSA9IGhlYWRlcnNcblxuICAgIGlmIChyZXF1ZXN0Lm9uSGVhZGVycyhOdW1iZXIoc3RhdHVzQ29kZSksIHJlYWxIZWFkZXJzLCBzdHJlYW0ucmVzdW1lLmJpbmQoc3RyZWFtKSwgJycpID09PSBmYWxzZSkge1xuICAgICAgc3RyZWFtLnBhdXNlKClcbiAgICB9XG4gIH0pXG5cbiAgc3RyZWFtLm9uY2UoJ2VuZCcsICgpID0+IHtcbiAgICByZXF1ZXN0Lm9uQ29tcGxldGUoW10pXG4gIH0pXG5cbiAgc3RyZWFtLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgaWYgKHJlcXVlc3Qub25EYXRhKGNodW5rKSA9PT0gZmFsc2UpIHtcbiAgICAgIHN0cmVhbS5wYXVzZSgpXG4gICAgfVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdjbG9zZScsICgpID0+IHtcbiAgICBoMlN0YXRlLm9wZW5TdHJlYW1zIC09IDFcbiAgICAvLyBUT0RPKEhUVFAvMik6IHVucmVmIG9ubHkgaWYgY3VycmVudCBzdHJlYW1zIGNvdW50IGlzIDBcbiAgICBpZiAoaDJTdGF0ZS5vcGVuU3RyZWFtcyA9PT0gMCkge1xuICAgICAgc2Vzc2lvbi51bnJlZigpXG4gICAgfVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdlcnJvcicsIGZ1bmN0aW9uIChlcnIpIHtcbiAgICBpZiAoY2xpZW50W2tIVFRQMlNlc3Npb25dICYmICFjbGllbnRba0hUVFAyU2Vzc2lvbl0uZGVzdHJveWVkICYmICF0aGlzLmNsb3NlZCAmJiAhdGhpcy5kZXN0cm95ZWQpIHtcbiAgICAgIGgyU3RhdGUuc3RyZWFtcyAtPSAxXG4gICAgICB1dGlsLmRlc3Ryb3koc3RyZWFtLCBlcnIpXG4gICAgfVxuICB9KVxuXG4gIHN0cmVhbS5vbmNlKCdmcmFtZUVycm9yJywgKHR5cGUsIGNvZGUpID0+IHtcbiAgICBjb25zdCBlcnIgPSBuZXcgSW5mb3JtYXRpb25hbEVycm9yKGBIVFRQLzI6IFwiZnJhbWVFcnJvclwiIHJlY2VpdmVkIC0gdHlwZSAke3R5cGV9LCBjb2RlICR7Y29kZX1gKVxuICAgIGVycm9yUmVxdWVzdChjbGllbnQsIHJlcXVlc3QsIGVycilcblxuICAgIGlmIChjbGllbnRba0hUVFAyU2Vzc2lvbl0gJiYgIWNsaWVudFtrSFRUUDJTZXNzaW9uXS5kZXN0cm95ZWQgJiYgIXRoaXMuY2xvc2VkICYmICF0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgaDJTdGF0ZS5zdHJlYW1zIC09IDFcbiAgICAgIHV0aWwuZGVzdHJveShzdHJlYW0sIGVycilcbiAgICB9XG4gIH0pXG5cbiAgLy8gc3RyZWFtLm9uKCdhYm9ydGVkJywgKCkgPT4ge1xuICAvLyAgIC8vIFRPRE8oSFRUUC8yKTogU3VwcG9ydCBhYm9ydGVkXG4gIC8vIH0pXG5cbiAgLy8gc3RyZWFtLm9uKCd0aW1lb3V0JywgKCkgPT4ge1xuICAvLyAgIC8vIFRPRE8oSFRUUC8yKTogU3VwcG9ydCB0aW1lb3V0XG4gIC8vIH0pXG5cbiAgLy8gc3RyZWFtLm9uKCdwdXNoJywgaGVhZGVycyA9PiB7XG4gIC8vICAgLy8gVE9ETyhIVFRQLzIpOiBTdXBwb3IgcHVzaFxuICAvLyB9KVxuXG4gIC8vIHN0cmVhbS5vbigndHJhaWxlcnMnLCBoZWFkZXJzID0+IHtcbiAgLy8gICAvLyBUT0RPKEhUVFAvMik6IFN1cHBvcnQgdHJhaWxlcnNcbiAgLy8gfSlcblxuICByZXR1cm4gdHJ1ZVxuXG4gIGZ1bmN0aW9uIHdyaXRlQm9keUgyICgpIHtcbiAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogYXNzZXJ0aW9uICovXG4gICAgaWYgKCFib2R5KSB7XG4gICAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuICAgIH0gZWxzZSBpZiAodXRpbC5pc0J1ZmZlcihib2R5KSkge1xuICAgICAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggPT09IGJvZHkuYnl0ZUxlbmd0aCwgJ2J1ZmZlciBib2R5IG11c3QgaGF2ZSBjb250ZW50IGxlbmd0aCcpXG4gICAgICBzdHJlYW0uY29yaygpXG4gICAgICBzdHJlYW0ud3JpdGUoYm9keSlcbiAgICAgIHN0cmVhbS51bmNvcmsoKVxuICAgICAgc3RyZWFtLmVuZCgpXG4gICAgICByZXF1ZXN0Lm9uQm9keVNlbnQoYm9keSlcbiAgICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG4gICAgfSBlbHNlIGlmICh1dGlsLmlzQmxvYkxpa2UoYm9keSkpIHtcbiAgICAgIGlmICh0eXBlb2YgYm9keS5zdHJlYW0gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgd3JpdGVJdGVyYWJsZSh7XG4gICAgICAgICAgY2xpZW50LFxuICAgICAgICAgIHJlcXVlc3QsXG4gICAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgICBoMnN0cmVhbTogc3RyZWFtLFxuICAgICAgICAgIGV4cGVjdHNQYXlsb2FkLFxuICAgICAgICAgIGJvZHk6IGJvZHkuc3RyZWFtKCksXG4gICAgICAgICAgc29ja2V0OiBjbGllbnRba1NvY2tldF0sXG4gICAgICAgICAgaGVhZGVyOiAnJ1xuICAgICAgICB9KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgd3JpdGVCbG9iKHtcbiAgICAgICAgICBib2R5LFxuICAgICAgICAgIGNsaWVudCxcbiAgICAgICAgICByZXF1ZXN0LFxuICAgICAgICAgIGNvbnRlbnRMZW5ndGgsXG4gICAgICAgICAgZXhwZWN0c1BheWxvYWQsXG4gICAgICAgICAgaDJzdHJlYW06IHN0cmVhbSxcbiAgICAgICAgICBoZWFkZXI6ICcnLFxuICAgICAgICAgIHNvY2tldDogY2xpZW50W2tTb2NrZXRdXG4gICAgICAgIH0pXG4gICAgICB9XG4gICAgfSBlbHNlIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICB3cml0ZVN0cmVhbSh7XG4gICAgICAgIGJvZHksXG4gICAgICAgIGNsaWVudCxcbiAgICAgICAgcmVxdWVzdCxcbiAgICAgICAgY29udGVudExlbmd0aCxcbiAgICAgICAgZXhwZWN0c1BheWxvYWQsXG4gICAgICAgIHNvY2tldDogY2xpZW50W2tTb2NrZXRdLFxuICAgICAgICBoMnN0cmVhbTogc3RyZWFtLFxuICAgICAgICBoZWFkZXI6ICcnXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAodXRpbC5pc0l0ZXJhYmxlKGJvZHkpKSB7XG4gICAgICB3cml0ZUl0ZXJhYmxlKHtcbiAgICAgICAgYm9keSxcbiAgICAgICAgY2xpZW50LFxuICAgICAgICByZXF1ZXN0LFxuICAgICAgICBjb250ZW50TGVuZ3RoLFxuICAgICAgICBleHBlY3RzUGF5bG9hZCxcbiAgICAgICAgaGVhZGVyOiAnJyxcbiAgICAgICAgaDJzdHJlYW06IHN0cmVhbSxcbiAgICAgICAgc29ja2V0OiBjbGllbnRba1NvY2tldF1cbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydChmYWxzZSlcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gd3JpdGVTdHJlYW0gKHsgaDJzdHJlYW0sIGJvZHksIGNsaWVudCwgcmVxdWVzdCwgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBoZWFkZXIsIGV4cGVjdHNQYXlsb2FkIH0pIHtcbiAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggIT09IDAgfHwgY2xpZW50W2tSdW5uaW5nXSA9PT0gMCwgJ3N0cmVhbSBib2R5IGNhbm5vdCBiZSBwaXBlbGluZWQnKVxuXG4gIGlmIChjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gPT09ICdoMicpIHtcbiAgICAvLyBGb3IgSFRUUC8yLCBpcyBlbm91Z2ggdG8gcGlwZSB0aGUgc3RyZWFtXG4gICAgY29uc3QgcGlwZSA9IHBpcGVsaW5lKFxuICAgICAgYm9keSxcbiAgICAgIGgyc3RyZWFtLFxuICAgICAgKGVycikgPT4ge1xuICAgICAgICBpZiAoZXJyKSB7XG4gICAgICAgICAgdXRpbC5kZXN0cm95KGJvZHksIGVycilcbiAgICAgICAgICB1dGlsLmRlc3Ryb3koaDJzdHJlYW0sIGVycilcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgKVxuXG4gICAgcGlwZS5vbignZGF0YScsIG9uUGlwZURhdGEpXG4gICAgcGlwZS5vbmNlKCdlbmQnLCAoKSA9PiB7XG4gICAgICBwaXBlLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25QaXBlRGF0YSlcbiAgICAgIHV0aWwuZGVzdHJveShwaXBlKVxuICAgIH0pXG5cbiAgICBmdW5jdGlvbiBvblBpcGVEYXRhIChjaHVuaykge1xuICAgICAgcmVxdWVzdC5vbkJvZHlTZW50KGNodW5rKVxuICAgIH1cblxuICAgIHJldHVyblxuICB9XG5cbiAgbGV0IGZpbmlzaGVkID0gZmFsc2VcblxuICBjb25zdCB3cml0ZXIgPSBuZXcgQXN5bmNXcml0ZXIoeyBzb2NrZXQsIHJlcXVlc3QsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgZXhwZWN0c1BheWxvYWQsIGhlYWRlciB9KVxuXG4gIGNvbnN0IG9uRGF0YSA9IGZ1bmN0aW9uIChjaHVuaykge1xuICAgIGlmIChmaW5pc2hlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdHJ5IHtcbiAgICAgIGlmICghd3JpdGVyLndyaXRlKGNodW5rKSAmJiB0aGlzLnBhdXNlKSB7XG4gICAgICAgIHRoaXMucGF1c2UoKVxuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgdXRpbC5kZXN0cm95KHRoaXMsIGVycilcbiAgICB9XG4gIH1cbiAgY29uc3Qgb25EcmFpbiA9IGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChib2R5LnJlc3VtZSkge1xuICAgICAgYm9keS5yZXN1bWUoKVxuICAgIH1cbiAgfVxuICBjb25zdCBvbkFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgIGlmIChmaW5pc2hlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIGNvbnN0IGVyciA9IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBvbkZpbmlzaGVkKGVycikpXG4gIH1cbiAgY29uc3Qgb25GaW5pc2hlZCA9IGZ1bmN0aW9uIChlcnIpIHtcbiAgICBpZiAoZmluaXNoZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGZpbmlzaGVkID0gdHJ1ZVxuXG4gICAgYXNzZXJ0KHNvY2tldC5kZXN0cm95ZWQgfHwgKHNvY2tldFtrV3JpdGluZ10gJiYgY2xpZW50W2tSdW5uaW5nXSA8PSAxKSlcblxuICAgIHNvY2tldFxuICAgICAgLm9mZignZHJhaW4nLCBvbkRyYWluKVxuICAgICAgLm9mZignZXJyb3InLCBvbkZpbmlzaGVkKVxuXG4gICAgYm9keVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdkYXRhJywgb25EYXRhKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdlbmQnLCBvbkZpbmlzaGVkKVxuICAgICAgLnJlbW92ZUxpc3RlbmVyKCdlcnJvcicsIG9uRmluaXNoZWQpXG4gICAgICAucmVtb3ZlTGlzdGVuZXIoJ2Nsb3NlJywgb25BYm9ydClcblxuICAgIGlmICghZXJyKSB7XG4gICAgICB0cnkge1xuICAgICAgICB3cml0ZXIuZW5kKClcbiAgICAgIH0gY2F0Y2ggKGVyKSB7XG4gICAgICAgIGVyciA9IGVyXG4gICAgICB9XG4gICAgfVxuXG4gICAgd3JpdGVyLmRlc3Ryb3koZXJyKVxuXG4gICAgaWYgKGVyciAmJiAoZXJyLmNvZGUgIT09ICdVTkRfRVJSX0lORk8nIHx8IGVyci5tZXNzYWdlICE9PSAncmVzZXQnKSkge1xuICAgICAgdXRpbC5kZXN0cm95KGJvZHksIGVycilcbiAgICB9IGVsc2Uge1xuICAgICAgdXRpbC5kZXN0cm95KGJvZHkpXG4gICAgfVxuICB9XG5cbiAgYm9keVxuICAgIC5vbignZGF0YScsIG9uRGF0YSlcbiAgICAub24oJ2VuZCcsIG9uRmluaXNoZWQpXG4gICAgLm9uKCdlcnJvcicsIG9uRmluaXNoZWQpXG4gICAgLm9uKCdjbG9zZScsIG9uQWJvcnQpXG5cbiAgaWYgKGJvZHkucmVzdW1lKSB7XG4gICAgYm9keS5yZXN1bWUoKVxuICB9XG5cbiAgc29ja2V0XG4gICAgLm9uKCdkcmFpbicsIG9uRHJhaW4pXG4gICAgLm9uKCdlcnJvcicsIG9uRmluaXNoZWQpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlQmxvYiAoeyBoMnN0cmVhbSwgYm9keSwgY2xpZW50LCByZXF1ZXN0LCBzb2NrZXQsIGNvbnRlbnRMZW5ndGgsIGhlYWRlciwgZXhwZWN0c1BheWxvYWQgfSkge1xuICBhc3NlcnQoY29udGVudExlbmd0aCA9PT0gYm9keS5zaXplLCAnYmxvYiBib2R5IG11c3QgaGF2ZSBjb250ZW50IGxlbmd0aCcpXG5cbiAgY29uc3QgaXNIMiA9IGNsaWVudFtrSFRUUENvbm5WZXJzaW9uXSA9PT0gJ2gyJ1xuICB0cnkge1xuICAgIGlmIChjb250ZW50TGVuZ3RoICE9IG51bGwgJiYgY29udGVudExlbmd0aCAhPT0gYm9keS5zaXplKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKClcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuZnJvbShhd2FpdCBib2R5LmFycmF5QnVmZmVyKCkpXG5cbiAgICBpZiAoaXNIMikge1xuICAgICAgaDJzdHJlYW0uY29yaygpXG4gICAgICBoMnN0cmVhbS53cml0ZShidWZmZXIpXG4gICAgICBoMnN0cmVhbS51bmNvcmsoKVxuICAgIH0gZWxzZSB7XG4gICAgICBzb2NrZXQuY29yaygpXG4gICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAke2NvbnRlbnRMZW5ndGh9XFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICBzb2NrZXQud3JpdGUoYnVmZmVyKVxuICAgICAgc29ja2V0LnVuY29yaygpXG4gICAgfVxuXG4gICAgcmVxdWVzdC5vbkJvZHlTZW50KGJ1ZmZlcilcbiAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuXG4gICAgaWYgKCFleHBlY3RzUGF5bG9hZCkge1xuICAgICAgc29ja2V0W2tSZXNldF0gPSB0cnVlXG4gICAgfVxuXG4gICAgcmVzdW1lKGNsaWVudClcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgdXRpbC5kZXN0cm95KGlzSDIgPyBoMnN0cmVhbSA6IHNvY2tldCwgZXJyKVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHdyaXRlSXRlcmFibGUgKHsgaDJzdHJlYW0sIGJvZHksIGNsaWVudCwgcmVxdWVzdCwgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBoZWFkZXIsIGV4cGVjdHNQYXlsb2FkIH0pIHtcbiAgYXNzZXJ0KGNvbnRlbnRMZW5ndGggIT09IDAgfHwgY2xpZW50W2tSdW5uaW5nXSA9PT0gMCwgJ2l0ZXJhdG9yIGJvZHkgY2Fubm90IGJlIHBpcGVsaW5lZCcpXG5cbiAgbGV0IGNhbGxiYWNrID0gbnVsbFxuICBmdW5jdGlvbiBvbkRyYWluICgpIHtcbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGNvbnN0IGNiID0gY2FsbGJhY2tcbiAgICAgIGNhbGxiYWNrID0gbnVsbFxuICAgICAgY2IoKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHdhaXRGb3JEcmFpbiA9ICgpID0+IG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBhc3NlcnQoY2FsbGJhY2sgPT09IG51bGwpXG5cbiAgICBpZiAoc29ja2V0W2tFcnJvcl0pIHtcbiAgICAgIHJlamVjdChzb2NrZXRba0Vycm9yXSlcbiAgICB9IGVsc2Uge1xuICAgICAgY2FsbGJhY2sgPSByZXNvbHZlXG4gICAgfVxuICB9KVxuXG4gIGlmIChjbGllbnRba0hUVFBDb25uVmVyc2lvbl0gPT09ICdoMicpIHtcbiAgICBoMnN0cmVhbVxuICAgICAgLm9uKCdjbG9zZScsIG9uRHJhaW4pXG4gICAgICAub24oJ2RyYWluJywgb25EcmFpbilcblxuICAgIHRyeSB7XG4gICAgICAvLyBJdCdzIHVwIHRvIHRoZSB1c2VyIHRvIHNvbWVob3cgYWJvcnQgdGhlIGFzeW5jIGl0ZXJhYmxlLlxuICAgICAgZm9yIGF3YWl0IChjb25zdCBjaHVuayBvZiBib2R5KSB7XG4gICAgICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgICAgIHRocm93IHNvY2tldFtrRXJyb3JdXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZXMgPSBoMnN0cmVhbS53cml0ZShjaHVuaylcbiAgICAgICAgcmVxdWVzdC5vbkJvZHlTZW50KGNodW5rKVxuICAgICAgICBpZiAoIXJlcykge1xuICAgICAgICAgIGF3YWl0IHdhaXRGb3JEcmFpbigpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGgyc3RyZWFtLmRlc3Ryb3koZXJyKVxuICAgIH0gZmluYWxseSB7XG4gICAgICByZXF1ZXN0Lm9uUmVxdWVzdFNlbnQoKVxuICAgICAgaDJzdHJlYW0uZW5kKClcbiAgICAgIGgyc3RyZWFtXG4gICAgICAgIC5vZmYoJ2Nsb3NlJywgb25EcmFpbilcbiAgICAgICAgLm9mZignZHJhaW4nLCBvbkRyYWluKVxuICAgIH1cblxuICAgIHJldHVyblxuICB9XG5cbiAgc29ja2V0XG4gICAgLm9uKCdjbG9zZScsIG9uRHJhaW4pXG4gICAgLm9uKCdkcmFpbicsIG9uRHJhaW4pXG5cbiAgY29uc3Qgd3JpdGVyID0gbmV3IEFzeW5jV3JpdGVyKHsgc29ja2V0LCByZXF1ZXN0LCBjb250ZW50TGVuZ3RoLCBjbGllbnQsIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIgfSlcbiAgdHJ5IHtcbiAgICAvLyBJdCdzIHVwIHRvIHRoZSB1c2VyIHRvIHNvbWVob3cgYWJvcnQgdGhlIGFzeW5jIGl0ZXJhYmxlLlxuICAgIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgYm9keSkge1xuICAgICAgaWYgKHNvY2tldFtrRXJyb3JdKSB7XG4gICAgICAgIHRocm93IHNvY2tldFtrRXJyb3JdXG4gICAgICB9XG5cbiAgICAgIGlmICghd3JpdGVyLndyaXRlKGNodW5rKSkge1xuICAgICAgICBhd2FpdCB3YWl0Rm9yRHJhaW4oKVxuICAgICAgfVxuICAgIH1cblxuICAgIHdyaXRlci5lbmQoKVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICB3cml0ZXIuZGVzdHJveShlcnIpXG4gIH0gZmluYWxseSB7XG4gICAgc29ja2V0XG4gICAgICAub2ZmKCdjbG9zZScsIG9uRHJhaW4pXG4gICAgICAub2ZmKCdkcmFpbicsIG9uRHJhaW4pXG4gIH1cbn1cblxuY2xhc3MgQXN5bmNXcml0ZXIge1xuICBjb25zdHJ1Y3RvciAoeyBzb2NrZXQsIHJlcXVlc3QsIGNvbnRlbnRMZW5ndGgsIGNsaWVudCwgZXhwZWN0c1BheWxvYWQsIGhlYWRlciB9KSB7XG4gICAgdGhpcy5zb2NrZXQgPSBzb2NrZXRcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0XG4gICAgdGhpcy5jb250ZW50TGVuZ3RoID0gY29udGVudExlbmd0aFxuICAgIHRoaXMuY2xpZW50ID0gY2xpZW50XG4gICAgdGhpcy5ieXRlc1dyaXR0ZW4gPSAwXG4gICAgdGhpcy5leHBlY3RzUGF5bG9hZCA9IGV4cGVjdHNQYXlsb2FkXG4gICAgdGhpcy5oZWFkZXIgPSBoZWFkZXJcblxuICAgIHNvY2tldFtrV3JpdGluZ10gPSB0cnVlXG4gIH1cblxuICB3cml0ZSAoY2h1bmspIHtcbiAgICBjb25zdCB7IHNvY2tldCwgcmVxdWVzdCwgY29udGVudExlbmd0aCwgY2xpZW50LCBieXRlc1dyaXR0ZW4sIGV4cGVjdHNQYXlsb2FkLCBoZWFkZXIgfSA9IHRoaXNcblxuICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgdGhyb3cgc29ja2V0W2tFcnJvcl1cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgY29uc3QgbGVuID0gQnVmZmVyLmJ5dGVMZW5ndGgoY2h1bmspXG4gICAgaWYgKCFsZW4pIHtcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgLy8gV2Ugc2hvdWxkIGRlZmVyIHdyaXRpbmcgY2h1bmtzLlxuICAgIGlmIChjb250ZW50TGVuZ3RoICE9PSBudWxsICYmIGJ5dGVzV3JpdHRlbiArIGxlbiA+IGNvbnRlbnRMZW5ndGgpIHtcbiAgICAgIGlmIChjbGllbnRba1N0cmljdENvbnRlbnRMZW5ndGhdKSB7XG4gICAgICAgIHRocm93IG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKVxuICAgICAgfVxuXG4gICAgICBwcm9jZXNzLmVtaXRXYXJuaW5nKG5ldyBSZXF1ZXN0Q29udGVudExlbmd0aE1pc21hdGNoRXJyb3IoKSlcbiAgICB9XG5cbiAgICBzb2NrZXQuY29yaygpXG5cbiAgICBpZiAoYnl0ZXNXcml0dGVuID09PSAwKSB7XG4gICAgICBpZiAoIWV4cGVjdHNQYXlsb2FkKSB7XG4gICAgICAgIHNvY2tldFtrUmVzZXRdID0gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBpZiAoY29udGVudExlbmd0aCA9PT0gbnVsbCkge1xuICAgICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfXRyYW5zZmVyLWVuY29kaW5nOiBjaHVua2VkXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAke2NvbnRlbnRMZW5ndGh9XFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvbnRlbnRMZW5ndGggPT09IG51bGwpIHtcbiAgICAgIHNvY2tldC53cml0ZShgXFxyXFxuJHtsZW4udG9TdHJpbmcoMTYpfVxcclxcbmAsICdsYXRpbjEnKVxuICAgIH1cblxuICAgIHRoaXMuYnl0ZXNXcml0dGVuICs9IGxlblxuXG4gICAgY29uc3QgcmV0ID0gc29ja2V0LndyaXRlKGNodW5rKVxuXG4gICAgc29ja2V0LnVuY29yaygpXG5cbiAgICByZXF1ZXN0Lm9uQm9keVNlbnQoY2h1bmspXG5cbiAgICBpZiAoIXJldCkge1xuICAgICAgaWYgKHNvY2tldFtrUGFyc2VyXS50aW1lb3V0ICYmIHNvY2tldFtrUGFyc2VyXS50aW1lb3V0VHlwZSA9PT0gVElNRU9VVF9IRUFERVJTKSB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBlbHNlOiBvbmx5IGZvciBqZXN0XG4gICAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgICAgc29ja2V0W2tQYXJzZXJdLnRpbWVvdXQucmVmcmVzaCgpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICBlbmQgKCkge1xuICAgIGNvbnN0IHsgc29ja2V0LCBjb250ZW50TGVuZ3RoLCBjbGllbnQsIGJ5dGVzV3JpdHRlbiwgZXhwZWN0c1BheWxvYWQsIGhlYWRlciwgcmVxdWVzdCB9ID0gdGhpc1xuICAgIHJlcXVlc3Qub25SZXF1ZXN0U2VudCgpXG5cbiAgICBzb2NrZXRba1dyaXRpbmddID0gZmFsc2VcblxuICAgIGlmIChzb2NrZXRba0Vycm9yXSkge1xuICAgICAgdGhyb3cgc29ja2V0W2tFcnJvcl1cbiAgICB9XG5cbiAgICBpZiAoc29ja2V0LmRlc3Ryb3llZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGJ5dGVzV3JpdHRlbiA9PT0gMCkge1xuICAgICAgaWYgKGV4cGVjdHNQYXlsb2FkKSB7XG4gICAgICAgIC8vIGh0dHBzOi8vdG9vbHMuaWV0Zi5vcmcvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4zLjJcbiAgICAgICAgLy8gQSB1c2VyIGFnZW50IFNIT1VMRCBzZW5kIGEgQ29udGVudC1MZW5ndGggaW4gYSByZXF1ZXN0IG1lc3NhZ2Ugd2hlblxuICAgICAgICAvLyBubyBUcmFuc2Zlci1FbmNvZGluZyBpcyBzZW50IGFuZCB0aGUgcmVxdWVzdCBtZXRob2QgZGVmaW5lcyBhIG1lYW5pbmdcbiAgICAgICAgLy8gZm9yIGFuIGVuY2xvc2VkIHBheWxvYWQgYm9keS5cblxuICAgICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfWNvbnRlbnQtbGVuZ3RoOiAwXFxyXFxuXFxyXFxuYCwgJ2xhdGluMScpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzb2NrZXQud3JpdGUoYCR7aGVhZGVyfVxcclxcbmAsICdsYXRpbjEnKVxuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY29udGVudExlbmd0aCA9PT0gbnVsbCkge1xuICAgICAgc29ja2V0LndyaXRlKCdcXHJcXG4wXFxyXFxuXFxyXFxuJywgJ2xhdGluMScpXG4gICAgfVxuXG4gICAgaWYgKGNvbnRlbnRMZW5ndGggIT09IG51bGwgJiYgYnl0ZXNXcml0dGVuICE9PSBjb250ZW50TGVuZ3RoKSB7XG4gICAgICBpZiAoY2xpZW50W2tTdHJpY3RDb250ZW50TGVuZ3RoXSkge1xuICAgICAgICB0aHJvdyBuZXcgUmVxdWVzdENvbnRlbnRMZW5ndGhNaXNtYXRjaEVycm9yKClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcobmV3IFJlcXVlc3RDb250ZW50TGVuZ3RoTWlzbWF0Y2hFcnJvcigpKVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dCAmJiBzb2NrZXRba1BhcnNlcl0udGltZW91dFR5cGUgPT09IFRJTUVPVVRfSEVBREVSUykge1xuICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2U6IG9ubHkgZm9yIGplc3RcbiAgICAgIGlmIChzb2NrZXRba1BhcnNlcl0udGltZW91dC5yZWZyZXNoKSB7XG4gICAgICAgIHNvY2tldFtrUGFyc2VyXS50aW1lb3V0LnJlZnJlc2goKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJlc3VtZShjbGllbnQpXG4gIH1cblxuICBkZXN0cm95IChlcnIpIHtcbiAgICBjb25zdCB7IHNvY2tldCwgY2xpZW50IH0gPSB0aGlzXG5cbiAgICBzb2NrZXRba1dyaXRpbmddID0gZmFsc2VcblxuICAgIGlmIChlcnIpIHtcbiAgICAgIGFzc2VydChjbGllbnRba1J1bm5pbmddIDw9IDEsICdwaXBlbGluZSBzaG91bGQgb25seSBjb250YWluIHRoaXMgcmVxdWVzdCcpXG4gICAgICB1dGlsLmRlc3Ryb3koc29ja2V0LCBlcnIpXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIGVycm9yUmVxdWVzdCAoY2xpZW50LCByZXF1ZXN0LCBlcnIpIHtcbiAgdHJ5IHtcbiAgICByZXF1ZXN0Lm9uRXJyb3IoZXJyKVxuICAgIGFzc2VydChyZXF1ZXN0LmFib3J0ZWQpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGNsaWVudC5lbWl0KCdlcnJvcicsIGVycilcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IENsaWVudFxuIiwgIi8qIGVzbGludC1kaXNhYmxlICovXG5cbid1c2Ugc3RyaWN0J1xuXG4vLyBFeHRyYWN0ZWQgZnJvbSBub2RlL2xpYi9pbnRlcm5hbC9maXhlZF9xdWV1ZS5qc1xuXG4vLyBDdXJyZW50bHkgb3B0aW1hbCBxdWV1ZSBzaXplLCB0ZXN0ZWQgb24gVjggNi4wIC0gNi42LiBNdXN0IGJlIHBvd2VyIG9mIHR3by5cbmNvbnN0IGtTaXplID0gMjA0ODtcbmNvbnN0IGtNYXNrID0ga1NpemUgLSAxO1xuXG4vLyBUaGUgRml4ZWRRdWV1ZSBpcyBpbXBsZW1lbnRlZCBhcyBhIHNpbmdseS1saW5rZWQgbGlzdCBvZiBmaXhlZC1zaXplXG4vLyBjaXJjdWxhciBidWZmZXJzLiBJdCBsb29rcyBzb21ldGhpbmcgbGlrZSB0aGlzOlxuLy9cbi8vICBoZWFkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhaWxcbi8vICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfFxuLy8gICAgdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2XG4vLyArLS0tLS0tLS0tLS0rIDwtLS0tLVxcICAgICAgICstLS0tLS0tLS0tLSsgPC0tLS0tLVxcICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy8gfCAgW251bGxdICAgfCAgICAgICAgXFwtLS0tLSB8ICAgbmV4dCAgICB8ICAgICAgICAgXFwtLS0tLS0tIHwgICBuZXh0ICAgIHxcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy8gfCAgIGl0ZW0gICAgfCA8LS0gYm90dG9tICAgIHwgICBpdGVtICAgIHwgPC0tIGJvdHRvbSAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgW2VtcHR5XSAgfFxuLy8gfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICBib3R0b20gLS0+IHwgICBpdGVtICAgIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgICAuLi4gICAgfCAgICAgICAgICAgICAgIHwgICAgLi4uICAgIHwgICAgICAgICAgICAgICAgICB8ICAgIC4uLiAgICB8XG4vLyB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8ICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgW2VtcHR5XSAgfCA8LS0gdG9wICAgICAgIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8ICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfCAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICB8ICBbZW1wdHldICB8IDwtLSB0b3AgIHRvcCAtLT4gfCAgW2VtcHR5XSAgfFxuLy8gKy0tLS0tLS0tLS0tKyAgICAgICAgICAgICAgICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0rXG4vL1xuLy8gT3IsIGlmIHRoZXJlIGlzIG9ubHkgb25lIGNpcmN1bGFyIGJ1ZmZlciwgaXQgbG9va3Mgc29tZXRoaW5nXG4vLyBsaWtlIGVpdGhlciBvZiB0aGVzZTpcbi8vXG4vLyAgaGVhZCAgIHRhaWwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkICAgdGFpbFxuLy8gICAgfCAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8XG4vLyAgICB2ICAgICB2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYgICAgIHZcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy8gfCAgW251bGxdICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICBbbnVsbF0gICB8XG4vLyArLS0tLS0tLS0tLS0rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLStcbi8vIHwgIFtlbXB0eV0gIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIGl0ZW0gICAgfFxuLy8gfCAgW2VtcHR5XSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgaXRlbSAgICB8XG4vLyB8ICAgaXRlbSAgICB8IDwtLSBib3R0b20gICAgICAgICAgICB0b3AgLS0+IHwgIFtlbXB0eV0gIHxcbi8vIHwgICBpdGVtICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgW2VtcHR5XSAgfFxuLy8gfCAgW2VtcHR5XSAgfCA8LS0gdG9wICAgICAgICAgICAgYm90dG9tIC0tPiB8ICAgaXRlbSAgICB8XG4vLyB8ICBbZW1wdHldICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICBpdGVtICAgIHxcbi8vICstLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKy0tLS0tLS0tLS0tK1xuLy9cbi8vIEFkZGluZyBhIHZhbHVlIG1lYW5zIG1vdmluZyBgdG9wYCBmb3J3YXJkIGJ5IG9uZSwgcmVtb3ZpbmcgbWVhbnNcbi8vIG1vdmluZyBgYm90dG9tYCBmb3J3YXJkIGJ5IG9uZS4gQWZ0ZXIgcmVhY2hpbmcgdGhlIGVuZCwgdGhlIHF1ZXVlXG4vLyB3cmFwcyBhcm91bmQuXG4vL1xuLy8gV2hlbiBgdG9wID09PSBib3R0b21gIHRoZSBjdXJyZW50IHF1ZXVlIGlzIGVtcHR5IGFuZCB3aGVuXG4vLyBgdG9wICsgMSA9PT0gYm90dG9tYCBpdCdzIGZ1bGwuIFRoaXMgd2FzdGVzIGEgc2luZ2xlIHNwYWNlIG9mIHN0b3JhZ2Vcbi8vIGJ1dCBhbGxvd3MgbXVjaCBxdWlja2VyIGNoZWNrcy5cblxuY2xhc3MgRml4ZWRDaXJjdWxhckJ1ZmZlciB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuYm90dG9tID0gMDtcbiAgICB0aGlzLnRvcCA9IDA7XG4gICAgdGhpcy5saXN0ID0gbmV3IEFycmF5KGtTaXplKTtcbiAgICB0aGlzLm5leHQgPSBudWxsO1xuICB9XG5cbiAgaXNFbXB0eSgpIHtcbiAgICByZXR1cm4gdGhpcy50b3AgPT09IHRoaXMuYm90dG9tO1xuICB9XG5cbiAgaXNGdWxsKCkge1xuICAgIHJldHVybiAoKHRoaXMudG9wICsgMSkgJiBrTWFzaykgPT09IHRoaXMuYm90dG9tO1xuICB9XG5cbiAgcHVzaChkYXRhKSB7XG4gICAgdGhpcy5saXN0W3RoaXMudG9wXSA9IGRhdGE7XG4gICAgdGhpcy50b3AgPSAodGhpcy50b3AgKyAxKSAmIGtNYXNrO1xuICB9XG5cbiAgc2hpZnQoKSB7XG4gICAgY29uc3QgbmV4dEl0ZW0gPSB0aGlzLmxpc3RbdGhpcy5ib3R0b21dO1xuICAgIGlmIChuZXh0SXRlbSA9PT0gdW5kZWZpbmVkKVxuICAgICAgcmV0dXJuIG51bGw7XG4gICAgdGhpcy5saXN0W3RoaXMuYm90dG9tXSA9IHVuZGVmaW5lZDtcbiAgICB0aGlzLmJvdHRvbSA9ICh0aGlzLmJvdHRvbSArIDEpICYga01hc2s7XG4gICAgcmV0dXJuIG5leHRJdGVtO1xuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY2xhc3MgRml4ZWRRdWV1ZSB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMuaGVhZCA9IHRoaXMudGFpbCA9IG5ldyBGaXhlZENpcmN1bGFyQnVmZmVyKCk7XG4gIH1cblxuICBpc0VtcHR5KCkge1xuICAgIHJldHVybiB0aGlzLmhlYWQuaXNFbXB0eSgpO1xuICB9XG5cbiAgcHVzaChkYXRhKSB7XG4gICAgaWYgKHRoaXMuaGVhZC5pc0Z1bGwoKSkge1xuICAgICAgLy8gSGVhZCBpcyBmdWxsOiBDcmVhdGVzIGEgbmV3IHF1ZXVlLCBzZXRzIHRoZSBvbGQgcXVldWUncyBgLm5leHRgIHRvIGl0LFxuICAgICAgLy8gYW5kIHNldHMgaXQgYXMgdGhlIG5ldyBtYWluIHF1ZXVlLlxuICAgICAgdGhpcy5oZWFkID0gdGhpcy5oZWFkLm5leHQgPSBuZXcgRml4ZWRDaXJjdWxhckJ1ZmZlcigpO1xuICAgIH1cbiAgICB0aGlzLmhlYWQucHVzaChkYXRhKTtcbiAgfVxuXG4gIHNoaWZ0KCkge1xuICAgIGNvbnN0IHRhaWwgPSB0aGlzLnRhaWw7XG4gICAgY29uc3QgbmV4dCA9IHRhaWwuc2hpZnQoKTtcbiAgICBpZiAodGFpbC5pc0VtcHR5KCkgJiYgdGFpbC5uZXh0ICE9PSBudWxsKSB7XG4gICAgICAvLyBJZiB0aGVyZSBpcyBhbm90aGVyIHF1ZXVlLCBpdCBmb3JtcyB0aGUgbmV3IHRhaWwuXG4gICAgICB0aGlzLnRhaWwgPSB0YWlsLm5leHQ7XG4gICAgfVxuICAgIHJldHVybiBuZXh0O1xuICB9XG59O1xuIiwgImNvbnN0IHsga0ZyZWUsIGtDb25uZWN0ZWQsIGtQZW5kaW5nLCBrUXVldWVkLCBrUnVubmluZywga1NpemUgfSA9IHJlcXVpcmUoJy4vY29yZS9zeW1ib2xzJylcbmNvbnN0IGtQb29sID0gU3ltYm9sKCdwb29sJylcblxuY2xhc3MgUG9vbFN0YXRzIHtcbiAgY29uc3RydWN0b3IgKHBvb2wpIHtcbiAgICB0aGlzW2tQb29sXSA9IHBvb2xcbiAgfVxuXG4gIGdldCBjb25uZWN0ZWQgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrQ29ubmVjdGVkXVxuICB9XG5cbiAgZ2V0IGZyZWUgKCkge1xuICAgIHJldHVybiB0aGlzW2tQb29sXVtrRnJlZV1cbiAgfVxuXG4gIGdldCBwZW5kaW5nICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba1BlbmRpbmddXG4gIH1cblxuICBnZXQgcXVldWVkICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba1F1ZXVlZF1cbiAgfVxuXG4gIGdldCBydW5uaW5nICgpIHtcbiAgICByZXR1cm4gdGhpc1trUG9vbF1ba1J1bm5pbmddXG4gIH1cblxuICBnZXQgc2l6ZSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba1Bvb2xdW2tTaXplXVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUG9vbFN0YXRzXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3QgRml4ZWRRdWV1ZSA9IHJlcXVpcmUoJy4vbm9kZS9maXhlZC1xdWV1ZScpXG5jb25zdCB7IGtDb25uZWN0ZWQsIGtTaXplLCBrUnVubmluZywga1BlbmRpbmcsIGtRdWV1ZWQsIGtCdXN5LCBrRnJlZSwga1VybCwga0Nsb3NlLCBrRGVzdHJveSwga0Rpc3BhdGNoIH0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5jb25zdCBQb29sU3RhdHMgPSByZXF1aXJlKCcuL3Bvb2wtc3RhdHMnKVxuXG5jb25zdCBrQ2xpZW50cyA9IFN5bWJvbCgnY2xpZW50cycpXG5jb25zdCBrTmVlZERyYWluID0gU3ltYm9sKCduZWVkRHJhaW4nKVxuY29uc3Qga1F1ZXVlID0gU3ltYm9sKCdxdWV1ZScpXG5jb25zdCBrQ2xvc2VkUmVzb2x2ZSA9IFN5bWJvbCgnY2xvc2VkIHJlc29sdmUnKVxuY29uc3Qga09uRHJhaW4gPSBTeW1ib2woJ29uRHJhaW4nKVxuY29uc3Qga09uQ29ubmVjdCA9IFN5bWJvbCgnb25Db25uZWN0JylcbmNvbnN0IGtPbkRpc2Nvbm5lY3QgPSBTeW1ib2woJ29uRGlzY29ubmVjdCcpXG5jb25zdCBrT25Db25uZWN0aW9uRXJyb3IgPSBTeW1ib2woJ29uQ29ubmVjdGlvbkVycm9yJylcbmNvbnN0IGtHZXREaXNwYXRjaGVyID0gU3ltYm9sKCdnZXQgZGlzcGF0Y2hlcicpXG5jb25zdCBrQWRkQ2xpZW50ID0gU3ltYm9sKCdhZGQgY2xpZW50JylcbmNvbnN0IGtSZW1vdmVDbGllbnQgPSBTeW1ib2woJ3JlbW92ZSBjbGllbnQnKVxuY29uc3Qga1N0YXRzID0gU3ltYm9sKCdzdGF0cycpXG5cbmNsYXNzIFBvb2xCYXNlIGV4dGVuZHMgRGlzcGF0Y2hlckJhc2Uge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpc1trUXVldWVdID0gbmV3IEZpeGVkUXVldWUoKVxuICAgIHRoaXNba0NsaWVudHNdID0gW11cbiAgICB0aGlzW2tRdWV1ZWRdID0gMFxuXG4gICAgY29uc3QgcG9vbCA9IHRoaXNcblxuICAgIHRoaXNba09uRHJhaW5dID0gZnVuY3Rpb24gb25EcmFpbiAob3JpZ2luLCB0YXJnZXRzKSB7XG4gICAgICBjb25zdCBxdWV1ZSA9IHBvb2xba1F1ZXVlXVxuXG4gICAgICBsZXQgbmVlZERyYWluID0gZmFsc2VcblxuICAgICAgd2hpbGUgKCFuZWVkRHJhaW4pIHtcbiAgICAgICAgY29uc3QgaXRlbSA9IHF1ZXVlLnNoaWZ0KClcbiAgICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgICBwb29sW2tRdWV1ZWRdLS1cbiAgICAgICAgbmVlZERyYWluID0gIXRoaXMuZGlzcGF0Y2goaXRlbS5vcHRzLCBpdGVtLmhhbmRsZXIpXG4gICAgICB9XG5cbiAgICAgIHRoaXNba05lZWREcmFpbl0gPSBuZWVkRHJhaW5cblxuICAgICAgaWYgKCF0aGlzW2tOZWVkRHJhaW5dICYmIHBvb2xba05lZWREcmFpbl0pIHtcbiAgICAgICAgcG9vbFtrTmVlZERyYWluXSA9IGZhbHNlXG4gICAgICAgIHBvb2wuZW1pdCgnZHJhaW4nLCBvcmlnaW4sIFtwb29sLCAuLi50YXJnZXRzXSlcbiAgICAgIH1cblxuICAgICAgaWYgKHBvb2xba0Nsb3NlZFJlc29sdmVdICYmIHF1ZXVlLmlzRW1wdHkoKSkge1xuICAgICAgICBQcm9taXNlXG4gICAgICAgICAgLmFsbChwb29sW2tDbGllbnRzXS5tYXAoYyA9PiBjLmNsb3NlKCkpKVxuICAgICAgICAgIC50aGVuKHBvb2xba0Nsb3NlZFJlc29sdmVdKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXNba09uQ29ubmVjdF0gPSAob3JpZ2luLCB0YXJnZXRzKSA9PiB7XG4gICAgICBwb29sLmVtaXQoJ2Nvbm5lY3QnLCBvcmlnaW4sIFtwb29sLCAuLi50YXJnZXRzXSlcbiAgICB9XG5cbiAgICB0aGlzW2tPbkRpc2Nvbm5lY3RdID0gKG9yaWdpbiwgdGFyZ2V0cywgZXJyKSA9PiB7XG4gICAgICBwb29sLmVtaXQoJ2Rpc2Nvbm5lY3QnLCBvcmlnaW4sIFtwb29sLCAuLi50YXJnZXRzXSwgZXJyKVxuICAgIH1cblxuICAgIHRoaXNba09uQ29ubmVjdGlvbkVycm9yXSA9IChvcmlnaW4sIHRhcmdldHMsIGVycikgPT4ge1xuICAgICAgcG9vbC5lbWl0KCdjb25uZWN0aW9uRXJyb3InLCBvcmlnaW4sIFtwb29sLCAuLi50YXJnZXRzXSwgZXJyKVxuICAgIH1cblxuICAgIHRoaXNba1N0YXRzXSA9IG5ldyBQb29sU3RhdHModGhpcylcbiAgfVxuXG4gIGdldCBba0J1c3ldICgpIHtcbiAgICByZXR1cm4gdGhpc1trTmVlZERyYWluXVxuICB9XG5cbiAgZ2V0IFtrQ29ubmVjdGVkXSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba0NsaWVudHNdLmZpbHRlcihjbGllbnQgPT4gY2xpZW50W2tDb25uZWN0ZWRdKS5sZW5ndGhcbiAgfVxuXG4gIGdldCBba0ZyZWVdICgpIHtcbiAgICByZXR1cm4gdGhpc1trQ2xpZW50c10uZmlsdGVyKGNsaWVudCA9PiBjbGllbnRba0Nvbm5lY3RlZF0gJiYgIWNsaWVudFtrTmVlZERyYWluXSkubGVuZ3RoXG4gIH1cblxuICBnZXQgW2tQZW5kaW5nXSAoKSB7XG4gICAgbGV0IHJldCA9IHRoaXNba1F1ZXVlZF1cbiAgICBmb3IgKGNvbnN0IHsgW2tQZW5kaW5nXTogcGVuZGluZyB9IG9mIHRoaXNba0NsaWVudHNdKSB7XG4gICAgICByZXQgKz0gcGVuZGluZ1xuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICBnZXQgW2tSdW5uaW5nXSAoKSB7XG4gICAgbGV0IHJldCA9IDBcbiAgICBmb3IgKGNvbnN0IHsgW2tSdW5uaW5nXTogcnVubmluZyB9IG9mIHRoaXNba0NsaWVudHNdKSB7XG4gICAgICByZXQgKz0gcnVubmluZ1xuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICBnZXQgW2tTaXplXSAoKSB7XG4gICAgbGV0IHJldCA9IHRoaXNba1F1ZXVlZF1cbiAgICBmb3IgKGNvbnN0IHsgW2tTaXplXTogc2l6ZSB9IG9mIHRoaXNba0NsaWVudHNdKSB7XG4gICAgICByZXQgKz0gc2l6ZVxuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICBnZXQgc3RhdHMgKCkge1xuICAgIHJldHVybiB0aGlzW2tTdGF0c11cbiAgfVxuXG4gIGFzeW5jIFtrQ2xvc2VdICgpIHtcbiAgICBpZiAodGhpc1trUXVldWVdLmlzRW1wdHkoKSkge1xuICAgICAgcmV0dXJuIFByb21pc2UuYWxsKHRoaXNba0NsaWVudHNdLm1hcChjID0+IGMuY2xvc2UoKSkpXG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICB0aGlzW2tDbG9zZWRSZXNvbHZlXSA9IHJlc29sdmVcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgW2tEZXN0cm95XSAoZXJyKSB7XG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzW2tRdWV1ZV0uc2hpZnQoKVxuICAgICAgaWYgKCFpdGVtKSB7XG4gICAgICAgIGJyZWFrXG4gICAgICB9XG4gICAgICBpdGVtLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgfVxuXG4gICAgcmV0dXJuIFByb21pc2UuYWxsKHRoaXNba0NsaWVudHNdLm1hcChjID0+IGMuZGVzdHJveShlcnIpKSlcbiAgfVxuXG4gIFtrRGlzcGF0Y2hdIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgY29uc3QgZGlzcGF0Y2hlciA9IHRoaXNba0dldERpc3BhdGNoZXJdKClcblxuICAgIGlmICghZGlzcGF0Y2hlcikge1xuICAgICAgdGhpc1trTmVlZERyYWluXSA9IHRydWVcbiAgICAgIHRoaXNba1F1ZXVlXS5wdXNoKHsgb3B0cywgaGFuZGxlciB9KVxuICAgICAgdGhpc1trUXVldWVkXSsrXG4gICAgfSBlbHNlIGlmICghZGlzcGF0Y2hlci5kaXNwYXRjaChvcHRzLCBoYW5kbGVyKSkge1xuICAgICAgZGlzcGF0Y2hlcltrTmVlZERyYWluXSA9IHRydWVcbiAgICAgIHRoaXNba05lZWREcmFpbl0gPSAhdGhpc1trR2V0RGlzcGF0Y2hlcl0oKVxuICAgIH1cblxuICAgIHJldHVybiAhdGhpc1trTmVlZERyYWluXVxuICB9XG5cbiAgW2tBZGRDbGllbnRdIChjbGllbnQpIHtcbiAgICBjbGllbnRcbiAgICAgIC5vbignZHJhaW4nLCB0aGlzW2tPbkRyYWluXSlcbiAgICAgIC5vbignY29ubmVjdCcsIHRoaXNba09uQ29ubmVjdF0pXG4gICAgICAub24oJ2Rpc2Nvbm5lY3QnLCB0aGlzW2tPbkRpc2Nvbm5lY3RdKVxuICAgICAgLm9uKCdjb25uZWN0aW9uRXJyb3InLCB0aGlzW2tPbkNvbm5lY3Rpb25FcnJvcl0pXG5cbiAgICB0aGlzW2tDbGllbnRzXS5wdXNoKGNsaWVudClcblxuICAgIGlmICh0aGlzW2tOZWVkRHJhaW5dKSB7XG4gICAgICBwcm9jZXNzLm5leHRUaWNrKCgpID0+IHtcbiAgICAgICAgaWYgKHRoaXNba05lZWREcmFpbl0pIHtcbiAgICAgICAgICB0aGlzW2tPbkRyYWluXShjbGllbnRba1VybF0sIFt0aGlzLCBjbGllbnRdKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBba1JlbW92ZUNsaWVudF0gKGNsaWVudCkge1xuICAgIGNsaWVudC5jbG9zZSgoKSA9PiB7XG4gICAgICBjb25zdCBpZHggPSB0aGlzW2tDbGllbnRzXS5pbmRleE9mKGNsaWVudClcbiAgICAgIGlmIChpZHggIT09IC0xKSB7XG4gICAgICAgIHRoaXNba0NsaWVudHNdLnNwbGljZShpZHgsIDEpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXNba05lZWREcmFpbl0gPSB0aGlzW2tDbGllbnRzXS5zb21lKGRpc3BhdGNoZXIgPT4gKFxuICAgICAgIWRpc3BhdGNoZXJba05lZWREcmFpbl0gJiZcbiAgICAgIGRpc3BhdGNoZXIuY2xvc2VkICE9PSB0cnVlICYmXG4gICAgICBkaXNwYXRjaGVyLmRlc3Ryb3llZCAhPT0gdHJ1ZVxuICAgICkpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIFBvb2xCYXNlLFxuICBrQ2xpZW50cyxcbiAga05lZWREcmFpbixcbiAga0FkZENsaWVudCxcbiAga1JlbW92ZUNsaWVudCxcbiAga0dldERpc3BhdGNoZXJcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBQb29sQmFzZSxcbiAga0NsaWVudHMsXG4gIGtOZWVkRHJhaW4sXG4gIGtBZGRDbGllbnQsXG4gIGtHZXREaXNwYXRjaGVyXG59ID0gcmVxdWlyZSgnLi9wb29sLWJhc2UnKVxuY29uc3QgQ2xpZW50ID0gcmVxdWlyZSgnLi9jbGllbnQnKVxuY29uc3Qge1xuICBJbnZhbGlkQXJndW1lbnRFcnJvclxufSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4vY29yZS91dGlsJylcbmNvbnN0IHsga1VybCwga0ludGVyY2VwdG9ycyB9ID0gcmVxdWlyZSgnLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgYnVpbGRDb25uZWN0b3IgPSByZXF1aXJlKCcuL2NvcmUvY29ubmVjdCcpXG5cbmNvbnN0IGtPcHRpb25zID0gU3ltYm9sKCdvcHRpb25zJylcbmNvbnN0IGtDb25uZWN0aW9ucyA9IFN5bWJvbCgnY29ubmVjdGlvbnMnKVxuY29uc3Qga0ZhY3RvcnkgPSBTeW1ib2woJ2ZhY3RvcnknKVxuXG5mdW5jdGlvbiBkZWZhdWx0RmFjdG9yeSAob3JpZ2luLCBvcHRzKSB7XG4gIHJldHVybiBuZXcgQ2xpZW50KG9yaWdpbiwgb3B0cylcbn1cblxuY2xhc3MgUG9vbCBleHRlbmRzIFBvb2xCYXNlIHtcbiAgY29uc3RydWN0b3IgKG9yaWdpbiwge1xuICAgIGNvbm5lY3Rpb25zLFxuICAgIGZhY3RvcnkgPSBkZWZhdWx0RmFjdG9yeSxcbiAgICBjb25uZWN0LFxuICAgIGNvbm5lY3RUaW1lb3V0LFxuICAgIHRscyxcbiAgICBtYXhDYWNoZWRTZXNzaW9ucyxcbiAgICBzb2NrZXRQYXRoLFxuICAgIGF1dG9TZWxlY3RGYW1pbHksXG4gICAgYXV0b1NlbGVjdEZhbWlseUF0dGVtcHRUaW1lb3V0LFxuICAgIGFsbG93SDIsXG4gICAgLi4ub3B0aW9uc1xuICB9ID0ge30pIHtcbiAgICBzdXBlcigpXG5cbiAgICBpZiAoY29ubmVjdGlvbnMgIT0gbnVsbCAmJiAoIU51bWJlci5pc0Zpbml0ZShjb25uZWN0aW9ucykgfHwgY29ubmVjdGlvbnMgPCAwKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNvbm5lY3Rpb25zJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZmFjdG9yeSBtdXN0IGJlIGEgZnVuY3Rpb24uJylcbiAgICB9XG5cbiAgICBpZiAoY29ubmVjdCAhPSBudWxsICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBjb25uZWN0ICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdjb25uZWN0IG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBvYmplY3QnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29ubmVjdCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgY29ubmVjdCA9IGJ1aWxkQ29ubmVjdG9yKHtcbiAgICAgICAgLi4udGxzLFxuICAgICAgICBtYXhDYWNoZWRTZXNzaW9ucyxcbiAgICAgICAgYWxsb3dIMixcbiAgICAgICAgc29ja2V0UGF0aCxcbiAgICAgICAgdGltZW91dDogY29ubmVjdFRpbWVvdXQsXG4gICAgICAgIC4uLih1dGlsLm5vZGVIYXNBdXRvU2VsZWN0RmFtaWx5ICYmIGF1dG9TZWxlY3RGYW1pbHkgPyB7IGF1dG9TZWxlY3RGYW1pbHksIGF1dG9TZWxlY3RGYW1pbHlBdHRlbXB0VGltZW91dCB9IDogdW5kZWZpbmVkKSxcbiAgICAgICAgLi4uY29ubmVjdFxuICAgICAgfSlcbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gb3B0aW9ucy5pbnRlcmNlcHRvcnMgJiYgb3B0aW9ucy5pbnRlcmNlcHRvcnMuUG9vbCAmJiBBcnJheS5pc0FycmF5KG9wdGlvbnMuaW50ZXJjZXB0b3JzLlBvb2wpXG4gICAgICA/IG9wdGlvbnMuaW50ZXJjZXB0b3JzLlBvb2xcbiAgICAgIDogW11cbiAgICB0aGlzW2tDb25uZWN0aW9uc10gPSBjb25uZWN0aW9ucyB8fCBudWxsXG4gICAgdGhpc1trVXJsXSA9IHV0aWwucGFyc2VPcmlnaW4ob3JpZ2luKVxuICAgIHRoaXNba09wdGlvbnNdID0geyAuLi51dGlsLmRlZXBDbG9uZShvcHRpb25zKSwgY29ubmVjdCwgYWxsb3dIMiB9XG4gICAgdGhpc1trT3B0aW9uc10uaW50ZXJjZXB0b3JzID0gb3B0aW9ucy5pbnRlcmNlcHRvcnNcbiAgICAgID8geyAuLi5vcHRpb25zLmludGVyY2VwdG9ycyB9XG4gICAgICA6IHVuZGVmaW5lZFxuICAgIHRoaXNba0ZhY3RvcnldID0gZmFjdG9yeVxuXG4gICAgdGhpcy5vbignY29ubmVjdGlvbkVycm9yJywgKG9yaWdpbiwgdGFyZ2V0cywgZXJyb3IpID0+IHtcbiAgICAgIC8vIElmIGEgY29ubmVjdGlvbiBlcnJvciBvY2N1cnMsIHdlIHJlbW92ZSB0aGUgY2xpZW50IGZyb20gdGhlIHBvb2wsXG4gICAgICAvLyBhbmQgZW1pdCBhIGNvbm5lY3Rpb25FcnJvciBldmVudC4gVGhleSB3aWxsIG5vdCBiZSByZS11c2VkLlxuICAgICAgLy8gRml4ZXMgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzM4OTVcbiAgICAgIGZvciAoY29uc3QgdGFyZ2V0IG9mIHRhcmdldHMpIHtcbiAgICAgICAgLy8gRG8gbm90IHVzZSBrUmVtb3ZlQ2xpZW50IGhlcmUsIGFzIGl0IHdpbGwgY2xvc2UgdGhlIGNsaWVudCxcbiAgICAgICAgLy8gYnV0IHRoZSBjbGllbnQgY2Fubm90IGJlIGNsb3NlZCBpbiB0aGlzIHN0YXRlLlxuICAgICAgICBjb25zdCBpZHggPSB0aGlzW2tDbGllbnRzXS5pbmRleE9mKHRhcmdldClcbiAgICAgICAgaWYgKGlkeCAhPT0gLTEpIHtcbiAgICAgICAgICB0aGlzW2tDbGllbnRzXS5zcGxpY2UoaWR4LCAxKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIFtrR2V0RGlzcGF0Y2hlcl0gKCkge1xuICAgIGxldCBkaXNwYXRjaGVyID0gdGhpc1trQ2xpZW50c10uZmluZChkaXNwYXRjaGVyID0+ICFkaXNwYXRjaGVyW2tOZWVkRHJhaW5dKVxuXG4gICAgaWYgKGRpc3BhdGNoZXIpIHtcbiAgICAgIHJldHVybiBkaXNwYXRjaGVyXG4gICAgfVxuXG4gICAgaWYgKCF0aGlzW2tDb25uZWN0aW9uc10gfHwgdGhpc1trQ2xpZW50c10ubGVuZ3RoIDwgdGhpc1trQ29ubmVjdGlvbnNdKSB7XG4gICAgICBkaXNwYXRjaGVyID0gdGhpc1trRmFjdG9yeV0odGhpc1trVXJsXSwgdGhpc1trT3B0aW9uc10pXG4gICAgICB0aGlzW2tBZGRDbGllbnRdKGRpc3BhdGNoZXIpXG4gICAgfVxuXG4gICAgcmV0dXJuIGRpc3BhdGNoZXJcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IFBvb2xcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBCYWxhbmNlZFBvb2xNaXNzaW5nVXBzdHJlYW1FcnJvcixcbiAgSW52YWxpZEFyZ3VtZW50RXJyb3Jcbn0gPSByZXF1aXJlKCcuL2NvcmUvZXJyb3JzJylcbmNvbnN0IHtcbiAgUG9vbEJhc2UsXG4gIGtDbGllbnRzLFxuICBrTmVlZERyYWluLFxuICBrQWRkQ2xpZW50LFxuICBrUmVtb3ZlQ2xpZW50LFxuICBrR2V0RGlzcGF0Y2hlclxufSA9IHJlcXVpcmUoJy4vcG9vbC1iYXNlJylcbmNvbnN0IFBvb2wgPSByZXF1aXJlKCcuL3Bvb2wnKVxuY29uc3QgeyBrVXJsLCBrSW50ZXJjZXB0b3JzIH0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5jb25zdCB7IHBhcnNlT3JpZ2luIH0gPSByZXF1aXJlKCcuL2NvcmUvdXRpbCcpXG5jb25zdCBrRmFjdG9yeSA9IFN5bWJvbCgnZmFjdG9yeScpXG5cbmNvbnN0IGtPcHRpb25zID0gU3ltYm9sKCdvcHRpb25zJylcbmNvbnN0IGtHcmVhdGVzdENvbW1vbkRpdmlzb3IgPSBTeW1ib2woJ2tHcmVhdGVzdENvbW1vbkRpdmlzb3InKVxuY29uc3Qga0N1cnJlbnRXZWlnaHQgPSBTeW1ib2woJ2tDdXJyZW50V2VpZ2h0JylcbmNvbnN0IGtJbmRleCA9IFN5bWJvbCgna0luZGV4JylcbmNvbnN0IGtXZWlnaHQgPSBTeW1ib2woJ2tXZWlnaHQnKVxuY29uc3Qga01heFdlaWdodFBlclNlcnZlciA9IFN5bWJvbCgna01heFdlaWdodFBlclNlcnZlcicpXG5jb25zdCBrRXJyb3JQZW5hbHR5ID0gU3ltYm9sKCdrRXJyb3JQZW5hbHR5JylcblxuZnVuY3Rpb24gZ2V0R3JlYXRlc3RDb21tb25EaXZpc29yIChhLCBiKSB7XG4gIGlmIChiID09PSAwKSByZXR1cm4gYVxuICByZXR1cm4gZ2V0R3JlYXRlc3RDb21tb25EaXZpc29yKGIsIGEgJSBiKVxufVxuXG5mdW5jdGlvbiBkZWZhdWx0RmFjdG9yeSAob3JpZ2luLCBvcHRzKSB7XG4gIHJldHVybiBuZXcgUG9vbChvcmlnaW4sIG9wdHMpXG59XG5cbmNsYXNzIEJhbGFuY2VkUG9vbCBleHRlbmRzIFBvb2xCYXNlIHtcbiAgY29uc3RydWN0b3IgKHVwc3RyZWFtcyA9IFtdLCB7IGZhY3RvcnkgPSBkZWZhdWx0RmFjdG9yeSwgLi4ub3B0cyB9ID0ge30pIHtcbiAgICBzdXBlcigpXG5cbiAgICB0aGlzW2tPcHRpb25zXSA9IG9wdHNcbiAgICB0aGlzW2tJbmRleF0gPSAtMVxuICAgIHRoaXNba0N1cnJlbnRXZWlnaHRdID0gMFxuXG4gICAgdGhpc1trTWF4V2VpZ2h0UGVyU2VydmVyXSA9IHRoaXNba09wdGlvbnNdLm1heFdlaWdodFBlclNlcnZlciB8fCAxMDBcbiAgICB0aGlzW2tFcnJvclBlbmFsdHldID0gdGhpc1trT3B0aW9uc10uZXJyb3JQZW5hbHR5IHx8IDE1XG5cbiAgICBpZiAoIUFycmF5LmlzQXJyYXkodXBzdHJlYW1zKSkge1xuICAgICAgdXBzdHJlYW1zID0gW3Vwc3RyZWFtc11cbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignZmFjdG9yeSBtdXN0IGJlIGEgZnVuY3Rpb24uJylcbiAgICB9XG5cbiAgICB0aGlzW2tJbnRlcmNlcHRvcnNdID0gb3B0cy5pbnRlcmNlcHRvcnMgJiYgb3B0cy5pbnRlcmNlcHRvcnMuQmFsYW5jZWRQb29sICYmIEFycmF5LmlzQXJyYXkob3B0cy5pbnRlcmNlcHRvcnMuQmFsYW5jZWRQb29sKVxuICAgICAgPyBvcHRzLmludGVyY2VwdG9ycy5CYWxhbmNlZFBvb2xcbiAgICAgIDogW11cbiAgICB0aGlzW2tGYWN0b3J5XSA9IGZhY3RvcnlcblxuICAgIGZvciAoY29uc3QgdXBzdHJlYW0gb2YgdXBzdHJlYW1zKSB7XG4gICAgICB0aGlzLmFkZFVwc3RyZWFtKHVwc3RyZWFtKVxuICAgIH1cbiAgICB0aGlzLl91cGRhdGVCYWxhbmNlZFBvb2xTdGF0cygpXG4gIH1cblxuICBhZGRVcHN0cmVhbSAodXBzdHJlYW0pIHtcbiAgICBjb25zdCB1cHN0cmVhbU9yaWdpbiA9IHBhcnNlT3JpZ2luKHVwc3RyZWFtKS5vcmlnaW5cblxuICAgIGlmICh0aGlzW2tDbGllbnRzXS5maW5kKChwb29sKSA9PiAoXG4gICAgICBwb29sW2tVcmxdLm9yaWdpbiA9PT0gdXBzdHJlYW1PcmlnaW4gJiZcbiAgICAgIHBvb2wuY2xvc2VkICE9PSB0cnVlICYmXG4gICAgICBwb29sLmRlc3Ryb3llZCAhPT0gdHJ1ZVxuICAgICkpKSB7XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cbiAgICBjb25zdCBwb29sID0gdGhpc1trRmFjdG9yeV0odXBzdHJlYW1PcmlnaW4sIE9iamVjdC5hc3NpZ24oe30sIHRoaXNba09wdGlvbnNdKSlcblxuICAgIHRoaXNba0FkZENsaWVudF0ocG9vbClcbiAgICBwb29sLm9uKCdjb25uZWN0JywgKCkgPT4ge1xuICAgICAgcG9vbFtrV2VpZ2h0XSA9IE1hdGgubWluKHRoaXNba01heFdlaWdodFBlclNlcnZlcl0sIHBvb2xba1dlaWdodF0gKyB0aGlzW2tFcnJvclBlbmFsdHldKVxuICAgIH0pXG5cbiAgICBwb29sLm9uKCdjb25uZWN0aW9uRXJyb3InLCAoKSA9PiB7XG4gICAgICBwb29sW2tXZWlnaHRdID0gTWF0aC5tYXgoMSwgcG9vbFtrV2VpZ2h0XSAtIHRoaXNba0Vycm9yUGVuYWx0eV0pXG4gICAgICB0aGlzLl91cGRhdGVCYWxhbmNlZFBvb2xTdGF0cygpXG4gICAgfSlcblxuICAgIHBvb2wub24oJ2Rpc2Nvbm5lY3QnLCAoLi4uYXJncykgPT4ge1xuICAgICAgY29uc3QgZXJyID0gYXJnc1syXVxuICAgICAgaWYgKGVyciAmJiBlcnIuY29kZSA9PT0gJ1VORF9FUlJfU09DS0VUJykge1xuICAgICAgICAvLyBkZWNyZWFzZSB0aGUgd2VpZ2h0IG9mIHRoZSBwb29sLlxuICAgICAgICBwb29sW2tXZWlnaHRdID0gTWF0aC5tYXgoMSwgcG9vbFtrV2VpZ2h0XSAtIHRoaXNba0Vycm9yUGVuYWx0eV0pXG4gICAgICAgIHRoaXMuX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzKClcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgZm9yIChjb25zdCBjbGllbnQgb2YgdGhpc1trQ2xpZW50c10pIHtcbiAgICAgIGNsaWVudFtrV2VpZ2h0XSA9IHRoaXNba01heFdlaWdodFBlclNlcnZlcl1cbiAgICB9XG5cbiAgICB0aGlzLl91cGRhdGVCYWxhbmNlZFBvb2xTdGF0cygpXG5cbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgX3VwZGF0ZUJhbGFuY2VkUG9vbFN0YXRzICgpIHtcbiAgICB0aGlzW2tHcmVhdGVzdENvbW1vbkRpdmlzb3JdID0gdGhpc1trQ2xpZW50c10ubWFwKHAgPT4gcFtrV2VpZ2h0XSkucmVkdWNlKGdldEdyZWF0ZXN0Q29tbW9uRGl2aXNvciwgMClcbiAgfVxuXG4gIHJlbW92ZVVwc3RyZWFtICh1cHN0cmVhbSkge1xuICAgIGNvbnN0IHVwc3RyZWFtT3JpZ2luID0gcGFyc2VPcmlnaW4odXBzdHJlYW0pLm9yaWdpblxuXG4gICAgY29uc3QgcG9vbCA9IHRoaXNba0NsaWVudHNdLmZpbmQoKHBvb2wpID0+IChcbiAgICAgIHBvb2xba1VybF0ub3JpZ2luID09PSB1cHN0cmVhbU9yaWdpbiAmJlxuICAgICAgcG9vbC5jbG9zZWQgIT09IHRydWUgJiZcbiAgICAgIHBvb2wuZGVzdHJveWVkICE9PSB0cnVlXG4gICAgKSlcblxuICAgIGlmIChwb29sKSB7XG4gICAgICB0aGlzW2tSZW1vdmVDbGllbnRdKHBvb2wpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIGdldCB1cHN0cmVhbXMgKCkge1xuICAgIHJldHVybiB0aGlzW2tDbGllbnRzXVxuICAgICAgLmZpbHRlcihkaXNwYXRjaGVyID0+IGRpc3BhdGNoZXIuY2xvc2VkICE9PSB0cnVlICYmIGRpc3BhdGNoZXIuZGVzdHJveWVkICE9PSB0cnVlKVxuICAgICAgLm1hcCgocCkgPT4gcFtrVXJsXS5vcmlnaW4pXG4gIH1cblxuICBba0dldERpc3BhdGNoZXJdICgpIHtcbiAgICAvLyBXZSB2YWxpZGF0ZSB0aGF0IHBvb2xzIGlzIGdyZWF0ZXIgdGhhbiAwLFxuICAgIC8vIG90aGVyd2lzZSB3ZSB3b3VsZCBoYXZlIHRvIHdhaXQgdW50aWwgYW4gdXBzdHJlYW1cbiAgICAvLyBpcyBhZGRlZCwgd2hpY2ggbWlnaHQgbmV2ZXIgaGFwcGVuLlxuICAgIGlmICh0aGlzW2tDbGllbnRzXS5sZW5ndGggPT09IDApIHtcbiAgICAgIHRocm93IG5ldyBCYWxhbmNlZFBvb2xNaXNzaW5nVXBzdHJlYW1FcnJvcigpXG4gICAgfVxuXG4gICAgY29uc3QgZGlzcGF0Y2hlciA9IHRoaXNba0NsaWVudHNdLmZpbmQoZGlzcGF0Y2hlciA9PiAoXG4gICAgICAhZGlzcGF0Y2hlcltrTmVlZERyYWluXSAmJlxuICAgICAgZGlzcGF0Y2hlci5jbG9zZWQgIT09IHRydWUgJiZcbiAgICAgIGRpc3BhdGNoZXIuZGVzdHJveWVkICE9PSB0cnVlXG4gICAgKSlcblxuICAgIGlmICghZGlzcGF0Y2hlcikge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgYWxsQ2xpZW50c0J1c3kgPSB0aGlzW2tDbGllbnRzXS5tYXAocG9vbCA9PiBwb29sW2tOZWVkRHJhaW5dKS5yZWR1Y2UoKGEsIGIpID0+IGEgJiYgYiwgdHJ1ZSlcblxuICAgIGlmIChhbGxDbGllbnRzQnVzeSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgbGV0IGNvdW50ZXIgPSAwXG5cbiAgICBsZXQgbWF4V2VpZ2h0SW5kZXggPSB0aGlzW2tDbGllbnRzXS5maW5kSW5kZXgocG9vbCA9PiAhcG9vbFtrTmVlZERyYWluXSlcblxuICAgIHdoaWxlIChjb3VudGVyKysgPCB0aGlzW2tDbGllbnRzXS5sZW5ndGgpIHtcbiAgICAgIHRoaXNba0luZGV4XSA9ICh0aGlzW2tJbmRleF0gKyAxKSAlIHRoaXNba0NsaWVudHNdLmxlbmd0aFxuICAgICAgY29uc3QgcG9vbCA9IHRoaXNba0NsaWVudHNdW3RoaXNba0luZGV4XV1cblxuICAgICAgLy8gZmluZCBwb29sIGluZGV4IHdpdGggdGhlIGxhcmdlc3Qgd2VpZ2h0XG4gICAgICBpZiAocG9vbFtrV2VpZ2h0XSA+IHRoaXNba0NsaWVudHNdW21heFdlaWdodEluZGV4XVtrV2VpZ2h0XSAmJiAhcG9vbFtrTmVlZERyYWluXSkge1xuICAgICAgICBtYXhXZWlnaHRJbmRleCA9IHRoaXNba0luZGV4XVxuICAgICAgfVxuXG4gICAgICAvLyBkZWNyZWFzZSB0aGUgY3VycmVudCB3ZWlnaHQgZXZlcnkgYHRoaXNba0NsaWVudHNdLmxlbmd0aGAuXG4gICAgICBpZiAodGhpc1trSW5kZXhdID09PSAwKSB7XG4gICAgICAgIC8vIFNldCB0aGUgY3VycmVudCB3ZWlnaHQgdG8gdGhlIG5leHQgbG93ZXIgd2VpZ2h0LlxuICAgICAgICB0aGlzW2tDdXJyZW50V2VpZ2h0XSA9IHRoaXNba0N1cnJlbnRXZWlnaHRdIC0gdGhpc1trR3JlYXRlc3RDb21tb25EaXZpc29yXVxuXG4gICAgICAgIGlmICh0aGlzW2tDdXJyZW50V2VpZ2h0XSA8PSAwKSB7XG4gICAgICAgICAgdGhpc1trQ3VycmVudFdlaWdodF0gPSB0aGlzW2tNYXhXZWlnaHRQZXJTZXJ2ZXJdXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChwb29sW2tXZWlnaHRdID49IHRoaXNba0N1cnJlbnRXZWlnaHRdICYmICghcG9vbFtrTmVlZERyYWluXSkpIHtcbiAgICAgICAgcmV0dXJuIHBvb2xcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzW2tDdXJyZW50V2VpZ2h0XSA9IHRoaXNba0NsaWVudHNdW21heFdlaWdodEluZGV4XVtrV2VpZ2h0XVxuICAgIHRoaXNba0luZGV4XSA9IG1heFdlaWdodEluZGV4XG4gICAgcmV0dXJuIHRoaXNba0NsaWVudHNdW21heFdlaWdodEluZGV4XVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQmFsYW5jZWRQb29sXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBmaWxlOiBvbmx5IGZvciBOb2RlIDEyICovXG5cbmNvbnN0IHsga0Nvbm5lY3RlZCwga1NpemUgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5cbmNsYXNzIENvbXBhdFdlYWtSZWYge1xuICBjb25zdHJ1Y3RvciAodmFsdWUpIHtcbiAgICB0aGlzLnZhbHVlID0gdmFsdWVcbiAgfVxuXG4gIGRlcmVmICgpIHtcbiAgICByZXR1cm4gdGhpcy52YWx1ZVtrQ29ubmVjdGVkXSA9PT0gMCAmJiB0aGlzLnZhbHVlW2tTaXplXSA9PT0gMFxuICAgICAgPyB1bmRlZmluZWRcbiAgICAgIDogdGhpcy52YWx1ZVxuICB9XG59XG5cbmNsYXNzIENvbXBhdEZpbmFsaXplciB7XG4gIGNvbnN0cnVjdG9yIChmaW5hbGl6ZXIpIHtcbiAgICB0aGlzLmZpbmFsaXplciA9IGZpbmFsaXplclxuICB9XG5cbiAgcmVnaXN0ZXIgKGRpc3BhdGNoZXIsIGtleSkge1xuICAgIGlmIChkaXNwYXRjaGVyLm9uKSB7XG4gICAgICBkaXNwYXRjaGVyLm9uKCdkaXNjb25uZWN0JywgKCkgPT4ge1xuICAgICAgICBpZiAoZGlzcGF0Y2hlcltrQ29ubmVjdGVkXSA9PT0gMCAmJiBkaXNwYXRjaGVyW2tTaXplXSA9PT0gMCkge1xuICAgICAgICAgIHRoaXMuZmluYWxpemVyKGtleSlcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XG4gIC8vIEZJWE1FOiByZW1vdmUgd29ya2Fyb3VuZCB3aGVuIHRoZSBOb2RlIGJ1ZyBpcyBmaXhlZFxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL25vZGUvaXNzdWVzLzQ5MzQ0I2lzc3VlY29tbWVudC0xNzQxNzc2MzA4XG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX1Y4X0NPVkVSQUdFKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIFdlYWtSZWY6IENvbXBhdFdlYWtSZWYsXG4gICAgICBGaW5hbGl6YXRpb25SZWdpc3RyeTogQ29tcGF0RmluYWxpemVyXG4gICAgfVxuICB9XG4gIHJldHVybiB7XG4gICAgV2Vha1JlZjogZ2xvYmFsLldlYWtSZWYgfHwgQ29tcGF0V2Vha1JlZixcbiAgICBGaW5hbGl6YXRpb25SZWdpc3RyeTogZ2xvYmFsLkZpbmFsaXphdGlvblJlZ2lzdHJ5IHx8IENvbXBhdEZpbmFsaXplclxuICB9XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4vY29yZS9lcnJvcnMnKVxuY29uc3QgeyBrQ2xpZW50cywga1J1bm5pbmcsIGtDbG9zZSwga0Rlc3Ryb3ksIGtEaXNwYXRjaCwga0ludGVyY2VwdG9ycyB9ID0gcmVxdWlyZSgnLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgRGlzcGF0Y2hlckJhc2UgPSByZXF1aXJlKCcuL2Rpc3BhdGNoZXItYmFzZScpXG5jb25zdCBQb29sID0gcmVxdWlyZSgnLi9wb29sJylcbmNvbnN0IENsaWVudCA9IHJlcXVpcmUoJy4vY2xpZW50JylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuL2NvcmUvdXRpbCcpXG5jb25zdCBjcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yID0gcmVxdWlyZSgnLi9pbnRlcmNlcHRvci9yZWRpcmVjdEludGVyY2VwdG9yJylcbmNvbnN0IHsgV2Vha1JlZiwgRmluYWxpemF0aW9uUmVnaXN0cnkgfSA9IHJlcXVpcmUoJy4vY29tcGF0L2Rpc3BhdGNoZXItd2Vha3JlZicpKClcblxuY29uc3Qga09uQ29ubmVjdCA9IFN5bWJvbCgnb25Db25uZWN0JylcbmNvbnN0IGtPbkRpc2Nvbm5lY3QgPSBTeW1ib2woJ29uRGlzY29ubmVjdCcpXG5jb25zdCBrT25Db25uZWN0aW9uRXJyb3IgPSBTeW1ib2woJ29uQ29ubmVjdGlvbkVycm9yJylcbmNvbnN0IGtNYXhSZWRpcmVjdGlvbnMgPSBTeW1ib2woJ21heFJlZGlyZWN0aW9ucycpXG5jb25zdCBrT25EcmFpbiA9IFN5bWJvbCgnb25EcmFpbicpXG5jb25zdCBrRmFjdG9yeSA9IFN5bWJvbCgnZmFjdG9yeScpXG5jb25zdCBrRmluYWxpemVyID0gU3ltYm9sKCdmaW5hbGl6ZXInKVxuY29uc3Qga09wdGlvbnMgPSBTeW1ib2woJ29wdGlvbnMnKVxuXG5mdW5jdGlvbiBkZWZhdWx0RmFjdG9yeSAob3JpZ2luLCBvcHRzKSB7XG4gIHJldHVybiBvcHRzICYmIG9wdHMuY29ubmVjdGlvbnMgPT09IDFcbiAgICA/IG5ldyBDbGllbnQob3JpZ2luLCBvcHRzKVxuICAgIDogbmV3IFBvb2wob3JpZ2luLCBvcHRzKVxufVxuXG5jbGFzcyBBZ2VudCBleHRlbmRzIERpc3BhdGNoZXJCYXNlIHtcbiAgY29uc3RydWN0b3IgKHsgZmFjdG9yeSA9IGRlZmF1bHRGYWN0b3J5LCBtYXhSZWRpcmVjdGlvbnMgPSAwLCBjb25uZWN0LCAuLi5vcHRpb25zIH0gPSB7fSkge1xuICAgIHN1cGVyKClcblxuICAgIGlmICh0eXBlb2YgZmFjdG9yeSAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdmYWN0b3J5IG11c3QgYmUgYSBmdW5jdGlvbi4nKVxuICAgIH1cblxuICAgIGlmIChjb25uZWN0ICE9IG51bGwgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2Nvbm5lY3QgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIG9iamVjdCcpXG4gICAgfVxuXG4gICAgaWYgKCFOdW1iZXIuaXNJbnRlZ2VyKG1heFJlZGlyZWN0aW9ucykgfHwgbWF4UmVkaXJlY3Rpb25zIDwgMCkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdtYXhSZWRpcmVjdGlvbnMgbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlcicpXG4gICAgfVxuXG4gICAgaWYgKGNvbm5lY3QgJiYgdHlwZW9mIGNvbm5lY3QgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIGNvbm5lY3QgPSB7IC4uLmNvbm5lY3QgfVxuICAgIH1cblxuICAgIHRoaXNba0ludGVyY2VwdG9yc10gPSBvcHRpb25zLmludGVyY2VwdG9ycyAmJiBvcHRpb25zLmludGVyY2VwdG9ycy5BZ2VudCAmJiBBcnJheS5pc0FycmF5KG9wdGlvbnMuaW50ZXJjZXB0b3JzLkFnZW50KVxuICAgICAgPyBvcHRpb25zLmludGVyY2VwdG9ycy5BZ2VudFxuICAgICAgOiBbY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvcih7IG1heFJlZGlyZWN0aW9ucyB9KV1cblxuICAgIHRoaXNba09wdGlvbnNdID0geyAuLi51dGlsLmRlZXBDbG9uZShvcHRpb25zKSwgY29ubmVjdCB9XG4gICAgdGhpc1trT3B0aW9uc10uaW50ZXJjZXB0b3JzID0gb3B0aW9ucy5pbnRlcmNlcHRvcnNcbiAgICAgID8geyAuLi5vcHRpb25zLmludGVyY2VwdG9ycyB9XG4gICAgICA6IHVuZGVmaW5lZFxuICAgIHRoaXNba01heFJlZGlyZWN0aW9uc10gPSBtYXhSZWRpcmVjdGlvbnNcbiAgICB0aGlzW2tGYWN0b3J5XSA9IGZhY3RvcnlcbiAgICB0aGlzW2tDbGllbnRzXSA9IG5ldyBNYXAoKVxuICAgIHRoaXNba0ZpbmFsaXplcl0gPSBuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoLyogaXN0YW5idWwgaWdub3JlIG5leHQ6IGdjIGlzIHVuZGV0ZXJtaW5pc3RpYyAqLyBrZXkgPT4ge1xuICAgICAgY29uc3QgcmVmID0gdGhpc1trQ2xpZW50c10uZ2V0KGtleSlcbiAgICAgIGlmIChyZWYgIT09IHVuZGVmaW5lZCAmJiByZWYuZGVyZWYoKSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRoaXNba0NsaWVudHNdLmRlbGV0ZShrZXkpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGNvbnN0IGFnZW50ID0gdGhpc1xuXG4gICAgdGhpc1trT25EcmFpbl0gPSAob3JpZ2luLCB0YXJnZXRzKSA9PiB7XG4gICAgICBhZ2VudC5lbWl0KCdkcmFpbicsIG9yaWdpbiwgW2FnZW50LCAuLi50YXJnZXRzXSlcbiAgICB9XG5cbiAgICB0aGlzW2tPbkNvbm5lY3RdID0gKG9yaWdpbiwgdGFyZ2V0cykgPT4ge1xuICAgICAgYWdlbnQuZW1pdCgnY29ubmVjdCcsIG9yaWdpbiwgW2FnZW50LCAuLi50YXJnZXRzXSlcbiAgICB9XG5cbiAgICB0aGlzW2tPbkRpc2Nvbm5lY3RdID0gKG9yaWdpbiwgdGFyZ2V0cywgZXJyKSA9PiB7XG4gICAgICBhZ2VudC5lbWl0KCdkaXNjb25uZWN0Jywgb3JpZ2luLCBbYWdlbnQsIC4uLnRhcmdldHNdLCBlcnIpXG4gICAgfVxuXG4gICAgdGhpc1trT25Db25uZWN0aW9uRXJyb3JdID0gKG9yaWdpbiwgdGFyZ2V0cywgZXJyKSA9PiB7XG4gICAgICBhZ2VudC5lbWl0KCdjb25uZWN0aW9uRXJyb3InLCBvcmlnaW4sIFthZ2VudCwgLi4udGFyZ2V0c10sIGVycilcbiAgICB9XG4gIH1cblxuICBnZXQgW2tSdW5uaW5nXSAoKSB7XG4gICAgbGV0IHJldCA9IDBcbiAgICBmb3IgKGNvbnN0IHJlZiBvZiB0aGlzW2tDbGllbnRzXS52YWx1ZXMoKSkge1xuICAgICAgY29uc3QgY2xpZW50ID0gcmVmLmRlcmVmKClcbiAgICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0OiBnYyBpcyB1bmRldGVybWluaXN0aWMgKi9cbiAgICAgIGlmIChjbGllbnQpIHtcbiAgICAgICAgcmV0ICs9IGNsaWVudFtrUnVubmluZ11cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldFxuICB9XG5cbiAgW2tEaXNwYXRjaF0gKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBsZXQga2V5XG4gICAgaWYgKG9wdHMub3JpZ2luICYmICh0eXBlb2Ygb3B0cy5vcmlnaW4gPT09ICdzdHJpbmcnIHx8IG9wdHMub3JpZ2luIGluc3RhbmNlb2YgVVJMKSkge1xuICAgICAga2V5ID0gU3RyaW5nKG9wdHMub3JpZ2luKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMub3JpZ2luIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIG9yIFVSTC4nKVxuICAgIH1cblxuICAgIGNvbnN0IHJlZiA9IHRoaXNba0NsaWVudHNdLmdldChrZXkpXG5cbiAgICBsZXQgZGlzcGF0Y2hlciA9IHJlZiA/IHJlZi5kZXJlZigpIDogbnVsbFxuICAgIGlmICghZGlzcGF0Y2hlcikge1xuICAgICAgZGlzcGF0Y2hlciA9IHRoaXNba0ZhY3RvcnldKG9wdHMub3JpZ2luLCB0aGlzW2tPcHRpb25zXSlcbiAgICAgICAgLm9uKCdkcmFpbicsIHRoaXNba09uRHJhaW5dKVxuICAgICAgICAub24oJ2Nvbm5lY3QnLCB0aGlzW2tPbkNvbm5lY3RdKVxuICAgICAgICAub24oJ2Rpc2Nvbm5lY3QnLCB0aGlzW2tPbkRpc2Nvbm5lY3RdKVxuICAgICAgICAub24oJ2Nvbm5lY3Rpb25FcnJvcicsIHRoaXNba09uQ29ubmVjdGlvbkVycm9yXSlcblxuICAgICAgdGhpc1trQ2xpZW50c10uc2V0KGtleSwgbmV3IFdlYWtSZWYoZGlzcGF0Y2hlcikpXG4gICAgICB0aGlzW2tGaW5hbGl6ZXJdLnJlZ2lzdGVyKGRpc3BhdGNoZXIsIGtleSlcbiAgICB9XG5cbiAgICByZXR1cm4gZGlzcGF0Y2hlci5kaXNwYXRjaChvcHRzLCBoYW5kbGVyKVxuICB9XG5cbiAgYXN5bmMgW2tDbG9zZV0gKCkge1xuICAgIGNvbnN0IGNsb3NlUHJvbWlzZXMgPSBbXVxuICAgIGZvciAoY29uc3QgcmVmIG9mIHRoaXNba0NsaWVudHNdLnZhbHVlcygpKSB7XG4gICAgICBjb25zdCBjbGllbnQgPSByZWYuZGVyZWYoKVxuICAgICAgLyogaXN0YW5idWwgaWdub3JlIGVsc2U6IGdjIGlzIHVuZGV0ZXJtaW5pc3RpYyAqL1xuICAgICAgaWYgKGNsaWVudCkge1xuICAgICAgICBjbG9zZVByb21pc2VzLnB1c2goY2xpZW50LmNsb3NlKCkpXG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoY2xvc2VQcm9taXNlcylcbiAgfVxuXG4gIGFzeW5jIFtrRGVzdHJveV0gKGVycikge1xuICAgIGNvbnN0IGRlc3Ryb3lQcm9taXNlcyA9IFtdXG4gICAgZm9yIChjb25zdCByZWYgb2YgdGhpc1trQ2xpZW50c10udmFsdWVzKCkpIHtcbiAgICAgIGNvbnN0IGNsaWVudCA9IHJlZi5kZXJlZigpXG4gICAgICAvKiBpc3RhbmJ1bCBpZ25vcmUgZWxzZTogZ2MgaXMgdW5kZXRlcm1pbmlzdGljICovXG4gICAgICBpZiAoY2xpZW50KSB7XG4gICAgICAgIGRlc3Ryb3lQcm9taXNlcy5wdXNoKGNsaWVudC5kZXN0cm95KGVycikpXG4gICAgICB9XG4gICAgfVxuXG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoZGVzdHJveVByb21pc2VzKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gQWdlbnRcbiIsICIvLyBQb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9wdWxsLzkwN1xuXG4ndXNlIHN0cmljdCdcblxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgUmVhZGFibGUgfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB7IFJlcXVlc3RBYm9ydGVkRXJyb3IsIE5vdFN1cHBvcnRlZEVycm9yLCBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IFJlYWRhYmxlU3RyZWFtRnJvbSwgdG9VU1ZTdHJpbmcgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5cbmxldCBCbG9iXG5cbmNvbnN0IGtDb25zdW1lID0gU3ltYm9sKCdrQ29uc3VtZScpXG5jb25zdCBrUmVhZGluZyA9IFN5bWJvbCgna1JlYWRpbmcnKVxuY29uc3Qga0JvZHkgPSBTeW1ib2woJ2tCb2R5JylcbmNvbnN0IGtBYm9ydCA9IFN5bWJvbCgnYWJvcnQnKVxuY29uc3Qga0NvbnRlbnRUeXBlID0gU3ltYm9sKCdrQ29udGVudFR5cGUnKVxuXG5jb25zdCBub29wID0gKCkgPT4ge31cblxubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBCb2R5UmVhZGFibGUgZXh0ZW5kcyBSZWFkYWJsZSB7XG4gIGNvbnN0cnVjdG9yICh7XG4gICAgcmVzdW1lLFxuICAgIGFib3J0LFxuICAgIGNvbnRlbnRUeXBlID0gJycsXG4gICAgaGlnaFdhdGVyTWFyayA9IDY0ICogMTAyNCAvLyBTYW1lIGFzIG5vZGVqcyBmcyBzdHJlYW1zLlxuICB9KSB7XG4gICAgc3VwZXIoe1xuICAgICAgYXV0b0Rlc3Ryb3k6IHRydWUsXG4gICAgICByZWFkOiByZXN1bWUsXG4gICAgICBoaWdoV2F0ZXJNYXJrXG4gICAgfSlcblxuICAgIHRoaXMuX3JlYWRhYmxlU3RhdGUuZGF0YUVtaXR0ZWQgPSBmYWxzZVxuXG4gICAgdGhpc1trQWJvcnRdID0gYWJvcnRcbiAgICB0aGlzW2tDb25zdW1lXSA9IG51bGxcbiAgICB0aGlzW2tCb2R5XSA9IG51bGxcbiAgICB0aGlzW2tDb250ZW50VHlwZV0gPSBjb250ZW50VHlwZVxuXG4gICAgLy8gSXMgc3RyZWFtIGJlaW5nIGNvbnN1bWVkIHRocm91Z2ggUmVhZGFibGUgQVBJP1xuICAgIC8vIFRoaXMgaXMgYW4gb3B0aW1pemF0aW9uIHNvIHRoYXQgd2UgYXZvaWQgY2hlY2tpbmdcbiAgICAvLyBmb3IgJ2RhdGEnIGFuZCAncmVhZGFibGUnIGxpc3RlbmVycyBpbiB0aGUgaG90IHBhdGhcbiAgICAvLyBpbnNpZGUgcHVzaCgpLlxuICAgIHRoaXNba1JlYWRpbmddID0gZmFsc2VcbiAgfVxuXG4gIGRlc3Ryb3kgKGVycikge1xuICAgIGlmICh0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgLy8gTm9kZSA8IDE2XG4gICAgICByZXR1cm4gdGhpc1xuICAgIH1cblxuICAgIGlmICghZXJyICYmICF0aGlzLl9yZWFkYWJsZVN0YXRlLmVuZEVtaXR0ZWQpIHtcbiAgICAgIGVyciA9IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICB9XG5cbiAgICBpZiAoZXJyKSB7XG4gICAgICB0aGlzW2tBYm9ydF0oKVxuICAgIH1cblxuICAgIHJldHVybiBzdXBlci5kZXN0cm95KGVycilcbiAgfVxuXG4gIGVtaXQgKGV2LCAuLi5hcmdzKSB7XG4gICAgaWYgKGV2ID09PSAnZGF0YScpIHtcbiAgICAgIC8vIE5vZGUgPCAxNi43XG4gICAgICB0aGlzLl9yZWFkYWJsZVN0YXRlLmRhdGFFbWl0dGVkID0gdHJ1ZVxuICAgIH0gZWxzZSBpZiAoZXYgPT09ICdlcnJvcicpIHtcbiAgICAgIC8vIE5vZGUgPCAxNlxuICAgICAgdGhpcy5fcmVhZGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQgPSB0cnVlXG4gICAgfVxuICAgIHJldHVybiBzdXBlci5lbWl0KGV2LCAuLi5hcmdzKVxuICB9XG5cbiAgb24gKGV2LCAuLi5hcmdzKSB7XG4gICAgaWYgKGV2ID09PSAnZGF0YScgfHwgZXYgPT09ICdyZWFkYWJsZScpIHtcbiAgICAgIHRoaXNba1JlYWRpbmddID0gdHJ1ZVxuICAgIH1cbiAgICByZXR1cm4gc3VwZXIub24oZXYsIC4uLmFyZ3MpXG4gIH1cblxuICBhZGRMaXN0ZW5lciAoZXYsIC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5vbihldiwgLi4uYXJncylcbiAgfVxuXG4gIG9mZiAoZXYsIC4uLmFyZ3MpIHtcbiAgICBjb25zdCByZXQgPSBzdXBlci5vZmYoZXYsIC4uLmFyZ3MpXG4gICAgaWYgKGV2ID09PSAnZGF0YScgfHwgZXYgPT09ICdyZWFkYWJsZScpIHtcbiAgICAgIHRoaXNba1JlYWRpbmddID0gKFxuICAgICAgICB0aGlzLmxpc3RlbmVyQ291bnQoJ2RhdGEnKSA+IDAgfHxcbiAgICAgICAgdGhpcy5saXN0ZW5lckNvdW50KCdyZWFkYWJsZScpID4gMFxuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gcmV0XG4gIH1cblxuICByZW1vdmVMaXN0ZW5lciAoZXYsIC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5vZmYoZXYsIC4uLmFyZ3MpXG4gIH1cblxuICBwdXNoIChjaHVuaykge1xuICAgIGlmICh0aGlzW2tDb25zdW1lXSAmJiBjaHVuayAhPT0gbnVsbCAmJiB0aGlzLnJlYWRhYmxlTGVuZ3RoID09PSAwKSB7XG4gICAgICBjb25zdW1lUHVzaCh0aGlzW2tDb25zdW1lXSwgY2h1bmspXG4gICAgICByZXR1cm4gdGhpc1trUmVhZGluZ10gPyBzdXBlci5wdXNoKGNodW5rKSA6IHRydWVcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLnB1c2goY2h1bmspXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWJvZHktdGV4dFxuICBhc3luYyB0ZXh0ICgpIHtcbiAgICByZXR1cm4gY29uc3VtZSh0aGlzLCAndGV4dCcpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWJvZHktanNvblxuICBhc3luYyBqc29uICgpIHtcbiAgICByZXR1cm4gY29uc3VtZSh0aGlzLCAnanNvbicpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWJvZHktYmxvYlxuICBhc3luYyBibG9iICgpIHtcbiAgICByZXR1cm4gY29uc3VtZSh0aGlzLCAnYmxvYicpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWJvZHktYXJyYXlidWZmZXJcbiAgYXN5bmMgYXJyYXlCdWZmZXIgKCkge1xuICAgIHJldHVybiBjb25zdW1lKHRoaXMsICdhcnJheUJ1ZmZlcicpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWJvZHktZm9ybWRhdGFcbiAgYXN5bmMgZm9ybURhdGEgKCkge1xuICAgIC8vIFRPRE86IEltcGxlbWVudC5cbiAgICB0aHJvdyBuZXcgTm90U3VwcG9ydGVkRXJyb3IoKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1ib2R5LWJvZHl1c2VkXG4gIGdldCBib2R5VXNlZCAoKSB7XG4gICAgcmV0dXJuIHV0aWwuaXNEaXN0dXJiZWQodGhpcylcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tYm9keS1ib2R5XG4gIGdldCBib2R5ICgpIHtcbiAgICBpZiAoIXRoaXNba0JvZHldKSB7XG4gICAgICB0aGlzW2tCb2R5XSA9IFJlYWRhYmxlU3RyZWFtRnJvbSh0aGlzKVxuICAgICAgaWYgKHRoaXNba0NvbnN1bWVdKSB7XG4gICAgICAgIC8vIFRPRE86IElzIHRoaXMgdGhlIGJlc3Qgd2F5IHRvIGZvcmNlIGEgbG9jaz9cbiAgICAgICAgdGhpc1trQm9keV0uZ2V0UmVhZGVyKCkgLy8gRW5zdXJlIHN0cmVhbSBpcyBsb2NrZWQuXG4gICAgICAgIGFzc2VydCh0aGlzW2tCb2R5XS5sb2NrZWQpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0aGlzW2tCb2R5XVxuICB9XG5cbiAgZHVtcCAob3B0cykge1xuICAgIGxldCBsaW1pdCA9IG9wdHMgJiYgTnVtYmVyLmlzRmluaXRlKG9wdHMubGltaXQpID8gb3B0cy5saW1pdCA6IDI2MjE0NFxuICAgIGNvbnN0IHNpZ25hbCA9IG9wdHMgJiYgb3B0cy5zaWduYWxcblxuICAgIGlmIChzaWduYWwpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2lnbmFsICE9PSAnb2JqZWN0JyB8fCAhKCdhYm9ydGVkJyBpbiBzaWduYWwpKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBBYm9ydFNpZ25hbCcpXG4gICAgICAgIH1cbiAgICAgICAgdXRpbC50aHJvd0lmQWJvcnRlZChzaWduYWwpXG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGVycilcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbG9zZWQpIHtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobnVsbClcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3Qgc2lnbmFsTGlzdGVuZXJDbGVhbnVwID0gc2lnbmFsXG4gICAgICAgID8gdXRpbC5hZGRBYm9ydExpc3RlbmVyKHNpZ25hbCwgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGVzdHJveSgpXG4gICAgICAgIH0pXG4gICAgICAgIDogbm9vcFxuXG4gICAgICB0aGlzXG4gICAgICAgIC5vbignY2xvc2UnLCBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgc2lnbmFsTGlzdGVuZXJDbGVhbnVwKClcbiAgICAgICAgICBpZiAoc2lnbmFsICYmIHNpZ25hbC5hYm9ydGVkKSB7XG4gICAgICAgICAgICByZWplY3Qoc2lnbmFsLnJlYXNvbiB8fCBPYmplY3QuYXNzaWduKG5ldyBFcnJvcignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZCcpLCB7IG5hbWU6ICdBYm9ydEVycm9yJyB9KSlcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVzb2x2ZShudWxsKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLm9uKCdlcnJvcicsIG5vb3ApXG4gICAgICAgIC5vbignZGF0YScsIGZ1bmN0aW9uIChjaHVuaykge1xuICAgICAgICAgIGxpbWl0IC09IGNodW5rLmxlbmd0aFxuICAgICAgICAgIGlmIChsaW1pdCA8PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3koKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgICAgLnJlc3VtZSgpXG4gICAgfSlcbiAgfVxufVxuXG4vLyBodHRwczovL3N0cmVhbXMuc3BlYy53aGF0d2cub3JnLyNyZWFkYWJsZXN0cmVhbS1sb2NrZWRcbmZ1bmN0aW9uIGlzTG9ja2VkIChzZWxmKSB7XG4gIC8vIENvbnN1bWUgaXMgYW4gaW1wbGljaXQgbG9jay5cbiAgcmV0dXJuIChzZWxmW2tCb2R5XSAmJiBzZWxmW2tCb2R5XS5sb2NrZWQgPT09IHRydWUpIHx8IHNlbGZba0NvbnN1bWVdXG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNib2R5LXVudXNhYmxlXG5mdW5jdGlvbiBpc1VudXNhYmxlIChzZWxmKSB7XG4gIHJldHVybiB1dGlsLmlzRGlzdHVyYmVkKHNlbGYpIHx8IGlzTG9ja2VkKHNlbGYpXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbnN1bWUgKHN0cmVhbSwgdHlwZSkge1xuICBpZiAoaXNVbnVzYWJsZShzdHJlYW0pKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcigndW51c2FibGUnKVxuICB9XG5cbiAgYXNzZXJ0KCFzdHJlYW1ba0NvbnN1bWVdKVxuXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgc3RyZWFtW2tDb25zdW1lXSA9IHtcbiAgICAgIHR5cGUsXG4gICAgICBzdHJlYW0sXG4gICAgICByZXNvbHZlLFxuICAgICAgcmVqZWN0LFxuICAgICAgbGVuZ3RoOiAwLFxuICAgICAgYm9keTogW11cbiAgICB9XG5cbiAgICBzdHJlYW1cbiAgICAgIC5vbignZXJyb3InLCBmdW5jdGlvbiAoZXJyKSB7XG4gICAgICAgIGNvbnN1bWVGaW5pc2godGhpc1trQ29uc3VtZV0sIGVycilcbiAgICAgIH0pXG4gICAgICAub24oJ2Nsb3NlJywgZnVuY3Rpb24gKCkge1xuICAgICAgICBpZiAodGhpc1trQ29uc3VtZV0uYm9keSAhPT0gbnVsbCkge1xuICAgICAgICAgIGNvbnN1bWVGaW5pc2godGhpc1trQ29uc3VtZV0sIG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKCkpXG4gICAgICAgIH1cbiAgICAgIH0pXG5cbiAgICBwcm9jZXNzLm5leHRUaWNrKGNvbnN1bWVTdGFydCwgc3RyZWFtW2tDb25zdW1lXSlcbiAgfSlcbn1cblxuZnVuY3Rpb24gY29uc3VtZVN0YXJ0IChjb25zdW1lKSB7XG4gIGlmIChjb25zdW1lLmJvZHkgPT09IG51bGwpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHsgX3JlYWRhYmxlU3RhdGU6IHN0YXRlIH0gPSBjb25zdW1lLnN0cmVhbVxuXG4gIGZvciAoY29uc3QgY2h1bmsgb2Ygc3RhdGUuYnVmZmVyKSB7XG4gICAgY29uc3VtZVB1c2goY29uc3VtZSwgY2h1bmspXG4gIH1cblxuICBpZiAoc3RhdGUuZW5kRW1pdHRlZCkge1xuICAgIGNvbnN1bWVFbmQodGhpc1trQ29uc3VtZV0pXG4gIH0gZWxzZSB7XG4gICAgY29uc3VtZS5zdHJlYW0ub24oJ2VuZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN1bWVFbmQodGhpc1trQ29uc3VtZV0pXG4gICAgfSlcbiAgfVxuXG4gIGNvbnN1bWUuc3RyZWFtLnJlc3VtZSgpXG5cbiAgd2hpbGUgKGNvbnN1bWUuc3RyZWFtLnJlYWQoKSAhPSBudWxsKSB7XG4gICAgLy8gTG9vcFxuICB9XG59XG5cbmZ1bmN0aW9uIGNvbnN1bWVFbmQgKGNvbnN1bWUpIHtcbiAgY29uc3QgeyB0eXBlLCBib2R5LCByZXNvbHZlLCBzdHJlYW0sIGxlbmd0aCB9ID0gY29uc3VtZVxuXG4gIHRyeSB7XG4gICAgaWYgKHR5cGUgPT09ICd0ZXh0Jykge1xuICAgICAgcmVzb2x2ZSh0b1VTVlN0cmluZyhCdWZmZXIuY29uY2F0KGJvZHkpKSlcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdqc29uJykge1xuICAgICAgcmVzb2x2ZShKU09OLnBhcnNlKEJ1ZmZlci5jb25jYXQoYm9keSkpKVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2FycmF5QnVmZmVyJykge1xuICAgICAgY29uc3QgZHN0ID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKVxuXG4gICAgICBsZXQgcG9zID0gMFxuICAgICAgZm9yIChjb25zdCBidWYgb2YgYm9keSkge1xuICAgICAgICBkc3Quc2V0KGJ1ZiwgcG9zKVxuICAgICAgICBwb3MgKz0gYnVmLmJ5dGVMZW5ndGhcbiAgICAgIH1cblxuICAgICAgcmVzb2x2ZShkc3QuYnVmZmVyKVxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ2Jsb2InKSB7XG4gICAgICBpZiAoIUJsb2IpIHtcbiAgICAgICAgQmxvYiA9IHJlcXVpcmUoJ2J1ZmZlcicpLkJsb2JcbiAgICAgIH1cbiAgICAgIHJlc29sdmUobmV3IEJsb2IoYm9keSwgeyB0eXBlOiBzdHJlYW1ba0NvbnRlbnRUeXBlXSB9KSlcbiAgICB9XG5cbiAgICBjb25zdW1lRmluaXNoKGNvbnN1bWUpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIHN0cmVhbS5kZXN0cm95KGVycilcbiAgfVxufVxuXG5mdW5jdGlvbiBjb25zdW1lUHVzaCAoY29uc3VtZSwgY2h1bmspIHtcbiAgY29uc3VtZS5sZW5ndGggKz0gY2h1bmsubGVuZ3RoXG4gIGNvbnN1bWUuYm9keS5wdXNoKGNodW5rKVxufVxuXG5mdW5jdGlvbiBjb25zdW1lRmluaXNoIChjb25zdW1lLCBlcnIpIHtcbiAgaWYgKGNvbnN1bWUuYm9keSA9PT0gbnVsbCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgaWYgKGVycikge1xuICAgIGNvbnN1bWUucmVqZWN0KGVycilcbiAgfSBlbHNlIHtcbiAgICBjb25zdW1lLnJlc29sdmUoKVxuICB9XG5cbiAgY29uc3VtZS50eXBlID0gbnVsbFxuICBjb25zdW1lLnN0cmVhbSA9IG51bGxcbiAgY29uc3VtZS5yZXNvbHZlID0gbnVsbFxuICBjb25zdW1lLnJlamVjdCA9IG51bGxcbiAgY29uc3VtZS5sZW5ndGggPSAwXG4gIGNvbnN1bWUuYm9keSA9IG51bGxcbn1cbiIsICJjb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3Qge1xuICBSZXNwb25zZVN0YXR1c0NvZGVFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsgdG9VU1ZTdHJpbmcgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5cbmFzeW5jIGZ1bmN0aW9uIGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjayAoeyBjYWxsYmFjaywgYm9keSwgY29udGVudFR5cGUsIHN0YXR1c0NvZGUsIHN0YXR1c01lc3NhZ2UsIGhlYWRlcnMgfSkge1xuICBhc3NlcnQoYm9keSlcblxuICBsZXQgY2h1bmtzID0gW11cbiAgbGV0IGxpbWl0ID0gMFxuXG4gIGZvciBhd2FpdCAoY29uc3QgY2h1bmsgb2YgYm9keSkge1xuICAgIGNodW5rcy5wdXNoKGNodW5rKVxuICAgIGxpbWl0ICs9IGNodW5rLmxlbmd0aFxuICAgIGlmIChsaW1pdCA+IDEyOCAqIDEwMjQpIHtcbiAgICAgIGNodW5rcyA9IG51bGxcbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXR1c0NvZGUgPT09IDIwNCB8fCAhY29udGVudFR5cGUgfHwgIWNodW5rcykge1xuICAgIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2ssIG5ldyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcihgUmVzcG9uc2Ugc3RhdHVzIGNvZGUgJHtzdGF0dXNDb2RlfSR7c3RhdHVzTWVzc2FnZSA/IGA6ICR7c3RhdHVzTWVzc2FnZX1gIDogJyd9YCwgc3RhdHVzQ29kZSwgaGVhZGVycykpXG4gICAgcmV0dXJuXG4gIH1cblxuICB0cnkge1xuICAgIGlmIChjb250ZW50VHlwZS5zdGFydHNXaXRoKCdhcHBsaWNhdGlvbi9qc29uJykpIHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSBKU09OLnBhcnNlKHRvVVNWU3RyaW5nKEJ1ZmZlci5jb25jYXQoY2h1bmtzKSkpXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrLCBuZXcgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IoYFJlc3BvbnNlIHN0YXR1cyBjb2RlICR7c3RhdHVzQ29kZX0ke3N0YXR1c01lc3NhZ2UgPyBgOiAke3N0YXR1c01lc3NhZ2V9YCA6ICcnfWAsIHN0YXR1c0NvZGUsIGhlYWRlcnMsIHBheWxvYWQpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoJ3RleHQvJykpIHtcbiAgICAgIGNvbnN0IHBheWxvYWQgPSB0b1VTVlN0cmluZyhCdWZmZXIuY29uY2F0KGNodW5rcykpXG4gICAgICBwcm9jZXNzLm5leHRUaWNrKGNhbGxiYWNrLCBuZXcgUmVzcG9uc2VTdGF0dXNDb2RlRXJyb3IoYFJlc3BvbnNlIHN0YXR1cyBjb2RlICR7c3RhdHVzQ29kZX0ke3N0YXR1c01lc3NhZ2UgPyBgOiAke3N0YXR1c01lc3NhZ2V9YCA6ICcnfWAsIHN0YXR1c0NvZGUsIGhlYWRlcnMsIHBheWxvYWQpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyBQcm9jZXNzIGluIGEgZmFsbGJhY2sgaWYgZXJyb3JcbiAgfVxuXG4gIHByb2Nlc3MubmV4dFRpY2soY2FsbGJhY2ssIG5ldyBSZXNwb25zZVN0YXR1c0NvZGVFcnJvcihgUmVzcG9uc2Ugc3RhdHVzIGNvZGUgJHtzdGF0dXNDb2RlfSR7c3RhdHVzTWVzc2FnZSA/IGA6ICR7c3RhdHVzTWVzc2FnZX1gIDogJyd9YCwgc3RhdHVzQ29kZSwgaGVhZGVycykpXG59XG5cbm1vZHVsZS5leHBvcnRzID0geyBnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2sgfVxuIiwgImNvbnN0IHsgYWRkQWJvcnRMaXN0ZW5lciB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgUmVxdWVzdEFib3J0ZWRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG5jb25zdCBrTGlzdGVuZXIgPSBTeW1ib2woJ2tMaXN0ZW5lcicpXG5jb25zdCBrU2lnbmFsID0gU3ltYm9sKCdrU2lnbmFsJylcblxuZnVuY3Rpb24gYWJvcnQgKHNlbGYpIHtcbiAgaWYgKHNlbGYuYWJvcnQpIHtcbiAgICBzZWxmLmFib3J0KClcbiAgfSBlbHNlIHtcbiAgICBzZWxmLm9uRXJyb3IobmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcbiAgfVxufVxuXG5mdW5jdGlvbiBhZGRTaWduYWwgKHNlbGYsIHNpZ25hbCkge1xuICBzZWxmW2tTaWduYWxdID0gbnVsbFxuICBzZWxmW2tMaXN0ZW5lcl0gPSBudWxsXG5cbiAgaWYgKCFzaWduYWwpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmIChzaWduYWwuYWJvcnRlZCkge1xuICAgIGFib3J0KHNlbGYpXG4gICAgcmV0dXJuXG4gIH1cblxuICBzZWxmW2tTaWduYWxdID0gc2lnbmFsXG4gIHNlbGZba0xpc3RlbmVyXSA9ICgpID0+IHtcbiAgICBhYm9ydChzZWxmKVxuICB9XG5cbiAgYWRkQWJvcnRMaXN0ZW5lcihzZWxmW2tTaWduYWxdLCBzZWxmW2tMaXN0ZW5lcl0pXG59XG5cbmZ1bmN0aW9uIHJlbW92ZVNpZ25hbCAoc2VsZikge1xuICBpZiAoIXNlbGZba1NpZ25hbF0pIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmICgncmVtb3ZlRXZlbnRMaXN0ZW5lcicgaW4gc2VsZltrU2lnbmFsXSkge1xuICAgIHNlbGZba1NpZ25hbF0ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYWJvcnQnLCBzZWxmW2tMaXN0ZW5lcl0pXG4gIH0gZWxzZSB7XG4gICAgc2VsZltrU2lnbmFsXS5yZW1vdmVMaXN0ZW5lcignYWJvcnQnLCBzZWxmW2tMaXN0ZW5lcl0pXG4gIH1cblxuICBzZWxmW2tTaWduYWxdID0gbnVsbFxuICBzZWxmW2tMaXN0ZW5lcl0gPSBudWxsXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBhZGRTaWduYWwsXG4gIHJlbW92ZVNpZ25hbFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBSZWFkYWJsZSA9IHJlcXVpcmUoJy4vcmVhZGFibGUnKVxuY29uc3Qge1xuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgUmVxdWVzdEFib3J0ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2sgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcblxuY2xhc3MgUmVxdWVzdEhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2lnbmFsLCBtZXRob2QsIG9wYXF1ZSwgYm9keSwgb25JbmZvLCByZXNwb25zZUhlYWRlcnMsIHRocm93T25FcnJvciwgaGlnaFdhdGVyTWFyayB9ID0gb3B0c1xuXG4gICAgdHJ5IHtcbiAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGNhbGxiYWNrJylcbiAgICAgIH1cblxuICAgICAgaWYgKGhpZ2hXYXRlck1hcmsgJiYgKHR5cGVvZiBoaWdoV2F0ZXJNYXJrICE9PSAnbnVtYmVyJyB8fCBoaWdoV2F0ZXJNYXJrIDwgMCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGhpZ2hXYXRlck1hcmsnKVxuICAgICAgfVxuXG4gICAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignc2lnbmFsIG11c3QgYmUgYW4gRXZlbnRFbWl0dGVyIG9yIEV2ZW50VGFyZ2V0JylcbiAgICAgIH1cblxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBtZXRob2QnKVxuICAgICAgfVxuXG4gICAgICBpZiAob25JbmZvICYmIHR5cGVvZiBvbkluZm8gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uSW5mbyBjYWxsYmFjaycpXG4gICAgICB9XG5cbiAgICAgIHN1cGVyKCdVTkRJQ0lfUkVRVUVTVCcpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgICB1dGlsLmRlc3Ryb3koYm9keS5vbignZXJyb3InLCB1dGlsLm5vcCksIGVycilcbiAgICAgIH1cbiAgICAgIHRocm93IGVyclxuICAgIH1cblxuICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzIHx8IG51bGxcbiAgICB0aGlzLm9wYXF1ZSA9IG9wYXF1ZSB8fCBudWxsXG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5yZXMgPSBudWxsXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmJvZHkgPSBib2R5XG4gICAgdGhpcy50cmFpbGVycyA9IHt9XG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbFxuICAgIHRoaXMub25JbmZvID0gb25JbmZvIHx8IG51bGxcbiAgICB0aGlzLnRocm93T25FcnJvciA9IHRocm93T25FcnJvclxuICAgIHRoaXMuaGlnaFdhdGVyTWFyayA9IGhpZ2hXYXRlck1hcmtcblxuICAgIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICBib2R5Lm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgICAgdGhpcy5vbkVycm9yKGVycilcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgYWRkU2lnbmFsKHRoaXMsIHNpZ25hbClcbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQsIGNvbnRleHQpIHtcbiAgICBpZiAoIXRoaXMuY2FsbGJhY2spIHtcbiAgICAgIHRocm93IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICB9XG5cbiAgICB0aGlzLmFib3J0ID0gYWJvcnRcbiAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0XG4gIH1cblxuICBvbkhlYWRlcnMgKHN0YXR1c0NvZGUsIHJhd0hlYWRlcnMsIHJlc3VtZSwgc3RhdHVzTWVzc2FnZSkge1xuICAgIGNvbnN0IHsgY2FsbGJhY2ssIG9wYXF1ZSwgYWJvcnQsIGNvbnRleHQsIHJlc3BvbnNlSGVhZGVycywgaGlnaFdhdGVyTWFyayB9ID0gdGhpc1xuXG4gICAgY29uc3QgaGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgaWYgKHRoaXMub25JbmZvKSB7XG4gICAgICAgIHRoaXMub25JbmZvKHsgc3RhdHVzQ29kZSwgaGVhZGVycyB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcGFyc2VkSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKSA6IGhlYWRlcnNcbiAgICBjb25zdCBjb250ZW50VHlwZSA9IHBhcnNlZEhlYWRlcnNbJ2NvbnRlbnQtdHlwZSddXG4gICAgY29uc3QgYm9keSA9IG5ldyBSZWFkYWJsZSh7IHJlc3VtZSwgYWJvcnQsIGNvbnRlbnRUeXBlLCBoaWdoV2F0ZXJNYXJrIH0pXG5cbiAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgIHRoaXMucmVzID0gYm9keVxuICAgIGlmIChjYWxsYmFjayAhPT0gbnVsbCkge1xuICAgICAgaWYgKHRoaXMudGhyb3dPbkVycm9yICYmIHN0YXR1c0NvZGUgPj0gNDAwKSB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjaywgbnVsbCxcbiAgICAgICAgICB7IGNhbGxiYWNrLCBib2R5LCBjb250ZW50VHlwZSwgc3RhdHVzQ29kZSwgc3RhdHVzTWVzc2FnZSwgaGVhZGVycyB9XG4gICAgICAgIClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBudWxsLCB7XG4gICAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgIHRyYWlsZXJzOiB0aGlzLnRyYWlsZXJzLFxuICAgICAgICAgIG9wYXF1ZSxcbiAgICAgICAgICBib2R5LFxuICAgICAgICAgIGNvbnRleHRcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcbiAgICByZXR1cm4gcmVzLnB1c2goY2h1bmspXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIHV0aWwucGFyc2VIZWFkZXJzKHRyYWlsZXJzLCB0aGlzLnRyYWlsZXJzKVxuXG4gICAgcmVzLnB1c2gobnVsbClcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgcmVzLCBjYWxsYmFjaywgYm9keSwgb3BhcXVlIH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgLy8gVE9ETzogRG9lcyB0aGlzIG5lZWQgcXVldWVNaWNyb3Rhc2s/XG4gICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4ge1xuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyLCB7IG9wYXF1ZSB9KVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAocmVzKSB7XG4gICAgICB0aGlzLnJlcyA9IG51bGxcbiAgICAgIC8vIEVuc3VyZSBhbGwgcXVldWVkIGhhbmRsZXJzIGFyZSBpbnZva2VkIGJlZm9yZSBkZXN0cm95aW5nIHJlcy5cbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgdXRpbC5kZXN0cm95KHJlcywgZXJyKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBpZiAoYm9keSkge1xuICAgICAgdGhpcy5ib2R5ID0gbnVsbFxuICAgICAgdXRpbC5kZXN0cm95KGJvZHksIGVycilcbiAgICB9XG4gIH1cbn1cblxuZnVuY3Rpb24gcmVxdWVzdCAob3B0cywgY2FsbGJhY2spIHtcbiAgaWYgKGNhbGxiYWNrID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgcmVxdWVzdC5jYWxsKHRoaXMsIG9wdHMsIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICB0aGlzLmRpc3BhdGNoKG9wdHMsIG5ldyBSZXF1ZXN0SGFuZGxlcihvcHRzLCBjYWxsYmFjaykpXG4gIH0gY2F0Y2ggKGVycikge1xuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgICBjb25zdCBvcGFxdWUgPSBvcHRzICYmIG9wdHMub3BhcXVlXG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gY2FsbGJhY2soZXJyLCB7IG9wYXF1ZSB9KSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVlc3Rcbm1vZHVsZS5leHBvcnRzLlJlcXVlc3RIYW5kbGVyID0gUmVxdWVzdEhhbmRsZXJcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBmaW5pc2hlZCwgUGFzc1Rocm91Z2ggfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB7XG4gIEludmFsaWRBcmd1bWVudEVycm9yLFxuICBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcixcbiAgUmVxdWVzdEFib3J0ZWRFcnJvclxufSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHV0aWwgPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBnZXRSZXNvbHZlRXJyb3JCb2R5Q2FsbGJhY2sgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcblxuY2xhc3MgU3RyZWFtSGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgZmFjdG9yeSwgY2FsbGJhY2spIHtcbiAgICBpZiAoIW9wdHMgfHwgdHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgb3B0cycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG1ldGhvZCwgb3BhcXVlLCBib2R5LCBvbkluZm8sIHJlc3BvbnNlSGVhZGVycywgdGhyb3dPbkVycm9yIH0gPSBvcHRzXG5cbiAgICB0cnkge1xuICAgICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGZhY3RvcnkgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIGZhY3RvcnknKVxuICAgICAgfVxuXG4gICAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignc2lnbmFsIG11c3QgYmUgYW4gRXZlbnRFbWl0dGVyIG9yIEV2ZW50VGFyZ2V0JylcbiAgICAgIH1cblxuICAgICAgaWYgKG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBtZXRob2QnKVxuICAgICAgfVxuXG4gICAgICBpZiAob25JbmZvICYmIHR5cGVvZiBvbkluZm8gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9uSW5mbyBjYWxsYmFjaycpXG4gICAgICB9XG5cbiAgICAgIHN1cGVyKCdVTkRJQ0lfU1RSRUFNJylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh1dGlsLmlzU3RyZWFtKGJvZHkpKSB7XG4gICAgICAgIHV0aWwuZGVzdHJveShib2R5Lm9uKCdlcnJvcicsIHV0aWwubm9wKSwgZXJyKVxuICAgICAgfVxuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuXG4gICAgdGhpcy5yZXNwb25zZUhlYWRlcnMgPSByZXNwb25zZUhlYWRlcnMgfHwgbnVsbFxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLmZhY3RvcnkgPSBmYWN0b3J5XG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5yZXMgPSBudWxsXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG4gICAgdGhpcy50cmFpbGVycyA9IG51bGxcbiAgICB0aGlzLmJvZHkgPSBib2R5XG4gICAgdGhpcy5vbkluZm8gPSBvbkluZm8gfHwgbnVsbFxuICAgIHRoaXMudGhyb3dPbkVycm9yID0gdGhyb3dPbkVycm9yIHx8IGZhbHNlXG5cbiAgICBpZiAodXRpbC5pc1N0cmVhbShib2R5KSkge1xuICAgICAgYm9keS5vbignZXJyb3InLCAoZXJyKSA9PiB7XG4gICAgICAgIHRoaXMub25FcnJvcihlcnIpXG4gICAgICB9KVxuICAgIH1cblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgaWYgKCF0aGlzLmNhbGxiYWNrKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCByZXN1bWUsIHN0YXR1c01lc3NhZ2UpIHtcbiAgICBjb25zdCB7IGZhY3RvcnksIG9wYXF1ZSwgY29udGV4dCwgY2FsbGJhY2ssIHJlc3BvbnNlSGVhZGVycyB9ID0gdGhpc1xuXG4gICAgY29uc3QgaGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyA9PT0gJ3JhdycgPyB1dGlsLnBhcnNlUmF3SGVhZGVycyhyYXdIZWFkZXJzKSA6IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG5cbiAgICBpZiAoc3RhdHVzQ29kZSA8IDIwMCkge1xuICAgICAgaWYgKHRoaXMub25JbmZvKSB7XG4gICAgICAgIHRoaXMub25JbmZvKHsgc3RhdHVzQ29kZSwgaGVhZGVycyB9KVxuICAgICAgfVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5mYWN0b3J5ID0gbnVsbFxuXG4gICAgbGV0IHJlc1xuXG4gICAgaWYgKHRoaXMudGhyb3dPbkVycm9yICYmIHN0YXR1c0NvZGUgPj0gNDAwKSB7XG4gICAgICBjb25zdCBwYXJzZWRIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpIDogaGVhZGVyc1xuICAgICAgY29uc3QgY29udGVudFR5cGUgPSBwYXJzZWRIZWFkZXJzWydjb250ZW50LXR5cGUnXVxuICAgICAgcmVzID0gbmV3IFBhc3NUaHJvdWdoKClcblxuICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGdldFJlc29sdmVFcnJvckJvZHlDYWxsYmFjaywgbnVsbCxcbiAgICAgICAgeyBjYWxsYmFjaywgYm9keTogcmVzLCBjb250ZW50VHlwZSwgc3RhdHVzQ29kZSwgc3RhdHVzTWVzc2FnZSwgaGVhZGVycyB9XG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChmYWN0b3J5ID09PSBudWxsKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICByZXMgPSB0aGlzLnJ1bkluQXN5bmNTY29wZShmYWN0b3J5LCBudWxsLCB7XG4gICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIG9wYXF1ZSxcbiAgICAgICAgY29udGV4dFxuICAgICAgfSlcblxuICAgICAgaWYgKFxuICAgICAgICAhcmVzIHx8XG4gICAgICAgIHR5cGVvZiByZXMud3JpdGUgIT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgdHlwZW9mIHJlcy5lbmQgIT09ICdmdW5jdGlvbicgfHxcbiAgICAgICAgdHlwZW9mIHJlcy5vbiAhPT0gJ2Z1bmN0aW9uJ1xuICAgICAgKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkUmV0dXJuVmFsdWVFcnJvcignZXhwZWN0ZWQgV3JpdGFibGUnKVxuICAgICAgfVxuXG4gICAgICAvLyBUT0RPOiBBdm9pZCBmaW5pc2hlZC4gSXQgcmVnaXN0ZXJzIGFuIHVubmVjZXNzYXJ5IGFtb3VudCBvZiBsaXN0ZW5lcnMuXG4gICAgICBmaW5pc2hlZChyZXMsIHsgcmVhZGFibGU6IGZhbHNlIH0sIChlcnIpID0+IHtcbiAgICAgICAgY29uc3QgeyBjYWxsYmFjaywgcmVzLCBvcGFxdWUsIHRyYWlsZXJzLCBhYm9ydCB9ID0gdGhpc1xuXG4gICAgICAgIHRoaXMucmVzID0gbnVsbFxuICAgICAgICBpZiAoZXJyIHx8ICFyZXMucmVhZGFibGUpIHtcbiAgICAgICAgICB1dGlsLmRlc3Ryb3kocmVzLCBlcnIpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNhbGxiYWNrID0gbnVsbFxuICAgICAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgZXJyIHx8IG51bGwsIHsgb3BhcXVlLCB0cmFpbGVycyB9KVxuXG4gICAgICAgIGlmIChlcnIpIHtcbiAgICAgICAgICBhYm9ydCgpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfVxuXG4gICAgcmVzLm9uKCdkcmFpbicsIHJlc3VtZSlcblxuICAgIHRoaXMucmVzID0gcmVzXG5cbiAgICBjb25zdCBuZWVkRHJhaW4gPSByZXMud3JpdGFibGVOZWVkRHJhaW4gIT09IHVuZGVmaW5lZFxuICAgICAgPyByZXMud3JpdGFibGVOZWVkRHJhaW5cbiAgICAgIDogcmVzLl93cml0YWJsZVN0YXRlICYmIHJlcy5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW5cblxuICAgIHJldHVybiBuZWVkRHJhaW4gIT09IHRydWVcbiAgfVxuXG4gIG9uRGF0YSAoY2h1bmspIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuXG4gICAgcmV0dXJuIHJlcyA/IHJlcy53cml0ZShjaHVuaykgOiB0cnVlXG4gIH1cblxuICBvbkNvbXBsZXRlICh0cmFpbGVycykge1xuICAgIGNvbnN0IHsgcmVzIH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIGlmICghcmVzKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnRyYWlsZXJzID0gdXRpbC5wYXJzZUhlYWRlcnModHJhaWxlcnMpXG5cbiAgICByZXMuZW5kKClcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgcmVzLCBjYWxsYmFjaywgb3BhcXVlLCBib2R5IH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIHRoaXMuZmFjdG9yeSA9IG51bGxcblxuICAgIGlmIChyZXMpIHtcbiAgICAgIHRoaXMucmVzID0gbnVsbFxuICAgICAgdXRpbC5kZXN0cm95KHJlcywgZXJyKVxuICAgIH0gZWxzZSBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIsIHsgb3BhcXVlIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChib2R5KSB7XG4gICAgICB0aGlzLmJvZHkgPSBudWxsXG4gICAgICB1dGlsLmRlc3Ryb3koYm9keSwgZXJyKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBzdHJlYW0gKG9wdHMsIGZhY3RvcnksIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHN0cmVhbS5jYWxsKHRoaXMsIG9wdHMsIGZhY3RvcnksIChlcnIsIGRhdGEpID0+IHtcbiAgICAgICAgcmV0dXJuIGVyciA/IHJlamVjdChlcnIpIDogcmVzb2x2ZShkYXRhKVxuICAgICAgfSlcbiAgICB9KVxuICB9XG5cbiAgdHJ5IHtcbiAgICB0aGlzLmRpc3BhdGNoKG9wdHMsIG5ldyBTdHJlYW1IYW5kbGVyKG9wdHMsIGZhY3RvcnksIGNhbGxiYWNrKSlcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHMgJiYgb3B0cy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc3RyZWFtXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAgUmVhZGFibGUsXG4gIER1cGxleCxcbiAgUGFzc1Rocm91Z2hcbn0gPSByZXF1aXJlKCdzdHJlYW0nKVxuY29uc3Qge1xuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgSW52YWxpZFJldHVyblZhbHVlRXJyb3IsXG4gIFJlcXVlc3RBYm9ydGVkRXJyb3Jcbn0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgQXN5bmNSZXNvdXJjZSB9ID0gcmVxdWlyZSgnYXN5bmNfaG9va3MnKVxuY29uc3QgeyBhZGRTaWduYWwsIHJlbW92ZVNpZ25hbCB9ID0gcmVxdWlyZSgnLi9hYm9ydC1zaWduYWwnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcblxuY29uc3Qga1Jlc3VtZSA9IFN5bWJvbCgncmVzdW1lJylcblxuY2xhc3MgUGlwZWxpbmVSZXF1ZXN0IGV4dGVuZHMgUmVhZGFibGUge1xuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgc3VwZXIoeyBhdXRvRGVzdHJveTogdHJ1ZSB9KVxuXG4gICAgdGhpc1trUmVzdW1lXSA9IG51bGxcbiAgfVxuXG4gIF9yZWFkICgpIHtcbiAgICBjb25zdCB7IFtrUmVzdW1lXTogcmVzdW1lIH0gPSB0aGlzXG5cbiAgICBpZiAocmVzdW1lKSB7XG4gICAgICB0aGlzW2tSZXN1bWVdID0gbnVsbFxuICAgICAgcmVzdW1lKClcbiAgICB9XG4gIH1cblxuICBfZGVzdHJveSAoZXJyLCBjYWxsYmFjaykge1xuICAgIHRoaXMuX3JlYWQoKVxuXG4gICAgY2FsbGJhY2soZXJyKVxuICB9XG59XG5cbmNsYXNzIFBpcGVsaW5lUmVzcG9uc2UgZXh0ZW5kcyBSZWFkYWJsZSB7XG4gIGNvbnN0cnVjdG9yIChyZXN1bWUpIHtcbiAgICBzdXBlcih7IGF1dG9EZXN0cm95OiB0cnVlIH0pXG4gICAgdGhpc1trUmVzdW1lXSA9IHJlc3VtZVxuICB9XG5cbiAgX3JlYWQgKCkge1xuICAgIHRoaXNba1Jlc3VtZV0oKVxuICB9XG5cbiAgX2Rlc3Ryb3kgKGVyciwgY2FsbGJhY2spIHtcbiAgICBpZiAoIWVyciAmJiAhdGhpcy5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgICBlcnIgPSBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgY2FsbGJhY2soZXJyKVxuICB9XG59XG5cbmNsYXNzIFBpcGVsaW5lSGFuZGxlciBleHRlbmRzIEFzeW5jUmVzb3VyY2Uge1xuICBjb25zdHJ1Y3RvciAob3B0cywgaGFuZGxlcikge1xuICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGhhbmRsZXIgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBoYW5kbGVyJylcbiAgICB9XG5cbiAgICBjb25zdCB7IHNpZ25hbCwgbWV0aG9kLCBvcGFxdWUsIG9uSW5mbywgcmVzcG9uc2VIZWFkZXJzIH0gPSBvcHRzXG5cbiAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgfVxuXG4gICAgaWYgKG1ldGhvZCA9PT0gJ0NPTk5FQ1QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgbWV0aG9kJylcbiAgICB9XG5cbiAgICBpZiAob25JbmZvICYmIHR5cGVvZiBvbkluZm8gIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvbkluZm8gY2FsbGJhY2snKVxuICAgIH1cblxuICAgIHN1cGVyKCdVTkRJQ0lfUElQRUxJTkUnKVxuXG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWUgfHwgbnVsbFxuICAgIHRoaXMucmVzcG9uc2VIZWFkZXJzID0gcmVzcG9uc2VIZWFkZXJzIHx8IG51bGxcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVyXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG4gICAgdGhpcy5vbkluZm8gPSBvbkluZm8gfHwgbnVsbFxuXG4gICAgdGhpcy5yZXEgPSBuZXcgUGlwZWxpbmVSZXF1ZXN0KCkub24oJ2Vycm9yJywgdXRpbC5ub3ApXG5cbiAgICB0aGlzLnJldCA9IG5ldyBEdXBsZXgoe1xuICAgICAgcmVhZGFibGVPYmplY3RNb2RlOiBvcHRzLm9iamVjdE1vZGUsXG4gICAgICBhdXRvRGVzdHJveTogdHJ1ZSxcbiAgICAgIHJlYWQ6ICgpID0+IHtcbiAgICAgICAgY29uc3QgeyBib2R5IH0gPSB0aGlzXG5cbiAgICAgICAgaWYgKGJvZHkgJiYgYm9keS5yZXN1bWUpIHtcbiAgICAgICAgICBib2R5LnJlc3VtZSgpXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB3cml0ZTogKGNodW5rLCBlbmNvZGluZywgY2FsbGJhY2spID0+IHtcbiAgICAgICAgY29uc3QgeyByZXEgfSA9IHRoaXNcblxuICAgICAgICBpZiAocmVxLnB1c2goY2h1bmssIGVuY29kaW5nKSB8fCByZXEuX3JlYWRhYmxlU3RhdGUuZGVzdHJveWVkKSB7XG4gICAgICAgICAgY2FsbGJhY2soKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJlcVtrUmVzdW1lXSA9IGNhbGxiYWNrXG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICBkZXN0cm95OiAoZXJyLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBjb25zdCB7IGJvZHksIHJlcSwgcmVzLCByZXQsIGFib3J0IH0gPSB0aGlzXG5cbiAgICAgICAgaWYgKCFlcnIgJiYgIXJldC5fcmVhZGFibGVTdGF0ZS5lbmRFbWl0dGVkKSB7XG4gICAgICAgICAgZXJyID0gbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGFib3J0ICYmIGVycikge1xuICAgICAgICAgIGFib3J0KClcbiAgICAgICAgfVxuXG4gICAgICAgIHV0aWwuZGVzdHJveShib2R5LCBlcnIpXG4gICAgICAgIHV0aWwuZGVzdHJveShyZXEsIGVycilcbiAgICAgICAgdXRpbC5kZXN0cm95KHJlcywgZXJyKVxuXG4gICAgICAgIHJlbW92ZVNpZ25hbCh0aGlzKVxuXG4gICAgICAgIGNhbGxiYWNrKGVycilcbiAgICAgIH1cbiAgICB9KS5vbigncHJlZmluaXNoJywgKCkgPT4ge1xuICAgICAgY29uc3QgeyByZXEgfSA9IHRoaXNcblxuICAgICAgLy8gTm9kZSA8IDE1IGRvZXMgbm90IGNhbGwgX2ZpbmFsIGluIHNhbWUgdGljay5cbiAgICAgIHJlcS5wdXNoKG51bGwpXG4gICAgfSlcblxuICAgIHRoaXMucmVzID0gbnVsbFxuXG4gICAgYWRkU2lnbmFsKHRoaXMsIHNpZ25hbClcbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQsIGNvbnRleHQpIHtcbiAgICBjb25zdCB7IHJldCwgcmVzIH0gPSB0aGlzXG5cbiAgICBhc3NlcnQoIXJlcywgJ3BpcGVsaW5lIGNhbm5vdCBiZSByZXRyaWVkJylcblxuICAgIGlmIChyZXQuZGVzdHJveWVkKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCByZXN1bWUpIHtcbiAgICBjb25zdCB7IG9wYXF1ZSwgaGFuZGxlciwgY29udGV4dCB9ID0gdGhpc1xuXG4gICAgaWYgKHN0YXR1c0NvZGUgPCAyMDApIHtcbiAgICAgIGlmICh0aGlzLm9uSW5mbykge1xuICAgICAgICBjb25zdCBoZWFkZXJzID0gdGhpcy5yZXNwb25zZUhlYWRlcnMgPT09ICdyYXcnID8gdXRpbC5wYXJzZVJhd0hlYWRlcnMocmF3SGVhZGVycykgOiB1dGlsLnBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKVxuICAgICAgICB0aGlzLm9uSW5mbyh7IHN0YXR1c0NvZGUsIGhlYWRlcnMgfSlcbiAgICAgIH1cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMucmVzID0gbmV3IFBpcGVsaW5lUmVzcG9uc2UocmVzdW1lKVxuXG4gICAgbGV0IGJvZHlcbiAgICB0cnkge1xuICAgICAgdGhpcy5oYW5kbGVyID0gbnVsbFxuICAgICAgY29uc3QgaGVhZGVycyA9IHRoaXMucmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcbiAgICAgIGJvZHkgPSB0aGlzLnJ1bkluQXN5bmNTY29wZShoYW5kbGVyLCBudWxsLCB7XG4gICAgICAgIHN0YXR1c0NvZGUsXG4gICAgICAgIGhlYWRlcnMsXG4gICAgICAgIG9wYXF1ZSxcbiAgICAgICAgYm9keTogdGhpcy5yZXMsXG4gICAgICAgIGNvbnRleHRcbiAgICAgIH0pXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aGlzLnJlcy5vbignZXJyb3InLCB1dGlsLm5vcClcbiAgICAgIHRocm93IGVyclxuICAgIH1cblxuICAgIGlmICghYm9keSB8fCB0eXBlb2YgYm9keS5vbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRSZXR1cm5WYWx1ZUVycm9yKCdleHBlY3RlZCBSZWFkYWJsZScpXG4gICAgfVxuXG4gICAgYm9keVxuICAgICAgLm9uKCdkYXRhJywgKGNodW5rKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmV0LCBib2R5IH0gPSB0aGlzXG5cbiAgICAgICAgaWYgKCFyZXQucHVzaChjaHVuaykgJiYgYm9keS5wYXVzZSkge1xuICAgICAgICAgIGJvZHkucGF1c2UoKVxuICAgICAgICB9XG4gICAgICB9KVxuICAgICAgLm9uKCdlcnJvcicsIChlcnIpID0+IHtcbiAgICAgICAgY29uc3QgeyByZXQgfSA9IHRoaXNcblxuICAgICAgICB1dGlsLmRlc3Ryb3kocmV0LCBlcnIpXG4gICAgICB9KVxuICAgICAgLm9uKCdlbmQnLCAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmV0IH0gPSB0aGlzXG5cbiAgICAgICAgcmV0LnB1c2gobnVsbClcbiAgICAgIH0pXG4gICAgICAub24oJ2Nsb3NlJywgKCkgPT4ge1xuICAgICAgICBjb25zdCB7IHJldCB9ID0gdGhpc1xuXG4gICAgICAgIGlmICghcmV0Ll9yZWFkYWJsZVN0YXRlLmVuZGVkKSB7XG4gICAgICAgICAgdXRpbC5kZXN0cm95KHJldCwgbmV3IFJlcXVlc3RBYm9ydGVkRXJyb3IoKSlcbiAgICAgICAgfVxuICAgICAgfSlcblxuICAgIHRoaXMuYm9keSA9IGJvZHlcbiAgfVxuXG4gIG9uRGF0YSAoY2h1bmspIHtcbiAgICBjb25zdCB7IHJlcyB9ID0gdGhpc1xuICAgIHJldHVybiByZXMucHVzaChjaHVuaylcbiAgfVxuXG4gIG9uQ29tcGxldGUgKHRyYWlsZXJzKSB7XG4gICAgY29uc3QgeyByZXMgfSA9IHRoaXNcbiAgICByZXMucHVzaChudWxsKVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgY29uc3QgeyByZXQgfSA9IHRoaXNcbiAgICB0aGlzLmhhbmRsZXIgPSBudWxsXG4gICAgdXRpbC5kZXN0cm95KHJldCwgZXJyKVxuICB9XG59XG5cbmZ1bmN0aW9uIHBpcGVsaW5lIChvcHRzLCBoYW5kbGVyKSB7XG4gIHRyeSB7XG4gICAgY29uc3QgcGlwZWxpbmVIYW5kbGVyID0gbmV3IFBpcGVsaW5lSGFuZGxlcihvcHRzLCBoYW5kbGVyKVxuICAgIHRoaXMuZGlzcGF0Y2goeyAuLi5vcHRzLCBib2R5OiBwaXBlbGluZUhhbmRsZXIucmVxIH0sIHBpcGVsaW5lSGFuZGxlcilcbiAgICByZXR1cm4gcGlwZWxpbmVIYW5kbGVyLnJldFxuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4gbmV3IFBhc3NUaHJvdWdoKCkuZGVzdHJveShlcnIpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBwaXBlbGluZVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBSZXF1ZXN0QWJvcnRlZEVycm9yLCBTb2NrZXRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgeyBBc3luY1Jlc291cmNlIH0gPSByZXF1aXJlKCdhc3luY19ob29rcycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbmNsYXNzIFVwZ3JhZGVIYW5kbGVyIGV4dGVuZHMgQXN5bmNSZXNvdXJjZSB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBjYWxsYmFjaykge1xuICAgIGlmICghb3B0cyB8fCB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzJylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2ludmFsaWQgY2FsbGJhY2snKVxuICAgIH1cblxuICAgIGNvbnN0IHsgc2lnbmFsLCBvcGFxdWUsIHJlc3BvbnNlSGVhZGVycyB9ID0gb3B0c1xuXG4gICAgaWYgKHNpZ25hbCAmJiB0eXBlb2Ygc2lnbmFsLm9uICE9PSAnZnVuY3Rpb24nICYmIHR5cGVvZiBzaWduYWwuYWRkRXZlbnRMaXN0ZW5lciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdzaWduYWwgbXVzdCBiZSBhbiBFdmVudEVtaXR0ZXIgb3IgRXZlbnRUYXJnZXQnKVxuICAgIH1cblxuICAgIHN1cGVyKCdVTkRJQ0lfVVBHUkFERScpXG5cbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5vcGFxdWUgPSBvcGFxdWUgfHwgbnVsbFxuICAgIHRoaXMuY2FsbGJhY2sgPSBjYWxsYmFja1xuICAgIHRoaXMuYWJvcnQgPSBudWxsXG4gICAgdGhpcy5jb250ZXh0ID0gbnVsbFxuXG4gICAgYWRkU2lnbmFsKHRoaXMsIHNpZ25hbClcbiAgfVxuXG4gIG9uQ29ubmVjdCAoYWJvcnQsIGNvbnRleHQpIHtcbiAgICBpZiAoIXRoaXMuY2FsbGJhY2spIHtcbiAgICAgIHRocm93IG5ldyBSZXF1ZXN0QWJvcnRlZEVycm9yKClcbiAgICB9XG5cbiAgICB0aGlzLmFib3J0ID0gYWJvcnRcbiAgICB0aGlzLmNvbnRleHQgPSBudWxsXG4gIH1cblxuICBvbkhlYWRlcnMgKCkge1xuICAgIHRocm93IG5ldyBTb2NrZXRFcnJvcignYmFkIHVwZ3JhZGUnLCBudWxsKVxuICB9XG5cbiAgb25VcGdyYWRlIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCBzb2NrZXQpIHtcbiAgICBjb25zdCB7IGNhbGxiYWNrLCBvcGFxdWUsIGNvbnRleHQgfSA9IHRoaXNcblxuICAgIGFzc2VydC5zdHJpY3RFcXVhbChzdGF0dXNDb2RlLCAxMDEpXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgY29uc3QgaGVhZGVycyA9IHRoaXMucmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcbiAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgbnVsbCwge1xuICAgICAgaGVhZGVycyxcbiAgICAgIHNvY2tldCxcbiAgICAgIG9wYXF1ZSxcbiAgICAgIGNvbnRleHRcbiAgICB9KVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlIH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIGlmIChjYWxsYmFjaykge1xuICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGxcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgdGhpcy5ydW5JbkFzeW5jU2NvcGUoY2FsbGJhY2ssIG51bGwsIGVyciwgeyBvcGFxdWUgfSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG59XG5cbmZ1bmN0aW9uIHVwZ3JhZGUgKG9wdHMsIGNhbGxiYWNrKSB7XG4gIGlmIChjYWxsYmFjayA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIHVwZ3JhZGUuY2FsbCh0aGlzLCBvcHRzLCAoZXJyLCBkYXRhKSA9PiB7XG4gICAgICAgIHJldHVybiBlcnIgPyByZWplY3QoZXJyKSA6IHJlc29sdmUoZGF0YSlcbiAgICAgIH0pXG4gICAgfSlcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgdXBncmFkZUhhbmRsZXIgPSBuZXcgVXBncmFkZUhhbmRsZXIob3B0cywgY2FsbGJhY2spXG4gICAgdGhpcy5kaXNwYXRjaCh7XG4gICAgICAuLi5vcHRzLFxuICAgICAgbWV0aG9kOiBvcHRzLm1ldGhvZCB8fCAnR0VUJyxcbiAgICAgIHVwZ3JhZGU6IG9wdHMucHJvdG9jb2wgfHwgJ1dlYnNvY2tldCdcbiAgICB9LCB1cGdyYWRlSGFuZGxlcilcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHMgJiYgb3B0cy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gdXBncmFkZVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEFzeW5jUmVzb3VyY2UgfSA9IHJlcXVpcmUoJ2FzeW5jX2hvb2tzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IsIFJlcXVlc3RBYm9ydGVkRXJyb3IsIFNvY2tldEVycm9yIH0gPSByZXF1aXJlKCcuLi9jb3JlL2Vycm9ycycpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgYWRkU2lnbmFsLCByZW1vdmVTaWduYWwgfSA9IHJlcXVpcmUoJy4vYWJvcnQtc2lnbmFsJylcblxuY2xhc3MgQ29ubmVjdEhhbmRsZXIgZXh0ZW5kcyBBc3luY1Jlc291cmNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMsIGNhbGxiYWNrKSB7XG4gICAgaWYgKCFvcHRzIHx8IHR5cGVvZiBvcHRzICE9PSAnb2JqZWN0Jykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIG9wdHMnKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgIT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBjYWxsYmFjaycpXG4gICAgfVxuXG4gICAgY29uc3QgeyBzaWduYWwsIG9wYXF1ZSwgcmVzcG9uc2VIZWFkZXJzIH0gPSBvcHRzXG5cbiAgICBpZiAoc2lnbmFsICYmIHR5cGVvZiBzaWduYWwub24gIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHNpZ25hbC5hZGRFdmVudExpc3RlbmVyICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3NpZ25hbCBtdXN0IGJlIGFuIEV2ZW50RW1pdHRlciBvciBFdmVudFRhcmdldCcpXG4gICAgfVxuXG4gICAgc3VwZXIoJ1VORElDSV9DT05ORUNUJylcblxuICAgIHRoaXMub3BhcXVlID0gb3BhcXVlIHx8IG51bGxcbiAgICB0aGlzLnJlc3BvbnNlSGVhZGVycyA9IHJlc3BvbnNlSGVhZGVycyB8fCBudWxsXG4gICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcblxuICAgIGFkZFNpZ25hbCh0aGlzLCBzaWduYWwpXG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0LCBjb250ZXh0KSB7XG4gICAgaWYgKCF0aGlzLmNhbGxiYWNrKSB7XG4gICAgICB0aHJvdyBuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcigpXG4gICAgfVxuXG4gICAgdGhpcy5hYm9ydCA9IGFib3J0XG4gICAgdGhpcy5jb250ZXh0ID0gY29udGV4dFxuICB9XG5cbiAgb25IZWFkZXJzICgpIHtcbiAgICB0aHJvdyBuZXcgU29ja2V0RXJyb3IoJ2JhZCBjb25uZWN0JywgbnVsbClcbiAgfVxuXG4gIG9uVXBncmFkZSAoc3RhdHVzQ29kZSwgcmF3SGVhZGVycywgc29ja2V0KSB7XG4gICAgY29uc3QgeyBjYWxsYmFjaywgb3BhcXVlLCBjb250ZXh0IH0gPSB0aGlzXG5cbiAgICByZW1vdmVTaWduYWwodGhpcylcblxuICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG5cbiAgICBsZXQgaGVhZGVycyA9IHJhd0hlYWRlcnNcbiAgICAvLyBJbmRpY2F0ZXMgaXMgYW4gSFRUUDJTZXNzaW9uXG4gICAgaWYgKGhlYWRlcnMgIT0gbnVsbCkge1xuICAgICAgaGVhZGVycyA9IHRoaXMucmVzcG9uc2VIZWFkZXJzID09PSAncmF3JyA/IHV0aWwucGFyc2VSYXdIZWFkZXJzKHJhd0hlYWRlcnMpIDogdXRpbC5wYXJzZUhlYWRlcnMocmF3SGVhZGVycylcbiAgICB9XG5cbiAgICB0aGlzLnJ1bkluQXN5bmNTY29wZShjYWxsYmFjaywgbnVsbCwgbnVsbCwge1xuICAgICAgc3RhdHVzQ29kZSxcbiAgICAgIGhlYWRlcnMsXG4gICAgICBzb2NrZXQsXG4gICAgICBvcGFxdWUsXG4gICAgICBjb250ZXh0XG4gICAgfSlcbiAgfVxuXG4gIG9uRXJyb3IgKGVycikge1xuICAgIGNvbnN0IHsgY2FsbGJhY2ssIG9wYXF1ZSB9ID0gdGhpc1xuXG4gICAgcmVtb3ZlU2lnbmFsKHRoaXMpXG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIHRoaXMuY2FsbGJhY2sgPSBudWxsXG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgIHRoaXMucnVuSW5Bc3luY1Njb3BlKGNhbGxiYWNrLCBudWxsLCBlcnIsIHsgb3BhcXVlIH0pXG4gICAgICB9KVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjb25uZWN0IChvcHRzLCBjYWxsYmFjaykge1xuICBpZiAoY2FsbGJhY2sgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBjb25uZWN0LmNhbGwodGhpcywgb3B0cywgKGVyciwgZGF0YSkgPT4ge1xuICAgICAgICByZXR1cm4gZXJyID8gcmVqZWN0KGVycikgOiByZXNvbHZlKGRhdGEpXG4gICAgICB9KVxuICAgIH0pXG4gIH1cblxuICB0cnkge1xuICAgIGNvbnN0IGNvbm5lY3RIYW5kbGVyID0gbmV3IENvbm5lY3RIYW5kbGVyKG9wdHMsIGNhbGxiYWNrKVxuICAgIHRoaXMuZGlzcGF0Y2goeyAuLi5vcHRzLCBtZXRob2Q6ICdDT05ORUNUJyB9LCBjb25uZWN0SGFuZGxlcilcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgaWYgKHR5cGVvZiBjYWxsYmFjayAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgZXJyXG4gICAgfVxuICAgIGNvbnN0IG9wYXF1ZSA9IG9wdHMgJiYgb3B0cy5vcGFxdWVcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBjYWxsYmFjayhlcnIsIHsgb3BhcXVlIH0pKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gY29ubmVjdFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cy5yZXF1ZXN0ID0gcmVxdWlyZSgnLi9hcGktcmVxdWVzdCcpXG5tb2R1bGUuZXhwb3J0cy5zdHJlYW0gPSByZXF1aXJlKCcuL2FwaS1zdHJlYW0nKVxubW9kdWxlLmV4cG9ydHMucGlwZWxpbmUgPSByZXF1aXJlKCcuL2FwaS1waXBlbGluZScpXG5tb2R1bGUuZXhwb3J0cy51cGdyYWRlID0gcmVxdWlyZSgnLi9hcGktdXBncmFkZScpXG5tb2R1bGUuZXhwb3J0cy5jb25uZWN0ID0gcmVxdWlyZSgnLi9hcGktY29ubmVjdCcpXG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgVW5kaWNpRXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuY2xhc3MgTW9ja05vdE1hdGNoZWRFcnJvciBleHRlbmRzIFVuZGljaUVycm9yIHtcbiAgY29uc3RydWN0b3IgKG1lc3NhZ2UpIHtcbiAgICBzdXBlcihtZXNzYWdlKVxuICAgIEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsIE1vY2tOb3RNYXRjaGVkRXJyb3IpXG4gICAgdGhpcy5uYW1lID0gJ01vY2tOb3RNYXRjaGVkRXJyb3InXG4gICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZSB8fCAnVGhlIHJlcXVlc3QgZG9lcyBub3QgbWF0Y2ggYW55IHJlZ2lzdGVyZWQgbW9jayBkaXNwYXRjaGVzJ1xuICAgIHRoaXMuY29kZSA9ICdVTkRfTU9DS19FUlJfTU9DS19OT1RfTUFUQ0hFRCdcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgTW9ja05vdE1hdGNoZWRFcnJvclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga0FnZW50OiBTeW1ib2woJ2FnZW50JyksXG4gIGtPcHRpb25zOiBTeW1ib2woJ29wdGlvbnMnKSxcbiAga0ZhY3Rvcnk6IFN5bWJvbCgnZmFjdG9yeScpLFxuICBrRGlzcGF0Y2hlczogU3ltYm9sKCdkaXNwYXRjaGVzJyksXG4gIGtEaXNwYXRjaEtleTogU3ltYm9sKCdkaXNwYXRjaCBrZXknKSxcbiAga0RlZmF1bHRIZWFkZXJzOiBTeW1ib2woJ2RlZmF1bHQgaGVhZGVycycpLFxuICBrRGVmYXVsdFRyYWlsZXJzOiBTeW1ib2woJ2RlZmF1bHQgdHJhaWxlcnMnKSxcbiAga0NvbnRlbnRMZW5ndGg6IFN5bWJvbCgnY29udGVudCBsZW5ndGgnKSxcbiAga01vY2tBZ2VudDogU3ltYm9sKCdtb2NrIGFnZW50JyksXG4gIGtNb2NrQWdlbnRTZXQ6IFN5bWJvbCgnbW9jayBhZ2VudCBzZXQnKSxcbiAga01vY2tBZ2VudEdldDogU3ltYm9sKCdtb2NrIGFnZW50IGdldCcpLFxuICBrTW9ja0Rpc3BhdGNoOiBTeW1ib2woJ21vY2sgZGlzcGF0Y2gnKSxcbiAga0Nsb3NlOiBTeW1ib2woJ2Nsb3NlJyksXG4gIGtPcmlnaW5hbENsb3NlOiBTeW1ib2woJ29yaWdpbmFsIGFnZW50IGNsb3NlJyksXG4gIGtPcmlnaW46IFN5bWJvbCgnb3JpZ2luJyksXG4gIGtJc01vY2tBY3RpdmU6IFN5bWJvbCgnaXMgbW9jayBhY3RpdmUnKSxcbiAga05ldENvbm5lY3Q6IFN5bWJvbCgnbmV0IGNvbm5lY3QnKSxcbiAga0dldE5ldENvbm5lY3Q6IFN5bWJvbCgnZ2V0IG5ldCBjb25uZWN0JyksXG4gIGtDb25uZWN0ZWQ6IFN5bWJvbCgnY29ubmVjdGVkJylcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBNb2NrTm90TWF0Y2hlZEVycm9yIH0gPSByZXF1aXJlKCcuL21vY2stZXJyb3JzJylcbmNvbnN0IHtcbiAga0Rpc3BhdGNoZXMsXG4gIGtNb2NrQWdlbnQsXG4gIGtPcmlnaW5hbERpc3BhdGNoLFxuICBrT3JpZ2luLFxuICBrR2V0TmV0Q29ubmVjdFxufSA9IHJlcXVpcmUoJy4vbW9jay1zeW1ib2xzJylcbmNvbnN0IHsgYnVpbGRVUkwsIG5vcCB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgU1RBVFVTX0NPREVTIH0gPSByZXF1aXJlKCdodHRwJylcbmNvbnN0IHtcbiAgdHlwZXM6IHtcbiAgICBpc1Byb21pc2VcbiAgfVxufSA9IHJlcXVpcmUoJ3V0aWwnKVxuXG5mdW5jdGlvbiBtYXRjaFZhbHVlIChtYXRjaCwgdmFsdWUpIHtcbiAgaWYgKHR5cGVvZiBtYXRjaCA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gbWF0Y2ggPT09IHZhbHVlXG4gIH1cbiAgaWYgKG1hdGNoIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgcmV0dXJuIG1hdGNoLnRlc3QodmFsdWUpXG4gIH1cbiAgaWYgKHR5cGVvZiBtYXRjaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBtYXRjaCh2YWx1ZSkgPT09IHRydWVcbiAgfVxuICByZXR1cm4gZmFsc2Vcbn1cblxuZnVuY3Rpb24gbG93ZXJDYXNlRW50cmllcyAoaGVhZGVycykge1xuICByZXR1cm4gT2JqZWN0LmZyb21FbnRyaWVzKFxuICAgIE9iamVjdC5lbnRyaWVzKGhlYWRlcnMpLm1hcCgoW2hlYWRlck5hbWUsIGhlYWRlclZhbHVlXSkgPT4ge1xuICAgICAgcmV0dXJuIFtoZWFkZXJOYW1lLnRvTG9jYWxlTG93ZXJDYXNlKCksIGhlYWRlclZhbHVlXVxuICAgIH0pXG4gIClcbn1cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi4vLi4vaW5kZXgnKS5IZWFkZXJzfHN0cmluZ1tdfFJlY29yZDxzdHJpbmcsIHN0cmluZz59IGhlYWRlcnNcbiAqIEBwYXJhbSB7c3RyaW5nfSBrZXlcbiAqL1xuZnVuY3Rpb24gZ2V0SGVhZGVyQnlOYW1lIChoZWFkZXJzLCBrZXkpIHtcbiAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIGlmIChoZWFkZXJzW2ldLnRvTG9jYWxlTG93ZXJDYXNlKCkgPT09IGtleS50b0xvY2FsZUxvd2VyQ2FzZSgpKSB7XG4gICAgICAgIHJldHVybiBoZWFkZXJzW2kgKyAxXVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWRcbiAgfSBlbHNlIGlmICh0eXBlb2YgaGVhZGVycy5nZXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICByZXR1cm4gaGVhZGVycy5nZXQoa2V5KVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBsb3dlckNhc2VFbnRyaWVzKGhlYWRlcnMpW2tleS50b0xvY2FsZUxvd2VyQ2FzZSgpXVxuICB9XG59XG5cbi8qKiBAcGFyYW0ge3N0cmluZ1tdfSBoZWFkZXJzICovXG5mdW5jdGlvbiBidWlsZEhlYWRlcnNGcm9tQXJyYXkgKGhlYWRlcnMpIHsgLy8gZmV0Y2ggSGVhZGVyc0xpc3RcbiAgY29uc3QgY2xvbmUgPSBoZWFkZXJzLnNsaWNlKClcbiAgY29uc3QgZW50cmllcyA9IFtdXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBjbG9uZS5sZW5ndGg7IGluZGV4ICs9IDIpIHtcbiAgICBlbnRyaWVzLnB1c2goW2Nsb25lW2luZGV4XSwgY2xvbmVbaW5kZXggKyAxXV0pXG4gIH1cbiAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyhlbnRyaWVzKVxufVxuXG5mdW5jdGlvbiBtYXRjaEhlYWRlcnMgKG1vY2tEaXNwYXRjaCwgaGVhZGVycykge1xuICBpZiAodHlwZW9mIG1vY2tEaXNwYXRjaC5oZWFkZXJzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgaWYgKEFycmF5LmlzQXJyYXkoaGVhZGVycykpIHsgLy8gZmV0Y2ggSGVhZGVyc0xpc3RcbiAgICAgIGhlYWRlcnMgPSBidWlsZEhlYWRlcnNGcm9tQXJyYXkoaGVhZGVycylcbiAgICB9XG4gICAgcmV0dXJuIG1vY2tEaXNwYXRjaC5oZWFkZXJzKGhlYWRlcnMgPyBsb3dlckNhc2VFbnRyaWVzKGhlYWRlcnMpIDoge30pXG4gIH1cbiAgaWYgKHR5cGVvZiBtb2NrRGlzcGF0Y2guaGVhZGVycyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIGlmICh0eXBlb2YgaGVhZGVycyAhPT0gJ29iamVjdCcgfHwgdHlwZW9mIG1vY2tEaXNwYXRjaC5oZWFkZXJzICE9PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgZm9yIChjb25zdCBbbWF0Y2hIZWFkZXJOYW1lLCBtYXRjaEhlYWRlclZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhtb2NrRGlzcGF0Y2guaGVhZGVycykpIHtcbiAgICBjb25zdCBoZWFkZXJWYWx1ZSA9IGdldEhlYWRlckJ5TmFtZShoZWFkZXJzLCBtYXRjaEhlYWRlck5hbWUpXG5cbiAgICBpZiAoIW1hdGNoVmFsdWUobWF0Y2hIZWFkZXJWYWx1ZSwgaGVhZGVyVmFsdWUpKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuZnVuY3Rpb24gc2FmZVVybCAocGF0aCkge1xuICBpZiAodHlwZW9mIHBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHBhdGhcbiAgfVxuXG4gIGNvbnN0IHBhdGhTZWdtZW50cyA9IHBhdGguc3BsaXQoJz8nKVxuXG4gIGlmIChwYXRoU2VnbWVudHMubGVuZ3RoICE9PSAyKSB7XG4gICAgcmV0dXJuIHBhdGhcbiAgfVxuXG4gIGNvbnN0IHFwID0gbmV3IFVSTFNlYXJjaFBhcmFtcyhwYXRoU2VnbWVudHMucG9wKCkpXG4gIHFwLnNvcnQoKVxuICByZXR1cm4gWy4uLnBhdGhTZWdtZW50cywgcXAudG9TdHJpbmcoKV0uam9pbignPycpXG59XG5cbmZ1bmN0aW9uIG1hdGNoS2V5IChtb2NrRGlzcGF0Y2gsIHsgcGF0aCwgbWV0aG9kLCBib2R5LCBoZWFkZXJzIH0pIHtcbiAgY29uc3QgcGF0aE1hdGNoID0gbWF0Y2hWYWx1ZShtb2NrRGlzcGF0Y2gucGF0aCwgcGF0aClcbiAgY29uc3QgbWV0aG9kTWF0Y2ggPSBtYXRjaFZhbHVlKG1vY2tEaXNwYXRjaC5tZXRob2QsIG1ldGhvZClcbiAgY29uc3QgYm9keU1hdGNoID0gdHlwZW9mIG1vY2tEaXNwYXRjaC5ib2R5ICE9PSAndW5kZWZpbmVkJyA/IG1hdGNoVmFsdWUobW9ja0Rpc3BhdGNoLmJvZHksIGJvZHkpIDogdHJ1ZVxuICBjb25zdCBoZWFkZXJzTWF0Y2ggPSBtYXRjaEhlYWRlcnMobW9ja0Rpc3BhdGNoLCBoZWFkZXJzKVxuICByZXR1cm4gcGF0aE1hdGNoICYmIG1ldGhvZE1hdGNoICYmIGJvZHlNYXRjaCAmJiBoZWFkZXJzTWF0Y2hcbn1cblxuZnVuY3Rpb24gZ2V0UmVzcG9uc2VEYXRhIChkYXRhKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoZGF0YSkpIHtcbiAgICByZXR1cm4gZGF0YVxuICB9IGVsc2UgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0Jykge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShkYXRhKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBkYXRhLnRvU3RyaW5nKClcbiAgfVxufVxuXG5mdW5jdGlvbiBnZXRNb2NrRGlzcGF0Y2ggKG1vY2tEaXNwYXRjaGVzLCBrZXkpIHtcbiAgY29uc3QgYmFzZVBhdGggPSBrZXkucXVlcnkgPyBidWlsZFVSTChrZXkucGF0aCwga2V5LnF1ZXJ5KSA6IGtleS5wYXRoXG4gIGNvbnN0IHJlc29sdmVkUGF0aCA9IHR5cGVvZiBiYXNlUGF0aCA9PT0gJ3N0cmluZycgPyBzYWZlVXJsKGJhc2VQYXRoKSA6IGJhc2VQYXRoXG5cbiAgLy8gTWF0Y2ggcGF0aFxuICBsZXQgbWF0Y2hlZE1vY2tEaXNwYXRjaGVzID0gbW9ja0Rpc3BhdGNoZXMuZmlsdGVyKCh7IGNvbnN1bWVkIH0pID0+ICFjb25zdW1lZCkuZmlsdGVyKCh7IHBhdGggfSkgPT4gbWF0Y2hWYWx1ZShzYWZlVXJsKHBhdGgpLCByZXNvbHZlZFBhdGgpKVxuICBpZiAobWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBNb2NrTm90TWF0Y2hlZEVycm9yKGBNb2NrIGRpc3BhdGNoIG5vdCBtYXRjaGVkIGZvciBwYXRoICcke3Jlc29sdmVkUGF0aH0nYClcbiAgfVxuXG4gIC8vIE1hdGNoIG1ldGhvZFxuICBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMgPSBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMuZmlsdGVyKCh7IG1ldGhvZCB9KSA9PiBtYXRjaFZhbHVlKG1ldGhvZCwga2V5Lm1ldGhvZCkpXG4gIGlmIChtYXRjaGVkTW9ja0Rpc3BhdGNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgdGhyb3cgbmV3IE1vY2tOb3RNYXRjaGVkRXJyb3IoYE1vY2sgZGlzcGF0Y2ggbm90IG1hdGNoZWQgZm9yIG1ldGhvZCAnJHtrZXkubWV0aG9kfSdgKVxuICB9XG5cbiAgLy8gTWF0Y2ggYm9keVxuICBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMgPSBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMuZmlsdGVyKCh7IGJvZHkgfSkgPT4gdHlwZW9mIGJvZHkgIT09ICd1bmRlZmluZWQnID8gbWF0Y2hWYWx1ZShib2R5LCBrZXkuYm9keSkgOiB0cnVlKVxuICBpZiAobWF0Y2hlZE1vY2tEaXNwYXRjaGVzLmxlbmd0aCA9PT0gMCkge1xuICAgIHRocm93IG5ldyBNb2NrTm90TWF0Y2hlZEVycm9yKGBNb2NrIGRpc3BhdGNoIG5vdCBtYXRjaGVkIGZvciBib2R5ICcke2tleS5ib2R5fSdgKVxuICB9XG5cbiAgLy8gTWF0Y2ggaGVhZGVyc1xuICBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMgPSBtYXRjaGVkTW9ja0Rpc3BhdGNoZXMuZmlsdGVyKChtb2NrRGlzcGF0Y2gpID0+IG1hdGNoSGVhZGVycyhtb2NrRGlzcGF0Y2gsIGtleS5oZWFkZXJzKSlcbiAgaWYgKG1hdGNoZWRNb2NrRGlzcGF0Y2hlcy5sZW5ndGggPT09IDApIHtcbiAgICB0aHJvdyBuZXcgTW9ja05vdE1hdGNoZWRFcnJvcihgTW9jayBkaXNwYXRjaCBub3QgbWF0Y2hlZCBmb3IgaGVhZGVycyAnJHt0eXBlb2Yga2V5LmhlYWRlcnMgPT09ICdvYmplY3QnID8gSlNPTi5zdHJpbmdpZnkoa2V5LmhlYWRlcnMpIDoga2V5LmhlYWRlcnN9J2ApXG4gIH1cblxuICByZXR1cm4gbWF0Y2hlZE1vY2tEaXNwYXRjaGVzWzBdXG59XG5cbmZ1bmN0aW9uIGFkZE1vY2tEaXNwYXRjaCAobW9ja0Rpc3BhdGNoZXMsIGtleSwgZGF0YSkge1xuICBjb25zdCBiYXNlRGF0YSA9IHsgdGltZXNJbnZva2VkOiAwLCB0aW1lczogMSwgcGVyc2lzdDogZmFsc2UsIGNvbnN1bWVkOiBmYWxzZSB9XG4gIGNvbnN0IHJlcGx5RGF0YSA9IHR5cGVvZiBkYXRhID09PSAnZnVuY3Rpb24nID8geyBjYWxsYmFjazogZGF0YSB9IDogeyAuLi5kYXRhIH1cbiAgY29uc3QgbmV3TW9ja0Rpc3BhdGNoID0geyAuLi5iYXNlRGF0YSwgLi4ua2V5LCBwZW5kaW5nOiB0cnVlLCBkYXRhOiB7IGVycm9yOiBudWxsLCAuLi5yZXBseURhdGEgfSB9XG4gIG1vY2tEaXNwYXRjaGVzLnB1c2gobmV3TW9ja0Rpc3BhdGNoKVxuICByZXR1cm4gbmV3TW9ja0Rpc3BhdGNoXG59XG5cbmZ1bmN0aW9uIGRlbGV0ZU1vY2tEaXNwYXRjaCAobW9ja0Rpc3BhdGNoZXMsIGtleSkge1xuICBjb25zdCBpbmRleCA9IG1vY2tEaXNwYXRjaGVzLmZpbmRJbmRleChkaXNwYXRjaCA9PiB7XG4gICAgaWYgKCFkaXNwYXRjaC5jb25zdW1lZCkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICAgIHJldHVybiBtYXRjaEtleShkaXNwYXRjaCwga2V5KVxuICB9KVxuICBpZiAoaW5kZXggIT09IC0xKSB7XG4gICAgbW9ja0Rpc3BhdGNoZXMuc3BsaWNlKGluZGV4LCAxKVxuICB9XG59XG5cbmZ1bmN0aW9uIGJ1aWxkS2V5IChvcHRzKSB7XG4gIGNvbnN0IHsgcGF0aCwgbWV0aG9kLCBib2R5LCBoZWFkZXJzLCBxdWVyeSB9ID0gb3B0c1xuICByZXR1cm4ge1xuICAgIHBhdGgsXG4gICAgbWV0aG9kLFxuICAgIGJvZHksXG4gICAgaGVhZGVycyxcbiAgICBxdWVyeVxuICB9XG59XG5cbmZ1bmN0aW9uIGdlbmVyYXRlS2V5VmFsdWVzIChkYXRhKSB7XG4gIHJldHVybiBPYmplY3QuZW50cmllcyhkYXRhKS5yZWR1Y2UoKGtleVZhbHVlUGFpcnMsIFtrZXksIHZhbHVlXSkgPT4gW1xuICAgIC4uLmtleVZhbHVlUGFpcnMsXG4gICAgQnVmZmVyLmZyb20oYCR7a2V5fWApLFxuICAgIEFycmF5LmlzQXJyYXkodmFsdWUpID8gdmFsdWUubWFwKHggPT4gQnVmZmVyLmZyb20oYCR7eH1gKSkgOiBCdWZmZXIuZnJvbShgJHt2YWx1ZX1gKVxuICBdLCBbXSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0hUVFAvU3RhdHVzXG4gKiBAcGFyYW0ge251bWJlcn0gc3RhdHVzQ29kZVxuICovXG5mdW5jdGlvbiBnZXRTdGF0dXNUZXh0IChzdGF0dXNDb2RlKSB7XG4gIHJldHVybiBTVEFUVVNfQ09ERVNbc3RhdHVzQ29kZV0gfHwgJ3Vua25vd24nXG59XG5cbmFzeW5jIGZ1bmN0aW9uIGdldFJlc3BvbnNlIChib2R5KSB7XG4gIGNvbnN0IGJ1ZmZlcnMgPSBbXVxuICBmb3IgYXdhaXQgKGNvbnN0IGRhdGEgb2YgYm9keSkge1xuICAgIGJ1ZmZlcnMucHVzaChkYXRhKVxuICB9XG4gIHJldHVybiBCdWZmZXIuY29uY2F0KGJ1ZmZlcnMpLnRvU3RyaW5nKCd1dGY4Jylcbn1cblxuLyoqXG4gKiBNb2NrIGRpc3BhdGNoIGZ1bmN0aW9uIHVzZWQgdG8gc2ltdWxhdGUgdW5kaWNpIGRpc3BhdGNoZXNcbiAqL1xuZnVuY3Rpb24gbW9ja0Rpc3BhdGNoIChvcHRzLCBoYW5kbGVyKSB7XG4gIC8vIEdldCBtb2NrIGRpc3BhdGNoIGZyb20gYnVpbHQga2V5XG4gIGNvbnN0IGtleSA9IGJ1aWxkS2V5KG9wdHMpXG4gIGNvbnN0IG1vY2tEaXNwYXRjaCA9IGdldE1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwga2V5KVxuXG4gIG1vY2tEaXNwYXRjaC50aW1lc0ludm9rZWQrK1xuXG4gIC8vIEhlcmUncyB3aGVyZSB3ZSByZXNvbHZlIGEgY2FsbGJhY2sgaWYgYSBjYWxsYmFjayBpcyBwcmVzZW50IGZvciB0aGUgZGlzcGF0Y2ggZGF0YS5cbiAgaWYgKG1vY2tEaXNwYXRjaC5kYXRhLmNhbGxiYWNrKSB7XG4gICAgbW9ja0Rpc3BhdGNoLmRhdGEgPSB7IC4uLm1vY2tEaXNwYXRjaC5kYXRhLCAuLi5tb2NrRGlzcGF0Y2guZGF0YS5jYWxsYmFjayhvcHRzKSB9XG4gIH1cblxuICAvLyBQYXJzZSBtb2NrRGlzcGF0Y2ggZGF0YVxuICBjb25zdCB7IGRhdGE6IHsgc3RhdHVzQ29kZSwgZGF0YSwgaGVhZGVycywgdHJhaWxlcnMsIGVycm9yIH0sIGRlbGF5LCBwZXJzaXN0IH0gPSBtb2NrRGlzcGF0Y2hcbiAgY29uc3QgeyB0aW1lc0ludm9rZWQsIHRpbWVzIH0gPSBtb2NrRGlzcGF0Y2hcblxuICAvLyBJZiBpdCdzIHVzZWQgdXAgYW5kIG5vdCBwZXJzaXN0ZW50LCBtYXJrIGFzIGNvbnN1bWVkXG4gIG1vY2tEaXNwYXRjaC5jb25zdW1lZCA9ICFwZXJzaXN0ICYmIHRpbWVzSW52b2tlZCA+PSB0aW1lc1xuICBtb2NrRGlzcGF0Y2gucGVuZGluZyA9IHRpbWVzSW52b2tlZCA8IHRpbWVzXG5cbiAgLy8gSWYgc3BlY2lmaWVkLCB0cmlnZ2VyIGRpc3BhdGNoIGVycm9yXG4gIGlmIChlcnJvciAhPT0gbnVsbCkge1xuICAgIGRlbGV0ZU1vY2tEaXNwYXRjaCh0aGlzW2tEaXNwYXRjaGVzXSwga2V5KVxuICAgIGhhbmRsZXIub25FcnJvcihlcnJvcilcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgLy8gSGFuZGxlIHRoZSByZXF1ZXN0IHdpdGggYSBkZWxheSBpZiBuZWNlc3NhcnlcbiAgaWYgKHR5cGVvZiBkZWxheSA9PT0gJ251bWJlcicgJiYgZGVsYXkgPiAwKSB7XG4gICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBoYW5kbGVSZXBseSh0aGlzW2tEaXNwYXRjaGVzXSlcbiAgICB9LCBkZWxheSlcbiAgfSBlbHNlIHtcbiAgICBoYW5kbGVSZXBseSh0aGlzW2tEaXNwYXRjaGVzXSlcbiAgfVxuXG4gIGZ1bmN0aW9uIGhhbmRsZVJlcGx5IChtb2NrRGlzcGF0Y2hlcywgX2RhdGEgPSBkYXRhKSB7XG4gICAgLy8gZmV0Y2gncyBIZWFkZXJzTGlzdCBpcyBhIDFEIHN0cmluZyBhcnJheVxuICAgIGNvbnN0IG9wdHNIZWFkZXJzID0gQXJyYXkuaXNBcnJheShvcHRzLmhlYWRlcnMpXG4gICAgICA/IGJ1aWxkSGVhZGVyc0Zyb21BcnJheShvcHRzLmhlYWRlcnMpXG4gICAgICA6IG9wdHMuaGVhZGVyc1xuICAgIGNvbnN0IGJvZHkgPSB0eXBlb2YgX2RhdGEgPT09ICdmdW5jdGlvbidcbiAgICAgID8gX2RhdGEoeyAuLi5vcHRzLCBoZWFkZXJzOiBvcHRzSGVhZGVycyB9KVxuICAgICAgOiBfZGF0YVxuXG4gICAgLy8gdXRpbC50eXBlcy5pc1Byb21pc2UgaXMgbGlrZWx5IG5lZWRlZCBmb3IgamVzdC5cbiAgICBpZiAoaXNQcm9taXNlKGJvZHkpKSB7XG4gICAgICAvLyBJZiBoYW5kbGVSZXBseSBpcyBhc3luY2hyb25vdXMsIHRocm93aW5nIGFuIGVycm9yXG4gICAgICAvLyBpbiB0aGUgY2FsbGJhY2sgd2lsbCByZWplY3QgdGhlIHByb21pc2UsIHJhdGhlciB0aGFuXG4gICAgICAvLyBzeW5jaHJvbm91c2x5IHRocm93IHRoZSBlcnJvciwgd2hpY2ggYnJlYWtzIHNvbWUgdGVzdHMuXG4gICAgICAvLyBSYXRoZXIsIHdlIHdhaXQgZm9yIHRoZSBjYWxsYmFjayB0byByZXNvbHZlIGlmIGl0IGlzIGFcbiAgICAgIC8vIHByb21pc2UsIGFuZCB0aGVuIHJlLXJ1biBoYW5kbGVSZXBseSB3aXRoIHRoZSBuZXcgYm9keS5cbiAgICAgIGJvZHkudGhlbigobmV3RGF0YSkgPT4gaGFuZGxlUmVwbHkobW9ja0Rpc3BhdGNoZXMsIG5ld0RhdGEpKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcmVzcG9uc2VEYXRhID0gZ2V0UmVzcG9uc2VEYXRhKGJvZHkpXG4gICAgY29uc3QgcmVzcG9uc2VIZWFkZXJzID0gZ2VuZXJhdGVLZXlWYWx1ZXMoaGVhZGVycylcbiAgICBjb25zdCByZXNwb25zZVRyYWlsZXJzID0gZ2VuZXJhdGVLZXlWYWx1ZXModHJhaWxlcnMpXG5cbiAgICBoYW5kbGVyLmFib3J0ID0gbm9wXG4gICAgaGFuZGxlci5vbkhlYWRlcnMoc3RhdHVzQ29kZSwgcmVzcG9uc2VIZWFkZXJzLCByZXN1bWUsIGdldFN0YXR1c1RleHQoc3RhdHVzQ29kZSkpXG4gICAgaGFuZGxlci5vbkRhdGEoQnVmZmVyLmZyb20ocmVzcG9uc2VEYXRhKSlcbiAgICBoYW5kbGVyLm9uQ29tcGxldGUocmVzcG9uc2VUcmFpbGVycylcbiAgICBkZWxldGVNb2NrRGlzcGF0Y2gobW9ja0Rpc3BhdGNoZXMsIGtleSlcbiAgfVxuXG4gIGZ1bmN0aW9uIHJlc3VtZSAoKSB7fVxuXG4gIHJldHVybiB0cnVlXG59XG5cbmZ1bmN0aW9uIGJ1aWxkTW9ja0Rpc3BhdGNoICgpIHtcbiAgY29uc3QgYWdlbnQgPSB0aGlzW2tNb2NrQWdlbnRdXG4gIGNvbnN0IG9yaWdpbiA9IHRoaXNba09yaWdpbl1cbiAgY29uc3Qgb3JpZ2luYWxEaXNwYXRjaCA9IHRoaXNba09yaWdpbmFsRGlzcGF0Y2hdXG5cbiAgcmV0dXJuIGZ1bmN0aW9uIGRpc3BhdGNoIChvcHRzLCBoYW5kbGVyKSB7XG4gICAgaWYgKGFnZW50LmlzTW9ja0FjdGl2ZSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgbW9ja0Rpc3BhdGNoLmNhbGwodGhpcywgb3B0cywgaGFuZGxlcilcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIE1vY2tOb3RNYXRjaGVkRXJyb3IpIHtcbiAgICAgICAgICBjb25zdCBuZXRDb25uZWN0ID0gYWdlbnRba0dldE5ldENvbm5lY3RdKClcbiAgICAgICAgICBpZiAobmV0Q29ubmVjdCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBNb2NrTm90TWF0Y2hlZEVycm9yKGAke2Vycm9yLm1lc3NhZ2V9OiBzdWJzZXF1ZW50IHJlcXVlc3QgdG8gb3JpZ2luICR7b3JpZ2lufSB3YXMgbm90IGFsbG93ZWQgKG5ldC5jb25uZWN0IGRpc2FibGVkKWApXG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjaGVja05ldENvbm5lY3QobmV0Q29ubmVjdCwgb3JpZ2luKSkge1xuICAgICAgICAgICAgb3JpZ2luYWxEaXNwYXRjaC5jYWxsKHRoaXMsIG9wdHMsIGhhbmRsZXIpXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBNb2NrTm90TWF0Y2hlZEVycm9yKGAke2Vycm9yLm1lc3NhZ2V9OiBzdWJzZXF1ZW50IHJlcXVlc3QgdG8gb3JpZ2luICR7b3JpZ2lufSB3YXMgbm90IGFsbG93ZWQgKG5ldC5jb25uZWN0IGlzIG5vdCBlbmFibGVkIGZvciB0aGlzIG9yaWdpbilgKVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBlcnJvclxuICAgICAgICB9XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIG9yaWdpbmFsRGlzcGF0Y2guY2FsbCh0aGlzLCBvcHRzLCBoYW5kbGVyKVxuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBjaGVja05ldENvbm5lY3QgKG5ldENvbm5lY3QsIG9yaWdpbikge1xuICBjb25zdCB1cmwgPSBuZXcgVVJMKG9yaWdpbilcbiAgaWYgKG5ldENvbm5lY3QgPT09IHRydWUpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkobmV0Q29ubmVjdCkgJiYgbmV0Q29ubmVjdC5zb21lKChtYXRjaGVyKSA9PiBtYXRjaFZhbHVlKG1hdGNoZXIsIHVybC5ob3N0KSkpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG4gIHJldHVybiBmYWxzZVxufVxuXG5mdW5jdGlvbiBidWlsZE1vY2tPcHRpb25zIChvcHRzKSB7XG4gIGlmIChvcHRzKSB7XG4gICAgY29uc3QgeyBhZ2VudCwgLi4ubW9ja09wdGlvbnMgfSA9IG9wdHNcbiAgICByZXR1cm4gbW9ja09wdGlvbnNcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgZ2V0UmVzcG9uc2VEYXRhLFxuICBnZXRNb2NrRGlzcGF0Y2gsXG4gIGFkZE1vY2tEaXNwYXRjaCxcbiAgZGVsZXRlTW9ja0Rpc3BhdGNoLFxuICBidWlsZEtleSxcbiAgZ2VuZXJhdGVLZXlWYWx1ZXMsXG4gIG1hdGNoVmFsdWUsXG4gIGdldFJlc3BvbnNlLFxuICBnZXRTdGF0dXNUZXh0LFxuICBtb2NrRGlzcGF0Y2gsXG4gIGJ1aWxkTW9ja0Rpc3BhdGNoLFxuICBjaGVja05ldENvbm5lY3QsXG4gIGJ1aWxkTW9ja09wdGlvbnMsXG4gIGdldEhlYWRlckJ5TmFtZVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGdldFJlc3BvbnNlRGF0YSwgYnVpbGRLZXksIGFkZE1vY2tEaXNwYXRjaCB9ID0gcmVxdWlyZSgnLi9tb2NrLXV0aWxzJylcbmNvbnN0IHtcbiAga0Rpc3BhdGNoZXMsXG4gIGtEaXNwYXRjaEtleSxcbiAga0RlZmF1bHRIZWFkZXJzLFxuICBrRGVmYXVsdFRyYWlsZXJzLFxuICBrQ29udGVudExlbmd0aCxcbiAga01vY2tEaXNwYXRjaFxufSA9IHJlcXVpcmUoJy4vbW9jay1zeW1ib2xzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsgYnVpbGRVUkwgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5cbi8qKlxuICogRGVmaW5lcyB0aGUgc2NvcGUgQVBJIGZvciBhbiBpbnRlcmNlcHRvciByZXBseVxuICovXG5jbGFzcyBNb2NrU2NvcGUge1xuICBjb25zdHJ1Y3RvciAobW9ja0Rpc3BhdGNoKSB7XG4gICAgdGhpc1trTW9ja0Rpc3BhdGNoXSA9IG1vY2tEaXNwYXRjaFxuICB9XG5cbiAgLyoqXG4gICAqIERlbGF5IGEgcmVwbHkgYnkgYSBzZXQgYW1vdW50IGluIG1zLlxuICAgKi9cbiAgZGVsYXkgKHdhaXRJbk1zKSB7XG4gICAgaWYgKHR5cGVvZiB3YWl0SW5NcyAhPT0gJ251bWJlcicgfHwgIU51bWJlci5pc0ludGVnZXIod2FpdEluTXMpIHx8IHdhaXRJbk1zIDw9IDApIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignd2FpdEluTXMgbXVzdCBiZSBhIHZhbGlkIGludGVnZXIgPiAwJylcbiAgICB9XG5cbiAgICB0aGlzW2tNb2NrRGlzcGF0Y2hdLmRlbGF5ID0gd2FpdEluTXNcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIEZvciBhIGRlZmluZWQgcmVwbHksIG5ldmVyIG1hcmsgYXMgY29uc3VtZWQuXG4gICAqL1xuICBwZXJzaXN0ICgpIHtcbiAgICB0aGlzW2tNb2NrRGlzcGF0Y2hdLnBlcnNpc3QgPSB0cnVlXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxuXG4gIC8qKlxuICAgKiBBbGxvdyBvbmUgdG8gZGVmaW5lIGEgcmVwbHkgZm9yIGEgc2V0IGFtb3VudCBvZiBtYXRjaGluZyByZXF1ZXN0cy5cbiAgICovXG4gIHRpbWVzIChyZXBlYXRUaW1lcykge1xuICAgIGlmICh0eXBlb2YgcmVwZWF0VGltZXMgIT09ICdudW1iZXInIHx8ICFOdW1iZXIuaXNJbnRlZ2VyKHJlcGVhdFRpbWVzKSB8fCByZXBlYXRUaW1lcyA8PSAwKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3JlcGVhdFRpbWVzIG11c3QgYmUgYSB2YWxpZCBpbnRlZ2VyID4gMCcpXG4gICAgfVxuXG4gICAgdGhpc1trTW9ja0Rpc3BhdGNoXS50aW1lcyA9IHJlcGVhdFRpbWVzXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxufVxuXG4vKipcbiAqIERlZmluZXMgYW4gaW50ZXJjZXB0b3IgZm9yIGEgTW9ja1xuICovXG5jbGFzcyBNb2NrSW50ZXJjZXB0b3Ige1xuICBjb25zdHJ1Y3RvciAob3B0cywgbW9ja0Rpc3BhdGNoZXMpIHtcbiAgICBpZiAodHlwZW9mIG9wdHMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ29wdHMgbXVzdCBiZSBhbiBvYmplY3QnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdHMucGF0aCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignb3B0cy5wYXRoIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuICAgIGlmICh0eXBlb2Ygb3B0cy5tZXRob2QgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBvcHRzLm1ldGhvZCA9ICdHRVQnXG4gICAgfVxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTI0NVxuICAgIC8vIEFzIHBlciBSRkMgMzk4NiwgY2xpZW50cyBhcmUgbm90IHN1cHBvc2VkIHRvIHNlbmQgVVJJXG4gICAgLy8gZnJhZ21lbnRzIHRvIHNlcnZlcnMgd2hlbiB0aGV5IHJldHJpZXZlIGEgZG9jdW1lbnQsXG4gICAgaWYgKHR5cGVvZiBvcHRzLnBhdGggPT09ICdzdHJpbmcnKSB7XG4gICAgICBpZiAob3B0cy5xdWVyeSkge1xuICAgICAgICBvcHRzLnBhdGggPSBidWlsZFVSTChvcHRzLnBhdGgsIG9wdHMucXVlcnkpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBNYXRjaGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2Jsb2IvbWFpbi9saWIvZmV0Y2gvaW5kZXguanMjTDE4MTFcbiAgICAgICAgY29uc3QgcGFyc2VkVVJMID0gbmV3IFVSTChvcHRzLnBhdGgsICdkYXRhOi8vJylcbiAgICAgICAgb3B0cy5wYXRoID0gcGFyc2VkVVJMLnBhdGhuYW1lICsgcGFyc2VkVVJMLnNlYXJjaFxuICAgICAgfVxuICAgIH1cbiAgICBpZiAodHlwZW9mIG9wdHMubWV0aG9kID09PSAnc3RyaW5nJykge1xuICAgICAgb3B0cy5tZXRob2QgPSBvcHRzLm1ldGhvZC50b1VwcGVyQ2FzZSgpXG4gICAgfVxuXG4gICAgdGhpc1trRGlzcGF0Y2hLZXldID0gYnVpbGRLZXkob3B0cylcbiAgICB0aGlzW2tEaXNwYXRjaGVzXSA9IG1vY2tEaXNwYXRjaGVzXG4gICAgdGhpc1trRGVmYXVsdEhlYWRlcnNdID0ge31cbiAgICB0aGlzW2tEZWZhdWx0VHJhaWxlcnNdID0ge31cbiAgICB0aGlzW2tDb250ZW50TGVuZ3RoXSA9IGZhbHNlXG4gIH1cblxuICBjcmVhdGVNb2NrU2NvcGVEaXNwYXRjaERhdGEgKHN0YXR1c0NvZGUsIGRhdGEsIHJlc3BvbnNlT3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgcmVzcG9uc2VEYXRhID0gZ2V0UmVzcG9uc2VEYXRhKGRhdGEpXG4gICAgY29uc3QgY29udGVudExlbmd0aCA9IHRoaXNba0NvbnRlbnRMZW5ndGhdID8geyAnY29udGVudC1sZW5ndGgnOiByZXNwb25zZURhdGEubGVuZ3RoIH0gOiB7fVxuICAgIGNvbnN0IGhlYWRlcnMgPSB7IC4uLnRoaXNba0RlZmF1bHRIZWFkZXJzXSwgLi4uY29udGVudExlbmd0aCwgLi4ucmVzcG9uc2VPcHRpb25zLmhlYWRlcnMgfVxuICAgIGNvbnN0IHRyYWlsZXJzID0geyAuLi50aGlzW2tEZWZhdWx0VHJhaWxlcnNdLCAuLi5yZXNwb25zZU9wdGlvbnMudHJhaWxlcnMgfVxuXG4gICAgcmV0dXJuIHsgc3RhdHVzQ29kZSwgZGF0YSwgaGVhZGVycywgdHJhaWxlcnMgfVxuICB9XG5cbiAgdmFsaWRhdGVSZXBseVBhcmFtZXRlcnMgKHN0YXR1c0NvZGUsIGRhdGEsIHJlc3BvbnNlT3B0aW9ucykge1xuICAgIGlmICh0eXBlb2Ygc3RhdHVzQ29kZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignc3RhdHVzQ29kZSBtdXN0IGJlIGRlZmluZWQnKVxuICAgIH1cbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2RhdGEgbXVzdCBiZSBkZWZpbmVkJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiByZXNwb25zZU9wdGlvbnMgIT09ICdvYmplY3QnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ3Jlc3BvbnNlT3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCcpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIE1vY2sgYW4gdW5kaWNpIHJlcXVlc3Qgd2l0aCBhIGRlZmluZWQgcmVwbHkuXG4gICAqL1xuICByZXBseSAocmVwbHlEYXRhKSB7XG4gICAgLy8gVmFsdWVzIG9mIHJlcGx5IGFyZW4ndCBhdmFpbGFibGUgcmlnaHQgbm93IGFzIHRoZXlcbiAgICAvLyBjYW4gb25seSBiZSBhdmFpbGFibGUgd2hlbiB0aGUgcmVwbHkgY2FsbGJhY2sgaXMgaW52b2tlZC5cbiAgICBpZiAodHlwZW9mIHJlcGx5RGF0YSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgLy8gV2UnbGwgZmlyc3Qgd3JhcCB0aGUgcHJvdmlkZWQgY2FsbGJhY2sgaW4gYW5vdGhlciBmdW5jdGlvbixcbiAgICAgIC8vIHRoaXMgZnVuY3Rpb24gd2lsbCBwcm9wZXJseSByZXNvbHZlIHRoZSBkYXRhIGZyb20gdGhlIGNhbGxiYWNrXG4gICAgICAvLyB3aGVuIGludm9rZWQuXG4gICAgICBjb25zdCB3cmFwcGVkRGVmYXVsdHNDYWxsYmFjayA9IChvcHRzKSA9PiB7XG4gICAgICAgIC8vIE91ciByZXBseSBvcHRpb25zIGNhbGxiYWNrIGNvbnRhaW5zIHRoZSBwYXJhbWV0ZXIgZm9yIHN0YXR1c0NvZGUsIGRhdGEgYW5kIG9wdGlvbnMuXG4gICAgICAgIGNvbnN0IHJlc29sdmVkRGF0YSA9IHJlcGx5RGF0YShvcHRzKVxuXG4gICAgICAgIC8vIENoZWNrIGlmIGl0IGlzIGluIHRoZSByaWdodCBmb3JtYXRcbiAgICAgICAgaWYgKHR5cGVvZiByZXNvbHZlZERhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdyZXBseSBvcHRpb25zIGNhbGxiYWNrIG11c3QgcmV0dXJuIGFuIG9iamVjdCcpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHN0YXR1c0NvZGUsIGRhdGEgPSAnJywgcmVzcG9uc2VPcHRpb25zID0ge30gfSA9IHJlc29sdmVkRGF0YVxuICAgICAgICB0aGlzLnZhbGlkYXRlUmVwbHlQYXJhbWV0ZXJzKHN0YXR1c0NvZGUsIGRhdGEsIHJlc3BvbnNlT3B0aW9ucylcbiAgICAgICAgLy8gU2luY2UgdGhlIHZhbHVlcyBjYW4gYmUgb2J0YWluZWQgaW1tZWRpYXRlbHkgd2UgcmV0dXJuIHRoZW1cbiAgICAgICAgLy8gZnJvbSB0aGlzIGhpZ2hlciBvcmRlciBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgcmVzb2x2ZWQgbGF0ZXIuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgLi4udGhpcy5jcmVhdGVNb2NrU2NvcGVEaXNwYXRjaERhdGEoc3RhdHVzQ29kZSwgZGF0YSwgcmVzcG9uc2VPcHRpb25zKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCB1c3VhbCBkaXNwYXRjaCBkYXRhLCBidXQgdGhpcyB0aW1lIHNldCB0aGUgZGF0YSBwYXJhbWV0ZXIgdG8gZnVuY3Rpb24gdGhhdCB3aWxsIGV2ZW50dWFsbHkgcHJvdmlkZSBkYXRhLlxuICAgICAgY29uc3QgbmV3TW9ja0Rpc3BhdGNoID0gYWRkTW9ja0Rpc3BhdGNoKHRoaXNba0Rpc3BhdGNoZXNdLCB0aGlzW2tEaXNwYXRjaEtleV0sIHdyYXBwZWREZWZhdWx0c0NhbGxiYWNrKVxuICAgICAgcmV0dXJuIG5ldyBNb2NrU2NvcGUobmV3TW9ja0Rpc3BhdGNoKVxuICAgIH1cblxuICAgIC8vIFdlIGNhbiBoYXZlIGVpdGhlciBvbmUgb3IgdGhyZWUgcGFyYW1ldGVycywgaWYgd2UgZ2V0IGhlcmUsXG4gICAgLy8gd2Ugc2hvdWxkIGhhdmUgMS0zIHBhcmFtZXRlcnMuIFNvIHdlIHNwcmVhZCB0aGUgYXJndW1lbnRzIG9mXG4gICAgLy8gdGhpcyBmdW5jdGlvbiB0byBvYnRhaW4gdGhlIHBhcmFtZXRlcnMsIHNpbmNlIHJlcGx5RGF0YSB3aWxsIGFsd2F5c1xuICAgIC8vIGp1c3QgYmUgdGhlIHN0YXR1c0NvZGUuXG4gICAgY29uc3QgW3N0YXR1c0NvZGUsIGRhdGEgPSAnJywgcmVzcG9uc2VPcHRpb25zID0ge31dID0gWy4uLmFyZ3VtZW50c11cbiAgICB0aGlzLnZhbGlkYXRlUmVwbHlQYXJhbWV0ZXJzKHN0YXR1c0NvZGUsIGRhdGEsIHJlc3BvbnNlT3B0aW9ucylcblxuICAgIC8vIFNlbmQgaW4tYWxyZWFkeSBwcm92aWRlZCBkYXRhIGxpa2UgdXN1YWxcbiAgICBjb25zdCBkaXNwYXRjaERhdGEgPSB0aGlzLmNyZWF0ZU1vY2tTY29wZURpc3BhdGNoRGF0YShzdGF0dXNDb2RlLCBkYXRhLCByZXNwb25zZU9wdGlvbnMpXG4gICAgY29uc3QgbmV3TW9ja0Rpc3BhdGNoID0gYWRkTW9ja0Rpc3BhdGNoKHRoaXNba0Rpc3BhdGNoZXNdLCB0aGlzW2tEaXNwYXRjaEtleV0sIGRpc3BhdGNoRGF0YSlcbiAgICByZXR1cm4gbmV3IE1vY2tTY29wZShuZXdNb2NrRGlzcGF0Y2gpXG4gIH1cblxuICAvKipcbiAgICogTW9jayBhbiB1bmRpY2kgcmVxdWVzdCB3aXRoIGEgZGVmaW5lZCBlcnJvci5cbiAgICovXG4gIHJlcGx5V2l0aEVycm9yIChlcnJvcikge1xuICAgIGlmICh0eXBlb2YgZXJyb3IgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ2Vycm9yIG11c3QgYmUgZGVmaW5lZCcpXG4gICAgfVxuXG4gICAgY29uc3QgbmV3TW9ja0Rpc3BhdGNoID0gYWRkTW9ja0Rpc3BhdGNoKHRoaXNba0Rpc3BhdGNoZXNdLCB0aGlzW2tEaXNwYXRjaEtleV0sIHsgZXJyb3IgfSlcbiAgICByZXR1cm4gbmV3IE1vY2tTY29wZShuZXdNb2NrRGlzcGF0Y2gpXG4gIH1cblxuICAvKipcbiAgICogU2V0IGRlZmF1bHQgcmVwbHkgaGVhZGVycyBvbiB0aGUgaW50ZXJjZXB0b3IgZm9yIHN1YnNlcXVlbnQgcmVwbGllc1xuICAgKi9cbiAgZGVmYXVsdFJlcGx5SGVhZGVycyAoaGVhZGVycykge1xuICAgIGlmICh0eXBlb2YgaGVhZGVycyA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaGVhZGVycyBtdXN0IGJlIGRlZmluZWQnKVxuICAgIH1cblxuICAgIHRoaXNba0RlZmF1bHRIZWFkZXJzXSA9IGhlYWRlcnNcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgLyoqXG4gICAqIFNldCBkZWZhdWx0IHJlcGx5IHRyYWlsZXJzIG9uIHRoZSBpbnRlcmNlcHRvciBmb3Igc3Vic2VxdWVudCByZXBsaWVzXG4gICAqL1xuICBkZWZhdWx0UmVwbHlUcmFpbGVycyAodHJhaWxlcnMpIHtcbiAgICBpZiAodHlwZW9mIHRyYWlsZXJzID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCd0cmFpbGVycyBtdXN0IGJlIGRlZmluZWQnKVxuICAgIH1cblxuICAgIHRoaXNba0RlZmF1bHRUcmFpbGVyc10gPSB0cmFpbGVyc1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICAvKipcbiAgICogU2V0IHJlcGx5IGNvbnRlbnQgbGVuZ3RoIGhlYWRlciBmb3IgcmVwbGllcyBvbiB0aGUgaW50ZXJjZXB0b3JcbiAgICovXG4gIHJlcGx5Q29udGVudExlbmd0aCAoKSB7XG4gICAgdGhpc1trQ29udGVudExlbmd0aF0gPSB0cnVlXG4gICAgcmV0dXJuIHRoaXNcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cy5Nb2NrSW50ZXJjZXB0b3IgPSBNb2NrSW50ZXJjZXB0b3Jcbm1vZHVsZS5leHBvcnRzLk1vY2tTY29wZSA9IE1vY2tTY29wZVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHByb21pc2lmeSB9ID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCBDbGllbnQgPSByZXF1aXJlKCcuLi9jbGllbnQnKVxuY29uc3QgeyBidWlsZE1vY2tEaXNwYXRjaCB9ID0gcmVxdWlyZSgnLi9tb2NrLXV0aWxzJylcbmNvbnN0IHtcbiAga0Rpc3BhdGNoZXMsXG4gIGtNb2NrQWdlbnQsXG4gIGtDbG9zZSxcbiAga09yaWdpbmFsQ2xvc2UsXG4gIGtPcmlnaW4sXG4gIGtPcmlnaW5hbERpc3BhdGNoLFxuICBrQ29ubmVjdGVkXG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgeyBNb2NrSW50ZXJjZXB0b3IgfSA9IHJlcXVpcmUoJy4vbW9jay1pbnRlcmNlcHRvcicpXG5jb25zdCBTeW1ib2xzID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcblxuLyoqXG4gKiBNb2NrQ2xpZW50IHByb3ZpZGVzIGFuIEFQSSB0aGF0IGV4dGVuZHMgdGhlIENsaWVudCB0byBpbmZsdWVuY2UgdGhlIG1vY2tEaXNwYXRjaGVzLlxuICovXG5jbGFzcyBNb2NrQ2xpZW50IGV4dGVuZHMgQ2xpZW50IHtcbiAgY29uc3RydWN0b3IgKG9yaWdpbiwgb3B0cykge1xuICAgIHN1cGVyKG9yaWdpbiwgb3B0cylcblxuICAgIGlmICghb3B0cyB8fCAhb3B0cy5hZ2VudCB8fCB0eXBlb2Ygb3B0cy5hZ2VudC5kaXNwYXRjaCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdBcmd1bWVudCBvcHRzLmFnZW50IG11c3QgaW1wbGVtZW50IEFnZW50JylcbiAgICB9XG5cbiAgICB0aGlzW2tNb2NrQWdlbnRdID0gb3B0cy5hZ2VudFxuICAgIHRoaXNba09yaWdpbl0gPSBvcmlnaW5cbiAgICB0aGlzW2tEaXNwYXRjaGVzXSA9IFtdXG4gICAgdGhpc1trQ29ubmVjdGVkXSA9IDFcbiAgICB0aGlzW2tPcmlnaW5hbERpc3BhdGNoXSA9IHRoaXMuZGlzcGF0Y2hcbiAgICB0aGlzW2tPcmlnaW5hbENsb3NlXSA9IHRoaXMuY2xvc2UuYmluZCh0aGlzKVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGJ1aWxkTW9ja0Rpc3BhdGNoLmNhbGwodGhpcylcbiAgICB0aGlzLmNsb3NlID0gdGhpc1trQ2xvc2VdXG4gIH1cblxuICBnZXQgW1N5bWJvbHMua0Nvbm5lY3RlZF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tDb25uZWN0ZWRdXG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCB0aGUgYmFzZSBpbnRlcmNlcHRvciBmb3IgbW9ja2luZyByZXBsaWVzIGZyb20gdW5kaWNpLlxuICAgKi9cbiAgaW50ZXJjZXB0IChvcHRzKSB7XG4gICAgcmV0dXJuIG5ldyBNb2NrSW50ZXJjZXB0b3Iob3B0cywgdGhpc1trRGlzcGF0Y2hlc10pXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgYXdhaXQgcHJvbWlzaWZ5KHRoaXNba09yaWdpbmFsQ2xvc2VdKSgpXG4gICAgdGhpc1trQ29ubmVjdGVkXSA9IDBcbiAgICB0aGlzW2tNb2NrQWdlbnRdW1N5bWJvbHMua0NsaWVudHNdLmRlbGV0ZSh0aGlzW2tPcmlnaW5dKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTW9ja0NsaWVudFxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHByb21pc2lmeSB9ID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCBQb29sID0gcmVxdWlyZSgnLi4vcG9vbCcpXG5jb25zdCB7IGJ1aWxkTW9ja0Rpc3BhdGNoIH0gPSByZXF1aXJlKCcuL21vY2stdXRpbHMnKVxuY29uc3Qge1xuICBrRGlzcGF0Y2hlcyxcbiAga01vY2tBZ2VudCxcbiAga0Nsb3NlLFxuICBrT3JpZ2luYWxDbG9zZSxcbiAga09yaWdpbixcbiAga09yaWdpbmFsRGlzcGF0Y2gsXG4gIGtDb25uZWN0ZWRcbn0gPSByZXF1aXJlKCcuL21vY2stc3ltYm9scycpXG5jb25zdCB7IE1vY2tJbnRlcmNlcHRvciB9ID0gcmVxdWlyZSgnLi9tb2NrLWludGVyY2VwdG9yJylcbmNvbnN0IFN5bWJvbHMgPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuXG4vKipcbiAqIE1vY2tQb29sIHByb3ZpZGVzIGFuIEFQSSB0aGF0IGV4dGVuZHMgdGhlIFBvb2wgdG8gaW5mbHVlbmNlIHRoZSBtb2NrRGlzcGF0Y2hlcy5cbiAqL1xuY2xhc3MgTW9ja1Bvb2wgZXh0ZW5kcyBQb29sIHtcbiAgY29uc3RydWN0b3IgKG9yaWdpbiwgb3B0cykge1xuICAgIHN1cGVyKG9yaWdpbiwgb3B0cylcblxuICAgIGlmICghb3B0cyB8fCAhb3B0cy5hZ2VudCB8fCB0eXBlb2Ygb3B0cy5hZ2VudC5kaXNwYXRjaCAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdBcmd1bWVudCBvcHRzLmFnZW50IG11c3QgaW1wbGVtZW50IEFnZW50JylcbiAgICB9XG5cbiAgICB0aGlzW2tNb2NrQWdlbnRdID0gb3B0cy5hZ2VudFxuICAgIHRoaXNba09yaWdpbl0gPSBvcmlnaW5cbiAgICB0aGlzW2tEaXNwYXRjaGVzXSA9IFtdXG4gICAgdGhpc1trQ29ubmVjdGVkXSA9IDFcbiAgICB0aGlzW2tPcmlnaW5hbERpc3BhdGNoXSA9IHRoaXMuZGlzcGF0Y2hcbiAgICB0aGlzW2tPcmlnaW5hbENsb3NlXSA9IHRoaXMuY2xvc2UuYmluZCh0aGlzKVxuXG4gICAgdGhpcy5kaXNwYXRjaCA9IGJ1aWxkTW9ja0Rpc3BhdGNoLmNhbGwodGhpcylcbiAgICB0aGlzLmNsb3NlID0gdGhpc1trQ2xvc2VdXG4gIH1cblxuICBnZXQgW1N5bWJvbHMua0Nvbm5lY3RlZF0gKCkge1xuICAgIHJldHVybiB0aGlzW2tDb25uZWN0ZWRdXG4gIH1cblxuICAvKipcbiAgICogU2V0cyB1cCB0aGUgYmFzZSBpbnRlcmNlcHRvciBmb3IgbW9ja2luZyByZXBsaWVzIGZyb20gdW5kaWNpLlxuICAgKi9cbiAgaW50ZXJjZXB0IChvcHRzKSB7XG4gICAgcmV0dXJuIG5ldyBNb2NrSW50ZXJjZXB0b3Iob3B0cywgdGhpc1trRGlzcGF0Y2hlc10pXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgYXdhaXQgcHJvbWlzaWZ5KHRoaXNba09yaWdpbmFsQ2xvc2VdKSgpXG4gICAgdGhpc1trQ29ubmVjdGVkXSA9IDBcbiAgICB0aGlzW2tNb2NrQWdlbnRdW1N5bWJvbHMua0NsaWVudHNdLmRlbGV0ZSh0aGlzW2tPcmlnaW5dKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTW9ja1Bvb2xcbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qgc2luZ3VsYXJzID0ge1xuICBwcm9ub3VuOiAnaXQnLFxuICBpczogJ2lzJyxcbiAgd2FzOiAnd2FzJyxcbiAgdGhpczogJ3RoaXMnXG59XG5cbmNvbnN0IHBsdXJhbHMgPSB7XG4gIHByb25vdW46ICd0aGV5JyxcbiAgaXM6ICdhcmUnLFxuICB3YXM6ICd3ZXJlJyxcbiAgdGhpczogJ3RoZXNlJ1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIFBsdXJhbGl6ZXIge1xuICBjb25zdHJ1Y3RvciAoc2luZ3VsYXIsIHBsdXJhbCkge1xuICAgIHRoaXMuc2luZ3VsYXIgPSBzaW5ndWxhclxuICAgIHRoaXMucGx1cmFsID0gcGx1cmFsXG4gIH1cblxuICBwbHVyYWxpemUgKGNvdW50KSB7XG4gICAgY29uc3Qgb25lID0gY291bnQgPT09IDFcbiAgICBjb25zdCBrZXlzID0gb25lID8gc2luZ3VsYXJzIDogcGx1cmFsc1xuICAgIGNvbnN0IG5vdW4gPSBvbmUgPyB0aGlzLnNpbmd1bGFyIDogdGhpcy5wbHVyYWxcbiAgICByZXR1cm4geyAuLi5rZXlzLCBjb3VudCwgbm91biB9XG4gIH1cbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBUcmFuc2Zvcm0gfSA9IHJlcXVpcmUoJ3N0cmVhbScpXG5jb25zdCB7IENvbnNvbGUgfSA9IHJlcXVpcmUoJ2NvbnNvbGUnKVxuXG4vKipcbiAqIEdldHMgdGhlIG91dHB1dCBvZiBgY29uc29sZS50YWJsZShcdTIwMjYpYCBhcyBhIHN0cmluZy5cbiAqL1xubW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBQZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyIHtcbiAgY29uc3RydWN0b3IgKHsgZGlzYWJsZUNvbG9ycyB9ID0ge30pIHtcbiAgICB0aGlzLnRyYW5zZm9ybSA9IG5ldyBUcmFuc2Zvcm0oe1xuICAgICAgdHJhbnNmb3JtIChjaHVuaywgX2VuYywgY2IpIHtcbiAgICAgICAgY2IobnVsbCwgY2h1bmspXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMubG9nZ2VyID0gbmV3IENvbnNvbGUoe1xuICAgICAgc3Rkb3V0OiB0aGlzLnRyYW5zZm9ybSxcbiAgICAgIGluc3BlY3RPcHRpb25zOiB7XG4gICAgICAgIGNvbG9yczogIWRpc2FibGVDb2xvcnMgJiYgIXByb2Nlc3MuZW52LkNJXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIGZvcm1hdCAocGVuZGluZ0ludGVyY2VwdG9ycykge1xuICAgIGNvbnN0IHdpdGhQcmV0dHlIZWFkZXJzID0gcGVuZGluZ0ludGVyY2VwdG9ycy5tYXAoXG4gICAgICAoeyBtZXRob2QsIHBhdGgsIGRhdGE6IHsgc3RhdHVzQ29kZSB9LCBwZXJzaXN0LCB0aW1lcywgdGltZXNJbnZva2VkLCBvcmlnaW4gfSkgPT4gKHtcbiAgICAgICAgTWV0aG9kOiBtZXRob2QsXG4gICAgICAgIE9yaWdpbjogb3JpZ2luLFxuICAgICAgICBQYXRoOiBwYXRoLFxuICAgICAgICAnU3RhdHVzIGNvZGUnOiBzdGF0dXNDb2RlLFxuICAgICAgICBQZXJzaXN0ZW50OiBwZXJzaXN0ID8gJ1x1MjcwNScgOiAnXHUyNzRDJyxcbiAgICAgICAgSW52b2NhdGlvbnM6IHRpbWVzSW52b2tlZCxcbiAgICAgICAgUmVtYWluaW5nOiBwZXJzaXN0ID8gSW5maW5pdHkgOiB0aW1lcyAtIHRpbWVzSW52b2tlZFxuICAgICAgfSkpXG5cbiAgICB0aGlzLmxvZ2dlci50YWJsZSh3aXRoUHJldHR5SGVhZGVycylcbiAgICByZXR1cm4gdGhpcy50cmFuc2Zvcm0ucmVhZCgpLnRvU3RyaW5nKClcbiAgfVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtDbGllbnRzIH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuLi9hZ2VudCcpXG5jb25zdCB7XG4gIGtBZ2VudCxcbiAga01vY2tBZ2VudFNldCxcbiAga01vY2tBZ2VudEdldCxcbiAga0Rpc3BhdGNoZXMsXG4gIGtJc01vY2tBY3RpdmUsXG4gIGtOZXRDb25uZWN0LFxuICBrR2V0TmV0Q29ubmVjdCxcbiAga09wdGlvbnMsXG4gIGtGYWN0b3J5XG59ID0gcmVxdWlyZSgnLi9tb2NrLXN5bWJvbHMnKVxuY29uc3QgTW9ja0NsaWVudCA9IHJlcXVpcmUoJy4vbW9jay1jbGllbnQnKVxuY29uc3QgTW9ja1Bvb2wgPSByZXF1aXJlKCcuL21vY2stcG9vbCcpXG5jb25zdCB7IG1hdGNoVmFsdWUsIGJ1aWxkTW9ja09wdGlvbnMgfSA9IHJlcXVpcmUoJy4vbW9jay11dGlscycpXG5jb25zdCB7IEludmFsaWRBcmd1bWVudEVycm9yLCBVbmRpY2lFcnJvciB9ID0gcmVxdWlyZSgnLi4vY29yZS9lcnJvcnMnKVxuY29uc3QgRGlzcGF0Y2hlciA9IHJlcXVpcmUoJy4uL2Rpc3BhdGNoZXInKVxuY29uc3QgUGx1cmFsaXplciA9IHJlcXVpcmUoJy4vcGx1cmFsaXplcicpXG5jb25zdCBQZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyID0gcmVxdWlyZSgnLi9wZW5kaW5nLWludGVyY2VwdG9ycy1mb3JtYXR0ZXInKVxuXG5jbGFzcyBGYWtlV2Vha1JlZiB7XG4gIGNvbnN0cnVjdG9yICh2YWx1ZSkge1xuICAgIHRoaXMudmFsdWUgPSB2YWx1ZVxuICB9XG5cbiAgZGVyZWYgKCkge1xuICAgIHJldHVybiB0aGlzLnZhbHVlXG4gIH1cbn1cblxuY2xhc3MgTW9ja0FnZW50IGV4dGVuZHMgRGlzcGF0Y2hlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzKSB7XG4gICAgc3VwZXIob3B0cylcblxuICAgIHRoaXNba05ldENvbm5lY3RdID0gdHJ1ZVxuICAgIHRoaXNba0lzTW9ja0FjdGl2ZV0gPSB0cnVlXG5cbiAgICAvLyBJbnN0YW50aWF0ZSBBZ2VudCBhbmQgZW5jYXBzdWxhdGVcbiAgICBpZiAoKG9wdHMgJiYgb3B0cy5hZ2VudCAmJiB0eXBlb2Ygb3B0cy5hZ2VudC5kaXNwYXRjaCAhPT0gJ2Z1bmN0aW9uJykpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignQXJndW1lbnQgb3B0cy5hZ2VudCBtdXN0IGltcGxlbWVudCBBZ2VudCcpXG4gICAgfVxuICAgIGNvbnN0IGFnZW50ID0gb3B0cyAmJiBvcHRzLmFnZW50ID8gb3B0cy5hZ2VudCA6IG5ldyBBZ2VudChvcHRzKVxuICAgIHRoaXNba0FnZW50XSA9IGFnZW50XG5cbiAgICB0aGlzW2tDbGllbnRzXSA9IGFnZW50W2tDbGllbnRzXVxuICAgIHRoaXNba09wdGlvbnNdID0gYnVpbGRNb2NrT3B0aW9ucyhvcHRzKVxuICB9XG5cbiAgZ2V0IChvcmlnaW4pIHtcbiAgICBsZXQgZGlzcGF0Y2hlciA9IHRoaXNba01vY2tBZ2VudEdldF0ob3JpZ2luKVxuXG4gICAgaWYgKCFkaXNwYXRjaGVyKSB7XG4gICAgICBkaXNwYXRjaGVyID0gdGhpc1trRmFjdG9yeV0ob3JpZ2luKVxuICAgICAgdGhpc1trTW9ja0FnZW50U2V0XShvcmlnaW4sIGRpc3BhdGNoZXIpXG4gICAgfVxuICAgIHJldHVybiBkaXNwYXRjaGVyXG4gIH1cblxuICBkaXNwYXRjaCAob3B0cywgaGFuZGxlcikge1xuICAgIC8vIENhbGwgTW9ja0FnZW50LmdldCB0byBwZXJmb3JtIGFkZGl0aW9uYWwgc2V0dXAgYmVmb3JlIGRpc3BhdGNoaW5nIGFzIG5vcm1hbFxuICAgIHRoaXMuZ2V0KG9wdHMub3JpZ2luKVxuICAgIHJldHVybiB0aGlzW2tBZ2VudF0uZGlzcGF0Y2gob3B0cywgaGFuZGxlcilcbiAgfVxuXG4gIGFzeW5jIGNsb3NlICgpIHtcbiAgICBhd2FpdCB0aGlzW2tBZ2VudF0uY2xvc2UoKVxuICAgIHRoaXNba0NsaWVudHNdLmNsZWFyKClcbiAgfVxuXG4gIGRlYWN0aXZhdGUgKCkge1xuICAgIHRoaXNba0lzTW9ja0FjdGl2ZV0gPSBmYWxzZVxuICB9XG5cbiAgYWN0aXZhdGUgKCkge1xuICAgIHRoaXNba0lzTW9ja0FjdGl2ZV0gPSB0cnVlXG4gIH1cblxuICBlbmFibGVOZXRDb25uZWN0IChtYXRjaGVyKSB7XG4gICAgaWYgKHR5cGVvZiBtYXRjaGVyID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgbWF0Y2hlciA9PT0gJ2Z1bmN0aW9uJyB8fCBtYXRjaGVyIGluc3RhbmNlb2YgUmVnRXhwKSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheSh0aGlzW2tOZXRDb25uZWN0XSkpIHtcbiAgICAgICAgdGhpc1trTmV0Q29ubmVjdF0ucHVzaChtYXRjaGVyKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpc1trTmV0Q29ubmVjdF0gPSBbbWF0Y2hlcl1cbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBtYXRjaGVyID09PSAndW5kZWZpbmVkJykge1xuICAgICAgdGhpc1trTmV0Q29ubmVjdF0gPSB0cnVlXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignVW5zdXBwb3J0ZWQgbWF0Y2hlci4gTXVzdCBiZSBvbmUgb2YgU3RyaW5nfEZ1bmN0aW9ufFJlZ0V4cC4nKVxuICAgIH1cbiAgfVxuXG4gIGRpc2FibGVOZXRDb25uZWN0ICgpIHtcbiAgICB0aGlzW2tOZXRDb25uZWN0XSA9IGZhbHNlXG4gIH1cblxuICAvLyBUaGlzIGlzIHJlcXVpcmVkIHRvIGJ5cGFzcyBpc3N1ZXMgY2F1c2VkIGJ5IHVzaW5nIGdsb2JhbCBzeW1ib2xzIC0gc2VlOlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTQ0N1xuICBnZXQgaXNNb2NrQWN0aXZlICgpIHtcbiAgICByZXR1cm4gdGhpc1trSXNNb2NrQWN0aXZlXVxuICB9XG5cbiAgW2tNb2NrQWdlbnRTZXRdIChvcmlnaW4sIGRpc3BhdGNoZXIpIHtcbiAgICB0aGlzW2tDbGllbnRzXS5zZXQob3JpZ2luLCBuZXcgRmFrZVdlYWtSZWYoZGlzcGF0Y2hlcikpXG4gIH1cblxuICBba0ZhY3RvcnldIChvcmlnaW4pIHtcbiAgICBjb25zdCBtb2NrT3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oeyBhZ2VudDogdGhpcyB9LCB0aGlzW2tPcHRpb25zXSlcbiAgICByZXR1cm4gdGhpc1trT3B0aW9uc10gJiYgdGhpc1trT3B0aW9uc10uY29ubmVjdGlvbnMgPT09IDFcbiAgICAgID8gbmV3IE1vY2tDbGllbnQob3JpZ2luLCBtb2NrT3B0aW9ucylcbiAgICAgIDogbmV3IE1vY2tQb29sKG9yaWdpbiwgbW9ja09wdGlvbnMpXG4gIH1cblxuICBba01vY2tBZ2VudEdldF0gKG9yaWdpbikge1xuICAgIC8vIEZpcnN0IGNoZWNrIGlmIHdlIGNhbiBpbW1lZGlhdGVseSBmaW5kIGl0XG4gICAgY29uc3QgcmVmID0gdGhpc1trQ2xpZW50c10uZ2V0KG9yaWdpbilcbiAgICBpZiAocmVmKSB7XG4gICAgICByZXR1cm4gcmVmLmRlcmVmKClcbiAgICB9XG5cbiAgICAvLyBJZiB0aGUgb3JpZ2luIGlzIG5vdCBhIHN0cmluZyBjcmVhdGUgYSBkdW1teSBwYXJlbnQgcG9vbCBhbmQgcmV0dXJuIHRvIHVzZXJcbiAgICBpZiAodHlwZW9mIG9yaWdpbiAhPT0gJ3N0cmluZycpIHtcbiAgICAgIGNvbnN0IGRpc3BhdGNoZXIgPSB0aGlzW2tGYWN0b3J5XSgnaHR0cDovL2xvY2FsaG9zdDo5OTk5JylcbiAgICAgIHRoaXNba01vY2tBZ2VudFNldF0ob3JpZ2luLCBkaXNwYXRjaGVyKVxuICAgICAgcmV0dXJuIGRpc3BhdGNoZXJcbiAgICB9XG5cbiAgICAvLyBJZiB3ZSBtYXRjaCwgY3JlYXRlIGEgcG9vbCBhbmQgYXNzaWduIHRoZSBzYW1lIGRpc3BhdGNoZXNcbiAgICBmb3IgKGNvbnN0IFtrZXlNYXRjaGVyLCBub25FeHBsaWNpdFJlZl0gb2YgQXJyYXkuZnJvbSh0aGlzW2tDbGllbnRzXSkpIHtcbiAgICAgIGNvbnN0IG5vbkV4cGxpY2l0RGlzcGF0Y2hlciA9IG5vbkV4cGxpY2l0UmVmLmRlcmVmKClcbiAgICAgIGlmIChub25FeHBsaWNpdERpc3BhdGNoZXIgJiYgdHlwZW9mIGtleU1hdGNoZXIgIT09ICdzdHJpbmcnICYmIG1hdGNoVmFsdWUoa2V5TWF0Y2hlciwgb3JpZ2luKSkge1xuICAgICAgICBjb25zdCBkaXNwYXRjaGVyID0gdGhpc1trRmFjdG9yeV0ob3JpZ2luKVxuICAgICAgICB0aGlzW2tNb2NrQWdlbnRTZXRdKG9yaWdpbiwgZGlzcGF0Y2hlcilcbiAgICAgICAgZGlzcGF0Y2hlcltrRGlzcGF0Y2hlc10gPSBub25FeHBsaWNpdERpc3BhdGNoZXJba0Rpc3BhdGNoZXNdXG4gICAgICAgIHJldHVybiBkaXNwYXRjaGVyXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgW2tHZXROZXRDb25uZWN0XSAoKSB7XG4gICAgcmV0dXJuIHRoaXNba05ldENvbm5lY3RdXG4gIH1cblxuICBwZW5kaW5nSW50ZXJjZXB0b3JzICgpIHtcbiAgICBjb25zdCBtb2NrQWdlbnRDbGllbnRzID0gdGhpc1trQ2xpZW50c11cblxuICAgIHJldHVybiBBcnJheS5mcm9tKG1vY2tBZ2VudENsaWVudHMuZW50cmllcygpKVxuICAgICAgLmZsYXRNYXAoKFtvcmlnaW4sIHNjb3BlXSkgPT4gc2NvcGUuZGVyZWYoKVtrRGlzcGF0Y2hlc10ubWFwKGRpc3BhdGNoID0+ICh7IC4uLmRpc3BhdGNoLCBvcmlnaW4gfSkpKVxuICAgICAgLmZpbHRlcigoeyBwZW5kaW5nIH0pID0+IHBlbmRpbmcpXG4gIH1cblxuICBhc3NlcnROb1BlbmRpbmdJbnRlcmNlcHRvcnMgKHsgcGVuZGluZ0ludGVyY2VwdG9yc0Zvcm1hdHRlciA9IG5ldyBQZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyKCkgfSA9IHt9KSB7XG4gICAgY29uc3QgcGVuZGluZyA9IHRoaXMucGVuZGluZ0ludGVyY2VwdG9ycygpXG5cbiAgICBpZiAocGVuZGluZy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHBsdXJhbGl6ZXIgPSBuZXcgUGx1cmFsaXplcignaW50ZXJjZXB0b3InLCAnaW50ZXJjZXB0b3JzJykucGx1cmFsaXplKHBlbmRpbmcubGVuZ3RoKVxuXG4gICAgdGhyb3cgbmV3IFVuZGljaUVycm9yKGBcbiR7cGx1cmFsaXplci5jb3VudH0gJHtwbHVyYWxpemVyLm5vdW59ICR7cGx1cmFsaXplci5pc30gcGVuZGluZzpcblxuJHtwZW5kaW5nSW50ZXJjZXB0b3JzRm9ybWF0dGVyLmZvcm1hdChwZW5kaW5nKX1cbmAudHJpbSgpKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gTW9ja0FnZW50XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsga1Byb3h5LCBrQ2xvc2UsIGtEZXN0cm95LCBrSW50ZXJjZXB0b3JzIH0gPSByZXF1aXJlKCcuL2NvcmUvc3ltYm9scycpXG5jb25zdCB7IFVSTCB9ID0gcmVxdWlyZSgndXJsJylcbmNvbnN0IEFnZW50ID0gcmVxdWlyZSgnLi9hZ2VudCcpXG5jb25zdCBQb29sID0gcmVxdWlyZSgnLi9wb29sJylcbmNvbnN0IERpc3BhdGNoZXJCYXNlID0gcmVxdWlyZSgnLi9kaXNwYXRjaGVyLWJhc2UnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciwgUmVxdWVzdEFib3J0ZWRFcnJvciB9ID0gcmVxdWlyZSgnLi9jb3JlL2Vycm9ycycpXG5jb25zdCBidWlsZENvbm5lY3RvciA9IHJlcXVpcmUoJy4vY29yZS9jb25uZWN0JylcblxuY29uc3Qga0FnZW50ID0gU3ltYm9sKCdwcm94eSBhZ2VudCcpXG5jb25zdCBrQ2xpZW50ID0gU3ltYm9sKCdwcm94eSBjbGllbnQnKVxuY29uc3Qga1Byb3h5SGVhZGVycyA9IFN5bWJvbCgncHJveHkgaGVhZGVycycpXG5jb25zdCBrUmVxdWVzdFRscyA9IFN5bWJvbCgncmVxdWVzdCB0bHMgc2V0dGluZ3MnKVxuY29uc3Qga1Byb3h5VGxzID0gU3ltYm9sKCdwcm94eSB0bHMgc2V0dGluZ3MnKVxuY29uc3Qga0Nvbm5lY3RFbmRwb2ludCA9IFN5bWJvbCgnY29ubmVjdCBlbmRwb2ludCBmdW5jdGlvbicpXG5cbmZ1bmN0aW9uIGRlZmF1bHRQcm90b2NvbFBvcnQgKHByb3RvY29sKSB7XG4gIHJldHVybiBwcm90b2NvbCA9PT0gJ2h0dHBzOicgPyA0NDMgOiA4MFxufVxuXG5mdW5jdGlvbiBidWlsZFByb3h5T3B0aW9ucyAob3B0cykge1xuICBpZiAodHlwZW9mIG9wdHMgPT09ICdzdHJpbmcnKSB7XG4gICAgb3B0cyA9IHsgdXJpOiBvcHRzIH1cbiAgfVxuXG4gIGlmICghb3B0cyB8fCAhb3B0cy51cmkpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Byb3h5IG9wdHMudXJpIGlzIG1hbmRhdG9yeScpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIHVyaTogb3B0cy51cmksXG4gICAgcHJvdG9jb2w6IG9wdHMucHJvdG9jb2wgfHwgJ2h0dHBzJ1xuICB9XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRGYWN0b3J5IChvcmlnaW4sIG9wdHMpIHtcbiAgcmV0dXJuIG5ldyBQb29sKG9yaWdpbiwgb3B0cylcbn1cblxuY2xhc3MgUHJveHlBZ2VudCBleHRlbmRzIERpc3BhdGNoZXJCYXNlIHtcbiAgY29uc3RydWN0b3IgKG9wdHMpIHtcbiAgICBzdXBlcihvcHRzKVxuICAgIHRoaXNba1Byb3h5XSA9IGJ1aWxkUHJveHlPcHRpb25zKG9wdHMpXG4gICAgdGhpc1trQWdlbnRdID0gbmV3IEFnZW50KG9wdHMpXG4gICAgdGhpc1trSW50ZXJjZXB0b3JzXSA9IG9wdHMuaW50ZXJjZXB0b3JzICYmIG9wdHMuaW50ZXJjZXB0b3JzLlByb3h5QWdlbnQgJiYgQXJyYXkuaXNBcnJheShvcHRzLmludGVyY2VwdG9ycy5Qcm94eUFnZW50KVxuICAgICAgPyBvcHRzLmludGVyY2VwdG9ycy5Qcm94eUFnZW50XG4gICAgICA6IFtdXG5cbiAgICBpZiAodHlwZW9mIG9wdHMgPT09ICdzdHJpbmcnKSB7XG4gICAgICBvcHRzID0geyB1cmk6IG9wdHMgfVxuICAgIH1cblxuICAgIGlmICghb3B0cyB8fCAhb3B0cy51cmkpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignUHJveHkgb3B0cy51cmkgaXMgbWFuZGF0b3J5JylcbiAgICB9XG5cbiAgICBjb25zdCB7IGNsaWVudEZhY3RvcnkgPSBkZWZhdWx0RmFjdG9yeSB9ID0gb3B0c1xuXG4gICAgaWYgKHR5cGVvZiBjbGllbnRGYWN0b3J5ICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ1Byb3h5IG9wdHMuY2xpZW50RmFjdG9yeSBtdXN0IGJlIGEgZnVuY3Rpb24uJylcbiAgICB9XG5cbiAgICB0aGlzW2tSZXF1ZXN0VGxzXSA9IG9wdHMucmVxdWVzdFRsc1xuICAgIHRoaXNba1Byb3h5VGxzXSA9IG9wdHMucHJveHlUbHNcbiAgICB0aGlzW2tQcm94eUhlYWRlcnNdID0gb3B0cy5oZWFkZXJzIHx8IHt9XG5cbiAgICBjb25zdCByZXNvbHZlZFVybCA9IG5ldyBVUkwob3B0cy51cmkpXG4gICAgY29uc3QgeyBvcmlnaW4sIHBvcnQsIGhvc3QsIHVzZXJuYW1lLCBwYXNzd29yZCB9ID0gcmVzb2x2ZWRVcmxcblxuICAgIGlmIChvcHRzLmF1dGggJiYgb3B0cy50b2tlbikge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdvcHRzLmF1dGggY2Fubm90IGJlIHVzZWQgaW4gY29tYmluYXRpb24gd2l0aCBvcHRzLnRva2VuJylcbiAgICB9IGVsc2UgaWYgKG9wdHMuYXV0aCkge1xuICAgICAgLyogQGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mIG9wdHMudG9rZW4gKi9cbiAgICAgIHRoaXNba1Byb3h5SGVhZGVyc11bJ3Byb3h5LWF1dGhvcml6YXRpb24nXSA9IGBCYXNpYyAke29wdHMuYXV0aH1gXG4gICAgfSBlbHNlIGlmIChvcHRzLnRva2VuKSB7XG4gICAgICB0aGlzW2tQcm94eUhlYWRlcnNdWydwcm94eS1hdXRob3JpemF0aW9uJ10gPSBvcHRzLnRva2VuXG4gICAgfSBlbHNlIGlmICh1c2VybmFtZSAmJiBwYXNzd29yZCkge1xuICAgICAgdGhpc1trUHJveHlIZWFkZXJzXVsncHJveHktYXV0aG9yaXphdGlvbiddID0gYEJhc2ljICR7QnVmZmVyLmZyb20oYCR7ZGVjb2RlVVJJQ29tcG9uZW50KHVzZXJuYW1lKX06JHtkZWNvZGVVUklDb21wb25lbnQocGFzc3dvcmQpfWApLnRvU3RyaW5nKCdiYXNlNjQnKX1gXG4gICAgfVxuXG4gICAgY29uc3QgY29ubmVjdCA9IGJ1aWxkQ29ubmVjdG9yKHsgLi4ub3B0cy5wcm94eVRscyB9KVxuICAgIHRoaXNba0Nvbm5lY3RFbmRwb2ludF0gPSBidWlsZENvbm5lY3Rvcih7IC4uLm9wdHMucmVxdWVzdFRscyB9KVxuICAgIHRoaXNba0NsaWVudF0gPSBjbGllbnRGYWN0b3J5KHJlc29sdmVkVXJsLCB7IGNvbm5lY3QgfSlcbiAgICB0aGlzW2tBZ2VudF0gPSBuZXcgQWdlbnQoe1xuICAgICAgLi4ub3B0cyxcbiAgICAgIGNvbm5lY3Q6IGFzeW5jIChvcHRzLCBjYWxsYmFjaykgPT4ge1xuICAgICAgICBsZXQgcmVxdWVzdGVkSG9zdCA9IG9wdHMuaG9zdFxuICAgICAgICBpZiAoIW9wdHMucG9ydCkge1xuICAgICAgICAgIHJlcXVlc3RlZEhvc3QgKz0gYDoke2RlZmF1bHRQcm90b2NvbFBvcnQob3B0cy5wcm90b2NvbCl9YFxuICAgICAgICB9XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgeyBzb2NrZXQsIHN0YXR1c0NvZGUgfSA9IGF3YWl0IHRoaXNba0NsaWVudF0uY29ubmVjdCh7XG4gICAgICAgICAgICBvcmlnaW4sXG4gICAgICAgICAgICBwb3J0LFxuICAgICAgICAgICAgcGF0aDogcmVxdWVzdGVkSG9zdCxcbiAgICAgICAgICAgIHNpZ25hbDogb3B0cy5zaWduYWwsXG4gICAgICAgICAgICBoZWFkZXJzOiB7XG4gICAgICAgICAgICAgIC4uLnRoaXNba1Byb3h5SGVhZGVyc10sXG4gICAgICAgICAgICAgIGhvc3RcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICAgIGlmIChzdGF0dXNDb2RlICE9PSAyMDApIHtcbiAgICAgICAgICAgIHNvY2tldC5vbignZXJyb3InLCAoKSA9PiB7fSkuZGVzdHJveSgpXG4gICAgICAgICAgICBjYWxsYmFjayhuZXcgUmVxdWVzdEFib3J0ZWRFcnJvcihgUHJveHkgcmVzcG9uc2UgKCR7c3RhdHVzQ29kZX0pICE9PSAyMDAgd2hlbiBIVFRQIFR1bm5lbGluZ2ApKVxuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob3B0cy5wcm90b2NvbCAhPT0gJ2h0dHBzOicpIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKG51bGwsIHNvY2tldClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgICBsZXQgc2VydmVybmFtZVxuICAgICAgICAgIGlmICh0aGlzW2tSZXF1ZXN0VGxzXSkge1xuICAgICAgICAgICAgc2VydmVybmFtZSA9IHRoaXNba1JlcXVlc3RUbHNdLnNlcnZlcm5hbWVcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc2VydmVybmFtZSA9IG9wdHMuc2VydmVybmFtZVxuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzW2tDb25uZWN0RW5kcG9pbnRdKHsgLi4ub3B0cywgc2VydmVybmFtZSwgaHR0cFNvY2tldDogc29ja2V0IH0sIGNhbGxiYWNrKVxuICAgICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgICBjYWxsYmFjayhlcnIpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgZGlzcGF0Y2ggKG9wdHMsIGhhbmRsZXIpIHtcbiAgICBjb25zdCB7IGhvc3QgfSA9IG5ldyBVUkwob3B0cy5vcmlnaW4pXG4gICAgY29uc3QgaGVhZGVycyA9IGJ1aWxkSGVhZGVycyhvcHRzLmhlYWRlcnMpXG4gICAgdGhyb3dJZlByb3h5QXV0aElzU2VudChoZWFkZXJzKVxuICAgIHJldHVybiB0aGlzW2tBZ2VudF0uZGlzcGF0Y2goXG4gICAgICB7XG4gICAgICAgIC4uLm9wdHMsXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAuLi5oZWFkZXJzLFxuICAgICAgICAgIGhvc3RcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGhhbmRsZXJcbiAgICApXG4gIH1cblxuICBhc3luYyBba0Nsb3NlXSAoKSB7XG4gICAgYXdhaXQgdGhpc1trQWdlbnRdLmNsb3NlKClcbiAgICBhd2FpdCB0aGlzW2tDbGllbnRdLmNsb3NlKClcbiAgfVxuXG4gIGFzeW5jIFtrRGVzdHJveV0gKCkge1xuICAgIGF3YWl0IHRoaXNba0FnZW50XS5kZXN0cm95KClcbiAgICBhd2FpdCB0aGlzW2tDbGllbnRdLmRlc3Ryb3koKVxuICB9XG59XG5cbi8qKlxuICogQHBhcmFtIHtzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz59IGhlYWRlcnNcbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fVxuICovXG5mdW5jdGlvbiBidWlsZEhlYWRlcnMgKGhlYWRlcnMpIHtcbiAgLy8gV2hlbiB1c2luZyB1bmRpY2kuZmV0Y2gsIHRoZSBoZWFkZXJzIGxpc3QgaXMgc3RvcmVkXG4gIC8vIGFzIGFuIGFycmF5LlxuICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzKSkge1xuICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgc3RyaW5nPn0gKi9cbiAgICBjb25zdCBoZWFkZXJzUGFpciA9IHt9XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGhlYWRlcnMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICAgIGhlYWRlcnNQYWlyW2hlYWRlcnNbaV1dID0gaGVhZGVyc1tpICsgMV1cbiAgICB9XG5cbiAgICByZXR1cm4gaGVhZGVyc1BhaXJcbiAgfVxuXG4gIHJldHVybiBoZWFkZXJzXG59XG5cbi8qKlxuICogQHBhcmFtIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fSBoZWFkZXJzXG4gKlxuICogUHJldmlvdXMgdmVyc2lvbnMgb2YgUHJveHlBZ2VudCBzdWdnZXN0cyB0aGUgUHJveHktQXV0aG9yaXphdGlvbiBpbiByZXF1ZXN0IGhlYWRlcnNcbiAqIE5ldmVydGhlbGVzcywgaXQgd2FzIGNoYW5nZWQgYW5kIHRvIGF2b2lkIGEgc2VjdXJpdHkgdnVsbmVyYWJpbGl0eSBieSBlbmQgdXNlcnNcbiAqIHRoaXMgY2hlY2sgd2FzIGNyZWF0ZWQuXG4gKiBJdCBzaG91bGQgYmUgcmVtb3ZlZCBpbiB0aGUgbmV4dCBtYWpvciB2ZXJzaW9uIGZvciBwZXJmb3JtYW5jZSByZWFzb25zXG4gKi9cbmZ1bmN0aW9uIHRocm93SWZQcm94eUF1dGhJc1NlbnQgKGhlYWRlcnMpIHtcbiAgY29uc3QgZXhpc3RQcm94eUF1dGggPSBoZWFkZXJzICYmIE9iamVjdC5rZXlzKGhlYWRlcnMpXG4gICAgLmZpbmQoKGtleSkgPT4ga2V5LnRvTG93ZXJDYXNlKCkgPT09ICdwcm94eS1hdXRob3JpemF0aW9uJylcbiAgaWYgKGV4aXN0UHJveHlBdXRoKSB7XG4gICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdQcm94eS1BdXRob3JpemF0aW9uIHNob3VsZCBiZSBzZW50IGluIFByb3h5QWdlbnQgY29uc3RydWN0b3InKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gUHJveHlBZ2VudFxuIiwgImNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbmNvbnN0IHsga1JldHJ5SGFuZGxlckRlZmF1bHRSZXRyeSB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsgUmVxdWVzdFJldHJ5RXJyb3IgfSA9IHJlcXVpcmUoJy4uL2NvcmUvZXJyb3JzJylcbmNvbnN0IHsgaXNEaXN0dXJiZWQsIHBhcnNlSGVhZGVycywgcGFyc2VSYW5nZUhlYWRlciB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuZnVuY3Rpb24gY2FsY3VsYXRlUmV0cnlBZnRlckhlYWRlciAocmV0cnlBZnRlcikge1xuICBjb25zdCBjdXJyZW50ID0gRGF0ZS5ub3coKVxuICBjb25zdCBkaWZmID0gbmV3IERhdGUocmV0cnlBZnRlcikuZ2V0VGltZSgpIC0gY3VycmVudFxuXG4gIHJldHVybiBkaWZmXG59XG5cbmNsYXNzIFJldHJ5SGFuZGxlciB7XG4gIGNvbnN0cnVjdG9yIChvcHRzLCBoYW5kbGVycykge1xuICAgIGNvbnN0IHsgcmV0cnlPcHRpb25zLCAuLi5kaXNwYXRjaE9wdHMgfSA9IG9wdHNcbiAgICBjb25zdCB7XG4gICAgICAvLyBSZXRyeSBzY29wZWRcbiAgICAgIHJldHJ5OiByZXRyeUZuLFxuICAgICAgbWF4UmV0cmllcyxcbiAgICAgIG1heFRpbWVvdXQsXG4gICAgICBtaW5UaW1lb3V0LFxuICAgICAgdGltZW91dEZhY3RvcixcbiAgICAgIC8vIFJlc3BvbnNlIHNjb3BlZFxuICAgICAgbWV0aG9kcyxcbiAgICAgIGVycm9yQ29kZXMsXG4gICAgICByZXRyeUFmdGVyLFxuICAgICAgc3RhdHVzQ29kZXNcbiAgICB9ID0gcmV0cnlPcHRpb25zID8/IHt9XG5cbiAgICB0aGlzLmRpc3BhdGNoID0gaGFuZGxlcnMuZGlzcGF0Y2hcbiAgICB0aGlzLmhhbmRsZXIgPSBoYW5kbGVycy5oYW5kbGVyXG4gICAgdGhpcy5vcHRzID0gZGlzcGF0Y2hPcHRzXG4gICAgdGhpcy5hYm9ydCA9IG51bGxcbiAgICB0aGlzLmFib3J0ZWQgPSBmYWxzZVxuICAgIHRoaXMucmV0cnlPcHRzID0ge1xuICAgICAgcmV0cnk6IHJldHJ5Rm4gPz8gUmV0cnlIYW5kbGVyW2tSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnldLFxuICAgICAgcmV0cnlBZnRlcjogcmV0cnlBZnRlciA/PyB0cnVlLFxuICAgICAgbWF4VGltZW91dDogbWF4VGltZW91dCA/PyAzMCAqIDEwMDAsIC8vIDMwcyxcbiAgICAgIHRpbWVvdXQ6IG1pblRpbWVvdXQgPz8gNTAwLCAvLyAuNXNcbiAgICAgIHRpbWVvdXRGYWN0b3I6IHRpbWVvdXRGYWN0b3IgPz8gMixcbiAgICAgIG1heFJldHJpZXM6IG1heFJldHJpZXMgPz8gNSxcbiAgICAgIC8vIFdoYXQgZXJyb3JzIHdlIHNob3VsZCByZXRyeVxuICAgICAgbWV0aG9kczogbWV0aG9kcyA/PyBbJ0dFVCcsICdIRUFEJywgJ09QVElPTlMnLCAnUFVUJywgJ0RFTEVURScsICdUUkFDRSddLFxuICAgICAgLy8gSW5kaWNhdGVzIHdoaWNoIGVycm9ycyB0byByZXRyeVxuICAgICAgc3RhdHVzQ29kZXM6IHN0YXR1c0NvZGVzID8/IFs1MDAsIDUwMiwgNTAzLCA1MDQsIDQyOV0sXG4gICAgICAvLyBMaXN0IG9mIGVycm9ycyB0byByZXRyeVxuICAgICAgZXJyb3JDb2RlczogZXJyb3JDb2RlcyA/PyBbXG4gICAgICAgICdFQ09OTlJFU0VUJyxcbiAgICAgICAgJ0VDT05OUkVGVVNFRCcsXG4gICAgICAgICdFTk9URk9VTkQnLFxuICAgICAgICAnRU5FVERPV04nLFxuICAgICAgICAnRU5FVFVOUkVBQ0gnLFxuICAgICAgICAnRUhPU1RET1dOJyxcbiAgICAgICAgJ0VIT1NUVU5SRUFDSCcsXG4gICAgICAgICdFUElQRSdcbiAgICAgIF1cbiAgICB9XG5cbiAgICB0aGlzLnJldHJ5Q291bnQgPSAwXG4gICAgdGhpcy5zdGFydCA9IDBcbiAgICB0aGlzLmVuZCA9IG51bGxcbiAgICB0aGlzLmV0YWcgPSBudWxsXG4gICAgdGhpcy5yZXN1bWUgPSBudWxsXG5cbiAgICAvLyBIYW5kbGUgcG9zc2libGUgb25Db25uZWN0IGR1cGxpY2F0aW9uXG4gICAgdGhpcy5oYW5kbGVyLm9uQ29ubmVjdChyZWFzb24gPT4ge1xuICAgICAgdGhpcy5hYm9ydGVkID0gdHJ1ZVxuICAgICAgaWYgKHRoaXMuYWJvcnQpIHtcbiAgICAgICAgdGhpcy5hYm9ydChyZWFzb24pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlYXNvbiA9IHJlYXNvblxuICAgICAgfVxuICAgIH0pXG4gIH1cblxuICBvblJlcXVlc3RTZW50ICgpIHtcbiAgICBpZiAodGhpcy5oYW5kbGVyLm9uUmVxdWVzdFNlbnQpIHtcbiAgICAgIHRoaXMuaGFuZGxlci5vblJlcXVlc3RTZW50KClcbiAgICB9XG4gIH1cblxuICBvblVwZ3JhZGUgKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldCkge1xuICAgIGlmICh0aGlzLmhhbmRsZXIub25VcGdyYWRlKSB7XG4gICAgICB0aGlzLmhhbmRsZXIub25VcGdyYWRlKHN0YXR1c0NvZGUsIGhlYWRlcnMsIHNvY2tldClcbiAgICB9XG4gIH1cblxuICBvbkNvbm5lY3QgKGFib3J0KSB7XG4gICAgaWYgKHRoaXMuYWJvcnRlZCkge1xuICAgICAgYWJvcnQodGhpcy5yZWFzb24pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWJvcnQgPSBhYm9ydFxuICAgIH1cbiAgfVxuXG4gIG9uQm9keVNlbnQgKGNodW5rKSB7XG4gICAgaWYgKHRoaXMuaGFuZGxlci5vbkJvZHlTZW50KSByZXR1cm4gdGhpcy5oYW5kbGVyLm9uQm9keVNlbnQoY2h1bmspXG4gIH1cblxuICBzdGF0aWMgW2tSZXRyeUhhbmRsZXJEZWZhdWx0UmV0cnldIChlcnIsIHsgc3RhdGUsIG9wdHMgfSwgY2IpIHtcbiAgICBjb25zdCB7IHN0YXR1c0NvZGUsIGNvZGUsIGhlYWRlcnMgfSA9IGVyclxuICAgIGNvbnN0IHsgbWV0aG9kLCByZXRyeU9wdGlvbnMgfSA9IG9wdHNcbiAgICBjb25zdCB7XG4gICAgICBtYXhSZXRyaWVzLFxuICAgICAgdGltZW91dCxcbiAgICAgIG1heFRpbWVvdXQsXG4gICAgICB0aW1lb3V0RmFjdG9yLFxuICAgICAgc3RhdHVzQ29kZXMsXG4gICAgICBlcnJvckNvZGVzLFxuICAgICAgbWV0aG9kc1xuICAgIH0gPSByZXRyeU9wdGlvbnNcbiAgICBsZXQgeyBjb3VudGVyLCBjdXJyZW50VGltZW91dCB9ID0gc3RhdGVcblxuICAgIGN1cnJlbnRUaW1lb3V0ID1cbiAgICAgIGN1cnJlbnRUaW1lb3V0ICE9IG51bGwgJiYgY3VycmVudFRpbWVvdXQgPiAwID8gY3VycmVudFRpbWVvdXQgOiB0aW1lb3V0XG5cbiAgICAvLyBBbnkgY29kZSB0aGF0IGlzIG5vdCBhIFVuZGljaSdzIG9yaWdpbmF0ZWQgYW5kIGFsbG93ZWQgdG8gcmV0cnlcbiAgICBpZiAoXG4gICAgICBjb2RlICYmXG4gICAgICBjb2RlICE9PSAnVU5EX0VSUl9SRVFfUkVUUlknICYmXG4gICAgICBjb2RlICE9PSAnVU5EX0VSUl9TT0NLRVQnICYmXG4gICAgICAhZXJyb3JDb2Rlcy5pbmNsdWRlcyhjb2RlKVxuICAgICkge1xuICAgICAgY2IoZXJyKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSWYgYSBzZXQgb2YgbWV0aG9kIGFyZSBwcm92aWRlZCBhbmQgdGhlIGN1cnJlbnQgbWV0aG9kIGlzIG5vdCBpbiB0aGUgbGlzdFxuICAgIGlmIChBcnJheS5pc0FycmF5KG1ldGhvZHMpICYmICFtZXRob2RzLmluY2x1ZGVzKG1ldGhvZCkpIHtcbiAgICAgIGNiKGVycilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIElmIGEgc2V0IG9mIHN0YXR1cyBjb2RlIGFyZSBwcm92aWRlZCBhbmQgdGhlIGN1cnJlbnQgc3RhdHVzIGNvZGUgaXMgbm90IGluIHRoZSBsaXN0XG4gICAgaWYgKFxuICAgICAgc3RhdHVzQ29kZSAhPSBudWxsICYmXG4gICAgICBBcnJheS5pc0FycmF5KHN0YXR1c0NvZGVzKSAmJlxuICAgICAgIXN0YXR1c0NvZGVzLmluY2x1ZGVzKHN0YXR1c0NvZGUpXG4gICAgKSB7XG4gICAgICBjYihlcnIpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJZiB3ZSByZWFjaGVkIHRoZSBtYXggbnVtYmVyIG9mIHJldHJpZXNcbiAgICBpZiAoY291bnRlciA+IG1heFJldHJpZXMpIHtcbiAgICAgIGNiKGVycilcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGxldCByZXRyeUFmdGVySGVhZGVyID0gaGVhZGVycyAhPSBudWxsICYmIGhlYWRlcnNbJ3JldHJ5LWFmdGVyJ11cbiAgICBpZiAocmV0cnlBZnRlckhlYWRlcikge1xuICAgICAgcmV0cnlBZnRlckhlYWRlciA9IE51bWJlcihyZXRyeUFmdGVySGVhZGVyKVxuICAgICAgcmV0cnlBZnRlckhlYWRlciA9IGlzTmFOKHJldHJ5QWZ0ZXJIZWFkZXIpXG4gICAgICAgID8gY2FsY3VsYXRlUmV0cnlBZnRlckhlYWRlcihyZXRyeUFmdGVySGVhZGVyKVxuICAgICAgICA6IHJldHJ5QWZ0ZXJIZWFkZXIgKiAxZTMgLy8gUmV0cnktQWZ0ZXIgaXMgaW4gc2Vjb25kc1xuICAgIH1cblxuICAgIGNvbnN0IHJldHJ5VGltZW91dCA9XG4gICAgICByZXRyeUFmdGVySGVhZGVyID4gMFxuICAgICAgICA/IE1hdGgubWluKHJldHJ5QWZ0ZXJIZWFkZXIsIG1heFRpbWVvdXQpXG4gICAgICAgIDogTWF0aC5taW4oY3VycmVudFRpbWVvdXQgKiB0aW1lb3V0RmFjdG9yICoqIGNvdW50ZXIsIG1heFRpbWVvdXQpXG5cbiAgICBzdGF0ZS5jdXJyZW50VGltZW91dCA9IHJldHJ5VGltZW91dFxuXG4gICAgc2V0VGltZW91dCgoKSA9PiBjYihudWxsKSwgcmV0cnlUaW1lb3V0KVxuICB9XG5cbiAgb25IZWFkZXJzIChzdGF0dXNDb2RlLCByYXdIZWFkZXJzLCByZXN1bWUsIHN0YXR1c01lc3NhZ2UpIHtcbiAgICBjb25zdCBoZWFkZXJzID0gcGFyc2VIZWFkZXJzKHJhd0hlYWRlcnMpXG5cbiAgICB0aGlzLnJldHJ5Q291bnQgKz0gMVxuXG4gICAgaWYgKHN0YXR1c0NvZGUgPj0gMzAwKSB7XG4gICAgICB0aGlzLmFib3J0KFxuICAgICAgICBuZXcgUmVxdWVzdFJldHJ5RXJyb3IoJ1JlcXVlc3QgZmFpbGVkJywgc3RhdHVzQ29kZSwge1xuICAgICAgICAgIGhlYWRlcnMsXG4gICAgICAgICAgY291bnQ6IHRoaXMucmV0cnlDb3VudFxuICAgICAgICB9KVxuICAgICAgKVxuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuXG4gICAgLy8gQ2hlY2twb2ludCBmb3IgcmVzdW1lIGZyb20gd2hlcmUgd2UgbGVmdCBpdFxuICAgIGlmICh0aGlzLnJlc3VtZSAhPSBudWxsKSB7XG4gICAgICB0aGlzLnJlc3VtZSA9IG51bGxcblxuICAgICAgaWYgKHN0YXR1c0NvZGUgIT09IDIwNikge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250ZW50UmFuZ2UgPSBwYXJzZVJhbmdlSGVhZGVyKGhlYWRlcnNbJ2NvbnRlbnQtcmFuZ2UnXSlcbiAgICAgIC8vIElmIG5vIGNvbnRlbnQgcmFuZ2VcbiAgICAgIGlmICghY29udGVudFJhbmdlKSB7XG4gICAgICAgIHRoaXMuYWJvcnQoXG4gICAgICAgICAgbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdDb250ZW50LVJhbmdlIG1pc21hdGNoJywgc3RhdHVzQ29kZSwge1xuICAgICAgICAgICAgaGVhZGVycyxcbiAgICAgICAgICAgIGNvdW50OiB0aGlzLnJldHJ5Q291bnRcbiAgICAgICAgICB9KVxuICAgICAgICApXG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuXG4gICAgICAvLyBMZXQncyBzdGFydCB3aXRoIGEgd2VhayBldGFnIGNoZWNrXG4gICAgICBpZiAodGhpcy5ldGFnICE9IG51bGwgJiYgdGhpcy5ldGFnICE9PSBoZWFkZXJzLmV0YWcpIHtcbiAgICAgICAgdGhpcy5hYm9ydChcbiAgICAgICAgICBuZXcgUmVxdWVzdFJldHJ5RXJyb3IoJ0VUYWcgbWlzbWF0Y2gnLCBzdGF0dXNDb2RlLCB7XG4gICAgICAgICAgICBoZWFkZXJzLFxuICAgICAgICAgICAgY291bnQ6IHRoaXMucmV0cnlDb3VudFxuICAgICAgICAgIH0pXG4gICAgICAgIClcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHsgc3RhcnQsIHNpemUsIGVuZCA9IHNpemUgfSA9IGNvbnRlbnRSYW5nZVxuXG4gICAgICBhc3NlcnQodGhpcy5zdGFydCA9PT0gc3RhcnQsICdjb250ZW50LXJhbmdlIG1pc21hdGNoJylcbiAgICAgIGFzc2VydCh0aGlzLmVuZCA9PSBudWxsIHx8IHRoaXMuZW5kID09PSBlbmQsICdjb250ZW50LXJhbmdlIG1pc21hdGNoJylcblxuICAgICAgdGhpcy5yZXN1bWUgPSByZXN1bWVcbiAgICAgIHJldHVybiB0cnVlXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZW5kID09IG51bGwpIHtcbiAgICAgIGlmIChzdGF0dXNDb2RlID09PSAyMDYpIHtcbiAgICAgICAgLy8gRmlyc3QgdGltZSB3ZSByZWNlaXZlIDIwNlxuICAgICAgICBjb25zdCByYW5nZSA9IHBhcnNlUmFuZ2VIZWFkZXIoaGVhZGVyc1snY29udGVudC1yYW5nZSddKVxuXG4gICAgICAgIGlmIChyYW5nZSA9PSBudWxsKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkhlYWRlcnMoXG4gICAgICAgICAgICBzdGF0dXNDb2RlLFxuICAgICAgICAgICAgcmF3SGVhZGVycyxcbiAgICAgICAgICAgIHJlc3VtZSxcbiAgICAgICAgICAgIHN0YXR1c01lc3NhZ2VcbiAgICAgICAgICApXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB7IHN0YXJ0LCBzaXplLCBlbmQgPSBzaXplIH0gPSByYW5nZVxuXG4gICAgICAgIGFzc2VydChcbiAgICAgICAgICBzdGFydCAhPSBudWxsICYmIE51bWJlci5pc0Zpbml0ZShzdGFydCkgJiYgdGhpcy5zdGFydCAhPT0gc3RhcnQsXG4gICAgICAgICAgJ2NvbnRlbnQtcmFuZ2UgbWlzbWF0Y2gnXG4gICAgICAgIClcbiAgICAgICAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZShzdGFydCkpXG4gICAgICAgIGFzc2VydChcbiAgICAgICAgICBlbmQgIT0gbnVsbCAmJiBOdW1iZXIuaXNGaW5pdGUoZW5kKSAmJiB0aGlzLmVuZCAhPT0gZW5kLFxuICAgICAgICAgICdpbnZhbGlkIGNvbnRlbnQtbGVuZ3RoJ1xuICAgICAgICApXG5cbiAgICAgICAgdGhpcy5zdGFydCA9IHN0YXJ0XG4gICAgICAgIHRoaXMuZW5kID0gZW5kXG4gICAgICB9XG5cbiAgICAgIC8vIFdlIG1ha2Ugb3VyIGJlc3QgdG8gY2hlY2twb2ludCB0aGUgYm9keSBmb3IgZnVydGhlciByYW5nZSBoZWFkZXJzXG4gICAgICBpZiAodGhpcy5lbmQgPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBjb250ZW50TGVuZ3RoID0gaGVhZGVyc1snY29udGVudC1sZW5ndGgnXVxuICAgICAgICB0aGlzLmVuZCA9IGNvbnRlbnRMZW5ndGggIT0gbnVsbCA/IE51bWJlcihjb250ZW50TGVuZ3RoKSA6IG51bGxcbiAgICAgIH1cblxuICAgICAgYXNzZXJ0KE51bWJlci5pc0Zpbml0ZSh0aGlzLnN0YXJ0KSlcbiAgICAgIGFzc2VydChcbiAgICAgICAgdGhpcy5lbmQgPT0gbnVsbCB8fCBOdW1iZXIuaXNGaW5pdGUodGhpcy5lbmQpLFxuICAgICAgICAnaW52YWxpZCBjb250ZW50LWxlbmd0aCdcbiAgICAgIClcblxuICAgICAgdGhpcy5yZXN1bWUgPSByZXN1bWVcbiAgICAgIHRoaXMuZXRhZyA9IGhlYWRlcnMuZXRhZyAhPSBudWxsID8gaGVhZGVycy5ldGFnIDogbnVsbFxuXG4gICAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uSGVhZGVycyhcbiAgICAgICAgc3RhdHVzQ29kZSxcbiAgICAgICAgcmF3SGVhZGVycyxcbiAgICAgICAgcmVzdW1lLFxuICAgICAgICBzdGF0dXNNZXNzYWdlXG4gICAgICApXG4gICAgfVxuXG4gICAgY29uc3QgZXJyID0gbmV3IFJlcXVlc3RSZXRyeUVycm9yKCdSZXF1ZXN0IGZhaWxlZCcsIHN0YXR1c0NvZGUsIHtcbiAgICAgIGhlYWRlcnMsXG4gICAgICBjb3VudDogdGhpcy5yZXRyeUNvdW50XG4gICAgfSlcblxuICAgIHRoaXMuYWJvcnQoZXJyKVxuXG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBvbkRhdGEgKGNodW5rKSB7XG4gICAgdGhpcy5zdGFydCArPSBjaHVuay5sZW5ndGhcblxuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25EYXRhKGNodW5rKVxuICB9XG5cbiAgb25Db21wbGV0ZSAocmF3VHJhaWxlcnMpIHtcbiAgICB0aGlzLnJldHJ5Q291bnQgPSAwXG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkNvbXBsZXRlKHJhd1RyYWlsZXJzKVxuICB9XG5cbiAgb25FcnJvciAoZXJyKSB7XG4gICAgaWYgKHRoaXMuYWJvcnRlZCB8fCBpc0Rpc3R1cmJlZCh0aGlzLm9wdHMuYm9keSkpIHtcbiAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgfVxuXG4gICAgdGhpcy5yZXRyeU9wdHMucmV0cnkoXG4gICAgICBlcnIsXG4gICAgICB7XG4gICAgICAgIHN0YXRlOiB7IGNvdW50ZXI6IHRoaXMucmV0cnlDb3VudCsrLCBjdXJyZW50VGltZW91dDogdGhpcy5yZXRyeUFmdGVyIH0sXG4gICAgICAgIG9wdHM6IHsgcmV0cnlPcHRpb25zOiB0aGlzLnJldHJ5T3B0cywgLi4udGhpcy5vcHRzIH1cbiAgICAgIH0sXG4gICAgICBvblJldHJ5LmJpbmQodGhpcylcbiAgICApXG5cbiAgICBmdW5jdGlvbiBvblJldHJ5IChlcnIpIHtcbiAgICAgIGlmIChlcnIgIT0gbnVsbCB8fCB0aGlzLmFib3J0ZWQgfHwgaXNEaXN0dXJiZWQodGhpcy5vcHRzLmJvZHkpKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25FcnJvcihlcnIpXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLnN0YXJ0ICE9PSAwKSB7XG4gICAgICAgIHRoaXMub3B0cyA9IHtcbiAgICAgICAgICAuLi50aGlzLm9wdHMsXG4gICAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICAgLi4udGhpcy5vcHRzLmhlYWRlcnMsXG4gICAgICAgICAgICByYW5nZTogYGJ5dGVzPSR7dGhpcy5zdGFydH0tJHt0aGlzLmVuZCA/PyAnJ31gXG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuZGlzcGF0Y2godGhpcy5vcHRzLCB0aGlzKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHRoaXMuaGFuZGxlci5vbkVycm9yKGVycilcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSBSZXRyeUhhbmRsZXJcbiIsICIndXNlIHN0cmljdCdcblxuLy8gV2UgaW5jbHVkZSBhIHZlcnNpb24gbnVtYmVyIGZvciB0aGUgRGlzcGF0Y2hlciBBUEkuIEluIGNhc2Ugb2YgYnJlYWtpbmcgY2hhbmdlcyxcbi8vIHRoaXMgdmVyc2lvbiBudW1iZXIgbXVzdCBiZSBpbmNyZWFzZWQgdG8gYXZvaWQgY29uZmxpY3RzLlxuY29uc3QgZ2xvYmFsRGlzcGF0Y2hlciA9IFN5bWJvbC5mb3IoJ3VuZGljaS5nbG9iYWxEaXNwYXRjaGVyLjEnKVxuY29uc3QgeyBJbnZhbGlkQXJndW1lbnRFcnJvciB9ID0gcmVxdWlyZSgnLi9jb3JlL2Vycm9ycycpXG5jb25zdCBBZ2VudCA9IHJlcXVpcmUoJy4vYWdlbnQnKVxuXG5pZiAoZ2V0R2xvYmFsRGlzcGF0Y2hlcigpID09PSB1bmRlZmluZWQpIHtcbiAgc2V0R2xvYmFsRGlzcGF0Y2hlcihuZXcgQWdlbnQoKSlcbn1cblxuZnVuY3Rpb24gc2V0R2xvYmFsRGlzcGF0Y2hlciAoYWdlbnQpIHtcbiAgaWYgKCFhZ2VudCB8fCB0eXBlb2YgYWdlbnQuZGlzcGF0Y2ggIT09ICdmdW5jdGlvbicpIHtcbiAgICB0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXJyb3IoJ0FyZ3VtZW50IGFnZW50IG11c3QgaW1wbGVtZW50IEFnZW50JylcbiAgfVxuICBPYmplY3QuZGVmaW5lUHJvcGVydHkoZ2xvYmFsVGhpcywgZ2xvYmFsRGlzcGF0Y2hlciwge1xuICAgIHZhbHVlOiBhZ2VudCxcbiAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICBjb25maWd1cmFibGU6IGZhbHNlXG4gIH0pXG59XG5cbmZ1bmN0aW9uIGdldEdsb2JhbERpc3BhdGNoZXIgKCkge1xuICByZXR1cm4gZ2xvYmFsVGhpc1tnbG9iYWxEaXNwYXRjaGVyXVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgc2V0R2xvYmFsRGlzcGF0Y2hlcixcbiAgZ2V0R2xvYmFsRGlzcGF0Y2hlclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGNsYXNzIERlY29yYXRvckhhbmRsZXIge1xuICBjb25zdHJ1Y3RvciAoaGFuZGxlcikge1xuICAgIHRoaXMuaGFuZGxlciA9IGhhbmRsZXJcbiAgfVxuXG4gIG9uQ29ubmVjdCAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25Db25uZWN0KC4uLmFyZ3MpXG4gIH1cblxuICBvbkVycm9yICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkVycm9yKC4uLmFyZ3MpXG4gIH1cblxuICBvblVwZ3JhZGUgKC4uLmFyZ3MpIHtcbiAgICByZXR1cm4gdGhpcy5oYW5kbGVyLm9uVXBncmFkZSguLi5hcmdzKVxuICB9XG5cbiAgb25IZWFkZXJzICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkhlYWRlcnMoLi4uYXJncylcbiAgfVxuXG4gIG9uRGF0YSAoLi4uYXJncykge1xuICAgIHJldHVybiB0aGlzLmhhbmRsZXIub25EYXRhKC4uLmFyZ3MpXG4gIH1cblxuICBvbkNvbXBsZXRlICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkNvbXBsZXRlKC4uLmFyZ3MpXG4gIH1cblxuICBvbkJvZHlTZW50ICguLi5hcmdzKSB7XG4gICAgcmV0dXJuIHRoaXMuaGFuZGxlci5vbkJvZHlTZW50KC4uLmFyZ3MpXG4gIH1cbn1cbiIsICIvLyBodHRwczovL2dpdGh1Yi5jb20vRXRoYW4tQXJyb3dvb2QvdW5kaWNpLWZldGNoXG5cbid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtIZWFkZXJzTGlzdCwga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi4vY29yZS9zeW1ib2xzJylcbmNvbnN0IHsga0d1YXJkIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5IH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3Qge1xuICBtYWtlSXRlcmF0b3IsXG4gIGlzVmFsaWRIZWFkZXJOYW1lLFxuICBpc1ZhbGlkSGVhZGVyVmFsdWVcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJ3V0aWwnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5cbmNvbnN0IGtIZWFkZXJzTWFwID0gU3ltYm9sKCdoZWFkZXJzIG1hcCcpXG5jb25zdCBrSGVhZGVyc1NvcnRlZE1hcCA9IFN5bWJvbCgnaGVhZGVycyBtYXAgc29ydGVkJylcblxuLyoqXG4gKiBAcGFyYW0ge251bWJlcn0gY29kZVxuICovXG5mdW5jdGlvbiBpc0hUVFBXaGl0ZVNwYWNlQ2hhckNvZGUgKGNvZGUpIHtcbiAgcmV0dXJuIGNvZGUgPT09IDB4MDBhIHx8IGNvZGUgPT09IDB4MDBkIHx8IGNvZGUgPT09IDB4MDA5IHx8IGNvZGUgPT09IDB4MDIwXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItdmFsdWUtbm9ybWFsaXplXG4gKiBAcGFyYW0ge3N0cmluZ30gcG90ZW50aWFsVmFsdWVcbiAqL1xuZnVuY3Rpb24gaGVhZGVyVmFsdWVOb3JtYWxpemUgKHBvdGVudGlhbFZhbHVlKSB7XG4gIC8vICBUbyBub3JtYWxpemUgYSBieXRlIHNlcXVlbmNlIHBvdGVudGlhbFZhbHVlLCByZW1vdmVcbiAgLy8gIGFueSBsZWFkaW5nIGFuZCB0cmFpbGluZyBIVFRQIHdoaXRlc3BhY2UgYnl0ZXMgZnJvbVxuICAvLyAgcG90ZW50aWFsVmFsdWUuXG4gIGxldCBpID0gMDsgbGV0IGogPSBwb3RlbnRpYWxWYWx1ZS5sZW5ndGhcblxuICB3aGlsZSAoaiA+IGkgJiYgaXNIVFRQV2hpdGVTcGFjZUNoYXJDb2RlKHBvdGVudGlhbFZhbHVlLmNoYXJDb2RlQXQoaiAtIDEpKSkgLS1qXG4gIHdoaWxlIChqID4gaSAmJiBpc0hUVFBXaGl0ZVNwYWNlQ2hhckNvZGUocG90ZW50aWFsVmFsdWUuY2hhckNvZGVBdChpKSkpICsraVxuXG4gIHJldHVybiBpID09PSAwICYmIGogPT09IHBvdGVudGlhbFZhbHVlLmxlbmd0aCA/IHBvdGVudGlhbFZhbHVlIDogcG90ZW50aWFsVmFsdWUuc3Vic3RyaW5nKGksIGopXG59XG5cbmZ1bmN0aW9uIGZpbGwgKGhlYWRlcnMsIG9iamVjdCkge1xuICAvLyBUbyBmaWxsIGEgSGVhZGVycyBvYmplY3QgaGVhZGVycyB3aXRoIGEgZ2l2ZW4gb2JqZWN0IG9iamVjdCwgcnVuIHRoZXNlIHN0ZXBzOlxuXG4gIC8vIDEuIElmIG9iamVjdCBpcyBhIHNlcXVlbmNlLCB0aGVuIGZvciBlYWNoIGhlYWRlciBpbiBvYmplY3Q6XG4gIC8vIE5vdGU6IHdlYmlkbCBjb252ZXJzaW9uIHRvIGFycmF5IGhhcyBhbHJlYWR5IGJlZW4gZG9uZS5cbiAgaWYgKEFycmF5LmlzQXJyYXkob2JqZWN0KSkge1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb2JqZWN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBjb25zdCBoZWFkZXIgPSBvYmplY3RbaV1cbiAgICAgIC8vIDEuIElmIGhlYWRlciBkb2VzIG5vdCBjb250YWluIGV4YWN0bHkgdHdvIGl0ZW1zLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGhlYWRlci5sZW5ndGggIT09IDIpIHtcbiAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgIGhlYWRlcjogJ0hlYWRlcnMgY29uc3RydWN0b3InLFxuICAgICAgICAgIG1lc3NhZ2U6IGBleHBlY3RlZCBuYW1lL3ZhbHVlIHBhaXIgdG8gYmUgbGVuZ3RoIDIsIGZvdW5kICR7aGVhZGVyLmxlbmd0aH0uYFxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICAvLyAyLiBBcHBlbmQgKGhlYWRlclx1MjAxOXMgZmlyc3QgaXRlbSwgaGVhZGVyXHUyMDE5cyBzZWNvbmQgaXRlbSkgdG8gaGVhZGVycy5cbiAgICAgIGFwcGVuZEhlYWRlcihoZWFkZXJzLCBoZWFkZXJbMF0sIGhlYWRlclsxXSlcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIG9iamVjdCA9PT0gJ29iamVjdCcgJiYgb2JqZWN0ICE9PSBudWxsKSB7XG4gICAgLy8gTm90ZTogbnVsbCBzaG91bGQgdGhyb3dcblxuICAgIC8vIDIuIE90aGVyd2lzZSwgb2JqZWN0IGlzIGEgcmVjb3JkLCB0aGVuIGZvciBlYWNoIGtleSBcdTIxOTIgdmFsdWUgaW4gb2JqZWN0LFxuICAgIC8vICAgIGFwcGVuZCAoa2V5LCB2YWx1ZSkgdG8gaGVhZGVyc1xuICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvYmplY3QpXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICBhcHBlbmRIZWFkZXIoaGVhZGVycywga2V5c1tpXSwgb2JqZWN0W2tleXNbaV1dKVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQoe1xuICAgICAgcHJlZml4OiAnSGVhZGVycyBjb25zdHJ1Y3RvcicsXG4gICAgICBhcmd1bWVudDogJ0FyZ3VtZW50IDEnLFxuICAgICAgdHlwZXM6IFsnc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+JywgJ3JlY29yZDxCeXRlU3RyaW5nLCBCeXRlU3RyaW5nPiddXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtaGVhZGVycy1hcHBlbmRcbiAqL1xuZnVuY3Rpb24gYXBwZW5kSGVhZGVyIChoZWFkZXJzLCBuYW1lLCB2YWx1ZSkge1xuICAvLyAxLiBOb3JtYWxpemUgdmFsdWUuXG4gIHZhbHVlID0gaGVhZGVyVmFsdWVOb3JtYWxpemUodmFsdWUpXG5cbiAgLy8gMi4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSBvciB2YWx1ZSBpcyBub3QgYVxuICAvLyAgICBoZWFkZXIgdmFsdWUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICBwcmVmaXg6ICdIZWFkZXJzLmFwcGVuZCcsXG4gICAgICB2YWx1ZTogbmFtZSxcbiAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICB9KVxuICB9IGVsc2UgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsdWUpKSB7XG4gICAgdGhyb3cgd2ViaWRsLmVycm9ycy5pbnZhbGlkQXJndW1lbnQoe1xuICAgICAgcHJlZml4OiAnSGVhZGVycy5hcHBlbmQnLFxuICAgICAgdmFsdWUsXG4gICAgICB0eXBlOiAnaGVhZGVyIHZhbHVlJ1xuICAgIH0pXG4gIH1cblxuICAvLyAzLiBJZiBoZWFkZXJzXHUyMDE5cyBndWFyZCBpcyBcImltbXV0YWJsZVwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAvLyA0LiBPdGhlcndpc2UsIGlmIGhlYWRlcnNcdTIwMTlzIGd1YXJkIGlzIFwicmVxdWVzdFwiIGFuZCBuYW1lIGlzIGFcbiAgLy8gICAgZm9yYmlkZGVuIGhlYWRlciBuYW1lLCByZXR1cm4uXG4gIC8vIE5vdGU6IHVuZGljaSBkb2VzIG5vdCBpbXBsZW1lbnQgZm9yYmlkZGVuIGhlYWRlciBuYW1lc1xuICBpZiAoaGVhZGVyc1trR3VhcmRdID09PSAnaW1tdXRhYmxlJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ltbXV0YWJsZScpXG4gIH0gZWxzZSBpZiAoaGVhZGVyc1trR3VhcmRdID09PSAncmVxdWVzdC1uby1jb3JzJykge1xuICAgIC8vIDUuIE90aGVyd2lzZSwgaWYgaGVhZGVyc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIjpcbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyA2LiBPdGhlcndpc2UsIGlmIGhlYWRlcnNcdTIwMTlzIGd1YXJkIGlzIFwicmVzcG9uc2VcIiBhbmQgbmFtZSBpcyBhXG4gIC8vICAgIGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZSwgcmV0dXJuLlxuXG4gIC8vIDcuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGhlYWRlcnNcdTIwMTlzIGhlYWRlciBsaXN0LlxuICByZXR1cm4gaGVhZGVyc1trSGVhZGVyc0xpc3RdLmFwcGVuZChuYW1lLCB2YWx1ZSlcblxuICAvLyA4LiBJZiBoZWFkZXJzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiLCB0aGVuIHJlbW92ZVxuICAvLyAgICBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdCBoZWFkZXJzIGZyb20gaGVhZGVyc1xufVxuXG5jbGFzcyBIZWFkZXJzTGlzdCB7XG4gIC8qKiBAdHlwZSB7W3N0cmluZywgc3RyaW5nXVtdfG51bGx9ICovXG4gIGNvb2tpZXMgPSBudWxsXG5cbiAgY29uc3RydWN0b3IgKGluaXQpIHtcbiAgICBpZiAoaW5pdCBpbnN0YW5jZW9mIEhlYWRlcnNMaXN0KSB7XG4gICAgICB0aGlzW2tIZWFkZXJzTWFwXSA9IG5ldyBNYXAoaW5pdFtrSGVhZGVyc01hcF0pXG4gICAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IGluaXRba0hlYWRlcnNTb3J0ZWRNYXBdXG4gICAgICB0aGlzLmNvb2tpZXMgPSBpbml0LmNvb2tpZXMgPT09IG51bGwgPyBudWxsIDogWy4uLmluaXQuY29va2llc11cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trSGVhZGVyc01hcF0gPSBuZXcgTWFwKGluaXQpXG4gICAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcbiAgICB9XG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaGVhZGVyLWxpc3QtY29udGFpbnNcbiAgY29udGFpbnMgKG5hbWUpIHtcbiAgICAvLyBBIGhlYWRlciBsaXN0IGxpc3QgY29udGFpbnMgYSBoZWFkZXIgbmFtZSBuYW1lIGlmIGxpc3RcbiAgICAvLyBjb250YWlucyBhIGhlYWRlciB3aG9zZSBuYW1lIGlzIGEgYnl0ZS1jYXNlLWluc2Vuc2l0aXZlXG4gICAgLy8gbWF0Y2ggZm9yIG5hbWUuXG4gICAgbmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKVxuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNNYXBdLmhhcyhuYW1lKVxuICB9XG5cbiAgY2xlYXIgKCkge1xuICAgIHRoaXNba0hlYWRlcnNNYXBdLmNsZWFyKClcbiAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcbiAgICB0aGlzLmNvb2tpZXMgPSBudWxsXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1oZWFkZXItbGlzdC1hcHBlbmRcbiAgYXBwZW5kIChuYW1lLCB2YWx1ZSkge1xuICAgIHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdID0gbnVsbFxuXG4gICAgLy8gMS4gSWYgbGlzdCBjb250YWlucyBuYW1lLCB0aGVuIHNldCBuYW1lIHRvIHRoZSBmaXJzdCBzdWNoXG4gICAgLy8gICAgaGVhZGVyXHUyMDE5cyBuYW1lLlxuICAgIGNvbnN0IGxvd2VyY2FzZU5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKClcbiAgICBjb25zdCBleGlzdHMgPSB0aGlzW2tIZWFkZXJzTWFwXS5nZXQobG93ZXJjYXNlTmFtZSlcblxuICAgIC8vIDIuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGxpc3QuXG4gICAgaWYgKGV4aXN0cykge1xuICAgICAgY29uc3QgZGVsaW1pdGVyID0gbG93ZXJjYXNlTmFtZSA9PT0gJ2Nvb2tpZScgPyAnOyAnIDogJywgJ1xuICAgICAgdGhpc1trSGVhZGVyc01hcF0uc2V0KGxvd2VyY2FzZU5hbWUsIHtcbiAgICAgICAgbmFtZTogZXhpc3RzLm5hbWUsXG4gICAgICAgIHZhbHVlOiBgJHtleGlzdHMudmFsdWV9JHtkZWxpbWl0ZXJ9JHt2YWx1ZX1gXG4gICAgICB9KVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tIZWFkZXJzTWFwXS5zZXQobG93ZXJjYXNlTmFtZSwgeyBuYW1lLCB2YWx1ZSB9KVxuICAgIH1cblxuICAgIGlmIChsb3dlcmNhc2VOYW1lID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIHRoaXMuY29va2llcyA/Pz0gW11cbiAgICAgIHRoaXMuY29va2llcy5wdXNoKHZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LXNldFxuICBzZXQgKG5hbWUsIHZhbHVlKSB7XG4gICAgdGhpc1trSGVhZGVyc1NvcnRlZE1hcF0gPSBudWxsXG4gICAgY29uc3QgbG93ZXJjYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKVxuXG4gICAgaWYgKGxvd2VyY2FzZU5hbWUgPT09ICdzZXQtY29va2llJykge1xuICAgICAgdGhpcy5jb29raWVzID0gW3ZhbHVlXVxuICAgIH1cblxuICAgIC8vIDEuIElmIGxpc3QgY29udGFpbnMgbmFtZSwgdGhlbiBzZXQgdGhlIHZhbHVlIG9mXG4gICAgLy8gICAgdGhlIGZpcnN0IHN1Y2ggaGVhZGVyIHRvIHZhbHVlIGFuZCByZW1vdmUgdGhlXG4gICAgLy8gICAgb3RoZXJzLlxuICAgIC8vIDIuIE90aGVyd2lzZSwgYXBwZW5kIGhlYWRlciAobmFtZSwgdmFsdWUpIHRvIGxpc3QuXG4gICAgdGhpc1trSGVhZGVyc01hcF0uc2V0KGxvd2VyY2FzZU5hbWUsIHsgbmFtZSwgdmFsdWUgfSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LWRlbGV0ZVxuICBkZWxldGUgKG5hbWUpIHtcbiAgICB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXSA9IG51bGxcblxuICAgIG5hbWUgPSBuYW1lLnRvTG93ZXJDYXNlKClcblxuICAgIGlmIChuYW1lID09PSAnc2V0LWNvb2tpZScpIHtcbiAgICAgIHRoaXMuY29va2llcyA9IG51bGxcbiAgICB9XG5cbiAgICB0aGlzW2tIZWFkZXJzTWFwXS5kZWxldGUobmFtZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LWdldFxuICBnZXQgKG5hbWUpIHtcbiAgICBjb25zdCB2YWx1ZSA9IHRoaXNba0hlYWRlcnNNYXBdLmdldChuYW1lLnRvTG93ZXJDYXNlKCkpXG5cbiAgICAvLyAxLiBJZiBsaXN0IGRvZXMgbm90IGNvbnRhaW4gbmFtZSwgdGhlbiByZXR1cm4gbnVsbC5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHZhbHVlcyBvZiBhbGwgaGVhZGVycyBpbiBsaXN0IHdob3NlIG5hbWVcbiAgICAvLyAgICBpcyBhIGJ5dGUtY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3IgbmFtZSxcbiAgICAvLyAgICBzZXBhcmF0ZWQgZnJvbSBlYWNoIG90aGVyIGJ5IDB4MkMgMHgyMCwgaW4gb3JkZXIuXG4gICAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgPyBudWxsIDogdmFsdWUudmFsdWVcbiAgfVxuXG4gICogW1N5bWJvbC5pdGVyYXRvcl0gKCkge1xuICAgIC8vIHVzZSB0aGUgbG93ZXJjYXNlZCBuYW1lXG4gICAgZm9yIChjb25zdCBbbmFtZSwgeyB2YWx1ZSB9XSBvZiB0aGlzW2tIZWFkZXJzTWFwXSkge1xuICAgICAgeWllbGQgW25hbWUsIHZhbHVlXVxuICAgIH1cbiAgfVxuXG4gIGdldCBlbnRyaWVzICgpIHtcbiAgICBjb25zdCBoZWFkZXJzID0ge31cblxuICAgIGlmICh0aGlzW2tIZWFkZXJzTWFwXS5zaXplKSB7XG4gICAgICBmb3IgKGNvbnN0IHsgbmFtZSwgdmFsdWUgfSBvZiB0aGlzW2tIZWFkZXJzTWFwXS52YWx1ZXMoKSkge1xuICAgICAgICBoZWFkZXJzW25hbWVdID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gaGVhZGVyc1xuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNoZWFkZXJzLWNsYXNzXG5jbGFzcyBIZWFkZXJzIHtcbiAgY29uc3RydWN0b3IgKGluaXQgPSB1bmRlZmluZWQpIHtcbiAgICBpZiAoaW5pdCA9PT0ga0NvbnN0cnVjdCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuICAgIHRoaXNba0hlYWRlcnNMaXN0XSA9IG5ldyBIZWFkZXJzTGlzdCgpXG5cbiAgICAvLyBUaGUgbmV3IEhlYWRlcnMoaW5pdCkgY29uc3RydWN0b3Igc3RlcHMgYXJlOlxuXG4gICAgLy8gMS4gU2V0IHRoaXNcdTIwMTlzIGd1YXJkIHRvIFwibm9uZVwiLlxuICAgIHRoaXNba0d1YXJkXSA9ICdub25lJ1xuXG4gICAgLy8gMi4gSWYgaW5pdCBpcyBnaXZlbiwgdGhlbiBmaWxsIHRoaXMgd2l0aCBpbml0LlxuICAgIGlmIChpbml0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGluaXQgPSB3ZWJpZGwuY29udmVydGVycy5IZWFkZXJzSW5pdChpbml0KVxuICAgICAgZmlsbCh0aGlzLCBpbml0KVxuICAgIH1cbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1hcHBlbmRcbiAgYXBwZW5kIChuYW1lLCB2YWx1ZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnSGVhZGVycy5hcHBlbmQnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lKVxuICAgIHZhbHVlID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyh2YWx1ZSlcblxuICAgIHJldHVybiBhcHBlbmRIZWFkZXIodGhpcywgbmFtZSwgdmFsdWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtZGVsZXRlXG4gIGRlbGV0ZSAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnSGVhZGVycy5kZWxldGUnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lKVxuXG4gICAgLy8gMS4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKG5hbWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeDogJ0hlYWRlcnMuZGVsZXRlJyxcbiAgICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJpbW11dGFibGVcIiwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAvLyAzLiBPdGhlcndpc2UsIGlmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwicmVxdWVzdFwiIGFuZCBuYW1lIGlzIGFcbiAgICAvLyAgICBmb3JiaWRkZW4gaGVhZGVyIG5hbWUsIHJldHVybi5cbiAgICAvLyA0LiBPdGhlcndpc2UsIGlmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwicmVxdWVzdC1uby1jb3JzXCIsIG5hbWVcbiAgICAvLyAgICBpcyBub3QgYSBuby1DT1JTLXNhZmVsaXN0ZWQgcmVxdWVzdC1oZWFkZXIgbmFtZSwgYW5kXG4gICAgLy8gICAgbmFtZSBpcyBub3QgYSBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdC1oZWFkZXIgbmFtZSxcbiAgICAvLyAgICByZXR1cm4uXG4gICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlc3BvbnNlXCIgYW5kIG5hbWUgaXNcbiAgICAvLyAgICBhIGZvcmJpZGRlbiByZXNwb25zZS1oZWFkZXIgbmFtZSwgcmV0dXJuLlxuICAgIC8vIE5vdGU6IHVuZGljaSBkb2VzIG5vdCBpbXBsZW1lbnQgZm9yYmlkZGVuIGhlYWRlciBuYW1lc1xuICAgIGlmICh0aGlzW2tHdWFyZF0gPT09ICdpbW11dGFibGUnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbW11dGFibGUnKVxuICAgIH0gZWxzZSBpZiAodGhpc1trR3VhcmRdID09PSAncmVxdWVzdC1uby1jb3JzJykge1xuICAgICAgLy8gVE9ET1xuICAgIH1cblxuICAgIC8vIDYuIElmIHRoaXNcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gbmFtZSwgdGhlblxuICAgIC8vICAgIHJldHVybi5cbiAgICBpZiAoIXRoaXNba0hlYWRlcnNMaXN0XS5jb250YWlucyhuYW1lKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gNy4gRGVsZXRlIG5hbWUgZnJvbSB0aGlzXHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAvLyA4LiBJZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiLCB0aGVuIHJlbW92ZVxuICAgIC8vICAgIHByaXZpbGVnZWQgbm8tQ09SUyByZXF1ZXN0IGhlYWRlcnMgZnJvbSB0aGlzLlxuICAgIHRoaXNba0hlYWRlcnNMaXN0XS5kZWxldGUobmFtZSlcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20taGVhZGVycy1nZXRcbiAgZ2V0IChuYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdIZWFkZXJzLmdldCcgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKG5hbWUpXG5cbiAgICAvLyAxLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4OiAnSGVhZGVycy5nZXQnLFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBnZXR0aW5nIG5hbWUgZnJvbSB0aGlzXHUyMDE5cyBoZWFkZXJcbiAgICAvLyAgICBsaXN0LlxuICAgIHJldHVybiB0aGlzW2tIZWFkZXJzTGlzdF0uZ2V0KG5hbWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtaGFzXG4gIGhhcyAobmFtZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnSGVhZGVycy5oYXMnIH0pXG5cbiAgICBuYW1lID0gd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyhuYW1lKVxuXG4gICAgLy8gMS4gSWYgbmFtZSBpcyBub3QgYSBoZWFkZXIgbmFtZSwgdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICBpZiAoIWlzVmFsaWRIZWFkZXJOYW1lKG5hbWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeDogJ0hlYWRlcnMuaGFzJyxcbiAgICAgICAgdmFsdWU6IG5hbWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgbmFtZSdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gMi4gUmV0dXJuIHRydWUgaWYgdGhpc1x1MjAxOXMgaGVhZGVyIGxpc3QgY29udGFpbnMgbmFtZTtcbiAgICAvLyAgICBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNMaXN0XS5jb250YWlucyhuYW1lKVxuICB9XG5cbiAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2RvbS1oZWFkZXJzLXNldFxuICBzZXQgKG5hbWUsIHZhbHVlKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMiwgeyBoZWFkZXI6ICdIZWFkZXJzLnNldCcgfSlcblxuICAgIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKG5hbWUpXG4gICAgdmFsdWUgPSB3ZWJpZGwuY29udmVydGVycy5CeXRlU3RyaW5nKHZhbHVlKVxuXG4gICAgLy8gMS4gTm9ybWFsaXplIHZhbHVlLlxuICAgIHZhbHVlID0gaGVhZGVyVmFsdWVOb3JtYWxpemUodmFsdWUpXG5cbiAgICAvLyAyLiBJZiBuYW1lIGlzIG5vdCBhIGhlYWRlciBuYW1lIG9yIHZhbHVlIGlzIG5vdCBhXG4gICAgLy8gICAgaGVhZGVyIHZhbHVlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmICghaXNWYWxpZEhlYWRlck5hbWUobmFtZSkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuaW52YWxpZEFyZ3VtZW50KHtcbiAgICAgICAgcHJlZml4OiAnSGVhZGVycy5zZXQnLFxuICAgICAgICB2YWx1ZTogbmFtZSxcbiAgICAgICAgdHlwZTogJ2hlYWRlciBuYW1lJ1xuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKCFpc1ZhbGlkSGVhZGVyVmFsdWUodmFsdWUpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmludmFsaWRBcmd1bWVudCh7XG4gICAgICAgIHByZWZpeDogJ0hlYWRlcnMuc2V0JyxcbiAgICAgICAgdmFsdWUsXG4gICAgICAgIHR5cGU6ICdoZWFkZXIgdmFsdWUnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDMuIElmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwiaW1tdXRhYmxlXCIsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgLy8gNC4gT3RoZXJ3aXNlLCBpZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3RcIiBhbmQgbmFtZSBpcyBhXG4gICAgLy8gICAgZm9yYmlkZGVuIGhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB0aGlzXHUyMDE5cyBndWFyZCBpcyBcInJlcXVlc3Qtbm8tY29yc1wiIGFuZFxuICAgIC8vICAgIG5hbWUvdmFsdWUgaXMgbm90IGEgbm8tQ09SUy1zYWZlbGlzdGVkIHJlcXVlc3QtaGVhZGVyLFxuICAgIC8vICAgIHJldHVybi5cbiAgICAvLyA2LiBPdGhlcndpc2UsIGlmIHRoaXNcdTIwMTlzIGd1YXJkIGlzIFwicmVzcG9uc2VcIiBhbmQgbmFtZSBpcyBhXG4gICAgLy8gICAgZm9yYmlkZGVuIHJlc3BvbnNlLWhlYWRlciBuYW1lLCByZXR1cm4uXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBmb3JiaWRkZW4gaGVhZGVyIG5hbWVzXG4gICAgaWYgKHRoaXNba0d1YXJkXSA9PT0gJ2ltbXV0YWJsZScpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ltbXV0YWJsZScpXG4gICAgfSBlbHNlIGlmICh0aGlzW2tHdWFyZF0gPT09ICdyZXF1ZXN0LW5vLWNvcnMnKSB7XG4gICAgICAvLyBUT0RPXG4gICAgfVxuXG4gICAgLy8gNy4gU2V0IChuYW1lLCB2YWx1ZSkgaW4gdGhpc1x1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgLy8gOC4gSWYgdGhpc1x1MjAxOXMgZ3VhcmQgaXMgXCJyZXF1ZXN0LW5vLWNvcnNcIiwgdGhlbiByZW1vdmVcbiAgICAvLyAgICBwcml2aWxlZ2VkIG5vLUNPUlMgcmVxdWVzdCBoZWFkZXJzIGZyb20gdGhpc1xuICAgIHRoaXNba0hlYWRlcnNMaXN0XS5zZXQobmFtZSwgdmFsdWUpXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLWhlYWRlcnMtZ2V0c2V0Y29va2llXG4gIGdldFNldENvb2tpZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIC8vIDEuIElmIHRoaXNcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYFNldC1Db29raWVgLCB0aGVuIHJldHVybiBcdTAwQUIgXHUwMEJCLlxuICAgIC8vIDIuIFJldHVybiB0aGUgdmFsdWVzIG9mIGFsbCBoZWFkZXJzIGluIHRoaXNcdTIwMTlzIGhlYWRlciBsaXN0IHdob3NlIG5hbWUgaXNcbiAgICAvLyAgICBhIGJ5dGUtY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3IgYFNldC1Db29raWVgLCBpbiBvcmRlci5cblxuICAgIGNvbnN0IGxpc3QgPSB0aGlzW2tIZWFkZXJzTGlzdF0uY29va2llc1xuXG4gICAgaWYgKGxpc3QpIHtcbiAgICAgIHJldHVybiBbLi4ubGlzdF1cbiAgICB9XG5cbiAgICByZXR1cm4gW11cbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWhlYWRlci1saXN0LXNvcnQtYW5kLWNvbWJpbmVcbiAgZ2V0IFtrSGVhZGVyc1NvcnRlZE1hcF0gKCkge1xuICAgIGlmICh0aGlzW2tIZWFkZXJzTGlzdF1ba0hlYWRlcnNTb3J0ZWRNYXBdKSB7XG4gICAgICByZXR1cm4gdGhpc1trSGVhZGVyc0xpc3RdW2tIZWFkZXJzU29ydGVkTWFwXVxuICAgIH1cblxuICAgIC8vIDEuIExldCBoZWFkZXJzIGJlIGFuIGVtcHR5IGxpc3Qgb2YgaGVhZGVycyB3aXRoIHRoZSBrZXkgYmVpbmcgdGhlIG5hbWVcbiAgICAvLyAgICBhbmQgdmFsdWUgdGhlIHZhbHVlLlxuICAgIGNvbnN0IGhlYWRlcnMgPSBbXVxuXG4gICAgLy8gMi4gTGV0IG5hbWVzIGJlIHRoZSByZXN1bHQgb2YgY29udmVydCBoZWFkZXIgbmFtZXMgdG8gYSBzb3J0ZWQtbG93ZXJjYXNlXG4gICAgLy8gICAgc2V0IHdpdGggYWxsIHRoZSBuYW1lcyBvZiB0aGUgaGVhZGVycyBpbiBsaXN0LlxuICAgIGNvbnN0IG5hbWVzID0gWy4uLnRoaXNba0hlYWRlcnNMaXN0XV0uc29ydCgoYSwgYikgPT4gYVswXSA8IGJbMF0gPyAtMSA6IDEpXG4gICAgY29uc3QgY29va2llcyA9IHRoaXNba0hlYWRlcnNMaXN0XS5jb29raWVzXG5cbiAgICAvLyAzLiBGb3IgZWFjaCBuYW1lIG9mIG5hbWVzOlxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyArK2kpIHtcbiAgICAgIGNvbnN0IFtuYW1lLCB2YWx1ZV0gPSBuYW1lc1tpXVxuICAgICAgLy8gMS4gSWYgbmFtZSBpcyBgc2V0LWNvb2tpZWAsIHRoZW46XG4gICAgICBpZiAobmFtZSA9PT0gJ3NldC1jb29raWUnKSB7XG4gICAgICAgIC8vIDEuIExldCB2YWx1ZXMgYmUgYSBsaXN0IG9mIGFsbCB2YWx1ZXMgb2YgaGVhZGVycyBpbiBsaXN0IHdob3NlIG5hbWVcbiAgICAgICAgLy8gICAgaXMgYSBieXRlLWNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yIG5hbWUsIGluIG9yZGVyLlxuXG4gICAgICAgIC8vIDIuIEZvciBlYWNoIHZhbHVlIG9mIHZhbHVlczpcbiAgICAgICAgLy8gMS4gQXBwZW5kIChuYW1lLCB2YWx1ZSkgdG8gaGVhZGVycy5cbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb29raWVzLmxlbmd0aDsgKytqKSB7XG4gICAgICAgICAgaGVhZGVycy5wdXNoKFtuYW1lLCBjb29raWVzW2pdXSlcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gMi4gT3RoZXJ3aXNlOlxuXG4gICAgICAgIC8vIDEuIExldCB2YWx1ZSBiZSB0aGUgcmVzdWx0IG9mIGdldHRpbmcgbmFtZSBmcm9tIGxpc3QuXG5cbiAgICAgICAgLy8gMi4gQXNzZXJ0OiB2YWx1ZSBpcyBub24tbnVsbC5cbiAgICAgICAgYXNzZXJ0KHZhbHVlICE9PSBudWxsKVxuXG4gICAgICAgIC8vIDMuIEFwcGVuZCAobmFtZSwgdmFsdWUpIHRvIGhlYWRlcnMuXG4gICAgICAgIGhlYWRlcnMucHVzaChbbmFtZSwgdmFsdWVdKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXNba0hlYWRlcnNMaXN0XVtrSGVhZGVyc1NvcnRlZE1hcF0gPSBoZWFkZXJzXG5cbiAgICAvLyA0LiBSZXR1cm4gaGVhZGVycy5cbiAgICByZXR1cm4gaGVhZGVyc1xuICB9XG5cbiAga2V5cyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgSGVhZGVycylcblxuICAgIGlmICh0aGlzW2tHdWFyZF0gPT09ICdpbW11dGFibGUnKSB7XG4gICAgICBjb25zdCB2YWx1ZSA9IHRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdXG4gICAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKCgpID0+IHZhbHVlLCAnSGVhZGVycycsXG4gICAgICAgICdrZXknKVxuICAgIH1cblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IoXG4gICAgICAoKSA9PiBbLi4udGhpc1trSGVhZGVyc1NvcnRlZE1hcF0udmFsdWVzKCldLFxuICAgICAgJ0hlYWRlcnMnLFxuICAgICAgJ2tleSdcbiAgICApXG4gIH1cblxuICB2YWx1ZXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICBpZiAodGhpc1trR3VhcmRdID09PSAnaW1tdXRhYmxlJykge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXVxuICAgICAgcmV0dXJuIG1ha2VJdGVyYXRvcigoKSA9PiB2YWx1ZSwgJ0hlYWRlcnMnLFxuICAgICAgICAndmFsdWUnKVxuICAgIH1cblxuICAgIHJldHVybiBtYWtlSXRlcmF0b3IoXG4gICAgICAoKSA9PiBbLi4udGhpc1trSGVhZGVyc1NvcnRlZE1hcF0udmFsdWVzKCldLFxuICAgICAgJ0hlYWRlcnMnLFxuICAgICAgJ3ZhbHVlJ1xuICAgIClcbiAgfVxuXG4gIGVudHJpZXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEhlYWRlcnMpXG5cbiAgICBpZiAodGhpc1trR3VhcmRdID09PSAnaW1tdXRhYmxlJykge1xuICAgICAgY29uc3QgdmFsdWUgPSB0aGlzW2tIZWFkZXJzU29ydGVkTWFwXVxuICAgICAgcmV0dXJuIG1ha2VJdGVyYXRvcigoKSA9PiB2YWx1ZSwgJ0hlYWRlcnMnLFxuICAgICAgICAna2V5K3ZhbHVlJylcbiAgICB9XG5cbiAgICByZXR1cm4gbWFrZUl0ZXJhdG9yKFxuICAgICAgKCkgPT4gWy4uLnRoaXNba0hlYWRlcnNTb3J0ZWRNYXBdLnZhbHVlcygpXSxcbiAgICAgICdIZWFkZXJzJyxcbiAgICAgICdrZXkrdmFsdWUnXG4gICAgKVxuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7KHZhbHVlOiBzdHJpbmcsIGtleTogc3RyaW5nLCBzZWxmOiBIZWFkZXJzKSA9PiB2b2lkfSBjYWxsYmFja0ZuXG4gICAqIEBwYXJhbSB7dW5rbm93bn0gdGhpc0FyZ1xuICAgKi9cbiAgZm9yRWFjaCAoY2FsbGJhY2tGbiwgdGhpc0FyZyA9IGdsb2JhbFRoaXMpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0hlYWRlcnMuZm9yRWFjaCcgfSlcblxuICAgIGlmICh0eXBlb2YgY2FsbGJhY2tGbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgXCJGYWlsZWQgdG8gZXhlY3V0ZSAnZm9yRWFjaCcgb24gJ0hlYWRlcnMnOiBwYXJhbWV0ZXIgMSBpcyBub3Qgb2YgdHlwZSAnRnVuY3Rpb24nLlwiXG4gICAgICApXG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgdGhpcykge1xuICAgICAgY2FsbGJhY2tGbi5hcHBseSh0aGlzQXJnLCBbdmFsdWUsIGtleSwgdGhpc10pXG4gICAgfVxuICB9XG5cbiAgW1N5bWJvbC5mb3IoJ25vZGVqcy51dGlsLmluc3BlY3QuY3VzdG9tJyldICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBIZWFkZXJzKVxuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNMaXN0XVxuICB9XG59XG5cbkhlYWRlcnMucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBIZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEhlYWRlcnMucHJvdG90eXBlLCB7XG4gIGFwcGVuZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZGVsZXRlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBnZXQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGhhczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc2V0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBnZXRTZXRDb29raWU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGtleXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHZhbHVlczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZW50cmllczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZm9yRWFjaDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgW1N5bWJvbC5pdGVyYXRvcl06IHsgZW51bWVyYWJsZTogZmFsc2UgfSxcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0hlYWRlcnMnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICBbdXRpbC5pbnNwZWN0LmN1c3RvbV06IHtcbiAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICB9XG59KVxuXG53ZWJpZGwuY29udmVydGVycy5IZWFkZXJzSW5pdCA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0Jykge1xuICAgIGlmIChWW1N5bWJvbC5pdGVyYXRvcl0pIHtcbiAgICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+J10oVilcbiAgICB9XG5cbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnNbJ3JlY29yZDxCeXRlU3RyaW5nLCBCeXRlU3RyaW5nPiddKFYpXG4gIH1cblxuICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmNvbnZlcnNpb25GYWlsZWQoe1xuICAgIHByZWZpeDogJ0hlYWRlcnMgY29uc3RydWN0b3InLFxuICAgIGFyZ3VtZW50OiAnQXJndW1lbnQgMScsXG4gICAgdHlwZXM6IFsnc2VxdWVuY2U8c2VxdWVuY2U8Qnl0ZVN0cmluZz4+JywgJ3JlY29yZDxCeXRlU3RyaW5nLCBCeXRlU3RyaW5nPiddXG4gIH0pXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBmaWxsLFxuICBIZWFkZXJzLFxuICBIZWFkZXJzTGlzdFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IEhlYWRlcnMsIEhlYWRlcnNMaXN0LCBmaWxsIH0gPSByZXF1aXJlKCcuL2hlYWRlcnMnKVxuY29uc3QgeyBleHRyYWN0Qm9keSwgY2xvbmVCb2R5LCBtaXhpbkJvZHkgfSA9IHJlcXVpcmUoJy4vYm9keScpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gdXRpbFxuY29uc3Qge1xuICBpc1ZhbGlkUmVhc29uUGhyYXNlLFxuICBpc0NhbmNlbGxlZCxcbiAgaXNBYm9ydGVkLFxuICBpc0Jsb2JMaWtlLFxuICBzZXJpYWxpemVKYXZhc2NyaXB0VmFsdWVUb0pTT05TdHJpbmcsXG4gIGlzRXJyb3JMaWtlLFxuICBpc29tb3JwaGljRW5jb2RlXG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHtcbiAgcmVkaXJlY3RTdGF0dXNTZXQsXG4gIG51bGxCb2R5U3RhdHVzLFxuICBET01FeGNlcHRpb25cbn0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGtTdGF0ZSwga0hlYWRlcnMsIGtHdWFyZCwga1JlYWxtIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IHsgRm9ybURhdGEgfSA9IHJlcXVpcmUoJy4vZm9ybWRhdGEnKVxuY29uc3QgeyBnZXRHbG9iYWxPcmlnaW4gfSA9IHJlcXVpcmUoJy4vZ2xvYmFsJylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi9kYXRhVVJMJylcbmNvbnN0IHsga0hlYWRlcnNMaXN0LCBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgdHlwZXMgfSA9IHJlcXVpcmUoJ3V0aWwnKVxuXG5jb25zdCBSZWFkYWJsZVN0cmVhbSA9IGdsb2JhbFRoaXMuUmVhZGFibGVTdHJlYW0gfHwgcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG5jb25zdCB0ZXh0RW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigndXRmLTgnKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVzcG9uc2UtY2xhc3NcbmNsYXNzIFJlc3BvbnNlIHtcbiAgLy8gQ3JlYXRlcyBuZXR3b3JrIGVycm9yIFJlc3BvbnNlLlxuICBzdGF0aWMgZXJyb3IgKCkge1xuICAgIC8vIFRPRE9cbiAgICBjb25zdCByZWxldmFudFJlYWxtID0geyBzZXR0aW5nc09iamVjdDoge30gfVxuXG4gICAgLy8gVGhlIHN0YXRpYyBlcnJvcigpIG1ldGhvZCBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYVxuICAgIC8vIFJlc3BvbnNlIG9iamVjdCwgZ2l2ZW4gYSBuZXcgbmV0d29yayBlcnJvciwgXCJpbW11dGFibGVcIiwgYW5kIHRoaXNcdTIwMTlzXG4gICAgLy8gcmVsZXZhbnQgUmVhbG0uXG4gICAgY29uc3QgcmVzcG9uc2VPYmplY3QgPSBuZXcgUmVzcG9uc2UoKVxuICAgIHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0gPSBtYWtlTmV0d29ya0Vycm9yKClcbiAgICByZXNwb25zZU9iamVjdFtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gcmVzcG9uc2VPYmplY3Rba1N0YXRlXS5oZWFkZXJzTGlzdFxuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gJ2ltbXV0YWJsZSdcbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cbiAgICByZXR1cm4gcmVzcG9uc2VPYmplY3RcbiAgfVxuXG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVzcG9uc2UtanNvblxuICBzdGF0aWMganNvbiAoZGF0YSwgaW5pdCA9IHt9KSB7XG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ1Jlc3BvbnNlLmpzb24nIH0pXG5cbiAgICBpZiAoaW5pdCAhPT0gbnVsbCkge1xuICAgICAgaW5pdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlc3BvbnNlSW5pdChpbml0KVxuICAgIH1cblxuICAgIC8vIDEuIExldCBieXRlcyB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgc2VyaWFsaXplIGEgSmF2YVNjcmlwdCB2YWx1ZSB0byBKU09OIGJ5dGVzIG9uIGRhdGEuXG4gICAgY29uc3QgYnl0ZXMgPSB0ZXh0RW5jb2Rlci5lbmNvZGUoXG4gICAgICBzZXJpYWxpemVKYXZhc2NyaXB0VmFsdWVUb0pTT05TdHJpbmcoZGF0YSlcbiAgICApXG5cbiAgICAvLyAyLiBMZXQgYm9keSBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgYnl0ZXMuXG4gICAgY29uc3QgYm9keSA9IGV4dHJhY3RCb2R5KGJ5dGVzKVxuXG4gICAgLy8gMy4gTGV0IHJlc3BvbnNlT2JqZWN0IGJlIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBSZXNwb25zZSBvYmplY3QsIGdpdmVuIGEgbmV3IHJlc3BvbnNlLFxuICAgIC8vICAgIFwicmVzcG9uc2VcIiwgYW5kIHRoaXNcdTIwMTlzIHJlbGV2YW50IFJlYWxtLlxuICAgIGNvbnN0IHJlbGV2YW50UmVhbG0gPSB7IHNldHRpbmdzT2JqZWN0OiB7fSB9XG4gICAgY29uc3QgcmVzcG9uc2VPYmplY3QgPSBuZXcgUmVzcG9uc2UoKVxuICAgIHJlc3BvbnNlT2JqZWN0W2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSAncmVzcG9uc2UnXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG5cbiAgICAvLyA0LiBQZXJmb3JtIGluaXRpYWxpemUgYSByZXNwb25zZSBnaXZlbiByZXNwb25zZU9iamVjdCwgaW5pdCwgYW5kIChib2R5LCBcImFwcGxpY2F0aW9uL2pzb25cIikuXG4gICAgaW5pdGlhbGl6ZVJlc3BvbnNlKHJlc3BvbnNlT2JqZWN0LCBpbml0LCB7IGJvZHk6IGJvZHlbMF0sIHR5cGU6ICdhcHBsaWNhdGlvbi9qc29uJyB9KVxuXG4gICAgLy8gNS4gUmV0dXJuIHJlc3BvbnNlT2JqZWN0LlxuICAgIHJldHVybiByZXNwb25zZU9iamVjdFxuICB9XG5cbiAgLy8gQ3JlYXRlcyBhIHJlZGlyZWN0IFJlc3BvbnNlIHRoYXQgcmVkaXJlY3RzIHRvIHVybCB3aXRoIHN0YXR1cyBzdGF0dXMuXG4gIHN0YXRpYyByZWRpcmVjdCAodXJsLCBzdGF0dXMgPSAzMDIpIHtcbiAgICBjb25zdCByZWxldmFudFJlYWxtID0geyBzZXR0aW5nc09iamVjdDoge30gfVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ1Jlc3BvbnNlLnJlZGlyZWN0JyB9KVxuXG4gICAgdXJsID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHVybClcbiAgICBzdGF0dXMgPSB3ZWJpZGwuY29udmVydGVyc1sndW5zaWduZWQgc2hvcnQnXShzdGF0dXMpXG5cbiAgICAvLyAxLiBMZXQgcGFyc2VkVVJMIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyB1cmwgd2l0aCBjdXJyZW50IHNldHRpbmdzXG4gICAgLy8gb2JqZWN0XHUyMDE5cyBBUEkgYmFzZSBVUkwuXG4gICAgLy8gMi4gSWYgcGFyc2VkVVJMIGlzIGZhaWx1cmUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgLy8gVE9ETzogYmFzZS1VUkw/XG4gICAgbGV0IHBhcnNlZFVSTFxuICAgIHRyeSB7XG4gICAgICBwYXJzZWRVUkwgPSBuZXcgVVJMKHVybCwgZ2V0R2xvYmFsT3JpZ2luKCkpXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICB0aHJvdyBPYmplY3QuYXNzaWduKG5ldyBUeXBlRXJyb3IoJ0ZhaWxlZCB0byBwYXJzZSBVUkwgZnJvbSAnICsgdXJsKSwge1xuICAgICAgICBjYXVzZTogZXJyXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDMuIElmIHN0YXR1cyBpcyBub3QgYSByZWRpcmVjdCBzdGF0dXMsIHRoZW4gdGhyb3cgYSBSYW5nZUVycm9yLlxuICAgIGlmICghcmVkaXJlY3RTdGF0dXNTZXQuaGFzKHN0YXR1cykpIHtcbiAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHN0YXR1cyBjb2RlICcgKyBzdGF0dXMpXG4gICAgfVxuXG4gICAgLy8gNC4gTGV0IHJlc3BvbnNlT2JqZWN0IGJlIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBSZXNwb25zZSBvYmplY3QsXG4gICAgLy8gZ2l2ZW4gYSBuZXcgcmVzcG9uc2UsIFwiaW1tdXRhYmxlXCIsIGFuZCB0aGlzXHUyMDE5cyByZWxldmFudCBSZWFsbS5cbiAgICBjb25zdCByZXNwb25zZU9iamVjdCA9IG5ldyBSZXNwb25zZSgpXG4gICAgcmVzcG9uc2VPYmplY3Rba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9ICdpbW11dGFibGUnXG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tSZWFsbV0gPSByZWxldmFudFJlYWxtXG5cbiAgICAvLyA1LiBTZXQgcmVzcG9uc2VPYmplY3RcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgdG8gc3RhdHVzLlxuICAgIHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0uc3RhdHVzID0gc3RhdHVzXG5cbiAgICAvLyA2LiBMZXQgdmFsdWUgYmUgcGFyc2VkVVJMLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQuXG4gICAgY29uc3QgdmFsdWUgPSBpc29tb3JwaGljRW5jb2RlKFVSTFNlcmlhbGl6ZXIocGFyc2VkVVJMKSlcblxuICAgIC8vIDcuIEFwcGVuZCBgTG9jYXRpb25gL3ZhbHVlIHRvIHJlc3BvbnNlT2JqZWN0XHUyMDE5cyByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXS5oZWFkZXJzTGlzdC5hcHBlbmQoJ2xvY2F0aW9uJywgdmFsdWUpXG5cbiAgICAvLyA4LiBSZXR1cm4gcmVzcG9uc2VPYmplY3QuXG4gICAgcmV0dXJuIHJlc3BvbnNlT2JqZWN0XG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLXJlc3BvbnNlXG4gIGNvbnN0cnVjdG9yIChib2R5ID0gbnVsbCwgaW5pdCA9IHt9KSB7XG4gICAgaWYgKGJvZHkgIT09IG51bGwpIHtcbiAgICAgIGJvZHkgPSB3ZWJpZGwuY29udmVydGVycy5Cb2R5SW5pdChib2R5KVxuICAgIH1cblxuICAgIGluaXQgPSB3ZWJpZGwuY29udmVydGVycy5SZXNwb25zZUluaXQoaW5pdClcblxuICAgIC8vIFRPRE9cbiAgICB0aGlzW2tSZWFsbV0gPSB7IHNldHRpbmdzT2JqZWN0OiB7fSB9XG5cbiAgICAvLyAxLiBTZXQgdGhpc1x1MjAxOXMgcmVzcG9uc2UgdG8gYSBuZXcgcmVzcG9uc2UuXG4gICAgdGhpc1trU3RhdGVdID0gbWFrZVJlc3BvbnNlKHt9KVxuXG4gICAgLy8gMi4gU2V0IHRoaXNcdTIwMTlzIGhlYWRlcnMgdG8gYSBuZXcgSGVhZGVycyBvYmplY3Qgd2l0aCB0aGlzXHUyMDE5cyByZWxldmFudFxuICAgIC8vIFJlYWxtLCB3aG9zZSBoZWFkZXIgbGlzdCBpcyB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QgYW5kIGd1YXJkXG4gICAgLy8gaXMgXCJyZXNwb25zZVwiLlxuICAgIHRoaXNba0hlYWRlcnNdID0gbmV3IEhlYWRlcnMoa0NvbnN0cnVjdClcbiAgICB0aGlzW2tIZWFkZXJzXVtrR3VhcmRdID0gJ3Jlc3BvbnNlJ1xuICAgIHRoaXNba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSB0aGlzW2tTdGF0ZV0uaGVhZGVyc0xpc3RcbiAgICB0aGlzW2tIZWFkZXJzXVtrUmVhbG1dID0gdGhpc1trUmVhbG1dXG5cbiAgICAvLyAzLiBMZXQgYm9keVdpdGhUeXBlIGJlIG51bGwuXG4gICAgbGV0IGJvZHlXaXRoVHlwZSA9IG51bGxcblxuICAgIC8vIDQuIElmIGJvZHkgaXMgbm9uLW51bGwsIHRoZW4gc2V0IGJvZHlXaXRoVHlwZSB0byB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgYm9keS5cbiAgICBpZiAoYm9keSAhPSBudWxsKSB7XG4gICAgICBjb25zdCBbZXh0cmFjdGVkQm9keSwgdHlwZV0gPSBleHRyYWN0Qm9keShib2R5KVxuICAgICAgYm9keVdpdGhUeXBlID0geyBib2R5OiBleHRyYWN0ZWRCb2R5LCB0eXBlIH1cbiAgICB9XG5cbiAgICAvLyA1LiBQZXJmb3JtIGluaXRpYWxpemUgYSByZXNwb25zZSBnaXZlbiB0aGlzLCBpbml0LCBhbmQgYm9keVdpdGhUeXBlLlxuICAgIGluaXRpYWxpemVSZXNwb25zZSh0aGlzLCBpbml0LCBib2R5V2l0aFR5cGUpXG4gIH1cblxuICAvLyBSZXR1cm5zIHJlc3BvbnNlXHUyMDE5cyB0eXBlLCBlLmcuLCBcImNvcnNcIi5cbiAgZ2V0IHR5cGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIHR5cGUgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIHR5cGUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS50eXBlXG4gIH1cblxuICAvLyBSZXR1cm5zIHJlc3BvbnNlXHUyMDE5cyBVUkwsIGlmIGl0IGhhcyBvbmU7IG90aGVyd2lzZSB0aGUgZW1wdHkgc3RyaW5nLlxuICBnZXQgdXJsICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIGNvbnN0IHVybExpc3QgPSB0aGlzW2tTdGF0ZV0udXJsTGlzdFxuXG4gICAgLy8gVGhlIHVybCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGUgZW1wdHkgc3RyaW5nIGlmIHRoaXNcdTIwMTlzXG4gICAgLy8gcmVzcG9uc2VcdTIwMTlzIFVSTCBpcyBudWxsOyBvdGhlcndpc2UgdGhpc1x1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIFVSTCxcbiAgICAvLyBzZXJpYWxpemVkIHdpdGggZXhjbHVkZSBmcmFnbWVudCBzZXQgdG8gdHJ1ZS5cbiAgICBjb25zdCB1cmwgPSB1cmxMaXN0W3VybExpc3QubGVuZ3RoIC0gMV0gPz8gbnVsbFxuXG4gICAgaWYgKHVybCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuICcnXG4gICAgfVxuXG4gICAgcmV0dXJuIFVSTFNlcmlhbGl6ZXIodXJsLCB0cnVlKVxuICB9XG5cbiAgLy8gUmV0dXJucyB3aGV0aGVyIHJlc3BvbnNlIHdhcyBvYnRhaW5lZCB0aHJvdWdoIGEgcmVkaXJlY3QuXG4gIGdldCByZWRpcmVjdGVkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIFRoZSByZWRpcmVjdGVkIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRydWUgaWYgdGhpc1x1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIFVSTFxuICAgIC8vIGxpc3QgaGFzIG1vcmUgdGhhbiBvbmUgaXRlbTsgb3RoZXJ3aXNlIGZhbHNlLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0udXJsTGlzdC5sZW5ndGggPiAxXG4gIH1cblxuICAvLyBSZXR1cm5zIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMuXG4gIGdldCBzdGF0dXMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIHN0YXR1cyBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgc3RhdHVzLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uc3RhdHVzXG4gIH1cblxuICAvLyBSZXR1cm5zIHdoZXRoZXIgcmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyBhbiBvayBzdGF0dXMuXG4gIGdldCBvayAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICAvLyBUaGUgb2sgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdHJ1ZSBpZiB0aGlzXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIGFuXG4gICAgLy8gb2sgc3RhdHVzOyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5zdGF0dXMgPj0gMjAwICYmIHRoaXNba1N0YXRlXS5zdGF0dXMgPD0gMjk5XG4gIH1cblxuICAvLyBSZXR1cm5zIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgbWVzc2FnZS5cbiAgZ2V0IHN0YXR1c1RleHQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgLy8gVGhlIHN0YXR1c1RleHQgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVzcG9uc2VcdTIwMTlzIHN0YXR1c1xuICAgIC8vIG1lc3NhZ2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5zdGF0dXNUZXh0XG4gIH1cblxuICAvLyBSZXR1cm5zIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXJzIGFzIEhlYWRlcnMuXG4gIGdldCBoZWFkZXJzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIFRoZSBoZWFkZXJzIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIGhlYWRlcnMuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNdXG4gIH1cblxuICBnZXQgYm9keSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVzcG9uc2UpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmJvZHkgPyB0aGlzW2tTdGF0ZV0uYm9keS5zdHJlYW0gOiBudWxsXG4gIH1cblxuICBnZXQgYm9keVVzZWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlc3BvbnNlKVxuXG4gICAgcmV0dXJuICEhdGhpc1trU3RhdGVdLmJvZHkgJiYgdXRpbC5pc0Rpc3R1cmJlZCh0aGlzW2tTdGF0ZV0uYm9keS5zdHJlYW0pXG4gIH1cblxuICAvLyBSZXR1cm5zIGEgY2xvbmUgb2YgcmVzcG9uc2UuXG4gIGNsb25lICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXNwb25zZSlcblxuICAgIC8vIDEuIElmIHRoaXMgaXMgdW51c2FibGUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHRoaXMuYm9keVVzZWQgfHwgKHRoaXMuYm9keSAmJiB0aGlzLmJvZHkubG9ja2VkKSkge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdSZXNwb25zZS5jbG9uZScsXG4gICAgICAgIG1lc3NhZ2U6ICdCb2R5IGhhcyBhbHJlYWR5IGJlZW4gY29uc3VtZWQuJ1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBMZXQgY2xvbmVkUmVzcG9uc2UgYmUgdGhlIHJlc3VsdCBvZiBjbG9uaW5nIHRoaXNcdTIwMTlzIHJlc3BvbnNlLlxuICAgIGNvbnN0IGNsb25lZFJlc3BvbnNlID0gY2xvbmVSZXNwb25zZSh0aGlzW2tTdGF0ZV0pXG5cbiAgICAvLyAzLiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhIFJlc3BvbnNlIG9iamVjdCwgZ2l2ZW5cbiAgICAvLyBjbG9uZWRSZXNwb25zZSwgdGhpc1x1MjAxOXMgaGVhZGVyc1x1MjAxOXMgZ3VhcmQsIGFuZCB0aGlzXHUyMDE5cyByZWxldmFudCBSZWFsbS5cbiAgICBjb25zdCBjbG9uZWRSZXNwb25zZU9iamVjdCA9IG5ldyBSZXNwb25zZSgpXG4gICAgY2xvbmVkUmVzcG9uc2VPYmplY3Rba1N0YXRlXSA9IGNsb25lZFJlc3BvbnNlXG4gICAgY2xvbmVkUmVzcG9uc2VPYmplY3Rba1JlYWxtXSA9IHRoaXNba1JlYWxtXVxuICAgIGNsb25lZFJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gY2xvbmVkUmVzcG9uc2UuaGVhZGVyc0xpc3RcbiAgICBjbG9uZWRSZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0d1YXJkXSA9IHRoaXNba0hlYWRlcnNdW2tHdWFyZF1cbiAgICBjbG9uZWRSZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba1JlYWxtXSA9IHRoaXNba0hlYWRlcnNdW2tSZWFsbV1cblxuICAgIHJldHVybiBjbG9uZWRSZXNwb25zZU9iamVjdFxuICB9XG59XG5cbm1peGluQm9keShSZXNwb25zZSlcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoUmVzcG9uc2UucHJvdG90eXBlLCB7XG4gIHR5cGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHVybDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc3RhdHVzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvazoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVkaXJlY3RlZDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgc3RhdHVzVGV4dDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaGVhZGVyczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY2xvbmU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJvZHk6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJvZHlVc2VkOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnUmVzcG9uc2UnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZXNwb25zZSwge1xuICBqc29uOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWRpcmVjdDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHlcbn0pXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXJlc3BvbnNlLWNsb25lXG5mdW5jdGlvbiBjbG9uZVJlc3BvbnNlIChyZXNwb25zZSkge1xuICAvLyBUbyBjbG9uZSBhIHJlc3BvbnNlIHJlc3BvbnNlLCBydW4gdGhlc2Ugc3RlcHM6XG5cbiAgLy8gMS4gSWYgcmVzcG9uc2UgaXMgYSBmaWx0ZXJlZCByZXNwb25zZSwgdGhlbiByZXR1cm4gYSBuZXcgaWRlbnRpY2FsXG4gIC8vIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIGludGVybmFsIHJlc3BvbnNlIGlzIGEgY2xvbmUgb2YgcmVzcG9uc2VcdTIwMTlzXG4gIC8vIGludGVybmFsIHJlc3BvbnNlLlxuICBpZiAocmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZSkge1xuICAgIHJldHVybiBmaWx0ZXJSZXNwb25zZShcbiAgICAgIGNsb25lUmVzcG9uc2UocmVzcG9uc2UuaW50ZXJuYWxSZXNwb25zZSksXG4gICAgICByZXNwb25zZS50eXBlXG4gICAgKVxuICB9XG5cbiAgLy8gMi4gTGV0IG5ld1Jlc3BvbnNlIGJlIGEgY29weSBvZiByZXNwb25zZSwgZXhjZXB0IGZvciBpdHMgYm9keS5cbiAgY29uc3QgbmV3UmVzcG9uc2UgPSBtYWtlUmVzcG9uc2UoeyAuLi5yZXNwb25zZSwgYm9keTogbnVsbCB9KVxuXG4gIC8vIDMuIElmIHJlc3BvbnNlXHUyMDE5cyBib2R5IGlzIG5vbi1udWxsLCB0aGVuIHNldCBuZXdSZXNwb25zZVx1MjAxOXMgYm9keSB0byB0aGVcbiAgLy8gcmVzdWx0IG9mIGNsb25pbmcgcmVzcG9uc2VcdTIwMTlzIGJvZHkuXG4gIGlmIChyZXNwb25zZS5ib2R5ICE9IG51bGwpIHtcbiAgICBuZXdSZXNwb25zZS5ib2R5ID0gY2xvbmVCb2R5KHJlc3BvbnNlLmJvZHkpXG4gIH1cblxuICAvLyA0LiBSZXR1cm4gbmV3UmVzcG9uc2UuXG4gIHJldHVybiBuZXdSZXNwb25zZVxufVxuXG5mdW5jdGlvbiBtYWtlUmVzcG9uc2UgKGluaXQpIHtcbiAgcmV0dXJuIHtcbiAgICBhYm9ydGVkOiBmYWxzZSxcbiAgICByYW5nZVJlcXVlc3RlZDogZmFsc2UsXG4gICAgdGltaW5nQWxsb3dQYXNzZWQ6IGZhbHNlLFxuICAgIHJlcXVlc3RJbmNsdWRlc0NyZWRlbnRpYWxzOiBmYWxzZSxcbiAgICB0eXBlOiAnZGVmYXVsdCcsXG4gICAgc3RhdHVzOiAyMDAsXG4gICAgdGltaW5nSW5mbzogbnVsbCxcbiAgICBjYWNoZVN0YXRlOiAnJyxcbiAgICBzdGF0dXNUZXh0OiAnJyxcbiAgICAuLi5pbml0LFxuICAgIGhlYWRlcnNMaXN0OiBpbml0LmhlYWRlcnNMaXN0XG4gICAgICA/IG5ldyBIZWFkZXJzTGlzdChpbml0LmhlYWRlcnNMaXN0KVxuICAgICAgOiBuZXcgSGVhZGVyc0xpc3QoKSxcbiAgICB1cmxMaXN0OiBpbml0LnVybExpc3QgPyBbLi4uaW5pdC51cmxMaXN0XSA6IFtdXG4gIH1cbn1cblxuZnVuY3Rpb24gbWFrZU5ldHdvcmtFcnJvciAocmVhc29uKSB7XG4gIGNvbnN0IGlzRXJyb3IgPSBpc0Vycm9yTGlrZShyZWFzb24pXG4gIHJldHVybiBtYWtlUmVzcG9uc2Uoe1xuICAgIHR5cGU6ICdlcnJvcicsXG4gICAgc3RhdHVzOiAwLFxuICAgIGVycm9yOiBpc0Vycm9yXG4gICAgICA/IHJlYXNvblxuICAgICAgOiBuZXcgRXJyb3IocmVhc29uID8gU3RyaW5nKHJlYXNvbikgOiByZWFzb24pLFxuICAgIGFib3J0ZWQ6IHJlYXNvbiAmJiByZWFzb24ubmFtZSA9PT0gJ0Fib3J0RXJyb3InXG4gIH0pXG59XG5cbmZ1bmN0aW9uIG1ha2VGaWx0ZXJlZFJlc3BvbnNlIChyZXNwb25zZSwgc3RhdGUpIHtcbiAgc3RhdGUgPSB7XG4gICAgaW50ZXJuYWxSZXNwb25zZTogcmVzcG9uc2UsXG4gICAgLi4uc3RhdGVcbiAgfVxuXG4gIHJldHVybiBuZXcgUHJveHkocmVzcG9uc2UsIHtcbiAgICBnZXQgKHRhcmdldCwgcCkge1xuICAgICAgcmV0dXJuIHAgaW4gc3RhdGUgPyBzdGF0ZVtwXSA6IHRhcmdldFtwXVxuICAgIH0sXG4gICAgc2V0ICh0YXJnZXQsIHAsIHZhbHVlKSB7XG4gICAgICBhc3NlcnQoIShwIGluIHN0YXRlKSlcbiAgICAgIHRhcmdldFtwXSA9IHZhbHVlXG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfSlcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZmlsdGVyZWQtcmVzcG9uc2VcbmZ1bmN0aW9uIGZpbHRlclJlc3BvbnNlIChyZXNwb25zZSwgdHlwZSkge1xuICAvLyBTZXQgcmVzcG9uc2UgdG8gdGhlIGZvbGxvd2luZyBmaWx0ZXJlZCByZXNwb25zZSB3aXRoIHJlc3BvbnNlIGFzIGl0c1xuICAvLyBpbnRlcm5hbCByZXNwb25zZSwgZGVwZW5kaW5nIG9uIHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nOlxuICBpZiAodHlwZSA9PT0gJ2Jhc2ljJykge1xuICAgIC8vIEEgYmFzaWMgZmlsdGVyZWQgcmVzcG9uc2UgaXMgYSBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSB0eXBlIGlzIFwiYmFzaWNcIlxuICAgIC8vIGFuZCBoZWFkZXIgbGlzdCBleGNsdWRlcyBhbnkgaGVhZGVycyBpbiBpbnRlcm5hbCByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3RcbiAgICAvLyB3aG9zZSBuYW1lIGlzIGEgZm9yYmlkZGVuIHJlc3BvbnNlLWhlYWRlciBuYW1lLlxuXG4gICAgLy8gTm90ZTogdW5kaWNpIGRvZXMgbm90IGltcGxlbWVudCBmb3JiaWRkZW4gcmVzcG9uc2UtaGVhZGVyIG5hbWVzXG4gICAgcmV0dXJuIG1ha2VGaWx0ZXJlZFJlc3BvbnNlKHJlc3BvbnNlLCB7XG4gICAgICB0eXBlOiAnYmFzaWMnLFxuICAgICAgaGVhZGVyc0xpc3Q6IHJlc3BvbnNlLmhlYWRlcnNMaXN0XG4gICAgfSlcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnY29ycycpIHtcbiAgICAvLyBBIENPUlMgZmlsdGVyZWQgcmVzcG9uc2UgaXMgYSBmaWx0ZXJlZCByZXNwb25zZSB3aG9zZSB0eXBlIGlzIFwiY29yc1wiXG4gICAgLy8gYW5kIGhlYWRlciBsaXN0IGV4Y2x1ZGVzIGFueSBoZWFkZXJzIGluIGludGVybmFsIHJlc3BvbnNlXHUyMDE5cyBoZWFkZXJcbiAgICAvLyBsaXN0IHdob3NlIG5hbWUgaXMgbm90IGEgQ09SUy1zYWZlbGlzdGVkIHJlc3BvbnNlLWhlYWRlciBuYW1lLCBnaXZlblxuICAgIC8vIGludGVybmFsIHJlc3BvbnNlXHUyMDE5cyBDT1JTLWV4cG9zZWQgaGVhZGVyLW5hbWUgbGlzdC5cblxuICAgIC8vIE5vdGU6IHVuZGljaSBkb2VzIG5vdCBpbXBsZW1lbnQgQ09SUy1zYWZlbGlzdGVkIHJlc3BvbnNlLWhlYWRlciBuYW1lc1xuICAgIHJldHVybiBtYWtlRmlsdGVyZWRSZXNwb25zZShyZXNwb25zZSwge1xuICAgICAgdHlwZTogJ2NvcnMnLFxuICAgICAgaGVhZGVyc0xpc3Q6IHJlc3BvbnNlLmhlYWRlcnNMaXN0XG4gICAgfSlcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnb3BhcXVlJykge1xuICAgIC8vIEFuIG9wYXF1ZSBmaWx0ZXJlZCByZXNwb25zZSBpcyBhIGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIHR5cGUgaXNcbiAgICAvLyBcIm9wYXF1ZVwiLCBVUkwgbGlzdCBpcyB0aGUgZW1wdHkgbGlzdCwgc3RhdHVzIGlzIDAsIHN0YXR1cyBtZXNzYWdlXG4gICAgLy8gaXMgdGhlIGVtcHR5IGJ5dGUgc2VxdWVuY2UsIGhlYWRlciBsaXN0IGlzIGVtcHR5LCBhbmQgYm9keSBpcyBudWxsLlxuXG4gICAgcmV0dXJuIG1ha2VGaWx0ZXJlZFJlc3BvbnNlKHJlc3BvbnNlLCB7XG4gICAgICB0eXBlOiAnb3BhcXVlJyxcbiAgICAgIHVybExpc3Q6IE9iamVjdC5mcmVlemUoW10pLFxuICAgICAgc3RhdHVzOiAwLFxuICAgICAgc3RhdHVzVGV4dDogJycsXG4gICAgICBib2R5OiBudWxsXG4gICAgfSlcbiAgfSBlbHNlIGlmICh0eXBlID09PSAnb3BhcXVlcmVkaXJlY3QnKSB7XG4gICAgLy8gQW4gb3BhcXVlLXJlZGlyZWN0IGZpbHRlcmVkIHJlc3BvbnNlIGlzIGEgZmlsdGVyZWQgcmVzcG9uc2Ugd2hvc2UgdHlwZVxuICAgIC8vIGlzIFwib3BhcXVlcmVkaXJlY3RcIiwgc3RhdHVzIGlzIDAsIHN0YXR1cyBtZXNzYWdlIGlzIHRoZSBlbXB0eSBieXRlXG4gICAgLy8gc2VxdWVuY2UsIGhlYWRlciBsaXN0IGlzIGVtcHR5LCBhbmQgYm9keSBpcyBudWxsLlxuXG4gICAgcmV0dXJuIG1ha2VGaWx0ZXJlZFJlc3BvbnNlKHJlc3BvbnNlLCB7XG4gICAgICB0eXBlOiAnb3BhcXVlcmVkaXJlY3QnLFxuICAgICAgc3RhdHVzOiAwLFxuICAgICAgc3RhdHVzVGV4dDogJycsXG4gICAgICBoZWFkZXJzTGlzdDogW10sXG4gICAgICBib2R5OiBudWxsXG4gICAgfSlcbiAgfSBlbHNlIHtcbiAgICBhc3NlcnQoZmFsc2UpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2FwcHJvcHJpYXRlLW5ldHdvcmstZXJyb3JcbmZ1bmN0aW9uIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvciAoZmV0Y2hQYXJhbXMsIGVyciA9IG51bGwpIHtcbiAgLy8gMS4gQXNzZXJ0OiBmZXRjaFBhcmFtcyBpcyBjYW5jZWxlZC5cbiAgYXNzZXJ0KGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSlcblxuICAvLyAyLiBSZXR1cm4gYW4gYWJvcnRlZCBuZXR3b3JrIGVycm9yIGlmIGZldGNoUGFyYW1zIGlzIGFib3J0ZWQ7XG4gIC8vIG90aGVyd2lzZSByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICByZXR1cm4gaXNBYm9ydGVkKGZldGNoUGFyYW1zKVxuICAgID8gbWFrZU5ldHdvcmtFcnJvcihPYmplY3QuYXNzaWduKG5ldyBET01FeGNlcHRpb24oJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuJywgJ0Fib3J0RXJyb3InKSwgeyBjYXVzZTogZXJyIH0pKVxuICAgIDogbWFrZU5ldHdvcmtFcnJvcihPYmplY3QuYXNzaWduKG5ldyBET01FeGNlcHRpb24oJ1JlcXVlc3Qgd2FzIGNhbmNlbGxlZC4nKSwgeyBjYXVzZTogZXJyIH0pKVxufVxuXG4vLyBodHRwczovL3doYXRwci5vcmcvZmV0Y2gvMTM5Mi5odG1sI2luaXRpYWxpemUtYS1yZXNwb25zZVxuZnVuY3Rpb24gaW5pdGlhbGl6ZVJlc3BvbnNlIChyZXNwb25zZSwgaW5pdCwgYm9keSkge1xuICAvLyAxLiBJZiBpbml0W1wic3RhdHVzXCJdIGlzIG5vdCBpbiB0aGUgcmFuZ2UgMjAwIHRvIDU5OSwgaW5jbHVzaXZlLCB0aGVuXG4gIC8vICAgIHRocm93IGEgUmFuZ2VFcnJvci5cbiAgaWYgKGluaXQuc3RhdHVzICE9PSBudWxsICYmIChpbml0LnN0YXR1cyA8IDIwMCB8fCBpbml0LnN0YXR1cyA+IDU5OSkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignaW5pdFtcInN0YXR1c1wiXSBtdXN0IGJlIGluIHRoZSByYW5nZSBvZiAyMDAgdG8gNTk5LCBpbmNsdXNpdmUuJylcbiAgfVxuXG4gIC8vIDIuIElmIGluaXRbXCJzdGF0dXNUZXh0XCJdIGRvZXMgbm90IG1hdGNoIHRoZSByZWFzb24tcGhyYXNlIHRva2VuIHByb2R1Y3Rpb24sXG4gIC8vICAgIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gIGlmICgnc3RhdHVzVGV4dCcgaW4gaW5pdCAmJiBpbml0LnN0YXR1c1RleHQgIT0gbnVsbCkge1xuICAgIC8vIFNlZSwgaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM3MjMwI3NlY3Rpb24tMy4xLjI6XG4gICAgLy8gICByZWFzb24tcGhyYXNlICA9ICooIEhUQUIgLyBTUCAvIFZDSEFSIC8gb2JzLXRleHQgKVxuICAgIGlmICghaXNWYWxpZFJlYXNvblBocmFzZShTdHJpbmcoaW5pdC5zdGF0dXNUZXh0KSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgc3RhdHVzVGV4dCcpXG4gICAgfVxuICB9XG5cbiAgLy8gMy4gU2V0IHJlc3BvbnNlXHUyMDE5cyByZXNwb25zZVx1MjAxOXMgc3RhdHVzIHRvIGluaXRbXCJzdGF0dXNcIl0uXG4gIGlmICgnc3RhdHVzJyBpbiBpbml0ICYmIGluaXQuc3RhdHVzICE9IG51bGwpIHtcbiAgICByZXNwb25zZVtrU3RhdGVdLnN0YXR1cyA9IGluaXQuc3RhdHVzXG4gIH1cblxuICAvLyA0LiBTZXQgcmVzcG9uc2VcdTIwMTlzIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgbWVzc2FnZSB0byBpbml0W1wic3RhdHVzVGV4dFwiXS5cbiAgaWYgKCdzdGF0dXNUZXh0JyBpbiBpbml0ICYmIGluaXQuc3RhdHVzVGV4dCAhPSBudWxsKSB7XG4gICAgcmVzcG9uc2Vba1N0YXRlXS5zdGF0dXNUZXh0ID0gaW5pdC5zdGF0dXNUZXh0XG4gIH1cblxuICAvLyA1LiBJZiBpbml0W1wiaGVhZGVyc1wiXSBleGlzdHMsIHRoZW4gZmlsbCByZXNwb25zZVx1MjAxOXMgaGVhZGVycyB3aXRoIGluaXRbXCJoZWFkZXJzXCJdLlxuICBpZiAoJ2hlYWRlcnMnIGluIGluaXQgJiYgaW5pdC5oZWFkZXJzICE9IG51bGwpIHtcbiAgICBmaWxsKHJlc3BvbnNlW2tIZWFkZXJzXSwgaW5pdC5oZWFkZXJzKVxuICB9XG5cbiAgLy8gNi4gSWYgYm9keSB3YXMgZ2l2ZW4sIHRoZW46XG4gIGlmIChib2R5KSB7XG4gICAgLy8gMS4gSWYgcmVzcG9uc2UncyBzdGF0dXMgaXMgYSBudWxsIGJvZHkgc3RhdHVzLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChudWxsQm9keVN0YXR1cy5pbmNsdWRlcyhyZXNwb25zZS5zdGF0dXMpKSB7XG4gICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgIGhlYWRlcjogJ1Jlc3BvbnNlIGNvbnN0cnVjdG9yJyxcbiAgICAgICAgbWVzc2FnZTogJ0ludmFsaWQgcmVzcG9uc2Ugc3RhdHVzIGNvZGUgJyArIHJlc3BvbnNlLnN0YXR1c1xuICAgICAgfSlcbiAgICB9XG5cbiAgICAvLyAyLiBTZXQgcmVzcG9uc2UncyBib2R5IHRvIGJvZHkncyBib2R5LlxuICAgIHJlc3BvbnNlW2tTdGF0ZV0uYm9keSA9IGJvZHkuYm9keVxuXG4gICAgLy8gMy4gSWYgYm9keSdzIHR5cGUgaXMgbm9uLW51bGwgYW5kIHJlc3BvbnNlJ3MgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpblxuICAgIC8vICAgIGBDb250ZW50LVR5cGVgLCB0aGVuIGFwcGVuZCAoYENvbnRlbnQtVHlwZWAsIGJvZHkncyB0eXBlKSB0byByZXNwb25zZSdzIGhlYWRlciBsaXN0LlxuICAgIGlmIChib2R5LnR5cGUgIT0gbnVsbCAmJiAhcmVzcG9uc2Vba1N0YXRlXS5oZWFkZXJzTGlzdC5jb250YWlucygnQ29udGVudC1UeXBlJykpIHtcbiAgICAgIHJlc3BvbnNlW2tTdGF0ZV0uaGVhZGVyc0xpc3QuYXBwZW5kKCdjb250ZW50LXR5cGUnLCBib2R5LnR5cGUpXG4gICAgfVxuICB9XG59XG5cbndlYmlkbC5jb252ZXJ0ZXJzLlJlYWRhYmxlU3RyZWFtID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihcbiAgUmVhZGFibGVTdHJlYW1cbilcblxud2ViaWRsLmNvbnZlcnRlcnMuRm9ybURhdGEgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKFxuICBGb3JtRGF0YVxuKVxuXG53ZWJpZGwuY29udmVydGVycy5VUkxTZWFyY2hQYXJhbXMgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKFxuICBVUkxTZWFyY2hQYXJhbXNcbilcblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3R5cGVkZWZkZWYteG1saHR0cHJlcXVlc3Rib2R5aW5pdFxud2ViaWRsLmNvbnZlcnRlcnMuWE1MSHR0cFJlcXVlc3RCb2R5SW5pdCA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmICh0eXBlb2YgViA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYpXG4gIH1cblxuICBpZiAoaXNCbG9iTGlrZShWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CbG9iKFYsIHsgc3RyaWN0OiBmYWxzZSB9KVxuICB9XG5cbiAgaWYgKHR5cGVzLmlzQXJyYXlCdWZmZXIoVikgfHwgdHlwZXMuaXNUeXBlZEFycmF5KFYpIHx8IHR5cGVzLmlzRGF0YVZpZXcoVikpIHtcbiAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQnVmZmVyU291cmNlKFYpXG4gIH1cblxuICBpZiAodXRpbC5pc0Zvcm1EYXRhTGlrZShWKSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5Gb3JtRGF0YShWLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgfVxuXG4gIGlmIChWIGluc3RhbmNlb2YgVVJMU2VhcmNoUGFyYW1zKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlVSTFNlYXJjaFBhcmFtcyhWKVxuICB9XG5cbiAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhWKVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jYm9keWluaXRcbndlYmlkbC5jb252ZXJ0ZXJzLkJvZHlJbml0ID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKFYgaW5zdGFuY2VvZiBSZWFkYWJsZVN0cmVhbSkge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5SZWFkYWJsZVN0cmVhbShWKVxuICB9XG5cbiAgLy8gTm90ZTogdGhlIHNwZWMgZG9lc24ndCBpbmNsdWRlIGFzeW5jIGl0ZXJhYmxlcyxcbiAgLy8gdGhpcyBpcyBhbiB1bmRpY2kgZXh0ZW5zaW9uLlxuICBpZiAoVj8uW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSkge1xuICAgIHJldHVybiBWXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuWE1MSHR0cFJlcXVlc3RCb2R5SW5pdChWKVxufVxuXG53ZWJpZGwuY29udmVydGVycy5SZXNwb25zZUluaXQgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBrZXk6ICdzdGF0dXMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIHNob3J0J10sXG4gICAgZGVmYXVsdFZhbHVlOiAyMDBcbiAgfSxcbiAge1xuICAgIGtleTogJ3N0YXR1c1RleHQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuQnl0ZVN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdoZWFkZXJzJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkhlYWRlcnNJbml0XG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBtYWtlTmV0d29ya0Vycm9yLFxuICBtYWtlUmVzcG9uc2UsXG4gIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcixcbiAgZmlsdGVyUmVzcG9uc2UsXG4gIFJlc3BvbnNlLFxuICBjbG9uZVJlc3BvbnNlXG59XG4iLCAiLyogZ2xvYmFscyBBYm9ydENvbnRyb2xsZXIgKi9cblxuJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgZXh0cmFjdEJvZHksIG1peGluQm9keSwgY2xvbmVCb2R5IH0gPSByZXF1aXJlKCcuL2JvZHknKVxuY29uc3QgeyBIZWFkZXJzLCBmaWxsOiBmaWxsSGVhZGVycywgSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4vaGVhZGVycycpXG5jb25zdCB7IEZpbmFsaXphdGlvblJlZ2lzdHJ5IH0gPSByZXF1aXJlKCcuLi9jb21wYXQvZGlzcGF0Y2hlci13ZWFrcmVmJykoKVxuY29uc3QgdXRpbCA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7XG4gIGlzVmFsaWRIVFRQVG9rZW4sXG4gIHNhbWVPcmlnaW4sXG4gIG5vcm1hbGl6ZU1ldGhvZCxcbiAgbWFrZVBvbGljeUNvbnRhaW5lcixcbiAgbm9ybWFsaXplTWV0aG9kUmVjb3JkXG59ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHtcbiAgZm9yYmlkZGVuTWV0aG9kc1NldCxcbiAgY29yc1NhZmVMaXN0ZWRNZXRob2RzU2V0LFxuICByZWZlcnJlclBvbGljeSxcbiAgcmVxdWVzdFJlZGlyZWN0LFxuICByZXF1ZXN0TW9kZSxcbiAgcmVxdWVzdENyZWRlbnRpYWxzLFxuICByZXF1ZXN0Q2FjaGUsXG4gIHJlcXVlc3REdXBsZXhcbn0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHV0aWxcbmNvbnN0IHsga0hlYWRlcnMsIGtTaWduYWwsIGtTdGF0ZSwga0d1YXJkLCBrUmVhbG0gfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi93ZWJpZGwnKVxuY29uc3QgeyBnZXRHbG9iYWxPcmlnaW4gfSA9IHJlcXVpcmUoJy4vZ2xvYmFsJylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi9kYXRhVVJMJylcbmNvbnN0IHsga0hlYWRlcnNMaXN0LCBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgZ2V0TWF4TGlzdGVuZXJzLCBzZXRNYXhMaXN0ZW5lcnMsIGdldEV2ZW50TGlzdGVuZXJzLCBkZWZhdWx0TWF4TGlzdGVuZXJzIH0gPSByZXF1aXJlKCdldmVudHMnKVxuXG5sZXQgVHJhbnNmb3JtU3RyZWFtID0gZ2xvYmFsVGhpcy5UcmFuc2Zvcm1TdHJlYW1cblxuY29uc3Qga0Fib3J0Q29udHJvbGxlciA9IFN5bWJvbCgnYWJvcnRDb250cm9sbGVyJylcblxuY29uc3QgcmVxdWVzdEZpbmFsaXplciA9IG5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeSgoeyBzaWduYWwsIGFib3J0IH0pID0+IHtcbiAgc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgYWJvcnQpXG59KVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdC1jbGFzc1xuY2xhc3MgUmVxdWVzdCB7XG4gIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNkb20tcmVxdWVzdFxuICBjb25zdHJ1Y3RvciAoaW5wdXQsIGluaXQgPSB7fSkge1xuICAgIGlmIChpbnB1dCA9PT0ga0NvbnN0cnVjdCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ1JlcXVlc3QgY29uc3RydWN0b3InIH0pXG5cbiAgICBpbnB1dCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKGlucHV0KVxuICAgIGluaXQgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5pdChpbml0KVxuXG4gICAgLy8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvd2ViYXBwYXBpcy5odG1sI2Vudmlyb25tZW50LXNldHRpbmdzLW9iamVjdFxuICAgIHRoaXNba1JlYWxtXSA9IHtcbiAgICAgIHNldHRpbmdzT2JqZWN0OiB7XG4gICAgICAgIGJhc2VVcmw6IGdldEdsb2JhbE9yaWdpbigpLFxuICAgICAgICBnZXQgb3JpZ2luICgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5iYXNlVXJsPy5vcmlnaW5cbiAgICAgICAgfSxcbiAgICAgICAgcG9saWN5Q29udGFpbmVyOiBtYWtlUG9saWN5Q29udGFpbmVyKClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBudWxsLlxuICAgIGxldCByZXF1ZXN0ID0gbnVsbFxuXG4gICAgLy8gMi4gTGV0IGZhbGxiYWNrTW9kZSBiZSBudWxsLlxuICAgIGxldCBmYWxsYmFja01vZGUgPSBudWxsXG5cbiAgICAvLyAzLiBMZXQgYmFzZVVSTCBiZSB0aGlzXHUyMDE5cyByZWxldmFudCBzZXR0aW5ncyBvYmplY3RcdTIwMTlzIEFQSSBiYXNlIFVSTC5cbiAgICBjb25zdCBiYXNlVXJsID0gdGhpc1trUmVhbG1dLnNldHRpbmdzT2JqZWN0LmJhc2VVcmxcblxuICAgIC8vIDQuIExldCBzaWduYWwgYmUgbnVsbC5cbiAgICBsZXQgc2lnbmFsID0gbnVsbFxuXG4gICAgLy8gNS4gSWYgaW5wdXQgaXMgYSBzdHJpbmcsIHRoZW46XG4gICAgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIC8vIDEuIExldCBwYXJzZWRVUkwgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIGlucHV0IHdpdGggYmFzZVVSTC5cbiAgICAgIC8vIDIuIElmIHBhcnNlZFVSTCBpcyBmYWlsdXJlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgbGV0IHBhcnNlZFVSTFxuICAgICAgdHJ5IHtcbiAgICAgICAgcGFyc2VkVVJMID0gbmV3IFVSTChpbnB1dCwgYmFzZVVybClcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGYWlsZWQgdG8gcGFyc2UgVVJMIGZyb20gJyArIGlucHV0LCB7IGNhdXNlOiBlcnIgfSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gSWYgcGFyc2VkVVJMIGluY2x1ZGVzIGNyZWRlbnRpYWxzLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKHBhcnNlZFVSTC51c2VybmFtZSB8fCBwYXJzZWRVUkwucGFzc3dvcmQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnUmVxdWVzdCBjYW5ub3QgYmUgY29uc3RydWN0ZWQgZnJvbSBhIFVSTCB0aGF0IGluY2x1ZGVzIGNyZWRlbnRpYWxzOiAnICtcbiAgICAgICAgICAgIGlucHV0XG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gNC4gU2V0IHJlcXVlc3QgdG8gYSBuZXcgcmVxdWVzdCB3aG9zZSBVUkwgaXMgcGFyc2VkVVJMLlxuICAgICAgcmVxdWVzdCA9IG1ha2VSZXF1ZXN0KHsgdXJsTGlzdDogW3BhcnNlZFVSTF0gfSlcblxuICAgICAgLy8gNS4gU2V0IGZhbGxiYWNrTW9kZSB0byBcImNvcnNcIi5cbiAgICAgIGZhbGxiYWNrTW9kZSA9ICdjb3JzJ1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyA2LiBPdGhlcndpc2U6XG5cbiAgICAgIC8vIDcuIEFzc2VydDogaW5wdXQgaXMgYSBSZXF1ZXN0IG9iamVjdC5cbiAgICAgIGFzc2VydChpbnB1dCBpbnN0YW5jZW9mIFJlcXVlc3QpXG5cbiAgICAgIC8vIDguIFNldCByZXF1ZXN0IHRvIGlucHV0XHUyMDE5cyByZXF1ZXN0LlxuICAgICAgcmVxdWVzdCA9IGlucHV0W2tTdGF0ZV1cblxuICAgICAgLy8gOS4gU2V0IHNpZ25hbCB0byBpbnB1dFx1MjAxOXMgc2lnbmFsLlxuICAgICAgc2lnbmFsID0gaW5wdXRba1NpZ25hbF1cbiAgICB9XG5cbiAgICAvLyA3LiBMZXQgb3JpZ2luIGJlIHRoaXNcdTIwMTlzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdFx1MjAxOXMgb3JpZ2luLlxuICAgIGNvbnN0IG9yaWdpbiA9IHRoaXNba1JlYWxtXS5zZXR0aW5nc09iamVjdC5vcmlnaW5cblxuICAgIC8vIDguIExldCB3aW5kb3cgYmUgXCJjbGllbnRcIi5cbiAgICBsZXQgd2luZG93ID0gJ2NsaWVudCdcblxuICAgIC8vIDkuIElmIHJlcXVlc3RcdTIwMTlzIHdpbmRvdyBpcyBhbiBlbnZpcm9ubWVudCBzZXR0aW5ncyBvYmplY3QgYW5kIGl0cyBvcmlnaW5cbiAgICAvLyBpcyBzYW1lIG9yaWdpbiB3aXRoIG9yaWdpbiwgdGhlbiBzZXQgd2luZG93IHRvIHJlcXVlc3RcdTIwMTlzIHdpbmRvdy5cbiAgICBpZiAoXG4gICAgICByZXF1ZXN0LndpbmRvdz8uY29uc3RydWN0b3I/Lm5hbWUgPT09ICdFbnZpcm9ubWVudFNldHRpbmdzT2JqZWN0JyAmJlxuICAgICAgc2FtZU9yaWdpbihyZXF1ZXN0LndpbmRvdywgb3JpZ2luKVxuICAgICkge1xuICAgICAgd2luZG93ID0gcmVxdWVzdC53aW5kb3dcbiAgICB9XG5cbiAgICAvLyAxMC4gSWYgaW5pdFtcIndpbmRvd1wiXSBleGlzdHMgYW5kIGlzIG5vbi1udWxsLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChpbml0LndpbmRvdyAhPSBudWxsKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAnd2luZG93JyBvcHRpb24gJyR7d2luZG93fScgbXVzdCBiZSBudWxsYClcbiAgICB9XG5cbiAgICAvLyAxMS4gSWYgaW5pdFtcIndpbmRvd1wiXSBleGlzdHMsIHRoZW4gc2V0IHdpbmRvdyB0byBcIm5vLXdpbmRvd1wiLlxuICAgIGlmICgnd2luZG93JyBpbiBpbml0KSB7XG4gICAgICB3aW5kb3cgPSAnbm8td2luZG93J1xuICAgIH1cblxuICAgIC8vIDEyLiBTZXQgcmVxdWVzdCB0byBhIG5ldyByZXF1ZXN0IHdpdGggdGhlIGZvbGxvd2luZyBwcm9wZXJ0aWVzOlxuICAgIHJlcXVlc3QgPSBtYWtlUmVxdWVzdCh7XG4gICAgICAvLyBVUkwgcmVxdWVzdFx1MjAxOXMgVVJMLlxuICAgICAgLy8gdW5kaWNpIGltcGxlbWVudGF0aW9uIG5vdGU6IHRoaXMgaXMgc2V0IGFzIHRoZSBmaXJzdCBpdGVtIGluIHJlcXVlc3QncyB1cmxMaXN0IGluIG1ha2VSZXF1ZXN0XG4gICAgICAvLyBtZXRob2QgcmVxdWVzdFx1MjAxOXMgbWV0aG9kLlxuICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgIC8vIGhlYWRlciBsaXN0IEEgY29weSBvZiByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICAgIC8vIHVuZGljaSBpbXBsZW1lbnRhdGlvbiBub3RlOiBoZWFkZXJzTGlzdCBpcyBjbG9uZWQgaW4gbWFrZVJlcXVlc3RcbiAgICAgIGhlYWRlcnNMaXN0OiByZXF1ZXN0LmhlYWRlcnNMaXN0LFxuICAgICAgLy8gdW5zYWZlLXJlcXVlc3QgZmxhZyBTZXQuXG4gICAgICB1bnNhZmVSZXF1ZXN0OiByZXF1ZXN0LnVuc2FmZVJlcXVlc3QsXG4gICAgICAvLyBjbGllbnQgVGhpc1x1MjAxOXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0LlxuICAgICAgY2xpZW50OiB0aGlzW2tSZWFsbV0uc2V0dGluZ3NPYmplY3QsXG4gICAgICAvLyB3aW5kb3cgd2luZG93LlxuICAgICAgd2luZG93LFxuICAgICAgLy8gcHJpb3JpdHkgcmVxdWVzdFx1MjAxOXMgcHJpb3JpdHkuXG4gICAgICBwcmlvcml0eTogcmVxdWVzdC5wcmlvcml0eSxcbiAgICAgIC8vIG9yaWdpbiByZXF1ZXN0XHUyMDE5cyBvcmlnaW4uIFRoZSBwcm9wYWdhdGlvbiBvZiB0aGUgb3JpZ2luIGlzIG9ubHkgc2lnbmlmaWNhbnQgZm9yIG5hdmlnYXRpb24gcmVxdWVzdHNcbiAgICAgIC8vIGJlaW5nIGhhbmRsZWQgYnkgYSBzZXJ2aWNlIHdvcmtlci4gSW4gdGhpcyBzY2VuYXJpbyBhIHJlcXVlc3QgY2FuIGhhdmUgYW4gb3JpZ2luIHRoYXQgaXMgZGlmZmVyZW50XG4gICAgICAvLyBmcm9tIHRoZSBjdXJyZW50IGNsaWVudC5cbiAgICAgIG9yaWdpbjogcmVxdWVzdC5vcmlnaW4sXG4gICAgICAvLyByZWZlcnJlciByZXF1ZXN0XHUyMDE5cyByZWZlcnJlci5cbiAgICAgIHJlZmVycmVyOiByZXF1ZXN0LnJlZmVycmVyLFxuICAgICAgLy8gcmVmZXJyZXIgcG9saWN5IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeS5cbiAgICAgIHJlZmVycmVyUG9saWN5OiByZXF1ZXN0LnJlZmVycmVyUG9saWN5LFxuICAgICAgLy8gbW9kZSByZXF1ZXN0XHUyMDE5cyBtb2RlLlxuICAgICAgbW9kZTogcmVxdWVzdC5tb2RlLFxuICAgICAgLy8gY3JlZGVudGlhbHMgbW9kZSByZXF1ZXN0XHUyMDE5cyBjcmVkZW50aWFscyBtb2RlLlxuICAgICAgY3JlZGVudGlhbHM6IHJlcXVlc3QuY3JlZGVudGlhbHMsXG4gICAgICAvLyBjYWNoZSBtb2RlIHJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUuXG4gICAgICBjYWNoZTogcmVxdWVzdC5jYWNoZSxcbiAgICAgIC8vIHJlZGlyZWN0IG1vZGUgcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgbW9kZS5cbiAgICAgIHJlZGlyZWN0OiByZXF1ZXN0LnJlZGlyZWN0LFxuICAgICAgLy8gaW50ZWdyaXR5IG1ldGFkYXRhIHJlcXVlc3RcdTIwMTlzIGludGVncml0eSBtZXRhZGF0YS5cbiAgICAgIGludGVncml0eTogcmVxdWVzdC5pbnRlZ3JpdHksXG4gICAgICAvLyBrZWVwYWxpdmUgcmVxdWVzdFx1MjAxOXMga2VlcGFsaXZlLlxuICAgICAga2VlcGFsaXZlOiByZXF1ZXN0LmtlZXBhbGl2ZSxcbiAgICAgIC8vIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcgcmVxdWVzdFx1MjAxOXMgcmVsb2FkLW5hdmlnYXRpb24gZmxhZy5cbiAgICAgIHJlbG9hZE5hdmlnYXRpb246IHJlcXVlc3QucmVsb2FkTmF2aWdhdGlvbixcbiAgICAgIC8vIGhpc3RvcnktbmF2aWdhdGlvbiBmbGFnIHJlcXVlc3RcdTIwMTlzIGhpc3RvcnktbmF2aWdhdGlvbiBmbGFnLlxuICAgICAgaGlzdG9yeU5hdmlnYXRpb246IHJlcXVlc3QuaGlzdG9yeU5hdmlnYXRpb24sXG4gICAgICAvLyBVUkwgbGlzdCBBIGNsb25lIG9mIHJlcXVlc3RcdTIwMTlzIFVSTCBsaXN0LlxuICAgICAgdXJsTGlzdDogWy4uLnJlcXVlc3QudXJsTGlzdF1cbiAgICB9KVxuXG4gICAgY29uc3QgaW5pdEhhc0tleSA9IE9iamVjdC5rZXlzKGluaXQpLmxlbmd0aCAhPT0gMFxuXG4gICAgLy8gMTMuIElmIGluaXQgaXMgbm90IGVtcHR5LCB0aGVuOlxuICAgIGlmIChpbml0SGFzS2V5KSB7XG4gICAgICAvLyAxLiBJZiByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzIFwibmF2aWdhdGVcIiwgdGhlbiBzZXQgaXQgdG8gXCJzYW1lLW9yaWdpblwiLlxuICAgICAgaWYgKHJlcXVlc3QubW9kZSA9PT0gJ25hdmlnYXRlJykge1xuICAgICAgICByZXF1ZXN0Lm1vZGUgPSAnc2FtZS1vcmlnaW4nXG4gICAgICB9XG5cbiAgICAgIC8vIDIuIFVuc2V0IHJlcXVlc3RcdTIwMTlzIHJlbG9hZC1uYXZpZ2F0aW9uIGZsYWcuXG4gICAgICByZXF1ZXN0LnJlbG9hZE5hdmlnYXRpb24gPSBmYWxzZVxuXG4gICAgICAvLyAzLiBVbnNldCByZXF1ZXN0XHUyMDE5cyBoaXN0b3J5LW5hdmlnYXRpb24gZmxhZy5cbiAgICAgIHJlcXVlc3QuaGlzdG9yeU5hdmlnYXRpb24gPSBmYWxzZVxuXG4gICAgICAvLyA0LiBTZXQgcmVxdWVzdFx1MjAxOXMgb3JpZ2luIHRvIFwiY2xpZW50XCIuXG4gICAgICByZXF1ZXN0Lm9yaWdpbiA9ICdjbGllbnQnXG5cbiAgICAgIC8vIDUuIFNldCByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciB0byBcImNsaWVudFwiXG4gICAgICByZXF1ZXN0LnJlZmVycmVyID0gJ2NsaWVudCdcblxuICAgICAgLy8gNi4gU2V0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeSB0byB0aGUgZW1wdHkgc3RyaW5nLlxuICAgICAgcmVxdWVzdC5yZWZlcnJlclBvbGljeSA9ICcnXG5cbiAgICAgIC8vIDcuIFNldCByZXF1ZXN0XHUyMDE5cyBVUkwgdG8gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkwuXG4gICAgICByZXF1ZXN0LnVybCA9IHJlcXVlc3QudXJsTGlzdFtyZXF1ZXN0LnVybExpc3QubGVuZ3RoIC0gMV1cblxuICAgICAgLy8gOC4gU2V0IHJlcXVlc3RcdTIwMTlzIFVSTCBsaXN0IHRvIFx1MDBBQiByZXF1ZXN0XHUyMDE5cyBVUkwgXHUwMEJCLlxuICAgICAgcmVxdWVzdC51cmxMaXN0ID0gW3JlcXVlc3QudXJsXVxuICAgIH1cblxuICAgIC8vIDE0LiBJZiBpbml0W1wicmVmZXJyZXJcIl0gZXhpc3RzLCB0aGVuOlxuICAgIGlmIChpbml0LnJlZmVycmVyICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDEuIExldCByZWZlcnJlciBiZSBpbml0W1wicmVmZXJyZXJcIl0uXG4gICAgICBjb25zdCByZWZlcnJlciA9IGluaXQucmVmZXJyZXJcblxuICAgICAgLy8gMi4gSWYgcmVmZXJyZXIgaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgcmVmZXJyZXIgdG8gXCJuby1yZWZlcnJlclwiLlxuICAgICAgaWYgKHJlZmVycmVyID09PSAnJykge1xuICAgICAgICByZXF1ZXN0LnJlZmVycmVyID0gJ25vLXJlZmVycmVyJ1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gMS4gTGV0IHBhcnNlZFJlZmVycmVyIGJlIHRoZSByZXN1bHQgb2YgcGFyc2luZyByZWZlcnJlciB3aXRoXG4gICAgICAgIC8vIGJhc2VVUkwuXG4gICAgICAgIC8vIDIuIElmIHBhcnNlZFJlZmVycmVyIGlzIGZhaWx1cmUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICAgIGxldCBwYXJzZWRSZWZlcnJlclxuICAgICAgICB0cnkge1xuICAgICAgICAgIHBhcnNlZFJlZmVycmVyID0gbmV3IFVSTChyZWZlcnJlciwgYmFzZVVybClcbiAgICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgUmVmZXJyZXIgXCIke3JlZmVycmVyfVwiIGlzIG5vdCBhIHZhbGlkIFVSTC5gLCB7IGNhdXNlOiBlcnIgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDMuIElmIG9uZSBvZiB0aGUgZm9sbG93aW5nIGlzIHRydWVcbiAgICAgICAgLy8gLSBwYXJzZWRSZWZlcnJlclx1MjAxOXMgc2NoZW1lIGlzIFwiYWJvdXRcIiBhbmQgcGF0aCBpcyB0aGUgc3RyaW5nIFwiY2xpZW50XCJcbiAgICAgICAgLy8gLSBwYXJzZWRSZWZlcnJlclx1MjAxOXMgb3JpZ2luIGlzIG5vdCBzYW1lIG9yaWdpbiB3aXRoIG9yaWdpblxuICAgICAgICAvLyB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciB0byBcImNsaWVudFwiLlxuICAgICAgICBpZiAoXG4gICAgICAgICAgKHBhcnNlZFJlZmVycmVyLnByb3RvY29sID09PSAnYWJvdXQ6JyAmJiBwYXJzZWRSZWZlcnJlci5ob3N0bmFtZSA9PT0gJ2NsaWVudCcpIHx8XG4gICAgICAgICAgKG9yaWdpbiAmJiAhc2FtZU9yaWdpbihwYXJzZWRSZWZlcnJlciwgdGhpc1trUmVhbG1dLnNldHRpbmdzT2JqZWN0LmJhc2VVcmwpKVxuICAgICAgICApIHtcbiAgICAgICAgICByZXF1ZXN0LnJlZmVycmVyID0gJ2NsaWVudCdcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyA0LiBPdGhlcndpc2UsIHNldCByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciB0byBwYXJzZWRSZWZlcnJlci5cbiAgICAgICAgICByZXF1ZXN0LnJlZmVycmVyID0gcGFyc2VkUmVmZXJyZXJcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDE1LiBJZiBpbml0W1wicmVmZXJyZXJQb2xpY3lcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3lcbiAgICAvLyB0byBpdC5cbiAgICBpZiAoaW5pdC5yZWZlcnJlclBvbGljeSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXF1ZXN0LnJlZmVycmVyUG9saWN5ID0gaW5pdC5yZWZlcnJlclBvbGljeVxuICAgIH1cblxuICAgIC8vIDE2LiBMZXQgbW9kZSBiZSBpbml0W1wibW9kZVwiXSBpZiBpdCBleGlzdHMsIGFuZCBmYWxsYmFja01vZGUgb3RoZXJ3aXNlLlxuICAgIGxldCBtb2RlXG4gICAgaWYgKGluaXQubW9kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBtb2RlID0gaW5pdC5tb2RlXG4gICAgfSBlbHNlIHtcbiAgICAgIG1vZGUgPSBmYWxsYmFja01vZGVcbiAgICB9XG5cbiAgICAvLyAxNy4gSWYgbW9kZSBpcyBcIm5hdmlnYXRlXCIsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKG1vZGUgPT09ICduYXZpZ2F0ZScpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnUmVxdWVzdCBjb25zdHJ1Y3RvcicsXG4gICAgICAgIG1lc3NhZ2U6ICdpbnZhbGlkIHJlcXVlc3QgbW9kZSBuYXZpZ2F0ZS4nXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDE4LiBJZiBtb2RlIGlzIG5vbi1udWxsLCBzZXQgcmVxdWVzdFx1MjAxOXMgbW9kZSB0byBtb2RlLlxuICAgIGlmIChtb2RlICE9IG51bGwpIHtcbiAgICAgIHJlcXVlc3QubW9kZSA9IG1vZGVcbiAgICB9XG5cbiAgICAvLyAxOS4gSWYgaW5pdFtcImNyZWRlbnRpYWxzXCJdIGV4aXN0cywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgY3JlZGVudGlhbHMgbW9kZVxuICAgIC8vIHRvIGl0LlxuICAgIGlmIChpbml0LmNyZWRlbnRpYWxzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3QuY3JlZGVudGlhbHMgPSBpbml0LmNyZWRlbnRpYWxzXG4gICAgfVxuXG4gICAgLy8gMTguIElmIGluaXRbXCJjYWNoZVwiXSBleGlzdHMsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgdG8gaXQuXG4gICAgaWYgKGluaXQuY2FjaGUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdC5jYWNoZSA9IGluaXQuY2FjaGVcbiAgICB9XG5cbiAgICAvLyAyMS4gSWYgcmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZSBpcyBcIm9ubHktaWYtY2FjaGVkXCIgYW5kIHJlcXVlc3RcdTIwMTlzIG1vZGUgaXNcbiAgICAvLyBub3QgXCJzYW1lLW9yaWdpblwiLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgIGlmIChyZXF1ZXN0LmNhY2hlID09PSAnb25seS1pZi1jYWNoZWQnICYmIHJlcXVlc3QubW9kZSAhPT0gJ3NhbWUtb3JpZ2luJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgXCInb25seS1pZi1jYWNoZWQnIGNhbiBiZSBzZXQgb25seSB3aXRoICdzYW1lLW9yaWdpbicgbW9kZVwiXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gMjIuIElmIGluaXRbXCJyZWRpcmVjdFwiXSBleGlzdHMsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IG1vZGUgdG8gaXQuXG4gICAgaWYgKGluaXQucmVkaXJlY3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVxdWVzdC5yZWRpcmVjdCA9IGluaXQucmVkaXJlY3RcbiAgICB9XG5cbiAgICAvLyAyMy4gSWYgaW5pdFtcImludGVncml0eVwiXSBleGlzdHMsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIGludGVncml0eSBtZXRhZGF0YSB0byBpdC5cbiAgICBpZiAoaW5pdC5pbnRlZ3JpdHkgIT0gbnVsbCkge1xuICAgICAgcmVxdWVzdC5pbnRlZ3JpdHkgPSBTdHJpbmcoaW5pdC5pbnRlZ3JpdHkpXG4gICAgfVxuXG4gICAgLy8gMjQuIElmIGluaXRbXCJrZWVwYWxpdmVcIl0gZXhpc3RzLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyBrZWVwYWxpdmUgdG8gaXQuXG4gICAgaWYgKGluaXQua2VlcGFsaXZlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIHJlcXVlc3Qua2VlcGFsaXZlID0gQm9vbGVhbihpbml0LmtlZXBhbGl2ZSlcbiAgICB9XG5cbiAgICAvLyAyNS4gSWYgaW5pdFtcIm1ldGhvZFwiXSBleGlzdHMsIHRoZW46XG4gICAgaWYgKGluaXQubWV0aG9kICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDEuIExldCBtZXRob2QgYmUgaW5pdFtcIm1ldGhvZFwiXS5cbiAgICAgIGxldCBtZXRob2QgPSBpbml0Lm1ldGhvZFxuXG4gICAgICAvLyAyLiBJZiBtZXRob2QgaXMgbm90IGEgbWV0aG9kIG9yIG1ldGhvZCBpcyBhIGZvcmJpZGRlbiBtZXRob2QsIHRoZW5cbiAgICAgIC8vIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKCFpc1ZhbGlkSFRUUFRva2VuKG1ldGhvZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJyR7bWV0aG9kfScgaXMgbm90IGEgdmFsaWQgSFRUUCBtZXRob2QuYClcbiAgICAgIH1cblxuICAgICAgaWYgKGZvcmJpZGRlbk1ldGhvZHNTZXQuaGFzKG1ldGhvZC50b1VwcGVyQ2FzZSgpKSkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGAnJHttZXRob2R9JyBIVFRQIG1ldGhvZCBpcyB1bnN1cHBvcnRlZC5gKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBOb3JtYWxpemUgbWV0aG9kLlxuICAgICAgbWV0aG9kID0gbm9ybWFsaXplTWV0aG9kUmVjb3JkW21ldGhvZF0gPz8gbm9ybWFsaXplTWV0aG9kKG1ldGhvZClcblxuICAgICAgLy8gNC4gU2V0IHJlcXVlc3RcdTIwMTlzIG1ldGhvZCB0byBtZXRob2QuXG4gICAgICByZXF1ZXN0Lm1ldGhvZCA9IG1ldGhvZFxuICAgIH1cblxuICAgIC8vIDI2LiBJZiBpbml0W1wic2lnbmFsXCJdIGV4aXN0cywgdGhlbiBzZXQgc2lnbmFsIHRvIGl0LlxuICAgIGlmIChpbml0LnNpZ25hbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzaWduYWwgPSBpbml0LnNpZ25hbFxuICAgIH1cblxuICAgIC8vIDI3LiBTZXQgdGhpc1x1MjAxOXMgcmVxdWVzdCB0byByZXF1ZXN0LlxuICAgIHRoaXNba1N0YXRlXSA9IHJlcXVlc3RcblxuICAgIC8vIDI4LiBTZXQgdGhpc1x1MjAxOXMgc2lnbmFsIHRvIGEgbmV3IEFib3J0U2lnbmFsIG9iamVjdCB3aXRoIHRoaXNcdTIwMTlzIHJlbGV2YW50XG4gICAgLy8gUmVhbG0uXG4gICAgLy8gVE9ETzogY291bGQgdGhpcyBiZSBzaW1wbGlmaWVkIHdpdGggQWJvcnRTaWduYWwuYW55XG4gICAgLy8gKGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jZG9tLWFib3J0c2lnbmFsLWFueSlcbiAgICBjb25zdCBhYyA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKVxuICAgIHRoaXNba1NpZ25hbF0gPSBhYy5zaWduYWxcbiAgICB0aGlzW2tTaWduYWxdW2tSZWFsbV0gPSB0aGlzW2tSZWFsbV1cblxuICAgIC8vIDI5LiBJZiBzaWduYWwgaXMgbm90IG51bGwsIHRoZW4gbWFrZSB0aGlzXHUyMDE5cyBzaWduYWwgZm9sbG93IHNpZ25hbC5cbiAgICBpZiAoc2lnbmFsICE9IG51bGwpIHtcbiAgICAgIGlmIChcbiAgICAgICAgIXNpZ25hbCB8fFxuICAgICAgICB0eXBlb2Ygc2lnbmFsLmFib3J0ZWQgIT09ICdib29sZWFuJyB8fFxuICAgICAgICB0eXBlb2Ygc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIgIT09ICdmdW5jdGlvbidcbiAgICAgICkge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgIFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnUmVxdWVzdCc6IG1lbWJlciBzaWduYWwgaXMgbm90IG9mIHR5cGUgQWJvcnRTaWduYWwuXCJcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgICAgYWMuYWJvcnQoc2lnbmFsLnJlYXNvbilcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEtlZXAgYSBzdHJvbmcgcmVmIHRvIGFjIHdoaWxlIHJlcXVlc3Qgb2JqZWN0XG4gICAgICAgIC8vIGlzIGFsaXZlLiBUaGlzIGlzIG5lZWRlZCB0byBwcmV2ZW50IEFib3J0Q29udHJvbGxlclxuICAgICAgICAvLyBmcm9tIGJlaW5nIHByZW1hdHVyZWx5IGdhcmJhZ2UgY29sbGVjdGVkLlxuICAgICAgICAvLyBTZWUsIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xOTI2LlxuICAgICAgICB0aGlzW2tBYm9ydENvbnRyb2xsZXJdID0gYWNcblxuICAgICAgICBjb25zdCBhY1JlZiA9IG5ldyBXZWFrUmVmKGFjKVxuICAgICAgICBjb25zdCBhYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBjb25zdCBhYyA9IGFjUmVmLmRlcmVmKClcbiAgICAgICAgICBpZiAoYWMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgYWMuYWJvcnQodGhpcy5yZWFzb24pXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGhpcmQtcGFydHkgQWJvcnRDb250cm9sbGVycyBtYXkgbm90IHdvcmsgd2l0aCB0aGVzZS5cbiAgICAgICAgLy8gU2VlLCBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9wdWxsLzE5MTAjaXNzdWVjb21tZW50LTE0NjQ0OTU2MTkuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgLy8gSWYgdGhlIG1heCBhbW91bnQgb2YgbGlzdGVuZXJzIGlzIGVxdWFsIHRvIHRoZSBkZWZhdWx0LCBpbmNyZWFzZSBpdFxuICAgICAgICAgIC8vIFRoaXMgaXMgb25seSBhdmFpbGFibGUgaW4gbm9kZSA+PSB2MTkuOS4wXG4gICAgICAgICAgaWYgKHR5cGVvZiBnZXRNYXhMaXN0ZW5lcnMgPT09ICdmdW5jdGlvbicgJiYgZ2V0TWF4TGlzdGVuZXJzKHNpZ25hbCkgPT09IGRlZmF1bHRNYXhMaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgIHNldE1heExpc3RlbmVycygxMDAsIHNpZ25hbClcbiAgICAgICAgICB9IGVsc2UgaWYgKGdldEV2ZW50TGlzdGVuZXJzKHNpZ25hbCwgJ2Fib3J0JykubGVuZ3RoID49IGRlZmF1bHRNYXhMaXN0ZW5lcnMpIHtcbiAgICAgICAgICAgIHNldE1heExpc3RlbmVycygxMDAsIHNpZ25hbClcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2gge31cblxuICAgICAgICB1dGlsLmFkZEFib3J0TGlzdGVuZXIoc2lnbmFsLCBhYm9ydClcbiAgICAgICAgcmVxdWVzdEZpbmFsaXplci5yZWdpc3RlcihhYywgeyBzaWduYWwsIGFib3J0IH0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMzAuIFNldCB0aGlzXHUyMDE5cyBoZWFkZXJzIHRvIGEgbmV3IEhlYWRlcnMgb2JqZWN0IHdpdGggdGhpc1x1MjAxOXMgcmVsZXZhbnRcbiAgICAvLyBSZWFsbSwgd2hvc2UgaGVhZGVyIGxpc3QgaXMgcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgYW5kIGd1YXJkIGlzXG4gICAgLy8gXCJyZXF1ZXN0XCIuXG4gICAgdGhpc1trSGVhZGVyc10gPSBuZXcgSGVhZGVycyhrQ29uc3RydWN0KVxuICAgIHRoaXNba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSByZXF1ZXN0LmhlYWRlcnNMaXN0XG4gICAgdGhpc1trSGVhZGVyc11ba0d1YXJkXSA9ICdyZXF1ZXN0J1xuICAgIHRoaXNba0hlYWRlcnNdW2tSZWFsbV0gPSB0aGlzW2tSZWFsbV1cblxuICAgIC8vIDMxLiBJZiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzIFwibm8tY29yc1wiLCB0aGVuOlxuICAgIGlmIChtb2RlID09PSAnbm8tY29ycycpIHtcbiAgICAgIC8vIDEuIElmIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpcyBub3QgYSBDT1JTLXNhZmVsaXN0ZWQgbWV0aG9kLFxuICAgICAgLy8gdGhlbiB0aHJvdyBhIFR5cGVFcnJvci5cbiAgICAgIGlmICghY29yc1NhZmVMaXN0ZWRNZXRob2RzU2V0LmhhcyhyZXF1ZXN0Lm1ldGhvZCkpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICBgJyR7cmVxdWVzdC5tZXRob2R9IGlzIHVuc3VwcG9ydGVkIGluIG5vLWNvcnMgbW9kZS5gXG4gICAgICAgIClcbiAgICAgIH1cblxuICAgICAgLy8gMi4gU2V0IHRoaXNcdTIwMTlzIGhlYWRlcnNcdTIwMTlzIGd1YXJkIHRvIFwicmVxdWVzdC1uby1jb3JzXCIuXG4gICAgICB0aGlzW2tIZWFkZXJzXVtrR3VhcmRdID0gJ3JlcXVlc3Qtbm8tY29ycydcbiAgICB9XG5cbiAgICAvLyAzMi4gSWYgaW5pdCBpcyBub3QgZW1wdHksIHRoZW46XG4gICAgaWYgKGluaXRIYXNLZXkpIHtcbiAgICAgIC8qKiBAdHlwZSB7SGVhZGVyc0xpc3R9ICovXG4gICAgICBjb25zdCBoZWFkZXJzTGlzdCA9IHRoaXNba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF1cbiAgICAgIC8vIDEuIExldCBoZWFkZXJzIGJlIGEgY29weSBvZiB0aGlzXHUyMDE5cyBoZWFkZXJzIGFuZCBpdHMgYXNzb2NpYXRlZCBoZWFkZXJcbiAgICAgIC8vIGxpc3QuXG4gICAgICAvLyAyLiBJZiBpbml0W1wiaGVhZGVyc1wiXSBleGlzdHMsIHRoZW4gc2V0IGhlYWRlcnMgdG8gaW5pdFtcImhlYWRlcnNcIl0uXG4gICAgICBjb25zdCBoZWFkZXJzID0gaW5pdC5oZWFkZXJzICE9PSB1bmRlZmluZWQgPyBpbml0LmhlYWRlcnMgOiBuZXcgSGVhZGVyc0xpc3QoaGVhZGVyc0xpc3QpXG5cbiAgICAgIC8vIDMuIEVtcHR5IHRoaXNcdTIwMTlzIGhlYWRlcnNcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgICAgaGVhZGVyc0xpc3QuY2xlYXIoKVxuXG4gICAgICAvLyA0LiBJZiBoZWFkZXJzIGlzIGEgSGVhZGVycyBvYmplY3QsIHRoZW4gZm9yIGVhY2ggaGVhZGVyIGluIGl0cyBoZWFkZXJcbiAgICAgIC8vIGxpc3QsIGFwcGVuZCBoZWFkZXJcdTIwMTlzIG5hbWUvaGVhZGVyXHUyMDE5cyB2YWx1ZSB0byB0aGlzXHUyMDE5cyBoZWFkZXJzLlxuICAgICAgaWYgKGhlYWRlcnMgaW5zdGFuY2VvZiBIZWFkZXJzTGlzdCkge1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbF0gb2YgaGVhZGVycykge1xuICAgICAgICAgIGhlYWRlcnNMaXN0LmFwcGVuZChrZXksIHZhbClcbiAgICAgICAgfVxuICAgICAgICAvLyBOb3RlOiBDb3B5IHRoZSBgc2V0LWNvb2tpZWAgbWV0YS1kYXRhLlxuICAgICAgICBoZWFkZXJzTGlzdC5jb29raWVzID0gaGVhZGVycy5jb29raWVzXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyA1LiBPdGhlcndpc2UsIGZpbGwgdGhpc1x1MjAxOXMgaGVhZGVycyB3aXRoIGhlYWRlcnMuXG4gICAgICAgIGZpbGxIZWFkZXJzKHRoaXNba0hlYWRlcnNdLCBoZWFkZXJzKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDMzLiBMZXQgaW5wdXRCb2R5IGJlIGlucHV0XHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBib2R5IGlmIGlucHV0IGlzIGEgUmVxdWVzdFxuICAgIC8vIG9iamVjdDsgb3RoZXJ3aXNlIG51bGwuXG4gICAgY29uc3QgaW5wdXRCb2R5ID0gaW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0ID8gaW5wdXRba1N0YXRlXS5ib2R5IDogbnVsbFxuXG4gICAgLy8gMzQuIElmIGVpdGhlciBpbml0W1wiYm9keVwiXSBleGlzdHMgYW5kIGlzIG5vbi1udWxsIG9yIGlucHV0Qm9keSBpc1xuICAgIC8vIG5vbi1udWxsLCBhbmQgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzIGBHRVRgIG9yIGBIRUFEYCwgdGhlbiB0aHJvdyBhXG4gICAgLy8gVHlwZUVycm9yLlxuICAgIGlmIChcbiAgICAgIChpbml0LmJvZHkgIT0gbnVsbCB8fCBpbnB1dEJvZHkgIT0gbnVsbCkgJiZcbiAgICAgIChyZXF1ZXN0Lm1ldGhvZCA9PT0gJ0dFVCcgfHwgcmVxdWVzdC5tZXRob2QgPT09ICdIRUFEJylcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlcXVlc3Qgd2l0aCBHRVQvSEVBRCBtZXRob2QgY2Fubm90IGhhdmUgYm9keS4nKVxuICAgIH1cblxuICAgIC8vIDM1LiBMZXQgaW5pdEJvZHkgYmUgbnVsbC5cbiAgICBsZXQgaW5pdEJvZHkgPSBudWxsXG5cbiAgICAvLyAzNi4gSWYgaW5pdFtcImJvZHlcIl0gZXhpc3RzIGFuZCBpcyBub24tbnVsbCwgdGhlbjpcbiAgICBpZiAoaW5pdC5ib2R5ICE9IG51bGwpIHtcbiAgICAgIC8vIDEuIExldCBDb250ZW50LVR5cGUgYmUgbnVsbC5cbiAgICAgIC8vIDIuIFNldCBpbml0Qm9keSBhbmQgQ29udGVudC1UeXBlIHRvIHRoZSByZXN1bHQgb2YgZXh0cmFjdGluZ1xuICAgICAgLy8gaW5pdFtcImJvZHlcIl0sIHdpdGgga2VlcGFsaXZlIHNldCB0byByZXF1ZXN0XHUyMDE5cyBrZWVwYWxpdmUuXG4gICAgICBjb25zdCBbZXh0cmFjdGVkQm9keSwgY29udGVudFR5cGVdID0gZXh0cmFjdEJvZHkoXG4gICAgICAgIGluaXQuYm9keSxcbiAgICAgICAgcmVxdWVzdC5rZWVwYWxpdmVcbiAgICAgIClcbiAgICAgIGluaXRCb2R5ID0gZXh0cmFjdGVkQm9keVxuXG4gICAgICAvLyAzLCBJZiBDb250ZW50LVR5cGUgaXMgbm9uLW51bGwgYW5kIHRoaXNcdTIwMTlzIGhlYWRlcnNcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXNcbiAgICAgIC8vIG5vdCBjb250YWluIGBDb250ZW50LVR5cGVgLCB0aGVuIGFwcGVuZCBgQ29udGVudC1UeXBlYC9Db250ZW50LVR5cGUgdG9cbiAgICAgIC8vIHRoaXNcdTIwMTlzIGhlYWRlcnMuXG4gICAgICBpZiAoY29udGVudFR5cGUgJiYgIXRoaXNba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0uY29udGFpbnMoJ2NvbnRlbnQtdHlwZScpKSB7XG4gICAgICAgIHRoaXNba0hlYWRlcnNdLmFwcGVuZCgnY29udGVudC10eXBlJywgY29udGVudFR5cGUpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMzcuIExldCBpbnB1dE9ySW5pdEJvZHkgYmUgaW5pdEJvZHkgaWYgaXQgaXMgbm9uLW51bGw7IG90aGVyd2lzZVxuICAgIC8vIGlucHV0Qm9keS5cbiAgICBjb25zdCBpbnB1dE9ySW5pdEJvZHkgPSBpbml0Qm9keSA/PyBpbnB1dEJvZHlcblxuICAgIC8vIDM4LiBJZiBpbnB1dE9ySW5pdEJvZHkgaXMgbm9uLW51bGwgYW5kIGlucHV0T3JJbml0Qm9keVx1MjAxOXMgc291cmNlIGlzXG4gICAgLy8gbnVsbCwgdGhlbjpcbiAgICBpZiAoaW5wdXRPckluaXRCb2R5ICE9IG51bGwgJiYgaW5wdXRPckluaXRCb2R5LnNvdXJjZSA9PSBudWxsKSB7XG4gICAgICAvLyAxLiBJZiBpbml0Qm9keSBpcyBub24tbnVsbCBhbmQgaW5pdFtcImR1cGxleFwiXSBkb2VzIG5vdCBleGlzdCxcbiAgICAgIC8vICAgIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgICBpZiAoaW5pdEJvZHkgIT0gbnVsbCAmJiBpbml0LmR1cGxleCA9PSBudWxsKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1JlcXVlc3RJbml0OiBkdXBsZXggb3B0aW9uIGlzIHJlcXVpcmVkIHdoZW4gc2VuZGluZyBhIGJvZHkuJylcbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgbW9kZSBpcyBuZWl0aGVyIFwic2FtZS1vcmlnaW5cIiBub3IgXCJjb3JzXCIsXG4gICAgICAvLyB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKHJlcXVlc3QubW9kZSAhPT0gJ3NhbWUtb3JpZ2luJyAmJiByZXF1ZXN0Lm1vZGUgIT09ICdjb3JzJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICAgICdJZiByZXF1ZXN0IGlzIG1hZGUgZnJvbSBSZWFkYWJsZVN0cmVhbSwgbW9kZSBzaG91bGQgYmUgXCJzYW1lLW9yaWdpblwiIG9yIFwiY29yc1wiJ1xuICAgICAgICApXG4gICAgICB9XG5cbiAgICAgIC8vIDMuIFNldCB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyB1c2UtQ09SUy1wcmVmbGlnaHQgZmxhZy5cbiAgICAgIHJlcXVlc3QudXNlQ09SU1ByZWZsaWdodEZsYWcgPSB0cnVlXG4gICAgfVxuXG4gICAgLy8gMzkuIExldCBmaW5hbEJvZHkgYmUgaW5wdXRPckluaXRCb2R5LlxuICAgIGxldCBmaW5hbEJvZHkgPSBpbnB1dE9ySW5pdEJvZHlcblxuICAgIC8vIDQwLiBJZiBpbml0Qm9keSBpcyBudWxsIGFuZCBpbnB1dEJvZHkgaXMgbm9uLW51bGwsIHRoZW46XG4gICAgaWYgKGluaXRCb2R5ID09IG51bGwgJiYgaW5wdXRCb2R5ICE9IG51bGwpIHtcbiAgICAgIC8vIDEuIElmIGlucHV0IGlzIHVudXNhYmxlLCB0aGVuIHRocm93IGEgVHlwZUVycm9yLlxuICAgICAgaWYgKHV0aWwuaXNEaXN0dXJiZWQoaW5wdXRCb2R5LnN0cmVhbSkgfHwgaW5wdXRCb2R5LnN0cmVhbS5sb2NrZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihcbiAgICAgICAgICAnQ2Fubm90IGNvbnN0cnVjdCBhIFJlcXVlc3Qgd2l0aCBhIFJlcXVlc3Qgb2JqZWN0IHRoYXQgaGFzIGFscmVhZHkgYmVlbiB1c2VkLidcbiAgICAgICAgKVxuICAgICAgfVxuXG4gICAgICAvLyAyLiBTZXQgZmluYWxCb2R5IHRvIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBwcm94eSBmb3IgaW5wdXRCb2R5LlxuICAgICAgaWYgKCFUcmFuc2Zvcm1TdHJlYW0pIHtcbiAgICAgICAgVHJhbnNmb3JtU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlRyYW5zZm9ybVN0cmVhbVxuICAgICAgfVxuXG4gICAgICAvLyBodHRwczovL3N0cmVhbXMuc3BlYy53aGF0d2cub3JnLyNyZWFkYWJsZXN0cmVhbS1jcmVhdGUtYS1wcm94eVxuICAgICAgY29uc3QgaWRlbnRpdHlUcmFuc2Zvcm0gPSBuZXcgVHJhbnNmb3JtU3RyZWFtKClcbiAgICAgIGlucHV0Qm9keS5zdHJlYW0ucGlwZVRocm91Z2goaWRlbnRpdHlUcmFuc2Zvcm0pXG4gICAgICBmaW5hbEJvZHkgPSB7XG4gICAgICAgIHNvdXJjZTogaW5wdXRCb2R5LnNvdXJjZSxcbiAgICAgICAgbGVuZ3RoOiBpbnB1dEJvZHkubGVuZ3RoLFxuICAgICAgICBzdHJlYW06IGlkZW50aXR5VHJhbnNmb3JtLnJlYWRhYmxlXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNDEuIFNldCB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBib2R5IHRvIGZpbmFsQm9keS5cbiAgICB0aGlzW2tTdGF0ZV0uYm9keSA9IGZpbmFsQm9keVxuICB9XG5cbiAgLy8gUmV0dXJucyByZXF1ZXN0XHUyMDE5cyBIVFRQIG1ldGhvZCwgd2hpY2ggaXMgXCJHRVRcIiBieSBkZWZhdWx0LlxuICBnZXQgbWV0aG9kICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIG1ldGhvZCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBtZXRob2QuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5tZXRob2RcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIFVSTCBvZiByZXF1ZXN0IGFzIGEgc3RyaW5nLlxuICBnZXQgdXJsICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIHVybCBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBVUkwsIHNlcmlhbGl6ZWQuXG4gICAgcmV0dXJuIFVSTFNlcmlhbGl6ZXIodGhpc1trU3RhdGVdLnVybClcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBIZWFkZXJzIG9iamVjdCBjb25zaXN0aW5nIG9mIHRoZSBoZWFkZXJzIGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LlxuICAvLyBOb3RlIHRoYXQgaGVhZGVycyBhZGRlZCBpbiB0aGUgbmV0d29yayBsYXllciBieSB0aGUgdXNlciBhZ2VudCB3aWxsIG5vdFxuICAvLyBiZSBhY2NvdW50ZWQgZm9yIGluIHRoaXMgb2JqZWN0LCBlLmcuLCB0aGUgXCJIb3N0XCIgaGVhZGVyLlxuICBnZXQgaGVhZGVycyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBoZWFkZXJzIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIGhlYWRlcnMuXG4gICAgcmV0dXJuIHRoaXNba0hlYWRlcnNdXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBraW5kIG9mIHJlc291cmNlIHJlcXVlc3RlZCBieSByZXF1ZXN0LCBlLmcuLCBcImRvY3VtZW50XCJcbiAgLy8gb3IgXCJzY3JpcHRcIi5cbiAgZ2V0IGRlc3RpbmF0aW9uICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGRlc3RpbmF0aW9uIGdldHRlciBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGRlc3RpbmF0aW9uLlxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uZGVzdGluYXRpb25cbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIHJlZmVycmVyIG9mIHJlcXVlc3QuIEl0cyB2YWx1ZSBjYW4gYmUgYSBzYW1lLW9yaWdpbiBVUkwgaWZcbiAgLy8gZXhwbGljaXRseSBzZXQgaW4gaW5pdCwgdGhlIGVtcHR5IHN0cmluZyB0byBpbmRpY2F0ZSBubyByZWZlcnJlciwgYW5kXG4gIC8vIFwiYWJvdXQ6Y2xpZW50XCIgd2hlbiBkZWZhdWx0aW5nIHRvIHRoZSBnbG9iYWxcdTIwMTlzIGRlZmF1bHQuIFRoaXMgaXMgdXNlZFxuICAvLyBkdXJpbmcgZmV0Y2hpbmcgdG8gZGV0ZXJtaW5lIHRoZSB2YWx1ZSBvZiB0aGUgYFJlZmVyZXJgIGhlYWRlciBvZiB0aGVcbiAgLy8gcmVxdWVzdCBiZWluZyBtYWRlLlxuICBnZXQgcmVmZXJyZXIgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyAxLiBJZiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBpcyBcIm5vLXJlZmVycmVyXCIsIHRoZW4gcmV0dXJuIHRoZVxuICAgIC8vIGVtcHR5IHN0cmluZy5cbiAgICBpZiAodGhpc1trU3RhdGVdLnJlZmVycmVyID09PSAnbm8tcmVmZXJyZXInKSB7XG4gICAgICByZXR1cm4gJydcbiAgICB9XG5cbiAgICAvLyAyLiBJZiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBpcyBcImNsaWVudFwiLCB0aGVuIHJldHVyblxuICAgIC8vIFwiYWJvdXQ6Y2xpZW50XCIuXG4gICAgaWYgKHRoaXNba1N0YXRlXS5yZWZlcnJlciA9PT0gJ2NsaWVudCcpIHtcbiAgICAgIHJldHVybiAnYWJvdXQ6Y2xpZW50J1xuICAgIH1cblxuICAgIC8vIFJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciwgc2VyaWFsaXplZC5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnJlZmVycmVyLnRvU3RyaW5nKClcbiAgfVxuXG4gIC8vIFJldHVybnMgdGhlIHJlZmVycmVyIHBvbGljeSBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdC5cbiAgLy8gVGhpcyBpcyB1c2VkIGR1cmluZyBmZXRjaGluZyB0byBjb21wdXRlIHRoZSB2YWx1ZSBvZiB0aGUgcmVxdWVzdFx1MjAxOXNcbiAgLy8gcmVmZXJyZXIuXG4gIGdldCByZWZlcnJlclBvbGljeSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSByZWZlcnJlclBvbGljeSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5yZWZlcnJlclBvbGljeVxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgbW9kZSBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCwgd2hpY2ggaXMgYSBzdHJpbmcgaW5kaWNhdGluZ1xuICAvLyB3aGV0aGVyIHRoZSByZXF1ZXN0IHdpbGwgdXNlIENPUlMsIG9yIHdpbGwgYmUgcmVzdHJpY3RlZCB0byBzYW1lLW9yaWdpblxuICAvLyBVUkxzLlxuICBnZXQgbW9kZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBtb2RlIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIG1vZGUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5tb2RlXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSBjcmVkZW50aWFscyBtb2RlIGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LFxuICAvLyB3aGljaCBpcyBhIHN0cmluZyBpbmRpY2F0aW5nIHdoZXRoZXIgY3JlZGVudGlhbHMgd2lsbCBiZSBzZW50IHdpdGggdGhlXG4gIC8vIHJlcXVlc3QgYWx3YXlzLCBuZXZlciwgb3Igb25seSB3aGVuIHNlbnQgdG8gYSBzYW1lLW9yaWdpbiBVUkwuXG4gIGdldCBjcmVkZW50aWFscyAoKSB7XG4gICAgLy8gVGhlIGNyZWRlbnRpYWxzIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGNyZWRlbnRpYWxzIG1vZGUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5jcmVkZW50aWFsc1xuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgY2FjaGUgbW9kZSBhc3NvY2lhdGVkIHdpdGggcmVxdWVzdCxcbiAgLy8gd2hpY2ggaXMgYSBzdHJpbmcgaW5kaWNhdGluZyBob3cgdGhlIHJlcXVlc3Qgd2lsbFxuICAvLyBpbnRlcmFjdCB3aXRoIHRoZSBicm93c2VyXHUyMDE5cyBjYWNoZSB3aGVuIGZldGNoaW5nLlxuICBnZXQgY2FjaGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgY2FjaGUgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgcmVxdWVzdFx1MjAxOXMgY2FjaGUgbW9kZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmNhY2hlXG4gIH1cblxuICAvLyBSZXR1cm5zIHRoZSByZWRpcmVjdCBtb2RlIGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LFxuICAvLyB3aGljaCBpcyBhIHN0cmluZyBpbmRpY2F0aW5nIGhvdyByZWRpcmVjdHMgZm9yIHRoZVxuICAvLyByZXF1ZXN0IHdpbGwgYmUgaGFuZGxlZCBkdXJpbmcgZmV0Y2hpbmcuIEEgcmVxdWVzdFxuICAvLyB3aWxsIGZvbGxvdyByZWRpcmVjdHMgYnkgZGVmYXVsdC5cbiAgZ2V0IHJlZGlyZWN0ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIHJlZGlyZWN0IGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IG1vZGUuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5yZWRpcmVjdFxuICB9XG5cbiAgLy8gUmV0dXJucyByZXF1ZXN0XHUyMDE5cyBzdWJyZXNvdXJjZSBpbnRlZ3JpdHkgbWV0YWRhdGEsIHdoaWNoIGlzIGFcbiAgLy8gY3J5cHRvZ3JhcGhpYyBoYXNoIG9mIHRoZSByZXNvdXJjZSBiZWluZyBmZXRjaGVkLiBJdHMgdmFsdWVcbiAgLy8gY29uc2lzdHMgb2YgbXVsdGlwbGUgaGFzaGVzIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlLiBbU1JJXVxuICBnZXQgaW50ZWdyaXR5ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGludGVncml0eSBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0aGlzXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBpbnRlZ3JpdHlcbiAgICAvLyBtZXRhZGF0YS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmludGVncml0eVxuICB9XG5cbiAgLy8gUmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCByZXF1ZXN0IGNhbiBvdXRsaXZlIHRoZVxuICAvLyBnbG9iYWwgaW4gd2hpY2ggaXQgd2FzIGNyZWF0ZWQuXG4gIGdldCBrZWVwYWxpdmUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUga2VlcGFsaXZlIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGtlZXBhbGl2ZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLmtlZXBhbGl2ZVxuICB9XG5cbiAgLy8gUmV0dXJucyBhIGJvb2xlYW4gaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCByZXF1ZXN0IGlzIGZvciBhIHJlbG9hZFxuICAvLyBuYXZpZ2F0aW9uLlxuICBnZXQgaXNSZWxvYWROYXZpZ2F0aW9uICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBSZXF1ZXN0KVxuXG4gICAgLy8gVGhlIGlzUmVsb2FkTmF2aWdhdGlvbiBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoaXNcdTIwMTlzXG4gICAgLy8gcmVxdWVzdFx1MjAxOXMgcmVsb2FkLW5hdmlnYXRpb24gZmxhZyBpcyBzZXQ7IG90aGVyd2lzZSBmYWxzZS5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnJlbG9hZE5hdmlnYXRpb25cbiAgfVxuXG4gIC8vIFJldHVybnMgYSBib29sZWFuIGluZGljYXRpbmcgd2hldGhlciBvciBub3QgcmVxdWVzdCBpcyBmb3IgYSBoaXN0b3J5XG4gIC8vIG5hdmlnYXRpb24gKGEuay5hLiBiYWNrLWZvd2FyZCBuYXZpZ2F0aW9uKS5cbiAgZ2V0IGlzSGlzdG9yeU5hdmlnYXRpb24gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFJlcXVlc3QpXG5cbiAgICAvLyBUaGUgaXNIaXN0b3J5TmF2aWdhdGlvbiBnZXR0ZXIgc3RlcHMgYXJlIHRvIHJldHVybiB0cnVlIGlmIHRoaXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzXG4gICAgLy8gaGlzdG9yeS1uYXZpZ2F0aW9uIGZsYWcgaXMgc2V0OyBvdGhlcndpc2UgZmFsc2UuXG4gICAgcmV0dXJuIHRoaXNba1N0YXRlXS5oaXN0b3J5TmF2aWdhdGlvblxuICB9XG5cbiAgLy8gUmV0dXJucyB0aGUgc2lnbmFsIGFzc29jaWF0ZWQgd2l0aCByZXF1ZXN0LCB3aGljaCBpcyBhbiBBYm9ydFNpZ25hbFxuICAvLyBvYmplY3QgaW5kaWNhdGluZyB3aGV0aGVyIG9yIG5vdCByZXF1ZXN0IGhhcyBiZWVuIGFib3J0ZWQsIGFuZCBpdHNcbiAgLy8gYWJvcnQgZXZlbnQgaGFuZGxlci5cbiAgZ2V0IHNpZ25hbCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIFRoZSBzaWduYWwgZ2V0dGVyIHN0ZXBzIGFyZSB0byByZXR1cm4gdGhpc1x1MjAxOXMgc2lnbmFsLlxuICAgIHJldHVybiB0aGlzW2tTaWduYWxdXG4gIH1cblxuICBnZXQgYm9keSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0uYm9keSA/IHRoaXNba1N0YXRlXS5ib2R5LnN0cmVhbSA6IG51bGxcbiAgfVxuXG4gIGdldCBib2R5VXNlZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIHJldHVybiAhIXRoaXNba1N0YXRlXS5ib2R5ICYmIHV0aWwuaXNEaXN0dXJiZWQodGhpc1trU3RhdGVdLmJvZHkuc3RyZWFtKVxuICB9XG5cbiAgZ2V0IGR1cGxleCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIHJldHVybiAnaGFsZidcbiAgfVxuXG4gIC8vIFJldHVybnMgYSBjbG9uZSBvZiByZXF1ZXN0LlxuICBjbG9uZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUmVxdWVzdClcblxuICAgIC8vIDEuIElmIHRoaXMgaXMgdW51c2FibGUsIHRoZW4gdGhyb3cgYSBUeXBlRXJyb3IuXG4gICAgaWYgKHRoaXMuYm9keVVzZWQgfHwgdGhpcy5ib2R5Py5sb2NrZWQpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3VudXNhYmxlJylcbiAgICB9XG5cbiAgICAvLyAyLiBMZXQgY2xvbmVkUmVxdWVzdCBiZSB0aGUgcmVzdWx0IG9mIGNsb25pbmcgdGhpc1x1MjAxOXMgcmVxdWVzdC5cbiAgICBjb25zdCBjbG9uZWRSZXF1ZXN0ID0gY2xvbmVSZXF1ZXN0KHRoaXNba1N0YXRlXSlcblxuICAgIC8vIDMuIExldCBjbG9uZWRSZXF1ZXN0T2JqZWN0IGJlIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYSBSZXF1ZXN0IG9iamVjdCxcbiAgICAvLyBnaXZlbiBjbG9uZWRSZXF1ZXN0LCB0aGlzXHUyMDE5cyBoZWFkZXJzXHUyMDE5cyBndWFyZCwgYW5kIHRoaXNcdTIwMTlzIHJlbGV2YW50IFJlYWxtLlxuICAgIGNvbnN0IGNsb25lZFJlcXVlc3RPYmplY3QgPSBuZXcgUmVxdWVzdChrQ29uc3RydWN0KVxuICAgIGNsb25lZFJlcXVlc3RPYmplY3Rba1N0YXRlXSA9IGNsb25lZFJlcXVlc3RcbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tSZWFsbV0gPSB0aGlzW2tSZWFsbV1cbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tIZWFkZXJzXSA9IG5ldyBIZWFkZXJzKGtDb25zdHJ1Y3QpXG4gICAgY2xvbmVkUmVxdWVzdE9iamVjdFtrSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IGNsb25lZFJlcXVlc3QuaGVhZGVyc0xpc3RcbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gdGhpc1trSGVhZGVyc11ba0d1YXJkXVxuICAgIGNsb25lZFJlcXVlc3RPYmplY3Rba0hlYWRlcnNdW2tSZWFsbV0gPSB0aGlzW2tIZWFkZXJzXVtrUmVhbG1dXG5cbiAgICAvLyA0LiBNYWtlIGNsb25lZFJlcXVlc3RPYmplY3RcdTIwMTlzIHNpZ25hbCBmb2xsb3cgdGhpc1x1MjAxOXMgc2lnbmFsLlxuICAgIGNvbnN0IGFjID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG4gICAgaWYgKHRoaXMuc2lnbmFsLmFib3J0ZWQpIHtcbiAgICAgIGFjLmFib3J0KHRoaXMuc2lnbmFsLnJlYXNvbilcbiAgICB9IGVsc2Uge1xuICAgICAgdXRpbC5hZGRBYm9ydExpc3RlbmVyKFxuICAgICAgICB0aGlzLnNpZ25hbCxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIGFjLmFib3J0KHRoaXMuc2lnbmFsLnJlYXNvbilcbiAgICAgICAgfVxuICAgICAgKVxuICAgIH1cbiAgICBjbG9uZWRSZXF1ZXN0T2JqZWN0W2tTaWduYWxdID0gYWMuc2lnbmFsXG5cbiAgICAvLyA0LiBSZXR1cm4gY2xvbmVkUmVxdWVzdE9iamVjdC5cbiAgICByZXR1cm4gY2xvbmVkUmVxdWVzdE9iamVjdFxuICB9XG59XG5cbm1peGluQm9keShSZXF1ZXN0KVxuXG5mdW5jdGlvbiBtYWtlUmVxdWVzdCAoaW5pdCkge1xuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdHNcbiAgY29uc3QgcmVxdWVzdCA9IHtcbiAgICBtZXRob2Q6ICdHRVQnLFxuICAgIGxvY2FsVVJMc09ubHk6IGZhbHNlLFxuICAgIHVuc2FmZVJlcXVlc3Q6IGZhbHNlLFxuICAgIGJvZHk6IG51bGwsXG4gICAgY2xpZW50OiBudWxsLFxuICAgIHJlc2VydmVkQ2xpZW50OiBudWxsLFxuICAgIHJlcGxhY2VzQ2xpZW50SWQ6ICcnLFxuICAgIHdpbmRvdzogJ2NsaWVudCcsXG4gICAga2VlcGFsaXZlOiBmYWxzZSxcbiAgICBzZXJ2aWNlV29ya2VyczogJ2FsbCcsXG4gICAgaW5pdGlhdG9yOiAnJyxcbiAgICBkZXN0aW5hdGlvbjogJycsXG4gICAgcHJpb3JpdHk6IG51bGwsXG4gICAgb3JpZ2luOiAnY2xpZW50JyxcbiAgICBwb2xpY3lDb250YWluZXI6ICdjbGllbnQnLFxuICAgIHJlZmVycmVyOiAnY2xpZW50JyxcbiAgICByZWZlcnJlclBvbGljeTogJycsXG4gICAgbW9kZTogJ25vLWNvcnMnLFxuICAgIHVzZUNPUlNQcmVmbGlnaHRGbGFnOiBmYWxzZSxcbiAgICBjcmVkZW50aWFsczogJ3NhbWUtb3JpZ2luJyxcbiAgICB1c2VDcmVkZW50aWFsczogZmFsc2UsXG4gICAgY2FjaGU6ICdkZWZhdWx0JyxcbiAgICByZWRpcmVjdDogJ2ZvbGxvdycsXG4gICAgaW50ZWdyaXR5OiAnJyxcbiAgICBjcnlwdG9HcmFwaGljc05vbmNlTWV0YWRhdGE6ICcnLFxuICAgIHBhcnNlck1ldGFkYXRhOiAnJyxcbiAgICByZWxvYWROYXZpZ2F0aW9uOiBmYWxzZSxcbiAgICBoaXN0b3J5TmF2aWdhdGlvbjogZmFsc2UsXG4gICAgdXNlckFjdGl2YXRpb246IGZhbHNlLFxuICAgIHRhaW50ZWRPcmlnaW46IGZhbHNlLFxuICAgIHJlZGlyZWN0Q291bnQ6IDAsXG4gICAgcmVzcG9uc2VUYWludGluZzogJ2Jhc2ljJyxcbiAgICBwcmV2ZW50Tm9DYWNoZUNhY2hlQ29udHJvbEhlYWRlck1vZGlmaWNhdGlvbjogZmFsc2UsXG4gICAgZG9uZTogZmFsc2UsXG4gICAgdGltaW5nQWxsb3dGYWlsZWQ6IGZhbHNlLFxuICAgIC4uLmluaXQsXG4gICAgaGVhZGVyc0xpc3Q6IGluaXQuaGVhZGVyc0xpc3RcbiAgICAgID8gbmV3IEhlYWRlcnNMaXN0KGluaXQuaGVhZGVyc0xpc3QpXG4gICAgICA6IG5ldyBIZWFkZXJzTGlzdCgpXG4gIH1cbiAgcmVxdWVzdC51cmwgPSByZXF1ZXN0LnVybExpc3RbMF1cbiAgcmV0dXJuIHJlcXVlc3Rcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtcmVxdWVzdC1jbG9uZVxuZnVuY3Rpb24gY2xvbmVSZXF1ZXN0IChyZXF1ZXN0KSB7XG4gIC8vIFRvIGNsb25lIGEgcmVxdWVzdCByZXF1ZXN0LCBydW4gdGhlc2Ugc3RlcHM6XG5cbiAgLy8gMS4gTGV0IG5ld1JlcXVlc3QgYmUgYSBjb3B5IG9mIHJlcXVlc3QsIGV4Y2VwdCBmb3IgaXRzIGJvZHkuXG4gIGNvbnN0IG5ld1JlcXVlc3QgPSBtYWtlUmVxdWVzdCh7IC4uLnJlcXVlc3QsIGJvZHk6IG51bGwgfSlcblxuICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyBib2R5IGlzIG5vbi1udWxsLCBzZXQgbmV3UmVxdWVzdFx1MjAxOXMgYm9keSB0byB0aGVcbiAgLy8gcmVzdWx0IG9mIGNsb25pbmcgcmVxdWVzdFx1MjAxOXMgYm9keS5cbiAgaWYgKHJlcXVlc3QuYm9keSAhPSBudWxsKSB7XG4gICAgbmV3UmVxdWVzdC5ib2R5ID0gY2xvbmVCb2R5KHJlcXVlc3QuYm9keSlcbiAgfVxuXG4gIC8vIDMuIFJldHVybiBuZXdSZXF1ZXN0LlxuICByZXR1cm4gbmV3UmVxdWVzdFxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhSZXF1ZXN0LnByb3RvdHlwZSwge1xuICBtZXRob2Q6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHVybDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaGVhZGVyczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVkaXJlY3Q6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNsb25lOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzaWduYWw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGR1cGxleDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZGVzdGluYXRpb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJvZHk6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJvZHlVc2VkOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBpc0hpc3RvcnlOYXZpZ2F0aW9uOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBpc1JlbG9hZE5hdmlnYXRpb246IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGtlZXBhbGl2ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgaW50ZWdyaXR5OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBjYWNoZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY3JlZGVudGlhbHM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGF0dHJpYnV0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgcmVmZXJyZXJQb2xpY3k6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlZmVycmVyOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBtb2RlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnUmVxdWVzdCcsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3QgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKFxuICBSZXF1ZXN0XG4pXG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0aW5mb1xud2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8gPSBmdW5jdGlvbiAoVikge1xuICBpZiAodHlwZW9mIFYgPT09ICdzdHJpbmcnKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyhWKVxuICB9XG5cbiAgaWYgKFYgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3QoVilcbiAgfVxuXG4gIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcoVilcbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuQWJvcnRTaWduYWwgPSB3ZWJpZGwuaW50ZXJmYWNlQ29udmVydGVyKFxuICBBYm9ydFNpZ25hbFxuKVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdGluaXRcbndlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAga2V5OiAnbWV0aG9kJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkJ5dGVTdHJpbmdcbiAgfSxcbiAge1xuICAgIGtleTogJ2hlYWRlcnMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuSGVhZGVyc0luaXRcbiAgfSxcbiAge1xuICAgIGtleTogJ2JvZHknLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKFxuICAgICAgd2ViaWRsLmNvbnZlcnRlcnMuQm9keUluaXRcbiAgICApXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdyZWZlcnJlcicsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmdcbiAgfSxcbiAge1xuICAgIGtleTogJ3JlZmVycmVyUG9saWN5JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICAvLyBodHRwczovL3czYy5naXRodWIuaW8vd2ViYXBwc2VjLXJlZmVycmVyLXBvbGljeS8jcmVmZXJyZXItcG9saWN5XG4gICAgYWxsb3dlZFZhbHVlczogcmVmZXJyZXJQb2xpY3lcbiAgfSxcbiAge1xuICAgIGtleTogJ21vZGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXJlcXVlc3QtbW9kZVxuICAgIGFsbG93ZWRWYWx1ZXM6IHJlcXVlc3RNb2RlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjcmVkZW50aWFscycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAgLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI3JlcXVlc3RjcmVkZW50aWFsc1xuICAgIGFsbG93ZWRWYWx1ZXM6IHJlcXVlc3RDcmVkZW50aWFsc1xuICB9LFxuICB7XG4gICAga2V5OiAnY2FjaGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNyZXF1ZXN0Y2FjaGVcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0Q2FjaGVcbiAgfSxcbiAge1xuICAgIGtleTogJ3JlZGlyZWN0JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jcmVxdWVzdHJlZGlyZWN0XG4gICAgYWxsb3dlZFZhbHVlczogcmVxdWVzdFJlZGlyZWN0XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdpbnRlZ3JpdHknLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdrZWVwYWxpdmUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhblxuICB9LFxuICB7XG4gICAga2V5OiAnc2lnbmFsJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcihcbiAgICAgIChzaWduYWwpID0+IHdlYmlkbC5jb252ZXJ0ZXJzLkFib3J0U2lnbmFsKFxuICAgICAgICBzaWduYWwsXG4gICAgICAgIHsgc3RyaWN0OiBmYWxzZSB9XG4gICAgICApXG4gICAgKVxuICB9LFxuICB7XG4gICAga2V5OiAnd2luZG93JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmFueVxuICB9LFxuICB7XG4gICAga2V5OiAnZHVwbGV4JyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyxcbiAgICBhbGxvd2VkVmFsdWVzOiByZXF1ZXN0RHVwbGV4XG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0geyBSZXF1ZXN0LCBtYWtlUmVxdWVzdCB9XG4iLCAiLy8gaHR0cHM6Ly9naXRodWIuY29tL0V0aGFuLUFycm93b29kL3VuZGljaS1mZXRjaFxuXG4ndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBSZXNwb25zZSxcbiAgbWFrZU5ldHdvcmtFcnJvcixcbiAgbWFrZUFwcHJvcHJpYXRlTmV0d29ya0Vycm9yLFxuICBmaWx0ZXJSZXNwb25zZSxcbiAgbWFrZVJlc3BvbnNlXG59ID0gcmVxdWlyZSgnLi9yZXNwb25zZScpXG5jb25zdCB7IEhlYWRlcnMgfSA9IHJlcXVpcmUoJy4vaGVhZGVycycpXG5jb25zdCB7IFJlcXVlc3QsIG1ha2VSZXF1ZXN0IH0gPSByZXF1aXJlKCcuL3JlcXVlc3QnKVxuY29uc3QgemxpYiA9IHJlcXVpcmUoJ3psaWInKVxuY29uc3Qge1xuICBieXRlc01hdGNoLFxuICBtYWtlUG9saWN5Q29udGFpbmVyLFxuICBjbG9uZVBvbGljeUNvbnRhaW5lcixcbiAgcmVxdWVzdEJhZFBvcnQsXG4gIFRBT0NoZWNrLFxuICBhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyLFxuICByZXNwb25zZUxvY2F0aW9uVVJMLFxuICByZXF1ZXN0Q3VycmVudFVSTCxcbiAgc2V0UmVxdWVzdFJlZmVycmVyUG9saWN5T25SZWRpcmVjdCxcbiAgdHJ5VXBncmFkZVJlcXVlc3RUb0FQb3RlbnRpYWxseVRydXN0d29ydGh5VVJMLFxuICBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvLFxuICBhcHBlbmRGZXRjaE1ldGFkYXRhLFxuICBjb3JzQ2hlY2ssXG4gIGNyb3NzT3JpZ2luUmVzb3VyY2VQb2xpY3lDaGVjayxcbiAgZGV0ZXJtaW5lUmVxdWVzdHNSZWZlcnJlcixcbiAgY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUsXG4gIGNyZWF0ZURlZmVycmVkUHJvbWlzZSxcbiAgaXNCbG9iTGlrZSxcbiAgc2FtZU9yaWdpbixcbiAgaXNDYW5jZWxsZWQsXG4gIGlzQWJvcnRlZCxcbiAgaXNFcnJvckxpa2UsXG4gIGZ1bGx5UmVhZEJvZHksXG4gIHJlYWRhYmxlU3RyZWFtQ2xvc2UsXG4gIGlzb21vcnBoaWNFbmNvZGUsXG4gIHVybElzTG9jYWwsXG4gIHVybElzSHR0cEh0dHBzU2NoZW1lLFxuICB1cmxIYXNIdHRwc1NjaGVtZVxufSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGtTdGF0ZSwga0hlYWRlcnMsIGtHdWFyZCwga1JlYWxtIH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgYXNzZXJ0ID0gcmVxdWlyZSgnYXNzZXJ0JylcbmNvbnN0IHsgc2FmZWx5RXh0cmFjdEJvZHkgfSA9IHJlcXVpcmUoJy4vYm9keScpXG5jb25zdCB7XG4gIHJlZGlyZWN0U3RhdHVzU2V0LFxuICBudWxsQm9keVN0YXR1cyxcbiAgc2FmZU1ldGhvZHNTZXQsXG4gIHJlcXVlc3RCb2R5SGVhZGVyLFxuICBzdWJyZXNvdXJjZVNldCxcbiAgRE9NRXhjZXB0aW9uXG59ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5jb25zdCBFRSA9IHJlcXVpcmUoJ2V2ZW50cycpXG5jb25zdCB7IFJlYWRhYmxlLCBwaXBlbGluZSB9ID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IHsgYWRkQWJvcnRMaXN0ZW5lciwgaXNFcnJvcmVkLCBpc1JlYWRhYmxlLCBub2RlTWFqb3IsIG5vZGVNaW5vciB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsgZGF0YVVSTFByb2Nlc3Nvciwgc2VyaWFsaXplQU1pbWVUeXBlIH0gPSByZXF1aXJlKCcuL2RhdGFVUkwnKVxuY29uc3QgeyBUcmFuc2Zvcm1TdHJlYW0gfSA9IHJlcXVpcmUoJ3N0cmVhbS93ZWInKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuLi9nbG9iYWwnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4vd2ViaWRsJylcbmNvbnN0IHsgU1RBVFVTX0NPREVTIH0gPSByZXF1aXJlKCdodHRwJylcbmNvbnN0IEdFVF9PUl9IRUFEID0gWydHRVQnLCAnSEVBRCddXG5cbi8qKiBAdHlwZSB7aW1wb3J0KCdidWZmZXInKS5yZXNvbHZlT2JqZWN0VVJMfSAqL1xubGV0IHJlc29sdmVPYmplY3RVUkxcbmxldCBSZWFkYWJsZVN0cmVhbSA9IGdsb2JhbFRoaXMuUmVhZGFibGVTdHJlYW1cblxuY2xhc3MgRmV0Y2ggZXh0ZW5kcyBFRSB7XG4gIGNvbnN0cnVjdG9yIChkaXNwYXRjaGVyKSB7XG4gICAgc3VwZXIoKVxuXG4gICAgdGhpcy5kaXNwYXRjaGVyID0gZGlzcGF0Y2hlclxuICAgIHRoaXMuY29ubmVjdGlvbiA9IG51bGxcbiAgICB0aGlzLmR1bXAgPSBmYWxzZVxuICAgIHRoaXMuc3RhdGUgPSAnb25nb2luZydcbiAgICAvLyAyIHRlcm1pbmF0ZWQgbGlzdGVuZXJzIGdldCBhZGRlZCBwZXIgcmVxdWVzdCxcbiAgICAvLyBidXQgb25seSAxIGdldHMgcmVtb3ZlZC4gSWYgdGhlcmUgYXJlIDIwIHJlZGlyZWN0cyxcbiAgICAvLyAyMSBsaXN0ZW5lcnMgd2lsbCBiZSBhZGRlZC5cbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL25vZGVqcy91bmRpY2kvaXNzdWVzLzE3MTFcbiAgICAvLyBUT0RPIChmaXgpOiBGaW5kIGFuZCBmaXggcm9vdCBjYXVzZSBmb3IgbGVha2VkIGxpc3RlbmVyLlxuICAgIHRoaXMuc2V0TWF4TGlzdGVuZXJzKDIxKVxuICB9XG5cbiAgdGVybWluYXRlIChyZWFzb24pIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gJ29uZ29pbmcnKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnN0YXRlID0gJ3Rlcm1pbmF0ZWQnXG4gICAgdGhpcy5jb25uZWN0aW9uPy5kZXN0cm95KHJlYXNvbilcbiAgICB0aGlzLmVtaXQoJ3Rlcm1pbmF0ZWQnLCByZWFzb24pXG4gIH1cblxuICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmV0Y2gtY29udHJvbGxlci1hYm9ydFxuICBhYm9ydCAoZXJyb3IpIHtcbiAgICBpZiAodGhpcy5zdGF0ZSAhPT0gJ29uZ29pbmcnKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyAxLiBTZXQgY29udHJvbGxlclx1MjAxOXMgc3RhdGUgdG8gXCJhYm9ydGVkXCIuXG4gICAgdGhpcy5zdGF0ZSA9ICdhYm9ydGVkJ1xuXG4gICAgLy8gMi4gTGV0IGZhbGxiYWNrRXJyb3IgYmUgYW4gXCJBYm9ydEVycm9yXCIgRE9NRXhjZXB0aW9uLlxuICAgIC8vIDMuIFNldCBlcnJvciB0byBmYWxsYmFja0Vycm9yIGlmIGl0IGlzIG5vdCBnaXZlbi5cbiAgICBpZiAoIWVycm9yKSB7XG4gICAgICBlcnJvciA9IG5ldyBET01FeGNlcHRpb24oJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuJywgJ0Fib3J0RXJyb3InKVxuICAgIH1cblxuICAgIC8vIDQuIExldCBzZXJpYWxpemVkRXJyb3IgYmUgU3RydWN0dXJlZFNlcmlhbGl6ZShlcnJvcikuXG4gICAgLy8gICAgSWYgdGhhdCB0aHJldyBhbiBleGNlcHRpb24sIGNhdGNoIGl0LCBhbmQgbGV0XG4gICAgLy8gICAgc2VyaWFsaXplZEVycm9yIGJlIFN0cnVjdHVyZWRTZXJpYWxpemUoZmFsbGJhY2tFcnJvcikuXG5cbiAgICAvLyA1LiBTZXQgY29udHJvbGxlclx1MjAxOXMgc2VyaWFsaXplZCBhYm9ydCByZWFzb24gdG8gc2VyaWFsaXplZEVycm9yLlxuICAgIHRoaXMuc2VyaWFsaXplZEFib3J0UmVhc29uID0gZXJyb3JcblxuICAgIHRoaXMuY29ubmVjdGlvbj8uZGVzdHJveShlcnJvcilcbiAgICB0aGlzLmVtaXQoJ3Rlcm1pbmF0ZWQnLCBlcnJvcilcbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmV0Y2gtbWV0aG9kXG5mdW5jdGlvbiBmZXRjaCAoaW5wdXQsIGluaXQgPSB7fSkge1xuICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnZ2xvYmFsVGhpcy5mZXRjaCcgfSlcblxuICAvLyAxLiBMZXQgcCBiZSBhIG5ldyBwcm9taXNlLlxuICBjb25zdCBwID0gY3JlYXRlRGVmZXJyZWRQcm9taXNlKClcblxuICAvLyAyLiBMZXQgcmVxdWVzdE9iamVjdCBiZSB0aGUgcmVzdWx0IG9mIGludm9raW5nIHRoZSBpbml0aWFsIHZhbHVlIG9mXG4gIC8vIFJlcXVlc3QgYXMgY29uc3RydWN0b3Igd2l0aCBpbnB1dCBhbmQgaW5pdCBhcyBhcmd1bWVudHMuIElmIHRoaXMgdGhyb3dzXG4gIC8vIGFuIGV4Y2VwdGlvbiwgcmVqZWN0IHAgd2l0aCBpdCBhbmQgcmV0dXJuIHAuXG4gIGxldCByZXF1ZXN0T2JqZWN0XG5cbiAgdHJ5IHtcbiAgICByZXF1ZXN0T2JqZWN0ID0gbmV3IFJlcXVlc3QoaW5wdXQsIGluaXQpXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBwLnJlamVjdChlKVxuICAgIHJldHVybiBwLnByb21pc2VcbiAgfVxuXG4gIC8vIDMuIExldCByZXF1ZXN0IGJlIHJlcXVlc3RPYmplY3RcdTIwMTlzIHJlcXVlc3QuXG4gIGNvbnN0IHJlcXVlc3QgPSByZXF1ZXN0T2JqZWN0W2tTdGF0ZV1cblxuICAvLyA0LiBJZiByZXF1ZXN0T2JqZWN0XHUyMDE5cyBzaWduYWxcdTIwMTlzIGFib3J0ZWQgZmxhZyBpcyBzZXQsIHRoZW46XG4gIGlmIChyZXF1ZXN0T2JqZWN0LnNpZ25hbC5hYm9ydGVkKSB7XG4gICAgLy8gMS4gQWJvcnQgdGhlIGZldGNoKCkgY2FsbCB3aXRoIHAsIHJlcXVlc3QsIG51bGwsIGFuZFxuICAgIC8vICAgIHJlcXVlc3RPYmplY3RcdTIwMTlzIHNpZ25hbFx1MjAxOXMgYWJvcnQgcmVhc29uLlxuICAgIGFib3J0RmV0Y2gocCwgcmVxdWVzdCwgbnVsbCwgcmVxdWVzdE9iamVjdC5zaWduYWwucmVhc29uKVxuXG4gICAgLy8gMi4gUmV0dXJuIHAuXG4gICAgcmV0dXJuIHAucHJvbWlzZVxuICB9XG5cbiAgLy8gNS4gTGV0IGdsb2JhbE9iamVjdCBiZSByZXF1ZXN0XHUyMDE5cyBjbGllbnRcdTIwMTlzIGdsb2JhbCBvYmplY3QuXG4gIGNvbnN0IGdsb2JhbE9iamVjdCA9IHJlcXVlc3QuY2xpZW50Lmdsb2JhbE9iamVjdFxuXG4gIC8vIDYuIElmIGdsb2JhbE9iamVjdCBpcyBhIFNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZSBvYmplY3QsIHRoZW4gc2V0XG4gIC8vIHJlcXVlc3RcdTIwMTlzIHNlcnZpY2Utd29ya2VycyBtb2RlIHRvIFwibm9uZVwiLlxuICBpZiAoZ2xvYmFsT2JqZWN0Py5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gJ1NlcnZpY2VXb3JrZXJHbG9iYWxTY29wZScpIHtcbiAgICByZXF1ZXN0LnNlcnZpY2VXb3JrZXJzID0gJ25vbmUnXG4gIH1cblxuICAvLyA3LiBMZXQgcmVzcG9uc2VPYmplY3QgYmUgbnVsbC5cbiAgbGV0IHJlc3BvbnNlT2JqZWN0ID0gbnVsbFxuXG4gIC8vIDguIExldCByZWxldmFudFJlYWxtIGJlIHRoaXNcdTIwMTlzIHJlbGV2YW50IFJlYWxtLlxuICBjb25zdCByZWxldmFudFJlYWxtID0gbnVsbFxuXG4gIC8vIDkuIExldCBsb2NhbGx5QWJvcnRlZCBiZSBmYWxzZS5cbiAgbGV0IGxvY2FsbHlBYm9ydGVkID0gZmFsc2VcblxuICAvLyAxMC4gTGV0IGNvbnRyb2xsZXIgYmUgbnVsbC5cbiAgbGV0IGNvbnRyb2xsZXIgPSBudWxsXG5cbiAgLy8gMTEuIEFkZCB0aGUgZm9sbG93aW5nIGFib3J0IHN0ZXBzIHRvIHJlcXVlc3RPYmplY3RcdTIwMTlzIHNpZ25hbDpcbiAgYWRkQWJvcnRMaXN0ZW5lcihcbiAgICByZXF1ZXN0T2JqZWN0LnNpZ25hbCxcbiAgICAoKSA9PiB7XG4gICAgICAvLyAxLiBTZXQgbG9jYWxseUFib3J0ZWQgdG8gdHJ1ZS5cbiAgICAgIGxvY2FsbHlBYm9ydGVkID0gdHJ1ZVxuXG4gICAgICAvLyAyLiBBc3NlcnQ6IGNvbnRyb2xsZXIgaXMgbm9uLW51bGwuXG4gICAgICBhc3NlcnQoY29udHJvbGxlciAhPSBudWxsKVxuXG4gICAgICAvLyAzLiBBYm9ydCBjb250cm9sbGVyIHdpdGggcmVxdWVzdE9iamVjdFx1MjAxOXMgc2lnbmFsXHUyMDE5cyBhYm9ydCByZWFzb24uXG4gICAgICBjb250cm9sbGVyLmFib3J0KHJlcXVlc3RPYmplY3Quc2lnbmFsLnJlYXNvbilcblxuICAgICAgLy8gNC4gQWJvcnQgdGhlIGZldGNoKCkgY2FsbCB3aXRoIHAsIHJlcXVlc3QsIHJlc3BvbnNlT2JqZWN0LFxuICAgICAgLy8gICAgYW5kIHJlcXVlc3RPYmplY3RcdTIwMTlzIHNpZ25hbFx1MjAxOXMgYWJvcnQgcmVhc29uLlxuICAgICAgYWJvcnRGZXRjaChwLCByZXF1ZXN0LCByZXNwb25zZU9iamVjdCwgcmVxdWVzdE9iamVjdC5zaWduYWwucmVhc29uKVxuICAgIH1cbiAgKVxuXG4gIC8vIDEyLiBMZXQgaGFuZGxlRmV0Y2hEb25lIGdpdmVuIHJlc3BvbnNlIHJlc3BvbnNlIGJlIHRvIGZpbmFsaXplIGFuZFxuICAvLyByZXBvcnQgdGltaW5nIHdpdGggcmVzcG9uc2UsIGdsb2JhbE9iamVjdCwgYW5kIFwiZmV0Y2hcIi5cbiAgY29uc3QgaGFuZGxlRmV0Y2hEb25lID0gKHJlc3BvbnNlKSA9PlxuICAgIGZpbmFsaXplQW5kUmVwb3J0VGltaW5nKHJlc3BvbnNlLCAnZmV0Y2gnKVxuXG4gIC8vIDEzLiBTZXQgY29udHJvbGxlciB0byB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgZmV0Y2ggZ2l2ZW4gcmVxdWVzdCxcbiAgLy8gd2l0aCBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgc2V0IHRvIGhhbmRsZUZldGNoRG9uZSwgYW5kIHByb2Nlc3NSZXNwb25zZVxuICAvLyBnaXZlbiByZXNwb25zZSBiZWluZyB0aGVzZSBzdWJzdGVwczpcblxuICBjb25zdCBwcm9jZXNzUmVzcG9uc2UgPSAocmVzcG9uc2UpID0+IHtcbiAgICAvLyAxLiBJZiBsb2NhbGx5QWJvcnRlZCBpcyB0cnVlLCB0ZXJtaW5hdGUgdGhlc2Ugc3Vic3RlcHMuXG4gICAgaWYgKGxvY2FsbHlBYm9ydGVkKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICB9XG5cbiAgICAvLyAyLiBJZiByZXNwb25zZVx1MjAxOXMgYWJvcnRlZCBmbGFnIGlzIHNldCwgdGhlbjpcbiAgICBpZiAocmVzcG9uc2UuYWJvcnRlZCkge1xuICAgICAgLy8gMS4gTGV0IGRlc2VyaWFsaXplZEVycm9yIGJlIHRoZSByZXN1bHQgb2YgZGVzZXJpYWxpemUgYSBzZXJpYWxpemVkXG4gICAgICAvLyAgICBhYm9ydCByZWFzb24gZ2l2ZW4gY29udHJvbGxlclx1MjAxOXMgc2VyaWFsaXplZCBhYm9ydCByZWFzb24gYW5kXG4gICAgICAvLyAgICByZWxldmFudFJlYWxtLlxuXG4gICAgICAvLyAyLiBBYm9ydCB0aGUgZmV0Y2goKSBjYWxsIHdpdGggcCwgcmVxdWVzdCwgcmVzcG9uc2VPYmplY3QsIGFuZFxuICAgICAgLy8gICAgZGVzZXJpYWxpemVkRXJyb3IuXG5cbiAgICAgIGFib3J0RmV0Y2gocCwgcmVxdWVzdCwgcmVzcG9uc2VPYmplY3QsIGNvbnRyb2xsZXIuc2VyaWFsaXplZEFib3J0UmVhc29uKVxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpXG4gICAgfVxuXG4gICAgLy8gMy4gSWYgcmVzcG9uc2UgaXMgYSBuZXR3b3JrIGVycm9yLCB0aGVuIHJlamVjdCBwIHdpdGggYSBUeXBlRXJyb3JcbiAgICAvLyBhbmQgdGVybWluYXRlIHRoZXNlIHN1YnN0ZXBzLlxuICAgIGlmIChyZXNwb25zZS50eXBlID09PSAnZXJyb3InKSB7XG4gICAgICBwLnJlamVjdChcbiAgICAgICAgT2JqZWN0LmFzc2lnbihuZXcgVHlwZUVycm9yKCdmZXRjaCBmYWlsZWQnKSwgeyBjYXVzZTogcmVzcG9uc2UuZXJyb3IgfSlcbiAgICAgIClcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgIH1cblxuICAgIC8vIDQuIFNldCByZXNwb25zZU9iamVjdCB0byB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGEgUmVzcG9uc2Ugb2JqZWN0LFxuICAgIC8vIGdpdmVuIHJlc3BvbnNlLCBcImltbXV0YWJsZVwiLCBhbmQgcmVsZXZhbnRSZWFsbS5cbiAgICByZXNwb25zZU9iamVjdCA9IG5ldyBSZXNwb25zZSgpXG4gICAgcmVzcG9uc2VPYmplY3Rba1N0YXRlXSA9IHJlc3BvbnNlXG4gICAgcmVzcG9uc2VPYmplY3Rba1JlYWxtXSA9IHJlbGV2YW50UmVhbG1cbiAgICByZXNwb25zZU9iamVjdFtrSGVhZGVyc11ba0hlYWRlcnNMaXN0XSA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0XG4gICAgcmVzcG9uc2VPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSAnaW1tdXRhYmxlJ1xuICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrUmVhbG1dID0gcmVsZXZhbnRSZWFsbVxuXG4gICAgLy8gNS4gUmVzb2x2ZSBwIHdpdGggcmVzcG9uc2VPYmplY3QuXG4gICAgcC5yZXNvbHZlKHJlc3BvbnNlT2JqZWN0KVxuICB9XG5cbiAgY29udHJvbGxlciA9IGZldGNoaW5nKHtcbiAgICByZXF1ZXN0LFxuICAgIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keTogaGFuZGxlRmV0Y2hEb25lLFxuICAgIHByb2Nlc3NSZXNwb25zZSxcbiAgICBkaXNwYXRjaGVyOiBpbml0LmRpc3BhdGNoZXIgPz8gZ2V0R2xvYmFsRGlzcGF0Y2hlcigpIC8vIHVuZGljaVxuICB9KVxuXG4gIC8vIDE0LiBSZXR1cm4gcC5cbiAgcmV0dXJuIHAucHJvbWlzZVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmluYWxpemUtYW5kLXJlcG9ydC10aW1pbmdcbmZ1bmN0aW9uIGZpbmFsaXplQW5kUmVwb3J0VGltaW5nIChyZXNwb25zZSwgaW5pdGlhdG9yVHlwZSA9ICdvdGhlcicpIHtcbiAgLy8gMS4gSWYgcmVzcG9uc2UgaXMgYW4gYWJvcnRlZCBuZXR3b3JrIGVycm9yLCB0aGVuIHJldHVybi5cbiAgaWYgKHJlc3BvbnNlLnR5cGUgPT09ICdlcnJvcicgJiYgcmVzcG9uc2UuYWJvcnRlZCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gMi4gSWYgcmVzcG9uc2VcdTIwMTlzIFVSTCBsaXN0IGlzIG51bGwgb3IgZW1wdHksIHRoZW4gcmV0dXJuLlxuICBpZiAoIXJlc3BvbnNlLnVybExpc3Q/Lmxlbmd0aCkge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gMy4gTGV0IG9yaWdpbmFsVVJMIGJlIHJlc3BvbnNlXHUyMDE5cyBVUkwgbGlzdFswXS5cbiAgY29uc3Qgb3JpZ2luYWxVUkwgPSByZXNwb25zZS51cmxMaXN0WzBdXG5cbiAgLy8gNC4gTGV0IHRpbWluZ0luZm8gYmUgcmVzcG9uc2VcdTIwMTlzIHRpbWluZyBpbmZvLlxuICBsZXQgdGltaW5nSW5mbyA9IHJlc3BvbnNlLnRpbWluZ0luZm9cblxuICAvLyA1LiBMZXQgY2FjaGVTdGF0ZSBiZSByZXNwb25zZVx1MjAxOXMgY2FjaGUgc3RhdGUuXG4gIGxldCBjYWNoZVN0YXRlID0gcmVzcG9uc2UuY2FjaGVTdGF0ZVxuXG4gIC8vIDYuIElmIG9yaWdpbmFsVVJMXHUyMDE5cyBzY2hlbWUgaXMgbm90IGFuIEhUVFAoUykgc2NoZW1lLCB0aGVuIHJldHVybi5cbiAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShvcmlnaW5hbFVSTCkpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIC8vIDcuIElmIHRpbWluZ0luZm8gaXMgbnVsbCwgdGhlbiByZXR1cm4uXG4gIGlmICh0aW1pbmdJbmZvID09PSBudWxsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyA4LiBJZiByZXNwb25zZVx1MjAxOXMgdGltaW5nIGFsbG93IHBhc3NlZCBmbGFnIGlzIG5vdCBzZXQsIHRoZW46XG4gIGlmICghcmVzcG9uc2UudGltaW5nQWxsb3dQYXNzZWQpIHtcbiAgICAvLyAgMS4gU2V0IHRpbWluZ0luZm8gdG8gYSB0aGUgcmVzdWx0IG9mIGNyZWF0aW5nIGFuIG9wYXF1ZSB0aW1pbmcgaW5mbyBmb3IgdGltaW5nSW5mby5cbiAgICB0aW1pbmdJbmZvID0gY3JlYXRlT3BhcXVlVGltaW5nSW5mbyh7XG4gICAgICBzdGFydFRpbWU6IHRpbWluZ0luZm8uc3RhcnRUaW1lXG4gICAgfSlcblxuICAgIC8vICAyLiBTZXQgY2FjaGVTdGF0ZSB0byB0aGUgZW1wdHkgc3RyaW5nLlxuICAgIGNhY2hlU3RhdGUgPSAnJ1xuICB9XG5cbiAgLy8gOS4gU2V0IHRpbWluZ0luZm9cdTIwMTlzIGVuZCB0aW1lIHRvIHRoZSBjb2Fyc2VuZWQgc2hhcmVkIGN1cnJlbnQgdGltZVxuICAvLyBnaXZlbiBnbG9iYWxcdTIwMTlzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdFx1MjAxOXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkXG4gIC8vIGNhcGFiaWxpdHkuXG4gIC8vIFRPRE86IGdpdmVuIGdsb2JhbFx1MjAxOXMgcmVsZXZhbnQgc2V0dGluZ3Mgb2JqZWN0XHUyMDE5cyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWRcbiAgLy8gY2FwYWJpbGl0eT9cbiAgdGltaW5nSW5mby5lbmRUaW1lID0gY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUoKVxuXG4gIC8vIDEwLiBTZXQgcmVzcG9uc2VcdTIwMTlzIHRpbWluZyBpbmZvIHRvIHRpbWluZ0luZm8uXG4gIHJlc3BvbnNlLnRpbWluZ0luZm8gPSB0aW1pbmdJbmZvXG5cbiAgLy8gMTEuIE1hcmsgcmVzb3VyY2UgdGltaW5nIGZvciB0aW1pbmdJbmZvLCBvcmlnaW5hbFVSTCwgaW5pdGlhdG9yVHlwZSxcbiAgLy8gZ2xvYmFsLCBhbmQgY2FjaGVTdGF0ZS5cbiAgbWFya1Jlc291cmNlVGltaW5nKFxuICAgIHRpbWluZ0luZm8sXG4gICAgb3JpZ2luYWxVUkwsXG4gICAgaW5pdGlhdG9yVHlwZSxcbiAgICBnbG9iYWxUaGlzLFxuICAgIGNhY2hlU3RhdGVcbiAgKVxufVxuXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vcmVzb3VyY2UtdGltaW5nLyNkZm4tbWFyay1yZXNvdXJjZS10aW1pbmdcbmZ1bmN0aW9uIG1hcmtSZXNvdXJjZVRpbWluZyAodGltaW5nSW5mbywgb3JpZ2luYWxVUkwsIGluaXRpYXRvclR5cGUsIGdsb2JhbFRoaXMsIGNhY2hlU3RhdGUpIHtcbiAgaWYgKG5vZGVNYWpvciA+IDE4IHx8IChub2RlTWFqb3IgPT09IDE4ICYmIG5vZGVNaW5vciA+PSAyKSkge1xuICAgIHBlcmZvcm1hbmNlLm1hcmtSZXNvdXJjZVRpbWluZyh0aW1pbmdJbmZvLCBvcmlnaW5hbFVSTC5ocmVmLCBpbml0aWF0b3JUeXBlLCBnbG9iYWxUaGlzLCBjYWNoZVN0YXRlKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNhYm9ydC1mZXRjaFxuZnVuY3Rpb24gYWJvcnRGZXRjaCAocCwgcmVxdWVzdCwgcmVzcG9uc2VPYmplY3QsIGVycm9yKSB7XG4gIC8vIE5vdGU6IEFib3J0U2lnbmFsLnJlYXNvbiB3YXMgYWRkZWQgaW4gbm9kZSB2MTcuMi4wXG4gIC8vIHdoaWNoIHdvdWxkIGdpdmUgdXMgYW4gdW5kZWZpbmVkIGVycm9yIHRvIHJlamVjdCB3aXRoLlxuICAvLyBSZW1vdmUgdGhpcyBvbmNlIG5vZGUgdjE2IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuXG4gIGlmICghZXJyb3IpIHtcbiAgICBlcnJvciA9IG5ldyBET01FeGNlcHRpb24oJ1RoZSBvcGVyYXRpb24gd2FzIGFib3J0ZWQuJywgJ0Fib3J0RXJyb3InKVxuICB9XG5cbiAgLy8gMS4gUmVqZWN0IHByb21pc2Ugd2l0aCBlcnJvci5cbiAgcC5yZWplY3QoZXJyb3IpXG5cbiAgLy8gMi4gSWYgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBub3QgbnVsbCBhbmQgaXMgcmVhZGFibGUsIHRoZW4gY2FuY2VsIHJlcXVlc3RcdTIwMTlzXG4gIC8vIGJvZHkgd2l0aCBlcnJvci5cbiAgaWYgKHJlcXVlc3QuYm9keSAhPSBudWxsICYmIGlzUmVhZGFibGUocmVxdWVzdC5ib2R5Py5zdHJlYW0pKSB7XG4gICAgcmVxdWVzdC5ib2R5LnN0cmVhbS5jYW5jZWwoZXJyb3IpLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VSUl9JTlZBTElEX1NUQVRFJykge1xuICAgICAgICAvLyBOb2RlIGJ1Zz9cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJcbiAgICB9KVxuICB9XG5cbiAgLy8gMy4gSWYgcmVzcG9uc2VPYmplY3QgaXMgbnVsbCwgdGhlbiByZXR1cm4uXG4gIGlmIChyZXNwb25zZU9iamVjdCA9PSBudWxsKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICAvLyA0LiBMZXQgcmVzcG9uc2UgYmUgcmVzcG9uc2VPYmplY3RcdTIwMTlzIHJlc3BvbnNlLlxuICBjb25zdCByZXNwb25zZSA9IHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV1cblxuICAvLyA1LiBJZiByZXNwb25zZVx1MjAxOXMgYm9keSBpcyBub3QgbnVsbCBhbmQgaXMgcmVhZGFibGUsIHRoZW4gZXJyb3IgcmVzcG9uc2VcdTIwMTlzXG4gIC8vIGJvZHkgd2l0aCBlcnJvci5cbiAgaWYgKHJlc3BvbnNlLmJvZHkgIT0gbnVsbCAmJiBpc1JlYWRhYmxlKHJlc3BvbnNlLmJvZHk/LnN0cmVhbSkpIHtcbiAgICByZXNwb25zZS5ib2R5LnN0cmVhbS5jYW5jZWwoZXJyb3IpLmNhdGNoKChlcnIpID0+IHtcbiAgICAgIGlmIChlcnIuY29kZSA9PT0gJ0VSUl9JTlZBTElEX1NUQVRFJykge1xuICAgICAgICAvLyBOb2RlIGJ1Zz9cbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJcbiAgICB9KVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNmZXRjaGluZ1xuZnVuY3Rpb24gZmV0Y2hpbmcgKHtcbiAgcmVxdWVzdCxcbiAgcHJvY2Vzc1JlcXVlc3RCb2R5Q2h1bmtMZW5ndGgsXG4gIHByb2Nlc3NSZXF1ZXN0RW5kT2ZCb2R5LFxuICBwcm9jZXNzUmVzcG9uc2UsXG4gIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSxcbiAgcHJvY2Vzc1Jlc3BvbnNlQ29uc3VtZUJvZHksXG4gIHVzZVBhcmFsbGVsUXVldWUgPSBmYWxzZSxcbiAgZGlzcGF0Y2hlciAvLyB1bmRpY2lcbn0pIHtcbiAgLy8gMS4gTGV0IHRhc2tEZXN0aW5hdGlvbiBiZSBudWxsLlxuICBsZXQgdGFza0Rlc3RpbmF0aW9uID0gbnVsbFxuXG4gIC8vIDIuIExldCBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSBiZSBmYWxzZS5cbiAgbGV0IGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5ID0gZmFsc2VcblxuICAvLyAzLiBJZiByZXF1ZXN0XHUyMDE5cyBjbGllbnQgaXMgbm9uLW51bGwsIHRoZW46XG4gIGlmIChyZXF1ZXN0LmNsaWVudCAhPSBudWxsKSB7XG4gICAgLy8gMS4gU2V0IHRhc2tEZXN0aW5hdGlvbiB0byByZXF1ZXN0XHUyMDE5cyBjbGllbnRcdTIwMTlzIGdsb2JhbCBvYmplY3QuXG4gICAgdGFza0Rlc3RpbmF0aW9uID0gcmVxdWVzdC5jbGllbnQuZ2xvYmFsT2JqZWN0XG5cbiAgICAvLyAyLiBTZXQgY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkgdG8gcmVxdWVzdFx1MjAxOXMgY2xpZW50XHUyMDE5cyBjcm9zcy1vcmlnaW5cbiAgICAvLyBpc29sYXRlZCBjYXBhYmlsaXR5LlxuICAgIGNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5ID1cbiAgICAgIHJlcXVlc3QuY2xpZW50LmNyb3NzT3JpZ2luSXNvbGF0ZWRDYXBhYmlsaXR5XG4gIH1cblxuICAvLyA0LiBJZiB1c2VQYXJhbGxlbFF1ZXVlIGlzIHRydWUsIHRoZW4gc2V0IHRhc2tEZXN0aW5hdGlvbiB0byB0aGUgcmVzdWx0IG9mXG4gIC8vIHN0YXJ0aW5nIGEgbmV3IHBhcmFsbGVsIHF1ZXVlLlxuICAvLyBUT0RPXG5cbiAgLy8gNS4gTGV0IHRpbWluZ0luZm8gYmUgYSBuZXcgZmV0Y2ggdGltaW5nIGluZm8gd2hvc2Ugc3RhcnQgdGltZSBhbmRcbiAgLy8gcG9zdC1yZWRpcmVjdCBzdGFydCB0aW1lIGFyZSB0aGUgY29hcnNlbmVkIHNoYXJlZCBjdXJyZW50IHRpbWUgZ2l2ZW5cbiAgLy8gY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkuXG4gIGNvbnN0IGN1cnJlblRpbWUgPSBjb2Fyc2VuZWRTaGFyZWRDdXJyZW50VGltZShjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eSlcbiAgY29uc3QgdGltaW5nSW5mbyA9IGNyZWF0ZU9wYXF1ZVRpbWluZ0luZm8oe1xuICAgIHN0YXJ0VGltZTogY3VycmVuVGltZVxuICB9KVxuXG4gIC8vIDYuIExldCBmZXRjaFBhcmFtcyBiZSBhIG5ldyBmZXRjaCBwYXJhbXMgd2hvc2VcbiAgLy8gcmVxdWVzdCBpcyByZXF1ZXN0LFxuICAvLyB0aW1pbmcgaW5mbyBpcyB0aW1pbmdJbmZvLFxuICAvLyBwcm9jZXNzIHJlcXVlc3QgYm9keSBjaHVuayBsZW5ndGggaXMgcHJvY2Vzc1JlcXVlc3RCb2R5Q2h1bmtMZW5ndGgsXG4gIC8vIHByb2Nlc3MgcmVxdWVzdCBlbmQtb2YtYm9keSBpcyBwcm9jZXNzUmVxdWVzdEVuZE9mQm9keSxcbiAgLy8gcHJvY2VzcyByZXNwb25zZSBpcyBwcm9jZXNzUmVzcG9uc2UsXG4gIC8vIHByb2Nlc3MgcmVzcG9uc2UgY29uc3VtZSBib2R5IGlzIHByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5LFxuICAvLyBwcm9jZXNzIHJlc3BvbnNlIGVuZC1vZi1ib2R5IGlzIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSxcbiAgLy8gdGFzayBkZXN0aW5hdGlvbiBpcyB0YXNrRGVzdGluYXRpb24sXG4gIC8vIGFuZCBjcm9zcy1vcmlnaW4gaXNvbGF0ZWQgY2FwYWJpbGl0eSBpcyBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eS5cbiAgY29uc3QgZmV0Y2hQYXJhbXMgPSB7XG4gICAgY29udHJvbGxlcjogbmV3IEZldGNoKGRpc3BhdGNoZXIpLFxuICAgIHJlcXVlc3QsXG4gICAgdGltaW5nSW5mbyxcbiAgICBwcm9jZXNzUmVxdWVzdEJvZHlDaHVua0xlbmd0aCxcbiAgICBwcm9jZXNzUmVxdWVzdEVuZE9mQm9keSxcbiAgICBwcm9jZXNzUmVzcG9uc2UsXG4gICAgcHJvY2Vzc1Jlc3BvbnNlQ29uc3VtZUJvZHksXG4gICAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LFxuICAgIHRhc2tEZXN0aW5hdGlvbixcbiAgICBjcm9zc09yaWdpbklzb2xhdGVkQ2FwYWJpbGl0eVxuICB9XG5cbiAgLy8gNy4gSWYgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBhIGJ5dGUgc2VxdWVuY2UsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzIGJvZHkgdG9cbiAgLy8gICAgcmVxdWVzdFx1MjAxOXMgYm9keSBhcyBhIGJvZHkuXG4gIC8vIE5PVEU6IFNpbmNlIGZldGNoaW5nIGlzIG9ubHkgY2FsbGVkIGZyb20gZmV0Y2gsIGJvZHkgc2hvdWxkIGFscmVhZHkgYmVcbiAgLy8gZXh0cmFjdGVkLlxuICBhc3NlcnQoIXJlcXVlc3QuYm9keSB8fCByZXF1ZXN0LmJvZHkuc3RyZWFtKVxuXG4gIC8vIDguIElmIHJlcXVlc3RcdTIwMTlzIHdpbmRvdyBpcyBcImNsaWVudFwiLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyB3aW5kb3cgdG8gcmVxdWVzdFx1MjAxOXNcbiAgLy8gY2xpZW50LCBpZiByZXF1ZXN0XHUyMDE5cyBjbGllbnRcdTIwMTlzIGdsb2JhbCBvYmplY3QgaXMgYSBXaW5kb3cgb2JqZWN0OyBvdGhlcndpc2VcbiAgLy8gXCJuby13aW5kb3dcIi5cbiAgaWYgKHJlcXVlc3Qud2luZG93ID09PSAnY2xpZW50Jykge1xuICAgIC8vIFRPRE86IFdoYXQgaWYgcmVxdWVzdC5jbGllbnQgaXMgbnVsbD9cbiAgICByZXF1ZXN0LndpbmRvdyA9XG4gICAgICByZXF1ZXN0LmNsaWVudD8uZ2xvYmFsT2JqZWN0Py5jb25zdHJ1Y3Rvcj8ubmFtZSA9PT0gJ1dpbmRvdydcbiAgICAgICAgPyByZXF1ZXN0LmNsaWVudFxuICAgICAgICA6ICduby13aW5kb3cnXG4gIH1cblxuICAvLyA5LiBJZiByZXF1ZXN0XHUyMDE5cyBvcmlnaW4gaXMgXCJjbGllbnRcIiwgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgb3JpZ2luIHRvIHJlcXVlc3RcdTIwMTlzXG4gIC8vIGNsaWVudFx1MjAxOXMgb3JpZ2luLlxuICBpZiAocmVxdWVzdC5vcmlnaW4gPT09ICdjbGllbnQnKSB7XG4gICAgLy8gVE9ETzogV2hhdCBpZiByZXF1ZXN0LmNsaWVudCBpcyBudWxsP1xuICAgIHJlcXVlc3Qub3JpZ2luID0gcmVxdWVzdC5jbGllbnQ/Lm9yaWdpblxuICB9XG5cbiAgLy8gMTAuIElmIGFsbCBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHRydWU6XG4gIC8vIFRPRE9cblxuICAvLyAxMS4gSWYgcmVxdWVzdFx1MjAxOXMgcG9saWN5IGNvbnRhaW5lciBpcyBcImNsaWVudFwiLCB0aGVuOlxuICBpZiAocmVxdWVzdC5wb2xpY3lDb250YWluZXIgPT09ICdjbGllbnQnKSB7XG4gICAgLy8gMS4gSWYgcmVxdWVzdFx1MjAxOXMgY2xpZW50IGlzIG5vbi1udWxsLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyBwb2xpY3lcbiAgICAvLyBjb250YWluZXIgdG8gYSBjbG9uZSBvZiByZXF1ZXN0XHUyMDE5cyBjbGllbnRcdTIwMTlzIHBvbGljeSBjb250YWluZXIuIFtIVE1MXVxuICAgIGlmIChyZXF1ZXN0LmNsaWVudCAhPSBudWxsKSB7XG4gICAgICByZXF1ZXN0LnBvbGljeUNvbnRhaW5lciA9IGNsb25lUG9saWN5Q29udGFpbmVyKFxuICAgICAgICByZXF1ZXN0LmNsaWVudC5wb2xpY3lDb250YWluZXJcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMi4gT3RoZXJ3aXNlLCBzZXQgcmVxdWVzdFx1MjAxOXMgcG9saWN5IGNvbnRhaW5lciB0byBhIG5ldyBwb2xpY3lcbiAgICAgIC8vIGNvbnRhaW5lci5cbiAgICAgIHJlcXVlc3QucG9saWN5Q29udGFpbmVyID0gbWFrZVBvbGljeUNvbnRhaW5lcigpXG4gICAgfVxuICB9XG5cbiAgLy8gMTIuIElmIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYEFjY2VwdGAsIHRoZW46XG4gIGlmICghcmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnYWNjZXB0JykpIHtcbiAgICAvLyAxLiBMZXQgdmFsdWUgYmUgYCovKmAuXG4gICAgY29uc3QgdmFsdWUgPSAnKi8qJ1xuXG4gICAgLy8gMi4gQSB1c2VyIGFnZW50IHNob3VsZCBzZXQgdmFsdWUgdG8gdGhlIGZpcnN0IG1hdGNoaW5nIHN0YXRlbWVudCwgaWZcbiAgICAvLyBhbnksIHN3aXRjaGluZyBvbiByZXF1ZXN0XHUyMDE5cyBkZXN0aW5hdGlvbjpcbiAgICAvLyBcImRvY3VtZW50XCJcbiAgICAvLyBcImZyYW1lXCJcbiAgICAvLyBcImlmcmFtZVwiXG4gICAgLy8gYHRleHQvaHRtbCxhcHBsaWNhdGlvbi94aHRtbCt4bWwsYXBwbGljYXRpb24veG1sO3E9MC45LCovKjtxPTAuOGBcbiAgICAvLyBcImltYWdlXCJcbiAgICAvLyBgaW1hZ2UvcG5nLGltYWdlL3N2Zyt4bWwsaW1hZ2UvKjtxPTAuOCwqLyo7cT0wLjVgXG4gICAgLy8gXCJzdHlsZVwiXG4gICAgLy8gYHRleHQvY3NzLCovKjtxPTAuMWBcbiAgICAvLyBUT0RPXG5cbiAgICAvLyAzLiBBcHBlbmQgYEFjY2VwdGAvdmFsdWUgdG8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2FjY2VwdCcsIHZhbHVlKVxuICB9XG5cbiAgLy8gMTMuIElmIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGRvZXMgbm90IGNvbnRhaW4gYEFjY2VwdC1MYW5ndWFnZWAsIHRoZW5cbiAgLy8gdXNlciBhZ2VudHMgc2hvdWxkIGFwcGVuZCBgQWNjZXB0LUxhbmd1YWdlYC9hbiBhcHByb3ByaWF0ZSB2YWx1ZSB0b1xuICAvLyByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgaWYgKCFyZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdhY2NlcHQtbGFuZ3VhZ2UnKSkge1xuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdhY2NlcHQtbGFuZ3VhZ2UnLCAnKicpXG4gIH1cblxuICAvLyAxNC4gSWYgcmVxdWVzdFx1MjAxOXMgcHJpb3JpdHkgaXMgbnVsbCwgdGhlbiB1c2UgcmVxdWVzdFx1MjAxOXMgaW5pdGlhdG9yIGFuZFxuICAvLyBkZXN0aW5hdGlvbiBhcHByb3ByaWF0ZWx5IGluIHNldHRpbmcgcmVxdWVzdFx1MjAxOXMgcHJpb3JpdHkgdG8gYVxuICAvLyB1c2VyLWFnZW50LWRlZmluZWQgb2JqZWN0LlxuICBpZiAocmVxdWVzdC5wcmlvcml0eSA9PT0gbnVsbCkge1xuICAgIC8vIFRPRE9cbiAgfVxuXG4gIC8vIDE1LiBJZiByZXF1ZXN0IGlzIGEgc3VicmVzb3VyY2UgcmVxdWVzdCwgdGhlbjpcbiAgaWYgKHN1YnJlc291cmNlU2V0LmhhcyhyZXF1ZXN0LmRlc3RpbmF0aW9uKSkge1xuICAgIC8vIFRPRE9cbiAgfVxuXG4gIC8vIDE2LiBSdW4gbWFpbiBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcy5cbiAgbWFpbkZldGNoKGZldGNoUGFyYW1zKVxuICAgIC5jYXRjaChlcnIgPT4ge1xuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci50ZXJtaW5hdGUoZXJyKVxuICAgIH0pXG5cbiAgLy8gMTcuIFJldHVybiBmZXRjaFBhcmFtJ3MgY29udHJvbGxlclxuICByZXR1cm4gZmV0Y2hQYXJhbXMuY29udHJvbGxlclxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1tYWluLWZldGNoXG5hc3luYyBmdW5jdGlvbiBtYWluRmV0Y2ggKGZldGNoUGFyYW1zLCByZWN1cnNpdmUgPSBmYWxzZSkge1xuICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IGZldGNoUGFyYW1zLnJlcXVlc3RcblxuICAvLyAyLiBMZXQgcmVzcG9uc2UgYmUgbnVsbC5cbiAgbGV0IHJlc3BvbnNlID0gbnVsbFxuXG4gIC8vIDMuIElmIHJlcXVlc3RcdTIwMTlzIGxvY2FsLVVSTHMtb25seSBmbGFnIGlzIHNldCBhbmQgcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkwgaXNcbiAgLy8gbm90IGxvY2FsLCB0aGVuIHNldCByZXNwb25zZSB0byBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChyZXF1ZXN0LmxvY2FsVVJMc09ubHkgJiYgIXVybElzTG9jYWwocmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdCkpKSB7XG4gICAgcmVzcG9uc2UgPSBtYWtlTmV0d29ya0Vycm9yKCdsb2NhbCBVUkxzIG9ubHknKVxuICB9XG5cbiAgLy8gNC4gUnVuIHJlcG9ydCBDb250ZW50IFNlY3VyaXR5IFBvbGljeSB2aW9sYXRpb25zIGZvciByZXF1ZXN0LlxuICAvLyBUT0RPXG5cbiAgLy8gNS4gVXBncmFkZSByZXF1ZXN0IHRvIGEgcG90ZW50aWFsbHkgdHJ1c3R3b3J0aHkgVVJMLCBpZiBhcHByb3ByaWF0ZS5cbiAgdHJ5VXBncmFkZVJlcXVlc3RUb0FQb3RlbnRpYWxseVRydXN0d29ydGh5VVJMKHJlcXVlc3QpXG5cbiAgLy8gNi4gSWYgc2hvdWxkIHJlcXVlc3QgYmUgYmxvY2tlZCBkdWUgdG8gYSBiYWQgcG9ydCwgc2hvdWxkIGZldGNoaW5nIHJlcXVlc3RcbiAgLy8gYmUgYmxvY2tlZCBhcyBtaXhlZCBjb250ZW50LCBvciBzaG91bGQgcmVxdWVzdCBiZSBibG9ja2VkIGJ5IENvbnRlbnRcbiAgLy8gU2VjdXJpdHkgUG9saWN5IHJldHVybnMgYmxvY2tlZCwgdGhlbiBzZXQgcmVzcG9uc2UgdG8gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAocmVxdWVzdEJhZFBvcnQocmVxdWVzdCkgPT09ICdibG9ja2VkJykge1xuICAgIHJlc3BvbnNlID0gbWFrZU5ldHdvcmtFcnJvcignYmFkIHBvcnQnKVxuICB9XG4gIC8vIFRPRE86IHNob3VsZCBmZXRjaGluZyByZXF1ZXN0IGJlIGJsb2NrZWQgYXMgbWl4ZWQgY29udGVudD9cbiAgLy8gVE9ETzogc2hvdWxkIHJlcXVlc3QgYmUgYmxvY2tlZCBieSBDb250ZW50IFNlY3VyaXR5IFBvbGljeT9cblxuICAvLyA3LiBJZiByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBwb2xpY3kgaXMgdGhlIGVtcHR5IHN0cmluZywgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXNcbiAgLy8gcmVmZXJyZXIgcG9saWN5IHRvIHJlcXVlc3RcdTIwMTlzIHBvbGljeSBjb250YWluZXJcdTIwMTlzIHJlZmVycmVyIHBvbGljeS5cbiAgaWYgKHJlcXVlc3QucmVmZXJyZXJQb2xpY3kgPT09ICcnKSB7XG4gICAgcmVxdWVzdC5yZWZlcnJlclBvbGljeSA9IHJlcXVlc3QucG9saWN5Q29udGFpbmVyLnJlZmVycmVyUG9saWN5XG4gIH1cblxuICAvLyA4LiBJZiByZXF1ZXN0XHUyMDE5cyByZWZlcnJlciBpcyBub3QgXCJuby1yZWZlcnJlclwiLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5c1xuICAvLyByZWZlcnJlciB0byB0aGUgcmVzdWx0IG9mIGludm9raW5nIGRldGVybWluZSByZXF1ZXN0XHUyMDE5cyByZWZlcnJlci5cbiAgaWYgKHJlcXVlc3QucmVmZXJyZXIgIT09ICduby1yZWZlcnJlcicpIHtcbiAgICByZXF1ZXN0LnJlZmVycmVyID0gZGV0ZXJtaW5lUmVxdWVzdHNSZWZlcnJlcihyZXF1ZXN0KVxuICB9XG5cbiAgLy8gOS4gU2V0IHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBzY2hlbWUgdG8gXCJodHRwc1wiIGlmIGFsbCBvZiB0aGUgZm9sbG93aW5nXG4gIC8vIGNvbmRpdGlvbnMgYXJlIHRydWU6XG4gIC8vIC0gcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIHNjaGVtZSBpcyBcImh0dHBcIlxuICAvLyAtIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBob3N0IGlzIGEgZG9tYWluXG4gIC8vIC0gTWF0Y2hpbmcgcmVxdWVzdFx1MjAxOXMgY3VycmVudCBVUkxcdTIwMTlzIGhvc3QgcGVyIEtub3duIEhTVFMgSG9zdCBEb21haW4gTmFtZVxuICAvLyAgIE1hdGNoaW5nIHJlc3VsdHMgaW4gZWl0aGVyIGEgc3VwZXJkb21haW4gbWF0Y2ggd2l0aCBhbiBhc3NlcnRlZFxuICAvLyAgIGluY2x1ZGVTdWJEb21haW5zIGRpcmVjdGl2ZSBvciBhIGNvbmdydWVudCBtYXRjaCAod2l0aCBvciB3aXRob3V0IGFuXG4gIC8vICAgYXNzZXJ0ZWQgaW5jbHVkZVN1YkRvbWFpbnMgZGlyZWN0aXZlKS4gW0hTVFNdXG4gIC8vIFRPRE9cblxuICAvLyAxMC4gSWYgcmVjdXJzaXZlIGlzIGZhbHNlLCB0aGVuIHJ1biB0aGUgcmVtYWluaW5nIHN0ZXBzIGluIHBhcmFsbGVsLlxuICAvLyBUT0RPXG5cbiAgLy8gMTEuIElmIHJlc3BvbnNlIGlzIG51bGwsIHRoZW4gc2V0IHJlc3BvbnNlIHRvIHRoZSByZXN1bHQgb2YgcnVubmluZ1xuICAvLyB0aGUgc3RlcHMgY29ycmVzcG9uZGluZyB0byB0aGUgZmlyc3QgbWF0Y2hpbmcgc3RhdGVtZW50OlxuICBpZiAocmVzcG9uc2UgPT09IG51bGwpIHtcbiAgICByZXNwb25zZSA9IGF3YWl0IChhc3luYyAoKSA9PiB7XG4gICAgICBjb25zdCBjdXJyZW50VVJMID0gcmVxdWVzdEN1cnJlbnRVUkwocmVxdWVzdClcblxuICAgICAgaWYgKFxuICAgICAgICAvLyAtIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBvcmlnaW4gaXMgc2FtZSBvcmlnaW4gd2l0aCByZXF1ZXN0XHUyMDE5cyBvcmlnaW4sXG4gICAgICAgIC8vICAgYW5kIHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIFwiYmFzaWNcIlxuICAgICAgICAoc2FtZU9yaWdpbihjdXJyZW50VVJMLCByZXF1ZXN0LnVybCkgJiYgcmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnYmFzaWMnKSB8fFxuICAgICAgICAvLyByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgc2NoZW1lIGlzIFwiZGF0YVwiXG4gICAgICAgIChjdXJyZW50VVJMLnByb3RvY29sID09PSAnZGF0YTonKSB8fFxuICAgICAgICAvLyAtIHJlcXVlc3RcdTIwMTlzIG1vZGUgaXMgXCJuYXZpZ2F0ZVwiIG9yIFwid2Vic29ja2V0XCJcbiAgICAgICAgKHJlcXVlc3QubW9kZSA9PT0gJ25hdmlnYXRlJyB8fCByZXF1ZXN0Lm1vZGUgPT09ICd3ZWJzb2NrZXQnKVxuICAgICAgKSB7XG4gICAgICAgIC8vIDEuIFNldCByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyB0byBcImJhc2ljXCIuXG4gICAgICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9ICdiYXNpYydcblxuICAgICAgICAvLyAyLiBSZXR1cm4gdGhlIHJlc3VsdCBvZiBydW5uaW5nIHNjaGVtZSBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcy5cbiAgICAgICAgcmV0dXJuIGF3YWl0IHNjaGVtZUZldGNoKGZldGNoUGFyYW1zKVxuICAgICAgfVxuXG4gICAgICAvLyByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzIFwic2FtZS1vcmlnaW5cIlxuICAgICAgaWYgKHJlcXVlc3QubW9kZSA9PT0gJ3NhbWUtb3JpZ2luJykge1xuICAgICAgICAvLyAxLiBSZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcigncmVxdWVzdCBtb2RlIGNhbm5vdCBiZSBcInNhbWUtb3JpZ2luXCInKVxuICAgICAgfVxuXG4gICAgICAvLyByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzIFwibm8tY29yc1wiXG4gICAgICBpZiAocmVxdWVzdC5tb2RlID09PSAnbm8tY29ycycpIHtcbiAgICAgICAgLy8gMS4gSWYgcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgbW9kZSBpcyBub3QgXCJmb2xsb3dcIiwgdGhlbiByZXR1cm4gYSBuZXR3b3JrXG4gICAgICAgIC8vIGVycm9yLlxuICAgICAgICBpZiAocmVxdWVzdC5yZWRpcmVjdCAhPT0gJ2ZvbGxvdycpIHtcbiAgICAgICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcihcbiAgICAgICAgICAgICdyZWRpcmVjdCBtb2RlIGNhbm5vdCBiZSBcImZvbGxvd1wiIGZvciBcIm5vLWNvcnNcIiByZXF1ZXN0J1xuICAgICAgICAgIClcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDIuIFNldCByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyB0byBcIm9wYXF1ZVwiLlxuICAgICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPSAnb3BhcXVlJ1xuXG4gICAgICAgIC8vIDMuIFJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgc2NoZW1lIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLlxuICAgICAgICByZXR1cm4gYXdhaXQgc2NoZW1lRmV0Y2goZmV0Y2hQYXJhbXMpXG4gICAgICB9XG5cbiAgICAgIC8vIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBzY2hlbWUgaXMgbm90IGFuIEhUVFAoUykgc2NoZW1lXG4gICAgICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpKSkge1xuICAgICAgICAvLyBSZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcignVVJMIHNjaGVtZSBtdXN0IGJlIGEgSFRUUChTKSBzY2hlbWUnKVxuICAgICAgfVxuXG4gICAgICAvLyAtIHJlcXVlc3RcdTIwMTlzIHVzZS1DT1JTLXByZWZsaWdodCBmbGFnIGlzIHNldFxuICAgICAgLy8gLSByZXF1ZXN0XHUyMDE5cyB1bnNhZmUtcmVxdWVzdCBmbGFnIGlzIHNldCBhbmQgZWl0aGVyIHJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpc1xuICAgICAgLy8gICBub3QgYSBDT1JTLXNhZmVsaXN0ZWQgbWV0aG9kIG9yIENPUlMtdW5zYWZlIHJlcXVlc3QtaGVhZGVyIG5hbWVzIHdpdGhcbiAgICAgIC8vICAgcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgaXMgbm90IGVtcHR5XG4gICAgICAvLyAgICAxLiBTZXQgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgdG8gXCJjb3JzXCIuXG4gICAgICAvLyAgICAyLiBMZXQgY29yc1dpdGhQcmVmbGlnaHRSZXNwb25zZSBiZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUCBmZXRjaFxuICAgICAgLy8gICAgZ2l2ZW4gZmV0Y2hQYXJhbXMgYW5kIHRydWUuXG4gICAgICAvLyAgICAzLiBJZiBjb3JzV2l0aFByZWZsaWdodFJlc3BvbnNlIGlzIGEgbmV0d29yayBlcnJvciwgdGhlbiBjbGVhciBjYWNoZVxuICAgICAgLy8gICAgZW50cmllcyB1c2luZyByZXF1ZXN0LlxuICAgICAgLy8gICAgNC4gUmV0dXJuIGNvcnNXaXRoUHJlZmxpZ2h0UmVzcG9uc2UuXG4gICAgICAvLyBUT0RPXG5cbiAgICAgIC8vIE90aGVyd2lzZVxuICAgICAgLy8gICAgMS4gU2V0IHJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIHRvIFwiY29yc1wiLlxuICAgICAgcmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID0gJ2NvcnMnXG5cbiAgICAgIC8vICAgIDIuIFJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUCBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcy5cbiAgICAgIHJldHVybiBhd2FpdCBodHRwRmV0Y2goZmV0Y2hQYXJhbXMpXG4gICAgfSkoKVxuICB9XG5cbiAgLy8gMTIuIElmIHJlY3Vyc2l2ZSBpcyB0cnVlLCB0aGVuIHJldHVybiByZXNwb25zZS5cbiAgaWYgKHJlY3Vyc2l2ZSkge1xuICAgIHJldHVybiByZXNwb25zZVxuICB9XG5cbiAgLy8gMTMuIElmIHJlc3BvbnNlIGlzIG5vdCBhIG5ldHdvcmsgZXJyb3IgYW5kIHJlc3BvbnNlIGlzIG5vdCBhIGZpbHRlcmVkXG4gIC8vIHJlc3BvbnNlLCB0aGVuOlxuICBpZiAocmVzcG9uc2Uuc3RhdHVzICE9PSAwICYmICFyZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlKSB7XG4gICAgLy8gSWYgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJjb3JzXCIsIHRoZW46XG4gICAgaWYgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnKSB7XG4gICAgICAvLyAxLiBMZXQgaGVhZGVyTmFtZXMgYmUgdGhlIHJlc3VsdCBvZiBleHRyYWN0aW5nIGhlYWRlciBsaXN0IHZhbHVlc1xuICAgICAgLy8gZ2l2ZW4gYEFjY2Vzcy1Db250cm9sLUV4cG9zZS1IZWFkZXJzYCBhbmQgcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgICAgLy8gVE9ET1xuICAgICAgLy8gMi4gSWYgcmVxdWVzdFx1MjAxOXMgY3JlZGVudGlhbHMgbW9kZSBpcyBub3QgXCJpbmNsdWRlXCIgYW5kIGhlYWRlck5hbWVzXG4gICAgICAvLyBjb250YWlucyBgKmAsIHRoZW4gc2V0IHJlc3BvbnNlXHUyMDE5cyBDT1JTLWV4cG9zZWQgaGVhZGVyLW5hbWUgbGlzdCB0b1xuICAgICAgLy8gYWxsIHVuaXF1ZSBoZWFkZXIgbmFtZXMgaW4gcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgICAgLy8gVE9ET1xuICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBpZiBoZWFkZXJOYW1lcyBpcyBub3QgbnVsbCBvciBmYWlsdXJlLCB0aGVuIHNldFxuICAgICAgLy8gcmVzcG9uc2VcdTIwMTlzIENPUlMtZXhwb3NlZCBoZWFkZXItbmFtZSBsaXN0IHRvIGhlYWRlck5hbWVzLlxuICAgICAgLy8gVE9ET1xuICAgIH1cblxuICAgIC8vIFNldCByZXNwb25zZSB0byB0aGUgZm9sbG93aW5nIGZpbHRlcmVkIHJlc3BvbnNlIHdpdGggcmVzcG9uc2UgYXMgaXRzXG4gICAgLy8gaW50ZXJuYWwgcmVzcG9uc2UsIGRlcGVuZGluZyBvbiByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZzpcbiAgICBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnYmFzaWMnKSB7XG4gICAgICByZXNwb25zZSA9IGZpbHRlclJlc3BvbnNlKHJlc3BvbnNlLCAnYmFzaWMnKVxuICAgIH0gZWxzZSBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnY29ycycpIHtcbiAgICAgIHJlc3BvbnNlID0gZmlsdGVyUmVzcG9uc2UocmVzcG9uc2UsICdjb3JzJylcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ29wYXF1ZScpIHtcbiAgICAgIHJlc3BvbnNlID0gZmlsdGVyUmVzcG9uc2UocmVzcG9uc2UsICdvcGFxdWUnKVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQoZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgLy8gMTQuIExldCBpbnRlcm5hbFJlc3BvbnNlIGJlIHJlc3BvbnNlLCBpZiByZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3IsXG4gIC8vIGFuZCByZXNwb25zZVx1MjAxOXMgaW50ZXJuYWwgcmVzcG9uc2Ugb3RoZXJ3aXNlLlxuICBsZXQgaW50ZXJuYWxSZXNwb25zZSA9XG4gICAgcmVzcG9uc2Uuc3RhdHVzID09PSAwID8gcmVzcG9uc2UgOiByZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlXG5cbiAgLy8gMTUuIElmIGludGVybmFsUmVzcG9uc2VcdTIwMTlzIFVSTCBsaXN0IGlzIGVtcHR5LCB0aGVuIHNldCBpdCB0byBhIGNsb25lIG9mXG4gIC8vIHJlcXVlc3RcdTIwMTlzIFVSTCBsaXN0LlxuICBpZiAoaW50ZXJuYWxSZXNwb25zZS51cmxMaXN0Lmxlbmd0aCA9PT0gMCkge1xuICAgIGludGVybmFsUmVzcG9uc2UudXJsTGlzdC5wdXNoKC4uLnJlcXVlc3QudXJsTGlzdClcbiAgfVxuXG4gIC8vIDE2LiBJZiByZXF1ZXN0XHUyMDE5cyB0aW1pbmcgYWxsb3cgZmFpbGVkIGZsYWcgaXMgdW5zZXQsIHRoZW4gc2V0XG4gIC8vIGludGVybmFsUmVzcG9uc2VcdTIwMTlzIHRpbWluZyBhbGxvdyBwYXNzZWQgZmxhZy5cbiAgaWYgKCFyZXF1ZXN0LnRpbWluZ0FsbG93RmFpbGVkKSB7XG4gICAgcmVzcG9uc2UudGltaW5nQWxsb3dQYXNzZWQgPSB0cnVlXG4gIH1cblxuICAvLyAxNy4gSWYgcmVzcG9uc2UgaXMgbm90IGEgbmV0d29yayBlcnJvciBhbmQgYW55IG9mIHRoZSBmb2xsb3dpbmcgcmV0dXJuc1xuICAvLyBibG9ja2VkXG4gIC8vIC0gc2hvdWxkIGludGVybmFsUmVzcG9uc2UgdG8gcmVxdWVzdCBiZSBibG9ja2VkIGFzIG1peGVkIGNvbnRlbnRcbiAgLy8gLSBzaG91bGQgaW50ZXJuYWxSZXNwb25zZSB0byByZXF1ZXN0IGJlIGJsb2NrZWQgYnkgQ29udGVudCBTZWN1cml0eSBQb2xpY3lcbiAgLy8gLSBzaG91bGQgaW50ZXJuYWxSZXNwb25zZSB0byByZXF1ZXN0IGJlIGJsb2NrZWQgZHVlIHRvIGl0cyBNSU1FIHR5cGVcbiAgLy8gLSBzaG91bGQgaW50ZXJuYWxSZXNwb25zZSB0byByZXF1ZXN0IGJlIGJsb2NrZWQgZHVlIHRvIG5vc25pZmZcbiAgLy8gVE9ET1xuXG4gIC8vIDE4LiBJZiByZXNwb25zZVx1MjAxOXMgdHlwZSBpcyBcIm9wYXF1ZVwiLCBpbnRlcm5hbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgMjA2LFxuICAvLyBpbnRlcm5hbFJlc3BvbnNlXHUyMDE5cyByYW5nZS1yZXF1ZXN0ZWQgZmxhZyBpcyBzZXQsIGFuZCByZXF1ZXN0XHUyMDE5cyBoZWFkZXJcbiAgLy8gbGlzdCBkb2VzIG5vdCBjb250YWluIGBSYW5nZWAsIHRoZW4gc2V0IHJlc3BvbnNlIGFuZCBpbnRlcm5hbFJlc3BvbnNlXG4gIC8vIHRvIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKFxuICAgIHJlc3BvbnNlLnR5cGUgPT09ICdvcGFxdWUnICYmXG4gICAgaW50ZXJuYWxSZXNwb25zZS5zdGF0dXMgPT09IDIwNiAmJlxuICAgIGludGVybmFsUmVzcG9uc2UucmFuZ2VSZXF1ZXN0ZWQgJiZcbiAgICAhcmVxdWVzdC5oZWFkZXJzLmNvbnRhaW5zKCdyYW5nZScpXG4gICkge1xuICAgIHJlc3BvbnNlID0gaW50ZXJuYWxSZXNwb25zZSA9IG1ha2VOZXR3b3JrRXJyb3IoKVxuICB9XG5cbiAgLy8gMTkuIElmIHJlc3BvbnNlIGlzIG5vdCBhIG5ldHdvcmsgZXJyb3IgYW5kIGVpdGhlciByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXNcbiAgLy8gYEhFQURgIG9yIGBDT05ORUNUYCwgb3IgaW50ZXJuYWxSZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIGEgbnVsbCBib2R5IHN0YXR1cyxcbiAgLy8gc2V0IGludGVybmFsUmVzcG9uc2VcdTIwMTlzIGJvZHkgdG8gbnVsbCBhbmQgZGlzcmVnYXJkIGFueSBlbnF1ZXVpbmcgdG93YXJkXG4gIC8vIGl0IChpZiBhbnkpLlxuICBpZiAoXG4gICAgcmVzcG9uc2Uuc3RhdHVzICE9PSAwICYmXG4gICAgKHJlcXVlc3QubWV0aG9kID09PSAnSEVBRCcgfHxcbiAgICAgIHJlcXVlc3QubWV0aG9kID09PSAnQ09OTkVDVCcgfHxcbiAgICAgIG51bGxCb2R5U3RhdHVzLmluY2x1ZGVzKGludGVybmFsUmVzcG9uc2Uuc3RhdHVzKSlcbiAgKSB7XG4gICAgaW50ZXJuYWxSZXNwb25zZS5ib2R5ID0gbnVsbFxuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuZHVtcCA9IHRydWVcbiAgfVxuXG4gIC8vIDIwLiBJZiByZXF1ZXN0XHUyMDE5cyBpbnRlZ3JpdHkgbWV0YWRhdGEgaXMgbm90IHRoZSBlbXB0eSBzdHJpbmcsIHRoZW46XG4gIGlmIChyZXF1ZXN0LmludGVncml0eSkge1xuICAgIC8vIDEuIExldCBwcm9jZXNzQm9keUVycm9yIGJlIHRoaXMgc3RlcDogcnVuIGZldGNoIGZpbmFsZSBnaXZlbiBmZXRjaFBhcmFtc1xuICAgIC8vIGFuZCBhIG5ldHdvcmsgZXJyb3IuXG4gICAgY29uc3QgcHJvY2Vzc0JvZHlFcnJvciA9IChyZWFzb24pID0+XG4gICAgICBmZXRjaEZpbmFsZShmZXRjaFBhcmFtcywgbWFrZU5ldHdvcmtFcnJvcihyZWFzb24pKVxuXG4gICAgLy8gMi4gSWYgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJvcGFxdWVcIiwgb3IgcmVzcG9uc2VcdTIwMTlzIGJvZHkgaXMgbnVsbCxcbiAgICAvLyB0aGVuIHJ1biBwcm9jZXNzQm9keUVycm9yIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy5cbiAgICBpZiAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnb3BhcXVlJyB8fCByZXNwb25zZS5ib2R5ID09IG51bGwpIHtcbiAgICAgIHByb2Nlc3NCb2R5RXJyb3IocmVzcG9uc2UuZXJyb3IpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyAzLiBMZXQgcHJvY2Vzc0JvZHkgZ2l2ZW4gYnl0ZXMgYmUgdGhlc2Ugc3RlcHM6XG4gICAgY29uc3QgcHJvY2Vzc0JvZHkgPSAoYnl0ZXMpID0+IHtcbiAgICAgIC8vIDEuIElmIGJ5dGVzIGRvIG5vdCBtYXRjaCByZXF1ZXN0XHUyMDE5cyBpbnRlZ3JpdHkgbWV0YWRhdGEsXG4gICAgICAvLyB0aGVuIHJ1biBwcm9jZXNzQm9keUVycm9yIGFuZCBhYm9ydCB0aGVzZSBzdGVwcy4gW1NSSV1cbiAgICAgIGlmICghYnl0ZXNNYXRjaChieXRlcywgcmVxdWVzdC5pbnRlZ3JpdHkpKSB7XG4gICAgICAgIHByb2Nlc3NCb2R5RXJyb3IoJ2ludGVncml0eSBtaXNtYXRjaCcpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAyLiBTZXQgcmVzcG9uc2VcdTIwMTlzIGJvZHkgdG8gYnl0ZXMgYXMgYSBib2R5LlxuICAgICAgcmVzcG9uc2UuYm9keSA9IHNhZmVseUV4dHJhY3RCb2R5KGJ5dGVzKVswXVxuXG4gICAgICAvLyAzLiBSdW4gZmV0Y2ggZmluYWxlIGdpdmVuIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZS5cbiAgICAgIGZldGNoRmluYWxlKGZldGNoUGFyYW1zLCByZXNwb25zZSlcbiAgICB9XG5cbiAgICAvLyA0LiBGdWxseSByZWFkIHJlc3BvbnNlXHUyMDE5cyBib2R5IGdpdmVuIHByb2Nlc3NCb2R5IGFuZCBwcm9jZXNzQm9keUVycm9yLlxuICAgIGF3YWl0IGZ1bGx5UmVhZEJvZHkocmVzcG9uc2UuYm9keSwgcHJvY2Vzc0JvZHksIHByb2Nlc3NCb2R5RXJyb3IpXG4gIH0gZWxzZSB7XG4gICAgLy8gMjEuIE90aGVyd2lzZSwgcnVuIGZldGNoIGZpbmFsZSBnaXZlbiBmZXRjaFBhcmFtcyBhbmQgcmVzcG9uc2UuXG4gICAgZmV0Y2hGaW5hbGUoZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LXNjaGVtZS1mZXRjaFxuLy8gZ2l2ZW4gYSBmZXRjaCBwYXJhbXMgZmV0Y2hQYXJhbXNcbmZ1bmN0aW9uIHNjaGVtZUZldGNoIChmZXRjaFBhcmFtcykge1xuICAvLyBOb3RlOiBzaW5jZSB0aGUgY29ubmVjdGlvbiBpcyBkZXN0cm95ZWQgb24gcmVkaXJlY3QsIHdoaWNoIHNldHMgZmV0Y2hQYXJhbXMgdG8gYVxuICAvLyBjYW5jZWxsZWQgc3RhdGUsIHdlIGRvIG5vdCB3YW50IHRoaXMgY29uZGl0aW9uIHRvIHRyaWdnZXIgKnVubGVzcyogdGhlcmUgaGF2ZSBiZWVuXG4gIC8vIG5vIHJlZGlyZWN0cy4gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9ub2RlanMvdW5kaWNpL2lzc3Vlcy8xNzc2XG4gIC8vIDEuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlcnJvciBmb3IgZmV0Y2hQYXJhbXMuXG4gIGlmIChpc0NhbmNlbGxlZChmZXRjaFBhcmFtcykgJiYgZmV0Y2hQYXJhbXMucmVxdWVzdC5yZWRpcmVjdENvdW50ID09PSAwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlQXBwcm9wcmlhdGVOZXR3b3JrRXJyb3IoZmV0Y2hQYXJhbXMpKVxuICB9XG5cbiAgLy8gMi4gTGV0IHJlcXVlc3QgYmUgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3QuXG4gIGNvbnN0IHsgcmVxdWVzdCB9ID0gZmV0Y2hQYXJhbXNcblxuICBjb25zdCB7IHByb3RvY29sOiBzY2hlbWUgfSA9IHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpXG5cbiAgLy8gMy4gU3dpdGNoIG9uIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBzY2hlbWUgYW5kIHJ1biB0aGUgYXNzb2NpYXRlZCBzdGVwczpcbiAgc3dpdGNoIChzY2hlbWUpIHtcbiAgICBjYXNlICdhYm91dDonOiB7XG4gICAgICAvLyBJZiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTFx1MjAxOXMgcGF0aCBpcyB0aGUgc3RyaW5nIFwiYmxhbmtcIiwgdGhlbiByZXR1cm4gYSBuZXcgcmVzcG9uc2VcbiAgICAgIC8vIHdob3NlIHN0YXR1cyBtZXNzYWdlIGlzIGBPS2AsIGhlYWRlciBsaXN0IGlzIFx1MDBBQiAoYENvbnRlbnQtVHlwZWAsIGB0ZXh0L2h0bWw7Y2hhcnNldD11dGYtOGApIFx1MDBCQixcbiAgICAgIC8vIGFuZCBib2R5IGlzIHRoZSBlbXB0eSBieXRlIHNlcXVlbmNlIGFzIGEgYm9keS5cblxuICAgICAgLy8gT3RoZXJ3aXNlLCByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdhYm91dCBzY2hlbWUgaXMgbm90IHN1cHBvcnRlZCcpKVxuICAgIH1cbiAgICBjYXNlICdibG9iOic6IHtcbiAgICAgIGlmICghcmVzb2x2ZU9iamVjdFVSTCkge1xuICAgICAgICByZXNvbHZlT2JqZWN0VVJMID0gcmVxdWlyZSgnYnVmZmVyJykucmVzb2x2ZU9iamVjdFVSTFxuICAgICAgfVxuXG4gICAgICAvLyAxLiBMZXQgYmxvYlVSTEVudHJ5IGJlIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBibG9iIFVSTCBlbnRyeS5cbiAgICAgIGNvbnN0IGJsb2JVUkxFbnRyeSA9IHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpXG5cbiAgICAgIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS93ZWItcGxhdGZvcm0tdGVzdHMvd3B0L2Jsb2IvN2IwZWJhY2NjNjJiNTY2YTE5NjUzOTZlNWJlN2JiMmJjMDZmODQxZi9GaWxlQVBJL3VybC9yZXNvdXJjZXMvZmV0Y2gtdGVzdHMuanMjTDUyLUw1NlxuICAgICAgLy8gQnVmZmVyLnJlc29sdmVPYmplY3RVUkwgZG9lcyBub3QgaWdub3JlIFVSTCBxdWVyaWVzLlxuICAgICAgaWYgKGJsb2JVUkxFbnRyeS5zZWFyY2gubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignTmV0d29ya0Vycm9yIHdoZW4gYXR0ZW1wdGluZyB0byBmZXRjaCByZXNvdXJjZS4nKSlcbiAgICAgIH1cblxuICAgICAgY29uc3QgYmxvYlVSTEVudHJ5T2JqZWN0ID0gcmVzb2x2ZU9iamVjdFVSTChibG9iVVJMRW50cnkudG9TdHJpbmcoKSlcblxuICAgICAgLy8gMi4gSWYgcmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzIG5vdCBgR0VUYCwgYmxvYlVSTEVudHJ5IGlzIG51bGwsIG9yIGJsb2JVUkxFbnRyeVx1MjAxOXNcbiAgICAgIC8vICAgIG9iamVjdCBpcyBub3QgYSBCbG9iIG9iamVjdCwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgaWYgKHJlcXVlc3QubWV0aG9kICE9PSAnR0VUJyB8fCAhaXNCbG9iTGlrZShibG9iVVJMRW50cnlPYmplY3QpKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignaW52YWxpZCBtZXRob2QnKSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gTGV0IGJvZHlXaXRoVHlwZSBiZSB0aGUgcmVzdWx0IG9mIHNhZmVseSBleHRyYWN0aW5nIGJsb2JVUkxFbnRyeVx1MjAxOXMgb2JqZWN0LlxuICAgICAgY29uc3QgYm9keVdpdGhUeXBlID0gc2FmZWx5RXh0cmFjdEJvZHkoYmxvYlVSTEVudHJ5T2JqZWN0KVxuXG4gICAgICAvLyA0LiBMZXQgYm9keSBiZSBib2R5V2l0aFR5cGVcdTIwMTlzIGJvZHkuXG4gICAgICBjb25zdCBib2R5ID0gYm9keVdpdGhUeXBlWzBdXG5cbiAgICAgIC8vIDUuIExldCBsZW5ndGggYmUgYm9keVx1MjAxOXMgbGVuZ3RoLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQuXG4gICAgICBjb25zdCBsZW5ndGggPSBpc29tb3JwaGljRW5jb2RlKGAke2JvZHkubGVuZ3RofWApXG5cbiAgICAgIC8vIDYuIExldCB0eXBlIGJlIGJvZHlXaXRoVHlwZVx1MjAxOXMgdHlwZSBpZiBpdCBpcyBub24tbnVsbDsgb3RoZXJ3aXNlIHRoZSBlbXB0eSBieXRlIHNlcXVlbmNlLlxuICAgICAgY29uc3QgdHlwZSA9IGJvZHlXaXRoVHlwZVsxXSA/PyAnJ1xuXG4gICAgICAvLyA3LiBSZXR1cm4gYSBuZXcgcmVzcG9uc2Ugd2hvc2Ugc3RhdHVzIG1lc3NhZ2UgaXMgYE9LYCwgaGVhZGVyIGxpc3QgaXNcbiAgICAgIC8vICAgIFx1MDBBQiAoYENvbnRlbnQtTGVuZ3RoYCwgbGVuZ3RoKSwgKGBDb250ZW50LVR5cGVgLCB0eXBlKSBcdTAwQkIsIGFuZCBib2R5IGlzIGJvZHkuXG4gICAgICBjb25zdCByZXNwb25zZSA9IG1ha2VSZXNwb25zZSh7XG4gICAgICAgIHN0YXR1c1RleHQ6ICdPSycsXG4gICAgICAgIGhlYWRlcnNMaXN0OiBbXG4gICAgICAgICAgWydjb250ZW50LWxlbmd0aCcsIHsgbmFtZTogJ0NvbnRlbnQtTGVuZ3RoJywgdmFsdWU6IGxlbmd0aCB9XSxcbiAgICAgICAgICBbJ2NvbnRlbnQtdHlwZScsIHsgbmFtZTogJ0NvbnRlbnQtVHlwZScsIHZhbHVlOiB0eXBlIH1dXG4gICAgICAgIF1cbiAgICAgIH0pXG5cbiAgICAgIHJlc3BvbnNlLmJvZHkgPSBib2R5XG5cbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUocmVzcG9uc2UpXG4gICAgfVxuICAgIGNhc2UgJ2RhdGE6Jzoge1xuICAgICAgLy8gMS4gTGV0IGRhdGFVUkxTdHJ1Y3QgYmUgdGhlIHJlc3VsdCBvZiBydW5uaW5nIHRoZVxuICAgICAgLy8gICAgZGF0YTogVVJMIHByb2Nlc3NvciBvbiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTC5cbiAgICAgIGNvbnN0IGN1cnJlbnRVUkwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuICAgICAgY29uc3QgZGF0YVVSTFN0cnVjdCA9IGRhdGFVUkxQcm9jZXNzb3IoY3VycmVudFVSTClcblxuICAgICAgLy8gMi4gSWYgZGF0YVVSTFN0cnVjdCBpcyBmYWlsdXJlLCB0aGVuIHJldHVybiBhXG4gICAgICAvLyAgICBuZXR3b3JrIGVycm9yLlxuICAgICAgaWYgKGRhdGFVUkxTdHJ1Y3QgPT09ICdmYWlsdXJlJykge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ2ZhaWxlZCB0byBmZXRjaCB0aGUgZGF0YSBVUkwnKSlcbiAgICAgIH1cblxuICAgICAgLy8gMy4gTGV0IG1pbWVUeXBlIGJlIGRhdGFVUkxTdHJ1Y3RcdTIwMTlzIE1JTUUgdHlwZSwgc2VyaWFsaXplZC5cbiAgICAgIGNvbnN0IG1pbWVUeXBlID0gc2VyaWFsaXplQU1pbWVUeXBlKGRhdGFVUkxTdHJ1Y3QubWltZVR5cGUpXG5cbiAgICAgIC8vIDQuIFJldHVybiBhIHJlc3BvbnNlIHdob3NlIHN0YXR1cyBtZXNzYWdlIGlzIGBPS2AsXG4gICAgICAvLyAgICBoZWFkZXIgbGlzdCBpcyBcdTAwQUIgKGBDb250ZW50LVR5cGVgLCBtaW1lVHlwZSkgXHUwMEJCLFxuICAgICAgLy8gICAgYW5kIGJvZHkgaXMgZGF0YVVSTFN0cnVjdFx1MjAxOXMgYm9keSBhcyBhIGJvZHkuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VSZXNwb25zZSh7XG4gICAgICAgIHN0YXR1c1RleHQ6ICdPSycsXG4gICAgICAgIGhlYWRlcnNMaXN0OiBbXG4gICAgICAgICAgWydjb250ZW50LXR5cGUnLCB7IG5hbWU6ICdDb250ZW50LVR5cGUnLCB2YWx1ZTogbWltZVR5cGUgfV1cbiAgICAgICAgXSxcbiAgICAgICAgYm9keTogc2FmZWx5RXh0cmFjdEJvZHkoZGF0YVVSTFN0cnVjdC5ib2R5KVswXVxuICAgICAgfSkpXG4gICAgfVxuICAgIGNhc2UgJ2ZpbGU6Jzoge1xuICAgICAgLy8gRm9yIG5vdywgdW5mb3J0dW5hdGUgYXMgaXQgaXMsIGZpbGUgVVJMcyBhcmUgbGVmdCBhcyBhbiBleGVyY2lzZSBmb3IgdGhlIHJlYWRlci5cbiAgICAgIC8vIFdoZW4gaW4gZG91YnQsIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoJ25vdCBpbXBsZW1lbnRlZC4uLiB5ZXQuLi4nKSlcbiAgICB9XG4gICAgY2FzZSAnaHR0cDonOlxuICAgIGNhc2UgJ2h0dHBzOic6IHtcbiAgICAgIC8vIFJldHVybiB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUCBmZXRjaCBnaXZlbiBmZXRjaFBhcmFtcy5cblxuICAgICAgcmV0dXJuIGh0dHBGZXRjaChmZXRjaFBhcmFtcylcbiAgICAgICAgLmNhdGNoKChlcnIpID0+IG1ha2VOZXR3b3JrRXJyb3IoZXJyKSlcbiAgICB9XG4gICAgZGVmYXVsdDoge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCd1bmtub3duIHNjaGVtZScpKVxuICAgIH1cbiAgfVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZmluYWxpemUtcmVzcG9uc2VcbmZ1bmN0aW9uIGZpbmFsaXplUmVzcG9uc2UgKGZldGNoUGFyYW1zLCByZXNwb25zZSkge1xuICAvLyAxLiBTZXQgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIGRvbmUgZmxhZy5cbiAgZmV0Y2hQYXJhbXMucmVxdWVzdC5kb25lID0gdHJ1ZVxuXG4gIC8vIDIsIElmIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlc3BvbnNlIGRvbmUgaXMgbm90IG51bGwsIHRoZW4gcXVldWUgYSBmZXRjaFxuICAvLyB0YXNrIHRvIHJ1biBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXNwb25zZSBkb25lIGdpdmVuIHJlc3BvbnNlLCB3aXRoXG4gIC8vIGZldGNoUGFyYW1zXHUyMDE5cyB0YXNrIGRlc3RpbmF0aW9uLlxuICBpZiAoZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlRG9uZSAhPSBudWxsKSB7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlRG9uZShyZXNwb25zZSkpXG4gIH1cbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2ZldGNoLWZpbmFsZVxuZnVuY3Rpb24gZmV0Y2hGaW5hbGUgKGZldGNoUGFyYW1zLCByZXNwb25zZSkge1xuICAvLyAxLiBJZiByZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3IsIHRoZW46XG4gIGlmIChyZXNwb25zZS50eXBlID09PSAnZXJyb3InKSB7XG4gICAgLy8gMS4gU2V0IHJlc3BvbnNlXHUyMDE5cyBVUkwgbGlzdCB0byBcdTAwQUIgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3RcdTIwMTlzIFVSTCBsaXN0WzBdIFx1MDBCQi5cbiAgICByZXNwb25zZS51cmxMaXN0ID0gW2ZldGNoUGFyYW1zLnJlcXVlc3QudXJsTGlzdFswXV1cblxuICAgIC8vIDIuIFNldCByZXNwb25zZVx1MjAxOXMgdGltaW5nIGluZm8gdG8gdGhlIHJlc3VsdCBvZiBjcmVhdGluZyBhbiBvcGFxdWUgdGltaW5nXG4gICAgLy8gaW5mbyBmb3IgZmV0Y2hQYXJhbXNcdTIwMTlzIHRpbWluZyBpbmZvLlxuICAgIHJlc3BvbnNlLnRpbWluZ0luZm8gPSBjcmVhdGVPcGFxdWVUaW1pbmdJbmZvKHtcbiAgICAgIHN0YXJ0VGltZTogZmV0Y2hQYXJhbXMudGltaW5nSW5mby5zdGFydFRpbWVcbiAgICB9KVxuICB9XG5cbiAgLy8gMi4gTGV0IHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSBiZSB0aGUgZm9sbG93aW5nIHN0ZXBzOlxuICBjb25zdCBwcm9jZXNzUmVzcG9uc2VFbmRPZkJvZHkgPSAoKSA9PiB7XG4gICAgLy8gMS4gU2V0IGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0XHUyMDE5cyBkb25lIGZsYWcuXG4gICAgZmV0Y2hQYXJhbXMucmVxdWVzdC5kb25lID0gdHJ1ZVxuXG4gICAgLy8gSWYgZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVzcG9uc2UgZW5kLW9mLWJvZHkgaXMgbm90IG51bGwsXG4gICAgLy8gdGhlbiBxdWV1ZSBhIGZldGNoIHRhc2sgdG8gcnVuIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlc3BvbnNlXG4gICAgLy8gZW5kLW9mLWJvZHkgZ2l2ZW4gcmVzcG9uc2Ugd2l0aCBmZXRjaFBhcmFtc1x1MjAxOXMgdGFzayBkZXN0aW5hdGlvbi5cbiAgICBpZiAoZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5ICE9IG51bGwpIHtcbiAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUVuZE9mQm9keShyZXNwb25zZSkpXG4gICAgfVxuICB9XG5cbiAgLy8gMy4gSWYgZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVzcG9uc2UgaXMgbm9uLW51bGwsIHRoZW4gcXVldWUgYSBmZXRjaCB0YXNrXG4gIC8vIHRvIHJ1biBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXNwb25zZSBnaXZlbiByZXNwb25zZSwgd2l0aCBmZXRjaFBhcmFtc1x1MjAxOXNcbiAgLy8gdGFzayBkZXN0aW5hdGlvbi5cbiAgaWYgKGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZSAhPSBudWxsKSB7XG4gICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gZmV0Y2hQYXJhbXMucHJvY2Vzc1Jlc3BvbnNlKHJlc3BvbnNlKSlcbiAgfVxuXG4gIC8vIDQuIElmIHJlc3BvbnNlXHUyMDE5cyBib2R5IGlzIG51bGwsIHRoZW4gcnVuIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keS5cbiAgaWYgKHJlc3BvbnNlLmJvZHkgPT0gbnVsbCkge1xuICAgIHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keSgpXG4gIH0gZWxzZSB7XG4gIC8vIDUuIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIExldCB0cmFuc2Zvcm1TdHJlYW0gYmUgYSBuZXcgYSBUcmFuc2Zvcm1TdHJlYW0uXG5cbiAgICAvLyAyLiBMZXQgaWRlbnRpdHlUcmFuc2Zvcm1BbGdvcml0aG0gYmUgYW4gYWxnb3JpdGhtIHdoaWNoLCBnaXZlbiBjaHVuayxcbiAgICAvLyBlbnF1ZXVlcyBjaHVuayBpbiB0cmFuc2Zvcm1TdHJlYW0uXG4gICAgY29uc3QgaWRlbnRpdHlUcmFuc2Zvcm1BbGdvcml0aG0gPSAoY2h1bmssIGNvbnRyb2xsZXIpID0+IHtcbiAgICAgIGNvbnRyb2xsZXIuZW5xdWV1ZShjaHVuaylcbiAgICB9XG5cbiAgICAvLyAzLiBTZXQgdXAgdHJhbnNmb3JtU3RyZWFtIHdpdGggdHJhbnNmb3JtQWxnb3JpdGhtIHNldCB0byBpZGVudGl0eVRyYW5zZm9ybUFsZ29yaXRobVxuICAgIC8vIGFuZCBmbHVzaEFsZ29yaXRobSBzZXQgdG8gcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5LlxuICAgIGNvbnN0IHRyYW5zZm9ybVN0cmVhbSA9IG5ldyBUcmFuc2Zvcm1TdHJlYW0oe1xuICAgICAgc3RhcnQgKCkge30sXG4gICAgICB0cmFuc2Zvcm06IGlkZW50aXR5VHJhbnNmb3JtQWxnb3JpdGhtLFxuICAgICAgZmx1c2g6IHByb2Nlc3NSZXNwb25zZUVuZE9mQm9keVxuICAgIH0sIHtcbiAgICAgIHNpemUgKCkge1xuICAgICAgICByZXR1cm4gMVxuICAgICAgfVxuICAgIH0sIHtcbiAgICAgIHNpemUgKCkge1xuICAgICAgICByZXR1cm4gMVxuICAgICAgfVxuICAgIH0pXG5cbiAgICAvLyA0LiBTZXQgcmVzcG9uc2VcdTIwMTlzIGJvZHkgdG8gdGhlIHJlc3VsdCBvZiBwaXBpbmcgcmVzcG9uc2VcdTIwMTlzIGJvZHkgdGhyb3VnaCB0cmFuc2Zvcm1TdHJlYW0uXG4gICAgcmVzcG9uc2UuYm9keSA9IHsgc3RyZWFtOiByZXNwb25zZS5ib2R5LnN0cmVhbS5waXBlVGhyb3VnaCh0cmFuc2Zvcm1TdHJlYW0pIH1cbiAgfVxuXG4gIC8vIDYuIElmIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlc3BvbnNlIGNvbnN1bWUgYm9keSBpcyBub24tbnVsbCwgdGhlbjpcbiAgaWYgKGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5ICE9IG51bGwpIHtcbiAgICAvLyAxLiBMZXQgcHJvY2Vzc0JvZHkgZ2l2ZW4gbnVsbE9yQnl0ZXMgYmUgdGhpcyBzdGVwOiBydW4gZmV0Y2hQYXJhbXNcdTIwMTlzXG4gICAgLy8gcHJvY2VzcyByZXNwb25zZSBjb25zdW1lIGJvZHkgZ2l2ZW4gcmVzcG9uc2UgYW5kIG51bGxPckJ5dGVzLlxuICAgIGNvbnN0IHByb2Nlc3NCb2R5ID0gKG51bGxPckJ5dGVzKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVzcG9uc2VDb25zdW1lQm9keShyZXNwb25zZSwgbnVsbE9yQnl0ZXMpXG5cbiAgICAvLyAyLiBMZXQgcHJvY2Vzc0JvZHlFcnJvciBiZSB0aGlzIHN0ZXA6IHJ1biBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2Vzc1xuICAgIC8vIHJlc3BvbnNlIGNvbnN1bWUgYm9keSBnaXZlbiByZXNwb25zZSBhbmQgZmFpbHVyZS5cbiAgICBjb25zdCBwcm9jZXNzQm9keUVycm9yID0gKGZhaWx1cmUpID0+IGZldGNoUGFyYW1zLnByb2Nlc3NSZXNwb25zZUNvbnN1bWVCb2R5KHJlc3BvbnNlLCBmYWlsdXJlKVxuXG4gICAgLy8gMy4gSWYgcmVzcG9uc2VcdTIwMTlzIGJvZHkgaXMgbnVsbCwgdGhlbiBxdWV1ZSBhIGZldGNoIHRhc2sgdG8gcnVuIHByb2Nlc3NCb2R5XG4gICAgLy8gZ2l2ZW4gbnVsbCwgd2l0aCBmZXRjaFBhcmFtc1x1MjAxOXMgdGFzayBkZXN0aW5hdGlvbi5cbiAgICBpZiAocmVzcG9uc2UuYm9keSA9PSBudWxsKSB7XG4gICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBwcm9jZXNzQm9keShudWxsKSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gNC4gT3RoZXJ3aXNlLCBmdWxseSByZWFkIHJlc3BvbnNlXHUyMDE5cyBib2R5IGdpdmVuIHByb2Nlc3NCb2R5LCBwcm9jZXNzQm9keUVycm9yLFxuICAgICAgLy8gYW5kIGZldGNoUGFyYW1zXHUyMDE5cyB0YXNrIGRlc3RpbmF0aW9uLlxuICAgICAgcmV0dXJuIGZ1bGx5UmVhZEJvZHkocmVzcG9uc2UuYm9keSwgcHJvY2Vzc0JvZHksIHByb2Nlc3NCb2R5RXJyb3IpXG4gICAgfVxuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNodHRwLWZldGNoXG5hc3luYyBmdW5jdGlvbiBodHRwRmV0Y2ggKGZldGNoUGFyYW1zKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gMy4gTGV0IGFjdHVhbFJlc3BvbnNlIGJlIG51bGwuXG4gIGxldCBhY3R1YWxSZXNwb25zZSA9IG51bGxcblxuICAvLyA0LiBMZXQgdGltaW5nSW5mbyBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgdGltaW5nIGluZm8uXG4gIGNvbnN0IHRpbWluZ0luZm8gPSBmZXRjaFBhcmFtcy50aW1pbmdJbmZvXG5cbiAgLy8gNS4gSWYgcmVxdWVzdFx1MjAxOXMgc2VydmljZS13b3JrZXJzIG1vZGUgaXMgXCJhbGxcIiwgdGhlbjpcbiAgaWYgKHJlcXVlc3Quc2VydmljZVdvcmtlcnMgPT09ICdhbGwnKSB7XG4gICAgLy8gVE9ET1xuICB9XG5cbiAgLy8gNi4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbjpcbiAgaWYgKHJlc3BvbnNlID09PSBudWxsKSB7XG4gICAgLy8gMS4gSWYgbWFrZUNPUlNQcmVmbGlnaHQgaXMgdHJ1ZSBhbmQgb25lIG9mIHRoZXNlIGNvbmRpdGlvbnMgaXMgdHJ1ZTpcbiAgICAvLyBUT0RPXG5cbiAgICAvLyAyLiBJZiByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBtb2RlIGlzIFwiZm9sbG93XCIsIHRoZW4gc2V0IHJlcXVlc3RcdTIwMTlzXG4gICAgLy8gc2VydmljZS13b3JrZXJzIG1vZGUgdG8gXCJub25lXCIuXG4gICAgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdmb2xsb3cnKSB7XG4gICAgICByZXF1ZXN0LnNlcnZpY2VXb3JrZXJzID0gJ25vbmUnXG4gICAgfVxuXG4gICAgLy8gMy4gU2V0IHJlc3BvbnNlIGFuZCBhY3R1YWxSZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmdcbiAgICAvLyBIVFRQLW5ldHdvcmstb3ItY2FjaGUgZmV0Y2ggZ2l2ZW4gZmV0Y2hQYXJhbXMuXG4gICAgYWN0dWFsUmVzcG9uc2UgPSByZXNwb25zZSA9IGF3YWl0IGh0dHBOZXR3b3JrT3JDYWNoZUZldGNoKGZldGNoUGFyYW1zKVxuXG4gICAgLy8gNC4gSWYgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgaXMgXCJjb3JzXCIgYW5kIGEgQ09SUyBjaGVja1xuICAgIC8vIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSByZXR1cm5zIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgICBpZiAoXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdjb3JzJyAmJlxuICAgICAgY29yc0NoZWNrKHJlcXVlc3QsIHJlc3BvbnNlKSA9PT0gJ2ZhaWx1cmUnXG4gICAgKSB7XG4gICAgICByZXR1cm4gbWFrZU5ldHdvcmtFcnJvcignY29ycyBmYWlsdXJlJylcbiAgICB9XG5cbiAgICAvLyA1LiBJZiB0aGUgVEFPIGNoZWNrIGZvciByZXF1ZXN0IGFuZCByZXNwb25zZSByZXR1cm5zIGZhaWx1cmUsIHRoZW4gc2V0XG4gICAgLy8gcmVxdWVzdFx1MjAxOXMgdGltaW5nIGFsbG93IGZhaWxlZCBmbGFnLlxuICAgIGlmIChUQU9DaGVjayhyZXF1ZXN0LCByZXNwb25zZSkgPT09ICdmYWlsdXJlJykge1xuICAgICAgcmVxdWVzdC50aW1pbmdBbGxvd0ZhaWxlZCA9IHRydWVcbiAgICB9XG4gIH1cblxuICAvLyA3LiBJZiBlaXRoZXIgcmVxdWVzdFx1MjAxOXMgcmVzcG9uc2UgdGFpbnRpbmcgb3IgcmVzcG9uc2VcdTIwMTlzIHR5cGVcbiAgLy8gaXMgXCJvcGFxdWVcIiwgYW5kIHRoZSBjcm9zcy1vcmlnaW4gcmVzb3VyY2UgcG9saWN5IGNoZWNrIHdpdGhcbiAgLy8gcmVxdWVzdFx1MjAxOXMgb3JpZ2luLCByZXF1ZXN0XHUyMDE5cyBjbGllbnQsIHJlcXVlc3RcdTIwMTlzIGRlc3RpbmF0aW9uLFxuICAvLyBhbmQgYWN0dWFsUmVzcG9uc2UgcmV0dXJucyBibG9ja2VkLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChcbiAgICAocmVxdWVzdC5yZXNwb25zZVRhaW50aW5nID09PSAnb3BhcXVlJyB8fCByZXNwb25zZS50eXBlID09PSAnb3BhcXVlJykgJiZcbiAgICBjcm9zc09yaWdpblJlc291cmNlUG9saWN5Q2hlY2soXG4gICAgICByZXF1ZXN0Lm9yaWdpbixcbiAgICAgIHJlcXVlc3QuY2xpZW50LFxuICAgICAgcmVxdWVzdC5kZXN0aW5hdGlvbixcbiAgICAgIGFjdHVhbFJlc3BvbnNlXG4gICAgKSA9PT0gJ2Jsb2NrZWQnXG4gICkge1xuICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdibG9ja2VkJylcbiAgfVxuXG4gIC8vIDguIElmIGFjdHVhbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgYSByZWRpcmVjdCBzdGF0dXMsIHRoZW46XG4gIGlmIChyZWRpcmVjdFN0YXR1c1NldC5oYXMoYWN0dWFsUmVzcG9uc2Uuc3RhdHVzKSkge1xuICAgIC8vIDEuIElmIGFjdHVhbFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgbm90IDMwMywgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBub3QgbnVsbCxcbiAgICAvLyBhbmQgdGhlIGNvbm5lY3Rpb24gdXNlcyBIVFRQLzIsIHRoZW4gdXNlciBhZ2VudHMgbWF5LCBhbmQgYXJlIGV2ZW5cbiAgICAvLyBlbmNvdXJhZ2VkIHRvLCB0cmFuc21pdCBhbiBSU1RfU1RSRUFNIGZyYW1lLlxuICAgIC8vIFNlZSwgaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mZXRjaC9pc3N1ZXMvMTI4OFxuICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ICE9PSAnbWFudWFsJykge1xuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3koKVxuICAgIH1cblxuICAgIC8vIDIuIFN3aXRjaCBvbiByZXF1ZXN0XHUyMDE5cyByZWRpcmVjdCBtb2RlOlxuICAgIGlmIChyZXF1ZXN0LnJlZGlyZWN0ID09PSAnZXJyb3InKSB7XG4gICAgICAvLyBTZXQgcmVzcG9uc2UgdG8gYSBuZXR3b3JrIGVycm9yLlxuICAgICAgcmVzcG9uc2UgPSBtYWtlTmV0d29ya0Vycm9yKCd1bmV4cGVjdGVkIHJlZGlyZWN0JylcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdtYW51YWwnKSB7XG4gICAgICAvLyBTZXQgcmVzcG9uc2UgdG8gYW4gb3BhcXVlLXJlZGlyZWN0IGZpbHRlcmVkIHJlc3BvbnNlIHdob3NlIGludGVybmFsXG4gICAgICAvLyByZXNwb25zZSBpcyBhY3R1YWxSZXNwb25zZS5cbiAgICAgIC8vIE5PVEUoc3BlYyk6IE9uIHRoZSB3ZWIgdGhpcyB3b3VsZCByZXR1cm4gYW4gYG9wYXF1ZXJlZGlyZWN0YCByZXNwb25zZSxcbiAgICAgIC8vIGJ1dCB0aGF0IGRvZXNuJ3QgbWFrZSBzZW5zZSBzZXJ2ZXIgc2lkZS5cbiAgICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMTE5My5cbiAgICAgIHJlc3BvbnNlID0gYWN0dWFsUmVzcG9uc2VcbiAgICB9IGVsc2UgaWYgKHJlcXVlc3QucmVkaXJlY3QgPT09ICdmb2xsb3cnKSB7XG4gICAgICAvLyBTZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAtcmVkaXJlY3QgZmV0Y2ggZ2l2ZW5cbiAgICAgIC8vIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZS5cbiAgICAgIHJlc3BvbnNlID0gYXdhaXQgaHR0cFJlZGlyZWN0RmV0Y2goZmV0Y2hQYXJhbXMsIHJlc3BvbnNlKVxuICAgIH0gZWxzZSB7XG4gICAgICBhc3NlcnQoZmFsc2UpXG4gICAgfVxuICB9XG5cbiAgLy8gOS4gU2V0IHJlc3BvbnNlXHUyMDE5cyB0aW1pbmcgaW5mbyB0byB0aW1pbmdJbmZvLlxuICByZXNwb25zZS50aW1pbmdJbmZvID0gdGltaW5nSW5mb1xuXG4gIC8vIDEwLiBSZXR1cm4gcmVzcG9uc2UuXG4gIHJldHVybiByZXNwb25zZVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1yZWRpcmVjdC1mZXRjaFxuZnVuY3Rpb24gaHR0cFJlZGlyZWN0RmV0Y2ggKGZldGNoUGFyYW1zLCByZXNwb25zZSkge1xuICAvLyAxLiBMZXQgcmVxdWVzdCBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgcmVxdWVzdC5cbiAgY29uc3QgcmVxdWVzdCA9IGZldGNoUGFyYW1zLnJlcXVlc3RcblxuICAvLyAyLiBMZXQgYWN0dWFsUmVzcG9uc2UgYmUgcmVzcG9uc2UsIGlmIHJlc3BvbnNlIGlzIG5vdCBhIGZpbHRlcmVkIHJlc3BvbnNlLFxuICAvLyBhbmQgcmVzcG9uc2VcdTIwMTlzIGludGVybmFsIHJlc3BvbnNlIG90aGVyd2lzZS5cbiAgY29uc3QgYWN0dWFsUmVzcG9uc2UgPSByZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlXG4gICAgPyByZXNwb25zZS5pbnRlcm5hbFJlc3BvbnNlXG4gICAgOiByZXNwb25zZVxuXG4gIC8vIDMuIExldCBsb2NhdGlvblVSTCBiZSBhY3R1YWxSZXNwb25zZVx1MjAxOXMgbG9jYXRpb24gVVJMIGdpdmVuIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnRcbiAgLy8gVVJMXHUyMDE5cyBmcmFnbWVudC5cbiAgbGV0IGxvY2F0aW9uVVJMXG5cbiAgdHJ5IHtcbiAgICBsb2NhdGlvblVSTCA9IHJlc3BvbnNlTG9jYXRpb25VUkwoXG4gICAgICBhY3R1YWxSZXNwb25zZSxcbiAgICAgIHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpLmhhc2hcbiAgICApXG5cbiAgICAvLyA0LiBJZiBsb2NhdGlvblVSTCBpcyBudWxsLCB0aGVuIHJldHVybiByZXNwb25zZS5cbiAgICBpZiAobG9jYXRpb25VUkwgPT0gbnVsbCkge1xuICAgICAgcmV0dXJuIHJlc3BvbnNlXG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyA1LiBJZiBsb2NhdGlvblVSTCBpcyBmYWlsdXJlLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKGVycikpXG4gIH1cblxuICAvLyA2LiBJZiBsb2NhdGlvblVSTFx1MjAxOXMgc2NoZW1lIGlzIG5vdCBhbiBIVFRQKFMpIHNjaGVtZSwgdGhlbiByZXR1cm4gYSBuZXR3b3JrXG4gIC8vIGVycm9yLlxuICBpZiAoIXVybElzSHR0cEh0dHBzU2NoZW1lKGxvY2F0aW9uVVJMKSkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignVVJMIHNjaGVtZSBtdXN0IGJlIGEgSFRUUChTKSBzY2hlbWUnKSlcbiAgfVxuXG4gIC8vIDcuIElmIHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IGNvdW50IGlzIDIwLCB0aGVuIHJldHVybiBhIG5ldHdvcmsgZXJyb3IuXG4gIGlmIChyZXF1ZXN0LnJlZGlyZWN0Q291bnQgPT09IDIwKSB7XG4gICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShtYWtlTmV0d29ya0Vycm9yKCdyZWRpcmVjdCBjb3VudCBleGNlZWRlZCcpKVxuICB9XG5cbiAgLy8gOC4gSW5jcmVhc2UgcmVxdWVzdFx1MjAxOXMgcmVkaXJlY3QgY291bnQgYnkgMS5cbiAgcmVxdWVzdC5yZWRpcmVjdENvdW50ICs9IDFcblxuICAvLyA5LiBJZiByZXF1ZXN0XHUyMDE5cyBtb2RlIGlzIFwiY29yc1wiLCBsb2NhdGlvblVSTCBpbmNsdWRlcyBjcmVkZW50aWFscywgYW5kXG4gIC8vIHJlcXVlc3RcdTIwMTlzIG9yaWdpbiBpcyBub3Qgc2FtZSBvcmlnaW4gd2l0aCBsb2NhdGlvblVSTFx1MjAxOXMgb3JpZ2luLCB0aGVuIHJldHVyblxuICAvLyAgYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgcmVxdWVzdC5tb2RlID09PSAnY29ycycgJiZcbiAgICAobG9jYXRpb25VUkwudXNlcm5hbWUgfHwgbG9jYXRpb25VUkwucGFzc3dvcmQpICYmXG4gICAgIXNhbWVPcmlnaW4ocmVxdWVzdCwgbG9jYXRpb25VUkwpXG4gICkge1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobWFrZU5ldHdvcmtFcnJvcignY3Jvc3Mgb3JpZ2luIG5vdCBhbGxvd2VkIGZvciByZXF1ZXN0IG1vZGUgXCJjb3JzXCInKSlcbiAgfVxuXG4gIC8vIDEwLiBJZiByZXF1ZXN0XHUyMDE5cyByZXNwb25zZSB0YWludGluZyBpcyBcImNvcnNcIiBhbmQgbG9jYXRpb25VUkwgaW5jbHVkZXNcbiAgLy8gY3JlZGVudGlhbHMsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cbiAgaWYgKFxuICAgIHJlcXVlc3QucmVzcG9uc2VUYWludGluZyA9PT0gJ2NvcnMnICYmXG4gICAgKGxvY2F0aW9uVVJMLnVzZXJuYW1lIHx8IGxvY2F0aW9uVVJMLnBhc3N3b3JkKVxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoXG4gICAgICAnVVJMIGNhbm5vdCBjb250YWluIGNyZWRlbnRpYWxzIGZvciByZXF1ZXN0IG1vZGUgXCJjb3JzXCInXG4gICAgKSlcbiAgfVxuXG4gIC8vIDExLiBJZiBhY3R1YWxSZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIG5vdCAzMDMsIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm9uLW51bGwsXG4gIC8vIGFuZCByZXF1ZXN0XHUyMDE5cyBib2R5XHUyMDE5cyBzb3VyY2UgaXMgbnVsbCwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICBpZiAoXG4gICAgYWN0dWFsUmVzcG9uc2Uuc3RhdHVzICE9PSAzMDMgJiZcbiAgICByZXF1ZXN0LmJvZHkgIT0gbnVsbCAmJlxuICAgIHJlcXVlc3QuYm9keS5zb3VyY2UgPT0gbnVsbFxuICApIHtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG1ha2VOZXR3b3JrRXJyb3IoKSlcbiAgfVxuXG4gIC8vIDEyLiBJZiBvbmUgb2YgdGhlIGZvbGxvd2luZyBpcyB0cnVlXG4gIC8vIC0gYWN0dWFsUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyAzMDEgb3IgMzAyIGFuZCByZXF1ZXN0XHUyMDE5cyBtZXRob2QgaXMgYFBPU1RgXG4gIC8vIC0gYWN0dWFsUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyAzMDMgYW5kIHJlcXVlc3RcdTIwMTlzIG1ldGhvZCBpcyBub3QgYEdFVGAgb3IgYEhFQURgXG4gIGlmIChcbiAgICAoWzMwMSwgMzAyXS5pbmNsdWRlcyhhY3R1YWxSZXNwb25zZS5zdGF0dXMpICYmIHJlcXVlc3QubWV0aG9kID09PSAnUE9TVCcpIHx8XG4gICAgKGFjdHVhbFJlc3BvbnNlLnN0YXR1cyA9PT0gMzAzICYmXG4gICAgICAhR0VUX09SX0hFQUQuaW5jbHVkZXMocmVxdWVzdC5tZXRob2QpKVxuICApIHtcbiAgICAvLyB0aGVuOlxuICAgIC8vIDEuIFNldCByZXF1ZXN0XHUyMDE5cyBtZXRob2QgdG8gYEdFVGAgYW5kIHJlcXVlc3RcdTIwMTlzIGJvZHkgdG8gbnVsbC5cbiAgICByZXF1ZXN0Lm1ldGhvZCA9ICdHRVQnXG4gICAgcmVxdWVzdC5ib2R5ID0gbnVsbFxuXG4gICAgLy8gMi4gRm9yIGVhY2ggaGVhZGVyTmFtZSBvZiByZXF1ZXN0LWJvZHktaGVhZGVyIG5hbWUsIGRlbGV0ZSBoZWFkZXJOYW1lIGZyb21cbiAgICAvLyByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICBmb3IgKGNvbnN0IGhlYWRlck5hbWUgb2YgcmVxdWVzdEJvZHlIZWFkZXIpIHtcbiAgICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKGhlYWRlck5hbWUpXG4gICAgfVxuICB9XG5cbiAgLy8gMTMuIElmIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBvcmlnaW4gaXMgbm90IHNhbWUgb3JpZ2luIHdpdGggbG9jYXRpb25VUkxcdTIwMTlzXG4gIC8vICAgICBvcmlnaW4sIHRoZW4gZm9yIGVhY2ggaGVhZGVyTmFtZSBvZiBDT1JTIG5vbi13aWxkY2FyZCByZXF1ZXN0LWhlYWRlciBuYW1lLFxuICAvLyAgICAgZGVsZXRlIGhlYWRlck5hbWUgZnJvbSByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgaWYgKCFzYW1lT3JpZ2luKHJlcXVlc3RDdXJyZW50VVJMKHJlcXVlc3QpLCBsb2NhdGlvblVSTCkpIHtcbiAgICAvLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jY29ycy1ub24td2lsZGNhcmQtcmVxdWVzdC1oZWFkZXItbmFtZVxuICAgIHJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKCdhdXRob3JpemF0aW9uJylcblxuICAgIC8vIGh0dHBzOi8vZmV0Y2guc3BlYy53aGF0d2cub3JnLyNhdXRoZW50aWNhdGlvbi1lbnRyaWVzXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5kZWxldGUoJ3Byb3h5LWF1dGhvcml6YXRpb24nLCB0cnVlKVxuXG4gICAgLy8gXCJDb29raWVcIiBhbmQgXCJIb3N0XCIgYXJlIGZvcmJpZGRlbiByZXF1ZXN0LWhlYWRlcnMsIHdoaWNoIHVuZGljaSBkb2Vzbid0IGltcGxlbWVudC5cbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgnY29va2llJylcbiAgICByZXF1ZXN0LmhlYWRlcnNMaXN0LmRlbGV0ZSgnaG9zdCcpXG4gIH1cblxuICAvLyAxNC4gSWYgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBub24tbnVsbCwgdGhlbiBzZXQgcmVxdWVzdFx1MjAxOXMgYm9keSB0byB0aGUgZmlyc3QgcmV0dXJuXG4gIC8vIHZhbHVlIG9mIHNhZmVseSBleHRyYWN0aW5nIHJlcXVlc3RcdTIwMTlzIGJvZHlcdTIwMTlzIHNvdXJjZS5cbiAgaWYgKHJlcXVlc3QuYm9keSAhPSBudWxsKSB7XG4gICAgYXNzZXJ0KHJlcXVlc3QuYm9keS5zb3VyY2UgIT0gbnVsbClcbiAgICByZXF1ZXN0LmJvZHkgPSBzYWZlbHlFeHRyYWN0Qm9keShyZXF1ZXN0LmJvZHkuc291cmNlKVswXVxuICB9XG5cbiAgLy8gMTUuIExldCB0aW1pbmdJbmZvIGJlIGZldGNoUGFyYW1zXHUyMDE5cyB0aW1pbmcgaW5mby5cbiAgY29uc3QgdGltaW5nSW5mbyA9IGZldGNoUGFyYW1zLnRpbWluZ0luZm9cblxuICAvLyAxNi4gU2V0IHRpbWluZ0luZm9cdTIwMTlzIHJlZGlyZWN0IGVuZCB0aW1lIGFuZCBwb3N0LXJlZGlyZWN0IHN0YXJ0IHRpbWUgdG8gdGhlXG4gIC8vIGNvYXJzZW5lZCBzaGFyZWQgY3VycmVudCB0aW1lIGdpdmVuIGZldGNoUGFyYW1zXHUyMDE5cyBjcm9zcy1vcmlnaW4gaXNvbGF0ZWRcbiAgLy8gY2FwYWJpbGl0eS5cbiAgdGltaW5nSW5mby5yZWRpcmVjdEVuZFRpbWUgPSB0aW1pbmdJbmZvLnBvc3RSZWRpcmVjdFN0YXJ0VGltZSA9XG4gICAgY29hcnNlbmVkU2hhcmVkQ3VycmVudFRpbWUoZmV0Y2hQYXJhbXMuY3Jvc3NPcmlnaW5Jc29sYXRlZENhcGFiaWxpdHkpXG5cbiAgLy8gMTcuIElmIHRpbWluZ0luZm9cdTIwMTlzIHJlZGlyZWN0IHN0YXJ0IHRpbWUgaXMgMCwgdGhlbiBzZXQgdGltaW5nSW5mb1x1MjAxOXNcbiAgLy8gIHJlZGlyZWN0IHN0YXJ0IHRpbWUgdG8gdGltaW5nSW5mb1x1MjAxOXMgc3RhcnQgdGltZS5cbiAgaWYgKHRpbWluZ0luZm8ucmVkaXJlY3RTdGFydFRpbWUgPT09IDApIHtcbiAgICB0aW1pbmdJbmZvLnJlZGlyZWN0U3RhcnRUaW1lID0gdGltaW5nSW5mby5zdGFydFRpbWVcbiAgfVxuXG4gIC8vIDE4LiBBcHBlbmQgbG9jYXRpb25VUkwgdG8gcmVxdWVzdFx1MjAxOXMgVVJMIGxpc3QuXG4gIHJlcXVlc3QudXJsTGlzdC5wdXNoKGxvY2F0aW9uVVJMKVxuXG4gIC8vIDE5LiBJbnZva2Ugc2V0IHJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIHBvbGljeSBvbiByZWRpcmVjdCBvbiByZXF1ZXN0IGFuZFxuICAvLyBhY3R1YWxSZXNwb25zZS5cbiAgc2V0UmVxdWVzdFJlZmVycmVyUG9saWN5T25SZWRpcmVjdChyZXF1ZXN0LCBhY3R1YWxSZXNwb25zZSlcblxuICAvLyAyMC4gUmV0dXJuIHRoZSByZXN1bHQgb2YgcnVubmluZyBtYWluIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zIGFuZCB0cnVlLlxuICByZXR1cm4gbWFpbkZldGNoKGZldGNoUGFyYW1zLCB0cnVlKVxufVxuXG4vLyBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jaHR0cC1uZXR3b3JrLW9yLWNhY2hlLWZldGNoXG5hc3luYyBmdW5jdGlvbiBodHRwTmV0d29ya09yQ2FjaGVGZXRjaCAoXG4gIGZldGNoUGFyYW1zLFxuICBpc0F1dGhlbnRpY2F0aW9uRmV0Y2ggPSBmYWxzZSxcbiAgaXNOZXdDb25uZWN0aW9uRmV0Y2ggPSBmYWxzZVxuKSB7XG4gIC8vIDEuIExldCByZXF1ZXN0IGJlIGZldGNoUGFyYW1zXHUyMDE5cyByZXF1ZXN0LlxuICBjb25zdCByZXF1ZXN0ID0gZmV0Y2hQYXJhbXMucmVxdWVzdFxuXG4gIC8vIDIuIExldCBodHRwRmV0Y2hQYXJhbXMgYmUgbnVsbC5cbiAgbGV0IGh0dHBGZXRjaFBhcmFtcyA9IG51bGxcblxuICAvLyAzLiBMZXQgaHR0cFJlcXVlc3QgYmUgbnVsbC5cbiAgbGV0IGh0dHBSZXF1ZXN0ID0gbnVsbFxuXG4gIC8vIDQuIExldCByZXNwb25zZSBiZSBudWxsLlxuICBsZXQgcmVzcG9uc2UgPSBudWxsXG5cbiAgLy8gNS4gTGV0IHN0b3JlZFJlc3BvbnNlIGJlIG51bGwuXG4gIC8vIFRPRE86IGNhY2hlXG5cbiAgLy8gNi4gTGV0IGh0dHBDYWNoZSBiZSBudWxsLlxuICBjb25zdCBodHRwQ2FjaGUgPSBudWxsXG5cbiAgLy8gNy4gTGV0IHRoZSByZXZhbGlkYXRpbmdGbGFnIGJlIHVuc2V0LlxuICBjb25zdCByZXZhbGlkYXRpbmdGbGFnID0gZmFsc2VcblxuICAvLyA4LiBSdW4gdGhlc2Ugc3RlcHMsIGJ1dCBhYm9ydCB3aGVuIHRoZSBvbmdvaW5nIGZldGNoIGlzIHRlcm1pbmF0ZWQ6XG5cbiAgLy8gICAgMS4gSWYgcmVxdWVzdFx1MjAxOXMgd2luZG93IGlzIFwibm8td2luZG93XCIgYW5kIHJlcXVlc3RcdTIwMTlzIHJlZGlyZWN0IG1vZGUgaXNcbiAgLy8gICAgXCJlcnJvclwiLCB0aGVuIHNldCBodHRwRmV0Y2hQYXJhbXMgdG8gZmV0Y2hQYXJhbXMgYW5kIGh0dHBSZXF1ZXN0IHRvXG4gIC8vICAgIHJlcXVlc3QuXG4gIGlmIChyZXF1ZXN0LndpbmRvdyA9PT0gJ25vLXdpbmRvdycgJiYgcmVxdWVzdC5yZWRpcmVjdCA9PT0gJ2Vycm9yJykge1xuICAgIGh0dHBGZXRjaFBhcmFtcyA9IGZldGNoUGFyYW1zXG4gICAgaHR0cFJlcXVlc3QgPSByZXF1ZXN0XG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gU2V0IGh0dHBSZXF1ZXN0IHRvIGEgY2xvbmUgb2YgcmVxdWVzdC5cbiAgICBodHRwUmVxdWVzdCA9IG1ha2VSZXF1ZXN0KHJlcXVlc3QpXG5cbiAgICAvLyAyLiBTZXQgaHR0cEZldGNoUGFyYW1zIHRvIGEgY29weSBvZiBmZXRjaFBhcmFtcy5cbiAgICBodHRwRmV0Y2hQYXJhbXMgPSB7IC4uLmZldGNoUGFyYW1zIH1cblxuICAgIC8vIDMuIFNldCBodHRwRmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3QgdG8gaHR0cFJlcXVlc3QuXG4gICAgaHR0cEZldGNoUGFyYW1zLnJlcXVlc3QgPSBodHRwUmVxdWVzdFxuICB9XG5cbiAgLy8gICAgMy4gTGV0IGluY2x1ZGVDcmVkZW50aWFscyBiZSB0cnVlIGlmIG9uZSBvZlxuICBjb25zdCBpbmNsdWRlQ3JlZGVudGlhbHMgPVxuICAgIHJlcXVlc3QuY3JlZGVudGlhbHMgPT09ICdpbmNsdWRlJyB8fFxuICAgIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnc2FtZS1vcmlnaW4nICYmXG4gICAgICByZXF1ZXN0LnJlc3BvbnNlVGFpbnRpbmcgPT09ICdiYXNpYycpXG5cbiAgLy8gICAgNC4gTGV0IGNvbnRlbnRMZW5ndGggYmUgaHR0cFJlcXVlc3RcdTIwMTlzIGJvZHlcdTIwMTlzIGxlbmd0aCwgaWYgaHR0cFJlcXVlc3RcdTIwMTlzXG4gIC8vICAgIGJvZHkgaXMgbm9uLW51bGw7IG90aGVyd2lzZSBudWxsLlxuICBjb25zdCBjb250ZW50TGVuZ3RoID0gaHR0cFJlcXVlc3QuYm9keSA/IGh0dHBSZXF1ZXN0LmJvZHkubGVuZ3RoIDogbnVsbFxuXG4gIC8vICAgIDUuIExldCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgYmUgbnVsbC5cbiAgbGV0IGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSA9IG51bGxcblxuICAvLyAgICA2LiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgYm9keSBpcyBudWxsIGFuZCBodHRwUmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzIGBQT1NUYCBvclxuICAvLyAgICBgUFVUYCwgdGhlbiBzZXQgY29udGVudExlbmd0aEhlYWRlclZhbHVlIHRvIGAwYC5cbiAgaWYgKFxuICAgIGh0dHBSZXF1ZXN0LmJvZHkgPT0gbnVsbCAmJlxuICAgIFsnUE9TVCcsICdQVVQnXS5pbmNsdWRlcyhodHRwUmVxdWVzdC5tZXRob2QpXG4gICkge1xuICAgIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSA9ICcwJ1xuICB9XG5cbiAgLy8gICAgNy4gSWYgY29udGVudExlbmd0aCBpcyBub24tbnVsbCwgdGhlbiBzZXQgY29udGVudExlbmd0aEhlYWRlclZhbHVlIHRvXG4gIC8vICAgIGNvbnRlbnRMZW5ndGgsIHNlcmlhbGl6ZWQgYW5kIGlzb21vcnBoaWMgZW5jb2RlZC5cbiAgaWYgKGNvbnRlbnRMZW5ndGggIT0gbnVsbCkge1xuICAgIGNvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSA9IGlzb21vcnBoaWNFbmNvZGUoYCR7Y29udGVudExlbmd0aH1gKVxuICB9XG5cbiAgLy8gICAgOC4gSWYgY29udGVudExlbmd0aEhlYWRlclZhbHVlIGlzIG5vbi1udWxsLCB0aGVuIGFwcGVuZFxuICAvLyAgICBgQ29udGVudC1MZW5ndGhgL2NvbnRlbnRMZW5ndGhIZWFkZXJWYWx1ZSB0byBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyXG4gIC8vICAgIGxpc3QuXG4gIGlmIChjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgIT0gbnVsbCkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnY29udGVudC1sZW5ndGgnLCBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUpXG4gIH1cblxuICAvLyAgICA5LiBJZiBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUgaXMgbm9uLW51bGwsIHRoZW4gYXBwZW5kIChgQ29udGVudC1MZW5ndGhgLFxuICAvLyAgICBjb250ZW50TGVuZ3RoSGVhZGVyVmFsdWUpIHRvIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cblxuICAvLyAgICAxMC4gSWYgY29udGVudExlbmd0aCBpcyBub24tbnVsbCBhbmQgaHR0cFJlcXVlc3RcdTIwMTlzIGtlZXBhbGl2ZSBpcyB0cnVlLFxuICAvLyAgICB0aGVuOlxuICBpZiAoY29udGVudExlbmd0aCAhPSBudWxsICYmIGh0dHBSZXF1ZXN0LmtlZXBhbGl2ZSkge1xuICAgIC8vIE5PVEU6IGtlZXBhbGl2ZSBpcyBhIG5vb3Agb3V0c2lkZSBvZiBicm93c2VyIGNvbnRleHQuXG4gIH1cblxuICAvLyAgICAxMS4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIHJlZmVycmVyIGlzIGEgVVJMLCB0aGVuIGFwcGVuZFxuICAvLyAgICBgUmVmZXJlcmAvaHR0cFJlcXVlc3RcdTIwMTlzIHJlZmVycmVyLCBzZXJpYWxpemVkIGFuZCBpc29tb3JwaGljIGVuY29kZWQsXG4gIC8vICAgICB0byBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGlmIChodHRwUmVxdWVzdC5yZWZlcnJlciBpbnN0YW5jZW9mIFVSTCkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgncmVmZXJlcicsIGlzb21vcnBoaWNFbmNvZGUoaHR0cFJlcXVlc3QucmVmZXJyZXIuaHJlZikpXG4gIH1cblxuICAvLyAgICAxMi4gQXBwZW5kIGEgcmVxdWVzdCBgT3JpZ2luYCBoZWFkZXIgZm9yIGh0dHBSZXF1ZXN0LlxuICBhcHBlbmRSZXF1ZXN0T3JpZ2luSGVhZGVyKGh0dHBSZXF1ZXN0KVxuXG4gIC8vICAgIDEzLiBBcHBlbmQgdGhlIEZldGNoIG1ldGFkYXRhIGhlYWRlcnMgZm9yIGh0dHBSZXF1ZXN0LiBbRkVUQ0gtTUVUQURBVEFdXG4gIGFwcGVuZEZldGNoTWV0YWRhdGEoaHR0cFJlcXVlc3QpXG5cbiAgLy8gICAgMTQuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBVc2VyLUFnZW50YCwgdGhlblxuICAvLyAgICB1c2VyIGFnZW50cyBzaG91bGQgYXBwZW5kIGBVc2VyLUFnZW50YC9kZWZhdWx0IGBVc2VyLUFnZW50YCB2YWx1ZSB0b1xuICAvLyAgICBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGlmICghaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3VzZXItYWdlbnQnKSkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgndXNlci1hZ2VudCcsIHR5cGVvZiBlc2J1aWxkRGV0ZWN0aW9uID09PSAndW5kZWZpbmVkJyA/ICd1bmRpY2knIDogJ25vZGUnKVxuICB9XG5cbiAgLy8gICAgMTUuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIFwiZGVmYXVsdFwiIGFuZCBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyXG4gIC8vICAgIGxpc3QgY29udGFpbnMgYElmLU1vZGlmaWVkLVNpbmNlYCwgYElmLU5vbmUtTWF0Y2hgLFxuICAvLyAgICBgSWYtVW5tb2RpZmllZC1TaW5jZWAsIGBJZi1NYXRjaGAsIG9yIGBJZi1SYW5nZWAsIHRoZW4gc2V0XG4gIC8vICAgIGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIHRvIFwibm8tc3RvcmVcIi5cbiAgaWYgKFxuICAgIGh0dHBSZXF1ZXN0LmNhY2hlID09PSAnZGVmYXVsdCcgJiZcbiAgICAoaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2lmLW1vZGlmaWVkLXNpbmNlJykgfHxcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi1ub25lLW1hdGNoJykgfHxcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi11bm1vZGlmaWVkLXNpbmNlJykgfHxcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdpZi1tYXRjaCcpIHx8XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnaWYtcmFuZ2UnKSlcbiAgKSB7XG4gICAgaHR0cFJlcXVlc3QuY2FjaGUgPSAnbm8tc3RvcmUnXG4gIH1cblxuICAvLyAgICAxNi4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgaXMgXCJuby1jYWNoZVwiLCBodHRwUmVxdWVzdFx1MjAxOXMgcHJldmVudFxuICAvLyAgICBuby1jYWNoZSBjYWNoZS1jb250cm9sIGhlYWRlciBtb2RpZmljYXRpb24gZmxhZyBpcyB1bnNldCwgYW5kXG4gIC8vICAgIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBDYWNoZS1Db250cm9sYCwgdGhlbiBhcHBlbmRcbiAgLy8gICAgYENhY2hlLUNvbnRyb2xgL2BtYXgtYWdlPTBgIHRvIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgaWYgKFxuICAgIGh0dHBSZXF1ZXN0LmNhY2hlID09PSAnbm8tY2FjaGUnICYmXG4gICAgIWh0dHBSZXF1ZXN0LnByZXZlbnROb0NhY2hlQ2FjaGVDb250cm9sSGVhZGVyTW9kaWZpY2F0aW9uICYmXG4gICAgIWh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdjYWNoZS1jb250cm9sJylcbiAgKSB7XG4gICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdjYWNoZS1jb250cm9sJywgJ21heC1hZ2U9MCcpXG4gIH1cblxuICAvLyAgICAxNy4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgaXMgXCJuby1zdG9yZVwiIG9yIFwicmVsb2FkXCIsIHRoZW46XG4gIGlmIChodHRwUmVxdWVzdC5jYWNoZSA9PT0gJ25vLXN0b3JlJyB8fCBodHRwUmVxdWVzdC5jYWNoZSA9PT0gJ3JlbG9hZCcpIHtcbiAgICAvLyAxLiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgUHJhZ21hYCwgdGhlbiBhcHBlbmRcbiAgICAvLyBgUHJhZ21hYC9gbm8tY2FjaGVgIHRvIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgICBpZiAoIWh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmNvbnRhaW5zKCdwcmFnbWEnKSkge1xuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdwcmFnbWEnLCAnbm8tY2FjaGUnKVxuICAgIH1cblxuICAgIC8vIDIuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBkb2VzIG5vdCBjb250YWluIGBDYWNoZS1Db250cm9sYCxcbiAgICAvLyB0aGVuIGFwcGVuZCBgQ2FjaGUtQ29udHJvbGAvYG5vLWNhY2hlYCB0byBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gICAgaWYgKCFodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygnY2FjaGUtY29udHJvbCcpKSB7XG4gICAgICBodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ2NhY2hlLWNvbnRyb2wnLCAnbm8tY2FjaGUnKVxuICAgIH1cbiAgfVxuXG4gIC8vICAgIDE4LiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgY29udGFpbnMgYFJhbmdlYCwgdGhlbiBhcHBlbmRcbiAgLy8gICAgYEFjY2VwdC1FbmNvZGluZ2AvYGlkZW50aXR5YCB0byBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG4gIGlmIChodHRwUmVxdWVzdC5oZWFkZXJzTGlzdC5jb250YWlucygncmFuZ2UnKSkge1xuICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0LWVuY29kaW5nJywgJ2lkZW50aXR5JylcbiAgfVxuXG4gIC8vICAgIDE5LiBNb2RpZnkgaHR0cFJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IHBlciBIVFRQLiBEbyBub3QgYXBwZW5kIGEgZ2l2ZW5cbiAgLy8gICAgaGVhZGVyIGlmIGh0dHBSZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdCBjb250YWlucyB0aGF0IGhlYWRlclx1MjAxOXMgbmFtZS5cbiAgLy8gICAgVE9ETzogaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mZXRjaC9pc3N1ZXMvMTI4NSNpc3N1ZWNvbW1lbnQtODk2NTYwMTI5XG4gIGlmICghaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ2FjY2VwdC1lbmNvZGluZycpKSB7XG4gICAgaWYgKHVybEhhc0h0dHBzU2NoZW1lKHJlcXVlc3RDdXJyZW50VVJMKGh0dHBSZXF1ZXN0KSkpIHtcbiAgICAgIGh0dHBSZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnYWNjZXB0LWVuY29kaW5nJywgJ2JyLCBnemlwLCBkZWZsYXRlJylcbiAgICB9IGVsc2Uge1xuICAgICAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdhY2NlcHQtZW5jb2RpbmcnLCAnZ3ppcCwgZGVmbGF0ZScpXG4gICAgfVxuICB9XG5cbiAgaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuZGVsZXRlKCdob3N0JylcblxuICAvLyAgICAyMC4gSWYgaW5jbHVkZUNyZWRlbnRpYWxzIGlzIHRydWUsIHRoZW46XG4gIGlmIChpbmNsdWRlQ3JlZGVudGlhbHMpIHtcbiAgICAvLyAxLiBJZiB0aGUgdXNlciBhZ2VudCBpcyBub3QgY29uZmlndXJlZCB0byBibG9jayBjb29raWVzIGZvciBodHRwUmVxdWVzdFxuICAgIC8vIChzZWUgc2VjdGlvbiA3IG9mIFtDT09LSUVTXSksIHRoZW46XG4gICAgLy8gVE9ETzogY3JlZGVudGlhbHNcbiAgICAvLyAyLiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgZG9lcyBub3QgY29udGFpbiBgQXV0aG9yaXphdGlvbmAsIHRoZW46XG4gICAgLy8gVE9ETzogY3JlZGVudGlhbHNcbiAgfVxuXG4gIC8vICAgIDIxLiBJZiB0aGVyZVx1MjAxOXMgYSBwcm94eS1hdXRoZW50aWNhdGlvbiBlbnRyeSwgdXNlIGl0IGFzIGFwcHJvcHJpYXRlLlxuICAvLyAgICBUT0RPOiBwcm94eS1hdXRoZW50aWNhdGlvblxuXG4gIC8vICAgIDIyLiBTZXQgaHR0cENhY2hlIHRvIHRoZSByZXN1bHQgb2YgZGV0ZXJtaW5pbmcgdGhlIEhUVFAgY2FjaGVcbiAgLy8gICAgcGFydGl0aW9uLCBnaXZlbiBodHRwUmVxdWVzdC5cbiAgLy8gICAgVE9ETzogY2FjaGVcblxuICAvLyAgICAyMy4gSWYgaHR0cENhY2hlIGlzIG51bGwsIHRoZW4gc2V0IGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIHRvXG4gIC8vICAgIFwibm8tc3RvcmVcIi5cbiAgaWYgKGh0dHBDYWNoZSA9PSBudWxsKSB7XG4gICAgaHR0cFJlcXVlc3QuY2FjaGUgPSAnbm8tc3RvcmUnXG4gIH1cblxuICAvLyAgICAyNC4gSWYgaHR0cFJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgaXMgbmVpdGhlciBcIm5vLXN0b3JlXCIgbm9yIFwicmVsb2FkXCIsXG4gIC8vICAgIHRoZW46XG4gIGlmIChodHRwUmVxdWVzdC5tb2RlICE9PSAnbm8tc3RvcmUnICYmIGh0dHBSZXF1ZXN0Lm1vZGUgIT09ICdyZWxvYWQnKSB7XG4gICAgLy8gVE9ETzogY2FjaGVcbiAgfVxuXG4gIC8vIDkuIElmIGFib3J0ZWQsIHRoZW4gcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSBuZXR3b3JrIGVycm9yIGZvciBmZXRjaFBhcmFtcy5cbiAgLy8gVE9ET1xuXG4gIC8vIDEwLiBJZiByZXNwb25zZSBpcyBudWxsLCB0aGVuOlxuICBpZiAocmVzcG9uc2UgPT0gbnVsbCkge1xuICAgIC8vIDEuIElmIGh0dHBSZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIGlzIFwib25seS1pZi1jYWNoZWRcIiwgdGhlbiByZXR1cm4gYVxuICAgIC8vIG5ldHdvcmsgZXJyb3IuXG4gICAgaWYgKGh0dHBSZXF1ZXN0Lm1vZGUgPT09ICdvbmx5LWlmLWNhY2hlZCcpIHtcbiAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdvbmx5IGlmIGNhY2hlZCcpXG4gICAgfVxuXG4gICAgLy8gMi4gTGV0IGZvcndhcmRSZXNwb25zZSBiZSB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUC1uZXR3b3JrIGZldGNoXG4gICAgLy8gZ2l2ZW4gaHR0cEZldGNoUGFyYW1zLCBpbmNsdWRlQ3JlZGVudGlhbHMsIGFuZCBpc05ld0Nvbm5lY3Rpb25GZXRjaC5cbiAgICBjb25zdCBmb3J3YXJkUmVzcG9uc2UgPSBhd2FpdCBodHRwTmV0d29ya0ZldGNoKFxuICAgICAgaHR0cEZldGNoUGFyYW1zLFxuICAgICAgaW5jbHVkZUNyZWRlbnRpYWxzLFxuICAgICAgaXNOZXdDb25uZWN0aW9uRmV0Y2hcbiAgICApXG5cbiAgICAvLyAzLiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgbWV0aG9kIGlzIHVuc2FmZSBhbmQgZm9yd2FyZFJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXNcbiAgICAvLyBpbiB0aGUgcmFuZ2UgMjAwIHRvIDM5OSwgaW5jbHVzaXZlLCBpbnZhbGlkYXRlIGFwcHJvcHJpYXRlIHN0b3JlZFxuICAgIC8vIHJlc3BvbnNlcyBpbiBodHRwQ2FjaGUsIGFzIHBlciB0aGUgXCJJbnZhbGlkYXRpb25cIiBjaGFwdGVyIG9mIEhUVFBcbiAgICAvLyBDYWNoaW5nLCBhbmQgc2V0IHN0b3JlZFJlc3BvbnNlIHRvIG51bGwuIFtIVFRQLUNBQ0hJTkddXG4gICAgaWYgKFxuICAgICAgIXNhZmVNZXRob2RzU2V0LmhhcyhodHRwUmVxdWVzdC5tZXRob2QpICYmXG4gICAgICBmb3J3YXJkUmVzcG9uc2Uuc3RhdHVzID49IDIwMCAmJlxuICAgICAgZm9yd2FyZFJlc3BvbnNlLnN0YXR1cyA8PSAzOTlcbiAgICApIHtcbiAgICAgIC8vIFRPRE86IGNhY2hlXG4gICAgfVxuXG4gICAgLy8gNC4gSWYgdGhlIHJldmFsaWRhdGluZ0ZsYWcgaXMgc2V0IGFuZCBmb3J3YXJkUmVzcG9uc2VcdTIwMTlzIHN0YXR1cyBpcyAzMDQsXG4gICAgLy8gdGhlbjpcbiAgICBpZiAocmV2YWxpZGF0aW5nRmxhZyAmJiBmb3J3YXJkUmVzcG9uc2Uuc3RhdHVzID09PSAzMDQpIHtcbiAgICAgIC8vIFRPRE86IGNhY2hlXG4gICAgfVxuXG4gICAgLy8gNS4gSWYgcmVzcG9uc2UgaXMgbnVsbCwgdGhlbjpcbiAgICBpZiAocmVzcG9uc2UgPT0gbnVsbCkge1xuICAgICAgLy8gMS4gU2V0IHJlc3BvbnNlIHRvIGZvcndhcmRSZXNwb25zZS5cbiAgICAgIHJlc3BvbnNlID0gZm9yd2FyZFJlc3BvbnNlXG5cbiAgICAgIC8vIDIuIFN0b3JlIGh0dHBSZXF1ZXN0IGFuZCBmb3J3YXJkUmVzcG9uc2UgaW4gaHR0cENhY2hlLCBhcyBwZXIgdGhlXG4gICAgICAvLyBcIlN0b3JpbmcgUmVzcG9uc2VzIGluIENhY2hlc1wiIGNoYXB0ZXIgb2YgSFRUUCBDYWNoaW5nLiBbSFRUUC1DQUNISU5HXVxuICAgICAgLy8gVE9ETzogY2FjaGVcbiAgICB9XG4gIH1cblxuICAvLyAxMS4gU2V0IHJlc3BvbnNlXHUyMDE5cyBVUkwgbGlzdCB0byBhIGNsb25lIG9mIGh0dHBSZXF1ZXN0XHUyMDE5cyBVUkwgbGlzdC5cbiAgcmVzcG9uc2UudXJsTGlzdCA9IFsuLi5odHRwUmVxdWVzdC51cmxMaXN0XVxuXG4gIC8vIDEyLiBJZiBodHRwUmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QgY29udGFpbnMgYFJhbmdlYCwgdGhlbiBzZXQgcmVzcG9uc2VcdTIwMTlzXG4gIC8vIHJhbmdlLXJlcXVlc3RlZCBmbGFnLlxuICBpZiAoaHR0cFJlcXVlc3QuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3JhbmdlJykpIHtcbiAgICByZXNwb25zZS5yYW5nZVJlcXVlc3RlZCA9IHRydWVcbiAgfVxuXG4gIC8vIDEzLiBTZXQgcmVzcG9uc2VcdTIwMTlzIHJlcXVlc3QtaW5jbHVkZXMtY3JlZGVudGlhbHMgdG8gaW5jbHVkZUNyZWRlbnRpYWxzLlxuICByZXNwb25zZS5yZXF1ZXN0SW5jbHVkZXNDcmVkZW50aWFscyA9IGluY2x1ZGVDcmVkZW50aWFsc1xuXG4gIC8vIDE0LiBJZiByZXNwb25zZVx1MjAxOXMgc3RhdHVzIGlzIDQwMSwgaHR0cFJlcXVlc3RcdTIwMTlzIHJlc3BvbnNlIHRhaW50aW5nIGlzIG5vdFxuICAvLyBcImNvcnNcIiwgaW5jbHVkZUNyZWRlbnRpYWxzIGlzIHRydWUsIGFuZCByZXF1ZXN0XHUyMDE5cyB3aW5kb3cgaXMgYW4gZW52aXJvbm1lbnRcbiAgLy8gc2V0dGluZ3Mgb2JqZWN0LCB0aGVuOlxuICAvLyBUT0RPXG5cbiAgLy8gMTUuIElmIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgNDA3LCB0aGVuOlxuICBpZiAocmVzcG9uc2Uuc3RhdHVzID09PSA0MDcpIHtcbiAgICAvLyAxLiBJZiByZXF1ZXN0XHUyMDE5cyB3aW5kb3cgaXMgXCJuby13aW5kb3dcIiwgdGhlbiByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuICAgIGlmIChyZXF1ZXN0LndpbmRvdyA9PT0gJ25vLXdpbmRvdycpIHtcbiAgICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKClcbiAgICB9XG5cbiAgICAvLyAyLiA/Pz9cblxuICAgIC8vIDMuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlcnJvciBmb3IgZmV0Y2hQYXJhbXMuXG4gICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgcmV0dXJuIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcylcbiAgICB9XG5cbiAgICAvLyA0LiBQcm9tcHQgdGhlIGVuZCB1c2VyIGFzIGFwcHJvcHJpYXRlIGluIHJlcXVlc3RcdTIwMTlzIHdpbmRvdyBhbmQgc3RvcmVcbiAgICAvLyB0aGUgcmVzdWx0IGFzIGEgcHJveHktYXV0aGVudGljYXRpb24gZW50cnkuIFtIVFRQLUFVVEhdXG4gICAgLy8gVE9ETzogSW52b2tlIHNvbWUga2luZCBvZiBjYWxsYmFjaz9cblxuICAgIC8vIDUuIFNldCByZXNwb25zZSB0byB0aGUgcmVzdWx0IG9mIHJ1bm5pbmcgSFRUUC1uZXR3b3JrLW9yLWNhY2hlIGZldGNoIGdpdmVuXG4gICAgLy8gZmV0Y2hQYXJhbXMuXG4gICAgLy8gVE9ET1xuICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKCdwcm94eSBhdXRoZW50aWNhdGlvbiByZXF1aXJlZCcpXG4gIH1cblxuICAvLyAxNi4gSWYgYWxsIG9mIHRoZSBmb2xsb3dpbmcgYXJlIHRydWVcbiAgaWYgKFxuICAgIC8vIHJlc3BvbnNlXHUyMDE5cyBzdGF0dXMgaXMgNDIxXG4gICAgcmVzcG9uc2Uuc3RhdHVzID09PSA0MjEgJiZcbiAgICAvLyBpc05ld0Nvbm5lY3Rpb25GZXRjaCBpcyBmYWxzZVxuICAgICFpc05ld0Nvbm5lY3Rpb25GZXRjaCAmJlxuICAgIC8vIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbnVsbCwgb3IgcmVxdWVzdFx1MjAxOXMgYm9keSBpcyBub24tbnVsbCBhbmQgcmVxdWVzdFx1MjAxOXMgYm9keVx1MjAxOXMgc291cmNlIGlzIG5vbi1udWxsXG4gICAgKHJlcXVlc3QuYm9keSA9PSBudWxsIHx8IHJlcXVlc3QuYm9keS5zb3VyY2UgIT0gbnVsbClcbiAgKSB7XG4gICAgLy8gdGhlbjpcblxuICAgIC8vIDEuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIHJldHVybiB0aGUgYXBwcm9wcmlhdGUgbmV0d29yayBlcnJvciBmb3IgZmV0Y2hQYXJhbXMuXG4gICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgcmV0dXJuIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcylcbiAgICB9XG5cbiAgICAvLyAyLiBTZXQgcmVzcG9uc2UgdG8gdGhlIHJlc3VsdCBvZiBydW5uaW5nIEhUVFAtbmV0d29yay1vci1jYWNoZVxuICAgIC8vIGZldGNoIGdpdmVuIGZldGNoUGFyYW1zLCBpc0F1dGhlbnRpY2F0aW9uRmV0Y2gsIGFuZCB0cnVlLlxuXG4gICAgLy8gVE9ETyAoc3BlYyk6IFRoZSBzcGVjIGRvZXNuJ3Qgc3BlY2lmeSB0aGlzIGJ1dCB3ZSBuZWVkIHRvIGNhbmNlbFxuICAgIC8vIHRoZSBhY3RpdmUgcmVzcG9uc2UgYmVmb3JlIHdlIGNhbiBzdGFydCBhIG5ldyBvbmUuXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9mZXRjaC9pc3N1ZXMvMTI5M1xuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbi5kZXN0cm95KClcblxuICAgIHJlc3BvbnNlID0gYXdhaXQgaHR0cE5ldHdvcmtPckNhY2hlRmV0Y2goXG4gICAgICBmZXRjaFBhcmFtcyxcbiAgICAgIGlzQXV0aGVudGljYXRpb25GZXRjaCxcbiAgICAgIHRydWVcbiAgICApXG4gIH1cblxuICAvLyAxNy4gSWYgaXNBdXRoZW50aWNhdGlvbkZldGNoIGlzIHRydWUsIHRoZW4gY3JlYXRlIGFuIGF1dGhlbnRpY2F0aW9uIGVudHJ5XG4gIGlmIChpc0F1dGhlbnRpY2F0aW9uRmV0Y2gpIHtcbiAgICAvLyBUT0RPXG4gIH1cblxuICAvLyAxOC4gUmV0dXJuIHJlc3BvbnNlLlxuICByZXR1cm4gcmVzcG9uc2Vcbn1cblxuLy8gaHR0cHM6Ly9mZXRjaC5zcGVjLndoYXR3Zy5vcmcvI2h0dHAtbmV0d29yay1mZXRjaFxuYXN5bmMgZnVuY3Rpb24gaHR0cE5ldHdvcmtGZXRjaCAoXG4gIGZldGNoUGFyYW1zLFxuICBpbmNsdWRlQ3JlZGVudGlhbHMgPSBmYWxzZSxcbiAgZm9yY2VOZXdDb25uZWN0aW9uID0gZmFsc2Vcbikge1xuICBhc3NlcnQoIWZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbiB8fCBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveWVkKVxuXG4gIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29ubmVjdGlvbiA9IHtcbiAgICBhYm9ydDogbnVsbCxcbiAgICBkZXN0cm95ZWQ6IGZhbHNlLFxuICAgIGRlc3Ryb3kgKGVycikge1xuICAgICAgaWYgKCF0aGlzLmRlc3Ryb3llZCkge1xuICAgICAgICB0aGlzLmRlc3Ryb3llZCA9IHRydWVcbiAgICAgICAgdGhpcy5hYm9ydD8uKGVyciA/PyBuZXcgRE9NRXhjZXB0aW9uKCdUaGUgb3BlcmF0aW9uIHdhcyBhYm9ydGVkLicsICdBYm9ydEVycm9yJykpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLy8gMS4gTGV0IHJlcXVlc3QgYmUgZmV0Y2hQYXJhbXNcdTIwMTlzIHJlcXVlc3QuXG4gIGNvbnN0IHJlcXVlc3QgPSBmZXRjaFBhcmFtcy5yZXF1ZXN0XG5cbiAgLy8gMi4gTGV0IHJlc3BvbnNlIGJlIG51bGwuXG4gIGxldCByZXNwb25zZSA9IG51bGxcblxuICAvLyAzLiBMZXQgdGltaW5nSW5mbyBiZSBmZXRjaFBhcmFtc1x1MjAxOXMgdGltaW5nIGluZm8uXG4gIGNvbnN0IHRpbWluZ0luZm8gPSBmZXRjaFBhcmFtcy50aW1pbmdJbmZvXG5cbiAgLy8gNC4gTGV0IGh0dHBDYWNoZSBiZSB0aGUgcmVzdWx0IG9mIGRldGVybWluaW5nIHRoZSBIVFRQIGNhY2hlIHBhcnRpdGlvbixcbiAgLy8gZ2l2ZW4gcmVxdWVzdC5cbiAgLy8gVE9ETzogY2FjaGVcbiAgY29uc3QgaHR0cENhY2hlID0gbnVsbFxuXG4gIC8vIDUuIElmIGh0dHBDYWNoZSBpcyBudWxsLCB0aGVuIHNldCByZXF1ZXN0XHUyMDE5cyBjYWNoZSBtb2RlIHRvIFwibm8tc3RvcmVcIi5cbiAgaWYgKGh0dHBDYWNoZSA9PSBudWxsKSB7XG4gICAgcmVxdWVzdC5jYWNoZSA9ICduby1zdG9yZSdcbiAgfVxuXG4gIC8vIDYuIExldCBuZXR3b3JrUGFydGl0aW9uS2V5IGJlIHRoZSByZXN1bHQgb2YgZGV0ZXJtaW5pbmcgdGhlIG5ldHdvcmtcbiAgLy8gcGFydGl0aW9uIGtleSBnaXZlbiByZXF1ZXN0LlxuICAvLyBUT0RPXG5cbiAgLy8gNy4gTGV0IG5ld0Nvbm5lY3Rpb24gYmUgXCJ5ZXNcIiBpZiBmb3JjZU5ld0Nvbm5lY3Rpb24gaXMgdHJ1ZTsgb3RoZXJ3aXNlXG4gIC8vIFwibm9cIi5cbiAgY29uc3QgbmV3Q29ubmVjdGlvbiA9IGZvcmNlTmV3Q29ubmVjdGlvbiA/ICd5ZXMnIDogJ25vJyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVudXNlZC12YXJzXG5cbiAgLy8gOC4gU3dpdGNoIG9uIHJlcXVlc3RcdTIwMTlzIG1vZGU6XG4gIGlmIChyZXF1ZXN0Lm1vZGUgPT09ICd3ZWJzb2NrZXQnKSB7XG4gICAgLy8gTGV0IGNvbm5lY3Rpb24gYmUgdGhlIHJlc3VsdCBvZiBvYnRhaW5pbmcgYSBXZWJTb2NrZXQgY29ubmVjdGlvbixcbiAgICAvLyBnaXZlbiByZXF1ZXN0XHUyMDE5cyBjdXJyZW50IFVSTC5cbiAgICAvLyBUT0RPXG4gIH0gZWxzZSB7XG4gICAgLy8gTGV0IGNvbm5lY3Rpb24gYmUgdGhlIHJlc3VsdCBvZiBvYnRhaW5pbmcgYSBjb25uZWN0aW9uLCBnaXZlblxuICAgIC8vIG5ldHdvcmtQYXJ0aXRpb25LZXksIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMXHUyMDE5cyBvcmlnaW4sXG4gICAgLy8gaW5jbHVkZUNyZWRlbnRpYWxzLCBhbmQgZm9yY2VOZXdDb25uZWN0aW9uLlxuICAgIC8vIFRPRE9cbiAgfVxuXG4gIC8vIDkuIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gdGhlIG9uZ29pbmcgZmV0Y2ggaXMgdGVybWluYXRlZDpcblxuICAvLyAgICAxLiBJZiBjb25uZWN0aW9uIGlzIGZhaWx1cmUsIHRoZW4gcmV0dXJuIGEgbmV0d29yayBlcnJvci5cblxuICAvLyAgICAyLiBTZXQgdGltaW5nSW5mb1x1MjAxOXMgZmluYWwgY29ubmVjdGlvbiB0aW1pbmcgaW5mbyB0byB0aGUgcmVzdWx0IG9mXG4gIC8vICAgIGNhbGxpbmcgY2xhbXAgYW5kIGNvYXJzZW4gY29ubmVjdGlvbiB0aW1pbmcgaW5mbyB3aXRoIGNvbm5lY3Rpb25cdTIwMTlzXG4gIC8vICAgIHRpbWluZyBpbmZvLCB0aW1pbmdJbmZvXHUyMDE5cyBwb3N0LXJlZGlyZWN0IHN0YXJ0IHRpbWUsIGFuZCBmZXRjaFBhcmFtc1x1MjAxOXNcbiAgLy8gICAgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkIGNhcGFiaWxpdHkuXG5cbiAgLy8gICAgMy4gSWYgY29ubmVjdGlvbiBpcyBub3QgYW4gSFRUUC8yIGNvbm5lY3Rpb24sIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm9uLW51bGwsXG4gIC8vICAgIGFuZCByZXF1ZXN0XHUyMDE5cyBib2R5XHUyMDE5cyBzb3VyY2UgaXMgbnVsbCwgdGhlbiBhcHBlbmQgKGBUcmFuc2Zlci1FbmNvZGluZ2AsXG4gIC8vICAgIGBjaHVua2VkYCkgdG8gcmVxdWVzdFx1MjAxOXMgaGVhZGVyIGxpc3QuXG5cbiAgLy8gICAgNC4gU2V0IHRpbWluZ0luZm9cdTIwMTlzIGZpbmFsIG5ldHdvcmstcmVxdWVzdCBzdGFydCB0aW1lIHRvIHRoZSBjb2Fyc2VuZWRcbiAgLy8gICAgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlbiBmZXRjaFBhcmFtc1x1MjAxOXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkXG4gIC8vICAgIGNhcGFiaWxpdHkuXG5cbiAgLy8gICAgNS4gU2V0IHJlc3BvbnNlIHRvIHRoZSByZXN1bHQgb2YgbWFraW5nIGFuIEhUVFAgcmVxdWVzdCBvdmVyIGNvbm5lY3Rpb25cbiAgLy8gICAgdXNpbmcgcmVxdWVzdCB3aXRoIHRoZSBmb2xsb3dpbmcgY2F2ZWF0czpcblxuICAvLyAgICAgICAgLSBGb2xsb3cgdGhlIHJlbGV2YW50IHJlcXVpcmVtZW50cyBmcm9tIEhUVFAuIFtIVFRQXSBbSFRUUC1TRU1BTlRJQ1NdXG4gIC8vICAgICAgICBbSFRUUC1DT05EXSBbSFRUUC1DQUNISU5HXSBbSFRUUC1BVVRIXVxuXG4gIC8vICAgICAgICAtIElmIHJlcXVlc3RcdTIwMTlzIGJvZHkgaXMgbm9uLW51bGwsIGFuZCByZXF1ZXN0XHUyMDE5cyBib2R5XHUyMDE5cyBzb3VyY2UgaXMgbnVsbCxcbiAgLy8gICAgICAgIHRoZW4gdGhlIHVzZXIgYWdlbnQgbWF5IGhhdmUgYSBidWZmZXIgb2YgdXAgdG8gNjQga2liaWJ5dGVzIGFuZCBzdG9yZVxuICAvLyAgICAgICAgYSBwYXJ0IG9mIHJlcXVlc3RcdTIwMTlzIGJvZHkgaW4gdGhhdCBidWZmZXIuIElmIHRoZSB1c2VyIGFnZW50IHJlYWRzIGZyb21cbiAgLy8gICAgICAgIHJlcXVlc3RcdTIwMTlzIGJvZHkgYmV5b25kIHRoYXQgYnVmZmVyXHUyMDE5cyBzaXplIGFuZCB0aGUgdXNlciBhZ2VudCBuZWVkcyB0b1xuICAvLyAgICAgICAgcmVzZW5kIHJlcXVlc3QsIHRoZW4gaW5zdGVhZCByZXR1cm4gYSBuZXR3b3JrIGVycm9yLlxuXG4gIC8vICAgICAgICAtIFNldCB0aW1pbmdJbmZvXHUyMDE5cyBmaW5hbCBuZXR3b3JrLXJlc3BvbnNlIHN0YXJ0IHRpbWUgdG8gdGhlIGNvYXJzZW5lZFxuICAvLyAgICAgICAgc2hhcmVkIGN1cnJlbnQgdGltZSBnaXZlbiBmZXRjaFBhcmFtc1x1MjAxOXMgY3Jvc3Mtb3JpZ2luIGlzb2xhdGVkIGNhcGFiaWxpdHksXG4gIC8vICAgICAgICBpbW1lZGlhdGVseSBhZnRlciB0aGUgdXNlciBhZ2VudFx1MjAxOXMgSFRUUCBwYXJzZXIgcmVjZWl2ZXMgdGhlIGZpcnN0IGJ5dGVcbiAgLy8gICAgICAgIG9mIHRoZSByZXNwb25zZSAoZS5nLiwgZnJhbWUgaGVhZGVyIGJ5dGVzIGZvciBIVFRQLzIgb3IgcmVzcG9uc2Ugc3RhdHVzXG4gIC8vICAgICAgICBsaW5lIGZvciBIVFRQLzEueCkuXG5cbiAgLy8gICAgICAgIC0gV2FpdCB1bnRpbCBhbGwgdGhlIGhlYWRlcnMgYXJlIHRyYW5zbWl0dGVkLlxuXG4gIC8vICAgICAgICAtIEFueSByZXNwb25zZXMgd2hvc2Ugc3RhdHVzIGlzIGluIHRoZSByYW5nZSAxMDAgdG8gMTk5LCBpbmNsdXNpdmUsXG4gIC8vICAgICAgICBhbmQgaXMgbm90IDEwMSwgYXJlIHRvIGJlIGlnbm9yZWQsIGV4Y2VwdCBmb3IgdGhlIHB1cnBvc2VzIG9mIHNldHRpbmdcbiAgLy8gICAgICAgIHRpbWluZ0luZm9cdTIwMTlzIGZpbmFsIG5ldHdvcmstcmVzcG9uc2Ugc3RhcnQgdGltZSBhYm92ZS5cblxuICAvLyAgICAtIElmIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0IGNvbnRhaW5zIGBUcmFuc2Zlci1FbmNvZGluZ2AvYGNodW5rZWRgIGFuZFxuICAvLyAgICByZXNwb25zZSBpcyB0cmFuc2ZlcnJlZCB2aWEgSFRUUC8xLjAgb3Igb2xkZXIsIHRoZW4gcmV0dXJuIGEgbmV0d29ya1xuICAvLyAgICBlcnJvci5cblxuICAvLyAgICAtIElmIHRoZSBIVFRQIHJlcXVlc3QgcmVzdWx0cyBpbiBhIFRMUyBjbGllbnQgY2VydGlmaWNhdGUgZGlhbG9nLCB0aGVuOlxuXG4gIC8vICAgICAgICAxLiBJZiByZXF1ZXN0XHUyMDE5cyB3aW5kb3cgaXMgYW4gZW52aXJvbm1lbnQgc2V0dGluZ3Mgb2JqZWN0LCBtYWtlIHRoZVxuICAvLyAgICAgICAgZGlhbG9nIGF2YWlsYWJsZSBpbiByZXF1ZXN0XHUyMDE5cyB3aW5kb3cuXG5cbiAgLy8gICAgICAgIDIuIE90aGVyd2lzZSwgcmV0dXJuIGEgbmV0d29yayBlcnJvci5cblxuICAvLyBUbyB0cmFuc21pdCByZXF1ZXN0XHUyMDE5cyBib2R5IGJvZHksIHJ1biB0aGVzZSBzdGVwczpcbiAgbGV0IHJlcXVlc3RCb2R5ID0gbnVsbFxuICAvLyAxLiBJZiBib2R5IGlzIG51bGwgYW5kIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlcXVlc3QgZW5kLW9mLWJvZHkgaXNcbiAgLy8gbm9uLW51bGwsIHRoZW4gcXVldWUgYSBmZXRjaCB0YXNrIGdpdmVuIGZldGNoUGFyYW1zXHUyMDE5cyBwcm9jZXNzIHJlcXVlc3RcbiAgLy8gZW5kLW9mLWJvZHkgYW5kIGZldGNoUGFyYW1zXHUyMDE5cyB0YXNrIGRlc3RpbmF0aW9uLlxuICBpZiAocmVxdWVzdC5ib2R5ID09IG51bGwgJiYgZmV0Y2hQYXJhbXMucHJvY2Vzc1JlcXVlc3RFbmRPZkJvZHkpIHtcbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiBmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSgpKVxuICB9IGVsc2UgaWYgKHJlcXVlc3QuYm9keSAhPSBudWxsKSB7XG4gICAgLy8gMi4gT3RoZXJ3aXNlLCBpZiBib2R5IGlzIG5vbi1udWxsOlxuXG4gICAgLy8gICAgMS4gTGV0IHByb2Nlc3NCb2R5Q2h1bmsgZ2l2ZW4gYnl0ZXMgYmUgdGhlc2Ugc3RlcHM6XG4gICAgY29uc3QgcHJvY2Vzc0JvZHlDaHVuayA9IGFzeW5jIGZ1bmN0aW9uICogKGJ5dGVzKSB7XG4gICAgICAvLyAxLiBJZiB0aGUgb25nb2luZyBmZXRjaCBpcyB0ZXJtaW5hdGVkLCB0aGVuIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gUnVuIHRoaXMgc3RlcCBpbiBwYXJhbGxlbDogdHJhbnNtaXQgYnl0ZXMuXG4gICAgICB5aWVsZCBieXRlc1xuXG4gICAgICAvLyAzLiBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXF1ZXN0IGJvZHkgaXMgbm9uLW51bGwsIHRoZW4gcnVuXG4gICAgICAvLyBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXF1ZXN0IGJvZHkgZ2l2ZW4gYnl0ZXNcdTIwMTlzIGxlbmd0aC5cbiAgICAgIGZldGNoUGFyYW1zLnByb2Nlc3NSZXF1ZXN0Qm9keUNodW5rTGVuZ3RoPy4oYnl0ZXMuYnl0ZUxlbmd0aClcbiAgICB9XG5cbiAgICAvLyAyLiBMZXQgcHJvY2Vzc0VuZE9mQm9keSBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzRW5kT2ZCb2R5ID0gKCkgPT4ge1xuICAgICAgLy8gMS4gSWYgZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQsIHRoZW4gYWJvcnQgdGhlc2Ugc3RlcHMuXG4gICAgICBpZiAoaXNDYW5jZWxsZWQoZmV0Y2hQYXJhbXMpKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAyLiBJZiBmZXRjaFBhcmFtc1x1MjAxOXMgcHJvY2VzcyByZXF1ZXN0IGVuZC1vZi1ib2R5IGlzIG5vbi1udWxsLFxuICAgICAgLy8gdGhlbiBydW4gZmV0Y2hQYXJhbXNcdTIwMTlzIHByb2Nlc3MgcmVxdWVzdCBlbmQtb2YtYm9keS5cbiAgICAgIGlmIChmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5wcm9jZXNzUmVxdWVzdEVuZE9mQm9keSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gMy4gTGV0IHByb2Nlc3NCb2R5RXJyb3IgZ2l2ZW4gZSBiZSB0aGVzZSBzdGVwczpcbiAgICBjb25zdCBwcm9jZXNzQm9keUVycm9yID0gKGUpID0+IHtcbiAgICAgIC8vIDEuIElmIGZldGNoUGFyYW1zIGlzIGNhbmNlbGVkLCB0aGVuIGFib3J0IHRoZXNlIHN0ZXBzLlxuICAgICAgaWYgKGlzQ2FuY2VsbGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgZSBpcyBhbiBcIkFib3J0RXJyb3JcIiBET01FeGNlcHRpb24sIHRoZW4gYWJvcnQgZmV0Y2hQYXJhbXNcdTIwMTlzIGNvbnRyb2xsZXIuXG4gICAgICBpZiAoZS5uYW1lID09PSAnQWJvcnRFcnJvcicpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5hYm9ydCgpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZShlKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuIEluY3JlbWVudGFsbHkgcmVhZCByZXF1ZXN0XHUyMDE5cyBib2R5IGdpdmVuIHByb2Nlc3NCb2R5Q2h1bmssIHByb2Nlc3NFbmRPZkJvZHksXG4gICAgLy8gcHJvY2Vzc0JvZHlFcnJvciwgYW5kIGZldGNoUGFyYW1zXHUyMDE5cyB0YXNrIGRlc3RpbmF0aW9uLlxuICAgIHJlcXVlc3RCb2R5ID0gKGFzeW5jIGZ1bmN0aW9uICogKCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgZm9yIGF3YWl0IChjb25zdCBieXRlcyBvZiByZXF1ZXN0LmJvZHkuc3RyZWFtKSB7XG4gICAgICAgICAgeWllbGQgKiBwcm9jZXNzQm9keUNodW5rKGJ5dGVzKVxuICAgICAgICB9XG4gICAgICAgIHByb2Nlc3NFbmRPZkJvZHkoKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIHByb2Nlc3NCb2R5RXJyb3IoZXJyKVxuICAgICAgfVxuICAgIH0pKClcbiAgfVxuXG4gIHRyeSB7XG4gICAgLy8gc29ja2V0IGlzIG9ubHkgcHJvdmlkZWQgZm9yIHdlYnNvY2tldHNcbiAgICBjb25zdCB7IGJvZHksIHN0YXR1cywgc3RhdHVzVGV4dCwgaGVhZGVyc0xpc3QsIHNvY2tldCB9ID0gYXdhaXQgZGlzcGF0Y2goeyBib2R5OiByZXF1ZXN0Qm9keSB9KVxuXG4gICAgaWYgKHNvY2tldCkge1xuICAgICAgcmVzcG9uc2UgPSBtYWtlUmVzcG9uc2UoeyBzdGF0dXMsIHN0YXR1c1RleHQsIGhlYWRlcnNMaXN0LCBzb2NrZXQgfSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgaXRlcmF0b3IgPSBib2R5W1N5bWJvbC5hc3luY0l0ZXJhdG9yXSgpXG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm5leHQgPSAoKSA9PiBpdGVyYXRvci5uZXh0KClcblxuICAgICAgcmVzcG9uc2UgPSBtYWtlUmVzcG9uc2UoeyBzdGF0dXMsIHN0YXR1c1RleHQsIGhlYWRlcnNMaXN0IH0pXG4gICAgfVxuICB9IGNhdGNoIChlcnIpIHtcbiAgICAvLyAxMC4gSWYgYWJvcnRlZCwgdGhlbjpcbiAgICBpZiAoZXJyLm5hbWUgPT09ICdBYm9ydEVycm9yJykge1xuICAgICAgLy8gMS4gSWYgY29ubmVjdGlvbiB1c2VzIEhUVFAvMiwgdGhlbiB0cmFuc21pdCBhbiBSU1RfU1RSRUFNIGZyYW1lLlxuICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb25uZWN0aW9uLmRlc3Ryb3koKVxuXG4gICAgICAvLyAyLiBSZXR1cm4gdGhlIGFwcHJvcHJpYXRlIG5ldHdvcmsgZXJyb3IgZm9yIGZldGNoUGFyYW1zLlxuICAgICAgcmV0dXJuIG1ha2VBcHByb3ByaWF0ZU5ldHdvcmtFcnJvcihmZXRjaFBhcmFtcywgZXJyKVxuICAgIH1cblxuICAgIHJldHVybiBtYWtlTmV0d29ya0Vycm9yKGVycilcbiAgfVxuXG4gIC8vIDExLiBMZXQgcHVsbEFsZ29yaXRobSBiZSBhbiBhY3Rpb24gdGhhdCByZXN1bWVzIHRoZSBvbmdvaW5nIGZldGNoXG4gIC8vIGlmIGl0IGlzIHN1c3BlbmRlZC5cbiAgY29uc3QgcHVsbEFsZ29yaXRobSA9ICgpID0+IHtcbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnJlc3VtZSgpXG4gIH1cblxuICAvLyAxMi4gTGV0IGNhbmNlbEFsZ29yaXRobSBiZSBhbiBhbGdvcml0aG0gdGhhdCBhYm9ydHMgZmV0Y2hQYXJhbXNcdTIwMTlzXG4gIC8vIGNvbnRyb2xsZXIgd2l0aCByZWFzb24sIGdpdmVuIHJlYXNvbi5cbiAgY29uc3QgY2FuY2VsQWxnb3JpdGhtID0gKHJlYXNvbikgPT4ge1xuICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuYWJvcnQocmVhc29uKVxuICB9XG5cbiAgLy8gMTMuIExldCBoaWdoV2F0ZXJNYXJrIGJlIGEgbm9uLW5lZ2F0aXZlLCBub24tTmFOIG51bWJlciwgY2hvc2VuIGJ5XG4gIC8vIHRoZSB1c2VyIGFnZW50LlxuICAvLyBUT0RPXG5cbiAgLy8gMTQuIExldCBzaXplQWxnb3JpdGhtIGJlIGFuIGFsZ29yaXRobSB0aGF0IGFjY2VwdHMgYSBjaHVuayBvYmplY3RcbiAgLy8gYW5kIHJldHVybnMgYSBub24tbmVnYXRpdmUsIG5vbi1OYU4sIG5vbi1pbmZpbml0ZSBudW1iZXIsIGNob3NlbiBieSB0aGUgdXNlciBhZ2VudC5cbiAgLy8gVE9ET1xuXG4gIC8vIDE1LiBMZXQgc3RyZWFtIGJlIGEgbmV3IFJlYWRhYmxlU3RyZWFtLlxuICAvLyAxNi4gU2V0IHVwIHN0cmVhbSB3aXRoIHB1bGxBbGdvcml0aG0gc2V0IHRvIHB1bGxBbGdvcml0aG0sXG4gIC8vIGNhbmNlbEFsZ29yaXRobSBzZXQgdG8gY2FuY2VsQWxnb3JpdGhtLCBoaWdoV2F0ZXJNYXJrIHNldCB0b1xuICAvLyBoaWdoV2F0ZXJNYXJrLCBhbmQgc2l6ZUFsZ29yaXRobSBzZXQgdG8gc2l6ZUFsZ29yaXRobS5cbiAgaWYgKCFSZWFkYWJsZVN0cmVhbSkge1xuICAgIFJlYWRhYmxlU3RyZWFtID0gcmVxdWlyZSgnc3RyZWFtL3dlYicpLlJlYWRhYmxlU3RyZWFtXG4gIH1cblxuICBjb25zdCBzdHJlYW0gPSBuZXcgUmVhZGFibGVTdHJlYW0oXG4gICAge1xuICAgICAgYXN5bmMgc3RhcnQgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyID0gY29udHJvbGxlclxuICAgICAgfSxcbiAgICAgIGFzeW5jIHB1bGwgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgYXdhaXQgcHVsbEFsZ29yaXRobShjb250cm9sbGVyKVxuICAgICAgfSxcbiAgICAgIGFzeW5jIGNhbmNlbCAocmVhc29uKSB7XG4gICAgICAgIGF3YWl0IGNhbmNlbEFsZ29yaXRobShyZWFzb24pXG4gICAgICB9XG4gICAgfSxcbiAgICB7XG4gICAgICBoaWdoV2F0ZXJNYXJrOiAwLFxuICAgICAgc2l6ZSAoKSB7XG4gICAgICAgIHJldHVybiAxXG4gICAgICB9XG4gICAgfVxuICApXG5cbiAgLy8gMTcuIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gdGhlIG9uZ29pbmcgZmV0Y2ggaXMgdGVybWluYXRlZDpcblxuICAvLyAgICAxLiBTZXQgcmVzcG9uc2VcdTIwMTlzIGJvZHkgdG8gYSBuZXcgYm9keSB3aG9zZSBzdHJlYW0gaXMgc3RyZWFtLlxuICByZXNwb25zZS5ib2R5ID0geyBzdHJlYW0gfVxuXG4gIC8vICAgIDIuIElmIHJlc3BvbnNlIGlzIG5vdCBhIG5ldHdvcmsgZXJyb3IgYW5kIHJlcXVlc3RcdTIwMTlzIGNhY2hlIG1vZGUgaXNcbiAgLy8gICAgbm90IFwibm8tc3RvcmVcIiwgdGhlbiB1cGRhdGUgcmVzcG9uc2UgaW4gaHR0cENhY2hlIGZvciByZXF1ZXN0LlxuICAvLyAgICBUT0RPXG5cbiAgLy8gICAgMy4gSWYgaW5jbHVkZUNyZWRlbnRpYWxzIGlzIHRydWUgYW5kIHRoZSB1c2VyIGFnZW50IGlzIG5vdCBjb25maWd1cmVkXG4gIC8vICAgIHRvIGJsb2NrIGNvb2tpZXMgZm9yIHJlcXVlc3QgKHNlZSBzZWN0aW9uIDcgb2YgW0NPT0tJRVNdKSwgdGhlbiBydW4gdGhlXG4gIC8vICAgIFwic2V0LWNvb2tpZS1zdHJpbmdcIiBwYXJzaW5nIGFsZ29yaXRobSAoc2VlIHNlY3Rpb24gNS4yIG9mIFtDT09LSUVTXSkgb25cbiAgLy8gICAgdGhlIHZhbHVlIG9mIGVhY2ggaGVhZGVyIHdob3NlIG5hbWUgaXMgYSBieXRlLWNhc2UtaW5zZW5zaXRpdmUgbWF0Y2ggZm9yXG4gIC8vICAgIGBTZXQtQ29va2llYCBpbiByZXNwb25zZVx1MjAxOXMgaGVhZGVyIGxpc3QsIGlmIGFueSwgYW5kIHJlcXVlc3RcdTIwMTlzIGN1cnJlbnQgVVJMLlxuICAvLyAgICBUT0RPXG5cbiAgLy8gMTguIElmIGFib3J0ZWQsIHRoZW46XG4gIC8vIFRPRE9cblxuICAvLyAxOS4gUnVuIHRoZXNlIHN0ZXBzIGluIHBhcmFsbGVsOlxuXG4gIC8vICAgIDEuIFJ1biB0aGVzZSBzdGVwcywgYnV0IGFib3J0IHdoZW4gZmV0Y2hQYXJhbXMgaXMgY2FuY2VsZWQ6XG4gIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIub24oJ3Rlcm1pbmF0ZWQnLCBvbkFib3J0ZWQpXG4gIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIucmVzdW1lID0gYXN5bmMgKCkgPT4ge1xuICAgIC8vIDEuIFdoaWxlIHRydWVcbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgLy8gMS0zLiBTZWUgb25EYXRhLi4uXG5cbiAgICAgIC8vIDQuIFNldCBieXRlcyB0byB0aGUgcmVzdWx0IG9mIGhhbmRsaW5nIGNvbnRlbnQgY29kaW5ncyBnaXZlblxuICAgICAgLy8gY29kaW5ncyBhbmQgYnl0ZXMuXG4gICAgICBsZXQgYnl0ZXNcbiAgICAgIGxldCBpc0ZhaWx1cmVcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHsgZG9uZSwgdmFsdWUgfSA9IGF3YWl0IGZldGNoUGFyYW1zLmNvbnRyb2xsZXIubmV4dCgpXG5cbiAgICAgICAgaWYgKGlzQWJvcnRlZChmZXRjaFBhcmFtcykpIHtcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG5cbiAgICAgICAgYnl0ZXMgPSBkb25lID8gdW5kZWZpbmVkIDogdmFsdWVcbiAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICBpZiAoZmV0Y2hQYXJhbXMuY29udHJvbGxlci5lbmRlZCAmJiAhdGltaW5nSW5mby5lbmNvZGVkQm9keVNpemUpIHtcbiAgICAgICAgICAvLyB6bGliIGRvZXNuJ3QgbGlrZSBlbXB0eSBzdHJlYW1zLlxuICAgICAgICAgIGJ5dGVzID0gdW5kZWZpbmVkXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgYnl0ZXMgPSBlcnJcblxuICAgICAgICAgIC8vIGVyciBtYXkgYmUgcHJvcGFnYXRlZCBmcm9tIHRoZSByZXN1bHQgb2YgY2FsbGluZyByZWFkYWJsZXN0cmVhbS5jYW5jZWwsXG4gICAgICAgICAgLy8gd2hpY2ggbWlnaHQgbm90IGJlIGFuIGVycm9yLiBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9pc3N1ZXMvMjAwOVxuICAgICAgICAgIGlzRmFpbHVyZSA9IHRydWVcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAoYnl0ZXMgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyAyLiBPdGhlcndpc2UsIGlmIHRoZSBieXRlcyB0cmFuc21pc3Npb24gZm9yIHJlc3BvbnNlXHUyMDE5cyBtZXNzYWdlXG4gICAgICAgIC8vIGJvZHkgaXMgZG9uZSBub3JtYWxseSBhbmQgc3RyZWFtIGlzIHJlYWRhYmxlLCB0aGVuIGNsb3NlXG4gICAgICAgIC8vIHN0cmVhbSwgZmluYWxpemUgcmVzcG9uc2UgZm9yIGZldGNoUGFyYW1zIGFuZCByZXNwb25zZSwgYW5kXG4gICAgICAgIC8vIGFib3J0IHRoZXNlIGluLXBhcmFsbGVsIHN0ZXBzLlxuICAgICAgICByZWFkYWJsZVN0cmVhbUNsb3NlKGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuY29udHJvbGxlcilcblxuICAgICAgICBmaW5hbGl6ZVJlc3BvbnNlKGZldGNoUGFyYW1zLCByZXNwb25zZSlcblxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gNS4gSW5jcmVhc2UgdGltaW5nSW5mb1x1MjAxOXMgZGVjb2RlZCBib2R5IHNpemUgYnkgYnl0ZXNcdTIwMTlzIGxlbmd0aC5cbiAgICAgIHRpbWluZ0luZm8uZGVjb2RlZEJvZHlTaXplICs9IGJ5dGVzPy5ieXRlTGVuZ3RoID8/IDBcblxuICAgICAgLy8gNi4gSWYgYnl0ZXMgaXMgZmFpbHVyZSwgdGhlbiB0ZXJtaW5hdGUgZmV0Y2hQYXJhbXNcdTIwMTlzIGNvbnRyb2xsZXIuXG4gICAgICBpZiAoaXNGYWlsdXJlKSB7XG4gICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIudGVybWluYXRlKGJ5dGVzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gNy4gRW5xdWV1ZSBhIFVpbnQ4QXJyYXkgd3JhcHBpbmcgYW4gQXJyYXlCdWZmZXIgY29udGFpbmluZyBieXRlc1xuICAgICAgLy8gaW50byBzdHJlYW0uXG4gICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIuZW5xdWV1ZShuZXcgVWludDhBcnJheShieXRlcykpXG5cbiAgICAgIC8vIDguIElmIHN0cmVhbSBpcyBlcnJvcmVkLCB0aGVuIHRlcm1pbmF0ZSB0aGUgb25nb2luZyBmZXRjaC5cbiAgICAgIGlmIChpc0Vycm9yZWQoc3RyZWFtKSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLnRlcm1pbmF0ZSgpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA5LiBJZiBzdHJlYW0gZG9lc25cdTIwMTl0IG5lZWQgbW9yZSBkYXRhIGFzayB0aGUgdXNlciBhZ2VudCB0byBzdXNwZW5kXG4gICAgICAvLyB0aGUgb25nb2luZyBmZXRjaC5cbiAgICAgIGlmICghZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyLmRlc2lyZWRTaXplKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8vICAgIDIuIElmIGFib3J0ZWQsIHRoZW46XG4gIGZ1bmN0aW9uIG9uQWJvcnRlZCAocmVhc29uKSB7XG4gICAgLy8gMi4gSWYgZmV0Y2hQYXJhbXMgaXMgYWJvcnRlZCwgdGhlbjpcbiAgICBpZiAoaXNBYm9ydGVkKGZldGNoUGFyYW1zKSkge1xuICAgICAgLy8gMS4gU2V0IHJlc3BvbnNlXHUyMDE5cyBhYm9ydGVkIGZsYWcuXG4gICAgICByZXNwb25zZS5hYm9ydGVkID0gdHJ1ZVxuXG4gICAgICAvLyAyLiBJZiBzdHJlYW0gaXMgcmVhZGFibGUsIHRoZW4gZXJyb3Igc3RyZWFtIHdpdGggdGhlIHJlc3VsdCBvZlxuICAgICAgLy8gICAgZGVzZXJpYWxpemUgYSBzZXJpYWxpemVkIGFib3J0IHJlYXNvbiBnaXZlbiBmZXRjaFBhcmFtc1x1MjAxOXNcbiAgICAgIC8vICAgIGNvbnRyb2xsZXJcdTIwMTlzIHNlcmlhbGl6ZWQgYWJvcnQgcmVhc29uIGFuZCBhblxuICAgICAgLy8gICAgaW1wbGVtZW50YXRpb24tZGVmaW5lZCByZWFsbS5cbiAgICAgIGlmIChpc1JlYWRhYmxlKHN0cmVhbSkpIHtcbiAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5jb250cm9sbGVyLmVycm9yKFxuICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIuc2VyaWFsaXplZEFib3J0UmVhc29uXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gMy4gT3RoZXJ3aXNlLCBpZiBzdHJlYW0gaXMgcmVhZGFibGUsIGVycm9yIHN0cmVhbSB3aXRoIGEgVHlwZUVycm9yLlxuICAgICAgaWYgKGlzUmVhZGFibGUoc3RyZWFtKSkge1xuICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbnRyb2xsZXIuZXJyb3IobmV3IFR5cGVFcnJvcigndGVybWluYXRlZCcsIHtcbiAgICAgICAgICBjYXVzZTogaXNFcnJvckxpa2UocmVhc29uKSA/IHJlYXNvbiA6IHVuZGVmaW5lZFxuICAgICAgICB9KSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LiBJZiBjb25uZWN0aW9uIHVzZXMgSFRUUC8yLCB0aGVuIHRyYW5zbWl0IGFuIFJTVF9TVFJFQU0gZnJhbWUuXG4gICAgLy8gNS4gT3RoZXJ3aXNlLCB0aGUgdXNlciBhZ2VudCBzaG91bGQgY2xvc2UgY29ubmVjdGlvbiB1bmxlc3MgaXQgd291bGQgYmUgYmFkIGZvciBwZXJmb3JtYW5jZSB0byBkbyBzby5cbiAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLmNvbm5lY3Rpb24uZGVzdHJveSgpXG4gIH1cblxuICAvLyAyMC4gUmV0dXJuIHJlc3BvbnNlLlxuICByZXR1cm4gcmVzcG9uc2VcblxuICBhc3luYyBmdW5jdGlvbiBkaXNwYXRjaCAoeyBib2R5IH0pIHtcbiAgICBjb25zdCB1cmwgPSByZXF1ZXN0Q3VycmVudFVSTChyZXF1ZXN0KVxuICAgIC8qKiBAdHlwZSB7aW1wb3J0KCcuLi8uLicpLkFnZW50fSAqL1xuICAgIGNvbnN0IGFnZW50ID0gZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kaXNwYXRjaGVyXG5cbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4gYWdlbnQuZGlzcGF0Y2goXG4gICAgICB7XG4gICAgICAgIHBhdGg6IHVybC5wYXRobmFtZSArIHVybC5zZWFyY2gsXG4gICAgICAgIG9yaWdpbjogdXJsLm9yaWdpbixcbiAgICAgICAgbWV0aG9kOiByZXF1ZXN0Lm1ldGhvZCxcbiAgICAgICAgYm9keTogZmV0Y2hQYXJhbXMuY29udHJvbGxlci5kaXNwYXRjaGVyLmlzTW9ja0FjdGl2ZSA/IHJlcXVlc3QuYm9keSAmJiAocmVxdWVzdC5ib2R5LnNvdXJjZSB8fCByZXF1ZXN0LmJvZHkuc3RyZWFtKSA6IGJvZHksXG4gICAgICAgIGhlYWRlcnM6IHJlcXVlc3QuaGVhZGVyc0xpc3QuZW50cmllcyxcbiAgICAgICAgbWF4UmVkaXJlY3Rpb25zOiAwLFxuICAgICAgICB1cGdyYWRlOiByZXF1ZXN0Lm1vZGUgPT09ICd3ZWJzb2NrZXQnID8gJ3dlYnNvY2tldCcgOiB1bmRlZmluZWRcbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIGJvZHk6IG51bGwsXG4gICAgICAgIGFib3J0OiBudWxsLFxuXG4gICAgICAgIG9uQ29ubmVjdCAoYWJvcnQpIHtcbiAgICAgICAgICAvLyBUT0RPIChmaXgpOiBEbyB3ZSBuZWVkIGNvbm5lY3Rpb24gaGVyZT9cbiAgICAgICAgICBjb25zdCB7IGNvbm5lY3Rpb24gfSA9IGZldGNoUGFyYW1zLmNvbnRyb2xsZXJcblxuICAgICAgICAgIGlmIChjb25uZWN0aW9uLmRlc3Ryb3llZCkge1xuICAgICAgICAgICAgYWJvcnQobmV3IERPTUV4Y2VwdGlvbignVGhlIG9wZXJhdGlvbiB3YXMgYWJvcnRlZC4nLCAnQWJvcnRFcnJvcicpKVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9uKCd0ZXJtaW5hdGVkJywgYWJvcnQpXG4gICAgICAgICAgICB0aGlzLmFib3J0ID0gY29ubmVjdGlvbi5hYm9ydCA9IGFib3J0XG4gICAgICAgICAgfVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uSGVhZGVycyAoc3RhdHVzLCBoZWFkZXJzTGlzdCwgcmVzdW1lLCBzdGF0dXNUZXh0KSB7XG4gICAgICAgICAgaWYgKHN0YXR1cyA8IDIwMCkge1xuICAgICAgICAgICAgcmV0dXJuXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgbGV0IGNvZGluZ3MgPSBbXVxuICAgICAgICAgIGxldCBsb2NhdGlvbiA9ICcnXG5cbiAgICAgICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuXG4gICAgICAgICAgLy8gRm9yIEgyLCB0aGUgaGVhZGVycyBhcmUgYSBwbGFpbiBKUyBvYmplY3RcbiAgICAgICAgICAvLyBXZSBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZW0gYW5kIGl0ZXJhdGUgYWNjb3JkaW5nbHlcbiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShoZWFkZXJzTGlzdCkpIHtcbiAgICAgICAgICAgIGZvciAobGV0IG4gPSAwOyBuIDwgaGVhZGVyc0xpc3QubGVuZ3RoOyBuICs9IDIpIHtcbiAgICAgICAgICAgICAgY29uc3Qga2V5ID0gaGVhZGVyc0xpc3RbbiArIDBdLnRvU3RyaW5nKCdsYXRpbjEnKVxuICAgICAgICAgICAgICBjb25zdCB2YWwgPSBoZWFkZXJzTGlzdFtuICsgMV0udG9TdHJpbmcoJ2xhdGluMScpXG4gICAgICAgICAgICAgIGlmIChrZXkudG9Mb3dlckNhc2UoKSA9PT0gJ2NvbnRlbnQtZW5jb2RpbmcnKSB7XG4gICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzcyMzEjc2VjdGlvbi0zLjEuMi4xXG4gICAgICAgICAgICAgICAgLy8gXCJBbGwgY29udGVudC1jb2RpbmcgdmFsdWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlLi4uXCJcbiAgICAgICAgICAgICAgICBjb2RpbmdzID0gdmFsLnRvTG93ZXJDYXNlKCkuc3BsaXQoJywnKS5tYXAoKHgpID0+IHgudHJpbSgpKVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGtleS50b0xvd2VyQ2FzZSgpID09PSAnbG9jYXRpb24nKSB7XG4gICAgICAgICAgICAgICAgbG9jYXRpb24gPSB2YWxcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGhlYWRlcnNba0hlYWRlcnNMaXN0XS5hcHBlbmQoa2V5LCB2YWwpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhoZWFkZXJzTGlzdClcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIGtleXMpIHtcbiAgICAgICAgICAgICAgY29uc3QgdmFsID0gaGVhZGVyc0xpc3Rba2V5XVxuICAgICAgICAgICAgICBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09ICdjb250ZW50LWVuY29kaW5nJykge1xuICAgICAgICAgICAgICAgIC8vIGh0dHBzOi8vd3d3LnJmYy1lZGl0b3Iub3JnL3JmYy9yZmM3MjMxI3NlY3Rpb24tMy4xLjIuMVxuICAgICAgICAgICAgICAgIC8vIFwiQWxsIGNvbnRlbnQtY29kaW5nIHZhbHVlcyBhcmUgY2FzZS1pbnNlbnNpdGl2ZS4uLlwiXG4gICAgICAgICAgICAgICAgY29kaW5ncyA9IHZhbC50b0xvd2VyQ2FzZSgpLnNwbGl0KCcsJykubWFwKCh4KSA9PiB4LnRyaW0oKSkucmV2ZXJzZSgpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoa2V5LnRvTG93ZXJDYXNlKCkgPT09ICdsb2NhdGlvbicpIHtcbiAgICAgICAgICAgICAgICBsb2NhdGlvbiA9IHZhbFxuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgaGVhZGVyc1trSGVhZGVyc0xpc3RdLmFwcGVuZChrZXksIHZhbClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB0aGlzLmJvZHkgPSBuZXcgUmVhZGFibGUoeyByZWFkOiByZXN1bWUgfSlcblxuICAgICAgICAgIGNvbnN0IGRlY29kZXJzID0gW11cblxuICAgICAgICAgIGNvbnN0IHdpbGxGb2xsb3cgPSByZXF1ZXN0LnJlZGlyZWN0ID09PSAnZm9sbG93JyAmJlxuICAgICAgICAgICAgbG9jYXRpb24gJiZcbiAgICAgICAgICAgIHJlZGlyZWN0U3RhdHVzU2V0LmhhcyhzdGF0dXMpXG5cbiAgICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9IVFRQL0hlYWRlcnMvQ29udGVudC1FbmNvZGluZ1xuICAgICAgICAgIGlmIChyZXF1ZXN0Lm1ldGhvZCAhPT0gJ0hFQUQnICYmIHJlcXVlc3QubWV0aG9kICE9PSAnQ09OTkVDVCcgJiYgIW51bGxCb2R5U3RhdHVzLmluY2x1ZGVzKHN0YXR1cykgJiYgIXdpbGxGb2xsb3cpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29kaW5nIG9mIGNvZGluZ3MpIHtcbiAgICAgICAgICAgICAgLy8gaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzkxMTIuaHRtbCNzZWN0aW9uLTcuMlxuICAgICAgICAgICAgICBpZiAoY29kaW5nID09PSAneC1nemlwJyB8fCBjb2RpbmcgPT09ICdnemlwJykge1xuICAgICAgICAgICAgICAgIGRlY29kZXJzLnB1c2goemxpYi5jcmVhdGVHdW56aXAoe1xuICAgICAgICAgICAgICAgICAgLy8gQmUgbGVzcyBzdHJpY3Qgd2hlbiBkZWNvZGluZyBjb21wcmVzc2VkIHJlc3BvbnNlcywgc2luY2Ugc29tZXRpbWVzXG4gICAgICAgICAgICAgICAgICAvLyBzZXJ2ZXJzIHNlbmQgc2xpZ2h0bHkgaW52YWxpZCByZXNwb25zZXMgdGhhdCBhcmUgc3RpbGwgYWNjZXB0ZWRcbiAgICAgICAgICAgICAgICAgIC8vIGJ5IGNvbW1vbiBicm93c2Vycy5cbiAgICAgICAgICAgICAgICAgIC8vIEFsd2F5cyB1c2luZyBaX1NZTkNfRkxVU0ggaXMgd2hhdCBjVVJMIGRvZXMuXG4gICAgICAgICAgICAgICAgICBmbHVzaDogemxpYi5jb25zdGFudHMuWl9TWU5DX0ZMVVNILFxuICAgICAgICAgICAgICAgICAgZmluaXNoRmx1c2g6IHpsaWIuY29uc3RhbnRzLlpfU1lOQ19GTFVTSFxuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvZGluZyA9PT0gJ2RlZmxhdGUnKSB7XG4gICAgICAgICAgICAgICAgZGVjb2RlcnMucHVzaCh6bGliLmNyZWF0ZUluZmxhdGUoKSlcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChjb2RpbmcgPT09ICdicicpIHtcbiAgICAgICAgICAgICAgICBkZWNvZGVycy5wdXNoKHpsaWIuY3JlYXRlQnJvdGxpRGVjb21wcmVzcygpKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGRlY29kZXJzLmxlbmd0aCA9IDBcbiAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmVzb2x2ZSh7XG4gICAgICAgICAgICBzdGF0dXMsXG4gICAgICAgICAgICBzdGF0dXNUZXh0LFxuICAgICAgICAgICAgaGVhZGVyc0xpc3Q6IGhlYWRlcnNba0hlYWRlcnNMaXN0XSxcbiAgICAgICAgICAgIGJvZHk6IGRlY29kZXJzLmxlbmd0aFxuICAgICAgICAgICAgICA/IHBpcGVsaW5lKHRoaXMuYm9keSwgLi4uZGVjb2RlcnMsICgpID0+IHsgfSlcbiAgICAgICAgICAgICAgOiB0aGlzLmJvZHkub24oJ2Vycm9yJywgKCkgPT4ge30pXG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH0sXG5cbiAgICAgICAgb25EYXRhIChjaHVuaykge1xuICAgICAgICAgIGlmIChmZXRjaFBhcmFtcy5jb250cm9sbGVyLmR1bXApIHtcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDEuIElmIG9uZSBvciBtb3JlIGJ5dGVzIGhhdmUgYmVlbiB0cmFuc21pdHRlZCBmcm9tIHJlc3BvbnNlXHUyMDE5c1xuICAgICAgICAgIC8vIG1lc3NhZ2UgYm9keSwgdGhlbjpcblxuICAgICAgICAgIC8vICAxLiBMZXQgYnl0ZXMgYmUgdGhlIHRyYW5zbWl0dGVkIGJ5dGVzLlxuICAgICAgICAgIGNvbnN0IGJ5dGVzID0gY2h1bmtcblxuICAgICAgICAgIC8vICAyLiBMZXQgY29kaW5ncyBiZSB0aGUgcmVzdWx0IG9mIGV4dHJhY3RpbmcgaGVhZGVyIGxpc3QgdmFsdWVzXG4gICAgICAgICAgLy8gIGdpdmVuIGBDb250ZW50LUVuY29kaW5nYCBhbmQgcmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAgICAgICAgIC8vICBTZWUgcHVsbEFsZ29yaXRobS5cblxuICAgICAgICAgIC8vICAzLiBJbmNyZWFzZSB0aW1pbmdJbmZvXHUyMDE5cyBlbmNvZGVkIGJvZHkgc2l6ZSBieSBieXRlc1x1MjAxOXMgbGVuZ3RoLlxuICAgICAgICAgIHRpbWluZ0luZm8uZW5jb2RlZEJvZHlTaXplICs9IGJ5dGVzLmJ5dGVMZW5ndGhcblxuICAgICAgICAgIC8vICA0LiBTZWUgcHVsbEFsZ29yaXRobS4uLlxuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuYm9keS5wdXNoKGJ5dGVzKVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uQ29tcGxldGUgKCkge1xuICAgICAgICAgIGlmICh0aGlzLmFib3J0KSB7XG4gICAgICAgICAgICBmZXRjaFBhcmFtcy5jb250cm9sbGVyLm9mZigndGVybWluYXRlZCcsIHRoaXMuYWJvcnQpXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5lbmRlZCA9IHRydWVcblxuICAgICAgICAgIHRoaXMuYm9keS5wdXNoKG51bGwpXG4gICAgICAgIH0sXG5cbiAgICAgICAgb25FcnJvciAoZXJyb3IpIHtcbiAgICAgICAgICBpZiAodGhpcy5hYm9ydCkge1xuICAgICAgICAgICAgZmV0Y2hQYXJhbXMuY29udHJvbGxlci5vZmYoJ3Rlcm1pbmF0ZWQnLCB0aGlzLmFib3J0KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuYm9keT8uZGVzdHJveShlcnJvcilcblxuICAgICAgICAgIGZldGNoUGFyYW1zLmNvbnRyb2xsZXIudGVybWluYXRlKGVycm9yKVxuXG4gICAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICB9LFxuXG4gICAgICAgIG9uVXBncmFkZSAoc3RhdHVzLCBoZWFkZXJzTGlzdCwgc29ja2V0KSB7XG4gICAgICAgICAgaWYgKHN0YXR1cyAhPT0gMTAxKSB7XG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICBjb25zdCBoZWFkZXJzID0gbmV3IEhlYWRlcnMoKVxuXG4gICAgICAgICAgZm9yIChsZXQgbiA9IDA7IG4gPCBoZWFkZXJzTGlzdC5sZW5ndGg7IG4gKz0gMikge1xuICAgICAgICAgICAgY29uc3Qga2V5ID0gaGVhZGVyc0xpc3RbbiArIDBdLnRvU3RyaW5nKCdsYXRpbjEnKVxuICAgICAgICAgICAgY29uc3QgdmFsID0gaGVhZGVyc0xpc3RbbiArIDFdLnRvU3RyaW5nKCdsYXRpbjEnKVxuXG4gICAgICAgICAgICBoZWFkZXJzW2tIZWFkZXJzTGlzdF0uYXBwZW5kKGtleSwgdmFsKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJlc29sdmUoe1xuICAgICAgICAgICAgc3RhdHVzLFxuICAgICAgICAgICAgc3RhdHVzVGV4dDogU1RBVFVTX0NPREVTW3N0YXR1c10sXG4gICAgICAgICAgICBoZWFkZXJzTGlzdDogaGVhZGVyc1trSGVhZGVyc0xpc3RdLFxuICAgICAgICAgICAgc29ja2V0XG4gICAgICAgICAgfSlcblxuICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApKVxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBmZXRjaCxcbiAgRmV0Y2gsXG4gIGZldGNoaW5nLFxuICBmaW5hbGl6ZUFuZFJlcG9ydFRpbWluZ1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga1N0YXRlOiBTeW1ib2woJ0ZpbGVSZWFkZXIgc3RhdGUnKSxcbiAga1Jlc3VsdDogU3ltYm9sKCdGaWxlUmVhZGVyIHJlc3VsdCcpLFxuICBrRXJyb3I6IFN5bWJvbCgnRmlsZVJlYWRlciBlcnJvcicpLFxuICBrTGFzdFByb2dyZXNzRXZlbnRGaXJlZDogU3ltYm9sKCdGaWxlUmVhZGVyIGxhc3QgcHJvZ3Jlc3MgZXZlbnQgZmlyZWQgdGltZXN0YW1wJyksXG4gIGtFdmVudHM6IFN5bWJvbCgnRmlsZVJlYWRlciBldmVudHMnKSxcbiAga0Fib3J0ZWQ6IFN5bWJvbCgnRmlsZVJlYWRlciBhYm9ydGVkJylcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5cbmNvbnN0IGtTdGF0ZSA9IFN5bWJvbCgnUHJvZ3Jlc3NFdmVudCBzdGF0ZScpXG5cbi8qKlxuICogQHNlZSBodHRwczovL3hoci5zcGVjLndoYXR3Zy5vcmcvI3Byb2dyZXNzZXZlbnRcbiAqL1xuY2xhc3MgUHJvZ3Jlc3NFdmVudCBleHRlbmRzIEV2ZW50IHtcbiAgY29uc3RydWN0b3IgKHR5cGUsIGV2ZW50SW5pdERpY3QgPSB7fSkge1xuICAgIHR5cGUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcodHlwZSlcbiAgICBldmVudEluaXREaWN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUHJvZ3Jlc3NFdmVudEluaXQoZXZlbnRJbml0RGljdCA/PyB7fSlcblxuICAgIHN1cGVyKHR5cGUsIGV2ZW50SW5pdERpY3QpXG5cbiAgICB0aGlzW2tTdGF0ZV0gPSB7XG4gICAgICBsZW5ndGhDb21wdXRhYmxlOiBldmVudEluaXREaWN0Lmxlbmd0aENvbXB1dGFibGUsXG4gICAgICBsb2FkZWQ6IGV2ZW50SW5pdERpY3QubG9hZGVkLFxuICAgICAgdG90YWw6IGV2ZW50SW5pdERpY3QudG90YWxcbiAgICB9XG4gIH1cblxuICBnZXQgbGVuZ3RoQ29tcHV0YWJsZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUHJvZ3Jlc3NFdmVudClcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubGVuZ3RoQ29tcHV0YWJsZVxuICB9XG5cbiAgZ2V0IGxvYWRlZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgUHJvZ3Jlc3NFdmVudClcblxuICAgIHJldHVybiB0aGlzW2tTdGF0ZV0ubG9hZGVkXG4gIH1cblxuICBnZXQgdG90YWwgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFByb2dyZXNzRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpc1trU3RhdGVdLnRvdGFsXG4gIH1cbn1cblxud2ViaWRsLmNvbnZlcnRlcnMuUHJvZ3Jlc3NFdmVudEluaXQgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBrZXk6ICdsZW5ndGhDb21wdXRhYmxlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnbG9hZGVkJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nIGxvbmcnXSxcbiAgICBkZWZhdWx0VmFsdWU6IDBcbiAgfSxcbiAge1xuICAgIGtleTogJ3RvdGFsJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nIGxvbmcnXSxcbiAgICBkZWZhdWx0VmFsdWU6IDBcbiAgfSxcbiAge1xuICAgIGtleTogJ2J1YmJsZXMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjYW5jZWxhYmxlJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4sXG4gICAgZGVmYXVsdFZhbHVlOiBmYWxzZVxuICB9LFxuICB7XG4gICAga2V5OiAnY29tcG9zZWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBQcm9ncmVzc0V2ZW50XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbi8qKlxuICogQHNlZSBodHRwczovL2VuY29kaW5nLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1lbmNvZGluZy1nZXRcbiAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gbGFiZWxcbiAqL1xuZnVuY3Rpb24gZ2V0RW5jb2RpbmcgKGxhYmVsKSB7XG4gIGlmICghbGFiZWwpIHtcbiAgICByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cblxuICAvLyAxLiBSZW1vdmUgYW55IGxlYWRpbmcgYW5kIHRyYWlsaW5nIEFTQ0lJIHdoaXRlc3BhY2UgZnJvbSBsYWJlbC5cbiAgLy8gMi4gSWYgbGFiZWwgaXMgYW4gQVNDSUkgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3IgYW55IG9mIHRoZVxuICAvLyAgICBsYWJlbHMgbGlzdGVkIGluIHRoZSB0YWJsZSBiZWxvdywgdGhlbiByZXR1cm4gdGhlXG4gIC8vICAgIGNvcnJlc3BvbmRpbmcgZW5jb2Rpbmc7IG90aGVyd2lzZSByZXR1cm4gZmFpbHVyZS5cbiAgc3dpdGNoIChsYWJlbC50cmltKCkudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ3VuaWNvZGUtMS0xLXV0Zi04JzpcbiAgICBjYXNlICd1bmljb2RlMTF1dGY4JzpcbiAgICBjYXNlICd1bmljb2RlMjB1dGY4JzpcbiAgICBjYXNlICd1dGYtOCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAneC11bmljb2RlMjB1dGY4JzpcbiAgICAgIHJldHVybiAnVVRGLTgnXG4gICAgY2FzZSAnODY2JzpcbiAgICBjYXNlICdjcDg2Nic6XG4gICAgY2FzZSAnY3NpYm04NjYnOlxuICAgIGNhc2UgJ2libTg2Nic6XG4gICAgICByZXR1cm4gJ0lCTTg2NidcbiAgICBjYXNlICdjc2lzb2xhdGluMic6XG4gICAgY2FzZSAnaXNvLTg4NTktMic6XG4gICAgY2FzZSAnaXNvLWlyLTEwMSc6XG4gICAgY2FzZSAnaXNvODg1OS0yJzpcbiAgICBjYXNlICdpc284ODU5Mic6XG4gICAgY2FzZSAnaXNvXzg4NTktMic6XG4gICAgY2FzZSAnaXNvXzg4NTktMjoxOTg3JzpcbiAgICBjYXNlICdsMic6XG4gICAgY2FzZSAnbGF0aW4yJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMidcbiAgICBjYXNlICdjc2lzb2xhdGluMyc6XG4gICAgY2FzZSAnaXNvLTg4NTktMyc6XG4gICAgY2FzZSAnaXNvLWlyLTEwOSc6XG4gICAgY2FzZSAnaXNvODg1OS0zJzpcbiAgICBjYXNlICdpc284ODU5Myc6XG4gICAgY2FzZSAnaXNvXzg4NTktMyc6XG4gICAgY2FzZSAnaXNvXzg4NTktMzoxOTg4JzpcbiAgICBjYXNlICdsMyc6XG4gICAgY2FzZSAnbGF0aW4zJzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMydcbiAgICBjYXNlICdjc2lzb2xhdGluNCc6XG4gICAgY2FzZSAnaXNvLTg4NTktNCc6XG4gICAgY2FzZSAnaXNvLWlyLTExMCc6XG4gICAgY2FzZSAnaXNvODg1OS00JzpcbiAgICBjYXNlICdpc284ODU5NCc6XG4gICAgY2FzZSAnaXNvXzg4NTktNCc6XG4gICAgY2FzZSAnaXNvXzg4NTktNDoxOTg4JzpcbiAgICBjYXNlICdsNCc6XG4gICAgY2FzZSAnbGF0aW40JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktNCdcbiAgICBjYXNlICdjc2lzb2xhdGluY3lyaWxsaWMnOlxuICAgIGNhc2UgJ2N5cmlsbGljJzpcbiAgICBjYXNlICdpc28tODg1OS01JzpcbiAgICBjYXNlICdpc28taXItMTQ0JzpcbiAgICBjYXNlICdpc284ODU5LTUnOlxuICAgIGNhc2UgJ2lzbzg4NTk1JzpcbiAgICBjYXNlICdpc29fODg1OS01JzpcbiAgICBjYXNlICdpc29fODg1OS01OjE5ODgnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS01J1xuICAgIGNhc2UgJ2FyYWJpYyc6XG4gICAgY2FzZSAnYXNtby03MDgnOlxuICAgIGNhc2UgJ2NzaXNvODg1OTZlJzpcbiAgICBjYXNlICdjc2lzbzg4NTk2aSc6XG4gICAgY2FzZSAnY3Npc29sYXRpbmFyYWJpYyc6XG4gICAgY2FzZSAnZWNtYS0xMTQnOlxuICAgIGNhc2UgJ2lzby04ODU5LTYnOlxuICAgIGNhc2UgJ2lzby04ODU5LTYtZSc6XG4gICAgY2FzZSAnaXNvLTg4NTktNi1pJzpcbiAgICBjYXNlICdpc28taXItMTI3JzpcbiAgICBjYXNlICdpc284ODU5LTYnOlxuICAgIGNhc2UgJ2lzbzg4NTk2JzpcbiAgICBjYXNlICdpc29fODg1OS02JzpcbiAgICBjYXNlICdpc29fODg1OS02OjE5ODcnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS02J1xuICAgIGNhc2UgJ2NzaXNvbGF0aW5ncmVlayc6XG4gICAgY2FzZSAnZWNtYS0xMTgnOlxuICAgIGNhc2UgJ2Vsb3RfOTI4JzpcbiAgICBjYXNlICdncmVlayc6XG4gICAgY2FzZSAnZ3JlZWs4JzpcbiAgICBjYXNlICdpc28tODg1OS03JzpcbiAgICBjYXNlICdpc28taXItMTI2JzpcbiAgICBjYXNlICdpc284ODU5LTcnOlxuICAgIGNhc2UgJ2lzbzg4NTk3JzpcbiAgICBjYXNlICdpc29fODg1OS03JzpcbiAgICBjYXNlICdpc29fODg1OS03OjE5ODcnOlxuICAgIGNhc2UgJ3N1bl9ldV9ncmVlayc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTcnXG4gICAgY2FzZSAnY3Npc284ODU5OGUnOlxuICAgIGNhc2UgJ2NzaXNvbGF0aW5oZWJyZXcnOlxuICAgIGNhc2UgJ2hlYnJldyc6XG4gICAgY2FzZSAnaXNvLTg4NTktOCc6XG4gICAgY2FzZSAnaXNvLTg4NTktOC1lJzpcbiAgICBjYXNlICdpc28taXItMTM4JzpcbiAgICBjYXNlICdpc284ODU5LTgnOlxuICAgIGNhc2UgJ2lzbzg4NTk4JzpcbiAgICBjYXNlICdpc29fODg1OS04JzpcbiAgICBjYXNlICdpc29fODg1OS04OjE5ODgnOlxuICAgIGNhc2UgJ3Zpc3VhbCc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTgnXG4gICAgY2FzZSAnY3Npc284ODU5OGknOlxuICAgIGNhc2UgJ2lzby04ODU5LTgtaSc6XG4gICAgY2FzZSAnbG9naWNhbCc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTgtSSdcbiAgICBjYXNlICdjc2lzb2xhdGluNic6XG4gICAgY2FzZSAnaXNvLTg4NTktMTAnOlxuICAgIGNhc2UgJ2lzby1pci0xNTcnOlxuICAgIGNhc2UgJ2lzbzg4NTktMTAnOlxuICAgIGNhc2UgJ2lzbzg4NTkxMCc6XG4gICAgY2FzZSAnbDYnOlxuICAgIGNhc2UgJ2xhdGluNic6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTEwJ1xuICAgIGNhc2UgJ2lzby04ODU5LTEzJzpcbiAgICBjYXNlICdpc284ODU5LTEzJzpcbiAgICBjYXNlICdpc284ODU5MTMnOlxuICAgICAgcmV0dXJuICdJU08tODg1OS0xMydcbiAgICBjYXNlICdpc28tODg1OS0xNCc6XG4gICAgY2FzZSAnaXNvODg1OS0xNCc6XG4gICAgY2FzZSAnaXNvODg1OTE0JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTQnXG4gICAgY2FzZSAnY3Npc29sYXRpbjknOlxuICAgIGNhc2UgJ2lzby04ODU5LTE1JzpcbiAgICBjYXNlICdpc284ODU5LTE1JzpcbiAgICBjYXNlICdpc284ODU5MTUnOlxuICAgIGNhc2UgJ2lzb184ODU5LTE1JzpcbiAgICBjYXNlICdsOSc6XG4gICAgICByZXR1cm4gJ0lTTy04ODU5LTE1J1xuICAgIGNhc2UgJ2lzby04ODU5LTE2JzpcbiAgICAgIHJldHVybiAnSVNPLTg4NTktMTYnXG4gICAgY2FzZSAnY3Nrb2k4cic6XG4gICAgY2FzZSAna29pJzpcbiAgICBjYXNlICdrb2k4JzpcbiAgICBjYXNlICdrb2k4LXInOlxuICAgIGNhc2UgJ2tvaThfcic6XG4gICAgICByZXR1cm4gJ0tPSTgtUidcbiAgICBjYXNlICdrb2k4LXJ1JzpcbiAgICBjYXNlICdrb2k4LXUnOlxuICAgICAgcmV0dXJuICdLT0k4LVUnXG4gICAgY2FzZSAnY3NtYWNpbnRvc2gnOlxuICAgIGNhc2UgJ21hYyc6XG4gICAgY2FzZSAnbWFjaW50b3NoJzpcbiAgICBjYXNlICd4LW1hYy1yb21hbic6XG4gICAgICByZXR1cm4gJ21hY2ludG9zaCdcbiAgICBjYXNlICdpc28tODg1OS0xMSc6XG4gICAgY2FzZSAnaXNvODg1OS0xMSc6XG4gICAgY2FzZSAnaXNvODg1OTExJzpcbiAgICBjYXNlICd0aXMtNjIwJzpcbiAgICBjYXNlICd3aW5kb3dzLTg3NCc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtODc0J1xuICAgIGNhc2UgJ2NwMTI1MCc6XG4gICAgY2FzZSAnd2luZG93cy0xMjUwJzpcbiAgICBjYXNlICd4LWNwMTI1MCc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1MCdcbiAgICBjYXNlICdjcDEyNTEnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1MSc6XG4gICAgY2FzZSAneC1jcDEyNTEnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTEnXG4gICAgY2FzZSAnYW5zaV94My40LTE5NjgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdjcDEyNTInOlxuICAgIGNhc2UgJ2NwODE5JzpcbiAgICBjYXNlICdjc2lzb2xhdGluMSc6XG4gICAgY2FzZSAnaWJtODE5JzpcbiAgICBjYXNlICdpc28tODg1OS0xJzpcbiAgICBjYXNlICdpc28taXItMTAwJzpcbiAgICBjYXNlICdpc284ODU5LTEnOlxuICAgIGNhc2UgJ2lzbzg4NTkxJzpcbiAgICBjYXNlICdpc29fODg1OS0xJzpcbiAgICBjYXNlICdpc29fODg1OS0xOjE5ODcnOlxuICAgIGNhc2UgJ2wxJzpcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ3VzLWFzY2lpJzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTInOlxuICAgIGNhc2UgJ3gtY3AxMjUyJzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjUyJ1xuICAgIGNhc2UgJ2NwMTI1Myc6XG4gICAgY2FzZSAnd2luZG93cy0xMjUzJzpcbiAgICBjYXNlICd4LWNwMTI1Myc6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1MydcbiAgICBjYXNlICdjcDEyNTQnOlxuICAgIGNhc2UgJ2NzaXNvbGF0aW41JzpcbiAgICBjYXNlICdpc28tODg1OS05JzpcbiAgICBjYXNlICdpc28taXItMTQ4JzpcbiAgICBjYXNlICdpc284ODU5LTknOlxuICAgIGNhc2UgJ2lzbzg4NTk5JzpcbiAgICBjYXNlICdpc29fODg1OS05JzpcbiAgICBjYXNlICdpc29fODg1OS05OjE5ODknOlxuICAgIGNhc2UgJ2w1JzpcbiAgICBjYXNlICdsYXRpbjUnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1NCc6XG4gICAgY2FzZSAneC1jcDEyNTQnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTQnXG4gICAgY2FzZSAnY3AxMjU1JzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTUnOlxuICAgIGNhc2UgJ3gtY3AxMjU1JzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjU1J1xuICAgIGNhc2UgJ2NwMTI1Nic6XG4gICAgY2FzZSAnd2luZG93cy0xMjU2JzpcbiAgICBjYXNlICd4LWNwMTI1Nic6XG4gICAgICByZXR1cm4gJ3dpbmRvd3MtMTI1NidcbiAgICBjYXNlICdjcDEyNTcnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMTI1Nyc6XG4gICAgY2FzZSAneC1jcDEyNTcnOlxuICAgICAgcmV0dXJuICd3aW5kb3dzLTEyNTcnXG4gICAgY2FzZSAnY3AxMjU4JzpcbiAgICBjYXNlICd3aW5kb3dzLTEyNTgnOlxuICAgIGNhc2UgJ3gtY3AxMjU4JzpcbiAgICAgIHJldHVybiAnd2luZG93cy0xMjU4J1xuICAgIGNhc2UgJ3gtbWFjLWN5cmlsbGljJzpcbiAgICBjYXNlICd4LW1hYy11a3JhaW5pYW4nOlxuICAgICAgcmV0dXJuICd4LW1hYy1jeXJpbGxpYydcbiAgICBjYXNlICdjaGluZXNlJzpcbiAgICBjYXNlICdjc2diMjMxMic6XG4gICAgY2FzZSAnY3Npc281OGdiMjMxMjgwJzpcbiAgICBjYXNlICdnYjIzMTInOlxuICAgIGNhc2UgJ2diXzIzMTInOlxuICAgIGNhc2UgJ2diXzIzMTItODAnOlxuICAgIGNhc2UgJ2diayc6XG4gICAgY2FzZSAnaXNvLWlyLTU4JzpcbiAgICBjYXNlICd4LWdiayc6XG4gICAgICByZXR1cm4gJ0dCSydcbiAgICBjYXNlICdnYjE4MDMwJzpcbiAgICAgIHJldHVybiAnZ2IxODAzMCdcbiAgICBjYXNlICdiaWc1JzpcbiAgICBjYXNlICdiaWc1LWhrc2NzJzpcbiAgICBjYXNlICdjbi1iaWc1JzpcbiAgICBjYXNlICdjc2JpZzUnOlxuICAgIGNhc2UgJ3gteC1iaWc1JzpcbiAgICAgIHJldHVybiAnQmlnNSdcbiAgICBjYXNlICdjc2V1Y3BrZGZtdGphcGFuZXNlJzpcbiAgICBjYXNlICdldWMtanAnOlxuICAgIGNhc2UgJ3gtZXVjLWpwJzpcbiAgICAgIHJldHVybiAnRVVDLUpQJ1xuICAgIGNhc2UgJ2NzaXNvMjAyMmpwJzpcbiAgICBjYXNlICdpc28tMjAyMi1qcCc6XG4gICAgICByZXR1cm4gJ0lTTy0yMDIyLUpQJ1xuICAgIGNhc2UgJ2Nzc2hpZnRqaXMnOlxuICAgIGNhc2UgJ21zOTMyJzpcbiAgICBjYXNlICdtc19rYW5qaSc6XG4gICAgY2FzZSAnc2hpZnQtamlzJzpcbiAgICBjYXNlICdzaGlmdF9qaXMnOlxuICAgIGNhc2UgJ3NqaXMnOlxuICAgIGNhc2UgJ3dpbmRvd3MtMzFqJzpcbiAgICBjYXNlICd4LXNqaXMnOlxuICAgICAgcmV0dXJuICdTaGlmdF9KSVMnXG4gICAgY2FzZSAnY3NldWNrcic6XG4gICAgY2FzZSAnY3Nrc2M1NjAxMTk4Nyc6XG4gICAgY2FzZSAnZXVjLWtyJzpcbiAgICBjYXNlICdpc28taXItMTQ5JzpcbiAgICBjYXNlICdrb3JlYW4nOlxuICAgIGNhc2UgJ2tzX2NfNTYwMS0xOTg3JzpcbiAgICBjYXNlICdrc19jXzU2MDEtMTk4OSc6XG4gICAgY2FzZSAna3NjNTYwMSc6XG4gICAgY2FzZSAna3NjXzU2MDEnOlxuICAgIGNhc2UgJ3dpbmRvd3MtOTQ5JzpcbiAgICAgIHJldHVybiAnRVVDLUtSJ1xuICAgIGNhc2UgJ2NzaXNvMjAyMmtyJzpcbiAgICBjYXNlICdoei1nYi0yMzEyJzpcbiAgICBjYXNlICdpc28tMjAyMi1jbic6XG4gICAgY2FzZSAnaXNvLTIwMjItY24tZXh0JzpcbiAgICBjYXNlICdpc28tMjAyMi1rcic6XG4gICAgY2FzZSAncmVwbGFjZW1lbnQnOlxuICAgICAgcmV0dXJuICdyZXBsYWNlbWVudCdcbiAgICBjYXNlICd1bmljb2RlZmZmZSc6XG4gICAgY2FzZSAndXRmLTE2YmUnOlxuICAgICAgcmV0dXJuICdVVEYtMTZCRSdcbiAgICBjYXNlICdjc3VuaWNvZGUnOlxuICAgIGNhc2UgJ2lzby0xMDY0Ni11Y3MtMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3VuaWNvZGUnOlxuICAgIGNhc2UgJ3VuaWNvZGVmZWZmJzpcbiAgICBjYXNlICd1dGYtMTYnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiAnVVRGLTE2TEUnXG4gICAgY2FzZSAneC11c2VyLWRlZmluZWQnOlxuICAgICAgcmV0dXJuICd4LXVzZXItZGVmaW5lZCdcbiAgICBkZWZhdWx0OiByZXR1cm4gJ2ZhaWx1cmUnXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIGdldEVuY29kaW5nXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHtcbiAga1N0YXRlLFxuICBrRXJyb3IsXG4gIGtSZXN1bHQsXG4gIGtBYm9ydGVkLFxuICBrTGFzdFByb2dyZXNzRXZlbnRGaXJlZFxufSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IFByb2dyZXNzRXZlbnQgfSA9IHJlcXVpcmUoJy4vcHJvZ3Jlc3NldmVudCcpXG5jb25zdCB7IGdldEVuY29kaW5nIH0gPSByZXF1aXJlKCcuL2VuY29kaW5nJylcbmNvbnN0IHsgRE9NRXhjZXB0aW9uIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9jb25zdGFudHMnKVxuY29uc3QgeyBzZXJpYWxpemVBTWltZVR5cGUsIHBhcnNlTUlNRVR5cGUgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2RhdGFVUkwnKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgndXRpbCcpXG5jb25zdCB7IFN0cmluZ0RlY29kZXIgfSA9IHJlcXVpcmUoJ3N0cmluZ19kZWNvZGVyJylcbmNvbnN0IHsgYnRvYSB9ID0gcmVxdWlyZSgnYnVmZmVyJylcblxuLyoqIEB0eXBlIHtQcm9wZXJ0eURlc2NyaXB0b3J9ICovXG5jb25zdCBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzID0ge1xuICBlbnVtZXJhYmxlOiB0cnVlLFxuICB3cml0YWJsZTogZmFsc2UsXG4gIGNvbmZpZ3VyYWJsZTogZmFsc2Vcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNyZWFkT3BlcmF0aW9uXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9maWxlcmVhZGVyJykuRmlsZVJlYWRlcn0gZnJcbiAqIEBwYXJhbSB7aW1wb3J0KCdidWZmZXInKS5CbG9ifSBibG9iXG4gKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxuICogQHBhcmFtIHtzdHJpbmc/fSBlbmNvZGluZ05hbWVcbiAqL1xuZnVuY3Rpb24gcmVhZE9wZXJhdGlvbiAoZnIsIGJsb2IsIHR5cGUsIGVuY29kaW5nTmFtZSkge1xuICAvLyAxLiBJZiBmclx1MjAxOXMgc3RhdGUgaXMgXCJsb2FkaW5nXCIsIHRocm93IGFuIEludmFsaWRTdGF0ZUVycm9yXG4gIC8vICAgIERPTUV4Y2VwdGlvbi5cbiAgaWYgKGZyW2tTdGF0ZV0gPT09ICdsb2FkaW5nJykge1xuICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ0ludmFsaWQgc3RhdGUnLCAnSW52YWxpZFN0YXRlRXJyb3InKVxuICB9XG5cbiAgLy8gMi4gU2V0IGZyXHUyMDE5cyBzdGF0ZSB0byBcImxvYWRpbmdcIi5cbiAgZnJba1N0YXRlXSA9ICdsb2FkaW5nJ1xuXG4gIC8vIDMuIFNldCBmclx1MjAxOXMgcmVzdWx0IHRvIG51bGwuXG4gIGZyW2tSZXN1bHRdID0gbnVsbFxuXG4gIC8vIDQuIFNldCBmclx1MjAxOXMgZXJyb3IgdG8gbnVsbC5cbiAgZnJba0Vycm9yXSA9IG51bGxcblxuICAvLyA1LiBMZXQgc3RyZWFtIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyBnZXQgc3RyZWFtIG9uIGJsb2IuXG4gIC8qKiBAdHlwZSB7aW1wb3J0KCdzdHJlYW0vd2ViJykuUmVhZGFibGVTdHJlYW19ICovXG4gIGNvbnN0IHN0cmVhbSA9IGJsb2Iuc3RyZWFtKClcblxuICAvLyA2LiBMZXQgcmVhZGVyIGJlIHRoZSByZXN1bHQgb2YgZ2V0dGluZyBhIHJlYWRlciBmcm9tIHN0cmVhbS5cbiAgY29uc3QgcmVhZGVyID0gc3RyZWFtLmdldFJlYWRlcigpXG5cbiAgLy8gNy4gTGV0IGJ5dGVzIGJlIGFuIGVtcHR5IGJ5dGUgc2VxdWVuY2UuXG4gIC8qKiBAdHlwZSB7VWludDhBcnJheVtdfSAqL1xuICBjb25zdCBieXRlcyA9IFtdXG5cbiAgLy8gOC4gTGV0IGNodW5rUHJvbWlzZSBiZSB0aGUgcmVzdWx0IG9mIHJlYWRpbmcgYSBjaHVuayBmcm9tXG4gIC8vICAgIHN0cmVhbSB3aXRoIHJlYWRlci5cbiAgbGV0IGNodW5rUHJvbWlzZSA9IHJlYWRlci5yZWFkKClcblxuICAvLyA5LiBMZXQgaXNGaXJzdENodW5rIGJlIHRydWUuXG4gIGxldCBpc0ZpcnN0Q2h1bmsgPSB0cnVlXG5cbiAgLy8gMTAuIEluIHBhcmFsbGVsLCB3aGlsZSB0cnVlOlxuICAvLyBOb3RlOiBcIkluIHBhcmFsbGVsXCIganVzdCBtZWFucyBub24tYmxvY2tpbmdcbiAgLy8gTm90ZSAyOiByZWFkT3BlcmF0aW9uIGl0c2VsZiBjYW5ub3QgYmUgYXN5bmMgYXMgZG91YmxlXG4gIC8vIHJlYWRpbmcgdGhlIGJvZHkgd291bGQgdGhlbiByZWplY3QgdGhlIHByb21pc2UsIGluc3RlYWRcbiAgLy8gb2YgdGhyb3dpbmcgYW4gZXJyb3IuXG4gIDsoYXN5bmMgKCkgPT4ge1xuICAgIHdoaWxlICghZnJba0Fib3J0ZWRdKSB7XG4gICAgICAvLyAxLiBXYWl0IGZvciBjaHVua1Byb21pc2UgdG8gYmUgZnVsZmlsbGVkIG9yIHJlamVjdGVkLlxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZSB9ID0gYXdhaXQgY2h1bmtQcm9taXNlXG5cbiAgICAgICAgLy8gMi4gSWYgY2h1bmtQcm9taXNlIGlzIGZ1bGZpbGxlZCwgYW5kIGlzRmlyc3RDaHVuayBpc1xuICAgICAgICAvLyAgICB0cnVlLCBxdWV1ZSBhIHRhc2sgdG8gZmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZFxuICAgICAgICAvLyAgICBsb2Fkc3RhcnQgYXQgZnIuXG4gICAgICAgIGlmIChpc0ZpcnN0Q2h1bmsgJiYgIWZyW2tBYm9ydGVkXSkge1xuICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnbG9hZHN0YXJ0JywgZnIpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDMuIFNldCBpc0ZpcnN0Q2h1bmsgdG8gZmFsc2UuXG4gICAgICAgIGlzRmlyc3RDaHVuayA9IGZhbHNlXG5cbiAgICAgICAgLy8gNC4gSWYgY2h1bmtQcm9taXNlIGlzIGZ1bGZpbGxlZCB3aXRoIGFuIG9iamVjdCB3aG9zZVxuICAgICAgICAvLyAgICBkb25lIHByb3BlcnR5IGlzIGZhbHNlIGFuZCB3aG9zZSB2YWx1ZSBwcm9wZXJ0eSBpc1xuICAgICAgICAvLyAgICBhIFVpbnQ4QXJyYXkgb2JqZWN0LCBydW4gdGhlc2Ugc3RlcHM6XG4gICAgICAgIGlmICghZG9uZSAmJiB0eXBlcy5pc1VpbnQ4QXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgLy8gMS4gTGV0IGJzIGJlIHRoZSBieXRlIHNlcXVlbmNlIHJlcHJlc2VudGVkIGJ5IHRoZVxuICAgICAgICAgIC8vICAgIFVpbnQ4QXJyYXkgb2JqZWN0LlxuXG4gICAgICAgICAgLy8gMi4gQXBwZW5kIGJzIHRvIGJ5dGVzLlxuICAgICAgICAgIGJ5dGVzLnB1c2godmFsdWUpXG5cbiAgICAgICAgICAvLyAzLiBJZiByb3VnaGx5IDUwbXMgaGF2ZSBwYXNzZWQgc2luY2UgdGhlc2Ugc3RlcHNcbiAgICAgICAgICAvLyAgICB3ZXJlIGxhc3QgaW52b2tlZCwgcXVldWUgYSB0YXNrIHRvIGZpcmUgYVxuICAgICAgICAgIC8vICAgIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBwcm9ncmVzcyBhdCBmci5cbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAoXG4gICAgICAgICAgICAgIGZyW2tMYXN0UHJvZ3Jlc3NFdmVudEZpcmVkXSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAgIERhdGUubm93KCkgLSBmcltrTGFzdFByb2dyZXNzRXZlbnRGaXJlZF0gPj0gNTBcbiAgICAgICAgICAgICkgJiZcbiAgICAgICAgICAgICFmcltrQWJvcnRlZF1cbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGZyW2tMYXN0UHJvZ3Jlc3NFdmVudEZpcmVkXSA9IERhdGUubm93KClcbiAgICAgICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdwcm9ncmVzcycsIGZyKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA0LiBTZXQgY2h1bmtQcm9taXNlIHRvIHRoZSByZXN1bHQgb2YgcmVhZGluZyBhXG4gICAgICAgICAgLy8gICAgY2h1bmsgZnJvbSBzdHJlYW0gd2l0aCByZWFkZXIuXG4gICAgICAgICAgY2h1bmtQcm9taXNlID0gcmVhZGVyLnJlYWQoKVxuICAgICAgICB9IGVsc2UgaWYgKGRvbmUpIHtcbiAgICAgICAgICAvLyA1LiBPdGhlcndpc2UsIGlmIGNodW5rUHJvbWlzZSBpcyBmdWxmaWxsZWQgd2l0aCBhblxuICAgICAgICAgIC8vICAgIG9iamVjdCB3aG9zZSBkb25lIHByb3BlcnR5IGlzIHRydWUsIHF1ZXVlIGEgdGFza1xuICAgICAgICAgIC8vICAgIHRvIHJ1biB0aGUgZm9sbG93aW5nIHN0ZXBzIGFuZCBhYm9ydCB0aGlzIGFsZ29yaXRobTpcbiAgICAgICAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICAgICAgICAvLyAxLiBTZXQgZnJcdTIwMTlzIHN0YXRlIHRvIFwiZG9uZVwiLlxuICAgICAgICAgICAgZnJba1N0YXRlXSA9ICdkb25lJ1xuXG4gICAgICAgICAgICAvLyAyLiBMZXQgcmVzdWx0IGJlIHRoZSByZXN1bHQgb2YgcGFja2FnZSBkYXRhIGdpdmVuXG4gICAgICAgICAgICAvLyAgICBieXRlcywgdHlwZSwgYmxvYlx1MjAxOXMgdHlwZSwgYW5kIGVuY29kaW5nTmFtZS5cbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHBhY2thZ2VEYXRhKGJ5dGVzLCB0eXBlLCBibG9iLnR5cGUsIGVuY29kaW5nTmFtZSlcblxuICAgICAgICAgICAgICAvLyA0LiBFbHNlOlxuXG4gICAgICAgICAgICAgIGlmIChmcltrQWJvcnRlZF0pIHtcbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIC8vIDEuIFNldCBmclx1MjAxOXMgcmVzdWx0IHRvIHJlc3VsdC5cbiAgICAgICAgICAgICAgZnJba1Jlc3VsdF0gPSByZXN1bHRcblxuICAgICAgICAgICAgICAvLyAyLiBGaXJlIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIGxvYWQgYXQgdGhlIGZyLlxuICAgICAgICAgICAgICBmaXJlQVByb2dyZXNzRXZlbnQoJ2xvYWQnLCBmcilcbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIC8vIDMuIElmIHBhY2thZ2UgZGF0YSB0aHJldyBhbiBleGNlcHRpb24gZXJyb3I6XG5cbiAgICAgICAgICAgICAgLy8gMS4gU2V0IGZyXHUyMDE5cyBlcnJvciB0byBlcnJvci5cbiAgICAgICAgICAgICAgZnJba0Vycm9yXSA9IGVycm9yXG5cbiAgICAgICAgICAgICAgLy8gMi4gRmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBlcnJvciBhdCBmci5cbiAgICAgICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdlcnJvcicsIGZyKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyA1LiBJZiBmclx1MjAxOXMgc3RhdGUgaXMgbm90IFwibG9hZGluZ1wiLCBmaXJlIGEgcHJvZ3Jlc3NcbiAgICAgICAgICAgIC8vICAgIGV2ZW50IGNhbGxlZCBsb2FkZW5kIGF0IHRoZSBmci5cbiAgICAgICAgICAgIGlmIChmcltrU3RhdGVdICE9PSAnbG9hZGluZycpIHtcbiAgICAgICAgICAgICAgZmlyZUFQcm9ncmVzc0V2ZW50KCdsb2FkZW5kJywgZnIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcblxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGlmIChmcltrQWJvcnRlZF0pIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDYuIE90aGVyd2lzZSwgaWYgY2h1bmtQcm9taXNlIGlzIHJlamVjdGVkIHdpdGggYW5cbiAgICAgICAgLy8gICAgZXJyb3IgZXJyb3IsIHF1ZXVlIGEgdGFzayB0byBydW4gdGhlIGZvbGxvd2luZ1xuICAgICAgICAvLyAgICBzdGVwcyBhbmQgYWJvcnQgdGhpcyBhbGdvcml0aG06XG4gICAgICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgICAgICAvLyAxLiBTZXQgZnJcdTIwMTlzIHN0YXRlIHRvIFwiZG9uZVwiLlxuICAgICAgICAgIGZyW2tTdGF0ZV0gPSAnZG9uZSdcblxuICAgICAgICAgIC8vIDIuIFNldCBmclx1MjAxOXMgZXJyb3IgdG8gZXJyb3IuXG4gICAgICAgICAgZnJba0Vycm9yXSA9IGVycm9yXG5cbiAgICAgICAgICAvLyAzLiBGaXJlIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIGVycm9yIGF0IGZyLlxuICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnZXJyb3InLCBmcilcblxuICAgICAgICAgIC8vIDQuIElmIGZyXHUyMDE5cyBzdGF0ZSBpcyBub3QgXCJsb2FkaW5nXCIsIGZpcmUgYSBwcm9ncmVzc1xuICAgICAgICAgIC8vICAgIGV2ZW50IGNhbGxlZCBsb2FkZW5kIGF0IGZyLlxuICAgICAgICAgIGlmIChmcltrU3RhdGVdICE9PSAnbG9hZGluZycpIHtcbiAgICAgICAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnbG9hZGVuZCcsIGZyKVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcblxuICAgICAgICBicmVha1xuICAgICAgfVxuICAgIH1cbiAgfSkoKVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2ZpcmUtYS1wcm9ncmVzcy1ldmVudFxuICogQHNlZSBodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtZXZlbnQtZmlyZVxuICogQHBhcmFtIHtzdHJpbmd9IGUgVGhlIG5hbWUgb2YgdGhlIGV2ZW50XG4gKiBAcGFyYW0ge2ltcG9ydCgnLi9maWxlcmVhZGVyJykuRmlsZVJlYWRlcn0gcmVhZGVyXG4gKi9cbmZ1bmN0aW9uIGZpcmVBUHJvZ3Jlc3NFdmVudCAoZSwgcmVhZGVyKSB7XG4gIC8vIFRoZSBwcm9ncmVzcyBldmVudCBlIGRvZXMgbm90IGJ1YmJsZS4gZS5idWJibGVzIG11c3QgYmUgZmFsc2VcbiAgLy8gVGhlIHByb2dyZXNzIGV2ZW50IGUgaXMgTk9UIGNhbmNlbGFibGUuIGUuY2FuY2VsYWJsZSBtdXN0IGJlIGZhbHNlXG4gIGNvbnN0IGV2ZW50ID0gbmV3IFByb2dyZXNzRXZlbnQoZSwge1xuICAgIGJ1YmJsZXM6IGZhbHNlLFxuICAgIGNhbmNlbGFibGU6IGZhbHNlXG4gIH0pXG5cbiAgcmVhZGVyLmRpc3BhdGNoRXZlbnQoZXZlbnQpXG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jYmxvYi1wYWNrYWdlLWRhdGFcbiAqIEBwYXJhbSB7VWludDhBcnJheVtdfSBieXRlc1xuICogQHBhcmFtIHtzdHJpbmd9IHR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nP30gbWltZVR5cGVcbiAqIEBwYXJhbSB7c3RyaW5nP30gZW5jb2RpbmdOYW1lXG4gKi9cbmZ1bmN0aW9uIHBhY2thZ2VEYXRhIChieXRlcywgdHlwZSwgbWltZVR5cGUsIGVuY29kaW5nTmFtZSkge1xuICAvLyAxLiBBIEJsb2IgaGFzIGFuIGFzc29jaWF0ZWQgcGFja2FnZSBkYXRhIGFsZ29yaXRobSwgZ2l2ZW5cbiAgLy8gICAgYnl0ZXMsIGEgdHlwZSwgYSBvcHRpb25hbCBtaW1lVHlwZSwgYW5kIGEgb3B0aW9uYWxcbiAgLy8gICAgZW5jb2RpbmdOYW1lLCB3aGljaCBzd2l0Y2hlcyBvbiB0eXBlIGFuZCBydW5zIHRoZVxuICAvLyAgICBhc3NvY2lhdGVkIHN0ZXBzOlxuXG4gIHN3aXRjaCAodHlwZSkge1xuICAgIGNhc2UgJ0RhdGFVUkwnOiB7XG4gICAgICAvLyAxLiBSZXR1cm4gYnl0ZXMgYXMgYSBEYXRhVVJMIFtSRkMyMzk3XSBzdWJqZWN0IHRvXG4gICAgICAvLyAgICB0aGUgY29uc2lkZXJhdGlvbnMgYmVsb3c6XG4gICAgICAvLyAgKiBVc2UgbWltZVR5cGUgYXMgcGFydCBvZiB0aGUgRGF0YSBVUkwgaWYgaXQgaXNcbiAgICAgIC8vICAgIGF2YWlsYWJsZSBpbiBrZWVwaW5nIHdpdGggdGhlIERhdGEgVVJMXG4gICAgICAvLyAgICBzcGVjaWZpY2F0aW9uIFtSRkMyMzk3XS5cbiAgICAgIC8vICAqIElmIG1pbWVUeXBlIGlzIG5vdCBhdmFpbGFibGUgcmV0dXJuIGEgRGF0YSBVUkxcbiAgICAgIC8vICAgIHdpdGhvdXQgYSBtZWRpYS10eXBlLiBbUkZDMjM5N10uXG5cbiAgICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjMjM5NyNzZWN0aW9uLTNcbiAgICAgIC8vIGRhdGF1cmwgICAgOj0gXCJkYXRhOlwiIFsgbWVkaWF0eXBlIF0gWyBcIjtiYXNlNjRcIiBdIFwiLFwiIGRhdGFcbiAgICAgIC8vIG1lZGlhdHlwZSAgOj0gWyB0eXBlIFwiL1wiIHN1YnR5cGUgXSAqKCBcIjtcIiBwYXJhbWV0ZXIgKVxuICAgICAgLy8gZGF0YSAgICAgICA6PSAqdXJsY2hhclxuICAgICAgLy8gcGFyYW1ldGVyICA6PSBhdHRyaWJ1dGUgXCI9XCIgdmFsdWVcbiAgICAgIGxldCBkYXRhVVJMID0gJ2RhdGE6J1xuXG4gICAgICBjb25zdCBwYXJzZWQgPSBwYXJzZU1JTUVUeXBlKG1pbWVUeXBlIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKVxuXG4gICAgICBpZiAocGFyc2VkICE9PSAnZmFpbHVyZScpIHtcbiAgICAgICAgZGF0YVVSTCArPSBzZXJpYWxpemVBTWltZVR5cGUocGFyc2VkKVxuICAgICAgfVxuXG4gICAgICBkYXRhVVJMICs9ICc7YmFzZTY0LCdcblxuICAgICAgY29uc3QgZGVjb2RlciA9IG5ldyBTdHJpbmdEZWNvZGVyKCdsYXRpbjEnKVxuXG4gICAgICBmb3IgKGNvbnN0IGNodW5rIG9mIGJ5dGVzKSB7XG4gICAgICAgIGRhdGFVUkwgKz0gYnRvYShkZWNvZGVyLndyaXRlKGNodW5rKSlcbiAgICAgIH1cblxuICAgICAgZGF0YVVSTCArPSBidG9hKGRlY29kZXIuZW5kKCkpXG5cbiAgICAgIHJldHVybiBkYXRhVVJMXG4gICAgfVxuICAgIGNhc2UgJ1RleHQnOiB7XG4gICAgICAvLyAxLiBMZXQgZW5jb2RpbmcgYmUgZmFpbHVyZVxuICAgICAgbGV0IGVuY29kaW5nID0gJ2ZhaWx1cmUnXG5cbiAgICAgIC8vIDIuIElmIHRoZSBlbmNvZGluZ05hbWUgaXMgcHJlc2VudCwgc2V0IGVuY29kaW5nIHRvIHRoZVxuICAgICAgLy8gICAgcmVzdWx0IG9mIGdldHRpbmcgYW4gZW5jb2RpbmcgZnJvbSBlbmNvZGluZ05hbWUuXG4gICAgICBpZiAoZW5jb2RpbmdOYW1lKSB7XG4gICAgICAgIGVuY29kaW5nID0gZ2V0RW5jb2RpbmcoZW5jb2RpbmdOYW1lKVxuICAgICAgfVxuXG4gICAgICAvLyAzLiBJZiBlbmNvZGluZyBpcyBmYWlsdXJlLCBhbmQgbWltZVR5cGUgaXMgcHJlc2VudDpcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gJ2ZhaWx1cmUnICYmIG1pbWVUeXBlKSB7XG4gICAgICAgIC8vIDEuIExldCB0eXBlIGJlIHRoZSByZXN1bHQgb2YgcGFyc2UgYSBNSU1FIHR5cGVcbiAgICAgICAgLy8gICAgZ2l2ZW4gbWltZVR5cGUuXG4gICAgICAgIGNvbnN0IHR5cGUgPSBwYXJzZU1JTUVUeXBlKG1pbWVUeXBlKVxuXG4gICAgICAgIC8vIDIuIElmIHR5cGUgaXMgbm90IGZhaWx1cmUsIHNldCBlbmNvZGluZyB0byB0aGUgcmVzdWx0XG4gICAgICAgIC8vICAgIG9mIGdldHRpbmcgYW4gZW5jb2RpbmcgZnJvbSB0eXBlXHUyMDE5cyBwYXJhbWV0ZXJzW1wiY2hhcnNldFwiXS5cbiAgICAgICAgaWYgKHR5cGUgIT09ICdmYWlsdXJlJykge1xuICAgICAgICAgIGVuY29kaW5nID0gZ2V0RW5jb2RpbmcodHlwZS5wYXJhbWV0ZXJzLmdldCgnY2hhcnNldCcpKVxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIC8vIDQuIElmIGVuY29kaW5nIGlzIGZhaWx1cmUsIHRoZW4gc2V0IGVuY29kaW5nIHRvIFVURi04LlxuICAgICAgaWYgKGVuY29kaW5nID09PSAnZmFpbHVyZScpIHtcbiAgICAgICAgZW5jb2RpbmcgPSAnVVRGLTgnXG4gICAgICB9XG5cbiAgICAgIC8vIDUuIERlY29kZSBieXRlcyB1c2luZyBmYWxsYmFjayBlbmNvZGluZyBlbmNvZGluZywgYW5kXG4gICAgICAvLyAgICByZXR1cm4gdGhlIHJlc3VsdC5cbiAgICAgIHJldHVybiBkZWNvZGUoYnl0ZXMsIGVuY29kaW5nKVxuICAgIH1cbiAgICBjYXNlICdBcnJheUJ1ZmZlcic6IHtcbiAgICAgIC8vIFJldHVybiBhIG5ldyBBcnJheUJ1ZmZlciB3aG9zZSBjb250ZW50cyBhcmUgYnl0ZXMuXG4gICAgICBjb25zdCBzZXF1ZW5jZSA9IGNvbWJpbmVCeXRlU2VxdWVuY2VzKGJ5dGVzKVxuXG4gICAgICByZXR1cm4gc2VxdWVuY2UuYnVmZmVyXG4gICAgfVxuICAgIGNhc2UgJ0JpbmFyeVN0cmluZyc6IHtcbiAgICAgIC8vIFJldHVybiBieXRlcyBhcyBhIGJpbmFyeSBzdHJpbmcsIGluIHdoaWNoIGV2ZXJ5IGJ5dGVcbiAgICAgIC8vICBpcyByZXByZXNlbnRlZCBieSBhIGNvZGUgdW5pdCBvZiBlcXVhbCB2YWx1ZSBbMC4uMjU1XS5cbiAgICAgIGxldCBiaW5hcnlTdHJpbmcgPSAnJ1xuXG4gICAgICBjb25zdCBkZWNvZGVyID0gbmV3IFN0cmluZ0RlY29kZXIoJ2xhdGluMScpXG5cbiAgICAgIGZvciAoY29uc3QgY2h1bmsgb2YgYnl0ZXMpIHtcbiAgICAgICAgYmluYXJ5U3RyaW5nICs9IGRlY29kZXIud3JpdGUoY2h1bmspXG4gICAgICB9XG5cbiAgICAgIGJpbmFyeVN0cmluZyArPSBkZWNvZGVyLmVuZCgpXG5cbiAgICAgIHJldHVybiBiaW5hcnlTdHJpbmdcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyNkZWNvZGVcbiAqIEBwYXJhbSB7VWludDhBcnJheVtdfSBpb1F1ZXVlXG4gKiBAcGFyYW0ge3N0cmluZ30gZW5jb2RpbmdcbiAqL1xuZnVuY3Rpb24gZGVjb2RlIChpb1F1ZXVlLCBlbmNvZGluZykge1xuICBjb25zdCBieXRlcyA9IGNvbWJpbmVCeXRlU2VxdWVuY2VzKGlvUXVldWUpXG5cbiAgLy8gMS4gTGV0IEJPTUVuY29kaW5nIGJlIHRoZSByZXN1bHQgb2YgQk9NIHNuaWZmaW5nIGlvUXVldWUuXG4gIGNvbnN0IEJPTUVuY29kaW5nID0gQk9NU25pZmZpbmcoYnl0ZXMpXG5cbiAgbGV0IHNsaWNlID0gMFxuXG4gIC8vIDIuIElmIEJPTUVuY29kaW5nIGlzIG5vbi1udWxsOlxuICBpZiAoQk9NRW5jb2RpbmcgIT09IG51bGwpIHtcbiAgICAvLyAxLiBTZXQgZW5jb2RpbmcgdG8gQk9NRW5jb2RpbmcuXG4gICAgZW5jb2RpbmcgPSBCT01FbmNvZGluZ1xuXG4gICAgLy8gMi4gUmVhZCB0aHJlZSBieXRlcyBmcm9tIGlvUXVldWUsIGlmIEJPTUVuY29kaW5nIGlzXG4gICAgLy8gICAgVVRGLTg7IG90aGVyd2lzZSByZWFkIHR3byBieXRlcy5cbiAgICAvLyAgICAoRG8gbm90aGluZyB3aXRoIHRob3NlIGJ5dGVzLilcbiAgICBzbGljZSA9IEJPTUVuY29kaW5nID09PSAnVVRGLTgnID8gMyA6IDJcbiAgfVxuXG4gIC8vIDMuIFByb2Nlc3MgYSBxdWV1ZSB3aXRoIGFuIGluc3RhbmNlIG9mIGVuY29kaW5nXHUyMDE5c1xuICAvLyAgICBkZWNvZGVyLCBpb1F1ZXVlLCBvdXRwdXQsIGFuZCBcInJlcGxhY2VtZW50XCIuXG5cbiAgLy8gNC4gUmV0dXJuIG91dHB1dC5cblxuICBjb25zdCBzbGljZWQgPSBieXRlcy5zbGljZShzbGljZSlcbiAgcmV0dXJuIG5ldyBUZXh0RGVjb2RlcihlbmNvZGluZykuZGVjb2RlKHNsaWNlZClcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZW5jb2Rpbmcuc3BlYy53aGF0d2cub3JnLyNib20tc25pZmZcbiAqIEBwYXJhbSB7VWludDhBcnJheX0gaW9RdWV1ZVxuICovXG5mdW5jdGlvbiBCT01TbmlmZmluZyAoaW9RdWV1ZSkge1xuICAvLyAxLiBMZXQgQk9NIGJlIHRoZSByZXN1bHQgb2YgcGVla2luZyAzIGJ5dGVzIGZyb20gaW9RdWV1ZSxcbiAgLy8gICAgY29udmVydGVkIHRvIGEgYnl0ZSBzZXF1ZW5jZS5cbiAgY29uc3QgW2EsIGIsIGNdID0gaW9RdWV1ZVxuXG4gIC8vIDIuIEZvciBlYWNoIG9mIHRoZSByb3dzIGluIHRoZSB0YWJsZSBiZWxvdywgc3RhcnRpbmcgd2l0aFxuICAvLyAgICB0aGUgZmlyc3Qgb25lIGFuZCBnb2luZyBkb3duLCBpZiBCT00gc3RhcnRzIHdpdGggdGhlXG4gIC8vICAgIGJ5dGVzIGdpdmVuIGluIHRoZSBmaXJzdCBjb2x1bW4sIHRoZW4gcmV0dXJuIHRoZVxuICAvLyAgICBlbmNvZGluZyBnaXZlbiBpbiB0aGUgY2VsbCBpbiB0aGUgc2Vjb25kIGNvbHVtbiBvZiB0aGF0XG4gIC8vICAgIHJvdy4gT3RoZXJ3aXNlLCByZXR1cm4gbnVsbC5cbiAgaWYgKGEgPT09IDB4RUYgJiYgYiA9PT0gMHhCQiAmJiBjID09PSAweEJGKSB7XG4gICAgcmV0dXJuICdVVEYtOCdcbiAgfSBlbHNlIGlmIChhID09PSAweEZFICYmIGIgPT09IDB4RkYpIHtcbiAgICByZXR1cm4gJ1VURi0xNkJFJ1xuICB9IGVsc2UgaWYgKGEgPT09IDB4RkYgJiYgYiA9PT0gMHhGRSkge1xuICAgIHJldHVybiAnVVRGLTE2TEUnXG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuXG4vKipcbiAqIEBwYXJhbSB7VWludDhBcnJheVtdfSBzZXF1ZW5jZXNcbiAqL1xuZnVuY3Rpb24gY29tYmluZUJ5dGVTZXF1ZW5jZXMgKHNlcXVlbmNlcykge1xuICBjb25zdCBzaXplID0gc2VxdWVuY2VzLnJlZHVjZSgoYSwgYikgPT4ge1xuICAgIHJldHVybiBhICsgYi5ieXRlTGVuZ3RoXG4gIH0sIDApXG5cbiAgbGV0IG9mZnNldCA9IDBcblxuICByZXR1cm4gc2VxdWVuY2VzLnJlZHVjZSgoYSwgYikgPT4ge1xuICAgIGEuc2V0KGIsIG9mZnNldClcbiAgICBvZmZzZXQgKz0gYi5ieXRlTGVuZ3RoXG4gICAgcmV0dXJuIGFcbiAgfSwgbmV3IFVpbnQ4QXJyYXkoc2l6ZSkpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICByZWFkT3BlcmF0aW9uLFxuICBmaXJlQVByb2dyZXNzRXZlbnRcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3Qge1xuICBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICByZWFkT3BlcmF0aW9uLFxuICBmaXJlQVByb2dyZXNzRXZlbnRcbn0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3Qge1xuICBrU3RhdGUsXG4gIGtFcnJvcixcbiAga1Jlc3VsdCxcbiAga0V2ZW50cyxcbiAga0Fib3J0ZWRcbn0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5cbmNsYXNzIEZpbGVSZWFkZXIgZXh0ZW5kcyBFdmVudFRhcmdldCB7XG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICBzdXBlcigpXG5cbiAgICB0aGlzW2tTdGF0ZV0gPSAnZW1wdHknXG4gICAgdGhpc1trUmVzdWx0XSA9IG51bGxcbiAgICB0aGlzW2tFcnJvcl0gPSBudWxsXG4gICAgdGhpc1trRXZlbnRzXSA9IHtcbiAgICAgIGxvYWRlbmQ6IG51bGwsXG4gICAgICBlcnJvcjogbnVsbCxcbiAgICAgIGFib3J0OiBudWxsLFxuICAgICAgbG9hZDogbnVsbCxcbiAgICAgIHByb2dyZXNzOiBudWxsLFxuICAgICAgbG9hZHN0YXJ0OiBudWxsXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2Rmbi1yZWFkQXNBcnJheUJ1ZmZlclxuICAgKiBAcGFyYW0ge2ltcG9ydCgnYnVmZmVyJykuQmxvYn0gYmxvYlxuICAgKi9cbiAgcmVhZEFzQXJyYXlCdWZmZXIgKGJsb2IpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0ZpbGVSZWFkZXIucmVhZEFzQXJyYXlCdWZmZXInIH0pXG5cbiAgICBibG9iID0gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihibG9iLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICAgIC8vIFRoZSByZWFkQXNBcnJheUJ1ZmZlcihibG9iKSBtZXRob2QsIHdoZW4gaW52b2tlZCxcbiAgICAvLyBtdXN0IGluaXRpYXRlIGEgcmVhZCBvcGVyYXRpb24gZm9yIGJsb2Igd2l0aCBBcnJheUJ1ZmZlci5cbiAgICByZWFkT3BlcmF0aW9uKHRoaXMsIGJsb2IsICdBcnJheUJ1ZmZlcicpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jcmVhZEFzQmluYXJ5U3RyaW5nXG4gICAqIEBwYXJhbSB7aW1wb3J0KCdidWZmZXInKS5CbG9ifSBibG9iXG4gICAqL1xuICByZWFkQXNCaW5hcnlTdHJpbmcgKGJsb2IpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0ZpbGVSZWFkZXIucmVhZEFzQmluYXJ5U3RyaW5nJyB9KVxuXG4gICAgYmxvYiA9IHdlYmlkbC5jb252ZXJ0ZXJzLkJsb2IoYmxvYiwgeyBzdHJpY3Q6IGZhbHNlIH0pXG5cbiAgICAvLyBUaGUgcmVhZEFzQmluYXJ5U3RyaW5nKGJsb2IpIG1ldGhvZCwgd2hlbiBpbnZva2VkLFxuICAgIC8vIG11c3QgaW5pdGlhdGUgYSByZWFkIG9wZXJhdGlvbiBmb3IgYmxvYiB3aXRoIEJpbmFyeVN0cmluZy5cbiAgICByZWFkT3BlcmF0aW9uKHRoaXMsIGJsb2IsICdCaW5hcnlTdHJpbmcnKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI3JlYWRBc0RhdGFUZXh0XG4gICAqIEBwYXJhbSB7aW1wb3J0KCdidWZmZXInKS5CbG9ifSBibG9iXG4gICAqIEBwYXJhbSB7c3RyaW5nP30gZW5jb2RpbmdcbiAgICovXG4gIHJlYWRBc1RleHQgKGJsb2IsIGVuY29kaW5nID0gdW5kZWZpbmVkKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGaWxlUmVhZGVyLnJlYWRBc1RleHQnIH0pXG5cbiAgICBibG9iID0gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihibG9iLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICAgIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBlbmNvZGluZyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhlbmNvZGluZylcbiAgICB9XG5cbiAgICAvLyBUaGUgcmVhZEFzVGV4dChibG9iLCBlbmNvZGluZykgbWV0aG9kLCB3aGVuIGludm9rZWQsXG4gICAgLy8gbXVzdCBpbml0aWF0ZSBhIHJlYWQgb3BlcmF0aW9uIGZvciBibG9iIHdpdGggVGV4dCBhbmQgZW5jb2RpbmcuXG4gICAgcmVhZE9wZXJhdGlvbih0aGlzLCBibG9iLCAnVGV4dCcsIGVuY29kaW5nKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2Rmbi1yZWFkQXNEYXRhVVJMXG4gICAqIEBwYXJhbSB7aW1wb3J0KCdidWZmZXInKS5CbG9ifSBibG9iXG4gICAqL1xuICByZWFkQXNEYXRhVVJMIChibG9iKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdGaWxlUmVhZGVyLnJlYWRBc0RhdGFVUkwnIH0pXG5cbiAgICBibG9iID0gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihibG9iLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICAgIC8vIFRoZSByZWFkQXNEYXRhVVJMKGJsb2IpIG1ldGhvZCwgd2hlbiBpbnZva2VkLCBtdXN0XG4gICAgLy8gaW5pdGlhdGUgYSByZWFkIG9wZXJhdGlvbiBmb3IgYmxvYiB3aXRoIERhdGFVUkwuXG4gICAgcmVhZE9wZXJhdGlvbih0aGlzLCBibG9iLCAnRGF0YVVSTCcpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZGZuLWFib3J0XG4gICAqL1xuICBhYm9ydCAoKSB7XG4gICAgLy8gMS4gSWYgdGhpcydzIHN0YXRlIGlzIFwiZW1wdHlcIiBvciBpZiB0aGlzJ3Mgc3RhdGUgaXNcbiAgICAvLyAgICBcImRvbmVcIiBzZXQgdGhpcydzIHJlc3VsdCB0byBudWxsIGFuZCB0ZXJtaW5hdGVcbiAgICAvLyAgICB0aGlzIGFsZ29yaXRobS5cbiAgICBpZiAodGhpc1trU3RhdGVdID09PSAnZW1wdHknIHx8IHRoaXNba1N0YXRlXSA9PT0gJ2RvbmUnKSB7XG4gICAgICB0aGlzW2tSZXN1bHRdID0gbnVsbFxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gMi4gSWYgdGhpcydzIHN0YXRlIGlzIFwibG9hZGluZ1wiIHNldCB0aGlzJ3Mgc3RhdGUgdG9cbiAgICAvLyAgICBcImRvbmVcIiBhbmQgc2V0IHRoaXMncyByZXN1bHQgdG8gbnVsbC5cbiAgICBpZiAodGhpc1trU3RhdGVdID09PSAnbG9hZGluZycpIHtcbiAgICAgIHRoaXNba1N0YXRlXSA9ICdkb25lJ1xuICAgICAgdGhpc1trUmVzdWx0XSA9IG51bGxcbiAgICB9XG5cbiAgICAvLyAzLiBJZiB0aGVyZSBhcmUgYW55IHRhc2tzIGZyb20gdGhpcyBvbiB0aGUgZmlsZSByZWFkaW5nXG4gICAgLy8gICAgdGFzayBzb3VyY2UgaW4gYW4gYWZmaWxpYXRlZCB0YXNrIHF1ZXVlLCB0aGVuIHJlbW92ZVxuICAgIC8vICAgIHRob3NlIHRhc2tzIGZyb20gdGhhdCB0YXNrIHF1ZXVlLlxuICAgIHRoaXNba0Fib3J0ZWRdID0gdHJ1ZVxuXG4gICAgLy8gNC4gVGVybWluYXRlIHRoZSBhbGdvcml0aG0gZm9yIHRoZSByZWFkIG1ldGhvZCBiZWluZyBwcm9jZXNzZWQuXG4gICAgLy8gVE9ET1xuXG4gICAgLy8gNS4gRmlyZSBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBhYm9ydCBhdCB0aGlzLlxuICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnYWJvcnQnLCB0aGlzKVxuXG4gICAgLy8gNi4gSWYgdGhpcydzIHN0YXRlIGlzIG5vdCBcImxvYWRpbmdcIiwgZmlyZSBhIHByb2dyZXNzXG4gICAgLy8gICAgZXZlbnQgY2FsbGVkIGxvYWRlbmQgYXQgdGhpcy5cbiAgICBpZiAodGhpc1trU3RhdGVdICE9PSAnbG9hZGluZycpIHtcbiAgICAgIGZpcmVBUHJvZ3Jlc3NFdmVudCgnbG9hZGVuZCcsIHRoaXMpXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLXJlYWR5c3RhdGVcbiAgICovXG4gIGdldCByZWFkeVN0YXRlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgc3dpdGNoICh0aGlzW2tTdGF0ZV0pIHtcbiAgICAgIGNhc2UgJ2VtcHR5JzogcmV0dXJuIHRoaXMuRU1QVFlcbiAgICAgIGNhc2UgJ2xvYWRpbmcnOiByZXR1cm4gdGhpcy5MT0FESU5HXG4gICAgICBjYXNlICdkb25lJzogcmV0dXJuIHRoaXMuRE9ORVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkb20tZmlsZXJlYWRlci1yZXN1bHRcbiAgICovXG4gIGdldCByZXN1bHQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICAvLyBUaGUgcmVzdWx0IGF0dHJpYnV0ZVx1MjAxOXMgZ2V0dGVyLCB3aGVuIGludm9rZWQsIG11c3QgcmV0dXJuXG4gICAgLy8gdGhpcydzIHJlc3VsdC5cbiAgICByZXR1cm4gdGhpc1trUmVzdWx0XVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLWVycm9yXG4gICAqL1xuICBnZXQgZXJyb3IgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICAvLyBUaGUgZXJyb3IgYXR0cmlidXRlXHUyMDE5cyBnZXR0ZXIsIHdoZW4gaW52b2tlZCwgbXVzdCByZXR1cm5cbiAgICAvLyB0aGlzJ3MgZXJyb3IuXG4gICAgcmV0dXJuIHRoaXNba0Vycm9yXVxuICB9XG5cbiAgZ2V0IG9ubG9hZGVuZCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLmxvYWRlbmRcbiAgfVxuXG4gIHNldCBvbmxvYWRlbmQgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLmxvYWRlbmQpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZGVuZCcsIHRoaXNba0V2ZW50c10ubG9hZGVuZClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmxvYWRlbmQgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdsb2FkZW5kJywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0V2ZW50c10ubG9hZGVuZCA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25lcnJvciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLmVycm9yXG4gIH1cblxuICBzZXQgb25lcnJvciAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10uZXJyb3IpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignZXJyb3InLCB0aGlzW2tFdmVudHNdLmVycm9yKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10uZXJyb3IgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzW2tFdmVudHNdLmVycm9yID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmxvYWRzdGFydCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIHJldHVybiB0aGlzW2tFdmVudHNdLmxvYWRzdGFydFxuICB9XG5cbiAgc2V0IG9ubG9hZHN0YXJ0IChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5sb2Fkc3RhcnQpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZHN0YXJ0JywgdGhpc1trRXZlbnRzXS5sb2Fkc3RhcnQpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2Fkc3RhcnQgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdsb2Fkc3RhcnQnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2Fkc3RhcnQgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9ucHJvZ3Jlc3MgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICByZXR1cm4gdGhpc1trRXZlbnRzXS5wcm9ncmVzc1xuICB9XG5cbiAgc2V0IG9ucHJvZ3Jlc3MgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRmlsZVJlYWRlcilcblxuICAgIGlmICh0aGlzW2tFdmVudHNdLnByb2dyZXNzKSB7XG4gICAgICB0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Byb2dyZXNzJywgdGhpc1trRXZlbnRzXS5wcm9ncmVzcylcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzW2tFdmVudHNdLnByb2dyZXNzID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigncHJvZ3Jlc3MnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5wcm9ncmVzcyA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25sb2FkICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10ubG9hZFxuICB9XG5cbiAgc2V0IG9ubG9hZCAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgaWYgKHRoaXNba0V2ZW50c10ubG9hZCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJywgdGhpc1trRXZlbnRzXS5sb2FkKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXNba0V2ZW50c10ubG9hZCA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trRXZlbnRzXS5sb2FkID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbmFib3J0ICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBGaWxlUmVhZGVyKVxuXG4gICAgcmV0dXJuIHRoaXNba0V2ZW50c10uYWJvcnRcbiAgfVxuXG4gIHNldCBvbmFib3J0IChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEZpbGVSZWFkZXIpXG5cbiAgICBpZiAodGhpc1trRXZlbnRzXS5hYm9ydCkge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdhYm9ydCcsIHRoaXNba0V2ZW50c10uYWJvcnQpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpc1trRXZlbnRzXS5hYm9ydCA9IGZuXG4gICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2Fib3J0JywgZm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNba0V2ZW50c10uYWJvcnQgPSBudWxsXG4gICAgfVxuICB9XG59XG5cbi8vIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9GaWxlQVBJLyNkb20tZmlsZXJlYWRlci1lbXB0eVxuRmlsZVJlYWRlci5FTVBUWSA9IEZpbGVSZWFkZXIucHJvdG90eXBlLkVNUFRZID0gMFxuLy8gaHR0cHM6Ly93M2MuZ2l0aHViLmlvL0ZpbGVBUEkvI2RvbS1maWxlcmVhZGVyLWxvYWRpbmdcbkZpbGVSZWFkZXIuTE9BRElORyA9IEZpbGVSZWFkZXIucHJvdG90eXBlLkxPQURJTkcgPSAxXG4vLyBodHRwczovL3czYy5naXRodWIuaW8vRmlsZUFQSS8jZG9tLWZpbGVyZWFkZXItZG9uZVxuRmlsZVJlYWRlci5ET05FID0gRmlsZVJlYWRlci5wcm90b3R5cGUuRE9ORSA9IDJcblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRmlsZVJlYWRlci5wcm90b3R5cGUsIHtcbiAgRU1QVFk6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIExPQURJTkc6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIERPTkU6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIHJlYWRBc0FycmF5QnVmZmVyOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWFkQXNCaW5hcnlTdHJpbmc6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWRBc1RleHQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWRBc0RhdGFVUkw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGFib3J0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZWFkeVN0YXRlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICByZXN1bHQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGVycm9yOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmxvYWRzdGFydDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25wcm9ncmVzczoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgb25sb2FkOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmFib3J0OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmVycm9yOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbmxvYWRlbmQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdGaWxlUmVhZGVyJyxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEZpbGVSZWFkZXIsIHtcbiAgRU1QVFk6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIExPQURJTkc6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIERPTkU6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnNcbn0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBGaWxlUmVhZGVyXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBrQ29uc3RydWN0OiByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKS5rQ29uc3RydWN0XG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGFzc2VydCA9IHJlcXVpcmUoJ2Fzc2VydCcpXG5jb25zdCB7IFVSTFNlcmlhbGl6ZXIgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2RhdGFVUkwnKVxuY29uc3QgeyBpc1ZhbGlkSGVhZGVyTmFtZSB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvdXRpbCcpXG5cbi8qKlxuICogQHNlZSBodHRwczovL3VybC5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtdXJsLWVxdWFsc1xuICogQHBhcmFtIHtVUkx9IEFcbiAqIEBwYXJhbSB7VVJMfSBCXG4gKiBAcGFyYW0ge2Jvb2xlYW4gfCB1bmRlZmluZWR9IGV4Y2x1ZGVGcmFnbWVudFxuICogQHJldHVybnMge2Jvb2xlYW59XG4gKi9cbmZ1bmN0aW9uIHVybEVxdWFscyAoQSwgQiwgZXhjbHVkZUZyYWdtZW50ID0gZmFsc2UpIHtcbiAgY29uc3Qgc2VyaWFsaXplZEEgPSBVUkxTZXJpYWxpemVyKEEsIGV4Y2x1ZGVGcmFnbWVudClcblxuICBjb25zdCBzZXJpYWxpemVkQiA9IFVSTFNlcmlhbGl6ZXIoQiwgZXhjbHVkZUZyYWdtZW50KVxuXG4gIHJldHVybiBzZXJpYWxpemVkQSA9PT0gc2VyaWFsaXplZEJcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9jaHJvbWl1bS9jaHJvbWl1bS9ibG9iLzY5NGQyMGQxMzRjYjU1M2Q4ZDg5ZTU1MDBiOTE0ODAxMmIxYmEyOTkvY29udGVudC9icm93c2VyL2NhY2hlX3N0b3JhZ2UvY2FjaGVfc3RvcmFnZV9jYWNoZS5jYyNMMjYwLUwyNjJcbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWFkZXJcbiAqL1xuZnVuY3Rpb24gZmllbGRWYWx1ZXMgKGhlYWRlcikge1xuICBhc3NlcnQoaGVhZGVyICE9PSBudWxsKVxuXG4gIGNvbnN0IHZhbHVlcyA9IFtdXG5cbiAgZm9yIChsZXQgdmFsdWUgb2YgaGVhZGVyLnNwbGl0KCcsJykpIHtcbiAgICB2YWx1ZSA9IHZhbHVlLnRyaW0oKVxuXG4gICAgaWYgKCF2YWx1ZS5sZW5ndGgpIHtcbiAgICAgIGNvbnRpbnVlXG4gICAgfSBlbHNlIGlmICghaXNWYWxpZEhlYWRlck5hbWUodmFsdWUpKSB7XG4gICAgICBjb250aW51ZVxuICAgIH1cblxuICAgIHZhbHVlcy5wdXNoKHZhbHVlKVxuICB9XG5cbiAgcmV0dXJuIHZhbHVlc1xufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgdXJsRXF1YWxzLFxuICBmaWVsZFZhbHVlc1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtDb25zdHJ1Y3QgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IHVybEVxdWFscywgZmllbGRWYWx1ZXM6IGdldEZpZWxkVmFsdWVzIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5LCBpc0Rpc3R1cmJlZCB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcbmNvbnN0IHsga0hlYWRlcnNMaXN0IH0gPSByZXF1aXJlKCcuLi9jb3JlL3N5bWJvbHMnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IFJlc3BvbnNlLCBjbG9uZVJlc3BvbnNlIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9yZXNwb25zZScpXG5jb25zdCB7IFJlcXVlc3QgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3JlcXVlc3QnKVxuY29uc3QgeyBrU3RhdGUsIGtIZWFkZXJzLCBrR3VhcmQsIGtSZWFsbSB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvc3ltYm9scycpXG5jb25zdCB7IGZldGNoaW5nIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9pbmRleCcpXG5jb25zdCB7IHVybElzSHR0cEh0dHBzU2NoZW1lLCBjcmVhdGVEZWZlcnJlZFByb21pc2UsIHJlYWRBbGxCeXRlcyB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvdXRpbCcpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuLi9nbG9iYWwnKVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2Rmbi1jYWNoZS1iYXRjaC1vcGVyYXRpb25cbiAqIEB0eXBlZGVmIHtPYmplY3R9IENhY2hlQmF0Y2hPcGVyYXRpb25cbiAqIEBwcm9wZXJ0eSB7J2RlbGV0ZScgfCAncHV0J30gdHlwZVxuICogQHByb3BlcnR5IHthbnl9IHJlcXVlc3RcbiAqIEBwcm9wZXJ0eSB7YW55fSByZXNwb25zZVxuICogQHByb3BlcnR5IHtpbXBvcnQoJy4uLy4uL3R5cGVzL2NhY2hlJykuQ2FjaGVRdWVyeU9wdGlvbnN9IG9wdGlvbnNcbiAqL1xuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2Rmbi1yZXF1ZXN0LXJlc3BvbnNlLWxpc3RcbiAqIEB0eXBlZGVmIHtbYW55LCBhbnldW119IHJlcXVlc3RSZXNwb25zZUxpc3RcbiAqL1xuXG5jbGFzcyBDYWNoZSB7XG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNkZm4tcmVsZXZhbnQtcmVxdWVzdC1yZXNwb25zZS1saXN0XG4gICAqIEB0eXBlIHtyZXF1ZXN0UmVzcG9uc2VMaXN0fVxuICAgKi9cbiAgI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdFxuXG4gIGNvbnN0cnVjdG9yICgpIHtcbiAgICBpZiAoYXJndW1lbnRzWzBdICE9PSBrQ29uc3RydWN0KSB7XG4gICAgICB3ZWJpZGwuaWxsZWdhbENvbnN0cnVjdG9yKClcbiAgICB9XG5cbiAgICB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QgPSBhcmd1bWVudHNbMV1cbiAgfVxuXG4gIGFzeW5jIG1hdGNoIChyZXF1ZXN0LCBvcHRpb25zID0ge30pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGUubWF0Y2gnIH0pXG5cbiAgICByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucylcblxuICAgIGNvbnN0IHAgPSBhd2FpdCB0aGlzLm1hdGNoQWxsKHJlcXVlc3QsIG9wdGlvbnMpXG5cbiAgICBpZiAocC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHJldHVybiBwWzBdXG4gIH1cblxuICBhc3luYyBtYXRjaEFsbCAocmVxdWVzdCA9IHVuZGVmaW5lZCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG5cbiAgICBpZiAocmVxdWVzdCAhPT0gdW5kZWZpbmVkKSByZXF1ZXN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVxdWVzdEluZm8ocmVxdWVzdClcbiAgICBvcHRpb25zID0gd2ViaWRsLmNvbnZlcnRlcnMuQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucylcblxuICAgIC8vIDEuXG4gICAgbGV0IHIgPSBudWxsXG5cbiAgICAvLyAyLlxuICAgIGlmIChyZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgICAvLyAyLjEuMVxuICAgICAgICByID0gcmVxdWVzdFtrU3RhdGVdXG5cbiAgICAgICAgLy8gMi4xLjJcbiAgICAgICAgaWYgKHIubWV0aG9kICE9PSAnR0VUJyAmJiAhb3B0aW9ucy5pZ25vcmVNZXRob2QpIHtcbiAgICAgICAgICByZXR1cm4gW11cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcmVxdWVzdCA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgLy8gMi4yLjFcbiAgICAgICAgciA9IG5ldyBSZXF1ZXN0KHJlcXVlc3QpW2tTdGF0ZV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA1LlxuICAgIC8vIDUuMVxuICAgIGNvbnN0IHJlc3BvbnNlcyA9IFtdXG5cbiAgICAvLyA1LjJcbiAgICBpZiAocmVxdWVzdCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyA1LjIuMVxuICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0KSB7XG4gICAgICAgIHJlc3BvbnNlcy5wdXNoKHJlcXVlc3RSZXNwb25zZVsxXSlcbiAgICAgIH1cbiAgICB9IGVsc2UgeyAvLyA1LjNcbiAgICAgIC8vIDUuMy4xXG4gICAgICBjb25zdCByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShyLCBvcHRpb25zKVxuXG4gICAgICAvLyA1LjMuMlxuICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgcmVxdWVzdFJlc3BvbnNlcykge1xuICAgICAgICByZXNwb25zZXMucHVzaChyZXF1ZXN0UmVzcG9uc2VbMV0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gNS40XG4gICAgLy8gV2UgZG9uJ3QgaW1wbGVtZW50IENPUnMgc28gd2UgZG9uJ3QgbmVlZCB0byBsb29wIG92ZXIgdGhlIHJlc3BvbnNlcywgeWF5IVxuXG4gICAgLy8gNS41LjFcbiAgICBjb25zdCByZXNwb25zZUxpc3QgPSBbXVxuXG4gICAgLy8gNS41LjJcbiAgICBmb3IgKGNvbnN0IHJlc3BvbnNlIG9mIHJlc3BvbnNlcykge1xuICAgICAgLy8gNS41LjIuMVxuICAgICAgY29uc3QgcmVzcG9uc2VPYmplY3QgPSBuZXcgUmVzcG9uc2UocmVzcG9uc2UuYm9keT8uc291cmNlID8/IG51bGwpXG4gICAgICBjb25zdCBib2R5ID0gcmVzcG9uc2VPYmplY3Rba1N0YXRlXS5ib2R5XG4gICAgICByZXNwb25zZU9iamVjdFtrU3RhdGVdID0gcmVzcG9uc2VcbiAgICAgIHJlc3BvbnNlT2JqZWN0W2tTdGF0ZV0uYm9keSA9IGJvZHlcbiAgICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrSGVhZGVyc0xpc3RdID0gcmVzcG9uc2UuaGVhZGVyc0xpc3RcbiAgICAgIHJlc3BvbnNlT2JqZWN0W2tIZWFkZXJzXVtrR3VhcmRdID0gJ2ltbXV0YWJsZSdcblxuICAgICAgcmVzcG9uc2VMaXN0LnB1c2gocmVzcG9uc2VPYmplY3QpXG4gICAgfVxuXG4gICAgLy8gNi5cbiAgICByZXR1cm4gT2JqZWN0LmZyZWV6ZShyZXNwb25zZUxpc3QpXG4gIH1cblxuICBhc3luYyBhZGQgKHJlcXVlc3QpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGUuYWRkJyB9KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG5cbiAgICAvLyAxLlxuICAgIGNvbnN0IHJlcXVlc3RzID0gW3JlcXVlc3RdXG5cbiAgICAvLyAyLlxuICAgIGNvbnN0IHJlc3BvbnNlQXJyYXlQcm9taXNlID0gdGhpcy5hZGRBbGwocmVxdWVzdHMpXG5cbiAgICAvLyAzLlxuICAgIHJldHVybiBhd2FpdCByZXNwb25zZUFycmF5UHJvbWlzZVxuICB9XG5cbiAgYXN5bmMgYWRkQWxsIChyZXF1ZXN0cykge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZS5hZGRBbGwnIH0pXG5cbiAgICByZXF1ZXN0cyA9IHdlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxSZXF1ZXN0SW5mbz4nXShyZXF1ZXN0cylcblxuICAgIC8vIDEuXG4gICAgY29uc3QgcmVzcG9uc2VQcm9taXNlcyA9IFtdXG5cbiAgICAvLyAyLlxuICAgIGNvbnN0IHJlcXVlc3RMaXN0ID0gW11cblxuICAgIC8vIDMuXG4gICAgZm9yIChjb25zdCByZXF1ZXN0IG9mIHJlcXVlc3RzKSB7XG4gICAgICBpZiAodHlwZW9mIHJlcXVlc3QgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIDMuMVxuICAgICAgY29uc3QgciA9IHJlcXVlc3Rba1N0YXRlXVxuXG4gICAgICAvLyAzLjJcbiAgICAgIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUoci51cmwpIHx8IHIubWV0aG9kICE9PSAnR0VUJykge1xuICAgICAgICB0aHJvdyB3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuYWRkQWxsJyxcbiAgICAgICAgICBtZXNzYWdlOiAnRXhwZWN0ZWQgaHR0cC9zIHNjaGVtZSB3aGVuIG1ldGhvZCBpcyBub3QgR0VULidcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyA0LlxuICAgIC8qKiBAdHlwZSB7UmV0dXJuVHlwZTx0eXBlb2YgZmV0Y2hpbmc+W119ICovXG4gICAgY29uc3QgZmV0Y2hDb250cm9sbGVycyA9IFtdXG5cbiAgICAvLyA1LlxuICAgIGZvciAoY29uc3QgcmVxdWVzdCBvZiByZXF1ZXN0cykge1xuICAgICAgLy8gNS4xXG4gICAgICBjb25zdCByID0gbmV3IFJlcXVlc3QocmVxdWVzdClba1N0YXRlXVxuXG4gICAgICAvLyA1LjJcbiAgICAgIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUoci51cmwpKSB7XG4gICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICBoZWFkZXI6ICdDYWNoZS5hZGRBbGwnLFxuICAgICAgICAgIG1lc3NhZ2U6ICdFeHBlY3RlZCBodHRwL3Mgc2NoZW1lLidcbiAgICAgICAgfSlcbiAgICAgIH1cblxuICAgICAgLy8gNS40XG4gICAgICByLmluaXRpYXRvciA9ICdmZXRjaCdcbiAgICAgIHIuZGVzdGluYXRpb24gPSAnc3VicmVzb3VyY2UnXG5cbiAgICAgIC8vIDUuNVxuICAgICAgcmVxdWVzdExpc3QucHVzaChyKVxuXG4gICAgICAvLyA1LjZcbiAgICAgIGNvbnN0IHJlc3BvbnNlUHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICAgIC8vIDUuN1xuICAgICAgZmV0Y2hDb250cm9sbGVycy5wdXNoKGZldGNoaW5nKHtcbiAgICAgICAgcmVxdWVzdDogcixcbiAgICAgICAgZGlzcGF0Y2hlcjogZ2V0R2xvYmFsRGlzcGF0Y2hlcigpLFxuICAgICAgICBwcm9jZXNzUmVzcG9uc2UgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgLy8gMS5cbiAgICAgICAgICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJyB8fCByZXNwb25zZS5zdGF0dXMgPT09IDIwNiB8fCByZXNwb25zZS5zdGF0dXMgPCAyMDAgfHwgcmVzcG9uc2Uuc3RhdHVzID4gMjk5KSB7XG4gICAgICAgICAgICByZXNwb25zZVByb21pc2UucmVqZWN0KHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuYWRkQWxsJyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ1JlY2VpdmVkIGFuIGludmFsaWQgc3RhdHVzIGNvZGUgb3IgdGhlIHJlcXVlc3QgZmFpbGVkLidcbiAgICAgICAgICAgIH0pKVxuICAgICAgICAgIH0gZWxzZSBpZiAocmVzcG9uc2UuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3ZhcnknKSkgeyAvLyAyLlxuICAgICAgICAgICAgLy8gMi4xXG4gICAgICAgICAgICBjb25zdCBmaWVsZFZhbHVlcyA9IGdldEZpZWxkVmFsdWVzKHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgndmFyeScpKVxuXG4gICAgICAgICAgICAvLyAyLjJcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmllbGRWYWx1ZSBvZiBmaWVsZFZhbHVlcykge1xuICAgICAgICAgICAgICAvLyAyLjIuMVxuICAgICAgICAgICAgICBpZiAoZmllbGRWYWx1ZSA9PT0gJyonKSB7XG4gICAgICAgICAgICAgICAgcmVzcG9uc2VQcm9taXNlLnJlamVjdCh3ZWJpZGwuZXJyb3JzLmV4Y2VwdGlvbih7XG4gICAgICAgICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS5hZGRBbGwnLFxuICAgICAgICAgICAgICAgICAgbWVzc2FnZTogJ2ludmFsaWQgdmFyeSBmaWVsZCB2YWx1ZSdcbiAgICAgICAgICAgICAgICB9KSlcblxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgY29udHJvbGxlciBvZiBmZXRjaENvbnRyb2xsZXJzKSB7XG4gICAgICAgICAgICAgICAgICBjb250cm9sbGVyLmFib3J0KClcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgcHJvY2Vzc1Jlc3BvbnNlRW5kT2ZCb2R5IChyZXNwb25zZSkge1xuICAgICAgICAgIC8vIDEuXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLmFib3J0ZWQpIHtcbiAgICAgICAgICAgIHJlc3BvbnNlUHJvbWlzZS5yZWplY3QobmV3IERPTUV4Y2VwdGlvbignYWJvcnRlZCcsICdBYm9ydEVycm9yJykpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyAyLlxuICAgICAgICAgIHJlc3BvbnNlUHJvbWlzZS5yZXNvbHZlKHJlc3BvbnNlKVxuICAgICAgICB9XG4gICAgICB9KSlcblxuICAgICAgLy8gNS44XG4gICAgICByZXNwb25zZVByb21pc2VzLnB1c2gocmVzcG9uc2VQcm9taXNlLnByb21pc2UpXG4gICAgfVxuXG4gICAgLy8gNi5cbiAgICBjb25zdCBwID0gUHJvbWlzZS5hbGwocmVzcG9uc2VQcm9taXNlcylcblxuICAgIC8vIDcuXG4gICAgY29uc3QgcmVzcG9uc2VzID0gYXdhaXQgcFxuXG4gICAgLy8gNy4xXG4gICAgY29uc3Qgb3BlcmF0aW9ucyA9IFtdXG5cbiAgICAvLyA3LjJcbiAgICBsZXQgaW5kZXggPSAwXG5cbiAgICAvLyA3LjNcbiAgICBmb3IgKGNvbnN0IHJlc3BvbnNlIG9mIHJlc3BvbnNlcykge1xuICAgICAgLy8gNy4zLjFcbiAgICAgIC8qKiBAdHlwZSB7Q2FjaGVCYXRjaE9wZXJhdGlvbn0gKi9cbiAgICAgIGNvbnN0IG9wZXJhdGlvbiA9IHtcbiAgICAgICAgdHlwZTogJ3B1dCcsIC8vIDcuMy4yXG4gICAgICAgIHJlcXVlc3Q6IHJlcXVlc3RMaXN0W2luZGV4XSwgLy8gNy4zLjNcbiAgICAgICAgcmVzcG9uc2UgLy8gNy4zLjRcbiAgICAgIH1cblxuICAgICAgb3BlcmF0aW9ucy5wdXNoKG9wZXJhdGlvbikgLy8gNy4zLjVcblxuICAgICAgaW5kZXgrKyAvLyA3LjMuNlxuICAgIH1cblxuICAgIC8vIDcuNVxuICAgIGNvbnN0IGNhY2hlSm9iUHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICAvLyA3LjYuMVxuICAgIGxldCBlcnJvckRhdGEgPSBudWxsXG5cbiAgICAvLyA3LjYuMlxuICAgIHRyeSB7XG4gICAgICB0aGlzLiNiYXRjaENhY2hlT3BlcmF0aW9ucyhvcGVyYXRpb25zKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVycm9yRGF0YSA9IGVcbiAgICB9XG5cbiAgICAvLyA3LjYuM1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIC8vIDcuNi4zLjFcbiAgICAgIGlmIChlcnJvckRhdGEgPT09IG51bGwpIHtcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlc29sdmUodW5kZWZpbmVkKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gNy42LjMuMlxuICAgICAgICBjYWNoZUpvYlByb21pc2UucmVqZWN0KGVycm9yRGF0YSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgLy8gNy43XG4gICAgcmV0dXJuIGNhY2hlSm9iUHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICBhc3luYyBwdXQgKHJlcXVlc3QsIHJlc3BvbnNlKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAyLCB7IGhlYWRlcjogJ0NhY2hlLnB1dCcgfSlcblxuICAgIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0KVxuICAgIHJlc3BvbnNlID0gd2ViaWRsLmNvbnZlcnRlcnMuUmVzcG9uc2UocmVzcG9uc2UpXG5cbiAgICAvLyAxLlxuICAgIGxldCBpbm5lclJlcXVlc3QgPSBudWxsXG5cbiAgICAvLyAyLlxuICAgIGlmIChyZXF1ZXN0IGluc3RhbmNlb2YgUmVxdWVzdCkge1xuICAgICAgaW5uZXJSZXF1ZXN0ID0gcmVxdWVzdFtrU3RhdGVdXG4gICAgfSBlbHNlIHsgLy8gMy5cbiAgICAgIGlubmVyUmVxdWVzdCA9IG5ldyBSZXF1ZXN0KHJlcXVlc3QpW2tTdGF0ZV1cbiAgICB9XG5cbiAgICAvLyA0LlxuICAgIGlmICghdXJsSXNIdHRwSHR0cHNTY2hlbWUoaW5uZXJSZXF1ZXN0LnVybCkgfHwgaW5uZXJSZXF1ZXN0Lm1ldGhvZCAhPT0gJ0dFVCcpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnQ2FjaGUucHV0JyxcbiAgICAgICAgbWVzc2FnZTogJ0V4cGVjdGVkIGFuIGh0dHAvcyBzY2hlbWUgd2hlbiBtZXRob2QgaXMgbm90IEdFVCdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gNS5cbiAgICBjb25zdCBpbm5lclJlc3BvbnNlID0gcmVzcG9uc2Vba1N0YXRlXVxuXG4gICAgLy8gNi5cbiAgICBpZiAoaW5uZXJSZXNwb25zZS5zdGF0dXMgPT09IDIwNikge1xuICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICBoZWFkZXI6ICdDYWNoZS5wdXQnLFxuICAgICAgICBtZXNzYWdlOiAnR290IDIwNiBzdGF0dXMnXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIDcuXG4gICAgaWYgKGlubmVyUmVzcG9uc2UuaGVhZGVyc0xpc3QuY29udGFpbnMoJ3ZhcnknKSkge1xuICAgICAgLy8gNy4xLlxuICAgICAgY29uc3QgZmllbGRWYWx1ZXMgPSBnZXRGaWVsZFZhbHVlcyhpbm5lclJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgndmFyeScpKVxuXG4gICAgICAvLyA3LjIuXG4gICAgICBmb3IgKGNvbnN0IGZpZWxkVmFsdWUgb2YgZmllbGRWYWx1ZXMpIHtcbiAgICAgICAgLy8gNy4yLjFcbiAgICAgICAgaWYgKGZpZWxkVmFsdWUgPT09ICcqJykge1xuICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLnB1dCcsXG4gICAgICAgICAgICBtZXNzYWdlOiAnR290ICogdmFyeSBmaWVsZCB2YWx1ZSdcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gOC5cbiAgICBpZiAoaW5uZXJSZXNwb25zZS5ib2R5ICYmIChpc0Rpc3R1cmJlZChpbm5lclJlc3BvbnNlLmJvZHkuc3RyZWFtKSB8fCBpbm5lclJlc3BvbnNlLmJvZHkuc3RyZWFtLmxvY2tlZCkpIHtcbiAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgaGVhZGVyOiAnQ2FjaGUucHV0JyxcbiAgICAgICAgbWVzc2FnZTogJ1Jlc3BvbnNlIGJvZHkgaXMgbG9ja2VkIG9yIGRpc3R1cmJlZCdcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gOS5cbiAgICBjb25zdCBjbG9uZWRSZXNwb25zZSA9IGNsb25lUmVzcG9uc2UoaW5uZXJSZXNwb25zZSlcblxuICAgIC8vIDEwLlxuICAgIGNvbnN0IGJvZHlSZWFkUHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICAvLyAxMS5cbiAgICBpZiAoaW5uZXJSZXNwb25zZS5ib2R5ICE9IG51bGwpIHtcbiAgICAgIC8vIDExLjFcbiAgICAgIGNvbnN0IHN0cmVhbSA9IGlubmVyUmVzcG9uc2UuYm9keS5zdHJlYW1cblxuICAgICAgLy8gMTEuMlxuICAgICAgY29uc3QgcmVhZGVyID0gc3RyZWFtLmdldFJlYWRlcigpXG5cbiAgICAgIC8vIDExLjNcbiAgICAgIHJlYWRBbGxCeXRlcyhyZWFkZXIpLnRoZW4oYm9keVJlYWRQcm9taXNlLnJlc29sdmUsIGJvZHlSZWFkUHJvbWlzZS5yZWplY3QpXG4gICAgfSBlbHNlIHtcbiAgICAgIGJvZHlSZWFkUHJvbWlzZS5yZXNvbHZlKHVuZGVmaW5lZClcbiAgICB9XG5cbiAgICAvLyAxMi5cbiAgICAvKiogQHR5cGUge0NhY2hlQmF0Y2hPcGVyYXRpb25bXX0gKi9cbiAgICBjb25zdCBvcGVyYXRpb25zID0gW11cblxuICAgIC8vIDEzLlxuICAgIC8qKiBAdHlwZSB7Q2FjaGVCYXRjaE9wZXJhdGlvbn0gKi9cbiAgICBjb25zdCBvcGVyYXRpb24gPSB7XG4gICAgICB0eXBlOiAncHV0JywgLy8gMTQuXG4gICAgICByZXF1ZXN0OiBpbm5lclJlcXVlc3QsIC8vIDE1LlxuICAgICAgcmVzcG9uc2U6IGNsb25lZFJlc3BvbnNlIC8vIDE2LlxuICAgIH1cblxuICAgIC8vIDE3LlxuICAgIG9wZXJhdGlvbnMucHVzaChvcGVyYXRpb24pXG5cbiAgICAvLyAxOS5cbiAgICBjb25zdCBieXRlcyA9IGF3YWl0IGJvZHlSZWFkUHJvbWlzZS5wcm9taXNlXG5cbiAgICBpZiAoY2xvbmVkUmVzcG9uc2UuYm9keSAhPSBudWxsKSB7XG4gICAgICBjbG9uZWRSZXNwb25zZS5ib2R5LnNvdXJjZSA9IGJ5dGVzXG4gICAgfVxuXG4gICAgLy8gMTkuMVxuICAgIGNvbnN0IGNhY2hlSm9iUHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICAvLyAxOS4yLjFcbiAgICBsZXQgZXJyb3JEYXRhID0gbnVsbFxuXG4gICAgLy8gMTkuMi4yXG4gICAgdHJ5IHtcbiAgICAgIHRoaXMuI2JhdGNoQ2FjaGVPcGVyYXRpb25zKG9wZXJhdGlvbnMpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXJyb3JEYXRhID0gZVxuICAgIH1cblxuICAgIC8vIDE5LjIuM1xuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIC8vIDE5LjIuMy4xXG4gICAgICBpZiAoZXJyb3JEYXRhID09PSBudWxsKSB7XG4gICAgICAgIGNhY2hlSm9iUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgIH0gZWxzZSB7IC8vIDE5LjIuMy4yXG4gICAgICAgIGNhY2hlSm9iUHJvbWlzZS5yZWplY3QoZXJyb3JEYXRhKVxuICAgICAgfVxuICAgIH0pXG5cbiAgICByZXR1cm4gY2FjaGVKb2JQcm9taXNlLnByb21pc2VcbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZSAocmVxdWVzdCwgb3B0aW9ucyA9IHt9KSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGUpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlLmRlbGV0ZScgfSlcblxuICAgIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0KVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5DYWNoZVF1ZXJ5T3B0aW9ucyhvcHRpb25zKVxuXG4gICAgLyoqXG4gICAgICogQHR5cGUge1JlcXVlc3R9XG4gICAgICovXG4gICAgbGV0IHIgPSBudWxsXG5cbiAgICBpZiAocmVxdWVzdCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICAgIHIgPSByZXF1ZXN0W2tTdGF0ZV1cblxuICAgICAgaWYgKHIubWV0aG9kICE9PSAnR0VUJyAmJiAhb3B0aW9ucy5pZ25vcmVNZXRob2QpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGFzc2VydCh0eXBlb2YgcmVxdWVzdCA9PT0gJ3N0cmluZycpXG5cbiAgICAgIHIgPSBuZXcgUmVxdWVzdChyZXF1ZXN0KVtrU3RhdGVdXG4gICAgfVxuXG4gICAgLyoqIEB0eXBlIHtDYWNoZUJhdGNoT3BlcmF0aW9uW119ICovXG4gICAgY29uc3Qgb3BlcmF0aW9ucyA9IFtdXG5cbiAgICAvKiogQHR5cGUge0NhY2hlQmF0Y2hPcGVyYXRpb259ICovXG4gICAgY29uc3Qgb3BlcmF0aW9uID0ge1xuICAgICAgdHlwZTogJ2RlbGV0ZScsXG4gICAgICByZXF1ZXN0OiByLFxuICAgICAgb3B0aW9uc1xuICAgIH1cblxuICAgIG9wZXJhdGlvbnMucHVzaChvcGVyYXRpb24pXG5cbiAgICBjb25zdCBjYWNoZUpvYlByb21pc2UgPSBjcmVhdGVEZWZlcnJlZFByb21pc2UoKVxuXG4gICAgbGV0IGVycm9yRGF0YSA9IG51bGxcbiAgICBsZXQgcmVxdWVzdFJlc3BvbnNlc1xuXG4gICAgdHJ5IHtcbiAgICAgIHJlcXVlc3RSZXNwb25zZXMgPSB0aGlzLiNiYXRjaENhY2hlT3BlcmF0aW9ucyhvcGVyYXRpb25zKVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGVycm9yRGF0YSA9IGVcbiAgICB9XG5cbiAgICBxdWV1ZU1pY3JvdGFzaygoKSA9PiB7XG4gICAgICBpZiAoZXJyb3JEYXRhID09PSBudWxsKSB7XG4gICAgICAgIGNhY2hlSm9iUHJvbWlzZS5yZXNvbHZlKCEhcmVxdWVzdFJlc3BvbnNlcz8ubGVuZ3RoKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FjaGVKb2JQcm9taXNlLnJlamVjdChlcnJvckRhdGEpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHJldHVybiBjYWNoZUpvYlByb21pc2UucHJvbWlzZVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2RvbS1jYWNoZS1rZXlzXG4gICAqIEBwYXJhbSB7YW55fSByZXF1ZXN0XG4gICAqIEBwYXJhbSB7aW1wb3J0KCcuLi8uLi90eXBlcy9jYWNoZScpLkNhY2hlUXVlcnlPcHRpb25zfSBvcHRpb25zXG4gICAqIEByZXR1cm5zIHtyZWFkb25seSBSZXF1ZXN0W119XG4gICAqL1xuICBhc3luYyBrZXlzIChyZXF1ZXN0ID0gdW5kZWZpbmVkLCBvcHRpb25zID0ge30pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZSlcblxuICAgIGlmIChyZXF1ZXN0ICE9PSB1bmRlZmluZWQpIHJlcXVlc3QgPSB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mbyhyZXF1ZXN0KVxuICAgIG9wdGlvbnMgPSB3ZWJpZGwuY29udmVydGVycy5DYWNoZVF1ZXJ5T3B0aW9ucyhvcHRpb25zKVxuXG4gICAgLy8gMS5cbiAgICBsZXQgciA9IG51bGxcblxuICAgIC8vIDIuXG4gICAgaWYgKHJlcXVlc3QgIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gMi4xXG4gICAgICBpZiAocmVxdWVzdCBpbnN0YW5jZW9mIFJlcXVlc3QpIHtcbiAgICAgICAgLy8gMi4xLjFcbiAgICAgICAgciA9IHJlcXVlc3Rba1N0YXRlXVxuXG4gICAgICAgIC8vIDIuMS4yXG4gICAgICAgIGlmIChyLm1ldGhvZCAhPT0gJ0dFVCcgJiYgIW9wdGlvbnMuaWdub3JlTWV0aG9kKSB7XG4gICAgICAgICAgcmV0dXJuIFtdXG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHJlcXVlc3QgPT09ICdzdHJpbmcnKSB7IC8vIDIuMlxuICAgICAgICByID0gbmV3IFJlcXVlc3QocmVxdWVzdClba1N0YXRlXVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDQuXG4gICAgY29uc3QgcHJvbWlzZSA9IGNyZWF0ZURlZmVycmVkUHJvbWlzZSgpXG5cbiAgICAvLyA1LlxuICAgIC8vIDUuMVxuICAgIGNvbnN0IHJlcXVlc3RzID0gW11cblxuICAgIC8vIDUuMlxuICAgIGlmIChyZXF1ZXN0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIDUuMi4xXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3RSZXNwb25zZSBvZiB0aGlzLiNyZWxldmFudFJlcXVlc3RSZXNwb25zZUxpc3QpIHtcbiAgICAgICAgLy8gNS4yLjEuMVxuICAgICAgICByZXF1ZXN0cy5wdXNoKHJlcXVlc3RSZXNwb25zZVswXSlcbiAgICAgIH1cbiAgICB9IGVsc2UgeyAvLyA1LjNcbiAgICAgIC8vIDUuMy4xXG4gICAgICBjb25zdCByZXF1ZXN0UmVzcG9uc2VzID0gdGhpcy4jcXVlcnlDYWNoZShyLCBvcHRpb25zKVxuXG4gICAgICAvLyA1LjMuMlxuICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgcmVxdWVzdFJlc3BvbnNlcykge1xuICAgICAgICAvLyA1LjMuMi4xXG4gICAgICAgIHJlcXVlc3RzLnB1c2gocmVxdWVzdFJlc3BvbnNlWzBdKVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIDUuNFxuICAgIHF1ZXVlTWljcm90YXNrKCgpID0+IHtcbiAgICAgIC8vIDUuNC4xXG4gICAgICBjb25zdCByZXF1ZXN0TGlzdCA9IFtdXG5cbiAgICAgIC8vIDUuNC4yXG4gICAgICBmb3IgKGNvbnN0IHJlcXVlc3Qgb2YgcmVxdWVzdHMpIHtcbiAgICAgICAgY29uc3QgcmVxdWVzdE9iamVjdCA9IG5ldyBSZXF1ZXN0KCdodHRwczovL2EnKVxuICAgICAgICByZXF1ZXN0T2JqZWN0W2tTdGF0ZV0gPSByZXF1ZXN0XG4gICAgICAgIHJlcXVlc3RPYmplY3Rba0hlYWRlcnNdW2tIZWFkZXJzTGlzdF0gPSByZXF1ZXN0LmhlYWRlcnNMaXN0XG4gICAgICAgIHJlcXVlc3RPYmplY3Rba0hlYWRlcnNdW2tHdWFyZF0gPSAnaW1tdXRhYmxlJ1xuICAgICAgICByZXF1ZXN0T2JqZWN0W2tSZWFsbV0gPSByZXF1ZXN0LmNsaWVudFxuXG4gICAgICAgIC8vIDUuNC4yLjFcbiAgICAgICAgcmVxdWVzdExpc3QucHVzaChyZXF1ZXN0T2JqZWN0KVxuICAgICAgfVxuXG4gICAgICAvLyA1LjQuM1xuICAgICAgcHJvbWlzZS5yZXNvbHZlKE9iamVjdC5mcmVlemUocmVxdWVzdExpc3QpKVxuICAgIH0pXG5cbiAgICByZXR1cm4gcHJvbWlzZS5wcm9taXNlXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jYmF0Y2gtY2FjaGUtb3BlcmF0aW9ucy1hbGdvcml0aG1cbiAgICogQHBhcmFtIHtDYWNoZUJhdGNoT3BlcmF0aW9uW119IG9wZXJhdGlvbnNcbiAgICogQHJldHVybnMge3JlcXVlc3RSZXNwb25zZUxpc3R9XG4gICAqL1xuICAjYmF0Y2hDYWNoZU9wZXJhdGlvbnMgKG9wZXJhdGlvbnMpIHtcbiAgICAvLyAxLlxuICAgIGNvbnN0IGNhY2hlID0gdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0XG5cbiAgICAvLyAyLlxuICAgIGNvbnN0IGJhY2t1cENhY2hlID0gWy4uLmNhY2hlXVxuXG4gICAgLy8gMy5cbiAgICBjb25zdCBhZGRlZEl0ZW1zID0gW11cblxuICAgIC8vIDQuMVxuICAgIGNvbnN0IHJlc3VsdExpc3QgPSBbXVxuXG4gICAgdHJ5IHtcbiAgICAgIC8vIDQuMlxuICAgICAgZm9yIChjb25zdCBvcGVyYXRpb24gb2Ygb3BlcmF0aW9ucykge1xuICAgICAgICAvLyA0LjIuMVxuICAgICAgICBpZiAob3BlcmF0aW9uLnR5cGUgIT09ICdkZWxldGUnICYmIG9wZXJhdGlvbi50eXBlICE9PSAncHV0Jykge1xuICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgIGhlYWRlcjogJ0NhY2hlLiNiYXRjaENhY2hlT3BlcmF0aW9ucycsXG4gICAgICAgICAgICBtZXNzYWdlOiAnb3BlcmF0aW9uIHR5cGUgZG9lcyBub3QgbWF0Y2ggXCJkZWxldGVcIiBvciBcInB1dFwiJ1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyA0LjIuMlxuICAgICAgICBpZiAob3BlcmF0aW9uLnR5cGUgPT09ICdkZWxldGUnICYmIG9wZXJhdGlvbi5yZXNwb25zZSAhPSBudWxsKSB7XG4gICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuI2JhdGNoQ2FjaGVPcGVyYXRpb25zJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6ICdkZWxldGUgb3BlcmF0aW9uIHNob3VsZCBub3QgaGF2ZSBhbiBhc3NvY2lhdGVkIHJlc3BvbnNlJ1xuICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICAvLyA0LjIuM1xuICAgICAgICBpZiAodGhpcy4jcXVlcnlDYWNoZShvcGVyYXRpb24ucmVxdWVzdCwgb3BlcmF0aW9uLm9wdGlvbnMsIGFkZGVkSXRlbXMpLmxlbmd0aCkge1xuICAgICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJz8/PycsICdJbnZhbGlkU3RhdGVFcnJvcicpXG4gICAgICAgIH1cblxuICAgICAgICAvLyA0LjIuNFxuICAgICAgICBsZXQgcmVxdWVzdFJlc3BvbnNlc1xuXG4gICAgICAgIC8vIDQuMi41XG4gICAgICAgIGlmIChvcGVyYXRpb24udHlwZSA9PT0gJ2RlbGV0ZScpIHtcbiAgICAgICAgICAvLyA0LjIuNS4xXG4gICAgICAgICAgcmVxdWVzdFJlc3BvbnNlcyA9IHRoaXMuI3F1ZXJ5Q2FjaGUob3BlcmF0aW9uLnJlcXVlc3QsIG9wZXJhdGlvbi5vcHRpb25zKVxuXG4gICAgICAgICAgLy8gVE9ETzogdGhlIHNwZWMgaXMgd3JvbmcsIHRoaXMgaXMgbmVlZGVkIHRvIHBhc3MgV1BUc1xuICAgICAgICAgIGlmIChyZXF1ZXN0UmVzcG9uc2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgLy8gNC4yLjUuMlxuICAgICAgICAgIGZvciAoY29uc3QgcmVxdWVzdFJlc3BvbnNlIG9mIHJlcXVlc3RSZXNwb25zZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGlkeCA9IGNhY2hlLmluZGV4T2YocmVxdWVzdFJlc3BvbnNlKVxuICAgICAgICAgICAgYXNzZXJ0KGlkeCAhPT0gLTEpXG5cbiAgICAgICAgICAgIC8vIDQuMi41LjIuMVxuICAgICAgICAgICAgY2FjaGUuc3BsaWNlKGlkeCwgMSlcbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uLnR5cGUgPT09ICdwdXQnKSB7IC8vIDQuMi42XG4gICAgICAgICAgLy8gNC4yLjYuMVxuICAgICAgICAgIGlmIChvcGVyYXRpb24ucmVzcG9uc2UgPT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAncHV0IG9wZXJhdGlvbiBzaG91bGQgaGF2ZSBhbiBhc3NvY2lhdGVkIHJlc3BvbnNlJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA0LjIuNi4yXG4gICAgICAgICAgY29uc3QgciA9IG9wZXJhdGlvbi5yZXF1ZXN0XG5cbiAgICAgICAgICAvLyA0LjIuNi4zXG4gICAgICAgICAgaWYgKCF1cmxJc0h0dHBIdHRwc1NjaGVtZShyLnVybCkpIHtcbiAgICAgICAgICAgIHRocm93IHdlYmlkbC5lcnJvcnMuZXhjZXB0aW9uKHtcbiAgICAgICAgICAgICAgaGVhZGVyOiAnQ2FjaGUuI2JhdGNoQ2FjaGVPcGVyYXRpb25zJyxcbiAgICAgICAgICAgICAgbWVzc2FnZTogJ2V4cGVjdGVkIGh0dHAgb3IgaHR0cHMgc2NoZW1lJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA0LjIuNi40XG4gICAgICAgICAgaWYgKHIubWV0aG9kICE9PSAnR0VUJykge1xuICAgICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnbm90IGdldCBtZXRob2QnXG4gICAgICAgICAgICB9KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjVcbiAgICAgICAgICBpZiAob3BlcmF0aW9uLm9wdGlvbnMgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhyb3cgd2ViaWRsLmVycm9ycy5leGNlcHRpb24oe1xuICAgICAgICAgICAgICBoZWFkZXI6ICdDYWNoZS4jYmF0Y2hDYWNoZU9wZXJhdGlvbnMnLFxuICAgICAgICAgICAgICBtZXNzYWdlOiAnb3B0aW9ucyBtdXN0IG5vdCBiZSBkZWZpbmVkJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyA0LjIuNi42XG4gICAgICAgICAgcmVxdWVzdFJlc3BvbnNlcyA9IHRoaXMuI3F1ZXJ5Q2FjaGUob3BlcmF0aW9uLnJlcXVlc3QpXG5cbiAgICAgICAgICAvLyA0LjIuNi43XG4gICAgICAgICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2YgcmVxdWVzdFJlc3BvbnNlcykge1xuICAgICAgICAgICAgY29uc3QgaWR4ID0gY2FjaGUuaW5kZXhPZihyZXF1ZXN0UmVzcG9uc2UpXG4gICAgICAgICAgICBhc3NlcnQoaWR4ICE9PSAtMSlcblxuICAgICAgICAgICAgLy8gNC4yLjYuNy4xXG4gICAgICAgICAgICBjYWNoZS5zcGxpY2UoaWR4LCAxKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIC8vIDQuMi42LjhcbiAgICAgICAgICBjYWNoZS5wdXNoKFtvcGVyYXRpb24ucmVxdWVzdCwgb3BlcmF0aW9uLnJlc3BvbnNlXSlcblxuICAgICAgICAgIC8vIDQuMi42LjEwXG4gICAgICAgICAgYWRkZWRJdGVtcy5wdXNoKFtvcGVyYXRpb24ucmVxdWVzdCwgb3BlcmF0aW9uLnJlc3BvbnNlXSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIDQuMi43XG4gICAgICAgIHJlc3VsdExpc3QucHVzaChbb3BlcmF0aW9uLnJlcXVlc3QsIG9wZXJhdGlvbi5yZXNwb25zZV0pXG4gICAgICB9XG5cbiAgICAgIC8vIDQuM1xuICAgICAgcmV0dXJuIHJlc3VsdExpc3RcbiAgICB9IGNhdGNoIChlKSB7IC8vIDUuXG4gICAgICAvLyA1LjFcbiAgICAgIHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdC5sZW5ndGggPSAwXG5cbiAgICAgIC8vIDUuMlxuICAgICAgdGhpcy4jcmVsZXZhbnRSZXF1ZXN0UmVzcG9uc2VMaXN0ID0gYmFja3VwQ2FjaGVcblxuICAgICAgLy8gNS4zXG4gICAgICB0aHJvdyBlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI3F1ZXJ5LWNhY2hlXG4gICAqIEBwYXJhbSB7YW55fSByZXF1ZXN0UXVlcnlcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2NhY2hlJykuQ2FjaGVRdWVyeU9wdGlvbnN9IG9wdGlvbnNcbiAgICogQHBhcmFtIHtyZXF1ZXN0UmVzcG9uc2VMaXN0fSB0YXJnZXRTdG9yYWdlXG4gICAqIEByZXR1cm5zIHtyZXF1ZXN0UmVzcG9uc2VMaXN0fVxuICAgKi9cbiAgI3F1ZXJ5Q2FjaGUgKHJlcXVlc3RRdWVyeSwgb3B0aW9ucywgdGFyZ2V0U3RvcmFnZSkge1xuICAgIC8qKiBAdHlwZSB7cmVxdWVzdFJlc3BvbnNlTGlzdH0gKi9cbiAgICBjb25zdCByZXN1bHRMaXN0ID0gW11cblxuICAgIGNvbnN0IHN0b3JhZ2UgPSB0YXJnZXRTdG9yYWdlID8/IHRoaXMuI3JlbGV2YW50UmVxdWVzdFJlc3BvbnNlTGlzdFxuXG4gICAgZm9yIChjb25zdCByZXF1ZXN0UmVzcG9uc2Ugb2Ygc3RvcmFnZSkge1xuICAgICAgY29uc3QgW2NhY2hlZFJlcXVlc3QsIGNhY2hlZFJlc3BvbnNlXSA9IHJlcXVlc3RSZXNwb25zZVxuICAgICAgaWYgKHRoaXMuI3JlcXVlc3RNYXRjaGVzQ2FjaGVkSXRlbShyZXF1ZXN0UXVlcnksIGNhY2hlZFJlcXVlc3QsIGNhY2hlZFJlc3BvbnNlLCBvcHRpb25zKSkge1xuICAgICAgICByZXN1bHRMaXN0LnB1c2gocmVxdWVzdFJlc3BvbnNlKVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHRMaXN0XG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jcmVxdWVzdC1tYXRjaGVzLWNhY2hlZC1pdGVtLWFsZ29yaXRobVxuICAgKiBAcGFyYW0ge2FueX0gcmVxdWVzdFF1ZXJ5XG4gICAqIEBwYXJhbSB7YW55fSByZXF1ZXN0XG4gICAqIEBwYXJhbSB7YW55IHwgbnVsbH0gcmVzcG9uc2VcbiAgICogQHBhcmFtIHtpbXBvcnQoJy4uLy4uL3R5cGVzL2NhY2hlJykuQ2FjaGVRdWVyeU9wdGlvbnMgfCB1bmRlZmluZWR9IG9wdGlvbnNcbiAgICogQHJldHVybnMge2Jvb2xlYW59XG4gICAqL1xuICAjcmVxdWVzdE1hdGNoZXNDYWNoZWRJdGVtIChyZXF1ZXN0UXVlcnksIHJlcXVlc3QsIHJlc3BvbnNlID0gbnVsbCwgb3B0aW9ucykge1xuICAgIC8vIGlmIChvcHRpb25zPy5pZ25vcmVNZXRob2QgPT09IGZhbHNlICYmIHJlcXVlc3QubWV0aG9kID09PSAnR0VUJykge1xuICAgIC8vICAgcmV0dXJuIGZhbHNlXG4gICAgLy8gfVxuXG4gICAgY29uc3QgcXVlcnlVUkwgPSBuZXcgVVJMKHJlcXVlc3RRdWVyeS51cmwpXG5cbiAgICBjb25zdCBjYWNoZWRVUkwgPSBuZXcgVVJMKHJlcXVlc3QudXJsKVxuXG4gICAgaWYgKG9wdGlvbnM/Lmlnbm9yZVNlYXJjaCkge1xuICAgICAgY2FjaGVkVVJMLnNlYXJjaCA9ICcnXG5cbiAgICAgIHF1ZXJ5VVJMLnNlYXJjaCA9ICcnXG4gICAgfVxuXG4gICAgaWYgKCF1cmxFcXVhbHMocXVlcnlVUkwsIGNhY2hlZFVSTCwgdHJ1ZSkpIHtcbiAgICAgIHJldHVybiBmYWxzZVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIHJlc3BvbnNlID09IG51bGwgfHxcbiAgICAgIG9wdGlvbnM/Lmlnbm9yZVZhcnkgfHxcbiAgICAgICFyZXNwb25zZS5oZWFkZXJzTGlzdC5jb250YWlucygndmFyeScpXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cblxuICAgIGNvbnN0IGZpZWxkVmFsdWVzID0gZ2V0RmllbGRWYWx1ZXMocmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCd2YXJ5JykpXG5cbiAgICBmb3IgKGNvbnN0IGZpZWxkVmFsdWUgb2YgZmllbGRWYWx1ZXMpIHtcbiAgICAgIGlmIChmaWVsZFZhbHVlID09PSAnKicpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlcXVlc3RWYWx1ZSA9IHJlcXVlc3QuaGVhZGVyc0xpc3QuZ2V0KGZpZWxkVmFsdWUpXG4gICAgICBjb25zdCBxdWVyeVZhbHVlID0gcmVxdWVzdFF1ZXJ5LmhlYWRlcnNMaXN0LmdldChmaWVsZFZhbHVlKVxuXG4gICAgICAvLyBJZiBvbmUgaGFzIHRoZSBoZWFkZXIgYW5kIHRoZSBvdGhlciBkb2Vzbid0LCBvciBvbmUgaGFzXG4gICAgICAvLyBhIGRpZmZlcmVudCB2YWx1ZSB0aGFuIHRoZSBvdGhlciwgcmV0dXJuIGZhbHNlXG4gICAgICBpZiAocmVxdWVzdFZhbHVlICE9PSBxdWVyeVZhbHVlKSB7XG4gICAgICAgIHJldHVybiBmYWxzZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB0cnVlXG4gIH1cbn1cblxuT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQ2FjaGUucHJvdG90eXBlLCB7XG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdDYWNoZScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG1hdGNoOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBtYXRjaEFsbDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgYWRkOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBhZGRBbGw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHB1dDoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZGVsZXRlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBrZXlzOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG5jb25zdCBjYWNoZVF1ZXJ5T3B0aW9uQ29udmVydGVycyA9IFtcbiAge1xuICAgIGtleTogJ2lnbm9yZVNlYXJjaCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2lnbm9yZU1ldGhvZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2lnbm9yZVZhcnknLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH1cbl1cblxud2ViaWRsLmNvbnZlcnRlcnMuQ2FjaGVRdWVyeU9wdGlvbnMgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihjYWNoZVF1ZXJ5T3B0aW9uQ29udmVydGVycylcblxud2ViaWRsLmNvbnZlcnRlcnMuTXVsdGlDYWNoZVF1ZXJ5T3B0aW9ucyA9IHdlYmlkbC5kaWN0aW9uYXJ5Q29udmVydGVyKFtcbiAgLi4uY2FjaGVRdWVyeU9wdGlvbkNvbnZlcnRlcnMsXG4gIHtcbiAgICBrZXk6ICdjYWNoZU5hbWUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nXG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLlJlc3BvbnNlID0gd2ViaWRsLmludGVyZmFjZUNvbnZlcnRlcihSZXNwb25zZSlcblxud2ViaWRsLmNvbnZlcnRlcnNbJ3NlcXVlbmNlPFJlcXVlc3RJbmZvPiddID0gd2ViaWRsLnNlcXVlbmNlQ29udmVydGVyKFxuICB3ZWJpZGwuY29udmVydGVycy5SZXF1ZXN0SW5mb1xuKVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgQ2FjaGVcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBrQ29uc3RydWN0IH0gPSByZXF1aXJlKCcuL3N5bWJvbHMnKVxuY29uc3QgeyBDYWNoZSB9ID0gcmVxdWlyZSgnLi9jYWNoZScpXG5jb25zdCB7IHdlYmlkbCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvd2ViaWRsJylcbmNvbnN0IHsga0VudW1lcmFibGVQcm9wZXJ0eSB9ID0gcmVxdWlyZSgnLi4vY29yZS91dGlsJylcblxuY2xhc3MgQ2FjaGVTdG9yYWdlIHtcbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2Rmbi1yZWxldmFudC1uYW1lLXRvLWNhY2hlLW1hcFxuICAgKiBAdHlwZSB7TWFwPHN0cmluZywgaW1wb3J0KCcuL2NhY2hlJykucmVxdWVzdFJlc3BvbnNlTGlzdH1cbiAgICovXG4gICNjYWNoZXMgPSBuZXcgTWFwKClcblxuICBjb25zdHJ1Y3RvciAoKSB7XG4gICAgaWYgKGFyZ3VtZW50c1swXSAhPT0ga0NvbnN0cnVjdCkge1xuICAgICAgd2ViaWRsLmlsbGVnYWxDb25zdHJ1Y3RvcigpXG4gICAgfVxuICB9XG5cbiAgYXN5bmMgbWF0Y2ggKHJlcXVlc3QsIG9wdGlvbnMgPSB7fSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENhY2hlU3RvcmFnZSlcbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnQ2FjaGVTdG9yYWdlLm1hdGNoJyB9KVxuXG4gICAgcmVxdWVzdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLlJlcXVlc3RJbmZvKHJlcXVlc3QpXG4gICAgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzLk11bHRpQ2FjaGVRdWVyeU9wdGlvbnMob3B0aW9ucylcblxuICAgIC8vIDEuXG4gICAgaWYgKG9wdGlvbnMuY2FjaGVOYW1lICE9IG51bGwpIHtcbiAgICAgIC8vIDEuMS4xLjFcbiAgICAgIGlmICh0aGlzLiNjYWNoZXMuaGFzKG9wdGlvbnMuY2FjaGVOYW1lKSkge1xuICAgICAgICAvLyAxLjEuMS4xLjFcbiAgICAgICAgY29uc3QgY2FjaGVMaXN0ID0gdGhpcy4jY2FjaGVzLmdldChvcHRpb25zLmNhY2hlTmFtZSlcbiAgICAgICAgY29uc3QgY2FjaGUgPSBuZXcgQ2FjaGUoa0NvbnN0cnVjdCwgY2FjaGVMaXN0KVxuXG4gICAgICAgIHJldHVybiBhd2FpdCBjYWNoZS5tYXRjaChyZXF1ZXN0LCBvcHRpb25zKVxuICAgICAgfVxuICAgIH0gZWxzZSB7IC8vIDIuXG4gICAgICAvLyAyLjJcbiAgICAgIGZvciAoY29uc3QgY2FjaGVMaXN0IG9mIHRoaXMuI2NhY2hlcy52YWx1ZXMoKSkge1xuICAgICAgICBjb25zdCBjYWNoZSA9IG5ldyBDYWNoZShrQ29uc3RydWN0LCBjYWNoZUxpc3QpXG5cbiAgICAgICAgLy8gMi4yLjEuMlxuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGNhY2hlLm1hdGNoKHJlcXVlc3QsIG9wdGlvbnMpXG5cbiAgICAgICAgaWYgKHJlc3BvbnNlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2VcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNjYWNoZS1zdG9yYWdlLWhhc1xuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgYXN5bmMgaGFzIChjYWNoZU5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlU3RvcmFnZS5oYXMnIH0pXG5cbiAgICBjYWNoZU5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoY2FjaGVOYW1lKVxuXG4gICAgLy8gMi4xLjFcbiAgICAvLyAyLjJcbiAgICByZXR1cm4gdGhpcy4jY2FjaGVzLmhhcyhjYWNoZU5hbWUpXG4gIH1cblxuICAvKipcbiAgICogQHNlZSBodHRwczovL3czYy5naXRodWIuaW8vU2VydmljZVdvcmtlci8jZG9tLWNhY2hlc3RvcmFnZS1vcGVuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBjYWNoZU5hbWVcbiAgICogQHJldHVybnMge1Byb21pc2U8Q2FjaGU+fVxuICAgKi9cbiAgYXN5bmMgb3BlbiAoY2FjaGVOYW1lKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgQ2FjaGVTdG9yYWdlKVxuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdDYWNoZVN0b3JhZ2Uub3BlbicgfSlcblxuICAgIGNhY2hlTmFtZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyhjYWNoZU5hbWUpXG5cbiAgICAvLyAyLjFcbiAgICBpZiAodGhpcy4jY2FjaGVzLmhhcyhjYWNoZU5hbWUpKSB7XG4gICAgICAvLyBhd2FpdCBjYWNoZXMub3BlbigndjEnKSAhPT0gYXdhaXQgY2FjaGVzLm9wZW4oJ3YxJylcblxuICAgICAgLy8gMi4xLjFcbiAgICAgIGNvbnN0IGNhY2hlID0gdGhpcy4jY2FjaGVzLmdldChjYWNoZU5hbWUpXG5cbiAgICAgIC8vIDIuMS4xLjFcbiAgICAgIHJldHVybiBuZXcgQ2FjaGUoa0NvbnN0cnVjdCwgY2FjaGUpXG4gICAgfVxuXG4gICAgLy8gMi4yXG4gICAgY29uc3QgY2FjaGUgPSBbXVxuXG4gICAgLy8gMi4zXG4gICAgdGhpcy4jY2FjaGVzLnNldChjYWNoZU5hbWUsIGNhY2hlKVxuXG4gICAgLy8gMi40XG4gICAgcmV0dXJuIG5ldyBDYWNoZShrQ29uc3RydWN0LCBjYWNoZSlcbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vdzNjLmdpdGh1Yi5pby9TZXJ2aWNlV29ya2VyLyNjYWNoZS1zdG9yYWdlLWRlbGV0ZVxuICAgKiBAcGFyYW0ge3N0cmluZ30gY2FjaGVOYW1lXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPGJvb2xlYW4+fVxuICAgKi9cbiAgYXN5bmMgZGVsZXRlIChjYWNoZU5hbWUpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0NhY2hlU3RvcmFnZS5kZWxldGUnIH0pXG5cbiAgICBjYWNoZU5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcoY2FjaGVOYW1lKVxuXG4gICAgcmV0dXJuIHRoaXMuI2NhY2hlcy5kZWxldGUoY2FjaGVOYW1lKVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93M2MuZ2l0aHViLmlvL1NlcnZpY2VXb3JrZXIvI2NhY2hlLXN0b3JhZ2Uta2V5c1xuICAgKiBAcmV0dXJucyB7c3RyaW5nW119XG4gICAqL1xuICBhc3luYyBrZXlzICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDYWNoZVN0b3JhZ2UpXG5cbiAgICAvLyAyLjFcbiAgICBjb25zdCBrZXlzID0gdGhpcy4jY2FjaGVzLmtleXMoKVxuXG4gICAgLy8gMi4yXG4gICAgcmV0dXJuIFsuLi5rZXlzXVxuICB9XG59XG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKENhY2hlU3RvcmFnZS5wcm90b3R5cGUsIHtcbiAgW1N5bWJvbC50b1N0cmluZ1RhZ106IHtcbiAgICB2YWx1ZTogJ0NhY2hlU3RvcmFnZScsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIG1hdGNoOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBoYXM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9wZW46IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGRlbGV0ZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAga2V5czoga0VudW1lcmFibGVQcm9wZXJ0eVxufSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIENhY2hlU3RvcmFnZVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBodHRwczovL3dpY2cuZ2l0aHViLmlvL2Nvb2tpZS1zdG9yZS8jY29va2llLW1heGltdW0tYXR0cmlidXRlLXZhbHVlLXNpemVcbmNvbnN0IG1heEF0dHJpYnV0ZVZhbHVlU2l6ZSA9IDEwMjRcblxuLy8gaHR0cHM6Ly93aWNnLmdpdGh1Yi5pby9jb29raWUtc3RvcmUvI2Nvb2tpZS1tYXhpbXVtLW5hbWUtdmFsdWUtcGFpci1zaXplXG5jb25zdCBtYXhOYW1lVmFsdWVQYWlyU2l6ZSA9IDQwOTZcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIG1heEF0dHJpYnV0ZVZhbHVlU2l6ZSxcbiAgbWF4TmFtZVZhbHVlUGFpclNpemVcbn1cbiIsICIndXNlIHN0cmljdCdcblxuLyoqXG4gKiBAcGFyYW0ge3N0cmluZ30gdmFsdWVcbiAqIEByZXR1cm5zIHtib29sZWFufVxuICovXG5mdW5jdGlvbiBpc0NUTEV4Y2x1ZGluZ0h0YWIgKHZhbHVlKSB7XG4gIGlmICh2YWx1ZS5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGZvciAoY29uc3QgY2hhciBvZiB2YWx1ZSkge1xuICAgIGNvbnN0IGNvZGUgPSBjaGFyLmNoYXJDb2RlQXQoMClcblxuICAgIGlmIChcbiAgICAgIChjb2RlID49IDB4MDAgfHwgY29kZSA8PSAweDA4KSB8fFxuICAgICAgKGNvZGUgPj0gMHgwQSB8fCBjb2RlIDw9IDB4MUYpIHx8XG4gICAgICBjb2RlID09PSAweDdGXG4gICAgKSB7XG4gICAgICByZXR1cm4gZmFsc2VcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gQ0hBUiAgICAgICAgICAgPSA8YW55IFVTLUFTQ0lJIGNoYXJhY3RlciAob2N0ZXRzIDAgLSAxMjcpPlxuIHRva2VuICAgICAgICAgID0gMSo8YW55IENIQVIgZXhjZXB0IENUTHMgb3Igc2VwYXJhdG9ycz5cbiBzZXBhcmF0b3JzICAgICA9IFwiKFwiIHwgXCIpXCIgfCBcIjxcIiB8IFwiPlwiIHwgXCJAXCJcbiAgICAgICAgICAgICAgICB8IFwiLFwiIHwgXCI7XCIgfCBcIjpcIiB8IFwiXFxcIiB8IDxcIj5cbiAgICAgICAgICAgICAgICB8IFwiL1wiIHwgXCJbXCIgfCBcIl1cIiB8IFwiP1wiIHwgXCI9XCJcbiAgICAgICAgICAgICAgICB8IFwie1wiIHwgXCJ9XCIgfCBTUCB8IEhUXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvb2tpZU5hbWUgKG5hbWUpIHtcbiAgZm9yIChjb25zdCBjaGFyIG9mIG5hbWUpIHtcbiAgICBjb25zdCBjb2RlID0gY2hhci5jaGFyQ29kZUF0KDApXG5cbiAgICBpZiAoXG4gICAgICAoY29kZSA8PSAweDIwIHx8IGNvZGUgPiAweDdGKSB8fFxuICAgICAgY2hhciA9PT0gJygnIHx8XG4gICAgICBjaGFyID09PSAnKScgfHxcbiAgICAgIGNoYXIgPT09ICc+JyB8fFxuICAgICAgY2hhciA9PT0gJzwnIHx8XG4gICAgICBjaGFyID09PSAnQCcgfHxcbiAgICAgIGNoYXIgPT09ICcsJyB8fFxuICAgICAgY2hhciA9PT0gJzsnIHx8XG4gICAgICBjaGFyID09PSAnOicgfHxcbiAgICAgIGNoYXIgPT09ICdcXFxcJyB8fFxuICAgICAgY2hhciA9PT0gJ1wiJyB8fFxuICAgICAgY2hhciA9PT0gJy8nIHx8XG4gICAgICBjaGFyID09PSAnWycgfHxcbiAgICAgIGNoYXIgPT09ICddJyB8fFxuICAgICAgY2hhciA9PT0gJz8nIHx8XG4gICAgICBjaGFyID09PSAnPScgfHxcbiAgICAgIGNoYXIgPT09ICd7JyB8fFxuICAgICAgY2hhciA9PT0gJ30nXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29va2llIG5hbWUnKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiBjb29raWUtdmFsdWUgICAgICA9ICpjb29raWUtb2N0ZXQgLyAoIERRVU9URSAqY29va2llLW9jdGV0IERRVU9URSApXG4gY29va2llLW9jdGV0ICAgICAgPSAleDIxIC8gJXgyMy0yQiAvICV4MkQtM0EgLyAleDNDLTVCIC8gJXg1RC03RVxuICAgICAgICAgICAgICAgICAgICAgICA7IFVTLUFTQ0lJIGNoYXJhY3RlcnMgZXhjbHVkaW5nIENUTHMsXG4gICAgICAgICAgICAgICAgICAgICAgIDsgd2hpdGVzcGFjZSBEUVVPVEUsIGNvbW1hLCBzZW1pY29sb24sXG4gICAgICAgICAgICAgICAgICAgICAgIDsgYW5kIGJhY2tzbGFzaFxuICogQHBhcmFtIHtzdHJpbmd9IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llVmFsdWUgKHZhbHVlKSB7XG4gIGZvciAoY29uc3QgY2hhciBvZiB2YWx1ZSkge1xuICAgIGNvbnN0IGNvZGUgPSBjaGFyLmNoYXJDb2RlQXQoMClcblxuICAgIGlmIChcbiAgICAgIGNvZGUgPCAweDIxIHx8IC8vIGV4Y2x1ZGUgQ1RMcyAoMC0zMSlcbiAgICAgIGNvZGUgPT09IDB4MjIgfHxcbiAgICAgIGNvZGUgPT09IDB4MkMgfHxcbiAgICAgIGNvZGUgPT09IDB4M0IgfHxcbiAgICAgIGNvZGUgPT09IDB4NUMgfHxcbiAgICAgIGNvZGUgPiAweDdFIC8vIG5vbi1hc2NpaVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGhlYWRlciB2YWx1ZScpXG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogcGF0aC12YWx1ZSAgICAgICAgPSA8YW55IENIQVIgZXhjZXB0IENUTHMgb3IgXCI7XCI+XG4gKiBAcGFyYW0ge3N0cmluZ30gcGF0aFxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvb2tpZVBhdGggKHBhdGgpIHtcbiAgZm9yIChjb25zdCBjaGFyIG9mIHBhdGgpIHtcbiAgICBjb25zdCBjb2RlID0gY2hhci5jaGFyQ29kZUF0KDApXG5cbiAgICBpZiAoY29kZSA8IDB4MjEgfHwgY2hhciA9PT0gJzsnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY29va2llIHBhdGgnKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIEkgaGF2ZSBubyBpZGVhIHdoeSB0aGVzZSB2YWx1ZXMgYXJlbid0IGFsbG93ZWQgdG8gYmUgaG9uZXN0LFxuICogYnV0IERlbm8gdGVzdHMgdGhlc2UuIC0gS2hhZnJhXG4gKiBAcGFyYW0ge3N0cmluZ30gZG9tYWluXG4gKi9cbmZ1bmN0aW9uIHZhbGlkYXRlQ29va2llRG9tYWluIChkb21haW4pIHtcbiAgaWYgKFxuICAgIGRvbWFpbi5zdGFydHNXaXRoKCctJykgfHxcbiAgICBkb21haW4uZW5kc1dpdGgoJy4nKSB8fFxuICAgIGRvbWFpbi5lbmRzV2l0aCgnLScpXG4gICkge1xuICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb29raWUgZG9tYWluJylcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzcyMzEjc2VjdGlvbi03LjEuMS4xXG4gKiBAcGFyYW0ge251bWJlcnxEYXRlfSBkYXRlXG4gIElNRi1maXhkYXRlICA9IGRheS1uYW1lIFwiLFwiIFNQIGRhdGUxIFNQIHRpbWUtb2YtZGF5IFNQIEdNVFxuICA7IGZpeGVkIGxlbmd0aC96b25lL2NhcGl0YWxpemF0aW9uIHN1YnNldCBvZiB0aGUgZm9ybWF0XG4gIDsgc2VlIFNlY3Rpb24gMy4zIG9mIFtSRkM1MzIyXVxuXG4gIGRheS1uYW1lICAgICA9ICV4NEQuNkYuNkUgOyBcIk1vblwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NTQuNzUuNjUgOyBcIlR1ZVwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NTcuNjUuNjQgOyBcIldlZFwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NTQuNjguNzUgOyBcIlRodVwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NDYuNzIuNjkgOyBcIkZyaVwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NTMuNjEuNzQgOyBcIlNhdFwiLCBjYXNlLXNlbnNpdGl2ZVxuICAgICAgICAgICAgICAvICV4NTMuNzUuNkUgOyBcIlN1blwiLCBjYXNlLXNlbnNpdGl2ZVxuICBkYXRlMSAgICAgICAgPSBkYXkgU1AgbW9udGggU1AgeWVhclxuICAgICAgICAgICAgICAgICAgOyBlLmcuLCAwMiBKdW4gMTk4MlxuXG4gIGRheSAgICAgICAgICA9IDJESUdJVFxuICBtb250aCAgICAgICAgPSAleDRBLjYxLjZFIDsgXCJKYW5cIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDQ2LjY1LjYyIDsgXCJGZWJcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDRELjYxLjcyIDsgXCJNYXJcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDQxLjcwLjcyIDsgXCJBcHJcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDRELjYxLjc5IDsgXCJNYXlcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDRBLjc1LjZFIDsgXCJKdW5cIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDRBLjc1LjZDIDsgXCJKdWxcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDQxLjc1LjY3IDsgXCJBdWdcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDUzLjY1LjcwIDsgXCJTZXBcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDRGLjYzLjc0IDsgXCJPY3RcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDRFLjZGLjc2IDsgXCJOb3ZcIiwgY2FzZS1zZW5zaXRpdmVcbiAgICAgICAgICAgICAgLyAleDQ0LjY1LjYzIDsgXCJEZWNcIiwgY2FzZS1zZW5zaXRpdmVcbiAgeWVhciAgICAgICAgID0gNERJR0lUXG5cbiAgR01UICAgICAgICAgID0gJXg0Ny40RC41NCA7IFwiR01UXCIsIGNhc2Utc2Vuc2l0aXZlXG5cbiAgdGltZS1vZi1kYXkgID0gaG91ciBcIjpcIiBtaW51dGUgXCI6XCIgc2Vjb25kXG4gICAgICAgICAgICAgIDsgMDA6MDA6MDAgLSAyMzo1OTo2MCAobGVhcCBzZWNvbmQpXG5cbiAgaG91ciAgICAgICAgID0gMkRJR0lUXG4gIG1pbnV0ZSAgICAgICA9IDJESUdJVFxuICBzZWNvbmQgICAgICAgPSAyRElHSVRcbiAqL1xuZnVuY3Rpb24gdG9JTUZEYXRlIChkYXRlKSB7XG4gIGlmICh0eXBlb2YgZGF0ZSA9PT0gJ251bWJlcicpIHtcbiAgICBkYXRlID0gbmV3IERhdGUoZGF0ZSlcbiAgfVxuXG4gIGNvbnN0IGRheXMgPSBbXG4gICAgJ1N1bicsICdNb24nLCAnVHVlJywgJ1dlZCcsXG4gICAgJ1RodScsICdGcmknLCAnU2F0J1xuICBdXG5cbiAgY29uc3QgbW9udGhzID0gW1xuICAgICdKYW4nLCAnRmViJywgJ01hcicsICdBcHInLCAnTWF5JywgJ0p1bicsXG4gICAgJ0p1bCcsICdBdWcnLCAnU2VwJywgJ09jdCcsICdOb3YnLCAnRGVjJ1xuICBdXG5cbiAgY29uc3QgZGF5TmFtZSA9IGRheXNbZGF0ZS5nZXRVVENEYXkoKV1cbiAgY29uc3QgZGF5ID0gZGF0ZS5nZXRVVENEYXRlKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXG4gIGNvbnN0IG1vbnRoID0gbW9udGhzW2RhdGUuZ2V0VVRDTW9udGgoKV1cbiAgY29uc3QgeWVhciA9IGRhdGUuZ2V0VVRDRnVsbFllYXIoKVxuICBjb25zdCBob3VyID0gZGF0ZS5nZXRVVENIb3VycygpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgJzAnKVxuICBjb25zdCBtaW51dGUgPSBkYXRlLmdldFVUQ01pbnV0ZXMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICcwJylcbiAgY29uc3Qgc2Vjb25kID0gZGF0ZS5nZXRVVENTZWNvbmRzKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAnMCcpXG5cbiAgcmV0dXJuIGAke2RheU5hbWV9LCAke2RheX0gJHttb250aH0gJHt5ZWFyfSAke2hvdXJ9OiR7bWludXRlfToke3NlY29uZH0gR01UYFxufVxuXG4vKipcbiBtYXgtYWdlLWF2ICAgICAgICA9IFwiTWF4LUFnZT1cIiBub24temVyby1kaWdpdCAqRElHSVRcbiAgICAgICAgICAgICAgICAgICAgICAgOyBJbiBwcmFjdGljZSwgYm90aCBleHBpcmVzLWF2IGFuZCBtYXgtYWdlLWF2XG4gICAgICAgICAgICAgICAgICAgICAgIDsgYXJlIGxpbWl0ZWQgdG8gZGF0ZXMgcmVwcmVzZW50YWJsZSBieSB0aGVcbiAgICAgICAgICAgICAgICAgICAgICAgOyB1c2VyIGFnZW50LlxuICogQHBhcmFtIHtudW1iZXJ9IG1heEFnZVxuICovXG5mdW5jdGlvbiB2YWxpZGF0ZUNvb2tpZU1heEFnZSAobWF4QWdlKSB7XG4gIGlmIChtYXhBZ2UgPCAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvb2tpZSBtYXgtYWdlJylcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93d3cucmZjLWVkaXRvci5vcmcvcmZjL3JmYzYyNjUjc2VjdGlvbi00LjEuMVxuICogQHBhcmFtIHtpbXBvcnQoJy4vaW5kZXgnKS5Db29raWV9IGNvb2tpZVxuICovXG5mdW5jdGlvbiBzdHJpbmdpZnkgKGNvb2tpZSkge1xuICBpZiAoY29va2llLm5hbWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHZhbGlkYXRlQ29va2llTmFtZShjb29raWUubmFtZSlcbiAgdmFsaWRhdGVDb29raWVWYWx1ZShjb29raWUudmFsdWUpXG5cbiAgY29uc3Qgb3V0ID0gW2Ake2Nvb2tpZS5uYW1lfT0ke2Nvb2tpZS52YWx1ZX1gXVxuXG4gIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLWNvb2tpZS1wcmVmaXhlcy0wMCNzZWN0aW9uLTMuMVxuICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1jb29raWUtcHJlZml4ZXMtMDAjc2VjdGlvbi0zLjJcbiAgaWYgKGNvb2tpZS5uYW1lLnN0YXJ0c1dpdGgoJ19fU2VjdXJlLScpKSB7XG4gICAgY29va2llLnNlY3VyZSA9IHRydWVcbiAgfVxuXG4gIGlmIChjb29raWUubmFtZS5zdGFydHNXaXRoKCdfX0hvc3QtJykpIHtcbiAgICBjb29raWUuc2VjdXJlID0gdHJ1ZVxuICAgIGNvb2tpZS5kb21haW4gPSBudWxsXG4gICAgY29va2llLnBhdGggPSAnLydcbiAgfVxuXG4gIGlmIChjb29raWUuc2VjdXJlKSB7XG4gICAgb3V0LnB1c2goJ1NlY3VyZScpXG4gIH1cblxuICBpZiAoY29va2llLmh0dHBPbmx5KSB7XG4gICAgb3V0LnB1c2goJ0h0dHBPbmx5JylcbiAgfVxuXG4gIGlmICh0eXBlb2YgY29va2llLm1heEFnZSA9PT0gJ251bWJlcicpIHtcbiAgICB2YWxpZGF0ZUNvb2tpZU1heEFnZShjb29raWUubWF4QWdlKVxuICAgIG91dC5wdXNoKGBNYXgtQWdlPSR7Y29va2llLm1heEFnZX1gKVxuICB9XG5cbiAgaWYgKGNvb2tpZS5kb21haW4pIHtcbiAgICB2YWxpZGF0ZUNvb2tpZURvbWFpbihjb29raWUuZG9tYWluKVxuICAgIG91dC5wdXNoKGBEb21haW49JHtjb29raWUuZG9tYWlufWApXG4gIH1cblxuICBpZiAoY29va2llLnBhdGgpIHtcbiAgICB2YWxpZGF0ZUNvb2tpZVBhdGgoY29va2llLnBhdGgpXG4gICAgb3V0LnB1c2goYFBhdGg9JHtjb29raWUucGF0aH1gKVxuICB9XG5cbiAgaWYgKGNvb2tpZS5leHBpcmVzICYmIGNvb2tpZS5leHBpcmVzLnRvU3RyaW5nKCkgIT09ICdJbnZhbGlkIERhdGUnKSB7XG4gICAgb3V0LnB1c2goYEV4cGlyZXM9JHt0b0lNRkRhdGUoY29va2llLmV4cGlyZXMpfWApXG4gIH1cblxuICBpZiAoY29va2llLnNhbWVTaXRlKSB7XG4gICAgb3V0LnB1c2goYFNhbWVTaXRlPSR7Y29va2llLnNhbWVTaXRlfWApXG4gIH1cblxuICBmb3IgKGNvbnN0IHBhcnQgb2YgY29va2llLnVucGFyc2VkKSB7XG4gICAgaWYgKCFwYXJ0LmluY2x1ZGVzKCc9JykpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCB1bnBhcnNlZCcpXG4gICAgfVxuXG4gICAgY29uc3QgW2tleSwgLi4udmFsdWVdID0gcGFydC5zcGxpdCgnPScpXG5cbiAgICBvdXQucHVzaChgJHtrZXkudHJpbSgpfT0ke3ZhbHVlLmpvaW4oJz0nKX1gKVxuICB9XG5cbiAgcmV0dXJuIG91dC5qb2luKCc7ICcpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBpc0NUTEV4Y2x1ZGluZ0h0YWIsXG4gIHZhbGlkYXRlQ29va2llTmFtZSxcbiAgdmFsaWRhdGVDb29raWVQYXRoLFxuICB2YWxpZGF0ZUNvb2tpZVZhbHVlLFxuICB0b0lNRkRhdGUsXG4gIHN0cmluZ2lmeVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IG1heE5hbWVWYWx1ZVBhaXJTaXplLCBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsgaXNDVExFeGNsdWRpbmdIdGFiIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZGF0YVVSTCcpXG5jb25zdCBhc3NlcnQgPSByZXF1aXJlKCdhc3NlcnQnKVxuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBQYXJzZXMgdGhlIGZpZWxkLXZhbHVlIGF0dHJpYnV0ZXMgb2YgYSBzZXQtY29va2llIGhlYWRlciBzdHJpbmcuXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjRcbiAqIEBwYXJhbSB7c3RyaW5nfSBoZWFkZXJcbiAqIEByZXR1cm5zIGlmIHRoZSBoZWFkZXIgaXMgaW52YWxpZCwgbnVsbCB3aWxsIGJlIHJldHVybmVkXG4gKi9cbmZ1bmN0aW9uIHBhcnNlU2V0Q29va2llIChoZWFkZXIpIHtcbiAgLy8gMS4gSWYgdGhlIHNldC1jb29raWUtc3RyaW5nIGNvbnRhaW5zIGEgJXgwMC0wOCAvICV4MEEtMUYgLyAleDdGXG4gIC8vICAgIGNoYXJhY3RlciAoQ1RMIGNoYXJhY3RlcnMgZXhjbHVkaW5nIEhUQUIpOiBBYm9ydCB0aGVzZSBzdGVwcyBhbmRcbiAgLy8gICAgaWdub3JlIHRoZSBzZXQtY29va2llLXN0cmluZyBlbnRpcmVseS5cbiAgaWYgKGlzQ1RMRXhjbHVkaW5nSHRhYihoZWFkZXIpKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIGxldCBuYW1lVmFsdWVQYWlyID0gJydcbiAgbGV0IHVucGFyc2VkQXR0cmlidXRlcyA9ICcnXG4gIGxldCBuYW1lID0gJydcbiAgbGV0IHZhbHVlID0gJydcblxuICAvLyAyLiBJZiB0aGUgc2V0LWNvb2tpZS1zdHJpbmcgY29udGFpbnMgYSAleDNCIChcIjtcIikgY2hhcmFjdGVyOlxuICBpZiAoaGVhZGVyLmluY2x1ZGVzKCc7JykpIHtcbiAgICAvLyAxLiBUaGUgbmFtZS12YWx1ZS1wYWlyIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgY2hhcmFjdGVycyB1cCB0byxcbiAgICAvLyAgICBidXQgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0IgKFwiO1wiKSwgYW5kIHRoZSB1bnBhcnNlZC1cbiAgICAvLyAgICBhdHRyaWJ1dGVzIGNvbnNpc3Qgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgc2V0LWNvb2tpZS1zdHJpbmdcbiAgICAvLyAgICAoaW5jbHVkaW5nIHRoZSAleDNCIChcIjtcIikgaW4gcXVlc3Rpb24pLlxuICAgIGNvbnN0IHBvc2l0aW9uID0geyBwb3NpdGlvbjogMCB9XG5cbiAgICBuYW1lVmFsdWVQYWlyID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoJzsnLCBoZWFkZXIsIHBvc2l0aW9uKVxuICAgIHVucGFyc2VkQXR0cmlidXRlcyA9IGhlYWRlci5zbGljZShwb3NpdGlvbi5wb3NpdGlvbilcbiAgfSBlbHNlIHtcbiAgICAvLyBPdGhlcndpc2U6XG5cbiAgICAvLyAxLiBUaGUgbmFtZS12YWx1ZS1wYWlyIHN0cmluZyBjb25zaXN0cyBvZiBhbGwgdGhlIGNoYXJhY3RlcnNcbiAgICAvLyAgICBjb250YWluZWQgaW4gdGhlIHNldC1jb29raWUtc3RyaW5nLCBhbmQgdGhlIHVucGFyc2VkLVxuICAgIC8vICAgIGF0dHJpYnV0ZXMgaXMgdGhlIGVtcHR5IHN0cmluZy5cbiAgICBuYW1lVmFsdWVQYWlyID0gaGVhZGVyXG4gIH1cblxuICAvLyAzLiBJZiB0aGUgbmFtZS12YWx1ZS1wYWlyIHN0cmluZyBsYWNrcyBhICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXIsIHRoZW5cbiAgLy8gICAgdGhlIG5hbWUgc3RyaW5nIGlzIGVtcHR5LCBhbmQgdGhlIHZhbHVlIHN0cmluZyBpcyB0aGUgdmFsdWUgb2ZcbiAgLy8gICAgbmFtZS12YWx1ZS1wYWlyLlxuICBpZiAoIW5hbWVWYWx1ZVBhaXIuaW5jbHVkZXMoJz0nKSkge1xuICAgIHZhbHVlID0gbmFtZVZhbHVlUGFpclxuICB9IGVsc2Uge1xuICAgIC8vICAgIE90aGVyd2lzZSwgdGhlIG5hbWUgc3RyaW5nIGNvbnNpc3RzIG9mIHRoZSBjaGFyYWN0ZXJzIHVwIHRvLCBidXRcbiAgICAvLyAgICBub3QgaW5jbHVkaW5nLCB0aGUgZmlyc3QgJXgzRCAoXCI9XCIpIGNoYXJhY3RlciwgYW5kIHRoZSAocG9zc2libHlcbiAgICAvLyAgICBlbXB0eSkgdmFsdWUgc3RyaW5nIGNvbnNpc3RzIG9mIHRoZSBjaGFyYWN0ZXJzIGFmdGVyIHRoZSBmaXJzdFxuICAgIC8vICAgICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXIuXG4gICAgY29uc3QgcG9zaXRpb24gPSB7IHBvc2l0aW9uOiAwIH1cbiAgICBuYW1lID0gY29sbGVjdEFTZXF1ZW5jZU9mQ29kZVBvaW50c0Zhc3QoXG4gICAgICAnPScsXG4gICAgICBuYW1lVmFsdWVQYWlyLFxuICAgICAgcG9zaXRpb25cbiAgICApXG4gICAgdmFsdWUgPSBuYW1lVmFsdWVQYWlyLnNsaWNlKHBvc2l0aW9uLnBvc2l0aW9uICsgMSlcbiAgfVxuXG4gIC8vIDQuIFJlbW92ZSBhbnkgbGVhZGluZyBvciB0cmFpbGluZyBXU1AgY2hhcmFjdGVycyBmcm9tIHRoZSBuYW1lXG4gIC8vICAgIHN0cmluZyBhbmQgdGhlIHZhbHVlIHN0cmluZy5cbiAgbmFtZSA9IG5hbWUudHJpbSgpXG4gIHZhbHVlID0gdmFsdWUudHJpbSgpXG5cbiAgLy8gNS4gSWYgdGhlIHN1bSBvZiB0aGUgbGVuZ3RocyBvZiB0aGUgbmFtZSBzdHJpbmcgYW5kIHRoZSB2YWx1ZSBzdHJpbmdcbiAgLy8gICAgaXMgbW9yZSB0aGFuIDQwOTYgb2N0ZXRzLCBhYm9ydCB0aGVzZSBzdGVwcyBhbmQgaWdub3JlIHRoZSBzZXQtXG4gIC8vICAgIGNvb2tpZS1zdHJpbmcgZW50aXJlbHkuXG4gIGlmIChuYW1lLmxlbmd0aCArIHZhbHVlLmxlbmd0aCA+IG1heE5hbWVWYWx1ZVBhaXJTaXplKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIDYuIFRoZSBjb29raWUtbmFtZSBpcyB0aGUgbmFtZSBzdHJpbmcsIGFuZCB0aGUgY29va2llLXZhbHVlIGlzIHRoZVxuICAvLyAgICB2YWx1ZSBzdHJpbmcuXG4gIHJldHVybiB7XG4gICAgbmFtZSwgdmFsdWUsIC4uLnBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcylcbiAgfVxufVxuXG4vKipcbiAqIFBhcnNlcyB0aGUgcmVtYWluaW5nIGF0dHJpYnV0ZXMgb2YgYSBzZXQtY29va2llIGhlYWRlclxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40XG4gKiBAcGFyYW0ge3N0cmluZ30gdW5wYXJzZWRBdHRyaWJ1dGVzXG4gKiBAcGFyYW0ge1tPYmplY3QuPHN0cmluZywgdW5rbm93bj5dPXt9fSBjb29raWVBdHRyaWJ1dGVMaXN0XG4gKi9cbmZ1bmN0aW9uIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzICh1bnBhcnNlZEF0dHJpYnV0ZXMsIGNvb2tpZUF0dHJpYnV0ZUxpc3QgPSB7fSkge1xuICAvLyAxLiBJZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcyBzdHJpbmcgaXMgZW1wdHksIHNraXAgdGhlIHJlc3Qgb2ZcbiAgLy8gICAgdGhlc2Ugc3RlcHMuXG4gIGlmICh1bnBhcnNlZEF0dHJpYnV0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGNvb2tpZUF0dHJpYnV0ZUxpc3RcbiAgfVxuXG4gIC8vIDIuIERpc2NhcmQgdGhlIGZpcnN0IGNoYXJhY3RlciBvZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcyAod2hpY2hcbiAgLy8gICAgd2lsbCBiZSBhICV4M0IgKFwiO1wiKSBjaGFyYWN0ZXIpLlxuICBhc3NlcnQodW5wYXJzZWRBdHRyaWJ1dGVzWzBdID09PSAnOycpXG4gIHVucGFyc2VkQXR0cmlidXRlcyA9IHVucGFyc2VkQXR0cmlidXRlcy5zbGljZSgxKVxuXG4gIGxldCBjb29raWVBdiA9ICcnXG5cbiAgLy8gMy4gSWYgdGhlIHJlbWFpbmluZyB1bnBhcnNlZC1hdHRyaWJ1dGVzIGNvbnRhaW5zIGEgJXgzQiAoXCI7XCIpXG4gIC8vICAgIGNoYXJhY3RlcjpcbiAgaWYgKHVucGFyc2VkQXR0cmlidXRlcy5pbmNsdWRlcygnOycpKSB7XG4gICAgLy8gMS4gQ29uc3VtZSB0aGUgY2hhcmFjdGVycyBvZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcyB1cCB0bywgYnV0XG4gICAgLy8gICAgbm90IGluY2x1ZGluZywgdGhlIGZpcnN0ICV4M0IgKFwiO1wiKSBjaGFyYWN0ZXIuXG4gICAgY29va2llQXYgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICc7JyxcbiAgICAgIHVucGFyc2VkQXR0cmlidXRlcyxcbiAgICAgIHsgcG9zaXRpb246IDAgfVxuICAgIClcbiAgICB1bnBhcnNlZEF0dHJpYnV0ZXMgPSB1bnBhcnNlZEF0dHJpYnV0ZXMuc2xpY2UoY29va2llQXYubGVuZ3RoKVxuICB9IGVsc2Uge1xuICAgIC8vIE90aGVyd2lzZTpcblxuICAgIC8vIDEuIENvbnN1bWUgdGhlIHJlbWFpbmRlciBvZiB0aGUgdW5wYXJzZWQtYXR0cmlidXRlcy5cbiAgICBjb29raWVBdiA9IHVucGFyc2VkQXR0cmlidXRlc1xuICAgIHVucGFyc2VkQXR0cmlidXRlcyA9ICcnXG4gIH1cblxuICAvLyBMZXQgdGhlIGNvb2tpZS1hdiBzdHJpbmcgYmUgdGhlIGNoYXJhY3RlcnMgY29uc3VtZWQgaW4gdGhpcyBzdGVwLlxuXG4gIGxldCBhdHRyaWJ1dGVOYW1lID0gJydcbiAgbGV0IGF0dHJpYnV0ZVZhbHVlID0gJydcblxuICAvLyA0LiBJZiB0aGUgY29va2llLWF2IHN0cmluZyBjb250YWlucyBhICV4M0QgKFwiPVwiKSBjaGFyYWN0ZXI6XG4gIGlmIChjb29raWVBdi5pbmNsdWRlcygnPScpKSB7XG4gICAgLy8gMS4gVGhlIChwb3NzaWJseSBlbXB0eSkgYXR0cmlidXRlLW5hbWUgc3RyaW5nIGNvbnNpc3RzIG9mIHRoZVxuICAgIC8vICAgIGNoYXJhY3RlcnMgdXAgdG8sIGJ1dCBub3QgaW5jbHVkaW5nLCB0aGUgZmlyc3QgJXgzRCAoXCI9XCIpXG4gICAgLy8gICAgY2hhcmFjdGVyLCBhbmQgdGhlIChwb3NzaWJseSBlbXB0eSkgYXR0cmlidXRlLXZhbHVlIHN0cmluZ1xuICAgIC8vICAgIGNvbnNpc3RzIG9mIHRoZSBjaGFyYWN0ZXJzIGFmdGVyIHRoZSBmaXJzdCAleDNEIChcIj1cIilcbiAgICAvLyAgICBjaGFyYWN0ZXIuXG4gICAgY29uc3QgcG9zaXRpb24gPSB7IHBvc2l0aW9uOiAwIH1cblxuICAgIGF0dHJpYnV0ZU5hbWUgPSBjb2xsZWN0QVNlcXVlbmNlT2ZDb2RlUG9pbnRzRmFzdChcbiAgICAgICc9JyxcbiAgICAgIGNvb2tpZUF2LFxuICAgICAgcG9zaXRpb25cbiAgICApXG4gICAgYXR0cmlidXRlVmFsdWUgPSBjb29raWVBdi5zbGljZShwb3NpdGlvbi5wb3NpdGlvbiArIDEpXG4gIH0gZWxzZSB7XG4gICAgLy8gT3RoZXJ3aXNlOlxuXG4gICAgLy8gMS4gVGhlIGF0dHJpYnV0ZS1uYW1lIHN0cmluZyBjb25zaXN0cyBvZiB0aGUgZW50aXJlIGNvb2tpZS1hdlxuICAgIC8vICAgIHN0cmluZywgYW5kIHRoZSBhdHRyaWJ1dGUtdmFsdWUgc3RyaW5nIGlzIGVtcHR5LlxuICAgIGF0dHJpYnV0ZU5hbWUgPSBjb29raWVBdlxuICB9XG5cbiAgLy8gNS4gUmVtb3ZlIGFueSBsZWFkaW5nIG9yIHRyYWlsaW5nIFdTUCBjaGFyYWN0ZXJzIGZyb20gdGhlIGF0dHJpYnV0ZS1cbiAgLy8gICAgbmFtZSBzdHJpbmcgYW5kIHRoZSBhdHRyaWJ1dGUtdmFsdWUgc3RyaW5nLlxuICBhdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlTmFtZS50cmltKClcbiAgYXR0cmlidXRlVmFsdWUgPSBhdHRyaWJ1dGVWYWx1ZS50cmltKClcblxuICAvLyA2LiBJZiB0aGUgYXR0cmlidXRlLXZhbHVlIGlzIGxvbmdlciB0aGFuIDEwMjQgb2N0ZXRzLCBpZ25vcmUgdGhlXG4gIC8vICAgIGNvb2tpZS1hdiBzdHJpbmcgYW5kIHJldHVybiB0byBTdGVwIDEgb2YgdGhpcyBhbGdvcml0aG0uXG4gIGlmIChhdHRyaWJ1dGVWYWx1ZS5sZW5ndGggPiBtYXhBdHRyaWJ1dGVWYWx1ZVNpemUpIHtcbiAgICByZXR1cm4gcGFyc2VVbnBhcnNlZEF0dHJpYnV0ZXModW5wYXJzZWRBdHRyaWJ1dGVzLCBjb29raWVBdHRyaWJ1dGVMaXN0KVxuICB9XG5cbiAgLy8gNy4gUHJvY2VzcyB0aGUgYXR0cmlidXRlLW5hbWUgYW5kIGF0dHJpYnV0ZS12YWx1ZSBhY2NvcmRpbmcgdG8gdGhlXG4gIC8vICAgIHJlcXVpcmVtZW50cyBpbiB0aGUgZm9sbG93aW5nIHN1YnNlY3Rpb25zLiAgKE5vdGljZSB0aGF0XG4gIC8vICAgIGF0dHJpYnV0ZXMgd2l0aCB1bnJlY29nbml6ZWQgYXR0cmlidXRlLW5hbWVzIGFyZSBpZ25vcmVkLilcbiAgY29uc3QgYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9IGF0dHJpYnV0ZU5hbWUudG9Mb3dlckNhc2UoKVxuXG4gIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuMVxuICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoZXMgdGhlIHN0cmluZ1xuICAvLyBcIkV4cGlyZXNcIiwgdGhlIHVzZXIgYWdlbnQgTVVTVCBwcm9jZXNzIHRoZSBjb29raWUtYXYgYXMgZm9sbG93cy5cbiAgaWYgKGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPT09ICdleHBpcmVzJykge1xuICAgIC8vIDEuIExldCB0aGUgZXhwaXJ5LXRpbWUgYmUgdGhlIHJlc3VsdCBvZiBwYXJzaW5nIHRoZSBhdHRyaWJ1dGUtdmFsdWVcbiAgICAvLyAgICBhcyBjb29raWUtZGF0ZSAoc2VlIFNlY3Rpb24gNS4xLjEpLlxuICAgIGNvbnN0IGV4cGlyeVRpbWUgPSBuZXcgRGF0ZShhdHRyaWJ1dGVWYWx1ZSlcblxuICAgIC8vIDIuIElmIHRoZSBhdHRyaWJ1dGUtdmFsdWUgZmFpbGVkIHRvIHBhcnNlIGFzIGEgY29va2llIGRhdGUsIGlnbm9yZVxuICAgIC8vICAgIHRoZSBjb29raWUtYXYuXG5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LmV4cGlyZXMgPSBleHBpcnlUaW1lXG4gIH0gZWxzZSBpZiAoYXR0cmlidXRlTmFtZUxvd2VyY2FzZSA9PT0gJ21heC1hZ2UnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC4yXG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmcgXCJNYXgtXG4gICAgLy8gQWdlXCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3MuXG5cbiAgICAvLyAxLiBJZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSBhdHRyaWJ1dGUtdmFsdWUgaXMgbm90IGEgRElHSVQgb3IgYVxuICAgIC8vICAgIFwiLVwiIGNoYXJhY3RlciwgaWdub3JlIHRoZSBjb29raWUtYXYuXG4gICAgY29uc3QgY2hhckNvZGUgPSBhdHRyaWJ1dGVWYWx1ZS5jaGFyQ29kZUF0KDApXG5cbiAgICBpZiAoKGNoYXJDb2RlIDwgNDggfHwgY2hhckNvZGUgPiA1NykgJiYgYXR0cmlidXRlVmFsdWVbMF0gIT09ICctJykge1xuICAgICAgcmV0dXJuIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcywgY29va2llQXR0cmlidXRlTGlzdClcbiAgICB9XG5cbiAgICAvLyAyLiBJZiB0aGUgcmVtYWluZGVyIG9mIGF0dHJpYnV0ZS12YWx1ZSBjb250YWlucyBhIG5vbi1ESUdJVFxuICAgIC8vICAgIGNoYXJhY3RlciwgaWdub3JlIHRoZSBjb29raWUtYXYuXG4gICAgaWYgKCEvXlxcZCskLy50ZXN0KGF0dHJpYnV0ZVZhbHVlKSkge1xuICAgICAgcmV0dXJuIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcywgY29va2llQXR0cmlidXRlTGlzdClcbiAgICB9XG5cbiAgICAvLyAzLiBMZXQgZGVsdGEtc2Vjb25kcyBiZSB0aGUgYXR0cmlidXRlLXZhbHVlIGNvbnZlcnRlZCB0byBhbiBpbnRlZ2VyLlxuICAgIGNvbnN0IGRlbHRhU2Vjb25kcyA9IE51bWJlcihhdHRyaWJ1dGVWYWx1ZSlcblxuICAgIC8vIDQuIExldCBjb29raWUtYWdlLWxpbWl0IGJlIHRoZSBtYXhpbXVtIGFnZSBvZiB0aGUgY29va2llICh3aGljaFxuICAgIC8vICAgIFNIT1VMRCBiZSA0MDAgZGF5cyBvciBsZXNzLCBzZWUgU2VjdGlvbiA0LjEuMi4yKS5cblxuICAgIC8vIDUuIFNldCBkZWx0YS1zZWNvbmRzIHRvIHRoZSBzbWFsbGVyIG9mIGl0cyBwcmVzZW50IHZhbHVlIGFuZCBjb29raWUtXG4gICAgLy8gICAgYWdlLWxpbWl0LlxuICAgIC8vIGRlbHRhU2Vjb25kcyA9IE1hdGgubWluKGRlbHRhU2Vjb25kcyAqIDEwMDAsIG1heEV4cGlyZXNNcylcblxuICAgIC8vIDYuIElmIGRlbHRhLXNlY29uZHMgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHplcm8gKDApLCBsZXQgZXhwaXJ5LVxuICAgIC8vICAgIHRpbWUgYmUgdGhlIGVhcmxpZXN0IHJlcHJlc2VudGFibGUgZGF0ZSBhbmQgdGltZS4gIE90aGVyd2lzZSwgbGV0XG4gICAgLy8gICAgdGhlIGV4cGlyeS10aW1lIGJlIHRoZSBjdXJyZW50IGRhdGUgYW5kIHRpbWUgcGx1cyBkZWx0YS1zZWNvbmRzXG4gICAgLy8gICAgc2Vjb25kcy5cbiAgICAvLyBjb25zdCBleHBpcnlUaW1lID0gZGVsdGFTZWNvbmRzIDw9IDAgPyBEYXRlLm5vdygpIDogRGF0ZS5ub3coKSArIGRlbHRhU2Vjb25kc1xuXG4gICAgLy8gNy4gQXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAvLyAgICBhdHRyaWJ1dGUtbmFtZSBvZiBNYXgtQWdlIGFuZCBhbiBhdHRyaWJ1dGUtdmFsdWUgb2YgZXhwaXJ5LXRpbWUuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5tYXhBZ2UgPSBkZWx0YVNlY29uZHNcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnZG9tYWluJykge1xuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvZHJhZnQtaWV0Zi1odHRwYmlzLXJmYzYyNjViaXMjc2VjdGlvbi01LjQuM1xuICAgIC8vIElmIHRoZSBhdHRyaWJ1dGUtbmFtZSBjYXNlLWluc2Vuc2l0aXZlbHkgbWF0Y2hlcyB0aGUgc3RyaW5nIFwiRG9tYWluXCIsXG4gICAgLy8gdGhlIHVzZXIgYWdlbnQgTVVTVCBwcm9jZXNzIHRoZSBjb29raWUtYXYgYXMgZm9sbG93cy5cblxuICAgIC8vIDEuIExldCBjb29raWUtZG9tYWluIGJlIHRoZSBhdHRyaWJ1dGUtdmFsdWUuXG4gICAgbGV0IGNvb2tpZURvbWFpbiA9IGF0dHJpYnV0ZVZhbHVlXG5cbiAgICAvLyAyLiBJZiBjb29raWUtZG9tYWluIHN0YXJ0cyB3aXRoICV4MkUgKFwiLlwiKSwgbGV0IGNvb2tpZS1kb21haW4gYmVcbiAgICAvLyAgICBjb29raWUtZG9tYWluIHdpdGhvdXQgaXRzIGxlYWRpbmcgJXgyRSAoXCIuXCIpLlxuICAgIGlmIChjb29raWVEb21haW5bMF0gPT09ICcuJykge1xuICAgICAgY29va2llRG9tYWluID0gY29va2llRG9tYWluLnNsaWNlKDEpXG4gICAgfVxuXG4gICAgLy8gMy4gQ29udmVydCB0aGUgY29va2llLWRvbWFpbiB0byBsb3dlciBjYXNlLlxuICAgIGNvb2tpZURvbWFpbiA9IGNvb2tpZURvbWFpbi50b0xvd2VyQ2FzZSgpXG5cbiAgICAvLyA0LiBBcHBlbmQgYW4gYXR0cmlidXRlIHRvIHRoZSBjb29raWUtYXR0cmlidXRlLWxpc3Qgd2l0aCBhblxuICAgIC8vICAgIGF0dHJpYnV0ZS1uYW1lIG9mIERvbWFpbiBhbmQgYW4gYXR0cmlidXRlLXZhbHVlIG9mIGNvb2tpZS1kb21haW4uXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5kb21haW4gPSBjb29raWVEb21haW5cbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAncGF0aCcpIHtcbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL2RyYWZ0LWlldGYtaHR0cGJpcy1yZmM2MjY1YmlzI3NlY3Rpb24tNS40LjRcbiAgICAvLyBJZiB0aGUgYXR0cmlidXRlLW5hbWUgY2FzZS1pbnNlbnNpdGl2ZWx5IG1hdGNoZXMgdGhlIHN0cmluZyBcIlBhdGhcIixcbiAgICAvLyB0aGUgdXNlciBhZ2VudCBNVVNUIHByb2Nlc3MgdGhlIGNvb2tpZS1hdiBhcyBmb2xsb3dzLlxuXG4gICAgLy8gMS4gSWYgdGhlIGF0dHJpYnV0ZS12YWx1ZSBpcyBlbXB0eSBvciBpZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZVxuICAgIC8vICAgIGF0dHJpYnV0ZS12YWx1ZSBpcyBub3QgJXgyRiAoXCIvXCIpOlxuICAgIGxldCBjb29raWVQYXRoID0gJydcbiAgICBpZiAoYXR0cmlidXRlVmFsdWUubGVuZ3RoID09PSAwIHx8IGF0dHJpYnV0ZVZhbHVlWzBdICE9PSAnLycpIHtcbiAgICAgIC8vIDEuIExldCBjb29raWUtcGF0aCBiZSB0aGUgZGVmYXVsdC1wYXRoLlxuICAgICAgY29va2llUGF0aCA9ICcvJ1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBPdGhlcndpc2U6XG5cbiAgICAgIC8vIDEuIExldCBjb29raWUtcGF0aCBiZSB0aGUgYXR0cmlidXRlLXZhbHVlLlxuICAgICAgY29va2llUGF0aCA9IGF0dHJpYnV0ZVZhbHVlXG4gICAgfVxuXG4gICAgLy8gMi4gQXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAvLyAgICBhdHRyaWJ1dGUtbmFtZSBvZiBQYXRoIGFuZCBhbiBhdHRyaWJ1dGUtdmFsdWUgb2YgY29va2llLXBhdGguXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5wYXRoID0gY29va2llUGF0aFxuICB9IGVsc2UgaWYgKGF0dHJpYnV0ZU5hbWVMb3dlcmNhc2UgPT09ICdzZWN1cmUnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC41XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmcgXCJTZWN1cmVcIixcbiAgICAvLyB0aGUgdXNlciBhZ2VudCBNVVNUIGFwcGVuZCBhbiBhdHRyaWJ1dGUgdG8gdGhlIGNvb2tpZS1hdHRyaWJ1dGUtbGlzdFxuICAgIC8vIHdpdGggYW4gYXR0cmlidXRlLW5hbWUgb2YgU2VjdXJlIGFuZCBhbiBlbXB0eSBhdHRyaWJ1dGUtdmFsdWUuXG5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnNlY3VyZSA9IHRydWVcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnaHR0cG9ubHknKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC42XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmdcbiAgICAvLyBcIkh0dHBPbmx5XCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgYXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLVxuICAgIC8vIGF0dHJpYnV0ZS1saXN0IHdpdGggYW4gYXR0cmlidXRlLW5hbWUgb2YgSHR0cE9ubHkgYW5kIGFuIGVtcHR5XG4gICAgLy8gYXR0cmlidXRlLXZhbHVlLlxuXG4gICAgY29va2llQXR0cmlidXRlTGlzdC5odHRwT25seSA9IHRydWVcbiAgfSBlbHNlIGlmIChhdHRyaWJ1dGVOYW1lTG93ZXJjYXNlID09PSAnc2FtZXNpdGUnKSB7XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9kcmFmdC1pZXRmLWh0dHBiaXMtcmZjNjI2NWJpcyNzZWN0aW9uLTUuNC43XG4gICAgLy8gSWYgdGhlIGF0dHJpYnV0ZS1uYW1lIGNhc2UtaW5zZW5zaXRpdmVseSBtYXRjaGVzIHRoZSBzdHJpbmdcbiAgICAvLyBcIlNhbWVTaXRlXCIsIHRoZSB1c2VyIGFnZW50IE1VU1QgcHJvY2VzcyB0aGUgY29va2llLWF2IGFzIGZvbGxvd3M6XG5cbiAgICAvLyAxLiBMZXQgZW5mb3JjZW1lbnQgYmUgXCJEZWZhdWx0XCIuXG4gICAgbGV0IGVuZm9yY2VtZW50ID0gJ0RlZmF1bHQnXG5cbiAgICBjb25zdCBhdHRyaWJ1dGVWYWx1ZUxvd2VyY2FzZSA9IGF0dHJpYnV0ZVZhbHVlLnRvTG93ZXJDYXNlKClcbiAgICAvLyAyLiBJZiBjb29raWUtYXYncyBhdHRyaWJ1dGUtdmFsdWUgaXMgYSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvclxuICAgIC8vICAgIFwiTm9uZVwiLCBzZXQgZW5mb3JjZW1lbnQgdG8gXCJOb25lXCIuXG4gICAgaWYgKGF0dHJpYnV0ZVZhbHVlTG93ZXJjYXNlLmluY2x1ZGVzKCdub25lJykpIHtcbiAgICAgIGVuZm9yY2VtZW50ID0gJ05vbmUnXG4gICAgfVxuXG4gICAgLy8gMy4gSWYgY29va2llLWF2J3MgYXR0cmlidXRlLXZhbHVlIGlzIGEgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3JcbiAgICAvLyAgICBcIlN0cmljdFwiLCBzZXQgZW5mb3JjZW1lbnQgdG8gXCJTdHJpY3RcIi5cbiAgICBpZiAoYXR0cmlidXRlVmFsdWVMb3dlcmNhc2UuaW5jbHVkZXMoJ3N0cmljdCcpKSB7XG4gICAgICBlbmZvcmNlbWVudCA9ICdTdHJpY3QnXG4gICAgfVxuXG4gICAgLy8gNC4gSWYgY29va2llLWF2J3MgYXR0cmlidXRlLXZhbHVlIGlzIGEgY2FzZS1pbnNlbnNpdGl2ZSBtYXRjaCBmb3JcbiAgICAvLyAgICBcIkxheFwiLCBzZXQgZW5mb3JjZW1lbnQgdG8gXCJMYXhcIi5cbiAgICBpZiAoYXR0cmlidXRlVmFsdWVMb3dlcmNhc2UuaW5jbHVkZXMoJ2xheCcpKSB7XG4gICAgICBlbmZvcmNlbWVudCA9ICdMYXgnXG4gICAgfVxuXG4gICAgLy8gNS4gQXBwZW5kIGFuIGF0dHJpYnV0ZSB0byB0aGUgY29va2llLWF0dHJpYnV0ZS1saXN0IHdpdGggYW5cbiAgICAvLyAgICBhdHRyaWJ1dGUtbmFtZSBvZiBcIlNhbWVTaXRlXCIgYW5kIGFuIGF0dHJpYnV0ZS12YWx1ZSBvZlxuICAgIC8vICAgIGVuZm9yY2VtZW50LlxuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3Quc2FtZVNpdGUgPSBlbmZvcmNlbWVudFxuICB9IGVsc2Uge1xuICAgIGNvb2tpZUF0dHJpYnV0ZUxpc3QudW5wYXJzZWQgPz89IFtdXG5cbiAgICBjb29raWVBdHRyaWJ1dGVMaXN0LnVucGFyc2VkLnB1c2goYCR7YXR0cmlidXRlTmFtZX09JHthdHRyaWJ1dGVWYWx1ZX1gKVxuICB9XG5cbiAgLy8gOC4gUmV0dXJuIHRvIFN0ZXAgMSBvZiB0aGlzIGFsZ29yaXRobS5cbiAgcmV0dXJuIHBhcnNlVW5wYXJzZWRBdHRyaWJ1dGVzKHVucGFyc2VkQXR0cmlidXRlcywgY29va2llQXR0cmlidXRlTGlzdClcbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIHBhcnNlU2V0Q29va2llLFxuICBwYXJzZVVucGFyc2VkQXR0cmlidXRlc1xufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IHBhcnNlU2V0Q29va2llIH0gPSByZXF1aXJlKCcuL3BhcnNlJylcbmNvbnN0IHsgc3RyaW5naWZ5IH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IEhlYWRlcnMgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2hlYWRlcnMnKVxuXG4vKipcbiAqIEB0eXBlZGVmIHtPYmplY3R9IENvb2tpZVxuICogQHByb3BlcnR5IHtzdHJpbmd9IG5hbWVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSB2YWx1ZVxuICogQHByb3BlcnR5IHtEYXRlfG51bWJlcnx1bmRlZmluZWR9IGV4cGlyZXNcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfHVuZGVmaW5lZH0gbWF4QWdlXG4gKiBAcHJvcGVydHkge3N0cmluZ3x1bmRlZmluZWR9IGRvbWFpblxuICogQHByb3BlcnR5IHtzdHJpbmd8dW5kZWZpbmVkfSBwYXRoXG4gKiBAcHJvcGVydHkge2Jvb2xlYW58dW5kZWZpbmVkfSBzZWN1cmVcbiAqIEBwcm9wZXJ0eSB7Ym9vbGVhbnx1bmRlZmluZWR9IGh0dHBPbmx5XG4gKiBAcHJvcGVydHkgeydTdHJpY3QnfCdMYXgnfCdOb25lJ30gc2FtZVNpdGVcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nW119IHVucGFyc2VkXG4gKi9cblxuLyoqXG4gKiBAcGFyYW0ge0hlYWRlcnN9IGhlYWRlcnNcbiAqIEByZXR1cm5zIHtSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+fVxuICovXG5mdW5jdGlvbiBnZXRDb29raWVzIChoZWFkZXJzKSB7XG4gIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdnZXRDb29raWVzJyB9KVxuXG4gIHdlYmlkbC5icmFuZENoZWNrKGhlYWRlcnMsIEhlYWRlcnMsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gIGNvbnN0IGNvb2tpZSA9IGhlYWRlcnMuZ2V0KCdjb29raWUnKVxuICBjb25zdCBvdXQgPSB7fVxuXG4gIGlmICghY29va2llKSB7XG4gICAgcmV0dXJuIG91dFxuICB9XG5cbiAgZm9yIChjb25zdCBwaWVjZSBvZiBjb29raWUuc3BsaXQoJzsnKSkge1xuICAgIGNvbnN0IFtuYW1lLCAuLi52YWx1ZV0gPSBwaWVjZS5zcGxpdCgnPScpXG5cbiAgICBvdXRbbmFtZS50cmltKCldID0gdmFsdWUuam9pbignPScpXG4gIH1cblxuICByZXR1cm4gb3V0XG59XG5cbi8qKlxuICogQHBhcmFtIHtIZWFkZXJzfSBoZWFkZXJzXG4gKiBAcGFyYW0ge3N0cmluZ30gbmFtZVxuICogQHBhcmFtIHt7IHBhdGg/OiBzdHJpbmcsIGRvbWFpbj86IHN0cmluZyB9fHVuZGVmaW5lZH0gYXR0cmlidXRlc1xuICogQHJldHVybnMge3ZvaWR9XG4gKi9cbmZ1bmN0aW9uIGRlbGV0ZUNvb2tpZSAoaGVhZGVycywgbmFtZSwgYXR0cmlidXRlcykge1xuICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnZGVsZXRlQ29va2llJyB9KVxuXG4gIHdlYmlkbC5icmFuZENoZWNrKGhlYWRlcnMsIEhlYWRlcnMsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gIG5hbWUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcobmFtZSlcbiAgYXR0cmlidXRlcyA9IHdlYmlkbC5jb252ZXJ0ZXJzLkRlbGV0ZUNvb2tpZUF0dHJpYnV0ZXMoYXR0cmlidXRlcylcblxuICAvLyBNYXRjaGVzIGJlaGF2aW9yIG9mXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9kZW5vbGFuZC9kZW5vX3N0ZC9ibG9iLzYzODI3YjE2MzMwYjgyNDg5YTA0NjE0MDI3YzMzYjc5MDRlMDhiZTUvaHR0cC9jb29raWUudHMjTDI3OFxuICBzZXRDb29raWUoaGVhZGVycywge1xuICAgIG5hbWUsXG4gICAgdmFsdWU6ICcnLFxuICAgIGV4cGlyZXM6IG5ldyBEYXRlKDApLFxuICAgIC4uLmF0dHJpYnV0ZXNcbiAgfSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0hlYWRlcnN9IGhlYWRlcnNcbiAqIEByZXR1cm5zIHtDb29raWVbXX1cbiAqL1xuZnVuY3Rpb24gZ2V0U2V0Q29va2llcyAoaGVhZGVycykge1xuICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnZ2V0U2V0Q29va2llcycgfSlcblxuICB3ZWJpZGwuYnJhbmRDaGVjayhoZWFkZXJzLCBIZWFkZXJzLCB7IHN0cmljdDogZmFsc2UgfSlcblxuICBjb25zdCBjb29raWVzID0gaGVhZGVycy5nZXRTZXRDb29raWUoKVxuXG4gIGlmICghY29va2llcykge1xuICAgIHJldHVybiBbXVxuICB9XG5cbiAgcmV0dXJuIGNvb2tpZXMubWFwKChwYWlyKSA9PiBwYXJzZVNldENvb2tpZShwYWlyKSlcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0hlYWRlcnN9IGhlYWRlcnNcbiAqIEBwYXJhbSB7Q29va2llfSBjb29raWVcbiAqIEByZXR1cm5zIHt2b2lkfVxuICovXG5mdW5jdGlvbiBzZXRDb29raWUgKGhlYWRlcnMsIGNvb2tpZSkge1xuICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDIsIHsgaGVhZGVyOiAnc2V0Q29va2llJyB9KVxuXG4gIHdlYmlkbC5icmFuZENoZWNrKGhlYWRlcnMsIEhlYWRlcnMsIHsgc3RyaWN0OiBmYWxzZSB9KVxuXG4gIGNvb2tpZSA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNvb2tpZShjb29raWUpXG5cbiAgY29uc3Qgc3RyID0gc3RyaW5naWZ5KGNvb2tpZSlcblxuICBpZiAoc3RyKSB7XG4gICAgaGVhZGVycy5hcHBlbmQoJ1NldC1Db29raWUnLCBzdHJpbmdpZnkoY29va2llKSlcbiAgfVxufVxuXG53ZWJpZGwuY29udmVydGVycy5EZWxldGVDb29raWVBdHRyaWJ1dGVzID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKSxcbiAgICBrZXk6ICdwYXRoJyxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZyksXG4gICAga2V5OiAnZG9tYWluJyxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfVxuXSlcblxud2ViaWRsLmNvbnZlcnRlcnMuQ29va2llID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcsXG4gICAga2V5OiAnbmFtZSdcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIGtleTogJ3ZhbHVlJ1xuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIoKHZhbHVlKSA9PiB7XG4gICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcgbG9uZyddKHZhbHVlKVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbmV3IERhdGUodmFsdWUpXG4gICAgfSksXG4gICAga2V5OiAnZXhwaXJlcycsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVyc1snbG9uZyBsb25nJ10pLFxuICAgIGtleTogJ21heEFnZScsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcpLFxuICAgIGtleTogJ2RvbWFpbicsXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcpLFxuICAgIGtleTogJ3BhdGgnLFxuICAgIGRlZmF1bHRWYWx1ZTogbnVsbFxuICB9LFxuICB7XG4gICAgY29udmVydGVyOiB3ZWJpZGwubnVsbGFibGVDb252ZXJ0ZXIod2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbiksXG4gICAga2V5OiAnc2VjdXJlJyxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLmJvb2xlYW4pLFxuICAgIGtleTogJ2h0dHBPbmx5JyxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfSxcbiAge1xuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nLFxuICAgIGtleTogJ3NhbWVTaXRlJyxcbiAgICBhbGxvd2VkVmFsdWVzOiBbJ1N0cmljdCcsICdMYXgnLCAnTm9uZSddXG4gIH0sXG4gIHtcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcpLFxuICAgIGtleTogJ3VucGFyc2VkJyxcbiAgICBkZWZhdWx0VmFsdWU6IFtdXG4gIH1cbl0pXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBnZXRDb29raWVzLFxuICBkZWxldGVDb29raWUsXG4gIGdldFNldENvb2tpZXMsXG4gIHNldENvb2tpZVxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG4vLyBUaGlzIGlzIGEgR2xvYmFsbHkgVW5pcXVlIElkZW50aWZpZXIgdW5pcXVlIHVzZWRcbi8vIHRvIHZhbGlkYXRlIHRoYXQgdGhlIGVuZHBvaW50IGFjY2VwdHMgd2Vic29ja2V0XG4vLyBjb25uZWN0aW9ucy5cbi8vIFNlZSBodHRwczovL3d3dy5yZmMtZWRpdG9yLm9yZy9yZmMvcmZjNjQ1NS5odG1sI3NlY3Rpb24tMS4zXG5jb25zdCB1aWQgPSAnMjU4RUFGQTUtRTkxNC00N0RBLTk1Q0EtQzVBQjBEQzg1QjExJ1xuXG4vKiogQHR5cGUge1Byb3BlcnR5RGVzY3JpcHRvcn0gKi9cbmNvbnN0IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMgPSB7XG4gIGVudW1lcmFibGU6IHRydWUsXG4gIHdyaXRhYmxlOiBmYWxzZSxcbiAgY29uZmlndXJhYmxlOiBmYWxzZVxufVxuXG5jb25zdCBzdGF0ZXMgPSB7XG4gIENPTk5FQ1RJTkc6IDAsXG4gIE9QRU46IDEsXG4gIENMT1NJTkc6IDIsXG4gIENMT1NFRDogM1xufVxuXG5jb25zdCBvcGNvZGVzID0ge1xuICBDT05USU5VQVRJT046IDB4MCxcbiAgVEVYVDogMHgxLFxuICBCSU5BUlk6IDB4MixcbiAgQ0xPU0U6IDB4OCxcbiAgUElORzogMHg5LFxuICBQT05HOiAweEFcbn1cblxuY29uc3QgbWF4VW5zaWduZWQxNkJpdCA9IDIgKiogMTYgLSAxIC8vIDY1NTM1XG5cbmNvbnN0IHBhcnNlclN0YXRlcyA9IHtcbiAgSU5GTzogMCxcbiAgUEFZTE9BRExFTkdUSF8xNjogMixcbiAgUEFZTE9BRExFTkdUSF82NDogMyxcbiAgUkVBRF9EQVRBOiA0XG59XG5cbmNvbnN0IGVtcHR5QnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKDApXG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICB1aWQsXG4gIHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnMsXG4gIHN0YXRlcyxcbiAgb3Bjb2RlcyxcbiAgbWF4VW5zaWduZWQxNkJpdCxcbiAgcGFyc2VyU3RhdGVzLFxuICBlbXB0eUJ1ZmZlclxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAga1dlYlNvY2tldFVSTDogU3ltYm9sKCd1cmwnKSxcbiAga1JlYWR5U3RhdGU6IFN5bWJvbCgncmVhZHkgc3RhdGUnKSxcbiAga0NvbnRyb2xsZXI6IFN5bWJvbCgnY29udHJvbGxlcicpLFxuICBrUmVzcG9uc2U6IFN5bWJvbCgncmVzcG9uc2UnKSxcbiAga0JpbmFyeVR5cGU6IFN5bWJvbCgnYmluYXJ5IHR5cGUnKSxcbiAga1NlbnRDbG9zZTogU3ltYm9sKCdzZW50IGNsb3NlJyksXG4gIGtSZWNlaXZlZENsb3NlOiBTeW1ib2woJ3JlY2VpdmVkIGNsb3NlJyksXG4gIGtCeXRlUGFyc2VyOiBTeW1ib2woJ2J5dGUgcGFyc2VyJylcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IGtFbnVtZXJhYmxlUHJvcGVydHkgfSA9IHJlcXVpcmUoJy4uL2NvcmUvdXRpbCcpXG5jb25zdCB7IE1lc3NhZ2VQb3J0IH0gPSByZXF1aXJlKCd3b3JrZXJfdGhyZWFkcycpXG5cbi8qKlxuICogQHNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9jb21tcy5odG1sI21lc3NhZ2VldmVudFxuICovXG5jbGFzcyBNZXNzYWdlRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gICNldmVudEluaXRcblxuICBjb25zdHJ1Y3RvciAodHlwZSwgZXZlbnRJbml0RGljdCA9IHt9KSB7XG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ01lc3NhZ2VFdmVudCBjb25zdHJ1Y3RvcicgfSlcblxuICAgIHR5cGUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcodHlwZSlcbiAgICBldmVudEluaXREaWN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZUV2ZW50SW5pdChldmVudEluaXREaWN0KVxuXG4gICAgc3VwZXIodHlwZSwgZXZlbnRJbml0RGljdClcblxuICAgIHRoaXMuI2V2ZW50SW5pdCA9IGV2ZW50SW5pdERpY3RcbiAgfVxuXG4gIGdldCBkYXRhICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmRhdGFcbiAgfVxuXG4gIGdldCBvcmlnaW4gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIE1lc3NhZ2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQub3JpZ2luXG4gIH1cblxuICBnZXQgbGFzdEV2ZW50SWQgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIE1lc3NhZ2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQubGFzdEV2ZW50SWRcbiAgfVxuXG4gIGdldCBzb3VyY2UgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIE1lc3NhZ2VFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQuc291cmNlXG4gIH1cblxuICBnZXQgcG9ydHMgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIE1lc3NhZ2VFdmVudClcblxuICAgIGlmICghT2JqZWN0LmlzRnJvemVuKHRoaXMuI2V2ZW50SW5pdC5wb3J0cykpIHtcbiAgICAgIE9iamVjdC5mcmVlemUodGhpcy4jZXZlbnRJbml0LnBvcnRzKVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQucG9ydHNcbiAgfVxuXG4gIGluaXRNZXNzYWdlRXZlbnQgKFxuICAgIHR5cGUsXG4gICAgYnViYmxlcyA9IGZhbHNlLFxuICAgIGNhbmNlbGFibGUgPSBmYWxzZSxcbiAgICBkYXRhID0gbnVsbCxcbiAgICBvcmlnaW4gPSAnJyxcbiAgICBsYXN0RXZlbnRJZCA9ICcnLFxuICAgIHNvdXJjZSA9IG51bGwsXG4gICAgcG9ydHMgPSBbXVxuICApIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBNZXNzYWdlRXZlbnQpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnTWVzc2FnZUV2ZW50LmluaXRNZXNzYWdlRXZlbnQnIH0pXG5cbiAgICByZXR1cm4gbmV3IE1lc3NhZ2VFdmVudCh0eXBlLCB7XG4gICAgICBidWJibGVzLCBjYW5jZWxhYmxlLCBkYXRhLCBvcmlnaW4sIGxhc3RFdmVudElkLCBzb3VyY2UsIHBvcnRzXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jdGhlLWNsb3NlZXZlbnQtaW50ZXJmYWNlXG4gKi9cbmNsYXNzIENsb3NlRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gICNldmVudEluaXRcblxuICBjb25zdHJ1Y3RvciAodHlwZSwgZXZlbnRJbml0RGljdCA9IHt9KSB7XG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ0Nsb3NlRXZlbnQgY29uc3RydWN0b3InIH0pXG5cbiAgICB0eXBlID0gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKHR5cGUpXG4gICAgZXZlbnRJbml0RGljdCA9IHdlYmlkbC5jb252ZXJ0ZXJzLkNsb3NlRXZlbnRJbml0KGV2ZW50SW5pdERpY3QpXG5cbiAgICBzdXBlcih0eXBlLCBldmVudEluaXREaWN0KVxuXG4gICAgdGhpcy4jZXZlbnRJbml0ID0gZXZlbnRJbml0RGljdFxuICB9XG5cbiAgZ2V0IHdhc0NsZWFuICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBDbG9zZUV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC53YXNDbGVhblxuICB9XG5cbiAgZ2V0IGNvZGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENsb3NlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmNvZGVcbiAgfVxuXG4gIGdldCByZWFzb24gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIENsb3NlRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LnJlYXNvblxuICB9XG59XG5cbi8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3dlYmFwcGFwaXMuaHRtbCN0aGUtZXJyb3JldmVudC1pbnRlcmZhY2VcbmNsYXNzIEVycm9yRXZlbnQgZXh0ZW5kcyBFdmVudCB7XG4gICNldmVudEluaXRcblxuICBjb25zdHJ1Y3RvciAodHlwZSwgZXZlbnRJbml0RGljdCkge1xuICAgIHdlYmlkbC5hcmd1bWVudExlbmd0aENoZWNrKGFyZ3VtZW50cywgMSwgeyBoZWFkZXI6ICdFcnJvckV2ZW50IGNvbnN0cnVjdG9yJyB9KVxuXG4gICAgc3VwZXIodHlwZSwgZXZlbnRJbml0RGljdClcblxuICAgIHR5cGUgPSB3ZWJpZGwuY29udmVydGVycy5ET01TdHJpbmcodHlwZSlcbiAgICBldmVudEluaXREaWN0ID0gd2ViaWRsLmNvbnZlcnRlcnMuRXJyb3JFdmVudEluaXQoZXZlbnRJbml0RGljdCA/PyB7fSlcblxuICAgIHRoaXMuI2V2ZW50SW5pdCA9IGV2ZW50SW5pdERpY3RcbiAgfVxuXG4gIGdldCBtZXNzYWdlICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBFcnJvckV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5tZXNzYWdlXG4gIH1cblxuICBnZXQgZmlsZW5hbWUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIEVycm9yRXZlbnQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXZlbnRJbml0LmZpbGVuYW1lXG4gIH1cblxuICBnZXQgbGluZW5vICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBFcnJvckV2ZW50KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50SW5pdC5saW5lbm9cbiAgfVxuXG4gIGdldCBjb2xubyAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQuY29sbm9cbiAgfVxuXG4gIGdldCBlcnJvciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgRXJyb3JFdmVudClcblxuICAgIHJldHVybiB0aGlzLiNldmVudEluaXQuZXJyb3JcbiAgfVxufVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhNZXNzYWdlRXZlbnQucHJvdG90eXBlLCB7XG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdNZXNzYWdlRXZlbnQnLFxuICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICB9LFxuICBkYXRhOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvcmlnaW46IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGxhc3RFdmVudElkOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBzb3VyY2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHBvcnRzOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBpbml0TWVzc2FnZUV2ZW50OiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG5PYmplY3QuZGVmaW5lUHJvcGVydGllcyhDbG9zZUV2ZW50LnByb3RvdHlwZSwge1xuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnQ2xvc2VFdmVudCcsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH0sXG4gIHJlYXNvbjoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY29kZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgd2FzQ2xlYW46IGtFbnVtZXJhYmxlUHJvcGVydHlcbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEVycm9yRXZlbnQucHJvdG90eXBlLCB7XG4gIFtTeW1ib2wudG9TdHJpbmdUYWddOiB7XG4gICAgdmFsdWU6ICdFcnJvckV2ZW50JyxcbiAgICBjb25maWd1cmFibGU6IHRydWVcbiAgfSxcbiAgbWVzc2FnZToga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgZmlsZW5hbWU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGxpbmVubzoga0VudW1lcmFibGVQcm9wZXJ0eSxcbiAgY29sbm86IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGVycm9yOiBrRW51bWVyYWJsZVByb3BlcnR5XG59KVxuXG53ZWJpZGwuY29udmVydGVycy5NZXNzYWdlUG9ydCA9IHdlYmlkbC5pbnRlcmZhY2VDb252ZXJ0ZXIoTWVzc2FnZVBvcnQpXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxNZXNzYWdlUG9ydD4nXSA9IHdlYmlkbC5zZXF1ZW5jZUNvbnZlcnRlcihcbiAgd2ViaWRsLmNvbnZlcnRlcnMuTWVzc2FnZVBvcnRcbilcblxuY29uc3QgZXZlbnRJbml0ID0gW1xuICB7XG4gICAga2V5OiAnYnViYmxlcycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2NhbmNlbGFibGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuYm9vbGVhbixcbiAgICBkZWZhdWx0VmFsdWU6IGZhbHNlXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdjb21wb3NlZCcsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfVxuXVxuXG53ZWJpZGwuY29udmVydGVycy5NZXNzYWdlRXZlbnRJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICAuLi5ldmVudEluaXQsXG4gIHtcbiAgICBrZXk6ICdkYXRhJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLmFueSxcbiAgICBkZWZhdWx0VmFsdWU6IG51bGxcbiAgfSxcbiAge1xuICAgIGtleTogJ29yaWdpbicsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5VU1ZTdHJpbmcsXG4gICAgZGVmYXVsdFZhbHVlOiAnJ1xuICB9LFxuICB7XG4gICAga2V5OiAnbGFzdEV2ZW50SWQnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfSxcbiAge1xuICAgIGtleTogJ3NvdXJjZScsXG4gICAgLy8gTm9kZSBkb2Vzbid0IGltcGxlbWVudCBXaW5kb3dQcm94eSBvciBTZXJ2aWNlV29ya2VyLCBzbyB0aGUgb25seVxuICAgIC8vIHZhbGlkIHZhbHVlIGZvciBzb3VyY2UgaXMgYSBNZXNzYWdlUG9ydC5cbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5udWxsYWJsZUNvbnZlcnRlcih3ZWJpZGwuY29udmVydGVycy5NZXNzYWdlUG9ydCksXG4gICAgZGVmYXVsdFZhbHVlOiBudWxsXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdwb3J0cycsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8TWVzc2FnZVBvcnQ+J10sXG4gICAgZ2V0IGRlZmF1bHRWYWx1ZSAoKSB7XG4gICAgICByZXR1cm4gW11cbiAgICB9XG4gIH1cbl0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzLkNsb3NlRXZlbnRJbml0ID0gd2ViaWRsLmRpY3Rpb25hcnlDb252ZXJ0ZXIoW1xuICAuLi5ldmVudEluaXQsXG4gIHtcbiAgICBrZXk6ICd3YXNDbGVhbicsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5ib29sZWFuLFxuICAgIGRlZmF1bHRWYWx1ZTogZmFsc2VcbiAgfSxcbiAge1xuICAgIGtleTogJ2NvZGUnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIHNob3J0J10sXG4gICAgZGVmYXVsdFZhbHVlOiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdyZWFzb24nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfVxuXSlcblxud2ViaWRsLmNvbnZlcnRlcnMuRXJyb3JFdmVudEluaXQgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIC4uLmV2ZW50SW5pdCxcbiAge1xuICAgIGtleTogJ21lc3NhZ2UnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nLFxuICAgIGRlZmF1bHRWYWx1ZTogJydcbiAgfSxcbiAge1xuICAgIGtleTogJ2ZpbGVuYW1lJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzLlVTVlN0cmluZyxcbiAgICBkZWZhdWx0VmFsdWU6ICcnXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdsaW5lbm8nLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIGxvbmcnXSxcbiAgICBkZWZhdWx0VmFsdWU6IDBcbiAgfSxcbiAge1xuICAgIGtleTogJ2NvbG5vJyxcbiAgICBjb252ZXJ0ZXI6IHdlYmlkbC5jb252ZXJ0ZXJzWyd1bnNpZ25lZCBsb25nJ10sXG4gICAgZGVmYXVsdFZhbHVlOiAwXG4gIH0sXG4gIHtcbiAgICBrZXk6ICdlcnJvcicsXG4gICAgY29udmVydGVyOiB3ZWJpZGwuY29udmVydGVycy5hbnlcbiAgfVxuXSlcblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIE1lc3NhZ2VFdmVudCxcbiAgQ2xvc2VFdmVudCxcbiAgRXJyb3JFdmVudFxufVxuIiwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCB7IGtSZWFkeVN0YXRlLCBrQ29udHJvbGxlciwga1Jlc3BvbnNlLCBrQmluYXJ5VHlwZSwga1dlYlNvY2tldFVSTCB9ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgc3RhdGVzLCBvcGNvZGVzIH0gPSByZXF1aXJlKCcuL2NvbnN0YW50cycpXG5jb25zdCB7IE1lc3NhZ2VFdmVudCwgRXJyb3JFdmVudCB9ID0gcmVxdWlyZSgnLi9ldmVudHMnKVxuXG4vKiBnbG9iYWxzIEJsb2IgKi9cblxuLyoqXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi93ZWJzb2NrZXQnKS5XZWJTb2NrZXR9IHdzXG4gKi9cbmZ1bmN0aW9uIGlzRXN0YWJsaXNoZWQgKHdzKSB7XG4gIC8vIElmIHRoZSBzZXJ2ZXIncyByZXNwb25zZSBpcyB2YWxpZGF0ZWQgYXMgcHJvdmlkZWQgZm9yIGFib3ZlLCBpdCBpc1xuICAvLyBzYWlkIHRoYXQgX1RoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbiBpcyBFc3RhYmxpc2hlZF8gYW5kIHRoYXQgdGhlXG4gIC8vIFdlYlNvY2tldCBDb25uZWN0aW9uIGlzIGluIHRoZSBPUEVOIHN0YXRlLlxuICByZXR1cm4gd3Nba1JlYWR5U3RhdGVdID09PSBzdGF0ZXMuT1BFTlxufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqL1xuZnVuY3Rpb24gaXNDbG9zaW5nICh3cykge1xuICAvLyBVcG9uIGVpdGhlciBzZW5kaW5nIG9yIHJlY2VpdmluZyBhIENsb3NlIGNvbnRyb2wgZnJhbWUsIGl0IGlzIHNhaWRcbiAgLy8gdGhhdCBfVGhlIFdlYlNvY2tldCBDbG9zaW5nIEhhbmRzaGFrZSBpcyBTdGFydGVkXyBhbmQgdGhhdCB0aGVcbiAgLy8gV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgaW4gdGhlIENMT1NJTkcgc3RhdGUuXG4gIHJldHVybiB3c1trUmVhZHlTdGF0ZV0gPT09IHN0YXRlcy5DTE9TSU5HXG59XG5cbi8qKlxuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICovXG5mdW5jdGlvbiBpc0Nsb3NlZCAod3MpIHtcbiAgcmV0dXJuIHdzW2tSZWFkeVN0YXRlXSA9PT0gc3RhdGVzLkNMT1NFRFxufVxuXG4vKipcbiAqIEBzZWUgaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNjb25jZXB0LWV2ZW50LWZpcmVcbiAqIEBwYXJhbSB7c3RyaW5nfSBlXG4gKiBAcGFyYW0ge0V2ZW50VGFyZ2V0fSB0YXJnZXRcbiAqIEBwYXJhbSB7RXZlbnRJbml0IHwgdW5kZWZpbmVkfSBldmVudEluaXREaWN0XG4gKi9cbmZ1bmN0aW9uIGZpcmVFdmVudCAoZSwgdGFyZ2V0LCBldmVudENvbnN0cnVjdG9yID0gRXZlbnQsIGV2ZW50SW5pdERpY3QpIHtcbiAgLy8gMS4gSWYgZXZlbnRDb25zdHJ1Y3RvciBpcyBub3QgZ2l2ZW4sIHRoZW4gbGV0IGV2ZW50Q29uc3RydWN0b3IgYmUgRXZlbnQuXG5cbiAgLy8gMi4gTGV0IGV2ZW50IGJlIHRoZSByZXN1bHQgb2YgY3JlYXRpbmcgYW4gZXZlbnQgZ2l2ZW4gZXZlbnRDb25zdHJ1Y3RvcixcbiAgLy8gICAgaW4gdGhlIHJlbGV2YW50IHJlYWxtIG9mIHRhcmdldC5cbiAgLy8gMy4gSW5pdGlhbGl6ZSBldmVudFx1MjAxOXMgdHlwZSBhdHRyaWJ1dGUgdG8gZS5cbiAgY29uc3QgZXZlbnQgPSBuZXcgZXZlbnRDb25zdHJ1Y3RvcihlLCBldmVudEluaXREaWN0KSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5ldy1jYXBcblxuICAvLyA0LiBJbml0aWFsaXplIGFueSBvdGhlciBJREwgYXR0cmlidXRlcyBvZiBldmVudCBhcyBkZXNjcmliZWQgaW4gdGhlXG4gIC8vICAgIGludm9jYXRpb24gb2YgdGhpcyBhbGdvcml0aG0uXG5cbiAgLy8gNS4gUmV0dXJuIHRoZSByZXN1bHQgb2YgZGlzcGF0Y2hpbmcgZXZlbnQgYXQgdGFyZ2V0LCB3aXRoIGxlZ2FjeSB0YXJnZXRcbiAgLy8gICAgb3ZlcnJpZGUgZmxhZyBzZXQgaWYgc2V0LlxuICB0YXJnZXQuZGlzcGF0Y2hFdmVudChldmVudClcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2ZlZWRiYWNrLWZyb20tdGhlLXByb3RvY29sXG4gKiBAcGFyYW0ge2ltcG9ydCgnLi93ZWJzb2NrZXQnKS5XZWJTb2NrZXR9IHdzXG4gKiBAcGFyYW0ge251bWJlcn0gdHlwZSBPcGNvZGVcbiAqIEBwYXJhbSB7QnVmZmVyfSBkYXRhIGFwcGxpY2F0aW9uIGRhdGFcbiAqL1xuZnVuY3Rpb24gd2Vic29ja2V0TWVzc2FnZVJlY2VpdmVkICh3cywgdHlwZSwgZGF0YSkge1xuICAvLyAxLiBJZiByZWFkeSBzdGF0ZSBpcyBub3QgT1BFTiAoMSksIHRoZW4gcmV0dXJuLlxuICBpZiAod3Nba1JlYWR5U3RhdGVdICE9PSBzdGF0ZXMuT1BFTikge1xuICAgIHJldHVyblxuICB9XG5cbiAgLy8gMi4gTGV0IGRhdGFGb3JFdmVudCBiZSBkZXRlcm1pbmVkIGJ5IHN3aXRjaGluZyBvbiB0eXBlIGFuZCBiaW5hcnkgdHlwZTpcbiAgbGV0IGRhdGFGb3JFdmVudFxuXG4gIGlmICh0eXBlID09PSBvcGNvZGVzLlRFWFQpIHtcbiAgICAvLyAtPiB0eXBlIGluZGljYXRlcyB0aGF0IHRoZSBkYXRhIGlzIFRleHRcbiAgICAvLyAgICAgIGEgbmV3IERPTVN0cmluZyBjb250YWluaW5nIGRhdGFcbiAgICB0cnkge1xuICAgICAgZGF0YUZvckV2ZW50ID0gbmV3IFRleHREZWNvZGVyKCd1dGYtOCcsIHsgZmF0YWw6IHRydWUgfSkuZGVjb2RlKGRhdGEpXG4gICAgfSBjYXRjaCB7XG4gICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1JlY2VpdmVkIGludmFsaWQgVVRGLTggaW4gdGV4dCBmcmFtZS4nKVxuICAgICAgcmV0dXJuXG4gICAgfVxuICB9IGVsc2UgaWYgKHR5cGUgPT09IG9wY29kZXMuQklOQVJZKSB7XG4gICAgaWYgKHdzW2tCaW5hcnlUeXBlXSA9PT0gJ2Jsb2InKSB7XG4gICAgICAvLyAtPiB0eXBlIGluZGljYXRlcyB0aGF0IHRoZSBkYXRhIGlzIEJpbmFyeSBhbmQgYmluYXJ5IHR5cGUgaXMgXCJibG9iXCJcbiAgICAgIC8vICAgICAgYSBuZXcgQmxvYiBvYmplY3QsIGNyZWF0ZWQgaW4gdGhlIHJlbGV2YW50IFJlYWxtIG9mIHRoZSBXZWJTb2NrZXRcbiAgICAgIC8vICAgICAgb2JqZWN0LCB0aGF0IHJlcHJlc2VudHMgZGF0YSBhcyBpdHMgcmF3IGRhdGFcbiAgICAgIGRhdGFGb3JFdmVudCA9IG5ldyBCbG9iKFtkYXRhXSlcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gLT4gdHlwZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZGF0YSBpcyBCaW5hcnkgYW5kIGJpbmFyeSB0eXBlIGlzIFwiYXJyYXlidWZmZXJcIlxuICAgICAgLy8gICAgICBhIG5ldyBBcnJheUJ1ZmZlciBvYmplY3QsIGNyZWF0ZWQgaW4gdGhlIHJlbGV2YW50IFJlYWxtIG9mIHRoZVxuICAgICAgLy8gICAgICBXZWJTb2NrZXQgb2JqZWN0LCB3aG9zZSBjb250ZW50cyBhcmUgZGF0YVxuICAgICAgZGF0YUZvckV2ZW50ID0gbmV3IFVpbnQ4QXJyYXkoZGF0YSkuYnVmZmVyXG4gICAgfVxuICB9XG5cbiAgLy8gMy4gRmlyZSBhbiBldmVudCBuYW1lZCBtZXNzYWdlIGF0IHRoZSBXZWJTb2NrZXQgb2JqZWN0LCB1c2luZyBNZXNzYWdlRXZlbnQsXG4gIC8vICAgIHdpdGggdGhlIG9yaWdpbiBhdHRyaWJ1dGUgaW5pdGlhbGl6ZWQgdG8gdGhlIHNlcmlhbGl6YXRpb24gb2YgdGhlIFdlYlNvY2tldFxuICAvLyAgICBvYmplY3RcdTIwMTlzIHVybCdzIG9yaWdpbiwgYW5kIHRoZSBkYXRhIGF0dHJpYnV0ZSBpbml0aWFsaXplZCB0byBkYXRhRm9yRXZlbnQuXG4gIGZpcmVFdmVudCgnbWVzc2FnZScsIHdzLCBNZXNzYWdlRXZlbnQsIHtcbiAgICBvcmlnaW46IHdzW2tXZWJTb2NrZXRVUkxdLm9yaWdpbixcbiAgICBkYXRhOiBkYXRhRm9yRXZlbnRcbiAgfSlcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NVxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzI2MTZcbiAqIEBzZWUgaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mzk4NDA3XG4gKiBAcGFyYW0ge3N0cmluZ30gcHJvdG9jb2xcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZFN1YnByb3RvY29sIChwcm90b2NvbCkge1xuICAvLyBJZiBwcmVzZW50LCB0aGlzIHZhbHVlIGluZGljYXRlcyBvbmVcbiAgLy8gb3IgbW9yZSBjb21tYS1zZXBhcmF0ZWQgc3VicHJvdG9jb2wgdGhlIGNsaWVudCB3aXNoZXMgdG8gc3BlYWssXG4gIC8vIG9yZGVyZWQgYnkgcHJlZmVyZW5jZS4gIFRoZSBlbGVtZW50cyB0aGF0IGNvbXByaXNlIHRoaXMgdmFsdWVcbiAgLy8gTVVTVCBiZSBub24tZW1wdHkgc3RyaW5ncyB3aXRoIGNoYXJhY3RlcnMgaW4gdGhlIHJhbmdlIFUrMDAyMSB0b1xuICAvLyBVKzAwN0Ugbm90IGluY2x1ZGluZyBzZXBhcmF0b3IgY2hhcmFjdGVycyBhcyBkZWZpbmVkIGluXG4gIC8vIFtSRkMyNjE2XSBhbmQgTVVTVCBhbGwgYmUgdW5pcXVlIHN0cmluZ3MuXG4gIGlmIChwcm90b2NvbC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGZvciAoY29uc3QgY2hhciBvZiBwcm90b2NvbCkge1xuICAgIGNvbnN0IGNvZGUgPSBjaGFyLmNoYXJDb2RlQXQoMClcblxuICAgIGlmIChcbiAgICAgIGNvZGUgPCAweDIxIHx8XG4gICAgICBjb2RlID4gMHg3RSB8fFxuICAgICAgY2hhciA9PT0gJygnIHx8XG4gICAgICBjaGFyID09PSAnKScgfHxcbiAgICAgIGNoYXIgPT09ICc8JyB8fFxuICAgICAgY2hhciA9PT0gJz4nIHx8XG4gICAgICBjaGFyID09PSAnQCcgfHxcbiAgICAgIGNoYXIgPT09ICcsJyB8fFxuICAgICAgY2hhciA9PT0gJzsnIHx8XG4gICAgICBjaGFyID09PSAnOicgfHxcbiAgICAgIGNoYXIgPT09ICdcXFxcJyB8fFxuICAgICAgY2hhciA9PT0gJ1wiJyB8fFxuICAgICAgY2hhciA9PT0gJy8nIHx8XG4gICAgICBjaGFyID09PSAnWycgfHxcbiAgICAgIGNoYXIgPT09ICddJyB8fFxuICAgICAgY2hhciA9PT0gJz8nIHx8XG4gICAgICBjaGFyID09PSAnPScgfHxcbiAgICAgIGNoYXIgPT09ICd7JyB8fFxuICAgICAgY2hhciA9PT0gJ30nIHx8XG4gICAgICBjb2RlID09PSAzMiB8fCAvLyBTUFxuICAgICAgY29kZSA9PT0gOSAvLyBIVFxuICAgICkge1xuICAgICAgcmV0dXJuIGZhbHNlXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRydWVcbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTctNFxuICogQHBhcmFtIHtudW1iZXJ9IGNvZGVcbiAqL1xuZnVuY3Rpb24gaXNWYWxpZFN0YXR1c0NvZGUgKGNvZGUpIHtcbiAgaWYgKGNvZGUgPj0gMTAwMCAmJiBjb2RlIDwgMTAxNSkge1xuICAgIHJldHVybiAoXG4gICAgICBjb2RlICE9PSAxMDA0ICYmIC8vIHJlc2VydmVkXG4gICAgICBjb2RlICE9PSAxMDA1ICYmIC8vIFwiTVVTVCBOT1QgYmUgc2V0IGFzIGEgc3RhdHVzIGNvZGVcIlxuICAgICAgY29kZSAhPT0gMTAwNiAvLyBcIk1VU1QgTk9UIGJlIHNldCBhcyBhIHN0YXR1cyBjb2RlXCJcbiAgICApXG4gIH1cblxuICByZXR1cm4gY29kZSA+PSAzMDAwICYmIGNvZGUgPD0gNDk5OVxufVxuXG4vKipcbiAqIEBwYXJhbSB7aW1wb3J0KCcuL3dlYnNvY2tldCcpLldlYlNvY2tldH0gd3NcbiAqIEBwYXJhbSB7c3RyaW5nfHVuZGVmaW5lZH0gcmVhc29uXG4gKi9cbmZ1bmN0aW9uIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uICh3cywgcmVhc29uKSB7XG4gIGNvbnN0IHsgW2tDb250cm9sbGVyXTogY29udHJvbGxlciwgW2tSZXNwb25zZV06IHJlc3BvbnNlIH0gPSB3c1xuXG4gIGNvbnRyb2xsZXIuYWJvcnQoKVxuXG4gIGlmIChyZXNwb25zZT8uc29ja2V0ICYmICFyZXNwb25zZS5zb2NrZXQuZGVzdHJveWVkKSB7XG4gICAgcmVzcG9uc2Uuc29ja2V0LmRlc3Ryb3koKVxuICB9XG5cbiAgaWYgKHJlYXNvbikge1xuICAgIGZpcmVFdmVudCgnZXJyb3InLCB3cywgRXJyb3JFdmVudCwge1xuICAgICAgZXJyb3I6IG5ldyBFcnJvcihyZWFzb24pXG4gICAgfSlcbiAgfVxufVxuXG5tb2R1bGUuZXhwb3J0cyA9IHtcbiAgaXNFc3RhYmxpc2hlZCxcbiAgaXNDbG9zaW5nLFxuICBpc0Nsb3NlZCxcbiAgZmlyZUV2ZW50LFxuICBpc1ZhbGlkU3VicHJvdG9jb2wsXG4gIGlzVmFsaWRTdGF0dXNDb2RlLFxuICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbixcbiAgd2Vic29ja2V0TWVzc2FnZVJlY2VpdmVkXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IGRpYWdub3N0aWNzQ2hhbm5lbCA9IHJlcXVpcmUoJ2RpYWdub3N0aWNzX2NoYW5uZWwnKVxuY29uc3QgeyB1aWQsIHN0YXRlcyB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3Qge1xuICBrUmVhZHlTdGF0ZSxcbiAga1NlbnRDbG9zZSxcbiAga0J5dGVQYXJzZXIsXG4gIGtSZWNlaXZlZENsb3NlXG59ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgZmlyZUV2ZW50LCBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbiB9ID0gcmVxdWlyZSgnLi91dGlsJylcbmNvbnN0IHsgQ2xvc2VFdmVudCB9ID0gcmVxdWlyZSgnLi9ldmVudHMnKVxuY29uc3QgeyBtYWtlUmVxdWVzdCB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvcmVxdWVzdCcpXG5jb25zdCB7IGZldGNoaW5nIH0gPSByZXF1aXJlKCcuLi9mZXRjaC9pbmRleCcpXG5jb25zdCB7IEhlYWRlcnMgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL2hlYWRlcnMnKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuLi9nbG9iYWwnKVxuY29uc3QgeyBrSGVhZGVyc0xpc3QgfSA9IHJlcXVpcmUoJy4uL2NvcmUvc3ltYm9scycpXG5cbmNvbnN0IGNoYW5uZWxzID0ge31cbmNoYW5uZWxzLm9wZW4gPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpvcGVuJylcbmNoYW5uZWxzLmNsb3NlID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6Y2xvc2UnKVxuY2hhbm5lbHMuc29ja2V0RXJyb3IgPSBkaWFnbm9zdGljc0NoYW5uZWwuY2hhbm5lbCgndW5kaWNpOndlYnNvY2tldDpzb2NrZXRfZXJyb3InKVxuXG4vKiogQHR5cGUge2ltcG9ydCgnY3J5cHRvJyl9ICovXG5sZXQgY3J5cHRvXG50cnkge1xuICBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKVxufSBjYXRjaCB7XG5cbn1cblxuLyoqXG4gKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtd2Vic29ja2V0LWVzdGFibGlzaFxuICogQHBhcmFtIHtVUkx9IHVybFxuICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IHByb3RvY29sc1xuICogQHBhcmFtIHtpbXBvcnQoJy4vd2Vic29ja2V0JykuV2ViU29ja2V0fSB3c1xuICogQHBhcmFtIHsocmVzcG9uc2U6IGFueSkgPT4gdm9pZH0gb25Fc3RhYmxpc2hcbiAqIEBwYXJhbSB7UGFydGlhbDxpbXBvcnQoJy4uLy4uL3R5cGVzL3dlYnNvY2tldCcpLldlYlNvY2tldEluaXQ+fSBvcHRpb25zXG4gKi9cbmZ1bmN0aW9uIGVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24gKHVybCwgcHJvdG9jb2xzLCB3cywgb25Fc3RhYmxpc2gsIG9wdGlvbnMpIHtcbiAgLy8gMS4gTGV0IHJlcXVlc3RVUkwgYmUgYSBjb3B5IG9mIHVybCwgd2l0aCBpdHMgc2NoZW1lIHNldCB0byBcImh0dHBcIiwgaWYgdXJsXHUyMDE5c1xuICAvLyAgICBzY2hlbWUgaXMgXCJ3c1wiLCBhbmQgdG8gXCJodHRwc1wiIG90aGVyd2lzZS5cbiAgY29uc3QgcmVxdWVzdFVSTCA9IHVybFxuXG4gIHJlcXVlc3RVUkwucHJvdG9jb2wgPSB1cmwucHJvdG9jb2wgPT09ICd3czonID8gJ2h0dHA6JyA6ICdodHRwczonXG5cbiAgLy8gMi4gTGV0IHJlcXVlc3QgYmUgYSBuZXcgcmVxdWVzdCwgd2hvc2UgVVJMIGlzIHJlcXVlc3RVUkwsIGNsaWVudCBpcyBjbGllbnQsXG4gIC8vICAgIHNlcnZpY2Utd29ya2VycyBtb2RlIGlzIFwibm9uZVwiLCByZWZlcnJlciBpcyBcIm5vLXJlZmVycmVyXCIsIG1vZGUgaXNcbiAgLy8gICAgXCJ3ZWJzb2NrZXRcIiwgY3JlZGVudGlhbHMgbW9kZSBpcyBcImluY2x1ZGVcIiwgY2FjaGUgbW9kZSBpcyBcIm5vLXN0b3JlXCIgLFxuICAvLyAgICBhbmQgcmVkaXJlY3QgbW9kZSBpcyBcImVycm9yXCIuXG4gIGNvbnN0IHJlcXVlc3QgPSBtYWtlUmVxdWVzdCh7XG4gICAgdXJsTGlzdDogW3JlcXVlc3RVUkxdLFxuICAgIHNlcnZpY2VXb3JrZXJzOiAnbm9uZScsXG4gICAgcmVmZXJyZXI6ICduby1yZWZlcnJlcicsXG4gICAgbW9kZTogJ3dlYnNvY2tldCcsXG4gICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyxcbiAgICBjYWNoZTogJ25vLXN0b3JlJyxcbiAgICByZWRpcmVjdDogJ2Vycm9yJ1xuICB9KVxuXG4gIC8vIE5vdGU6IHVuZGljaSBleHRlbnNpb24sIGFsbG93IHNldHRpbmcgY3VzdG9tIGhlYWRlcnMuXG4gIGlmIChvcHRpb25zLmhlYWRlcnMpIHtcbiAgICBjb25zdCBoZWFkZXJzTGlzdCA9IG5ldyBIZWFkZXJzKG9wdGlvbnMuaGVhZGVycylba0hlYWRlcnNMaXN0XVxuXG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdCA9IGhlYWRlcnNMaXN0XG4gIH1cblxuICAvLyAzLiBBcHBlbmQgKGBVcGdyYWRlYCwgYHdlYnNvY2tldGApIHRvIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAvLyA0LiBBcHBlbmQgKGBDb25uZWN0aW9uYCwgYFVwZ3JhZGVgKSB0byByZXF1ZXN0XHUyMDE5cyBoZWFkZXIgbGlzdC5cbiAgLy8gTm90ZTogYm90aCBvZiB0aGVzZSBhcmUgaGFuZGxlZCBieSB1bmRpY2kgY3VycmVudGx5LlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vbm9kZWpzL3VuZGljaS9ibG9iLzY4YzI2OWM0MTQ0YzQ0NmYzZjEyMjA5NTEzMzhkYWVmNGE2YjVlYzQvbGliL2NsaWVudC5qcyNMMTM5N1xuXG4gIC8vIDUuIExldCBrZXlWYWx1ZSBiZSBhIG5vbmNlIGNvbnNpc3Rpbmcgb2YgYSByYW5kb21seSBzZWxlY3RlZFxuICAvLyAgICAxNi1ieXRlIHZhbHVlIHRoYXQgaGFzIGJlZW4gZm9yZ2l2aW5nLWJhc2U2NC1lbmNvZGVkIGFuZFxuICAvLyAgICBpc29tb3JwaGljIGVuY29kZWQuXG4gIGNvbnN0IGtleVZhbHVlID0gY3J5cHRvLnJhbmRvbUJ5dGVzKDE2KS50b1N0cmluZygnYmFzZTY0JylcblxuICAvLyA2LiBBcHBlbmQgKGBTZWMtV2ViU29ja2V0LUtleWAsIGtleVZhbHVlKSB0byByZXF1ZXN0XHUyMDE5c1xuICAvLyAgICBoZWFkZXIgbGlzdC5cbiAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3NlYy13ZWJzb2NrZXQta2V5Jywga2V5VmFsdWUpXG5cbiAgLy8gNy4gQXBwZW5kIChgU2VjLVdlYlNvY2tldC1WZXJzaW9uYCwgYDEzYCkgdG8gcmVxdWVzdFx1MjAxOXNcbiAgLy8gICAgaGVhZGVyIGxpc3QuXG4gIHJlcXVlc3QuaGVhZGVyc0xpc3QuYXBwZW5kKCdzZWMtd2Vic29ja2V0LXZlcnNpb24nLCAnMTMnKVxuXG4gIC8vIDguIEZvciBlYWNoIHByb3RvY29sIGluIHByb3RvY29scywgY29tYmluZVxuICAvLyAgICAoYFNlYy1XZWJTb2NrZXQtUHJvdG9jb2xgLCBwcm90b2NvbCkgaW4gcmVxdWVzdFx1MjAxOXMgaGVhZGVyXG4gIC8vICAgIGxpc3QuXG4gIGZvciAoY29uc3QgcHJvdG9jb2wgb2YgcHJvdG9jb2xzKSB7XG4gICAgcmVxdWVzdC5oZWFkZXJzTGlzdC5hcHBlbmQoJ3NlYy13ZWJzb2NrZXQtcHJvdG9jb2wnLCBwcm90b2NvbClcbiAgfVxuXG4gIC8vIDkuIExldCBwZXJtZXNzYWdlRGVmbGF0ZSBiZSBhIHVzZXItYWdlbnQgZGVmaW5lZFxuICAvLyAgICBcInBlcm1lc3NhZ2UtZGVmbGF0ZVwiIGV4dGVuc2lvbiBoZWFkZXIgdmFsdWUuXG4gIC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9tb3ppbGxhL2dlY2tvLWRldi9ibG9iL2NlNzgyMzRmNWU2NTNhNWQzOTE2ODEzZmY5OTBmMDUzNTEwMjI3YmMvbmV0d2Vyay9wcm90b2NvbC93ZWJzb2NrZXQvV2ViU29ja2V0Q2hhbm5lbC5jcHAjTDI2NzNcbiAgLy8gVE9ETzogZW5hYmxlIG9uY2UgcGVybWVzc2FnZS1kZWZsYXRlIGlzIHN1cHBvcnRlZFxuICBjb25zdCBwZXJtZXNzYWdlRGVmbGF0ZSA9ICcnIC8vICdwZXJtZXNzYWdlLWRlZmxhdGU7IDE1J1xuXG4gIC8vIDEwLiBBcHBlbmQgKGBTZWMtV2ViU29ja2V0LUV4dGVuc2lvbnNgLCBwZXJtZXNzYWdlRGVmbGF0ZSkgdG9cbiAgLy8gICAgIHJlcXVlc3RcdTIwMTlzIGhlYWRlciBsaXN0LlxuICAvLyByZXF1ZXN0LmhlYWRlcnNMaXN0LmFwcGVuZCgnc2VjLXdlYnNvY2tldC1leHRlbnNpb25zJywgcGVybWVzc2FnZURlZmxhdGUpXG5cbiAgLy8gMTEuIEZldGNoIHJlcXVlc3Qgd2l0aCB1c2VQYXJhbGxlbFF1ZXVlIHNldCB0byB0cnVlLCBhbmRcbiAgLy8gICAgIHByb2Nlc3NSZXNwb25zZSBnaXZlbiByZXNwb25zZSBiZWluZyB0aGVzZSBzdGVwczpcbiAgY29uc3QgY29udHJvbGxlciA9IGZldGNoaW5nKHtcbiAgICByZXF1ZXN0LFxuICAgIHVzZVBhcmFsbGVsUXVldWU6IHRydWUsXG4gICAgZGlzcGF0Y2hlcjogb3B0aW9ucy5kaXNwYXRjaGVyID8/IGdldEdsb2JhbERpc3BhdGNoZXIoKSxcbiAgICBwcm9jZXNzUmVzcG9uc2UgKHJlc3BvbnNlKSB7XG4gICAgICAvLyAxLiBJZiByZXNwb25zZSBpcyBhIG5ldHdvcmsgZXJyb3Igb3IgaXRzIHN0YXR1cyBpcyBub3QgMTAxLFxuICAgICAgLy8gICAgZmFpbCB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uXG4gICAgICBpZiAocmVzcG9uc2UudHlwZSA9PT0gJ2Vycm9yJyB8fCByZXNwb25zZS5zdGF0dXMgIT09IDEwMSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1JlY2VpdmVkIG5ldHdvcmsgZXJyb3Igb3Igbm9uLTEwMSBzdGF0dXMgY29kZS4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMi4gSWYgcHJvdG9jb2xzIGlzIG5vdCB0aGUgZW1wdHkgbGlzdCBhbmQgZXh0cmFjdGluZyBoZWFkZXJcbiAgICAgIC8vICAgIGxpc3QgdmFsdWVzIGdpdmVuIGBTZWMtV2ViU29ja2V0LVByb3RvY29sYCBhbmQgcmVzcG9uc2VcdTIwMTlzXG4gICAgICAvLyAgICBoZWFkZXIgbGlzdCByZXN1bHRzIGluIG51bGwsIGZhaWx1cmUsIG9yIHRoZSBlbXB0eSBieXRlXG4gICAgICAvLyAgICBzZXF1ZW5jZSwgdGhlbiBmYWlsIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi5cbiAgICAgIGlmIChwcm90b2NvbHMubGVuZ3RoICE9PSAwICYmICFyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ1NlYy1XZWJTb2NrZXQtUHJvdG9jb2wnKSkge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlcnZlciBkaWQgbm90IHJlc3BvbmQgd2l0aCBzZW50IHByb3RvY29scy4nKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgLy8gMy4gRm9sbG93IHRoZSByZXF1aXJlbWVudHMgc3RhdGVkIHN0ZXAgMiB0byBzdGVwIDYsIGluY2x1c2l2ZSxcbiAgICAgIC8vICAgIG9mIHRoZSBsYXN0IHNldCBvZiBzdGVwcyBpbiBzZWN0aW9uIDQuMSBvZiBUaGUgV2ViU29ja2V0XG4gICAgICAvLyAgICBQcm90b2NvbCB0byB2YWxpZGF0ZSByZXNwb25zZS4gVGhpcyBlaXRoZXIgcmVzdWx0cyBpbiBmYWlsXG4gICAgICAvLyAgICB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gb3IgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzXG4gICAgICAvLyAgICBlc3RhYmxpc2hlZC5cblxuICAgICAgLy8gMi4gSWYgdGhlIHJlc3BvbnNlIGxhY2tzIGFuIHxVcGdyYWRlfCBoZWFkZXIgZmllbGQgb3IgdGhlIHxVcGdyYWRlfFxuICAgICAgLy8gICAgaGVhZGVyIGZpZWxkIGNvbnRhaW5zIGEgdmFsdWUgdGhhdCBpcyBub3QgYW4gQVNDSUkgY2FzZS1cbiAgICAgIC8vICAgIGluc2Vuc2l0aXZlIG1hdGNoIGZvciB0aGUgdmFsdWUgXCJ3ZWJzb2NrZXRcIiwgdGhlIGNsaWVudCBNVVNUXG4gICAgICAvLyAgICBfRmFpbCB0aGUgV2ViU29ja2V0IENvbm5lY3Rpb25fLlxuICAgICAgaWYgKHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnVXBncmFkZScpPy50b0xvd2VyQ2FzZSgpICE9PSAnd2Vic29ja2V0Jykge1xuICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih3cywgJ1NlcnZlciBkaWQgbm90IHNldCBVcGdyYWRlIGhlYWRlciB0byBcIndlYnNvY2tldFwiLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyAzLiBJZiB0aGUgcmVzcG9uc2UgbGFja3MgYSB8Q29ubmVjdGlvbnwgaGVhZGVyIGZpZWxkIG9yIHRoZVxuICAgICAgLy8gICAgfENvbm5lY3Rpb258IGhlYWRlciBmaWVsZCBkb2Vzbid0IGNvbnRhaW4gYSB0b2tlbiB0aGF0IGlzIGFuXG4gICAgICAvLyAgICBBU0NJSSBjYXNlLWluc2Vuc2l0aXZlIG1hdGNoIGZvciB0aGUgdmFsdWUgXCJVcGdyYWRlXCIsIHRoZSBjbGllbnRcbiAgICAgIC8vICAgIE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy5cbiAgICAgIGlmIChyZXNwb25zZS5oZWFkZXJzTGlzdC5nZXQoJ0Nvbm5lY3Rpb24nKT8udG9Mb3dlckNhc2UoKSAhPT0gJ3VwZ3JhZGUnKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnU2VydmVyIGRpZCBub3Qgc2V0IENvbm5lY3Rpb24gaGVhZGVyIHRvIFwidXBncmFkZVwiLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA0LiBJZiB0aGUgcmVzcG9uc2UgbGFja3MgYSB8U2VjLVdlYlNvY2tldC1BY2NlcHR8IGhlYWRlciBmaWVsZCBvclxuICAgICAgLy8gICAgdGhlIHxTZWMtV2ViU29ja2V0LUFjY2VwdHwgY29udGFpbnMgYSB2YWx1ZSBvdGhlciB0aGFuIHRoZVxuICAgICAgLy8gICAgYmFzZTY0LWVuY29kZWQgU0hBLTEgb2YgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHxTZWMtV2ViU29ja2V0LVxuICAgICAgLy8gICAgS2V5fCAoYXMgYSBzdHJpbmcsIG5vdCBiYXNlNjQtZGVjb2RlZCkgd2l0aCB0aGUgc3RyaW5nIFwiMjU4RUFGQTUtXG4gICAgICAvLyAgICBFOTE0LTQ3REEtOTVDQS1DNUFCMERDODVCMTFcIiBidXQgaWdub3JpbmcgYW55IGxlYWRpbmcgYW5kXG4gICAgICAvLyAgICB0cmFpbGluZyB3aGl0ZXNwYWNlLCB0aGUgY2xpZW50IE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gICAgQ29ubmVjdGlvbl8uXG4gICAgICBjb25zdCBzZWNXU0FjY2VwdCA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1BY2NlcHQnKVxuICAgICAgY29uc3QgZGlnZXN0ID0gY3J5cHRvLmNyZWF0ZUhhc2goJ3NoYTEnKS51cGRhdGUoa2V5VmFsdWUgKyB1aWQpLmRpZ2VzdCgnYmFzZTY0JylcbiAgICAgIGlmIChzZWNXU0FjY2VwdCAhPT0gZGlnZXN0KSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnSW5jb3JyZWN0IGhhc2ggcmVjZWl2ZWQgaW4gU2VjLVdlYlNvY2tldC1BY2NlcHQgaGVhZGVyLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA1LiBJZiB0aGUgcmVzcG9uc2UgaW5jbHVkZXMgYSB8U2VjLVdlYlNvY2tldC1FeHRlbnNpb25zfCBoZWFkZXJcbiAgICAgIC8vICAgIGZpZWxkIGFuZCB0aGlzIGhlYWRlciBmaWVsZCBpbmRpY2F0ZXMgdGhlIHVzZSBvZiBhbiBleHRlbnNpb25cbiAgICAgIC8vICAgIHRoYXQgd2FzIG5vdCBwcmVzZW50IGluIHRoZSBjbGllbnQncyBoYW5kc2hha2UgKHRoZSBzZXJ2ZXIgaGFzXG4gICAgICAvLyAgICBpbmRpY2F0ZWQgYW4gZXh0ZW5zaW9uIG5vdCByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCksIHRoZSBjbGllbnRcbiAgICAgIC8vICAgIE1VU1QgX0ZhaWwgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy4gIChUaGUgcGFyc2luZyBvZiB0aGlzXG4gICAgICAvLyAgICBoZWFkZXIgZmllbGQgdG8gZGV0ZXJtaW5lIHdoaWNoIGV4dGVuc2lvbnMgYXJlIHJlcXVlc3RlZCBpc1xuICAgICAgLy8gICAgZGlzY3Vzc2VkIGluIFNlY3Rpb24gOS4xLilcbiAgICAgIGNvbnN0IHNlY0V4dGVuc2lvbiA9IHJlc3BvbnNlLmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1FeHRlbnNpb25zJylcblxuICAgICAgaWYgKHNlY0V4dGVuc2lvbiAhPT0gbnVsbCAmJiBzZWNFeHRlbnNpb24gIT09IHBlcm1lc3NhZ2VEZWZsYXRlKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnUmVjZWl2ZWQgZGlmZmVyZW50IHBlcm1lc3NhZ2UtZGVmbGF0ZSB0aGFuIHRoZSBvbmUgc2V0LicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICAvLyA2LiBJZiB0aGUgcmVzcG9uc2UgaW5jbHVkZXMgYSB8U2VjLVdlYlNvY2tldC1Qcm90b2NvbHwgaGVhZGVyIGZpZWxkXG4gICAgICAvLyAgICBhbmQgdGhpcyBoZWFkZXIgZmllbGQgaW5kaWNhdGVzIHRoZSB1c2Ugb2YgYSBzdWJwcm90b2NvbCB0aGF0IHdhc1xuICAgICAgLy8gICAgbm90IHByZXNlbnQgaW4gdGhlIGNsaWVudCdzIGhhbmRzaGFrZSAodGhlIHNlcnZlciBoYXMgaW5kaWNhdGVkIGFcbiAgICAgIC8vICAgIHN1YnByb3RvY29sIG5vdCByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudCksIHRoZSBjbGllbnQgTVVTVCBfRmFpbFxuICAgICAgLy8gICAgdGhlIFdlYlNvY2tldCBDb25uZWN0aW9uXy5cbiAgICAgIGNvbnN0IHNlY1Byb3RvY29sID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdTZWMtV2ViU29ja2V0LVByb3RvY29sJylcblxuICAgICAgaWYgKHNlY1Byb3RvY29sICE9PSBudWxsICYmIHNlY1Byb3RvY29sICE9PSByZXF1ZXN0LmhlYWRlcnNMaXN0LmdldCgnU2VjLVdlYlNvY2tldC1Qcm90b2NvbCcpKSB7XG4gICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHdzLCAnUHJvdG9jb2wgd2FzIG5vdCBzZXQgaW4gdGhlIG9wZW5pbmcgaGFuZHNoYWtlLicpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICByZXNwb25zZS5zb2NrZXQub24oJ2RhdGEnLCBvblNvY2tldERhdGEpXG4gICAgICByZXNwb25zZS5zb2NrZXQub24oJ2Nsb3NlJywgb25Tb2NrZXRDbG9zZSlcbiAgICAgIHJlc3BvbnNlLnNvY2tldC5vbignZXJyb3InLCBvblNvY2tldEVycm9yKVxuXG4gICAgICBpZiAoY2hhbm5lbHMub3Blbi5oYXNTdWJzY3JpYmVycykge1xuICAgICAgICBjaGFubmVscy5vcGVuLnB1Ymxpc2goe1xuICAgICAgICAgIGFkZHJlc3M6IHJlc3BvbnNlLnNvY2tldC5hZGRyZXNzKCksXG4gICAgICAgICAgcHJvdG9jb2w6IHNlY1Byb3RvY29sLFxuICAgICAgICAgIGV4dGVuc2lvbnM6IHNlY0V4dGVuc2lvblxuICAgICAgICB9KVxuICAgICAgfVxuXG4gICAgICBvbkVzdGFibGlzaChyZXNwb25zZSlcbiAgICB9XG4gIH0pXG5cbiAgcmV0dXJuIGNvbnRyb2xsZXJcbn1cblxuLyoqXG4gKiBAcGFyYW0ge0J1ZmZlcn0gY2h1bmtcbiAqL1xuZnVuY3Rpb24gb25Tb2NrZXREYXRhIChjaHVuaykge1xuICBpZiAoIXRoaXMud3Nba0J5dGVQYXJzZXJdLndyaXRlKGNodW5rKSkge1xuICAgIHRoaXMucGF1c2UoKVxuICB9XG59XG5cbi8qKlxuICogQHNlZSBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNmZWVkYmFjay1mcm9tLXRoZS1wcm90b2NvbFxuICogQHNlZSBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi03LjEuNFxuICovXG5mdW5jdGlvbiBvblNvY2tldENsb3NlICgpIHtcbiAgY29uc3QgeyB3cyB9ID0gdGhpc1xuXG4gIC8vIElmIHRoZSBUQ1AgY29ubmVjdGlvbiB3YXMgY2xvc2VkIGFmdGVyIHRoZVxuICAvLyBXZWJTb2NrZXQgY2xvc2luZyBoYW5kc2hha2Ugd2FzIGNvbXBsZXRlZCwgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uXG4gIC8vIGlzIHNhaWQgdG8gaGF2ZSBiZWVuIGNsb3NlZCBfY2xlYW5seV8uXG4gIGNvbnN0IHdhc0NsZWFuID0gd3Nba1NlbnRDbG9zZV0gJiYgd3Nba1JlY2VpdmVkQ2xvc2VdXG5cbiAgbGV0IGNvZGUgPSAxMDA1XG4gIGxldCByZWFzb24gPSAnJ1xuXG4gIGNvbnN0IHJlc3VsdCA9IHdzW2tCeXRlUGFyc2VyXS5jbG9zaW5nSW5mb1xuXG4gIGlmIChyZXN1bHQpIHtcbiAgICBjb2RlID0gcmVzdWx0LmNvZGUgPz8gMTAwNVxuICAgIHJlYXNvbiA9IHJlc3VsdC5yZWFzb25cbiAgfSBlbHNlIGlmICghd3Nba1NlbnRDbG9zZV0pIHtcbiAgICAvLyBJZiBfVGhlIFdlYlNvY2tldFxuICAgIC8vIENvbm5lY3Rpb24gaXMgQ2xvc2VkXyBhbmQgbm8gQ2xvc2UgY29udHJvbCBmcmFtZSB3YXMgcmVjZWl2ZWQgYnkgdGhlXG4gICAgLy8gZW5kcG9pbnQgKHN1Y2ggYXMgY291bGQgb2NjdXIgaWYgdGhlIHVuZGVybHlpbmcgdHJhbnNwb3J0IGNvbm5lY3Rpb25cbiAgICAvLyBpcyBsb3N0KSwgX1RoZSBXZWJTb2NrZXQgQ29ubmVjdGlvbiBDbG9zZSBDb2RlXyBpcyBjb25zaWRlcmVkIHRvIGJlXG4gICAgLy8gMTAwNi5cbiAgICBjb2RlID0gMTAwNlxuICB9XG5cbiAgLy8gMS4gQ2hhbmdlIHRoZSByZWFkeSBzdGF0ZSB0byBDTE9TRUQgKDMpLlxuICB3c1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuQ0xPU0VEXG5cbiAgLy8gMi4gSWYgdGhlIHVzZXIgYWdlbnQgd2FzIHJlcXVpcmVkIHRvIGZhaWwgdGhlIFdlYlNvY2tldFxuICAvLyAgICBjb25uZWN0aW9uLCBvciBpZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gd2FzIGNsb3NlZFxuICAvLyAgICBhZnRlciBiZWluZyBmbGFnZ2VkIGFzIGZ1bGwsIGZpcmUgYW4gZXZlbnQgbmFtZWQgZXJyb3JcbiAgLy8gICAgYXQgdGhlIFdlYlNvY2tldCBvYmplY3QuXG4gIC8vIFRPRE9cblxuICAvLyAzLiBGaXJlIGFuIGV2ZW50IG5hbWVkIGNsb3NlIGF0IHRoZSBXZWJTb2NrZXQgb2JqZWN0LFxuICAvLyAgICB1c2luZyBDbG9zZUV2ZW50LCB3aXRoIHRoZSB3YXNDbGVhbiBhdHRyaWJ1dGVcbiAgLy8gICAgaW5pdGlhbGl6ZWQgdG8gdHJ1ZSBpZiB0aGUgY29ubmVjdGlvbiBjbG9zZWQgY2xlYW5seVxuICAvLyAgICBhbmQgZmFsc2Ugb3RoZXJ3aXNlLCB0aGUgY29kZSBhdHRyaWJ1dGUgaW5pdGlhbGl6ZWQgdG9cbiAgLy8gICAgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGNsb3NlIGNvZGUsIGFuZCB0aGUgcmVhc29uXG4gIC8vICAgIGF0dHJpYnV0ZSBpbml0aWFsaXplZCB0byB0aGUgcmVzdWx0IG9mIGFwcGx5aW5nIFVURi04XG4gIC8vICAgIGRlY29kZSB3aXRob3V0IEJPTSB0byB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gY2xvc2VcbiAgLy8gICAgcmVhc29uLlxuICBmaXJlRXZlbnQoJ2Nsb3NlJywgd3MsIENsb3NlRXZlbnQsIHtcbiAgICB3YXNDbGVhbiwgY29kZSwgcmVhc29uXG4gIH0pXG5cbiAgaWYgKGNoYW5uZWxzLmNsb3NlLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgY2hhbm5lbHMuY2xvc2UucHVibGlzaCh7XG4gICAgICB3ZWJzb2NrZXQ6IHdzLFxuICAgICAgY29kZSxcbiAgICAgIHJlYXNvblxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gb25Tb2NrZXRFcnJvciAoZXJyb3IpIHtcbiAgY29uc3QgeyB3cyB9ID0gdGhpc1xuXG4gIHdzW2tSZWFkeVN0YXRlXSA9IHN0YXRlcy5DTE9TSU5HXG5cbiAgaWYgKGNoYW5uZWxzLnNvY2tldEVycm9yLmhhc1N1YnNjcmliZXJzKSB7XG4gICAgY2hhbm5lbHMuc29ja2V0RXJyb3IucHVibGlzaChlcnJvcilcbiAgfVxuXG4gIHRoaXMuZGVzdHJveSgpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBlc3RhYmxpc2hXZWJTb2NrZXRDb25uZWN0aW9uXG59XG4iLCAiJ3VzZSBzdHJpY3QnXG5cbmNvbnN0IHsgbWF4VW5zaWduZWQxNkJpdCB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuXG4vKiogQHR5cGUge2ltcG9ydCgnY3J5cHRvJyl9ICovXG5sZXQgY3J5cHRvXG50cnkge1xuICBjcnlwdG8gPSByZXF1aXJlKCdjcnlwdG8nKVxufSBjYXRjaCB7XG5cbn1cblxuY2xhc3MgV2Vic29ja2V0RnJhbWVTZW5kIHtcbiAgLyoqXG4gICAqIEBwYXJhbSB7QnVmZmVyfHVuZGVmaW5lZH0gZGF0YVxuICAgKi9cbiAgY29uc3RydWN0b3IgKGRhdGEpIHtcbiAgICB0aGlzLmZyYW1lRGF0YSA9IGRhdGFcbiAgICB0aGlzLm1hc2tLZXkgPSBjcnlwdG8ucmFuZG9tQnl0ZXMoNClcbiAgfVxuXG4gIGNyZWF0ZUZyYW1lIChvcGNvZGUpIHtcbiAgICBjb25zdCBib2R5TGVuZ3RoID0gdGhpcy5mcmFtZURhdGE/LmJ5dGVMZW5ndGggPz8gMFxuXG4gICAgLyoqIEB0eXBlIHtudW1iZXJ9ICovXG4gICAgbGV0IHBheWxvYWRMZW5ndGggPSBib2R5TGVuZ3RoIC8vIDAtMTI1XG4gICAgbGV0IG9mZnNldCA9IDZcblxuICAgIGlmIChib2R5TGVuZ3RoID4gbWF4VW5zaWduZWQxNkJpdCkge1xuICAgICAgb2Zmc2V0ICs9IDggLy8gcGF5bG9hZCBsZW5ndGggaXMgbmV4dCA4IGJ5dGVzXG4gICAgICBwYXlsb2FkTGVuZ3RoID0gMTI3XG4gICAgfSBlbHNlIGlmIChib2R5TGVuZ3RoID4gMTI1KSB7XG4gICAgICBvZmZzZXQgKz0gMiAvLyBwYXlsb2FkIGxlbmd0aCBpcyBuZXh0IDIgYnl0ZXNcbiAgICAgIHBheWxvYWRMZW5ndGggPSAxMjZcbiAgICB9XG5cbiAgICBjb25zdCBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUoYm9keUxlbmd0aCArIG9mZnNldClcblxuICAgIC8vIENsZWFyIGZpcnN0IDIgYnl0ZXMsIGV2ZXJ5dGhpbmcgZWxzZSBpcyBvdmVyd3JpdHRlblxuICAgIGJ1ZmZlclswXSA9IGJ1ZmZlclsxXSA9IDBcbiAgICBidWZmZXJbMF0gfD0gMHg4MCAvLyBGSU5cbiAgICBidWZmZXJbMF0gPSAoYnVmZmVyWzBdICYgMHhGMCkgKyBvcGNvZGUgLy8gb3Bjb2RlXG5cbiAgICAvKiEgd3MuIE1JVCBMaWNlbnNlLiBFaW5hciBPdHRvIFN0YW5ndmlrIDxlaW5hcm9zQGdtYWlsLmNvbT4gKi9cbiAgICBidWZmZXJbb2Zmc2V0IC0gNF0gPSB0aGlzLm1hc2tLZXlbMF1cbiAgICBidWZmZXJbb2Zmc2V0IC0gM10gPSB0aGlzLm1hc2tLZXlbMV1cbiAgICBidWZmZXJbb2Zmc2V0IC0gMl0gPSB0aGlzLm1hc2tLZXlbMl1cbiAgICBidWZmZXJbb2Zmc2V0IC0gMV0gPSB0aGlzLm1hc2tLZXlbM11cblxuICAgIGJ1ZmZlclsxXSA9IHBheWxvYWRMZW5ndGhcblxuICAgIGlmIChwYXlsb2FkTGVuZ3RoID09PSAxMjYpIHtcbiAgICAgIGJ1ZmZlci53cml0ZVVJbnQxNkJFKGJvZHlMZW5ndGgsIDIpXG4gICAgfSBlbHNlIGlmIChwYXlsb2FkTGVuZ3RoID09PSAxMjcpIHtcbiAgICAgIC8vIENsZWFyIGV4dGVuZGVkIHBheWxvYWQgbGVuZ3RoXG4gICAgICBidWZmZXJbMl0gPSBidWZmZXJbM10gPSAwXG4gICAgICBidWZmZXIud3JpdGVVSW50QkUoYm9keUxlbmd0aCwgNCwgNilcbiAgICB9XG5cbiAgICBidWZmZXJbMV0gfD0gMHg4MCAvLyBNQVNLXG5cbiAgICAvLyBtYXNrIGJvZHlcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJvZHlMZW5ndGg7IGkrKykge1xuICAgICAgYnVmZmVyW29mZnNldCArIGldID0gdGhpcy5mcmFtZURhdGFbaV0gXiB0aGlzLm1hc2tLZXlbaSAlIDRdXG4gICAgfVxuXG4gICAgcmV0dXJuIGJ1ZmZlclxuICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBXZWJzb2NrZXRGcmFtZVNlbmRcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyBXcml0YWJsZSB9ID0gcmVxdWlyZSgnc3RyZWFtJylcbmNvbnN0IGRpYWdub3N0aWNzQ2hhbm5lbCA9IHJlcXVpcmUoJ2RpYWdub3N0aWNzX2NoYW5uZWwnKVxuY29uc3QgeyBwYXJzZXJTdGF0ZXMsIG9wY29kZXMsIHN0YXRlcywgZW1wdHlCdWZmZXIgfSA9IHJlcXVpcmUoJy4vY29uc3RhbnRzJylcbmNvbnN0IHsga1JlYWR5U3RhdGUsIGtTZW50Q2xvc2UsIGtSZXNwb25zZSwga1JlY2VpdmVkQ2xvc2UgfSA9IHJlcXVpcmUoJy4vc3ltYm9scycpXG5jb25zdCB7IGlzVmFsaWRTdGF0dXNDb2RlLCBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbiwgd2Vic29ja2V0TWVzc2FnZVJlY2VpdmVkIH0gPSByZXF1aXJlKCcuL3V0aWwnKVxuY29uc3QgeyBXZWJzb2NrZXRGcmFtZVNlbmQgfSA9IHJlcXVpcmUoJy4vZnJhbWUnKVxuXG4vLyBUaGlzIGNvZGUgd2FzIGluZmx1ZW5jZWQgYnkgd3MgcmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlLlxuLy8gQ29weXJpZ2h0IChjKSAyMDExIEVpbmFyIE90dG8gU3Rhbmd2aWsgPGVpbmFyb3NAZ21haWwuY29tPlxuLy8gQ29weXJpZ2h0IChjKSAyMDEzIEFybm91dCBLYXplbWllciBhbmQgY29udHJpYnV0b3JzXG4vLyBDb3B5cmlnaHQgKGMpIDIwMTYgTHVpZ2kgUGluY2EgYW5kIGNvbnRyaWJ1dG9yc1xuXG5jb25zdCBjaGFubmVscyA9IHt9XG5jaGFubmVscy5waW5nID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6cGluZycpXG5jaGFubmVscy5wb25nID0gZGlhZ25vc3RpY3NDaGFubmVsLmNoYW5uZWwoJ3VuZGljaTp3ZWJzb2NrZXQ6cG9uZycpXG5cbmNsYXNzIEJ5dGVQYXJzZXIgZXh0ZW5kcyBXcml0YWJsZSB7XG4gICNidWZmZXJzID0gW11cbiAgI2J5dGVPZmZzZXQgPSAwXG5cbiAgI3N0YXRlID0gcGFyc2VyU3RhdGVzLklORk9cblxuICAjaW5mbyA9IHt9XG4gICNmcmFnbWVudHMgPSBbXVxuXG4gIGNvbnN0cnVjdG9yICh3cykge1xuICAgIHN1cGVyKClcblxuICAgIHRoaXMud3MgPSB3c1xuICB9XG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7QnVmZmVyfSBjaHVua1xuICAgKiBAcGFyYW0geygpID0+IHZvaWR9IGNhbGxiYWNrXG4gICAqL1xuICBfd3JpdGUgKGNodW5rLCBfLCBjYWxsYmFjaykge1xuICAgIHRoaXMuI2J1ZmZlcnMucHVzaChjaHVuaylcbiAgICB0aGlzLiNieXRlT2Zmc2V0ICs9IGNodW5rLmxlbmd0aFxuXG4gICAgdGhpcy5ydW4oY2FsbGJhY2spXG4gIH1cblxuICAvKipcbiAgICogUnVucyB3aGVuZXZlciBhIG5ldyBjaHVuayBpcyByZWNlaXZlZC5cbiAgICogQ2FsbGJhY2sgaXMgY2FsbGVkIHdoZW5ldmVyIHRoZXJlIGFyZSBubyBtb3JlIGNodW5rcyBidWZmZXJpbmcsXG4gICAqIG9yIG5vdCBlbm91Z2ggYnl0ZXMgYXJlIGJ1ZmZlcmVkIHRvIHBhcnNlLlxuICAgKi9cbiAgcnVuIChjYWxsYmFjaykge1xuICAgIHdoaWxlICh0cnVlKSB7XG4gICAgICBpZiAodGhpcy4jc3RhdGUgPT09IHBhcnNlclN0YXRlcy5JTkZPKSB7XG4gICAgICAgIC8vIElmIHRoZXJlIGFyZW4ndCBlbm91Z2ggYnl0ZXMgdG8gcGFyc2UgdGhlIHBheWxvYWQgbGVuZ3RoLCBldGMuXG4gICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0IDwgMikge1xuICAgICAgICAgIHJldHVybiBjYWxsYmFjaygpXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBidWZmZXIgPSB0aGlzLmNvbnN1bWUoMilcblxuICAgICAgICB0aGlzLiNpbmZvLmZpbiA9IChidWZmZXJbMF0gJiAweDgwKSAhPT0gMFxuICAgICAgICB0aGlzLiNpbmZvLm9wY29kZSA9IGJ1ZmZlclswXSAmIDB4MEZcblxuICAgICAgICAvLyBJZiB3ZSByZWNlaXZlIGEgZnJhZ21lbnRlZCBtZXNzYWdlLCB3ZSB1c2UgdGhlIHR5cGUgb2YgdGhlIGZpcnN0XG4gICAgICAgIC8vIGZyYW1lIHRvIHBhcnNlIHRoZSBmdWxsIG1lc3NhZ2UgYXMgYmluYXJ5L3RleHQsIHdoZW4gaXQncyB0ZXJtaW5hdGVkXG4gICAgICAgIHRoaXMuI2luZm8ub3JpZ2luYWxPcGNvZGUgPz89IHRoaXMuI2luZm8ub3Bjb2RlXG5cbiAgICAgICAgdGhpcy4jaW5mby5mcmFnbWVudGVkID0gIXRoaXMuI2luZm8uZmluICYmIHRoaXMuI2luZm8ub3Bjb2RlICE9PSBvcGNvZGVzLkNPTlRJTlVBVElPTlxuXG4gICAgICAgIGlmICh0aGlzLiNpbmZvLmZyYWdtZW50ZWQgJiYgdGhpcy4jaW5mby5vcGNvZGUgIT09IG9wY29kZXMuQklOQVJZICYmIHRoaXMuI2luZm8ub3Bjb2RlICE9PSBvcGNvZGVzLlRFWFQpIHtcbiAgICAgICAgICAvLyBPbmx5IHRleHQgYW5kIGJpbmFyeSBmcmFtZXMgY2FuIGJlIGZyYWdtZW50ZWRcbiAgICAgICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLndzLCAnSW52YWxpZCBmcmFtZSB0eXBlIHdhcyBmcmFnbWVudGVkLicpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwYXlsb2FkTGVuZ3RoID0gYnVmZmVyWzFdICYgMHg3RlxuXG4gICAgICAgIGlmIChwYXlsb2FkTGVuZ3RoIDw9IDEyNSkge1xuICAgICAgICAgIHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aCA9IHBheWxvYWRMZW5ndGhcbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5SRUFEX0RBVEFcbiAgICAgICAgfSBlbHNlIGlmIChwYXlsb2FkTGVuZ3RoID09PSAxMjYpIHtcbiAgICAgICAgICB0aGlzLiNzdGF0ZSA9IHBhcnNlclN0YXRlcy5QQVlMT0FETEVOR1RIXzE2XG4gICAgICAgIH0gZWxzZSBpZiAocGF5bG9hZExlbmd0aCA9PT0gMTI3KSB7XG4gICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuUEFZTE9BRExFTkdUSF82NFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuI2luZm8uZnJhZ21lbnRlZCAmJiBwYXlsb2FkTGVuZ3RoID4gMTI1KSB7XG4gICAgICAgICAgLy8gQSBmcmFnbWVudGVkIGZyYW1lIGNhbid0IGJlIGZyYWdtZW50ZWQgaXRzZWxmXG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ0ZyYWdtZW50ZWQgZnJhbWUgZXhjZWVkZWQgMTI1IGJ5dGVzLicpXG4gICAgICAgICAgcmV0dXJuXG4gICAgICAgIH0gZWxzZSBpZiAoXG4gICAgICAgICAgKHRoaXMuI2luZm8ub3Bjb2RlID09PSBvcGNvZGVzLlBJTkcgfHxcbiAgICAgICAgICAgIHRoaXMuI2luZm8ub3Bjb2RlID09PSBvcGNvZGVzLlBPTkcgfHxcbiAgICAgICAgICAgIHRoaXMuI2luZm8ub3Bjb2RlID09PSBvcGNvZGVzLkNMT1NFKSAmJlxuICAgICAgICAgIHBheWxvYWRMZW5ndGggPiAxMjVcbiAgICAgICAgKSB7XG4gICAgICAgICAgLy8gQ29udHJvbCBmcmFtZXMgY2FuIGhhdmUgYSBwYXlsb2FkIGxlbmd0aCBvZiAxMjUgYnl0ZXMgTUFYXG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ1BheWxvYWQgbGVuZ3RoIGZvciBjb250cm9sIGZyYW1lIGV4Y2VlZGVkIDEyNSBieXRlcy4nKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuI2luZm8ub3Bjb2RlID09PSBvcGNvZGVzLkNMT1NFKSB7XG4gICAgICAgICAgaWYgKHBheWxvYWRMZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uKHRoaXMud3MsICdSZWNlaXZlZCBjbG9zZSBmcmFtZSB3aXRoIGEgMS1ieXRlIGJvZHkuJylcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cblxuICAgICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLmNvbnN1bWUocGF5bG9hZExlbmd0aClcblxuICAgICAgICAgIHRoaXMuI2luZm8uY2xvc2VJbmZvID0gdGhpcy5wYXJzZUNsb3NlQm9keShmYWxzZSwgYm9keSlcblxuICAgICAgICAgIGlmICghdGhpcy53c1trU2VudENsb3NlXSkge1xuICAgICAgICAgICAgLy8gSWYgYW4gZW5kcG9pbnQgcmVjZWl2ZXMgYSBDbG9zZSBmcmFtZSBhbmQgZGlkIG5vdCBwcmV2aW91c2x5IHNlbmQgYVxuICAgICAgICAgICAgLy8gQ2xvc2UgZnJhbWUsIHRoZSBlbmRwb2ludCBNVVNUIHNlbmQgYSBDbG9zZSBmcmFtZSBpbiByZXNwb25zZS4gIChXaGVuXG4gICAgICAgICAgICAvLyBzZW5kaW5nIGEgQ2xvc2UgZnJhbWUgaW4gcmVzcG9uc2UsIHRoZSBlbmRwb2ludCB0eXBpY2FsbHkgZWNob3MgdGhlXG4gICAgICAgICAgICAvLyBzdGF0dXMgY29kZSBpdCByZWNlaXZlZC4pXG4gICAgICAgICAgICBjb25zdCBib2R5ID0gQnVmZmVyLmFsbG9jVW5zYWZlKDIpXG4gICAgICAgICAgICBib2R5LndyaXRlVUludDE2QkUodGhpcy4jaW5mby5jbG9zZUluZm8uY29kZSwgMClcbiAgICAgICAgICAgIGNvbnN0IGNsb3NlRnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKGJvZHkpXG5cbiAgICAgICAgICAgIHRoaXMud3Nba1Jlc3BvbnNlXS5zb2NrZXQud3JpdGUoXG4gICAgICAgICAgICAgIGNsb3NlRnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5DTE9TRSksXG4gICAgICAgICAgICAgIChlcnIpID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIWVycikge1xuICAgICAgICAgICAgICAgICAgdGhpcy53c1trU2VudENsb3NlXSA9IHRydWVcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBVcG9uIGVpdGhlciBzZW5kaW5nIG9yIHJlY2VpdmluZyBhIENsb3NlIGNvbnRyb2wgZnJhbWUsIGl0IGlzIHNhaWRcbiAgICAgICAgICAvLyB0aGF0IF9UaGUgV2ViU29ja2V0IENsb3NpbmcgSGFuZHNoYWtlIGlzIFN0YXJ0ZWRfIGFuZCB0aGF0IHRoZVxuICAgICAgICAgIC8vIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGluIHRoZSBDTE9TSU5HIHN0YXRlLlxuICAgICAgICAgIHRoaXMud3Nba1JlYWR5U3RhdGVdID0gc3RhdGVzLkNMT1NJTkdcbiAgICAgICAgICB0aGlzLndzW2tSZWNlaXZlZENsb3NlXSA9IHRydWVcblxuICAgICAgICAgIHRoaXMuZW5kKClcblxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMuI2luZm8ub3Bjb2RlID09PSBvcGNvZGVzLlBJTkcpIHtcbiAgICAgICAgICAvLyBVcG9uIHJlY2VpcHQgb2YgYSBQaW5nIGZyYW1lLCBhbiBlbmRwb2ludCBNVVNUIHNlbmQgYSBQb25nIGZyYW1lIGluXG4gICAgICAgICAgLy8gcmVzcG9uc2UsIHVubGVzcyBpdCBhbHJlYWR5IHJlY2VpdmVkIGEgQ2xvc2UgZnJhbWUuXG4gICAgICAgICAgLy8gQSBQb25nIGZyYW1lIHNlbnQgaW4gcmVzcG9uc2UgdG8gYSBQaW5nIGZyYW1lIG11c3QgaGF2ZSBpZGVudGljYWxcbiAgICAgICAgICAvLyBcIkFwcGxpY2F0aW9uIGRhdGFcIlxuXG4gICAgICAgICAgY29uc3QgYm9keSA9IHRoaXMuY29uc3VtZShwYXlsb2FkTGVuZ3RoKVxuXG4gICAgICAgICAgaWYgKCF0aGlzLndzW2tSZWNlaXZlZENsb3NlXSkge1xuICAgICAgICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKGJvZHkpXG5cbiAgICAgICAgICAgIHRoaXMud3Nba1Jlc3BvbnNlXS5zb2NrZXQud3JpdGUoZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5QT05HKSlcblxuICAgICAgICAgICAgaWYgKGNoYW5uZWxzLnBpbmcuaGFzU3Vic2NyaWJlcnMpIHtcbiAgICAgICAgICAgICAgY2hhbm5lbHMucGluZy5wdWJsaXNoKHtcbiAgICAgICAgICAgICAgICBwYXlsb2FkOiBib2R5XG4gICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuSU5GT1xuXG4gICAgICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPiAwKSB7XG4gICAgICAgICAgICBjb250aW51ZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjaygpXG4gICAgICAgICAgICByZXR1cm5cbiAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy4jaW5mby5vcGNvZGUgPT09IG9wY29kZXMuUE9ORykge1xuICAgICAgICAgIC8vIEEgUG9uZyBmcmFtZSBNQVkgYmUgc2VudCB1bnNvbGljaXRlZC4gIFRoaXMgc2VydmVzIGFzIGFcbiAgICAgICAgICAvLyB1bmlkaXJlY3Rpb25hbCBoZWFydGJlYXQuICBBIHJlc3BvbnNlIHRvIGFuIHVuc29saWNpdGVkIFBvbmcgZnJhbWUgaXNcbiAgICAgICAgICAvLyBub3QgZXhwZWN0ZWQuXG5cbiAgICAgICAgICBjb25zdCBib2R5ID0gdGhpcy5jb25zdW1lKHBheWxvYWRMZW5ndGgpXG5cbiAgICAgICAgICBpZiAoY2hhbm5lbHMucG9uZy5oYXNTdWJzY3JpYmVycykge1xuICAgICAgICAgICAgY2hhbm5lbHMucG9uZy5wdWJsaXNoKHtcbiAgICAgICAgICAgICAgcGF5bG9hZDogYm9keVxuICAgICAgICAgICAgfSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA+IDApIHtcbiAgICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgICAgIHJldHVyblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICh0aGlzLiNzdGF0ZSA9PT0gcGFyc2VyU3RhdGVzLlBBWUxPQURMRU5HVEhfMTYpIHtcbiAgICAgICAgaWYgKHRoaXMuI2J5dGVPZmZzZXQgPCAyKSB7XG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKClcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMuY29uc3VtZSgyKVxuXG4gICAgICAgIHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aCA9IGJ1ZmZlci5yZWFkVUludDE2QkUoMClcbiAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuUkVBRF9EQVRBXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuI3N0YXRlID09PSBwYXJzZXJTdGF0ZXMuUEFZTE9BRExFTkdUSF82NCkge1xuICAgICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA8IDgpIHtcbiAgICAgICAgICByZXR1cm4gY2FsbGJhY2soKVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYnVmZmVyID0gdGhpcy5jb25zdW1lKDgpXG4gICAgICAgIGNvbnN0IHVwcGVyID0gYnVmZmVyLnJlYWRVSW50MzJCRSgwKVxuXG4gICAgICAgIC8vIDJeMzEgaXMgdGhlIG1heGluaW11bSBieXRlcyBhbiBhcnJheWJ1ZmZlciBjYW4gY29udGFpblxuICAgICAgICAvLyBvbiAzMi1iaXQgc3lzdGVtcy4gQWx0aG91Z2gsIG9uIDY0LWJpdCBzeXN0ZW1zLCB0aGlzIGlzXG4gICAgICAgIC8vIDJeNTMtMSBieXRlcy5cbiAgICAgICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvRXJyb3JzL0ludmFsaWRfYXJyYXlfbGVuZ3RoXG4gICAgICAgIC8vIGh0dHBzOi8vc291cmNlLmNocm9taXVtLm9yZy9jaHJvbWl1bS9jaHJvbWl1bS9zcmMvKy9tYWluOnY4L3NyYy9jb21tb24vZ2xvYmFscy5oO2RyYz0xOTQ2MjEyYWMwMTAwNjY4ZjE0ZWI5ZTI4NDNiZGQ4NDZlNTEwYTFlO2Jwdj0xO2JwdD0xO2w9MTI3NVxuICAgICAgICAvLyBodHRwczovL3NvdXJjZS5jaHJvbWl1bS5vcmcvY2hyb21pdW0vY2hyb21pdW0vc3JjLysvbWFpbjp2OC9zcmMvb2JqZWN0cy9qcy1hcnJheS1idWZmZXIuaDtsPTM0O2RyYz0xOTQ2MjEyYWMwMTAwNjY4ZjE0ZWI5ZTI4NDNiZGQ4NDZlNTEwYTFlXG4gICAgICAgIGlmICh1cHBlciA+IDIgKiogMzEgLSAxKSB7XG4gICAgICAgICAgZmFpbFdlYnNvY2tldENvbm5lY3Rpb24odGhpcy53cywgJ1JlY2VpdmVkIHBheWxvYWQgbGVuZ3RoID4gMl4zMSBieXRlcy4nKVxuICAgICAgICAgIHJldHVyblxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgbG93ZXIgPSBidWZmZXIucmVhZFVJbnQzMkJFKDQpXG5cbiAgICAgICAgdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoID0gKHVwcGVyIDw8IDgpICsgbG93ZXJcbiAgICAgICAgdGhpcy4jc3RhdGUgPSBwYXJzZXJTdGF0ZXMuUkVBRF9EQVRBXG4gICAgICB9IGVsc2UgaWYgKHRoaXMuI3N0YXRlID09PSBwYXJzZXJTdGF0ZXMuUkVBRF9EQVRBKSB7XG4gICAgICAgIGlmICh0aGlzLiNieXRlT2Zmc2V0IDwgdGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoKSB7XG4gICAgICAgICAgLy8gSWYgdGhlcmUgaXMgc3RpbGwgbW9yZSBkYXRhIGluIHRoaXMgY2h1bmsgdGhhdCBuZWVkcyB0byBiZSByZWFkXG4gICAgICAgICAgcmV0dXJuIGNhbGxiYWNrKClcbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLiNieXRlT2Zmc2V0ID49IHRoaXMuI2luZm8ucGF5bG9hZExlbmd0aCkge1xuICAgICAgICAgIC8vIElmIHRoZSBzZXJ2ZXIgc2VudCBtdWx0aXBsZSBmcmFtZXMgaW4gYSBzaW5nbGUgY2h1bmtcblxuICAgICAgICAgIGNvbnN0IGJvZHkgPSB0aGlzLmNvbnN1bWUodGhpcy4jaW5mby5wYXlsb2FkTGVuZ3RoKVxuXG4gICAgICAgICAgdGhpcy4jZnJhZ21lbnRzLnB1c2goYm9keSlcblxuICAgICAgICAgIC8vIElmIHRoZSBmcmFtZSBpcyB1bmZyYWdtZW50ZWQsIG9yIGEgZnJhZ21lbnRlZCBmcmFtZSB3YXMgdGVybWluYXRlZCxcbiAgICAgICAgICAvLyBhIG1lc3NhZ2Ugd2FzIHJlY2VpdmVkXG4gICAgICAgICAgaWYgKCF0aGlzLiNpbmZvLmZyYWdtZW50ZWQgfHwgKHRoaXMuI2luZm8uZmluICYmIHRoaXMuI2luZm8ub3Bjb2RlID09PSBvcGNvZGVzLkNPTlRJTlVBVElPTikpIHtcbiAgICAgICAgICAgIGNvbnN0IGZ1bGxNZXNzYWdlID0gQnVmZmVyLmNvbmNhdCh0aGlzLiNmcmFnbWVudHMpXG5cbiAgICAgICAgICAgIHdlYnNvY2tldE1lc3NhZ2VSZWNlaXZlZCh0aGlzLndzLCB0aGlzLiNpbmZvLm9yaWdpbmFsT3Bjb2RlLCBmdWxsTWVzc2FnZSlcblxuICAgICAgICAgICAgdGhpcy4jaW5mbyA9IHt9XG4gICAgICAgICAgICB0aGlzLiNmcmFnbWVudHMubGVuZ3RoID0gMFxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuI3N0YXRlID0gcGFyc2VyU3RhdGVzLklORk9cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGhpcy4jYnl0ZU9mZnNldCA+IDApIHtcbiAgICAgICAgY29udGludWVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNhbGxiYWNrKClcbiAgICAgICAgYnJlYWtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGFrZSBuIGJ5dGVzIGZyb20gdGhlIGJ1ZmZlcmVkIEJ1ZmZlcnNcbiAgICogQHBhcmFtIHtudW1iZXJ9IG5cbiAgICogQHJldHVybnMge0J1ZmZlcnxudWxsfVxuICAgKi9cbiAgY29uc3VtZSAobikge1xuICAgIGlmIChuID4gdGhpcy4jYnl0ZU9mZnNldCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9IGVsc2UgaWYgKG4gPT09IDApIHtcbiAgICAgIHJldHVybiBlbXB0eUJ1ZmZlclxuICAgIH1cblxuICAgIGlmICh0aGlzLiNidWZmZXJzWzBdLmxlbmd0aCA9PT0gbikge1xuICAgICAgdGhpcy4jYnl0ZU9mZnNldCAtPSB0aGlzLiNidWZmZXJzWzBdLmxlbmd0aFxuICAgICAgcmV0dXJuIHRoaXMuI2J1ZmZlcnMuc2hpZnQoKVxuICAgIH1cblxuICAgIGNvbnN0IGJ1ZmZlciA9IEJ1ZmZlci5hbGxvY1Vuc2FmZShuKVxuICAgIGxldCBvZmZzZXQgPSAwXG5cbiAgICB3aGlsZSAob2Zmc2V0ICE9PSBuKSB7XG4gICAgICBjb25zdCBuZXh0ID0gdGhpcy4jYnVmZmVyc1swXVxuICAgICAgY29uc3QgeyBsZW5ndGggfSA9IG5leHRcblxuICAgICAgaWYgKGxlbmd0aCArIG9mZnNldCA9PT0gbikge1xuICAgICAgICBidWZmZXIuc2V0KHRoaXMuI2J1ZmZlcnMuc2hpZnQoKSwgb2Zmc2V0KVxuICAgICAgICBicmVha1xuICAgICAgfSBlbHNlIGlmIChsZW5ndGggKyBvZmZzZXQgPiBuKSB7XG4gICAgICAgIGJ1ZmZlci5zZXQobmV4dC5zdWJhcnJheSgwLCBuIC0gb2Zmc2V0KSwgb2Zmc2V0KVxuICAgICAgICB0aGlzLiNidWZmZXJzWzBdID0gbmV4dC5zdWJhcnJheShuIC0gb2Zmc2V0KVxuICAgICAgICBicmVha1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYnVmZmVyLnNldCh0aGlzLiNidWZmZXJzLnNoaWZ0KCksIG9mZnNldClcbiAgICAgICAgb2Zmc2V0ICs9IG5leHQubGVuZ3RoXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy4jYnl0ZU9mZnNldCAtPSBuXG5cbiAgICByZXR1cm4gYnVmZmVyXG4gIH1cblxuICBwYXJzZUNsb3NlQm9keSAob25seUNvZGUsIGRhdGEpIHtcbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi03LjEuNVxuICAgIC8qKiBAdHlwZSB7bnVtYmVyfHVuZGVmaW5lZH0gKi9cbiAgICBsZXQgY29kZVxuXG4gICAgaWYgKGRhdGEubGVuZ3RoID49IDIpIHtcbiAgICAgIC8vIF9UaGUgV2ViU29ja2V0IENvbm5lY3Rpb24gQ2xvc2UgQ29kZV8gaXNcbiAgICAgIC8vIGRlZmluZWQgYXMgdGhlIHN0YXR1cyBjb2RlIChTZWN0aW9uIDcuNCkgY29udGFpbmVkIGluIHRoZSBmaXJzdCBDbG9zZVxuICAgICAgLy8gY29udHJvbCBmcmFtZSByZWNlaXZlZCBieSB0aGUgYXBwbGljYXRpb25cbiAgICAgIGNvZGUgPSBkYXRhLnJlYWRVSW50MTZCRSgwKVxuICAgIH1cblxuICAgIGlmIChvbmx5Q29kZSkge1xuICAgICAgaWYgKCFpc1ZhbGlkU3RhdHVzQ29kZShjb2RlKSkge1xuICAgICAgICByZXR1cm4gbnVsbFxuICAgICAgfVxuXG4gICAgICByZXR1cm4geyBjb2RlIH1cbiAgICB9XG5cbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi03LjEuNlxuICAgIC8qKiBAdHlwZSB7QnVmZmVyfSAqL1xuICAgIGxldCByZWFzb24gPSBkYXRhLnN1YmFycmF5KDIpXG5cbiAgICAvLyBSZW1vdmUgQk9NXG4gICAgaWYgKHJlYXNvblswXSA9PT0gMHhFRiAmJiByZWFzb25bMV0gPT09IDB4QkIgJiYgcmVhc29uWzJdID09PSAweEJGKSB7XG4gICAgICByZWFzb24gPSByZWFzb24uc3ViYXJyYXkoMylcbiAgICB9XG5cbiAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkICYmICFpc1ZhbGlkU3RhdHVzQ29kZShjb2RlKSkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgLy8gVE9ETzogb3B0aW1pemUgdGhpc1xuICAgICAgcmVhc29uID0gbmV3IFRleHREZWNvZGVyKCd1dGYtOCcsIHsgZmF0YWw6IHRydWUgfSkuZGVjb2RlKHJlYXNvbilcbiAgICB9IGNhdGNoIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgcmV0dXJuIHsgY29kZSwgcmVhc29uIH1cbiAgfVxuXG4gIGdldCBjbG9zaW5nSW5mbyAoKSB7XG4gICAgcmV0dXJuIHRoaXMuI2luZm8uY2xvc2VJbmZvXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMgPSB7XG4gIEJ5dGVQYXJzZXJcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgeyB3ZWJpZGwgfSA9IHJlcXVpcmUoJy4uL2ZldGNoL3dlYmlkbCcpXG5jb25zdCB7IERPTUV4Y2VwdGlvbiB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvY29uc3RhbnRzJylcbmNvbnN0IHsgVVJMU2VyaWFsaXplciB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZGF0YVVSTCcpXG5jb25zdCB7IGdldEdsb2JhbE9yaWdpbiB9ID0gcmVxdWlyZSgnLi4vZmV0Y2gvZ2xvYmFsJylcbmNvbnN0IHsgc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycywgc3RhdGVzLCBvcGNvZGVzLCBlbXB0eUJ1ZmZlciB9ID0gcmVxdWlyZSgnLi9jb25zdGFudHMnKVxuY29uc3Qge1xuICBrV2ViU29ja2V0VVJMLFxuICBrUmVhZHlTdGF0ZSxcbiAga0NvbnRyb2xsZXIsXG4gIGtCaW5hcnlUeXBlLFxuICBrUmVzcG9uc2UsXG4gIGtTZW50Q2xvc2UsXG4gIGtCeXRlUGFyc2VyXG59ID0gcmVxdWlyZSgnLi9zeW1ib2xzJylcbmNvbnN0IHsgaXNFc3RhYmxpc2hlZCwgaXNDbG9zaW5nLCBpc1ZhbGlkU3VicHJvdG9jb2wsIGZhaWxXZWJzb2NrZXRDb25uZWN0aW9uLCBmaXJlRXZlbnQgfSA9IHJlcXVpcmUoJy4vdXRpbCcpXG5jb25zdCB7IGVzdGFibGlzaFdlYlNvY2tldENvbm5lY3Rpb24gfSA9IHJlcXVpcmUoJy4vY29ubmVjdGlvbicpXG5jb25zdCB7IFdlYnNvY2tldEZyYW1lU2VuZCB9ID0gcmVxdWlyZSgnLi9mcmFtZScpXG5jb25zdCB7IEJ5dGVQYXJzZXIgfSA9IHJlcXVpcmUoJy4vcmVjZWl2ZXInKVxuY29uc3QgeyBrRW51bWVyYWJsZVByb3BlcnR5LCBpc0Jsb2JMaWtlIH0gPSByZXF1aXJlKCcuLi9jb3JlL3V0aWwnKVxuY29uc3QgeyBnZXRHbG9iYWxEaXNwYXRjaGVyIH0gPSByZXF1aXJlKCcuLi9nbG9iYWwnKVxuY29uc3QgeyB0eXBlcyB9ID0gcmVxdWlyZSgndXRpbCcpXG5cbmxldCBleHBlcmltZW50YWxXYXJuZWQgPSBmYWxzZVxuXG4vLyBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNpbnRlcmZhY2UtZGVmaW5pdGlvblxuY2xhc3MgV2ViU29ja2V0IGV4dGVuZHMgRXZlbnRUYXJnZXQge1xuICAjZXZlbnRzID0ge1xuICAgIG9wZW46IG51bGwsXG4gICAgZXJyb3I6IG51bGwsXG4gICAgY2xvc2U6IG51bGwsXG4gICAgbWVzc2FnZTogbnVsbFxuICB9XG5cbiAgI2J1ZmZlcmVkQW1vdW50ID0gMFxuICAjcHJvdG9jb2wgPSAnJ1xuICAjZXh0ZW5zaW9ucyA9ICcnXG5cbiAgLyoqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB1cmxcbiAgICogQHBhcmFtIHtzdHJpbmd8c3RyaW5nW119IHByb3RvY29sc1xuICAgKi9cbiAgY29uc3RydWN0b3IgKHVybCwgcHJvdG9jb2xzID0gW10pIHtcbiAgICBzdXBlcigpXG5cbiAgICB3ZWJpZGwuYXJndW1lbnRMZW5ndGhDaGVjayhhcmd1bWVudHMsIDEsIHsgaGVhZGVyOiAnV2ViU29ja2V0IGNvbnN0cnVjdG9yJyB9KVxuXG4gICAgaWYgKCFleHBlcmltZW50YWxXYXJuZWQpIHtcbiAgICAgIGV4cGVyaW1lbnRhbFdhcm5lZCA9IHRydWVcbiAgICAgIHByb2Nlc3MuZW1pdFdhcm5pbmcoJ1dlYlNvY2tldHMgYXJlIGV4cGVyaW1lbnRhbCwgZXhwZWN0IHRoZW0gdG8gY2hhbmdlIGF0IGFueSB0aW1lLicsIHtcbiAgICAgICAgY29kZTogJ1VORElDSS1XUydcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc3Qgb3B0aW9ucyA9IHdlYmlkbC5jb252ZXJ0ZXJzWydET01TdHJpbmcgb3Igc2VxdWVuY2U8RE9NU3RyaW5nPiBvciBXZWJTb2NrZXRJbml0J10ocHJvdG9jb2xzKVxuXG4gICAgdXJsID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHVybClcbiAgICBwcm90b2NvbHMgPSBvcHRpb25zLnByb3RvY29sc1xuXG4gICAgLy8gMS4gTGV0IGJhc2VVUkwgYmUgdGhpcydzIHJlbGV2YW50IHNldHRpbmdzIG9iamVjdCdzIEFQSSBiYXNlIFVSTC5cbiAgICBjb25zdCBiYXNlVVJMID0gZ2V0R2xvYmFsT3JpZ2luKClcblxuICAgIC8vIDEuIExldCB1cmxSZWNvcmQgYmUgdGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUgVVJMIHBhcnNlciB0byB1cmwgd2l0aCBiYXNlVVJMLlxuICAgIGxldCB1cmxSZWNvcmRcblxuICAgIHRyeSB7XG4gICAgICB1cmxSZWNvcmQgPSBuZXcgVVJMKHVybCwgYmFzZVVSTClcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyAzLiBJZiB1cmxSZWNvcmQgaXMgZmFpbHVyZSwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKGUsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gNC4gSWYgdXJsUmVjb3JkXHUyMDE5cyBzY2hlbWUgaXMgXCJodHRwXCIsIHRoZW4gc2V0IHVybFJlY29yZFx1MjAxOXMgc2NoZW1lIHRvIFwid3NcIi5cbiAgICBpZiAodXJsUmVjb3JkLnByb3RvY29sID09PSAnaHR0cDonKSB7XG4gICAgICB1cmxSZWNvcmQucHJvdG9jb2wgPSAnd3M6J1xuICAgIH0gZWxzZSBpZiAodXJsUmVjb3JkLnByb3RvY29sID09PSAnaHR0cHM6Jykge1xuICAgICAgLy8gNS4gT3RoZXJ3aXNlLCBpZiB1cmxSZWNvcmRcdTIwMTlzIHNjaGVtZSBpcyBcImh0dHBzXCIsIHNldCB1cmxSZWNvcmRcdTIwMTlzIHNjaGVtZSB0byBcIndzc1wiLlxuICAgICAgdXJsUmVjb3JkLnByb3RvY29sID0gJ3dzczonXG4gICAgfVxuXG4gICAgLy8gNi4gSWYgdXJsUmVjb3JkXHUyMDE5cyBzY2hlbWUgaXMgbm90IFwid3NcIiBvciBcIndzc1wiLCB0aGVuIHRocm93IGEgXCJTeW50YXhFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAodXJsUmVjb3JkLnByb3RvY29sICE9PSAnd3M6JyAmJiB1cmxSZWNvcmQucHJvdG9jb2wgIT09ICd3c3M6Jykge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbihcbiAgICAgICAgYEV4cGVjdGVkIGEgd3M6IG9yIHdzczogcHJvdG9jb2wsIGdvdCAke3VybFJlY29yZC5wcm90b2NvbH1gLFxuICAgICAgICAnU3ludGF4RXJyb3InXG4gICAgICApXG4gICAgfVxuXG4gICAgLy8gNy4gSWYgdXJsUmVjb3JkXHUyMDE5cyBmcmFnbWVudCBpcyBub24tbnVsbCwgdGhlbiB0aHJvdyBhIFwiU3ludGF4RXJyb3JcIlxuICAgIC8vICAgIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAodXJsUmVjb3JkLmhhc2ggfHwgdXJsUmVjb3JkLmhyZWYuZW5kc1dpdGgoJyMnKSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignR290IGZyYWdtZW50JywgJ1N5bnRheEVycm9yJylcbiAgICB9XG5cbiAgICAvLyA4LiBJZiBwcm90b2NvbHMgaXMgYSBzdHJpbmcsIHNldCBwcm90b2NvbHMgdG8gYSBzZXF1ZW5jZSBjb25zaXN0aW5nXG4gICAgLy8gICAgb2YganVzdCB0aGF0IHN0cmluZy5cbiAgICBpZiAodHlwZW9mIHByb3RvY29scyA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHByb3RvY29scyA9IFtwcm90b2NvbHNdXG4gICAgfVxuXG4gICAgLy8gOS4gSWYgYW55IG9mIHRoZSB2YWx1ZXMgaW4gcHJvdG9jb2xzIG9jY3VyIG1vcmUgdGhhbiBvbmNlIG9yIG90aGVyd2lzZVxuICAgIC8vICAgIGZhaWwgdG8gbWF0Y2ggdGhlIHJlcXVpcmVtZW50cyBmb3IgZWxlbWVudHMgdGhhdCBjb21wcmlzZSB0aGUgdmFsdWVcbiAgICAvLyAgICBvZiBgU2VjLVdlYlNvY2tldC1Qcm90b2NvbGAgZmllbGRzIGFzIGRlZmluZWQgYnkgVGhlIFdlYlNvY2tldFxuICAgIC8vICAgIHByb3RvY29sLCB0aGVuIHRocm93IGEgXCJTeW50YXhFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAocHJvdG9jb2xzLmxlbmd0aCAhPT0gbmV3IFNldChwcm90b2NvbHMubWFwKHAgPT4gcC50b0xvd2VyQ2FzZSgpKSkuc2l6ZSkge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignSW52YWxpZCBTZWMtV2ViU29ja2V0LVByb3RvY29sIHZhbHVlJywgJ1N5bnRheEVycm9yJylcbiAgICB9XG5cbiAgICBpZiAocHJvdG9jb2xzLmxlbmd0aCA+IDAgJiYgIXByb3RvY29scy5ldmVyeShwID0+IGlzVmFsaWRTdWJwcm90b2NvbChwKSkpIHtcbiAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ0ludmFsaWQgU2VjLVdlYlNvY2tldC1Qcm90b2NvbCB2YWx1ZScsICdTeW50YXhFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gMTAuIFNldCB0aGlzJ3MgdXJsIHRvIHVybFJlY29yZC5cbiAgICB0aGlzW2tXZWJTb2NrZXRVUkxdID0gbmV3IFVSTCh1cmxSZWNvcmQuaHJlZilcblxuICAgIC8vIDExLiBMZXQgY2xpZW50IGJlIHRoaXMncyByZWxldmFudCBzZXR0aW5ncyBvYmplY3QuXG5cbiAgICAvLyAxMi4gUnVuIHRoaXMgc3RlcCBpbiBwYXJhbGxlbDpcblxuICAgIC8vICAgIDEuIEVzdGFibGlzaCBhIFdlYlNvY2tldCBjb25uZWN0aW9uIGdpdmVuIHVybFJlY29yZCwgcHJvdG9jb2xzLFxuICAgIC8vICAgICAgIGFuZCBjbGllbnQuXG4gICAgdGhpc1trQ29udHJvbGxlcl0gPSBlc3RhYmxpc2hXZWJTb2NrZXRDb25uZWN0aW9uKFxuICAgICAgdXJsUmVjb3JkLFxuICAgICAgcHJvdG9jb2xzLFxuICAgICAgdGhpcyxcbiAgICAgIChyZXNwb25zZSkgPT4gdGhpcy4jb25Db25uZWN0aW9uRXN0YWJsaXNoZWQocmVzcG9uc2UpLFxuICAgICAgb3B0aW9uc1xuICAgIClcblxuICAgIC8vIEVhY2ggV2ViU29ja2V0IG9iamVjdCBoYXMgYW4gYXNzb2NpYXRlZCByZWFkeSBzdGF0ZSwgd2hpY2ggaXMgYVxuICAgIC8vIG51bWJlciByZXByZXNlbnRpbmcgdGhlIHN0YXRlIG9mIHRoZSBjb25uZWN0aW9uLiBJbml0aWFsbHkgaXQgbXVzdFxuICAgIC8vIGJlIENPTk5FQ1RJTkcgKDApLlxuICAgIHRoaXNba1JlYWR5U3RhdGVdID0gV2ViU29ja2V0LkNPTk5FQ1RJTkdcblxuICAgIC8vIFRoZSBleHRlbnNpb25zIGF0dHJpYnV0ZSBtdXN0IGluaXRpYWxseSByZXR1cm4gdGhlIGVtcHR5IHN0cmluZy5cblxuICAgIC8vIFRoZSBwcm90b2NvbCBhdHRyaWJ1dGUgbXVzdCBpbml0aWFsbHkgcmV0dXJuIHRoZSBlbXB0eSBzdHJpbmcuXG5cbiAgICAvLyBFYWNoIFdlYlNvY2tldCBvYmplY3QgaGFzIGFuIGFzc29jaWF0ZWQgYmluYXJ5IHR5cGUsIHdoaWNoIGlzIGFcbiAgICAvLyBCaW5hcnlUeXBlLiBJbml0aWFsbHkgaXQgbXVzdCBiZSBcImJsb2JcIi5cbiAgICB0aGlzW2tCaW5hcnlUeXBlXSA9ICdibG9iJ1xuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1jbG9zZVxuICAgKiBAcGFyYW0ge251bWJlcnx1bmRlZmluZWR9IGNvZGVcbiAgICogQHBhcmFtIHtzdHJpbmd8dW5kZWZpbmVkfSByZWFzb25cbiAgICovXG4gIGNsb3NlIChjb2RlID0gdW5kZWZpbmVkLCByZWFzb24gPSB1bmRlZmluZWQpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBjb2RlID0gd2ViaWRsLmNvbnZlcnRlcnNbJ3Vuc2lnbmVkIHNob3J0J10oY29kZSwgeyBjbGFtcDogdHJ1ZSB9KVxuICAgIH1cblxuICAgIGlmIChyZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgcmVhc29uID0gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKHJlYXNvbilcbiAgICB9XG5cbiAgICAvLyAxLiBJZiBjb2RlIGlzIHByZXNlbnQsIGJ1dCBpcyBuZWl0aGVyIGFuIGludGVnZXIgZXF1YWwgdG8gMTAwMCBub3IgYW5cbiAgICAvLyAgICBpbnRlZ2VyIGluIHRoZSByYW5nZSAzMDAwIHRvIDQ5OTksIGluY2x1c2l2ZSwgdGhyb3cgYW5cbiAgICAvLyAgICBcIkludmFsaWRBY2Nlc3NFcnJvclwiIERPTUV4Y2VwdGlvbi5cbiAgICBpZiAoY29kZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAoY29kZSAhPT0gMTAwMCAmJiAoY29kZSA8IDMwMDAgfHwgY29kZSA+IDQ5OTkpKSB7XG4gICAgICAgIHRocm93IG5ldyBET01FeGNlcHRpb24oJ2ludmFsaWQgY29kZScsICdJbnZhbGlkQWNjZXNzRXJyb3InKVxuICAgICAgfVxuICAgIH1cblxuICAgIGxldCByZWFzb25CeXRlTGVuZ3RoID0gMFxuXG4gICAgLy8gMi4gSWYgcmVhc29uIGlzIHByZXNlbnQsIHRoZW4gcnVuIHRoZXNlIHN1YnN0ZXBzOlxuICAgIGlmIChyZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgLy8gMS4gTGV0IHJlYXNvbkJ5dGVzIGJlIHRoZSByZXN1bHQgb2YgZW5jb2RpbmcgcmVhc29uLlxuICAgICAgLy8gMi4gSWYgcmVhc29uQnl0ZXMgaXMgbG9uZ2VyIHRoYW4gMTIzIGJ5dGVzLCB0aGVuIHRocm93IGFcbiAgICAgIC8vICAgIFwiU3ludGF4RXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgICByZWFzb25CeXRlTGVuZ3RoID0gQnVmZmVyLmJ5dGVMZW5ndGgocmVhc29uKVxuXG4gICAgICBpZiAocmVhc29uQnl0ZUxlbmd0aCA+IDEyMykge1xuICAgICAgICB0aHJvdyBuZXcgRE9NRXhjZXB0aW9uKFxuICAgICAgICAgIGBSZWFzb24gbXVzdCBiZSBsZXNzIHRoYW4gMTIzIGJ5dGVzOyByZWNlaXZlZCAke3JlYXNvbkJ5dGVMZW5ndGh9YCxcbiAgICAgICAgICAnU3ludGF4RXJyb3InXG4gICAgICAgIClcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyAzLiBSdW4gdGhlIGZpcnN0IG1hdGNoaW5nIHN0ZXBzIGZyb20gdGhlIGZvbGxvd2luZyBsaXN0OlxuICAgIGlmICh0aGlzW2tSZWFkeVN0YXRlXSA9PT0gV2ViU29ja2V0LkNMT1NJTkcgfHwgdGhpc1trUmVhZHlTdGF0ZV0gPT09IFdlYlNvY2tldC5DTE9TRUQpIHtcbiAgICAgIC8vIElmIHRoaXMncyByZWFkeSBzdGF0ZSBpcyBDTE9TSU5HICgyKSBvciBDTE9TRUQgKDMpXG4gICAgICAvLyBEbyBub3RoaW5nLlxuICAgIH0gZWxzZSBpZiAoIWlzRXN0YWJsaXNoZWQodGhpcykpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBub3QgeWV0IGVzdGFibGlzaGVkXG4gICAgICAvLyBGYWlsIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbiBhbmQgc2V0IHRoaXMncyByZWFkeSBzdGF0ZVxuICAgICAgLy8gdG8gQ0xPU0lORyAoMikuXG4gICAgICBmYWlsV2Vic29ja2V0Q29ubmVjdGlvbih0aGlzLCAnQ29ubmVjdGlvbiB3YXMgY2xvc2VkIGJlZm9yZSBpdCB3YXMgZXN0YWJsaXNoZWQuJylcbiAgICAgIHRoaXNba1JlYWR5U3RhdGVdID0gV2ViU29ja2V0LkNMT1NJTkdcbiAgICB9IGVsc2UgaWYgKCFpc0Nsb3NpbmcodGhpcykpIHtcbiAgICAgIC8vIElmIHRoZSBXZWJTb2NrZXQgY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgYmVlbiBzdGFydGVkXG4gICAgICAvLyBTdGFydCB0aGUgV2ViU29ja2V0IGNsb3NpbmcgaGFuZHNoYWtlIGFuZCBzZXQgdGhpcydzIHJlYWR5XG4gICAgICAvLyBzdGF0ZSB0byBDTE9TSU5HICgyKS5cbiAgICAgIC8vIC0gSWYgbmVpdGhlciBjb2RlIG5vciByZWFzb24gaXMgcHJlc2VudCwgdGhlIFdlYlNvY2tldCBDbG9zZVxuICAgICAgLy8gICBtZXNzYWdlIG11c3Qgbm90IGhhdmUgYSBib2R5LlxuICAgICAgLy8gLSBJZiBjb2RlIGlzIHByZXNlbnQsIHRoZW4gdGhlIHN0YXR1cyBjb2RlIHRvIHVzZSBpbiB0aGVcbiAgICAgIC8vICAgV2ViU29ja2V0IENsb3NlIG1lc3NhZ2UgbXVzdCBiZSB0aGUgaW50ZWdlciBnaXZlbiBieSBjb2RlLlxuICAgICAgLy8gLSBJZiByZWFzb24gaXMgYWxzbyBwcmVzZW50LCB0aGVuIHJlYXNvbkJ5dGVzIG11c3QgYmVcbiAgICAgIC8vICAgcHJvdmlkZWQgaW4gdGhlIENsb3NlIG1lc3NhZ2UgYWZ0ZXIgdGhlIHN0YXR1cyBjb2RlLlxuXG4gICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoKVxuXG4gICAgICAvLyBJZiBuZWl0aGVyIGNvZGUgbm9yIHJlYXNvbiBpcyBwcmVzZW50LCB0aGUgV2ViU29ja2V0IENsb3NlXG4gICAgICAvLyBtZXNzYWdlIG11c3Qgbm90IGhhdmUgYSBib2R5LlxuXG4gICAgICAvLyBJZiBjb2RlIGlzIHByZXNlbnQsIHRoZW4gdGhlIHN0YXR1cyBjb2RlIHRvIHVzZSBpbiB0aGVcbiAgICAgIC8vIFdlYlNvY2tldCBDbG9zZSBtZXNzYWdlIG11c3QgYmUgdGhlIGludGVnZXIgZ2l2ZW4gYnkgY29kZS5cbiAgICAgIGlmIChjb2RlICE9PSB1bmRlZmluZWQgJiYgcmVhc29uID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgZnJhbWUuZnJhbWVEYXRhID0gQnVmZmVyLmFsbG9jVW5zYWZlKDIpXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YS53cml0ZVVJbnQxNkJFKGNvZGUsIDApXG4gICAgICB9IGVsc2UgaWYgKGNvZGUgIT09IHVuZGVmaW5lZCAmJiByZWFzb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAvLyBJZiByZWFzb24gaXMgYWxzbyBwcmVzZW50LCB0aGVuIHJlYXNvbkJ5dGVzIG11c3QgYmVcbiAgICAgICAgLy8gcHJvdmlkZWQgaW4gdGhlIENsb3NlIG1lc3NhZ2UgYWZ0ZXIgdGhlIHN0YXR1cyBjb2RlLlxuICAgICAgICBmcmFtZS5mcmFtZURhdGEgPSBCdWZmZXIuYWxsb2NVbnNhZmUoMiArIHJlYXNvbkJ5dGVMZW5ndGgpXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YS53cml0ZVVJbnQxNkJFKGNvZGUsIDApXG4gICAgICAgIC8vIHRoZSBib2R5IE1BWSBjb250YWluIFVURi04LWVuY29kZWQgZGF0YSB3aXRoIHZhbHVlIC9yZWFzb24vXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YS53cml0ZShyZWFzb24sIDIsICd1dGYtOCcpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmcmFtZS5mcmFtZURhdGEgPSBlbXB0eUJ1ZmZlclxuICAgICAgfVxuXG4gICAgICAvKiogQHR5cGUge2ltcG9ydCgnc3RyZWFtJykuRHVwbGV4fSAqL1xuICAgICAgY29uc3Qgc29ja2V0ID0gdGhpc1trUmVzcG9uc2VdLnNvY2tldFxuXG4gICAgICBzb2NrZXQud3JpdGUoZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5DTE9TRSksIChlcnIpID0+IHtcbiAgICAgICAgaWYgKCFlcnIpIHtcbiAgICAgICAgICB0aGlzW2tTZW50Q2xvc2VdID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KVxuXG4gICAgICAvLyBVcG9uIGVpdGhlciBzZW5kaW5nIG9yIHJlY2VpdmluZyBhIENsb3NlIGNvbnRyb2wgZnJhbWUsIGl0IGlzIHNhaWRcbiAgICAgIC8vIHRoYXQgX1RoZSBXZWJTb2NrZXQgQ2xvc2luZyBIYW5kc2hha2UgaXMgU3RhcnRlZF8gYW5kIHRoYXQgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgY29ubmVjdGlvbiBpcyBpbiB0aGUgQ0xPU0lORyBzdGF0ZS5cbiAgICAgIHRoaXNba1JlYWR5U3RhdGVdID0gc3RhdGVzLkNMT1NJTkdcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gT3RoZXJ3aXNlXG4gICAgICAvLyBTZXQgdGhpcydzIHJlYWR5IHN0YXRlIHRvIENMT1NJTkcgKDIpLlxuICAgICAgdGhpc1trUmVhZHlTdGF0ZV0gPSBXZWJTb2NrZXQuQ0xPU0lOR1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBAc2VlIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtc2VuZFxuICAgKiBAcGFyYW0ge05vZGVKUy5UeXBlZEFycmF5fEFycmF5QnVmZmVyfEJsb2J8c3RyaW5nfSBkYXRhXG4gICAqL1xuICBzZW5kIChkYXRhKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgd2ViaWRsLmFyZ3VtZW50TGVuZ3RoQ2hlY2soYXJndW1lbnRzLCAxLCB7IGhlYWRlcjogJ1dlYlNvY2tldC5zZW5kJyB9KVxuXG4gICAgZGF0YSA9IHdlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldFNlbmREYXRhKGRhdGEpXG5cbiAgICAvLyAxLiBJZiB0aGlzJ3MgcmVhZHkgc3RhdGUgaXMgQ09OTkVDVElORywgdGhlbiB0aHJvdyBhblxuICAgIC8vICAgIFwiSW52YWxpZFN0YXRlRXJyb3JcIiBET01FeGNlcHRpb24uXG4gICAgaWYgKHRoaXNba1JlYWR5U3RhdGVdID09PSBXZWJTb2NrZXQuQ09OTkVDVElORykge1xuICAgICAgdGhyb3cgbmV3IERPTUV4Y2VwdGlvbignU2VudCBiZWZvcmUgY29ubmVjdGVkLicsICdJbnZhbGlkU3RhdGVFcnJvcicpXG4gICAgfVxuXG4gICAgLy8gMi4gUnVuIHRoZSBhcHByb3ByaWF0ZSBzZXQgb2Ygc3RlcHMgZnJvbSB0aGUgZm9sbG93aW5nIGxpc3Q6XG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNi4xXG4gICAgLy8gaHR0cHM6Ly9kYXRhdHJhY2tlci5pZXRmLm9yZy9kb2MvaHRtbC9yZmM2NDU1I3NlY3Rpb24tNS4yXG5cbiAgICBpZiAoIWlzRXN0YWJsaXNoZWQodGhpcykgfHwgaXNDbG9zaW5nKHRoaXMpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvKiogQHR5cGUge2ltcG9ydCgnc3RyZWFtJykuRHVwbGV4fSAqL1xuICAgIGNvbnN0IHNvY2tldCA9IHRoaXNba1Jlc3BvbnNlXS5zb2NrZXRcblxuICAgIC8vIElmIGRhdGEgaXMgYSBzdHJpbmdcbiAgICBpZiAodHlwZW9mIGRhdGEgPT09ICdzdHJpbmcnKSB7XG4gICAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQgYW5kIHRoZSBXZWJTb2NrZXRcbiAgICAgIC8vIGNsb3NpbmcgaGFuZHNoYWtlIGhhcyBub3QgeWV0IHN0YXJ0ZWQsIHRoZW4gdGhlIHVzZXIgYWdlbnRcbiAgICAgIC8vIG11c3Qgc2VuZCBhIFdlYlNvY2tldCBNZXNzYWdlIGNvbXByaXNlZCBvZiB0aGUgZGF0YSBhcmd1bWVudFxuICAgICAgLy8gdXNpbmcgYSB0ZXh0IGZyYW1lIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy5cbiAgICAgIC8vIGJlY2F1c2UgaXQgd291bGQgbmVlZCB0byBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLFxuICAgICAgLy8gdGhlIHVzZXIgYWdlbnQgbXVzdCBmbGFnIHRoZSBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZVxuICAgICAgLy8gdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uLiBBbnkgaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIGFcbiAgICAgIC8vIHN0cmluZyBhcmd1bWVudCB0aGF0IGRvZXMgbm90IHRocm93IGFuIGV4Y2VwdGlvbiBtdXN0IGluY3JlYXNlXG4gICAgICAvLyB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlIGJ5IHRoZSBudW1iZXIgb2YgYnl0ZXMgbmVlZGVkIHRvXG4gICAgICAvLyBleHByZXNzIHRoZSBhcmd1bWVudCBhcyBVVEYtOC5cblxuICAgICAgY29uc3QgdmFsdWUgPSBCdWZmZXIuZnJvbShkYXRhKVxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKHZhbHVlKVxuICAgICAgY29uc3QgYnVmZmVyID0gZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5URVhUKVxuXG4gICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCArPSB2YWx1ZS5ieXRlTGVuZ3RoXG4gICAgICBzb2NrZXQud3JpdGUoYnVmZmVyLCAoKSA9PiB7XG4gICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50IC09IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgIH0pXG4gICAgfSBlbHNlIGlmICh0eXBlcy5pc0FycmF5QnVmZmVyKGRhdGEpKSB7XG4gICAgICAvLyBJZiB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24gaXMgZXN0YWJsaXNoZWQsIGFuZCB0aGUgV2ViU29ja2V0XG4gICAgICAvLyBjbG9zaW5nIGhhbmRzaGFrZSBoYXMgbm90IHlldCBzdGFydGVkLCB0aGVuIHRoZSB1c2VyIGFnZW50IG11c3RcbiAgICAgIC8vIHNlbmQgYSBXZWJTb2NrZXQgTWVzc2FnZSBjb21wcmlzZWQgb2YgZGF0YSB1c2luZyBhIGJpbmFyeSBmcmFtZVxuICAgICAgLy8gb3Bjb2RlOyBpZiB0aGUgZGF0YSBjYW5ub3QgYmUgc2VudCwgZS5nLiBiZWNhdXNlIGl0IHdvdWxkIG5lZWRcbiAgICAgIC8vIHRvIGJlIGJ1ZmZlcmVkIGJ1dCB0aGUgYnVmZmVyIGlzIGZ1bGwsIHRoZSB1c2VyIGFnZW50IG11c3QgZmxhZ1xuICAgICAgLy8gdGhlIFdlYlNvY2tldCBhcyBmdWxsIGFuZCB0aGVuIGNsb3NlIHRoZSBXZWJTb2NrZXQgY29ubmVjdGlvbi5cbiAgICAgIC8vIFRoZSBkYXRhIHRvIGJlIHNlbnQgaXMgdGhlIGRhdGEgc3RvcmVkIGluIHRoZSBidWZmZXIgZGVzY3JpYmVkXG4gICAgICAvLyBieSB0aGUgQXJyYXlCdWZmZXIgb2JqZWN0LiBBbnkgaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIGFuXG4gICAgICAvLyBBcnJheUJ1ZmZlciBhcmd1bWVudCB0aGF0IGRvZXMgbm90IHRocm93IGFuIGV4Y2VwdGlvbiBtdXN0XG4gICAgICAvLyBpbmNyZWFzZSB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlIGJ5IHRoZSBsZW5ndGggb2YgdGhlXG4gICAgICAvLyBBcnJheUJ1ZmZlciBpbiBieXRlcy5cblxuICAgICAgY29uc3QgdmFsdWUgPSBCdWZmZXIuZnJvbShkYXRhKVxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKHZhbHVlKVxuICAgICAgY29uc3QgYnVmZmVyID0gZnJhbWUuY3JlYXRlRnJhbWUob3Bjb2Rlcy5CSU5BUlkpXG5cbiAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50ICs9IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgIHNvY2tldC53cml0ZShidWZmZXIsICgpID0+IHtcbiAgICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgLT0gdmFsdWUuYnl0ZUxlbmd0aFxuICAgICAgfSlcbiAgICB9IGVsc2UgaWYgKEFycmF5QnVmZmVyLmlzVmlldyhkYXRhKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBhbmQgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgc3RhcnRlZCwgdGhlbiB0aGUgdXNlciBhZ2VudCBtdXN0XG4gICAgICAvLyBzZW5kIGEgV2ViU29ja2V0IE1lc3NhZ2UgY29tcHJpc2VkIG9mIGRhdGEgdXNpbmcgYSBiaW5hcnkgZnJhbWVcbiAgICAgIC8vIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy4gYmVjYXVzZSBpdCB3b3VsZCBuZWVkIHRvXG4gICAgICAvLyBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLCB0aGUgdXNlciBhZ2VudCBtdXN0IGZsYWcgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZSB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uIFRoZVxuICAgICAgLy8gZGF0YSB0byBiZSBzZW50IGlzIHRoZSBkYXRhIHN0b3JlZCBpbiB0aGUgc2VjdGlvbiBvZiB0aGUgYnVmZmVyXG4gICAgICAvLyBkZXNjcmliZWQgYnkgdGhlIEFycmF5QnVmZmVyIG9iamVjdCB0aGF0IGRhdGEgcmVmZXJlbmNlcy4gQW55XG4gICAgICAvLyBpbnZvY2F0aW9uIG9mIHRoaXMgbWV0aG9kIHdpdGggdGhpcyBraW5kIG9mIGFyZ3VtZW50IHRoYXQgZG9lc1xuICAgICAgLy8gbm90IHRocm93IGFuIGV4Y2VwdGlvbiBtdXN0IGluY3JlYXNlIHRoZSBidWZmZXJlZEFtb3VudCBhdHRyaWJ1dGVcbiAgICAgIC8vIGJ5IHRoZSBsZW5ndGggb2YgZGF0YVx1MjAxOXMgYnVmZmVyIGluIGJ5dGVzLlxuXG4gICAgICBjb25zdCBhYiA9IEJ1ZmZlci5mcm9tKGRhdGEsIGRhdGEuYnl0ZU9mZnNldCwgZGF0YS5ieXRlTGVuZ3RoKVxuXG4gICAgICBjb25zdCBmcmFtZSA9IG5ldyBXZWJzb2NrZXRGcmFtZVNlbmQoYWIpXG4gICAgICBjb25zdCBidWZmZXIgPSBmcmFtZS5jcmVhdGVGcmFtZShvcGNvZGVzLkJJTkFSWSlcblxuICAgICAgdGhpcy4jYnVmZmVyZWRBbW91bnQgKz0gYWIuYnl0ZUxlbmd0aFxuICAgICAgc29ja2V0LndyaXRlKGJ1ZmZlciwgKCkgPT4ge1xuICAgICAgICB0aGlzLiNidWZmZXJlZEFtb3VudCAtPSBhYi5ieXRlTGVuZ3RoXG4gICAgICB9KVxuICAgIH0gZWxzZSBpZiAoaXNCbG9iTGlrZShkYXRhKSkge1xuICAgICAgLy8gSWYgdGhlIFdlYlNvY2tldCBjb25uZWN0aW9uIGlzIGVzdGFibGlzaGVkLCBhbmQgdGhlIFdlYlNvY2tldFxuICAgICAgLy8gY2xvc2luZyBoYW5kc2hha2UgaGFzIG5vdCB5ZXQgc3RhcnRlZCwgdGhlbiB0aGUgdXNlciBhZ2VudCBtdXN0XG4gICAgICAvLyBzZW5kIGEgV2ViU29ja2V0IE1lc3NhZ2UgY29tcHJpc2VkIG9mIGRhdGEgdXNpbmcgYSBiaW5hcnkgZnJhbWVcbiAgICAgIC8vIG9wY29kZTsgaWYgdGhlIGRhdGEgY2Fubm90IGJlIHNlbnQsIGUuZy4gYmVjYXVzZSBpdCB3b3VsZCBuZWVkIHRvXG4gICAgICAvLyBiZSBidWZmZXJlZCBidXQgdGhlIGJ1ZmZlciBpcyBmdWxsLCB0aGUgdXNlciBhZ2VudCBtdXN0IGZsYWcgdGhlXG4gICAgICAvLyBXZWJTb2NrZXQgYXMgZnVsbCBhbmQgdGhlbiBjbG9zZSB0aGUgV2ViU29ja2V0IGNvbm5lY3Rpb24uIFRoZSBkYXRhXG4gICAgICAvLyB0byBiZSBzZW50IGlzIHRoZSByYXcgZGF0YSByZXByZXNlbnRlZCBieSB0aGUgQmxvYiBvYmplY3QuIEFueVxuICAgICAgLy8gaW52b2NhdGlvbiBvZiB0aGlzIG1ldGhvZCB3aXRoIGEgQmxvYiBhcmd1bWVudCB0aGF0IGRvZXMgbm90IHRocm93XG4gICAgICAvLyBhbiBleGNlcHRpb24gbXVzdCBpbmNyZWFzZSB0aGUgYnVmZmVyZWRBbW91bnQgYXR0cmlidXRlIGJ5IHRoZSBzaXplXG4gICAgICAvLyBvZiB0aGUgQmxvYiBvYmplY3RcdTIwMTlzIHJhdyBkYXRhLCBpbiBieXRlcy5cblxuICAgICAgY29uc3QgZnJhbWUgPSBuZXcgV2Vic29ja2V0RnJhbWVTZW5kKClcblxuICAgICAgZGF0YS5hcnJheUJ1ZmZlcigpLnRoZW4oKGFiKSA9PiB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gQnVmZmVyLmZyb20oYWIpXG4gICAgICAgIGZyYW1lLmZyYW1lRGF0YSA9IHZhbHVlXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IGZyYW1lLmNyZWF0ZUZyYW1lKG9wY29kZXMuQklOQVJZKVxuXG4gICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50ICs9IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgICAgc29ja2V0LndyaXRlKGJ1ZmZlciwgKCkgPT4ge1xuICAgICAgICAgIHRoaXMuI2J1ZmZlcmVkQW1vdW50IC09IHZhbHVlLmJ5dGVMZW5ndGhcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuICB9XG5cbiAgZ2V0IHJlYWR5U3RhdGUgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIC8vIFRoZSByZWFkeVN0YXRlIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXMncyByZWFkeSBzdGF0ZS5cbiAgICByZXR1cm4gdGhpc1trUmVhZHlTdGF0ZV1cbiAgfVxuXG4gIGdldCBidWZmZXJlZEFtb3VudCAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2J1ZmZlcmVkQW1vdW50XG4gIH1cblxuICBnZXQgdXJsICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICAvLyBUaGUgdXJsIGdldHRlciBzdGVwcyBhcmUgdG8gcmV0dXJuIHRoaXMncyB1cmwsIHNlcmlhbGl6ZWQuXG4gICAgcmV0dXJuIFVSTFNlcmlhbGl6ZXIodGhpc1trV2ViU29ja2V0VVJMXSlcbiAgfVxuXG4gIGdldCBleHRlbnNpb25zICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jZXh0ZW5zaW9uc1xuICB9XG5cbiAgZ2V0IHByb3RvY29sICgpIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICByZXR1cm4gdGhpcy4jcHJvdG9jb2xcbiAgfVxuXG4gIGdldCBvbm9wZW4gKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNldmVudHMub3BlblxuICB9XG5cbiAgc2V0IG9ub3BlbiAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAodGhpcy4jZXZlbnRzLm9wZW4pIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignb3BlbicsIHRoaXMuI2V2ZW50cy5vcGVuKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5vcGVuID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignb3BlbicsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMub3BlbiA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgb25lcnJvciAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXMuI2V2ZW50cy5lcnJvclxuICB9XG5cbiAgc2V0IG9uZXJyb3IgKGZuKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgaWYgKHRoaXMuI2V2ZW50cy5lcnJvcikge1xuICAgICAgdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsIHRoaXMuI2V2ZW50cy5lcnJvcilcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICB0aGlzLiNldmVudHMuZXJyb3IgPSBmblxuICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMuZXJyb3IgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgZ2V0IG9uY2xvc2UgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNldmVudHMuY2xvc2VcbiAgfVxuXG4gIHNldCBvbmNsb3NlIChmbikge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0aGlzLiNldmVudHMuY2xvc2UpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xvc2UnLCB0aGlzLiNldmVudHMuY2xvc2UpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBmbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy4jZXZlbnRzLmNsb3NlID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignY2xvc2UnLCBmbilcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy4jZXZlbnRzLmNsb3NlID0gbnVsbFxuICAgIH1cbiAgfVxuXG4gIGdldCBvbm1lc3NhZ2UgKCkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIHJldHVybiB0aGlzLiNldmVudHMubWVzc2FnZVxuICB9XG5cbiAgc2V0IG9ubWVzc2FnZSAoZm4pIHtcbiAgICB3ZWJpZGwuYnJhbmRDaGVjayh0aGlzLCBXZWJTb2NrZXQpXG5cbiAgICBpZiAodGhpcy4jZXZlbnRzLm1lc3NhZ2UpIHtcbiAgICAgIHRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIHRoaXMuI2V2ZW50cy5tZXNzYWdlKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHRoaXMuI2V2ZW50cy5tZXNzYWdlID0gZm5cbiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcignbWVzc2FnZScsIGZuKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLiNldmVudHMubWVzc2FnZSA9IG51bGxcbiAgICB9XG4gIH1cblxuICBnZXQgYmluYXJ5VHlwZSAoKSB7XG4gICAgd2ViaWRsLmJyYW5kQ2hlY2sodGhpcywgV2ViU29ja2V0KVxuXG4gICAgcmV0dXJuIHRoaXNba0JpbmFyeVR5cGVdXG4gIH1cblxuICBzZXQgYmluYXJ5VHlwZSAodHlwZSkge1xuICAgIHdlYmlkbC5icmFuZENoZWNrKHRoaXMsIFdlYlNvY2tldClcblxuICAgIGlmICh0eXBlICE9PSAnYmxvYicgJiYgdHlwZSAhPT0gJ2FycmF5YnVmZmVyJykge1xuICAgICAgdGhpc1trQmluYXJ5VHlwZV0gPSAnYmxvYidcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpc1trQmluYXJ5VHlwZV0gPSB0eXBlXG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEBzZWUgaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZmVlZGJhY2stZnJvbS10aGUtcHJvdG9jb2xcbiAgICovXG4gICNvbkNvbm5lY3Rpb25Fc3RhYmxpc2hlZCAocmVzcG9uc2UpIHtcbiAgICAvLyBwcm9jZXNzUmVzcG9uc2UgaXMgY2FsbGVkIHdoZW4gdGhlIFwicmVzcG9uc2VcdTIwMTlzIGhlYWRlciBsaXN0IGhhcyBiZWVuIHJlY2VpdmVkIGFuZCBpbml0aWFsaXplZC5cIlxuICAgIC8vIG9uY2UgdGhpcyBoYXBwZW5zLCB0aGUgY29ubmVjdGlvbiBpcyBvcGVuXG4gICAgdGhpc1trUmVzcG9uc2VdID0gcmVzcG9uc2VcblxuICAgIGNvbnN0IHBhcnNlciA9IG5ldyBCeXRlUGFyc2VyKHRoaXMpXG4gICAgcGFyc2VyLm9uKCdkcmFpbicsIGZ1bmN0aW9uIG9uUGFyc2VyRHJhaW4gKCkge1xuICAgICAgdGhpcy53c1trUmVzcG9uc2VdLnNvY2tldC5yZXN1bWUoKVxuICAgIH0pXG5cbiAgICByZXNwb25zZS5zb2NrZXQud3MgPSB0aGlzXG4gICAgdGhpc1trQnl0ZVBhcnNlcl0gPSBwYXJzZXJcblxuICAgIC8vIDEuIENoYW5nZSB0aGUgcmVhZHkgc3RhdGUgdG8gT1BFTiAoMSkuXG4gICAgdGhpc1trUmVhZHlTdGF0ZV0gPSBzdGF0ZXMuT1BFTlxuXG4gICAgLy8gMi4gQ2hhbmdlIHRoZSBleHRlbnNpb25zIGF0dHJpYnV0ZVx1MjAxOXMgdmFsdWUgdG8gdGhlIGV4dGVuc2lvbnMgaW4gdXNlLCBpZlxuICAgIC8vICAgIGl0IGlzIG5vdCB0aGUgbnVsbCB2YWx1ZS5cbiAgICAvLyBodHRwczovL2RhdGF0cmFja2VyLmlldGYub3JnL2RvYy9odG1sL3JmYzY0NTUjc2VjdGlvbi05LjFcbiAgICBjb25zdCBleHRlbnNpb25zID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdzZWMtd2Vic29ja2V0LWV4dGVuc2lvbnMnKVxuXG4gICAgaWYgKGV4dGVuc2lvbnMgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuI2V4dGVuc2lvbnMgPSBleHRlbnNpb25zXG4gICAgfVxuXG4gICAgLy8gMy4gQ2hhbmdlIHRoZSBwcm90b2NvbCBhdHRyaWJ1dGVcdTIwMTlzIHZhbHVlIHRvIHRoZSBzdWJwcm90b2NvbCBpbiB1c2UsIGlmXG4gICAgLy8gICAgaXQgaXMgbm90IHRoZSBudWxsIHZhbHVlLlxuICAgIC8vIGh0dHBzOi8vZGF0YXRyYWNrZXIuaWV0Zi5vcmcvZG9jL2h0bWwvcmZjNjQ1NSNzZWN0aW9uLTEuOVxuICAgIGNvbnN0IHByb3RvY29sID0gcmVzcG9uc2UuaGVhZGVyc0xpc3QuZ2V0KCdzZWMtd2Vic29ja2V0LXByb3RvY29sJylcblxuICAgIGlmIChwcm90b2NvbCAhPT0gbnVsbCkge1xuICAgICAgdGhpcy4jcHJvdG9jb2wgPSBwcm90b2NvbFxuICAgIH1cblxuICAgIC8vIDQuIEZpcmUgYW4gZXZlbnQgbmFtZWQgb3BlbiBhdCB0aGUgV2ViU29ja2V0IG9iamVjdC5cbiAgICBmaXJlRXZlbnQoJ29wZW4nLCB0aGlzKVxuICB9XG59XG5cbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtY29ubmVjdGluZ1xuV2ViU29ja2V0LkNPTk5FQ1RJTkcgPSBXZWJTb2NrZXQucHJvdG90eXBlLkNPTk5FQ1RJTkcgPSBzdGF0ZXMuQ09OTkVDVElOR1xuLy8gaHR0cHM6Ly93ZWJzb2NrZXRzLnNwZWMud2hhdHdnLm9yZy8jZG9tLXdlYnNvY2tldC1vcGVuXG5XZWJTb2NrZXQuT1BFTiA9IFdlYlNvY2tldC5wcm90b3R5cGUuT1BFTiA9IHN0YXRlcy5PUEVOXG4vLyBodHRwczovL3dlYnNvY2tldHMuc3BlYy53aGF0d2cub3JnLyNkb20td2Vic29ja2V0LWNsb3NpbmdcbldlYlNvY2tldC5DTE9TSU5HID0gV2ViU29ja2V0LnByb3RvdHlwZS5DTE9TSU5HID0gc3RhdGVzLkNMT1NJTkdcbi8vIGh0dHBzOi8vd2Vic29ja2V0cy5zcGVjLndoYXR3Zy5vcmcvI2RvbS13ZWJzb2NrZXQtY2xvc2VkXG5XZWJTb2NrZXQuQ0xPU0VEID0gV2ViU29ja2V0LnByb3RvdHlwZS5DTE9TRUQgPSBzdGF0ZXMuQ0xPU0VEXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdlYlNvY2tldC5wcm90b3R5cGUsIHtcbiAgQ09OTkVDVElORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgT1BFTjogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgQ0xPU0lORzogc3RhdGljUHJvcGVydHlEZXNjcmlwdG9ycyxcbiAgQ0xPU0VEOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICB1cmw6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHJlYWR5U3RhdGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJ1ZmZlcmVkQW1vdW50OiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbm9wZW46IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uZXJyb3I6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIG9uY2xvc2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGNsb3NlOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBvbm1lc3NhZ2U6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGJpbmFyeVR5cGU6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHNlbmQ6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIGV4dGVuc2lvbnM6IGtFbnVtZXJhYmxlUHJvcGVydHksXG4gIHByb3RvY29sOiBrRW51bWVyYWJsZVByb3BlcnR5LFxuICBbU3ltYm9sLnRvU3RyaW5nVGFnXToge1xuICAgIHZhbHVlOiAnV2ViU29ja2V0JyxcbiAgICB3cml0YWJsZTogZmFsc2UsXG4gICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgY29uZmlndXJhYmxlOiB0cnVlXG4gIH1cbn0pXG5cbk9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFdlYlNvY2tldCwge1xuICBDT05ORUNUSU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBPUEVOOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBDTE9TSU5HOiBzdGF0aWNQcm9wZXJ0eURlc2NyaXB0b3JzLFxuICBDTE9TRUQ6IHN0YXRpY1Byb3BlcnR5RGVzY3JpcHRvcnNcbn0pXG5cbndlYmlkbC5jb252ZXJ0ZXJzWydzZXF1ZW5jZTxET01TdHJpbmc+J10gPSB3ZWJpZGwuc2VxdWVuY2VDb252ZXJ0ZXIoXG4gIHdlYmlkbC5jb252ZXJ0ZXJzLkRPTVN0cmluZ1xuKVxuXG53ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4nXSA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0JyAmJiBTeW1ib2wuaXRlcmF0b3IgaW4gVikge1xuICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVyc1snc2VxdWVuY2U8RE9NU3RyaW5nPiddKFYpXG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuRE9NU3RyaW5nKFYpXG59XG5cbi8vIFRoaXMgaW1wbGVtZW50cyB0aGUgcHJvcHNhbCBtYWRlIGluIGh0dHBzOi8vZ2l0aHViLmNvbS93aGF0d2cvd2Vic29ja2V0cy9pc3N1ZXMvNDJcbndlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldEluaXQgPSB3ZWJpZGwuZGljdGlvbmFyeUNvbnZlcnRlcihbXG4gIHtcbiAgICBrZXk6ICdwcm90b2NvbHMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLmNvbnZlcnRlcnNbJ0RPTVN0cmluZyBvciBzZXF1ZW5jZTxET01TdHJpbmc+J10sXG4gICAgZ2V0IGRlZmF1bHRWYWx1ZSAoKSB7XG4gICAgICByZXR1cm4gW11cbiAgICB9XG4gIH0sXG4gIHtcbiAgICBrZXk6ICdkaXNwYXRjaGVyJyxcbiAgICBjb252ZXJ0ZXI6IChWKSA9PiBWLFxuICAgIGdldCBkZWZhdWx0VmFsdWUgKCkge1xuICAgICAgcmV0dXJuIGdldEdsb2JhbERpc3BhdGNoZXIoKVxuICAgIH1cbiAgfSxcbiAge1xuICAgIGtleTogJ2hlYWRlcnMnLFxuICAgIGNvbnZlcnRlcjogd2ViaWRsLm51bGxhYmxlQ29udmVydGVyKHdlYmlkbC5jb252ZXJ0ZXJzLkhlYWRlcnNJbml0KVxuICB9XG5dKVxuXG53ZWJpZGwuY29udmVydGVyc1snRE9NU3RyaW5nIG9yIHNlcXVlbmNlPERPTVN0cmluZz4gb3IgV2ViU29ja2V0SW5pdCddID0gZnVuY3Rpb24gKFYpIHtcbiAgaWYgKHdlYmlkbC51dGlsLlR5cGUoVikgPT09ICdPYmplY3QnICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIFYpKSB7XG4gICAgcmV0dXJuIHdlYmlkbC5jb252ZXJ0ZXJzLldlYlNvY2tldEluaXQoVilcbiAgfVxuXG4gIHJldHVybiB7IHByb3RvY29sczogd2ViaWRsLmNvbnZlcnRlcnNbJ0RPTVN0cmluZyBvciBzZXF1ZW5jZTxET01TdHJpbmc+J10oVikgfVxufVxuXG53ZWJpZGwuY29udmVydGVycy5XZWJTb2NrZXRTZW5kRGF0YSA9IGZ1bmN0aW9uIChWKSB7XG4gIGlmICh3ZWJpZGwudXRpbC5UeXBlKFYpID09PSAnT2JqZWN0Jykge1xuICAgIGlmIChpc0Jsb2JMaWtlKFYpKSB7XG4gICAgICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuQmxvYihWLCB7IHN0cmljdDogZmFsc2UgfSlcbiAgICB9XG5cbiAgICBpZiAoQXJyYXlCdWZmZXIuaXNWaWV3KFYpIHx8IHR5cGVzLmlzQW55QXJyYXlCdWZmZXIoVikpIHtcbiAgICAgIHJldHVybiB3ZWJpZGwuY29udmVydGVycy5CdWZmZXJTb3VyY2UoVilcbiAgICB9XG4gIH1cblxuICByZXR1cm4gd2ViaWRsLmNvbnZlcnRlcnMuVVNWU3RyaW5nKFYpXG59XG5cbm1vZHVsZS5leHBvcnRzID0ge1xuICBXZWJTb2NrZXRcbn1cbiIsICIndXNlIHN0cmljdCdcblxuY29uc3QgQ2xpZW50ID0gcmVxdWlyZSgnLi9saWIvY2xpZW50JylcbmNvbnN0IERpc3BhdGNoZXIgPSByZXF1aXJlKCcuL2xpYi9kaXNwYXRjaGVyJylcbmNvbnN0IGVycm9ycyA9IHJlcXVpcmUoJy4vbGliL2NvcmUvZXJyb3JzJylcbmNvbnN0IFBvb2wgPSByZXF1aXJlKCcuL2xpYi9wb29sJylcbmNvbnN0IEJhbGFuY2VkUG9vbCA9IHJlcXVpcmUoJy4vbGliL2JhbGFuY2VkLXBvb2wnKVxuY29uc3QgQWdlbnQgPSByZXF1aXJlKCcuL2xpYi9hZ2VudCcpXG5jb25zdCB1dGlsID0gcmVxdWlyZSgnLi9saWIvY29yZS91dGlsJylcbmNvbnN0IHsgSW52YWxpZEFyZ3VtZW50RXJyb3IgfSA9IGVycm9yc1xuY29uc3QgYXBpID0gcmVxdWlyZSgnLi9saWIvYXBpJylcbmNvbnN0IGJ1aWxkQ29ubmVjdG9yID0gcmVxdWlyZSgnLi9saWIvY29yZS9jb25uZWN0JylcbmNvbnN0IE1vY2tDbGllbnQgPSByZXF1aXJlKCcuL2xpYi9tb2NrL21vY2stY2xpZW50JylcbmNvbnN0IE1vY2tBZ2VudCA9IHJlcXVpcmUoJy4vbGliL21vY2svbW9jay1hZ2VudCcpXG5jb25zdCBNb2NrUG9vbCA9IHJlcXVpcmUoJy4vbGliL21vY2svbW9jay1wb29sJylcbmNvbnN0IG1vY2tFcnJvcnMgPSByZXF1aXJlKCcuL2xpYi9tb2NrL21vY2stZXJyb3JzJylcbmNvbnN0IFByb3h5QWdlbnQgPSByZXF1aXJlKCcuL2xpYi9wcm94eS1hZ2VudCcpXG5jb25zdCBSZXRyeUhhbmRsZXIgPSByZXF1aXJlKCcuL2xpYi9oYW5kbGVyL1JldHJ5SGFuZGxlcicpXG5jb25zdCB7IGdldEdsb2JhbERpc3BhdGNoZXIsIHNldEdsb2JhbERpc3BhdGNoZXIgfSA9IHJlcXVpcmUoJy4vbGliL2dsb2JhbCcpXG5jb25zdCBEZWNvcmF0b3JIYW5kbGVyID0gcmVxdWlyZSgnLi9saWIvaGFuZGxlci9EZWNvcmF0b3JIYW5kbGVyJylcbmNvbnN0IFJlZGlyZWN0SGFuZGxlciA9IHJlcXVpcmUoJy4vbGliL2hhbmRsZXIvUmVkaXJlY3RIYW5kbGVyJylcbmNvbnN0IGNyZWF0ZVJlZGlyZWN0SW50ZXJjZXB0b3IgPSByZXF1aXJlKCcuL2xpYi9pbnRlcmNlcHRvci9yZWRpcmVjdEludGVyY2VwdG9yJylcblxubGV0IGhhc0NyeXB0b1xudHJ5IHtcbiAgcmVxdWlyZSgnY3J5cHRvJylcbiAgaGFzQ3J5cHRvID0gdHJ1ZVxufSBjYXRjaCB7XG4gIGhhc0NyeXB0byA9IGZhbHNlXG59XG5cbk9iamVjdC5hc3NpZ24oRGlzcGF0Y2hlci5wcm90b3R5cGUsIGFwaSlcblxubW9kdWxlLmV4cG9ydHMuRGlzcGF0Y2hlciA9IERpc3BhdGNoZXJcbm1vZHVsZS5leHBvcnRzLkNsaWVudCA9IENsaWVudFxubW9kdWxlLmV4cG9ydHMuUG9vbCA9IFBvb2xcbm1vZHVsZS5leHBvcnRzLkJhbGFuY2VkUG9vbCA9IEJhbGFuY2VkUG9vbFxubW9kdWxlLmV4cG9ydHMuQWdlbnQgPSBBZ2VudFxubW9kdWxlLmV4cG9ydHMuUHJveHlBZ2VudCA9IFByb3h5QWdlbnRcbm1vZHVsZS5leHBvcnRzLlJldHJ5SGFuZGxlciA9IFJldHJ5SGFuZGxlclxuXG5tb2R1bGUuZXhwb3J0cy5EZWNvcmF0b3JIYW5kbGVyID0gRGVjb3JhdG9ySGFuZGxlclxubW9kdWxlLmV4cG9ydHMuUmVkaXJlY3RIYW5kbGVyID0gUmVkaXJlY3RIYW5kbGVyXG5tb2R1bGUuZXhwb3J0cy5jcmVhdGVSZWRpcmVjdEludGVyY2VwdG9yID0gY3JlYXRlUmVkaXJlY3RJbnRlcmNlcHRvclxuXG5tb2R1bGUuZXhwb3J0cy5idWlsZENvbm5lY3RvciA9IGJ1aWxkQ29ubmVjdG9yXG5tb2R1bGUuZXhwb3J0cy5lcnJvcnMgPSBlcnJvcnNcblxuZnVuY3Rpb24gbWFrZURpc3BhdGNoZXIgKGZuKSB7XG4gIHJldHVybiAodXJsLCBvcHRzLCBoYW5kbGVyKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBoYW5kbGVyID0gb3B0c1xuICAgICAgb3B0cyA9IG51bGxcbiAgICB9XG5cbiAgICBpZiAoIXVybCB8fCAodHlwZW9mIHVybCAhPT0gJ3N0cmluZycgJiYgdHlwZW9mIHVybCAhPT0gJ29iamVjdCcgJiYgISh1cmwgaW5zdGFuY2VvZiBVUkwpKSkge1xuICAgICAgdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEVycm9yKCdpbnZhbGlkIHVybCcpXG4gICAgfVxuXG4gICAgaWYgKG9wdHMgIT0gbnVsbCAmJiB0eXBlb2Ygb3B0cyAhPT0gJ29iamVjdCcpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzJylcbiAgICB9XG5cbiAgICBpZiAob3B0cyAmJiBvcHRzLnBhdGggIT0gbnVsbCkge1xuICAgICAgaWYgKHR5cGVvZiBvcHRzLnBhdGggIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcignaW52YWxpZCBvcHRzLnBhdGgnKVxuICAgICAgfVxuXG4gICAgICBsZXQgcGF0aCA9IG9wdHMucGF0aFxuICAgICAgaWYgKCFvcHRzLnBhdGguc3RhcnRzV2l0aCgnLycpKSB7XG4gICAgICAgIHBhdGggPSBgLyR7cGF0aH1gXG4gICAgICB9XG5cbiAgICAgIHVybCA9IG5ldyBVUkwodXRpbC5wYXJzZU9yaWdpbih1cmwpLm9yaWdpbiArIHBhdGgpXG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICghb3B0cykge1xuICAgICAgICBvcHRzID0gdHlwZW9mIHVybCA9PT0gJ29iamVjdCcgPyB1cmwgOiB7fVxuICAgICAgfVxuXG4gICAgICB1cmwgPSB1dGlsLnBhcnNlVVJMKHVybClcbiAgICB9XG5cbiAgICBjb25zdCB7IGFnZW50LCBkaXNwYXRjaGVyID0gZ2V0R2xvYmFsRGlzcGF0Y2hlcigpIH0gPSBvcHRzXG5cbiAgICBpZiAoYWdlbnQpIHtcbiAgICAgIHRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFcnJvcigndW5zdXBwb3J0ZWQgb3B0cy5hZ2VudC4gRGlkIHlvdSBtZWFuIG9wdHMuY2xpZW50PycpXG4gICAgfVxuXG4gICAgcmV0dXJuIGZuLmNhbGwoZGlzcGF0Y2hlciwge1xuICAgICAgLi4ub3B0cyxcbiAgICAgIG9yaWdpbjogdXJsLm9yaWdpbixcbiAgICAgIHBhdGg6IHVybC5zZWFyY2ggPyBgJHt1cmwucGF0aG5hbWV9JHt1cmwuc2VhcmNofWAgOiB1cmwucGF0aG5hbWUsXG4gICAgICBtZXRob2Q6IG9wdHMubWV0aG9kIHx8IChvcHRzLmJvZHkgPyAnUFVUJyA6ICdHRVQnKVxuICAgIH0sIGhhbmRsZXIpXG4gIH1cbn1cblxubW9kdWxlLmV4cG9ydHMuc2V0R2xvYmFsRGlzcGF0Y2hlciA9IHNldEdsb2JhbERpc3BhdGNoZXJcbm1vZHVsZS5leHBvcnRzLmdldEdsb2JhbERpc3BhdGNoZXIgPSBnZXRHbG9iYWxEaXNwYXRjaGVyXG5cbmlmICh1dGlsLm5vZGVNYWpvciA+IDE2IHx8ICh1dGlsLm5vZGVNYWpvciA9PT0gMTYgJiYgdXRpbC5ub2RlTWlub3IgPj0gOCkpIHtcbiAgbGV0IGZldGNoSW1wbCA9IG51bGxcbiAgbW9kdWxlLmV4cG9ydHMuZmV0Y2ggPSBhc3luYyBmdW5jdGlvbiBmZXRjaCAocmVzb3VyY2UpIHtcbiAgICBpZiAoIWZldGNoSW1wbCkge1xuICAgICAgZmV0Y2hJbXBsID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gnKS5mZXRjaFxuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgZmV0Y2hJbXBsKC4uLmFyZ3VtZW50cylcbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGlmICh0eXBlb2YgZXJyID09PSAnb2JqZWN0Jykge1xuICAgICAgICBFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShlcnIsIHRoaXMpXG4gICAgICB9XG5cbiAgICAgIHRocm93IGVyclxuICAgIH1cbiAgfVxuICBtb2R1bGUuZXhwb3J0cy5IZWFkZXJzID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gvaGVhZGVycycpLkhlYWRlcnNcbiAgbW9kdWxlLmV4cG9ydHMuUmVzcG9uc2UgPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9yZXNwb25zZScpLlJlc3BvbnNlXG4gIG1vZHVsZS5leHBvcnRzLlJlcXVlc3QgPSByZXF1aXJlKCcuL2xpYi9mZXRjaC9yZXF1ZXN0JykuUmVxdWVzdFxuICBtb2R1bGUuZXhwb3J0cy5Gb3JtRGF0YSA9IHJlcXVpcmUoJy4vbGliL2ZldGNoL2Zvcm1kYXRhJykuRm9ybURhdGFcbiAgbW9kdWxlLmV4cG9ydHMuRmlsZSA9IHJlcXVpcmUoJy4vbGliL2ZldGNoL2ZpbGUnKS5GaWxlXG4gIG1vZHVsZS5leHBvcnRzLkZpbGVSZWFkZXIgPSByZXF1aXJlKCcuL2xpYi9maWxlYXBpL2ZpbGVyZWFkZXInKS5GaWxlUmVhZGVyXG5cbiAgY29uc3QgeyBzZXRHbG9iYWxPcmlnaW4sIGdldEdsb2JhbE9yaWdpbiB9ID0gcmVxdWlyZSgnLi9saWIvZmV0Y2gvZ2xvYmFsJylcblxuICBtb2R1bGUuZXhwb3J0cy5zZXRHbG9iYWxPcmlnaW4gPSBzZXRHbG9iYWxPcmlnaW5cbiAgbW9kdWxlLmV4cG9ydHMuZ2V0R2xvYmFsT3JpZ2luID0gZ2V0R2xvYmFsT3JpZ2luXG5cbiAgY29uc3QgeyBDYWNoZVN0b3JhZ2UgfSA9IHJlcXVpcmUoJy4vbGliL2NhY2hlL2NhY2hlc3RvcmFnZScpXG4gIGNvbnN0IHsga0NvbnN0cnVjdCB9ID0gcmVxdWlyZSgnLi9saWIvY2FjaGUvc3ltYm9scycpXG5cbiAgLy8gQ2FjaGUgJiBDYWNoZVN0b3JhZ2UgYXJlIHRpZ2h0bHkgY291cGxlZCB3aXRoIGZldGNoLiBFdmVuIGlmIGl0IG1heSBydW5cbiAgLy8gaW4gYW4gb2xkZXIgdmVyc2lvbiBvZiBOb2RlLCBpdCBkb2Vzbid0IGhhdmUgYW55IHVzZSB3aXRob3V0IGZldGNoLlxuICBtb2R1bGUuZXhwb3J0cy5jYWNoZXMgPSBuZXcgQ2FjaGVTdG9yYWdlKGtDb25zdHJ1Y3QpXG59XG5cbmlmICh1dGlsLm5vZGVNYWpvciA+PSAxNikge1xuICBjb25zdCB7IGRlbGV0ZUNvb2tpZSwgZ2V0Q29va2llcywgZ2V0U2V0Q29va2llcywgc2V0Q29va2llIH0gPSByZXF1aXJlKCcuL2xpYi9jb29raWVzJylcblxuICBtb2R1bGUuZXhwb3J0cy5kZWxldGVDb29raWUgPSBkZWxldGVDb29raWVcbiAgbW9kdWxlLmV4cG9ydHMuZ2V0Q29va2llcyA9IGdldENvb2tpZXNcbiAgbW9kdWxlLmV4cG9ydHMuZ2V0U2V0Q29va2llcyA9IGdldFNldENvb2tpZXNcbiAgbW9kdWxlLmV4cG9ydHMuc2V0Q29va2llID0gc2V0Q29va2llXG5cbiAgY29uc3QgeyBwYXJzZU1JTUVUeXBlLCBzZXJpYWxpemVBTWltZVR5cGUgfSA9IHJlcXVpcmUoJy4vbGliL2ZldGNoL2RhdGFVUkwnKVxuXG4gIG1vZHVsZS5leHBvcnRzLnBhcnNlTUlNRVR5cGUgPSBwYXJzZU1JTUVUeXBlXG4gIG1vZHVsZS5leHBvcnRzLnNlcmlhbGl6ZUFNaW1lVHlwZSA9IHNlcmlhbGl6ZUFNaW1lVHlwZVxufVxuXG5pZiAodXRpbC5ub2RlTWFqb3IgPj0gMTggJiYgaGFzQ3J5cHRvKSB7XG4gIGNvbnN0IHsgV2ViU29ja2V0IH0gPSByZXF1aXJlKCcuL2xpYi93ZWJzb2NrZXQvd2Vic29ja2V0JylcblxuICBtb2R1bGUuZXhwb3J0cy5XZWJTb2NrZXQgPSBXZWJTb2NrZXRcbn1cblxubW9kdWxlLmV4cG9ydHMucmVxdWVzdCA9IG1ha2VEaXNwYXRjaGVyKGFwaS5yZXF1ZXN0KVxubW9kdWxlLmV4cG9ydHMuc3RyZWFtID0gbWFrZURpc3BhdGNoZXIoYXBpLnN0cmVhbSlcbm1vZHVsZS5leHBvcnRzLnBpcGVsaW5lID0gbWFrZURpc3BhdGNoZXIoYXBpLnBpcGVsaW5lKVxubW9kdWxlLmV4cG9ydHMuY29ubmVjdCA9IG1ha2VEaXNwYXRjaGVyKGFwaS5jb25uZWN0KVxubW9kdWxlLmV4cG9ydHMudXBncmFkZSA9IG1ha2VEaXNwYXRjaGVyKGFwaS51cGdyYWRlKVxuXG5tb2R1bGUuZXhwb3J0cy5Nb2NrQ2xpZW50ID0gTW9ja0NsaWVudFxubW9kdWxlLmV4cG9ydHMuTW9ja1Bvb2wgPSBNb2NrUG9vbFxubW9kdWxlLmV4cG9ydHMuTW9ja0FnZW50ID0gTW9ja0FnZW50XG5tb2R1bGUuZXhwb3J0cy5tb2NrRXJyb3JzID0gbW9ja0Vycm9yc1xuIiwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgIid1c2Ugc3RyaWN0J1xuXG5jb25zdCBOdWxsT2JqZWN0ID0gZnVuY3Rpb24gTnVsbE9iamVjdCAoKSB7IH1cbk51bGxPYmplY3QucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShudWxsKVxuXG4vKipcbiAqIFJlZ0V4cCB0byBtYXRjaCAqKCBcIjtcIiBwYXJhbWV0ZXIgKSBpbiBSRkMgNzIzMSBzZWMgMy4xLjEuMVxuICpcbiAqIHBhcmFtZXRlciAgICAgPSB0b2tlbiBcIj1cIiAoIHRva2VuIC8gcXVvdGVkLXN0cmluZyApXG4gKiB0b2tlbiAgICAgICAgID0gMSp0Y2hhclxuICogdGNoYXIgICAgICAgICA9IFwiIVwiIC8gXCIjXCIgLyBcIiRcIiAvIFwiJVwiIC8gXCImXCIgLyBcIidcIiAvIFwiKlwiXG4gKiAgICAgICAgICAgICAgIC8gXCIrXCIgLyBcIi1cIiAvIFwiLlwiIC8gXCJeXCIgLyBcIl9cIiAvIFwiYFwiIC8gXCJ8XCIgLyBcIn5cIlxuICogICAgICAgICAgICAgICAvIERJR0lUIC8gQUxQSEFcbiAqICAgICAgICAgICAgICAgOyBhbnkgVkNIQVIsIGV4Y2VwdCBkZWxpbWl0ZXJzXG4gKiBxdW90ZWQtc3RyaW5nID0gRFFVT1RFICooIHFkdGV4dCAvIHF1b3RlZC1wYWlyICkgRFFVT1RFXG4gKiBxZHRleHQgICAgICAgID0gSFRBQiAvIFNQIC8gJXgyMSAvICV4MjMtNUIgLyAleDVELTdFIC8gb2JzLXRleHRcbiAqIG9icy10ZXh0ICAgICAgPSAleDgwLUZGXG4gKiBxdW90ZWQtcGFpciAgID0gXCJcXFwiICggSFRBQiAvIFNQIC8gVkNIQVIgLyBvYnMtdGV4dCApXG4gKi9cbmNvbnN0IHBhcmFtUkUgPSAvOyAqKFshIyQlJicqKy5eXFx3YHx+LV0rKT0oXCIoPzpbXFx2XFx1MDAyMFxcdTAwMjFcXHUwMDIzLVxcdTAwNWJcXHUwMDVkLVxcdTAwN2VcXHUwMDgwLVxcdTAwZmZdfFxcXFxbXFx2XFx1MDAyMC1cXHUwMGZmXSkqXCJ8WyEjJCUmJyorLl5cXHdgfH4tXSspICovZ3VcblxuLyoqXG4gKiBSZWdFeHAgdG8gbWF0Y2ggcXVvdGVkLXBhaXIgaW4gUkZDIDcyMzAgc2VjIDMuMi42XG4gKlxuICogcXVvdGVkLXBhaXIgPSBcIlxcXCIgKCBIVEFCIC8gU1AgLyBWQ0hBUiAvIG9icy10ZXh0IClcbiAqIG9icy10ZXh0ICAgID0gJXg4MC1GRlxuICovXG5jb25zdCBxdW90ZWRQYWlyUkUgPSAvXFxcXChbXFx2XFx1MDAyMC1cXHUwMGZmXSkvZ3VcblxuLyoqXG4gKiBSZWdFeHAgdG8gbWF0Y2ggdHlwZSBpbiBSRkMgNzIzMSBzZWMgMy4xLjEuMVxuICpcbiAqIG1lZGlhLXR5cGUgPSB0eXBlIFwiL1wiIHN1YnR5cGVcbiAqIHR5cGUgICAgICAgPSB0b2tlblxuICogc3VidHlwZSAgICA9IHRva2VuXG4gKi9cbmNvbnN0IG1lZGlhVHlwZVJFID0gL15bISMkJSYnKisuXlxcd3x+LV0rXFwvWyEjJCUmJyorLl5cXHd8fi1dKyQvdVxuXG4vLyBkZWZhdWx0IENvbnRlbnRUeXBlIHRvIHByZXZlbnQgcmVwZWF0ZWQgb2JqZWN0IGNyZWF0aW9uXG5jb25zdCBkZWZhdWx0Q29udGVudFR5cGUgPSB7IHR5cGU6ICcnLCBwYXJhbWV0ZXJzOiBuZXcgTnVsbE9iamVjdCgpIH1cbk9iamVjdC5mcmVlemUoZGVmYXVsdENvbnRlbnRUeXBlLnBhcmFtZXRlcnMpXG5PYmplY3QuZnJlZXplKGRlZmF1bHRDb250ZW50VHlwZSlcblxuLyoqXG4gKiBQYXJzZSBtZWRpYSB0eXBlIHRvIG9iamVjdC5cbiAqXG4gKiBAcGFyYW0ge3N0cmluZ3xvYmplY3R9IGhlYWRlclxuICogQHJldHVybiB7T2JqZWN0fVxuICogQHB1YmxpY1xuICovXG5cbmZ1bmN0aW9uIHBhcnNlIChoZWFkZXIpIHtcbiAgaWYgKHR5cGVvZiBoZWFkZXIgIT09ICdzdHJpbmcnKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignYXJndW1lbnQgaGVhZGVyIGlzIHJlcXVpcmVkIGFuZCBtdXN0IGJlIGEgc3RyaW5nJylcbiAgfVxuXG4gIGxldCBpbmRleCA9IGhlYWRlci5pbmRleE9mKCc7JylcbiAgY29uc3QgdHlwZSA9IGluZGV4ICE9PSAtMVxuICAgID8gaGVhZGVyLnNsaWNlKDAsIGluZGV4KS50cmltKClcbiAgICA6IGhlYWRlci50cmltKClcblxuICBpZiAobWVkaWFUeXBlUkUudGVzdCh0eXBlKSA9PT0gZmFsc2UpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdpbnZhbGlkIG1lZGlhIHR5cGUnKVxuICB9XG5cbiAgY29uc3QgcmVzdWx0ID0ge1xuICAgIHR5cGU6IHR5cGUudG9Mb3dlckNhc2UoKSxcbiAgICBwYXJhbWV0ZXJzOiBuZXcgTnVsbE9iamVjdCgpXG4gIH1cblxuICAvLyBwYXJzZSBwYXJhbWV0ZXJzXG4gIGlmIChpbmRleCA9PT0gLTEpIHtcbiAgICByZXR1cm4gcmVzdWx0XG4gIH1cblxuICBsZXQga2V5XG4gIGxldCBtYXRjaFxuICBsZXQgdmFsdWVcblxuICBwYXJhbVJFLmxhc3RJbmRleCA9IGluZGV4XG5cbiAgd2hpbGUgKChtYXRjaCA9IHBhcmFtUkUuZXhlYyhoZWFkZXIpKSkge1xuICAgIGlmIChtYXRjaC5pbmRleCAhPT0gaW5kZXgpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgcGFyYW1ldGVyIGZvcm1hdCcpXG4gICAgfVxuXG4gICAgaW5kZXggKz0gbWF0Y2hbMF0ubGVuZ3RoXG4gICAga2V5ID0gbWF0Y2hbMV0udG9Mb3dlckNhc2UoKVxuICAgIHZhbHVlID0gbWF0Y2hbMl1cblxuICAgIGlmICh2YWx1ZVswXSA9PT0gJ1wiJykge1xuICAgICAgLy8gcmVtb3ZlIHF1b3RlcyBhbmQgZXNjYXBlc1xuICAgICAgdmFsdWUgPSB2YWx1ZVxuICAgICAgICAuc2xpY2UoMSwgdmFsdWUubGVuZ3RoIC0gMSlcblxuICAgICAgcXVvdGVkUGFpclJFLnRlc3QodmFsdWUpICYmICh2YWx1ZSA9IHZhbHVlLnJlcGxhY2UocXVvdGVkUGFpclJFLCAnJDEnKSlcbiAgICB9XG5cbiAgICByZXN1bHQucGFyYW1ldGVyc1trZXldID0gdmFsdWVcbiAgfVxuXG4gIGlmIChpbmRleCAhPT0gaGVhZGVyLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ2ludmFsaWQgcGFyYW1ldGVyIGZvcm1hdCcpXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbmZ1bmN0aW9uIHNhZmVQYXJzZSAoaGVhZGVyKSB7XG4gIGlmICh0eXBlb2YgaGVhZGVyICE9PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBkZWZhdWx0Q29udGVudFR5cGVcbiAgfVxuXG4gIGxldCBpbmRleCA9IGhlYWRlci5pbmRleE9mKCc7JylcbiAgY29uc3QgdHlwZSA9IGluZGV4ICE9PSAtMVxuICAgID8gaGVhZGVyLnNsaWNlKDAsIGluZGV4KS50cmltKClcbiAgICA6IGhlYWRlci50cmltKClcblxuICBpZiAobWVkaWFUeXBlUkUudGVzdCh0eXBlKSA9PT0gZmFsc2UpIHtcbiAgICByZXR1cm4gZGVmYXVsdENvbnRlbnRUeXBlXG4gIH1cblxuICBjb25zdCByZXN1bHQgPSB7XG4gICAgdHlwZTogdHlwZS50b0xvd2VyQ2FzZSgpLFxuICAgIHBhcmFtZXRlcnM6IG5ldyBOdWxsT2JqZWN0KClcbiAgfVxuXG4gIC8vIHBhcnNlIHBhcmFtZXRlcnNcbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIHJldHVybiByZXN1bHRcbiAgfVxuXG4gIGxldCBrZXlcbiAgbGV0IG1hdGNoXG4gIGxldCB2YWx1ZVxuXG4gIHBhcmFtUkUubGFzdEluZGV4ID0gaW5kZXhcblxuICB3aGlsZSAoKG1hdGNoID0gcGFyYW1SRS5leGVjKGhlYWRlcikpKSB7XG4gICAgaWYgKG1hdGNoLmluZGV4ICE9PSBpbmRleCkge1xuICAgICAgcmV0dXJuIGRlZmF1bHRDb250ZW50VHlwZVxuICAgIH1cblxuICAgIGluZGV4ICs9IG1hdGNoWzBdLmxlbmd0aFxuICAgIGtleSA9IG1hdGNoWzFdLnRvTG93ZXJDYXNlKClcbiAgICB2YWx1ZSA9IG1hdGNoWzJdXG5cbiAgICBpZiAodmFsdWVbMF0gPT09ICdcIicpIHtcbiAgICAgIC8vIHJlbW92ZSBxdW90ZXMgYW5kIGVzY2FwZXNcbiAgICAgIHZhbHVlID0gdmFsdWVcbiAgICAgICAgLnNsaWNlKDEsIHZhbHVlLmxlbmd0aCAtIDEpXG5cbiAgICAgIHF1b3RlZFBhaXJSRS50ZXN0KHZhbHVlKSAmJiAodmFsdWUgPSB2YWx1ZS5yZXBsYWNlKHF1b3RlZFBhaXJSRSwgJyQxJykpXG4gICAgfVxuXG4gICAgcmVzdWx0LnBhcmFtZXRlcnNba2V5XSA9IHZhbHVlXG4gIH1cblxuICBpZiAoaW5kZXggIT09IGhlYWRlci5sZW5ndGgpIHtcbiAgICByZXR1cm4gZGVmYXVsdENvbnRlbnRUeXBlXG4gIH1cblxuICByZXR1cm4gcmVzdWx0XG59XG5cbm1vZHVsZS5leHBvcnRzLmRlZmF1bHQgPSB7IHBhcnNlLCBzYWZlUGFyc2UgfVxubW9kdWxlLmV4cG9ydHMucGFyc2UgPSBwYXJzZVxubW9kdWxlLmV4cG9ydHMuc2FmZVBhcnNlID0gc2FmZVBhcnNlXG5tb2R1bGUuZXhwb3J0cy5kZWZhdWx0Q29udGVudFR5cGUgPSBkZWZhdWx0Q29udGVudFR5cGVcbiIsICJpbXBvcnQgeyBDb21tYW5kLCBPcHRpb24gfSBmcm9tIFwiY29tbWFuZGVyXCI7XG5pbXBvcnQgKiBhcyBmcyBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0ICogYXMgb3MgZnJvbSBcIm5vZGU6b3NcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcIm5vZGU6cGF0aFwiO1xuaW1wb3J0IHBrZyBmcm9tIFwiLi4vcGFja2FnZS5qc29uXCIgYXNzZXJ0IHsgdHlwZTogXCJqc29uXCIgfTtcblxuaW1wb3J0IHsgcmVhZFNlcnZlckluZm8gfSBmcm9tIFwiLi9yZWFkU2VydmVySW5mb1wiO1xuaW1wb3J0IHtcbiAgU2FuZGJveE1vZGUsXG4gIE91dHB1dFNjaGVtYVNvdXJjZSxcbiAgUHJvbXB0U291cmNlLFxuICBydW5Db2RleEV4ZWMsXG4gIFNhZmV0eVN0cmF0ZWd5LFxufSBmcm9tIFwiLi9ydW5Db2RleEV4ZWNcIjtcbmltcG9ydCB7IGRyb3BTdWRvIH0gZnJvbSBcIi4vZHJvcFN1ZG9cIjtcbmltcG9ydCB7IGVuc3VyZUFjdG9ySGFzV3JpdGVBY2Nlc3MgfSBmcm9tIFwiLi9jaGVja0FjdG9yUGVybWlzc2lvbnNcIjtcbmltcG9ydCBwYXJzZUFyZ3NTdHJpbmdUb0FyZ3YgZnJvbSBcInN0cmluZy1hcmd2XCI7XG5pbXBvcnQgeyB3cml0ZVByb3h5Q29uZmlnIH0gZnJvbSBcIi4vd3JpdGVQcm94eUNvbmZpZ1wiO1xuaW1wb3J0IHsgY2hlY2tPdXRwdXQgfSBmcm9tIFwiLi9jaGVja091dHB1dFwiO1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFpbigpIHtcbiAgY29uc3QgcHJvZ3JhbSA9IG5ldyBDb21tYW5kKCk7XG5cbiAgcHJvZ3JhbVxuICAgIC5uYW1lKFwiY29kZXgtYWN0aW9uXCIpXG4gICAgLnZlcnNpb24ocGtnLnZlcnNpb24pXG4gICAgLmRlc2NyaXB0aW9uKFwiTXVsdGl0b29sIHRvIHN1cHBvcnQgb3BlbmFpL2NvZGV4LWFjdGlvbi5cIik7XG5cbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKFwicmVhZC1zZXJ2ZXItaW5mb1wiKVxuICAgIC5kZXNjcmlwdGlvbihcIlJlYWQgc2VydmVyIGluZm8gZnJvbSB0aGUgcmVzcG9uc2VzIEFQSSBwcm94eVwiKVxuICAgIC5hcmd1bWVudChcIjxzZXJ2ZXJJbmZvRmlsZT5cIiwgXCJQYXRoIHRvIHRoZSBzZXJ2ZXIgaW5mbyBmaWxlXCIpXG4gICAgLmFjdGlvbihhc3luYyAoc2VydmVySW5mb0ZpbGU6IHN0cmluZykgPT4ge1xuICAgICAgYXdhaXQgcmVhZFNlcnZlckluZm8oc2VydmVySW5mb0ZpbGUpO1xuICAgIH0pO1xuXG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChcInJlc29sdmUtY29kZXgtaG9tZVwiKVxuICAgIC5kZXNjcmlwdGlvbihcbiAgICAgIFwiUmVzb2x2ZSB0aGUgQ29kZXggaG9tZSBkaXJlY3Rvcnkgd2l0aCBwcmVjZWRlbmNlOiBpbnB1dCwgZW52LCBkZWZhdWx0ICh+Ly5jb2RleClcIlxuICAgIClcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tY29kZXgtaG9tZS1vdmVycmlkZSA8RElSRUNUT1JZPlwiLFxuICAgICAgXCJPcHRpb25hbCBjb2RleC1ob21lIGlucHV0IHZhbHVlIChtYXkgYmUgZW1wdHkpXCJcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFxuICAgICAgXCItLXNhZmV0eS1zdHJhdGVneSA8c3RyYXRlZ3k+XCIsXG4gICAgICBcIlNhZmV0eSBzdHJhdGVneSB0byB0YWtlIGludG8gYWNjb3VudCB3aGVuIHBpY2tpbmcgZGVmYXVsdHNcIlxuICAgIClcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tY29kZXgtdXNlciA8dXNlcj5cIixcbiAgICAgIFwiQ29kZXggdXNlciB0byBjb25zaWRlciB3aGVuIHNhZmV0eSBzdHJhdGVneSBpcyAndW5wcml2aWxlZ2VkLXVzZXInXCJcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFwiLS1naXRodWItcnVuLWlkIDxpZD5cIiwgXCJHaXRIdWIgcnVuIElEXCIpXG4gICAgLmFjdGlvbihcbiAgICAgIGFzeW5jIChvcHRpb25zOiB7XG4gICAgICAgIGNvZGV4SG9tZU92ZXJyaWRlOiBzdHJpbmc7XG4gICAgICAgIHNhZmV0eVN0cmF0ZWd5OiBzdHJpbmc7XG4gICAgICAgIGNvZGV4VXNlcjogc3RyaW5nO1xuICAgICAgICBnaXRodWJSdW5JZDogc3RyaW5nO1xuICAgICAgfSkgPT4ge1xuICAgICAgICBjb25zdCBzYWZldHlTdHJhdGVneSA9IHRvU2FmZXR5U3RyYXRlZ3kob3B0aW9ucy5zYWZldHlTdHJhdGVneSk7XG4gICAgICAgIGNvbnN0IGNvZGV4VXNlciA9IGVtcHR5QXNOdWxsKG9wdGlvbnMuY29kZXhVc2VyKTtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWQgPSBhd2FpdCByZXNvbHZlQ29kZXhIb21lKFxuICAgICAgICAgIGVtcHR5QXNOdWxsKG9wdGlvbnMuY29kZXhIb21lT3ZlcnJpZGUpLFxuICAgICAgICAgIHNhZmV0eVN0cmF0ZWd5LFxuICAgICAgICAgIGNvZGV4VXNlcixcbiAgICAgICAgICBvcHRpb25zLmdpdGh1YlJ1bklkXG4gICAgICAgICk7XG5cbiAgICAgICAgY29uc3QgeyBzZXRPdXRwdXQgfSA9IGF3YWl0IGltcG9ydChcIkBhY3Rpb25zL2NvcmVcIik7XG4gICAgICAgIHNldE91dHB1dChcImNvZGV4LWhvbWVcIiwgcmVzb2x2ZWQpO1xuICAgICAgICBjb25zb2xlLmxvZyhgUmVzb2x2ZWQgQ29kZXggaG9tZTogJHtyZXNvbHZlZH1gKTtcbiAgICAgIH1cbiAgICApO1xuXG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChcIndyaXRlLXByb3h5LWNvbmZpZ1wiKVxuICAgIC5kZXNjcmlwdGlvbihcbiAgICAgIFwiV3JpdGUgdGhlIE9wZW5BSSBQcm94eSBtb2RlbCBwcm92aWRlciBjb25maWcgaW50byBDT0RFWF9IT01FL2NvbmZpZy50b21sXCJcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFwiLS1jb2RleC1ob21lIDxESVJFQ1RPUlk+XCIsIFwiUGF0aCB0byBDb2RleCBob21lIGRpcmVjdG9yeVwiKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcIi0tcG9ydCA8cG9ydD5cIiwgXCJQcm94eSBzZXJ2ZXIgcG9ydFwiLCBwYXJzZUludFN0cmljdClcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tc2FmZXR5LXN0cmF0ZWd5IDxzdHJhdGVneT5cIixcbiAgICAgIFwiU2FmZXR5IHN0cmF0ZWd5IHRvIHVzZS4gT25lIG9mICdkcm9wLXN1ZG8nLCAncmVhZC1vbmx5JywgJ3VucHJpdmlsZWdlZC11c2VyJywgb3IgJ3Vuc2FmZScuXCJcbiAgICApXG4gICAgLmFjdGlvbihcbiAgICAgIGFzeW5jIChvcHRpb25zOiB7XG4gICAgICAgIGNvZGV4SG9tZTogc3RyaW5nO1xuICAgICAgICBwb3J0OiBudW1iZXI7XG4gICAgICAgIHNhZmV0eVN0cmF0ZWd5OiBzdHJpbmc7XG4gICAgICB9KSA9PiB7XG4gICAgICAgIGNvbnN0IHNhZmV0eVN0cmF0ZWd5ID0gdG9TYWZldHlTdHJhdGVneShvcHRpb25zLnNhZmV0eVN0cmF0ZWd5KTtcbiAgICAgICAgYXdhaXQgd3JpdGVQcm94eUNvbmZpZyhvcHRpb25zLmNvZGV4SG9tZSwgb3B0aW9ucy5wb3J0LCBzYWZldHlTdHJhdGVneSk7XG4gICAgICB9XG4gICAgKTtcblxuICBwcm9ncmFtXG4gICAgLmNvbW1hbmQoXCJkcm9wLXN1ZG9cIilcbiAgICAuZGVzY3JpcHRpb24oXCJEcm9wcyBzdWRvIHByaXZpbGVnZXMgZm9yIHRoZSBjb25maWd1cmVkIHVzZXIuXCIpXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKFwiLS11c2VyIDx1c2VyPlwiLCBcIlVzZXIgdG8gbW9kaWZ5XCIpLmRlZmF1bHQoXCJydW5uZXJcIikpXG4gICAgLmFkZE9wdGlvbihcbiAgICAgIG5ldyBPcHRpb24oXCItLWdyb3VwIDxncm91cD5cIiwgXCJHcm91cCBncmFudGluZyBzdWRvIHByaXZpbGVnZXNcIikuZGVmYXVsdChcbiAgICAgICAgXCJzdWRvXCJcbiAgICAgIClcbiAgICApXG4gICAgLmFkZE9wdGlvbihuZXcgT3B0aW9uKFwiLS1yb290LXBoYXNlXCIsIFwiaW50ZXJuYWxcIikuZGVmYXVsdChmYWxzZSkuaGlkZUhlbHAoKSlcbiAgICAuYWN0aW9uKFxuICAgICAgYXN5bmMgKG9wdGlvbnM6IHsgdXNlcjogc3RyaW5nOyBncm91cDogc3RyaW5nOyByb290UGhhc2U6IGJvb2xlYW4gfSkgPT4ge1xuICAgICAgICBhd2FpdCBkcm9wU3Vkbyh7XG4gICAgICAgICAgdXNlcjogb3B0aW9ucy51c2VyLFxuICAgICAgICAgIGdyb3VwOiBvcHRpb25zLmdyb3VwLFxuICAgICAgICAgIHJvb3RQaGFzZTogb3B0aW9ucy5yb290UGhhc2UsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICk7XG5cbiAgcHJvZ3JhbVxuICAgIC5jb21tYW5kKFwicnVuLWNvZGV4LWV4ZWNcIilcbiAgICAuZGVzY3JpcHRpb24oXCJJbnZva2VzIGBjb2RleCBleGVjYCB3aXRoIHRoZSBhcHByb3ByaWF0ZSBhcmd1bWVudHNcIilcbiAgICAucmVxdWlyZWRPcHRpb24oXCItLXByb21wdCA8cHJvbXB0PlwiLCBcIlByb21wdCB0byBwYXNzIHRvIGBjb2RleCBleGVjYC5cIilcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tcHJvbXB0LWZpbGUgPEZJTEU+XCIsXG4gICAgICBcIkZpbGUgY29udGFpbmluZyB0aGUgcHJvbXB0IHRvIHBhc3MgdG8gYGNvZGV4IGV4ZWNgLlwiXG4gICAgKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcbiAgICAgIFwiLS1jb2RleC1ob21lIDxESVJFQ1RPUlk+XCIsXG4gICAgICBcIlBhdGggdG8gdGhlIENvZGV4IENMSSBob21lIGRpcmVjdG9yeSAod2hlcmUgY29uZmlnIGZpbGVzIGFyZSBzdG9yZWQpLlwiXG4gICAgKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcIi0tY2QgPERJUkVDVE9SWT5cIiwgXCJXb3JraW5nIGRpcmVjdG9yeSBmb3IgQ29kZXhcIilcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tZXh0cmEtYXJncyA8YXJncz5cIixcbiAgICAgIFwiQWRkaXRpb25hbCBhcmdzIHRvIHBhc3MgdGhyb3VnaCB0byBgY29kZXggZXhlY2AgYXMgSlNPTiBhcnJheSBvciBzaGVsbCBzdHJpbmcuXCIsXG4gICAgICBwYXJzZUV4dHJhQXJnc1xuICAgIClcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tb3V0cHV0LWZpbGUgPEZJTEU+XCIsXG4gICAgICBcIlBhdGggd2hlcmUgdGhlIGZpbmFsIG1lc3NhZ2UgZnJvbSBgY29kZXggZXhlY2Agd2lsbCBiZSB3cml0dGVuLlwiXG4gICAgKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcbiAgICAgIFwiLS1vdXRwdXQtc2NoZW1hLWZpbGUgPEZJTEU+XCIsXG4gICAgICBcIlBhdGggdG8gYSBzY2hlbWEgZmlsZSB0byBwYXNzIHRvIGBjb2RleCBleGVjIC0tb3V0cHV0LXNjaGVtYWAuXCJcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFxuICAgICAgXCItLW91dHB1dC1zY2hlbWEgPFNDSEVNQT5cIixcbiAgICAgIFwiSW5saW5lIHNjaGVtYSBjb250ZW50cyB0byBwYXNzIHRvIGBjb2RleCBleGVjIC0tb3V0cHV0LXNjaGVtYWAuXCJcbiAgICApXG4gICAgLnJlcXVpcmVkT3B0aW9uKFxuICAgICAgXCItLXNhbmRib3ggPFNBTkRCT1g+XCIsXG4gICAgICBcIlNhbmRib3ggbW9kZSBvdmVycmlkZSB0byBwYXNzIHRvIGBjb2RleCBleGVjYC5cIlxuICAgIClcbiAgICAucmVxdWlyZWRPcHRpb24oXCItLW1vZGVsIDxtb2RlbD5cIiwgXCJNb2RlbCB0aGUgYWdlbnQgc2hvdWxkIHVzZVwiKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcIi0tZWZmb3J0IDxlZmZvcnQ+XCIsIFwiUmVhc29uaW5nIGVmZm9ydCB0aGUgYWdlbnQgc2hvdWxkIHVzZVwiKVxuICAgIC5yZXF1aXJlZE9wdGlvbihcbiAgICAgIFwiLS1zYWZldHktc3RyYXRlZ3kgPHN0cmF0ZWd5PlwiLFxuICAgICAgXCJTYWZldHkgc3RyYXRlZ3kgdG8gdXNlLiBPbmUgb2YgJ2Ryb3Atc3VkbycsICdyZWFkLW9ubHknLCAndW5wcml2aWxlZ2VkLXVzZXInLCBvciAndW5zYWZlJy5cIlxuICAgIClcbiAgICAucmVxdWlyZWRPcHRpb24oXG4gICAgICBcIi0tY29kZXgtdXNlciA8dXNlcj5cIixcbiAgICAgIFwiVXNlciB0byBydW4gY29kZXggZXhlYyBhcyB3aGVuIHVzaW5nIHRoZSAndW5wcml2aWxlZ2VkLXVzZXInIHNhZmV0eSBzdHJhdGVneS5cIlxuICAgIClcbiAgICAuYWN0aW9uKFxuICAgICAgYXN5bmMgKG9wdGlvbnM6IHtcbiAgICAgICAgcHJvbXB0OiBzdHJpbmc7XG4gICAgICAgIHByb21wdEZpbGU6IHN0cmluZztcbiAgICAgICAgY29kZXhIb21lOiBzdHJpbmc7XG4gICAgICAgIGNkOiBzdHJpbmc7XG4gICAgICAgIGV4dHJhQXJnczogQXJyYXk8c3RyaW5nPjtcbiAgICAgICAgb3V0cHV0RmlsZTogc3RyaW5nO1xuICAgICAgICBvdXRwdXRTY2hlbWFGaWxlOiBzdHJpbmc7XG4gICAgICAgIG91dHB1dFNjaGVtYTogc3RyaW5nO1xuICAgICAgICBzYW5kYm94OiBzdHJpbmc7XG4gICAgICAgIG1vZGVsOiBzdHJpbmc7XG4gICAgICAgIGVmZm9ydDogc3RyaW5nO1xuICAgICAgICBzYWZldHlTdHJhdGVneTogc3RyaW5nO1xuICAgICAgICBjb2RleFVzZXI6IHN0cmluZztcbiAgICAgIH0pID0+IHtcbiAgICAgICAgY29uc3Qge1xuICAgICAgICAgIHByb21wdCxcbiAgICAgICAgICBwcm9tcHRGaWxlLFxuICAgICAgICAgIG91dHB1dEZpbGUsXG4gICAgICAgICAgY29kZXhIb21lLFxuICAgICAgICAgIGNkLFxuICAgICAgICAgIGV4dHJhQXJncyxcbiAgICAgICAgICBvdXRwdXRTY2hlbWEsXG4gICAgICAgICAgb3V0cHV0U2NoZW1hRmlsZSxcbiAgICAgICAgICBzYW5kYm94LFxuICAgICAgICAgIG1vZGVsLFxuICAgICAgICAgIGVmZm9ydCxcbiAgICAgICAgICBzYWZldHlTdHJhdGVneSxcbiAgICAgICAgICBjb2RleFVzZXIsXG4gICAgICAgIH0gPSBvcHRpb25zO1xuXG4gICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRQcm9tcHQgPSBlbXB0eUFzTnVsbChwcm9tcHQpO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkUHJvbXB0RmlsZSA9IGVtcHR5QXNOdWxsKHByb21wdEZpbGUpO1xuICAgICAgICBpZiAobm9ybWFsaXplZFByb21wdCAhPSBudWxsICYmIG5vcm1hbGl6ZWRQcm9tcHRGaWxlICE9IG51bGwpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIk9ubHkgb25lIG9mIGBwcm9tcHRgIG9yIGBwcm9tcHQtZmlsZWAgbWF5IGJlIHNwZWNpZmllZC5cIlxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcHJvbXB0U291cmNlOiBQcm9tcHRTb3VyY2U7XG4gICAgICAgIGlmIChub3JtYWxpemVkUHJvbXB0ICE9IG51bGwpIHtcbiAgICAgICAgICBwcm9tcHRTb3VyY2UgPSB7IHR5cGU6IFwiaW5saW5lXCIsIGNvbnRlbnQ6IG5vcm1hbGl6ZWRQcm9tcHQgfTtcbiAgICAgICAgfSBlbHNlIGlmIChub3JtYWxpemVkUHJvbXB0RmlsZSAhPSBudWxsKSB7XG4gICAgICAgICAgcHJvbXB0U291cmNlID0geyB0eXBlOiBcImZpbGVcIiwgcGF0aDogbm9ybWFsaXplZFByb21wdEZpbGUgfTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIkVpdGhlciBgcHJvbXB0YCBvciBgcHJvbXB0LWZpbGVgIG11c3QgYmUgc3BlY2lmaWVkLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEN1c3RvbSBvcHRpb24gcHJvY2Vzc2luZyB0byBjb2VyY2VzIHRvIG51bGwgZG9lcyBub3Qgd29yayB3aXRoXG4gICAgICAgIC8vIENvbW1hbmRlci5qcydzIHJlcXVpcmVkT3B0aW9uLCBzbyB3ZSBoYXZlIHRvIHBvc3QtcHJvY2VzcyBoZXJlLlxuICAgICAgICBjb25zdCBub3JtYWxpemVkT3V0cHV0U2NoZW1hRmlsZSA9IGVtcHR5QXNOdWxsKG91dHB1dFNjaGVtYUZpbGUpO1xuICAgICAgICBjb25zdCBub3JtYWxpemVkT3V0cHV0U2NoZW1hID0gZW1wdHlBc051bGwob3V0cHV0U2NoZW1hKTtcblxuICAgICAgICBpZiAoXG4gICAgICAgICAgbm9ybWFsaXplZE91dHB1dFNjaGVtYUZpbGUgIT0gbnVsbCAmJlxuICAgICAgICAgIG5vcm1hbGl6ZWRPdXRwdXRTY2hlbWEgIT0gbnVsbFxuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBcIk9ubHkgb25lIG9mIGBvdXRwdXQtc2NoZW1hYCBvciBgb3V0cHV0LXNjaGVtYS1maWxlYCBtYXkgYmUgc3BlY2lmaWVkLlwiXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCBvdXRwdXRTY2hlbWFTb3VyY2U6IE91dHB1dFNjaGVtYVNvdXJjZSB8IG51bGwgPSBudWxsO1xuICAgICAgICBpZiAobm9ybWFsaXplZE91dHB1dFNjaGVtYSAhPSBudWxsKSB7XG4gICAgICAgICAgb3V0cHV0U2NoZW1hU291cmNlID0ge1xuICAgICAgICAgICAgdHlwZTogXCJpbmxpbmVcIixcbiAgICAgICAgICAgIGNvbnRlbnQ6IG5vcm1hbGl6ZWRPdXRwdXRTY2hlbWEsXG4gICAgICAgICAgfTtcbiAgICAgICAgfSBlbHNlIGlmIChub3JtYWxpemVkT3V0cHV0U2NoZW1hRmlsZSAhPSBudWxsKSB7XG4gICAgICAgICAgb3V0cHV0U2NoZW1hU291cmNlID0ge1xuICAgICAgICAgICAgdHlwZTogXCJmaWxlXCIsXG4gICAgICAgICAgICBwYXRoOiBub3JtYWxpemVkT3V0cHV0U2NoZW1hRmlsZSxcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgcnVuQ29kZXhFeGVjKHtcbiAgICAgICAgICBwcm9tcHQ6IHByb21wdFNvdXJjZSxcbiAgICAgICAgICBjb2RleEhvbWU6IGVtcHR5QXNOdWxsKGNvZGV4SG9tZSksXG4gICAgICAgICAgY2QsXG4gICAgICAgICAgZXh0cmFBcmdzLFxuICAgICAgICAgIGV4cGxpY2l0T3V0cHV0RmlsZTogZW1wdHlBc051bGwob3V0cHV0RmlsZSksXG4gICAgICAgICAgb3V0cHV0U2NoZW1hOiBvdXRwdXRTY2hlbWFTb3VyY2UsXG4gICAgICAgICAgc2FuZGJveDogdG9TYW5kYm94TW9kZShzYW5kYm94KSxcbiAgICAgICAgICBtb2RlbDogZW1wdHlBc051bGwobW9kZWwpLFxuICAgICAgICAgIGVmZm9ydDogZW1wdHlBc051bGwoZWZmb3J0KSxcbiAgICAgICAgICBzYWZldHlTdHJhdGVneTogdG9TYWZldHlTdHJhdGVneShzYWZldHlTdHJhdGVneSksXG4gICAgICAgICAgY29kZXhVc2VyOiBlbXB0eUFzTnVsbChjb2RleFVzZXIpLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICApO1xuXG4gIHByb2dyYW1cbiAgICAuY29tbWFuZChcImNoZWNrLXdyaXRlLWFjY2Vzc1wiKVxuICAgIC5kZXNjcmlwdGlvbihcbiAgICAgIFwiQ2hlY2tzIHRoYXQgdGhlIHRyaWdnZXJpbmcgYWN0b3IgaGFzIHdyaXRlIGFjY2VzcyB0byB0aGUgcmVwb3NpdG9yeVwiXG4gICAgKVxuICAgIC5vcHRpb24oXG4gICAgICBcIi0tYWxsb3ctYm90cyA8Ym9vbGVhbj5cIixcbiAgICAgIFwiQWxsb3cgR2l0SHViIEFwcCBhbmQgYm90IGFjdG9ycyB0byBieXBhc3MgdGhlIHdyaXRlLWFjY2VzcyBjaGVjayAoZGVmYXVsdDogdHJ1ZSkuXCIsXG4gICAgICBwYXJzZUJvb2xlYW4sXG4gICAgICB0cnVlXG4gICAgKVxuICAgIC5vcHRpb24oXG4gICAgICBcIi0tYWxsb3ctdXNlcnMgPHVzZXJzPlwiLFxuICAgICAgXCJDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBHaXRIdWIgdXNlcm5hbWVzIHdobyBjYW4gcnVuIHRoaXMgYWN0aW9uLCBvciAnKicgdG8gYWxsb3cgYWxsIHVzZXJzLlwiLFxuICAgICAgXCJcIlxuICAgIClcbiAgICAuYWN0aW9uKFxuICAgICAgYXN5bmMgKHtcbiAgICAgICAgYWxsb3dCb3RzLFxuICAgICAgICBhbGxvd1VzZXJzLFxuICAgICAgfToge1xuICAgICAgICBhbGxvd0JvdHM6IGJvb2xlYW47XG4gICAgICAgIGFsbG93VXNlcnM6IHN0cmluZztcbiAgICAgIH0pID0+IHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZW5zdXJlQWN0b3JIYXNXcml0ZUFjY2Vzcyh7XG4gICAgICAgICAgYWxsb3dCb3RBY3RvcnM6IGFsbG93Qm90cyxcbiAgICAgICAgICBhbGxvd1VzZXJzLFxuICAgICAgICB9KTtcbiAgICAgICAgc3dpdGNoIChyZXN1bHQuc3RhdHVzKSB7XG4gICAgICAgICAgY2FzZSBcImFwcHJvdmVkXCI6IHtcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBBY3RvciAnJHtyZXN1bHQuYWN0b3J9JyBpcyBwZXJtaXR0ZWQgdG8gY29udGludWUuYCk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgY2FzZSBcInJlamVjdGVkXCI6IHtcbiAgICAgICAgICAgIGNvbnN0IG1lc3NhZ2UgPSBgQWN0b3IgJyR7cmVzdWx0LmFjdG9yfScgaXMgbm90IHBlcm1pdHRlZCB0byBydW4gdGhpcyBhY3Rpb246ICR7cmVzdWx0LnJlYXNvbn1gO1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihtZXNzYWdlKTtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihtZXNzYWdlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICApO1xuXG4gIHByb2dyYW0ucGFyc2UoKTtcbn1cblxuZnVuY3Rpb24gcGFyc2VJbnRTdHJpY3QodmFsdWU6IHN0cmluZyk6IG51bWJlciB7XG4gIGNvbnN0IHBhcnNlZCA9IHBhcnNlSW50KHZhbHVlLCAxMCk7XG4gIGlmIChpc05hTihwYXJzZWQpKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIGludGVnZXI6ICR7dmFsdWV9YCk7XG4gIH1cbiAgcmV0dXJuIHBhcnNlZDtcbn1cblxuZnVuY3Rpb24gcGFyc2VFeHRyYUFyZ3ModmFsdWU6IHN0cmluZyk6IEFycmF5PHN0cmluZz4ge1xuICBpZiAodmFsdWUubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoXCJbXCIpKSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UodmFsdWUpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBwYXJzZUFyZ3NTdHJpbmdUb0FyZ3YodmFsdWUpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRvU2FmZXR5U3RyYXRlZ3kodmFsdWU6IHN0cmluZyk6IFNhZmV0eVN0cmF0ZWd5IHtcbiAgc3dpdGNoICh2YWx1ZSkge1xuICAgIGNhc2UgXCJkcm9wLXN1ZG9cIjpcbiAgICBjYXNlIFwicmVhZC1vbmx5XCI6XG4gICAgY2FzZSBcInVucHJpdmlsZWdlZC11c2VyXCI6XG4gICAgY2FzZSBcInVuc2FmZVwiOlxuICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBJbnZhbGlkIHNhZmV0eSBzdHJhdGVneTogJHt2YWx1ZX0uIE11c3QgYmUgb25lIG9mICdkcm9wLXN1ZG8nLCAncmVhZC1vbmx5JywgJ3VucHJpdmlsZWdlZC11c2VyJywgb3IgJ3Vuc2FmZScuYFxuICAgICAgKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB0b1NhbmRib3hNb2RlKHZhbHVlOiBzdHJpbmcpOiBTYW5kYm94TW9kZSB7XG4gIHN3aXRjaCAodmFsdWUpIHtcbiAgICBjYXNlIFwicmVhZC1vbmx5XCI6XG4gICAgY2FzZSBcIndvcmtzcGFjZS13cml0ZVwiOlxuICAgIGNhc2UgXCJkYW5nZXItZnVsbC1hY2Nlc3NcIjpcbiAgICAgIHJldHVybiB2YWx1ZTtcbiAgICBkZWZhdWx0OlxuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgSW52YWxpZCBzYW5kYm94OiAke3ZhbHVlfS4gTXVzdCBiZSBvbmUgb2YgJ3JlYWQtb25seScsICd3b3Jrc3BhY2Utd3JpdGUnLCBvciAnZGFuZ2VyLWZ1bGwtYWNjZXNzJy5gXG4gICAgICApO1xuICB9XG59XG5cbmZ1bmN0aW9uIGVtcHR5QXNOdWxsKHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcgfCBudWxsIHtcbiAgcmV0dXJuIHZhbHVlLnRyaW0oKS5sZW5ndGggPT0gMCA/IG51bGwgOiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gcGFyc2VCb29sZWFuKHZhbHVlOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgY29uc3Qgbm9ybWFsaXplZCA9IHZhbHVlLnRyaW0oKS50b0xvd2VyQ2FzZSgpO1xuICBpZiAoW1widHJ1ZVwiLCBcIjFcIiwgXCJ5ZXNcIiwgXCJ5XCJdLmluY2x1ZGVzKG5vcm1hbGl6ZWQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbiAgaWYgKFtcImZhbHNlXCIsIFwiMFwiLCBcIm5vXCIsIFwiblwiXS5pbmNsdWRlcyhub3JtYWxpemVkKSkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICB0aHJvdyBuZXcgRXJyb3IoYEludmFsaWQgYm9vbGVhbiB2YWx1ZTogJHt2YWx1ZX1gKTtcbn1cblxubWFpbigpO1xuXG5hc3luYyBmdW5jdGlvbiByZXNvbHZlQ29kZXhIb21lKFxuICBpbnB1dENvZGV4SG9tZTogc3RyaW5nIHwgbnVsbCxcbiAgc2FmZXR5U3RyYXRlZ3k6IFNhZmV0eVN0cmF0ZWd5LFxuICBjb2RleFVzZXI6IHN0cmluZyB8IG51bGwsXG4gIGdpdGh1YlJ1bklkOiBzdHJpbmdcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIGlmIChpbnB1dENvZGV4SG9tZSAhPSBudWxsKSB7XG4gICAgcmV0dXJuIGV4cGFuZFRpbGRlKGlucHV0Q29kZXhIb21lKTtcbiAgfVxuICBjb25zdCBlbnZIb21lID0gZW1wdHlBc051bGwocHJvY2Vzcy5lbnYuQ09ERVhfSE9NRSA/PyBcIlwiKTtcbiAgaWYgKGVudkhvbWUgIT0gbnVsbCkge1xuICAgIHJldHVybiBlbnZIb21lO1xuICB9XG5cbiAgaWYgKHNhZmV0eVN0cmF0ZWd5ID09PSBcInVucHJpdmlsZWdlZC11c2VyXCIpIHtcbiAgICBpZiAoY29kZXhVc2VyID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJjb2RleC11c2VyIGlucHV0IG11c3QgYmUgcHJvdmlkZWQgd2hlbiB1c2luZyAndW5wcml2aWxlZ2VkLXVzZXInIHNhZmV0eSBzdHJhdGVneSBhbmQgbm8gY29kZXgtaG9tZSBpcyBzcGVjaWZpZWQuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGF3YWl0IGRlcml2ZVNoYXJlZENvZGV4SG9tZUZvclVucHJpdmlsZWdlZFVzZXIoXG4gICAgICBjb2RleFVzZXIsXG4gICAgICBnaXRodWJSdW5JZFxuICAgICk7XG4gIH0gZWxzZSB7XG4gICAgY29uc3QgY29kZXhIb21lID0gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgXCIuY29kZXhcIik7XG4gICAgLy8gRW5zdXJlIGRpcmVjdG9yeSBleGlzdHMgZm9yIGRvd25zdHJlYW0gc3RlcHMgdGhhdCB3aWxsIHdyaXRlIGZpbGVzIGhlcmUuXG4gICAgYXdhaXQgZnMubWtkaXIoY29kZXhIb21lLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICByZXR1cm4gY29kZXhIb21lO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRlcml2ZVNoYXJlZENvZGV4SG9tZUZvclVucHJpdmlsZWdlZFVzZXIoXG4gIHVzZXI6IHN0cmluZyxcbiAgZ2l0aHViUnVuSWQ6IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgaG9tZSA9IChcbiAgICBhd2FpdCBjaGVja091dHB1dChbXCJzdWRvXCIsIFwiLXVcIiwgdXNlciwgXCItLVwiLCBcInByaW50ZW52XCIsIFwiSE9NRVwiXSlcbiAgKS50cmltKCk7XG4gIGlmICghaG9tZSkge1xuICAgIHRocm93IG5ldyBFcnJvcihgQ291bGQgbm90IGRldGVybWluZSBob21lIGRpcmVjdG9yeSBmb3IgdXNlciAnJHt1c2VyfScuYCk7XG4gIH1cbiAgY29uc3QgY29kZXhIb21lID0gcGF0aC5qb2luKGhvbWUsIFwiLmNvZGV4XCIpO1xuICB0cnkge1xuICAgIGNvbnN0IHN0YXQgPSBhd2FpdCBmcy5zdGF0KGNvZGV4SG9tZSk7XG4gICAgaWYgKHN0YXQuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgLy8gRGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzIGFuZCBtYXkgY29udGFpbiBhIGNvbmZpZy50b21sIGNyZWF0ZWQgYnkgdGhlXG4gICAgICAvLyB1c2VyIChvciBhIHByZXZpb3VzIGludm9jYXRpb24gb2YgY29kZXgtYWN0aW9uKSwgc28gYXNzdW1lIGl0J3NcbiAgICAgIC8vIGNvcnJlY3RseSBwZXJtaXNzaW9uZWQuXG4gICAgICByZXR1cm4gY29kZXhIb21lO1xuICAgIH1cbiAgfSBjYXRjaCB7XG4gICAgLy8gSWdub3JlIHN0YXQgZXJyb3JzIGFuZCB0cnkgdG8gY3JlYXRlIHRoZSBkaXJlY3RvcnkuXG4gIH1cblxuICAvLyBXZSBtdXN0IHVzZSBzdWRvIGZvciB0aGUgZm9sbG93aW5nIGZpbGUgc3lzdGVtIG9wZXJhdGlvbnMgYmVjYXVzZSB3ZVxuICAvLyBhcmUgd3JpdGluZyB0byB0aGUgaG9tZSBkaXJlY3Rvcnkgb2YgYSBkaWZmZXJlbnQgdXNlci5cbiAgYXdhaXQgY2hlY2tPdXRwdXQoW1wic3Vkb1wiLCBcIm1rZGlyXCIsIGNvZGV4SG9tZV0pO1xuICBhd2FpdCBjaGVja091dHB1dChbXCJzdWRvXCIsIFwiY2hvd25cIiwgYCR7dXNlcn1gLCBjb2RleEhvbWVdKTtcbiAgYXdhaXQgY2hlY2tPdXRwdXQoW1wic3Vkb1wiLCBcImNobW9kXCIsIFwiNzU1XCIsIGNvZGV4SG9tZV0pO1xuXG4gIC8vIGNvZGV4LXJlc3BvbnNlcy1hcGktcHJveHkgd2lsbCBuZWVkIHRvIHdyaXRlIHRoZSBzZXJ2ZXIgaW5mbyBmaWxlLlxuICBjb25zdCBzZXJ2ZXJJbmZvRmlsZSA9IHBhdGguam9pbihjb2RleEhvbWUsIGAke2dpdGh1YlJ1bklkfS5qc29uYCk7XG4gIGF3YWl0IGNoZWNrT3V0cHV0KFtcInN1ZG9cIiwgXCJ0b3VjaFwiLCBzZXJ2ZXJJbmZvRmlsZV0pO1xuICAvLyBNYWtlIHRoZSBmaWxlIHdvcmxkLXdyaXRhYmxlIGZvciB0aGUgbW9tZW50LCBidXQgdGhpcyB3aWxsIGJlIGxvY2tlZCBkb3duXG4gIC8vIHRvIHJlYWQtb25seSBieSByb290IGJlZm9yZSB0aGUgYWN0aW9uIGNvbXBsZXRlcy5cbiAgYXdhaXQgY2hlY2tPdXRwdXQoW1wic3Vkb1wiLCBcImNobW9kXCIsIFwiNjY2XCIsIHNlcnZlckluZm9GaWxlXSk7XG5cbiAgcmV0dXJuIGNvZGV4SG9tZTtcbn1cblxuZnVuY3Rpb24gZXhwYW5kVGlsZGUocDogc3RyaW5nKTogc3RyaW5nIHtcbiAgaWYgKHAgPT09IFwiflwiKSB7XG4gICAgcmV0dXJuIG9zLmhvbWVkaXIoKTtcbiAgfVxuICBpZiAocC5zdGFydHNXaXRoKFwifi9cIikgfHwgcC5zdGFydHNXaXRoKFwiflxcXFxcIikpIHtcbiAgICByZXR1cm4gcGF0aC5qb2luKG9zLmhvbWVkaXIoKSwgcC5zbGljZSgyKSk7XG4gIH1cbiAgcmV0dXJuIHA7XG59XG4iLCAiaW1wb3J0IGNvbW1hbmRlciBmcm9tICcuL2luZGV4LmpzJztcblxuLy8gd3JhcHBlciB0byBwcm92aWRlIG5hbWVkIGV4cG9ydHMgZm9yIEVTTS5cbmV4cG9ydCBjb25zdCB7XG4gIHByb2dyYW0sXG4gIGNyZWF0ZUNvbW1hbmQsXG4gIGNyZWF0ZUFyZ3VtZW50LFxuICBjcmVhdGVPcHRpb24sXG4gIENvbW1hbmRlckVycm9yLFxuICBJbnZhbGlkQXJndW1lbnRFcnJvcixcbiAgSW52YWxpZE9wdGlvbkFyZ3VtZW50RXJyb3IsIC8vIGRlcHJlY2F0ZWQgb2xkIG5hbWVcbiAgQ29tbWFuZCxcbiAgQXJndW1lbnQsXG4gIE9wdGlvbixcbiAgSGVscCxcbn0gPSBjb21tYW5kZXI7XG4iLCAie1xuICBcIm5hbWVcIjogXCJAb3BlbmFpL2NvZGV4LWFjdGlvblwiLFxuICBcInZlcnNpb25cIjogXCIwLjAuMFwiLFxuICBcImRlc2NyaXB0aW9uXCI6IFwiR2l0SHViIEFjdGlvbiB0byBydW4gY29kZXggZXhlYyB2aWEgdGhlIENvZGV4IENMSSB3aXRoIGFjY29tcGFueWluZyBoZWxwZXIgc3RlcHNcIixcbiAgXCJwcml2YXRlXCI6IHRydWUsXG4gIFwic2NyaXB0c1wiOiB7XG4gICAgXCJidWlsZFwiOiBcImVzYnVpbGQgc3JjL21haW4udHMgLS1zb3VyY2VtYXA9aW5saW5lIC0tZm9ybWF0PWNqcyAtLWJ1bmRsZSAtLXBsYXRmb3JtPW5vZGUgLS10YXJnZXQ9bm9kZTIwIC0tb3V0ZGlyPWRpc3RcIixcbiAgICBcImNoZWNrXCI6IFwidHNjIC0tbm9FbWl0XCJcbiAgfSxcbiAgXCJkZXBlbmRlbmNpZXNcIjoge1xuICAgIFwiQGFjdGlvbnMvY29yZVwiOiBcIl4xLjExLjFcIixcbiAgICBcIkBvY3Rva2l0L2dyYXBocWxcIjogXCJeOC4yLjJcIixcbiAgICBcIkBvY3Rva2l0L3Jlc3RcIjogXCJeMjEuMS4xXCIsXG4gICAgXCJjb21tYW5kZXJcIjogXCIxNC4wLjFcIixcbiAgICBcInN0cmluZy1hcmd2XCI6IFwiMC4zLjJcIlxuICB9LFxuICBcImRldkRlcGVuZGVuY2llc1wiOiB7XG4gICAgXCJAdHlwZXMvbm9kZVwiOiBcIl4yMC4xMi43XCIsXG4gICAgXCJlc2J1aWxkXCI6IFwiXjAuMjMuMFwiLFxuICAgIFwidHlwZXNjcmlwdFwiOiBcIl41LjQuNVwiXG4gIH0sXG4gIFwicGFja2FnZU1hbmFnZXJcIjogXCJwbnBtQDEwLjE3LjFcIlxufVxuIiwgImltcG9ydCAqIGFzIGNvcmUgZnJvbSBcIkBhY3Rpb25zL2NvcmVcIjtcbmltcG9ydCAqIGFzIGZzIGZyb20gXCJmcy9wcm9taXNlc1wiO1xuXG4vKipcbiAqIEluIHRoZW9yeSwgdGhpcyBpcyBub3QgY2FsbGVkIHVudGlsIGBzZXJ2ZXJJbmZvRmlsZWAgaXMgbm9uLWVtcHR5LCBidXQgd2VcbiAqIHdpbGwgcG9sbCBpbiB0aGUgcmFyZSBjYXNlIHRoYXQgaXQgd2FzIGEgcGFydGlhbCB3cml0ZS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlYWRTZXJ2ZXJJbmZvKHNlcnZlckluZm9GaWxlOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgZm9yIChsZXQgYXR0ZW1wdCA9IDA7IGF0dGVtcHQgPCAxMDA7IGF0dGVtcHQrKykge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjb250ZW50cyA9IGF3YWl0IGZzLnJlYWRGaWxlKHNlcnZlckluZm9GaWxlLCB7IGVuY29kaW5nOiBcInV0ZjhcIiB9KTtcbiAgICAgIGNvbnN0IHsgcG9ydCB9ID0gSlNPTi5wYXJzZShjb250ZW50cyk7XG4gICAgICBpZiAodHlwZW9mIHBvcnQgIT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvcmUuc2V0T3V0cHV0KFwicG9ydFwiLCBwb3J0LnRvU3RyaW5nKCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBFcnJvciByZWFkaW5nIHNlcnZlciBpbmZvOiAke2Vycm9yfWApO1xuICAgICAgYXdhaXQgc2xlZXAoMTAwKTtcbiAgICB9XG4gIH1cblxuICB0aHJvdyBFcnJvcihgRmFpbGVkIHRvIHJlYWQgc2VydmVyIGluZm8gZnJvbSAke3NlcnZlckluZm9GaWxlfWApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzbGVlcChtczogbnVtYmVyKTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xufVxuIiwgImltcG9ydCB7IHNwYXduIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IGNobW9kLCBta2R0ZW1wLCByZWFkRmlsZSwgcm0sIHdyaXRlRmlsZSB9IGZyb20gXCJmcy9wcm9taXNlc1wiO1xuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCBvcyBmcm9tIFwib3NcIjtcbmltcG9ydCB7IHNldE91dHB1dCB9IGZyb20gXCJAYWN0aW9ucy9jb3JlXCI7XG5pbXBvcnQgeyBjaGVja091dHB1dCB9IGZyb20gXCIuL2NoZWNrT3V0cHV0XCI7XG5cbmV4cG9ydCB0eXBlIFByb21wdFNvdXJjZSA9XG4gIHwge1xuICAgICAgdHlwZTogXCJpbmxpbmVcIjtcbiAgICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogXCJmaWxlXCI7XG4gICAgICBwYXRoOiBzdHJpbmc7XG4gICAgfTtcblxuZXhwb3J0IHR5cGUgU2FmZXR5U3RyYXRlZ3kgPVxuICB8IFwiZHJvcC1zdWRvXCJcbiAgfCBcInJlYWQtb25seVwiXG4gIHwgXCJ1bnByaXZpbGVnZWQtdXNlclwiXG4gIHwgXCJ1bnNhZmVcIjtcblxuZXhwb3J0IHR5cGUgU2FuZGJveE1vZGUgPVxuICB8IFwicmVhZC1vbmx5XCJcbiAgfCBcIndvcmtzcGFjZS13cml0ZVwiXG4gIHwgXCJkYW5nZXItZnVsbC1hY2Nlc3NcIjtcblxuZXhwb3J0IHR5cGUgT3V0cHV0U2NoZW1hU291cmNlID1cbiAgfCB7XG4gICAgICB0eXBlOiBcImZpbGVcIjtcbiAgICAgIHBhdGg6IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAgdHlwZTogXCJpbmxpbmVcIjtcbiAgICAgIGNvbnRlbnQ6IHN0cmluZztcbiAgICB9O1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcnVuQ29kZXhFeGVjKHtcbiAgcHJvbXB0LFxuICBjb2RleEhvbWUsXG4gIGNkLFxuICBleHRyYUFyZ3MsXG4gIGV4cGxpY2l0T3V0cHV0RmlsZSxcbiAgb3V0cHV0U2NoZW1hLFxuICBtb2RlbCxcbiAgZWZmb3J0LFxuICBzYWZldHlTdHJhdGVneSxcbiAgY29kZXhVc2VyLFxuICBzYW5kYm94LFxufToge1xuICBwcm9tcHQ6IFByb21wdFNvdXJjZTtcbiAgY29kZXhIb21lOiBzdHJpbmcgfCBudWxsO1xuICBjZDogc3RyaW5nO1xuICBleHRyYUFyZ3M6IEFycmF5PHN0cmluZz47XG4gIGV4cGxpY2l0T3V0cHV0RmlsZTogc3RyaW5nIHwgbnVsbDtcbiAgb3V0cHV0U2NoZW1hOiBPdXRwdXRTY2hlbWFTb3VyY2UgfCBudWxsO1xuICBtb2RlbDogc3RyaW5nIHwgbnVsbDtcbiAgZWZmb3J0OiBzdHJpbmcgfCBudWxsO1xuICBzYWZldHlTdHJhdGVneTogU2FmZXR5U3RyYXRlZ3k7XG4gIGNvZGV4VXNlcjogc3RyaW5nIHwgbnVsbDtcbiAgc2FuZGJveDogU2FuZGJveE1vZGU7XG59KTogUHJvbWlzZTx2b2lkPiB7XG4gIGxldCBpbnB1dDogc3RyaW5nO1xuICBzd2l0Y2ggKHByb21wdC50eXBlKSB7XG4gICAgY2FzZSBcImlubGluZVwiOlxuICAgICAgaW5wdXQgPSBwcm9tcHQuY29udGVudDtcbiAgICAgIGJyZWFrO1xuICAgIGNhc2UgXCJmaWxlXCI6XG4gICAgICBpbnB1dCA9IGF3YWl0IHJlYWRGaWxlKHByb21wdC5wYXRoLCBcInV0ZjhcIik7XG4gICAgICBicmVhaztcbiAgfVxuXG4gIGNvbnN0IHJ1bkFzVXNlcjogc3RyaW5nIHwgbnVsbCA9XG4gICAgc2FmZXR5U3RyYXRlZ3kgPT09IFwidW5wcml2aWxlZ2VkLXVzZXJcIiA/IGNvZGV4VXNlciA6IG51bGw7XG5cbiAgbGV0IG91dHB1dEZpbGU6IE91dHB1dEZpbGU7XG4gIGlmIChleHBsaWNpdE91dHB1dEZpbGUgIT0gbnVsbCkge1xuICAgIG91dHB1dEZpbGUgPSB7IHR5cGU6IFwiZXhwbGljaXRcIiwgZmlsZTogZXhwbGljaXRPdXRwdXRGaWxlIH07XG4gIH0gZWxzZSB7XG4gICAgb3V0cHV0RmlsZSA9IGF3YWl0IGNyZWF0ZVRlbXBPdXRwdXRGaWxlKHsgcnVuQXNVc2VyIH0pO1xuICB9XG5cbiAgY29uc3QgcmVzb2x2ZWRPdXRwdXRTY2hlbWEgPSBhd2FpdCByZXNvbHZlT3V0cHV0U2NoZW1hKFxuICAgIG91dHB1dFNjaGVtYSxcbiAgICBydW5Bc1VzZXJcbiAgKTtcbiAgY29uc3Qgc2FuZGJveE1vZGUgPSBhd2FpdCBkZXRlcm1pbmVTYW5kYm94TW9kZSh7XG4gICAgc2FmZXR5U3RyYXRlZ3ksXG4gICAgcmVxdWVzdGVkU2FuZGJveDogc2FuZGJveCxcbiAgfSk7XG5cbiAgY29uc3QgY29tbWFuZDogQXJyYXk8c3RyaW5nPiA9IFtdO1xuXG4gIGxldCBwYXRoVG9Db2RleCA9IFwiY29kZXhcIjtcbiAgaWYgKHNhZmV0eVN0cmF0ZWd5ID09PSBcInVucHJpdmlsZWdlZC11c2VyXCIpIHtcbiAgICBpZiAoY29kZXhVc2VyID09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJjb2RleFVzZXIgbXVzdCBiZSBzcGVjaWZpZWQgd2hlbiB1c2luZyB0aGUgJ3VucHJpdmlsZWdlZC11c2VyJyBzYWZldHkgc3RyYXRlZ3kuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09IFwid2luMzJcIikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcInRoZSAndW5wcml2aWxlZ2VkLXVzZXInIHNhZmV0eSBzdHJhdGVneSBpcyBub3Qgc3VwcG9ydGVkIG9uIFdpbmRvd3MuXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gV2UgYXJlIGN1cnJlbnRseSBydW5uaW5nIGFzIGEgcHJpdmlsZWdlZCB1c2VyLCBidXQgYGNvZGV4VXNlcmAgd2lsbCBydW5cbiAgICAvLyB3aXRoIGEgZGlmZmVyZW50ICRQQVRIIHZhcmlhYmxlLCBzbyB3ZSBuZWVkIHRvIGZpbmQgdGhlIGZ1bGwgcGF0aCB0b1xuICAgIC8vIGBjb2RleGAuXG4gICAgcGF0aFRvQ29kZXggPSAoYXdhaXQgY2hlY2tPdXRwdXQoW1wid2hpY2hcIiwgXCJjb2RleFwiXSkpLnRyaW0oKTtcbiAgICBpZiAoIXBhdGhUb0NvZGV4KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJjb3VsZCBub3QgZmluZCAnY29kZXgnIGluIFBBVEhcIik7XG4gICAgfVxuXG4gICAgY29tbWFuZC5wdXNoKFwic3Vkb1wiLCBcIi11XCIsIGNvZGV4VXNlciwgXCItLVwiKTtcbiAgfVxuXG4gIGNvbW1hbmQucHVzaChcbiAgICBwYXRoVG9Db2RleCxcbiAgICBcImV4ZWNcIixcbiAgICBcIi0tc2tpcC1naXQtcmVwby1jaGVja1wiLFxuICAgIFwiLS1jZFwiLFxuICAgIGNkLFxuICAgIFwiLS1vdXRwdXQtbGFzdC1tZXNzYWdlXCIsXG4gICAgb3V0cHV0RmlsZS5maWxlXG4gICk7XG5cbiAgaWYgKHJlc29sdmVkT3V0cHV0U2NoZW1hICE9IG51bGwpIHtcbiAgICBjb21tYW5kLnB1c2goXCItLW91dHB1dC1zY2hlbWFcIiwgcmVzb2x2ZWRPdXRwdXRTY2hlbWEuZmlsZSk7XG4gIH1cblxuICBpZiAobW9kZWwgIT0gbnVsbCkge1xuICAgIGNvbW1hbmQucHVzaChcIi0tbW9kZWxcIiwgbW9kZWwpO1xuICB9XG5cbiAgaWYgKGVmZm9ydCAhPSBudWxsKSB7XG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL29wZW5haS9jb2RleC9ibG9iLzAwZGViYjYzOTllYjUxYzRiOTI3M2YwYmMwMTI5MTJjNDJmZTZjOTEvZG9jcy9jb25maWcubWQjY29uZmlnXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL29wZW5haS9jb2RleC9ibG9iLzAwZGViYjYzOTllYjUxYzRiOTI3M2YwYmMwMTI5MTJjNDJmZTZjOTEvZG9jcy9jb25maWcubWQjbW9kZWxfcmVhc29uaW5nX2VmZm9ydFxuICAgIGNvbW1hbmQucHVzaChcIi0tY29uZmlnXCIsIGBtb2RlbF9yZWFzb25pbmdfZWZmb3J0PVwiJHtlZmZvcnR9XCJgKTtcbiAgfVxuXG4gIGNvbW1hbmQucHVzaCguLi5leHRyYUFyZ3MpO1xuXG4gIGNvbW1hbmQucHVzaChcIi0tc2FuZGJveFwiLCBzYW5kYm94TW9kZSk7XG5cbiAgY29uc3QgZW52ID0geyAuLi5wcm9jZXNzLmVudiB9O1xuICBpZiAoIWVudi5DT0RFWF9JTlRFUk5BTF9PUklHSU5BVE9SX09WRVJSSURFKSB7XG4gICAgZW52LkNPREVYX0lOVEVSTkFMX09SSUdJTkFUT1JfT1ZFUlJJREUgPSBcImNvZGV4X2dpdGh1Yl9hY3Rpb25cIjtcbiAgfVxuICBsZXQgZXh0cmFFbnYgPSBcIlwiO1xuICBpZiAoY29kZXhIb21lICE9IG51bGwpIHtcbiAgICBlbnYuQ09ERVhfSE9NRSA9IGNvZGV4SG9tZTtcbiAgICBleHRyYUVudiA9IGBDT0RFWF9IT01FPSR7Y29kZXhIb21lfSBgO1xuICB9XG5cbiAgLy8gU3BsaXQgdGhlIGBwcm9ncmFtYCBmcm9tIHRoZSBgYXJnc2AgZm9yIGBzcGF3bigpYC5cbiAgY29uc3QgcHJvZ3JhbSA9IGNvbW1hbmQuc2hpZnQoKSE7XG4gIGNvbnNvbGUubG9nKFxuICAgIGBSdW5uaW5nOiAke2V4dHJhRW52fSR7cHJvZ3JhbX0gJHtjb21tYW5kXG4gICAgICAubWFwKChhKSA9PiBKU09OLnN0cmluZ2lmeShhKSlcbiAgICAgIC5qb2luKFwiIFwiKX1gXG4gICk7XG4gIHRyeSB7XG4gICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgY29uc3QgY2hpbGQgPSBzcGF3bihwcm9ncmFtLCBjb21tYW5kLCB7XG4gICAgICAgIGVudixcbiAgICAgICAgc3RkaW86IFtcInBpcGVcIiwgXCJpbmhlcml0XCIsIFwiaW5oZXJpdFwiXSxcbiAgICAgIH0pO1xuICAgICAgY2hpbGQuc3RkaW4ud3JpdGUoaW5wdXQpO1xuICAgICAgY2hpbGQuc3RkaW4uZW5kKCk7XG5cbiAgICAgIGNoaWxkLm9uKFwiZXJyb3JcIiwgcmVqZWN0KTtcblxuICAgICAgY2hpbGQub24oXCJjbG9zZVwiLCBhc3luYyAoY29kZSkgPT4ge1xuICAgICAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoYCR7cHJvZ3JhbX0gZXhpdGVkIHdpdGggY29kZSAke2NvZGV9YCkpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgYXdhaXQgZmluYWxpemVFeGVjdXRpb24ob3V0cHV0RmlsZSwgcnVuQXNVc2VyKTtcbiAgICAgICAgICByZXNvbHZlKHVuZGVmaW5lZCk7XG4gICAgICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgICAgIHJlamVjdChlcnIpO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBjbGVhbnVwT3V0cHV0U2NoZW1hKHJlc29sdmVkT3V0cHV0U2NoZW1hKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBmaW5hbGl6ZUV4ZWN1dGlvbihcbiAgb3V0cHV0RmlsZTogT3V0cHV0RmlsZSxcbiAgcnVuQXNVc2VyOiBzdHJpbmcgfCBudWxsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBsZXQgbGFzdE1lc3NhZ2U6IHN0cmluZztcbiAgICBpZiAocnVuQXNVc2VyID09IG51bGwpIHtcbiAgICAgIGxhc3RNZXNzYWdlID0gYXdhaXQgcmVhZEZpbGUob3V0cHV0RmlsZS5maWxlLCBcInV0ZjhcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxhc3RNZXNzYWdlID0gYXdhaXQgY2hlY2tPdXRwdXQoW1xuICAgICAgICBcInN1ZG9cIixcbiAgICAgICAgXCItdVwiLFxuICAgICAgICBydW5Bc1VzZXIsXG4gICAgICAgIFwiY2F0XCIsXG4gICAgICAgIG91dHB1dEZpbGUuZmlsZSxcbiAgICAgIF0pO1xuICAgIH1cbiAgICBzZXRPdXRwdXQoXCJmaW5hbC1tZXNzYWdlXCIsIGxhc3RNZXNzYWdlKTtcbiAgfSBmaW5hbGx5IHtcbiAgICBhd2FpdCBjbGVhbnVwVGVtcE91dHB1dChvdXRwdXRGaWxlLCBydW5Bc1VzZXIpO1xuICB9XG59XG5cbnR5cGUgT3V0cHV0RmlsZSA9XG4gIHwge1xuICAgICAgdHlwZTogXCJleHBsaWNpdFwiO1xuICAgICAgZmlsZTogc3RyaW5nO1xuICAgIH1cbiAgfCB7XG4gICAgICB0eXBlOiBcInRlbXBcIjtcbiAgICAgIGZpbGU6IHN0cmluZztcbiAgICB9O1xuXG50eXBlIFJlc29sdmVkT3V0cHV0U2NoZW1hID1cbiAgfCB7XG4gICAgICB0eXBlOiBcImV4cGxpY2l0XCI7XG4gICAgICBmaWxlOiBzdHJpbmc7XG4gICAgfVxuICB8IHtcbiAgICAgIHR5cGU6IFwidGVtcFwiO1xuICAgICAgZmlsZTogc3RyaW5nO1xuICAgICAgZGlyOiBzdHJpbmc7XG4gICAgfTtcblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlVGVtcE91dHB1dEZpbGUoe1xuICBydW5Bc1VzZXIsXG59OiB7XG4gIHJ1bkFzVXNlcjogc3RyaW5nIHwgbnVsbDtcbn0pOiBQcm9taXNlPE91dHB1dEZpbGU+IHtcbiAgY29uc3QgZGlyID0gYXdhaXQgY3JlYXRlVGVtcERpcihcImNvZGV4LWV4ZWMtXCIsIHJ1bkFzVXNlcik7XG4gIHJldHVybiB7IHR5cGU6IFwidGVtcFwiLCBmaWxlOiBwYXRoLmpvaW4oZGlyLCBcIm91dHB1dC5tZFwiKSB9O1xufVxuXG5hc3luYyBmdW5jdGlvbiBjbGVhbnVwVGVtcE91dHB1dChcbiAgb3V0cHV0RmlsZTogT3V0cHV0RmlsZSxcbiAgcnVuQXNVc2VyOiBzdHJpbmcgfCBudWxsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgc3dpdGNoIChvdXRwdXRGaWxlLnR5cGUpIHtcbiAgICBjYXNlIFwiZXhwbGljaXRcIjpcbiAgICAgIC8vIERvIG5vdCBkZWxldGUgdXNlci1zcGVjaWZpZWQgb3V0cHV0IGZpbGVzLlxuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgXCJ0ZW1wXCI6IHtcbiAgICAgIGNvbnN0IHsgZmlsZSB9ID0gb3V0cHV0RmlsZTtcbiAgICAgIGlmIChydW5Bc1VzZXIgPT0gbnVsbCkge1xuICAgICAgICBjb25zdCBkaXIgPSBwYXRoLmRpcm5hbWUoZmlsZSk7XG4gICAgICAgIGF3YWl0IHJtKGRpciwgeyByZWN1cnNpdmU6IHRydWUsIGZvcmNlOiB0cnVlIH0pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgY2hlY2tPdXRwdXQoW1wic3Vkb1wiLCBcInJtXCIsIFwiLXJmXCIsIHBhdGguZGlybmFtZShmaWxlKV0pO1xuICAgICAgfVxuICAgICAgYnJlYWs7XG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJlc29sdmVPdXRwdXRTY2hlbWEoXG4gIHNjaGVtYTogT3V0cHV0U2NoZW1hU291cmNlIHwgbnVsbCxcbiAgcnVuQXNVc2VyOiBzdHJpbmcgfCBudWxsXG4pOiBQcm9taXNlPFJlc29sdmVkT3V0cHV0U2NoZW1hIHwgbnVsbD4ge1xuICBpZiAoc2NoZW1hID09IG51bGwpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHN3aXRjaCAoc2NoZW1hLnR5cGUpIHtcbiAgICBjYXNlIFwiZmlsZVwiOlxuICAgICAgcmV0dXJuIHsgdHlwZTogXCJleHBsaWNpdFwiLCBmaWxlOiBzY2hlbWEucGF0aCB9O1xuICAgIGNhc2UgXCJpbmxpbmVcIjoge1xuICAgICAgY29uc3QgZGlyID0gYXdhaXQgY3JlYXRlVGVtcERpcihcImNvZGV4LW91dHB1dC1zY2hlbWEtXCIsIHJ1bkFzVXNlcik7XG4gICAgICBjb25zdCBmaWxlID0gcGF0aC5qb2luKGRpciwgXCJzY2hlbWEuanNvblwiKTtcbiAgICAgIGF3YWl0IHdyaXRlRmlsZShmaWxlLCBzY2hlbWEuY29udGVudCk7XG4gICAgICByZXR1cm4geyB0eXBlOiBcInRlbXBcIiwgZmlsZSwgZGlyIH07XG4gICAgfVxuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNsZWFudXBPdXRwdXRTY2hlbWEoXG4gIHNjaGVtYTogUmVzb2x2ZWRPdXRwdXRTY2hlbWEgfCBudWxsXG4pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKHNjaGVtYSA9PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3dpdGNoIChzY2hlbWEudHlwZSkge1xuICAgIGNhc2UgXCJleHBsaWNpdFwiOlxuICAgICAgcmV0dXJuO1xuICAgIGNhc2UgXCJ0ZW1wXCI6XG4gICAgICBhd2FpdCBybShzY2hlbWEuZGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgICByZXR1cm47XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gY3JlYXRlVGVtcERpcihcbiAgcHJlZml4OiBzdHJpbmcsXG4gIHJ1bkFzVXNlcjogc3RyaW5nIHwgbnVsbFxuKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgaWYgKHJ1bkFzVXNlciA9PSBudWxsKSB7XG4gICAgcmV0dXJuIGF3YWl0IG1rZHRlbXAocGF0aC5qb2luKG9zLnRtcGRpcigpLCBwcmVmaXgpKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gKFxuICAgICAgYXdhaXQgY2hlY2tPdXRwdXQoW1xuICAgICAgICBcInN1ZG9cIixcbiAgICAgICAgXCItdVwiLFxuICAgICAgICBydW5Bc1VzZXIsXG4gICAgICAgIFwibWt0ZW1wXCIsXG4gICAgICAgIFwiLWRcIixcbiAgICAgICAgXCItdFwiLFxuICAgICAgICBgJHtwcmVmaXh9LlhYWFhYWGAsXG4gICAgICBdKVxuICAgICkudHJpbSgpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRldGVybWluZVNhbmRib3hNb2RlKHtcbiAgc2FmZXR5U3RyYXRlZ3ksXG4gIHJlcXVlc3RlZFNhbmRib3gsXG59OiB7XG4gIHNhZmV0eVN0cmF0ZWd5OiBTYWZldHlTdHJhdGVneTtcbiAgcmVxdWVzdGVkU2FuZGJveDogU2FuZGJveE1vZGU7XG59KTogUHJvbWlzZTxTYW5kYm94TW9kZT4ge1xuICBpZiAoc2FmZXR5U3RyYXRlZ3kgPT09IFwicmVhZC1vbmx5XCIpIHtcbiAgICByZXR1cm4gXCJyZWFkLW9ubHlcIjtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcmVxdWVzdGVkU2FuZGJveDtcbiAgfVxufVxuIiwgImltcG9ydCB7IHNwYXduIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrT3V0cHV0KGNvbW1hbmQ6IEFycmF5PHN0cmluZz4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBbcHJvZywgLi4uYXJnc10gPSBjb21tYW5kO1xuICByZXR1cm4gbmV3IFByb21pc2U8c3RyaW5nPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgcHJvYyA9IHNwYXduKHByb2csIGFyZ3MsIHtcbiAgICAgIGVudjogcHJvY2Vzcy5lbnYsXG4gICAgICBzdGRpbzogW1wiaWdub3JlXCIsIFwicGlwZVwiLCBcImluaGVyaXRcIl0sXG4gICAgfSk7XG5cbiAgICBwcm9jLm9uKFwiZXJyb3JcIiwgcmVqZWN0KTtcblxuICAgIGxldCBvdXRwdXQgPSBcIlwiO1xuICAgIHByb2Muc3Rkb3V0Lm9uKFwiZGF0YVwiLCAoY2h1bmspID0+IHtcbiAgICAgIG91dHB1dCArPSBjaHVuay50b1N0cmluZygpO1xuICAgIH0pO1xuXG4gICAgcHJvYy5vbihcImNsb3NlXCIsIChjb2RlKSA9PiB7XG4gICAgICBpZiAoY29kZSAhPT0gMCkge1xuICAgICAgICByZWplY3QobmV3IEVycm9yKGAke3Byb2d9IGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfWApKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICByZXNvbHZlKG91dHB1dCk7XG4gICAgfSk7XG4gIH0pO1xufVxuIiwgImltcG9ydCB7IHNwYXduIH0gZnJvbSBcIm5vZGU6Y2hpbGRfcHJvY2Vzc1wiO1xuaW1wb3J0IHsgcHJvbWlzZXMgYXMgZnMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5cbmludGVyZmFjZSBFeGVjT3B0aW9ucyB7XG4gIGNhcHR1cmU/OiBib29sZWFuO1xuICBpZ25vcmVGYWlsdXJlPzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIEV4ZWNSZXN1bHQge1xuICBjb2RlOiBudW1iZXI7XG4gIHN0ZG91dDogc3RyaW5nO1xuICBzdGRlcnI6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEcm9wU3Vkb09wdGlvbnMge1xuICB1c2VyOiBzdHJpbmc7XG4gIGdyb3VwOiBzdHJpbmc7XG4gIHJvb3RQaGFzZTogYm9vbGVhbjtcbn1cblxuY29uc3QgTElOVVhfUExBVEZPUk0gPSBcImxpbnV4XCI7XG5jb25zdCBNQUNPU19QTEFURk9STSA9IFwiZGFyd2luXCI7XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkcm9wU3VkbyhvcHRpb25zOiBEcm9wU3Vkb09wdGlvbnMpOiBQcm9taXNlPHZvaWQ+IHtcbiAgY29uc3QgcGxhdGZvcm0gPSBwcm9jZXNzLnBsYXRmb3JtO1xuICBpZiAoIVtMSU5VWF9QTEFURk9STSwgTUFDT1NfUExBVEZPUk1dLmluY2x1ZGVzKHBsYXRmb3JtKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBVbnN1cHBvcnRlZCBPUyBmb3IgZHJvcC1zdWRvIHNhZmV0eSBzdHJhdGVneTogJHtwbGF0Zm9ybX1gXG4gICAgKTtcbiAgfVxuXG4gIGNvbnN0IHsgcm9vdFBoYXNlIH0gPSBvcHRpb25zO1xuICBpZiAocm9vdFBoYXNlKSB7XG4gICAgYXdhaXQgZHJvcFN1ZG9XaXRoUHJpdmlsZWdlcyhvcHRpb25zKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBhd2FpdCBlbnN1cmVQYXNzd29yZGxlc3NTdWRvKCk7XG4gIC8vIGBzdWRvIC1LYCBpbnZhbGlkYXRlcyBjYWNoZWQgY3JlZGVudGlhbHMgYnV0IGV4aXRzIG5vbi16ZXJvIHdoZW4gbm8gdGlja2V0XG4gIC8vIGV4aXN0cyB5ZXQuIElnbm9yZSB0aGF0IGZhaWx1cmUgc28gZnJlc2ggcnVubmVycyBkb24ndCBibG93IHVwLlxuICBhd2FpdCBleGVjQ29tbWFuZChcInN1ZG9cIiwgW1wiLUtcIl0sIHsgaWdub3JlRmFpbHVyZTogdHJ1ZSB9KTtcblxuICBjb25zdCBleGVjQXJncyA9IFsuLi5wcm9jZXNzLmV4ZWNBcmd2XTtcbiAgY29uc3Qgc2NyaXB0UGF0aCA9IHByb2Nlc3MuYXJndlsxXTtcbiAgLy8gUmUtZW50ZXIgdGhpcyBjb21tYW5kIHVuZGVyIHN1ZG8gc28gdGhlIHByaXZpbGVnZS1kcm9wcGluZyB3b3JrIGhhcHBlbnMgaW4gYVxuICAvLyBzaW5nbGUgcGxhY2UgcmVnYXJkbGVzcyBvZiB0aGUgaG9zdCBwbGF0Zm9ybS5cbiAgYXdhaXQgZXhlY0NvbW1hbmQoXCJzdWRvXCIsIFtcbiAgICBcIi1uXCIsXG4gICAgXCJub2RlXCIsXG4gICAgLi4uZXhlY0FyZ3MsXG4gICAgc2NyaXB0UGF0aCxcbiAgICBcImRyb3Atc3Vkb1wiLFxuICAgIFwiLS1yb290LXBoYXNlXCIsXG4gICAgXCItLXVzZXJcIixcbiAgICBvcHRpb25zLnVzZXIsXG4gICAgXCItLWdyb3VwXCIsXG4gICAgb3B0aW9ucy5ncm91cCxcbiAgXSk7XG5cbiAgLy8gSW52YWxpZGF0ZSB0aGUgc3VkbyB0aWNrZXQgYWdhaW47IGlnbm9yZSBmYWlsdXJlcyBmb3IgdGhlIHNhbWUgcmVhc29uIGFzXG4gIC8vIGFib3ZlIChzb21lIGVudmlyb25tZW50cyByZXR1cm4gYW4gZXJyb3Igd2hlbiBubyB0aW1lc3RhbXAgZXhpc3RzKS5cbiAgYXdhaXQgZXhlY0NvbW1hbmQoXCJzdWRvXCIsIFtcIi1LXCJdLCB7IGlnbm9yZUZhaWx1cmU6IHRydWUgfSk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGRyb3BTdWRvV2l0aFByaXZpbGVnZXMob3B0aW9uczogRHJvcFN1ZG9PcHRpb25zKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICh0eXBlb2YgcHJvY2Vzcy5nZXR1aWQgPT09IFwiZnVuY3Rpb25cIiAmJiBwcm9jZXNzLmdldHVpZCgpICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiZHJvcC1zdWRvIHJvb3QgcGhhc2UgbXVzdCBydW4gYXMgcm9vdC5cIik7XG4gIH1cblxuICBsZXQgY2hhbmdlZCA9IGZhbHNlO1xuXG4gIHN3aXRjaCAocHJvY2Vzcy5wbGF0Zm9ybSkge1xuICAgIGNhc2UgTElOVVhfUExBVEZPUk06IHtcbiAgICAgIGlmIChhd2FpdCBpc1VzZXJJbkdyb3VwKG9wdGlvbnMudXNlciwgb3B0aW9ucy5ncm91cCkpIHtcbiAgICAgICAgaWYgKGF3YWl0IGNvbW1hbmRFeGlzdHMoXCJkZWx1c2VyXCIpKSB7XG4gICAgICAgICAgYXdhaXQgZXhlY0NvbW1hbmQoXCJkZWx1c2VyXCIsIFtvcHRpb25zLnVzZXIsIG9wdGlvbnMuZ3JvdXBdKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICAgIGBVc2VkICdkZWx1c2VyICR7b3B0aW9ucy51c2VyfSAke29wdGlvbnMuZ3JvdXB9JyB0byBkcm9wIHN1ZG8gcHJpdmlsZWdlLmBcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGF3YWl0IGNvbW1hbmRFeGlzdHMoXCJncGFzc3dkXCIpKSB7XG4gICAgICAgICAgYXdhaXQgZXhlY0NvbW1hbmQoXCJncGFzc3dkXCIsIFtcIi1kXCIsIG9wdGlvbnMudXNlciwgb3B0aW9ucy5ncm91cF0pO1xuICAgICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgICAgYFVzZWQgJ2dwYXNzd2QgLWQgJHtvcHRpb25zLnVzZXJ9ICR7b3B0aW9ucy5ncm91cH0nIHRvIGRyb3Agc3VkbyBwcml2aWxlZ2UuYFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiTmVpdGhlciBkZWx1c2VyIG5vciBncGFzc3dkIGF2YWlsYWJsZS5cIik7XG4gICAgICAgIH1cbiAgICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zb2xlLmxvZyhcbiAgICAgICAgICBgJHtvcHRpb25zLnVzZXJ9IGlzIG5vdCBhIG1lbWJlciBvZiB0aGUgJHtvcHRpb25zLmdyb3VwfSBncm91cC5gXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBicmVhaztcbiAgICB9XG4gICAgY2FzZSBNQUNPU19QTEFURk9STToge1xuICAgICAgaWYgKGF3YWl0IGlzVXNlckluR3JvdXAob3B0aW9ucy51c2VyLCBvcHRpb25zLmdyb3VwKSkge1xuICAgICAgICBhd2FpdCBleGVjQ29tbWFuZChcImRzZWRpdGdyb3VwXCIsIFtcbiAgICAgICAgICBcIi1vXCIsXG4gICAgICAgICAgXCJlZGl0XCIsXG4gICAgICAgICAgXCItZFwiLFxuICAgICAgICAgIG9wdGlvbnMudXNlcixcbiAgICAgICAgICBcIi10XCIsXG4gICAgICAgICAgXCJ1c2VyXCIsXG4gICAgICAgICAgb3B0aW9ucy5ncm91cCxcbiAgICAgICAgXSk7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGBVc2VkICdkc2VkaXRncm91cCAtbyBlZGl0IC1kICR7b3B0aW9ucy51c2VyfSAtdCB1c2VyICR7b3B0aW9ucy5ncm91cH0nIHRvIGRyb3Agc3VkbyBwcml2aWxlZ2UuYFxuICAgICAgICApO1xuICAgICAgICBjaGFuZ2VkID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnNvbGUubG9nKFxuICAgICAgICAgIGAke29wdGlvbnMudXNlcn0gaXMgbm90IGEgbWVtYmVyIG9mIHRoZSAke29wdGlvbnMuZ3JvdXB9IGdyb3VwLmBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBVbnN1cHBvcnRlZCBPUyBmb3IgZHJvcC1zdWRvIHNhZmV0eSBzdHJhdGVneTogJHtwcm9jZXNzLnBsYXRmb3JtfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgY29uc3QgbWVzc2FnZXMgPSBhd2FpdCByZW1vdmVVc2VyRnJvbVN1ZG9lcnNEKG9wdGlvbnMudXNlcik7XG4gIGlmIChtZXNzYWdlcy5sZW5ndGggPiAwKSB7XG4gICAgZm9yIChjb25zdCBtZXNzYWdlIG9mIG1lc3NhZ2VzKSB7XG4gICAgICBjb25zb2xlLmxvZyhtZXNzYWdlKTtcbiAgICB9XG4gICAgY2hhbmdlZCA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgTm8gJHtvcHRpb25zLnVzZXJ9IGVudHJpZXMgZm91bmQgaW4gL2V0Yy9zdWRvZXJzLmQgcmVxdWlyaW5nIGNoYW5nZXMuYFxuICAgICk7XG4gIH1cblxuICBjb25zdCBzdWRvZXJzTWVzc2FnZSA9IGF3YWl0IHN0cmlwVXNlckVudHJpZXNGcm9tRmlsZShcbiAgICBcIi9ldGMvc3Vkb2Vyc1wiLFxuICAgIG9wdGlvbnMudXNlclxuICApO1xuICBpZiAoc3Vkb2Vyc01lc3NhZ2UpIHtcbiAgICBjb25zb2xlLmxvZyhzdWRvZXJzTWVzc2FnZSk7XG4gICAgY2hhbmdlZCA9IHRydWU7XG4gIH0gZWxzZSB7XG4gICAgY29uc29sZS5sb2coXG4gICAgICBgTm8gJHtvcHRpb25zLnVzZXJ9IGVudHJpZXMgZm91bmQgaW4gL2V0Yy9zdWRvZXJzIHJlcXVpcmluZyBjaGFuZ2VzLmBcbiAgICApO1xuICB9XG5cbiAgaWYgKCFjaGFuZ2VkKSB7XG4gICAgY29uc29sZS5sb2coYCR7b3B0aW9ucy51c2VyfSBhbHJlYWR5IGxhY2tzIHN1ZG8gcHJpdmlsZWdlcy5gKTtcbiAgfVxuXG4gIGNvbnN0IGdyb3Vwc0FmdGVyID0gYXdhaXQgZXhlY0NvbW1hbmQoXCJpZFwiLCBbXCItR25cIiwgb3B0aW9ucy51c2VyXSwge1xuICAgIGNhcHR1cmU6IHRydWUsXG4gIH0pO1xuICBjb25zb2xlLmxvZyhcbiAgICBgR3JvdXBzIGZvciAke29wdGlvbnMudXNlcn0gYWZ0ZXIgY2xlYW51cDogJHtncm91cHNBZnRlci5zdGRvdXQudHJpbSgpfWBcbiAgKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZW5zdXJlUGFzc3dvcmRsZXNzU3VkbygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBleGVjQ29tbWFuZChcInN1ZG9cIiwgW1wiLW5cIiwgXCJ0cnVlXCJdLCB7IGNhcHR1cmU6IHRydWUgfSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiVW5leHBlY3RlZDogcGFzc3dvcmRsZXNzIHN1ZG8gbm90IGF2YWlsYWJsZS5cIik7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gaXNVc2VySW5Hcm91cCh1c2VyOiBzdHJpbmcsIGdyb3VwOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY0NvbW1hbmQoXCJpZFwiLCBbXCItbkdcIiwgdXNlcl0sIHtcbiAgICBjYXB0dXJlOiB0cnVlLFxuICAgIGlnbm9yZUZhaWx1cmU6IHRydWUsXG4gIH0pO1xuICBpZiAocmVzdWx0LmNvZGUgIT09IDApIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cbiAgY29uc3QgZ3JvdXBzID0gcmVzdWx0LnN0ZG91dFxuICAgIC50cmltKClcbiAgICAuc3BsaXQoL1xccysvKVxuICAgIC5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZS5sZW5ndGggPiAwKTtcbiAgcmV0dXJuIGdyb3Vwcy5pbmNsdWRlcyhncm91cCk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIGNvbW1hbmRFeGlzdHMoYmluYXJ5OiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZXhlY0NvbW1hbmQoXCJzaFwiLCBbXCItY1wiLCBgY29tbWFuZCAtdiAke2JpbmFyeX1gXSwge1xuICAgIGNhcHR1cmU6IHRydWUsXG4gICAgaWdub3JlRmFpbHVyZTogdHJ1ZSxcbiAgfSk7XG4gIHJldHVybiByZXN1bHQuY29kZSA9PT0gMDtcbn1cblxuLyoqXG4gKiBTdHJpcHMgbm9uLWNvbW1lbnQgZW50cmllcyBncmFudGluZyBzdWRvIHRvIGB1c2VyYCBhY3Jvc3MgYC9ldGMvc3Vkb2Vycy5kYFxuICogZmlsZXMuXG4gKlxuICogU3RyYXRlZ3k6XG4gKiAgIC0gZW51bWVyYXRlIHJlZ3VsYXIgZmlsZXMgdW5kZXIgYC9ldGMvc3Vkb2Vycy5kYFxuICogICAtIHJlbW92ZSBsaW5lcyB3aG9zZSBmaXJzdCB0b2tlbiBtYXRjaGVzIHRoZSB0YXJnZXQgdXNlciB3aGlsZSBrZWVwaW5nXG4gKiAgICAgY29tbWVudHMvYmxhbmsgbGluZXMgaW50YWN0XG4gKiAgIC0gcmV3cml0ZSBmaWxlcyBpbi1wbGFjZSB3aXRoIG9yaWdpbmFsIG5ld2xpbmUgc3R5bGUgYW5kIHBlcm1pc3Npb25zXG4gKiAgIC0gcmVwb3J0IHdoaWNoIGZpbGVzIHdlcmUgY2hhbmdlZCBzbyBjYWxsZXJzIGNhbiBzdXJmYWNlIHVzZWZ1bCBsb2dzXG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlbW92ZVVzZXJGcm9tU3Vkb2Vyc0QodXNlcjogc3RyaW5nKTogUHJvbWlzZTxBcnJheTxzdHJpbmc+PiB7XG4gIGNvbnN0IHN1ZG9lcnNEaXIgPSBcIi9ldGMvc3Vkb2Vycy5kXCI7XG4gIGxldCBlbnRyaWVzOiBBcnJheTxzdHJpbmc+ID0gW107XG4gIHRyeSB7XG4gICAgY29uc3QgZGlyRW50cmllcyA9IGF3YWl0IGZzLnJlYWRkaXIoc3Vkb2Vyc0RpciwgeyB3aXRoRmlsZVR5cGVzOiB0cnVlIH0pO1xuICAgIGVudHJpZXMgPSBkaXJFbnRyaWVzXG4gICAgICAuZmlsdGVyKChkaXJlbnQpID0+IGRpcmVudC5pc0ZpbGUoKSlcbiAgICAgIC5tYXAoKGRpcmVudCkgPT4gcGF0aC5qb2luKHN1ZG9lcnNEaXIsIGRpcmVudC5uYW1lKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgaWYgKChlcnJvciBhcyBOb2RlSlMuRXJybm9FeGNlcHRpb24pLmNvZGUgPT09IFwiRU5PRU5UXCIpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgdGhyb3cgZXJyb3I7XG4gIH1cblxuICBjb25zdCBtZXNzYWdlczogQXJyYXk8c3RyaW5nPiA9IFtdO1xuXG4gIGZvciAoY29uc3QgZW50cnlQYXRoIG9mIGVudHJpZXMpIHtcbiAgICBjb25zdCBtZXNzYWdlID0gYXdhaXQgc3RyaXBVc2VyRW50cmllc0Zyb21GaWxlKGVudHJ5UGF0aCwgdXNlcik7XG4gICAgaWYgKG1lc3NhZ2UpIHtcbiAgICAgIG1lc3NhZ2VzLnB1c2gobWVzc2FnZSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG1lc3NhZ2VzO1xufVxuXG5hc3luYyBmdW5jdGlvbiBzdHJpcFVzZXJFbnRyaWVzRnJvbUZpbGUoXG4gIGZpbGVQYXRoOiBzdHJpbmcsXG4gIHVzZXI6IHN0cmluZ1xuKTogUHJvbWlzZTxzdHJpbmcgfCBudWxsPiB7XG4gIGxldCBzdGF0cztcbiAgbGV0IG9yaWdpbmFsOiBzdHJpbmc7XG4gIHRyeSB7XG4gICAgc3RhdHMgPSBhd2FpdCBmcy5zdGF0KGZpbGVQYXRoKTtcbiAgICBvcmlnaW5hbCA9IGF3YWl0IGZzLnJlYWRGaWxlKGZpbGVQYXRoLCBcInV0ZjhcIik7XG4gIH0gY2F0Y2gge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgY29uc3QgbmV3bGluZSA9IG9yaWdpbmFsLmluY2x1ZGVzKFwiXFxyXFxuXCIpID8gXCJcXHJcXG5cIiA6IFwiXFxuXCI7XG4gIGNvbnN0IGVuZHNXaXRoTmV3bGluZSA9XG4gICAgb3JpZ2luYWwuZW5kc1dpdGgoXCJcXG5cIikgfHwgb3JpZ2luYWwuZW5kc1dpdGgoXCJcXHJcXG5cIik7XG4gIGNvbnN0IHJhd0xpbmVzID0gb3JpZ2luYWwuc3BsaXQoL1xccj9cXG4vKTtcbiAgaWYgKHJhd0xpbmVzLmxlbmd0aCA+IDAgJiYgcmF3TGluZXNbcmF3TGluZXMubGVuZ3RoIC0gMV0gPT09IFwiXCIpIHtcbiAgICByYXdMaW5lcy5wb3AoKTtcbiAgfVxuXG4gIGNvbnN0IGZpbHRlcmVkTGluZXM6IEFycmF5PHN0cmluZz4gPSBbXTtcbiAgbGV0IGNoYW5nZWQgPSBmYWxzZTtcblxuICBmb3IgKGNvbnN0IGxpbmUgb2YgcmF3TGluZXMpIHtcbiAgICBjb25zdCB0cmltbWVkTGVhZGluZyA9IGxpbmUudHJpbVN0YXJ0KCk7XG4gICAgaWYgKHRyaW1tZWRMZWFkaW5nLnN0YXJ0c1dpdGgoXCIjXCIpKSB7XG4gICAgICBmaWx0ZXJlZExpbmVzLnB1c2gobGluZSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgaWYgKHRyaW1tZWRMZWFkaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZmlsdGVyZWRMaW5lcy5wdXNoKGxpbmUpO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IHRva2VucyA9IHRyaW1tZWRMZWFkaW5nLnNwbGl0KC9cXHMrLyk7XG4gICAgaWYgKHRva2Vuc1swXSA9PT0gdXNlcikge1xuICAgICAgY2hhbmdlZCA9IHRydWU7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgZmlsdGVyZWRMaW5lcy5wdXNoKGxpbmUpO1xuICB9XG5cbiAgaWYgKCFjaGFuZ2VkKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBjb25zdCByZWJ1aWx0ID0gZmlsdGVyZWRMaW5lcy5qb2luKG5ld2xpbmUpICsgKGVuZHNXaXRoTmV3bGluZSA/IG5ld2xpbmUgOiBcIlwiKTtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoZmlsZVBhdGgsIHJlYnVpbHQsIFwidXRmOFwiKTtcbiAgICBhd2FpdCBmcy5jaG1vZChmaWxlUGF0aCwgc3RhdHMubW9kZSAmIDBvNzc3KTtcbiAgfSBjYXRjaCB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICByZXR1cm4gYFJlbW92ZWQgJHt1c2VyfSBlbnRyeSBmcm9tICR7ZmlsZVBhdGh9YDtcbn1cblxuYXN5bmMgZnVuY3Rpb24gZXhlY0NvbW1hbmQoXG4gIGNvbW1hbmQ6IHN0cmluZyxcbiAgYXJnczogQXJyYXk8c3RyaW5nPixcbiAgb3B0aW9uczogRXhlY09wdGlvbnMgPSB7fVxuKTogUHJvbWlzZTxFeGVjUmVzdWx0PiB7XG4gIGNvbnN0IGNhcHR1cmUgPSBvcHRpb25zLmNhcHR1cmUgPz8gZmFsc2U7XG4gIGNvbnN0IGNoaWxkID0gc3Bhd24oY29tbWFuZCwgYXJncywge1xuICAgIHN0ZGlvOiBjYXB0dXJlID8gW1wiaWdub3JlXCIsIFwicGlwZVwiLCBcInBpcGVcIl0gOiBcImluaGVyaXRcIixcbiAgfSk7XG5cbiAgbGV0IHN0ZG91dCA9IFwiXCI7XG4gIGxldCBzdGRlcnIgPSBcIlwiO1xuXG4gIGlmIChjYXB0dXJlICYmIGNoaWxkLnN0ZG91dCkge1xuICAgIGNoaWxkLnN0ZG91dC5zZXRFbmNvZGluZyhcInV0ZjhcIik7XG4gICAgY2hpbGQuc3Rkb3V0Lm9uKFwiZGF0YVwiLCAoY2h1bmspID0+IHtcbiAgICAgIHN0ZG91dCArPSBjaHVuaztcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChjYXB0dXJlICYmIGNoaWxkLnN0ZGVycikge1xuICAgIGNoaWxkLnN0ZGVyci5zZXRFbmNvZGluZyhcInV0ZjhcIik7XG4gICAgY2hpbGQuc3RkZXJyLm9uKFwiZGF0YVwiLCAoY2h1bmspID0+IHtcbiAgICAgIHN0ZGVyciArPSBjaHVuaztcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBhd2FpdCBuZXcgUHJvbWlzZTxFeGVjUmVzdWx0PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY2hpbGQub24oXCJlcnJvclwiLCAoZXJyb3IpID0+IHtcbiAgICAgIHJlamVjdChlcnJvcik7XG4gICAgfSk7XG5cbiAgICBjaGlsZC5vbihcImNsb3NlXCIsIChjb2RlKSA9PiB7XG4gICAgICBjb25zdCBleGl0Q29kZSA9IGNvZGUgPz8gMDtcbiAgICAgIGlmIChleGl0Q29kZSAhPT0gMCAmJiAhb3B0aW9ucy5pZ25vcmVGYWlsdXJlKSB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKFxuICAgICAgICAgIGBDb21tYW5kIGZhaWxlZDogJHtjb21tYW5kfSAke2FyZ3Muam9pbihcIiBcIil9IChleGl0IGNvZGUgJHtleGl0Q29kZX0pYFxuICAgICAgICApO1xuICAgICAgICAoZXJyb3IgYXMgRXhlY0Vycm9yKS5jb2RlID0gZXhpdENvZGU7XG4gICAgICAgIChlcnJvciBhcyBFeGVjRXJyb3IpLnN0ZG91dCA9IHN0ZG91dDtcbiAgICAgICAgKGVycm9yIGFzIEV4ZWNFcnJvcikuc3RkZXJyID0gc3RkZXJyO1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICByZXNvbHZlKHsgY29kZTogZXhpdENvZGUsIHN0ZG91dCwgc3RkZXJyIH0pO1xuICAgIH0pO1xuICB9KTtcbn1cblxuaW50ZXJmYWNlIEV4ZWNFcnJvciBleHRlbmRzIEVycm9yIHtcbiAgY29kZTogbnVtYmVyO1xuICBzdGRvdXQ6IHN0cmluZztcbiAgc3RkZXJyOiBzdHJpbmc7XG59XG4iLCAiaW1wb3J0ICogYXMgY29yZSBmcm9tIFwiQGFjdGlvbnMvY29yZVwiO1xuaW1wb3J0IHsgT2N0b2tpdCB9IGZyb20gXCJAb2N0b2tpdC9yZXN0XCI7XG5cbmV4cG9ydCB0eXBlIFdyaXRlQWNjZXNzQ2hlY2sgPVxuICB8IHtcbiAgICAgIHN0YXR1czogXCJhcHByb3ZlZFwiO1xuICAgICAgYWN0b3I6IHN0cmluZztcbiAgICB9XG4gIHwge1xuICAgICAgc3RhdHVzOiBcInJlamVjdGVkXCI7XG4gICAgICBhY3Rvcjogc3RyaW5nO1xuICAgICAgcmVhc29uOiBzdHJpbmc7XG4gICAgfTtcblxudHlwZSBFbnN1cmVXcml0ZUFjY2Vzc09wdGlvbnMgPSB7XG4gIG9jdG9raXQ/OiBPY3Rva2l0O1xuICB0b2tlbj86IHN0cmluZztcbiAgYWN0b3I/OiBzdHJpbmc7XG4gIHJlcG9zaXRvcnk/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBXaGVuIHRydWUgKGRlZmF1bHQpLCBib3QgYWN0b3JzIHN1Y2ggYXMgZGVwZW5kYWJvdCBhcmUgYWxsb3dlZCB3aXRob3V0XG4gICAqIGNoZWNraW5nIGNvbGxhYm9yYXRvciBwZXJtaXNzaW9ucy4gU2V0IHRvIGZhbHNlIHRvIHJlcXVpcmUgYm90cyB0byBwYXNzIHRoZVxuICAgKiBzYW1lIGNoZWNrcyBhcyBodW1hbiB1c2Vycy5cbiAgICovXG4gIGFsbG93Qm90QWN0b3JzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIENvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGFsbG93ZWQgR2l0SHViIHVzZXJuYW1lcyBvciAnKicgdG8gYWxsb3cgYWxsIHVzZXJzLlxuICAgKiBDYXNlLWluc2Vuc2l0aXZlOyBlbXB0eSBzdHJpbmcgb3IgdW5kZWZpbmVkIGRpc2FibGVzIHRoaXMgb3ZlcnJpZGUuXG4gICAqL1xuICBhbGxvd1VzZXJzPzogc3RyaW5nO1xufTtcblxuLyoqXG4gKiBDaGVja3MgdGhhdCB0aGUgR2l0SHViIGFjdG9yIHdoaWNoIHRyaWdnZXJlZCB0aGUgY3VycmVudCB3b3JrZmxvdyBoYXMgd3JpdGVcbiAqIGFjY2VzcyB0byB0aGUgcmVwb3NpdG9yeS5cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGVuc3VyZUFjdG9ySGFzV3JpdGVBY2Nlc3MoXG4gIG9wdGlvbnM6IEVuc3VyZVdyaXRlQWNjZXNzT3B0aW9ucyA9IHt9LFxuKTogUHJvbWlzZTxXcml0ZUFjY2Vzc0NoZWNrPiB7XG4gIGNvbnN0IGFjdG9yID0gb3B0aW9ucy5hY3RvciA/PyBwcm9jZXNzLmVudi5HSVRIVUJfQUNUT1I7XG4gIGNvbnN0IHJlcG9zaXRvcnkgPSBvcHRpb25zLnJlcG9zaXRvcnkgPz8gcHJvY2Vzcy5lbnYuR0lUSFVCX1JFUE9TSVRPUlk7XG4gIGNvbnN0IGFsbG93Qm90QWN0b3JzID0gb3B0aW9ucy5hbGxvd0JvdEFjdG9ycyA/PyB0cnVlO1xuXG4gIGlmICghYWN0b3IgfHwgYWN0b3IudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IFwicmVqZWN0ZWRcIixcbiAgICAgIGFjdG9yOiBhY3RvciA/PyBcIjx1bmtub3duPlwiLFxuICAgICAgcmVhc29uOiBcIkdJVEhVQl9BQ1RPUiBpcyBub3Qgc2V0OyBjYW5ub3QgZGV0ZXJtaW5lIHRyaWdnZXJpbmcgdXNlci5cIixcbiAgICB9O1xuICB9XG5cbiAgaWYgKCFyZXBvc2l0b3J5IHx8IHJlcG9zaXRvcnkudHJpbSgpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IFwicmVqZWN0ZWRcIixcbiAgICAgIGFjdG9yLFxuICAgICAgcmVhc29uOiBcIkdJVEhVQl9SRVBPU0lUT1JZIGlzIG5vdCBzZXQ7IGNhbm5vdCBkZXRlcm1pbmUgdGFyZ2V0IHJlcG9zaXRvcnkuXCIsXG4gICAgfTtcbiAgfVxuXG4gIGNvbnN0IFtvd25lciwgcmVwb10gPSByZXBvc2l0b3J5LnNwbGl0KFwiL1wiKTtcbiAgaWYgKCFvd25lciB8fCAhcmVwbykge1xuICAgIHJldHVybiB7XG4gICAgICBzdGF0dXM6IFwicmVqZWN0ZWRcIixcbiAgICAgIGFjdG9yLFxuICAgICAgcmVhc29uOiBgR0lUSFVCX1JFUE9TSVRPUlkgbXVzdCBiZSBpbiB0aGUgZm9ybWF0ICdvd25lci9yZXBvJywgcmVjZWl2ZWQ6ICcke3JlcG9zaXRvcnl9Jy5gLFxuICAgIH07XG4gIH1cblxuICAvLyBHaXRIdWItYnVpbHQgd29ya2Zsb3dzIChlLmcuIGRlcGVuZGFib3QsIGdpdGh1Yi1hY3Rpb25zW2JvdF0pIGRvIG5vdCBoYXZlIGFcbiAgLy8gbWVhbmluZ2Z1bCB3cml0ZSBwZXJtaXNzaW9uIGNvbmNlcHQuIFRoZXkgaW1wbGljaXRseSBydW4gd2l0aCB0aGUgdG9rZW4ncyBwZXJtaXNzaW9ucy5cbiAgaWYgKGFsbG93Qm90QWN0b3JzICYmIGFjdG9yLmVuZHNXaXRoKFwiW2JvdF1cIikpIHtcbiAgICBjb3JlLmluZm8oYEFjdG9yICcke2FjdG9yfScgaXMgYSBib3QgYWNjb3VudDsgc2tpcHBpbmcgZXhwbGljaXQgcGVybWlzc2lvbiBjaGVjay5gKTtcbiAgICByZXR1cm4geyBzdGF0dXM6IFwiYXBwcm92ZWRcIiwgYWN0b3IgfTtcbiAgfVxuXG4gIC8vIEFsbG93LWxpc3Qgb3ZlcnJpZGU6IGlmIGFsbG93VXNlcnMgaXMgJyonIGFsbG93IGFsbCB1c2Vycy4gSWYgaXQgaXMgYVxuICAvLyBjb21tYS1zZXBhcmF0ZWQgbGlzdCwgYWxsb3cgbGlzdGVkIHVzZXJzIChjYXNlLWluc2Vuc2l0aXZlKSB3aXRob3V0IGNoZWNraW5nXG4gIC8vIGNvbGxhYm9yYXRvciBwZXJtaXNzaW9ucy5cbiAgY29uc3QgYWxsb3dVc2Vyc1NwZWMgPSAob3B0aW9ucy5hbGxvd1VzZXJzID8/IFwiXCIpLnRyaW0oKTtcbiAgaWYgKGFsbG93VXNlcnNTcGVjLmxlbmd0aCA+IDApIHtcbiAgICBpZiAoYWxsb3dVc2Vyc1NwZWMgPT09IFwiKlwiKSB7XG4gICAgICBjb3JlLmluZm8oXCJhbGxvdy11c2Vycz0nKicgc3BlY2lmaWVkOyBhbGxvd2luZyBhbGwgdXNlcnMgdG8gcHJvY2VlZC5cIik7XG4gICAgICByZXR1cm4geyBzdGF0dXM6IFwiYXBwcm92ZWRcIiwgYWN0b3IgfTtcbiAgICB9XG4gICAgY29uc3QgYWxsb3dlZCA9IG5ldyBTZXQoXG4gICAgICBhbGxvd1VzZXJzU3BlY1xuICAgICAgICAuc3BsaXQoXCIsXCIpXG4gICAgICAgIC5tYXAoKHMpID0+IHMudHJpbSgpLnRvTG93ZXJDYXNlKCkpXG4gICAgICAgIC5maWx0ZXIoKHMpID0+IHMubGVuZ3RoID4gMCksXG4gICAgKTtcbiAgICBpZiAoYWxsb3dlZC5oYXMoYWN0b3IudG9Mb3dlckNhc2UoKSkpIHtcbiAgICAgIGNvcmUuaW5mbyhgQWN0b3IgJyR7YWN0b3J9JyBpcyBleHBsaWNpdGx5IGFsbG93ZWQgdmlhIGFsbG93LXVzZXJzLmApO1xuICAgICAgcmV0dXJuIHsgc3RhdHVzOiBcImFwcHJvdmVkXCIsIGFjdG9yIH07XG4gICAgfVxuICB9XG5cbiAgY29uc3QgdG9rZW4gPSBvcHRpb25zLnRva2VuID8/IGdldFRva2VuRnJvbUVudigpO1xuICBpZiAoIXRva2VuKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHN0YXR1czogXCJyZWplY3RlZFwiLFxuICAgICAgYWN0b3IsXG4gICAgICByZWFzb246IFwiQSBHaXRIdWIgdG9rZW4gaXMgcmVxdWlyZWQgdG8gY2hlY2sgcGVybWlzc2lvbnMgKHNldCBHSVRIVUJfVE9LRU4gb3IgR0hfVE9LRU4pLlwiLFxuICAgIH07XG4gIH1cblxuICBjb25zdCBvY3Rva2l0ID0gb3B0aW9ucy5vY3Rva2l0ID8/IG5ldyBPY3Rva2l0KHsgYXV0aDogdG9rZW4gfSk7XG5cbiAgY29yZS5pbmZvKGBDaGVja2luZyB3cml0ZSBhY2Nlc3MgZm9yIGFjdG9yICcke2FjdG9yfScgb24gJHtvd25lcn0vJHtyZXBvfWApO1xuXG4gIGxldCBwZXJtaXNzaW9uOiBzdHJpbmc7XG4gIHRyeSB7XG4gICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBvY3Rva2l0LnJlcG9zLmdldENvbGxhYm9yYXRvclBlcm1pc3Npb25MZXZlbCh7XG4gICAgICBvd25lcixcbiAgICAgIHJlcG8sXG4gICAgICB1c2VybmFtZTogYWN0b3IsXG4gICAgfSk7XG4gICAgcGVybWlzc2lvbiA9IHJlc3BvbnNlLmRhdGEucGVybWlzc2lvbiA/PyBcIm5vbmVcIjtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBpZiAoaXNOb3RGb3VuZEVycm9yKGVycm9yKSkge1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiBcInJlamVjdGVkXCIsXG4gICAgICAgIGFjdG9yLFxuICAgICAgICByZWFzb246IGBBY3RvciAnJHthY3Rvcn0nIGlzIG5vdCBhIGNvbGxhYm9yYXRvciBvbiAke293bmVyfS8ke3JlcG99OyB3cml0ZSBhY2Nlc3MgaXMgcmVxdWlyZWQuYCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgbWVzc2FnZSA9XG4gICAgICBlcnJvciBpbnN0YW5jZW9mIEVycm9yXG4gICAgICAgID8gZXJyb3IubWVzc2FnZVxuICAgICAgICA6IFwiRmFpbGVkIHRvIHZlcmlmeSBwZXJtaXNzaW9ucyBmb3IgYWN0b3IgZHVlIHRvIHVua25vd24gZXJyb3IuXCI7XG5cbiAgICByZXR1cm4ge1xuICAgICAgc3RhdHVzOiBcInJlamVjdGVkXCIsXG4gICAgICBhY3RvcixcbiAgICAgIHJlYXNvbjogYEZhaWxlZCB0byB2ZXJpZnkgcGVybWlzc2lvbnMgZm9yICcke2FjdG9yfSc6ICR7bWVzc2FnZX1gLFxuICAgIH07XG4gIH1cblxuICBjb3JlLmluZm8oYEFjdG9yICcke2FjdG9yfScgaGFzIHBlcm1pc3Npb24gbGV2ZWwgJyR7cGVybWlzc2lvbn0nLmApO1xuXG4gIGlmIChwZXJtaXNzaW9uID09PSBcImFkbWluXCIgfHwgcGVybWlzc2lvbiA9PT0gXCJ3cml0ZVwiIHx8IHBlcm1pc3Npb24gPT09IFwibWFpbnRhaW5cIikge1xuICAgIHJldHVybiB7IHN0YXR1czogXCJhcHByb3ZlZFwiLCBhY3RvciB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICBzdGF0dXM6IFwicmVqZWN0ZWRcIixcbiAgICBhY3RvcixcbiAgICByZWFzb246IGBBY3RvciAnJHthY3Rvcn0nIG11c3QgaGF2ZSB3cml0ZSBhY2Nlc3MgdG8gJHtvd25lcn0vJHtyZXBvfS4gRGV0ZWN0ZWQgcGVybWlzc2lvbjogJyR7cGVybWlzc2lvbn0nLmAsXG4gIH07XG59XG5cbmZ1bmN0aW9uIGdldFRva2VuRnJvbUVudigpOiBzdHJpbmcge1xuICBjb25zdCB0b2tlbiA9IHByb2Nlc3MuZW52LkdJVEhVQl9UT0tFTiA/PyBwcm9jZXNzLmVudi5HSF9UT0tFTjtcbiAgcmV0dXJuIHRva2VuICYmIHRva2VuLnRyaW0oKS5sZW5ndGggPiAwID8gdG9rZW4gOiBcIlwiO1xufVxuXG5mdW5jdGlvbiBpc05vdEZvdW5kRXJyb3IoZXJyb3I6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuIEJvb2xlYW4oXG4gICAgZXJyb3IgJiYgdHlwZW9mIGVycm9yID09PSBcIm9iamVjdFwiICYmIFwic3RhdHVzXCIgaW4gZXJyb3IgJiYgKGVycm9yIGFzIHsgc3RhdHVzPzogbnVtYmVyIH0pLnN0YXR1cyA9PT0gNDA0LFxuICApO1xufVxuIiwgImV4cG9ydCBmdW5jdGlvbiBnZXRVc2VyQWdlbnQoKSB7XG4gIGlmICh0eXBlb2YgbmF2aWdhdG9yID09PSBcIm9iamVjdFwiICYmIFwidXNlckFnZW50XCIgaW4gbmF2aWdhdG9yKSB7XG4gICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQ7XG4gIH1cblxuICBpZiAodHlwZW9mIHByb2Nlc3MgPT09IFwib2JqZWN0XCIgJiYgcHJvY2Vzcy52ZXJzaW9uICE9PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYE5vZGUuanMvJHtwcm9jZXNzLnZlcnNpb24uc3Vic3RyKDEpfSAoJHtwcm9jZXNzLnBsYXRmb3JtfTsgJHtcbiAgICAgIHByb2Nlc3MuYXJjaFxuICAgIH0pYDtcbiAgfVxuXG4gIHJldHVybiBcIjxlbnZpcm9ubWVudCB1bmRldGVjdGFibGU+XCI7XG59XG4iLCAiLy8gQHRzLWNoZWNrXG5cbmV4cG9ydCBmdW5jdGlvbiByZWdpc3RlcihzdGF0ZSwgbmFtZSwgbWV0aG9kLCBvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgbWV0aG9kICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJtZXRob2QgZm9yIGJlZm9yZSBob29rIG11c3QgYmUgYSBmdW5jdGlvblwiKTtcbiAgfVxuXG4gIGlmICghb3B0aW9ucykge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIGlmIChBcnJheS5pc0FycmF5KG5hbWUpKSB7XG4gICAgcmV0dXJuIG5hbWUucmV2ZXJzZSgpLnJlZHVjZSgoY2FsbGJhY2ssIG5hbWUpID0+IHtcbiAgICAgIHJldHVybiByZWdpc3Rlci5iaW5kKG51bGwsIHN0YXRlLCBuYW1lLCBjYWxsYmFjaywgb3B0aW9ucyk7XG4gICAgfSwgbWV0aG9kKSgpO1xuICB9XG5cbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgIGlmICghc3RhdGUucmVnaXN0cnlbbmFtZV0pIHtcbiAgICAgIHJldHVybiBtZXRob2Qob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN0YXRlLnJlZ2lzdHJ5W25hbWVdLnJlZHVjZSgobWV0aG9kLCByZWdpc3RlcmVkKSA9PiB7XG4gICAgICByZXR1cm4gcmVnaXN0ZXJlZC5ob29rLmJpbmQobnVsbCwgbWV0aG9kLCBvcHRpb25zKTtcbiAgICB9LCBtZXRob2QpKCk7XG4gIH0pO1xufVxuIiwgIi8vIEB0cy1jaGVja1xuXG5leHBvcnQgZnVuY3Rpb24gYWRkSG9vayhzdGF0ZSwga2luZCwgbmFtZSwgaG9vaykge1xuICBjb25zdCBvcmlnID0gaG9vaztcbiAgaWYgKCFzdGF0ZS5yZWdpc3RyeVtuYW1lXSkge1xuICAgIHN0YXRlLnJlZ2lzdHJ5W25hbWVdID0gW107XG4gIH1cblxuICBpZiAoa2luZCA9PT0gXCJiZWZvcmVcIikge1xuICAgIGhvb2sgPSAobWV0aG9kLCBvcHRpb25zKSA9PiB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgLnRoZW4ob3JpZy5iaW5kKG51bGwsIG9wdGlvbnMpKVxuICAgICAgICAudGhlbihtZXRob2QuYmluZChudWxsLCBvcHRpb25zKSk7XG4gICAgfTtcbiAgfVxuXG4gIGlmIChraW5kID09PSBcImFmdGVyXCIpIHtcbiAgICBob29rID0gKG1ldGhvZCwgb3B0aW9ucykgPT4ge1xuICAgICAgbGV0IHJlc3VsdDtcbiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoKVxuICAgICAgICAudGhlbihtZXRob2QuYmluZChudWxsLCBvcHRpb25zKSlcbiAgICAgICAgLnRoZW4oKHJlc3VsdF8pID0+IHtcbiAgICAgICAgICByZXN1bHQgPSByZXN1bHRfO1xuICAgICAgICAgIHJldHVybiBvcmlnKHJlc3VsdCwgb3B0aW9ucyk7XG4gICAgICAgIH0pXG4gICAgICAgIC50aGVuKCgpID0+IHtcbiAgICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgICAgICB9KTtcbiAgICB9O1xuICB9XG5cbiAgaWYgKGtpbmQgPT09IFwiZXJyb3JcIikge1xuICAgIGhvb2sgPSAobWV0aG9kLCBvcHRpb25zKSA9PiB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKClcbiAgICAgICAgLnRoZW4obWV0aG9kLmJpbmQobnVsbCwgb3B0aW9ucykpXG4gICAgICAgIC5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICByZXR1cm4gb3JpZyhlcnJvciwgb3B0aW9ucyk7XG4gICAgICAgIH0pO1xuICAgIH07XG4gIH1cblxuICBzdGF0ZS5yZWdpc3RyeVtuYW1lXS5wdXNoKHtcbiAgICBob29rOiBob29rLFxuICAgIG9yaWc6IG9yaWcsXG4gIH0pO1xufVxuIiwgIi8vIEB0cy1jaGVja1xuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlSG9vayhzdGF0ZSwgbmFtZSwgbWV0aG9kKSB7XG4gIGlmICghc3RhdGUucmVnaXN0cnlbbmFtZV0pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBpbmRleCA9IHN0YXRlLnJlZ2lzdHJ5W25hbWVdXG4gICAgLm1hcCgocmVnaXN0ZXJlZCkgPT4ge1xuICAgICAgcmV0dXJuIHJlZ2lzdGVyZWQub3JpZztcbiAgICB9KVxuICAgIC5pbmRleE9mKG1ldGhvZCk7XG5cbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRlLnJlZ2lzdHJ5W25hbWVdLnNwbGljZShpbmRleCwgMSk7XG59XG4iLCAiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7IHJlZ2lzdGVyIH0gZnJvbSBcIi4vbGliL3JlZ2lzdGVyLmpzXCI7XG5pbXBvcnQgeyBhZGRIb29rIH0gZnJvbSBcIi4vbGliL2FkZC5qc1wiO1xuaW1wb3J0IHsgcmVtb3ZlSG9vayB9IGZyb20gXCIuL2xpYi9yZW1vdmUuanNcIjtcblxuLy8gYmluZCB3aXRoIGFycmF5IG9mIGFyZ3VtZW50czogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIxNzkyOTEzXG5jb25zdCBiaW5kID0gRnVuY3Rpb24uYmluZDtcbmNvbnN0IGJpbmRhYmxlID0gYmluZC5iaW5kKGJpbmQpO1xuXG5mdW5jdGlvbiBiaW5kQXBpKGhvb2ssIHN0YXRlLCBuYW1lKSB7XG4gIGNvbnN0IHJlbW92ZUhvb2tSZWYgPSBiaW5kYWJsZShyZW1vdmVIb29rLCBudWxsKS5hcHBseShcbiAgICBudWxsLFxuICAgIG5hbWUgPyBbc3RhdGUsIG5hbWVdIDogW3N0YXRlXVxuICApO1xuICBob29rLmFwaSA9IHsgcmVtb3ZlOiByZW1vdmVIb29rUmVmIH07XG4gIGhvb2sucmVtb3ZlID0gcmVtb3ZlSG9va1JlZjtcbiAgW1wiYmVmb3JlXCIsIFwiZXJyb3JcIiwgXCJhZnRlclwiLCBcIndyYXBcIl0uZm9yRWFjaCgoa2luZCkgPT4ge1xuICAgIGNvbnN0IGFyZ3MgPSBuYW1lID8gW3N0YXRlLCBraW5kLCBuYW1lXSA6IFtzdGF0ZSwga2luZF07XG4gICAgaG9va1traW5kXSA9IGhvb2suYXBpW2tpbmRdID0gYmluZGFibGUoYWRkSG9vaywgbnVsbCkuYXBwbHkobnVsbCwgYXJncyk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBTaW5ndWxhcigpIHtcbiAgY29uc3Qgc2luZ3VsYXJIb29rTmFtZSA9IFN5bWJvbChcIlNpbmd1bGFyXCIpO1xuICBjb25zdCBzaW5ndWxhckhvb2tTdGF0ZSA9IHtcbiAgICByZWdpc3RyeToge30sXG4gIH07XG4gIGNvbnN0IHNpbmd1bGFySG9vayA9IHJlZ2lzdGVyLmJpbmQobnVsbCwgc2luZ3VsYXJIb29rU3RhdGUsIHNpbmd1bGFySG9va05hbWUpO1xuICBiaW5kQXBpKHNpbmd1bGFySG9vaywgc2luZ3VsYXJIb29rU3RhdGUsIHNpbmd1bGFySG9va05hbWUpO1xuICByZXR1cm4gc2luZ3VsYXJIb29rO1xufVxuXG5mdW5jdGlvbiBDb2xsZWN0aW9uKCkge1xuICBjb25zdCBzdGF0ZSA9IHtcbiAgICByZWdpc3RyeToge30sXG4gIH07XG5cbiAgY29uc3QgaG9vayA9IHJlZ2lzdGVyLmJpbmQobnVsbCwgc3RhdGUpO1xuICBiaW5kQXBpKGhvb2ssIHN0YXRlKTtcblxuICByZXR1cm4gaG9vaztcbn1cblxuZXhwb3J0IGRlZmF1bHQgeyBTaW5ndWxhciwgQ29sbGVjdGlvbiB9O1xuIiwgIi8vIHBrZy9kaXN0LXNyYy9kZWZhdWx0cy5qc1xuaW1wb3J0IHsgZ2V0VXNlckFnZW50IH0gZnJvbSBcInVuaXZlcnNhbC11c2VyLWFnZW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiMC4wLjAtZGV2ZWxvcG1lbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2RlZmF1bHRzLmpzXG52YXIgdXNlckFnZW50ID0gYG9jdG9raXQtZW5kcG9pbnQuanMvJHtWRVJTSU9OfSAke2dldFVzZXJBZ2VudCgpfWA7XG52YXIgREVGQVVMVFMgPSB7XG4gIG1ldGhvZDogXCJHRVRcIixcbiAgYmFzZVVybDogXCJodHRwczovL2FwaS5naXRodWIuY29tXCIsXG4gIGhlYWRlcnM6IHtcbiAgICBhY2NlcHQ6IFwiYXBwbGljYXRpb24vdm5kLmdpdGh1Yi52Mytqc29uXCIsXG4gICAgXCJ1c2VyLWFnZW50XCI6IHVzZXJBZ2VudFxuICB9LFxuICBtZWRpYVR5cGU6IHtcbiAgICBmb3JtYXQ6IFwiXCJcbiAgfVxufTtcblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvbG93ZXJjYXNlLWtleXMuanNcbmZ1bmN0aW9uIGxvd2VyY2FzZUtleXMob2JqZWN0KSB7XG4gIGlmICghb2JqZWN0KSB7XG4gICAgcmV0dXJuIHt9O1xuICB9XG4gIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3QpLnJlZHVjZSgobmV3T2JqLCBrZXkpID0+IHtcbiAgICBuZXdPYmpba2V5LnRvTG93ZXJDYXNlKCldID0gb2JqZWN0W2tleV07XG4gICAgcmV0dXJuIG5ld09iajtcbiAgfSwge30pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9pcy1wbGFpbi1vYmplY3QuanNcbmZ1bmN0aW9uIGlzUGxhaW5PYmplY3QodmFsdWUpIHtcbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gXCJvYmplY3RcIiB8fCB2YWx1ZSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlKSAhPT0gXCJbb2JqZWN0IE9iamVjdF1cIikgcmV0dXJuIGZhbHNlO1xuICBjb25zdCBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZih2YWx1ZSk7XG4gIGlmIChwcm90byA9PT0gbnVsbCkgcmV0dXJuIHRydWU7XG4gIGNvbnN0IEN0b3IgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocHJvdG8sIFwiY29uc3RydWN0b3JcIikgJiYgcHJvdG8uY29uc3RydWN0b3I7XG4gIHJldHVybiB0eXBlb2YgQ3RvciA9PT0gXCJmdW5jdGlvblwiICYmIEN0b3IgaW5zdGFuY2VvZiBDdG9yICYmIEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKEN0b3IpID09PSBGdW5jdGlvbi5wcm90b3R5cGUuY2FsbCh2YWx1ZSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy91dGlsL21lcmdlLWRlZXAuanNcbmZ1bmN0aW9uIG1lcmdlRGVlcChkZWZhdWx0cywgb3B0aW9ucykge1xuICBjb25zdCByZXN1bHQgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0cyk7XG4gIE9iamVjdC5rZXlzKG9wdGlvbnMpLmZvckVhY2goKGtleSkgPT4ge1xuICAgIGlmIChpc1BsYWluT2JqZWN0KG9wdGlvbnNba2V5XSkpIHtcbiAgICAgIGlmICghKGtleSBpbiBkZWZhdWx0cykpIE9iamVjdC5hc3NpZ24ocmVzdWx0LCB7IFtrZXldOiBvcHRpb25zW2tleV0gfSk7XG4gICAgICBlbHNlIHJlc3VsdFtrZXldID0gbWVyZ2VEZWVwKGRlZmF1bHRzW2tleV0sIG9wdGlvbnNba2V5XSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIE9iamVjdC5hc3NpZ24ocmVzdWx0LCB7IFtrZXldOiBvcHRpb25zW2tleV0gfSk7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvcmVtb3ZlLXVuZGVmaW5lZC1wcm9wZXJ0aWVzLmpzXG5mdW5jdGlvbiByZW1vdmVVbmRlZmluZWRQcm9wZXJ0aWVzKG9iaikge1xuICBmb3IgKGNvbnN0IGtleSBpbiBvYmopIHtcbiAgICBpZiAob2JqW2tleV0gPT09IHZvaWQgMCkge1xuICAgICAgZGVsZXRlIG9ialtrZXldO1xuICAgIH1cbiAgfVxuICByZXR1cm4gb2JqO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvbWVyZ2UuanNcbmZ1bmN0aW9uIG1lcmdlKGRlZmF1bHRzLCByb3V0ZSwgb3B0aW9ucykge1xuICBpZiAodHlwZW9mIHJvdXRlID09PSBcInN0cmluZ1wiKSB7XG4gICAgbGV0IFttZXRob2QsIHVybF0gPSByb3V0ZS5zcGxpdChcIiBcIik7XG4gICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24odXJsID8geyBtZXRob2QsIHVybCB9IDogeyB1cmw6IG1ldGhvZCB9LCBvcHRpb25zKTtcbiAgfSBlbHNlIHtcbiAgICBvcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgcm91dGUpO1xuICB9XG4gIG9wdGlvbnMuaGVhZGVycyA9IGxvd2VyY2FzZUtleXMob3B0aW9ucy5oZWFkZXJzKTtcbiAgcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhvcHRpb25zKTtcbiAgcmVtb3ZlVW5kZWZpbmVkUHJvcGVydGllcyhvcHRpb25zLmhlYWRlcnMpO1xuICBjb25zdCBtZXJnZWRPcHRpb25zID0gbWVyZ2VEZWVwKGRlZmF1bHRzIHx8IHt9LCBvcHRpb25zKTtcbiAgaWYgKG9wdGlvbnMudXJsID09PSBcIi9ncmFwaHFsXCIpIHtcbiAgICBpZiAoZGVmYXVsdHMgJiYgZGVmYXVsdHMubWVkaWFUeXBlLnByZXZpZXdzPy5sZW5ndGgpIHtcbiAgICAgIG1lcmdlZE9wdGlvbnMubWVkaWFUeXBlLnByZXZpZXdzID0gZGVmYXVsdHMubWVkaWFUeXBlLnByZXZpZXdzLmZpbHRlcihcbiAgICAgICAgKHByZXZpZXcpID0+ICFtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cy5pbmNsdWRlcyhwcmV2aWV3KVxuICAgICAgKS5jb25jYXQobWVyZ2VkT3B0aW9ucy5tZWRpYVR5cGUucHJldmlld3MpO1xuICAgIH1cbiAgICBtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyA9IChtZXJnZWRPcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cyB8fCBbXSkubWFwKChwcmV2aWV3KSA9PiBwcmV2aWV3LnJlcGxhY2UoLy1wcmV2aWV3LywgXCJcIikpO1xuICB9XG4gIHJldHVybiBtZXJnZWRPcHRpb25zO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9hZGQtcXVlcnktcGFyYW1ldGVycy5qc1xuZnVuY3Rpb24gYWRkUXVlcnlQYXJhbWV0ZXJzKHVybCwgcGFyYW1ldGVycykge1xuICBjb25zdCBzZXBhcmF0b3IgPSAvXFw/Ly50ZXN0KHVybCkgPyBcIiZcIiA6IFwiP1wiO1xuICBjb25zdCBuYW1lcyA9IE9iamVjdC5rZXlzKHBhcmFtZXRlcnMpO1xuICBpZiAobmFtZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIHVybDtcbiAgfVxuICByZXR1cm4gdXJsICsgc2VwYXJhdG9yICsgbmFtZXMubWFwKChuYW1lKSA9PiB7XG4gICAgaWYgKG5hbWUgPT09IFwicVwiKSB7XG4gICAgICByZXR1cm4gXCJxPVwiICsgcGFyYW1ldGVycy5xLnNwbGl0KFwiK1wiKS5tYXAoZW5jb2RlVVJJQ29tcG9uZW50KS5qb2luKFwiK1wiKTtcbiAgICB9XG4gICAgcmV0dXJuIGAke25hbWV9PSR7ZW5jb2RlVVJJQ29tcG9uZW50KHBhcmFtZXRlcnNbbmFtZV0pfWA7XG4gIH0pLmpvaW4oXCImXCIpO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9leHRyYWN0LXVybC12YXJpYWJsZS1uYW1lcy5qc1xudmFyIHVybFZhcmlhYmxlUmVnZXggPSAvXFx7W157fX1dK1xcfS9nO1xuZnVuY3Rpb24gcmVtb3ZlTm9uQ2hhcnModmFyaWFibGVOYW1lKSB7XG4gIHJldHVybiB2YXJpYWJsZU5hbWUucmVwbGFjZSgvKD86XlxcVyspfCg/Oig/PCFcXFcpXFxXKyQpL2csIFwiXCIpLnNwbGl0KC8sLyk7XG59XG5mdW5jdGlvbiBleHRyYWN0VXJsVmFyaWFibGVOYW1lcyh1cmwpIHtcbiAgY29uc3QgbWF0Y2hlcyA9IHVybC5tYXRjaCh1cmxWYXJpYWJsZVJlZ2V4KTtcbiAgaWYgKCFtYXRjaGVzKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIHJldHVybiBtYXRjaGVzLm1hcChyZW1vdmVOb25DaGFycykucmVkdWNlKChhLCBiKSA9PiBhLmNvbmNhdChiKSwgW10pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvdXRpbC9vbWl0LmpzXG5mdW5jdGlvbiBvbWl0KG9iamVjdCwga2V5c1RvT21pdCkge1xuICBjb25zdCByZXN1bHQgPSB7IF9fcHJvdG9fXzogbnVsbCB9O1xuICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhvYmplY3QpKSB7XG4gICAgaWYgKGtleXNUb09taXQuaW5kZXhPZihrZXkpID09PSAtMSkge1xuICAgICAgcmVzdWx0W2tleV0gPSBvYmplY3Rba2V5XTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3V0aWwvdXJsLXRlbXBsYXRlLmpzXG5mdW5jdGlvbiBlbmNvZGVSZXNlcnZlZChzdHIpIHtcbiAgcmV0dXJuIHN0ci5zcGxpdCgvKCVbMC05QS1GYS1mXXsyfSkvZykubWFwKGZ1bmN0aW9uKHBhcnQpIHtcbiAgICBpZiAoIS8lWzAtOUEtRmEtZl0vLnRlc3QocGFydCkpIHtcbiAgICAgIHBhcnQgPSBlbmNvZGVVUkkocGFydCkucmVwbGFjZSgvJTVCL2csIFwiW1wiKS5yZXBsYWNlKC8lNUQvZywgXCJdXCIpO1xuICAgIH1cbiAgICByZXR1cm4gcGFydDtcbiAgfSkuam9pbihcIlwiKTtcbn1cbmZ1bmN0aW9uIGVuY29kZVVucmVzZXJ2ZWQoc3RyKSB7XG4gIHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC9bIScoKSpdL2csIGZ1bmN0aW9uKGMpIHtcbiAgICByZXR1cm4gXCIlXCIgKyBjLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7XG4gIH0pO1xufVxuZnVuY3Rpb24gZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlLCBrZXkpIHtcbiAgdmFsdWUgPSBvcGVyYXRvciA9PT0gXCIrXCIgfHwgb3BlcmF0b3IgPT09IFwiI1wiID8gZW5jb2RlUmVzZXJ2ZWQodmFsdWUpIDogZW5jb2RlVW5yZXNlcnZlZCh2YWx1ZSk7XG4gIGlmIChrZXkpIHtcbiAgICByZXR1cm4gZW5jb2RlVW5yZXNlcnZlZChrZXkpICsgXCI9XCIgKyB2YWx1ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdmFsdWU7XG4gIH1cbn1cbmZ1bmN0aW9uIGlzRGVmaW5lZCh2YWx1ZSkge1xuICByZXR1cm4gdmFsdWUgIT09IHZvaWQgMCAmJiB2YWx1ZSAhPT0gbnVsbDtcbn1cbmZ1bmN0aW9uIGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpIHtcbiAgcmV0dXJuIG9wZXJhdG9yID09PSBcIjtcIiB8fCBvcGVyYXRvciA9PT0gXCImXCIgfHwgb3BlcmF0b3IgPT09IFwiP1wiO1xufVxuZnVuY3Rpb24gZ2V0VmFsdWVzKGNvbnRleHQsIG9wZXJhdG9yLCBrZXksIG1vZGlmaWVyKSB7XG4gIHZhciB2YWx1ZSA9IGNvbnRleHRba2V5XSwgcmVzdWx0ID0gW107XG4gIGlmIChpc0RlZmluZWQodmFsdWUpICYmIHZhbHVlICE9PSBcIlwiKSB7XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiB8fCB0eXBlb2YgdmFsdWUgPT09IFwibnVtYmVyXCIgfHwgdHlwZW9mIHZhbHVlID09PSBcImJvb2xlYW5cIikge1xuICAgICAgdmFsdWUgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgaWYgKG1vZGlmaWVyICYmIG1vZGlmaWVyICE9PSBcIipcIikge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnN1YnN0cmluZygwLCBwYXJzZUludChtb2RpZmllciwgMTApKTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUsIGlzS2V5T3BlcmF0b3Iob3BlcmF0b3IpID8ga2V5IDogXCJcIilcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChtb2RpZmllciA9PT0gXCIqXCIpIHtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUuZmlsdGVyKGlzRGVmaW5lZCkuZm9yRWFjaChmdW5jdGlvbih2YWx1ZTIpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICAgICBlbmNvZGVWYWx1ZShvcGVyYXRvciwgdmFsdWUyLCBpc0tleU9wZXJhdG9yKG9wZXJhdG9yKSA/IGtleSA6IFwiXCIpXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIE9iamVjdC5rZXlzKHZhbHVlKS5mb3JFYWNoKGZ1bmN0aW9uKGspIHtcbiAgICAgICAgICAgIGlmIChpc0RlZmluZWQodmFsdWVba10pKSB7XG4gICAgICAgICAgICAgIHJlc3VsdC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZVtrXSwgaykpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCB0bXAgPSBbXTtcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUpKSB7XG4gICAgICAgICAgdmFsdWUuZmlsdGVyKGlzRGVmaW5lZCkuZm9yRWFjaChmdW5jdGlvbih2YWx1ZTIpIHtcbiAgICAgICAgICAgIHRtcC5wdXNoKGVuY29kZVZhbHVlKG9wZXJhdG9yLCB2YWx1ZTIpKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBPYmplY3Qua2V5cyh2YWx1ZSkuZm9yRWFjaChmdW5jdGlvbihrKSB7XG4gICAgICAgICAgICBpZiAoaXNEZWZpbmVkKHZhbHVlW2tdKSkge1xuICAgICAgICAgICAgICB0bXAucHVzaChlbmNvZGVVbnJlc2VydmVkKGspKTtcbiAgICAgICAgICAgICAgdG1wLnB1c2goZW5jb2RlVmFsdWUob3BlcmF0b3IsIHZhbHVlW2tdLnRvU3RyaW5nKCkpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaXNLZXlPcGVyYXRvcihvcGVyYXRvcikpIHtcbiAgICAgICAgICByZXN1bHQucHVzaChlbmNvZGVVbnJlc2VydmVkKGtleSkgKyBcIj1cIiArIHRtcC5qb2luKFwiLFwiKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodG1wLmxlbmd0aCAhPT0gMCkge1xuICAgICAgICAgIHJlc3VsdC5wdXNoKHRtcC5qb2luKFwiLFwiKSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKG9wZXJhdG9yID09PSBcIjtcIikge1xuICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpKTtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKHZhbHVlID09PSBcIlwiICYmIChvcGVyYXRvciA9PT0gXCImXCIgfHwgb3BlcmF0b3IgPT09IFwiP1wiKSkge1xuICAgICAgcmVzdWx0LnB1c2goZW5jb2RlVW5yZXNlcnZlZChrZXkpICsgXCI9XCIpO1xuICAgIH0gZWxzZSBpZiAodmFsdWUgPT09IFwiXCIpIHtcbiAgICAgIHJlc3VsdC5wdXNoKFwiXCIpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gcGFyc2VVcmwodGVtcGxhdGUpIHtcbiAgcmV0dXJuIHtcbiAgICBleHBhbmQ6IGV4cGFuZC5iaW5kKG51bGwsIHRlbXBsYXRlKVxuICB9O1xufVxuZnVuY3Rpb24gZXhwYW5kKHRlbXBsYXRlLCBjb250ZXh0KSB7XG4gIHZhciBvcGVyYXRvcnMgPSBbXCIrXCIsIFwiI1wiLCBcIi5cIiwgXCIvXCIsIFwiO1wiLCBcIj9cIiwgXCImXCJdO1xuICB0ZW1wbGF0ZSA9IHRlbXBsYXRlLnJlcGxhY2UoXG4gICAgL1xceyhbXlxce1xcfV0rKVxcfXwoW15cXHtcXH1dKykvZyxcbiAgICBmdW5jdGlvbihfLCBleHByZXNzaW9uLCBsaXRlcmFsKSB7XG4gICAgICBpZiAoZXhwcmVzc2lvbikge1xuICAgICAgICBsZXQgb3BlcmF0b3IgPSBcIlwiO1xuICAgICAgICBjb25zdCB2YWx1ZXMgPSBbXTtcbiAgICAgICAgaWYgKG9wZXJhdG9ycy5pbmRleE9mKGV4cHJlc3Npb24uY2hhckF0KDApKSAhPT0gLTEpIHtcbiAgICAgICAgICBvcGVyYXRvciA9IGV4cHJlc3Npb24uY2hhckF0KDApO1xuICAgICAgICAgIGV4cHJlc3Npb24gPSBleHByZXNzaW9uLnN1YnN0cigxKTtcbiAgICAgICAgfVxuICAgICAgICBleHByZXNzaW9uLnNwbGl0KC8sL2cpLmZvckVhY2goZnVuY3Rpb24odmFyaWFibGUpIHtcbiAgICAgICAgICB2YXIgdG1wID0gLyhbXjpcXCpdKikoPzo6KFxcZCspfChcXCopKT8vLmV4ZWModmFyaWFibGUpO1xuICAgICAgICAgIHZhbHVlcy5wdXNoKGdldFZhbHVlcyhjb250ZXh0LCBvcGVyYXRvciwgdG1wWzFdLCB0bXBbMl0gfHwgdG1wWzNdKSk7XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAob3BlcmF0b3IgJiYgb3BlcmF0b3IgIT09IFwiK1wiKSB7XG4gICAgICAgICAgdmFyIHNlcGFyYXRvciA9IFwiLFwiO1xuICAgICAgICAgIGlmIChvcGVyYXRvciA9PT0gXCI/XCIpIHtcbiAgICAgICAgICAgIHNlcGFyYXRvciA9IFwiJlwiO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3BlcmF0b3IgIT09IFwiI1wiKSB7XG4gICAgICAgICAgICBzZXBhcmF0b3IgPSBvcGVyYXRvcjtcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuICh2YWx1ZXMubGVuZ3RoICE9PSAwID8gb3BlcmF0b3IgOiBcIlwiKSArIHZhbHVlcy5qb2luKHNlcGFyYXRvcik7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgcmV0dXJuIHZhbHVlcy5qb2luKFwiLFwiKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGVuY29kZVJlc2VydmVkKGxpdGVyYWwpO1xuICAgICAgfVxuICAgIH1cbiAgKTtcbiAgaWYgKHRlbXBsYXRlID09PSBcIi9cIikge1xuICAgIHJldHVybiB0ZW1wbGF0ZTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gdGVtcGxhdGUucmVwbGFjZSgvXFwvJC8sIFwiXCIpO1xuICB9XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9wYXJzZS5qc1xuZnVuY3Rpb24gcGFyc2Uob3B0aW9ucykge1xuICBsZXQgbWV0aG9kID0gb3B0aW9ucy5tZXRob2QudG9VcHBlckNhc2UoKTtcbiAgbGV0IHVybCA9IChvcHRpb25zLnVybCB8fCBcIi9cIikucmVwbGFjZSgvOihbYS16XVxcdyspL2csIFwieyQxfVwiKTtcbiAgbGV0IGhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLmhlYWRlcnMpO1xuICBsZXQgYm9keTtcbiAgbGV0IHBhcmFtZXRlcnMgPSBvbWl0KG9wdGlvbnMsIFtcbiAgICBcIm1ldGhvZFwiLFxuICAgIFwiYmFzZVVybFwiLFxuICAgIFwidXJsXCIsXG4gICAgXCJoZWFkZXJzXCIsXG4gICAgXCJyZXF1ZXN0XCIsXG4gICAgXCJtZWRpYVR5cGVcIlxuICBdKTtcbiAgY29uc3QgdXJsVmFyaWFibGVOYW1lcyA9IGV4dHJhY3RVcmxWYXJpYWJsZU5hbWVzKHVybCk7XG4gIHVybCA9IHBhcnNlVXJsKHVybCkuZXhwYW5kKHBhcmFtZXRlcnMpO1xuICBpZiAoIS9eaHR0cC8udGVzdCh1cmwpKSB7XG4gICAgdXJsID0gb3B0aW9ucy5iYXNlVXJsICsgdXJsO1xuICB9XG4gIGNvbnN0IG9taXR0ZWRQYXJhbWV0ZXJzID0gT2JqZWN0LmtleXMob3B0aW9ucykuZmlsdGVyKChvcHRpb24pID0+IHVybFZhcmlhYmxlTmFtZXMuaW5jbHVkZXMob3B0aW9uKSkuY29uY2F0KFwiYmFzZVVybFwiKTtcbiAgY29uc3QgcmVtYWluaW5nUGFyYW1ldGVycyA9IG9taXQocGFyYW1ldGVycywgb21pdHRlZFBhcmFtZXRlcnMpO1xuICBjb25zdCBpc0JpbmFyeVJlcXVlc3QgPSAvYXBwbGljYXRpb25cXC9vY3RldC1zdHJlYW0vaS50ZXN0KGhlYWRlcnMuYWNjZXB0KTtcbiAgaWYgKCFpc0JpbmFyeVJlcXVlc3QpIHtcbiAgICBpZiAob3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0KSB7XG4gICAgICBoZWFkZXJzLmFjY2VwdCA9IGhlYWRlcnMuYWNjZXB0LnNwbGl0KC8sLykubWFwKFxuICAgICAgICAoZm9ybWF0KSA9PiBmb3JtYXQucmVwbGFjZShcbiAgICAgICAgICAvYXBwbGljYXRpb25cXC92bmQoXFwuXFx3KykoXFwudjMpPyhcXC5cXHcrKT8oXFwranNvbik/JC8sXG4gICAgICAgICAgYGFwcGxpY2F0aW9uL3ZuZCQxJDIuJHtvcHRpb25zLm1lZGlhVHlwZS5mb3JtYXR9YFxuICAgICAgICApXG4gICAgICApLmpvaW4oXCIsXCIpO1xuICAgIH1cbiAgICBpZiAodXJsLmVuZHNXaXRoKFwiL2dyYXBocWxcIikpIHtcbiAgICAgIGlmIChvcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cz8ubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IHByZXZpZXdzRnJvbUFjY2VwdEhlYWRlciA9IGhlYWRlcnMuYWNjZXB0Lm1hdGNoKC8oPzwhW1xcdy1dKVtcXHctXSsoPz0tcHJldmlldykvZykgfHwgW107XG4gICAgICAgIGhlYWRlcnMuYWNjZXB0ID0gcHJldmlld3NGcm9tQWNjZXB0SGVhZGVyLmNvbmNhdChvcHRpb25zLm1lZGlhVHlwZS5wcmV2aWV3cykubWFwKChwcmV2aWV3KSA9PiB7XG4gICAgICAgICAgY29uc3QgZm9ybWF0ID0gb3B0aW9ucy5tZWRpYVR5cGUuZm9ybWF0ID8gYC4ke29wdGlvbnMubWVkaWFUeXBlLmZvcm1hdH1gIDogXCIranNvblwiO1xuICAgICAgICAgIHJldHVybiBgYXBwbGljYXRpb24vdm5kLmdpdGh1Yi4ke3ByZXZpZXd9LXByZXZpZXcke2Zvcm1hdH1gO1xuICAgICAgICB9KS5qb2luKFwiLFwiKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbiAgaWYgKFtcIkdFVFwiLCBcIkhFQURcIl0uaW5jbHVkZXMobWV0aG9kKSkge1xuICAgIHVybCA9IGFkZFF1ZXJ5UGFyYW1ldGVycyh1cmwsIHJlbWFpbmluZ1BhcmFtZXRlcnMpO1xuICB9IGVsc2Uge1xuICAgIGlmIChcImRhdGFcIiBpbiByZW1haW5pbmdQYXJhbWV0ZXJzKSB7XG4gICAgICBib2R5ID0gcmVtYWluaW5nUGFyYW1ldGVycy5kYXRhO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoT2JqZWN0LmtleXMocmVtYWluaW5nUGFyYW1ldGVycykubGVuZ3RoKSB7XG4gICAgICAgIGJvZHkgPSByZW1haW5pbmdQYXJhbWV0ZXJzO1xuICAgICAgfVxuICAgIH1cbiAgfVxuICBpZiAoIWhlYWRlcnNbXCJjb250ZW50LXR5cGVcIl0gJiYgdHlwZW9mIGJvZHkgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBoZWFkZXJzW1wiY29udGVudC10eXBlXCJdID0gXCJhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PXV0Zi04XCI7XG4gIH1cbiAgaWYgKFtcIlBBVENIXCIsIFwiUFVUXCJdLmluY2x1ZGVzKG1ldGhvZCkgJiYgdHlwZW9mIGJvZHkgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICBib2R5ID0gXCJcIjtcbiAgfVxuICByZXR1cm4gT2JqZWN0LmFzc2lnbihcbiAgICB7IG1ldGhvZCwgdXJsLCBoZWFkZXJzIH0sXG4gICAgdHlwZW9mIGJvZHkgIT09IFwidW5kZWZpbmVkXCIgPyB7IGJvZHkgfSA6IG51bGwsXG4gICAgb3B0aW9ucy5yZXF1ZXN0ID8geyByZXF1ZXN0OiBvcHRpb25zLnJlcXVlc3QgfSA6IG51bGxcbiAgKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2VuZHBvaW50LXdpdGgtZGVmYXVsdHMuanNcbmZ1bmN0aW9uIGVuZHBvaW50V2l0aERlZmF1bHRzKGRlZmF1bHRzLCByb3V0ZSwgb3B0aW9ucykge1xuICByZXR1cm4gcGFyc2UobWVyZ2UoZGVmYXVsdHMsIHJvdXRlLCBvcHRpb25zKSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG5mdW5jdGlvbiB3aXRoRGVmYXVsdHMob2xkRGVmYXVsdHMsIG5ld0RlZmF1bHRzKSB7XG4gIGNvbnN0IERFRkFVTFRTMiA9IG1lcmdlKG9sZERlZmF1bHRzLCBuZXdEZWZhdWx0cyk7XG4gIGNvbnN0IGVuZHBvaW50MiA9IGVuZHBvaW50V2l0aERlZmF1bHRzLmJpbmQobnVsbCwgREVGQVVMVFMyKTtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oZW5kcG9pbnQyLCB7XG4gICAgREVGQVVMVFM6IERFRkFVTFRTMixcbiAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgREVGQVVMVFMyKSxcbiAgICBtZXJnZTogbWVyZ2UuYmluZChudWxsLCBERUZBVUxUUzIpLFxuICAgIHBhcnNlXG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciBlbmRwb2ludCA9IHdpdGhEZWZhdWx0cyhudWxsLCBERUZBVUxUUyk7XG5leHBvcnQge1xuICBlbmRwb2ludFxufTtcbiIsICIvLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbmltcG9ydCB7IGVuZHBvaW50IH0gZnJvbSBcIkBvY3Rva2l0L2VuZHBvaW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy9kZWZhdWx0cy5qc1xuaW1wb3J0IHsgZ2V0VXNlckFnZW50IH0gZnJvbSBcInVuaXZlcnNhbC11c2VyLWFnZW50XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiOS4yLjRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2RlZmF1bHRzLmpzXG52YXIgZGVmYXVsdHNfZGVmYXVsdCA9IHtcbiAgaGVhZGVyczoge1xuICAgIFwidXNlci1hZ2VudFwiOiBgb2N0b2tpdC1yZXF1ZXN0LmpzLyR7VkVSU0lPTn0gJHtnZXRVc2VyQWdlbnQoKX1gXG4gIH1cbn07XG5cbi8vIHBrZy9kaXN0LXNyYy9mZXRjaC13cmFwcGVyLmpzXG5pbXBvcnQgeyBzYWZlUGFyc2UgfSBmcm9tIFwiZmFzdC1jb250ZW50LXR5cGUtcGFyc2VcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL2lzLXBsYWluLW9iamVjdC5qc1xuZnVuY3Rpb24gaXNQbGFpbk9iamVjdCh2YWx1ZSkge1xuICBpZiAodHlwZW9mIHZhbHVlICE9PSBcIm9iamVjdFwiIHx8IHZhbHVlID09PSBudWxsKSByZXR1cm4gZmFsc2U7XG4gIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodmFsdWUpICE9PSBcIltvYmplY3QgT2JqZWN0XVwiKSByZXR1cm4gZmFsc2U7XG4gIGNvbnN0IHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlKTtcbiAgaWYgKHByb3RvID09PSBudWxsKSByZXR1cm4gdHJ1ZTtcbiAgY29uc3QgQ3RvciA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChwcm90bywgXCJjb25zdHJ1Y3RvclwiKSAmJiBwcm90by5jb25zdHJ1Y3RvcjtcbiAgcmV0dXJuIHR5cGVvZiBDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgQ3RvciBpbnN0YW5jZW9mIEN0b3IgJiYgRnVuY3Rpb24ucHJvdG90eXBlLmNhbGwoQ3RvcikgPT09IEZ1bmN0aW9uLnByb3RvdHlwZS5jYWxsKHZhbHVlKTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2ZldGNoLXdyYXBwZXIuanNcbmltcG9ydCB7IFJlcXVlc3RFcnJvciB9IGZyb20gXCJAb2N0b2tpdC9yZXF1ZXN0LWVycm9yXCI7XG5hc3luYyBmdW5jdGlvbiBmZXRjaFdyYXBwZXIocmVxdWVzdE9wdGlvbnMpIHtcbiAgY29uc3QgZmV0Y2ggPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0Py5mZXRjaCB8fCBnbG9iYWxUaGlzLmZldGNoO1xuICBpZiAoIWZldGNoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgXCJmZXRjaCBpcyBub3Qgc2V0LiBQbGVhc2UgcGFzcyBhIGZldGNoIGltcGxlbWVudGF0aW9uIGFzIG5ldyBPY3Rva2l0KHsgcmVxdWVzdDogeyBmZXRjaCB9fSkuIExlYXJuIG1vcmUgYXQgaHR0cHM6Ly9naXRodWIuY29tL29jdG9raXQvb2N0b2tpdC5qcy8jZmV0Y2gtbWlzc2luZ1wiXG4gICAgKTtcbiAgfVxuICBjb25zdCBsb2cgPSByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0Py5sb2cgfHwgY29uc29sZTtcbiAgY29uc3QgcGFyc2VTdWNjZXNzUmVzcG9uc2VCb2R5ID0gcmVxdWVzdE9wdGlvbnMucmVxdWVzdD8ucGFyc2VTdWNjZXNzUmVzcG9uc2VCb2R5ICE9PSBmYWxzZTtcbiAgY29uc3QgYm9keSA9IGlzUGxhaW5PYmplY3QocmVxdWVzdE9wdGlvbnMuYm9keSkgfHwgQXJyYXkuaXNBcnJheShyZXF1ZXN0T3B0aW9ucy5ib2R5KSA/IEpTT04uc3RyaW5naWZ5KHJlcXVlc3RPcHRpb25zLmJvZHkpIDogcmVxdWVzdE9wdGlvbnMuYm9keTtcbiAgY29uc3QgcmVxdWVzdEhlYWRlcnMgPSBPYmplY3QuZnJvbUVudHJpZXMoXG4gICAgT2JqZWN0LmVudHJpZXMocmVxdWVzdE9wdGlvbnMuaGVhZGVycykubWFwKChbbmFtZSwgdmFsdWVdKSA9PiBbXG4gICAgICBuYW1lLFxuICAgICAgU3RyaW5nKHZhbHVlKVxuICAgIF0pXG4gICk7XG4gIGxldCBmZXRjaFJlc3BvbnNlO1xuICB0cnkge1xuICAgIGZldGNoUmVzcG9uc2UgPSBhd2FpdCBmZXRjaChyZXF1ZXN0T3B0aW9ucy51cmwsIHtcbiAgICAgIG1ldGhvZDogcmVxdWVzdE9wdGlvbnMubWV0aG9kLFxuICAgICAgYm9keSxcbiAgICAgIHJlZGlyZWN0OiByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0Py5yZWRpcmVjdCxcbiAgICAgIGhlYWRlcnM6IHJlcXVlc3RIZWFkZXJzLFxuICAgICAgc2lnbmFsOiByZXF1ZXN0T3B0aW9ucy5yZXF1ZXN0Py5zaWduYWwsXG4gICAgICAvLyBkdXBsZXggbXVzdCBiZSBzZXQgaWYgcmVxdWVzdC5ib2R5IGlzIFJlYWRhYmxlU3RyZWFtIG9yIEFzeW5jIEl0ZXJhYmxlcy5cbiAgICAgIC8vIFNlZSBodHRwczovL2ZldGNoLnNwZWMud2hhdHdnLm9yZy8jZG9tLXJlcXVlc3Rpbml0LWR1cGxleC5cbiAgICAgIC4uLnJlcXVlc3RPcHRpb25zLmJvZHkgJiYgeyBkdXBsZXg6IFwiaGFsZlwiIH1cbiAgICB9KTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBsZXQgbWVzc2FnZSA9IFwiVW5rbm93biBFcnJvclwiO1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICBpZiAoZXJyb3IubmFtZSA9PT0gXCJBYm9ydEVycm9yXCIpIHtcbiAgICAgICAgZXJyb3Iuc3RhdHVzID0gNTAwO1xuICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgIH1cbiAgICAgIG1lc3NhZ2UgPSBlcnJvci5tZXNzYWdlO1xuICAgICAgaWYgKGVycm9yLm5hbWUgPT09IFwiVHlwZUVycm9yXCIgJiYgXCJjYXVzZVwiIGluIGVycm9yKSB7XG4gICAgICAgIGlmIChlcnJvci5jYXVzZSBpbnN0YW5jZW9mIEVycm9yKSB7XG4gICAgICAgICAgbWVzc2FnZSA9IGVycm9yLmNhdXNlLm1lc3NhZ2U7XG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVycm9yLmNhdXNlID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgbWVzc2FnZSA9IGVycm9yLmNhdXNlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IHJlcXVlc3RFcnJvciA9IG5ldyBSZXF1ZXN0RXJyb3IobWVzc2FnZSwgNTAwLCB7XG4gICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0aW9uc1xuICAgIH0pO1xuICAgIHJlcXVlc3RFcnJvci5jYXVzZSA9IGVycm9yO1xuICAgIHRocm93IHJlcXVlc3RFcnJvcjtcbiAgfVxuICBjb25zdCBzdGF0dXMgPSBmZXRjaFJlc3BvbnNlLnN0YXR1cztcbiAgY29uc3QgdXJsID0gZmV0Y2hSZXNwb25zZS51cmw7XG4gIGNvbnN0IHJlc3BvbnNlSGVhZGVycyA9IHt9O1xuICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBmZXRjaFJlc3BvbnNlLmhlYWRlcnMpIHtcbiAgICByZXNwb25zZUhlYWRlcnNba2V5XSA9IHZhbHVlO1xuICB9XG4gIGNvbnN0IG9jdG9raXRSZXNwb25zZSA9IHtcbiAgICB1cmwsXG4gICAgc3RhdHVzLFxuICAgIGhlYWRlcnM6IHJlc3BvbnNlSGVhZGVycyxcbiAgICBkYXRhOiBcIlwiXG4gIH07XG4gIGlmIChcImRlcHJlY2F0aW9uXCIgaW4gcmVzcG9uc2VIZWFkZXJzKSB7XG4gICAgY29uc3QgbWF0Y2hlcyA9IHJlc3BvbnNlSGVhZGVycy5saW5rICYmIHJlc3BvbnNlSGVhZGVycy5saW5rLm1hdGNoKC88KFtePD5dKyk+OyByZWw9XCJkZXByZWNhdGlvblwiLyk7XG4gICAgY29uc3QgZGVwcmVjYXRpb25MaW5rID0gbWF0Y2hlcyAmJiBtYXRjaGVzLnBvcCgpO1xuICAgIGxvZy53YXJuKFxuICAgICAgYFtAb2N0b2tpdC9yZXF1ZXN0XSBcIiR7cmVxdWVzdE9wdGlvbnMubWV0aG9kfSAke3JlcXVlc3RPcHRpb25zLnVybH1cIiBpcyBkZXByZWNhdGVkLiBJdCBpcyBzY2hlZHVsZWQgdG8gYmUgcmVtb3ZlZCBvbiAke3Jlc3BvbnNlSGVhZGVycy5zdW5zZXR9JHtkZXByZWNhdGlvbkxpbmsgPyBgLiBTZWUgJHtkZXByZWNhdGlvbkxpbmt9YCA6IFwiXCJ9YFxuICAgICk7XG4gIH1cbiAgaWYgKHN0YXR1cyA9PT0gMjA0IHx8IHN0YXR1cyA9PT0gMjA1KSB7XG4gICAgcmV0dXJuIG9jdG9raXRSZXNwb25zZTtcbiAgfVxuICBpZiAocmVxdWVzdE9wdGlvbnMubWV0aG9kID09PSBcIkhFQURcIikge1xuICAgIGlmIChzdGF0dXMgPCA0MDApIHtcbiAgICAgIHJldHVybiBvY3Rva2l0UmVzcG9uc2U7XG4gICAgfVxuICAgIHRocm93IG5ldyBSZXF1ZXN0RXJyb3IoZmV0Y2hSZXNwb25zZS5zdGF0dXNUZXh0LCBzdGF0dXMsIHtcbiAgICAgIHJlc3BvbnNlOiBvY3Rva2l0UmVzcG9uc2UsXG4gICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0aW9uc1xuICAgIH0pO1xuICB9XG4gIGlmIChzdGF0dXMgPT09IDMwNCkge1xuICAgIG9jdG9raXRSZXNwb25zZS5kYXRhID0gYXdhaXQgZ2V0UmVzcG9uc2VEYXRhKGZldGNoUmVzcG9uc2UpO1xuICAgIHRocm93IG5ldyBSZXF1ZXN0RXJyb3IoXCJOb3QgbW9kaWZpZWRcIiwgc3RhdHVzLCB7XG4gICAgICByZXNwb25zZTogb2N0b2tpdFJlc3BvbnNlLFxuICAgICAgcmVxdWVzdDogcmVxdWVzdE9wdGlvbnNcbiAgICB9KTtcbiAgfVxuICBpZiAoc3RhdHVzID49IDQwMCkge1xuICAgIG9jdG9raXRSZXNwb25zZS5kYXRhID0gYXdhaXQgZ2V0UmVzcG9uc2VEYXRhKGZldGNoUmVzcG9uc2UpO1xuICAgIHRocm93IG5ldyBSZXF1ZXN0RXJyb3IodG9FcnJvck1lc3NhZ2Uob2N0b2tpdFJlc3BvbnNlLmRhdGEpLCBzdGF0dXMsIHtcbiAgICAgIHJlc3BvbnNlOiBvY3Rva2l0UmVzcG9uc2UsXG4gICAgICByZXF1ZXN0OiByZXF1ZXN0T3B0aW9uc1xuICAgIH0pO1xuICB9XG4gIG9jdG9raXRSZXNwb25zZS5kYXRhID0gcGFyc2VTdWNjZXNzUmVzcG9uc2VCb2R5ID8gYXdhaXQgZ2V0UmVzcG9uc2VEYXRhKGZldGNoUmVzcG9uc2UpIDogZmV0Y2hSZXNwb25zZS5ib2R5O1xuICByZXR1cm4gb2N0b2tpdFJlc3BvbnNlO1xufVxuYXN5bmMgZnVuY3Rpb24gZ2V0UmVzcG9uc2VEYXRhKHJlc3BvbnNlKSB7XG4gIGNvbnN0IGNvbnRlbnRUeXBlID0gcmVzcG9uc2UuaGVhZGVycy5nZXQoXCJjb250ZW50LXR5cGVcIik7XG4gIGlmICghY29udGVudFR5cGUpIHtcbiAgICByZXR1cm4gcmVzcG9uc2UudGV4dCgpLmNhdGNoKCgpID0+IFwiXCIpO1xuICB9XG4gIGNvbnN0IG1pbWV0eXBlID0gc2FmZVBhcnNlKGNvbnRlbnRUeXBlKTtcbiAgaWYgKGlzSlNPTlJlc3BvbnNlKG1pbWV0eXBlKSkge1xuICAgIGxldCB0ZXh0ID0gXCJcIjtcbiAgICB0cnkge1xuICAgICAgdGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTtcbiAgICAgIHJldHVybiBKU09OLnBhcnNlKHRleHQpO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgcmV0dXJuIHRleHQ7XG4gICAgfVxuICB9IGVsc2UgaWYgKG1pbWV0eXBlLnR5cGUuc3RhcnRzV2l0aChcInRleHQvXCIpIHx8IG1pbWV0eXBlLnBhcmFtZXRlcnMuY2hhcnNldD8udG9Mb3dlckNhc2UoKSA9PT0gXCJ1dGYtOFwiKSB7XG4gICAgcmV0dXJuIHJlc3BvbnNlLnRleHQoKS5jYXRjaCgoKSA9PiBcIlwiKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gcmVzcG9uc2UuYXJyYXlCdWZmZXIoKS5jYXRjaCgoKSA9PiBuZXcgQXJyYXlCdWZmZXIoMCkpO1xuICB9XG59XG5mdW5jdGlvbiBpc0pTT05SZXNwb25zZShtaW1ldHlwZSkge1xuICByZXR1cm4gbWltZXR5cGUudHlwZSA9PT0gXCJhcHBsaWNhdGlvbi9qc29uXCIgfHwgbWltZXR5cGUudHlwZSA9PT0gXCJhcHBsaWNhdGlvbi9zY2ltK2pzb25cIjtcbn1cbmZ1bmN0aW9uIHRvRXJyb3JNZXNzYWdlKGRhdGEpIHtcbiAgaWYgKHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiKSB7XG4gICAgcmV0dXJuIGRhdGE7XG4gIH1cbiAgaWYgKGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikge1xuICAgIHJldHVybiBcIlVua25vd24gZXJyb3JcIjtcbiAgfVxuICBpZiAoXCJtZXNzYWdlXCIgaW4gZGF0YSkge1xuICAgIGNvbnN0IHN1ZmZpeCA9IFwiZG9jdW1lbnRhdGlvbl91cmxcIiBpbiBkYXRhID8gYCAtICR7ZGF0YS5kb2N1bWVudGF0aW9uX3VybH1gIDogXCJcIjtcbiAgICByZXR1cm4gQXJyYXkuaXNBcnJheShkYXRhLmVycm9ycykgPyBgJHtkYXRhLm1lc3NhZ2V9OiAke2RhdGEuZXJyb3JzLm1hcCgodikgPT4gSlNPTi5zdHJpbmdpZnkodikpLmpvaW4oXCIsIFwiKX0ke3N1ZmZpeH1gIDogYCR7ZGF0YS5tZXNzYWdlfSR7c3VmZml4fWA7XG4gIH1cbiAgcmV0dXJuIGBVbmtub3duIGVycm9yOiAke0pTT04uc3RyaW5naWZ5KGRhdGEpfWA7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy93aXRoLWRlZmF1bHRzLmpzXG5mdW5jdGlvbiB3aXRoRGVmYXVsdHMob2xkRW5kcG9pbnQsIG5ld0RlZmF1bHRzKSB7XG4gIGNvbnN0IGVuZHBvaW50MiA9IG9sZEVuZHBvaW50LmRlZmF1bHRzKG5ld0RlZmF1bHRzKTtcbiAgY29uc3QgbmV3QXBpID0gZnVuY3Rpb24ocm91dGUsIHBhcmFtZXRlcnMpIHtcbiAgICBjb25zdCBlbmRwb2ludE9wdGlvbnMgPSBlbmRwb2ludDIubWVyZ2Uocm91dGUsIHBhcmFtZXRlcnMpO1xuICAgIGlmICghZW5kcG9pbnRPcHRpb25zLnJlcXVlc3QgfHwgIWVuZHBvaW50T3B0aW9ucy5yZXF1ZXN0Lmhvb2spIHtcbiAgICAgIHJldHVybiBmZXRjaFdyYXBwZXIoZW5kcG9pbnQyLnBhcnNlKGVuZHBvaW50T3B0aW9ucykpO1xuICAgIH1cbiAgICBjb25zdCByZXF1ZXN0MiA9IChyb3V0ZTIsIHBhcmFtZXRlcnMyKSA9PiB7XG4gICAgICByZXR1cm4gZmV0Y2hXcmFwcGVyKFxuICAgICAgICBlbmRwb2ludDIucGFyc2UoZW5kcG9pbnQyLm1lcmdlKHJvdXRlMiwgcGFyYW1ldGVyczIpKVxuICAgICAgKTtcbiAgICB9O1xuICAgIE9iamVjdC5hc3NpZ24ocmVxdWVzdDIsIHtcbiAgICAgIGVuZHBvaW50OiBlbmRwb2ludDIsXG4gICAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgZW5kcG9pbnQyKVxuICAgIH0pO1xuICAgIHJldHVybiBlbmRwb2ludE9wdGlvbnMucmVxdWVzdC5ob29rKHJlcXVlc3QyLCBlbmRwb2ludE9wdGlvbnMpO1xuICB9O1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXdBcGksIHtcbiAgICBlbmRwb2ludDogZW5kcG9pbnQyLFxuICAgIGRlZmF1bHRzOiB3aXRoRGVmYXVsdHMuYmluZChudWxsLCBlbmRwb2ludDIpXG4gIH0pO1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbnZhciByZXF1ZXN0ID0gd2l0aERlZmF1bHRzKGVuZHBvaW50LCBkZWZhdWx0c19kZWZhdWx0KTtcbmV4cG9ydCB7XG4gIHJlcXVlc3Rcbn07XG4iLCAiY2xhc3MgUmVxdWVzdEVycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBuYW1lO1xuICAvKipcbiAgICogaHR0cCBzdGF0dXMgY29kZVxuICAgKi9cbiAgc3RhdHVzO1xuICAvKipcbiAgICogUmVxdWVzdCBvcHRpb25zIHRoYXQgbGVhZCB0byB0aGUgZXJyb3IuXG4gICAqL1xuICByZXF1ZXN0O1xuICAvKipcbiAgICogUmVzcG9uc2Ugb2JqZWN0IGlmIGEgcmVzcG9uc2Ugd2FzIHJlY2VpdmVkXG4gICAqL1xuICByZXNwb25zZTtcbiAgY29uc3RydWN0b3IobWVzc2FnZSwgc3RhdHVzQ29kZSwgb3B0aW9ucykge1xuICAgIHN1cGVyKG1lc3NhZ2UpO1xuICAgIHRoaXMubmFtZSA9IFwiSHR0cEVycm9yXCI7XG4gICAgdGhpcy5zdGF0dXMgPSBOdW1iZXIucGFyc2VJbnQoc3RhdHVzQ29kZSk7XG4gICAgaWYgKE51bWJlci5pc05hTih0aGlzLnN0YXR1cykpIHtcbiAgICAgIHRoaXMuc3RhdHVzID0gMDtcbiAgICB9XG4gICAgaWYgKFwicmVzcG9uc2VcIiBpbiBvcHRpb25zKSB7XG4gICAgICB0aGlzLnJlc3BvbnNlID0gb3B0aW9ucy5yZXNwb25zZTtcbiAgICB9XG4gICAgY29uc3QgcmVxdWVzdENvcHkgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLnJlcXVlc3QpO1xuICAgIGlmIChvcHRpb25zLnJlcXVlc3QuaGVhZGVycy5hdXRob3JpemF0aW9uKSB7XG4gICAgICByZXF1ZXN0Q29weS5oZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMsIHtcbiAgICAgICAgYXV0aG9yaXphdGlvbjogb3B0aW9ucy5yZXF1ZXN0LmhlYWRlcnMuYXV0aG9yaXphdGlvbi5yZXBsYWNlKFxuICAgICAgICAgIC8oPzwhICkgLiokLyxcbiAgICAgICAgICBcIiBbUkVEQUNURURdXCJcbiAgICAgICAgKVxuICAgICAgfSk7XG4gICAgfVxuICAgIHJlcXVlc3RDb3B5LnVybCA9IHJlcXVlc3RDb3B5LnVybC5yZXBsYWNlKC9cXGJjbGllbnRfc2VjcmV0PVxcdysvZywgXCJjbGllbnRfc2VjcmV0PVtSRURBQ1RFRF1cIikucmVwbGFjZSgvXFxiYWNjZXNzX3Rva2VuPVxcdysvZywgXCJhY2Nlc3NfdG9rZW49W1JFREFDVEVEXVwiKTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0Q29weTtcbiAgfVxufVxuZXhwb3J0IHtcbiAgUmVxdWVzdEVycm9yXG59O1xuIiwgIi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xuaW1wb3J0IHsgcmVxdWVzdCB9IGZyb20gXCJAb2N0b2tpdC9yZXF1ZXN0XCI7XG5pbXBvcnQgeyBnZXRVc2VyQWdlbnQgfSBmcm9tIFwidW5pdmVyc2FsLXVzZXItYWdlbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL3ZlcnNpb24uanNcbnZhciBWRVJTSU9OID0gXCIwLjAuMC1kZXZlbG9wbWVudFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvd2l0aC1kZWZhdWx0cy5qc1xuaW1wb3J0IHsgcmVxdWVzdCBhcyBSZXF1ZXN0MiB9IGZyb20gXCJAb2N0b2tpdC9yZXF1ZXN0XCI7XG5cbi8vIHBrZy9kaXN0LXNyYy9ncmFwaHFsLmpzXG5pbXBvcnQgeyByZXF1ZXN0IGFzIFJlcXVlc3QgfSBmcm9tIFwiQG9jdG9raXQvcmVxdWVzdFwiO1xuXG4vLyBwa2cvZGlzdC1zcmMvZXJyb3IuanNcbmZ1bmN0aW9uIF9idWlsZE1lc3NhZ2VGb3JSZXNwb25zZUVycm9ycyhkYXRhKSB7XG4gIHJldHVybiBgUmVxdWVzdCBmYWlsZWQgZHVlIHRvIGZvbGxvd2luZyByZXNwb25zZSBlcnJvcnM6XG5gICsgZGF0YS5lcnJvcnMubWFwKChlKSA9PiBgIC0gJHtlLm1lc3NhZ2V9YCkuam9pbihcIlxcblwiKTtcbn1cbnZhciBHcmFwaHFsUmVzcG9uc2VFcnJvciA9IGNsYXNzIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZXF1ZXN0MiwgaGVhZGVycywgcmVzcG9uc2UpIHtcbiAgICBzdXBlcihfYnVpbGRNZXNzYWdlRm9yUmVzcG9uc2VFcnJvcnMocmVzcG9uc2UpKTtcbiAgICB0aGlzLnJlcXVlc3QgPSByZXF1ZXN0MjtcbiAgICB0aGlzLmhlYWRlcnMgPSBoZWFkZXJzO1xuICAgIHRoaXMucmVzcG9uc2UgPSByZXNwb25zZTtcbiAgICB0aGlzLmVycm9ycyA9IHJlc3BvbnNlLmVycm9ycztcbiAgICB0aGlzLmRhdGEgPSByZXNwb25zZS5kYXRhO1xuICAgIGlmIChFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSkge1xuICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7XG4gICAgfVxuICB9XG4gIG5hbWUgPSBcIkdyYXBocWxSZXNwb25zZUVycm9yXCI7XG4gIGVycm9ycztcbiAgZGF0YTtcbn07XG5cbi8vIHBrZy9kaXN0LXNyYy9ncmFwaHFsLmpzXG52YXIgTk9OX1ZBUklBQkxFX09QVElPTlMgPSBbXG4gIFwibWV0aG9kXCIsXG4gIFwiYmFzZVVybFwiLFxuICBcInVybFwiLFxuICBcImhlYWRlcnNcIixcbiAgXCJyZXF1ZXN0XCIsXG4gIFwicXVlcnlcIixcbiAgXCJtZWRpYVR5cGVcIixcbiAgXCJvcGVyYXRpb25OYW1lXCJcbl07XG52YXIgRk9SQklEREVOX1ZBUklBQkxFX09QVElPTlMgPSBbXCJxdWVyeVwiLCBcIm1ldGhvZFwiLCBcInVybFwiXTtcbnZhciBHSEVTX1YzX1NVRkZJWF9SRUdFWCA9IC9cXC9hcGlcXC92M1xcLz8kLztcbmZ1bmN0aW9uIGdyYXBocWwocmVxdWVzdDIsIHF1ZXJ5LCBvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zKSB7XG4gICAgaWYgKHR5cGVvZiBxdWVyeSA9PT0gXCJzdHJpbmdcIiAmJiBcInF1ZXJ5XCIgaW4gb3B0aW9ucykge1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgICBuZXcgRXJyb3IoYFtAb2N0b2tpdC9ncmFwaHFsXSBcInF1ZXJ5XCIgY2Fubm90IGJlIHVzZWQgYXMgdmFyaWFibGUgbmFtZWApXG4gICAgICApO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBvcHRpb25zKSB7XG4gICAgICBpZiAoIUZPUkJJRERFTl9WQVJJQUJMRV9PUFRJT05TLmluY2x1ZGVzKGtleSkpIGNvbnRpbnVlO1xuICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KFxuICAgICAgICBuZXcgRXJyb3IoXG4gICAgICAgICAgYFtAb2N0b2tpdC9ncmFwaHFsXSBcIiR7a2V5fVwiIGNhbm5vdCBiZSB1c2VkIGFzIHZhcmlhYmxlIG5hbWVgXG4gICAgICAgIClcbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGNvbnN0IHBhcnNlZE9wdGlvbnMgPSB0eXBlb2YgcXVlcnkgPT09IFwic3RyaW5nXCIgPyBPYmplY3QuYXNzaWduKHsgcXVlcnkgfSwgb3B0aW9ucykgOiBxdWVyeTtcbiAgY29uc3QgcmVxdWVzdE9wdGlvbnMgPSBPYmplY3Qua2V5cyhcbiAgICBwYXJzZWRPcHRpb25zXG4gICkucmVkdWNlKChyZXN1bHQsIGtleSkgPT4ge1xuICAgIGlmIChOT05fVkFSSUFCTEVfT1BUSU9OUy5pbmNsdWRlcyhrZXkpKSB7XG4gICAgICByZXN1bHRba2V5XSA9IHBhcnNlZE9wdGlvbnNba2V5XTtcbiAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgfVxuICAgIGlmICghcmVzdWx0LnZhcmlhYmxlcykge1xuICAgICAgcmVzdWx0LnZhcmlhYmxlcyA9IHt9O1xuICAgIH1cbiAgICByZXN1bHQudmFyaWFibGVzW2tleV0gPSBwYXJzZWRPcHRpb25zW2tleV07XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfSwge30pO1xuICBjb25zdCBiYXNlVXJsID0gcGFyc2VkT3B0aW9ucy5iYXNlVXJsIHx8IHJlcXVlc3QyLmVuZHBvaW50LkRFRkFVTFRTLmJhc2VVcmw7XG4gIGlmIChHSEVTX1YzX1NVRkZJWF9SRUdFWC50ZXN0KGJhc2VVcmwpKSB7XG4gICAgcmVxdWVzdE9wdGlvbnMudXJsID0gYmFzZVVybC5yZXBsYWNlKEdIRVNfVjNfU1VGRklYX1JFR0VYLCBcIi9hcGkvZ3JhcGhxbFwiKTtcbiAgfVxuICByZXR1cm4gcmVxdWVzdDIocmVxdWVzdE9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgaWYgKHJlc3BvbnNlLmRhdGEuZXJyb3JzKSB7XG4gICAgICBjb25zdCBoZWFkZXJzID0ge307XG4gICAgICBmb3IgKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhyZXNwb25zZS5oZWFkZXJzKSkge1xuICAgICAgICBoZWFkZXJzW2tleV0gPSByZXNwb25zZS5oZWFkZXJzW2tleV07XG4gICAgICB9XG4gICAgICB0aHJvdyBuZXcgR3JhcGhxbFJlc3BvbnNlRXJyb3IoXG4gICAgICAgIHJlcXVlc3RPcHRpb25zLFxuICAgICAgICBoZWFkZXJzLFxuICAgICAgICByZXNwb25zZS5kYXRhXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzcG9uc2UuZGF0YS5kYXRhO1xuICB9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL3dpdGgtZGVmYXVsdHMuanNcbmZ1bmN0aW9uIHdpdGhEZWZhdWx0cyhyZXF1ZXN0MiwgbmV3RGVmYXVsdHMpIHtcbiAgY29uc3QgbmV3UmVxdWVzdCA9IHJlcXVlc3QyLmRlZmF1bHRzKG5ld0RlZmF1bHRzKTtcbiAgY29uc3QgbmV3QXBpID0gKHF1ZXJ5LCBvcHRpb25zKSA9PiB7XG4gICAgcmV0dXJuIGdyYXBocWwobmV3UmVxdWVzdCwgcXVlcnksIG9wdGlvbnMpO1xuICB9O1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbihuZXdBcGksIHtcbiAgICBkZWZhdWx0czogd2l0aERlZmF1bHRzLmJpbmQobnVsbCwgbmV3UmVxdWVzdCksXG4gICAgZW5kcG9pbnQ6IG5ld1JlcXVlc3QuZW5kcG9pbnRcbiAgfSk7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pbmRleC5qc1xudmFyIGdyYXBocWwyID0gd2l0aERlZmF1bHRzKHJlcXVlc3QsIHtcbiAgaGVhZGVyczoge1xuICAgIFwidXNlci1hZ2VudFwiOiBgb2N0b2tpdC1ncmFwaHFsLmpzLyR7VkVSU0lPTn0gJHtnZXRVc2VyQWdlbnQoKX1gXG4gIH0sXG4gIG1ldGhvZDogXCJQT1NUXCIsXG4gIHVybDogXCIvZ3JhcGhxbFwiXG59KTtcbmZ1bmN0aW9uIHdpdGhDdXN0b21SZXF1ZXN0KGN1c3RvbVJlcXVlc3QpIHtcbiAgcmV0dXJuIHdpdGhEZWZhdWx0cyhjdXN0b21SZXF1ZXN0LCB7XG4gICAgbWV0aG9kOiBcIlBPU1RcIixcbiAgICB1cmw6IFwiL2dyYXBocWxcIlxuICB9KTtcbn1cbmV4cG9ydCB7XG4gIEdyYXBocWxSZXNwb25zZUVycm9yLFxuICBncmFwaHFsMiBhcyBncmFwaHFsLFxuICB3aXRoQ3VzdG9tUmVxdWVzdFxufTtcbiIsICIvLyBwa2cvZGlzdC1zcmMvaXMtand0LmpzXG52YXIgYjY0dXJsID0gXCIoPzpbYS16QS1aMC05Xy1dKylcIjtcbnZhciBzZXAgPSBcIlxcXFwuXCI7XG52YXIgand0UkUgPSBuZXcgUmVnRXhwKGBeJHtiNjR1cmx9JHtzZXB9JHtiNjR1cmx9JHtzZXB9JHtiNjR1cmx9JGApO1xudmFyIGlzSldUID0gand0UkUudGVzdC5iaW5kKGp3dFJFKTtcblxuLy8gcGtnL2Rpc3Qtc3JjL2F1dGguanNcbmFzeW5jIGZ1bmN0aW9uIGF1dGgodG9rZW4pIHtcbiAgY29uc3QgaXNBcHAgPSBpc0pXVCh0b2tlbik7XG4gIGNvbnN0IGlzSW5zdGFsbGF0aW9uID0gdG9rZW4uc3RhcnRzV2l0aChcInYxLlwiKSB8fCB0b2tlbi5zdGFydHNXaXRoKFwiZ2hzX1wiKTtcbiAgY29uc3QgaXNVc2VyVG9TZXJ2ZXIgPSB0b2tlbi5zdGFydHNXaXRoKFwiZ2h1X1wiKTtcbiAgY29uc3QgdG9rZW5UeXBlID0gaXNBcHAgPyBcImFwcFwiIDogaXNJbnN0YWxsYXRpb24gPyBcImluc3RhbGxhdGlvblwiIDogaXNVc2VyVG9TZXJ2ZXIgPyBcInVzZXItdG8tc2VydmVyXCIgOiBcIm9hdXRoXCI7XG4gIHJldHVybiB7XG4gICAgdHlwZTogXCJ0b2tlblwiLFxuICAgIHRva2VuLFxuICAgIHRva2VuVHlwZVxuICB9O1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvd2l0aC1hdXRob3JpemF0aW9uLXByZWZpeC5qc1xuZnVuY3Rpb24gd2l0aEF1dGhvcml6YXRpb25QcmVmaXgodG9rZW4pIHtcbiAgaWYgKHRva2VuLnNwbGl0KC9cXC4vKS5sZW5ndGggPT09IDMpIHtcbiAgICByZXR1cm4gYGJlYXJlciAke3Rva2VufWA7XG4gIH1cbiAgcmV0dXJuIGB0b2tlbiAke3Rva2VufWA7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9ob29rLmpzXG5hc3luYyBmdW5jdGlvbiBob29rKHRva2VuLCByZXF1ZXN0LCByb3V0ZSwgcGFyYW1ldGVycykge1xuICBjb25zdCBlbmRwb2ludCA9IHJlcXVlc3QuZW5kcG9pbnQubWVyZ2UoXG4gICAgcm91dGUsXG4gICAgcGFyYW1ldGVyc1xuICApO1xuICBlbmRwb2ludC5oZWFkZXJzLmF1dGhvcml6YXRpb24gPSB3aXRoQXV0aG9yaXphdGlvblByZWZpeCh0b2tlbik7XG4gIHJldHVybiByZXF1ZXN0KGVuZHBvaW50KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2luZGV4LmpzXG52YXIgY3JlYXRlVG9rZW5BdXRoID0gZnVuY3Rpb24gY3JlYXRlVG9rZW5BdXRoMih0b2tlbikge1xuICBpZiAoIXRva2VuKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiW0BvY3Rva2l0L2F1dGgtdG9rZW5dIE5vIHRva2VuIHBhc3NlZCB0byBjcmVhdGVUb2tlbkF1dGhcIik7XG4gIH1cbiAgaWYgKHR5cGVvZiB0b2tlbiAhPT0gXCJzdHJpbmdcIikge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIFwiW0BvY3Rva2l0L2F1dGgtdG9rZW5dIFRva2VuIHBhc3NlZCB0byBjcmVhdGVUb2tlbkF1dGggaXMgbm90IGEgc3RyaW5nXCJcbiAgICApO1xuICB9XG4gIHRva2VuID0gdG9rZW4ucmVwbGFjZSgvXih0b2tlbnxiZWFyZXIpICsvaSwgXCJcIik7XG4gIHJldHVybiBPYmplY3QuYXNzaWduKGF1dGguYmluZChudWxsLCB0b2tlbiksIHtcbiAgICBob29rOiBob29rLmJpbmQobnVsbCwgdG9rZW4pXG4gIH0pO1xufTtcbmV4cG9ydCB7XG4gIGNyZWF0ZVRva2VuQXV0aFxufTtcbiIsICJjb25zdCBWRVJTSU9OID0gXCI2LjEuNlwiO1xuZXhwb3J0IHtcbiAgVkVSU0lPTlxufTtcbiIsICJpbXBvcnQgeyBnZXRVc2VyQWdlbnQgfSBmcm9tIFwidW5pdmVyc2FsLXVzZXItYWdlbnRcIjtcbmltcG9ydCBIb29rIGZyb20gXCJiZWZvcmUtYWZ0ZXItaG9va1wiO1xuaW1wb3J0IHsgcmVxdWVzdCB9IGZyb20gXCJAb2N0b2tpdC9yZXF1ZXN0XCI7XG5pbXBvcnQgeyB3aXRoQ3VzdG9tUmVxdWVzdCB9IGZyb20gXCJAb2N0b2tpdC9ncmFwaHFsXCI7XG5pbXBvcnQgeyBjcmVhdGVUb2tlbkF1dGggfSBmcm9tIFwiQG9jdG9raXQvYXV0aC10b2tlblwiO1xuaW1wb3J0IHsgVkVSU0lPTiB9IGZyb20gXCIuL3ZlcnNpb24uanNcIjtcbmNvbnN0IG5vb3AgPSAoKSA9PiB7XG59O1xuY29uc3QgY29uc29sZVdhcm4gPSBjb25zb2xlLndhcm4uYmluZChjb25zb2xlKTtcbmNvbnN0IGNvbnNvbGVFcnJvciA9IGNvbnNvbGUuZXJyb3IuYmluZChjb25zb2xlKTtcbmZ1bmN0aW9uIGNyZWF0ZUxvZ2dlcihsb2dnZXIgPSB7fSkge1xuICBpZiAodHlwZW9mIGxvZ2dlci5kZWJ1ZyAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbG9nZ2VyLmRlYnVnID0gbm9vcDtcbiAgfVxuICBpZiAodHlwZW9mIGxvZ2dlci5pbmZvICE9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICBsb2dnZXIuaW5mbyA9IG5vb3A7XG4gIH1cbiAgaWYgKHR5cGVvZiBsb2dnZXIud2FybiAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbG9nZ2VyLndhcm4gPSBjb25zb2xlV2FybjtcbiAgfVxuICBpZiAodHlwZW9mIGxvZ2dlci5lcnJvciAhPT0gXCJmdW5jdGlvblwiKSB7XG4gICAgbG9nZ2VyLmVycm9yID0gY29uc29sZUVycm9yO1xuICB9XG4gIHJldHVybiBsb2dnZXI7XG59XG5jb25zdCB1c2VyQWdlbnRUcmFpbCA9IGBvY3Rva2l0LWNvcmUuanMvJHtWRVJTSU9OfSAke2dldFVzZXJBZ2VudCgpfWA7XG5jbGFzcyBPY3Rva2l0IHtcbiAgc3RhdGljIFZFUlNJT04gPSBWRVJTSU9OO1xuICBzdGF0aWMgZGVmYXVsdHMoZGVmYXVsdHMpIHtcbiAgICBjb25zdCBPY3Rva2l0V2l0aERlZmF1bHRzID0gY2xhc3MgZXh0ZW5kcyB0aGlzIHtcbiAgICAgIGNvbnN0cnVjdG9yKC4uLmFyZ3MpIHtcbiAgICAgICAgY29uc3Qgb3B0aW9ucyA9IGFyZ3NbMF0gfHwge307XG4gICAgICAgIGlmICh0eXBlb2YgZGVmYXVsdHMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAgIHN1cGVyKGRlZmF1bHRzKG9wdGlvbnMpKTtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgc3VwZXIoXG4gICAgICAgICAgT2JqZWN0LmFzc2lnbihcbiAgICAgICAgICAgIHt9LFxuICAgICAgICAgICAgZGVmYXVsdHMsXG4gICAgICAgICAgICBvcHRpb25zLFxuICAgICAgICAgICAgb3B0aW9ucy51c2VyQWdlbnQgJiYgZGVmYXVsdHMudXNlckFnZW50ID8ge1xuICAgICAgICAgICAgICB1c2VyQWdlbnQ6IGAke29wdGlvbnMudXNlckFnZW50fSAke2RlZmF1bHRzLnVzZXJBZ2VudH1gXG4gICAgICAgICAgICB9IDogbnVsbFxuICAgICAgICAgIClcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiBPY3Rva2l0V2l0aERlZmF1bHRzO1xuICB9XG4gIHN0YXRpYyBwbHVnaW5zID0gW107XG4gIC8qKlxuICAgKiBBdHRhY2ggYSBwbHVnaW4gKG9yIG1hbnkpIHRvIHlvdXIgT2N0b2tpdCBpbnN0YW5jZS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogY29uc3QgQVBJID0gT2N0b2tpdC5wbHVnaW4ocGx1Z2luMSwgcGx1Z2luMiwgcGx1Z2luMywgLi4uKVxuICAgKi9cbiAgc3RhdGljIHBsdWdpbiguLi5uZXdQbHVnaW5zKSB7XG4gICAgY29uc3QgY3VycmVudFBsdWdpbnMgPSB0aGlzLnBsdWdpbnM7XG4gICAgY29uc3QgTmV3T2N0b2tpdCA9IGNsYXNzIGV4dGVuZHMgdGhpcyB7XG4gICAgICBzdGF0aWMgcGx1Z2lucyA9IGN1cnJlbnRQbHVnaW5zLmNvbmNhdChcbiAgICAgICAgbmV3UGx1Z2lucy5maWx0ZXIoKHBsdWdpbikgPT4gIWN1cnJlbnRQbHVnaW5zLmluY2x1ZGVzKHBsdWdpbikpXG4gICAgICApO1xuICAgIH07XG4gICAgcmV0dXJuIE5ld09jdG9raXQ7XG4gIH1cbiAgY29uc3RydWN0b3Iob3B0aW9ucyA9IHt9KSB7XG4gICAgY29uc3QgaG9vayA9IG5ldyBIb29rLkNvbGxlY3Rpb24oKTtcbiAgICBjb25zdCByZXF1ZXN0RGVmYXVsdHMgPSB7XG4gICAgICBiYXNlVXJsOiByZXF1ZXN0LmVuZHBvaW50LkRFRkFVTFRTLmJhc2VVcmwsXG4gICAgICBoZWFkZXJzOiB7fSxcbiAgICAgIHJlcXVlc3Q6IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMucmVxdWVzdCwge1xuICAgICAgICAvLyBAdHMtaWdub3JlIGludGVybmFsIHVzYWdlIG9ubHksIG5vIG5lZWQgdG8gdHlwZVxuICAgICAgICBob29rOiBob29rLmJpbmQobnVsbCwgXCJyZXF1ZXN0XCIpXG4gICAgICB9KSxcbiAgICAgIG1lZGlhVHlwZToge1xuICAgICAgICBwcmV2aWV3czogW10sXG4gICAgICAgIGZvcm1hdDogXCJcIlxuICAgICAgfVxuICAgIH07XG4gICAgcmVxdWVzdERlZmF1bHRzLmhlYWRlcnNbXCJ1c2VyLWFnZW50XCJdID0gb3B0aW9ucy51c2VyQWdlbnQgPyBgJHtvcHRpb25zLnVzZXJBZ2VudH0gJHt1c2VyQWdlbnRUcmFpbH1gIDogdXNlckFnZW50VHJhaWw7XG4gICAgaWYgKG9wdGlvbnMuYmFzZVVybCkge1xuICAgICAgcmVxdWVzdERlZmF1bHRzLmJhc2VVcmwgPSBvcHRpb25zLmJhc2VVcmw7XG4gICAgfVxuICAgIGlmIChvcHRpb25zLnByZXZpZXdzKSB7XG4gICAgICByZXF1ZXN0RGVmYXVsdHMubWVkaWFUeXBlLnByZXZpZXdzID0gb3B0aW9ucy5wcmV2aWV3cztcbiAgICB9XG4gICAgaWYgKG9wdGlvbnMudGltZVpvbmUpIHtcbiAgICAgIHJlcXVlc3REZWZhdWx0cy5oZWFkZXJzW1widGltZS16b25lXCJdID0gb3B0aW9ucy50aW1lWm9uZTtcbiAgICB9XG4gICAgdGhpcy5yZXF1ZXN0ID0gcmVxdWVzdC5kZWZhdWx0cyhyZXF1ZXN0RGVmYXVsdHMpO1xuICAgIHRoaXMuZ3JhcGhxbCA9IHdpdGhDdXN0b21SZXF1ZXN0KHRoaXMucmVxdWVzdCkuZGVmYXVsdHMocmVxdWVzdERlZmF1bHRzKTtcbiAgICB0aGlzLmxvZyA9IGNyZWF0ZUxvZ2dlcihvcHRpb25zLmxvZyk7XG4gICAgdGhpcy5ob29rID0gaG9vaztcbiAgICBpZiAoIW9wdGlvbnMuYXV0aFN0cmF0ZWd5KSB7XG4gICAgICBpZiAoIW9wdGlvbnMuYXV0aCkge1xuICAgICAgICB0aGlzLmF1dGggPSBhc3luYyAoKSA9PiAoe1xuICAgICAgICAgIHR5cGU6IFwidW5hdXRoZW50aWNhdGVkXCJcbiAgICAgICAgfSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb25zdCBhdXRoID0gY3JlYXRlVG9rZW5BdXRoKG9wdGlvbnMuYXV0aCk7XG4gICAgICAgIGhvb2sud3JhcChcInJlcXVlc3RcIiwgYXV0aC5ob29rKTtcbiAgICAgICAgdGhpcy5hdXRoID0gYXV0aDtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgeyBhdXRoU3RyYXRlZ3ksIC4uLm90aGVyT3B0aW9ucyB9ID0gb3B0aW9ucztcbiAgICAgIGNvbnN0IGF1dGggPSBhdXRoU3RyYXRlZ3koXG4gICAgICAgIE9iamVjdC5hc3NpZ24oXG4gICAgICAgICAge1xuICAgICAgICAgICAgcmVxdWVzdDogdGhpcy5yZXF1ZXN0LFxuICAgICAgICAgICAgbG9nOiB0aGlzLmxvZyxcbiAgICAgICAgICAgIC8vIHdlIHBhc3MgdGhlIGN1cnJlbnQgb2N0b2tpdCBpbnN0YW5jZSBhcyB3ZWxsIGFzIGl0cyBjb25zdHJ1Y3RvciBvcHRpb25zXG4gICAgICAgICAgICAvLyB0byBhbGxvdyBmb3IgYXV0aGVudGljYXRpb24gc3RyYXRlZ2llcyB0aGF0IHJldHVybiBhIG5ldyBvY3Rva2l0IGluc3RhbmNlXG4gICAgICAgICAgICAvLyB0aGF0IHNoYXJlcyB0aGUgc2FtZSBpbnRlcm5hbCBzdGF0ZSBhcyB0aGUgY3VycmVudCBvbmUuIFRoZSBvcmlnaW5hbFxuICAgICAgICAgICAgLy8gcmVxdWlyZW1lbnQgZm9yIHRoaXMgd2FzIHRoZSBcImV2ZW50LW9jdG9raXRcIiBhdXRoZW50aWNhdGlvbiBzdHJhdGVneVxuICAgICAgICAgICAgLy8gb2YgaHR0cHM6Ly9naXRodWIuY29tL3Byb2JvdC9vY3Rva2l0LWF1dGgtcHJvYm90LlxuICAgICAgICAgICAgb2N0b2tpdDogdGhpcyxcbiAgICAgICAgICAgIG9jdG9raXRPcHRpb25zOiBvdGhlck9wdGlvbnNcbiAgICAgICAgICB9LFxuICAgICAgICAgIG9wdGlvbnMuYXV0aFxuICAgICAgICApXG4gICAgICApO1xuICAgICAgaG9vay53cmFwKFwicmVxdWVzdFwiLCBhdXRoLmhvb2spO1xuICAgICAgdGhpcy5hdXRoID0gYXV0aDtcbiAgICB9XG4gICAgY29uc3QgY2xhc3NDb25zdHJ1Y3RvciA9IHRoaXMuY29uc3RydWN0b3I7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjbGFzc0NvbnN0cnVjdG9yLnBsdWdpbnMubGVuZ3RoOyArK2kpIHtcbiAgICAgIE9iamVjdC5hc3NpZ24odGhpcywgY2xhc3NDb25zdHJ1Y3Rvci5wbHVnaW5zW2ldKHRoaXMsIG9wdGlvbnMpKTtcbiAgICB9XG4gIH1cbiAgLy8gYXNzaWduZWQgZHVyaW5nIGNvbnN0cnVjdG9yXG4gIHJlcXVlc3Q7XG4gIGdyYXBocWw7XG4gIGxvZztcbiAgaG9vaztcbiAgLy8gVE9ETzogdHlwZSBgb2N0b2tpdC5hdXRoYCBiYXNlZCBvbiBwYXNzZWQgb3B0aW9ucy5hdXRoU3RyYXRlZ3lcbiAgYXV0aDtcbn1cbmV4cG9ydCB7XG4gIE9jdG9raXRcbn07XG4iLCAiY29uc3QgVkVSU0lPTiA9IFwiNS4zLjFcIjtcbmV4cG9ydCB7XG4gIFZFUlNJT05cbn07XG4iLCAiaW1wb3J0IHsgVkVSU0lPTiB9IGZyb20gXCIuL3ZlcnNpb24uanNcIjtcbmZ1bmN0aW9uIHJlcXVlc3RMb2cob2N0b2tpdCkge1xuICBvY3Rva2l0Lmhvb2sud3JhcChcInJlcXVlc3RcIiwgKHJlcXVlc3QsIG9wdGlvbnMpID0+IHtcbiAgICBvY3Rva2l0LmxvZy5kZWJ1ZyhcInJlcXVlc3RcIiwgb3B0aW9ucyk7XG4gICAgY29uc3Qgc3RhcnQgPSBEYXRlLm5vdygpO1xuICAgIGNvbnN0IHJlcXVlc3RPcHRpb25zID0gb2N0b2tpdC5yZXF1ZXN0LmVuZHBvaW50LnBhcnNlKG9wdGlvbnMpO1xuICAgIGNvbnN0IHBhdGggPSByZXF1ZXN0T3B0aW9ucy51cmwucmVwbGFjZShvcHRpb25zLmJhc2VVcmwsIFwiXCIpO1xuICAgIHJldHVybiByZXF1ZXN0KG9wdGlvbnMpLnRoZW4oKHJlc3BvbnNlKSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0SWQgPSByZXNwb25zZS5oZWFkZXJzW1wieC1naXRodWItcmVxdWVzdC1pZFwiXTtcbiAgICAgIG9jdG9raXQubG9nLmluZm8oXG4gICAgICAgIGAke3JlcXVlc3RPcHRpb25zLm1ldGhvZH0gJHtwYXRofSAtICR7cmVzcG9uc2Uuc3RhdHVzfSB3aXRoIGlkICR7cmVxdWVzdElkfSBpbiAke0RhdGUubm93KCkgLSBzdGFydH1tc2BcbiAgICAgICk7XG4gICAgICByZXR1cm4gcmVzcG9uc2U7XG4gICAgfSkuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICBjb25zdCByZXF1ZXN0SWQgPSBlcnJvci5yZXNwb25zZT8uaGVhZGVyc1tcIngtZ2l0aHViLXJlcXVlc3QtaWRcIl0gfHwgXCJVTktOT1dOXCI7XG4gICAgICBvY3Rva2l0LmxvZy5lcnJvcihcbiAgICAgICAgYCR7cmVxdWVzdE9wdGlvbnMubWV0aG9kfSAke3BhdGh9IC0gJHtlcnJvci5zdGF0dXN9IHdpdGggaWQgJHtyZXF1ZXN0SWR9IGluICR7RGF0ZS5ub3coKSAtIHN0YXJ0fW1zYFxuICAgICAgKTtcbiAgICAgIHRocm93IGVycm9yO1xuICAgIH0pO1xuICB9KTtcbn1cbnJlcXVlc3RMb2cuVkVSU0lPTiA9IFZFUlNJT047XG5leHBvcnQge1xuICByZXF1ZXN0TG9nXG59O1xuIiwgIi8vIHBrZy9kaXN0LXNyYy92ZXJzaW9uLmpzXG52YXIgVkVSU0lPTiA9IFwiMC4wLjAtZGV2ZWxvcG1lbnRcIjtcblxuLy8gcGtnL2Rpc3Qtc3JjL25vcm1hbGl6ZS1wYWdpbmF0ZWQtbGlzdC1yZXNwb25zZS5qc1xuZnVuY3Rpb24gbm9ybWFsaXplUGFnaW5hdGVkTGlzdFJlc3BvbnNlKHJlc3BvbnNlKSB7XG4gIGlmICghcmVzcG9uc2UuZGF0YSkge1xuICAgIHJldHVybiB7XG4gICAgICAuLi5yZXNwb25zZSxcbiAgICAgIGRhdGE6IFtdXG4gICAgfTtcbiAgfVxuICBjb25zdCByZXNwb25zZU5lZWRzTm9ybWFsaXphdGlvbiA9IFwidG90YWxfY291bnRcIiBpbiByZXNwb25zZS5kYXRhICYmICEoXCJ1cmxcIiBpbiByZXNwb25zZS5kYXRhKTtcbiAgaWYgKCFyZXNwb25zZU5lZWRzTm9ybWFsaXphdGlvbikgcmV0dXJuIHJlc3BvbnNlO1xuICBjb25zdCBpbmNvbXBsZXRlUmVzdWx0cyA9IHJlc3BvbnNlLmRhdGEuaW5jb21wbGV0ZV9yZXN1bHRzO1xuICBjb25zdCByZXBvc2l0b3J5U2VsZWN0aW9uID0gcmVzcG9uc2UuZGF0YS5yZXBvc2l0b3J5X3NlbGVjdGlvbjtcbiAgY29uc3QgdG90YWxDb3VudCA9IHJlc3BvbnNlLmRhdGEudG90YWxfY291bnQ7XG4gIGRlbGV0ZSByZXNwb25zZS5kYXRhLmluY29tcGxldGVfcmVzdWx0cztcbiAgZGVsZXRlIHJlc3BvbnNlLmRhdGEucmVwb3NpdG9yeV9zZWxlY3Rpb247XG4gIGRlbGV0ZSByZXNwb25zZS5kYXRhLnRvdGFsX2NvdW50O1xuICBjb25zdCBuYW1lc3BhY2VLZXkgPSBPYmplY3Qua2V5cyhyZXNwb25zZS5kYXRhKVswXTtcbiAgY29uc3QgZGF0YSA9IHJlc3BvbnNlLmRhdGFbbmFtZXNwYWNlS2V5XTtcbiAgcmVzcG9uc2UuZGF0YSA9IGRhdGE7XG4gIGlmICh0eXBlb2YgaW5jb21wbGV0ZVJlc3VsdHMgIT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXNwb25zZS5kYXRhLmluY29tcGxldGVfcmVzdWx0cyA9IGluY29tcGxldGVSZXN1bHRzO1xuICB9XG4gIGlmICh0eXBlb2YgcmVwb3NpdG9yeVNlbGVjdGlvbiAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgIHJlc3BvbnNlLmRhdGEucmVwb3NpdG9yeV9zZWxlY3Rpb24gPSByZXBvc2l0b3J5U2VsZWN0aW9uO1xuICB9XG4gIHJlc3BvbnNlLmRhdGEudG90YWxfY291bnQgPSB0b3RhbENvdW50O1xuICByZXR1cm4gcmVzcG9uc2U7XG59XG5cbi8vIHBrZy9kaXN0LXNyYy9pdGVyYXRvci5qc1xuZnVuY3Rpb24gaXRlcmF0b3Iob2N0b2tpdCwgcm91dGUsIHBhcmFtZXRlcnMpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHR5cGVvZiByb3V0ZSA9PT0gXCJmdW5jdGlvblwiID8gcm91dGUuZW5kcG9pbnQocGFyYW1ldGVycykgOiBvY3Rva2l0LnJlcXVlc3QuZW5kcG9pbnQocm91dGUsIHBhcmFtZXRlcnMpO1xuICBjb25zdCByZXF1ZXN0TWV0aG9kID0gdHlwZW9mIHJvdXRlID09PSBcImZ1bmN0aW9uXCIgPyByb3V0ZSA6IG9jdG9raXQucmVxdWVzdDtcbiAgY29uc3QgbWV0aG9kID0gb3B0aW9ucy5tZXRob2Q7XG4gIGNvbnN0IGhlYWRlcnMgPSBvcHRpb25zLmhlYWRlcnM7XG4gIGxldCB1cmwgPSBvcHRpb25zLnVybDtcbiAgcmV0dXJuIHtcbiAgICBbU3ltYm9sLmFzeW5jSXRlcmF0b3JdOiAoKSA9PiAoe1xuICAgICAgYXN5bmMgbmV4dCgpIHtcbiAgICAgICAgaWYgKCF1cmwpIHJldHVybiB7IGRvbmU6IHRydWUgfTtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHJlcXVlc3RNZXRob2QoeyBtZXRob2QsIHVybCwgaGVhZGVycyB9KTtcbiAgICAgICAgICBjb25zdCBub3JtYWxpemVkUmVzcG9uc2UgPSBub3JtYWxpemVQYWdpbmF0ZWRMaXN0UmVzcG9uc2UocmVzcG9uc2UpO1xuICAgICAgICAgIHVybCA9ICgobm9ybWFsaXplZFJlc3BvbnNlLmhlYWRlcnMubGluayB8fCBcIlwiKS5tYXRjaChcbiAgICAgICAgICAgIC88KFtePD5dKyk+O1xccypyZWw9XCJuZXh0XCIvXG4gICAgICAgICAgKSB8fCBbXSlbMV07XG4gICAgICAgICAgcmV0dXJuIHsgdmFsdWU6IG5vcm1hbGl6ZWRSZXNwb25zZSB9O1xuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIGlmIChlcnJvci5zdGF0dXMgIT09IDQwOSkgdGhyb3cgZXJyb3I7XG4gICAgICAgICAgdXJsID0gXCJcIjtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgdmFsdWU6IHtcbiAgICAgICAgICAgICAgc3RhdHVzOiAyMDAsXG4gICAgICAgICAgICAgIGhlYWRlcnM6IHt9LFxuICAgICAgICAgICAgICBkYXRhOiBbXVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9KVxuICB9O1xufVxuXG4vLyBwa2cvZGlzdC1zcmMvcGFnaW5hdGUuanNcbmZ1bmN0aW9uIHBhZ2luYXRlKG9jdG9raXQsIHJvdXRlLCBwYXJhbWV0ZXJzLCBtYXBGbikge1xuICBpZiAodHlwZW9mIHBhcmFtZXRlcnMgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIG1hcEZuID0gcGFyYW1ldGVycztcbiAgICBwYXJhbWV0ZXJzID0gdm9pZCAwO1xuICB9XG4gIHJldHVybiBnYXRoZXIoXG4gICAgb2N0b2tpdCxcbiAgICBbXSxcbiAgICBpdGVyYXRvcihvY3Rva2l0LCByb3V0ZSwgcGFyYW1ldGVycylbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCksXG4gICAgbWFwRm5cbiAgKTtcbn1cbmZ1bmN0aW9uIGdhdGhlcihvY3Rva2l0LCByZXN1bHRzLCBpdGVyYXRvcjIsIG1hcEZuKSB7XG4gIHJldHVybiBpdGVyYXRvcjIubmV4dCgpLnRoZW4oKHJlc3VsdCkgPT4ge1xuICAgIGlmIChyZXN1bHQuZG9uZSkge1xuICAgICAgcmV0dXJuIHJlc3VsdHM7XG4gICAgfVxuICAgIGxldCBlYXJseUV4aXQgPSBmYWxzZTtcbiAgICBmdW5jdGlvbiBkb25lKCkge1xuICAgICAgZWFybHlFeGl0ID0gdHJ1ZTtcbiAgICB9XG4gICAgcmVzdWx0cyA9IHJlc3VsdHMuY29uY2F0KFxuICAgICAgbWFwRm4gPyBtYXBGbihyZXN1bHQudmFsdWUsIGRvbmUpIDogcmVzdWx0LnZhbHVlLmRhdGFcbiAgICApO1xuICAgIGlmIChlYXJseUV4aXQpIHtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cbiAgICByZXR1cm4gZ2F0aGVyKG9jdG9raXQsIHJlc3VsdHMsIGl0ZXJhdG9yMiwgbWFwRm4pO1xuICB9KTtcbn1cblxuLy8gcGtnL2Rpc3Qtc3JjL2NvbXBvc2UtcGFnaW5hdGUuanNcbnZhciBjb21wb3NlUGFnaW5hdGVSZXN0ID0gT2JqZWN0LmFzc2lnbihwYWdpbmF0ZSwge1xuICBpdGVyYXRvclxufSk7XG5cbi8vIHBrZy9kaXN0LXNyYy9nZW5lcmF0ZWQvcGFnaW5hdGluZy1lbmRwb2ludHMuanNcbnZhciBwYWdpbmF0aW5nRW5kcG9pbnRzID0gW1xuICBcIkdFVCAvYWR2aXNvcmllc1wiLFxuICBcIkdFVCAvYXBwL2hvb2svZGVsaXZlcmllc1wiLFxuICBcIkdFVCAvYXBwL2luc3RhbGxhdGlvbi1yZXF1ZXN0c1wiLFxuICBcIkdFVCAvYXBwL2luc3RhbGxhdGlvbnNcIixcbiAgXCJHRVQgL2Fzc2lnbm1lbnRzL3thc3NpZ25tZW50X2lkfS9hY2NlcHRlZF9hc3NpZ25tZW50c1wiLFxuICBcIkdFVCAvY2xhc3Nyb29tc1wiLFxuICBcIkdFVCAvY2xhc3Nyb29tcy97Y2xhc3Nyb29tX2lkfS9hc3NpZ25tZW50c1wiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnNcIixcbiAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9kZXBlbmRhYm90L2FsZXJ0c1wiLFxuICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L3NlY3JldC1zY2FubmluZy9hbGVydHNcIixcbiAgXCJHRVQgL2V2ZW50c1wiLFxuICBcIkdFVCAvZ2lzdHNcIixcbiAgXCJHRVQgL2dpc3RzL3B1YmxpY1wiLFxuICBcIkdFVCAvZ2lzdHMvc3RhcnJlZFwiLFxuICBcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWl0c1wiLFxuICBcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L2ZvcmtzXCIsXG4gIFwiR0VUIC9pbnN0YWxsYXRpb24vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9pc3N1ZXNcIixcbiAgXCJHRVQgL2xpY2Vuc2VzXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiLFxuICBcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zXCIsXG4gIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvcGxhbnMve3BsYW5faWR9L2FjY291bnRzXCIsXG4gIFwiR0VUIC9uZXR3b3Jrcy97b3duZXJ9L3tyZXBvfS9ldmVudHNcIixcbiAgXCJHRVQgL25vdGlmaWNhdGlvbnNcIixcbiAgXCJHRVQgL29yZ2FuaXphdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9jYWNoZS91c2FnZS1ieS1yZXBvc2l0b3J5XCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXItZ3JvdXBzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyLWdyb3Vwcy97cnVubmVyX2dyb3VwX2lkfS9ob3N0ZWQtcnVubmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lci1ncm91cHMve3J1bm5lcl9ncm91cF9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyLWdyb3Vwcy97cnVubmVyX2dyb3VwX2lkfS9ydW5uZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYXR0ZXN0YXRpb25zL3tzdWJqZWN0X2RpZ2VzdH1cIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vYmxvY2tzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGUtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VhdHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9tZXRyaWNzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2NvcGlsb3QvdXNhZ2VcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9hbGVydHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9ldmVudHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vZmFpbGVkX2ludml0YXRpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2hvb2tzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L2luc2lnaHRzL2FwaS9yb3V0ZS1zdGF0cy97YWN0b3JfdHlwZX0ve2FjdG9yX2lkfVwiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pbnNpZ2h0cy9hcGkvc3ViamVjdC1zdGF0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pbnNpZ2h0cy9hcGkvdXNlci1zdGF0cy97dXNlcl9pZH1cIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaW5zdGFsbGF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH0vdGVhbXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vaXNzdWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9L2NvZGVzcGFjZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vbWlncmF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9L3RlYW1zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy97cm9sZV9pZH0vdXNlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbi1yZXF1ZXN0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHMve3BhdF9yZXF1ZXN0X2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2Vuc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zL3twYXRfaWR9L3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9wcml2YXRlLXJlZ2lzdHJpZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcHJvamVjdHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy92YWx1ZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcmVwb3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMvcnVsZS1zdWl0ZXNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9L2hpc3RvcnlcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS9zZWN1cml0eS1hZHZpc29yaWVzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstY29uZmlndXJhdGlvbnNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbS97dGVhbV9zbHVnfS9jb3BpbG90L21ldHJpY3NcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbS97dGVhbV9zbHVnfS9jb3BpbG90L3VzYWdlXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHNcIixcbiAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9pbnZpdGF0aW9uc1wiLFxuICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9tZW1iZXJzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3JlcG9zXCIsXG4gIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3RlYW1zXCIsXG4gIFwiR0VUIC9wcm9qZWN0cy9jb2x1bW5zL3tjb2x1bW5faWR9L2NhcmRzXCIsXG4gIFwiR0VUIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9yc1wiLFxuICBcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbHVtbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vcmdhbml6YXRpb24tc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vcmdhbml6YXRpb24tdmFyaWFibGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVuc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2FydGlmYWN0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2F0dGVtcHRzL3thdHRlbXB0X251bWJlcn0vam9ic1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2pvYnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvc2VjcmV0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L3J1bnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGl2aXR5XCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F0dGVzdGF0aW9ucy97c3ViamVjdF9kaWdlc3R9XCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfS9hbm5vdGF0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3tjaGVja19zdWl0ZV9pZH0vY2hlY2stcnVuc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2luc3RhbmNlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9kZXZjb250YWluZXJzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9jb21tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vcHVsbHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stcnVuc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9jaGVjay1zdWl0ZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vc3RhdHVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250cmlidXRvcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3QvYWxlcnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50LWJyYW5jaC1wb2xpY2llc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXMvYXBwc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZXZlbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9mb3Jrc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3NcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnZpdGF0aW9uc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvZXZlbnRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9ldmVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9zdWJfaXNzdWVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vdGltZWxpbmVcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn0vbGFiZWxzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ub3RpZmljYXRpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb2plY3RzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxsc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWl0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9maWxlc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH0vY29tbWVudHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlcy9icmFuY2hlcy97YnJhbmNofVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy97cnVsZXNldF9pZH0vaGlzdG9yeVwiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9sb2NhdGlvbnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXJnYXplcnNcIixcbiAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmliZXJzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzXCIsXG4gIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90ZWFtc1wiLFxuICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdG9waWNzXCIsXG4gIFwiR0VUIC9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL3NlYXJjaC9jb2RlXCIsXG4gIFwiR0VUIC9zZWFyY2gvY29tbWl0c1wiLFxuICBcIkdFVCAvc2VhcmNoL2lzc3Vlc1wiLFxuICBcIkdFVCAvc2VhcmNoL2xhYmVsc1wiLFxuICBcIkdFVCAvc2VhcmNoL3JlcG9zaXRvcmllc1wiLFxuICBcIkdFVCAvc2VhcmNoL3RvcGljc1wiLFxuICBcIkdFVCAvc2VhcmNoL3VzZXJzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9tZW1iZXJzXCIsXG4gIFwiR0VUIC90ZWFtcy97dGVhbV9pZH0vcHJvamVjdHNcIixcbiAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9yZXBvc1wiLFxuICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L3RlYW1zXCIsXG4gIFwiR0VUIC91c2VyL2Jsb2Nrc1wiLFxuICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzXCIsXG4gIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0c1wiLFxuICBcIkdFVCAvdXNlci9lbWFpbHNcIixcbiAgXCJHRVQgL3VzZXIvZm9sbG93ZXJzXCIsXG4gIFwiR0VUIC91c2VyL2ZvbGxvd2luZ1wiLFxuICBcIkdFVCAvdXNlci9ncGdfa2V5c1wiLFxuICBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zXCIsXG4gIFwiR0VUIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gIFwiR0VUIC91c2VyL2lzc3Vlc1wiLFxuICBcIkdFVCAvdXNlci9rZXlzXCIsXG4gIFwiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlc1wiLFxuICBcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXMvc3R1YmJlZFwiLFxuICBcIkdFVCAvdXNlci9tZW1iZXJzaGlwcy9vcmdzXCIsXG4gIFwiR0VUIC91c2VyL21pZ3JhdGlvbnNcIixcbiAgXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgXCJHRVQgL3VzZXIvb3Jnc1wiLFxuICBcIkdFVCAvdXNlci9wYWNrYWdlc1wiLFxuICBcIkdFVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9uc1wiLFxuICBcIkdFVCAvdXNlci9wdWJsaWNfZW1haWxzXCIsXG4gIFwiR0VUIC91c2VyL3JlcG9zXCIsXG4gIFwiR0VUIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnNcIixcbiAgXCJHRVQgL3VzZXIvc29jaWFsX2FjY291bnRzXCIsXG4gIFwiR0VUIC91c2VyL3NzaF9zaWduaW5nX2tleXNcIixcbiAgXCJHRVQgL3VzZXIvc3RhcnJlZFwiLFxuICBcIkdFVCAvdXNlci9zdWJzY3JpcHRpb25zXCIsXG4gIFwiR0VUIC91c2VyL3RlYW1zXCIsXG4gIFwiR0VUIC91c2Vyc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9hdHRlc3RhdGlvbnMve3N1YmplY3RfZGlnZXN0fVwiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9ldmVudHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL29yZ3Mve29yZ31cIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL3B1YmxpY1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dlcnNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93aW5nXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dpc3RzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dwZ19rZXlzXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2tleXNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vb3Jnc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzL3B1YmxpY1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZXBvc1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zb2NpYWxfYWNjb3VudHNcIixcbiAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vc3NoX3NpZ25pbmdfa2V5c1wiLFxuICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdGFycmVkXCIsXG4gIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3N1YnNjcmlwdGlvbnNcIlxuXTtcblxuLy8gcGtnL2Rpc3Qtc3JjL3BhZ2luYXRpbmctZW5kcG9pbnRzLmpzXG5mdW5jdGlvbiBpc1BhZ2luYXRpbmdFbmRwb2ludChhcmcpIHtcbiAgaWYgKHR5cGVvZiBhcmcgPT09IFwic3RyaW5nXCIpIHtcbiAgICByZXR1cm4gcGFnaW5hdGluZ0VuZHBvaW50cy5pbmNsdWRlcyhhcmcpO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vLyBwa2cvZGlzdC1zcmMvaW5kZXguanNcbmZ1bmN0aW9uIHBhZ2luYXRlUmVzdChvY3Rva2l0KSB7XG4gIHJldHVybiB7XG4gICAgcGFnaW5hdGU6IE9iamVjdC5hc3NpZ24ocGFnaW5hdGUuYmluZChudWxsLCBvY3Rva2l0KSwge1xuICAgICAgaXRlcmF0b3I6IGl0ZXJhdG9yLmJpbmQobnVsbCwgb2N0b2tpdClcbiAgICB9KVxuICB9O1xufVxucGFnaW5hdGVSZXN0LlZFUlNJT04gPSBWRVJTSU9OO1xuZXhwb3J0IHtcbiAgY29tcG9zZVBhZ2luYXRlUmVzdCxcbiAgaXNQYWdpbmF0aW5nRW5kcG9pbnQsXG4gIHBhZ2luYXRlUmVzdCxcbiAgcGFnaW5hdGluZ0VuZHBvaW50c1xufTtcbiIsICJleHBvcnQgY29uc3QgVkVSU0lPTiA9IFwiMTMuNS4wXCI7XG4iLCAiaW1wb3J0IHR5cGUgeyBFbmRwb2ludHNEZWZhdWx0c0FuZERlY29yYXRpb25zIH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG5jb25zdCBFbmRwb2ludHM6IEVuZHBvaW50c0RlZmF1bHRzQW5kRGVjb3JhdGlvbnMgPSB7XG4gIGFjdGlvbnM6IHtcbiAgICBhZGRDdXN0b21MYWJlbHNUb1NlbGZIb3N0ZWRSdW5uZXJGb3JPcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBhZGRDdXN0b21MYWJlbHNUb1NlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVycy97cnVubmVyX2lkfS9sYWJlbHNcIixcbiAgICBdLFxuICAgIGFkZFJlcG9BY2Nlc3NUb1NlbGZIb3N0ZWRSdW5uZXJHcm91cEluT3JnOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lci1ncm91cHMve3J1bm5lcl9ncm91cF9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgYWRkU2VsZWN0ZWRSZXBvVG9PcmdTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICBdLFxuICAgIGFkZFNlbGVjdGVkUmVwb1RvT3JnVmFyaWFibGU6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvdmFyaWFibGVzL3tuYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBhcHByb3ZlV29ya2Zsb3dSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2FwcHJvdmVcIixcbiAgICBdLFxuICAgIGNhbmNlbFdvcmtmbG93UnVuOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9jYW5jZWxcIixcbiAgICBdLFxuICAgIGNyZWF0ZUVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS92YXJpYWJsZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZUhvc3RlZFJ1bm5lckZvck9yZzogW1wiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlRW52aXJvbm1lbnRTZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlT3JVcGRhdGVPcmdTZWNyZXQ6IFtcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBjcmVhdGVPclVwZGF0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlT3JnVmFyaWFibGU6IFtcIlBPU1QgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXNcIl0sXG4gICAgY3JlYXRlUmVnaXN0cmF0aW9uVG9rZW5Gb3JPcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvcmVnaXN0cmF0aW9uLXRva2VuXCIsXG4gICAgXSxcbiAgICBjcmVhdGVSZWdpc3RyYXRpb25Ub2tlbkZvclJlcG86IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3JlZ2lzdHJhdGlvbi10b2tlblwiLFxuICAgIF0sXG4gICAgY3JlYXRlUmVtb3ZlVG9rZW5Gb3JPcmc6IFtcIlBPU1QgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3JlbW92ZS10b2tlblwiXSxcbiAgICBjcmVhdGVSZW1vdmVUb2tlbkZvclJlcG86IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3JlbW92ZS10b2tlblwiLFxuICAgIF0sXG4gICAgY3JlYXRlUmVwb1ZhcmlhYmxlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3ZhcmlhYmxlc1wiXSxcbiAgICBjcmVhdGVXb3JrZmxvd0Rpc3BhdGNoOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvd29ya2Zsb3dzL3t3b3JrZmxvd19pZH0vZGlzcGF0Y2hlc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlQWN0aW9uc0NhY2hlQnlJZDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvY2FjaGVzL3tjYWNoZV9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUFjdGlvbnNDYWNoZUJ5S2V5OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9jYWNoZXN7P2tleSxyZWZ9XCIsXG4gICAgXSxcbiAgICBkZWxldGVBcnRpZmFjdDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzL3thcnRpZmFjdF9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUVudmlyb25tZW50U2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3ZhcmlhYmxlcy97bmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9ob3N0ZWQtcnVubmVycy97aG9zdGVkX3J1bm5lcl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZU9yZ1ZhcmlhYmxlOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlUmVwb1ZhcmlhYmxlOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCIsXG4gICAgXSxcbiAgICBkZWxldGVTZWxmSG9zdGVkUnVubmVyRnJvbU9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVTZWxmSG9zdGVkUnVubmVyRnJvbVJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZVdvcmtmbG93UnVuOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfVwiXSxcbiAgICBkZWxldGVXb3JrZmxvd1J1bkxvZ3M6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vbG9nc1wiLFxuICAgIF0sXG4gICAgZGlzYWJsZVNlbGVjdGVkUmVwb3NpdG9yeUdpdGh1YkFjdGlvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgZGlzYWJsZVdvcmtmbG93OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9kaXNhYmxlXCIsXG4gICAgXSxcbiAgICBkb3dubG9hZEFydGlmYWN0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHMve2FydGlmYWN0X2lkfS97YXJjaGl2ZV9mb3JtYXR9XCIsXG4gICAgXSxcbiAgICBkb3dubG9hZEpvYkxvZ3NGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvam9icy97am9iX2lkfS9sb2dzXCIsXG4gICAgXSxcbiAgICBkb3dubG9hZFdvcmtmbG93UnVuQXR0ZW1wdExvZ3M6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfS9sb2dzXCIsXG4gICAgXSxcbiAgICBkb3dubG9hZFdvcmtmbG93UnVuTG9nczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9sb2dzXCIsXG4gICAgXSxcbiAgICBlbmFibGVTZWxlY3RlZFJlcG9zaXRvcnlHaXRodWJBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3JlcG9zaXRvcmllcy97cmVwb3NpdG9yeV9pZH1cIixcbiAgICBdLFxuICAgIGVuYWJsZVdvcmtmbG93OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9lbmFibGVcIixcbiAgICBdLFxuICAgIGZvcmNlQ2FuY2VsV29ya2Zsb3dSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2ZvcmNlLWNhbmNlbFwiLFxuICAgIF0sXG4gICAgZ2VuZXJhdGVSdW5uZXJKaXRjb25maWdGb3JPcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMvZ2VuZXJhdGUtaml0Y29uZmlnXCIsXG4gICAgXSxcbiAgICBnZW5lcmF0ZVJ1bm5lckppdGNvbmZpZ0ZvclJlcG86IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL2dlbmVyYXRlLWppdGNvbmZpZ1wiLFxuICAgIF0sXG4gICAgZ2V0QWN0aW9uc0NhY2hlTGlzdDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlc1wiXSxcbiAgICBnZXRBY3Rpb25zQ2FjaGVVc2FnZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2NhY2hlL3VzYWdlXCJdLFxuICAgIGdldEFjdGlvbnNDYWNoZVVzYWdlQnlSZXBvRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2NhY2hlL3VzYWdlLWJ5LXJlcG9zaXRvcnlcIixcbiAgICBdLFxuICAgIGdldEFjdGlvbnNDYWNoZVVzYWdlRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9jYWNoZS91c2FnZVwiXSxcbiAgICBnZXRBbGxvd2VkQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9zZWxlY3RlZC1hY3Rpb25zXCIsXG4gICAgXSxcbiAgICBnZXRBbGxvd2VkQWN0aW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGdldEFydGlmYWN0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvYXJ0aWZhY3RzL3thcnRpZmFjdF9pZH1cIl0sXG4gICAgZ2V0Q3VzdG9tT2lkY1N1YkNsYWltRm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvb2lkYy9jdXN0b21pemF0aW9uL3N1YlwiLFxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnRQdWJsaWNLZXk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMvcHVibGljLWtleVwiLFxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnRTZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnRWYXJpYWJsZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc0RlZmF1bHRXb3JrZmxvd1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy93b3JrZmxvd1wiLFxuICAgIF0sXG4gICAgZ2V0R2l0aHViQWN0aW9uc1Blcm1pc3Npb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zXCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNSZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0SG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL3tob3N0ZWRfcnVubmVyX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0SG9zdGVkUnVubmVyc0dpdGh1Yk93bmVkSW1hZ2VzRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL2ltYWdlcy9naXRodWItb3duZWRcIixcbiAgICBdLFxuICAgIGdldEhvc3RlZFJ1bm5lcnNMaW1pdHNGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMvbGltaXRzXCIsXG4gICAgXSxcbiAgICBnZXRIb3N0ZWRSdW5uZXJzTWFjaGluZVNwZWNzRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL21hY2hpbmUtc2l6ZXNcIixcbiAgICBdLFxuICAgIGdldEhvc3RlZFJ1bm5lcnNQYXJ0bmVySW1hZ2VzRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL2ltYWdlcy9wYXJ0bmVyXCIsXG4gICAgXSxcbiAgICBnZXRIb3N0ZWRSdW5uZXJzUGxhdGZvcm1zRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL2hvc3RlZC1ydW5uZXJzL3BsYXRmb3Jtc1wiLFxuICAgIF0sXG4gICAgZ2V0Sm9iRm9yV29ya2Zsb3dSdW46IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9qb2JzL3tqb2JfaWR9XCJdLFxuICAgIGdldE9yZ1B1YmxpY0tleTogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy9wdWJsaWMta2V5XCJdLFxuICAgIGdldE9yZ1NlY3JldDogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldE9yZ1ZhcmlhYmxlOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIGdldFBlbmRpbmdEZXBsb3ltZW50c0ZvclJ1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9wZW5kaW5nX2RlcGxveW1lbnRzXCIsXG4gICAgXSxcbiAgICBnZXRSZXBvUGVybWlzc2lvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiYWN0aW9uc1wiLCBcImdldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnlcIl0gfSxcbiAgICBdLFxuICAgIGdldFJlcG9QdWJsaWNLZXk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBnZXRSZXBvVmFyaWFibGU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIGdldFJldmlld3NGb3JSdW46IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXBwcm92YWxzXCIsXG4gICAgXSxcbiAgICBnZXRTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCJdLFxuICAgIGdldFNlbGZIb3N0ZWRSdW5uZXJGb3JSZXBvOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRXb3JrZmxvdzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9XCJdLFxuICAgIGdldFdvcmtmbG93QWNjZXNzVG9SZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy9hY2Nlc3NcIixcbiAgICBdLFxuICAgIGdldFdvcmtmbG93UnVuOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfVwiXSxcbiAgICBnZXRXb3JrZmxvd1J1bkF0dGVtcHQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXR0ZW1wdHMve2F0dGVtcHRfbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgZ2V0V29ya2Zsb3dSdW5Vc2FnZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS90aW1pbmdcIixcbiAgICBdLFxuICAgIGdldFdvcmtmbG93VXNhZ2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3dvcmtmbG93cy97d29ya2Zsb3dfaWR9L3RpbWluZ1wiLFxuICAgIF0sXG4gICAgbGlzdEFydGlmYWN0c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9hcnRpZmFjdHNcIl0sXG4gICAgbGlzdEVudmlyb25tZW50U2VjcmV0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vc2VjcmV0c1wiLFxuICAgIF0sXG4gICAgbGlzdEVudmlyb25tZW50VmFyaWFibGVzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS92YXJpYWJsZXNcIixcbiAgICBdLFxuICAgIGxpc3RHaXRodWJIb3N0ZWRSdW5uZXJzSW5Hcm91cEZvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXItZ3JvdXBzL3tydW5uZXJfZ3JvdXBfaWR9L2hvc3RlZC1ydW5uZXJzXCIsXG4gICAgXSxcbiAgICBsaXN0SG9zdGVkUnVubmVyc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnNcIl0sXG4gICAgbGlzdEpvYnNGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9qb2JzXCIsXG4gICAgXSxcbiAgICBsaXN0Sm9ic0ZvcldvcmtmbG93UnVuQXR0ZW1wdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9hdHRlbXB0cy97YXR0ZW1wdF9udW1iZXJ9L2pvYnNcIixcbiAgICBdLFxuICAgIGxpc3RMYWJlbHNGb3JTZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBsaXN0TGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBsaXN0T3JnU2VjcmV0czogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvc2VjcmV0c1wiXSxcbiAgICBsaXN0T3JnVmFyaWFibGVzOiBbXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXNcIl0sXG4gICAgbGlzdFJlcG9Pcmdhbml6YXRpb25TZWNyZXRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vcmdhbml6YXRpb24tc2VjcmV0c1wiLFxuICAgIF0sXG4gICAgbGlzdFJlcG9Pcmdhbml6YXRpb25WYXJpYWJsZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL29yZ2FuaXphdGlvbi12YXJpYWJsZXNcIixcbiAgICBdLFxuICAgIGxpc3RSZXBvU2VjcmV0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3NlY3JldHNcIl0sXG4gICAgbGlzdFJlcG9WYXJpYWJsZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXNcIl0sXG4gICAgbGlzdFJlcG9Xb3JrZmxvd3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3NcIl0sXG4gICAgbGlzdFJ1bm5lckFwcGxpY2F0aW9uc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVycy9kb3dubG9hZHNcIl0sXG4gICAgbGlzdFJ1bm5lckFwcGxpY2F0aW9uc0ZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMvZG93bmxvYWRzXCIsXG4gICAgXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc0Zvck9yZ1ZhcmlhYmxlOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0U2VsZWN0ZWRSZXBvc2l0b3JpZXNFbmFibGVkR2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGxpc3RTZWxmSG9zdGVkUnVubmVyc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcnVubmVyc1wiXSxcbiAgICBsaXN0U2VsZkhvc3RlZFJ1bm5lcnNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVubmVyc1wiXSxcbiAgICBsaXN0V29ya2Zsb3dSdW5BcnRpZmFjdHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vYXJ0aWZhY3RzXCIsXG4gICAgXSxcbiAgICBsaXN0V29ya2Zsb3dSdW5zOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy93b3JrZmxvd3Mve3dvcmtmbG93X2lkfS9ydW5zXCIsXG4gICAgXSxcbiAgICBsaXN0V29ya2Zsb3dSdW5zRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnNcIl0sXG4gICAgcmVSdW5Kb2JGb3JXb3JrZmxvd1J1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL2pvYnMve2pvYl9pZH0vcmVydW5cIixcbiAgICBdLFxuICAgIHJlUnVuV29ya2Zsb3c6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcnVucy97cnVuX2lkfS9yZXJ1blwiXSxcbiAgICByZVJ1bldvcmtmbG93RmFpbGVkSm9iczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bnMve3J1bl9pZH0vcmVydW4tZmFpbGVkLWpvYnNcIixcbiAgICBdLFxuICAgIHJlbW92ZUFsbEN1c3RvbUxhYmVsc0Zyb21TZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICByZW1vdmVBbGxDdXN0b21MYWJlbHNGcm9tU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICByZW1vdmVDdXN0b21MYWJlbEZyb21TZWxmSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlQ3VzdG9tTGFiZWxGcm9tU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vYWN0aW9ucy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1ZhcmlhYmxlOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9hY3Rpb25zL3ZhcmlhYmxlcy97bmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmV2aWV3Q3VzdG9tR2F0ZXNGb3JSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlXCIsXG4gICAgXSxcbiAgICByZXZpZXdQZW5kaW5nRGVwbG95bWVudHNGb3JSdW46IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9ydW5zL3tydW5faWR9L3BlbmRpbmdfZGVwbG95bWVudHNcIixcbiAgICBdLFxuICAgIHNldEFsbG93ZWRBY3Rpb25zT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3Blcm1pc3Npb25zL3NlbGVjdGVkLWFjdGlvbnNcIixcbiAgICBdLFxuICAgIHNldEFsbG93ZWRBY3Rpb25zUmVwb3NpdG9yeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2FjdGlvbnMvcGVybWlzc2lvbnMvc2VsZWN0ZWQtYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgc2V0Q3VzdG9tTGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvck9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9ydW5uZXJzL3tydW5uZXJfaWR9L2xhYmVsc1wiLFxuICAgIF0sXG4gICAgc2V0Q3VzdG9tTGFiZWxzRm9yU2VsZkhvc3RlZFJ1bm5lckZvclJlcG86IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3J1bm5lcnMve3J1bm5lcl9pZH0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBzZXRDdXN0b21PaWRjU3ViQ2xhaW1Gb3JSZXBvOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9vaWRjL2N1c3RvbWl6YXRpb24vc3ViXCIsXG4gICAgXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zRGVmYXVsdFdvcmtmbG93UGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnMvd29ya2Zsb3dcIixcbiAgICBdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNEZWZhdWx0V29ya2Zsb3dQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zL3dvcmtmbG93XCIsXG4gICAgXSxcbiAgICBzZXRHaXRodWJBY3Rpb25zUGVybWlzc2lvbnNPcmdhbml6YXRpb246IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2FjdGlvbnMvcGVybWlzc2lvbnNcIixcbiAgICBdLFxuICAgIHNldEdpdGh1YkFjdGlvbnNQZXJtaXNzaW9uc1JlcG9zaXRvcnk6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpb25zL3Blcm1pc3Npb25zXCIsXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHNldFNlbGVjdGVkUmVwb3NGb3JPcmdWYXJpYWJsZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc2l0b3JpZXNFbmFibGVkR2l0aHViQWN0aW9uc09yZ2FuaXphdGlvbjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vYWN0aW9ucy9wZXJtaXNzaW9ucy9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHNldFdvcmtmbG93QWNjZXNzVG9SZXBvc2l0b3J5OiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy9wZXJtaXNzaW9ucy9hY2Nlc3NcIixcbiAgICBdLFxuICAgIHVwZGF0ZUVudmlyb25tZW50VmFyaWFibGU6IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vdmFyaWFibGVzL3tuYW1lfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlSG9zdGVkUnVubmVyRm9yT3JnOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L2FjdGlvbnMvaG9zdGVkLXJ1bm5lcnMve2hvc3RlZF9ydW5uZXJfaWR9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVPcmdWYXJpYWJsZTogW1wiUEFUQ0ggL29yZ3Mve29yZ30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCJdLFxuICAgIHVwZGF0ZVJlcG9WYXJpYWJsZTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vYWN0aW9ucy92YXJpYWJsZXMve25hbWV9XCIsXG4gICAgXSxcbiAgfSxcbiAgYWN0aXZpdHk6IHtcbiAgICBjaGVja1JlcG9Jc1N0YXJyZWRCeUF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc3RhcnJlZC97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBkZWxldGVSZXBvU3Vic2NyaXB0aW9uOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBkZWxldGVUaHJlYWRTdWJzY3JpcHRpb246IFtcbiAgICAgIFwiREVMRVRFIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH0vc3Vic2NyaXB0aW9uXCIsXG4gICAgXSxcbiAgICBnZXRGZWVkczogW1wiR0VUIC9mZWVkc1wiXSxcbiAgICBnZXRSZXBvU3Vic2NyaXB0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N1YnNjcmlwdGlvblwiXSxcbiAgICBnZXRUaHJlYWQ6IFtcIkdFVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9XCJdLFxuICAgIGdldFRocmVhZFN1YnNjcmlwdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9L3N1YnNjcmlwdGlvblwiLFxuICAgIF0sXG4gICAgbGlzdEV2ZW50c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzXCJdLFxuICAgIGxpc3ROb3RpZmljYXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvbm90aWZpY2F0aW9uc1wiXSxcbiAgICBsaXN0T3JnRXZlbnRzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2V2ZW50cy9vcmdzL3tvcmd9XCIsXG4gICAgXSxcbiAgICBsaXN0UHVibGljRXZlbnRzOiBbXCJHRVQgL2V2ZW50c1wiXSxcbiAgICBsaXN0UHVibGljRXZlbnRzRm9yUmVwb05ldHdvcms6IFtcIkdFVCAvbmV0d29ya3Mve293bmVyfS97cmVwb30vZXZlbnRzXCJdLFxuICAgIGxpc3RQdWJsaWNFdmVudHNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZXZlbnRzL3B1YmxpY1wiXSxcbiAgICBsaXN0UHVibGljT3JnRXZlbnRzOiBbXCJHRVQgL29yZ3Mve29yZ30vZXZlbnRzXCJdLFxuICAgIGxpc3RSZWNlaXZlZEV2ZW50c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZWNlaXZlZF9ldmVudHNcIl0sXG4gICAgbGlzdFJlY2VpdmVkUHVibGljRXZlbnRzRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcmVjZWl2ZWRfZXZlbnRzL3B1YmxpY1wiLFxuICAgIF0sXG4gICAgbGlzdFJlcG9FdmVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZXZlbnRzXCJdLFxuICAgIGxpc3RSZXBvTm90aWZpY2F0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbm90aWZpY2F0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdFJlcG9zU3RhcnJlZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zdGFycmVkXCJdLFxuICAgIGxpc3RSZXBvc1N0YXJyZWRCeVVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdGFycmVkXCJdLFxuICAgIGxpc3RSZXBvc1dhdGNoZWRCeVVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zdWJzY3JpcHRpb25zXCJdLFxuICAgIGxpc3RTdGFyZ2F6ZXJzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGFyZ2F6ZXJzXCJdLFxuICAgIGxpc3RXYXRjaGVkUmVwb3NGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3N1YnNjcmlwdGlvbnNcIl0sXG4gICAgbGlzdFdhdGNoZXJzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdWJzY3JpYmVyc1wiXSxcbiAgICBtYXJrTm90aWZpY2F0aW9uc0FzUmVhZDogW1wiUFVUIC9ub3RpZmljYXRpb25zXCJdLFxuICAgIG1hcmtSZXBvTm90aWZpY2F0aW9uc0FzUmVhZDogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ub3RpZmljYXRpb25zXCJdLFxuICAgIG1hcmtUaHJlYWRBc0RvbmU6IFtcIkRFTEVURSAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9XCJdLFxuICAgIG1hcmtUaHJlYWRBc1JlYWQ6IFtcIlBBVENIIC9ub3RpZmljYXRpb25zL3RocmVhZHMve3RocmVhZF9pZH1cIl0sXG4gICAgc2V0UmVwb1N1YnNjcmlwdGlvbjogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdWJzY3JpcHRpb25cIl0sXG4gICAgc2V0VGhyZWFkU3Vic2NyaXB0aW9uOiBbXG4gICAgICBcIlBVVCAvbm90aWZpY2F0aW9ucy90aHJlYWRzL3t0aHJlYWRfaWR9L3N1YnNjcmlwdGlvblwiLFxuICAgIF0sXG4gICAgc3RhclJlcG9Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUFVUIC91c2VyL3N0YXJyZWQve293bmVyfS97cmVwb31cIl0sXG4gICAgdW5zdGFyUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvc3RhcnJlZC97b3duZXJ9L3tyZXBvfVwiXSxcbiAgfSxcbiAgYXBwczoge1xuICAgIGFkZFJlcG9Ub0luc3RhbGxhdGlvbjogW1xuICAgICAgXCJQVVQgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiYXBwc1wiLCBcImFkZFJlcG9Ub0luc3RhbGxhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBhZGRSZXBvVG9JbnN0YWxsYXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBjaGVja1Rva2VuOiBbXCJQT1NUIC9hcHBsaWNhdGlvbnMve2NsaWVudF9pZH0vdG9rZW5cIl0sXG4gICAgY3JlYXRlRnJvbU1hbmlmZXN0OiBbXCJQT1NUIC9hcHAtbWFuaWZlc3RzL3tjb2RlfS9jb252ZXJzaW9uc1wiXSxcbiAgICBjcmVhdGVJbnN0YWxsYXRpb25BY2Nlc3NUb2tlbjogW1xuICAgICAgXCJQT1NUIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9hY2Nlc3NfdG9rZW5zXCIsXG4gICAgXSxcbiAgICBkZWxldGVBdXRob3JpemF0aW9uOiBbXCJERUxFVEUgL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS9ncmFudFwiXSxcbiAgICBkZWxldGVJbnN0YWxsYXRpb246IFtcIkRFTEVURSAvYXBwL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH1cIl0sXG4gICAgZGVsZXRlVG9rZW46IFtcIkRFTEVURSAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuXCJdLFxuICAgIGdldEF1dGhlbnRpY2F0ZWQ6IFtcIkdFVCAvYXBwXCJdLFxuICAgIGdldEJ5U2x1ZzogW1wiR0VUIC9hcHBzL3thcHBfc2x1Z31cIl0sXG4gICAgZ2V0SW5zdGFsbGF0aW9uOiBbXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9XCJdLFxuICAgIGdldE9yZ0luc3RhbGxhdGlvbjogW1wiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRSZXBvSW5zdGFsbGF0aW9uOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2luc3RhbGxhdGlvblwiXSxcbiAgICBnZXRTdWJzY3JpcHRpb25QbGFuRm9yQWNjb3VudDogW1xuICAgICAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3RpbmcvYWNjb3VudHMve2FjY291bnRfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRTdWJzY3JpcHRpb25QbGFuRm9yQWNjb3VudFN0dWJiZWQ6IFtcbiAgICAgIFwiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3N0dWJiZWQvYWNjb3VudHMve2FjY291bnRfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRVc2VySW5zdGFsbGF0aW9uOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vaW5zdGFsbGF0aW9uXCJdLFxuICAgIGdldFdlYmhvb2tDb25maWdGb3JBcHA6IFtcIkdFVCAvYXBwL2hvb2svY29uZmlnXCJdLFxuICAgIGdldFdlYmhvb2tEZWxpdmVyeTogW1wiR0VUIC9hcHAvaG9vay9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIl0sXG4gICAgbGlzdEFjY291bnRzRm9yUGxhbjogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zL3twbGFuX2lkfS9hY2NvdW50c1wiXSxcbiAgICBsaXN0QWNjb3VudHNGb3JQbGFuU3R1YmJlZDogW1xuICAgICAgXCJHRVQgL21hcmtldHBsYWNlX2xpc3Rpbmcvc3R1YmJlZC9wbGFucy97cGxhbl9pZH0vYWNjb3VudHNcIixcbiAgICBdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25SZXBvc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgbGlzdEluc3RhbGxhdGlvblJlcXVlc3RzRm9yQXV0aGVudGljYXRlZEFwcDogW1xuICAgICAgXCJHRVQgL2FwcC9pbnN0YWxsYXRpb24tcmVxdWVzdHNcIixcbiAgICBdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25zOiBbXCJHRVQgL2FwcC9pbnN0YWxsYXRpb25zXCJdLFxuICAgIGxpc3RJbnN0YWxsYXRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9pbnN0YWxsYXRpb25zXCJdLFxuICAgIGxpc3RQbGFuczogW1wiR0VUIC9tYXJrZXRwbGFjZV9saXN0aW5nL3BsYW5zXCJdLFxuICAgIGxpc3RQbGFuc1N0dWJiZWQ6IFtcIkdFVCAvbWFya2V0cGxhY2VfbGlzdGluZy9zdHViYmVkL3BsYW5zXCJdLFxuICAgIGxpc3RSZXBvc0FjY2Vzc2libGVUb0luc3RhbGxhdGlvbjogW1wiR0VUIC9pbnN0YWxsYXRpb24vcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RTdWJzY3JpcHRpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9tYXJrZXRwbGFjZV9wdXJjaGFzZXNcIl0sXG4gICAgbGlzdFN1YnNjcmlwdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclN0dWJiZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL21hcmtldHBsYWNlX3B1cmNoYXNlcy9zdHViYmVkXCIsXG4gICAgXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcIkdFVCAvYXBwL2hvb2svZGVsaXZlcmllc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiUE9TVCAvYXBwL2hvb2svZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9L2F0dGVtcHRzXCIsXG4gICAgXSxcbiAgICByZW1vdmVSZXBvRnJvbUluc3RhbGxhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiYXBwc1wiLCBcInJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIHJlbW92ZVJlcG9Gcm9tSW5zdGFsbGF0aW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2luc3RhbGxhdGlvbnMve2luc3RhbGxhdGlvbl9pZH0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmVzZXRUb2tlbjogW1wiUEFUQ0ggL2FwcGxpY2F0aW9ucy97Y2xpZW50X2lkfS90b2tlblwiXSxcbiAgICByZXZva2VJbnN0YWxsYXRpb25BY2Nlc3NUb2tlbjogW1wiREVMRVRFIC9pbnN0YWxsYXRpb24vdG9rZW5cIl0sXG4gICAgc2NvcGVUb2tlbjogW1wiUE9TVCAvYXBwbGljYXRpb25zL3tjbGllbnRfaWR9L3Rva2VuL3Njb3BlZFwiXSxcbiAgICBzdXNwZW5kSW5zdGFsbGF0aW9uOiBbXCJQVVQgL2FwcC9pbnN0YWxsYXRpb25zL3tpbnN0YWxsYXRpb25faWR9L3N1c3BlbmRlZFwiXSxcbiAgICB1bnN1c3BlbmRJbnN0YWxsYXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9hcHAvaW5zdGFsbGF0aW9ucy97aW5zdGFsbGF0aW9uX2lkfS9zdXNwZW5kZWRcIixcbiAgICBdLFxuICAgIHVwZGF0ZVdlYmhvb2tDb25maWdGb3JBcHA6IFtcIlBBVENIIC9hcHAvaG9vay9jb25maWdcIl0sXG4gIH0sXG4gIGJpbGxpbmc6IHtcbiAgICBnZXRHaXRodWJBY3Rpb25zQmlsbGluZ09yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL2JpbGxpbmcvYWN0aW9uc1wiXSxcbiAgICBnZXRHaXRodWJBY3Rpb25zQmlsbGluZ1VzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0R2l0aHViQmlsbGluZ1VzYWdlUmVwb3J0T3JnOiBbXG4gICAgICBcIkdFVCAvb3JnYW5pemF0aW9ucy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL3VzYWdlXCIsXG4gICAgXSxcbiAgICBnZXRHaXRodWJQYWNrYWdlc0JpbGxpbmdPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL3BhY2thZ2VzXCJdLFxuICAgIGdldEdpdGh1YlBhY2thZ2VzQmlsbGluZ1VzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvcGFja2FnZXNcIixcbiAgICBdLFxuICAgIGdldFNoYXJlZFN0b3JhZ2VCaWxsaW5nT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9zZXR0aW5ncy9iaWxsaW5nL3NoYXJlZC1zdG9yYWdlXCIsXG4gICAgXSxcbiAgICBnZXRTaGFyZWRTdG9yYWdlQmlsbGluZ1VzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L3NldHRpbmdzL2JpbGxpbmcvc2hhcmVkLXN0b3JhZ2VcIixcbiAgICBdLFxuICB9LFxuICBjaGVja3M6IHtcbiAgICBjcmVhdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXJ1bnNcIl0sXG4gICAgY3JlYXRlU3VpdGU6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NoZWNrLXN1aXRlc1wiXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stcnVucy97Y2hlY2tfcnVuX2lkfVwiXSxcbiAgICBnZXRTdWl0ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfVwiXSxcbiAgICBsaXN0QW5ub3RhdGlvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L2Fubm90YXRpb25zXCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yUmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stcnVuc1wiXSxcbiAgICBsaXN0Rm9yU3VpdGU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1zdWl0ZXMve2NoZWNrX3N1aXRlX2lkfS9jaGVjay1ydW5zXCIsXG4gICAgXSxcbiAgICBsaXN0U3VpdGVzRm9yUmVmOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn0vY2hlY2stc3VpdGVzXCJdLFxuICAgIHJlcmVxdWVzdFJ1bjogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9L3JlcmVxdWVzdFwiLFxuICAgIF0sXG4gICAgcmVyZXF1ZXN0U3VpdGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3tjaGVja19zdWl0ZV9pZH0vcmVyZXF1ZXN0XCIsXG4gICAgXSxcbiAgICBzZXRTdWl0ZXNQcmVmZXJlbmNlczogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY2hlY2stc3VpdGVzL3ByZWZlcmVuY2VzXCIsXG4gICAgXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jaGVjay1ydW5zL3tjaGVja19ydW5faWR9XCJdLFxuICB9LFxuICBjb2RlU2Nhbm5pbmc6IHtcbiAgICBjb21taXRBdXRvZml4OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvYWxlcnRzL3thbGVydF9udW1iZXJ9L2F1dG9maXgvY29tbWl0c1wiLFxuICAgIF0sXG4gICAgY3JlYXRlQXV0b2ZpeDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9hdXRvZml4XCIsXG4gICAgXSxcbiAgICBjcmVhdGVWYXJpYW50QW5hbHlzaXM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9jb2RlcWwvdmFyaWFudC1hbmFseXNlc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlQW5hbHlzaXM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FuYWx5c2VzL3thbmFseXNpc19pZH17P2NvbmZpcm1fZGVsZXRlfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlQ29kZXFsRGF0YWJhc2U6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC9kYXRhYmFzZXMve2xhbmd1YWdlfVwiLFxuICAgIF0sXG4gICAgZ2V0QWxlcnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWRQYXJhbWV0ZXJzOiB7IGFsZXJ0X2lkOiBcImFsZXJ0X251bWJlclwiIH0gfSxcbiAgICBdLFxuICAgIGdldEFuYWx5c2lzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlcy97YW5hbHlzaXNfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRBdXRvZml4OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vYXV0b2ZpeFwiLFxuICAgIF0sXG4gICAgZ2V0Q29kZXFsRGF0YWJhc2U6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC9kYXRhYmFzZXMve2xhbmd1YWdlfVwiLFxuICAgIF0sXG4gICAgZ2V0RGVmYXVsdFNldHVwOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvZGVmYXVsdC1zZXR1cFwiXSxcbiAgICBnZXRTYXJpZjogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL3Nhcmlmcy97c2FyaWZfaWR9XCJdLFxuICAgIGdldFZhcmlhbnRBbmFseXNpczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGUtc2Nhbm5pbmcvY29kZXFsL3ZhcmlhbnQtYW5hbHlzZXMve2NvZGVxbF92YXJpYW50X2FuYWx5c2lzX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0VmFyaWFudEFuYWx5c2lzUmVwb1Rhc2s6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2NvZGVxbC92YXJpYW50LWFuYWx5c2VzL3tjb2RlcWxfdmFyaWFudF9hbmFseXNpc19pZH0vcmVwb3Mve3JlcG9fb3duZXJ9L3tyZXBvX25hbWV9XCIsXG4gICAgXSxcbiAgICBsaXN0QWxlcnRJbnN0YW5jZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfS9pbnN0YW5jZXNcIixcbiAgICBdLFxuICAgIGxpc3RBbGVydHNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2RlLXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzSW5zdGFuY2VzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vaW5zdGFuY2VzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiY29kZVNjYW5uaW5nXCIsIFwibGlzdEFsZXJ0SW5zdGFuY2VzXCJdIH0sXG4gICAgXSxcbiAgICBsaXN0Q29kZXFsRGF0YWJhc2VzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9jb2RlcWwvZGF0YWJhc2VzXCIsXG4gICAgXSxcbiAgICBsaXN0UmVjZW50QW5hbHlzZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbmFseXNlc1wiXSxcbiAgICB1cGRhdGVBbGVydDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn1cIixcbiAgICBdLFxuICAgIHVwZGF0ZURlZmF1bHRTZXR1cDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9kZWZhdWx0LXNldHVwXCIsXG4gICAgXSxcbiAgICB1cGxvYWRTYXJpZjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zY2FubmluZy9zYXJpZnNcIl0sXG4gIH0sXG4gIGNvZGVTZWN1cml0eToge1xuICAgIGF0dGFjaENvbmZpZ3VyYXRpb246IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9hdHRhY2hcIixcbiAgICBdLFxuICAgIGF0dGFjaEVudGVycHJpc2VDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIlBPU1QgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9hdHRhY2hcIixcbiAgICBdLFxuICAgIGNyZWF0ZUNvbmZpZ3VyYXRpb246IFtcIlBPU1QgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiXSxcbiAgICBjcmVhdGVDb25maWd1cmF0aW9uRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJQT1NUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlQ29uZmlndXJhdGlvbjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUNvbmZpZ3VyYXRpb25Gb3JFbnRlcnByaXNlOiBbXG4gICAgICBcIkRFTEVURSAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZXRhY2hDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL2RldGFjaFwiLFxuICAgIF0sXG4gICAgZ2V0Q29uZmlndXJhdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGdldENvbmZpZ3VyYXRpb25Gb3JSZXBvc2l0b3J5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZS1zZWN1cml0eS1jb25maWd1cmF0aW9uXCIsXG4gICAgXSxcbiAgICBnZXRDb25maWd1cmF0aW9uc0ZvckVudGVycHJpc2U6IFtcbiAgICAgIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0Q29uZmlndXJhdGlvbnNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zXCJdLFxuICAgIGdldERlZmF1bHRDb25maWd1cmF0aW9uczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy9kZWZhdWx0c1wiLFxuICAgIF0sXG4gICAgZ2V0RGVmYXVsdENvbmZpZ3VyYXRpb25zRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL2RlZmF1bHRzXCIsXG4gICAgXSxcbiAgICBnZXRSZXBvc2l0b3JpZXNGb3JDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGdldFJlcG9zaXRvcmllc0ZvckVudGVycHJpc2VDb25maWd1cmF0aW9uOiBbXG4gICAgICBcIkdFVCAvZW50ZXJwcmlzZXMve2VudGVycHJpc2V9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgZ2V0U2luZ2xlQ29uZmlndXJhdGlvbkZvckVudGVycHJpc2U6IFtcbiAgICAgIFwiR0VUIC9lbnRlcnByaXNlcy97ZW50ZXJwcmlzZX0vY29kZS1zZWN1cml0eS9jb25maWd1cmF0aW9ucy97Y29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIHNldENvbmZpZ3VyYXRpb25Bc0RlZmF1bHQ6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L2NvZGUtc2VjdXJpdHkvY29uZmlndXJhdGlvbnMve2NvbmZpZ3VyYXRpb25faWR9L2RlZmF1bHRzXCIsXG4gICAgXSxcbiAgICBzZXRDb25maWd1cmF0aW9uQXNEZWZhdWx0Rm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJQVVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfS9kZWZhdWx0c1wiLFxuICAgIF0sXG4gICAgdXBkYXRlQ29uZmlndXJhdGlvbjogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlRW50ZXJwcmlzZUNvbmZpZ3VyYXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9jb2RlLXNlY3VyaXR5L2NvbmZpZ3VyYXRpb25zL3tjb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gIH0sXG4gIGNvZGVzT2ZDb25kdWN0OiB7XG4gICAgZ2V0QWxsQ29kZXNPZkNvbmR1Y3Q6IFtcIkdFVCAvY29kZXNfb2ZfY29uZHVjdFwiXSxcbiAgICBnZXRDb25kdWN0Q29kZTogW1wiR0VUIC9jb2Rlc19vZl9jb25kdWN0L3trZXl9XCJdLFxuICB9LFxuICBjb2Rlc3BhY2VzOiB7XG4gICAgYWRkUmVwb3NpdG9yeUZvclNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBhZGRTZWxlY3RlZFJlcG9Ub09yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgY2hlY2tQZXJtaXNzaW9uc0ZvckRldmNvbnRhaW5lcjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvcGVybWlzc2lvbnNfY2hlY2tcIixcbiAgICBdLFxuICAgIGNvZGVzcGFjZU1hY2hpbmVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9tYWNoaW5lc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvY29kZXNwYWNlc1wiXSxcbiAgICBjcmVhdGVPclVwZGF0ZU9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZVNlY3JldEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBVVCAvdXNlci9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlV2l0aFByRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb2Rlc3BhY2VzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVXaXRoUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvZGVzcGFjZXNcIixcbiAgICBdLFxuICAgIGRlbGV0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9XCJdLFxuICAgIGRlbGV0ZUZyb21Pcmdhbml6YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1NlY3JldDogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGRlbGV0ZVJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlU2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBleHBvcnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2VyL2NvZGVzcGFjZXMve2NvZGVzcGFjZV9uYW1lfS9leHBvcnRzXCIsXG4gICAgXSxcbiAgICBnZXRDb2Rlc3BhY2VzRm9yVXNlckluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlc1wiLFxuICAgIF0sXG4gICAgZ2V0RXhwb3J0RGV0YWlsc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vZXhwb3J0cy97ZXhwb3J0X2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3B1YmxpYy1rZXlcIl0sXG4gICAgZ2V0T3JnU2VjcmV0OiBbXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0UHVibGljS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy9wdWJsaWMta2V5XCIsXG4gICAgXSxcbiAgICBnZXRSZXBvUHVibGljS2V5OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzL3B1YmxpYy1rZXlcIixcbiAgICBdLFxuICAgIGdldFJlcG9TZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0U2VjcmV0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2NvZGVzcGFjZXMvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBsaXN0RGV2Y29udGFpbmVyc0luUmVwb3NpdG9yeUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9kZXZjb250YWluZXJzXCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9jb2Rlc3BhY2VzXCJdLFxuICAgIGxpc3RJbk9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vY29kZXNwYWNlc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWRQYXJhbWV0ZXJzOiB7IG9yZ19pZDogXCJvcmdcIiB9IH0sXG4gICAgXSxcbiAgICBsaXN0SW5SZXBvc2l0b3J5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzXCIsXG4gICAgXSxcbiAgICBsaXN0T3JnU2VjcmV0czogW1wiR0VUIC9vcmdzL3tvcmd9L2NvZGVzcGFjZXMvc2VjcmV0c1wiXSxcbiAgICBsaXN0UmVwb1NlY3JldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZXNwYWNlcy9zZWNyZXRzXCJdLFxuICAgIGxpc3RSZXBvc2l0b3JpZXNGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0U2VjcmV0c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzXCJdLFxuICAgIGxpc3RTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHByZUZsaWdodFdpdGhSZXBvRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL25ld1wiLFxuICAgIF0sXG4gICAgcHVibGlzaEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3B1Ymxpc2hcIixcbiAgICBdLFxuICAgIHJlbW92ZVJlcG9zaXRvcnlGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgcmVwb01hY2hpbmVzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2Rlc3BhY2VzL21hY2hpbmVzXCIsXG4gICAgXSxcbiAgICBzZXRSZXBvc2l0b3JpZXNGb3JTZWNyZXRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL3VzZXIvY29kZXNwYWNlcy9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBzZXRTZWxlY3RlZFJlcG9zRm9yT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9jb2Rlc3BhY2VzL3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIHN0YXJ0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3N0YXJ0XCJdLFxuICAgIHN0b3BGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX0vc3RvcFwiXSxcbiAgICBzdG9wSW5Pcmdhbml6YXRpb246IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9tZW1iZXJzL3t1c2VybmFtZX0vY29kZXNwYWNlcy97Y29kZXNwYWNlX25hbWV9L3N0b3BcIixcbiAgICBdLFxuICAgIHVwZGF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQQVRDSCAvdXNlci9jb2Rlc3BhY2VzL3tjb2Rlc3BhY2VfbmFtZX1cIl0sXG4gIH0sXG4gIGNvcGlsb3Q6IHtcbiAgICBhZGRDb3BpbG90U2VhdHNGb3JUZWFtczogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L2NvcGlsb3QvYmlsbGluZy9zZWxlY3RlZF90ZWFtc1wiLFxuICAgIF0sXG4gICAgYWRkQ29waWxvdFNlYXRzRm9yVXNlcnM6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdXNlcnNcIixcbiAgICBdLFxuICAgIGNhbmNlbENvcGlsb3RTZWF0QXNzaWdubWVudEZvclRlYW1zOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdGVhbXNcIixcbiAgICBdLFxuICAgIGNhbmNlbENvcGlsb3RTZWF0QXNzaWdubWVudEZvclVzZXJzOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9jb3BpbG90L2JpbGxpbmcvc2VsZWN0ZWRfdXNlcnNcIixcbiAgICBdLFxuICAgIGNvcGlsb3RNZXRyaWNzRm9yT3JnYW5pemF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9tZXRyaWNzXCJdLFxuICAgIGNvcGlsb3RNZXRyaWNzRm9yVGVhbTogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW0ve3RlYW1fc2x1Z30vY29waWxvdC9tZXRyaWNzXCJdLFxuICAgIGdldENvcGlsb3RPcmdhbml6YXRpb25EZXRhaWxzOiBbXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nXCJdLFxuICAgIGdldENvcGlsb3RTZWF0RGV0YWlsc0ZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfS9jb3BpbG90XCIsXG4gICAgXSxcbiAgICBsaXN0Q29waWxvdFNlYXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vY29waWxvdC9iaWxsaW5nL3NlYXRzXCJdLFxuICAgIHVzYWdlTWV0cmljc0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2NvcGlsb3QvdXNhZ2VcIl0sXG4gICAgdXNhZ2VNZXRyaWNzRm9yVGVhbTogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW0ve3RlYW1fc2x1Z30vY29waWxvdC91c2FnZVwiXSxcbiAgfSxcbiAgZGVwZW5kYWJvdDoge1xuICAgIGFkZFNlbGVjdGVkUmVwb1RvT3JnU2VjcmV0OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfS9yZXBvc2l0b3JpZXMve3JlcG9zaXRvcnlfaWR9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZU9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlUmVwb1NlY3JldDogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBkZWxldGVPcmdTZWNyZXQ6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9kZXBlbmRhYm90L3NlY3JldHMve3NlY3JldF9uYW1lfVwiXSxcbiAgICBkZWxldGVSZXBvU2VjcmV0OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX1cIixcbiAgICBdLFxuICAgIGdldEFsZXJ0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3QvYWxlcnRzL3thbGVydF9udW1iZXJ9XCJdLFxuICAgIGdldE9yZ1B1YmxpY0tleTogW1wiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy9wdWJsaWMta2V5XCJdLFxuICAgIGdldE9yZ1NlY3JldDogW1wiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCJdLFxuICAgIGdldFJlcG9QdWJsaWNLZXk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHMvcHVibGljLWtleVwiLFxuICAgIF0sXG4gICAgZ2V0UmVwb1NlY3JldDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9XCIsXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9kZXBlbmRhYm90L2FsZXJ0c1wiLFxuICAgIF0sXG4gICAgbGlzdEFsZXJ0c0Zvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3QvYWxlcnRzXCJdLFxuICAgIGxpc3RBbGVydHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGFib3QvYWxlcnRzXCJdLFxuICAgIGxpc3RPcmdTZWNyZXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzXCJdLFxuICAgIGxpc3RSZXBvU2VjcmV0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBlbmRhYm90L3NlY3JldHNcIl0sXG4gICAgbGlzdFNlbGVjdGVkUmVwb3NGb3JPcmdTZWNyZXQ6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2RlcGVuZGFib3Qvc2VjcmV0cy97c2VjcmV0X25hbWV9L3JlcG9zaXRvcmllc1wiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VsZWN0ZWRSZXBvRnJvbU9yZ1NlY3JldDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzL3tyZXBvc2l0b3J5X2lkfVwiLFxuICAgIF0sXG4gICAgc2V0U2VsZWN0ZWRSZXBvc0Zvck9yZ1NlY3JldDogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vZGVwZW5kYWJvdC9zZWNyZXRzL3tzZWNyZXRfbmFtZX0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICB1cGRhdGVBbGVydDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kYWJvdC9hbGVydHMve2FsZXJ0X251bWJlcn1cIixcbiAgICBdLFxuICB9LFxuICBkZXBlbmRlbmN5R3JhcGg6IHtcbiAgICBjcmVhdGVSZXBvc2l0b3J5U25hcHNob3Q6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwZW5kZW5jeS1ncmFwaC9zbmFwc2hvdHNcIixcbiAgICBdLFxuICAgIGRpZmZSYW5nZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGVuY3ktZ3JhcGgvY29tcGFyZS97YmFzZWhlYWR9XCIsXG4gICAgXSxcbiAgICBleHBvcnRTYm9tOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGVuZGVuY3ktZ3JhcGgvc2JvbVwiXSxcbiAgfSxcbiAgZW1vamlzOiB7IGdldDogW1wiR0VUIC9lbW9qaXNcIl0gfSxcbiAgZ2lzdHM6IHtcbiAgICBjaGVja0lzU3RhcnJlZDogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vc3RhclwiXSxcbiAgICBjcmVhdGU6IFtcIlBPU1QgL2dpc3RzXCJdLFxuICAgIGNyZWF0ZUNvbW1lbnQ6IFtcIlBPU1QgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50c1wiXSxcbiAgICBkZWxldGU6IFtcIkRFTEVURSAvZ2lzdHMve2dpc3RfaWR9XCJdLFxuICAgIGRlbGV0ZUNvbW1lbnQ6IFtcIkRFTEVURSAvZ2lzdHMve2dpc3RfaWR9L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBmb3JrOiBbXCJQT1NUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIl0sXG4gICAgZ2V0OiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfVwiXSxcbiAgICBnZXRDb21tZW50OiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZ2V0UmV2aXNpb246IFtcIkdFVCAvZ2lzdHMve2dpc3RfaWR9L3tzaGF9XCJdLFxuICAgIGxpc3Q6IFtcIkdFVCAvZ2lzdHNcIl0sXG4gICAgbGlzdENvbW1lbnRzOiBbXCJHRVQgL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vY29tbWl0c1wiXSxcbiAgICBsaXN0Rm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dpc3RzXCJdLFxuICAgIGxpc3RGb3JrczogW1wiR0VUIC9naXN0cy97Z2lzdF9pZH0vZm9ya3NcIl0sXG4gICAgbGlzdFB1YmxpYzogW1wiR0VUIC9naXN0cy9wdWJsaWNcIl0sXG4gICAgbGlzdFN0YXJyZWQ6IFtcIkdFVCAvZ2lzdHMvc3RhcnJlZFwiXSxcbiAgICBzdGFyOiBbXCJQVVQgL2dpc3RzL3tnaXN0X2lkfS9zdGFyXCJdLFxuICAgIHVuc3RhcjogW1wiREVMRVRFIC9naXN0cy97Z2lzdF9pZH0vc3RhclwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9naXN0cy97Z2lzdF9pZH1cIl0sXG4gICAgdXBkYXRlQ29tbWVudDogW1wiUEFUQ0ggL2dpc3RzL3tnaXN0X2lkfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gIH0sXG4gIGdpdDoge1xuICAgIGNyZWF0ZUJsb2I6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9ibG9ic1wiXSxcbiAgICBjcmVhdGVDb21taXQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9jb21taXRzXCJdLFxuICAgIGNyZWF0ZVJlZjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3JlZnNcIl0sXG4gICAgY3JlYXRlVGFnOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdGFnc1wiXSxcbiAgICBjcmVhdGVUcmVlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvdHJlZXNcIl0sXG4gICAgZGVsZXRlUmVmOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9yZWZzL3tyZWZ9XCJdLFxuICAgIGdldEJsb2I6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L2Jsb2JzL3tmaWxlX3NoYX1cIl0sXG4gICAgZ2V0Q29tbWl0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2dpdC9jb21taXRzL3tjb21taXRfc2hhfVwiXSxcbiAgICBnZXRSZWY6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3JlZi97cmVmfVwiXSxcbiAgICBnZXRUYWc6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3RhZ3Mve3RhZ19zaGF9XCJdLFxuICAgIGdldFRyZWU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZ2l0L3RyZWVzL3t0cmVlX3NoYX1cIl0sXG4gICAgbGlzdE1hdGNoaW5nUmVmczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvbWF0Y2hpbmctcmVmcy97cmVmfVwiXSxcbiAgICB1cGRhdGVSZWY6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9naXQvcmVmcy97cmVmfVwiXSxcbiAgfSxcbiAgZ2l0aWdub3JlOiB7XG4gICAgZ2V0QWxsVGVtcGxhdGVzOiBbXCJHRVQgL2dpdGlnbm9yZS90ZW1wbGF0ZXNcIl0sXG4gICAgZ2V0VGVtcGxhdGU6IFtcIkdFVCAvZ2l0aWdub3JlL3RlbXBsYXRlcy97bmFtZX1cIl0sXG4gIH0sXG4gIGhvc3RlZENvbXB1dGU6IHtcbiAgICBjcmVhdGVOZXR3b3JrQ29uZmlndXJhdGlvbkZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstY29uZmlndXJhdGlvbnNcIixcbiAgICBdLFxuICAgIGRlbGV0ZU5ldHdvcmtDb25maWd1cmF0aW9uRnJvbU9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vc2V0dGluZ3MvbmV0d29yay1jb25maWd1cmF0aW9ucy97bmV0d29ya19jb25maWd1cmF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0TmV0d29ya0NvbmZpZ3VyYXRpb25Gb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstY29uZmlndXJhdGlvbnMve25ldHdvcmtfY29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGdldE5ldHdvcmtTZXR0aW5nc0Zvck9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vc2V0dGluZ3MvbmV0d29yay1zZXR0aW5ncy97bmV0d29ya19zZXR0aW5nc19pZH1cIixcbiAgICBdLFxuICAgIGxpc3ROZXR3b3JrQ29uZmlndXJhdGlvbnNGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstY29uZmlndXJhdGlvbnNcIixcbiAgICBdLFxuICAgIHVwZGF0ZU5ldHdvcmtDb25maWd1cmF0aW9uRm9yT3JnOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L3NldHRpbmdzL25ldHdvcmstY29uZmlndXJhdGlvbnMve25ldHdvcmtfY29uZmlndXJhdGlvbl9pZH1cIixcbiAgICBdLFxuICB9LFxuICBpbnRlcmFjdGlvbnM6IHtcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBnZXRSZXN0cmljdGlvbnNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgZ2V0UmVzdHJpY3Rpb25zRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgZ2V0UmVzdHJpY3Rpb25zRm9yWW91clB1YmxpY1JlcG9zOiBbXG4gICAgICBcIkdFVCAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJpbnRlcmFjdGlvbnNcIiwgXCJnZXRSZXN0cmljdGlvbnNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgcmVtb3ZlUmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkRFTEVURSAvdXNlci9pbnRlcmFjdGlvbi1saW1pdHNcIl0sXG4gICAgcmVtb3ZlUmVzdHJpY3Rpb25zRm9yT3JnOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvclJlcG86IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnRlcmFjdGlvbi1saW1pdHNcIixcbiAgICBdLFxuICAgIHJlbW92ZVJlc3RyaWN0aW9uc0ZvcllvdXJQdWJsaWNSZXBvczogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1wiaW50ZXJhY3Rpb25zXCIsIFwicmVtb3ZlUmVzdHJpY3Rpb25zRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIHNldFJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQVVQgL3VzZXIvaW50ZXJhY3Rpb24tbGltaXRzXCJdLFxuICAgIHNldFJlc3RyaWN0aW9uc0Zvck9yZzogW1wiUFVUIC9vcmdzL3tvcmd9L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBzZXRSZXN0cmljdGlvbnNGb3JSZXBvOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludGVyYWN0aW9uLWxpbWl0c1wiXSxcbiAgICBzZXRSZXN0cmljdGlvbnNGb3JZb3VyUHVibGljUmVwb3M6IFtcbiAgICAgIFwiUFVUIC91c2VyL2ludGVyYWN0aW9uLWxpbWl0c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcImludGVyYWN0aW9uc1wiLCBcInNldFJlc3RyaWN0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgfSxcbiAgaXNzdWVzOiB7XG4gICAgYWRkQXNzaWduZWVzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9hc3NpZ25lZXNcIixcbiAgICBdLFxuICAgIGFkZExhYmVsczogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L2xhYmVsc1wiXSxcbiAgICBhZGRTdWJJc3N1ZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vc3ViX2lzc3Vlc1wiLFxuICAgIF0sXG4gICAgY2hlY2tVc2VyQ2FuQmVBc3NpZ25lZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXMve2Fzc2lnbmVlfVwiXSxcbiAgICBjaGVja1VzZXJDYW5CZUFzc2lnbmVkVG9Jc3N1ZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9hc3NpZ25lZXMve2Fzc2lnbmVlfVwiLFxuICAgIF0sXG4gICAgY3JlYXRlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXNcIl0sXG4gICAgY3JlYXRlQ29tbWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vY29tbWVudHNcIixcbiAgICBdLFxuICAgIGNyZWF0ZUxhYmVsOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHNcIl0sXG4gICAgY3JlYXRlTWlsZXN0b25lOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzXCJdLFxuICAgIGRlbGV0ZUNvbW1lbnQ6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVMYWJlbDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHMve25hbWV9XCJdLFxuICAgIGRlbGV0ZU1pbGVzdG9uZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L21pbGVzdG9uZXMve21pbGVzdG9uZV9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9XCJdLFxuICAgIGdldENvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBnZXRFdmVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvZXZlbnRzL3tldmVudF9pZH1cIl0sXG4gICAgZ2V0TGFiZWw6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbGFiZWxzL3tuYW1lfVwiXSxcbiAgICBnZXRNaWxlc3RvbmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn1cIl0sXG4gICAgbGlzdDogW1wiR0VUIC9pc3N1ZXNcIl0sXG4gICAgbGlzdEFzc2lnbmVlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hc3NpZ25lZXNcIl0sXG4gICAgbGlzdENvbW1lbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9ldmVudHNcIl0sXG4gICAgbGlzdEV2ZW50c0ZvclJlcG86IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2V2ZW50c1wiXSxcbiAgICBsaXN0RXZlbnRzRm9yVGltZWxpbmU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vdGltZWxpbmVcIixcbiAgICBdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2lzc3Vlc1wiXSxcbiAgICBsaXN0Rm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vaXNzdWVzXCJdLFxuICAgIGxpc3RGb3JSZXBvOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlc1wiXSxcbiAgICBsaXN0TGFiZWxzRm9yTWlsZXN0b25lOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWlsZXN0b25lcy97bWlsZXN0b25lX251bWJlcn0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBsaXN0TGFiZWxzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9sYWJlbHNcIl0sXG4gICAgbGlzdExhYmVsc09uSXNzdWU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICBsaXN0TWlsZXN0b25lczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzXCJdLFxuICAgIGxpc3RTdWJJc3N1ZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vc3ViX2lzc3Vlc1wiLFxuICAgIF0sXG4gICAgbG9jazogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbG9ja1wiXSxcbiAgICByZW1vdmVBbGxMYWJlbHM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vbGFiZWxzXCIsXG4gICAgXSxcbiAgICByZW1vdmVBc3NpZ25lZXM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vYXNzaWduZWVzXCIsXG4gICAgXSxcbiAgICByZW1vdmVMYWJlbDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHMve25hbWV9XCIsXG4gICAgXSxcbiAgICByZW1vdmVTdWJJc3N1ZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9zdWJfaXNzdWVcIixcbiAgICBdLFxuICAgIHJlcHJpb3JpdGl6ZVN1Yklzc3VlOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vc3ViX2lzc3Vlcy9wcmlvcml0eVwiLFxuICAgIF0sXG4gICAgc2V0TGFiZWxzOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sYWJlbHNcIl0sXG4gICAgdW5sb2NrOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfS9sb2NrXCJdLFxuICAgIHVwZGF0ZTogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy97aXNzdWVfbnVtYmVyfVwiXSxcbiAgICB1cGRhdGVDb21tZW50OiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICB1cGRhdGVMYWJlbDogW1wiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhYmVscy97bmFtZX1cIl0sXG4gICAgdXBkYXRlTWlsZXN0b25lOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9taWxlc3RvbmVzL3ttaWxlc3RvbmVfbnVtYmVyfVwiLFxuICAgIF0sXG4gIH0sXG4gIGxpY2Vuc2VzOiB7XG4gICAgZ2V0OiBbXCJHRVQgL2xpY2Vuc2VzL3tsaWNlbnNlfVwiXSxcbiAgICBnZXRBbGxDb21tb25seVVzZWQ6IFtcIkdFVCAvbGljZW5zZXNcIl0sXG4gICAgZ2V0Rm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9saWNlbnNlXCJdLFxuICB9LFxuICBtYXJrZG93bjoge1xuICAgIHJlbmRlcjogW1wiUE9TVCAvbWFya2Rvd25cIl0sXG4gICAgcmVuZGVyUmF3OiBbXG4gICAgICBcIlBPU1QgL21hcmtkb3duL3Jhd1wiLFxuICAgICAgeyBoZWFkZXJzOiB7IFwiY29udGVudC10eXBlXCI6IFwidGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOFwiIH0gfSxcbiAgICBdLFxuICB9LFxuICBtZXRhOiB7XG4gICAgZ2V0OiBbXCJHRVQgL21ldGFcIl0sXG4gICAgZ2V0QWxsVmVyc2lvbnM6IFtcIkdFVCAvdmVyc2lvbnNcIl0sXG4gICAgZ2V0T2N0b2NhdDogW1wiR0VUIC9vY3RvY2F0XCJdLFxuICAgIGdldFplbjogW1wiR0VUIC96ZW5cIl0sXG4gICAgcm9vdDogW1wiR0VUIC9cIl0sXG4gIH0sXG4gIG1pZ3JhdGlvbnM6IHtcbiAgICBkZWxldGVBcmNoaXZlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiLFxuICAgIF0sXG4gICAgZGVsZXRlQXJjaGl2ZUZvck9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfS9hcmNoaXZlXCIsXG4gICAgXSxcbiAgICBkb3dubG9hZEFyY2hpdmVGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vYXJjaGl2ZVwiLFxuICAgIF0sXG4gICAgZ2V0QXJjaGl2ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L2FyY2hpdmVcIixcbiAgICBdLFxuICAgIGdldFN0YXR1c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWlncmF0aW9ucy97bWlncmF0aW9uX2lkfVwiXSxcbiAgICBnZXRTdGF0dXNGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9XCJdLFxuICAgIGxpc3RGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21pZ3JhdGlvbnNcIl0sXG4gICAgbGlzdEZvck9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnNcIl0sXG4gICAgbGlzdFJlcG9zRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0UmVwb3NGb3JPcmc6IFtcIkdFVCAvb3Jncy97b3JnfS9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiXSxcbiAgICBsaXN0UmVwb3NGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zaXRvcmllc1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcIm1pZ3JhdGlvbnNcIiwgXCJsaXN0UmVwb3NGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgc3RhcnRGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9taWdyYXRpb25zXCJdLFxuICAgIHN0YXJ0Rm9yT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnNcIl0sXG4gICAgdW5sb2NrUmVwb0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9taWdyYXRpb25zL3ttaWdyYXRpb25faWR9L3JlcG9zL3tyZXBvX25hbWV9L2xvY2tcIixcbiAgICBdLFxuICAgIHVubG9ja1JlcG9Gb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L21pZ3JhdGlvbnMve21pZ3JhdGlvbl9pZH0vcmVwb3Mve3JlcG9fbmFtZX0vbG9ja1wiLFxuICAgIF0sXG4gIH0sXG4gIG9pZGM6IHtcbiAgICBnZXRPaWRjQ3VzdG9tU3ViVGVtcGxhdGVGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2FjdGlvbnMvb2lkYy9jdXN0b21pemF0aW9uL3N1YlwiLFxuICAgIF0sXG4gICAgdXBkYXRlT2lkY0N1c3RvbVN1YlRlbXBsYXRlRm9yT3JnOiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9hY3Rpb25zL29pZGMvY3VzdG9taXphdGlvbi9zdWJcIixcbiAgICBdLFxuICB9LFxuICBvcmdzOiB7XG4gICAgYWRkU2VjdXJpdHlNYW5hZ2VyVGVhbTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vc2VjdXJpdHktbWFuYWdlcnMvdGVhbXMve3RlYW1fc2x1Z31cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0Lm9yZ3MuYWRkU2VjdXJpdHlNYW5hZ2VyVGVhbSgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L29yZ3Mvc2VjdXJpdHktbWFuYWdlcnMjYWRkLWEtc2VjdXJpdHktbWFuYWdlci10ZWFtXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgYXNzaWduVGVhbVRvT3JnUm9sZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3RlYW1zL3t0ZWFtX3NsdWd9L3tyb2xlX2lkfVwiLFxuICAgIF0sXG4gICAgYXNzaWduVXNlclRvT3JnUm9sZTogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3VzZXJzL3t1c2VybmFtZX0ve3JvbGVfaWR9XCIsXG4gICAgXSxcbiAgICBibG9ja1VzZXI6IFtcIlBVVCAvb3Jncy97b3JnfS9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjYW5jZWxJbnZpdGF0aW9uOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCJdLFxuICAgIGNoZWNrQmxvY2tlZFVzZXI6IFtcIkdFVCAvb3Jncy97b3JnfS9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja01lbWJlcnNoaXBGb3JVc2VyOiBbXCJHRVQgL29yZ3Mve29yZ30vbWVtYmVycy97dXNlcm5hbWV9XCJdLFxuICAgIGNoZWNrUHVibGljTWVtYmVyc2hpcEZvclVzZXI6IFtcIkdFVCAvb3Jncy97b3JnfS9wdWJsaWNfbWVtYmVycy97dXNlcm5hbWV9XCJdLFxuICAgIGNvbnZlcnRNZW1iZXJUb091dHNpZGVDb2xsYWJvcmF0b3I6IFtcbiAgICAgIFwiUFVUIC9vcmdzL3tvcmd9L291dHNpZGVfY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVJbnZpdGF0aW9uOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2ludml0YXRpb25zXCJdLFxuICAgIGNyZWF0ZUlzc3VlVHlwZTogW1wiUE9TVCAvb3Jncy97b3JnfS9pc3N1ZS10eXBlc1wiXSxcbiAgICBjcmVhdGVPclVwZGF0ZUN1c3RvbVByb3BlcnRpZXM6IFtcIlBBVENIIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlQ3VzdG9tUHJvcGVydGllc1ZhbHVlc0ZvclJlcG9zOiBbXG4gICAgICBcIlBBVENIIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvdmFsdWVzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZUN1c3RvbVByb3BlcnR5OiBbXG4gICAgICBcIlBVVCAvb3Jncy97b3JnfS9wcm9wZXJ0aWVzL3NjaGVtYS97Y3VzdG9tX3Byb3BlcnR5X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVXZWJob29rOiBbXCJQT1NUIC9vcmdzL3tvcmd9L2hvb2tzXCJdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9vcmdzL3tvcmd9XCJdLFxuICAgIGRlbGV0ZUlzc3VlVHlwZTogW1wiREVMRVRFIC9vcmdzL3tvcmd9L2lzc3VlLXR5cGVzL3tpc3N1ZV90eXBlX2lkfVwiXSxcbiAgICBkZWxldGVXZWJob29rOiBbXCJERUxFVEUgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9XCJdLFxuICAgIGVuYWJsZU9yRGlzYWJsZVNlY3VyaXR5UHJvZHVjdE9uQWxsT3JnUmVwb3M6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS97c2VjdXJpdHlfcHJvZHVjdH0ve2VuYWJsZW1lbnR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5vcmdzLmVuYWJsZU9yRGlzYWJsZVNlY3VyaXR5UHJvZHVjdE9uQWxsT3JnUmVwb3MoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9vcmdzL29yZ3MjZW5hYmxlLW9yLWRpc2FibGUtYS1zZWN1cml0eS1mZWF0dXJlLWZvci1hbi1vcmdhbml6YXRpb25cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvb3Jncy97b3JnfVwiXSxcbiAgICBnZXRBbGxDdXN0b21Qcm9wZXJ0aWVzOiBbXCJHRVQgL29yZ3Mve29yZ30vcHJvcGVydGllcy9zY2hlbWFcIl0sXG4gICAgZ2V0Q3VzdG9tUHJvcGVydHk6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hL3tjdXN0b21fcHJvcGVydHlfbmFtZX1cIixcbiAgICBdLFxuICAgIGdldE1lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL21lbWJlcnNoaXBzL29yZ3Mve29yZ31cIl0sXG4gICAgZ2V0TWVtYmVyc2hpcEZvclVzZXI6IFtcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCJdLFxuICAgIGdldE9yZ1JvbGU6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXMve3JvbGVfaWR9XCJdLFxuICAgIGdldE9yZ1J1bGVzZXRIaXN0b3J5OiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9L2hpc3RvcnlcIl0sXG4gICAgZ2V0T3JnUnVsZXNldFZlcnNpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3tydWxlc2V0X2lkfS9oaXN0b3J5L3t2ZXJzaW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0V2ViaG9vazogW1wiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfVwiXSxcbiAgICBnZXRXZWJob29rQ29uZmlnRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L2hvb2tzL3tob29rX2lkfS9kZWxpdmVyaWVzL3tkZWxpdmVyeV9pZH1cIixcbiAgICBdLFxuICAgIGxpc3Q6IFtcIkdFVCAvb3JnYW5pemF0aW9uc1wiXSxcbiAgICBsaXN0QXBwSW5zdGFsbGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2luc3RhbGxhdGlvbnNcIl0sXG4gICAgbGlzdEF0dGVzdGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2F0dGVzdGF0aW9ucy97c3ViamVjdF9kaWdlc3R9XCJdLFxuICAgIGxpc3RCbG9ja2VkVXNlcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9ibG9ja3NcIl0sXG4gICAgbGlzdEN1c3RvbVByb3BlcnRpZXNWYWx1ZXNGb3JSZXBvczogW1wiR0VUIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvdmFsdWVzXCJdLFxuICAgIGxpc3RGYWlsZWRJbnZpdGF0aW9uczogW1wiR0VUIC9vcmdzL3tvcmd9L2ZhaWxlZF9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9vcmdzXCJdLFxuICAgIGxpc3RGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vb3Jnc1wiXSxcbiAgICBsaXN0SW52aXRhdGlvblRlYW1zOiBbXCJHRVQgL29yZ3Mve29yZ30vaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9L3RlYW1zXCJdLFxuICAgIGxpc3RJc3N1ZVR5cGVzOiBbXCJHRVQgL29yZ3Mve29yZ30vaXNzdWUtdHlwZXNcIl0sXG4gICAgbGlzdE1lbWJlcnM6IFtcIkdFVCAvb3Jncy97b3JnfS9tZW1iZXJzXCJdLFxuICAgIGxpc3RNZW1iZXJzaGlwc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvbWVtYmVyc2hpcHMvb3Jnc1wiXSxcbiAgICBsaXN0T3JnUm9sZVRlYW1zOiBbXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS90ZWFtc1wiXSxcbiAgICBsaXN0T3JnUm9sZVVzZXJzOiBbXCJHRVQgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3tyb2xlX2lkfS91c2Vyc1wiXSxcbiAgICBsaXN0T3JnUm9sZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9vcmdhbml6YXRpb24tcm9sZXNcIl0sXG4gICAgbGlzdE9yZ2FuaXphdGlvbkZpbmVHcmFpbmVkUGVybWlzc2lvbnM6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1maW5lLWdyYWluZWQtcGVybWlzc2lvbnNcIixcbiAgICBdLFxuICAgIGxpc3RPdXRzaWRlQ29sbGFib3JhdG9yczogW1wiR0VUIC9vcmdzL3tvcmd9L291dHNpZGVfY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0UGF0R3JhbnRSZXBvc2l0b3JpZXM6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnMve3BhdF9pZH0vcmVwb3NpdG9yaWVzXCIsXG4gICAgXSxcbiAgICBsaXN0UGF0R3JhbnRSZXF1ZXN0UmVwb3NpdG9yaWVzOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHMve3BhdF9yZXF1ZXN0X2lkfS9yZXBvc2l0b3JpZXNcIixcbiAgICBdLFxuICAgIGxpc3RQYXRHcmFudFJlcXVlc3RzOiBbXCJHRVQgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzXCJdLFxuICAgIGxpc3RQYXRHcmFudHM6IFtcIkdFVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW5zXCJdLFxuICAgIGxpc3RQZW5kaW5nSW52aXRhdGlvbnM6IFtcIkdFVCAvb3Jncy97b3JnfS9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0UHVibGljTWVtYmVyczogW1wiR0VUIC9vcmdzL3tvcmd9L3B1YmxpY19tZW1iZXJzXCJdLFxuICAgIGxpc3RTZWN1cml0eU1hbmFnZXJUZWFtczogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vc2VjdXJpdHktbWFuYWdlcnNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0Lm9yZ3MubGlzdFNlY3VyaXR5TWFuYWdlclRlYW1zKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3Qvb3Jncy9zZWN1cml0eS1tYW5hZ2VycyNsaXN0LXNlY3VyaXR5LW1hbmFnZXItdGVhbXNcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiXSxcbiAgICBsaXN0V2ViaG9va3M6IFtcIkdFVCAvb3Jncy97b3JnfS9ob29rc1wiXSxcbiAgICBwaW5nV2ViaG9vazogW1wiUE9TVCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH0vcGluZ3NcIl0sXG4gICAgcmVkZWxpdmVyV2ViaG9va0RlbGl2ZXJ5OiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfS9hdHRlbXB0c1wiLFxuICAgIF0sXG4gICAgcmVtb3ZlQ3VzdG9tUHJvcGVydHk6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3Byb3BlcnRpZXMvc2NoZW1hL3tjdXN0b21fcHJvcGVydHlfbmFtZX1cIixcbiAgICBdLFxuICAgIHJlbW92ZU1lbWJlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnMve3VzZXJuYW1lfVwiXSxcbiAgICByZW1vdmVNZW1iZXJzaGlwRm9yVXNlcjogW1wiREVMRVRFIC9vcmdzL3tvcmd9L21lbWJlcnNoaXBzL3t1c2VybmFtZX1cIl0sXG4gICAgcmVtb3ZlT3V0c2lkZUNvbGxhYm9yYXRvcjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3V0c2lkZV9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIixcbiAgICBdLFxuICAgIHJlbW92ZVB1YmxpY01lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU2VjdXJpdHlNYW5hZ2VyVGVhbTogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vc2VjdXJpdHktbWFuYWdlcnMvdGVhbXMve3RlYW1fc2x1Z31cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0Lm9yZ3MucmVtb3ZlU2VjdXJpdHlNYW5hZ2VyVGVhbSgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L29yZ3Mvc2VjdXJpdHktbWFuYWdlcnMjcmVtb3ZlLWEtc2VjdXJpdHktbWFuYWdlci10ZWFtXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgcmV2aWV3UGF0R3JhbnRSZXF1ZXN0OiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2VuLXJlcXVlc3RzL3twYXRfcmVxdWVzdF9pZH1cIixcbiAgICBdLFxuICAgIHJldmlld1BhdEdyYW50UmVxdWVzdHNJbkJ1bGs6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS9wZXJzb25hbC1hY2Nlc3MtdG9rZW4tcmVxdWVzdHNcIixcbiAgICBdLFxuICAgIHJldm9rZUFsbE9yZ1JvbGVzVGVhbTogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3RlYW1zL3t0ZWFtX3NsdWd9XCIsXG4gICAgXSxcbiAgICByZXZva2VBbGxPcmdSb2xlc1VzZXI6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy91c2Vycy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICByZXZva2VPcmdSb2xlVGVhbTogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vb3JnYW5pemF0aW9uLXJvbGVzL3RlYW1zL3t0ZWFtX3NsdWd9L3tyb2xlX2lkfVwiLFxuICAgIF0sXG4gICAgcmV2b2tlT3JnUm9sZVVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L29yZ2FuaXphdGlvbi1yb2xlcy91c2Vycy97dXNlcm5hbWV9L3tyb2xlX2lkfVwiLFxuICAgIF0sXG4gICAgc2V0TWVtYmVyc2hpcEZvclVzZXI6IFtcIlBVVCAvb3Jncy97b3JnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCJdLFxuICAgIHNldFB1YmxpY01lbWJlcnNoaXBGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vcHVibGljX21lbWJlcnMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgdW5ibG9ja1VzZXI6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICB1cGRhdGU6IFtcIlBBVENIIC9vcmdzL3tvcmd9XCJdLFxuICAgIHVwZGF0ZUlzc3VlVHlwZTogW1wiUFVUIC9vcmdzL3tvcmd9L2lzc3VlLXR5cGVzL3tpc3N1ZV90eXBlX2lkfVwiXSxcbiAgICB1cGRhdGVNZW1iZXJzaGlwRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvbWVtYmVyc2hpcHMvb3Jncy97b3JnfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlUGF0QWNjZXNzOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3BlcnNvbmFsLWFjY2Vzcy10b2tlbnMve3BhdF9pZH1cIl0sXG4gICAgdXBkYXRlUGF0QWNjZXNzZXM6IFtcIlBPU1QgL29yZ3Mve29yZ30vcGVyc29uYWwtYWNjZXNzLXRva2Vuc1wiXSxcbiAgICB1cGRhdGVXZWJob29rOiBbXCJQQVRDSCAvb3Jncy97b3JnfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgdXBkYXRlV2ViaG9va0NvbmZpZ0Zvck9yZzogW1wiUEFUQ0ggL29yZ3Mve29yZ30vaG9va3Mve2hvb2tfaWR9L2NvbmZpZ1wiXSxcbiAgfSxcbiAgcGFja2FnZXM6IHtcbiAgICBkZWxldGVQYWNrYWdlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCIsXG4gICAgXSxcbiAgICBkZWxldGVQYWNrYWdlRm9yT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlUGFja2FnZUZvclVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCIsXG4gICAgXSxcbiAgICBkZWxldGVQYWNrYWdlVmVyc2lvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS92ZXJzaW9ucy97cGFja2FnZV92ZXJzaW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlUGFja2FnZVZlcnNpb25Gb3JPcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVQYWNrYWdlVmVyc2lvbkZvclVzZXI6IFtcbiAgICAgIFwiREVMRVRFIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JBUGFja2FnZU93bmVkQnlBbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJwYWNrYWdlc1wiLCBcImdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5T3JnXCJdIH0sXG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JBUGFja2FnZU93bmVkQnlUaGVBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICByZW5hbWVkOiBbXG4gICAgICAgICAgXCJwYWNrYWdlc1wiLFxuICAgICAgICAgIFwiZ2V0QWxsUGFja2FnZVZlcnNpb25zRm9yUGFja2FnZU93bmVkQnlBdXRoZW50aWNhdGVkVXNlclwiLFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5QXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zXCIsXG4gICAgXSxcbiAgICBnZXRBbGxQYWNrYWdlVmVyc2lvbnNGb3JQYWNrYWdlT3duZWRCeU9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgICBdLFxuICAgIGdldEFsbFBhY2thZ2VWZXJzaW9uc0ZvclBhY2thZ2VPd25lZEJ5VXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnNcIixcbiAgICBdLFxuICAgIGdldFBhY2thZ2VGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIixcbiAgICBdLFxuICAgIGdldFBhY2thZ2VGb3JPcmdhbml6YXRpb246IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9XCIsXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX1cIixcbiAgICBdLFxuICAgIGdldFBhY2thZ2VWZXJzaW9uRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBnZXRQYWNrYWdlVmVyc2lvbkZvck9yZ2FuaXphdGlvbjogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIixcbiAgICBdLFxuICAgIGdldFBhY2thZ2VWZXJzaW9uRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH1cIixcbiAgICBdLFxuICAgIGxpc3REb2NrZXJNaWdyYXRpb25Db25mbGljdGluZ1BhY2thZ2VzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2VyL2RvY2tlci9jb25mbGljdHNcIixcbiAgICBdLFxuICAgIGxpc3REb2NrZXJNaWdyYXRpb25Db25mbGljdGluZ1BhY2thZ2VzRm9yT3JnYW5pemF0aW9uOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS9kb2NrZXIvY29uZmxpY3RzXCIsXG4gICAgXSxcbiAgICBsaXN0RG9ja2VyTWlncmF0aW9uQ29uZmxpY3RpbmdQYWNrYWdlc0ZvclVzZXI6IFtcbiAgICAgIFwiR0VUIC91c2Vycy97dXNlcm5hbWV9L2RvY2tlci9jb25mbGljdHNcIixcbiAgICBdLFxuICAgIGxpc3RQYWNrYWdlc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcGFja2FnZXNcIl0sXG4gICAgbGlzdFBhY2thZ2VzRm9yT3JnYW5pemF0aW9uOiBbXCJHRVQgL29yZ3Mve29yZ30vcGFja2FnZXNcIl0sXG4gICAgbGlzdFBhY2thZ2VzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzXCJdLFxuICAgIHJlc3RvcmVQYWNrYWdlRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlci9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS9yZXN0b3Jlez90b2tlbn1cIixcbiAgICBdLFxuICAgIHJlc3RvcmVQYWNrYWdlRm9yT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vcmVzdG9yZXs/dG9rZW59XCIsXG4gICAgXSxcbiAgICByZXN0b3JlUGFja2FnZUZvclVzZXI6IFtcbiAgICAgIFwiUE9TVCAvdXNlcnMve3VzZXJuYW1lfS9wYWNrYWdlcy97cGFja2FnZV90eXBlfS97cGFja2FnZV9uYW1lfS9yZXN0b3Jlez90b2tlbn1cIixcbiAgICBdLFxuICAgIHJlc3RvcmVQYWNrYWdlVmVyc2lvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH0vcmVzdG9yZVwiLFxuICAgIF0sXG4gICAgcmVzdG9yZVBhY2thZ2VWZXJzaW9uRm9yT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vcGFja2FnZXMve3BhY2thZ2VfdHlwZX0ve3BhY2thZ2VfbmFtZX0vdmVyc2lvbnMve3BhY2thZ2VfdmVyc2lvbl9pZH0vcmVzdG9yZVwiLFxuICAgIF0sXG4gICAgcmVzdG9yZVBhY2thZ2VWZXJzaW9uRm9yVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2Vycy97dXNlcm5hbWV9L3BhY2thZ2VzL3twYWNrYWdlX3R5cGV9L3twYWNrYWdlX25hbWV9L3ZlcnNpb25zL3twYWNrYWdlX3ZlcnNpb25faWR9L3Jlc3RvcmVcIixcbiAgICBdLFxuICB9LFxuICBwcml2YXRlUmVnaXN0cmllczoge1xuICAgIGNyZWF0ZU9yZ1ByaXZhdGVSZWdpc3RyeTogW1wiUE9TVCAvb3Jncy97b3JnfS9wcml2YXRlLXJlZ2lzdHJpZXNcIl0sXG4gICAgZGVsZXRlT3JnUHJpdmF0ZVJlZ2lzdHJ5OiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS9wcml2YXRlLXJlZ2lzdHJpZXMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gICAgZ2V0T3JnUHJpdmF0ZVJlZ2lzdHJ5OiBbXCJHRVQgL29yZ3Mve29yZ30vcHJpdmF0ZS1yZWdpc3RyaWVzL3tzZWNyZXRfbmFtZX1cIl0sXG4gICAgZ2V0T3JnUHVibGljS2V5OiBbXCJHRVQgL29yZ3Mve29yZ30vcHJpdmF0ZS1yZWdpc3RyaWVzL3B1YmxpYy1rZXlcIl0sXG4gICAgbGlzdE9yZ1ByaXZhdGVSZWdpc3RyaWVzOiBbXCJHRVQgL29yZ3Mve29yZ30vcHJpdmF0ZS1yZWdpc3RyaWVzXCJdLFxuICAgIHVwZGF0ZU9yZ1ByaXZhdGVSZWdpc3RyeTogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS9wcml2YXRlLXJlZ2lzdHJpZXMve3NlY3JldF9uYW1lfVwiLFxuICAgIF0sXG4gIH0sXG4gIHByb2plY3RzOiB7XG4gICAgYWRkQ29sbGFib3JhdG9yOiBbXG4gICAgICBcIlBVVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMuYWRkQ29sbGFib3JhdG9yKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY29sbGFib3JhdG9ycyNhZGQtcHJvamVjdC1jb2xsYWJvcmF0b3JcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjcmVhdGVDYXJkOiBbXG4gICAgICBcIlBPU1QgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vY2FyZHNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmNyZWF0ZUNhcmQoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jYXJkcyNjcmVhdGUtYS1wcm9qZWN0LWNhcmRcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjcmVhdGVDb2x1bW46IFtcbiAgICAgIFwiUE9TVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbHVtbnNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmNyZWF0ZUNvbHVtbigpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NvbHVtbnMjY3JlYXRlLWEtcHJvamVjdC1jb2x1bW5cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjcmVhdGVGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJQT1NUIC91c2VyL3Byb2plY3RzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5jcmVhdGVGb3JBdXRoZW50aWNhdGVkVXNlcigpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL3Byb2plY3RzI2NyZWF0ZS1hLXVzZXItcHJvamVjdFwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGNyZWF0ZUZvck9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3Byb2plY3RzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5jcmVhdGVGb3JPcmcoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9wcm9qZWN0cyNjcmVhdGUtYW4tb3JnYW5pemF0aW9uLXByb2plY3RcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBjcmVhdGVGb3JSZXBvOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb2plY3RzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5jcmVhdGVGb3JSZXBvKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvcHJvamVjdHMjY3JlYXRlLWEtcmVwb3NpdG9yeS1wcm9qZWN0XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgZGVsZXRlOiBbXG4gICAgICBcIkRFTEVURSAvcHJvamVjdHMve3Byb2plY3RfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5kZWxldGUoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9wcm9qZWN0cyNkZWxldGUtYS1wcm9qZWN0XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgZGVsZXRlQ2FyZDogW1xuICAgICAgXCJERUxFVEUgL3Byb2plY3RzL2NvbHVtbnMvY2FyZHMve2NhcmRfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5kZWxldGVDYXJkKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY2FyZHMjZGVsZXRlLWEtcHJvamVjdC1jYXJkXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgZGVsZXRlQ29sdW1uOiBbXG4gICAgICBcIkRFTEVURSAvcHJvamVjdHMvY29sdW1ucy97Y29sdW1uX2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMuZGVsZXRlQ29sdW1uKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY29sdW1ucyNkZWxldGUtYS1wcm9qZWN0LWNvbHVtblwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGdldDogW1xuICAgICAgXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMuZ2V0KCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvcHJvamVjdHMjZ2V0LWEtcHJvamVjdFwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGdldENhcmQ6IFtcbiAgICAgIFwiR0VUIC9wcm9qZWN0cy9jb2x1bW5zL2NhcmRzL3tjYXJkX2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMuZ2V0Q2FyZCgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NhcmRzI2dldC1hLXByb2plY3QtY2FyZFwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGdldENvbHVtbjogW1xuICAgICAgXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmdldENvbHVtbigpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NvbHVtbnMjZ2V0LWEtcHJvamVjdC1jb2x1bW5cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBnZXRQZXJtaXNzaW9uRm9yVXNlcjogW1xuICAgICAgXCJHRVQgL3Byb2plY3RzL3twcm9qZWN0X2lkfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX0vcGVybWlzc2lvblwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMuZ2V0UGVybWlzc2lvbkZvclVzZXIoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jb2xsYWJvcmF0b3JzI2dldC1wcm9qZWN0LXBlcm1pc3Npb24tZm9yLWEtdXNlclwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RDYXJkczogW1xuICAgICAgXCJHRVQgL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH0vY2FyZHNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmxpc3RDYXJkcygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NhcmRzI2xpc3QtcHJvamVjdC1jYXJkc1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RDb2xsYWJvcmF0b3JzOiBbXG4gICAgICBcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbGxhYm9yYXRvcnNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmxpc3RDb2xsYWJvcmF0b3JzKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY29sbGFib3JhdG9ycyNsaXN0LXByb2plY3QtY29sbGFib3JhdG9yc1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RDb2x1bW5zOiBbXG4gICAgICBcIkdFVCAvcHJvamVjdHMve3Byb2plY3RfaWR9L2NvbHVtbnNcIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLmxpc3RDb2x1bW5zKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY29sdW1ucyNsaXN0LXByb2plY3QtY29sdW1uc1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RGb3JPcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3Byb2plY3RzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5saXN0Rm9yT3JnKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvcHJvamVjdHMjbGlzdC1vcmdhbml6YXRpb24tcHJvamVjdHNcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBsaXN0Rm9yUmVwbzogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb2plY3RzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5saXN0Rm9yUmVwbygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL3Byb2plY3RzI2xpc3QtcmVwb3NpdG9yeS1wcm9qZWN0c1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RGb3JVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9wcm9qZWN0c1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMubGlzdEZvclVzZXIoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9wcm9qZWN0cyNsaXN0LXVzZXItcHJvamVjdHNcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBtb3ZlQ2FyZDogW1xuICAgICAgXCJQT1NUIC9wcm9qZWN0cy9jb2x1bW5zL2NhcmRzL3tjYXJkX2lkfS9tb3Zlc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMubW92ZUNhcmQoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jYXJkcyNtb3ZlLWEtcHJvamVjdC1jYXJkXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgbW92ZUNvbHVtbjogW1xuICAgICAgXCJQT1NUIC9wcm9qZWN0cy9jb2x1bW5zL3tjb2x1bW5faWR9L21vdmVzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5tb3ZlQ29sdW1uKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvcHJvamVjdHMvY29sdW1ucyNtb3ZlLWEtcHJvamVjdC1jb2x1bW5cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICByZW1vdmVDb2xsYWJvcmF0b3I6IFtcbiAgICAgIFwiREVMRVRFIC9wcm9qZWN0cy97cHJvamVjdF9pZH0vY29sbGFib3JhdG9ycy97dXNlcm5hbWV9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC5wcm9qZWN0cy5yZW1vdmVDb2xsYWJvcmF0b3IoKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC9wcm9qZWN0cy9jb2xsYWJvcmF0b3JzI3JlbW92ZS11c2VyLWFzLWEtY29sbGFib3JhdG9yXCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgdXBkYXRlOiBbXG4gICAgICBcIlBBVENIIC9wcm9qZWN0cy97cHJvamVjdF9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLnVwZGF0ZSgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL3Byb2plY3RzI3VwZGF0ZS1hLXByb2plY3RcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICB1cGRhdGVDYXJkOiBbXG4gICAgICBcIlBBVENIIC9wcm9qZWN0cy9jb2x1bW5zL2NhcmRzL3tjYXJkX2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QucHJvamVjdHMudXBkYXRlQ2FyZCgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NhcmRzI3VwZGF0ZS1hbi1leGlzdGluZy1wcm9qZWN0LWNhcmRcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICB1cGRhdGVDb2x1bW46IFtcbiAgICAgIFwiUEFUQ0ggL3Byb2plY3RzL2NvbHVtbnMve2NvbHVtbl9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnByb2plY3RzLnVwZGF0ZUNvbHVtbigpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3Byb2plY3RzL2NvbHVtbnMjdXBkYXRlLWFuLWV4aXN0aW5nLXByb2plY3QtY29sdW1uXCIsXG4gICAgICB9LFxuICAgIF0sXG4gIH0sXG4gIHB1bGxzOiB7XG4gICAgY2hlY2tJZk1lcmdlZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L21lcmdlXCJdLFxuICAgIGNyZWF0ZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHNcIl0sXG4gICAgY3JlYXRlUmVwbHlGb3JSZXZpZXdDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlcGxpZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZVJldmlldzogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzXCJdLFxuICAgIGNyZWF0ZVJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgZGVsZXRlUGVuZGluZ1JldmlldzogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlUmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfVwiLFxuICAgIF0sXG4gICAgZGlzbWlzc1JldmlldzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfS9kaXNtaXNzYWxzXCIsXG4gICAgXSxcbiAgICBnZXQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfVwiXSxcbiAgICBnZXRSZXZpZXc6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3Mve3Jldmlld19pZH1cIixcbiAgICBdLFxuICAgIGdldFJldmlld0NvbW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9XCJdLFxuICAgIGxpc3Q6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHNcIl0sXG4gICAgbGlzdENvbW1lbnRzRm9yUmV2aWV3OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2NvbW1lbnRzXCIsXG4gICAgXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L2NvbW1pdHNcIl0sXG4gICAgbGlzdEZpbGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vZmlsZXNcIl0sXG4gICAgbGlzdFJlcXVlc3RlZFJldmlld2VyczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmVxdWVzdGVkX3Jldmlld2Vyc1wiLFxuICAgIF0sXG4gICAgbGlzdFJldmlld0NvbW1lbnRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgbGlzdFJldmlld0NvbW1lbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy9jb21tZW50c1wiXSxcbiAgICBsaXN0UmV2aWV3czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3Jldmlld3NcIl0sXG4gICAgbWVyZ2U6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9tZXJnZVwiXSxcbiAgICByZW1vdmVSZXF1ZXN0ZWRSZXZpZXdlcnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3JlcXVlc3RlZF9yZXZpZXdlcnNcIixcbiAgICBdLFxuICAgIHJlcXVlc3RSZXZpZXdlcnM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXF1ZXN0ZWRfcmV2aWV3ZXJzXCIsXG4gICAgXSxcbiAgICBzdWJtaXRSZXZpZXc6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfS9yZXZpZXdzL3tyZXZpZXdfaWR9L2V2ZW50c1wiLFxuICAgIF0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMve3B1bGxfbnVtYmVyfVwiXSxcbiAgICB1cGRhdGVCcmFuY2g6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wdWxscy97cHVsbF9udW1iZXJ9L3VwZGF0ZS1icmFuY2hcIixcbiAgICBdLFxuICAgIHVwZGF0ZVJldmlldzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL3twdWxsX251bWJlcn0vcmV2aWV3cy97cmV2aWV3X2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlUmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9XCIsXG4gICAgXSxcbiAgfSxcbiAgcmF0ZUxpbWl0OiB7IGdldDogW1wiR0VUIC9yYXRlX2xpbWl0XCJdIH0sXG4gIHJlYWN0aW9uczoge1xuICAgIGNyZWF0ZUZvckNvbW1pdENvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9ySXNzdWU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaXNzdWVzL3tpc3N1ZV9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9ySXNzdWVDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBjcmVhdGVGb3JQdWxsUmVxdWVzdFJldmlld0NvbW1lbnQ6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHVsbHMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRm9yUmVsZWFzZTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBjcmVhdGVGb3JUZWFtRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGNyZWF0ZUZvclRlYW1EaXNjdXNzaW9uSW5Pcmc6IFtcbiAgICAgIFwiUE9TVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9yQ29tbWl0Q29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9ySXNzdWU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUZvcklzc3VlQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2lzc3Vlcy9jb21tZW50cy97Y29tbWVudF9pZH0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUZvclB1bGxSZXF1ZXN0Q29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9yUmVsZWFzZTogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9yZWFjdGlvbnMve3JlYWN0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRm9yVGVhbURpc2N1c3Npb246IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vcmVhY3Rpb25zL3tyZWFjdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUZvclRlYW1EaXNjdXNzaW9uQ29tbWVudDogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50cy97Y29tbWVudF9udW1iZXJ9L3JlYWN0aW9ucy97cmVhY3Rpb25faWR9XCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yQ29tbWl0Q29tbWVudDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGxpc3RGb3JJc3N1ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMve2lzc3VlX251bWJlcn0vcmVhY3Rpb25zXCJdLFxuICAgIGxpc3RGb3JJc3N1ZUNvbW1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pc3N1ZXMvY29tbWVudHMve2NvbW1lbnRfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdEZvclB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3B1bGxzL2NvbW1lbnRzL3tjb21tZW50X2lkfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICAgIGxpc3RGb3JSZWxlYXNlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9L3JlYWN0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdEZvclRlYW1EaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn0vcmVhY3Rpb25zXCIsXG4gICAgXSxcbiAgICBsaXN0Rm9yVGVhbURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9yZWFjdGlvbnNcIixcbiAgICBdLFxuICB9LFxuICByZXBvczoge1xuICAgIGFjY2VwdEludml0YXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcImFjY2VwdEludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgYWNjZXB0SW52aXRhdGlvbkZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBBVENIIC91c2VyL3JlcG9zaXRvcnlfaW52aXRhdGlvbnMve2ludml0YXRpb25faWR9XCIsXG4gICAgXSxcbiAgICBhZGRBcHBBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJhcHBzXCIgfSxcbiAgICBdLFxuICAgIGFkZENvbGxhYm9yYXRvcjogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX1cIl0sXG4gICAgYWRkU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiY29udGV4dHNcIiB9LFxuICAgIF0sXG4gICAgYWRkVGVhbUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ0ZWFtc1wiIH0sXG4gICAgXSxcbiAgICBhZGRVc2VyQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3VzZXJzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcInVzZXJzXCIgfSxcbiAgICBdLFxuICAgIGNhbmNlbFBhZ2VzRGVwbG95bWVudDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9kZXBsb3ltZW50cy97cGFnZXNfZGVwbG95bWVudF9pZH0vY2FuY2VsXCIsXG4gICAgXSxcbiAgICBjaGVja0F1dG9tYXRlZFNlY3VyaXR5Rml4ZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbWF0ZWQtc2VjdXJpdHktZml4ZXNcIixcbiAgICBdLFxuICAgIGNoZWNrQ29sbGFib3JhdG9yOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiXSxcbiAgICBjaGVja1ByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0aW5nOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJpdmF0ZS12dWxuZXJhYmlsaXR5LXJlcG9ydGluZ1wiLFxuICAgIF0sXG4gICAgY2hlY2tWdWxuZXJhYmlsaXR5QWxlcnRzOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdnVsbmVyYWJpbGl0eS1hbGVydHNcIixcbiAgICBdLFxuICAgIGNvZGVvd25lcnNFcnJvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29kZW93bmVycy9lcnJvcnNcIl0sXG4gICAgY29tcGFyZUNvbW1pdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tcGFyZS97YmFzZX0uLi57aGVhZH1cIl0sXG4gICAgY29tcGFyZUNvbW1pdHNXaXRoQmFzZWhlYWQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21wYXJlL3tiYXNlaGVhZH1cIixcbiAgICBdLFxuICAgIGNyZWF0ZUF0dGVzdGF0aW9uOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdHRlc3RhdGlvbnNcIl0sXG4gICAgY3JlYXRlQXV0b2xpbms6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rc1wiXSxcbiAgICBjcmVhdGVDb21taXRDb21tZW50OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L2NvbW1lbnRzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVDb21taXRTaWduYXR1cmVQcm90ZWN0aW9uOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc2lnbmF0dXJlc1wiLFxuICAgIF0sXG4gICAgY3JlYXRlQ29tbWl0U3RhdHVzOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0dXNlcy97c2hhfVwiXSxcbiAgICBjcmVhdGVEZXBsb3lLZXk6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIl0sXG4gICAgY3JlYXRlRGVwbG95bWVudDogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHNcIl0sXG4gICAgY3JlYXRlRGVwbG95bWVudEJyYW5jaFBvbGljeTogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVEZXBsb3ltZW50UHJvdGVjdGlvblJ1bGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50X3Byb3RlY3Rpb25fcnVsZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZURlcGxveW1lbnRTdGF0dXM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9L3N0YXR1c2VzXCIsXG4gICAgXSxcbiAgICBjcmVhdGVEaXNwYXRjaEV2ZW50OiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kaXNwYXRjaGVzXCJdLFxuICAgIGNyZWF0ZUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL3JlcG9zXCJdLFxuICAgIGNyZWF0ZUZvcms6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ZvcmtzXCJdLFxuICAgIGNyZWF0ZUluT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3JlcG9zXCJdLFxuICAgIGNyZWF0ZU9yVXBkYXRlQ3VzdG9tUHJvcGVydGllc1ZhbHVlczogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vcHJvcGVydGllcy92YWx1ZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZU9yVXBkYXRlRW52aXJvbm1lbnQ6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9XCIsXG4gICAgXSxcbiAgICBjcmVhdGVPclVwZGF0ZUZpbGVDb250ZW50czogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgY3JlYXRlT3JnUnVsZXNldDogW1wiUE9TVCAvb3Jncy97b3JnfS9ydWxlc2V0c1wiXSxcbiAgICBjcmVhdGVQYWdlc0RlcGxveW1lbnQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2RlcGxveW1lbnRzXCJdLFxuICAgIGNyZWF0ZVBhZ2VzU2l0ZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgY3JlYXRlUmVsZWFzZTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXNcIl0sXG4gICAgY3JlYXRlUmVwb1J1bGVzZXQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzXCJdLFxuICAgIGNyZWF0ZVVzaW5nVGVtcGxhdGU6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve3RlbXBsYXRlX293bmVyfS97dGVtcGxhdGVfcmVwb30vZ2VuZXJhdGVcIixcbiAgICBdLFxuICAgIGNyZWF0ZVdlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCJdLFxuICAgIGRlY2xpbmVJbnZpdGF0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvdXNlci9yZXBvc2l0b3J5X2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInJlcG9zXCIsIFwiZGVjbGluZUludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgZGVjbGluZUludml0YXRpb25Gb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZTogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBkZWxldGVBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9uc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlQWRtaW5CcmFuY2hQcm90ZWN0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9lbmZvcmNlX2FkbWluc1wiLFxuICAgIF0sXG4gICAgZGVsZXRlQW5FbnZpcm9ubWVudDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUF1dG9saW5rOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rcy97YXV0b2xpbmtfaWR9XCJdLFxuICAgIGRlbGV0ZUJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uXCIsXG4gICAgXSxcbiAgICBkZWxldGVDb21taXRDb21tZW50OiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1lbnRzL3tjb21tZW50X2lkfVwiXSxcbiAgICBkZWxldGVDb21taXRTaWduYXR1cmVQcm90ZWN0aW9uOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXF1aXJlZF9zaWduYXR1cmVzXCIsXG4gICAgXSxcbiAgICBkZWxldGVEZXBsb3lLZXk6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30va2V5cy97a2V5X2lkfVwiXSxcbiAgICBkZWxldGVEZXBsb3ltZW50OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVEZXBsb3ltZW50QnJhbmNoUG9saWN5OiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzL3tlbnZpcm9ubWVudF9uYW1lfS9kZXBsb3ltZW50LWJyYW5jaC1wb2xpY2llcy97YnJhbmNoX3BvbGljeV9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZUZpbGU6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vY29udGVudHMve3BhdGh9XCJdLFxuICAgIGRlbGV0ZUludml0YXRpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9pbnZpdGF0aW9ucy97aW52aXRhdGlvbl9pZH1cIixcbiAgICBdLFxuICAgIGRlbGV0ZU9yZ1J1bGVzZXQ6IFtcIkRFTEVURSAvb3Jncy97b3JnfS9ydWxlc2V0cy97cnVsZXNldF9pZH1cIl0sXG4gICAgZGVsZXRlUGFnZXNTaXRlOiBbXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIGRlbGV0ZVB1bGxSZXF1ZXN0UmV2aWV3UHJvdGVjdGlvbjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIixcbiAgICBdLFxuICAgIGRlbGV0ZVJlbGVhc2U6IFtcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMve3JlbGVhc2VfaWR9XCJdLFxuICAgIGRlbGV0ZVJlbGVhc2VBc3NldDogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2Fzc2V0cy97YXNzZXRfaWR9XCIsXG4gICAgXSxcbiAgICBkZWxldGVSZXBvUnVsZXNldDogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy97cnVsZXNldF9pZH1cIl0sXG4gICAgZGVsZXRlV2ViaG9vazogW1wiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZGlzYWJsZUF1dG9tYXRlZFNlY3VyaXR5Rml4ZXM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hdXRvbWF0ZWQtc2VjdXJpdHktZml4ZXNcIixcbiAgICBdLFxuICAgIGRpc2FibGVEZXBsb3ltZW50UHJvdGVjdGlvblJ1bGU6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnRfcHJvdGVjdGlvbl9ydWxlcy97cHJvdGVjdGlvbl9ydWxlX2lkfVwiLFxuICAgIF0sXG4gICAgZGlzYWJsZVByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0aW5nOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vcHJpdmF0ZS12dWxuZXJhYmlsaXR5LXJlcG9ydGluZ1wiLFxuICAgIF0sXG4gICAgZGlzYWJsZVZ1bG5lcmFiaWxpdHlBbGVydHM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS92dWxuZXJhYmlsaXR5LWFsZXJ0c1wiLFxuICAgIF0sXG4gICAgZG93bmxvYWRBcmNoaXZlOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vemlwYmFsbC97cmVmfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInJlcG9zXCIsIFwiZG93bmxvYWRaaXBiYWxsQXJjaGl2ZVwiXSB9LFxuICAgIF0sXG4gICAgZG93bmxvYWRUYXJiYWxsQXJjaGl2ZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YXJiYWxsL3tyZWZ9XCJdLFxuICAgIGRvd25sb2FkWmlwYmFsbEFyY2hpdmU6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vemlwYmFsbC97cmVmfVwiXSxcbiAgICBlbmFibGVBdXRvbWF0ZWRTZWN1cml0eUZpeGVzOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b21hdGVkLXNlY3VyaXR5LWZpeGVzXCIsXG4gICAgXSxcbiAgICBlbmFibGVQcml2YXRlVnVsbmVyYWJpbGl0eVJlcG9ydGluZzogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3ByaXZhdGUtdnVsbmVyYWJpbGl0eS1yZXBvcnRpbmdcIixcbiAgICBdLFxuICAgIGVuYWJsZVZ1bG5lcmFiaWxpdHlBbGVydHM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS92dWxuZXJhYmlsaXR5LWFsZXJ0c1wiLFxuICAgIF0sXG4gICAgZ2VuZXJhdGVSZWxlYXNlTm90ZXM6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vcmVsZWFzZXMvZ2VuZXJhdGUtbm90ZXNcIixcbiAgICBdLFxuICAgIGdldDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfVwiXSxcbiAgICBnZXRBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9uc1wiLFxuICAgIF0sXG4gICAgZ2V0QWRtaW5CcmFuY2hQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9lbmZvcmNlX2FkbWluc1wiLFxuICAgIF0sXG4gICAgZ2V0QWxsRGVwbG95bWVudFByb3RlY3Rpb25SdWxlczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzXCIsXG4gICAgXSxcbiAgICBnZXRBbGxFbnZpcm9ubWVudHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZW52aXJvbm1lbnRzXCJdLFxuICAgIGdldEFsbFN0YXR1c0NoZWNrQ29udGV4dHM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIixcbiAgICBdLFxuICAgIGdldEFsbFRvcGljczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90b3BpY3NcIl0sXG4gICAgZ2V0QXBwc1dpdGhBY2Nlc3NUb1Byb3RlY3RlZEJyYW5jaDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL2FwcHNcIixcbiAgICBdLFxuICAgIGdldEF1dG9saW5rOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2F1dG9saW5rcy97YXV0b2xpbmtfaWR9XCJdLFxuICAgIGdldEJyYW5jaDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofVwiXSxcbiAgICBnZXRCcmFuY2hQcm90ZWN0aW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvblwiLFxuICAgIF0sXG4gICAgZ2V0QnJhbmNoUnVsZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXMvYnJhbmNoZXMve2JyYW5jaH1cIl0sXG4gICAgZ2V0Q2xvbmVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvY2xvbmVzXCJdLFxuICAgIGdldENvZGVGcmVxdWVuY3lTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9jb2RlX2ZyZXF1ZW5jeVwiXSxcbiAgICBnZXRDb2xsYWJvcmF0b3JQZXJtaXNzaW9uTGV2ZWw6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb2xsYWJvcmF0b3JzL3t1c2VybmFtZX0vcGVybWlzc2lvblwiLFxuICAgIF0sXG4gICAgZ2V0Q29tYmluZWRTdGF0dXNGb3JSZWY6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97cmVmfS9zdGF0dXNcIl0sXG4gICAgZ2V0Q29tbWl0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve3JlZn1cIl0sXG4gICAgZ2V0Q29tbWl0QWN0aXZpdHlTdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9jb21taXRfYWN0aXZpdHlcIl0sXG4gICAgZ2V0Q29tbWl0Q29tbWVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgZ2V0Q29tbWl0U2lnbmF0dXJlUHJvdGVjdGlvbjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc2lnbmF0dXJlc1wiLFxuICAgIF0sXG4gICAgZ2V0Q29tbXVuaXR5UHJvZmlsZU1ldHJpY3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbXVuaXR5L3Byb2ZpbGVcIl0sXG4gICAgZ2V0Q29udGVudDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb250ZW50cy97cGF0aH1cIl0sXG4gICAgZ2V0Q29udHJpYnV0b3JzU3RhdHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc3RhdHMvY29udHJpYnV0b3JzXCJdLFxuICAgIGdldEN1c3RvbURlcGxveW1lbnRQcm90ZWN0aW9uUnVsZTogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL3twcm90ZWN0aW9uX3J1bGVfaWR9XCIsXG4gICAgXSxcbiAgICBnZXRDdXN0b21Qcm9wZXJ0aWVzVmFsdWVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3Byb3BlcnRpZXMvdmFsdWVzXCJdLFxuICAgIGdldERlcGxveUtleTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9rZXlzL3trZXlfaWR9XCJdLFxuICAgIGdldERlcGxveW1lbnQ6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZGVwbG95bWVudHMve2RlcGxveW1lbnRfaWR9XCJdLFxuICAgIGdldERlcGxveW1lbnRCcmFuY2hQb2xpY3k6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9L2RlcGxveW1lbnQtYnJhbmNoLXBvbGljaWVzL3ticmFuY2hfcG9saWN5X2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0RGVwbG95bWVudFN0YXR1czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2RlcGxveW1lbnRzL3tkZXBsb3ltZW50X2lkfS9zdGF0dXNlcy97c3RhdHVzX2lkfVwiLFxuICAgIF0sXG4gICAgZ2V0RW52aXJvbm1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9lbnZpcm9ubWVudHMve2Vudmlyb25tZW50X25hbWV9XCIsXG4gICAgXSxcbiAgICBnZXRMYXRlc3RQYWdlc0J1aWxkOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkcy9sYXRlc3RcIl0sXG4gICAgZ2V0TGF0ZXN0UmVsZWFzZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9sYXRlc3RcIl0sXG4gICAgZ2V0T3JnUnVsZVN1aXRlOiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMvcnVsZS1zdWl0ZXMve3J1bGVfc3VpdGVfaWR9XCJdLFxuICAgIGdldE9yZ1J1bGVTdWl0ZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9ydWxlc2V0cy9ydWxlLXN1aXRlc1wiXSxcbiAgICBnZXRPcmdSdWxlc2V0OiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIGdldE9yZ1J1bGVzZXRzOiBbXCJHRVQgL29yZ3Mve29yZ30vcnVsZXNldHNcIl0sXG4gICAgZ2V0UGFnZXM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXNcIl0sXG4gICAgZ2V0UGFnZXNCdWlsZDogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9idWlsZHMve2J1aWxkX2lkfVwiXSxcbiAgICBnZXRQYWdlc0RlcGxveW1lbnQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9wYWdlcy9kZXBsb3ltZW50cy97cGFnZXNfZGVwbG95bWVudF9pZH1cIixcbiAgICBdLFxuICAgIGdldFBhZ2VzSGVhbHRoQ2hlY2s6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvaGVhbHRoXCJdLFxuICAgIGdldFBhcnRpY2lwYXRpb25TdGF0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zdGF0cy9wYXJ0aWNpcGF0aW9uXCJdLFxuICAgIGdldFB1bGxSZXF1ZXN0UmV2aWV3UHJvdGVjdGlvbjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIixcbiAgICBdLFxuICAgIGdldFB1bmNoQ2FyZFN0YXRzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3N0YXRzL3B1bmNoX2NhcmRcIl0sXG4gICAgZ2V0UmVhZG1lOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlYWRtZVwiXSxcbiAgICBnZXRSZWFkbWVJbkRpcmVjdG9yeTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWFkbWUve2Rpcn1cIl0sXG4gICAgZ2V0UmVsZWFzZTogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgZ2V0UmVsZWFzZUFzc2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL2Fzc2V0cy97YXNzZXRfaWR9XCJdLFxuICAgIGdldFJlbGVhc2VCeVRhZzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy90YWdzL3t0YWd9XCJdLFxuICAgIGdldFJlcG9SdWxlU3VpdGU6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy9ydWxlLXN1aXRlcy97cnVsZV9zdWl0ZV9pZH1cIixcbiAgICBdLFxuICAgIGdldFJlcG9SdWxlU3VpdGVzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3J1bGUtc3VpdGVzXCJdLFxuICAgIGdldFJlcG9SdWxlc2V0OiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICBnZXRSZXBvUnVsZXNldEhpc3Rvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ydWxlc2V0cy97cnVsZXNldF9pZH0vaGlzdG9yeVwiLFxuICAgIF0sXG4gICAgZ2V0UmVwb1J1bGVzZXRWZXJzaW9uOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMve3J1bGVzZXRfaWR9L2hpc3Rvcnkve3ZlcnNpb25faWR9XCIsXG4gICAgXSxcbiAgICBnZXRSZXBvUnVsZXNldHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHNcIl0sXG4gICAgZ2V0U3RhdHVzQ2hlY2tzUHJvdGVjdGlvbjogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrc1wiLFxuICAgIF0sXG4gICAgZ2V0VGVhbXNXaXRoQWNjZXNzVG9Qcm90ZWN0ZWRCcmFuY2g6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgIF0sXG4gICAgZ2V0VG9wUGF0aHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhZmZpYy9wb3B1bGFyL3BhdGhzXCJdLFxuICAgIGdldFRvcFJlZmVycmVyczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90cmFmZmljL3BvcHVsYXIvcmVmZXJyZXJzXCJdLFxuICAgIGdldFVzZXJzV2l0aEFjY2Vzc1RvUHJvdGVjdGVkQnJhbmNoOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIixcbiAgICBdLFxuICAgIGdldFZpZXdzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3RyYWZmaWMvdmlld3NcIl0sXG4gICAgZ2V0V2ViaG9vazogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgZ2V0V2ViaG9va0NvbmZpZ0ZvclJlcG86IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vY29uZmlnXCIsXG4gICAgXSxcbiAgICBnZXRXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllcy97ZGVsaXZlcnlfaWR9XCIsXG4gICAgXSxcbiAgICBsaXN0QWN0aXZpdGllczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9hY3Rpdml0eVwiXSxcbiAgICBsaXN0QXR0ZXN0YXRpb25zOiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXR0ZXN0YXRpb25zL3tzdWJqZWN0X2RpZ2VzdH1cIixcbiAgICBdLFxuICAgIGxpc3RBdXRvbGlua3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vYXV0b2xpbmtzXCJdLFxuICAgIGxpc3RCcmFuY2hlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlc1wiXSxcbiAgICBsaXN0QnJhbmNoZXNGb3JIZWFkQ29tbWl0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29tbWl0cy97Y29tbWl0X3NoYX0vYnJhbmNoZXMtd2hlcmUtaGVhZFwiLFxuICAgIF0sXG4gICAgbGlzdENvbGxhYm9yYXRvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29sbGFib3JhdG9yc1wiXSxcbiAgICBsaXN0Q29tbWVudHNGb3JDb21taXQ6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tjb21taXRfc2hhfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgbGlzdENvbW1pdENvbW1lbnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50c1wiXSxcbiAgICBsaXN0Q29tbWl0U3RhdHVzZXNGb3JSZWY6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzL3tyZWZ9L3N0YXR1c2VzXCIsXG4gICAgXSxcbiAgICBsaXN0Q29tbWl0czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21taXRzXCJdLFxuICAgIGxpc3RDb250cmlidXRvcnM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vY29udHJpYnV0b3JzXCJdLFxuICAgIGxpc3RDdXN0b21EZXBsb3ltZW50UnVsZUludGVncmF0aW9uczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudF9wcm90ZWN0aW9uX3J1bGVzL2FwcHNcIixcbiAgICBdLFxuICAgIGxpc3REZXBsb3lLZXlzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2tleXNcIl0sXG4gICAgbGlzdERlcGxveW1lbnRCcmFuY2hQb2xpY2llczogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXNcIixcbiAgICBdLFxuICAgIGxpc3REZXBsb3ltZW50U3RhdHVzZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50cy97ZGVwbG95bWVudF9pZH0vc3RhdHVzZXNcIixcbiAgICBdLFxuICAgIGxpc3REZXBsb3ltZW50czogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9kZXBsb3ltZW50c1wiXSxcbiAgICBsaXN0Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9yZXBvc1wiXSxcbiAgICBsaXN0Rm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vcmVwb3NcIl0sXG4gICAgbGlzdEZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9yZXBvc1wiXSxcbiAgICBsaXN0Rm9ya3M6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vZm9ya3NcIl0sXG4gICAgbGlzdEludml0YXRpb25zOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zXCJdLFxuICAgIGxpc3RJbnZpdGF0aW9uc0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvcmVwb3NpdG9yeV9pbnZpdGF0aW9uc1wiXSxcbiAgICBsaXN0TGFuZ3VhZ2VzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2xhbmd1YWdlc1wiXSxcbiAgICBsaXN0UGFnZXNCdWlsZHM6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vcGFnZXMvYnVpbGRzXCJdLFxuICAgIGxpc3RQdWJsaWM6IFtcIkdFVCAvcmVwb3NpdG9yaWVzXCJdLFxuICAgIGxpc3RQdWxsUmVxdWVzdHNBc3NvY2lhdGVkV2l0aENvbW1pdDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbW1pdHMve2NvbW1pdF9zaGF9L3B1bGxzXCIsXG4gICAgXSxcbiAgICBsaXN0UmVsZWFzZUFzc2V0czogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3JlbGVhc2VzL3tyZWxlYXNlX2lkfS9hc3NldHNcIixcbiAgICBdLFxuICAgIGxpc3RSZWxlYXNlczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlc1wiXSxcbiAgICBsaXN0VGFnczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90YWdzXCJdLFxuICAgIGxpc3RUZWFtczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90ZWFtc1wiXSxcbiAgICBsaXN0V2ViaG9va0RlbGl2ZXJpZXM6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH0vZGVsaXZlcmllc1wiLFxuICAgIF0sXG4gICAgbGlzdFdlYmhvb2tzOiBbXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzXCJdLFxuICAgIG1lcmdlOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9tZXJnZXNcIl0sXG4gICAgbWVyZ2VVcHN0cmVhbTogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vbWVyZ2UtdXBzdHJlYW1cIl0sXG4gICAgcGluZ1dlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9waW5nc1wiXSxcbiAgICByZWRlbGl2ZXJXZWJob29rRGVsaXZlcnk6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vaG9va3Mve2hvb2tfaWR9L2RlbGl2ZXJpZXMve2RlbGl2ZXJ5X2lkfS9hdHRlbXB0c1wiLFxuICAgIF0sXG4gICAgcmVtb3ZlQXBwQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJhcHBzXCIgfSxcbiAgICBdLFxuICAgIHJlbW92ZUNvbGxhYm9yYXRvcjogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2NvbGxhYm9yYXRvcnMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlU3RhdHVzQ2hlY2tDb250ZXh0czogW1xuICAgICAgXCJERUxFVEUgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfc3RhdHVzX2NoZWNrcy9jb250ZXh0c1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJjb250ZXh0c1wiIH0sXG4gICAgXSxcbiAgICByZW1vdmVTdGF0dXNDaGVja1Byb3RlY3Rpb246IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIixcbiAgICBdLFxuICAgIHJlbW92ZVRlYW1BY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiREVMRVRFIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy90ZWFtc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ0ZWFtc1wiIH0sXG4gICAgXSxcbiAgICByZW1vdmVVc2VyQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIkRFTEVURSAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvdXNlcnNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwidXNlcnNcIiB9LFxuICAgIF0sXG4gICAgcmVuYW1lQnJhbmNoOiBbXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9yZW5hbWVcIl0sXG4gICAgcmVwbGFjZUFsbFRvcGljczogW1wiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS90b3BpY3NcIl0sXG4gICAgcmVxdWVzdFBhZ2VzQnVpbGQ6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzL2J1aWxkc1wiXSxcbiAgICBzZXRBZG1pbkJyYW5jaFByb3RlY3Rpb246IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9lbmZvcmNlX2FkbWluc1wiLFxuICAgIF0sXG4gICAgc2V0QXBwQWNjZXNzUmVzdHJpY3Rpb25zOiBbXG4gICAgICBcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vYnJhbmNoZXMve2JyYW5jaH0vcHJvdGVjdGlvbi9yZXN0cmljdGlvbnMvYXBwc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJhcHBzXCIgfSxcbiAgICBdLFxuICAgIHNldFN0YXR1c0NoZWNrQ29udGV4dHM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3MvY29udGV4dHNcIixcbiAgICAgIHt9LFxuICAgICAgeyBtYXBUb0RhdGE6IFwiY29udGV4dHNcIiB9LFxuICAgIF0sXG4gICAgc2V0VGVhbUFjY2Vzc1Jlc3RyaWN0aW9uczogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVzdHJpY3Rpb25zL3RlYW1zXCIsXG4gICAgICB7fSxcbiAgICAgIHsgbWFwVG9EYXRhOiBcInRlYW1zXCIgfSxcbiAgICBdLFxuICAgIHNldFVzZXJBY2Nlc3NSZXN0cmljdGlvbnM6IFtcbiAgICAgIFwiUFVUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3Jlc3RyaWN0aW9ucy91c2Vyc1wiLFxuICAgICAge30sXG4gICAgICB7IG1hcFRvRGF0YTogXCJ1c2Vyc1wiIH0sXG4gICAgXSxcbiAgICB0ZXN0UHVzaFdlYmhvb2s6IFtcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS90ZXN0c1wiXSxcbiAgICB0cmFuc2ZlcjogW1wiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vdHJhbnNmZXJcIl0sXG4gICAgdXBkYXRlOiBbXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb31cIl0sXG4gICAgdXBkYXRlQnJhbmNoUHJvdGVjdGlvbjogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb25cIixcbiAgICBdLFxuICAgIHVwZGF0ZUNvbW1pdENvbW1lbnQ6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9jb21tZW50cy97Y29tbWVudF9pZH1cIl0sXG4gICAgdXBkYXRlRGVwbG95bWVudEJyYW5jaFBvbGljeTogW1xuICAgICAgXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L2Vudmlyb25tZW50cy97ZW52aXJvbm1lbnRfbmFtZX0vZGVwbG95bWVudC1icmFuY2gtcG9saWNpZXMve2JyYW5jaF9wb2xpY3lfaWR9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVJbmZvcm1hdGlvbkFib3V0UGFnZXNTaXRlOiBbXCJQVVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3BhZ2VzXCJdLFxuICAgIHVwZGF0ZUludml0YXRpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2ludml0YXRpb25zL3tpbnZpdGF0aW9uX2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlT3JnUnVsZXNldDogW1wiUFVUIC9vcmdzL3tvcmd9L3J1bGVzZXRzL3tydWxlc2V0X2lkfVwiXSxcbiAgICB1cGRhdGVQdWxsUmVxdWVzdFJldmlld1Byb3RlY3Rpb246IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2JyYW5jaGVzL3ticmFuY2h9L3Byb3RlY3Rpb24vcmVxdWlyZWRfcHVsbF9yZXF1ZXN0X3Jldmlld3NcIixcbiAgICBdLFxuICAgIHVwZGF0ZVJlbGVhc2U6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH1cIl0sXG4gICAgdXBkYXRlUmVsZWFzZUFzc2V0OiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy9hc3NldHMve2Fzc2V0X2lkfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlUmVwb1J1bGVzZXQ6IFtcIlBVVCAvcmVwb3Mve293bmVyfS97cmVwb30vcnVsZXNldHMve3J1bGVzZXRfaWR9XCJdLFxuICAgIHVwZGF0ZVN0YXR1c0NoZWNrUG90ZWN0aW9uOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJyZXBvc1wiLCBcInVwZGF0ZVN0YXR1c0NoZWNrUHJvdGVjdGlvblwiXSB9LFxuICAgIF0sXG4gICAgdXBkYXRlU3RhdHVzQ2hlY2tQcm90ZWN0aW9uOiBbXG4gICAgICBcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9icmFuY2hlcy97YnJhbmNofS9wcm90ZWN0aW9uL3JlcXVpcmVkX3N0YXR1c19jaGVja3NcIixcbiAgICBdLFxuICAgIHVwZGF0ZVdlYmhvb2s6IFtcIlBBVENIIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9ob29rcy97aG9va19pZH1cIl0sXG4gICAgdXBkYXRlV2ViaG9va0NvbmZpZ0ZvclJlcG86IFtcbiAgICAgIFwiUEFUQ0ggL3JlcG9zL3tvd25lcn0ve3JlcG99L2hvb2tzL3tob29rX2lkfS9jb25maWdcIixcbiAgICBdLFxuICAgIHVwbG9hZFJlbGVhc2VBc3NldDogW1xuICAgICAgXCJQT1NUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9yZWxlYXNlcy97cmVsZWFzZV9pZH0vYXNzZXRzez9uYW1lLGxhYmVsfVwiLFxuICAgICAgeyBiYXNlVXJsOiBcImh0dHBzOi8vdXBsb2Fkcy5naXRodWIuY29tXCIgfSxcbiAgICBdLFxuICB9LFxuICBzZWFyY2g6IHtcbiAgICBjb2RlOiBbXCJHRVQgL3NlYXJjaC9jb2RlXCJdLFxuICAgIGNvbW1pdHM6IFtcIkdFVCAvc2VhcmNoL2NvbW1pdHNcIl0sXG4gICAgaXNzdWVzQW5kUHVsbFJlcXVlc3RzOiBbXG4gICAgICBcIkdFVCAvc2VhcmNoL2lzc3Vlc1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3Quc2VhcmNoLmlzc3Vlc0FuZFB1bGxSZXF1ZXN0cygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3NlYXJjaC9zZWFyY2gjc2VhcmNoLWlzc3Vlcy1hbmQtcHVsbC1yZXF1ZXN0c1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxhYmVsczogW1wiR0VUIC9zZWFyY2gvbGFiZWxzXCJdLFxuICAgIHJlcG9zOiBbXCJHRVQgL3NlYXJjaC9yZXBvc2l0b3JpZXNcIl0sXG4gICAgdG9waWNzOiBbXCJHRVQgL3NlYXJjaC90b3BpY3NcIl0sXG4gICAgdXNlcnM6IFtcIkdFVCAvc2VhcmNoL3VzZXJzXCJdLFxuICB9LFxuICBzZWNyZXRTY2FubmluZzoge1xuICAgIGNyZWF0ZVB1c2hQcm90ZWN0aW9uQnlwYXNzOiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3JldC1zY2FubmluZy9wdXNoLXByb3RlY3Rpb24tYnlwYXNzZXNcIixcbiAgICBdLFxuICAgIGdldEFsZXJ0OiBbXG4gICAgICBcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgZ2V0U2Nhbkhpc3Rvcnk6IFtcIkdFVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL3NjYW4taGlzdG9yeVwiXSxcbiAgICBsaXN0QWxlcnRzRm9yRW50ZXJwcmlzZTogW1xuICAgICAgXCJHRVQgL2VudGVycHJpc2VzL3tlbnRlcnByaXNlfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCIsXG4gICAgXSxcbiAgICBsaXN0QWxlcnRzRm9yT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0c1wiXSxcbiAgICBsaXN0QWxlcnRzRm9yUmVwbzogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWNyZXQtc2Nhbm5pbmcvYWxlcnRzXCJdLFxuICAgIGxpc3RMb2NhdGlvbnNGb3JBbGVydDogW1xuICAgICAgXCJHRVQgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3JldC1zY2FubmluZy9hbGVydHMve2FsZXJ0X251bWJlcn0vbG9jYXRpb25zXCIsXG4gICAgXSxcbiAgICB1cGRhdGVBbGVydDogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjcmV0LXNjYW5uaW5nL2FsZXJ0cy97YWxlcnRfbnVtYmVyfVwiLFxuICAgIF0sXG4gIH0sXG4gIHNlY3VyaXR5QWR2aXNvcmllczoge1xuICAgIGNyZWF0ZUZvcms6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy97Z2hzYV9pZH0vZm9ya3NcIixcbiAgICBdLFxuICAgIGNyZWF0ZVByaXZhdGVWdWxuZXJhYmlsaXR5UmVwb3J0OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXMvcmVwb3J0c1wiLFxuICAgIF0sXG4gICAgY3JlYXRlUmVwb3NpdG9yeUFkdmlzb3J5OiBbXG4gICAgICBcIlBPU1QgL3JlcG9zL3tvd25lcn0ve3JlcG99L3NlY3VyaXR5LWFkdmlzb3JpZXNcIixcbiAgICBdLFxuICAgIGNyZWF0ZVJlcG9zaXRvcnlBZHZpc29yeUN2ZVJlcXVlc3Q6IFtcbiAgICAgIFwiUE9TVCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy97Z2hzYV9pZH0vY3ZlXCIsXG4gICAgXSxcbiAgICBnZXRHbG9iYWxBZHZpc29yeTogW1wiR0VUIC9hZHZpc29yaWVzL3tnaHNhX2lkfVwiXSxcbiAgICBnZXRSZXBvc2l0b3J5QWR2aXNvcnk6IFtcbiAgICAgIFwiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzL3tnaHNhX2lkfVwiLFxuICAgIF0sXG4gICAgbGlzdEdsb2JhbEFkdmlzb3JpZXM6IFtcIkdFVCAvYWR2aXNvcmllc1wiXSxcbiAgICBsaXN0T3JnUmVwb3NpdG9yeUFkdmlzb3JpZXM6IFtcIkdFVCAvb3Jncy97b3JnfS9zZWN1cml0eS1hZHZpc29yaWVzXCJdLFxuICAgIGxpc3RSZXBvc2l0b3J5QWR2aXNvcmllczogW1wiR0VUIC9yZXBvcy97b3duZXJ9L3tyZXBvfS9zZWN1cml0eS1hZHZpc29yaWVzXCJdLFxuICAgIHVwZGF0ZVJlcG9zaXRvcnlBZHZpc29yeTogW1xuICAgICAgXCJQQVRDSCAvcmVwb3Mve293bmVyfS97cmVwb30vc2VjdXJpdHktYWR2aXNvcmllcy97Z2hzYV9pZH1cIixcbiAgICBdLFxuICB9LFxuICB0ZWFtczoge1xuICAgIGFkZE9yVXBkYXRlTWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgYWRkT3JVcGRhdGVQcm9qZWN0UGVybWlzc2lvbnNJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcHJvamVjdHMve3Byb2plY3RfaWR9XCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC50ZWFtcy5hZGRPclVwZGF0ZVByb2plY3RQZXJtaXNzaW9uc0luT3JnKCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvdGVhbXMvdGVhbXMjYWRkLW9yLXVwZGF0ZS10ZWFtLXByb2plY3QtcGVybWlzc2lvbnNcIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICBhZGRPclVwZGF0ZVByb2plY3RQZXJtaXNzaW9uc0xlZ2FjeTogW1xuICAgICAgXCJQVVQgL3RlYW1zL3t0ZWFtX2lkfS9wcm9qZWN0cy97cHJvamVjdF9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnRlYW1zLmFkZE9yVXBkYXRlUHJvamVjdFBlcm1pc3Npb25zTGVnYWN5KCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvdGVhbXMvdGVhbXMjYWRkLW9yLXVwZGF0ZS10ZWFtLXByb2plY3QtcGVybWlzc2lvbnMtbGVnYWN5XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgYWRkT3JVcGRhdGVSZXBvUGVybWlzc2lvbnNJbk9yZzogW1xuICAgICAgXCJQVVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3Mve293bmVyfS97cmVwb31cIixcbiAgICBdLFxuICAgIGNoZWNrUGVybWlzc2lvbnNGb3JQcm9qZWN0SW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzL3twcm9qZWN0X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QudGVhbXMuY2hlY2tQZXJtaXNzaW9uc0ZvclByb2plY3RJbk9yZygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3RlYW1zL3RlYW1zI2NoZWNrLXRlYW0tcGVybWlzc2lvbnMtZm9yLWEtcHJvamVjdFwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGNoZWNrUGVybWlzc2lvbnNGb3JQcm9qZWN0TGVnYWN5OiBbXG4gICAgICBcIkdFVCAvdGVhbXMve3RlYW1faWR9L3Byb2plY3RzL3twcm9qZWN0X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QudGVhbXMuY2hlY2tQZXJtaXNzaW9uc0ZvclByb2plY3RMZWdhY3koKSBpcyBkZXByZWNhdGVkLCBzZWUgaHR0cHM6Ly9kb2NzLmdpdGh1Yi5jb20vcmVzdC90ZWFtcy90ZWFtcyNjaGVjay10ZWFtLXBlcm1pc3Npb25zLWZvci1hLXByb2plY3QtbGVnYWN5XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgY2hlY2tQZXJtaXNzaW9uc0ZvclJlcG9Jbk9yZzogW1xuICAgICAgXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3Mve293bmVyfS97cmVwb31cIixcbiAgICBdLFxuICAgIGNyZWF0ZTogW1wiUE9TVCAvb3Jncy97b3JnfS90ZWFtc1wiXSxcbiAgICBjcmVhdGVEaXNjdXNzaW9uQ29tbWVudEluT3JnOiBbXG4gICAgICBcIlBPU1QgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnMve2Rpc2N1c3Npb25fbnVtYmVyfS9jb21tZW50c1wiLFxuICAgIF0sXG4gICAgY3JlYXRlRGlzY3Vzc2lvbkluT3JnOiBbXCJQT1NUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zXCJdLFxuICAgIGRlbGV0ZURpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcbiAgICAgIFwiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgZGVsZXRlRGlzY3Vzc2lvbkluT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICBkZWxldGVJbk9yZzogW1wiREVMRVRFIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9XCJdLFxuICAgIGdldEJ5TmFtZTogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9XCJdLFxuICAgIGdldERpc2N1c3Npb25Db21tZW50SW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHMve2NvbW1lbnRfbnVtYmVyfVwiLFxuICAgIF0sXG4gICAgZ2V0RGlzY3Vzc2lvbkluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICBnZXRNZW1iZXJzaGlwRm9yVXNlckluT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9tZW1iZXJzaGlwcy97dXNlcm5hbWV9XCIsXG4gICAgXSxcbiAgICBsaXN0OiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXNcIl0sXG4gICAgbGlzdENoaWxkSW5Pcmc6IFtcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS90ZWFtc1wiXSxcbiAgICBsaXN0RGlzY3Vzc2lvbkNvbW1lbnRzSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L2Rpc2N1c3Npb25zL3tkaXNjdXNzaW9uX251bWJlcn0vY29tbWVudHNcIixcbiAgICBdLFxuICAgIGxpc3REaXNjdXNzaW9uc0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vZGlzY3Vzc2lvbnNcIl0sXG4gICAgbGlzdEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvdGVhbXNcIl0sXG4gICAgbGlzdE1lbWJlcnNJbk9yZzogW1wiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L21lbWJlcnNcIl0sXG4gICAgbGlzdFBlbmRpbmdJbnZpdGF0aW9uc0luT3JnOiBbXG4gICAgICBcIkdFVCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9pbnZpdGF0aW9uc1wiLFxuICAgIF0sXG4gICAgbGlzdFByb2plY3RzSW5Pcmc6IFtcbiAgICAgIFwiR0VUIC9vcmdzL3tvcmd9L3RlYW1zL3t0ZWFtX3NsdWd9L3Byb2plY3RzXCIsXG4gICAgICB7fSxcbiAgICAgIHtcbiAgICAgICAgZGVwcmVjYXRlZDpcbiAgICAgICAgICBcIm9jdG9raXQucmVzdC50ZWFtcy5saXN0UHJvamVjdHNJbk9yZygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3RlYW1zL3RlYW1zI2xpc3QtdGVhbS1wcm9qZWN0c1wiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RQcm9qZWN0c0xlZ2FjeTogW1xuICAgICAgXCJHRVQgL3RlYW1zL3t0ZWFtX2lkfS9wcm9qZWN0c1wiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QudGVhbXMubGlzdFByb2plY3RzTGVnYWN5KCkgaXMgZGVwcmVjYXRlZCwgc2VlIGh0dHBzOi8vZG9jcy5naXRodWIuY29tL3Jlc3QvdGVhbXMvdGVhbXMjbGlzdC10ZWFtLXByb2plY3RzLWxlZ2FjeVwiLFxuICAgICAgfSxcbiAgICBdLFxuICAgIGxpc3RSZXBvc0luT3JnOiBbXCJHRVQgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vcmVwb3NcIl0sXG4gICAgcmVtb3ZlTWVtYmVyc2hpcEZvclVzZXJJbk9yZzogW1xuICAgICAgXCJERUxFVEUgL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z30vbWVtYmVyc2hpcHMve3VzZXJuYW1lfVwiLFxuICAgIF0sXG4gICAgcmVtb3ZlUHJvamVjdEluT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9wcm9qZWN0cy97cHJvamVjdF9pZH1cIixcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBkZXByZWNhdGVkOlxuICAgICAgICAgIFwib2N0b2tpdC5yZXN0LnRlYW1zLnJlbW92ZVByb2plY3RJbk9yZygpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3RlYW1zL3RlYW1zI3JlbW92ZS1hLXByb2plY3QtZnJvbS1hLXRlYW1cIixcbiAgICAgIH0sXG4gICAgXSxcbiAgICByZW1vdmVQcm9qZWN0TGVnYWN5OiBbXG4gICAgICBcIkRFTEVURSAvdGVhbXMve3RlYW1faWR9L3Byb2plY3RzL3twcm9qZWN0X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7XG4gICAgICAgIGRlcHJlY2F0ZWQ6XG4gICAgICAgICAgXCJvY3Rva2l0LnJlc3QudGVhbXMucmVtb3ZlUHJvamVjdExlZ2FjeSgpIGlzIGRlcHJlY2F0ZWQsIHNlZSBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9yZXN0L3RlYW1zL3RlYW1zI3JlbW92ZS1hLXByb2plY3QtZnJvbS1hLXRlYW0tbGVnYWN5XCIsXG4gICAgICB9LFxuICAgIF0sXG4gICAgcmVtb3ZlUmVwb0luT3JnOiBbXG4gICAgICBcIkRFTEVURSAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9yZXBvcy97b3duZXJ9L3tyZXBvfVwiLFxuICAgIF0sXG4gICAgdXBkYXRlRGlzY3Vzc2lvbkNvbW1lbnRJbk9yZzogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9L2NvbW1lbnRzL3tjb21tZW50X251bWJlcn1cIixcbiAgICBdLFxuICAgIHVwZGF0ZURpc2N1c3Npb25Jbk9yZzogW1xuICAgICAgXCJQQVRDSCAvb3Jncy97b3JnfS90ZWFtcy97dGVhbV9zbHVnfS9kaXNjdXNzaW9ucy97ZGlzY3Vzc2lvbl9udW1iZXJ9XCIsXG4gICAgXSxcbiAgICB1cGRhdGVJbk9yZzogW1wiUEFUQ0ggL29yZ3Mve29yZ30vdGVhbXMve3RlYW1fc2x1Z31cIl0sXG4gIH0sXG4gIHVzZXJzOiB7XG4gICAgYWRkRW1haWxGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBPU1QgL3VzZXIvZW1haWxzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBhZGRFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJQT1NUIC91c2VyL2VtYWlsc1wiXSxcbiAgICBhZGRTb2NpYWxBY2NvdW50Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvc29jaWFsX2FjY291bnRzXCJdLFxuICAgIGJsb2NrOiBbXCJQVVQgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tCbG9ja2VkOiBbXCJHRVQgL3VzZXIvYmxvY2tzL3t1c2VybmFtZX1cIl0sXG4gICAgY2hlY2tGb2xsb3dpbmdGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vZm9sbG93aW5nL3t0YXJnZXRfdXNlcn1cIl0sXG4gICAgY2hlY2tQZXJzb25Jc0ZvbGxvd2VkQnlBdXRoZW50aWNhdGVkOiBbXCJHRVQgL3VzZXIvZm9sbG93aW5nL3t1c2VybmFtZX1cIl0sXG4gICAgY3JlYXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJQT1NUIC91c2VyL2dwZ19rZXlzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJjcmVhdGVHcGdLZXlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgY3JlYXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIlBPU1QgL3VzZXIvZ3BnX2tleXNcIl0sXG4gICAgY3JlYXRlUHVibGljU3NoS2V5Rm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJQT1NUIC91c2VyL2tleXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImNyZWF0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBjcmVhdGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9rZXlzXCJdLFxuICAgIGNyZWF0ZVNzaFNpZ25pbmdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiUE9TVCAvdXNlci9zc2hfc2lnbmluZ19rZXlzXCJdLFxuICAgIGRlbGV0ZUVtYWlsRm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvZW1haWxzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJkZWxldGVFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBkZWxldGVFbWFpbEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvZW1haWxzXCJdLFxuICAgIGRlbGV0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2dwZ19rZXlzL3tncGdfa2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZGVsZXRlR3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGRlbGV0ZUdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCJdLFxuICAgIGRlbGV0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiREVMRVRFIC91c2VyL2tleXMve2tleV9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImRlbGV0ZVB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBkZWxldGVQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiREVMRVRFIC91c2VyL2tleXMve2tleV9pZH1cIl0sXG4gICAgZGVsZXRlU29jaWFsQWNjb3VudEZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJERUxFVEUgL3VzZXIvc29jaWFsX2FjY291bnRzXCJdLFxuICAgIGRlbGV0ZVNzaFNpZ25pbmdLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1xuICAgICAgXCJERUxFVEUgL3VzZXIvc3NoX3NpZ25pbmdfa2V5cy97c3NoX3NpZ25pbmdfa2V5X2lkfVwiLFxuICAgIF0sXG4gICAgZm9sbG93OiBbXCJQVVQgL3VzZXIvZm9sbG93aW5nL3t1c2VybmFtZX1cIl0sXG4gICAgZ2V0QXV0aGVudGljYXRlZDogW1wiR0VUIC91c2VyXCJdLFxuICAgIGdldEJ5SWQ6IFtcIkdFVCAvdXNlci97YWNjb3VudF9pZH1cIl0sXG4gICAgZ2V0QnlVc2VybmFtZTogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9XCJdLFxuICAgIGdldENvbnRleHRGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0vaG92ZXJjYXJkXCJdLFxuICAgIGdldEdwZ0tleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2dwZ19rZXlzL3tncGdfa2V5X2lkfVwiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwiZ2V0R3BnS2V5Rm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGdldEdwZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvZ3BnX2tleXMve2dwZ19rZXlfaWR9XCJdLFxuICAgIGdldFB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2tleXMve2tleV9pZH1cIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImdldFB1YmxpY1NzaEtleUZvckF1dGhlbnRpY2F0ZWRVc2VyXCJdIH0sXG4gICAgXSxcbiAgICBnZXRQdWJsaWNTc2hLZXlGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2tleXMve2tleV9pZH1cIl0sXG4gICAgZ2V0U3NoU2lnbmluZ0tleUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIkdFVCAvdXNlci9zc2hfc2lnbmluZ19rZXlzL3tzc2hfc2lnbmluZ19rZXlfaWR9XCIsXG4gICAgXSxcbiAgICBsaXN0OiBbXCJHRVQgL3VzZXJzXCJdLFxuICAgIGxpc3RBdHRlc3RhdGlvbnM6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9hdHRlc3RhdGlvbnMve3N1YmplY3RfZGlnZXN0fVwiXSxcbiAgICBsaXN0QmxvY2tlZEJ5QXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvYmxvY2tzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0QmxvY2tlZEJ5QXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGxpc3RCbG9ja2VkQnlBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2Jsb2Nrc1wiXSxcbiAgICBsaXN0RW1haWxzRm9yQXV0aGVudGljYXRlZDogW1xuICAgICAgXCJHRVQgL3VzZXIvZW1haWxzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0RW1haWxzRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGxpc3RFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2VtYWlsc1wiXSxcbiAgICBsaXN0Rm9sbG93ZWRCeUF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2ZvbGxvd2luZ1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEZvbGxvd2VkQnlBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgbGlzdEZvbGxvd2VkQnlBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2ZvbGxvd2luZ1wiXSxcbiAgICBsaXN0Rm9sbG93ZXJzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9mb2xsb3dlcnNcIl0sXG4gICAgbGlzdEZvbGxvd2Vyc0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dlcnNcIl0sXG4gICAgbGlzdEZvbGxvd2luZ0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9mb2xsb3dpbmdcIl0sXG4gICAgbGlzdEdwZ0tleXNGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9ncGdfa2V5c1wiLFxuICAgICAge30sXG4gICAgICB7IHJlbmFtZWQ6IFtcInVzZXJzXCIsIFwibGlzdEdwZ0tleXNGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgbGlzdEdwZ0tleXNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL2dwZ19rZXlzXCJdLFxuICAgIGxpc3RHcGdLZXlzRm9yVXNlcjogW1wiR0VUIC91c2Vycy97dXNlcm5hbWV9L2dwZ19rZXlzXCJdLFxuICAgIGxpc3RQdWJsaWNFbWFpbHNGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIkdFVCAvdXNlci9wdWJsaWNfZW1haWxzXCIsXG4gICAgICB7fSxcbiAgICAgIHsgcmVuYW1lZDogW1widXNlcnNcIiwgXCJsaXN0UHVibGljRW1haWxzRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGxpc3RQdWJsaWNFbWFpbHNGb3JBdXRoZW50aWNhdGVkVXNlcjogW1wiR0VUIC91c2VyL3B1YmxpY19lbWFpbHNcIl0sXG4gICAgbGlzdFB1YmxpY0tleXNGb3JVc2VyOiBbXCJHRVQgL3VzZXJzL3t1c2VybmFtZX0va2V5c1wiXSxcbiAgICBsaXN0UHVibGljU3NoS2V5c0ZvckF1dGhlbnRpY2F0ZWQ6IFtcbiAgICAgIFwiR0VUIC91c2VyL2tleXNcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcImxpc3RQdWJsaWNTc2hLZXlzRm9yQXV0aGVudGljYXRlZFVzZXJcIl0gfSxcbiAgICBdLFxuICAgIGxpc3RQdWJsaWNTc2hLZXlzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9rZXlzXCJdLFxuICAgIGxpc3RTb2NpYWxBY2NvdW50c0ZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXCJHRVQgL3VzZXIvc29jaWFsX2FjY291bnRzXCJdLFxuICAgIGxpc3RTb2NpYWxBY2NvdW50c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zb2NpYWxfYWNjb3VudHNcIl0sXG4gICAgbGlzdFNzaFNpZ25pbmdLZXlzRm9yQXV0aGVudGljYXRlZFVzZXI6IFtcIkdFVCAvdXNlci9zc2hfc2lnbmluZ19rZXlzXCJdLFxuICAgIGxpc3RTc2hTaWduaW5nS2V5c0ZvclVzZXI6IFtcIkdFVCAvdXNlcnMve3VzZXJuYW1lfS9zc2hfc2lnbmluZ19rZXlzXCJdLFxuICAgIHNldFByaW1hcnlFbWFpbFZpc2liaWxpdHlGb3JBdXRoZW50aWNhdGVkOiBbXG4gICAgICBcIlBBVENIIC91c2VyL2VtYWlsL3Zpc2liaWxpdHlcIixcbiAgICAgIHt9LFxuICAgICAgeyByZW5hbWVkOiBbXCJ1c2Vyc1wiLCBcInNldFByaW1hcnlFbWFpbFZpc2liaWxpdHlGb3JBdXRoZW50aWNhdGVkVXNlclwiXSB9LFxuICAgIF0sXG4gICAgc2V0UHJpbWFyeUVtYWlsVmlzaWJpbGl0eUZvckF1dGhlbnRpY2F0ZWRVc2VyOiBbXG4gICAgICBcIlBBVENIIC91c2VyL2VtYWlsL3Zpc2liaWxpdHlcIixcbiAgICBdLFxuICAgIHVuYmxvY2s6IFtcIkRFTEVURSAvdXNlci9ibG9ja3Mve3VzZXJuYW1lfVwiXSxcbiAgICB1bmZvbGxvdzogW1wiREVMRVRFIC91c2VyL2ZvbGxvd2luZy97dXNlcm5hbWV9XCJdLFxuICAgIHVwZGF0ZUF1dGhlbnRpY2F0ZWQ6IFtcIlBBVENIIC91c2VyXCJdLFxuICB9LFxufTtcblxuZXhwb3J0IGRlZmF1bHQgRW5kcG9pbnRzO1xuIiwgImltcG9ydCB0eXBlIHsgT2N0b2tpdCB9IGZyb20gXCJAb2N0b2tpdC9jb3JlXCI7XG5pbXBvcnQgdHlwZSB7IEVuZHBvaW50T3B0aW9ucywgUmVxdWVzdFBhcmFtZXRlcnMsIFJvdXRlIH0gZnJvbSBcIkBvY3Rva2l0L3R5cGVzXCI7XG5pbXBvcnQgRU5EUE9JTlRTIGZyb20gXCIuL2dlbmVyYXRlZC9lbmRwb2ludHMuanNcIjtcbmltcG9ydCB0eXBlIHsgUmVzdEVuZHBvaW50TWV0aG9kcyB9IGZyb20gXCIuL2dlbmVyYXRlZC9tZXRob2QtdHlwZXMuanNcIjtcbmltcG9ydCB0eXBlIHsgRW5kcG9pbnREZWNvcmF0aW9ucyB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5cbi8vIFRoZSBmb2xsb3dpbmcgY29kZSB3YXMgcmVmYWN0b3JlZCBpbjogaHR0cHM6Ly9naXRodWIuY29tL29jdG9raXQvcGx1Z2luLXJlc3QtZW5kcG9pbnQtbWV0aG9kcy5qcy9wdWxsLzYyMlxuLy8gdG8gb3B0aW1pc2UgdGhlIHJ1bnRpbWUgcGVyZm9ybWFuY2Ugb2YgT2N0b2tpdCBpbml0aWFsaXphdGlvbi5cbi8vXG4vLyBUaGlzIG9wdGltaXphdGlvbiBpbnZvbHZlcyB0d28ga2V5IGNoYW5nZXM6XG4vLyAxLiBQcmUtQ29tcHV0YXRpb246IFRoZSBlbmRwb2ludCBtZXRob2RzIGFyZSBwcmUtY29tcHV0ZWQgb25jZSBhdCBtb2R1bGUgbG9hZFxuLy8gICAgdGltZSBpbnN0ZWFkIG9mIGVhY2ggaW52b2NhdGlvbiBvZiBgZW5kcG9pbnRzVG9NZXRob2RzKClgLlxuLy8gMi4gTGF6eSBpbml0aWFsaXphdGlvbiBhbmQgY2FjaGluZzogV2UgdXNlIGEgUHJveHkgZm9yIGVhY2ggc2NvcGUgdG8gb25seVxuLy8gICAgaW5pdGlhbGl6ZSBtZXRob2RzIHRoYXQgYXJlIGFjdHVhbGx5IGNhbGxlZC4gVGhpcyByZWR1Y2VzIHJ1bnRpbWUgb3ZlcmhlYWRcbi8vICAgIGFzIHRoZSBpbml0aWFsaXphdGlvbiBpbnZvbHZlcyBkZWVwIG1lcmdpbmcgb2Ygb2JqZWN0cy4gVGhlIGluaXRpYWxpemVkXG4vLyAgICBtZXRob2RzIGFyZSB0aGVuIGNhY2hlZCBmb3IgZnV0dXJlIHVzZS5cblxuY29uc3QgZW5kcG9pbnRNZXRob2RzTWFwID0gbmV3IE1hcCgpO1xuZm9yIChjb25zdCBbc2NvcGUsIGVuZHBvaW50c10gb2YgT2JqZWN0LmVudHJpZXMoRU5EUE9JTlRTKSkge1xuICBmb3IgKGNvbnN0IFttZXRob2ROYW1lLCBlbmRwb2ludF0gb2YgT2JqZWN0LmVudHJpZXMoZW5kcG9pbnRzKSkge1xuICAgIGNvbnN0IFtyb3V0ZSwgZGVmYXVsdHMsIGRlY29yYXRpb25zXSA9IGVuZHBvaW50O1xuICAgIGNvbnN0IFttZXRob2QsIHVybF0gPSByb3V0ZS5zcGxpdCgvIC8pO1xuICAgIGNvbnN0IGVuZHBvaW50RGVmYXVsdHMgPSBPYmplY3QuYXNzaWduKFxuICAgICAge1xuICAgICAgICBtZXRob2QsXG4gICAgICAgIHVybCxcbiAgICAgIH0sXG4gICAgICBkZWZhdWx0cyxcbiAgICApO1xuXG4gICAgaWYgKCFlbmRwb2ludE1ldGhvZHNNYXAuaGFzKHNjb3BlKSkge1xuICAgICAgZW5kcG9pbnRNZXRob2RzTWFwLnNldChzY29wZSwgbmV3IE1hcCgpKTtcbiAgICB9XG5cbiAgICBlbmRwb2ludE1ldGhvZHNNYXAuZ2V0KHNjb3BlKS5zZXQobWV0aG9kTmFtZSwge1xuICAgICAgc2NvcGUsXG4gICAgICBtZXRob2ROYW1lLFxuICAgICAgZW5kcG9pbnREZWZhdWx0cyxcbiAgICAgIGRlY29yYXRpb25zLFxuICAgIH0pO1xuICB9XG59XG5cbnR5cGUgUHJveHlUYXJnZXQgPSB7XG4gIG9jdG9raXQ6IE9jdG9raXQ7XG4gIHNjb3BlOiBzdHJpbmc7XG4gIGNhY2hlOiBSZWNvcmQ8c3RyaW5nLCAoLi4uYXJnczogYW55W10pID0+IGFueT47XG59O1xuXG5jb25zdCBoYW5kbGVyID0ge1xuICBoYXMoeyBzY29wZSB9OiBQcm94eVRhcmdldCwgbWV0aG9kTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIGVuZHBvaW50TWV0aG9kc01hcC5nZXQoc2NvcGUpLmhhcyhtZXRob2ROYW1lKTtcbiAgfSxcbiAgZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldDogUHJveHlUYXJnZXQsIG1ldGhvZE5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB7XG4gICAgICB2YWx1ZTogdGhpcy5nZXQodGFyZ2V0LCBtZXRob2ROYW1lKSwgLy8gZW5zdXJlcyBtZXRob2QgaXMgaW4gdGhlIGNhY2hlXG4gICAgICBjb25maWd1cmFibGU6IHRydWUsXG4gICAgICB3cml0YWJsZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IHRydWUsXG4gICAgfTtcbiAgfSxcbiAgZGVmaW5lUHJvcGVydHkoXG4gICAgdGFyZ2V0OiBQcm94eVRhcmdldCxcbiAgICBtZXRob2ROYW1lOiBzdHJpbmcsXG4gICAgZGVzY3JpcHRvcjogUHJvcGVydHlEZXNjcmlwdG9yLFxuICApIHtcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LmNhY2hlLCBtZXRob2ROYW1lLCBkZXNjcmlwdG9yKTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgZGVsZXRlUHJvcGVydHkodGFyZ2V0OiBQcm94eVRhcmdldCwgbWV0aG9kTmFtZTogc3RyaW5nKSB7XG4gICAgZGVsZXRlIHRhcmdldC5jYWNoZVttZXRob2ROYW1lXTtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfSxcbiAgb3duS2V5cyh7IHNjb3BlIH06IFByb3h5VGFyZ2V0KSB7XG4gICAgcmV0dXJuIFsuLi5lbmRwb2ludE1ldGhvZHNNYXAuZ2V0KHNjb3BlKS5rZXlzKCldO1xuICB9LFxuICBzZXQodGFyZ2V0OiBQcm94eVRhcmdldCwgbWV0aG9kTmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgcmV0dXJuICh0YXJnZXQuY2FjaGVbbWV0aG9kTmFtZV0gPSB2YWx1ZSk7XG4gIH0sXG4gIGdldCh7IG9jdG9raXQsIHNjb3BlLCBjYWNoZSB9OiBQcm94eVRhcmdldCwgbWV0aG9kTmFtZTogc3RyaW5nKSB7XG4gICAgaWYgKGNhY2hlW21ldGhvZE5hbWVdKSB7XG4gICAgICByZXR1cm4gY2FjaGVbbWV0aG9kTmFtZV07XG4gICAgfVxuXG4gICAgY29uc3QgbWV0aG9kID0gZW5kcG9pbnRNZXRob2RzTWFwLmdldChzY29wZSkuZ2V0KG1ldGhvZE5hbWUpO1xuICAgIGlmICghbWV0aG9kKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIGNvbnN0IHsgZW5kcG9pbnREZWZhdWx0cywgZGVjb3JhdGlvbnMgfSA9IG1ldGhvZDtcblxuICAgIGlmIChkZWNvcmF0aW9ucykge1xuICAgICAgY2FjaGVbbWV0aG9kTmFtZV0gPSBkZWNvcmF0ZShcbiAgICAgICAgb2N0b2tpdCxcbiAgICAgICAgc2NvcGUsXG4gICAgICAgIG1ldGhvZE5hbWUsXG4gICAgICAgIGVuZHBvaW50RGVmYXVsdHMsXG4gICAgICAgIGRlY29yYXRpb25zLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY2FjaGVbbWV0aG9kTmFtZV0gPSBvY3Rva2l0LnJlcXVlc3QuZGVmYXVsdHMoZW5kcG9pbnREZWZhdWx0cyk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNhY2hlW21ldGhvZE5hbWVdO1xuICB9LFxufTtcblxuZXhwb3J0IGZ1bmN0aW9uIGVuZHBvaW50c1RvTWV0aG9kcyhvY3Rva2l0OiBPY3Rva2l0KTogUmVzdEVuZHBvaW50TWV0aG9kcyB7XG4gIGNvbnN0IG5ld01ldGhvZHMgPSB7fSBhcyB7IFtrZXk6IHN0cmluZ106IG9iamVjdCB9O1xuXG4gIGZvciAoY29uc3Qgc2NvcGUgb2YgZW5kcG9pbnRNZXRob2RzTWFwLmtleXMoKSkge1xuICAgIG5ld01ldGhvZHNbc2NvcGVdID0gbmV3IFByb3h5KHsgb2N0b2tpdCwgc2NvcGUsIGNhY2hlOiB7fSB9LCBoYW5kbGVyKTtcbiAgfVxuXG4gIHJldHVybiBuZXdNZXRob2RzIGFzIFJlc3RFbmRwb2ludE1ldGhvZHM7XG59XG5cbmZ1bmN0aW9uIGRlY29yYXRlKFxuICBvY3Rva2l0OiBPY3Rva2l0LFxuICBzY29wZTogc3RyaW5nLFxuICBtZXRob2ROYW1lOiBzdHJpbmcsXG4gIGRlZmF1bHRzOiBFbmRwb2ludE9wdGlvbnMsXG4gIGRlY29yYXRpb25zOiBFbmRwb2ludERlY29yYXRpb25zLFxuKSB7XG4gIGNvbnN0IHJlcXVlc3RXaXRoRGVmYXVsdHMgPSBvY3Rva2l0LnJlcXVlc3QuZGVmYXVsdHMoZGVmYXVsdHMpO1xuXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG4gIGZ1bmN0aW9uIHdpdGhEZWNvcmF0aW9ucyhcbiAgICAuLi5hcmdzOiBbUm91dGUsIFJlcXVlc3RQYXJhbWV0ZXJzP10gfCBbRW5kcG9pbnRPcHRpb25zXVxuICApIHtcbiAgICAvLyBAdHMtaWdub3JlIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC9pc3N1ZXMvMjU0ODhcbiAgICBsZXQgb3B0aW9ucyA9IHJlcXVlc3RXaXRoRGVmYXVsdHMuZW5kcG9pbnQubWVyZ2UoLi4uYXJncyk7XG5cbiAgICAvLyBUaGVyZSBhcmUgY3VycmVudGx5IG5vIG90aGVyIGRlY29yYXRpb25zIHRoYW4gYC5tYXBUb0RhdGFgXG4gICAgaWYgKGRlY29yYXRpb25zLm1hcFRvRGF0YSkge1xuICAgICAgb3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIG9wdGlvbnMsIHtcbiAgICAgICAgZGF0YTogb3B0aW9uc1tkZWNvcmF0aW9ucy5tYXBUb0RhdGFdLFxuICAgICAgICBbZGVjb3JhdGlvbnMubWFwVG9EYXRhXTogdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4gcmVxdWVzdFdpdGhEZWZhdWx0cyhvcHRpb25zKTtcbiAgICB9XG5cbiAgICBpZiAoZGVjb3JhdGlvbnMucmVuYW1lZCkge1xuICAgICAgY29uc3QgW25ld1Njb3BlLCBuZXdNZXRob2ROYW1lXSA9IGRlY29yYXRpb25zLnJlbmFtZWQ7XG4gICAgICBvY3Rva2l0LmxvZy53YXJuKFxuICAgICAgICBgb2N0b2tpdC4ke3Njb3BlfS4ke21ldGhvZE5hbWV9KCkgaGFzIGJlZW4gcmVuYW1lZCB0byBvY3Rva2l0LiR7bmV3U2NvcGV9LiR7bmV3TWV0aG9kTmFtZX0oKWAsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoZGVjb3JhdGlvbnMuZGVwcmVjYXRlZCkge1xuICAgICAgb2N0b2tpdC5sb2cud2FybihkZWNvcmF0aW9ucy5kZXByZWNhdGVkKTtcbiAgICB9XG5cbiAgICBpZiAoZGVjb3JhdGlvbnMucmVuYW1lZFBhcmFtZXRlcnMpIHtcbiAgICAgIC8vIEB0cy1pZ25vcmUgaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0L2lzc3Vlcy8yNTQ4OFxuICAgICAgY29uc3Qgb3B0aW9ucyA9IHJlcXVlc3RXaXRoRGVmYXVsdHMuZW5kcG9pbnQubWVyZ2UoLi4uYXJncyk7XG5cbiAgICAgIGZvciAoY29uc3QgW25hbWUsIGFsaWFzXSBvZiBPYmplY3QuZW50cmllcyhcbiAgICAgICAgZGVjb3JhdGlvbnMucmVuYW1lZFBhcmFtZXRlcnMsXG4gICAgICApKSB7XG4gICAgICAgIGlmIChuYW1lIGluIG9wdGlvbnMpIHtcbiAgICAgICAgICBvY3Rva2l0LmxvZy53YXJuKFxuICAgICAgICAgICAgYFwiJHtuYW1lfVwiIHBhcmFtZXRlciBpcyBkZXByZWNhdGVkIGZvciBcIm9jdG9raXQuJHtzY29wZX0uJHttZXRob2ROYW1lfSgpXCIuIFVzZSBcIiR7YWxpYXN9XCIgaW5zdGVhZGAsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBpZiAoIShhbGlhcyBpbiBvcHRpb25zKSkge1xuICAgICAgICAgICAgb3B0aW9uc1thbGlhc10gPSBvcHRpb25zW25hbWVdO1xuICAgICAgICAgIH1cbiAgICAgICAgICBkZWxldGUgb3B0aW9uc1tuYW1lXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIHJlcXVlc3RXaXRoRGVmYXVsdHMob3B0aW9ucyk7XG4gICAgfVxuXG4gICAgLy8gQHRzLWlnbm9yZSBodHRwczovL2dpdGh1Yi5jb20vbWljcm9zb2Z0L1R5cGVTY3JpcHQvaXNzdWVzLzI1NDg4XG4gICAgcmV0dXJuIHJlcXVlc3RXaXRoRGVmYXVsdHMoLi4uYXJncyk7XG4gIH1cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24od2l0aERlY29yYXRpb25zLCByZXF1ZXN0V2l0aERlZmF1bHRzKTtcbn1cbiIsICJpbXBvcnQgdHlwZSB7IE9jdG9raXQgfSBmcm9tIFwiQG9jdG9raXQvY29yZVwiO1xuXG5leHBvcnQgdHlwZSB7IFJlc3RFbmRwb2ludE1ldGhvZFR5cGVzIH0gZnJvbSBcIi4vZ2VuZXJhdGVkL3BhcmFtZXRlcnMtYW5kLXJlc3BvbnNlLXR5cGVzLmpzXCI7XG5pbXBvcnQgeyBWRVJTSU9OIH0gZnJvbSBcIi4vdmVyc2lvbi5qc1wiO1xuaW1wb3J0IHR5cGUgeyBBcGkgfSBmcm9tIFwiLi90eXBlcy5qc1wiO1xuaW1wb3J0IHsgZW5kcG9pbnRzVG9NZXRob2RzIH0gZnJvbSBcIi4vZW5kcG9pbnRzLXRvLW1ldGhvZHMuanNcIjtcblxuLy8gRXhwb3J0IHRoZSB0eXBlIGZvciBkb3duc3RyZWFtIHVzZXJzIGluIG9yZGVyIHRvIGZpeCBhIFR5cGVTY3JpcHQgZXJyb3Jcbi8vIFRoZSBpbmZlcnJlZCB0eXBlIG9mICdPY3Rva2l0JyBjYW5ub3QgYmUgbmFtZWQgd2l0aG91dCBhIHJlZmVyZW5jZSB0byAnLi4vbm9kZV9tb2R1bGVzL0BvY3Rva2l0L3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHMvZGlzdC10eXBlcy90eXBlcy5qcycuIFRoaXMgaXMgbGlrZWx5IG5vdCBwb3J0YWJsZS4gQSB0eXBlIGFubm90YXRpb24gaXMgbmVjZXNzYXJ5LlxuZXhwb3J0IHR5cGUgeyBBcGkgfTtcblxuZXhwb3J0IGZ1bmN0aW9uIHJlc3RFbmRwb2ludE1ldGhvZHMob2N0b2tpdDogT2N0b2tpdCk6IEFwaSB7XG4gIGNvbnN0IGFwaSA9IGVuZHBvaW50c1RvTWV0aG9kcyhvY3Rva2l0KTtcbiAgcmV0dXJuIHtcbiAgICByZXN0OiBhcGksXG4gIH07XG59XG5yZXN0RW5kcG9pbnRNZXRob2RzLlZFUlNJT04gPSBWRVJTSU9OO1xuXG5leHBvcnQgZnVuY3Rpb24gbGVnYWN5UmVzdEVuZHBvaW50TWV0aG9kcyhvY3Rva2l0OiBPY3Rva2l0KTogQXBpW1wicmVzdFwiXSAmIEFwaSB7XG4gIGNvbnN0IGFwaSA9IGVuZHBvaW50c1RvTWV0aG9kcyhvY3Rva2l0KTtcbiAgcmV0dXJuIHtcbiAgICAuLi5hcGksXG4gICAgcmVzdDogYXBpLFxuICB9O1xufVxubGVnYWN5UmVzdEVuZHBvaW50TWV0aG9kcy5WRVJTSU9OID0gVkVSU0lPTjtcbiIsICJjb25zdCBWRVJTSU9OID0gXCIyMS4xLjFcIjtcbmV4cG9ydCB7XG4gIFZFUlNJT05cbn07XG4iLCAiaW1wb3J0IHsgT2N0b2tpdCBhcyBDb3JlIH0gZnJvbSBcIkBvY3Rva2l0L2NvcmVcIjtcbmltcG9ydCB7IHJlcXVlc3RMb2cgfSBmcm9tIFwiQG9jdG9raXQvcGx1Z2luLXJlcXVlc3QtbG9nXCI7XG5pbXBvcnQge1xuICBwYWdpbmF0ZVJlc3Rcbn0gZnJvbSBcIkBvY3Rva2l0L3BsdWdpbi1wYWdpbmF0ZS1yZXN0XCI7XG5pbXBvcnQgeyBsZWdhY3lSZXN0RW5kcG9pbnRNZXRob2RzIH0gZnJvbSBcIkBvY3Rva2l0L3BsdWdpbi1yZXN0LWVuZHBvaW50LW1ldGhvZHNcIjtcbmltcG9ydCB7IFZFUlNJT04gfSBmcm9tIFwiLi92ZXJzaW9uLmpzXCI7XG5jb25zdCBPY3Rva2l0ID0gQ29yZS5wbHVnaW4ocmVxdWVzdExvZywgbGVnYWN5UmVzdEVuZHBvaW50TWV0aG9kcywgcGFnaW5hdGVSZXN0KS5kZWZhdWx0cyhcbiAge1xuICAgIHVzZXJBZ2VudDogYG9jdG9raXQtcmVzdC5qcy8ke1ZFUlNJT059YFxuICB9XG4pO1xuZXhwb3J0IHtcbiAgT2N0b2tpdFxufTtcbiIsICJleHBvcnQgeyBwYXJzZUFyZ3NTdHJpbmdUb0FyZ3YgfTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBhcnNlQXJnc1N0cmluZ1RvQXJndih2YWx1ZSwgZW52LCBmaWxlKSB7XG4gICAgLy8gKFteXFxzJ1wiXShbXlxccydcIl0qKFsnXCJdKShbXlxcM10qPylcXDMpK1teXFxzJ1wiXSopIE1hdGNoZXMgbmVzdGVkIHF1b3RlcyB1bnRpbCB0aGUgZmlyc3Qgc3BhY2Ugb3V0c2lkZSBvZiBxdW90ZXNcbiAgICAvLyBbXlxccydcIl0rIG9yIE1hdGNoIGlmIG5vdCBhIHNwYWNlICcgb3IgXCJcbiAgICAvLyAoWydcIl0pKFteXFw1XSo/KVxcNSBvciBNYXRjaCBcInF1b3RlZCB0ZXh0XCIgd2l0aG91dCBxdW90ZXNcbiAgICAvLyBgXFwzYCBhbmQgYFxcNWAgYXJlIGEgYmFja3JlZmVyZW5jZSB0byB0aGUgcXVvdGUgc3R5bGUgKCcgb3IgXCIpIGNhcHR1cmVkXG4gICAgdmFyIG15UmVnZXhwID0gLyhbXlxccydcIl0oW15cXHMnXCJdKihbJ1wiXSkoW15cXDNdKj8pXFwzKStbXlxccydcIl0qKXxbXlxccydcIl0rfChbJ1wiXSkoW15cXDVdKj8pXFw1L2dpO1xuICAgIHZhciBteVN0cmluZyA9IHZhbHVlO1xuICAgIHZhciBteUFycmF5ID0gW107XG4gICAgaWYgKGVudikge1xuICAgICAgICBteUFycmF5LnB1c2goZW52KTtcbiAgICB9XG4gICAgaWYgKGZpbGUpIHtcbiAgICAgICAgbXlBcnJheS5wdXNoKGZpbGUpO1xuICAgIH1cbiAgICB2YXIgbWF0Y2g7XG4gICAgZG8ge1xuICAgICAgICAvLyBFYWNoIGNhbGwgdG8gZXhlYyByZXR1cm5zIHRoZSBuZXh0IHJlZ2V4IG1hdGNoIGFzIGFuIGFycmF5XG4gICAgICAgIG1hdGNoID0gbXlSZWdleHAuZXhlYyhteVN0cmluZyk7XG4gICAgICAgIGlmIChtYXRjaCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgLy8gSW5kZXggMSBpbiB0aGUgYXJyYXkgaXMgdGhlIGNhcHR1cmVkIGdyb3VwIGlmIGl0IGV4aXN0c1xuICAgICAgICAgICAgLy8gSW5kZXggMCBpcyB0aGUgbWF0Y2hlZCB0ZXh0LCB3aGljaCB3ZSB1c2UgaWYgbm8gY2FwdHVyZWQgZ3JvdXAgZXhpc3RzXG4gICAgICAgICAgICBteUFycmF5LnB1c2goZmlyc3RTdHJpbmcobWF0Y2hbMV0sIG1hdGNoWzZdLCBtYXRjaFswXSkpO1xuICAgICAgICB9XG4gICAgfSB3aGlsZSAobWF0Y2ggIT09IG51bGwpO1xuICAgIHJldHVybiBteUFycmF5O1xufVxuLy8gQWNjZXB0cyBhbnkgbnVtYmVyIG9mIGFyZ3VtZW50cywgYW5kIHJldHVybnMgdGhlIGZpcnN0IG9uZSB0aGF0IGlzIGEgc3RyaW5nXG4vLyAoZXZlbiBhbiBlbXB0eSBzdHJpbmcpXG5mdW5jdGlvbiBmaXJzdFN0cmluZygpIHtcbiAgICB2YXIgYXJncyA9IFtdO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICAgIGFyZ3NbX2ldID0gYXJndW1lbnRzW19pXTtcbiAgICB9XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBhcmcgPSBhcmdzW2ldO1xuICAgICAgICBpZiAodHlwZW9mIGFyZyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgICAgICAgcmV0dXJuIGFyZztcbiAgICAgICAgfVxuICAgIH1cbn1cbiIsICJpbXBvcnQgKiBhcyBmcyBmcm9tIFwibm9kZTpmcy9wcm9taXNlc1wiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwibm9kZTpwYXRoXCI7XG5pbXBvcnQgKiBhcyBvcyBmcm9tIFwibm9kZTpvc1wiO1xuaW1wb3J0IHsgU2FmZXR5U3RyYXRlZ3kgfSBmcm9tIFwiLi9ydW5Db2RleEV4ZWNcIjtcbmltcG9ydCB7IGNoZWNrT3V0cHV0IH0gZnJvbSBcIi4vY2hlY2tPdXRwdXRcIjtcblxuY29uc3QgTU9ERUxfUFJPVklERVIgPSBcImNvZGV4LWFjdGlvbi1yZXNwb25zZXMtcHJveHlcIjtcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHdyaXRlUHJveHlDb25maWcoXG4gIGNvZGV4SG9tZTogc3RyaW5nLFxuICBwb3J0OiBudW1iZXIsXG4gIHNhZmV0eVN0cmF0ZWd5OiBTYWZldHlTdHJhdGVneVxuKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IGNvbmZpZ1BhdGggPSBwYXRoLmpvaW4oY29kZXhIb21lLCBcImNvbmZpZy50b21sXCIpO1xuXG4gIGxldCBleGlzdGluZyA9IFwiXCI7XG4gIHRyeSB7XG4gICAgZXhpc3RpbmcgPSBhd2FpdCBmcy5yZWFkRmlsZShjb25maWdQYXRoLCBcInV0ZjhcIik7XG4gIH0gY2F0Y2gge1xuICAgIGV4aXN0aW5nID0gXCJcIjtcbiAgfVxuXG4gIGNvbnN0IGhlYWRlciA9IGAjIEFkZGVkIGJ5IGNvZGV4LWFjdGlvbi5cbm1vZGVsX3Byb3ZpZGVyID0gXCIke01PREVMX1BST1ZJREVSfVwiXG5cblxuYDtcbiAgY29uc3QgdGFibGUgPSBgXG5cbiMgQWRkZWQgYnkgY29kZXgtYWN0aW9uLlxuW21vZGVsX3Byb3ZpZGVycy4ke01PREVMX1BST1ZJREVSfV1cbm5hbWUgPSBcIkNvZGV4IEFjdGlvbiBSZXNwb25zZXMgUHJveHlcIlxuYmFzZV91cmwgPSBcImh0dHA6Ly8xMjcuMC4wLjE6JHtwb3J0fS92MVwiXG53aXJlX2FwaSA9IFwicmVzcG9uc2VzXCJcbmA7XG5cbiAgLy8gUHJlcGVuZCBtb2RlbF9wcm92aWRlciBhdCB0aGUgdmVyeSB0b3AuXG4gIGxldCBvdXRwdXQgPSBgJHtoZWFkZXJ9JHtleGlzdGluZ30ke3RhYmxlfWA7XG5cbiAgaWYgKHNhZmV0eVN0cmF0ZWd5ID09PSBcInVucHJpdmlsZWdlZC11c2VyXCIpIHtcbiAgICAvLyBXZSBrbm93IHdlIGhhdmUgYWxyZWFkeSBjcmVhdGVkIHRoZSBDT0RFWF9IT01FIGRpcmVjdG9yeSwgYnV0IGl0IGlzIG93bmVkXG4gICAgLy8gYnkgYW5vdGhlciB1c2VyLCBzbyB3ZSBuZWVkIHRvIHVzZSBzdWRvIHRvIHdyaXRlIHRoZSBmaWxlLlxuICAgIGNvbnN0IHRlbXBEaXIgPSBhd2FpdCBmcy5ta2R0ZW1wKHBhdGguam9pbihvcy50bXBkaXIoKSwgXCJjb2RleC1jb25maWdcIikpO1xuICAgIHRyeSB7XG4gICAgICBjb25zdCB0ZW1wQ29uZmlnUGF0aCA9IHBhdGguam9pbih0ZW1wRGlyLCBcImNvbmZpZy50b21sXCIpO1xuICAgICAgYXdhaXQgZnMud3JpdGVGaWxlKHRlbXBDb25maWdQYXRoLCBvdXRwdXQsIFwidXRmOFwiKTtcbiAgICAgIGF3YWl0IGNoZWNrT3V0cHV0KFtcInN1ZG9cIiwgXCJtdlwiLCB0ZW1wQ29uZmlnUGF0aCwgY29uZmlnUGF0aF0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCBmcy5ybSh0ZW1wRGlyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSwgZm9yY2U6IHRydWUgfSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGF3YWl0IGZzLm1rZGlyKGNvZGV4SG9tZSwgeyByZWN1cnNpdmU6IHRydWUgfSk7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKGNvbmZpZ1BhdGgsIG91dHB1dCwgXCJ1dGY4XCIpO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBLDRFQUFBQSxVQUFBO0FBR0EsUUFBTUMsa0JBQU4sY0FBNkIsTUFBTTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLE1BT2pDLFlBQVksVUFBVSxNQUFNLFNBQVM7QUFDbkMsY0FBTSxPQUFPO0FBRWIsY0FBTSxrQkFBa0IsTUFBTSxLQUFLLFdBQVc7QUFDOUMsYUFBSyxPQUFPLEtBQUssWUFBWTtBQUM3QixhQUFLLE9BQU87QUFDWixhQUFLLFdBQVc7QUFDaEIsYUFBSyxjQUFjO0FBQUEsTUFDckI7QUFBQSxJQUNGO0FBS0EsUUFBTUMsd0JBQU4sY0FBbUNELGdCQUFlO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxNQUtoRCxZQUFZLFNBQVM7QUFDbkIsY0FBTSxHQUFHLDZCQUE2QixPQUFPO0FBRTdDLGNBQU0sa0JBQWtCLE1BQU0sS0FBSyxXQUFXO0FBQzlDLGFBQUssT0FBTyxLQUFLLFlBQVk7QUFBQSxNQUMvQjtBQUFB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QUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQVEsT0FBTztBQUFBLE1BQ25FLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUFRLE9BQU87QUFBQSxNQUNuRSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFBUSxPQUFPO0FBQUEsTUFDbkUsT0FB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U0FBQSxNQUFBLElBQUEsQ0FBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxPQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxNQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxVQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxXQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxRQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxRQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxNQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxRQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxRQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxLQUFBLElBQUEsRUFBQSxJQUFBO0FBRUEsTUFBQUEsU0FBQUEsU0FBQSxRQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxZQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxVQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxPQUFBLElBQUEsRUFBQSxJQUFBO0FBRUEsTUFBQUEsU0FBQUEsU0FBQSxVQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxRQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxXQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxhQUFBLElBQUEsRUFBQSxJQUFBO0FBRUEsTUFBQUEsU0FBQUEsU0FBQSxPQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxPQUFBLElBQUEsRUFBQSxJQUFBO0FBRUEsTUFBQUEsU0FBQUEsU0FBQSxZQUFBLElBQUEsRUFBQSxJQUFBO0FBRUEsTUFBQUEsU0FBQUEsU0FBQSxNQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxRQUFBLElBQUEsRUFBQSxJQUFBO0FBRUEsTUFBQUEsU0FBQUEsU0FBQSxRQUFBLElBQUEsRUFBQSxJQUFBO0FBRUEsTUFBQUEsU0FBQUEsU0FBQSxLQUFBLElBQUEsRUFBQSxJQUFBO0FBRUEsTUFBQUEsU0FBQUEsU0FBQSxVQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxVQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxPQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxNQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxPQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxVQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxlQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxlQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxVQUFBLElBQUEsRUFBQSxJQUFBO0FBQ0EsTUFBQUEsU0FBQUEsU0FBQSxRQUFBLElBQUEsRUFBQSxJQUFBO0FBRUEsTUFBQUEsU0FBQUEsU0FBQSxPQUFBLElBQUEsRUFBQSxJQUFBO0lBQ0YsR0ExRFksVUFBQUosU0FBQSxZQUFBQSxTQUFBLFVBQU8sQ0FBQSxFQUFBO0FBNEROLElBQUFBLFNBQUEsZUFBZTtNQUMxQixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01BQ1IsUUFBUTtNQUNSLFFBQVE7TUFDUixRQUFRO01B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Q1Q7QUFNQSxjQUFRLE1BQU0sS0FBSyxFQUFFLFlBQVksR0FBRztBQUFBLFFBQ2xDLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87QUFBQSxRQUNULEtBQUs7QUFBQSxRQUNMLEtBQUs7QUFDSCxpQkFBTztBQUFBLFFBQ1QsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUFBLFFBQ0wsS0FBSztBQUNILGlCQUFPO0FBQUEsUUFDVCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQUEsUUFDTCxLQUFLO0FBQ0gsaUJBQU87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Q0FBQztBQUM5QyxRQUFNLFlBQVksQ0FBQyxRQUFRLFNBQVMsR0FBRyxJQUFJLElBQUksU0FBUyxDQUFDO0FBQ3pELFFBQU0sWUFBWSxDQUFDLFFBQVEsU0FBUyxPQUFPLFNBQVMsQ0FBQztBQUdyRCxRQUFNLGlCQUFzQixXQUFLLFdBQVcsR0FBRyxXQUFXLE9BQU87QUFDakUsUUFBTSxZQUFZLENBQUMsUUFBUSxTQUFTLGNBQWMsQ0FBQztBQUduRCxRQUFNLFlBQVksQ0FBQyxRQUFRLFNBQVMsT0FBTyxjQUFjLENBQUM7QUFFMUQsU0FBTztBQUNUO0FBRUEsU0FBUyxZQUFZLEdBQW1CO0FBQ3RDLE1BQUksTUFBTSxLQUFLO0FBQ2IsV0FBVSxZQUFRO0FBQUEsRUFDcEI7QUFDQSxNQUFJLEVBQUUsV0FBVyxJQUFJLEtBQUssRUFBRSxXQUFXLEtBQUssR0FBRztBQUM3QyxXQUFZLFdBQVEsWUFBUSxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFBQSxFQUMzQztBQUNBLFNBQU87QUFDVDsiLAogICJuYW1lcyI6IFsiZXhwb3J0cyIsICJDb21tYW5kZXJFcnJvciIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJleHBvcnRzIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIkFyZ3VtZW50IiwgImV4cG9ydHMiLCAiSGVscCIsICJjbWQiLCAiZXhwb3J0cyIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJPcHRpb24iLCAic3RyIiwgImV4cG9ydHMiLCAiZXhwb3J0cyIsICJwYXRoIiwgImZzIiwgInByb2Nlc3MiLCAiQXJndW1lbnQiLCAiQ29tbWFuZGVyRXJyb3IiLCAiSGVscCIsICJPcHRpb24iLCAiQ29tbWFuZCIsICJob29rIiwgIm9wdGlvbiIsICJleHBvcnRzIiwgIkFyZ3VtZW50IiwgIkNvbW1hbmQiLCAiQ29tbWFuZGVyRXJyb3IiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiSGVscCIsICJPcHRpb24iLCAiZXhwb3J0cyIsICJvcyIsICJDb21tYW5kIiwgImV4cG9ydHMiLCAiZnMiLCAib3MiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAib3B0aW9ucyIsICJzb2NrZXQiLCAicmVxdWlyZV90dW5uZWwiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiQmxvYiIsICJwYXRoIiwgImlkeCIsICJzdHJlYW0iLCAiZXJyIiwgImhhbmRsZXIiLCAiaXRlcmF0b3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGF0aCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX2NvbnN0YW50cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJET01FeGNlcHRpb24iLCAic3RydWN0dXJlZENsb25lIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlcXVpcmVfdXRpbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJwZXJmb3JtYW5jZSIsICJyZXF1ZXN0IiwgIml0ZXJhdG9yIiwgImtpbmQiLCAicmVxdWlyZV9zeW1ib2xzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImtleXMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiYXRvYiIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJCbG9iIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkJsb2IiLCAiZW50cnkiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiRE9NRXhjZXB0aW9uIiwgIkJsb2IiLCAiY2h1bmsiLCAiaXRlcmF0b3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAicGF0aCIsICJoYW5kbGVyIiwgInJlcXVlc3QiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiZXJyIiwgImhhbmRsZXIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAic2Vzc2lvbiIsICJvbkNvbm5lY3RUaW1lb3V0IiwgImV4cG9ydHMiLCAiRVJST1IiLCAiZXhwb3J0cyIsICJUWVBFIiwgIkZMQUdTIiwgIkxFTklFTlRfRkxBR1MiLCAiTUVUSE9EUyIsICJGSU5JU0giLCAiSEVBREVSX1NUQVRFIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImhhbmRsZXIiLCAicGF0aCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJoYW5kbGVyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImNvbm5lY3QiLCAiaGFuZGxlciIsICJyZXF1ZXN0IiwgInNvY2tldCIsICJwYXRoIiwgImhlYWRlcnMiLCAiZXJyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImhhbmRsZXIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAib3JpZ2luIiwgImRpc3BhdGNoZXIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAicG9vbCIsICJkaXNwYXRjaGVyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgIldlYWtSZWYiLCAiaGFuZGxlciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJCbG9iIiwgIm5vb3AiLCAiY29uc3VtZSIsICJyZXF1aXJlX3V0aWwiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAicmVxdWVzdCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJjYWxsYmFjayIsICJyZXMiLCAib3BhcXVlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImhhbmRsZXIiLCAiYm9keSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJtb2NrRGlzcGF0Y2giLCAicGF0aCIsICJnZXRSZXNwb25zZURhdGEiLCAiaGFuZGxlciIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJnZXRSZXNwb25zZURhdGEiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAic3RhdHVzQ29kZSIsICJkYXRhIiwgInJlc3BvbnNlT3B0aW9ucyIsICJuZXdNb2NrRGlzcGF0Y2giLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGF0aCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJoYW5kbGVyIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIlVSTCIsICJJbnZhbGlkQXJndW1lbnRFcnJvciIsICJvcHRzIiwgImhhbmRsZXIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXJyIiwgInJlcXVpcmVfZ2xvYmFsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkludmFsaWRBcmd1bWVudEVycm9yIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImhhbmRsZXIiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiRE9NRXhjZXB0aW9uIiwgInJlcXVpcmVfcmVxdWVzdCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1ZXN0IiwgImFjIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIkRPTUV4Y2VwdGlvbiIsICJyZXF1ZXN0IiwgImdsb2JhbFRoaXMiLCAiaXRlcmF0b3IiLCAicmVxdWlyZV9zeW1ib2xzIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlcXVpcmVfdXRpbCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJET01FeGNlcHRpb24iLCAidHlwZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3N5bWJvbHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV91dGlsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlcXVlc3QiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWVzdCIsICJjYWNoZSIsICJyZXF1aXJlX2NvbnN0YW50cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3V0aWwiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicGF0aCIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX2NvbnN0YW50cyIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJyZXF1aXJlX3N5bWJvbHMiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAicmVxdWlyZV91dGlsIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgInJlcXVlc3QiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiYm9keSIsICJleHBvcnRzIiwgIm1vZHVsZSIsICJET01FeGNlcHRpb24iLCAiZXhwb3J0cyIsICJtb2R1bGUiLCAiSW52YWxpZEFyZ3VtZW50RXJyb3IiLCAiaGFuZGxlciIsICJwYXRoIiwgIkh0dHBDb2RlcyIsICJleHBvcnRzIiwgIkhlYWRlcnMiLCAiTWVkaWFUeXBlcyIsICJ1c2VyQWdlbnQiLCAiaW5mbyIsICJoYW5kbGVyIiwgImxvd2VyY2FzZUtleXMiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgIndyaXRlRmlsZSIsICJleHBvcnRzIiwgInBhdGgiLCAiZXhwb3J0cyIsICJmcyIsICJwYXRoIiwgImV4cG9ydHMiLCAiX2EiLCAicGF0aCIsICJleHBvcnRzIiwgIm9zIiwgInBhdGgiLCAiZXhwb3J0cyIsICJleHBvcnRzIiwgImV4cG9ydHMiLCAib3MiLCAicGF0aCIsICJFeGl0Q29kZSIsICJleHBvcnRzIiwgInNldE91dHB1dCIsICJpbmZvIiwgImV4cG9ydHMiLCAibW9kdWxlIiwgIk51bGxPYmplY3QiLCAicGFyc2UiLCAic2FmZVBhcnNlIiwgImNvbW1hbmRlciIsICJmcyIsICJvcyIsICJwYXRoIiwgImltcG9ydF9jaGlsZF9wcm9jZXNzIiwgInByb2dyYW0iLCAicGF0aCIsICJvcyIsICJwYXRoIiwgImZzIiwgImNvcmUiLCAibmFtZSIsICJtZXRob2QiLCAiaG9vayIsICJob29rIiwgIlZFUlNJT04iLCAiaXNQbGFpbk9iamVjdCIsICJ3aXRoRGVmYXVsdHMiLCAiVkVSU0lPTiIsICJ3aXRoRGVmYXVsdHMiLCAicmVxdWVzdCIsICJlbmRwb2ludCIsICJWRVJTSU9OIiwgIlZFUlNJT04iLCAiaG9vayIsICJhdXRoIiwgIlZFUlNJT04iLCAicmVxdWVzdCIsICJwYXRoIiwgIlZFUlNJT04iLCAiVkVSU0lPTiIsICJWRVJTSU9OIiwgIlZFUlNJT04iLCAiZW5kcG9pbnQiLCAib3B0aW9ucyIsICJWRVJTSU9OIiwgIlZFUlNJT04iLCAiT2N0b2tpdCIsICJWRVJTSU9OIiwgIk9jdG9raXQiLCAiZnMiLCAicGF0aCIsICJvcyIsICJwcm9ncmFtIiwgInNldE91dHB1dCIsICJzdGF0Il0KfQo= diff --git a/src/writeProxyConfig.ts b/src/writeProxyConfig.ts index a37ac6d..56cbff4 100644 --- a/src/writeProxyConfig.ts +++ b/src/writeProxyConfig.ts @@ -4,7 +4,7 @@ import * as os from "node:os"; import { SafetyStrategy } from "./runCodexExec"; import { checkOutput } from "./checkOutput"; -const MODEL_PROVIDER = "openai-proxy"; +const MODEL_PROVIDER = "codex-action-responses-proxy"; export async function writeProxyConfig( codexHome: string, @@ -29,7 +29,7 @@ model_provider = "${MODEL_PROVIDER}" # Added by codex-action. [model_providers.${MODEL_PROVIDER}] -name = "OpenAI Proxy" +name = "Codex Action Responses Proxy" base_url = "http://127.0.0.1:${port}/v1" wire_api = "responses" `;