diff --git a/.all-contributorsrc b/.all-contributorsrc index 82b404942d1..f176c80218a 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -2434,6 +2434,15 @@ "contributions": [ "code" ] + }, + { + "login": "eltociear", + "name": "Ikko Ashimine", + "avatar_url": "https://avatars.githubusercontent.com/u/22633385?v=4", + "profile": "https://bandism.net/", + "contributions": [ + "code" + ] } ], "skipCi": true diff --git a/.github/workflows/functional_all_db.yml b/.github/workflows/functional_all_db.yml index f60c9baddeb..71a2558b905 100644 --- a/.github/workflows/functional_all_db.yml +++ b/.github/workflows/functional_all_db.yml @@ -24,6 +24,10 @@ jobs: uses: actions/setup-dotnet@v1 with: dotnet-version: 5.0.* + - name: Setup .NET 6.0 + uses: actions/setup-dotnet@v1 + with: + dotnet-version: 6.0.x - name: Fix nuget restore issue run: | apt update && apt --only-upgrade install ca-certificates -y @@ -54,6 +58,10 @@ jobs: uses: actions/setup-dotnet@v1 with: dotnet-version: 5.0.* + - name: Setup .NET 6.0 + uses: actions/setup-dotnet@v1 + with: + dotnet-version: 6.0.x - name: Fix nuget restore issue run: | apt update && apt --only-upgrade install ca-certificates -y @@ -102,6 +110,10 @@ jobs: uses: actions/setup-dotnet@v1 with: dotnet-version: 5.0.* + - name: Setup .NET 6.0 + uses: actions/setup-dotnet@v1 + with: + dotnet-version: 6.0.x - name: Fix nuget restore issue run: | apt update && apt --only-upgrade install ca-certificates -y @@ -146,6 +158,10 @@ jobs: uses: actions/setup-dotnet@v1 with: dotnet-version: 5.0.* + - name: Setup .NET 6.0 + uses: actions/setup-dotnet@v1 + with: + dotnet-version: 6.0.x - name: Fix nuget restore issue run: | apt update && apt --only-upgrade install ca-certificates -y @@ -189,6 +205,10 @@ jobs: uses: actions/setup-dotnet@v1 with: dotnet-version: 5.0.* + - name: Setup .NET 6.0 + uses: actions/setup-dotnet@v1 + with: + dotnet-version: 6.0.x - name: Fix nuget restore issue run: | apt update && apt --only-upgrade install ca-certificates -y diff --git a/.github/workflows/mac_unit_test_ci.yml b/.github/workflows/mac_unit_test_ci.yml index 6577ec26aab..64f455d2331 100644 --- a/.github/workflows/mac_unit_test_ci.yml +++ b/.github/workflows/mac_unit_test_ci.yml @@ -19,6 +19,10 @@ jobs: uses: actions/setup-dotnet@v1 with: dotnet-version: 5.0.* + - name: Setup .NET 6.0 + uses: actions/setup-dotnet@v1 + with: + dotnet-version: 6.0.x - name: Build and test run: | dotnet build --configuration Release diff --git a/.github/workflows/pr_ci.yml b/.github/workflows/pr_ci.yml index 104464e6e92..0d5324ecc42 100644 --- a/.github/workflows/pr_ci.yml +++ b/.github/workflows/pr_ci.yml @@ -5,7 +5,7 @@ on: - '**/*.md' - 'mkdocs.yml' - 'src/docs/**/*' - branches: [ dev, main, release/** ] + branches: [ main, release/** ] env: DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true DOTNET_CLI_TELEMETRY_OPTOUT: true @@ -30,13 +30,19 @@ jobs: uses: actions/setup-dotnet@v1 with: dotnet-version: 5.0.* + - name: Setup .NET 6.0 + uses: actions/setup-dotnet@v1 + with: + dotnet-version: 6.0.x + include-prerelease: true - name: Build run: | + dotnet build --configuration Release --framework net6.0 dotnet build --configuration Release --framework net5.0 dotnet build --configuration Release --framework netcoreapp3.1 - name: Unit Tests run: | - dotnet test -c Release --no-restore --no-build ./test/OrchardCore.Tests/OrchardCore.Tests.csproj + dotnet test -c Release --no-restore --no-build ./test/OrchardCore.Tests/OrchardCore.Tests.csproj - name: Functional Tests if: matrix.os == 'ubuntu-latest' run: | @@ -51,4 +57,4 @@ jobs: path: | test/Functional/cms-tests/cypress/screenshots src/OrchardCore.Cms.Web/App_Data/logs - \ No newline at end of file + diff --git a/.github/workflows/preview_ci.yml b/.github/workflows/preview_ci.yml index daac43014df..b89404064ed 100644 --- a/.github/workflows/preview_ci.yml +++ b/.github/workflows/preview_ci.yml @@ -5,7 +5,7 @@ on: - '**/*.md' - 'mkdocs.yml' - 'src/docs/**/*' - branches: [ dev, main, release/** ] + branches: [ main, release/** ] env: DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true DOTNET_CLI_TELEMETRY_OPTOUT: true @@ -30,11 +30,17 @@ jobs: uses: actions/setup-dotnet@v1 with: dotnet-version: 5.0.* + - name: Setup .NET 6.0 + uses: actions/setup-dotnet@v1 + with: + dotnet-version: 6.0.x + include-prerelease: true - name: Set build number if: matrix.os == 'ubuntu-latest' run: echo "BuildNumber=$(( $GITHUB_RUN_NUMBER + 16368 ))" >> $GITHUB_ENV - name: Build run: | + dotnet build --configuration Release --framework net6.0 dotnet build --configuration Release --framework net5.0 dotnet build --configuration Release --framework netcoreapp3.1 - name: Unit Tests @@ -70,7 +76,7 @@ jobs: run: | rm -rf ./src/OrchardCore.Cms.Web/App_Data rm -rf ./src/OrchardCore.Cms.Web/App_Data_Tests - dotnet publish -c Release -o ./.build/release --no-build --no-restore --framework net5.0 + dotnet publish -c Release -o ./.build/release --no-build --no-restore --framework net6.0 docker build -f Dockerfile-CI -t orchardproject/orchardcore-cms-linux:dev . docker push orchardproject/orchardcore-cms-linux:dev - name: Deploy preview docker image for windows @@ -78,7 +84,7 @@ jobs: run: | Get-ChildItem ./src/OrchardCore.Cms.Web/App_Data -Recurse | Remove-Item Get-ChildItem ./src/OrchardCore.Cms.Web/App_Data_Tests -Recurse | Remove-Item - dotnet publish -c Release -o ./.build/release --no-build --no-restore --framework net5.0 + dotnet publish -c Release -o ./.build/release --no-build --no-restore --framework net6.0 docker build -f Dockerfile-CI -t orchardproject/orchardcore-cms-windows:dev . echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login -u="${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin docker push orchardproject/orchardcore-cms-windows:dev diff --git a/.github/workflows/release_ci.yml b/.github/workflows/release_ci.yml index f00bdce2986..0c9bc5dce6a 100644 --- a/.github/workflows/release_ci.yml +++ b/.github/workflows/release_ci.yml @@ -33,19 +33,25 @@ jobs: - uses: actions/setup-node@v2 with: node-version: "15" - - name: Setup .NET Core 3.1 on ${{ matrix.os }} + - name: Setup .NET Core 3.1 uses: actions/setup-dotnet@v1 with: dotnet-version: 3.1.* - - name: Setup .NET Core 5.0 on ${{ matrix.os }} + - name: Setup .NET Core 5.0 uses: actions/setup-dotnet@v1 with: dotnet-version: 5.0.* + - name: Setup .NET 6.0 + uses: actions/setup-dotnet@v1 + with: + dotnet-version: 6.0.x + include-prerelease: true - name: Set build number if: matrix.os == 'ubuntu-latest' run: echo "BuildNumber=$(( $GITHUB_RUN_NUMBER + 15471 ))" >> $GITHUB_ENV - name: Build run: | + dotnet build --configuration Release --framework net6.0 dotnet build --configuration Release --framework net5.0 dotnet build --configuration Release --framework netcoreapp3.1 - name: Unit Tests @@ -81,7 +87,7 @@ jobs: run: | rm -rf ./src/OrchardCore.Cms.Web/App_Data rm -rf ./src/OrchardCore.Cms.Web/App_Data_Tests - dotnet publish -c Release -o ./.build/release --no-build --no-restore --framework net5.0 + dotnet publish -c Release -o ./.build/release --no-build --no-restore --framework net6.0 docker build -f Dockerfile-CI -t orchardproject/orchardcore-cms-linux:latest -t orchardproject/orchardcore-cms-linux:${{ steps.get_version.outputs.VERSION }} . docker push orchardproject/orchardcore-cms-linux:latest docker push "orchardproject/orchardcore-cms-linux:${{ steps.get_version.outputs.VERSION }}" @@ -90,7 +96,7 @@ jobs: run: | Get-ChildItem ./src/OrchardCore.Cms.Web/App_Data -Recurse | Remove-Item Get-ChildItem ./src/OrchardCore.Cms.Web/App_Data_Tests -Recurse | Remove-Item - dotnet publish -c Release -o ./.build/release --no-build --no-restore --framework net5.0 + dotnet publish -c Release -o ./.build/release --no-build --no-restore --framework net6.0 docker build -f Dockerfile-CI -t orchardproject/orchardcore-cms-windows:latest -t orchardproject/orchardcore-cms-windows:${{ steps.get_version.outputs.VERSION }} . echo "${{ secrets.DOCKERHUB_PASSWORD }}" | docker login -u="${{ secrets.DOCKERHUB_USERNAME }}" --password-stdin docker push orchardproject/orchardcore-cms-windows:latest diff --git a/.vscode/launch.json b/.vscode/launch.json index 913be3c90f0..0e948929138 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -2,11 +2,11 @@ "version": "0.2.0", "configurations": [ { - "name": ".NET Core Launch (console) - net5.0", + "name": ".NET Core Launch (console) - net6.0", "type": "coreclr", "request": "launch", - "preLaunchTask": "Web App: Dotnet Build Debug - net5.0", - "program": "${workspaceRoot}/src/OrchardCore.Cms.Web/bin/Debug/net5.0/OrchardCore.Cms.Web.dll", + "preLaunchTask": "Web App: Dotnet Build Debug - net6.0", + "program": "${workspaceRoot}/src/OrchardCore.Cms.Web/bin/Debug/net6.0/OrchardCore.Cms.Web.dll", "args": [], "cwd": "${workspaceRoot}/src/OrchardCore.Cms.Web", "env": { @@ -15,12 +15,12 @@ "stopAtEntry": false }, { - "name": ".NET Core Launch (web debug) - net5.0", + "name": ".NET Core Launch (web debug) - net6.0", "type": "coreclr", "request": "launch", "internalConsoleOptions": "openOnSessionStart", - "preLaunchTask": "Web App: Dotnet Build Debug - net5.0", - "program": "${workspaceRoot}/src/OrchardCore.Cms.Web/bin/Debug/net5.0/OrchardCore.Cms.Web.dll", + "preLaunchTask": "Web App: Dotnet Build Debug - net6.0", + "program": "${workspaceRoot}/src/OrchardCore.Cms.Web/bin/Debug/net6.0/OrchardCore.Cms.Web.dll", "args": [], "cwd": "${workspaceRoot}/src/OrchardCore.Cms.Web", "env": { @@ -33,11 +33,11 @@ } }, { - "name": ".NET Core Launch (web release) - net5.0", + "name": ".NET Core Launch (web release) - net6.0", "type": "coreclr", "request": "launch", - "preLaunchTask": "Web App: Dotnet Build Release - net5.0", - "program": "${workspaceRoot}/src/OrchardCore.Cms.Web/bin/Release/net5.0/OrchardCore.Cms.Web.dll", + "preLaunchTask": "Web App: Dotnet Build Release - net6.0", + "program": "${workspaceRoot}/src/OrchardCore.Cms.Web/bin/Release/net6.0/OrchardCore.Cms.Web.dll", "args": [], "cwd": "${workspaceRoot}/src/OrchardCore.Cms.Web", "env": { @@ -56,11 +56,11 @@ "processId": "${command:pickProcess}" }, { - "name": ".NET Core Launch (publish framework dependent) - net5.0", + "name": ".NET Core Launch (publish framework dependent) - net6.0", "type": "coreclr", "request": "launch", "internalConsoleOptions": "openOnSessionStart", - "preLaunchTask": "Web App: Dotnet Publish (framework dependent) - net5.0", + "preLaunchTask": "Web App: Dotnet Publish (framework dependent) - net6.0", "program": "${workspaceRoot}/.build/release/OrchardCore.Cms.Web.dll", "args": [], "cwd": "${workspaceRoot}/.build/release", @@ -74,11 +74,11 @@ } }, { - "name": ".NET Core Launch (publish self-contained) - net5.0", + "name": ".NET Core Launch (publish self-contained) - net6.0", "type": "coreclr", "request": "launch", "internalConsoleOptions": "openOnSessionStart", - "preLaunchTask": "Web App: Dotnet Publish (self-contained) - net5.0", + "preLaunchTask": "Web App: Dotnet Publish (self-contained) - net6.0", "program": "${workspaceRoot}/.build/release/OrchardCore.Cms.Web.dll", "args": [], "cwd": "${workspaceRoot}/.build/release", diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 5c7bc4ef51b..6c332a2dfc0 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -61,7 +61,7 @@ ] }, { - "label": "Web App: Dotnet Build Debug - net5.0", + "label": "Web App: Dotnet Build Debug - net6.0", "type": "shell", "command": "dotnet", "args": [ @@ -70,12 +70,12 @@ "-c", "Debug", "-f", - "net5.0" + "net6.0" ], "problemMatcher": "$msCompile" }, { - "label": "Web App: Dotnet Rebuild Debug - net5.0", + "label": "Web App: Dotnet Rebuild Debug - net6.0", "type": "shell", "command": "dotnet", "args": [ @@ -85,12 +85,12 @@ "-c", "Debug", "-f", - "net5.0" + "net6.0" ], "problemMatcher": "$msCompile" }, { - "label": "Web App: Dotnet Build Release - net5.0", + "label": "Web App: Dotnet Build Release - net6.0", "type": "shell", "command": "dotnet", "args": [ @@ -99,7 +99,7 @@ "-c", "Release", "-f", - "net5.0" + "net6.0" ], "problemMatcher": "$msCompile" }, @@ -126,7 +126,7 @@ ] }, { - "label": "Dotnet Publish (self-contained) - net5.0", + "label": "Dotnet Publish (self-contained) - net6.0", "type": "shell", "command": "dotnet", "windows": { @@ -140,7 +140,7 @@ "win-x64", "--self-contained", "--framework", - "net5.0", + "net6.0", "--output", ".\\.build\\release" ] @@ -154,14 +154,14 @@ "linux-x64", "--self-contained", "--framework", - "net5.0", + "net6.0", "--output", "./.build/release" ], "problemMatcher": "$msCompile" }, { - "label": "Dotnet Publish (framework dependent) - net5.0", + "label": "Dotnet Publish (framework dependent) - net6.0", "type": "shell", "command": "dotnet", "windows": { @@ -176,7 +176,7 @@ "--self-contained", "false", "--framework", - "net5.0", + "net6.0", "--output", ".\\.build\\release" ] @@ -191,24 +191,24 @@ "--self-contained", "false", "--framework", - "net5.0", + "net6.0", "--output", "./.build/release" ], "problemMatcher": "$msCompile" }, { - "label": "Web App: Dotnet Publish (self-contained) - net5.0", + "label": "Web App: Dotnet Publish (self-contained) - net6.0", "dependsOn": [ "Cleanup build folder", - "Dotnet Publish (self-contained) - net5.0" + "Dotnet Publish (self-contained) - net6.0" ] }, { - "label": "Web App: Dotnet Publish (framework dependent) - net5.0", + "label": "Web App: Dotnet Publish (framework dependent) - net6.0", "dependsOn": [ "Cleanup build folder", - "Dotnet Publish (framework dependent) - net5.0" + "Dotnet Publish (framework dependent) - net6.0" ] }, { diff --git a/Contributors.md b/Contributors.md index 4466a57b602..e11e9c721de 100644 --- a/Contributors.md +++ b/Contributors.md @@ -1,7 +1,7 @@ # Contributors ✨ -[![All Contributors](https://img.shields.io/badge/all_contributors-261-orange.svg?style=flat-square)](#contributors-) +[![All Contributors](https://img.shields.io/badge/all_contributors-262-orange.svg?style=flat-square)](#contributors-) Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)): @@ -358,6 +358,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
Andrew Carney

💻
evaldsen

💻
Wordshop

💻 +
Ikko Ashimine

💻 diff --git a/Dockerfile b/Dockerfile index 6589107e42d..29dd93b54e2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,13 +1,13 @@ -FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build-env +FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build-env LABEL stage=build-env WORKDIR /app # Copy and build COPY ./src /app -RUN dotnet publish /app/OrchardCore.Cms.Web -c Release -o ./build/release --framework net5.0 +RUN dotnet publish /app/OrchardCore.Cms.Web -c Release -o ./build/release --framework net6.0 # Build runtime image -FROM mcr.microsoft.com/dotnet/aspnet:5.0 +FROM mcr.microsoft.com/dotnet/aspnet:6.0 EXPOSE 80 ENV ASPNETCORE_URLS http://+:80 WORKDIR /app diff --git a/Dockerfile-CI b/Dockerfile-CI index 3119b98370e..bd81f0b93a4 100644 --- a/Dockerfile-CI +++ b/Dockerfile-CI @@ -1,7 +1,7 @@ # This Docker file is intended for the CI # A prerequisite is a published application in the .build/release -FROM mcr.microsoft.com/dotnet/aspnet:5.0 +FROM mcr.microsoft.com/dotnet/aspnet:6.0 EXPOSE 80 ENV ASPNETCORE_URLS http://+:80 diff --git a/OrchardCore.sln b/OrchardCore.sln index a6dd92af158..78e2b5bc97e 100644 --- a/OrchardCore.sln +++ b/OrchardCore.sln @@ -1,6 +1,6 @@ Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 16 -VisualStudioVersion = 16.0.28822.285 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31710.8 MinimumVisualStudioVersion = 10.0.40219.1 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{275E087F-A4E2-4A7B-A924-ED68E3A52086}" EndProject @@ -216,6 +216,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "build", "build", "{184139CF ProjectSection(SolutionItems) = preProject src\OrchardCore.Build\Dependencies.AspNetCore.props = src\OrchardCore.Build\Dependencies.AspNetCore.props src\OrchardCore.Build\Dependencies.props = src\OrchardCore.Build\Dependencies.props + src\OrchardCore\Directory.Build.targets = src\OrchardCore\Directory.Build.targets NuGet.config = NuGet.config src\OrchardCore.Build\OrchardCore.Commons.props = src\OrchardCore.Build\OrchardCore.Commons.props src\OrchardCore.Build\OrchardCore.Commons.targets = src\OrchardCore.Build\OrchardCore.Commons.targets @@ -410,6 +411,24 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OrchardCore.AuditTrail", "s EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OrchardCore.Email.Core", "src\OrchardCore\OrchardCore.Email.Core\OrchardCore.Email.Core.csproj", "{D00CF459-396D-49C9-92E2-3FD3C2A59847}" EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "OrchardCore", "OrchardCore", "{2BC850C3-9846-47E1-9068-AC0A8E5537AC}" + ProjectSection(SolutionItems) = preProject + src\OrchardCore\Directory.Build.props = src\OrchardCore\Directory.Build.props + src\OrchardCore\Directory.Build.targets = src\OrchardCore\Directory.Build.targets + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "OrchardCore.Modules", "OrchardCore.Modules", "{85EF279B-8F35-476D-9BBD-F503F20712B5}" + ProjectSection(SolutionItems) = preProject + src\OrchardCore.Modules\Directory.Build.props = src\OrchardCore.Modules\Directory.Build.props + src\OrchardCore.Modules\Directory.Build.targets = src\OrchardCore.Modules\Directory.Build.targets + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "OrchardCore.Themes", "OrchardCore.Themes", "{21F459C1-494E-41C9-B221-6C102774A47F}" + ProjectSection(SolutionItems) = preProject + src\OrchardCore.Themes\Directory.Build.props = src\OrchardCore.Themes\Directory.Build.props + src\OrchardCore.Themes\Directory.Build.targets = src\OrchardCore.Themes\Directory.Build.targets + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -1315,6 +1334,9 @@ Global {442C544F-6587-4FA5-8459-710ED8492AD4} = {F23AC6C2-DE44-4699-999D-3C478EF3D691} {67509F89-E3D6-4FF9-98EC-A9519937A364} = {A066395F-6F73-45DC-B5A6-B4E306110DCE} {D00CF459-396D-49C9-92E2-3FD3C2A59847} = {F23AC6C2-DE44-4699-999D-3C478EF3D691} + {2BC850C3-9846-47E1-9068-AC0A8E5537AC} = {184139CF-C4AB-4FBE-AE19-54C8B3FE5C5E} + {85EF279B-8F35-476D-9BBD-F503F20712B5} = {184139CF-C4AB-4FBE-AE19-54C8B3FE5C5E} + {21F459C1-494E-41C9-B221-6C102774A47F} = {184139CF-C4AB-4FBE-AE19-54C8B3FE5C5E} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {46A1D25A-78D1-4476-9CBF-25B75E296341} diff --git a/mkdocs.yml b/mkdocs.yml index 41331ce54d5..a0aa204d8f4 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -1,13 +1,13 @@ site_name: Orchard Core Documentation theme: - name: material + name: material custom_dir: src/docs/theme logo: docs/assets/images/orchard-logo.png favicon: docs/assets/images/favicon.png features: - navigation.instant - navigation.tabs - palette: + palette: - media: "(prefers-color-scheme: light)" scheme: default primary: teal @@ -24,7 +24,7 @@ theme: name: Switch to light mode static_templates: - 404.html - + extra: social: - icon: fontawesome/solid/leaf @@ -69,163 +69,163 @@ markdown_extensions: # - markdown.extensions.nl2br plugins: - - search + - search - git-authors - git-revision-date-localized - exclude: glob: # Excluding the large node folder with all its MD files. We can't exclude everything apart from docs because there are links to e.g. C# files too. - "*node_modules*" - + # Page tree nav: - - About Orchard Core: README.md - - Getting started: - - Create a CMS Web application: docs/getting-started/README.md - - Configure Preview package source: docs/getting-started/preview-package-source.md - - Recipes and Starter Themes: docs/getting-started/starter-recipes.md - - Code Generation Templates: docs/getting-started/templates/README.md - - Create a Theme: docs/getting-started/theme.md - - Glossary: - - Terms and Concepts: docs/glossary/README.md - - How-to guides: - - Follow the Guides: docs/guides/README.md - - Create a modular application: docs/guides/create-modular-application-mvc/README.md - - Create a website: docs/guides/create-cms-application/README.md - - Create a Decoupled CMS site: docs/guides/decoupled-cms/README.md - - Add an admin menu: docs/guides/add-admin-menu/README.md - - Implement Full Text search: docs/guides/implement-fulltext-search/README.md - - Install localization files: docs/guides/install-localization-files/README.md - - Integrate Facebook plugins: docs/guides/integrate-facebook-plugins/README.md - - Run code on startup: docs/guides/run-code-on-startup/README.md - - Create a custom admin theme: docs/guides/create-admin-theme/README.md - - Customize encoding settings: docs/guides/encoding-settings/README.md - - Understanding Content Definitions Stores: docs/guides/content-definitions/README.md - - Change password configuration: docs/guides/password-configuration/README.md - - Change lockout configuration: docs/guides/lockout-configuration/README.md - - Azure AD integration: docs/guides/azuread-integration/README.md - - Create a Liquid Widget: docs/guides/create-liquid-widget/README.md - - Key Topics: - - Manage your Content: docs/topics/content-management/README.md - - Customize the Display: docs/topics/display/README.md - - Localize your site: docs/topics/localize/README.md - - Handle the Media: docs/topics/media/README.md - - Navigate between pages: docs/topics/navigation/README.md - - Query and Search data: docs/topics/search/README.md - - Secure your application: docs/topics/security/README.md -# - Data: docs/topics/data/README.md -# - Configuration: docs/topics/configuration/README.md - - Workflows: docs/topics/workflows/README.md - - Contributing to the docs: docs/topics/docs-contributions/README.md - - Publishing a new release: docs/topics/publishing-releases/README.md - - Using Docker: docs/topics/docker/README.md - - Reference: - - docs/reference/README.md - - CMS Modules: - - Content Types: docs/reference/modules/ContentTypes/README.md - - Content Parts: - - Add Parts to your Content: docs/reference/modules/ContentParts/README.md - - Title: docs/reference/modules/Title/README.md - - Autoroute: docs/reference/modules/Autoroute/README.md - - Alias: docs/reference/modules/Alias/README.md - - Html: docs/reference/modules/Html/README.md - - Markdown: docs/reference/modules/Markdown/README.md - - List: docs/reference/modules/Lists/README.md - - Flow: docs/reference/modules/Flow/README.md - - Bag: docs/reference/modules/Flow/BagPart.md - - Publish Later: docs/reference/modules/PublishLater/README.md - - Content Fields: docs/reference/modules/ContentFields/README.md - - Content Preview: docs/reference/modules/ContentPreview/README.md - - Content Localization: docs/reference/modules/ContentLocalization/README.md - - Layers: docs/reference/modules/Layers/README.md - - Widgets: docs/reference/modules/Widgets/README.md - - Forms: docs/reference/modules/Forms/README.md - - Templates: docs/reference/modules/Templates/README.md - - Placements: docs/reference/modules/Placements/README.md - - Themes: docs/reference/modules/Themes/README.md - - Liquid: docs/reference/modules/Liquid/README.md - - Indexing: docs/reference/modules/Indexing/README.md - - SQL Indexing: docs/reference/modules/SQLIndexing/README.md - - Lucene: docs/reference/modules/Lucene/README.md - - Queries: docs/reference/modules/Queries/README.md - - Media: - - Media: docs/reference/modules/Media/README.md - - Media Slugify: docs/reference/modules/Media.Slugify/README.md - - Media Azure: docs/reference/modules/Media.Azure/README.md - - ReCaptcha: docs/reference/modules/ReCaptcha/README.md - - Resources: docs/reference/modules/Resources/README.md - - Rules: docs/reference/modules/Rules/README.md - - Shortcodes: docs/reference/modules/Shortcodes/README.md - - Sitemaps: docs/reference/modules/Sitemaps/README.md - - Spatial: docs/reference/modules/Spatial/README.md - - XML-RPC: docs/reference/modules/XmlRpc/README.md - - Menu: docs/reference/modules/Menu/README.md - - Navigation: docs/reference/modules/Navigation/README.md - - Admin: docs/reference/modules/Admin/README.md - - Admin Dashboard: docs/reference/modules/AdminDashboard/README.md - - Admin Menu: docs/reference/modules/AdminMenu/README.md - - Taxonomies: docs/reference/modules/Taxonomies/README.md - - Authentication: - - Microsoft: docs/reference/modules/Microsoft.Authentication/README.md - - Facebook: docs/reference/modules/Facebook/README.md - - Twitter: docs/reference/modules/Twitter/README.md - - GitHub: docs/reference/modules/GitHub/README.md - - Google: docs/reference/modules/Google/README.md - - Users: - - Overview: docs/reference/modules/Users/README.md - - Custom User Settings: docs/reference/modules/Users/CustomUserSettings/README.md - - Home Route: docs/reference/modules/HomeRoute/README.md - - Feeds: docs/reference/modules/Feeds/README.md - - Core Modules: - - Auto Setup: docs/reference/modules/AutoSetup/README.md - - Features: docs/reference/modules/Features/README.md - - Contents: docs/reference/modules/Contents/README.md - - Configuration: docs/reference/core/Configuration/README.md - - Cors: docs/reference/modules/Cors/README.md - - Custom Settings: docs/reference/modules/CustomSettings/README.md - - Placement: docs/reference/core/Placement/README.md - - Data: docs/reference/core/Data/README.md - - Data Migrations: docs/reference/modules/Migrations/README.md - - Dynamic Cache: docs/reference/modules/DynamicCache/README.md - - Email: docs/reference/modules/Email/README.md - - GraphQL: docs/reference/modules/Apis.GraphQL/README.md - - GraphQL queries: docs/reference/core/Apis.GraphQL.Abstractions/README.md - - Health Check: docs/reference/modules/HealthChecks/README.md - - HTTPS: docs/reference/modules/Https/README.md - - Key Vault (Azure): docs/reference/core/KeyVault.Azure/README.md - - Localization: docs/reference/modules/Localize/README.md - - Logging Serilog: docs/reference/core/Logging.Serilog/README.md - - Mini Profiler: docs/reference/modules/MiniProfiler/README.md - - Modules: docs/reference/core/Modules/README.md - - OpenId: docs/reference/modules/OpenId/README.md - - Razor Helpers: docs/reference/core/Razor/README.md - - Recipes: docs/reference/modules/Recipes/README.md - - Response Compression: docs/reference/modules/ResponseCompression/README.md - - Roles: docs/reference/modules/Roles/README.md - - Sanitizer: docs/reference/core/Sanitizer/README.md - - Scripting: docs/reference/modules/Scripting/README.md - - Setup: docs/reference/modules/Setup/README.md - - Shells: docs/reference/core/Shells/README.md - - Tenants: docs/reference/modules/Tenants/README.md - - Workflows: docs/reference/modules/Workflows/README.md - - DataProtection (Azure Storage): docs/reference/modules/DataProtection.Azure/README.md - - Background Tasks: docs/reference/modules/BackgroundTasks/README.md - - Reverse Proxy: docs/reference/modules/ReverseProxy/README.md - - Resources: - - Learning: docs/resources/README.md - - Tutorials: docs/resources/tutorials/README.md - - Development Tools: docs/resources/development-tools/README.md - - Meeting: docs/resources/meeting/README.md - - Branding: docs/resources/branding/README.md - - Libraries: docs/resources/libraries/README.md - - Owners: docs/resources/owners/README.md - - Workshops: docs/resources/workshops/README.md - - Releases: - - 1.1.0: docs/releases/1.1.0.md - - 1.0.0: docs/releases/1.0.0.md - - 1.0.0-rc2: docs/releases/1.0.0-rc2.md - - 1.0.0-rc1: docs/releases/1.0.0-rc1.md - - 1.0.0-beta3: docs/releases/1.0.0-beta3.md - - 1.0.0-beta2: docs/releases/1.0.0-beta2.md - - 1.0.0-beta1: docs/releases/1.0.0-beta1.md - + - About Orchard Core: README.md + - Getting started: + - Create a CMS Web application: docs/getting-started/README.md + - Configure Preview package source: docs/getting-started/preview-package-source.md + - Recipes and Starter Themes: docs/getting-started/starter-recipes.md + - Code Generation Templates: docs/getting-started/templates/README.md + - Create a Theme: docs/getting-started/theme.md + - Glossary: + - Terms and Concepts: docs/glossary/README.md + - How-to guides: + - Follow the Guides: docs/guides/README.md + - Create a modular application: docs/guides/create-modular-application-mvc/README.md + - Create a website: docs/guides/create-cms-application/README.md + - Create a Decoupled CMS site: docs/guides/decoupled-cms/README.md + - Add an admin menu: docs/guides/add-admin-menu/README.md + - Implement Full Text search: docs/guides/implement-fulltext-search/README.md + - Install localization files: docs/guides/install-localization-files/README.md + - Integrate Facebook plugins: docs/guides/integrate-facebook-plugins/README.md + - Run code on startup: docs/guides/run-code-on-startup/README.md + - Create a custom admin theme: docs/guides/create-admin-theme/README.md + - Customize encoding settings: docs/guides/encoding-settings/README.md + - Understanding Content Definitions Stores: docs/guides/content-definitions/README.md + - Change password configuration: docs/guides/password-configuration/README.md + - Change lockout configuration: docs/guides/lockout-configuration/README.md + - Azure AD integration: docs/guides/azuread-integration/README.md + - Create a Liquid Widget: docs/guides/create-liquid-widget/README.md + - Query Content Items Based on Taxonomy: docs/guides/query-content-items-based-on-taxonomy/README.md + - Key Topics: + - Manage your Content: docs/topics/content-management/README.md + - Customize the Display: docs/topics/display/README.md + - Localize your site: docs/topics/localize/README.md + - Handle the Media: docs/topics/media/README.md + - Navigate between pages: docs/topics/navigation/README.md + - Query and Search data: docs/topics/search/README.md + - Secure your application: docs/topics/security/README.md + # - Data: docs/topics/data/README.md + # - Configuration: docs/topics/configuration/README.md + - Workflows: docs/topics/workflows/README.md + - Contributing to the docs: docs/topics/docs-contributions/README.md + - Publishing a new release: docs/topics/publishing-releases/README.md + - Using Docker: docs/topics/docker/README.md + - Reference: + - docs/reference/README.md + - CMS Modules: + - Content Types: docs/reference/modules/ContentTypes/README.md + - Content Parts: + - Add Parts to your Content: docs/reference/modules/ContentParts/README.md + - Title: docs/reference/modules/Title/README.md + - Autoroute: docs/reference/modules/Autoroute/README.md + - Alias: docs/reference/modules/Alias/README.md + - Html: docs/reference/modules/Html/README.md + - Markdown: docs/reference/modules/Markdown/README.md + - List: docs/reference/modules/Lists/README.md + - Flow: docs/reference/modules/Flow/README.md + - Bag: docs/reference/modules/Flow/BagPart.md + - Publish Later: docs/reference/modules/PublishLater/README.md + - Content Fields: docs/reference/modules/ContentFields/README.md + - Content Preview: docs/reference/modules/ContentPreview/README.md + - Content Localization: docs/reference/modules/ContentLocalization/README.md + - Layers: docs/reference/modules/Layers/README.md + - Widgets: docs/reference/modules/Widgets/README.md + - Forms: docs/reference/modules/Forms/README.md + - Templates: docs/reference/modules/Templates/README.md + - Placements: docs/reference/modules/Placements/README.md + - Themes: docs/reference/modules/Themes/README.md + - Liquid: docs/reference/modules/Liquid/README.md + - Indexing: docs/reference/modules/Indexing/README.md + - SQL Indexing: docs/reference/modules/SQLIndexing/README.md + - Lucene: docs/reference/modules/Lucene/README.md + - Queries: docs/reference/modules/Queries/README.md + - Media: + - Media: docs/reference/modules/Media/README.md + - Media Slugify: docs/reference/modules/Media.Slugify/README.md + - Media Azure: docs/reference/modules/Media.Azure/README.md + - ReCaptcha: docs/reference/modules/ReCaptcha/README.md + - Resources: docs/reference/modules/Resources/README.md + - Rules: docs/reference/modules/Rules/README.md + - Shortcodes: docs/reference/modules/Shortcodes/README.md + - Sitemaps: docs/reference/modules/Sitemaps/README.md + - Spatial: docs/reference/modules/Spatial/README.md + - XML-RPC: docs/reference/modules/XmlRpc/README.md + - Menu: docs/reference/modules/Menu/README.md + - Navigation: docs/reference/modules/Navigation/README.md + - Admin: docs/reference/modules/Admin/README.md + - Admin Dashboard: docs/reference/modules/AdminDashboard/README.md + - Admin Menu: docs/reference/modules/AdminMenu/README.md + - Taxonomies: docs/reference/modules/Taxonomies/README.md + - Authentication: + - Microsoft: docs/reference/modules/Microsoft.Authentication/README.md + - Facebook: docs/reference/modules/Facebook/README.md + - Twitter: docs/reference/modules/Twitter/README.md + - GitHub: docs/reference/modules/GitHub/README.md + - Google: docs/reference/modules/Google/README.md + - Users: + - Overview: docs/reference/modules/Users/README.md + - Custom User Settings: docs/reference/modules/Users/CustomUserSettings/README.md + - Home Route: docs/reference/modules/HomeRoute/README.md + - Feeds: docs/reference/modules/Feeds/README.md + - Core Modules: + - Auto Setup: docs/reference/modules/AutoSetup/README.md + - Features: docs/reference/modules/Features/README.md + - Contents: docs/reference/modules/Contents/README.md + - Configuration: docs/reference/core/Configuration/README.md + - Cors: docs/reference/modules/Cors/README.md + - Custom Settings: docs/reference/modules/CustomSettings/README.md + - Placement: docs/reference/core/Placement/README.md + - Data: docs/reference/core/Data/README.md + - Data Migrations: docs/reference/modules/Migrations/README.md + - Dynamic Cache: docs/reference/modules/DynamicCache/README.md + - Email: docs/reference/modules/Email/README.md + - GraphQL: docs/reference/modules/Apis.GraphQL/README.md + - GraphQL queries: docs/reference/core/Apis.GraphQL.Abstractions/README.md + - Health Check: docs/reference/modules/HealthChecks/README.md + - HTTPS: docs/reference/modules/Https/README.md + - Key Vault (Azure): docs/reference/core/KeyVault.Azure/README.md + - Localization: docs/reference/modules/Localize/README.md + - Logging Serilog: docs/reference/core/Logging.Serilog/README.md + - Mini Profiler: docs/reference/modules/MiniProfiler/README.md + - Modules: docs/reference/core/Modules/README.md + - OpenId: docs/reference/modules/OpenId/README.md + - Razor Helpers: docs/reference/core/Razor/README.md + - Recipes: docs/reference/modules/Recipes/README.md + - Response Compression: docs/reference/modules/ResponseCompression/README.md + - Roles: docs/reference/modules/Roles/README.md + - Sanitizer: docs/reference/core/Sanitizer/README.md + - Scripting: docs/reference/modules/Scripting/README.md + - Setup: docs/reference/modules/Setup/README.md + - Shells: docs/reference/core/Shells/README.md + - Tenants: docs/reference/modules/Tenants/README.md + - Workflows: docs/reference/modules/Workflows/README.md + - DataProtection (Azure Storage): docs/reference/modules/DataProtection.Azure/README.md + - Background Tasks: docs/reference/modules/BackgroundTasks/README.md + - Reverse Proxy: docs/reference/modules/ReverseProxy/README.md + - Resources: + - Learning: docs/resources/README.md + - Tutorials: docs/resources/tutorials/README.md + - Development Tools: docs/resources/development-tools/README.md + - Meeting: docs/resources/meeting/README.md + - Branding: docs/resources/branding/README.md + - Libraries: docs/resources/libraries/README.md + - Owners: docs/resources/owners/README.md + - Workshops: docs/resources/workshops/README.md + - Releases: + - 1.1.0: docs/releases/1.1.0.md + - 1.0.0: docs/releases/1.0.0.md + - 1.0.0-rc2: docs/releases/1.0.0-rc2.md + - 1.0.0-rc1: docs/releases/1.0.0-rc1.md + - 1.0.0-beta3: docs/releases/1.0.0-beta3.md + - 1.0.0-beta2: docs/releases/1.0.0-beta2.md + - 1.0.0-beta1: docs/releases/1.0.0-beta1.md diff --git a/src/OrchardCore.Build/Dependencies.AspNetCore.props b/src/OrchardCore.Build/Dependencies.AspNetCore.props index 87b49335635..193ca734fdb 100644 --- a/src/OrchardCore.Build/Dependencies.AspNetCore.props +++ b/src/OrchardCore.Build/Dependencies.AspNetCore.props @@ -1,43 +1,55 @@ + - net5.0 - net5.0;netcoreapp3.1 + + + net6.0 + + + net6.0;net5.0;netcoreapp3.1 + - $(DefaultTargetFramework) + $(DefaultTargetFramework) + - 5.0.11 - 5.0.1 + 6.0.0 + 6.0.0 + + + + 5.0.12 + 5.0.1 - 3.1.20 - 3.1.20 + 3.1.21 + 3.1.21 - - - - - - - - - - - + + + + + + + + + + + - - + + diff --git a/src/OrchardCore.Build/Dependencies.props b/src/OrchardCore.Build/Dependencies.props index 896ea5d8e6e..5f30e174e41 100644 --- a/src/OrchardCore.Build/Dependencies.props +++ b/src/OrchardCore.Build/Dependencies.props @@ -8,7 +8,7 @@ - + @@ -16,10 +16,10 @@ - + - + @@ -52,7 +52,7 @@ - + diff --git a/src/OrchardCore.Cms.Web/OrchardCore.Cms.Web.csproj b/src/OrchardCore.Cms.Web/OrchardCore.Cms.Web.csproj index 2f0ffb5621d..d666c6cf1a5 100644 --- a/src/OrchardCore.Cms.Web/OrchardCore.Cms.Web.csproj +++ b/src/OrchardCore.Cms.Web/OrchardCore.Cms.Web.csproj @@ -1,4 +1,4 @@ - + @@ -6,11 +6,11 @@ - $(AspNetCoreTargetFrameworks) + $(CommonTargetFrameworks) true 612,618 InProcess - true + false @@ -18,6 +18,10 @@ + + + + diff --git a/src/OrchardCore.Cms.Web/Properties/launchSettings.json b/src/OrchardCore.Cms.Web/Properties/launchSettings.json index 48a615ef67c..264315c07c4 100644 --- a/src/OrchardCore.Cms.Web/Properties/launchSettings.json +++ b/src/OrchardCore.Cms.Web/Properties/launchSettings.json @@ -22,7 +22,7 @@ "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" }, - "applicationUrl": "http://localhost:5000;https://localhost:5001" + "applicationUrl": "https://localhost:5001;http://localhost:5000" } } } diff --git a/src/OrchardCore.Modules/Directory.Build.props b/src/OrchardCore.Modules/Directory.Build.props index 5a0c09e1949..111637b034f 100644 --- a/src/OrchardCore.Modules/Directory.Build.props +++ b/src/OrchardCore.Modules/Directory.Build.props @@ -4,7 +4,7 @@ - $(AspNetCoreTargetFrameworks) + $(CommonTargetFrameworks) diff --git a/src/OrchardCore.Modules/OrchardCore.Contents/Liquid/FullTextFilter.cs b/src/OrchardCore.Modules/OrchardCore.Contents/Liquid/FullTextFilter.cs index 5900e761f2b..594c295eeac 100644 --- a/src/OrchardCore.Modules/OrchardCore.Contents/Liquid/FullTextFilter.cs +++ b/src/OrchardCore.Modules/OrchardCore.Contents/Liquid/FullTextFilter.cs @@ -51,7 +51,7 @@ public async ValueTask ProcessAsync(FluidValue input, FilterArgument aspects.Add(await _contentManager.PopulateAspectAsync(contentItem)); } - // When returning segments seperate them so multiple segments are indexed individually. + // When returning segments separate them so multiple segments are indexed individually. return new ArrayValue(aspects.SelectMany(x => x.Segments).Where(x => !String.IsNullOrEmpty(x)).Select(x => new StringValue(x + ' '))); } else diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Shortcodes/AssetUrlShortcodeProvider.cs b/src/OrchardCore.Modules/OrchardCore.Media/Shortcodes/AssetUrlShortcodeProvider.cs new file mode 100644 index 00000000000..c9caff0194b --- /dev/null +++ b/src/OrchardCore.Modules/OrchardCore.Media/Shortcodes/AssetUrlShortcodeProvider.cs @@ -0,0 +1,105 @@ +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.WebUtilities; +using Microsoft.Extensions.Options; +using OrchardCore.ResourceManagement; +using Shortcodes; + +namespace OrchardCore.Media.Shortcodes +{ + public class AssetUrlShortcodeProvider : IShortcodeProvider + { + private readonly IMediaFileStore _mediaFileStore; + private readonly IHttpContextAccessor _httpContextAccessor; + private readonly ResourceManagementOptions _options; + + public AssetUrlShortcodeProvider( + IMediaFileStore mediaFileStore, + IHttpContextAccessor httpContextAccessor, + IOptions options) + { + _mediaFileStore = mediaFileStore; + _httpContextAccessor = httpContextAccessor; + _options = options.Value; + } + + public ValueTask EvaluateAsync(string identifier, Arguments arguments, string content, Context context) + { + if (!String.Equals(identifier, "asset_url", StringComparison.OrdinalIgnoreCase)) + { + return new ValueTask((string)null); + } + + // Handle self closing shortcodes. + if (String.IsNullOrEmpty(content)) + { + content = arguments.NamedOrDefault("src"); + if (String.IsNullOrEmpty(content)) + { + return new ValueTask("[asset_url]"); + } + } + + if (!content.StartsWith("//", StringComparison.Ordinal) && !content.StartsWith("http", StringComparison.OrdinalIgnoreCase)) + { + // Serve static files from virtual path. + if (content.StartsWith("~/", StringComparison.Ordinal)) + { + content = _httpContextAccessor.HttpContext.Request.PathBase.Add(content[1..]).Value; + if (!String.IsNullOrEmpty(_options.CdnBaseUrl)) + { + content = _options.CdnBaseUrl + content; + } + } + else + { + content = _mediaFileStore.MapPathToPublicUrl(content); + } + } + + if (arguments.Any()) + { + var queryStringParams = new Dictionary(); + + var width = arguments.Named("width"); + var height = arguments.Named("height"); + var mode = arguments.Named("mode"); + var quality = arguments.Named("quality"); + var format = arguments.Named("format"); + + if (width != null) + { + queryStringParams.Add("width", width); + } + + if (height != null) + { + queryStringParams.Add("height", height); + } + + if (mode != null) + { + queryStringParams.Add("rmode", mode); + } + + if (quality != null) + { + queryStringParams.Add("quality", quality); + } + + if (format != null) + { + queryStringParams.Add("format", format); + } + + content = QueryHelpers.AddQueryString(content, queryStringParams); + } + + // This does not produce a tag, so sanitization is performed by the consumer (html body or markdown). + + return new ValueTask(content); + } + } +} diff --git a/src/OrchardCore.Modules/OrchardCore.Media/Startup.cs b/src/OrchardCore.Modules/OrchardCore.Media/Startup.cs index 1bf02c8e4f3..6861f0609dc 100644 --- a/src/OrchardCore.Modules/OrchardCore.Media/Startup.cs +++ b/src/OrchardCore.Modules/OrchardCore.Media/Startup.cs @@ -394,6 +394,21 @@ public override void ConfigureServices(IServiceCollection services) class, alt +"; + d.Categories = new string[] { "HTML Content", "Media" }; + }); + + services.AddShortcode("asset_url", d => + { + d.DefaultValue = "[asset_url] [/asset_url]"; + d.Hint = "Return a url from the media library."; + d.Usage = +@"[asset_url]foo.jpg[/asset_url]
+ + + + +
Args:width, height, mode
"; d.Categories = new string[] { "HTML Content", "Media" }; }); diff --git a/src/OrchardCore.Modules/OrchardCore.Resources/ResourceManagementOptionsConfiguration.cs b/src/OrchardCore.Modules/OrchardCore.Resources/ResourceManagementOptionsConfiguration.cs index f4d8dceba8d..edfe2e1fd1e 100644 --- a/src/OrchardCore.Modules/OrchardCore.Resources/ResourceManagementOptionsConfiguration.cs +++ b/src/OrchardCore.Modules/OrchardCore.Resources/ResourceManagementOptionsConfiguration.cs @@ -382,7 +382,7 @@ ResourceManifest BuildManifest() manifest .DefineScript("trumbowyg") .SetDependencies("jquery-resizable") - .SetUrl("~/OrchardCore.Resources/Scripts/trumbowyg.js", "~/OrchardCore.Resources/Scripts/trumbowyg.js") + .SetUrl("~/OrchardCore.Resources/Scripts/trumbowyg.min.js", "~/OrchardCore.Resources/Scripts/trumbowyg.js") .SetCdn("https://cdn.jsdelivr.net/npm/trumbowyg@2.25.1/dist/trumbowyg.min.js", "https://cdn.jsdelivr.net/npm/trumbowyg@2.25.1/dist/trumbowyg.js") .SetCdnIntegrity("sha384-wwt6vSsdmnPNAuXp11Jjm37wAA+b/Rm33Jhd3QE/5E4oDLeNoCTLU3kxQYsdOtdW", "sha384-N2uP/HqSD9qptuEGY2J1Iq0G5jqaYUcuMGUnyWiS6giy4adYptw2Co8hT7LQJKcT") .SetVersion("2.25.1"); @@ -390,7 +390,7 @@ ResourceManifest BuildManifest() manifest .DefineScript("trumbowyg-shortcodes") .SetDependencies("trumbowyg") - .SetUrl("~/OrchardCore.Resources/Scripts/trumbowyg.shortcodes.js", "~/OrchardCore.Resources/Scripts/trumbowyg.shortcodes.min.js") + .SetUrl("~/OrchardCore.Resources/Scripts/trumbowyg.shortcodes.min.js", "~/OrchardCore.Resources/Scripts/trumbowyg.shortcodes.js") .SetVersion("1.0.0"); manifest @@ -402,7 +402,7 @@ ResourceManifest BuildManifest() manifest .DefineScript("trumbowyg-plugins") .SetDependencies("trumbowyg") - .SetUrl("~/OrchardCore.Resources/Scripts/trumbowyg-plugins.js", "~/OrchardCore.Resources/Scripts/trumbowyg-plugins.js") + .SetUrl("~/OrchardCore.Resources/Scripts/trumbowyg-plugins.min.js", "~/OrchardCore.Resources/Scripts/trumbowyg-plugins.js") .SetVersion("2.25.1"); manifest diff --git a/src/OrchardCore.Modules/OrchardCore.Setup/package-lock.json b/src/OrchardCore.Modules/OrchardCore.Setup/package-lock.json index 44d0540561b..e42d9b3a67f 100644 --- a/src/OrchardCore.Modules/OrchardCore.Setup/package-lock.json +++ b/src/OrchardCore.Modules/OrchardCore.Setup/package-lock.json @@ -8,7 +8,7 @@ "name": "orchardcore.setup", "version": "1.0.0", "dependencies": { - "bootstrap": "5.1.0", + "bootstrap": "5.1.3", "jquery": "3.6.0" } }, @@ -23,15 +23,15 @@ } }, "node_modules/bootstrap": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.1.0.tgz", - "integrity": "sha512-bs74WNI9BgBo3cEovmdMHikSKoXnDgA6VQjJ7TyTotU6L7d41ZyCEEelPwkYEzsG/Zjv3ie9IE3EMAje0W9Xew==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.1.3.tgz", + "integrity": "sha512-fcQztozJ8jToQWXxVuEyXWW+dSo8AiXWKwiSSrKWsRB/Qt+Ewwza+JWoLKiTuQLaEPhdNAJ7+Dosc9DOIqNy7Q==", "funding": { "type": "opencollective", "url": "https://opencollective.com/bootstrap" }, "peerDependencies": { - "@popperjs/core": "^2.9.3" + "@popperjs/core": "^2.10.2" } }, "node_modules/jquery": { @@ -48,9 +48,9 @@ "peer": true }, "bootstrap": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.1.0.tgz", - "integrity": "sha512-bs74WNI9BgBo3cEovmdMHikSKoXnDgA6VQjJ7TyTotU6L7d41ZyCEEelPwkYEzsG/Zjv3ie9IE3EMAje0W9Xew==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.1.3.tgz", + "integrity": "sha512-fcQztozJ8jToQWXxVuEyXWW+dSo8AiXWKwiSSrKWsRB/Qt+Ewwza+JWoLKiTuQLaEPhdNAJ7+Dosc9DOIqNy7Q==", "requires": {} }, "jquery": { diff --git a/src/OrchardCore.Modules/OrchardCore.Setup/package.json b/src/OrchardCore.Modules/OrchardCore.Setup/package.json index 7bc56cfa9ec..45b8ab57212 100644 --- a/src/OrchardCore.Modules/OrchardCore.Setup/package.json +++ b/src/OrchardCore.Modules/OrchardCore.Setup/package.json @@ -2,7 +2,7 @@ "name": "orchardcore.setup", "version": "1.0.0", "dependencies": { - "bootstrap": "5.1.0", + "bootstrap": "5.1.3", "jquery": "3.6.0" } } diff --git a/src/OrchardCore.Modules/OrchardCore.Setup/wwwroot/Scripts/setup.js b/src/OrchardCore.Modules/OrchardCore.Setup/wwwroot/Scripts/setup.js index e4a027944b8..877065dc4dc 100644 --- a/src/OrchardCore.Modules/OrchardCore.Setup/wwwroot/Scripts/setup.js +++ b/src/OrchardCore.Modules/OrchardCore.Setup/wwwroot/Scripts/setup.js @@ -9517,7 +9517,7 @@ function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; } return _typeof(obj); } /*! - * Bootstrap v5.1.0 (https://getbootstrap.com/) + * Bootstrap v5.1.3 (https://getbootstrap.com/) * Copyright 2011-2021 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors) * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) */ @@ -9527,7 +9527,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi 'use strict'; /** * -------------------------------------------------------------------------- - * Bootstrap (v5.1.0): util/index.js + * Bootstrap (v5.1.3): util/index.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -9845,7 +9845,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi }; /** * -------------------------------------------------------------------------- - * Bootstrap (v5.1.0): dom/event-handler.js + * Bootstrap (v5.1.3): dom/event-handler.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -9908,7 +9908,6 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi event.delegateTarget = target; if (handler.oneOff) { - // eslint-disable-next-line unicorn/consistent-destructuring EventHandler.off(element, event.type, selector, fn); } @@ -10139,7 +10138,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi }; /** * -------------------------------------------------------------------------- - * Bootstrap (v5.1.0): dom/data.js + * Bootstrap (v5.1.3): dom/data.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -10190,7 +10189,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi }; /** * -------------------------------------------------------------------------- - * Bootstrap (v5.1.0): base-component.js + * Bootstrap (v5.1.3): base-component.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -10201,7 +10200,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi * ------------------------------------------------------------------------ */ - var VERSION = '5.1.0'; + var VERSION = '5.1.3'; var BaseComponent = /*#__PURE__*/function () { function BaseComponent(element) { @@ -10273,7 +10272,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi }(); /** * -------------------------------------------------------------------------- - * Bootstrap (v5.1.0): util/component-functions.js + * Bootstrap (v5.1.3): util/component-functions.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -10300,7 +10299,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi }; /** * -------------------------------------------------------------------------- - * Bootstrap (v5.1.0): alert.js + * Bootstrap (v5.1.3): alert.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -10411,7 +10410,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi defineJQueryPlugin(Alert); /** * -------------------------------------------------------------------------- - * Bootstrap (v5.1.0): button.js + * Bootstrap (v5.1.3): button.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -10498,7 +10497,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi defineJQueryPlugin(Button); /** * -------------------------------------------------------------------------- - * Bootstrap (v5.1.0): dom/manipulator.js + * Bootstrap (v5.1.3): dom/manipulator.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -10570,7 +10569,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi }; /** * -------------------------------------------------------------------------- - * Bootstrap (v5.1.0): dom/selector-engine.js + * Bootstrap (v5.1.3): dom/selector-engine.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -10645,7 +10644,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi }; /** * -------------------------------------------------------------------------- - * Bootstrap (v5.1.0): carousel.js + * Bootstrap (v5.1.3): carousel.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -10892,8 +10891,12 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi value: function _addTouchEventListeners() { var _this6 = this; + var hasPointerPenTouch = function hasPointerPenTouch(event) { + return _this6._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH); + }; + var start = function start(event) { - if (_this6._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) { + if (hasPointerPenTouch(event)) { _this6.touchStartX = event.clientX; } else if (!_this6._pointerEvent) { _this6.touchStartX = event.touches[0].clientX; @@ -10906,7 +10909,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi }; var end = function end(event) { - if (_this6._pointerEvent && (event.pointerType === POINTER_TYPE_PEN || event.pointerType === POINTER_TYPE_TOUCH)) { + if (hasPointerPenTouch(event)) { _this6.touchDeltaX = event.clientX - _this6.touchStartX; } @@ -10933,8 +10936,8 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi }; SelectorEngine.find(SELECTOR_ITEM_IMG, this._element).forEach(function (itemImg) { - EventHandler.on(itemImg, EVENT_DRAG_START, function (e) { - return e.preventDefault(); + EventHandler.on(itemImg, EVENT_DRAG_START, function (event) { + return event.preventDefault(); }); }); @@ -11246,7 +11249,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi defineJQueryPlugin(Carousel); /** * -------------------------------------------------------------------------- - * Bootstrap (v5.1.0): collapse.js + * Bootstrap (v5.1.3): collapse.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -11278,10 +11281,11 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi var CLASS_NAME_COLLAPSE = 'collapse'; var CLASS_NAME_COLLAPSING = 'collapsing'; var CLASS_NAME_COLLAPSED = 'collapsed'; + var CLASS_NAME_DEEPER_CHILDREN = ":scope .".concat(CLASS_NAME_COLLAPSE, " .").concat(CLASS_NAME_COLLAPSE); var CLASS_NAME_HORIZONTAL = 'collapse-horizontal'; var WIDTH = 'width'; var HEIGHT = 'height'; - var SELECTOR_ACTIVES = '.show, .collapsing'; + var SELECTOR_ACTIVES = '.collapse.show, .collapse.collapsing'; var SELECTOR_DATA_TOGGLE$4 = '[data-bs-toggle="collapse"]'; /** * ------------------------------------------------------------------------ @@ -11356,7 +11360,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi var activesData; if (this._config.parent) { - var children = SelectorEngine.find(".".concat(CLASS_NAME_COLLAPSE, " .").concat(CLASS_NAME_COLLAPSE), this._config.parent); + var children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent); actives = SelectorEngine.find(SELECTOR_ACTIVES, this._config.parent).filter(function (elem) { return !children.includes(elem); }); // remove children if greater depth @@ -11505,7 +11509,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi return; } - var children = SelectorEngine.find(".".concat(CLASS_NAME_COLLAPSE, " .").concat(CLASS_NAME_COLLAPSE), this._config.parent); + var children = SelectorEngine.find(CLASS_NAME_DEEPER_CHILDREN, this._config.parent); SelectorEngine.find(SELECTOR_DATA_TOGGLE$4, this._config.parent).filter(function (elem) { return !children.includes(elem); }).forEach(function (element) { @@ -11751,34 +11755,40 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi function getBasePlacement(placement) { return placement.split('-')[0]; - } + } // import { isHTMLElement } from './instanceOf'; - var round$1 = Math.round; - - function getBoundingClientRect(element, includeScale) { - if (includeScale === void 0) { - includeScale = false; - } + function getBoundingClientRect(element, // eslint-disable-next-line unused-imports/no-unused-vars + includeScale) { var rect = element.getBoundingClientRect(); var scaleX = 1; - var scaleY = 1; - - if (isHTMLElement(element) && includeScale) { - // Fallback to 1 in case both values are `0` - scaleX = rect.width / element.offsetWidth || 1; - scaleY = rect.height / element.offsetHeight || 1; - } + var scaleY = 1; // FIXME: + // `offsetWidth` returns an integer while `getBoundingClientRect` + // returns a float. This results in `scaleX` or `scaleY` being + // non-1 when it should be for elements that aren't a full pixel in + // width or height. + // if (isHTMLElement(element) && includeScale) { + // const offsetHeight = element.offsetHeight; + // const offsetWidth = element.offsetWidth; + // // Do not attempt to divide by 0, otherwise we get `Infinity` as scale + // // Fallback to 1 in case both values are `0` + // if (offsetWidth > 0) { + // scaleX = rect.width / offsetWidth || 1; + // } + // if (offsetHeight > 0) { + // scaleY = rect.height / offsetHeight || 1; + // } + // } return { - width: round$1(rect.width / scaleX), - height: round$1(rect.height / scaleY), - top: round$1(rect.top / scaleY), - right: round$1(rect.right / scaleX), - bottom: round$1(rect.bottom / scaleY), - left: round$1(rect.left / scaleX), - x: round$1(rect.left / scaleX), - y: round$1(rect.top / scaleY) + width: rect.width / scaleX, + height: rect.height / scaleY, + top: rect.top / scaleY, + right: rect.right / scaleX, + bottom: rect.bottom / scaleY, + left: rect.left / scaleX, + x: rect.left / scaleX, + y: rect.top / scaleY }; } // means it doesn't take into account transforms. @@ -12030,6 +12040,11 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi requires: ['popperOffsets'], requiresIfExists: ['preventOverflow'] }; + + function getVariation(placement) { + return placement.split('-')[1]; + } + var unsetSides = { top: 'auto', right: 'auto', @@ -12056,6 +12071,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi var popper = _ref2.popper, popperRect = _ref2.popperRect, placement = _ref2.placement, + variation = _ref2.variation, offsets = _ref2.offsets, position = _ref2.position, gpuAcceleration = _ref2.gpuAcceleration, @@ -12082,7 +12098,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi if (offsetParent === getWindow(popper)) { offsetParent = getDocumentElement(popper); - if (getComputedStyle$1(offsetParent).position !== 'static') { + if (getComputedStyle$1(offsetParent).position !== 'static' && position === 'absolute') { heightProp = 'scrollHeight'; widthProp = 'scrollWidth'; } @@ -12091,14 +12107,14 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi offsetParent = offsetParent; - if (placement === top) { + if (placement === top || (placement === left || placement === right) && variation === end) { sideY = bottom; // $FlowFixMe[prop-missing] y -= offsetParent[heightProp] - popperRect.height; y *= gpuAcceleration ? 1 : -1; } - if (placement === left) { + if (placement === left || (placement === top || placement === bottom) && variation === end) { sideX = right; // $FlowFixMe[prop-missing] x -= offsetParent[widthProp] - popperRect.width; @@ -12113,7 +12129,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi if (gpuAcceleration) { var _Object$assign; - return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) < 2 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign)); + return Object.assign({}, commonStyles, (_Object$assign = {}, _Object$assign[sideY] = hasY ? '0' : '', _Object$assign[sideX] = hasX ? '0' : '', _Object$assign.transform = (win.devicePixelRatio || 1) <= 1 ? "translate(" + x + "px, " + y + "px)" : "translate3d(" + x + "px, " + y + "px, 0)", _Object$assign)); } return Object.assign({}, commonStyles, (_Object$assign2 = {}, _Object$assign2[sideY] = hasY ? y + "px" : '', _Object$assign2[sideX] = hasX ? x + "px" : '', _Object$assign2.transform = '', _Object$assign2)); @@ -12130,6 +12146,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi roundOffsets = _options$roundOffsets === void 0 ? true : _options$roundOffsets; var commonStyles = { placement: getBasePlacement(state.placement), + variation: getVariation(state.placement), popper: state.elements.popper, popperRect: state.rects.popper, gpuAcceleration: gpuAcceleration @@ -12431,10 +12448,6 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi return clippingRect; } - function getVariation(placement) { - return placement.split('-')[1]; - } - function computeOffsets(_ref) { var reference = _ref.reference, element = _ref.element, @@ -12520,11 +12533,10 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi padding = _options$padding === void 0 ? 0 : _options$padding; var paddingObject = mergePaddingObject(typeof padding !== 'number' ? padding : expandToHashMap(padding, basePlacements)); var altContext = elementContext === popper ? reference : popper; - var referenceElement = state.elements.reference; var popperRect = state.rects.popper; var element = state.elements[altBoundary ? altContext : elementContext]; var clippingClientRect = getClippingRect(isElement(element) ? element : element.contextElement || getDocumentElement(state.elements.popper), boundary, rootBoundary); - var referenceClientRect = getBoundingClientRect(referenceElement); + var referenceClientRect = getBoundingClientRect(state.elements.reference); var popperOffsets = computeOffsets({ reference: referenceClientRect, element: popperRect, @@ -13016,9 +13028,9 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi } var isOffsetParentAnElement = isHTMLElement(offsetParent); - var offsetParentIsScaled = isHTMLElement(offsetParent) && isElementScaled(offsetParent); + isHTMLElement(offsetParent) && isElementScaled(offsetParent); var documentElement = getDocumentElement(offsetParent); - var rect = getBoundingClientRect(elementOrVirtualElement, offsetParentIsScaled); + var rect = getBoundingClientRect(elementOrVirtualElement); var scroll = { scrollLeft: 0, scrollTop: 0 @@ -13035,7 +13047,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi } if (isHTMLElement(offsetParent)) { - offsets = getBoundingClientRect(offsetParent, true); + offsets = getBoundingClientRect(offsetParent); offsets.x += offsetParent.clientLeft; offsets.y += offsetParent.clientTop; } else if (documentElement) { @@ -13172,7 +13184,8 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi var isDestroyed = false; var instance = { state: state, - setOptions: function setOptions(options) { + setOptions: function setOptions(setOptionsAction) { + var options = typeof setOptionsAction === 'function' ? setOptionsAction(state.options) : setOptionsAction; cleanupModifierEffects(); state.options = Object.assign({}, defaultOptions, state.options, options); state.scrollParents = { @@ -13368,7 +13381,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi }); /** * -------------------------------------------------------------------------- - * Bootstrap (v5.1.0): dropdown.js + * Bootstrap (v5.1.3): dropdown.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -13873,7 +13886,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi defineJQueryPlugin(Dropdown); /** * -------------------------------------------------------------------------- - * Bootstrap (v5.1.0): util/scrollBar.js + * Bootstrap (v5.1.3): util/scrollBar.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -13999,8 +14012,8 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi }(); /** * -------------------------------------------------------------------------- - * Bootstrap (v5.1.0): util/backdrop.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * Bootstrap (v5.1.3): util/backdrop.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -14139,8 +14152,8 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi }(); /** * -------------------------------------------------------------------------- - * Bootstrap (v5.1.0): util/focustrap.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * Bootstrap (v5.1.3): util/focustrap.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -14252,7 +14265,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi }(); /** * -------------------------------------------------------------------------- - * Bootstrap (v5.1.0): modal.js + * Bootstrap (v5.1.3): modal.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -14294,6 +14307,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi var CLASS_NAME_FADE$3 = 'fade'; var CLASS_NAME_SHOW$4 = 'show'; var CLASS_NAME_STATIC = 'modal-static'; + var OPEN_SELECTOR$1 = '.modal.show'; var SELECTOR_DIALOG = '.modal-dialog'; var SELECTOR_MODAL_BODY = '.modal-body'; var SELECTOR_DATA_TOGGLE$2 = '[data-bs-toggle="modal"]'; @@ -14714,7 +14728,14 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi _this27.focus(); } }); - }); + }); // avoid conflict when clicking moddal toggler while another one is open + + var allReadyOpen = SelectorEngine.findOne(OPEN_SELECTOR$1); + + if (allReadyOpen) { + Modal.getInstance(allReadyOpen).hide(); + } + var data = Modal.getOrCreateInstance(target); data.toggle(this); }); @@ -14729,8 +14750,8 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi defineJQueryPlugin(Modal); /** * -------------------------------------------------------------------------- - * Bootstrap (v5.1.0): offcanvas.js - * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + * Bootstrap (v5.1.3): offcanvas.js + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -15022,45 +15043,45 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi defineJQueryPlugin(Offcanvas); /** * -------------------------------------------------------------------------- - * Bootstrap (v5.1.0): util/sanitizer.js + * Bootstrap (v5.1.3): util/sanitizer.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ - var uriAttrs = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']); + var uriAttributes = new Set(['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href']); var ARIA_ATTRIBUTE_PATTERN = /^aria-[\w-]*$/i; /** * A pattern that recognizes a commonly useful subset of URLs that are safe. * - * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts + * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts */ - var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^#&/:?]*(?:[#/?]|$))/i; + var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file|sms):|[^#&/:?]*(?:[#/?]|$))/i; /** * A pattern that matches safe data URLs. Only matches image, video and audio types. * - * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts + * Shoutout to Angular https://github.com/angular/angular/blob/12.2.x/packages/core/src/sanitization/url_sanitizer.ts */ var DATA_URL_PATTERN = /^data:(?:image\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\/(?:mpeg|mp4|ogg|webm)|audio\/(?:mp3|oga|ogg|opus));base64,[\d+/a-z]+=*$/i; - var allowedAttribute = function allowedAttribute(attr, allowedAttributeList) { - var attrName = attr.nodeName.toLowerCase(); + var allowedAttribute = function allowedAttribute(attribute, allowedAttributeList) { + var attributeName = attribute.nodeName.toLowerCase(); - if (allowedAttributeList.includes(attrName)) { - if (uriAttrs.has(attrName)) { - return Boolean(SAFE_URL_PATTERN.test(attr.nodeValue) || DATA_URL_PATTERN.test(attr.nodeValue)); + if (allowedAttributeList.includes(attributeName)) { + if (uriAttributes.has(attributeName)) { + return Boolean(SAFE_URL_PATTERN.test(attribute.nodeValue) || DATA_URL_PATTERN.test(attribute.nodeValue)); } return true; } - var regExp = allowedAttributeList.filter(function (attrRegex) { - return attrRegex instanceof RegExp; + var regExp = allowedAttributeList.filter(function (attributeRegex) { + return attributeRegex instanceof RegExp; }); // Check if a regular expression validates the attribute. for (var i = 0, len = regExp.length; i < len; i++) { - if (regExp[i].test(attrName)) { + if (regExp[i].test(attributeName)) { return true; } } @@ -15115,27 +15136,26 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi var domParser = new window.DOMParser(); var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html'); - var allowlistKeys = Object.keys(allowList); var elements = (_ref11 = []).concat.apply(_ref11, _toConsumableArray(createdDocument.body.querySelectorAll('*'))); var _loop2 = function _loop2(i, len) { var _ref12; - var el = elements[i]; - var elName = el.nodeName.toLowerCase(); + var element = elements[i]; + var elementName = element.nodeName.toLowerCase(); - if (!allowlistKeys.includes(elName)) { - el.remove(); + if (!Object.keys(allowList).includes(elementName)) { + element.remove(); return "continue"; } - var attributeList = (_ref12 = []).concat.apply(_ref12, _toConsumableArray(el.attributes)); + var attributeList = (_ref12 = []).concat.apply(_ref12, _toConsumableArray(element.attributes)); - var allowedAttributes = [].concat(allowList['*'] || [], allowList[elName] || []); - attributeList.forEach(function (attr) { - if (!allowedAttribute(attr, allowedAttributes)) { - el.removeAttribute(attr.nodeName); + var allowedAttributes = [].concat(allowList['*'] || [], allowList[elementName] || []); + attributeList.forEach(function (attribute) { + if (!allowedAttribute(attribute, allowedAttributes)) { + element.removeAttribute(attribute.nodeName); } }); }; @@ -15150,7 +15170,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi } /** * -------------------------------------------------------------------------- - * Bootstrap (v5.1.0): tooltip.js + * Bootstrap (v5.1.3): tooltip.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -15326,9 +15346,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi this.tip.remove(); } - if (this._popper) { - this._popper.destroy(); - } + this._disposePopper(); _get(_getPrototypeOf(Tooltip.prototype), "dispose", this).call(this); } @@ -15351,6 +15369,15 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi if (showEvent.defaultPrevented || !isInTheDom) { return; + } // A trick to recreate a tooltip in case a new title is given by using the NOT documented `data-bs-original-title` + // This will be removed later in favor of a `setContent` method + + + if (this.constructor.NAME === 'tooltip' && this.tip && this.getTitle() !== this.tip.querySelector(SELECTOR_TOOLTIP_INNER).innerHTML) { + this._disposePopper(); + + this.tip.remove(); + this.tip = null; } var tip = this.getTipElement(); @@ -15445,11 +15472,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi EventHandler.trigger(_this36._element, _this36.constructor.Event.HIDDEN); - if (_this36._popper) { - _this36._popper.destroy(); - - _this36._popper = null; - } + _this36._disposePopper(); }; var hideEvent = EventHandler.trigger(this._element, this.constructor.Event.HIDE); @@ -15870,6 +15893,15 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi this._cleanTipClass(); this._addAttachmentClass(this._getAttachment(state.placement)); + } + }, { + key: "_disposePopper", + value: function _disposePopper() { + if (this._popper) { + this._popper.destroy(); + + this._popper = null; + } } // Static }], [{ @@ -15922,7 +15954,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi defineJQueryPlugin(Tooltip); /** * -------------------------------------------------------------------------- - * Bootstrap (v5.1.0): popover.js + * Bootstrap (v5.1.3): popover.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -16057,7 +16089,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi defineJQueryPlugin(Popover); /** * -------------------------------------------------------------------------- - * Bootstrap (v5.1.0): scrollspy.js + * Bootstrap (v5.1.3): scrollspy.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -16336,7 +16368,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi defineJQueryPlugin(ScrollSpy); /** * -------------------------------------------------------------------------- - * Bootstrap (v5.1.0): tab.js + * Bootstrap (v5.1.3): tab.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -16560,7 +16592,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi defineJQueryPlugin(Tab); /** * -------------------------------------------------------------------------- - * Bootstrap (v5.1.0): toast.js + * Bootstrap (v5.1.3): toast.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -16828,7 +16860,7 @@ function _typeof(obj) { "@babel/helpers - typeof"; if (typeof Symbol === "functi defineJQueryPlugin(Toast); /** * -------------------------------------------------------------------------- - * Bootstrap (v5.1.0): index.umd.js + * Bootstrap (v5.1.3): index.umd.js * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE) * -------------------------------------------------------------------------- */ @@ -16976,4 +17008,4 @@ function togglePasswordVisibility(passwordCtl, togglePasswordCtl) { }); }; })(jQuery); -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5qcyIsIi4uLy4uL2pzL3NyYy91dGlsL2luZGV4LmpzIiwiLi4vLi4vanMvc3JjL2RvbS9ldmVudC1oYW5kbGVyLmpzIiwiLi4vLi4vanMvc3JjL2RvbS9kYXRhLmpzIiwiLi4vLi4vanMvc3JjL2Jhc2UtY29tcG9uZW50LmpzIiwiLi4vLi4vanMvc3JjL3V0aWwvY29tcG9uZW50LWZ1bmN0aW9ucy5qcyIsIi4uLy4uL2pzL3NyYy9hbGVydC5qcyIsIi4uLy4uL2pzL3NyYy9idXR0b24uanMiLCIuLi8uLi9qcy9zcmMvZG9tL21hbmlwdWxhdG9yLmpzIiwiLi4vLi4vanMvc3JjL2RvbS9zZWxlY3Rvci1lbmdpbmUuanMiLCIuLi8uLi9qcy9zcmMvY2Fyb3VzZWwuanMiLCIuLi8uLi9qcy9zcmMvY29sbGFwc2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2VudW1zLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Tm9kZU5hbWUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3cuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXBwbHlTdHlsZXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvY29udGFpbnMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNUYWJsZUVsZW1lbnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRQYXJlbnROb2RlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21hdGguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3dpdGhpbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0RnJlc2hTaWRlT2JqZWN0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9tZXJnZVBhZGRpbmdPYmplY3QuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2V4cGFuZFRvSGFzaE1hcC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2Fycm93LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvY29tcHV0ZVN0eWxlcy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2V2ZW50TGlzdGVuZXJzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRPcHBvc2l0ZVBsYWNlbWVudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3dTY3JvbGwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Vmlld3BvcnRSZWN0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRSZWN0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNTY3JvbGxQYXJlbnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRTY3JvbGxQYXJlbnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9saXN0U2Nyb2xsUGFyZW50cy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvcmVjdFRvQ2xpZW50UmVjdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldENsaXBwaW5nUmVjdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0VmFyaWF0aW9uLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9jb21wdXRlT2Zmc2V0cy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVBdXRvUGxhY2VtZW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvZmxpcC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2hpZGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9vZmZzZXQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRBbHRBeGlzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvcHJldmVudE92ZXJmbG93LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0SFRNTEVsZW1lbnRTY3JvbGwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlU2Nyb2xsLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q29tcG9zaXRlUmVjdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvb3JkZXJNb2RpZmllcnMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2RlYm91bmNlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9tZXJnZUJ5TmFtZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvY3JlYXRlUG9wcGVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9wb3BwZXItbGl0ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvcG9wcGVyLmpzIiwiLi4vLi4vanMvc3JjL2Ryb3Bkb3duLmpzIiwiLi4vLi4vanMvc3JjL3V0aWwvc2Nyb2xsYmFyLmpzIiwiLi4vLi4vanMvc3JjL3V0aWwvYmFja2Ryb3AuanMiLCIuLi8uLi9qcy9zcmMvdXRpbC9mb2N1c3RyYXAuanMiLCIuLi8uLi9qcy9zcmMvbW9kYWwuanMiLCIuLi8uLi9qcy9zcmMvb2ZmY2FudmFzLmpzIiwiLi4vLi4vanMvc3JjL3V0aWwvc2FuaXRpemVyLmpzIiwiLi4vLi4vanMvc3JjL3Rvb2x0aXAuanMiLCIuLi8uLi9qcy9zcmMvcG9wb3Zlci5qcyIsIi4uLy4uL2pzL3NyYy9zY3JvbGxzcHkuanMiLCIuLi8uLi9qcy9zcmMvdGFiLmpzIiwiLi4vLi4vanMvc3JjL3RvYXN0LmpzIiwiLi4vLi4vanMvaW5kZXgudW1kLmpzIiwic2V0dXAuanMiLCJzdHJlbmd0aC5qcyJdLCJuYW1lcyI6WyJnbG9iYWwiLCJmYWN0b3J5IiwibW9kdWxlIiwiZXhwb3J0cyIsImRvY3VtZW50IiwidyIsIkVycm9yIiwid2luZG93Iiwibm9HbG9iYWwiLCJhcnIiLCJnZXRQcm90byIsIk9iamVjdCIsImdldFByb3RvdHlwZU9mIiwic2xpY2UiLCJmbGF0IiwiYXJyYXkiLCJjYWxsIiwiY29uY2F0IiwiYXBwbHkiLCJwdXNoIiwiaW5kZXhPZiIsImNsYXNzMnR5cGUiLCJ0b1N0cmluZyIsImhhc093biIsImhhc093blByb3BlcnR5IiwiZm5Ub1N0cmluZyIsIk9iamVjdEZ1bmN0aW9uU3RyaW5nIiwic3VwcG9ydCIsImlzRnVuY3Rpb24iLCJvYmoiLCJub2RlVHlwZSIsIml0ZW0iLCJpc1dpbmRvdyIsInByZXNlcnZlZFNjcmlwdEF0dHJpYnV0ZXMiLCJ0eXBlIiwic3JjIiwibm9uY2UiLCJub01vZHVsZSIsIkRPTUV2YWwiLCJjb2RlIiwibm9kZSIsImRvYyIsImkiLCJ2YWwiLCJzY3JpcHQiLCJjcmVhdGVFbGVtZW50IiwidGV4dCIsImdldEF0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZSIsImhlYWQiLCJhcHBlbmRDaGlsZCIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsInRvVHlwZSIsInZlcnNpb24iLCJqUXVlcnkiLCJzZWxlY3RvciIsImNvbnRleHQiLCJmbiIsImluaXQiLCJwcm90b3R5cGUiLCJqcXVlcnkiLCJjb25zdHJ1Y3RvciIsImxlbmd0aCIsInRvQXJyYXkiLCJnZXQiLCJudW0iLCJwdXNoU3RhY2siLCJlbGVtcyIsInJldCIsIm1lcmdlIiwicHJldk9iamVjdCIsImVhY2giLCJjYWxsYmFjayIsIm1hcCIsImVsZW0iLCJhcmd1bWVudHMiLCJmaXJzdCIsImVxIiwibGFzdCIsImV2ZW4iLCJncmVwIiwiX2VsZW0iLCJvZGQiLCJsZW4iLCJqIiwiZW5kIiwic29ydCIsInNwbGljZSIsImV4dGVuZCIsIm9wdGlvbnMiLCJuYW1lIiwiY29weSIsImNvcHlJc0FycmF5IiwiY2xvbmUiLCJ0YXJnZXQiLCJkZWVwIiwiaXNQbGFpbk9iamVjdCIsIkFycmF5IiwiaXNBcnJheSIsInVuZGVmaW5lZCIsImV4cGFuZG8iLCJNYXRoIiwicmFuZG9tIiwicmVwbGFjZSIsImlzUmVhZHkiLCJlcnJvciIsIm1zZyIsIm5vb3AiLCJwcm90byIsIkN0b3IiLCJpc0VtcHR5T2JqZWN0IiwiZ2xvYmFsRXZhbCIsImlzQXJyYXlMaWtlIiwibWFrZUFycmF5IiwicmVzdWx0cyIsImluQXJyYXkiLCJzZWNvbmQiLCJpbnZlcnQiLCJjYWxsYmFja0ludmVyc2UiLCJtYXRjaGVzIiwiY2FsbGJhY2tFeHBlY3QiLCJhcmciLCJ2YWx1ZSIsImd1aWQiLCJTeW1ib2wiLCJpdGVyYXRvciIsInNwbGl0IiwiX2kiLCJ0b0xvd2VyQ2FzZSIsIlNpenpsZSIsIkV4cHIiLCJnZXRUZXh0IiwiaXNYTUwiLCJ0b2tlbml6ZSIsImNvbXBpbGUiLCJzZWxlY3QiLCJvdXRlcm1vc3RDb250ZXh0Iiwic29ydElucHV0IiwiaGFzRHVwbGljYXRlIiwic2V0RG9jdW1lbnQiLCJkb2NFbGVtIiwiZG9jdW1lbnRJc0hUTUwiLCJyYnVnZ3lRU0EiLCJyYnVnZ3lNYXRjaGVzIiwiY29udGFpbnMiLCJEYXRlIiwicHJlZmVycmVkRG9jIiwiZGlycnVucyIsImRvbmUiLCJjbGFzc0NhY2hlIiwiY3JlYXRlQ2FjaGUiLCJ0b2tlbkNhY2hlIiwiY29tcGlsZXJDYWNoZSIsIm5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUiLCJzb3J0T3JkZXIiLCJhIiwiYiIsInBvcCIsInB1c2hOYXRpdmUiLCJsaXN0IiwiYm9vbGVhbnMiLCJ3aGl0ZXNwYWNlIiwiaWRlbnRpZmllciIsImF0dHJpYnV0ZXMiLCJwc2V1ZG9zIiwicndoaXRlc3BhY2UiLCJSZWdFeHAiLCJydHJpbSIsInJjb21tYSIsInJjb21iaW5hdG9ycyIsInJkZXNjZW5kIiwicnBzZXVkbyIsInJpZGVudGlmaWVyIiwibWF0Y2hFeHByIiwicmh0bWwiLCJyaW5wdXRzIiwicmhlYWRlciIsInJuYXRpdmUiLCJycXVpY2tFeHByIiwicnNpYmxpbmciLCJydW5lc2NhcGUiLCJmdW5lc2NhcGUiLCJlc2NhcGUiLCJub25IZXgiLCJoaWdoIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwicmNzc2VzY2FwZSIsImZjc3Nlc2NhcGUiLCJjaCIsImFzQ29kZVBvaW50IiwiY2hhckNvZGVBdCIsInVubG9hZEhhbmRsZXIiLCJpbkRpc2FibGVkRmllbGRzZXQiLCJhZGRDb21iaW5hdG9yIiwiZGlzYWJsZWQiLCJub2RlTmFtZSIsImRpciIsIm5leHQiLCJjaGlsZE5vZGVzIiwiZSIsImVscyIsInNlZWQiLCJtIiwibmlkIiwibWF0Y2giLCJncm91cHMiLCJuZXdTZWxlY3RvciIsIm5ld0NvbnRleHQiLCJvd25lckRvY3VtZW50IiwiZXhlYyIsImdldEVsZW1lbnRCeUlkIiwiaWQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJxc2EiLCJ0ZXN0IiwidGVzdENvbnRleHQiLCJzY29wZSIsInRvU2VsZWN0b3IiLCJqb2luIiwicXVlcnlTZWxlY3RvckFsbCIsInFzYUVycm9yIiwicmVtb3ZlQXR0cmlidXRlIiwia2V5cyIsImNhY2hlIiwia2V5IiwiY2FjaGVMZW5ndGgiLCJzaGlmdCIsIm1hcmtGdW5jdGlvbiIsImFzc2VydCIsImVsIiwiYWRkSGFuZGxlIiwiYXR0cnMiLCJoYW5kbGVyIiwiYXR0ckhhbmRsZSIsInNpYmxpbmdDaGVjayIsImN1ciIsImRpZmYiLCJzb3VyY2VJbmRleCIsIm5leHRTaWJsaW5nIiwiY3JlYXRlSW5wdXRQc2V1ZG8iLCJjcmVhdGVCdXR0b25Qc2V1ZG8iLCJjcmVhdGVEaXNhYmxlZFBzZXVkbyIsImlzRGlzYWJsZWQiLCJjcmVhdGVQb3NpdGlvbmFsUHNldWRvIiwiYXJndW1lbnQiLCJtYXRjaEluZGV4ZXMiLCJuYW1lc3BhY2UiLCJuYW1lc3BhY2VVUkkiLCJkb2N1bWVudEVsZW1lbnQiLCJoYXNDb21wYXJlIiwic3ViV2luZG93IiwiZGVmYXVsdFZpZXciLCJ0b3AiLCJhZGRFdmVudExpc3RlbmVyIiwiYXR0YWNoRXZlbnQiLCJjbGFzc05hbWUiLCJjcmVhdGVDb21tZW50IiwiZ2V0QnlJZCIsImdldEVsZW1lbnRzQnlOYW1lIiwiZmlsdGVyIiwiYXR0cklkIiwiZmluZCIsImdldEF0dHJpYnV0ZU5vZGUiLCJ0YWciLCJ0bXAiLCJpbnB1dCIsImlubmVySFRNTCIsIm1hdGNoZXNTZWxlY3RvciIsIndlYmtpdE1hdGNoZXNTZWxlY3RvciIsIm1vek1hdGNoZXNTZWxlY3RvciIsIm9NYXRjaGVzU2VsZWN0b3IiLCJtc01hdGNoZXNTZWxlY3RvciIsImRpc2Nvbm5lY3RlZE1hdGNoIiwiY29tcGFyZURvY3VtZW50UG9zaXRpb24iLCJhZG93biIsImJ1cCIsImNvbXBhcmUiLCJzb3J0RGV0YWNoZWQiLCJhdXAiLCJhcCIsImJwIiwidW5zaGlmdCIsImV4cHIiLCJlbGVtZW50cyIsImF0dHIiLCJzcGVjaWZpZWQiLCJzZWwiLCJ1bmlxdWVTb3J0IiwiZHVwbGljYXRlcyIsImRldGVjdER1cGxpY2F0ZXMiLCJzb3J0U3RhYmxlIiwidGV4dENvbnRlbnQiLCJmaXJzdENoaWxkIiwibm9kZVZhbHVlIiwic2VsZWN0b3JzIiwiY3JlYXRlUHNldWRvIiwicmVsYXRpdmUiLCJwcmVGaWx0ZXIiLCJleGNlc3MiLCJ1bnF1b3RlZCIsIm5vZGVOYW1lU2VsZWN0b3IiLCJwYXR0ZXJuIiwib3BlcmF0b3IiLCJjaGVjayIsInJlc3VsdCIsIndoYXQiLCJfYXJndW1lbnQiLCJzaW1wbGUiLCJmb3J3YXJkIiwib2ZUeXBlIiwiX2NvbnRleHQiLCJ4bWwiLCJ1bmlxdWVDYWNoZSIsIm91dGVyQ2FjaGUiLCJub2RlSW5kZXgiLCJzdGFydCIsInBhcmVudCIsInVzZUNhY2hlIiwibGFzdENoaWxkIiwidW5pcXVlSUQiLCJwc2V1ZG8iLCJhcmdzIiwic2V0RmlsdGVycyIsImlkeCIsIm1hdGNoZWQiLCJtYXRjaGVyIiwidW5tYXRjaGVkIiwibGFuZyIsImVsZW1MYW5nIiwiaGFzaCIsImxvY2F0aW9uIiwiYWN0aXZlRWxlbWVudCIsImhhc0ZvY3VzIiwiaHJlZiIsInRhYkluZGV4IiwiY2hlY2tlZCIsInNlbGVjdGVkIiwic2VsZWN0ZWRJbmRleCIsIl9tYXRjaEluZGV4ZXMiLCJyYWRpbyIsImNoZWNrYm94IiwiZmlsZSIsInBhc3N3b3JkIiwiaW1hZ2UiLCJzdWJtaXQiLCJyZXNldCIsImZpbHRlcnMiLCJwYXJzZU9ubHkiLCJ0b2tlbnMiLCJzb0ZhciIsInByZUZpbHRlcnMiLCJjYWNoZWQiLCJjb21iaW5hdG9yIiwiYmFzZSIsInNraXAiLCJjaGVja05vbkVsZW1lbnRzIiwiZG9uZU5hbWUiLCJvbGRDYWNoZSIsIm5ld0NhY2hlIiwiZWxlbWVudE1hdGNoZXIiLCJtYXRjaGVycyIsIm11bHRpcGxlQ29udGV4dHMiLCJjb250ZXh0cyIsImNvbmRlbnNlIiwibmV3VW5tYXRjaGVkIiwibWFwcGVkIiwic2V0TWF0Y2hlciIsInBvc3RGaWx0ZXIiLCJwb3N0RmluZGVyIiwicG9zdFNlbGVjdG9yIiwidGVtcCIsInByZU1hcCIsInBvc3RNYXAiLCJwcmVleGlzdGluZyIsIm1hdGNoZXJJbiIsIm1hdGNoZXJPdXQiLCJtYXRjaGVyRnJvbVRva2VucyIsImNoZWNrQ29udGV4dCIsImxlYWRpbmdSZWxhdGl2ZSIsImltcGxpY2l0UmVsYXRpdmUiLCJtYXRjaENvbnRleHQiLCJtYXRjaEFueUNvbnRleHQiLCJtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMiLCJlbGVtZW50TWF0Y2hlcnMiLCJzZXRNYXRjaGVycyIsImJ5U2V0IiwiYnlFbGVtZW50Iiwic3VwZXJNYXRjaGVyIiwib3V0ZXJtb3N0IiwibWF0Y2hlZENvdW50Iiwic2V0TWF0Y2hlZCIsImNvbnRleHRCYWNrdXAiLCJkaXJydW5zVW5pcXVlIiwidG9rZW4iLCJjb21waWxlZCIsIl9uYW1lIiwiZGVmYXVsdFZhbHVlIiwidW5pcXVlIiwiaXNYTUxEb2MiLCJlc2NhcGVTZWxlY3RvciIsInVudGlsIiwidHJ1bmNhdGUiLCJpcyIsInNpYmxpbmdzIiwibiIsInJuZWVkc0NvbnRleHQiLCJuZWVkc0NvbnRleHQiLCJyc2luZ2xlVGFnIiwid2lubm93IiwicXVhbGlmaWVyIiwibm90Iiwic2VsZiIsInJvb3RqUXVlcnkiLCJyb290IiwicGFyc2VIVE1MIiwicmVhZHkiLCJycGFyZW50c3ByZXYiLCJndWFyYW50ZWVkVW5pcXVlIiwiY2hpbGRyZW4iLCJjb250ZW50cyIsInByZXYiLCJoYXMiLCJ0YXJnZXRzIiwibCIsImNsb3Nlc3QiLCJpbmRleCIsInByZXZBbGwiLCJhZGQiLCJhZGRCYWNrIiwic2libGluZyIsInBhcmVudHMiLCJwYXJlbnRzVW50aWwiLCJuZXh0QWxsIiwibmV4dFVudGlsIiwicHJldlVudGlsIiwiY29udGVudERvY3VtZW50IiwiY29udGVudCIsInJldmVyc2UiLCJybm90aHRtbHdoaXRlIiwiY3JlYXRlT3B0aW9ucyIsIm9iamVjdCIsIl8iLCJmbGFnIiwiQ2FsbGJhY2tzIiwiZmlyaW5nIiwibWVtb3J5IiwiZmlyZWQiLCJsb2NrZWQiLCJxdWV1ZSIsImZpcmluZ0luZGV4IiwiZmlyZSIsIm9uY2UiLCJzdG9wT25GYWxzZSIsInJlbW92ZSIsImVtcHR5IiwiZGlzYWJsZSIsImxvY2siLCJmaXJlV2l0aCIsIklkZW50aXR5IiwidiIsIlRocm93ZXIiLCJleCIsImFkb3B0VmFsdWUiLCJyZXNvbHZlIiwicmVqZWN0Iiwibm9WYWx1ZSIsIm1ldGhvZCIsInByb21pc2UiLCJmYWlsIiwidGhlbiIsIkRlZmVycmVkIiwiZnVuYyIsInR1cGxlcyIsInN0YXRlIiwiYWx3YXlzIiwiZGVmZXJyZWQiLCJwaXBlIiwiZm5zIiwibmV3RGVmZXIiLCJ0dXBsZSIsInJldHVybmVkIiwicHJvZ3Jlc3MiLCJub3RpZnkiLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJvblByb2dyZXNzIiwibWF4RGVwdGgiLCJkZXB0aCIsInNwZWNpYWwiLCJ0aGF0IiwibWlnaHRUaHJvdyIsIlR5cGVFcnJvciIsIm5vdGlmeVdpdGgiLCJyZXNvbHZlV2l0aCIsInByb2Nlc3MiLCJleGNlcHRpb25Ib29rIiwic3RhY2tUcmFjZSIsInJlamVjdFdpdGgiLCJnZXRTdGFja0hvb2siLCJzZXRUaW1lb3V0Iiwic3RhdGVTdHJpbmciLCJ3aGVuIiwic2luZ2xlVmFsdWUiLCJyZW1haW5pbmciLCJyZXNvbHZlQ29udGV4dHMiLCJyZXNvbHZlVmFsdWVzIiwicHJpbWFyeSIsInVwZGF0ZUZ1bmMiLCJyZXJyb3JOYW1lcyIsInN0YWNrIiwiY29uc29sZSIsIndhcm4iLCJtZXNzYWdlIiwicmVhZHlFeGNlcHRpb24iLCJyZWFkeUxpc3QiLCJyZWFkeVdhaXQiLCJ3YWl0IiwiY29tcGxldGVkIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInJlYWR5U3RhdGUiLCJkb1Njcm9sbCIsImFjY2VzcyIsImNoYWluYWJsZSIsImVtcHR5R2V0IiwicmF3IiwiYnVsayIsIl9rZXkiLCJybXNQcmVmaXgiLCJyZGFzaEFscGhhIiwiZmNhbWVsQ2FzZSIsIl9hbGwiLCJsZXR0ZXIiLCJ0b1VwcGVyQ2FzZSIsImNhbWVsQ2FzZSIsInN0cmluZyIsImFjY2VwdERhdGEiLCJvd25lciIsIkRhdGEiLCJ1aWQiLCJkZWZpbmVQcm9wZXJ0eSIsImNvbmZpZ3VyYWJsZSIsInNldCIsImRhdGEiLCJwcm9wIiwiaGFzRGF0YSIsImRhdGFQcml2IiwiZGF0YVVzZXIiLCJyYnJhY2UiLCJybXVsdGlEYXNoIiwiZ2V0RGF0YSIsIkpTT04iLCJwYXJzZSIsImRhdGFBdHRyIiwicmVtb3ZlRGF0YSIsIl9kYXRhIiwiX3JlbW92ZURhdGEiLCJkZXF1ZXVlIiwic3RhcnRMZW5ndGgiLCJob29rcyIsIl9xdWV1ZUhvb2tzIiwic3RvcCIsInNldHRlciIsImNsZWFyUXVldWUiLCJjb3VudCIsImRlZmVyIiwicG51bSIsInNvdXJjZSIsInJjc3NOdW0iLCJjc3NFeHBhbmQiLCJpc0F0dGFjaGVkIiwiY29tcG9zZWQiLCJnZXRSb290Tm9kZSIsImlzSGlkZGVuV2l0aGluVHJlZSIsInN0eWxlIiwiZGlzcGxheSIsImNzcyIsImFkanVzdENTUyIsInZhbHVlUGFydHMiLCJ0d2VlbiIsImFkanVzdGVkIiwic2NhbGUiLCJtYXhJdGVyYXRpb25zIiwiY3VycmVudFZhbHVlIiwiaW5pdGlhbCIsInVuaXQiLCJjc3NOdW1iZXIiLCJpbml0aWFsSW5Vbml0IiwiZGVmYXVsdERpc3BsYXlNYXAiLCJnZXREZWZhdWx0RGlzcGxheSIsImJvZHkiLCJzaG93SGlkZSIsInNob3ciLCJ2YWx1ZXMiLCJoaWRlIiwidG9nZ2xlIiwicmNoZWNrYWJsZVR5cGUiLCJydGFnTmFtZSIsInJzY3JpcHRUeXBlIiwiZnJhZ21lbnQiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwiZGl2IiwiY2hlY2tDbG9uZSIsImNsb25lTm9kZSIsIm5vQ2xvbmVDaGVja2VkIiwib3B0aW9uIiwid3JhcE1hcCIsInRoZWFkIiwiY29sIiwidHIiLCJ0ZCIsIl9kZWZhdWx0IiwidGJvZHkiLCJ0Zm9vdCIsImNvbGdyb3VwIiwiY2FwdGlvbiIsInRoIiwib3B0Z3JvdXAiLCJnZXRBbGwiLCJzZXRHbG9iYWxFdmFsIiwicmVmRWxlbWVudHMiLCJidWlsZEZyYWdtZW50Iiwic2NyaXB0cyIsInNlbGVjdGlvbiIsImlnbm9yZWQiLCJ3cmFwIiwiYXR0YWNoZWQiLCJub2RlcyIsImNyZWF0ZVRleHROb2RlIiwiaHRtbFByZWZpbHRlciIsInJ0eXBlbmFtZXNwYWNlIiwicmV0dXJuVHJ1ZSIsInJldHVybkZhbHNlIiwiZXhwZWN0U3luYyIsInNhZmVBY3RpdmVFbGVtZW50IiwiZXJyIiwib24iLCJ0eXBlcyIsIm9uZSIsIm9yaWdGbiIsImV2ZW50Iiwib2ZmIiwiaGFuZGxlT2JqSW4iLCJldmVudEhhbmRsZSIsImV2ZW50cyIsInQiLCJoYW5kbGVPYmoiLCJoYW5kbGVycyIsIm5hbWVzcGFjZXMiLCJvcmlnVHlwZSIsImVsZW1EYXRhIiwiY3JlYXRlIiwiaGFuZGxlIiwidHJpZ2dlcmVkIiwiZGlzcGF0Y2giLCJkZWxlZ2F0ZVR5cGUiLCJiaW5kVHlwZSIsImRlbGVnYXRlQ291bnQiLCJzZXR1cCIsIm1hcHBlZFR5cGVzIiwib3JpZ0NvdW50IiwidGVhcmRvd24iLCJyZW1vdmVFdmVudCIsIm5hdGl2ZUV2ZW50IiwiaGFuZGxlclF1ZXVlIiwiZml4IiwiZGVsZWdhdGVUYXJnZXQiLCJwcmVEaXNwYXRjaCIsImlzUHJvcGFnYXRpb25TdG9wcGVkIiwiY3VycmVudFRhcmdldCIsImlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkIiwicm5hbWVzcGFjZSIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwicG9zdERpc3BhdGNoIiwibWF0Y2hlZEhhbmRsZXJzIiwibWF0Y2hlZFNlbGVjdG9ycyIsImJ1dHRvbiIsImFkZFByb3AiLCJob29rIiwiRXZlbnQiLCJlbnVtZXJhYmxlIiwib3JpZ2luYWxFdmVudCIsIndyaXRhYmxlIiwibG9hZCIsIm5vQnViYmxlIiwiY2xpY2siLCJsZXZlcmFnZU5hdGl2ZSIsInRyaWdnZXIiLCJiZWZvcmV1bmxvYWQiLCJyZXR1cm5WYWx1ZSIsIm5vdEFzeW5jIiwic2F2ZWQiLCJpc1RyaWdnZXIiLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJwcm9wcyIsImlzRGVmYXVsdFByZXZlbnRlZCIsImRlZmF1bHRQcmV2ZW50ZWQiLCJyZWxhdGVkVGFyZ2V0IiwidGltZVN0YW1wIiwibm93IiwiaXNTaW11bGF0ZWQiLCJhbHRLZXkiLCJidWJibGVzIiwiY2FuY2VsYWJsZSIsImNoYW5nZWRUb3VjaGVzIiwiY3RybEtleSIsImRldGFpbCIsImV2ZW50UGhhc2UiLCJtZXRhS2V5IiwicGFnZVgiLCJwYWdlWSIsInNoaWZ0S2V5IiwidmlldyIsImNoYXJDb2RlIiwia2V5Q29kZSIsImJ1dHRvbnMiLCJjbGllbnRYIiwiY2xpZW50WSIsIm9mZnNldFgiLCJvZmZzZXRZIiwicG9pbnRlcklkIiwicG9pbnRlclR5cGUiLCJzY3JlZW5YIiwic2NyZWVuWSIsInRhcmdldFRvdWNoZXMiLCJ0b0VsZW1lbnQiLCJ0b3VjaGVzIiwid2hpY2giLCJmb2N1cyIsImJsdXIiLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsInBvaW50ZXJlbnRlciIsInBvaW50ZXJsZWF2ZSIsIm9yaWciLCJyZWxhdGVkIiwicm5vSW5uZXJodG1sIiwicmNoZWNrZWQiLCJyY2xlYW5TY3JpcHQiLCJtYW5pcHVsYXRpb25UYXJnZXQiLCJkaXNhYmxlU2NyaXB0IiwicmVzdG9yZVNjcmlwdCIsImNsb25lQ29weUV2ZW50IiwiZGVzdCIsInBkYXRhT2xkIiwidWRhdGFPbGQiLCJ1ZGF0YUN1ciIsImZpeElucHV0IiwiZG9tTWFuaXAiLCJjb2xsZWN0aW9uIiwiaGFzU2NyaXB0cyIsImlOb0Nsb25lIiwidmFsdWVJc0Z1bmN0aW9uIiwiaHRtbCIsIl9ldmFsVXJsIiwia2VlcERhdGEiLCJjbGVhbkRhdGEiLCJkYXRhQW5kRXZlbnRzIiwiZGVlcERhdGFBbmRFdmVudHMiLCJzcmNFbGVtZW50cyIsImRlc3RFbGVtZW50cyIsImluUGFnZSIsImRldGFjaCIsImFwcGVuZCIsInByZXBlbmQiLCJpbnNlcnRCZWZvcmUiLCJiZWZvcmUiLCJhZnRlciIsInJlcGxhY2VXaXRoIiwicmVwbGFjZUNoaWxkIiwiYXBwZW5kVG8iLCJwcmVwZW5kVG8iLCJpbnNlcnRBZnRlciIsInJlcGxhY2VBbGwiLCJvcmlnaW5hbCIsImluc2VydCIsInJudW1ub25weCIsImdldFN0eWxlcyIsIm9wZW5lciIsImdldENvbXB1dGVkU3R5bGUiLCJzd2FwIiwib2xkIiwicmJveFN0eWxlIiwiY29tcHV0ZVN0eWxlVGVzdHMiLCJjb250YWluZXIiLCJjc3NUZXh0IiwiZGl2U3R5bGUiLCJwaXhlbFBvc2l0aW9uVmFsIiwicmVsaWFibGVNYXJnaW5MZWZ0VmFsIiwicm91bmRQaXhlbE1lYXN1cmVzIiwibWFyZ2luTGVmdCIsInJpZ2h0IiwicGl4ZWxCb3hTdHlsZXNWYWwiLCJib3hTaXppbmdSZWxpYWJsZVZhbCIsIndpZHRoIiwicG9zaXRpb24iLCJzY3JvbGxib3hTaXplVmFsIiwib2Zmc2V0V2lkdGgiLCJtZWFzdXJlIiwicm91bmQiLCJwYXJzZUZsb2F0IiwicmVsaWFibGVUckRpbWVuc2lvbnNWYWwiLCJiYWNrZ3JvdW5kQ2xpcCIsImNsZWFyQ2xvbmVTdHlsZSIsImJveFNpemluZ1JlbGlhYmxlIiwicGl4ZWxCb3hTdHlsZXMiLCJwaXhlbFBvc2l0aW9uIiwicmVsaWFibGVNYXJnaW5MZWZ0Iiwic2Nyb2xsYm94U2l6ZSIsInJlbGlhYmxlVHJEaW1lbnNpb25zIiwidGFibGUiLCJ0ckNoaWxkIiwidHJTdHlsZSIsImhlaWdodCIsInBhcnNlSW50IiwiYm9yZGVyVG9wV2lkdGgiLCJib3JkZXJCb3R0b21XaWR0aCIsIm9mZnNldEhlaWdodCIsImN1ckNTUyIsImNvbXB1dGVkIiwibWluV2lkdGgiLCJtYXhXaWR0aCIsImdldFByb3BlcnR5VmFsdWUiLCJhZGRHZXRIb29rSWYiLCJjb25kaXRpb25GbiIsImhvb2tGbiIsImNzc1ByZWZpeGVzIiwiZW1wdHlTdHlsZSIsInZlbmRvclByb3BzIiwidmVuZG9yUHJvcE5hbWUiLCJjYXBOYW1lIiwiZmluYWxQcm9wTmFtZSIsImZpbmFsIiwiY3NzUHJvcHMiLCJyZGlzcGxheXN3YXAiLCJyY3VzdG9tUHJvcCIsImNzc1Nob3ciLCJ2aXNpYmlsaXR5IiwiY3NzTm9ybWFsVHJhbnNmb3JtIiwibGV0dGVyU3BhY2luZyIsImZvbnRXZWlnaHQiLCJzZXRQb3NpdGl2ZU51bWJlciIsInN1YnRyYWN0IiwibWF4IiwiYm94TW9kZWxBZGp1c3RtZW50IiwiZGltZW5zaW9uIiwiYm94IiwiaXNCb3JkZXJCb3giLCJzdHlsZXMiLCJjb21wdXRlZFZhbCIsImV4dHJhIiwiZGVsdGEiLCJjZWlsIiwiZ2V0V2lkdGhPckhlaWdodCIsImJveFNpemluZ05lZWRlZCIsInZhbHVlSXNCb3JkZXJCb3giLCJvZmZzZXRQcm9wIiwiZ2V0Q2xpZW50UmVjdHMiLCJjc3NIb29rcyIsIm9wYWNpdHkiLCJvcmlnTmFtZSIsImlzQ3VzdG9tUHJvcCIsInNldFByb3BlcnR5IiwiaXNGaW5pdGUiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJzY3JvbGxib3hTaXplQnVnZ3kiLCJsZWZ0IiwibWFyZ2luIiwicGFkZGluZyIsImJvcmRlciIsInByZWZpeCIsInN1ZmZpeCIsImV4cGFuZCIsImV4cGFuZGVkIiwicGFydHMiLCJUd2VlbiIsImVhc2luZyIsInByb3BIb29rcyIsInJ1biIsInBlcmNlbnQiLCJlYXNlZCIsImR1cmF0aW9uIiwicG9zIiwic3RlcCIsImZ4Iiwic2Nyb2xsVG9wIiwic2Nyb2xsTGVmdCIsImxpbmVhciIsInAiLCJzd2luZyIsImNvcyIsIlBJIiwiZnhOb3ciLCJpblByb2dyZXNzIiwicmZ4dHlwZXMiLCJycnVuIiwic2NoZWR1bGUiLCJoaWRkZW4iLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJpbnRlcnZhbCIsInRpY2siLCJjcmVhdGVGeE5vdyIsImdlbkZ4IiwiaW5jbHVkZVdpZHRoIiwiY3JlYXRlVHdlZW4iLCJhbmltYXRpb24iLCJBbmltYXRpb24iLCJ0d2VlbmVycyIsImRlZmF1bHRQcmVmaWx0ZXIiLCJvcHRzIiwib2xkZmlyZSIsInByb3BUd2VlbiIsInJlc3RvcmVEaXNwbGF5IiwiaXNCb3giLCJhbmltIiwiZGF0YVNob3ciLCJ1bnF1ZXVlZCIsIm92ZXJmbG93Iiwib3ZlcmZsb3dYIiwib3ZlcmZsb3dZIiwicHJvcEZpbHRlciIsInNwZWNpYWxFYXNpbmciLCJwcm9wZXJ0aWVzIiwic3RvcHBlZCIsInByZWZpbHRlcnMiLCJjdXJyZW50VGltZSIsInN0YXJ0VGltZSIsInR3ZWVucyIsIm9yaWdpbmFsUHJvcGVydGllcyIsIm9yaWdpbmFsT3B0aW9ucyIsImdvdG9FbmQiLCJiaW5kIiwiY29tcGxldGUiLCJ0aW1lciIsInR3ZWVuZXIiLCJwcmVmaWx0ZXIiLCJzcGVlZCIsIm9wdCIsInNwZWVkcyIsImZhZGVUbyIsInRvIiwiYW5pbWF0ZSIsIm9wdGFsbCIsImRvQW5pbWF0aW9uIiwiZmluaXNoIiwic3RvcFF1ZXVlIiwidGltZXJzIiwiY3NzRm4iLCJzbGlkZURvd24iLCJzbGlkZVVwIiwic2xpZGVUb2dnbGUiLCJmYWRlSW4iLCJmYWRlT3V0IiwiZmFkZVRvZ2dsZSIsInNsb3ciLCJmYXN0IiwiZGVsYXkiLCJ0aW1lIiwidGltZW91dCIsImNsZWFyVGltZW91dCIsImNoZWNrT24iLCJvcHRTZWxlY3RlZCIsInJhZGlvVmFsdWUiLCJib29sSG9vayIsInJlbW92ZUF0dHIiLCJuVHlwZSIsImF0dHJIb29rcyIsImJvb2wiLCJhdHRyTmFtZXMiLCJnZXR0ZXIiLCJsb3dlcmNhc2VOYW1lIiwicmZvY3VzYWJsZSIsInJjbGlja2FibGUiLCJyZW1vdmVQcm9wIiwicHJvcEZpeCIsInRhYmluZGV4Iiwic3RyaXBBbmRDb2xsYXBzZSIsImdldENsYXNzIiwiY2xhc3Nlc1RvQXJyYXkiLCJhZGRDbGFzcyIsImNsYXNzZXMiLCJjdXJWYWx1ZSIsImNsYXp6IiwiZmluYWxWYWx1ZSIsInJlbW92ZUNsYXNzIiwidG9nZ2xlQ2xhc3MiLCJzdGF0ZVZhbCIsImlzVmFsaWRWYWx1ZSIsImNsYXNzTmFtZXMiLCJoYXNDbGFzcyIsInJyZXR1cm4iLCJ2YWxIb29rcyIsIm9wdGlvblNldCIsImZvY3VzaW4iLCJyZm9jdXNNb3JwaCIsInN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrIiwib25seUhhbmRsZXJzIiwiYnViYmxlVHlwZSIsIm9udHlwZSIsImxhc3RFbGVtZW50IiwiZXZlbnRQYXRoIiwicGFyZW50V2luZG93Iiwic2ltdWxhdGUiLCJ0cmlnZ2VySGFuZGxlciIsImF0dGFjaGVzIiwicnF1ZXJ5IiwicGFyc2VYTUwiLCJwYXJzZXJFcnJvckVsZW0iLCJET01QYXJzZXIiLCJwYXJzZUZyb21TdHJpbmciLCJyYnJhY2tldCIsInJDUkxGIiwicnN1Ym1pdHRlclR5cGVzIiwicnN1Ym1pdHRhYmxlIiwiYnVpbGRQYXJhbXMiLCJ0cmFkaXRpb25hbCIsInBhcmFtIiwicyIsInZhbHVlT3JGdW5jdGlvbiIsImVuY29kZVVSSUNvbXBvbmVudCIsInNlcmlhbGl6ZSIsInNlcmlhbGl6ZUFycmF5IiwicjIwIiwicmhhc2giLCJyYW50aUNhY2hlIiwicmhlYWRlcnMiLCJybG9jYWxQcm90b2NvbCIsInJub0NvbnRlbnQiLCJycHJvdG9jb2wiLCJ0cmFuc3BvcnRzIiwiYWxsVHlwZXMiLCJvcmlnaW5BbmNob3IiLCJhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMiLCJzdHJ1Y3R1cmUiLCJkYXRhVHlwZUV4cHJlc3Npb24iLCJkYXRhVHlwZSIsImRhdGFUeXBlcyIsImluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzIiwianFYSFIiLCJpbnNwZWN0ZWQiLCJzZWVraW5nVHJhbnNwb3J0IiwiaW5zcGVjdCIsInByZWZpbHRlck9yRmFjdG9yeSIsImRhdGFUeXBlT3JUcmFuc3BvcnQiLCJhamF4RXh0ZW5kIiwiZmxhdE9wdGlvbnMiLCJhamF4U2V0dGluZ3MiLCJhamF4SGFuZGxlUmVzcG9uc2VzIiwicmVzcG9uc2VzIiwiY3QiLCJmaW5hbERhdGFUeXBlIiwiZmlyc3REYXRhVHlwZSIsIm1pbWVUeXBlIiwiZ2V0UmVzcG9uc2VIZWFkZXIiLCJjb252ZXJ0ZXJzIiwiYWpheENvbnZlcnQiLCJyZXNwb25zZSIsImlzU3VjY2VzcyIsImNvbnYyIiwiY3VycmVudCIsImNvbnYiLCJyZXNwb25zZUZpZWxkcyIsImRhdGFGaWx0ZXIiLCJhY3RpdmUiLCJsYXN0TW9kaWZpZWQiLCJldGFnIiwidXJsIiwiaXNMb2NhbCIsInByb3RvY29sIiwicHJvY2Vzc0RhdGEiLCJhc3luYyIsImNvbnRlbnRUeXBlIiwiYWNjZXB0cyIsImpzb24iLCJhamF4U2V0dXAiLCJzZXR0aW5ncyIsImFqYXhQcmVmaWx0ZXIiLCJhamF4VHJhbnNwb3J0IiwiYWpheCIsInRyYW5zcG9ydCIsImNhY2hlVVJMIiwicmVzcG9uc2VIZWFkZXJzU3RyaW5nIiwicmVzcG9uc2VIZWFkZXJzIiwidGltZW91dFRpbWVyIiwidXJsQW5jaG9yIiwiZmlyZUdsb2JhbHMiLCJ1bmNhY2hlZCIsImNhbGxiYWNrQ29udGV4dCIsImdsb2JhbEV2ZW50Q29udGV4dCIsImNvbXBsZXRlRGVmZXJyZWQiLCJzdGF0dXNDb2RlIiwicmVxdWVzdEhlYWRlcnMiLCJyZXF1ZXN0SGVhZGVyc05hbWVzIiwic3RyQWJvcnQiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJzZXRSZXF1ZXN0SGVhZGVyIiwib3ZlcnJpZGVNaW1lVHlwZSIsInN0YXR1cyIsImFib3J0Iiwic3RhdHVzVGV4dCIsImZpbmFsVGV4dCIsImNyb3NzRG9tYWluIiwiaG9zdCIsImhhc0NvbnRlbnQiLCJpZk1vZGlmaWVkIiwiaGVhZGVycyIsImJlZm9yZVNlbmQiLCJzdWNjZXNzIiwic2VuZCIsIm5hdGl2ZVN0YXR1c1RleHQiLCJtb2RpZmllZCIsImdldEpTT04iLCJnZXRTY3JpcHQiLCJ3cmFwQWxsIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJ3cmFwSW5uZXIiLCJodG1sSXNGdW5jdGlvbiIsInVud3JhcCIsInZpc2libGUiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsInhoclN1Y2Nlc3NTdGF0dXMiLCJ4aHJTdXBwb3J0ZWQiLCJjb3JzIiwiZXJyb3JDYWxsYmFjayIsIm9wZW4iLCJ1c2VybmFtZSIsInhockZpZWxkcyIsIm9ubG9hZCIsIm9uZXJyb3IiLCJvbmFib3J0Iiwib250aW1lb3V0Iiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVzcG9uc2VUeXBlIiwicmVzcG9uc2VUZXh0IiwiYmluYXJ5Iiwic2NyaXB0QXR0cnMiLCJjaGFyc2V0Iiwic2NyaXB0Q2hhcnNldCIsImV2dCIsIm9sZENhbGxiYWNrcyIsInJqc29ucCIsImpzb25wIiwianNvbnBDYWxsYmFjayIsIm9yaWdpbmFsU2V0dGluZ3MiLCJjYWxsYmFja05hbWUiLCJvdmVyd3JpdHRlbiIsInJlc3BvbnNlQ29udGFpbmVyIiwianNvblByb3AiLCJjcmVhdGVIVE1MRG9jdW1lbnQiLCJpbXBsZW1lbnRhdGlvbiIsImtlZXBTY3JpcHRzIiwicGFyc2VkIiwicGFyYW1zIiwiYW5pbWF0ZWQiLCJvZmZzZXQiLCJzZXRPZmZzZXQiLCJjdXJQb3NpdGlvbiIsImN1ckxlZnQiLCJjdXJDU1NUb3AiLCJjdXJUb3AiLCJjdXJPZmZzZXQiLCJjdXJDU1NMZWZ0IiwiY2FsY3VsYXRlUG9zaXRpb24iLCJjdXJFbGVtIiwidXNpbmciLCJyZWN0Iiwid2luIiwicGFnZVlPZmZzZXQiLCJwYWdlWE9mZnNldCIsIm9mZnNldFBhcmVudCIsInBhcmVudE9mZnNldCIsInNjcm9sbFRvIiwiSGVpZ2h0IiwiV2lkdGgiLCJkZWZhdWx0RXh0cmEiLCJmdW5jTmFtZSIsInVuYmluZCIsImRlbGVnYXRlIiwidW5kZWxlZ2F0ZSIsImhvdmVyIiwiZm5PdmVyIiwiZm5PdXQiLCJwcm94eSIsImhvbGRSZWFkeSIsImhvbGQiLCJwYXJzZUpTT04iLCJpc051bWVyaWMiLCJpc05hTiIsInRyaW0iLCJkZWZpbmUiLCJhbWQiLCJfalF1ZXJ5IiwiXyQiLCIkIiwibm9Db25mbGljdCIsIk1BWF9VSUQiLCJNSUxMSVNFQ09ORFNfTVVMVElQTElFUiIsIlRSQU5TSVRJT05fRU5EIiwiZ2V0VUlEIiwiZ2V0U2VsZWN0b3IiLCJlbGVtZW50IiwiaHJlZkF0dHIiLCJnZXRTZWxlY3RvckZyb21FbGVtZW50IiwiZ2V0RWxlbWVudEZyb21TZWxlY3RvciIsImdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50IiwidHJhbnNpdGlvbkRlbGF5IiwiZmxvYXRUcmFuc2l0aW9uRHVyYXRpb24iLCJOdW1iZXIiLCJmbG9hdFRyYW5zaXRpb25EZWxheSIsInRyYW5zaXRpb25EdXJhdGlvbiIsInRyaWdnZXJUcmFuc2l0aW9uRW5kIiwiaXNFbGVtZW50IiwiZ2V0RWxlbWVudCIsInR5cGVDaGVja0NvbmZpZyIsInByb3BlcnR5IiwiZXhwZWN0ZWRUeXBlcyIsImNvbmZpZ1R5cGVzIiwiY29uZmlnIiwidmFsdWVUeXBlIiwiY29tcG9uZW50TmFtZSIsImlzVmlzaWJsZSIsIk5vZGUiLCJmaW5kU2hhZG93Um9vdCIsInJlZmxvdyIsImdldGpRdWVyeSIsIkRPTUNvbnRlbnRMb2FkZWRDYWxsYmFja3MiLCJvbkRPTUNvbnRlbnRMb2FkZWQiLCJpc1JUTCIsImRlZmluZUpRdWVyeVBsdWdpbiIsInBsdWdpbiIsIkpRVUVSWV9OT19DT05GTElDVCIsImV4ZWN1dGUiLCJleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uIiwid2FpdEZvclRyYW5zaXRpb24iLCJkdXJhdGlvblBhZGRpbmciLCJlbXVsYXRlZER1cmF0aW9uIiwiY2FsbGVkIiwidHJhbnNpdGlvbkVsZW1lbnQiLCJnZXROZXh0QWN0aXZlRWxlbWVudCIsImxpc3RMZW5ndGgiLCJzaG91bGRHZXROZXh0IiwibmFtZXNwYWNlUmVnZXgiLCJzdHJpcE5hbWVSZWdleCIsInN0cmlwVWlkUmVnZXgiLCJldmVudFJlZ2lzdHJ5IiwidWlkRXZlbnQiLCJjdXN0b21FdmVudHMiLCJjdXN0b21FdmVudHNSZWdleCIsIm5hdGl2ZUV2ZW50cyIsImdldFVpZEV2ZW50IiwiRXZlbnRIYW5kbGVyIiwiZG9tRWxlbWVudHMiLCJkZWxlZ2F0aW9uU2VsZWN0b3IiLCJ1aWRFdmVudExpc3QiLCJkZWxlZ2F0aW9uIiwib3JpZ2luYWxIYW5kbGVyIiwidHlwZUV2ZW50IiwiZ2V0VHlwZUV2ZW50IiwiaXNOYXRpdmUiLCJkZWxlZ2F0aW9uRm4iLCJ3cmFwRm4iLCJub3JtYWxpemVQYXJhbXMiLCJnZXRFdmVudCIsInByZXZpb3VzRm4iLCJmaW5kSGFuZGxlciIsIm9yaWdpbmFsVHlwZUV2ZW50IiwiYm9vdHN0cmFwRGVsZWdhdGlvbkhhbmRsZXIiLCJib290c3RyYXBIYW5kbGVyIiwiQm9vbGVhbiIsInN0b3JlRWxlbWVudEV2ZW50IiwiaGFuZGxlcktleSIsInJlbW92ZUhhbmRsZXIiLCJhZGRIYW5kbGVyIiwiaW5OYW1lc3BhY2UiLCJpc05hbWVzcGFjZSIsImVsZW1lbnRFdmVudCIsInJlbW92ZU5hbWVzcGFjZWRIYW5kbGVycyIsImtleUhhbmRsZXJzIiwibmF0aXZlRGlzcGF0Y2giLCJqUXVlcnlFdmVudCIsImVsZW1lbnRNYXAiLCJpbnN0YW5jZU1hcCIsIlZFUlNJT04iLCJkaXNwb3NlIiwicHJvcGVydHlOYW1lIiwiX3F1ZXVlQ2FsbGJhY2siLCJpc0FuaW1hdGVkIiwiZ2V0SW5zdGFuY2UiLCJnZXRPckNyZWF0ZUluc3RhbmNlIiwiTkFNRSIsIkRBVEFfS0VZIiwiRVZFTlRfS0VZIiwiZW5hYmxlRGlzbWlzc1RyaWdnZXIiLCJjbGlja0V2ZW50IiwiY29tcG9uZW50IiwiaW5zdGFuY2UiLCJFVkVOVF9DTE9TRSIsIkVWRU5UX0NMT1NFRCIsIkNMQVNTX05BTUVfRkFERSIsIkNMQVNTX05BTUVfU0hPVyIsImNsb3NlIiwiY2xvc2VFdmVudCIsIl9kZXN0cm95RWxlbWVudCIsImpRdWVyeUludGVyZmFjZSIsIkFsZXJ0IiwiREFUQV9BUElfS0VZIiwiQ0xBU1NfTkFNRV9BQ1RJVkUiLCJTRUxFQ1RPUl9EQVRBX1RPR0dMRSIsIkVWRU5UX0NMSUNLX0RBVEFfQVBJIiwiQnV0dG9uIiwiY2hyIiwiTWFuaXB1bGF0b3IiLCJzZXREYXRhQXR0cmlidXRlIiwibm9ybWFsaXplRGF0YUtleSIsInJlbW92ZURhdGFBdHRyaWJ1dGUiLCJnZXREYXRhQXR0cmlidXRlcyIsInB1cmVLZXkiLCJub3JtYWxpemVEYXRhIiwiZ2V0RGF0YUF0dHJpYnV0ZSIsIm9mZnNldExlZnQiLCJOT0RFX1RFWFQiLCJTZWxlY3RvckVuZ2luZSIsIkVsZW1lbnQiLCJmaW5kT25lIiwiY2hpbGQiLCJhbmNlc3RvciIsInByZXZpb3VzIiwiZm9jdXNhYmxlQ2hpbGRyZW4iLCJmb2N1c2FibGVzIiwiQVJST1dfTEVGVF9LRVkiLCJBUlJPV19SSUdIVF9LRVkiLCJUT1VDSEVWRU5UX0NPTVBBVF9XQUlUIiwiU1dJUEVfVEhSRVNIT0xEIiwiRGVmYXVsdCIsImtleWJvYXJkIiwic2xpZGUiLCJwYXVzZSIsInRvdWNoIiwiRGVmYXVsdFR5cGUiLCJPUkRFUl9ORVhUIiwiT1JERVJfUFJFViIsIkRJUkVDVElPTl9MRUZUIiwiRElSRUNUSU9OX1JJR0hUIiwiS0VZX1RPX0RJUkVDVElPTiIsIkVWRU5UX1NMSURFIiwiRVZFTlRfU0xJRCIsIkVWRU5UX0tFWURPV04iLCJFVkVOVF9NT1VTRUVOVEVSIiwiRVZFTlRfTU9VU0VMRUFWRSIsIkVWRU5UX1RPVUNIU1RBUlQiLCJFVkVOVF9UT1VDSE1PVkUiLCJFVkVOVF9UT1VDSEVORCIsIkVWRU5UX1BPSU5URVJET1dOIiwiRVZFTlRfUE9JTlRFUlVQIiwiRVZFTlRfRFJBR19TVEFSVCIsIkVWRU5UX0xPQURfREFUQV9BUEkiLCJDTEFTU19OQU1FX0NBUk9VU0VMIiwiQ0xBU1NfTkFNRV9TTElERSIsIkNMQVNTX05BTUVfRU5EIiwiQ0xBU1NfTkFNRV9TVEFSVCIsIkNMQVNTX05BTUVfTkVYVCIsIkNMQVNTX05BTUVfUFJFViIsIkNMQVNTX05BTUVfUE9JTlRFUl9FVkVOVCIsIlNFTEVDVE9SX0FDVElWRSIsIlNFTEVDVE9SX0FDVElWRV9JVEVNIiwiU0VMRUNUT1JfSVRFTSIsIlNFTEVDVE9SX0lURU1fSU1HIiwiU0VMRUNUT1JfTkVYVF9QUkVWIiwiU0VMRUNUT1JfSU5ESUNBVE9SUyIsIlNFTEVDVE9SX0lORElDQVRPUiIsIlNFTEVDVE9SX0RBVEFfU0xJREUiLCJTRUxFQ1RPUl9EQVRBX1JJREUiLCJQT0lOVEVSX1RZUEVfVE9VQ0giLCJQT0lOVEVSX1RZUEVfUEVOIiwibmF2aWdhdG9yIiwibmV4dFdoZW5WaXNpYmxlIiwiY2xlYXJJbnRlcnZhbCIsImN5Y2xlIiwic2V0SW50ZXJ2YWwiLCJhY3RpdmVJbmRleCIsIm9yZGVyIiwiX2dldENvbmZpZyIsIl9oYW5kbGVTd2lwZSIsImFic0RlbHRheCIsImRpcmVjdGlvbiIsIl9hZGRFdmVudExpc3RlbmVycyIsIl9hZGRUb3VjaEV2ZW50TGlzdGVuZXJzIiwibW92ZSIsIml0ZW1JbWciLCJfa2V5ZG93biIsIl9nZXRJdGVtSW5kZXgiLCJfZ2V0SXRlbUJ5T3JkZXIiLCJpc05leHQiLCJfdHJpZ2dlclNsaWRlRXZlbnQiLCJ0YXJnZXRJbmRleCIsImZyb21JbmRleCIsImZyb20iLCJfc2V0QWN0aXZlSW5kaWNhdG9yRWxlbWVudCIsImFjdGl2ZUluZGljYXRvciIsImluZGljYXRvcnMiLCJfdXBkYXRlSW50ZXJ2YWwiLCJlbGVtZW50SW50ZXJ2YWwiLCJfc2xpZGUiLCJhY3RpdmVFbGVtZW50SW5kZXgiLCJuZXh0RWxlbWVudCIsIm5leHRFbGVtZW50SW5kZXgiLCJpc0N5Y2xpbmciLCJkaXJlY3Rpb25hbENsYXNzTmFtZSIsIm9yZGVyQ2xhc3NOYW1lIiwiZXZlbnREaXJlY3Rpb25OYW1lIiwic2xpZGVFdmVudCIsInRyaWdnZXJTbGlkRXZlbnQiLCJjb21wbGV0ZUNhbGxCYWNrIiwiX2RpcmVjdGlvblRvT3JkZXIiLCJfb3JkZXJUb0RpcmVjdGlvbiIsImNhcm91c2VsSW50ZXJmYWNlIiwiQ2Fyb3VzZWwiLCJfY29uZmlnIiwiYWN0aW9uIiwiZGF0YUFwaUNsaWNrSGFuZGxlciIsInNsaWRlSW5kZXgiLCJjYXJvdXNlbHMiLCJFVkVOVF9TSE9XIiwiRVZFTlRfU0hPV04iLCJFVkVOVF9ISURFIiwiRVZFTlRfSElEREVOIiwiQ0xBU1NfTkFNRV9DT0xMQVBTRSIsIkNMQVNTX05BTUVfQ09MTEFQU0lORyIsIkNMQVNTX05BTUVfQ09MTEFQU0VEIiwiQ0xBU1NfTkFNRV9IT1JJWk9OVEFMIiwiV0lEVEgiLCJIRUlHSFQiLCJTRUxFQ1RPUl9BQ1RJVkVTIiwidG9nZ2xlTGlzdCIsImZpbHRlckVsZW1lbnQiLCJmb3VuZEVsZW0iLCJhY3RpdmVzIiwidGVtcEFjdGl2ZURhdGEiLCJhY3RpdmVzRGF0YSIsIkNvbGxhcHNlIiwic3RhcnRFdmVudCIsImVsZW1BY3RpdmUiLCJjYXBpdGFsaXplZERpbWVuc2lvbiIsInNjcm9sbFNpemUiLCJ0cmlnZ2VyQXJyYXlMZW5ndGgiLCJfaXNTaG93biIsIl9nZXREaW1lbnNpb24iLCJfaW5pdGlhbGl6ZUNoaWxkcmVuIiwiX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyIsInRyaWdnZXJBcnJheSIsInNlbGVjdG9yRWxlbWVudHMiLCJlZmZlY3QiLCJtaW4iLCJtYXRoTWF4IiwibWF0aE1pbiIsImFsbFBsYWNlbWVudHMiLCJwbGFjZW1lbnRzIiwiY3JlYXRlUG9wcGVyIiwiZGVmYXVsdE1vZGlmaWVycyIsInBvcHBlck9mZnNldHMiLCJjb21wdXRlU3R5bGVzIiwiYXBwbHlTdHlsZXMiLCJmbGlwIiwicHJldmVudE92ZXJmbG93IiwiYXJyb3ciLCJFU0NBUEVfS0VZIiwiU1BBQ0VfS0VZIiwiVEFCX0tFWSIsIkFSUk9XX1VQX0tFWSIsIkFSUk9XX0RPV05fS0VZIiwiUklHSFRfTU9VU0VfQlVUVE9OIiwiUkVHRVhQX0tFWURPV04iLCJFVkVOVF9LRVlET1dOX0RBVEFfQVBJIiwiRVZFTlRfS0VZVVBfREFUQV9BUEkiLCJDTEFTU19OQU1FX0RST1BVUCIsIkNMQVNTX05BTUVfRFJPUEVORCIsIkNMQVNTX05BTUVfRFJPUFNUQVJUIiwiQ0xBU1NfTkFNRV9OQVZCQVIiLCJTRUxFQ1RPUl9NRU5VIiwiU0VMRUNUT1JfTkFWQkFSX05BViIsIlNFTEVDVE9SX1ZJU0lCTEVfSVRFTVMiLCJQTEFDRU1FTlRfVE9QIiwiUExBQ0VNRU5UX1RPUEVORCIsIlBMQUNFTUVOVF9CT1RUT00iLCJQTEFDRU1FTlRfQk9UVE9NRU5EIiwiUExBQ0VNRU5UX1JJR0hUIiwiUExBQ0VNRU5UX0xFRlQiLCJib3VuZGFyeSIsInJlZmVyZW5jZSIsInBvcHBlckNvbmZpZyIsImF1dG9DbG9zZSIsIl9lbGVtZW50Iiwic2hvd0V2ZW50IiwiRHJvcGRvd24iLCJ1cGRhdGUiLCJfY29tcGxldGVIaWRlIiwiaGlkZUV2ZW50IiwiX2NyZWF0ZVBvcHBlciIsInJlZmVyZW5jZUVsZW1lbnQiLCJpc0Rpc3BsYXlTdGF0aWMiLCJtb2RpZmllciIsIlBvcHBlciIsIl9nZXRNZW51RWxlbWVudCIsIl9nZXRQbGFjZW1lbnQiLCJwYXJlbnREcm9wZG93biIsImlzRW5kIiwiX2RldGVjdE5hdmJhciIsIl9nZXRPZmZzZXQiLCJwb3BwZXJEYXRhIiwiX2dldFBvcHBlckNvbmZpZyIsImRlZmF1bHRCc1BvcHBlckNvbmZpZyIsInBsYWNlbWVudCIsIm1vZGlmaWVycyIsImVuYWJsZWQiLCJfc2VsZWN0TWVudUl0ZW0iLCJpdGVtcyIsImNsZWFyTWVudXMiLCJ0b2dnbGVzIiwiY29tcG9zZWRQYXRoIiwiaXNNZW51VGFyZ2V0IiwiZ2V0UGFyZW50RnJvbUVsZW1lbnQiLCJkYXRhQXBpS2V5ZG93bkhhbmRsZXIiLCJpc0FjdGl2ZSIsImdldFRvZ2dsZUJ1dHRvbiIsIlNFTEVDVE9SX0ZJWEVEX0NPTlRFTlQiLCJTRUxFQ1RPUl9TVElDS1lfQ09OVEVOVCIsImdldFdpZHRoIiwiZG9jdW1lbnRXaWR0aCIsImNhbGN1bGF0ZWRWYWx1ZSIsIl9kaXNhYmxlT3ZlckZsb3ciLCJfc2V0RWxlbWVudEF0dHJpYnV0ZXMiLCJzY3JvbGxiYXJXaWR0aCIsIm1hbmlwdWxhdGlvbkNhbGxCYWNrIiwiX3NhdmVJbml0aWFsQXR0cmlidXRlIiwiYWN0dWFsVmFsdWUiLCJfcmVzZXRFbGVtZW50QXR0cmlidXRlcyIsIl9hcHBseU1hbmlwdWxhdGlvbkNhbGxiYWNrIiwiY2FsbEJhY2siLCJpc092ZXJmbG93aW5nIiwicm9vdEVsZW1lbnQiLCJjbGlja0NhbGxiYWNrIiwiRVZFTlRfTU9VU0VET1dOIiwiX2dldEVsZW1lbnQiLCJiYWNrZHJvcCIsIl9hcHBlbmQiLCJfZW11bGF0ZUFuaW1hdGlvbiIsInRyYXBFbGVtZW50IiwiYXV0b2ZvY3VzIiwiRVZFTlRfRk9DVVNJTiIsIkVWRU5UX0tFWURPV05fVEFCIiwiVEFCX05BVl9GT1JXQVJEIiwiVEFCX05BVl9CQUNLV0FSRCIsImFjdGl2YXRlIiwiZGVhY3RpdmF0ZSIsIl9oYW5kbGVGb2N1c2luIiwiX2hhbmRsZUtleWRvd24iLCJFVkVOVF9ISURFX1BSRVZFTlRFRCIsIkVWRU5UX1JFU0laRSIsIkVWRU5UX0NMSUNLX0RJU01JU1MiLCJFVkVOVF9LRVlET1dOX0RJU01JU1MiLCJFVkVOVF9NT1VTRVVQX0RJU01JU1MiLCJFVkVOVF9NT1VTRURPV05fRElTTUlTUyIsIkNMQVNTX05BTUVfT1BFTiIsIkNMQVNTX05BTUVfU1RBVElDIiwiU0VMRUNUT1JfRElBTE9HIiwiU0VMRUNUT1JfTU9EQUxfQk9EWSIsImh0bWxFbGVtZW50IiwiaGFuZGxlVXBkYXRlIiwiX2luaXRpYWxpemVCYWNrRHJvcCIsIl9pbml0aWFsaXplRm9jdXNUcmFwIiwiX3Nob3dFbGVtZW50IiwibW9kYWxCb2R5IiwidHJhbnNpdGlvbkNvbXBsZXRlIiwiX3NldEVzY2FwZUV2ZW50IiwiX3NldFJlc2l6ZUV2ZW50IiwiX2hpZGVNb2RhbCIsIl9zaG93QmFja2Ryb3AiLCJfaXNBbmltYXRlZCIsIl90cmlnZ2VyQmFja2Ryb3BUcmFuc2l0aW9uIiwiaXNNb2RhbE92ZXJmbG93aW5nIiwic2Nyb2xsSGVpZ2h0IiwiY2xhc3NMaXN0IiwiX2FkanVzdERpYWxvZyIsImlzQm9keU92ZXJmbG93aW5nIiwiX3Jlc2V0QWRqdXN0bWVudHMiLCJNb2RhbCIsInNjcm9sbCIsIkNMQVNTX05BTUVfQkFDS0RST1AiLCJPUEVOX1NFTEVDVE9SIiwiY29tcGxldGVDYWxsYmFjayIsIk9mZmNhbnZhcyIsImFsbFJlYWR5T3BlbiIsInVyaUF0dHJzIiwiQVJJQV9BVFRSSUJVVEVfUEFUVEVSTiIsIlNBRkVfVVJMX1BBVFRFUk4iLCJEQVRBX1VSTF9QQVRURVJOIiwiYWxsb3dlZEF0dHJpYnV0ZSIsImF0dHJOYW1lIiwiYWxsb3dlZEF0dHJpYnV0ZUxpc3QiLCJyZWdFeHAiLCJhdHRyUmVnZXgiLCJEZWZhdWx0QWxsb3dsaXN0IiwiYXJlYSIsImJyIiwiZW0iLCJociIsImgxIiwiaDIiLCJoMyIsImg0IiwiaDUiLCJoNiIsImltZyIsImxpIiwib2wiLCJwcmUiLCJzbWFsbCIsInNwYW4iLCJzdWIiLCJzdXAiLCJzdHJvbmciLCJ1IiwidWwiLCJ1bnNhZmVIdG1sIiwic2FuaXRpemVGbiIsImRvbVBhcnNlciIsImNyZWF0ZWREb2N1bWVudCIsImFsbG93bGlzdEtleXMiLCJlbE5hbWUiLCJhdHRyaWJ1dGVMaXN0IiwiYWxsb3dlZEF0dHJpYnV0ZXMiLCJhbGxvd0xpc3QiLCJDTEFTU19QUkVGSVgiLCJESVNBTExPV0VEX0FUVFJJQlVURVMiLCJ0ZW1wbGF0ZSIsInRpdGxlIiwiZmFsbGJhY2tQbGFjZW1lbnRzIiwiY3VzdG9tQ2xhc3MiLCJzYW5pdGl6ZSIsIkF0dGFjaG1lbnRNYXAiLCJBVVRPIiwiVE9QIiwiUklHSFQiLCJCT1RUT00iLCJMRUZUIiwiSElERSIsIkhJRERFTiIsIlNIT1ciLCJTSE9XTiIsIklOU0VSVEVEIiwiQ0xJQ0siLCJGT0NVU0lOIiwiRk9DVVNPVVQiLCJNT1VTRUVOVEVSIiwiTU9VU0VMRUFWRSIsIkNMQVNTX05BTUVfTU9EQUwiLCJIT1ZFUl9TVEFURV9TSE9XIiwiSE9WRVJfU1RBVEVfT1VUIiwiU0VMRUNUT1JfVE9PTFRJUF9JTk5FUiIsIlNFTEVDVE9SX01PREFMIiwiRVZFTlRfTU9EQUxfSElERSIsIlRSSUdHRVJfSE9WRVIiLCJUUklHR0VSX0ZPQ1VTIiwiVFJJR0dFUl9DTElDSyIsIlRSSUdHRVJfTUFOVUFMIiwiZW5hYmxlIiwidG9nZ2xlRW5hYmxlZCIsInNoYWRvd1Jvb3QiLCJpc0luVGhlRG9tIiwidGlwIiwidGlwSWQiLCJhdHRhY2htZW50IiwicHJldkhvdmVyU3RhdGUiLCJpc1dpdGhDb250ZW50IiwiZ2V0VGlwRWxlbWVudCIsInNldENvbnRlbnQiLCJfc2FuaXRpemVBbmRTZXRDb250ZW50IiwidGVtcGxhdGVFbGVtZW50Iiwic2V0RWxlbWVudENvbnRlbnQiLCJzYW5pdGl6ZUh0bWwiLCJnZXRUaXRsZSIsInVwZGF0ZUF0dGFjaG1lbnQiLCJfaW5pdGlhbGl6ZU9uRGVsZWdhdGVkVGFyZ2V0IiwiX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uIiwicGhhc2UiLCJvbkZpcnN0VXBkYXRlIiwiX2FkZEF0dGFjaG1lbnRDbGFzcyIsIl9nZXRBdHRhY2htZW50IiwiX3NldExpc3RlbmVycyIsInRyaWdnZXJzIiwiZXZlbnRJbiIsImV2ZW50T3V0IiwiX2ZpeFRpdGxlIiwib3JpZ2luYWxUaXRsZVR5cGUiLCJfZW50ZXIiLCJfbGVhdmUiLCJfaXNXaXRoQWN0aXZlVHJpZ2dlciIsImRhdGFBdHRyaWJ1dGVzIiwiX2dldERlbGVnYXRlQ29uZmlnIiwiX2NsZWFuVGlwQ2xhc3MiLCJiYXNpY0NsYXNzUHJlZml4UmVnZXgiLCJ0YWJDbGFzcyIsInRDbGFzcyIsIl9nZXRCYXNpY0NsYXNzUHJlZml4IiwiX2hhbmRsZVBvcHBlclBsYWNlbWVudENoYW5nZSIsIlRvb2x0aXAiLCJTRUxFQ1RPUl9USVRMRSIsIlNFTEVDVE9SX0NPTlRFTlQiLCJfZ2V0Q29udGVudCIsIlBvcG92ZXIiLCJFVkVOVF9BQ1RJVkFURSIsIkVWRU5UX1NDUk9MTCIsIkNMQVNTX05BTUVfRFJPUERPV05fSVRFTSIsIlNFTEVDVE9SX0RBVEFfU1BZIiwiU0VMRUNUT1JfTkFWX0xJU1RfR1JPVVAiLCJTRUxFQ1RPUl9OQVZfTElOS1MiLCJTRUxFQ1RPUl9OQVZfSVRFTVMiLCJTRUxFQ1RPUl9MSVNUX0lURU1TIiwiU0VMRUNUT1JfTElOS19JVEVNUyIsIlNFTEVDVE9SX0RST1BET1dOIiwiU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFIiwiTUVUSE9EX09GRlNFVCIsIk1FVEhPRF9QT1NJVElPTiIsInJlZnJlc2giLCJhdXRvTWV0aG9kIiwib2Zmc2V0TWV0aG9kIiwib2Zmc2V0QmFzZSIsInRhcmdldFNlbGVjdG9yIiwidGFyZ2V0QkNSIiwiX2dldFNjcm9sbFRvcCIsIl9nZXRTY3JvbGxIZWlnaHQiLCJfZ2V0T2Zmc2V0SGVpZ2h0IiwiX3Byb2Nlc3MiLCJtYXhTY3JvbGwiLCJpc0FjdGl2ZVRhcmdldCIsIl9hY3RpdmF0ZSIsInF1ZXJpZXMiLCJsaW5rIiwibGlzdEdyb3VwIiwibmF2SXRlbSIsIl9jbGVhciIsIlNjcm9sbFNweSIsInNweSIsIkNMQVNTX05BTUVfRFJPUERPV05fTUVOVSIsIlNFTEVDVE9SX0FDVElWRV9VTCIsIlNFTEVDVE9SX0RST1BET1dOX0FDVElWRV9DSElMRCIsImxpc3RFbGVtZW50IiwiaXRlbVNlbGVjdG9yIiwiYWN0aXZlRWxlbWVudHMiLCJpc1RyYW5zaXRpb25pbmciLCJfdHJhbnNpdGlvbkNvbXBsZXRlIiwiZHJvcGRvd25DaGlsZCIsImRyb3Bkb3duRWxlbWVudCIsImRyb3Bkb3duIiwiVGFiIiwiRVZFTlRfTU9VU0VPVkVSIiwiRVZFTlRfTU9VU0VPVVQiLCJFVkVOVF9GT0NVU09VVCIsIkNMQVNTX05BTUVfSElERSIsIkNMQVNTX05BTUVfU0hPV0lORyIsImF1dG9oaWRlIiwiX21heWJlU2NoZWR1bGVIaWRlIiwiX29uSW50ZXJhY3Rpb24iLCJfY2xlYXJUaW1lb3V0IiwiVG9hc3QiLCJ0b2dnbGVDb25uZWN0aW9uU3RyaW5nQW5kUHJlZml4IiwiY2hhbmdlIiwicmVmcmVzaERlc2NyaXB0aW9uIiwicmVjaXBlTmFtZSIsInJlY2lwZURpc3BsYXlOYW1lIiwicmVjaXBlRGVzY3JpcHRpb24iLCJzZXRMb2NhbGl6YXRpb25VcmwiLCJjdWx0dXJlc0xpc3QiLCJkYXRhc2V0IiwidG9nZ2xlUGFzc3dvcmRWaXNpYmlsaXR5IiwicGFzc3dvcmRDdGwiLCJ0b2dnbGVQYXNzd29yZEN0bCIsImljb24iLCJzdHJlbmd0aCIsIm1pbkxlbmd0aCIsInVwcGVyQ2FzZSIsImxvd2VyQ2FzZSIsIm51bWJlcnMiLCJzcGVjaWFsY2hhcnMiLCJjYXBpdGFsbGV0dGVycyIsImxvd2VybGV0dGVycyIsIm51bWJlciIsInNwZWNpYWxjaGFyIiwidmFsaWQiLCJjcmVhdGVQcm9ncmVzc0JhciIsImdldFBlcmNlbnRhZ2UiLCJ0b0ZpeGVkIiwiZ2V0TGV2ZWwiLCJjaGVja1N0cmVuZ3RoIiwidG90YWwiLCJwZXJjZW50YWdlIiwibGV2ZWwiLCJkYXRhVHJhbnNmZXIiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUUsVUFBVUEsTUFBVixFQUFrQkMsT0FBbEIsRUFBNEI7QUFFN0I7O0FBRUEsTUFBSyxRQUFPQyxNQUFQLHlDQUFPQSxNQUFQLE9BQWtCLFFBQWxCLElBQThCLFFBQU9BLE1BQU0sQ0FBQ0MsT0FBZCxNQUEwQixRQUE3RCxFQUF3RTtBQUV2RTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBRCxJQUFBQSxNQUFNLENBQUNDLE9BQVAsR0FBaUJILE1BQU0sQ0FBQ0ksUUFBUCxHQUNoQkgsT0FBTyxDQUFFRCxNQUFGLEVBQVUsSUFBVixDQURTLEdBRWhCLFVBQVVLLENBQVYsRUFBYztBQUNiLFVBQUssQ0FBQ0EsQ0FB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QUFhLENBQUNub0MsS0FBSyxDQUFDMEMsYUFBTixDQUFvQjZsQyxZQUFwQixDQUFpQ2p1QyxPQUFqQyxDQUF5QyxNQUF6QyxDQUFELENBQWI7QUFDSCxLQUZEO0FBSUEsU0FBS3ZILE9BQUwsQ0FBYSxNQUFiLEVBQXFCNk0sRUFBckIsQ0FBd0IsUUFBeEIsRUFBa0MsWUFBWTtBQUMxQyxVQUFJLENBQUNrb0MsS0FBTCxFQUFZO0FBQ1I5bkMsUUFBQUEsS0FBSyxDQUFDZ0MsY0FBTjtBQUNIO0FBQ0osS0FKRDtBQUtILEdBbkZEO0FBb0ZILENBdEZBLEVBc0ZDM21CLE1BdEZELENBQUQiLCJmaWxlIjoic2V0dXAuanMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIGpRdWVyeSBKYXZhU2NyaXB0IExpYnJhcnkgdjMuNi4wXG4gKiBodHRwczovL2pxdWVyeS5jb20vXG4gKlxuICogSW5jbHVkZXMgU2l6emxlLmpzXG4gKiBodHRwczovL3NpenpsZWpzLmNvbS9cbiAqXG4gKiBDb3B5cmlnaHQgT3BlbkpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKiBodHRwczovL2pxdWVyeS5vcmcvbGljZW5zZVxuICpcbiAqIERhdGU6IDIwMjEtMDMtMDJUMTc6MDhaXG4gKi9cbiggZnVuY3Rpb24oIGdsb2JhbCwgZmFjdG9yeSApIHtcblxuXHRcInVzZSBzdHJpY3RcIjtcblxuXHRpZiAoIHR5cGVvZiBtb2R1bGUgPT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIG1vZHVsZS5leHBvcnRzID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gRm9yIENvbW1vbkpTIGFuZCBDb21tb25KUy1saWtlIGVudmlyb25tZW50cyB3aGVyZSBhIHByb3BlciBgd2luZG93YFxuXHRcdC8vIGlzIHByZXNlbnQsIGV4ZWN1dGUgdGhlIGZhY3RvcnkgYW5kIGdldCBqUXVlcnkuXG5cdFx0Ly8gRm9yIGVudmlyb25tZW50cyB0aGF0IGRvIG5vdCBoYXZlIGEgYHdpbmRvd2Agd2l0aCBhIGBkb2N1bWVudGBcblx0XHQvLyAoc3VjaCBhcyBOb2RlLmpzKSwgZXhwb3NlIGEgZmFjdG9yeSBhcyBtb2R1bGUuZXhwb3J0cy5cblx0XHQvLyBUaGlzIGFjY2VudHVhdGVzIHRoZSBuZWVkIGZvciB0aGUgY3JlYXRpb24gb2YgYSByZWFsIGB3aW5kb3dgLlxuXHRcdC8vIGUuZy4gdmFyIGpRdWVyeSA9IHJlcXVpcmUoXCJqcXVlcnlcIikod2luZG93KTtcblx0XHQvLyBTZWUgdGlja2V0ICMxNDU0OSBmb3IgbW9yZSBpbmZvLlxuXHRcdG1vZHVsZS5leHBvcnRzID0gZ2xvYmFsLmRvY3VtZW50ID9cblx0XHRcdGZhY3RvcnkoIGdsb2JhbCwgdHJ1ZSApIDpcblx0XHRcdGZ1bmN0aW9uKCB3ICkge1xuXHRcdFx0XHRpZiAoICF3LmRvY3VtZW50ICkge1xuXHRcdFx0XHRcdHRocm93IG5ldyBFcnJvciggXCJqUXVlcnkgcmVxdWlyZXMgYSB3aW5kb3cgd2l0aCBhIGRvY3VtZW50XCIgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gZmFjdG9yeSggdyApO1xuXHRcdFx0fTtcblx0fSBlbHNlIHtcblx0XHRmYWN0b3J5KCBnbG9iYWwgKTtcblx0fVxuXG4vLyBQYXNzIHRoaXMgaWYgd2luZG93IGlzIG5vdCBkZWZpbmVkIHlldFxufSApKCB0eXBlb2Ygd2luZG93ICE9PSBcInVuZGVmaW5lZFwiID8gd2luZG93IDogdGhpcywgZnVuY3Rpb24oIHdpbmRvdywgbm9HbG9iYWwgKSB7XG5cbi8vIEVkZ2UgPD0gMTIgLSAxMyssIEZpcmVmb3ggPD0xOCAtIDQ1KywgSUUgMTAgLSAxMSwgU2FmYXJpIDUuMSAtIDkrLCBpT1MgNiAtIDkuMVxuLy8gdGhyb3cgZXhjZXB0aW9ucyB3aGVuIG5vbi1zdHJpY3QgY29kZSAoZS5nLiwgQVNQLk5FVCA0LjUpIGFjY2Vzc2VzIHN0cmljdCBtb2RlXG4vLyBhcmd1bWVudHMuY2FsbGVlLmNhbGxlciAodHJhYy0xMzMzNSkuIEJ1dCBhcyBvZiBqUXVlcnkgMy4wICgyMDE2KSwgc3RyaWN0IG1vZGUgc2hvdWxkIGJlIGNvbW1vblxuLy8gZW5vdWdoIHRoYXQgYWxsIHN1Y2ggYXR0ZW1wdHMgYXJlIGd1YXJkZWQgaW4gYSB0cnkgYmxvY2suXG5cInVzZSBzdHJpY3RcIjtcblxudmFyIGFyciA9IFtdO1xuXG52YXIgZ2V0UHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2Y7XG5cbnZhciBzbGljZSA9IGFyci5zbGljZTtcblxudmFyIGZsYXQgPSBhcnIuZmxhdCA/IGZ1bmN0aW9uKCBhcnJheSApIHtcblx0cmV0dXJuIGFyci5mbGF0LmNhbGwoIGFycmF5ICk7XG59IDogZnVuY3Rpb24oIGFycmF5ICkge1xuXHRyZXR1cm4gYXJyLmNvbmNhdC5hcHBseSggW10sIGFycmF5ICk7XG59O1xuXG5cbnZhciBwdXNoID0gYXJyLnB1c2g7XG5cbnZhciBpbmRleE9mID0gYXJyLmluZGV4T2Y7XG5cbnZhciBjbGFzczJ0eXBlID0ge307XG5cbnZhciB0b1N0cmluZyA9IGNsYXNzMnR5cGUudG9TdHJpbmc7XG5cbnZhciBoYXNPd24gPSBjbGFzczJ0eXBlLmhhc093blByb3BlcnR5O1xuXG52YXIgZm5Ub1N0cmluZyA9IGhhc093bi50b1N0cmluZztcblxudmFyIE9iamVjdEZ1bmN0aW9uU3RyaW5nID0gZm5Ub1N0cmluZy5jYWxsKCBPYmplY3QgKTtcblxudmFyIHN1cHBvcnQgPSB7fTtcblxudmFyIGlzRnVuY3Rpb24gPSBmdW5jdGlvbiBpc0Z1bmN0aW9uKCBvYmogKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD01NywgRmlyZWZveCA8PTUyXG5cdFx0Ly8gSW4gc29tZSBicm93c2VycywgdHlwZW9mIHJldHVybnMgXCJmdW5jdGlvblwiIGZvciBIVE1MIDxvYmplY3Q+IGVsZW1lbnRzXG5cdFx0Ly8gKGkuZS4sIGB0eXBlb2YgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJvYmplY3RcIiApID09PSBcImZ1bmN0aW9uXCJgKS5cblx0XHQvLyBXZSBkb24ndCB3YW50IHRvIGNsYXNzaWZ5ICphbnkqIERPTSBub2RlIGFzIGEgZnVuY3Rpb24uXG5cdFx0Ly8gU3VwcG9ydDogUXRXZWIgPD0zLjguNSwgV2ViS2l0IDw9NTM0LjM0LCB3a2h0bWx0b3BkZiB0b29sIDw9MC4xMi41XG5cdFx0Ly8gUGx1cyBmb3Igb2xkIFdlYktpdCwgdHlwZW9mIHJldHVybnMgXCJmdW5jdGlvblwiIGZvciBIVE1MIGNvbGxlY3Rpb25zXG5cdFx0Ly8gKGUuZy4sIGB0eXBlb2YgZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJkaXZcIikgPT09IFwiZnVuY3Rpb25cImApLiAoZ2gtNDc1Nilcblx0XHRyZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJmdW5jdGlvblwiICYmIHR5cGVvZiBvYmoubm9kZVR5cGUgIT09IFwibnVtYmVyXCIgJiZcblx0XHRcdHR5cGVvZiBvYmouaXRlbSAhPT0gXCJmdW5jdGlvblwiO1xuXHR9O1xuXG5cbnZhciBpc1dpbmRvdyA9IGZ1bmN0aW9uIGlzV2luZG93KCBvYmogKSB7XG5cdFx0cmV0dXJuIG9iaiAhPSBudWxsICYmIG9iaiA9PT0gb2JqLndpbmRvdztcblx0fTtcblxuXG52YXIgZG9jdW1lbnQgPSB3aW5kb3cuZG9jdW1lbnQ7XG5cblxuXG5cdHZhciBwcmVzZXJ2ZWRTY3JpcHRBdHRyaWJ1dGVzID0ge1xuXHRcdHR5cGU6IHRydWUsXG5cdFx0c3JjOiB0cnVlLFxuXHRcdG5vbmNlOiB0cnVlLFxuXHRcdG5vTW9kdWxlOiB0cnVlXG5cdH07XG5cblx0ZnVuY3Rpb24gRE9NRXZhbCggY29kZSwgbm9kZSwgZG9jICkge1xuXHRcdGRvYyA9IGRvYyB8fCBkb2N1bWVudDtcblxuXHRcdHZhciBpLCB2YWwsXG5cdFx0XHRzY3JpcHQgPSBkb2MuY3JlYXRlRWxlbWVudCggXCJzY3JpcHRcIiApO1xuXG5cdFx0c2NyaXB0LnRleHQgPSBjb2RlO1xuXHRcdGlmICggbm9kZSApIHtcblx0XHRcdGZvciAoIGkgaW4gcHJlc2VydmVkU2NyaXB0QXR0cmlidXRlcyApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDY0KywgRWRnZSAxOCtcblx0XHRcdFx0Ly8gU29tZSBicm93c2VycyBkb24ndCBzdXBwb3J0IHRoZSBcIm5vbmNlXCIgcHJvcGVydHkgb24gc2NyaXB0cy5cblx0XHRcdFx0Ly8gT24gdGhlIG90aGVyIGhhbmQsIGp1c3QgdXNpbmcgYGdldEF0dHJpYnV0ZWAgaXMgbm90IGVub3VnaCBhc1xuXHRcdFx0XHQvLyB0aGUgYG5vbmNlYCBhdHRyaWJ1dGUgaXMgcmVzZXQgdG8gYW4gZW1wdHkgc3RyaW5nIHdoZW5ldmVyIGl0XG5cdFx0XHRcdC8vIGJlY29tZXMgYnJvd3NpbmctY29udGV4dCBjb25uZWN0ZWQuXG5cdFx0XHRcdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vd2hhdHdnL2h0bWwvaXNzdWVzLzIzNjlcblx0XHRcdFx0Ly8gU2VlIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI25vbmNlLWF0dHJpYnV0ZXNcblx0XHRcdFx0Ly8gVGhlIGBub2RlLmdldEF0dHJpYnV0ZWAgY2hlY2sgd2FzIGFkZGVkIGZvciB0aGUgc2FrZSBvZlxuXHRcdFx0XHQvLyBgalF1ZXJ5Lmdsb2JhbEV2YWxgIHNvIHRoYXQgaXQgY2FuIGZha2UgYSBub25jZS1jb250YWluaW5nIG5vZGVcblx0XHRcdFx0Ly8gdmlhIGFuIG9iamVjdC5cblx0XHRcdFx0dmFsID0gbm9kZVsgaSBdIHx8IG5vZGUuZ2V0QXR0cmlidXRlICYmIG5vZGUuZ2V0QXR0cmlidXRlKCBpICk7XG5cdFx0XHRcdGlmICggdmFsICkge1xuXHRcdFx0XHRcdHNjcmlwdC5zZXRBdHRyaWJ1dGUoIGksIHZhbCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGRvYy5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHQgKS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBzY3JpcHQgKTtcblx0fVxuXG5cbmZ1bmN0aW9uIHRvVHlwZSggb2JqICkge1xuXHRpZiAoIG9iaiA9PSBudWxsICkge1xuXHRcdHJldHVybiBvYmogKyBcIlwiO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTIuMyBvbmx5IChmdW5jdGlvbmlzaCBSZWdFeHApXG5cdHJldHVybiB0eXBlb2Ygb2JqID09PSBcIm9iamVjdFwiIHx8IHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIiA/XG5cdFx0Y2xhc3MydHlwZVsgdG9TdHJpbmcuY2FsbCggb2JqICkgXSB8fCBcIm9iamVjdFwiIDpcblx0XHR0eXBlb2Ygb2JqO1xufVxuLyogZ2xvYmFsIFN5bWJvbCAqL1xuLy8gRGVmaW5pbmcgdGhpcyBnbG9iYWwgaW4gLmVzbGludHJjLmpzb24gd291bGQgY3JlYXRlIGEgZGFuZ2VyIG9mIHVzaW5nIHRoZSBnbG9iYWxcbi8vIHVuZ3VhcmRlZCBpbiBhbm90aGVyIHBsYWNlLCBpdCBzZWVtcyBzYWZlciB0byBkZWZpbmUgZ2xvYmFsIG9ubHkgZm9yIHRoaXMgbW9kdWxlXG5cblxuXG52YXJcblx0dmVyc2lvbiA9IFwiMy42LjBcIixcblxuXHQvLyBEZWZpbmUgYSBsb2NhbCBjb3B5IG9mIGpRdWVyeVxuXHRqUXVlcnkgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7XG5cblx0XHQvLyBUaGUgalF1ZXJ5IG9iamVjdCBpcyBhY3R1YWxseSBqdXN0IHRoZSBpbml0IGNvbnN0cnVjdG9yICdlbmhhbmNlZCdcblx0XHQvLyBOZWVkIGluaXQgaWYgalF1ZXJ5IGlzIGNhbGxlZCAoanVzdCBhbGxvdyBlcnJvciB0byBiZSB0aHJvd24gaWYgbm90IGluY2x1ZGVkKVxuXHRcdHJldHVybiBuZXcgalF1ZXJ5LmZuLmluaXQoIHNlbGVjdG9yLCBjb250ZXh0ICk7XG5cdH07XG5cbmpRdWVyeS5mbiA9IGpRdWVyeS5wcm90b3R5cGUgPSB7XG5cblx0Ly8gVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiBqUXVlcnkgYmVpbmcgdXNlZFxuXHRqcXVlcnk6IHZlcnNpb24sXG5cblx0Y29uc3RydWN0b3I6IGpRdWVyeSxcblxuXHQvLyBUaGUgZGVmYXVsdCBsZW5ndGggb2YgYSBqUXVlcnkgb2JqZWN0IGlzIDBcblx0bGVuZ3RoOiAwLFxuXG5cdHRvQXJyYXk6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7XG5cdH0sXG5cblx0Ly8gR2V0IHRoZSBOdGggZWxlbWVudCBpbiB0aGUgbWF0Y2hlZCBlbGVtZW50IHNldCBPUlxuXHQvLyBHZXQgdGhlIHdob2xlIG1hdGNoZWQgZWxlbWVudCBzZXQgYXMgYSBjbGVhbiBhcnJheVxuXHRnZXQ6IGZ1bmN0aW9uKCBudW0gKSB7XG5cblx0XHQvLyBSZXR1cm4gYWxsIHRoZSBlbGVtZW50cyBpbiBhIGNsZWFuIGFycmF5XG5cdFx0aWYgKCBudW0gPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiBzbGljZS5jYWxsKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIGp1c3QgdGhlIG9uZSBlbGVtZW50IGZyb20gdGhlIHNldFxuXHRcdHJldHVybiBudW0gPCAwID8gdGhpc1sgbnVtICsgdGhpcy5sZW5ndGggXSA6IHRoaXNbIG51bSBdO1xuXHR9LFxuXG5cdC8vIFRha2UgYW4gYXJyYXkgb2YgZWxlbWVudHMgYW5kIHB1c2ggaXQgb250byB0aGUgc3RhY2tcblx0Ly8gKHJldHVybmluZyB0aGUgbmV3IG1hdGNoZWQgZWxlbWVudCBzZXQpXG5cdHB1c2hTdGFjazogZnVuY3Rpb24oIGVsZW1zICkge1xuXG5cdFx0Ly8gQnVpbGQgYSBuZXcgalF1ZXJ5IG1hdGNoZWQgZWxlbWVudCBzZXRcblx0XHR2YXIgcmV0ID0galF1ZXJ5Lm1lcmdlKCB0aGlzLmNvbnN0cnVjdG9yKCksIGVsZW1zICk7XG5cblx0XHQvLyBBZGQgdGhlIG9sZCBvYmplY3Qgb250byB0aGUgc3RhY2sgKGFzIGEgcmVmZXJlbmNlKVxuXHRcdHJldC5wcmV2T2JqZWN0ID0gdGhpcztcblxuXHRcdC8vIFJldHVybiB0aGUgbmV3bHktZm9ybWVkIGVsZW1lbnQgc2V0XG5cdFx0cmV0dXJuIHJldDtcblx0fSxcblxuXHQvLyBFeGVjdXRlIGEgY2FsbGJhY2sgZm9yIGV2ZXJ5IGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgc2V0LlxuXHRlYWNoOiBmdW5jdGlvbiggY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5lYWNoKCB0aGlzLCBjYWxsYmFjayApO1xuXHR9LFxuXG5cdG1hcDogZnVuY3Rpb24oIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5Lm1hcCggdGhpcywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gY2FsbGJhY2suY2FsbCggZWxlbSwgaSwgZWxlbSApO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdHNsaWNlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHNsaWNlLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSApO1xuXHR9LFxuXG5cdGZpcnN0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5lcSggMCApO1xuXHR9LFxuXG5cdGxhc3Q6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLmVxKCAtMSApO1xuXHR9LFxuXG5cdGV2ZW46IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5LmdyZXAoIHRoaXMsIGZ1bmN0aW9uKCBfZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiAoIGkgKyAxICkgJSAyO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdG9kZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkuZ3JlcCggdGhpcywgZnVuY3Rpb24oIF9lbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuIGkgJSAyO1xuXHRcdH0gKSApO1xuXHR9LFxuXG5cdGVxOiBmdW5jdGlvbiggaSApIHtcblx0XHR2YXIgbGVuID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRqID0gK2kgKyAoIGkgPCAwID8gbGVuIDogMCApO1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggaiA+PSAwICYmIGogPCBsZW4gPyBbIHRoaXNbIGogXSBdIDogW10gKTtcblx0fSxcblxuXHRlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnByZXZPYmplY3QgfHwgdGhpcy5jb25zdHJ1Y3RvcigpO1xuXHR9LFxuXG5cdC8vIEZvciBpbnRlcm5hbCB1c2Ugb25seS5cblx0Ly8gQmVoYXZlcyBsaWtlIGFuIEFycmF5J3MgbWV0aG9kLCBub3QgbGlrZSBhIGpRdWVyeSBtZXRob2QuXG5cdHB1c2g6IHB1c2gsXG5cdHNvcnQ6IGFyci5zb3J0LFxuXHRzcGxpY2U6IGFyci5zcGxpY2Vcbn07XG5cbmpRdWVyeS5leHRlbmQgPSBqUXVlcnkuZm4uZXh0ZW5kID0gZnVuY3Rpb24oKSB7XG5cdHZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNvcHksIGNvcHlJc0FycmF5LCBjbG9uZSxcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbIDAgXSB8fCB7fSxcblx0XHRpID0gMSxcblx0XHRsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoLFxuXHRcdGRlZXAgPSBmYWxzZTtcblxuXHQvLyBIYW5kbGUgYSBkZWVwIGNvcHkgc2l0dWF0aW9uXG5cdGlmICggdHlwZW9mIHRhcmdldCA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0ZGVlcCA9IHRhcmdldDtcblxuXHRcdC8vIFNraXAgdGhlIGJvb2xlYW4gYW5kIHRoZSB0YXJnZXRcblx0XHR0YXJnZXQgPSBhcmd1bWVudHNbIGkgXSB8fCB7fTtcblx0XHRpKys7XG5cdH1cblxuXHQvLyBIYW5kbGUgY2FzZSB3aGVuIHRhcmdldCBpcyBhIHN0cmluZyBvciBzb21ldGhpbmcgKHBvc3NpYmxlIGluIGRlZXAgY29weSlcblx0aWYgKCB0eXBlb2YgdGFyZ2V0ICE9PSBcIm9iamVjdFwiICYmICFpc0Z1bmN0aW9uKCB0YXJnZXQgKSApIHtcblx0XHR0YXJnZXQgPSB7fTtcblx0fVxuXG5cdC8vIEV4dGVuZCBqUXVlcnkgaXRzZWxmIGlmIG9ubHkgb25lIGFyZ3VtZW50IGlzIHBhc3NlZFxuXHRpZiAoIGkgPT09IGxlbmd0aCApIHtcblx0XHR0YXJnZXQgPSB0aGlzO1xuXHRcdGktLTtcblx0fVxuXG5cdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXG5cdFx0Ly8gT25seSBkZWFsIHdpdGggbm9uLW51bGwvdW5kZWZpbmVkIHZhbHVlc1xuXHRcdGlmICggKCBvcHRpb25zID0gYXJndW1lbnRzWyBpIF0gKSAhPSBudWxsICkge1xuXG5cdFx0XHQvLyBFeHRlbmQgdGhlIGJhc2Ugb2JqZWN0XG5cdFx0XHRmb3IgKCBuYW1lIGluIG9wdGlvbnMgKSB7XG5cdFx0XHRcdGNvcHkgPSBvcHRpb25zWyBuYW1lIF07XG5cblx0XHRcdFx0Ly8gUHJldmVudCBPYmplY3QucHJvdG90eXBlIHBvbGx1dGlvblxuXHRcdFx0XHQvLyBQcmV2ZW50IG5ldmVyLWVuZGluZyBsb29wXG5cdFx0XHRcdGlmICggbmFtZSA9PT0gXCJfX3Byb3RvX19cIiB8fCB0YXJnZXQgPT09IGNvcHkgKSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZWN1cnNlIGlmIHdlJ3JlIG1lcmdpbmcgcGxhaW4gb2JqZWN0cyBvciBhcnJheXNcblx0XHRcdFx0aWYgKCBkZWVwICYmIGNvcHkgJiYgKCBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29weSApIHx8XG5cdFx0XHRcdFx0KCBjb3B5SXNBcnJheSA9IEFycmF5LmlzQXJyYXkoIGNvcHkgKSApICkgKSB7XG5cdFx0XHRcdFx0c3JjID0gdGFyZ2V0WyBuYW1lIF07XG5cblx0XHRcdFx0XHQvLyBFbnN1cmUgcHJvcGVyIHR5cGUgZm9yIHRoZSBzb3VyY2UgdmFsdWVcblx0XHRcdFx0XHRpZiAoIGNvcHlJc0FycmF5ICYmICFBcnJheS5pc0FycmF5KCBzcmMgKSApIHtcblx0XHRcdFx0XHRcdGNsb25lID0gW107XG5cdFx0XHRcdFx0fSBlbHNlIGlmICggIWNvcHlJc0FycmF5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggc3JjICkgKSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHt9O1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IHNyYztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0Y29weUlzQXJyYXkgPSBmYWxzZTtcblxuXHRcdFx0XHRcdC8vIE5ldmVyIG1vdmUgb3JpZ2luYWwgb2JqZWN0cywgY2xvbmUgdGhlbVxuXHRcdFx0XHRcdHRhcmdldFsgbmFtZSBdID0galF1ZXJ5LmV4dGVuZCggZGVlcCwgY2xvbmUsIGNvcHkgKTtcblxuXHRcdFx0XHQvLyBEb24ndCBicmluZyBpbiB1bmRlZmluZWQgdmFsdWVzXG5cdFx0XHRcdH0gZWxzZSBpZiAoIGNvcHkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHR0YXJnZXRbIG5hbWUgXSA9IGNvcHk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBSZXR1cm4gdGhlIG1vZGlmaWVkIG9iamVjdFxuXHRyZXR1cm4gdGFyZ2V0O1xufTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIFVuaXF1ZSBmb3IgZWFjaCBjb3B5IG9mIGpRdWVyeSBvbiB0aGUgcGFnZVxuXHRleHBhbmRvOiBcImpRdWVyeVwiICsgKCB2ZXJzaW9uICsgTWF0aC5yYW5kb20oKSApLnJlcGxhY2UoIC9cXEQvZywgXCJcIiApLFxuXG5cdC8vIEFzc3VtZSBqUXVlcnkgaXMgcmVhZHkgd2l0aG91dCB0aGUgcmVhZHkgbW9kdWxlXG5cdGlzUmVhZHk6IHRydWUsXG5cblx0ZXJyb3I6IGZ1bmN0aW9uKCBtc2cgKSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKCBtc2cgKTtcblx0fSxcblxuXHRub29wOiBmdW5jdGlvbigpIHt9LFxuXG5cdGlzUGxhaW5PYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0dmFyIHByb3RvLCBDdG9yO1xuXG5cdFx0Ly8gRGV0ZWN0IG9idmlvdXMgbmVnYXRpdmVzXG5cdFx0Ly8gVXNlIHRvU3RyaW5nIGluc3RlYWQgb2YgalF1ZXJ5LnR5cGUgdG8gY2F0Y2ggaG9zdCBvYmplY3RzXG5cdFx0aWYgKCAhb2JqIHx8IHRvU3RyaW5nLmNhbGwoIG9iaiApICE9PSBcIltvYmplY3QgT2JqZWN0XVwiICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdHByb3RvID0gZ2V0UHJvdG8oIG9iaiApO1xuXG5cdFx0Ly8gT2JqZWN0cyB3aXRoIG5vIHByb3RvdHlwZSAoZS5nLiwgYE9iamVjdC5jcmVhdGUoIG51bGwgKWApIGFyZSBwbGFpblxuXHRcdGlmICggIXByb3RvICkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXG5cdFx0Ly8gT2JqZWN0cyB3aXRoIHByb3RvdHlwZSBhcmUgcGxhaW4gaWZmIHRoZXkgd2VyZSBjb25zdHJ1Y3RlZCBieSBhIGdsb2JhbCBPYmplY3QgZnVuY3Rpb25cblx0XHRDdG9yID0gaGFzT3duLmNhbGwoIHByb3RvLCBcImNvbnN0cnVjdG9yXCIgKSAmJiBwcm90by5jb25zdHJ1Y3Rvcjtcblx0XHRyZXR1cm4gdHlwZW9mIEN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBmblRvU3RyaW5nLmNhbGwoIEN0b3IgKSA9PT0gT2JqZWN0RnVuY3Rpb25TdHJpbmc7XG5cdH0sXG5cblx0aXNFbXB0eU9iamVjdDogZnVuY3Rpb24oIG9iaiApIHtcblx0XHR2YXIgbmFtZTtcblxuXHRcdGZvciAoIG5hbWUgaW4gb2JqICkge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fSxcblxuXHQvLyBFdmFsdWF0ZXMgYSBzY3JpcHQgaW4gYSBwcm92aWRlZCBjb250ZXh0OyBmYWxscyBiYWNrIHRvIHRoZSBnbG9iYWwgb25lXG5cdC8vIGlmIG5vdCBzcGVjaWZpZWQuXG5cdGdsb2JhbEV2YWw6IGZ1bmN0aW9uKCBjb2RlLCBvcHRpb25zLCBkb2MgKSB7XG5cdFx0RE9NRXZhbCggY29kZSwgeyBub25jZTogb3B0aW9ucyAmJiBvcHRpb25zLm5vbmNlIH0sIGRvYyApO1xuXHR9LFxuXG5cdGVhY2g6IGZ1bmN0aW9uKCBvYmosIGNhbGxiYWNrICkge1xuXHRcdHZhciBsZW5ndGgsIGkgPSAwO1xuXG5cdFx0aWYgKCBpc0FycmF5TGlrZSggb2JqICkgKSB7XG5cdFx0XHRsZW5ndGggPSBvYmoubGVuZ3RoO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2suY2FsbCggb2JqWyBpIF0sIGksIG9ialsgaSBdICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGZvciAoIGkgaW4gb2JqICkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBvYmo7XG5cdH0sXG5cblx0Ly8gcmVzdWx0cyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seVxuXHRtYWtlQXJyYXk6IGZ1bmN0aW9uKCBhcnIsIHJlc3VsdHMgKSB7XG5cdFx0dmFyIHJldCA9IHJlc3VsdHMgfHwgW107XG5cblx0XHRpZiAoIGFyciAhPSBudWxsICkge1xuXHRcdFx0aWYgKCBpc0FycmF5TGlrZSggT2JqZWN0KCBhcnIgKSApICkge1xuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIHJldCxcblx0XHRcdFx0XHR0eXBlb2YgYXJyID09PSBcInN0cmluZ1wiID9cblx0XHRcdFx0XHRcdFsgYXJyIF0gOiBhcnJcblx0XHRcdFx0KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHB1c2guY2FsbCggcmV0LCBhcnIgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gcmV0O1xuXHR9LFxuXG5cdGluQXJyYXk6IGZ1bmN0aW9uKCBlbGVtLCBhcnIsIGkgKSB7XG5cdFx0cmV0dXJuIGFyciA9PSBudWxsID8gLTEgOiBpbmRleE9mLmNhbGwoIGFyciwgZWxlbSwgaSApO1xuXHR9LFxuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdG1lcmdlOiBmdW5jdGlvbiggZmlyc3QsIHNlY29uZCApIHtcblx0XHR2YXIgbGVuID0gK3NlY29uZC5sZW5ndGgsXG5cdFx0XHRqID0gMCxcblx0XHRcdGkgPSBmaXJzdC5sZW5ndGg7XG5cblx0XHRmb3IgKCA7IGogPCBsZW47IGorKyApIHtcblx0XHRcdGZpcnN0WyBpKysgXSA9IHNlY29uZFsgaiBdO1xuXHRcdH1cblxuXHRcdGZpcnN0Lmxlbmd0aCA9IGk7XG5cblx0XHRyZXR1cm4gZmlyc3Q7XG5cdH0sXG5cblx0Z3JlcDogZnVuY3Rpb24oIGVsZW1zLCBjYWxsYmFjaywgaW52ZXJ0ICkge1xuXHRcdHZhciBjYWxsYmFja0ludmVyc2UsXG5cdFx0XHRtYXRjaGVzID0gW10sXG5cdFx0XHRpID0gMCxcblx0XHRcdGxlbmd0aCA9IGVsZW1zLmxlbmd0aCxcblx0XHRcdGNhbGxiYWNrRXhwZWN0ID0gIWludmVydDtcblxuXHRcdC8vIEdvIHRocm91Z2ggdGhlIGFycmF5LCBvbmx5IHNhdmluZyB0aGUgaXRlbXNcblx0XHQvLyB0aGF0IHBhc3MgdGhlIHZhbGlkYXRvciBmdW5jdGlvblxuXHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0Y2FsbGJhY2tJbnZlcnNlID0gIWNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpICk7XG5cdFx0XHRpZiAoIGNhbGxiYWNrSW52ZXJzZSAhPT0gY2FsbGJhY2tFeHBlY3QgKSB7XG5cdFx0XHRcdG1hdGNoZXMucHVzaCggZWxlbXNbIGkgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBtYXRjaGVzO1xuXHR9LFxuXG5cdC8vIGFyZyBpcyBmb3IgaW50ZXJuYWwgdXNhZ2Ugb25seVxuXHRtYXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGFyZyApIHtcblx0XHR2YXIgbGVuZ3RoLCB2YWx1ZSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0cmV0ID0gW107XG5cblx0XHQvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgdHJhbnNsYXRpbmcgZWFjaCBvZiB0aGUgaXRlbXMgdG8gdGhlaXIgbmV3IHZhbHVlc1xuXHRcdGlmICggaXNBcnJheUxpa2UoIGVsZW1zICkgKSB7XG5cdFx0XHRsZW5ndGggPSBlbGVtcy5sZW5ndGg7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7XG5cblx0XHRcdFx0aWYgKCB2YWx1ZSAhPSBudWxsICkge1xuXHRcdFx0XHRcdHJldC5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBHbyB0aHJvdWdoIGV2ZXJ5IGtleSBvbiB0aGUgb2JqZWN0LFxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKCBpIGluIGVsZW1zICkge1xuXHRcdFx0XHR2YWx1ZSA9IGNhbGxiYWNrKCBlbGVtc1sgaSBdLCBpLCBhcmcgKTtcblxuXHRcdFx0XHRpZiAoIHZhbHVlICE9IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0LnB1c2goIHZhbHVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzXG5cdFx0cmV0dXJuIGZsYXQoIHJldCApO1xuXHR9LFxuXG5cdC8vIEEgZ2xvYmFsIEdVSUQgY291bnRlciBmb3Igb2JqZWN0c1xuXHRndWlkOiAxLFxuXG5cdC8vIGpRdWVyeS5zdXBwb3J0IGlzIG5vdCB1c2VkIGluIENvcmUgYnV0IG90aGVyIHByb2plY3RzIGF0dGFjaCB0aGVpclxuXHQvLyBwcm9wZXJ0aWVzIHRvIGl0IHNvIGl0IG5lZWRzIHRvIGV4aXN0LlxuXHRzdXBwb3J0OiBzdXBwb3J0XG59ICk7XG5cbmlmICggdHlwZW9mIFN5bWJvbCA9PT0gXCJmdW5jdGlvblwiICkge1xuXHRqUXVlcnkuZm5bIFN5bWJvbC5pdGVyYXRvciBdID0gYXJyWyBTeW1ib2wuaXRlcmF0b3IgXTtcbn1cblxuLy8gUG9wdWxhdGUgdGhlIGNsYXNzMnR5cGUgbWFwXG5qUXVlcnkuZWFjaCggXCJCb29sZWFuIE51bWJlciBTdHJpbmcgRnVuY3Rpb24gQXJyYXkgRGF0ZSBSZWdFeHAgT2JqZWN0IEVycm9yIFN5bWJvbFwiLnNwbGl0KCBcIiBcIiApLFxuXHRmdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cdFx0Y2xhc3MydHlwZVsgXCJbb2JqZWN0IFwiICsgbmFtZSArIFwiXVwiIF0gPSBuYW1lLnRvTG93ZXJDYXNlKCk7XG5cdH0gKTtcblxuZnVuY3Rpb24gaXNBcnJheUxpa2UoIG9iaiApIHtcblxuXHQvLyBTdXBwb3J0OiByZWFsIGlPUyA4LjIgb25seSAobm90IHJlcHJvZHVjaWJsZSBpbiBzaW11bGF0b3IpXG5cdC8vIGBpbmAgY2hlY2sgdXNlZCB0byBwcmV2ZW50IEpJVCBlcnJvciAoZ2gtMjE0NSlcblx0Ly8gaGFzT3duIGlzbid0IHVzZWQgaGVyZSBkdWUgdG8gZmFsc2UgbmVnYXRpdmVzXG5cdC8vIHJlZ2FyZGluZyBOb2RlbGlzdCBsZW5ndGggaW4gSUVcblx0dmFyIGxlbmd0aCA9ICEhb2JqICYmIFwibGVuZ3RoXCIgaW4gb2JqICYmIG9iai5sZW5ndGgsXG5cdFx0dHlwZSA9IHRvVHlwZSggb2JqICk7XG5cblx0aWYgKCBpc0Z1bmN0aW9uKCBvYmogKSB8fCBpc1dpbmRvdyggb2JqICkgKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5cblx0cmV0dXJuIHR5cGUgPT09IFwiYXJyYXlcIiB8fCBsZW5ndGggPT09IDAgfHxcblx0XHR0eXBlb2YgbGVuZ3RoID09PSBcIm51bWJlclwiICYmIGxlbmd0aCA+IDAgJiYgKCBsZW5ndGggLSAxICkgaW4gb2JqO1xufVxudmFyIFNpenpsZSA9XG4vKiFcbiAqIFNpenpsZSBDU1MgU2VsZWN0b3IgRW5naW5lIHYyLjMuNlxuICogaHR0cHM6Ly9zaXp6bGVqcy5jb20vXG4gKlxuICogQ29weXJpZ2h0IEpTIEZvdW5kYXRpb24gYW5kIG90aGVyIGNvbnRyaWJ1dG9yc1xuICogUmVsZWFzZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlXG4gKiBodHRwczovL2pzLmZvdW5kYXRpb24vXG4gKlxuICogRGF0ZTogMjAyMS0wMi0xNlxuICovXG4oIGZ1bmN0aW9uKCB3aW5kb3cgKSB7XG52YXIgaSxcblx0c3VwcG9ydCxcblx0RXhwcixcblx0Z2V0VGV4dCxcblx0aXNYTUwsXG5cdHRva2VuaXplLFxuXHRjb21waWxlLFxuXHRzZWxlY3QsXG5cdG91dGVybW9zdENvbnRleHQsXG5cdHNvcnRJbnB1dCxcblx0aGFzRHVwbGljYXRlLFxuXG5cdC8vIExvY2FsIGRvY3VtZW50IHZhcnNcblx0c2V0RG9jdW1lbnQsXG5cdGRvY3VtZW50LFxuXHRkb2NFbGVtLFxuXHRkb2N1bWVudElzSFRNTCxcblx0cmJ1Z2d5UVNBLFxuXHRyYnVnZ3lNYXRjaGVzLFxuXHRtYXRjaGVzLFxuXHRjb250YWlucyxcblxuXHQvLyBJbnN0YW5jZS1zcGVjaWZpYyBkYXRhXG5cdGV4cGFuZG8gPSBcInNpenpsZVwiICsgMSAqIG5ldyBEYXRlKCksXG5cdHByZWZlcnJlZERvYyA9IHdpbmRvdy5kb2N1bWVudCxcblx0ZGlycnVucyA9IDAsXG5cdGRvbmUgPSAwLFxuXHRjbGFzc0NhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0dG9rZW5DYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdGNvbXBpbGVyQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRub25uYXRpdmVTZWxlY3RvckNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0c29ydE9yZGVyID0gZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIDA7XG5cdH0sXG5cblx0Ly8gSW5zdGFuY2UgbWV0aG9kc1xuXHRoYXNPd24gPSAoIHt9ICkuaGFzT3duUHJvcGVydHksXG5cdGFyciA9IFtdLFxuXHRwb3AgPSBhcnIucG9wLFxuXHRwdXNoTmF0aXZlID0gYXJyLnB1c2gsXG5cdHB1c2ggPSBhcnIucHVzaCxcblx0c2xpY2UgPSBhcnIuc2xpY2UsXG5cblx0Ly8gVXNlIGEgc3RyaXBwZWQtZG93biBpbmRleE9mIGFzIGl0J3MgZmFzdGVyIHRoYW4gbmF0aXZlXG5cdC8vIGh0dHBzOi8vanNwZXJmLmNvbS90aG9yLWluZGV4b2YtdnMtZm9yLzVcblx0aW5kZXhPZiA9IGZ1bmN0aW9uKCBsaXN0LCBlbGVtICkge1xuXHRcdHZhciBpID0gMCxcblx0XHRcdGxlbiA9IGxpc3QubGVuZ3RoO1xuXHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0aWYgKCBsaXN0WyBpIF0gPT09IGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gLTE7XG5cdH0sXG5cblx0Ym9vbGVhbnMgPSBcImNoZWNrZWR8c2VsZWN0ZWR8YXN5bmN8YXV0b2ZvY3VzfGF1dG9wbGF5fGNvbnRyb2xzfGRlZmVyfGRpc2FibGVkfGhpZGRlbnxcIiArXG5cdFx0XCJpc21hcHxsb29wfG11bHRpcGxlfG9wZW58cmVhZG9ubHl8cmVxdWlyZWR8c2NvcGVkXCIsXG5cblx0Ly8gUmVndWxhciBleHByZXNzaW9uc1xuXG5cdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL2NzczMtc2VsZWN0b3JzLyN3aGl0ZXNwYWNlXG5cdHdoaXRlc3BhY2UgPSBcIltcXFxceDIwXFxcXHRcXFxcclxcXFxuXFxcXGZdXCIsXG5cblx0Ly8gaHR0cHM6Ly93d3cudzMub3JnL1RSL2Nzcy1zeW50YXgtMy8jaWRlbnQtdG9rZW4tZGlhZ3JhbVxuXHRpZGVudGlmaWVyID0gXCIoPzpcXFxcXFxcXFtcXFxcZGEtZkEtRl17MSw2fVwiICsgd2hpdGVzcGFjZSArXG5cdFx0XCI/fFxcXFxcXFxcW15cXFxcclxcXFxuXFxcXGZdfFtcXFxcdy1dfFteXFwwLVxcXFx4N2ZdKStcIixcblxuXHQvLyBBdHRyaWJ1dGUgc2VsZWN0b3JzOiBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2F0dHJpYnV0ZS1zZWxlY3RvcnNcblx0YXR0cmlidXRlcyA9IFwiXFxcXFtcIiArIHdoaXRlc3BhY2UgKyBcIiooXCIgKyBpZGVudGlmaWVyICsgXCIpKD86XCIgKyB3aGl0ZXNwYWNlICtcblxuXHRcdC8vIE9wZXJhdG9yIChjYXB0dXJlIDIpXG5cdFx0XCIqKFsqXiR8IX5dPz0pXCIgKyB3aGl0ZXNwYWNlICtcblxuXHRcdC8vIFwiQXR0cmlidXRlIHZhbHVlcyBtdXN0IGJlIENTUyBpZGVudGlmaWVycyBbY2FwdHVyZSA1XVxuXHRcdC8vIG9yIHN0cmluZ3MgW2NhcHR1cmUgMyBvciBjYXB0dXJlIDRdXCJcblx0XHRcIiooPzonKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcJ10pKiknfFxcXCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFxcXFwiXSkqKVxcXCJ8KFwiICsgaWRlbnRpZmllciArIFwiKSl8KVwiICtcblx0XHR3aGl0ZXNwYWNlICsgXCIqXFxcXF1cIixcblxuXHRwc2V1ZG9zID0gXCI6KFwiICsgaWRlbnRpZmllciArIFwiKSg/OlxcXFwoKFwiICtcblxuXHRcdC8vIFRvIHJlZHVjZSB0aGUgbnVtYmVyIG9mIHNlbGVjdG9ycyBuZWVkaW5nIHRva2VuaXplIGluIHRoZSBwcmVGaWx0ZXIsIHByZWZlciBhcmd1bWVudHM6XG5cdFx0Ly8gMS4gcXVvdGVkIChjYXB0dXJlIDM7IGNhcHR1cmUgNCBvciBjYXB0dXJlIDUpXG5cdFx0XCIoJygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwiKXxcIiArXG5cblx0XHQvLyAyLiBzaW1wbGUgKGNhcHR1cmUgNilcblx0XHRcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXCgpW1xcXFxdXXxcIiArIGF0dHJpYnV0ZXMgKyBcIikqKXxcIiArXG5cblx0XHQvLyAzLiBhbnl0aGluZyBlbHNlIChjYXB0dXJlIDIpXG5cdFx0XCIuKlwiICtcblx0XHRcIilcXFxcKXwpXCIsXG5cblx0Ly8gTGVhZGluZyBhbmQgbm9uLWVzY2FwZWQgdHJhaWxpbmcgd2hpdGVzcGFjZSwgY2FwdHVyaW5nIHNvbWUgbm9uLXdoaXRlc3BhY2UgY2hhcmFjdGVycyBwcmVjZWRpbmcgdGhlIGxhdHRlclxuXHRyd2hpdGVzcGFjZSA9IG5ldyBSZWdFeHAoIHdoaXRlc3BhY2UgKyBcIitcIiwgXCJnXCIgKSxcblx0cnRyaW0gPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIit8KCg/Ol58W15cXFxcXFxcXF0pKD86XFxcXFxcXFwuKSopXCIgK1xuXHRcdHdoaXRlc3BhY2UgKyBcIiskXCIsIFwiZ1wiICksXG5cblx0cmNvbW1hID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIqLFwiICsgd2hpdGVzcGFjZSArIFwiKlwiICksXG5cdHJjb21iaW5hdG9ycyA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKihbPit+XXxcIiArIHdoaXRlc3BhY2UgKyBcIilcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFwiKlwiICksXG5cdHJkZXNjZW5kID0gbmV3IFJlZ0V4cCggd2hpdGVzcGFjZSArIFwifD5cIiApLFxuXG5cdHJwc2V1ZG8gPSBuZXcgUmVnRXhwKCBwc2V1ZG9zICksXG5cdHJpZGVudGlmaWVyID0gbmV3IFJlZ0V4cCggXCJeXCIgKyBpZGVudGlmaWVyICsgXCIkXCIgKSxcblxuXHRtYXRjaEV4cHIgPSB7XG5cdFx0XCJJRFwiOiBuZXcgUmVnRXhwKCBcIl4jKFwiICsgaWRlbnRpZmllciArIFwiKVwiICksXG5cdFx0XCJDTEFTU1wiOiBuZXcgUmVnRXhwKCBcIl5cXFxcLihcIiArIGlkZW50aWZpZXIgKyBcIilcIiApLFxuXHRcdFwiVEFHXCI6IG5ldyBSZWdFeHAoIFwiXihcIiArIGlkZW50aWZpZXIgKyBcInxbKl0pXCIgKSxcblx0XHRcIkFUVFJcIjogbmV3IFJlZ0V4cCggXCJeXCIgKyBhdHRyaWJ1dGVzICksXG5cdFx0XCJQU0VVRE9cIjogbmV3IFJlZ0V4cCggXCJeXCIgKyBwc2V1ZG9zICksXG5cdFx0XCJDSElMRFwiOiBuZXcgUmVnRXhwKCBcIl46KG9ubHl8Zmlyc3R8bGFzdHxudGh8bnRoLWxhc3QpLShjaGlsZHxvZi10eXBlKSg/OlxcXFwoXCIgK1xuXHRcdFx0d2hpdGVzcGFjZSArIFwiKihldmVufG9kZHwoKFsrLV18KShcXFxcZCopbnwpXCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86KFsrLV18KVwiICtcblx0XHRcdHdoaXRlc3BhY2UgKyBcIiooXFxcXGQrKXwpKVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFwpfClcIiwgXCJpXCIgKSxcblx0XHRcImJvb2xcIjogbmV3IFJlZ0V4cCggXCJeKD86XCIgKyBib29sZWFucyArIFwiKSRcIiwgXCJpXCIgKSxcblxuXHRcdC8vIEZvciB1c2UgaW4gbGlicmFyaWVzIGltcGxlbWVudGluZyAuaXMoKVxuXHRcdC8vIFdlIHVzZSB0aGlzIGZvciBQT1MgbWF0Y2hpbmcgaW4gYHNlbGVjdGBcblx0XHRcIm5lZWRzQ29udGV4dFwiOiBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgK1xuXHRcdFx0XCIqWz4rfl18OihldmVufG9kZHxlcXxndHxsdHxudGh8Zmlyc3R8bGFzdCkoPzpcXFxcKFwiICsgd2hpdGVzcGFjZSArXG5cdFx0XHRcIiooKD86LVxcXFxkKT9cXFxcZCopXCIgKyB3aGl0ZXNwYWNlICsgXCIqXFxcXCl8KSg/PVteLV18JClcIiwgXCJpXCIgKVxuXHR9LFxuXG5cdHJodG1sID0gL0hUTUwkL2ksXG5cdHJpbnB1dHMgPSAvXig/OmlucHV0fHNlbGVjdHx0ZXh0YXJlYXxidXR0b24pJC9pLFxuXHRyaGVhZGVyID0gL15oXFxkJC9pLFxuXG5cdHJuYXRpdmUgPSAvXltee10rXFx7XFxzKlxcW25hdGl2ZSBcXHcvLFxuXG5cdC8vIEVhc2lseS1wYXJzZWFibGUvcmV0cmlldmFibGUgSUQgb3IgVEFHIG9yIENMQVNTIHNlbGVjdG9yc1xuXHRycXVpY2tFeHByID0gL14oPzojKFtcXHctXSspfChcXHcrKXxcXC4oW1xcdy1dKykpJC8sXG5cblx0cnNpYmxpbmcgPSAvWyt+XS8sXG5cblx0Ly8gQ1NTIGVzY2FwZXNcblx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvQ1NTMjEvc3luZGF0YS5odG1sI2VzY2FwZWQtY2hhcmFjdGVyc1xuXHRydW5lc2NhcGUgPSBuZXcgUmVnRXhwKCBcIlxcXFxcXFxcW1xcXFxkYS1mQS1GXXsxLDZ9XCIgKyB3aGl0ZXNwYWNlICsgXCI/fFxcXFxcXFxcKFteXFxcXHJcXFxcblxcXFxmXSlcIiwgXCJnXCIgKSxcblx0ZnVuZXNjYXBlID0gZnVuY3Rpb24oIGVzY2FwZSwgbm9uSGV4ICkge1xuXHRcdHZhciBoaWdoID0gXCIweFwiICsgZXNjYXBlLnNsaWNlKCAxICkgLSAweDEwMDAwO1xuXG5cdFx0cmV0dXJuIG5vbkhleCA/XG5cblx0XHRcdC8vIFN0cmlwIHRoZSBiYWNrc2xhc2ggcHJlZml4IGZyb20gYSBub24taGV4IGVzY2FwZSBzZXF1ZW5jZVxuXHRcdFx0bm9uSGV4IDpcblxuXHRcdFx0Ly8gUmVwbGFjZSBhIGhleGFkZWNpbWFsIGVzY2FwZSBzZXF1ZW5jZSB3aXRoIHRoZSBlbmNvZGVkIFVuaWNvZGUgY29kZSBwb2ludFxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPD0xMStcblx0XHRcdC8vIEZvciB2YWx1ZXMgb3V0c2lkZSB0aGUgQmFzaWMgTXVsdGlsaW5ndWFsIFBsYW5lIChCTVApLCBtYW51YWxseSBjb25zdHJ1Y3QgYVxuXHRcdFx0Ly8gc3Vycm9nYXRlIHBhaXJcblx0XHRcdGhpZ2ggPCAwID9cblx0XHRcdFx0U3RyaW5nLmZyb21DaGFyQ29kZSggaGlnaCArIDB4MTAwMDAgKSA6XG5cdFx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggPj4gMTAgfCAweEQ4MDAsIGhpZ2ggJiAweDNGRiB8IDB4REMwMCApO1xuXHR9LFxuXG5cdC8vIENTUyBzdHJpbmcvaWRlbnRpZmllciBzZXJpYWxpemF0aW9uXG5cdC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS8jY29tbW9uLXNlcmlhbGl6aW5nLWlkaW9tc1xuXHRyY3NzZXNjYXBlID0gLyhbXFwwLVxceDFmXFx4N2ZdfF4tP1xcZCl8Xi0kfFteXFwwLVxceDFmXFx4N2YtXFx1RkZGRlxcdy1dL2csXG5cdGZjc3Nlc2NhcGUgPSBmdW5jdGlvbiggY2gsIGFzQ29kZVBvaW50ICkge1xuXHRcdGlmICggYXNDb2RlUG9pbnQgKSB7XG5cblx0XHRcdC8vIFUrMDAwMCBOVUxMIGJlY29tZXMgVStGRkZEIFJFUExBQ0VNRU5UIENIQVJBQ1RFUlxuXHRcdFx0aWYgKCBjaCA9PT0gXCJcXDBcIiApIHtcblx0XHRcdFx0cmV0dXJuIFwiXFx1RkZGRFwiO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb250cm9sIGNoYXJhY3RlcnMgYW5kIChkZXBlbmRlbnQgdXBvbiBwb3NpdGlvbikgbnVtYmVycyBnZXQgZXNjYXBlZCBhcyBjb2RlIHBvaW50c1xuXHRcdFx0cmV0dXJuIGNoLnNsaWNlKCAwLCAtMSApICsgXCJcXFxcXCIgK1xuXHRcdFx0XHRjaC5jaGFyQ29kZUF0KCBjaC5sZW5ndGggLSAxICkudG9TdHJpbmcoIDE2ICkgKyBcIiBcIjtcblx0XHR9XG5cblx0XHQvLyBPdGhlciBwb3RlbnRpYWxseS1zcGVjaWFsIEFTQ0lJIGNoYXJhY3RlcnMgZ2V0IGJhY2tzbGFzaC1lc2NhcGVkXG5cdFx0cmV0dXJuIFwiXFxcXFwiICsgY2g7XG5cdH0sXG5cblx0Ly8gVXNlZCBmb3IgaWZyYW1lc1xuXHQvLyBTZWUgc2V0RG9jdW1lbnQoKVxuXHQvLyBSZW1vdmluZyB0aGUgZnVuY3Rpb24gd3JhcHBlciBjYXVzZXMgYSBcIlBlcm1pc3Npb24gRGVuaWVkXCJcblx0Ly8gZXJyb3IgaW4gSUVcblx0dW5sb2FkSGFuZGxlciA9IGZ1bmN0aW9uKCkge1xuXHRcdHNldERvY3VtZW50KCk7XG5cdH0sXG5cblx0aW5EaXNhYmxlZEZpZWxkc2V0ID0gYWRkQ29tYmluYXRvcihcblx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSB0cnVlICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJmaWVsZHNldFwiO1xuXHRcdH0sXG5cdFx0eyBkaXI6IFwicGFyZW50Tm9kZVwiLCBuZXh0OiBcImxlZ2VuZFwiIH1cblx0KTtcblxuLy8gT3B0aW1pemUgZm9yIHB1c2guYXBwbHkoIF8sIE5vZGVMaXN0IClcbnRyeSB7XG5cdHB1c2guYXBwbHkoXG5cdFx0KCBhcnIgPSBzbGljZS5jYWxsKCBwcmVmZXJyZWREb2MuY2hpbGROb2RlcyApICksXG5cdFx0cHJlZmVycmVkRG9jLmNoaWxkTm9kZXNcblx0KTtcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkPDQuMFxuXHQvLyBEZXRlY3Qgc2lsZW50bHkgZmFpbGluZyBwdXNoLmFwcGx5XG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcblx0YXJyWyBwcmVmZXJyZWREb2MuY2hpbGROb2Rlcy5sZW5ndGggXS5ub2RlVHlwZTtcbn0gY2F0Y2ggKCBlICkge1xuXHRwdXNoID0geyBhcHBseTogYXJyLmxlbmd0aCA/XG5cblx0XHQvLyBMZXZlcmFnZSBzbGljZSBpZiBwb3NzaWJsZVxuXHRcdGZ1bmN0aW9uKCB0YXJnZXQsIGVscyApIHtcblx0XHRcdHB1c2hOYXRpdmUuYXBwbHkoIHRhcmdldCwgc2xpY2UuY2FsbCggZWxzICkgKTtcblx0XHR9IDpcblxuXHRcdC8vIFN1cHBvcnQ6IElFPDlcblx0XHQvLyBPdGhlcndpc2UgYXBwZW5kIGRpcmVjdGx5XG5cdFx0ZnVuY3Rpb24oIHRhcmdldCwgZWxzICkge1xuXHRcdFx0dmFyIGogPSB0YXJnZXQubGVuZ3RoLFxuXHRcdFx0XHRpID0gMDtcblxuXHRcdFx0Ly8gQ2FuJ3QgdHJ1c3QgTm9kZUxpc3QubGVuZ3RoXG5cdFx0XHR3aGlsZSAoICggdGFyZ2V0WyBqKysgXSA9IGVsc1sgaSsrIF0gKSApIHt9XG5cdFx0XHR0YXJnZXQubGVuZ3RoID0gaiAtIDE7XG5cdFx0fVxuXHR9O1xufVxuXG5mdW5jdGlvbiBTaXp6bGUoIHNlbGVjdG9yLCBjb250ZXh0LCByZXN1bHRzLCBzZWVkICkge1xuXHR2YXIgbSwgaSwgZWxlbSwgbmlkLCBtYXRjaCwgZ3JvdXBzLCBuZXdTZWxlY3Rvcixcblx0XHRuZXdDb250ZXh0ID0gY29udGV4dCAmJiBjb250ZXh0Lm93bmVyRG9jdW1lbnQsXG5cblx0XHQvLyBub2RlVHlwZSBkZWZhdWx0cyB0byA5LCBzaW5jZSBjb250ZXh0IGRlZmF1bHRzIHRvIGRvY3VtZW50XG5cdFx0bm9kZVR5cGUgPSBjb250ZXh0ID8gY29udGV4dC5ub2RlVHlwZSA6IDk7XG5cblx0cmVzdWx0cyA9IHJlc3VsdHMgfHwgW107XG5cblx0Ly8gUmV0dXJuIGVhcmx5IGZyb20gY2FsbHMgd2l0aCBpbnZhbGlkIHNlbGVjdG9yIG9yIGNvbnRleHRcblx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgIT09IFwic3RyaW5nXCIgfHwgIXNlbGVjdG9yIHx8XG5cdFx0bm9kZVR5cGUgIT09IDEgJiYgbm9kZVR5cGUgIT09IDkgJiYgbm9kZVR5cGUgIT09IDExICkge1xuXG5cdFx0cmV0dXJuIHJlc3VsdHM7XG5cdH1cblxuXHQvLyBUcnkgdG8gc2hvcnRjdXQgZmluZCBvcGVyYXRpb25zIChhcyBvcHBvc2VkIHRvIGZpbHRlcnMpIGluIEhUTUwgZG9jdW1lbnRzXG5cdGlmICggIXNlZWQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcblx0XHRjb250ZXh0ID0gY29udGV4dCB8fCBkb2N1bWVudDtcblxuXHRcdGlmICggZG9jdW1lbnRJc0hUTUwgKSB7XG5cblx0XHRcdC8vIElmIHRoZSBzZWxlY3RvciBpcyBzdWZmaWNpZW50bHkgc2ltcGxlLCB0cnkgdXNpbmcgYSBcImdldCpCeSpcIiBET00gbWV0aG9kXG5cdFx0XHQvLyAoZXhjZXB0aW5nIERvY3VtZW50RnJhZ21lbnQgY29udGV4dCwgd2hlcmUgdGhlIG1ldGhvZHMgZG9uJ3QgZXhpc3QpXG5cdFx0XHRpZiAoIG5vZGVUeXBlICE9PSAxMSAmJiAoIG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApICkgKSB7XG5cblx0XHRcdFx0Ly8gSUQgc2VsZWN0b3Jcblx0XHRcdFx0aWYgKCAoIG0gPSBtYXRjaFsgMSBdICkgKSB7XG5cblx0XHRcdFx0XHQvLyBEb2N1bWVudCBjb250ZXh0XG5cdFx0XHRcdFx0aWYgKCBub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRcdGlmICggKCBlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUsIE9wZXJhLCBXZWJraXRcblx0XHRcdFx0XHRcdFx0Ly8gVE9ETzogaWRlbnRpZnkgdmVyc2lvbnNcblx0XHRcdFx0XHRcdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRFxuXHRcdFx0XHRcdFx0XHRpZiAoIGVsZW0uaWQgPT09IG0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gRWxlbWVudCBjb250ZXh0XG5cdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUsIE9wZXJhLCBXZWJraXRcblx0XHRcdFx0XHRcdC8vIFRPRE86IGlkZW50aWZ5IHZlcnNpb25zXG5cdFx0XHRcdFx0XHQvLyBnZXRFbGVtZW50QnlJZCBjYW4gbWF0Y2ggZWxlbWVudHMgYnkgbmFtZSBpbnN0ZWFkIG9mIElEXG5cdFx0XHRcdFx0XHRpZiAoIG5ld0NvbnRleHQgJiYgKCBlbGVtID0gbmV3Q29udGV4dC5nZXRFbGVtZW50QnlJZCggbSApICkgJiZcblx0XHRcdFx0XHRcdFx0Y29udGFpbnMoIGNvbnRleHQsIGVsZW0gKSAmJlxuXHRcdFx0XHRcdFx0XHRlbGVtLmlkID09PSBtICkge1xuXG5cdFx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gVHlwZSBzZWxlY3RvclxuXHRcdFx0XHR9IGVsc2UgaWYgKCBtYXRjaFsgMiBdICkge1xuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHNlbGVjdG9yICkgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblxuXHRcdFx0XHQvLyBDbGFzcyBzZWxlY3RvclxuXHRcdFx0XHR9IGVsc2UgaWYgKCAoIG0gPSBtYXRjaFsgMyBdICkgJiYgc3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICYmXG5cdFx0XHRcdFx0Y29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICkge1xuXG5cdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBtICkgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBUYWtlIGFkdmFudGFnZSBvZiBxdWVyeVNlbGVjdG9yQWxsXG5cdFx0XHRpZiAoIHN1cHBvcnQucXNhICYmXG5cdFx0XHRcdCFub25uYXRpdmVTZWxlY3RvckNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF0gJiZcblx0XHRcdFx0KCAhcmJ1Z2d5UVNBIHx8ICFyYnVnZ3lRU0EudGVzdCggc2VsZWN0b3IgKSApICYmXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgOCBvbmx5XG5cdFx0XHRcdC8vIEV4Y2x1ZGUgb2JqZWN0IGVsZW1lbnRzXG5cdFx0XHRcdCggbm9kZVR5cGUgIT09IDEgfHwgY29udGV4dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICE9PSBcIm9iamVjdFwiICkgKSB7XG5cblx0XHRcdFx0bmV3U2VsZWN0b3IgPSBzZWxlY3Rvcjtcblx0XHRcdFx0bmV3Q29udGV4dCA9IGNvbnRleHQ7XG5cblx0XHRcdFx0Ly8gcVNBIGNvbnNpZGVycyBlbGVtZW50cyBvdXRzaWRlIGEgc2NvcGluZyByb290IHdoZW4gZXZhbHVhdGluZyBjaGlsZCBvclxuXHRcdFx0XHQvLyBkZXNjZW5kYW50IGNvbWJpbmF0b3JzLCB3aGljaCBpcyBub3Qgd2hhdCB3ZSB3YW50LlxuXHRcdFx0XHQvLyBJbiBzdWNoIGNhc2VzLCB3ZSB3b3JrIGFyb3VuZCB0aGUgYmVoYXZpb3IgYnkgcHJlZml4aW5nIGV2ZXJ5IHNlbGVjdG9yIGluIHRoZVxuXHRcdFx0XHQvLyBsaXN0IHdpdGggYW4gSUQgc2VsZWN0b3IgcmVmZXJlbmNpbmcgdGhlIHNjb3BlIGNvbnRleHQuXG5cdFx0XHRcdC8vIFRoZSB0ZWNobmlxdWUgaGFzIHRvIGJlIHVzZWQgYXMgd2VsbCB3aGVuIGEgbGVhZGluZyBjb21iaW5hdG9yIGlzIHVzZWRcblx0XHRcdFx0Ly8gYXMgc3VjaCBzZWxlY3RvcnMgYXJlIG5vdCByZWNvZ25pemVkIGJ5IHF1ZXJ5U2VsZWN0b3JBbGwuXG5cdFx0XHRcdC8vIFRoYW5rcyB0byBBbmRyZXcgRHVwb250IGZvciB0aGlzIHRlY2huaXF1ZS5cblx0XHRcdFx0aWYgKCBub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0XHRcdCggcmRlc2NlbmQudGVzdCggc2VsZWN0b3IgKSB8fCByY29tYmluYXRvcnMudGVzdCggc2VsZWN0b3IgKSApICkge1xuXG5cdFx0XHRcdFx0Ly8gRXhwYW5kIGNvbnRleHQgZm9yIHNpYmxpbmcgc2VsZWN0b3JzXG5cdFx0XHRcdFx0bmV3Q29udGV4dCA9IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8XG5cdFx0XHRcdFx0XHRjb250ZXh0O1xuXG5cdFx0XHRcdFx0Ly8gV2UgY2FuIHVzZSA6c2NvcGUgaW5zdGVhZCBvZiB0aGUgSUQgaGFjayBpZiB0aGUgYnJvd3NlclxuXHRcdFx0XHRcdC8vIHN1cHBvcnRzIGl0ICYgaWYgd2UncmUgbm90IGNoYW5naW5nIHRoZSBjb250ZXh0LlxuXHRcdFx0XHRcdGlmICggbmV3Q29udGV4dCAhPT0gY29udGV4dCB8fCAhc3VwcG9ydC5zY29wZSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gQ2FwdHVyZSB0aGUgY29udGV4dCBJRCwgc2V0dGluZyBpdCBmaXJzdCBpZiBuZWNlc3Nhcnlcblx0XHRcdFx0XHRcdGlmICggKCBuaWQgPSBjb250ZXh0LmdldEF0dHJpYnV0ZSggXCJpZFwiICkgKSApIHtcblx0XHRcdFx0XHRcdFx0bmlkID0gbmlkLnJlcGxhY2UoIHJjc3Nlc2NhcGUsIGZjc3Nlc2NhcGUgKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdGNvbnRleHQuc2V0QXR0cmlidXRlKCBcImlkXCIsICggbmlkID0gZXhwYW5kbyApICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gUHJlZml4IGV2ZXJ5IHNlbGVjdG9yIGluIHRoZSBsaXN0XG5cdFx0XHRcdFx0Z3JvdXBzID0gdG9rZW5pemUoIHNlbGVjdG9yICk7XG5cdFx0XHRcdFx0aSA9IGdyb3Vwcy5sZW5ndGg7XG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRncm91cHNbIGkgXSA9ICggbmlkID8gXCIjXCIgKyBuaWQgOiBcIjpzY29wZVwiICkgKyBcIiBcIiArXG5cdFx0XHRcdFx0XHRcdHRvU2VsZWN0b3IoIGdyb3Vwc1sgaSBdICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG5ld1NlbGVjdG9yID0gZ3JvdXBzLmpvaW4oIFwiLFwiICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsXG5cdFx0XHRcdFx0XHRuZXdDb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIG5ld1NlbGVjdG9yIClcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHR9IGNhdGNoICggcXNhRXJyb3IgKSB7XG5cdFx0XHRcdFx0bm9ubmF0aXZlU2VsZWN0b3JDYWNoZSggc2VsZWN0b3IsIHRydWUgKTtcblx0XHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0XHRpZiAoIG5pZCA9PT0gZXhwYW5kbyApIHtcblx0XHRcdFx0XHRcdGNvbnRleHQucmVtb3ZlQXR0cmlidXRlKCBcImlkXCIgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBBbGwgb3RoZXJzXG5cdHJldHVybiBzZWxlY3QoIHNlbGVjdG9yLnJlcGxhY2UoIHJ0cmltLCBcIiQxXCIgKSwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApO1xufVxuXG4vKipcbiAqIENyZWF0ZSBrZXktdmFsdWUgY2FjaGVzIG9mIGxpbWl0ZWQgc2l6ZVxuICogQHJldHVybnMge2Z1bmN0aW9uKHN0cmluZywgb2JqZWN0KX0gUmV0dXJucyB0aGUgT2JqZWN0IGRhdGEgYWZ0ZXIgc3RvcmluZyBpdCBvbiBpdHNlbGYgd2l0aFxuICpcdHByb3BlcnR5IG5hbWUgdGhlIChzcGFjZS1zdWZmaXhlZCkgc3RyaW5nIGFuZCAoaWYgdGhlIGNhY2hlIGlzIGxhcmdlciB0aGFuIEV4cHIuY2FjaGVMZW5ndGgpXG4gKlx0ZGVsZXRpbmcgdGhlIG9sZGVzdCBlbnRyeVxuICovXG5mdW5jdGlvbiBjcmVhdGVDYWNoZSgpIHtcblx0dmFyIGtleXMgPSBbXTtcblxuXHRmdW5jdGlvbiBjYWNoZSgga2V5LCB2YWx1ZSApIHtcblxuXHRcdC8vIFVzZSAoa2V5ICsgXCIgXCIpIHRvIGF2b2lkIGNvbGxpc2lvbiB3aXRoIG5hdGl2ZSBwcm90b3R5cGUgcHJvcGVydGllcyAoc2VlIElzc3VlICMxNTcpXG5cdFx0aWYgKCBrZXlzLnB1c2goIGtleSArIFwiIFwiICkgPiBFeHByLmNhY2hlTGVuZ3RoICkge1xuXG5cdFx0XHQvLyBPbmx5IGtlZXAgdGhlIG1vc3QgcmVjZW50IGVudHJpZXNcblx0XHRcdGRlbGV0ZSBjYWNoZVsga2V5cy5zaGlmdCgpIF07XG5cdFx0fVxuXHRcdHJldHVybiAoIGNhY2hlWyBrZXkgKyBcIiBcIiBdID0gdmFsdWUgKTtcblx0fVxuXHRyZXR1cm4gY2FjaGU7XG59XG5cbi8qKlxuICogTWFyayBhIGZ1bmN0aW9uIGZvciBzcGVjaWFsIHVzZSBieSBTaXp6bGVcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFRoZSBmdW5jdGlvbiB0byBtYXJrXG4gKi9cbmZ1bmN0aW9uIG1hcmtGdW5jdGlvbiggZm4gKSB7XG5cdGZuWyBleHBhbmRvIF0gPSB0cnVlO1xuXHRyZXR1cm4gZm47XG59XG5cbi8qKlxuICogU3VwcG9ydCB0ZXN0aW5nIHVzaW5nIGFuIGVsZW1lbnRcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGZuIFBhc3NlZCB0aGUgY3JlYXRlZCBlbGVtZW50IGFuZCByZXR1cm5zIGEgYm9vbGVhbiByZXN1bHRcbiAqL1xuZnVuY3Rpb24gYXNzZXJ0KCBmbiApIHtcblx0dmFyIGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJmaWVsZHNldFwiICk7XG5cblx0dHJ5IHtcblx0XHRyZXR1cm4gISFmbiggZWwgKTtcblx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9IGZpbmFsbHkge1xuXG5cdFx0Ly8gUmVtb3ZlIGZyb20gaXRzIHBhcmVudCBieSBkZWZhdWx0XG5cdFx0aWYgKCBlbC5wYXJlbnROb2RlICkge1xuXHRcdFx0ZWwucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggZWwgKTtcblx0XHR9XG5cblx0XHQvLyByZWxlYXNlIG1lbW9yeSBpbiBJRVxuXHRcdGVsID0gbnVsbDtcblx0fVxufVxuXG4vKipcbiAqIEFkZHMgdGhlIHNhbWUgaGFuZGxlciBmb3IgYWxsIG9mIHRoZSBzcGVjaWZpZWQgYXR0cnNcbiAqIEBwYXJhbSB7U3RyaW5nfSBhdHRycyBQaXBlLXNlcGFyYXRlZCBsaXN0IG9mIGF0dHJpYnV0ZXNcbiAqIEBwYXJhbSB7RnVuY3Rpb259IGhhbmRsZXIgVGhlIG1ldGhvZCB0aGF0IHdpbGwgYmUgYXBwbGllZFxuICovXG5mdW5jdGlvbiBhZGRIYW5kbGUoIGF0dHJzLCBoYW5kbGVyICkge1xuXHR2YXIgYXJyID0gYXR0cnMuc3BsaXQoIFwifFwiICksXG5cdFx0aSA9IGFyci5sZW5ndGg7XG5cblx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0RXhwci5hdHRySGFuZGxlWyBhcnJbIGkgXSBdID0gaGFuZGxlcjtcblx0fVxufVxuXG4vKipcbiAqIENoZWNrcyBkb2N1bWVudCBvcmRlciBvZiB0d28gc2libGluZ3NcbiAqIEBwYXJhbSB7RWxlbWVudH0gYVxuICogQHBhcmFtIHtFbGVtZW50fSBiXG4gKiBAcmV0dXJucyB7TnVtYmVyfSBSZXR1cm5zIGxlc3MgdGhhbiAwIGlmIGEgcHJlY2VkZXMgYiwgZ3JlYXRlciB0aGFuIDAgaWYgYSBmb2xsb3dzIGJcbiAqL1xuZnVuY3Rpb24gc2libGluZ0NoZWNrKCBhLCBiICkge1xuXHR2YXIgY3VyID0gYiAmJiBhLFxuXHRcdGRpZmYgPSBjdXIgJiYgYS5ub2RlVHlwZSA9PT0gMSAmJiBiLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRhLnNvdXJjZUluZGV4IC0gYi5zb3VyY2VJbmRleDtcblxuXHQvLyBVc2UgSUUgc291cmNlSW5kZXggaWYgYXZhaWxhYmxlIG9uIGJvdGggbm9kZXNcblx0aWYgKCBkaWZmICkge1xuXHRcdHJldHVybiBkaWZmO1xuXHR9XG5cblx0Ly8gQ2hlY2sgaWYgYiBmb2xsb3dzIGFcblx0aWYgKCBjdXIgKSB7XG5cdFx0d2hpbGUgKCAoIGN1ciA9IGN1ci5uZXh0U2libGluZyApICkge1xuXHRcdFx0aWYgKCBjdXIgPT09IGIgKSB7XG5cdFx0XHRcdHJldHVybiAtMTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gYSA/IDEgOiAtMTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGlucHV0IHR5cGVzXG4gKiBAcGFyYW0ge1N0cmluZ30gdHlwZVxuICovXG5mdW5jdGlvbiBjcmVhdGVJbnB1dFBzZXVkbyggdHlwZSApIHtcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdHJldHVybiBuYW1lID09PSBcImlucHV0XCIgJiYgZWxlbS50eXBlID09PSB0eXBlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgYnV0dG9uc1xuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQnV0dG9uUHNldWRvKCB0eXBlICkge1xuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0cmV0dXJuICggbmFtZSA9PT0gXCJpbnB1dFwiIHx8IG5hbWUgPT09IFwiYnV0dG9uXCIgKSAmJiBlbGVtLnR5cGUgPT09IHR5cGU7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciA6ZW5hYmxlZC86ZGlzYWJsZWRcbiAqIEBwYXJhbSB7Qm9vbGVhbn0gZGlzYWJsZWQgdHJ1ZSBmb3IgOmRpc2FibGVkOyBmYWxzZSBmb3IgOmVuYWJsZWRcbiAqL1xuZnVuY3Rpb24gY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIGRpc2FibGVkICkge1xuXG5cdC8vIEtub3duIDpkaXNhYmxlZCBmYWxzZSBwb3NpdGl2ZXM6IGZpZWxkc2V0W2Rpc2FibGVkXSA+IGxlZ2VuZDpudGgtb2YtdHlwZShuKzIpIDpjYW4tZGlzYWJsZVxuXHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBPbmx5IGNlcnRhaW4gZWxlbWVudHMgY2FuIG1hdGNoIDplbmFibGVkIG9yIDpkaXNhYmxlZFxuXHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3NjcmlwdGluZy5odG1sI3NlbGVjdG9yLWVuYWJsZWRcblx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRpbmcuaHRtbCNzZWxlY3Rvci1kaXNhYmxlZFxuXHRcdGlmICggXCJmb3JtXCIgaW4gZWxlbSApIHtcblxuXHRcdFx0Ly8gQ2hlY2sgZm9yIGluaGVyaXRlZCBkaXNhYmxlZG5lc3Mgb24gcmVsZXZhbnQgbm9uLWRpc2FibGVkIGVsZW1lbnRzOlxuXHRcdFx0Ly8gKiBsaXN0ZWQgZm9ybS1hc3NvY2lhdGVkIGVsZW1lbnRzIGluIGEgZGlzYWJsZWQgZmllbGRzZXRcblx0XHRcdC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjYXRlZ29yeS1saXN0ZWRcblx0XHRcdC8vICAgaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2UvZm9ybXMuaHRtbCNjb25jZXB0LWZlLWRpc2FibGVkXG5cdFx0XHQvLyAqIG9wdGlvbiBlbGVtZW50cyBpbiBhIGRpc2FibGVkIG9wdGdyb3VwXG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY29uY2VwdC1vcHRpb24tZGlzYWJsZWRcblx0XHRcdC8vIEFsbCBzdWNoIGVsZW1lbnRzIGhhdmUgYSBcImZvcm1cIiBwcm9wZXJ0eS5cblx0XHRcdGlmICggZWxlbS5wYXJlbnROb2RlICYmIGVsZW0uZGlzYWJsZWQgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdC8vIE9wdGlvbiBlbGVtZW50cyBkZWZlciB0byBhIHBhcmVudCBvcHRncm91cCBpZiBwcmVzZW50XG5cdFx0XHRcdGlmICggXCJsYWJlbFwiIGluIGVsZW0gKSB7XG5cdFx0XHRcdFx0aWYgKCBcImxhYmVsXCIgaW4gZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0ucGFyZW50Tm9kZS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA2IC0gMTFcblx0XHRcdFx0Ly8gVXNlIHRoZSBpc0Rpc2FibGVkIHNob3J0Y3V0IHByb3BlcnR5IHRvIGNoZWNrIGZvciBkaXNhYmxlZCBmaWVsZHNldCBhbmNlc3RvcnNcblx0XHRcdFx0cmV0dXJuIGVsZW0uaXNEaXNhYmxlZCA9PT0gZGlzYWJsZWQgfHxcblxuXHRcdFx0XHRcdC8vIFdoZXJlIHRoZXJlIGlzIG5vIGlzRGlzYWJsZWQsIGNoZWNrIG1hbnVhbGx5XG5cdFx0XHRcdFx0LyoganNoaW50IC1XMDE4ICovXG5cdFx0XHRcdFx0ZWxlbS5pc0Rpc2FibGVkICE9PSAhZGlzYWJsZWQgJiZcblx0XHRcdFx0XHRpbkRpc2FibGVkRmllbGRzZXQoIGVsZW0gKSA9PT0gZGlzYWJsZWQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblxuXHRcdC8vIFRyeSB0byB3aW5ub3cgb3V0IGVsZW1lbnRzIHRoYXQgY2FuJ3QgYmUgZGlzYWJsZWQgYmVmb3JlIHRydXN0aW5nIHRoZSBkaXNhYmxlZCBwcm9wZXJ0eS5cblx0XHQvLyBTb21lIHZpY3RpbXMgZ2V0IGNhdWdodCBpbiBvdXIgbmV0IChsYWJlbCwgbGVnZW5kLCBtZW51LCB0cmFjayksIGJ1dCBpdCBzaG91bGRuJ3Rcblx0XHQvLyBldmVuIGV4aXN0IG9uIHRoZW0sIGxldCBhbG9uZSBoYXZlIGEgYm9vbGVhbiB2YWx1ZS5cblx0XHR9IGVsc2UgaWYgKCBcImxhYmVsXCIgaW4gZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtLmRpc2FibGVkID09PSBkaXNhYmxlZDtcblx0XHR9XG5cblx0XHQvLyBSZW1haW5pbmcgZWxlbWVudHMgYXJlIG5laXRoZXIgOmVuYWJsZWQgbm9yIDpkaXNhYmxlZFxuXHRcdHJldHVybiBmYWxzZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIHBvc2l0aW9uYWxzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmblxuICovXG5mdW5jdGlvbiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmbiApIHtcblx0cmV0dXJuIG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIGFyZ3VtZW50ICkge1xuXHRcdGFyZ3VtZW50ID0gK2FyZ3VtZW50O1xuXHRcdHJldHVybiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkge1xuXHRcdFx0dmFyIGosXG5cdFx0XHRcdG1hdGNoSW5kZXhlcyA9IGZuKCBbXSwgc2VlZC5sZW5ndGgsIGFyZ3VtZW50ICksXG5cdFx0XHRcdGkgPSBtYXRjaEluZGV4ZXMubGVuZ3RoO1xuXG5cdFx0XHQvLyBNYXRjaCBlbGVtZW50cyBmb3VuZCBhdCB0aGUgc3BlY2lmaWVkIGluZGV4ZXNcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoIHNlZWRbICggaiA9IG1hdGNoSW5kZXhlc1sgaSBdICkgXSApIHtcblx0XHRcdFx0XHRzZWVkWyBqIF0gPSAhKCBtYXRjaGVzWyBqIF0gPSBzZWVkWyBqIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSApO1xufVxuXG4vKipcbiAqIENoZWNrcyBhIG5vZGUgZm9yIHZhbGlkaXR5IGFzIGEgU2l6emxlIGNvbnRleHRcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3Q9fSBjb250ZXh0XG4gKiBAcmV0dXJucyB7RWxlbWVudHxPYmplY3R8Qm9vbGVhbn0gVGhlIGlucHV0IG5vZGUgaWYgYWNjZXB0YWJsZSwgb3RoZXJ3aXNlIGEgZmFsc3kgdmFsdWVcbiAqL1xuZnVuY3Rpb24gdGVzdENvbnRleHQoIGNvbnRleHQgKSB7XG5cdHJldHVybiBjb250ZXh0ICYmIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICYmIGNvbnRleHQ7XG59XG5cbi8vIEV4cG9zZSBzdXBwb3J0IHZhcnMgZm9yIGNvbnZlbmllbmNlXG5zdXBwb3J0ID0gU2l6emxlLnN1cHBvcnQgPSB7fTtcblxuLyoqXG4gKiBEZXRlY3RzIFhNTCBub2Rlc1xuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdH0gZWxlbSBBbiBlbGVtZW50IG9yIGEgZG9jdW1lbnRcbiAqIEByZXR1cm5zIHtCb29sZWFufSBUcnVlIGlmZiBlbGVtIGlzIGEgbm9uLUhUTUwgWE1MIG5vZGVcbiAqL1xuaXNYTUwgPSBTaXp6bGUuaXNYTUwgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0dmFyIG5hbWVzcGFjZSA9IGVsZW0gJiYgZWxlbS5uYW1lc3BhY2VVUkksXG5cdFx0ZG9jRWxlbSA9IGVsZW0gJiYgKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApLmRvY3VtZW50RWxlbWVudDtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PThcblx0Ly8gQXNzdW1lIEhUTUwgd2hlbiBkb2N1bWVudEVsZW1lbnQgZG9lc24ndCB5ZXQgZXhpc3QsIHN1Y2ggYXMgaW5zaWRlIGxvYWRpbmcgaWZyYW1lc1xuXHQvLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvNDgzM1xuXHRyZXR1cm4gIXJodG1sLnRlc3QoIG5hbWVzcGFjZSB8fCBkb2NFbGVtICYmIGRvY0VsZW0ubm9kZU5hbWUgfHwgXCJIVE1MXCIgKTtcbn07XG5cbi8qKlxuICogU2V0cyBkb2N1bWVudC1yZWxhdGVkIHZhcmlhYmxlcyBvbmNlIGJhc2VkIG9uIHRoZSBjdXJyZW50IGRvY3VtZW50XG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0fSBbZG9jXSBBbiBlbGVtZW50IG9yIGRvY3VtZW50IG9iamVjdCB0byB1c2UgdG8gc2V0IHRoZSBkb2N1bWVudFxuICogQHJldHVybnMge09iamVjdH0gUmV0dXJucyB0aGUgY3VycmVudCBkb2N1bWVudFxuICovXG5zZXREb2N1bWVudCA9IFNpenpsZS5zZXREb2N1bWVudCA9IGZ1bmN0aW9uKCBub2RlICkge1xuXHR2YXIgaGFzQ29tcGFyZSwgc3ViV2luZG93LFxuXHRcdGRvYyA9IG5vZGUgPyBub2RlLm93bmVyRG9jdW1lbnQgfHwgbm9kZSA6IHByZWZlcnJlZERvYztcblxuXHQvLyBSZXR1cm4gZWFybHkgaWYgZG9jIGlzIGludmFsaWQgb3IgYWxyZWFkeSBzZWxlY3RlZFxuXHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRpZiAoIGRvYyA9PSBkb2N1bWVudCB8fCBkb2Mubm9kZVR5cGUgIT09IDkgfHwgIWRvYy5kb2N1bWVudEVsZW1lbnQgKSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50O1xuXHR9XG5cblx0Ly8gVXBkYXRlIGdsb2JhbCB2YXJpYWJsZXNcblx0ZG9jdW1lbnQgPSBkb2M7XG5cdGRvY0VsZW0gPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cdGRvY3VtZW50SXNIVE1MID0gIWlzWE1MKCBkb2N1bWVudCApO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTIgLSAxOCtcblx0Ly8gQWNjZXNzaW5nIGlmcmFtZSBkb2N1bWVudHMgYWZ0ZXIgdW5sb2FkIHRocm93cyBcInBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3JzIChqUXVlcnkgIzEzOTM2KVxuXHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRpZiAoIHByZWZlcnJlZERvYyAhPSBkb2N1bWVudCAmJlxuXHRcdCggc3ViV2luZG93ID0gZG9jdW1lbnQuZGVmYXVsdFZpZXcgKSAmJiBzdWJXaW5kb3cudG9wICE9PSBzdWJXaW5kb3cgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSAxMSwgRWRnZVxuXHRcdGlmICggc3ViV2luZG93LmFkZEV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0XHRzdWJXaW5kb3cuYWRkRXZlbnRMaXN0ZW5lciggXCJ1bmxvYWRcIiwgdW5sb2FkSGFuZGxlciwgZmFsc2UgKTtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMCBvbmx5XG5cdFx0fSBlbHNlIGlmICggc3ViV2luZG93LmF0dGFjaEV2ZW50ICkge1xuXHRcdFx0c3ViV2luZG93LmF0dGFjaEV2ZW50KCBcIm9udW5sb2FkXCIsIHVubG9hZEhhbmRsZXIgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBJRSA4IC0gMTErLCBFZGdlIDEyIC0gMTgrLCBDaHJvbWUgPD0xNiAtIDI1IG9ubHksIEZpcmVmb3ggPD0zLjYgLSAzMSBvbmx5LFxuXHQvLyBTYWZhcmkgNCAtIDUgb25seSwgT3BlcmEgPD0xMS42IC0gMTIueCBvbmx5XG5cdC8vIElFL0VkZ2UgJiBvbGRlciBicm93c2VycyBkb24ndCBzdXBwb3J0IHRoZSA6c2NvcGUgcHNldWRvLWNsYXNzLlxuXHQvLyBTdXBwb3J0OiBTYWZhcmkgNi4wIG9ubHlcblx0Ly8gU2FmYXJpIDYuMCBzdXBwb3J0cyA6c2NvcGUgYnV0IGl0J3MgYW4gYWxpYXMgb2YgOnJvb3QgdGhlcmUuXG5cdHN1cHBvcnQuc2NvcGUgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgKTtcblx0XHRyZXR1cm4gdHlwZW9mIGVsLnF1ZXJ5U2VsZWN0b3JBbGwgIT09IFwidW5kZWZpbmVkXCIgJiZcblx0XHRcdCFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIjpzY29wZSBmaWVsZHNldCBkaXZcIiApLmxlbmd0aDtcblx0fSApO1xuXG5cdC8qIEF0dHJpYnV0ZXNcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIFN1cHBvcnQ6IElFPDhcblx0Ly8gVmVyaWZ5IHRoYXQgZ2V0QXR0cmlidXRlIHJlYWxseSByZXR1cm5zIGF0dHJpYnV0ZXMgYW5kIG5vdCBwcm9wZXJ0aWVzXG5cdC8vIChleGNlcHRpbmcgSUU4IGJvb2xlYW5zKVxuXHRzdXBwb3J0LmF0dHJpYnV0ZXMgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRlbC5jbGFzc05hbWUgPSBcImlcIjtcblx0XHRyZXR1cm4gIWVsLmdldEF0dHJpYnV0ZSggXCJjbGFzc05hbWVcIiApO1xuXHR9ICk7XG5cblx0LyogZ2V0RWxlbWVudChzKUJ5KlxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gQ2hlY2sgaWYgZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCIqXCIpIHJldHVybnMgb25seSBlbGVtZW50c1xuXHRzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1lID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZWwuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoIFwiXCIgKSApO1xuXHRcdHJldHVybiAhZWwuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIFwiKlwiICkubGVuZ3RoO1xuXHR9ICk7XG5cblx0Ly8gU3VwcG9ydDogSUU8OVxuXHRzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgPSBybmF0aXZlLnRlc3QoIGRvY3VtZW50LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgKTtcblxuXHQvLyBTdXBwb3J0OiBJRTwxMFxuXHQvLyBDaGVjayBpZiBnZXRFbGVtZW50QnlJZCByZXR1cm5zIGVsZW1lbnRzIGJ5IG5hbWVcblx0Ly8gVGhlIGJyb2tlbiBnZXRFbGVtZW50QnlJZCBtZXRob2RzIGRvbid0IHBpY2sgdXAgcHJvZ3JhbW1hdGljYWxseS1zZXQgbmFtZXMsXG5cdC8vIHNvIHVzZSBhIHJvdW5kYWJvdXQgZ2V0RWxlbWVudHNCeU5hbWUgdGVzdFxuXHRzdXBwb3J0LmdldEJ5SWQgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmlkID0gZXhwYW5kbztcblx0XHRyZXR1cm4gIWRvY3VtZW50LmdldEVsZW1lbnRzQnlOYW1lIHx8ICFkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSggZXhwYW5kbyApLmxlbmd0aDtcblx0fSApO1xuXG5cdC8vIElEIGZpbHRlciBhbmQgZmluZFxuXHRpZiAoIHN1cHBvcnQuZ2V0QnlJZCApIHtcblx0XHRFeHByLmZpbHRlclsgXCJJRFwiIF0gPSBmdW5jdGlvbiggaWQgKSB7XG5cdFx0XHR2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBcImlkXCIgKSA9PT0gYXR0cklkO1xuXHRcdFx0fTtcblx0XHR9O1xuXHRcdEV4cHIuZmluZFsgXCJJRFwiIF0gPSBmdW5jdGlvbiggaWQsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRCeUlkICE9PSBcInVuZGVmaW5lZFwiICYmIGRvY3VtZW50SXNIVE1MICkge1xuXHRcdFx0XHR2YXIgZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIGlkICk7XG5cdFx0XHRcdHJldHVybiBlbGVtID8gWyBlbGVtIF0gOiBbXTtcblx0XHRcdH1cblx0XHR9O1xuXHR9IGVsc2Uge1xuXHRcdEV4cHIuZmlsdGVyWyBcIklEXCIgXSA9ICBmdW5jdGlvbiggaWQgKSB7XG5cdFx0XHR2YXIgYXR0cklkID0gaWQucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0dmFyIG5vZGUgPSB0eXBlb2YgZWxlbS5nZXRBdHRyaWJ1dGVOb2RlICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBcImlkXCIgKTtcblx0XHRcdFx0cmV0dXJuIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gYXR0cklkO1xuXHRcdFx0fTtcblx0XHR9O1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgNiAtIDcgb25seVxuXHRcdC8vIGdldEVsZW1lbnRCeUlkIGlzIG5vdCByZWxpYWJsZSBhcyBhIGZpbmQgc2hvcnRjdXRcblx0XHRFeHByLmZpbmRbIFwiSURcIiBdID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdFx0dmFyIG5vZGUsIGksIGVsZW1zLFxuXHRcdFx0XHRcdGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApO1xuXG5cdFx0XHRcdGlmICggZWxlbSApIHtcblxuXHRcdFx0XHRcdC8vIFZlcmlmeSB0aGUgaWQgYXR0cmlidXRlXG5cdFx0XHRcdFx0bm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0aWYgKCBub2RlICYmIG5vZGUudmFsdWUgPT09IGlkICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIFsgZWxlbSBdO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEZhbGwgYmFjayBvbiBnZXRFbGVtZW50c0J5TmFtZVxuXHRcdFx0XHRcdGVsZW1zID0gY29udGV4dC5nZXRFbGVtZW50c0J5TmFtZSggaWQgKTtcblx0XHRcdFx0XHRpID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoICggZWxlbSA9IGVsZW1zWyBpKysgXSApICkge1xuXHRcdFx0XHRcdFx0bm9kZSA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0XHRpZiAoIG5vZGUgJiYgbm9kZS52YWx1ZSA9PT0gaWQgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBbIGVsZW0gXTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gW107XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxuXG5cdC8vIFRhZ1xuXHRFeHByLmZpbmRbIFwiVEFHXCIgXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgP1xuXHRcdGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7XG5cdFx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdFx0XHRyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7XG5cblx0XHRcdC8vIERvY3VtZW50RnJhZ21lbnQgbm9kZXMgZG9uJ3QgaGF2ZSBnRUJUTlxuXHRcdFx0fSBlbHNlIGlmICggc3VwcG9ydC5xc2EgKSB7XG5cdFx0XHRcdHJldHVybiBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyApO1xuXHRcdFx0fVxuXHRcdH0gOlxuXG5cdFx0ZnVuY3Rpb24oIHRhZywgY29udGV4dCApIHtcblx0XHRcdHZhciBlbGVtLFxuXHRcdFx0XHR0bXAgPSBbXSxcblx0XHRcdFx0aSA9IDAsXG5cblx0XHRcdFx0Ly8gQnkgaGFwcHkgY29pbmNpZGVuY2UsIGEgKGJyb2tlbikgZ0VCVE4gYXBwZWFycyBvbiBEb2N1bWVudEZyYWdtZW50IG5vZGVzIHRvb1xuXHRcdFx0XHRyZXN1bHRzID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnICk7XG5cblx0XHRcdC8vIEZpbHRlciBvdXQgcG9zc2libGUgY29tbWVudHNcblx0XHRcdGlmICggdGFnID09PSBcIipcIiApIHtcblx0XHRcdFx0d2hpbGUgKCAoIGVsZW0gPSByZXN1bHRzWyBpKysgXSApICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0XHRcdHRtcC5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHRtcDtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdH07XG5cblx0Ly8gQ2xhc3Ncblx0RXhwci5maW5kWyBcIkNMQVNTXCIgXSA9IHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJiBmdW5jdGlvbiggY2xhc3NOYW1lLCBjb250ZXh0ICkge1xuXHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdHJldHVybiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUoIGNsYXNzTmFtZSApO1xuXHRcdH1cblx0fTtcblxuXHQvKiBRU0EvbWF0Y2hlc1NlbGVjdG9yXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBRU0EgYW5kIG1hdGNoZXNTZWxlY3RvciBzdXBwb3J0XG5cblx0Ly8gbWF0Y2hlc1NlbGVjdG9yKDphY3RpdmUpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChJRTkvT3BlcmEgMTEuNSlcblx0cmJ1Z2d5TWF0Y2hlcyA9IFtdO1xuXG5cdC8vIHFTYSg6Zm9jdXMpIHJlcG9ydHMgZmFsc2Ugd2hlbiB0cnVlIChDaHJvbWUgMjEpXG5cdC8vIFdlIGFsbG93IHRoaXMgYmVjYXVzZSBvZiBhIGJ1ZyBpbiBJRTgvOSB0aGF0IHRocm93cyBhbiBlcnJvclxuXHQvLyB3aGVuZXZlciBgZG9jdW1lbnQuYWN0aXZlRWxlbWVudGAgaXMgYWNjZXNzZWQgb24gYW4gaWZyYW1lXG5cdC8vIFNvLCB3ZSBhbGxvdyA6Zm9jdXMgdG8gcGFzcyB0aHJvdWdoIFFTQSBhbGwgdGhlIHRpbWUgdG8gYXZvaWQgdGhlIElFIGVycm9yXG5cdC8vIFNlZSBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTMzNzhcblx0cmJ1Z2d5UVNBID0gW107XG5cblx0aWYgKCAoIHN1cHBvcnQucXNhID0gcm5hdGl2ZS50ZXN0KCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsICkgKSApIHtcblxuXHRcdC8vIEJ1aWxkIFFTQSByZWdleFxuXHRcdC8vIFJlZ2V4IHN0cmF0ZWd5IGFkb3B0ZWQgZnJvbSBEaWVnbyBQZXJpbmlcblx0XHRhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblxuXHRcdFx0dmFyIGlucHV0O1xuXG5cdFx0XHQvLyBTZWxlY3QgaXMgc2V0IHRvIGVtcHR5IHN0cmluZyBvbiBwdXJwb3NlXG5cdFx0XHQvLyBUaGlzIGlzIHRvIHRlc3QgSUUncyB0cmVhdG1lbnQgb2Ygbm90IGV4cGxpY2l0bHlcblx0XHRcdC8vIHNldHRpbmcgYSBib29sZWFuIGNvbnRlbnQgYXR0cmlidXRlLFxuXHRcdFx0Ly8gc2luY2UgaXRzIHByZXNlbmNlIHNob3VsZCBiZSBlbm91Z2hcblx0XHRcdC8vIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMjM1OVxuXHRcdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5pbm5lckhUTUwgPSBcIjxhIGlkPSdcIiArIGV4cGFuZG8gKyBcIic+PC9hPlwiICtcblx0XHRcdFx0XCI8c2VsZWN0IGlkPSdcIiArIGV4cGFuZG8gKyBcIi1cXHJcXFxcJyBtc2FsbG93Y2FwdHVyZT0nJz5cIiArXG5cdFx0XHRcdFwiPG9wdGlvbiBzZWxlY3RlZD0nJz48L29wdGlvbj48L3NlbGVjdD5cIjtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4LCBPcGVyYSAxMS0xMi4xNlxuXHRcdFx0Ly8gTm90aGluZyBzaG91bGQgYmUgc2VsZWN0ZWQgd2hlbiBlbXB0eSBzdHJpbmdzIGZvbGxvdyBePSBvciAkPSBvciAqPVxuXHRcdFx0Ly8gVGhlIHRlc3QgYXR0cmlidXRlIG11c3QgYmUgdW5rbm93biBpbiBPcGVyYSBidXQgXCJzYWZlXCIgZm9yIFdpblJUXG5cdFx0XHQvLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L2llL2hoNDY1Mzg4LmFzcHgjYXR0cmlidXRlX3NlY3Rpb25cblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbCggXCJbbXNhbGxvd2NhcHR1cmVePScnXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJbKl4kXT1cIiArIHdoaXRlc3BhY2UgKyBcIiooPzonJ3xcXFwiXFxcIilcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRThcblx0XHRcdC8vIEJvb2xlYW4gYXR0cmlidXRlcyBhbmQgXCJ2YWx1ZVwiIGFyZSBub3QgdHJlYXRlZCBjb3JyZWN0bHlcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW3NlbGVjdGVkXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKig/OnZhbHVlfFwiICsgYm9vbGVhbnMgKyBcIilcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWU8MjksIEFuZHJvaWQ8NC40LCBTYWZhcmk8Ny4wKywgaU9TPDcuMCssIFBoYW50b21KUzwxLjkuOCtcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW2lkfj1cIiArIGV4cGFuZG8gKyBcIi1dXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIn49XCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE1IC0gMTgrXG5cdFx0XHQvLyBJRSAxMS9FZGdlIGRvbid0IGZpbmQgZWxlbWVudHMgb24gYSBgW25hbWU9JyddYCBxdWVyeSBpbiBzb21lIGNhc2VzLlxuXHRcdFx0Ly8gQWRkaW5nIGEgdGVtcG9yYXJ5IGF0dHJpYnV0ZSB0byB0aGUgZG9jdW1lbnQgYmVmb3JlIHRoZSBzZWxlY3Rpb24gd29ya3Ncblx0XHRcdC8vIGFyb3VuZCB0aGUgaXNzdWUuXG5cdFx0XHQvLyBJbnRlcmVzdGluZ2x5LCBJRSAxMCAmIG9sZGVyIGRvbid0IHNlZW0gdG8gaGF2ZSB0aGUgaXNzdWUuXG5cdFx0XHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJcIiApO1xuXHRcdFx0ZWwuYXBwZW5kQ2hpbGQoIGlucHV0ICk7XG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIltuYW1lPScnXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJcXFxcW1wiICsgd2hpdGVzcGFjZSArIFwiKm5hbWVcIiArIHdoaXRlc3BhY2UgKyBcIio9XCIgK1xuXHRcdFx0XHRcdHdoaXRlc3BhY2UgKyBcIiooPzonJ3xcXFwiXFxcIilcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBXZWJraXQvT3BlcmEgLSA6Y2hlY2tlZCBzaG91bGQgcmV0dXJuIHNlbGVjdGVkIG9wdGlvbiBlbGVtZW50c1xuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1zZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWRcblx0XHRcdC8vIElFOCB0aHJvd3MgZXJyb3IgaGVyZSBhbmQgd2lsbCBub3Qgc2VlIGxhdGVyIHRlc3RzXG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIjpjaGVja2VkXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIjpjaGVja2VkXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDgrLCBpT1MgOCtcblx0XHRcdC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY4NTFcblx0XHRcdC8vIEluLXBhZ2UgYHNlbGVjdG9yI2lkIHNpYmxpbmctY29tYmluYXRvciBzZWxlY3RvcmAgZmFpbHNcblx0XHRcdGlmICggIWVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiYSNcIiArIGV4cGFuZG8gKyBcIisqXCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIi4jLitbK35dXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTMuNiAtIDUgb25seVxuXHRcdFx0Ly8gT2xkIEZpcmVmb3ggZG9lc24ndCB0aHJvdyBvbiBhIGJhZGx5LWVzY2FwZWQgaWRlbnRpZmllci5cblx0XHRcdGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiXFxcXFxcZlwiICk7XG5cdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJbXFxcXHJcXFxcblxcXFxmXVwiICk7XG5cdFx0fSApO1xuXG5cdFx0YXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0XHRlbC5pbm5lckhUTUwgPSBcIjxhIGhyZWY9JycgZGlzYWJsZWQ9J2Rpc2FibGVkJz48L2E+XCIgK1xuXHRcdFx0XHRcIjxzZWxlY3QgZGlzYWJsZWQ9J2Rpc2FibGVkJz48b3B0aW9uLz48L3NlbGVjdD5cIjtcblxuXHRcdFx0Ly8gU3VwcG9ydDogV2luZG93cyA4IE5hdGl2ZSBBcHBzXG5cdFx0XHQvLyBUaGUgdHlwZSBhbmQgbmFtZSBhdHRyaWJ1dGVzIGFyZSByZXN0cmljdGVkIGR1cmluZyAuaW5uZXJIVE1MIGFzc2lnbm1lbnRcblx0XHRcdHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXHRcdFx0aW5wdXQuc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgXCJoaWRkZW5cIiApO1xuXHRcdFx0ZWwuYXBwZW5kQ2hpbGQoIGlucHV0ICkuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJEXCIgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4XG5cdFx0XHQvLyBFbmZvcmNlIGNhc2Utc2Vuc2l0aXZpdHkgb2YgbmFtZSBhdHRyaWJ1dGVcblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbCggXCJbbmFtZT1kXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJuYW1lXCIgKyB3aGl0ZXNwYWNlICsgXCIqWypeJHwhfl0/PVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEZGIDMuNSAtIDplbmFibGVkLzpkaXNhYmxlZCBhbmQgaGlkZGVuIGVsZW1lbnRzIChoaWRkZW4gZWxlbWVudHMgYXJlIHN0aWxsIGVuYWJsZWQpXG5cdFx0XHQvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0c1xuXHRcdFx0aWYgKCBlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIjplbmFibGVkXCIgKS5sZW5ndGggIT09IDIgKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIjplbmFibGVkXCIsIFwiOmRpc2FibGVkXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU5LTExK1xuXHRcdFx0Ly8gSUUncyA6ZGlzYWJsZWQgc2VsZWN0b3IgZG9lcyBub3QgcGljayB1cCB0aGUgY2hpbGRyZW4gb2YgZGlzYWJsZWQgZmllbGRzZXRzXG5cdFx0XHRkb2NFbGVtLmFwcGVuZENoaWxkKCBlbCApLmRpc2FibGVkID0gdHJ1ZTtcblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbCggXCI6ZGlzYWJsZWRcIiApLmxlbmd0aCAhPT0gMiApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiOmVuYWJsZWRcIiwgXCI6ZGlzYWJsZWRcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBPcGVyYSAxMCAtIDExIG9ubHlcblx0XHRcdC8vIE9wZXJhIDEwLTExIGRvZXMgbm90IHRocm93IG9uIHBvc3QtY29tbWEgaW52YWxpZCBwc2V1ZG9zXG5cdFx0XHRlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIiosOnhcIiApO1xuXHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiLC4qOlwiICk7XG5cdFx0fSApO1xuXHR9XG5cblx0aWYgKCAoIHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yID0gcm5hdGl2ZS50ZXN0KCAoIG1hdGNoZXMgPSBkb2NFbGVtLm1hdGNoZXMgfHxcblx0XHRkb2NFbGVtLndlYmtpdE1hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY0VsZW0ubW96TWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5vTWF0Y2hlc1NlbGVjdG9yIHx8XG5cdFx0ZG9jRWxlbS5tc01hdGNoZXNTZWxlY3RvciApICkgKSApIHtcblxuXHRcdGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXG5cdFx0XHQvLyBDaGVjayB0byBzZWUgaWYgaXQncyBwb3NzaWJsZSB0byBkbyBtYXRjaGVzU2VsZWN0b3Jcblx0XHRcdC8vIG9uIGEgZGlzY29ubmVjdGVkIG5vZGUgKElFIDkpXG5cdFx0XHRzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoID0gbWF0Y2hlcy5jYWxsKCBlbCwgXCIqXCIgKTtcblxuXHRcdFx0Ly8gVGhpcyBzaG91bGQgZmFpbCB3aXRoIGFuIGV4Y2VwdGlvblxuXHRcdFx0Ly8gR2Vja28gZG9lcyBub3QgZXJyb3IsIHJldHVybnMgZmFsc2UgaW5zdGVhZFxuXHRcdFx0bWF0Y2hlcy5jYWxsKCBlbCwgXCJbcyE9JyddOnhcIiApO1xuXHRcdFx0cmJ1Z2d5TWF0Y2hlcy5wdXNoKCBcIiE9XCIsIHBzZXVkb3MgKTtcblx0XHR9ICk7XG5cdH1cblxuXHRyYnVnZ3lRU0EgPSByYnVnZ3lRU0EubGVuZ3RoICYmIG5ldyBSZWdFeHAoIHJidWdneVFTQS5qb2luKCBcInxcIiApICk7XG5cdHJidWdneU1hdGNoZXMgPSByYnVnZ3lNYXRjaGVzLmxlbmd0aCAmJiBuZXcgUmVnRXhwKCByYnVnZ3lNYXRjaGVzLmpvaW4oIFwifFwiICkgKTtcblxuXHQvKiBDb250YWluc1xuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cdGhhc0NvbXBhcmUgPSBybmF0aXZlLnRlc3QoIGRvY0VsZW0uY29tcGFyZURvY3VtZW50UG9zaXRpb24gKTtcblxuXHQvLyBFbGVtZW50IGNvbnRhaW5zIGFub3RoZXJcblx0Ly8gUHVycG9zZWZ1bGx5IHNlbGYtZXhjbHVzaXZlXG5cdC8vIEFzIGluLCBhbiBlbGVtZW50IGRvZXMgbm90IGNvbnRhaW4gaXRzZWxmXG5cdGNvbnRhaW5zID0gaGFzQ29tcGFyZSB8fCBybmF0aXZlLnRlc3QoIGRvY0VsZW0uY29udGFpbnMgKSA/XG5cdFx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0XHR2YXIgYWRvd24gPSBhLm5vZGVUeXBlID09PSA5ID8gYS5kb2N1bWVudEVsZW1lbnQgOiBhLFxuXHRcdFx0XHRidXAgPSBiICYmIGIucGFyZW50Tm9kZTtcblx0XHRcdHJldHVybiBhID09PSBidXAgfHwgISEoIGJ1cCAmJiBidXAubm9kZVR5cGUgPT09IDEgJiYgKFxuXHRcdFx0XHRhZG93bi5jb250YWlucyA/XG5cdFx0XHRcdFx0YWRvd24uY29udGFpbnMoIGJ1cCApIDpcblx0XHRcdFx0XHRhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICYmIGEuY29tcGFyZURvY3VtZW50UG9zaXRpb24oIGJ1cCApICYgMTZcblx0XHRcdCkgKTtcblx0XHR9IDpcblx0XHRmdW5jdGlvbiggYSwgYiApIHtcblx0XHRcdGlmICggYiApIHtcblx0XHRcdFx0d2hpbGUgKCAoIGIgPSBiLnBhcmVudE5vZGUgKSApIHtcblx0XHRcdFx0XHRpZiAoIGIgPT09IGEgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xuXG5cdC8qIFNvcnRpbmdcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIERvY3VtZW50IG9yZGVyIHNvcnRpbmdcblx0c29ydE9yZGVyID0gaGFzQ29tcGFyZSA/XG5cdGZ1bmN0aW9uKCBhLCBiICkge1xuXG5cdFx0Ly8gRmxhZyBmb3IgZHVwbGljYXRlIHJlbW92YWxcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0Ly8gU29ydCBvbiBtZXRob2QgZXhpc3RlbmNlIGlmIG9ubHkgb25lIGlucHV0IGhhcyBjb21wYXJlRG9jdW1lbnRQb3NpdGlvblxuXHRcdHZhciBjb21wYXJlID0gIWEuY29tcGFyZURvY3VtZW50UG9zaXRpb24gLSAhYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbjtcblx0XHRpZiAoIGNvbXBhcmUgKSB7XG5cdFx0XHRyZXR1cm4gY29tcGFyZTtcblx0XHR9XG5cblx0XHQvLyBDYWxjdWxhdGUgcG9zaXRpb24gaWYgYm90aCBpbnB1dHMgYmVsb25nIHRvIHRoZSBzYW1lIGRvY3VtZW50XG5cdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRjb21wYXJlID0gKCBhLm93bmVyRG9jdW1lbnQgfHwgYSApID09ICggYi5vd25lckRvY3VtZW50IHx8IGIgKSA/XG5cdFx0XHRhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBiICkgOlxuXG5cdFx0XHQvLyBPdGhlcndpc2Ugd2Uga25vdyB0aGV5IGFyZSBkaXNjb25uZWN0ZWRcblx0XHRcdDE7XG5cblx0XHQvLyBEaXNjb25uZWN0ZWQgbm9kZXNcblx0XHRpZiAoIGNvbXBhcmUgJiAxIHx8XG5cdFx0XHQoICFzdXBwb3J0LnNvcnREZXRhY2hlZCAmJiBiLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBhICkgPT09IGNvbXBhcmUgKSApIHtcblxuXHRcdFx0Ly8gQ2hvb3NlIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaXMgcmVsYXRlZCB0byBvdXIgcHJlZmVycmVkIGRvY3VtZW50XG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0aWYgKCBhID09IGRvY3VtZW50IHx8IGEub3duZXJEb2N1bWVudCA9PSBwcmVmZXJyZWREb2MgJiZcblx0XHRcdFx0Y29udGFpbnMoIHByZWZlcnJlZERvYywgYSApICkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRpZiAoIGIgPT0gZG9jdW1lbnQgfHwgYi5vd25lckRvY3VtZW50ID09IHByZWZlcnJlZERvYyAmJlxuXHRcdFx0XHRjb250YWlucyggcHJlZmVycmVkRG9jLCBiICkgKSB7XG5cdFx0XHRcdHJldHVybiAxO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYWludGFpbiBvcmlnaW5hbCBvcmRlclxuXHRcdFx0cmV0dXJuIHNvcnRJbnB1dCA/XG5cdFx0XHRcdCggaW5kZXhPZiggc29ydElucHV0LCBhICkgLSBpbmRleE9mKCBzb3J0SW5wdXQsIGIgKSApIDpcblx0XHRcdFx0MDtcblx0XHR9XG5cblx0XHRyZXR1cm4gY29tcGFyZSAmIDQgPyAtMSA6IDE7XG5cdH0gOlxuXHRmdW5jdGlvbiggYSwgYiApIHtcblxuXHRcdC8vIEV4aXQgZWFybHkgaWYgdGhlIG5vZGVzIGFyZSBpZGVudGljYWxcblx0XHRpZiAoIGEgPT09IGIgKSB7XG5cdFx0XHRoYXNEdXBsaWNhdGUgPSB0cnVlO1xuXHRcdFx0cmV0dXJuIDA7XG5cdFx0fVxuXG5cdFx0dmFyIGN1cixcblx0XHRcdGkgPSAwLFxuXHRcdFx0YXVwID0gYS5wYXJlbnROb2RlLFxuXHRcdFx0YnVwID0gYi5wYXJlbnROb2RlLFxuXHRcdFx0YXAgPSBbIGEgXSxcblx0XHRcdGJwID0gWyBiIF07XG5cblx0XHQvLyBQYXJlbnRsZXNzIG5vZGVzIGFyZSBlaXRoZXIgZG9jdW1lbnRzIG9yIGRpc2Nvbm5lY3RlZFxuXHRcdGlmICggIWF1cCB8fCAhYnVwICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0LyogZXNsaW50LWRpc2FibGUgZXFlcWVxICovXG5cdFx0XHRyZXR1cm4gYSA9PSBkb2N1bWVudCA/IC0xIDpcblx0XHRcdFx0YiA9PSBkb2N1bWVudCA/IDEgOlxuXHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIGVxZXFlcSAqL1xuXHRcdFx0XHRhdXAgPyAtMSA6XG5cdFx0XHRcdGJ1cCA/IDEgOlxuXHRcdFx0XHRzb3J0SW5wdXQgP1xuXHRcdFx0XHQoIGluZGV4T2YoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZiggc29ydElucHV0LCBiICkgKSA6XG5cdFx0XHRcdDA7XG5cblx0XHQvLyBJZiB0aGUgbm9kZXMgYXJlIHNpYmxpbmdzLCB3ZSBjYW4gZG8gYSBxdWljayBjaGVja1xuXHRcdH0gZWxzZSBpZiAoIGF1cCA9PT0gYnVwICkge1xuXHRcdFx0cmV0dXJuIHNpYmxpbmdDaGVjayggYSwgYiApO1xuXHRcdH1cblxuXHRcdC8vIE90aGVyd2lzZSB3ZSBuZWVkIGZ1bGwgbGlzdHMgb2YgdGhlaXIgYW5jZXN0b3JzIGZvciBjb21wYXJpc29uXG5cdFx0Y3VyID0gYTtcblx0XHR3aGlsZSAoICggY3VyID0gY3VyLnBhcmVudE5vZGUgKSApIHtcblx0XHRcdGFwLnVuc2hpZnQoIGN1ciApO1xuXHRcdH1cblx0XHRjdXIgPSBiO1xuXHRcdHdoaWxlICggKCBjdXIgPSBjdXIucGFyZW50Tm9kZSApICkge1xuXHRcdFx0YnAudW5zaGlmdCggY3VyICk7XG5cdFx0fVxuXG5cdFx0Ly8gV2FsayBkb3duIHRoZSB0cmVlIGxvb2tpbmcgZm9yIGEgZGlzY3JlcGFuY3lcblx0XHR3aGlsZSAoIGFwWyBpIF0gPT09IGJwWyBpIF0gKSB7XG5cdFx0XHRpKys7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGkgP1xuXG5cdFx0XHQvLyBEbyBhIHNpYmxpbmcgY2hlY2sgaWYgdGhlIG5vZGVzIGhhdmUgYSBjb21tb24gYW5jZXN0b3Jcblx0XHRcdHNpYmxpbmdDaGVjayggYXBbIGkgXSwgYnBbIGkgXSApIDpcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIG5vZGVzIGluIG91ciBkb2N1bWVudCBzb3J0IGZpcnN0XG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0LyogZXNsaW50LWRpc2FibGUgZXFlcWVxICovXG5cdFx0XHRhcFsgaSBdID09IHByZWZlcnJlZERvYyA/IC0xIDpcblx0XHRcdGJwWyBpIF0gPT0gcHJlZmVycmVkRG9jID8gMSA6XG5cdFx0XHQvKiBlc2xpbnQtZW5hYmxlIGVxZXFlcSAqL1xuXHRcdFx0MDtcblx0fTtcblxuXHRyZXR1cm4gZG9jdW1lbnQ7XG59O1xuXG5TaXp6bGUubWF0Y2hlcyA9IGZ1bmN0aW9uKCBleHByLCBlbGVtZW50cyApIHtcblx0cmV0dXJuIFNpenpsZSggZXhwciwgbnVsbCwgbnVsbCwgZWxlbWVudHMgKTtcbn07XG5cblNpenpsZS5tYXRjaGVzU2VsZWN0b3IgPSBmdW5jdGlvbiggZWxlbSwgZXhwciApIHtcblx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblxuXHRpZiAoIHN1cHBvcnQubWF0Y2hlc1NlbGVjdG9yICYmIGRvY3VtZW50SXNIVE1MICYmXG5cdFx0IW5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGVbIGV4cHIgKyBcIiBcIiBdICYmXG5cdFx0KCAhcmJ1Z2d5TWF0Y2hlcyB8fCAhcmJ1Z2d5TWF0Y2hlcy50ZXN0KCBleHByICkgKSAmJlxuXHRcdCggIXJidWdneVFTQSAgICAgfHwgIXJidWdneVFTQS50ZXN0KCBleHByICkgKSApIHtcblxuXHRcdHRyeSB7XG5cdFx0XHR2YXIgcmV0ID0gbWF0Y2hlcy5jYWxsKCBlbGVtLCBleHByICk7XG5cblx0XHRcdC8vIElFIDkncyBtYXRjaGVzU2VsZWN0b3IgcmV0dXJucyBmYWxzZSBvbiBkaXNjb25uZWN0ZWQgbm9kZXNcblx0XHRcdGlmICggcmV0IHx8IHN1cHBvcnQuZGlzY29ubmVjdGVkTWF0Y2ggfHxcblxuXHRcdFx0XHQvLyBBcyB3ZWxsLCBkaXNjb25uZWN0ZWQgbm9kZXMgYXJlIHNhaWQgdG8gYmUgaW4gYSBkb2N1bWVudFxuXHRcdFx0XHQvLyBmcmFnbWVudCBpbiBJRSA5XG5cdFx0XHRcdGVsZW0uZG9jdW1lbnQgJiYgZWxlbS5kb2N1bWVudC5ub2RlVHlwZSAhPT0gMTEgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cdFx0fSBjYXRjaCAoIGUgKSB7XG5cdFx0XHRub25uYXRpdmVTZWxlY3RvckNhY2hlKCBleHByLCB0cnVlICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIFNpenpsZSggZXhwciwgZG9jdW1lbnQsIG51bGwsIFsgZWxlbSBdICkubGVuZ3RoID4gMDtcbn07XG5cblNpenpsZS5jb250YWlucyA9IGZ1bmN0aW9uKCBjb250ZXh0LCBlbGVtICkge1xuXG5cdC8vIFNldCBkb2N1bWVudCB2YXJzIGlmIG5lZWRlZFxuXHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRpZiAoICggY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgKSAhPSBkb2N1bWVudCApIHtcblx0XHRzZXREb2N1bWVudCggY29udGV4dCApO1xuXHR9XG5cdHJldHVybiBjb250YWlucyggY29udGV4dCwgZWxlbSApO1xufTtcblxuU2l6emxlLmF0dHIgPSBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHtcblxuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcblx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0aWYgKCAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBlbGVtICkgIT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGVsZW0gKTtcblx0fVxuXG5cdHZhciBmbiA9IEV4cHIuYXR0ckhhbmRsZVsgbmFtZS50b0xvd2VyQ2FzZSgpIF0sXG5cblx0XHQvLyBEb24ndCBnZXQgZm9vbGVkIGJ5IE9iamVjdC5wcm90b3R5cGUgcHJvcGVydGllcyAoalF1ZXJ5ICMxMzgwNylcblx0XHR2YWwgPSBmbiAmJiBoYXNPd24uY2FsbCggRXhwci5hdHRySGFuZGxlLCBuYW1lLnRvTG93ZXJDYXNlKCkgKSA/XG5cdFx0XHRmbiggZWxlbSwgbmFtZSwgIWRvY3VtZW50SXNIVE1MICkgOlxuXHRcdFx0dW5kZWZpbmVkO1xuXG5cdHJldHVybiB2YWwgIT09IHVuZGVmaW5lZCA/XG5cdFx0dmFsIDpcblx0XHRzdXBwb3J0LmF0dHJpYnV0ZXMgfHwgIWRvY3VtZW50SXNIVE1MID9cblx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICkgOlxuXHRcdFx0KCB2YWwgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIG5hbWUgKSApICYmIHZhbC5zcGVjaWZpZWQgP1xuXHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRudWxsO1xufTtcblxuU2l6emxlLmVzY2FwZSA9IGZ1bmN0aW9uKCBzZWwgKSB7XG5cdHJldHVybiAoIHNlbCArIFwiXCIgKS5yZXBsYWNlKCByY3NzZXNjYXBlLCBmY3NzZXNjYXBlICk7XG59O1xuXG5TaXp6bGUuZXJyb3IgPSBmdW5jdGlvbiggbXNnICkge1xuXHR0aHJvdyBuZXcgRXJyb3IoIFwiU3ludGF4IGVycm9yLCB1bnJlY29nbml6ZWQgZXhwcmVzc2lvbjogXCIgKyBtc2cgKTtcbn07XG5cbi8qKlxuICogRG9jdW1lbnQgc29ydGluZyBhbmQgcmVtb3ZpbmcgZHVwbGljYXRlc1xuICogQHBhcmFtIHtBcnJheUxpa2V9IHJlc3VsdHNcbiAqL1xuU2l6emxlLnVuaXF1ZVNvcnQgPSBmdW5jdGlvbiggcmVzdWx0cyApIHtcblx0dmFyIGVsZW0sXG5cdFx0ZHVwbGljYXRlcyA9IFtdLFxuXHRcdGogPSAwLFxuXHRcdGkgPSAwO1xuXG5cdC8vIFVubGVzcyB3ZSAqa25vdyogd2UgY2FuIGRldGVjdCBkdXBsaWNhdGVzLCBhc3N1bWUgdGhlaXIgcHJlc2VuY2Vcblx0aGFzRHVwbGljYXRlID0gIXN1cHBvcnQuZGV0ZWN0RHVwbGljYXRlcztcblx0c29ydElucHV0ID0gIXN1cHBvcnQuc29ydFN0YWJsZSAmJiByZXN1bHRzLnNsaWNlKCAwICk7XG5cdHJlc3VsdHMuc29ydCggc29ydE9yZGVyICk7XG5cblx0aWYgKCBoYXNEdXBsaWNhdGUgKSB7XG5cdFx0d2hpbGUgKCAoIGVsZW0gPSByZXN1bHRzWyBpKysgXSApICkge1xuXHRcdFx0aWYgKCBlbGVtID09PSByZXN1bHRzWyBpIF0gKSB7XG5cdFx0XHRcdGogPSBkdXBsaWNhdGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRyZXN1bHRzLnNwbGljZSggZHVwbGljYXRlc1sgaiBdLCAxICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2xlYXIgaW5wdXQgYWZ0ZXIgc29ydGluZyB0byByZWxlYXNlIG9iamVjdHNcblx0Ly8gU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvc2l6emxlL3B1bGwvMjI1XG5cdHNvcnRJbnB1dCA9IG51bGw7XG5cblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vKipcbiAqIFV0aWxpdHkgZnVuY3Rpb24gZm9yIHJldHJpZXZpbmcgdGhlIHRleHQgdmFsdWUgb2YgYW4gYXJyYXkgb2YgRE9NIG5vZGVzXG4gKiBAcGFyYW0ge0FycmF5fEVsZW1lbnR9IGVsZW1cbiAqL1xuZ2V0VGV4dCA9IFNpenpsZS5nZXRUZXh0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHZhciBub2RlLFxuXHRcdHJldCA9IFwiXCIsXG5cdFx0aSA9IDAsXG5cdFx0bm9kZVR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdGlmICggIW5vZGVUeXBlICkge1xuXG5cdFx0Ly8gSWYgbm8gbm9kZVR5cGUsIHRoaXMgaXMgZXhwZWN0ZWQgdG8gYmUgYW4gYXJyYXlcblx0XHR3aGlsZSAoICggbm9kZSA9IGVsZW1bIGkrKyBdICkgKSB7XG5cblx0XHRcdC8vIERvIG5vdCB0cmF2ZXJzZSBjb21tZW50IG5vZGVzXG5cdFx0XHRyZXQgKz0gZ2V0VGV4dCggbm9kZSApO1xuXHRcdH1cblx0fSBlbHNlIGlmICggbm9kZVR5cGUgPT09IDEgfHwgbm9kZVR5cGUgPT09IDkgfHwgbm9kZVR5cGUgPT09IDExICkge1xuXG5cdFx0Ly8gVXNlIHRleHRDb250ZW50IGZvciBlbGVtZW50c1xuXHRcdC8vIGlubmVyVGV4dCB1c2FnZSByZW1vdmVkIGZvciBjb25zaXN0ZW5jeSBvZiBuZXcgbGluZXMgKGpRdWVyeSAjMTExNTMpXG5cdFx0aWYgKCB0eXBlb2YgZWxlbS50ZXh0Q29udGVudCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiBlbGVtLnRleHRDb250ZW50O1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIFRyYXZlcnNlIGl0cyBjaGlsZHJlblxuXHRcdFx0Zm9yICggZWxlbSA9IGVsZW0uZmlyc3RDaGlsZDsgZWxlbTsgZWxlbSA9IGVsZW0ubmV4dFNpYmxpbmcgKSB7XG5cdFx0XHRcdHJldCArPSBnZXRUZXh0KCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9IGVsc2UgaWYgKCBub2RlVHlwZSA9PT0gMyB8fCBub2RlVHlwZSA9PT0gNCApIHtcblx0XHRyZXR1cm4gZWxlbS5ub2RlVmFsdWU7XG5cdH1cblxuXHQvLyBEbyBub3QgaW5jbHVkZSBjb21tZW50IG9yIHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb24gbm9kZXNcblxuXHRyZXR1cm4gcmV0O1xufTtcblxuRXhwciA9IFNpenpsZS5zZWxlY3RvcnMgPSB7XG5cblx0Ly8gQ2FuIGJlIGFkanVzdGVkIGJ5IHRoZSB1c2VyXG5cdGNhY2hlTGVuZ3RoOiA1MCxcblxuXHRjcmVhdGVQc2V1ZG86IG1hcmtGdW5jdGlvbixcblxuXHRtYXRjaDogbWF0Y2hFeHByLFxuXG5cdGF0dHJIYW5kbGU6IHt9LFxuXG5cdGZpbmQ6IHt9LFxuXG5cdHJlbGF0aXZlOiB7XG5cdFx0XCI+XCI6IHsgZGlyOiBcInBhcmVudE5vZGVcIiwgZmlyc3Q6IHRydWUgfSxcblx0XHRcIiBcIjogeyBkaXI6IFwicGFyZW50Tm9kZVwiIH0sXG5cdFx0XCIrXCI6IHsgZGlyOiBcInByZXZpb3VzU2libGluZ1wiLCBmaXJzdDogdHJ1ZSB9LFxuXHRcdFwiflwiOiB7IGRpcjogXCJwcmV2aW91c1NpYmxpbmdcIiB9XG5cdH0sXG5cblx0cHJlRmlsdGVyOiB7XG5cdFx0XCJBVFRSXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdG1hdGNoWyAxIF0gPSBtYXRjaFsgMSBdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdC8vIE1vdmUgdGhlIGdpdmVuIHZhbHVlIHRvIG1hdGNoWzNdIHdoZXRoZXIgcXVvdGVkIG9yIHVucXVvdGVkXG5cdFx0XHRtYXRjaFsgMyBdID0gKCBtYXRjaFsgMyBdIHx8IG1hdGNoWyA0IF0gfHxcblx0XHRcdFx0bWF0Y2hbIDUgXSB8fCBcIlwiICkucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKTtcblxuXHRcdFx0aWYgKCBtYXRjaFsgMiBdID09PSBcIn49XCIgKSB7XG5cdFx0XHRcdG1hdGNoWyAzIF0gPSBcIiBcIiArIG1hdGNoWyAzIF0gKyBcIiBcIjtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG1hdGNoLnNsaWNlKCAwLCA0ICk7XG5cdFx0fSxcblxuXHRcdFwiQ0hJTERcIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXG5cdFx0XHQvKiBtYXRjaGVzIGZyb20gbWF0Y2hFeHByW1wiQ0hJTERcIl1cblx0XHRcdFx0MSB0eXBlIChvbmx5fG50aHwuLi4pXG5cdFx0XHRcdDIgd2hhdCAoY2hpbGR8b2YtdHlwZSlcblx0XHRcdFx0MyBhcmd1bWVudCAoZXZlbnxvZGR8XFxkKnxcXGQqbihbKy1dXFxkKyk/fC4uLilcblx0XHRcdFx0NCB4bi1jb21wb25lbnQgb2YgeG4reSBhcmd1bWVudCAoWystXT9cXGQqbnwpXG5cdFx0XHRcdDUgc2lnbiBvZiB4bi1jb21wb25lbnRcblx0XHRcdFx0NiB4IG9mIHhuLWNvbXBvbmVudFxuXHRcdFx0XHQ3IHNpZ24gb2YgeS1jb21wb25lbnRcblx0XHRcdFx0OCB5IG9mIHktY29tcG9uZW50XG5cdFx0XHQqL1xuXHRcdFx0bWF0Y2hbIDEgXSA9IG1hdGNoWyAxIF0udG9Mb3dlckNhc2UoKTtcblxuXHRcdFx0aWYgKCBtYXRjaFsgMSBdLnNsaWNlKCAwLCAzICkgPT09IFwibnRoXCIgKSB7XG5cblx0XHRcdFx0Ly8gbnRoLSogcmVxdWlyZXMgYXJndW1lbnRcblx0XHRcdFx0aWYgKCAhbWF0Y2hbIDMgXSApIHtcblx0XHRcdFx0XHRTaXp6bGUuZXJyb3IoIG1hdGNoWyAwIF0gKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIG51bWVyaWMgeCBhbmQgeSBwYXJhbWV0ZXJzIGZvciBFeHByLmZpbHRlci5DSElMRFxuXHRcdFx0XHQvLyByZW1lbWJlciB0aGF0IGZhbHNlL3RydWUgY2FzdCByZXNwZWN0aXZlbHkgdG8gMC8xXG5cdFx0XHRcdG1hdGNoWyA0IF0gPSArKCBtYXRjaFsgNCBdID9cblx0XHRcdFx0XHRtYXRjaFsgNSBdICsgKCBtYXRjaFsgNiBdIHx8IDEgKSA6XG5cdFx0XHRcdFx0MiAqICggbWF0Y2hbIDMgXSA9PT0gXCJldmVuXCIgfHwgbWF0Y2hbIDMgXSA9PT0gXCJvZGRcIiApICk7XG5cdFx0XHRcdG1hdGNoWyA1IF0gPSArKCAoIG1hdGNoWyA3IF0gKyBtYXRjaFsgOCBdICkgfHwgbWF0Y2hbIDMgXSA9PT0gXCJvZGRcIiApO1xuXG5cdFx0XHRcdC8vIG90aGVyIHR5cGVzIHByb2hpYml0IGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggbWF0Y2hbIDMgXSApIHtcblx0XHRcdFx0U2l6emxlLmVycm9yKCBtYXRjaFsgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaDtcblx0XHR9LFxuXG5cdFx0XCJQU0VVRE9cIjogZnVuY3Rpb24oIG1hdGNoICkge1xuXHRcdFx0dmFyIGV4Y2Vzcyxcblx0XHRcdFx0dW5xdW90ZWQgPSAhbWF0Y2hbIDYgXSAmJiBtYXRjaFsgMiBdO1xuXG5cdFx0XHRpZiAoIG1hdGNoRXhwclsgXCJDSElMRFwiIF0udGVzdCggbWF0Y2hbIDAgXSApICkge1xuXHRcdFx0XHRyZXR1cm4gbnVsbDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWNjZXB0IHF1b3RlZCBhcmd1bWVudHMgYXMtaXNcblx0XHRcdGlmICggbWF0Y2hbIDMgXSApIHtcblx0XHRcdFx0bWF0Y2hbIDIgXSA9IG1hdGNoWyA0IF0gfHwgbWF0Y2hbIDUgXSB8fCBcIlwiO1xuXG5cdFx0XHQvLyBTdHJpcCBleGNlc3MgY2hhcmFjdGVycyBmcm9tIHVucXVvdGVkIGFyZ3VtZW50c1xuXHRcdFx0fSBlbHNlIGlmICggdW5xdW90ZWQgJiYgcnBzZXVkby50ZXN0KCB1bnF1b3RlZCApICYmXG5cblx0XHRcdFx0Ly8gR2V0IGV4Y2VzcyBmcm9tIHRva2VuaXplIChyZWN1cnNpdmVseSlcblx0XHRcdFx0KCBleGNlc3MgPSB0b2tlbml6ZSggdW5xdW90ZWQsIHRydWUgKSApICYmXG5cblx0XHRcdFx0Ly8gYWR2YW5jZSB0byB0aGUgbmV4dCBjbG9zaW5nIHBhcmVudGhlc2lzXG5cdFx0XHRcdCggZXhjZXNzID0gdW5xdW90ZWQuaW5kZXhPZiggXCIpXCIsIHVucXVvdGVkLmxlbmd0aCAtIGV4Y2VzcyApIC0gdW5xdW90ZWQubGVuZ3RoICkgKSB7XG5cblx0XHRcdFx0Ly8gZXhjZXNzIGlzIGEgbmVnYXRpdmUgaW5kZXhcblx0XHRcdFx0bWF0Y2hbIDAgXSA9IG1hdGNoWyAwIF0uc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0XHRtYXRjaFsgMiBdID0gdW5xdW90ZWQuc2xpY2UoIDAsIGV4Y2VzcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXR1cm4gb25seSBjYXB0dXJlcyBuZWVkZWQgYnkgdGhlIHBzZXVkbyBmaWx0ZXIgbWV0aG9kICh0eXBlIGFuZCBhcmd1bWVudClcblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgMyApO1xuXHRcdH1cblx0fSxcblxuXHRmaWx0ZXI6IHtcblxuXHRcdFwiVEFHXCI6IGZ1bmN0aW9uKCBub2RlTmFtZVNlbGVjdG9yICkge1xuXHRcdFx0dmFyIG5vZGVOYW1lID0gbm9kZU5hbWVTZWxlY3Rvci5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gbm9kZU5hbWVTZWxlY3RvciA9PT0gXCIqXCIgP1xuXHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbm9kZU5hbWU7XG5cdFx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiQ0xBU1NcIjogZnVuY3Rpb24oIGNsYXNzTmFtZSApIHtcblx0XHRcdHZhciBwYXR0ZXJuID0gY2xhc3NDYWNoZVsgY2xhc3NOYW1lICsgXCIgXCIgXTtcblxuXHRcdFx0cmV0dXJuIHBhdHRlcm4gfHxcblx0XHRcdFx0KCBwYXR0ZXJuID0gbmV3IFJlZ0V4cCggXCIoXnxcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFx0XHRcdFwiKVwiICsgY2xhc3NOYW1lICsgXCIoXCIgKyB3aGl0ZXNwYWNlICsgXCJ8JClcIiApICkgJiYgY2xhc3NDYWNoZShcblx0XHRcdFx0XHRcdGNsYXNzTmFtZSwgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiBwYXR0ZXJuLnRlc3QoXG5cdFx0XHRcdFx0XHRcdFx0dHlwZW9mIGVsZW0uY2xhc3NOYW1lID09PSBcInN0cmluZ1wiICYmIGVsZW0uY2xhc3NOYW1lIHx8XG5cdFx0XHRcdFx0XHRcdFx0dHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0XHRcdFx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggXCJjbGFzc1wiICkgfHxcblx0XHRcdFx0XHRcdFx0XHRcIlwiXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0gKTtcblx0XHR9LFxuXG5cdFx0XCJBVFRSXCI6IGZ1bmN0aW9uKCBuYW1lLCBvcGVyYXRvciwgY2hlY2sgKSB7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciByZXN1bHQgPSBTaXp6bGUuYXR0ciggZWxlbSwgbmFtZSApO1xuXG5cdFx0XHRcdGlmICggcmVzdWx0ID09IG51bGwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIiE9XCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKCAhb3BlcmF0b3IgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXN1bHQgKz0gXCJcIjtcblxuXHRcdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG5cblx0XHRcdFx0cmV0dXJuIG9wZXJhdG9yID09PSBcIj1cIiA/IHJlc3VsdCA9PT0gY2hlY2sgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIiE9XCIgPyByZXN1bHQgIT09IGNoZWNrIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJePVwiID8gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPT09IDAgOlxuXHRcdFx0XHRcdG9wZXJhdG9yID09PSBcIio9XCIgPyBjaGVjayAmJiByZXN1bHQuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCIkPVwiID8gY2hlY2sgJiYgcmVzdWx0LnNsaWNlKCAtY2hlY2subGVuZ3RoICkgPT09IGNoZWNrIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJ+PVwiID8gKCBcIiBcIiArIHJlc3VsdC5yZXBsYWNlKCByd2hpdGVzcGFjZSwgXCIgXCIgKSArIFwiIFwiICkuaW5kZXhPZiggY2hlY2sgKSA+IC0xIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCJ8PVwiID8gcmVzdWx0ID09PSBjaGVjayB8fCByZXN1bHQuc2xpY2UoIDAsIGNoZWNrLmxlbmd0aCArIDEgKSA9PT0gY2hlY2sgKyBcIi1cIiA6XG5cdFx0XHRcdFx0ZmFsc2U7XG5cdFx0XHRcdC8qIGVzbGludC1lbmFibGUgbWF4LWxlbiAqL1xuXG5cdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIkNISUxEXCI6IGZ1bmN0aW9uKCB0eXBlLCB3aGF0LCBfYXJndW1lbnQsIGZpcnN0LCBsYXN0ICkge1xuXHRcdFx0dmFyIHNpbXBsZSA9IHR5cGUuc2xpY2UoIDAsIDMgKSAhPT0gXCJudGhcIixcblx0XHRcdFx0Zm9yd2FyZCA9IHR5cGUuc2xpY2UoIC00ICkgIT09IFwibGFzdFwiLFxuXHRcdFx0XHRvZlR5cGUgPSB3aGF0ID09PSBcIm9mLXR5cGVcIjtcblxuXHRcdFx0cmV0dXJuIGZpcnN0ID09PSAxICYmIGxhc3QgPT09IDAgP1xuXG5cdFx0XHRcdC8vIFNob3J0Y3V0IGZvciA6bnRoLSoobilcblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdFx0cmV0dXJuICEhZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0XHR9IDpcblxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSwgX2NvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHR2YXIgY2FjaGUsIHVuaXF1ZUNhY2hlLCBvdXRlckNhY2hlLCBub2RlLCBub2RlSW5kZXgsIHN0YXJ0LFxuXHRcdFx0XHRcdFx0ZGlyID0gc2ltcGxlICE9PSBmb3J3YXJkID8gXCJuZXh0U2libGluZ1wiIDogXCJwcmV2aW91c1NpYmxpbmdcIixcblx0XHRcdFx0XHRcdHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZSxcblx0XHRcdFx0XHRcdG5hbWUgPSBvZlR5cGUgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpLFxuXHRcdFx0XHRcdFx0dXNlQ2FjaGUgPSAheG1sICYmICFvZlR5cGUsXG5cdFx0XHRcdFx0XHRkaWZmID0gZmFsc2U7XG5cblx0XHRcdFx0XHRpZiAoIHBhcmVudCApIHtcblxuXHRcdFx0XHRcdFx0Ly8gOihmaXJzdHxsYXN0fG9ubHkpLShjaGlsZHxvZi10eXBlKVxuXHRcdFx0XHRcdFx0aWYgKCBzaW1wbGUgKSB7XG5cdFx0XHRcdFx0XHRcdHdoaWxlICggZGlyICkge1xuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtO1xuXHRcdFx0XHRcdFx0XHRcdHdoaWxlICggKCBub2RlID0gbm9kZVsgZGlyIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggb2ZUeXBlID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBuYW1lIDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0bm9kZS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gUmV2ZXJzZSBkaXJlY3Rpb24gZm9yIDpvbmx5LSogKGlmIHdlIGhhdmVuJ3QgeWV0IGRvbmUgc28pXG5cdFx0XHRcdFx0XHRcdFx0c3RhcnQgPSBkaXIgPSB0eXBlID09PSBcIm9ubHlcIiAmJiAhc3RhcnQgJiYgXCJuZXh0U2libGluZ1wiO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRzdGFydCA9IFsgZm9yd2FyZCA/IHBhcmVudC5maXJzdENoaWxkIDogcGFyZW50Lmxhc3RDaGlsZCBdO1xuXG5cdFx0XHRcdFx0XHQvLyBub24teG1sIDpudGgtY2hpbGQoLi4uKSBzdG9yZXMgY2FjaGUgZGF0YSBvbiBgcGFyZW50YFxuXHRcdFx0XHRcdFx0aWYgKCBmb3J3YXJkICYmIHVzZUNhY2hlICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFNlZWsgYGVsZW1gIGZyb20gYSBwcmV2aW91c2x5LWNhY2hlZCBpbmRleFxuXG5cdFx0XHRcdFx0XHRcdC8vIC4uLmluIGEgZ3ppcC1mcmllbmRseSB3YXlcblx0XHRcdFx0XHRcdFx0bm9kZSA9IHBhcmVudDtcblx0XHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IG5vZGVbIGV4cGFuZG8gXSB8fCAoIG5vZGVbIGV4cGFuZG8gXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHQoIG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0Y2FjaGUgPSB1bmlxdWVDYWNoZVsgdHlwZSBdIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRub2RlSW5kZXggPSBjYWNoZVsgMCBdID09PSBkaXJydW5zICYmIGNhY2hlWyAxIF07XG5cdFx0XHRcdFx0XHRcdGRpZmYgPSBub2RlSW5kZXggJiYgY2FjaGVbIDIgXTtcblx0XHRcdFx0XHRcdFx0bm9kZSA9IG5vZGVJbmRleCAmJiBwYXJlbnQuY2hpbGROb2Rlc1sgbm9kZUluZGV4IF07XG5cblx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBGYWxsYmFjayB0byBzZWVraW5nIGBlbGVtYCBmcm9tIHRoZSBzdGFydFxuXHRcdFx0XHRcdFx0XHRcdCggZGlmZiA9IG5vZGVJbmRleCA9IDAgKSB8fCBzdGFydC5wb3AoKSApICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gV2hlbiBmb3VuZCwgY2FjaGUgaW5kZXhlcyBvbiBgcGFyZW50YCBhbmQgYnJlYWtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIG5vZGUubm9kZVR5cGUgPT09IDEgJiYgKytkaWZmICYmIG5vZGUgPT09IGVsZW0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZVsgdHlwZSBdID0gWyBkaXJydW5zLCBub2RlSW5kZXgsIGRpZmYgXTtcblx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFVzZSBwcmV2aW91c2x5LWNhY2hlZCBlbGVtZW50IGluZGV4IGlmIGF2YWlsYWJsZVxuXHRcdFx0XHRcdFx0XHRpZiAoIHVzZUNhY2hlICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gLi4uaW4gYSBnemlwLWZyaWVuZGx5IHdheVxuXHRcdFx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtO1xuXHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHwgKCBub2RlWyBleHBhbmRvIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPDkgb25seVxuXHRcdFx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHQoIG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0XHRjYWNoZSA9IHVuaXF1ZUNhY2hlWyB0eXBlIF0gfHwgW107XG5cdFx0XHRcdFx0XHRcdFx0bm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdO1xuXHRcdFx0XHRcdFx0XHRcdGRpZmYgPSBub2RlSW5kZXg7XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHQvLyB4bWwgOm50aC1jaGlsZCguLi4pXG5cdFx0XHRcdFx0XHRcdC8vIG9yIDpudGgtbGFzdC1jaGlsZCguLi4pIG9yIDpudGgoLWxhc3QpPy1vZi10eXBlKC4uLilcblx0XHRcdFx0XHRcdFx0aWYgKCBkaWZmID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFVzZSB0aGUgc2FtZSBsb29wIGFzIGFib3ZlIHRvIHNlZWsgYGVsZW1gIGZyb20gdGhlIHN0YXJ0XG5cdFx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG5vZGUgPSArK25vZGVJbmRleCAmJiBub2RlICYmIG5vZGVbIGRpciBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHQoIGRpZmYgPSBub2RlSW5kZXggPSAwICkgfHwgc3RhcnQucG9wKCkgKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCAoIG9mVHlwZSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZVR5cGUgPT09IDEgKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHQrK2RpZmYgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gQ2FjaGUgdGhlIGluZGV4IG9mIGVhY2ggZW5jb3VudGVyZWQgZWxlbWVudFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHVzZUNhY2hlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCggbm9kZVsgZXhwYW5kbyBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0KCBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgZGlmZiBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlID09PSBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIEluY29ycG9yYXRlIHRoZSBvZmZzZXQsIHRoZW4gY2hlY2sgYWdhaW5zdCBjeWNsZSBzaXplXG5cdFx0XHRcdFx0XHRkaWZmIC09IGxhc3Q7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZGlmZiA9PT0gZmlyc3QgfHwgKCBkaWZmICUgZmlyc3QgPT09IDAgJiYgZGlmZiAvIGZpcnN0ID49IDAgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH07XG5cdFx0fSxcblxuXHRcdFwiUFNFVURPXCI6IGZ1bmN0aW9uKCBwc2V1ZG8sIGFyZ3VtZW50ICkge1xuXG5cdFx0XHQvLyBwc2V1ZG8tY2xhc3MgbmFtZXMgYXJlIGNhc2UtaW5zZW5zaXRpdmVcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL3NlbGVjdG9ycy8jcHNldWRvLWNsYXNzZXNcblx0XHRcdC8vIFByaW9yaXRpemUgYnkgY2FzZSBzZW5zaXRpdml0eSBpbiBjYXNlIGN1c3RvbSBwc2V1ZG9zIGFyZSBhZGRlZCB3aXRoIHVwcGVyY2FzZSBsZXR0ZXJzXG5cdFx0XHQvLyBSZW1lbWJlciB0aGF0IHNldEZpbHRlcnMgaW5oZXJpdHMgZnJvbSBwc2V1ZG9zXG5cdFx0XHR2YXIgYXJncyxcblx0XHRcdFx0Zm4gPSBFeHByLnBzZXVkb3NbIHBzZXVkbyBdIHx8IEV4cHIuc2V0RmlsdGVyc1sgcHNldWRvLnRvTG93ZXJDYXNlKCkgXSB8fFxuXHRcdFx0XHRcdFNpenpsZS5lcnJvciggXCJ1bnN1cHBvcnRlZCBwc2V1ZG86IFwiICsgcHNldWRvICk7XG5cblx0XHRcdC8vIFRoZSB1c2VyIG1heSB1c2UgY3JlYXRlUHNldWRvIHRvIGluZGljYXRlIHRoYXRcblx0XHRcdC8vIGFyZ3VtZW50cyBhcmUgbmVlZGVkIHRvIGNyZWF0ZSB0aGUgZmlsdGVyIGZ1bmN0aW9uXG5cdFx0XHQvLyBqdXN0IGFzIFNpenpsZSBkb2VzXG5cdFx0XHRpZiAoIGZuWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdHJldHVybiBmbiggYXJndW1lbnQgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQnV0IG1haW50YWluIHN1cHBvcnQgZm9yIG9sZCBzaWduYXR1cmVzXG5cdFx0XHRpZiAoIGZuLmxlbmd0aCA+IDEgKSB7XG5cdFx0XHRcdGFyZ3MgPSBbIHBzZXVkbywgcHNldWRvLCBcIlwiLCBhcmd1bWVudCBdO1xuXHRcdFx0XHRyZXR1cm4gRXhwci5zZXRGaWx0ZXJzLmhhc093blByb3BlcnR5KCBwc2V1ZG8udG9Mb3dlckNhc2UoKSApID9cblx0XHRcdFx0XHRtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzICkge1xuXHRcdFx0XHRcdFx0dmFyIGlkeCxcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZCA9IGZuKCBzZWVkLCBhcmd1bWVudCApLFxuXHRcdFx0XHRcdFx0XHRpID0gbWF0Y2hlZC5sZW5ndGg7XG5cdFx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdFx0aWR4ID0gaW5kZXhPZiggc2VlZCwgbWF0Y2hlZFsgaSBdICk7XG5cdFx0XHRcdFx0XHRcdHNlZWRbIGlkeCBdID0gISggbWF0Y2hlc1sgaWR4IF0gPSBtYXRjaGVkWyBpIF0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZuKCBlbGVtLCAwLCBhcmdzICk7XG5cdFx0XHRcdFx0fTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGZuO1xuXHRcdH1cblx0fSxcblxuXHRwc2V1ZG9zOiB7XG5cblx0XHQvLyBQb3RlbnRpYWxseSBjb21wbGV4IHBzZXVkb3Ncblx0XHRcIm5vdFwiOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblxuXHRcdFx0Ly8gVHJpbSB0aGUgc2VsZWN0b3IgcGFzc2VkIHRvIGNvbXBpbGVcblx0XHRcdC8vIHRvIGF2b2lkIHRyZWF0aW5nIGxlYWRpbmcgYW5kIHRyYWlsaW5nXG5cdFx0XHQvLyBzcGFjZXMgYXMgY29tYmluYXRvcnNcblx0XHRcdHZhciBpbnB1dCA9IFtdLFxuXHRcdFx0XHRyZXN1bHRzID0gW10sXG5cdFx0XHRcdG1hdGNoZXIgPSBjb21waWxlKCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICkgKTtcblxuXHRcdFx0cmV0dXJuIG1hdGNoZXJbIGV4cGFuZG8gXSA/XG5cdFx0XHRcdG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIG1hdGNoZXMsIF9jb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0dmFyIGVsZW0sXG5cdFx0XHRcdFx0XHR1bm1hdGNoZWQgPSBtYXRjaGVyKCBzZWVkLCBudWxsLCB4bWwsIFtdICksXG5cdFx0XHRcdFx0XHRpID0gc2VlZC5sZW5ndGg7XG5cblx0XHRcdFx0XHQvLyBNYXRjaCBlbGVtZW50cyB1bm1hdGNoZWQgYnkgYG1hdGNoZXJgXG5cdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRpZiAoICggZWxlbSA9IHVubWF0Y2hlZFsgaSBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdHNlZWRbIGkgXSA9ICEoIG1hdGNoZXNbIGkgXSA9IGVsZW0gKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtLCBfY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdGlucHV0WyAwIF0gPSBlbGVtO1xuXHRcdFx0XHRcdG1hdGNoZXIoIGlucHV0LCBudWxsLCB4bWwsIHJlc3VsdHMgKTtcblxuXHRcdFx0XHRcdC8vIERvbid0IGtlZXAgdGhlIGVsZW1lbnQgKGlzc3VlICMyOTkpXG5cdFx0XHRcdFx0aW5wdXRbIDAgXSA9IG51bGw7XG5cdFx0XHRcdFx0cmV0dXJuICFyZXN1bHRzLnBvcCgpO1xuXHRcdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdFwiaGFzXCI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gU2l6emxlKCBzZWxlY3RvciwgZWxlbSApLmxlbmd0aCA+IDA7XG5cdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdFwiY29udGFpbnNcIjogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggdGV4dCApIHtcblx0XHRcdHRleHQgPSB0ZXh0LnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiAoIGVsZW0udGV4dENvbnRlbnQgfHwgZ2V0VGV4dCggZWxlbSApICkuaW5kZXhPZiggdGV4dCApID4gLTE7XG5cdFx0XHR9O1xuXHRcdH0gKSxcblxuXHRcdC8vIFwiV2hldGhlciBhbiBlbGVtZW50IGlzIHJlcHJlc2VudGVkIGJ5IGEgOmxhbmcoKSBzZWxlY3RvclxuXHRcdC8vIGlzIGJhc2VkIHNvbGVseSBvbiB0aGUgZWxlbWVudCdzIGxhbmd1YWdlIHZhbHVlXG5cdFx0Ly8gYmVpbmcgZXF1YWwgdG8gdGhlIGlkZW50aWZpZXIgQyxcblx0XHQvLyBvciBiZWdpbm5pbmcgd2l0aCB0aGUgaWRlbnRpZmllciBDIGltbWVkaWF0ZWx5IGZvbGxvd2VkIGJ5IFwiLVwiLlxuXHRcdC8vIFRoZSBtYXRjaGluZyBvZiBDIGFnYWluc3QgdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZSBpcyBwZXJmb3JtZWQgY2FzZS1pbnNlbnNpdGl2ZWx5LlxuXHRcdC8vIFRoZSBpZGVudGlmaWVyIEMgZG9lcyBub3QgaGF2ZSB0byBiZSBhIHZhbGlkIGxhbmd1YWdlIG5hbWUuXCJcblx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2xhbmctcHNldWRvXG5cdFx0XCJsYW5nXCI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIGxhbmcgKSB7XG5cblx0XHRcdC8vIGxhbmcgdmFsdWUgbXVzdCBiZSBhIHZhbGlkIGlkZW50aWZpZXJcblx0XHRcdGlmICggIXJpZGVudGlmaWVyLnRlc3QoIGxhbmcgfHwgXCJcIiApICkge1xuXHRcdFx0XHRTaXp6bGUuZXJyb3IoIFwidW5zdXBwb3J0ZWQgbGFuZzogXCIgKyBsYW5nICk7XG5cdFx0XHR9XG5cdFx0XHRsYW5nID0gbGFuZy5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciBlbGVtTGFuZztcblx0XHRcdFx0ZG8ge1xuXHRcdFx0XHRcdGlmICggKCBlbGVtTGFuZyA9IGRvY3VtZW50SXNIVE1MID9cblx0XHRcdFx0XHRcdGVsZW0ubGFuZyA6XG5cdFx0XHRcdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggXCJ4bWw6bGFuZ1wiICkgfHwgZWxlbS5nZXRBdHRyaWJ1dGUoIFwibGFuZ1wiICkgKSApIHtcblxuXHRcdFx0XHRcdFx0ZWxlbUxhbmcgPSBlbGVtTGFuZy50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW1MYW5nID09PSBsYW5nIHx8IGVsZW1MYW5nLmluZGV4T2YoIGxhbmcgKyBcIi1cIiApID09PSAwO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSB3aGlsZSAoICggZWxlbSA9IGVsZW0ucGFyZW50Tm9kZSApICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKTtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fTtcblx0XHR9ICksXG5cblx0XHQvLyBNaXNjZWxsYW5lb3VzXG5cdFx0XCJ0YXJnZXRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgaGFzaCA9IHdpbmRvdy5sb2NhdGlvbiAmJiB3aW5kb3cubG9jYXRpb24uaGFzaDtcblx0XHRcdHJldHVybiBoYXNoICYmIGhhc2guc2xpY2UoIDEgKSA9PT0gZWxlbS5pZDtcblx0XHR9LFxuXG5cdFx0XCJyb290XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGRvY0VsZW07XG5cdFx0fSxcblxuXHRcdFwiZm9jdXNcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAmJlxuXHRcdFx0XHQoICFkb2N1bWVudC5oYXNGb2N1cyB8fCBkb2N1bWVudC5oYXNGb2N1cygpICkgJiZcblx0XHRcdFx0ISEoIGVsZW0udHlwZSB8fCBlbGVtLmhyZWYgfHwgfmVsZW0udGFiSW5kZXggKTtcblx0XHR9LFxuXG5cdFx0Ly8gQm9vbGVhbiBwcm9wZXJ0aWVzXG5cdFx0XCJlbmFibGVkXCI6IGNyZWF0ZURpc2FibGVkUHNldWRvKCBmYWxzZSApLFxuXHRcdFwiZGlzYWJsZWRcIjogY3JlYXRlRGlzYWJsZWRQc2V1ZG8oIHRydWUgKSxcblxuXHRcdFwiY2hlY2tlZFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0Ly8gSW4gQ1NTMywgOmNoZWNrZWQgc2hvdWxkIHJldHVybiBib3RoIGNoZWNrZWQgYW5kIHNlbGVjdGVkIGVsZW1lbnRzXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi8yMDExL1JFQy1jc3MzLXNlbGVjdG9ycy0yMDExMDkyOS8jY2hlY2tlZFxuXHRcdFx0dmFyIG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiAmJiAhIWVsZW0uY2hlY2tlZCApIHx8XG5cdFx0XHRcdCggbm9kZU5hbWUgPT09IFwib3B0aW9uXCIgJiYgISFlbGVtLnNlbGVjdGVkICk7XG5cdFx0fSxcblxuXHRcdFwic2VsZWN0ZWRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8vIEFjY2Vzc2luZyB0aGlzIHByb3BlcnR5IG1ha2VzIHNlbGVjdGVkLWJ5LWRlZmF1bHRcblx0XHRcdC8vIG9wdGlvbnMgaW4gU2FmYXJpIHdvcmsgcHJvcGVybHlcblx0XHRcdGlmICggZWxlbS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG5cdFx0XHRcdGVsZW0ucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxlbS5zZWxlY3RlZCA9PT0gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0Ly8gQ29udGVudHNcblx0XHRcImVtcHR5XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI2VtcHR5LXBzZXVkb1xuXHRcdFx0Ly8gOmVtcHR5IGlzIG5lZ2F0ZWQgYnkgZWxlbWVudCAoMSkgb3IgY29udGVudCBub2RlcyAodGV4dDogMzsgY2RhdGE6IDQ7IGVudGl0eSByZWY6IDUpLFxuXHRcdFx0Ly8gICBidXQgbm90IGJ5IG90aGVycyAoY29tbWVudDogODsgcHJvY2Vzc2luZyBpbnN0cnVjdGlvbjogNzsgZXRjLilcblx0XHRcdC8vIG5vZGVUeXBlIDwgNiB3b3JrcyBiZWNhdXNlIGF0dHJpYnV0ZXMgKDIpIGRvIG5vdCBhcHBlYXIgYXMgY2hpbGRyZW5cblx0XHRcdGZvciAoIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7IGVsZW07IGVsZW0gPSBlbGVtLm5leHRTaWJsaW5nICkge1xuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPCA2ICkge1xuXHRcdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdFwicGFyZW50XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuICFFeHByLnBzZXVkb3NbIFwiZW1wdHlcIiBdKCBlbGVtICk7XG5cdFx0fSxcblxuXHRcdC8vIEVsZW1lbnQvaW5wdXQgdHlwZXNcblx0XHRcImhlYWRlclwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiByaGVhZGVyLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTtcblx0XHR9LFxuXG5cdFx0XCJpbnB1dFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiByaW5wdXRzLnRlc3QoIGVsZW0ubm9kZU5hbWUgKTtcblx0XHR9LFxuXG5cdFx0XCJidXR0b25cIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiBuYW1lID09PSBcImlucHV0XCIgJiYgZWxlbS50eXBlID09PSBcImJ1dHRvblwiIHx8IG5hbWUgPT09IFwiYnV0dG9uXCI7XG5cdFx0fSxcblxuXHRcdFwidGV4dFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBhdHRyO1xuXHRcdFx0cmV0dXJuIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiICYmXG5cdFx0XHRcdGVsZW0udHlwZSA9PT0gXCJ0ZXh0XCIgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRTw4XG5cdFx0XHRcdC8vIE5ldyBIVE1MNSBhdHRyaWJ1dGUgdmFsdWVzIChlLmcuLCBcInNlYXJjaFwiKSBhcHBlYXIgd2l0aCBlbGVtLnR5cGUgPT09IFwidGV4dFwiXG5cdFx0XHRcdCggKCBhdHRyID0gZWxlbS5nZXRBdHRyaWJ1dGUoIFwidHlwZVwiICkgKSA9PSBudWxsIHx8XG5cdFx0XHRcdFx0YXR0ci50b0xvd2VyQ2FzZSgpID09PSBcInRleHRcIiApO1xuXHRcdH0sXG5cblx0XHQvLyBQb3NpdGlvbi1pbi1jb2xsZWN0aW9uXG5cdFx0XCJmaXJzdFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbigpIHtcblx0XHRcdHJldHVybiBbIDAgXTtcblx0XHR9ICksXG5cblx0XHRcImxhc3RcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIF9tYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHJldHVybiBbIGxlbmd0aCAtIDEgXTtcblx0XHR9ICksXG5cblx0XHRcImVxXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBfbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0cmV0dXJuIFsgYXJndW1lbnQgPCAwID8gYXJndW1lbnQgKyBsZW5ndGggOiBhcmd1bWVudCBdO1xuXHRcdH0gKSxcblxuXHRcdFwiZXZlblwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHR2YXIgaSA9IDA7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkgKz0gMiApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSApLFxuXG5cdFx0XCJvZGRcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0dmFyIGkgPSAxO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKSxcblxuXHRcdFwibHRcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHZhciBpID0gYXJndW1lbnQgPCAwID9cblx0XHRcdFx0YXJndW1lbnQgKyBsZW5ndGggOlxuXHRcdFx0XHRhcmd1bWVudCA+IGxlbmd0aCA/XG5cdFx0XHRcdFx0bGVuZ3RoIDpcblx0XHRcdFx0XHRhcmd1bWVudDtcblx0XHRcdGZvciAoIDsgLS1pID49IDA7ICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9ICksXG5cblx0XHRcImd0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHR2YXIgaSA9IGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQ7XG5cdFx0XHRmb3IgKCA7ICsraSA8IGxlbmd0aDsgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKVxuXHR9XG59O1xuXG5FeHByLnBzZXVkb3NbIFwibnRoXCIgXSA9IEV4cHIucHNldWRvc1sgXCJlcVwiIF07XG5cbi8vIEFkZCBidXR0b24vaW5wdXQgdHlwZSBwc2V1ZG9zXG5mb3IgKCBpIGluIHsgcmFkaW86IHRydWUsIGNoZWNrYm94OiB0cnVlLCBmaWxlOiB0cnVlLCBwYXNzd29yZDogdHJ1ZSwgaW1hZ2U6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVJbnB1dFBzZXVkbyggaSApO1xufVxuZm9yICggaSBpbiB7IHN1Ym1pdDogdHJ1ZSwgcmVzZXQ6IHRydWUgfSApIHtcblx0RXhwci5wc2V1ZG9zWyBpIF0gPSBjcmVhdGVCdXR0b25Qc2V1ZG8oIGkgKTtcbn1cblxuLy8gRWFzeSBBUEkgZm9yIGNyZWF0aW5nIG5ldyBzZXRGaWx0ZXJzXG5mdW5jdGlvbiBzZXRGaWx0ZXJzKCkge31cbnNldEZpbHRlcnMucHJvdG90eXBlID0gRXhwci5maWx0ZXJzID0gRXhwci5wc2V1ZG9zO1xuRXhwci5zZXRGaWx0ZXJzID0gbmV3IHNldEZpbHRlcnMoKTtcblxudG9rZW5pemUgPSBTaXp6bGUudG9rZW5pemUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIHBhcnNlT25seSApIHtcblx0dmFyIG1hdGNoZWQsIG1hdGNoLCB0b2tlbnMsIHR5cGUsXG5cdFx0c29GYXIsIGdyb3VwcywgcHJlRmlsdGVycyxcblx0XHRjYWNoZWQgPSB0b2tlbkNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF07XG5cblx0aWYgKCBjYWNoZWQgKSB7XG5cdFx0cmV0dXJuIHBhcnNlT25seSA/IDAgOiBjYWNoZWQuc2xpY2UoIDAgKTtcblx0fVxuXG5cdHNvRmFyID0gc2VsZWN0b3I7XG5cdGdyb3VwcyA9IFtdO1xuXHRwcmVGaWx0ZXJzID0gRXhwci5wcmVGaWx0ZXI7XG5cblx0d2hpbGUgKCBzb0ZhciApIHtcblxuXHRcdC8vIENvbW1hIGFuZCBmaXJzdCBydW5cblx0XHRpZiAoICFtYXRjaGVkIHx8ICggbWF0Y2ggPSByY29tbWEuZXhlYyggc29GYXIgKSApICkge1xuXHRcdFx0aWYgKCBtYXRjaCApIHtcblxuXHRcdFx0XHQvLyBEb24ndCBjb25zdW1lIHRyYWlsaW5nIGNvbW1hcyBhcyB2YWxpZFxuXHRcdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaFsgMCBdLmxlbmd0aCApIHx8IHNvRmFyO1xuXHRcdFx0fVxuXHRcdFx0Z3JvdXBzLnB1c2goICggdG9rZW5zID0gW10gKSApO1xuXHRcdH1cblxuXHRcdG1hdGNoZWQgPSBmYWxzZTtcblxuXHRcdC8vIENvbWJpbmF0b3JzXG5cdFx0aWYgKCAoIG1hdGNoID0gcmNvbWJpbmF0b3JzLmV4ZWMoIHNvRmFyICkgKSApIHtcblx0XHRcdG1hdGNoZWQgPSBtYXRjaC5zaGlmdCgpO1xuXHRcdFx0dG9rZW5zLnB1c2goIHtcblx0XHRcdFx0dmFsdWU6IG1hdGNoZWQsXG5cblx0XHRcdFx0Ly8gQ2FzdCBkZXNjZW5kYW50IGNvbWJpbmF0b3JzIHRvIHNwYWNlXG5cdFx0XHRcdHR5cGU6IG1hdGNoWyAwIF0ucmVwbGFjZSggcnRyaW0sIFwiIFwiIClcblx0XHRcdH0gKTtcblx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7XG5cdFx0fVxuXG5cdFx0Ly8gRmlsdGVyc1xuXHRcdGZvciAoIHR5cGUgaW4gRXhwci5maWx0ZXIgKSB7XG5cdFx0XHRpZiAoICggbWF0Y2ggPSBtYXRjaEV4cHJbIHR5cGUgXS5leGVjKCBzb0ZhciApICkgJiYgKCAhcHJlRmlsdGVyc1sgdHlwZSBdIHx8XG5cdFx0XHRcdCggbWF0Y2ggPSBwcmVGaWx0ZXJzWyB0eXBlIF0oIG1hdGNoICkgKSApICkge1xuXHRcdFx0XHRtYXRjaGVkID0gbWF0Y2guc2hpZnQoKTtcblx0XHRcdFx0dG9rZW5zLnB1c2goIHtcblx0XHRcdFx0XHR2YWx1ZTogbWF0Y2hlZCxcblx0XHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRcdG1hdGNoZXM6IG1hdGNoXG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hlZC5sZW5ndGggKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoICFtYXRjaGVkICkge1xuXHRcdFx0YnJlYWs7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBsZW5ndGggb2YgdGhlIGludmFsaWQgZXhjZXNzXG5cdC8vIGlmIHdlJ3JlIGp1c3QgcGFyc2luZ1xuXHQvLyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yIG9yIHJldHVybiB0b2tlbnNcblx0cmV0dXJuIHBhcnNlT25seSA/XG5cdFx0c29GYXIubGVuZ3RoIDpcblx0XHRzb0ZhciA/XG5cdFx0XHRTaXp6bGUuZXJyb3IoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHQvLyBDYWNoZSB0aGUgdG9rZW5zXG5cdFx0XHR0b2tlbkNhY2hlKCBzZWxlY3RvciwgZ3JvdXBzICkuc2xpY2UoIDAgKTtcbn07XG5cbmZ1bmN0aW9uIHRvU2VsZWN0b3IoIHRva2VucyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IHRva2Vucy5sZW5ndGgsXG5cdFx0c2VsZWN0b3IgPSBcIlwiO1xuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRzZWxlY3RvciArPSB0b2tlbnNbIGkgXS52YWx1ZTtcblx0fVxuXHRyZXR1cm4gc2VsZWN0b3I7XG59XG5cbmZ1bmN0aW9uIGFkZENvbWJpbmF0b3IoIG1hdGNoZXIsIGNvbWJpbmF0b3IsIGJhc2UgKSB7XG5cdHZhciBkaXIgPSBjb21iaW5hdG9yLmRpcixcblx0XHRza2lwID0gY29tYmluYXRvci5uZXh0LFxuXHRcdGtleSA9IHNraXAgfHwgZGlyLFxuXHRcdGNoZWNrTm9uRWxlbWVudHMgPSBiYXNlICYmIGtleSA9PT0gXCJwYXJlbnROb2RlXCIsXG5cdFx0ZG9uZU5hbWUgPSBkb25lKys7XG5cblx0cmV0dXJuIGNvbWJpbmF0b3IuZmlyc3QgP1xuXG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBjbG9zZXN0IGFuY2VzdG9yL3ByZWNlZGluZyBlbGVtZW50XG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSApIHtcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSA6XG5cblx0XHQvLyBDaGVjayBhZ2FpbnN0IGFsbCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudHNcblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIG9sZENhY2hlLCB1bmlxdWVDYWNoZSwgb3V0ZXJDYWNoZSxcblx0XHRcdFx0bmV3Q2FjaGUgPSBbIGRpcnJ1bnMsIGRvbmVOYW1lIF07XG5cblx0XHRcdC8vIFdlIGNhbid0IHNldCBhcmJpdHJhcnkgZGF0YSBvbiBYTUwgbm9kZXMsIHNvIHRoZXkgZG9uJ3QgYmVuZWZpdCBmcm9tIGNvbWJpbmF0b3IgY2FjaGluZ1xuXHRcdFx0aWYgKCB4bWwgKSB7XG5cdFx0XHRcdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICkge1xuXHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdFx0b3V0ZXJDYWNoZSA9IGVsZW1bIGV4cGFuZG8gXSB8fCAoIGVsZW1bIGV4cGFuZG8gXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdC8vIERlZmVuZCBhZ2FpbnN0IGNsb25lZCBhdHRyb3BlcnRpZXMgKGpRdWVyeSBnaC0xNzA5KVxuXHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBlbGVtLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0KCBvdXRlckNhY2hlWyBlbGVtLnVuaXF1ZUlEIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRpZiAoIHNraXAgJiYgc2tpcCA9PT0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpICkge1xuXHRcdFx0XHRcdFx0XHRlbGVtID0gZWxlbVsgZGlyIF0gfHwgZWxlbTtcblx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoICggb2xkQ2FjaGUgPSB1bmlxdWVDYWNoZVsga2V5IF0gKSAmJlxuXHRcdFx0XHRcdFx0XHRvbGRDYWNoZVsgMCBdID09PSBkaXJydW5zICYmIG9sZENhY2hlWyAxIF0gPT09IGRvbmVOYW1lICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEFzc2lnbiB0byBuZXdDYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzXG5cdFx0XHRcdFx0XHRcdHJldHVybiAoIG5ld0NhY2hlWyAyIF0gPSBvbGRDYWNoZVsgMiBdICk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFJldXNlIG5ld2NhY2hlIHNvIHJlc3VsdHMgYmFjay1wcm9wYWdhdGUgdG8gcHJldmlvdXMgZWxlbWVudHNcblx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIGtleSBdID0gbmV3Q2FjaGU7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQSBtYXRjaCBtZWFucyB3ZSdyZSBkb25lOyBhIGZhaWwgbWVhbnMgd2UgaGF2ZSB0byBrZWVwIGNoZWNraW5nXG5cdFx0XHRcdFx0XHRcdGlmICggKCBuZXdDYWNoZVsgMiBdID0gbWF0Y2hlciggZWxlbSwgY29udGV4dCwgeG1sICkgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH07XG59XG5cbmZ1bmN0aW9uIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApIHtcblx0cmV0dXJuIG1hdGNoZXJzLmxlbmd0aCA+IDEgP1xuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgaSA9IG1hdGNoZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRpZiAoICFtYXRjaGVyc1sgaSBdKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gOlxuXHRcdG1hdGNoZXJzWyAwIF07XG59XG5cbmZ1bmN0aW9uIG11bHRpcGxlQ29udGV4dHMoIHNlbGVjdG9yLCBjb250ZXh0cywgcmVzdWx0cyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGxlbiA9IGNvbnRleHRzLmxlbmd0aDtcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0U2l6emxlKCBzZWxlY3RvciwgY29udGV4dHNbIGkgXSwgcmVzdWx0cyApO1xuXHR9XG5cdHJldHVybiByZXN1bHRzO1xufVxuXG5mdW5jdGlvbiBjb25kZW5zZSggdW5tYXRjaGVkLCBtYXAsIGZpbHRlciwgY29udGV4dCwgeG1sICkge1xuXHR2YXIgZWxlbSxcblx0XHRuZXdVbm1hdGNoZWQgPSBbXSxcblx0XHRpID0gMCxcblx0XHRsZW4gPSB1bm1hdGNoZWQubGVuZ3RoLFxuXHRcdG1hcHBlZCA9IG1hcCAhPSBudWxsO1xuXG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdGlmICggKCBlbGVtID0gdW5tYXRjaGVkWyBpIF0gKSApIHtcblx0XHRcdGlmICggIWZpbHRlciB8fCBmaWx0ZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xuXHRcdFx0XHRuZXdVbm1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdFx0XHRpZiAoIG1hcHBlZCApIHtcblx0XHRcdFx0XHRtYXAucHVzaCggaSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIG5ld1VubWF0Y2hlZDtcbn1cblxuZnVuY3Rpb24gc2V0TWF0Y2hlciggcHJlRmlsdGVyLCBzZWxlY3RvciwgbWF0Y2hlciwgcG9zdEZpbHRlciwgcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICkge1xuXHRpZiAoIHBvc3RGaWx0ZXIgJiYgIXBvc3RGaWx0ZXJbIGV4cGFuZG8gXSApIHtcblx0XHRwb3N0RmlsdGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbHRlciApO1xuXHR9XG5cdGlmICggcG9zdEZpbmRlciAmJiAhcG9zdEZpbmRlclsgZXhwYW5kbyBdICkge1xuXHRcdHBvc3RGaW5kZXIgPSBzZXRNYXRjaGVyKCBwb3N0RmluZGVyLCBwb3N0U2VsZWN0b3IgKTtcblx0fVxuXHRyZXR1cm4gbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgcmVzdWx0cywgY29udGV4dCwgeG1sICkge1xuXHRcdHZhciB0ZW1wLCBpLCBlbGVtLFxuXHRcdFx0cHJlTWFwID0gW10sXG5cdFx0XHRwb3N0TWFwID0gW10sXG5cdFx0XHRwcmVleGlzdGluZyA9IHJlc3VsdHMubGVuZ3RoLFxuXG5cdFx0XHQvLyBHZXQgaW5pdGlhbCBlbGVtZW50cyBmcm9tIHNlZWQgb3IgY29udGV4dFxuXHRcdFx0ZWxlbXMgPSBzZWVkIHx8IG11bHRpcGxlQ29udGV4dHMoXG5cdFx0XHRcdHNlbGVjdG9yIHx8IFwiKlwiLFxuXHRcdFx0XHRjb250ZXh0Lm5vZGVUeXBlID8gWyBjb250ZXh0IF0gOiBjb250ZXh0LFxuXHRcdFx0XHRbXVxuXHRcdFx0KSxcblxuXHRcdFx0Ly8gUHJlZmlsdGVyIHRvIGdldCBtYXRjaGVyIGlucHV0LCBwcmVzZXJ2aW5nIGEgbWFwIGZvciBzZWVkLXJlc3VsdHMgc3luY2hyb25pemF0aW9uXG5cdFx0XHRtYXRjaGVySW4gPSBwcmVGaWx0ZXIgJiYgKCBzZWVkIHx8ICFzZWxlY3RvciApID9cblx0XHRcdFx0Y29uZGVuc2UoIGVsZW1zLCBwcmVNYXAsIHByZUZpbHRlciwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRlbGVtcyxcblxuXHRcdFx0bWF0Y2hlck91dCA9IG1hdGNoZXIgP1xuXG5cdFx0XHRcdC8vIElmIHdlIGhhdmUgYSBwb3N0RmluZGVyLCBvciBmaWx0ZXJlZCBzZWVkLCBvciBub24tc2VlZCBwb3N0RmlsdGVyIG9yIHByZWV4aXN0aW5nIHJlc3VsdHMsXG5cdFx0XHRcdHBvc3RGaW5kZXIgfHwgKCBzZWVkID8gcHJlRmlsdGVyIDogcHJlZXhpc3RpbmcgfHwgcG9zdEZpbHRlciApID9cblxuXHRcdFx0XHRcdC8vIC4uLmludGVybWVkaWF0ZSBwcm9jZXNzaW5nIGlzIG5lY2Vzc2FyeVxuXHRcdFx0XHRcdFtdIDpcblxuXHRcdFx0XHRcdC8vIC4uLm90aGVyd2lzZSB1c2UgcmVzdWx0cyBkaXJlY3RseVxuXHRcdFx0XHRcdHJlc3VsdHMgOlxuXHRcdFx0XHRtYXRjaGVySW47XG5cblx0XHQvLyBGaW5kIHByaW1hcnkgbWF0Y2hlc1xuXHRcdGlmICggbWF0Y2hlciApIHtcblx0XHRcdG1hdGNoZXIoIG1hdGNoZXJJbiwgbWF0Y2hlck91dCwgY29udGV4dCwgeG1sICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgcG9zdEZpbHRlclxuXHRcdGlmICggcG9zdEZpbHRlciApIHtcblx0XHRcdHRlbXAgPSBjb25kZW5zZSggbWF0Y2hlck91dCwgcG9zdE1hcCApO1xuXHRcdFx0cG9zdEZpbHRlciggdGVtcCwgW10sIGNvbnRleHQsIHhtbCApO1xuXG5cdFx0XHQvLyBVbi1tYXRjaCBmYWlsaW5nIGVsZW1lbnRzIGJ5IG1vdmluZyB0aGVtIGJhY2sgdG8gbWF0Y2hlckluXG5cdFx0XHRpID0gdGVtcC5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCAoIGVsZW0gPSB0ZW1wWyBpIF0gKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyT3V0WyBwb3N0TWFwWyBpIF0gXSA9ICEoIG1hdGNoZXJJblsgcG9zdE1hcFsgaSBdIF0gPSBlbGVtICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRpZiAoIHBvc3RGaW5kZXIgfHwgcHJlRmlsdGVyICkge1xuXHRcdFx0XHRpZiAoIHBvc3RGaW5kZXIgKSB7XG5cblx0XHRcdFx0XHQvLyBHZXQgdGhlIGZpbmFsIG1hdGNoZXJPdXQgYnkgY29uZGVuc2luZyB0aGlzIGludGVybWVkaWF0ZSBpbnRvIHBvc3RGaW5kZXIgY29udGV4dHNcblx0XHRcdFx0XHR0ZW1wID0gW107XG5cdFx0XHRcdFx0aSA9IG1hdGNoZXJPdXQubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSBtYXRjaGVyT3V0WyBpIF0gKSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBSZXN0b3JlIG1hdGNoZXJJbiBzaW5jZSBlbGVtIGlzIG5vdCB5ZXQgYSBmaW5hbCBtYXRjaFxuXHRcdFx0XHRcdFx0XHR0ZW1wLnB1c2goICggbWF0Y2hlckluWyBpIF0gPSBlbGVtICkgKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgKCBtYXRjaGVyT3V0ID0gW10gKSwgdGVtcCwgeG1sICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBNb3ZlIG1hdGNoZWQgZWxlbWVudHMgZnJvbSBzZWVkIHRvIHJlc3VsdHMgdG8ga2VlcCB0aGVtIHN5bmNocm9uaXplZFxuXHRcdFx0XHRpID0gbWF0Y2hlck91dC5sZW5ndGg7XG5cdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdGlmICggKCBlbGVtID0gbWF0Y2hlck91dFsgaSBdICkgJiZcblx0XHRcdFx0XHRcdCggdGVtcCA9IHBvc3RGaW5kZXIgPyBpbmRleE9mKCBzZWVkLCBlbGVtICkgOiBwcmVNYXBbIGkgXSApID4gLTEgKSB7XG5cblx0XHRcdFx0XHRcdHNlZWRbIHRlbXAgXSA9ICEoIHJlc3VsdHNbIHRlbXAgXSA9IGVsZW0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEFkZCBlbGVtZW50cyB0byByZXN1bHRzLCB0aHJvdWdoIHBvc3RGaW5kZXIgaWYgZGVmaW5lZFxuXHRcdH0gZWxzZSB7XG5cdFx0XHRtYXRjaGVyT3V0ID0gY29uZGVuc2UoXG5cdFx0XHRcdG1hdGNoZXJPdXQgPT09IHJlc3VsdHMgP1xuXHRcdFx0XHRcdG1hdGNoZXJPdXQuc3BsaWNlKCBwcmVleGlzdGluZywgbWF0Y2hlck91dC5sZW5ndGggKSA6XG5cdFx0XHRcdFx0bWF0Y2hlck91dFxuXHRcdFx0KTtcblx0XHRcdGlmICggcG9zdEZpbmRlciApIHtcblx0XHRcdFx0cG9zdEZpbmRlciggbnVsbCwgcmVzdWx0cywgbWF0Y2hlck91dCwgeG1sICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBtYXRjaGVyT3V0ICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9ICk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tlbnMgKSB7XG5cdHZhciBjaGVja0NvbnRleHQsIG1hdGNoZXIsIGosXG5cdFx0bGVuID0gdG9rZW5zLmxlbmd0aCxcblx0XHRsZWFkaW5nUmVsYXRpdmUgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbIDAgXS50eXBlIF0sXG5cdFx0aW1wbGljaXRSZWxhdGl2ZSA9IGxlYWRpbmdSZWxhdGl2ZSB8fCBFeHByLnJlbGF0aXZlWyBcIiBcIiBdLFxuXHRcdGkgPSBsZWFkaW5nUmVsYXRpdmUgPyAxIDogMCxcblxuXHRcdC8vIFRoZSBmb3VuZGF0aW9uYWwgbWF0Y2hlciBlbnN1cmVzIHRoYXQgZWxlbWVudHMgYXJlIHJlYWNoYWJsZSBmcm9tIHRvcC1sZXZlbCBjb250ZXh0KHMpXG5cdFx0bWF0Y2hDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbSA9PT0gY2hlY2tDb250ZXh0O1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaEFueUNvbnRleHQgPSBhZGRDb21iaW5hdG9yKCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBpbmRleE9mKCBjaGVja0NvbnRleHQsIGVsZW0gKSA+IC0xO1xuXHRcdH0sIGltcGxpY2l0UmVsYXRpdmUsIHRydWUgKSxcblx0XHRtYXRjaGVycyA9IFsgZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciByZXQgPSAoICFsZWFkaW5nUmVsYXRpdmUgJiYgKCB4bWwgfHwgY29udGV4dCAhPT0gb3V0ZXJtb3N0Q29udGV4dCApICkgfHwgKFxuXHRcdFx0XHQoIGNoZWNrQ29udGV4dCA9IGNvbnRleHQgKS5ub2RlVHlwZSA/XG5cdFx0XHRcdFx0bWF0Y2hDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSA6XG5cdFx0XHRcdFx0bWF0Y2hBbnlDb250ZXh0KCBlbGVtLCBjb250ZXh0LCB4bWwgKSApO1xuXG5cdFx0XHQvLyBBdm9pZCBoYW5naW5nIG9udG8gZWxlbWVudCAoaXNzdWUgIzI5OSlcblx0XHRcdGNoZWNrQ29udGV4dCA9IG51bGw7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH0gXTtcblxuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRpZiAoICggbWF0Y2hlciA9IEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgaSBdLnR5cGUgXSApICkge1xuXHRcdFx0bWF0Y2hlcnMgPSBbIGFkZENvbWJpbmF0b3IoIGVsZW1lbnRNYXRjaGVyKCBtYXRjaGVycyApLCBtYXRjaGVyICkgXTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWF0Y2hlciA9IEV4cHIuZmlsdGVyWyB0b2tlbnNbIGkgXS50eXBlIF0uYXBwbHkoIG51bGwsIHRva2Vuc1sgaSBdLm1hdGNoZXMgKTtcblxuXHRcdFx0Ly8gUmV0dXJuIHNwZWNpYWwgdXBvbiBzZWVpbmcgYSBwb3NpdGlvbmFsIG1hdGNoZXJcblx0XHRcdGlmICggbWF0Y2hlclsgZXhwYW5kbyBdICkge1xuXG5cdFx0XHRcdC8vIEZpbmQgdGhlIG5leHQgcmVsYXRpdmUgb3BlcmF0b3IgKGlmIGFueSkgZm9yIHByb3BlciBoYW5kbGluZ1xuXHRcdFx0XHRqID0gKytpO1xuXHRcdFx0XHRmb3IgKCA7IGogPCBsZW47IGorKyApIHtcblx0XHRcdFx0XHRpZiAoIEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgaiBdLnR5cGUgXSApIHtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gc2V0TWF0Y2hlcihcblx0XHRcdFx0XHRpID4gMSAmJiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSxcblx0XHRcdFx0XHRpID4gMSAmJiB0b1NlbGVjdG9yKFxuXG5cdFx0XHRcdFx0Ly8gSWYgdGhlIHByZWNlZGluZyB0b2tlbiB3YXMgYSBkZXNjZW5kYW50IGNvbWJpbmF0b3IsIGluc2VydCBhbiBpbXBsaWNpdCBhbnktZWxlbWVudCBgKmBcblx0XHRcdFx0XHR0b2tlbnNcblx0XHRcdFx0XHRcdC5zbGljZSggMCwgaSAtIDEgKVxuXHRcdFx0XHRcdFx0LmNvbmNhdCggeyB2YWx1ZTogdG9rZW5zWyBpIC0gMiBdLnR5cGUgPT09IFwiIFwiID8gXCIqXCIgOiBcIlwiIH0gKVxuXHRcdFx0XHRcdCkucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApLFxuXHRcdFx0XHRcdG1hdGNoZXIsXG5cdFx0XHRcdFx0aSA8IGogJiYgbWF0Y2hlckZyb21Ub2tlbnMoIHRva2Vucy5zbGljZSggaSwgaiApICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiBtYXRjaGVyRnJvbVRva2VucyggKCB0b2tlbnMgPSB0b2tlbnMuc2xpY2UoIGogKSApICksXG5cdFx0XHRcdFx0aiA8IGxlbiAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKVxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0bWF0Y2hlcnMucHVzaCggbWF0Y2hlciApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKTtcbn1cblxuZnVuY3Rpb24gbWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzICkge1xuXHR2YXIgYnlTZXQgPSBzZXRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdGJ5RWxlbWVudCA9IGVsZW1lbnRNYXRjaGVycy5sZW5ndGggPiAwLFxuXHRcdHN1cGVyTWF0Y2hlciA9IGZ1bmN0aW9uKCBzZWVkLCBjb250ZXh0LCB4bWwsIHJlc3VsdHMsIG91dGVybW9zdCApIHtcblx0XHRcdHZhciBlbGVtLCBqLCBtYXRjaGVyLFxuXHRcdFx0XHRtYXRjaGVkQ291bnQgPSAwLFxuXHRcdFx0XHRpID0gXCIwXCIsXG5cdFx0XHRcdHVubWF0Y2hlZCA9IHNlZWQgJiYgW10sXG5cdFx0XHRcdHNldE1hdGNoZWQgPSBbXSxcblx0XHRcdFx0Y29udGV4dEJhY2t1cCA9IG91dGVybW9zdENvbnRleHQsXG5cblx0XHRcdFx0Ly8gV2UgbXVzdCBhbHdheXMgaGF2ZSBlaXRoZXIgc2VlZCBlbGVtZW50cyBvciBvdXRlcm1vc3QgY29udGV4dFxuXHRcdFx0XHRlbGVtcyA9IHNlZWQgfHwgYnlFbGVtZW50ICYmIEV4cHIuZmluZFsgXCJUQUdcIiBdKCBcIipcIiwgb3V0ZXJtb3N0ICksXG5cblx0XHRcdFx0Ly8gVXNlIGludGVnZXIgZGlycnVucyBpZmYgdGhpcyBpcyB0aGUgb3V0ZXJtb3N0IG1hdGNoZXJcblx0XHRcdFx0ZGlycnVuc1VuaXF1ZSA9ICggZGlycnVucyArPSBjb250ZXh0QmFja3VwID09IG51bGwgPyAxIDogTWF0aC5yYW5kb20oKSB8fCAwLjEgKSxcblx0XHRcdFx0bGVuID0gZWxlbXMubGVuZ3RoO1xuXG5cdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dCA9PSBkb2N1bWVudCB8fCBjb250ZXh0IHx8IG91dGVybW9zdDtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIGVsZW1lbnRzIHBhc3NpbmcgZWxlbWVudE1hdGNoZXJzIGRpcmVjdGx5IHRvIHJlc3VsdHNcblx0XHRcdC8vIFN1cHBvcnQ6IElFPDksIFNhZmFyaVxuXHRcdFx0Ly8gVG9sZXJhdGUgTm9kZUxpc3QgcHJvcGVydGllcyAoSUU6IFwibGVuZ3RoXCI7IFNhZmFyaTogPG51bWJlcj4pIG1hdGNoaW5nIGVsZW1lbnRzIGJ5IGlkXG5cdFx0XHRmb3IgKCA7IGkgIT09IGxlbiAmJiAoIGVsZW0gPSBlbGVtc1sgaSBdICkgIT0gbnVsbDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGJ5RWxlbWVudCAmJiBlbGVtICkge1xuXHRcdFx0XHRcdGogPSAwO1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHRcdFx0Ly8gSUUvRWRnZSBzb21ldGltZXMgdGhyb3cgYSBcIlBlcm1pc3Npb24gZGVuaWVkXCIgZXJyb3Igd2hlbiBzdHJpY3QtY29tcGFyaW5nXG5cdFx0XHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRcdFx0XHRpZiAoICFjb250ZXh0ICYmIGVsZW0ub3duZXJEb2N1bWVudCAhPSBkb2N1bWVudCApIHtcblx0XHRcdFx0XHRcdHNldERvY3VtZW50KCBlbGVtICk7XG5cdFx0XHRcdFx0XHR4bWwgPSAhZG9jdW1lbnRJc0hUTUw7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHdoaWxlICggKCBtYXRjaGVyID0gZWxlbWVudE1hdGNoZXJzWyBqKysgXSApICkge1xuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVyKCBlbGVtLCBjb250ZXh0IHx8IGRvY3VtZW50LCB4bWwgKSApIHtcblx0XHRcdFx0XHRcdFx0cmVzdWx0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG91dGVybW9zdCApIHtcblx0XHRcdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFRyYWNrIHVubWF0Y2hlZCBlbGVtZW50cyBmb3Igc2V0IGZpbHRlcnNcblx0XHRcdFx0aWYgKCBieVNldCApIHtcblxuXHRcdFx0XHRcdC8vIFRoZXkgd2lsbCBoYXZlIGdvbmUgdGhyb3VnaCBhbGwgcG9zc2libGUgbWF0Y2hlcnNcblx0XHRcdFx0XHRpZiAoICggZWxlbSA9ICFtYXRjaGVyICYmIGVsZW0gKSApIHtcblx0XHRcdFx0XHRcdG1hdGNoZWRDb3VudC0tO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIExlbmd0aGVuIHRoZSBhcnJheSBmb3IgZXZlcnkgZWxlbWVudCwgbWF0Y2hlZCBvciBub3Rcblx0XHRcdFx0XHRpZiAoIHNlZWQgKSB7XG5cdFx0XHRcdFx0XHR1bm1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBgaWAgaXMgbm93IHRoZSBjb3VudCBvZiBlbGVtZW50cyB2aXNpdGVkIGFib3ZlLCBhbmQgYWRkaW5nIGl0IHRvIGBtYXRjaGVkQ291bnRgXG5cdFx0XHQvLyBtYWtlcyB0aGUgbGF0dGVyIG5vbm5lZ2F0aXZlLlxuXHRcdFx0bWF0Y2hlZENvdW50ICs9IGk7XG5cblx0XHRcdC8vIEFwcGx5IHNldCBmaWx0ZXJzIHRvIHVubWF0Y2hlZCBlbGVtZW50c1xuXHRcdFx0Ly8gTk9URTogVGhpcyBjYW4gYmUgc2tpcHBlZCBpZiB0aGVyZSBhcmUgbm8gdW5tYXRjaGVkIGVsZW1lbnRzIChpLmUuLCBgbWF0Y2hlZENvdW50YFxuXHRcdFx0Ly8gZXF1YWxzIGBpYCksIHVubGVzcyB3ZSBkaWRuJ3QgdmlzaXQgX2FueV8gZWxlbWVudHMgaW4gdGhlIGFib3ZlIGxvb3AgYmVjYXVzZSB3ZSBoYXZlXG5cdFx0XHQvLyBubyBlbGVtZW50IG1hdGNoZXJzIGFuZCBubyBzZWVkLlxuXHRcdFx0Ly8gSW5jcmVtZW50aW5nIGFuIGluaXRpYWxseS1zdHJpbmcgXCIwXCIgYGlgIGFsbG93cyBgaWAgdG8gcmVtYWluIGEgc3RyaW5nIG9ubHkgaW4gdGhhdFxuXHRcdFx0Ly8gY2FzZSwgd2hpY2ggd2lsbCByZXN1bHQgaW4gYSBcIjAwXCIgYG1hdGNoZWRDb3VudGAgdGhhdCBkaWZmZXJzIGZyb20gYGlgIGJ1dCBpcyBhbHNvXG5cdFx0XHQvLyBudW1lcmljYWxseSB6ZXJvLlxuXHRcdFx0aWYgKCBieVNldCAmJiBpICE9PSBtYXRjaGVkQ291bnQgKSB7XG5cdFx0XHRcdGogPSAwO1xuXHRcdFx0XHR3aGlsZSAoICggbWF0Y2hlciA9IHNldE1hdGNoZXJzWyBqKysgXSApICkge1xuXHRcdFx0XHRcdG1hdGNoZXIoIHVubWF0Y2hlZCwgc2V0TWF0Y2hlZCwgY29udGV4dCwgeG1sICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIHNlZWQgKSB7XG5cblx0XHRcdFx0XHQvLyBSZWludGVncmF0ZSBlbGVtZW50IG1hdGNoZXMgdG8gZWxpbWluYXRlIHRoZSBuZWVkIGZvciBzb3J0aW5nXG5cdFx0XHRcdFx0aWYgKCBtYXRjaGVkQ291bnQgPiAwICkge1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRcdGlmICggISggdW5tYXRjaGVkWyBpIF0gfHwgc2V0TWF0Y2hlZFsgaSBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0c2V0TWF0Y2hlZFsgaSBdID0gcG9wLmNhbGwoIHJlc3VsdHMgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIERpc2NhcmQgaW5kZXggcGxhY2Vob2xkZXIgdmFsdWVzIHRvIGdldCBvbmx5IGFjdHVhbCBtYXRjaGVzXG5cdFx0XHRcdFx0c2V0TWF0Y2hlZCA9IGNvbmRlbnNlKCBzZXRNYXRjaGVkICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBZGQgbWF0Y2hlcyB0byByZXN1bHRzXG5cdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIHNldE1hdGNoZWQgKTtcblxuXHRcdFx0XHQvLyBTZWVkbGVzcyBzZXQgbWF0Y2hlcyBzdWNjZWVkaW5nIG11bHRpcGxlIHN1Y2Nlc3NmdWwgbWF0Y2hlcnMgc3RpcHVsYXRlIHNvcnRpbmdcblx0XHRcdFx0aWYgKCBvdXRlcm1vc3QgJiYgIXNlZWQgJiYgc2V0TWF0Y2hlZC5sZW5ndGggPiAwICYmXG5cdFx0XHRcdFx0KCBtYXRjaGVkQ291bnQgKyBzZXRNYXRjaGVycy5sZW5ndGggKSA+IDEgKSB7XG5cblx0XHRcdFx0XHRTaXp6bGUudW5pcXVlU29ydCggcmVzdWx0cyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIE92ZXJyaWRlIG1hbmlwdWxhdGlvbiBvZiBnbG9iYWxzIGJ5IG5lc3RlZCBtYXRjaGVyc1xuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdGRpcnJ1bnMgPSBkaXJydW5zVW5pcXVlO1xuXHRcdFx0XHRvdXRlcm1vc3RDb250ZXh0ID0gY29udGV4dEJhY2t1cDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHVubWF0Y2hlZDtcblx0XHR9O1xuXG5cdHJldHVybiBieVNldCA/XG5cdFx0bWFya0Z1bmN0aW9uKCBzdXBlck1hdGNoZXIgKSA6XG5cdFx0c3VwZXJNYXRjaGVyO1xufVxuXG5jb21waWxlID0gU2l6emxlLmNvbXBpbGUgPSBmdW5jdGlvbiggc2VsZWN0b3IsIG1hdGNoIC8qIEludGVybmFsIFVzZSBPbmx5ICovICkge1xuXHR2YXIgaSxcblx0XHRzZXRNYXRjaGVycyA9IFtdLFxuXHRcdGVsZW1lbnRNYXRjaGVycyA9IFtdLFxuXHRcdGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGVbIHNlbGVjdG9yICsgXCIgXCIgXTtcblxuXHRpZiAoICFjYWNoZWQgKSB7XG5cblx0XHQvLyBHZW5lcmF0ZSBhIGZ1bmN0aW9uIG9mIHJlY3Vyc2l2ZSBmdW5jdGlvbnMgdGhhdCBjYW4gYmUgdXNlZCB0byBjaGVjayBlYWNoIGVsZW1lbnRcblx0XHRpZiAoICFtYXRjaCApIHtcblx0XHRcdG1hdGNoID0gdG9rZW5pemUoIHNlbGVjdG9yICk7XG5cdFx0fVxuXHRcdGkgPSBtYXRjaC5sZW5ndGg7XG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRjYWNoZWQgPSBtYXRjaGVyRnJvbVRva2VucyggbWF0Y2hbIGkgXSApO1xuXHRcdFx0aWYgKCBjYWNoZWRbIGV4cGFuZG8gXSApIHtcblx0XHRcdFx0c2V0TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtZW50TWF0Y2hlcnMucHVzaCggY2FjaGVkICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ2FjaGUgdGhlIGNvbXBpbGVkIGZ1bmN0aW9uXG5cdFx0Y2FjaGVkID0gY29tcGlsZXJDYWNoZShcblx0XHRcdHNlbGVjdG9yLFxuXHRcdFx0bWF0Y2hlckZyb21Hcm91cE1hdGNoZXJzKCBlbGVtZW50TWF0Y2hlcnMsIHNldE1hdGNoZXJzIClcblx0XHQpO1xuXG5cdFx0Ly8gU2F2ZSBzZWxlY3RvciBhbmQgdG9rZW5pemF0aW9uXG5cdFx0Y2FjaGVkLnNlbGVjdG9yID0gc2VsZWN0b3I7XG5cdH1cblx0cmV0dXJuIGNhY2hlZDtcbn07XG5cbi8qKlxuICogQSBsb3ctbGV2ZWwgc2VsZWN0aW9uIGZ1bmN0aW9uIHRoYXQgd29ya3Mgd2l0aCBTaXp6bGUncyBjb21waWxlZFxuICogIHNlbGVjdG9yIGZ1bmN0aW9uc1xuICogQHBhcmFtIHtTdHJpbmd8RnVuY3Rpb259IHNlbGVjdG9yIEEgc2VsZWN0b3Igb3IgYSBwcmUtY29tcGlsZWRcbiAqICBzZWxlY3RvciBmdW5jdGlvbiBidWlsdCB3aXRoIFNpenpsZS5jb21waWxlXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGNvbnRleHRcbiAqIEBwYXJhbSB7QXJyYXl9IFtyZXN1bHRzXVxuICogQHBhcmFtIHtBcnJheX0gW3NlZWRdIEEgc2V0IG9mIGVsZW1lbnRzIHRvIG1hdGNoIGFnYWluc3RcbiAqL1xuc2VsZWN0ID0gU2l6emxlLnNlbGVjdCA9IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHtcblx0dmFyIGksIHRva2VucywgdG9rZW4sIHR5cGUsIGZpbmQsXG5cdFx0Y29tcGlsZWQgPSB0eXBlb2Ygc2VsZWN0b3IgPT09IFwiZnVuY3Rpb25cIiAmJiBzZWxlY3Rvcixcblx0XHRtYXRjaCA9ICFzZWVkICYmIHRva2VuaXplKCAoIHNlbGVjdG9yID0gY29tcGlsZWQuc2VsZWN0b3IgfHwgc2VsZWN0b3IgKSApO1xuXG5cdHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuXG5cdC8vIFRyeSB0byBtaW5pbWl6ZSBvcGVyYXRpb25zIGlmIHRoZXJlIGlzIG9ubHkgb25lIHNlbGVjdG9yIGluIHRoZSBsaXN0IGFuZCBubyBzZWVkXG5cdC8vICh0aGUgbGF0dGVyIG9mIHdoaWNoIGd1YXJhbnRlZXMgdXMgY29udGV4dClcblx0aWYgKCBtYXRjaC5sZW5ndGggPT09IDEgKSB7XG5cblx0XHQvLyBSZWR1Y2UgY29udGV4dCBpZiB0aGUgbGVhZGluZyBjb21wb3VuZCBzZWxlY3RvciBpcyBhbiBJRFxuXHRcdHRva2VucyA9IG1hdGNoWyAwIF0gPSBtYXRjaFsgMCBdLnNsaWNlKCAwICk7XG5cdFx0aWYgKCB0b2tlbnMubGVuZ3RoID4gMiAmJiAoIHRva2VuID0gdG9rZW5zWyAwIF0gKS50eXBlID09PSBcIklEXCIgJiZcblx0XHRcdGNvbnRleHQubm9kZVR5cGUgPT09IDkgJiYgZG9jdW1lbnRJc0hUTUwgJiYgRXhwci5yZWxhdGl2ZVsgdG9rZW5zWyAxIF0udHlwZSBdICkge1xuXG5cdFx0XHRjb250ZXh0ID0gKCBFeHByLmZpbmRbIFwiSURcIiBdKCB0b2tlbi5tYXRjaGVzWyAwIF1cblx0XHRcdFx0LnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICksIGNvbnRleHQgKSB8fCBbXSApWyAwIF07XG5cdFx0XHRpZiAoICFjb250ZXh0ICkge1xuXHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblxuXHRcdFx0Ly8gUHJlY29tcGlsZWQgbWF0Y2hlcnMgd2lsbCBzdGlsbCB2ZXJpZnkgYW5jZXN0cnksIHNvIHN0ZXAgdXAgYSBsZXZlbFxuXHRcdFx0fSBlbHNlIGlmICggY29tcGlsZWQgKSB7XG5cdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cblx0XHRcdHNlbGVjdG9yID0gc2VsZWN0b3Iuc2xpY2UoIHRva2Vucy5zaGlmdCgpLnZhbHVlLmxlbmd0aCApO1xuXHRcdH1cblxuXHRcdC8vIEZldGNoIGEgc2VlZCBzZXQgZm9yIHJpZ2h0LXRvLWxlZnQgbWF0Y2hpbmdcblx0XHRpID0gbWF0Y2hFeHByWyBcIm5lZWRzQ29udGV4dFwiIF0udGVzdCggc2VsZWN0b3IgKSA/IDAgOiB0b2tlbnMubGVuZ3RoO1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0dG9rZW4gPSB0b2tlbnNbIGkgXTtcblxuXHRcdFx0Ly8gQWJvcnQgaWYgd2UgaGl0IGEgY29tYmluYXRvclxuXHRcdFx0aWYgKCBFeHByLnJlbGF0aXZlWyAoIHR5cGUgPSB0b2tlbi50eXBlICkgXSApIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoICggZmluZCA9IEV4cHIuZmluZFsgdHlwZSBdICkgKSB7XG5cblx0XHRcdFx0Ly8gU2VhcmNoLCBleHBhbmRpbmcgY29udGV4dCBmb3IgbGVhZGluZyBzaWJsaW5nIGNvbWJpbmF0b3JzXG5cdFx0XHRcdGlmICggKCBzZWVkID0gZmluZChcblx0XHRcdFx0XHR0b2tlbi5tYXRjaGVzWyAwIF0ucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKSxcblx0XHRcdFx0XHRyc2libGluZy50ZXN0KCB0b2tlbnNbIDAgXS50eXBlICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8XG5cdFx0XHRcdFx0XHRjb250ZXh0XG5cdFx0XHRcdCkgKSApIHtcblxuXHRcdFx0XHRcdC8vIElmIHNlZWQgaXMgZW1wdHkgb3Igbm8gdG9rZW5zIHJlbWFpbiwgd2UgY2FuIHJldHVybiBlYXJseVxuXHRcdFx0XHRcdHRva2Vucy5zcGxpY2UoIGksIDEgKTtcblx0XHRcdFx0XHRzZWxlY3RvciA9IHNlZWQubGVuZ3RoICYmIHRvU2VsZWN0b3IoIHRva2VucyApO1xuXHRcdFx0XHRcdGlmICggIXNlbGVjdG9yICkge1xuXHRcdFx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgc2VlZCApO1xuXHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBDb21waWxlIGFuZCBleGVjdXRlIGEgZmlsdGVyaW5nIGZ1bmN0aW9uIGlmIG9uZSBpcyBub3QgcHJvdmlkZWRcblx0Ly8gUHJvdmlkZSBgbWF0Y2hgIHRvIGF2b2lkIHJldG9rZW5pemF0aW9uIGlmIHdlIG1vZGlmaWVkIHRoZSBzZWxlY3RvciBhYm92ZVxuXHQoIGNvbXBpbGVkIHx8IGNvbXBpbGUoIHNlbGVjdG9yLCBtYXRjaCApICkoXG5cdFx0c2VlZCxcblx0XHRjb250ZXh0LFxuXHRcdCFkb2N1bWVudElzSFRNTCxcblx0XHRyZXN1bHRzLFxuXHRcdCFjb250ZXh0IHx8IHJzaWJsaW5nLnRlc3QoIHNlbGVjdG9yICkgJiYgdGVzdENvbnRleHQoIGNvbnRleHQucGFyZW50Tm9kZSApIHx8IGNvbnRleHRcblx0KTtcblx0cmV0dXJuIHJlc3VsdHM7XG59O1xuXG4vLyBPbmUtdGltZSBhc3NpZ25tZW50c1xuXG4vLyBTb3J0IHN0YWJpbGl0eVxuc3VwcG9ydC5zb3J0U3RhYmxlID0gZXhwYW5kby5zcGxpdCggXCJcIiApLnNvcnQoIHNvcnRPcmRlciApLmpvaW4oIFwiXCIgKSA9PT0gZXhwYW5kbztcblxuLy8gU3VwcG9ydDogQ2hyb21lIDE0LTM1K1xuLy8gQWx3YXlzIGFzc3VtZSBkdXBsaWNhdGVzIGlmIHRoZXkgYXJlbid0IHBhc3NlZCB0byB0aGUgY29tcGFyaXNvbiBmdW5jdGlvblxuc3VwcG9ydC5kZXRlY3REdXBsaWNhdGVzID0gISFoYXNEdXBsaWNhdGU7XG5cbi8vIEluaXRpYWxpemUgYWdhaW5zdCB0aGUgZGVmYXVsdCBkb2N1bWVudFxuc2V0RG9jdW1lbnQoKTtcblxuLy8gU3VwcG9ydDogV2Via2l0PDUzNy4zMiAtIFNhZmFyaSA2LjAuMy9DaHJvbWUgMjUgKGZpeGVkIGluIENocm9tZSAyNylcbi8vIERldGFjaGVkIG5vZGVzIGNvbmZvdW5kaW5nbHkgZm9sbG93ICplYWNoIG90aGVyKlxuc3VwcG9ydC5zb3J0RGV0YWNoZWQgPSBhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblxuXHQvLyBTaG91bGQgcmV0dXJuIDEsIGJ1dCByZXR1cm5zIDQgKGZvbGxvd2luZylcblx0cmV0dXJuIGVsLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImZpZWxkc2V0XCIgKSApICYgMTtcbn0gKTtcblxuLy8gU3VwcG9ydDogSUU8OFxuLy8gUHJldmVudCBhdHRyaWJ1dGUvcHJvcGVydHkgXCJpbnRlcnBvbGF0aW9uXCJcbi8vIGh0dHBzOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkvbXM1MzY0MjklMjhWUy44NSUyOS5hc3B4XG5pZiAoICFhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblx0ZWwuaW5uZXJIVE1MID0gXCI8YSBocmVmPScjJz48L2E+XCI7XG5cdHJldHVybiBlbC5maXJzdENoaWxkLmdldEF0dHJpYnV0ZSggXCJocmVmXCIgKSA9PT0gXCIjXCI7XG59ICkgKSB7XG5cdGFkZEhhbmRsZSggXCJ0eXBlfGhyZWZ8aGVpZ2h0fHdpZHRoXCIsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHRpZiAoICFpc1hNTCApIHtcblx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSwgbmFtZS50b0xvd2VyQ2FzZSgpID09PSBcInR5cGVcIiA/IDEgOiAyICk7XG5cdFx0fVxuXHR9ICk7XG59XG5cbi8vIFN1cHBvcnQ6IElFPDlcbi8vIFVzZSBkZWZhdWx0VmFsdWUgaW4gcGxhY2Ugb2YgZ2V0QXR0cmlidXRlKFwidmFsdWVcIilcbmlmICggIXN1cHBvcnQuYXR0cmlidXRlcyB8fCAhYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdGVsLmlubmVySFRNTCA9IFwiPGlucHV0Lz5cIjtcblx0ZWwuZmlyc3RDaGlsZC5zZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiwgXCJcIiApO1xuXHRyZXR1cm4gZWwuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiApID09PSBcIlwiO1xufSApICkge1xuXHRhZGRIYW5kbGUoIFwidmFsdWVcIiwgZnVuY3Rpb24oIGVsZW0sIF9uYW1lLCBpc1hNTCApIHtcblx0XHRpZiAoICFpc1hNTCAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiaW5wdXRcIiApIHtcblx0XHRcdHJldHVybiBlbGVtLmRlZmF1bHRWYWx1ZTtcblx0XHR9XG5cdH0gKTtcbn1cblxuLy8gU3VwcG9ydDogSUU8OVxuLy8gVXNlIGdldEF0dHJpYnV0ZU5vZGUgdG8gZmV0Y2ggYm9vbGVhbnMgd2hlbiBnZXRBdHRyaWJ1dGUgbGllc1xuaWYgKCAhYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdHJldHVybiBlbC5nZXRBdHRyaWJ1dGUoIFwiZGlzYWJsZWRcIiApID09IG51bGw7XG59ICkgKSB7XG5cdGFkZEhhbmRsZSggYm9vbGVhbnMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHR2YXIgdmFsO1xuXHRcdGlmICggIWlzWE1MICkge1xuXHRcdFx0cmV0dXJuIGVsZW1bIG5hbWUgXSA9PT0gdHJ1ZSA/IG5hbWUudG9Mb3dlckNhc2UoKSA6XG5cdFx0XHRcdCggdmFsID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICkgKSAmJiB2YWwuc3BlY2lmaWVkID9cblx0XHRcdFx0XHR2YWwudmFsdWUgOlxuXHRcdFx0XHRcdG51bGw7XG5cdFx0fVxuXHR9ICk7XG59XG5cbnJldHVybiBTaXp6bGU7XG5cbn0gKSggd2luZG93ICk7XG5cblxuXG5qUXVlcnkuZmluZCA9IFNpenpsZTtcbmpRdWVyeS5leHByID0gU2l6emxlLnNlbGVjdG9ycztcblxuLy8gRGVwcmVjYXRlZFxualF1ZXJ5LmV4cHJbIFwiOlwiIF0gPSBqUXVlcnkuZXhwci5wc2V1ZG9zO1xualF1ZXJ5LnVuaXF1ZVNvcnQgPSBqUXVlcnkudW5pcXVlID0gU2l6emxlLnVuaXF1ZVNvcnQ7XG5qUXVlcnkudGV4dCA9IFNpenpsZS5nZXRUZXh0O1xualF1ZXJ5LmlzWE1MRG9jID0gU2l6emxlLmlzWE1MO1xualF1ZXJ5LmNvbnRhaW5zID0gU2l6emxlLmNvbnRhaW5zO1xualF1ZXJ5LmVzY2FwZVNlbGVjdG9yID0gU2l6emxlLmVzY2FwZTtcblxuXG5cblxudmFyIGRpciA9IGZ1bmN0aW9uKCBlbGVtLCBkaXIsIHVudGlsICkge1xuXHR2YXIgbWF0Y2hlZCA9IFtdLFxuXHRcdHRydW5jYXRlID0gdW50aWwgIT09IHVuZGVmaW5lZDtcblxuXHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgJiYgZWxlbS5ub2RlVHlwZSAhPT0gOSApIHtcblx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRpZiAoIHRydW5jYXRlICYmIGpRdWVyeSggZWxlbSApLmlzKCB1bnRpbCApICkge1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHRcdG1hdGNoZWQucHVzaCggZWxlbSApO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gbWF0Y2hlZDtcbn07XG5cblxudmFyIHNpYmxpbmdzID0gZnVuY3Rpb24oIG4sIGVsZW0gKSB7XG5cdHZhciBtYXRjaGVkID0gW107XG5cblx0Zm9yICggOyBuOyBuID0gbi5uZXh0U2libGluZyApIHtcblx0XHRpZiAoIG4ubm9kZVR5cGUgPT09IDEgJiYgbiAhPT0gZWxlbSApIHtcblx0XHRcdG1hdGNoZWQucHVzaCggbiApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBtYXRjaGVkO1xufTtcblxuXG52YXIgcm5lZWRzQ29udGV4dCA9IGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dDtcblxuXG5cbmZ1bmN0aW9uIG5vZGVOYW1lKCBlbGVtLCBuYW1lICkge1xuXG5cdHJldHVybiBlbGVtLm5vZGVOYW1lICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG59XG52YXIgcnNpbmdsZVRhZyA9ICggL148KFthLXpdW15cXC9cXDA+OlxceDIwXFx0XFxyXFxuXFxmXSopW1xceDIwXFx0XFxyXFxuXFxmXSpcXC8/Pig/OjxcXC9cXDE+fCkkL2kgKTtcblxuXG5cbi8vIEltcGxlbWVudCB0aGUgaWRlbnRpY2FsIGZ1bmN0aW9uYWxpdHkgZm9yIGZpbHRlciBhbmQgbm90XG5mdW5jdGlvbiB3aW5ub3coIGVsZW1lbnRzLCBxdWFsaWZpZXIsIG5vdCApIHtcblx0aWYgKCBpc0Z1bmN0aW9uKCBxdWFsaWZpZXIgKSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiAhIXF1YWxpZmllci5jYWxsKCBlbGVtLCBpLCBlbGVtICkgIT09IG5vdDtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBTaW5nbGUgZWxlbWVudFxuXHRpZiAoIHF1YWxpZmllci5ub2RlVHlwZSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAoIGVsZW0gPT09IHF1YWxpZmllciApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gQXJyYXlsaWtlIG9mIGVsZW1lbnRzIChqUXVlcnksIGFyZ3VtZW50cywgQXJyYXkpXG5cdGlmICggdHlwZW9mIHF1YWxpZmllciAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdyZXAoIGVsZW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAoIGluZGV4T2YuY2FsbCggcXVhbGlmaWVyLCBlbGVtICkgPiAtMSApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gRmlsdGVyZWQgZGlyZWN0bHkgZm9yIGJvdGggc2ltcGxlIGFuZCBjb21wbGV4IHNlbGVjdG9yc1xuXHRyZXR1cm4galF1ZXJ5LmZpbHRlciggcXVhbGlmaWVyLCBlbGVtZW50cywgbm90ICk7XG59XG5cbmpRdWVyeS5maWx0ZXIgPSBmdW5jdGlvbiggZXhwciwgZWxlbXMsIG5vdCApIHtcblx0dmFyIGVsZW0gPSBlbGVtc1sgMCBdO1xuXG5cdGlmICggbm90ICkge1xuXHRcdGV4cHIgPSBcIjpub3QoXCIgKyBleHByICsgXCIpXCI7XG5cdH1cblxuXHRpZiAoIGVsZW1zLmxlbmd0aCA9PT0gMSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdHJldHVybiBqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGVsZW0sIGV4cHIgKSA/IFsgZWxlbSBdIDogW107XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5LmZpbmQubWF0Y2hlcyggZXhwciwgalF1ZXJ5LmdyZXAoIGVsZW1zLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZWxlbS5ub2RlVHlwZSA9PT0gMTtcblx0fSApICk7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGZpbmQ6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgaSwgcmV0LFxuXHRcdFx0bGVuID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRzZWxmID0gdGhpcztcblxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBqUXVlcnkoIHNlbGVjdG9yICkuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0XHRpZiAoIGpRdWVyeS5jb250YWlucyggc2VsZlsgaSBdLCB0aGlzICkgKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gKSApO1xuXHRcdH1cblxuXHRcdHJldCA9IHRoaXMucHVzaFN0YWNrKCBbXSApO1xuXG5cdFx0Zm9yICggaSA9IDA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdGpRdWVyeS5maW5kKCBzZWxlY3Rvciwgc2VsZlsgaSBdLCByZXQgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gbGVuID4gMSA/IGpRdWVyeS51bmlxdWVTb3J0KCByZXQgKSA6IHJldDtcblx0fSxcblx0ZmlsdGVyOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCB3aW5ub3coIHRoaXMsIHNlbGVjdG9yIHx8IFtdLCBmYWxzZSApICk7XG5cdH0sXG5cdG5vdDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KCB0aGlzLCBzZWxlY3RvciB8fCBbXSwgdHJ1ZSApICk7XG5cdH0sXG5cdGlzOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuICEhd2lubm93KFxuXHRcdFx0dGhpcyxcblxuXHRcdFx0Ly8gSWYgdGhpcyBpcyBhIHBvc2l0aW9uYWwvcmVsYXRpdmUgc2VsZWN0b3IsIGNoZWNrIG1lbWJlcnNoaXAgaW4gdGhlIHJldHVybmVkIHNldFxuXHRcdFx0Ly8gc28gJChcInA6Zmlyc3RcIikuaXMoXCJwOmxhc3RcIikgd29uJ3QgcmV0dXJuIHRydWUgZm9yIGEgZG9jIHdpdGggdHdvIFwicFwiLlxuXHRcdFx0dHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICYmIHJuZWVkc0NvbnRleHQudGVzdCggc2VsZWN0b3IgKSA/XG5cdFx0XHRcdGpRdWVyeSggc2VsZWN0b3IgKSA6XG5cdFx0XHRcdHNlbGVjdG9yIHx8IFtdLFxuXHRcdFx0ZmFsc2Vcblx0XHQpLmxlbmd0aDtcblx0fVxufSApO1xuXG5cbi8vIEluaXRpYWxpemUgYSBqUXVlcnkgb2JqZWN0XG5cblxuLy8gQSBjZW50cmFsIHJlZmVyZW5jZSB0byB0aGUgcm9vdCBqUXVlcnkoZG9jdW1lbnQpXG52YXIgcm9vdGpRdWVyeSxcblxuXHQvLyBBIHNpbXBsZSB3YXkgdG8gY2hlY2sgZm9yIEhUTUwgc3RyaW5nc1xuXHQvLyBQcmlvcml0aXplICNpZCBvdmVyIDx0YWc+IHRvIGF2b2lkIFhTUyB2aWEgbG9jYXRpb24uaGFzaCAoIzk1MjEpXG5cdC8vIFN0cmljdCBIVE1MIHJlY29nbml0aW9uICgjMTEyOTA6IG11c3Qgc3RhcnQgd2l0aCA8KVxuXHQvLyBTaG9ydGN1dCBzaW1wbGUgI2lkIGNhc2UgZm9yIHNwZWVkXG5cdHJxdWlja0V4cHIgPSAvXig/OlxccyooPFtcXHdcXFddKz4pW14+XSp8IyhbXFx3LV0rKSkkLyxcblxuXHRpbml0ID0galF1ZXJ5LmZuLmluaXQgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJvb3QgKSB7XG5cdFx0dmFyIG1hdGNoLCBlbGVtO1xuXG5cdFx0Ly8gSEFORExFOiAkKFwiXCIpLCAkKG51bGwpLCAkKHVuZGVmaW5lZCksICQoZmFsc2UpXG5cdFx0aWYgKCAhc2VsZWN0b3IgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cblx0XHQvLyBNZXRob2QgaW5pdCgpIGFjY2VwdHMgYW4gYWx0ZXJuYXRlIHJvb3RqUXVlcnlcblx0XHQvLyBzbyBtaWdyYXRlIGNhbiBzdXBwb3J0IGpRdWVyeS5zdWIgKGdoLTIxMDEpXG5cdFx0cm9vdCA9IHJvb3QgfHwgcm9vdGpRdWVyeTtcblxuXHRcdC8vIEhhbmRsZSBIVE1MIHN0cmluZ3Ncblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGlmICggc2VsZWN0b3JbIDAgXSA9PT0gXCI8XCIgJiZcblx0XHRcdFx0c2VsZWN0b3JbIHNlbGVjdG9yLmxlbmd0aCAtIDEgXSA9PT0gXCI+XCIgJiZcblx0XHRcdFx0c2VsZWN0b3IubGVuZ3RoID49IDMgKSB7XG5cblx0XHRcdFx0Ly8gQXNzdW1lIHRoYXQgc3RyaW5ncyB0aGF0IHN0YXJ0IGFuZCBlbmQgd2l0aCA8PiBhcmUgSFRNTCBhbmQgc2tpcCB0aGUgcmVnZXggY2hlY2tcblx0XHRcdFx0bWF0Y2ggPSBbIG51bGwsIHNlbGVjdG9yLCBudWxsIF07XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG1hdGNoID0gcnF1aWNrRXhwci5leGVjKCBzZWxlY3RvciApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYXRjaCBodG1sIG9yIG1ha2Ugc3VyZSBubyBjb250ZXh0IGlzIHNwZWNpZmllZCBmb3IgI2lkXG5cdFx0XHRpZiAoIG1hdGNoICYmICggbWF0Y2hbIDEgXSB8fCAhY29udGV4dCApICkge1xuXG5cdFx0XHRcdC8vIEhBTkRMRTogJChodG1sKSAtPiAkKGFycmF5KVxuXHRcdFx0XHRpZiAoIG1hdGNoWyAxIF0gKSB7XG5cdFx0XHRcdFx0Y29udGV4dCA9IGNvbnRleHQgaW5zdGFuY2VvZiBqUXVlcnkgPyBjb250ZXh0WyAwIF0gOiBjb250ZXh0O1xuXG5cdFx0XHRcdFx0Ly8gT3B0aW9uIHRvIHJ1biBzY3JpcHRzIGlzIHRydWUgZm9yIGJhY2stY29tcGF0XG5cdFx0XHRcdFx0Ly8gSW50ZW50aW9uYWxseSBsZXQgdGhlIGVycm9yIGJlIHRocm93biBpZiBwYXJzZUhUTUwgaXMgbm90IHByZXNlbnRcblx0XHRcdFx0XHRqUXVlcnkubWVyZ2UoIHRoaXMsIGpRdWVyeS5wYXJzZUhUTUwoXG5cdFx0XHRcdFx0XHRtYXRjaFsgMSBdLFxuXHRcdFx0XHRcdFx0Y29udGV4dCAmJiBjb250ZXh0Lm5vZGVUeXBlID8gY29udGV4dC5vd25lckRvY3VtZW50IHx8IGNvbnRleHQgOiBkb2N1bWVudCxcblx0XHRcdFx0XHRcdHRydWVcblx0XHRcdFx0XHQpICk7XG5cblx0XHRcdFx0XHQvLyBIQU5ETEU6ICQoaHRtbCwgcHJvcHMpXG5cdFx0XHRcdFx0aWYgKCByc2luZ2xlVGFnLnRlc3QoIG1hdGNoWyAxIF0gKSAmJiBqUXVlcnkuaXNQbGFpbk9iamVjdCggY29udGV4dCApICkge1xuXHRcdFx0XHRcdFx0Zm9yICggbWF0Y2ggaW4gY29udGV4dCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBQcm9wZXJ0aWVzIG9mIGNvbnRleHQgYXJlIGNhbGxlZCBhcyBtZXRob2RzIGlmIHBvc3NpYmxlXG5cdFx0XHRcdFx0XHRcdGlmICggaXNGdW5jdGlvbiggdGhpc1sgbWF0Y2ggXSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXNbIG1hdGNoIF0oIGNvbnRleHRbIG1hdGNoIF0gKTtcblxuXHRcdFx0XHRcdFx0XHQvLyAuLi5hbmQgb3RoZXJ3aXNlIHNldCBhcyBhdHRyaWJ1dGVzXG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0dGhpcy5hdHRyKCBtYXRjaCwgY29udGV4dFsgbWF0Y2ggXSApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHRcdFx0Ly8gSEFORExFOiAkKCNpZClcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRlbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIG1hdGNoWyAyIF0gKTtcblxuXHRcdFx0XHRcdGlmICggZWxlbSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSW5qZWN0IHRoZSBlbGVtZW50IGRpcmVjdGx5IGludG8gdGhlIGpRdWVyeSBvYmplY3Rcblx0XHRcdFx0XHRcdHRoaXNbIDAgXSA9IGVsZW07XG5cdFx0XHRcdFx0XHR0aGlzLmxlbmd0aCA9IDE7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cblx0XHRcdC8vIEhBTkRMRTogJChleHByLCAkKC4uLikpXG5cdFx0XHR9IGVsc2UgaWYgKCAhY29udGV4dCB8fCBjb250ZXh0LmpxdWVyeSApIHtcblx0XHRcdFx0cmV0dXJuICggY29udGV4dCB8fCByb290ICkuZmluZCggc2VsZWN0b3IgKTtcblxuXHRcdFx0Ly8gSEFORExFOiAkKGV4cHIsIGNvbnRleHQpXG5cdFx0XHQvLyAod2hpY2ggaXMganVzdCBlcXVpdmFsZW50IHRvOiAkKGNvbnRleHQpLmZpbmQoZXhwcilcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJldHVybiB0aGlzLmNvbnN0cnVjdG9yKCBjb250ZXh0ICkuZmluZCggc2VsZWN0b3IgKTtcblx0XHRcdH1cblxuXHRcdC8vIEhBTkRMRTogJChET01FbGVtZW50KVxuXHRcdH0gZWxzZSBpZiAoIHNlbGVjdG9yLm5vZGVUeXBlICkge1xuXHRcdFx0dGhpc1sgMCBdID0gc2VsZWN0b3I7XG5cdFx0XHR0aGlzLmxlbmd0aCA9IDE7XG5cdFx0XHRyZXR1cm4gdGhpcztcblxuXHRcdC8vIEhBTkRMRTogJChmdW5jdGlvbilcblx0XHQvLyBTaG9ydGN1dCBmb3IgZG9jdW1lbnQgcmVhZHlcblx0XHR9IGVsc2UgaWYgKCBpc0Z1bmN0aW9uKCBzZWxlY3RvciApICkge1xuXHRcdFx0cmV0dXJuIHJvb3QucmVhZHkgIT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHJvb3QucmVhZHkoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHRcdC8vIEV4ZWN1dGUgaW1tZWRpYXRlbHkgaWYgcmVhZHkgaXMgbm90IHByZXNlbnRcblx0XHRcdFx0c2VsZWN0b3IoIGpRdWVyeSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBqUXVlcnkubWFrZUFycmF5KCBzZWxlY3RvciwgdGhpcyApO1xuXHR9O1xuXG4vLyBHaXZlIHRoZSBpbml0IGZ1bmN0aW9uIHRoZSBqUXVlcnkgcHJvdG90eXBlIGZvciBsYXRlciBpbnN0YW50aWF0aW9uXG5pbml0LnByb3RvdHlwZSA9IGpRdWVyeS5mbjtcblxuLy8gSW5pdGlhbGl6ZSBjZW50cmFsIHJlZmVyZW5jZVxucm9vdGpRdWVyeSA9IGpRdWVyeSggZG9jdW1lbnQgKTtcblxuXG52YXIgcnBhcmVudHNwcmV2ID0gL14oPzpwYXJlbnRzfHByZXYoPzpVbnRpbHxBbGwpKS8sXG5cblx0Ly8gTWV0aG9kcyBndWFyYW50ZWVkIHRvIHByb2R1Y2UgYSB1bmlxdWUgc2V0IHdoZW4gc3RhcnRpbmcgZnJvbSBhIHVuaXF1ZSBzZXRcblx0Z3VhcmFudGVlZFVuaXF1ZSA9IHtcblx0XHRjaGlsZHJlbjogdHJ1ZSxcblx0XHRjb250ZW50czogdHJ1ZSxcblx0XHRuZXh0OiB0cnVlLFxuXHRcdHByZXY6IHRydWVcblx0fTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRoYXM6IGZ1bmN0aW9uKCB0YXJnZXQgKSB7XG5cdFx0dmFyIHRhcmdldHMgPSBqUXVlcnkoIHRhcmdldCwgdGhpcyApLFxuXHRcdFx0bCA9IHRhcmdldHMubGVuZ3RoO1xuXG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBpID0gMDtcblx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBqUXVlcnkuY29udGFpbnMoIHRoaXMsIHRhcmdldHNbIGkgXSApICkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGNsb3Nlc3Q6IGZ1bmN0aW9uKCBzZWxlY3RvcnMsIGNvbnRleHQgKSB7XG5cdFx0dmFyIGN1cixcblx0XHRcdGkgPSAwLFxuXHRcdFx0bCA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0bWF0Y2hlZCA9IFtdLFxuXHRcdFx0dGFyZ2V0cyA9IHR5cGVvZiBzZWxlY3RvcnMgIT09IFwic3RyaW5nXCIgJiYgalF1ZXJ5KCBzZWxlY3RvcnMgKTtcblxuXHRcdC8vIFBvc2l0aW9uYWwgc2VsZWN0b3JzIG5ldmVyIG1hdGNoLCBzaW5jZSB0aGVyZSdzIG5vIF9zZWxlY3Rpb25fIGNvbnRleHRcblx0XHRpZiAoICFybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9ycyApICkge1xuXHRcdFx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRmb3IgKCBjdXIgPSB0aGlzWyBpIF07IGN1ciAmJiBjdXIgIT09IGNvbnRleHQ7IGN1ciA9IGN1ci5wYXJlbnROb2RlICkge1xuXG5cdFx0XHRcdFx0Ly8gQWx3YXlzIHNraXAgZG9jdW1lbnQgZnJhZ21lbnRzXG5cdFx0XHRcdFx0aWYgKCBjdXIubm9kZVR5cGUgPCAxMSAmJiAoIHRhcmdldHMgP1xuXHRcdFx0XHRcdFx0dGFyZ2V0cy5pbmRleCggY3VyICkgPiAtMSA6XG5cblx0XHRcdFx0XHRcdC8vIERvbid0IHBhc3Mgbm9uLWVsZW1lbnRzIHRvIFNpenpsZVxuXHRcdFx0XHRcdFx0Y3VyLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdFx0XHRcdGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggY3VyLCBzZWxlY3RvcnMgKSApICkge1xuXG5cdFx0XHRcdFx0XHRtYXRjaGVkLnB1c2goIGN1ciApO1xuXHRcdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBtYXRjaGVkLmxlbmd0aCA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApIDogbWF0Y2hlZCApO1xuXHR9LFxuXG5cdC8vIERldGVybWluZSB0aGUgcG9zaXRpb24gb2YgYW4gZWxlbWVudCB3aXRoaW4gdGhlIHNldFxuXHRpbmRleDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBObyBhcmd1bWVudCwgcmV0dXJuIGluZGV4IGluIHBhcmVudFxuXHRcdGlmICggIWVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCB0aGlzWyAwIF0gJiYgdGhpc1sgMCBdLnBhcmVudE5vZGUgKSA/IHRoaXMuZmlyc3QoKS5wcmV2QWxsKCkubGVuZ3RoIDogLTE7XG5cdFx0fVxuXG5cdFx0Ly8gSW5kZXggaW4gc2VsZWN0b3Jcblx0XHRpZiAoIHR5cGVvZiBlbGVtID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cmV0dXJuIGluZGV4T2YuY2FsbCggalF1ZXJ5KCBlbGVtICksIHRoaXNbIDAgXSApO1xuXHRcdH1cblxuXHRcdC8vIExvY2F0ZSB0aGUgcG9zaXRpb24gb2YgdGhlIGRlc2lyZWQgZWxlbWVudFxuXHRcdHJldHVybiBpbmRleE9mLmNhbGwoIHRoaXMsXG5cblx0XHRcdC8vIElmIGl0IHJlY2VpdmVzIGEgalF1ZXJ5IG9iamVjdCwgdGhlIGZpcnN0IGVsZW1lbnQgaXMgdXNlZFxuXHRcdFx0ZWxlbS5qcXVlcnkgPyBlbGVtWyAwIF0gOiBlbGVtXG5cdFx0KTtcblx0fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBzZWxlY3RvciwgY29udGV4dCApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soXG5cdFx0XHRqUXVlcnkudW5pcXVlU29ydChcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCB0aGlzLmdldCgpLCBqUXVlcnkoIHNlbGVjdG9yLCBjb250ZXh0ICkgKVxuXHRcdFx0KVxuXHRcdCk7XG5cdH0sXG5cblx0YWRkQmFjazogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLmFkZCggc2VsZWN0b3IgPT0gbnVsbCA/XG5cdFx0XHR0aGlzLnByZXZPYmplY3QgOiB0aGlzLnByZXZPYmplY3QuZmlsdGVyKCBzZWxlY3RvciApXG5cdFx0KTtcblx0fVxufSApO1xuXG5mdW5jdGlvbiBzaWJsaW5nKCBjdXIsIGRpciApIHtcblx0d2hpbGUgKCAoIGN1ciA9IGN1clsgZGlyIF0gKSAmJiBjdXIubm9kZVR5cGUgIT09IDEgKSB7fVxuXHRyZXR1cm4gY3VyO1xufVxuXG5qUXVlcnkuZWFjaCgge1xuXHRwYXJlbnQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0cmV0dXJuIHBhcmVudCAmJiBwYXJlbnQubm9kZVR5cGUgIT09IDExID8gcGFyZW50IDogbnVsbDtcblx0fSxcblx0cGFyZW50czogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwYXJlbnROb2RlXCIgKTtcblx0fSxcblx0cGFyZW50c1VudGlsOiBmdW5jdGlvbiggZWxlbSwgX2ksIHVudGlsICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicGFyZW50Tm9kZVwiLCB1bnRpbCApO1xuXHR9LFxuXHRuZXh0OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZyggZWxlbSwgXCJuZXh0U2libGluZ1wiICk7XG5cdH0sXG5cdHByZXY6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5nKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiICk7XG5cdH0sXG5cdG5leHRBbGw6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiApO1xuXHR9LFxuXHRwcmV2QWxsOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiICk7XG5cdH0sXG5cdG5leHRVbnRpbDogZnVuY3Rpb24oIGVsZW0sIF9pLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIsIHVudGlsICk7XG5cdH0sXG5cdHByZXZVbnRpbDogZnVuY3Rpb24oIGVsZW0sIF9pLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInByZXZpb3VzU2libGluZ1wiLCB1bnRpbCApO1xuXHR9LFxuXHRzaWJsaW5nczogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmdzKCAoIGVsZW0ucGFyZW50Tm9kZSB8fCB7fSApLmZpcnN0Q2hpbGQsIGVsZW0gKTtcblx0fSxcblx0Y2hpbGRyZW46IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5ncyggZWxlbS5maXJzdENoaWxkICk7XG5cdH0sXG5cdGNvbnRlbnRzOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRpZiAoIGVsZW0uY29udGVudERvY3VtZW50ICE9IG51bGwgJiZcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErXG5cdFx0XHQvLyA8b2JqZWN0PiBlbGVtZW50cyB3aXRoIG5vIGBkYXRhYCBhdHRyaWJ1dGUgaGFzIGFuIG9iamVjdFxuXHRcdFx0Ly8gYGNvbnRlbnREb2N1bWVudGAgd2l0aCBhIGBudWxsYCBwcm90b3R5cGUuXG5cdFx0XHRnZXRQcm90byggZWxlbS5jb250ZW50RG9jdW1lbnQgKSApIHtcblxuXHRcdFx0cmV0dXJuIGVsZW0uY29udGVudERvY3VtZW50O1xuXHRcdH1cblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5LCBpT1MgNyBvbmx5LCBBbmRyb2lkIEJyb3dzZXIgPD00LjMgb25seVxuXHRcdC8vIFRyZWF0IHRoZSB0ZW1wbGF0ZSBlbGVtZW50IGFzIGEgcmVndWxhciBvbmUgaW4gYnJvd3NlcnMgdGhhdFxuXHRcdC8vIGRvbid0IHN1cHBvcnQgaXQuXG5cdFx0aWYgKCBub2RlTmFtZSggZWxlbSwgXCJ0ZW1wbGF0ZVwiICkgKSB7XG5cdFx0XHRlbGVtID0gZWxlbS5jb250ZW50IHx8IGVsZW07XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGpRdWVyeS5tZXJnZSggW10sIGVsZW0uY2hpbGROb2RlcyApO1xuXHR9XG59LCBmdW5jdGlvbiggbmFtZSwgZm4gKSB7XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHVudGlsLCBzZWxlY3RvciApIHtcblx0XHR2YXIgbWF0Y2hlZCA9IGpRdWVyeS5tYXAoIHRoaXMsIGZuLCB1bnRpbCApO1xuXG5cdFx0aWYgKCBuYW1lLnNsaWNlKCAtNSApICE9PSBcIlVudGlsXCIgKSB7XG5cdFx0XHRzZWxlY3RvciA9IHVudGlsO1xuXHRcdH1cblxuXHRcdGlmICggc2VsZWN0b3IgJiYgdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0bWF0Y2hlZCA9IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCBtYXRjaGVkICk7XG5cdFx0fVxuXG5cdFx0aWYgKCB0aGlzLmxlbmd0aCA+IDEgKSB7XG5cblx0XHRcdC8vIFJlbW92ZSBkdXBsaWNhdGVzXG5cdFx0XHRpZiAoICFndWFyYW50ZWVkVW5pcXVlWyBuYW1lIF0gKSB7XG5cdFx0XHRcdGpRdWVyeS51bmlxdWVTb3J0KCBtYXRjaGVkICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJldmVyc2Ugb3JkZXIgZm9yIHBhcmVudHMqIGFuZCBwcmV2LWRlcml2YXRpdmVzXG5cdFx0XHRpZiAoIHJwYXJlbnRzcHJldi50ZXN0KCBuYW1lICkgKSB7XG5cdFx0XHRcdG1hdGNoZWQucmV2ZXJzZSgpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hlZCApO1xuXHR9O1xufSApO1xudmFyIHJub3RodG1sd2hpdGUgPSAoIC9bXlxceDIwXFx0XFxyXFxuXFxmXSsvZyApO1xuXG5cblxuLy8gQ29udmVydCBTdHJpbmctZm9ybWF0dGVkIG9wdGlvbnMgaW50byBPYmplY3QtZm9ybWF0dGVkIG9uZXNcbmZ1bmN0aW9uIGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSB7XG5cdHZhciBvYmplY3QgPSB7fTtcblx0alF1ZXJ5LmVhY2goIG9wdGlvbnMubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXSwgZnVuY3Rpb24oIF8sIGZsYWcgKSB7XG5cdFx0b2JqZWN0WyBmbGFnIF0gPSB0cnVlO1xuXHR9ICk7XG5cdHJldHVybiBvYmplY3Q7XG59XG5cbi8qXG4gKiBDcmVhdGUgYSBjYWxsYmFjayBsaXN0IHVzaW5nIHRoZSBmb2xsb3dpbmcgcGFyYW1ldGVyczpcbiAqXG4gKlx0b3B0aW9uczogYW4gb3B0aW9uYWwgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgb3B0aW9ucyB0aGF0IHdpbGwgY2hhbmdlIGhvd1xuICpcdFx0XHR0aGUgY2FsbGJhY2sgbGlzdCBiZWhhdmVzIG9yIGEgbW9yZSB0cmFkaXRpb25hbCBvcHRpb24gb2JqZWN0XG4gKlxuICogQnkgZGVmYXVsdCBhIGNhbGxiYWNrIGxpc3Qgd2lsbCBhY3QgbGlrZSBhbiBldmVudCBjYWxsYmFjayBsaXN0IGFuZCBjYW4gYmVcbiAqIFwiZmlyZWRcIiBtdWx0aXBsZSB0aW1lcy5cbiAqXG4gKiBQb3NzaWJsZSBvcHRpb25zOlxuICpcbiAqXHRvbmNlOlx0XHRcdHdpbGwgZW5zdXJlIHRoZSBjYWxsYmFjayBsaXN0IGNhbiBvbmx5IGJlIGZpcmVkIG9uY2UgKGxpa2UgYSBEZWZlcnJlZClcbiAqXG4gKlx0bWVtb3J5Olx0XHRcdHdpbGwga2VlcCB0cmFjayBvZiBwcmV2aW91cyB2YWx1ZXMgYW5kIHdpbGwgY2FsbCBhbnkgY2FsbGJhY2sgYWRkZWRcbiAqXHRcdFx0XHRcdGFmdGVyIHRoZSBsaXN0IGhhcyBiZWVuIGZpcmVkIHJpZ2h0IGF3YXkgd2l0aCB0aGUgbGF0ZXN0IFwibWVtb3JpemVkXCJcbiAqXHRcdFx0XHRcdHZhbHVlcyAobGlrZSBhIERlZmVycmVkKVxuICpcbiAqXHR1bmlxdWU6XHRcdFx0d2lsbCBlbnN1cmUgYSBjYWxsYmFjayBjYW4gb25seSBiZSBhZGRlZCBvbmNlIChubyBkdXBsaWNhdGUgaW4gdGhlIGxpc3QpXG4gKlxuICpcdHN0b3BPbkZhbHNlOlx0aW50ZXJydXB0IGNhbGxpbmdzIHdoZW4gYSBjYWxsYmFjayByZXR1cm5zIGZhbHNlXG4gKlxuICovXG5qUXVlcnkuQ2FsbGJhY2tzID0gZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cblx0Ly8gQ29udmVydCBvcHRpb25zIGZyb20gU3RyaW5nLWZvcm1hdHRlZCB0byBPYmplY3QtZm9ybWF0dGVkIGlmIG5lZWRlZFxuXHQvLyAod2UgY2hlY2sgaW4gY2FjaGUgZmlyc3QpXG5cdG9wdGlvbnMgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gXCJzdHJpbmdcIiA/XG5cdFx0Y3JlYXRlT3B0aW9ucyggb3B0aW9ucyApIDpcblx0XHRqUXVlcnkuZXh0ZW5kKCB7fSwgb3B0aW9ucyApO1xuXG5cdHZhciAvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCBpcyBjdXJyZW50bHkgZmlyaW5nXG5cdFx0ZmlyaW5nLFxuXG5cdFx0Ly8gTGFzdCBmaXJlIHZhbHVlIGZvciBub24tZm9yZ2V0dGFibGUgbGlzdHNcblx0XHRtZW1vcnksXG5cblx0XHQvLyBGbGFnIHRvIGtub3cgaWYgbGlzdCB3YXMgYWxyZWFkeSBmaXJlZFxuXHRcdGZpcmVkLFxuXG5cdFx0Ly8gRmxhZyB0byBwcmV2ZW50IGZpcmluZ1xuXHRcdGxvY2tlZCxcblxuXHRcdC8vIEFjdHVhbCBjYWxsYmFjayBsaXN0XG5cdFx0bGlzdCA9IFtdLFxuXG5cdFx0Ly8gUXVldWUgb2YgZXhlY3V0aW9uIGRhdGEgZm9yIHJlcGVhdGFibGUgbGlzdHNcblx0XHRxdWV1ZSA9IFtdLFxuXG5cdFx0Ly8gSW5kZXggb2YgY3VycmVudGx5IGZpcmluZyBjYWxsYmFjayAobW9kaWZpZWQgYnkgYWRkL3JlbW92ZSBhcyBuZWVkZWQpXG5cdFx0ZmlyaW5nSW5kZXggPSAtMSxcblxuXHRcdC8vIEZpcmUgY2FsbGJhY2tzXG5cdFx0ZmlyZSA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBFbmZvcmNlIHNpbmdsZS1maXJpbmdcblx0XHRcdGxvY2tlZCA9IGxvY2tlZCB8fCBvcHRpb25zLm9uY2U7XG5cblx0XHRcdC8vIEV4ZWN1dGUgY2FsbGJhY2tzIGZvciBhbGwgcGVuZGluZyBleGVjdXRpb25zLFxuXHRcdFx0Ly8gcmVzcGVjdGluZyBmaXJpbmdJbmRleCBvdmVycmlkZXMgYW5kIHJ1bnRpbWUgY2hhbmdlc1xuXHRcdFx0ZmlyZWQgPSBmaXJpbmcgPSB0cnVlO1xuXHRcdFx0Zm9yICggOyBxdWV1ZS5sZW5ndGg7IGZpcmluZ0luZGV4ID0gLTEgKSB7XG5cdFx0XHRcdG1lbW9yeSA9IHF1ZXVlLnNoaWZ0KCk7XG5cdFx0XHRcdHdoaWxlICggKytmaXJpbmdJbmRleCA8IGxpc3QubGVuZ3RoICkge1xuXG5cdFx0XHRcdFx0Ly8gUnVuIGNhbGxiYWNrIGFuZCBjaGVjayBmb3IgZWFybHkgdGVybWluYXRpb25cblx0XHRcdFx0XHRpZiAoIGxpc3RbIGZpcmluZ0luZGV4IF0uYXBwbHkoIG1lbW9yeVsgMCBdLCBtZW1vcnlbIDEgXSApID09PSBmYWxzZSAmJlxuXHRcdFx0XHRcdFx0b3B0aW9ucy5zdG9wT25GYWxzZSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gSnVtcCB0byBlbmQgYW5kIGZvcmdldCB0aGUgZGF0YSBzbyAuYWRkIGRvZXNuJ3QgcmUtZmlyZVxuXHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXggPSBsaXN0Lmxlbmd0aDtcblx0XHRcdFx0XHRcdG1lbW9yeSA9IGZhbHNlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBGb3JnZXQgdGhlIGRhdGEgaWYgd2UncmUgZG9uZSB3aXRoIGl0XG5cdFx0XHRpZiAoICFvcHRpb25zLm1lbW9yeSApIHtcblx0XHRcdFx0bWVtb3J5ID0gZmFsc2U7XG5cdFx0XHR9XG5cblx0XHRcdGZpcmluZyA9IGZhbHNlO1xuXG5cdFx0XHQvLyBDbGVhbiB1cCBpZiB3ZSdyZSBkb25lIGZpcmluZyBmb3IgZ29vZFxuXHRcdFx0aWYgKCBsb2NrZWQgKSB7XG5cblx0XHRcdFx0Ly8gS2VlcCBhbiBlbXB0eSBsaXN0IGlmIHdlIGhhdmUgZGF0YSBmb3IgZnV0dXJlIGFkZCBjYWxsc1xuXHRcdFx0XHRpZiAoIG1lbW9yeSApIHtcblx0XHRcdFx0XHRsaXN0ID0gW107XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlLCB0aGlzIG9iamVjdCBpcyBzcGVudFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGxpc3QgPSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdC8vIEFjdHVhbCBDYWxsYmFja3Mgb2JqZWN0XG5cdFx0c2VsZiA9IHtcblxuXHRcdFx0Ly8gQWRkIGEgY2FsbGJhY2sgb3IgYSBjb2xsZWN0aW9uIG9mIGNhbGxiYWNrcyB0byB0aGUgbGlzdFxuXHRcdFx0YWRkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBsaXN0ICkge1xuXG5cdFx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBtZW1vcnkgZnJvbSBhIHBhc3QgcnVuLCB3ZSBzaG91bGQgZmlyZSBhZnRlciBhZGRpbmdcblx0XHRcdFx0XHRpZiAoIG1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXggPSBsaXN0Lmxlbmd0aCAtIDE7XG5cdFx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBtZW1vcnkgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQoIGZ1bmN0aW9uIGFkZCggYXJncyApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5lYWNoKCBhcmdzLCBmdW5jdGlvbiggXywgYXJnICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIGlzRnVuY3Rpb24oIGFyZyApICkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICggIW9wdGlvbnMudW5pcXVlIHx8ICFzZWxmLmhhcyggYXJnICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRsaXN0LnB1c2goIGFyZyApO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggYXJnICYmIGFyZy5sZW5ndGggJiYgdG9UeXBlKCBhcmcgKSAhPT0gXCJzdHJpbmdcIiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIEluc3BlY3QgcmVjdXJzaXZlbHlcblx0XHRcdFx0XHRcdFx0XHRhZGQoIGFyZyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0fSApKCBhcmd1bWVudHMgKTtcblxuXHRcdFx0XHRcdGlmICggbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gUmVtb3ZlIGEgY2FsbGJhY2sgZnJvbSB0aGUgbGlzdFxuXHRcdFx0cmVtb3ZlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0alF1ZXJ5LmVhY2goIGFyZ3VtZW50cywgZnVuY3Rpb24oIF8sIGFyZyApIHtcblx0XHRcdFx0XHR2YXIgaW5kZXg7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGluZGV4ID0galF1ZXJ5LmluQXJyYXkoIGFyZywgbGlzdCwgaW5kZXggKSApID4gLTEgKSB7XG5cdFx0XHRcdFx0XHRsaXN0LnNwbGljZSggaW5kZXgsIDEgKTtcblxuXHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGZpcmluZyBpbmRleGVzXG5cdFx0XHRcdFx0XHRpZiAoIGluZGV4IDw9IGZpcmluZ0luZGV4ICkge1xuXHRcdFx0XHRcdFx0XHRmaXJpbmdJbmRleC0tO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIENoZWNrIGlmIGEgZ2l2ZW4gY2FsbGJhY2sgaXMgaW4gdGhlIGxpc3QuXG5cdFx0XHQvLyBJZiBubyBhcmd1bWVudCBpcyBnaXZlbiwgcmV0dXJuIHdoZXRoZXIgb3Igbm90IGxpc3QgaGFzIGNhbGxiYWNrcyBhdHRhY2hlZC5cblx0XHRcdGhhczogZnVuY3Rpb24oIGZuICkge1xuXHRcdFx0XHRyZXR1cm4gZm4gP1xuXHRcdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBmbiwgbGlzdCApID4gLTEgOlxuXHRcdFx0XHRcdGxpc3QubGVuZ3RoID4gMDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIFJlbW92ZSBhbGwgY2FsbGJhY2tzIGZyb20gdGhlIGxpc3Rcblx0XHRcdGVtcHR5OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBsaXN0ICkge1xuXHRcdFx0XHRcdGxpc3QgPSBbXTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIERpc2FibGUgLmZpcmUgYW5kIC5hZGRcblx0XHRcdC8vIEFib3J0IGFueSBjdXJyZW50L3BlbmRpbmcgZXhlY3V0aW9uc1xuXHRcdFx0Ly8gQ2xlYXIgYWxsIGNhbGxiYWNrcyBhbmQgdmFsdWVzXG5cdFx0XHRkaXNhYmxlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0bG9ja2VkID0gcXVldWUgPSBbXTtcblx0XHRcdFx0bGlzdCA9IG1lbW9yeSA9IFwiXCI7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblx0XHRcdGRpc2FibGVkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICFsaXN0O1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRGlzYWJsZSAuZmlyZVxuXHRcdFx0Ly8gQWxzbyBkaXNhYmxlIC5hZGQgdW5sZXNzIHdlIGhhdmUgbWVtb3J5IChzaW5jZSBpdCB3b3VsZCBoYXZlIG5vIGVmZmVjdClcblx0XHRcdC8vIEFib3J0IGFueSBwZW5kaW5nIGV4ZWN1dGlvbnNcblx0XHRcdGxvY2s6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRsb2NrZWQgPSBxdWV1ZSA9IFtdO1xuXHRcdFx0XHRpZiAoICFtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRsaXN0ID0gbWVtb3J5ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRsb2NrZWQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gISFsb2NrZWQ7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDYWxsIGFsbCBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gY29udGV4dCBhbmQgYXJndW1lbnRzXG5cdFx0XHRmaXJlV2l0aDogZnVuY3Rpb24oIGNvbnRleHQsIGFyZ3MgKSB7XG5cdFx0XHRcdGlmICggIWxvY2tlZCApIHtcblx0XHRcdFx0XHRhcmdzID0gYXJncyB8fCBbXTtcblx0XHRcdFx0XHRhcmdzID0gWyBjb250ZXh0LCBhcmdzLnNsaWNlID8gYXJncy5zbGljZSgpIDogYXJncyBdO1xuXHRcdFx0XHRcdHF1ZXVlLnB1c2goIGFyZ3MgKTtcblx0XHRcdFx0XHRpZiAoICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0XHRmaXJlKCk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2FsbCBhbGwgdGhlIGNhbGxiYWNrcyB3aXRoIHRoZSBnaXZlbiBhcmd1bWVudHNcblx0XHRcdGZpcmU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRzZWxmLmZpcmVXaXRoKCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBUbyBrbm93IGlmIHRoZSBjYWxsYmFja3MgaGF2ZSBhbHJlYWR5IGJlZW4gY2FsbGVkIGF0IGxlYXN0IG9uY2Vcblx0XHRcdGZpcmVkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICEhZmlyZWQ7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRyZXR1cm4gc2VsZjtcbn07XG5cblxuZnVuY3Rpb24gSWRlbnRpdHkoIHYgKSB7XG5cdHJldHVybiB2O1xufVxuZnVuY3Rpb24gVGhyb3dlciggZXggKSB7XG5cdHRocm93IGV4O1xufVxuXG5mdW5jdGlvbiBhZG9wdFZhbHVlKCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0LCBub1ZhbHVlICkge1xuXHR2YXIgbWV0aG9kO1xuXG5cdHRyeSB7XG5cblx0XHQvLyBDaGVjayBmb3IgcHJvbWlzZSBhc3BlY3QgZmlyc3QgdG8gcHJpdmlsZWdlIHN5bmNocm9ub3VzIGJlaGF2aW9yXG5cdFx0aWYgKCB2YWx1ZSAmJiBpc0Z1bmN0aW9uKCAoIG1ldGhvZCA9IHZhbHVlLnByb21pc2UgKSApICkge1xuXHRcdFx0bWV0aG9kLmNhbGwoIHZhbHVlICkuZG9uZSggcmVzb2x2ZSApLmZhaWwoIHJlamVjdCApO1xuXG5cdFx0Ly8gT3RoZXIgdGhlbmFibGVzXG5cdFx0fSBlbHNlIGlmICggdmFsdWUgJiYgaXNGdW5jdGlvbiggKCBtZXRob2QgPSB2YWx1ZS50aGVuICkgKSApIHtcblx0XHRcdG1ldGhvZC5jYWxsKCB2YWx1ZSwgcmVzb2x2ZSwgcmVqZWN0ICk7XG5cblx0XHQvLyBPdGhlciBub24tdGhlbmFibGVzXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gQ29udHJvbCBgcmVzb2x2ZWAgYXJndW1lbnRzIGJ5IGxldHRpbmcgQXJyYXkjc2xpY2UgY2FzdCBib29sZWFuIGBub1ZhbHVlYCB0byBpbnRlZ2VyOlxuXHRcdFx0Ly8gKiBmYWxzZTogWyB2YWx1ZSBdLnNsaWNlKCAwICkgPT4gcmVzb2x2ZSggdmFsdWUgKVxuXHRcdFx0Ly8gKiB0cnVlOiBbIHZhbHVlIF0uc2xpY2UoIDEgKSA9PiByZXNvbHZlKClcblx0XHRcdHJlc29sdmUuYXBwbHkoIHVuZGVmaW5lZCwgWyB2YWx1ZSBdLnNsaWNlKCBub1ZhbHVlICkgKTtcblx0XHR9XG5cblx0Ly8gRm9yIFByb21pc2VzL0ErLCBjb252ZXJ0IGV4Y2VwdGlvbnMgaW50byByZWplY3Rpb25zXG5cdC8vIFNpbmNlIGpRdWVyeS53aGVuIGRvZXNuJ3QgdW53cmFwIHRoZW5hYmxlcywgd2UgY2FuIHNraXAgdGhlIGV4dHJhIGNoZWNrcyBhcHBlYXJpbmcgaW5cblx0Ly8gRGVmZXJyZWQjdGhlbiB0byBjb25kaXRpb25hbGx5IHN1cHByZXNzIHJlamVjdGlvbi5cblx0fSBjYXRjaCAoIHZhbHVlICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgb25seVxuXHRcdC8vIFN0cmljdCBtb2RlIGZ1bmN0aW9ucyBpbnZva2VkIHdpdGhvdXQgLmNhbGwvLmFwcGx5IGdldCBnbG9iYWwtb2JqZWN0IGNvbnRleHRcblx0XHRyZWplY3QuYXBwbHkoIHVuZGVmaW5lZCwgWyB2YWx1ZSBdICk7XG5cdH1cbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdERlZmVycmVkOiBmdW5jdGlvbiggZnVuYyApIHtcblx0XHR2YXIgdHVwbGVzID0gW1xuXG5cdFx0XHRcdC8vIGFjdGlvbiwgYWRkIGxpc3RlbmVyLCBjYWxsYmFja3MsXG5cdFx0XHRcdC8vIC4uLiAudGhlbiBoYW5kbGVycywgYXJndW1lbnQgaW5kZXgsIFtmaW5hbCBzdGF0ZV1cblx0XHRcdFx0WyBcIm5vdGlmeVwiLCBcInByb2dyZXNzXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwibWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm1lbW9yeVwiICksIDIgXSxcblx0XHRcdFx0WyBcInJlc29sdmVcIiwgXCJkb25lXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLCAwLCBcInJlc29sdmVkXCIgXSxcblx0XHRcdFx0WyBcInJlamVjdFwiLCBcImZhaWxcIiwgalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksIDEsIFwicmVqZWN0ZWRcIiBdXG5cdFx0XHRdLFxuXHRcdFx0c3RhdGUgPSBcInBlbmRpbmdcIixcblx0XHRcdHByb21pc2UgPSB7XG5cdFx0XHRcdHN0YXRlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gc3RhdGU7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFsd2F5czogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0ZGVmZXJyZWQuZG9uZSggYXJndW1lbnRzICkuZmFpbCggYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdFwiY2F0Y2hcIjogZnVuY3Rpb24oIGZuICkge1xuXHRcdFx0XHRcdHJldHVybiBwcm9taXNlLnRoZW4oIG51bGwsIGZuICk7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gS2VlcCBwaXBlIGZvciBiYWNrLWNvbXBhdFxuXHRcdFx0XHRwaXBlOiBmdW5jdGlvbiggLyogZm5Eb25lLCBmbkZhaWwsIGZuUHJvZ3Jlc3MgKi8gKSB7XG5cdFx0XHRcdFx0dmFyIGZucyA9IGFyZ3VtZW50cztcblxuXHRcdFx0XHRcdHJldHVybiBqUXVlcnkuRGVmZXJyZWQoIGZ1bmN0aW9uKCBuZXdEZWZlciApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBfaSwgdHVwbGUgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gTWFwIHR1cGxlcyAocHJvZ3Jlc3MsIGRvbmUsIGZhaWwpIHRvIGFyZ3VtZW50cyAoZG9uZSwgZmFpbCwgcHJvZ3Jlc3MpXG5cdFx0XHRcdFx0XHRcdHZhciBmbiA9IGlzRnVuY3Rpb24oIGZuc1sgdHVwbGVbIDQgXSBdICkgJiYgZm5zWyB0dXBsZVsgNCBdIF07XG5cblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQucHJvZ3Jlc3MoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIubm90aWZ5IH0pXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLmRvbmUoZnVuY3Rpb24oKSB7IGJpbmQgdG8gbmV3RGVmZXIgb3IgbmV3RGVmZXIucmVzb2x2ZSB9KVxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5mYWlsKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLnJlamVjdCB9KVxuXHRcdFx0XHRcdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDEgXSBdKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQgPSBmbiAmJiBmbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCByZXR1cm5lZCAmJiBpc0Z1bmN0aW9uKCByZXR1cm5lZC5wcm9taXNlICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZC5wcm9taXNlKClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LnByb2dyZXNzKCBuZXdEZWZlci5ub3RpZnkgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZG9uZSggbmV3RGVmZXIucmVzb2x2ZSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5mYWlsKCBuZXdEZWZlci5yZWplY3QgKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXJbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aGlzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRmbiA/IFsgcmV0dXJuZWQgXSA6IGFyZ3VtZW50c1xuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRcdGZucyA9IG51bGw7XG5cdFx0XHRcdFx0fSApLnByb21pc2UoKTtcblx0XHRcdFx0fSxcblx0XHRcdFx0dGhlbjogZnVuY3Rpb24oIG9uRnVsZmlsbGVkLCBvblJlamVjdGVkLCBvblByb2dyZXNzICkge1xuXHRcdFx0XHRcdHZhciBtYXhEZXB0aCA9IDA7XG5cdFx0XHRcdFx0ZnVuY3Rpb24gcmVzb2x2ZSggZGVwdGgsIGRlZmVycmVkLCBoYW5kbGVyLCBzcGVjaWFsICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHR2YXIgdGhhdCA9IHRoaXMsXG5cdFx0XHRcdFx0XHRcdFx0YXJncyA9IGFyZ3VtZW50cyxcblx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93ID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHR2YXIgcmV0dXJuZWQsIHRoZW47XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjMuMy4zXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01OVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSWdub3JlIGRvdWJsZS1yZXNvbHV0aW9uIGF0dGVtcHRzXG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoIDwgbWF4RGVwdGggKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQgPSBoYW5kbGVyLmFwcGx5KCB0aGF0LCBhcmdzICk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjFcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTQ4XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHJldHVybmVkID09PSBkZWZlcnJlZC5wcm9taXNlKCkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRocm93IG5ldyBUeXBlRXJyb3IoIFwiVGhlbmFibGUgc2VsZi1yZXNvbHV0aW9uXCIgKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbnMgMi4zLjMuMSwgMy41XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01NFxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNzVcblx0XHRcdFx0XHRcdFx0XHRcdC8vIFJldHJpZXZlIGB0aGVuYCBvbmx5IG9uY2Vcblx0XHRcdFx0XHRcdFx0XHRcdHRoZW4gPSByZXR1cm5lZCAmJlxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb24gMi4zLjRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNjRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBjaGVjayBvYmplY3RzIGFuZCBmdW5jdGlvbnMgZm9yIHRoZW5hYmlsaXR5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdCggdHlwZW9mIHJldHVybmVkID09PSBcIm9iamVjdFwiIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dHlwZW9mIHJldHVybmVkID09PSBcImZ1bmN0aW9uXCIgKSAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZC50aGVuO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgYSByZXR1cm5lZCB0aGVuYWJsZVxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCB0aGVuICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3BlY2lhbCBwcm9jZXNzb3JzIChub3RpZnkpIGp1c3Qgd2FpdCBmb3IgcmVzb2x1dGlvblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIHNwZWNpYWwgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhlbi5jYWxsKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQsXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIFRocm93ZXIsIHNwZWNpYWwgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gTm9ybWFsIHByb2Nlc3NvcnMgKHJlc29sdmUpIGFsc28gaG9vayBpbnRvIHByb2dyZXNzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyAuLi5hbmQgZGlzcmVnYXJkIG9sZGVyIHJlc29sdXRpb24gdmFsdWVzXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWF4RGVwdGgrKztcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBUaHJvd2VyLCBzcGVjaWFsICksXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKCBtYXhEZXB0aCwgZGVmZXJyZWQsIElkZW50aXR5LFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIEhhbmRsZSBhbGwgb3RoZXIgcmV0dXJuZWQgdmFsdWVzXG5cdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgc3Vic3RpdHV0ZSBoYW5kbGVycyBwYXNzIG9uIGNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW5kIG11bHRpcGxlIHZhbHVlcyAobm9uLXNwZWMgYmVoYXZpb3IpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggaGFuZGxlciAhPT0gSWRlbnRpdHkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dGhhdCA9IHVuZGVmaW5lZDtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzID0gWyByZXR1cm5lZCBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gUHJvY2VzcyB0aGUgdmFsdWUocylcblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGVmYXVsdCBwcm9jZXNzIGlzIHJlc29sdmVcblx0XHRcdFx0XHRcdFx0XHRcdFx0KCBzcGVjaWFsIHx8IGRlZmVycmVkLnJlc29sdmVXaXRoICkoIHRoYXQsIGFyZ3MgKTtcblx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBub3JtYWwgcHJvY2Vzc29ycyAocmVzb2x2ZSkgY2F0Y2ggYW5kIHJlamVjdCBleGNlcHRpb25zXG5cdFx0XHRcdFx0XHRcdFx0cHJvY2VzcyA9IHNwZWNpYWwgP1xuXHRcdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdyA6XG5cdFx0XHRcdFx0XHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRtaWdodFRocm93KCk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rKCBlLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRwcm9jZXNzLnN0YWNrVHJhY2UgKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuNC4xXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNjFcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBJZ25vcmUgcG9zdC1yZXNvbHV0aW9uIGV4Y2VwdGlvbnNcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoICsgMSA+PSBtYXhEZXB0aCApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gT25seSBzdWJzdGl0dXRlIGhhbmRsZXJzIHBhc3Mgb24gY29udGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gYW5kIG11bHRpcGxlIHZhbHVlcyAobm9uLXNwZWMgYmVoYXZpb3IpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGhhbmRsZXIgIT09IFRocm93ZXIgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoYXQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGFyZ3MgPSBbIGUgXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggdGhhdCwgYXJncyApO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fTtcblxuXHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuMVxuXHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC01N1xuXHRcdFx0XHRcdFx0XHQvLyBSZS1yZXNvbHZlIHByb21pc2VzIGltbWVkaWF0ZWx5IHRvIGRvZGdlIGZhbHNlIHJlamVjdGlvbiBmcm9tXG5cdFx0XHRcdFx0XHRcdC8vIHN1YnNlcXVlbnQgZXJyb3JzXG5cdFx0XHRcdFx0XHRcdGlmICggZGVwdGggKSB7XG5cdFx0XHRcdFx0XHRcdFx0cHJvY2VzcygpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gQ2FsbCBhbiBvcHRpb25hbCBob29rIHRvIHJlY29yZCB0aGUgc3RhY2ssIGluIGNhc2Ugb2YgZXhjZXB0aW9uXG5cdFx0XHRcdFx0XHRcdFx0Ly8gc2luY2UgaXQncyBvdGhlcndpc2UgbG9zdCB3aGVuIGV4ZWN1dGlvbiBnb2VzIGFzeW5jXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuRGVmZXJyZWQuZ2V0U3RhY2tIb29rICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cHJvY2Vzcy5zdGFja1RyYWNlID0galF1ZXJ5LkRlZmVycmVkLmdldFN0YWNrSG9vaygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHR3aW5kb3cuc2V0VGltZW91dCggcHJvY2VzcyApO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiBqUXVlcnkuRGVmZXJyZWQoIGZ1bmN0aW9uKCBuZXdEZWZlciApIHtcblxuXHRcdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvblByb2dyZXNzICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25Qcm9ncmVzcyA6XG5cdFx0XHRcdFx0XHRcdFx0XHRJZGVudGl0eSxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlci5ub3RpZnlXaXRoXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5hZGQoIC4uLiApXG5cdFx0XHRcdFx0XHR0dXBsZXNbIDEgXVsgMyBdLmFkZChcblx0XHRcdFx0XHRcdFx0cmVzb2x2ZShcblx0XHRcdFx0XHRcdFx0XHQwLFxuXHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyLFxuXHRcdFx0XHRcdFx0XHRcdGlzRnVuY3Rpb24oIG9uRnVsZmlsbGVkICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25GdWxmaWxsZWQgOlxuXHRcdFx0XHRcdFx0XHRcdFx0SWRlbnRpdHlcblx0XHRcdFx0XHRcdFx0KVxuXHRcdFx0XHRcdFx0KTtcblxuXHRcdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAyIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvblJlamVjdGVkICkgP1xuXHRcdFx0XHRcdFx0XHRcdFx0b25SZWplY3RlZCA6XG5cdFx0XHRcdFx0XHRcdFx0XHRUaHJvd2VyXG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSApLnByb21pc2UoKTtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBHZXQgYSBwcm9taXNlIGZvciB0aGlzIGRlZmVycmVkXG5cdFx0XHRcdC8vIElmIG9iaiBpcyBwcm92aWRlZCwgdGhlIHByb21pc2UgYXNwZWN0IGlzIGFkZGVkIHRvIHRoZSBvYmplY3Rcblx0XHRcdFx0cHJvbWlzZTogZnVuY3Rpb24oIG9iaiApIHtcblx0XHRcdFx0XHRyZXR1cm4gb2JqICE9IG51bGwgPyBqUXVlcnkuZXh0ZW5kKCBvYmosIHByb21pc2UgKSA6IHByb21pc2U7XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cdFx0XHRkZWZlcnJlZCA9IHt9O1xuXG5cdFx0Ly8gQWRkIGxpc3Qtc3BlY2lmaWMgbWV0aG9kc1xuXHRcdGpRdWVyeS5lYWNoKCB0dXBsZXMsIGZ1bmN0aW9uKCBpLCB0dXBsZSApIHtcblx0XHRcdHZhciBsaXN0ID0gdHVwbGVbIDIgXSxcblx0XHRcdFx0c3RhdGVTdHJpbmcgPSB0dXBsZVsgNSBdO1xuXG5cdFx0XHQvLyBwcm9taXNlLnByb2dyZXNzID0gbGlzdC5hZGRcblx0XHRcdC8vIHByb21pc2UuZG9uZSA9IGxpc3QuYWRkXG5cdFx0XHQvLyBwcm9taXNlLmZhaWwgPSBsaXN0LmFkZFxuXHRcdFx0cHJvbWlzZVsgdHVwbGVbIDEgXSBdID0gbGlzdC5hZGQ7XG5cblx0XHRcdC8vIEhhbmRsZSBzdGF0ZVxuXHRcdFx0aWYgKCBzdGF0ZVN0cmluZyApIHtcblx0XHRcdFx0bGlzdC5hZGQoXG5cdFx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0XHRcdC8vIHN0YXRlID0gXCJyZXNvbHZlZFwiIChpLmUuLCBmdWxmaWxsZWQpXG5cdFx0XHRcdFx0XHQvLyBzdGF0ZSA9IFwicmVqZWN0ZWRcIlxuXHRcdFx0XHRcdFx0c3RhdGUgPSBzdGF0ZVN0cmluZztcblx0XHRcdFx0XHR9LFxuXG5cdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfY2FsbGJhY2tzLmRpc2FibGVcblx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfY2FsbGJhY2tzLmRpc2FibGVcblx0XHRcdFx0XHR0dXBsZXNbIDMgLSBpIF1bIDIgXS5kaXNhYmxlLFxuXG5cdFx0XHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuZGlzYWJsZVxuXHRcdFx0XHRcdC8vIGZ1bGZpbGxlZF9oYW5kbGVycy5kaXNhYmxlXG5cdFx0XHRcdFx0dHVwbGVzWyAzIC0gaSBdWyAzIF0uZGlzYWJsZSxcblxuXHRcdFx0XHRcdC8vIHByb2dyZXNzX2NhbGxiYWNrcy5sb2NrXG5cdFx0XHRcdFx0dHVwbGVzWyAwIF1bIDIgXS5sb2NrLFxuXG5cdFx0XHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMubG9ja1xuXHRcdFx0XHRcdHR1cGxlc1sgMCBdWyAzIF0ubG9ja1xuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBwcm9ncmVzc19oYW5kbGVycy5maXJlXG5cdFx0XHQvLyBmdWxmaWxsZWRfaGFuZGxlcnMuZmlyZVxuXHRcdFx0Ly8gcmVqZWN0ZWRfaGFuZGxlcnMuZmlyZVxuXHRcdFx0bGlzdC5hZGQoIHR1cGxlWyAzIF0uZmlyZSApO1xuXG5cdFx0XHQvLyBkZWZlcnJlZC5ub3RpZnkgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQubm90aWZ5V2l0aCguLi4pIH1cblx0XHRcdC8vIGRlZmVycmVkLnJlc29sdmUgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQucmVzb2x2ZVdpdGgoLi4uKSB9XG5cdFx0XHQvLyBkZWZlcnJlZC5yZWplY3QgPSBmdW5jdGlvbigpIHsgZGVmZXJyZWQucmVqZWN0V2l0aCguLi4pIH1cblx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdKCB0aGlzID09PSBkZWZlcnJlZCA/IHVuZGVmaW5lZCA6IHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH07XG5cblx0XHRcdC8vIGRlZmVycmVkLm5vdGlmeVdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHQvLyBkZWZlcnJlZC5yZXNvbHZlV2l0aCA9IGxpc3QuZmlyZVdpdGhcblx0XHRcdC8vIGRlZmVycmVkLnJlamVjdFdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSArIFwiV2l0aFwiIF0gPSBsaXN0LmZpcmVXaXRoO1xuXHRcdH0gKTtcblxuXHRcdC8vIE1ha2UgdGhlIGRlZmVycmVkIGEgcHJvbWlzZVxuXHRcdHByb21pc2UucHJvbWlzZSggZGVmZXJyZWQgKTtcblxuXHRcdC8vIENhbGwgZ2l2ZW4gZnVuYyBpZiBhbnlcblx0XHRpZiAoIGZ1bmMgKSB7XG5cdFx0XHRmdW5jLmNhbGwoIGRlZmVycmVkLCBkZWZlcnJlZCApO1xuXHRcdH1cblxuXHRcdC8vIEFsbCBkb25lIVxuXHRcdHJldHVybiBkZWZlcnJlZDtcblx0fSxcblxuXHQvLyBEZWZlcnJlZCBoZWxwZXJcblx0d2hlbjogZnVuY3Rpb24oIHNpbmdsZVZhbHVlICkge1xuXHRcdHZhclxuXG5cdFx0XHQvLyBjb3VudCBvZiB1bmNvbXBsZXRlZCBzdWJvcmRpbmF0ZXNcblx0XHRcdHJlbWFpbmluZyA9IGFyZ3VtZW50cy5sZW5ndGgsXG5cblx0XHRcdC8vIGNvdW50IG9mIHVucHJvY2Vzc2VkIGFyZ3VtZW50c1xuXHRcdFx0aSA9IHJlbWFpbmluZyxcblxuXHRcdFx0Ly8gc3Vib3JkaW5hdGUgZnVsZmlsbG1lbnQgZGF0YVxuXHRcdFx0cmVzb2x2ZUNvbnRleHRzID0gQXJyYXkoIGkgKSxcblx0XHRcdHJlc29sdmVWYWx1ZXMgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSxcblxuXHRcdFx0Ly8gdGhlIHByaW1hcnkgRGVmZXJyZWRcblx0XHRcdHByaW1hcnkgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblxuXHRcdFx0Ly8gc3Vib3JkaW5hdGUgY2FsbGJhY2sgZmFjdG9yeVxuXHRcdFx0dXBkYXRlRnVuYyA9IGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRcdHJlc29sdmVDb250ZXh0c1sgaSBdID0gdGhpcztcblx0XHRcdFx0XHRyZXNvbHZlVmFsdWVzWyBpIF0gPSBhcmd1bWVudHMubGVuZ3RoID4gMSA/IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApIDogdmFsdWU7XG5cdFx0XHRcdFx0aWYgKCAhKCAtLXJlbWFpbmluZyApICkge1xuXHRcdFx0XHRcdFx0cHJpbWFyeS5yZXNvbHZlV2l0aCggcmVzb2x2ZUNvbnRleHRzLCByZXNvbHZlVmFsdWVzICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdFx0fTtcblxuXHRcdC8vIFNpbmdsZS0gYW5kIGVtcHR5IGFyZ3VtZW50cyBhcmUgYWRvcHRlZCBsaWtlIFByb21pc2UucmVzb2x2ZVxuXHRcdGlmICggcmVtYWluaW5nIDw9IDEgKSB7XG5cdFx0XHRhZG9wdFZhbHVlKCBzaW5nbGVWYWx1ZSwgcHJpbWFyeS5kb25lKCB1cGRhdGVGdW5jKCBpICkgKS5yZXNvbHZlLCBwcmltYXJ5LnJlamVjdCxcblx0XHRcdFx0IXJlbWFpbmluZyApO1xuXG5cdFx0XHQvLyBVc2UgLnRoZW4oKSB0byB1bndyYXAgc2Vjb25kYXJ5IHRoZW5hYmxlcyAoY2YuIGdoLTMwMDApXG5cdFx0XHRpZiAoIHByaW1hcnkuc3RhdGUoKSA9PT0gXCJwZW5kaW5nXCIgfHxcblx0XHRcdFx0aXNGdW5jdGlvbiggcmVzb2x2ZVZhbHVlc1sgaSBdICYmIHJlc29sdmVWYWx1ZXNbIGkgXS50aGVuICkgKSB7XG5cblx0XHRcdFx0cmV0dXJuIHByaW1hcnkudGhlbigpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIE11bHRpcGxlIGFyZ3VtZW50cyBhcmUgYWdncmVnYXRlZCBsaWtlIFByb21pc2UuYWxsIGFycmF5IGVsZW1lbnRzXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRhZG9wdFZhbHVlKCByZXNvbHZlVmFsdWVzWyBpIF0sIHVwZGF0ZUZ1bmMoIGkgKSwgcHJpbWFyeS5yZWplY3QgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gcHJpbWFyeS5wcm9taXNlKCk7XG5cdH1cbn0gKTtcblxuXG4vLyBUaGVzZSB1c3VhbGx5IGluZGljYXRlIGEgcHJvZ3JhbW1lciBtaXN0YWtlIGR1cmluZyBkZXZlbG9wbWVudCxcbi8vIHdhcm4gYWJvdXQgdGhlbSBBU0FQIHJhdGhlciB0aGFuIHN3YWxsb3dpbmcgdGhlbSBieSBkZWZhdWx0LlxudmFyIHJlcnJvck5hbWVzID0gL14oRXZhbHxJbnRlcm5hbHxSYW5nZXxSZWZlcmVuY2V8U3ludGF4fFR5cGV8VVJJKUVycm9yJC87XG5cbmpRdWVyeS5EZWZlcnJlZC5leGNlcHRpb25Ib29rID0gZnVuY3Rpb24oIGVycm9yLCBzdGFjayApIHtcblxuXHQvLyBTdXBwb3J0OiBJRSA4IC0gOSBvbmx5XG5cdC8vIENvbnNvbGUgZXhpc3RzIHdoZW4gZGV2IHRvb2xzIGFyZSBvcGVuLCB3aGljaCBjYW4gaGFwcGVuIGF0IGFueSB0aW1lXG5cdGlmICggd2luZG93LmNvbnNvbGUgJiYgd2luZG93LmNvbnNvbGUud2FybiAmJiBlcnJvciAmJiByZXJyb3JOYW1lcy50ZXN0KCBlcnJvci5uYW1lICkgKSB7XG5cdFx0d2luZG93LmNvbnNvbGUud2FybiggXCJqUXVlcnkuRGVmZXJyZWQgZXhjZXB0aW9uOiBcIiArIGVycm9yLm1lc3NhZ2UsIGVycm9yLnN0YWNrLCBzdGFjayApO1xuXHR9XG59O1xuXG5cblxuXG5qUXVlcnkucmVhZHlFeGNlcHRpb24gPSBmdW5jdGlvbiggZXJyb3IgKSB7XG5cdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHR0aHJvdyBlcnJvcjtcblx0fSApO1xufTtcblxuXG5cblxuLy8gVGhlIGRlZmVycmVkIHVzZWQgb24gRE9NIHJlYWR5XG52YXIgcmVhZHlMaXN0ID0galF1ZXJ5LkRlZmVycmVkKCk7XG5cbmpRdWVyeS5mbi5yZWFkeSA9IGZ1bmN0aW9uKCBmbiApIHtcblxuXHRyZWFkeUxpc3Rcblx0XHQudGhlbiggZm4gKVxuXG5cdFx0Ly8gV3JhcCBqUXVlcnkucmVhZHlFeGNlcHRpb24gaW4gYSBmdW5jdGlvbiBzbyB0aGF0IHRoZSBsb29rdXBcblx0XHQvLyBoYXBwZW5zIGF0IHRoZSB0aW1lIG9mIGVycm9yIGhhbmRsaW5nIGluc3RlYWQgb2YgY2FsbGJhY2tcblx0XHQvLyByZWdpc3RyYXRpb24uXG5cdFx0LmNhdGNoKCBmdW5jdGlvbiggZXJyb3IgKSB7XG5cdFx0XHRqUXVlcnkucmVhZHlFeGNlcHRpb24oIGVycm9yICk7XG5cdFx0fSApO1xuXG5cdHJldHVybiB0aGlzO1xufTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIElzIHRoZSBET00gcmVhZHkgdG8gYmUgdXNlZD8gU2V0IHRvIHRydWUgb25jZSBpdCBvY2N1cnMuXG5cdGlzUmVhZHk6IGZhbHNlLFxuXG5cdC8vIEEgY291bnRlciB0byB0cmFjayBob3cgbWFueSBpdGVtcyB0byB3YWl0IGZvciBiZWZvcmVcblx0Ly8gdGhlIHJlYWR5IGV2ZW50IGZpcmVzLiBTZWUgIzY3ODFcblx0cmVhZHlXYWl0OiAxLFxuXG5cdC8vIEhhbmRsZSB3aGVuIHRoZSBET00gaXMgcmVhZHlcblx0cmVhZHk6IGZ1bmN0aW9uKCB3YWl0ICkge1xuXG5cdFx0Ly8gQWJvcnQgaWYgdGhlcmUgYXJlIHBlbmRpbmcgaG9sZHMgb3Igd2UncmUgYWxyZWFkeSByZWFkeVxuXHRcdGlmICggd2FpdCA9PT0gdHJ1ZSA/IC0talF1ZXJ5LnJlYWR5V2FpdCA6IGpRdWVyeS5pc1JlYWR5ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFJlbWVtYmVyIHRoYXQgdGhlIERPTSBpcyByZWFkeVxuXHRcdGpRdWVyeS5pc1JlYWR5ID0gdHJ1ZTtcblxuXHRcdC8vIElmIGEgbm9ybWFsIERPTSBSZWFkeSBldmVudCBmaXJlZCwgZGVjcmVtZW50LCBhbmQgd2FpdCBpZiBuZWVkIGJlXG5cdFx0aWYgKCB3YWl0ICE9PSB0cnVlICYmIC0talF1ZXJ5LnJlYWR5V2FpdCA+IDAgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gSWYgdGhlcmUgYXJlIGZ1bmN0aW9ucyBib3VuZCwgdG8gZXhlY3V0ZVxuXHRcdHJlYWR5TGlzdC5yZXNvbHZlV2l0aCggZG9jdW1lbnQsIFsgalF1ZXJ5IF0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkucmVhZHkudGhlbiA9IHJlYWR5TGlzdC50aGVuO1xuXG4vLyBUaGUgcmVhZHkgZXZlbnQgaGFuZGxlciBhbmQgc2VsZiBjbGVhbnVwIG1ldGhvZFxuZnVuY3Rpb24gY29tcGxldGVkKCkge1xuXHRkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgY29tcGxldGVkICk7XG5cdHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCBcImxvYWRcIiwgY29tcGxldGVkICk7XG5cdGpRdWVyeS5yZWFkeSgpO1xufVxuXG4vLyBDYXRjaCBjYXNlcyB3aGVyZSAkKGRvY3VtZW50KS5yZWFkeSgpIGlzIGNhbGxlZFxuLy8gYWZ0ZXIgdGhlIGJyb3dzZXIgZXZlbnQgaGFzIGFscmVhZHkgb2NjdXJyZWQuXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMCBvbmx5XG4vLyBPbGRlciBJRSBzb21ldGltZXMgc2lnbmFscyBcImludGVyYWN0aXZlXCIgdG9vIHNvb25cbmlmICggZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gXCJjb21wbGV0ZVwiIHx8XG5cdCggZG9jdW1lbnQucmVhZHlTdGF0ZSAhPT0gXCJsb2FkaW5nXCIgJiYgIWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCApICkge1xuXG5cdC8vIEhhbmRsZSBpdCBhc3luY2hyb25vdXNseSB0byBhbGxvdyBzY3JpcHRzIHRoZSBvcHBvcnR1bml0eSB0byBkZWxheSByZWFkeVxuXHR3aW5kb3cuc2V0VGltZW91dCggalF1ZXJ5LnJlYWR5ICk7XG5cbn0gZWxzZSB7XG5cblx0Ly8gVXNlIHRoZSBoYW5keSBldmVudCBjYWxsYmFja1xuXHRkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCBcIkRPTUNvbnRlbnRMb2FkZWRcIiwgY29tcGxldGVkICk7XG5cblx0Ly8gQSBmYWxsYmFjayB0byB3aW5kb3cub25sb2FkLCB0aGF0IHdpbGwgYWx3YXlzIHdvcmtcblx0d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIFwibG9hZFwiLCBjb21wbGV0ZWQgKTtcbn1cblxuXG5cblxuLy8gTXVsdGlmdW5jdGlvbmFsIG1ldGhvZCB0byBnZXQgYW5kIHNldCB2YWx1ZXMgb2YgYSBjb2xsZWN0aW9uXG4vLyBUaGUgdmFsdWUvcyBjYW4gb3B0aW9uYWxseSBiZSBleGVjdXRlZCBpZiBpdCdzIGEgZnVuY3Rpb25cbnZhciBhY2Nlc3MgPSBmdW5jdGlvbiggZWxlbXMsIGZuLCBrZXksIHZhbHVlLCBjaGFpbmFibGUsIGVtcHR5R2V0LCByYXcgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSBlbGVtcy5sZW5ndGgsXG5cdFx0YnVsayA9IGtleSA9PSBudWxsO1xuXG5cdC8vIFNldHMgbWFueSB2YWx1ZXNcblx0aWYgKCB0b1R5cGUoIGtleSApID09PSBcIm9iamVjdFwiICkge1xuXHRcdGNoYWluYWJsZSA9IHRydWU7XG5cdFx0Zm9yICggaSBpbiBrZXkgKSB7XG5cdFx0XHRhY2Nlc3MoIGVsZW1zLCBmbiwgaSwga2V5WyBpIF0sIHRydWUsIGVtcHR5R2V0LCByYXcgKTtcblx0XHR9XG5cblx0Ly8gU2V0cyBvbmUgdmFsdWVcblx0fSBlbHNlIGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRjaGFpbmFibGUgPSB0cnVlO1xuXG5cdFx0aWYgKCAhaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJhdyA9IHRydWU7XG5cdFx0fVxuXG5cdFx0aWYgKCBidWxrICkge1xuXG5cdFx0XHQvLyBCdWxrIG9wZXJhdGlvbnMgcnVuIGFnYWluc3QgdGhlIGVudGlyZSBzZXRcblx0XHRcdGlmICggcmF3ICkge1xuXHRcdFx0XHRmbi5jYWxsKCBlbGVtcywgdmFsdWUgKTtcblx0XHRcdFx0Zm4gPSBudWxsO1xuXG5cdFx0XHQvLyAuLi5leGNlcHQgd2hlbiBleGVjdXRpbmcgZnVuY3Rpb24gdmFsdWVzXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRidWxrID0gZm47XG5cdFx0XHRcdGZuID0gZnVuY3Rpb24oIGVsZW0sIF9rZXksIHZhbHVlICkge1xuXHRcdFx0XHRcdHJldHVybiBidWxrLmNhbGwoIGpRdWVyeSggZWxlbSApLCB2YWx1ZSApO1xuXHRcdFx0XHR9O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmICggZm4gKSB7XG5cdFx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdFx0Zm4oXG5cdFx0XHRcdFx0ZWxlbXNbIGkgXSwga2V5LCByYXcgP1xuXHRcdFx0XHRcdFx0dmFsdWUgOlxuXHRcdFx0XHRcdFx0dmFsdWUuY2FsbCggZWxlbXNbIGkgXSwgaSwgZm4oIGVsZW1zWyBpIF0sIGtleSApIClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRpZiAoIGNoYWluYWJsZSApIHtcblx0XHRyZXR1cm4gZWxlbXM7XG5cdH1cblxuXHQvLyBHZXRzXG5cdGlmICggYnVsayApIHtcblx0XHRyZXR1cm4gZm4uY2FsbCggZWxlbXMgKTtcblx0fVxuXG5cdHJldHVybiBsZW4gPyBmbiggZWxlbXNbIDAgXSwga2V5ICkgOiBlbXB0eUdldDtcbn07XG5cblxuLy8gTWF0Y2hlcyBkYXNoZWQgc3RyaW5nIGZvciBjYW1lbGl6aW5nXG52YXIgcm1zUHJlZml4ID0gL14tbXMtLyxcblx0cmRhc2hBbHBoYSA9IC8tKFthLXpdKS9nO1xuXG4vLyBVc2VkIGJ5IGNhbWVsQ2FzZSBhcyBjYWxsYmFjayB0byByZXBsYWNlKClcbmZ1bmN0aW9uIGZjYW1lbENhc2UoIF9hbGwsIGxldHRlciApIHtcblx0cmV0dXJuIGxldHRlci50b1VwcGVyQ2FzZSgpO1xufVxuXG4vLyBDb252ZXJ0IGRhc2hlZCB0byBjYW1lbENhc2U7IHVzZWQgYnkgdGhlIGNzcyBhbmQgZGF0YSBtb2R1bGVzXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSwgRWRnZSAxMiAtIDE1XG4vLyBNaWNyb3NvZnQgZm9yZ290IHRvIGh1bXAgdGhlaXIgdmVuZG9yIHByZWZpeCAoIzk1NzIpXG5mdW5jdGlvbiBjYW1lbENhc2UoIHN0cmluZyApIHtcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKCBybXNQcmVmaXgsIFwibXMtXCIgKS5yZXBsYWNlKCByZGFzaEFscGhhLCBmY2FtZWxDYXNlICk7XG59XG52YXIgYWNjZXB0RGF0YSA9IGZ1bmN0aW9uKCBvd25lciApIHtcblxuXHQvLyBBY2NlcHRzIG9ubHk6XG5cdC8vICAtIE5vZGVcblx0Ly8gICAgLSBOb2RlLkVMRU1FTlRfTk9ERVxuXHQvLyAgICAtIE5vZGUuRE9DVU1FTlRfTk9ERVxuXHQvLyAgLSBPYmplY3Rcblx0Ly8gICAgLSBBbnlcblx0cmV0dXJuIG93bmVyLm5vZGVUeXBlID09PSAxIHx8IG93bmVyLm5vZGVUeXBlID09PSA5IHx8ICEoICtvd25lci5ub2RlVHlwZSApO1xufTtcblxuXG5cblxuZnVuY3Rpb24gRGF0YSgpIHtcblx0dGhpcy5leHBhbmRvID0galF1ZXJ5LmV4cGFuZG8gKyBEYXRhLnVpZCsrO1xufVxuXG5EYXRhLnVpZCA9IDE7XG5cbkRhdGEucHJvdG90eXBlID0ge1xuXG5cdGNhY2hlOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cblx0XHQvLyBDaGVjayBpZiB0aGUgb3duZXIgb2JqZWN0IGFscmVhZHkgaGFzIGEgY2FjaGVcblx0XHR2YXIgdmFsdWUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHQvLyBJZiBub3QsIGNyZWF0ZSBvbmVcblx0XHRpZiAoICF2YWx1ZSApIHtcblx0XHRcdHZhbHVlID0ge307XG5cblx0XHRcdC8vIFdlIGNhbiBhY2NlcHQgZGF0YSBmb3Igbm9uLWVsZW1lbnQgbm9kZXMgaW4gbW9kZXJuIGJyb3dzZXJzLFxuXHRcdFx0Ly8gYnV0IHdlIHNob3VsZCBub3QsIHNlZSAjODMzNS5cblx0XHRcdC8vIEFsd2F5cyByZXR1cm4gYW4gZW1wdHkgb2JqZWN0LlxuXHRcdFx0aWYgKCBhY2NlcHREYXRhKCBvd25lciApICkge1xuXG5cdFx0XHRcdC8vIElmIGl0IGlzIGEgbm9kZSB1bmxpa2VseSB0byBiZSBzdHJpbmdpZnktZWQgb3IgbG9vcGVkIG92ZXJcblx0XHRcdFx0Ly8gdXNlIHBsYWluIGFzc2lnbm1lbnRcblx0XHRcdFx0aWYgKCBvd25lci5ub2RlVHlwZSApIHtcblx0XHRcdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gPSB2YWx1ZTtcblxuXHRcdFx0XHQvLyBPdGhlcndpc2Ugc2VjdXJlIGl0IGluIGEgbm9uLWVudW1lcmFibGUgcHJvcGVydHlcblx0XHRcdFx0Ly8gY29uZmlndXJhYmxlIG11c3QgYmUgdHJ1ZSB0byBhbGxvdyB0aGUgcHJvcGVydHkgdG8gYmVcblx0XHRcdFx0Ly8gZGVsZXRlZCB3aGVuIGRhdGEgaXMgcmVtb3ZlZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggb3duZXIsIHRoaXMuZXhwYW5kbywge1xuXHRcdFx0XHRcdFx0dmFsdWU6IHZhbHVlLFxuXHRcdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlXG5cdFx0XHRcdFx0fSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9LFxuXHRzZXQ6IGZ1bmN0aW9uKCBvd25lciwgZGF0YSwgdmFsdWUgKSB7XG5cdFx0dmFyIHByb3AsXG5cdFx0XHRjYWNoZSA9IHRoaXMuY2FjaGUoIG93bmVyICk7XG5cblx0XHQvLyBIYW5kbGU6IFsgb3duZXIsIGtleSwgdmFsdWUgXSBhcmdzXG5cdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxuXHRcdGlmICggdHlwZW9mIGRhdGEgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRjYWNoZVsgY2FtZWxDYXNlKCBkYXRhICkgXSA9IHZhbHVlO1xuXG5cdFx0Ly8gSGFuZGxlOiBbIG93bmVyLCB7IHByb3BlcnRpZXMgfSBdIGFyZ3Ncblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBDb3B5IHRoZSBwcm9wZXJ0aWVzIG9uZS1ieS1vbmUgdG8gdGhlIGNhY2hlIG9iamVjdFxuXHRcdFx0Zm9yICggcHJvcCBpbiBkYXRhICkge1xuXHRcdFx0XHRjYWNoZVsgY2FtZWxDYXNlKCBwcm9wICkgXSA9IGRhdGFbIHByb3AgXTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIGNhY2hlO1xuXHR9LFxuXHRnZXQ6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHJldHVybiBrZXkgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHR0aGlzLmNhY2hlKCBvd25lciApIDpcblxuXHRcdFx0Ly8gQWx3YXlzIHVzZSBjYW1lbENhc2Uga2V5IChnaC0yMjU3KVxuXHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdICYmIG93bmVyWyB0aGlzLmV4cGFuZG8gXVsgY2FtZWxDYXNlKCBrZXkgKSBdO1xuXHR9LFxuXHRhY2Nlc3M6IGZ1bmN0aW9uKCBvd25lciwga2V5LCB2YWx1ZSApIHtcblxuXHRcdC8vIEluIGNhc2VzIHdoZXJlIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gTm8ga2V5IHdhcyBzcGVjaWZpZWRcblx0XHQvLyAgIDIuIEEgc3RyaW5nIGtleSB3YXMgc3BlY2lmaWVkLCBidXQgbm8gdmFsdWUgcHJvdmlkZWRcblx0XHQvL1xuXHRcdC8vIFRha2UgdGhlIFwicmVhZFwiIHBhdGggYW5kIGFsbG93IHRoZSBnZXQgbWV0aG9kIHRvIGRldGVybWluZVxuXHRcdC8vIHdoaWNoIHZhbHVlIHRvIHJldHVybiwgcmVzcGVjdGl2ZWx5IGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gVGhlIGVudGlyZSBjYWNoZSBvYmplY3Rcblx0XHQvLyAgIDIuIFRoZSBkYXRhIHN0b3JlZCBhdCB0aGUga2V5XG5cdFx0Ly9cblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8XG5cdFx0XHRcdCggKCBrZXkgJiYgdHlwZW9mIGtleSA9PT0gXCJzdHJpbmdcIiApICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSApIHtcblxuXHRcdFx0cmV0dXJuIHRoaXMuZ2V0KCBvd25lciwga2V5ICk7XG5cdFx0fVxuXG5cdFx0Ly8gV2hlbiB0aGUga2V5IGlzIG5vdCBhIHN0cmluZywgb3IgYm90aCBhIGtleSBhbmQgdmFsdWVcblx0XHQvLyBhcmUgc3BlY2lmaWVkLCBzZXQgb3IgZXh0ZW5kIChleGlzdGluZyBvYmplY3RzKSB3aXRoIGVpdGhlcjpcblx0XHQvL1xuXHRcdC8vICAgMS4gQW4gb2JqZWN0IG9mIHByb3BlcnRpZXNcblx0XHQvLyAgIDIuIEEga2V5IGFuZCB2YWx1ZVxuXHRcdC8vXG5cdFx0dGhpcy5zZXQoIG93bmVyLCBrZXksIHZhbHVlICk7XG5cblx0XHQvLyBTaW5jZSB0aGUgXCJzZXRcIiBwYXRoIGNhbiBoYXZlIHR3byBwb3NzaWJsZSBlbnRyeSBwb2ludHNcblx0XHQvLyByZXR1cm4gdGhlIGV4cGVjdGVkIGRhdGEgYmFzZWQgb24gd2hpY2ggcGF0aCB3YXMgdGFrZW5bKl1cblx0XHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCA/IHZhbHVlIDoga2V5O1xuXHR9LFxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBvd25lciwga2V5ICkge1xuXHRcdHZhciBpLFxuXHRcdFx0Y2FjaGUgPSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cblx0XHRpZiAoIGNhY2hlID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0aWYgKCBrZXkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydCBhcnJheSBvciBzcGFjZSBzZXBhcmF0ZWQgc3RyaW5nIG9mIGtleXNcblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSgga2V5ICkgKSB7XG5cblx0XHRcdFx0Ly8gSWYga2V5IGlzIGFuIGFycmF5IG9mIGtleXMuLi5cblx0XHRcdFx0Ly8gV2UgYWx3YXlzIHNldCBjYW1lbENhc2Uga2V5cywgc28gcmVtb3ZlIHRoYXQuXG5cdFx0XHRcdGtleSA9IGtleS5tYXAoIGNhbWVsQ2FzZSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0a2V5ID0gY2FtZWxDYXNlKCBrZXkgKTtcblxuXHRcdFx0XHQvLyBJZiBhIGtleSB3aXRoIHRoZSBzcGFjZXMgZXhpc3RzLCB1c2UgaXQuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgY3JlYXRlIGFuIGFycmF5IGJ5IG1hdGNoaW5nIG5vbi13aGl0ZXNwYWNlXG5cdFx0XHRcdGtleSA9IGtleSBpbiBjYWNoZSA/XG5cdFx0XHRcdFx0WyBrZXkgXSA6XG5cdFx0XHRcdFx0KCBrZXkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpID0ga2V5Lmxlbmd0aDtcblxuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGRlbGV0ZSBjYWNoZVsga2V5WyBpIF0gXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgdGhlIGV4cGFuZG8gaWYgdGhlcmUncyBubyBtb3JlIGRhdGFcblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkIHx8IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBjYWNoZSApICkge1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1XG5cdFx0XHQvLyBXZWJraXQgJiBCbGluayBwZXJmb3JtYW5jZSBzdWZmZXJzIHdoZW4gZGVsZXRpbmcgcHJvcGVydGllc1xuXHRcdFx0Ly8gZnJvbSBET00gbm9kZXMsIHNvIHNldCB0byB1bmRlZmluZWQgaW5zdGVhZFxuXHRcdFx0Ly8gaHR0cHM6Ly9idWdzLmNocm9taXVtLm9yZy9wL2Nocm9taXVtL2lzc3Vlcy9kZXRhaWw/aWQ9Mzc4NjA3IChidWcgcmVzdHJpY3RlZClcblx0XHRcdGlmICggb3duZXIubm9kZVR5cGUgKSB7XG5cdFx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlbGV0ZSBvd25lclsgdGhpcy5leHBhbmRvIF07XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXHRoYXNEYXRhOiBmdW5jdGlvbiggb3duZXIgKSB7XG5cdFx0dmFyIGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXHRcdHJldHVybiBjYWNoZSAhPT0gdW5kZWZpbmVkICYmICFqUXVlcnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKTtcblx0fVxufTtcbnZhciBkYXRhUHJpdiA9IG5ldyBEYXRhKCk7XG5cbnZhciBkYXRhVXNlciA9IG5ldyBEYXRhKCk7XG5cblxuXG4vL1x0SW1wbGVtZW50YXRpb24gU3VtbWFyeVxuLy9cbi8vXHQxLiBFbmZvcmNlIEFQSSBzdXJmYWNlIGFuZCBzZW1hbnRpYyBjb21wYXRpYmlsaXR5IHdpdGggMS45LnggYnJhbmNoXG4vL1x0Mi4gSW1wcm92ZSB0aGUgbW9kdWxlJ3MgbWFpbnRhaW5hYmlsaXR5IGJ5IHJlZHVjaW5nIHRoZSBzdG9yYWdlXG4vL1x0XHRwYXRocyB0byBhIHNpbmdsZSBtZWNoYW5pc20uXG4vL1x0My4gVXNlIHRoZSBzYW1lIHNpbmdsZSBtZWNoYW5pc20gdG8gc3VwcG9ydCBcInByaXZhdGVcIiBhbmQgXCJ1c2VyXCIgZGF0YS5cbi8vXHQ0LiBfTmV2ZXJfIGV4cG9zZSBcInByaXZhdGVcIiBkYXRhIHRvIHVzZXIgY29kZSAoVE9ETzogRHJvcCBfZGF0YSwgX3JlbW92ZURhdGEpXG4vL1x0NS4gQXZvaWQgZXhwb3NpbmcgaW1wbGVtZW50YXRpb24gZGV0YWlscyBvbiB1c2VyIG9iamVjdHMgKGVnLiBleHBhbmRvIHByb3BlcnRpZXMpXG4vL1x0Ni4gUHJvdmlkZSBhIGNsZWFyIHBhdGggZm9yIGltcGxlbWVudGF0aW9uIHVwZ3JhZGUgdG8gV2Vha01hcCBpbiAyMDE0XG5cbnZhciByYnJhY2UgPSAvXig/Olxce1tcXHdcXFddKlxcfXxcXFtbXFx3XFxXXSpcXF0pJC8sXG5cdHJtdWx0aURhc2ggPSAvW0EtWl0vZztcblxuZnVuY3Rpb24gZ2V0RGF0YSggZGF0YSApIHtcblx0aWYgKCBkYXRhID09PSBcInRydWVcIiApIHtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXG5cdGlmICggZGF0YSA9PT0gXCJmYWxzZVwiICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdGlmICggZGF0YSA9PT0gXCJudWxsXCIgKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvLyBPbmx5IGNvbnZlcnQgdG8gYSBudW1iZXIgaWYgaXQgZG9lc24ndCBjaGFuZ2UgdGhlIHN0cmluZ1xuXHRpZiAoIGRhdGEgPT09ICtkYXRhICsgXCJcIiApIHtcblx0XHRyZXR1cm4gK2RhdGE7XG5cdH1cblxuXHRpZiAoIHJicmFjZS50ZXN0KCBkYXRhICkgKSB7XG5cdFx0cmV0dXJuIEpTT04ucGFyc2UoIGRhdGEgKTtcblx0fVxuXG5cdHJldHVybiBkYXRhO1xufVxuXG5mdW5jdGlvbiBkYXRhQXR0ciggZWxlbSwga2V5LCBkYXRhICkge1xuXHR2YXIgbmFtZTtcblxuXHQvLyBJZiBub3RoaW5nIHdhcyBmb3VuZCBpbnRlcm5hbGx5LCB0cnkgdG8gZmV0Y2ggYW55XG5cdC8vIGRhdGEgZnJvbSB0aGUgSFRNTDUgZGF0YS0qIGF0dHJpYnV0ZVxuXHRpZiAoIGRhdGEgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdG5hbWUgPSBcImRhdGEtXCIgKyBrZXkucmVwbGFjZSggcm11bHRpRGFzaCwgXCItJCZcIiApLnRvTG93ZXJDYXNlKCk7XG5cdFx0ZGF0YSA9IGVsZW0uZ2V0QXR0cmlidXRlKCBuYW1lICk7XG5cblx0XHRpZiAoIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0ZGF0YSA9IGdldERhdGEoIGRhdGEgKTtcblx0XHRcdH0gY2F0Y2ggKCBlICkge31cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHdlIHNldCB0aGUgZGF0YSBzbyBpdCBpc24ndCBjaGFuZ2VkIGxhdGVyXG5cdFx0XHRkYXRhVXNlci5zZXQoIGVsZW0sIGtleSwgZGF0YSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRkYXRhID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0fVxuXHRyZXR1cm4gZGF0YTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRoYXNEYXRhOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuaGFzRGF0YSggZWxlbSApIHx8IGRhdGFQcml2Lmhhc0RhdGEoIGVsZW0gKTtcblx0fSxcblxuXHRkYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVVzZXIuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0cmVtb3ZlRGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cdFx0ZGF0YVVzZXIucmVtb3ZlKCBlbGVtLCBuYW1lICk7XG5cdH0sXG5cblx0Ly8gVE9ETzogTm93IHRoYXQgYWxsIGNhbGxzIHRvIF9kYXRhIGFuZCBfcmVtb3ZlRGF0YSBoYXZlIGJlZW4gcmVwbGFjZWRcblx0Ly8gd2l0aCBkaXJlY3QgY2FsbHMgdG8gZGF0YVByaXYgbWV0aG9kcywgdGhlc2UgY2FuIGJlIGRlcHJlY2F0ZWQuXG5cdF9kYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZGF0YSApIHtcblx0XHRyZXR1cm4gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBuYW1lLCBkYXRhICk7XG5cdH0sXG5cblx0X3JlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgbmFtZSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZGF0YTogZnVuY3Rpb24oIGtleSwgdmFsdWUgKSB7XG5cdFx0dmFyIGksIG5hbWUsIGRhdGEsXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdLFxuXHRcdFx0YXR0cnMgPSBlbGVtICYmIGVsZW0uYXR0cmlidXRlcztcblxuXHRcdC8vIEdldHMgYWxsIHZhbHVlc1xuXHRcdGlmICgga2V5ID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIHRoaXMubGVuZ3RoICkge1xuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtICk7XG5cblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmICFkYXRhUHJpdi5nZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIgKSApIHtcblx0XHRcdFx0XHRpID0gYXR0cnMubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBUaGUgYXR0cnMgZWxlbWVudHMgY2FuIGJlIG51bGwgKCMxNDg5NClcblx0XHRcdFx0XHRcdGlmICggYXR0cnNbIGkgXSApIHtcblx0XHRcdFx0XHRcdFx0bmFtZSA9IGF0dHJzWyBpIF0ubmFtZTtcblx0XHRcdFx0XHRcdFx0aWYgKCBuYW1lLmluZGV4T2YoIFwiZGF0YS1cIiApID09PSAwICkge1xuXHRcdFx0XHRcdFx0XHRcdG5hbWUgPSBjYW1lbENhc2UoIG5hbWUuc2xpY2UoIDUgKSApO1xuXHRcdFx0XHRcdFx0XHRcdGRhdGFBdHRyKCBlbGVtLCBuYW1lLCBkYXRhWyBuYW1lIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIGVsZW0sIFwiaGFzRGF0YUF0dHJzXCIsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZGF0YTtcblx0XHR9XG5cblx0XHQvLyBTZXRzIG11bHRpcGxlIHZhbHVlc1xuXHRcdGlmICggdHlwZW9mIGtleSA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhVXNlci5zZXQoIHRoaXMsIGtleSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBkYXRhO1xuXG5cdFx0XHQvLyBUaGUgY2FsbGluZyBqUXVlcnkgb2JqZWN0IChlbGVtZW50IG1hdGNoZXMpIGlzIG5vdCBlbXB0eVxuXHRcdFx0Ly8gKGFuZCB0aGVyZWZvcmUgaGFzIGFuIGVsZW1lbnQgYXBwZWFycyBhdCB0aGlzWyAwIF0pIGFuZCB0aGVcblx0XHRcdC8vIGB2YWx1ZWAgcGFyYW1ldGVyIHdhcyBub3QgdW5kZWZpbmVkLiBBbiBlbXB0eSBqUXVlcnkgb2JqZWN0XG5cdFx0XHQvLyB3aWxsIHJlc3VsdCBpbiBgdW5kZWZpbmVkYCBmb3IgZWxlbSA9IHRoaXNbIDAgXSB3aGljaCB3aWxsXG5cdFx0XHQvLyB0aHJvdyBhbiBleGNlcHRpb24gaWYgYW4gYXR0ZW1wdCB0byByZWFkIGEgZGF0YSBjYWNoZSBpcyBtYWRlLlxuXHRcdFx0aWYgKCBlbGVtICYmIHZhbHVlID09PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0Ly8gQXR0ZW1wdCB0byBnZXQgZGF0YSBmcm9tIHRoZSBjYWNoZVxuXHRcdFx0XHQvLyBUaGUga2V5IHdpbGwgYWx3YXlzIGJlIGNhbWVsQ2FzZWQgaW4gRGF0YVxuXHRcdFx0XHRkYXRhID0gZGF0YVVzZXIuZ2V0KCBlbGVtLCBrZXkgKTtcblx0XHRcdFx0aWYgKCBkYXRhICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBBdHRlbXB0IHRvIFwiZGlzY292ZXJcIiB0aGUgZGF0YSBpblxuXHRcdFx0XHQvLyBIVE1MNSBjdXN0b20gZGF0YS0qIGF0dHJzXG5cdFx0XHRcdGRhdGEgPSBkYXRhQXR0ciggZWxlbSwga2V5ICk7XG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gV2UgdHJpZWQgcmVhbGx5IGhhcmQsIGJ1dCB0aGUgZGF0YSBkb2Vzbid0IGV4aXN0LlxuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldCB0aGUgZGF0YS4uLlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBXZSBhbHdheXMgc3RvcmUgdGhlIGNhbWVsQ2FzZWQga2V5XG5cdFx0XHRcdGRhdGFVc2VyLnNldCggdGhpcywga2V5LCB2YWx1ZSApO1xuXHRcdFx0fSApO1xuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSwgbnVsbCwgdHJ1ZSApO1xuXHR9LFxuXG5cdHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBrZXkgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRkYXRhVXNlci5yZW1vdmUoIHRoaXMsIGtleSApO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5cbmpRdWVyeS5leHRlbmQoIHtcblx0cXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBxdWV1ZTtcblxuXHRcdGlmICggZWxlbSApIHtcblx0XHRcdHR5cGUgPSAoIHR5cGUgfHwgXCJmeFwiICkgKyBcInF1ZXVlXCI7XG5cdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmdldCggZWxlbSwgdHlwZSApO1xuXG5cdFx0XHQvLyBTcGVlZCB1cCBkZXF1ZXVlIGJ5IGdldHRpbmcgb3V0IHF1aWNrbHkgaWYgdGhpcyBpcyBqdXN0IGEgbG9va3VwXG5cdFx0XHRpZiAoIGRhdGEgKSB7XG5cdFx0XHRcdGlmICggIXF1ZXVlIHx8IEFycmF5LmlzQXJyYXkoIGRhdGEgKSApIHtcblx0XHRcdFx0XHRxdWV1ZSA9IGRhdGFQcml2LmFjY2VzcyggZWxlbSwgdHlwZSwgalF1ZXJ5Lm1ha2VBcnJheSggZGF0YSApICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0cXVldWUucHVzaCggZGF0YSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcXVldWUgfHwgW107XG5cdFx0fVxuXHR9LFxuXG5cdGRlcXVldWU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRcdHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggZWxlbSwgdHlwZSApLFxuXHRcdFx0c3RhcnRMZW5ndGggPSBxdWV1ZS5sZW5ndGgsXG5cdFx0XHRmbiA9IHF1ZXVlLnNoaWZ0KCksXG5cdFx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgdHlwZSApLFxuXHRcdFx0bmV4dCA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRqUXVlcnkuZGVxdWV1ZSggZWxlbSwgdHlwZSApO1xuXHRcdFx0fTtcblxuXHRcdC8vIElmIHRoZSBmeCBxdWV1ZSBpcyBkZXF1ZXVlZCwgYWx3YXlzIHJlbW92ZSB0aGUgcHJvZ3Jlc3Mgc2VudGluZWxcblx0XHRpZiAoIGZuID09PSBcImlucHJvZ3Jlc3NcIiApIHtcblx0XHRcdGZuID0gcXVldWUuc2hpZnQoKTtcblx0XHRcdHN0YXJ0TGVuZ3RoLS07XG5cdFx0fVxuXG5cdFx0aWYgKCBmbiApIHtcblxuXHRcdFx0Ly8gQWRkIGEgcHJvZ3Jlc3Mgc2VudGluZWwgdG8gcHJldmVudCB0aGUgZnggcXVldWUgZnJvbSBiZWluZ1xuXHRcdFx0Ly8gYXV0b21hdGljYWxseSBkZXF1ZXVlZFxuXHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgKSB7XG5cdFx0XHRcdHF1ZXVlLnVuc2hpZnQoIFwiaW5wcm9ncmVzc1wiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENsZWFyIHVwIHRoZSBsYXN0IHF1ZXVlIHN0b3AgZnVuY3Rpb25cblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0Zm4uY2FsbCggZWxlbSwgbmV4dCwgaG9va3MgKTtcblx0XHR9XG5cblx0XHRpZiAoICFzdGFydExlbmd0aCAmJiBob29rcyApIHtcblx0XHRcdGhvb2tzLmVtcHR5LmZpcmUoKTtcblx0XHR9XG5cdH0sXG5cblx0Ly8gTm90IHB1YmxpYyAtIGdlbmVyYXRlIGEgcXVldWVIb29rcyBvYmplY3QsIG9yIHJldHVybiB0aGUgY3VycmVudCBvbmVcblx0X3F1ZXVlSG9va3M6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlICkge1xuXHRcdHZhciBrZXkgPSB0eXBlICsgXCJxdWV1ZUhvb2tzXCI7XG5cdFx0cmV0dXJuIGRhdGFQcml2LmdldCggZWxlbSwga2V5ICkgfHwgZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBrZXksIHtcblx0XHRcdGVtcHR5OiBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKS5hZGQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFsgdHlwZSArIFwicXVldWVcIiwga2V5IF0gKTtcblx0XHRcdH0gKVxuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHF1ZXVlOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgc2V0dGVyID0gMjtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRkYXRhID0gdHlwZTtcblx0XHRcdHR5cGUgPSBcImZ4XCI7XG5cdFx0XHRzZXR0ZXItLTtcblx0XHR9XG5cblx0XHRpZiAoIGFyZ3VtZW50cy5sZW5ndGggPCBzZXR0ZXIgKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LnF1ZXVlKCB0aGlzWyAwIF0sIHR5cGUgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZGF0YSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdHRoaXMgOlxuXHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIHF1ZXVlID0galF1ZXJ5LnF1ZXVlKCB0aGlzLCB0eXBlLCBkYXRhICk7XG5cblx0XHRcdFx0Ly8gRW5zdXJlIGEgaG9va3MgZm9yIHRoaXMgcXVldWVcblx0XHRcdFx0alF1ZXJ5Ll9xdWV1ZUhvb2tzKCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdFx0aWYgKCB0eXBlID09PSBcImZ4XCIgJiYgcXVldWVbIDAgXSAhPT0gXCJpbnByb2dyZXNzXCIgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHR9LFxuXHRkZXF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0fSApO1xuXHR9LFxuXHRjbGVhclF1ZXVlOiBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSB8fCBcImZ4XCIsIFtdICk7XG5cdH0sXG5cblx0Ly8gR2V0IGEgcHJvbWlzZSByZXNvbHZlZCB3aGVuIHF1ZXVlcyBvZiBhIGNlcnRhaW4gdHlwZVxuXHQvLyBhcmUgZW1wdGllZCAoZnggaXMgdGhlIHR5cGUgYnkgZGVmYXVsdClcblx0cHJvbWlzZTogZnVuY3Rpb24oIHR5cGUsIG9iaiApIHtcblx0XHR2YXIgdG1wLFxuXHRcdFx0Y291bnQgPSAxLFxuXHRcdFx0ZGVmZXIgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGVsZW1lbnRzID0gdGhpcyxcblx0XHRcdGkgPSB0aGlzLmxlbmd0aCxcblx0XHRcdHJlc29sdmUgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCAhKCAtLWNvdW50ICkgKSB7XG5cdFx0XHRcdFx0ZGVmZXIucmVzb2x2ZVdpdGgoIGVsZW1lbnRzLCBbIGVsZW1lbnRzIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGlmICggdHlwZW9mIHR5cGUgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRvYmogPSB0eXBlO1xuXHRcdFx0dHlwZSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHR0bXAgPSBkYXRhUHJpdi5nZXQoIGVsZW1lbnRzWyBpIF0sIHR5cGUgKyBcInF1ZXVlSG9va3NcIiApO1xuXHRcdFx0aWYgKCB0bXAgJiYgdG1wLmVtcHR5ICkge1xuXHRcdFx0XHRjb3VudCsrO1xuXHRcdFx0XHR0bXAuZW1wdHkuYWRkKCByZXNvbHZlICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJlc29sdmUoKTtcblx0XHRyZXR1cm4gZGVmZXIucHJvbWlzZSggb2JqICk7XG5cdH1cbn0gKTtcbnZhciBwbnVtID0gKCAvWystXT8oPzpcXGQqXFwufClcXGQrKD86W2VFXVsrLV0/XFxkK3wpLyApLnNvdXJjZTtcblxudmFyIHJjc3NOdW0gPSBuZXcgUmVnRXhwKCBcIl4oPzooWystXSk9fCkoXCIgKyBwbnVtICsgXCIpKFthLXolXSopJFwiLCBcImlcIiApO1xuXG5cbnZhciBjc3NFeHBhbmQgPSBbIFwiVG9wXCIsIFwiUmlnaHRcIiwgXCJCb3R0b21cIiwgXCJMZWZ0XCIgXTtcblxudmFyIGRvY3VtZW50RWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDtcblxuXG5cblx0dmFyIGlzQXR0YWNoZWQgPSBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuY29udGFpbnMoIGVsZW0ub3duZXJEb2N1bWVudCwgZWxlbSApO1xuXHRcdH0sXG5cdFx0Y29tcG9zZWQgPSB7IGNvbXBvc2VkOiB0cnVlIH07XG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExKywgRWRnZSAxMiAtIDE4KywgaU9TIDEwLjAgLSAxMC4yIG9ubHlcblx0Ly8gQ2hlY2sgYXR0YWNobWVudCBhY3Jvc3Mgc2hhZG93IERPTSBib3VuZGFyaWVzIHdoZW4gcG9zc2libGUgKGdoLTM1MDQpXG5cdC8vIFN1cHBvcnQ6IGlPUyAxMC4wLTEwLjIgb25seVxuXHQvLyBFYXJseSBpT1MgMTAgdmVyc2lvbnMgc3VwcG9ydCBgYXR0YWNoU2hhZG93YCBidXQgbm90IGBnZXRSb290Tm9kZWAsXG5cdC8vIGxlYWRpbmcgdG8gZXJyb3JzLiBXZSBuZWVkIHRvIGNoZWNrIGZvciBgZ2V0Um9vdE5vZGVgLlxuXHRpZiAoIGRvY3VtZW50RWxlbWVudC5nZXRSb290Tm9kZSApIHtcblx0XHRpc0F0dGFjaGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKSB8fFxuXHRcdFx0XHRlbGVtLmdldFJvb3ROb2RlKCBjb21wb3NlZCApID09PSBlbGVtLm93bmVyRG9jdW1lbnQ7XG5cdFx0fTtcblx0fVxudmFyIGlzSGlkZGVuV2l0aGluVHJlZSA9IGZ1bmN0aW9uKCBlbGVtLCBlbCApIHtcblxuXHRcdC8vIGlzSGlkZGVuV2l0aGluVHJlZSBtaWdodCBiZSBjYWxsZWQgZnJvbSBqUXVlcnkjZmlsdGVyIGZ1bmN0aW9uO1xuXHRcdC8vIGluIHRoYXQgY2FzZSwgZWxlbWVudCB3aWxsIGJlIHNlY29uZCBhcmd1bWVudFxuXHRcdGVsZW0gPSBlbCB8fCBlbGVtO1xuXG5cdFx0Ly8gSW5saW5lIHN0eWxlIHRydW1wcyBhbGxcblx0XHRyZXR1cm4gZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIm5vbmVcIiB8fFxuXHRcdFx0ZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmXG5cblx0XHRcdC8vIE90aGVyd2lzZSwgY2hlY2sgY29tcHV0ZWQgc3R5bGVcblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00MyAtIDQ1XG5cdFx0XHQvLyBEaXNjb25uZWN0ZWQgZWxlbWVudHMgY2FuIGhhdmUgY29tcHV0ZWQgZGlzcGxheTogbm9uZSwgc28gZmlyc3QgY29uZmlybSB0aGF0IGVsZW0gaXNcblx0XHRcdC8vIGluIHRoZSBkb2N1bWVudC5cblx0XHRcdGlzQXR0YWNoZWQoIGVsZW0gKSAmJlxuXG5cdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApID09PSBcIm5vbmVcIjtcblx0fTtcblxuXG5cbmZ1bmN0aW9uIGFkanVzdENTUyggZWxlbSwgcHJvcCwgdmFsdWVQYXJ0cywgdHdlZW4gKSB7XG5cdHZhciBhZGp1c3RlZCwgc2NhbGUsXG5cdFx0bWF4SXRlcmF0aW9ucyA9IDIwLFxuXHRcdGN1cnJlbnRWYWx1ZSA9IHR3ZWVuID9cblx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4gdHdlZW4uY3VyKCk7XG5cdFx0XHR9IDpcblx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRyZXR1cm4galF1ZXJ5LmNzcyggZWxlbSwgcHJvcCwgXCJcIiApO1xuXHRcdFx0fSxcblx0XHRpbml0aWFsID0gY3VycmVudFZhbHVlKCksXG5cdFx0dW5pdCA9IHZhbHVlUGFydHMgJiYgdmFsdWVQYXJ0c1sgMyBdIHx8ICggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdID8gXCJcIiA6IFwicHhcIiApLFxuXG5cdFx0Ly8gU3RhcnRpbmcgdmFsdWUgY29tcHV0YXRpb24gaXMgcmVxdWlyZWQgZm9yIHBvdGVudGlhbCB1bml0IG1pc21hdGNoZXNcblx0XHRpbml0aWFsSW5Vbml0ID0gZWxlbS5ub2RlVHlwZSAmJlxuXHRcdFx0KCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gfHwgdW5pdCAhPT0gXCJweFwiICYmICtpbml0aWFsICkgJiZcblx0XHRcdHJjc3NOdW0uZXhlYyggalF1ZXJ5LmNzcyggZWxlbSwgcHJvcCApICk7XG5cblx0aWYgKCBpbml0aWFsSW5Vbml0ICYmIGluaXRpYWxJblVuaXRbIDMgXSAhPT0gdW5pdCApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD01NFxuXHRcdC8vIEhhbHZlIHRoZSBpdGVyYXRpb24gdGFyZ2V0IHZhbHVlIHRvIHByZXZlbnQgaW50ZXJmZXJlbmNlIGZyb20gQ1NTIHVwcGVyIGJvdW5kcyAoZ2gtMjE0NClcblx0XHRpbml0aWFsID0gaW5pdGlhbCAvIDI7XG5cblx0XHQvLyBUcnVzdCB1bml0cyByZXBvcnRlZCBieSBqUXVlcnkuY3NzXG5cdFx0dW5pdCA9IHVuaXQgfHwgaW5pdGlhbEluVW5pdFsgMyBdO1xuXG5cdFx0Ly8gSXRlcmF0aXZlbHkgYXBwcm94aW1hdGUgZnJvbSBhIG5vbnplcm8gc3RhcnRpbmcgcG9pbnRcblx0XHRpbml0aWFsSW5Vbml0ID0gK2luaXRpYWwgfHwgMTtcblxuXHRcdHdoaWxlICggbWF4SXRlcmF0aW9ucy0tICkge1xuXG5cdFx0XHQvLyBFdmFsdWF0ZSBhbmQgdXBkYXRlIG91ciBiZXN0IGd1ZXNzIChkb3VibGluZyBndWVzc2VzIHRoYXQgemVybyBvdXQpLlxuXHRcdFx0Ly8gRmluaXNoIGlmIHRoZSBzY2FsZSBlcXVhbHMgb3IgY3Jvc3NlcyAxIChtYWtpbmcgdGhlIG9sZCpuZXcgcHJvZHVjdCBub24tcG9zaXRpdmUpLlxuXHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBpbml0aWFsSW5Vbml0ICsgdW5pdCApO1xuXHRcdFx0aWYgKCAoIDEgLSBzY2FsZSApICogKCAxIC0gKCBzY2FsZSA9IGN1cnJlbnRWYWx1ZSgpIC8gaW5pdGlhbCB8fCAwLjUgKSApIDw9IDAgKSB7XG5cdFx0XHRcdG1heEl0ZXJhdGlvbnMgPSAwO1xuXHRcdFx0fVxuXHRcdFx0aW5pdGlhbEluVW5pdCA9IGluaXRpYWxJblVuaXQgLyBzY2FsZTtcblxuXHRcdH1cblxuXHRcdGluaXRpYWxJblVuaXQgPSBpbml0aWFsSW5Vbml0ICogMjtcblx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIGluaXRpYWxJblVuaXQgKyB1bml0ICk7XG5cblx0XHQvLyBNYWtlIHN1cmUgd2UgdXBkYXRlIHRoZSB0d2VlbiBwcm9wZXJ0aWVzIGxhdGVyIG9uXG5cdFx0dmFsdWVQYXJ0cyA9IHZhbHVlUGFydHMgfHwgW107XG5cdH1cblxuXHRpZiAoIHZhbHVlUGFydHMgKSB7XG5cdFx0aW5pdGlhbEluVW5pdCA9ICtpbml0aWFsSW5Vbml0IHx8ICtpbml0aWFsIHx8IDA7XG5cblx0XHQvLyBBcHBseSByZWxhdGl2ZSBvZmZzZXQgKCs9Ly09KSBpZiBzcGVjaWZpZWRcblx0XHRhZGp1c3RlZCA9IHZhbHVlUGFydHNbIDEgXSA/XG5cdFx0XHRpbml0aWFsSW5Vbml0ICsgKCB2YWx1ZVBhcnRzWyAxIF0gKyAxICkgKiB2YWx1ZVBhcnRzWyAyIF0gOlxuXHRcdFx0K3ZhbHVlUGFydHNbIDIgXTtcblx0XHRpZiAoIHR3ZWVuICkge1xuXHRcdFx0dHdlZW4udW5pdCA9IHVuaXQ7XG5cdFx0XHR0d2Vlbi5zdGFydCA9IGluaXRpYWxJblVuaXQ7XG5cdFx0XHR0d2Vlbi5lbmQgPSBhZGp1c3RlZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGFkanVzdGVkO1xufVxuXG5cbnZhciBkZWZhdWx0RGlzcGxheU1hcCA9IHt9O1xuXG5mdW5jdGlvbiBnZXREZWZhdWx0RGlzcGxheSggZWxlbSApIHtcblx0dmFyIHRlbXAsXG5cdFx0ZG9jID0gZWxlbS5vd25lckRvY3VtZW50LFxuXHRcdG5vZGVOYW1lID0gZWxlbS5ub2RlTmFtZSxcblx0XHRkaXNwbGF5ID0gZGVmYXVsdERpc3BsYXlNYXBbIG5vZGVOYW1lIF07XG5cblx0aWYgKCBkaXNwbGF5ICkge1xuXHRcdHJldHVybiBkaXNwbGF5O1xuXHR9XG5cblx0dGVtcCA9IGRvYy5ib2R5LmFwcGVuZENoaWxkKCBkb2MuY3JlYXRlRWxlbWVudCggbm9kZU5hbWUgKSApO1xuXHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggdGVtcCwgXCJkaXNwbGF5XCIgKTtcblxuXHR0ZW1wLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIHRlbXAgKTtcblxuXHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdGRpc3BsYXkgPSBcImJsb2NrXCI7XG5cdH1cblx0ZGVmYXVsdERpc3BsYXlNYXBbIG5vZGVOYW1lIF0gPSBkaXNwbGF5O1xuXG5cdHJldHVybiBkaXNwbGF5O1xufVxuXG5mdW5jdGlvbiBzaG93SGlkZSggZWxlbWVudHMsIHNob3cgKSB7XG5cdHZhciBkaXNwbGF5LCBlbGVtLFxuXHRcdHZhbHVlcyA9IFtdLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBlbGVtZW50cy5sZW5ndGg7XG5cblx0Ly8gRGV0ZXJtaW5lIG5ldyBkaXNwbGF5IHZhbHVlIGZvciBlbGVtZW50cyB0aGF0IG5lZWQgdG8gY2hhbmdlXG5cdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0ZWxlbSA9IGVsZW1lbnRzWyBpbmRleCBdO1xuXHRcdGlmICggIWVsZW0uc3R5bGUgKSB7XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRkaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5O1xuXHRcdGlmICggc2hvdyApIHtcblxuXHRcdFx0Ly8gU2luY2Ugd2UgZm9yY2UgdmlzaWJpbGl0eSB1cG9uIGNhc2NhZGUtaGlkZGVuIGVsZW1lbnRzLCBhbiBpbW1lZGlhdGUgKGFuZCBzbG93KVxuXHRcdFx0Ly8gY2hlY2sgaXMgcmVxdWlyZWQgaW4gdGhpcyBmaXJzdCBsb29wIHVubGVzcyB3ZSBoYXZlIGEgbm9uZW1wdHkgZGlzcGxheSB2YWx1ZSAoZWl0aGVyXG5cdFx0XHQvLyBpbmxpbmUgb3IgYWJvdXQtdG8tYmUtcmVzdG9yZWQpXG5cdFx0XHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZGlzcGxheVwiICkgfHwgbnVsbDtcblx0XHRcdFx0aWYgKCAhdmFsdWVzWyBpbmRleCBdICkge1xuXHRcdFx0XHRcdGVsZW0uc3R5bGUuZGlzcGxheSA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICggZWxlbS5zdHlsZS5kaXNwbGF5ID09PSBcIlwiICYmIGlzSGlkZGVuV2l0aGluVHJlZSggZWxlbSApICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBnZXREZWZhdWx0RGlzcGxheSggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoIGRpc3BsYXkgIT09IFwibm9uZVwiICkge1xuXHRcdFx0XHR2YWx1ZXNbIGluZGV4IF0gPSBcIm5vbmVcIjtcblxuXHRcdFx0XHQvLyBSZW1lbWJlciB3aGF0IHdlJ3JlIG92ZXJ3cml0aW5nXG5cdFx0XHRcdGRhdGFQcml2LnNldCggZWxlbSwgXCJkaXNwbGF5XCIsIGRpc3BsYXkgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBTZXQgdGhlIGRpc3BsYXkgb2YgdGhlIGVsZW1lbnRzIGluIGEgc2Vjb25kIGxvb3AgdG8gYXZvaWQgY29uc3RhbnQgcmVmbG93XG5cdGZvciAoIGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0aWYgKCB2YWx1ZXNbIGluZGV4IF0gIT0gbnVsbCApIHtcblx0XHRcdGVsZW1lbnRzWyBpbmRleCBdLnN0eWxlLmRpc3BsYXkgPSB2YWx1ZXNbIGluZGV4IF07XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW1lbnRzO1xufVxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHNob3c6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBzaG93SGlkZSggdGhpcywgdHJ1ZSApO1xuXHR9LFxuXHRoaWRlOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2hvd0hpZGUoIHRoaXMgKTtcblx0fSxcblx0dG9nZ2xlOiBmdW5jdGlvbiggc3RhdGUgKSB7XG5cdFx0aWYgKCB0eXBlb2Ygc3RhdGUgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0cmV0dXJuIHN0YXRlID8gdGhpcy5zaG93KCkgOiB0aGlzLmhpZGUoKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggaXNIaWRkZW5XaXRoaW5UcmVlKCB0aGlzICkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnNob3coKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLmhpZGUoKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcbnZhciByY2hlY2thYmxlVHlwZSA9ICggL14oPzpjaGVja2JveHxyYWRpbykkL2kgKTtcblxudmFyIHJ0YWdOYW1lID0gKCAvPChbYS16XVteXFwvXFwwPlxceDIwXFx0XFxyXFxuXFxmXSopL2kgKTtcblxudmFyIHJzY3JpcHRUeXBlID0gKCAvXiR8Xm1vZHVsZSR8XFwvKD86amF2YXxlY21hKXNjcmlwdC9pICk7XG5cblxuXG4oIGZ1bmN0aW9uKCkge1xuXHR2YXIgZnJhZ21lbnQgPSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXG5cdFx0ZGl2ID0gZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApLFxuXHRcdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seVxuXHQvLyBDaGVjayBzdGF0ZSBsb3N0IGlmIHRoZSBuYW1lIGlzIHNldCAoIzExMjE3KVxuXHQvLyBTdXBwb3J0OiBXaW5kb3dzIFdlYiBBcHBzIChXV0EpXG5cdC8vIGBuYW1lYCBhbmQgYHR5cGVgIG11c3QgdXNlIC5zZXRBdHRyaWJ1dGUgZm9yIFdXQSAoIzE0OTAxKVxuXHRpbnB1dC5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCBcInJhZGlvXCIgKTtcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcImNoZWNrZWRcIiwgXCJjaGVja2VkXCIgKTtcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcIm5hbWVcIiwgXCJ0XCIgKTtcblxuXHRkaXYuYXBwZW5kQ2hpbGQoIGlucHV0ICk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMSBvbmx5XG5cdC8vIE9sZGVyIFdlYktpdCBkb2Vzbid0IGNsb25lIGNoZWNrZWQgc3RhdGUgY29ycmVjdGx5IGluIGZyYWdtZW50c1xuXHRzdXBwb3J0LmNoZWNrQ2xvbmUgPSBkaXYuY2xvbmVOb2RlKCB0cnVlICkuY2xvbmVOb2RlKCB0cnVlICkubGFzdENoaWxkLmNoZWNrZWQ7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIE1ha2Ugc3VyZSB0ZXh0YXJlYSAoYW5kIGNoZWNrYm94KSBkZWZhdWx0VmFsdWUgaXMgcHJvcGVybHkgY2xvbmVkXG5cdGRpdi5pbm5lckhUTUwgPSBcIjx0ZXh0YXJlYT54PC90ZXh0YXJlYT5cIjtcblx0c3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCA9ICEhZGl2LmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5kZWZhdWx0VmFsdWU7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0Ly8gSUUgPD05IHJlcGxhY2VzIDxvcHRpb24+IHRhZ3Mgd2l0aCB0aGVpciBjb250ZW50cyB3aGVuIGluc2VydGVkIG91dHNpZGUgb2Zcblx0Ly8gdGhlIHNlbGVjdCBlbGVtZW50LlxuXHRkaXYuaW5uZXJIVE1MID0gXCI8b3B0aW9uPjwvb3B0aW9uPlwiO1xuXHRzdXBwb3J0Lm9wdGlvbiA9ICEhZGl2Lmxhc3RDaGlsZDtcbn0gKSgpO1xuXG5cbi8vIFdlIGhhdmUgdG8gY2xvc2UgdGhlc2UgdGFncyB0byBzdXBwb3J0IFhIVE1MICgjMTMyMDApXG52YXIgd3JhcE1hcCA9IHtcblxuXHQvLyBYSFRNTCBwYXJzZXJzIGRvIG5vdCBtYWdpY2FsbHkgaW5zZXJ0IGVsZW1lbnRzIGluIHRoZVxuXHQvLyBzYW1lIHdheSB0aGF0IHRhZyBzb3VwIHBhcnNlcnMgZG8uIFNvIHdlIGNhbm5vdCBzaG9ydGVuXG5cdC8vIHRoaXMgYnkgb21pdHRpbmcgPHRib2R5PiBvciBvdGhlciByZXF1aXJlZCBlbGVtZW50cy5cblx0dGhlYWQ6IFsgMSwgXCI8dGFibGU+XCIsIFwiPC90YWJsZT5cIiBdLFxuXHRjb2w6IFsgMiwgXCI8dGFibGU+PGNvbGdyb3VwPlwiLCBcIjwvY29sZ3JvdXA+PC90YWJsZT5cIiBdLFxuXHR0cjogWyAyLCBcIjx0YWJsZT48dGJvZHk+XCIsIFwiPC90Ym9keT48L3RhYmxlPlwiIF0sXG5cdHRkOiBbIDMsIFwiPHRhYmxlPjx0Ym9keT48dHI+XCIsIFwiPC90cj48L3Rib2R5PjwvdGFibGU+XCIgXSxcblxuXHRfZGVmYXVsdDogWyAwLCBcIlwiLCBcIlwiIF1cbn07XG5cbndyYXBNYXAudGJvZHkgPSB3cmFwTWFwLnRmb290ID0gd3JhcE1hcC5jb2xncm91cCA9IHdyYXBNYXAuY2FwdGlvbiA9IHdyYXBNYXAudGhlYWQ7XG53cmFwTWFwLnRoID0gd3JhcE1hcC50ZDtcblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbmlmICggIXN1cHBvcnQub3B0aW9uICkge1xuXHR3cmFwTWFwLm9wdGdyb3VwID0gd3JhcE1hcC5vcHRpb24gPSBbIDEsIFwiPHNlbGVjdCBtdWx0aXBsZT0nbXVsdGlwbGUnPlwiLCBcIjwvc2VsZWN0PlwiIF07XG59XG5cblxuZnVuY3Rpb24gZ2V0QWxsKCBjb250ZXh0LCB0YWcgKSB7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHQvLyBVc2UgdHlwZW9mIHRvIGF2b2lkIHplcm8tYXJndW1lbnQgbWV0aG9kIGludm9jYXRpb24gb24gaG9zdCBvYmplY3RzICgjMTUxNTEpXG5cdHZhciByZXQ7XG5cblx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRyZXQgPSBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCB0YWcgfHwgXCIqXCIgKTtcblxuXHR9IGVsc2UgaWYgKCB0eXBlb2YgY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsICE9PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdHJldCA9IGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCggdGFnIHx8IFwiKlwiICk7XG5cblx0fSBlbHNlIHtcblx0XHRyZXQgPSBbXTtcblx0fVxuXG5cdGlmICggdGFnID09PSB1bmRlZmluZWQgfHwgdGFnICYmIG5vZGVOYW1lKCBjb250ZXh0LCB0YWcgKSApIHtcblx0XHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbIGNvbnRleHQgXSwgcmV0ICk7XG5cdH1cblxuXHRyZXR1cm4gcmV0O1xufVxuXG5cbi8vIE1hcmsgc2NyaXB0cyBhcyBoYXZpbmcgYWxyZWFkeSBiZWVuIGV2YWx1YXRlZFxuZnVuY3Rpb24gc2V0R2xvYmFsRXZhbCggZWxlbXMsIHJlZkVsZW1lbnRzICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bCA9IGVsZW1zLmxlbmd0aDtcblxuXHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0ZGF0YVByaXYuc2V0KFxuXHRcdFx0ZWxlbXNbIGkgXSxcblx0XHRcdFwiZ2xvYmFsRXZhbFwiLFxuXHRcdFx0IXJlZkVsZW1lbnRzIHx8IGRhdGFQcml2LmdldCggcmVmRWxlbWVudHNbIGkgXSwgXCJnbG9iYWxFdmFsXCIgKVxuXHRcdCk7XG5cdH1cbn1cblxuXG52YXIgcmh0bWwgPSAvPHwmIz9cXHcrOy87XG5cbmZ1bmN0aW9uIGJ1aWxkRnJhZ21lbnQoIGVsZW1zLCBjb250ZXh0LCBzY3JpcHRzLCBzZWxlY3Rpb24sIGlnbm9yZWQgKSB7XG5cdHZhciBlbGVtLCB0bXAsIHRhZywgd3JhcCwgYXR0YWNoZWQsIGosXG5cdFx0ZnJhZ21lbnQgPSBjb250ZXh0LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSxcblx0XHRub2RlcyA9IFtdLFxuXHRcdGkgPSAwLFxuXHRcdGwgPSBlbGVtcy5sZW5ndGg7XG5cblx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdGVsZW0gPSBlbGVtc1sgaSBdO1xuXG5cdFx0aWYgKCBlbGVtIHx8IGVsZW0gPT09IDAgKSB7XG5cblx0XHRcdC8vIEFkZCBub2RlcyBkaXJlY3RseVxuXHRcdFx0aWYgKCB0b1R5cGUoIGVsZW0gKSA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIG5vZGVzLCBlbGVtLm5vZGVUeXBlID8gWyBlbGVtIF0gOiBlbGVtICk7XG5cblx0XHRcdC8vIENvbnZlcnQgbm9uLWh0bWwgaW50byBhIHRleHQgbm9kZVxuXHRcdFx0fSBlbHNlIGlmICggIXJodG1sLnRlc3QoIGVsZW0gKSApIHtcblx0XHRcdFx0bm9kZXMucHVzaCggY29udGV4dC5jcmVhdGVUZXh0Tm9kZSggZWxlbSApICk7XG5cblx0XHRcdC8vIENvbnZlcnQgaHRtbCBpbnRvIERPTSBub2Rlc1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dG1wID0gdG1wIHx8IGZyYWdtZW50LmFwcGVuZENoaWxkKCBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKSApO1xuXG5cdFx0XHRcdC8vIERlc2VyaWFsaXplIGEgc3RhbmRhcmQgcmVwcmVzZW50YXRpb25cblx0XHRcdFx0dGFnID0gKCBydGFnTmFtZS5leGVjKCBlbGVtICkgfHwgWyBcIlwiLCBcIlwiIF0gKVsgMSBdLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRcdHdyYXAgPSB3cmFwTWFwWyB0YWcgXSB8fCB3cmFwTWFwLl9kZWZhdWx0O1xuXHRcdFx0XHR0bXAuaW5uZXJIVE1MID0gd3JhcFsgMSBdICsgalF1ZXJ5Lmh0bWxQcmVmaWx0ZXIoIGVsZW0gKSArIHdyYXBbIDIgXTtcblxuXHRcdFx0XHQvLyBEZXNjZW5kIHRocm91Z2ggd3JhcHBlcnMgdG8gdGhlIHJpZ2h0IGNvbnRlbnRcblx0XHRcdFx0aiA9IHdyYXBbIDAgXTtcblx0XHRcdFx0d2hpbGUgKCBqLS0gKSB7XG5cdFx0XHRcdFx0dG1wID0gdG1wLmxhc3RDaGlsZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggbm9kZXMsIHRtcC5jaGlsZE5vZGVzICk7XG5cblx0XHRcdFx0Ly8gUmVtZW1iZXIgdGhlIHRvcC1sZXZlbCBjb250YWluZXJcblx0XHRcdFx0dG1wID0gZnJhZ21lbnQuZmlyc3RDaGlsZDtcblxuXHRcdFx0XHQvLyBFbnN1cmUgdGhlIGNyZWF0ZWQgbm9kZXMgYXJlIG9ycGhhbmVkICgjMTIzOTIpXG5cdFx0XHRcdHRtcC50ZXh0Q29udGVudCA9IFwiXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmVtb3ZlIHdyYXBwZXIgZnJvbSBmcmFnbWVudFxuXHRmcmFnbWVudC50ZXh0Q29udGVudCA9IFwiXCI7XG5cblx0aSA9IDA7XG5cdHdoaWxlICggKCBlbGVtID0gbm9kZXNbIGkrKyBdICkgKSB7XG5cblx0XHQvLyBTa2lwIGVsZW1lbnRzIGFscmVhZHkgaW4gdGhlIGNvbnRleHQgY29sbGVjdGlvbiAodHJhYy00MDg3KVxuXHRcdGlmICggc2VsZWN0aW9uICYmIGpRdWVyeS5pbkFycmF5KCBlbGVtLCBzZWxlY3Rpb24gKSA+IC0xICkge1xuXHRcdFx0aWYgKCBpZ25vcmVkICkge1xuXHRcdFx0XHRpZ25vcmVkLnB1c2goIGVsZW0gKTtcblx0XHRcdH1cblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblxuXHRcdGF0dGFjaGVkID0gaXNBdHRhY2hlZCggZWxlbSApO1xuXG5cdFx0Ly8gQXBwZW5kIHRvIGZyYWdtZW50XG5cdFx0dG1wID0gZ2V0QWxsKCBmcmFnbWVudC5hcHBlbmRDaGlsZCggZWxlbSApLCBcInNjcmlwdFwiICk7XG5cblx0XHQvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5XG5cdFx0aWYgKCBhdHRhY2hlZCApIHtcblx0XHRcdHNldEdsb2JhbEV2YWwoIHRtcCApO1xuXHRcdH1cblxuXHRcdC8vIENhcHR1cmUgZXhlY3V0YWJsZXNcblx0XHRpZiAoIHNjcmlwdHMgKSB7XG5cdFx0XHRqID0gMDtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gdG1wWyBqKysgXSApICkge1xuXHRcdFx0XHRpZiAoIHJzY3JpcHRUeXBlLnRlc3QoIGVsZW0udHlwZSB8fCBcIlwiICkgKSB7XG5cdFx0XHRcdFx0c2NyaXB0cy5wdXNoKCBlbGVtICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZnJhZ21lbnQ7XG59XG5cblxudmFyIHJ0eXBlbmFtZXNwYWNlID0gL14oW14uXSopKD86XFwuKC4rKXwpLztcblxuZnVuY3Rpb24gcmV0dXJuVHJ1ZSgpIHtcblx0cmV0dXJuIHRydWU7XG59XG5cbmZ1bmN0aW9uIHJldHVybkZhbHNlKCkge1xuXHRyZXR1cm4gZmFsc2U7XG59XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSAtIDExK1xuLy8gZm9jdXMoKSBhbmQgYmx1cigpIGFyZSBhc3luY2hyb25vdXMsIGV4Y2VwdCB3aGVuIHRoZXkgYXJlIG5vLW9wLlxuLy8gU28gZXhwZWN0IGZvY3VzIHRvIGJlIHN5bmNocm9ub3VzIHdoZW4gdGhlIGVsZW1lbnQgaXMgYWxyZWFkeSBhY3RpdmUsXG4vLyBhbmQgYmx1ciB0byBiZSBzeW5jaHJvbm91cyB3aGVuIHRoZSBlbGVtZW50IGlzIG5vdCBhbHJlYWR5IGFjdGl2ZS5cbi8vIChmb2N1cyBhbmQgYmx1ciBhcmUgYWx3YXlzIHN5bmNocm9ub3VzIGluIG90aGVyIHN1cHBvcnRlZCBicm93c2Vycyxcbi8vIHRoaXMganVzdCBkZWZpbmVzIHdoZW4gd2UgY2FuIGNvdW50IG9uIGl0KS5cbmZ1bmN0aW9uIGV4cGVjdFN5bmMoIGVsZW0sIHR5cGUgKSB7XG5cdHJldHVybiAoIGVsZW0gPT09IHNhZmVBY3RpdmVFbGVtZW50KCkgKSA9PT0gKCB0eXBlID09PSBcImZvY3VzXCIgKTtcbn1cblxuLy8gU3VwcG9ydDogSUUgPD05IG9ubHlcbi8vIEFjY2Vzc2luZyBkb2N1bWVudC5hY3RpdmVFbGVtZW50IGNhbiB0aHJvdyB1bmV4cGVjdGVkbHlcbi8vIGh0dHBzOi8vYnVncy5qcXVlcnkuY29tL3RpY2tldC8xMzM5M1xuZnVuY3Rpb24gc2FmZUFjdGl2ZUVsZW1lbnQoKSB7XG5cdHRyeSB7XG5cdFx0cmV0dXJuIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XG5cdH0gY2F0Y2ggKCBlcnIgKSB7IH1cbn1cblxuZnVuY3Rpb24gb24oIGVsZW0sIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIG9uZSApIHtcblx0dmFyIG9yaWdGbiwgdHlwZTtcblxuXHQvLyBUeXBlcyBjYW4gYmUgYSBtYXAgb2YgdHlwZXMvaGFuZGxlcnNcblx0aWYgKCB0eXBlb2YgdHlwZXMgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHQvLyAoIHR5cGVzLU9iamVjdCwgc2VsZWN0b3IsIGRhdGEgKVxuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLU9iamVjdCwgZGF0YSApXG5cdFx0XHRkYXRhID0gZGF0YSB8fCBzZWxlY3Rvcjtcblx0XHRcdHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRmb3IgKCB0eXBlIGluIHR5cGVzICkge1xuXHRcdFx0b24oIGVsZW0sIHR5cGUsIHNlbGVjdG9yLCBkYXRhLCB0eXBlc1sgdHlwZSBdLCBvbmUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIGVsZW07XG5cdH1cblxuXHRpZiAoIGRhdGEgPT0gbnVsbCAmJiBmbiA9PSBudWxsICkge1xuXG5cdFx0Ly8gKCB0eXBlcywgZm4gKVxuXHRcdGZuID0gc2VsZWN0b3I7XG5cdFx0ZGF0YSA9IHNlbGVjdG9yID0gdW5kZWZpbmVkO1xuXHR9IGVsc2UgaWYgKCBmbiA9PSBudWxsICkge1xuXHRcdGlmICggdHlwZW9mIHNlbGVjdG9yID09PSBcInN0cmluZ1wiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLCBzZWxlY3RvciwgZm4gKVxuXHRcdFx0Zm4gPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyAoIHR5cGVzLCBkYXRhLCBmbiApXG5cdFx0XHRmbiA9IGRhdGE7XG5cdFx0XHRkYXRhID0gc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0aWYgKCBmbiA9PT0gZmFsc2UgKSB7XG5cdFx0Zm4gPSByZXR1cm5GYWxzZTtcblx0fSBlbHNlIGlmICggIWZuICkge1xuXHRcdHJldHVybiBlbGVtO1xuXHR9XG5cblx0aWYgKCBvbmUgPT09IDEgKSB7XG5cdFx0b3JpZ0ZuID0gZm47XG5cdFx0Zm4gPSBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHRcdC8vIENhbiB1c2UgYW4gZW1wdHkgc2V0LCBzaW5jZSBldmVudCBjb250YWlucyB0aGUgaW5mb1xuXHRcdFx0alF1ZXJ5KCkub2ZmKCBldmVudCApO1xuXHRcdFx0cmV0dXJuIG9yaWdGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fTtcblxuXHRcdC8vIFVzZSBzYW1lIGd1aWQgc28gY2FsbGVyIGNhbiByZW1vdmUgdXNpbmcgb3JpZ0ZuXG5cdFx0Zm4uZ3VpZCA9IG9yaWdGbi5ndWlkIHx8ICggb3JpZ0ZuLmd1aWQgPSBqUXVlcnkuZ3VpZCsrICk7XG5cdH1cblx0cmV0dXJuIGVsZW0uZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0alF1ZXJ5LmV2ZW50LmFkZCggdGhpcywgdHlwZXMsIGZuLCBkYXRhLCBzZWxlY3RvciApO1xuXHR9ICk7XG59XG5cbi8qXG4gKiBIZWxwZXIgZnVuY3Rpb25zIGZvciBtYW5hZ2luZyBldmVudHMgLS0gbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBpbnRlcmZhY2UuXG4gKiBQcm9wcyB0byBEZWFuIEVkd2FyZHMnIGFkZEV2ZW50IGxpYnJhcnkgZm9yIG1hbnkgb2YgdGhlIGlkZWFzLlxuICovXG5qUXVlcnkuZXZlbnQgPSB7XG5cblx0Z2xvYmFsOiB7fSxcblxuXHRhZGQ6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgZGF0YSwgc2VsZWN0b3IgKSB7XG5cblx0XHR2YXIgaGFuZGxlT2JqSW4sIGV2ZW50SGFuZGxlLCB0bXAsXG5cdFx0XHRldmVudHMsIHQsIGhhbmRsZU9iaixcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcblx0XHRcdGVsZW1EYXRhID0gZGF0YVByaXYuZ2V0KCBlbGVtICk7XG5cblx0XHQvLyBPbmx5IGF0dGFjaCBldmVudHMgdG8gb2JqZWN0cyB0aGF0IGFjY2VwdCBkYXRhXG5cdFx0aWYgKCAhYWNjZXB0RGF0YSggZWxlbSApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIENhbGxlciBjYW4gcGFzcyBpbiBhbiBvYmplY3Qgb2YgY3VzdG9tIGRhdGEgaW4gbGlldSBvZiB0aGUgaGFuZGxlclxuXHRcdGlmICggaGFuZGxlci5oYW5kbGVyICkge1xuXHRcdFx0aGFuZGxlT2JqSW4gPSBoYW5kbGVyO1xuXHRcdFx0aGFuZGxlciA9IGhhbmRsZU9iakluLmhhbmRsZXI7XG5cdFx0XHRzZWxlY3RvciA9IGhhbmRsZU9iakluLnNlbGVjdG9yO1xuXHRcdH1cblxuXHRcdC8vIEVuc3VyZSB0aGF0IGludmFsaWQgc2VsZWN0b3JzIHRocm93IGV4Y2VwdGlvbnMgYXQgYXR0YWNoIHRpbWVcblx0XHQvLyBFdmFsdWF0ZSBhZ2FpbnN0IGRvY3VtZW50RWxlbWVudCBpbiBjYXNlIGVsZW0gaXMgYSBub24tZWxlbWVudCBub2RlIChlLmcuLCBkb2N1bWVudClcblx0XHRpZiAoIHNlbGVjdG9yICkge1xuXHRcdFx0alF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBkb2N1bWVudEVsZW1lbnQsIHNlbGVjdG9yICk7XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBzdXJlIHRoYXQgdGhlIGhhbmRsZXIgaGFzIGEgdW5pcXVlIElELCB1c2VkIHRvIGZpbmQvcmVtb3ZlIGl0IGxhdGVyXG5cdFx0aWYgKCAhaGFuZGxlci5ndWlkICkge1xuXHRcdFx0aGFuZGxlci5ndWlkID0galF1ZXJ5Lmd1aWQrKztcblx0XHR9XG5cblx0XHQvLyBJbml0IHRoZSBlbGVtZW50J3MgZXZlbnQgc3RydWN0dXJlIGFuZCBtYWluIGhhbmRsZXIsIGlmIHRoaXMgaXMgdGhlIGZpcnN0XG5cdFx0aWYgKCAhKCBldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgKSApIHtcblx0XHRcdGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyA9IE9iamVjdC5jcmVhdGUoIG51bGwgKTtcblx0XHR9XG5cdFx0aWYgKCAhKCBldmVudEhhbmRsZSA9IGVsZW1EYXRhLmhhbmRsZSApICkge1xuXHRcdFx0ZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgPSBmdW5jdGlvbiggZSApIHtcblxuXHRcdFx0XHQvLyBEaXNjYXJkIHRoZSBzZWNvbmQgZXZlbnQgb2YgYSBqUXVlcnkuZXZlbnQudHJpZ2dlcigpIGFuZFxuXHRcdFx0XHQvLyB3aGVuIGFuIGV2ZW50IGlzIGNhbGxlZCBhZnRlciBhIHBhZ2UgaGFzIHVubG9hZGVkXG5cdFx0XHRcdHJldHVybiB0eXBlb2YgalF1ZXJ5ICE9PSBcInVuZGVmaW5lZFwiICYmIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgIT09IGUudHlwZSA/XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LmRpc3BhdGNoLmFwcGx5KCBlbGVtLCBhcmd1bWVudHMgKSA6IHVuZGVmaW5lZDtcblx0XHRcdH07XG5cdFx0fVxuXG5cdFx0Ly8gSGFuZGxlIG11bHRpcGxlIGV2ZW50cyBzZXBhcmF0ZWQgYnkgYSBzcGFjZVxuXHRcdHR5cGVzID0gKCB0eXBlcyB8fCBcIlwiICkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblx0XHR0ID0gdHlwZXMubGVuZ3RoO1xuXHRcdHdoaWxlICggdC0tICkge1xuXHRcdFx0dG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdO1xuXHRcdFx0dHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07XG5cdFx0XHRuYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCBcIlwiICkuc3BsaXQoIFwiLlwiICkuc29ydCgpO1xuXG5cdFx0XHQvLyBUaGVyZSAqbXVzdCogYmUgYSB0eXBlLCBubyBhdHRhY2hpbmcgbmFtZXNwYWNlLW9ubHkgaGFuZGxlcnNcblx0XHRcdGlmICggIXR5cGUgKSB7XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBldmVudCBjaGFuZ2VzIGl0cyB0eXBlLCB1c2UgdGhlIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMgZm9yIHRoZSBjaGFuZ2VkIHR5cGVcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXG5cdFx0XHQvLyBJZiBzZWxlY3RvciBkZWZpbmVkLCBkZXRlcm1pbmUgc3BlY2lhbCBldmVudCBhcGkgdHlwZSwgb3RoZXJ3aXNlIGdpdmVuIHR5cGVcblx0XHRcdHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTtcblxuXHRcdFx0Ly8gVXBkYXRlIHNwZWNpYWwgYmFzZWQgb24gbmV3bHkgcmVzZXQgdHlwZVxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cblx0XHRcdC8vIGhhbmRsZU9iaiBpcyBwYXNzZWQgdG8gYWxsIGV2ZW50IGhhbmRsZXJzXG5cdFx0XHRoYW5kbGVPYmogPSBqUXVlcnkuZXh0ZW5kKCB7XG5cdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdG9yaWdUeXBlOiBvcmlnVHlwZSxcblx0XHRcdFx0ZGF0YTogZGF0YSxcblx0XHRcdFx0aGFuZGxlcjogaGFuZGxlcixcblx0XHRcdFx0Z3VpZDogaGFuZGxlci5ndWlkLFxuXHRcdFx0XHRzZWxlY3Rvcjogc2VsZWN0b3IsXG5cdFx0XHRcdG5lZWRzQ29udGV4dDogc2VsZWN0b3IgJiYgalF1ZXJ5LmV4cHIubWF0Y2gubmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICksXG5cdFx0XHRcdG5hbWVzcGFjZTogbmFtZXNwYWNlcy5qb2luKCBcIi5cIiApXG5cdFx0XHR9LCBoYW5kbGVPYmpJbiApO1xuXG5cdFx0XHQvLyBJbml0IHRoZSBldmVudCBoYW5kbGVyIHF1ZXVlIGlmIHdlJ3JlIHRoZSBmaXJzdFxuXHRcdFx0aWYgKCAhKCBoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdICkgKSB7XG5cdFx0XHRcdGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gPSBbXTtcblx0XHRcdFx0aGFuZGxlcnMuZGVsZWdhdGVDb3VudCA9IDA7XG5cblx0XHRcdFx0Ly8gT25seSB1c2UgYWRkRXZlbnRMaXN0ZW5lciBpZiB0aGUgc3BlY2lhbCBldmVudHMgaGFuZGxlciByZXR1cm5zIGZhbHNlXG5cdFx0XHRcdGlmICggIXNwZWNpYWwuc2V0dXAgfHxcblx0XHRcdFx0XHRzcGVjaWFsLnNldHVwLmNhbGwoIGVsZW0sIGRhdGEsIG5hbWVzcGFjZXMsIGV2ZW50SGFuZGxlICkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0aWYgKCBlbGVtLmFkZEV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIGV2ZW50SGFuZGxlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGlmICggc3BlY2lhbC5hZGQgKSB7XG5cdFx0XHRcdHNwZWNpYWwuYWRkLmNhbGwoIGVsZW0sIGhhbmRsZU9iaiApO1xuXG5cdFx0XHRcdGlmICggIWhhbmRsZU9iai5oYW5kbGVyLmd1aWQgKSB7XG5cdFx0XHRcdFx0aGFuZGxlT2JqLmhhbmRsZXIuZ3VpZCA9IGhhbmRsZXIuZ3VpZDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBBZGQgdG8gdGhlIGVsZW1lbnQncyBoYW5kbGVyIGxpc3QsIGRlbGVnYXRlcyBpbiBmcm9udFxuXHRcdFx0aWYgKCBzZWxlY3RvciApIHtcblx0XHRcdFx0aGFuZGxlcnMuc3BsaWNlKCBoYW5kbGVycy5kZWxlZ2F0ZUNvdW50KyssIDAsIGhhbmRsZU9iaiApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0aGFuZGxlcnMucHVzaCggaGFuZGxlT2JqICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEtlZXAgdHJhY2sgb2Ygd2hpY2ggZXZlbnRzIGhhdmUgZXZlciBiZWVuIHVzZWQsIGZvciBldmVudCBvcHRpbWl6YXRpb25cblx0XHRcdGpRdWVyeS5ldmVudC5nbG9iYWxbIHR5cGUgXSA9IHRydWU7XG5cdFx0fVxuXG5cdH0sXG5cblx0Ly8gRGV0YWNoIGFuIGV2ZW50IG9yIHNldCBvZiBldmVudHMgZnJvbSBhbiBlbGVtZW50XG5cdHJlbW92ZTogZnVuY3Rpb24oIGVsZW0sIHR5cGVzLCBoYW5kbGVyLCBzZWxlY3RvciwgbWFwcGVkVHlwZXMgKSB7XG5cblx0XHR2YXIgaiwgb3JpZ0NvdW50LCB0bXAsXG5cdFx0XHRldmVudHMsIHQsIGhhbmRsZU9iaixcblx0XHRcdHNwZWNpYWwsIGhhbmRsZXJzLCB0eXBlLCBuYW1lc3BhY2VzLCBvcmlnVHlwZSxcblx0XHRcdGVsZW1EYXRhID0gZGF0YVByaXYuaGFzRGF0YSggZWxlbSApICYmIGRhdGFQcml2LmdldCggZWxlbSApO1xuXG5cdFx0aWYgKCAhZWxlbURhdGEgfHwgISggZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzICkgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gT25jZSBmb3IgZWFjaCB0eXBlLm5hbWVzcGFjZSBpbiB0eXBlczsgdHlwZSBtYXkgYmUgb21pdHRlZFxuXHRcdHR5cGVzID0gKCB0eXBlcyB8fCBcIlwiICkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbIFwiXCIgXTtcblx0XHR0ID0gdHlwZXMubGVuZ3RoO1xuXHRcdHdoaWxlICggdC0tICkge1xuXHRcdFx0dG1wID0gcnR5cGVuYW1lc3BhY2UuZXhlYyggdHlwZXNbIHQgXSApIHx8IFtdO1xuXHRcdFx0dHlwZSA9IG9yaWdUeXBlID0gdG1wWyAxIF07XG5cdFx0XHRuYW1lc3BhY2VzID0gKCB0bXBbIDIgXSB8fCBcIlwiICkuc3BsaXQoIFwiLlwiICkuc29ydCgpO1xuXG5cdFx0XHQvLyBVbmJpbmQgYWxsIGV2ZW50cyAob24gdGhpcyBuYW1lc3BhY2UsIGlmIHByb3ZpZGVkKSBmb3IgdGhlIGVsZW1lbnRcblx0XHRcdGlmICggIXR5cGUgKSB7XG5cdFx0XHRcdGZvciAoIHR5cGUgaW4gZXZlbnRzICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIGVsZW0sIHR5cGUgKyB0eXBlc1sgdCBdLCBoYW5kbGVyLCBzZWxlY3RvciwgdHJ1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0fVxuXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblx0XHRcdHR5cGUgPSAoIHNlbGVjdG9yID8gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgOiBzcGVjaWFsLmJpbmRUeXBlICkgfHwgdHlwZTtcblx0XHRcdGhhbmRsZXJzID0gZXZlbnRzWyB0eXBlIF0gfHwgW107XG5cdFx0XHR0bXAgPSB0bXBbIDIgXSAmJlxuXHRcdFx0XHRuZXcgUmVnRXhwKCBcIihefFxcXFwuKVwiICsgbmFtZXNwYWNlcy5qb2luKCBcIlxcXFwuKD86LipcXFxcLnwpXCIgKSArIFwiKFxcXFwufCQpXCIgKTtcblxuXHRcdFx0Ly8gUmVtb3ZlIG1hdGNoaW5nIGV2ZW50c1xuXHRcdFx0b3JpZ0NvdW50ID0gaiA9IGhhbmRsZXJzLmxlbmd0aDtcblx0XHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0XHRoYW5kbGVPYmogPSBoYW5kbGVyc1sgaiBdO1xuXG5cdFx0XHRcdGlmICggKCBtYXBwZWRUeXBlcyB8fCBvcmlnVHlwZSA9PT0gaGFuZGxlT2JqLm9yaWdUeXBlICkgJiZcblx0XHRcdFx0XHQoICFoYW5kbGVyIHx8IGhhbmRsZXIuZ3VpZCA9PT0gaGFuZGxlT2JqLmd1aWQgKSAmJlxuXHRcdFx0XHRcdCggIXRtcCB8fCB0bXAudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkgJiZcblx0XHRcdFx0XHQoICFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gaGFuZGxlT2JqLnNlbGVjdG9yIHx8XG5cdFx0XHRcdFx0XHRzZWxlY3RvciA9PT0gXCIqKlwiICYmIGhhbmRsZU9iai5zZWxlY3RvciApICkge1xuXHRcdFx0XHRcdGhhbmRsZXJzLnNwbGljZSggaiwgMSApO1xuXG5cdFx0XHRcdFx0aWYgKCBoYW5kbGVPYmouc2VsZWN0b3IgKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVycy5kZWxlZ2F0ZUNvdW50LS07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGlmICggc3BlY2lhbC5yZW1vdmUgKSB7XG5cdFx0XHRcdFx0XHRzcGVjaWFsLnJlbW92ZS5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gUmVtb3ZlIGdlbmVyaWMgZXZlbnQgaGFuZGxlciBpZiB3ZSByZW1vdmVkIHNvbWV0aGluZyBhbmQgbm8gbW9yZSBoYW5kbGVycyBleGlzdFxuXHRcdFx0Ly8gKGF2b2lkcyBwb3RlbnRpYWwgZm9yIGVuZGxlc3MgcmVjdXJzaW9uIGR1cmluZyByZW1vdmFsIG9mIHNwZWNpYWwgZXZlbnQgaGFuZGxlcnMpXG5cdFx0XHRpZiAoIG9yaWdDb3VudCAmJiAhaGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0XHRpZiAoICFzcGVjaWFsLnRlYXJkb3duIHx8XG5cdFx0XHRcdFx0c3BlY2lhbC50ZWFyZG93bi5jYWxsKCBlbGVtLCBuYW1lc3BhY2VzLCBlbGVtRGF0YS5oYW5kbGUgKSA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGVsZW1EYXRhLmhhbmRsZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0ZGVsZXRlIGV2ZW50c1sgdHlwZSBdO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFJlbW92ZSBkYXRhIGFuZCB0aGUgZXhwYW5kbyBpZiBpdCdzIG5vIGxvbmdlciB1c2VkXG5cdFx0aWYgKCBqUXVlcnkuaXNFbXB0eU9iamVjdCggZXZlbnRzICkgKSB7XG5cdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIFwiaGFuZGxlIGV2ZW50c1wiICk7XG5cdFx0fVxuXHR9LFxuXG5cdGRpc3BhdGNoOiBmdW5jdGlvbiggbmF0aXZlRXZlbnQgKSB7XG5cblx0XHR2YXIgaSwgaiwgcmV0LCBtYXRjaGVkLCBoYW5kbGVPYmosIGhhbmRsZXJRdWV1ZSxcblx0XHRcdGFyZ3MgPSBuZXcgQXJyYXkoIGFyZ3VtZW50cy5sZW5ndGggKSxcblxuXHRcdFx0Ly8gTWFrZSBhIHdyaXRhYmxlIGpRdWVyeS5FdmVudCBmcm9tIHRoZSBuYXRpdmUgZXZlbnQgb2JqZWN0XG5cdFx0XHRldmVudCA9IGpRdWVyeS5ldmVudC5maXgoIG5hdGl2ZUV2ZW50ICksXG5cblx0XHRcdGhhbmRsZXJzID0gKFxuXHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRoaXMsIFwiZXZlbnRzXCIgKSB8fCBPYmplY3QuY3JlYXRlKCBudWxsIClcblx0XHRcdClbIGV2ZW50LnR5cGUgXSB8fCBbXSxcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgZXZlbnQudHlwZSBdIHx8IHt9O1xuXG5cdFx0Ly8gVXNlIHRoZSBmaXgtZWQgalF1ZXJ5LkV2ZW50IHJhdGhlciB0aGFuIHRoZSAocmVhZC1vbmx5KSBuYXRpdmUgZXZlbnRcblx0XHRhcmdzWyAwIF0gPSBldmVudDtcblxuXHRcdGZvciAoIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrICkge1xuXHRcdFx0YXJnc1sgaSBdID0gYXJndW1lbnRzWyBpIF07XG5cdFx0fVxuXG5cdFx0ZXZlbnQuZGVsZWdhdGVUYXJnZXQgPSB0aGlzO1xuXG5cdFx0Ly8gQ2FsbCB0aGUgcHJlRGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlLCBhbmQgbGV0IGl0IGJhaWwgaWYgZGVzaXJlZFxuXHRcdGlmICggc3BlY2lhbC5wcmVEaXNwYXRjaCAmJiBzcGVjaWFsLnByZURpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICkgPT09IGZhbHNlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIERldGVybWluZSBoYW5kbGVyc1xuXHRcdGhhbmRsZXJRdWV1ZSA9IGpRdWVyeS5ldmVudC5oYW5kbGVycy5jYWxsKCB0aGlzLCBldmVudCwgaGFuZGxlcnMgKTtcblxuXHRcdC8vIFJ1biBkZWxlZ2F0ZXMgZmlyc3Q7IHRoZXkgbWF5IHdhbnQgdG8gc3RvcCBwcm9wYWdhdGlvbiBiZW5lYXRoIHVzXG5cdFx0aSA9IDA7XG5cdFx0d2hpbGUgKCAoIG1hdGNoZWQgPSBoYW5kbGVyUXVldWVbIGkrKyBdICkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRldmVudC5jdXJyZW50VGFyZ2V0ID0gbWF0Y2hlZC5lbGVtO1xuXG5cdFx0XHRqID0gMDtcblx0XHRcdHdoaWxlICggKCBoYW5kbGVPYmogPSBtYXRjaGVkLmhhbmRsZXJzWyBqKysgXSApICYmXG5cdFx0XHRcdCFldmVudC5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXG5cdFx0XHRcdC8vIElmIHRoZSBldmVudCBpcyBuYW1lc3BhY2VkLCB0aGVuIGVhY2ggaGFuZGxlciBpcyBvbmx5IGludm9rZWQgaWYgaXQgaXNcblx0XHRcdFx0Ly8gc3BlY2lhbGx5IHVuaXZlcnNhbCBvciBpdHMgbmFtZXNwYWNlcyBhcmUgYSBzdXBlcnNldCBvZiB0aGUgZXZlbnQncy5cblx0XHRcdFx0aWYgKCAhZXZlbnQucm5hbWVzcGFjZSB8fCBoYW5kbGVPYmoubmFtZXNwYWNlID09PSBmYWxzZSB8fFxuXHRcdFx0XHRcdGV2ZW50LnJuYW1lc3BhY2UudGVzdCggaGFuZGxlT2JqLm5hbWVzcGFjZSApICkge1xuXG5cdFx0XHRcdFx0ZXZlbnQuaGFuZGxlT2JqID0gaGFuZGxlT2JqO1xuXHRcdFx0XHRcdGV2ZW50LmRhdGEgPSBoYW5kbGVPYmouZGF0YTtcblxuXHRcdFx0XHRcdHJldCA9ICggKCBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgaGFuZGxlT2JqLm9yaWdUeXBlIF0gfHwge30gKS5oYW5kbGUgfHxcblx0XHRcdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyICkuYXBwbHkoIG1hdGNoZWQuZWxlbSwgYXJncyApO1xuXG5cdFx0XHRcdFx0aWYgKCByZXQgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRcdGlmICggKCBldmVudC5yZXN1bHQgPSByZXQgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhbGwgdGhlIHBvc3REaXNwYXRjaCBob29rIGZvciB0aGUgbWFwcGVkIHR5cGVcblx0XHRpZiAoIHNwZWNpYWwucG9zdERpc3BhdGNoICkge1xuXHRcdFx0c3BlY2lhbC5wb3N0RGlzcGF0Y2guY2FsbCggdGhpcywgZXZlbnQgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQucmVzdWx0O1xuXHR9LFxuXG5cdGhhbmRsZXJzOiBmdW5jdGlvbiggZXZlbnQsIGhhbmRsZXJzICkge1xuXHRcdHZhciBpLCBoYW5kbGVPYmosIHNlbCwgbWF0Y2hlZEhhbmRsZXJzLCBtYXRjaGVkU2VsZWN0b3JzLFxuXHRcdFx0aGFuZGxlclF1ZXVlID0gW10sXG5cdFx0XHRkZWxlZ2F0ZUNvdW50ID0gaGFuZGxlcnMuZGVsZWdhdGVDb3VudCxcblx0XHRcdGN1ciA9IGV2ZW50LnRhcmdldDtcblxuXHRcdC8vIEZpbmQgZGVsZWdhdGUgaGFuZGxlcnNcblx0XHRpZiAoIGRlbGVnYXRlQ291bnQgJiZcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05XG5cdFx0XHQvLyBCbGFjay1ob2xlIFNWRyA8dXNlPiBpbnN0YW5jZSB0cmVlcyAodHJhYy0xMzE4MClcblx0XHRcdGN1ci5ub2RlVHlwZSAmJlxuXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NDJcblx0XHRcdC8vIFN1cHByZXNzIHNwZWMtdmlvbGF0aW5nIGNsaWNrcyBpbmRpY2F0aW5nIGEgbm9uLXByaW1hcnkgcG9pbnRlciBidXR0b24gKHRyYWMtMzg2MSlcblx0XHRcdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50LXR5cGUtY2xpY2tcblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExIG9ubHlcblx0XHRcdC8vIC4uLmJ1dCBub3QgYXJyb3cga2V5IFwiY2xpY2tzXCIgb2YgcmFkaW8gaW5wdXRzLCB3aGljaCBjYW4gaGF2ZSBgYnV0dG9uYCAtMSAoZ2gtMjM0Mylcblx0XHRcdCEoIGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIiAmJiBldmVudC5idXR0b24gPj0gMSApICkge1xuXG5cdFx0XHRmb3IgKCA7IGN1ciAhPT0gdGhpczsgY3VyID0gY3VyLnBhcmVudE5vZGUgfHwgdGhpcyApIHtcblxuXHRcdFx0XHQvLyBEb24ndCBjaGVjayBub24tZWxlbWVudHMgKCMxMzIwOClcblx0XHRcdFx0Ly8gRG9uJ3QgcHJvY2VzcyBjbGlja3Mgb24gZGlzYWJsZWQgZWxlbWVudHMgKCM2OTExLCAjODE2NSwgIzExMzgyLCAjMTE3NjQpXG5cdFx0XHRcdGlmICggY3VyLm5vZGVUeXBlID09PSAxICYmICEoIGV2ZW50LnR5cGUgPT09IFwiY2xpY2tcIiAmJiBjdXIuZGlzYWJsZWQgPT09IHRydWUgKSApIHtcblx0XHRcdFx0XHRtYXRjaGVkSGFuZGxlcnMgPSBbXTtcblx0XHRcdFx0XHRtYXRjaGVkU2VsZWN0b3JzID0ge307XG5cdFx0XHRcdFx0Zm9yICggaSA9IDA7IGkgPCBkZWxlZ2F0ZUNvdW50OyBpKysgKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVPYmogPSBoYW5kbGVyc1sgaSBdO1xuXG5cdFx0XHRcdFx0XHQvLyBEb24ndCBjb25mbGljdCB3aXRoIE9iamVjdC5wcm90b3R5cGUgcHJvcGVydGllcyAoIzEzMjAzKVxuXHRcdFx0XHRcdFx0c2VsID0gaGFuZGxlT2JqLnNlbGVjdG9yICsgXCIgXCI7XG5cblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gPSBoYW5kbGVPYmoubmVlZHNDb250ZXh0ID9cblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkoIHNlbCwgdGhpcyApLmluZGV4KCBjdXIgKSA+IC0xIDpcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuZmluZCggc2VsLCB0aGlzLCBudWxsLCBbIGN1ciBdICkubGVuZ3RoO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0aWYgKCBtYXRjaGVkU2VsZWN0b3JzWyBzZWwgXSApIHtcblx0XHRcdFx0XHRcdFx0bWF0Y2hlZEhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIG1hdGNoZWRIYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRcdFx0XHRoYW5kbGVyUXVldWUucHVzaCggeyBlbGVtOiBjdXIsIGhhbmRsZXJzOiBtYXRjaGVkSGFuZGxlcnMgfSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEFkZCB0aGUgcmVtYWluaW5nIChkaXJlY3RseS1ib3VuZCkgaGFuZGxlcnNcblx0XHRjdXIgPSB0aGlzO1xuXHRcdGlmICggZGVsZWdhdGVDb3VudCA8IGhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdGhhbmRsZXJRdWV1ZS5wdXNoKCB7IGVsZW06IGN1ciwgaGFuZGxlcnM6IGhhbmRsZXJzLnNsaWNlKCBkZWxlZ2F0ZUNvdW50ICkgfSApO1xuXHRcdH1cblxuXHRcdHJldHVybiBoYW5kbGVyUXVldWU7XG5cdH0sXG5cblx0YWRkUHJvcDogZnVuY3Rpb24oIG5hbWUsIGhvb2sgKSB7XG5cdFx0T2JqZWN0LmRlZmluZVByb3BlcnR5KCBqUXVlcnkuRXZlbnQucHJvdG90eXBlLCBuYW1lLCB7XG5cdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXG5cdFx0XHRnZXQ6IGlzRnVuY3Rpb24oIGhvb2sgKSA/XG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGhvb2soIHRoaXMub3JpZ2luYWxFdmVudCApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSA6XG5cdFx0XHRcdGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGlmICggdGhpcy5vcmlnaW5hbEV2ZW50ICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRoaXMub3JpZ2luYWxFdmVudFsgbmFtZSBdO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblxuXHRcdFx0c2V0OiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggdGhpcywgbmFtZSwge1xuXHRcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG5cdFx0XHRcdFx0Y29uZmlndXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHdyaXRhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdHZhbHVlOiB2YWx1ZVxuXHRcdFx0XHR9ICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGZpeDogZnVuY3Rpb24oIG9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0cmV0dXJuIG9yaWdpbmFsRXZlbnRbIGpRdWVyeS5leHBhbmRvIF0gP1xuXHRcdFx0b3JpZ2luYWxFdmVudCA6XG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCBvcmlnaW5hbEV2ZW50ICk7XG5cdH0sXG5cblx0c3BlY2lhbDoge1xuXHRcdGxvYWQ6IHtcblxuXHRcdFx0Ly8gUHJldmVudCB0cmlnZ2VyZWQgaW1hZ2UubG9hZCBldmVudHMgZnJvbSBidWJibGluZyB0byB3aW5kb3cubG9hZFxuXHRcdFx0bm9CdWJibGU6IHRydWVcblx0XHR9LFxuXHRcdGNsaWNrOiB7XG5cblx0XHRcdC8vIFV0aWxpemUgbmF0aXZlIGV2ZW50IHRvIGVuc3VyZSBjb3JyZWN0IHN0YXRlIGZvciBjaGVja2FibGUgaW5wdXRzXG5cdFx0XHRzZXR1cDogZnVuY3Rpb24oIGRhdGEgKSB7XG5cblx0XHRcdFx0Ly8gRm9yIG11dHVhbCBjb21wcmVzc2liaWxpdHkgd2l0aCBfZGVmYXVsdCwgcmVwbGFjZSBgdGhpc2AgYWNjZXNzIHdpdGggYSBsb2NhbCB2YXIuXG5cdFx0XHRcdC8vIGB8fCBkYXRhYCBpcyBkZWFkIGNvZGUgbWVhbnQgb25seSB0byBwcmVzZXJ2ZSB0aGUgdmFyaWFibGUgdGhyb3VnaCBtaW5pZmljYXRpb24uXG5cdFx0XHRcdHZhciBlbCA9IHRoaXMgfHwgZGF0YTtcblxuXHRcdFx0XHQvLyBDbGFpbSB0aGUgZmlyc3QgaGFuZGxlclxuXHRcdFx0XHRpZiAoIHJjaGVja2FibGVUeXBlLnRlc3QoIGVsLnR5cGUgKSAmJlxuXHRcdFx0XHRcdGVsLmNsaWNrICYmIG5vZGVOYW1lKCBlbCwgXCJpbnB1dFwiICkgKSB7XG5cblx0XHRcdFx0XHQvLyBkYXRhUHJpdi5zZXQoIGVsLCBcImNsaWNrXCIsIC4uLiApXG5cdFx0XHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIGVsLCBcImNsaWNrXCIsIHJldHVyblRydWUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJldHVybiBmYWxzZSB0byBhbGxvdyBub3JtYWwgcHJvY2Vzc2luZyBpbiB0aGUgY2FsbGVyXG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0sXG5cdFx0XHR0cmlnZ2VyOiBmdW5jdGlvbiggZGF0YSApIHtcblxuXHRcdFx0XHQvLyBGb3IgbXV0dWFsIGNvbXByZXNzaWJpbGl0eSB3aXRoIF9kZWZhdWx0LCByZXBsYWNlIGB0aGlzYCBhY2Nlc3Mgd2l0aCBhIGxvY2FsIHZhci5cblx0XHRcdFx0Ly8gYHx8IGRhdGFgIGlzIGRlYWQgY29kZSBtZWFudCBvbmx5IHRvIHByZXNlcnZlIHRoZSB2YXJpYWJsZSB0aHJvdWdoIG1pbmlmaWNhdGlvbi5cblx0XHRcdFx0dmFyIGVsID0gdGhpcyB8fCBkYXRhO1xuXG5cdFx0XHRcdC8vIEZvcmNlIHNldHVwIGJlZm9yZSB0cmlnZ2VyaW5nIGEgY2xpY2tcblx0XHRcdFx0aWYgKCByY2hlY2thYmxlVHlwZS50ZXN0KCBlbC50eXBlICkgJiZcblx0XHRcdFx0XHRlbC5jbGljayAmJiBub2RlTmFtZSggZWwsIFwiaW5wdXRcIiApICkge1xuXG5cdFx0XHRcdFx0bGV2ZXJhZ2VOYXRpdmUoIGVsLCBcImNsaWNrXCIgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJldHVybiBub24tZmFsc2UgdG8gYWxsb3cgbm9ybWFsIGV2ZW50LXBhdGggcHJvcGFnYXRpb25cblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBGb3IgY3Jvc3MtYnJvd3NlciBjb25zaXN0ZW5jeSwgc3VwcHJlc3MgbmF0aXZlIC5jbGljaygpIG9uIGxpbmtzXG5cdFx0XHQvLyBBbHNvIHByZXZlbnQgaXQgaWYgd2UncmUgY3VycmVudGx5IGluc2lkZSBhIGxldmVyYWdlZCBuYXRpdmUtZXZlbnQgc3RhY2tcblx0XHRcdF9kZWZhdWx0OiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBldmVudC50YXJnZXQ7XG5cdFx0XHRcdHJldHVybiByY2hlY2thYmxlVHlwZS50ZXN0KCB0YXJnZXQudHlwZSApICYmXG5cdFx0XHRcdFx0dGFyZ2V0LmNsaWNrICYmIG5vZGVOYW1lKCB0YXJnZXQsIFwiaW5wdXRcIiApICYmXG5cdFx0XHRcdFx0ZGF0YVByaXYuZ2V0KCB0YXJnZXQsIFwiY2xpY2tcIiApIHx8XG5cdFx0XHRcdFx0bm9kZU5hbWUoIHRhcmdldCwgXCJhXCIgKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0YmVmb3JldW5sb2FkOiB7XG5cdFx0XHRwb3N0RGlzcGF0Y2g6IGZ1bmN0aW9uKCBldmVudCApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDIwK1xuXHRcdFx0XHQvLyBGaXJlZm94IGRvZXNuJ3QgYWxlcnQgaWYgdGhlIHJldHVyblZhbHVlIGZpZWxkIGlzIG5vdCBzZXQuXG5cdFx0XHRcdGlmICggZXZlbnQucmVzdWx0ICE9PSB1bmRlZmluZWQgJiYgZXZlbnQub3JpZ2luYWxFdmVudCApIHtcblx0XHRcdFx0XHRldmVudC5vcmlnaW5hbEV2ZW50LnJldHVyblZhbHVlID0gZXZlbnQucmVzdWx0O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBFbnN1cmUgdGhlIHByZXNlbmNlIG9mIGFuIGV2ZW50IGxpc3RlbmVyIHRoYXQgaGFuZGxlcyBtYW51YWxseS10cmlnZ2VyZWRcbi8vIHN5bnRoZXRpYyBldmVudHMgYnkgaW50ZXJydXB0aW5nIHByb2dyZXNzIHVudGlsIHJlaW52b2tlZCBpbiByZXNwb25zZSB0b1xuLy8gKm5hdGl2ZSogZXZlbnRzIHRoYXQgaXQgZmlyZXMgZGlyZWN0bHksIGVuc3VyaW5nIHRoYXQgc3RhdGUgY2hhbmdlcyBoYXZlXG4vLyBhbHJlYWR5IG9jY3VycmVkIGJlZm9yZSBvdGhlciBsaXN0ZW5lcnMgYXJlIGludm9rZWQuXG5mdW5jdGlvbiBsZXZlcmFnZU5hdGl2ZSggZWwsIHR5cGUsIGV4cGVjdFN5bmMgKSB7XG5cblx0Ly8gTWlzc2luZyBleHBlY3RTeW5jIGluZGljYXRlcyBhIHRyaWdnZXIgY2FsbCwgd2hpY2ggbXVzdCBmb3JjZSBzZXR1cCB0aHJvdWdoIGpRdWVyeS5ldmVudC5hZGRcblx0aWYgKCAhZXhwZWN0U3luYyApIHtcblx0XHRpZiAoIGRhdGFQcml2LmdldCggZWwsIHR5cGUgKSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LmFkZCggZWwsIHR5cGUsIHJldHVyblRydWUgKTtcblx0XHR9XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gUmVnaXN0ZXIgdGhlIGNvbnRyb2xsZXIgYXMgYSBzcGVjaWFsIHVuaXZlcnNhbCBoYW5kbGVyIGZvciBhbGwgZXZlbnQgbmFtZXNwYWNlc1xuXHRkYXRhUHJpdi5zZXQoIGVsLCB0eXBlLCBmYWxzZSApO1xuXHRqUXVlcnkuZXZlbnQuYWRkKCBlbCwgdHlwZSwge1xuXHRcdG5hbWVzcGFjZTogZmFsc2UsXG5cdFx0aGFuZGxlcjogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0dmFyIG5vdEFzeW5jLCByZXN1bHQsXG5cdFx0XHRcdHNhdmVkID0gZGF0YVByaXYuZ2V0KCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdGlmICggKCBldmVudC5pc1RyaWdnZXIgJiAxICkgJiYgdGhpc1sgdHlwZSBdICkge1xuXG5cdFx0XHRcdC8vIEludGVycnVwdCBwcm9jZXNzaW5nIG9mIHRoZSBvdXRlciBzeW50aGV0aWMgLnRyaWdnZXIoKWVkIGV2ZW50XG5cdFx0XHRcdC8vIFNhdmVkIGRhdGEgc2hvdWxkIGJlIGZhbHNlIGluIHN1Y2ggY2FzZXMsIGJ1dCBtaWdodCBiZSBhIGxlZnRvdmVyIGNhcHR1cmUgb2JqZWN0XG5cdFx0XHRcdC8vIGZyb20gYW4gYXN5bmMgbmF0aXZlIGhhbmRsZXIgKGdoLTQzNTApXG5cdFx0XHRcdGlmICggIXNhdmVkLmxlbmd0aCApIHtcblxuXHRcdFx0XHRcdC8vIFN0b3JlIGFyZ3VtZW50cyBmb3IgdXNlIHdoZW4gaGFuZGxpbmcgdGhlIGlubmVyIG5hdGl2ZSBldmVudFxuXHRcdFx0XHRcdC8vIFRoZXJlIHdpbGwgYWx3YXlzIGJlIGF0IGxlYXN0IG9uZSBhcmd1bWVudCAoYW4gZXZlbnQgb2JqZWN0KSwgc28gdGhpcyBhcnJheVxuXHRcdFx0XHRcdC8vIHdpbGwgbm90IGJlIGNvbmZ1c2VkIHdpdGggYSBsZWZ0b3ZlciBjYXB0dXJlIG9iamVjdC5cblx0XHRcdFx0XHRzYXZlZCA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgdHlwZSwgc2F2ZWQgKTtcblxuXHRcdFx0XHRcdC8vIFRyaWdnZXIgdGhlIG5hdGl2ZSBldmVudCBhbmQgY2FwdHVyZSBpdHMgcmVzdWx0XG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTErXG5cdFx0XHRcdFx0Ly8gZm9jdXMoKSBhbmQgYmx1cigpIGFyZSBhc3luY2hyb25vdXNcblx0XHRcdFx0XHRub3RBc3luYyA9IGV4cGVjdFN5bmMoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0XHR0aGlzWyB0eXBlIF0oKTtcblx0XHRcdFx0XHRyZXN1bHQgPSBkYXRhUHJpdi5nZXQoIHRoaXMsIHR5cGUgKTtcblx0XHRcdFx0XHRpZiAoIHNhdmVkICE9PSByZXN1bHQgfHwgbm90QXN5bmMgKSB7XG5cdFx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIHR5cGUsIGZhbHNlICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJlc3VsdCA9IHt9O1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIHNhdmVkICE9PSByZXN1bHQgKSB7XG5cblx0XHRcdFx0XHRcdC8vIENhbmNlbCB0aGUgb3V0ZXIgc3ludGhldGljIGV2ZW50XG5cdFx0XHRcdFx0XHRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA4Nitcblx0XHRcdFx0XHRcdC8vIEluIENocm9tZSwgaWYgYW4gZWxlbWVudCBoYXZpbmcgYSBmb2N1c291dCBoYW5kbGVyIGlzIGJsdXJyZWQgYnlcblx0XHRcdFx0XHRcdC8vIGNsaWNraW5nIG91dHNpZGUgb2YgaXQsIGl0IGludm9rZXMgdGhlIGhhbmRsZXIgc3luY2hyb25vdXNseS4gSWZcblx0XHRcdFx0XHRcdC8vIHRoYXQgaGFuZGxlciBjYWxscyBgLnJlbW92ZSgpYCBvbiB0aGUgZWxlbWVudCwgdGhlIGRhdGEgaXMgY2xlYXJlZCxcblx0XHRcdFx0XHRcdC8vIGxlYXZpbmcgYHJlc3VsdGAgdW5kZWZpbmVkLiBXZSBuZWVkIHRvIGd1YXJkIGFnYWluc3QgdGhpcy5cblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHQgJiYgcmVzdWx0LnZhbHVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBJZiB0aGlzIGlzIGFuIGlubmVyIHN5bnRoZXRpYyBldmVudCBmb3IgYW4gZXZlbnQgd2l0aCBhIGJ1YmJsaW5nIHN1cnJvZ2F0ZVxuXHRcdFx0XHQvLyAoZm9jdXMgb3IgYmx1ciksIGFzc3VtZSB0aGF0IHRoZSBzdXJyb2dhdGUgYWxyZWFkeSBwcm9wYWdhdGVkIGZyb20gdHJpZ2dlcmluZyB0aGVcblx0XHRcdFx0Ly8gbmF0aXZlIGV2ZW50IGFuZCBwcmV2ZW50IHRoYXQgZnJvbSBoYXBwZW5pbmcgYWdhaW4gaGVyZS5cblx0XHRcdFx0Ly8gVGhpcyB0ZWNobmljYWxseSBnZXRzIHRoZSBvcmRlcmluZyB3cm9uZyB3LnIudC4gdG8gYC50cmlnZ2VyKClgIChpbiB3aGljaCB0aGVcblx0XHRcdFx0Ly8gYnViYmxpbmcgc3Vycm9nYXRlIHByb3BhZ2F0ZXMgKmFmdGVyKiB0aGUgbm9uLWJ1YmJsaW5nIGJhc2UpLCBidXQgdGhhdCBzZWVtc1xuXHRcdFx0XHQvLyBsZXNzIGJhZCB0aGFuIGR1cGxpY2F0aW9uLlxuXHRcdFx0XHR9IGVsc2UgaWYgKCAoIGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge30gKS5kZWxlZ2F0ZVR5cGUgKSB7XG5cdFx0XHRcdFx0ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgdGhpcyBpcyBhIG5hdGl2ZSBldmVudCB0cmlnZ2VyZWQgYWJvdmUsIGV2ZXJ5dGhpbmcgaXMgbm93IGluIG9yZGVyXG5cdFx0XHQvLyBGaXJlIGFuIGlubmVyIHN5bnRoZXRpYyBldmVudCB3aXRoIHRoZSBvcmlnaW5hbCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIHNhdmVkLmxlbmd0aCApIHtcblxuXHRcdFx0XHQvLyAuLi5hbmQgY2FwdHVyZSB0aGUgcmVzdWx0XG5cdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgdHlwZSwge1xuXHRcdFx0XHRcdHZhbHVlOiBqUXVlcnkuZXZlbnQudHJpZ2dlcihcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTErXG5cdFx0XHRcdFx0XHQvLyBFeHRlbmQgd2l0aCB0aGUgcHJvdG90eXBlIHRvIHJlc2V0IHRoZSBhYm92ZSBzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKVxuXHRcdFx0XHRcdFx0alF1ZXJ5LmV4dGVuZCggc2F2ZWRbIDAgXSwgalF1ZXJ5LkV2ZW50LnByb3RvdHlwZSApLFxuXHRcdFx0XHRcdFx0c2F2ZWQuc2xpY2UoIDEgKSxcblx0XHRcdFx0XHRcdHRoaXNcblx0XHRcdFx0XHQpXG5cdFx0XHRcdH0gKTtcblxuXHRcdFx0XHQvLyBBYm9ydCBoYW5kbGluZyBvZiB0aGUgbmF0aXZlIGV2ZW50XG5cdFx0XHRcdGV2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdFx0fVxuXHRcdH1cblx0fSApO1xufVxuXG5qUXVlcnkucmVtb3ZlRXZlbnQgPSBmdW5jdGlvbiggZWxlbSwgdHlwZSwgaGFuZGxlICkge1xuXG5cdC8vIFRoaXMgXCJpZlwiIGlzIG5lZWRlZCBmb3IgcGxhaW4gb2JqZWN0c1xuXHRpZiAoIGVsZW0ucmVtb3ZlRXZlbnRMaXN0ZW5lciApIHtcblx0XHRlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIoIHR5cGUsIGhhbmRsZSApO1xuXHR9XG59O1xuXG5qUXVlcnkuRXZlbnQgPSBmdW5jdGlvbiggc3JjLCBwcm9wcyApIHtcblxuXHQvLyBBbGxvdyBpbnN0YW50aWF0aW9uIHdpdGhvdXQgdGhlICduZXcnIGtleXdvcmRcblx0aWYgKCAhKCB0aGlzIGluc3RhbmNlb2YgalF1ZXJ5LkV2ZW50ICkgKSB7XG5cdFx0cmV0dXJuIG5ldyBqUXVlcnkuRXZlbnQoIHNyYywgcHJvcHMgKTtcblx0fVxuXG5cdC8vIEV2ZW50IG9iamVjdFxuXHRpZiAoIHNyYyAmJiBzcmMudHlwZSApIHtcblx0XHR0aGlzLm9yaWdpbmFsRXZlbnQgPSBzcmM7XG5cdFx0dGhpcy50eXBlID0gc3JjLnR5cGU7XG5cblx0XHQvLyBFdmVudHMgYnViYmxpbmcgdXAgdGhlIGRvY3VtZW50IG1heSBoYXZlIGJlZW4gbWFya2VkIGFzIHByZXZlbnRlZFxuXHRcdC8vIGJ5IGEgaGFuZGxlciBsb3dlciBkb3duIHRoZSB0cmVlOyByZWZsZWN0IHRoZSBjb3JyZWN0IHZhbHVlLlxuXHRcdHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gc3JjLmRlZmF1bHRQcmV2ZW50ZWQgfHxcblx0XHRcdFx0c3JjLmRlZmF1bHRQcmV2ZW50ZWQgPT09IHVuZGVmaW5lZCAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD0yLjMgb25seVxuXHRcdFx0XHRzcmMucmV0dXJuVmFsdWUgPT09IGZhbHNlID9cblx0XHRcdHJldHVyblRydWUgOlxuXHRcdFx0cmV0dXJuRmFsc2U7XG5cblx0XHQvLyBDcmVhdGUgdGFyZ2V0IHByb3BlcnRpZXNcblx0XHQvLyBTdXBwb3J0OiBTYWZhcmkgPD02IC0gNyBvbmx5XG5cdFx0Ly8gVGFyZ2V0IHNob3VsZCBub3QgYmUgYSB0ZXh0IG5vZGUgKCM1MDQsICMxMzE0Mylcblx0XHR0aGlzLnRhcmdldCA9ICggc3JjLnRhcmdldCAmJiBzcmMudGFyZ2V0Lm5vZGVUeXBlID09PSAzICkgP1xuXHRcdFx0c3JjLnRhcmdldC5wYXJlbnROb2RlIDpcblx0XHRcdHNyYy50YXJnZXQ7XG5cblx0XHR0aGlzLmN1cnJlbnRUYXJnZXQgPSBzcmMuY3VycmVudFRhcmdldDtcblx0XHR0aGlzLnJlbGF0ZWRUYXJnZXQgPSBzcmMucmVsYXRlZFRhcmdldDtcblxuXHQvLyBFdmVudCB0eXBlXG5cdH0gZWxzZSB7XG5cdFx0dGhpcy50eXBlID0gc3JjO1xuXHR9XG5cblx0Ly8gUHV0IGV4cGxpY2l0bHkgcHJvdmlkZWQgcHJvcGVydGllcyBvbnRvIHRoZSBldmVudCBvYmplY3Rcblx0aWYgKCBwcm9wcyApIHtcblx0XHRqUXVlcnkuZXh0ZW5kKCB0aGlzLCBwcm9wcyApO1xuXHR9XG5cblx0Ly8gQ3JlYXRlIGEgdGltZXN0YW1wIGlmIGluY29taW5nIGV2ZW50IGRvZXNuJ3QgaGF2ZSBvbmVcblx0dGhpcy50aW1lU3RhbXAgPSBzcmMgJiYgc3JjLnRpbWVTdGFtcCB8fCBEYXRlLm5vdygpO1xuXG5cdC8vIE1hcmsgaXQgYXMgZml4ZWRcblx0dGhpc1sgalF1ZXJ5LmV4cGFuZG8gXSA9IHRydWU7XG59O1xuXG4vLyBqUXVlcnkuRXZlbnQgaXMgYmFzZWQgb24gRE9NMyBFdmVudHMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBFQ01BU2NyaXB0IExhbmd1YWdlIEJpbmRpbmdcbi8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi8yMDAzL1dELURPTS1MZXZlbC0zLUV2ZW50cy0yMDAzMDMzMS9lY21hLXNjcmlwdC1iaW5kaW5nLmh0bWxcbmpRdWVyeS5FdmVudC5wcm90b3R5cGUgPSB7XG5cdGNvbnN0cnVjdG9yOiBqUXVlcnkuRXZlbnQsXG5cdGlzRGVmYXVsdFByZXZlbnRlZDogcmV0dXJuRmFsc2UsXG5cdGlzUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSxcblx0aXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQ6IHJldHVybkZhbHNlLFxuXHRpc1NpbXVsYXRlZDogZmFsc2UsXG5cblx0cHJldmVudERlZmF1bHQ6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdH1cblx0fSxcblx0c3RvcFByb3BhZ2F0aW9uOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQgPSByZXR1cm5UcnVlO1xuXG5cdFx0aWYgKCBlICYmICF0aGlzLmlzU2ltdWxhdGVkICkge1xuXHRcdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHR9XG5cdH0sXG5cdHN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0fVxuXG5cdFx0dGhpcy5zdG9wUHJvcGFnYXRpb24oKTtcblx0fVxufTtcblxuLy8gSW5jbHVkZXMgYWxsIGNvbW1vbiBldmVudCBwcm9wcyBpbmNsdWRpbmcgS2V5RXZlbnQgYW5kIE1vdXNlRXZlbnQgc3BlY2lmaWMgcHJvcHNcbmpRdWVyeS5lYWNoKCB7XG5cdGFsdEtleTogdHJ1ZSxcblx0YnViYmxlczogdHJ1ZSxcblx0Y2FuY2VsYWJsZTogdHJ1ZSxcblx0Y2hhbmdlZFRvdWNoZXM6IHRydWUsXG5cdGN0cmxLZXk6IHRydWUsXG5cdGRldGFpbDogdHJ1ZSxcblx0ZXZlbnRQaGFzZTogdHJ1ZSxcblx0bWV0YUtleTogdHJ1ZSxcblx0cGFnZVg6IHRydWUsXG5cdHBhZ2VZOiB0cnVlLFxuXHRzaGlmdEtleTogdHJ1ZSxcblx0dmlldzogdHJ1ZSxcblx0XCJjaGFyXCI6IHRydWUsXG5cdGNvZGU6IHRydWUsXG5cdGNoYXJDb2RlOiB0cnVlLFxuXHRrZXk6IHRydWUsXG5cdGtleUNvZGU6IHRydWUsXG5cdGJ1dHRvbjogdHJ1ZSxcblx0YnV0dG9uczogdHJ1ZSxcblx0Y2xpZW50WDogdHJ1ZSxcblx0Y2xpZW50WTogdHJ1ZSxcblx0b2Zmc2V0WDogdHJ1ZSxcblx0b2Zmc2V0WTogdHJ1ZSxcblx0cG9pbnRlcklkOiB0cnVlLFxuXHRwb2ludGVyVHlwZTogdHJ1ZSxcblx0c2NyZWVuWDogdHJ1ZSxcblx0c2NyZWVuWTogdHJ1ZSxcblx0dGFyZ2V0VG91Y2hlczogdHJ1ZSxcblx0dG9FbGVtZW50OiB0cnVlLFxuXHR0b3VjaGVzOiB0cnVlLFxuXHR3aGljaDogdHJ1ZVxufSwgalF1ZXJ5LmV2ZW50LmFkZFByb3AgKTtcblxualF1ZXJ5LmVhY2goIHsgZm9jdXM6IFwiZm9jdXNpblwiLCBibHVyOiBcImZvY3Vzb3V0XCIgfSwgZnVuY3Rpb24oIHR5cGUsIGRlbGVnYXRlVHlwZSApIHtcblx0alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSA9IHtcblxuXHRcdC8vIFV0aWxpemUgbmF0aXZlIGV2ZW50IGlmIHBvc3NpYmxlIHNvIGJsdXIvZm9jdXMgc2VxdWVuY2UgaXMgY29ycmVjdFxuXHRcdHNldHVwOiBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gQ2xhaW0gdGhlIGZpcnN0IGhhbmRsZXJcblx0XHRcdC8vIGRhdGFQcml2LnNldCggdGhpcywgXCJmb2N1c1wiLCAuLi4gKVxuXHRcdFx0Ly8gZGF0YVByaXYuc2V0KCB0aGlzLCBcImJsdXJcIiwgLi4uIClcblx0XHRcdGxldmVyYWdlTmF0aXZlKCB0aGlzLCB0eXBlLCBleHBlY3RTeW5jICk7XG5cblx0XHRcdC8vIFJldHVybiBmYWxzZSB0byBhbGxvdyBub3JtYWwgcHJvY2Vzc2luZyBpbiB0aGUgY2FsbGVyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblx0XHR0cmlnZ2VyOiBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRm9yY2Ugc2V0dXAgYmVmb3JlIHRyaWdnZXJcblx0XHRcdGxldmVyYWdlTmF0aXZlKCB0aGlzLCB0eXBlICk7XG5cblx0XHRcdC8vIFJldHVybiBub24tZmFsc2UgdG8gYWxsb3cgbm9ybWFsIGV2ZW50LXBhdGggcHJvcGFnYXRpb25cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0sXG5cblx0XHQvLyBTdXBwcmVzcyBuYXRpdmUgZm9jdXMgb3IgYmx1ciBhcyBpdCdzIGFscmVhZHkgYmVpbmcgZmlyZWRcblx0XHQvLyBpbiBsZXZlcmFnZU5hdGl2ZS5cblx0XHRfZGVmYXVsdDogZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0ZGVsZWdhdGVUeXBlOiBkZWxlZ2F0ZVR5cGVcblx0fTtcbn0gKTtcblxuLy8gQ3JlYXRlIG1vdXNlZW50ZXIvbGVhdmUgZXZlbnRzIHVzaW5nIG1vdXNlb3Zlci9vdXQgYW5kIGV2ZW50LXRpbWUgY2hlY2tzXG4vLyBzbyB0aGF0IGV2ZW50IGRlbGVnYXRpb24gd29ya3MgaW4galF1ZXJ5LlxuLy8gRG8gdGhlIHNhbWUgZm9yIHBvaW50ZXJlbnRlci9wb2ludGVybGVhdmUgYW5kIHBvaW50ZXJvdmVyL3BvaW50ZXJvdXRcbi8vXG4vLyBTdXBwb3J0OiBTYWZhcmkgNyBvbmx5XG4vLyBTYWZhcmkgc2VuZHMgbW91c2VlbnRlciB0b28gb2Z0ZW47IHNlZTpcbi8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ3MDI1OFxuLy8gZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYnVnIChpdCBleGlzdGVkIGluIG9sZGVyIENocm9tZSB2ZXJzaW9ucyBhcyB3ZWxsKS5cbmpRdWVyeS5lYWNoKCB7XG5cdG1vdXNlZW50ZXI6IFwibW91c2VvdmVyXCIsXG5cdG1vdXNlbGVhdmU6IFwibW91c2VvdXRcIixcblx0cG9pbnRlcmVudGVyOiBcInBvaW50ZXJvdmVyXCIsXG5cdHBvaW50ZXJsZWF2ZTogXCJwb2ludGVyb3V0XCJcbn0sIGZ1bmN0aW9uKCBvcmlnLCBmaXggKSB7XG5cdGpRdWVyeS5ldmVudC5zcGVjaWFsWyBvcmlnIF0gPSB7XG5cdFx0ZGVsZWdhdGVUeXBlOiBmaXgsXG5cdFx0YmluZFR5cGU6IGZpeCxcblxuXHRcdGhhbmRsZTogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0dmFyIHJldCxcblx0XHRcdFx0dGFyZ2V0ID0gdGhpcyxcblx0XHRcdFx0cmVsYXRlZCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXQsXG5cdFx0XHRcdGhhbmRsZU9iaiA9IGV2ZW50LmhhbmRsZU9iajtcblxuXHRcdFx0Ly8gRm9yIG1vdXNlZW50ZXIvbGVhdmUgY2FsbCB0aGUgaGFuZGxlciBpZiByZWxhdGVkIGlzIG91dHNpZGUgdGhlIHRhcmdldC5cblx0XHRcdC8vIE5COiBObyByZWxhdGVkVGFyZ2V0IGlmIHRoZSBtb3VzZSBsZWZ0L2VudGVyZWQgdGhlIGJyb3dzZXIgd2luZG93XG5cdFx0XHRpZiAoICFyZWxhdGVkIHx8ICggcmVsYXRlZCAhPT0gdGFyZ2V0ICYmICFqUXVlcnkuY29udGFpbnMoIHRhcmdldCwgcmVsYXRlZCApICkgKSB7XG5cdFx0XHRcdGV2ZW50LnR5cGUgPSBoYW5kbGVPYmoub3JpZ1R5cGU7XG5cdFx0XHRcdHJldCA9IGhhbmRsZU9iai5oYW5kbGVyLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0ZXZlbnQudHlwZSA9IGZpeDtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXHR9O1xufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0b246IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBvbiggdGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApO1xuXHR9LFxuXHRvbmU6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiBvbiggdGhpcywgdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiwgMSApO1xuXHR9LFxuXHRvZmY6IGZ1bmN0aW9uKCB0eXBlcywgc2VsZWN0b3IsIGZuICkge1xuXHRcdHZhciBoYW5kbGVPYmosIHR5cGU7XG5cdFx0aWYgKCB0eXBlcyAmJiB0eXBlcy5wcmV2ZW50RGVmYXVsdCAmJiB0eXBlcy5oYW5kbGVPYmogKSB7XG5cblx0XHRcdC8vICggZXZlbnQgKSAgZGlzcGF0Y2hlZCBqUXVlcnkuRXZlbnRcblx0XHRcdGhhbmRsZU9iaiA9IHR5cGVzLmhhbmRsZU9iajtcblx0XHRcdGpRdWVyeSggdHlwZXMuZGVsZWdhdGVUYXJnZXQgKS5vZmYoXG5cdFx0XHRcdGhhbmRsZU9iai5uYW1lc3BhY2UgP1xuXHRcdFx0XHRcdGhhbmRsZU9iai5vcmlnVHlwZSArIFwiLlwiICsgaGFuZGxlT2JqLm5hbWVzcGFjZSA6XG5cdFx0XHRcdFx0aGFuZGxlT2JqLm9yaWdUeXBlLFxuXHRcdFx0XHRoYW5kbGVPYmouc2VsZWN0b3IsXG5cdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmICggdHlwZW9mIHR5cGVzID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzLW9iamVjdCBbLCBzZWxlY3Rvcl0gKVxuXHRcdFx0Zm9yICggdHlwZSBpbiB0eXBlcyApIHtcblx0XHRcdFx0dGhpcy5vZmYoIHR5cGUsIHNlbGVjdG9yLCB0eXBlc1sgdHlwZSBdICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdGhpcztcblx0XHR9XG5cdFx0aWYgKCBzZWxlY3RvciA9PT0gZmFsc2UgfHwgdHlwZW9mIHNlbGVjdG9yID09PSBcImZ1bmN0aW9uXCIgKSB7XG5cblx0XHRcdC8vICggdHlwZXMgWywgZm5dIClcblx0XHRcdGZuID0gc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0aWYgKCBmbiA9PT0gZmFsc2UgKSB7XG5cdFx0XHRmbiA9IHJldHVybkZhbHNlO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5ldmVudC5yZW1vdmUoIHRoaXMsIHR5cGVzLCBmbiwgc2VsZWN0b3IgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuXG52YXJcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTEwIC0gMTEsIEVkZ2UgMTIgLSAxMyBvbmx5XG5cdC8vIEluIElFL0VkZ2UgdXNpbmcgcmVnZXggZ3JvdXBzIGhlcmUgY2F1c2VzIHNldmVyZSBzbG93ZG93bnMuXG5cdC8vIFNlZSBodHRwczovL2Nvbm5lY3QubWljcm9zb2Z0LmNvbS9JRS9mZWVkYmFjay9kZXRhaWxzLzE3MzY1MTIvXG5cdHJub0lubmVyaHRtbCA9IC88c2NyaXB0fDxzdHlsZXw8bGluay9pLFxuXG5cdC8vIGNoZWNrZWQ9XCJjaGVja2VkXCIgb3IgY2hlY2tlZFxuXHRyY2hlY2tlZCA9IC9jaGVja2VkXFxzKig/OltePV18PVxccyouY2hlY2tlZC4pL2ksXG5cdHJjbGVhblNjcmlwdCA9IC9eXFxzKjwhKD86XFxbQ0RBVEFcXFt8LS0pfCg/OlxcXVxcXXwtLSk+XFxzKiQvZztcblxuLy8gUHJlZmVyIGEgdGJvZHkgb3ZlciBpdHMgcGFyZW50IHRhYmxlIGZvciBjb250YWluaW5nIG5ldyByb3dzXG5mdW5jdGlvbiBtYW5pcHVsYXRpb25UYXJnZXQoIGVsZW0sIGNvbnRlbnQgKSB7XG5cdGlmICggbm9kZU5hbWUoIGVsZW0sIFwidGFibGVcIiApICYmXG5cdFx0bm9kZU5hbWUoIGNvbnRlbnQubm9kZVR5cGUgIT09IDExID8gY29udGVudCA6IGNvbnRlbnQuZmlyc3RDaGlsZCwgXCJ0clwiICkgKSB7XG5cblx0XHRyZXR1cm4galF1ZXJ5KCBlbGVtICkuY2hpbGRyZW4oIFwidGJvZHlcIiApWyAwIF0gfHwgZWxlbTtcblx0fVxuXG5cdHJldHVybiBlbGVtO1xufVxuXG4vLyBSZXBsYWNlL3Jlc3RvcmUgdGhlIHR5cGUgYXR0cmlidXRlIG9mIHNjcmlwdCBlbGVtZW50cyBmb3Igc2FmZSBET00gbWFuaXB1bGF0aW9uXG5mdW5jdGlvbiBkaXNhYmxlU2NyaXB0KCBlbGVtICkge1xuXHRlbGVtLnR5cGUgPSAoIGVsZW0uZ2V0QXR0cmlidXRlKCBcInR5cGVcIiApICE9PSBudWxsICkgKyBcIi9cIiArIGVsZW0udHlwZTtcblx0cmV0dXJuIGVsZW07XG59XG5mdW5jdGlvbiByZXN0b3JlU2NyaXB0KCBlbGVtICkge1xuXHRpZiAoICggZWxlbS50eXBlIHx8IFwiXCIgKS5zbGljZSggMCwgNSApID09PSBcInRydWUvXCIgKSB7XG5cdFx0ZWxlbS50eXBlID0gZWxlbS50eXBlLnNsaWNlKCA1ICk7XG5cdH0gZWxzZSB7XG5cdFx0ZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIFwidHlwZVwiICk7XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxuZnVuY3Rpb24gY2xvbmVDb3B5RXZlbnQoIHNyYywgZGVzdCApIHtcblx0dmFyIGksIGwsIHR5cGUsIHBkYXRhT2xkLCB1ZGF0YU9sZCwgdWRhdGFDdXIsIGV2ZW50cztcblxuXHRpZiAoIGRlc3Qubm9kZVR5cGUgIT09IDEgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gMS4gQ29weSBwcml2YXRlIGRhdGE6IGV2ZW50cywgaGFuZGxlcnMsIGV0Yy5cblx0aWYgKCBkYXRhUHJpdi5oYXNEYXRhKCBzcmMgKSApIHtcblx0XHRwZGF0YU9sZCA9IGRhdGFQcml2LmdldCggc3JjICk7XG5cdFx0ZXZlbnRzID0gcGRhdGFPbGQuZXZlbnRzO1xuXG5cdFx0aWYgKCBldmVudHMgKSB7XG5cdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGRlc3QsIFwiaGFuZGxlIGV2ZW50c1wiICk7XG5cblx0XHRcdGZvciAoIHR5cGUgaW4gZXZlbnRzICkge1xuXHRcdFx0XHRmb3IgKCBpID0gMCwgbCA9IGV2ZW50c1sgdHlwZSBdLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQuYWRkKCBkZXN0LCB0eXBlLCBldmVudHNbIHR5cGUgXVsgaSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyAyLiBDb3B5IHVzZXIgZGF0YVxuXHRpZiAoIGRhdGFVc2VyLmhhc0RhdGEoIHNyYyApICkge1xuXHRcdHVkYXRhT2xkID0gZGF0YVVzZXIuYWNjZXNzKCBzcmMgKTtcblx0XHR1ZGF0YUN1ciA9IGpRdWVyeS5leHRlbmQoIHt9LCB1ZGF0YU9sZCApO1xuXG5cdFx0ZGF0YVVzZXIuc2V0KCBkZXN0LCB1ZGF0YUN1ciApO1xuXHR9XG59XG5cbi8vIEZpeCBJRSBidWdzLCBzZWUgc3VwcG9ydCB0ZXN0c1xuZnVuY3Rpb24gZml4SW5wdXQoIHNyYywgZGVzdCApIHtcblx0dmFyIG5vZGVOYW1lID0gZGVzdC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXG5cdC8vIEZhaWxzIHRvIHBlcnNpc3QgdGhlIGNoZWNrZWQgc3RhdGUgb2YgYSBjbG9uZWQgY2hlY2tib3ggb3IgcmFkaW8gYnV0dG9uLlxuXHRpZiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgJiYgcmNoZWNrYWJsZVR5cGUudGVzdCggc3JjLnR5cGUgKSApIHtcblx0XHRkZXN0LmNoZWNrZWQgPSBzcmMuY2hlY2tlZDtcblxuXHQvLyBGYWlscyB0byByZXR1cm4gdGhlIHNlbGVjdGVkIG9wdGlvbiB0byB0aGUgZGVmYXVsdCBzZWxlY3RlZCBzdGF0ZSB3aGVuIGNsb25pbmcgb3B0aW9uc1xuXHR9IGVsc2UgaWYgKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiIHx8IG5vZGVOYW1lID09PSBcInRleHRhcmVhXCIgKSB7XG5cdFx0ZGVzdC5kZWZhdWx0VmFsdWUgPSBzcmMuZGVmYXVsdFZhbHVlO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGRvbU1hbmlwKCBjb2xsZWN0aW9uLCBhcmdzLCBjYWxsYmFjaywgaWdub3JlZCApIHtcblxuXHQvLyBGbGF0dGVuIGFueSBuZXN0ZWQgYXJyYXlzXG5cdGFyZ3MgPSBmbGF0KCBhcmdzICk7XG5cblx0dmFyIGZyYWdtZW50LCBmaXJzdCwgc2NyaXB0cywgaGFzU2NyaXB0cywgbm9kZSwgZG9jLFxuXHRcdGkgPSAwLFxuXHRcdGwgPSBjb2xsZWN0aW9uLmxlbmd0aCxcblx0XHRpTm9DbG9uZSA9IGwgLSAxLFxuXHRcdHZhbHVlID0gYXJnc1sgMCBdLFxuXHRcdHZhbHVlSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIHZhbHVlICk7XG5cblx0Ly8gV2UgY2FuJ3QgY2xvbmVOb2RlIGZyYWdtZW50cyB0aGF0IGNvbnRhaW4gY2hlY2tlZCwgaW4gV2ViS2l0XG5cdGlmICggdmFsdWVJc0Z1bmN0aW9uIHx8XG5cdFx0XHQoIGwgPiAxICYmIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQhc3VwcG9ydC5jaGVja0Nsb25lICYmIHJjaGVja2VkLnRlc3QoIHZhbHVlICkgKSApIHtcblx0XHRyZXR1cm4gY29sbGVjdGlvbi5lYWNoKCBmdW5jdGlvbiggaW5kZXggKSB7XG5cdFx0XHR2YXIgc2VsZiA9IGNvbGxlY3Rpb24uZXEoIGluZGV4ICk7XG5cdFx0XHRpZiAoIHZhbHVlSXNGdW5jdGlvbiApIHtcblx0XHRcdFx0YXJnc1sgMCBdID0gdmFsdWUuY2FsbCggdGhpcywgaW5kZXgsIHNlbGYuaHRtbCgpICk7XG5cdFx0XHR9XG5cdFx0XHRkb21NYW5pcCggc2VsZiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKTtcblx0XHR9ICk7XG5cdH1cblxuXHRpZiAoIGwgKSB7XG5cdFx0ZnJhZ21lbnQgPSBidWlsZEZyYWdtZW50KCBhcmdzLCBjb2xsZWN0aW9uWyAwIF0ub3duZXJEb2N1bWVudCwgZmFsc2UsIGNvbGxlY3Rpb24sIGlnbm9yZWQgKTtcblx0XHRmaXJzdCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7XG5cblx0XHRpZiAoIGZyYWdtZW50LmNoaWxkTm9kZXMubGVuZ3RoID09PSAxICkge1xuXHRcdFx0ZnJhZ21lbnQgPSBmaXJzdDtcblx0XHR9XG5cblx0XHQvLyBSZXF1aXJlIGVpdGhlciBuZXcgY29udGVudCBvciBhbiBpbnRlcmVzdCBpbiBpZ25vcmVkIGVsZW1lbnRzIHRvIGludm9rZSB0aGUgY2FsbGJhY2tcblx0XHRpZiAoIGZpcnN0IHx8IGlnbm9yZWQgKSB7XG5cdFx0XHRzY3JpcHRzID0galF1ZXJ5Lm1hcCggZ2V0QWxsKCBmcmFnbWVudCwgXCJzY3JpcHRcIiApLCBkaXNhYmxlU2NyaXB0ICk7XG5cdFx0XHRoYXNTY3JpcHRzID0gc2NyaXB0cy5sZW5ndGg7XG5cblx0XHRcdC8vIFVzZSB0aGUgb3JpZ2luYWwgZnJhZ21lbnQgZm9yIHRoZSBsYXN0IGl0ZW1cblx0XHRcdC8vIGluc3RlYWQgb2YgdGhlIGZpcnN0IGJlY2F1c2UgaXQgY2FuIGVuZCB1cFxuXHRcdFx0Ly8gYmVpbmcgZW1wdGllZCBpbmNvcnJlY3RseSBpbiBjZXJ0YWluIHNpdHVhdGlvbnMgKCM4MDcwKS5cblx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0bm9kZSA9IGZyYWdtZW50O1xuXG5cdFx0XHRcdGlmICggaSAhPT0gaU5vQ2xvbmUgKSB7XG5cdFx0XHRcdFx0bm9kZSA9IGpRdWVyeS5jbG9uZSggbm9kZSwgdHJ1ZSwgdHJ1ZSApO1xuXG5cdFx0XHRcdFx0Ly8gS2VlcCByZWZlcmVuY2VzIHRvIGNsb25lZCBzY3JpcHRzIGZvciBsYXRlciByZXN0b3JhdGlvblxuXHRcdFx0XHRcdGlmICggaGFzU2NyaXB0cyApIHtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRcdFx0XHRqUXVlcnkubWVyZ2UoIHNjcmlwdHMsIGdldEFsbCggbm9kZSwgXCJzY3JpcHRcIiApICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Y2FsbGJhY2suY2FsbCggY29sbGVjdGlvblsgaSBdLCBub2RlLCBpICk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggaGFzU2NyaXB0cyApIHtcblx0XHRcdFx0ZG9jID0gc2NyaXB0c1sgc2NyaXB0cy5sZW5ndGggLSAxIF0ub3duZXJEb2N1bWVudDtcblxuXHRcdFx0XHQvLyBSZWVuYWJsZSBzY3JpcHRzXG5cdFx0XHRcdGpRdWVyeS5tYXAoIHNjcmlwdHMsIHJlc3RvcmVTY3JpcHQgKTtcblxuXHRcdFx0XHQvLyBFdmFsdWF0ZSBleGVjdXRhYmxlIHNjcmlwdHMgb24gZmlyc3QgZG9jdW1lbnQgaW5zZXJ0aW9uXG5cdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgaGFzU2NyaXB0czsgaSsrICkge1xuXHRcdFx0XHRcdG5vZGUgPSBzY3JpcHRzWyBpIF07XG5cdFx0XHRcdFx0aWYgKCByc2NyaXB0VHlwZS50ZXN0KCBub2RlLnR5cGUgfHwgXCJcIiApICYmXG5cdFx0XHRcdFx0XHQhZGF0YVByaXYuYWNjZXNzKCBub2RlLCBcImdsb2JhbEV2YWxcIiApICYmXG5cdFx0XHRcdFx0XHRqUXVlcnkuY29udGFpbnMoIGRvYywgbm9kZSApICkge1xuXG5cdFx0XHRcdFx0XHRpZiAoIG5vZGUuc3JjICYmICggbm9kZS50eXBlIHx8IFwiXCIgKS50b0xvd2VyQ2FzZSgpICAhPT0gXCJtb2R1bGVcIiApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBPcHRpb25hbCBBSkFYIGRlcGVuZGVuY3ksIGJ1dCB3b24ndCBydW4gc2NyaXB0cyBpZiBub3QgcHJlc2VudFxuXHRcdFx0XHRcdFx0XHRpZiAoIGpRdWVyeS5fZXZhbFVybCAmJiAhbm9kZS5ub01vZHVsZSApIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuX2V2YWxVcmwoIG5vZGUuc3JjLCB7XG5cdFx0XHRcdFx0XHRcdFx0XHRub25jZTogbm9kZS5ub25jZSB8fCBub2RlLmdldEF0dHJpYnV0ZSggXCJub25jZVwiIClcblx0XHRcdFx0XHRcdFx0XHR9LCBkb2MgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0RE9NRXZhbCggbm9kZS50ZXh0Q29udGVudC5yZXBsYWNlKCByY2xlYW5TY3JpcHQsIFwiXCIgKSwgbm9kZSwgZG9jICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGNvbGxlY3Rpb247XG59XG5cbmZ1bmN0aW9uIHJlbW92ZSggZWxlbSwgc2VsZWN0b3IsIGtlZXBEYXRhICkge1xuXHR2YXIgbm9kZSxcblx0XHRub2RlcyA9IHNlbGVjdG9yID8galF1ZXJ5LmZpbHRlciggc2VsZWN0b3IsIGVsZW0gKSA6IGVsZW0sXG5cdFx0aSA9IDA7XG5cblx0Zm9yICggOyAoIG5vZGUgPSBub2Rlc1sgaSBdICkgIT0gbnVsbDsgaSsrICkge1xuXHRcdGlmICggIWtlZXBEYXRhICYmIG5vZGUubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIG5vZGUgKSApO1xuXHRcdH1cblxuXHRcdGlmICggbm9kZS5wYXJlbnROb2RlICkge1xuXHRcdFx0aWYgKCBrZWVwRGF0YSAmJiBpc0F0dGFjaGVkKCBub2RlICkgKSB7XG5cdFx0XHRcdHNldEdsb2JhbEV2YWwoIGdldEFsbCggbm9kZSwgXCJzY3JpcHRcIiApICk7XG5cdFx0XHR9XG5cdFx0XHRub2RlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIG5vZGUgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXHRodG1sUHJlZmlsdGVyOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHRyZXR1cm4gaHRtbDtcblx0fSxcblxuXHRjbG9uZTogZnVuY3Rpb24oIGVsZW0sIGRhdGFBbmRFdmVudHMsIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdHZhciBpLCBsLCBzcmNFbGVtZW50cywgZGVzdEVsZW1lbnRzLFxuXHRcdFx0Y2xvbmUgPSBlbGVtLmNsb25lTm9kZSggdHJ1ZSApLFxuXHRcdFx0aW5QYWdlID0gaXNBdHRhY2hlZCggZWxlbSApO1xuXG5cdFx0Ly8gRml4IElFIGNsb25pbmcgaXNzdWVzXG5cdFx0aWYgKCAhc3VwcG9ydC5ub0Nsb25lQ2hlY2tlZCAmJiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgZWxlbS5ub2RlVHlwZSA9PT0gMTEgKSAmJlxuXHRcdFx0XHQhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cblx0XHRcdC8vIFdlIGVzY2hldyBTaXp6bGUgaGVyZSBmb3IgcGVyZm9ybWFuY2UgcmVhc29uczogaHR0cHM6Ly9qc3BlcmYuY29tL2dldGFsbC12cy1zaXp6bGUvMlxuXHRcdFx0ZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSApO1xuXHRcdFx0c3JjRWxlbWVudHMgPSBnZXRBbGwoIGVsZW0gKTtcblxuXHRcdFx0Zm9yICggaSA9IDAsIGwgPSBzcmNFbGVtZW50cy5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGZpeElucHV0KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENvcHkgdGhlIGV2ZW50cyBmcm9tIHRoZSBvcmlnaW5hbCB0byB0aGUgY2xvbmVcblx0XHRpZiAoIGRhdGFBbmRFdmVudHMgKSB7XG5cdFx0XHRpZiAoIGRlZXBEYXRhQW5kRXZlbnRzICkge1xuXHRcdFx0XHRzcmNFbGVtZW50cyA9IHNyY0VsZW1lbnRzIHx8IGdldEFsbCggZWxlbSApO1xuXHRcdFx0XHRkZXN0RWxlbWVudHMgPSBkZXN0RWxlbWVudHMgfHwgZ2V0QWxsKCBjbG9uZSApO1xuXG5cdFx0XHRcdGZvciAoIGkgPSAwLCBsID0gc3JjRWxlbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRcdGNsb25lQ29weUV2ZW50KCBzcmNFbGVtZW50c1sgaSBdLCBkZXN0RWxlbWVudHNbIGkgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjbG9uZUNvcHlFdmVudCggZWxlbSwgY2xvbmUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBQcmVzZXJ2ZSBzY3JpcHQgZXZhbHVhdGlvbiBoaXN0b3J5XG5cdFx0ZGVzdEVsZW1lbnRzID0gZ2V0QWxsKCBjbG9uZSwgXCJzY3JpcHRcIiApO1xuXHRcdGlmICggZGVzdEVsZW1lbnRzLmxlbmd0aCA+IDAgKSB7XG5cdFx0XHRzZXRHbG9iYWxFdmFsKCBkZXN0RWxlbWVudHMsICFpblBhZ2UgJiYgZ2V0QWxsKCBlbGVtLCBcInNjcmlwdFwiICkgKTtcblx0XHR9XG5cblx0XHQvLyBSZXR1cm4gdGhlIGNsb25lZCBzZXRcblx0XHRyZXR1cm4gY2xvbmU7XG5cdH0sXG5cblx0Y2xlYW5EYXRhOiBmdW5jdGlvbiggZWxlbXMgKSB7XG5cdFx0dmFyIGRhdGEsIGVsZW0sIHR5cGUsXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWwsXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgKCBlbGVtID0gZWxlbXNbIGkgXSApICE9PSB1bmRlZmluZWQ7IGkrKyApIHtcblx0XHRcdGlmICggYWNjZXB0RGF0YSggZWxlbSApICkge1xuXHRcdFx0XHRpZiAoICggZGF0YSA9IGVsZW1bIGRhdGFQcml2LmV4cGFuZG8gXSApICkge1xuXHRcdFx0XHRcdGlmICggZGF0YS5ldmVudHMgKSB7XG5cdFx0XHRcdFx0XHRmb3IgKCB0eXBlIGluIGRhdGEuZXZlbnRzICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoIHNwZWNpYWxbIHR5cGUgXSApIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gVGhpcyBpcyBhIHNob3J0Y3V0IHRvIGF2b2lkIGpRdWVyeS5ldmVudC5yZW1vdmUncyBvdmVyaGVhZFxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGpRdWVyeS5yZW1vdmVFdmVudCggZWxlbSwgdHlwZSwgZGF0YS5oYW5kbGUgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDUrXG5cdFx0XHRcdFx0Ly8gQXNzaWduIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIHVzaW5nIGRlbGV0ZSwgc2VlIERhdGEjcmVtb3ZlXG5cdFx0XHRcdFx0ZWxlbVsgZGF0YVByaXYuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggZWxlbVsgZGF0YVVzZXIuZXhwYW5kbyBdICkge1xuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NStcblx0XHRcdFx0XHQvLyBBc3NpZ24gdW5kZWZpbmVkIGluc3RlYWQgb2YgdXNpbmcgZGVsZXRlLCBzZWUgRGF0YSNyZW1vdmVcblx0XHRcdFx0XHRlbGVtWyBkYXRhVXNlci5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRkZXRhY2g6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gcmVtb3ZlKCB0aGlzLCBzZWxlY3RvciwgdHJ1ZSApO1xuXHR9LFxuXG5cdHJlbW92ZTogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiByZW1vdmUoIHRoaXMsIHNlbGVjdG9yICk7XG5cdH0sXG5cblx0dGV4dDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHJldHVybiB2YWx1ZSA9PT0gdW5kZWZpbmVkID9cblx0XHRcdFx0alF1ZXJ5LnRleHQoIHRoaXMgKSA6XG5cdFx0XHRcdHRoaXMuZW1wdHkoKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0XHRcdHRoaXMudGV4dENvbnRlbnQgPSB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9LFxuXG5cdGFwcGVuZDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdHZhciB0YXJnZXQgPSBtYW5pcHVsYXRpb25UYXJnZXQoIHRoaXMsIGVsZW0gKTtcblx0XHRcdFx0dGFyZ2V0LmFwcGVuZENoaWxkKCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdHByZXBlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7XG5cdFx0XHRcdHRhcmdldC5pbnNlcnRCZWZvcmUoIGVsZW0sIHRhcmdldC5maXJzdENoaWxkICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGJlZm9yZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIGRvbU1hbmlwKCB0aGlzLCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0aWYgKCB0aGlzLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdHRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoIGVsZW0sIHRoaXMgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0YWZ0ZXI6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzLm5leHRTaWJsaW5nICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGVtcHR5OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZWxlbSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0Zm9yICggOyAoIGVsZW0gPSB0aGlzWyBpIF0gKSAhPSBudWxsOyBpKysgKSB7XG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0Ly8gUHJldmVudCBtZW1vcnkgbGVha3Ncblx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBlbGVtLCBmYWxzZSApICk7XG5cblx0XHRcdFx0Ly8gUmVtb3ZlIGFueSByZW1haW5pbmcgbm9kZXNcblx0XHRcdFx0ZWxlbS50ZXh0Q29udGVudCA9IFwiXCI7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHRkYXRhQW5kRXZlbnRzID0gZGF0YUFuZEV2ZW50cyA9PSBudWxsID8gZmFsc2UgOiBkYXRhQW5kRXZlbnRzO1xuXHRcdGRlZXBEYXRhQW5kRXZlbnRzID0gZGVlcERhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGRhdGFBbmRFdmVudHMgOiBkZWVwRGF0YUFuZEV2ZW50cztcblxuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNsb25lKCB0aGlzLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApO1xuXHRcdH0gKTtcblx0fSxcblxuXHRodG1sOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0dmFyIGVsZW0gPSB0aGlzWyAwIF0gfHwge30sXG5cdFx0XHRcdGkgPSAwLFxuXHRcdFx0XHRsID0gdGhpcy5sZW5ndGg7XG5cblx0XHRcdGlmICggdmFsdWUgPT09IHVuZGVmaW5lZCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRyZXR1cm4gZWxlbS5pbm5lckhUTUw7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNlZSBpZiB3ZSBjYW4gdGFrZSBhIHNob3J0Y3V0IGFuZCBqdXN0IHVzZSBpbm5lckhUTUxcblx0XHRcdGlmICggdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICYmICFybm9Jbm5lcmh0bWwudGVzdCggdmFsdWUgKSAmJlxuXHRcdFx0XHQhd3JhcE1hcFsgKCBydGFnTmFtZS5leGVjKCB2YWx1ZSApIHx8IFsgXCJcIiwgXCJcIiBdIClbIDEgXS50b0xvd2VyQ2FzZSgpIF0gKSB7XG5cblx0XHRcdFx0dmFsdWUgPSBqUXVlcnkuaHRtbFByZWZpbHRlciggdmFsdWUgKTtcblxuXHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRcdGVsZW0gPSB0aGlzWyBpIF0gfHwge307XG5cblx0XHRcdFx0XHRcdC8vIFJlbW92ZSBlbGVtZW50IG5vZGVzIGFuZCBwcmV2ZW50IG1lbW9yeSBsZWFrc1xuXHRcdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0XHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIGVsZW0sIGZhbHNlICkgKTtcblx0XHRcdFx0XHRcdFx0ZWxlbS5pbm5lckhUTUwgPSB2YWx1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRlbGVtID0gMDtcblxuXHRcdFx0XHQvLyBJZiB1c2luZyBpbm5lckhUTUwgdGhyb3dzIGFuIGV4Y2VwdGlvbiwgdXNlIHRoZSBmYWxsYmFjayBtZXRob2Rcblx0XHRcdFx0fSBjYXRjaCAoIGUgKSB7fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRcdHRoaXMuZW1wdHkoKS5hcHBlbmQoIHZhbHVlICk7XG5cdFx0XHR9XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTtcblx0fSxcblxuXHRyZXBsYWNlV2l0aDogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGlnbm9yZWQgPSBbXTtcblxuXHRcdC8vIE1ha2UgdGhlIGNoYW5nZXMsIHJlcGxhY2luZyBlYWNoIG5vbi1pZ25vcmVkIGNvbnRleHQgZWxlbWVudCB3aXRoIHRoZSBuZXcgY29udGVudFxuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHZhciBwYXJlbnQgPSB0aGlzLnBhcmVudE5vZGU7XG5cblx0XHRcdGlmICggalF1ZXJ5LmluQXJyYXkoIHRoaXMsIGlnbm9yZWQgKSA8IDAgKSB7XG5cdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggdGhpcyApICk7XG5cdFx0XHRcdGlmICggcGFyZW50ICkge1xuXHRcdFx0XHRcdHBhcmVudC5yZXBsYWNlQ2hpbGQoIGVsZW0sIHRoaXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gRm9yY2UgY2FsbGJhY2sgaW52b2NhdGlvblxuXHRcdH0sIGlnbm9yZWQgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCgge1xuXHRhcHBlbmRUbzogXCJhcHBlbmRcIixcblx0cHJlcGVuZFRvOiBcInByZXBlbmRcIixcblx0aW5zZXJ0QmVmb3JlOiBcImJlZm9yZVwiLFxuXHRpbnNlcnRBZnRlcjogXCJhZnRlclwiLFxuXHRyZXBsYWNlQWxsOiBcInJlcGxhY2VXaXRoXCJcbn0sIGZ1bmN0aW9uKCBuYW1lLCBvcmlnaW5hbCApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGVsZW1zLFxuXHRcdFx0cmV0ID0gW10sXG5cdFx0XHRpbnNlcnQgPSBqUXVlcnkoIHNlbGVjdG9yICksXG5cdFx0XHRsYXN0ID0gaW5zZXJ0Lmxlbmd0aCAtIDEsXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgaSA8PSBsYXN0OyBpKysgKSB7XG5cdFx0XHRlbGVtcyA9IGkgPT09IGxhc3QgPyB0aGlzIDogdGhpcy5jbG9uZSggdHJ1ZSApO1xuXHRcdFx0alF1ZXJ5KCBpbnNlcnRbIGkgXSApWyBvcmlnaW5hbCBdKCBlbGVtcyApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdC8vIC5nZXQoKSBiZWNhdXNlIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdHB1c2guYXBwbHkoIHJldCwgZWxlbXMuZ2V0KCkgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHJldCApO1xuXHR9O1xufSApO1xudmFyIHJudW1ub25weCA9IG5ldyBSZWdFeHAoIFwiXihcIiArIHBudW0gKyBcIikoPyFweClbYS16JV0rJFwiLCBcImlcIiApO1xuXG52YXIgZ2V0U3R5bGVzID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHksIEZpcmVmb3ggPD0zMCAoIzE1MDk4LCAjMTQxNTApXG5cdFx0Ly8gSUUgdGhyb3dzIG9uIGVsZW1lbnRzIGNyZWF0ZWQgaW4gcG9wdXBzXG5cdFx0Ly8gRkYgbWVhbndoaWxlIHRocm93cyBvbiBmcmFtZSBlbGVtZW50cyB0aHJvdWdoIFwiZGVmYXVsdFZpZXcuZ2V0Q29tcHV0ZWRTdHlsZVwiXG5cdFx0dmFyIHZpZXcgPSBlbGVtLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXc7XG5cblx0XHRpZiAoICF2aWV3IHx8ICF2aWV3Lm9wZW5lciApIHtcblx0XHRcdHZpZXcgPSB3aW5kb3c7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZpZXcuZ2V0Q29tcHV0ZWRTdHlsZSggZWxlbSApO1xuXHR9O1xuXG52YXIgc3dhcCA9IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBjYWxsYmFjayApIHtcblx0dmFyIHJldCwgbmFtZSxcblx0XHRvbGQgPSB7fTtcblxuXHQvLyBSZW1lbWJlciB0aGUgb2xkIHZhbHVlcywgYW5kIGluc2VydCB0aGUgbmV3IG9uZXNcblx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdG9sZFsgbmFtZSBdID0gZWxlbS5zdHlsZVsgbmFtZSBdO1xuXHRcdGVsZW0uc3R5bGVbIG5hbWUgXSA9IG9wdGlvbnNbIG5hbWUgXTtcblx0fVxuXG5cdHJldCA9IGNhbGxiYWNrLmNhbGwoIGVsZW0gKTtcblxuXHQvLyBSZXZlcnQgdGhlIG9sZCB2YWx1ZXNcblx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdGVsZW0uc3R5bGVbIG5hbWUgXSA9IG9sZFsgbmFtZSBdO1xuXHR9XG5cblx0cmV0dXJuIHJldDtcbn07XG5cblxudmFyIHJib3hTdHlsZSA9IG5ldyBSZWdFeHAoIGNzc0V4cGFuZC5qb2luKCBcInxcIiApLCBcImlcIiApO1xuXG5cblxuKCBmdW5jdGlvbigpIHtcblxuXHQvLyBFeGVjdXRpbmcgYm90aCBwaXhlbFBvc2l0aW9uICYgYm94U2l6aW5nUmVsaWFibGUgdGVzdHMgcmVxdWlyZSBvbmx5IG9uZSBsYXlvdXRcblx0Ly8gc28gdGhleSdyZSBleGVjdXRlZCBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgdGhlIHNlY29uZCBjb21wdXRhdGlvbi5cblx0ZnVuY3Rpb24gY29tcHV0ZVN0eWxlVGVzdHMoKSB7XG5cblx0XHQvLyBUaGlzIGlzIGEgc2luZ2xldG9uLCB3ZSBuZWVkIHRvIGV4ZWN1dGUgaXQgb25seSBvbmNlXG5cdFx0aWYgKCAhZGl2ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGNvbnRhaW5lci5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMTExMXB4O3dpZHRoOjYwcHg7XCIgK1xuXHRcdFx0XCJtYXJnaW4tdG9wOjFweDtwYWRkaW5nOjA7Ym9yZGVyOjBcIjtcblx0XHRkaXYuc3R5bGUuY3NzVGV4dCA9XG5cdFx0XHRcInBvc2l0aW9uOnJlbGF0aXZlO2Rpc3BsYXk6YmxvY2s7Ym94LXNpemluZzpib3JkZXItYm94O292ZXJmbG93OnNjcm9sbDtcIiArXG5cdFx0XHRcIm1hcmdpbjphdXRvO2JvcmRlcjoxcHg7cGFkZGluZzoxcHg7XCIgK1xuXHRcdFx0XCJ3aWR0aDo2MCU7dG9wOjElXCI7XG5cdFx0ZG9jdW1lbnRFbGVtZW50LmFwcGVuZENoaWxkKCBjb250YWluZXIgKS5hcHBlbmRDaGlsZCggZGl2ICk7XG5cblx0XHR2YXIgZGl2U3R5bGUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSggZGl2ICk7XG5cdFx0cGl4ZWxQb3NpdGlvblZhbCA9IGRpdlN0eWxlLnRvcCAhPT0gXCIxJVwiO1xuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA0LjAgLSA0LjMgb25seSwgRmlyZWZveCA8PTMgLSA0NFxuXHRcdHJlbGlhYmxlTWFyZ2luTGVmdFZhbCA9IHJvdW5kUGl4ZWxNZWFzdXJlcyggZGl2U3R5bGUubWFyZ2luTGVmdCApID09PSAxMjtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHksIFNhZmFyaSA8PTkuMSAtIDEwLjEsIGlPUyA8PTcuMCAtIDkuM1xuXHRcdC8vIFNvbWUgc3R5bGVzIGNvbWUgYmFjayB3aXRoIHBlcmNlbnRhZ2UgdmFsdWVzLCBldmVuIHRob3VnaCB0aGV5IHNob3VsZG4ndFxuXHRcdGRpdi5zdHlsZS5yaWdodCA9IFwiNjAlXCI7XG5cdFx0cGl4ZWxCb3hTdHlsZXNWYWwgPSByb3VuZFBpeGVsTWVhc3VyZXMoIGRpdlN0eWxlLnJpZ2h0ICkgPT09IDM2O1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHlcblx0XHQvLyBEZXRlY3QgbWlzcmVwb3J0aW5nIG9mIGNvbnRlbnQgZGltZW5zaW9ucyBmb3IgYm94LXNpemluZzpib3JkZXItYm94IGVsZW1lbnRzXG5cdFx0Ym94U2l6aW5nUmVsaWFibGVWYWwgPSByb3VuZFBpeGVsTWVhc3VyZXMoIGRpdlN0eWxlLndpZHRoICkgPT09IDM2O1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgOSBvbmx5XG5cdFx0Ly8gRGV0ZWN0IG92ZXJmbG93OnNjcm9sbCBzY3Jld2luZXNzIChnaC0zNjk5KVxuXHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTY0XG5cdFx0Ly8gRG9uJ3QgZ2V0IHRyaWNrZWQgd2hlbiB6b29tIGFmZmVjdHMgb2Zmc2V0V2lkdGggKGdoLTQwMjkpXG5cdFx0ZGl2LnN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xuXHRcdHNjcm9sbGJveFNpemVWYWwgPSByb3VuZFBpeGVsTWVhc3VyZXMoIGRpdi5vZmZzZXRXaWR0aCAvIDMgKSA9PT0gMTI7XG5cblx0XHRkb2N1bWVudEVsZW1lbnQucmVtb3ZlQ2hpbGQoIGNvbnRhaW5lciApO1xuXG5cdFx0Ly8gTnVsbGlmeSB0aGUgZGl2IHNvIGl0IHdvdWxkbid0IGJlIHN0b3JlZCBpbiB0aGUgbWVtb3J5IGFuZFxuXHRcdC8vIGl0IHdpbGwgYWxzbyBiZSBhIHNpZ24gdGhhdCBjaGVja3MgYWxyZWFkeSBwZXJmb3JtZWRcblx0XHRkaXYgPSBudWxsO1xuXHR9XG5cblx0ZnVuY3Rpb24gcm91bmRQaXhlbE1lYXN1cmVzKCBtZWFzdXJlICkge1xuXHRcdHJldHVybiBNYXRoLnJvdW5kKCBwYXJzZUZsb2F0KCBtZWFzdXJlICkgKTtcblx0fVxuXG5cdHZhciBwaXhlbFBvc2l0aW9uVmFsLCBib3hTaXppbmdSZWxpYWJsZVZhbCwgc2Nyb2xsYm94U2l6ZVZhbCwgcGl4ZWxCb3hTdHlsZXNWYWwsXG5cdFx0cmVsaWFibGVUckRpbWVuc2lvbnNWYWwsIHJlbGlhYmxlTWFyZ2luTGVmdFZhbCxcblx0XHRjb250YWluZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICksXG5cdFx0ZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApO1xuXG5cdC8vIEZpbmlzaCBlYXJseSBpbiBsaW1pdGVkIChub24tYnJvd3NlcikgZW52aXJvbm1lbnRzXG5cdGlmICggIWRpdi5zdHlsZSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdC8vIFN0eWxlIG9mIGNsb25lZCBlbGVtZW50IGFmZmVjdHMgc291cmNlIGVsZW1lbnQgY2xvbmVkICgjODkwOClcblx0ZGl2LnN0eWxlLmJhY2tncm91bmRDbGlwID0gXCJjb250ZW50LWJveFwiO1xuXHRkaXYuY2xvbmVOb2RlKCB0cnVlICkuc3R5bGUuYmFja2dyb3VuZENsaXAgPSBcIlwiO1xuXHRzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSA9IGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9PT0gXCJjb250ZW50LWJveFwiO1xuXG5cdGpRdWVyeS5leHRlbmQoIHN1cHBvcnQsIHtcblx0XHRib3hTaXppbmdSZWxpYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIGJveFNpemluZ1JlbGlhYmxlVmFsO1xuXHRcdH0sXG5cdFx0cGl4ZWxCb3hTdHlsZXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBwaXhlbEJveFN0eWxlc1ZhbDtcblx0XHR9LFxuXHRcdHBpeGVsUG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBwaXhlbFBvc2l0aW9uVmFsO1xuXHRcdH0sXG5cdFx0cmVsaWFibGVNYXJnaW5MZWZ0OiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcmVsaWFibGVNYXJnaW5MZWZ0VmFsO1xuXHRcdH0sXG5cdFx0c2Nyb2xsYm94U2l6ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHNjcm9sbGJveFNpemVWYWw7XG5cdFx0fSxcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTUgLSAxOCtcblx0XHQvLyBJRS9FZGdlIG1pc3JlcG9ydCBgZ2V0Q29tcHV0ZWRTdHlsZWAgb2YgdGFibGUgcm93cyB3aXRoIHdpZHRoL2hlaWdodFxuXHRcdC8vIHNldCBpbiBDU1Mgd2hpbGUgYG9mZnNldCpgIHByb3BlcnRpZXMgcmVwb3J0IGNvcnJlY3QgdmFsdWVzLlxuXHRcdC8vIEJlaGF2aW9yIGluIElFIDkgaXMgbW9yZSBzdWJ0bGUgdGhhbiBpbiBuZXdlciB2ZXJzaW9ucyAmIGl0IHBhc3Nlc1xuXHRcdC8vIHNvbWUgdmVyc2lvbnMgb2YgdGhpcyB0ZXN0OyBtYWtlIHN1cmUgbm90IHRvIG1ha2UgaXQgcGFzcyB0aGVyZSFcblx0XHQvL1xuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggNzArXG5cdFx0Ly8gT25seSBGaXJlZm94IGluY2x1ZGVzIGJvcmRlciB3aWR0aHNcblx0XHQvLyBpbiBjb21wdXRlZCBkaW1lbnNpb25zLiAoZ2gtNDUyOSlcblx0XHRyZWxpYWJsZVRyRGltZW5zaW9uczogZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdGFibGUsIHRyLCB0ckNoaWxkLCB0clN0eWxlO1xuXHRcdFx0aWYgKCByZWxpYWJsZVRyRGltZW5zaW9uc1ZhbCA9PSBudWxsICkge1xuXHRcdFx0XHR0YWJsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwidGFibGVcIiApO1xuXHRcdFx0XHR0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwidHJcIiApO1xuXHRcdFx0XHR0ckNoaWxkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApO1xuXG5cdFx0XHRcdHRhYmxlLnN0eWxlLmNzc1RleHQgPSBcInBvc2l0aW9uOmFic29sdXRlO2xlZnQ6LTExMTExcHg7Ym9yZGVyLWNvbGxhcHNlOnNlcGFyYXRlXCI7XG5cdFx0XHRcdHRyLnN0eWxlLmNzc1RleHQgPSBcImJvcmRlcjoxcHggc29saWRcIjtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgODYrXG5cdFx0XHRcdC8vIEhlaWdodCBzZXQgdGhyb3VnaCBjc3NUZXh0IGRvZXMgbm90IGdldCBhcHBsaWVkLlxuXHRcdFx0XHQvLyBDb21wdXRlZCBoZWlnaHQgdGhlbiBjb21lcyBiYWNrIGFzIDAuXG5cdFx0XHRcdHRyLnN0eWxlLmhlaWdodCA9IFwiMXB4XCI7XG5cdFx0XHRcdHRyQ2hpbGQuc3R5bGUuaGVpZ2h0ID0gXCI5cHhcIjtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDggQ2hyb21lIDg2K1xuXHRcdFx0XHQvLyBJbiBvdXIgYm9keUJhY2tncm91bmQuaHRtbCBpZnJhbWUsXG5cdFx0XHRcdC8vIGRpc3BsYXkgZm9yIGFsbCBkaXYgZWxlbWVudHMgaXMgc2V0IHRvIFwiaW5saW5lXCIsXG5cdFx0XHRcdC8vIHdoaWNoIGNhdXNlcyBhIHByb2JsZW0gb25seSBpbiBBbmRyb2lkIDggQ2hyb21lIDg2LlxuXHRcdFx0XHQvLyBFbnN1cmluZyB0aGUgZGl2IGlzIGRpc3BsYXk6IGJsb2NrXG5cdFx0XHRcdC8vIGdldHMgYXJvdW5kIHRoaXMgaXNzdWUuXG5cdFx0XHRcdHRyQ2hpbGQuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcblxuXHRcdFx0XHRkb2N1bWVudEVsZW1lbnRcblx0XHRcdFx0XHQuYXBwZW5kQ2hpbGQoIHRhYmxlIClcblx0XHRcdFx0XHQuYXBwZW5kQ2hpbGQoIHRyIClcblx0XHRcdFx0XHQuYXBwZW5kQ2hpbGQoIHRyQ2hpbGQgKTtcblxuXHRcdFx0XHR0clN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoIHRyICk7XG5cdFx0XHRcdHJlbGlhYmxlVHJEaW1lbnNpb25zVmFsID0gKCBwYXJzZUludCggdHJTdHlsZS5oZWlnaHQsIDEwICkgK1xuXHRcdFx0XHRcdHBhcnNlSW50KCB0clN0eWxlLmJvcmRlclRvcFdpZHRoLCAxMCApICtcblx0XHRcdFx0XHRwYXJzZUludCggdHJTdHlsZS5ib3JkZXJCb3R0b21XaWR0aCwgMTAgKSApID09PSB0ci5vZmZzZXRIZWlnaHQ7XG5cblx0XHRcdFx0ZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKCB0YWJsZSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlbGlhYmxlVHJEaW1lbnNpb25zVmFsO1xuXHRcdH1cblx0fSApO1xufSApKCk7XG5cblxuZnVuY3Rpb24gY3VyQ1NTKCBlbGVtLCBuYW1lLCBjb21wdXRlZCApIHtcblx0dmFyIHdpZHRoLCBtaW5XaWR0aCwgbWF4V2lkdGgsIHJldCxcblxuXHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggNTErXG5cdFx0Ly8gUmV0cmlldmluZyBzdHlsZSBiZWZvcmUgY29tcHV0ZWQgc29tZWhvd1xuXHRcdC8vIGZpeGVzIGFuIGlzc3VlIHdpdGggZ2V0dGluZyB3cm9uZyB2YWx1ZXNcblx0XHQvLyBvbiBkZXRhY2hlZCBlbGVtZW50c1xuXHRcdHN0eWxlID0gZWxlbS5zdHlsZTtcblxuXHRjb21wdXRlZCA9IGNvbXB1dGVkIHx8IGdldFN0eWxlcyggZWxlbSApO1xuXG5cdC8vIGdldFByb3BlcnR5VmFsdWUgaXMgbmVlZGVkIGZvcjpcblx0Ly8gICAuY3NzKCdmaWx0ZXInKSAoSUUgOSBvbmx5LCAjMTI1MzcpXG5cdC8vICAgLmNzcygnLS1jdXN0b21Qcm9wZXJ0eSkgKCMzMTQ0KVxuXHRpZiAoIGNvbXB1dGVkICkge1xuXHRcdHJldCA9IGNvbXB1dGVkLmdldFByb3BlcnR5VmFsdWUoIG5hbWUgKSB8fCBjb21wdXRlZFsgbmFtZSBdO1xuXG5cdFx0aWYgKCByZXQgPT09IFwiXCIgJiYgIWlzQXR0YWNoZWQoIGVsZW0gKSApIHtcblx0XHRcdHJldCA9IGpRdWVyeS5zdHlsZSggZWxlbSwgbmFtZSApO1xuXHRcdH1cblxuXHRcdC8vIEEgdHJpYnV0ZSB0byB0aGUgXCJhd2Vzb21lIGhhY2sgYnkgRGVhbiBFZHdhcmRzXCJcblx0XHQvLyBBbmRyb2lkIEJyb3dzZXIgcmV0dXJucyBwZXJjZW50YWdlIGZvciBzb21lIHZhbHVlcyxcblx0XHQvLyBidXQgd2lkdGggc2VlbXMgdG8gYmUgcmVsaWFibHkgcGl4ZWxzLlxuXHRcdC8vIFRoaXMgaXMgYWdhaW5zdCB0aGUgQ1NTT00gZHJhZnQgc3BlYzpcblx0XHQvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3Nzb20vI3Jlc29sdmVkLXZhbHVlc1xuXHRcdGlmICggIXN1cHBvcnQucGl4ZWxCb3hTdHlsZXMoKSAmJiBybnVtbm9ucHgudGVzdCggcmV0ICkgJiYgcmJveFN0eWxlLnRlc3QoIG5hbWUgKSApIHtcblxuXHRcdFx0Ly8gUmVtZW1iZXIgdGhlIG9yaWdpbmFsIHZhbHVlc1xuXHRcdFx0d2lkdGggPSBzdHlsZS53aWR0aDtcblx0XHRcdG1pbldpZHRoID0gc3R5bGUubWluV2lkdGg7XG5cdFx0XHRtYXhXaWR0aCA9IHN0eWxlLm1heFdpZHRoO1xuXG5cdFx0XHQvLyBQdXQgaW4gdGhlIG5ldyB2YWx1ZXMgdG8gZ2V0IGEgY29tcHV0ZWQgdmFsdWUgb3V0XG5cdFx0XHRzdHlsZS5taW5XaWR0aCA9IHN0eWxlLm1heFdpZHRoID0gc3R5bGUud2lkdGggPSByZXQ7XG5cdFx0XHRyZXQgPSBjb21wdXRlZC53aWR0aDtcblxuXHRcdFx0Ly8gUmV2ZXJ0IHRoZSBjaGFuZ2VkIHZhbHVlc1xuXHRcdFx0c3R5bGUud2lkdGggPSB3aWR0aDtcblx0XHRcdHN0eWxlLm1pbldpZHRoID0gbWluV2lkdGg7XG5cdFx0XHRzdHlsZS5tYXhXaWR0aCA9IG1heFdpZHRoO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiByZXQgIT09IHVuZGVmaW5lZCA/XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdFx0Ly8gSUUgcmV0dXJucyB6SW5kZXggdmFsdWUgYXMgYW4gaW50ZWdlci5cblx0XHRyZXQgKyBcIlwiIDpcblx0XHRyZXQ7XG59XG5cblxuZnVuY3Rpb24gYWRkR2V0SG9va0lmKCBjb25kaXRpb25GbiwgaG9va0ZuICkge1xuXG5cdC8vIERlZmluZSB0aGUgaG9vaywgd2UnbGwgY2hlY2sgb24gdGhlIGZpcnN0IHJ1biBpZiBpdCdzIHJlYWxseSBuZWVkZWQuXG5cdHJldHVybiB7XG5cdFx0Z2V0OiBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggY29uZGl0aW9uRm4oKSApIHtcblxuXHRcdFx0XHQvLyBIb29rIG5vdCBuZWVkZWQgKG9yIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHVzZSBpdCBkdWVcblx0XHRcdFx0Ly8gdG8gbWlzc2luZyBkZXBlbmRlbmN5KSwgcmVtb3ZlIGl0LlxuXHRcdFx0XHRkZWxldGUgdGhpcy5nZXQ7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSG9vayBuZWVkZWQ7IHJlZGVmaW5lIGl0IHNvIHRoYXQgdGhlIHN1cHBvcnQgdGVzdCBpcyBub3QgZXhlY3V0ZWQgYWdhaW4uXG5cdFx0XHRyZXR1cm4gKCB0aGlzLmdldCA9IGhvb2tGbiApLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHR9XG5cdH07XG59XG5cblxudmFyIGNzc1ByZWZpeGVzID0gWyBcIldlYmtpdFwiLCBcIk1velwiLCBcIm1zXCIgXSxcblx0ZW1wdHlTdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKS5zdHlsZSxcblx0dmVuZG9yUHJvcHMgPSB7fTtcblxuLy8gUmV0dXJuIGEgdmVuZG9yLXByZWZpeGVkIHByb3BlcnR5IG9yIHVuZGVmaW5lZFxuZnVuY3Rpb24gdmVuZG9yUHJvcE5hbWUoIG5hbWUgKSB7XG5cblx0Ly8gQ2hlY2sgZm9yIHZlbmRvciBwcmVmaXhlZCBuYW1lc1xuXHR2YXIgY2FwTmFtZSA9IG5hbWVbIDAgXS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSggMSApLFxuXHRcdGkgPSBjc3NQcmVmaXhlcy5sZW5ndGg7XG5cblx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0bmFtZSA9IGNzc1ByZWZpeGVzWyBpIF0gKyBjYXBOYW1lO1xuXHRcdGlmICggbmFtZSBpbiBlbXB0eVN0eWxlICkge1xuXHRcdFx0cmV0dXJuIG5hbWU7XG5cdFx0fVxuXHR9XG59XG5cbi8vIFJldHVybiBhIHBvdGVudGlhbGx5LW1hcHBlZCBqUXVlcnkuY3NzUHJvcHMgb3IgdmVuZG9yIHByZWZpeGVkIHByb3BlcnR5XG5mdW5jdGlvbiBmaW5hbFByb3BOYW1lKCBuYW1lICkge1xuXHR2YXIgZmluYWwgPSBqUXVlcnkuY3NzUHJvcHNbIG5hbWUgXSB8fCB2ZW5kb3JQcm9wc1sgbmFtZSBdO1xuXG5cdGlmICggZmluYWwgKSB7XG5cdFx0cmV0dXJuIGZpbmFsO1xuXHR9XG5cdGlmICggbmFtZSBpbiBlbXB0eVN0eWxlICkge1xuXHRcdHJldHVybiBuYW1lO1xuXHR9XG5cdHJldHVybiB2ZW5kb3JQcm9wc1sgbmFtZSBdID0gdmVuZG9yUHJvcE5hbWUoIG5hbWUgKSB8fCBuYW1lO1xufVxuXG5cbnZhclxuXG5cdC8vIFN3YXBwYWJsZSBpZiBkaXNwbGF5IGlzIG5vbmUgb3Igc3RhcnRzIHdpdGggdGFibGVcblx0Ly8gZXhjZXB0IFwidGFibGVcIiwgXCJ0YWJsZS1jZWxsXCIsIG9yIFwidGFibGUtY2FwdGlvblwiXG5cdC8vIFNlZSBoZXJlIGZvciBkaXNwbGF5IHZhbHVlczogaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9DU1MvZGlzcGxheVxuXHRyZGlzcGxheXN3YXAgPSAvXihub25lfHRhYmxlKD8hLWNbZWFdKS4rKS8sXG5cdHJjdXN0b21Qcm9wID0gL14tLS8sXG5cdGNzc1Nob3cgPSB7IHBvc2l0aW9uOiBcImFic29sdXRlXCIsIHZpc2liaWxpdHk6IFwiaGlkZGVuXCIsIGRpc3BsYXk6IFwiYmxvY2tcIiB9LFxuXHRjc3NOb3JtYWxUcmFuc2Zvcm0gPSB7XG5cdFx0bGV0dGVyU3BhY2luZzogXCIwXCIsXG5cdFx0Zm9udFdlaWdodDogXCI0MDBcIlxuXHR9O1xuXG5mdW5jdGlvbiBzZXRQb3NpdGl2ZU51bWJlciggX2VsZW0sIHZhbHVlLCBzdWJ0cmFjdCApIHtcblxuXHQvLyBBbnkgcmVsYXRpdmUgKCsvLSkgdmFsdWVzIGhhdmUgYWxyZWFkeSBiZWVuXG5cdC8vIG5vcm1hbGl6ZWQgYXQgdGhpcyBwb2ludFxuXHR2YXIgbWF0Y2hlcyA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKTtcblx0cmV0dXJuIG1hdGNoZXMgP1xuXG5cdFx0Ly8gR3VhcmQgYWdhaW5zdCB1bmRlZmluZWQgXCJzdWJ0cmFjdFwiLCBlLmcuLCB3aGVuIHVzZWQgYXMgaW4gY3NzSG9va3Ncblx0XHRNYXRoLm1heCggMCwgbWF0Y2hlc1sgMiBdIC0gKCBzdWJ0cmFjdCB8fCAwICkgKSArICggbWF0Y2hlc1sgMyBdIHx8IFwicHhcIiApIDpcblx0XHR2YWx1ZTtcbn1cblxuZnVuY3Rpb24gYm94TW9kZWxBZGp1c3RtZW50KCBlbGVtLCBkaW1lbnNpb24sIGJveCwgaXNCb3JkZXJCb3gsIHN0eWxlcywgY29tcHV0ZWRWYWwgKSB7XG5cdHZhciBpID0gZGltZW5zaW9uID09PSBcIndpZHRoXCIgPyAxIDogMCxcblx0XHRleHRyYSA9IDAsXG5cdFx0ZGVsdGEgPSAwO1xuXG5cdC8vIEFkanVzdG1lbnQgbWF5IG5vdCBiZSBuZWNlc3Nhcnlcblx0aWYgKCBib3ggPT09ICggaXNCb3JkZXJCb3ggPyBcImJvcmRlclwiIDogXCJjb250ZW50XCIgKSApIHtcblx0XHRyZXR1cm4gMDtcblx0fVxuXG5cdGZvciAoIDsgaSA8IDQ7IGkgKz0gMiApIHtcblxuXHRcdC8vIEJvdGggYm94IG1vZGVscyBleGNsdWRlIG1hcmdpblxuXHRcdGlmICggYm94ID09PSBcIm1hcmdpblwiICkge1xuXHRcdFx0ZGVsdGEgKz0galF1ZXJ5LmNzcyggZWxlbSwgYm94ICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXHRcdH1cblxuXHRcdC8vIElmIHdlIGdldCBoZXJlIHdpdGggYSBjb250ZW50LWJveCwgd2UncmUgc2Vla2luZyBcInBhZGRpbmdcIiBvciBcImJvcmRlclwiIG9yIFwibWFyZ2luXCJcblx0XHRpZiAoICFpc0JvcmRlckJveCApIHtcblxuXHRcdFx0Ly8gQWRkIHBhZGRpbmdcblx0XHRcdGRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwicGFkZGluZ1wiICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXG5cdFx0XHQvLyBGb3IgXCJib3JkZXJcIiBvciBcIm1hcmdpblwiLCBhZGQgYm9yZGVyXG5cdFx0XHRpZiAoIGJveCAhPT0gXCJwYWRkaW5nXCIgKSB7XG5cdFx0XHRcdGRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cblx0XHRcdC8vIEJ1dCBzdGlsbCBrZWVwIHRyYWNrIG9mIGl0IG90aGVyd2lzZVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZXh0cmEgKz0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3JkZXJcIiArIGNzc0V4cGFuZFsgaSBdICsgXCJXaWR0aFwiLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblxuXHRcdC8vIElmIHdlIGdldCBoZXJlIHdpdGggYSBib3JkZXItYm94IChjb250ZW50ICsgcGFkZGluZyArIGJvcmRlciksIHdlJ3JlIHNlZWtpbmcgXCJjb250ZW50XCIgb3Jcblx0XHQvLyBcInBhZGRpbmdcIiBvciBcIm1hcmdpblwiXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gRm9yIFwiY29udGVudFwiLCBzdWJ0cmFjdCBwYWRkaW5nXG5cdFx0XHRpZiAoIGJveCA9PT0gXCJjb250ZW50XCIgKSB7XG5cdFx0XHRcdGRlbHRhIC09IGpRdWVyeS5jc3MoIGVsZW0sIFwicGFkZGluZ1wiICsgY3NzRXhwYW5kWyBpIF0sIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBGb3IgXCJjb250ZW50XCIgb3IgXCJwYWRkaW5nXCIsIHN1YnRyYWN0IGJvcmRlclxuXHRcdFx0aWYgKCBib3ggIT09IFwibWFyZ2luXCIgKSB7XG5cdFx0XHRcdGRlbHRhIC09IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQWNjb3VudCBmb3IgcG9zaXRpdmUgY29udGVudC1ib3ggc2Nyb2xsIGd1dHRlciB3aGVuIHJlcXVlc3RlZCBieSBwcm92aWRpbmcgY29tcHV0ZWRWYWxcblx0aWYgKCAhaXNCb3JkZXJCb3ggJiYgY29tcHV0ZWRWYWwgPj0gMCApIHtcblxuXHRcdC8vIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBpcyBhIHJvdW5kZWQgc3VtIG9mIGNvbnRlbnQsIHBhZGRpbmcsIHNjcm9sbCBndXR0ZXIsIGFuZCBib3JkZXJcblx0XHQvLyBBc3N1bWluZyBpbnRlZ2VyIHNjcm9sbCBndXR0ZXIsIHN1YnRyYWN0IHRoZSByZXN0IGFuZCByb3VuZCBkb3duXG5cdFx0ZGVsdGEgKz0gTWF0aC5tYXgoIDAsIE1hdGguY2VpbChcblx0XHRcdGVsZW1bIFwib2Zmc2V0XCIgKyBkaW1lbnNpb25bIDAgXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKCAxICkgXSAtXG5cdFx0XHRjb21wdXRlZFZhbCAtXG5cdFx0XHRkZWx0YSAtXG5cdFx0XHRleHRyYSAtXG5cdFx0XHQwLjVcblxuXHRcdC8vIElmIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBpcyB1bmtub3duLCB0aGVuIHdlIGNhbid0IGRldGVybWluZSBjb250ZW50LWJveCBzY3JvbGwgZ3V0dGVyXG5cdFx0Ly8gVXNlIGFuIGV4cGxpY2l0IHplcm8gdG8gYXZvaWQgTmFOIChnaC0zOTY0KVxuXHRcdCkgKSB8fCAwO1xuXHR9XG5cblx0cmV0dXJuIGRlbHRhO1xufVxuXG5mdW5jdGlvbiBnZXRXaWR0aE9ySGVpZ2h0KCBlbGVtLCBkaW1lbnNpb24sIGV4dHJhICkge1xuXG5cdC8vIFN0YXJ0IHdpdGggY29tcHV0ZWQgc3R5bGVcblx0dmFyIHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApLFxuXG5cdFx0Ly8gVG8gYXZvaWQgZm9yY2luZyBhIHJlZmxvdywgb25seSBmZXRjaCBib3hTaXppbmcgaWYgd2UgbmVlZCBpdCAoZ2gtNDMyMikuXG5cdFx0Ly8gRmFrZSBjb250ZW50LWJveCB1bnRpbCB3ZSBrbm93IGl0J3MgbmVlZGVkIHRvIGtub3cgdGhlIHRydWUgdmFsdWUuXG5cdFx0Ym94U2l6aW5nTmVlZGVkID0gIXN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGUoKSB8fCBleHRyYSxcblx0XHRpc0JvcmRlckJveCA9IGJveFNpemluZ05lZWRlZCAmJlxuXHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIixcblx0XHR2YWx1ZUlzQm9yZGVyQm94ID0gaXNCb3JkZXJCb3gsXG5cblx0XHR2YWwgPSBjdXJDU1MoIGVsZW0sIGRpbWVuc2lvbiwgc3R5bGVzICksXG5cdFx0b2Zmc2V0UHJvcCA9IFwib2Zmc2V0XCIgKyBkaW1lbnNpb25bIDAgXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKCAxICk7XG5cblx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTU0XG5cdC8vIFJldHVybiBhIGNvbmZvdW5kaW5nIG5vbi1waXhlbCB2YWx1ZSBvciBmZWlnbiBpZ25vcmFuY2UsIGFzIGFwcHJvcHJpYXRlLlxuXHRpZiAoIHJudW1ub25weC50ZXN0KCB2YWwgKSApIHtcblx0XHRpZiAoICFleHRyYSApIHtcblx0XHRcdHJldHVybiB2YWw7XG5cdFx0fVxuXHRcdHZhbCA9IFwiYXV0b1wiO1xuXHR9XG5cblxuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seVxuXHQvLyBVc2Ugb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGZvciB3aGVuIGJveCBzaXppbmcgaXMgdW5yZWxpYWJsZS5cblx0Ly8gSW4gdGhvc2UgY2FzZXMsIHRoZSBjb21wdXRlZCB2YWx1ZSBjYW4gYmUgdHJ1c3RlZCB0byBiZSBib3JkZXItYm94LlxuXHRpZiAoICggIXN1cHBvcnQuYm94U2l6aW5nUmVsaWFibGUoKSAmJiBpc0JvcmRlckJveCB8fFxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgMTAgLSAxMSssIEVkZ2UgMTUgLSAxOCtcblx0XHQvLyBJRS9FZGdlIG1pc3JlcG9ydCBgZ2V0Q29tcHV0ZWRTdHlsZWAgb2YgdGFibGUgcm93cyB3aXRoIHdpZHRoL2hlaWdodFxuXHRcdC8vIHNldCBpbiBDU1Mgd2hpbGUgYG9mZnNldCpgIHByb3BlcnRpZXMgcmVwb3J0IGNvcnJlY3QgdmFsdWVzLlxuXHRcdC8vIEludGVyZXN0aW5nbHksIGluIHNvbWUgY2FzZXMgSUUgOSBkb2Vzbid0IHN1ZmZlciBmcm9tIHRoaXMgaXNzdWUuXG5cdFx0IXN1cHBvcnQucmVsaWFibGVUckRpbWVuc2lvbnMoKSAmJiBub2RlTmFtZSggZWxlbSwgXCJ0clwiICkgfHxcblxuXHRcdC8vIEZhbGwgYmFjayB0byBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgd2hlbiB2YWx1ZSBpcyBcImF1dG9cIlxuXHRcdC8vIFRoaXMgaGFwcGVucyBmb3IgaW5saW5lIGVsZW1lbnRzIHdpdGggbm8gZXhwbGljaXQgc2V0dGluZyAoZ2gtMzU3MSlcblx0XHR2YWwgPT09IFwiYXV0b1wiIHx8XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4xIC0gNC4zIG9ubHlcblx0XHQvLyBBbHNvIHVzZSBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgZm9yIG1pc3JlcG9ydGVkIGlubGluZSBkaW1lbnNpb25zIChnaC0zNjAyKVxuXHRcdCFwYXJzZUZsb2F0KCB2YWwgKSAmJiBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImlubGluZVwiICkgJiZcblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGUgZWxlbWVudCBpcyB2aXNpYmxlICYgY29ubmVjdGVkXG5cdFx0ZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApIHtcblxuXHRcdGlzQm9yZGVyQm94ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIjtcblxuXHRcdC8vIFdoZXJlIGF2YWlsYWJsZSwgb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGFwcHJveGltYXRlIGJvcmRlciBib3ggZGltZW5zaW9ucy5cblx0XHQvLyBXaGVyZSBub3QgYXZhaWxhYmxlIChlLmcuLCBTVkcpLCBhc3N1bWUgdW5yZWxpYWJsZSBib3gtc2l6aW5nIGFuZCBpbnRlcnByZXQgdGhlXG5cdFx0Ly8gcmV0cmlldmVkIHZhbHVlIGFzIGEgY29udGVudCBib3ggZGltZW5zaW9uLlxuXHRcdHZhbHVlSXNCb3JkZXJCb3ggPSBvZmZzZXRQcm9wIGluIGVsZW07XG5cdFx0aWYgKCB2YWx1ZUlzQm9yZGVyQm94ICkge1xuXHRcdFx0dmFsID0gZWxlbVsgb2Zmc2V0UHJvcCBdO1xuXHRcdH1cblx0fVxuXG5cdC8vIE5vcm1hbGl6ZSBcIlwiIGFuZCBhdXRvXG5cdHZhbCA9IHBhcnNlRmxvYXQoIHZhbCApIHx8IDA7XG5cblx0Ly8gQWRqdXN0IGZvciB0aGUgZWxlbWVudCdzIGJveCBtb2RlbFxuXHRyZXR1cm4gKCB2YWwgK1xuXHRcdGJveE1vZGVsQWRqdXN0bWVudChcblx0XHRcdGVsZW0sXG5cdFx0XHRkaW1lbnNpb24sXG5cdFx0XHRleHRyYSB8fCAoIGlzQm9yZGVyQm94ID8gXCJib3JkZXJcIiA6IFwiY29udGVudFwiICksXG5cdFx0XHR2YWx1ZUlzQm9yZGVyQm94LFxuXHRcdFx0c3R5bGVzLFxuXG5cdFx0XHQvLyBQcm92aWRlIHRoZSBjdXJyZW50IGNvbXB1dGVkIHNpemUgdG8gcmVxdWVzdCBzY3JvbGwgZ3V0dGVyIGNhbGN1bGF0aW9uIChnaC0zNTg5KVxuXHRcdFx0dmFsXG5cdFx0KVxuXHQpICsgXCJweFwiO1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gQWRkIGluIHN0eWxlIHByb3BlcnR5IGhvb2tzIGZvciBvdmVycmlkaW5nIHRoZSBkZWZhdWx0XG5cdC8vIGJlaGF2aW9yIG9mIGdldHRpbmcgYW5kIHNldHRpbmcgYSBzdHlsZSBwcm9wZXJ0eVxuXHRjc3NIb29rczoge1xuXHRcdG9wYWNpdHk6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xuXHRcdFx0XHRpZiAoIGNvbXB1dGVkICkge1xuXG5cdFx0XHRcdFx0Ly8gV2Ugc2hvdWxkIGFsd2F5cyBnZXQgYSBudW1iZXIgYmFjayBmcm9tIG9wYWNpdHlcblx0XHRcdFx0XHR2YXIgcmV0ID0gY3VyQ1NTKCBlbGVtLCBcIm9wYWNpdHlcIiApO1xuXHRcdFx0XHRcdHJldHVybiByZXQgPT09IFwiXCIgPyBcIjFcIiA6IHJldDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHQvLyBEb24ndCBhdXRvbWF0aWNhbGx5IGFkZCBcInB4XCIgdG8gdGhlc2UgcG9zc2libHktdW5pdGxlc3MgcHJvcGVydGllc1xuXHRjc3NOdW1iZXI6IHtcblx0XHRcImFuaW1hdGlvbkl0ZXJhdGlvbkNvdW50XCI6IHRydWUsXG5cdFx0XCJjb2x1bW5Db3VudFwiOiB0cnVlLFxuXHRcdFwiZmlsbE9wYWNpdHlcIjogdHJ1ZSxcblx0XHRcImZsZXhHcm93XCI6IHRydWUsXG5cdFx0XCJmbGV4U2hyaW5rXCI6IHRydWUsXG5cdFx0XCJmb250V2VpZ2h0XCI6IHRydWUsXG5cdFx0XCJncmlkQXJlYVwiOiB0cnVlLFxuXHRcdFwiZ3JpZENvbHVtblwiOiB0cnVlLFxuXHRcdFwiZ3JpZENvbHVtbkVuZFwiOiB0cnVlLFxuXHRcdFwiZ3JpZENvbHVtblN0YXJ0XCI6IHRydWUsXG5cdFx0XCJncmlkUm93XCI6IHRydWUsXG5cdFx0XCJncmlkUm93RW5kXCI6IHRydWUsXG5cdFx0XCJncmlkUm93U3RhcnRcIjogdHJ1ZSxcblx0XHRcImxpbmVIZWlnaHRcIjogdHJ1ZSxcblx0XHRcIm9wYWNpdHlcIjogdHJ1ZSxcblx0XHRcIm9yZGVyXCI6IHRydWUsXG5cdFx0XCJvcnBoYW5zXCI6IHRydWUsXG5cdFx0XCJ3aWRvd3NcIjogdHJ1ZSxcblx0XHRcInpJbmRleFwiOiB0cnVlLFxuXHRcdFwiem9vbVwiOiB0cnVlXG5cdH0sXG5cblx0Ly8gQWRkIGluIHByb3BlcnRpZXMgd2hvc2UgbmFtZXMgeW91IHdpc2ggdG8gZml4IGJlZm9yZVxuXHQvLyBzZXR0aW5nIG9yIGdldHRpbmcgdGhlIHZhbHVlXG5cdGNzc1Byb3BzOiB7fSxcblxuXHQvLyBHZXQgYW5kIHNldCB0aGUgc3R5bGUgcHJvcGVydHkgb24gYSBET00gTm9kZVxuXHRzdHlsZTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlLCBleHRyYSApIHtcblxuXHRcdC8vIERvbid0IHNldCBzdHlsZXMgb24gdGV4dCBhbmQgY29tbWVudCBub2Rlc1xuXHRcdGlmICggIWVsZW0gfHwgZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4IHx8ICFlbGVtLnN0eWxlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZVxuXHRcdHZhciByZXQsIHR5cGUsIGhvb2tzLFxuXHRcdFx0b3JpZ05hbWUgPSBjYW1lbENhc2UoIG5hbWUgKSxcblx0XHRcdGlzQ3VzdG9tUHJvcCA9IHJjdXN0b21Qcm9wLnRlc3QoIG5hbWUgKSxcblx0XHRcdHN0eWxlID0gZWxlbS5zdHlsZTtcblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZS4gV2UgZG9uJ3Rcblx0XHQvLyB3YW50IHRvIHF1ZXJ5IHRoZSB2YWx1ZSBpZiBpdCBpcyBhIENTUyBjdXN0b20gcHJvcGVydHlcblx0XHQvLyBzaW5jZSB0aGV5IGFyZSB1c2VyLWRlZmluZWQuXG5cdFx0aWYgKCAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0bmFtZSA9IGZpbmFsUHJvcE5hbWUoIG9yaWdOYW1lICk7XG5cdFx0fVxuXG5cdFx0Ly8gR2V0cyBob29rIGZvciB0aGUgcHJlZml4ZWQgdmVyc2lvbiwgdGhlbiB1bnByZWZpeGVkIHZlcnNpb25cblx0XHRob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdIHx8IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUgXTtcblxuXHRcdC8vIENoZWNrIGlmIHdlJ3JlIHNldHRpbmcgYSB2YWx1ZVxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHR5cGUgPSB0eXBlb2YgdmFsdWU7XG5cblx0XHRcdC8vIENvbnZlcnQgXCIrPVwiIG9yIFwiLT1cIiB0byByZWxhdGl2ZSBudW1iZXJzICgjNzM0NSlcblx0XHRcdGlmICggdHlwZSA9PT0gXCJzdHJpbmdcIiAmJiAoIHJldCA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKSApICYmIHJldFsgMSBdICkge1xuXHRcdFx0XHR2YWx1ZSA9IGFkanVzdENTUyggZWxlbSwgbmFtZSwgcmV0ICk7XG5cblx0XHRcdFx0Ly8gRml4ZXMgYnVnICM5MjM3XG5cdFx0XHRcdHR5cGUgPSBcIm51bWJlclwiO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBNYWtlIHN1cmUgdGhhdCBudWxsIGFuZCBOYU4gdmFsdWVzIGFyZW4ndCBzZXQgKCM3MTE2KVxuXHRcdFx0aWYgKCB2YWx1ZSA9PSBudWxsIHx8IHZhbHVlICE9PSB2YWx1ZSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBhIG51bWJlciB3YXMgcGFzc2VkIGluLCBhZGQgdGhlIHVuaXQgKGV4Y2VwdCBmb3IgY2VydGFpbiBDU1MgcHJvcGVydGllcylcblx0XHRcdC8vIFRoZSBpc0N1c3RvbVByb3AgY2hlY2sgY2FuIGJlIHJlbW92ZWQgaW4galF1ZXJ5IDQuMCB3aGVuIHdlIG9ubHkgYXV0by1hcHBlbmRcblx0XHRcdC8vIFwicHhcIiB0byBhIGZldyBoYXJkY29kZWQgdmFsdWVzLlxuXHRcdFx0aWYgKCB0eXBlID09PSBcIm51bWJlclwiICYmICFpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRcdHZhbHVlICs9IHJldCAmJiByZXRbIDMgXSB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIG9yaWdOYW1lIF0gPyBcIlwiIDogXCJweFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIGJhY2tncm91bmQtKiBwcm9wcyBhZmZlY3Qgb3JpZ2luYWwgY2xvbmUncyB2YWx1ZXNcblx0XHRcdGlmICggIXN1cHBvcnQuY2xlYXJDbG9uZVN0eWxlICYmIHZhbHVlID09PSBcIlwiICYmIG5hbWUuaW5kZXhPZiggXCJiYWNrZ3JvdW5kXCIgKSA9PT0gMCApIHtcblx0XHRcdFx0c3R5bGVbIG5hbWUgXSA9IFwiaW5oZXJpdFwiO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkLCB1c2UgdGhhdCB2YWx1ZSwgb3RoZXJ3aXNlIGp1c3Qgc2V0IHRoZSBzcGVjaWZpZWQgdmFsdWVcblx0XHRcdGlmICggIWhvb2tzIHx8ICEoIFwic2V0XCIgaW4gaG9va3MgKSB8fFxuXHRcdFx0XHQoIHZhbHVlID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdFx0aWYgKCBpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRcdFx0c3R5bGUuc2V0UHJvcGVydHkoIG5hbWUsIHZhbHVlICk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c3R5bGVbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgbm9uLWNvbXB1dGVkIHZhbHVlIGZyb20gdGhlcmVcblx0XHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgZmFsc2UsIGV4dHJhICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE90aGVyd2lzZSBqdXN0IGdldCB0aGUgdmFsdWUgZnJvbSB0aGUgc3R5bGUgb2JqZWN0XG5cdFx0XHRyZXR1cm4gc3R5bGVbIG5hbWUgXTtcblx0XHR9XG5cdH0sXG5cblx0Y3NzOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgZXh0cmEsIHN0eWxlcyApIHtcblx0XHR2YXIgdmFsLCBudW0sIGhvb2tzLFxuXHRcdFx0b3JpZ05hbWUgPSBjYW1lbENhc2UoIG5hbWUgKSxcblx0XHRcdGlzQ3VzdG9tUHJvcCA9IHJjdXN0b21Qcm9wLnRlc3QoIG5hbWUgKTtcblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCB0aGUgcmlnaHQgbmFtZS4gV2UgZG9uJ3Rcblx0XHQvLyB3YW50IHRvIG1vZGlmeSB0aGUgdmFsdWUgaWYgaXQgaXMgYSBDU1MgY3VzdG9tIHByb3BlcnR5XG5cdFx0Ly8gc2luY2UgdGhleSBhcmUgdXNlci1kZWZpbmVkLlxuXHRcdGlmICggIWlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdG5hbWUgPSBmaW5hbFByb3BOYW1lKCBvcmlnTmFtZSApO1xuXHRcdH1cblxuXHRcdC8vIFRyeSBwcmVmaXhlZCBuYW1lIGZvbGxvd2VkIGJ5IHRoZSB1bnByZWZpeGVkIG5hbWVcblx0XHRob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdIHx8IGpRdWVyeS5jc3NIb29rc1sgb3JpZ05hbWUgXTtcblxuXHRcdC8vIElmIGEgaG9vayB3YXMgcHJvdmlkZWQgZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICkge1xuXHRcdFx0dmFsID0gaG9va3MuZ2V0KCBlbGVtLCB0cnVlLCBleHRyYSApO1xuXHRcdH1cblxuXHRcdC8vIE90aGVyd2lzZSwgaWYgYSB3YXkgdG8gZ2V0IHRoZSBjb21wdXRlZCB2YWx1ZSBleGlzdHMsIHVzZSB0aGF0XG5cdFx0aWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdHZhbCA9IGN1ckNTUyggZWxlbSwgbmFtZSwgc3R5bGVzICk7XG5cdFx0fVxuXG5cdFx0Ly8gQ29udmVydCBcIm5vcm1hbFwiIHRvIGNvbXB1dGVkIHZhbHVlXG5cdFx0aWYgKCB2YWwgPT09IFwibm9ybWFsXCIgJiYgbmFtZSBpbiBjc3NOb3JtYWxUcmFuc2Zvcm0gKSB7XG5cdFx0XHR2YWwgPSBjc3NOb3JtYWxUcmFuc2Zvcm1bIG5hbWUgXTtcblx0XHR9XG5cblx0XHQvLyBNYWtlIG51bWVyaWMgaWYgZm9yY2VkIG9yIGEgcXVhbGlmaWVyIHdhcyBwcm92aWRlZCBhbmQgdmFsIGxvb2tzIG51bWVyaWNcblx0XHRpZiAoIGV4dHJhID09PSBcIlwiIHx8IGV4dHJhICkge1xuXHRcdFx0bnVtID0gcGFyc2VGbG9hdCggdmFsICk7XG5cdFx0XHRyZXR1cm4gZXh0cmEgPT09IHRydWUgfHwgaXNGaW5pdGUoIG51bSApID8gbnVtIHx8IDAgOiB2YWw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHZhbDtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcImhlaWdodFwiLCBcIndpZHRoXCIgXSwgZnVuY3Rpb24oIF9pLCBkaW1lbnNpb24gKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgZGltZW5zaW9uIF0gPSB7XG5cdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQsIGV4dHJhICkge1xuXHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblxuXHRcdFx0XHQvLyBDZXJ0YWluIGVsZW1lbnRzIGNhbiBoYXZlIGRpbWVuc2lvbiBpbmZvIGlmIHdlIGludmlzaWJseSBzaG93IHRoZW1cblx0XHRcdFx0Ly8gYnV0IGl0IG11c3QgaGF2ZSBhIGN1cnJlbnQgZGlzcGxheSBzdHlsZSB0aGF0IHdvdWxkIGJlbmVmaXRcblx0XHRcdFx0cmV0dXJuIHJkaXNwbGF5c3dhcC50ZXN0KCBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApICkgJiZcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA4K1xuXHRcdFx0XHRcdC8vIFRhYmxlIGNvbHVtbnMgaW4gU2FmYXJpIGhhdmUgbm9uLXplcm8gb2Zmc2V0V2lkdGggJiB6ZXJvXG5cdFx0XHRcdFx0Ly8gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggdW5sZXNzIGRpc3BsYXkgaXMgY2hhbmdlZC5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0XHRcdFx0XHQvLyBSdW5uaW5nIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlXG5cdFx0XHRcdFx0Ly8gaW4gSUUgdGhyb3dzIGFuIGVycm9yLlxuXHRcdFx0XHRcdCggIWVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggfHwgIWVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggKSA/XG5cdFx0XHRcdFx0c3dhcCggZWxlbSwgY3NzU2hvdywgZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApO1xuXHRcdFx0XHRcdH0gKSA6XG5cdFx0XHRcdFx0Z2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApO1xuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgZXh0cmEgKSB7XG5cdFx0XHR2YXIgbWF0Y2hlcyxcblx0XHRcdFx0c3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICksXG5cblx0XHRcdFx0Ly8gT25seSByZWFkIHN0eWxlcy5wb3NpdGlvbiBpZiB0aGUgdGVzdCBoYXMgYSBjaGFuY2UgdG8gZmFpbFxuXHRcdFx0XHQvLyB0byBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LlxuXHRcdFx0XHRzY3JvbGxib3hTaXplQnVnZ3kgPSAhc3VwcG9ydC5zY3JvbGxib3hTaXplKCkgJiZcblx0XHRcdFx0XHRzdHlsZXMucG9zaXRpb24gPT09IFwiYWJzb2x1dGVcIixcblxuXHRcdFx0XHQvLyBUbyBhdm9pZCBmb3JjaW5nIGEgcmVmbG93LCBvbmx5IGZldGNoIGJveFNpemluZyBpZiB3ZSBuZWVkIGl0IChnaC0zOTkxKVxuXHRcdFx0XHRib3hTaXppbmdOZWVkZWQgPSBzY3JvbGxib3hTaXplQnVnZ3kgfHwgZXh0cmEsXG5cdFx0XHRcdGlzQm9yZGVyQm94ID0gYm94U2l6aW5nTmVlZGVkICYmXG5cdFx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgXCJib3hTaXppbmdcIiwgZmFsc2UsIHN0eWxlcyApID09PSBcImJvcmRlci1ib3hcIixcblx0XHRcdFx0c3VidHJhY3QgPSBleHRyYSA/XG5cdFx0XHRcdFx0Ym94TW9kZWxBZGp1c3RtZW50KFxuXHRcdFx0XHRcdFx0ZWxlbSxcblx0XHRcdFx0XHRcdGRpbWVuc2lvbixcblx0XHRcdFx0XHRcdGV4dHJhLFxuXHRcdFx0XHRcdFx0aXNCb3JkZXJCb3gsXG5cdFx0XHRcdFx0XHRzdHlsZXNcblx0XHRcdFx0XHQpIDpcblx0XHRcdFx0XHQwO1xuXG5cdFx0XHQvLyBBY2NvdW50IGZvciB1bnJlbGlhYmxlIGJvcmRlci1ib3ggZGltZW5zaW9ucyBieSBjb21wYXJpbmcgb2Zmc2V0KiB0byBjb21wdXRlZCBhbmRcblx0XHRcdC8vIGZha2luZyBhIGNvbnRlbnQtYm94IHRvIGdldCBib3JkZXIgYW5kIHBhZGRpbmcgKGdoLTM2OTkpXG5cdFx0XHRpZiAoIGlzQm9yZGVyQm94ICYmIHNjcm9sbGJveFNpemVCdWdneSApIHtcblx0XHRcdFx0c3VidHJhY3QgLT0gTWF0aC5jZWlsKFxuXHRcdFx0XHRcdGVsZW1bIFwib2Zmc2V0XCIgKyBkaW1lbnNpb25bIDAgXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKCAxICkgXSAtXG5cdFx0XHRcdFx0cGFyc2VGbG9hdCggc3R5bGVzWyBkaW1lbnNpb24gXSApIC1cblx0XHRcdFx0XHRib3hNb2RlbEFkanVzdG1lbnQoIGVsZW0sIGRpbWVuc2lvbiwgXCJib3JkZXJcIiwgZmFsc2UsIHN0eWxlcyApIC1cblx0XHRcdFx0XHQwLjVcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udmVydCB0byBwaXhlbHMgaWYgdmFsdWUgYWRqdXN0bWVudCBpcyBuZWVkZWRcblx0XHRcdGlmICggc3VidHJhY3QgJiYgKCBtYXRjaGVzID0gcmNzc051bS5leGVjKCB2YWx1ZSApICkgJiZcblx0XHRcdFx0KCBtYXRjaGVzWyAzIF0gfHwgXCJweFwiICkgIT09IFwicHhcIiApIHtcblxuXHRcdFx0XHRlbGVtLnN0eWxlWyBkaW1lbnNpb24gXSA9IHZhbHVlO1xuXHRcdFx0XHR2YWx1ZSA9IGpRdWVyeS5jc3MoIGVsZW0sIGRpbWVuc2lvbiApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gc2V0UG9zaXRpdmVOdW1iZXIoIGVsZW0sIHZhbHVlLCBzdWJ0cmFjdCApO1xuXHRcdH1cblx0fTtcbn0gKTtcblxualF1ZXJ5LmNzc0hvb2tzLm1hcmdpbkxlZnQgPSBhZGRHZXRIb29rSWYoIHN1cHBvcnQucmVsaWFibGVNYXJnaW5MZWZ0LFxuXHRmdW5jdGlvbiggZWxlbSwgY29tcHV0ZWQgKSB7XG5cdFx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRcdHJldHVybiAoIHBhcnNlRmxvYXQoIGN1ckNTUyggZWxlbSwgXCJtYXJnaW5MZWZ0XCIgKSApIHx8XG5cdFx0XHRcdGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtXG5cdFx0XHRcdFx0c3dhcCggZWxlbSwgeyBtYXJnaW5MZWZ0OiAwIH0sIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcblx0XHRcdFx0XHR9IClcblx0XHRcdCkgKyBcInB4XCI7XG5cdFx0fVxuXHR9XG4pO1xuXG4vLyBUaGVzZSBob29rcyBhcmUgdXNlZCBieSBhbmltYXRlIHRvIGV4cGFuZCBwcm9wZXJ0aWVzXG5qUXVlcnkuZWFjaCgge1xuXHRtYXJnaW46IFwiXCIsXG5cdHBhZGRpbmc6IFwiXCIsXG5cdGJvcmRlcjogXCJXaWR0aFwiXG59LCBmdW5jdGlvbiggcHJlZml4LCBzdWZmaXggKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgcHJlZml4ICsgc3VmZml4IF0gPSB7XG5cdFx0ZXhwYW5kOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgaSA9IDAsXG5cdFx0XHRcdGV4cGFuZGVkID0ge30sXG5cblx0XHRcdFx0Ly8gQXNzdW1lcyBhIHNpbmdsZSBudW1iZXIgaWYgbm90IGEgc3RyaW5nXG5cdFx0XHRcdHBhcnRzID0gdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiID8gdmFsdWUuc3BsaXQoIFwiIFwiICkgOiBbIHZhbHVlIF07XG5cblx0XHRcdGZvciAoIDsgaSA8IDQ7IGkrKyApIHtcblx0XHRcdFx0ZXhwYW5kZWRbIHByZWZpeCArIGNzc0V4cGFuZFsgaSBdICsgc3VmZml4IF0gPVxuXHRcdFx0XHRcdHBhcnRzWyBpIF0gfHwgcGFydHNbIGkgLSAyIF0gfHwgcGFydHNbIDAgXTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGV4cGFuZGVkO1xuXHRcdH1cblx0fTtcblxuXHRpZiAoIHByZWZpeCAhPT0gXCJtYXJnaW5cIiApIHtcblx0XHRqUXVlcnkuY3NzSG9va3NbIHByZWZpeCArIHN1ZmZpeCBdLnNldCA9IHNldFBvc2l0aXZlTnVtYmVyO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0Y3NzOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdFx0dmFyIHN0eWxlcywgbGVuLFxuXHRcdFx0XHRtYXAgPSB7fSxcblx0XHRcdFx0aSA9IDA7XG5cblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggbmFtZSApICkge1xuXHRcdFx0XHRzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKTtcblx0XHRcdFx0bGVuID0gbmFtZS5sZW5ndGg7XG5cblx0XHRcdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdFx0bWFwWyBuYW1lWyBpIF0gXSA9IGpRdWVyeS5jc3MoIGVsZW0sIG5hbWVbIGkgXSwgZmFsc2UsIHN0eWxlcyApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIG1hcDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUsIHZhbHVlICkgOlxuXHRcdFx0XHRqUXVlcnkuY3NzKCBlbGVtLCBuYW1lICk7XG5cdFx0fSwgbmFtZSwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggPiAxICk7XG5cdH1cbn0gKTtcblxuXG5mdW5jdGlvbiBUd2VlbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcgKSB7XG5cdHJldHVybiBuZXcgVHdlZW4ucHJvdG90eXBlLmluaXQoIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICk7XG59XG5qUXVlcnkuVHdlZW4gPSBUd2VlbjtcblxuVHdlZW4ucHJvdG90eXBlID0ge1xuXHRjb25zdHJ1Y3RvcjogVHdlZW4sXG5cdGluaXQ6IGZ1bmN0aW9uKCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZywgdW5pdCApIHtcblx0XHR0aGlzLmVsZW0gPSBlbGVtO1xuXHRcdHRoaXMucHJvcCA9IHByb3A7XG5cdFx0dGhpcy5lYXNpbmcgPSBlYXNpbmcgfHwgalF1ZXJ5LmVhc2luZy5fZGVmYXVsdDtcblx0XHR0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuXHRcdHRoaXMuc3RhcnQgPSB0aGlzLm5vdyA9IHRoaXMuY3VyKCk7XG5cdFx0dGhpcy5lbmQgPSBlbmQ7XG5cdFx0dGhpcy51bml0ID0gdW5pdCB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSA/IFwiXCIgOiBcInB4XCIgKTtcblx0fSxcblx0Y3VyOiBmdW5jdGlvbigpIHtcblx0XHR2YXIgaG9va3MgPSBUd2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdO1xuXG5cdFx0cmV0dXJuIGhvb2tzICYmIGhvb2tzLmdldCA/XG5cdFx0XHRob29rcy5nZXQoIHRoaXMgKSA6XG5cdFx0XHRUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuZ2V0KCB0aGlzICk7XG5cdH0sXG5cdHJ1bjogZnVuY3Rpb24oIHBlcmNlbnQgKSB7XG5cdFx0dmFyIGVhc2VkLFxuXHRcdFx0aG9va3MgPSBUd2Vlbi5wcm9wSG9va3NbIHRoaXMucHJvcCBdO1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuZHVyYXRpb24gKSB7XG5cdFx0XHR0aGlzLnBvcyA9IGVhc2VkID0galF1ZXJ5LmVhc2luZ1sgdGhpcy5lYXNpbmcgXShcblx0XHRcdFx0cGVyY2VudCwgdGhpcy5vcHRpb25zLmR1cmF0aW9uICogcGVyY2VudCwgMCwgMSwgdGhpcy5vcHRpb25zLmR1cmF0aW9uXG5cdFx0XHQpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnBvcyA9IGVhc2VkID0gcGVyY2VudDtcblx0XHR9XG5cdFx0dGhpcy5ub3cgPSAoIHRoaXMuZW5kIC0gdGhpcy5zdGFydCApICogZWFzZWQgKyB0aGlzLnN0YXJ0O1xuXG5cdFx0aWYgKCB0aGlzLm9wdGlvbnMuc3RlcCApIHtcblx0XHRcdHRoaXMub3B0aW9ucy5zdGVwLmNhbGwoIHRoaXMuZWxlbSwgdGhpcy5ub3csIHRoaXMgKTtcblx0XHR9XG5cblx0XHRpZiAoIGhvb2tzICYmIGhvb2tzLnNldCApIHtcblx0XHRcdGhvb2tzLnNldCggdGhpcyApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRUd2Vlbi5wcm9wSG9va3MuX2RlZmF1bHQuc2V0KCB0aGlzICk7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG59O1xuXG5Ud2Vlbi5wcm90b3R5cGUuaW5pdC5wcm90b3R5cGUgPSBUd2Vlbi5wcm90b3R5cGU7XG5cblR3ZWVuLnByb3BIb29rcyA9IHtcblx0X2RlZmF1bHQ6IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblx0XHRcdHZhciByZXN1bHQ7XG5cblx0XHRcdC8vIFVzZSBhIHByb3BlcnR5IG9uIHRoZSBlbGVtZW50IGRpcmVjdGx5IHdoZW4gaXQgaXMgbm90IGEgRE9NIGVsZW1lbnQsXG5cdFx0XHQvLyBvciB3aGVuIHRoZXJlIGlzIG5vIG1hdGNoaW5nIHN0eWxlIHByb3BlcnR5IHRoYXQgZXhpc3RzLlxuXHRcdFx0aWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlICE9PSAxIHx8XG5cdFx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSAhPSBudWxsICYmIHR3ZWVuLmVsZW0uc3R5bGVbIHR3ZWVuLnByb3AgXSA9PSBudWxsICkge1xuXHRcdFx0XHRyZXR1cm4gdHdlZW4uZWxlbVsgdHdlZW4ucHJvcCBdO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBQYXNzaW5nIGFuIGVtcHR5IHN0cmluZyBhcyBhIDNyZCBwYXJhbWV0ZXIgdG8gLmNzcyB3aWxsIGF1dG9tYXRpY2FsbHlcblx0XHRcdC8vIGF0dGVtcHQgYSBwYXJzZUZsb2F0IGFuZCBmYWxsYmFjayB0byBhIHN0cmluZyBpZiB0aGUgcGFyc2UgZmFpbHMuXG5cdFx0XHQvLyBTaW1wbGUgdmFsdWVzIHN1Y2ggYXMgXCIxMHB4XCIgYXJlIHBhcnNlZCB0byBGbG9hdDtcblx0XHRcdC8vIGNvbXBsZXggdmFsdWVzIHN1Y2ggYXMgXCJyb3RhdGUoMXJhZClcIiBhcmUgcmV0dXJuZWQgYXMtaXMuXG5cdFx0XHRyZXN1bHQgPSBqUXVlcnkuY3NzKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCBcIlwiICk7XG5cblx0XHRcdC8vIEVtcHR5IHN0cmluZ3MsIG51bGwsIHVuZGVmaW5lZCBhbmQgXCJhdXRvXCIgYXJlIGNvbnZlcnRlZCB0byAwLlxuXHRcdFx0cmV0dXJuICFyZXN1bHQgfHwgcmVzdWx0ID09PSBcImF1dG9cIiA/IDAgOiByZXN1bHQ7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uKCB0d2VlbiApIHtcblxuXHRcdFx0Ly8gVXNlIHN0ZXAgaG9vayBmb3IgYmFjayBjb21wYXQuXG5cdFx0XHQvLyBVc2UgY3NzSG9vayBpZiBpdHMgdGhlcmUuXG5cdFx0XHQvLyBVc2UgLnN0eWxlIGlmIGF2YWlsYWJsZSBhbmQgdXNlIHBsYWluIHByb3BlcnRpZXMgd2hlcmUgYXZhaWxhYmxlLlxuXHRcdFx0aWYgKCBqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdICkge1xuXHRcdFx0XHRqUXVlcnkuZnguc3RlcFsgdHdlZW4ucHJvcCBdKCB0d2VlbiApO1xuXHRcdFx0fSBlbHNlIGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAoXG5cdFx0XHRcdGpRdWVyeS5jc3NIb29rc1sgdHdlZW4ucHJvcCBdIHx8XG5cdFx0XHRcdFx0dHdlZW4uZWxlbS5zdHlsZVsgZmluYWxQcm9wTmFtZSggdHdlZW4ucHJvcCApIF0gIT0gbnVsbCApICkge1xuXHRcdFx0XHRqUXVlcnkuc3R5bGUoIHR3ZWVuLmVsZW0sIHR3ZWVuLnByb3AsIHR3ZWVuLm5vdyArIHR3ZWVuLnVuaXQgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdztcblx0XHRcdH1cblx0XHR9XG5cdH1cbn07XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG4vLyBQYW5pYyBiYXNlZCBhcHByb2FjaCB0byBzZXR0aW5nIHRoaW5ncyBvbiBkaXNjb25uZWN0ZWQgbm9kZXNcblR3ZWVuLnByb3BIb29rcy5zY3JvbGxUb3AgPSBUd2Vlbi5wcm9wSG9va3Muc2Nyb2xsTGVmdCA9IHtcblx0c2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XG5cdFx0aWYgKCB0d2Vlbi5lbGVtLm5vZGVUeXBlICYmIHR3ZWVuLmVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXSA9IHR3ZWVuLm5vdztcblx0XHR9XG5cdH1cbn07XG5cbmpRdWVyeS5lYXNpbmcgPSB7XG5cdGxpbmVhcjogZnVuY3Rpb24oIHAgKSB7XG5cdFx0cmV0dXJuIHA7XG5cdH0sXG5cdHN3aW5nOiBmdW5jdGlvbiggcCApIHtcblx0XHRyZXR1cm4gMC41IC0gTWF0aC5jb3MoIHAgKiBNYXRoLlBJICkgLyAyO1xuXHR9LFxuXHRfZGVmYXVsdDogXCJzd2luZ1wiXG59O1xuXG5qUXVlcnkuZnggPSBUd2Vlbi5wcm90b3R5cGUuaW5pdDtcblxuLy8gQmFjayBjb21wYXQgPDEuOCBleHRlbnNpb24gcG9pbnRcbmpRdWVyeS5meC5zdGVwID0ge307XG5cblxuXG5cbnZhclxuXHRmeE5vdywgaW5Qcm9ncmVzcyxcblx0cmZ4dHlwZXMgPSAvXig/OnRvZ2dsZXxzaG93fGhpZGUpJC8sXG5cdHJydW4gPSAvcXVldWVIb29rcyQvO1xuXG5mdW5jdGlvbiBzY2hlZHVsZSgpIHtcblx0aWYgKCBpblByb2dyZXNzICkge1xuXHRcdGlmICggZG9jdW1lbnQuaGlkZGVuID09PSBmYWxzZSAmJiB3aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lICkge1xuXHRcdFx0d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSggc2NoZWR1bGUgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0d2luZG93LnNldFRpbWVvdXQoIHNjaGVkdWxlLCBqUXVlcnkuZnguaW50ZXJ2YWwgKTtcblx0XHR9XG5cblx0XHRqUXVlcnkuZngudGljaygpO1xuXHR9XG59XG5cbi8vIEFuaW1hdGlvbnMgY3JlYXRlZCBzeW5jaHJvbm91c2x5IHdpbGwgcnVuIHN5bmNocm9ub3VzbHlcbmZ1bmN0aW9uIGNyZWF0ZUZ4Tm93KCkge1xuXHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0ZnhOb3cgPSB1bmRlZmluZWQ7XG5cdH0gKTtcblx0cmV0dXJuICggZnhOb3cgPSBEYXRlLm5vdygpICk7XG59XG5cbi8vIEdlbmVyYXRlIHBhcmFtZXRlcnMgdG8gY3JlYXRlIGEgc3RhbmRhcmQgYW5pbWF0aW9uXG5mdW5jdGlvbiBnZW5GeCggdHlwZSwgaW5jbHVkZVdpZHRoICkge1xuXHR2YXIgd2hpY2gsXG5cdFx0aSA9IDAsXG5cdFx0YXR0cnMgPSB7IGhlaWdodDogdHlwZSB9O1xuXG5cdC8vIElmIHdlIGluY2x1ZGUgd2lkdGgsIHN0ZXAgdmFsdWUgaXMgMSB0byBkbyBhbGwgY3NzRXhwYW5kIHZhbHVlcyxcblx0Ly8gb3RoZXJ3aXNlIHN0ZXAgdmFsdWUgaXMgMiB0byBza2lwIG92ZXIgTGVmdCBhbmQgUmlnaHRcblx0aW5jbHVkZVdpZHRoID0gaW5jbHVkZVdpZHRoID8gMSA6IDA7XG5cdGZvciAoIDsgaSA8IDQ7IGkgKz0gMiAtIGluY2x1ZGVXaWR0aCApIHtcblx0XHR3aGljaCA9IGNzc0V4cGFuZFsgaSBdO1xuXHRcdGF0dHJzWyBcIm1hcmdpblwiICsgd2hpY2ggXSA9IGF0dHJzWyBcInBhZGRpbmdcIiArIHdoaWNoIF0gPSB0eXBlO1xuXHR9XG5cblx0aWYgKCBpbmNsdWRlV2lkdGggKSB7XG5cdFx0YXR0cnMub3BhY2l0eSA9IGF0dHJzLndpZHRoID0gdHlwZTtcblx0fVxuXG5cdHJldHVybiBhdHRycztcbn1cblxuZnVuY3Rpb24gY3JlYXRlVHdlZW4oIHZhbHVlLCBwcm9wLCBhbmltYXRpb24gKSB7XG5cdHZhciB0d2Vlbixcblx0XHRjb2xsZWN0aW9uID0gKCBBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSB8fCBbXSApLmNvbmNhdCggQW5pbWF0aW9uLnR3ZWVuZXJzWyBcIipcIiBdICksXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IGNvbGxlY3Rpb24ubGVuZ3RoO1xuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdGlmICggKCB0d2VlbiA9IGNvbGxlY3Rpb25bIGluZGV4IF0uY2FsbCggYW5pbWF0aW9uLCBwcm9wLCB2YWx1ZSApICkgKSB7XG5cblx0XHRcdC8vIFdlJ3JlIGRvbmUgd2l0aCB0aGlzIHByb3BlcnR5XG5cdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIGRlZmF1bHRQcmVmaWx0ZXIoIGVsZW0sIHByb3BzLCBvcHRzICkge1xuXHR2YXIgcHJvcCwgdmFsdWUsIHRvZ2dsZSwgaG9va3MsIG9sZGZpcmUsIHByb3BUd2VlbiwgcmVzdG9yZURpc3BsYXksIGRpc3BsYXksXG5cdFx0aXNCb3ggPSBcIndpZHRoXCIgaW4gcHJvcHMgfHwgXCJoZWlnaHRcIiBpbiBwcm9wcyxcblx0XHRhbmltID0gdGhpcyxcblx0XHRvcmlnID0ge30sXG5cdFx0c3R5bGUgPSBlbGVtLnN0eWxlLFxuXHRcdGhpZGRlbiA9IGVsZW0ubm9kZVR5cGUgJiYgaXNIaWRkZW5XaXRoaW5UcmVlKCBlbGVtICksXG5cdFx0ZGF0YVNob3cgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZnhzaG93XCIgKTtcblxuXHQvLyBRdWV1ZS1za2lwcGluZyBhbmltYXRpb25zIGhpamFjayB0aGUgZnggaG9va3Ncblx0aWYgKCAhb3B0cy5xdWV1ZSApIHtcblx0XHRob29rcyA9IGpRdWVyeS5fcXVldWVIb29rcyggZWxlbSwgXCJmeFwiICk7XG5cdFx0aWYgKCBob29rcy51bnF1ZXVlZCA9PSBudWxsICkge1xuXHRcdFx0aG9va3MudW5xdWV1ZWQgPSAwO1xuXHRcdFx0b2xkZmlyZSA9IGhvb2tzLmVtcHR5LmZpcmU7XG5cdFx0XHRob29rcy5lbXB0eS5maXJlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggIWhvb2tzLnVucXVldWVkICkge1xuXHRcdFx0XHRcdG9sZGZpcmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblx0XHR9XG5cdFx0aG9va3MudW5xdWV1ZWQrKztcblxuXHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRW5zdXJlIHRoZSBjb21wbGV0ZSBoYW5kbGVyIGlzIGNhbGxlZCBiZWZvcmUgdGhpcyBjb21wbGV0ZXNcblx0XHRcdGFuaW0uYWx3YXlzKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0aG9va3MudW5xdWV1ZWQtLTtcblx0XHRcdFx0aWYgKCAhalF1ZXJ5LnF1ZXVlKCBlbGVtLCBcImZ4XCIgKS5sZW5ndGggKSB7XG5cdFx0XHRcdFx0aG9va3MuZW1wdHkuZmlyZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gRGV0ZWN0IHNob3cvaGlkZSBhbmltYXRpb25zXG5cdGZvciAoIHByb3AgaW4gcHJvcHMgKSB7XG5cdFx0dmFsdWUgPSBwcm9wc1sgcHJvcCBdO1xuXHRcdGlmICggcmZ4dHlwZXMudGVzdCggdmFsdWUgKSApIHtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgcHJvcCBdO1xuXHRcdFx0dG9nZ2xlID0gdG9nZ2xlIHx8IHZhbHVlID09PSBcInRvZ2dsZVwiO1xuXHRcdFx0aWYgKCB2YWx1ZSA9PT0gKCBoaWRkZW4gPyBcImhpZGVcIiA6IFwic2hvd1wiICkgKSB7XG5cblx0XHRcdFx0Ly8gUHJldGVuZCB0byBiZSBoaWRkZW4gaWYgdGhpcyBpcyBhIFwic2hvd1wiIGFuZFxuXHRcdFx0XHQvLyB0aGVyZSBpcyBzdGlsbCBkYXRhIGZyb20gYSBzdG9wcGVkIHNob3cvaGlkZVxuXHRcdFx0XHRpZiAoIHZhbHVlID09PSBcInNob3dcIiAmJiBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0aGlkZGVuID0gdHJ1ZTtcblxuXHRcdFx0XHQvLyBJZ25vcmUgYWxsIG90aGVyIG5vLW9wIHNob3cvaGlkZSBkYXRhXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0Y29udGludWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdG9yaWdbIHByb3AgXSA9IGRhdGFTaG93ICYmIGRhdGFTaG93WyBwcm9wIF0gfHwgalF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gQmFpbCBvdXQgaWYgdGhpcyBpcyBhIG5vLW9wIGxpa2UgLmhpZGUoKS5oaWRlKClcblx0cHJvcFR3ZWVuID0gIWpRdWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wcyApO1xuXHRpZiAoICFwcm9wVHdlZW4gJiYgalF1ZXJ5LmlzRW1wdHlPYmplY3QoIG9yaWcgKSApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHQvLyBSZXN0cmljdCBcIm92ZXJmbG93XCIgYW5kIFwiZGlzcGxheVwiIHN0eWxlcyBkdXJpbmcgYm94IGFuaW1hdGlvbnNcblx0aWYgKCBpc0JveCAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEsIEVkZ2UgMTIgLSAxNVxuXHRcdC8vIFJlY29yZCBhbGwgMyBvdmVyZmxvdyBhdHRyaWJ1dGVzIGJlY2F1c2UgSUUgZG9lcyBub3QgaW5mZXIgdGhlIHNob3J0aGFuZFxuXHRcdC8vIGZyb20gaWRlbnRpY2FsbHktdmFsdWVkIG92ZXJmbG93WCBhbmQgb3ZlcmZsb3dZIGFuZCBFZGdlIGp1c3QgbWlycm9yc1xuXHRcdC8vIHRoZSBvdmVyZmxvd1ggdmFsdWUgdGhlcmUuXG5cdFx0b3B0cy5vdmVyZmxvdyA9IFsgc3R5bGUub3ZlcmZsb3csIHN0eWxlLm92ZXJmbG93WCwgc3R5bGUub3ZlcmZsb3dZIF07XG5cblx0XHQvLyBJZGVudGlmeSBhIGRpc3BsYXkgdHlwZSwgcHJlZmVycmluZyBvbGQgc2hvdy9oaWRlIGRhdGEgb3ZlciB0aGUgQ1NTIGNhc2NhZGVcblx0XHRyZXN0b3JlRGlzcGxheSA9IGRhdGFTaG93ICYmIGRhdGFTaG93LmRpc3BsYXk7XG5cdFx0aWYgKCByZXN0b3JlRGlzcGxheSA9PSBudWxsICkge1xuXHRcdFx0cmVzdG9yZURpc3BsYXkgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0fVxuXHRcdGRpc3BsYXkgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdGlmICggZGlzcGxheSA9PT0gXCJub25lXCIgKSB7XG5cdFx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ICkge1xuXHRcdFx0XHRkaXNwbGF5ID0gcmVzdG9yZURpc3BsYXk7XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEdldCBub25lbXB0eSB2YWx1ZShzKSBieSB0ZW1wb3JhcmlseSBmb3JjaW5nIHZpc2liaWxpdHlcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdLCB0cnVlICk7XG5cdFx0XHRcdHJlc3RvcmVEaXNwbGF5ID0gZWxlbS5zdHlsZS5kaXNwbGF5IHx8IHJlc3RvcmVEaXNwbGF5O1xuXHRcdFx0XHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQW5pbWF0ZSBpbmxpbmUgZWxlbWVudHMgYXMgaW5saW5lLWJsb2NrXG5cdFx0aWYgKCBkaXNwbGF5ID09PSBcImlubGluZVwiIHx8IGRpc3BsYXkgPT09IFwiaW5saW5lLWJsb2NrXCIgJiYgcmVzdG9yZURpc3BsYXkgIT0gbnVsbCApIHtcblx0XHRcdGlmICggalF1ZXJ5LmNzcyggZWxlbSwgXCJmbG9hdFwiICkgPT09IFwibm9uZVwiICkge1xuXG5cdFx0XHRcdC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIGRpc3BsYXkgdmFsdWUgYXQgdGhlIGVuZCBvZiBwdXJlIHNob3cvaGlkZSBhbmltYXRpb25zXG5cdFx0XHRcdGlmICggIXByb3BUd2VlbiApIHtcblx0XHRcdFx0XHRhbmltLmRvbmUoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0c3R5bGUuZGlzcGxheSA9IHJlc3RvcmVEaXNwbGF5O1xuXHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0XHRpZiAoIHJlc3RvcmVEaXNwbGF5ID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRkaXNwbGF5ID0gc3R5bGUuZGlzcGxheTtcblx0XHRcdFx0XHRcdHJlc3RvcmVEaXNwbGF5ID0gZGlzcGxheSA9PT0gXCJub25lXCIgPyBcIlwiIDogZGlzcGxheTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0c3R5bGUuZGlzcGxheSA9IFwiaW5saW5lLWJsb2NrXCI7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKCBvcHRzLm92ZXJmbG93ICkge1xuXHRcdHN0eWxlLm92ZXJmbG93ID0gXCJoaWRkZW5cIjtcblx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cdFx0XHRzdHlsZS5vdmVyZmxvdyA9IG9wdHMub3ZlcmZsb3dbIDAgXTtcblx0XHRcdHN0eWxlLm92ZXJmbG93WCA9IG9wdHMub3ZlcmZsb3dbIDEgXTtcblx0XHRcdHN0eWxlLm92ZXJmbG93WSA9IG9wdHMub3ZlcmZsb3dbIDIgXTtcblx0XHR9ICk7XG5cdH1cblxuXHQvLyBJbXBsZW1lbnQgc2hvdy9oaWRlIGFuaW1hdGlvbnNcblx0cHJvcFR3ZWVuID0gZmFsc2U7XG5cdGZvciAoIHByb3AgaW4gb3JpZyApIHtcblxuXHRcdC8vIEdlbmVyYWwgc2hvdy9oaWRlIHNldHVwIGZvciB0aGlzIGVsZW1lbnQgYW5pbWF0aW9uXG5cdFx0aWYgKCAhcHJvcFR3ZWVuICkge1xuXHRcdFx0aWYgKCBkYXRhU2hvdyApIHtcblx0XHRcdFx0aWYgKCBcImhpZGRlblwiIGluIGRhdGFTaG93ICkge1xuXHRcdFx0XHRcdGhpZGRlbiA9IGRhdGFTaG93LmhpZGRlbjtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGF0YVNob3cgPSBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIFwiZnhzaG93XCIsIHsgZGlzcGxheTogcmVzdG9yZURpc3BsYXkgfSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdG9yZSBoaWRkZW4vdmlzaWJsZSBmb3IgdG9nZ2xlIHNvIGAuc3RvcCgpLnRvZ2dsZSgpYCBcInJldmVyc2VzXCJcblx0XHRcdGlmICggdG9nZ2xlICkge1xuXHRcdFx0XHRkYXRhU2hvdy5oaWRkZW4gPSAhaGlkZGVuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTaG93IGVsZW1lbnRzIGJlZm9yZSBhbmltYXRpbmcgdGhlbVxuXHRcdFx0aWYgKCBoaWRkZW4gKSB7XG5cdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSwgdHJ1ZSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvKiBlc2xpbnQtZGlzYWJsZSBuby1sb29wLWZ1bmMgKi9cblxuXHRcdFx0YW5pbS5kb25lKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG5vLWxvb3AtZnVuYyAqL1xuXG5cdFx0XHRcdC8vIFRoZSBmaW5hbCBzdGVwIG9mIGEgXCJoaWRlXCIgYW5pbWF0aW9uIGlzIGFjdHVhbGx5IGhpZGluZyB0aGUgZWxlbWVudFxuXHRcdFx0XHRpZiAoICFoaWRkZW4gKSB7XG5cdFx0XHRcdFx0c2hvd0hpZGUoIFsgZWxlbSBdICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBcImZ4c2hvd1wiICk7XG5cdFx0XHRcdGZvciAoIHByb3AgaW4gb3JpZyApIHtcblx0XHRcdFx0XHRqUXVlcnkuc3R5bGUoIGVsZW0sIHByb3AsIG9yaWdbIHByb3AgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0Ly8gUGVyLXByb3BlcnR5IHNldHVwXG5cdFx0cHJvcFR3ZWVuID0gY3JlYXRlVHdlZW4oIGhpZGRlbiA/IGRhdGFTaG93WyBwcm9wIF0gOiAwLCBwcm9wLCBhbmltICk7XG5cdFx0aWYgKCAhKCBwcm9wIGluIGRhdGFTaG93ICkgKSB7XG5cdFx0XHRkYXRhU2hvd1sgcHJvcCBdID0gcHJvcFR3ZWVuLnN0YXJ0O1xuXHRcdFx0aWYgKCBoaWRkZW4gKSB7XG5cdFx0XHRcdHByb3BUd2Vlbi5lbmQgPSBwcm9wVHdlZW4uc3RhcnQ7XG5cdFx0XHRcdHByb3BUd2Vlbi5zdGFydCA9IDA7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59XG5cbmZ1bmN0aW9uIHByb3BGaWx0ZXIoIHByb3BzLCBzcGVjaWFsRWFzaW5nICkge1xuXHR2YXIgaW5kZXgsIG5hbWUsIGVhc2luZywgdmFsdWUsIGhvb2tzO1xuXG5cdC8vIGNhbWVsQ2FzZSwgc3BlY2lhbEVhc2luZyBhbmQgZXhwYW5kIGNzc0hvb2sgcGFzc1xuXHRmb3IgKCBpbmRleCBpbiBwcm9wcyApIHtcblx0XHRuYW1lID0gY2FtZWxDYXNlKCBpbmRleCApO1xuXHRcdGVhc2luZyA9IHNwZWNpYWxFYXNpbmdbIG5hbWUgXTtcblx0XHR2YWx1ZSA9IHByb3BzWyBpbmRleCBdO1xuXHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRcdGVhc2luZyA9IHZhbHVlWyAxIF07XG5cdFx0XHR2YWx1ZSA9IHByb3BzWyBpbmRleCBdID0gdmFsdWVbIDAgXTtcblx0XHR9XG5cblx0XHRpZiAoIGluZGV4ICE9PSBuYW1lICkge1xuXHRcdFx0cHJvcHNbIG5hbWUgXSA9IHZhbHVlO1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBpbmRleCBdO1xuXHRcdH1cblxuXHRcdGhvb2tzID0galF1ZXJ5LmNzc0hvb2tzWyBuYW1lIF07XG5cdFx0aWYgKCBob29rcyAmJiBcImV4cGFuZFwiIGluIGhvb2tzICkge1xuXHRcdFx0dmFsdWUgPSBob29rcy5leHBhbmQoIHZhbHVlICk7XG5cdFx0XHRkZWxldGUgcHJvcHNbIG5hbWUgXTtcblxuXHRcdFx0Ly8gTm90IHF1aXRlICQuZXh0ZW5kLCB0aGlzIHdvbid0IG92ZXJ3cml0ZSBleGlzdGluZyBrZXlzLlxuXHRcdFx0Ly8gUmV1c2luZyAnaW5kZXgnIGJlY2F1c2Ugd2UgaGF2ZSB0aGUgY29ycmVjdCBcIm5hbWVcIlxuXHRcdFx0Zm9yICggaW5kZXggaW4gdmFsdWUgKSB7XG5cdFx0XHRcdGlmICggISggaW5kZXggaW4gcHJvcHMgKSApIHtcblx0XHRcdFx0XHRwcm9wc1sgaW5kZXggXSA9IHZhbHVlWyBpbmRleCBdO1xuXHRcdFx0XHRcdHNwZWNpYWxFYXNpbmdbIGluZGV4IF0gPSBlYXNpbmc7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0c3BlY2lhbEVhc2luZ1sgbmFtZSBdID0gZWFzaW5nO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBBbmltYXRpb24oIGVsZW0sIHByb3BlcnRpZXMsIG9wdGlvbnMgKSB7XG5cdHZhciByZXN1bHQsXG5cdFx0c3RvcHBlZCxcblx0XHRpbmRleCA9IDAsXG5cdFx0bGVuZ3RoID0gQW5pbWF0aW9uLnByZWZpbHRlcnMubGVuZ3RoLFxuXHRcdGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCkuYWx3YXlzKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRG9uJ3QgbWF0Y2ggZWxlbSBpbiB0aGUgOmFuaW1hdGVkIHNlbGVjdG9yXG5cdFx0XHRkZWxldGUgdGljay5lbGVtO1xuXHRcdH0gKSxcblx0XHR0aWNrID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIHN0b3BwZWQgKSB7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH1cblx0XHRcdHZhciBjdXJyZW50VGltZSA9IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCksXG5cdFx0XHRcdHJlbWFpbmluZyA9IE1hdGgubWF4KCAwLCBhbmltYXRpb24uc3RhcnRUaW1lICsgYW5pbWF0aW9uLmR1cmF0aW9uIC0gY3VycmVudFRpbWUgKSxcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDIuMyBvbmx5XG5cdFx0XHRcdC8vIEFyY2hhaWMgY3Jhc2ggYnVnIHdvbid0IGFsbG93IHVzIHRvIHVzZSBgMSAtICggMC41IHx8IDAgKWAgKCMxMjQ5Nylcblx0XHRcdFx0dGVtcCA9IHJlbWFpbmluZyAvIGFuaW1hdGlvbi5kdXJhdGlvbiB8fCAwLFxuXHRcdFx0XHRwZXJjZW50ID0gMSAtIHRlbXAsXG5cdFx0XHRcdGluZGV4ID0gMCxcblx0XHRcdFx0bGVuZ3RoID0gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGg7XG5cblx0XHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdGFuaW1hdGlvbi50d2VlbnNbIGluZGV4IF0ucnVuKCBwZXJjZW50ICk7XG5cdFx0XHR9XG5cblx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBwZXJjZW50LCByZW1haW5pbmcgXSApO1xuXG5cdFx0XHQvLyBJZiB0aGVyZSdzIG1vcmUgdG8gZG8sIHlpZWxkXG5cdFx0XHRpZiAoIHBlcmNlbnQgPCAxICYmIGxlbmd0aCApIHtcblx0XHRcdFx0cmV0dXJuIHJlbWFpbmluZztcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgdGhpcyB3YXMgYW4gZW1wdHkgYW5pbWF0aW9uLCBzeW50aGVzaXplIGEgZmluYWwgcHJvZ3Jlc3Mgbm90aWZpY2F0aW9uXG5cdFx0XHRpZiAoICFsZW5ndGggKSB7XG5cdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCAxLCAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmVzb2x2ZSB0aGUgYW5pbWF0aW9uIGFuZCByZXBvcnQgaXRzIGNvbmNsdXNpb25cblx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiBdICk7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fSxcblx0XHRhbmltYXRpb24gPSBkZWZlcnJlZC5wcm9taXNlKCB7XG5cdFx0XHRlbGVtOiBlbGVtLFxuXHRcdFx0cHJvcHM6IGpRdWVyeS5leHRlbmQoIHt9LCBwcm9wZXJ0aWVzICksXG5cdFx0XHRvcHRzOiBqUXVlcnkuZXh0ZW5kKCB0cnVlLCB7XG5cdFx0XHRcdHNwZWNpYWxFYXNpbmc6IHt9LFxuXHRcdFx0XHRlYXNpbmc6IGpRdWVyeS5lYXNpbmcuX2RlZmF1bHRcblx0XHRcdH0sIG9wdGlvbnMgKSxcblx0XHRcdG9yaWdpbmFsUHJvcGVydGllczogcHJvcGVydGllcyxcblx0XHRcdG9yaWdpbmFsT3B0aW9uczogb3B0aW9ucyxcblx0XHRcdHN0YXJ0VGltZTogZnhOb3cgfHwgY3JlYXRlRnhOb3coKSxcblx0XHRcdGR1cmF0aW9uOiBvcHRpb25zLmR1cmF0aW9uLFxuXHRcdFx0dHdlZW5zOiBbXSxcblx0XHRcdGNyZWF0ZVR3ZWVuOiBmdW5jdGlvbiggcHJvcCwgZW5kICkge1xuXHRcdFx0XHR2YXIgdHdlZW4gPSBqUXVlcnkuVHdlZW4oIGVsZW0sIGFuaW1hdGlvbi5vcHRzLCBwcm9wLCBlbmQsXG5cdFx0XHRcdFx0YW5pbWF0aW9uLm9wdHMuc3BlY2lhbEVhc2luZ1sgcHJvcCBdIHx8IGFuaW1hdGlvbi5vcHRzLmVhc2luZyApO1xuXHRcdFx0XHRhbmltYXRpb24udHdlZW5zLnB1c2goIHR3ZWVuICk7XG5cdFx0XHRcdHJldHVybiB0d2Vlbjtcblx0XHRcdH0sXG5cdFx0XHRzdG9wOiBmdW5jdGlvbiggZ290b0VuZCApIHtcblx0XHRcdFx0dmFyIGluZGV4ID0gMCxcblxuXHRcdFx0XHRcdC8vIElmIHdlIGFyZSBnb2luZyB0byB0aGUgZW5kLCB3ZSB3YW50IHRvIHJ1biBhbGwgdGhlIHR3ZWVuc1xuXHRcdFx0XHRcdC8vIG90aGVyd2lzZSB3ZSBza2lwIHRoaXMgcGFydFxuXHRcdFx0XHRcdGxlbmd0aCA9IGdvdG9FbmQgPyBhbmltYXRpb24udHdlZW5zLmxlbmd0aCA6IDA7XG5cdFx0XHRcdGlmICggc3RvcHBlZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXHRcdFx0XHRzdG9wcGVkID0gdHJ1ZTtcblx0XHRcdFx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0XHRhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggMSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVzb2x2ZSB3aGVuIHdlIHBsYXllZCB0aGUgbGFzdCBmcmFtZTsgb3RoZXJ3aXNlLCByZWplY3Rcblx0XHRcdFx0aWYgKCBnb3RvRW5kICkge1xuXHRcdFx0XHRcdGRlZmVycmVkLm5vdGlmeVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCAxLCAwIF0gKTtcblx0XHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24sIGdvdG9FbmQgXSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH1cblx0XHR9ICksXG5cdFx0cHJvcHMgPSBhbmltYXRpb24ucHJvcHM7XG5cblx0cHJvcEZpbHRlciggcHJvcHMsIGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmcgKTtcblxuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdHJlc3VsdCA9IEFuaW1hdGlvbi5wcmVmaWx0ZXJzWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgZWxlbSwgcHJvcHMsIGFuaW1hdGlvbi5vcHRzICk7XG5cdFx0aWYgKCByZXN1bHQgKSB7XG5cdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHJlc3VsdC5zdG9wICkgKSB7XG5cdFx0XHRcdGpRdWVyeS5fcXVldWVIb29rcyggYW5pbWF0aW9uLmVsZW0sIGFuaW1hdGlvbi5vcHRzLnF1ZXVlICkuc3RvcCA9XG5cdFx0XHRcdFx0cmVzdWx0LnN0b3AuYmluZCggcmVzdWx0ICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdH1cblx0fVxuXG5cdGpRdWVyeS5tYXAoIHByb3BzLCBjcmVhdGVUd2VlbiwgYW5pbWF0aW9uICk7XG5cblx0aWYgKCBpc0Z1bmN0aW9uKCBhbmltYXRpb24ub3B0cy5zdGFydCApICkge1xuXHRcdGFuaW1hdGlvbi5vcHRzLnN0YXJ0LmNhbGwoIGVsZW0sIGFuaW1hdGlvbiApO1xuXHR9XG5cblx0Ly8gQXR0YWNoIGNhbGxiYWNrcyBmcm9tIG9wdGlvbnNcblx0YW5pbWF0aW9uXG5cdFx0LnByb2dyZXNzKCBhbmltYXRpb24ub3B0cy5wcm9ncmVzcyApXG5cdFx0LmRvbmUoIGFuaW1hdGlvbi5vcHRzLmRvbmUsIGFuaW1hdGlvbi5vcHRzLmNvbXBsZXRlIClcblx0XHQuZmFpbCggYW5pbWF0aW9uLm9wdHMuZmFpbCApXG5cdFx0LmFsd2F5cyggYW5pbWF0aW9uLm9wdHMuYWx3YXlzICk7XG5cblx0alF1ZXJ5LmZ4LnRpbWVyKFxuXHRcdGpRdWVyeS5leHRlbmQoIHRpY2ssIHtcblx0XHRcdGVsZW06IGVsZW0sXG5cdFx0XHRhbmltOiBhbmltYXRpb24sXG5cdFx0XHRxdWV1ZTogYW5pbWF0aW9uLm9wdHMucXVldWVcblx0XHR9IClcblx0KTtcblxuXHRyZXR1cm4gYW5pbWF0aW9uO1xufVxuXG5qUXVlcnkuQW5pbWF0aW9uID0galF1ZXJ5LmV4dGVuZCggQW5pbWF0aW9uLCB7XG5cblx0dHdlZW5lcnM6IHtcblx0XHRcIipcIjogWyBmdW5jdGlvbiggcHJvcCwgdmFsdWUgKSB7XG5cdFx0XHR2YXIgdHdlZW4gPSB0aGlzLmNyZWF0ZVR3ZWVuKCBwcm9wLCB2YWx1ZSApO1xuXHRcdFx0YWRqdXN0Q1NTKCB0d2Vlbi5lbGVtLCBwcm9wLCByY3NzTnVtLmV4ZWMoIHZhbHVlICksIHR3ZWVuICk7XG5cdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0fSBdXG5cdH0sXG5cblx0dHdlZW5lcjogZnVuY3Rpb24oIHByb3BzLCBjYWxsYmFjayApIHtcblx0XHRpZiAoIGlzRnVuY3Rpb24oIHByb3BzICkgKSB7XG5cdFx0XHRjYWxsYmFjayA9IHByb3BzO1xuXHRcdFx0cHJvcHMgPSBbIFwiKlwiIF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdHByb3BzID0gcHJvcHMubWF0Y2goIHJub3RodG1sd2hpdGUgKTtcblx0XHR9XG5cblx0XHR2YXIgcHJvcCxcblx0XHRcdGluZGV4ID0gMCxcblx0XHRcdGxlbmd0aCA9IHByb3BzLmxlbmd0aDtcblxuXHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRwcm9wID0gcHJvcHNbIGluZGV4IF07XG5cdFx0XHRBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSA9IEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdIHx8IFtdO1xuXHRcdFx0QW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0udW5zaGlmdCggY2FsbGJhY2sgKTtcblx0XHR9XG5cdH0sXG5cblx0cHJlZmlsdGVyczogWyBkZWZhdWx0UHJlZmlsdGVyIF0sXG5cblx0cHJlZmlsdGVyOiBmdW5jdGlvbiggY2FsbGJhY2ssIHByZXBlbmQgKSB7XG5cdFx0aWYgKCBwcmVwZW5kICkge1xuXHRcdFx0QW5pbWF0aW9uLnByZWZpbHRlcnMudW5zaGlmdCggY2FsbGJhY2sgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0QW5pbWF0aW9uLnByZWZpbHRlcnMucHVzaCggY2FsbGJhY2sgKTtcblx0XHR9XG5cdH1cbn0gKTtcblxualF1ZXJ5LnNwZWVkID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGZuICkge1xuXHR2YXIgb3B0ID0gc3BlZWQgJiYgdHlwZW9mIHNwZWVkID09PSBcIm9iamVjdFwiID8galF1ZXJ5LmV4dGVuZCgge30sIHNwZWVkICkgOiB7XG5cdFx0Y29tcGxldGU6IGZuIHx8ICFmbiAmJiBlYXNpbmcgfHxcblx0XHRcdGlzRnVuY3Rpb24oIHNwZWVkICkgJiYgc3BlZWQsXG5cdFx0ZHVyYXRpb246IHNwZWVkLFxuXHRcdGVhc2luZzogZm4gJiYgZWFzaW5nIHx8IGVhc2luZyAmJiAhaXNGdW5jdGlvbiggZWFzaW5nICkgJiYgZWFzaW5nXG5cdH07XG5cblx0Ly8gR28gdG8gdGhlIGVuZCBzdGF0ZSBpZiBmeCBhcmUgb2ZmXG5cdGlmICggalF1ZXJ5LmZ4Lm9mZiApIHtcblx0XHRvcHQuZHVyYXRpb24gPSAwO1xuXG5cdH0gZWxzZSB7XG5cdFx0aWYgKCB0eXBlb2Ygb3B0LmR1cmF0aW9uICE9PSBcIm51bWJlclwiICkge1xuXHRcdFx0aWYgKCBvcHQuZHVyYXRpb24gaW4galF1ZXJ5LmZ4LnNwZWVkcyApIHtcblx0XHRcdFx0b3B0LmR1cmF0aW9uID0galF1ZXJ5LmZ4LnNwZWVkc1sgb3B0LmR1cmF0aW9uIF07XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5zcGVlZHMuX2RlZmF1bHQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gTm9ybWFsaXplIG9wdC5xdWV1ZSAtIHRydWUvdW5kZWZpbmVkL251bGwgLT4gXCJmeFwiXG5cdGlmICggb3B0LnF1ZXVlID09IG51bGwgfHwgb3B0LnF1ZXVlID09PSB0cnVlICkge1xuXHRcdG9wdC5xdWV1ZSA9IFwiZnhcIjtcblx0fVxuXG5cdC8vIFF1ZXVlaW5nXG5cdG9wdC5vbGQgPSBvcHQuY29tcGxldGU7XG5cblx0b3B0LmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBvcHQub2xkICkgKSB7XG5cdFx0XHRvcHQub2xkLmNhbGwoIHRoaXMgKTtcblx0XHR9XG5cblx0XHRpZiAoIG9wdC5xdWV1ZSApIHtcblx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCBvcHQucXVldWUgKTtcblx0XHR9XG5cdH07XG5cblx0cmV0dXJuIG9wdDtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZmFkZVRvOiBmdW5jdGlvbiggc3BlZWQsIHRvLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXG5cdFx0Ly8gU2hvdyBhbnkgaGlkZGVuIGVsZW1lbnRzIGFmdGVyIHNldHRpbmcgb3BhY2l0eSB0byAwXG5cdFx0cmV0dXJuIHRoaXMuZmlsdGVyKCBpc0hpZGRlbldpdGhpblRyZWUgKS5jc3MoIFwib3BhY2l0eVwiLCAwICkuc2hvdygpXG5cblx0XHRcdC8vIEFuaW1hdGUgdG8gdGhlIHZhbHVlIHNwZWNpZmllZFxuXHRcdFx0LmVuZCgpLmFuaW1hdGUoIHsgb3BhY2l0eTogdG8gfSwgc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKTtcblx0fSxcblx0YW5pbWF0ZTogZnVuY3Rpb24oIHByb3AsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHZhciBlbXB0eSA9IGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBwcm9wICksXG5cdFx0XHRvcHRhbGwgPSBqUXVlcnkuc3BlZWQoIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICksXG5cdFx0XHRkb0FuaW1hdGlvbiA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8vIE9wZXJhdGUgb24gYSBjb3B5IG9mIHByb3Agc28gcGVyLXByb3BlcnR5IGVhc2luZyB3b24ndCBiZSBsb3N0XG5cdFx0XHRcdHZhciBhbmltID0gQW5pbWF0aW9uKCB0aGlzLCBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcCApLCBvcHRhbGwgKTtcblxuXHRcdFx0XHQvLyBFbXB0eSBhbmltYXRpb25zLCBvciBmaW5pc2hpbmcgcmVzb2x2ZXMgaW1tZWRpYXRlbHlcblx0XHRcdFx0aWYgKCBlbXB0eSB8fCBkYXRhUHJpdi5nZXQoIHRoaXMsIFwiZmluaXNoXCIgKSApIHtcblx0XHRcdFx0XHRhbmltLnN0b3AoIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fTtcblxuXHRcdGRvQW5pbWF0aW9uLmZpbmlzaCA9IGRvQW5pbWF0aW9uO1xuXG5cdFx0cmV0dXJuIGVtcHR5IHx8IG9wdGFsbC5xdWV1ZSA9PT0gZmFsc2UgP1xuXHRcdFx0dGhpcy5lYWNoKCBkb0FuaW1hdGlvbiApIDpcblx0XHRcdHRoaXMucXVldWUoIG9wdGFsbC5xdWV1ZSwgZG9BbmltYXRpb24gKTtcblx0fSxcblx0c3RvcDogZnVuY3Rpb24oIHR5cGUsIGNsZWFyUXVldWUsIGdvdG9FbmQgKSB7XG5cdFx0dmFyIHN0b3BRdWV1ZSA9IGZ1bmN0aW9uKCBob29rcyApIHtcblx0XHRcdHZhciBzdG9wID0gaG9va3Muc3RvcDtcblx0XHRcdGRlbGV0ZSBob29rcy5zdG9wO1xuXHRcdFx0c3RvcCggZ290b0VuZCApO1xuXHRcdH07XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0Z290b0VuZCA9IGNsZWFyUXVldWU7XG5cdFx0XHRjbGVhclF1ZXVlID0gdHlwZTtcblx0XHRcdHR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICggY2xlYXJRdWV1ZSApIHtcblx0XHRcdHRoaXMucXVldWUoIHR5cGUgfHwgXCJmeFwiLCBbXSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGRlcXVldWUgPSB0cnVlLFxuXHRcdFx0XHRpbmRleCA9IHR5cGUgIT0gbnVsbCAmJiB0eXBlICsgXCJxdWV1ZUhvb2tzXCIsXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXG5cdFx0XHRcdGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKTtcblxuXHRcdFx0aWYgKCBpbmRleCApIHtcblx0XHRcdFx0aWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCApIHtcblx0XHRcdFx0XHRzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Zm9yICggaW5kZXggaW4gZGF0YSApIHtcblx0XHRcdFx0XHRpZiAoIGRhdGFbIGluZGV4IF0gJiYgZGF0YVsgaW5kZXggXS5zdG9wICYmIHJydW4udGVzdCggaW5kZXggKSApIHtcblx0XHRcdFx0XHRcdHN0b3BRdWV1ZSggZGF0YVsgaW5kZXggXSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkge1xuXHRcdFx0XHRpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmXG5cdFx0XHRcdFx0KCB0eXBlID09IG51bGwgfHwgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkgKSB7XG5cblx0XHRcdFx0XHR0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCBnb3RvRW5kICk7XG5cdFx0XHRcdFx0ZGVxdWV1ZSA9IGZhbHNlO1xuXHRcdFx0XHRcdHRpbWVycy5zcGxpY2UoIGluZGV4LCAxICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RhcnQgdGhlIG5leHQgaW4gdGhlIHF1ZXVlIGlmIHRoZSBsYXN0IHN0ZXAgd2Fzbid0IGZvcmNlZC5cblx0XHRcdC8vIFRpbWVycyBjdXJyZW50bHkgd2lsbCBjYWxsIHRoZWlyIGNvbXBsZXRlIGNhbGxiYWNrcywgd2hpY2hcblx0XHRcdC8vIHdpbGwgZGVxdWV1ZSBidXQgb25seSBpZiB0aGV5IHdlcmUgZ290b0VuZC5cblx0XHRcdGlmICggZGVxdWV1ZSB8fCAhZ290b0VuZCApIHtcblx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIHRoaXMsIHR5cGUgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cdGZpbmlzaDogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0aWYgKCB0eXBlICE9PSBmYWxzZSApIHtcblx0XHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaW5kZXgsXG5cdFx0XHRcdGRhdGEgPSBkYXRhUHJpdi5nZXQoIHRoaXMgKSxcblx0XHRcdFx0cXVldWUgPSBkYXRhWyB0eXBlICsgXCJxdWV1ZVwiIF0sXG5cdFx0XHRcdGhvb2tzID0gZGF0YVsgdHlwZSArIFwicXVldWVIb29rc1wiIF0sXG5cdFx0XHRcdHRpbWVycyA9IGpRdWVyeS50aW1lcnMsXG5cdFx0XHRcdGxlbmd0aCA9IHF1ZXVlID8gcXVldWUubGVuZ3RoIDogMDtcblxuXHRcdFx0Ly8gRW5hYmxlIGZpbmlzaGluZyBmbGFnIG9uIHByaXZhdGUgZGF0YVxuXHRcdFx0ZGF0YS5maW5pc2ggPSB0cnVlO1xuXG5cdFx0XHQvLyBFbXB0eSB0aGUgcXVldWUgZmlyc3Rcblx0XHRcdGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgW10gKTtcblxuXHRcdFx0aWYgKCBob29rcyAmJiBob29rcy5zdG9wICkge1xuXHRcdFx0XHRob29rcy5zdG9wLmNhbGwoIHRoaXMsIHRydWUgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTG9vayBmb3IgYW55IGFjdGl2ZSBhbmltYXRpb25zLCBhbmQgZmluaXNoIHRoZW1cblx0XHRcdGZvciAoIGluZGV4ID0gdGltZXJzLmxlbmd0aDsgaW5kZXgtLTsgKSB7XG5cdFx0XHRcdGlmICggdGltZXJzWyBpbmRleCBdLmVsZW0gPT09IHRoaXMgJiYgdGltZXJzWyBpbmRleCBdLnF1ZXVlID09PSB0eXBlICkge1xuXHRcdFx0XHRcdHRpbWVyc1sgaW5kZXggXS5hbmltLnN0b3AoIHRydWUgKTtcblx0XHRcdFx0XHR0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvb2sgZm9yIGFueSBhbmltYXRpb25zIGluIHRoZSBvbGQgcXVldWUgYW5kIGZpbmlzaCB0aGVtXG5cdFx0XHRmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRpZiAoIHF1ZXVlWyBpbmRleCBdICYmIHF1ZXVlWyBpbmRleCBdLmZpbmlzaCApIHtcblx0XHRcdFx0XHRxdWV1ZVsgaW5kZXggXS5maW5pc2guY2FsbCggdGhpcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFR1cm4gb2ZmIGZpbmlzaGluZyBmbGFnXG5cdFx0XHRkZWxldGUgZGF0YS5maW5pc2g7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKCBbIFwidG9nZ2xlXCIsIFwic2hvd1wiLCBcImhpZGVcIiBdLCBmdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cdHZhciBjc3NGbiA9IGpRdWVyeS5mblsgbmFtZSBdO1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gc3BlZWQgPT0gbnVsbCB8fCB0eXBlb2Ygc3BlZWQgPT09IFwiYm9vbGVhblwiID9cblx0XHRcdGNzc0ZuLmFwcGx5KCB0aGlzLCBhcmd1bWVudHMgKSA6XG5cdFx0XHR0aGlzLmFuaW1hdGUoIGdlbkZ4KCBuYW1lLCB0cnVlICksIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH07XG59ICk7XG5cbi8vIEdlbmVyYXRlIHNob3J0Y3V0cyBmb3IgY3VzdG9tIGFuaW1hdGlvbnNcbmpRdWVyeS5lYWNoKCB7XG5cdHNsaWRlRG93bjogZ2VuRngoIFwic2hvd1wiICksXG5cdHNsaWRlVXA6IGdlbkZ4KCBcImhpZGVcIiApLFxuXHRzbGlkZVRvZ2dsZTogZ2VuRngoIFwidG9nZ2xlXCIgKSxcblx0ZmFkZUluOiB7IG9wYWNpdHk6IFwic2hvd1wiIH0sXG5cdGZhZGVPdXQ6IHsgb3BhY2l0eTogXCJoaWRlXCIgfSxcblx0ZmFkZVRvZ2dsZTogeyBvcGFjaXR5OiBcInRvZ2dsZVwiIH1cbn0sIGZ1bmN0aW9uKCBuYW1lLCBwcm9wcyApIHtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHRoaXMuYW5pbWF0ZSggcHJvcHMsIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH07XG59ICk7XG5cbmpRdWVyeS50aW1lcnMgPSBbXTtcbmpRdWVyeS5meC50aWNrID0gZnVuY3Rpb24oKSB7XG5cdHZhciB0aW1lcixcblx0XHRpID0gMCxcblx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzO1xuXG5cdGZ4Tm93ID0gRGF0ZS5ub3coKTtcblxuXHRmb3IgKCA7IGkgPCB0aW1lcnMubGVuZ3RoOyBpKysgKSB7XG5cdFx0dGltZXIgPSB0aW1lcnNbIGkgXTtcblxuXHRcdC8vIFJ1biB0aGUgdGltZXIgYW5kIHNhZmVseSByZW1vdmUgaXQgd2hlbiBkb25lIChhbGxvd2luZyBmb3IgZXh0ZXJuYWwgcmVtb3ZhbClcblx0XHRpZiAoICF0aW1lcigpICYmIHRpbWVyc1sgaSBdID09PSB0aW1lciApIHtcblx0XHRcdHRpbWVycy5zcGxpY2UoIGktLSwgMSApO1xuXHRcdH1cblx0fVxuXG5cdGlmICggIXRpbWVycy5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5LmZ4LnN0b3AoKTtcblx0fVxuXHRmeE5vdyA9IHVuZGVmaW5lZDtcbn07XG5cbmpRdWVyeS5meC50aW1lciA9IGZ1bmN0aW9uKCB0aW1lciApIHtcblx0alF1ZXJ5LnRpbWVycy5wdXNoKCB0aW1lciApO1xuXHRqUXVlcnkuZnguc3RhcnQoKTtcbn07XG5cbmpRdWVyeS5meC5pbnRlcnZhbCA9IDEzO1xualF1ZXJ5LmZ4LnN0YXJ0ID0gZnVuY3Rpb24oKSB7XG5cdGlmICggaW5Qcm9ncmVzcyApIHtcblx0XHRyZXR1cm47XG5cdH1cblxuXHRpblByb2dyZXNzID0gdHJ1ZTtcblx0c2NoZWR1bGUoKTtcbn07XG5cbmpRdWVyeS5meC5zdG9wID0gZnVuY3Rpb24oKSB7XG5cdGluUHJvZ3Jlc3MgPSBudWxsO1xufTtcblxualF1ZXJ5LmZ4LnNwZWVkcyA9IHtcblx0c2xvdzogNjAwLFxuXHRmYXN0OiAyMDAsXG5cblx0Ly8gRGVmYXVsdCBzcGVlZFxuXHRfZGVmYXVsdDogNDAwXG59O1xuXG5cbi8vIEJhc2VkIG9mZiBvZiB0aGUgcGx1Z2luIGJ5IENsaW50IEhlbGZlcnMsIHdpdGggcGVybWlzc2lvbi5cbi8vIGh0dHBzOi8vd2ViLmFyY2hpdmUub3JnL3dlYi8yMDEwMDMyNDAxNDc0Ny9odHRwOi8vYmxpbmRzaWduYWxzLmNvbS9pbmRleC5waHAvMjAwOS8wNy9qcXVlcnktZGVsYXkvXG5qUXVlcnkuZm4uZGVsYXkgPSBmdW5jdGlvbiggdGltZSwgdHlwZSApIHtcblx0dGltZSA9IGpRdWVyeS5meCA/IGpRdWVyeS5meC5zcGVlZHNbIHRpbWUgXSB8fCB0aW1lIDogdGltZTtcblx0dHlwZSA9IHR5cGUgfHwgXCJmeFwiO1xuXG5cdHJldHVybiB0aGlzLnF1ZXVlKCB0eXBlLCBmdW5jdGlvbiggbmV4dCwgaG9va3MgKSB7XG5cdFx0dmFyIHRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCggbmV4dCwgdGltZSApO1xuXHRcdGhvb2tzLnN0b3AgPSBmdW5jdGlvbigpIHtcblx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQoIHRpbWVvdXQgKTtcblx0XHR9O1xuXHR9ICk7XG59O1xuXG5cbiggZnVuY3Rpb24oKSB7XG5cdHZhciBpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApLFxuXHRcdHNlbGVjdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwic2VsZWN0XCIgKSxcblx0XHRvcHQgPSBzZWxlY3QuYXBwZW5kQ2hpbGQoIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwib3B0aW9uXCIgKSApO1xuXG5cdGlucHV0LnR5cGUgPSBcImNoZWNrYm94XCI7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMyBvbmx5XG5cdC8vIERlZmF1bHQgdmFsdWUgZm9yIGEgY2hlY2tib3ggc2hvdWxkIGJlIFwib25cIlxuXHRzdXBwb3J0LmNoZWNrT24gPSBpbnB1dC52YWx1ZSAhPT0gXCJcIjtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0Ly8gTXVzdCBhY2Nlc3Mgc2VsZWN0ZWRJbmRleCB0byBtYWtlIGRlZmF1bHQgb3B0aW9ucyBzZWxlY3Rcblx0c3VwcG9ydC5vcHRTZWxlY3RlZCA9IG9wdC5zZWxlY3RlZDtcblxuXHQvLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcblx0Ly8gQW4gaW5wdXQgbG9zZXMgaXRzIHZhbHVlIGFmdGVyIGJlY29taW5nIGEgcmFkaW9cblx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblx0aW5wdXQudmFsdWUgPSBcInRcIjtcblx0aW5wdXQudHlwZSA9IFwicmFkaW9cIjtcblx0c3VwcG9ydC5yYWRpb1ZhbHVlID0gaW5wdXQudmFsdWUgPT09IFwidFwiO1xufSApKCk7XG5cblxudmFyIGJvb2xIb29rLFxuXHRhdHRySGFuZGxlID0galF1ZXJ5LmV4cHIuYXR0ckhhbmRsZTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRhdHRyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgalF1ZXJ5LmF0dHIsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xuXHR9LFxuXG5cdHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBuYW1lICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIHRoaXMsIG5hbWUgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHRhdHRyOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0dmFyIHJldCwgaG9va3MsXG5cdFx0XHRuVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0XHQvLyBEb24ndCBnZXQvc2V0IGF0dHJpYnV0ZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzXG5cdFx0aWYgKCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBGYWxsYmFjayB0byBwcm9wIHdoZW4gYXR0cmlidXRlcyBhcmUgbm90IHN1cHBvcnRlZFxuXHRcdGlmICggdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlID09PSBcInVuZGVmaW5lZFwiICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5wcm9wKCBlbGVtLCBuYW1lLCB2YWx1ZSApO1xuXHRcdH1cblxuXHRcdC8vIEF0dHJpYnV0ZSBob29rcyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgbG93ZXJjYXNlIHZlcnNpb25cblx0XHQvLyBHcmFiIG5lY2Vzc2FyeSBob29rIGlmIG9uZSBpcyBkZWZpbmVkXG5cdFx0aWYgKCBuVHlwZSAhPT0gMSB8fCAhalF1ZXJ5LmlzWE1MRG9jKCBlbGVtICkgKSB7XG5cdFx0XHRob29rcyA9IGpRdWVyeS5hdHRySG9va3NbIG5hbWUudG9Mb3dlckNhc2UoKSBdIHx8XG5cdFx0XHRcdCggalF1ZXJ5LmV4cHIubWF0Y2guYm9vbC50ZXN0KCBuYW1lICkgPyBib29sSG9vayA6IHVuZGVmaW5lZCApO1xuXHRcdH1cblxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggdmFsdWUgPT09IG51bGwgKSB7XG5cdFx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCBlbGVtLCBuYW1lICk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCBob29rcyAmJiBcInNldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApICkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIHZhbHVlICsgXCJcIiApO1xuXHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdH1cblxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyAmJiAoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgbmFtZSApICkgIT09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblxuXHRcdHJldCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIG5hbWUgKTtcblxuXHRcdC8vIE5vbi1leGlzdGVudCBhdHRyaWJ1dGVzIHJldHVybiBudWxsLCB3ZSBub3JtYWxpemUgdG8gdW5kZWZpbmVkXG5cdFx0cmV0dXJuIHJldCA9PSBudWxsID8gdW5kZWZpbmVkIDogcmV0O1xuXHR9LFxuXG5cdGF0dHJIb29rczoge1xuXHRcdHR5cGU6IHtcblx0XHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0XHRpZiAoICFzdXBwb3J0LnJhZGlvVmFsdWUgJiYgdmFsdWUgPT09IFwicmFkaW9cIiAmJlxuXHRcdFx0XHRcdG5vZGVOYW1lKCBlbGVtLCBcImlucHV0XCIgKSApIHtcblx0XHRcdFx0XHR2YXIgdmFsID0gZWxlbS52YWx1ZTtcblx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIHZhbHVlICk7XG5cdFx0XHRcdFx0aWYgKCB2YWwgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLnZhbHVlID0gdmFsO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0cmVtb3ZlQXR0cjogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdHZhciBuYW1lLFxuXHRcdFx0aSA9IDAsXG5cblx0XHRcdC8vIEF0dHJpYnV0ZSBuYW1lcyBjYW4gY29udGFpbiBub24tSFRNTCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnNcblx0XHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL3N5bnRheC5odG1sI2F0dHJpYnV0ZXMtMlxuXHRcdFx0YXR0ck5hbWVzID0gdmFsdWUgJiYgdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKTtcblxuXHRcdGlmICggYXR0ck5hbWVzICYmIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHR3aGlsZSAoICggbmFtZSA9IGF0dHJOYW1lc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0ZWxlbS5yZW1vdmVBdHRyaWJ1dGUoIG5hbWUgKTtcblx0XHRcdH1cblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gSG9va3MgZm9yIGJvb2xlYW4gYXR0cmlidXRlc1xuYm9vbEhvb2sgPSB7XG5cdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlLCBuYW1lICkge1xuXHRcdGlmICggdmFsdWUgPT09IGZhbHNlICkge1xuXG5cdFx0XHQvLyBSZW1vdmUgYm9vbGVhbiBhdHRyaWJ1dGVzIHdoZW4gc2V0IHRvIGZhbHNlXG5cdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFtZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggbmFtZSwgbmFtZSApO1xuXHRcdH1cblx0XHRyZXR1cm4gbmFtZTtcblx0fVxufTtcblxualF1ZXJ5LmVhY2goIGpRdWVyeS5leHByLm1hdGNoLmJvb2wuc291cmNlLm1hdGNoKCAvXFx3Ky9nICksIGZ1bmN0aW9uKCBfaSwgbmFtZSApIHtcblx0dmFyIGdldHRlciA9IGF0dHJIYW5kbGVbIG5hbWUgXSB8fCBqUXVlcnkuZmluZC5hdHRyO1xuXG5cdGF0dHJIYW5kbGVbIG5hbWUgXSA9IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCBpc1hNTCApIHtcblx0XHR2YXIgcmV0LCBoYW5kbGUsXG5cdFx0XHRsb3dlcmNhc2VOYW1lID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXG5cdFx0aWYgKCAhaXNYTUwgKSB7XG5cblx0XHRcdC8vIEF2b2lkIGFuIGluZmluaXRlIGxvb3AgYnkgdGVtcG9yYXJpbHkgcmVtb3ZpbmcgdGhpcyBmdW5jdGlvbiBmcm9tIHRoZSBnZXR0ZXJcblx0XHRcdGhhbmRsZSA9IGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXTtcblx0XHRcdGF0dHJIYW5kbGVbIGxvd2VyY2FzZU5hbWUgXSA9IHJldDtcblx0XHRcdHJldCA9IGdldHRlciggZWxlbSwgbmFtZSwgaXNYTUwgKSAhPSBudWxsID9cblx0XHRcdFx0bG93ZXJjYXNlTmFtZSA6XG5cdFx0XHRcdG51bGw7XG5cdFx0XHRhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF0gPSBoYW5kbGU7XG5cdFx0fVxuXHRcdHJldHVybiByZXQ7XG5cdH07XG59ICk7XG5cblxuXG5cbnZhciByZm9jdXNhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxcblx0cmNsaWNrYWJsZSA9IC9eKD86YXxhcmVhKSQvaTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRwcm9wOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgalF1ZXJ5LnByb3AsIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xuXHR9LFxuXG5cdHJlbW92ZVByb3A6IGZ1bmN0aW9uKCBuYW1lICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0ZGVsZXRlIHRoaXNbIGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZSBdO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHByb3A6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHR2YXIgcmV0LCBob29rcyxcblx0XHRcdG5UeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRcdC8vIERvbid0IGdldC9zZXQgcHJvcGVydGllcyBvbiB0ZXh0LCBjb21tZW50IGFuZCBhdHRyaWJ1dGUgbm9kZXNcblx0XHRpZiAoIG5UeXBlID09PSAzIHx8IG5UeXBlID09PSA4IHx8IG5UeXBlID09PSAyICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkge1xuXG5cdFx0XHQvLyBGaXggbmFtZSBhbmQgYXR0YWNoIGhvb2tzXG5cdFx0XHRuYW1lID0galF1ZXJ5LnByb3BGaXhbIG5hbWUgXSB8fCBuYW1lO1xuXHRcdFx0aG9va3MgPSBqUXVlcnkucHJvcEhvb2tzWyBuYW1lIF07XG5cdFx0fVxuXG5cdFx0aWYgKCB2YWx1ZSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCBob29rcyAmJiBcInNldFwiIGluIGhvb2tzICYmXG5cdFx0XHRcdCggcmV0ID0gaG9va3Muc2V0KCBlbGVtLCB2YWx1ZSwgbmFtZSApICkgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuICggZWxlbVsgbmFtZSBdID0gdmFsdWUgKTtcblx0XHR9XG5cblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiYgKCByZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSApICE9PSBudWxsICkge1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cblx0XHRyZXR1cm4gZWxlbVsgbmFtZSBdO1xuXHR9LFxuXG5cdHByb3BIb29rczoge1xuXHRcdHRhYkluZGV4OiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0XHRcdFx0Ly8gZWxlbS50YWJJbmRleCBkb2Vzbid0IGFsd2F5cyByZXR1cm4gdGhlXG5cdFx0XHRcdC8vIGNvcnJlY3QgdmFsdWUgd2hlbiBpdCBoYXNuJ3QgYmVlbiBleHBsaWNpdGx5IHNldFxuXHRcdFx0XHQvLyBodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxNDExMTYyMzMzNDcvaHR0cDovL2ZsdWlkcHJvamVjdC5vcmcvYmxvZy8yMDA4LzAxLzA5L2dldHRpbmctc2V0dGluZy1hbmQtcmVtb3ZpbmctdGFiaW5kZXgtdmFsdWVzLXdpdGgtamF2YXNjcmlwdC9cblx0XHRcdFx0Ly8gVXNlIHByb3BlciBhdHRyaWJ1dGUgcmV0cmlldmFsKCMxMjA3Milcblx0XHRcdFx0dmFyIHRhYmluZGV4ID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgXCJ0YWJpbmRleFwiICk7XG5cblx0XHRcdFx0aWYgKCB0YWJpbmRleCApIHtcblx0XHRcdFx0XHRyZXR1cm4gcGFyc2VJbnQoIHRhYmluZGV4LCAxMCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdHJmb2N1c2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApIHx8XG5cdFx0XHRcdFx0cmNsaWNrYWJsZS50ZXN0KCBlbGVtLm5vZGVOYW1lICkgJiZcblx0XHRcdFx0XHRlbGVtLmhyZWZcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIDA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdHByb3BGaXg6IHtcblx0XHRcImZvclwiOiBcImh0bWxGb3JcIixcblx0XHRcImNsYXNzXCI6IFwiY2xhc3NOYW1lXCJcblx0fVxufSApO1xuXG4vLyBTdXBwb3J0OiBJRSA8PTExIG9ubHlcbi8vIEFjY2Vzc2luZyB0aGUgc2VsZWN0ZWRJbmRleCBwcm9wZXJ0eVxuLy8gZm9yY2VzIHRoZSBicm93c2VyIHRvIHJlc3BlY3Qgc2V0dGluZyBzZWxlY3RlZFxuLy8gb24gdGhlIG9wdGlvblxuLy8gVGhlIGdldHRlciBlbnN1cmVzIGEgZGVmYXVsdCBvcHRpb24gaXMgc2VsZWN0ZWRcbi8vIHdoZW4gaW4gYW4gb3B0Z3JvdXBcbi8vIGVzbGludCBydWxlIFwibm8tdW51c2VkLWV4cHJlc3Npb25zXCIgaXMgZGlzYWJsZWQgZm9yIHRoaXMgY29kZVxuLy8gc2luY2UgaXQgY29uc2lkZXJzIHN1Y2ggYWNjZXNzaW9ucyBub29wXG5pZiAoICFzdXBwb3J0Lm9wdFNlbGVjdGVkICkge1xuXHRqUXVlcnkucHJvcEhvb2tzLnNlbGVjdGVkID0ge1xuXHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8qIGVzbGludCBuby11bnVzZWQtZXhwcmVzc2lvbnM6IFwib2ZmXCIgKi9cblxuXHRcdFx0dmFyIHBhcmVudCA9IGVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdGlmICggcGFyZW50ICYmIHBhcmVudC5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRwYXJlbnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0fSxcblx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvKiBlc2xpbnQgbm8tdW51c2VkLWV4cHJlc3Npb25zOiBcIm9mZlwiICovXG5cblx0XHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAoIHBhcmVudCApIHtcblx0XHRcdFx0cGFyZW50LnNlbGVjdGVkSW5kZXg7XG5cblx0XHRcdFx0aWYgKCBwYXJlbnQucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0XHRwYXJlbnQucGFyZW50Tm9kZS5zZWxlY3RlZEluZGV4O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG5qUXVlcnkuZWFjaCggW1xuXHRcInRhYkluZGV4XCIsXG5cdFwicmVhZE9ubHlcIixcblx0XCJtYXhMZW5ndGhcIixcblx0XCJjZWxsU3BhY2luZ1wiLFxuXHRcImNlbGxQYWRkaW5nXCIsXG5cdFwicm93U3BhblwiLFxuXHRcImNvbFNwYW5cIixcblx0XCJ1c2VNYXBcIixcblx0XCJmcmFtZUJvcmRlclwiLFxuXHRcImNvbnRlbnRFZGl0YWJsZVwiXG5dLCBmdW5jdGlvbigpIHtcblx0alF1ZXJ5LnByb3BGaXhbIHRoaXMudG9Mb3dlckNhc2UoKSBdID0gdGhpcztcbn0gKTtcblxuXG5cblxuXHQvLyBTdHJpcCBhbmQgY29sbGFwc2Ugd2hpdGVzcGFjZSBhY2NvcmRpbmcgdG8gSFRNTCBzcGVjXG5cdC8vIGh0dHBzOi8vaW5mcmEuc3BlYy53aGF0d2cub3JnLyNzdHJpcC1hbmQtY29sbGFwc2UtYXNjaWktd2hpdGVzcGFjZVxuXHRmdW5jdGlvbiBzdHJpcEFuZENvbGxhcHNlKCB2YWx1ZSApIHtcblx0XHR2YXIgdG9rZW5zID0gdmFsdWUubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblx0XHRyZXR1cm4gdG9rZW5zLmpvaW4oIFwiIFwiICk7XG5cdH1cblxuXG5mdW5jdGlvbiBnZXRDbGFzcyggZWxlbSApIHtcblx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlICYmIGVsZW0uZ2V0QXR0cmlidXRlKCBcImNsYXNzXCIgKSB8fCBcIlwiO1xufVxuXG5mdW5jdGlvbiBjbGFzc2VzVG9BcnJheSggdmFsdWUgKSB7XG5cdGlmICggQXJyYXkuaXNBcnJheSggdmFsdWUgKSApIHtcblx0XHRyZXR1cm4gdmFsdWU7XG5cdH1cblx0aWYgKCB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107XG5cdH1cblx0cmV0dXJuIFtdO1xufVxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGFkZENsYXNzOiBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0dmFyIGNsYXNzZXMsIGVsZW0sIGN1ciwgY3VyVmFsdWUsIGNsYXp6LCBqLCBmaW5hbFZhbHVlLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaiApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkuYWRkQ2xhc3MoIHZhbHVlLmNhbGwoIHRoaXMsIGosIGdldENsYXNzKCB0aGlzICkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdGNsYXNzZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcblxuXHRcdGlmICggY2xhc3Nlcy5sZW5ndGggKSB7XG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdGN1clZhbHVlID0gZ2V0Q2xhc3MoIGVsZW0gKTtcblx0XHRcdFx0Y3VyID0gZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAoIFwiIFwiICsgc3RyaXBBbmRDb2xsYXBzZSggY3VyVmFsdWUgKSArIFwiIFwiICk7XG5cblx0XHRcdFx0aWYgKCBjdXIgKSB7XG5cdFx0XHRcdFx0aiA9IDA7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGNsYXp6ID0gY2xhc3Nlc1sgaisrIF0gKSApIHtcblx0XHRcdFx0XHRcdGlmICggY3VyLmluZGV4T2YoIFwiIFwiICsgY2xhenogKyBcIiBcIiApIDwgMCApIHtcblx0XHRcdFx0XHRcdFx0Y3VyICs9IGNsYXp6ICsgXCIgXCI7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gT25seSBhc3NpZ24gaWYgZGlmZmVyZW50IHRvIGF2b2lkIHVubmVlZGVkIHJlbmRlcmluZy5cblx0XHRcdFx0XHRmaW5hbFZhbHVlID0gc3RyaXBBbmRDb2xsYXBzZSggY3VyICk7XG5cdFx0XHRcdFx0aWYgKCBjdXJWYWx1ZSAhPT0gZmluYWxWYWx1ZSApIHtcblx0XHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBcImNsYXNzXCIsIGZpbmFsVmFsdWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHRyZW1vdmVDbGFzczogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBjbGFzc2VzLCBlbGVtLCBjdXIsIGN1clZhbHVlLCBjbGF6eiwgaiwgZmluYWxWYWx1ZSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGogKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnJlbW92ZUNsYXNzKCB2YWx1ZS5jYWxsKCB0aGlzLCBqLCBnZXRDbGFzcyggdGhpcyApICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRpZiAoICFhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuYXR0ciggXCJjbGFzc1wiLCBcIlwiICk7XG5cdFx0fVxuXG5cdFx0Y2xhc3NlcyA9IGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0aWYgKCBjbGFzc2VzLmxlbmd0aCApIHtcblx0XHRcdHdoaWxlICggKCBlbGVtID0gdGhpc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0Y3VyVmFsdWUgPSBnZXRDbGFzcyggZWxlbSApO1xuXG5cdFx0XHRcdC8vIFRoaXMgZXhwcmVzc2lvbiBpcyBoZXJlIGZvciBiZXR0ZXIgY29tcHJlc3NpYmlsaXR5IChzZWUgYWRkQ2xhc3MpXG5cdFx0XHRcdGN1ciA9IGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGN1clZhbHVlICkgKyBcIiBcIiApO1xuXG5cdFx0XHRcdGlmICggY3VyICkge1xuXHRcdFx0XHRcdGogPSAwO1xuXHRcdFx0XHRcdHdoaWxlICggKCBjbGF6eiA9IGNsYXNzZXNbIGorKyBdICkgKSB7XG5cblx0XHRcdFx0XHRcdC8vIFJlbW92ZSAqYWxsKiBpbnN0YW5jZXNcblx0XHRcdFx0XHRcdHdoaWxlICggY3VyLmluZGV4T2YoIFwiIFwiICsgY2xhenogKyBcIiBcIiApID4gLTEgKSB7XG5cdFx0XHRcdFx0XHRcdGN1ciA9IGN1ci5yZXBsYWNlKCBcIiBcIiArIGNsYXp6ICsgXCIgXCIsIFwiIFwiICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gT25seSBhc3NpZ24gaWYgZGlmZmVyZW50IHRvIGF2b2lkIHVubmVlZGVkIHJlbmRlcmluZy5cblx0XHRcdFx0XHRmaW5hbFZhbHVlID0gc3RyaXBBbmRDb2xsYXBzZSggY3VyICk7XG5cdFx0XHRcdFx0aWYgKCBjdXJWYWx1ZSAhPT0gZmluYWxWYWx1ZSApIHtcblx0XHRcdFx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBcImNsYXNzXCIsIGZpbmFsVmFsdWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR0b2dnbGVDbGFzczogZnVuY3Rpb24oIHZhbHVlLCBzdGF0ZVZhbCApIHtcblx0XHR2YXIgdHlwZSA9IHR5cGVvZiB2YWx1ZSxcblx0XHRcdGlzVmFsaWRWYWx1ZSA9IHR5cGUgPT09IFwic3RyaW5nXCIgfHwgQXJyYXkuaXNBcnJheSggdmFsdWUgKTtcblxuXHRcdGlmICggdHlwZW9mIHN0YXRlVmFsID09PSBcImJvb2xlYW5cIiAmJiBpc1ZhbGlkVmFsdWUgKSB7XG5cdFx0XHRyZXR1cm4gc3RhdGVWYWwgPyB0aGlzLmFkZENsYXNzKCB2YWx1ZSApIDogdGhpcy5yZW1vdmVDbGFzcyggdmFsdWUgKTtcblx0XHR9XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkudG9nZ2xlQ2xhc3MoXG5cdFx0XHRcdFx0dmFsdWUuY2FsbCggdGhpcywgaSwgZ2V0Q2xhc3MoIHRoaXMgKSwgc3RhdGVWYWwgKSxcblx0XHRcdFx0XHRzdGF0ZVZhbFxuXHRcdFx0XHQpO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGNsYXNzTmFtZSwgaSwgc2VsZiwgY2xhc3NOYW1lcztcblxuXHRcdFx0aWYgKCBpc1ZhbGlkVmFsdWUgKSB7XG5cblx0XHRcdFx0Ly8gVG9nZ2xlIGluZGl2aWR1YWwgY2xhc3MgbmFtZXNcblx0XHRcdFx0aSA9IDA7XG5cdFx0XHRcdHNlbGYgPSBqUXVlcnkoIHRoaXMgKTtcblx0XHRcdFx0Y2xhc3NOYW1lcyA9IGNsYXNzZXNUb0FycmF5KCB2YWx1ZSApO1xuXG5cdFx0XHRcdHdoaWxlICggKCBjbGFzc05hbWUgPSBjbGFzc05hbWVzWyBpKysgXSApICkge1xuXG5cdFx0XHRcdFx0Ly8gQ2hlY2sgZWFjaCBjbGFzc05hbWUgZ2l2ZW4sIHNwYWNlIHNlcGFyYXRlZCBsaXN0XG5cdFx0XHRcdFx0aWYgKCBzZWxmLmhhc0NsYXNzKCBjbGFzc05hbWUgKSApIHtcblx0XHRcdFx0XHRcdHNlbGYucmVtb3ZlQ2xhc3MoIGNsYXNzTmFtZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRzZWxmLmFkZENsYXNzKCBjbGFzc05hbWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0Ly8gVG9nZ2xlIHdob2xlIGNsYXNzIG5hbWVcblx0XHRcdH0gZWxzZSBpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgfHwgdHlwZSA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0XHRcdGNsYXNzTmFtZSA9IGdldENsYXNzKCB0aGlzICk7XG5cdFx0XHRcdGlmICggY2xhc3NOYW1lICkge1xuXG5cdFx0XHRcdFx0Ly8gU3RvcmUgY2xhc3NOYW1lIGlmIHNldFxuXHRcdFx0XHRcdGRhdGFQcml2LnNldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIsIGNsYXNzTmFtZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSWYgdGhlIGVsZW1lbnQgaGFzIGEgY2xhc3MgbmFtZSBvciBpZiB3ZSdyZSBwYXNzZWQgYGZhbHNlYCxcblx0XHRcdFx0Ly8gdGhlbiByZW1vdmUgdGhlIHdob2xlIGNsYXNzbmFtZSAoaWYgdGhlcmUgd2FzIG9uZSwgdGhlIGFib3ZlIHNhdmVkIGl0KS5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGJyaW5nIGJhY2sgd2hhdGV2ZXIgd2FzIHByZXZpb3VzbHkgc2F2ZWQgKGlmIGFueXRoaW5nKSxcblx0XHRcdFx0Ly8gZmFsbGluZyBiYWNrIHRvIHRoZSBlbXB0eSBzdHJpbmcgaWYgbm90aGluZyB3YXMgc3RvcmVkLlxuXHRcdFx0XHRpZiAoIHRoaXMuc2V0QXR0cmlidXRlICkge1xuXHRcdFx0XHRcdHRoaXMuc2V0QXR0cmlidXRlKCBcImNsYXNzXCIsXG5cdFx0XHRcdFx0XHRjbGFzc05hbWUgfHwgdmFsdWUgPT09IGZhbHNlID9cblx0XHRcdFx0XHRcdFx0XCJcIiA6XG5cdFx0XHRcdFx0XHRcdGRhdGFQcml2LmdldCggdGhpcywgXCJfX2NsYXNzTmFtZV9fXCIgKSB8fCBcIlwiXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRoYXNDbGFzczogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBjbGFzc05hbWUsIGVsZW0sXG5cdFx0XHRpID0gMDtcblxuXHRcdGNsYXNzTmFtZSA9IFwiIFwiICsgc2VsZWN0b3IgKyBcIiBcIjtcblx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0KCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGdldENsYXNzKCBlbGVtICkgKSArIFwiIFwiICkuaW5kZXhPZiggY2xhc3NOYW1lICkgPiAtMSApIHtcblx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59ICk7XG5cblxuXG5cbnZhciBycmV0dXJuID0gL1xcci9nO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHZhbDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBob29rcywgcmV0LCB2YWx1ZUlzRnVuY3Rpb24sXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdO1xuXG5cdFx0aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdGlmICggZWxlbSApIHtcblx0XHRcdFx0aG9va3MgPSBqUXVlcnkudmFsSG9va3NbIGVsZW0udHlwZSBdIHx8XG5cdFx0XHRcdFx0alF1ZXJ5LnZhbEhvb2tzWyBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0XHRpZiAoIGhvb2tzICYmXG5cdFx0XHRcdFx0XCJnZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHRcdCggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBcInZhbHVlXCIgKSApICE9PSB1bmRlZmluZWRcblx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJldDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldCA9IGVsZW0udmFsdWU7XG5cblx0XHRcdFx0Ly8gSGFuZGxlIG1vc3QgY29tbW9uIHN0cmluZyBjYXNlc1xuXHRcdFx0XHRpZiAoIHR5cGVvZiByZXQgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHJldC5yZXBsYWNlKCBycmV0dXJuLCBcIlwiICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBIYW5kbGUgY2FzZXMgd2hlcmUgdmFsdWUgaXMgbnVsbC91bmRlZiBvciBudW1iZXJcblx0XHRcdFx0cmV0dXJuIHJldCA9PSBudWxsID8gXCJcIiA6IHJldDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdHZhbHVlSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIHZhbHVlICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdHZhciB2YWw7XG5cblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSAhPT0gMSApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHZhbHVlSXNGdW5jdGlvbiApIHtcblx0XHRcdFx0dmFsID0gdmFsdWUuY2FsbCggdGhpcywgaSwgalF1ZXJ5KCB0aGlzICkudmFsKCkgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHZhbCA9IHZhbHVlO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBUcmVhdCBudWxsL3VuZGVmaW5lZCBhcyBcIlwiOyBjb252ZXJ0IG51bWJlcnMgdG8gc3RyaW5nXG5cdFx0XHRpZiAoIHZhbCA9PSBudWxsICkge1xuXHRcdFx0XHR2YWwgPSBcIlwiO1xuXG5cdFx0XHR9IGVsc2UgaWYgKCB0eXBlb2YgdmFsID09PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHR2YWwgKz0gXCJcIjtcblxuXHRcdFx0fSBlbHNlIGlmICggQXJyYXkuaXNBcnJheSggdmFsICkgKSB7XG5cdFx0XHRcdHZhbCA9IGpRdWVyeS5tYXAoIHZhbCwgZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRcdHJldHVybiB2YWx1ZSA9PSBudWxsID8gXCJcIiA6IHZhbHVlICsgXCJcIjtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHRob29rcyA9IGpRdWVyeS52YWxIb29rc1sgdGhpcy50eXBlIF0gfHwgalF1ZXJ5LnZhbEhvb2tzWyB0aGlzLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgXTtcblxuXHRcdFx0Ly8gSWYgc2V0IHJldHVybnMgdW5kZWZpbmVkLCBmYWxsIGJhY2sgdG8gbm9ybWFsIHNldHRpbmdcblx0XHRcdGlmICggIWhvb2tzIHx8ICEoIFwic2V0XCIgaW4gaG9va3MgKSB8fCBob29rcy5zZXQoIHRoaXMsIHZhbCwgXCJ2YWx1ZVwiICkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0dGhpcy52YWx1ZSA9IHZhbDtcblx0XHRcdH1cblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHR2YWxIb29rczoge1xuXHRcdG9wdGlvbjoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0XHR2YXIgdmFsID0galF1ZXJ5LmZpbmQuYXR0ciggZWxlbSwgXCJ2YWx1ZVwiICk7XG5cdFx0XHRcdHJldHVybiB2YWwgIT0gbnVsbCA/XG5cdFx0XHRcdFx0dmFsIDpcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTAgLSAxMSBvbmx5XG5cdFx0XHRcdFx0Ly8gb3B0aW9uLnRleHQgdGhyb3dzIGV4Y2VwdGlvbnMgKCMxNDY4NiwgIzE0ODU4KVxuXHRcdFx0XHRcdC8vIFN0cmlwIGFuZCBjb2xsYXBzZSB3aGl0ZXNwYWNlXG5cdFx0XHRcdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLXdoaXRlc3BhY2Vcblx0XHRcdFx0XHRzdHJpcEFuZENvbGxhcHNlKCBqUXVlcnkudGV4dCggZWxlbSApICk7XG5cdFx0XHR9XG5cdFx0fSxcblx0XHRzZWxlY3Q6IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciB2YWx1ZSwgb3B0aW9uLCBpLFxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsXG5cdFx0XHRcdFx0aW5kZXggPSBlbGVtLnNlbGVjdGVkSW5kZXgsXG5cdFx0XHRcdFx0b25lID0gZWxlbS50eXBlID09PSBcInNlbGVjdC1vbmVcIixcblx0XHRcdFx0XHR2YWx1ZXMgPSBvbmUgPyBudWxsIDogW10sXG5cdFx0XHRcdFx0bWF4ID0gb25lID8gaW5kZXggKyAxIDogb3B0aW9ucy5sZW5ndGg7XG5cblx0XHRcdFx0aWYgKCBpbmRleCA8IDAgKSB7XG5cdFx0XHRcdFx0aSA9IG1heDtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGkgPSBvbmUgPyBpbmRleCA6IDA7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBMb29wIHRocm91Z2ggYWxsIHRoZSBzZWxlY3RlZCBvcHRpb25zXG5cdFx0XHRcdGZvciAoIDsgaSA8IG1heDsgaSsrICkge1xuXHRcdFx0XHRcdG9wdGlvbiA9IG9wdGlvbnNbIGkgXTtcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdFx0XHRcdFx0Ly8gSUU4LTkgZG9lc24ndCB1cGRhdGUgc2VsZWN0ZWQgYWZ0ZXIgZm9ybSByZXNldCAoIzI1NTEpXG5cdFx0XHRcdFx0aWYgKCAoIG9wdGlvbi5zZWxlY3RlZCB8fCBpID09PSBpbmRleCApICYmXG5cblx0XHRcdFx0XHRcdFx0Ly8gRG9uJ3QgcmV0dXJuIG9wdGlvbnMgdGhhdCBhcmUgZGlzYWJsZWQgb3IgaW4gYSBkaXNhYmxlZCBvcHRncm91cFxuXHRcdFx0XHRcdFx0XHQhb3B0aW9uLmRpc2FibGVkICYmXG5cdFx0XHRcdFx0XHRcdCggIW9wdGlvbi5wYXJlbnROb2RlLmRpc2FibGVkIHx8XG5cdFx0XHRcdFx0XHRcdFx0IW5vZGVOYW1lKCBvcHRpb24ucGFyZW50Tm9kZSwgXCJvcHRncm91cFwiICkgKSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gR2V0IHRoZSBzcGVjaWZpYyB2YWx1ZSBmb3IgdGhlIG9wdGlvblxuXHRcdFx0XHRcdFx0dmFsdWUgPSBqUXVlcnkoIG9wdGlvbiApLnZhbCgpO1xuXG5cdFx0XHRcdFx0XHQvLyBXZSBkb24ndCBuZWVkIGFuIGFycmF5IGZvciBvbmUgc2VsZWN0c1xuXHRcdFx0XHRcdFx0aWYgKCBvbmUgKSB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0Ly8gTXVsdGktU2VsZWN0cyByZXR1cm4gYW4gYXJyYXlcblx0XHRcdFx0XHRcdHZhbHVlcy5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0XHR9LFxuXG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdFx0dmFyIG9wdGlvblNldCwgb3B0aW9uLFxuXHRcdFx0XHRcdG9wdGlvbnMgPSBlbGVtLm9wdGlvbnMsXG5cdFx0XHRcdFx0dmFsdWVzID0galF1ZXJ5Lm1ha2VBcnJheSggdmFsdWUgKSxcblx0XHRcdFx0XHRpID0gb3B0aW9ucy5sZW5ndGg7XG5cblx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0b3B0aW9uID0gb3B0aW9uc1sgaSBdO1xuXG5cdFx0XHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tY29uZC1hc3NpZ24gKi9cblxuXHRcdFx0XHRcdGlmICggb3B0aW9uLnNlbGVjdGVkID1cblx0XHRcdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBqUXVlcnkudmFsSG9va3Mub3B0aW9uLmdldCggb3B0aW9uICksIHZhbHVlcyApID4gLTFcblx0XHRcdFx0XHQpIHtcblx0XHRcdFx0XHRcdG9wdGlvblNldCA9IHRydWU7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gRm9yY2UgYnJvd3NlcnMgdG8gYmVoYXZlIGNvbnNpc3RlbnRseSB3aGVuIG5vbi1tYXRjaGluZyB2YWx1ZSBpcyBzZXRcblx0XHRcdFx0aWYgKCAhb3B0aW9uU2V0ICkge1xuXHRcdFx0XHRcdGVsZW0uc2VsZWN0ZWRJbmRleCA9IC0xO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiB2YWx1ZXM7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIFJhZGlvcyBhbmQgY2hlY2tib3hlcyBnZXR0ZXIvc2V0dGVyXG5qUXVlcnkuZWFjaCggWyBcInJhZGlvXCIsIFwiY2hlY2tib3hcIiBdLCBmdW5jdGlvbigpIHtcblx0alF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0gPSB7XG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0XHRcdHJldHVybiAoIGVsZW0uY2hlY2tlZCA9IGpRdWVyeS5pbkFycmF5KCBqUXVlcnkoIGVsZW0gKS52YWwoKSwgdmFsdWUgKSA+IC0xICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xuXHRpZiAoICFzdXBwb3J0LmNoZWNrT24gKSB7XG5cdFx0alF1ZXJ5LnZhbEhvb2tzWyB0aGlzIF0uZ2V0ID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIFwidmFsdWVcIiApID09PSBudWxsID8gXCJvblwiIDogZWxlbS52YWx1ZTtcblx0XHR9O1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFJldHVybiBqUXVlcnkgZm9yIGF0dHJpYnV0ZXMtb25seSBpbmNsdXNpb25cblxuXG5zdXBwb3J0LmZvY3VzaW4gPSBcIm9uZm9jdXNpblwiIGluIHdpbmRvdztcblxuXG52YXIgcmZvY3VzTW9ycGggPSAvXig/OmZvY3VzaW5mb2N1c3xmb2N1c291dGJsdXIpJC8sXG5cdHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrID0gZnVuY3Rpb24oIGUgKSB7XG5cdFx0ZS5zdG9wUHJvcGFnYXRpb24oKTtcblx0fTtcblxualF1ZXJ5LmV4dGVuZCggalF1ZXJ5LmV2ZW50LCB7XG5cblx0dHJpZ2dlcjogZnVuY3Rpb24oIGV2ZW50LCBkYXRhLCBlbGVtLCBvbmx5SGFuZGxlcnMgKSB7XG5cblx0XHR2YXIgaSwgY3VyLCB0bXAsIGJ1YmJsZVR5cGUsIG9udHlwZSwgaGFuZGxlLCBzcGVjaWFsLCBsYXN0RWxlbWVudCxcblx0XHRcdGV2ZW50UGF0aCA9IFsgZWxlbSB8fCBkb2N1bWVudCBdLFxuXHRcdFx0dHlwZSA9IGhhc093bi5jYWxsKCBldmVudCwgXCJ0eXBlXCIgKSA/IGV2ZW50LnR5cGUgOiBldmVudCxcblx0XHRcdG5hbWVzcGFjZXMgPSBoYXNPd24uY2FsbCggZXZlbnQsIFwibmFtZXNwYWNlXCIgKSA/IGV2ZW50Lm5hbWVzcGFjZS5zcGxpdCggXCIuXCIgKSA6IFtdO1xuXG5cdFx0Y3VyID0gbGFzdEVsZW1lbnQgPSB0bXAgPSBlbGVtID0gZWxlbSB8fCBkb2N1bWVudDtcblxuXHRcdC8vIERvbid0IGRvIGV2ZW50cyBvbiB0ZXh0IGFuZCBjb21tZW50IG5vZGVzXG5cdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAzIHx8IGVsZW0ubm9kZVR5cGUgPT09IDggKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gZm9jdXMvYmx1ciBtb3JwaHMgdG8gZm9jdXNpbi9vdXQ7IGVuc3VyZSB3ZSdyZSBub3QgZmlyaW5nIHRoZW0gcmlnaHQgbm93XG5cdFx0aWYgKCByZm9jdXNNb3JwaC50ZXN0KCB0eXBlICsgalF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICggdHlwZS5pbmRleE9mKCBcIi5cIiApID4gLTEgKSB7XG5cblx0XHRcdC8vIE5hbWVzcGFjZWQgdHJpZ2dlcjsgY3JlYXRlIGEgcmVnZXhwIHRvIG1hdGNoIGV2ZW50IHR5cGUgaW4gaGFuZGxlKClcblx0XHRcdG5hbWVzcGFjZXMgPSB0eXBlLnNwbGl0KCBcIi5cIiApO1xuXHRcdFx0dHlwZSA9IG5hbWVzcGFjZXMuc2hpZnQoKTtcblx0XHRcdG5hbWVzcGFjZXMuc29ydCgpO1xuXHRcdH1cblx0XHRvbnR5cGUgPSB0eXBlLmluZGV4T2YoIFwiOlwiICkgPCAwICYmIFwib25cIiArIHR5cGU7XG5cblx0XHQvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYSBqUXVlcnkuRXZlbnQgb2JqZWN0LCBPYmplY3QsIG9yIGp1c3QgYW4gZXZlbnQgdHlwZSBzdHJpbmdcblx0XHRldmVudCA9IGV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdID9cblx0XHRcdGV2ZW50IDpcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoIHR5cGUsIHR5cGVvZiBldmVudCA9PT0gXCJvYmplY3RcIiAmJiBldmVudCApO1xuXG5cdFx0Ly8gVHJpZ2dlciBiaXRtYXNrOiAmIDEgZm9yIG5hdGl2ZSBoYW5kbGVyczsgJiAyIGZvciBqUXVlcnkgKGFsd2F5cyB0cnVlKVxuXHRcdGV2ZW50LmlzVHJpZ2dlciA9IG9ubHlIYW5kbGVycyA/IDIgOiAzO1xuXHRcdGV2ZW50Lm5hbWVzcGFjZSA9IG5hbWVzcGFjZXMuam9pbiggXCIuXCIgKTtcblx0XHRldmVudC5ybmFtZXNwYWNlID0gZXZlbnQubmFtZXNwYWNlID9cblx0XHRcdG5ldyBSZWdFeHAoIFwiKF58XFxcXC4pXCIgKyBuYW1lc3BhY2VzLmpvaW4oIFwiXFxcXC4oPzouKlxcXFwufClcIiApICsgXCIoXFxcXC58JClcIiApIDpcblx0XHRcdG51bGw7XG5cblx0XHQvLyBDbGVhbiB1cCB0aGUgZXZlbnQgaW4gY2FzZSBpdCBpcyBiZWluZyByZXVzZWRcblx0XHRldmVudC5yZXN1bHQgPSB1bmRlZmluZWQ7XG5cdFx0aWYgKCAhZXZlbnQudGFyZ2V0ICkge1xuXHRcdFx0ZXZlbnQudGFyZ2V0ID0gZWxlbTtcblx0XHR9XG5cblx0XHQvLyBDbG9uZSBhbnkgaW5jb21pbmcgZGF0YSBhbmQgcHJlcGVuZCB0aGUgZXZlbnQsIGNyZWF0aW5nIHRoZSBoYW5kbGVyIGFyZyBsaXN0XG5cdFx0ZGF0YSA9IGRhdGEgPT0gbnVsbCA/XG5cdFx0XHRbIGV2ZW50IF0gOlxuXHRcdFx0alF1ZXJ5Lm1ha2VBcnJheSggZGF0YSwgWyBldmVudCBdICk7XG5cblx0XHQvLyBBbGxvdyBzcGVjaWFsIGV2ZW50cyB0byBkcmF3IG91dHNpZGUgdGhlIGxpbmVzXG5cdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmIHNwZWNpYWwudHJpZ2dlciAmJiBzcGVjaWFsLnRyaWdnZXIuYXBwbHkoIGVsZW0sIGRhdGEgKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRGV0ZXJtaW5lIGV2ZW50IHByb3BhZ2F0aW9uIHBhdGggaW4gYWR2YW5jZSwgcGVyIFczQyBldmVudHMgc3BlYyAoIzk5NTEpXG5cdFx0Ly8gQnViYmxlIHVwIHRvIGRvY3VtZW50LCB0aGVuIHRvIHdpbmRvdzsgd2F0Y2ggZm9yIGEgZ2xvYmFsIG93bmVyRG9jdW1lbnQgdmFyICgjOTcyNClcblx0XHRpZiAoICFvbmx5SGFuZGxlcnMgJiYgIXNwZWNpYWwubm9CdWJibGUgJiYgIWlzV2luZG93KCBlbGVtICkgKSB7XG5cblx0XHRcdGJ1YmJsZVR5cGUgPSBzcGVjaWFsLmRlbGVnYXRlVHlwZSB8fCB0eXBlO1xuXHRcdFx0aWYgKCAhcmZvY3VzTW9ycGgudGVzdCggYnViYmxlVHlwZSArIHR5cGUgKSApIHtcblx0XHRcdFx0Y3VyID0gY3VyLnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cdFx0XHRmb3IgKCA7IGN1cjsgY3VyID0gY3VyLnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdGV2ZW50UGF0aC5wdXNoKCBjdXIgKTtcblx0XHRcdFx0dG1wID0gY3VyO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPbmx5IGFkZCB3aW5kb3cgaWYgd2UgZ290IHRvIGRvY3VtZW50IChlLmcuLCBub3QgcGxhaW4gb2JqIG9yIGRldGFjaGVkIERPTSlcblx0XHRcdGlmICggdG1wID09PSAoIGVsZW0ub3duZXJEb2N1bWVudCB8fCBkb2N1bWVudCApICkge1xuXHRcdFx0XHRldmVudFBhdGgucHVzaCggdG1wLmRlZmF1bHRWaWV3IHx8IHRtcC5wYXJlbnRXaW5kb3cgfHwgd2luZG93ICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRmlyZSBoYW5kbGVycyBvbiB0aGUgZXZlbnQgcGF0aFxuXHRcdGkgPSAwO1xuXHRcdHdoaWxlICggKCBjdXIgPSBldmVudFBhdGhbIGkrKyBdICkgJiYgIWV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRsYXN0RWxlbWVudCA9IGN1cjtcblx0XHRcdGV2ZW50LnR5cGUgPSBpID4gMSA/XG5cdFx0XHRcdGJ1YmJsZVR5cGUgOlxuXHRcdFx0XHRzcGVjaWFsLmJpbmRUeXBlIHx8IHR5cGU7XG5cblx0XHRcdC8vIGpRdWVyeSBoYW5kbGVyXG5cdFx0XHRoYW5kbGUgPSAoIGRhdGFQcml2LmdldCggY3VyLCBcImV2ZW50c1wiICkgfHwgT2JqZWN0LmNyZWF0ZSggbnVsbCApIClbIGV2ZW50LnR5cGUgXSAmJlxuXHRcdFx0XHRkYXRhUHJpdi5nZXQoIGN1ciwgXCJoYW5kbGVcIiApO1xuXHRcdFx0aWYgKCBoYW5kbGUgKSB7XG5cdFx0XHRcdGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE5hdGl2ZSBoYW5kbGVyXG5cdFx0XHRoYW5kbGUgPSBvbnR5cGUgJiYgY3VyWyBvbnR5cGUgXTtcblx0XHRcdGlmICggaGFuZGxlICYmIGhhbmRsZS5hcHBseSAmJiBhY2NlcHREYXRhKCBjdXIgKSApIHtcblx0XHRcdFx0ZXZlbnQucmVzdWx0ID0gaGFuZGxlLmFwcGx5KCBjdXIsIGRhdGEgKTtcblx0XHRcdFx0aWYgKCBldmVudC5yZXN1bHQgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdFx0ZXZlbnQudHlwZSA9IHR5cGU7XG5cblx0XHQvLyBJZiBub2JvZHkgcHJldmVudGVkIHRoZSBkZWZhdWx0IGFjdGlvbiwgZG8gaXQgbm93XG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmICFldmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKSApIHtcblxuXHRcdFx0aWYgKCAoICFzcGVjaWFsLl9kZWZhdWx0IHx8XG5cdFx0XHRcdHNwZWNpYWwuX2RlZmF1bHQuYXBwbHkoIGV2ZW50UGF0aC5wb3AoKSwgZGF0YSApID09PSBmYWxzZSApICYmXG5cdFx0XHRcdGFjY2VwdERhdGEoIGVsZW0gKSApIHtcblxuXHRcdFx0XHQvLyBDYWxsIGEgbmF0aXZlIERPTSBtZXRob2Qgb24gdGhlIHRhcmdldCB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIGV2ZW50LlxuXHRcdFx0XHQvLyBEb24ndCBkbyBkZWZhdWx0IGFjdGlvbnMgb24gd2luZG93LCB0aGF0J3Mgd2hlcmUgZ2xvYmFsIHZhcmlhYmxlcyBiZSAoIzYxNzApXG5cdFx0XHRcdGlmICggb250eXBlICYmIGlzRnVuY3Rpb24oIGVsZW1bIHR5cGUgXSApICYmICFpc1dpbmRvdyggZWxlbSApICkge1xuXG5cdFx0XHRcdFx0Ly8gRG9uJ3QgcmUtdHJpZ2dlciBhbiBvbkZPTyBldmVudCB3aGVuIHdlIGNhbGwgaXRzIEZPTygpIG1ldGhvZFxuXHRcdFx0XHRcdHRtcCA9IGVsZW1bIG9udHlwZSBdO1xuXG5cdFx0XHRcdFx0aWYgKCB0bXAgKSB7XG5cdFx0XHRcdFx0XHRlbGVtWyBvbnR5cGUgXSA9IG51bGw7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Ly8gUHJldmVudCByZS10cmlnZ2VyaW5nIG9mIHRoZSBzYW1lIGV2ZW50LCBzaW5jZSB3ZSBhbHJlYWR5IGJ1YmJsZWQgaXQgYWJvdmVcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdHlwZTtcblxuXHRcdFx0XHRcdGlmICggZXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblx0XHRcdFx0XHRcdGxhc3RFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIHR5cGUsIHN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZWxlbVsgdHlwZSBdKCk7XG5cblx0XHRcdFx0XHRpZiAoIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRcdFx0XHRsYXN0RWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBzdG9wUHJvcGFnYXRpb25DYWxsYmFjayApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgPSB1bmRlZmluZWQ7XG5cblx0XHRcdFx0XHRpZiAoIHRtcCApIHtcblx0XHRcdFx0XHRcdGVsZW1bIG9udHlwZSBdID0gdG1wO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBldmVudC5yZXN1bHQ7XG5cdH0sXG5cblx0Ly8gUGlnZ3liYWNrIG9uIGEgZG9ub3IgZXZlbnQgdG8gc2ltdWxhdGUgYSBkaWZmZXJlbnQgb25lXG5cdC8vIFVzZWQgb25seSBmb3IgYGZvY3VzKGluIHwgb3V0KWAgZXZlbnRzXG5cdHNpbXVsYXRlOiBmdW5jdGlvbiggdHlwZSwgZWxlbSwgZXZlbnQgKSB7XG5cdFx0dmFyIGUgPSBqUXVlcnkuZXh0ZW5kKFxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCgpLFxuXHRcdFx0ZXZlbnQsXG5cdFx0XHR7XG5cdFx0XHRcdHR5cGU6IHR5cGUsXG5cdFx0XHRcdGlzU2ltdWxhdGVkOiB0cnVlXG5cdFx0XHR9XG5cdFx0KTtcblxuXHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBlLCBudWxsLCBlbGVtICk7XG5cdH1cblxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0dHJpZ2dlcjogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgdGhpcyApO1xuXHRcdH0gKTtcblx0fSxcblx0dHJpZ2dlckhhbmRsZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHZhciBlbGVtID0gdGhpc1sgMCBdO1xuXHRcdGlmICggZWxlbSApIHtcblx0XHRcdHJldHVybiBqUXVlcnkuZXZlbnQudHJpZ2dlciggdHlwZSwgZGF0YSwgZWxlbSwgdHJ1ZSApO1xuXHRcdH1cblx0fVxufSApO1xuXG5cbi8vIFN1cHBvcnQ6IEZpcmVmb3ggPD00NFxuLy8gRmlyZWZveCBkb2Vzbid0IGhhdmUgZm9jdXMoaW4gfCBvdXQpIGV2ZW50c1xuLy8gUmVsYXRlZCB0aWNrZXQgLSBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02ODc3ODdcbi8vXG4vLyBTdXBwb3J0OiBDaHJvbWUgPD00OCAtIDQ5LCBTYWZhcmkgPD05LjAgLSA5LjFcbi8vIGZvY3VzKGluIHwgb3V0KSBldmVudHMgZmlyZSBhZnRlciBmb2N1cyAmIGJsdXIgZXZlbnRzLFxuLy8gd2hpY2ggaXMgc3BlYyB2aW9sYXRpb24gLSBodHRwOi8vd3d3LnczLm9yZy9UUi9ET00tTGV2ZWwtMy1FdmVudHMvI2V2ZW50cy1mb2N1c2V2ZW50LWV2ZW50LW9yZGVyXG4vLyBSZWxhdGVkIHRpY2tldCAtIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTQ0OTg1N1xuaWYgKCAhc3VwcG9ydC5mb2N1c2luICkge1xuXHRqUXVlcnkuZWFjaCggeyBmb2N1czogXCJmb2N1c2luXCIsIGJsdXI6IFwiZm9jdXNvdXRcIiB9LCBmdW5jdGlvbiggb3JpZywgZml4ICkge1xuXG5cdFx0Ly8gQXR0YWNoIGEgc2luZ2xlIGNhcHR1cmluZyBoYW5kbGVyIG9uIHRoZSBkb2N1bWVudCB3aGlsZSBzb21lb25lIHdhbnRzIGZvY3VzaW4vZm9jdXNvdXRcblx0XHR2YXIgaGFuZGxlciA9IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdGpRdWVyeS5ldmVudC5zaW11bGF0ZSggZml4LCBldmVudC50YXJnZXQsIGpRdWVyeS5ldmVudC5maXgoIGV2ZW50ICkgKTtcblx0XHR9O1xuXG5cdFx0alF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGZpeCBdID0ge1xuXHRcdFx0c2V0dXA6IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdC8vIEhhbmRsZTogcmVndWxhciBub2RlcyAodmlhIGB0aGlzLm93bmVyRG9jdW1lbnRgKSwgd2luZG93XG5cdFx0XHRcdC8vICh2aWEgYHRoaXMuZG9jdW1lbnRgKSAmIGRvY3VtZW50ICh2aWEgYHRoaXNgKS5cblx0XHRcdFx0dmFyIGRvYyA9IHRoaXMub3duZXJEb2N1bWVudCB8fCB0aGlzLmRvY3VtZW50IHx8IHRoaXMsXG5cdFx0XHRcdFx0YXR0YWNoZXMgPSBkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4ICk7XG5cblx0XHRcdFx0aWYgKCAhYXR0YWNoZXMgKSB7XG5cdFx0XHRcdFx0ZG9jLmFkZEV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4LCAoIGF0dGFjaGVzIHx8IDAgKSArIDEgKTtcblx0XHRcdH0sXG5cdFx0XHR0ZWFyZG93bjogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBkb2MgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcy5kb2N1bWVudCB8fCB0aGlzLFxuXHRcdFx0XHRcdGF0dGFjaGVzID0gZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCApIC0gMTtcblxuXHRcdFx0XHRpZiAoICFhdHRhY2hlcyApIHtcblx0XHRcdFx0XHRkb2MucmVtb3ZlRXZlbnRMaXN0ZW5lciggb3JpZywgaGFuZGxlciwgdHJ1ZSApO1xuXHRcdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggZG9jLCBmaXggKTtcblxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXgsIGF0dGFjaGVzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9O1xuXHR9ICk7XG59XG52YXIgbG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb247XG5cbnZhciBub25jZSA9IHsgZ3VpZDogRGF0ZS5ub3coKSB9O1xuXG52YXIgcnF1ZXJ5ID0gKCAvXFw/LyApO1xuXG5cblxuLy8gQ3Jvc3MtYnJvd3NlciB4bWwgcGFyc2luZ1xualF1ZXJ5LnBhcnNlWE1MID0gZnVuY3Rpb24oIGRhdGEgKSB7XG5cdHZhciB4bWwsIHBhcnNlckVycm9yRWxlbTtcblx0aWYgKCAhZGF0YSB8fCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gbnVsbDtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdC8vIElFIHRocm93cyBvbiBwYXJzZUZyb21TdHJpbmcgd2l0aCBpbnZhbGlkIGlucHV0LlxuXHR0cnkge1xuXHRcdHhtbCA9ICggbmV3IHdpbmRvdy5ET01QYXJzZXIoKSApLnBhcnNlRnJvbVN0cmluZyggZGF0YSwgXCJ0ZXh0L3htbFwiICk7XG5cdH0gY2F0Y2ggKCBlICkge31cblxuXHRwYXJzZXJFcnJvckVsZW0gPSB4bWwgJiYgeG1sLmdldEVsZW1lbnRzQnlUYWdOYW1lKCBcInBhcnNlcmVycm9yXCIgKVsgMCBdO1xuXHRpZiAoICF4bWwgfHwgcGFyc2VyRXJyb3JFbGVtICkge1xuXHRcdGpRdWVyeS5lcnJvciggXCJJbnZhbGlkIFhNTDogXCIgKyAoXG5cdFx0XHRwYXJzZXJFcnJvckVsZW0gP1xuXHRcdFx0XHRqUXVlcnkubWFwKCBwYXJzZXJFcnJvckVsZW0uY2hpbGROb2RlcywgZnVuY3Rpb24oIGVsICkge1xuXHRcdFx0XHRcdHJldHVybiBlbC50ZXh0Q29udGVudDtcblx0XHRcdFx0fSApLmpvaW4oIFwiXFxuXCIgKSA6XG5cdFx0XHRcdGRhdGFcblx0XHQpICk7XG5cdH1cblx0cmV0dXJuIHhtbDtcbn07XG5cblxudmFyXG5cdHJicmFja2V0ID0gL1xcW1xcXSQvLFxuXHRyQ1JMRiA9IC9cXHI/XFxuL2csXG5cdHJzdWJtaXR0ZXJUeXBlcyA9IC9eKD86c3VibWl0fGJ1dHRvbnxpbWFnZXxyZXNldHxmaWxlKSQvaSxcblx0cnN1Ym1pdHRhYmxlID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8a2V5Z2VuKS9pO1xuXG5mdW5jdGlvbiBidWlsZFBhcmFtcyggcHJlZml4LCBvYmosIHRyYWRpdGlvbmFsLCBhZGQgKSB7XG5cdHZhciBuYW1lO1xuXG5cdGlmICggQXJyYXkuaXNBcnJheSggb2JqICkgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgYXJyYXkgaXRlbS5cblx0XHRqUXVlcnkuZWFjaCggb2JqLCBmdW5jdGlvbiggaSwgdiApIHtcblx0XHRcdGlmICggdHJhZGl0aW9uYWwgfHwgcmJyYWNrZXQudGVzdCggcHJlZml4ICkgKSB7XG5cblx0XHRcdFx0Ly8gVHJlYXQgZWFjaCBhcnJheSBpdGVtIGFzIGEgc2NhbGFyLlxuXHRcdFx0XHRhZGQoIHByZWZpeCwgdiApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEl0ZW0gaXMgbm9uLXNjYWxhciAoYXJyYXkgb3Igb2JqZWN0KSwgZW5jb2RlIGl0cyBudW1lcmljIGluZGV4LlxuXHRcdFx0XHRidWlsZFBhcmFtcyhcblx0XHRcdFx0XHRwcmVmaXggKyBcIltcIiArICggdHlwZW9mIHYgPT09IFwib2JqZWN0XCIgJiYgdiAhPSBudWxsID8gaSA6IFwiXCIgKSArIFwiXVwiLFxuXHRcdFx0XHRcdHYsXG5cdFx0XHRcdFx0dHJhZGl0aW9uYWwsXG5cdFx0XHRcdFx0YWRkXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXG5cdH0gZWxzZSBpZiAoICF0cmFkaXRpb25hbCAmJiB0b1R5cGUoIG9iaiApID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIG9iamVjdCBpdGVtLlxuXHRcdGZvciAoIG5hbWUgaW4gb2JqICkge1xuXHRcdFx0YnVpbGRQYXJhbXMoIHByZWZpeCArIFwiW1wiICsgbmFtZSArIFwiXVwiLCBvYmpbIG5hbWUgXSwgdHJhZGl0aW9uYWwsIGFkZCApO1xuXHRcdH1cblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gU2VyaWFsaXplIHNjYWxhciBpdGVtLlxuXHRcdGFkZCggcHJlZml4LCBvYmogKTtcblx0fVxufVxuXG4vLyBTZXJpYWxpemUgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cyBvciBhIHNldCBvZlxuLy8ga2V5L3ZhbHVlcyBpbnRvIGEgcXVlcnkgc3RyaW5nXG5qUXVlcnkucGFyYW0gPSBmdW5jdGlvbiggYSwgdHJhZGl0aW9uYWwgKSB7XG5cdHZhciBwcmVmaXgsXG5cdFx0cyA9IFtdLFxuXHRcdGFkZCA9IGZ1bmN0aW9uKCBrZXksIHZhbHVlT3JGdW5jdGlvbiApIHtcblxuXHRcdFx0Ly8gSWYgdmFsdWUgaXMgYSBmdW5jdGlvbiwgaW52b2tlIGl0IGFuZCB1c2UgaXRzIHJldHVybiB2YWx1ZVxuXHRcdFx0dmFyIHZhbHVlID0gaXNGdW5jdGlvbiggdmFsdWVPckZ1bmN0aW9uICkgP1xuXHRcdFx0XHR2YWx1ZU9yRnVuY3Rpb24oKSA6XG5cdFx0XHRcdHZhbHVlT3JGdW5jdGlvbjtcblxuXHRcdFx0c1sgcy5sZW5ndGggXSA9IGVuY29kZVVSSUNvbXBvbmVudCgga2V5ICkgKyBcIj1cIiArXG5cdFx0XHRcdGVuY29kZVVSSUNvbXBvbmVudCggdmFsdWUgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZSApO1xuXHRcdH07XG5cblx0aWYgKCBhID09IG51bGwgKSB7XG5cdFx0cmV0dXJuIFwiXCI7XG5cdH1cblxuXHQvLyBJZiBhbiBhcnJheSB3YXMgcGFzc2VkIGluLCBhc3N1bWUgdGhhdCBpdCBpcyBhbiBhcnJheSBvZiBmb3JtIGVsZW1lbnRzLlxuXHRpZiAoIEFycmF5LmlzQXJyYXkoIGEgKSB8fCAoIGEuanF1ZXJ5ICYmICFqUXVlcnkuaXNQbGFpbk9iamVjdCggYSApICkgKSB7XG5cblx0XHQvLyBTZXJpYWxpemUgdGhlIGZvcm0gZWxlbWVudHNcblx0XHRqUXVlcnkuZWFjaCggYSwgZnVuY3Rpb24oKSB7XG5cdFx0XHRhZGQoIHRoaXMubmFtZSwgdGhpcy52YWx1ZSApO1xuXHRcdH0gKTtcblxuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gSWYgdHJhZGl0aW9uYWwsIGVuY29kZSB0aGUgXCJvbGRcIiB3YXkgKHRoZSB3YXkgMS4zLjIgb3Igb2xkZXJcblx0XHQvLyBkaWQgaXQpLCBvdGhlcndpc2UgZW5jb2RlIHBhcmFtcyByZWN1cnNpdmVseS5cblx0XHRmb3IgKCBwcmVmaXggaW4gYSApIHtcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXgsIGFbIHByZWZpeCBdLCB0cmFkaXRpb25hbCwgYWRkICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSByZXN1bHRpbmcgc2VyaWFsaXphdGlvblxuXHRyZXR1cm4gcy5qb2luKCBcIiZcIiApO1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRzZXJpYWxpemU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBqUXVlcnkucGFyYW0oIHRoaXMuc2VyaWFsaXplQXJyYXkoKSApO1xuXHR9LFxuXHRzZXJpYWxpemVBcnJheTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gQ2FuIGFkZCBwcm9wSG9vayBmb3IgXCJlbGVtZW50c1wiIHRvIGZpbHRlciBvciBhZGQgZm9ybSBlbGVtZW50c1xuXHRcdFx0dmFyIGVsZW1lbnRzID0galF1ZXJ5LnByb3AoIHRoaXMsIFwiZWxlbWVudHNcIiApO1xuXHRcdFx0cmV0dXJuIGVsZW1lbnRzID8galF1ZXJ5Lm1ha2VBcnJheSggZWxlbWVudHMgKSA6IHRoaXM7XG5cdFx0fSApLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgdHlwZSA9IHRoaXMudHlwZTtcblxuXHRcdFx0Ly8gVXNlIC5pcyggXCI6ZGlzYWJsZWRcIiApIHNvIHRoYXQgZmllbGRzZXRbZGlzYWJsZWRdIHdvcmtzXG5cdFx0XHRyZXR1cm4gdGhpcy5uYW1lICYmICFqUXVlcnkoIHRoaXMgKS5pcyggXCI6ZGlzYWJsZWRcIiApICYmXG5cdFx0XHRcdHJzdWJtaXR0YWJsZS50ZXN0KCB0aGlzLm5vZGVOYW1lICkgJiYgIXJzdWJtaXR0ZXJUeXBlcy50ZXN0KCB0eXBlICkgJiZcblx0XHRcdFx0KCB0aGlzLmNoZWNrZWQgfHwgIXJjaGVja2FibGVUeXBlLnRlc3QoIHR5cGUgKSApO1xuXHRcdH0gKS5tYXAoIGZ1bmN0aW9uKCBfaSwgZWxlbSApIHtcblx0XHRcdHZhciB2YWwgPSBqUXVlcnkoIHRoaXMgKS52YWwoKTtcblxuXHRcdFx0aWYgKCB2YWwgPT0gbnVsbCApIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdGlmICggQXJyYXkuaXNBcnJheSggdmFsICkgKSB7XG5cdFx0XHRcdHJldHVybiBqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWwgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCBcIlxcclxcblwiICkgfTtcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4geyBuYW1lOiBlbGVtLm5hbWUsIHZhbHVlOiB2YWwucmVwbGFjZSggckNSTEYsIFwiXFxyXFxuXCIgKSB9O1xuXHRcdH0gKS5nZXQoKTtcblx0fVxufSApO1xuXG5cbnZhclxuXHRyMjAgPSAvJTIwL2csXG5cdHJoYXNoID0gLyMuKiQvLFxuXHRyYW50aUNhY2hlID0gLyhbPyZdKV89W14mXSovLFxuXHRyaGVhZGVycyA9IC9eKC4qPyk6WyBcXHRdKihbXlxcclxcbl0qKSQvbWcsXG5cblx0Ly8gIzc2NTMsICM4MTI1LCAjODE1MjogbG9jYWwgcHJvdG9jb2wgZGV0ZWN0aW9uXG5cdHJsb2NhbFByb3RvY29sID0gL14oPzphYm91dHxhcHB8YXBwLXN0b3JhZ2V8ListZXh0ZW5zaW9ufGZpbGV8cmVzfHdpZGdldCk6JC8sXG5cdHJub0NvbnRlbnQgPSAvXig/OkdFVHxIRUFEKSQvLFxuXHRycHJvdG9jb2wgPSAvXlxcL1xcLy8sXG5cblx0LyogUHJlZmlsdGVyc1xuXHQgKiAxKSBUaGV5IGFyZSB1c2VmdWwgdG8gaW50cm9kdWNlIGN1c3RvbSBkYXRhVHlwZXMgKHNlZSBhamF4L2pzb25wLmpzIGZvciBhbiBleGFtcGxlKVxuXHQgKiAyKSBUaGVzZSBhcmUgY2FsbGVkOlxuXHQgKiAgICAtIEJFRk9SRSBhc2tpbmcgZm9yIGEgdHJhbnNwb3J0XG5cdCAqICAgIC0gQUZURVIgcGFyYW0gc2VyaWFsaXphdGlvbiAocy5kYXRhIGlzIGEgc3RyaW5nIGlmIHMucHJvY2Vzc0RhdGEgaXMgdHJ1ZSlcblx0ICogMykga2V5IGlzIHRoZSBkYXRhVHlwZVxuXHQgKiA0KSB0aGUgY2F0Y2hhbGwgc3ltYm9sIFwiKlwiIGNhbiBiZSB1c2VkXG5cdCAqIDUpIGV4ZWN1dGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGNvbnRpbnVlIGRvd24gdG8gXCIqXCIgaWYgbmVlZGVkXG5cdCAqL1xuXHRwcmVmaWx0ZXJzID0ge30sXG5cblx0LyogVHJhbnNwb3J0cyBiaW5kaW5nc1xuXHQgKiAxKSBrZXkgaXMgdGhlIGRhdGFUeXBlXG5cdCAqIDIpIHRoZSBjYXRjaGFsbCBzeW1ib2wgXCIqXCIgY2FuIGJlIHVzZWRcblx0ICogMykgc2VsZWN0aW9uIHdpbGwgc3RhcnQgd2l0aCB0cmFuc3BvcnQgZGF0YVR5cGUgYW5kIFRIRU4gZ28gdG8gXCIqXCIgaWYgbmVlZGVkXG5cdCAqL1xuXHR0cmFuc3BvcnRzID0ge30sXG5cblx0Ly8gQXZvaWQgY29tbWVudC1wcm9sb2cgY2hhciBzZXF1ZW5jZSAoIzEwMDk4KTsgbXVzdCBhcHBlYXNlIGxpbnQgYW5kIGV2YWRlIGNvbXByZXNzaW9uXG5cdGFsbFR5cGVzID0gXCIqL1wiLmNvbmNhdCggXCIqXCIgKSxcblxuXHQvLyBBbmNob3IgdGFnIGZvciBwYXJzaW5nIHRoZSBkb2N1bWVudCBvcmlnaW5cblx0b3JpZ2luQW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJhXCIgKTtcblxub3JpZ2luQW5jaG9yLmhyZWYgPSBsb2NhdGlvbi5ocmVmO1xuXG4vLyBCYXNlIFwiY29uc3RydWN0b3JcIiBmb3IgalF1ZXJ5LmFqYXhQcmVmaWx0ZXIgYW5kIGpRdWVyeS5hamF4VHJhbnNwb3J0XG5mdW5jdGlvbiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHN0cnVjdHVyZSApIHtcblxuXHQvLyBkYXRhVHlwZUV4cHJlc3Npb24gaXMgb3B0aW9uYWwgYW5kIGRlZmF1bHRzIHRvIFwiKlwiXG5cdHJldHVybiBmdW5jdGlvbiggZGF0YVR5cGVFeHByZXNzaW9uLCBmdW5jICkge1xuXG5cdFx0aWYgKCB0eXBlb2YgZGF0YVR5cGVFeHByZXNzaW9uICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0ZnVuYyA9IGRhdGFUeXBlRXhwcmVzc2lvbjtcblx0XHRcdGRhdGFUeXBlRXhwcmVzc2lvbiA9IFwiKlwiO1xuXHRcdH1cblxuXHRcdHZhciBkYXRhVHlwZSxcblx0XHRcdGkgPSAwLFxuXHRcdFx0ZGF0YVR5cGVzID0gZGF0YVR5cGVFeHByZXNzaW9uLnRvTG93ZXJDYXNlKCkubWF0Y2goIHJub3RodG1sd2hpdGUgKSB8fCBbXTtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggZnVuYyApICkge1xuXG5cdFx0XHQvLyBGb3IgZWFjaCBkYXRhVHlwZSBpbiB0aGUgZGF0YVR5cGVFeHByZXNzaW9uXG5cdFx0XHR3aGlsZSAoICggZGF0YVR5cGUgPSBkYXRhVHlwZXNbIGkrKyBdICkgKSB7XG5cblx0XHRcdFx0Ly8gUHJlcGVuZCBpZiByZXF1ZXN0ZWRcblx0XHRcdFx0aWYgKCBkYXRhVHlwZVsgMCBdID09PSBcIitcIiApIHtcblx0XHRcdFx0XHRkYXRhVHlwZSA9IGRhdGFUeXBlLnNsaWNlKCAxICkgfHwgXCIqXCI7XG5cdFx0XHRcdFx0KCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gPSBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10gKS51bnNoaWZ0KCBmdW5jICk7XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIGFwcGVuZFxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdCggc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdICkucHVzaCggZnVuYyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9O1xufVxuXG4vLyBCYXNlIGluc3BlY3Rpb24gZnVuY3Rpb24gZm9yIHByZWZpbHRlcnMgYW5kIHRyYW5zcG9ydHNcbmZ1bmN0aW9uIGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUsIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKSB7XG5cblx0dmFyIGluc3BlY3RlZCA9IHt9LFxuXHRcdHNlZWtpbmdUcmFuc3BvcnQgPSAoIHN0cnVjdHVyZSA9PT0gdHJhbnNwb3J0cyApO1xuXG5cdGZ1bmN0aW9uIGluc3BlY3QoIGRhdGFUeXBlICkge1xuXHRcdHZhciBzZWxlY3RlZDtcblx0XHRpbnNwZWN0ZWRbIGRhdGFUeXBlIF0gPSB0cnVlO1xuXHRcdGpRdWVyeS5lYWNoKCBzdHJ1Y3R1cmVbIGRhdGFUeXBlIF0gfHwgW10sIGZ1bmN0aW9uKCBfLCBwcmVmaWx0ZXJPckZhY3RvcnkgKSB7XG5cdFx0XHR2YXIgZGF0YVR5cGVPclRyYW5zcG9ydCA9IHByZWZpbHRlck9yRmFjdG9yeSggb3B0aW9ucywgb3JpZ2luYWxPcHRpb25zLCBqcVhIUiApO1xuXHRcdFx0aWYgKCB0eXBlb2YgZGF0YVR5cGVPclRyYW5zcG9ydCA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQhc2Vla2luZ1RyYW5zcG9ydCAmJiAhaW5zcGVjdGVkWyBkYXRhVHlwZU9yVHJhbnNwb3J0IF0gKSB7XG5cblx0XHRcdFx0b3B0aW9ucy5kYXRhVHlwZXMudW5zaGlmdCggZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0XHRpbnNwZWN0KCBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH0gZWxzZSBpZiAoIHNlZWtpbmdUcmFuc3BvcnQgKSB7XG5cdFx0XHRcdHJldHVybiAhKCBzZWxlY3RlZCA9IGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdH1cblx0XHR9ICk7XG5cdFx0cmV0dXJuIHNlbGVjdGVkO1xuXHR9XG5cblx0cmV0dXJuIGluc3BlY3QoIG9wdGlvbnMuZGF0YVR5cGVzWyAwIF0gKSB8fCAhaW5zcGVjdGVkWyBcIipcIiBdICYmIGluc3BlY3QoIFwiKlwiICk7XG59XG5cbi8vIEEgc3BlY2lhbCBleHRlbmQgZm9yIGFqYXggb3B0aW9uc1xuLy8gdGhhdCB0YWtlcyBcImZsYXRcIiBvcHRpb25zIChub3QgdG8gYmUgZGVlcCBleHRlbmRlZClcbi8vIEZpeGVzICM5ODg3XG5mdW5jdGlvbiBhamF4RXh0ZW5kKCB0YXJnZXQsIHNyYyApIHtcblx0dmFyIGtleSwgZGVlcCxcblx0XHRmbGF0T3B0aW9ucyA9IGpRdWVyeS5hamF4U2V0dGluZ3MuZmxhdE9wdGlvbnMgfHwge307XG5cblx0Zm9yICgga2V5IGluIHNyYyApIHtcblx0XHRpZiAoIHNyY1sga2V5IF0gIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdCggZmxhdE9wdGlvbnNbIGtleSBdID8gdGFyZ2V0IDogKCBkZWVwIHx8ICggZGVlcCA9IHt9ICkgKSApWyBrZXkgXSA9IHNyY1sga2V5IF07XG5cdFx0fVxuXHR9XG5cdGlmICggZGVlcCApIHtcblx0XHRqUXVlcnkuZXh0ZW5kKCB0cnVlLCB0YXJnZXQsIGRlZXAgKTtcblx0fVxuXG5cdHJldHVybiB0YXJnZXQ7XG59XG5cbi8qIEhhbmRsZXMgcmVzcG9uc2VzIHRvIGFuIGFqYXggcmVxdWVzdDpcbiAqIC0gZmluZHMgdGhlIHJpZ2h0IGRhdGFUeXBlIChtZWRpYXRlcyBiZXR3ZWVuIGNvbnRlbnQtdHlwZSBhbmQgZXhwZWN0ZWQgZGF0YVR5cGUpXG4gKiAtIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgcmVzcG9uc2VcbiAqL1xuZnVuY3Rpb24gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApIHtcblxuXHR2YXIgY3QsIHR5cGUsIGZpbmFsRGF0YVR5cGUsIGZpcnN0RGF0YVR5cGUsXG5cdFx0Y29udGVudHMgPSBzLmNvbnRlbnRzLFxuXHRcdGRhdGFUeXBlcyA9IHMuZGF0YVR5cGVzO1xuXG5cdC8vIFJlbW92ZSBhdXRvIGRhdGFUeXBlIGFuZCBnZXQgY29udGVudC10eXBlIGluIHRoZSBwcm9jZXNzXG5cdHdoaWxlICggZGF0YVR5cGVzWyAwIF0gPT09IFwiKlwiICkge1xuXHRcdGRhdGFUeXBlcy5zaGlmdCgpO1xuXHRcdGlmICggY3QgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGN0ID0gcy5taW1lVHlwZSB8fCBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJDb250ZW50LVR5cGVcIiApO1xuXHRcdH1cblx0fVxuXG5cdC8vIENoZWNrIGlmIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIGtub3duIGNvbnRlbnQtdHlwZVxuXHRpZiAoIGN0ICkge1xuXHRcdGZvciAoIHR5cGUgaW4gY29udGVudHMgKSB7XG5cdFx0XHRpZiAoIGNvbnRlbnRzWyB0eXBlIF0gJiYgY29udGVudHNbIHR5cGUgXS50ZXN0KCBjdCApICkge1xuXHRcdFx0XHRkYXRhVHlwZXMudW5zaGlmdCggdHlwZSApO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHQvLyBDaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBhIHJlc3BvbnNlIGZvciB0aGUgZXhwZWN0ZWQgZGF0YVR5cGVcblx0aWYgKCBkYXRhVHlwZXNbIDAgXSBpbiByZXNwb25zZXMgKSB7XG5cdFx0ZmluYWxEYXRhVHlwZSA9IGRhdGFUeXBlc1sgMCBdO1xuXHR9IGVsc2Uge1xuXG5cdFx0Ly8gVHJ5IGNvbnZlcnRpYmxlIGRhdGFUeXBlc1xuXHRcdGZvciAoIHR5cGUgaW4gcmVzcG9uc2VzICkge1xuXHRcdFx0aWYgKCAhZGF0YVR5cGVzWyAwIF0gfHwgcy5jb252ZXJ0ZXJzWyB0eXBlICsgXCIgXCIgKyBkYXRhVHlwZXNbIDAgXSBdICkge1xuXHRcdFx0XHRmaW5hbERhdGFUeXBlID0gdHlwZTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRpZiAoICFmaXJzdERhdGFUeXBlICkge1xuXHRcdFx0XHRmaXJzdERhdGFUeXBlID0gdHlwZTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBPciBqdXN0IHVzZSBmaXJzdCBvbmVcblx0XHRmaW5hbERhdGFUeXBlID0gZmluYWxEYXRhVHlwZSB8fCBmaXJzdERhdGFUeXBlO1xuXHR9XG5cblx0Ly8gSWYgd2UgZm91bmQgYSBkYXRhVHlwZVxuXHQvLyBXZSBhZGQgdGhlIGRhdGFUeXBlIHRvIHRoZSBsaXN0IGlmIG5lZWRlZFxuXHQvLyBhbmQgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlXG5cdGlmICggZmluYWxEYXRhVHlwZSApIHtcblx0XHRpZiAoIGZpbmFsRGF0YVR5cGUgIT09IGRhdGFUeXBlc1sgMCBdICkge1xuXHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIGZpbmFsRGF0YVR5cGUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3BvbnNlc1sgZmluYWxEYXRhVHlwZSBdO1xuXHR9XG59XG5cbi8qIENoYWluIGNvbnZlcnNpb25zIGdpdmVuIHRoZSByZXF1ZXN0IGFuZCB0aGUgb3JpZ2luYWwgcmVzcG9uc2VcbiAqIEFsc28gc2V0cyB0aGUgcmVzcG9uc2VYWFggZmllbGRzIG9uIHRoZSBqcVhIUiBpbnN0YW5jZVxuICovXG5mdW5jdGlvbiBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKSB7XG5cdHZhciBjb252MiwgY3VycmVudCwgY29udiwgdG1wLCBwcmV2LFxuXHRcdGNvbnZlcnRlcnMgPSB7fSxcblxuXHRcdC8vIFdvcmsgd2l0aCBhIGNvcHkgb2YgZGF0YVR5cGVzIGluIGNhc2Ugd2UgbmVlZCB0byBtb2RpZnkgaXQgZm9yIGNvbnZlcnNpb25cblx0XHRkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcy5zbGljZSgpO1xuXG5cdC8vIENyZWF0ZSBjb252ZXJ0ZXJzIG1hcCB3aXRoIGxvd2VyY2FzZWQga2V5c1xuXHRpZiAoIGRhdGFUeXBlc1sgMSBdICkge1xuXHRcdGZvciAoIGNvbnYgaW4gcy5jb252ZXJ0ZXJzICkge1xuXHRcdFx0Y29udmVydGVyc1sgY29udi50b0xvd2VyQ2FzZSgpIF0gPSBzLmNvbnZlcnRlcnNbIGNvbnYgXTtcblx0XHR9XG5cdH1cblxuXHRjdXJyZW50ID0gZGF0YVR5cGVzLnNoaWZ0KCk7XG5cblx0Ly8gQ29udmVydCB0byBlYWNoIHNlcXVlbnRpYWwgZGF0YVR5cGVcblx0d2hpbGUgKCBjdXJyZW50ICkge1xuXG5cdFx0aWYgKCBzLnJlc3BvbnNlRmllbGRzWyBjdXJyZW50IF0gKSB7XG5cdFx0XHRqcVhIUlsgcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdIF0gPSByZXNwb25zZTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSB0aGUgZGF0YUZpbHRlciBpZiBwcm92aWRlZFxuXHRcdGlmICggIXByZXYgJiYgaXNTdWNjZXNzICYmIHMuZGF0YUZpbHRlciApIHtcblx0XHRcdHJlc3BvbnNlID0gcy5kYXRhRmlsdGVyKCByZXNwb25zZSwgcy5kYXRhVHlwZSApO1xuXHRcdH1cblxuXHRcdHByZXYgPSBjdXJyZW50O1xuXHRcdGN1cnJlbnQgPSBkYXRhVHlwZXMuc2hpZnQoKTtcblxuXHRcdGlmICggY3VycmVudCApIHtcblxuXHRcdFx0Ly8gVGhlcmUncyBvbmx5IHdvcmsgdG8gZG8gaWYgY3VycmVudCBkYXRhVHlwZSBpcyBub24tYXV0b1xuXHRcdFx0aWYgKCBjdXJyZW50ID09PSBcIipcIiApIHtcblxuXHRcdFx0XHRjdXJyZW50ID0gcHJldjtcblxuXHRcdFx0Ly8gQ29udmVydCByZXNwb25zZSBpZiBwcmV2IGRhdGFUeXBlIGlzIG5vbi1hdXRvIGFuZCBkaWZmZXJzIGZyb20gY3VycmVudFxuXHRcdFx0fSBlbHNlIGlmICggcHJldiAhPT0gXCIqXCIgJiYgcHJldiAhPT0gY3VycmVudCApIHtcblxuXHRcdFx0XHQvLyBTZWVrIGEgZGlyZWN0IGNvbnZlcnRlclxuXHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgcHJldiArIFwiIFwiICsgY3VycmVudCBdIHx8IGNvbnZlcnRlcnNbIFwiKiBcIiArIGN1cnJlbnQgXTtcblxuXHRcdFx0XHQvLyBJZiBub25lIGZvdW5kLCBzZWVrIGEgcGFpclxuXHRcdFx0XHRpZiAoICFjb252ICkge1xuXHRcdFx0XHRcdGZvciAoIGNvbnYyIGluIGNvbnZlcnRlcnMgKSB7XG5cblx0XHRcdFx0XHRcdC8vIElmIGNvbnYyIG91dHB1dHMgY3VycmVudFxuXHRcdFx0XHRcdFx0dG1wID0gY29udjIuc3BsaXQoIFwiIFwiICk7XG5cdFx0XHRcdFx0XHRpZiAoIHRtcFsgMSBdID09PSBjdXJyZW50ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIElmIHByZXYgY2FuIGJlIGNvbnZlcnRlZCB0byBhY2NlcHRlZCBpbnB1dFxuXHRcdFx0XHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgcHJldiArIFwiIFwiICsgdG1wWyAwIF0gXSB8fFxuXHRcdFx0XHRcdFx0XHRcdGNvbnZlcnRlcnNbIFwiKiBcIiArIHRtcFsgMCBdIF07XG5cdFx0XHRcdFx0XHRcdGlmICggY29udiApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIENvbmRlbnNlIGVxdWl2YWxlbmNlIGNvbnZlcnRlcnNcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGNvbnYgPT09IHRydWUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb252ID0gY29udmVydGVyc1sgY29udjIgXTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIE90aGVyd2lzZSwgaW5zZXJ0IHRoZSBpbnRlcm1lZGlhdGUgZGF0YVR5cGVcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCBjb252ZXJ0ZXJzWyBjb252MiBdICE9PSB0cnVlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y3VycmVudCA9IHRtcFsgMCBdO1xuXHRcdFx0XHRcdFx0XHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIHRtcFsgMSBdICk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQXBwbHkgY29udmVydGVyIChpZiBub3QgYW4gZXF1aXZhbGVuY2UpXG5cdFx0XHRcdGlmICggY29udiAhPT0gdHJ1ZSApIHtcblxuXHRcdFx0XHRcdC8vIFVubGVzcyBlcnJvcnMgYXJlIGFsbG93ZWQgdG8gYnViYmxlLCBjYXRjaCBhbmQgcmV0dXJuIHRoZW1cblx0XHRcdFx0XHRpZiAoIGNvbnYgJiYgcy50aHJvd3MgKSB7XG5cdFx0XHRcdFx0XHRyZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlID0gY29udiggcmVzcG9uc2UgKTtcblx0XHRcdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4ge1xuXHRcdFx0XHRcdFx0XHRcdHN0YXRlOiBcInBhcnNlcmVycm9yXCIsXG5cdFx0XHRcdFx0XHRcdFx0ZXJyb3I6IGNvbnYgPyBlIDogXCJObyBjb252ZXJzaW9uIGZyb20gXCIgKyBwcmV2ICsgXCIgdG8gXCIgKyBjdXJyZW50XG5cdFx0XHRcdFx0XHRcdH07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHsgc3RhdGU6IFwic3VjY2Vzc1wiLCBkYXRhOiByZXNwb25zZSB9O1xufVxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cblx0Ly8gQ291bnRlciBmb3IgaG9sZGluZyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSBxdWVyaWVzXG5cdGFjdGl2ZTogMCxcblxuXHQvLyBMYXN0LU1vZGlmaWVkIGhlYWRlciBjYWNoZSBmb3IgbmV4dCByZXF1ZXN0XG5cdGxhc3RNb2RpZmllZDoge30sXG5cdGV0YWc6IHt9LFxuXG5cdGFqYXhTZXR0aW5nczoge1xuXHRcdHVybDogbG9jYXRpb24uaHJlZixcblx0XHR0eXBlOiBcIkdFVFwiLFxuXHRcdGlzTG9jYWw6IHJsb2NhbFByb3RvY29sLnRlc3QoIGxvY2F0aW9uLnByb3RvY29sICksXG5cdFx0Z2xvYmFsOiB0cnVlLFxuXHRcdHByb2Nlc3NEYXRhOiB0cnVlLFxuXHRcdGFzeW5jOiB0cnVlLFxuXHRcdGNvbnRlbnRUeXBlOiBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDsgY2hhcnNldD1VVEYtOFwiLFxuXG5cdFx0Lypcblx0XHR0aW1lb3V0OiAwLFxuXHRcdGRhdGE6IG51bGwsXG5cdFx0ZGF0YVR5cGU6IG51bGwsXG5cdFx0dXNlcm5hbWU6IG51bGwsXG5cdFx0cGFzc3dvcmQ6IG51bGwsXG5cdFx0Y2FjaGU6IG51bGwsXG5cdFx0dGhyb3dzOiBmYWxzZSxcblx0XHR0cmFkaXRpb25hbDogZmFsc2UsXG5cdFx0aGVhZGVyczoge30sXG5cdFx0Ki9cblxuXHRcdGFjY2VwdHM6IHtcblx0XHRcdFwiKlwiOiBhbGxUeXBlcyxcblx0XHRcdHRleHQ6IFwidGV4dC9wbGFpblwiLFxuXHRcdFx0aHRtbDogXCJ0ZXh0L2h0bWxcIixcblx0XHRcdHhtbDogXCJhcHBsaWNhdGlvbi94bWwsIHRleHQveG1sXCIsXG5cdFx0XHRqc29uOiBcImFwcGxpY2F0aW9uL2pzb24sIHRleHQvamF2YXNjcmlwdFwiXG5cdFx0fSxcblxuXHRcdGNvbnRlbnRzOiB7XG5cdFx0XHR4bWw6IC9cXGJ4bWxcXGIvLFxuXHRcdFx0aHRtbDogL1xcYmh0bWwvLFxuXHRcdFx0anNvbjogL1xcYmpzb25cXGIvXG5cdFx0fSxcblxuXHRcdHJlc3BvbnNlRmllbGRzOiB7XG5cdFx0XHR4bWw6IFwicmVzcG9uc2VYTUxcIixcblx0XHRcdHRleHQ6IFwicmVzcG9uc2VUZXh0XCIsXG5cdFx0XHRqc29uOiBcInJlc3BvbnNlSlNPTlwiXG5cdFx0fSxcblxuXHRcdC8vIERhdGEgY29udmVydGVyc1xuXHRcdC8vIEtleXMgc2VwYXJhdGUgc291cmNlIChvciBjYXRjaGFsbCBcIipcIikgYW5kIGRlc3RpbmF0aW9uIHR5cGVzIHdpdGggYSBzaW5nbGUgc3BhY2Vcblx0XHRjb252ZXJ0ZXJzOiB7XG5cblx0XHRcdC8vIENvbnZlcnQgYW55dGhpbmcgdG8gdGV4dFxuXHRcdFx0XCIqIHRleHRcIjogU3RyaW5nLFxuXG5cdFx0XHQvLyBUZXh0IHRvIGh0bWwgKHRydWUgPSBubyB0cmFuc2Zvcm1hdGlvbilcblx0XHRcdFwidGV4dCBodG1sXCI6IHRydWUsXG5cblx0XHRcdC8vIEV2YWx1YXRlIHRleHQgYXMgYSBqc29uIGV4cHJlc3Npb25cblx0XHRcdFwidGV4dCBqc29uXCI6IEpTT04ucGFyc2UsXG5cblx0XHRcdC8vIFBhcnNlIHRleHQgYXMgeG1sXG5cdFx0XHRcInRleHQgeG1sXCI6IGpRdWVyeS5wYXJzZVhNTFxuXHRcdH0sXG5cblx0XHQvLyBGb3Igb3B0aW9ucyB0aGF0IHNob3VsZG4ndCBiZSBkZWVwIGV4dGVuZGVkOlxuXHRcdC8vIHlvdSBjYW4gYWRkIHlvdXIgb3duIGN1c3RvbSBvcHRpb25zIGhlcmUgaWZcblx0XHQvLyBhbmQgd2hlbiB5b3UgY3JlYXRlIG9uZSB0aGF0IHNob3VsZG4ndCBiZVxuXHRcdC8vIGRlZXAgZXh0ZW5kZWQgKHNlZSBhamF4RXh0ZW5kKVxuXHRcdGZsYXRPcHRpb25zOiB7XG5cdFx0XHR1cmw6IHRydWUsXG5cdFx0XHRjb250ZXh0OiB0cnVlXG5cdFx0fVxuXHR9LFxuXG5cdC8vIENyZWF0ZXMgYSBmdWxsIGZsZWRnZWQgc2V0dGluZ3Mgb2JqZWN0IGludG8gdGFyZ2V0XG5cdC8vIHdpdGggYm90aCBhamF4U2V0dGluZ3MgYW5kIHNldHRpbmdzIGZpZWxkcy5cblx0Ly8gSWYgdGFyZ2V0IGlzIG9taXR0ZWQsIHdyaXRlcyBpbnRvIGFqYXhTZXR0aW5ncy5cblx0YWpheFNldHVwOiBmdW5jdGlvbiggdGFyZ2V0LCBzZXR0aW5ncyApIHtcblx0XHRyZXR1cm4gc2V0dGluZ3MgP1xuXG5cdFx0XHQvLyBCdWlsZGluZyBhIHNldHRpbmdzIG9iamVjdFxuXHRcdFx0YWpheEV4dGVuZCggYWpheEV4dGVuZCggdGFyZ2V0LCBqUXVlcnkuYWpheFNldHRpbmdzICksIHNldHRpbmdzICkgOlxuXG5cdFx0XHQvLyBFeHRlbmRpbmcgYWpheFNldHRpbmdzXG5cdFx0XHRhamF4RXh0ZW5kKCBqUXVlcnkuYWpheFNldHRpbmdzLCB0YXJnZXQgKTtcblx0fSxcblxuXHRhamF4UHJlZmlsdGVyOiBhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMgKSxcblx0YWpheFRyYW5zcG9ydDogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzICksXG5cblx0Ly8gTWFpbiBtZXRob2Rcblx0YWpheDogZnVuY3Rpb24oIHVybCwgb3B0aW9ucyApIHtcblxuXHRcdC8vIElmIHVybCBpcyBhbiBvYmplY3QsIHNpbXVsYXRlIHByZS0xLjUgc2lnbmF0dXJlXG5cdFx0aWYgKCB0eXBlb2YgdXJsID09PSBcIm9iamVjdFwiICkge1xuXHRcdFx0b3B0aW9ucyA9IHVybDtcblx0XHRcdHVybCA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBGb3JjZSBvcHRpb25zIHRvIGJlIGFuIG9iamVjdFxuXHRcdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuXG5cdFx0dmFyIHRyYW5zcG9ydCxcblxuXHRcdFx0Ly8gVVJMIHdpdGhvdXQgYW50aS1jYWNoZSBwYXJhbVxuXHRcdFx0Y2FjaGVVUkwsXG5cblx0XHRcdC8vIFJlc3BvbnNlIGhlYWRlcnNcblx0XHRcdHJlc3BvbnNlSGVhZGVyc1N0cmluZyxcblx0XHRcdHJlc3BvbnNlSGVhZGVycyxcblxuXHRcdFx0Ly8gdGltZW91dCBoYW5kbGVcblx0XHRcdHRpbWVvdXRUaW1lcixcblxuXHRcdFx0Ly8gVXJsIGNsZWFudXAgdmFyXG5cdFx0XHR1cmxBbmNob3IsXG5cblx0XHRcdC8vIFJlcXVlc3Qgc3RhdGUgKGJlY29tZXMgZmFsc2UgdXBvbiBzZW5kIGFuZCB0cnVlIHVwb24gY29tcGxldGlvbilcblx0XHRcdGNvbXBsZXRlZCxcblxuXHRcdFx0Ly8gVG8ga25vdyBpZiBnbG9iYWwgZXZlbnRzIGFyZSB0byBiZSBkaXNwYXRjaGVkXG5cdFx0XHRmaXJlR2xvYmFscyxcblxuXHRcdFx0Ly8gTG9vcCB2YXJpYWJsZVxuXHRcdFx0aSxcblxuXHRcdFx0Ly8gdW5jYWNoZWQgcGFydCBvZiB0aGUgdXJsXG5cdFx0XHR1bmNhY2hlZCxcblxuXHRcdFx0Ly8gQ3JlYXRlIHRoZSBmaW5hbCBvcHRpb25zIG9iamVjdFxuXHRcdFx0cyA9IGpRdWVyeS5hamF4U2V0dXAoIHt9LCBvcHRpb25zICksXG5cblx0XHRcdC8vIENhbGxiYWNrcyBjb250ZXh0XG5cdFx0XHRjYWxsYmFja0NvbnRleHQgPSBzLmNvbnRleHQgfHwgcyxcblxuXHRcdFx0Ly8gQ29udGV4dCBmb3IgZ2xvYmFsIGV2ZW50cyBpcyBjYWxsYmFja0NvbnRleHQgaWYgaXQgaXMgYSBET00gbm9kZSBvciBqUXVlcnkgY29sbGVjdGlvblxuXHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0ID0gcy5jb250ZXh0ICYmXG5cdFx0XHRcdCggY2FsbGJhY2tDb250ZXh0Lm5vZGVUeXBlIHx8IGNhbGxiYWNrQ29udGV4dC5qcXVlcnkgKSA/XG5cdFx0XHRcdGpRdWVyeSggY2FsbGJhY2tDb250ZXh0ICkgOlxuXHRcdFx0XHRqUXVlcnkuZXZlbnQsXG5cblx0XHRcdC8vIERlZmVycmVkc1xuXHRcdFx0ZGVmZXJyZWQgPSBqUXVlcnkuRGVmZXJyZWQoKSxcblx0XHRcdGNvbXBsZXRlRGVmZXJyZWQgPSBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblxuXHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdHN0YXR1c0NvZGUgPSBzLnN0YXR1c0NvZGUgfHwge30sXG5cblx0XHRcdC8vIEhlYWRlcnMgKHRoZXkgYXJlIHNlbnQgYWxsIGF0IG9uY2UpXG5cdFx0XHRyZXF1ZXN0SGVhZGVycyA9IHt9LFxuXHRcdFx0cmVxdWVzdEhlYWRlcnNOYW1lcyA9IHt9LFxuXG5cdFx0XHQvLyBEZWZhdWx0IGFib3J0IG1lc3NhZ2Vcblx0XHRcdHN0ckFib3J0ID0gXCJjYW5jZWxlZFwiLFxuXG5cdFx0XHQvLyBGYWtlIHhoclxuXHRcdFx0anFYSFIgPSB7XG5cdFx0XHRcdHJlYWR5U3RhdGU6IDAsXG5cblx0XHRcdFx0Ly8gQnVpbGRzIGhlYWRlcnMgaGFzaHRhYmxlIGlmIG5lZWRlZFxuXHRcdFx0XHRnZXRSZXNwb25zZUhlYWRlcjogZnVuY3Rpb24oIGtleSApIHtcblx0XHRcdFx0XHR2YXIgbWF0Y2g7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdFx0XHRpZiAoICFyZXNwb25zZUhlYWRlcnMgKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3BvbnNlSGVhZGVycyA9IHt9O1xuXHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbWF0Y2ggPSByaGVhZGVycy5leGVjKCByZXNwb25zZUhlYWRlcnNTdHJpbmcgKSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXSA9XG5cdFx0XHRcdFx0XHRcdFx0XHQoIHJlc3BvbnNlSGVhZGVyc1sgbWF0Y2hbIDEgXS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXSB8fCBbXSApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5jb25jYXQoIG1hdGNoWyAyIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0bWF0Y2ggPSByZXNwb25zZUhlYWRlcnNbIGtleS50b0xvd2VyQ2FzZSgpICsgXCIgXCIgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIG1hdGNoID09IG51bGwgPyBudWxsIDogbWF0Y2guam9pbiggXCIsIFwiICk7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gUmF3IHN0cmluZ1xuXHRcdFx0XHRnZXRBbGxSZXNwb25zZUhlYWRlcnM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdHJldHVybiBjb21wbGV0ZWQgPyByZXNwb25zZUhlYWRlcnNTdHJpbmcgOiBudWxsO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIENhY2hlcyB0aGUgaGVhZGVyXG5cdFx0XHRcdHNldFJlcXVlc3RIZWFkZXI6IGZ1bmN0aW9uKCBuYW1lLCB2YWx1ZSApIHtcblx0XHRcdFx0XHRpZiAoIGNvbXBsZXRlZCA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0bmFtZSA9IHJlcXVlc3RIZWFkZXJzTmFtZXNbIG5hbWUudG9Mb3dlckNhc2UoKSBdID1cblx0XHRcdFx0XHRcdFx0cmVxdWVzdEhlYWRlcnNOYW1lc1sgbmFtZS50b0xvd2VyQ2FzZSgpIF0gfHwgbmFtZTtcblx0XHRcdFx0XHRcdHJlcXVlc3RIZWFkZXJzWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gT3ZlcnJpZGVzIHJlc3BvbnNlIGNvbnRlbnQtdHlwZSBoZWFkZXJcblx0XHRcdFx0b3ZlcnJpZGVNaW1lVHlwZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdHMubWltZVR5cGUgPSB0eXBlO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0XHRzdGF0dXNDb2RlOiBmdW5jdGlvbiggbWFwICkge1xuXHRcdFx0XHRcdHZhciBjb2RlO1xuXHRcdFx0XHRcdGlmICggbWFwICkge1xuXHRcdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gRXhlY3V0ZSB0aGUgYXBwcm9wcmlhdGUgY2FsbGJhY2tzXG5cdFx0XHRcdFx0XHRcdGpxWEhSLmFsd2F5cyggbWFwWyBqcVhIUi5zdGF0dXMgXSApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBMYXp5LWFkZCB0aGUgbmV3IGNhbGxiYWNrcyBpbiBhIHdheSB0aGF0IHByZXNlcnZlcyBvbGQgb25lc1xuXHRcdFx0XHRcdFx0XHRmb3IgKCBjb2RlIGluIG1hcCApIHtcblx0XHRcdFx0XHRcdFx0XHRzdGF0dXNDb2RlWyBjb2RlIF0gPSBbIHN0YXR1c0NvZGVbIGNvZGUgXSwgbWFwWyBjb2RlIF0gXTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBDYW5jZWwgdGhlIHJlcXVlc3Rcblx0XHRcdFx0YWJvcnQ6IGZ1bmN0aW9uKCBzdGF0dXNUZXh0ICkge1xuXHRcdFx0XHRcdHZhciBmaW5hbFRleHQgPSBzdGF0dXNUZXh0IHx8IHN0ckFib3J0O1xuXHRcdFx0XHRcdGlmICggdHJhbnNwb3J0ICkge1xuXHRcdFx0XHRcdFx0dHJhbnNwb3J0LmFib3J0KCBmaW5hbFRleHQgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZG9uZSggMCwgZmluYWxUZXh0ICk7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHQvLyBBdHRhY2ggZGVmZXJyZWRzXG5cdFx0ZGVmZXJyZWQucHJvbWlzZSgganFYSFIgKTtcblxuXHRcdC8vIEFkZCBwcm90b2NvbCBpZiBub3QgcHJvdmlkZWQgKHByZWZpbHRlcnMgbWlnaHQgZXhwZWN0IGl0KVxuXHRcdC8vIEhhbmRsZSBmYWxzeSB1cmwgaW4gdGhlIHNldHRpbmdzIG9iamVjdCAoIzEwMDkzOiBjb25zaXN0ZW5jeSB3aXRoIG9sZCBzaWduYXR1cmUpXG5cdFx0Ly8gV2UgYWxzbyB1c2UgdGhlIHVybCBwYXJhbWV0ZXIgaWYgYXZhaWxhYmxlXG5cdFx0cy51cmwgPSAoICggdXJsIHx8IHMudXJsIHx8IGxvY2F0aW9uLmhyZWYgKSArIFwiXCIgKVxuXHRcdFx0LnJlcGxhY2UoIHJwcm90b2NvbCwgbG9jYXRpb24ucHJvdG9jb2wgKyBcIi8vXCIgKTtcblxuXHRcdC8vIEFsaWFzIG1ldGhvZCBvcHRpb24gdG8gdHlwZSBhcyBwZXIgdGlja2V0ICMxMjAwNFxuXHRcdHMudHlwZSA9IG9wdGlvbnMubWV0aG9kIHx8IG9wdGlvbnMudHlwZSB8fCBzLm1ldGhvZCB8fCBzLnR5cGU7XG5cblx0XHQvLyBFeHRyYWN0IGRhdGFUeXBlcyBsaXN0XG5cdFx0cy5kYXRhVHlwZXMgPSAoIHMuZGF0YVR5cGUgfHwgXCIqXCIgKS50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyBcIlwiIF07XG5cblx0XHQvLyBBIGNyb3NzLWRvbWFpbiByZXF1ZXN0IGlzIGluIG9yZGVyIHdoZW4gdGhlIG9yaWdpbiBkb2Vzbid0IG1hdGNoIHRoZSBjdXJyZW50IG9yaWdpbi5cblx0XHRpZiAoIHMuY3Jvc3NEb21haW4gPT0gbnVsbCApIHtcblx0XHRcdHVybEFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiYVwiICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OCAtIDExLCBFZGdlIDEyIC0gMTVcblx0XHRcdC8vIElFIHRocm93cyBleGNlcHRpb24gb24gYWNjZXNzaW5nIHRoZSBocmVmIHByb3BlcnR5IGlmIHVybCBpcyBtYWxmb3JtZWQsXG5cdFx0XHQvLyBlLmcuIGh0dHA6Ly9leGFtcGxlLmNvbTo4MHgvXG5cdFx0XHR0cnkge1xuXHRcdFx0XHR1cmxBbmNob3IuaHJlZiA9IHMudXJsO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OCAtIDExIG9ubHlcblx0XHRcdFx0Ly8gQW5jaG9yJ3MgaG9zdCBwcm9wZXJ0eSBpc24ndCBjb3JyZWN0bHkgc2V0IHdoZW4gcy51cmwgaXMgcmVsYXRpdmVcblx0XHRcdFx0dXJsQW5jaG9yLmhyZWYgPSB1cmxBbmNob3IuaHJlZjtcblx0XHRcdFx0cy5jcm9zc0RvbWFpbiA9IG9yaWdpbkFuY2hvci5wcm90b2NvbCArIFwiLy9cIiArIG9yaWdpbkFuY2hvci5ob3N0ICE9PVxuXHRcdFx0XHRcdHVybEFuY2hvci5wcm90b2NvbCArIFwiLy9cIiArIHVybEFuY2hvci5ob3N0O1xuXHRcdFx0fSBjYXRjaCAoIGUgKSB7XG5cblx0XHRcdFx0Ly8gSWYgdGhlcmUgaXMgYW4gZXJyb3IgcGFyc2luZyB0aGUgVVJMLCBhc3N1bWUgaXQgaXMgY3Jvc3NEb21haW4sXG5cdFx0XHRcdC8vIGl0IGNhbiBiZSByZWplY3RlZCBieSB0aGUgdHJhbnNwb3J0IGlmIGl0IGlzIGludmFsaWRcblx0XHRcdFx0cy5jcm9zc0RvbWFpbiA9IHRydWU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29udmVydCBkYXRhIGlmIG5vdCBhbHJlYWR5IGEgc3RyaW5nXG5cdFx0aWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJiB0eXBlb2Ygcy5kYXRhICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0cy5kYXRhID0galF1ZXJ5LnBhcmFtKCBzLmRhdGEsIHMudHJhZGl0aW9uYWwgKTtcblx0XHR9XG5cblx0XHQvLyBBcHBseSBwcmVmaWx0ZXJzXG5cdFx0aW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHByZWZpbHRlcnMsIHMsIG9wdGlvbnMsIGpxWEhSICk7XG5cblx0XHQvLyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhIHByZWZpbHRlciwgc3RvcCB0aGVyZVxuXHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0cmV0dXJuIGpxWEhSO1xuXHRcdH1cblxuXHRcdC8vIFdlIGNhbiBmaXJlIGdsb2JhbCBldmVudHMgYXMgb2Ygbm93IGlmIGFza2VkIHRvXG5cdFx0Ly8gRG9uJ3QgZmlyZSBldmVudHMgaWYgalF1ZXJ5LmV2ZW50IGlzIHVuZGVmaW5lZCBpbiBhbiBBTUQtdXNhZ2Ugc2NlbmFyaW8gKCMxNTExOClcblx0XHRmaXJlR2xvYmFscyA9IGpRdWVyeS5ldmVudCAmJiBzLmdsb2JhbDtcblxuXHRcdC8vIFdhdGNoIGZvciBhIG5ldyBzZXQgb2YgcmVxdWVzdHNcblx0XHRpZiAoIGZpcmVHbG9iYWxzICYmIGpRdWVyeS5hY3RpdmUrKyA9PT0gMCApIHtcblx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBcImFqYXhTdGFydFwiICk7XG5cdFx0fVxuXG5cdFx0Ly8gVXBwZXJjYXNlIHRoZSB0eXBlXG5cdFx0cy50eXBlID0gcy50eXBlLnRvVXBwZXJDYXNlKCk7XG5cblx0XHQvLyBEZXRlcm1pbmUgaWYgcmVxdWVzdCBoYXMgY29udGVudFxuXHRcdHMuaGFzQ29udGVudCA9ICFybm9Db250ZW50LnRlc3QoIHMudHlwZSApO1xuXG5cdFx0Ly8gU2F2ZSB0aGUgVVJMIGluIGNhc2Ugd2UncmUgdG95aW5nIHdpdGggdGhlIElmLU1vZGlmaWVkLVNpbmNlXG5cdFx0Ly8gYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyIGxhdGVyIG9uXG5cdFx0Ly8gUmVtb3ZlIGhhc2ggdG8gc2ltcGxpZnkgdXJsIG1hbmlwdWxhdGlvblxuXHRcdGNhY2hlVVJMID0gcy51cmwucmVwbGFjZSggcmhhc2gsIFwiXCIgKTtcblxuXHRcdC8vIE1vcmUgb3B0aW9ucyBoYW5kbGluZyBmb3IgcmVxdWVzdHMgd2l0aCBubyBjb250ZW50XG5cdFx0aWYgKCAhcy5oYXNDb250ZW50ICkge1xuXG5cdFx0XHQvLyBSZW1lbWJlciB0aGUgaGFzaCBzbyB3ZSBjYW4gcHV0IGl0IGJhY2tcblx0XHRcdHVuY2FjaGVkID0gcy51cmwuc2xpY2UoIGNhY2hlVVJMLmxlbmd0aCApO1xuXG5cdFx0XHQvLyBJZiBkYXRhIGlzIGF2YWlsYWJsZSBhbmQgc2hvdWxkIGJlIHByb2Nlc3NlZCwgYXBwZW5kIGRhdGEgdG8gdXJsXG5cdFx0XHRpZiAoIHMuZGF0YSAmJiAoIHMucHJvY2Vzc0RhdGEgfHwgdHlwZW9mIHMuZGF0YSA9PT0gXCJzdHJpbmdcIiApICkge1xuXHRcdFx0XHRjYWNoZVVSTCArPSAoIHJxdWVyeS50ZXN0KCBjYWNoZVVSTCApID8gXCImXCIgOiBcIj9cIiApICsgcy5kYXRhO1xuXG5cdFx0XHRcdC8vICM5NjgyOiByZW1vdmUgZGF0YSBzbyB0aGF0IGl0J3Mgbm90IHVzZWQgaW4gYW4gZXZlbnR1YWwgcmV0cnlcblx0XHRcdFx0ZGVsZXRlIHMuZGF0YTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIG9yIHVwZGF0ZSBhbnRpLWNhY2hlIHBhcmFtIGlmIG5lZWRlZFxuXHRcdFx0aWYgKCBzLmNhY2hlID09PSBmYWxzZSApIHtcblx0XHRcdFx0Y2FjaGVVUkwgPSBjYWNoZVVSTC5yZXBsYWNlKCByYW50aUNhY2hlLCBcIiQxXCIgKTtcblx0XHRcdFx0dW5jYWNoZWQgPSAoIHJxdWVyeS50ZXN0KCBjYWNoZVVSTCApID8gXCImXCIgOiBcIj9cIiApICsgXCJfPVwiICsgKCBub25jZS5ndWlkKysgKSArXG5cdFx0XHRcdFx0dW5jYWNoZWQ7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFB1dCBoYXNoIGFuZCBhbnRpLWNhY2hlIG9uIHRoZSBVUkwgdGhhdCB3aWxsIGJlIHJlcXVlc3RlZCAoZ2gtMTczMilcblx0XHRcdHMudXJsID0gY2FjaGVVUkwgKyB1bmNhY2hlZDtcblxuXHRcdC8vIENoYW5nZSAnJTIwJyB0byAnKycgaWYgdGhpcyBpcyBlbmNvZGVkIGZvcm0gYm9keSBjb250ZW50IChnaC0yNjU4KVxuXHRcdH0gZWxzZSBpZiAoIHMuZGF0YSAmJiBzLnByb2Nlc3NEYXRhICYmXG5cdFx0XHQoIHMuY29udGVudFR5cGUgfHwgXCJcIiApLmluZGV4T2YoIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIgKSA9PT0gMCApIHtcblx0XHRcdHMuZGF0YSA9IHMuZGF0YS5yZXBsYWNlKCByMjAsIFwiK1wiICk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBJZi1Nb2RpZmllZC1TaW5jZSBhbmQvb3IgSWYtTm9uZS1NYXRjaCBoZWFkZXIsIGlmIGluIGlmTW9kaWZpZWQgbW9kZS5cblx0XHRpZiAoIHMuaWZNb2RpZmllZCApIHtcblx0XHRcdGlmICggalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApIHtcblx0XHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJJZi1Nb2RpZmllZC1TaW5jZVwiLCBqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdICk7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICkge1xuXHRcdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIklmLU5vbmUtTWF0Y2hcIiwgalF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIGNvcnJlY3QgaGVhZGVyLCBpZiBkYXRhIGlzIGJlaW5nIHNlbnRcblx0XHRpZiAoIHMuZGF0YSAmJiBzLmhhc0NvbnRlbnQgJiYgcy5jb250ZW50VHlwZSAhPT0gZmFsc2UgfHwgb3B0aW9ucy5jb250ZW50VHlwZSApIHtcblx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiQ29udGVudC1UeXBlXCIsIHMuY29udGVudFR5cGUgKTtcblx0XHR9XG5cblx0XHQvLyBTZXQgdGhlIEFjY2VwdHMgaGVhZGVyIGZvciB0aGUgc2VydmVyLCBkZXBlbmRpbmcgb24gdGhlIGRhdGFUeXBlXG5cdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlcihcblx0XHRcdFwiQWNjZXB0XCIsXG5cdFx0XHRzLmRhdGFUeXBlc1sgMCBdICYmIHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbIDAgXSBdID9cblx0XHRcdFx0cy5hY2NlcHRzWyBzLmRhdGFUeXBlc1sgMCBdIF0gK1xuXHRcdFx0XHRcdCggcy5kYXRhVHlwZXNbIDAgXSAhPT0gXCIqXCIgPyBcIiwgXCIgKyBhbGxUeXBlcyArIFwiOyBxPTAuMDFcIiA6IFwiXCIgKSA6XG5cdFx0XHRcdHMuYWNjZXB0c1sgXCIqXCIgXVxuXHRcdCk7XG5cblx0XHQvLyBDaGVjayBmb3IgaGVhZGVycyBvcHRpb25cblx0XHRmb3IgKCBpIGluIHMuaGVhZGVycyApIHtcblx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIGksIHMuaGVhZGVyc1sgaSBdICk7XG5cdFx0fVxuXG5cdFx0Ly8gQWxsb3cgY3VzdG9tIGhlYWRlcnMvbWltZXR5cGVzIGFuZCBlYXJseSBhYm9ydFxuXHRcdGlmICggcy5iZWZvcmVTZW5kICYmXG5cdFx0XHQoIHMuYmVmb3JlU2VuZC5jYWxsKCBjYWxsYmFja0NvbnRleHQsIGpxWEhSLCBzICkgPT09IGZhbHNlIHx8IGNvbXBsZXRlZCApICkge1xuXG5cdFx0XHQvLyBBYm9ydCBpZiBub3QgZG9uZSBhbHJlYWR5IGFuZCByZXR1cm5cblx0XHRcdHJldHVybiBqcVhIUi5hYm9ydCgpO1xuXHRcdH1cblxuXHRcdC8vIEFib3J0aW5nIGlzIG5vIGxvbmdlciBhIGNhbmNlbGxhdGlvblxuXHRcdHN0ckFib3J0ID0gXCJhYm9ydFwiO1xuXG5cdFx0Ly8gSW5zdGFsbCBjYWxsYmFja3Mgb24gZGVmZXJyZWRzXG5cdFx0Y29tcGxldGVEZWZlcnJlZC5hZGQoIHMuY29tcGxldGUgKTtcblx0XHRqcVhIUi5kb25lKCBzLnN1Y2Nlc3MgKTtcblx0XHRqcVhIUi5mYWlsKCBzLmVycm9yICk7XG5cblx0XHQvLyBHZXQgdHJhbnNwb3J0XG5cdFx0dHJhbnNwb3J0ID0gaW5zcGVjdFByZWZpbHRlcnNPclRyYW5zcG9ydHMoIHRyYW5zcG9ydHMsIHMsIG9wdGlvbnMsIGpxWEhSICk7XG5cblx0XHQvLyBJZiBubyB0cmFuc3BvcnQsIHdlIGF1dG8tYWJvcnRcblx0XHRpZiAoICF0cmFuc3BvcnQgKSB7XG5cdFx0XHRkb25lKCAtMSwgXCJObyBUcmFuc3BvcnRcIiApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRqcVhIUi5yZWFkeVN0YXRlID0gMTtcblxuXHRcdFx0Ly8gU2VuZCBnbG9iYWwgZXZlbnRcblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBcImFqYXhTZW5kXCIsIFsganFYSFIsIHMgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBJZiByZXF1ZXN0IHdhcyBhYm9ydGVkIGluc2lkZSBhamF4U2VuZCwgc3RvcCB0aGVyZVxuXHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdHJldHVybiBqcVhIUjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVGltZW91dFxuXHRcdFx0aWYgKCBzLmFzeW5jICYmIHMudGltZW91dCA+IDAgKSB7XG5cdFx0XHRcdHRpbWVvdXRUaW1lciA9IHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRqcVhIUi5hYm9ydCggXCJ0aW1lb3V0XCIgKTtcblx0XHRcdFx0fSwgcy50aW1lb3V0ICk7XG5cdFx0XHR9XG5cblx0XHRcdHRyeSB7XG5cdFx0XHRcdGNvbXBsZXRlZCA9IGZhbHNlO1xuXHRcdFx0XHR0cmFuc3BvcnQuc2VuZCggcmVxdWVzdEhlYWRlcnMsIGRvbmUgKTtcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdC8vIFJldGhyb3cgcG9zdC1jb21wbGV0aW9uIGV4Y2VwdGlvbnNcblx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgKSB7XG5cdFx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFByb3BhZ2F0ZSBvdGhlcnMgYXMgcmVzdWx0c1xuXHRcdFx0XHRkb25lKCAtMSwgZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhbGxiYWNrIGZvciB3aGVuIGV2ZXJ5dGhpbmcgaXMgZG9uZVxuXHRcdGZ1bmN0aW9uIGRvbmUoIHN0YXR1cywgbmF0aXZlU3RhdHVzVGV4dCwgcmVzcG9uc2VzLCBoZWFkZXJzICkge1xuXHRcdFx0dmFyIGlzU3VjY2Vzcywgc3VjY2VzcywgZXJyb3IsIHJlc3BvbnNlLCBtb2RpZmllZCxcblx0XHRcdFx0c3RhdHVzVGV4dCA9IG5hdGl2ZVN0YXR1c1RleHQ7XG5cblx0XHRcdC8vIElnbm9yZSByZXBlYXQgaW52b2NhdGlvbnNcblx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGNvbXBsZXRlZCA9IHRydWU7XG5cblx0XHRcdC8vIENsZWFyIHRpbWVvdXQgaWYgaXQgZXhpc3RzXG5cdFx0XHRpZiAoIHRpbWVvdXRUaW1lciApIHtcblx0XHRcdFx0d2luZG93LmNsZWFyVGltZW91dCggdGltZW91dFRpbWVyICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIERlcmVmZXJlbmNlIHRyYW5zcG9ydCBmb3IgZWFybHkgZ2FyYmFnZSBjb2xsZWN0aW9uXG5cdFx0XHQvLyAobm8gbWF0dGVyIGhvdyBsb25nIHRoZSBqcVhIUiBvYmplY3Qgd2lsbCBiZSB1c2VkKVxuXHRcdFx0dHJhbnNwb3J0ID0gdW5kZWZpbmVkO1xuXG5cdFx0XHQvLyBDYWNoZSByZXNwb25zZSBoZWFkZXJzXG5cdFx0XHRyZXNwb25zZUhlYWRlcnNTdHJpbmcgPSBoZWFkZXJzIHx8IFwiXCI7XG5cblx0XHRcdC8vIFNldCByZWFkeVN0YXRlXG5cdFx0XHRqcVhIUi5yZWFkeVN0YXRlID0gc3RhdHVzID4gMCA/IDQgOiAwO1xuXG5cdFx0XHQvLyBEZXRlcm1pbmUgaWYgc3VjY2Vzc2Z1bFxuXHRcdFx0aXNTdWNjZXNzID0gc3RhdHVzID49IDIwMCAmJiBzdGF0dXMgPCAzMDAgfHwgc3RhdHVzID09PSAzMDQ7XG5cblx0XHRcdC8vIEdldCByZXNwb25zZSBkYXRhXG5cdFx0XHRpZiAoIHJlc3BvbnNlcyApIHtcblx0XHRcdFx0cmVzcG9uc2UgPSBhamF4SGFuZGxlUmVzcG9uc2VzKCBzLCBqcVhIUiwgcmVzcG9uc2VzICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFVzZSBhIG5vb3AgY29udmVydGVyIGZvciBtaXNzaW5nIHNjcmlwdCBidXQgbm90IGlmIGpzb25wXG5cdFx0XHRpZiAoICFpc1N1Y2Nlc3MgJiZcblx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIFwic2NyaXB0XCIsIHMuZGF0YVR5cGVzICkgPiAtMSAmJlxuXHRcdFx0XHRqUXVlcnkuaW5BcnJheSggXCJqc29uXCIsIHMuZGF0YVR5cGVzICkgPCAwICkge1xuXHRcdFx0XHRzLmNvbnZlcnRlcnNbIFwidGV4dCBzY3JpcHRcIiBdID0gZnVuY3Rpb24oKSB7fTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udmVydCBubyBtYXR0ZXIgd2hhdCAodGhhdCB3YXkgcmVzcG9uc2VYWFggZmllbGRzIGFyZSBhbHdheXMgc2V0KVxuXHRcdFx0cmVzcG9uc2UgPSBhamF4Q29udmVydCggcywgcmVzcG9uc2UsIGpxWEhSLCBpc1N1Y2Nlc3MgKTtcblxuXHRcdFx0Ly8gSWYgc3VjY2Vzc2Z1bCwgaGFuZGxlIHR5cGUgY2hhaW5pbmdcblx0XHRcdGlmICggaXNTdWNjZXNzICkge1xuXG5cdFx0XHRcdC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuXG5cdFx0XHRcdGlmICggcy5pZk1vZGlmaWVkICkge1xuXHRcdFx0XHRcdG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiTGFzdC1Nb2RpZmllZFwiICk7XG5cdFx0XHRcdFx0aWYgKCBtb2RpZmllZCApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0bW9kaWZpZWQgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlciggXCJldGFnXCIgKTtcblx0XHRcdFx0XHRpZiAoIG1vZGlmaWVkICkge1xuXHRcdFx0XHRcdFx0alF1ZXJ5LmV0YWdbIGNhY2hlVVJMIF0gPSBtb2RpZmllZDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBpZiBubyBjb250ZW50XG5cdFx0XHRcdGlmICggc3RhdHVzID09PSAyMDQgfHwgcy50eXBlID09PSBcIkhFQURcIiApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJub2NvbnRlbnRcIjtcblxuXHRcdFx0XHQvLyBpZiBub3QgbW9kaWZpZWRcblx0XHRcdFx0fSBlbHNlIGlmICggc3RhdHVzID09PSAzMDQgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwibm90bW9kaWZpZWRcIjtcblxuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGRhdGEsIGxldCdzIGNvbnZlcnQgaXRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gcmVzcG9uc2Uuc3RhdGU7XG5cdFx0XHRcdFx0c3VjY2VzcyA9IHJlc3BvbnNlLmRhdGE7XG5cdFx0XHRcdFx0ZXJyb3IgPSByZXNwb25zZS5lcnJvcjtcblx0XHRcdFx0XHRpc1N1Y2Nlc3MgPSAhZXJyb3I7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0Ly8gRXh0cmFjdCBlcnJvciBmcm9tIHN0YXR1c1RleHQgYW5kIG5vcm1hbGl6ZSBmb3Igbm9uLWFib3J0c1xuXHRcdFx0XHRlcnJvciA9IHN0YXR1c1RleHQ7XG5cdFx0XHRcdGlmICggc3RhdHVzIHx8ICFzdGF0dXNUZXh0ICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcImVycm9yXCI7XG5cdFx0XHRcdFx0aWYgKCBzdGF0dXMgPCAwICkge1xuXHRcdFx0XHRcdFx0c3RhdHVzID0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gU2V0IGRhdGEgZm9yIHRoZSBmYWtlIHhociBvYmplY3Rcblx0XHRcdGpxWEhSLnN0YXR1cyA9IHN0YXR1cztcblx0XHRcdGpxWEhSLnN0YXR1c1RleHQgPSAoIG5hdGl2ZVN0YXR1c1RleHQgfHwgc3RhdHVzVGV4dCApICsgXCJcIjtcblxuXHRcdFx0Ly8gU3VjY2Vzcy9FcnJvclxuXHRcdFx0aWYgKCBpc1N1Y2Nlc3MgKSB7XG5cdFx0XHRcdGRlZmVycmVkLnJlc29sdmVXaXRoKCBjYWxsYmFja0NvbnRleHQsIFsgc3VjY2Vzcywgc3RhdHVzVGV4dCwganFYSFIgXSApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZGVmZXJyZWQucmVqZWN0V2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0LCBlcnJvciBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRqcVhIUi5zdGF0dXNDb2RlKCBzdGF0dXNDb2RlICk7XG5cdFx0XHRzdGF0dXNDb2RlID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggaXNTdWNjZXNzID8gXCJhamF4U3VjY2Vzc1wiIDogXCJhamF4RXJyb3JcIixcblx0XHRcdFx0XHRbIGpxWEhSLCBzLCBpc1N1Y2Nlc3MgPyBzdWNjZXNzIDogZXJyb3IgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDb21wbGV0ZVxuXHRcdFx0Y29tcGxldGVEZWZlcnJlZC5maXJlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIGpxWEhSLCBzdGF0dXNUZXh0IF0gKTtcblxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIFwiYWpheENvbXBsZXRlXCIsIFsganFYSFIsIHMgXSApO1xuXG5cdFx0XHRcdC8vIEhhbmRsZSB0aGUgZ2xvYmFsIEFKQVggY291bnRlclxuXHRcdFx0XHRpZiAoICEoIC0talF1ZXJ5LmFjdGl2ZSApICkge1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC50cmlnZ2VyKCBcImFqYXhTdG9wXCIgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBqcVhIUjtcblx0fSxcblxuXHRnZXRKU09OOiBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdldCggdXJsLCBkYXRhLCBjYWxsYmFjaywgXCJqc29uXCIgKTtcblx0fSxcblxuXHRnZXRTY3JpcHQ6IGZ1bmN0aW9uKCB1cmwsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZ2V0KCB1cmwsIHVuZGVmaW5lZCwgY2FsbGJhY2ssIFwic2NyaXB0XCIgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcImdldFwiLCBcInBvc3RcIiBdLCBmdW5jdGlvbiggX2ksIG1ldGhvZCApIHtcblx0alF1ZXJ5WyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB1cmwsIGRhdGEsIGNhbGxiYWNrLCB0eXBlICkge1xuXG5cdFx0Ly8gU2hpZnQgYXJndW1lbnRzIGlmIGRhdGEgYXJndW1lbnQgd2FzIG9taXR0ZWRcblx0XHRpZiAoIGlzRnVuY3Rpb24oIGRhdGEgKSApIHtcblx0XHRcdHR5cGUgPSB0eXBlIHx8IGNhbGxiYWNrO1xuXHRcdFx0Y2FsbGJhY2sgPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cblx0XHQvLyBUaGUgdXJsIGNhbiBiZSBhbiBvcHRpb25zIG9iamVjdCAod2hpY2ggdGhlbiBtdXN0IGhhdmUgLnVybClcblx0XHRyZXR1cm4galF1ZXJ5LmFqYXgoIGpRdWVyeS5leHRlbmQoIHtcblx0XHRcdHVybDogdXJsLFxuXHRcdFx0dHlwZTogbWV0aG9kLFxuXHRcdFx0ZGF0YVR5cGU6IHR5cGUsXG5cdFx0XHRkYXRhOiBkYXRhLFxuXHRcdFx0c3VjY2VzczogY2FsbGJhY2tcblx0XHR9LCBqUXVlcnkuaXNQbGFpbk9iamVjdCggdXJsICkgJiYgdXJsICkgKTtcblx0fTtcbn0gKTtcblxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIGZ1bmN0aW9uKCBzICkge1xuXHR2YXIgaTtcblx0Zm9yICggaSBpbiBzLmhlYWRlcnMgKSB7XG5cdFx0aWYgKCBpLnRvTG93ZXJDYXNlKCkgPT09IFwiY29udGVudC10eXBlXCIgKSB7XG5cdFx0XHRzLmNvbnRlbnRUeXBlID0gcy5oZWFkZXJzWyBpIF0gfHwgXCJcIjtcblx0XHR9XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuX2V2YWxVcmwgPSBmdW5jdGlvbiggdXJsLCBvcHRpb25zLCBkb2MgKSB7XG5cdHJldHVybiBqUXVlcnkuYWpheCgge1xuXHRcdHVybDogdXJsLFxuXG5cdFx0Ly8gTWFrZSB0aGlzIGV4cGxpY2l0LCBzaW5jZSB1c2VyIGNhbiBvdmVycmlkZSB0aGlzIHRocm91Z2ggYWpheFNldHVwICgjMTEyNjQpXG5cdFx0dHlwZTogXCJHRVRcIixcblx0XHRkYXRhVHlwZTogXCJzY3JpcHRcIixcblx0XHRjYWNoZTogdHJ1ZSxcblx0XHRhc3luYzogZmFsc2UsXG5cdFx0Z2xvYmFsOiBmYWxzZSxcblxuXHRcdC8vIE9ubHkgZXZhbHVhdGUgdGhlIHJlc3BvbnNlIGlmIGl0IGlzIHN1Y2Nlc3NmdWwgKGdoLTQxMjYpXG5cdFx0Ly8gZGF0YUZpbHRlciBpcyBub3QgaW52b2tlZCBmb3IgZmFpbHVyZSByZXNwb25zZXMsIHNvIHVzaW5nIGl0IGluc3RlYWRcblx0XHQvLyBvZiB0aGUgZGVmYXVsdCBjb252ZXJ0ZXIgaXMga2x1ZGd5IGJ1dCBpdCB3b3Jrcy5cblx0XHRjb252ZXJ0ZXJzOiB7XG5cdFx0XHRcInRleHQgc2NyaXB0XCI6IGZ1bmN0aW9uKCkge31cblx0XHR9LFxuXHRcdGRhdGFGaWx0ZXI6IGZ1bmN0aW9uKCByZXNwb25zZSApIHtcblx0XHRcdGpRdWVyeS5nbG9iYWxFdmFsKCByZXNwb25zZSwgb3B0aW9ucywgZG9jICk7XG5cdFx0fVxuXHR9ICk7XG59O1xuXG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0d3JhcEFsbDogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0dmFyIHdyYXA7XG5cblx0XHRpZiAoIHRoaXNbIDAgXSApIHtcblx0XHRcdGlmICggaXNGdW5jdGlvbiggaHRtbCApICkge1xuXHRcdFx0XHRodG1sID0gaHRtbC5jYWxsKCB0aGlzWyAwIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVGhlIGVsZW1lbnRzIHRvIHdyYXAgdGhlIHRhcmdldCBhcm91bmRcblx0XHRcdHdyYXAgPSBqUXVlcnkoIGh0bWwsIHRoaXNbIDAgXS5vd25lckRvY3VtZW50ICkuZXEoIDAgKS5jbG9uZSggdHJ1ZSApO1xuXG5cdFx0XHRpZiAoIHRoaXNbIDAgXS5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR3cmFwLmluc2VydEJlZm9yZSggdGhpc1sgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHdyYXAubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0dmFyIGVsZW0gPSB0aGlzO1xuXG5cdFx0XHRcdHdoaWxlICggZWxlbS5maXJzdEVsZW1lbnRDaGlsZCApIHtcblx0XHRcdFx0XHRlbGVtID0gZWxlbS5maXJzdEVsZW1lbnRDaGlsZDtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBlbGVtO1xuXHRcdFx0fSApLmFwcGVuZCggdGhpcyApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdHdyYXBJbm5lcjogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBodG1sICkgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0alF1ZXJ5KCB0aGlzICkud3JhcElubmVyKCBodG1sLmNhbGwoIHRoaXMsIGkgKSApO1xuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHNlbGYgPSBqUXVlcnkoIHRoaXMgKSxcblx0XHRcdFx0Y29udGVudHMgPSBzZWxmLmNvbnRlbnRzKCk7XG5cblx0XHRcdGlmICggY29udGVudHMubGVuZ3RoICkge1xuXHRcdFx0XHRjb250ZW50cy53cmFwQWxsKCBodG1sICk7XG5cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHNlbGYuYXBwZW5kKCBodG1sICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdHdyYXA6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHZhciBodG1sSXNGdW5jdGlvbiA9IGlzRnVuY3Rpb24oIGh0bWwgKTtcblxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0alF1ZXJ5KCB0aGlzICkud3JhcEFsbCggaHRtbElzRnVuY3Rpb24gPyBodG1sLmNhbGwoIHRoaXMsIGkgKSA6IGh0bWwgKTtcblx0XHR9ICk7XG5cdH0sXG5cblx0dW53cmFwOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dGhpcy5wYXJlbnQoIHNlbGVjdG9yICkubm90KCBcImJvZHlcIiApLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5KCB0aGlzICkucmVwbGFjZVdpdGgoIHRoaXMuY2hpbGROb2RlcyApO1xuXHRcdH0gKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxufSApO1xuXG5cbmpRdWVyeS5leHByLnBzZXVkb3MuaGlkZGVuID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiAhalF1ZXJ5LmV4cHIucHNldWRvcy52aXNpYmxlKCBlbGVtICk7XG59O1xualF1ZXJ5LmV4cHIucHNldWRvcy52aXNpYmxlID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiAhISggZWxlbS5vZmZzZXRXaWR0aCB8fCBlbGVtLm9mZnNldEhlaWdodCB8fCBlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICk7XG59O1xuXG5cblxuXG5qUXVlcnkuYWpheFNldHRpbmdzLnhociA9IGZ1bmN0aW9uKCkge1xuXHR0cnkge1xuXHRcdHJldHVybiBuZXcgd2luZG93LlhNTEh0dHBSZXF1ZXN0KCk7XG5cdH0gY2F0Y2ggKCBlICkge31cbn07XG5cbnZhciB4aHJTdWNjZXNzU3RhdHVzID0ge1xuXG5cdFx0Ly8gRmlsZSBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyBjb2RlIDAsIGFzc3VtZSAyMDBcblx0XHQwOiAyMDAsXG5cblx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdC8vICMxNDUwOiBzb21ldGltZXMgSUUgcmV0dXJucyAxMjIzIHdoZW4gaXQgc2hvdWxkIGJlIDIwNFxuXHRcdDEyMjM6IDIwNFxuXHR9LFxuXHR4aHJTdXBwb3J0ZWQgPSBqUXVlcnkuYWpheFNldHRpbmdzLnhocigpO1xuXG5zdXBwb3J0LmNvcnMgPSAhIXhoclN1cHBvcnRlZCAmJiAoIFwid2l0aENyZWRlbnRpYWxzXCIgaW4geGhyU3VwcG9ydGVkICk7XG5zdXBwb3J0LmFqYXggPSB4aHJTdXBwb3J0ZWQgPSAhIXhoclN1cHBvcnRlZDtcblxualF1ZXJ5LmFqYXhUcmFuc3BvcnQoIGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXHR2YXIgY2FsbGJhY2ssIGVycm9yQ2FsbGJhY2s7XG5cblx0Ly8gQ3Jvc3MgZG9tYWluIG9ubHkgYWxsb3dlZCBpZiBzdXBwb3J0ZWQgdGhyb3VnaCBYTUxIdHRwUmVxdWVzdFxuXHRpZiAoIHN1cHBvcnQuY29ycyB8fCB4aHJTdXBwb3J0ZWQgJiYgIW9wdGlvbnMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbmQ6IGZ1bmN0aW9uKCBoZWFkZXJzLCBjb21wbGV0ZSApIHtcblx0XHRcdFx0dmFyIGksXG5cdFx0XHRcdFx0eGhyID0gb3B0aW9ucy54aHIoKTtcblxuXHRcdFx0XHR4aHIub3Blbihcblx0XHRcdFx0XHRvcHRpb25zLnR5cGUsXG5cdFx0XHRcdFx0b3B0aW9ucy51cmwsXG5cdFx0XHRcdFx0b3B0aW9ucy5hc3luYyxcblx0XHRcdFx0XHRvcHRpb25zLnVzZXJuYW1lLFxuXHRcdFx0XHRcdG9wdGlvbnMucGFzc3dvcmRcblx0XHRcdFx0KTtcblxuXHRcdFx0XHQvLyBBcHBseSBjdXN0b20gZmllbGRzIGlmIHByb3ZpZGVkXG5cdFx0XHRcdGlmICggb3B0aW9ucy54aHJGaWVsZHMgKSB7XG5cdFx0XHRcdFx0Zm9yICggaSBpbiBvcHRpb25zLnhockZpZWxkcyApIHtcblx0XHRcdFx0XHRcdHhoclsgaSBdID0gb3B0aW9ucy54aHJGaWVsZHNbIGkgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBPdmVycmlkZSBtaW1lIHR5cGUgaWYgbmVlZGVkXG5cdFx0XHRcdGlmICggb3B0aW9ucy5taW1lVHlwZSAmJiB4aHIub3ZlcnJpZGVNaW1lVHlwZSApIHtcblx0XHRcdFx0XHR4aHIub3ZlcnJpZGVNaW1lVHlwZSggb3B0aW9ucy5taW1lVHlwZSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gWC1SZXF1ZXN0ZWQtV2l0aCBoZWFkZXJcblx0XHRcdFx0Ly8gRm9yIGNyb3NzLWRvbWFpbiByZXF1ZXN0cywgc2VlaW5nIGFzIGNvbmRpdGlvbnMgZm9yIGEgcHJlZmxpZ2h0IGFyZVxuXHRcdFx0XHQvLyBha2luIHRvIGEgamlnc2F3IHB1enpsZSwgd2Ugc2ltcGx5IG5ldmVyIHNldCBpdCB0byBiZSBzdXJlLlxuXHRcdFx0XHQvLyAoaXQgY2FuIGFsd2F5cyBiZSBzZXQgb24gYSBwZXItcmVxdWVzdCBiYXNpcyBvciBldmVuIHVzaW5nIGFqYXhTZXR1cClcblx0XHRcdFx0Ly8gRm9yIHNhbWUtZG9tYWluIHJlcXVlc3RzLCB3b24ndCBjaGFuZ2UgaGVhZGVyIGlmIGFscmVhZHkgcHJvdmlkZWQuXG5cdFx0XHRcdGlmICggIW9wdGlvbnMuY3Jvc3NEb21haW4gJiYgIWhlYWRlcnNbIFwiWC1SZXF1ZXN0ZWQtV2l0aFwiIF0gKSB7XG5cdFx0XHRcdFx0aGVhZGVyc1sgXCJYLVJlcXVlc3RlZC1XaXRoXCIgXSA9IFwiWE1MSHR0cFJlcXVlc3RcIjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFNldCBoZWFkZXJzXG5cdFx0XHRcdGZvciAoIGkgaW4gaGVhZGVycyApIHtcblx0XHRcdFx0XHR4aHIuc2V0UmVxdWVzdEhlYWRlciggaSwgaGVhZGVyc1sgaSBdICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDYWxsYmFja1xuXHRcdFx0XHRjYWxsYmFjayA9IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHRcdGNhbGxiYWNrID0gZXJyb3JDYWxsYmFjayA9IHhoci5vbmxvYWQgPVxuXHRcdFx0XHRcdFx0XHRcdHhoci5vbmVycm9yID0geGhyLm9uYWJvcnQgPSB4aHIub250aW1lb3V0ID1cblx0XHRcdFx0XHRcdFx0XHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBudWxsO1xuXG5cdFx0XHRcdFx0XHRcdGlmICggdHlwZSA9PT0gXCJhYm9ydFwiICkge1xuXHRcdFx0XHRcdFx0XHRcdHhoci5hYm9ydCgpO1xuXHRcdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCB0eXBlID09PSBcImVycm9yXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdFx0XHRcdFx0XHRcdC8vIE9uIGEgbWFudWFsIG5hdGl2ZSBhYm9ydCwgSUU5IHRocm93c1xuXHRcdFx0XHRcdFx0XHRcdC8vIGVycm9ycyBvbiBhbnkgcHJvcGVydHkgYWNjZXNzIHRoYXQgaXMgbm90IHJlYWR5U3RhdGVcblx0XHRcdFx0XHRcdFx0XHRpZiAoIHR5cGVvZiB4aHIuc3RhdHVzICE9PSBcIm51bWJlclwiICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoIDAsIFwiZXJyb3JcIiApO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRjb21wbGV0ZShcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBGaWxlOiBwcm90b2NvbCBhbHdheXMgeWllbGRzIHN0YXR1cyAwOyBzZWUgIzg2MDUsICMxNDIwN1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzVGV4dFxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHJTdWNjZXNzU3RhdHVzWyB4aHIuc3RhdHVzIF0gfHwgeGhyLnN0YXR1cyxcblx0XHRcdFx0XHRcdFx0XHRcdHhoci5zdGF0dXNUZXh0LFxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSUU5IGhhcyBubyBYSFIyIGJ1dCB0aHJvd3Mgb24gYmluYXJ5ICh0cmFjLTExNDI2KVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gRm9yIFhIUjIgbm9uLXRleHQsIGxldCB0aGUgY2FsbGVyIGhhbmRsZSBpdCAoZ2gtMjQ5OClcblx0XHRcdFx0XHRcdFx0XHRcdCggeGhyLnJlc3BvbnNlVHlwZSB8fCBcInRleHRcIiApICE9PSBcInRleHRcIiAgfHxcblx0XHRcdFx0XHRcdFx0XHRcdHR5cGVvZiB4aHIucmVzcG9uc2VUZXh0ICE9PSBcInN0cmluZ1wiID9cblx0XHRcdFx0XHRcdFx0XHRcdFx0eyBiaW5hcnk6IHhoci5yZXNwb25zZSB9IDpcblx0XHRcdFx0XHRcdFx0XHRcdFx0eyB0ZXh0OiB4aHIucmVzcG9uc2VUZXh0IH0sXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKClcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fTtcblxuXHRcdFx0XHQvLyBMaXN0ZW4gdG8gZXZlbnRzXG5cdFx0XHRcdHhoci5vbmxvYWQgPSBjYWxsYmFjaygpO1xuXHRcdFx0XHRlcnJvckNhbGxiYWNrID0geGhyLm9uZXJyb3IgPSB4aHIub250aW1lb3V0ID0gY2FsbGJhY2soIFwiZXJyb3JcIiApO1xuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDkgb25seVxuXHRcdFx0XHQvLyBVc2Ugb25yZWFkeXN0YXRlY2hhbmdlIHRvIHJlcGxhY2Ugb25hYm9ydFxuXHRcdFx0XHQvLyB0byBoYW5kbGUgdW5jYXVnaHQgYWJvcnRzXG5cdFx0XHRcdGlmICggeGhyLm9uYWJvcnQgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHR4aHIub25hYm9ydCA9IGVycm9yQ2FsbGJhY2s7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0eGhyLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdFx0XHQvLyBDaGVjayByZWFkeVN0YXRlIGJlZm9yZSB0aW1lb3V0IGFzIGl0IGNoYW5nZXNcblx0XHRcdFx0XHRcdGlmICggeGhyLnJlYWR5U3RhdGUgPT09IDQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gQWxsb3cgb25lcnJvciB0byBiZSBjYWxsZWQgZmlyc3QsXG5cdFx0XHRcdFx0XHRcdC8vIGJ1dCB0aGF0IHdpbGwgbm90IGhhbmRsZSBhIG5hdGl2ZSBhYm9ydFxuXHRcdFx0XHRcdFx0XHQvLyBBbHNvLCBzYXZlIGVycm9yQ2FsbGJhY2sgdG8gYSB2YXJpYWJsZVxuXHRcdFx0XHRcdFx0XHQvLyBhcyB4aHIub25lcnJvciBjYW5ub3QgYmUgYWNjZXNzZWRcblx0XHRcdFx0XHRcdFx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRlcnJvckNhbGxiYWNrKCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIENyZWF0ZSB0aGUgYWJvcnQgY2FsbGJhY2tcblx0XHRcdFx0Y2FsbGJhY2sgPSBjYWxsYmFjayggXCJhYm9ydFwiICk7XG5cblx0XHRcdFx0dHJ5IHtcblxuXHRcdFx0XHRcdC8vIERvIHNlbmQgdGhlIHJlcXVlc3QgKHRoaXMgbWF5IHJhaXNlIGFuIGV4Y2VwdGlvbilcblx0XHRcdFx0XHR4aHIuc2VuZCggb3B0aW9ucy5oYXNDb250ZW50ICYmIG9wdGlvbnMuZGF0YSB8fCBudWxsICk7XG5cdFx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdFx0Ly8gIzE0NjgzOiBPbmx5IHJldGhyb3cgaWYgdGhpcyBoYXNuJ3QgYmVlbiBub3RpZmllZCBhcyBhbiBlcnJvciB5ZXRcblx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0dGhyb3cgZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdGFib3J0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG4vLyBQcmV2ZW50IGF1dG8tZXhlY3V0aW9uIG9mIHNjcmlwdHMgd2hlbiBubyBleHBsaWNpdCBkYXRhVHlwZSB3YXMgcHJvdmlkZWQgKFNlZSBnaC0yNDMyKVxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIGZ1bmN0aW9uKCBzICkge1xuXHRpZiAoIHMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cy5jb250ZW50cy5zY3JpcHQgPSBmYWxzZTtcblx0fVxufSApO1xuXG4vLyBJbnN0YWxsIHNjcmlwdCBkYXRhVHlwZVxualF1ZXJ5LmFqYXhTZXR1cCgge1xuXHRhY2NlcHRzOiB7XG5cdFx0c2NyaXB0OiBcInRleHQvamF2YXNjcmlwdCwgYXBwbGljYXRpb24vamF2YXNjcmlwdCwgXCIgK1xuXHRcdFx0XCJhcHBsaWNhdGlvbi9lY21hc2NyaXB0LCBhcHBsaWNhdGlvbi94LWVjbWFzY3JpcHRcIlxuXHR9LFxuXHRjb250ZW50czoge1xuXHRcdHNjcmlwdDogL1xcYig/OmphdmF8ZWNtYSlzY3JpcHRcXGIvXG5cdH0sXG5cdGNvbnZlcnRlcnM6IHtcblx0XHRcInRleHQgc2NyaXB0XCI6IGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRcdFx0alF1ZXJ5Lmdsb2JhbEV2YWwoIHRleHQgKTtcblx0XHRcdHJldHVybiB0ZXh0O1xuXHRcdH1cblx0fVxufSApO1xuXG4vLyBIYW5kbGUgY2FjaGUncyBzcGVjaWFsIGNhc2UgYW5kIGNyb3NzRG9tYWluXG5qUXVlcnkuYWpheFByZWZpbHRlciggXCJzY3JpcHRcIiwgZnVuY3Rpb24oIHMgKSB7XG5cdGlmICggcy5jYWNoZSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdHMuY2FjaGUgPSBmYWxzZTtcblx0fVxuXHRpZiAoIHMuY3Jvc3NEb21haW4gKSB7XG5cdFx0cy50eXBlID0gXCJHRVRcIjtcblx0fVxufSApO1xuXG4vLyBCaW5kIHNjcmlwdCB0YWcgaGFjayB0cmFuc3BvcnRcbmpRdWVyeS5hamF4VHJhbnNwb3J0KCBcInNjcmlwdFwiLCBmdW5jdGlvbiggcyApIHtcblxuXHQvLyBUaGlzIHRyYW5zcG9ydCBvbmx5IGRlYWxzIHdpdGggY3Jvc3MgZG9tYWluIG9yIGZvcmNlZC1ieS1hdHRycyByZXF1ZXN0c1xuXHRpZiAoIHMuY3Jvc3NEb21haW4gfHwgcy5zY3JpcHRBdHRycyApIHtcblx0XHR2YXIgc2NyaXB0LCBjYWxsYmFjaztcblx0XHRyZXR1cm4ge1xuXHRcdFx0c2VuZDogZnVuY3Rpb24oIF8sIGNvbXBsZXRlICkge1xuXHRcdFx0XHRzY3JpcHQgPSBqUXVlcnkoIFwiPHNjcmlwdD5cIiApXG5cdFx0XHRcdFx0LmF0dHIoIHMuc2NyaXB0QXR0cnMgfHwge30gKVxuXHRcdFx0XHRcdC5wcm9wKCB7IGNoYXJzZXQ6IHMuc2NyaXB0Q2hhcnNldCwgc3JjOiBzLnVybCB9IClcblx0XHRcdFx0XHQub24oIFwibG9hZCBlcnJvclwiLCBjYWxsYmFjayA9IGZ1bmN0aW9uKCBldnQgKSB7XG5cdFx0XHRcdFx0XHRzY3JpcHQucmVtb3ZlKCk7XG5cdFx0XHRcdFx0XHRjYWxsYmFjayA9IG51bGw7XG5cdFx0XHRcdFx0XHRpZiAoIGV2dCApIHtcblx0XHRcdFx0XHRcdFx0Y29tcGxldGUoIGV2dC50eXBlID09PSBcImVycm9yXCIgPyA0MDQgOiAyMDAsIGV2dC50eXBlICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSApO1xuXG5cdFx0XHRcdC8vIFVzZSBuYXRpdmUgRE9NIG1hbmlwdWxhdGlvbiB0byBhdm9pZCBvdXIgZG9tTWFuaXAgQUpBWCB0cmlja2VyeVxuXHRcdFx0XHRkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKCBzY3JpcHRbIDAgXSApO1xuXHRcdFx0fSxcblx0XHRcdGFib3J0OiBmdW5jdGlvbigpIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRjYWxsYmFjaygpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG52YXIgb2xkQ2FsbGJhY2tzID0gW10sXG5cdHJqc29ucCA9IC8oPSlcXD8oPz0mfCQpfFxcP1xcPy87XG5cbi8vIERlZmF1bHQganNvbnAgc2V0dGluZ3NcbmpRdWVyeS5hamF4U2V0dXAoIHtcblx0anNvbnA6IFwiY2FsbGJhY2tcIixcblx0anNvbnBDYWxsYmFjazogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGNhbGxiYWNrID0gb2xkQ2FsbGJhY2tzLnBvcCgpIHx8ICggalF1ZXJ5LmV4cGFuZG8gKyBcIl9cIiArICggbm9uY2UuZ3VpZCsrICkgKTtcblx0XHR0aGlzWyBjYWxsYmFjayBdID0gdHJ1ZTtcblx0XHRyZXR1cm4gY2FsbGJhY2s7XG5cdH1cbn0gKTtcblxuLy8gRGV0ZWN0LCBub3JtYWxpemUgb3B0aW9ucyBhbmQgaW5zdGFsbCBjYWxsYmFja3MgZm9yIGpzb25wIHJlcXVlc3RzXG5qUXVlcnkuYWpheFByZWZpbHRlciggXCJqc29uIGpzb25wXCIsIGZ1bmN0aW9uKCBzLCBvcmlnaW5hbFNldHRpbmdzLCBqcVhIUiApIHtcblxuXHR2YXIgY2FsbGJhY2tOYW1lLCBvdmVyd3JpdHRlbiwgcmVzcG9uc2VDb250YWluZXIsXG5cdFx0anNvblByb3AgPSBzLmpzb25wICE9PSBmYWxzZSAmJiAoIHJqc29ucC50ZXN0KCBzLnVybCApID9cblx0XHRcdFwidXJsXCIgOlxuXHRcdFx0dHlwZW9mIHMuZGF0YSA9PT0gXCJzdHJpbmdcIiAmJlxuXHRcdFx0XHQoIHMuY29udGVudFR5cGUgfHwgXCJcIiApXG5cdFx0XHRcdFx0LmluZGV4T2YoIFwiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkXCIgKSA9PT0gMCAmJlxuXHRcdFx0XHRyanNvbnAudGVzdCggcy5kYXRhICkgJiYgXCJkYXRhXCJcblx0XHQpO1xuXG5cdC8vIEhhbmRsZSBpZmYgdGhlIGV4cGVjdGVkIGRhdGEgdHlwZSBpcyBcImpzb25wXCIgb3Igd2UgaGF2ZSBhIHBhcmFtZXRlciB0byBzZXRcblx0aWYgKCBqc29uUHJvcCB8fCBzLmRhdGFUeXBlc1sgMCBdID09PSBcImpzb25wXCIgKSB7XG5cblx0XHQvLyBHZXQgY2FsbGJhY2sgbmFtZSwgcmVtZW1iZXJpbmcgcHJlZXhpc3RpbmcgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGl0XG5cdFx0Y2FsbGJhY2tOYW1lID0gcy5qc29ucENhbGxiYWNrID0gaXNGdW5jdGlvbiggcy5qc29ucENhbGxiYWNrICkgP1xuXHRcdFx0cy5qc29ucENhbGxiYWNrKCkgOlxuXHRcdFx0cy5qc29ucENhbGxiYWNrO1xuXG5cdFx0Ly8gSW5zZXJ0IGNhbGxiYWNrIGludG8gdXJsIG9yIGZvcm0gZGF0YVxuXHRcdGlmICgganNvblByb3AgKSB7XG5cdFx0XHRzWyBqc29uUHJvcCBdID0gc1sganNvblByb3AgXS5yZXBsYWNlKCByanNvbnAsIFwiJDFcIiArIGNhbGxiYWNrTmFtZSApO1xuXHRcdH0gZWxzZSBpZiAoIHMuanNvbnAgIT09IGZhbHNlICkge1xuXHRcdFx0cy51cmwgKz0gKCBycXVlcnkudGVzdCggcy51cmwgKSA/IFwiJlwiIDogXCI/XCIgKSArIHMuanNvbnAgKyBcIj1cIiArIGNhbGxiYWNrTmFtZTtcblx0XHR9XG5cblx0XHQvLyBVc2UgZGF0YSBjb252ZXJ0ZXIgdG8gcmV0cmlldmUganNvbiBhZnRlciBzY3JpcHQgZXhlY3V0aW9uXG5cdFx0cy5jb252ZXJ0ZXJzWyBcInNjcmlwdCBqc29uXCIgXSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCAhcmVzcG9uc2VDb250YWluZXIgKSB7XG5cdFx0XHRcdGpRdWVyeS5lcnJvciggY2FsbGJhY2tOYW1lICsgXCIgd2FzIG5vdCBjYWxsZWRcIiApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3BvbnNlQ29udGFpbmVyWyAwIF07XG5cdFx0fTtcblxuXHRcdC8vIEZvcmNlIGpzb24gZGF0YVR5cGVcblx0XHRzLmRhdGFUeXBlc1sgMCBdID0gXCJqc29uXCI7XG5cblx0XHQvLyBJbnN0YWxsIGNhbGxiYWNrXG5cdFx0b3ZlcndyaXR0ZW4gPSB3aW5kb3dbIGNhbGxiYWNrTmFtZSBdO1xuXHRcdHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gYXJndW1lbnRzO1xuXHRcdH07XG5cblx0XHQvLyBDbGVhbi11cCBmdW5jdGlvbiAoZmlyZXMgYWZ0ZXIgY29udmVydGVycylcblx0XHRqcVhIUi5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXG5cdFx0XHQvLyBJZiBwcmV2aW91cyB2YWx1ZSBkaWRuJ3QgZXhpc3QgLSByZW1vdmUgaXRcblx0XHRcdGlmICggb3ZlcndyaXR0ZW4gPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0alF1ZXJ5KCB3aW5kb3cgKS5yZW1vdmVQcm9wKCBjYWxsYmFja05hbWUgKTtcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIHJlc3RvcmUgcHJlZXhpc3RpbmcgdmFsdWVcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHdpbmRvd1sgY2FsbGJhY2tOYW1lIF0gPSBvdmVyd3JpdHRlbjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2F2ZSBiYWNrIGFzIGZyZWVcblx0XHRcdGlmICggc1sgY2FsbGJhY2tOYW1lIF0gKSB7XG5cblx0XHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgcmUtdXNpbmcgdGhlIG9wdGlvbnMgZG9lc24ndCBzY3JldyB0aGluZ3MgYXJvdW5kXG5cdFx0XHRcdHMuanNvbnBDYWxsYmFjayA9IG9yaWdpbmFsU2V0dGluZ3MuanNvbnBDYWxsYmFjaztcblxuXHRcdFx0XHQvLyBTYXZlIHRoZSBjYWxsYmFjayBuYW1lIGZvciBmdXR1cmUgdXNlXG5cdFx0XHRcdG9sZENhbGxiYWNrcy5wdXNoKCBjYWxsYmFja05hbWUgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ2FsbCBpZiBpdCB3YXMgYSBmdW5jdGlvbiBhbmQgd2UgaGF2ZSBhIHJlc3BvbnNlXG5cdFx0XHRpZiAoIHJlc3BvbnNlQ29udGFpbmVyICYmIGlzRnVuY3Rpb24oIG92ZXJ3cml0dGVuICkgKSB7XG5cdFx0XHRcdG92ZXJ3cml0dGVuKCByZXNwb25zZUNvbnRhaW5lclsgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdHJlc3BvbnNlQ29udGFpbmVyID0gb3ZlcndyaXR0ZW4gPSB1bmRlZmluZWQ7XG5cdFx0fSApO1xuXG5cdFx0Ly8gRGVsZWdhdGUgdG8gc2NyaXB0XG5cdFx0cmV0dXJuIFwic2NyaXB0XCI7XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gU3VwcG9ydDogU2FmYXJpIDggb25seVxuLy8gSW4gU2FmYXJpIDggZG9jdW1lbnRzIGNyZWF0ZWQgdmlhIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudFxuLy8gY29sbGFwc2Ugc2libGluZyBmb3JtczogdGhlIHNlY29uZCBvbmUgYmVjb21lcyBhIGNoaWxkIG9mIHRoZSBmaXJzdCBvbmUuXG4vLyBCZWNhdXNlIG9mIHRoYXQsIHRoaXMgc2VjdXJpdHkgbWVhc3VyZSBoYXMgdG8gYmUgZGlzYWJsZWQgaW4gU2FmYXJpIDguXG4vLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM3MzM3XG5zdXBwb3J0LmNyZWF0ZUhUTUxEb2N1bWVudCA9ICggZnVuY3Rpb24oKSB7XG5cdHZhciBib2R5ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCBcIlwiICkuYm9keTtcblx0Ym9keS5pbm5lckhUTUwgPSBcIjxmb3JtPjwvZm9ybT48Zm9ybT48L2Zvcm0+XCI7XG5cdHJldHVybiBib2R5LmNoaWxkTm9kZXMubGVuZ3RoID09PSAyO1xufSApKCk7XG5cblxuLy8gQXJndW1lbnQgXCJkYXRhXCIgc2hvdWxkIGJlIHN0cmluZyBvZiBodG1sXG4vLyBjb250ZXh0IChvcHRpb25hbCk6IElmIHNwZWNpZmllZCwgdGhlIGZyYWdtZW50IHdpbGwgYmUgY3JlYXRlZCBpbiB0aGlzIGNvbnRleHQsXG4vLyBkZWZhdWx0cyB0byBkb2N1bWVudFxuLy8ga2VlcFNjcmlwdHMgKG9wdGlvbmFsKTogSWYgdHJ1ZSwgd2lsbCBpbmNsdWRlIHNjcmlwdHMgcGFzc2VkIGluIHRoZSBodG1sIHN0cmluZ1xualF1ZXJ5LnBhcnNlSFRNTCA9IGZ1bmN0aW9uKCBkYXRhLCBjb250ZXh0LCBrZWVwU2NyaXB0cyApIHtcblx0aWYgKCB0eXBlb2YgZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRyZXR1cm4gW107XG5cdH1cblx0aWYgKCB0eXBlb2YgY29udGV4dCA9PT0gXCJib29sZWFuXCIgKSB7XG5cdFx0a2VlcFNjcmlwdHMgPSBjb250ZXh0O1xuXHRcdGNvbnRleHQgPSBmYWxzZTtcblx0fVxuXG5cdHZhciBiYXNlLCBwYXJzZWQsIHNjcmlwdHM7XG5cblx0aWYgKCAhY29udGV4dCApIHtcblxuXHRcdC8vIFN0b3Agc2NyaXB0cyBvciBpbmxpbmUgZXZlbnQgaGFuZGxlcnMgZnJvbSBiZWluZyBleGVjdXRlZCBpbW1lZGlhdGVseVxuXHRcdC8vIGJ5IHVzaW5nIGRvY3VtZW50LmltcGxlbWVudGF0aW9uXG5cdFx0aWYgKCBzdXBwb3J0LmNyZWF0ZUhUTUxEb2N1bWVudCApIHtcblx0XHRcdGNvbnRleHQgPSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIFwiXCIgKTtcblxuXHRcdFx0Ly8gU2V0IHRoZSBiYXNlIGhyZWYgZm9yIHRoZSBjcmVhdGVkIGRvY3VtZW50XG5cdFx0XHQvLyBzbyBhbnkgcGFyc2VkIGVsZW1lbnRzIHdpdGggVVJMc1xuXHRcdFx0Ly8gYXJlIGJhc2VkIG9uIHRoZSBkb2N1bWVudCdzIFVSTCAoZ2gtMjk2NSlcblx0XHRcdGJhc2UgPSBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIFwiYmFzZVwiICk7XG5cdFx0XHRiYXNlLmhyZWYgPSBkb2N1bWVudC5sb2NhdGlvbi5ocmVmO1xuXHRcdFx0Y29udGV4dC5oZWFkLmFwcGVuZENoaWxkKCBiYXNlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNvbnRleHQgPSBkb2N1bWVudDtcblx0XHR9XG5cdH1cblxuXHRwYXJzZWQgPSByc2luZ2xlVGFnLmV4ZWMoIGRhdGEgKTtcblx0c2NyaXB0cyA9ICFrZWVwU2NyaXB0cyAmJiBbXTtcblxuXHQvLyBTaW5nbGUgdGFnXG5cdGlmICggcGFyc2VkICkge1xuXHRcdHJldHVybiBbIGNvbnRleHQuY3JlYXRlRWxlbWVudCggcGFyc2VkWyAxIF0gKSBdO1xuXHR9XG5cblx0cGFyc2VkID0gYnVpbGRGcmFnbWVudCggWyBkYXRhIF0sIGNvbnRleHQsIHNjcmlwdHMgKTtcblxuXHRpZiAoIHNjcmlwdHMgJiYgc2NyaXB0cy5sZW5ndGggKSB7XG5cdFx0alF1ZXJ5KCBzY3JpcHRzICkucmVtb3ZlKCk7XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5Lm1lcmdlKCBbXSwgcGFyc2VkLmNoaWxkTm9kZXMgKTtcbn07XG5cblxuLyoqXG4gKiBMb2FkIGEgdXJsIGludG8gYSBwYWdlXG4gKi9cbmpRdWVyeS5mbi5sb2FkID0gZnVuY3Rpb24oIHVybCwgcGFyYW1zLCBjYWxsYmFjayApIHtcblx0dmFyIHNlbGVjdG9yLCB0eXBlLCByZXNwb25zZSxcblx0XHRzZWxmID0gdGhpcyxcblx0XHRvZmYgPSB1cmwuaW5kZXhPZiggXCIgXCIgKTtcblxuXHRpZiAoIG9mZiA+IC0xICkge1xuXHRcdHNlbGVjdG9yID0gc3RyaXBBbmRDb2xsYXBzZSggdXJsLnNsaWNlKCBvZmYgKSApO1xuXHRcdHVybCA9IHVybC5zbGljZSggMCwgb2ZmICk7XG5cdH1cblxuXHQvLyBJZiBpdCdzIGEgZnVuY3Rpb25cblx0aWYgKCBpc0Z1bmN0aW9uKCBwYXJhbXMgKSApIHtcblxuXHRcdC8vIFdlIGFzc3VtZSB0aGF0IGl0J3MgdGhlIGNhbGxiYWNrXG5cdFx0Y2FsbGJhY2sgPSBwYXJhbXM7XG5cdFx0cGFyYW1zID0gdW5kZWZpbmVkO1xuXG5cdC8vIE90aGVyd2lzZSwgYnVpbGQgYSBwYXJhbSBzdHJpbmdcblx0fSBlbHNlIGlmICggcGFyYW1zICYmIHR5cGVvZiBwYXJhbXMgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0dHlwZSA9IFwiUE9TVFwiO1xuXHR9XG5cblx0Ly8gSWYgd2UgaGF2ZSBlbGVtZW50cyB0byBtb2RpZnksIG1ha2UgdGhlIHJlcXVlc3Rcblx0aWYgKCBzZWxmLmxlbmd0aCA+IDAgKSB7XG5cdFx0alF1ZXJ5LmFqYXgoIHtcblx0XHRcdHVybDogdXJsLFxuXG5cdFx0XHQvLyBJZiBcInR5cGVcIiB2YXJpYWJsZSBpcyB1bmRlZmluZWQsIHRoZW4gXCJHRVRcIiBtZXRob2Qgd2lsbCBiZSB1c2VkLlxuXHRcdFx0Ly8gTWFrZSB2YWx1ZSBvZiB0aGlzIGZpZWxkIGV4cGxpY2l0IHNpbmNlXG5cdFx0XHQvLyB1c2VyIGNhbiBvdmVycmlkZSBpdCB0aHJvdWdoIGFqYXhTZXR1cCBtZXRob2Rcblx0XHRcdHR5cGU6IHR5cGUgfHwgXCJHRVRcIixcblx0XHRcdGRhdGFUeXBlOiBcImh0bWxcIixcblx0XHRcdGRhdGE6IHBhcmFtc1xuXHRcdH0gKS5kb25lKCBmdW5jdGlvbiggcmVzcG9uc2VUZXh0ICkge1xuXG5cdFx0XHQvLyBTYXZlIHJlc3BvbnNlIGZvciB1c2UgaW4gY29tcGxldGUgY2FsbGJhY2tcblx0XHRcdHJlc3BvbnNlID0gYXJndW1lbnRzO1xuXG5cdFx0XHRzZWxmLmh0bWwoIHNlbGVjdG9yID9cblxuXHRcdFx0XHQvLyBJZiBhIHNlbGVjdG9yIHdhcyBzcGVjaWZpZWQsIGxvY2F0ZSB0aGUgcmlnaHQgZWxlbWVudHMgaW4gYSBkdW1teSBkaXZcblx0XHRcdFx0Ly8gRXhjbHVkZSBzY3JpcHRzIHRvIGF2b2lkIElFICdQZXJtaXNzaW9uIERlbmllZCcgZXJyb3JzXG5cdFx0XHRcdGpRdWVyeSggXCI8ZGl2PlwiICkuYXBwZW5kKCBqUXVlcnkucGFyc2VIVE1MKCByZXNwb25zZVRleHQgKSApLmZpbmQoIHNlbGVjdG9yICkgOlxuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSB1c2UgdGhlIGZ1bGwgcmVzdWx0XG5cdFx0XHRcdHJlc3BvbnNlVGV4dCApO1xuXG5cdFx0Ly8gSWYgdGhlIHJlcXVlc3Qgc3VjY2VlZHMsIHRoaXMgZnVuY3Rpb24gZ2V0cyBcImRhdGFcIiwgXCJzdGF0dXNcIiwgXCJqcVhIUlwiXG5cdFx0Ly8gYnV0IHRoZXkgYXJlIGlnbm9yZWQgYmVjYXVzZSByZXNwb25zZSB3YXMgc2V0IGFib3ZlLlxuXHRcdC8vIElmIGl0IGZhaWxzLCB0aGlzIGZ1bmN0aW9uIGdldHMgXCJqcVhIUlwiLCBcInN0YXR1c1wiLCBcImVycm9yXCJcblx0XHR9ICkuYWx3YXlzKCBjYWxsYmFjayAmJiBmdW5jdGlvbigganFYSFIsIHN0YXR1cyApIHtcblx0XHRcdHNlbGYuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGNhbGxiYWNrLmFwcGx5KCB0aGlzLCByZXNwb25zZSB8fCBbIGpxWEhSLnJlc3BvbnNlVGV4dCwgc3RhdHVzLCBqcVhIUiBdICk7XG5cdFx0XHR9ICk7XG5cdFx0fSApO1xuXHR9XG5cblx0cmV0dXJuIHRoaXM7XG59O1xuXG5cblxuXG5qUXVlcnkuZXhwci5wc2V1ZG9zLmFuaW1hdGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHJldHVybiBqUXVlcnkuZ3JlcCggalF1ZXJ5LnRpbWVycywgZnVuY3Rpb24oIGZuICkge1xuXHRcdHJldHVybiBlbGVtID09PSBmbi5lbGVtO1xuXHR9ICkubGVuZ3RoO1xufTtcblxuXG5cblxualF1ZXJ5Lm9mZnNldCA9IHtcblx0c2V0T2Zmc2V0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgaSApIHtcblx0XHR2YXIgY3VyUG9zaXRpb24sIGN1ckxlZnQsIGN1ckNTU1RvcCwgY3VyVG9wLCBjdXJPZmZzZXQsIGN1ckNTU0xlZnQsIGNhbGN1bGF0ZVBvc2l0aW9uLFxuXHRcdFx0cG9zaXRpb24gPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBvc2l0aW9uXCIgKSxcblx0XHRcdGN1ckVsZW0gPSBqUXVlcnkoIGVsZW0gKSxcblx0XHRcdHByb3BzID0ge307XG5cblx0XHQvLyBTZXQgcG9zaXRpb24gZmlyc3QsIGluLWNhc2UgdG9wL2xlZnQgYXJlIHNldCBldmVuIG9uIHN0YXRpYyBlbGVtXG5cdFx0aWYgKCBwb3NpdGlvbiA9PT0gXCJzdGF0aWNcIiApIHtcblx0XHRcdGVsZW0uc3R5bGUucG9zaXRpb24gPSBcInJlbGF0aXZlXCI7XG5cdFx0fVxuXG5cdFx0Y3VyT2Zmc2V0ID0gY3VyRWxlbS5vZmZzZXQoKTtcblx0XHRjdXJDU1NUb3AgPSBqUXVlcnkuY3NzKCBlbGVtLCBcInRvcFwiICk7XG5cdFx0Y3VyQ1NTTGVmdCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwibGVmdFwiICk7XG5cdFx0Y2FsY3VsYXRlUG9zaXRpb24gPSAoIHBvc2l0aW9uID09PSBcImFic29sdXRlXCIgfHwgcG9zaXRpb24gPT09IFwiZml4ZWRcIiApICYmXG5cdFx0XHQoIGN1ckNTU1RvcCArIGN1ckNTU0xlZnQgKS5pbmRleE9mKCBcImF1dG9cIiApID4gLTE7XG5cblx0XHQvLyBOZWVkIHRvIGJlIGFibGUgdG8gY2FsY3VsYXRlIHBvc2l0aW9uIGlmIGVpdGhlclxuXHRcdC8vIHRvcCBvciBsZWZ0IGlzIGF1dG8gYW5kIHBvc2l0aW9uIGlzIGVpdGhlciBhYnNvbHV0ZSBvciBmaXhlZFxuXHRcdGlmICggY2FsY3VsYXRlUG9zaXRpb24gKSB7XG5cdFx0XHRjdXJQb3NpdGlvbiA9IGN1ckVsZW0ucG9zaXRpb24oKTtcblx0XHRcdGN1clRvcCA9IGN1clBvc2l0aW9uLnRvcDtcblx0XHRcdGN1ckxlZnQgPSBjdXJQb3NpdGlvbi5sZWZ0O1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdGN1clRvcCA9IHBhcnNlRmxvYXQoIGN1ckNTU1RvcCApIHx8IDA7XG5cdFx0XHRjdXJMZWZ0ID0gcGFyc2VGbG9hdCggY3VyQ1NTTGVmdCApIHx8IDA7XG5cdFx0fVxuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBvcHRpb25zICkgKSB7XG5cblx0XHRcdC8vIFVzZSBqUXVlcnkuZXh0ZW5kIGhlcmUgdG8gYWxsb3cgbW9kaWZpY2F0aW9uIG9mIGNvb3JkaW5hdGVzIGFyZ3VtZW50IChnaC0xODQ4KVxuXHRcdFx0b3B0aW9ucyA9IG9wdGlvbnMuY2FsbCggZWxlbSwgaSwgalF1ZXJ5LmV4dGVuZCgge30sIGN1ck9mZnNldCApICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHRpb25zLnRvcCAhPSBudWxsICkge1xuXHRcdFx0cHJvcHMudG9wID0gKCBvcHRpb25zLnRvcCAtIGN1ck9mZnNldC50b3AgKSArIGN1clRvcDtcblx0XHR9XG5cdFx0aWYgKCBvcHRpb25zLmxlZnQgIT0gbnVsbCApIHtcblx0XHRcdHByb3BzLmxlZnQgPSAoIG9wdGlvbnMubGVmdCAtIGN1ck9mZnNldC5sZWZ0ICkgKyBjdXJMZWZ0O1xuXHRcdH1cblxuXHRcdGlmICggXCJ1c2luZ1wiIGluIG9wdGlvbnMgKSB7XG5cdFx0XHRvcHRpb25zLnVzaW5nLmNhbGwoIGVsZW0sIHByb3BzICk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y3VyRWxlbS5jc3MoIHByb3BzICk7XG5cdFx0fVxuXHR9XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0Ly8gb2Zmc2V0KCkgcmVsYXRlcyBhbiBlbGVtZW50J3MgYm9yZGVyIGJveCB0byB0aGUgZG9jdW1lbnQgb3JpZ2luXG5cdG9mZnNldDogZnVuY3Rpb24oIG9wdGlvbnMgKSB7XG5cblx0XHQvLyBQcmVzZXJ2ZSBjaGFpbmluZyBmb3Igc2V0dGVyXG5cdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIG9wdGlvbnMgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdHRoaXMgOlxuXHRcdFx0XHR0aGlzLmVhY2goIGZ1bmN0aW9uKCBpICkge1xuXHRcdFx0XHRcdGpRdWVyeS5vZmZzZXQuc2V0T2Zmc2V0KCB0aGlzLCBvcHRpb25zLCBpICk7XG5cdFx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHR2YXIgcmVjdCwgd2luLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXTtcblxuXHRcdGlmICggIWVsZW0gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIHplcm9zIGZvciBkaXNjb25uZWN0ZWQgYW5kIGhpZGRlbiAoZGlzcGxheTogbm9uZSkgZWxlbWVudHMgKGdoLTIzMTApXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdFx0Ly8gUnVubmluZyBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb24gYVxuXHRcdC8vIGRpc2Nvbm5lY3RlZCBub2RlIGluIElFIHRocm93cyBhbiBlcnJvclxuXHRcdGlmICggIWVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4geyB0b3A6IDAsIGxlZnQ6IDAgfTtcblx0XHR9XG5cblx0XHQvLyBHZXQgZG9jdW1lbnQtcmVsYXRpdmUgcG9zaXRpb24gYnkgYWRkaW5nIHZpZXdwb3J0IHNjcm9sbCB0byB2aWV3cG9ydC1yZWxhdGl2ZSBnQkNSXG5cdFx0cmVjdCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cdFx0d2luID0gZWxlbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O1xuXHRcdHJldHVybiB7XG5cdFx0XHR0b3A6IHJlY3QudG9wICsgd2luLnBhZ2VZT2Zmc2V0LFxuXHRcdFx0bGVmdDogcmVjdC5sZWZ0ICsgd2luLnBhZ2VYT2Zmc2V0XG5cdFx0fTtcblx0fSxcblxuXHQvLyBwb3NpdGlvbigpIHJlbGF0ZXMgYW4gZWxlbWVudCdzIG1hcmdpbiBib3ggdG8gaXRzIG9mZnNldCBwYXJlbnQncyBwYWRkaW5nIGJveFxuXHQvLyBUaGlzIGNvcnJlc3BvbmRzIHRvIHRoZSBiZWhhdmlvciBvZiBDU1MgYWJzb2x1dGUgcG9zaXRpb25pbmdcblx0cG9zaXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggIXRoaXNbIDAgXSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YXIgb2Zmc2V0UGFyZW50LCBvZmZzZXQsIGRvYyxcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF0sXG5cdFx0XHRwYXJlbnRPZmZzZXQgPSB7IHRvcDogMCwgbGVmdDogMCB9O1xuXG5cdFx0Ly8gcG9zaXRpb246Zml4ZWQgZWxlbWVudHMgYXJlIG9mZnNldCBmcm9tIHRoZSB2aWV3cG9ydCwgd2hpY2ggaXRzZWxmIGFsd2F5cyBoYXMgemVybyBvZmZzZXRcblx0XHRpZiAoIGpRdWVyeS5jc3MoIGVsZW0sIFwicG9zaXRpb25cIiApID09PSBcImZpeGVkXCIgKSB7XG5cblx0XHRcdC8vIEFzc3VtZSBwb3NpdGlvbjpmaXhlZCBpbXBsaWVzIGF2YWlsYWJpbGl0eSBvZiBnZXRCb3VuZGluZ0NsaWVudFJlY3Rcblx0XHRcdG9mZnNldCA9IGVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG5cblx0XHR9IGVsc2Uge1xuXHRcdFx0b2Zmc2V0ID0gdGhpcy5vZmZzZXQoKTtcblxuXHRcdFx0Ly8gQWNjb3VudCBmb3IgdGhlICpyZWFsKiBvZmZzZXQgcGFyZW50LCB3aGljaCBjYW4gYmUgdGhlIGRvY3VtZW50IG9yIGl0cyByb290IGVsZW1lbnRcblx0XHRcdC8vIHdoZW4gYSBzdGF0aWNhbGx5IHBvc2l0aW9uZWQgZWxlbWVudCBpcyBpZGVudGlmaWVkXG5cdFx0XHRkb2MgPSBlbGVtLm93bmVyRG9jdW1lbnQ7XG5cdFx0XHRvZmZzZXRQYXJlbnQgPSBlbGVtLm9mZnNldFBhcmVudCB8fCBkb2MuZG9jdW1lbnRFbGVtZW50O1xuXHRcdFx0d2hpbGUgKCBvZmZzZXRQYXJlbnQgJiZcblx0XHRcdFx0KCBvZmZzZXRQYXJlbnQgPT09IGRvYy5ib2R5IHx8IG9mZnNldFBhcmVudCA9PT0gZG9jLmRvY3VtZW50RWxlbWVudCApICYmXG5cdFx0XHRcdGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJwb3NpdGlvblwiICkgPT09IFwic3RhdGljXCIgKSB7XG5cblx0XHRcdFx0b2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50LnBhcmVudE5vZGU7XG5cdFx0XHR9XG5cdFx0XHRpZiAoIG9mZnNldFBhcmVudCAmJiBvZmZzZXRQYXJlbnQgIT09IGVsZW0gJiYgb2Zmc2V0UGFyZW50Lm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdC8vIEluY29ycG9yYXRlIGJvcmRlcnMgaW50byBpdHMgb2Zmc2V0LCBzaW5jZSB0aGV5IGFyZSBvdXRzaWRlIGl0cyBjb250ZW50IG9yaWdpblxuXHRcdFx0XHRwYXJlbnRPZmZzZXQgPSBqUXVlcnkoIG9mZnNldFBhcmVudCApLm9mZnNldCgpO1xuXHRcdFx0XHRwYXJlbnRPZmZzZXQudG9wICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJib3JkZXJUb3BXaWR0aFwiLCB0cnVlICk7XG5cdFx0XHRcdHBhcmVudE9mZnNldC5sZWZ0ICs9IGpRdWVyeS5jc3MoIG9mZnNldFBhcmVudCwgXCJib3JkZXJMZWZ0V2lkdGhcIiwgdHJ1ZSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIFN1YnRyYWN0IHBhcmVudCBvZmZzZXRzIGFuZCBlbGVtZW50IG1hcmdpbnNcblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wOiBvZmZzZXQudG9wIC0gcGFyZW50T2Zmc2V0LnRvcCAtIGpRdWVyeS5jc3MoIGVsZW0sIFwibWFyZ2luVG9wXCIsIHRydWUgKSxcblx0XHRcdGxlZnQ6IG9mZnNldC5sZWZ0IC0gcGFyZW50T2Zmc2V0LmxlZnQgLSBqUXVlcnkuY3NzKCBlbGVtLCBcIm1hcmdpbkxlZnRcIiwgdHJ1ZSApXG5cdFx0fTtcblx0fSxcblxuXHQvLyBUaGlzIG1ldGhvZCB3aWxsIHJldHVybiBkb2N1bWVudEVsZW1lbnQgaW4gdGhlIGZvbGxvd2luZyBjYXNlczpcblx0Ly8gMSkgRm9yIHRoZSBlbGVtZW50IGluc2lkZSB0aGUgaWZyYW1lIHdpdGhvdXQgb2Zmc2V0UGFyZW50LCB0aGlzIG1ldGhvZCB3aWxsIHJldHVyblxuXHQvLyAgICBkb2N1bWVudEVsZW1lbnQgb2YgdGhlIHBhcmVudCB3aW5kb3dcblx0Ly8gMikgRm9yIHRoZSBoaWRkZW4gb3IgZGV0YWNoZWQgZWxlbWVudFxuXHQvLyAzKSBGb3IgYm9keSBvciBodG1sIGVsZW1lbnQsIGkuZS4gaW4gY2FzZSBvZiB0aGUgaHRtbCBub2RlIC0gaXQgd2lsbCByZXR1cm4gaXRzZWxmXG5cdC8vXG5cdC8vIGJ1dCB0aG9zZSBleGNlcHRpb25zIHdlcmUgbmV2ZXIgcHJlc2VudGVkIGFzIGEgcmVhbCBsaWZlIHVzZS1jYXNlc1xuXHQvLyBhbmQgbWlnaHQgYmUgY29uc2lkZXJlZCBhcyBtb3JlIHByZWZlcmFibGUgcmVzdWx0cy5cblx0Ly9cblx0Ly8gVGhpcyBsb2dpYywgaG93ZXZlciwgaXMgbm90IGd1YXJhbnRlZWQgYW5kIGNhbiBjaGFuZ2UgYXQgYW55IHBvaW50IGluIHRoZSBmdXR1cmVcblx0b2Zmc2V0UGFyZW50OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIG9mZnNldFBhcmVudCA9IHRoaXMub2Zmc2V0UGFyZW50O1xuXG5cdFx0XHR3aGlsZSAoIG9mZnNldFBhcmVudCAmJiBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwicG9zaXRpb25cIiApID09PSBcInN0YXRpY1wiICkge1xuXHRcdFx0XHRvZmZzZXRQYXJlbnQgPSBvZmZzZXRQYXJlbnQub2Zmc2V0UGFyZW50O1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGRvY3VtZW50RWxlbWVudDtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuLy8gQ3JlYXRlIHNjcm9sbExlZnQgYW5kIHNjcm9sbFRvcCBtZXRob2RzXG5qUXVlcnkuZWFjaCggeyBzY3JvbGxMZWZ0OiBcInBhZ2VYT2Zmc2V0XCIsIHNjcm9sbFRvcDogXCJwYWdlWU9mZnNldFwiIH0sIGZ1bmN0aW9uKCBtZXRob2QsIHByb3AgKSB7XG5cdHZhciB0b3AgPSBcInBhZ2VZT2Zmc2V0XCIgPT09IHByb3A7XG5cblx0alF1ZXJ5LmZuWyBtZXRob2QgXSA9IGZ1bmN0aW9uKCB2YWwgKSB7XG5cdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIG1ldGhvZCwgdmFsICkge1xuXG5cdFx0XHQvLyBDb2FsZXNjZSBkb2N1bWVudHMgYW5kIHdpbmRvd3Ncblx0XHRcdHZhciB3aW47XG5cdFx0XHRpZiAoIGlzV2luZG93KCBlbGVtICkgKSB7XG5cdFx0XHRcdHdpbiA9IGVsZW07XG5cdFx0XHR9IGVsc2UgaWYgKCBlbGVtLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR3aW4gPSBlbGVtLmRlZmF1bHRWaWV3O1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHZhbCA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRyZXR1cm4gd2luID8gd2luWyBwcm9wIF0gOiBlbGVtWyBtZXRob2QgXTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB3aW4gKSB7XG5cdFx0XHRcdHdpbi5zY3JvbGxUbyhcblx0XHRcdFx0XHQhdG9wID8gdmFsIDogd2luLnBhZ2VYT2Zmc2V0LFxuXHRcdFx0XHRcdHRvcCA/IHZhbCA6IHdpbi5wYWdlWU9mZnNldFxuXHRcdFx0XHQpO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRlbGVtWyBtZXRob2QgXSA9IHZhbDtcblx0XHRcdH1cblx0XHR9LCBtZXRob2QsIHZhbCwgYXJndW1lbnRzLmxlbmd0aCApO1xuXHR9O1xufSApO1xuXG4vLyBTdXBwb3J0OiBTYWZhcmkgPD03IC0gOS4xLCBDaHJvbWUgPD0zNyAtIDQ5XG4vLyBBZGQgdGhlIHRvcC9sZWZ0IGNzc0hvb2tzIHVzaW5nIGpRdWVyeS5mbi5wb3NpdGlvblxuLy8gV2Via2l0IGJ1ZzogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5MDg0XG4vLyBCbGluayBidWc6IGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTU4OTM0N1xuLy8gZ2V0Q29tcHV0ZWRTdHlsZSByZXR1cm5zIHBlcmNlbnQgd2hlbiBzcGVjaWZpZWQgZm9yIHRvcC9sZWZ0L2JvdHRvbS9yaWdodDtcbi8vIHJhdGhlciB0aGFuIG1ha2UgdGhlIGNzcyBtb2R1bGUgZGVwZW5kIG9uIHRoZSBvZmZzZXQgbW9kdWxlLCBqdXN0IGNoZWNrIGZvciBpdCBoZXJlXG5qUXVlcnkuZWFjaCggWyBcInRvcFwiLCBcImxlZnRcIiBdLCBmdW5jdGlvbiggX2ksIHByb3AgKSB7XG5cdGpRdWVyeS5jc3NIb29rc1sgcHJvcCBdID0gYWRkR2V0SG9va0lmKCBzdXBwb3J0LnBpeGVsUG9zaXRpb24sXG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xuXHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRcdFx0Y29tcHV0ZWQgPSBjdXJDU1MoIGVsZW0sIHByb3AgKTtcblxuXHRcdFx0XHQvLyBJZiBjdXJDU1MgcmV0dXJucyBwZXJjZW50YWdlLCBmYWxsYmFjayB0byBvZmZzZXRcblx0XHRcdFx0cmV0dXJuIHJudW1ub25weC50ZXN0KCBjb21wdXRlZCApID9cblx0XHRcdFx0XHRqUXVlcnkoIGVsZW0gKS5wb3NpdGlvbigpWyBwcm9wIF0gKyBcInB4XCIgOlxuXHRcdFx0XHRcdGNvbXB1dGVkO1xuXHRcdFx0fVxuXHRcdH1cblx0KTtcbn0gKTtcblxuXG4vLyBDcmVhdGUgaW5uZXJIZWlnaHQsIGlubmVyV2lkdGgsIGhlaWdodCwgd2lkdGgsIG91dGVySGVpZ2h0IGFuZCBvdXRlcldpZHRoIG1ldGhvZHNcbmpRdWVyeS5lYWNoKCB7IEhlaWdodDogXCJoZWlnaHRcIiwgV2lkdGg6IFwid2lkdGhcIiB9LCBmdW5jdGlvbiggbmFtZSwgdHlwZSApIHtcblx0alF1ZXJ5LmVhY2goIHtcblx0XHRwYWRkaW5nOiBcImlubmVyXCIgKyBuYW1lLFxuXHRcdGNvbnRlbnQ6IHR5cGUsXG5cdFx0XCJcIjogXCJvdXRlclwiICsgbmFtZVxuXHR9LCBmdW5jdGlvbiggZGVmYXVsdEV4dHJhLCBmdW5jTmFtZSApIHtcblxuXHRcdC8vIE1hcmdpbiBpcyBvbmx5IGZvciBvdXRlckhlaWdodCwgb3V0ZXJXaWR0aFxuXHRcdGpRdWVyeS5mblsgZnVuY05hbWUgXSA9IGZ1bmN0aW9uKCBtYXJnaW4sIHZhbHVlICkge1xuXHRcdFx0dmFyIGNoYWluYWJsZSA9IGFyZ3VtZW50cy5sZW5ndGggJiYgKCBkZWZhdWx0RXh0cmEgfHwgdHlwZW9mIG1hcmdpbiAhPT0gXCJib29sZWFuXCIgKSxcblx0XHRcdFx0ZXh0cmEgPSBkZWZhdWx0RXh0cmEgfHwgKCBtYXJnaW4gPT09IHRydWUgfHwgdmFsdWUgPT09IHRydWUgPyBcIm1hcmdpblwiIDogXCJib3JkZXJcIiApO1xuXG5cdFx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggZWxlbSwgdHlwZSwgdmFsdWUgKSB7XG5cdFx0XHRcdHZhciBkb2M7XG5cblx0XHRcdFx0aWYgKCBpc1dpbmRvdyggZWxlbSApICkge1xuXG5cdFx0XHRcdFx0Ly8gJCggd2luZG93ICkub3V0ZXJXaWR0aC9IZWlnaHQgcmV0dXJuIHcvaCBpbmNsdWRpbmcgc2Nyb2xsYmFycyAoZ2gtMTcyOSlcblx0XHRcdFx0XHRyZXR1cm4gZnVuY05hbWUuaW5kZXhPZiggXCJvdXRlclwiICkgPT09IDAgP1xuXHRcdFx0XHRcdFx0ZWxlbVsgXCJpbm5lclwiICsgbmFtZSBdIDpcblx0XHRcdFx0XHRcdGVsZW0uZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50WyBcImNsaWVudFwiICsgbmFtZSBdO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gR2V0IGRvY3VtZW50IHdpZHRoIG9yIGhlaWdodFxuXHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0ZG9jID0gZWxlbS5kb2N1bWVudEVsZW1lbnQ7XG5cblx0XHRcdFx0XHQvLyBFaXRoZXIgc2Nyb2xsW1dpZHRoL0hlaWdodF0gb3Igb2Zmc2V0W1dpZHRoL0hlaWdodF0gb3IgY2xpZW50W1dpZHRoL0hlaWdodF0sXG5cdFx0XHRcdFx0Ly8gd2hpY2hldmVyIGlzIGdyZWF0ZXN0XG5cdFx0XHRcdFx0cmV0dXJuIE1hdGgubWF4KFxuXHRcdFx0XHRcdFx0ZWxlbS5ib2R5WyBcInNjcm9sbFwiICsgbmFtZSBdLCBkb2NbIFwic2Nyb2xsXCIgKyBuYW1lIF0sXG5cdFx0XHRcdFx0XHRlbGVtLmJvZHlbIFwib2Zmc2V0XCIgKyBuYW1lIF0sIGRvY1sgXCJvZmZzZXRcIiArIG5hbWUgXSxcblx0XHRcdFx0XHRcdGRvY1sgXCJjbGllbnRcIiArIG5hbWUgXVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/XG5cblx0XHRcdFx0XHQvLyBHZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50LCByZXF1ZXN0aW5nIGJ1dCBub3QgZm9yY2luZyBwYXJzZUZsb2F0XG5cdFx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgdHlwZSwgZXh0cmEgKSA6XG5cblx0XHRcdFx0XHQvLyBTZXQgd2lkdGggb3IgaGVpZ2h0IG9uIHRoZSBlbGVtZW50XG5cdFx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCB0eXBlLCB2YWx1ZSwgZXh0cmEgKTtcblx0XHRcdH0sIHR5cGUsIGNoYWluYWJsZSA/IG1hcmdpbiA6IHVuZGVmaW5lZCwgY2hhaW5hYmxlICk7XG5cdFx0fTtcblx0fSApO1xufSApO1xuXG5cbmpRdWVyeS5lYWNoKCBbXG5cdFwiYWpheFN0YXJ0XCIsXG5cdFwiYWpheFN0b3BcIixcblx0XCJhamF4Q29tcGxldGVcIixcblx0XCJhamF4RXJyb3JcIixcblx0XCJhamF4U3VjY2Vzc1wiLFxuXHRcImFqYXhTZW5kXCJcbl0sIGZ1bmN0aW9uKCBfaSwgdHlwZSApIHtcblx0alF1ZXJ5LmZuWyB0eXBlIF0gPSBmdW5jdGlvbiggZm4gKSB7XG5cdFx0cmV0dXJuIHRoaXMub24oIHR5cGUsIGZuICk7XG5cdH07XG59ICk7XG5cblxuXG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblxuXHRiaW5kOiBmdW5jdGlvbiggdHlwZXMsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlcywgbnVsbCwgZGF0YSwgZm4gKTtcblx0fSxcblx0dW5iaW5kOiBmdW5jdGlvbiggdHlwZXMsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9mZiggdHlwZXMsIG51bGwsIGZuICk7XG5cdH0sXG5cblx0ZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGRhdGEsIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuICk7XG5cdH0sXG5cdHVuZGVsZWdhdGU6IGZ1bmN0aW9uKCBzZWxlY3RvciwgdHlwZXMsIGZuICkge1xuXG5cdFx0Ly8gKCBuYW1lc3BhY2UgKSBvciAoIHNlbGVjdG9yLCB0eXBlcyBbLCBmbl0gKVxuXHRcdHJldHVybiBhcmd1bWVudHMubGVuZ3RoID09PSAxID9cblx0XHRcdHRoaXMub2ZmKCBzZWxlY3RvciwgXCIqKlwiICkgOlxuXHRcdFx0dGhpcy5vZmYoIHR5cGVzLCBzZWxlY3RvciB8fCBcIioqXCIsIGZuICk7XG5cdH0sXG5cblx0aG92ZXI6IGZ1bmN0aW9uKCBmbk92ZXIsIGZuT3V0ICkge1xuXHRcdHJldHVybiB0aGlzLm1vdXNlZW50ZXIoIGZuT3ZlciApLm1vdXNlbGVhdmUoIGZuT3V0IHx8IGZuT3ZlciApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5lYWNoKFxuXHQoIFwiYmx1ciBmb2N1cyBmb2N1c2luIGZvY3Vzb3V0IHJlc2l6ZSBzY3JvbGwgY2xpY2sgZGJsY2xpY2sgXCIgK1xuXHRcIm1vdXNlZG93biBtb3VzZXVwIG1vdXNlbW92ZSBtb3VzZW92ZXIgbW91c2VvdXQgbW91c2VlbnRlciBtb3VzZWxlYXZlIFwiICtcblx0XCJjaGFuZ2Ugc2VsZWN0IHN1Ym1pdCBrZXlkb3duIGtleXByZXNzIGtleXVwIGNvbnRleHRtZW51XCIgKS5zcGxpdCggXCIgXCIgKSxcblx0ZnVuY3Rpb24oIF9pLCBuYW1lICkge1xuXG5cdFx0Ly8gSGFuZGxlIGV2ZW50IGJpbmRpbmdcblx0XHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCBkYXRhLCBmbiApIHtcblx0XHRcdHJldHVybiBhcmd1bWVudHMubGVuZ3RoID4gMCA/XG5cdFx0XHRcdHRoaXMub24oIG5hbWUsIG51bGwsIGRhdGEsIGZuICkgOlxuXHRcdFx0XHR0aGlzLnRyaWdnZXIoIG5hbWUgKTtcblx0XHR9O1xuXHR9XG4pO1xuXG5cblxuXG4vLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHlcbi8vIE1ha2Ugc3VyZSB3ZSB0cmltIEJPTSBhbmQgTkJTUFxudmFyIHJ0cmltID0gL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nO1xuXG4vLyBCaW5kIGEgZnVuY3Rpb24gdG8gYSBjb250ZXh0LCBvcHRpb25hbGx5IHBhcnRpYWxseSBhcHBseWluZyBhbnlcbi8vIGFyZ3VtZW50cy5cbi8vIGpRdWVyeS5wcm94eSBpcyBkZXByZWNhdGVkIHRvIHByb21vdGUgc3RhbmRhcmRzIChzcGVjaWZpY2FsbHkgRnVuY3Rpb24jYmluZClcbi8vIEhvd2V2ZXIsIGl0IGlzIG5vdCBzbGF0ZWQgZm9yIHJlbW92YWwgYW55IHRpbWUgc29vblxualF1ZXJ5LnByb3h5ID0gZnVuY3Rpb24oIGZuLCBjb250ZXh0ICkge1xuXHR2YXIgdG1wLCBhcmdzLCBwcm94eTtcblxuXHRpZiAoIHR5cGVvZiBjb250ZXh0ID09PSBcInN0cmluZ1wiICkge1xuXHRcdHRtcCA9IGZuWyBjb250ZXh0IF07XG5cdFx0Y29udGV4dCA9IGZuO1xuXHRcdGZuID0gdG1wO1xuXHR9XG5cblx0Ly8gUXVpY2sgY2hlY2sgdG8gZGV0ZXJtaW5lIGlmIHRhcmdldCBpcyBjYWxsYWJsZSwgaW4gdGhlIHNwZWNcblx0Ly8gdGhpcyB0aHJvd3MgYSBUeXBlRXJyb3IsIGJ1dCB3ZSB3aWxsIGp1c3QgcmV0dXJuIHVuZGVmaW5lZC5cblx0aWYgKCAhaXNGdW5jdGlvbiggZm4gKSApIHtcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHR9XG5cblx0Ly8gU2ltdWxhdGVkIGJpbmRcblx0YXJncyA9IHNsaWNlLmNhbGwoIGFyZ3VtZW50cywgMiApO1xuXHRwcm94eSA9IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBmbi5hcHBseSggY29udGV4dCB8fCB0aGlzLCBhcmdzLmNvbmNhdCggc2xpY2UuY2FsbCggYXJndW1lbnRzICkgKSApO1xuXHR9O1xuXG5cdC8vIFNldCB0aGUgZ3VpZCBvZiB1bmlxdWUgaGFuZGxlciB0byB0aGUgc2FtZSBvZiBvcmlnaW5hbCBoYW5kbGVyLCBzbyBpdCBjYW4gYmUgcmVtb3ZlZFxuXHRwcm94eS5ndWlkID0gZm4uZ3VpZCA9IGZuLmd1aWQgfHwgalF1ZXJ5Lmd1aWQrKztcblxuXHRyZXR1cm4gcHJveHk7XG59O1xuXG5qUXVlcnkuaG9sZFJlYWR5ID0gZnVuY3Rpb24oIGhvbGQgKSB7XG5cdGlmICggaG9sZCApIHtcblx0XHRqUXVlcnkucmVhZHlXYWl0Kys7XG5cdH0gZWxzZSB7XG5cdFx0alF1ZXJ5LnJlYWR5KCB0cnVlICk7XG5cdH1cbn07XG5qUXVlcnkuaXNBcnJheSA9IEFycmF5LmlzQXJyYXk7XG5qUXVlcnkucGFyc2VKU09OID0gSlNPTi5wYXJzZTtcbmpRdWVyeS5ub2RlTmFtZSA9IG5vZGVOYW1lO1xualF1ZXJ5LmlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uO1xualF1ZXJ5LmlzV2luZG93ID0gaXNXaW5kb3c7XG5qUXVlcnkuY2FtZWxDYXNlID0gY2FtZWxDYXNlO1xualF1ZXJ5LnR5cGUgPSB0b1R5cGU7XG5cbmpRdWVyeS5ub3cgPSBEYXRlLm5vdztcblxualF1ZXJ5LmlzTnVtZXJpYyA9IGZ1bmN0aW9uKCBvYmogKSB7XG5cblx0Ly8gQXMgb2YgalF1ZXJ5IDMuMCwgaXNOdW1lcmljIGlzIGxpbWl0ZWQgdG9cblx0Ly8gc3RyaW5ncyBhbmQgbnVtYmVycyAocHJpbWl0aXZlcyBvciBvYmplY3RzKVxuXHQvLyB0aGF0IGNhbiBiZSBjb2VyY2VkIHRvIGZpbml0ZSBudW1iZXJzIChnaC0yNjYyKVxuXHR2YXIgdHlwZSA9IGpRdWVyeS50eXBlKCBvYmogKTtcblx0cmV0dXJuICggdHlwZSA9PT0gXCJudW1iZXJcIiB8fCB0eXBlID09PSBcInN0cmluZ1wiICkgJiZcblxuXHRcdC8vIHBhcnNlRmxvYXQgTmFOcyBudW1lcmljLWNhc3QgZmFsc2UgcG9zaXRpdmVzIChcIlwiKVxuXHRcdC8vIC4uLmJ1dCBtaXNpbnRlcnByZXRzIGxlYWRpbmctbnVtYmVyIHN0cmluZ3MsIHBhcnRpY3VsYXJseSBoZXggbGl0ZXJhbHMgKFwiMHguLi5cIilcblx0XHQvLyBzdWJ0cmFjdGlvbiBmb3JjZXMgaW5maW5pdGllcyB0byBOYU5cblx0XHQhaXNOYU4oIG9iaiAtIHBhcnNlRmxvYXQoIG9iaiApICk7XG59O1xuXG5qUXVlcnkudHJpbSA9IGZ1bmN0aW9uKCB0ZXh0ICkge1xuXHRyZXR1cm4gdGV4dCA9PSBudWxsID9cblx0XHRcIlwiIDpcblx0XHQoIHRleHQgKyBcIlwiICkucmVwbGFjZSggcnRyaW0sIFwiXCIgKTtcbn07XG5cblxuXG4vLyBSZWdpc3RlciBhcyBhIG5hbWVkIEFNRCBtb2R1bGUsIHNpbmNlIGpRdWVyeSBjYW4gYmUgY29uY2F0ZW5hdGVkIHdpdGggb3RoZXJcbi8vIGZpbGVzIHRoYXQgbWF5IHVzZSBkZWZpbmUsIGJ1dCBub3QgdmlhIGEgcHJvcGVyIGNvbmNhdGVuYXRpb24gc2NyaXB0IHRoYXRcbi8vIHVuZGVyc3RhbmRzIGFub255bW91cyBBTUQgbW9kdWxlcy4gQSBuYW1lZCBBTUQgaXMgc2FmZXN0IGFuZCBtb3N0IHJvYnVzdFxuLy8gd2F5IHRvIHJlZ2lzdGVyLiBMb3dlcmNhc2UganF1ZXJ5IGlzIHVzZWQgYmVjYXVzZSBBTUQgbW9kdWxlIG5hbWVzIGFyZVxuLy8gZGVyaXZlZCBmcm9tIGZpbGUgbmFtZXMsIGFuZCBqUXVlcnkgaXMgbm9ybWFsbHkgZGVsaXZlcmVkIGluIGEgbG93ZXJjYXNlXG4vLyBmaWxlIG5hbWUuIERvIHRoaXMgYWZ0ZXIgY3JlYXRpbmcgdGhlIGdsb2JhbCBzbyB0aGF0IGlmIGFuIEFNRCBtb2R1bGUgd2FudHNcbi8vIHRvIGNhbGwgbm9Db25mbGljdCB0byBoaWRlIHRoaXMgdmVyc2lvbiBvZiBqUXVlcnksIGl0IHdpbGwgd29yay5cblxuLy8gTm90ZSB0aGF0IGZvciBtYXhpbXVtIHBvcnRhYmlsaXR5LCBsaWJyYXJpZXMgdGhhdCBhcmUgbm90IGpRdWVyeSBzaG91bGRcbi8vIGRlY2xhcmUgdGhlbXNlbHZlcyBhcyBhbm9ueW1vdXMgbW9kdWxlcywgYW5kIGF2b2lkIHNldHRpbmcgYSBnbG9iYWwgaWYgYW5cbi8vIEFNRCBsb2FkZXIgaXMgcHJlc2VudC4galF1ZXJ5IGlzIGEgc3BlY2lhbCBjYXNlLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlXG4vLyBodHRwczovL2dpdGh1Yi5jb20vanJidXJrZS9yZXF1aXJlanMvd2lraS9VcGRhdGluZy1leGlzdGluZy1saWJyYXJpZXMjd2lraS1hbm9uXG5cbmlmICggdHlwZW9mIGRlZmluZSA9PT0gXCJmdW5jdGlvblwiICYmIGRlZmluZS5hbWQgKSB7XG5cdGRlZmluZSggXCJqcXVlcnlcIiwgW10sIGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBqUXVlcnk7XG5cdH0gKTtcbn1cblxuXG5cblxudmFyXG5cblx0Ly8gTWFwIG92ZXIgalF1ZXJ5IGluIGNhc2Ugb2Ygb3ZlcndyaXRlXG5cdF9qUXVlcnkgPSB3aW5kb3cualF1ZXJ5LFxuXG5cdC8vIE1hcCBvdmVyIHRoZSAkIGluIGNhc2Ugb2Ygb3ZlcndyaXRlXG5cdF8kID0gd2luZG93LiQ7XG5cbmpRdWVyeS5ub0NvbmZsaWN0ID0gZnVuY3Rpb24oIGRlZXAgKSB7XG5cdGlmICggd2luZG93LiQgPT09IGpRdWVyeSApIHtcblx0XHR3aW5kb3cuJCA9IF8kO1xuXHR9XG5cblx0aWYgKCBkZWVwICYmIHdpbmRvdy5qUXVlcnkgPT09IGpRdWVyeSApIHtcblx0XHR3aW5kb3cualF1ZXJ5ID0gX2pRdWVyeTtcblx0fVxuXG5cdHJldHVybiBqUXVlcnk7XG59O1xuXG4vLyBFeHBvc2UgalF1ZXJ5IGFuZCAkIGlkZW50aWZpZXJzLCBldmVuIGluIEFNRFxuLy8gKCM3MTAyI2NvbW1lbnQ6MTAsIGh0dHBzOi8vZ2l0aHViLmNvbS9qcXVlcnkvanF1ZXJ5L3B1bGwvNTU3KVxuLy8gYW5kIENvbW1vbkpTIGZvciBicm93c2VyIGVtdWxhdG9ycyAoIzEzNTY2KVxuaWYgKCB0eXBlb2Ygbm9HbG9iYWwgPT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdHdpbmRvdy5qUXVlcnkgPSB3aW5kb3cuJCA9IGpRdWVyeTtcbn1cblxuXG5cblxucmV0dXJuIGpRdWVyeTtcbn0gKTtcbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMS4wKTogdXRpbC9pbmRleC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IE1BWF9VSUQgPSAxMDAwMDAwXG5jb25zdCBNSUxMSVNFQ09ORFNfTVVMVElQTElFUiA9IDEwMDBcbmNvbnN0IFRSQU5TSVRJT05fRU5EID0gJ3RyYW5zaXRpb25lbmQnXG5cbi8vIFNob3V0b3V0IEFuZ3VzQ3JvbGwgKGh0dHBzOi8vZ29vLmdsL3B4d1FHcClcbmNvbnN0IHRvVHlwZSA9IG9iaiA9PiB7XG4gIGlmIChvYmogPT09IG51bGwgfHwgb2JqID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gYCR7b2JqfWBcbiAgfVxuXG4gIHJldHVybiB7fS50b1N0cmluZy5jYWxsKG9iaikubWF0Y2goL1xccyhbYS16XSspL2kpWzFdLnRvTG93ZXJDYXNlKClcbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogUHVibGljIFV0aWwgQXBpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IGdldFVJRCA9IHByZWZpeCA9PiB7XG4gIGRvIHtcbiAgICBwcmVmaXggKz0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogTUFYX1VJRClcbiAgfSB3aGlsZSAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQocHJlZml4KSlcblxuICByZXR1cm4gcHJlZml4XG59XG5cbmNvbnN0IGdldFNlbGVjdG9yID0gZWxlbWVudCA9PiB7XG4gIGxldCBzZWxlY3RvciA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLXRhcmdldCcpXG5cbiAgaWYgKCFzZWxlY3RvciB8fCBzZWxlY3RvciA9PT0gJyMnKSB7XG4gICAgbGV0IGhyZWZBdHRyID0gZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2hyZWYnKVxuXG4gICAgLy8gVGhlIG9ubHkgdmFsaWQgY29udGVudCB0aGF0IGNvdWxkIGRvdWJsZSBhcyBhIHNlbGVjdG9yIGFyZSBJRHMgb3IgY2xhc3NlcyxcbiAgICAvLyBzbyBldmVyeXRoaW5nIHN0YXJ0aW5nIHdpdGggYCNgIG9yIGAuYC4gSWYgYSBcInJlYWxcIiBVUkwgaXMgdXNlZCBhcyB0aGUgc2VsZWN0b3IsXG4gICAgLy8gYGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JgIHdpbGwgcmlnaHRmdWxseSBjb21wbGFpbiBpdCBpcyBpbnZhbGlkLlxuICAgIC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvaXNzdWVzLzMyMjczXG4gICAgaWYgKCFocmVmQXR0ciB8fCAoIWhyZWZBdHRyLmluY2x1ZGVzKCcjJykgJiYgIWhyZWZBdHRyLnN0YXJ0c1dpdGgoJy4nKSkpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgLy8gSnVzdCBpbiBjYXNlIHNvbWUgQ01TIHB1dHMgb3V0IGEgZnVsbCBVUkwgd2l0aCB0aGUgYW5jaG9yIGFwcGVuZGVkXG4gICAgaWYgKGhyZWZBdHRyLmluY2x1ZGVzKCcjJykgJiYgIWhyZWZBdHRyLnN0YXJ0c1dpdGgoJyMnKSkge1xuICAgICAgaHJlZkF0dHIgPSBgIyR7aHJlZkF0dHIuc3BsaXQoJyMnKVsxXX1gXG4gICAgfVxuXG4gICAgc2VsZWN0b3IgPSBocmVmQXR0ciAmJiBocmVmQXR0ciAhPT0gJyMnID8gaHJlZkF0dHIudHJpbSgpIDogbnVsbFxuICB9XG5cbiAgcmV0dXJuIHNlbGVjdG9yXG59XG5cbmNvbnN0IGdldFNlbGVjdG9yRnJvbUVsZW1lbnQgPSBlbGVtZW50ID0+IHtcbiAgY29uc3Qgc2VsZWN0b3IgPSBnZXRTZWxlY3RvcihlbGVtZW50KVxuXG4gIGlmIChzZWxlY3Rvcikge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKSA/IHNlbGVjdG9yIDogbnVsbFxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuY29uc3QgZ2V0RWxlbWVudEZyb21TZWxlY3RvciA9IGVsZW1lbnQgPT4ge1xuICBjb25zdCBzZWxlY3RvciA9IGdldFNlbGVjdG9yKGVsZW1lbnQpXG5cbiAgcmV0dXJuIHNlbGVjdG9yID8gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcikgOiBudWxsXG59XG5cbmNvbnN0IGdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50ID0gZWxlbWVudCA9PiB7XG4gIGlmICghZWxlbWVudCkge1xuICAgIHJldHVybiAwXG4gIH1cblxuICAvLyBHZXQgdHJhbnNpdGlvbi1kdXJhdGlvbiBvZiB0aGUgZWxlbWVudFxuICBsZXQgeyB0cmFuc2l0aW9uRHVyYXRpb24sIHRyYW5zaXRpb25EZWxheSB9ID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudClcblxuICBjb25zdCBmbG9hdFRyYW5zaXRpb25EdXJhdGlvbiA9IE51bWJlci5wYXJzZUZsb2F0KHRyYW5zaXRpb25EdXJhdGlvbilcbiAgY29uc3QgZmxvYXRUcmFuc2l0aW9uRGVsYXkgPSBOdW1iZXIucGFyc2VGbG9hdCh0cmFuc2l0aW9uRGVsYXkpXG5cbiAgLy8gUmV0dXJuIDAgaWYgZWxlbWVudCBvciB0cmFuc2l0aW9uIGR1cmF0aW9uIGlzIG5vdCBmb3VuZFxuICBpZiAoIWZsb2F0VHJhbnNpdGlvbkR1cmF0aW9uICYmICFmbG9hdFRyYW5zaXRpb25EZWxheSkge1xuICAgIHJldHVybiAwXG4gIH1cblxuICAvLyBJZiBtdWx0aXBsZSBkdXJhdGlvbnMgYXJlIGRlZmluZWQsIHRha2UgdGhlIGZpcnN0XG4gIHRyYW5zaXRpb25EdXJhdGlvbiA9IHRyYW5zaXRpb25EdXJhdGlvbi5zcGxpdCgnLCcpWzBdXG4gIHRyYW5zaXRpb25EZWxheSA9IHRyYW5zaXRpb25EZWxheS5zcGxpdCgnLCcpWzBdXG5cbiAgcmV0dXJuIChOdW1iZXIucGFyc2VGbG9hdCh0cmFuc2l0aW9uRHVyYXRpb24pICsgTnVtYmVyLnBhcnNlRmxvYXQodHJhbnNpdGlvbkRlbGF5KSkgKiBNSUxMSVNFQ09ORFNfTVVMVElQTElFUlxufVxuXG5jb25zdCB0cmlnZ2VyVHJhbnNpdGlvbkVuZCA9IGVsZW1lbnQgPT4ge1xuICBlbGVtZW50LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KFRSQU5TSVRJT05fRU5EKSlcbn1cblxuY29uc3QgaXNFbGVtZW50ID0gb2JqID0+IHtcbiAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqLmpxdWVyeSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICBvYmogPSBvYmpbMF1cbiAgfVxuXG4gIHJldHVybiB0eXBlb2Ygb2JqLm5vZGVUeXBlICE9PSAndW5kZWZpbmVkJ1xufVxuXG5jb25zdCBnZXRFbGVtZW50ID0gb2JqID0+IHtcbiAgaWYgKGlzRWxlbWVudChvYmopKSB7IC8vIGl0J3MgYSBqUXVlcnkgb2JqZWN0IG9yIGEgbm9kZSBlbGVtZW50XG4gICAgcmV0dXJuIG9iai5qcXVlcnkgPyBvYmpbMF0gOiBvYmpcbiAgfVxuXG4gIGlmICh0eXBlb2Ygb2JqID09PSAnc3RyaW5nJyAmJiBvYmoubGVuZ3RoID4gMCkge1xuICAgIHJldHVybiBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKG9iailcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmNvbnN0IHR5cGVDaGVja0NvbmZpZyA9IChjb21wb25lbnROYW1lLCBjb25maWcsIGNvbmZpZ1R5cGVzKSA9PiB7XG4gIE9iamVjdC5rZXlzKGNvbmZpZ1R5cGVzKS5mb3JFYWNoKHByb3BlcnR5ID0+IHtcbiAgICBjb25zdCBleHBlY3RlZFR5cGVzID0gY29uZmlnVHlwZXNbcHJvcGVydHldXG4gICAgY29uc3QgdmFsdWUgPSBjb25maWdbcHJvcGVydHldXG4gICAgY29uc3QgdmFsdWVUeXBlID0gdmFsdWUgJiYgaXNFbGVtZW50KHZhbHVlKSA/ICdlbGVtZW50JyA6IHRvVHlwZSh2YWx1ZSlcblxuICAgIGlmICghbmV3IFJlZ0V4cChleHBlY3RlZFR5cGVzKS50ZXN0KHZhbHVlVHlwZSkpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoXG4gICAgICAgIGAke2NvbXBvbmVudE5hbWUudG9VcHBlckNhc2UoKX06IE9wdGlvbiBcIiR7cHJvcGVydHl9XCIgcHJvdmlkZWQgdHlwZSBcIiR7dmFsdWVUeXBlfVwiIGJ1dCBleHBlY3RlZCB0eXBlIFwiJHtleHBlY3RlZFR5cGVzfVwiLmBcbiAgICAgIClcbiAgICB9XG4gIH0pXG59XG5cbmNvbnN0IGlzVmlzaWJsZSA9IGVsZW1lbnQgPT4ge1xuICBpZiAoIWlzRWxlbWVudChlbGVtZW50KSB8fCBlbGVtZW50LmdldENsaWVudFJlY3RzKCkubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKCd2aXNpYmlsaXR5JykgPT09ICd2aXNpYmxlJ1xufVxuXG5jb25zdCBpc0Rpc2FibGVkID0gZWxlbWVudCA9PiB7XG4gIGlmICghZWxlbWVudCB8fCBlbGVtZW50Lm5vZGVUeXBlICE9PSBOb2RlLkVMRU1FTlRfTk9ERSkge1xuICAgIHJldHVybiB0cnVlXG4gIH1cblxuICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoJ2Rpc2FibGVkJykpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgaWYgKHR5cGVvZiBlbGVtZW50LmRpc2FibGVkICE9PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBlbGVtZW50LmRpc2FibGVkXG4gIH1cblxuICByZXR1cm4gZWxlbWVudC5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGVkJykgJiYgZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2Rpc2FibGVkJykgIT09ICdmYWxzZSdcbn1cblxuY29uc3QgZmluZFNoYWRvd1Jvb3QgPSBlbGVtZW50ID0+IHtcbiAgaWYgKCFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuYXR0YWNoU2hhZG93KSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIC8vIENhbiBmaW5kIHRoZSBzaGFkb3cgcm9vdCBvdGhlcndpc2UgaXQnbGwgcmV0dXJuIHRoZSBkb2N1bWVudFxuICBpZiAodHlwZW9mIGVsZW1lbnQuZ2V0Um9vdE5vZGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjb25zdCByb290ID0gZWxlbWVudC5nZXRSb290Tm9kZSgpXG4gICAgcmV0dXJuIHJvb3QgaW5zdGFuY2VvZiBTaGFkb3dSb290ID8gcm9vdCA6IG51bGxcbiAgfVxuXG4gIGlmIChlbGVtZW50IGluc3RhbmNlb2YgU2hhZG93Um9vdCkge1xuICAgIHJldHVybiBlbGVtZW50XG4gIH1cblxuICAvLyB3aGVuIHdlIGRvbid0IGZpbmQgYSBzaGFkb3cgcm9vdFxuICBpZiAoIWVsZW1lbnQucGFyZW50Tm9kZSkge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICByZXR1cm4gZmluZFNoYWRvd1Jvb3QoZWxlbWVudC5wYXJlbnROb2RlKVxufVxuXG5jb25zdCBub29wID0gKCkgPT4ge31cblxuLyoqXG4gKiBUcmljayB0byByZXN0YXJ0IGFuIGVsZW1lbnQncyBhbmltYXRpb25cbiAqXG4gKiBAcGFyYW0ge0hUTUxFbGVtZW50fSBlbGVtZW50XG4gKiBAcmV0dXJuIHZvaWRcbiAqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LmNoYXJpc3RoZW8uaW8vYmxvZy8yMDIxLzAyL3Jlc3RhcnQtYS1jc3MtYW5pbWF0aW9uLXdpdGgtamF2YXNjcmlwdC8jcmVzdGFydGluZy1hLWNzcy1hbmltYXRpb25cbiAqL1xuY29uc3QgcmVmbG93ID0gZWxlbWVudCA9PiB7XG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcbiAgZWxlbWVudC5vZmZzZXRIZWlnaHRcbn1cblxuY29uc3QgZ2V0alF1ZXJ5ID0gKCkgPT4ge1xuICBjb25zdCB7IGpRdWVyeSB9ID0gd2luZG93XG5cbiAgaWYgKGpRdWVyeSAmJiAhZG9jdW1lbnQuYm9keS5oYXNBdHRyaWJ1dGUoJ2RhdGEtYnMtbm8tanF1ZXJ5JykpIHtcbiAgICByZXR1cm4galF1ZXJ5XG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuXG5jb25zdCBET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzID0gW11cblxuY29uc3Qgb25ET01Db250ZW50TG9hZGVkID0gY2FsbGJhY2sgPT4ge1xuICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gJ2xvYWRpbmcnKSB7XG4gICAgLy8gYWRkIGxpc3RlbmVyIG9uIHRoZSBmaXJzdCBjYWxsIHdoZW4gdGhlIGRvY3VtZW50IGlzIGluIGxvYWRpbmcgc3RhdGVcbiAgICBpZiAoIURPTUNvbnRlbnRMb2FkZWRDYWxsYmFja3MubGVuZ3RoKSB7XG4gICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgKCkgPT4ge1xuICAgICAgICBET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzLmZvckVhY2goY2FsbGJhY2sgPT4gY2FsbGJhY2soKSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgRE9NQ29udGVudExvYWRlZENhbGxiYWNrcy5wdXNoKGNhbGxiYWNrKVxuICB9IGVsc2Uge1xuICAgIGNhbGxiYWNrKClcbiAgfVxufVxuXG5jb25zdCBpc1JUTCA9ICgpID0+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5kaXIgPT09ICdydGwnXG5cbmNvbnN0IGRlZmluZUpRdWVyeVBsdWdpbiA9IHBsdWdpbiA9PiB7XG4gIG9uRE9NQ29udGVudExvYWRlZCgoKSA9PiB7XG4gICAgY29uc3QgJCA9IGdldGpRdWVyeSgpXG4gICAgLyogaXN0YW5idWwgaWdub3JlIGlmICovXG4gICAgaWYgKCQpIHtcbiAgICAgIGNvbnN0IG5hbWUgPSBwbHVnaW4uTkFNRVxuICAgICAgY29uc3QgSlFVRVJZX05PX0NPTkZMSUNUID0gJC5mbltuYW1lXVxuICAgICAgJC5mbltuYW1lXSA9IHBsdWdpbi5qUXVlcnlJbnRlcmZhY2VcbiAgICAgICQuZm5bbmFtZV0uQ29uc3RydWN0b3IgPSBwbHVnaW5cbiAgICAgICQuZm5bbmFtZV0ubm9Db25mbGljdCA9ICgpID0+IHtcbiAgICAgICAgJC5mbltuYW1lXSA9IEpRVUVSWV9OT19DT05GTElDVFxuICAgICAgICByZXR1cm4gcGx1Z2luLmpRdWVyeUludGVyZmFjZVxuICAgICAgfVxuICAgIH1cbiAgfSlcbn1cblxuY29uc3QgZXhlY3V0ZSA9IGNhbGxiYWNrID0+IHtcbiAgaWYgKHR5cGVvZiBjYWxsYmFjayA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIGNhbGxiYWNrKClcbiAgfVxufVxuXG5jb25zdCBleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uID0gKGNhbGxiYWNrLCB0cmFuc2l0aW9uRWxlbWVudCwgd2FpdEZvclRyYW5zaXRpb24gPSB0cnVlKSA9PiB7XG4gIGlmICghd2FpdEZvclRyYW5zaXRpb24pIHtcbiAgICBleGVjdXRlKGNhbGxiYWNrKVxuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgZHVyYXRpb25QYWRkaW5nID0gNVxuICBjb25zdCBlbXVsYXRlZER1cmF0aW9uID0gZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQodHJhbnNpdGlvbkVsZW1lbnQpICsgZHVyYXRpb25QYWRkaW5nXG5cbiAgbGV0IGNhbGxlZCA9IGZhbHNlXG5cbiAgY29uc3QgaGFuZGxlciA9ICh7IHRhcmdldCB9KSA9PiB7XG4gICAgaWYgKHRhcmdldCAhPT0gdHJhbnNpdGlvbkVsZW1lbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNhbGxlZCA9IHRydWVcbiAgICB0cmFuc2l0aW9uRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFRSQU5TSVRJT05fRU5ELCBoYW5kbGVyKVxuICAgIGV4ZWN1dGUoY2FsbGJhY2spXG4gIH1cblxuICB0cmFuc2l0aW9uRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFRSQU5TSVRJT05fRU5ELCBoYW5kbGVyKVxuICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICBpZiAoIWNhbGxlZCkge1xuICAgICAgdHJpZ2dlclRyYW5zaXRpb25FbmQodHJhbnNpdGlvbkVsZW1lbnQpXG4gICAgfVxuICB9LCBlbXVsYXRlZER1cmF0aW9uKVxufVxuXG4vKipcbiAqIFJldHVybiB0aGUgcHJldmlvdXMvbmV4dCBlbGVtZW50IG9mIGEgbGlzdC5cbiAqXG4gKiBAcGFyYW0ge2FycmF5fSBsaXN0ICAgIFRoZSBsaXN0IG9mIGVsZW1lbnRzXG4gKiBAcGFyYW0gYWN0aXZlRWxlbWVudCAgIFRoZSBhY3RpdmUgZWxlbWVudFxuICogQHBhcmFtIHNob3VsZEdldE5leHQgICBDaG9vc2UgdG8gZ2V0IG5leHQgb3IgcHJldmlvdXMgZWxlbWVudFxuICogQHBhcmFtIGlzQ3ljbGVBbGxvd2VkXG4gKiBAcmV0dXJuIHtFbGVtZW50fGVsZW19IFRoZSBwcm9wZXIgZWxlbWVudFxuICovXG5jb25zdCBnZXROZXh0QWN0aXZlRWxlbWVudCA9IChsaXN0LCBhY3RpdmVFbGVtZW50LCBzaG91bGRHZXROZXh0LCBpc0N5Y2xlQWxsb3dlZCkgPT4ge1xuICBsZXQgaW5kZXggPSBsaXN0LmluZGV4T2YoYWN0aXZlRWxlbWVudClcblxuICAvLyBpZiB0aGUgZWxlbWVudCBkb2VzIG5vdCBleGlzdCBpbiB0aGUgbGlzdCByZXR1cm4gYW4gZWxlbWVudCBkZXBlbmRpbmcgb24gdGhlIGRpcmVjdGlvbiBhbmQgaWYgY3ljbGUgaXMgYWxsb3dlZFxuICBpZiAoaW5kZXggPT09IC0xKSB7XG4gICAgcmV0dXJuIGxpc3RbIXNob3VsZEdldE5leHQgJiYgaXNDeWNsZUFsbG93ZWQgPyBsaXN0Lmxlbmd0aCAtIDEgOiAwXVxuICB9XG5cbiAgY29uc3QgbGlzdExlbmd0aCA9IGxpc3QubGVuZ3RoXG5cbiAgaW5kZXggKz0gc2hvdWxkR2V0TmV4dCA/IDEgOiAtMVxuXG4gIGlmIChpc0N5Y2xlQWxsb3dlZCkge1xuICAgIGluZGV4ID0gKGluZGV4ICsgbGlzdExlbmd0aCkgJSBsaXN0TGVuZ3RoXG4gIH1cblxuICByZXR1cm4gbGlzdFtNYXRoLm1heCgwLCBNYXRoLm1pbihpbmRleCwgbGlzdExlbmd0aCAtIDEpKV1cbn1cblxuZXhwb3J0IHtcbiAgZ2V0RWxlbWVudCxcbiAgZ2V0VUlELFxuICBnZXRTZWxlY3RvckZyb21FbGVtZW50LFxuICBnZXRFbGVtZW50RnJvbVNlbGVjdG9yLFxuICBnZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCxcbiAgdHJpZ2dlclRyYW5zaXRpb25FbmQsXG4gIGlzRWxlbWVudCxcbiAgdHlwZUNoZWNrQ29uZmlnLFxuICBpc1Zpc2libGUsXG4gIGlzRGlzYWJsZWQsXG4gIGZpbmRTaGFkb3dSb290LFxuICBub29wLFxuICBnZXROZXh0QWN0aXZlRWxlbWVudCxcbiAgcmVmbG93LFxuICBnZXRqUXVlcnksXG4gIG9uRE9NQ29udGVudExvYWRlZCxcbiAgaXNSVEwsXG4gIGRlZmluZUpRdWVyeVBsdWdpbixcbiAgZXhlY3V0ZSxcbiAgZXhlY3V0ZUFmdGVyVHJhbnNpdGlvblxufVxuIiwiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4xLjApOiBkb20vZXZlbnQtaGFuZGxlci5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCB7IGdldGpRdWVyeSB9IGZyb20gJy4uL3V0aWwvaW5kZXgnXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDb25zdGFudHNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IG5hbWVzcGFjZVJlZ2V4ID0gL1teLl0qKD89XFwuLiopXFwufC4qL1xuY29uc3Qgc3RyaXBOYW1lUmVnZXggPSAvXFwuLiovXG5jb25zdCBzdHJpcFVpZFJlZ2V4ID0gLzo6XFxkKyQvXG5jb25zdCBldmVudFJlZ2lzdHJ5ID0ge30gLy8gRXZlbnRzIHN0b3JhZ2VcbmxldCB1aWRFdmVudCA9IDFcbmNvbnN0IGN1c3RvbUV2ZW50cyA9IHtcbiAgbW91c2VlbnRlcjogJ21vdXNlb3ZlcicsXG4gIG1vdXNlbGVhdmU6ICdtb3VzZW91dCdcbn1cbmNvbnN0IGN1c3RvbUV2ZW50c1JlZ2V4ID0gL14obW91c2VlbnRlcnxtb3VzZWxlYXZlKS9pXG5jb25zdCBuYXRpdmVFdmVudHMgPSBuZXcgU2V0KFtcbiAgJ2NsaWNrJyxcbiAgJ2RibGNsaWNrJyxcbiAgJ21vdXNldXAnLFxuICAnbW91c2Vkb3duJyxcbiAgJ2NvbnRleHRtZW51JyxcbiAgJ21vdXNld2hlZWwnLFxuICAnRE9NTW91c2VTY3JvbGwnLFxuICAnbW91c2VvdmVyJyxcbiAgJ21vdXNlb3V0JyxcbiAgJ21vdXNlbW92ZScsXG4gICdzZWxlY3RzdGFydCcsXG4gICdzZWxlY3RlbmQnLFxuICAna2V5ZG93bicsXG4gICdrZXlwcmVzcycsXG4gICdrZXl1cCcsXG4gICdvcmllbnRhdGlvbmNoYW5nZScsXG4gICd0b3VjaHN0YXJ0JyxcbiAgJ3RvdWNobW92ZScsXG4gICd0b3VjaGVuZCcsXG4gICd0b3VjaGNhbmNlbCcsXG4gICdwb2ludGVyZG93bicsXG4gICdwb2ludGVybW92ZScsXG4gICdwb2ludGVydXAnLFxuICAncG9pbnRlcmxlYXZlJyxcbiAgJ3BvaW50ZXJjYW5jZWwnLFxuICAnZ2VzdHVyZXN0YXJ0JyxcbiAgJ2dlc3R1cmVjaGFuZ2UnLFxuICAnZ2VzdHVyZWVuZCcsXG4gICdmb2N1cycsXG4gICdibHVyJyxcbiAgJ2NoYW5nZScsXG4gICdyZXNldCcsXG4gICdzZWxlY3QnLFxuICAnc3VibWl0JyxcbiAgJ2ZvY3VzaW4nLFxuICAnZm9jdXNvdXQnLFxuICAnbG9hZCcsXG4gICd1bmxvYWQnLFxuICAnYmVmb3JldW5sb2FkJyxcbiAgJ3Jlc2l6ZScsXG4gICdtb3ZlJyxcbiAgJ0RPTUNvbnRlbnRMb2FkZWQnLFxuICAncmVhZHlzdGF0ZWNoYW5nZScsXG4gICdlcnJvcicsXG4gICdhYm9ydCcsXG4gICdzY3JvbGwnXG5dKVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogUHJpdmF0ZSBtZXRob2RzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5mdW5jdGlvbiBnZXRVaWRFdmVudChlbGVtZW50LCB1aWQpIHtcbiAgcmV0dXJuICh1aWQgJiYgYCR7dWlkfTo6JHt1aWRFdmVudCsrfWApIHx8IGVsZW1lbnQudWlkRXZlbnQgfHwgdWlkRXZlbnQrK1xufVxuXG5mdW5jdGlvbiBnZXRFdmVudChlbGVtZW50KSB7XG4gIGNvbnN0IHVpZCA9IGdldFVpZEV2ZW50KGVsZW1lbnQpXG5cbiAgZWxlbWVudC51aWRFdmVudCA9IHVpZFxuICBldmVudFJlZ2lzdHJ5W3VpZF0gPSBldmVudFJlZ2lzdHJ5W3VpZF0gfHwge31cblxuICByZXR1cm4gZXZlbnRSZWdpc3RyeVt1aWRdXG59XG5cbmZ1bmN0aW9uIGJvb3RzdHJhcEhhbmRsZXIoZWxlbWVudCwgZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHtcbiAgICBldmVudC5kZWxlZ2F0ZVRhcmdldCA9IGVsZW1lbnRcblxuICAgIGlmIChoYW5kbGVyLm9uZU9mZikge1xuICAgICAgRXZlbnRIYW5kbGVyLm9mZihlbGVtZW50LCBldmVudC50eXBlLCBmbilcbiAgICB9XG5cbiAgICByZXR1cm4gZm4uYXBwbHkoZWxlbWVudCwgW2V2ZW50XSlcbiAgfVxufVxuXG5mdW5jdGlvbiBib290c3RyYXBEZWxlZ2F0aW9uSGFuZGxlcihlbGVtZW50LCBzZWxlY3RvciwgZm4pIHtcbiAgcmV0dXJuIGZ1bmN0aW9uIGhhbmRsZXIoZXZlbnQpIHtcbiAgICBjb25zdCBkb21FbGVtZW50cyA9IGVsZW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcilcblxuICAgIGZvciAobGV0IHsgdGFyZ2V0IH0gPSBldmVudDsgdGFyZ2V0ICYmIHRhcmdldCAhPT0gdGhpczsgdGFyZ2V0ID0gdGFyZ2V0LnBhcmVudE5vZGUpIHtcbiAgICAgIGZvciAobGV0IGkgPSBkb21FbGVtZW50cy5sZW5ndGg7IGktLTspIHtcbiAgICAgICAgaWYgKGRvbUVsZW1lbnRzW2ldID09PSB0YXJnZXQpIHtcbiAgICAgICAgICBldmVudC5kZWxlZ2F0ZVRhcmdldCA9IHRhcmdldFxuXG4gICAgICAgICAgaWYgKGhhbmRsZXIub25lT2ZmKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9jb25zaXN0ZW50LWRlc3RydWN0dXJpbmdcbiAgICAgICAgICAgIEV2ZW50SGFuZGxlci5vZmYoZWxlbWVudCwgZXZlbnQudHlwZSwgc2VsZWN0b3IsIGZuKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmbi5hcHBseSh0YXJnZXQsIFtldmVudF0pXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUbyBwbGVhc2UgRVNMaW50XG4gICAgcmV0dXJuIG51bGxcbiAgfVxufVxuXG5mdW5jdGlvbiBmaW5kSGFuZGxlcihldmVudHMsIGhhbmRsZXIsIGRlbGVnYXRpb25TZWxlY3RvciA9IG51bGwpIHtcbiAgY29uc3QgdWlkRXZlbnRMaXN0ID0gT2JqZWN0LmtleXMoZXZlbnRzKVxuXG4gIGZvciAobGV0IGkgPSAwLCBsZW4gPSB1aWRFdmVudExpc3QubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBjb25zdCBldmVudCA9IGV2ZW50c1t1aWRFdmVudExpc3RbaV1dXG5cbiAgICBpZiAoZXZlbnQub3JpZ2luYWxIYW5kbGVyID09PSBoYW5kbGVyICYmIGV2ZW50LmRlbGVnYXRpb25TZWxlY3RvciA9PT0gZGVsZWdhdGlvblNlbGVjdG9yKSB7XG4gICAgICByZXR1cm4gZXZlbnRcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVQYXJhbXMob3JpZ2luYWxUeXBlRXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25Gbikge1xuICBjb25zdCBkZWxlZ2F0aW9uID0gdHlwZW9mIGhhbmRsZXIgPT09ICdzdHJpbmcnXG4gIGNvbnN0IG9yaWdpbmFsSGFuZGxlciA9IGRlbGVnYXRpb24gPyBkZWxlZ2F0aW9uRm4gOiBoYW5kbGVyXG5cbiAgbGV0IHR5cGVFdmVudCA9IGdldFR5cGVFdmVudChvcmlnaW5hbFR5cGVFdmVudClcbiAgY29uc3QgaXNOYXRpdmUgPSBuYXRpdmVFdmVudHMuaGFzKHR5cGVFdmVudClcblxuICBpZiAoIWlzTmF0aXZlKSB7XG4gICAgdHlwZUV2ZW50ID0gb3JpZ2luYWxUeXBlRXZlbnRcbiAgfVxuXG4gIHJldHVybiBbZGVsZWdhdGlvbiwgb3JpZ2luYWxIYW5kbGVyLCB0eXBlRXZlbnRdXG59XG5cbmZ1bmN0aW9uIGFkZEhhbmRsZXIoZWxlbWVudCwgb3JpZ2luYWxUeXBlRXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25Gbiwgb25lT2ZmKSB7XG4gIGlmICh0eXBlb2Ygb3JpZ2luYWxUeXBlRXZlbnQgIT09ICdzdHJpbmcnIHx8ICFlbGVtZW50KSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBpZiAoIWhhbmRsZXIpIHtcbiAgICBoYW5kbGVyID0gZGVsZWdhdGlvbkZuXG4gICAgZGVsZWdhdGlvbkZuID0gbnVsbFxuICB9XG5cbiAgLy8gaW4gY2FzZSBvZiBtb3VzZWVudGVyIG9yIG1vdXNlbGVhdmUgd3JhcCB0aGUgaGFuZGxlciB3aXRoaW4gYSBmdW5jdGlvbiB0aGF0IGNoZWNrcyBmb3IgaXRzIERPTSBwb3NpdGlvblxuICAvLyB0aGlzIHByZXZlbnRzIHRoZSBoYW5kbGVyIGZyb20gYmVpbmcgZGlzcGF0Y2hlZCB0aGUgc2FtZSB3YXkgYXMgbW91c2VvdmVyIG9yIG1vdXNlb3V0IGRvZXNcbiAgaWYgKGN1c3RvbUV2ZW50c1JlZ2V4LnRlc3Qob3JpZ2luYWxUeXBlRXZlbnQpKSB7XG4gICAgY29uc3Qgd3JhcEZuID0gZm4gPT4ge1xuICAgICAgcmV0dXJuIGZ1bmN0aW9uIChldmVudCkge1xuICAgICAgICBpZiAoIWV2ZW50LnJlbGF0ZWRUYXJnZXQgfHwgKGV2ZW50LnJlbGF0ZWRUYXJnZXQgIT09IGV2ZW50LmRlbGVnYXRlVGFyZ2V0ICYmICFldmVudC5kZWxlZ2F0ZVRhcmdldC5jb250YWlucyhldmVudC5yZWxhdGVkVGFyZ2V0KSkpIHtcbiAgICAgICAgICByZXR1cm4gZm4uY2FsbCh0aGlzLCBldmVudClcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChkZWxlZ2F0aW9uRm4pIHtcbiAgICAgIGRlbGVnYXRpb25GbiA9IHdyYXBGbihkZWxlZ2F0aW9uRm4pXG4gICAgfSBlbHNlIHtcbiAgICAgIGhhbmRsZXIgPSB3cmFwRm4oaGFuZGxlcilcbiAgICB9XG4gIH1cblxuICBjb25zdCBbZGVsZWdhdGlvbiwgb3JpZ2luYWxIYW5kbGVyLCB0eXBlRXZlbnRdID0gbm9ybWFsaXplUGFyYW1zKG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRm4pXG4gIGNvbnN0IGV2ZW50cyA9IGdldEV2ZW50KGVsZW1lbnQpXG4gIGNvbnN0IGhhbmRsZXJzID0gZXZlbnRzW3R5cGVFdmVudF0gfHwgKGV2ZW50c1t0eXBlRXZlbnRdID0ge30pXG4gIGNvbnN0IHByZXZpb3VzRm4gPSBmaW5kSGFuZGxlcihoYW5kbGVycywgb3JpZ2luYWxIYW5kbGVyLCBkZWxlZ2F0aW9uID8gaGFuZGxlciA6IG51bGwpXG5cbiAgaWYgKHByZXZpb3VzRm4pIHtcbiAgICBwcmV2aW91c0ZuLm9uZU9mZiA9IHByZXZpb3VzRm4ub25lT2ZmICYmIG9uZU9mZlxuXG4gICAgcmV0dXJuXG4gIH1cblxuICBjb25zdCB1aWQgPSBnZXRVaWRFdmVudChvcmlnaW5hbEhhbmRsZXIsIG9yaWdpbmFsVHlwZUV2ZW50LnJlcGxhY2UobmFtZXNwYWNlUmVnZXgsICcnKSlcbiAgY29uc3QgZm4gPSBkZWxlZ2F0aW9uID9cbiAgICBib290c3RyYXBEZWxlZ2F0aW9uSGFuZGxlcihlbGVtZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRm4pIDpcbiAgICBib290c3RyYXBIYW5kbGVyKGVsZW1lbnQsIGhhbmRsZXIpXG5cbiAgZm4uZGVsZWdhdGlvblNlbGVjdG9yID0gZGVsZWdhdGlvbiA/IGhhbmRsZXIgOiBudWxsXG4gIGZuLm9yaWdpbmFsSGFuZGxlciA9IG9yaWdpbmFsSGFuZGxlclxuICBmbi5vbmVPZmYgPSBvbmVPZmZcbiAgZm4udWlkRXZlbnQgPSB1aWRcbiAgaGFuZGxlcnNbdWlkXSA9IGZuXG5cbiAgZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHR5cGVFdmVudCwgZm4sIGRlbGVnYXRpb24pXG59XG5cbmZ1bmN0aW9uIHJlbW92ZUhhbmRsZXIoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25TZWxlY3Rvcikge1xuICBjb25zdCBmbiA9IGZpbmRIYW5kbGVyKGV2ZW50c1t0eXBlRXZlbnRdLCBoYW5kbGVyLCBkZWxlZ2F0aW9uU2VsZWN0b3IpXG5cbiAgaWYgKCFmbikge1xuICAgIHJldHVyblxuICB9XG5cbiAgZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKHR5cGVFdmVudCwgZm4sIEJvb2xlYW4oZGVsZWdhdGlvblNlbGVjdG9yKSlcbiAgZGVsZXRlIGV2ZW50c1t0eXBlRXZlbnRdW2ZuLnVpZEV2ZW50XVxufVxuXG5mdW5jdGlvbiByZW1vdmVOYW1lc3BhY2VkSGFuZGxlcnMoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIG5hbWVzcGFjZSkge1xuICBjb25zdCBzdG9yZUVsZW1lbnRFdmVudCA9IGV2ZW50c1t0eXBlRXZlbnRdIHx8IHt9XG5cbiAgT2JqZWN0LmtleXMoc3RvcmVFbGVtZW50RXZlbnQpLmZvckVhY2goaGFuZGxlcktleSA9PiB7XG4gICAgaWYgKGhhbmRsZXJLZXkuaW5jbHVkZXMobmFtZXNwYWNlKSkge1xuICAgICAgY29uc3QgZXZlbnQgPSBzdG9yZUVsZW1lbnRFdmVudFtoYW5kbGVyS2V5XVxuXG4gICAgICByZW1vdmVIYW5kbGVyKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBldmVudC5vcmlnaW5hbEhhbmRsZXIsIGV2ZW50LmRlbGVnYXRpb25TZWxlY3RvcilcbiAgICB9XG4gIH0pXG59XG5cbmZ1bmN0aW9uIGdldFR5cGVFdmVudChldmVudCkge1xuICAvLyBhbGxvdyB0byBnZXQgdGhlIG5hdGl2ZSBldmVudHMgZnJvbSBuYW1lc3BhY2VkIGV2ZW50cyAoJ2NsaWNrLmJzLmJ1dHRvbicgLS0+ICdjbGljaycpXG4gIGV2ZW50ID0gZXZlbnQucmVwbGFjZShzdHJpcE5hbWVSZWdleCwgJycpXG4gIHJldHVybiBjdXN0b21FdmVudHNbZXZlbnRdIHx8IGV2ZW50XG59XG5cbmNvbnN0IEV2ZW50SGFuZGxlciA9IHtcbiAgb24oZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25Gbikge1xuICAgIGFkZEhhbmRsZXIoZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GbiwgZmFsc2UpXG4gIH0sXG5cbiAgb25lKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRm4pIHtcbiAgICBhZGRIYW5kbGVyKGVsZW1lbnQsIGV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRm4sIHRydWUpXG4gIH0sXG5cbiAgb2ZmKGVsZW1lbnQsIG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRm4pIHtcbiAgICBpZiAodHlwZW9mIG9yaWdpbmFsVHlwZUV2ZW50ICE9PSAnc3RyaW5nJyB8fCAhZWxlbWVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgW2RlbGVnYXRpb24sIG9yaWdpbmFsSGFuZGxlciwgdHlwZUV2ZW50XSA9IG5vcm1hbGl6ZVBhcmFtcyhvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZuKVxuICAgIGNvbnN0IGluTmFtZXNwYWNlID0gdHlwZUV2ZW50ICE9PSBvcmlnaW5hbFR5cGVFdmVudFxuICAgIGNvbnN0IGV2ZW50cyA9IGdldEV2ZW50KGVsZW1lbnQpXG4gICAgY29uc3QgaXNOYW1lc3BhY2UgPSBvcmlnaW5hbFR5cGVFdmVudC5zdGFydHNXaXRoKCcuJylcblxuICAgIGlmICh0eXBlb2Ygb3JpZ2luYWxIYW5kbGVyICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgLy8gU2ltcGxlc3QgY2FzZTogaGFuZGxlciBpcyBwYXNzZWQsIHJlbW92ZSB0aGF0IGxpc3RlbmVyIE9OTFkuXG4gICAgICBpZiAoIWV2ZW50cyB8fCAhZXZlbnRzW3R5cGVFdmVudF0pIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHJlbW92ZUhhbmRsZXIoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIG9yaWdpbmFsSGFuZGxlciwgZGVsZWdhdGlvbiA/IGhhbmRsZXIgOiBudWxsKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGlzTmFtZXNwYWNlKSB7XG4gICAgICBPYmplY3Qua2V5cyhldmVudHMpLmZvckVhY2goZWxlbWVudEV2ZW50ID0+IHtcbiAgICAgICAgcmVtb3ZlTmFtZXNwYWNlZEhhbmRsZXJzKGVsZW1lbnQsIGV2ZW50cywgZWxlbWVudEV2ZW50LCBvcmlnaW5hbFR5cGVFdmVudC5zbGljZSgxKSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgY29uc3Qgc3RvcmVFbGVtZW50RXZlbnQgPSBldmVudHNbdHlwZUV2ZW50XSB8fCB7fVxuICAgIE9iamVjdC5rZXlzKHN0b3JlRWxlbWVudEV2ZW50KS5mb3JFYWNoKGtleUhhbmRsZXJzID0+IHtcbiAgICAgIGNvbnN0IGhhbmRsZXJLZXkgPSBrZXlIYW5kbGVycy5yZXBsYWNlKHN0cmlwVWlkUmVnZXgsICcnKVxuXG4gICAgICBpZiAoIWluTmFtZXNwYWNlIHx8IG9yaWdpbmFsVHlwZUV2ZW50LmluY2x1ZGVzKGhhbmRsZXJLZXkpKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0gc3RvcmVFbGVtZW50RXZlbnRba2V5SGFuZGxlcnNdXG5cbiAgICAgICAgcmVtb3ZlSGFuZGxlcihlbGVtZW50LCBldmVudHMsIHR5cGVFdmVudCwgZXZlbnQub3JpZ2luYWxIYW5kbGVyLCBldmVudC5kZWxlZ2F0aW9uU2VsZWN0b3IpXG4gICAgICB9XG4gICAgfSlcbiAgfSxcblxuICB0cmlnZ2VyKGVsZW1lbnQsIGV2ZW50LCBhcmdzKSB7XG4gICAgaWYgKHR5cGVvZiBldmVudCAhPT0gJ3N0cmluZycgfHwgIWVsZW1lbnQpIHtcbiAgICAgIHJldHVybiBudWxsXG4gICAgfVxuXG4gICAgY29uc3QgJCA9IGdldGpRdWVyeSgpXG4gICAgY29uc3QgdHlwZUV2ZW50ID0gZ2V0VHlwZUV2ZW50KGV2ZW50KVxuICAgIGNvbnN0IGluTmFtZXNwYWNlID0gZXZlbnQgIT09IHR5cGVFdmVudFxuICAgIGNvbnN0IGlzTmF0aXZlID0gbmF0aXZlRXZlbnRzLmhhcyh0eXBlRXZlbnQpXG5cbiAgICBsZXQgalF1ZXJ5RXZlbnRcbiAgICBsZXQgYnViYmxlcyA9IHRydWVcbiAgICBsZXQgbmF0aXZlRGlzcGF0Y2ggPSB0cnVlXG4gICAgbGV0IGRlZmF1bHRQcmV2ZW50ZWQgPSBmYWxzZVxuICAgIGxldCBldnQgPSBudWxsXG5cbiAgICBpZiAoaW5OYW1lc3BhY2UgJiYgJCkge1xuICAgICAgalF1ZXJ5RXZlbnQgPSAkLkV2ZW50KGV2ZW50LCBhcmdzKVxuXG4gICAgICAkKGVsZW1lbnQpLnRyaWdnZXIoalF1ZXJ5RXZlbnQpXG4gICAgICBidWJibGVzID0gIWpRdWVyeUV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKClcbiAgICAgIG5hdGl2ZURpc3BhdGNoID0gIWpRdWVyeUV2ZW50LmlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkKClcbiAgICAgIGRlZmF1bHRQcmV2ZW50ZWQgPSBqUXVlcnlFdmVudC5pc0RlZmF1bHRQcmV2ZW50ZWQoKVxuICAgIH1cblxuICAgIGlmIChpc05hdGl2ZSkge1xuICAgICAgZXZ0ID0gZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ0hUTUxFdmVudHMnKVxuICAgICAgZXZ0LmluaXRFdmVudCh0eXBlRXZlbnQsIGJ1YmJsZXMsIHRydWUpXG4gICAgfSBlbHNlIHtcbiAgICAgIGV2dCA9IG5ldyBDdXN0b21FdmVudChldmVudCwge1xuICAgICAgICBidWJibGVzLFxuICAgICAgICBjYW5jZWxhYmxlOiB0cnVlXG4gICAgICB9KVxuICAgIH1cblxuICAgIC8vIG1lcmdlIGN1c3RvbSBpbmZvcm1hdGlvbiBpbiBvdXIgZXZlbnRcbiAgICBpZiAodHlwZW9mIGFyZ3MgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBPYmplY3Qua2V5cyhhcmdzKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShldnQsIGtleSwge1xuICAgICAgICAgIGdldCgpIHtcbiAgICAgICAgICAgIHJldHVybiBhcmdzW2tleV1cbiAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmIChkZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICBldnQucHJldmVudERlZmF1bHQoKVxuICAgIH1cblxuICAgIGlmIChuYXRpdmVEaXNwYXRjaCkge1xuICAgICAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KGV2dClcbiAgICB9XG5cbiAgICBpZiAoZXZ0LmRlZmF1bHRQcmV2ZW50ZWQgJiYgdHlwZW9mIGpRdWVyeUV2ZW50ICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgalF1ZXJ5RXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgIH1cblxuICAgIHJldHVybiBldnRcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBFdmVudEhhbmRsZXJcbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMS4wKTogZG9tL2RhdGEuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ29uc3RhbnRzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCBlbGVtZW50TWFwID0gbmV3IE1hcCgpXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgc2V0KGVsZW1lbnQsIGtleSwgaW5zdGFuY2UpIHtcbiAgICBpZiAoIWVsZW1lbnRNYXAuaGFzKGVsZW1lbnQpKSB7XG4gICAgICBlbGVtZW50TWFwLnNldChlbGVtZW50LCBuZXcgTWFwKCkpXG4gICAgfVxuXG4gICAgY29uc3QgaW5zdGFuY2VNYXAgPSBlbGVtZW50TWFwLmdldChlbGVtZW50KVxuXG4gICAgLy8gbWFrZSBpdCBjbGVhciB3ZSBvbmx5IHdhbnQgb25lIGluc3RhbmNlIHBlciBlbGVtZW50XG4gICAgLy8gY2FuIGJlIHJlbW92ZWQgbGF0ZXIgd2hlbiBtdWx0aXBsZSBrZXkvaW5zdGFuY2VzIGFyZSBmaW5lIHRvIGJlIHVzZWRcbiAgICBpZiAoIWluc3RhbmNlTWFwLmhhcyhrZXkpICYmIGluc3RhbmNlTWFwLnNpemUgIT09IDApIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmVycm9yKGBCb290c3RyYXAgZG9lc24ndCBhbGxvdyBtb3JlIHRoYW4gb25lIGluc3RhbmNlIHBlciBlbGVtZW50LiBCb3VuZCBpbnN0YW5jZTogJHtBcnJheS5mcm9tKGluc3RhbmNlTWFwLmtleXMoKSlbMF19LmApXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpbnN0YW5jZU1hcC5zZXQoa2V5LCBpbnN0YW5jZSlcbiAgfSxcblxuICBnZXQoZWxlbWVudCwga2V5KSB7XG4gICAgaWYgKGVsZW1lbnRNYXAuaGFzKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm4gZWxlbWVudE1hcC5nZXQoZWxlbWVudCkuZ2V0KGtleSkgfHwgbnVsbFxuICAgIH1cblxuICAgIHJldHVybiBudWxsXG4gIH0sXG5cbiAgcmVtb3ZlKGVsZW1lbnQsIGtleSkge1xuICAgIGlmICghZWxlbWVudE1hcC5oYXMoZWxlbWVudCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGluc3RhbmNlTWFwID0gZWxlbWVudE1hcC5nZXQoZWxlbWVudClcblxuICAgIGluc3RhbmNlTWFwLmRlbGV0ZShrZXkpXG5cbiAgICAvLyBmcmVlIHVwIGVsZW1lbnQgcmVmZXJlbmNlcyBpZiB0aGVyZSBhcmUgbm8gaW5zdGFuY2VzIGxlZnQgZm9yIGFuIGVsZW1lbnRcbiAgICBpZiAoaW5zdGFuY2VNYXAuc2l6ZSA9PT0gMCkge1xuICAgICAgZWxlbWVudE1hcC5kZWxldGUoZWxlbWVudClcbiAgICB9XG4gIH1cbn1cbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMS4wKTogYmFzZS1jb21wb25lbnQuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgRGF0YSBmcm9tICcuL2RvbS9kYXRhJ1xuaW1wb3J0IHtcbiAgZXhlY3V0ZUFmdGVyVHJhbnNpdGlvbixcbiAgZ2V0RWxlbWVudFxufSBmcm9tICcuL3V0aWwvaW5kZXgnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXInXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDb25zdGFudHNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IFZFUlNJT04gPSAnNS4xLjAnXG5cbmNsYXNzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50KSB7XG4gICAgZWxlbWVudCA9IGdldEVsZW1lbnQoZWxlbWVudClcblxuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudCA9IGVsZW1lbnRcbiAgICBEYXRhLnNldCh0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZLCB0aGlzKVxuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICBEYXRhLnJlbW92ZSh0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZKVxuICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5FVkVOVF9LRVkpXG5cbiAgICBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0aGlzKS5mb3JFYWNoKHByb3BlcnR5TmFtZSA9PiB7XG4gICAgICB0aGlzW3Byb3BlcnR5TmFtZV0gPSBudWxsXG4gICAgfSlcbiAgfVxuXG4gIF9xdWV1ZUNhbGxiYWNrKGNhbGxiYWNrLCBlbGVtZW50LCBpc0FuaW1hdGVkID0gdHJ1ZSkge1xuICAgIGV4ZWN1dGVBZnRlclRyYW5zaXRpb24oY2FsbGJhY2ssIGVsZW1lbnQsIGlzQW5pbWF0ZWQpXG4gIH1cblxuICAvKiogU3RhdGljICovXG5cbiAgc3RhdGljIGdldEluc3RhbmNlKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gRGF0YS5nZXQoZ2V0RWxlbWVudChlbGVtZW50KSwgdGhpcy5EQVRBX0tFWSlcbiAgfVxuXG4gIHN0YXRpYyBnZXRPckNyZWF0ZUluc3RhbmNlKGVsZW1lbnQsIGNvbmZpZyA9IHt9KSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0SW5zdGFuY2UoZWxlbWVudCkgfHwgbmV3IHRoaXMoZWxlbWVudCwgdHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiBudWxsKVxuICB9XG5cbiAgc3RhdGljIGdldCBWRVJTSU9OKCkge1xuICAgIHJldHVybiBWRVJTSU9OXG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdZb3UgaGF2ZSB0byBpbXBsZW1lbnQgdGhlIHN0YXRpYyBtZXRob2QgXCJOQU1FXCIsIGZvciBlYWNoIGNvbXBvbmVudCEnKVxuICB9XG5cbiAgc3RhdGljIGdldCBEQVRBX0tFWSgpIHtcbiAgICByZXR1cm4gYGJzLiR7dGhpcy5OQU1FfWBcbiAgfVxuXG4gIHN0YXRpYyBnZXQgRVZFTlRfS0VZKCkge1xuICAgIHJldHVybiBgLiR7dGhpcy5EQVRBX0tFWX1gXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQmFzZUNvbXBvbmVudFxuIiwiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4xLjApOiB1dGlsL2NvbXBvbmVudC1mdW5jdGlvbnMuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4uL2RvbS9ldmVudC1oYW5kbGVyJ1xuaW1wb3J0IHsgZ2V0RWxlbWVudEZyb21TZWxlY3RvciwgaXNEaXNhYmxlZCB9IGZyb20gJy4vaW5kZXgnXG5cbmNvbnN0IGVuYWJsZURpc21pc3NUcmlnZ2VyID0gKGNvbXBvbmVudCwgbWV0aG9kID0gJ2hpZGUnKSA9PiB7XG4gIGNvbnN0IGNsaWNrRXZlbnQgPSBgY2xpY2suZGlzbWlzcyR7Y29tcG9uZW50LkVWRU5UX0tFWX1gXG4gIGNvbnN0IG5hbWUgPSBjb21wb25lbnQuTkFNRVxuXG4gIEV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgY2xpY2tFdmVudCwgYFtkYXRhLWJzLWRpc21pc3M9XCIke25hbWV9XCJdYCwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgaWYgKFsnQScsICdBUkVBJ10uaW5jbHVkZXModGhpcy50YWdOYW1lKSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgIH1cblxuICAgIGlmIChpc0Rpc2FibGVkKHRoaXMpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCB0YXJnZXQgPSBnZXRFbGVtZW50RnJvbVNlbGVjdG9yKHRoaXMpIHx8IHRoaXMuY2xvc2VzdChgLiR7bmFtZX1gKVxuICAgIGNvbnN0IGluc3RhbmNlID0gY29tcG9uZW50LmdldE9yQ3JlYXRlSW5zdGFuY2UodGFyZ2V0KVxuXG4gICAgLy8gTWV0aG9kIGFyZ3VtZW50IGlzIGxlZnQsIGZvciBBbGVydCBhbmQgb25seSwgYXMgaXQgZG9lc24ndCBpbXBsZW1lbnQgdGhlICdoaWRlJyBtZXRob2RcbiAgICBpbnN0YW5jZVttZXRob2RdKClcbiAgfSlcbn1cblxuZXhwb3J0IHtcbiAgZW5hYmxlRGlzbWlzc1RyaWdnZXJcbn1cbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMS4wKTogYWxlcnQuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgeyBkZWZpbmVKUXVlcnlQbHVnaW4gfSBmcm9tICcuL3V0aWwvaW5kZXgnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tICcuL2Jhc2UtY29tcG9uZW50J1xuaW1wb3J0IHsgZW5hYmxlRGlzbWlzc1RyaWdnZXIgfSBmcm9tICcuL3V0aWwvY29tcG9uZW50LWZ1bmN0aW9ucydcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvbnN0YW50c1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgTkFNRSA9ICdhbGVydCdcbmNvbnN0IERBVEFfS0VZID0gJ2JzLmFsZXJ0J1xuY29uc3QgRVZFTlRfS0VZID0gYC4ke0RBVEFfS0VZfWBcblxuY29uc3QgRVZFTlRfQ0xPU0UgPSBgY2xvc2Uke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9DTE9TRUQgPSBgY2xvc2VkJHtFVkVOVF9LRVl9YFxuY29uc3QgQ0xBU1NfTkFNRV9GQURFID0gJ2ZhZGUnXG5jb25zdCBDTEFTU19OQU1FX1NIT1cgPSAnc2hvdydcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENsYXNzIERlZmluaXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNsYXNzIEFsZXJ0IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIC8vIEdldHRlcnNcblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuXG4gIGNsb3NlKCkge1xuICAgIGNvbnN0IGNsb3NlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9DTE9TRSlcblxuICAgIGlmIChjbG9zZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpXG5cbiAgICBjb25zdCBpc0FuaW1hdGVkID0gdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9GQURFKVxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soKCkgPT4gdGhpcy5fZGVzdHJveUVsZW1lbnQoKSwgdGhpcy5fZWxlbWVudCwgaXNBbmltYXRlZClcbiAgfVxuXG4gIC8vIFByaXZhdGVcbiAgX2Rlc3Ryb3lFbGVtZW50KCkge1xuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlKClcbiAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9DTE9TRUQpXG4gICAgdGhpcy5kaXNwb3NlKClcbiAgfVxuXG4gIC8vIFN0YXRpY1xuXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gQWxlcnQuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhW2NvbmZpZ10gPT09IHVuZGVmaW5lZCB8fCBjb25maWcuc3RhcnRzV2l0aCgnXycpIHx8IGNvbmZpZyA9PT0gJ2NvbnN0cnVjdG9yJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICB9XG5cbiAgICAgIGRhdGFbY29uZmlnXSh0aGlzKVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5lbmFibGVEaXNtaXNzVHJpZ2dlcihBbGVydCwgJ2Nsb3NlJylcbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBqUXVlcnlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogYWRkIC5BbGVydCB0byBqUXVlcnkgb25seSBpZiBqUXVlcnkgaXMgcHJlc2VudFxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihBbGVydClcblxuZXhwb3J0IGRlZmF1bHQgQWxlcnRcbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMS4wKTogYnV0dG9uLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IHsgZGVmaW5lSlF1ZXJ5UGx1Z2luIH0gZnJvbSAnLi91dGlsL2luZGV4J1xuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuL2RvbS9ldmVudC1oYW5kbGVyJ1xuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudCdcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvbnN0YW50c1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgTkFNRSA9ICdidXR0b24nXG5jb25zdCBEQVRBX0tFWSA9ICdicy5idXR0b24nXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSdcblxuY29uc3QgQ0xBU1NfTkFNRV9BQ1RJVkUgPSAnYWN0aXZlJ1xuXG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSA9ICdbZGF0YS1icy10b2dnbGU9XCJidXR0b25cIl0nXG5cbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJID0gYGNsaWNrJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ2xhc3MgRGVmaW5pdGlvblxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY2xhc3MgQnV0dG9uIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIC8vIEdldHRlcnNcblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuXG4gIHRvZ2dsZSgpIHtcbiAgICAvLyBUb2dnbGUgY2xhc3MgYW5kIHN5bmMgdGhlIGBhcmlhLXByZXNzZWRgIGF0dHJpYnV0ZSB3aXRoIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGAudG9nZ2xlKClgIG1ldGhvZFxuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLXByZXNzZWQnLCB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC50b2dnbGUoQ0xBU1NfTkFNRV9BQ1RJVkUpKVxuICB9XG5cbiAgLy8gU3RhdGljXG5cbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBCdXR0b24uZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKVxuXG4gICAgICBpZiAoY29uZmlnID09PSAndG9nZ2xlJykge1xuICAgICAgICBkYXRhW2NvbmZpZ10oKVxuICAgICAgfVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSwgZXZlbnQgPT4ge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG5cbiAgY29uc3QgYnV0dG9uID0gZXZlbnQudGFyZ2V0LmNsb3Nlc3QoU0VMRUNUT1JfREFUQV9UT0dHTEUpXG4gIGNvbnN0IGRhdGEgPSBCdXR0b24uZ2V0T3JDcmVhdGVJbnN0YW5jZShidXR0b24pXG5cbiAgZGF0YS50b2dnbGUoKVxufSlcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIGpRdWVyeVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBhZGQgLkJ1dHRvbiB0byBqUXVlcnkgb25seSBpZiBqUXVlcnkgaXMgcHJlc2VudFxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihCdXR0b24pXG5cbmV4cG9ydCBkZWZhdWx0IEJ1dHRvblxuIiwiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4xLjApOiBkb20vbWFuaXB1bGF0b3IuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5mdW5jdGlvbiBub3JtYWxpemVEYXRhKHZhbCkge1xuICBpZiAodmFsID09PSAndHJ1ZScpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgaWYgKHZhbCA9PT0gJ2ZhbHNlJykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgaWYgKHZhbCA9PT0gTnVtYmVyKHZhbCkudG9TdHJpbmcoKSkge1xuICAgIHJldHVybiBOdW1iZXIodmFsKVxuICB9XG5cbiAgaWYgKHZhbCA9PT0gJycgfHwgdmFsID09PSAnbnVsbCcpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5mdW5jdGlvbiBub3JtYWxpemVEYXRhS2V5KGtleSkge1xuICByZXR1cm4ga2V5LnJlcGxhY2UoL1tBLVpdL2csIGNociA9PiBgLSR7Y2hyLnRvTG93ZXJDYXNlKCl9YClcbn1cblxuY29uc3QgTWFuaXB1bGF0b3IgPSB7XG4gIHNldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwga2V5LCB2YWx1ZSkge1xuICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKGBkYXRhLWJzLSR7bm9ybWFsaXplRGF0YUtleShrZXkpfWAsIHZhbHVlKVxuICB9LFxuXG4gIHJlbW92ZURhdGFBdHRyaWJ1dGUoZWxlbWVudCwga2V5KSB7XG4gICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYGRhdGEtYnMtJHtub3JtYWxpemVEYXRhS2V5KGtleSl9YClcbiAgfSxcblxuICBnZXREYXRhQXR0cmlidXRlcyhlbGVtZW50KSB7XG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm4ge31cbiAgICB9XG5cbiAgICBjb25zdCBhdHRyaWJ1dGVzID0ge31cblxuICAgIE9iamVjdC5rZXlzKGVsZW1lbnQuZGF0YXNldClcbiAgICAgIC5maWx0ZXIoa2V5ID0+IGtleS5zdGFydHNXaXRoKCdicycpKVxuICAgICAgLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgbGV0IHB1cmVLZXkgPSBrZXkucmVwbGFjZSgvXmJzLywgJycpXG4gICAgICAgIHB1cmVLZXkgPSBwdXJlS2V5LmNoYXJBdCgwKS50b0xvd2VyQ2FzZSgpICsgcHVyZUtleS5zbGljZSgxLCBwdXJlS2V5Lmxlbmd0aClcbiAgICAgICAgYXR0cmlidXRlc1twdXJlS2V5XSA9IG5vcm1hbGl6ZURhdGEoZWxlbWVudC5kYXRhc2V0W2tleV0pXG4gICAgICB9KVxuXG4gICAgcmV0dXJuIGF0dHJpYnV0ZXNcbiAgfSxcblxuICBnZXREYXRhQXR0cmlidXRlKGVsZW1lbnQsIGtleSkge1xuICAgIHJldHVybiBub3JtYWxpemVEYXRhKGVsZW1lbnQuZ2V0QXR0cmlidXRlKGBkYXRhLWJzLSR7bm9ybWFsaXplRGF0YUtleShrZXkpfWApKVxuICB9LFxuXG4gIG9mZnNldChlbGVtZW50KSB7XG4gICAgY29uc3QgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcblxuICAgIHJldHVybiB7XG4gICAgICB0b3A6IHJlY3QudG9wICsgd2luZG93LnBhZ2VZT2Zmc2V0LFxuICAgICAgbGVmdDogcmVjdC5sZWZ0ICsgd2luZG93LnBhZ2VYT2Zmc2V0XG4gICAgfVxuICB9LFxuXG4gIHBvc2l0aW9uKGVsZW1lbnQpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdG9wOiBlbGVtZW50Lm9mZnNldFRvcCxcbiAgICAgIGxlZnQ6IGVsZW1lbnQub2Zmc2V0TGVmdFxuICAgIH1cbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBNYW5pcHVsYXRvclxuIiwiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4xLjApOiBkb20vc2VsZWN0b3ItZW5naW5lLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvbnN0YW50c1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IHsgaXNEaXNhYmxlZCwgaXNWaXNpYmxlIH0gZnJvbSAnLi4vdXRpbC9pbmRleCdcblxuY29uc3QgTk9ERV9URVhUID0gM1xuXG5jb25zdCBTZWxlY3RvckVuZ2luZSA9IHtcbiAgZmluZChzZWxlY3RvciwgZWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgIHJldHVybiBbXS5jb25jYXQoLi4uRWxlbWVudC5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbC5jYWxsKGVsZW1lbnQsIHNlbGVjdG9yKSlcbiAgfSxcblxuICBmaW5kT25lKHNlbGVjdG9yLCBlbGVtZW50ID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgcmV0dXJuIEVsZW1lbnQucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3IuY2FsbChlbGVtZW50LCBzZWxlY3RvcilcbiAgfSxcblxuICBjaGlsZHJlbihlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgIHJldHVybiBbXS5jb25jYXQoLi4uZWxlbWVudC5jaGlsZHJlbilcbiAgICAgIC5maWx0ZXIoY2hpbGQgPT4gY2hpbGQubWF0Y2hlcyhzZWxlY3RvcikpXG4gIH0sXG5cbiAgcGFyZW50cyhlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgIGNvbnN0IHBhcmVudHMgPSBbXVxuXG4gICAgbGV0IGFuY2VzdG9yID0gZWxlbWVudC5wYXJlbnROb2RlXG5cbiAgICB3aGlsZSAoYW5jZXN0b3IgJiYgYW5jZXN0b3Iubm9kZVR5cGUgPT09IE5vZGUuRUxFTUVOVF9OT0RFICYmIGFuY2VzdG9yLm5vZGVUeXBlICE9PSBOT0RFX1RFWFQpIHtcbiAgICAgIGlmIChhbmNlc3Rvci5tYXRjaGVzKHNlbGVjdG9yKSkge1xuICAgICAgICBwYXJlbnRzLnB1c2goYW5jZXN0b3IpXG4gICAgICB9XG5cbiAgICAgIGFuY2VzdG9yID0gYW5jZXN0b3IucGFyZW50Tm9kZVxuICAgIH1cblxuICAgIHJldHVybiBwYXJlbnRzXG4gIH0sXG5cbiAgcHJldihlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgIGxldCBwcmV2aW91cyA9IGVsZW1lbnQucHJldmlvdXNFbGVtZW50U2libGluZ1xuXG4gICAgd2hpbGUgKHByZXZpb3VzKSB7XG4gICAgICBpZiAocHJldmlvdXMubWF0Y2hlcyhzZWxlY3RvcikpIHtcbiAgICAgICAgcmV0dXJuIFtwcmV2aW91c11cbiAgICAgIH1cblxuICAgICAgcHJldmlvdXMgPSBwcmV2aW91cy5wcmV2aW91c0VsZW1lbnRTaWJsaW5nXG4gICAgfVxuXG4gICAgcmV0dXJuIFtdXG4gIH0sXG5cbiAgbmV4dChlbGVtZW50LCBzZWxlY3Rvcikge1xuICAgIGxldCBuZXh0ID0gZWxlbWVudC5uZXh0RWxlbWVudFNpYmxpbmdcblxuICAgIHdoaWxlIChuZXh0KSB7XG4gICAgICBpZiAobmV4dC5tYXRjaGVzKHNlbGVjdG9yKSkge1xuICAgICAgICByZXR1cm4gW25leHRdXG4gICAgICB9XG5cbiAgICAgIG5leHQgPSBuZXh0Lm5leHRFbGVtZW50U2libGluZ1xuICAgIH1cblxuICAgIHJldHVybiBbXVxuICB9LFxuXG4gIGZvY3VzYWJsZUNoaWxkcmVuKGVsZW1lbnQpIHtcbiAgICBjb25zdCBmb2N1c2FibGVzID0gW1xuICAgICAgJ2EnLFxuICAgICAgJ2J1dHRvbicsXG4gICAgICAnaW5wdXQnLFxuICAgICAgJ3RleHRhcmVhJyxcbiAgICAgICdzZWxlY3QnLFxuICAgICAgJ2RldGFpbHMnLFxuICAgICAgJ1t0YWJpbmRleF0nLFxuICAgICAgJ1tjb250ZW50ZWRpdGFibGU9XCJ0cnVlXCJdJ1xuICAgIF0ubWFwKHNlbGVjdG9yID0+IGAke3NlbGVjdG9yfTpub3QoW3RhYmluZGV4Xj1cIi1cIl0pYCkuam9pbignLCAnKVxuXG4gICAgcmV0dXJuIHRoaXMuZmluZChmb2N1c2FibGVzLCBlbGVtZW50KS5maWx0ZXIoZWwgPT4gIWlzRGlzYWJsZWQoZWwpICYmIGlzVmlzaWJsZShlbCkpXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2VsZWN0b3JFbmdpbmVcbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMS4wKTogY2Fyb3VzZWwuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQge1xuICBkZWZpbmVKUXVlcnlQbHVnaW4sXG4gIGdldEVsZW1lbnRGcm9tU2VsZWN0b3IsXG4gIGlzUlRMLFxuICBpc1Zpc2libGUsXG4gIGdldE5leHRBY3RpdmVFbGVtZW50LFxuICByZWZsb3csXG4gIHRyaWdnZXJUcmFuc2l0aW9uRW5kLFxuICB0eXBlQ2hlY2tDb25maWdcbn0gZnJvbSAnLi91dGlsL2luZGV4J1xuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuL2RvbS9ldmVudC1oYW5kbGVyJ1xuaW1wb3J0IE1hbmlwdWxhdG9yIGZyb20gJy4vZG9tL21hbmlwdWxhdG9yJ1xuaW1wb3J0IFNlbGVjdG9yRW5naW5lIGZyb20gJy4vZG9tL3NlbGVjdG9yLWVuZ2luZSdcbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gJy4vYmFzZS1jb21wb25lbnQnXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDb25zdGFudHNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IE5BTUUgPSAnY2Fyb3VzZWwnXG5jb25zdCBEQVRBX0tFWSA9ICdicy5jYXJvdXNlbCdcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5jb25zdCBEQVRBX0FQSV9LRVkgPSAnLmRhdGEtYXBpJ1xuXG5jb25zdCBBUlJPV19MRUZUX0tFWSA9ICdBcnJvd0xlZnQnXG5jb25zdCBBUlJPV19SSUdIVF9LRVkgPSAnQXJyb3dSaWdodCdcbmNvbnN0IFRPVUNIRVZFTlRfQ09NUEFUX1dBSVQgPSA1MDAgLy8gVGltZSBmb3IgbW91c2UgY29tcGF0IGV2ZW50cyB0byBmaXJlIGFmdGVyIHRvdWNoXG5jb25zdCBTV0lQRV9USFJFU0hPTEQgPSA0MFxuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBpbnRlcnZhbDogNTAwMCxcbiAga2V5Ym9hcmQ6IHRydWUsXG4gIHNsaWRlOiBmYWxzZSxcbiAgcGF1c2U6ICdob3ZlcicsXG4gIHdyYXA6IHRydWUsXG4gIHRvdWNoOiB0cnVlXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBpbnRlcnZhbDogJyhudW1iZXJ8Ym9vbGVhbiknLFxuICBrZXlib2FyZDogJ2Jvb2xlYW4nLFxuICBzbGlkZTogJyhib29sZWFufHN0cmluZyknLFxuICBwYXVzZTogJyhzdHJpbmd8Ym9vbGVhbiknLFxuICB3cmFwOiAnYm9vbGVhbicsXG4gIHRvdWNoOiAnYm9vbGVhbidcbn1cblxuY29uc3QgT1JERVJfTkVYVCA9ICduZXh0J1xuY29uc3QgT1JERVJfUFJFViA9ICdwcmV2J1xuY29uc3QgRElSRUNUSU9OX0xFRlQgPSAnbGVmdCdcbmNvbnN0IERJUkVDVElPTl9SSUdIVCA9ICdyaWdodCdcblxuY29uc3QgS0VZX1RPX0RJUkVDVElPTiA9IHtcbiAgW0FSUk9XX0xFRlRfS0VZXTogRElSRUNUSU9OX1JJR0hULFxuICBbQVJST1dfUklHSFRfS0VZXTogRElSRUNUSU9OX0xFRlRcbn1cblxuY29uc3QgRVZFTlRfU0xJREUgPSBgc2xpZGUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9TTElEID0gYHNsaWQke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9LRVlET1dOID0gYGtleWRvd24ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9NT1VTRUVOVEVSID0gYG1vdXNlZW50ZXIke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9NT1VTRUxFQVZFID0gYG1vdXNlbGVhdmUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9UT1VDSFNUQVJUID0gYHRvdWNoc3RhcnQke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9UT1VDSE1PVkUgPSBgdG91Y2htb3ZlJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfVE9VQ0hFTkQgPSBgdG91Y2hlbmQke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9QT0lOVEVSRE9XTiA9IGBwb2ludGVyZG93biR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1BPSU5URVJVUCA9IGBwb2ludGVydXAke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9EUkFHX1NUQVJUID0gYGRyYWdzdGFydCR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0xPQURfREFUQV9BUEkgPSBgbG9hZCR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJID0gYGNsaWNrJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuXG5jb25zdCBDTEFTU19OQU1FX0NBUk9VU0VMID0gJ2Nhcm91c2VsJ1xuY29uc3QgQ0xBU1NfTkFNRV9BQ1RJVkUgPSAnYWN0aXZlJ1xuY29uc3QgQ0xBU1NfTkFNRV9TTElERSA9ICdzbGlkZSdcbmNvbnN0IENMQVNTX05BTUVfRU5EID0gJ2Nhcm91c2VsLWl0ZW0tZW5kJ1xuY29uc3QgQ0xBU1NfTkFNRV9TVEFSVCA9ICdjYXJvdXNlbC1pdGVtLXN0YXJ0J1xuY29uc3QgQ0xBU1NfTkFNRV9ORVhUID0gJ2Nhcm91c2VsLWl0ZW0tbmV4dCdcbmNvbnN0IENMQVNTX05BTUVfUFJFViA9ICdjYXJvdXNlbC1pdGVtLXByZXYnXG5jb25zdCBDTEFTU19OQU1FX1BPSU5URVJfRVZFTlQgPSAncG9pbnRlci1ldmVudCdcblxuY29uc3QgU0VMRUNUT1JfQUNUSVZFID0gJy5hY3RpdmUnXG5jb25zdCBTRUxFQ1RPUl9BQ1RJVkVfSVRFTSA9ICcuYWN0aXZlLmNhcm91c2VsLWl0ZW0nXG5jb25zdCBTRUxFQ1RPUl9JVEVNID0gJy5jYXJvdXNlbC1pdGVtJ1xuY29uc3QgU0VMRUNUT1JfSVRFTV9JTUcgPSAnLmNhcm91c2VsLWl0ZW0gaW1nJ1xuY29uc3QgU0VMRUNUT1JfTkVYVF9QUkVWID0gJy5jYXJvdXNlbC1pdGVtLW5leHQsIC5jYXJvdXNlbC1pdGVtLXByZXYnXG5jb25zdCBTRUxFQ1RPUl9JTkRJQ0FUT1JTID0gJy5jYXJvdXNlbC1pbmRpY2F0b3JzJ1xuY29uc3QgU0VMRUNUT1JfSU5ESUNBVE9SID0gJ1tkYXRhLWJzLXRhcmdldF0nXG5jb25zdCBTRUxFQ1RPUl9EQVRBX1NMSURFID0gJ1tkYXRhLWJzLXNsaWRlXSwgW2RhdGEtYnMtc2xpZGUtdG9dJ1xuY29uc3QgU0VMRUNUT1JfREFUQV9SSURFID0gJ1tkYXRhLWJzLXJpZGU9XCJjYXJvdXNlbFwiXSdcblxuY29uc3QgUE9JTlRFUl9UWVBFX1RPVUNIID0gJ3RvdWNoJ1xuY29uc3QgUE9JTlRFUl9UWVBFX1BFTiA9ICdwZW4nXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDbGFzcyBEZWZpbml0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuY2xhc3MgQ2Fyb3VzZWwgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudClcblxuICAgIHRoaXMuX2l0ZW1zID0gbnVsbFxuICAgIHRoaXMuX2ludGVydmFsID0gbnVsbFxuICAgIHRoaXMuX2FjdGl2ZUVsZW1lbnQgPSBudWxsXG4gICAgdGhpcy5faXNQYXVzZWQgPSBmYWxzZVxuICAgIHRoaXMuX2lzU2xpZGluZyA9IGZhbHNlXG4gICAgdGhpcy50b3VjaFRpbWVvdXQgPSBudWxsXG4gICAgdGhpcy50b3VjaFN0YXJ0WCA9IDBcbiAgICB0aGlzLnRvdWNoRGVsdGFYID0gMFxuXG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZylcbiAgICB0aGlzLl9pbmRpY2F0b3JzRWxlbWVudCA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfSU5ESUNBVE9SUywgdGhpcy5fZWxlbWVudClcbiAgICB0aGlzLl90b3VjaFN1cHBvcnRlZCA9ICdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCBuYXZpZ2F0b3IubWF4VG91Y2hQb2ludHMgPiAwXG4gICAgdGhpcy5fcG9pbnRlckV2ZW50ID0gQm9vbGVhbih3aW5kb3cuUG9pbnRlckV2ZW50KVxuXG4gICAgdGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoKVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcblxuICBuZXh0KCkge1xuICAgIHRoaXMuX3NsaWRlKE9SREVSX05FWFQpXG4gIH1cblxuICBuZXh0V2hlblZpc2libGUoKSB7XG4gICAgLy8gRG9uJ3QgY2FsbCBuZXh0IHdoZW4gdGhlIHBhZ2UgaXNuJ3QgdmlzaWJsZVxuICAgIC8vIG9yIHRoZSBjYXJvdXNlbCBvciBpdHMgcGFyZW50IGlzbid0IHZpc2libGVcbiAgICBpZiAoIWRvY3VtZW50LmhpZGRlbiAmJiBpc1Zpc2libGUodGhpcy5fZWxlbWVudCkpIHtcbiAgICAgIHRoaXMubmV4dCgpXG4gICAgfVxuICB9XG5cbiAgcHJldigpIHtcbiAgICB0aGlzLl9zbGlkZShPUkRFUl9QUkVWKVxuICB9XG5cbiAgcGF1c2UoZXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50KSB7XG4gICAgICB0aGlzLl9pc1BhdXNlZCA9IHRydWVcbiAgICB9XG5cbiAgICBpZiAoU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9ORVhUX1BSRVYsIHRoaXMuX2VsZW1lbnQpKSB7XG4gICAgICB0cmlnZ2VyVHJhbnNpdGlvbkVuZCh0aGlzLl9lbGVtZW50KVxuICAgICAgdGhpcy5jeWNsZSh0cnVlKVxuICAgIH1cblxuICAgIGNsZWFySW50ZXJ2YWwodGhpcy5faW50ZXJ2YWwpXG4gICAgdGhpcy5faW50ZXJ2YWwgPSBudWxsXG4gIH1cblxuICBjeWNsZShldmVudCkge1xuICAgIGlmICghZXZlbnQpIHtcbiAgICAgIHRoaXMuX2lzUGF1c2VkID0gZmFsc2VcbiAgICB9XG5cbiAgICBpZiAodGhpcy5faW50ZXJ2YWwpIHtcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5faW50ZXJ2YWwpXG4gICAgICB0aGlzLl9pbnRlcnZhbCA9IG51bGxcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY29uZmlnICYmIHRoaXMuX2NvbmZpZy5pbnRlcnZhbCAmJiAhdGhpcy5faXNQYXVzZWQpIHtcbiAgICAgIHRoaXMuX3VwZGF0ZUludGVydmFsKClcblxuICAgICAgdGhpcy5faW50ZXJ2YWwgPSBzZXRJbnRlcnZhbChcbiAgICAgICAgKGRvY3VtZW50LnZpc2liaWxpdHlTdGF0ZSA/IHRoaXMubmV4dFdoZW5WaXNpYmxlIDogdGhpcy5uZXh0KS5iaW5kKHRoaXMpLFxuICAgICAgICB0aGlzLl9jb25maWcuaW50ZXJ2YWxcbiAgICAgIClcbiAgICB9XG4gIH1cblxuICB0byhpbmRleCkge1xuICAgIHRoaXMuX2FjdGl2ZUVsZW1lbnQgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0FDVElWRV9JVEVNLCB0aGlzLl9lbGVtZW50KVxuICAgIGNvbnN0IGFjdGl2ZUluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KHRoaXMuX2FjdGl2ZUVsZW1lbnQpXG5cbiAgICBpZiAoaW5kZXggPiB0aGlzLl9pdGVtcy5sZW5ndGggLSAxIHx8IGluZGV4IDwgMCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2lzU2xpZGluZykge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uZSh0aGlzLl9lbGVtZW50LCBFVkVOVF9TTElELCAoKSA9PiB0aGlzLnRvKGluZGV4KSlcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChhY3RpdmVJbmRleCA9PT0gaW5kZXgpIHtcbiAgICAgIHRoaXMucGF1c2UoKVxuICAgICAgdGhpcy5jeWNsZSgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBvcmRlciA9IGluZGV4ID4gYWN0aXZlSW5kZXggP1xuICAgICAgT1JERVJfTkVYVCA6XG4gICAgICBPUkRFUl9QUkVWXG5cbiAgICB0aGlzLl9zbGlkZShvcmRlciwgdGhpcy5faXRlbXNbaW5kZXhdKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuXG4gIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgY29uZmlnID0ge1xuICAgICAgLi4uRGVmYXVsdCxcbiAgICAgIC4uLk1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQpLFxuICAgICAgLi4uKHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnID8gY29uZmlnIDoge30pXG4gICAgfVxuICAgIHR5cGVDaGVja0NvbmZpZyhOQU1FLCBjb25maWcsIERlZmF1bHRUeXBlKVxuICAgIHJldHVybiBjb25maWdcbiAgfVxuXG4gIF9oYW5kbGVTd2lwZSgpIHtcbiAgICBjb25zdCBhYnNEZWx0YXggPSBNYXRoLmFicyh0aGlzLnRvdWNoRGVsdGFYKVxuXG4gICAgaWYgKGFic0RlbHRheCA8PSBTV0lQRV9USFJFU0hPTEQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGRpcmVjdGlvbiA9IGFic0RlbHRheCAvIHRoaXMudG91Y2hEZWx0YVhcblxuICAgIHRoaXMudG91Y2hEZWx0YVggPSAwXG5cbiAgICBpZiAoIWRpcmVjdGlvbikge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fc2xpZGUoZGlyZWN0aW9uID4gMCA/IERJUkVDVElPTl9SSUdIVCA6IERJUkVDVElPTl9MRUZUKVxuICB9XG5cbiAgX2FkZEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIGlmICh0aGlzLl9jb25maWcua2V5Ym9hcmQpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9LRVlET1dOLCBldmVudCA9PiB0aGlzLl9rZXlkb3duKGV2ZW50KSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY29uZmlnLnBhdXNlID09PSAnaG92ZXInKSB7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VFTlRFUiwgZXZlbnQgPT4gdGhpcy5wYXVzZShldmVudCkpXG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VMRUFWRSwgZXZlbnQgPT4gdGhpcy5jeWNsZShldmVudCkpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy50b3VjaCAmJiB0aGlzLl90b3VjaFN1cHBvcnRlZCkge1xuICAgICAgdGhpcy5fYWRkVG91Y2hFdmVudExpc3RlbmVycygpXG4gICAgfVxuICB9XG5cbiAgX2FkZFRvdWNoRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgY29uc3Qgc3RhcnQgPSBldmVudCA9PiB7XG4gICAgICBpZiAodGhpcy5fcG9pbnRlckV2ZW50ICYmIChldmVudC5wb2ludGVyVHlwZSA9PT0gUE9JTlRFUl9UWVBFX1BFTiB8fCBldmVudC5wb2ludGVyVHlwZSA9PT0gUE9JTlRFUl9UWVBFX1RPVUNIKSkge1xuICAgICAgICB0aGlzLnRvdWNoU3RhcnRYID0gZXZlbnQuY2xpZW50WFxuICAgICAgfSBlbHNlIGlmICghdGhpcy5fcG9pbnRlckV2ZW50KSB7XG4gICAgICAgIHRoaXMudG91Y2hTdGFydFggPSBldmVudC50b3VjaGVzWzBdLmNsaWVudFhcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBtb3ZlID0gZXZlbnQgPT4ge1xuICAgICAgLy8gZW5zdXJlIHN3aXBpbmcgd2l0aCBvbmUgdG91Y2ggYW5kIG5vdCBwaW5jaGluZ1xuICAgICAgdGhpcy50b3VjaERlbHRhWCA9IGV2ZW50LnRvdWNoZXMgJiYgZXZlbnQudG91Y2hlcy5sZW5ndGggPiAxID9cbiAgICAgICAgMCA6XG4gICAgICAgIGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WCAtIHRoaXMudG91Y2hTdGFydFhcbiAgICB9XG5cbiAgICBjb25zdCBlbmQgPSBldmVudCA9PiB7XG4gICAgICBpZiAodGhpcy5fcG9pbnRlckV2ZW50ICYmIChldmVudC5wb2ludGVyVHlwZSA9PT0gUE9JTlRFUl9UWVBFX1BFTiB8fCBldmVudC5wb2ludGVyVHlwZSA9PT0gUE9JTlRFUl9UWVBFX1RPVUNIKSkge1xuICAgICAgICB0aGlzLnRvdWNoRGVsdGFYID0gZXZlbnQuY2xpZW50WCAtIHRoaXMudG91Y2hTdGFydFhcbiAgICAgIH1cblxuICAgICAgdGhpcy5faGFuZGxlU3dpcGUoKVxuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5wYXVzZSA9PT0gJ2hvdmVyJykge1xuICAgICAgICAvLyBJZiBpdCdzIGEgdG91Y2gtZW5hYmxlZCBkZXZpY2UsIG1vdXNlZW50ZXIvbGVhdmUgYXJlIGZpcmVkIGFzXG4gICAgICAgIC8vIHBhcnQgb2YgdGhlIG1vdXNlIGNvbXBhdGliaWxpdHkgZXZlbnRzIG9uIGZpcnN0IHRhcCAtIHRoZSBjYXJvdXNlbFxuICAgICAgICAvLyB3b3VsZCBzdG9wIGN5Y2xpbmcgdW50aWwgdXNlciB0YXBwZWQgb3V0IG9mIGl0O1xuICAgICAgICAvLyBoZXJlLCB3ZSBsaXN0ZW4gZm9yIHRvdWNoZW5kLCBleHBsaWNpdGx5IHBhdXNlIHRoZSBjYXJvdXNlbFxuICAgICAgICAvLyAoYXMgaWYgaXQncyB0aGUgc2Vjb25kIHRpbWUgd2UgdGFwIG9uIGl0LCBtb3VzZWVudGVyIGNvbXBhdCBldmVudFxuICAgICAgICAvLyBpcyBOT1QgZmlyZWQpIGFuZCBhZnRlciBhIHRpbWVvdXQgKHRvIGFsbG93IGZvciBtb3VzZSBjb21wYXRpYmlsaXR5XG4gICAgICAgIC8vIGV2ZW50cyB0byBmaXJlKSB3ZSBleHBsaWNpdGx5IHJlc3RhcnQgY3ljbGluZ1xuXG4gICAgICAgIHRoaXMucGF1c2UoKVxuICAgICAgICBpZiAodGhpcy50b3VjaFRpbWVvdXQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50b3VjaFRpbWVvdXQpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRvdWNoVGltZW91dCA9IHNldFRpbWVvdXQoZXZlbnQgPT4gdGhpcy5jeWNsZShldmVudCksIFRPVUNIRVZFTlRfQ09NUEFUX1dBSVQgKyB0aGlzLl9jb25maWcuaW50ZXJ2YWwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9JVEVNX0lNRywgdGhpcy5fZWxlbWVudCkuZm9yRWFjaChpdGVtSW1nID0+IHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbihpdGVtSW1nLCBFVkVOVF9EUkFHX1NUQVJULCBlID0+IGUucHJldmVudERlZmF1bHQoKSlcbiAgICB9KVxuXG4gICAgaWYgKHRoaXMuX3BvaW50ZXJFdmVudCkge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1BPSU5URVJET1dOLCBldmVudCA9PiBzdGFydChldmVudCkpXG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfUE9JTlRFUlVQLCBldmVudCA9PiBlbmQoZXZlbnQpKVxuXG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9QT0lOVEVSX0VWRU5UKVxuICAgIH0gZWxzZSB7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfVE9VQ0hTVEFSVCwgZXZlbnQgPT4gc3RhcnQoZXZlbnQpKVxuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1RPVUNITU9WRSwgZXZlbnQgPT4gbW92ZShldmVudCkpXG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfVE9VQ0hFTkQsIGV2ZW50ID0+IGVuZChldmVudCkpXG4gICAgfVxuICB9XG5cbiAgX2tleWRvd24oZXZlbnQpIHtcbiAgICBpZiAoL2lucHV0fHRleHRhcmVhL2kudGVzdChldmVudC50YXJnZXQudGFnTmFtZSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGRpcmVjdGlvbiA9IEtFWV9UT19ESVJFQ1RJT05bZXZlbnQua2V5XVxuICAgIGlmIChkaXJlY3Rpb24pIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgIHRoaXMuX3NsaWRlKGRpcmVjdGlvbilcbiAgICB9XG4gIH1cblxuICBfZ2V0SXRlbUluZGV4KGVsZW1lbnQpIHtcbiAgICB0aGlzLl9pdGVtcyA9IGVsZW1lbnQgJiYgZWxlbWVudC5wYXJlbnROb2RlID9cbiAgICAgIFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfSVRFTSwgZWxlbWVudC5wYXJlbnROb2RlKSA6XG4gICAgICBbXVxuXG4gICAgcmV0dXJuIHRoaXMuX2l0ZW1zLmluZGV4T2YoZWxlbWVudClcbiAgfVxuXG4gIF9nZXRJdGVtQnlPcmRlcihvcmRlciwgYWN0aXZlRWxlbWVudCkge1xuICAgIGNvbnN0IGlzTmV4dCA9IG9yZGVyID09PSBPUkRFUl9ORVhUXG4gICAgcmV0dXJuIGdldE5leHRBY3RpdmVFbGVtZW50KHRoaXMuX2l0ZW1zLCBhY3RpdmVFbGVtZW50LCBpc05leHQsIHRoaXMuX2NvbmZpZy53cmFwKVxuICB9XG5cbiAgX3RyaWdnZXJTbGlkZUV2ZW50KHJlbGF0ZWRUYXJnZXQsIGV2ZW50RGlyZWN0aW9uTmFtZSkge1xuICAgIGNvbnN0IHRhcmdldEluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KHJlbGF0ZWRUYXJnZXQpXG4gICAgY29uc3QgZnJvbUluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfQUNUSVZFX0lURU0sIHRoaXMuX2VsZW1lbnQpKVxuXG4gICAgcmV0dXJuIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NMSURFLCB7XG4gICAgICByZWxhdGVkVGFyZ2V0LFxuICAgICAgZGlyZWN0aW9uOiBldmVudERpcmVjdGlvbk5hbWUsXG4gICAgICBmcm9tOiBmcm9tSW5kZXgsXG4gICAgICB0bzogdGFyZ2V0SW5kZXhcbiAgICB9KVxuICB9XG5cbiAgX3NldEFjdGl2ZUluZGljYXRvckVsZW1lbnQoZWxlbWVudCkge1xuICAgIGlmICh0aGlzLl9pbmRpY2F0b3JzRWxlbWVudCkge1xuICAgICAgY29uc3QgYWN0aXZlSW5kaWNhdG9yID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9BQ1RJVkUsIHRoaXMuX2luZGljYXRvcnNFbGVtZW50KVxuXG4gICAgICBhY3RpdmVJbmRpY2F0b3IuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0FDVElWRSlcbiAgICAgIGFjdGl2ZUluZGljYXRvci5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtY3VycmVudCcpXG5cbiAgICAgIGNvbnN0IGluZGljYXRvcnMgPSBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0lORElDQVRPUiwgdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQpXG5cbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgaW5kaWNhdG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBpZiAoTnVtYmVyLnBhcnNlSW50KGluZGljYXRvcnNbaV0uZ2V0QXR0cmlidXRlKCdkYXRhLWJzLXNsaWRlLXRvJyksIDEwKSA9PT0gdGhpcy5fZ2V0SXRlbUluZGV4KGVsZW1lbnQpKSB7XG4gICAgICAgICAgaW5kaWNhdG9yc1tpXS5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFKVxuICAgICAgICAgIGluZGljYXRvcnNbaV0uc2V0QXR0cmlidXRlKCdhcmlhLWN1cnJlbnQnLCAndHJ1ZScpXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF91cGRhdGVJbnRlcnZhbCgpIHtcbiAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5fYWN0aXZlRWxlbWVudCB8fCBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0FDVElWRV9JVEVNLCB0aGlzLl9lbGVtZW50KVxuXG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50SW50ZXJ2YWwgPSBOdW1iZXIucGFyc2VJbnQoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtaW50ZXJ2YWwnKSwgMTApXG5cbiAgICBpZiAoZWxlbWVudEludGVydmFsKSB7XG4gICAgICB0aGlzLl9jb25maWcuZGVmYXVsdEludGVydmFsID0gdGhpcy5fY29uZmlnLmRlZmF1bHRJbnRlcnZhbCB8fCB0aGlzLl9jb25maWcuaW50ZXJ2YWxcbiAgICAgIHRoaXMuX2NvbmZpZy5pbnRlcnZhbCA9IGVsZW1lbnRJbnRlcnZhbFxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9jb25maWcuaW50ZXJ2YWwgPSB0aGlzLl9jb25maWcuZGVmYXVsdEludGVydmFsIHx8IHRoaXMuX2NvbmZpZy5pbnRlcnZhbFxuICAgIH1cbiAgfVxuXG4gIF9zbGlkZShkaXJlY3Rpb25Pck9yZGVyLCBlbGVtZW50KSB7XG4gICAgY29uc3Qgb3JkZXIgPSB0aGlzLl9kaXJlY3Rpb25Ub09yZGVyKGRpcmVjdGlvbk9yT3JkZXIpXG4gICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfQUNUSVZFX0lURU0sIHRoaXMuX2VsZW1lbnQpXG4gICAgY29uc3QgYWN0aXZlRWxlbWVudEluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KGFjdGl2ZUVsZW1lbnQpXG4gICAgY29uc3QgbmV4dEVsZW1lbnQgPSBlbGVtZW50IHx8IHRoaXMuX2dldEl0ZW1CeU9yZGVyKG9yZGVyLCBhY3RpdmVFbGVtZW50KVxuXG4gICAgY29uc3QgbmV4dEVsZW1lbnRJbmRleCA9IHRoaXMuX2dldEl0ZW1JbmRleChuZXh0RWxlbWVudClcbiAgICBjb25zdCBpc0N5Y2xpbmcgPSBCb29sZWFuKHRoaXMuX2ludGVydmFsKVxuXG4gICAgY29uc3QgaXNOZXh0ID0gb3JkZXIgPT09IE9SREVSX05FWFRcbiAgICBjb25zdCBkaXJlY3Rpb25hbENsYXNzTmFtZSA9IGlzTmV4dCA/IENMQVNTX05BTUVfU1RBUlQgOiBDTEFTU19OQU1FX0VORFxuICAgIGNvbnN0IG9yZGVyQ2xhc3NOYW1lID0gaXNOZXh0ID8gQ0xBU1NfTkFNRV9ORVhUIDogQ0xBU1NfTkFNRV9QUkVWXG4gICAgY29uc3QgZXZlbnREaXJlY3Rpb25OYW1lID0gdGhpcy5fb3JkZXJUb0RpcmVjdGlvbihvcmRlcilcblxuICAgIGlmIChuZXh0RWxlbWVudCAmJiBuZXh0RWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9BQ1RJVkUpKSB7XG4gICAgICB0aGlzLl9pc1NsaWRpbmcgPSBmYWxzZVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2lzU2xpZGluZykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgc2xpZGVFdmVudCA9IHRoaXMuX3RyaWdnZXJTbGlkZUV2ZW50KG5leHRFbGVtZW50LCBldmVudERpcmVjdGlvbk5hbWUpXG4gICAgaWYgKHNsaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKCFhY3RpdmVFbGVtZW50IHx8ICFuZXh0RWxlbWVudCkge1xuICAgICAgLy8gU29tZSB3ZWlyZG5lc3MgaXMgaGFwcGVuaW5nLCBzbyB3ZSBiYWlsXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9pc1NsaWRpbmcgPSB0cnVlXG5cbiAgICBpZiAoaXNDeWNsaW5nKSB7XG4gICAgICB0aGlzLnBhdXNlKClcbiAgICB9XG5cbiAgICB0aGlzLl9zZXRBY3RpdmVJbmRpY2F0b3JFbGVtZW50KG5leHRFbGVtZW50KVxuICAgIHRoaXMuX2FjdGl2ZUVsZW1lbnQgPSBuZXh0RWxlbWVudFxuXG4gICAgY29uc3QgdHJpZ2dlclNsaWRFdmVudCA9ICgpID0+IHtcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NMSUQsIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldDogbmV4dEVsZW1lbnQsXG4gICAgICAgIGRpcmVjdGlvbjogZXZlbnREaXJlY3Rpb25OYW1lLFxuICAgICAgICBmcm9tOiBhY3RpdmVFbGVtZW50SW5kZXgsXG4gICAgICAgIHRvOiBuZXh0RWxlbWVudEluZGV4XG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NMSURFKSkge1xuICAgICAgbmV4dEVsZW1lbnQuY2xhc3NMaXN0LmFkZChvcmRlckNsYXNzTmFtZSlcblxuICAgICAgcmVmbG93KG5leHRFbGVtZW50KVxuXG4gICAgICBhY3RpdmVFbGVtZW50LmNsYXNzTGlzdC5hZGQoZGlyZWN0aW9uYWxDbGFzc05hbWUpXG4gICAgICBuZXh0RWxlbWVudC5jbGFzc0xpc3QuYWRkKGRpcmVjdGlvbmFsQ2xhc3NOYW1lKVxuXG4gICAgICBjb25zdCBjb21wbGV0ZUNhbGxCYWNrID0gKCkgPT4ge1xuICAgICAgICBuZXh0RWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKGRpcmVjdGlvbmFsQ2xhc3NOYW1lLCBvcmRlckNsYXNzTmFtZSlcbiAgICAgICAgbmV4dEVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0FDVElWRSlcblxuICAgICAgICBhY3RpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9BQ1RJVkUsIG9yZGVyQ2xhc3NOYW1lLCBkaXJlY3Rpb25hbENsYXNzTmFtZSlcblxuICAgICAgICB0aGlzLl9pc1NsaWRpbmcgPSBmYWxzZVxuXG4gICAgICAgIHNldFRpbWVvdXQodHJpZ2dlclNsaWRFdmVudCwgMClcbiAgICAgIH1cblxuICAgICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZUNhbGxCYWNrLCBhY3RpdmVFbGVtZW50LCB0cnVlKVxuICAgIH0gZWxzZSB7XG4gICAgICBhY3RpdmVFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9BQ1RJVkUpXG4gICAgICBuZXh0RWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFKVxuXG4gICAgICB0aGlzLl9pc1NsaWRpbmcgPSBmYWxzZVxuICAgICAgdHJpZ2dlclNsaWRFdmVudCgpXG4gICAgfVxuXG4gICAgaWYgKGlzQ3ljbGluZykge1xuICAgICAgdGhpcy5jeWNsZSgpXG4gICAgfVxuICB9XG5cbiAgX2RpcmVjdGlvblRvT3JkZXIoZGlyZWN0aW9uKSB7XG4gICAgaWYgKCFbRElSRUNUSU9OX1JJR0hULCBESVJFQ1RJT05fTEVGVF0uaW5jbHVkZXMoZGlyZWN0aW9uKSkge1xuICAgICAgcmV0dXJuIGRpcmVjdGlvblxuICAgIH1cblxuICAgIGlmIChpc1JUTCgpKSB7XG4gICAgICByZXR1cm4gZGlyZWN0aW9uID09PSBESVJFQ1RJT05fTEVGVCA/IE9SREVSX1BSRVYgOiBPUkRFUl9ORVhUXG4gICAgfVxuXG4gICAgcmV0dXJuIGRpcmVjdGlvbiA9PT0gRElSRUNUSU9OX0xFRlQgPyBPUkRFUl9ORVhUIDogT1JERVJfUFJFVlxuICB9XG5cbiAgX29yZGVyVG9EaXJlY3Rpb24ob3JkZXIpIHtcbiAgICBpZiAoIVtPUkRFUl9ORVhULCBPUkRFUl9QUkVWXS5pbmNsdWRlcyhvcmRlcikpIHtcbiAgICAgIHJldHVybiBvcmRlclxuICAgIH1cblxuICAgIGlmIChpc1JUTCgpKSB7XG4gICAgICByZXR1cm4gb3JkZXIgPT09IE9SREVSX1BSRVYgPyBESVJFQ1RJT05fTEVGVCA6IERJUkVDVElPTl9SSUdIVFxuICAgIH1cblxuICAgIHJldHVybiBvcmRlciA9PT0gT1JERVJfUFJFViA/IERJUkVDVElPTl9SSUdIVCA6IERJUkVDVElPTl9MRUZUXG4gIH1cblxuICAvLyBTdGF0aWNcblxuICBzdGF0aWMgY2Fyb3VzZWxJbnRlcmZhY2UoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgY29uc3QgZGF0YSA9IENhcm91c2VsLmdldE9yQ3JlYXRlSW5zdGFuY2UoZWxlbWVudCwgY29uZmlnKVxuXG4gICAgbGV0IHsgX2NvbmZpZyB9ID0gZGF0YVxuICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0Jykge1xuICAgICAgX2NvbmZpZyA9IHtcbiAgICAgICAgLi4uX2NvbmZpZyxcbiAgICAgICAgLi4uY29uZmlnXG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgYWN0aW9uID0gdHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycgPyBjb25maWcgOiBfY29uZmlnLnNsaWRlXG5cbiAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ251bWJlcicpIHtcbiAgICAgIGRhdGEudG8oY29uZmlnKVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGFjdGlvbiA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGlmICh0eXBlb2YgZGF0YVthY3Rpb25dID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2FjdGlvbn1cImApXG4gICAgICB9XG5cbiAgICAgIGRhdGFbYWN0aW9uXSgpXG4gICAgfSBlbHNlIGlmIChfY29uZmlnLmludGVydmFsICYmIF9jb25maWcucmlkZSkge1xuICAgICAgZGF0YS5wYXVzZSgpXG4gICAgICBkYXRhLmN5Y2xlKClcbiAgICB9XG4gIH1cblxuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgQ2Fyb3VzZWwuY2Fyb3VzZWxJbnRlcmZhY2UodGhpcywgY29uZmlnKVxuICAgIH0pXG4gIH1cblxuICBzdGF0aWMgZGF0YUFwaUNsaWNrSGFuZGxlcihldmVudCkge1xuICAgIGNvbnN0IHRhcmdldCA9IGdldEVsZW1lbnRGcm9tU2VsZWN0b3IodGhpcylcblxuICAgIGlmICghdGFyZ2V0IHx8ICF0YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfQ0FST1VTRUwpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBjb25maWcgPSB7XG4gICAgICAuLi5NYW5pcHVsYXRvci5nZXREYXRhQXR0cmlidXRlcyh0YXJnZXQpLFxuICAgICAgLi4uTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZXModGhpcylcbiAgICB9XG4gICAgY29uc3Qgc2xpZGVJbmRleCA9IHRoaXMuZ2V0QXR0cmlidXRlKCdkYXRhLWJzLXNsaWRlLXRvJylcblxuICAgIGlmIChzbGlkZUluZGV4KSB7XG4gICAgICBjb25maWcuaW50ZXJ2YWwgPSBmYWxzZVxuICAgIH1cblxuICAgIENhcm91c2VsLmNhcm91c2VsSW50ZXJmYWNlKHRhcmdldCwgY29uZmlnKVxuXG4gICAgaWYgKHNsaWRlSW5kZXgpIHtcbiAgICAgIENhcm91c2VsLmdldEluc3RhbmNlKHRhcmdldCkudG8oc2xpZGVJbmRleClcbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJLCBTRUxFQ1RPUl9EQVRBX1NMSURFLCBDYXJvdXNlbC5kYXRhQXBpQ2xpY2tIYW5kbGVyKVxuXG5FdmVudEhhbmRsZXIub24od2luZG93LCBFVkVOVF9MT0FEX0RBVEFfQVBJLCAoKSA9PiB7XG4gIGNvbnN0IGNhcm91c2VscyA9IFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfREFUQV9SSURFKVxuXG4gIGZvciAobGV0IGkgPSAwLCBsZW4gPSBjYXJvdXNlbHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBDYXJvdXNlbC5jYXJvdXNlbEludGVyZmFjZShjYXJvdXNlbHNbaV0sIENhcm91c2VsLmdldEluc3RhbmNlKGNhcm91c2Vsc1tpXSkpXG4gIH1cbn0pXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBqUXVlcnlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogYWRkIC5DYXJvdXNlbCB0byBqUXVlcnkgb25seSBpZiBqUXVlcnkgaXMgcHJlc2VudFxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihDYXJvdXNlbClcblxuZXhwb3J0IGRlZmF1bHQgQ2Fyb3VzZWxcbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMS4wKTogY29sbGFwc2UuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQge1xuICBkZWZpbmVKUXVlcnlQbHVnaW4sXG4gIGdldEVsZW1lbnQsXG4gIGdldFNlbGVjdG9yRnJvbUVsZW1lbnQsXG4gIGdldEVsZW1lbnRGcm9tU2VsZWN0b3IsXG4gIHJlZmxvdyxcbiAgdHlwZUNoZWNrQ29uZmlnXG59IGZyb20gJy4vdXRpbC9pbmRleCdcbmltcG9ydCBEYXRhIGZyb20gJy4vZG9tL2RhdGEnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgTWFuaXB1bGF0b3IgZnJvbSAnLi9kb20vbWFuaXB1bGF0b3InXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi9kb20vc2VsZWN0b3ItZW5naW5lJ1xuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudCdcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvbnN0YW50c1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgTkFNRSA9ICdjb2xsYXBzZSdcbmNvbnN0IERBVEFfS0VZID0gJ2JzLmNvbGxhcHNlJ1xuY29uc3QgRVZFTlRfS0VZID0gYC4ke0RBVEFfS0VZfWBcbmNvbnN0IERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknXG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIHRvZ2dsZTogdHJ1ZSxcbiAgcGFyZW50OiBudWxsXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICB0b2dnbGU6ICdib29sZWFuJyxcbiAgcGFyZW50OiAnKG51bGx8ZWxlbWVudCknXG59XG5cbmNvbnN0IEVWRU5UX1NIT1cgPSBgc2hvdyR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NIT1dOID0gYHNob3duJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfSElERSA9IGBoaWRlJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfSElEREVOID0gYGhpZGRlbiR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJID0gYGNsaWNrJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuXG5jb25zdCBDTEFTU19OQU1FX1NIT1cgPSAnc2hvdydcbmNvbnN0IENMQVNTX05BTUVfQ09MTEFQU0UgPSAnY29sbGFwc2UnXG5jb25zdCBDTEFTU19OQU1FX0NPTExBUFNJTkcgPSAnY29sbGFwc2luZydcbmNvbnN0IENMQVNTX05BTUVfQ09MTEFQU0VEID0gJ2NvbGxhcHNlZCdcbmNvbnN0IENMQVNTX05BTUVfSE9SSVpPTlRBTCA9ICdjb2xsYXBzZS1ob3Jpem9udGFsJ1xuXG5jb25zdCBXSURUSCA9ICd3aWR0aCdcbmNvbnN0IEhFSUdIVCA9ICdoZWlnaHQnXG5cbmNvbnN0IFNFTEVDVE9SX0FDVElWRVMgPSAnLnNob3csIC5jb2xsYXBzaW5nJ1xuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUgPSAnW2RhdGEtYnMtdG9nZ2xlPVwiY29sbGFwc2VcIl0nXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDbGFzcyBEZWZpbml0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jbGFzcyBDb2xsYXBzZSBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50KVxuXG4gICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2VcbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKVxuICAgIHRoaXMuX3RyaWdnZXJBcnJheSA9IFtdXG5cbiAgICBjb25zdCB0b2dnbGVMaXN0ID0gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9EQVRBX1RPR0dMRSlcblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0b2dnbGVMaXN0Lmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBlbGVtID0gdG9nZ2xlTGlzdFtpXVxuICAgICAgY29uc3Qgc2VsZWN0b3IgPSBnZXRTZWxlY3RvckZyb21FbGVtZW50KGVsZW0pXG4gICAgICBjb25zdCBmaWx0ZXJFbGVtZW50ID0gU2VsZWN0b3JFbmdpbmUuZmluZChzZWxlY3RvcilcbiAgICAgICAgLmZpbHRlcihmb3VuZEVsZW0gPT4gZm91bmRFbGVtID09PSB0aGlzLl9lbGVtZW50KVxuXG4gICAgICBpZiAoc2VsZWN0b3IgIT09IG51bGwgJiYgZmlsdGVyRWxlbWVudC5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5fc2VsZWN0b3IgPSBzZWxlY3RvclxuICAgICAgICB0aGlzLl90cmlnZ2VyQXJyYXkucHVzaChlbGVtKVxuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMuX2luaXRpYWxpemVDaGlsZHJlbigpXG5cbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5wYXJlbnQpIHtcbiAgICAgIHRoaXMuX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyh0aGlzLl90cmlnZ2VyQXJyYXksIHRoaXMuX2lzU2hvd24oKSlcbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY29uZmlnLnRvZ2dsZSkge1xuICAgICAgdGhpcy50b2dnbGUoKVxuICAgIH1cbiAgfVxuXG4gIC8vIEdldHRlcnNcblxuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRVxuICB9XG5cbiAgLy8gUHVibGljXG5cbiAgdG9nZ2xlKCkge1xuICAgIGlmICh0aGlzLl9pc1Nob3duKCkpIHtcbiAgICAgIHRoaXMuaGlkZSgpXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuc2hvdygpXG4gICAgfVxuICB9XG5cbiAgc2hvdygpIHtcbiAgICBpZiAodGhpcy5faXNUcmFuc2l0aW9uaW5nIHx8IHRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgbGV0IGFjdGl2ZXMgPSBbXVxuICAgIGxldCBhY3RpdmVzRGF0YVxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5wYXJlbnQpIHtcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gU2VsZWN0b3JFbmdpbmUuZmluZChgLiR7Q0xBU1NfTkFNRV9DT0xMQVBTRX0gLiR7Q0xBU1NfTkFNRV9DT0xMQVBTRX1gLCB0aGlzLl9jb25maWcucGFyZW50KVxuICAgICAgYWN0aXZlcyA9IFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfQUNUSVZFUywgdGhpcy5fY29uZmlnLnBhcmVudCkuZmlsdGVyKGVsZW0gPT4gIWNoaWxkcmVuLmluY2x1ZGVzKGVsZW0pKSAvLyByZW1vdmUgY2hpbGRyZW4gaWYgZ3JlYXRlciBkZXB0aFxuICAgIH1cblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUodGhpcy5fc2VsZWN0b3IpXG4gICAgaWYgKGFjdGl2ZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCB0ZW1wQWN0aXZlRGF0YSA9IGFjdGl2ZXMuZmluZChlbGVtID0+IGNvbnRhaW5lciAhPT0gZWxlbSlcbiAgICAgIGFjdGl2ZXNEYXRhID0gdGVtcEFjdGl2ZURhdGEgPyBDb2xsYXBzZS5nZXRJbnN0YW5jZSh0ZW1wQWN0aXZlRGF0YSkgOiBudWxsXG5cbiAgICAgIGlmIChhY3RpdmVzRGF0YSAmJiBhY3RpdmVzRGF0YS5faXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XKVxuICAgIGlmIChzdGFydEV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGFjdGl2ZXMuZm9yRWFjaChlbGVtQWN0aXZlID0+IHtcbiAgICAgIGlmIChjb250YWluZXIgIT09IGVsZW1BY3RpdmUpIHtcbiAgICAgICAgQ29sbGFwc2UuZ2V0T3JDcmVhdGVJbnN0YW5jZShlbGVtQWN0aXZlLCB7IHRvZ2dsZTogZmFsc2UgfSkuaGlkZSgpXG4gICAgICB9XG5cbiAgICAgIGlmICghYWN0aXZlc0RhdGEpIHtcbiAgICAgICAgRGF0YS5zZXQoZWxlbUFjdGl2ZSwgREFUQV9LRVksIG51bGwpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGNvbnN0IGRpbWVuc2lvbiA9IHRoaXMuX2dldERpbWVuc2lvbigpXG5cbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9DT0xMQVBTRSlcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9DT0xMQVBTSU5HKVxuXG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gMFxuXG4gICAgdGhpcy5fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKHRoaXMuX3RyaWdnZXJBcnJheSwgdHJ1ZSlcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlXG5cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlXG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0NPTExBUFNJTkcpXG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9DT0xMQVBTRSwgQ0xBU1NfTkFNRV9TSE9XKVxuXG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSAnJ1xuXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XTilcbiAgICB9XG5cbiAgICBjb25zdCBjYXBpdGFsaXplZERpbWVuc2lvbiA9IGRpbWVuc2lvblswXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKDEpXG4gICAgY29uc3Qgc2Nyb2xsU2l6ZSA9IGBzY3JvbGwke2NhcGl0YWxpemVkRGltZW5zaW9ufWBcblxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMuX2VsZW1lbnQsIHRydWUpXG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gYCR7dGhpcy5fZWxlbWVudFtzY3JvbGxTaXplXX1weGBcbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgaWYgKHRoaXMuX2lzVHJhbnNpdGlvbmluZyB8fCAhdGhpcy5faXNTaG93bigpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzdGFydEV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSlcbiAgICBpZiAoc3RhcnRFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBkaW1lbnNpb24gPSB0aGlzLl9nZXREaW1lbnNpb24oKVxuXG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gYCR7dGhpcy5fZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtkaW1lbnNpb25dfXB4YFxuXG4gICAgcmVmbG93KHRoaXMuX2VsZW1lbnQpXG5cbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9DT0xMQVBTSU5HKVxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0NPTExBUFNFLCBDTEFTU19OQU1FX1NIT1cpXG5cbiAgICBjb25zdCB0cmlnZ2VyQXJyYXlMZW5ndGggPSB0aGlzLl90cmlnZ2VyQXJyYXkubGVuZ3RoXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0cmlnZ2VyQXJyYXlMZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdHJpZ2dlciA9IHRoaXMuX3RyaWdnZXJBcnJheVtpXVxuICAgICAgY29uc3QgZWxlbSA9IGdldEVsZW1lbnRGcm9tU2VsZWN0b3IodHJpZ2dlcilcblxuICAgICAgaWYgKGVsZW0gJiYgIXRoaXMuX2lzU2hvd24oZWxlbSkpIHtcbiAgICAgICAgdGhpcy5fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKFt0cmlnZ2VyXSwgZmFsc2UpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gdHJ1ZVxuXG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZVxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQ09MTEFQU0lORylcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0NPTExBUFNFKVxuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElEREVOKVxuICAgIH1cblxuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9ICcnXG5cbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCB0aGlzLl9lbGVtZW50LCB0cnVlKVxuICB9XG5cbiAgX2lzU2hvd24oZWxlbWVudCA9IHRoaXMuX2VsZW1lbnQpIHtcbiAgICByZXR1cm4gZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9TSE9XKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuXG4gIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgY29uZmlnID0ge1xuICAgICAgLi4uRGVmYXVsdCxcbiAgICAgIC4uLk1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQpLFxuICAgICAgLi4uY29uZmlnXG4gICAgfVxuICAgIGNvbmZpZy50b2dnbGUgPSBCb29sZWFuKGNvbmZpZy50b2dnbGUpIC8vIENvZXJjZSBzdHJpbmcgdmFsdWVzXG4gICAgY29uZmlnLnBhcmVudCA9IGdldEVsZW1lbnQoY29uZmlnLnBhcmVudClcbiAgICB0eXBlQ2hlY2tDb25maWcoTkFNRSwgY29uZmlnLCBEZWZhdWx0VHlwZSlcbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICBfZ2V0RGltZW5zaW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0hPUklaT05UQUwpID8gV0lEVEggOiBIRUlHSFRcbiAgfVxuXG4gIF9pbml0aWFsaXplQ2hpbGRyZW4oKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcucGFyZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZHJlbiA9IFNlbGVjdG9yRW5naW5lLmZpbmQoYC4ke0NMQVNTX05BTUVfQ09MTEFQU0V9IC4ke0NMQVNTX05BTUVfQ09MTEFQU0V9YCwgdGhpcy5fY29uZmlnLnBhcmVudClcbiAgICBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0RBVEFfVE9HR0xFLCB0aGlzLl9jb25maWcucGFyZW50KS5maWx0ZXIoZWxlbSA9PiAhY2hpbGRyZW4uaW5jbHVkZXMoZWxlbSkpXG4gICAgICAuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWQgPSBnZXRFbGVtZW50RnJvbVNlbGVjdG9yKGVsZW1lbnQpXG5cbiAgICAgICAgaWYgKHNlbGVjdGVkKSB7XG4gICAgICAgICAgdGhpcy5fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKFtlbGVtZW50XSwgdGhpcy5faXNTaG93bihzZWxlY3RlZCkpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gIH1cblxuICBfYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKHRyaWdnZXJBcnJheSwgaXNPcGVuKSB7XG4gICAgaWYgKCF0cmlnZ2VyQXJyYXkubGVuZ3RoKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0cmlnZ2VyQXJyYXkuZm9yRWFjaChlbGVtID0+IHtcbiAgICAgIGlmIChpc09wZW4pIHtcbiAgICAgICAgZWxlbS5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQ09MTEFQU0VEKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbS5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQ09MTEFQU0VEKVxuICAgICAgfVxuXG4gICAgICBlbGVtLnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsIGlzT3BlbilcbiAgICB9KVxuICB9XG5cbiAgLy8gU3RhdGljXG5cbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IF9jb25maWcgPSB7fVxuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnICYmIC9zaG93fGhpZGUvLnRlc3QoY29uZmlnKSkge1xuICAgICAgICBfY29uZmlnLnRvZ2dsZSA9IGZhbHNlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGRhdGEgPSBDb2xsYXBzZS5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIF9jb25maWcpXG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICAgIH1cblxuICAgICAgICBkYXRhW2NvbmZpZ10oKVxuICAgICAgfVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIC8vIHByZXZlbnREZWZhdWx0IG9ubHkgZm9yIDxhPiBlbGVtZW50cyAod2hpY2ggY2hhbmdlIHRoZSBVUkwpIG5vdCBpbnNpZGUgdGhlIGNvbGxhcHNpYmxlIGVsZW1lbnRcbiAgaWYgKGV2ZW50LnRhcmdldC50YWdOYW1lID09PSAnQScgfHwgKGV2ZW50LmRlbGVnYXRlVGFyZ2V0ICYmIGV2ZW50LmRlbGVnYXRlVGFyZ2V0LnRhZ05hbWUgPT09ICdBJykpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gIH1cblxuICBjb25zdCBzZWxlY3RvciA9IGdldFNlbGVjdG9yRnJvbUVsZW1lbnQodGhpcylcbiAgY29uc3Qgc2VsZWN0b3JFbGVtZW50cyA9IFNlbGVjdG9yRW5naW5lLmZpbmQoc2VsZWN0b3IpXG5cbiAgc2VsZWN0b3JFbGVtZW50cy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgIENvbGxhcHNlLmdldE9yQ3JlYXRlSW5zdGFuY2UoZWxlbWVudCwgeyB0b2dnbGU6IGZhbHNlIH0pLnRvZ2dsZSgpXG4gIH0pXG59KVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogalF1ZXJ5XG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIGFkZCAuQ29sbGFwc2UgdG8galF1ZXJ5IG9ubHkgaWYgalF1ZXJ5IGlzIHByZXNlbnRcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oQ29sbGFwc2UpXG5cbmV4cG9ydCBkZWZhdWx0IENvbGxhcHNlXG4iLCJleHBvcnQgdmFyIHRvcCA9ICd0b3AnO1xuZXhwb3J0IHZhciBib3R0b20gPSAnYm90dG9tJztcbmV4cG9ydCB2YXIgcmlnaHQgPSAncmlnaHQnO1xuZXhwb3J0IHZhciBsZWZ0ID0gJ2xlZnQnO1xuZXhwb3J0IHZhciBhdXRvID0gJ2F1dG8nO1xuZXhwb3J0IHZhciBiYXNlUGxhY2VtZW50cyA9IFt0b3AsIGJvdHRvbSwgcmlnaHQsIGxlZnRdO1xuZXhwb3J0IHZhciBzdGFydCA9ICdzdGFydCc7XG5leHBvcnQgdmFyIGVuZCA9ICdlbmQnO1xuZXhwb3J0IHZhciBjbGlwcGluZ1BhcmVudHMgPSAnY2xpcHBpbmdQYXJlbnRzJztcbmV4cG9ydCB2YXIgdmlld3BvcnQgPSAndmlld3BvcnQnO1xuZXhwb3J0IHZhciBwb3BwZXIgPSAncG9wcGVyJztcbmV4cG9ydCB2YXIgcmVmZXJlbmNlID0gJ3JlZmVyZW5jZSc7XG5leHBvcnQgdmFyIHZhcmlhdGlvblBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovYmFzZVBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICByZXR1cm4gYWNjLmNvbmNhdChbcGxhY2VtZW50ICsgXCItXCIgKyBzdGFydCwgcGxhY2VtZW50ICsgXCItXCIgKyBlbmRdKTtcbn0sIFtdKTtcbmV4cG9ydCB2YXIgcGxhY2VtZW50cyA9IC8qI19fUFVSRV9fKi9bXS5jb25jYXQoYmFzZVBsYWNlbWVudHMsIFthdXRvXSkucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICByZXR1cm4gYWNjLmNvbmNhdChbcGxhY2VtZW50LCBwbGFjZW1lbnQgKyBcIi1cIiArIHN0YXJ0LCBwbGFjZW1lbnQgKyBcIi1cIiArIGVuZF0pO1xufSwgW10pOyAvLyBtb2RpZmllcnMgdGhhdCBuZWVkIHRvIHJlYWQgdGhlIERPTVxuXG5leHBvcnQgdmFyIGJlZm9yZVJlYWQgPSAnYmVmb3JlUmVhZCc7XG5leHBvcnQgdmFyIHJlYWQgPSAncmVhZCc7XG5leHBvcnQgdmFyIGFmdGVyUmVhZCA9ICdhZnRlclJlYWQnOyAvLyBwdXJlLWxvZ2ljIG1vZGlmaWVyc1xuXG5leHBvcnQgdmFyIGJlZm9yZU1haW4gPSAnYmVmb3JlTWFpbic7XG5leHBvcnQgdmFyIG1haW4gPSAnbWFpbic7XG5leHBvcnQgdmFyIGFmdGVyTWFpbiA9ICdhZnRlck1haW4nOyAvLyBtb2RpZmllciB3aXRoIHRoZSBwdXJwb3NlIHRvIHdyaXRlIHRvIHRoZSBET00gKG9yIHdyaXRlIGludG8gYSBmcmFtZXdvcmsgc3RhdGUpXG5cbmV4cG9ydCB2YXIgYmVmb3JlV3JpdGUgPSAnYmVmb3JlV3JpdGUnO1xuZXhwb3J0IHZhciB3cml0ZSA9ICd3cml0ZSc7XG5leHBvcnQgdmFyIGFmdGVyV3JpdGUgPSAnYWZ0ZXJXcml0ZSc7XG5leHBvcnQgdmFyIG1vZGlmaWVyUGhhc2VzID0gW2JlZm9yZVJlYWQsIHJlYWQsIGFmdGVyUmVhZCwgYmVmb3JlTWFpbiwgbWFpbiwgYWZ0ZXJNYWluLCBiZWZvcmVXcml0ZSwgd3JpdGUsIGFmdGVyV3JpdGVdOyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE5vZGVOYW1lKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGVsZW1lbnQgPyAoZWxlbWVudC5ub2RlTmFtZSB8fCAnJykudG9Mb3dlckNhc2UoKSA6IG51bGw7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93KG5vZGUpIHtcbiAgaWYgKG5vZGUgPT0gbnVsbCkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cblxuICBpZiAobm9kZS50b1N0cmluZygpICE9PSAnW29iamVjdCBXaW5kb3ddJykge1xuICAgIHZhciBvd25lckRvY3VtZW50ID0gbm9kZS5vd25lckRvY3VtZW50O1xuICAgIHJldHVybiBvd25lckRvY3VtZW50ID8gb3duZXJEb2N1bWVudC5kZWZhdWx0VmlldyB8fCB3aW5kb3cgOiB3aW5kb3c7XG4gIH1cblxuICByZXR1cm4gbm9kZTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuXG5mdW5jdGlvbiBpc0VsZW1lbnQobm9kZSkge1xuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5FbGVtZW50O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGlzSFRNTEVsZW1lbnQobm9kZSkge1xuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5IVE1MRWxlbWVudDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gaXNTaGFkb3dSb290KG5vZGUpIHtcbiAgLy8gSUUgMTEgaGFzIG5vIFNoYWRvd1Jvb3RcbiAgaWYgKHR5cGVvZiBTaGFkb3dSb290ID09PSAndW5kZWZpbmVkJykge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHZhciBPd25FbGVtZW50ID0gZ2V0V2luZG93KG5vZGUpLlNoYWRvd1Jvb3Q7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgU2hhZG93Um9vdDtcbn1cblxuZXhwb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50LCBpc1NoYWRvd1Jvb3QgfTsiLCJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4uL2RvbS11dGlscy9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiOyAvLyBUaGlzIG1vZGlmaWVyIHRha2VzIHRoZSBzdHlsZXMgcHJlcGFyZWQgYnkgdGhlIGBjb21wdXRlU3R5bGVzYCBtb2RpZmllclxuLy8gYW5kIGFwcGxpZXMgdGhlbSB0byB0aGUgSFRNTEVsZW1lbnRzIHN1Y2ggYXMgcG9wcGVyIGFuZCBhcnJvd1xuXG5mdW5jdGlvbiBhcHBseVN0eWxlcyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGU7XG4gIE9iamVjdC5rZXlzKHN0YXRlLmVsZW1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgdmFyIHN0eWxlID0gc3RhdGUuc3R5bGVzW25hbWVdIHx8IHt9O1xuICAgIHZhciBhdHRyaWJ1dGVzID0gc3RhdGUuYXR0cmlidXRlc1tuYW1lXSB8fCB7fTtcbiAgICB2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW25hbWVdOyAvLyBhcnJvdyBpcyBvcHRpb25hbCArIHZpcnR1YWwgZWxlbWVudHNcblxuICAgIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAhZ2V0Tm9kZU5hbWUoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9IC8vIEZsb3cgZG9lc24ndCBzdXBwb3J0IHRvIGV4dGVuZCB0aGlzIHByb3BlcnR5LCBidXQgaXQncyB0aGUgbW9zdFxuICAgIC8vIGVmZmVjdGl2ZSB3YXkgdG8gYXBwbHkgc3R5bGVzIHRvIGFuIEhUTUxFbGVtZW50XG4gICAgLy8gJEZsb3dGaXhNZVtjYW5ub3Qtd3JpdGVdXG5cblxuICAgIE9iamVjdC5hc3NpZ24oZWxlbWVudC5zdHlsZSwgc3R5bGUpO1xuICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24gKG5hbWUpIHtcbiAgICAgIHZhciB2YWx1ZSA9IGF0dHJpYnV0ZXNbbmFtZV07XG5cbiAgICAgIGlmICh2YWx1ZSA9PT0gZmFsc2UpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSA9PT0gdHJ1ZSA/ICcnIDogdmFsdWUpO1xuICAgICAgfVxuICAgIH0pO1xuICB9KTtcbn1cblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYyKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYyLnN0YXRlO1xuICB2YXIgaW5pdGlhbFN0eWxlcyA9IHtcbiAgICBwb3BwZXI6IHtcbiAgICAgIHBvc2l0aW9uOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5LFxuICAgICAgbGVmdDogJzAnLFxuICAgICAgdG9wOiAnMCcsXG4gICAgICBtYXJnaW46ICcwJ1xuICAgIH0sXG4gICAgYXJyb3c6IHtcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnXG4gICAgfSxcbiAgICByZWZlcmVuY2U6IHt9XG4gIH07XG4gIE9iamVjdC5hc3NpZ24oc3RhdGUuZWxlbWVudHMucG9wcGVyLnN0eWxlLCBpbml0aWFsU3R5bGVzLnBvcHBlcik7XG4gIHN0YXRlLnN0eWxlcyA9IGluaXRpYWxTdHlsZXM7XG5cbiAgaWYgKHN0YXRlLmVsZW1lbnRzLmFycm93KSB7XG4gICAgT2JqZWN0LmFzc2lnbihzdGF0ZS5lbGVtZW50cy5hcnJvdy5zdHlsZSwgaW5pdGlhbFN0eWxlcy5hcnJvdyk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIE9iamVjdC5rZXlzKHN0YXRlLmVsZW1lbnRzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgZWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzW25hbWVdO1xuICAgICAgdmFyIGF0dHJpYnV0ZXMgPSBzdGF0ZS5hdHRyaWJ1dGVzW25hbWVdIHx8IHt9O1xuICAgICAgdmFyIHN0eWxlUHJvcGVydGllcyA9IE9iamVjdC5rZXlzKHN0YXRlLnN0eWxlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSA/IHN0YXRlLnN0eWxlc1tuYW1lXSA6IGluaXRpYWxTdHlsZXNbbmFtZV0pOyAvLyBTZXQgYWxsIHZhbHVlcyB0byBhbiBlbXB0eSBzdHJpbmcgdG8gdW5zZXQgdGhlbVxuXG4gICAgICB2YXIgc3R5bGUgPSBzdHlsZVByb3BlcnRpZXMucmVkdWNlKGZ1bmN0aW9uIChzdHlsZSwgcHJvcGVydHkpIHtcbiAgICAgICAgc3R5bGVbcHJvcGVydHldID0gJyc7XG4gICAgICAgIHJldHVybiBzdHlsZTtcbiAgICAgIH0sIHt9KTsgLy8gYXJyb3cgaXMgb3B0aW9uYWwgKyB2aXJ0dWFsIGVsZW1lbnRzXG5cbiAgICAgIGlmICghaXNIVE1MRWxlbWVudChlbGVtZW50KSB8fCAhZ2V0Tm9kZU5hbWUoZWxlbWVudCkpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuXG4gICAgICBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKTtcbiAgICAgIE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpLmZvckVhY2goZnVuY3Rpb24gKGF0dHJpYnV0ZSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdhcHBseVN0eWxlcycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnd3JpdGUnLFxuICBmbjogYXBwbHlTdHlsZXMsXG4gIGVmZmVjdDogZWZmZWN0LFxuICByZXF1aXJlczogWydjb21wdXRlU3R5bGVzJ11cbn07IiwiaW1wb3J0IHsgYXV0byB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5zcGxpdCgnLScpWzBdO1xufSIsImltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG52YXIgcm91bmQgPSBNYXRoLnJvdW5kO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQsIGluY2x1ZGVTY2FsZSkge1xuICBpZiAoaW5jbHVkZVNjYWxlID09PSB2b2lkIDApIHtcbiAgICBpbmNsdWRlU2NhbGUgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIHNjYWxlWCA9IDE7XG4gIHZhciBzY2FsZVkgPSAxO1xuXG4gIGlmIChpc0hUTUxFbGVtZW50KGVsZW1lbnQpICYmIGluY2x1ZGVTY2FsZSkge1xuICAgIC8vIEZhbGxiYWNrIHRvIDEgaW4gY2FzZSBib3RoIHZhbHVlcyBhcmUgYDBgXG4gICAgc2NhbGVYID0gcmVjdC53aWR0aCAvIGVsZW1lbnQub2Zmc2V0V2lkdGggfHwgMTtcbiAgICBzY2FsZVkgPSByZWN0LmhlaWdodCAvIGVsZW1lbnQub2Zmc2V0SGVpZ2h0IHx8IDE7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHdpZHRoOiByb3VuZChyZWN0LndpZHRoIC8gc2NhbGVYKSxcbiAgICBoZWlnaHQ6IHJvdW5kKHJlY3QuaGVpZ2h0IC8gc2NhbGVZKSxcbiAgICB0b3A6IHJvdW5kKHJlY3QudG9wIC8gc2NhbGVZKSxcbiAgICByaWdodDogcm91bmQocmVjdC5yaWdodCAvIHNjYWxlWCksXG4gICAgYm90dG9tOiByb3VuZChyZWN0LmJvdHRvbSAvIHNjYWxlWSksXG4gICAgbGVmdDogcm91bmQocmVjdC5sZWZ0IC8gc2NhbGVYKSxcbiAgICB4OiByb3VuZChyZWN0LmxlZnQgLyBzY2FsZVgpLFxuICAgIHk6IHJvdW5kKHJlY3QudG9wIC8gc2NhbGVZKVxuICB9O1xufSIsImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7IC8vIFJldHVybnMgdGhlIGxheW91dCByZWN0IG9mIGFuIGVsZW1lbnQgcmVsYXRpdmUgdG8gaXRzIG9mZnNldFBhcmVudC4gTGF5b3V0XG4vLyBtZWFucyBpdCBkb2Vzbid0IHRha2UgaW50byBhY2NvdW50IHRyYW5zZm9ybXMuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldExheW91dFJlY3QoZWxlbWVudCkge1xuICB2YXIgY2xpZW50UmVjdCA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50KTsgLy8gVXNlIHRoZSBjbGllbnRSZWN0IHNpemVzIGlmIGl0J3Mgbm90IGJlZW4gdHJhbnNmb3JtZWQuXG4gIC8vIEZpeGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3BwZXJqcy9wb3BwZXItY29yZS9pc3N1ZXMvMTIyM1xuXG4gIHZhciB3aWR0aCA9IGVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gIHZhciBoZWlnaHQgPSBlbGVtZW50Lm9mZnNldEhlaWdodDtcblxuICBpZiAoTWF0aC5hYnMoY2xpZW50UmVjdC53aWR0aCAtIHdpZHRoKSA8PSAxKSB7XG4gICAgd2lkdGggPSBjbGllbnRSZWN0LndpZHRoO1xuICB9XG5cbiAgaWYgKE1hdGguYWJzKGNsaWVudFJlY3QuaGVpZ2h0IC0gaGVpZ2h0KSA8PSAxKSB7XG4gICAgaGVpZ2h0ID0gY2xpZW50UmVjdC5oZWlnaHQ7XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IGVsZW1lbnQub2Zmc2V0TGVmdCxcbiAgICB5OiBlbGVtZW50Lm9mZnNldFRvcCxcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHRcbiAgfTtcbn0iLCJpbXBvcnQgeyBpc1NoYWRvd1Jvb3QgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb250YWlucyhwYXJlbnQsIGNoaWxkKSB7XG4gIHZhciByb290Tm9kZSA9IGNoaWxkLmdldFJvb3ROb2RlICYmIGNoaWxkLmdldFJvb3ROb2RlKCk7IC8vIEZpcnN0LCBhdHRlbXB0IHdpdGggZmFzdGVyIG5hdGl2ZSBtZXRob2RcblxuICBpZiAocGFyZW50LmNvbnRhaW5zKGNoaWxkKSkge1xuICAgIHJldHVybiB0cnVlO1xuICB9IC8vIHRoZW4gZmFsbGJhY2sgdG8gY3VzdG9tIGltcGxlbWVudGF0aW9uIHdpdGggU2hhZG93IERPTSBzdXBwb3J0XG4gIGVsc2UgaWYgKHJvb3ROb2RlICYmIGlzU2hhZG93Um9vdChyb290Tm9kZSkpIHtcbiAgICAgIHZhciBuZXh0ID0gY2hpbGQ7XG5cbiAgICAgIGRvIHtcbiAgICAgICAgaWYgKG5leHQgJiYgcGFyZW50LmlzU2FtZU5vZGUobmV4dCkpIHtcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ106IG5lZWQgYSBiZXR0ZXIgd2F5IHRvIGhhbmRsZSB0aGlzLi4uXG5cblxuICAgICAgICBuZXh0ID0gbmV4dC5wYXJlbnROb2RlIHx8IG5leHQuaG9zdDtcbiAgICAgIH0gd2hpbGUgKG5leHQpO1xuICAgIH0gLy8gR2l2ZSB1cCwgdGhlIHJlc3VsdCBpcyBmYWxzZVxuXG5cbiAgcmV0dXJuIGZhbHNlO1xufSIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpIHtcbiAgcmV0dXJuIGdldFdpbmRvdyhlbGVtZW50KS5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpO1xufSIsImltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNUYWJsZUVsZW1lbnQoZWxlbWVudCkge1xuICByZXR1cm4gWyd0YWJsZScsICd0ZCcsICd0aCddLmluZGV4T2YoZ2V0Tm9kZU5hbWUoZWxlbWVudCkpID49IDA7XG59IiwiaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpIHtcbiAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogYXNzdW1lIGJvZHkgaXMgYWx3YXlzIGF2YWlsYWJsZVxuICByZXR1cm4gKChpc0VsZW1lbnQoZWxlbWVudCkgPyBlbGVtZW50Lm93bmVyRG9jdW1lbnQgOiAvLyAkRmxvd0ZpeE1lW3Byb3AtbWlzc2luZ11cbiAgZWxlbWVudC5kb2N1bWVudCkgfHwgd2luZG93LmRvY3VtZW50KS5kb2N1bWVudEVsZW1lbnQ7XG59IiwiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IHsgaXNTaGFkb3dSb290IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0UGFyZW50Tm9kZShlbGVtZW50KSB7XG4gIGlmIChnZXROb2RlTmFtZShlbGVtZW50KSA9PT0gJ2h0bWwnKSB7XG4gICAgcmV0dXJuIGVsZW1lbnQ7XG4gIH1cblxuICByZXR1cm4gKC8vIHRoaXMgaXMgYSBxdWlja2VyIChidXQgbGVzcyB0eXBlIHNhZmUpIHdheSB0byBzYXZlIHF1aXRlIHNvbWUgYnl0ZXMgZnJvbSB0aGUgYnVuZGxlXG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXVxuICAgIC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICAgIGVsZW1lbnQuYXNzaWduZWRTbG90IHx8IC8vIHN0ZXAgaW50byB0aGUgc2hhZG93IERPTSBvZiB0aGUgcGFyZW50IG9mIGEgc2xvdHRlZCBub2RlXG4gICAgZWxlbWVudC5wYXJlbnROb2RlIHx8ICggLy8gRE9NIEVsZW1lbnQgZGV0ZWN0ZWRcbiAgICBpc1NoYWRvd1Jvb3QoZWxlbWVudCkgPyBlbGVtZW50Lmhvc3QgOiBudWxsKSB8fCAvLyBTaGFkb3dSb290IGRldGVjdGVkXG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF06IEhUTUxFbGVtZW50IGlzIGEgTm9kZVxuICAgIGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSAvLyBmYWxsYmFja1xuXG4gICk7XG59IiwiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBpc1RhYmxlRWxlbWVudCBmcm9tIFwiLi9pc1RhYmxlRWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuXG5mdW5jdGlvbiBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQpIHtcbiAgaWYgKCFpc0hUTUxFbGVtZW50KGVsZW1lbnQpIHx8IC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9wb3BwZXJqcy9wb3BwZXItY29yZS9pc3N1ZXMvODM3XG4gIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24gPT09ICdmaXhlZCcpIHtcbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIHJldHVybiBlbGVtZW50Lm9mZnNldFBhcmVudDtcbn0gLy8gYC5vZmZzZXRQYXJlbnRgIHJlcG9ydHMgYG51bGxgIGZvciBmaXhlZCBlbGVtZW50cywgd2hpbGUgYWJzb2x1dGUgZWxlbWVudHNcbi8vIHJldHVybiB0aGUgY29udGFpbmluZyBibG9ja1xuXG5cbmZ1bmN0aW9uIGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB7XG4gIHZhciBpc0ZpcmVmb3ggPSBuYXZpZ2F0b3IudXNlckFnZW50LnRvTG93ZXJDYXNlKCkuaW5kZXhPZignZmlyZWZveCcpICE9PSAtMTtcbiAgdmFyIGlzSUUgPSBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoJ1RyaWRlbnQnKSAhPT0gLTE7XG5cbiAgaWYgKGlzSUUgJiYgaXNIVE1MRWxlbWVudChlbGVtZW50KSkge1xuICAgIC8vIEluIElFIDksIDEwIGFuZCAxMSBmaXhlZCBlbGVtZW50cyBjb250YWluaW5nIGJsb2NrIGlzIGFsd2F5cyBlc3RhYmxpc2hlZCBieSB0aGUgdmlld3BvcnRcbiAgICB2YXIgZWxlbWVudENzcyA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG5cbiAgICBpZiAoZWxlbWVudENzcy5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgdmFyIGN1cnJlbnROb2RlID0gZ2V0UGFyZW50Tm9kZShlbGVtZW50KTtcblxuICB3aGlsZSAoaXNIVE1MRWxlbWVudChjdXJyZW50Tm9kZSkgJiYgWydodG1sJywgJ2JvZHknXS5pbmRleE9mKGdldE5vZGVOYW1lKGN1cnJlbnROb2RlKSkgPCAwKSB7XG4gICAgdmFyIGNzcyA9IGdldENvbXB1dGVkU3R5bGUoY3VycmVudE5vZGUpOyAvLyBUaGlzIGlzIG5vbi1leGhhdXN0aXZlIGJ1dCBjb3ZlcnMgdGhlIG1vc3QgY29tbW9uIENTUyBwcm9wZXJ0aWVzIHRoYXRcbiAgICAvLyBjcmVhdGUgYSBjb250YWluaW5nIGJsb2NrLlxuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0NTUy9Db250YWluaW5nX2Jsb2NrI2lkZW50aWZ5aW5nX3RoZV9jb250YWluaW5nX2Jsb2NrXG5cbiAgICBpZiAoY3NzLnRyYW5zZm9ybSAhPT0gJ25vbmUnIHx8IGNzcy5wZXJzcGVjdGl2ZSAhPT0gJ25vbmUnIHx8IGNzcy5jb250YWluID09PSAncGFpbnQnIHx8IFsndHJhbnNmb3JtJywgJ3BlcnNwZWN0aXZlJ10uaW5kZXhPZihjc3Mud2lsbENoYW5nZSkgIT09IC0xIHx8IGlzRmlyZWZveCAmJiBjc3Mud2lsbENoYW5nZSA9PT0gJ2ZpbHRlcicgfHwgaXNGaXJlZm94ICYmIGNzcy5maWx0ZXIgJiYgY3NzLmZpbHRlciAhPT0gJ25vbmUnKSB7XG4gICAgICByZXR1cm4gY3VycmVudE5vZGU7XG4gICAgfSBlbHNlIHtcbiAgICAgIGN1cnJlbnROb2RlID0gY3VycmVudE5vZGUucGFyZW50Tm9kZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVsbDtcbn0gLy8gR2V0cyB0aGUgY2xvc2VzdCBhbmNlc3RvciBwb3NpdGlvbmVkIGVsZW1lbnQuIEhhbmRsZXMgc29tZSBlZGdlIGNhc2VzLFxuLy8gc3VjaCBhcyB0YWJsZSBhbmNlc3RvcnMgYW5kIGNyb3NzIGJyb3dzZXIgYnVncy5cblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudCkge1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICB2YXIgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChlbGVtZW50KTtcblxuICB3aGlsZSAob2Zmc2V0UGFyZW50ICYmIGlzVGFibGVFbGVtZW50KG9mZnNldFBhcmVudCkgJiYgZ2V0Q29tcHV0ZWRTdHlsZShvZmZzZXRQYXJlbnQpLnBvc2l0aW9uID09PSAnc3RhdGljJykge1xuICAgIG9mZnNldFBhcmVudCA9IGdldFRydWVPZmZzZXRQYXJlbnQob2Zmc2V0UGFyZW50KTtcbiAgfVxuXG4gIGlmIChvZmZzZXRQYXJlbnQgJiYgKGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgPT09ICdodG1sJyB8fCBnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpID09PSAnYm9keScgJiYgZ2V0Q29tcHV0ZWRTdHlsZShvZmZzZXRQYXJlbnQpLnBvc2l0aW9uID09PSAnc3RhdGljJykpIHtcbiAgICByZXR1cm4gd2luZG93O1xuICB9XG5cbiAgcmV0dXJuIG9mZnNldFBhcmVudCB8fCBnZXRDb250YWluaW5nQmxvY2soZWxlbWVudCkgfHwgd2luZG93O1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIFsndG9wJywgJ2JvdHRvbSddLmluZGV4T2YocGxhY2VtZW50KSA+PSAwID8gJ3gnIDogJ3knO1xufSIsImV4cG9ydCB2YXIgbWF4ID0gTWF0aC5tYXg7XG5leHBvcnQgdmFyIG1pbiA9IE1hdGgubWluO1xuZXhwb3J0IHZhciByb3VuZCA9IE1hdGgucm91bmQ7IiwiaW1wb3J0IHsgbWF4IGFzIG1hdGhNYXgsIG1pbiBhcyBtYXRoTWluIH0gZnJvbSBcIi4vbWF0aC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gd2l0aGluKG1pbiwgdmFsdWUsIG1heCkge1xuICByZXR1cm4gbWF0aE1heChtaW4sIG1hdGhNaW4odmFsdWUsIG1heCkpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEZyZXNoU2lkZU9iamVjdCgpIHtcbiAgcmV0dXJuIHtcbiAgICB0b3A6IDAsXG4gICAgcmlnaHQ6IDAsXG4gICAgYm90dG9tOiAwLFxuICAgIGxlZnQ6IDBcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0RnJlc2hTaWRlT2JqZWN0IGZyb20gXCIuL2dldEZyZXNoU2lkZU9iamVjdC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VQYWRkaW5nT2JqZWN0KHBhZGRpbmdPYmplY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGdldEZyZXNoU2lkZU9iamVjdCgpLCBwYWRkaW5nT2JqZWN0KTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBleHBhbmRUb0hhc2hNYXAodmFsdWUsIGtleXMpIHtcbiAgcmV0dXJuIGtleXMucmVkdWNlKGZ1bmN0aW9uIChoYXNoTWFwLCBrZXkpIHtcbiAgICBoYXNoTWFwW2tleV0gPSB2YWx1ZTtcbiAgICByZXR1cm4gaGFzaE1hcDtcbiAgfSwge30pO1xufSIsImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0TGF5b3V0UmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldExheW91dFJlY3QuanNcIjtcbmltcG9ydCBjb250YWlucyBmcm9tIFwiLi4vZG9tLXV0aWxzL2NvbnRhaW5zLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCB3aXRoaW4gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi4vdXRpbHMvbWVyZ2VQYWRkaW5nT2JqZWN0LmpzXCI7XG5pbXBvcnQgZXhwYW5kVG9IYXNoTWFwIGZyb20gXCIuLi91dGlscy9leHBhbmRUb0hhc2hNYXAuanNcIjtcbmltcG9ydCB7IGxlZnQsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdG9wLCBib3R0b20gfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgdG9QYWRkaW5nT2JqZWN0ID0gZnVuY3Rpb24gdG9QYWRkaW5nT2JqZWN0KHBhZGRpbmcsIHN0YXRlKSB7XG4gIHBhZGRpbmcgPSB0eXBlb2YgcGFkZGluZyA9PT0gJ2Z1bmN0aW9uJyA/IHBhZGRpbmcoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiBwYWRkaW5nO1xuICByZXR1cm4gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbn07XG5cbmZ1bmN0aW9uIGFycm93KF9yZWYpIHtcbiAgdmFyIF9zdGF0ZSRtb2RpZmllcnNEYXRhJDtcblxuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHM7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgYXhpcyA9IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KTtcbiAgdmFyIGlzVmVydGljYWwgPSBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMDtcbiAgdmFyIGxlbiA9IGlzVmVydGljYWwgPyAnaGVpZ2h0JyA6ICd3aWR0aCc7XG5cbiAgaWYgKCFhcnJvd0VsZW1lbnQgfHwgIXBvcHBlck9mZnNldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgcGFkZGluZ09iamVjdCA9IHRvUGFkZGluZ09iamVjdChvcHRpb25zLnBhZGRpbmcsIHN0YXRlKTtcbiAgdmFyIGFycm93UmVjdCA9IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KTtcbiAgdmFyIG1pblByb3AgPSBheGlzID09PSAneScgPyB0b3AgOiBsZWZ0O1xuICB2YXIgbWF4UHJvcCA9IGF4aXMgPT09ICd5JyA/IGJvdHRvbSA6IHJpZ2h0O1xuICB2YXIgZW5kRGlmZiA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtsZW5dICsgc3RhdGUucmVjdHMucmVmZXJlbmNlW2F4aXNdIC0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnBvcHBlcltsZW5dO1xuICB2YXIgc3RhcnREaWZmID0gcG9wcGVyT2Zmc2V0c1theGlzXSAtIHN0YXRlLnJlY3RzLnJlZmVyZW5jZVtheGlzXTtcbiAgdmFyIGFycm93T2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KGFycm93RWxlbWVudCk7XG4gIHZhciBjbGllbnRTaXplID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBheGlzID09PSAneScgPyBhcnJvd09mZnNldFBhcmVudC5jbGllbnRIZWlnaHQgfHwgMCA6IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudFdpZHRoIHx8IDAgOiAwO1xuICB2YXIgY2VudGVyVG9SZWZlcmVuY2UgPSBlbmREaWZmIC8gMiAtIHN0YXJ0RGlmZiAvIDI7IC8vIE1ha2Ugc3VyZSB0aGUgYXJyb3cgZG9lc24ndCBvdmVyZmxvdyB0aGUgcG9wcGVyIGlmIHRoZSBjZW50ZXIgcG9pbnQgaXNcbiAgLy8gb3V0c2lkZSBvZiB0aGUgcG9wcGVyIGJvdW5kc1xuXG4gIHZhciBtaW4gPSBwYWRkaW5nT2JqZWN0W21pblByb3BdO1xuICB2YXIgbWF4ID0gY2xpZW50U2l6ZSAtIGFycm93UmVjdFtsZW5dIC0gcGFkZGluZ09iamVjdFttYXhQcm9wXTtcbiAgdmFyIGNlbnRlciA9IGNsaWVudFNpemUgLyAyIC0gYXJyb3dSZWN0W2xlbl0gLyAyICsgY2VudGVyVG9SZWZlcmVuY2U7XG4gIHZhciBvZmZzZXQgPSB3aXRoaW4obWluLCBjZW50ZXIsIG1heCk7IC8vIFByZXZlbnRzIGJyZWFraW5nIHN5bnRheCBoaWdobGlnaHRpbmcuLi5cblxuICB2YXIgYXhpc1Byb3AgPSBheGlzO1xuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gKF9zdGF0ZSRtb2RpZmllcnNEYXRhJCA9IHt9LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSRbYXhpc1Byb3BdID0gb2Zmc2V0LCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQuY2VudGVyT2Zmc2V0ID0gb2Zmc2V0IC0gY2VudGVyLCBfc3RhdGUkbW9kaWZpZXJzRGF0YSQpO1xufVxuXG5mdW5jdGlvbiBlZmZlY3QoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjIub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJGVsZW1lbnQgPSBvcHRpb25zLmVsZW1lbnQsXG4gICAgICBhcnJvd0VsZW1lbnQgPSBfb3B0aW9ucyRlbGVtZW50ID09PSB2b2lkIDAgPyAnW2RhdGEtcG9wcGVyLWFycm93XScgOiBfb3B0aW9ucyRlbGVtZW50O1xuXG4gIGlmIChhcnJvd0VsZW1lbnQgPT0gbnVsbCkge1xuICAgIHJldHVybjtcbiAgfSAvLyBDU1Mgc2VsZWN0b3JcblxuXG4gIGlmICh0eXBlb2YgYXJyb3dFbGVtZW50ID09PSAnc3RyaW5nJykge1xuICAgIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLnBvcHBlci5xdWVyeVNlbGVjdG9yKGFycm93RWxlbWVudCk7XG5cbiAgICBpZiAoIWFycm93RWxlbWVudCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfVxuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICBpZiAoIWlzSFRNTEVsZW1lbnQoYXJyb3dFbGVtZW50KSkge1xuICAgICAgY29uc29sZS5lcnJvcihbJ1BvcHBlcjogXCJhcnJvd1wiIGVsZW1lbnQgbXVzdCBiZSBhbiBIVE1MRWxlbWVudCAobm90IGFuIFNWR0VsZW1lbnQpLicsICdUbyB1c2UgYW4gU1ZHIGFycm93LCB3cmFwIGl0IGluIGFuIEhUTUxFbGVtZW50IHRoYXQgd2lsbCBiZSB1c2VkIGFzJywgJ3RoZSBhcnJvdy4nXS5qb2luKCcgJykpO1xuICAgIH1cbiAgfVxuXG4gIGlmICghY29udGFpbnMoc3RhdGUuZWxlbWVudHMucG9wcGVyLCBhcnJvd0VsZW1lbnQpKSB7XG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgY29uc29sZS5lcnJvcihbJ1BvcHBlcjogXCJhcnJvd1wiIG1vZGlmaWVyXFwncyBgZWxlbWVudGAgbXVzdCBiZSBhIGNoaWxkIG9mIHRoZSBwb3BwZXInLCAnZWxlbWVudC4nXS5qb2luKCcgJykpO1xuICAgIH1cblxuICAgIHJldHVybjtcbiAgfVxuXG4gIHN0YXRlLmVsZW1lbnRzLmFycm93ID0gYXJyb3dFbGVtZW50O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnYXJyb3cnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogYXJyb3csXG4gIGVmZmVjdDogZWZmZWN0LFxuICByZXF1aXJlczogWydwb3BwZXJPZmZzZXRzJ10sXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsncHJldmVudE92ZXJmbG93J11cbn07IiwiaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgYm90dG9tIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxudmFyIHVuc2V0U2lkZXMgPSB7XG4gIHRvcDogJ2F1dG8nLFxuICByaWdodDogJ2F1dG8nLFxuICBib3R0b206ICdhdXRvJyxcbiAgbGVmdDogJ2F1dG8nXG59OyAvLyBSb3VuZCB0aGUgb2Zmc2V0cyB0byB0aGUgbmVhcmVzdCBzdWl0YWJsZSBzdWJwaXhlbCBiYXNlZCBvbiB0aGUgRFBSLlxuLy8gWm9vbWluZyBjYW4gY2hhbmdlIHRoZSBEUFIsIGJ1dCBpdCBzZWVtcyB0byByZXBvcnQgYSB2YWx1ZSB0aGF0IHdpbGxcbi8vIGNsZWFubHkgZGl2aWRlIHRoZSB2YWx1ZXMgaW50byB0aGUgYXBwcm9wcmlhdGUgc3VicGl4ZWxzLlxuXG5mdW5jdGlvbiByb3VuZE9mZnNldHNCeURQUihfcmVmKSB7XG4gIHZhciB4ID0gX3JlZi54LFxuICAgICAgeSA9IF9yZWYueTtcbiAgdmFyIHdpbiA9IHdpbmRvdztcbiAgdmFyIGRwciA9IHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG4gIHJldHVybiB7XG4gICAgeDogcm91bmQocm91bmQoeCAqIGRwcikgLyBkcHIpIHx8IDAsXG4gICAgeTogcm91bmQocm91bmQoeSAqIGRwcikgLyBkcHIpIHx8IDBcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcFRvU3R5bGVzKF9yZWYyKSB7XG4gIHZhciBfT2JqZWN0JGFzc2lnbjI7XG5cbiAgdmFyIHBvcHBlciA9IF9yZWYyLnBvcHBlcixcbiAgICAgIHBvcHBlclJlY3QgPSBfcmVmMi5wb3BwZXJSZWN0LFxuICAgICAgcGxhY2VtZW50ID0gX3JlZjIucGxhY2VtZW50LFxuICAgICAgb2Zmc2V0cyA9IF9yZWYyLm9mZnNldHMsXG4gICAgICBwb3NpdGlvbiA9IF9yZWYyLnBvc2l0aW9uLFxuICAgICAgZ3B1QWNjZWxlcmF0aW9uID0gX3JlZjIuZ3B1QWNjZWxlcmF0aW9uLFxuICAgICAgYWRhcHRpdmUgPSBfcmVmMi5hZGFwdGl2ZSxcbiAgICAgIHJvdW5kT2Zmc2V0cyA9IF9yZWYyLnJvdW5kT2Zmc2V0cztcblxuICB2YXIgX3JlZjMgPSByb3VuZE9mZnNldHMgPT09IHRydWUgPyByb3VuZE9mZnNldHNCeURQUihvZmZzZXRzKSA6IHR5cGVvZiByb3VuZE9mZnNldHMgPT09ICdmdW5jdGlvbicgPyByb3VuZE9mZnNldHMob2Zmc2V0cykgOiBvZmZzZXRzLFxuICAgICAgX3JlZjMkeCA9IF9yZWYzLngsXG4gICAgICB4ID0gX3JlZjMkeCA9PT0gdm9pZCAwID8gMCA6IF9yZWYzJHgsXG4gICAgICBfcmVmMyR5ID0gX3JlZjMueSxcbiAgICAgIHkgPSBfcmVmMyR5ID09PSB2b2lkIDAgPyAwIDogX3JlZjMkeTtcblxuICB2YXIgaGFzWCA9IG9mZnNldHMuaGFzT3duUHJvcGVydHkoJ3gnKTtcbiAgdmFyIGhhc1kgPSBvZmZzZXRzLmhhc093blByb3BlcnR5KCd5Jyk7XG4gIHZhciBzaWRlWCA9IGxlZnQ7XG4gIHZhciBzaWRlWSA9IHRvcDtcbiAgdmFyIHdpbiA9IHdpbmRvdztcblxuICBpZiAoYWRhcHRpdmUpIHtcbiAgICB2YXIgb2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KHBvcHBlcik7XG4gICAgdmFyIGhlaWdodFByb3AgPSAnY2xpZW50SGVpZ2h0JztcbiAgICB2YXIgd2lkdGhQcm9wID0gJ2NsaWVudFdpZHRoJztcblxuICAgIGlmIChvZmZzZXRQYXJlbnQgPT09IGdldFdpbmRvdyhwb3BwZXIpKSB7XG4gICAgICBvZmZzZXRQYXJlbnQgPSBnZXREb2N1bWVudEVsZW1lbnQocG9wcGVyKTtcblxuICAgICAgaWYgKGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiAhPT0gJ3N0YXRpYycpIHtcbiAgICAgICAgaGVpZ2h0UHJvcCA9ICdzY3JvbGxIZWlnaHQnO1xuICAgICAgICB3aWR0aFByb3AgPSAnc2Nyb2xsV2lkdGgnO1xuICAgICAgfVxuICAgIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FzdF06IGZvcmNlIHR5cGUgcmVmaW5lbWVudCwgd2UgY29tcGFyZSBvZmZzZXRQYXJlbnQgd2l0aCB3aW5kb3cgYWJvdmUsIGJ1dCBGbG93IGRvZXNuJ3QgZGV0ZWN0IGl0XG5cblxuICAgIG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudDtcblxuICAgIGlmIChwbGFjZW1lbnQgPT09IHRvcCkge1xuICAgICAgc2lkZVkgPSBib3R0b207IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuXG4gICAgICB5IC09IG9mZnNldFBhcmVudFtoZWlnaHRQcm9wXSAtIHBvcHBlclJlY3QuaGVpZ2h0O1xuICAgICAgeSAqPSBncHVBY2NlbGVyYXRpb24gPyAxIDogLTE7XG4gICAgfVxuXG4gICAgaWYgKHBsYWNlbWVudCA9PT0gbGVmdCkge1xuICAgICAgc2lkZVggPSByaWdodDsgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG5cbiAgICAgIHggLT0gb2Zmc2V0UGFyZW50W3dpZHRoUHJvcF0gLSBwb3BwZXJSZWN0LndpZHRoO1xuICAgICAgeCAqPSBncHVBY2NlbGVyYXRpb24gPyAxIDogLTE7XG4gICAgfVxuICB9XG5cbiAgdmFyIGNvbW1vblN0eWxlcyA9IE9iamVjdC5hc3NpZ24oe1xuICAgIHBvc2l0aW9uOiBwb3NpdGlvblxuICB9LCBhZGFwdGl2ZSAmJiB1bnNldFNpZGVzKTtcblxuICBpZiAoZ3B1QWNjZWxlcmF0aW9uKSB7XG4gICAgdmFyIF9PYmplY3QkYXNzaWduO1xuXG4gICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywgKF9PYmplY3QkYXNzaWduID0ge30sIF9PYmplY3QkYXNzaWduW3NpZGVZXSA9IGhhc1kgPyAnMCcgOiAnJywgX09iamVjdCRhc3NpZ25bc2lkZVhdID0gaGFzWCA/ICcwJyA6ICcnLCBfT2JqZWN0JGFzc2lnbi50cmFuc2Zvcm0gPSAod2luLmRldmljZVBpeGVsUmF0aW8gfHwgMSkgPCAyID8gXCJ0cmFuc2xhdGUoXCIgKyB4ICsgXCJweCwgXCIgKyB5ICsgXCJweClcIiA6IFwidHJhbnNsYXRlM2QoXCIgKyB4ICsgXCJweCwgXCIgKyB5ICsgXCJweCwgMClcIiwgX09iamVjdCRhc3NpZ24pKTtcbiAgfVxuXG4gIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIChfT2JqZWN0JGFzc2lnbjIgPSB7fSwgX09iamVjdCRhc3NpZ24yW3NpZGVZXSA9IGhhc1kgPyB5ICsgXCJweFwiIDogJycsIF9PYmplY3QkYXNzaWduMltzaWRlWF0gPSBoYXNYID8geCArIFwicHhcIiA6ICcnLCBfT2JqZWN0JGFzc2lnbjIudHJhbnNmb3JtID0gJycsIF9PYmplY3QkYXNzaWduMikpO1xufVxuXG5mdW5jdGlvbiBjb21wdXRlU3R5bGVzKF9yZWY0KSB7XG4gIHZhciBzdGF0ZSA9IF9yZWY0LnN0YXRlLFxuICAgICAgb3B0aW9ucyA9IF9yZWY0Lm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRncHVBY2NlbGVyYXQgPSBvcHRpb25zLmdwdUFjY2VsZXJhdGlvbixcbiAgICAgIGdwdUFjY2VsZXJhdGlvbiA9IF9vcHRpb25zJGdwdUFjY2VsZXJhdCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGdwdUFjY2VsZXJhdCxcbiAgICAgIF9vcHRpb25zJGFkYXB0aXZlID0gb3B0aW9ucy5hZGFwdGl2ZSxcbiAgICAgIGFkYXB0aXZlID0gX29wdGlvbnMkYWRhcHRpdmUgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRhZGFwdGl2ZSxcbiAgICAgIF9vcHRpb25zJHJvdW5kT2Zmc2V0cyA9IG9wdGlvbnMucm91bmRPZmZzZXRzLFxuICAgICAgcm91bmRPZmZzZXRzID0gX29wdGlvbnMkcm91bmRPZmZzZXRzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkcm91bmRPZmZzZXRzO1xuXG4gIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICB2YXIgdHJhbnNpdGlvblByb3BlcnR5ID0gZ2V0Q29tcHV0ZWRTdHlsZShzdGF0ZS5lbGVtZW50cy5wb3BwZXIpLnRyYW5zaXRpb25Qcm9wZXJ0eSB8fCAnJztcblxuICAgIGlmIChhZGFwdGl2ZSAmJiBbJ3RyYW5zZm9ybScsICd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnXS5zb21lKGZ1bmN0aW9uIChwcm9wZXJ0eSkge1xuICAgICAgcmV0dXJuIHRyYW5zaXRpb25Qcm9wZXJ0eS5pbmRleE9mKHByb3BlcnR5KSA+PSAwO1xuICAgIH0pKSB7XG4gICAgICBjb25zb2xlLndhcm4oWydQb3BwZXI6IERldGVjdGVkIENTUyB0cmFuc2l0aW9ucyBvbiBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZycsICdDU1MgcHJvcGVydGllczogXCJ0cmFuc2Zvcm1cIiwgXCJ0b3BcIiwgXCJyaWdodFwiLCBcImJvdHRvbVwiLCBcImxlZnRcIi4nLCAnXFxuXFxuJywgJ0Rpc2FibGUgdGhlIFwiY29tcHV0ZVN0eWxlc1wiIG1vZGlmaWVyXFwncyBgYWRhcHRpdmVgIG9wdGlvbiB0byBhbGxvdycsICdmb3Igc21vb3RoIHRyYW5zaXRpb25zLCBvciByZW1vdmUgdGhlc2UgcHJvcGVydGllcyBmcm9tIHRoZSBDU1MnLCAndHJhbnNpdGlvbiBkZWNsYXJhdGlvbiBvbiB0aGUgcG9wcGVyIGVsZW1lbnQgaWYgb25seSB0cmFuc2l0aW9uaW5nJywgJ29wYWNpdHkgb3IgYmFja2dyb3VuZC1jb2xvciBmb3IgZXhhbXBsZS4nLCAnXFxuXFxuJywgJ1dlIHJlY29tbWVuZCB1c2luZyB0aGUgcG9wcGVyIGVsZW1lbnQgYXMgYSB3cmFwcGVyIGFyb3VuZCBhbiBpbm5lcicsICdlbGVtZW50IHRoYXQgY2FuIGhhdmUgYW55IENTUyBwcm9wZXJ0eSB0cmFuc2l0aW9uZWQgZm9yIGFuaW1hdGlvbnMuJ10uam9pbignICcpKTtcbiAgICB9XG4gIH1cblxuICB2YXIgY29tbW9uU3R5bGVzID0ge1xuICAgIHBsYWNlbWVudDogZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpLFxuICAgIHBvcHBlcjogc3RhdGUuZWxlbWVudHMucG9wcGVyLFxuICAgIHBvcHBlclJlY3Q6IHN0YXRlLnJlY3RzLnBvcHBlcixcbiAgICBncHVBY2NlbGVyYXRpb246IGdwdUFjY2VsZXJhdGlvblxuICB9O1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMgIT0gbnVsbCkge1xuICAgIHN0YXRlLnN0eWxlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5zdHlsZXMucG9wcGVyLCBtYXBUb1N0eWxlcyhPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIHtcbiAgICAgIG9mZnNldHM6IHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyxcbiAgICAgIHBvc2l0aW9uOiBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5LFxuICAgICAgYWRhcHRpdmU6IGFkYXB0aXZlLFxuICAgICAgcm91bmRPZmZzZXRzOiByb3VuZE9mZnNldHNcbiAgICB9KSkpO1xuICB9XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEuYXJyb3cgIT0gbnVsbCkge1xuICAgIHN0YXRlLnN0eWxlcy5hcnJvdyA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnN0eWxlcy5hcnJvdywgbWFwVG9TdHlsZXMoT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCB7XG4gICAgICBvZmZzZXRzOiBzdGF0ZS5tb2RpZmllcnNEYXRhLmFycm93LFxuICAgICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgICBhZGFwdGl2ZTogZmFsc2UsXG4gICAgICByb3VuZE9mZnNldHM6IHJvdW5kT2Zmc2V0c1xuICAgIH0pKSk7XG4gIH1cblxuICBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyLCB7XG4gICAgJ2RhdGEtcG9wcGVyLXBsYWNlbWVudCc6IHN0YXRlLnBsYWNlbWVudFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2NvbXB1dGVTdHlsZXMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ2JlZm9yZVdyaXRlJyxcbiAgZm46IGNvbXB1dGVTdHlsZXMsXG4gIGRhdGE6IHt9XG59OyIsImltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRXaW5kb3cuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG52YXIgcGFzc2l2ZSA9IHtcbiAgcGFzc2l2ZTogdHJ1ZVxufTtcblxuZnVuY3Rpb24gZWZmZWN0KF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIGluc3RhbmNlID0gX3JlZi5pbnN0YW5jZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnM7XG4gIHZhciBfb3B0aW9ucyRzY3JvbGwgPSBvcHRpb25zLnNjcm9sbCxcbiAgICAgIHNjcm9sbCA9IF9vcHRpb25zJHNjcm9sbCA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHNjcm9sbCxcbiAgICAgIF9vcHRpb25zJHJlc2l6ZSA9IG9wdGlvbnMucmVzaXplLFxuICAgICAgcmVzaXplID0gX29wdGlvbnMkcmVzaXplID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkcmVzaXplO1xuICB2YXIgd2luZG93ID0gZ2V0V2luZG93KHN0YXRlLmVsZW1lbnRzLnBvcHBlcik7XG4gIHZhciBzY3JvbGxQYXJlbnRzID0gW10uY29uY2F0KHN0YXRlLnNjcm9sbFBhcmVudHMucmVmZXJlbmNlLCBzdGF0ZS5zY3JvbGxQYXJlbnRzLnBvcHBlcik7XG5cbiAgaWYgKHNjcm9sbCkge1xuICAgIHNjcm9sbFBhcmVudHMuZm9yRWFjaChmdW5jdGlvbiAoc2Nyb2xsUGFyZW50KSB7XG4gICAgICBzY3JvbGxQYXJlbnQuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChyZXNpemUpIHtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgfVxuXG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgaWYgKHNjcm9sbCkge1xuICAgICAgc2Nyb2xsUGFyZW50cy5mb3JFYWNoKGZ1bmN0aW9uIChzY3JvbGxQYXJlbnQpIHtcbiAgICAgICAgc2Nyb2xsUGFyZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAocmVzaXplKSB7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgaW5zdGFuY2UudXBkYXRlLCBwYXNzaXZlKTtcbiAgICB9XG4gIH07XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdldmVudExpc3RlbmVycycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnd3JpdGUnLFxuICBmbjogZnVuY3Rpb24gZm4oKSB7fSxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIGRhdGE6IHt9XG59OyIsInZhciBoYXNoID0ge1xuICBsZWZ0OiAncmlnaHQnLFxuICByaWdodDogJ2xlZnQnLFxuICBib3R0b206ICd0b3AnLFxuICB0b3A6ICdib3R0b20nXG59O1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQucmVwbGFjZSgvbGVmdHxyaWdodHxib3R0b218dG9wL2csIGZ1bmN0aW9uIChtYXRjaGVkKSB7XG4gICAgcmV0dXJuIGhhc2hbbWF0Y2hlZF07XG4gIH0pO1xufSIsInZhciBoYXNoID0ge1xuICBzdGFydDogJ2VuZCcsXG4gIGVuZDogJ3N0YXJ0J1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL3N0YXJ0fGVuZC9nLCBmdW5jdGlvbiAobWF0Y2hlZCkge1xuICAgIHJldHVybiBoYXNoW21hdGNoZWRdO1xuICB9KTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0V2luZG93U2Nyb2xsKG5vZGUpIHtcbiAgdmFyIHdpbiA9IGdldFdpbmRvdyhub2RlKTtcbiAgdmFyIHNjcm9sbExlZnQgPSB3aW4ucGFnZVhPZmZzZXQ7XG4gIHZhciBzY3JvbGxUb3AgPSB3aW4ucGFnZVlPZmZzZXQ7XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogc2Nyb2xsTGVmdCxcbiAgICBzY3JvbGxUb3A6IHNjcm9sbFRvcFxuICB9O1xufSIsImltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4vZ2V0Qm91bmRpbmdDbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCkge1xuICAvLyBJZiA8aHRtbD4gaGFzIGEgQ1NTIHdpZHRoIGdyZWF0ZXIgdGhhbiB0aGUgdmlld3BvcnQsIHRoZW4gdGhpcyB3aWxsIGJlXG4gIC8vIGluY29ycmVjdCBmb3IgUlRMLlxuICAvLyBQb3BwZXIgMSBpcyBicm9rZW4gaW4gdGhpcyBjYXNlIGFuZCBuZXZlciBoYWQgYSBidWcgcmVwb3J0IHNvIGxldCdzIGFzc3VtZVxuICAvLyBpdCdzIG5vdCBhbiBpc3N1ZS4gSSBkb24ndCB0aGluayBhbnlvbmUgZXZlciBzcGVjaWZpZXMgd2lkdGggb24gPGh0bWw+XG4gIC8vIGFueXdheS5cbiAgLy8gQnJvd3NlcnMgd2hlcmUgdGhlIGxlZnQgc2Nyb2xsYmFyIGRvZXNuJ3QgY2F1c2UgYW4gaXNzdWUgcmVwb3J0IGAwYCBmb3JcbiAgLy8gdGhpcyAoZS5nLiBFZGdlIDIwMTksIElFMTEsIFNhZmFyaSlcbiAgcmV0dXJuIGdldEJvdW5kaW5nQ2xpZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpLmxlZnQgKyBnZXRXaW5kb3dTY3JvbGwoZWxlbWVudCkuc2Nyb2xsTGVmdDtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFZpZXdwb3J0UmVjdChlbGVtZW50KSB7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIHZhciBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICB2YXIgdmlzdWFsVmlld3BvcnQgPSB3aW4udmlzdWFsVmlld3BvcnQ7XG4gIHZhciB3aWR0aCA9IGh0bWwuY2xpZW50V2lkdGg7XG4gIHZhciBoZWlnaHQgPSBodG1sLmNsaWVudEhlaWdodDtcbiAgdmFyIHggPSAwO1xuICB2YXIgeSA9IDA7IC8vIE5COiBUaGlzIGlzbid0IHN1cHBvcnRlZCBvbiBpT1MgPD0gMTIuIElmIHRoZSBrZXlib2FyZCBpcyBvcGVuLCB0aGUgcG9wcGVyXG4gIC8vIGNhbiBiZSBvYnNjdXJlZCB1bmRlcm5lYXRoIGl0LlxuICAvLyBBbHNvLCBgaHRtbC5jbGllbnRIZWlnaHRgIGFkZHMgdGhlIGJvdHRvbSBiYXIgaGVpZ2h0IGluIFNhZmFyaSBpT1MsIGV2ZW5cbiAgLy8gaWYgaXQgaXNuJ3Qgb3Blbiwgc28gaWYgdGhpcyBpc24ndCBhdmFpbGFibGUsIHRoZSBwb3BwZXIgd2lsbCBiZSBkZXRlY3RlZFxuICAvLyB0byBvdmVyZmxvdyB0aGUgYm90dG9tIG9mIHRoZSBzY3JlZW4gdG9vIGVhcmx5LlxuXG4gIGlmICh2aXN1YWxWaWV3cG9ydCkge1xuICAgIHdpZHRoID0gdmlzdWFsVmlld3BvcnQud2lkdGg7XG4gICAgaGVpZ2h0ID0gdmlzdWFsVmlld3BvcnQuaGVpZ2h0OyAvLyBVc2VzIExheW91dCBWaWV3cG9ydCAobGlrZSBDaHJvbWU7IFNhZmFyaSBkb2VzIG5vdCBjdXJyZW50bHkpXG4gICAgLy8gSW4gQ2hyb21lLCBpdCByZXR1cm5zIGEgdmFsdWUgdmVyeSBjbG9zZSB0byAwICgrLy0pIGJ1dCBjb250YWlucyByb3VuZGluZ1xuICAgIC8vIGVycm9ycyBkdWUgdG8gZmxvYXRpbmcgcG9pbnQgbnVtYmVycywgc28gd2UgbmVlZCB0byBjaGVjayBwcmVjaXNpb24uXG4gICAgLy8gU2FmYXJpIHJldHVybnMgYSBudW1iZXIgPD0gMCwgdXN1YWxseSA8IC0xIHdoZW4gcGluY2gtem9vbWVkXG4gICAgLy8gRmVhdHVyZSBkZXRlY3Rpb24gZmFpbHMgaW4gbW9iaWxlIGVtdWxhdGlvbiBtb2RlIGluIENocm9tZS5cbiAgICAvLyBNYXRoLmFicyh3aW4uaW5uZXJXaWR0aCAvIHZpc3VhbFZpZXdwb3J0LnNjYWxlIC0gdmlzdWFsVmlld3BvcnQud2lkdGgpIDxcbiAgICAvLyAwLjAwMVxuICAgIC8vIEZhbGxiYWNrIGhlcmU6IFwiTm90IFNhZmFyaVwiIHVzZXJBZ2VudFxuXG4gICAgaWYgKCEvXigoPyFjaHJvbWV8YW5kcm9pZCkuKSpzYWZhcmkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpKSB7XG4gICAgICB4ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0TGVmdDtcbiAgICAgIHkgPSB2aXN1YWxWaWV3cG9ydC5vZmZzZXRUb3A7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgeDogeCArIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCksXG4gICAgeTogeVxuICB9O1xufSIsImltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsQmFyWCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbC5qc1wiO1xuaW1wb3J0IHsgbWF4IH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjsgLy8gR2V0cyB0aGUgZW50aXJlIHNpemUgb2YgdGhlIHNjcm9sbGFibGUgZG9jdW1lbnQgYXJlYSwgZXZlbiBleHRlbmRpbmcgb3V0c2lkZVxuLy8gb2YgdGhlIGA8aHRtbD5gIGFuZCBgPGJvZHk+YCByZWN0IGJvdW5kcyBpZiBob3Jpem9udGFsbHkgc2Nyb2xsYWJsZVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXREb2N1bWVudFJlY3QoZWxlbWVudCkge1xuICB2YXIgX2VsZW1lbnQkb3duZXJEb2N1bWVuO1xuXG4gIHZhciBodG1sID0gZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpO1xuICB2YXIgd2luU2Nyb2xsID0gZ2V0V2luZG93U2Nyb2xsKGVsZW1lbnQpO1xuICB2YXIgYm9keSA9IChfZWxlbWVudCRvd25lckRvY3VtZW4gPSBlbGVtZW50Lm93bmVyRG9jdW1lbnQpID09IG51bGwgPyB2b2lkIDAgOiBfZWxlbWVudCRvd25lckRvY3VtZW4uYm9keTtcbiAgdmFyIHdpZHRoID0gbWF4KGh0bWwuc2Nyb2xsV2lkdGgsIGh0bWwuY2xpZW50V2lkdGgsIGJvZHkgPyBib2R5LnNjcm9sbFdpZHRoIDogMCwgYm9keSA/IGJvZHkuY2xpZW50V2lkdGggOiAwKTtcbiAgdmFyIGhlaWdodCA9IG1heChodG1sLnNjcm9sbEhlaWdodCwgaHRtbC5jbGllbnRIZWlnaHQsIGJvZHkgPyBib2R5LnNjcm9sbEhlaWdodCA6IDAsIGJvZHkgPyBib2R5LmNsaWVudEhlaWdodCA6IDApO1xuICB2YXIgeCA9IC13aW5TY3JvbGwuc2Nyb2xsTGVmdCArIGdldFdpbmRvd1Njcm9sbEJhclgoZWxlbWVudCk7XG4gIHZhciB5ID0gLXdpblNjcm9sbC5zY3JvbGxUb3A7XG5cbiAgaWYgKGdldENvbXB1dGVkU3R5bGUoYm9keSB8fCBodG1sKS5kaXJlY3Rpb24gPT09ICdydGwnKSB7XG4gICAgeCArPSBtYXgoaHRtbC5jbGllbnRXaWR0aCwgYm9keSA/IGJvZHkuY2xpZW50V2lkdGggOiAwKSAtIHdpZHRoO1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogd2lkdGgsXG4gICAgaGVpZ2h0OiBoZWlnaHQsXG4gICAgeDogeCxcbiAgICB5OiB5XG4gIH07XG59IiwiaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaXNTY3JvbGxQYXJlbnQoZWxlbWVudCkge1xuICAvLyBGaXJlZm94IHdhbnRzIHVzIHRvIGNoZWNrIGAteGAgYW5kIGAteWAgdmFyaWF0aW9ucyBhcyB3ZWxsXG4gIHZhciBfZ2V0Q29tcHV0ZWRTdHlsZSA9IGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCksXG4gICAgICBvdmVyZmxvdyA9IF9nZXRDb21wdXRlZFN0eWxlLm92ZXJmbG93LFxuICAgICAgb3ZlcmZsb3dYID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3dYLFxuICAgICAgb3ZlcmZsb3dZID0gX2dldENvbXB1dGVkU3R5bGUub3ZlcmZsb3dZO1xuXG4gIHJldHVybiAvYXV0b3xzY3JvbGx8b3ZlcmxheXxoaWRkZW4vLnRlc3Qob3ZlcmZsb3cgKyBvdmVyZmxvd1kgKyBvdmVyZmxvd1gpO1xufSIsImltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0U2Nyb2xsUGFyZW50KG5vZGUpIHtcbiAgaWYgKFsnaHRtbCcsICdib2R5JywgJyNkb2N1bWVudCddLmluZGV4T2YoZ2V0Tm9kZU5hbWUobm9kZSkpID49IDApIHtcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBhc3N1bWUgYm9keSBpcyBhbHdheXMgYXZhaWxhYmxlXG4gICAgcmV0dXJuIG5vZGUub3duZXJEb2N1bWVudC5ib2R5O1xuICB9XG5cbiAgaWYgKGlzSFRNTEVsZW1lbnQobm9kZSkgJiYgaXNTY3JvbGxQYXJlbnQobm9kZSkpIHtcbiAgICByZXR1cm4gbm9kZTtcbiAgfVxuXG4gIHJldHVybiBnZXRTY3JvbGxQYXJlbnQoZ2V0UGFyZW50Tm9kZShub2RlKSk7XG59IiwiaW1wb3J0IGdldFNjcm9sbFBhcmVudCBmcm9tIFwiLi9nZXRTY3JvbGxQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSBcIi4vaXNTY3JvbGxQYXJlbnQuanNcIjtcbi8qXG5naXZlbiBhIERPTSBlbGVtZW50LCByZXR1cm4gdGhlIGxpc3Qgb2YgYWxsIHNjcm9sbCBwYXJlbnRzLCB1cCB0aGUgbGlzdCBvZiBhbmNlc29yc1xudW50aWwgd2UgZ2V0IHRvIHRoZSB0b3Agd2luZG93IG9iamVjdC4gVGhpcyBsaXN0IGlzIHdoYXQgd2UgYXR0YWNoIHNjcm9sbCBsaXN0ZW5lcnNcbnRvLCBiZWNhdXNlIGlmIGFueSBvZiB0aGVzZSBwYXJlbnQgZWxlbWVudHMgc2Nyb2xsLCB3ZSdsbCBuZWVkIHRvIHJlLWNhbGN1bGF0ZSB0aGVcbnJlZmVyZW5jZSBlbGVtZW50J3MgcG9zaXRpb24uXG4qL1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsaXN0U2Nyb2xsUGFyZW50cyhlbGVtZW50LCBsaXN0KSB7XG4gIHZhciBfZWxlbWVudCRvd25lckRvY3VtZW47XG5cbiAgaWYgKGxpc3QgPT09IHZvaWQgMCkge1xuICAgIGxpc3QgPSBbXTtcbiAgfVxuXG4gIHZhciBzY3JvbGxQYXJlbnQgPSBnZXRTY3JvbGxQYXJlbnQoZWxlbWVudCk7XG4gIHZhciBpc0JvZHkgPSBzY3JvbGxQYXJlbnQgPT09ICgoX2VsZW1lbnQkb3duZXJEb2N1bWVuID0gZWxlbWVudC5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2VsZW1lbnQkb3duZXJEb2N1bWVuLmJvZHkpO1xuICB2YXIgd2luID0gZ2V0V2luZG93KHNjcm9sbFBhcmVudCk7XG4gIHZhciB0YXJnZXQgPSBpc0JvZHkgPyBbd2luXS5jb25jYXQod2luLnZpc3VhbFZpZXdwb3J0IHx8IFtdLCBpc1Njcm9sbFBhcmVudChzY3JvbGxQYXJlbnQpID8gc2Nyb2xsUGFyZW50IDogW10pIDogc2Nyb2xsUGFyZW50O1xuICB2YXIgdXBkYXRlZExpc3QgPSBsaXN0LmNvbmNhdCh0YXJnZXQpO1xuICByZXR1cm4gaXNCb2R5ID8gdXBkYXRlZExpc3QgOiAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXTogaXNCb2R5IHRlbGxzIHVzIHRhcmdldCB3aWxsIGJlIGFuIEhUTUxFbGVtZW50IGhlcmVcbiAgdXBkYXRlZExpc3QuY29uY2F0KGxpc3RTY3JvbGxQYXJlbnRzKGdldFBhcmVudE5vZGUodGFyZ2V0KSkpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHJlY3RUb0NsaWVudFJlY3QocmVjdCkge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgcmVjdCwge1xuICAgIGxlZnQ6IHJlY3QueCxcbiAgICB0b3A6IHJlY3QueSxcbiAgICByaWdodDogcmVjdC54ICsgcmVjdC53aWR0aCxcbiAgICBib3R0b206IHJlY3QueSArIHJlY3QuaGVpZ2h0XG4gIH0pO1xufSIsImltcG9ydCB7IHZpZXdwb3J0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZ2V0Vmlld3BvcnRSZWN0IGZyb20gXCIuL2dldFZpZXdwb3J0UmVjdC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50UmVjdCBmcm9tIFwiLi9nZXREb2N1bWVudFJlY3QuanNcIjtcbmltcG9ydCBsaXN0U2Nyb2xsUGFyZW50cyBmcm9tIFwiLi9saXN0U2Nyb2xsUGFyZW50cy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgeyBpc0VsZW1lbnQsIGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldFBhcmVudE5vZGUgZnJvbSBcIi4vZ2V0UGFyZW50Tm9kZS5qc1wiO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gXCIuL2NvbnRhaW5zLmpzXCI7XG5pbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCByZWN0VG9DbGllbnRSZWN0IGZyb20gXCIuLi91dGlscy9yZWN0VG9DbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgeyBtYXgsIG1pbiB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudCk7XG4gIHJlY3QudG9wID0gcmVjdC50b3AgKyBlbGVtZW50LmNsaWVudFRvcDtcbiAgcmVjdC5sZWZ0ID0gcmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRMZWZ0O1xuICByZWN0LmJvdHRvbSA9IHJlY3QudG9wICsgZWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIHJlY3QucmlnaHQgPSByZWN0LmxlZnQgKyBlbGVtZW50LmNsaWVudFdpZHRoO1xuICByZWN0LndpZHRoID0gZWxlbWVudC5jbGllbnRXaWR0aDtcbiAgcmVjdC5oZWlnaHQgPSBlbGVtZW50LmNsaWVudEhlaWdodDtcbiAgcmVjdC54ID0gcmVjdC5sZWZ0O1xuICByZWN0LnkgPSByZWN0LnRvcDtcbiAgcmV0dXJuIHJlY3Q7XG59XG5cbmZ1bmN0aW9uIGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGNsaXBwaW5nUGFyZW50KSB7XG4gIHJldHVybiBjbGlwcGluZ1BhcmVudCA9PT0gdmlld3BvcnQgPyByZWN0VG9DbGllbnRSZWN0KGdldFZpZXdwb3J0UmVjdChlbGVtZW50KSkgOiBpc0hUTUxFbGVtZW50KGNsaXBwaW5nUGFyZW50KSA/IGdldElubmVyQm91bmRpbmdDbGllbnRSZWN0KGNsaXBwaW5nUGFyZW50KSA6IHJlY3RUb0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRSZWN0KGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KSkpO1xufSAvLyBBIFwiY2xpcHBpbmcgcGFyZW50XCIgaXMgYW4gb3ZlcmZsb3dhYmxlIGNvbnRhaW5lciB3aXRoIHRoZSBjaGFyYWN0ZXJpc3RpYyBvZlxuLy8gY2xpcHBpbmcgKG9yIGhpZGluZykgb3ZlcmZsb3dpbmcgZWxlbWVudHMgd2l0aCBhIHBvc2l0aW9uIGRpZmZlcmVudCBmcm9tXG4vLyBgaW5pdGlhbGBcblxuXG5mdW5jdGlvbiBnZXRDbGlwcGluZ1BhcmVudHMoZWxlbWVudCkge1xuICB2YXIgY2xpcHBpbmdQYXJlbnRzID0gbGlzdFNjcm9sbFBhcmVudHMoZ2V0UGFyZW50Tm9kZShlbGVtZW50KSk7XG4gIHZhciBjYW5Fc2NhcGVDbGlwcGluZyA9IFsnYWJzb2x1dGUnLCAnZml4ZWQnXS5pbmRleE9mKGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkucG9zaXRpb24pID49IDA7XG4gIHZhciBjbGlwcGVyRWxlbWVudCA9IGNhbkVzY2FwZUNsaXBwaW5nICYmIGlzSFRNTEVsZW1lbnQoZWxlbWVudCkgPyBnZXRPZmZzZXRQYXJlbnQoZWxlbWVudCkgOiBlbGVtZW50O1xuXG4gIGlmICghaXNFbGVtZW50KGNsaXBwZXJFbGVtZW50KSkge1xuICAgIHJldHVybiBbXTtcbiAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svZmxvdy9pc3N1ZXMvMTQxNFxuXG5cbiAgcmV0dXJuIGNsaXBwaW5nUGFyZW50cy5maWx0ZXIoZnVuY3Rpb24gKGNsaXBwaW5nUGFyZW50KSB7XG4gICAgcmV0dXJuIGlzRWxlbWVudChjbGlwcGluZ1BhcmVudCkgJiYgY29udGFpbnMoY2xpcHBpbmdQYXJlbnQsIGNsaXBwZXJFbGVtZW50KSAmJiBnZXROb2RlTmFtZShjbGlwcGluZ1BhcmVudCkgIT09ICdib2R5JztcbiAgfSk7XG59IC8vIEdldHMgdGhlIG1heGltdW0gYXJlYSB0aGF0IHRoZSBlbGVtZW50IGlzIHZpc2libGUgaW4gZHVlIHRvIGFueSBudW1iZXIgb2Zcbi8vIGNsaXBwaW5nIHBhcmVudHNcblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDbGlwcGluZ1JlY3QoZWxlbWVudCwgYm91bmRhcnksIHJvb3RCb3VuZGFyeSkge1xuICB2YXIgbWFpbkNsaXBwaW5nUGFyZW50cyA9IGJvdW5kYXJ5ID09PSAnY2xpcHBpbmdQYXJlbnRzJyA/IGdldENsaXBwaW5nUGFyZW50cyhlbGVtZW50KSA6IFtdLmNvbmNhdChib3VuZGFyeSk7XG4gIHZhciBjbGlwcGluZ1BhcmVudHMgPSBbXS5jb25jYXQobWFpbkNsaXBwaW5nUGFyZW50cywgW3Jvb3RCb3VuZGFyeV0pO1xuICB2YXIgZmlyc3RDbGlwcGluZ1BhcmVudCA9IGNsaXBwaW5nUGFyZW50c1swXTtcbiAgdmFyIGNsaXBwaW5nUmVjdCA9IGNsaXBwaW5nUGFyZW50cy5yZWR1Y2UoZnVuY3Rpb24gKGFjY1JlY3QsIGNsaXBwaW5nUGFyZW50KSB7XG4gICAgdmFyIHJlY3QgPSBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBjbGlwcGluZ1BhcmVudCk7XG4gICAgYWNjUmVjdC50b3AgPSBtYXgocmVjdC50b3AsIGFjY1JlY3QudG9wKTtcbiAgICBhY2NSZWN0LnJpZ2h0ID0gbWluKHJlY3QucmlnaHQsIGFjY1JlY3QucmlnaHQpO1xuICAgIGFjY1JlY3QuYm90dG9tID0gbWluKHJlY3QuYm90dG9tLCBhY2NSZWN0LmJvdHRvbSk7XG4gICAgYWNjUmVjdC5sZWZ0ID0gbWF4KHJlY3QubGVmdCwgYWNjUmVjdC5sZWZ0KTtcbiAgICByZXR1cm4gYWNjUmVjdDtcbiAgfSwgZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgZmlyc3RDbGlwcGluZ1BhcmVudCkpO1xuICBjbGlwcGluZ1JlY3Qud2lkdGggPSBjbGlwcGluZ1JlY3QucmlnaHQgLSBjbGlwcGluZ1JlY3QubGVmdDtcbiAgY2xpcHBpbmdSZWN0LmhlaWdodCA9IGNsaXBwaW5nUmVjdC5ib3R0b20gLSBjbGlwcGluZ1JlY3QudG9wO1xuICBjbGlwcGluZ1JlY3QueCA9IGNsaXBwaW5nUmVjdC5sZWZ0O1xuICBjbGlwcGluZ1JlY3QueSA9IGNsaXBwaW5nUmVjdC50b3A7XG4gIHJldHVybiBjbGlwcGluZ1JlY3Q7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnNwbGl0KCctJylbMV07XG59IiwiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4vZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4vZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgeyB0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnQsIHN0YXJ0LCBlbmQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbXB1dGVPZmZzZXRzKF9yZWYpIHtcbiAgdmFyIHJlZmVyZW5jZSA9IF9yZWYucmVmZXJlbmNlLFxuICAgICAgZWxlbWVudCA9IF9yZWYuZWxlbWVudCxcbiAgICAgIHBsYWNlbWVudCA9IF9yZWYucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IHBsYWNlbWVudCA/IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSA6IG51bGw7XG4gIHZhciB2YXJpYXRpb24gPSBwbGFjZW1lbnQgPyBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA6IG51bGw7XG4gIHZhciBjb21tb25YID0gcmVmZXJlbmNlLnggKyByZWZlcmVuY2Uud2lkdGggLyAyIC0gZWxlbWVudC53aWR0aCAvIDI7XG4gIHZhciBjb21tb25ZID0gcmVmZXJlbmNlLnkgKyByZWZlcmVuY2UuaGVpZ2h0IC8gMiAtIGVsZW1lbnQuaGVpZ2h0IC8gMjtcbiAgdmFyIG9mZnNldHM7XG5cbiAgc3dpdGNoIChiYXNlUGxhY2VtZW50KSB7XG4gICAgY2FzZSB0b3A6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSAtIGVsZW1lbnQuaGVpZ2h0XG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIGJvdHRvbTpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IGNvbW1vblgsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSByaWdodDpcbiAgICAgIG9mZnNldHMgPSB7XG4gICAgICAgIHg6IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBjYXNlIGxlZnQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCAtIGVsZW1lbnQud2lkdGgsXG4gICAgICAgIHk6IGNvbW1vbllcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGRlZmF1bHQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnlcbiAgICAgIH07XG4gIH1cblxuICB2YXIgbWFpbkF4aXMgPSBiYXNlUGxhY2VtZW50ID8gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpIDogbnVsbDtcblxuICBpZiAobWFpbkF4aXMgIT0gbnVsbCkge1xuICAgIHZhciBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuXG4gICAgc3dpdGNoICh2YXJpYXRpb24pIHtcbiAgICAgIGNhc2Ugc3RhcnQ6XG4gICAgICAgIG9mZnNldHNbbWFpbkF4aXNdID0gb2Zmc2V0c1ttYWluQXhpc10gLSAocmVmZXJlbmNlW2xlbl0gLyAyIC0gZWxlbWVudFtsZW5dIC8gMik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBjYXNlIGVuZDpcbiAgICAgICAgb2Zmc2V0c1ttYWluQXhpc10gPSBvZmZzZXRzW21haW5BeGlzXSArIChyZWZlcmVuY2VbbGVuXSAvIDIgLSBlbGVtZW50W2xlbl0gLyAyKTtcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9mZnNldHM7XG59IiwiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldENsaXBwaW5nUmVjdCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldENsaXBwaW5nUmVjdC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGNvbXB1dGVPZmZzZXRzIGZyb20gXCIuL2NvbXB1dGVPZmZzZXRzLmpzXCI7XG5pbXBvcnQgcmVjdFRvQ2xpZW50UmVjdCBmcm9tIFwiLi9yZWN0VG9DbGllbnRSZWN0LmpzXCI7XG5pbXBvcnQgeyBjbGlwcGluZ1BhcmVudHMsIHJlZmVyZW5jZSwgcG9wcGVyLCBib3R0b20sIHRvcCwgcmlnaHQsIGJhc2VQbGFjZW1lbnRzLCB2aWV3cG9ydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50IH0gZnJvbSBcIi4uL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgbWVyZ2VQYWRkaW5nT2JqZWN0IGZyb20gXCIuL21lcmdlUGFkZGluZ09iamVjdC5qc1wiO1xuaW1wb3J0IGV4cGFuZFRvSGFzaE1hcCBmcm9tIFwiLi9leHBhbmRUb0hhc2hNYXAuanNcIjsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIF9vcHRpb25zID0gb3B0aW9ucyxcbiAgICAgIF9vcHRpb25zJHBsYWNlbWVudCA9IF9vcHRpb25zLnBsYWNlbWVudCxcbiAgICAgIHBsYWNlbWVudCA9IF9vcHRpb25zJHBsYWNlbWVudCA9PT0gdm9pZCAwID8gc3RhdGUucGxhY2VtZW50IDogX29wdGlvbnMkcGxhY2VtZW50LFxuICAgICAgX29wdGlvbnMkYm91bmRhcnkgPSBfb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIGJvdW5kYXJ5ID0gX29wdGlvbnMkYm91bmRhcnkgPT09IHZvaWQgMCA/IGNsaXBwaW5nUGFyZW50cyA6IF9vcHRpb25zJGJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMkcm9vdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyB2aWV3cG9ydCA6IF9vcHRpb25zJHJvb3RCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJGVsZW1lbnRDb250ZSA9IF9vcHRpb25zLmVsZW1lbnRDb250ZXh0LFxuICAgICAgZWxlbWVudENvbnRleHQgPSBfb3B0aW9ucyRlbGVtZW50Q29udGUgPT09IHZvaWQgMCA/IHBvcHBlciA6IF9vcHRpb25zJGVsZW1lbnRDb250ZSxcbiAgICAgIF9vcHRpb25zJGFsdEJvdW5kYXJ5ID0gX29wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IF9vcHRpb25zJGFsdEJvdW5kYXJ5ID09PSB2b2lkIDAgPyBmYWxzZSA6IF9vcHRpb25zJGFsdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkcGFkZGluZyA9IF9vcHRpb25zLnBhZGRpbmcsXG4gICAgICBwYWRkaW5nID0gX29wdGlvbnMkcGFkZGluZyA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJHBhZGRpbmc7XG4gIHZhciBwYWRkaW5nT2JqZWN0ID0gbWVyZ2VQYWRkaW5nT2JqZWN0KHR5cGVvZiBwYWRkaW5nICE9PSAnbnVtYmVyJyA/IHBhZGRpbmcgOiBleHBhbmRUb0hhc2hNYXAocGFkZGluZywgYmFzZVBsYWNlbWVudHMpKTtcbiAgdmFyIGFsdENvbnRleHQgPSBlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyID8gcmVmZXJlbmNlIDogcG9wcGVyO1xuICB2YXIgcmVmZXJlbmNlRWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbYWx0Qm91bmRhcnkgPyBhbHRDb250ZXh0IDogZWxlbWVudENvbnRleHRdO1xuICB2YXIgY2xpcHBpbmdDbGllbnRSZWN0ID0gZ2V0Q2xpcHBpbmdSZWN0KGlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQgOiBlbGVtZW50LmNvbnRleHRFbGVtZW50IHx8IGdldERvY3VtZW50RWxlbWVudChzdGF0ZS5lbGVtZW50cy5wb3BwZXIpLCBib3VuZGFyeSwgcm9vdEJvdW5kYXJ5KTtcbiAgdmFyIHJlZmVyZW5jZUNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QocmVmZXJlbmNlRWxlbWVudCk7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gY29tcHV0ZU9mZnNldHMoe1xuICAgIHJlZmVyZW5jZTogcmVmZXJlbmNlQ2xpZW50UmVjdCxcbiAgICBlbGVtZW50OiBwb3BwZXJSZWN0LFxuICAgIHN0cmF0ZWd5OiAnYWJzb2x1dGUnLFxuICAgIHBsYWNlbWVudDogcGxhY2VtZW50XG4gIH0pO1xuICB2YXIgcG9wcGVyQ2xpZW50UmVjdCA9IHJlY3RUb0NsaWVudFJlY3QoT2JqZWN0LmFzc2lnbih7fSwgcG9wcGVyUmVjdCwgcG9wcGVyT2Zmc2V0cykpO1xuICB2YXIgZWxlbWVudENsaWVudFJlY3QgPSBlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyID8gcG9wcGVyQ2xpZW50UmVjdCA6IHJlZmVyZW5jZUNsaWVudFJlY3Q7IC8vIHBvc2l0aXZlID0gb3ZlcmZsb3dpbmcgdGhlIGNsaXBwaW5nIHJlY3RcbiAgLy8gMCBvciBuZWdhdGl2ZSA9IHdpdGhpbiB0aGUgY2xpcHBpbmcgcmVjdFxuXG4gIHZhciBvdmVyZmxvd09mZnNldHMgPSB7XG4gICAgdG9wOiBjbGlwcGluZ0NsaWVudFJlY3QudG9wIC0gZWxlbWVudENsaWVudFJlY3QudG9wICsgcGFkZGluZ09iamVjdC50b3AsXG4gICAgYm90dG9tOiBlbGVtZW50Q2xpZW50UmVjdC5ib3R0b20gLSBjbGlwcGluZ0NsaWVudFJlY3QuYm90dG9tICsgcGFkZGluZ09iamVjdC5ib3R0b20sXG4gICAgbGVmdDogY2xpcHBpbmdDbGllbnRSZWN0LmxlZnQgLSBlbGVtZW50Q2xpZW50UmVjdC5sZWZ0ICsgcGFkZGluZ09iamVjdC5sZWZ0LFxuICAgIHJpZ2h0OiBlbGVtZW50Q2xpZW50UmVjdC5yaWdodCAtIGNsaXBwaW5nQ2xpZW50UmVjdC5yaWdodCArIHBhZGRpbmdPYmplY3QucmlnaHRcbiAgfTtcbiAgdmFyIG9mZnNldERhdGEgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldDsgLy8gT2Zmc2V0cyBjYW4gYmUgYXBwbGllZCBvbmx5IHRvIHRoZSBwb3BwZXIgZWxlbWVudFxuXG4gIGlmIChlbGVtZW50Q29udGV4dCA9PT0gcG9wcGVyICYmIG9mZnNldERhdGEpIHtcbiAgICB2YXIgb2Zmc2V0ID0gb2Zmc2V0RGF0YVtwbGFjZW1lbnRdO1xuICAgIE9iamVjdC5rZXlzKG92ZXJmbG93T2Zmc2V0cykuZm9yRWFjaChmdW5jdGlvbiAoa2V5KSB7XG4gICAgICB2YXIgbXVsdGlwbHkgPSBbcmlnaHQsIGJvdHRvbV0uaW5kZXhPZihrZXkpID49IDAgPyAxIDogLTE7XG4gICAgICB2YXIgYXhpcyA9IFt0b3AsIGJvdHRvbV0uaW5kZXhPZihrZXkpID49IDAgPyAneScgOiAneCc7XG4gICAgICBvdmVyZmxvd09mZnNldHNba2V5XSArPSBvZmZzZXRbYXhpc10gKiBtdWx0aXBseTtcbiAgICB9KTtcbiAgfVxuXG4gIHJldHVybiBvdmVyZmxvd09mZnNldHM7XG59IiwiaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCB7IHZhcmlhdGlvblBsYWNlbWVudHMsIGJhc2VQbGFjZW1lbnRzLCBwbGFjZW1lbnRzIGFzIGFsbFBsYWNlbWVudHMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4vZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29tcHV0ZUF1dG9QbGFjZW1lbnQoc3RhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsXG4gICAgICBwbGFjZW1lbnQgPSBfb3B0aW9ucy5wbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeSA9IF9vcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gX29wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZyA9IF9vcHRpb25zLnBhZGRpbmcsXG4gICAgICBmbGlwVmFyaWF0aW9ucyA9IF9vcHRpb25zLmZsaXBWYXJpYXRpb25zLFxuICAgICAgX29wdGlvbnMkYWxsb3dlZEF1dG9QID0gX29wdGlvbnMuYWxsb3dlZEF1dG9QbGFjZW1lbnRzLFxuICAgICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzID0gX29wdGlvbnMkYWxsb3dlZEF1dG9QID09PSB2b2lkIDAgPyBhbGxQbGFjZW1lbnRzIDogX29wdGlvbnMkYWxsb3dlZEF1dG9QO1xuICB2YXIgdmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCk7XG4gIHZhciBwbGFjZW1lbnRzID0gdmFyaWF0aW9uID8gZmxpcFZhcmlhdGlvbnMgPyB2YXJpYXRpb25QbGFjZW1lbnRzIDogdmFyaWF0aW9uUGxhY2VtZW50cy5maWx0ZXIoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgIHJldHVybiBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSA9PT0gdmFyaWF0aW9uO1xuICB9KSA6IGJhc2VQbGFjZW1lbnRzO1xuICB2YXIgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGFsbG93ZWRBdXRvUGxhY2VtZW50cy5pbmRleE9mKHBsYWNlbWVudCkgPj0gMDtcbiAgfSk7XG5cbiAgaWYgKGFsbG93ZWRQbGFjZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgIGFsbG93ZWRQbGFjZW1lbnRzID0gcGxhY2VtZW50cztcblxuICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoWydQb3BwZXI6IFRoZSBgYWxsb3dlZEF1dG9QbGFjZW1lbnRzYCBvcHRpb24gZGlkIG5vdCBhbGxvdyBhbnknLCAncGxhY2VtZW50cy4gRW5zdXJlIHRoZSBgcGxhY2VtZW50YCBvcHRpb24gbWF0Y2hlcyB0aGUgdmFyaWF0aW9uJywgJ29mIHRoZSBhbGxvd2VkIHBsYWNlbWVudHMuJywgJ0ZvciBleGFtcGxlLCBcImF1dG9cIiBjYW5ub3QgYmUgdXNlZCB0byBhbGxvdyBcImJvdHRvbS1zdGFydFwiLicsICdVc2UgXCJhdXRvLXN0YXJ0XCIgaW5zdGVhZC4nXS5qb2luKCcgJykpO1xuICAgIH1cbiAgfSAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS10eXBlXTogRmxvdyBzZWVtcyB0byBoYXZlIHByb2JsZW1zIHdpdGggdHdvIGFycmF5IHVuaW9ucy4uLlxuXG5cbiAgdmFyIG92ZXJmbG93cyA9IGFsbG93ZWRQbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICBhY2NbcGxhY2VtZW50XSA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZ1xuICAgIH0pW2dldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KV07XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuICByZXR1cm4gT2JqZWN0LmtleXMob3ZlcmZsb3dzKS5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XG4gICAgcmV0dXJuIG92ZXJmbG93c1thXSAtIG92ZXJmbG93c1tiXTtcbiAgfSk7XG59IiwiaW1wb3J0IGdldE9wcG9zaXRlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRPcHBvc2l0ZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQuanNcIjtcbmltcG9ydCBkZXRlY3RPdmVyZmxvdyBmcm9tIFwiLi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCBjb21wdXRlQXV0b1BsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvY29tcHV0ZUF1dG9QbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IGJvdHRvbSwgdG9wLCBzdGFydCwgcmlnaHQsIGxlZnQsIGF1dG8gfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4uL3V0aWxzL2dldFZhcmlhdGlvbi5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmZ1bmN0aW9uIGdldEV4cGFuZGVkRmFsbGJhY2tQbGFjZW1lbnRzKHBsYWNlbWVudCkge1xuICBpZiAoZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpID09PSBhdXRvKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG5cbiAgdmFyIG9wcG9zaXRlUGxhY2VtZW50ID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgcmV0dXJuIFtnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChwbGFjZW1lbnQpLCBvcHBvc2l0ZVBsYWNlbWVudCwgZ2V0T3Bwb3NpdGVWYXJpYXRpb25QbGFjZW1lbnQob3Bwb3NpdGVQbGFjZW1lbnQpXTtcbn1cblxuZnVuY3Rpb24gZmxpcChfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXS5fc2tpcCkge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyRtYWluQXhpcyA9IG9wdGlvbnMubWFpbkF4aXMsXG4gICAgICBjaGVja01haW5BeGlzID0gX29wdGlvbnMkbWFpbkF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRtYWluQXhpcyxcbiAgICAgIF9vcHRpb25zJGFsdEF4aXMgPSBvcHRpb25zLmFsdEF4aXMsXG4gICAgICBjaGVja0FsdEF4aXMgPSBfb3B0aW9ucyRhbHRBeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkYWx0QXhpcyxcbiAgICAgIHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyA9IG9wdGlvbnMuZmFsbGJhY2tQbGFjZW1lbnRzLFxuICAgICAgcGFkZGluZyA9IG9wdGlvbnMucGFkZGluZyxcbiAgICAgIGJvdW5kYXJ5ID0gb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IG9wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnkgPSBvcHRpb25zLmFsdEJvdW5kYXJ5LFxuICAgICAgX29wdGlvbnMkZmxpcFZhcmlhdGlvID0gb3B0aW9ucy5mbGlwVmFyaWF0aW9ucyxcbiAgICAgIGZsaXBWYXJpYXRpb25zID0gX29wdGlvbnMkZmxpcFZhcmlhdGlvID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkZmxpcFZhcmlhdGlvLFxuICAgICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzID0gb3B0aW9ucy5hbGxvd2VkQXV0b1BsYWNlbWVudHM7XG4gIHZhciBwcmVmZXJyZWRQbGFjZW1lbnQgPSBzdGF0ZS5vcHRpb25zLnBsYWNlbWVudDtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHByZWZlcnJlZFBsYWNlbWVudCk7XG4gIHZhciBpc0Jhc2VQbGFjZW1lbnQgPSBiYXNlUGxhY2VtZW50ID09PSBwcmVmZXJyZWRQbGFjZW1lbnQ7XG4gIHZhciBmYWxsYmFja1BsYWNlbWVudHMgPSBzcGVjaWZpZWRGYWxsYmFja1BsYWNlbWVudHMgfHwgKGlzQmFzZVBsYWNlbWVudCB8fCAhZmxpcFZhcmlhdGlvbnMgPyBbZ2V0T3Bwb3NpdGVQbGFjZW1lbnQocHJlZmVycmVkUGxhY2VtZW50KV0gOiBnZXRFeHBhbmRlZEZhbGxiYWNrUGxhY2VtZW50cyhwcmVmZXJyZWRQbGFjZW1lbnQpKTtcbiAgdmFyIHBsYWNlbWVudHMgPSBbcHJlZmVycmVkUGxhY2VtZW50XS5jb25jYXQoZmFsbGJhY2tQbGFjZW1lbnRzKS5yZWR1Y2UoZnVuY3Rpb24gKGFjYywgcGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGFjYy5jb25jYXQoZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpID09PSBhdXRvID8gY29tcHV0ZUF1dG9QbGFjZW1lbnQoc3RhdGUsIHtcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgICBwYWRkaW5nOiBwYWRkaW5nLFxuICAgICAgZmxpcFZhcmlhdGlvbnM6IGZsaXBWYXJpYXRpb25zLFxuICAgICAgYWxsb3dlZEF1dG9QbGFjZW1lbnRzOiBhbGxvd2VkQXV0b1BsYWNlbWVudHNcbiAgICB9KSA6IHBsYWNlbWVudCk7XG4gIH0sIFtdKTtcbiAgdmFyIHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgY2hlY2tzTWFwID0gbmV3IE1hcCgpO1xuICB2YXIgbWFrZUZhbGxiYWNrQ2hlY2tzID0gdHJ1ZTtcbiAgdmFyIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudHNbMF07XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBwbGFjZW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgdmFyIHBsYWNlbWVudCA9IHBsYWNlbWVudHNbaV07XG5cbiAgICB2YXIgX2Jhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCk7XG5cbiAgICB2YXIgaXNTdGFydFZhcmlhdGlvbiA9IGdldFZhcmlhdGlvbihwbGFjZW1lbnQpID09PSBzdGFydDtcbiAgICB2YXIgaXNWZXJ0aWNhbCA9IFt0b3AsIGJvdHRvbV0uaW5kZXhPZihfYmFzZVBsYWNlbWVudCkgPj0gMDtcbiAgICB2YXIgbGVuID0gaXNWZXJ0aWNhbCA/ICd3aWR0aCcgOiAnaGVpZ2h0JztcbiAgICB2YXIgb3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIGFsdEJvdW5kYXJ5OiBhbHRCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmdcbiAgICB9KTtcbiAgICB2YXIgbWFpblZhcmlhdGlvblNpZGUgPSBpc1ZlcnRpY2FsID8gaXNTdGFydFZhcmlhdGlvbiA/IHJpZ2h0IDogbGVmdCA6IGlzU3RhcnRWYXJpYXRpb24gPyBib3R0b20gOiB0b3A7XG5cbiAgICBpZiAocmVmZXJlbmNlUmVjdFtsZW5dID4gcG9wcGVyUmVjdFtsZW5dKSB7XG4gICAgICBtYWluVmFyaWF0aW9uU2lkZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KG1haW5WYXJpYXRpb25TaWRlKTtcbiAgICB9XG5cbiAgICB2YXIgYWx0VmFyaWF0aW9uU2lkZSA9IGdldE9wcG9zaXRlUGxhY2VtZW50KG1haW5WYXJpYXRpb25TaWRlKTtcbiAgICB2YXIgY2hlY2tzID0gW107XG5cbiAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgY2hlY2tzLnB1c2gob3ZlcmZsb3dbX2Jhc2VQbGFjZW1lbnRdIDw9IDApO1xuICAgIH1cblxuICAgIGlmIChjaGVja0FsdEF4aXMpIHtcbiAgICAgIGNoZWNrcy5wdXNoKG92ZXJmbG93W21haW5WYXJpYXRpb25TaWRlXSA8PSAwLCBvdmVyZmxvd1thbHRWYXJpYXRpb25TaWRlXSA8PSAwKTtcbiAgICB9XG5cbiAgICBpZiAoY2hlY2tzLmV2ZXJ5KGZ1bmN0aW9uIChjaGVjaykge1xuICAgICAgcmV0dXJuIGNoZWNrO1xuICAgIH0pKSB7XG4gICAgICBmaXJzdEZpdHRpbmdQbGFjZW1lbnQgPSBwbGFjZW1lbnQ7XG4gICAgICBtYWtlRmFsbGJhY2tDaGVja3MgPSBmYWxzZTtcbiAgICAgIGJyZWFrO1xuICAgIH1cblxuICAgIGNoZWNrc01hcC5zZXQocGxhY2VtZW50LCBjaGVja3MpO1xuICB9XG5cbiAgaWYgKG1ha2VGYWxsYmFja0NoZWNrcykge1xuICAgIC8vIGAyYCBtYXkgYmUgZGVzaXJlZCBpbiBzb21lIGNhc2VzIOKAkyByZXNlYXJjaCBsYXRlclxuICAgIHZhciBudW1iZXJPZkNoZWNrcyA9IGZsaXBWYXJpYXRpb25zID8gMyA6IDE7XG5cbiAgICB2YXIgX2xvb3AgPSBmdW5jdGlvbiBfbG9vcChfaSkge1xuICAgICAgdmFyIGZpdHRpbmdQbGFjZW1lbnQgPSBwbGFjZW1lbnRzLmZpbmQoZnVuY3Rpb24gKHBsYWNlbWVudCkge1xuICAgICAgICB2YXIgY2hlY2tzID0gY2hlY2tzTWFwLmdldChwbGFjZW1lbnQpO1xuXG4gICAgICAgIGlmIChjaGVja3MpIHtcbiAgICAgICAgICByZXR1cm4gY2hlY2tzLnNsaWNlKDAsIF9pKS5ldmVyeShmdW5jdGlvbiAoY2hlY2spIHtcbiAgICAgICAgICAgIHJldHVybiBjaGVjaztcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChmaXR0aW5nUGxhY2VtZW50KSB7XG4gICAgICAgIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IGZpdHRpbmdQbGFjZW1lbnQ7XG4gICAgICAgIHJldHVybiBcImJyZWFrXCI7XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZvciAodmFyIF9pID0gbnVtYmVyT2ZDaGVja3M7IF9pID4gMDsgX2ktLSkge1xuICAgICAgdmFyIF9yZXQgPSBfbG9vcChfaSk7XG5cbiAgICAgIGlmIChfcmV0ID09PSBcImJyZWFrXCIpIGJyZWFrO1xuICAgIH1cbiAgfVxuXG4gIGlmIChzdGF0ZS5wbGFjZW1lbnQgIT09IGZpcnN0Rml0dGluZ1BsYWNlbWVudCkge1xuICAgIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0uX3NraXAgPSB0cnVlO1xuICAgIHN0YXRlLnBsYWNlbWVudCA9IGZpcnN0Rml0dGluZ1BsYWNlbWVudDtcbiAgICBzdGF0ZS5yZXNldCA9IHRydWU7XG4gIH1cbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2ZsaXAnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICBmbjogZmxpcCxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydvZmZzZXQnXSxcbiAgZGF0YToge1xuICAgIF9za2lwOiBmYWxzZVxuICB9XG59OyIsImltcG9ydCB7IHRvcCwgYm90dG9tLCBsZWZ0LCByaWdodCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuXG5mdW5jdGlvbiBnZXRTaWRlT2Zmc2V0cyhvdmVyZmxvdywgcmVjdCwgcHJldmVudGVkT2Zmc2V0cykge1xuICBpZiAocHJldmVudGVkT2Zmc2V0cyA9PT0gdm9pZCAwKSB7XG4gICAgcHJldmVudGVkT2Zmc2V0cyA9IHtcbiAgICAgIHg6IDAsXG4gICAgICB5OiAwXG4gICAgfTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgdG9wOiBvdmVyZmxvdy50b3AgLSByZWN0LmhlaWdodCAtIHByZXZlbnRlZE9mZnNldHMueSxcbiAgICByaWdodDogb3ZlcmZsb3cucmlnaHQgLSByZWN0LndpZHRoICsgcHJldmVudGVkT2Zmc2V0cy54LFxuICAgIGJvdHRvbTogb3ZlcmZsb3cuYm90dG9tIC0gcmVjdC5oZWlnaHQgKyBwcmV2ZW50ZWRPZmZzZXRzLnksXG4gICAgbGVmdDogb3ZlcmZsb3cubGVmdCAtIHJlY3Qud2lkdGggLSBwcmV2ZW50ZWRPZmZzZXRzLnhcbiAgfTtcbn1cblxuZnVuY3Rpb24gaXNBbnlTaWRlRnVsbHlDbGlwcGVkKG92ZXJmbG93KSB7XG4gIHJldHVybiBbdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0XS5zb21lKGZ1bmN0aW9uIChzaWRlKSB7XG4gICAgcmV0dXJuIG92ZXJmbG93W3NpZGVdID49IDA7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBoaWRlKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIHZhciByZWZlcmVuY2VSZWN0ID0gc3RhdGUucmVjdHMucmVmZXJlbmNlO1xuICB2YXIgcG9wcGVyUmVjdCA9IHN0YXRlLnJlY3RzLnBvcHBlcjtcbiAgdmFyIHByZXZlbnRlZE9mZnNldHMgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLnByZXZlbnRPdmVyZmxvdztcbiAgdmFyIHJlZmVyZW5jZU92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBlbGVtZW50Q29udGV4dDogJ3JlZmVyZW5jZSdcbiAgfSk7XG4gIHZhciBwb3BwZXJBbHRPdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgYWx0Qm91bmRhcnk6IHRydWVcbiAgfSk7XG4gIHZhciByZWZlcmVuY2VDbGlwcGluZ09mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhyZWZlcmVuY2VPdmVyZmxvdywgcmVmZXJlbmNlUmVjdCk7XG4gIHZhciBwb3BwZXJFc2NhcGVPZmZzZXRzID0gZ2V0U2lkZU9mZnNldHMocG9wcGVyQWx0T3ZlcmZsb3csIHBvcHBlclJlY3QsIHByZXZlbnRlZE9mZnNldHMpO1xuICB2YXIgaXNSZWZlcmVuY2VIaWRkZW4gPSBpc0FueVNpZGVGdWxseUNsaXBwZWQocmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzKTtcbiAgdmFyIGhhc1BvcHBlckVzY2FwZWQgPSBpc0FueVNpZGVGdWxseUNsaXBwZWQocG9wcGVyRXNjYXBlT2Zmc2V0cyk7XG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSB7XG4gICAgcmVmZXJlbmNlQ2xpcHBpbmdPZmZzZXRzOiByZWZlcmVuY2VDbGlwcGluZ09mZnNldHMsXG4gICAgcG9wcGVyRXNjYXBlT2Zmc2V0czogcG9wcGVyRXNjYXBlT2Zmc2V0cyxcbiAgICBpc1JlZmVyZW5jZUhpZGRlbjogaXNSZWZlcmVuY2VIaWRkZW4sXG4gICAgaGFzUG9wcGVyRXNjYXBlZDogaGFzUG9wcGVyRXNjYXBlZFxuICB9O1xuICBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciA9IE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyLCB7XG4gICAgJ2RhdGEtcG9wcGVyLXJlZmVyZW5jZS1oaWRkZW4nOiBpc1JlZmVyZW5jZUhpZGRlbixcbiAgICAnZGF0YS1wb3BwZXItZXNjYXBlZCc6IGhhc1BvcHBlckVzY2FwZWRcbiAgfSk7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdoaWRlJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydwcmV2ZW50T3ZlcmZsb3cnXSxcbiAgZm46IGhpZGVcbn07IiwiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIHBsYWNlbWVudHMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmV4cG9ydCBmdW5jdGlvbiBkaXN0YW5jZUFuZFNraWRkaW5nVG9YWShwbGFjZW1lbnQsIHJlY3RzLCBvZmZzZXQpIHtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCk7XG4gIHZhciBpbnZlcnREaXN0YW5jZSA9IFtsZWZ0LCB0b3BdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMCA/IC0xIDogMTtcblxuICB2YXIgX3JlZiA9IHR5cGVvZiBvZmZzZXQgPT09ICdmdW5jdGlvbicgPyBvZmZzZXQoT2JqZWN0LmFzc2lnbih7fSwgcmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudFxuICB9KSkgOiBvZmZzZXQsXG4gICAgICBza2lkZGluZyA9IF9yZWZbMF0sXG4gICAgICBkaXN0YW5jZSA9IF9yZWZbMV07XG5cbiAgc2tpZGRpbmcgPSBza2lkZGluZyB8fCAwO1xuICBkaXN0YW5jZSA9IChkaXN0YW5jZSB8fCAwKSAqIGludmVydERpc3RhbmNlO1xuICByZXR1cm4gW2xlZnQsIHJpZ2h0XS5pbmRleE9mKGJhc2VQbGFjZW1lbnQpID49IDAgPyB7XG4gICAgeDogZGlzdGFuY2UsXG4gICAgeTogc2tpZGRpbmdcbiAgfSA6IHtcbiAgICB4OiBza2lkZGluZyxcbiAgICB5OiBkaXN0YW5jZVxuICB9O1xufVxuXG5mdW5jdGlvbiBvZmZzZXQoX3JlZjIpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjIuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjIub3B0aW9ucyxcbiAgICAgIG5hbWUgPSBfcmVmMi5uYW1lO1xuICB2YXIgX29wdGlvbnMkb2Zmc2V0ID0gb3B0aW9ucy5vZmZzZXQsXG4gICAgICBvZmZzZXQgPSBfb3B0aW9ucyRvZmZzZXQgPT09IHZvaWQgMCA/IFswLCAwXSA6IF9vcHRpb25zJG9mZnNldDtcbiAgdmFyIGRhdGEgPSBwbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICBhY2NbcGxhY2VtZW50XSA9IGRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZKHBsYWNlbWVudCwgc3RhdGUucmVjdHMsIG9mZnNldCk7XG4gICAgcmV0dXJuIGFjYztcbiAgfSwge30pO1xuICB2YXIgX2RhdGEkc3RhdGUkcGxhY2VtZW50ID0gZGF0YVtzdGF0ZS5wbGFjZW1lbnRdLFxuICAgICAgeCA9IF9kYXRhJHN0YXRlJHBsYWNlbWVudC54LFxuICAgICAgeSA9IF9kYXRhJHN0YXRlJHBsYWNlbWVudC55O1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMgIT0gbnVsbCkge1xuICAgIHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cy54ICs9IHg7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLnkgKz0geTtcbiAgfVxuXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBkYXRhO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnb2Zmc2V0JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgcmVxdWlyZXM6IFsncG9wcGVyT2Zmc2V0cyddLFxuICBmbjogb2Zmc2V0XG59OyIsImltcG9ydCBjb21wdXRlT2Zmc2V0cyBmcm9tIFwiLi4vdXRpbHMvY29tcHV0ZU9mZnNldHMuanNcIjtcblxuZnVuY3Rpb24gcG9wcGVyT2Zmc2V0cyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICAvLyBPZmZzZXRzIGFyZSB0aGUgYWN0dWFsIHBvc2l0aW9uIHRoZSBwb3BwZXIgbmVlZHMgdG8gaGF2ZSB0byBiZVxuICAvLyBwcm9wZXJseSBwb3NpdGlvbmVkIG5lYXIgaXRzIHJlZmVyZW5jZSBlbGVtZW50XG4gIC8vIFRoaXMgaXMgdGhlIG1vc3QgYmFzaWMgcGxhY2VtZW50LCBhbmQgd2lsbCBiZSBhZGp1c3RlZCBieVxuICAvLyB0aGUgbW9kaWZpZXJzIGluIHRoZSBuZXh0IHN0ZXBcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGNvbXB1dGVPZmZzZXRzKHtcbiAgICByZWZlcmVuY2U6IHN0YXRlLnJlY3RzLnJlZmVyZW5jZSxcbiAgICBlbGVtZW50OiBzdGF0ZS5yZWN0cy5wb3BwZXIsXG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSk7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdwb3BwZXJPZmZzZXRzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdyZWFkJyxcbiAgZm46IHBvcHBlck9mZnNldHMsXG4gIGRhdGE6IHt9XG59OyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEFsdEF4aXMoYXhpcykge1xuICByZXR1cm4gYXhpcyA9PT0gJ3gnID8gJ3knIDogJ3gnO1xufSIsImltcG9ydCB7IHRvcCwgbGVmdCwgcmlnaHQsIGJvdHRvbSwgc3RhcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRBbHRBeGlzIGZyb20gXCIuLi91dGlscy9nZXRBbHRBeGlzLmpzXCI7XG5pbXBvcnQgd2l0aGluIGZyb20gXCIuLi91dGlscy93aXRoaW4uanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgZ2V0RnJlc2hTaWRlT2JqZWN0IGZyb20gXCIuLi91dGlscy9nZXRGcmVzaFNpZGVPYmplY3QuanNcIjtcbmltcG9ydCB7IG1heCBhcyBtYXRoTWF4LCBtaW4gYXMgbWF0aE1pbiB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7XG5cbmZ1bmN0aW9uIHByZXZlbnRPdmVyZmxvdyhfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcbiAgdmFyIF9vcHRpb25zJG1haW5BeGlzID0gb3B0aW9ucy5tYWluQXhpcyxcbiAgICAgIGNoZWNrTWFpbkF4aXMgPSBfb3B0aW9ucyRtYWluQXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJG1haW5BeGlzLFxuICAgICAgX29wdGlvbnMkYWx0QXhpcyA9IG9wdGlvbnMuYWx0QXhpcyxcbiAgICAgIGNoZWNrQWx0QXhpcyA9IF9vcHRpb25zJGFsdEF4aXMgPT09IHZvaWQgMCA/IGZhbHNlIDogX29wdGlvbnMkYWx0QXhpcyxcbiAgICAgIGJvdW5kYXJ5ID0gb3B0aW9ucy5ib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IG9wdGlvbnMucm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnkgPSBvcHRpb25zLmFsdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZyA9IG9wdGlvbnMucGFkZGluZyxcbiAgICAgIF9vcHRpb25zJHRldGhlciA9IG9wdGlvbnMudGV0aGVyLFxuICAgICAgdGV0aGVyID0gX29wdGlvbnMkdGV0aGVyID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkdGV0aGVyLFxuICAgICAgX29wdGlvbnMkdGV0aGVyT2Zmc2V0ID0gb3B0aW9ucy50ZXRoZXJPZmZzZXQsXG4gICAgICB0ZXRoZXJPZmZzZXQgPSBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQgPT09IHZvaWQgMCA/IDAgOiBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQ7XG4gIHZhciBvdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgIHBhZGRpbmc6IHBhZGRpbmcsXG4gICAgYWx0Qm91bmRhcnk6IGFsdEJvdW5kYXJ5XG4gIH0pO1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQoc3RhdGUucGxhY2VtZW50KTtcbiAgdmFyIHZhcmlhdGlvbiA9IGdldFZhcmlhdGlvbihzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgaXNCYXNlUGxhY2VtZW50ID0gIXZhcmlhdGlvbjtcbiAgdmFyIG1haW5BeGlzID0gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpO1xuICB2YXIgYWx0QXhpcyA9IGdldEFsdEF4aXMobWFpbkF4aXMpO1xuICB2YXIgcG9wcGVyT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cztcbiAgdmFyIHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgdGV0aGVyT2Zmc2V0VmFsdWUgPSB0eXBlb2YgdGV0aGVyT2Zmc2V0ID09PSAnZnVuY3Rpb24nID8gdGV0aGVyT2Zmc2V0KE9iamVjdC5hc3NpZ24oe30sIHN0YXRlLnJlY3RzLCB7XG4gICAgcGxhY2VtZW50OiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSkpIDogdGV0aGVyT2Zmc2V0O1xuICB2YXIgZGF0YSA9IHtcbiAgICB4OiAwLFxuICAgIHk6IDBcbiAgfTtcblxuICBpZiAoIXBvcHBlck9mZnNldHMpIHtcbiAgICByZXR1cm47XG4gIH1cblxuICBpZiAoY2hlY2tNYWluQXhpcyB8fCBjaGVja0FsdEF4aXMpIHtcbiAgICB2YXIgbWFpblNpZGUgPSBtYWluQXhpcyA9PT0gJ3knID8gdG9wIDogbGVmdDtcbiAgICB2YXIgYWx0U2lkZSA9IG1haW5BeGlzID09PSAneScgPyBib3R0b20gOiByaWdodDtcbiAgICB2YXIgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcbiAgICB2YXIgb2Zmc2V0ID0gcG9wcGVyT2Zmc2V0c1ttYWluQXhpc107XG4gICAgdmFyIG1pbiA9IHBvcHBlck9mZnNldHNbbWFpbkF4aXNdICsgb3ZlcmZsb3dbbWFpblNpZGVdO1xuICAgIHZhciBtYXggPSBwb3BwZXJPZmZzZXRzW21haW5BeGlzXSAtIG92ZXJmbG93W2FsdFNpZGVdO1xuICAgIHZhciBhZGRpdGl2ZSA9IHRldGhlciA/IC1wb3BwZXJSZWN0W2xlbl0gLyAyIDogMDtcbiAgICB2YXIgbWluTGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IHJlZmVyZW5jZVJlY3RbbGVuXSA6IHBvcHBlclJlY3RbbGVuXTtcbiAgICB2YXIgbWF4TGVuID0gdmFyaWF0aW9uID09PSBzdGFydCA/IC1wb3BwZXJSZWN0W2xlbl0gOiAtcmVmZXJlbmNlUmVjdFtsZW5dOyAvLyBXZSBuZWVkIHRvIGluY2x1ZGUgdGhlIGFycm93IGluIHRoZSBjYWxjdWxhdGlvbiBzbyB0aGUgYXJyb3cgZG9lc24ndCBnb1xuICAgIC8vIG91dHNpZGUgdGhlIHJlZmVyZW5jZSBib3VuZHNcblxuICAgIHZhciBhcnJvd0VsZW1lbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdztcbiAgICB2YXIgYXJyb3dSZWN0ID0gdGV0aGVyICYmIGFycm93RWxlbWVudCA/IGdldExheW91dFJlY3QoYXJyb3dFbGVtZW50KSA6IHtcbiAgICAgIHdpZHRoOiAwLFxuICAgICAgaGVpZ2h0OiAwXG4gICAgfTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nT2JqZWN0ID0gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddID8gc3RhdGUubW9kaWZpZXJzRGF0YVsnYXJyb3cjcGVyc2lzdGVudCddLnBhZGRpbmcgOiBnZXRGcmVzaFNpZGVPYmplY3QoKTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nTWluID0gYXJyb3dQYWRkaW5nT2JqZWN0W21haW5TaWRlXTtcbiAgICB2YXIgYXJyb3dQYWRkaW5nTWF4ID0gYXJyb3dQYWRkaW5nT2JqZWN0W2FsdFNpZGVdOyAvLyBJZiB0aGUgcmVmZXJlbmNlIGxlbmd0aCBpcyBzbWFsbGVyIHRoYW4gdGhlIGFycm93IGxlbmd0aCwgd2UgZG9uJ3Qgd2FudFxuICAgIC8vIHRvIGluY2x1ZGUgaXRzIGZ1bGwgc2l6ZSBpbiB0aGUgY2FsY3VsYXRpb24uIElmIHRoZSByZWZlcmVuY2UgaXMgc21hbGxcbiAgICAvLyBhbmQgbmVhciB0aGUgZWRnZSBvZiBhIGJvdW5kYXJ5LCB0aGUgcG9wcGVyIGNhbiBvdmVyZmxvdyBldmVuIGlmIHRoZVxuICAgIC8vIHJlZmVyZW5jZSBpcyBub3Qgb3ZlcmZsb3dpbmcgYXMgd2VsbCAoZS5nLiB2aXJ0dWFsIGVsZW1lbnRzIHdpdGggbm9cbiAgICAvLyB3aWR0aCBvciBoZWlnaHQpXG5cbiAgICB2YXIgYXJyb3dMZW4gPSB3aXRoaW4oMCwgcmVmZXJlbmNlUmVjdFtsZW5dLCBhcnJvd1JlY3RbbGVuXSk7XG4gICAgdmFyIG1pbk9mZnNldCA9IGlzQmFzZVBsYWNlbWVudCA/IHJlZmVyZW5jZVJlY3RbbGVuXSAvIDIgLSBhZGRpdGl2ZSAtIGFycm93TGVuIC0gYXJyb3dQYWRkaW5nTWluIC0gdGV0aGVyT2Zmc2V0VmFsdWUgOiBtaW5MZW4gLSBhcnJvd0xlbiAtIGFycm93UGFkZGluZ01pbiAtIHRldGhlck9mZnNldFZhbHVlO1xuICAgIHZhciBtYXhPZmZzZXQgPSBpc0Jhc2VQbGFjZW1lbnQgPyAtcmVmZXJlbmNlUmVjdFtsZW5dIC8gMiArIGFkZGl0aXZlICsgYXJyb3dMZW4gKyBhcnJvd1BhZGRpbmdNYXggKyB0ZXRoZXJPZmZzZXRWYWx1ZSA6IG1heExlbiArIGFycm93TGVuICsgYXJyb3dQYWRkaW5nTWF4ICsgdGV0aGVyT2Zmc2V0VmFsdWU7XG4gICAgdmFyIGFycm93T2Zmc2V0UGFyZW50ID0gc3RhdGUuZWxlbWVudHMuYXJyb3cgJiYgZ2V0T2Zmc2V0UGFyZW50KHN0YXRlLmVsZW1lbnRzLmFycm93KTtcbiAgICB2YXIgY2xpZW50T2Zmc2V0ID0gYXJyb3dPZmZzZXRQYXJlbnQgPyBtYWluQXhpcyA9PT0gJ3knID8gYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50VG9wIHx8IDAgOiBhcnJvd09mZnNldFBhcmVudC5jbGllbnRMZWZ0IHx8IDAgOiAwO1xuICAgIHZhciBvZmZzZXRNb2RpZmllclZhbHVlID0gc3RhdGUubW9kaWZpZXJzRGF0YS5vZmZzZXQgPyBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldFtzdGF0ZS5wbGFjZW1lbnRdW21haW5BeGlzXSA6IDA7XG4gICAgdmFyIHRldGhlck1pbiA9IHBvcHBlck9mZnNldHNbbWFpbkF4aXNdICsgbWluT2Zmc2V0IC0gb2Zmc2V0TW9kaWZpZXJWYWx1ZSAtIGNsaWVudE9mZnNldDtcbiAgICB2YXIgdGV0aGVyTWF4ID0gcG9wcGVyT2Zmc2V0c1ttYWluQXhpc10gKyBtYXhPZmZzZXQgLSBvZmZzZXRNb2RpZmllclZhbHVlO1xuXG4gICAgaWYgKGNoZWNrTWFpbkF4aXMpIHtcbiAgICAgIHZhciBwcmV2ZW50ZWRPZmZzZXQgPSB3aXRoaW4odGV0aGVyID8gbWF0aE1pbihtaW4sIHRldGhlck1pbikgOiBtaW4sIG9mZnNldCwgdGV0aGVyID8gbWF0aE1heChtYXgsIHRldGhlck1heCkgOiBtYXgpO1xuICAgICAgcG9wcGVyT2Zmc2V0c1ttYWluQXhpc10gPSBwcmV2ZW50ZWRPZmZzZXQ7XG4gICAgICBkYXRhW21haW5BeGlzXSA9IHByZXZlbnRlZE9mZnNldCAtIG9mZnNldDtcbiAgICB9XG5cbiAgICBpZiAoY2hlY2tBbHRBeGlzKSB7XG4gICAgICB2YXIgX21haW5TaWRlID0gbWFpbkF4aXMgPT09ICd4JyA/IHRvcCA6IGxlZnQ7XG5cbiAgICAgIHZhciBfYWx0U2lkZSA9IG1haW5BeGlzID09PSAneCcgPyBib3R0b20gOiByaWdodDtcblxuICAgICAgdmFyIF9vZmZzZXQgPSBwb3BwZXJPZmZzZXRzW2FsdEF4aXNdO1xuXG4gICAgICB2YXIgX21pbiA9IF9vZmZzZXQgKyBvdmVyZmxvd1tfbWFpblNpZGVdO1xuXG4gICAgICB2YXIgX21heCA9IF9vZmZzZXQgLSBvdmVyZmxvd1tfYWx0U2lkZV07XG5cbiAgICAgIHZhciBfcHJldmVudGVkT2Zmc2V0ID0gd2l0aGluKHRldGhlciA/IG1hdGhNaW4oX21pbiwgdGV0aGVyTWluKSA6IF9taW4sIF9vZmZzZXQsIHRldGhlciA/IG1hdGhNYXgoX21heCwgdGV0aGVyTWF4KSA6IF9tYXgpO1xuXG4gICAgICBwb3BwZXJPZmZzZXRzW2FsdEF4aXNdID0gX3ByZXZlbnRlZE9mZnNldDtcbiAgICAgIGRhdGFbYWx0QXhpc10gPSBfcHJldmVudGVkT2Zmc2V0IC0gX29mZnNldDtcbiAgICB9XG4gIH1cblxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gZGF0YTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3ByZXZlbnRPdmVyZmxvdycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBwcmV2ZW50T3ZlcmZsb3csXG4gIHJlcXVpcmVzSWZFeGlzdHM6IFsnb2Zmc2V0J11cbn07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0SFRNTEVsZW1lbnRTY3JvbGwoZWxlbWVudCkge1xuICByZXR1cm4ge1xuICAgIHNjcm9sbExlZnQ6IGVsZW1lbnQuc2Nyb2xsTGVmdCxcbiAgICBzY3JvbGxUb3A6IGVsZW1lbnQuc2Nyb2xsVG9wXG4gIH07XG59IiwiaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmltcG9ydCBnZXRXaW5kb3cgZnJvbSBcIi4vZ2V0V2luZG93LmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldEhUTUxFbGVtZW50U2Nyb2xsIGZyb20gXCIuL2dldEhUTUxFbGVtZW50U2Nyb2xsLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXROb2RlU2Nyb2xsKG5vZGUpIHtcbiAgaWYgKG5vZGUgPT09IGdldFdpbmRvdyhub2RlKSB8fCAhaXNIVE1MRWxlbWVudChub2RlKSkge1xuICAgIHJldHVybiBnZXRXaW5kb3dTY3JvbGwobm9kZSk7XG4gIH0gZWxzZSB7XG4gICAgcmV0dXJuIGdldEhUTUxFbGVtZW50U2Nyb2xsKG5vZGUpO1xuICB9XG59IiwiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBnZXROb2RlU2Nyb2xsIGZyb20gXCIuL2dldE5vZGVTY3JvbGwuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGxCYXJYIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbEJhclguanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSBcIi4vaXNTY3JvbGxQYXJlbnQuanNcIjtcblxuZnVuY3Rpb24gaXNFbGVtZW50U2NhbGVkKGVsZW1lbnQpIHtcbiAgdmFyIHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICB2YXIgc2NhbGVYID0gcmVjdC53aWR0aCAvIGVsZW1lbnQub2Zmc2V0V2lkdGggfHwgMTtcbiAgdmFyIHNjYWxlWSA9IHJlY3QuaGVpZ2h0IC8gZWxlbWVudC5vZmZzZXRIZWlnaHQgfHwgMTtcbiAgcmV0dXJuIHNjYWxlWCAhPT0gMSB8fCBzY2FsZVkgIT09IDE7XG59IC8vIFJldHVybnMgdGhlIGNvbXBvc2l0ZSByZWN0IG9mIGFuIGVsZW1lbnQgcmVsYXRpdmUgdG8gaXRzIG9mZnNldFBhcmVudC5cbi8vIENvbXBvc2l0ZSBtZWFucyBpdCB0YWtlcyBpbnRvIGFjY291bnQgdHJhbnNmb3JtcyBhcyB3ZWxsIGFzIGxheW91dC5cblxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRDb21wb3NpdGVSZWN0KGVsZW1lbnRPclZpcnR1YWxFbGVtZW50LCBvZmZzZXRQYXJlbnQsIGlzRml4ZWQpIHtcbiAgaWYgKGlzRml4ZWQgPT09IHZvaWQgMCkge1xuICAgIGlzRml4ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciBpc09mZnNldFBhcmVudEFuRWxlbWVudCA9IGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIG9mZnNldFBhcmVudElzU2NhbGVkID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpICYmIGlzRWxlbWVudFNjYWxlZChvZmZzZXRQYXJlbnQpO1xuICB2YXIgZG9jdW1lbnRFbGVtZW50ID0gZ2V0RG9jdW1lbnRFbGVtZW50KG9mZnNldFBhcmVudCk7XG4gIHZhciByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnRPclZpcnR1YWxFbGVtZW50LCBvZmZzZXRQYXJlbnRJc1NjYWxlZCk7XG4gIHZhciBzY3JvbGwgPSB7XG4gICAgc2Nyb2xsTGVmdDogMCxcbiAgICBzY3JvbGxUb3A6IDBcbiAgfTtcbiAgdmFyIG9mZnNldHMgPSB7XG4gICAgeDogMCxcbiAgICB5OiAwXG4gIH07XG5cbiAgaWYgKGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50IHx8ICFpc09mZnNldFBhcmVudEFuRWxlbWVudCAmJiAhaXNGaXhlZCkge1xuICAgIGlmIChnZXROb2RlTmFtZShvZmZzZXRQYXJlbnQpICE9PSAnYm9keScgfHwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy8xMDc4XG4gICAgaXNTY3JvbGxQYXJlbnQoZG9jdW1lbnRFbGVtZW50KSkge1xuICAgICAgc2Nyb2xsID0gZ2V0Tm9kZVNjcm9sbChvZmZzZXRQYXJlbnQpO1xuICAgIH1cblxuICAgIGlmIChpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCkpIHtcbiAgICAgIG9mZnNldHMgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qob2Zmc2V0UGFyZW50LCB0cnVlKTtcbiAgICAgIG9mZnNldHMueCArPSBvZmZzZXRQYXJlbnQuY2xpZW50TGVmdDtcbiAgICAgIG9mZnNldHMueSArPSBvZmZzZXRQYXJlbnQuY2xpZW50VG9wO1xuICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBvZmZzZXRzLnggPSBnZXRXaW5kb3dTY3JvbGxCYXJYKGRvY3VtZW50RWxlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB4OiByZWN0LmxlZnQgKyBzY3JvbGwuc2Nyb2xsTGVmdCAtIG9mZnNldHMueCxcbiAgICB5OiByZWN0LnRvcCArIHNjcm9sbC5zY3JvbGxUb3AgLSBvZmZzZXRzLnksXG4gICAgd2lkdGg6IHJlY3Qud2lkdGgsXG4gICAgaGVpZ2h0OiByZWN0LmhlaWdodFxuICB9O1xufSIsImltcG9ydCB7IG1vZGlmaWVyUGhhc2VzIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7IC8vIHNvdXJjZTogaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNDk4NzUyNTVcblxuZnVuY3Rpb24gb3JkZXIobW9kaWZpZXJzKSB7XG4gIHZhciBtYXAgPSBuZXcgTWFwKCk7XG4gIHZhciB2aXNpdGVkID0gbmV3IFNldCgpO1xuICB2YXIgcmVzdWx0ID0gW107XG4gIG1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIG1hcC5zZXQobW9kaWZpZXIubmFtZSwgbW9kaWZpZXIpO1xuICB9KTsgLy8gT24gdmlzaXRpbmcgb2JqZWN0LCBjaGVjayBmb3IgaXRzIGRlcGVuZGVuY2llcyBhbmQgdmlzaXQgdGhlbSByZWN1cnNpdmVseVxuXG4gIGZ1bmN0aW9uIHNvcnQobW9kaWZpZXIpIHtcbiAgICB2aXNpdGVkLmFkZChtb2RpZmllci5uYW1lKTtcbiAgICB2YXIgcmVxdWlyZXMgPSBbXS5jb25jYXQobW9kaWZpZXIucmVxdWlyZXMgfHwgW10sIG1vZGlmaWVyLnJlcXVpcmVzSWZFeGlzdHMgfHwgW10pO1xuICAgIHJlcXVpcmVzLmZvckVhY2goZnVuY3Rpb24gKGRlcCkge1xuICAgICAgaWYgKCF2aXNpdGVkLmhhcyhkZXApKSB7XG4gICAgICAgIHZhciBkZXBNb2RpZmllciA9IG1hcC5nZXQoZGVwKTtcblxuICAgICAgICBpZiAoZGVwTW9kaWZpZXIpIHtcbiAgICAgICAgICBzb3J0KGRlcE1vZGlmaWVyKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0pO1xuICAgIHJlc3VsdC5wdXNoKG1vZGlmaWVyKTtcbiAgfVxuXG4gIG1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgIGlmICghdmlzaXRlZC5oYXMobW9kaWZpZXIubmFtZSkpIHtcbiAgICAgIC8vIGNoZWNrIGZvciB2aXNpdGVkIG9iamVjdFxuICAgICAgc29ydChtb2RpZmllcik7XG4gICAgfVxuICB9KTtcbiAgcmV0dXJuIHJlc3VsdDtcbn1cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gb3JkZXJNb2RpZmllcnMobW9kaWZpZXJzKSB7XG4gIC8vIG9yZGVyIGJhc2VkIG9uIGRlcGVuZGVuY2llc1xuICB2YXIgb3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyKG1vZGlmaWVycyk7IC8vIG9yZGVyIGJhc2VkIG9uIHBoYXNlXG5cbiAgcmV0dXJuIG1vZGlmaWVyUGhhc2VzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwaGFzZSkge1xuICAgIHJldHVybiBhY2MuY29uY2F0KG9yZGVyZWRNb2RpZmllcnMuZmlsdGVyKGZ1bmN0aW9uIChtb2RpZmllcikge1xuICAgICAgcmV0dXJuIG1vZGlmaWVyLnBoYXNlID09PSBwaGFzZTtcbiAgICB9KSk7XG4gIH0sIFtdKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBkZWJvdW5jZShmbikge1xuICB2YXIgcGVuZGluZztcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBpZiAoIXBlbmRpbmcpIHtcbiAgICAgIHBlbmRpbmcgPSBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBwZW5kaW5nID0gdW5kZWZpbmVkO1xuICAgICAgICAgIHJlc29sdmUoZm4oKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBlbmRpbmc7XG4gIH07XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWVyZ2VCeU5hbWUobW9kaWZpZXJzKSB7XG4gIHZhciBtZXJnZWQgPSBtb2RpZmllcnMucmVkdWNlKGZ1bmN0aW9uIChtZXJnZWQsIGN1cnJlbnQpIHtcbiAgICB2YXIgZXhpc3RpbmcgPSBtZXJnZWRbY3VycmVudC5uYW1lXTtcbiAgICBtZXJnZWRbY3VycmVudC5uYW1lXSA9IGV4aXN0aW5nID8gT2JqZWN0LmFzc2lnbih7fSwgZXhpc3RpbmcsIGN1cnJlbnQsIHtcbiAgICAgIG9wdGlvbnM6IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLm9wdGlvbnMsIGN1cnJlbnQub3B0aW9ucyksXG4gICAgICBkYXRhOiBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZy5kYXRhLCBjdXJyZW50LmRhdGEpXG4gICAgfSkgOiBjdXJyZW50O1xuICAgIHJldHVybiBtZXJnZWQ7XG4gIH0sIHt9KTsgLy8gSUUxMSBkb2VzIG5vdCBzdXBwb3J0IE9iamVjdC52YWx1ZXNcblxuICByZXR1cm4gT2JqZWN0LmtleXMobWVyZ2VkKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuICAgIHJldHVybiBtZXJnZWRba2V5XTtcbiAgfSk7XG59IiwiaW1wb3J0IGdldENvbXBvc2l0ZVJlY3QgZnJvbSBcIi4vZG9tLXV0aWxzL2dldENvbXBvc2l0ZVJlY3QuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgbGlzdFNjcm9sbFBhcmVudHMgZnJvbSBcIi4vZG9tLXV0aWxzL2xpc3RTY3JvbGxQYXJlbnRzLmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgb3JkZXJNb2RpZmllcnMgZnJvbSBcIi4vdXRpbHMvb3JkZXJNb2RpZmllcnMuanNcIjtcbmltcG9ydCBkZWJvdW5jZSBmcm9tIFwiLi91dGlscy9kZWJvdW5jZS5qc1wiO1xuaW1wb3J0IHZhbGlkYXRlTW9kaWZpZXJzIGZyb20gXCIuL3V0aWxzL3ZhbGlkYXRlTW9kaWZpZXJzLmpzXCI7XG5pbXBvcnQgdW5pcXVlQnkgZnJvbSBcIi4vdXRpbHMvdW5pcXVlQnkuanNcIjtcbmltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBtZXJnZUJ5TmFtZSBmcm9tIFwiLi91dGlscy9tZXJnZUJ5TmFtZS5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IHsgYXV0byB9IGZyb20gXCIuL2VudW1zLmpzXCI7XG52YXIgSU5WQUxJRF9FTEVNRU5UX0VSUk9SID0gJ1BvcHBlcjogSW52YWxpZCByZWZlcmVuY2Ugb3IgcG9wcGVyIGFyZ3VtZW50IHByb3ZpZGVkLiBUaGV5IG11c3QgYmUgZWl0aGVyIGEgRE9NIGVsZW1lbnQgb3IgdmlydHVhbCBlbGVtZW50Lic7XG52YXIgSU5GSU5JVEVfTE9PUF9FUlJPUiA9ICdQb3BwZXI6IEFuIGluZmluaXRlIGxvb3AgaW4gdGhlIG1vZGlmaWVycyBjeWNsZSBoYXMgYmVlbiBkZXRlY3RlZCEgVGhlIGN5Y2xlIGhhcyBiZWVuIGludGVycnVwdGVkIHRvIHByZXZlbnQgYSBicm93c2VyIGNyYXNoLic7XG52YXIgREVGQVVMVF9PUFRJT05TID0ge1xuICBwbGFjZW1lbnQ6ICdib3R0b20nLFxuICBtb2RpZmllcnM6IFtdLFxuICBzdHJhdGVneTogJ2Fic29sdXRlJ1xufTtcblxuZnVuY3Rpb24gYXJlVmFsaWRFbGVtZW50cygpIHtcbiAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGFyZ3MgPSBuZXcgQXJyYXkoX2xlbiksIF9rZXkgPSAwOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7XG4gICAgYXJnc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTtcbiAgfVxuXG4gIHJldHVybiAhYXJncy5zb21lKGZ1bmN0aW9uIChlbGVtZW50KSB7XG4gICAgcmV0dXJuICEoZWxlbWVudCAmJiB0eXBlb2YgZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QgPT09ICdmdW5jdGlvbicpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHBvcHBlckdlbmVyYXRvcihnZW5lcmF0b3JPcHRpb25zKSB7XG4gIGlmIChnZW5lcmF0b3JPcHRpb25zID09PSB2b2lkIDApIHtcbiAgICBnZW5lcmF0b3JPcHRpb25zID0ge307XG4gIH1cblxuICB2YXIgX2dlbmVyYXRvck9wdGlvbnMgPSBnZW5lcmF0b3JPcHRpb25zLFxuICAgICAgX2dlbmVyYXRvck9wdGlvbnMkZGVmID0gX2dlbmVyYXRvck9wdGlvbnMuZGVmYXVsdE1vZGlmaWVycyxcbiAgICAgIGRlZmF1bHRNb2RpZmllcnMgPSBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYgPT09IHZvaWQgMCA/IFtdIDogX2dlbmVyYXRvck9wdGlvbnMkZGVmLFxuICAgICAgX2dlbmVyYXRvck9wdGlvbnMkZGVmMiA9IF9nZW5lcmF0b3JPcHRpb25zLmRlZmF1bHRPcHRpb25zLFxuICAgICAgZGVmYXVsdE9wdGlvbnMgPSBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyID09PSB2b2lkIDAgPyBERUZBVUxUX09QVElPTlMgOiBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyO1xuICByZXR1cm4gZnVuY3Rpb24gY3JlYXRlUG9wcGVyKHJlZmVyZW5jZSwgcG9wcGVyLCBvcHRpb25zKSB7XG4gICAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgICAgb3B0aW9ucyA9IGRlZmF1bHRPcHRpb25zO1xuICAgIH1cblxuICAgIHZhciBzdGF0ZSA9IHtcbiAgICAgIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gICAgICBvcmRlcmVkTW9kaWZpZXJzOiBbXSxcbiAgICAgIG9wdGlvbnM6IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfT1BUSU9OUywgZGVmYXVsdE9wdGlvbnMpLFxuICAgICAgbW9kaWZpZXJzRGF0YToge30sXG4gICAgICBlbGVtZW50czoge1xuICAgICAgICByZWZlcmVuY2U6IHJlZmVyZW5jZSxcbiAgICAgICAgcG9wcGVyOiBwb3BwZXJcbiAgICAgIH0sXG4gICAgICBhdHRyaWJ1dGVzOiB7fSxcbiAgICAgIHN0eWxlczoge31cbiAgICB9O1xuICAgIHZhciBlZmZlY3RDbGVhbnVwRm5zID0gW107XG4gICAgdmFyIGlzRGVzdHJveWVkID0gZmFsc2U7XG4gICAgdmFyIGluc3RhbmNlID0ge1xuICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgc2V0T3B0aW9uczogZnVuY3Rpb24gc2V0T3B0aW9ucyhvcHRpb25zKSB7XG4gICAgICAgIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgc3RhdGUub3B0aW9ucyA9IE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRPcHRpb25zLCBzdGF0ZS5vcHRpb25zLCBvcHRpb25zKTtcbiAgICAgICAgc3RhdGUuc2Nyb2xsUGFyZW50cyA9IHtcbiAgICAgICAgICByZWZlcmVuY2U6IGlzRWxlbWVudChyZWZlcmVuY2UpID8gbGlzdFNjcm9sbFBhcmVudHMocmVmZXJlbmNlKSA6IHJlZmVyZW5jZS5jb250ZXh0RWxlbWVudCA/IGxpc3RTY3JvbGxQYXJlbnRzKHJlZmVyZW5jZS5jb250ZXh0RWxlbWVudCkgOiBbXSxcbiAgICAgICAgICBwb3BwZXI6IGxpc3RTY3JvbGxQYXJlbnRzKHBvcHBlcilcbiAgICAgICAgfTsgLy8gT3JkZXJzIHRoZSBtb2RpZmllcnMgYmFzZWQgb24gdGhlaXIgZGVwZW5kZW5jaWVzIGFuZCBgcGhhc2VgXG4gICAgICAgIC8vIHByb3BlcnRpZXNcblxuICAgICAgICB2YXIgb3JkZXJlZE1vZGlmaWVycyA9IG9yZGVyTW9kaWZpZXJzKG1lcmdlQnlOYW1lKFtdLmNvbmNhdChkZWZhdWx0TW9kaWZpZXJzLCBzdGF0ZS5vcHRpb25zLm1vZGlmaWVycykpKTsgLy8gU3RyaXAgb3V0IGRpc2FibGVkIG1vZGlmaWVyc1xuXG4gICAgICAgIHN0YXRlLm9yZGVyZWRNb2RpZmllcnMgPSBvcmRlcmVkTW9kaWZpZXJzLmZpbHRlcihmdW5jdGlvbiAobSkge1xuICAgICAgICAgIHJldHVybiBtLmVuYWJsZWQ7XG4gICAgICAgIH0pOyAvLyBWYWxpZGF0ZSB0aGUgcHJvdmlkZWQgbW9kaWZpZXJzIHNvIHRoYXQgdGhlIGNvbnN1bWVyIHdpbGwgZ2V0IHdhcm5lZFxuICAgICAgICAvLyBpZiBvbmUgb2YgdGhlIG1vZGlmaWVycyBpcyBpbnZhbGlkIGZvciBhbnkgcmVhc29uXG5cbiAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgIHZhciBtb2RpZmllcnMgPSB1bmlxdWVCeShbXS5jb25jYXQob3JkZXJlZE1vZGlmaWVycywgc3RhdGUub3B0aW9ucy5tb2RpZmllcnMpLCBmdW5jdGlvbiAoX3JlZikge1xuICAgICAgICAgICAgdmFyIG5hbWUgPSBfcmVmLm5hbWU7XG4gICAgICAgICAgICByZXR1cm4gbmFtZTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICB2YWxpZGF0ZU1vZGlmaWVycyhtb2RpZmllcnMpO1xuXG4gICAgICAgICAgaWYgKGdldEJhc2VQbGFjZW1lbnQoc3RhdGUub3B0aW9ucy5wbGFjZW1lbnQpID09PSBhdXRvKSB7XG4gICAgICAgICAgICB2YXIgZmxpcE1vZGlmaWVyID0gc3RhdGUub3JkZXJlZE1vZGlmaWVycy5maW5kKGZ1bmN0aW9uIChfcmVmMikge1xuICAgICAgICAgICAgICB2YXIgbmFtZSA9IF9yZWYyLm5hbWU7XG4gICAgICAgICAgICAgIHJldHVybiBuYW1lID09PSAnZmxpcCc7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgaWYgKCFmbGlwTW9kaWZpZXIpIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihbJ1BvcHBlcjogXCJhdXRvXCIgcGxhY2VtZW50cyByZXF1aXJlIHRoZSBcImZsaXBcIiBtb2RpZmllciBiZScsICdwcmVzZW50IGFuZCBlbmFibGVkIHRvIHdvcmsuJ10uam9pbignICcpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX2dldENvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKHBvcHBlciksXG4gICAgICAgICAgICAgIG1hcmdpblRvcCA9IF9nZXRDb21wdXRlZFN0eWxlLm1hcmdpblRvcCxcbiAgICAgICAgICAgICAgbWFyZ2luUmlnaHQgPSBfZ2V0Q29tcHV0ZWRTdHlsZS5tYXJnaW5SaWdodCxcbiAgICAgICAgICAgICAgbWFyZ2luQm90dG9tID0gX2dldENvbXB1dGVkU3R5bGUubWFyZ2luQm90dG9tLFxuICAgICAgICAgICAgICBtYXJnaW5MZWZ0ID0gX2dldENvbXB1dGVkU3R5bGUubWFyZ2luTGVmdDsgLy8gV2Ugbm8gbG9uZ2VyIHRha2UgaW50byBhY2NvdW50IGBtYXJnaW5zYCBvbiB0aGUgcG9wcGVyLCBhbmQgaXQgY2FuXG4gICAgICAgICAgLy8gY2F1c2UgYnVncyB3aXRoIHBvc2l0aW9uaW5nLCBzbyB3ZSdsbCB3YXJuIHRoZSBjb25zdW1lclxuXG5cbiAgICAgICAgICBpZiAoW21hcmdpblRvcCwgbWFyZ2luUmlnaHQsIG1hcmdpbkJvdHRvbSwgbWFyZ2luTGVmdF0uc29tZShmdW5jdGlvbiAobWFyZ2luKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChtYXJnaW4pO1xuICAgICAgICAgIH0pKSB7XG4gICAgICAgICAgICBjb25zb2xlLndhcm4oWydQb3BwZXI6IENTUyBcIm1hcmdpblwiIHN0eWxlcyBjYW5ub3QgYmUgdXNlZCB0byBhcHBseSBwYWRkaW5nJywgJ2JldHdlZW4gdGhlIHBvcHBlciBhbmQgaXRzIHJlZmVyZW5jZSBlbGVtZW50IG9yIGJvdW5kYXJ5LicsICdUbyByZXBsaWNhdGUgbWFyZ2luLCB1c2UgdGhlIGBvZmZzZXRgIG1vZGlmaWVyLCBhcyB3ZWxsIGFzJywgJ3RoZSBgcGFkZGluZ2Agb3B0aW9uIGluIHRoZSBgcHJldmVudE92ZXJmbG93YCBhbmQgYGZsaXBgJywgJ21vZGlmaWVycy4nXS5qb2luKCcgJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJ1bk1vZGlmaWVyRWZmZWN0cygpO1xuICAgICAgICByZXR1cm4gaW5zdGFuY2UudXBkYXRlKCk7XG4gICAgICB9LFxuICAgICAgLy8gU3luYyB1cGRhdGUg4oCTIGl0IHdpbGwgYWx3YXlzIGJlIGV4ZWN1dGVkLCBldmVuIGlmIG5vdCBuZWNlc3NhcnkuIFRoaXNcbiAgICAgIC8vIGlzIHVzZWZ1bCBmb3IgbG93IGZyZXF1ZW5jeSB1cGRhdGVzIHdoZXJlIHN5bmMgYmVoYXZpb3Igc2ltcGxpZmllcyB0aGVcbiAgICAgIC8vIGxvZ2ljLlxuICAgICAgLy8gRm9yIGhpZ2ggZnJlcXVlbmN5IHVwZGF0ZXMgKGUuZy4gYHJlc2l6ZWAgYW5kIGBzY3JvbGxgIGV2ZW50cyksIGFsd2F5c1xuICAgICAgLy8gcHJlZmVyIHRoZSBhc3luYyBQb3BwZXIjdXBkYXRlIG1ldGhvZFxuICAgICAgZm9yY2VVcGRhdGU6IGZ1bmN0aW9uIGZvcmNlVXBkYXRlKCkge1xuICAgICAgICBpZiAoaXNEZXN0cm95ZWQpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB2YXIgX3N0YXRlJGVsZW1lbnRzID0gc3RhdGUuZWxlbWVudHMsXG4gICAgICAgICAgICByZWZlcmVuY2UgPSBfc3RhdGUkZWxlbWVudHMucmVmZXJlbmNlLFxuICAgICAgICAgICAgcG9wcGVyID0gX3N0YXRlJGVsZW1lbnRzLnBvcHBlcjsgLy8gRG9uJ3QgcHJvY2VlZCBpZiBgcmVmZXJlbmNlYCBvciBgcG9wcGVyYCBhcmUgbm90IHZhbGlkIGVsZW1lbnRzXG4gICAgICAgIC8vIGFueW1vcmVcblxuICAgICAgICBpZiAoIWFyZVZhbGlkRWxlbWVudHMocmVmZXJlbmNlLCBwb3BwZXIpKSB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihJTlZBTElEX0VMRU1FTlRfRVJST1IpO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSAvLyBTdG9yZSB0aGUgcmVmZXJlbmNlIGFuZCBwb3BwZXIgcmVjdHMgdG8gYmUgcmVhZCBieSBtb2RpZmllcnNcblxuXG4gICAgICAgIHN0YXRlLnJlY3RzID0ge1xuICAgICAgICAgIHJlZmVyZW5jZTogZ2V0Q29tcG9zaXRlUmVjdChyZWZlcmVuY2UsIGdldE9mZnNldFBhcmVudChwb3BwZXIpLCBzdGF0ZS5vcHRpb25zLnN0cmF0ZWd5ID09PSAnZml4ZWQnKSxcbiAgICAgICAgICBwb3BwZXI6IGdldExheW91dFJlY3QocG9wcGVyKVxuICAgICAgICB9OyAvLyBNb2RpZmllcnMgaGF2ZSB0aGUgYWJpbGl0eSB0byByZXNldCB0aGUgY3VycmVudCB1cGRhdGUgY3ljbGUuIFRoZVxuICAgICAgICAvLyBtb3N0IGNvbW1vbiB1c2UgY2FzZSBmb3IgdGhpcyBpcyB0aGUgYGZsaXBgIG1vZGlmaWVyIGNoYW5naW5nIHRoZVxuICAgICAgICAvLyBwbGFjZW1lbnQsIHdoaWNoIHRoZW4gbmVlZHMgdG8gcmUtcnVuIGFsbCB0aGUgbW9kaWZpZXJzLCBiZWNhdXNlIHRoZVxuICAgICAgICAvLyBsb2dpYyB3YXMgcHJldmlvdXNseSByYW4gZm9yIHRoZSBwcmV2aW91cyBwbGFjZW1lbnQgYW5kIGlzIHRoZXJlZm9yZVxuICAgICAgICAvLyBzdGFsZS9pbmNvcnJlY3RcblxuICAgICAgICBzdGF0ZS5yZXNldCA9IGZhbHNlO1xuICAgICAgICBzdGF0ZS5wbGFjZW1lbnQgPSBzdGF0ZS5vcHRpb25zLnBsYWNlbWVudDsgLy8gT24gZWFjaCB1cGRhdGUgY3ljbGUsIHRoZSBgbW9kaWZpZXJzRGF0YWAgcHJvcGVydHkgZm9yIGVhY2ggbW9kaWZpZXJcbiAgICAgICAgLy8gaXMgZmlsbGVkIHdpdGggdGhlIGluaXRpYWwgZGF0YSBzcGVjaWZpZWQgYnkgdGhlIG1vZGlmaWVyLiBUaGlzIG1lYW5zXG4gICAgICAgIC8vIGl0IGRvZXNuJ3QgcGVyc2lzdCBhbmQgaXMgZnJlc2ggb24gZWFjaCB1cGRhdGUuXG4gICAgICAgIC8vIFRvIGVuc3VyZSBwZXJzaXN0ZW50IGRhdGEsIHVzZSBgJHtuYW1lfSNwZXJzaXN0ZW50YFxuXG4gICAgICAgIHN0YXRlLm9yZGVyZWRNb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAobW9kaWZpZXIpIHtcbiAgICAgICAgICByZXR1cm4gc3RhdGUubW9kaWZpZXJzRGF0YVttb2RpZmllci5uYW1lXSA9IE9iamVjdC5hc3NpZ24oe30sIG1vZGlmaWVyLmRhdGEpO1xuICAgICAgICB9KTtcbiAgICAgICAgdmFyIF9fZGVidWdfbG9vcHNfXyA9IDA7XG5cbiAgICAgICAgZm9yICh2YXIgaW5kZXggPSAwOyBpbmRleCA8IHN0YXRlLm9yZGVyZWRNb2RpZmllcnMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICAgICAgX19kZWJ1Z19sb29wc19fICs9IDE7XG5cbiAgICAgICAgICAgIGlmIChfX2RlYnVnX2xvb3BzX18gPiAxMDApIHtcbiAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihJTkZJTklURV9MT09QX0VSUk9SKTtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN0YXRlLnJlc2V0ID09PSB0cnVlKSB7XG4gICAgICAgICAgICBzdGF0ZS5yZXNldCA9IGZhbHNlO1xuICAgICAgICAgICAgaW5kZXggPSAtMTtcbiAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBfc3RhdGUkb3JkZXJlZE1vZGlmaWUgPSBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzW2luZGV4XSxcbiAgICAgICAgICAgICAgZm4gPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUuZm4sXG4gICAgICAgICAgICAgIF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUub3B0aW9ucyxcbiAgICAgICAgICAgICAgX29wdGlvbnMgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyID09PSB2b2lkIDAgPyB7fSA6IF9zdGF0ZSRvcmRlcmVkTW9kaWZpZTIsXG4gICAgICAgICAgICAgIG5hbWUgPSBfc3RhdGUkb3JkZXJlZE1vZGlmaWUubmFtZTtcblxuICAgICAgICAgIGlmICh0eXBlb2YgZm4gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHN0YXRlID0gZm4oe1xuICAgICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICAgIG9wdGlvbnM6IF9vcHRpb25zLFxuICAgICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2VcbiAgICAgICAgICAgIH0pIHx8IHN0YXRlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIC8vIEFzeW5jIGFuZCBvcHRpbWlzdGljYWxseSBvcHRpbWl6ZWQgdXBkYXRlIOKAkyBpdCB3aWxsIG5vdCBiZSBleGVjdXRlZCBpZlxuICAgICAgLy8gbm90IG5lY2Vzc2FyeSAoZGVib3VuY2VkIHRvIHJ1biBhdCBtb3N0IG9uY2UtcGVyLXRpY2spXG4gICAgICB1cGRhdGU6IGRlYm91bmNlKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgICAgaW5zdGFuY2UuZm9yY2VVcGRhdGUoKTtcbiAgICAgICAgICByZXNvbHZlKHN0YXRlKTtcbiAgICAgICAgfSk7XG4gICAgICB9KSxcbiAgICAgIGRlc3Ryb3k6IGZ1bmN0aW9uIGRlc3Ryb3koKSB7XG4gICAgICAgIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgaXNEZXN0cm95ZWQgPSB0cnVlO1xuICAgICAgfVxuICAgIH07XG5cbiAgICBpZiAoIWFyZVZhbGlkRWxlbWVudHMocmVmZXJlbmNlLCBwb3BwZXIpKSB7XG4gICAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoSU5WQUxJRF9FTEVNRU5UX0VSUk9SKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH1cblxuICAgIGluc3RhbmNlLnNldE9wdGlvbnMob3B0aW9ucykudGhlbihmdW5jdGlvbiAoc3RhdGUpIHtcbiAgICAgIGlmICghaXNEZXN0cm95ZWQgJiYgb3B0aW9ucy5vbkZpcnN0VXBkYXRlKSB7XG4gICAgICAgIG9wdGlvbnMub25GaXJzdFVwZGF0ZShzdGF0ZSk7XG4gICAgICB9XG4gICAgfSk7IC8vIE1vZGlmaWVycyBoYXZlIHRoZSBhYmlsaXR5IHRvIGV4ZWN1dGUgYXJiaXRyYXJ5IGNvZGUgYmVmb3JlIHRoZSBmaXJzdFxuICAgIC8vIHVwZGF0ZSBjeWNsZSBydW5zLiBUaGV5IHdpbGwgYmUgZXhlY3V0ZWQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIHVwZGF0ZVxuICAgIC8vIGN5Y2xlLiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGEgbW9kaWZpZXIgYWRkcyBzb21lIHBlcnNpc3RlbnQgZGF0YSB0aGF0XG4gICAgLy8gb3RoZXIgbW9kaWZpZXJzIG5lZWQgdG8gdXNlLCBidXQgdGhlIG1vZGlmaWVyIGlzIHJ1biBhZnRlciB0aGUgZGVwZW5kZW50XG4gICAgLy8gb25lLlxuXG4gICAgZnVuY3Rpb24gcnVuTW9kaWZpZXJFZmZlY3RzKCkge1xuICAgICAgc3RhdGUub3JkZXJlZE1vZGlmaWVycy5mb3JFYWNoKGZ1bmN0aW9uIChfcmVmMykge1xuICAgICAgICB2YXIgbmFtZSA9IF9yZWYzLm5hbWUsXG4gICAgICAgICAgICBfcmVmMyRvcHRpb25zID0gX3JlZjMub3B0aW9ucyxcbiAgICAgICAgICAgIG9wdGlvbnMgPSBfcmVmMyRvcHRpb25zID09PSB2b2lkIDAgPyB7fSA6IF9yZWYzJG9wdGlvbnMsXG4gICAgICAgICAgICBlZmZlY3QgPSBfcmVmMy5lZmZlY3Q7XG5cbiAgICAgICAgaWYgKHR5cGVvZiBlZmZlY3QgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICB2YXIgY2xlYW51cEZuID0gZWZmZWN0KHtcbiAgICAgICAgICAgIHN0YXRlOiBzdGF0ZSxcbiAgICAgICAgICAgIG5hbWU6IG5hbWUsXG4gICAgICAgICAgICBpbnN0YW5jZTogaW5zdGFuY2UsXG4gICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zXG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICB2YXIgbm9vcEZuID0gZnVuY3Rpb24gbm9vcEZuKCkge307XG5cbiAgICAgICAgICBlZmZlY3RDbGVhbnVwRm5zLnB1c2goY2xlYW51cEZuIHx8IG5vb3BGbik7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIGNsZWFudXBNb2RpZmllckVmZmVjdHMoKSB7XG4gICAgICBlZmZlY3RDbGVhbnVwRm5zLmZvckVhY2goZnVuY3Rpb24gKGZuKSB7XG4gICAgICAgIHJldHVybiBmbigpO1xuICAgICAgfSk7XG4gICAgICBlZmZlY3RDbGVhbnVwRm5zID0gW107XG4gICAgfVxuXG4gICAgcmV0dXJuIGluc3RhbmNlO1xuICB9O1xufVxuZXhwb3J0IHZhciBjcmVhdGVQb3BwZXIgPSAvKiNfX1BVUkVfXyovcG9wcGVyR2VuZXJhdG9yKCk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgZGV0ZWN0T3ZlcmZsb3cgfTsiLCJpbXBvcnQgeyBwb3BwZXJHZW5lcmF0b3IsIGRldGVjdE92ZXJmbG93IH0gZnJvbSBcIi4vY3JlYXRlUG9wcGVyLmpzXCI7XG5pbXBvcnQgZXZlbnRMaXN0ZW5lcnMgZnJvbSBcIi4vbW9kaWZpZXJzL2V2ZW50TGlzdGVuZXJzLmpzXCI7XG5pbXBvcnQgcG9wcGVyT2Zmc2V0cyBmcm9tIFwiLi9tb2RpZmllcnMvcG9wcGVyT2Zmc2V0cy5qc1wiO1xuaW1wb3J0IGNvbXB1dGVTdHlsZXMgZnJvbSBcIi4vbW9kaWZpZXJzL2NvbXB1dGVTdHlsZXMuanNcIjtcbmltcG9ydCBhcHBseVN0eWxlcyBmcm9tIFwiLi9tb2RpZmllcnMvYXBwbHlTdHlsZXMuanNcIjtcbnZhciBkZWZhdWx0TW9kaWZpZXJzID0gW2V2ZW50TGlzdGVuZXJzLCBwb3BwZXJPZmZzZXRzLCBjb21wdXRlU3R5bGVzLCBhcHBseVN0eWxlc107XG52YXIgY3JlYXRlUG9wcGVyID0gLyojX19QVVJFX18qL3BvcHBlckdlbmVyYXRvcih7XG4gIGRlZmF1bHRNb2RpZmllcnM6IGRlZmF1bHRNb2RpZmllcnNcbn0pOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGNyZWF0ZVBvcHBlciwgcG9wcGVyR2VuZXJhdG9yLCBkZWZhdWx0TW9kaWZpZXJzLCBkZXRlY3RPdmVyZmxvdyB9OyIsImltcG9ydCB7IHBvcHBlckdlbmVyYXRvciwgZGV0ZWN0T3ZlcmZsb3cgfSBmcm9tIFwiLi9jcmVhdGVQb3BwZXIuanNcIjtcbmltcG9ydCBldmVudExpc3RlbmVycyBmcm9tIFwiLi9tb2RpZmllcnMvZXZlbnRMaXN0ZW5lcnMuanNcIjtcbmltcG9ydCBwb3BwZXJPZmZzZXRzIGZyb20gXCIuL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzXCI7XG5pbXBvcnQgY29tcHV0ZVN0eWxlcyBmcm9tIFwiLi9tb2RpZmllcnMvY29tcHV0ZVN0eWxlcy5qc1wiO1xuaW1wb3J0IGFwcGx5U3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9hcHBseVN0eWxlcy5qc1wiO1xuaW1wb3J0IG9mZnNldCBmcm9tIFwiLi9tb2RpZmllcnMvb2Zmc2V0LmpzXCI7XG5pbXBvcnQgZmxpcCBmcm9tIFwiLi9tb2RpZmllcnMvZmxpcC5qc1wiO1xuaW1wb3J0IHByZXZlbnRPdmVyZmxvdyBmcm9tIFwiLi9tb2RpZmllcnMvcHJldmVudE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgYXJyb3cgZnJvbSBcIi4vbW9kaWZpZXJzL2Fycm93LmpzXCI7XG5pbXBvcnQgaGlkZSBmcm9tIFwiLi9tb2RpZmllcnMvaGlkZS5qc1wiO1xudmFyIGRlZmF1bHRNb2RpZmllcnMgPSBbZXZlbnRMaXN0ZW5lcnMsIHBvcHBlck9mZnNldHMsIGNvbXB1dGVTdHlsZXMsIGFwcGx5U3R5bGVzLCBvZmZzZXQsIGZsaXAsIHByZXZlbnRPdmVyZmxvdywgYXJyb3csIGhpZGVdO1xudmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3Ioe1xuICBkZWZhdWx0TW9kaWZpZXJzOiBkZWZhdWx0TW9kaWZpZXJzXG59KTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIsIHBvcHBlckdlbmVyYXRvciwgZGVmYXVsdE1vZGlmaWVycywgZGV0ZWN0T3ZlcmZsb3cgfTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIgYXMgY3JlYXRlUG9wcGVyTGl0ZSB9IGZyb20gXCIuL3BvcHBlci1saXRlLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0ICogZnJvbSBcIi4vbW9kaWZpZXJzL2luZGV4LmpzXCI7IiwiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4xLjApOiBkcm9wZG93bi5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCAqIGFzIFBvcHBlciBmcm9tICdAcG9wcGVyanMvY29yZSdcblxuaW1wb3J0IHtcbiAgZGVmaW5lSlF1ZXJ5UGx1Z2luLFxuICBnZXRFbGVtZW50LFxuICBnZXRFbGVtZW50RnJvbVNlbGVjdG9yLFxuICBnZXROZXh0QWN0aXZlRWxlbWVudCxcbiAgaXNEaXNhYmxlZCxcbiAgaXNFbGVtZW50LFxuICBpc1JUTCxcbiAgaXNWaXNpYmxlLFxuICBub29wLFxuICB0eXBlQ2hlY2tDb25maWdcbn0gZnJvbSAnLi91dGlsL2luZGV4J1xuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuL2RvbS9ldmVudC1oYW5kbGVyJ1xuaW1wb3J0IE1hbmlwdWxhdG9yIGZyb20gJy4vZG9tL21hbmlwdWxhdG9yJ1xuaW1wb3J0IFNlbGVjdG9yRW5naW5lIGZyb20gJy4vZG9tL3NlbGVjdG9yLWVuZ2luZSdcbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gJy4vYmFzZS1jb21wb25lbnQnXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDb25zdGFudHNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IE5BTUUgPSAnZHJvcGRvd24nXG5jb25zdCBEQVRBX0tFWSA9ICdicy5kcm9wZG93bidcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5jb25zdCBEQVRBX0FQSV9LRVkgPSAnLmRhdGEtYXBpJ1xuXG5jb25zdCBFU0NBUEVfS0VZID0gJ0VzY2FwZSdcbmNvbnN0IFNQQUNFX0tFWSA9ICdTcGFjZSdcbmNvbnN0IFRBQl9LRVkgPSAnVGFiJ1xuY29uc3QgQVJST1dfVVBfS0VZID0gJ0Fycm93VXAnXG5jb25zdCBBUlJPV19ET1dOX0tFWSA9ICdBcnJvd0Rvd24nXG5jb25zdCBSSUdIVF9NT1VTRV9CVVRUT04gPSAyIC8vIE1vdXNlRXZlbnQuYnV0dG9uIHZhbHVlIGZvciB0aGUgc2Vjb25kYXJ5IGJ1dHRvbiwgdXN1YWxseSB0aGUgcmlnaHQgYnV0dG9uXG5cbmNvbnN0IFJFR0VYUF9LRVlET1dOID0gbmV3IFJlZ0V4cChgJHtBUlJPV19VUF9LRVl9fCR7QVJST1dfRE9XTl9LRVl9fCR7RVNDQVBFX0tFWX1gKVxuXG5jb25zdCBFVkVOVF9ISURFID0gYGhpZGUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9ISURERU4gPSBgaGlkZGVuJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfU0hPVyA9IGBzaG93JHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfU0hPV04gPSBgc2hvd24ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSA9IGBjbGljayR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcbmNvbnN0IEVWRU5UX0tFWURPV05fREFUQV9BUEkgPSBga2V5ZG93biR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcbmNvbnN0IEVWRU5UX0tFWVVQX0RBVEFfQVBJID0gYGtleXVwJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuXG5jb25zdCBDTEFTU19OQU1FX1NIT1cgPSAnc2hvdydcbmNvbnN0IENMQVNTX05BTUVfRFJPUFVQID0gJ2Ryb3B1cCdcbmNvbnN0IENMQVNTX05BTUVfRFJPUEVORCA9ICdkcm9wZW5kJ1xuY29uc3QgQ0xBU1NfTkFNRV9EUk9QU1RBUlQgPSAnZHJvcHN0YXJ0J1xuY29uc3QgQ0xBU1NfTkFNRV9OQVZCQVIgPSAnbmF2YmFyJ1xuXG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSA9ICdbZGF0YS1icy10b2dnbGU9XCJkcm9wZG93blwiXSdcbmNvbnN0IFNFTEVDVE9SX01FTlUgPSAnLmRyb3Bkb3duLW1lbnUnXG5jb25zdCBTRUxFQ1RPUl9OQVZCQVJfTkFWID0gJy5uYXZiYXItbmF2J1xuY29uc3QgU0VMRUNUT1JfVklTSUJMRV9JVEVNUyA9ICcuZHJvcGRvd24tbWVudSAuZHJvcGRvd24taXRlbTpub3QoLmRpc2FibGVkKTpub3QoOmRpc2FibGVkKSdcblxuY29uc3QgUExBQ0VNRU5UX1RPUCA9IGlzUlRMKCkgPyAndG9wLWVuZCcgOiAndG9wLXN0YXJ0J1xuY29uc3QgUExBQ0VNRU5UX1RPUEVORCA9IGlzUlRMKCkgPyAndG9wLXN0YXJ0JyA6ICd0b3AtZW5kJ1xuY29uc3QgUExBQ0VNRU5UX0JPVFRPTSA9IGlzUlRMKCkgPyAnYm90dG9tLWVuZCcgOiAnYm90dG9tLXN0YXJ0J1xuY29uc3QgUExBQ0VNRU5UX0JPVFRPTUVORCA9IGlzUlRMKCkgPyAnYm90dG9tLXN0YXJ0JyA6ICdib3R0b20tZW5kJ1xuY29uc3QgUExBQ0VNRU5UX1JJR0hUID0gaXNSVEwoKSA/ICdsZWZ0LXN0YXJ0JyA6ICdyaWdodC1zdGFydCdcbmNvbnN0IFBMQUNFTUVOVF9MRUZUID0gaXNSVEwoKSA/ICdyaWdodC1zdGFydCcgOiAnbGVmdC1zdGFydCdcblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgb2Zmc2V0OiBbMCwgMl0sXG4gIGJvdW5kYXJ5OiAnY2xpcHBpbmdQYXJlbnRzJyxcbiAgcmVmZXJlbmNlOiAndG9nZ2xlJyxcbiAgZGlzcGxheTogJ2R5bmFtaWMnLFxuICBwb3BwZXJDb25maWc6IG51bGwsXG4gIGF1dG9DbG9zZTogdHJ1ZVxufVxuXG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgb2Zmc2V0OiAnKGFycmF5fHN0cmluZ3xmdW5jdGlvbiknLFxuICBib3VuZGFyeTogJyhzdHJpbmd8ZWxlbWVudCknLFxuICByZWZlcmVuY2U6ICcoc3RyaW5nfGVsZW1lbnR8b2JqZWN0KScsXG4gIGRpc3BsYXk6ICdzdHJpbmcnLFxuICBwb3BwZXJDb25maWc6ICcobnVsbHxvYmplY3R8ZnVuY3Rpb24pJyxcbiAgYXV0b0Nsb3NlOiAnKGJvb2xlYW58c3RyaW5nKSdcbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENsYXNzIERlZmluaXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNsYXNzIERyb3Bkb3duIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQpXG5cbiAgICB0aGlzLl9wb3BwZXIgPSBudWxsXG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZylcbiAgICB0aGlzLl9tZW51ID0gdGhpcy5fZ2V0TWVudUVsZW1lbnQoKVxuICAgIHRoaXMuX2luTmF2YmFyID0gdGhpcy5fZGV0ZWN0TmF2YmFyKClcbiAgfVxuXG4gIC8vIEdldHRlcnNcblxuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlXG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuXG4gIHRvZ2dsZSgpIHtcbiAgICByZXR1cm4gdGhpcy5faXNTaG93bigpID8gdGhpcy5oaWRlKCkgOiB0aGlzLnNob3coKVxuICB9XG5cbiAgc2hvdygpIHtcbiAgICBpZiAoaXNEaXNhYmxlZCh0aGlzLl9lbGVtZW50KSB8fCB0aGlzLl9pc1Nob3duKHRoaXMuX21lbnUpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCByZWxhdGVkVGFyZ2V0ID0ge1xuICAgICAgcmVsYXRlZFRhcmdldDogdGhpcy5fZWxlbWVudFxuICAgIH1cblxuICAgIGNvbnN0IHNob3dFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1csIHJlbGF0ZWRUYXJnZXQpXG5cbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHBhcmVudCA9IERyb3Bkb3duLmdldFBhcmVudEZyb21FbGVtZW50KHRoaXMuX2VsZW1lbnQpXG4gICAgLy8gVG90YWxseSBkaXNhYmxlIFBvcHBlciBmb3IgRHJvcGRvd25zIGluIE5hdmJhclxuICAgIGlmICh0aGlzLl9pbk5hdmJhcikge1xuICAgICAgTWFuaXB1bGF0b3Iuc2V0RGF0YUF0dHJpYnV0ZSh0aGlzLl9tZW51LCAncG9wcGVyJywgJ25vbmUnKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9jcmVhdGVQb3BwZXIocGFyZW50KVxuICAgIH1cblxuICAgIC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSBhZGQgZXh0cmFcbiAgICAvLyBlbXB0eSBtb3VzZW92ZXIgbGlzdGVuZXJzIHRvIHRoZSBib2R5J3MgaW1tZWRpYXRlIGNoaWxkcmVuO1xuICAgIC8vIG9ubHkgbmVlZGVkIGJlY2F1c2Ugb2YgYnJva2VuIGV2ZW50IGRlbGVnYXRpb24gb24gaU9TXG4gICAgLy8gaHR0cHM6Ly93d3cucXVpcmtzbW9kZS5vcmcvYmxvZy9hcmNoaXZlcy8yMDE0LzAyL21vdXNlX2V2ZW50X2J1Yi5odG1sXG4gICAgaWYgKCdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCAmJlxuICAgICAgIXBhcmVudC5jbG9zZXN0KFNFTEVDVE9SX05BVkJBUl9OQVYpKSB7XG4gICAgICBbXS5jb25jYXQoLi4uZG9jdW1lbnQuYm9keS5jaGlsZHJlbilcbiAgICAgICAgLmZvckVhY2goZWxlbSA9PiBFdmVudEhhbmRsZXIub24oZWxlbSwgJ21vdXNlb3ZlcicsIG5vb3ApKVxuICAgIH1cblxuICAgIHRoaXMuX2VsZW1lbnQuZm9jdXMoKVxuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgdHJ1ZSlcblxuICAgIHRoaXMuX21lbnUuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1cpXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVylcbiAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XTiwgcmVsYXRlZFRhcmdldClcbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgaWYgKGlzRGlzYWJsZWQodGhpcy5fZWxlbWVudCkgfHwgIXRoaXMuX2lzU2hvd24odGhpcy5fbWVudSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSB7XG4gICAgICByZWxhdGVkVGFyZ2V0OiB0aGlzLl9lbGVtZW50XG4gICAgfVxuXG4gICAgdGhpcy5fY29tcGxldGVIaWRlKHJlbGF0ZWRUYXJnZXQpXG4gIH1cblxuICBkaXNwb3NlKCkge1xuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHRoaXMuX3BvcHBlci5kZXN0cm95KClcbiAgICB9XG5cbiAgICBzdXBlci5kaXNwb3NlKClcbiAgfVxuXG4gIHVwZGF0ZSgpIHtcbiAgICB0aGlzLl9pbk5hdmJhciA9IHRoaXMuX2RldGVjdE5hdmJhcigpXG4gICAgaWYgKHRoaXMuX3BvcHBlcikge1xuICAgICAgdGhpcy5fcG9wcGVyLnVwZGF0ZSgpXG4gICAgfVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuXG4gIF9jb21wbGV0ZUhpZGUocmVsYXRlZFRhcmdldCkge1xuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREUsIHJlbGF0ZWRUYXJnZXQpXG4gICAgaWYgKGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyBJZiB0aGlzIGlzIGEgdG91Y2gtZW5hYmxlZCBkZXZpY2Ugd2UgcmVtb3ZlIHRoZSBleHRyYVxuICAgIC8vIGVtcHR5IG1vdXNlb3ZlciBsaXN0ZW5lcnMgd2UgYWRkZWQgZm9yIGlPUyBzdXBwb3J0XG4gICAgaWYgKCdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgW10uY29uY2F0KC4uLmRvY3VtZW50LmJvZHkuY2hpbGRyZW4pXG4gICAgICAgIC5mb3JFYWNoKGVsZW0gPT4gRXZlbnRIYW5kbGVyLm9mZihlbGVtLCAnbW91c2VvdmVyJywgbm9vcCkpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX3BvcHBlcikge1xuICAgICAgdGhpcy5fcG9wcGVyLmRlc3Ryb3koKVxuICAgIH1cblxuICAgIHRoaXMuX21lbnUuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVylcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsICdmYWxzZScpXG4gICAgTWFuaXB1bGF0b3IucmVtb3ZlRGF0YUF0dHJpYnV0ZSh0aGlzLl9tZW51LCAncG9wcGVyJylcbiAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURERU4sIHJlbGF0ZWRUYXJnZXQpXG4gIH1cblxuICBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IHtcbiAgICAgIC4uLnRoaXMuY29uc3RydWN0b3IuRGVmYXVsdCxcbiAgICAgIC4uLk1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQpLFxuICAgICAgLi4uY29uZmlnXG4gICAgfVxuXG4gICAgdHlwZUNoZWNrQ29uZmlnKE5BTUUsIGNvbmZpZywgdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0VHlwZSlcblxuICAgIGlmICh0eXBlb2YgY29uZmlnLnJlZmVyZW5jZSA9PT0gJ29iamVjdCcgJiYgIWlzRWxlbWVudChjb25maWcucmVmZXJlbmNlKSAmJlxuICAgICAgdHlwZW9mIGNvbmZpZy5yZWZlcmVuY2UuZ2V0Qm91bmRpbmdDbGllbnRSZWN0ICE9PSAnZnVuY3Rpb24nXG4gICAgKSB7XG4gICAgICAvLyBQb3BwZXIgdmlydHVhbCBlbGVtZW50cyByZXF1aXJlIGEgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG1ldGhvZFxuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgJHtOQU1FLnRvVXBwZXJDYXNlKCl9OiBPcHRpb24gXCJyZWZlcmVuY2VcIiBwcm92aWRlZCB0eXBlIFwib2JqZWN0XCIgd2l0aG91dCBhIHJlcXVpcmVkIFwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0XCIgbWV0aG9kLmApXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG5cbiAgX2NyZWF0ZVBvcHBlcihwYXJlbnQpIHtcbiAgICBpZiAodHlwZW9mIFBvcHBlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Jvb3RzdHJhcFxcJ3MgZHJvcGRvd25zIHJlcXVpcmUgUG9wcGVyIChodHRwczovL3BvcHBlci5qcy5vcmcpJylcbiAgICB9XG5cbiAgICBsZXQgcmVmZXJlbmNlRWxlbWVudCA9IHRoaXMuX2VsZW1lbnRcblxuICAgIGlmICh0aGlzLl9jb25maWcucmVmZXJlbmNlID09PSAncGFyZW50Jykge1xuICAgICAgcmVmZXJlbmNlRWxlbWVudCA9IHBhcmVudFxuICAgIH0gZWxzZSBpZiAoaXNFbGVtZW50KHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UpKSB7XG4gICAgICByZWZlcmVuY2VFbGVtZW50ID0gZ2V0RWxlbWVudCh0aGlzLl9jb25maWcucmVmZXJlbmNlKVxuICAgIH0gZWxzZSBpZiAodHlwZW9mIHRoaXMuX2NvbmZpZy5yZWZlcmVuY2UgPT09ICdvYmplY3QnKSB7XG4gICAgICByZWZlcmVuY2VFbGVtZW50ID0gdGhpcy5fY29uZmlnLnJlZmVyZW5jZVxuICAgIH1cblxuICAgIGNvbnN0IHBvcHBlckNvbmZpZyA9IHRoaXMuX2dldFBvcHBlckNvbmZpZygpXG4gICAgY29uc3QgaXNEaXNwbGF5U3RhdGljID0gcG9wcGVyQ29uZmlnLm1vZGlmaWVycy5maW5kKG1vZGlmaWVyID0+IG1vZGlmaWVyLm5hbWUgPT09ICdhcHBseVN0eWxlcycgJiYgbW9kaWZpZXIuZW5hYmxlZCA9PT0gZmFsc2UpXG5cbiAgICB0aGlzLl9wb3BwZXIgPSBQb3BwZXIuY3JlYXRlUG9wcGVyKHJlZmVyZW5jZUVsZW1lbnQsIHRoaXMuX21lbnUsIHBvcHBlckNvbmZpZylcblxuICAgIGlmIChpc0Rpc3BsYXlTdGF0aWMpIHtcbiAgICAgIE1hbmlwdWxhdG9yLnNldERhdGFBdHRyaWJ1dGUodGhpcy5fbWVudSwgJ3BvcHBlcicsICdzdGF0aWMnKVxuICAgIH1cbiAgfVxuXG4gIF9pc1Nob3duKGVsZW1lbnQgPSB0aGlzLl9lbGVtZW50KSB7XG4gICAgcmV0dXJuIGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0hPVylcbiAgfVxuXG4gIF9nZXRNZW51RWxlbWVudCgpIHtcbiAgICByZXR1cm4gU2VsZWN0b3JFbmdpbmUubmV4dCh0aGlzLl9lbGVtZW50LCBTRUxFQ1RPUl9NRU5VKVswXVxuICB9XG5cbiAgX2dldFBsYWNlbWVudCgpIHtcbiAgICBjb25zdCBwYXJlbnREcm9wZG93biA9IHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZVxuXG4gICAgaWYgKHBhcmVudERyb3Bkb3duLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0RST1BFTkQpKSB7XG4gICAgICByZXR1cm4gUExBQ0VNRU5UX1JJR0hUXG4gICAgfVxuXG4gICAgaWYgKHBhcmVudERyb3Bkb3duLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0RST1BTVEFSVCkpIHtcbiAgICAgIHJldHVybiBQTEFDRU1FTlRfTEVGVFxuICAgIH1cblxuICAgIC8vIFdlIG5lZWQgdG8gdHJpbSB0aGUgdmFsdWUgYmVjYXVzZSBjdXN0b20gcHJvcGVydGllcyBjYW4gYWxzbyBpbmNsdWRlIHNwYWNlc1xuICAgIGNvbnN0IGlzRW5kID0gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLl9tZW51KS5nZXRQcm9wZXJ0eVZhbHVlKCctLWJzLXBvc2l0aW9uJykudHJpbSgpID09PSAnZW5kJ1xuXG4gICAgaWYgKHBhcmVudERyb3Bkb3duLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0RST1BVUCkpIHtcbiAgICAgIHJldHVybiBpc0VuZCA/IFBMQUNFTUVOVF9UT1BFTkQgOiBQTEFDRU1FTlRfVE9QXG4gICAgfVxuXG4gICAgcmV0dXJuIGlzRW5kID8gUExBQ0VNRU5UX0JPVFRPTUVORCA6IFBMQUNFTUVOVF9CT1RUT01cbiAgfVxuXG4gIF9kZXRlY3ROYXZiYXIoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnQuY2xvc2VzdChgLiR7Q0xBU1NfTkFNRV9OQVZCQVJ9YCkgIT09IG51bGxcbiAgfVxuXG4gIF9nZXRPZmZzZXQoKSB7XG4gICAgY29uc3QgeyBvZmZzZXQgfSA9IHRoaXMuX2NvbmZpZ1xuXG4gICAgaWYgKHR5cGVvZiBvZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gb2Zmc2V0LnNwbGl0KCcsJykubWFwKHZhbCA9PiBOdW1iZXIucGFyc2VJbnQodmFsLCAxMCkpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvZmZzZXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBwb3BwZXJEYXRhID0+IG9mZnNldChwb3BwZXJEYXRhLCB0aGlzLl9lbGVtZW50KVxuICAgIH1cblxuICAgIHJldHVybiBvZmZzZXRcbiAgfVxuXG4gIF9nZXRQb3BwZXJDb25maWcoKSB7XG4gICAgY29uc3QgZGVmYXVsdEJzUG9wcGVyQ29uZmlnID0ge1xuICAgICAgcGxhY2VtZW50OiB0aGlzLl9nZXRQbGFjZW1lbnQoKSxcbiAgICAgIG1vZGlmaWVyczogW3tcbiAgICAgICAgbmFtZTogJ3ByZXZlbnRPdmVyZmxvdycsXG4gICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICBib3VuZGFyeTogdGhpcy5fY29uZmlnLmJvdW5kYXJ5XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICB7XG4gICAgICAgIG5hbWU6ICdvZmZzZXQnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgb2Zmc2V0OiB0aGlzLl9nZXRPZmZzZXQoKVxuICAgICAgICB9XG4gICAgICB9XVxuICAgIH1cblxuICAgIC8vIERpc2FibGUgUG9wcGVyIGlmIHdlIGhhdmUgYSBzdGF0aWMgZGlzcGxheVxuICAgIGlmICh0aGlzLl9jb25maWcuZGlzcGxheSA9PT0gJ3N0YXRpYycpIHtcbiAgICAgIGRlZmF1bHRCc1BvcHBlckNvbmZpZy5tb2RpZmllcnMgPSBbe1xuICAgICAgICBuYW1lOiAnYXBwbHlTdHlsZXMnLFxuICAgICAgICBlbmFibGVkOiBmYWxzZVxuICAgICAgfV1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZGVmYXVsdEJzUG9wcGVyQ29uZmlnLFxuICAgICAgLi4uKHR5cGVvZiB0aGlzLl9jb25maWcucG9wcGVyQ29uZmlnID09PSAnZnVuY3Rpb24nID8gdGhpcy5fY29uZmlnLnBvcHBlckNvbmZpZyhkZWZhdWx0QnNQb3BwZXJDb25maWcpIDogdGhpcy5fY29uZmlnLnBvcHBlckNvbmZpZylcbiAgICB9XG4gIH1cblxuICBfc2VsZWN0TWVudUl0ZW0oeyBrZXksIHRhcmdldCB9KSB7XG4gICAgY29uc3QgaXRlbXMgPSBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX1ZJU0lCTEVfSVRFTVMsIHRoaXMuX21lbnUpLmZpbHRlcihpc1Zpc2libGUpXG5cbiAgICBpZiAoIWl0ZW1zLmxlbmd0aCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gaWYgdGFyZ2V0IGlzbid0IGluY2x1ZGVkIGluIGl0ZW1zIChlLmcuIHdoZW4gZXhwYW5kaW5nIHRoZSBkcm9wZG93bilcbiAgICAvLyBhbGxvdyBjeWNsaW5nIHRvIGdldCB0aGUgbGFzdCBpdGVtIGluIGNhc2Uga2V5IGVxdWFscyBBUlJPV19VUF9LRVlcbiAgICBnZXROZXh0QWN0aXZlRWxlbWVudChpdGVtcywgdGFyZ2V0LCBrZXkgPT09IEFSUk9XX0RPV05fS0VZLCAhaXRlbXMuaW5jbHVkZXModGFyZ2V0KSkuZm9jdXMoKVxuICB9XG5cbiAgLy8gU3RhdGljXG5cbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBEcm9wZG93bi5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZylcblxuICAgICAgaWYgKHR5cGVvZiBjb25maWcgIT09ICdzdHJpbmcnKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICBpZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKVxuICAgICAgfVxuXG4gICAgICBkYXRhW2NvbmZpZ10oKVxuICAgIH0pXG4gIH1cblxuICBzdGF0aWMgY2xlYXJNZW51cyhldmVudCkge1xuICAgIGlmIChldmVudCAmJiAoZXZlbnQuYnV0dG9uID09PSBSSUdIVF9NT1VTRV9CVVRUT04gfHwgKGV2ZW50LnR5cGUgPT09ICdrZXl1cCcgJiYgZXZlbnQua2V5ICE9PSBUQUJfS0VZKSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHRvZ2dsZXMgPSBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0RBVEFfVE9HR0xFKVxuXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRvZ2dsZXMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGNvbnRleHQgPSBEcm9wZG93bi5nZXRJbnN0YW5jZSh0b2dnbGVzW2ldKVxuICAgICAgaWYgKCFjb250ZXh0IHx8IGNvbnRleHQuX2NvbmZpZy5hdXRvQ2xvc2UgPT09IGZhbHNlKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGlmICghY29udGV4dC5faXNTaG93bigpKSB7XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIGNvbnN0IHJlbGF0ZWRUYXJnZXQgPSB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IGNvbnRleHQuX2VsZW1lbnRcbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGNvbXBvc2VkUGF0aCA9IGV2ZW50LmNvbXBvc2VkUGF0aCgpXG4gICAgICAgIGNvbnN0IGlzTWVudVRhcmdldCA9IGNvbXBvc2VkUGF0aC5pbmNsdWRlcyhjb250ZXh0Ll9tZW51KVxuICAgICAgICBpZiAoXG4gICAgICAgICAgY29tcG9zZWRQYXRoLmluY2x1ZGVzKGNvbnRleHQuX2VsZW1lbnQpIHx8XG4gICAgICAgICAgKGNvbnRleHQuX2NvbmZpZy5hdXRvQ2xvc2UgPT09ICdpbnNpZGUnICYmICFpc01lbnVUYXJnZXQpIHx8XG4gICAgICAgICAgKGNvbnRleHQuX2NvbmZpZy5hdXRvQ2xvc2UgPT09ICdvdXRzaWRlJyAmJiBpc01lbnVUYXJnZXQpXG4gICAgICAgICkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyBUYWIgbmF2aWdhdGlvbiB0aHJvdWdoIHRoZSBkcm9wZG93biBtZW51IG9yIGV2ZW50cyBmcm9tIGNvbnRhaW5lZCBpbnB1dHMgc2hvdWxkbid0IGNsb3NlIHRoZSBtZW51XG4gICAgICAgIGlmIChjb250ZXh0Ll9tZW51LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiYgKChldmVudC50eXBlID09PSAna2V5dXAnICYmIGV2ZW50LmtleSA9PT0gVEFCX0tFWSkgfHwgL2lucHV0fHNlbGVjdHxvcHRpb258dGV4dGFyZWF8Zm9ybS9pLnRlc3QoZXZlbnQudGFyZ2V0LnRhZ05hbWUpKSkge1xuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gJ2NsaWNrJykge1xuICAgICAgICAgIHJlbGF0ZWRUYXJnZXQuY2xpY2tFdmVudCA9IGV2ZW50XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgY29udGV4dC5fY29tcGxldGVIaWRlKHJlbGF0ZWRUYXJnZXQpXG4gICAgfVxuICB9XG5cbiAgc3RhdGljIGdldFBhcmVudEZyb21FbGVtZW50KGVsZW1lbnQpIHtcbiAgICByZXR1cm4gZ2V0RWxlbWVudEZyb21TZWxlY3RvcihlbGVtZW50KSB8fCBlbGVtZW50LnBhcmVudE5vZGVcbiAgfVxuXG4gIHN0YXRpYyBkYXRhQXBpS2V5ZG93bkhhbmRsZXIoZXZlbnQpIHtcbiAgICAvLyBJZiBub3QgaW5wdXQvdGV4dGFyZWE6XG4gICAgLy8gIC0gQW5kIG5vdCBhIGtleSBpbiBSRUdFWFBfS0VZRE9XTiA9PiBub3QgYSBkcm9wZG93biBjb21tYW5kXG4gICAgLy8gSWYgaW5wdXQvdGV4dGFyZWE6XG4gICAgLy8gIC0gSWYgc3BhY2Uga2V5ID0+IG5vdCBhIGRyb3Bkb3duIGNvbW1hbmRcbiAgICAvLyAgLSBJZiBrZXkgaXMgb3RoZXIgdGhhbiBlc2NhcGVcbiAgICAvLyAgICAtIElmIGtleSBpcyBub3QgdXAgb3IgZG93biA9PiBub3QgYSBkcm9wZG93biBjb21tYW5kXG4gICAgLy8gICAgLSBJZiB0cmlnZ2VyIGluc2lkZSB0aGUgbWVudSA9PiBub3QgYSBkcm9wZG93biBjb21tYW5kXG4gICAgaWYgKC9pbnB1dHx0ZXh0YXJlYS9pLnRlc3QoZXZlbnQudGFyZ2V0LnRhZ05hbWUpID9cbiAgICAgIGV2ZW50LmtleSA9PT0gU1BBQ0VfS0VZIHx8IChldmVudC5rZXkgIT09IEVTQ0FQRV9LRVkgJiZcbiAgICAgICgoZXZlbnQua2V5ICE9PSBBUlJPV19ET1dOX0tFWSAmJiBldmVudC5rZXkgIT09IEFSUk9XX1VQX0tFWSkgfHxcbiAgICAgICAgZXZlbnQudGFyZ2V0LmNsb3Nlc3QoU0VMRUNUT1JfTUVOVSkpKSA6XG4gICAgICAhUkVHRVhQX0tFWURPV04udGVzdChldmVudC5rZXkpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBpc0FjdGl2ZSA9IHRoaXMuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0hPVylcblxuICAgIGlmICghaXNBY3RpdmUgJiYgZXZlbnQua2V5ID09PSBFU0NBUEVfS0VZKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKClcblxuICAgIGlmIChpc0Rpc2FibGVkKHRoaXMpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBnZXRUb2dnbGVCdXR0b24gPSB0aGlzLm1hdGNoZXMoU0VMRUNUT1JfREFUQV9UT0dHTEUpID8gdGhpcyA6IFNlbGVjdG9yRW5naW5lLnByZXYodGhpcywgU0VMRUNUT1JfREFUQV9UT0dHTEUpWzBdXG4gICAgY29uc3QgaW5zdGFuY2UgPSBEcm9wZG93bi5nZXRPckNyZWF0ZUluc3RhbmNlKGdldFRvZ2dsZUJ1dHRvbilcblxuICAgIGlmIChldmVudC5rZXkgPT09IEVTQ0FQRV9LRVkpIHtcbiAgICAgIGluc3RhbmNlLmhpZGUoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LmtleSA9PT0gQVJST1dfVVBfS0VZIHx8IGV2ZW50LmtleSA9PT0gQVJST1dfRE9XTl9LRVkpIHtcbiAgICAgIGlmICghaXNBY3RpdmUpIHtcbiAgICAgICAgaW5zdGFuY2Uuc2hvdygpXG4gICAgICB9XG5cbiAgICAgIGluc3RhbmNlLl9zZWxlY3RNZW51SXRlbShldmVudClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghaXNBY3RpdmUgfHwgZXZlbnQua2V5ID09PSBTUEFDRV9LRVkpIHtcbiAgICAgIERyb3Bkb3duLmNsZWFyTWVudXMoKVxuICAgIH1cbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfS0VZRE9XTl9EQVRBX0FQSSwgU0VMRUNUT1JfREFUQV9UT0dHTEUsIERyb3Bkb3duLmRhdGFBcGlLZXlkb3duSGFuZGxlcilcbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfS0VZRE9XTl9EQVRBX0FQSSwgU0VMRUNUT1JfTUVOVSwgRHJvcGRvd24uZGF0YUFwaUtleWRvd25IYW5kbGVyKVxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSwgRHJvcGRvd24uY2xlYXJNZW51cylcbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfS0VZVVBfREFUQV9BUEksIERyb3Bkb3duLmNsZWFyTWVudXMpXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgRHJvcGRvd24uZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKS50b2dnbGUoKVxufSlcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIGpRdWVyeVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBhZGQgLkRyb3Bkb3duIHRvIGpRdWVyeSBvbmx5IGlmIGpRdWVyeSBpcyBwcmVzZW50XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKERyb3Bkb3duKVxuXG5leHBvcnQgZGVmYXVsdCBEcm9wZG93blxuIiwiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4xLjApOiB1dGlsL3Njcm9sbEJhci5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCBTZWxlY3RvckVuZ2luZSBmcm9tICcuLi9kb20vc2VsZWN0b3ItZW5naW5lJ1xuaW1wb3J0IE1hbmlwdWxhdG9yIGZyb20gJy4uL2RvbS9tYW5pcHVsYXRvcidcbmltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gJy4vaW5kZXgnXG5cbmNvbnN0IFNFTEVDVE9SX0ZJWEVEX0NPTlRFTlQgPSAnLmZpeGVkLXRvcCwgLmZpeGVkLWJvdHRvbSwgLmlzLWZpeGVkLCAuc3RpY2t5LXRvcCdcbmNvbnN0IFNFTEVDVE9SX1NUSUNLWV9DT05URU5UID0gJy5zdGlja3ktdG9wJ1xuXG5jbGFzcyBTY3JvbGxCYXJIZWxwZXIge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICB0aGlzLl9lbGVtZW50ID0gZG9jdW1lbnQuYm9keVxuICB9XG5cbiAgZ2V0V2lkdGgoKSB7XG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQVBJL1dpbmRvdy9pbm5lcldpZHRoI3VzYWdlX25vdGVzXG4gICAgY29uc3QgZG9jdW1lbnRXaWR0aCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aFxuICAgIHJldHVybiBNYXRoLmFicyh3aW5kb3cuaW5uZXJXaWR0aCAtIGRvY3VtZW50V2lkdGgpXG4gIH1cblxuICBoaWRlKCkge1xuICAgIGNvbnN0IHdpZHRoID0gdGhpcy5nZXRXaWR0aCgpXG4gICAgdGhpcy5fZGlzYWJsZU92ZXJGbG93KClcbiAgICAvLyBnaXZlIHBhZGRpbmcgdG8gZWxlbWVudCB0byBiYWxhbmNlIHRoZSBoaWRkZW4gc2Nyb2xsYmFyIHdpZHRoXG4gICAgdGhpcy5fc2V0RWxlbWVudEF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCwgJ3BhZGRpbmdSaWdodCcsIGNhbGN1bGF0ZWRWYWx1ZSA9PiBjYWxjdWxhdGVkVmFsdWUgKyB3aWR0aClcbiAgICAvLyB0cmljazogV2UgYWRqdXN0IHBvc2l0aXZlIHBhZGRpbmdSaWdodCBhbmQgbmVnYXRpdmUgbWFyZ2luUmlnaHQgdG8gc3RpY2t5LXRvcCBlbGVtZW50cyB0byBrZWVwIHNob3dpbmcgZnVsbHdpZHRoXG4gICAgdGhpcy5fc2V0RWxlbWVudEF0dHJpYnV0ZXMoU0VMRUNUT1JfRklYRURfQ09OVEVOVCwgJ3BhZGRpbmdSaWdodCcsIGNhbGN1bGF0ZWRWYWx1ZSA9PiBjYWxjdWxhdGVkVmFsdWUgKyB3aWR0aClcbiAgICB0aGlzLl9zZXRFbGVtZW50QXR0cmlidXRlcyhTRUxFQ1RPUl9TVElDS1lfQ09OVEVOVCwgJ21hcmdpblJpZ2h0JywgY2FsY3VsYXRlZFZhbHVlID0+IGNhbGN1bGF0ZWRWYWx1ZSAtIHdpZHRoKVxuICB9XG5cbiAgX2Rpc2FibGVPdmVyRmxvdygpIHtcbiAgICB0aGlzLl9zYXZlSW5pdGlhbEF0dHJpYnV0ZSh0aGlzLl9lbGVtZW50LCAnb3ZlcmZsb3cnKVxuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUub3ZlcmZsb3cgPSAnaGlkZGVuJ1xuICB9XG5cbiAgX3NldEVsZW1lbnRBdHRyaWJ1dGVzKHNlbGVjdG9yLCBzdHlsZVByb3AsIGNhbGxiYWNrKSB7XG4gICAgY29uc3Qgc2Nyb2xsYmFyV2lkdGggPSB0aGlzLmdldFdpZHRoKClcbiAgICBjb25zdCBtYW5pcHVsYXRpb25DYWxsQmFjayA9IGVsZW1lbnQgPT4ge1xuICAgICAgaWYgKGVsZW1lbnQgIT09IHRoaXMuX2VsZW1lbnQgJiYgd2luZG93LmlubmVyV2lkdGggPiBlbGVtZW50LmNsaWVudFdpZHRoICsgc2Nyb2xsYmFyV2lkdGgpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX3NhdmVJbml0aWFsQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlUHJvcClcbiAgICAgIGNvbnN0IGNhbGN1bGF0ZWRWYWx1ZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpW3N0eWxlUHJvcF1cbiAgICAgIGVsZW1lbnQuc3R5bGVbc3R5bGVQcm9wXSA9IGAke2NhbGxiYWNrKE51bWJlci5wYXJzZUZsb2F0KGNhbGN1bGF0ZWRWYWx1ZSkpfXB4YFxuICAgIH1cblxuICAgIHRoaXMuX2FwcGx5TWFuaXB1bGF0aW9uQ2FsbGJhY2soc2VsZWN0b3IsIG1hbmlwdWxhdGlvbkNhbGxCYWNrKVxuICB9XG5cbiAgcmVzZXQoKSB7XG4gICAgdGhpcy5fcmVzZXRFbGVtZW50QXR0cmlidXRlcyh0aGlzLl9lbGVtZW50LCAnb3ZlcmZsb3cnKVxuICAgIHRoaXMuX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCwgJ3BhZGRpbmdSaWdodCcpXG4gICAgdGhpcy5fcmVzZXRFbGVtZW50QXR0cmlidXRlcyhTRUxFQ1RPUl9GSVhFRF9DT05URU5ULCAncGFkZGluZ1JpZ2h0JylcbiAgICB0aGlzLl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKFNFTEVDVE9SX1NUSUNLWV9DT05URU5ULCAnbWFyZ2luUmlnaHQnKVxuICB9XG5cbiAgX3NhdmVJbml0aWFsQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlUHJvcCkge1xuICAgIGNvbnN0IGFjdHVhbFZhbHVlID0gZWxlbWVudC5zdHlsZVtzdHlsZVByb3BdXG4gICAgaWYgKGFjdHVhbFZhbHVlKSB7XG4gICAgICBNYW5pcHVsYXRvci5zZXREYXRhQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlUHJvcCwgYWN0dWFsVmFsdWUpXG4gICAgfVxuICB9XG5cbiAgX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXMoc2VsZWN0b3IsIHN0eWxlUHJvcCkge1xuICAgIGNvbnN0IG1hbmlwdWxhdGlvbkNhbGxCYWNrID0gZWxlbWVudCA9PiB7XG4gICAgICBjb25zdCB2YWx1ZSA9IE1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGUoZWxlbWVudCwgc3R5bGVQcm9wKVxuICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgZWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eShzdHlsZVByb3ApXG4gICAgICB9IGVsc2Uge1xuICAgICAgICBNYW5pcHVsYXRvci5yZW1vdmVEYXRhQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlUHJvcClcbiAgICAgICAgZWxlbWVudC5zdHlsZVtzdHlsZVByb3BdID0gdmFsdWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLl9hcHBseU1hbmlwdWxhdGlvbkNhbGxiYWNrKHNlbGVjdG9yLCBtYW5pcHVsYXRpb25DYWxsQmFjaylcbiAgfVxuXG4gIF9hcHBseU1hbmlwdWxhdGlvbkNhbGxiYWNrKHNlbGVjdG9yLCBjYWxsQmFjaykge1xuICAgIGlmIChpc0VsZW1lbnQoc2VsZWN0b3IpKSB7XG4gICAgICBjYWxsQmFjayhzZWxlY3RvcilcbiAgICB9IGVsc2Uge1xuICAgICAgU2VsZWN0b3JFbmdpbmUuZmluZChzZWxlY3RvciwgdGhpcy5fZWxlbWVudCkuZm9yRWFjaChjYWxsQmFjaylcbiAgICB9XG4gIH1cblxuICBpc092ZXJmbG93aW5nKCkge1xuICAgIHJldHVybiB0aGlzLmdldFdpZHRoKCkgPiAwXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgU2Nyb2xsQmFySGVscGVyXG4iLCIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjEuMCk6IHV0aWwvYmFja2Ryb3AuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFzdGVyL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgeyBleGVjdXRlLCBleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uLCBnZXRFbGVtZW50LCByZWZsb3csIHR5cGVDaGVja0NvbmZpZyB9IGZyb20gJy4vaW5kZXgnXG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIGNsYXNzTmFtZTogJ21vZGFsLWJhY2tkcm9wJyxcbiAgaXNWaXNpYmxlOiB0cnVlLCAvLyBpZiBmYWxzZSwgd2UgdXNlIHRoZSBiYWNrZHJvcCBoZWxwZXIgd2l0aG91dCBhZGRpbmcgYW55IGVsZW1lbnQgdG8gdGhlIGRvbVxuICBpc0FuaW1hdGVkOiBmYWxzZSxcbiAgcm9vdEVsZW1lbnQ6ICdib2R5JywgLy8gZ2l2ZSB0aGUgY2hvaWNlIHRvIHBsYWNlIGJhY2tkcm9wIHVuZGVyIGRpZmZlcmVudCBlbGVtZW50c1xuICBjbGlja0NhbGxiYWNrOiBudWxsXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBjbGFzc05hbWU6ICdzdHJpbmcnLFxuICBpc1Zpc2libGU6ICdib29sZWFuJyxcbiAgaXNBbmltYXRlZDogJ2Jvb2xlYW4nLFxuICByb290RWxlbWVudDogJyhlbGVtZW50fHN0cmluZyknLFxuICBjbGlja0NhbGxiYWNrOiAnKGZ1bmN0aW9ufG51bGwpJ1xufVxuY29uc3QgTkFNRSA9ICdiYWNrZHJvcCdcbmNvbnN0IENMQVNTX05BTUVfRkFERSA9ICdmYWRlJ1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XID0gJ3Nob3cnXG5cbmNvbnN0IEVWRU5UX01PVVNFRE9XTiA9IGBtb3VzZWRvd24uYnMuJHtOQU1FfWBcblxuY2xhc3MgQmFja2Ryb3Age1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKVxuICAgIHRoaXMuX2lzQXBwZW5kZWQgPSBmYWxzZVxuICAgIHRoaXMuX2VsZW1lbnQgPSBudWxsXG4gIH1cblxuICBzaG93KGNhbGxiYWNrKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcuaXNWaXNpYmxlKSB7XG4gICAgICBleGVjdXRlKGNhbGxiYWNrKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fYXBwZW5kKClcblxuICAgIGlmICh0aGlzLl9jb25maWcuaXNBbmltYXRlZCkge1xuICAgICAgcmVmbG93KHRoaXMuX2dldEVsZW1lbnQoKSlcbiAgICB9XG5cbiAgICB0aGlzLl9nZXRFbGVtZW50KCkuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1cpXG5cbiAgICB0aGlzLl9lbXVsYXRlQW5pbWF0aW9uKCgpID0+IHtcbiAgICAgIGV4ZWN1dGUoY2FsbGJhY2spXG4gICAgfSlcbiAgfVxuXG4gIGhpZGUoY2FsbGJhY2spIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5pc1Zpc2libGUpIHtcbiAgICAgIGV4ZWN1dGUoY2FsbGJhY2spXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9nZXRFbGVtZW50KCkuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpXG5cbiAgICB0aGlzLl9lbXVsYXRlQW5pbWF0aW9uKCgpID0+IHtcbiAgICAgIHRoaXMuZGlzcG9zZSgpXG4gICAgICBleGVjdXRlKGNhbGxiYWNrKVxuICAgIH0pXG4gIH1cblxuICAvLyBQcml2YXRlXG5cbiAgX2dldEVsZW1lbnQoKSB7XG4gICAgaWYgKCF0aGlzLl9lbGVtZW50KSB7XG4gICAgICBjb25zdCBiYWNrZHJvcCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpXG4gICAgICBiYWNrZHJvcC5jbGFzc05hbWUgPSB0aGlzLl9jb25maWcuY2xhc3NOYW1lXG4gICAgICBpZiAodGhpcy5fY29uZmlnLmlzQW5pbWF0ZWQpIHtcbiAgICAgICAgYmFja2Ryb3AuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0ZBREUpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2VsZW1lbnQgPSBiYWNrZHJvcFxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLl9lbGVtZW50XG4gIH1cblxuICBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IHtcbiAgICAgIC4uLkRlZmF1bHQsXG4gICAgICAuLi4odHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiB7fSlcbiAgICB9XG5cbiAgICAvLyB1c2UgZ2V0RWxlbWVudCgpIHdpdGggdGhlIGRlZmF1bHQgXCJib2R5XCIgdG8gZ2V0IGEgZnJlc2ggRWxlbWVudCBvbiBlYWNoIGluc3RhbnRpYXRpb25cbiAgICBjb25maWcucm9vdEVsZW1lbnQgPSBnZXRFbGVtZW50KGNvbmZpZy5yb290RWxlbWVudClcbiAgICB0eXBlQ2hlY2tDb25maWcoTkFNRSwgY29uZmlnLCBEZWZhdWx0VHlwZSlcbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICBfYXBwZW5kKCkge1xuICAgIGlmICh0aGlzLl9pc0FwcGVuZGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9jb25maWcucm9vdEVsZW1lbnQuYXBwZW5kKHRoaXMuX2dldEVsZW1lbnQoKSlcblxuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9nZXRFbGVtZW50KCksIEVWRU5UX01PVVNFRE9XTiwgKCkgPT4ge1xuICAgICAgZXhlY3V0ZSh0aGlzLl9jb25maWcuY2xpY2tDYWxsYmFjaylcbiAgICB9KVxuXG4gICAgdGhpcy5faXNBcHBlbmRlZCA9IHRydWVcbiAgfVxuXG4gIGRpc3Bvc2UoKSB7XG4gICAgaWYgKCF0aGlzLl9pc0FwcGVuZGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFRE9XTilcblxuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlKClcbiAgICB0aGlzLl9pc0FwcGVuZGVkID0gZmFsc2VcbiAgfVxuXG4gIF9lbXVsYXRlQW5pbWF0aW9uKGNhbGxiYWNrKSB7XG4gICAgZXhlY3V0ZUFmdGVyVHJhbnNpdGlvbihjYWxsYmFjaywgdGhpcy5fZ2V0RWxlbWVudCgpLCB0aGlzLl9jb25maWcuaXNBbmltYXRlZClcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCYWNrZHJvcFxuIiwiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4xLjApOiB1dGlsL2ZvY3VzdHJhcC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuLi9kb20vZXZlbnQtaGFuZGxlcidcbmltcG9ydCBTZWxlY3RvckVuZ2luZSBmcm9tICcuLi9kb20vc2VsZWN0b3ItZW5naW5lJ1xuaW1wb3J0IHsgdHlwZUNoZWNrQ29uZmlnIH0gZnJvbSAnLi9pbmRleCdcblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgdHJhcEVsZW1lbnQ6IG51bGwsIC8vIFRoZSBlbGVtZW50IHRvIHRyYXAgZm9jdXMgaW5zaWRlIG9mXG4gIGF1dG9mb2N1czogdHJ1ZVxufVxuXG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgdHJhcEVsZW1lbnQ6ICdlbGVtZW50JyxcbiAgYXV0b2ZvY3VzOiAnYm9vbGVhbidcbn1cblxuY29uc3QgTkFNRSA9ICdmb2N1c3RyYXAnXG5jb25zdCBEQVRBX0tFWSA9ICdicy5mb2N1c3RyYXAnXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgRVZFTlRfRk9DVVNJTiA9IGBmb2N1c2luJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfS0VZRE9XTl9UQUIgPSBga2V5ZG93bi50YWIke0VWRU5UX0tFWX1gXG5cbmNvbnN0IFRBQl9LRVkgPSAnVGFiJ1xuY29uc3QgVEFCX05BVl9GT1JXQVJEID0gJ2ZvcndhcmQnXG5jb25zdCBUQUJfTkFWX0JBQ0tXQVJEID0gJ2JhY2t3YXJkJ1xuXG5jbGFzcyBGb2N1c1RyYXAge1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKVxuICAgIHRoaXMuX2lzQWN0aXZlID0gZmFsc2VcbiAgICB0aGlzLl9sYXN0VGFiTmF2RGlyZWN0aW9uID0gbnVsbFxuICB9XG5cbiAgYWN0aXZhdGUoKSB7XG4gICAgY29uc3QgeyB0cmFwRWxlbWVudCwgYXV0b2ZvY3VzIH0gPSB0aGlzLl9jb25maWdcblxuICAgIGlmICh0aGlzLl9pc0FjdGl2ZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGF1dG9mb2N1cykge1xuICAgICAgdHJhcEVsZW1lbnQuZm9jdXMoKVxuICAgIH1cblxuICAgIEV2ZW50SGFuZGxlci5vZmYoZG9jdW1lbnQsIEVWRU5UX0tFWSkgLy8gZ3VhcmQgYWdhaW5zdCBpbmZpbml0ZSBmb2N1cyBsb29wXG4gICAgRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9GT0NVU0lOLCBldmVudCA9PiB0aGlzLl9oYW5kbGVGb2N1c2luKGV2ZW50KSlcbiAgICBFdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0tFWURPV05fVEFCLCBldmVudCA9PiB0aGlzLl9oYW5kbGVLZXlkb3duKGV2ZW50KSlcblxuICAgIHRoaXMuX2lzQWN0aXZlID0gdHJ1ZVxuICB9XG5cbiAgZGVhY3RpdmF0ZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzQWN0aXZlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNlXG4gICAgRXZlbnRIYW5kbGVyLm9mZihkb2N1bWVudCwgRVZFTlRfS0VZKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuXG4gIF9oYW5kbGVGb2N1c2luKGV2ZW50KSB7XG4gICAgY29uc3QgeyB0YXJnZXQgfSA9IGV2ZW50XG4gICAgY29uc3QgeyB0cmFwRWxlbWVudCB9ID0gdGhpcy5fY29uZmlnXG5cbiAgICBpZiAoXG4gICAgICB0YXJnZXQgPT09IGRvY3VtZW50IHx8XG4gICAgICB0YXJnZXQgPT09IHRyYXBFbGVtZW50IHx8XG4gICAgICB0cmFwRWxlbWVudC5jb250YWlucyh0YXJnZXQpXG4gICAgKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50cyA9IFNlbGVjdG9yRW5naW5lLmZvY3VzYWJsZUNoaWxkcmVuKHRyYXBFbGVtZW50KVxuXG4gICAgaWYgKGVsZW1lbnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdHJhcEVsZW1lbnQuZm9jdXMoKVxuICAgIH0gZWxzZSBpZiAodGhpcy5fbGFzdFRhYk5hdkRpcmVjdGlvbiA9PT0gVEFCX05BVl9CQUNLV0FSRCkge1xuICAgICAgZWxlbWVudHNbZWxlbWVudHMubGVuZ3RoIC0gMV0uZm9jdXMoKVxuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50c1swXS5mb2N1cygpXG4gICAgfVxuICB9XG5cbiAgX2hhbmRsZUtleWRvd24oZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQua2V5ICE9PSBUQUJfS0VZKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9sYXN0VGFiTmF2RGlyZWN0aW9uID0gZXZlbnQuc2hpZnRLZXkgPyBUQUJfTkFWX0JBQ0tXQVJEIDogVEFCX05BVl9GT1JXQVJEXG4gIH1cblxuICBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IHtcbiAgICAgIC4uLkRlZmF1bHQsXG4gICAgICAuLi4odHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiB7fSlcbiAgICB9XG4gICAgdHlwZUNoZWNrQ29uZmlnKE5BTUUsIGNvbmZpZywgRGVmYXVsdFR5cGUpXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEZvY3VzVHJhcFxuIiwiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4xLjApOiBtb2RhbC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCB7XG4gIGRlZmluZUpRdWVyeVBsdWdpbixcbiAgZ2V0RWxlbWVudEZyb21TZWxlY3RvcixcbiAgaXNSVEwsXG4gIGlzVmlzaWJsZSxcbiAgcmVmbG93LFxuICB0eXBlQ2hlY2tDb25maWdcbn0gZnJvbSAnLi91dGlsL2luZGV4J1xuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuL2RvbS9ldmVudC1oYW5kbGVyJ1xuaW1wb3J0IE1hbmlwdWxhdG9yIGZyb20gJy4vZG9tL21hbmlwdWxhdG9yJ1xuaW1wb3J0IFNlbGVjdG9yRW5naW5lIGZyb20gJy4vZG9tL3NlbGVjdG9yLWVuZ2luZSdcbmltcG9ydCBTY3JvbGxCYXJIZWxwZXIgZnJvbSAnLi91dGlsL3Njcm9sbGJhcidcbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gJy4vYmFzZS1jb21wb25lbnQnXG5pbXBvcnQgQmFja2Ryb3AgZnJvbSAnLi91dGlsL2JhY2tkcm9wJ1xuaW1wb3J0IEZvY3VzVHJhcCBmcm9tICcuL3V0aWwvZm9jdXN0cmFwJ1xuaW1wb3J0IHsgZW5hYmxlRGlzbWlzc1RyaWdnZXIgfSBmcm9tICcuL3V0aWwvY29tcG9uZW50LWZ1bmN0aW9ucydcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvbnN0YW50c1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgTkFNRSA9ICdtb2RhbCdcbmNvbnN0IERBVEFfS0VZID0gJ2JzLm1vZGFsJ1xuY29uc3QgRVZFTlRfS0VZID0gYC4ke0RBVEFfS0VZfWBcbmNvbnN0IERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknXG5jb25zdCBFU0NBUEVfS0VZID0gJ0VzY2FwZSdcblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgYmFja2Ryb3A6IHRydWUsXG4gIGtleWJvYXJkOiB0cnVlLFxuICBmb2N1czogdHJ1ZVxufVxuXG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgYmFja2Ryb3A6ICcoYm9vbGVhbnxzdHJpbmcpJyxcbiAga2V5Ym9hcmQ6ICdib29sZWFuJyxcbiAgZm9jdXM6ICdib29sZWFuJ1xufVxuXG5jb25zdCBFVkVOVF9ISURFID0gYGhpZGUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9ISURFX1BSRVZFTlRFRCA9IGBoaWRlUHJldmVudGVkJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfSElEREVOID0gYGhpZGRlbiR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NIT1cgPSBgc2hvdyR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NIT1dOID0gYHNob3duJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfUkVTSVpFID0gYHJlc2l6ZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0NMSUNLX0RJU01JU1MgPSBgY2xpY2suZGlzbWlzcyR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0tFWURPV05fRElTTUlTUyA9IGBrZXlkb3duLmRpc21pc3Mke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9NT1VTRVVQX0RJU01JU1MgPSBgbW91c2V1cC5kaXNtaXNzJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfTU9VU0VET1dOX0RJU01JU1MgPSBgbW91c2Vkb3duLmRpc21pc3Mke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSA9IGBjbGljayR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcblxuY29uc3QgQ0xBU1NfTkFNRV9PUEVOID0gJ21vZGFsLW9wZW4nXG5jb25zdCBDTEFTU19OQU1FX0ZBREUgPSAnZmFkZSdcbmNvbnN0IENMQVNTX05BTUVfU0hPVyA9ICdzaG93J1xuY29uc3QgQ0xBU1NfTkFNRV9TVEFUSUMgPSAnbW9kYWwtc3RhdGljJ1xuXG5jb25zdCBTRUxFQ1RPUl9ESUFMT0cgPSAnLm1vZGFsLWRpYWxvZydcbmNvbnN0IFNFTEVDVE9SX01PREFMX0JPRFkgPSAnLm1vZGFsLWJvZHknXG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSA9ICdbZGF0YS1icy10b2dnbGU9XCJtb2RhbFwiXSdcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENsYXNzIERlZmluaXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNsYXNzIE1vZGFsIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQpXG5cbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKVxuICAgIHRoaXMuX2RpYWxvZyA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfRElBTE9HLCB0aGlzLl9lbGVtZW50KVxuICAgIHRoaXMuX2JhY2tkcm9wID0gdGhpcy5faW5pdGlhbGl6ZUJhY2tEcm9wKClcbiAgICB0aGlzLl9mb2N1c3RyYXAgPSB0aGlzLl9pbml0aWFsaXplRm9jdXNUcmFwKClcbiAgICB0aGlzLl9pc1Nob3duID0gZmFsc2VcbiAgICB0aGlzLl9pZ25vcmVCYWNrZHJvcENsaWNrID0gZmFsc2VcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZVxuICAgIHRoaXMuX3Njcm9sbEJhciA9IG5ldyBTY3JvbGxCYXJIZWxwZXIoKVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcblxuICB0b2dnbGUocmVsYXRlZFRhcmdldCkge1xuICAgIHJldHVybiB0aGlzLl9pc1Nob3duID8gdGhpcy5oaWRlKCkgOiB0aGlzLnNob3cocmVsYXRlZFRhcmdldClcbiAgfVxuXG4gIHNob3cocmVsYXRlZFRhcmdldCkge1xuICAgIGlmICh0aGlzLl9pc1Nob3duIHx8IHRoaXMuX2lzVHJhbnNpdGlvbmluZykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPVywge1xuICAgICAgcmVsYXRlZFRhcmdldFxuICAgIH0pXG5cbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2lzU2hvd24gPSB0cnVlXG5cbiAgICBpZiAodGhpcy5faXNBbmltYXRlZCgpKSB7XG4gICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlXG4gICAgfVxuXG4gICAgdGhpcy5fc2Nyb2xsQmFyLmhpZGUoKVxuXG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfT1BFTilcblxuICAgIHRoaXMuX2FkanVzdERpYWxvZygpXG5cbiAgICB0aGlzLl9zZXRFc2NhcGVFdmVudCgpXG4gICAgdGhpcy5fc2V0UmVzaXplRXZlbnQoKVxuXG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2RpYWxvZywgRVZFTlRfTU9VU0VET1dOX0RJU01JU1MsICgpID0+IHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbmUodGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VVUF9ESVNNSVNTLCBldmVudCA9PiB7XG4gICAgICAgIGlmIChldmVudC50YXJnZXQgPT09IHRoaXMuX2VsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLl9pZ25vcmVCYWNrZHJvcENsaWNrID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG5cbiAgICB0aGlzLl9zaG93QmFja2Ryb3AoKCkgPT4gdGhpcy5fc2hvd0VsZW1lbnQocmVsYXRlZFRhcmdldCkpXG4gIH1cblxuICBoaWRlKCkge1xuICAgIGlmICghdGhpcy5faXNTaG93biB8fCB0aGlzLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREUpXG5cbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2lzU2hvd24gPSBmYWxzZVxuICAgIGNvbnN0IGlzQW5pbWF0ZWQgPSB0aGlzLl9pc0FuaW1hdGVkKClcblxuICAgIGlmIChpc0FuaW1hdGVkKSB7XG4gICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlXG4gICAgfVxuXG4gICAgdGhpcy5fc2V0RXNjYXBlRXZlbnQoKVxuICAgIHRoaXMuX3NldFJlc2l6ZUV2ZW50KClcblxuICAgIHRoaXMuX2ZvY3VzdHJhcC5kZWFjdGl2YXRlKClcblxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpXG5cbiAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0NMSUNLX0RJU01JU1MpXG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9kaWFsb2csIEVWRU5UX01PVVNFRE9XTl9ESVNNSVNTKVxuXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjaygoKSA9PiB0aGlzLl9oaWRlTW9kYWwoKSwgdGhpcy5fZWxlbWVudCwgaXNBbmltYXRlZClcbiAgfVxuXG4gIGRpc3Bvc2UoKSB7XG4gICAgW3dpbmRvdywgdGhpcy5fZGlhbG9nXVxuICAgICAgLmZvckVhY2goaHRtbEVsZW1lbnQgPT4gRXZlbnRIYW5kbGVyLm9mZihodG1sRWxlbWVudCwgRVZFTlRfS0VZKSlcblxuICAgIHRoaXMuX2JhY2tkcm9wLmRpc3Bvc2UoKVxuICAgIHRoaXMuX2ZvY3VzdHJhcC5kZWFjdGl2YXRlKClcbiAgICBzdXBlci5kaXNwb3NlKClcbiAgfVxuXG4gIGhhbmRsZVVwZGF0ZSgpIHtcbiAgICB0aGlzLl9hZGp1c3REaWFsb2coKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuXG4gIF9pbml0aWFsaXplQmFja0Ryb3AoKSB7XG4gICAgcmV0dXJuIG5ldyBCYWNrZHJvcCh7XG4gICAgICBpc1Zpc2libGU6IEJvb2xlYW4odGhpcy5fY29uZmlnLmJhY2tkcm9wKSwgLy8gJ3N0YXRpYycgb3B0aW9uIHdpbGwgYmUgdHJhbnNsYXRlZCB0byB0cnVlLCBhbmQgYm9vbGVhbnMgd2lsbCBrZWVwIHRoZWlyIHZhbHVlXG4gICAgICBpc0FuaW1hdGVkOiB0aGlzLl9pc0FuaW1hdGVkKClcbiAgICB9KVxuICB9XG5cbiAgX2luaXRpYWxpemVGb2N1c1RyYXAoKSB7XG4gICAgcmV0dXJuIG5ldyBGb2N1c1RyYXAoe1xuICAgICAgdHJhcEVsZW1lbnQ6IHRoaXMuX2VsZW1lbnRcbiAgICB9KVxuICB9XG5cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25maWcgPSB7XG4gICAgICAuLi5EZWZhdWx0LFxuICAgICAgLi4uTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCksXG4gICAgICAuLi4odHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiB7fSlcbiAgICB9XG4gICAgdHlwZUNoZWNrQ29uZmlnKE5BTUUsIGNvbmZpZywgRGVmYXVsdFR5cGUpXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG5cbiAgX3Nob3dFbGVtZW50KHJlbGF0ZWRUYXJnZXQpIHtcbiAgICBjb25zdCBpc0FuaW1hdGVkID0gdGhpcy5faXNBbmltYXRlZCgpXG4gICAgY29uc3QgbW9kYWxCb2R5ID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9NT0RBTF9CT0RZLCB0aGlzLl9kaWFsb2cpXG5cbiAgICBpZiAoIXRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSB8fCB0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAvLyBEb24ndCBtb3ZlIG1vZGFsJ3MgRE9NIHBvc2l0aW9uXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZCh0aGlzLl9lbGVtZW50KVxuICAgIH1cblxuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jaydcbiAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKVxuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLW1vZGFsJywgdHJ1ZSlcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgncm9sZScsICdkaWFsb2cnKVxuICAgIHRoaXMuX2VsZW1lbnQuc2Nyb2xsVG9wID0gMFxuXG4gICAgaWYgKG1vZGFsQm9keSkge1xuICAgICAgbW9kYWxCb2R5LnNjcm9sbFRvcCA9IDBcbiAgICB9XG5cbiAgICBpZiAoaXNBbmltYXRlZCkge1xuICAgICAgcmVmbG93KHRoaXMuX2VsZW1lbnQpXG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVylcblxuICAgIGNvbnN0IHRyYW5zaXRpb25Db21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jb25maWcuZm9jdXMpIHtcbiAgICAgICAgdGhpcy5fZm9jdXN0cmFwLmFjdGl2YXRlKClcbiAgICAgIH1cblxuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2VcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOLCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXRcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayh0cmFuc2l0aW9uQ29tcGxldGUsIHRoaXMuX2RpYWxvZywgaXNBbmltYXRlZClcbiAgfVxuXG4gIF9zZXRFc2NhcGVFdmVudCgpIHtcbiAgICBpZiAodGhpcy5faXNTaG93bikge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0tFWURPV05fRElTTUlTUywgZXZlbnQgPT4ge1xuICAgICAgICBpZiAodGhpcy5fY29uZmlnLmtleWJvYXJkICYmIGV2ZW50LmtleSA9PT0gRVNDQVBFX0tFWSkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICB0aGlzLmhpZGUoKVxuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9jb25maWcua2V5Ym9hcmQgJiYgZXZlbnQua2V5ID09PSBFU0NBUEVfS0VZKSB7XG4gICAgICAgICAgdGhpcy5fdHJpZ2dlckJhY2tkcm9wVHJhbnNpdGlvbigpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZWxlbWVudCwgRVZFTlRfS0VZRE9XTl9ESVNNSVNTKVxuICAgIH1cbiAgfVxuXG4gIF9zZXRSZXNpemVFdmVudCgpIHtcbiAgICBpZiAodGhpcy5faXNTaG93bikge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfUkVTSVpFLCAoKSA9PiB0aGlzLl9hZGp1c3REaWFsb2coKSlcbiAgICB9IGVsc2Uge1xuICAgICAgRXZlbnRIYW5kbGVyLm9mZih3aW5kb3csIEVWRU5UX1JFU0laRSlcbiAgICB9XG4gIH1cblxuICBfaGlkZU1vZGFsKCkge1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsIHRydWUpXG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtbW9kYWwnKVxuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdyb2xlJylcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZVxuICAgIHRoaXMuX2JhY2tkcm9wLmhpZGUoKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfT1BFTilcbiAgICAgIHRoaXMuX3Jlc2V0QWRqdXN0bWVudHMoKVxuICAgICAgdGhpcy5fc2Nyb2xsQmFyLnJlc2V0KClcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJRERFTilcbiAgICB9KVxuICB9XG5cbiAgX3Nob3dCYWNrZHJvcChjYWxsYmFjaykge1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9DTElDS19ESVNNSVNTLCBldmVudCA9PiB7XG4gICAgICBpZiAodGhpcy5faWdub3JlQmFja2Ryb3BDbGljaykge1xuICAgICAgICB0aGlzLl9pZ25vcmVCYWNrZHJvcENsaWNrID0gZmFsc2VcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC50YXJnZXQgIT09IGV2ZW50LmN1cnJlbnRUYXJnZXQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9jb25maWcuYmFja2Ryb3AgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5oaWRlKClcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fY29uZmlnLmJhY2tkcm9wID09PSAnc3RhdGljJykge1xuICAgICAgICB0aGlzLl90cmlnZ2VyQmFja2Ryb3BUcmFuc2l0aW9uKClcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5fYmFja2Ryb3Auc2hvdyhjYWxsYmFjaylcbiAgfVxuXG4gIF9pc0FuaW1hdGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUpXG4gIH1cblxuICBfdHJpZ2dlckJhY2tkcm9wVHJhbnNpdGlvbigpIHtcbiAgICBjb25zdCBoaWRlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFX1BSRVZFTlRFRClcbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHsgY2xhc3NMaXN0LCBzY3JvbGxIZWlnaHQsIHN0eWxlIH0gPSB0aGlzLl9lbGVtZW50XG4gICAgY29uc3QgaXNNb2RhbE92ZXJmbG93aW5nID0gc2Nyb2xsSGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodFxuXG4gICAgLy8gcmV0dXJuIGlmIHRoZSBmb2xsb3dpbmcgYmFja2dyb3VuZCB0cmFuc2l0aW9uIGhhc24ndCB5ZXQgY29tcGxldGVkXG4gICAgaWYgKCghaXNNb2RhbE92ZXJmbG93aW5nICYmIHN0eWxlLm92ZXJmbG93WSA9PT0gJ2hpZGRlbicpIHx8IGNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NUQVRJQykpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghaXNNb2RhbE92ZXJmbG93aW5nKSB7XG4gICAgICBzdHlsZS5vdmVyZmxvd1kgPSAnaGlkZGVuJ1xuICAgIH1cblxuICAgIGNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TVEFUSUMpXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjaygoKSA9PiB7XG4gICAgICBjbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU1RBVElDKVxuICAgICAgaWYgKCFpc01vZGFsT3ZlcmZsb3dpbmcpIHtcbiAgICAgICAgdGhpcy5fcXVldWVDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgICAgc3R5bGUub3ZlcmZsb3dZID0gJydcbiAgICAgICAgfSwgdGhpcy5fZGlhbG9nKVxuICAgICAgfVxuICAgIH0sIHRoaXMuX2RpYWxvZylcblxuICAgIHRoaXMuX2VsZW1lbnQuZm9jdXMoKVxuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB0aGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIHVzZWQgdG8gaGFuZGxlIG92ZXJmbG93aW5nIG1vZGFsc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgX2FkanVzdERpYWxvZygpIHtcbiAgICBjb25zdCBpc01vZGFsT3ZlcmZsb3dpbmcgPSB0aGlzLl9lbGVtZW50LnNjcm9sbEhlaWdodCA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHRcbiAgICBjb25zdCBzY3JvbGxiYXJXaWR0aCA9IHRoaXMuX3Njcm9sbEJhci5nZXRXaWR0aCgpXG4gICAgY29uc3QgaXNCb2R5T3ZlcmZsb3dpbmcgPSBzY3JvbGxiYXJXaWR0aCA+IDBcblxuICAgIGlmICgoIWlzQm9keU92ZXJmbG93aW5nICYmIGlzTW9kYWxPdmVyZmxvd2luZyAmJiAhaXNSVEwoKSkgfHwgKGlzQm9keU92ZXJmbG93aW5nICYmICFpc01vZGFsT3ZlcmZsb3dpbmcgJiYgaXNSVEwoKSkpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ0xlZnQgPSBgJHtzY3JvbGxiYXJXaWR0aH1weGBcbiAgICB9XG5cbiAgICBpZiAoKGlzQm9keU92ZXJmbG93aW5nICYmICFpc01vZGFsT3ZlcmZsb3dpbmcgJiYgIWlzUlRMKCkpIHx8ICghaXNCb2R5T3ZlcmZsb3dpbmcgJiYgaXNNb2RhbE92ZXJmbG93aW5nICYmIGlzUlRMKCkpKSB7XG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodCA9IGAke3Njcm9sbGJhcldpZHRofXB4YFxuICAgIH1cbiAgfVxuXG4gIF9yZXNldEFkanVzdG1lbnRzKCkge1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ0xlZnQgPSAnJ1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0ID0gJydcbiAgfVxuXG4gIC8vIFN0YXRpY1xuXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnLCByZWxhdGVkVGFyZ2V0KSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpXG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYClcbiAgICAgIH1cblxuICAgICAgZGF0YVtjb25maWddKHJlbGF0ZWRUYXJnZXQpXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfVE9HR0xFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgY29uc3QgdGFyZ2V0ID0gZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0aGlzKVxuXG4gIGlmIChbJ0EnLCAnQVJFQSddLmluY2x1ZGVzKHRoaXMudGFnTmFtZSkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gIH1cblxuICBFdmVudEhhbmRsZXIub25lKHRhcmdldCwgRVZFTlRfU0hPVywgc2hvd0V2ZW50ID0+IHtcbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIC8vIG9ubHkgcmVnaXN0ZXIgZm9jdXMgcmVzdG9yZXIgaWYgbW9kYWwgd2lsbCBhY3R1YWxseSBnZXQgc2hvd25cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIEV2ZW50SGFuZGxlci5vbmUodGFyZ2V0LCBFVkVOVF9ISURERU4sICgpID0+IHtcbiAgICAgIGlmIChpc1Zpc2libGUodGhpcykpIHtcbiAgICAgICAgdGhpcy5mb2N1cygpXG4gICAgICB9XG4gICAgfSlcbiAgfSlcblxuICBjb25zdCBkYXRhID0gTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0YXJnZXQpXG5cbiAgZGF0YS50b2dnbGUodGhpcylcbn0pXG5cbmVuYWJsZURpc21pc3NUcmlnZ2VyKE1vZGFsKVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogalF1ZXJ5XG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIGFkZCAuTW9kYWwgdG8galF1ZXJ5IG9ubHkgaWYgalF1ZXJ5IGlzIHByZXNlbnRcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oTW9kYWwpXG5cbmV4cG9ydCBkZWZhdWx0IE1vZGFsXG4iLCIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjEuMCk6IG9mZmNhbnZhcy5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYXN0ZXIvTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IHtcbiAgZGVmaW5lSlF1ZXJ5UGx1Z2luLFxuICBnZXRFbGVtZW50RnJvbVNlbGVjdG9yLFxuICBpc0Rpc2FibGVkLFxuICBpc1Zpc2libGUsXG4gIHR5cGVDaGVja0NvbmZpZ1xufSBmcm9tICcuL3V0aWwvaW5kZXgnXG5pbXBvcnQgU2Nyb2xsQmFySGVscGVyIGZyb20gJy4vdXRpbC9zY3JvbGxiYXInXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tICcuL2Jhc2UtY29tcG9uZW50J1xuaW1wb3J0IFNlbGVjdG9yRW5naW5lIGZyb20gJy4vZG9tL3NlbGVjdG9yLWVuZ2luZSdcbmltcG9ydCBNYW5pcHVsYXRvciBmcm9tICcuL2RvbS9tYW5pcHVsYXRvcidcbmltcG9ydCBCYWNrZHJvcCBmcm9tICcuL3V0aWwvYmFja2Ryb3AnXG5pbXBvcnQgRm9jdXNUcmFwIGZyb20gJy4vdXRpbC9mb2N1c3RyYXAnXG5pbXBvcnQgeyBlbmFibGVEaXNtaXNzVHJpZ2dlciB9IGZyb20gJy4vdXRpbC9jb21wb25lbnQtZnVuY3Rpb25zJ1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ29uc3RhbnRzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCBOQU1FID0gJ29mZmNhbnZhcydcbmNvbnN0IERBVEFfS0VZID0gJ2JzLm9mZmNhbnZhcydcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5jb25zdCBEQVRBX0FQSV9LRVkgPSAnLmRhdGEtYXBpJ1xuY29uc3QgRVZFTlRfTE9BRF9EQVRBX0FQSSA9IGBsb2FkJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuY29uc3QgRVNDQVBFX0tFWSA9ICdFc2NhcGUnXG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIGJhY2tkcm9wOiB0cnVlLFxuICBrZXlib2FyZDogdHJ1ZSxcbiAgc2Nyb2xsOiBmYWxzZVxufVxuXG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgYmFja2Ryb3A6ICdib29sZWFuJyxcbiAga2V5Ym9hcmQ6ICdib29sZWFuJyxcbiAgc2Nyb2xsOiAnYm9vbGVhbidcbn1cblxuY29uc3QgQ0xBU1NfTkFNRV9TSE9XID0gJ3Nob3cnXG5jb25zdCBDTEFTU19OQU1FX0JBQ0tEUk9QID0gJ29mZmNhbnZhcy1iYWNrZHJvcCdcbmNvbnN0IE9QRU5fU0VMRUNUT1IgPSAnLm9mZmNhbnZhcy5zaG93J1xuXG5jb25zdCBFVkVOVF9TSE9XID0gYHNob3cke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9TSE9XTiA9IGBzaG93biR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0hJREUgPSBgaGlkZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0hJRERFTiA9IGBoaWRkZW4ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSA9IGBjbGljayR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcbmNvbnN0IEVWRU5UX0tFWURPV05fRElTTUlTUyA9IGBrZXlkb3duLmRpc21pc3Mke0VWRU5UX0tFWX1gXG5cbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFID0gJ1tkYXRhLWJzLXRvZ2dsZT1cIm9mZmNhbnZhc1wiXSdcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENsYXNzIERlZmluaXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNsYXNzIE9mZmNhbnZhcyBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50KVxuXG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZylcbiAgICB0aGlzLl9pc1Nob3duID0gZmFsc2VcbiAgICB0aGlzLl9iYWNrZHJvcCA9IHRoaXMuX2luaXRpYWxpemVCYWNrRHJvcCgpXG4gICAgdGhpcy5fZm9jdXN0cmFwID0gdGhpcy5faW5pdGlhbGl6ZUZvY3VzVHJhcCgpXG4gICAgdGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoKVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRVxuICB9XG5cbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICAvLyBQdWJsaWNcblxuICB0b2dnbGUocmVsYXRlZFRhcmdldCkge1xuICAgIHJldHVybiB0aGlzLl9pc1Nob3duID8gdGhpcy5oaWRlKCkgOiB0aGlzLnNob3cocmVsYXRlZFRhcmdldClcbiAgfVxuXG4gIHNob3cocmVsYXRlZFRhcmdldCkge1xuICAgIGlmICh0aGlzLl9pc1Nob3duKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XLCB7IHJlbGF0ZWRUYXJnZXQgfSlcblxuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5faXNTaG93biA9IHRydWVcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSdcblxuICAgIHRoaXMuX2JhY2tkcm9wLnNob3coKVxuXG4gICAgaWYgKCF0aGlzLl9jb25maWcuc2Nyb2xsKSB7XG4gICAgICBuZXcgU2Nyb2xsQmFySGVscGVyKCkuaGlkZSgpXG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJylcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1tb2RhbCcsIHRydWUpXG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnZGlhbG9nJylcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XKVxuXG4gICAgY29uc3QgY29tcGxldGVDYWxsQmFjayA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5fY29uZmlnLnNjcm9sbCkge1xuICAgICAgICB0aGlzLl9mb2N1c3RyYXAuYWN0aXZhdGUoKVxuICAgICAgfVxuXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XTiwgeyByZWxhdGVkVGFyZ2V0IH0pXG4gICAgfVxuXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZUNhbGxCYWNrLCB0aGlzLl9lbGVtZW50LCB0cnVlKVxuICB9XG5cbiAgaGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzU2hvd24pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREUpXG5cbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2ZvY3VzdHJhcC5kZWFjdGl2YXRlKClcbiAgICB0aGlzLl9lbGVtZW50LmJsdXIoKVxuICAgIHRoaXMuX2lzU2hvd24gPSBmYWxzZVxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpXG4gICAgdGhpcy5fYmFja2Ryb3AuaGlkZSgpXG5cbiAgICBjb25zdCBjb21wbGV0ZUNhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgdHJ1ZSlcbiAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLW1vZGFsJylcbiAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdyb2xlJylcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nXG5cbiAgICAgIGlmICghdGhpcy5fY29uZmlnLnNjcm9sbCkge1xuICAgICAgICBuZXcgU2Nyb2xsQmFySGVscGVyKCkucmVzZXQoKVxuICAgICAgfVxuXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURERU4pXG4gICAgfVxuXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZUNhbGxiYWNrLCB0aGlzLl9lbGVtZW50LCB0cnVlKVxuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICB0aGlzLl9iYWNrZHJvcC5kaXNwb3NlKClcbiAgICB0aGlzLl9mb2N1c3RyYXAuZGVhY3RpdmF0ZSgpXG4gICAgc3VwZXIuZGlzcG9zZSgpXG4gIH1cblxuICAvLyBQcml2YXRlXG5cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25maWcgPSB7XG4gICAgICAuLi5EZWZhdWx0LFxuICAgICAgLi4uTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCksXG4gICAgICAuLi4odHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiB7fSlcbiAgICB9XG4gICAgdHlwZUNoZWNrQ29uZmlnKE5BTUUsIGNvbmZpZywgRGVmYXVsdFR5cGUpXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG5cbiAgX2luaXRpYWxpemVCYWNrRHJvcCgpIHtcbiAgICByZXR1cm4gbmV3IEJhY2tkcm9wKHtcbiAgICAgIGNsYXNzTmFtZTogQ0xBU1NfTkFNRV9CQUNLRFJPUCxcbiAgICAgIGlzVmlzaWJsZTogdGhpcy5fY29uZmlnLmJhY2tkcm9wLFxuICAgICAgaXNBbmltYXRlZDogdHJ1ZSxcbiAgICAgIHJvb3RFbGVtZW50OiB0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUsXG4gICAgICBjbGlja0NhbGxiYWNrOiAoKSA9PiB0aGlzLmhpZGUoKVxuICAgIH0pXG4gIH1cblxuICBfaW5pdGlhbGl6ZUZvY3VzVHJhcCgpIHtcbiAgICByZXR1cm4gbmV3IEZvY3VzVHJhcCh7XG4gICAgICB0cmFwRWxlbWVudDogdGhpcy5fZWxlbWVudFxuICAgIH0pXG4gIH1cblxuICBfYWRkRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0tFWURPV05fRElTTUlTUywgZXZlbnQgPT4ge1xuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5rZXlib2FyZCAmJiBldmVudC5rZXkgPT09IEVTQ0FQRV9LRVkpIHtcbiAgICAgICAgdGhpcy5oaWRlKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLy8gU3RhdGljXG5cbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBPZmZjYW52YXMuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpXG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGFbY29uZmlnXSA9PT0gdW5kZWZpbmVkIHx8IGNvbmZpZy5zdGFydHNXaXRoKCdfJykgfHwgY29uZmlnID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYClcbiAgICAgIH1cblxuICAgICAgZGF0YVtjb25maWddKHRoaXMpXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfVE9HR0xFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgY29uc3QgdGFyZ2V0ID0gZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0aGlzKVxuXG4gIGlmIChbJ0EnLCAnQVJFQSddLmluY2x1ZGVzKHRoaXMudGFnTmFtZSkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gIH1cblxuICBpZiAoaXNEaXNhYmxlZCh0aGlzKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgRXZlbnRIYW5kbGVyLm9uZSh0YXJnZXQsIEVWRU5UX0hJRERFTiwgKCkgPT4ge1xuICAgIC8vIGZvY3VzIG9uIHRyaWdnZXIgd2hlbiBpdCBpcyBjbG9zZWRcbiAgICBpZiAoaXNWaXNpYmxlKHRoaXMpKSB7XG4gICAgICB0aGlzLmZvY3VzKClcbiAgICB9XG4gIH0pXG5cbiAgLy8gYXZvaWQgY29uZmxpY3Qgd2hlbiBjbGlja2luZyBhIHRvZ2dsZXIgb2YgYW4gb2ZmY2FudmFzLCB3aGlsZSBhbm90aGVyIGlzIG9wZW5cbiAgY29uc3QgYWxsUmVhZHlPcGVuID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShPUEVOX1NFTEVDVE9SKVxuICBpZiAoYWxsUmVhZHlPcGVuICYmIGFsbFJlYWR5T3BlbiAhPT0gdGFyZ2V0KSB7XG4gICAgT2ZmY2FudmFzLmdldEluc3RhbmNlKGFsbFJlYWR5T3BlbikuaGlkZSgpXG4gIH1cblxuICBjb25zdCBkYXRhID0gT2ZmY2FudmFzLmdldE9yQ3JlYXRlSW5zdGFuY2UodGFyZ2V0KVxuICBkYXRhLnRvZ2dsZSh0aGlzKVxufSlcblxuRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfTE9BRF9EQVRBX0FQSSwgKCkgPT5cbiAgU2VsZWN0b3JFbmdpbmUuZmluZChPUEVOX1NFTEVDVE9SKS5mb3JFYWNoKGVsID0+IE9mZmNhbnZhcy5nZXRPckNyZWF0ZUluc3RhbmNlKGVsKS5zaG93KCkpXG4pXG5cbmVuYWJsZURpc21pc3NUcmlnZ2VyKE9mZmNhbnZhcylcbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBqUXVlcnlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihPZmZjYW52YXMpXG5cbmV4cG9ydCBkZWZhdWx0IE9mZmNhbnZhc1xuIiwiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4xLjApOiB1dGlsL3Nhbml0aXplci5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IHVyaUF0dHJzID0gbmV3IFNldChbXG4gICdiYWNrZ3JvdW5kJyxcbiAgJ2NpdGUnLFxuICAnaHJlZicsXG4gICdpdGVtdHlwZScsXG4gICdsb25nZGVzYycsXG4gICdwb3N0ZXInLFxuICAnc3JjJyxcbiAgJ3hsaW5rOmhyZWYnXG5dKVxuXG5jb25zdCBBUklBX0FUVFJJQlVURV9QQVRURVJOID0gL15hcmlhLVtcXHctXSokL2lcblxuLyoqXG4gKiBBIHBhdHRlcm4gdGhhdCByZWNvZ25pemVzIGEgY29tbW9ubHkgdXNlZnVsIHN1YnNldCBvZiBVUkxzIHRoYXQgYXJlIHNhZmUuXG4gKlxuICogU2hvdXRvdXQgdG8gQW5ndWxhciA3IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvYmxvYi83LjIuNC9wYWNrYWdlcy9jb3JlL3NyYy9zYW5pdGl6YXRpb24vdXJsX3Nhbml0aXplci50c1xuICovXG5jb25zdCBTQUZFX1VSTF9QQVRURVJOID0gL14oPzooPzpodHRwcz98bWFpbHRvfGZ0cHx0ZWx8ZmlsZSk6fFteIyYvOj9dKig/OlsjLz9dfCQpKS9pXG5cbi8qKlxuICogQSBwYXR0ZXJuIHRoYXQgbWF0Y2hlcyBzYWZlIGRhdGEgVVJMcy4gT25seSBtYXRjaGVzIGltYWdlLCB2aWRlbyBhbmQgYXVkaW8gdHlwZXMuXG4gKlxuICogU2hvdXRvdXQgdG8gQW5ndWxhciA3IGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvYmxvYi83LjIuNC9wYWNrYWdlcy9jb3JlL3NyYy9zYW5pdGl6YXRpb24vdXJsX3Nhbml0aXplci50c1xuICovXG5jb25zdCBEQVRBX1VSTF9QQVRURVJOID0gL15kYXRhOig/OmltYWdlXFwvKD86Ym1wfGdpZnxqcGVnfGpwZ3xwbmd8dGlmZnx3ZWJwKXx2aWRlb1xcLyg/Om1wZWd8bXA0fG9nZ3x3ZWJtKXxhdWRpb1xcLyg/Om1wM3xvZ2F8b2dnfG9wdXMpKTtiYXNlNjQsW1xcZCsvYS16XSs9KiQvaVxuXG5jb25zdCBhbGxvd2VkQXR0cmlidXRlID0gKGF0dHIsIGFsbG93ZWRBdHRyaWJ1dGVMaXN0KSA9PiB7XG4gIGNvbnN0IGF0dHJOYW1lID0gYXR0ci5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXG5cbiAgaWYgKGFsbG93ZWRBdHRyaWJ1dGVMaXN0LmluY2x1ZGVzKGF0dHJOYW1lKSkge1xuICAgIGlmICh1cmlBdHRycy5oYXMoYXR0ck5hbWUpKSB7XG4gICAgICByZXR1cm4gQm9vbGVhbihTQUZFX1VSTF9QQVRURVJOLnRlc3QoYXR0ci5ub2RlVmFsdWUpIHx8IERBVEFfVVJMX1BBVFRFUk4udGVzdChhdHRyLm5vZGVWYWx1ZSkpXG4gICAgfVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGNvbnN0IHJlZ0V4cCA9IGFsbG93ZWRBdHRyaWJ1dGVMaXN0LmZpbHRlcihhdHRyUmVnZXggPT4gYXR0clJlZ2V4IGluc3RhbmNlb2YgUmVnRXhwKVxuXG4gIC8vIENoZWNrIGlmIGEgcmVndWxhciBleHByZXNzaW9uIHZhbGlkYXRlcyB0aGUgYXR0cmlidXRlLlxuICBmb3IgKGxldCBpID0gMCwgbGVuID0gcmVnRXhwLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKHJlZ0V4cFtpXS50ZXN0KGF0dHJOYW1lKSkge1xuICAgICAgcmV0dXJuIHRydWVcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2Vcbn1cblxuZXhwb3J0IGNvbnN0IERlZmF1bHRBbGxvd2xpc3QgPSB7XG4gIC8vIEdsb2JhbCBhdHRyaWJ1dGVzIGFsbG93ZWQgb24gYW55IHN1cHBsaWVkIGVsZW1lbnQgYmVsb3cuXG4gICcqJzogWydjbGFzcycsICdkaXInLCAnaWQnLCAnbGFuZycsICdyb2xlJywgQVJJQV9BVFRSSUJVVEVfUEFUVEVSTl0sXG4gIGE6IFsndGFyZ2V0JywgJ2hyZWYnLCAndGl0bGUnLCAncmVsJ10sXG4gIGFyZWE6IFtdLFxuICBiOiBbXSxcbiAgYnI6IFtdLFxuICBjb2w6IFtdLFxuICBjb2RlOiBbXSxcbiAgZGl2OiBbXSxcbiAgZW06IFtdLFxuICBocjogW10sXG4gIGgxOiBbXSxcbiAgaDI6IFtdLFxuICBoMzogW10sXG4gIGg0OiBbXSxcbiAgaDU6IFtdLFxuICBoNjogW10sXG4gIGk6IFtdLFxuICBpbWc6IFsnc3JjJywgJ3NyY3NldCcsICdhbHQnLCAndGl0bGUnLCAnd2lkdGgnLCAnaGVpZ2h0J10sXG4gIGxpOiBbXSxcbiAgb2w6IFtdLFxuICBwOiBbXSxcbiAgcHJlOiBbXSxcbiAgczogW10sXG4gIHNtYWxsOiBbXSxcbiAgc3BhbjogW10sXG4gIHN1YjogW10sXG4gIHN1cDogW10sXG4gIHN0cm9uZzogW10sXG4gIHU6IFtdLFxuICB1bDogW11cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNhbml0aXplSHRtbCh1bnNhZmVIdG1sLCBhbGxvd0xpc3QsIHNhbml0aXplRm4pIHtcbiAgaWYgKCF1bnNhZmVIdG1sLmxlbmd0aCkge1xuICAgIHJldHVybiB1bnNhZmVIdG1sXG4gIH1cblxuICBpZiAoc2FuaXRpemVGbiAmJiB0eXBlb2Ygc2FuaXRpemVGbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgIHJldHVybiBzYW5pdGl6ZUZuKHVuc2FmZUh0bWwpXG4gIH1cblxuICBjb25zdCBkb21QYXJzZXIgPSBuZXcgd2luZG93LkRPTVBhcnNlcigpXG4gIGNvbnN0IGNyZWF0ZWREb2N1bWVudCA9IGRvbVBhcnNlci5wYXJzZUZyb21TdHJpbmcodW5zYWZlSHRtbCwgJ3RleHQvaHRtbCcpXG4gIGNvbnN0IGFsbG93bGlzdEtleXMgPSBPYmplY3Qua2V5cyhhbGxvd0xpc3QpXG4gIGNvbnN0IGVsZW1lbnRzID0gW10uY29uY2F0KC4uLmNyZWF0ZWREb2N1bWVudC5ib2R5LnF1ZXJ5U2VsZWN0b3JBbGwoJyonKSlcblxuICBmb3IgKGxldCBpID0gMCwgbGVuID0gZWxlbWVudHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICBjb25zdCBlbCA9IGVsZW1lbnRzW2ldXG4gICAgY29uc3QgZWxOYW1lID0gZWwubm9kZU5hbWUudG9Mb3dlckNhc2UoKVxuXG4gICAgaWYgKCFhbGxvd2xpc3RLZXlzLmluY2x1ZGVzKGVsTmFtZSkpIHtcbiAgICAgIGVsLnJlbW92ZSgpXG5cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgY29uc3QgYXR0cmlidXRlTGlzdCA9IFtdLmNvbmNhdCguLi5lbC5hdHRyaWJ1dGVzKVxuICAgIGNvbnN0IGFsbG93ZWRBdHRyaWJ1dGVzID0gW10uY29uY2F0KGFsbG93TGlzdFsnKiddIHx8IFtdLCBhbGxvd0xpc3RbZWxOYW1lXSB8fCBbXSlcblxuICAgIGF0dHJpYnV0ZUxpc3QuZm9yRWFjaChhdHRyID0+IHtcbiAgICAgIGlmICghYWxsb3dlZEF0dHJpYnV0ZShhdHRyLCBhbGxvd2VkQXR0cmlidXRlcykpIHtcbiAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKGF0dHIubm9kZU5hbWUpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVkRG9jdW1lbnQuYm9keS5pbm5lckhUTUxcbn1cbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMS4wKTogdG9vbHRpcC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCAqIGFzIFBvcHBlciBmcm9tICdAcG9wcGVyanMvY29yZSdcblxuaW1wb3J0IHtcbiAgZGVmaW5lSlF1ZXJ5UGx1Z2luLFxuICBmaW5kU2hhZG93Um9vdCxcbiAgZ2V0RWxlbWVudCxcbiAgZ2V0VUlELFxuICBpc0VsZW1lbnQsXG4gIGlzUlRMLFxuICBub29wLFxuICB0eXBlQ2hlY2tDb25maWdcbn0gZnJvbSAnLi91dGlsL2luZGV4J1xuaW1wb3J0IHsgRGVmYXVsdEFsbG93bGlzdCwgc2FuaXRpemVIdG1sIH0gZnJvbSAnLi91dGlsL3Nhbml0aXplcidcbmltcG9ydCBEYXRhIGZyb20gJy4vZG9tL2RhdGEnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgTWFuaXB1bGF0b3IgZnJvbSAnLi9kb20vbWFuaXB1bGF0b3InXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi9kb20vc2VsZWN0b3ItZW5naW5lJ1xuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudCdcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvbnN0YW50c1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgTkFNRSA9ICd0b29sdGlwJ1xuY29uc3QgREFUQV9LRVkgPSAnYnMudG9vbHRpcCdcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5jb25zdCBDTEFTU19QUkVGSVggPSAnYnMtdG9vbHRpcCdcbmNvbnN0IERJU0FMTE9XRURfQVRUUklCVVRFUyA9IG5ldyBTZXQoWydzYW5pdGl6ZScsICdhbGxvd0xpc3QnLCAnc2FuaXRpemVGbiddKVxuXG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgYW5pbWF0aW9uOiAnYm9vbGVhbicsXG4gIHRlbXBsYXRlOiAnc3RyaW5nJyxcbiAgdGl0bGU6ICcoc3RyaW5nfGVsZW1lbnR8ZnVuY3Rpb24pJyxcbiAgdHJpZ2dlcjogJ3N0cmluZycsXG4gIGRlbGF5OiAnKG51bWJlcnxvYmplY3QpJyxcbiAgaHRtbDogJ2Jvb2xlYW4nLFxuICBzZWxlY3RvcjogJyhzdHJpbmd8Ym9vbGVhbiknLFxuICBwbGFjZW1lbnQ6ICcoc3RyaW5nfGZ1bmN0aW9uKScsXG4gIG9mZnNldDogJyhhcnJheXxzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgY29udGFpbmVyOiAnKHN0cmluZ3xlbGVtZW50fGJvb2xlYW4pJyxcbiAgZmFsbGJhY2tQbGFjZW1lbnRzOiAnYXJyYXknLFxuICBib3VuZGFyeTogJyhzdHJpbmd8ZWxlbWVudCknLFxuICBjdXN0b21DbGFzczogJyhzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgc2FuaXRpemU6ICdib29sZWFuJyxcbiAgc2FuaXRpemVGbjogJyhudWxsfGZ1bmN0aW9uKScsXG4gIGFsbG93TGlzdDogJ29iamVjdCcsXG4gIHBvcHBlckNvbmZpZzogJyhudWxsfG9iamVjdHxmdW5jdGlvbiknXG59XG5cbmNvbnN0IEF0dGFjaG1lbnRNYXAgPSB7XG4gIEFVVE86ICdhdXRvJyxcbiAgVE9QOiAndG9wJyxcbiAgUklHSFQ6IGlzUlRMKCkgPyAnbGVmdCcgOiAncmlnaHQnLFxuICBCT1RUT006ICdib3R0b20nLFxuICBMRUZUOiBpc1JUTCgpID8gJ3JpZ2h0JyA6ICdsZWZ0J1xufVxuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBhbmltYXRpb246IHRydWUsXG4gIHRlbXBsYXRlOiAnPGRpdiBjbGFzcz1cInRvb2x0aXBcIiByb2xlPVwidG9vbHRpcFwiPicgK1xuICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInRvb2x0aXAtYXJyb3dcIj48L2Rpdj4nICtcbiAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJ0b29sdGlwLWlubmVyXCI+PC9kaXY+JyArXG4gICAgICAgICAgICAnPC9kaXY+JyxcbiAgdHJpZ2dlcjogJ2hvdmVyIGZvY3VzJyxcbiAgdGl0bGU6ICcnLFxuICBkZWxheTogMCxcbiAgaHRtbDogZmFsc2UsXG4gIHNlbGVjdG9yOiBmYWxzZSxcbiAgcGxhY2VtZW50OiAndG9wJyxcbiAgb2Zmc2V0OiBbMCwgMF0sXG4gIGNvbnRhaW5lcjogZmFsc2UsXG4gIGZhbGxiYWNrUGxhY2VtZW50czogWyd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnXSxcbiAgYm91bmRhcnk6ICdjbGlwcGluZ1BhcmVudHMnLFxuICBjdXN0b21DbGFzczogJycsXG4gIHNhbml0aXplOiB0cnVlLFxuICBzYW5pdGl6ZUZuOiBudWxsLFxuICBhbGxvd0xpc3Q6IERlZmF1bHRBbGxvd2xpc3QsXG4gIHBvcHBlckNvbmZpZzogbnVsbFxufVxuXG5jb25zdCBFdmVudCA9IHtcbiAgSElERTogYGhpZGUke0VWRU5UX0tFWX1gLFxuICBISURERU46IGBoaWRkZW4ke0VWRU5UX0tFWX1gLFxuICBTSE9XOiBgc2hvdyR7RVZFTlRfS0VZfWAsXG4gIFNIT1dOOiBgc2hvd24ke0VWRU5UX0tFWX1gLFxuICBJTlNFUlRFRDogYGluc2VydGVkJHtFVkVOVF9LRVl9YCxcbiAgQ0xJQ0s6IGBjbGljayR7RVZFTlRfS0VZfWAsXG4gIEZPQ1VTSU46IGBmb2N1c2luJHtFVkVOVF9LRVl9YCxcbiAgRk9DVVNPVVQ6IGBmb2N1c291dCR7RVZFTlRfS0VZfWAsXG4gIE1PVVNFRU5URVI6IGBtb3VzZWVudGVyJHtFVkVOVF9LRVl9YCxcbiAgTU9VU0VMRUFWRTogYG1vdXNlbGVhdmUke0VWRU5UX0tFWX1gXG59XG5cbmNvbnN0IENMQVNTX05BTUVfRkFERSA9ICdmYWRlJ1xuY29uc3QgQ0xBU1NfTkFNRV9NT0RBTCA9ICdtb2RhbCdcbmNvbnN0IENMQVNTX05BTUVfU0hPVyA9ICdzaG93J1xuXG5jb25zdCBIT1ZFUl9TVEFURV9TSE9XID0gJ3Nob3cnXG5jb25zdCBIT1ZFUl9TVEFURV9PVVQgPSAnb3V0J1xuXG5jb25zdCBTRUxFQ1RPUl9UT09MVElQX0lOTkVSID0gJy50b29sdGlwLWlubmVyJ1xuY29uc3QgU0VMRUNUT1JfTU9EQUwgPSBgLiR7Q0xBU1NfTkFNRV9NT0RBTH1gXG5cbmNvbnN0IEVWRU5UX01PREFMX0hJREUgPSAnaGlkZS5icy5tb2RhbCdcblxuY29uc3QgVFJJR0dFUl9IT1ZFUiA9ICdob3ZlcidcbmNvbnN0IFRSSUdHRVJfRk9DVVMgPSAnZm9jdXMnXG5jb25zdCBUUklHR0VSX0NMSUNLID0gJ2NsaWNrJ1xuY29uc3QgVFJJR0dFUl9NQU5VQUwgPSAnbWFudWFsJ1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ2xhc3MgRGVmaW5pdGlvblxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY2xhc3MgVG9vbHRpcCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBpZiAodHlwZW9mIFBvcHBlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Jvb3RzdHJhcFxcJ3MgdG9vbHRpcHMgcmVxdWlyZSBQb3BwZXIgKGh0dHBzOi8vcG9wcGVyLmpzLm9yZyknKVxuICAgIH1cblxuICAgIHN1cGVyKGVsZW1lbnQpXG5cbiAgICAvLyBwcml2YXRlXG4gICAgdGhpcy5faXNFbmFibGVkID0gdHJ1ZVxuICAgIHRoaXMuX3RpbWVvdXQgPSAwXG4gICAgdGhpcy5faG92ZXJTdGF0ZSA9ICcnXG4gICAgdGhpcy5fYWN0aXZlVHJpZ2dlciA9IHt9XG4gICAgdGhpcy5fcG9wcGVyID0gbnVsbFxuXG4gICAgLy8gUHJvdGVjdGVkXG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZylcbiAgICB0aGlzLnRpcCA9IG51bGxcblxuICAgIHRoaXMuX3NldExpc3RlbmVycygpXG4gIH1cblxuICAvLyBHZXR0ZXJzXG5cbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIHN0YXRpYyBnZXQgRXZlbnQoKSB7XG4gICAgcmV0dXJuIEV2ZW50XG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZVxuICB9XG5cbiAgLy8gUHVibGljXG5cbiAgZW5hYmxlKCkge1xuICAgIHRoaXMuX2lzRW5hYmxlZCA9IHRydWVcbiAgfVxuXG4gIGRpc2FibGUoKSB7XG4gICAgdGhpcy5faXNFbmFibGVkID0gZmFsc2VcbiAgfVxuXG4gIHRvZ2dsZUVuYWJsZWQoKSB7XG4gICAgdGhpcy5faXNFbmFibGVkID0gIXRoaXMuX2lzRW5hYmxlZFxuICB9XG5cbiAgdG9nZ2xlKGV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLl9pc0VuYWJsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChldmVudCkge1xuICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuX2luaXRpYWxpemVPbkRlbGVnYXRlZFRhcmdldChldmVudClcblxuICAgICAgY29udGV4dC5fYWN0aXZlVHJpZ2dlci5jbGljayA9ICFjb250ZXh0Ll9hY3RpdmVUcmlnZ2VyLmNsaWNrXG5cbiAgICAgIGlmIChjb250ZXh0Ll9pc1dpdGhBY3RpdmVUcmlnZ2VyKCkpIHtcbiAgICAgICAgY29udGV4dC5fZW50ZXIobnVsbCwgY29udGV4dClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQuX2xlYXZlKG51bGwsIGNvbnRleHQpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmdldFRpcEVsZW1lbnQoKS5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9TSE9XKSkge1xuICAgICAgICB0aGlzLl9sZWF2ZShudWxsLCB0aGlzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdGhpcy5fZW50ZXIobnVsbCwgdGhpcylcbiAgICB9XG4gIH1cblxuICBkaXNwb3NlKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KVxuXG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9lbGVtZW50LmNsb3Nlc3QoU0VMRUNUT1JfTU9EQUwpLCBFVkVOVF9NT0RBTF9ISURFLCB0aGlzLl9oaWRlTW9kYWxIYW5kbGVyKVxuXG4gICAgaWYgKHRoaXMudGlwKSB7XG4gICAgICB0aGlzLnRpcC5yZW1vdmUoKVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHRoaXMuX3BvcHBlci5kZXN0cm95KClcbiAgICB9XG5cbiAgICBzdXBlci5kaXNwb3NlKClcbiAgfVxuXG4gIHNob3coKSB7XG4gICAgaWYgKHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9PT0gJ25vbmUnKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1BsZWFzZSB1c2Ugc2hvdyBvbiB2aXNpYmxlIGVsZW1lbnRzJylcbiAgICB9XG5cbiAgICBpZiAoISh0aGlzLmlzV2l0aENvbnRlbnQoKSAmJiB0aGlzLl9pc0VuYWJsZWQpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLkV2ZW50LlNIT1cpXG4gICAgY29uc3Qgc2hhZG93Um9vdCA9IGZpbmRTaGFkb3dSb290KHRoaXMuX2VsZW1lbnQpXG4gICAgY29uc3QgaXNJblRoZURvbSA9IHNoYWRvd1Jvb3QgPT09IG51bGwgP1xuICAgICAgdGhpcy5fZWxlbWVudC5vd25lckRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jb250YWlucyh0aGlzLl9lbGVtZW50KSA6XG4gICAgICBzaGFkb3dSb290LmNvbnRhaW5zKHRoaXMuX2VsZW1lbnQpXG5cbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQgfHwgIWlzSW5UaGVEb20pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHRpcCA9IHRoaXMuZ2V0VGlwRWxlbWVudCgpXG4gICAgY29uc3QgdGlwSWQgPSBnZXRVSUQodGhpcy5jb25zdHJ1Y3Rvci5OQU1FKVxuXG4gICAgdGlwLnNldEF0dHJpYnV0ZSgnaWQnLCB0aXBJZClcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScsIHRpcElkKVxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5hbmltYXRpb24pIHtcbiAgICAgIHRpcC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfRkFERSlcbiAgICB9XG5cbiAgICBjb25zdCBwbGFjZW1lbnQgPSB0eXBlb2YgdGhpcy5fY29uZmlnLnBsYWNlbWVudCA9PT0gJ2Z1bmN0aW9uJyA/XG4gICAgICB0aGlzLl9jb25maWcucGxhY2VtZW50LmNhbGwodGhpcywgdGlwLCB0aGlzLl9lbGVtZW50KSA6XG4gICAgICB0aGlzLl9jb25maWcucGxhY2VtZW50XG5cbiAgICBjb25zdCBhdHRhY2htZW50ID0gdGhpcy5fZ2V0QXR0YWNobWVudChwbGFjZW1lbnQpXG4gICAgdGhpcy5fYWRkQXR0YWNobWVudENsYXNzKGF0dGFjaG1lbnQpXG5cbiAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gdGhpcy5fY29uZmlnXG4gICAgRGF0YS5zZXQodGlwLCB0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZLCB0aGlzKVxuXG4gICAgaWYgKCF0aGlzLl9lbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zKHRoaXMudGlwKSkge1xuICAgICAgY29udGFpbmVyLmFwcGVuZCh0aXApXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLkV2ZW50LklOU0VSVEVEKVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHRoaXMuX3BvcHBlci51cGRhdGUoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9wb3BwZXIgPSBQb3BwZXIuY3JlYXRlUG9wcGVyKHRoaXMuX2VsZW1lbnQsIHRpcCwgdGhpcy5fZ2V0UG9wcGVyQ29uZmlnKGF0dGFjaG1lbnQpKVxuICAgIH1cblxuICAgIHRpcC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVylcblxuICAgIGNvbnN0IGN1c3RvbUNsYXNzID0gdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odGhpcy5fY29uZmlnLmN1c3RvbUNsYXNzKVxuICAgIGlmIChjdXN0b21DbGFzcykge1xuICAgICAgdGlwLmNsYXNzTGlzdC5hZGQoLi4uY3VzdG9tQ2xhc3Muc3BsaXQoJyAnKSlcbiAgICB9XG5cbiAgICAvLyBJZiB0aGlzIGlzIGEgdG91Y2gtZW5hYmxlZCBkZXZpY2Ugd2UgYWRkIGV4dHJhXG4gICAgLy8gZW1wdHkgbW91c2VvdmVyIGxpc3RlbmVycyB0byB0aGUgYm9keSdzIGltbWVkaWF0ZSBjaGlsZHJlbjtcbiAgICAvLyBvbmx5IG5lZWRlZCBiZWNhdXNlIG9mIGJyb2tlbiBldmVudCBkZWxlZ2F0aW9uIG9uIGlPU1xuICAgIC8vIGh0dHBzOi8vd3d3LnF1aXJrc21vZGUub3JnL2Jsb2cvYXJjaGl2ZXMvMjAxNC8wMi9tb3VzZV9ldmVudF9idWIuaHRtbFxuICAgIGlmICgnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIFtdLmNvbmNhdCguLi5kb2N1bWVudC5ib2R5LmNoaWxkcmVuKS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICBFdmVudEhhbmRsZXIub24oZWxlbWVudCwgJ21vdXNlb3ZlcicsIG5vb3ApXG4gICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgY29uc3QgcHJldkhvdmVyU3RhdGUgPSB0aGlzLl9ob3ZlclN0YXRlXG5cbiAgICAgIHRoaXMuX2hvdmVyU3RhdGUgPSBudWxsXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLkV2ZW50LlNIT1dOKVxuXG4gICAgICBpZiAocHJldkhvdmVyU3RhdGUgPT09IEhPVkVSX1NUQVRFX09VVCkge1xuICAgICAgICB0aGlzLl9sZWF2ZShudWxsLCB0aGlzKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGlzQW5pbWF0ZWQgPSB0aGlzLnRpcC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9GQURFKVxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMudGlwLCBpc0FuaW1hdGVkKVxuICB9XG5cbiAgaGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuX3BvcHBlcikge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgdGlwID0gdGhpcy5nZXRUaXBFbGVtZW50KClcbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc1dpdGhBY3RpdmVUcmlnZ2VyKCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9ob3ZlclN0YXRlICE9PSBIT1ZFUl9TVEFURV9TSE9XKSB7XG4gICAgICAgIHRpcC5yZW1vdmUoKVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9jbGVhblRpcENsYXNzKClcbiAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JylcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuRXZlbnQuSElEREVOKVxuXG4gICAgICBpZiAodGhpcy5fcG9wcGVyKSB7XG4gICAgICAgIHRoaXMuX3BvcHBlci5kZXN0cm95KClcbiAgICAgICAgdGhpcy5fcG9wcGVyID0gbnVsbFxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuRXZlbnQuSElERSlcbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRpcC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVylcblxuICAgIC8vIElmIHRoaXMgaXMgYSB0b3VjaC1lbmFibGVkIGRldmljZSB3ZSByZW1vdmUgdGhlIGV4dHJhXG4gICAgLy8gZW1wdHkgbW91c2VvdmVyIGxpc3RlbmVycyB3ZSBhZGRlZCBmb3IgaU9TIHN1cHBvcnRcbiAgICBpZiAoJ29udG91Y2hzdGFydCcgaW4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSB7XG4gICAgICBbXS5jb25jYXQoLi4uZG9jdW1lbnQuYm9keS5jaGlsZHJlbilcbiAgICAgICAgLmZvckVhY2goZWxlbWVudCA9PiBFdmVudEhhbmRsZXIub2ZmKGVsZW1lbnQsICdtb3VzZW92ZXInLCBub29wKSlcbiAgICB9XG5cbiAgICB0aGlzLl9hY3RpdmVUcmlnZ2VyW1RSSUdHRVJfQ0xJQ0tdID0gZmFsc2VcbiAgICB0aGlzLl9hY3RpdmVUcmlnZ2VyW1RSSUdHRVJfRk9DVVNdID0gZmFsc2VcbiAgICB0aGlzLl9hY3RpdmVUcmlnZ2VyW1RSSUdHRVJfSE9WRVJdID0gZmFsc2VcblxuICAgIGNvbnN0IGlzQW5pbWF0ZWQgPSB0aGlzLnRpcC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9GQURFKVxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMudGlwLCBpc0FuaW1hdGVkKVxuICAgIHRoaXMuX2hvdmVyU3RhdGUgPSAnJ1xuICB9XG5cbiAgdXBkYXRlKCkge1xuICAgIGlmICh0aGlzLl9wb3BwZXIgIT09IG51bGwpIHtcbiAgICAgIHRoaXMuX3BvcHBlci51cGRhdGUoKVxuICAgIH1cbiAgfVxuXG4gIC8vIFByb3RlY3RlZFxuXG4gIGlzV2l0aENvbnRlbnQoKSB7XG4gICAgcmV0dXJuIEJvb2xlYW4odGhpcy5nZXRUaXRsZSgpKVxuICB9XG5cbiAgZ2V0VGlwRWxlbWVudCgpIHtcbiAgICBpZiAodGhpcy50aXApIHtcbiAgICAgIHJldHVybiB0aGlzLnRpcFxuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKVxuICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gdGhpcy5fY29uZmlnLnRlbXBsYXRlXG5cbiAgICBjb25zdCB0aXAgPSBlbGVtZW50LmNoaWxkcmVuWzBdXG4gICAgdGhpcy5zZXRDb250ZW50KHRpcClcbiAgICB0aXAuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0ZBREUsIENMQVNTX05BTUVfU0hPVylcblxuICAgIHRoaXMudGlwID0gdGlwXG4gICAgcmV0dXJuIHRoaXMudGlwXG4gIH1cblxuICBzZXRDb250ZW50KHRpcCkge1xuICAgIHRoaXMuX3Nhbml0aXplQW5kU2V0Q29udGVudCh0aXAsIHRoaXMuZ2V0VGl0bGUoKSwgU0VMRUNUT1JfVE9PTFRJUF9JTk5FUilcbiAgfVxuXG4gIF9zYW5pdGl6ZUFuZFNldENvbnRlbnQodGVtcGxhdGUsIGNvbnRlbnQsIHNlbGVjdG9yKSB7XG4gICAgY29uc3QgdGVtcGxhdGVFbGVtZW50ID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShzZWxlY3RvciwgdGVtcGxhdGUpXG5cbiAgICBpZiAoIWNvbnRlbnQgJiYgdGVtcGxhdGVFbGVtZW50KSB7XG4gICAgICB0ZW1wbGF0ZUVsZW1lbnQucmVtb3ZlKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIHdlIHVzZSBhcHBlbmQgZm9yIGh0bWwgb2JqZWN0cyB0byBtYWludGFpbiBqcyBldmVudHNcbiAgICB0aGlzLnNldEVsZW1lbnRDb250ZW50KHRlbXBsYXRlRWxlbWVudCwgY29udGVudClcbiAgfVxuXG4gIHNldEVsZW1lbnRDb250ZW50KGVsZW1lbnQsIGNvbnRlbnQpIHtcbiAgICBpZiAoZWxlbWVudCA9PT0gbnVsbCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGlzRWxlbWVudChjb250ZW50KSkge1xuICAgICAgY29udGVudCA9IGdldEVsZW1lbnQoY29udGVudClcblxuICAgICAgLy8gY29udGVudCBpcyBhIERPTSBub2RlIG9yIGEgalF1ZXJ5XG4gICAgICBpZiAodGhpcy5fY29uZmlnLmh0bWwpIHtcbiAgICAgICAgaWYgKGNvbnRlbnQucGFyZW50Tm9kZSAhPT0gZWxlbWVudCkge1xuICAgICAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gJydcbiAgICAgICAgICBlbGVtZW50LmFwcGVuZChjb250ZW50KVxuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBlbGVtZW50LnRleHRDb250ZW50ID0gY29udGVudC50ZXh0Q29udGVudFxuICAgICAgfVxuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fY29uZmlnLmh0bWwpIHtcbiAgICAgIGlmICh0aGlzLl9jb25maWcuc2FuaXRpemUpIHtcbiAgICAgICAgY29udGVudCA9IHNhbml0aXplSHRtbChjb250ZW50LCB0aGlzLl9jb25maWcuYWxsb3dMaXN0LCB0aGlzLl9jb25maWcuc2FuaXRpemVGbilcbiAgICAgIH1cblxuICAgICAgZWxlbWVudC5pbm5lckhUTUwgPSBjb250ZW50XG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnQudGV4dENvbnRlbnQgPSBjb250ZW50XG4gICAgfVxuICB9XG5cbiAgZ2V0VGl0bGUoKSB7XG4gICAgY29uc3QgdGl0bGUgPSB0aGlzLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1icy1vcmlnaW5hbC10aXRsZScpIHx8IHRoaXMuX2NvbmZpZy50aXRsZVxuXG4gICAgcmV0dXJuIHRoaXMuX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKHRpdGxlKVxuICB9XG5cbiAgdXBkYXRlQXR0YWNobWVudChhdHRhY2htZW50KSB7XG4gICAgaWYgKGF0dGFjaG1lbnQgPT09ICdyaWdodCcpIHtcbiAgICAgIHJldHVybiAnZW5kJ1xuICAgIH1cblxuICAgIGlmIChhdHRhY2htZW50ID09PSAnbGVmdCcpIHtcbiAgICAgIHJldHVybiAnc3RhcnQnXG4gICAgfVxuXG4gICAgcmV0dXJuIGF0dGFjaG1lbnRcbiAgfVxuXG4gIC8vIFByaXZhdGVcblxuICBfaW5pdGlhbGl6ZU9uRGVsZWdhdGVkVGFyZ2V0KGV2ZW50LCBjb250ZXh0KSB7XG4gICAgcmV0dXJuIGNvbnRleHQgfHwgdGhpcy5jb25zdHJ1Y3Rvci5nZXRPckNyZWF0ZUluc3RhbmNlKGV2ZW50LmRlbGVnYXRlVGFyZ2V0LCB0aGlzLl9nZXREZWxlZ2F0ZUNvbmZpZygpKVxuICB9XG5cbiAgX2dldE9mZnNldCgpIHtcbiAgICBjb25zdCB7IG9mZnNldCB9ID0gdGhpcy5fY29uZmlnXG5cbiAgICBpZiAodHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHJldHVybiBvZmZzZXQuc3BsaXQoJywnKS5tYXAodmFsID0+IE51bWJlci5wYXJzZUludCh2YWwsIDEwKSlcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIG9mZnNldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgcmV0dXJuIHBvcHBlckRhdGEgPT4gb2Zmc2V0KHBvcHBlckRhdGEsIHRoaXMuX2VsZW1lbnQpXG4gICAgfVxuXG4gICAgcmV0dXJuIG9mZnNldFxuICB9XG5cbiAgX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKGNvbnRlbnQpIHtcbiAgICByZXR1cm4gdHlwZW9mIGNvbnRlbnQgPT09ICdmdW5jdGlvbicgPyBjb250ZW50LmNhbGwodGhpcy5fZWxlbWVudCkgOiBjb250ZW50XG4gIH1cblxuICBfZ2V0UG9wcGVyQ29uZmlnKGF0dGFjaG1lbnQpIHtcbiAgICBjb25zdCBkZWZhdWx0QnNQb3BwZXJDb25maWcgPSB7XG4gICAgICBwbGFjZW1lbnQ6IGF0dGFjaG1lbnQsXG4gICAgICBtb2RpZmllcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdmbGlwJyxcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICBmYWxsYmFja1BsYWNlbWVudHM6IHRoaXMuX2NvbmZpZy5mYWxsYmFja1BsYWNlbWVudHNcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICBvZmZzZXQ6IHRoaXMuX2dldE9mZnNldCgpXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ3ByZXZlbnRPdmVyZmxvdycsXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgYm91bmRhcnk6IHRoaXMuX2NvbmZpZy5ib3VuZGFyeVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdhcnJvdycsXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgZWxlbWVudDogYC4ke3RoaXMuY29uc3RydWN0b3IuTkFNRX0tYXJyb3dgXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ29uQ2hhbmdlJyxcbiAgICAgICAgICBlbmFibGVkOiB0cnVlLFxuICAgICAgICAgIHBoYXNlOiAnYWZ0ZXJXcml0ZScsXG4gICAgICAgICAgZm46IGRhdGEgPT4gdGhpcy5faGFuZGxlUG9wcGVyUGxhY2VtZW50Q2hhbmdlKGRhdGEpXG4gICAgICAgIH1cbiAgICAgIF0sXG4gICAgICBvbkZpcnN0VXBkYXRlOiBkYXRhID0+IHtcbiAgICAgICAgaWYgKGRhdGEub3B0aW9ucy5wbGFjZW1lbnQgIT09IGRhdGEucGxhY2VtZW50KSB7XG4gICAgICAgICAgdGhpcy5faGFuZGxlUG9wcGVyUGxhY2VtZW50Q2hhbmdlKGRhdGEpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZGVmYXVsdEJzUG9wcGVyQ29uZmlnLFxuICAgICAgLi4uKHR5cGVvZiB0aGlzLl9jb25maWcucG9wcGVyQ29uZmlnID09PSAnZnVuY3Rpb24nID8gdGhpcy5fY29uZmlnLnBvcHBlckNvbmZpZyhkZWZhdWx0QnNQb3BwZXJDb25maWcpIDogdGhpcy5fY29uZmlnLnBvcHBlckNvbmZpZylcbiAgICB9XG4gIH1cblxuICBfYWRkQXR0YWNobWVudENsYXNzKGF0dGFjaG1lbnQpIHtcbiAgICB0aGlzLmdldFRpcEVsZW1lbnQoKS5jbGFzc0xpc3QuYWRkKGAke3RoaXMuX2dldEJhc2ljQ2xhc3NQcmVmaXgoKX0tJHt0aGlzLnVwZGF0ZUF0dGFjaG1lbnQoYXR0YWNobWVudCl9YClcbiAgfVxuXG4gIF9nZXRBdHRhY2htZW50KHBsYWNlbWVudCkge1xuICAgIHJldHVybiBBdHRhY2htZW50TWFwW3BsYWNlbWVudC50b1VwcGVyQ2FzZSgpXVxuICB9XG5cbiAgX3NldExpc3RlbmVycygpIHtcbiAgICBjb25zdCB0cmlnZ2VycyA9IHRoaXMuX2NvbmZpZy50cmlnZ2VyLnNwbGl0KCcgJylcblxuICAgIHRyaWdnZXJzLmZvckVhY2godHJpZ2dlciA9PiB7XG4gICAgICBpZiAodHJpZ2dlciA9PT0gJ2NsaWNrJykge1xuICAgICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgdGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5DTElDSywgdGhpcy5fY29uZmlnLnNlbGVjdG9yLCBldmVudCA9PiB0aGlzLnRvZ2dsZShldmVudCkpXG4gICAgICB9IGVsc2UgaWYgKHRyaWdnZXIgIT09IFRSSUdHRVJfTUFOVUFMKSB7XG4gICAgICAgIGNvbnN0IGV2ZW50SW4gPSB0cmlnZ2VyID09PSBUUklHR0VSX0hPVkVSID9cbiAgICAgICAgICB0aGlzLmNvbnN0cnVjdG9yLkV2ZW50Lk1PVVNFRU5URVIgOlxuICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IuRXZlbnQuRk9DVVNJTlxuICAgICAgICBjb25zdCBldmVudE91dCA9IHRyaWdnZXIgPT09IFRSSUdHRVJfSE9WRVIgP1xuICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IuRXZlbnQuTU9VU0VMRUFWRSA6XG4gICAgICAgICAgdGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5GT0NVU09VVFxuXG4gICAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBldmVudEluLCB0aGlzLl9jb25maWcuc2VsZWN0b3IsIGV2ZW50ID0+IHRoaXMuX2VudGVyKGV2ZW50KSlcbiAgICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIGV2ZW50T3V0LCB0aGlzLl9jb25maWcuc2VsZWN0b3IsIGV2ZW50ID0+IHRoaXMuX2xlYXZlKGV2ZW50KSlcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5faGlkZU1vZGFsSGFuZGxlciA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9lbGVtZW50KSB7XG4gICAgICAgIHRoaXMuaGlkZSgpXG4gICAgICB9XG4gICAgfVxuXG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQuY2xvc2VzdChTRUxFQ1RPUl9NT0RBTCksIEVWRU5UX01PREFMX0hJREUsIHRoaXMuX2hpZGVNb2RhbEhhbmRsZXIpXG5cbiAgICBpZiAodGhpcy5fY29uZmlnLnNlbGVjdG9yKSB7XG4gICAgICB0aGlzLl9jb25maWcgPSB7XG4gICAgICAgIC4uLnRoaXMuX2NvbmZpZyxcbiAgICAgICAgdHJpZ2dlcjogJ21hbnVhbCcsXG4gICAgICAgIHNlbGVjdG9yOiAnJ1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9maXhUaXRsZSgpXG4gICAgfVxuICB9XG5cbiAgX2ZpeFRpdGxlKCkge1xuICAgIGNvbnN0IHRpdGxlID0gdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3RpdGxlJylcbiAgICBjb25zdCBvcmlnaW5hbFRpdGxlVHlwZSA9IHR5cGVvZiB0aGlzLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1icy1vcmlnaW5hbC10aXRsZScpXG5cbiAgICBpZiAodGl0bGUgfHwgb3JpZ2luYWxUaXRsZVR5cGUgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnZGF0YS1icy1vcmlnaW5hbC10aXRsZScsIHRpdGxlIHx8ICcnKVxuICAgICAgaWYgKHRpdGxlICYmICF0aGlzLl9lbGVtZW50LmdldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcpICYmICF0aGlzLl9lbGVtZW50LnRleHRDb250ZW50KSB7XG4gICAgICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWxhYmVsJywgdGl0bGUpXG4gICAgICB9XG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCd0aXRsZScsICcnKVxuICAgIH1cbiAgfVxuXG4gIF9lbnRlcihldmVudCwgY29udGV4dCkge1xuICAgIGNvbnRleHQgPSB0aGlzLl9pbml0aWFsaXplT25EZWxlZ2F0ZWRUYXJnZXQoZXZlbnQsIGNvbnRleHQpXG5cbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGNvbnRleHQuX2FjdGl2ZVRyaWdnZXJbXG4gICAgICAgIGV2ZW50LnR5cGUgPT09ICdmb2N1c2luJyA/IFRSSUdHRVJfRk9DVVMgOiBUUklHR0VSX0hPVkVSXG4gICAgICBdID0gdHJ1ZVxuICAgIH1cblxuICAgIGlmIChjb250ZXh0LmdldFRpcEVsZW1lbnQoKS5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9TSE9XKSB8fCBjb250ZXh0Ll9ob3ZlclN0YXRlID09PSBIT1ZFUl9TVEFURV9TSE9XKSB7XG4gICAgICBjb250ZXh0Ll9ob3ZlclN0YXRlID0gSE9WRVJfU1RBVEVfU0hPV1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY2xlYXJUaW1lb3V0KGNvbnRleHQuX3RpbWVvdXQpXG5cbiAgICBjb250ZXh0Ll9ob3ZlclN0YXRlID0gSE9WRVJfU1RBVEVfU0hPV1xuXG4gICAgaWYgKCFjb250ZXh0Ll9jb25maWcuZGVsYXkgfHwgIWNvbnRleHQuX2NvbmZpZy5kZWxheS5zaG93KSB7XG4gICAgICBjb250ZXh0LnNob3coKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29udGV4dC5fdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgaWYgKGNvbnRleHQuX2hvdmVyU3RhdGUgPT09IEhPVkVSX1NUQVRFX1NIT1cpIHtcbiAgICAgICAgY29udGV4dC5zaG93KClcbiAgICAgIH1cbiAgICB9LCBjb250ZXh0Ll9jb25maWcuZGVsYXkuc2hvdylcbiAgfVxuXG4gIF9sZWF2ZShldmVudCwgY29udGV4dCkge1xuICAgIGNvbnRleHQgPSB0aGlzLl9pbml0aWFsaXplT25EZWxlZ2F0ZWRUYXJnZXQoZXZlbnQsIGNvbnRleHQpXG5cbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGNvbnRleHQuX2FjdGl2ZVRyaWdnZXJbXG4gICAgICAgIGV2ZW50LnR5cGUgPT09ICdmb2N1c291dCcgPyBUUklHR0VSX0ZPQ1VTIDogVFJJR0dFUl9IT1ZFUlxuICAgICAgXSA9IGNvbnRleHQuX2VsZW1lbnQuY29udGFpbnMoZXZlbnQucmVsYXRlZFRhcmdldClcbiAgICB9XG5cbiAgICBpZiAoY29udGV4dC5faXNXaXRoQWN0aXZlVHJpZ2dlcigpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjbGVhclRpbWVvdXQoY29udGV4dC5fdGltZW91dClcblxuICAgIGNvbnRleHQuX2hvdmVyU3RhdGUgPSBIT1ZFUl9TVEFURV9PVVRcblxuICAgIGlmICghY29udGV4dC5fY29uZmlnLmRlbGF5IHx8ICFjb250ZXh0Ll9jb25maWcuZGVsYXkuaGlkZSkge1xuICAgICAgY29udGV4dC5oaWRlKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnRleHQuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmIChjb250ZXh0Ll9ob3ZlclN0YXRlID09PSBIT1ZFUl9TVEFURV9PVVQpIHtcbiAgICAgICAgY29udGV4dC5oaWRlKClcbiAgICAgIH1cbiAgICB9LCBjb250ZXh0Ll9jb25maWcuZGVsYXkuaGlkZSlcbiAgfVxuXG4gIF9pc1dpdGhBY3RpdmVUcmlnZ2VyKCkge1xuICAgIGZvciAoY29uc3QgdHJpZ2dlciBpbiB0aGlzLl9hY3RpdmVUcmlnZ2VyKSB7XG4gICAgICBpZiAodGhpcy5fYWN0aXZlVHJpZ2dlclt0cmlnZ2VyXSkge1xuICAgICAgICByZXR1cm4gdHJ1ZVxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25zdCBkYXRhQXR0cmlidXRlcyA9IE1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQpXG5cbiAgICBPYmplY3Qua2V5cyhkYXRhQXR0cmlidXRlcykuZm9yRWFjaChkYXRhQXR0ciA9PiB7XG4gICAgICBpZiAoRElTQUxMT1dFRF9BVFRSSUJVVEVTLmhhcyhkYXRhQXR0cikpIHtcbiAgICAgICAgZGVsZXRlIGRhdGFBdHRyaWJ1dGVzW2RhdGFBdHRyXVxuICAgICAgfVxuICAgIH0pXG5cbiAgICBjb25maWcgPSB7XG4gICAgICAuLi50aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHQsXG4gICAgICAuLi5kYXRhQXR0cmlidXRlcyxcbiAgICAgIC4uLih0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyAmJiBjb25maWcgPyBjb25maWcgOiB7fSlcbiAgICB9XG5cbiAgICBjb25maWcuY29udGFpbmVyID0gY29uZmlnLmNvbnRhaW5lciA9PT0gZmFsc2UgPyBkb2N1bWVudC5ib2R5IDogZ2V0RWxlbWVudChjb25maWcuY29udGFpbmVyKVxuXG4gICAgaWYgKHR5cGVvZiBjb25maWcuZGVsYXkgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25maWcuZGVsYXkgPSB7XG4gICAgICAgIHNob3c6IGNvbmZpZy5kZWxheSxcbiAgICAgICAgaGlkZTogY29uZmlnLmRlbGF5XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBjb25maWcudGl0bGUgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25maWcudGl0bGUgPSBjb25maWcudGl0bGUudG9TdHJpbmcoKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29uZmlnLmNvbnRlbnQgPT09ICdudW1iZXInKSB7XG4gICAgICBjb25maWcuY29udGVudCA9IGNvbmZpZy5jb250ZW50LnRvU3RyaW5nKClcbiAgICB9XG5cbiAgICB0eXBlQ2hlY2tDb25maWcoTkFNRSwgY29uZmlnLCB0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRUeXBlKVxuXG4gICAgaWYgKGNvbmZpZy5zYW5pdGl6ZSkge1xuICAgICAgY29uZmlnLnRlbXBsYXRlID0gc2FuaXRpemVIdG1sKGNvbmZpZy50ZW1wbGF0ZSwgY29uZmlnLmFsbG93TGlzdCwgY29uZmlnLnNhbml0aXplRm4pXG4gICAgfVxuXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG5cbiAgX2dldERlbGVnYXRlQ29uZmlnKCkge1xuICAgIGNvbnN0IGNvbmZpZyA9IHt9XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiB0aGlzLl9jb25maWcpIHtcbiAgICAgIGlmICh0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRba2V5XSAhPT0gdGhpcy5fY29uZmlnW2tleV0pIHtcbiAgICAgICAgY29uZmlnW2tleV0gPSB0aGlzLl9jb25maWdba2V5XVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIEluIHRoZSBmdXR1cmUgY2FuIGJlIHJlcGxhY2VkIHdpdGg6XG4gICAgLy8gY29uc3Qga2V5c1dpdGhEaWZmZXJlbnRWYWx1ZXMgPSBPYmplY3QuZW50cmllcyh0aGlzLl9jb25maWcpLmZpbHRlcihlbnRyeSA9PiB0aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHRbZW50cnlbMF1dICE9PSB0aGlzLl9jb25maWdbZW50cnlbMF1dKVxuICAgIC8vIGBPYmplY3QuZnJvbUVudHJpZXMoa2V5c1dpdGhEaWZmZXJlbnRWYWx1ZXMpYFxuICAgIHJldHVybiBjb25maWdcbiAgfVxuXG4gIF9jbGVhblRpcENsYXNzKCkge1xuICAgIGNvbnN0IHRpcCA9IHRoaXMuZ2V0VGlwRWxlbWVudCgpXG4gICAgY29uc3QgYmFzaWNDbGFzc1ByZWZpeFJlZ2V4ID0gbmV3IFJlZ0V4cChgKF58XFxcXHMpJHt0aGlzLl9nZXRCYXNpY0NsYXNzUHJlZml4KCl9XFxcXFMrYCwgJ2cnKVxuICAgIGNvbnN0IHRhYkNsYXNzID0gdGlwLmdldEF0dHJpYnV0ZSgnY2xhc3MnKS5tYXRjaChiYXNpY0NsYXNzUHJlZml4UmVnZXgpXG4gICAgaWYgKHRhYkNsYXNzICE9PSBudWxsICYmIHRhYkNsYXNzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRhYkNsYXNzLm1hcCh0b2tlbiA9PiB0b2tlbi50cmltKCkpXG4gICAgICAgIC5mb3JFYWNoKHRDbGFzcyA9PiB0aXAuY2xhc3NMaXN0LnJlbW92ZSh0Q2xhc3MpKVxuICAgIH1cbiAgfVxuXG4gIF9nZXRCYXNpY0NsYXNzUHJlZml4KCkge1xuICAgIHJldHVybiBDTEFTU19QUkVGSVhcbiAgfVxuXG4gIF9oYW5kbGVQb3BwZXJQbGFjZW1lbnRDaGFuZ2UocG9wcGVyRGF0YSkge1xuICAgIGNvbnN0IHsgc3RhdGUgfSA9IHBvcHBlckRhdGFcblxuICAgIGlmICghc3RhdGUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMudGlwID0gc3RhdGUuZWxlbWVudHMucG9wcGVyXG4gICAgdGhpcy5fY2xlYW5UaXBDbGFzcygpXG4gICAgdGhpcy5fYWRkQXR0YWNobWVudENsYXNzKHRoaXMuX2dldEF0dGFjaG1lbnQoc3RhdGUucGxhY2VtZW50KSlcbiAgfVxuXG4gIC8vIFN0YXRpY1xuXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gVG9vbHRpcC5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZylcblxuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYClcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGFbY29uZmlnXSgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogalF1ZXJ5XG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIGFkZCAuVG9vbHRpcCB0byBqUXVlcnkgb25seSBpZiBqUXVlcnkgaXMgcHJlc2VudFxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihUb29sdGlwKVxuXG5leHBvcnQgZGVmYXVsdCBUb29sdGlwXG4iLCIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjEuMCk6IHBvcG92ZXIuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgeyBkZWZpbmVKUXVlcnlQbHVnaW4gfSBmcm9tICcuL3V0aWwvaW5kZXgnXG5pbXBvcnQgVG9vbHRpcCBmcm9tICcuL3Rvb2x0aXAnXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDb25zdGFudHNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IE5BTUUgPSAncG9wb3ZlcidcbmNvbnN0IERBVEFfS0VZID0gJ2JzLnBvcG92ZXInXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgQ0xBU1NfUFJFRklYID0gJ2JzLXBvcG92ZXInXG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIC4uLlRvb2x0aXAuRGVmYXVsdCxcbiAgcGxhY2VtZW50OiAncmlnaHQnLFxuICBvZmZzZXQ6IFswLCA4XSxcbiAgdHJpZ2dlcjogJ2NsaWNrJyxcbiAgY29udGVudDogJycsXG4gIHRlbXBsYXRlOiAnPGRpdiBjbGFzcz1cInBvcG92ZXJcIiByb2xlPVwidG9vbHRpcFwiPicgK1xuICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInBvcG92ZXItYXJyb3dcIj48L2Rpdj4nICtcbiAgICAgICAgICAgICAgJzxoMyBjbGFzcz1cInBvcG92ZXItaGVhZGVyXCI+PC9oMz4nICtcbiAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJwb3BvdmVyLWJvZHlcIj48L2Rpdj4nICtcbiAgICAgICAgICAgICc8L2Rpdj4nXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICAuLi5Ub29sdGlwLkRlZmF1bHRUeXBlLFxuICBjb250ZW50OiAnKHN0cmluZ3xlbGVtZW50fGZ1bmN0aW9uKSdcbn1cblxuY29uc3QgRXZlbnQgPSB7XG4gIEhJREU6IGBoaWRlJHtFVkVOVF9LRVl9YCxcbiAgSElEREVOOiBgaGlkZGVuJHtFVkVOVF9LRVl9YCxcbiAgU0hPVzogYHNob3cke0VWRU5UX0tFWX1gLFxuICBTSE9XTjogYHNob3duJHtFVkVOVF9LRVl9YCxcbiAgSU5TRVJURUQ6IGBpbnNlcnRlZCR7RVZFTlRfS0VZfWAsXG4gIENMSUNLOiBgY2xpY2ske0VWRU5UX0tFWX1gLFxuICBGT0NVU0lOOiBgZm9jdXNpbiR7RVZFTlRfS0VZfWAsXG4gIEZPQ1VTT1VUOiBgZm9jdXNvdXQke0VWRU5UX0tFWX1gLFxuICBNT1VTRUVOVEVSOiBgbW91c2VlbnRlciR7RVZFTlRfS0VZfWAsXG4gIE1PVVNFTEVBVkU6IGBtb3VzZWxlYXZlJHtFVkVOVF9LRVl9YFxufVxuXG5jb25zdCBTRUxFQ1RPUl9USVRMRSA9ICcucG9wb3Zlci1oZWFkZXInXG5jb25zdCBTRUxFQ1RPUl9DT05URU5UID0gJy5wb3BvdmVyLWJvZHknXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDbGFzcyBEZWZpbml0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jbGFzcyBQb3BvdmVyIGV4dGVuZHMgVG9vbHRpcCB7XG4gIC8vIEdldHRlcnNcblxuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRVxuICB9XG5cbiAgc3RhdGljIGdldCBFdmVudCgpIHtcbiAgICByZXR1cm4gRXZlbnRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlXG4gIH1cblxuICAvLyBPdmVycmlkZXNcblxuICBpc1dpdGhDb250ZW50KCkge1xuICAgIHJldHVybiB0aGlzLmdldFRpdGxlKCkgfHwgdGhpcy5fZ2V0Q29udGVudCgpXG4gIH1cblxuICBzZXRDb250ZW50KHRpcCkge1xuICAgIHRoaXMuX3Nhbml0aXplQW5kU2V0Q29udGVudCh0aXAsIHRoaXMuZ2V0VGl0bGUoKSwgU0VMRUNUT1JfVElUTEUpXG4gICAgdGhpcy5fc2FuaXRpemVBbmRTZXRDb250ZW50KHRpcCwgdGhpcy5fZ2V0Q29udGVudCgpLCBTRUxFQ1RPUl9DT05URU5UKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuXG4gIF9nZXRDb250ZW50KCkge1xuICAgIHJldHVybiB0aGlzLl9yZXNvbHZlUG9zc2libGVGdW5jdGlvbih0aGlzLl9jb25maWcuY29udGVudClcbiAgfVxuXG4gIF9nZXRCYXNpY0NsYXNzUHJlZml4KCkge1xuICAgIHJldHVybiBDTEFTU19QUkVGSVhcbiAgfVxuXG4gIC8vIFN0YXRpY1xuXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gUG9wb3Zlci5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZylcblxuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYClcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGFbY29uZmlnXSgpXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogalF1ZXJ5XG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIGFkZCAuUG9wb3ZlciB0byBqUXVlcnkgb25seSBpZiBqUXVlcnkgaXMgcHJlc2VudFxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihQb3BvdmVyKVxuXG5leHBvcnQgZGVmYXVsdCBQb3BvdmVyXG4iLCIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjEuMCk6IHNjcm9sbHNweS5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCB7XG4gIGRlZmluZUpRdWVyeVBsdWdpbixcbiAgZ2V0RWxlbWVudCxcbiAgZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCxcbiAgdHlwZUNoZWNrQ29uZmlnXG59IGZyb20gJy4vdXRpbC9pbmRleCdcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlcidcbmltcG9ydCBNYW5pcHVsYXRvciBmcm9tICcuL2RvbS9tYW5pcHVsYXRvcidcbmltcG9ydCBTZWxlY3RvckVuZ2luZSBmcm9tICcuL2RvbS9zZWxlY3Rvci1lbmdpbmUnXG5pbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tICcuL2Jhc2UtY29tcG9uZW50J1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ29uc3RhbnRzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCBOQU1FID0gJ3Njcm9sbHNweSdcbmNvbnN0IERBVEFfS0VZID0gJ2JzLnNjcm9sbHNweSdcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5jb25zdCBEQVRBX0FQSV9LRVkgPSAnLmRhdGEtYXBpJ1xuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBvZmZzZXQ6IDEwLFxuICBtZXRob2Q6ICdhdXRvJyxcbiAgdGFyZ2V0OiAnJ1xufVxuXG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgb2Zmc2V0OiAnbnVtYmVyJyxcbiAgbWV0aG9kOiAnc3RyaW5nJyxcbiAgdGFyZ2V0OiAnKHN0cmluZ3xlbGVtZW50KSdcbn1cblxuY29uc3QgRVZFTlRfQUNUSVZBVEUgPSBgYWN0aXZhdGUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9TQ1JPTEwgPSBgc2Nyb2xsJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfTE9BRF9EQVRBX0FQSSA9IGBsb2FkJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuXG5jb25zdCBDTEFTU19OQU1FX0RST1BET1dOX0lURU0gPSAnZHJvcGRvd24taXRlbSdcbmNvbnN0IENMQVNTX05BTUVfQUNUSVZFID0gJ2FjdGl2ZSdcblxuY29uc3QgU0VMRUNUT1JfREFUQV9TUFkgPSAnW2RhdGEtYnMtc3B5PVwic2Nyb2xsXCJdJ1xuY29uc3QgU0VMRUNUT1JfTkFWX0xJU1RfR1JPVVAgPSAnLm5hdiwgLmxpc3QtZ3JvdXAnXG5jb25zdCBTRUxFQ1RPUl9OQVZfTElOS1MgPSAnLm5hdi1saW5rJ1xuY29uc3QgU0VMRUNUT1JfTkFWX0lURU1TID0gJy5uYXYtaXRlbSdcbmNvbnN0IFNFTEVDVE9SX0xJU1RfSVRFTVMgPSAnLmxpc3QtZ3JvdXAtaXRlbSdcbmNvbnN0IFNFTEVDVE9SX0xJTktfSVRFTVMgPSBgJHtTRUxFQ1RPUl9OQVZfTElOS1N9LCAke1NFTEVDVE9SX0xJU1RfSVRFTVN9LCAuJHtDTEFTU19OQU1FX0RST1BET1dOX0lURU19YFxuY29uc3QgU0VMRUNUT1JfRFJPUERPV04gPSAnLmRyb3Bkb3duJ1xuY29uc3QgU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFID0gJy5kcm9wZG93bi10b2dnbGUnXG5cbmNvbnN0IE1FVEhPRF9PRkZTRVQgPSAnb2Zmc2V0J1xuY29uc3QgTUVUSE9EX1BPU0lUSU9OID0gJ3Bvc2l0aW9uJ1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ2xhc3MgRGVmaW5pdGlvblxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY2xhc3MgU2Nyb2xsU3B5IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQpXG4gICAgdGhpcy5fc2Nyb2xsRWxlbWVudCA9IHRoaXMuX2VsZW1lbnQudGFnTmFtZSA9PT0gJ0JPRFknID8gd2luZG93IDogdGhpcy5fZWxlbWVudFxuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpXG4gICAgdGhpcy5fb2Zmc2V0cyA9IFtdXG4gICAgdGhpcy5fdGFyZ2V0cyA9IFtdXG4gICAgdGhpcy5fYWN0aXZlVGFyZ2V0ID0gbnVsbFxuICAgIHRoaXMuX3Njcm9sbEhlaWdodCA9IDBcblxuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9zY3JvbGxFbGVtZW50LCBFVkVOVF9TQ1JPTEwsICgpID0+IHRoaXMuX3Byb2Nlc3MoKSlcblxuICAgIHRoaXMucmVmcmVzaCgpXG4gICAgdGhpcy5fcHJvY2VzcygpXG4gIH1cblxuICAvLyBHZXR0ZXJzXG5cbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuXG4gIHJlZnJlc2goKSB7XG4gICAgY29uc3QgYXV0b01ldGhvZCA9IHRoaXMuX3Njcm9sbEVsZW1lbnQgPT09IHRoaXMuX3Njcm9sbEVsZW1lbnQud2luZG93ID9cbiAgICAgIE1FVEhPRF9PRkZTRVQgOlxuICAgICAgTUVUSE9EX1BPU0lUSU9OXG5cbiAgICBjb25zdCBvZmZzZXRNZXRob2QgPSB0aGlzLl9jb25maWcubWV0aG9kID09PSAnYXV0bycgP1xuICAgICAgYXV0b01ldGhvZCA6XG4gICAgICB0aGlzLl9jb25maWcubWV0aG9kXG5cbiAgICBjb25zdCBvZmZzZXRCYXNlID0gb2Zmc2V0TWV0aG9kID09PSBNRVRIT0RfUE9TSVRJT04gP1xuICAgICAgdGhpcy5fZ2V0U2Nyb2xsVG9wKCkgOlxuICAgICAgMFxuXG4gICAgdGhpcy5fb2Zmc2V0cyA9IFtdXG4gICAgdGhpcy5fdGFyZ2V0cyA9IFtdXG4gICAgdGhpcy5fc2Nyb2xsSGVpZ2h0ID0gdGhpcy5fZ2V0U2Nyb2xsSGVpZ2h0KClcblxuICAgIGNvbnN0IHRhcmdldHMgPSBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0xJTktfSVRFTVMsIHRoaXMuX2NvbmZpZy50YXJnZXQpXG5cbiAgICB0YXJnZXRzLm1hcChlbGVtZW50ID0+IHtcbiAgICAgIGNvbnN0IHRhcmdldFNlbGVjdG9yID0gZ2V0U2VsZWN0b3JGcm9tRWxlbWVudChlbGVtZW50KVxuICAgICAgY29uc3QgdGFyZ2V0ID0gdGFyZ2V0U2VsZWN0b3IgPyBTZWxlY3RvckVuZ2luZS5maW5kT25lKHRhcmdldFNlbGVjdG9yKSA6IG51bGxcblxuICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICBjb25zdCB0YXJnZXRCQ1IgPSB0YXJnZXQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KClcbiAgICAgICAgaWYgKHRhcmdldEJDUi53aWR0aCB8fCB0YXJnZXRCQ1IuaGVpZ2h0KSB7XG4gICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIE1hbmlwdWxhdG9yW29mZnNldE1ldGhvZF0odGFyZ2V0KS50b3AgKyBvZmZzZXRCYXNlLFxuICAgICAgICAgICAgdGFyZ2V0U2VsZWN0b3JcbiAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG51bGxcbiAgICB9KVxuICAgICAgLmZpbHRlcihpdGVtID0+IGl0ZW0pXG4gICAgICAuc29ydCgoYSwgYikgPT4gYVswXSAtIGJbMF0pXG4gICAgICAuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgdGhpcy5fb2Zmc2V0cy5wdXNoKGl0ZW1bMF0pXG4gICAgICAgIHRoaXMuX3RhcmdldHMucHVzaChpdGVtWzFdKVxuICAgICAgfSlcbiAgfVxuXG4gIGRpc3Bvc2UoKSB7XG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9zY3JvbGxFbGVtZW50LCBFVkVOVF9LRVkpXG4gICAgc3VwZXIuZGlzcG9zZSgpXG4gIH1cblxuICAvLyBQcml2YXRlXG5cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25maWcgPSB7XG4gICAgICAuLi5EZWZhdWx0LFxuICAgICAgLi4uTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCksXG4gICAgICAuLi4odHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgJiYgY29uZmlnID8gY29uZmlnIDoge30pXG4gICAgfVxuXG4gICAgY29uZmlnLnRhcmdldCA9IGdldEVsZW1lbnQoY29uZmlnLnRhcmdldCkgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50XG5cbiAgICB0eXBlQ2hlY2tDb25maWcoTkFNRSwgY29uZmlnLCBEZWZhdWx0VHlwZSlcblxuICAgIHJldHVybiBjb25maWdcbiAgfVxuXG4gIF9nZXRTY3JvbGxUb3AoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Njcm9sbEVsZW1lbnQgPT09IHdpbmRvdyA/XG4gICAgICB0aGlzLl9zY3JvbGxFbGVtZW50LnBhZ2VZT2Zmc2V0IDpcbiAgICAgIHRoaXMuX3Njcm9sbEVsZW1lbnQuc2Nyb2xsVG9wXG4gIH1cblxuICBfZ2V0U2Nyb2xsSGVpZ2h0KCkge1xuICAgIHJldHVybiB0aGlzLl9zY3JvbGxFbGVtZW50LnNjcm9sbEhlaWdodCB8fCBNYXRoLm1heChcbiAgICAgIGRvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0LFxuICAgICAgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LnNjcm9sbEhlaWdodFxuICAgIClcbiAgfVxuXG4gIF9nZXRPZmZzZXRIZWlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Njcm9sbEVsZW1lbnQgPT09IHdpbmRvdyA/XG4gICAgICB3aW5kb3cuaW5uZXJIZWlnaHQgOlxuICAgICAgdGhpcy5fc2Nyb2xsRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHRcbiAgfVxuXG4gIF9wcm9jZXNzKCkge1xuICAgIGNvbnN0IHNjcm9sbFRvcCA9IHRoaXMuX2dldFNjcm9sbFRvcCgpICsgdGhpcy5fY29uZmlnLm9mZnNldFxuICAgIGNvbnN0IHNjcm9sbEhlaWdodCA9IHRoaXMuX2dldFNjcm9sbEhlaWdodCgpXG4gICAgY29uc3QgbWF4U2Nyb2xsID0gdGhpcy5fY29uZmlnLm9mZnNldCArIHNjcm9sbEhlaWdodCAtIHRoaXMuX2dldE9mZnNldEhlaWdodCgpXG5cbiAgICBpZiAodGhpcy5fc2Nyb2xsSGVpZ2h0ICE9PSBzY3JvbGxIZWlnaHQpIHtcbiAgICAgIHRoaXMucmVmcmVzaCgpXG4gICAgfVxuXG4gICAgaWYgKHNjcm9sbFRvcCA+PSBtYXhTY3JvbGwpIHtcbiAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuX3RhcmdldHNbdGhpcy5fdGFyZ2V0cy5sZW5ndGggLSAxXVxuXG4gICAgICBpZiAodGhpcy5fYWN0aXZlVGFyZ2V0ICE9PSB0YXJnZXQpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZhdGUodGFyZ2V0KVxuICAgICAgfVxuXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5fYWN0aXZlVGFyZ2V0ICYmIHNjcm9sbFRvcCA8IHRoaXMuX29mZnNldHNbMF0gJiYgdGhpcy5fb2Zmc2V0c1swXSA+IDApIHtcbiAgICAgIHRoaXMuX2FjdGl2ZVRhcmdldCA9IG51bGxcbiAgICAgIHRoaXMuX2NsZWFyKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSB0aGlzLl9vZmZzZXRzLmxlbmd0aDsgaS0tOykge1xuICAgICAgY29uc3QgaXNBY3RpdmVUYXJnZXQgPSB0aGlzLl9hY3RpdmVUYXJnZXQgIT09IHRoaXMuX3RhcmdldHNbaV0gJiZcbiAgICAgICAgICBzY3JvbGxUb3AgPj0gdGhpcy5fb2Zmc2V0c1tpXSAmJlxuICAgICAgICAgICh0eXBlb2YgdGhpcy5fb2Zmc2V0c1tpICsgMV0gPT09ICd1bmRlZmluZWQnIHx8IHNjcm9sbFRvcCA8IHRoaXMuX29mZnNldHNbaSArIDFdKVxuXG4gICAgICBpZiAoaXNBY3RpdmVUYXJnZXQpIHtcbiAgICAgICAgdGhpcy5fYWN0aXZhdGUodGhpcy5fdGFyZ2V0c1tpXSlcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBfYWN0aXZhdGUodGFyZ2V0KSB7XG4gICAgdGhpcy5fYWN0aXZlVGFyZ2V0ID0gdGFyZ2V0XG5cbiAgICB0aGlzLl9jbGVhcigpXG5cbiAgICBjb25zdCBxdWVyaWVzID0gU0VMRUNUT1JfTElOS19JVEVNUy5zcGxpdCgnLCcpXG4gICAgICAubWFwKHNlbGVjdG9yID0+IGAke3NlbGVjdG9yfVtkYXRhLWJzLXRhcmdldD1cIiR7dGFyZ2V0fVwiXSwke3NlbGVjdG9yfVtocmVmPVwiJHt0YXJnZXR9XCJdYClcblxuICAgIGNvbnN0IGxpbmsgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKHF1ZXJpZXMuam9pbignLCcpLCB0aGlzLl9jb25maWcudGFyZ2V0KVxuXG4gICAgbGluay5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFKVxuICAgIGlmIChsaW5rLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0RST1BET1dOX0lURU0pKSB7XG4gICAgICBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0RST1BET1dOX1RPR0dMRSwgbGluay5jbG9zZXN0KFNFTEVDVE9SX0RST1BET1dOKSlcbiAgICAgICAgLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUpXG4gICAgfSBlbHNlIHtcbiAgICAgIFNlbGVjdG9yRW5naW5lLnBhcmVudHMobGluaywgU0VMRUNUT1JfTkFWX0xJU1RfR1JPVVApXG4gICAgICAgIC5mb3JFYWNoKGxpc3RHcm91cCA9PiB7XG4gICAgICAgICAgLy8gU2V0IHRyaWdnZXJlZCBsaW5rcyBwYXJlbnRzIGFzIGFjdGl2ZVxuICAgICAgICAgIC8vIFdpdGggYm90aCA8dWw+IGFuZCA8bmF2PiBtYXJrdXAgYSBwYXJlbnQgaXMgdGhlIHByZXZpb3VzIHNpYmxpbmcgb2YgYW55IG5hdiBhbmNlc3RvclxuICAgICAgICAgIFNlbGVjdG9yRW5naW5lLnByZXYobGlzdEdyb3VwLCBgJHtTRUxFQ1RPUl9OQVZfTElOS1N9LCAke1NFTEVDVE9SX0xJU1RfSVRFTVN9YClcbiAgICAgICAgICAgIC5mb3JFYWNoKGl0ZW0gPT4gaXRlbS5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFKSlcblxuICAgICAgICAgIC8vIEhhbmRsZSBzcGVjaWFsIGNhc2Ugd2hlbiAubmF2LWxpbmsgaXMgaW5zaWRlIC5uYXYtaXRlbVxuICAgICAgICAgIFNlbGVjdG9yRW5naW5lLnByZXYobGlzdEdyb3VwLCBTRUxFQ1RPUl9OQVZfSVRFTVMpXG4gICAgICAgICAgICAuZm9yRWFjaChuYXZJdGVtID0+IHtcbiAgICAgICAgICAgICAgU2VsZWN0b3JFbmdpbmUuY2hpbGRyZW4obmF2SXRlbSwgU0VMRUNUT1JfTkFWX0xJTktTKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKGl0ZW0gPT4gaXRlbS5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFKSlcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fc2Nyb2xsRWxlbWVudCwgRVZFTlRfQUNUSVZBVEUsIHtcbiAgICAgIHJlbGF0ZWRUYXJnZXQ6IHRhcmdldFxuICAgIH0pXG4gIH1cblxuICBfY2xlYXIoKSB7XG4gICAgU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9MSU5LX0lURU1TLCB0aGlzLl9jb25maWcudGFyZ2V0KVxuICAgICAgLmZpbHRlcihub2RlID0+IG5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfQUNUSVZFKSlcbiAgICAgIC5mb3JFYWNoKG5vZGUgPT4gbm9kZS5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFKSlcbiAgfVxuXG4gIC8vIFN0YXRpY1xuXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gU2Nyb2xsU3B5LmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICB9XG5cbiAgICAgIGRhdGFbY29uZmlnXSgpXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbkV2ZW50SGFuZGxlci5vbih3aW5kb3csIEVWRU5UX0xPQURfREFUQV9BUEksICgpID0+IHtcbiAgU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9EQVRBX1NQWSlcbiAgICAuZm9yRWFjaChzcHkgPT4gbmV3IFNjcm9sbFNweShzcHkpKVxufSlcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIGpRdWVyeVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBhZGQgLlNjcm9sbFNweSB0byBqUXVlcnkgb25seSBpZiBqUXVlcnkgaXMgcHJlc2VudFxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihTY3JvbGxTcHkpXG5cbmV4cG9ydCBkZWZhdWx0IFNjcm9sbFNweVxuIiwiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4xLjApOiB0YWIuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQge1xuICBkZWZpbmVKUXVlcnlQbHVnaW4sXG4gIGdldEVsZW1lbnRGcm9tU2VsZWN0b3IsXG4gIGlzRGlzYWJsZWQsXG4gIHJlZmxvd1xufSBmcm9tICcuL3V0aWwvaW5kZXgnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi9kb20vc2VsZWN0b3ItZW5naW5lJ1xuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudCdcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvbnN0YW50c1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgTkFNRSA9ICd0YWInXG5jb25zdCBEQVRBX0tFWSA9ICdicy50YWInXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSdcblxuY29uc3QgRVZFTlRfSElERSA9IGBoaWRlJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfSElEREVOID0gYGhpZGRlbiR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NIT1cgPSBgc2hvdyR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NIT1dOID0gYHNob3duJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkgPSBgY2xpY2ske0VWRU5UX0tFWX0ke0RBVEFfQVBJX0tFWX1gXG5cbmNvbnN0IENMQVNTX05BTUVfRFJPUERPV05fTUVOVSA9ICdkcm9wZG93bi1tZW51J1xuY29uc3QgQ0xBU1NfTkFNRV9BQ1RJVkUgPSAnYWN0aXZlJ1xuY29uc3QgQ0xBU1NfTkFNRV9GQURFID0gJ2ZhZGUnXG5jb25zdCBDTEFTU19OQU1FX1NIT1cgPSAnc2hvdydcblxuY29uc3QgU0VMRUNUT1JfRFJPUERPV04gPSAnLmRyb3Bkb3duJ1xuY29uc3QgU0VMRUNUT1JfTkFWX0xJU1RfR1JPVVAgPSAnLm5hdiwgLmxpc3QtZ3JvdXAnXG5jb25zdCBTRUxFQ1RPUl9BQ1RJVkUgPSAnLmFjdGl2ZSdcbmNvbnN0IFNFTEVDVE9SX0FDVElWRV9VTCA9ICc6c2NvcGUgPiBsaSA+IC5hY3RpdmUnXG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSA9ICdbZGF0YS1icy10b2dnbGU9XCJ0YWJcIl0sIFtkYXRhLWJzLXRvZ2dsZT1cInBpbGxcIl0sIFtkYXRhLWJzLXRvZ2dsZT1cImxpc3RcIl0nXG5jb25zdCBTRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUgPSAnLmRyb3Bkb3duLXRvZ2dsZSdcbmNvbnN0IFNFTEVDVE9SX0RST1BET1dOX0FDVElWRV9DSElMRCA9ICc6c2NvcGUgPiAuZHJvcGRvd24tbWVudSAuYWN0aXZlJ1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ2xhc3MgRGVmaW5pdGlvblxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY2xhc3MgVGFiIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIC8vIEdldHRlcnNcblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuXG4gIHNob3coKSB7XG4gICAgaWYgKCh0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUgJiZcbiAgICAgIHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiZcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfQUNUSVZFKSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGxldCBwcmV2aW91c1xuICAgIGNvbnN0IHRhcmdldCA9IGdldEVsZW1lbnRGcm9tU2VsZWN0b3IodGhpcy5fZWxlbWVudClcbiAgICBjb25zdCBsaXN0RWxlbWVudCA9IHRoaXMuX2VsZW1lbnQuY2xvc2VzdChTRUxFQ1RPUl9OQVZfTElTVF9HUk9VUClcblxuICAgIGlmIChsaXN0RWxlbWVudCkge1xuICAgICAgY29uc3QgaXRlbVNlbGVjdG9yID0gbGlzdEVsZW1lbnQubm9kZU5hbWUgPT09ICdVTCcgfHwgbGlzdEVsZW1lbnQubm9kZU5hbWUgPT09ICdPTCcgPyBTRUxFQ1RPUl9BQ1RJVkVfVUwgOiBTRUxFQ1RPUl9BQ1RJVkVcbiAgICAgIHByZXZpb3VzID0gU2VsZWN0b3JFbmdpbmUuZmluZChpdGVtU2VsZWN0b3IsIGxpc3RFbGVtZW50KVxuICAgICAgcHJldmlvdXMgPSBwcmV2aW91c1twcmV2aW91cy5sZW5ndGggLSAxXVxuICAgIH1cblxuICAgIGNvbnN0IGhpZGVFdmVudCA9IHByZXZpb3VzID9cbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHByZXZpb3VzLCBFVkVOVF9ISURFLCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IHRoaXMuX2VsZW1lbnRcbiAgICAgIH0pIDpcbiAgICAgIG51bGxcblxuICAgIGNvbnN0IHNob3dFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1csIHtcbiAgICAgIHJlbGF0ZWRUYXJnZXQ6IHByZXZpb3VzXG4gICAgfSlcblxuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCB8fCAoaGlkZUV2ZW50ICE9PSBudWxsICYmIGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fYWN0aXZhdGUodGhpcy5fZWxlbWVudCwgbGlzdEVsZW1lbnQpXG5cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHByZXZpb3VzLCBFVkVOVF9ISURERU4sIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldDogdGhpcy5fZWxlbWVudFxuICAgICAgfSlcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOLCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXQ6IHByZXZpb3VzXG4gICAgICB9KVxuICAgIH1cblxuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgIHRoaXMuX2FjdGl2YXRlKHRhcmdldCwgdGFyZ2V0LnBhcmVudE5vZGUsIGNvbXBsZXRlKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb21wbGV0ZSgpXG4gICAgfVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuXG4gIF9hY3RpdmF0ZShlbGVtZW50LCBjb250YWluZXIsIGNhbGxiYWNrKSB7XG4gICAgY29uc3QgYWN0aXZlRWxlbWVudHMgPSBjb250YWluZXIgJiYgKGNvbnRhaW5lci5ub2RlTmFtZSA9PT0gJ1VMJyB8fCBjb250YWluZXIubm9kZU5hbWUgPT09ICdPTCcpID9cbiAgICAgIFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfQUNUSVZFX1VMLCBjb250YWluZXIpIDpcbiAgICAgIFNlbGVjdG9yRW5naW5lLmNoaWxkcmVuKGNvbnRhaW5lciwgU0VMRUNUT1JfQUNUSVZFKVxuXG4gICAgY29uc3QgYWN0aXZlID0gYWN0aXZlRWxlbWVudHNbMF1cbiAgICBjb25zdCBpc1RyYW5zaXRpb25pbmcgPSBjYWxsYmFjayAmJiAoYWN0aXZlICYmIGFjdGl2ZS5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9GQURFKSlcblxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4gdGhpcy5fdHJhbnNpdGlvbkNvbXBsZXRlKGVsZW1lbnQsIGFjdGl2ZSwgY2FsbGJhY2spXG5cbiAgICBpZiAoYWN0aXZlICYmIGlzVHJhbnNpdGlvbmluZykge1xuICAgICAgYWN0aXZlLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XKVxuICAgICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgZWxlbWVudCwgdHJ1ZSlcbiAgICB9IGVsc2Uge1xuICAgICAgY29tcGxldGUoKVxuICAgIH1cbiAgfVxuXG4gIF90cmFuc2l0aW9uQ29tcGxldGUoZWxlbWVudCwgYWN0aXZlLCBjYWxsYmFjaykge1xuICAgIGlmIChhY3RpdmUpIHtcbiAgICAgIGFjdGl2ZS5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFKVxuXG4gICAgICBjb25zdCBkcm9wZG93bkNoaWxkID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9EUk9QRE9XTl9BQ1RJVkVfQ0hJTEQsIGFjdGl2ZS5wYXJlbnROb2RlKVxuXG4gICAgICBpZiAoZHJvcGRvd25DaGlsZCkge1xuICAgICAgICBkcm9wZG93bkNoaWxkLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9BQ1RJVkUpXG4gICAgICB9XG5cbiAgICAgIGlmIChhY3RpdmUuZ2V0QXR0cmlidXRlKCdyb2xlJykgPT09ICd0YWInKSB7XG4gICAgICAgIGFjdGl2ZS5zZXRBdHRyaWJ1dGUoJ2FyaWEtc2VsZWN0ZWQnLCBmYWxzZSlcbiAgICAgIH1cbiAgICB9XG5cbiAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUpXG4gICAgaWYgKGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdyb2xlJykgPT09ICd0YWInKSB7XG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsIHRydWUpXG4gICAgfVxuXG4gICAgcmVmbG93KGVsZW1lbnQpXG5cbiAgICBpZiAoZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9GQURFKSkge1xuICAgICAgZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVylcbiAgICB9XG5cbiAgICBsZXQgcGFyZW50ID0gZWxlbWVudC5wYXJlbnROb2RlXG4gICAgaWYgKHBhcmVudCAmJiBwYXJlbnQubm9kZU5hbWUgPT09ICdMSScpIHtcbiAgICAgIHBhcmVudCA9IHBhcmVudC5wYXJlbnROb2RlXG4gICAgfVxuXG4gICAgaWYgKHBhcmVudCAmJiBwYXJlbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUERPV05fTUVOVSkpIHtcbiAgICAgIGNvbnN0IGRyb3Bkb3duRWxlbWVudCA9IGVsZW1lbnQuY2xvc2VzdChTRUxFQ1RPUl9EUk9QRE9XTilcblxuICAgICAgaWYgKGRyb3Bkb3duRWxlbWVudCkge1xuICAgICAgICBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0RST1BET1dOX1RPR0dMRSwgZHJvcGRvd25FbGVtZW50KVxuICAgICAgICAgIC5mb3JFYWNoKGRyb3Bkb3duID0+IGRyb3Bkb3duLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUpKVxuICAgICAgfVxuXG4gICAgICBlbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsIHRydWUpXG4gICAgfVxuXG4gICAgaWYgKGNhbGxiYWNrKSB7XG4gICAgICBjYWxsYmFjaygpXG4gICAgfVxuICB9XG5cbiAgLy8gU3RhdGljXG5cbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBUYWIuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKVxuICAgICAgICB9XG5cbiAgICAgICAgZGF0YVtjb25maWddKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBEYXRhIEFwaSBpbXBsZW1lbnRhdGlvblxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSwgU0VMRUNUT1JfREFUQV9UT0dHTEUsIGZ1bmN0aW9uIChldmVudCkge1xuICBpZiAoWydBJywgJ0FSRUEnXS5pbmNsdWRlcyh0aGlzLnRhZ05hbWUpKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICB9XG5cbiAgaWYgKGlzRGlzYWJsZWQodGhpcykpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IGRhdGEgPSBUYWIuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzKVxuICBkYXRhLnNob3coKVxufSlcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIGpRdWVyeVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBhZGQgLlRhYiB0byBqUXVlcnkgb25seSBpZiBqUXVlcnkgaXMgcHJlc2VudFxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihUYWIpXG5cbmV4cG9ydCBkZWZhdWx0IFRhYlxuIiwiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4xLjApOiB0b2FzdC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCB7XG4gIGRlZmluZUpRdWVyeVBsdWdpbixcbiAgcmVmbG93LFxuICB0eXBlQ2hlY2tDb25maWdcbn0gZnJvbSAnLi91dGlsL2luZGV4J1xuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuL2RvbS9ldmVudC1oYW5kbGVyJ1xuaW1wb3J0IE1hbmlwdWxhdG9yIGZyb20gJy4vZG9tL21hbmlwdWxhdG9yJ1xuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudCdcbmltcG9ydCB7IGVuYWJsZURpc21pc3NUcmlnZ2VyIH0gZnJvbSAnLi91dGlsL2NvbXBvbmVudC1mdW5jdGlvbnMnXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDb25zdGFudHNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IE5BTUUgPSAndG9hc3QnXG5jb25zdCBEQVRBX0tFWSA9ICdicy50b2FzdCdcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5cbmNvbnN0IEVWRU5UX01PVVNFT1ZFUiA9IGBtb3VzZW92ZXIke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9NT1VTRU9VVCA9IGBtb3VzZW91dCR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0ZPQ1VTSU4gPSBgZm9jdXNpbiR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0ZPQ1VTT1VUID0gYGZvY3Vzb3V0JHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfSElERSA9IGBoaWRlJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfSElEREVOID0gYGhpZGRlbiR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NIT1cgPSBgc2hvdyR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NIT1dOID0gYHNob3duJHtFVkVOVF9LRVl9YFxuXG5jb25zdCBDTEFTU19OQU1FX0ZBREUgPSAnZmFkZSdcbmNvbnN0IENMQVNTX05BTUVfSElERSA9ICdoaWRlJyAvLyBAZGVwcmVjYXRlZCAtIGtlcHQgaGVyZSBvbmx5IGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eVxuY29uc3QgQ0xBU1NfTkFNRV9TSE9XID0gJ3Nob3cnXG5jb25zdCBDTEFTU19OQU1FX1NIT1dJTkcgPSAnc2hvd2luZydcblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIGFuaW1hdGlvbjogJ2Jvb2xlYW4nLFxuICBhdXRvaGlkZTogJ2Jvb2xlYW4nLFxuICBkZWxheTogJ251bWJlcidcbn1cblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgYW5pbWF0aW9uOiB0cnVlLFxuICBhdXRvaGlkZTogdHJ1ZSxcbiAgZGVsYXk6IDUwMDBcbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENsYXNzIERlZmluaXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNsYXNzIFRvYXN0IGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQpXG5cbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKVxuICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsXG4gICAgdGhpcy5faGFzTW91c2VJbnRlcmFjdGlvbiA9IGZhbHNlXG4gICAgdGhpcy5faGFzS2V5Ym9hcmRJbnRlcmFjdGlvbiA9IGZhbHNlXG4gICAgdGhpcy5fc2V0TGlzdGVuZXJzKClcbiAgfVxuXG4gIC8vIEdldHRlcnNcblxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZVxuICB9XG5cbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIC8vIFB1YmxpY1xuXG4gIHNob3coKSB7XG4gICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPVylcblxuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fY2xlYXJUaW1lb3V0KClcblxuICAgIGlmICh0aGlzLl9jb25maWcuYW5pbWF0aW9uKSB7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9GQURFKVxuICAgIH1cblxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPV0lORylcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOKVxuXG4gICAgICB0aGlzLl9tYXliZVNjaGVkdWxlSGlkZSgpXG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfSElERSkgLy8gQGRlcHJlY2F0ZWRcbiAgICByZWZsb3codGhpcy5fZWxlbWVudClcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XKVxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1dJTkcpXG5cbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCB0aGlzLl9lbGVtZW50LCB0aGlzLl9jb25maWcuYW5pbWF0aW9uKVxuICB9XG5cbiAgaGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0hPVykpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREUpXG5cbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfSElERSkgLy8gQGRlcHJlY2F0ZWRcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1dJTkcpXG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XKVxuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElEREVOKVxuICAgIH1cblxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1dJTkcpXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZSwgdGhpcy5fZWxlbWVudCwgdGhpcy5fY29uZmlnLmFuaW1hdGlvbilcbiAgfVxuXG4gIGRpc3Bvc2UoKSB7XG4gICAgdGhpcy5fY2xlYXJUaW1lb3V0KClcblxuICAgIGlmICh0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NIT1cpKSB7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XKVxuICAgIH1cblxuICAgIHN1cGVyLmRpc3Bvc2UoKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuXG4gIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgY29uZmlnID0ge1xuICAgICAgLi4uRGVmYXVsdCxcbiAgICAgIC4uLk1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQpLFxuICAgICAgLi4uKHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnICYmIGNvbmZpZyA/IGNvbmZpZyA6IHt9KVxuICAgIH1cblxuICAgIHR5cGVDaGVja0NvbmZpZyhOQU1FLCBjb25maWcsIHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFR5cGUpXG5cbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICBfbWF5YmVTY2hlZHVsZUhpZGUoKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcuYXV0b2hpZGUpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0aGlzLl9oYXNNb3VzZUludGVyYWN0aW9uIHx8IHRoaXMuX2hhc0tleWJvYXJkSW50ZXJhY3Rpb24pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaGlkZSgpXG4gICAgfSwgdGhpcy5fY29uZmlnLmRlbGF5KVxuICB9XG5cbiAgX29uSW50ZXJhY3Rpb24oZXZlbnQsIGlzSW50ZXJhY3RpbmcpIHtcbiAgICBzd2l0Y2ggKGV2ZW50LnR5cGUpIHtcbiAgICAgIGNhc2UgJ21vdXNlb3Zlcic6XG4gICAgICBjYXNlICdtb3VzZW91dCc6XG4gICAgICAgIHRoaXMuX2hhc01vdXNlSW50ZXJhY3Rpb24gPSBpc0ludGVyYWN0aW5nXG4gICAgICAgIGJyZWFrXG4gICAgICBjYXNlICdmb2N1c2luJzpcbiAgICAgIGNhc2UgJ2ZvY3Vzb3V0JzpcbiAgICAgICAgdGhpcy5faGFzS2V5Ym9hcmRJbnRlcmFjdGlvbiA9IGlzSW50ZXJhY3RpbmdcbiAgICAgICAgYnJlYWtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGJyZWFrXG4gICAgfVxuXG4gICAgaWYgKGlzSW50ZXJhY3RpbmcpIHtcbiAgICAgIHRoaXMuX2NsZWFyVGltZW91dCgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBuZXh0RWxlbWVudCA9IGV2ZW50LnJlbGF0ZWRUYXJnZXRcbiAgICBpZiAodGhpcy5fZWxlbWVudCA9PT0gbmV4dEVsZW1lbnQgfHwgdGhpcy5fZWxlbWVudC5jb250YWlucyhuZXh0RWxlbWVudCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX21heWJlU2NoZWR1bGVIaWRlKClcbiAgfVxuXG4gIF9zZXRMaXN0ZW5lcnMoKSB7XG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFT1ZFUiwgZXZlbnQgPT4gdGhpcy5fb25JbnRlcmFjdGlvbihldmVudCwgdHJ1ZSkpXG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFT1VULCBldmVudCA9PiB0aGlzLl9vbkludGVyYWN0aW9uKGV2ZW50LCBmYWxzZSkpXG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0ZPQ1VTSU4sIGV2ZW50ID0+IHRoaXMuX29uSW50ZXJhY3Rpb24oZXZlbnQsIHRydWUpKVxuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9GT0NVU09VVCwgZXZlbnQgPT4gdGhpcy5fb25JbnRlcmFjdGlvbihldmVudCwgZmFsc2UpKVxuICB9XG5cbiAgX2NsZWFyVGltZW91dCgpIHtcbiAgICBjbGVhclRpbWVvdXQodGhpcy5fdGltZW91dClcbiAgICB0aGlzLl90aW1lb3V0ID0gbnVsbFxuICB9XG5cbiAgLy8gU3RhdGljXG5cbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBUb2FzdC5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMsIGNvbmZpZylcblxuICAgICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIGlmICh0eXBlb2YgZGF0YVtjb25maWddID09PSAndW5kZWZpbmVkJykge1xuICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYClcbiAgICAgICAgfVxuXG4gICAgICAgIGRhdGFbY29uZmlnXSh0aGlzKVxuICAgICAgfVxuICAgIH0pXG4gIH1cbn1cblxuZW5hYmxlRGlzbWlzc1RyaWdnZXIoVG9hc3QpXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBqUXVlcnlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogYWRkIC5Ub2FzdCB0byBqUXVlcnkgb25seSBpZiBqUXVlcnkgaXMgcHJlc2VudFxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihUb2FzdClcblxuZXhwb3J0IGRlZmF1bHQgVG9hc3RcbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMS4wKTogaW5kZXgudW1kLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IEFsZXJ0IGZyb20gJy4vc3JjL2FsZXJ0J1xuaW1wb3J0IEJ1dHRvbiBmcm9tICcuL3NyYy9idXR0b24nXG5pbXBvcnQgQ2Fyb3VzZWwgZnJvbSAnLi9zcmMvY2Fyb3VzZWwnXG5pbXBvcnQgQ29sbGFwc2UgZnJvbSAnLi9zcmMvY29sbGFwc2UnXG5pbXBvcnQgRHJvcGRvd24gZnJvbSAnLi9zcmMvZHJvcGRvd24nXG5pbXBvcnQgTW9kYWwgZnJvbSAnLi9zcmMvbW9kYWwnXG5pbXBvcnQgT2ZmY2FudmFzIGZyb20gJy4vc3JjL29mZmNhbnZhcydcbmltcG9ydCBQb3BvdmVyIGZyb20gJy4vc3JjL3BvcG92ZXInXG5pbXBvcnQgU2Nyb2xsU3B5IGZyb20gJy4vc3JjL3Njcm9sbHNweSdcbmltcG9ydCBUYWIgZnJvbSAnLi9zcmMvdGFiJ1xuaW1wb3J0IFRvYXN0IGZyb20gJy4vc3JjL3RvYXN0J1xuaW1wb3J0IFRvb2x0aXAgZnJvbSAnLi9zcmMvdG9vbHRpcCdcblxuZXhwb3J0IGRlZmF1bHQge1xuICBBbGVydCxcbiAgQnV0dG9uLFxuICBDYXJvdXNlbCxcbiAgQ29sbGFwc2UsXG4gIERyb3Bkb3duLFxuICBNb2RhbCxcbiAgT2ZmY2FudmFzLFxuICBQb3BvdmVyLFxuICBTY3JvbGxTcHksXG4gIFRhYixcbiAgVG9hc3QsXG4gIFRvb2x0aXBcbn1cbiIsIiQoZnVuY3Rpb24gKCkge1xyXG4gICAgdG9nZ2xlQ29ubmVjdGlvblN0cmluZ0FuZFByZWZpeCgpO1xyXG5cclxuICAgIC8vIFNob3cgaGlkZSB0aGUgY29ubmVjdGlvbiBzdHJpbmcgd2hlbiBhIHByb3ZpZGVyIGlzIHNlbGVjdGVkXHJcbiAgICAkKFwiI0RhdGFiYXNlUHJvdmlkZXJcIikuY2hhbmdlKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB0b2dnbGVDb25uZWN0aW9uU3RyaW5nQW5kUHJlZml4KCk7XHJcbiAgICB9KTtcclxuXHJcbiAgICAvLyBSZWZyZXNoIHRoZSByZWNpcGUgZGVzY3JpcHRpb25cclxuICAgICQoXCIjcmVjaXBlcyBkaXYgYVwiKS5vbignY2xpY2snLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmVmcmVzaERlc2NyaXB0aW9uKCQodGhpcykpO1xyXG4gICAgfSk7XHJcbn0pO1xyXG5cclxuLy8gU2hvdyBvciBoaWRlIHRoZSBjb25uZWN0aW9uIHN0cmluZyBvciB0YWJsZSBwcmVmaXggc2VjdGlvbiB3aGVuIHRoZSBkYXRhYmFzZSBwcm92aWRlciBpcyBzZWxlY3RlZFxyXG5mdW5jdGlvbiB0b2dnbGVDb25uZWN0aW9uU3RyaW5nQW5kUHJlZml4KCkge1xyXG4gICAgJChcIiNEYXRhYmFzZVByb3ZpZGVyIG9wdGlvbjpzZWxlY3RlZFwiKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAkKHRoaXMpLmRhdGEoXCJjb25uZWN0aW9uLXN0cmluZ1wiKS50b0xvd2VyQ2FzZSgpID09PSBcInRydWVcIlxyXG4gICAgICAgICAgICA/ICQoXCIuY29ubmVjdGlvblN0cmluZ1wiKS5zaG93KClcclxuICAgICAgICAgICAgOiAkKFwiLmNvbm5lY3Rpb25TdHJpbmdcIikuaGlkZSgpO1xyXG5cclxuICAgICAgICAkKHRoaXMpLmRhdGEoXCJ0YWJsZS1wcmVmaXhcIikudG9Mb3dlckNhc2UoKSA9PT0gXCJ0cnVlXCJcclxuICAgICAgICAgICAgPyAkKFwiLnRhYmxlUHJlZml4XCIpLnNob3coKVxyXG4gICAgICAgICAgICA6ICQoXCIudGFibGVQcmVmaXhcIikuaGlkZSgpO1xyXG4gICAgICAgIFxyXG4gICAgICAgICQodGhpcykuZGF0YShcImNvbm5lY3Rpb24tc3RyaW5nXCIpLnRvTG93ZXJDYXNlKCkgPT09IFwidHJ1ZVwiXHJcbiAgICAgICAgICAgID8gJChcIi5wd2RcIikuYXR0cigncmVxdWlyZWQnLCAncmVxdWlyZWQnKVxyXG4gICAgICAgICAgICA6ICQoXCIucHdkXCIpLnJlbW92ZUF0dHIoJ3JlcXVpcmVkJyk7XHJcblxyXG4gICAgICAgICQoXCIjY29ubmVjdGlvblN0cmluZ0hpbnRcIikudGV4dCgkKHRoaXMpLmRhdGEoXCJjb25uZWN0aW9uLXN0cmluZy1zYW1wbGVcIikpO1xyXG4gICAgfSk7XHJcbn1cclxuXHJcbi8vIFNob3cgdGhlIHJlY2lwZSBkZXNjcmlwdGlvblxyXG5mdW5jdGlvbiByZWZyZXNoRGVzY3JpcHRpb24odGFyZ2V0KSB7XHJcbiAgICB2YXIgcmVjaXBlTmFtZSA9ICQodGFyZ2V0KS5kYXRhKFwicmVjaXBlLW5hbWVcIik7XHJcbiAgICB2YXIgcmVjaXBlRGlzcGxheU5hbWUgPSAkKHRhcmdldCkuZGF0YShcInJlY2lwZS1kaXNwbGF5LW5hbWVcIik7XHJcbiAgICB2YXIgcmVjaXBlRGVzY3JpcHRpb24gPSAkKHRhcmdldCkuZGF0YShcInJlY2lwZS1kZXNjcmlwdGlvblwiKTtcclxuICAgICQoXCIjcmVjaXBlQnV0dG9uXCIpLnRleHQocmVjaXBlRGlzcGxheU5hbWUpO1xyXG4gICAgJChcIiNSZWNpcGVOYW1lXCIpLnZhbChyZWNpcGVOYW1lKTtcclxuICAgICQoXCIjcmVjaXBlQnV0dG9uXCIpLmF0dHIoXCJ0aXRsZVwiLCByZWNpcGVEZXNjcmlwdGlvbik7XHJcbiAgICAkKFwiI3JlY2lwZUJ1dHRvblwiKS5mb2N1cygpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzZXRMb2NhbGl6YXRpb25VcmwoKSB7XHJcbiAgICB2YXIgY3VsdHVyZXNMaXN0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2N1bHR1cmVzTGlzdCcpO1xyXG4gICAgd2luZG93LmxvY2F0aW9uID0gY3VsdHVyZXNMaXN0Lm9wdGlvbnNbY3VsdHVyZXNMaXN0LnNlbGVjdGVkSW5kZXhdLmRhdGFzZXQudXJsO1xyXG59XHJcblxyXG5mdW5jdGlvbiB0b2dnbGVQYXNzd29yZFZpc2liaWxpdHkocGFzc3dvcmRDdGwsIHRvZ2dsZVBhc3N3b3JkQ3RsKVxyXG57XHJcbiAgICAvLyB0b2dnbGUgdGhlIHR5cGUgYXR0cmlidXRlXHJcbiAgICB0eXBlID0gcGFzc3dvcmRDdGwuZ2V0QXR0cmlidXRlKCd0eXBlJykgPT09ICdwYXNzd29yZCcgPyAndGV4dCcgOiAncGFzc3dvcmQnO1xyXG4gICAgcGFzc3dvcmRDdGwuc2V0QXR0cmlidXRlKCd0eXBlJywgdHlwZSk7XHJcblxyXG4gICAgLy8gdG9nZ2xlIHRoZSBleWUgc2xhc2ggaWNvblxyXG4gICAgaWNvbiA9IHRvZ2dsZVBhc3N3b3JkQ3RsLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoJ2ljb24nKVswXTtcclxuICAgIGlmKGljb24uZ2V0QXR0cmlidXRlKCdkYXRhLWljb24nKSl7IC8vIGlmIHRoZSBpY29uIGlzIHJlbmRlcmVkIGFzIGEgc3ZnXHJcbiAgICAgICAgdHlwZSA9PT0gJ3Bhc3N3b3JkJyA/IGljb24uc2V0QXR0cmlidXRlKCdkYXRhLWljb24nLCAnZXllJykgOiBpY29uLnNldEF0dHJpYnV0ZSgnZGF0YS1pY29uJywgJ2V5ZS1zbGFzaCcpO1xyXG4gICAgfVxyXG4gICAgZWxzZXsgLy8gaWYgdGhlIGljb24gaXMgc3RpbGwgYSA8aT4gZWxlbWVudFxyXG4gICAgICAgIHR5cGUgPT09ICdwYXNzd29yZCcgPyBpY29uLmNsYXNzTGlzdC5yZW1vdmUoJ2ZhLWV5ZS1zbGFzaCcpIDogaWNvbi5jbGFzc0xpc3QucmVtb3ZlKCdmYS1leWUnKTtcclxuICAgICAgICB0eXBlID09PSAncGFzc3dvcmQnID8gaWNvbi5jbGFzc0xpc3QuYWRkKCdmYS1leWUnKSA6IGljb24uY2xhc3NMaXN0LmFkZCgnZmEtZXllLXNsYXNoJyk7XHJcbiAgICB9XHJcbn1cclxuIiwiKGZ1bmN0aW9uICgkKSB7XHJcblxyXG4gICAgJC5mbi5zdHJlbmd0aCA9IGZ1bmN0aW9uIChvcHRpb25zKSB7XHJcblxyXG4gICAgICAgIHZhciBzZXR0aW5ncyA9ICQuZXh0ZW5kKHtcclxuICAgICAgICAgICAgbWluTGVuZ3RoOiA4LFxyXG4gICAgICAgICAgICB1cHBlckNhc2U6IGZhbHNlLFxyXG4gICAgICAgICAgICBsb3dlckNhc2U6IGZhbHNlLFxyXG4gICAgICAgICAgICBudW1iZXJzOiBmYWxzZSxcclxuICAgICAgICAgICAgc3BlY2lhbGNoYXJzOiBmYWxzZSxcclxuICAgICAgICAgICAgdGFyZ2V0OiAnJyxcclxuICAgICAgICAgICAgc3R5bGU6ICcnXHJcbiAgICAgICAgfSwgb3B0aW9ucyk7XHJcblxyXG5cclxuICAgICAgICB2YXIgY2FwaXRhbGxldHRlcnMgPSAwO1xyXG4gICAgICAgIHZhciBsb3dlcmxldHRlcnMgPSAwO1xyXG4gICAgICAgIHZhciBudW1iZXJzID0gMDtcclxuICAgICAgICB2YXIgc3BlY2lhbGNoYXJzID0gMDtcclxuXHJcbiAgICAgICAgdmFyIHVwcGVyQ2FzZSA9IG5ldyBSZWdFeHAoJ1tBLVpdJyk7XHJcbiAgICAgICAgdmFyIGxvd2VyQ2FzZSA9IG5ldyBSZWdFeHAoJ1thLXpdJyk7XHJcbiAgICAgICAgdmFyIG51bWJlciA9IG5ldyBSZWdFeHAoJ1swLTldJyk7XHJcbiAgICAgICAgdmFyIHNwZWNpYWxjaGFyID0gbmV3IFJlZ0V4cCgnW15BLVphLXowLTldJyk7XHJcblxyXG4gICAgICAgIHZhciB2YWxpZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICBjcmVhdGVQcm9ncmVzc0JhcigwLCAnJyk7XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGdldFBlcmNlbnRhZ2UoYSwgYikge1xyXG4gICAgICAgICAgICByZXR1cm4gKChiIC8gYSkgKiAxMDApLnRvRml4ZWQoMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBnZXRMZXZlbCh2YWx1ZSkge1xyXG5cclxuICAgICAgICAgICAgaWYgKHZhbHVlID49IDEwMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiYmctc3VjY2Vzc1wiO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodmFsdWUgPj0gNTApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBcImJnLXdhcm5pbmdcIjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHZhbHVlID09IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnJzsgLy8gZ3JheWVkXHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBcImJnLWRhbmdlclwiO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgZnVuY3Rpb24gY2hlY2tTdHJlbmd0aCh2YWx1ZSkge1xyXG5cclxuICAgICAgICAgICAgbWluTGVuZ3RoID0gdmFsdWUubGVuZ3RoID49IHNldHRpbmdzLm1pbkxlbmd0aCA/IDEgOiAwO1xyXG4gICAgICAgICAgICBjYXBpdGFsbGV0dGVycyA9ICFzZXR0aW5ncy51cHBlckNhc2UgfHwgdmFsdWUubWF0Y2godXBwZXJDYXNlKSA/IDEgOiAwO1xyXG4gICAgICAgICAgICBsb3dlcmxldHRlcnMgPSAhc2V0dGluZ3MubG93ZXJDYXNlIHx8IHZhbHVlLm1hdGNoKGxvd2VyQ2FzZSkgPyAxIDogMDtcclxuICAgICAgICAgICAgbnVtYmVycyA9ICFzZXR0aW5ncy5udW1iZXJzIHx8IHZhbHVlLm1hdGNoKG51bWJlcikgPyAxIDogMDtcclxuICAgICAgICAgICAgc3BlY2lhbGNoYXJzID0gIXNldHRpbmdzLnNwZWNpYWxjaGFycyB8fCB2YWx1ZS5tYXRjaChzcGVjaWFsY2hhcikgPyAxIDogMDtcclxuXHJcbiAgICAgICAgICAgIHZhciB0b3RhbCA9IG1pbkxlbmd0aCArIGNhcGl0YWxsZXR0ZXJzICsgbG93ZXJsZXR0ZXJzICsgbnVtYmVycyArIHNwZWNpYWxjaGFycztcclxuICAgICAgICAgICAgdmFyIHBlcmNlbnRhZ2UgPSBnZXRQZXJjZW50YWdlKDUsIHRvdGFsKTtcclxuXHJcbiAgICAgICAgICAgIHZhbGlkID0gcGVyY2VudGFnZSA+PSAxMDA7XHJcblxyXG4gICAgICAgICAgICBjcmVhdGVQcm9ncmVzc0JhcihwZXJjZW50YWdlLCBnZXRMZXZlbChwZXJjZW50YWdlKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBjcmVhdGVQcm9ncmVzc0JhcihwZXJjZW50YWdlLCBsZXZlbCkge1xyXG4gICAgICAgICAgICB2YXIgZWwgPSAkKCc8ZGl2IGNsYXNzPVwicHJvZ3Jlc3NcIiB2YWx1ZT1cIicgKyBwZXJjZW50YWdlICsgJ1wiIHN0eWxlPVwiJyArIHNldHRpbmdzLnN0eWxlICsgJ1wiIG1heD1cIjEwMFwiIGFyaWEtZGVzY3JpYmVkYnk9XCJcIj48ZGl2IGNsYXNzPVwicHJvZ3Jlc3MtYmFyICcgKyBsZXZlbCArICdcIiByb2xlPVwicHJvZ3Jlc3MtYmFyXCIgc3R5bGU9XCJ3aWR0aDogJyArIHBlcmNlbnRhZ2UgKyAnJTtcIj48L2Rpdj48L2Rpdj4nKTtcclxuICAgICAgICAgICAgdmFyIHRhcmdldCA9ICQoc2V0dGluZ3MudGFyZ2V0KTtcclxuICAgICAgICAgICAgdGFyZ2V0LmVtcHR5KCk7XHJcbiAgICAgICAgICAgIHRhcmdldC5hcHBlbmQoZWwpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5iaW5kKCdrZXl1cCBrZXlkb3duJywgZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGNoZWNrU3RyZW5ndGgoJCh0aGlzKS52YWwoKSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5iaW5kKCdkcm9wJywgZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgIGNoZWNrU3RyZW5ndGgoZXZlbnQub3JpZ2luYWxFdmVudC5kYXRhVHJhbnNmZXIuZ2V0RGF0YShcInRleHRcIikpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnBhcmVudHMoJ2Zvcm0nKS5vbignc3VibWl0JywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBpZiAoIXZhbGlkKSB7XHJcbiAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9O1xyXG59KGpRdWVyeSkpO1xyXG4gICAgIl19 +//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5qcyIsIi4uLy4uL2pzL3NyYy91dGlsL2luZGV4LmpzIiwiLi4vLi4vanMvc3JjL2RvbS9ldmVudC1oYW5kbGVyLmpzIiwiLi4vLi4vanMvc3JjL2RvbS9kYXRhLmpzIiwiLi4vLi4vanMvc3JjL2Jhc2UtY29tcG9uZW50LmpzIiwiLi4vLi4vanMvc3JjL3V0aWwvY29tcG9uZW50LWZ1bmN0aW9ucy5qcyIsIi4uLy4uL2pzL3NyYy9hbGVydC5qcyIsIi4uLy4uL2pzL3NyYy9idXR0b24uanMiLCIuLi8uLi9qcy9zcmMvZG9tL21hbmlwdWxhdG9yLmpzIiwiLi4vLi4vanMvc3JjL2RvbS9zZWxlY3Rvci1lbmdpbmUuanMiLCIuLi8uLi9qcy9zcmMvY2Fyb3VzZWwuanMiLCIuLi8uLi9qcy9zcmMvY29sbGFwc2UuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2VudW1zLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Tm9kZU5hbWUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRXaW5kb3cuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvYXBwbHlTdHlsZXMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvY29udGFpbnMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvaXNUYWJsZUVsZW1lbnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRQYXJlbnROb2RlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL21hdGguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL3dpdGhpbi5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZ2V0RnJlc2hTaWRlT2JqZWN0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9tZXJnZVBhZGRpbmdPYmplY3QuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2V4cGFuZFRvSGFzaE1hcC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2Fycm93LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRWYXJpYXRpb24uanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvZXZlbnRMaXN0ZW5lcnMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvd1Njcm9sbC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFdpbmRvd1Njcm9sbEJhclguanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXRWaWV3cG9ydFJlY3QuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXREb2N1bWVudFJlY3QuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9pc1Njcm9sbFBhcmVudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2dldFNjcm9sbFBhcmVudC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvZG9tLXV0aWxzL2xpc3RTY3JvbGxQYXJlbnRzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9yZWN0VG9DbGllbnRSZWN0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q2xpcHBpbmdSZWN0LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9jb21wdXRlT2Zmc2V0cy5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2NvbXB1dGVBdXRvUGxhY2VtZW50LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvZmxpcC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvbW9kaWZpZXJzL2hpZGUuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9vZmZzZXQuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL21vZGlmaWVycy9wb3BwZXJPZmZzZXRzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9nZXRBbHRBeGlzLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9tb2RpZmllcnMvcHJldmVudE92ZXJmbG93LmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0SFRNTEVsZW1lbnRTY3JvbGwuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL2RvbS11dGlscy9nZXROb2RlU2Nyb2xsLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9kb20tdXRpbHMvZ2V0Q29tcG9zaXRlUmVjdC5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvdXRpbHMvb3JkZXJNb2RpZmllcnMuanMiLCIuLi8uLi9ub2RlX21vZHVsZXMvQHBvcHBlcmpzL2NvcmUvbGliL3V0aWxzL2RlYm91bmNlLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi91dGlscy9tZXJnZUJ5TmFtZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvY3JlYXRlUG9wcGVyLmpzIiwiLi4vLi4vbm9kZV9tb2R1bGVzL0Bwb3BwZXJqcy9jb3JlL2xpYi9wb3BwZXItbGl0ZS5qcyIsIi4uLy4uL25vZGVfbW9kdWxlcy9AcG9wcGVyanMvY29yZS9saWIvcG9wcGVyLmpzIiwiLi4vLi4vanMvc3JjL2Ryb3Bkb3duLmpzIiwiLi4vLi4vanMvc3JjL3V0aWwvc2Nyb2xsYmFyLmpzIiwiLi4vLi4vanMvc3JjL3V0aWwvYmFja2Ryb3AuanMiLCIuLi8uLi9qcy9zcmMvdXRpbC9mb2N1c3RyYXAuanMiLCIuLi8uLi9qcy9zcmMvbW9kYWwuanMiLCIuLi8uLi9qcy9zcmMvb2ZmY2FudmFzLmpzIiwiLi4vLi4vanMvc3JjL3V0aWwvc2FuaXRpemVyLmpzIiwiLi4vLi4vanMvc3JjL3Rvb2x0aXAuanMiLCIuLi8uLi9qcy9zcmMvcG9wb3Zlci5qcyIsIi4uLy4uL2pzL3NyYy9zY3JvbGxzcHkuanMiLCIuLi8uLi9qcy9zcmMvdGFiLmpzIiwiLi4vLi4vanMvc3JjL3RvYXN0LmpzIiwiLi4vLi4vanMvaW5kZXgudW1kLmpzIiwic2V0dXAuanMiLCJzdHJlbmd0aC5qcyJdLCJuYW1lcyI6WyJnbG9iYWwiLCJmYWN0b3J5IiwibW9kdWxlIiwiZXhwb3J0cyIsImRvY3VtZW50IiwidyIsIkVycm9yIiwid2luZG93Iiwibm9HbG9iYWwiLCJhcnIiLCJnZXRQcm90byIsIk9iamVjdCIsImdldFByb3RvdHlwZU9mIiwic2xpY2UiLCJmbGF0IiwiYXJyYXkiLCJjYWxsIiwiY29uY2F0IiwiYXBwbHkiLCJwdXNoIiwiaW5kZXhPZiIsImNsYXNzMnR5cGUiLCJ0b1N0cmluZyIsImhhc093biIsImhhc093blByb3BlcnR5IiwiZm5Ub1N0cmluZyIsIk9iamVjdEZ1bmN0aW9uU3RyaW5nIiwic3VwcG9ydCIsImlzRnVuY3Rpb24iLCJvYmoiLCJub2RlVHlwZSIsIml0ZW0iLCJpc1dpbmRvdyIsInByZXNlcnZlZFNjcmlwdEF0dHJpYnV0ZXMiLCJ0eXBlIiwic3JjIiwibm9uY2UiLCJub01vZHVsZSIsIkRPTUV2YWwiLCJjb2RlIiwibm9kZSIsImRvYyIsImkiLCJ2YWwiLCJzY3JpcHQiLCJjcmVhdGVFbGVtZW50IiwidGV4dCIsImdldEF0dHJpYnV0ZSIsInNldEF0dHJpYnV0ZSIsImhlYWQiLCJhcHBlbmRDaGlsZCIsInBhcmVudE5vZGUiLCJyZW1vdmVDaGlsZCIsInRvVHlwZSIsInZlcnNpb24iLCJqUXVlcnkiLCJzZWxlY3RvciIsImNvbnRleHQiLCJmbiIsImluaXQiLCJwcm90b3R5cGUiLCJqcXVlcnkiLCJjb25zdHJ1Y3RvciIsImxlbmd0aCIsInRvQXJyYXkiLCJnZXQiLCJudW0iLCJwdXNoU3RhY2siLCJlbGVtcyIsInJldCIsIm1lcmdlIiwicHJldk9iamVjdCIsImVhY2giLCJjYWxsYmFjayIsIm1hcCIsImVsZW0iLCJhcmd1bWVudHMiLCJmaXJzdCIsImVxIiwibGFzdCIsImV2ZW4iLCJncmVwIiwiX2VsZW0iLCJvZGQiLCJsZW4iLCJqIiwiZW5kIiwic29ydCIsInNwbGljZSIsImV4dGVuZCIsIm9wdGlvbnMiLCJuYW1lIiwiY29weSIsImNvcHlJc0FycmF5IiwiY2xvbmUiLCJ0YXJnZXQiLCJkZWVwIiwiaXNQbGFpbk9iamVjdCIsIkFycmF5IiwiaXNBcnJheSIsInVuZGVmaW5lZCIsImV4cGFuZG8iLCJNYXRoIiwicmFuZG9tIiwicmVwbGFjZSIsImlzUmVhZHkiLCJlcnJvciIsIm1zZyIsIm5vb3AiLCJwcm90byIsIkN0b3IiLCJpc0VtcHR5T2JqZWN0IiwiZ2xvYmFsRXZhbCIsImlzQXJyYXlMaWtlIiwibWFrZUFycmF5IiwicmVzdWx0cyIsImluQXJyYXkiLCJzZWNvbmQiLCJpbnZlcnQiLCJjYWxsYmFja0ludmVyc2UiLCJtYXRjaGVzIiwiY2FsbGJhY2tFeHBlY3QiLCJhcmciLCJ2YWx1ZSIsImd1aWQiLCJTeW1ib2wiLCJpdGVyYXRvciIsInNwbGl0IiwiX2kiLCJ0b0xvd2VyQ2FzZSIsIlNpenpsZSIsIkV4cHIiLCJnZXRUZXh0IiwiaXNYTUwiLCJ0b2tlbml6ZSIsImNvbXBpbGUiLCJzZWxlY3QiLCJvdXRlcm1vc3RDb250ZXh0Iiwic29ydElucHV0IiwiaGFzRHVwbGljYXRlIiwic2V0RG9jdW1lbnQiLCJkb2NFbGVtIiwiZG9jdW1lbnRJc0hUTUwiLCJyYnVnZ3lRU0EiLCJyYnVnZ3lNYXRjaGVzIiwiY29udGFpbnMiLCJEYXRlIiwicHJlZmVycmVkRG9jIiwiZGlycnVucyIsImRvbmUiLCJjbGFzc0NhY2hlIiwiY3JlYXRlQ2FjaGUiLCJ0b2tlbkNhY2hlIiwiY29tcGlsZXJDYWNoZSIsIm5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUiLCJzb3J0T3JkZXIiLCJhIiwiYiIsInBvcCIsInB1c2hOYXRpdmUiLCJsaXN0IiwiYm9vbGVhbnMiLCJ3aGl0ZXNwYWNlIiwiaWRlbnRpZmllciIsImF0dHJpYnV0ZXMiLCJwc2V1ZG9zIiwicndoaXRlc3BhY2UiLCJSZWdFeHAiLCJydHJpbSIsInJjb21tYSIsInJjb21iaW5hdG9ycyIsInJkZXNjZW5kIiwicnBzZXVkbyIsInJpZGVudGlmaWVyIiwibWF0Y2hFeHByIiwicmh0bWwiLCJyaW5wdXRzIiwicmhlYWRlciIsInJuYXRpdmUiLCJycXVpY2tFeHByIiwicnNpYmxpbmciLCJydW5lc2NhcGUiLCJmdW5lc2NhcGUiLCJlc2NhcGUiLCJub25IZXgiLCJoaWdoIiwiU3RyaW5nIiwiZnJvbUNoYXJDb2RlIiwicmNzc2VzY2FwZSIsImZjc3Nlc2NhcGUiLCJjaCIsImFzQ29kZVBvaW50IiwiY2hhckNvZGVBdCIsInVubG9hZEhhbmRsZXIiLCJpbkRpc2FibGVkRmllbGRzZXQiLCJhZGRDb21iaW5hdG9yIiwiZGlzYWJsZWQiLCJub2RlTmFtZSIsImRpciIsIm5leHQiLCJjaGlsZE5vZGVzIiwiZSIsImVscyIsInNlZWQiLCJtIiwibmlkIiwibWF0Y2giLCJncm91cHMiLCJuZXdTZWxlY3RvciIsIm5ld0NvbnRleHQiLCJvd25lckRvY3VtZW50IiwiZXhlYyIsImdldEVsZW1lbnRCeUlkIiwiaWQiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJxc2EiLCJ0ZXN0IiwidGVzdENvbnRleHQiLCJzY29wZSIsInRvU2VsZWN0b3IiLCJqb2luIiwicXVlcnlTZWxlY3RvckFsbCIsInFzYUVycm9yIiwicmVtb3ZlQXR0cmlidXRlIiwia2V5cyIsImNhY2hlIiwia2V5IiwiY2FjaGVMZW5ndGgiLCJzaGlmdCIsIm1hcmtGdW5jdGlvbiIsImFzc2VydCIsImVsIiwiYWRkSGFuZGxlIiwiYXR0cnMiLCJoYW5kbGVyIiwiYXR0ckhhbmRsZSIsInNpYmxpbmdDaGVjayIsImN1ciIsImRpZmYiLCJzb3VyY2VJbmRleCIsIm5leHRTaWJsaW5nIiwiY3JlYXRlSW5wdXRQc2V1ZG8iLCJjcmVhdGVCdXR0b25Qc2V1ZG8iLCJjcmVhdGVEaXNhYmxlZFBzZXVkbyIsImlzRGlzYWJsZWQiLCJjcmVhdGVQb3NpdGlvbmFsUHNldWRvIiwiYXJndW1lbnQiLCJtYXRjaEluZGV4ZXMiLCJuYW1lc3BhY2UiLCJuYW1lc3BhY2VVUkkiLCJkb2N1bWVudEVsZW1lbnQiLCJoYXNDb21wYXJlIiwic3ViV2luZG93IiwiZGVmYXVsdFZpZXciLCJ0b3AiLCJhZGRFdmVudExpc3RlbmVyIiwiYXR0YWNoRXZlbnQiLCJjbGFzc05hbWUiLCJjcmVhdGVDb21tZW50IiwiZ2V0QnlJZCIsImdldEVsZW1lbnRzQnlOYW1lIiwiZmlsdGVyIiwiYXR0cklkIiwiZmluZCIsImdldEF0dHJpYnV0ZU5vZGUiLCJ0YWciLCJ0bXAiLCJpbnB1dCIsImlubmVySFRNTCIsIm1hdGNoZXNTZWxlY3RvciIsIndlYmtpdE1hdGNoZXNTZWxlY3RvciIsIm1vek1hdGNoZXNTZWxlY3RvciIsIm9NYXRjaGVzU2VsZWN0b3IiLCJtc01hdGNoZXNTZWxlY3RvciIsImRpc2Nvbm5lY3RlZE1hdGNoIiwiY29tcGFyZURvY3VtZW50UG9zaXRpb24iLCJhZG93biIsImJ1cCIsImNvbXBhcmUiLCJzb3J0RGV0YWNoZWQiLCJhdXAiLCJhcCIsImJwIiwidW5zaGlmdCIsImV4cHIiLCJlbGVtZW50cyIsImF0dHIiLCJzcGVjaWZpZWQiLCJzZWwiLCJ1bmlxdWVTb3J0IiwiZHVwbGljYXRlcyIsImRldGVjdER1cGxpY2F0ZXMiLCJzb3J0U3RhYmxlIiwidGV4dENvbnRlbnQiLCJmaXJzdENoaWxkIiwibm9kZVZhbHVlIiwic2VsZWN0b3JzIiwiY3JlYXRlUHNldWRvIiwicmVsYXRpdmUiLCJwcmVGaWx0ZXIiLCJleGNlc3MiLCJ1bnF1b3RlZCIsIm5vZGVOYW1lU2VsZWN0b3IiLCJwYXR0ZXJuIiwib3BlcmF0b3IiLCJjaGVjayIsInJlc3VsdCIsIndoYXQiLCJfYXJndW1lbnQiLCJzaW1wbGUiLCJmb3J3YXJkIiwib2ZUeXBlIiwiX2NvbnRleHQiLCJ4bWwiLCJ1bmlxdWVDYWNoZSIsIm91dGVyQ2FjaGUiLCJub2RlSW5kZXgiLCJzdGFydCIsInBhcmVudCIsInVzZUNhY2hlIiwibGFzdENoaWxkIiwidW5pcXVlSUQiLCJwc2V1ZG8iLCJhcmdzIiwic2V0RmlsdGVycyIsImlkeCIsIm1hdGNoZWQiLCJtYXRjaGVyIiwidW5tYXRjaGVkIiwibGFuZyIsImVsZW1MYW5nIiwiaGFzaCIsImxvY2F0aW9uIiwiYWN0aXZlRWxlbWVudCIsImhhc0ZvY3VzIiwiaHJlZiIsInRhYkluZGV4IiwiY2hlY2tlZCIsInNlbGVjdGVkIiwic2VsZWN0ZWRJbmRleCIsIl9tYXRjaEluZGV4ZXMiLCJyYWRpbyIsImNoZWNrYm94IiwiZmlsZSIsInBhc3N3b3JkIiwiaW1hZ2UiLCJzdWJtaXQiLCJyZXNldCIsImZpbHRlcnMiLCJwYXJzZU9ubHkiLCJ0b2tlbnMiLCJzb0ZhciIsInByZUZpbHRlcnMiLCJjYWNoZWQiLCJjb21iaW5hdG9yIiwiYmFzZSIsInNraXAiLCJjaGVja05vbkVsZW1lbnRzIiwiZG9uZU5hbWUiLCJvbGRDYWNoZSIsIm5ld0NhY2hlIiwiZWxlbWVudE1hdGNoZXIiLCJtYXRjaGVycyIsIm11bHRpcGxlQ29udGV4dHMiLCJjb250ZXh0cyIsImNvbmRlbnNlIiwibmV3VW5tYXRjaGVkIiwibWFwcGVkIiwic2V0TWF0Y2hlciIsInBvc3RGaWx0ZXIiLCJwb3N0RmluZGVyIiwicG9zdFNlbGVjdG9yIiwidGVtcCIsInByZU1hcCIsInBvc3RNYXAiLCJwcmVleGlzdGluZyIsIm1hdGNoZXJJbiIsIm1hdGNoZXJPdXQiLCJtYXRjaGVyRnJvbVRva2VucyIsImNoZWNrQ29udGV4dCIsImxlYWRpbmdSZWxhdGl2ZSIsImltcGxpY2l0UmVsYXRpdmUiLCJtYXRjaENvbnRleHQiLCJtYXRjaEFueUNvbnRleHQiLCJtYXRjaGVyRnJvbUdyb3VwTWF0Y2hlcnMiLCJlbGVtZW50TWF0Y2hlcnMiLCJzZXRNYXRjaGVycyIsImJ5U2V0IiwiYnlFbGVtZW50Iiwic3VwZXJNYXRjaGVyIiwib3V0ZXJtb3N0IiwibWF0Y2hlZENvdW50Iiwic2V0TWF0Y2hlZCIsImNvbnRleHRCYWNrdXAiLCJkaXJydW5zVW5pcXVlIiwidG9rZW4iLCJjb21waWxlZCIsIl9uYW1lIiwiZGVmYXVsdFZhbHVlIiwidW5pcXVlIiwiaXNYTUxEb2MiLCJlc2NhcGVTZWxlY3RvciIsInVudGlsIiwidHJ1bmNhdGUiLCJpcyIsInNpYmxpbmdzIiwibiIsInJuZWVkc0NvbnRleHQiLCJuZWVkc0NvbnRleHQiLCJyc2luZ2xlVGFnIiwid2lubm93IiwicXVhbGlmaWVyIiwibm90Iiwic2VsZiIsInJvb3RqUXVlcnkiLCJyb290IiwicGFyc2VIVE1MIiwicmVhZHkiLCJycGFyZW50c3ByZXYiLCJndWFyYW50ZWVkVW5pcXVlIiwiY2hpbGRyZW4iLCJjb250ZW50cyIsInByZXYiLCJoYXMiLCJ0YXJnZXRzIiwibCIsImNsb3Nlc3QiLCJpbmRleCIsInByZXZBbGwiLCJhZGQiLCJhZGRCYWNrIiwic2libGluZyIsInBhcmVudHMiLCJwYXJlbnRzVW50aWwiLCJuZXh0QWxsIiwibmV4dFVudGlsIiwicHJldlVudGlsIiwiY29udGVudERvY3VtZW50IiwiY29udGVudCIsInJldmVyc2UiLCJybm90aHRtbHdoaXRlIiwiY3JlYXRlT3B0aW9ucyIsIm9iamVjdCIsIl8iLCJmbGFnIiwiQ2FsbGJhY2tzIiwiZmlyaW5nIiwibWVtb3J5IiwiZmlyZWQiLCJsb2NrZWQiLCJxdWV1ZSIsImZpcmluZ0luZGV4IiwiZmlyZSIsIm9uY2UiLCJzdG9wT25GYWxzZSIsInJlbW92ZSIsImVtcHR5IiwiZGlzYWJsZSIsImxvY2siLCJmaXJlV2l0aCIsIklkZW50aXR5IiwidiIsIlRocm93ZXIiLCJleCIsImFkb3B0VmFsdWUiLCJyZXNvbHZlIiwicmVqZWN0Iiwibm9WYWx1ZSIsIm1ldGhvZCIsInByb21pc2UiLCJmYWlsIiwidGhlbiIsIkRlZmVycmVkIiwiZnVuYyIsInR1cGxlcyIsInN0YXRlIiwiYWx3YXlzIiwiZGVmZXJyZWQiLCJwaXBlIiwiZm5zIiwibmV3RGVmZXIiLCJ0dXBsZSIsInJldHVybmVkIiwicHJvZ3Jlc3MiLCJub3RpZnkiLCJvbkZ1bGZpbGxlZCIsIm9uUmVqZWN0ZWQiLCJvblByb2dyZXNzIiwibWF4RGVwdGgiLCJkZXB0aCIsInNwZWNpYWwiLCJ0aGF0IiwibWlnaHRUaHJvdyIsIlR5cGVFcnJvciIsIm5vdGlmeVdpdGgiLCJyZXNvbHZlV2l0aCIsInByb2Nlc3MiLCJleGNlcHRpb25Ib29rIiwic3RhY2tUcmFjZSIsInJlamVjdFdpdGgiLCJnZXRTdGFja0hvb2siLCJzZXRUaW1lb3V0Iiwic3RhdGVTdHJpbmciLCJ3aGVuIiwic2luZ2xlVmFsdWUiLCJyZW1haW5pbmciLCJyZXNvbHZlQ29udGV4dHMiLCJyZXNvbHZlVmFsdWVzIiwicHJpbWFyeSIsInVwZGF0ZUZ1bmMiLCJyZXJyb3JOYW1lcyIsInN0YWNrIiwiY29uc29sZSIsIndhcm4iLCJtZXNzYWdlIiwicmVhZHlFeGNlcHRpb24iLCJyZWFkeUxpc3QiLCJyZWFkeVdhaXQiLCJ3YWl0IiwiY29tcGxldGVkIiwicmVtb3ZlRXZlbnRMaXN0ZW5lciIsInJlYWR5U3RhdGUiLCJkb1Njcm9sbCIsImFjY2VzcyIsImNoYWluYWJsZSIsImVtcHR5R2V0IiwicmF3IiwiYnVsayIsIl9rZXkiLCJybXNQcmVmaXgiLCJyZGFzaEFscGhhIiwiZmNhbWVsQ2FzZSIsIl9hbGwiLCJsZXR0ZXIiLCJ0b1VwcGVyQ2FzZSIsImNhbWVsQ2FzZSIsInN0cmluZyIsImFjY2VwdERhdGEiLCJvd25lciIsIkRhdGEiLCJ1aWQiLCJkZWZpbmVQcm9wZXJ0eSIsImNvbmZpZ3VyYWJsZSIsInNldCIsImRhdGEiLCJwcm9wIiwiaGFzRGF0YSIsImRhdGFQcml2IiwiZGF0YVVzZXIiLCJyYnJhY2UiLCJybXVsdGlEYXNoIiwiZ2V0RGF0YSIsIkpTT04iLCJwYXJzZSIsImRhdGFBdHRyIiwicmVtb3ZlRGF0YSIsIl9kYXRhIiwiX3JlbW92ZURhdGEiLCJkZXF1ZXVlIiwic3RhcnRMZW5ndGgiLCJob29rcyIsIl9xdWV1ZUhvb2tzIiwic3RvcCIsInNldHRlciIsImNsZWFyUXVldWUiLCJjb3VudCIsImRlZmVyIiwicG51bSIsInNvdXJjZSIsInJjc3NOdW0iLCJjc3NFeHBhbmQiLCJpc0F0dGFjaGVkIiwiY29tcG9zZWQiLCJnZXRSb290Tm9kZSIsImlzSGlkZGVuV2l0aGluVHJlZSIsInN0eWxlIiwiZGlzcGxheSIsImNzcyIsImFkanVzdENTUyIsInZhbHVlUGFydHMiLCJ0d2VlbiIsImFkanVzdGVkIiwic2NhbGUiLCJtYXhJdGVyYXRpb25zIiwiY3VycmVudFZhbHVlIiwiaW5pdGlhbCIsInVuaXQiLCJjc3NOdW1iZXIiLCJpbml0aWFsSW5Vbml0IiwiZGVmYXVsdERpc3BsYXlNYXAiLCJnZXREZWZhdWx0RGlzcGxheSIsImJvZHkiLCJzaG93SGlkZSIsInNob3ciLCJ2YWx1ZXMiLCJoaWRlIiwidG9nZ2xlIiwicmNoZWNrYWJsZVR5cGUiLCJydGFnTmFtZSIsInJzY3JpcHRUeXBlIiwiZnJhZ21lbnQiLCJjcmVhdGVEb2N1bWVudEZyYWdtZW50IiwiZGl2IiwiY2hlY2tDbG9uZSIsImNsb25lTm9kZSIsIm5vQ2xvbmVDaGVja2VkIiwib3B0aW9uIiwid3JhcE1hcCIsInRoZWFkIiwiY29sIiwidHIiLCJ0ZCIsIl9kZWZhdWx0IiwidGJvZHkiLCJ0Zm9vdCIsImNvbGdyb3VwIiwiY2FwdGlvbiIsInRoIiwib3B0Z3JvdXAiLCJnZXRBbGwiLCJzZXRHbG9iYWxFdmFsIiwicmVmRWxlbWVudHMiLCJidWlsZEZyYWdtZW50Iiwic2NyaXB0cyIsInNlbGVjdGlvbiIsImlnbm9yZWQiLCJ3cmFwIiwiYXR0YWNoZWQiLCJub2RlcyIsImNyZWF0ZVRleHROb2RlIiwiaHRtbFByZWZpbHRlciIsInJ0eXBlbmFtZXNwYWNlIiwicmV0dXJuVHJ1ZSIsInJldHVybkZhbHNlIiwiZXhwZWN0U3luYyIsInNhZmVBY3RpdmVFbGVtZW50IiwiZXJyIiwib24iLCJ0eXBlcyIsIm9uZSIsIm9yaWdGbiIsImV2ZW50Iiwib2ZmIiwiaGFuZGxlT2JqSW4iLCJldmVudEhhbmRsZSIsImV2ZW50cyIsInQiLCJoYW5kbGVPYmoiLCJoYW5kbGVycyIsIm5hbWVzcGFjZXMiLCJvcmlnVHlwZSIsImVsZW1EYXRhIiwiY3JlYXRlIiwiaGFuZGxlIiwidHJpZ2dlcmVkIiwiZGlzcGF0Y2giLCJkZWxlZ2F0ZVR5cGUiLCJiaW5kVHlwZSIsImRlbGVnYXRlQ291bnQiLCJzZXR1cCIsIm1hcHBlZFR5cGVzIiwib3JpZ0NvdW50IiwidGVhcmRvd24iLCJyZW1vdmVFdmVudCIsIm5hdGl2ZUV2ZW50IiwiaGFuZGxlclF1ZXVlIiwiZml4IiwiZGVsZWdhdGVUYXJnZXQiLCJwcmVEaXNwYXRjaCIsImlzUHJvcGFnYXRpb25TdG9wcGVkIiwiY3VycmVudFRhcmdldCIsImlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkIiwicm5hbWVzcGFjZSIsInByZXZlbnREZWZhdWx0Iiwic3RvcFByb3BhZ2F0aW9uIiwicG9zdERpc3BhdGNoIiwibWF0Y2hlZEhhbmRsZXJzIiwibWF0Y2hlZFNlbGVjdG9ycyIsImJ1dHRvbiIsImFkZFByb3AiLCJob29rIiwiRXZlbnQiLCJlbnVtZXJhYmxlIiwib3JpZ2luYWxFdmVudCIsIndyaXRhYmxlIiwibG9hZCIsIm5vQnViYmxlIiwiY2xpY2siLCJsZXZlcmFnZU5hdGl2ZSIsInRyaWdnZXIiLCJiZWZvcmV1bmxvYWQiLCJyZXR1cm5WYWx1ZSIsIm5vdEFzeW5jIiwic2F2ZWQiLCJpc1RyaWdnZXIiLCJzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24iLCJwcm9wcyIsImlzRGVmYXVsdFByZXZlbnRlZCIsImRlZmF1bHRQcmV2ZW50ZWQiLCJyZWxhdGVkVGFyZ2V0IiwidGltZVN0YW1wIiwibm93IiwiaXNTaW11bGF0ZWQiLCJhbHRLZXkiLCJidWJibGVzIiwiY2FuY2VsYWJsZSIsImNoYW5nZWRUb3VjaGVzIiwiY3RybEtleSIsImRldGFpbCIsImV2ZW50UGhhc2UiLCJtZXRhS2V5IiwicGFnZVgiLCJwYWdlWSIsInNoaWZ0S2V5IiwidmlldyIsImNoYXJDb2RlIiwia2V5Q29kZSIsImJ1dHRvbnMiLCJjbGllbnRYIiwiY2xpZW50WSIsIm9mZnNldFgiLCJvZmZzZXRZIiwicG9pbnRlcklkIiwicG9pbnRlclR5cGUiLCJzY3JlZW5YIiwic2NyZWVuWSIsInRhcmdldFRvdWNoZXMiLCJ0b0VsZW1lbnQiLCJ0b3VjaGVzIiwid2hpY2giLCJmb2N1cyIsImJsdXIiLCJtb3VzZWVudGVyIiwibW91c2VsZWF2ZSIsInBvaW50ZXJlbnRlciIsInBvaW50ZXJsZWF2ZSIsIm9yaWciLCJyZWxhdGVkIiwicm5vSW5uZXJodG1sIiwicmNoZWNrZWQiLCJyY2xlYW5TY3JpcHQiLCJtYW5pcHVsYXRpb25UYXJnZXQiLCJkaXNhYmxlU2NyaXB0IiwicmVzdG9yZVNjcmlwdCIsImNsb25lQ29weUV2ZW50IiwiZGVzdCIsInBkYXRhT2xkIiwidWRhdGFPbGQiLCJ1ZGF0YUN1ciIsImZpeElucHV0IiwiZG9tTWFuaXAiLCJjb2xsZWN0aW9uIiwiaGFzU2NyaXB0cyIsImlOb0Nsb25lIiwidmFsdWVJc0Z1bmN0aW9uIiwiaHRtbCIsIl9ldmFsVXJsIiwia2VlcERhdGEiLCJjbGVhbkRhdGEiLCJkYXRhQW5kRXZlbnRzIiwiZGVlcERhdGFBbmRFdmVudHMiLCJzcmNFbGVtZW50cyIsImRlc3RFbGVtZW50cyIsImluUGFnZSIsImRldGFjaCIsImFwcGVuZCIsInByZXBlbmQiLCJpbnNlcnRCZWZvcmUiLCJiZWZvcmUiLCJhZnRlciIsInJlcGxhY2VXaXRoIiwicmVwbGFjZUNoaWxkIiwiYXBwZW5kVG8iLCJwcmVwZW5kVG8iLCJpbnNlcnRBZnRlciIsInJlcGxhY2VBbGwiLCJvcmlnaW5hbCIsImluc2VydCIsInJudW1ub25weCIsImdldFN0eWxlcyIsIm9wZW5lciIsImdldENvbXB1dGVkU3R5bGUiLCJzd2FwIiwib2xkIiwicmJveFN0eWxlIiwiY29tcHV0ZVN0eWxlVGVzdHMiLCJjb250YWluZXIiLCJjc3NUZXh0IiwiZGl2U3R5bGUiLCJwaXhlbFBvc2l0aW9uVmFsIiwicmVsaWFibGVNYXJnaW5MZWZ0VmFsIiwicm91bmRQaXhlbE1lYXN1cmVzIiwibWFyZ2luTGVmdCIsInJpZ2h0IiwicGl4ZWxCb3hTdHlsZXNWYWwiLCJib3hTaXppbmdSZWxpYWJsZVZhbCIsIndpZHRoIiwicG9zaXRpb24iLCJzY3JvbGxib3hTaXplVmFsIiwib2Zmc2V0V2lkdGgiLCJtZWFzdXJlIiwicm91bmQiLCJwYXJzZUZsb2F0IiwicmVsaWFibGVUckRpbWVuc2lvbnNWYWwiLCJiYWNrZ3JvdW5kQ2xpcCIsImNsZWFyQ2xvbmVTdHlsZSIsImJveFNpemluZ1JlbGlhYmxlIiwicGl4ZWxCb3hTdHlsZXMiLCJwaXhlbFBvc2l0aW9uIiwicmVsaWFibGVNYXJnaW5MZWZ0Iiwic2Nyb2xsYm94U2l6ZSIsInJlbGlhYmxlVHJEaW1lbnNpb25zIiwidGFibGUiLCJ0ckNoaWxkIiwidHJTdHlsZSIsImhlaWdodCIsInBhcnNlSW50IiwiYm9yZGVyVG9wV2lkdGgiLCJib3JkZXJCb3R0b21XaWR0aCIsIm9mZnNldEhlaWdodCIsImN1ckNTUyIsImNvbXB1dGVkIiwibWluV2lkdGgiLCJtYXhXaWR0aCIsImdldFByb3BlcnR5VmFsdWUiLCJhZGRHZXRIb29rSWYiLCJjb25kaXRpb25GbiIsImhvb2tGbiIsImNzc1ByZWZpeGVzIiwiZW1wdHlTdHlsZSIsInZlbmRvclByb3BzIiwidmVuZG9yUHJvcE5hbWUiLCJjYXBOYW1lIiwiZmluYWxQcm9wTmFtZSIsImZpbmFsIiwiY3NzUHJvcHMiLCJyZGlzcGxheXN3YXAiLCJyY3VzdG9tUHJvcCIsImNzc1Nob3ciLCJ2aXNpYmlsaXR5IiwiY3NzTm9ybWFsVHJhbnNmb3JtIiwibGV0dGVyU3BhY2luZyIsImZvbnRXZWlnaHQiLCJzZXRQb3NpdGl2ZU51bWJlciIsInN1YnRyYWN0IiwibWF4IiwiYm94TW9kZWxBZGp1c3RtZW50IiwiZGltZW5zaW9uIiwiYm94IiwiaXNCb3JkZXJCb3giLCJzdHlsZXMiLCJjb21wdXRlZFZhbCIsImV4dHJhIiwiZGVsdGEiLCJjZWlsIiwiZ2V0V2lkdGhPckhlaWdodCIsImJveFNpemluZ05lZWRlZCIsInZhbHVlSXNCb3JkZXJCb3giLCJvZmZzZXRQcm9wIiwiZ2V0Q2xpZW50UmVjdHMiLCJjc3NIb29rcyIsIm9wYWNpdHkiLCJvcmlnTmFtZSIsImlzQ3VzdG9tUHJvcCIsInNldFByb3BlcnR5IiwiaXNGaW5pdGUiLCJnZXRCb3VuZGluZ0NsaWVudFJlY3QiLCJzY3JvbGxib3hTaXplQnVnZ3kiLCJsZWZ0IiwibWFyZ2luIiwicGFkZGluZyIsImJvcmRlciIsInByZWZpeCIsInN1ZmZpeCIsImV4cGFuZCIsImV4cGFuZGVkIiwicGFydHMiLCJUd2VlbiIsImVhc2luZyIsInByb3BIb29rcyIsInJ1biIsInBlcmNlbnQiLCJlYXNlZCIsImR1cmF0aW9uIiwicG9zIiwic3RlcCIsImZ4Iiwic2Nyb2xsVG9wIiwic2Nyb2xsTGVmdCIsImxpbmVhciIsInAiLCJzd2luZyIsImNvcyIsIlBJIiwiZnhOb3ciLCJpblByb2dyZXNzIiwicmZ4dHlwZXMiLCJycnVuIiwic2NoZWR1bGUiLCJoaWRkZW4iLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLCJpbnRlcnZhbCIsInRpY2siLCJjcmVhdGVGeE5vdyIsImdlbkZ4IiwiaW5jbHVkZVdpZHRoIiwiY3JlYXRlVHdlZW4iLCJhbmltYXRpb24iLCJBbmltYXRpb24iLCJ0d2VlbmVycyIsImRlZmF1bHRQcmVmaWx0ZXIiLCJvcHRzIiwib2xkZmlyZSIsInByb3BUd2VlbiIsInJlc3RvcmVEaXNwbGF5IiwiaXNCb3giLCJhbmltIiwiZGF0YVNob3ciLCJ1bnF1ZXVlZCIsIm92ZXJmbG93Iiwib3ZlcmZsb3dYIiwib3ZlcmZsb3dZIiwicHJvcEZpbHRlciIsInNwZWNpYWxFYXNpbmciLCJwcm9wZXJ0aWVzIiwic3RvcHBlZCIsInByZWZpbHRlcnMiLCJjdXJyZW50VGltZSIsInN0YXJ0VGltZSIsInR3ZWVucyIsIm9yaWdpbmFsUHJvcGVydGllcyIsIm9yaWdpbmFsT3B0aW9ucyIsImdvdG9FbmQiLCJiaW5kIiwiY29tcGxldGUiLCJ0aW1lciIsInR3ZWVuZXIiLCJwcmVmaWx0ZXIiLCJzcGVlZCIsIm9wdCIsInNwZWVkcyIsImZhZGVUbyIsInRvIiwiYW5pbWF0ZSIsIm9wdGFsbCIsImRvQW5pbWF0aW9uIiwiZmluaXNoIiwic3RvcFF1ZXVlIiwidGltZXJzIiwiY3NzRm4iLCJzbGlkZURvd24iLCJzbGlkZVVwIiwic2xpZGVUb2dnbGUiLCJmYWRlSW4iLCJmYWRlT3V0IiwiZmFkZVRvZ2dsZSIsInNsb3ciLCJmYXN0IiwiZGVsYXkiLCJ0aW1lIiwidGltZW91dCIsImNsZWFyVGltZW91dCIsImNoZWNrT24iLCJvcHRTZWxlY3RlZCIsInJhZGlvVmFsdWUiLCJib29sSG9vayIsInJlbW92ZUF0dHIiLCJuVHlwZSIsImF0dHJIb29rcyIsImJvb2wiLCJhdHRyTmFtZXMiLCJnZXR0ZXIiLCJsb3dlcmNhc2VOYW1lIiwicmZvY3VzYWJsZSIsInJjbGlja2FibGUiLCJyZW1vdmVQcm9wIiwicHJvcEZpeCIsInRhYmluZGV4Iiwic3RyaXBBbmRDb2xsYXBzZSIsImdldENsYXNzIiwiY2xhc3Nlc1RvQXJyYXkiLCJhZGRDbGFzcyIsImNsYXNzZXMiLCJjdXJWYWx1ZSIsImNsYXp6IiwiZmluYWxWYWx1ZSIsInJlbW92ZUNsYXNzIiwidG9nZ2xlQ2xhc3MiLCJzdGF0ZVZhbCIsImlzVmFsaWRWYWx1ZSIsImNsYXNzTmFtZXMiLCJoYXNDbGFzcyIsInJyZXR1cm4iLCJ2YWxIb29rcyIsIm9wdGlvblNldCIsImZvY3VzaW4iLCJyZm9jdXNNb3JwaCIsInN0b3BQcm9wYWdhdGlvbkNhbGxiYWNrIiwib25seUhhbmRsZXJzIiwiYnViYmxlVHlwZSIsIm9udHlwZSIsImxhc3RFbGVtZW50IiwiZXZlbnRQYXRoIiwicGFyZW50V2luZG93Iiwic2ltdWxhdGUiLCJ0cmlnZ2VySGFuZGxlciIsImF0dGFjaGVzIiwicnF1ZXJ5IiwicGFyc2VYTUwiLCJwYXJzZXJFcnJvckVsZW0iLCJET01QYXJzZXIiLCJwYXJzZUZyb21TdHJpbmciLCJyYnJhY2tldCIsInJDUkxGIiwicnN1Ym1pdHRlclR5cGVzIiwicnN1Ym1pdHRhYmxlIiwiYnVpbGRQYXJhbXMiLCJ0cmFkaXRpb25hbCIsInBhcmFtIiwicyIsInZhbHVlT3JGdW5jdGlvbiIsImVuY29kZVVSSUNvbXBvbmVudCIsInNlcmlhbGl6ZSIsInNlcmlhbGl6ZUFycmF5IiwicjIwIiwicmhhc2giLCJyYW50aUNhY2hlIiwicmhlYWRlcnMiLCJybG9jYWxQcm90b2NvbCIsInJub0NvbnRlbnQiLCJycHJvdG9jb2wiLCJ0cmFuc3BvcnRzIiwiYWxsVHlwZXMiLCJvcmlnaW5BbmNob3IiLCJhZGRUb1ByZWZpbHRlcnNPclRyYW5zcG9ydHMiLCJzdHJ1Y3R1cmUiLCJkYXRhVHlwZUV4cHJlc3Npb24iLCJkYXRhVHlwZSIsImRhdGFUeXBlcyIsImluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzIiwianFYSFIiLCJpbnNwZWN0ZWQiLCJzZWVraW5nVHJhbnNwb3J0IiwiaW5zcGVjdCIsInByZWZpbHRlck9yRmFjdG9yeSIsImRhdGFUeXBlT3JUcmFuc3BvcnQiLCJhamF4RXh0ZW5kIiwiZmxhdE9wdGlvbnMiLCJhamF4U2V0dGluZ3MiLCJhamF4SGFuZGxlUmVzcG9uc2VzIiwicmVzcG9uc2VzIiwiY3QiLCJmaW5hbERhdGFUeXBlIiwiZmlyc3REYXRhVHlwZSIsIm1pbWVUeXBlIiwiZ2V0UmVzcG9uc2VIZWFkZXIiLCJjb252ZXJ0ZXJzIiwiYWpheENvbnZlcnQiLCJyZXNwb25zZSIsImlzU3VjY2VzcyIsImNvbnYyIiwiY3VycmVudCIsImNvbnYiLCJyZXNwb25zZUZpZWxkcyIsImRhdGFGaWx0ZXIiLCJhY3RpdmUiLCJsYXN0TW9kaWZpZWQiLCJldGFnIiwidXJsIiwiaXNMb2NhbCIsInByb3RvY29sIiwicHJvY2Vzc0RhdGEiLCJhc3luYyIsImNvbnRlbnRUeXBlIiwiYWNjZXB0cyIsImpzb24iLCJhamF4U2V0dXAiLCJzZXR0aW5ncyIsImFqYXhQcmVmaWx0ZXIiLCJhamF4VHJhbnNwb3J0IiwiYWpheCIsInRyYW5zcG9ydCIsImNhY2hlVVJMIiwicmVzcG9uc2VIZWFkZXJzU3RyaW5nIiwicmVzcG9uc2VIZWFkZXJzIiwidGltZW91dFRpbWVyIiwidXJsQW5jaG9yIiwiZmlyZUdsb2JhbHMiLCJ1bmNhY2hlZCIsImNhbGxiYWNrQ29udGV4dCIsImdsb2JhbEV2ZW50Q29udGV4dCIsImNvbXBsZXRlRGVmZXJyZWQiLCJzdGF0dXNDb2RlIiwicmVxdWVzdEhlYWRlcnMiLCJyZXF1ZXN0SGVhZGVyc05hbWVzIiwic3RyQWJvcnQiLCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiLCJzZXRSZXF1ZXN0SGVhZGVyIiwib3ZlcnJpZGVNaW1lVHlwZSIsInN0YXR1cyIsImFib3J0Iiwic3RhdHVzVGV4dCIsImZpbmFsVGV4dCIsImNyb3NzRG9tYWluIiwiaG9zdCIsImhhc0NvbnRlbnQiLCJpZk1vZGlmaWVkIiwiaGVhZGVycyIsImJlZm9yZVNlbmQiLCJzdWNjZXNzIiwic2VuZCIsIm5hdGl2ZVN0YXR1c1RleHQiLCJtb2RpZmllZCIsImdldEpTT04iLCJnZXRTY3JpcHQiLCJ3cmFwQWxsIiwiZmlyc3RFbGVtZW50Q2hpbGQiLCJ3cmFwSW5uZXIiLCJodG1sSXNGdW5jdGlvbiIsInVud3JhcCIsInZpc2libGUiLCJ4aHIiLCJYTUxIdHRwUmVxdWVzdCIsInhoclN1Y2Nlc3NTdGF0dXMiLCJ4aHJTdXBwb3J0ZWQiLCJjb3JzIiwiZXJyb3JDYWxsYmFjayIsIm9wZW4iLCJ1c2VybmFtZSIsInhockZpZWxkcyIsIm9ubG9hZCIsIm9uZXJyb3IiLCJvbmFib3J0Iiwib250aW1lb3V0Iiwib25yZWFkeXN0YXRlY2hhbmdlIiwicmVzcG9uc2VUeXBlIiwicmVzcG9uc2VUZXh0IiwiYmluYXJ5Iiwic2NyaXB0QXR0cnMiLCJjaGFyc2V0Iiwic2NyaXB0Q2hhcnNldCIsImV2dCIsIm9sZENhbGxiYWNrcyIsInJqc29ucCIsImpzb25wIiwianNvbnBDYWxsYmFjayIsIm9yaWdpbmFsU2V0dGluZ3MiLCJjYWxsYmFja05hbWUiLCJvdmVyd3JpdHRlbiIsInJlc3BvbnNlQ29udGFpbmVyIiwianNvblByb3AiLCJjcmVhdGVIVE1MRG9jdW1lbnQiLCJpbXBsZW1lbnRhdGlvbiIsImtlZXBTY3JpcHRzIiwicGFyc2VkIiwicGFyYW1zIiwiYW5pbWF0ZWQiLCJvZmZzZXQiLCJzZXRPZmZzZXQiLCJjdXJQb3NpdGlvbiIsImN1ckxlZnQiLCJjdXJDU1NUb3AiLCJjdXJUb3AiLCJjdXJPZmZzZXQiLCJjdXJDU1NMZWZ0IiwiY2FsY3VsYXRlUG9zaXRpb24iLCJjdXJFbGVtIiwidXNpbmciLCJyZWN0Iiwid2luIiwicGFnZVlPZmZzZXQiLCJwYWdlWE9mZnNldCIsIm9mZnNldFBhcmVudCIsInBhcmVudE9mZnNldCIsInNjcm9sbFRvIiwiSGVpZ2h0IiwiV2lkdGgiLCJkZWZhdWx0RXh0cmEiLCJmdW5jTmFtZSIsInVuYmluZCIsImRlbGVnYXRlIiwidW5kZWxlZ2F0ZSIsImhvdmVyIiwiZm5PdmVyIiwiZm5PdXQiLCJwcm94eSIsImhvbGRSZWFkeSIsImhvbGQiLCJwYXJzZUpTT04iLCJpc051bWVyaWMiLCJpc05hTiIsInRyaW0iLCJkZWZpbmUiLCJhbWQiLCJfalF1ZXJ5IiwiXyQiLCIkIiwibm9Db25mbGljdCIsIk1BWF9VSUQiLCJNSUxMSVNFQ09ORFNfTVVMVElQTElFUiIsIlRSQU5TSVRJT05fRU5EIiwiZ2V0VUlEIiwiZ2V0U2VsZWN0b3IiLCJlbGVtZW50IiwiaHJlZkF0dHIiLCJnZXRTZWxlY3RvckZyb21FbGVtZW50IiwiZ2V0RWxlbWVudEZyb21TZWxlY3RvciIsImdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50IiwidHJhbnNpdGlvbkRlbGF5IiwiZmxvYXRUcmFuc2l0aW9uRHVyYXRpb24iLCJOdW1iZXIiLCJmbG9hdFRyYW5zaXRpb25EZWxheSIsInRyYW5zaXRpb25EdXJhdGlvbiIsInRyaWdnZXJUcmFuc2l0aW9uRW5kIiwiaXNFbGVtZW50IiwiZ2V0RWxlbWVudCIsInR5cGVDaGVja0NvbmZpZyIsInByb3BlcnR5IiwiZXhwZWN0ZWRUeXBlcyIsImNvbmZpZ1R5cGVzIiwiY29uZmlnIiwidmFsdWVUeXBlIiwiY29tcG9uZW50TmFtZSIsImlzVmlzaWJsZSIsIk5vZGUiLCJmaW5kU2hhZG93Um9vdCIsInJlZmxvdyIsImdldGpRdWVyeSIsIkRPTUNvbnRlbnRMb2FkZWRDYWxsYmFja3MiLCJvbkRPTUNvbnRlbnRMb2FkZWQiLCJpc1JUTCIsImRlZmluZUpRdWVyeVBsdWdpbiIsInBsdWdpbiIsIkpRVUVSWV9OT19DT05GTElDVCIsImV4ZWN1dGUiLCJleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uIiwid2FpdEZvclRyYW5zaXRpb24iLCJkdXJhdGlvblBhZGRpbmciLCJlbXVsYXRlZER1cmF0aW9uIiwiY2FsbGVkIiwidHJhbnNpdGlvbkVsZW1lbnQiLCJnZXROZXh0QWN0aXZlRWxlbWVudCIsImxpc3RMZW5ndGgiLCJzaG91bGRHZXROZXh0IiwibmFtZXNwYWNlUmVnZXgiLCJzdHJpcE5hbWVSZWdleCIsInN0cmlwVWlkUmVnZXgiLCJldmVudFJlZ2lzdHJ5IiwidWlkRXZlbnQiLCJjdXN0b21FdmVudHMiLCJjdXN0b21FdmVudHNSZWdleCIsIm5hdGl2ZUV2ZW50cyIsImdldFVpZEV2ZW50IiwiRXZlbnRIYW5kbGVyIiwiZG9tRWxlbWVudHMiLCJkZWxlZ2F0aW9uU2VsZWN0b3IiLCJ1aWRFdmVudExpc3QiLCJkZWxlZ2F0aW9uIiwib3JpZ2luYWxIYW5kbGVyIiwidHlwZUV2ZW50IiwiZ2V0VHlwZUV2ZW50IiwiaXNOYXRpdmUiLCJkZWxlZ2F0aW9uRm4iLCJ3cmFwRm4iLCJub3JtYWxpemVQYXJhbXMiLCJnZXRFdmVudCIsInByZXZpb3VzRm4iLCJmaW5kSGFuZGxlciIsIm9yaWdpbmFsVHlwZUV2ZW50IiwiYm9vdHN0cmFwRGVsZWdhdGlvbkhhbmRsZXIiLCJib290c3RyYXBIYW5kbGVyIiwiQm9vbGVhbiIsInN0b3JlRWxlbWVudEV2ZW50IiwiaGFuZGxlcktleSIsInJlbW92ZUhhbmRsZXIiLCJhZGRIYW5kbGVyIiwiaW5OYW1lc3BhY2UiLCJpc05hbWVzcGFjZSIsImVsZW1lbnRFdmVudCIsInJlbW92ZU5hbWVzcGFjZWRIYW5kbGVycyIsImtleUhhbmRsZXJzIiwibmF0aXZlRGlzcGF0Y2giLCJqUXVlcnlFdmVudCIsImVsZW1lbnRNYXAiLCJpbnN0YW5jZU1hcCIsIlZFUlNJT04iLCJkaXNwb3NlIiwicHJvcGVydHlOYW1lIiwiX3F1ZXVlQ2FsbGJhY2siLCJpc0FuaW1hdGVkIiwiZ2V0SW5zdGFuY2UiLCJnZXRPckNyZWF0ZUluc3RhbmNlIiwiTkFNRSIsIkRBVEFfS0VZIiwiRVZFTlRfS0VZIiwiZW5hYmxlRGlzbWlzc1RyaWdnZXIiLCJjbGlja0V2ZW50IiwiY29tcG9uZW50IiwiaW5zdGFuY2UiLCJFVkVOVF9DTE9TRSIsIkVWRU5UX0NMT1NFRCIsIkNMQVNTX05BTUVfRkFERSIsIkNMQVNTX05BTUVfU0hPVyIsImNsb3NlIiwiY2xvc2VFdmVudCIsIl9kZXN0cm95RWxlbWVudCIsImpRdWVyeUludGVyZmFjZSIsIkFsZXJ0IiwiREFUQV9BUElfS0VZIiwiQ0xBU1NfTkFNRV9BQ1RJVkUiLCJTRUxFQ1RPUl9EQVRBX1RPR0dMRSIsIkVWRU5UX0NMSUNLX0RBVEFfQVBJIiwiQnV0dG9uIiwiY2hyIiwiTWFuaXB1bGF0b3IiLCJzZXREYXRhQXR0cmlidXRlIiwibm9ybWFsaXplRGF0YUtleSIsInJlbW92ZURhdGFBdHRyaWJ1dGUiLCJnZXREYXRhQXR0cmlidXRlcyIsInB1cmVLZXkiLCJub3JtYWxpemVEYXRhIiwiZ2V0RGF0YUF0dHJpYnV0ZSIsIm9mZnNldExlZnQiLCJOT0RFX1RFWFQiLCJTZWxlY3RvckVuZ2luZSIsIkVsZW1lbnQiLCJmaW5kT25lIiwiY2hpbGQiLCJhbmNlc3RvciIsInByZXZpb3VzIiwiZm9jdXNhYmxlQ2hpbGRyZW4iLCJmb2N1c2FibGVzIiwiQVJST1dfTEVGVF9LRVkiLCJBUlJPV19SSUdIVF9LRVkiLCJUT1VDSEVWRU5UX0NPTVBBVF9XQUlUIiwiU1dJUEVfVEhSRVNIT0xEIiwiRGVmYXVsdCIsImtleWJvYXJkIiwic2xpZGUiLCJwYXVzZSIsInRvdWNoIiwiRGVmYXVsdFR5cGUiLCJPUkRFUl9ORVhUIiwiT1JERVJfUFJFViIsIkRJUkVDVElPTl9MRUZUIiwiRElSRUNUSU9OX1JJR0hUIiwiS0VZX1RPX0RJUkVDVElPTiIsIkVWRU5UX1NMSURFIiwiRVZFTlRfU0xJRCIsIkVWRU5UX0tFWURPV04iLCJFVkVOVF9NT1VTRUVOVEVSIiwiRVZFTlRfTU9VU0VMRUFWRSIsIkVWRU5UX1RPVUNIU1RBUlQiLCJFVkVOVF9UT1VDSE1PVkUiLCJFVkVOVF9UT1VDSEVORCIsIkVWRU5UX1BPSU5URVJET1dOIiwiRVZFTlRfUE9JTlRFUlVQIiwiRVZFTlRfRFJBR19TVEFSVCIsIkVWRU5UX0xPQURfREFUQV9BUEkiLCJDTEFTU19OQU1FX0NBUk9VU0VMIiwiQ0xBU1NfTkFNRV9TTElERSIsIkNMQVNTX05BTUVfRU5EIiwiQ0xBU1NfTkFNRV9TVEFSVCIsIkNMQVNTX05BTUVfTkVYVCIsIkNMQVNTX05BTUVfUFJFViIsIkNMQVNTX05BTUVfUE9JTlRFUl9FVkVOVCIsIlNFTEVDVE9SX0FDVElWRSIsIlNFTEVDVE9SX0FDVElWRV9JVEVNIiwiU0VMRUNUT1JfSVRFTSIsIlNFTEVDVE9SX0lURU1fSU1HIiwiU0VMRUNUT1JfTkVYVF9QUkVWIiwiU0VMRUNUT1JfSU5ESUNBVE9SUyIsIlNFTEVDVE9SX0lORElDQVRPUiIsIlNFTEVDVE9SX0RBVEFfU0xJREUiLCJTRUxFQ1RPUl9EQVRBX1JJREUiLCJQT0lOVEVSX1RZUEVfVE9VQ0giLCJQT0lOVEVSX1RZUEVfUEVOIiwibmF2aWdhdG9yIiwibmV4dFdoZW5WaXNpYmxlIiwiY2xlYXJJbnRlcnZhbCIsImN5Y2xlIiwic2V0SW50ZXJ2YWwiLCJhY3RpdmVJbmRleCIsIm9yZGVyIiwiX2dldENvbmZpZyIsIl9oYW5kbGVTd2lwZSIsImFic0RlbHRheCIsImRpcmVjdGlvbiIsIl9hZGRFdmVudExpc3RlbmVycyIsIl9hZGRUb3VjaEV2ZW50TGlzdGVuZXJzIiwiaGFzUG9pbnRlclBlblRvdWNoIiwibW92ZSIsIml0ZW1JbWciLCJfa2V5ZG93biIsIl9nZXRJdGVtSW5kZXgiLCJfZ2V0SXRlbUJ5T3JkZXIiLCJpc05leHQiLCJfdHJpZ2dlclNsaWRlRXZlbnQiLCJ0YXJnZXRJbmRleCIsImZyb21JbmRleCIsImZyb20iLCJfc2V0QWN0aXZlSW5kaWNhdG9yRWxlbWVudCIsImFjdGl2ZUluZGljYXRvciIsImluZGljYXRvcnMiLCJfdXBkYXRlSW50ZXJ2YWwiLCJlbGVtZW50SW50ZXJ2YWwiLCJfc2xpZGUiLCJhY3RpdmVFbGVtZW50SW5kZXgiLCJuZXh0RWxlbWVudCIsIm5leHRFbGVtZW50SW5kZXgiLCJpc0N5Y2xpbmciLCJkaXJlY3Rpb25hbENsYXNzTmFtZSIsIm9yZGVyQ2xhc3NOYW1lIiwiZXZlbnREaXJlY3Rpb25OYW1lIiwic2xpZGVFdmVudCIsInRyaWdnZXJTbGlkRXZlbnQiLCJjb21wbGV0ZUNhbGxCYWNrIiwiX2RpcmVjdGlvblRvT3JkZXIiLCJfb3JkZXJUb0RpcmVjdGlvbiIsImNhcm91c2VsSW50ZXJmYWNlIiwiQ2Fyb3VzZWwiLCJfY29uZmlnIiwiYWN0aW9uIiwiZGF0YUFwaUNsaWNrSGFuZGxlciIsInNsaWRlSW5kZXgiLCJjYXJvdXNlbHMiLCJFVkVOVF9TSE9XIiwiRVZFTlRfU0hPV04iLCJFVkVOVF9ISURFIiwiRVZFTlRfSElEREVOIiwiQ0xBU1NfTkFNRV9DT0xMQVBTRSIsIkNMQVNTX05BTUVfQ09MTEFQU0lORyIsIkNMQVNTX05BTUVfQ09MTEFQU0VEIiwiQ0xBU1NfTkFNRV9ERUVQRVJfQ0hJTERSRU4iLCJDTEFTU19OQU1FX0hPUklaT05UQUwiLCJXSURUSCIsIkhFSUdIVCIsIlNFTEVDVE9SX0FDVElWRVMiLCJ0b2dnbGVMaXN0IiwiZmlsdGVyRWxlbWVudCIsImZvdW5kRWxlbSIsImFjdGl2ZXMiLCJ0ZW1wQWN0aXZlRGF0YSIsImFjdGl2ZXNEYXRhIiwiQ29sbGFwc2UiLCJzdGFydEV2ZW50IiwiZWxlbUFjdGl2ZSIsImNhcGl0YWxpemVkRGltZW5zaW9uIiwic2Nyb2xsU2l6ZSIsInRyaWdnZXJBcnJheUxlbmd0aCIsIl9pc1Nob3duIiwiX2dldERpbWVuc2lvbiIsIl9pbml0aWFsaXplQ2hpbGRyZW4iLCJfYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzIiwidHJpZ2dlckFycmF5Iiwic2VsZWN0b3JFbGVtZW50cyIsImVmZmVjdCIsIm1pbiIsIm1hdGhNYXgiLCJtYXRoTWluIiwiYWxsUGxhY2VtZW50cyIsInBsYWNlbWVudHMiLCJjcmVhdGVQb3BwZXIiLCJkZWZhdWx0TW9kaWZpZXJzIiwicG9wcGVyT2Zmc2V0cyIsImNvbXB1dGVTdHlsZXMiLCJhcHBseVN0eWxlcyIsImZsaXAiLCJwcmV2ZW50T3ZlcmZsb3ciLCJhcnJvdyIsIkVTQ0FQRV9LRVkiLCJTUEFDRV9LRVkiLCJUQUJfS0VZIiwiQVJST1dfVVBfS0VZIiwiQVJST1dfRE9XTl9LRVkiLCJSSUdIVF9NT1VTRV9CVVRUT04iLCJSRUdFWFBfS0VZRE9XTiIsIkVWRU5UX0tFWURPV05fREFUQV9BUEkiLCJFVkVOVF9LRVlVUF9EQVRBX0FQSSIsIkNMQVNTX05BTUVfRFJPUFVQIiwiQ0xBU1NfTkFNRV9EUk9QRU5EIiwiQ0xBU1NfTkFNRV9EUk9QU1RBUlQiLCJDTEFTU19OQU1FX05BVkJBUiIsIlNFTEVDVE9SX01FTlUiLCJTRUxFQ1RPUl9OQVZCQVJfTkFWIiwiU0VMRUNUT1JfVklTSUJMRV9JVEVNUyIsIlBMQUNFTUVOVF9UT1AiLCJQTEFDRU1FTlRfVE9QRU5EIiwiUExBQ0VNRU5UX0JPVFRPTSIsIlBMQUNFTUVOVF9CT1RUT01FTkQiLCJQTEFDRU1FTlRfUklHSFQiLCJQTEFDRU1FTlRfTEVGVCIsImJvdW5kYXJ5IiwicmVmZXJlbmNlIiwicG9wcGVyQ29uZmlnIiwiYXV0b0Nsb3NlIiwiX2VsZW1lbnQiLCJzaG93RXZlbnQiLCJEcm9wZG93biIsInVwZGF0ZSIsIl9jb21wbGV0ZUhpZGUiLCJoaWRlRXZlbnQiLCJfY3JlYXRlUG9wcGVyIiwicmVmZXJlbmNlRWxlbWVudCIsImlzRGlzcGxheVN0YXRpYyIsIm1vZGlmaWVyIiwiUG9wcGVyIiwiX2dldE1lbnVFbGVtZW50IiwiX2dldFBsYWNlbWVudCIsInBhcmVudERyb3Bkb3duIiwiaXNFbmQiLCJfZGV0ZWN0TmF2YmFyIiwiX2dldE9mZnNldCIsInBvcHBlckRhdGEiLCJfZ2V0UG9wcGVyQ29uZmlnIiwiZGVmYXVsdEJzUG9wcGVyQ29uZmlnIiwicGxhY2VtZW50IiwibW9kaWZpZXJzIiwiZW5hYmxlZCIsIl9zZWxlY3RNZW51SXRlbSIsIml0ZW1zIiwiY2xlYXJNZW51cyIsInRvZ2dsZXMiLCJjb21wb3NlZFBhdGgiLCJpc01lbnVUYXJnZXQiLCJnZXRQYXJlbnRGcm9tRWxlbWVudCIsImRhdGFBcGlLZXlkb3duSGFuZGxlciIsImlzQWN0aXZlIiwiZ2V0VG9nZ2xlQnV0dG9uIiwiU0VMRUNUT1JfRklYRURfQ09OVEVOVCIsIlNFTEVDVE9SX1NUSUNLWV9DT05URU5UIiwiZ2V0V2lkdGgiLCJkb2N1bWVudFdpZHRoIiwiY2FsY3VsYXRlZFZhbHVlIiwiX2Rpc2FibGVPdmVyRmxvdyIsIl9zZXRFbGVtZW50QXR0cmlidXRlcyIsInNjcm9sbGJhcldpZHRoIiwibWFuaXB1bGF0aW9uQ2FsbEJhY2siLCJfc2F2ZUluaXRpYWxBdHRyaWJ1dGUiLCJhY3R1YWxWYWx1ZSIsIl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzIiwiX2FwcGx5TWFuaXB1bGF0aW9uQ2FsbGJhY2siLCJjYWxsQmFjayIsImlzT3ZlcmZsb3dpbmciLCJyb290RWxlbWVudCIsImNsaWNrQ2FsbGJhY2siLCJFVkVOVF9NT1VTRURPV04iLCJfZ2V0RWxlbWVudCIsImJhY2tkcm9wIiwiX2FwcGVuZCIsIl9lbXVsYXRlQW5pbWF0aW9uIiwidHJhcEVsZW1lbnQiLCJhdXRvZm9jdXMiLCJFVkVOVF9GT0NVU0lOIiwiRVZFTlRfS0VZRE9XTl9UQUIiLCJUQUJfTkFWX0ZPUldBUkQiLCJUQUJfTkFWX0JBQ0tXQVJEIiwiYWN0aXZhdGUiLCJkZWFjdGl2YXRlIiwiX2hhbmRsZUZvY3VzaW4iLCJfaGFuZGxlS2V5ZG93biIsIkVWRU5UX0hJREVfUFJFVkVOVEVEIiwiRVZFTlRfUkVTSVpFIiwiRVZFTlRfQ0xJQ0tfRElTTUlTUyIsIkVWRU5UX0tFWURPV05fRElTTUlTUyIsIkVWRU5UX01PVVNFVVBfRElTTUlTUyIsIkVWRU5UX01PVVNFRE9XTl9ESVNNSVNTIiwiQ0xBU1NfTkFNRV9PUEVOIiwiQ0xBU1NfTkFNRV9TVEFUSUMiLCJPUEVOX1NFTEVDVE9SIiwiU0VMRUNUT1JfRElBTE9HIiwiU0VMRUNUT1JfTU9EQUxfQk9EWSIsImh0bWxFbGVtZW50IiwiaGFuZGxlVXBkYXRlIiwiX2luaXRpYWxpemVCYWNrRHJvcCIsIl9pbml0aWFsaXplRm9jdXNUcmFwIiwiX3Nob3dFbGVtZW50IiwibW9kYWxCb2R5IiwidHJhbnNpdGlvbkNvbXBsZXRlIiwiX3NldEVzY2FwZUV2ZW50IiwiX3NldFJlc2l6ZUV2ZW50IiwiX2hpZGVNb2RhbCIsIl9zaG93QmFja2Ryb3AiLCJfaXNBbmltYXRlZCIsIl90cmlnZ2VyQmFja2Ryb3BUcmFuc2l0aW9uIiwiaXNNb2RhbE92ZXJmbG93aW5nIiwic2Nyb2xsSGVpZ2h0IiwiY2xhc3NMaXN0IiwiX2FkanVzdERpYWxvZyIsImlzQm9keU92ZXJmbG93aW5nIiwiX3Jlc2V0QWRqdXN0bWVudHMiLCJNb2RhbCIsImFsbFJlYWR5T3BlbiIsInNjcm9sbCIsIkNMQVNTX05BTUVfQkFDS0RST1AiLCJjb21wbGV0ZUNhbGxiYWNrIiwiT2ZmY2FudmFzIiwidXJpQXR0cmlidXRlcyIsIkFSSUFfQVRUUklCVVRFX1BBVFRFUk4iLCJTQUZFX1VSTF9QQVRURVJOIiwiREFUQV9VUkxfUEFUVEVSTiIsImFsbG93ZWRBdHRyaWJ1dGUiLCJhdHRyaWJ1dGVOYW1lIiwiYXR0cmlidXRlIiwiYWxsb3dlZEF0dHJpYnV0ZUxpc3QiLCJyZWdFeHAiLCJhdHRyaWJ1dGVSZWdleCIsIkRlZmF1bHRBbGxvd2xpc3QiLCJhcmVhIiwiYnIiLCJlbSIsImhyIiwiaDEiLCJoMiIsImgzIiwiaDQiLCJoNSIsImg2IiwiaW1nIiwibGkiLCJvbCIsInByZSIsInNtYWxsIiwic3BhbiIsInN1YiIsInN1cCIsInN0cm9uZyIsInUiLCJ1bCIsInVuc2FmZUh0bWwiLCJzYW5pdGl6ZUZuIiwiZG9tUGFyc2VyIiwiY3JlYXRlZERvY3VtZW50IiwiZWxlbWVudE5hbWUiLCJhdHRyaWJ1dGVMaXN0IiwiYWxsb3dlZEF0dHJpYnV0ZXMiLCJhbGxvd0xpc3QiLCJDTEFTU19QUkVGSVgiLCJESVNBTExPV0VEX0FUVFJJQlVURVMiLCJ0ZW1wbGF0ZSIsInRpdGxlIiwiZmFsbGJhY2tQbGFjZW1lbnRzIiwiY3VzdG9tQ2xhc3MiLCJzYW5pdGl6ZSIsIkF0dGFjaG1lbnRNYXAiLCJBVVRPIiwiVE9QIiwiUklHSFQiLCJCT1RUT00iLCJMRUZUIiwiSElERSIsIkhJRERFTiIsIlNIT1ciLCJTSE9XTiIsIklOU0VSVEVEIiwiQ0xJQ0siLCJGT0NVU0lOIiwiRk9DVVNPVVQiLCJNT1VTRUVOVEVSIiwiTU9VU0VMRUFWRSIsIkNMQVNTX05BTUVfTU9EQUwiLCJIT1ZFUl9TVEFURV9TSE9XIiwiSE9WRVJfU1RBVEVfT1VUIiwiU0VMRUNUT1JfVE9PTFRJUF9JTk5FUiIsIlNFTEVDVE9SX01PREFMIiwiRVZFTlRfTU9EQUxfSElERSIsIlRSSUdHRVJfSE9WRVIiLCJUUklHR0VSX0ZPQ1VTIiwiVFJJR0dFUl9DTElDSyIsIlRSSUdHRVJfTUFOVUFMIiwiZW5hYmxlIiwidG9nZ2xlRW5hYmxlZCIsInNoYWRvd1Jvb3QiLCJpc0luVGhlRG9tIiwidGlwIiwidGlwSWQiLCJhdHRhY2htZW50IiwicHJldkhvdmVyU3RhdGUiLCJpc1dpdGhDb250ZW50IiwiZ2V0VGlwRWxlbWVudCIsInNldENvbnRlbnQiLCJfc2FuaXRpemVBbmRTZXRDb250ZW50IiwidGVtcGxhdGVFbGVtZW50Iiwic2V0RWxlbWVudENvbnRlbnQiLCJzYW5pdGl6ZUh0bWwiLCJnZXRUaXRsZSIsInVwZGF0ZUF0dGFjaG1lbnQiLCJfaW5pdGlhbGl6ZU9uRGVsZWdhdGVkVGFyZ2V0IiwiX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uIiwicGhhc2UiLCJvbkZpcnN0VXBkYXRlIiwiX2FkZEF0dGFjaG1lbnRDbGFzcyIsIl9nZXRBdHRhY2htZW50IiwiX3NldExpc3RlbmVycyIsInRyaWdnZXJzIiwiZXZlbnRJbiIsImV2ZW50T3V0IiwiX2ZpeFRpdGxlIiwib3JpZ2luYWxUaXRsZVR5cGUiLCJfZW50ZXIiLCJfbGVhdmUiLCJfaXNXaXRoQWN0aXZlVHJpZ2dlciIsImRhdGFBdHRyaWJ1dGVzIiwiX2dldERlbGVnYXRlQ29uZmlnIiwiX2NsZWFuVGlwQ2xhc3MiLCJiYXNpY0NsYXNzUHJlZml4UmVnZXgiLCJ0YWJDbGFzcyIsInRDbGFzcyIsIl9nZXRCYXNpY0NsYXNzUHJlZml4IiwiX2hhbmRsZVBvcHBlclBsYWNlbWVudENoYW5nZSIsIl9kaXNwb3NlUG9wcGVyIiwiVG9vbHRpcCIsIlNFTEVDVE9SX1RJVExFIiwiU0VMRUNUT1JfQ09OVEVOVCIsIl9nZXRDb250ZW50IiwiUG9wb3ZlciIsIkVWRU5UX0FDVElWQVRFIiwiRVZFTlRfU0NST0xMIiwiQ0xBU1NfTkFNRV9EUk9QRE9XTl9JVEVNIiwiU0VMRUNUT1JfREFUQV9TUFkiLCJTRUxFQ1RPUl9OQVZfTElTVF9HUk9VUCIsIlNFTEVDVE9SX05BVl9MSU5LUyIsIlNFTEVDVE9SX05BVl9JVEVNUyIsIlNFTEVDVE9SX0xJU1RfSVRFTVMiLCJTRUxFQ1RPUl9MSU5LX0lURU1TIiwiU0VMRUNUT1JfRFJPUERPV04iLCJTRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUiLCJNRVRIT0RfT0ZGU0VUIiwiTUVUSE9EX1BPU0lUSU9OIiwicmVmcmVzaCIsImF1dG9NZXRob2QiLCJvZmZzZXRNZXRob2QiLCJvZmZzZXRCYXNlIiwidGFyZ2V0U2VsZWN0b3IiLCJ0YXJnZXRCQ1IiLCJfZ2V0U2Nyb2xsVG9wIiwiX2dldFNjcm9sbEhlaWdodCIsIl9nZXRPZmZzZXRIZWlnaHQiLCJfcHJvY2VzcyIsIm1heFNjcm9sbCIsImlzQWN0aXZlVGFyZ2V0IiwiX2FjdGl2YXRlIiwicXVlcmllcyIsImxpbmsiLCJsaXN0R3JvdXAiLCJuYXZJdGVtIiwiX2NsZWFyIiwiU2Nyb2xsU3B5Iiwic3B5IiwiQ0xBU1NfTkFNRV9EUk9QRE9XTl9NRU5VIiwiU0VMRUNUT1JfQUNUSVZFX1VMIiwiU0VMRUNUT1JfRFJPUERPV05fQUNUSVZFX0NISUxEIiwibGlzdEVsZW1lbnQiLCJpdGVtU2VsZWN0b3IiLCJhY3RpdmVFbGVtZW50cyIsImlzVHJhbnNpdGlvbmluZyIsIl90cmFuc2l0aW9uQ29tcGxldGUiLCJkcm9wZG93bkNoaWxkIiwiZHJvcGRvd25FbGVtZW50IiwiZHJvcGRvd24iLCJUYWIiLCJFVkVOVF9NT1VTRU9WRVIiLCJFVkVOVF9NT1VTRU9VVCIsIkVWRU5UX0ZPQ1VTT1VUIiwiQ0xBU1NfTkFNRV9ISURFIiwiQ0xBU1NfTkFNRV9TSE9XSU5HIiwiYXV0b2hpZGUiLCJfbWF5YmVTY2hlZHVsZUhpZGUiLCJfb25JbnRlcmFjdGlvbiIsIl9jbGVhclRpbWVvdXQiLCJUb2FzdCIsInRvZ2dsZUNvbm5lY3Rpb25TdHJpbmdBbmRQcmVmaXgiLCJjaGFuZ2UiLCJyZWZyZXNoRGVzY3JpcHRpb24iLCJyZWNpcGVOYW1lIiwicmVjaXBlRGlzcGxheU5hbWUiLCJyZWNpcGVEZXNjcmlwdGlvbiIsInNldExvY2FsaXphdGlvblVybCIsImN1bHR1cmVzTGlzdCIsImRhdGFzZXQiLCJ0b2dnbGVQYXNzd29yZFZpc2liaWxpdHkiLCJwYXNzd29yZEN0bCIsInRvZ2dsZVBhc3N3b3JkQ3RsIiwiaWNvbiIsInN0cmVuZ3RoIiwibWluTGVuZ3RoIiwidXBwZXJDYXNlIiwibG93ZXJDYXNlIiwibnVtYmVycyIsInNwZWNpYWxjaGFycyIsImNhcGl0YWxsZXR0ZXJzIiwibG93ZXJsZXR0ZXJzIiwibnVtYmVyIiwic3BlY2lhbGNoYXIiLCJ2YWxpZCIsImNyZWF0ZVByb2dyZXNzQmFyIiwiZ2V0UGVyY2VudGFnZSIsInRvRml4ZWQiLCJnZXRMZXZlbCIsImNoZWNrU3RyZW5ndGgiLCJ0b3RhbCIsInBlcmNlbnRhZ2UiLCJsZXZlbCIsImRhdGFUcmFuc2ZlciJdLCJtYXBwaW5ncyI6Ijs7Ozs7OztBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBRSxVQUFVQSxNQUFWLEVBQWtCQyxPQUFsQixFQUE0QjtBQUU3Qjs7QUFFQSxNQUFLLFFBQU9DLE1BQVAseUNBQU9BLE1BQVAsT0FBa0IsUUFBbEIsSUFBOEIsUUFBT0EsTUFBTSxDQUFDQyxPQUFkLE1BQTBCLFFBQTdELEVBQXdFO0FBRXZFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0FELElBQUFBLE1BQU0sQ0FBQ0MsT0FBUCxHQUFpQkgsTUFBTSxDQUFDSSxR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QUEvQyxHQUE2RHB0QixRQUFRLENBQUN0ZixLQUF0RSxHQUE4RSwyREFBOUUsR0FBNEkyc0MsS0FBNUksR0FBb0osc0NBQXBKLEdBQTZMRCxVQUE3TCxHQUEwTSxrQkFBM00sQ0FBVjtBQUNBLFVBQUkzcUQsTUFBTSxHQUFHOGtDLENBQUMsQ0FBQ3ZILFFBQVEsQ0FBQ3Y5QixNQUFWLENBQWQ7QUFDQUEsTUFBQUEsTUFBTSxDQUFDMFcsS0FBUDtBQUNBMVcsTUFBQUEsTUFBTSxDQUFDK3BCLE1BQVAsQ0FBY3RoQixFQUFkO0FBQ0g7O0FBRUQsU0FBSzhyQixJQUFMLENBQVUsZUFBVixFQUEyQixVQUFVcFMsS0FBVixFQUFpQjtBQUN4Q3NvQyxNQUFBQSxhQUFhLENBQUMzbEIsQ0FBQyxDQUFDLElBQUQsQ0FBRCxDQUFRbG9DLEdBQVIsRUFBRCxDQUFiO0FBQ0gsS0FGRDtBQUdBLFNBQUsyM0IsSUFBTCxDQUFVLE1BQVYsRUFBa0IsVUFBVXBTLEtBQVYsRUFBaUI7QUFDL0Jzb0MsTUFBQUEsYUFBYSxDQUFDdG9DLEtBQUssQ0FBQzBDLGFBQU4sQ0FBb0JnbUMsWUFBcEIsQ0FBaUNwdUMsT0FBakMsQ0FBeUMsTUFBekMsQ0FBRCxDQUFiO0FBQ0gsS0FGRDtBQUlBLFNBQUt2SCxPQUFMLENBQWEsTUFBYixFQUFxQjZNLEVBQXJCLENBQXdCLFFBQXhCLEVBQWtDLFlBQVk7QUFDMUMsVUFBSSxDQUFDcW9DLEtBQUwsRUFBWTtBQUNSam9DLFFBQUFBLEtBQUssQ0FBQ2dDLGNBQU47QUFDSDtBQUNKLEtBSkQ7QUFLSCxHQW5GRDtBQW9GSCxDQXRGQSxFQXNGQzNtQixNQXRGRCxDQUFEIiwiZmlsZSI6InNldHVwLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBqUXVlcnkgSmF2YVNjcmlwdCBMaWJyYXJ5IHYzLjYuMFxuICogaHR0cHM6Ly9qcXVlcnkuY29tL1xuICpcbiAqIEluY2x1ZGVzIFNpenpsZS5qc1xuICogaHR0cHM6Ly9zaXp6bGVqcy5jb20vXG4gKlxuICogQ29weXJpZ2h0IE9wZW5KUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICogaHR0cHM6Ly9qcXVlcnkub3JnL2xpY2Vuc2VcbiAqXG4gKiBEYXRlOiAyMDIxLTAzLTAyVDE3OjA4WlxuICovXG4oIGZ1bmN0aW9uKCBnbG9iYWwsIGZhY3RvcnkgKSB7XG5cblx0XCJ1c2Ugc3RyaWN0XCI7XG5cblx0aWYgKCB0eXBlb2YgbW9kdWxlID09PSBcIm9iamVjdFwiICYmIHR5cGVvZiBtb2R1bGUuZXhwb3J0cyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vIEZvciBDb21tb25KUyBhbmQgQ29tbW9uSlMtbGlrZSBlbnZpcm9ubWVudHMgd2hlcmUgYSBwcm9wZXIgYHdpbmRvd2Bcblx0XHQvLyBpcyBwcmVzZW50LCBleGVjdXRlIHRoZSBmYWN0b3J5IGFuZCBnZXQgalF1ZXJ5LlxuXHRcdC8vIEZvciBlbnZpcm9ubWVudHMgdGhhdCBkbyBub3QgaGF2ZSBhIGB3aW5kb3dgIHdpdGggYSBgZG9jdW1lbnRgXG5cdFx0Ly8gKHN1Y2ggYXMgTm9kZS5qcyksIGV4cG9zZSBhIGZhY3RvcnkgYXMgbW9kdWxlLmV4cG9ydHMuXG5cdFx0Ly8gVGhpcyBhY2NlbnR1YXRlcyB0aGUgbmVlZCBmb3IgdGhlIGNyZWF0aW9uIG9mIGEgcmVhbCBgd2luZG93YC5cblx0XHQvLyBlLmcuIHZhciBqUXVlcnkgPSByZXF1aXJlKFwianF1ZXJ5XCIpKHdpbmRvdyk7XG5cdFx0Ly8gU2VlIHRpY2tldCAjMTQ1NDkgZm9yIG1vcmUgaW5mby5cblx0XHRtb2R1bGUuZXhwb3J0cyA9IGdsb2JhbC5kb2N1bWVudCA/XG5cdFx0XHRmYWN0b3J5KCBnbG9iYWwsIHRydWUgKSA6XG5cdFx0XHRmdW5jdGlvbiggdyApIHtcblx0XHRcdFx0aWYgKCAhdy5kb2N1bWVudCApIHtcblx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoIFwialF1ZXJ5IHJlcXVpcmVzIGEgd2luZG93IHdpdGggYSBkb2N1bWVudFwiICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIGZhY3RvcnkoIHcgKTtcblx0XHRcdH07XG5cdH0gZWxzZSB7XG5cdFx0ZmFjdG9yeSggZ2xvYmFsICk7XG5cdH1cblxuLy8gUGFzcyB0aGlzIGlmIHdpbmRvdyBpcyBub3QgZGVmaW5lZCB5ZXRcbn0gKSggdHlwZW9mIHdpbmRvdyAhPT0gXCJ1bmRlZmluZWRcIiA/IHdpbmRvdyA6IHRoaXMsIGZ1bmN0aW9uKCB3aW5kb3csIG5vR2xvYmFsICkge1xuXG4vLyBFZGdlIDw9IDEyIC0gMTMrLCBGaXJlZm94IDw9MTggLSA0NSssIElFIDEwIC0gMTEsIFNhZmFyaSA1LjEgLSA5KywgaU9TIDYgLSA5LjFcbi8vIHRocm93IGV4Y2VwdGlvbnMgd2hlbiBub24tc3RyaWN0IGNvZGUgKGUuZy4sIEFTUC5ORVQgNC41KSBhY2Nlc3NlcyBzdHJpY3QgbW9kZVxuLy8gYXJndW1lbnRzLmNhbGxlZS5jYWxsZXIgKHRyYWMtMTMzMzUpLiBCdXQgYXMgb2YgalF1ZXJ5IDMuMCAoMjAxNiksIHN0cmljdCBtb2RlIHNob3VsZCBiZSBjb21tb25cbi8vIGVub3VnaCB0aGF0IGFsbCBzdWNoIGF0dGVtcHRzIGFyZSBndWFyZGVkIGluIGEgdHJ5IGJsb2NrLlxuXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBhcnIgPSBbXTtcblxudmFyIGdldFByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mO1xuXG52YXIgc2xpY2UgPSBhcnIuc2xpY2U7XG5cbnZhciBmbGF0ID0gYXJyLmZsYXQgPyBmdW5jdGlvbiggYXJyYXkgKSB7XG5cdHJldHVybiBhcnIuZmxhdC5jYWxsKCBhcnJheSApO1xufSA6IGZ1bmN0aW9uKCBhcnJheSApIHtcblx0cmV0dXJuIGFyci5jb25jYXQuYXBwbHkoIFtdLCBhcnJheSApO1xufTtcblxuXG52YXIgcHVzaCA9IGFyci5wdXNoO1xuXG52YXIgaW5kZXhPZiA9IGFyci5pbmRleE9mO1xuXG52YXIgY2xhc3MydHlwZSA9IHt9O1xuXG52YXIgdG9TdHJpbmcgPSBjbGFzczJ0eXBlLnRvU3RyaW5nO1xuXG52YXIgaGFzT3duID0gY2xhc3MydHlwZS5oYXNPd25Qcm9wZXJ0eTtcblxudmFyIGZuVG9TdHJpbmcgPSBoYXNPd24udG9TdHJpbmc7XG5cbnZhciBPYmplY3RGdW5jdGlvblN0cmluZyA9IGZuVG9TdHJpbmcuY2FsbCggT2JqZWN0ICk7XG5cbnZhciBzdXBwb3J0ID0ge307XG5cbnZhciBpc0Z1bmN0aW9uID0gZnVuY3Rpb24gaXNGdW5jdGlvbiggb2JqICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9NTcsIEZpcmVmb3ggPD01MlxuXHRcdC8vIEluIHNvbWUgYnJvd3NlcnMsIHR5cGVvZiByZXR1cm5zIFwiZnVuY3Rpb25cIiBmb3IgSFRNTCA8b2JqZWN0PiBlbGVtZW50c1xuXHRcdC8vIChpLmUuLCBgdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwib2JqZWN0XCIgKSA9PT0gXCJmdW5jdGlvblwiYCkuXG5cdFx0Ly8gV2UgZG9uJ3Qgd2FudCB0byBjbGFzc2lmeSAqYW55KiBET00gbm9kZSBhcyBhIGZ1bmN0aW9uLlxuXHRcdC8vIFN1cHBvcnQ6IFF0V2ViIDw9My44LjUsIFdlYktpdCA8PTUzNC4zNCwgd2todG1sdG9wZGYgdG9vbCA8PTAuMTIuNVxuXHRcdC8vIFBsdXMgZm9yIG9sZCBXZWJLaXQsIHR5cGVvZiByZXR1cm5zIFwiZnVuY3Rpb25cIiBmb3IgSFRNTCBjb2xsZWN0aW9uc1xuXHRcdC8vIChlLmcuLCBgdHlwZW9mIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiZGl2XCIpID09PSBcImZ1bmN0aW9uXCJgKS4gKGdoLTQ3NTYpXG5cdFx0cmV0dXJuIHR5cGVvZiBvYmogPT09IFwiZnVuY3Rpb25cIiAmJiB0eXBlb2Ygb2JqLm5vZGVUeXBlICE9PSBcIm51bWJlclwiICYmXG5cdFx0XHR0eXBlb2Ygb2JqLml0ZW0gIT09IFwiZnVuY3Rpb25cIjtcblx0fTtcblxuXG52YXIgaXNXaW5kb3cgPSBmdW5jdGlvbiBpc1dpbmRvdyggb2JqICkge1xuXHRcdHJldHVybiBvYmogIT0gbnVsbCAmJiBvYmogPT09IG9iai53aW5kb3c7XG5cdH07XG5cblxudmFyIGRvY3VtZW50ID0gd2luZG93LmRvY3VtZW50O1xuXG5cblxuXHR2YXIgcHJlc2VydmVkU2NyaXB0QXR0cmlidXRlcyA9IHtcblx0XHR0eXBlOiB0cnVlLFxuXHRcdHNyYzogdHJ1ZSxcblx0XHRub25jZTogdHJ1ZSxcblx0XHRub01vZHVsZTogdHJ1ZVxuXHR9O1xuXG5cdGZ1bmN0aW9uIERPTUV2YWwoIGNvZGUsIG5vZGUsIGRvYyApIHtcblx0XHRkb2MgPSBkb2MgfHwgZG9jdW1lbnQ7XG5cblx0XHR2YXIgaSwgdmFsLFxuXHRcdFx0c2NyaXB0ID0gZG9jLmNyZWF0ZUVsZW1lbnQoIFwic2NyaXB0XCIgKTtcblxuXHRcdHNjcmlwdC50ZXh0ID0gY29kZTtcblx0XHRpZiAoIG5vZGUgKSB7XG5cdFx0XHRmb3IgKCBpIGluIHByZXNlcnZlZFNjcmlwdEF0dHJpYnV0ZXMgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA2NCssIEVkZ2UgMTgrXG5cdFx0XHRcdC8vIFNvbWUgYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydCB0aGUgXCJub25jZVwiIHByb3BlcnR5IG9uIHNjcmlwdHMuXG5cdFx0XHRcdC8vIE9uIHRoZSBvdGhlciBoYW5kLCBqdXN0IHVzaW5nIGBnZXRBdHRyaWJ1dGVgIGlzIG5vdCBlbm91Z2ggYXNcblx0XHRcdFx0Ly8gdGhlIGBub25jZWAgYXR0cmlidXRlIGlzIHJlc2V0IHRvIGFuIGVtcHR5IHN0cmluZyB3aGVuZXZlciBpdFxuXHRcdFx0XHQvLyBiZWNvbWVzIGJyb3dzaW5nLWNvbnRleHQgY29ubmVjdGVkLlxuXHRcdFx0XHQvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3doYXR3Zy9odG1sL2lzc3Vlcy8yMzY5XG5cdFx0XHRcdC8vIFNlZSBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNub25jZS1hdHRyaWJ1dGVzXG5cdFx0XHRcdC8vIFRoZSBgbm9kZS5nZXRBdHRyaWJ1dGVgIGNoZWNrIHdhcyBhZGRlZCBmb3IgdGhlIHNha2Ugb2Zcblx0XHRcdFx0Ly8gYGpRdWVyeS5nbG9iYWxFdmFsYCBzbyB0aGF0IGl0IGNhbiBmYWtlIGEgbm9uY2UtY29udGFpbmluZyBub2RlXG5cdFx0XHRcdC8vIHZpYSBhbiBvYmplY3QuXG5cdFx0XHRcdHZhbCA9IG5vZGVbIGkgXSB8fCBub2RlLmdldEF0dHJpYnV0ZSAmJiBub2RlLmdldEF0dHJpYnV0ZSggaSApO1xuXHRcdFx0XHRpZiAoIHZhbCApIHtcblx0XHRcdFx0XHRzY3JpcHQuc2V0QXR0cmlidXRlKCBpLCB2YWwgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRkb2MuaGVhZC5hcHBlbmRDaGlsZCggc2NyaXB0ICkucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCggc2NyaXB0ICk7XG5cdH1cblxuXG5mdW5jdGlvbiB0b1R5cGUoIG9iaiApIHtcblx0aWYgKCBvYmogPT0gbnVsbCApIHtcblx0XHRyZXR1cm4gb2JqICsgXCJcIjtcblx0fVxuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD0yLjMgb25seSAoZnVuY3Rpb25pc2ggUmVnRXhwKVxuXHRyZXR1cm4gdHlwZW9mIG9iaiA9PT0gXCJvYmplY3RcIiB8fCB0eXBlb2Ygb2JqID09PSBcImZ1bmN0aW9uXCIgP1xuXHRcdGNsYXNzMnR5cGVbIHRvU3RyaW5nLmNhbGwoIG9iaiApIF0gfHwgXCJvYmplY3RcIiA6XG5cdFx0dHlwZW9mIG9iajtcbn1cbi8qIGdsb2JhbCBTeW1ib2wgKi9cbi8vIERlZmluaW5nIHRoaXMgZ2xvYmFsIGluIC5lc2xpbnRyYy5qc29uIHdvdWxkIGNyZWF0ZSBhIGRhbmdlciBvZiB1c2luZyB0aGUgZ2xvYmFsXG4vLyB1bmd1YXJkZWQgaW4gYW5vdGhlciBwbGFjZSwgaXQgc2VlbXMgc2FmZXIgdG8gZGVmaW5lIGdsb2JhbCBvbmx5IGZvciB0aGlzIG1vZHVsZVxuXG5cblxudmFyXG5cdHZlcnNpb24gPSBcIjMuNi4wXCIsXG5cblx0Ly8gRGVmaW5lIGEgbG9jYWwgY29weSBvZiBqUXVlcnlcblx0alF1ZXJ5ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0ICkge1xuXG5cdFx0Ly8gVGhlIGpRdWVyeSBvYmplY3QgaXMgYWN0dWFsbHkganVzdCB0aGUgaW5pdCBjb25zdHJ1Y3RvciAnZW5oYW5jZWQnXG5cdFx0Ly8gTmVlZCBpbml0IGlmIGpRdWVyeSBpcyBjYWxsZWQgKGp1c3QgYWxsb3cgZXJyb3IgdG8gYmUgdGhyb3duIGlmIG5vdCBpbmNsdWRlZClcblx0XHRyZXR1cm4gbmV3IGpRdWVyeS5mbi5pbml0KCBzZWxlY3RvciwgY29udGV4dCApO1xuXHR9O1xuXG5qUXVlcnkuZm4gPSBqUXVlcnkucHJvdG90eXBlID0ge1xuXG5cdC8vIFRoZSBjdXJyZW50IHZlcnNpb24gb2YgalF1ZXJ5IGJlaW5nIHVzZWRcblx0anF1ZXJ5OiB2ZXJzaW9uLFxuXG5cdGNvbnN0cnVjdG9yOiBqUXVlcnksXG5cblx0Ly8gVGhlIGRlZmF1bHQgbGVuZ3RoIG9mIGEgalF1ZXJ5IG9iamVjdCBpcyAwXG5cdGxlbmd0aDogMCxcblxuXHR0b0FycmF5OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2xpY2UuY2FsbCggdGhpcyApO1xuXHR9LFxuXG5cdC8vIEdldCB0aGUgTnRoIGVsZW1lbnQgaW4gdGhlIG1hdGNoZWQgZWxlbWVudCBzZXQgT1Jcblx0Ly8gR2V0IHRoZSB3aG9sZSBtYXRjaGVkIGVsZW1lbnQgc2V0IGFzIGEgY2xlYW4gYXJyYXlcblx0Z2V0OiBmdW5jdGlvbiggbnVtICkge1xuXG5cdFx0Ly8gUmV0dXJuIGFsbCB0aGUgZWxlbWVudHMgaW4gYSBjbGVhbiBhcnJheVxuXHRcdGlmICggbnVtID09IG51bGwgKSB7XG5cdFx0XHRyZXR1cm4gc2xpY2UuY2FsbCggdGhpcyApO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiBqdXN0IHRoZSBvbmUgZWxlbWVudCBmcm9tIHRoZSBzZXRcblx0XHRyZXR1cm4gbnVtIDwgMCA/IHRoaXNbIG51bSArIHRoaXMubGVuZ3RoIF0gOiB0aGlzWyBudW0gXTtcblx0fSxcblxuXHQvLyBUYWtlIGFuIGFycmF5IG9mIGVsZW1lbnRzIGFuZCBwdXNoIGl0IG9udG8gdGhlIHN0YWNrXG5cdC8vIChyZXR1cm5pbmcgdGhlIG5ldyBtYXRjaGVkIGVsZW1lbnQgc2V0KVxuXHRwdXNoU3RhY2s6IGZ1bmN0aW9uKCBlbGVtcyApIHtcblxuXHRcdC8vIEJ1aWxkIGEgbmV3IGpRdWVyeSBtYXRjaGVkIGVsZW1lbnQgc2V0XG5cdFx0dmFyIHJldCA9IGpRdWVyeS5tZXJnZSggdGhpcy5jb25zdHJ1Y3RvcigpLCBlbGVtcyApO1xuXG5cdFx0Ly8gQWRkIHRoZSBvbGQgb2JqZWN0IG9udG8gdGhlIHN0YWNrIChhcyBhIHJlZmVyZW5jZSlcblx0XHRyZXQucHJldk9iamVjdCA9IHRoaXM7XG5cblx0XHQvLyBSZXR1cm4gdGhlIG5ld2x5LWZvcm1lZCBlbGVtZW50IHNldFxuXHRcdHJldHVybiByZXQ7XG5cdH0sXG5cblx0Ly8gRXhlY3V0ZSBhIGNhbGxiYWNrIGZvciBldmVyeSBlbGVtZW50IGluIHRoZSBtYXRjaGVkIHNldC5cblx0ZWFjaDogZnVuY3Rpb24oIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiBqUXVlcnkuZWFjaCggdGhpcywgY2FsbGJhY2sgKTtcblx0fSxcblxuXHRtYXA6IGZ1bmN0aW9uKCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5tYXAoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBpICkge1xuXHRcdFx0cmV0dXJuIGNhbGxiYWNrLmNhbGwoIGVsZW0sIGksIGVsZW0gKTtcblx0XHR9ICkgKTtcblx0fSxcblxuXHRzbGljZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCBzbGljZS5hcHBseSggdGhpcywgYXJndW1lbnRzICkgKTtcblx0fSxcblxuXHRmaXJzdDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMuZXEoIDAgKTtcblx0fSxcblxuXHRsYXN0OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5lcSggLTEgKTtcblx0fSxcblxuXHRldmVuOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGpRdWVyeS5ncmVwKCB0aGlzLCBmdW5jdGlvbiggX2VsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gKCBpICsgMSApICUgMjtcblx0XHR9ICkgKTtcblx0fSxcblxuXHRvZGQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5LmdyZXAoIHRoaXMsIGZ1bmN0aW9uKCBfZWxlbSwgaSApIHtcblx0XHRcdHJldHVybiBpICUgMjtcblx0XHR9ICkgKTtcblx0fSxcblxuXHRlcTogZnVuY3Rpb24oIGkgKSB7XG5cdFx0dmFyIGxlbiA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0aiA9ICtpICsgKCBpIDwgMCA/IGxlbiA6IDAgKTtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIGogPj0gMCAmJiBqIDwgbGVuID8gWyB0aGlzWyBqIF0gXSA6IFtdICk7XG5cdH0sXG5cblx0ZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gdGhpcy5wcmV2T2JqZWN0IHx8IHRoaXMuY29uc3RydWN0b3IoKTtcblx0fSxcblxuXHQvLyBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuXG5cdC8vIEJlaGF2ZXMgbGlrZSBhbiBBcnJheSdzIG1ldGhvZCwgbm90IGxpa2UgYSBqUXVlcnkgbWV0aG9kLlxuXHRwdXNoOiBwdXNoLFxuXHRzb3J0OiBhcnIuc29ydCxcblx0c3BsaWNlOiBhcnIuc3BsaWNlXG59O1xuXG5qUXVlcnkuZXh0ZW5kID0galF1ZXJ5LmZuLmV4dGVuZCA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgb3B0aW9ucywgbmFtZSwgc3JjLCBjb3B5LCBjb3B5SXNBcnJheSwgY2xvbmUsXG5cdFx0dGFyZ2V0ID0gYXJndW1lbnRzWyAwIF0gfHwge30sXG5cdFx0aSA9IDEsXG5cdFx0bGVuZ3RoID0gYXJndW1lbnRzLmxlbmd0aCxcblx0XHRkZWVwID0gZmFsc2U7XG5cblx0Ly8gSGFuZGxlIGEgZGVlcCBjb3B5IHNpdHVhdGlvblxuXHRpZiAoIHR5cGVvZiB0YXJnZXQgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdGRlZXAgPSB0YXJnZXQ7XG5cblx0XHQvLyBTa2lwIHRoZSBib29sZWFuIGFuZCB0aGUgdGFyZ2V0XG5cdFx0dGFyZ2V0ID0gYXJndW1lbnRzWyBpIF0gfHwge307XG5cdFx0aSsrO1xuXHR9XG5cblx0Ly8gSGFuZGxlIGNhc2Ugd2hlbiB0YXJnZXQgaXMgYSBzdHJpbmcgb3Igc29tZXRoaW5nIChwb3NzaWJsZSBpbiBkZWVwIGNvcHkpXG5cdGlmICggdHlwZW9mIHRhcmdldCAhPT0gXCJvYmplY3RcIiAmJiAhaXNGdW5jdGlvbiggdGFyZ2V0ICkgKSB7XG5cdFx0dGFyZ2V0ID0ge307XG5cdH1cblxuXHQvLyBFeHRlbmQgalF1ZXJ5IGl0c2VsZiBpZiBvbmx5IG9uZSBhcmd1bWVudCBpcyBwYXNzZWRcblx0aWYgKCBpID09PSBsZW5ndGggKSB7XG5cdFx0dGFyZ2V0ID0gdGhpcztcblx0XHRpLS07XG5cdH1cblxuXHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblxuXHRcdC8vIE9ubHkgZGVhbCB3aXRoIG5vbi1udWxsL3VuZGVmaW5lZCB2YWx1ZXNcblx0XHRpZiAoICggb3B0aW9ucyA9IGFyZ3VtZW50c1sgaSBdICkgIT0gbnVsbCApIHtcblxuXHRcdFx0Ly8gRXh0ZW5kIHRoZSBiYXNlIG9iamVjdFxuXHRcdFx0Zm9yICggbmFtZSBpbiBvcHRpb25zICkge1xuXHRcdFx0XHRjb3B5ID0gb3B0aW9uc1sgbmFtZSBdO1xuXG5cdFx0XHRcdC8vIFByZXZlbnQgT2JqZWN0LnByb3RvdHlwZSBwb2xsdXRpb25cblx0XHRcdFx0Ly8gUHJldmVudCBuZXZlci1lbmRpbmcgbG9vcFxuXHRcdFx0XHRpZiAoIG5hbWUgPT09IFwiX19wcm90b19fXCIgfHwgdGFyZ2V0ID09PSBjb3B5ICkge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gUmVjdXJzZSBpZiB3ZSdyZSBtZXJnaW5nIHBsYWluIG9iamVjdHMgb3IgYXJyYXlzXG5cdFx0XHRcdGlmICggZGVlcCAmJiBjb3B5ICYmICggalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvcHkgKSB8fFxuXHRcdFx0XHRcdCggY29weUlzQXJyYXkgPSBBcnJheS5pc0FycmF5KCBjb3B5ICkgKSApICkge1xuXHRcdFx0XHRcdHNyYyA9IHRhcmdldFsgbmFtZSBdO1xuXG5cdFx0XHRcdFx0Ly8gRW5zdXJlIHByb3BlciB0eXBlIGZvciB0aGUgc291cmNlIHZhbHVlXG5cdFx0XHRcdFx0aWYgKCBjb3B5SXNBcnJheSAmJiAhQXJyYXkuaXNBcnJheSggc3JjICkgKSB7XG5cdFx0XHRcdFx0XHRjbG9uZSA9IFtdO1xuXHRcdFx0XHRcdH0gZWxzZSBpZiAoICFjb3B5SXNBcnJheSAmJiAhalF1ZXJ5LmlzUGxhaW5PYmplY3QoIHNyYyApICkge1xuXHRcdFx0XHRcdFx0Y2xvbmUgPSB7fTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0Y2xvbmUgPSBzcmM7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGNvcHlJc0FycmF5ID0gZmFsc2U7XG5cblx0XHRcdFx0XHQvLyBOZXZlciBtb3ZlIG9yaWdpbmFsIG9iamVjdHMsIGNsb25lIHRoZW1cblx0XHRcdFx0XHR0YXJnZXRbIG5hbWUgXSA9IGpRdWVyeS5leHRlbmQoIGRlZXAsIGNsb25lLCBjb3B5ICk7XG5cblx0XHRcdFx0Ly8gRG9uJ3QgYnJpbmcgaW4gdW5kZWZpbmVkIHZhbHVlc1xuXHRcdFx0XHR9IGVsc2UgaWYgKCBjb3B5ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0dGFyZ2V0WyBuYW1lIF0gPSBjb3B5O1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gUmV0dXJuIHRoZSBtb2RpZmllZCBvYmplY3Rcblx0cmV0dXJuIHRhcmdldDtcbn07XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBVbmlxdWUgZm9yIGVhY2ggY29weSBvZiBqUXVlcnkgb24gdGhlIHBhZ2Vcblx0ZXhwYW5kbzogXCJqUXVlcnlcIiArICggdmVyc2lvbiArIE1hdGgucmFuZG9tKCkgKS5yZXBsYWNlKCAvXFxEL2csIFwiXCIgKSxcblxuXHQvLyBBc3N1bWUgalF1ZXJ5IGlzIHJlYWR5IHdpdGhvdXQgdGhlIHJlYWR5IG1vZHVsZVxuXHRpc1JlYWR5OiB0cnVlLFxuXG5cdGVycm9yOiBmdW5jdGlvbiggbXNnICkge1xuXHRcdHRocm93IG5ldyBFcnJvciggbXNnICk7XG5cdH0sXG5cblx0bm9vcDogZnVuY3Rpb24oKSB7fSxcblxuXHRpc1BsYWluT2JqZWN0OiBmdW5jdGlvbiggb2JqICkge1xuXHRcdHZhciBwcm90bywgQ3RvcjtcblxuXHRcdC8vIERldGVjdCBvYnZpb3VzIG5lZ2F0aXZlc1xuXHRcdC8vIFVzZSB0b1N0cmluZyBpbnN0ZWFkIG9mIGpRdWVyeS50eXBlIHRvIGNhdGNoIGhvc3Qgb2JqZWN0c1xuXHRcdGlmICggIW9iaiB8fCB0b1N0cmluZy5jYWxsKCBvYmogKSAhPT0gXCJbb2JqZWN0IE9iamVjdF1cIiApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHRwcm90byA9IGdldFByb3RvKCBvYmogKTtcblxuXHRcdC8vIE9iamVjdHMgd2l0aCBubyBwcm90b3R5cGUgKGUuZy4sIGBPYmplY3QuY3JlYXRlKCBudWxsIClgKSBhcmUgcGxhaW5cblx0XHRpZiAoICFwcm90byApIHtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblxuXHRcdC8vIE9iamVjdHMgd2l0aCBwcm90b3R5cGUgYXJlIHBsYWluIGlmZiB0aGV5IHdlcmUgY29uc3RydWN0ZWQgYnkgYSBnbG9iYWwgT2JqZWN0IGZ1bmN0aW9uXG5cdFx0Q3RvciA9IGhhc093bi5jYWxsKCBwcm90bywgXCJjb25zdHJ1Y3RvclwiICkgJiYgcHJvdG8uY29uc3RydWN0b3I7XG5cdFx0cmV0dXJuIHR5cGVvZiBDdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgZm5Ub1N0cmluZy5jYWxsKCBDdG9yICkgPT09IE9iamVjdEZ1bmN0aW9uU3RyaW5nO1xuXHR9LFxuXG5cdGlzRW1wdHlPYmplY3Q6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0dmFyIG5hbWU7XG5cblx0XHRmb3IgKCBuYW1lIGluIG9iaiApIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH0sXG5cblx0Ly8gRXZhbHVhdGVzIGEgc2NyaXB0IGluIGEgcHJvdmlkZWQgY29udGV4dDsgZmFsbHMgYmFjayB0byB0aGUgZ2xvYmFsIG9uZVxuXHQvLyBpZiBub3Qgc3BlY2lmaWVkLlxuXHRnbG9iYWxFdmFsOiBmdW5jdGlvbiggY29kZSwgb3B0aW9ucywgZG9jICkge1xuXHRcdERPTUV2YWwoIGNvZGUsIHsgbm9uY2U6IG9wdGlvbnMgJiYgb3B0aW9ucy5ub25jZSB9LCBkb2MgKTtcblx0fSxcblxuXHRlYWNoOiBmdW5jdGlvbiggb2JqLCBjYWxsYmFjayApIHtcblx0XHR2YXIgbGVuZ3RoLCBpID0gMDtcblxuXHRcdGlmICggaXNBcnJheUxpa2UoIG9iaiApICkge1xuXHRcdFx0bGVuZ3RoID0gb2JqLmxlbmd0aDtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSsrICkge1xuXHRcdFx0XHRpZiAoIGNhbGxiYWNrLmNhbGwoIG9ialsgaSBdLCBpLCBvYmpbIGkgXSApID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRmb3IgKCBpIGluIG9iaiApIHtcblx0XHRcdFx0aWYgKCBjYWxsYmFjay5jYWxsKCBvYmpbIGkgXSwgaSwgb2JqWyBpIF0gKSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gb2JqO1xuXHR9LFxuXG5cdC8vIHJlc3VsdHMgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHlcblx0bWFrZUFycmF5OiBmdW5jdGlvbiggYXJyLCByZXN1bHRzICkge1xuXHRcdHZhciByZXQgPSByZXN1bHRzIHx8IFtdO1xuXG5cdFx0aWYgKCBhcnIgIT0gbnVsbCApIHtcblx0XHRcdGlmICggaXNBcnJheUxpa2UoIE9iamVjdCggYXJyICkgKSApIHtcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCByZXQsXG5cdFx0XHRcdFx0dHlwZW9mIGFyciA9PT0gXCJzdHJpbmdcIiA/XG5cdFx0XHRcdFx0XHRbIGFyciBdIDogYXJyXG5cdFx0XHRcdCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRwdXNoLmNhbGwoIHJldCwgYXJyICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJldDtcblx0fSxcblxuXHRpbkFycmF5OiBmdW5jdGlvbiggZWxlbSwgYXJyLCBpICkge1xuXHRcdHJldHVybiBhcnIgPT0gbnVsbCA/IC0xIDogaW5kZXhPZi5jYWxsKCBhcnIsIGVsZW0sIGkgKTtcblx0fSxcblxuXHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRtZXJnZTogZnVuY3Rpb24oIGZpcnN0LCBzZWNvbmQgKSB7XG5cdFx0dmFyIGxlbiA9ICtzZWNvbmQubGVuZ3RoLFxuXHRcdFx0aiA9IDAsXG5cdFx0XHRpID0gZmlyc3QubGVuZ3RoO1xuXG5cdFx0Zm9yICggOyBqIDwgbGVuOyBqKysgKSB7XG5cdFx0XHRmaXJzdFsgaSsrIF0gPSBzZWNvbmRbIGogXTtcblx0XHR9XG5cblx0XHRmaXJzdC5sZW5ndGggPSBpO1xuXG5cdFx0cmV0dXJuIGZpcnN0O1xuXHR9LFxuXG5cdGdyZXA6IGZ1bmN0aW9uKCBlbGVtcywgY2FsbGJhY2ssIGludmVydCApIHtcblx0XHR2YXIgY2FsbGJhY2tJbnZlcnNlLFxuXHRcdFx0bWF0Y2hlcyA9IFtdLFxuXHRcdFx0aSA9IDAsXG5cdFx0XHRsZW5ndGggPSBlbGVtcy5sZW5ndGgsXG5cdFx0XHRjYWxsYmFja0V4cGVjdCA9ICFpbnZlcnQ7XG5cblx0XHQvLyBHbyB0aHJvdWdoIHRoZSBhcnJheSwgb25seSBzYXZpbmcgdGhlIGl0ZW1zXG5cdFx0Ly8gdGhhdCBwYXNzIHRoZSB2YWxpZGF0b3IgZnVuY3Rpb25cblx0XHRmb3IgKCA7IGkgPCBsZW5ndGg7IGkrKyApIHtcblx0XHRcdGNhbGxiYWNrSW52ZXJzZSA9ICFjYWxsYmFjayggZWxlbXNbIGkgXSwgaSApO1xuXHRcdFx0aWYgKCBjYWxsYmFja0ludmVyc2UgIT09IGNhbGxiYWNrRXhwZWN0ICkge1xuXHRcdFx0XHRtYXRjaGVzLnB1c2goIGVsZW1zWyBpIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gbWF0Y2hlcztcblx0fSxcblxuXHQvLyBhcmcgaXMgZm9yIGludGVybmFsIHVzYWdlIG9ubHlcblx0bWFwOiBmdW5jdGlvbiggZWxlbXMsIGNhbGxiYWNrLCBhcmcgKSB7XG5cdFx0dmFyIGxlbmd0aCwgdmFsdWUsXG5cdFx0XHRpID0gMCxcblx0XHRcdHJldCA9IFtdO1xuXG5cdFx0Ly8gR28gdGhyb3VnaCB0aGUgYXJyYXksIHRyYW5zbGF0aW5nIGVhY2ggb2YgdGhlIGl0ZW1zIHRvIHRoZWlyIG5ldyB2YWx1ZXNcblx0XHRpZiAoIGlzQXJyYXlMaWtlKCBlbGVtcyApICkge1xuXHRcdFx0bGVuZ3RoID0gZWxlbXMubGVuZ3RoO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpKysgKSB7XG5cdFx0XHRcdHZhbHVlID0gY2FsbGJhY2soIGVsZW1zWyBpIF0sIGksIGFyZyApO1xuXG5cdFx0XHRcdGlmICggdmFsdWUgIT0gbnVsbCApIHtcblx0XHRcdFx0XHRyZXQucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0Ly8gR28gdGhyb3VnaCBldmVyeSBrZXkgb24gdGhlIG9iamVjdCxcblx0XHR9IGVsc2Uge1xuXHRcdFx0Zm9yICggaSBpbiBlbGVtcyApIHtcblx0XHRcdFx0dmFsdWUgPSBjYWxsYmFjayggZWxlbXNbIGkgXSwgaSwgYXJnICk7XG5cblx0XHRcdFx0aWYgKCB2YWx1ZSAhPSBudWxsICkge1xuXHRcdFx0XHRcdHJldC5wdXNoKCB2YWx1ZSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5c1xuXHRcdHJldHVybiBmbGF0KCByZXQgKTtcblx0fSxcblxuXHQvLyBBIGdsb2JhbCBHVUlEIGNvdW50ZXIgZm9yIG9iamVjdHNcblx0Z3VpZDogMSxcblxuXHQvLyBqUXVlcnkuc3VwcG9ydCBpcyBub3QgdXNlZCBpbiBDb3JlIGJ1dCBvdGhlciBwcm9qZWN0cyBhdHRhY2ggdGhlaXJcblx0Ly8gcHJvcGVydGllcyB0byBpdCBzbyBpdCBuZWVkcyB0byBleGlzdC5cblx0c3VwcG9ydDogc3VwcG9ydFxufSApO1xuXG5pZiAoIHR5cGVvZiBTeW1ib2wgPT09IFwiZnVuY3Rpb25cIiApIHtcblx0alF1ZXJ5LmZuWyBTeW1ib2wuaXRlcmF0b3IgXSA9IGFyclsgU3ltYm9sLml0ZXJhdG9yIF07XG59XG5cbi8vIFBvcHVsYXRlIHRoZSBjbGFzczJ0eXBlIG1hcFxualF1ZXJ5LmVhY2goIFwiQm9vbGVhbiBOdW1iZXIgU3RyaW5nIEZ1bmN0aW9uIEFycmF5IERhdGUgUmVnRXhwIE9iamVjdCBFcnJvciBTeW1ib2xcIi5zcGxpdCggXCIgXCIgKSxcblx0ZnVuY3Rpb24oIF9pLCBuYW1lICkge1xuXHRcdGNsYXNzMnR5cGVbIFwiW29iamVjdCBcIiArIG5hbWUgKyBcIl1cIiBdID0gbmFtZS50b0xvd2VyQ2FzZSgpO1xuXHR9ICk7XG5cbmZ1bmN0aW9uIGlzQXJyYXlMaWtlKCBvYmogKSB7XG5cblx0Ly8gU3VwcG9ydDogcmVhbCBpT1MgOC4yIG9ubHkgKG5vdCByZXByb2R1Y2libGUgaW4gc2ltdWxhdG9yKVxuXHQvLyBgaW5gIGNoZWNrIHVzZWQgdG8gcHJldmVudCBKSVQgZXJyb3IgKGdoLTIxNDUpXG5cdC8vIGhhc093biBpc24ndCB1c2VkIGhlcmUgZHVlIHRvIGZhbHNlIG5lZ2F0aXZlc1xuXHQvLyByZWdhcmRpbmcgTm9kZWxpc3QgbGVuZ3RoIGluIElFXG5cdHZhciBsZW5ndGggPSAhIW9iaiAmJiBcImxlbmd0aFwiIGluIG9iaiAmJiBvYmoubGVuZ3RoLFxuXHRcdHR5cGUgPSB0b1R5cGUoIG9iaiApO1xuXG5cdGlmICggaXNGdW5jdGlvbiggb2JqICkgfHwgaXNXaW5kb3coIG9iaiApICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fVxuXG5cdHJldHVybiB0eXBlID09PSBcImFycmF5XCIgfHwgbGVuZ3RoID09PSAwIHx8XG5cdFx0dHlwZW9mIGxlbmd0aCA9PT0gXCJudW1iZXJcIiAmJiBsZW5ndGggPiAwICYmICggbGVuZ3RoIC0gMSApIGluIG9iajtcbn1cbnZhciBTaXp6bGUgPVxuLyohXG4gKiBTaXp6bGUgQ1NTIFNlbGVjdG9yIEVuZ2luZSB2Mi4zLjZcbiAqIGh0dHBzOi8vc2l6emxlanMuY29tL1xuICpcbiAqIENvcHlyaWdodCBKUyBGb3VuZGF0aW9uIGFuZCBvdGhlciBjb250cmlidXRvcnNcbiAqIFJlbGVhc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZVxuICogaHR0cHM6Ly9qcy5mb3VuZGF0aW9uL1xuICpcbiAqIERhdGU6IDIwMjEtMDItMTZcbiAqL1xuKCBmdW5jdGlvbiggd2luZG93ICkge1xudmFyIGksXG5cdHN1cHBvcnQsXG5cdEV4cHIsXG5cdGdldFRleHQsXG5cdGlzWE1MLFxuXHR0b2tlbml6ZSxcblx0Y29tcGlsZSxcblx0c2VsZWN0LFxuXHRvdXRlcm1vc3RDb250ZXh0LFxuXHRzb3J0SW5wdXQsXG5cdGhhc0R1cGxpY2F0ZSxcblxuXHQvLyBMb2NhbCBkb2N1bWVudCB2YXJzXG5cdHNldERvY3VtZW50LFxuXHRkb2N1bWVudCxcblx0ZG9jRWxlbSxcblx0ZG9jdW1lbnRJc0hUTUwsXG5cdHJidWdneVFTQSxcblx0cmJ1Z2d5TWF0Y2hlcyxcblx0bWF0Y2hlcyxcblx0Y29udGFpbnMsXG5cblx0Ly8gSW5zdGFuY2Utc3BlY2lmaWMgZGF0YVxuXHRleHBhbmRvID0gXCJzaXp6bGVcIiArIDEgKiBuZXcgRGF0ZSgpLFxuXHRwcmVmZXJyZWREb2MgPSB3aW5kb3cuZG9jdW1lbnQsXG5cdGRpcnJ1bnMgPSAwLFxuXHRkb25lID0gMCxcblx0Y2xhc3NDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdHRva2VuQ2FjaGUgPSBjcmVhdGVDYWNoZSgpLFxuXHRjb21waWxlckNhY2hlID0gY3JlYXRlQ2FjaGUoKSxcblx0bm9ubmF0aXZlU2VsZWN0b3JDYWNoZSA9IGNyZWF0ZUNhY2hlKCksXG5cdHNvcnRPcmRlciA9IGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdGlmICggYSA9PT0gYiApIHtcblx0XHRcdGhhc0R1cGxpY2F0ZSA9IHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiAwO1xuXHR9LFxuXG5cdC8vIEluc3RhbmNlIG1ldGhvZHNcblx0aGFzT3duID0gKCB7fSApLmhhc093blByb3BlcnR5LFxuXHRhcnIgPSBbXSxcblx0cG9wID0gYXJyLnBvcCxcblx0cHVzaE5hdGl2ZSA9IGFyci5wdXNoLFxuXHRwdXNoID0gYXJyLnB1c2gsXG5cdHNsaWNlID0gYXJyLnNsaWNlLFxuXG5cdC8vIFVzZSBhIHN0cmlwcGVkLWRvd24gaW5kZXhPZiBhcyBpdCdzIGZhc3RlciB0aGFuIG5hdGl2ZVxuXHQvLyBodHRwczovL2pzcGVyZi5jb20vdGhvci1pbmRleG9mLXZzLWZvci81XG5cdGluZGV4T2YgPSBmdW5jdGlvbiggbGlzdCwgZWxlbSApIHtcblx0XHR2YXIgaSA9IDAsXG5cdFx0XHRsZW4gPSBsaXN0Lmxlbmd0aDtcblx0XHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRcdGlmICggbGlzdFsgaSBdID09PSBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gaTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIC0xO1xuXHR9LFxuXG5cdGJvb2xlYW5zID0gXCJjaGVja2VkfHNlbGVjdGVkfGFzeW5jfGF1dG9mb2N1c3xhdXRvcGxheXxjb250cm9sc3xkZWZlcnxkaXNhYmxlZHxoaWRkZW58XCIgK1xuXHRcdFwiaXNtYXB8bG9vcHxtdWx0aXBsZXxvcGVufHJlYWRvbmx5fHJlcXVpcmVkfHNjb3BlZFwiLFxuXG5cdC8vIFJlZ3VsYXIgZXhwcmVzc2lvbnNcblxuXHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9jc3MzLXNlbGVjdG9ycy8jd2hpdGVzcGFjZVxuXHR3aGl0ZXNwYWNlID0gXCJbXFxcXHgyMFxcXFx0XFxcXHJcXFxcblxcXFxmXVwiLFxuXG5cdC8vIGh0dHBzOi8vd3d3LnczLm9yZy9UUi9jc3Mtc3ludGF4LTMvI2lkZW50LXRva2VuLWRpYWdyYW1cblx0aWRlbnRpZmllciA9IFwiKD86XFxcXFxcXFxbXFxcXGRhLWZBLUZdezEsNn1cIiArIHdoaXRlc3BhY2UgK1xuXHRcdFwiP3xcXFxcXFxcXFteXFxcXHJcXFxcblxcXFxmXXxbXFxcXHctXXxbXlxcMC1cXFxceDdmXSkrXCIsXG5cblx0Ly8gQXR0cmlidXRlIHNlbGVjdG9yczogaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNhdHRyaWJ1dGUtc2VsZWN0b3JzXG5cdGF0dHJpYnV0ZXMgPSBcIlxcXFxbXCIgKyB3aGl0ZXNwYWNlICsgXCIqKFwiICsgaWRlbnRpZmllciArIFwiKSg/OlwiICsgd2hpdGVzcGFjZSArXG5cblx0XHQvLyBPcGVyYXRvciAoY2FwdHVyZSAyKVxuXHRcdFwiKihbKl4kfCF+XT89KVwiICsgd2hpdGVzcGFjZSArXG5cblx0XHQvLyBcIkF0dHJpYnV0ZSB2YWx1ZXMgbXVzdCBiZSBDU1MgaWRlbnRpZmllcnMgW2NhcHR1cmUgNV1cblx0XHQvLyBvciBzdHJpbmdzIFtjYXB0dXJlIDMgb3IgY2FwdHVyZSA0XVwiXG5cdFx0XCIqKD86JygoPzpcXFxcXFxcXC58W15cXFxcXFxcXCddKSopJ3xcXFwiKCg/OlxcXFxcXFxcLnxbXlxcXFxcXFxcXFxcIl0pKilcXFwifChcIiArIGlkZW50aWZpZXIgKyBcIikpfClcIiArXG5cdFx0d2hpdGVzcGFjZSArIFwiKlxcXFxdXCIsXG5cblx0cHNldWRvcyA9IFwiOihcIiArIGlkZW50aWZpZXIgKyBcIikoPzpcXFxcKChcIiArXG5cblx0XHQvLyBUbyByZWR1Y2UgdGhlIG51bWJlciBvZiBzZWxlY3RvcnMgbmVlZGluZyB0b2tlbml6ZSBpbiB0aGUgcHJlRmlsdGVyLCBwcmVmZXIgYXJndW1lbnRzOlxuXHRcdC8vIDEuIHF1b3RlZCAoY2FwdHVyZSAzOyBjYXB0dXJlIDQgb3IgY2FwdHVyZSA1KVxuXHRcdFwiKCcoKD86XFxcXFxcXFwufFteXFxcXFxcXFwnXSkqKSd8XFxcIigoPzpcXFxcXFxcXC58W15cXFxcXFxcXFxcXCJdKSopXFxcIil8XCIgK1xuXG5cdFx0Ly8gMi4gc2ltcGxlIChjYXB0dXJlIDYpXG5cdFx0XCIoKD86XFxcXFxcXFwufFteXFxcXFxcXFwoKVtcXFxcXV18XCIgKyBhdHRyaWJ1dGVzICsgXCIpKil8XCIgK1xuXG5cdFx0Ly8gMy4gYW55dGhpbmcgZWxzZSAoY2FwdHVyZSAyKVxuXHRcdFwiLipcIiArXG5cdFx0XCIpXFxcXCl8KVwiLFxuXG5cdC8vIExlYWRpbmcgYW5kIG5vbi1lc2NhcGVkIHRyYWlsaW5nIHdoaXRlc3BhY2UsIGNhcHR1cmluZyBzb21lIG5vbi13aGl0ZXNwYWNlIGNoYXJhY3RlcnMgcHJlY2VkaW5nIHRoZSBsYXR0ZXJcblx0cndoaXRlc3BhY2UgPSBuZXcgUmVnRXhwKCB3aGl0ZXNwYWNlICsgXCIrXCIsIFwiZ1wiICksXG5cdHJ0cmltID0gbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICsgXCIrfCgoPzpefFteXFxcXFxcXFxdKSg/OlxcXFxcXFxcLikqKVwiICtcblx0XHR3aGl0ZXNwYWNlICsgXCIrJFwiLCBcImdcIiApLFxuXG5cdHJjb21tYSA9IG5ldyBSZWdFeHAoIFwiXlwiICsgd2hpdGVzcGFjZSArIFwiKixcIiArIHdoaXRlc3BhY2UgKyBcIipcIiApLFxuXHRyY29tYmluYXRvcnMgPSBuZXcgUmVnRXhwKCBcIl5cIiArIHdoaXRlc3BhY2UgKyBcIiooWz4rfl18XCIgKyB3aGl0ZXNwYWNlICsgXCIpXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcIipcIiApLFxuXHRyZGVzY2VuZCA9IG5ldyBSZWdFeHAoIHdoaXRlc3BhY2UgKyBcInw+XCIgKSxcblxuXHRycHNldWRvID0gbmV3IFJlZ0V4cCggcHNldWRvcyApLFxuXHRyaWRlbnRpZmllciA9IG5ldyBSZWdFeHAoIFwiXlwiICsgaWRlbnRpZmllciArIFwiJFwiICksXG5cblx0bWF0Y2hFeHByID0ge1xuXHRcdFwiSURcIjogbmV3IFJlZ0V4cCggXCJeIyhcIiArIGlkZW50aWZpZXIgKyBcIilcIiApLFxuXHRcdFwiQ0xBU1NcIjogbmV3IFJlZ0V4cCggXCJeXFxcXC4oXCIgKyBpZGVudGlmaWVyICsgXCIpXCIgKSxcblx0XHRcIlRBR1wiOiBuZXcgUmVnRXhwKCBcIl4oXCIgKyBpZGVudGlmaWVyICsgXCJ8WypdKVwiICksXG5cdFx0XCJBVFRSXCI6IG5ldyBSZWdFeHAoIFwiXlwiICsgYXR0cmlidXRlcyApLFxuXHRcdFwiUFNFVURPXCI6IG5ldyBSZWdFeHAoIFwiXlwiICsgcHNldWRvcyApLFxuXHRcdFwiQ0hJTERcIjogbmV3IFJlZ0V4cCggXCJeOihvbmx5fGZpcnN0fGxhc3R8bnRofG50aC1sYXN0KS0oY2hpbGR8b2YtdHlwZSkoPzpcXFxcKFwiICtcblx0XHRcdHdoaXRlc3BhY2UgKyBcIiooZXZlbnxvZGR8KChbKy1dfCkoXFxcXGQqKW58KVwiICsgd2hpdGVzcGFjZSArIFwiKig/OihbKy1dfClcIiArXG5cdFx0XHR3aGl0ZXNwYWNlICsgXCIqKFxcXFxkKyl8KSlcIiArIHdoaXRlc3BhY2UgKyBcIipcXFxcKXwpXCIsIFwiaVwiICksXG5cdFx0XCJib29sXCI6IG5ldyBSZWdFeHAoIFwiXig/OlwiICsgYm9vbGVhbnMgKyBcIikkXCIsIFwiaVwiICksXG5cblx0XHQvLyBGb3IgdXNlIGluIGxpYnJhcmllcyBpbXBsZW1lbnRpbmcgLmlzKClcblx0XHQvLyBXZSB1c2UgdGhpcyBmb3IgUE9TIG1hdGNoaW5nIGluIGBzZWxlY3RgXG5cdFx0XCJuZWVkc0NvbnRleHRcIjogbmV3IFJlZ0V4cCggXCJeXCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFwiKls+K35dfDooZXZlbnxvZGR8ZXF8Z3R8bHR8bnRofGZpcnN0fGxhc3QpKD86XFxcXChcIiArIHdoaXRlc3BhY2UgK1xuXHRcdFx0XCIqKCg/Oi1cXFxcZCk/XFxcXGQqKVwiICsgd2hpdGVzcGFjZSArIFwiKlxcXFwpfCkoPz1bXi1dfCQpXCIsIFwiaVwiIClcblx0fSxcblxuXHRyaHRtbCA9IC9IVE1MJC9pLFxuXHRyaW5wdXRzID0gL14oPzppbnB1dHxzZWxlY3R8dGV4dGFyZWF8YnV0dG9uKSQvaSxcblx0cmhlYWRlciA9IC9eaFxcZCQvaSxcblxuXHRybmF0aXZlID0gL15bXntdK1xce1xccypcXFtuYXRpdmUgXFx3LyxcblxuXHQvLyBFYXNpbHktcGFyc2VhYmxlL3JldHJpZXZhYmxlIElEIG9yIFRBRyBvciBDTEFTUyBzZWxlY3RvcnNcblx0cnF1aWNrRXhwciA9IC9eKD86IyhbXFx3LV0rKXwoXFx3Kyl8XFwuKFtcXHctXSspKSQvLFxuXG5cdHJzaWJsaW5nID0gL1srfl0vLFxuXG5cdC8vIENTUyBlc2NhcGVzXG5cdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSL0NTUzIxL3N5bmRhdGEuaHRtbCNlc2NhcGVkLWNoYXJhY3RlcnNcblx0cnVuZXNjYXBlID0gbmV3IFJlZ0V4cCggXCJcXFxcXFxcXFtcXFxcZGEtZkEtRl17MSw2fVwiICsgd2hpdGVzcGFjZSArIFwiP3xcXFxcXFxcXChbXlxcXFxyXFxcXG5cXFxcZl0pXCIsIFwiZ1wiICksXG5cdGZ1bmVzY2FwZSA9IGZ1bmN0aW9uKCBlc2NhcGUsIG5vbkhleCApIHtcblx0XHR2YXIgaGlnaCA9IFwiMHhcIiArIGVzY2FwZS5zbGljZSggMSApIC0gMHgxMDAwMDtcblxuXHRcdHJldHVybiBub25IZXggP1xuXG5cdFx0XHQvLyBTdHJpcCB0aGUgYmFja3NsYXNoIHByZWZpeCBmcm9tIGEgbm9uLWhleCBlc2NhcGUgc2VxdWVuY2Vcblx0XHRcdG5vbkhleCA6XG5cblx0XHRcdC8vIFJlcGxhY2UgYSBoZXhhZGVjaW1hbCBlc2NhcGUgc2VxdWVuY2Ugd2l0aCB0aGUgZW5jb2RlZCBVbmljb2RlIGNvZGUgcG9pbnRcblx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9MTErXG5cdFx0XHQvLyBGb3IgdmFsdWVzIG91dHNpZGUgdGhlIEJhc2ljIE11bHRpbGluZ3VhbCBQbGFuZSAoQk1QKSwgbWFudWFsbHkgY29uc3RydWN0IGFcblx0XHRcdC8vIHN1cnJvZ2F0ZSBwYWlyXG5cdFx0XHRoaWdoIDwgMCA/XG5cdFx0XHRcdFN0cmluZy5mcm9tQ2hhckNvZGUoIGhpZ2ggKyAweDEwMDAwICkgOlxuXHRcdFx0XHRTdHJpbmcuZnJvbUNoYXJDb2RlKCBoaWdoID4+IDEwIHwgMHhEODAwLCBoaWdoICYgMHgzRkYgfCAweERDMDAgKTtcblx0fSxcblxuXHQvLyBDU1Mgc3RyaW5nL2lkZW50aWZpZXIgc2VyaWFsaXphdGlvblxuXHQvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3Nzb20vI2NvbW1vbi1zZXJpYWxpemluZy1pZGlvbXNcblx0cmNzc2VzY2FwZSA9IC8oW1xcMC1cXHgxZlxceDdmXXxeLT9cXGQpfF4tJHxbXlxcMC1cXHgxZlxceDdmLVxcdUZGRkZcXHctXS9nLFxuXHRmY3NzZXNjYXBlID0gZnVuY3Rpb24oIGNoLCBhc0NvZGVQb2ludCApIHtcblx0XHRpZiAoIGFzQ29kZVBvaW50ICkge1xuXG5cdFx0XHQvLyBVKzAwMDAgTlVMTCBiZWNvbWVzIFUrRkZGRCBSRVBMQUNFTUVOVCBDSEFSQUNURVJcblx0XHRcdGlmICggY2ggPT09IFwiXFwwXCIgKSB7XG5cdFx0XHRcdHJldHVybiBcIlxcdUZGRkRcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29udHJvbCBjaGFyYWN0ZXJzIGFuZCAoZGVwZW5kZW50IHVwb24gcG9zaXRpb24pIG51bWJlcnMgZ2V0IGVzY2FwZWQgYXMgY29kZSBwb2ludHNcblx0XHRcdHJldHVybiBjaC5zbGljZSggMCwgLTEgKSArIFwiXFxcXFwiICtcblx0XHRcdFx0Y2guY2hhckNvZGVBdCggY2gubGVuZ3RoIC0gMSApLnRvU3RyaW5nKCAxNiApICsgXCIgXCI7XG5cdFx0fVxuXG5cdFx0Ly8gT3RoZXIgcG90ZW50aWFsbHktc3BlY2lhbCBBU0NJSSBjaGFyYWN0ZXJzIGdldCBiYWNrc2xhc2gtZXNjYXBlZFxuXHRcdHJldHVybiBcIlxcXFxcIiArIGNoO1xuXHR9LFxuXG5cdC8vIFVzZWQgZm9yIGlmcmFtZXNcblx0Ly8gU2VlIHNldERvY3VtZW50KClcblx0Ly8gUmVtb3ZpbmcgdGhlIGZ1bmN0aW9uIHdyYXBwZXIgY2F1c2VzIGEgXCJQZXJtaXNzaW9uIERlbmllZFwiXG5cdC8vIGVycm9yIGluIElFXG5cdHVubG9hZEhhbmRsZXIgPSBmdW5jdGlvbigpIHtcblx0XHRzZXREb2N1bWVudCgpO1xuXHR9LFxuXG5cdGluRGlzYWJsZWRGaWVsZHNldCA9IGFkZENvbWJpbmF0b3IoXG5cdFx0ZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gdHJ1ZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiZmllbGRzZXRcIjtcblx0XHR9LFxuXHRcdHsgZGlyOiBcInBhcmVudE5vZGVcIiwgbmV4dDogXCJsZWdlbmRcIiB9XG5cdCk7XG5cbi8vIE9wdGltaXplIGZvciBwdXNoLmFwcGx5KCBfLCBOb2RlTGlzdCApXG50cnkge1xuXHRwdXNoLmFwcGx5KFxuXHRcdCggYXJyID0gc2xpY2UuY2FsbCggcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMgKSApLFxuXHRcdHByZWZlcnJlZERvYy5jaGlsZE5vZGVzXG5cdCk7XG5cblx0Ly8gU3VwcG9ydDogQW5kcm9pZDw0LjBcblx0Ly8gRGV0ZWN0IHNpbGVudGx5IGZhaWxpbmcgcHVzaC5hcHBseVxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG5cdGFyclsgcHJlZmVycmVkRG9jLmNoaWxkTm9kZXMubGVuZ3RoIF0ubm9kZVR5cGU7XG59IGNhdGNoICggZSApIHtcblx0cHVzaCA9IHsgYXBwbHk6IGFyci5sZW5ndGggP1xuXG5cdFx0Ly8gTGV2ZXJhZ2Ugc2xpY2UgaWYgcG9zc2libGVcblx0XHRmdW5jdGlvbiggdGFyZ2V0LCBlbHMgKSB7XG5cdFx0XHRwdXNoTmF0aXZlLmFwcGx5KCB0YXJnZXQsIHNsaWNlLmNhbGwoIGVscyApICk7XG5cdFx0fSA6XG5cblx0XHQvLyBTdXBwb3J0OiBJRTw5XG5cdFx0Ly8gT3RoZXJ3aXNlIGFwcGVuZCBkaXJlY3RseVxuXHRcdGZ1bmN0aW9uKCB0YXJnZXQsIGVscyApIHtcblx0XHRcdHZhciBqID0gdGFyZ2V0Lmxlbmd0aCxcblx0XHRcdFx0aSA9IDA7XG5cblx0XHRcdC8vIENhbid0IHRydXN0IE5vZGVMaXN0Lmxlbmd0aFxuXHRcdFx0d2hpbGUgKCAoIHRhcmdldFsgaisrIF0gPSBlbHNbIGkrKyBdICkgKSB7fVxuXHRcdFx0dGFyZ2V0Lmxlbmd0aCA9IGogLSAxO1xuXHRcdH1cblx0fTtcbn1cblxuZnVuY3Rpb24gU2l6emxlKCBzZWxlY3RvciwgY29udGV4dCwgcmVzdWx0cywgc2VlZCApIHtcblx0dmFyIG0sIGksIGVsZW0sIG5pZCwgbWF0Y2gsIGdyb3VwcywgbmV3U2VsZWN0b3IsXG5cdFx0bmV3Q29udGV4dCA9IGNvbnRleHQgJiYgY29udGV4dC5vd25lckRvY3VtZW50LFxuXG5cdFx0Ly8gbm9kZVR5cGUgZGVmYXVsdHMgdG8gOSwgc2luY2UgY29udGV4dCBkZWZhdWx0cyB0byBkb2N1bWVudFxuXHRcdG5vZGVUeXBlID0gY29udGV4dCA/IGNvbnRleHQubm9kZVR5cGUgOiA5O1xuXG5cdHJlc3VsdHMgPSByZXN1bHRzIHx8IFtdO1xuXG5cdC8vIFJldHVybiBlYXJseSBmcm9tIGNhbGxzIHdpdGggaW52YWxpZCBzZWxlY3RvciBvciBjb250ZXh0XG5cdGlmICggdHlwZW9mIHNlbGVjdG9yICE9PSBcInN0cmluZ1wiIHx8ICFzZWxlY3RvciB8fFxuXHRcdG5vZGVUeXBlICE9PSAxICYmIG5vZGVUeXBlICE9PSA5ICYmIG5vZGVUeXBlICE9PSAxMSApIHtcblxuXHRcdHJldHVybiByZXN1bHRzO1xuXHR9XG5cblx0Ly8gVHJ5IHRvIHNob3J0Y3V0IGZpbmQgb3BlcmF0aW9ucyAoYXMgb3Bwb3NlZCB0byBmaWx0ZXJzKSBpbiBIVE1MIGRvY3VtZW50c1xuXHRpZiAoICFzZWVkICkge1xuXHRcdHNldERvY3VtZW50KCBjb250ZXh0ICk7XG5cdFx0Y29udGV4dCA9IGNvbnRleHQgfHwgZG9jdW1lbnQ7XG5cblx0XHRpZiAoIGRvY3VtZW50SXNIVE1MICkge1xuXG5cdFx0XHQvLyBJZiB0aGUgc2VsZWN0b3IgaXMgc3VmZmljaWVudGx5IHNpbXBsZSwgdHJ5IHVzaW5nIGEgXCJnZXQqQnkqXCIgRE9NIG1ldGhvZFxuXHRcdFx0Ly8gKGV4Y2VwdGluZyBEb2N1bWVudEZyYWdtZW50IGNvbnRleHQsIHdoZXJlIHRoZSBtZXRob2RzIGRvbid0IGV4aXN0KVxuXHRcdFx0aWYgKCBub2RlVHlwZSAhPT0gMTEgJiYgKCBtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKSApICkge1xuXG5cdFx0XHRcdC8vIElEIHNlbGVjdG9yXG5cdFx0XHRcdGlmICggKCBtID0gbWF0Y2hbIDEgXSApICkge1xuXG5cdFx0XHRcdFx0Ly8gRG9jdW1lbnQgY29udGV4dFxuXHRcdFx0XHRcdGlmICggbm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoICggZWxlbSA9IGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSApICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFLCBPcGVyYSwgV2Via2l0XG5cdFx0XHRcdFx0XHRcdC8vIFRPRE86IGlkZW50aWZ5IHZlcnNpb25zXG5cdFx0XHRcdFx0XHRcdC8vIGdldEVsZW1lbnRCeUlkIGNhbiBtYXRjaCBlbGVtZW50cyBieSBuYW1lIGluc3RlYWQgb2YgSURcblx0XHRcdFx0XHRcdFx0aWYgKCBlbGVtLmlkID09PSBtICkge1xuXHRcdFx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIEVsZW1lbnQgY29udGV4dFxuXHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFLCBPcGVyYSwgV2Via2l0XG5cdFx0XHRcdFx0XHQvLyBUT0RPOiBpZGVudGlmeSB2ZXJzaW9uc1xuXHRcdFx0XHRcdFx0Ly8gZ2V0RWxlbWVudEJ5SWQgY2FuIG1hdGNoIGVsZW1lbnRzIGJ5IG5hbWUgaW5zdGVhZCBvZiBJRFxuXHRcdFx0XHRcdFx0aWYgKCBuZXdDb250ZXh0ICYmICggZWxlbSA9IG5ld0NvbnRleHQuZ2V0RWxlbWVudEJ5SWQoIG0gKSApICYmXG5cdFx0XHRcdFx0XHRcdGNvbnRhaW5zKCBjb250ZXh0LCBlbGVtICkgJiZcblx0XHRcdFx0XHRcdFx0ZWxlbS5pZCA9PT0gbSApIHtcblxuXHRcdFx0XHRcdFx0XHRyZXN1bHRzLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFR5cGUgc2VsZWN0b3Jcblx0XHRcdFx0fSBlbHNlIGlmICggbWF0Y2hbIDIgXSApIHtcblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBjb250ZXh0LmdldEVsZW1lbnRzQnlUYWdOYW1lKCBzZWxlY3RvciApICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cblx0XHRcdFx0Ly8gQ2xhc3Mgc2VsZWN0b3Jcblx0XHRcdFx0fSBlbHNlIGlmICggKCBtID0gbWF0Y2hbIDMgXSApICYmIHN1cHBvcnQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSAmJlxuXHRcdFx0XHRcdGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSApIHtcblxuXHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIGNvbnRleHQuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSggbSApICk7XG5cdFx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gVGFrZSBhZHZhbnRhZ2Ugb2YgcXVlcnlTZWxlY3RvckFsbFxuXHRcdFx0aWYgKCBzdXBwb3J0LnFzYSAmJlxuXHRcdFx0XHQhbm9ubmF0aXZlU2VsZWN0b3JDYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdICYmXG5cdFx0XHRcdCggIXJidWdneVFTQSB8fCAhcmJ1Z2d5UVNBLnRlc3QoIHNlbGVjdG9yICkgKSAmJlxuXG5cdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDggb25seVxuXHRcdFx0XHQvLyBFeGNsdWRlIG9iamVjdCBlbGVtZW50c1xuXHRcdFx0XHQoIG5vZGVUeXBlICE9PSAxIHx8IGNvbnRleHQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSAhPT0gXCJvYmplY3RcIiApICkge1xuXG5cdFx0XHRcdG5ld1NlbGVjdG9yID0gc2VsZWN0b3I7XG5cdFx0XHRcdG5ld0NvbnRleHQgPSBjb250ZXh0O1xuXG5cdFx0XHRcdC8vIHFTQSBjb25zaWRlcnMgZWxlbWVudHMgb3V0c2lkZSBhIHNjb3Bpbmcgcm9vdCB3aGVuIGV2YWx1YXRpbmcgY2hpbGQgb3Jcblx0XHRcdFx0Ly8gZGVzY2VuZGFudCBjb21iaW5hdG9ycywgd2hpY2ggaXMgbm90IHdoYXQgd2Ugd2FudC5cblx0XHRcdFx0Ly8gSW4gc3VjaCBjYXNlcywgd2Ugd29yayBhcm91bmQgdGhlIGJlaGF2aW9yIGJ5IHByZWZpeGluZyBldmVyeSBzZWxlY3RvciBpbiB0aGVcblx0XHRcdFx0Ly8gbGlzdCB3aXRoIGFuIElEIHNlbGVjdG9yIHJlZmVyZW5jaW5nIHRoZSBzY29wZSBjb250ZXh0LlxuXHRcdFx0XHQvLyBUaGUgdGVjaG5pcXVlIGhhcyB0byBiZSB1c2VkIGFzIHdlbGwgd2hlbiBhIGxlYWRpbmcgY29tYmluYXRvciBpcyB1c2VkXG5cdFx0XHRcdC8vIGFzIHN1Y2ggc2VsZWN0b3JzIGFyZSBub3QgcmVjb2duaXplZCBieSBxdWVyeVNlbGVjdG9yQWxsLlxuXHRcdFx0XHQvLyBUaGFua3MgdG8gQW5kcmV3IER1cG9udCBmb3IgdGhpcyB0ZWNobmlxdWUuXG5cdFx0XHRcdGlmICggbm9kZVR5cGUgPT09IDEgJiZcblx0XHRcdFx0XHQoIHJkZXNjZW5kLnRlc3QoIHNlbGVjdG9yICkgfHwgcmNvbWJpbmF0b3JzLnRlc3QoIHNlbGVjdG9yICkgKSApIHtcblxuXHRcdFx0XHRcdC8vIEV4cGFuZCBjb250ZXh0IGZvciBzaWJsaW5nIHNlbGVjdG9yc1xuXHRcdFx0XHRcdG5ld0NvbnRleHQgPSByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fFxuXHRcdFx0XHRcdFx0Y29udGV4dDtcblxuXHRcdFx0XHRcdC8vIFdlIGNhbiB1c2UgOnNjb3BlIGluc3RlYWQgb2YgdGhlIElEIGhhY2sgaWYgdGhlIGJyb3dzZXJcblx0XHRcdFx0XHQvLyBzdXBwb3J0cyBpdCAmIGlmIHdlJ3JlIG5vdCBjaGFuZ2luZyB0aGUgY29udGV4dC5cblx0XHRcdFx0XHRpZiAoIG5ld0NvbnRleHQgIT09IGNvbnRleHQgfHwgIXN1cHBvcnQuc2NvcGUgKSB7XG5cblx0XHRcdFx0XHRcdC8vIENhcHR1cmUgdGhlIGNvbnRleHQgSUQsIHNldHRpbmcgaXQgZmlyc3QgaWYgbmVjZXNzYXJ5XG5cdFx0XHRcdFx0XHRpZiAoICggbmlkID0gY29udGV4dC5nZXRBdHRyaWJ1dGUoIFwiaWRcIiApICkgKSB7XG5cdFx0XHRcdFx0XHRcdG5pZCA9IG5pZC5yZXBsYWNlKCByY3NzZXNjYXBlLCBmY3NzZXNjYXBlICk7XG5cdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRjb250ZXh0LnNldEF0dHJpYnV0ZSggXCJpZFwiLCAoIG5pZCA9IGV4cGFuZG8gKSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFByZWZpeCBldmVyeSBzZWxlY3RvciBpbiB0aGUgbGlzdFxuXHRcdFx0XHRcdGdyb3VwcyA9IHRva2VuaXplKCBzZWxlY3RvciApO1xuXHRcdFx0XHRcdGkgPSBncm91cHMubGVuZ3RoO1xuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0Z3JvdXBzWyBpIF0gPSAoIG5pZCA/IFwiI1wiICsgbmlkIDogXCI6c2NvcGVcIiApICsgXCIgXCIgK1xuXHRcdFx0XHRcdFx0XHR0b1NlbGVjdG9yKCBncm91cHNbIGkgXSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRuZXdTZWxlY3RvciA9IGdyb3Vwcy5qb2luKCBcIixcIiApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLFxuXHRcdFx0XHRcdFx0bmV3Q29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCBuZXdTZWxlY3RvciApXG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0fSBjYXRjaCAoIHFzYUVycm9yICkge1xuXHRcdFx0XHRcdG5vbm5hdGl2ZVNlbGVjdG9yQ2FjaGUoIHNlbGVjdG9yLCB0cnVlICk7XG5cdFx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdFx0aWYgKCBuaWQgPT09IGV4cGFuZG8gKSB7XG5cdFx0XHRcdFx0XHRjb250ZXh0LnJlbW92ZUF0dHJpYnV0ZSggXCJpZFwiICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQWxsIG90aGVyc1xuXHRyZXR1cm4gc2VsZWN0KCBzZWxlY3Rvci5yZXBsYWNlKCBydHJpbSwgXCIkMVwiICksIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKTtcbn1cblxuLyoqXG4gKiBDcmVhdGUga2V5LXZhbHVlIGNhY2hlcyBvZiBsaW1pdGVkIHNpemVcbiAqIEByZXR1cm5zIHtmdW5jdGlvbihzdHJpbmcsIG9iamVjdCl9IFJldHVybnMgdGhlIE9iamVjdCBkYXRhIGFmdGVyIHN0b3JpbmcgaXQgb24gaXRzZWxmIHdpdGhcbiAqXHRwcm9wZXJ0eSBuYW1lIHRoZSAoc3BhY2Utc3VmZml4ZWQpIHN0cmluZyBhbmQgKGlmIHRoZSBjYWNoZSBpcyBsYXJnZXIgdGhhbiBFeHByLmNhY2hlTGVuZ3RoKVxuICpcdGRlbGV0aW5nIHRoZSBvbGRlc3QgZW50cnlcbiAqL1xuZnVuY3Rpb24gY3JlYXRlQ2FjaGUoKSB7XG5cdHZhciBrZXlzID0gW107XG5cblx0ZnVuY3Rpb24gY2FjaGUoIGtleSwgdmFsdWUgKSB7XG5cblx0XHQvLyBVc2UgKGtleSArIFwiIFwiKSB0byBhdm9pZCBjb2xsaXNpb24gd2l0aCBuYXRpdmUgcHJvdG90eXBlIHByb3BlcnRpZXMgKHNlZSBJc3N1ZSAjMTU3KVxuXHRcdGlmICgga2V5cy5wdXNoKCBrZXkgKyBcIiBcIiApID4gRXhwci5jYWNoZUxlbmd0aCApIHtcblxuXHRcdFx0Ly8gT25seSBrZWVwIHRoZSBtb3N0IHJlY2VudCBlbnRyaWVzXG5cdFx0XHRkZWxldGUgY2FjaGVbIGtleXMuc2hpZnQoKSBdO1xuXHRcdH1cblx0XHRyZXR1cm4gKCBjYWNoZVsga2V5ICsgXCIgXCIgXSA9IHZhbHVlICk7XG5cdH1cblx0cmV0dXJuIGNhY2hlO1xufVxuXG4vKipcbiAqIE1hcmsgYSBmdW5jdGlvbiBmb3Igc3BlY2lhbCB1c2UgYnkgU2l6emxlXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBUaGUgZnVuY3Rpb24gdG8gbWFya1xuICovXG5mdW5jdGlvbiBtYXJrRnVuY3Rpb24oIGZuICkge1xuXHRmblsgZXhwYW5kbyBdID0gdHJ1ZTtcblx0cmV0dXJuIGZuO1xufVxuXG4vKipcbiAqIFN1cHBvcnQgdGVzdGluZyB1c2luZyBhbiBlbGVtZW50XG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBmbiBQYXNzZWQgdGhlIGNyZWF0ZWQgZWxlbWVudCBhbmQgcmV0dXJucyBhIGJvb2xlYW4gcmVzdWx0XG4gKi9cbmZ1bmN0aW9uIGFzc2VydCggZm4gKSB7XG5cdHZhciBlbCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZmllbGRzZXRcIiApO1xuXG5cdHRyeSB7XG5cdFx0cmV0dXJuICEhZm4oIGVsICk7XG5cdH0gY2F0Y2ggKCBlICkge1xuXHRcdHJldHVybiBmYWxzZTtcblx0fSBmaW5hbGx5IHtcblxuXHRcdC8vIFJlbW92ZSBmcm9tIGl0cyBwYXJlbnQgYnkgZGVmYXVsdFxuXHRcdGlmICggZWwucGFyZW50Tm9kZSApIHtcblx0XHRcdGVsLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoIGVsICk7XG5cdFx0fVxuXG5cdFx0Ly8gcmVsZWFzZSBtZW1vcnkgaW4gSUVcblx0XHRlbCA9IG51bGw7XG5cdH1cbn1cblxuLyoqXG4gKiBBZGRzIHRoZSBzYW1lIGhhbmRsZXIgZm9yIGFsbCBvZiB0aGUgc3BlY2lmaWVkIGF0dHJzXG4gKiBAcGFyYW0ge1N0cmluZ30gYXR0cnMgUGlwZS1zZXBhcmF0ZWQgbGlzdCBvZiBhdHRyaWJ1dGVzXG4gKiBAcGFyYW0ge0Z1bmN0aW9ufSBoYW5kbGVyIFRoZSBtZXRob2QgdGhhdCB3aWxsIGJlIGFwcGxpZWRcbiAqL1xuZnVuY3Rpb24gYWRkSGFuZGxlKCBhdHRycywgaGFuZGxlciApIHtcblx0dmFyIGFyciA9IGF0dHJzLnNwbGl0KCBcInxcIiApLFxuXHRcdGkgPSBhcnIubGVuZ3RoO1xuXG5cdHdoaWxlICggaS0tICkge1xuXHRcdEV4cHIuYXR0ckhhbmRsZVsgYXJyWyBpIF0gXSA9IGhhbmRsZXI7XG5cdH1cbn1cblxuLyoqXG4gKiBDaGVja3MgZG9jdW1lbnQgb3JkZXIgb2YgdHdvIHNpYmxpbmdzXG4gKiBAcGFyYW0ge0VsZW1lbnR9IGFcbiAqIEBwYXJhbSB7RWxlbWVudH0gYlxuICogQHJldHVybnMge051bWJlcn0gUmV0dXJucyBsZXNzIHRoYW4gMCBpZiBhIHByZWNlZGVzIGIsIGdyZWF0ZXIgdGhhbiAwIGlmIGEgZm9sbG93cyBiXG4gKi9cbmZ1bmN0aW9uIHNpYmxpbmdDaGVjayggYSwgYiApIHtcblx0dmFyIGN1ciA9IGIgJiYgYSxcblx0XHRkaWZmID0gY3VyICYmIGEubm9kZVR5cGUgPT09IDEgJiYgYi5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0YS5zb3VyY2VJbmRleCAtIGIuc291cmNlSW5kZXg7XG5cblx0Ly8gVXNlIElFIHNvdXJjZUluZGV4IGlmIGF2YWlsYWJsZSBvbiBib3RoIG5vZGVzXG5cdGlmICggZGlmZiApIHtcblx0XHRyZXR1cm4gZGlmZjtcblx0fVxuXG5cdC8vIENoZWNrIGlmIGIgZm9sbG93cyBhXG5cdGlmICggY3VyICkge1xuXHRcdHdoaWxlICggKCBjdXIgPSBjdXIubmV4dFNpYmxpbmcgKSApIHtcblx0XHRcdGlmICggY3VyID09PSBiICkge1xuXHRcdFx0XHRyZXR1cm4gLTE7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGEgPyAxIDogLTE7XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBpbnB1dCB0eXBlc1xuICogQHBhcmFtIHtTdHJpbmd9IHR5cGVcbiAqL1xuZnVuY3Rpb24gY3JlYXRlSW5wdXRQc2V1ZG8oIHR5cGUgKSB7XG5cdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgbmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRyZXR1cm4gbmFtZSA9PT0gXCJpbnB1dFwiICYmIGVsZW0udHlwZSA9PT0gdHlwZTtcblx0fTtcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZnVuY3Rpb24gdG8gdXNlIGluIHBzZXVkb3MgZm9yIGJ1dHRvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfSB0eXBlXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZUJ1dHRvblBzZXVkbyggdHlwZSApIHtcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHZhciBuYW1lID0gZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO1xuXHRcdHJldHVybiAoIG5hbWUgPT09IFwiaW5wdXRcIiB8fCBuYW1lID09PSBcImJ1dHRvblwiICkgJiYgZWxlbS50eXBlID09PSB0eXBlO1xuXHR9O1xufVxuXG4vKipcbiAqIFJldHVybnMgYSBmdW5jdGlvbiB0byB1c2UgaW4gcHNldWRvcyBmb3IgOmVuYWJsZWQvOmRpc2FibGVkXG4gKiBAcGFyYW0ge0Jvb2xlYW59IGRpc2FibGVkIHRydWUgZm9yIDpkaXNhYmxlZDsgZmFsc2UgZm9yIDplbmFibGVkXG4gKi9cbmZ1bmN0aW9uIGNyZWF0ZURpc2FibGVkUHNldWRvKCBkaXNhYmxlZCApIHtcblxuXHQvLyBLbm93biA6ZGlzYWJsZWQgZmFsc2UgcG9zaXRpdmVzOiBmaWVsZHNldFtkaXNhYmxlZF0gPiBsZWdlbmQ6bnRoLW9mLXR5cGUobisyKSA6Y2FuLWRpc2FibGVcblx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gT25seSBjZXJ0YWluIGVsZW1lbnRzIGNhbiBtYXRjaCA6ZW5hYmxlZCBvciA6ZGlzYWJsZWRcblx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zY3JpcHRpbmcuaHRtbCNzZWxlY3Rvci1lbmFibGVkXG5cdFx0Ly8gaHR0cHM6Ly9odG1sLnNwZWMud2hhdHdnLm9yZy9tdWx0aXBhZ2Uvc2NyaXB0aW5nLmh0bWwjc2VsZWN0b3ItZGlzYWJsZWRcblx0XHRpZiAoIFwiZm9ybVwiIGluIGVsZW0gKSB7XG5cblx0XHRcdC8vIENoZWNrIGZvciBpbmhlcml0ZWQgZGlzYWJsZWRuZXNzIG9uIHJlbGV2YW50IG5vbi1kaXNhYmxlZCBlbGVtZW50czpcblx0XHRcdC8vICogbGlzdGVkIGZvcm0tYXNzb2NpYXRlZCBlbGVtZW50cyBpbiBhIGRpc2FibGVkIGZpZWxkc2V0XG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY2F0ZWdvcnktbGlzdGVkXG5cdFx0XHQvLyAgIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvbXVsdGlwYWdlL2Zvcm1zLmh0bWwjY29uY2VwdC1mZS1kaXNhYmxlZFxuXHRcdFx0Ly8gKiBvcHRpb24gZWxlbWVudHMgaW4gYSBkaXNhYmxlZCBvcHRncm91cFxuXHRcdFx0Ly8gICBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9mb3Jtcy5odG1sI2NvbmNlcHQtb3B0aW9uLWRpc2FibGVkXG5cdFx0XHQvLyBBbGwgc3VjaCBlbGVtZW50cyBoYXZlIGEgXCJmb3JtXCIgcHJvcGVydHkuXG5cdFx0XHRpZiAoIGVsZW0ucGFyZW50Tm9kZSAmJiBlbGVtLmRpc2FibGVkID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHQvLyBPcHRpb24gZWxlbWVudHMgZGVmZXIgdG8gYSBwYXJlbnQgb3B0Z3JvdXAgaWYgcHJlc2VudFxuXHRcdFx0XHRpZiAoIFwibGFiZWxcIiBpbiBlbGVtICkge1xuXHRcdFx0XHRcdGlmICggXCJsYWJlbFwiIGluIGVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLnBhcmVudE5vZGUuZGlzYWJsZWQgPT09IGRpc2FibGVkO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgNiAtIDExXG5cdFx0XHRcdC8vIFVzZSB0aGUgaXNEaXNhYmxlZCBzaG9ydGN1dCBwcm9wZXJ0eSB0byBjaGVjayBmb3IgZGlzYWJsZWQgZmllbGRzZXQgYW5jZXN0b3JzXG5cdFx0XHRcdHJldHVybiBlbGVtLmlzRGlzYWJsZWQgPT09IGRpc2FibGVkIHx8XG5cblx0XHRcdFx0XHQvLyBXaGVyZSB0aGVyZSBpcyBubyBpc0Rpc2FibGVkLCBjaGVjayBtYW51YWxseVxuXHRcdFx0XHRcdC8qIGpzaGludCAtVzAxOCAqL1xuXHRcdFx0XHRcdGVsZW0uaXNEaXNhYmxlZCAhPT0gIWRpc2FibGVkICYmXG5cdFx0XHRcdFx0aW5EaXNhYmxlZEZpZWxkc2V0KCBlbGVtICkgPT09IGRpc2FibGVkO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cblx0XHQvLyBUcnkgdG8gd2lubm93IG91dCBlbGVtZW50cyB0aGF0IGNhbid0IGJlIGRpc2FibGVkIGJlZm9yZSB0cnVzdGluZyB0aGUgZGlzYWJsZWQgcHJvcGVydHkuXG5cdFx0Ly8gU29tZSB2aWN0aW1zIGdldCBjYXVnaHQgaW4gb3VyIG5ldCAobGFiZWwsIGxlZ2VuZCwgbWVudSwgdHJhY2spLCBidXQgaXQgc2hvdWxkbid0XG5cdFx0Ly8gZXZlbiBleGlzdCBvbiB0aGVtLCBsZXQgYWxvbmUgaGF2ZSBhIGJvb2xlYW4gdmFsdWUuXG5cdFx0fSBlbHNlIGlmICggXCJsYWJlbFwiIGluIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kaXNhYmxlZCA9PT0gZGlzYWJsZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gUmVtYWluaW5nIGVsZW1lbnRzIGFyZSBuZWl0aGVyIDplbmFibGVkIG5vciA6ZGlzYWJsZWRcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH07XG59XG5cbi8qKlxuICogUmV0dXJucyBhIGZ1bmN0aW9uIHRvIHVzZSBpbiBwc2V1ZG9zIGZvciBwb3NpdGlvbmFsc1xuICogQHBhcmFtIHtGdW5jdGlvbn0gZm5cbiAqL1xuZnVuY3Rpb24gY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZm4gKSB7XG5cdHJldHVybiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBhcmd1bWVudCApIHtcblx0XHRhcmd1bWVudCA9ICthcmd1bWVudDtcblx0XHRyZXR1cm4gbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHtcblx0XHRcdHZhciBqLFxuXHRcdFx0XHRtYXRjaEluZGV4ZXMgPSBmbiggW10sIHNlZWQubGVuZ3RoLCBhcmd1bWVudCApLFxuXHRcdFx0XHRpID0gbWF0Y2hJbmRleGVzLmxlbmd0aDtcblxuXHRcdFx0Ly8gTWF0Y2ggZWxlbWVudHMgZm91bmQgYXQgdGhlIHNwZWNpZmllZCBpbmRleGVzXG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCBzZWVkWyAoIGogPSBtYXRjaEluZGV4ZXNbIGkgXSApIF0gKSB7XG5cdFx0XHRcdFx0c2VlZFsgaiBdID0gISggbWF0Y2hlc1sgaiBdID0gc2VlZFsgaiBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cdH0gKTtcbn1cblxuLyoqXG4gKiBDaGVja3MgYSBub2RlIGZvciB2YWxpZGl0eSBhcyBhIFNpenpsZSBjb250ZXh0XG4gKiBAcGFyYW0ge0VsZW1lbnR8T2JqZWN0PX0gY29udGV4dFxuICogQHJldHVybnMge0VsZW1lbnR8T2JqZWN0fEJvb2xlYW59IFRoZSBpbnB1dCBub2RlIGlmIGFjY2VwdGFibGUsIG90aGVyd2lzZSBhIGZhbHN5IHZhbHVlXG4gKi9cbmZ1bmN0aW9uIHRlc3RDb250ZXh0KCBjb250ZXh0ICkge1xuXHRyZXR1cm4gY29udGV4dCAmJiB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBjb250ZXh0O1xufVxuXG4vLyBFeHBvc2Ugc3VwcG9ydCB2YXJzIGZvciBjb252ZW5pZW5jZVxuc3VwcG9ydCA9IFNpenpsZS5zdXBwb3J0ID0ge307XG5cbi8qKlxuICogRGV0ZWN0cyBYTUwgbm9kZXNcbiAqIEBwYXJhbSB7RWxlbWVudHxPYmplY3R9IGVsZW0gQW4gZWxlbWVudCBvciBhIGRvY3VtZW50XG4gKiBAcmV0dXJucyB7Qm9vbGVhbn0gVHJ1ZSBpZmYgZWxlbSBpcyBhIG5vbi1IVE1MIFhNTCBub2RlXG4gKi9cbmlzWE1MID0gU2l6emxlLmlzWE1MID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdHZhciBuYW1lc3BhY2UgPSBlbGVtICYmIGVsZW0ubmFtZXNwYWNlVVJJLFxuXHRcdGRvY0VsZW0gPSBlbGVtICYmICggZWxlbS5vd25lckRvY3VtZW50IHx8IGVsZW0gKS5kb2N1bWVudEVsZW1lbnQ7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD04XG5cdC8vIEFzc3VtZSBIVE1MIHdoZW4gZG9jdW1lbnRFbGVtZW50IGRvZXNuJ3QgeWV0IGV4aXN0LCBzdWNoIGFzIGluc2lkZSBsb2FkaW5nIGlmcmFtZXNcblx0Ly8gaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzQ4MzNcblx0cmV0dXJuICFyaHRtbC50ZXN0KCBuYW1lc3BhY2UgfHwgZG9jRWxlbSAmJiBkb2NFbGVtLm5vZGVOYW1lIHx8IFwiSFRNTFwiICk7XG59O1xuXG4vKipcbiAqIFNldHMgZG9jdW1lbnQtcmVsYXRlZCB2YXJpYWJsZXMgb25jZSBiYXNlZCBvbiB0aGUgY3VycmVudCBkb2N1bWVudFxuICogQHBhcmFtIHtFbGVtZW50fE9iamVjdH0gW2RvY10gQW4gZWxlbWVudCBvciBkb2N1bWVudCBvYmplY3QgdG8gdXNlIHRvIHNldCB0aGUgZG9jdW1lbnRcbiAqIEByZXR1cm5zIHtPYmplY3R9IFJldHVybnMgdGhlIGN1cnJlbnQgZG9jdW1lbnRcbiAqL1xuc2V0RG9jdW1lbnQgPSBTaXp6bGUuc2V0RG9jdW1lbnQgPSBmdW5jdGlvbiggbm9kZSApIHtcblx0dmFyIGhhc0NvbXBhcmUsIHN1YldpbmRvdyxcblx0XHRkb2MgPSBub2RlID8gbm9kZS5vd25lckRvY3VtZW50IHx8IG5vZGUgOiBwcmVmZXJyZWREb2M7XG5cblx0Ly8gUmV0dXJuIGVhcmx5IGlmIGRvYyBpcyBpbnZhbGlkIG9yIGFscmVhZHkgc2VsZWN0ZWRcblx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0aWYgKCBkb2MgPT0gZG9jdW1lbnQgfHwgZG9jLm5vZGVUeXBlICE9PSA5IHx8ICFkb2MuZG9jdW1lbnRFbGVtZW50ICkge1xuXHRcdHJldHVybiBkb2N1bWVudDtcblx0fVxuXG5cdC8vIFVwZGF0ZSBnbG9iYWwgdmFyaWFibGVzXG5cdGRvY3VtZW50ID0gZG9jO1xuXHRkb2NFbGVtID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuXHRkb2N1bWVudElzSFRNTCA9ICFpc1hNTCggZG9jdW1lbnQgKTtcblxuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErLCBFZGdlIDEyIC0gMTgrXG5cdC8vIEFjY2Vzc2luZyBpZnJhbWUgZG9jdW1lbnRzIGFmdGVyIHVubG9hZCB0aHJvd3MgXCJwZXJtaXNzaW9uIGRlbmllZFwiIGVycm9ycyAoalF1ZXJ5ICMxMzkzNilcblx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0aWYgKCBwcmVmZXJyZWREb2MgIT0gZG9jdW1lbnQgJiZcblx0XHQoIHN1YldpbmRvdyA9IGRvY3VtZW50LmRlZmF1bHRWaWV3ICkgJiYgc3ViV2luZG93LnRvcCAhPT0gc3ViV2luZG93ICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgMTEsIEVkZ2Vcblx0XHRpZiAoIHN1YldpbmRvdy5hZGRFdmVudExpc3RlbmVyICkge1xuXHRcdFx0c3ViV2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIFwidW5sb2FkXCIsIHVubG9hZEhhbmRsZXIsIGZhbHNlICk7XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTAgb25seVxuXHRcdH0gZWxzZSBpZiAoIHN1YldpbmRvdy5hdHRhY2hFdmVudCApIHtcblx0XHRcdHN1YldpbmRvdy5hdHRhY2hFdmVudCggXCJvbnVubG9hZFwiLCB1bmxvYWRIYW5kbGVyICk7XG5cdFx0fVxuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgOCAtIDExKywgRWRnZSAxMiAtIDE4KywgQ2hyb21lIDw9MTYgLSAyNSBvbmx5LCBGaXJlZm94IDw9My42IC0gMzEgb25seSxcblx0Ly8gU2FmYXJpIDQgLSA1IG9ubHksIE9wZXJhIDw9MTEuNiAtIDEyLnggb25seVxuXHQvLyBJRS9FZGdlICYgb2xkZXIgYnJvd3NlcnMgZG9uJ3Qgc3VwcG9ydCB0aGUgOnNjb3BlIHBzZXVkby1jbGFzcy5cblx0Ly8gU3VwcG9ydDogU2FmYXJpIDYuMCBvbmx5XG5cdC8vIFNhZmFyaSA2LjAgc3VwcG9ydHMgOnNjb3BlIGJ1dCBpdCdzIGFuIGFsaWFzIG9mIDpyb290IHRoZXJlLlxuXHRzdXBwb3J0LnNjb3BlID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5hcHBlbmRDaGlsZCggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApICk7XG5cdFx0cmV0dXJuIHR5cGVvZiBlbC5xdWVyeVNlbGVjdG9yQWxsICE9PSBcInVuZGVmaW5lZFwiICYmXG5cdFx0XHQhZWwucXVlcnlTZWxlY3RvckFsbCggXCI6c2NvcGUgZmllbGRzZXQgZGl2XCIgKS5sZW5ndGg7XG5cdH0gKTtcblxuXHQvKiBBdHRyaWJ1dGVzXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBTdXBwb3J0OiBJRTw4XG5cdC8vIFZlcmlmeSB0aGF0IGdldEF0dHJpYnV0ZSByZWFsbHkgcmV0dXJucyBhdHRyaWJ1dGVzIGFuZCBub3QgcHJvcGVydGllc1xuXHQvLyAoZXhjZXB0aW5nIElFOCBib29sZWFucylcblx0c3VwcG9ydC5hdHRyaWJ1dGVzID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZWwuY2xhc3NOYW1lID0gXCJpXCI7XG5cdFx0cmV0dXJuICFlbC5nZXRBdHRyaWJ1dGUoIFwiY2xhc3NOYW1lXCIgKTtcblx0fSApO1xuXG5cdC8qIGdldEVsZW1lbnQocylCeSpcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXG5cdC8vIENoZWNrIGlmIGdldEVsZW1lbnRzQnlUYWdOYW1lKFwiKlwiKSByZXR1cm5zIG9ubHkgZWxlbWVudHNcblx0c3VwcG9ydC5nZXRFbGVtZW50c0J5VGFnTmFtZSA9IGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRcdGVsLmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVDb21tZW50KCBcIlwiICkgKTtcblx0XHRyZXR1cm4gIWVsLmdldEVsZW1lbnRzQnlUYWdOYW1lKCBcIipcIiApLmxlbmd0aDtcblx0fSApO1xuXG5cdC8vIFN1cHBvcnQ6IElFPDlcblx0c3VwcG9ydC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lID0gcm5hdGl2ZS50ZXN0KCBkb2N1bWVudC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lICk7XG5cblx0Ly8gU3VwcG9ydDogSUU8MTBcblx0Ly8gQ2hlY2sgaWYgZ2V0RWxlbWVudEJ5SWQgcmV0dXJucyBlbGVtZW50cyBieSBuYW1lXG5cdC8vIFRoZSBicm9rZW4gZ2V0RWxlbWVudEJ5SWQgbWV0aG9kcyBkb24ndCBwaWNrIHVwIHByb2dyYW1tYXRpY2FsbHktc2V0IG5hbWVzLFxuXHQvLyBzbyB1c2UgYSByb3VuZGFib3V0IGdldEVsZW1lbnRzQnlOYW1lIHRlc3Rcblx0c3VwcG9ydC5nZXRCeUlkID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5pZCA9IGV4cGFuZG87XG5cdFx0cmV0dXJuICFkb2N1bWVudC5nZXRFbGVtZW50c0J5TmFtZSB8fCAhZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoIGV4cGFuZG8gKS5sZW5ndGg7XG5cdH0gKTtcblxuXHQvLyBJRCBmaWx0ZXIgYW5kIGZpbmRcblx0aWYgKCBzdXBwb3J0LmdldEJ5SWQgKSB7XG5cdFx0RXhwci5maWx0ZXJbIFwiSURcIiBdID0gZnVuY3Rpb24oIGlkICkge1xuXHRcdFx0dmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSggXCJpZFwiICkgPT09IGF0dHJJZDtcblx0XHRcdH07XG5cdFx0fTtcblx0XHRFeHByLmZpbmRbIFwiSURcIiBdID0gZnVuY3Rpb24oIGlkLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50QnlJZCAhPT0gXCJ1bmRlZmluZWRcIiAmJiBkb2N1bWVudElzSFRNTCApIHtcblx0XHRcdFx0dmFyIGVsZW0gPSBjb250ZXh0LmdldEVsZW1lbnRCeUlkKCBpZCApO1xuXHRcdFx0XHRyZXR1cm4gZWxlbSA/IFsgZWxlbSBdIDogW107XG5cdFx0XHR9XG5cdFx0fTtcblx0fSBlbHNlIHtcblx0XHRFeHByLmZpbHRlclsgXCJJRFwiIF0gPSAgZnVuY3Rpb24oIGlkICkge1xuXHRcdFx0dmFyIGF0dHJJZCA9IGlkLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRcdHZhciBub2RlID0gdHlwZW9mIGVsZW0uZ2V0QXR0cmlidXRlTm9kZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdFx0XHRcdGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggXCJpZFwiICk7XG5cdFx0XHRcdHJldHVybiBub2RlICYmIG5vZGUudmFsdWUgPT09IGF0dHJJZDtcblx0XHRcdH07XG5cdFx0fTtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDYgLSA3IG9ubHlcblx0XHQvLyBnZXRFbGVtZW50QnlJZCBpcyBub3QgcmVsaWFibGUgYXMgYSBmaW5kIHNob3J0Y3V0XG5cdFx0RXhwci5maW5kWyBcIklEXCIgXSA9IGZ1bmN0aW9uKCBpZCwgY29udGV4dCApIHtcblx0XHRcdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudEJ5SWQgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRcdHZhciBub2RlLCBpLCBlbGVtcyxcblx0XHRcdFx0XHRlbGVtID0gY29udGV4dC5nZXRFbGVtZW50QnlJZCggaWQgKTtcblxuXHRcdFx0XHRpZiAoIGVsZW0gKSB7XG5cblx0XHRcdFx0XHQvLyBWZXJpZnkgdGhlIGlkIGF0dHJpYnV0ZVxuXHRcdFx0XHRcdG5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIFwiaWRcIiApO1xuXHRcdFx0XHRcdGlmICggbm9kZSAmJiBub2RlLnZhbHVlID09PSBpZCApIHtcblx0XHRcdFx0XHRcdHJldHVybiBbIGVsZW0gXTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBGYWxsIGJhY2sgb24gZ2V0RWxlbWVudHNCeU5hbWVcblx0XHRcdFx0XHRlbGVtcyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeU5hbWUoIGlkICk7XG5cdFx0XHRcdFx0aSA9IDA7XG5cdFx0XHRcdFx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtc1sgaSsrIF0gKSApIHtcblx0XHRcdFx0XHRcdG5vZGUgPSBlbGVtLmdldEF0dHJpYnV0ZU5vZGUoIFwiaWRcIiApO1xuXHRcdFx0XHRcdFx0aWYgKCBub2RlICYmIG5vZGUudmFsdWUgPT09IGlkICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gWyBlbGVtIF07XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIFtdO1xuXHRcdFx0fVxuXHRcdH07XG5cdH1cblxuXHQvLyBUYWdcblx0RXhwci5maW5kWyBcIlRBR1wiIF0gPSBzdXBwb3J0LmdldEVsZW1lbnRzQnlUYWdOYW1lID9cblx0XHRmdW5jdGlvbiggdGFnLCBjb250ZXh0ICkge1xuXHRcdFx0aWYgKCB0eXBlb2YgY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRcdFx0cmV0dXJuIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApO1xuXG5cdFx0XHQvLyBEb2N1bWVudEZyYWdtZW50IG5vZGVzIGRvbid0IGhhdmUgZ0VCVE5cblx0XHRcdH0gZWxzZSBpZiAoIHN1cHBvcnQucXNhICkge1xuXHRcdFx0XHRyZXR1cm4gY29udGV4dC5xdWVyeVNlbGVjdG9yQWxsKCB0YWcgKTtcblx0XHRcdH1cblx0XHR9IDpcblxuXHRcdGZ1bmN0aW9uKCB0YWcsIGNvbnRleHQgKSB7XG5cdFx0XHR2YXIgZWxlbSxcblx0XHRcdFx0dG1wID0gW10sXG5cdFx0XHRcdGkgPSAwLFxuXG5cdFx0XHRcdC8vIEJ5IGhhcHB5IGNvaW5jaWRlbmNlLCBhIChicm9rZW4pIGdFQlROIGFwcGVhcnMgb24gRG9jdW1lbnRGcmFnbWVudCBub2RlcyB0b29cblx0XHRcdFx0cmVzdWx0cyA9IGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoIHRhZyApO1xuXG5cdFx0XHQvLyBGaWx0ZXIgb3V0IHBvc3NpYmxlIGNvbW1lbnRzXG5cdFx0XHRpZiAoIHRhZyA9PT0gXCIqXCIgKSB7XG5cdFx0XHRcdHdoaWxlICggKCBlbGVtID0gcmVzdWx0c1sgaSsrIF0gKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgKSB7XG5cdFx0XHRcdFx0XHR0bXAucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiB0bXA7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmVzdWx0cztcblx0XHR9O1xuXG5cdC8vIENsYXNzXG5cdEV4cHIuZmluZFsgXCJDTEFTU1wiIF0gPSBzdXBwb3J0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgJiYgZnVuY3Rpb24oIGNsYXNzTmFtZSwgY29udGV4dCApIHtcblx0XHRpZiAoIHR5cGVvZiBjb250ZXh0LmdldEVsZW1lbnRzQnlDbGFzc05hbWUgIT09IFwidW5kZWZpbmVkXCIgJiYgZG9jdW1lbnRJc0hUTUwgKSB7XG5cdFx0XHRyZXR1cm4gY29udGV4dC5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCBjbGFzc05hbWUgKTtcblx0XHR9XG5cdH07XG5cblx0LyogUVNBL21hdGNoZXNTZWxlY3RvclxuXHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovXG5cblx0Ly8gUVNBIGFuZCBtYXRjaGVzU2VsZWN0b3Igc3VwcG9ydFxuXG5cdC8vIG1hdGNoZXNTZWxlY3Rvcig6YWN0aXZlKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoSUU5L09wZXJhIDExLjUpXG5cdHJidWdneU1hdGNoZXMgPSBbXTtcblxuXHQvLyBxU2EoOmZvY3VzKSByZXBvcnRzIGZhbHNlIHdoZW4gdHJ1ZSAoQ2hyb21lIDIxKVxuXHQvLyBXZSBhbGxvdyB0aGlzIGJlY2F1c2Ugb2YgYSBidWcgaW4gSUU4LzkgdGhhdCB0aHJvd3MgYW4gZXJyb3Jcblx0Ly8gd2hlbmV2ZXIgYGRvY3VtZW50LmFjdGl2ZUVsZW1lbnRgIGlzIGFjY2Vzc2VkIG9uIGFuIGlmcmFtZVxuXHQvLyBTbywgd2UgYWxsb3cgOmZvY3VzIHRvIHBhc3MgdGhyb3VnaCBRU0EgYWxsIHRoZSB0aW1lIHRvIGF2b2lkIHRoZSBJRSBlcnJvclxuXHQvLyBTZWUgaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzEzMzc4XG5cdHJidWdneVFTQSA9IFtdO1xuXG5cdGlmICggKCBzdXBwb3J0LnFzYSA9IHJuYXRpdmUudGVzdCggZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCApICkgKSB7XG5cblx0XHQvLyBCdWlsZCBRU0EgcmVnZXhcblx0XHQvLyBSZWdleCBzdHJhdGVneSBhZG9wdGVkIGZyb20gRGllZ28gUGVyaW5pXG5cdFx0YXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cblx0XHRcdHZhciBpbnB1dDtcblxuXHRcdFx0Ly8gU2VsZWN0IGlzIHNldCB0byBlbXB0eSBzdHJpbmcgb24gcHVycG9zZVxuXHRcdFx0Ly8gVGhpcyBpcyB0byB0ZXN0IElFJ3MgdHJlYXRtZW50IG9mIG5vdCBleHBsaWNpdGx5XG5cdFx0XHQvLyBzZXR0aW5nIGEgYm9vbGVhbiBjb250ZW50IGF0dHJpYnV0ZSxcblx0XHRcdC8vIHNpbmNlIGl0cyBwcmVzZW5jZSBzaG91bGQgYmUgZW5vdWdoXG5cdFx0XHQvLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTIzNTlcblx0XHRcdGRvY0VsZW0uYXBwZW5kQ2hpbGQoIGVsICkuaW5uZXJIVE1MID0gXCI8YSBpZD0nXCIgKyBleHBhbmRvICsgXCInPjwvYT5cIiArXG5cdFx0XHRcdFwiPHNlbGVjdCBpZD0nXCIgKyBleHBhbmRvICsgXCItXFxyXFxcXCcgbXNhbGxvd2NhcHR1cmU9Jyc+XCIgK1xuXHRcdFx0XHRcIjxvcHRpb24gc2VsZWN0ZWQ9Jyc+PC9vcHRpb24+PC9zZWxlY3Q+XCI7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOCwgT3BlcmEgMTEtMTIuMTZcblx0XHRcdC8vIE5vdGhpbmcgc2hvdWxkIGJlIHNlbGVjdGVkIHdoZW4gZW1wdHkgc3RyaW5ncyBmb2xsb3cgXj0gb3IgJD0gb3IgKj1cblx0XHRcdC8vIFRoZSB0ZXN0IGF0dHJpYnV0ZSBtdXN0IGJlIHVua25vd24gaW4gT3BlcmEgYnV0IFwic2FmZVwiIGZvciBXaW5SVFxuXHRcdFx0Ly8gaHR0cHM6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS9pZS9oaDQ2NTM4OC5hc3B4I2F0dHJpYnV0ZV9zZWN0aW9uXG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW21zYWxsb3djYXB0dXJlXj0nJ11cIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiWypeJF09XCIgKyB3aGl0ZXNwYWNlICsgXCIqKD86Jyd8XFxcIlxcXCIpXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogSUU4XG5cdFx0XHQvLyBCb29sZWFuIGF0dHJpYnV0ZXMgYW5kIFwidmFsdWVcIiBhcmUgbm90IHRyZWF0ZWQgY29ycmVjdGx5XG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIltzZWxlY3RlZF1cIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiXFxcXFtcIiArIHdoaXRlc3BhY2UgKyBcIiooPzp2YWx1ZXxcIiArIGJvb2xlYW5zICsgXCIpXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lPDI5LCBBbmRyb2lkPDQuNCwgU2FmYXJpPDcuMCssIGlPUzw3LjArLCBQaGFudG9tSlM8MS45LjgrXG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIltpZH49XCIgKyBleHBhbmRvICsgXCItXVwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCJ+PVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNSAtIDE4K1xuXHRcdFx0Ly8gSUUgMTEvRWRnZSBkb24ndCBmaW5kIGVsZW1lbnRzIG9uIGEgYFtuYW1lPScnXWAgcXVlcnkgaW4gc29tZSBjYXNlcy5cblx0XHRcdC8vIEFkZGluZyBhIHRlbXBvcmFyeSBhdHRyaWJ1dGUgdG8gdGhlIGRvY3VtZW50IGJlZm9yZSB0aGUgc2VsZWN0aW9uIHdvcmtzXG5cdFx0XHQvLyBhcm91bmQgdGhlIGlzc3VlLlxuXHRcdFx0Ly8gSW50ZXJlc3RpbmdseSwgSUUgMTAgJiBvbGRlciBkb24ndCBzZWVtIHRvIGhhdmUgdGhlIGlzc3VlLlxuXHRcdFx0aW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblx0XHRcdGlucHV0LnNldEF0dHJpYnV0ZSggXCJuYW1lXCIsIFwiXCIgKTtcblx0XHRcdGVsLmFwcGVuZENoaWxkKCBpbnB1dCApO1xuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCJbbmFtZT0nJ11cIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiXFxcXFtcIiArIHdoaXRlc3BhY2UgKyBcIipuYW1lXCIgKyB3aGl0ZXNwYWNlICsgXCIqPVwiICtcblx0XHRcdFx0XHR3aGl0ZXNwYWNlICsgXCIqKD86Jyd8XFxcIlxcXCIpXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gV2Via2l0L09wZXJhIC0gOmNoZWNrZWQgc2hvdWxkIHJldHVybiBzZWxlY3RlZCBvcHRpb24gZWxlbWVudHNcblx0XHRcdC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMTEvUkVDLWNzczMtc2VsZWN0b3JzLTIwMTEwOTI5LyNjaGVja2VkXG5cdFx0XHQvLyBJRTggdGhyb3dzIGVycm9yIGhlcmUgYW5kIHdpbGwgbm90IHNlZSBsYXRlciB0ZXN0c1xuXHRcdFx0aWYgKCAhZWwucXVlcnlTZWxlY3RvckFsbCggXCI6Y2hlY2tlZFwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCI6Y2hlY2tlZFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IFNhZmFyaSA4KywgaU9TIDgrXG5cdFx0XHQvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM2ODUxXG5cdFx0XHQvLyBJbi1wYWdlIGBzZWxlY3RvciNpZCBzaWJsaW5nLWNvbWJpbmF0b3Igc2VsZWN0b3JgIGZhaWxzXG5cdFx0XHRpZiAoICFlbC5xdWVyeVNlbGVjdG9yQWxsKCBcImEjXCIgKyBleHBhbmRvICsgXCIrKlwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCIuIy4rWyt+XVwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD0zLjYgLSA1IG9ubHlcblx0XHRcdC8vIE9sZCBGaXJlZm94IGRvZXNuJ3QgdGhyb3cgb24gYSBiYWRseS1lc2NhcGVkIGlkZW50aWZpZXIuXG5cdFx0XHRlbC5xdWVyeVNlbGVjdG9yQWxsKCBcIlxcXFxcXGZcIiApO1xuXHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwiW1xcXFxyXFxcXG5cXFxcZl1cIiApO1xuXHRcdH0gKTtcblxuXHRcdGFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRcdFx0ZWwuaW5uZXJIVE1MID0gXCI8YSBocmVmPScnIGRpc2FibGVkPSdkaXNhYmxlZCc+PC9hPlwiICtcblx0XHRcdFx0XCI8c2VsZWN0IGRpc2FibGVkPSdkaXNhYmxlZCc+PG9wdGlvbi8+PC9zZWxlY3Q+XCI7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IFdpbmRvd3MgOCBOYXRpdmUgQXBwc1xuXHRcdFx0Ly8gVGhlIHR5cGUgYW5kIG5hbWUgYXR0cmlidXRlcyBhcmUgcmVzdHJpY3RlZCBkdXJpbmcgLmlubmVySFRNTCBhc3NpZ25tZW50XG5cdFx0XHR2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKTtcblx0XHRcdGlucHV0LnNldEF0dHJpYnV0ZSggXCJ0eXBlXCIsIFwiaGlkZGVuXCIgKTtcblx0XHRcdGVsLmFwcGVuZENoaWxkKCBpbnB1dCApLnNldEF0dHJpYnV0ZSggXCJuYW1lXCIsIFwiRFwiICk7XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOFxuXHRcdFx0Ly8gRW5mb3JjZSBjYXNlLXNlbnNpdGl2aXR5IG9mIG5hbWUgYXR0cmlidXRlXG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiW25hbWU9ZF1cIiApLmxlbmd0aCApIHtcblx0XHRcdFx0cmJ1Z2d5UVNBLnB1c2goIFwibmFtZVwiICsgd2hpdGVzcGFjZSArIFwiKlsqXiR8IX5dPz1cIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBGRiAzLjUgLSA6ZW5hYmxlZC86ZGlzYWJsZWQgYW5kIGhpZGRlbiBlbGVtZW50cyAoaGlkZGVuIGVsZW1lbnRzIGFyZSBzdGlsbCBlbmFibGVkKVxuXHRcdFx0Ly8gSUU4IHRocm93cyBlcnJvciBoZXJlIGFuZCB3aWxsIG5vdCBzZWUgbGF0ZXIgdGVzdHNcblx0XHRcdGlmICggZWwucXVlcnlTZWxlY3RvckFsbCggXCI6ZW5hYmxlZFwiICkubGVuZ3RoICE9PSAyICkge1xuXHRcdFx0XHRyYnVnZ3lRU0EucHVzaCggXCI6ZW5hYmxlZFwiLCBcIjpkaXNhYmxlZFwiICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFOS0xMStcblx0XHRcdC8vIElFJ3MgOmRpc2FibGVkIHNlbGVjdG9yIGRvZXMgbm90IHBpY2sgdXAgdGhlIGNoaWxkcmVuIG9mIGRpc2FibGVkIGZpZWxkc2V0c1xuXHRcdFx0ZG9jRWxlbS5hcHBlbmRDaGlsZCggZWwgKS5kaXNhYmxlZCA9IHRydWU7XG5cdFx0XHRpZiAoIGVsLnF1ZXJ5U2VsZWN0b3JBbGwoIFwiOmRpc2FibGVkXCIgKS5sZW5ndGggIT09IDIgKSB7XG5cdFx0XHRcdHJidWdneVFTQS5wdXNoKCBcIjplbmFibGVkXCIsIFwiOmRpc2FibGVkXCIgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3VwcG9ydDogT3BlcmEgMTAgLSAxMSBvbmx5XG5cdFx0XHQvLyBPcGVyYSAxMC0xMSBkb2VzIG5vdCB0aHJvdyBvbiBwb3N0LWNvbW1hIGludmFsaWQgcHNldWRvc1xuXHRcdFx0ZWwucXVlcnlTZWxlY3RvckFsbCggXCIqLDp4XCIgKTtcblx0XHRcdHJidWdneVFTQS5wdXNoKCBcIiwuKjpcIiApO1xuXHRcdH0gKTtcblx0fVxuXG5cdGlmICggKCBzdXBwb3J0Lm1hdGNoZXNTZWxlY3RvciA9IHJuYXRpdmUudGVzdCggKCBtYXRjaGVzID0gZG9jRWxlbS5tYXRjaGVzIHx8XG5cdFx0ZG9jRWxlbS53ZWJraXRNYXRjaGVzU2VsZWN0b3IgfHxcblx0XHRkb2NFbGVtLm1vek1hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY0VsZW0ub01hdGNoZXNTZWxlY3RvciB8fFxuXHRcdGRvY0VsZW0ubXNNYXRjaGVzU2VsZWN0b3IgKSApICkgKSB7XG5cblx0XHRhc3NlcnQoIGZ1bmN0aW9uKCBlbCApIHtcblxuXHRcdFx0Ly8gQ2hlY2sgdG8gc2VlIGlmIGl0J3MgcG9zc2libGUgdG8gZG8gbWF0Y2hlc1NlbGVjdG9yXG5cdFx0XHQvLyBvbiBhIGRpc2Nvbm5lY3RlZCBub2RlIChJRSA5KVxuXHRcdFx0c3VwcG9ydC5kaXNjb25uZWN0ZWRNYXRjaCA9IG1hdGNoZXMuY2FsbCggZWwsIFwiKlwiICk7XG5cblx0XHRcdC8vIFRoaXMgc2hvdWxkIGZhaWwgd2l0aCBhbiBleGNlcHRpb25cblx0XHRcdC8vIEdlY2tvIGRvZXMgbm90IGVycm9yLCByZXR1cm5zIGZhbHNlIGluc3RlYWRcblx0XHRcdG1hdGNoZXMuY2FsbCggZWwsIFwiW3MhPScnXTp4XCIgKTtcblx0XHRcdHJidWdneU1hdGNoZXMucHVzaCggXCIhPVwiLCBwc2V1ZG9zICk7XG5cdFx0fSApO1xuXHR9XG5cblx0cmJ1Z2d5UVNBID0gcmJ1Z2d5UVNBLmxlbmd0aCAmJiBuZXcgUmVnRXhwKCByYnVnZ3lRU0Euam9pbiggXCJ8XCIgKSApO1xuXHRyYnVnZ3lNYXRjaGVzID0gcmJ1Z2d5TWF0Y2hlcy5sZW5ndGggJiYgbmV3IFJlZ0V4cCggcmJ1Z2d5TWF0Y2hlcy5qb2luKCBcInxcIiApICk7XG5cblx0LyogQ29udGFpbnNcblx0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqL1xuXHRoYXNDb21wYXJlID0gcm5hdGl2ZS50ZXN0KCBkb2NFbGVtLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uICk7XG5cblx0Ly8gRWxlbWVudCBjb250YWlucyBhbm90aGVyXG5cdC8vIFB1cnBvc2VmdWxseSBzZWxmLWV4Y2x1c2l2ZVxuXHQvLyBBcyBpbiwgYW4gZWxlbWVudCBkb2VzIG5vdCBjb250YWluIGl0c2VsZlxuXHRjb250YWlucyA9IGhhc0NvbXBhcmUgfHwgcm5hdGl2ZS50ZXN0KCBkb2NFbGVtLmNvbnRhaW5zICkgP1xuXHRcdGZ1bmN0aW9uKCBhLCBiICkge1xuXHRcdFx0dmFyIGFkb3duID0gYS5ub2RlVHlwZSA9PT0gOSA/IGEuZG9jdW1lbnRFbGVtZW50IDogYSxcblx0XHRcdFx0YnVwID0gYiAmJiBiLnBhcmVudE5vZGU7XG5cdFx0XHRyZXR1cm4gYSA9PT0gYnVwIHx8ICEhKCBidXAgJiYgYnVwLm5vZGVUeXBlID09PSAxICYmIChcblx0XHRcdFx0YWRvd24uY29udGFpbnMgP1xuXHRcdFx0XHRcdGFkb3duLmNvbnRhaW5zKCBidXAgKSA6XG5cdFx0XHRcdFx0YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiAmJiBhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKCBidXAgKSAmIDE2XG5cdFx0XHQpICk7XG5cdFx0fSA6XG5cdFx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cdFx0XHRpZiAoIGIgKSB7XG5cdFx0XHRcdHdoaWxlICggKCBiID0gYi5wYXJlbnROb2RlICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBiID09PSBhICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fTtcblxuXHQvKiBTb3J0aW5nXG5cdC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi9cblxuXHQvLyBEb2N1bWVudCBvcmRlciBzb3J0aW5nXG5cdHNvcnRPcmRlciA9IGhhc0NvbXBhcmUgP1xuXHRmdW5jdGlvbiggYSwgYiApIHtcblxuXHRcdC8vIEZsYWcgZm9yIGR1cGxpY2F0ZSByZW1vdmFsXG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdC8vIFNvcnQgb24gbWV0aG9kIGV4aXN0ZW5jZSBpZiBvbmx5IG9uZSBpbnB1dCBoYXMgY29tcGFyZURvY3VtZW50UG9zaXRpb25cblx0XHR2YXIgY29tcGFyZSA9ICFhLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uIC0gIWIuY29tcGFyZURvY3VtZW50UG9zaXRpb247XG5cdFx0aWYgKCBjb21wYXJlICkge1xuXHRcdFx0cmV0dXJuIGNvbXBhcmU7XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsY3VsYXRlIHBvc2l0aW9uIGlmIGJvdGggaW5wdXRzIGJlbG9uZyB0byB0aGUgc2FtZSBkb2N1bWVudFxuXHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0Y29tcGFyZSA9ICggYS5vd25lckRvY3VtZW50IHx8IGEgKSA9PSAoIGIub3duZXJEb2N1bWVudCB8fCBiICkgP1xuXHRcdFx0YS5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYiApIDpcblxuXHRcdFx0Ly8gT3RoZXJ3aXNlIHdlIGtub3cgdGhleSBhcmUgZGlzY29ubmVjdGVkXG5cdFx0XHQxO1xuXG5cdFx0Ly8gRGlzY29ubmVjdGVkIG5vZGVzXG5cdFx0aWYgKCBjb21wYXJlICYgMSB8fFxuXHRcdFx0KCAhc3VwcG9ydC5zb3J0RGV0YWNoZWQgJiYgYi5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggYSApID09PSBjb21wYXJlICkgKSB7XG5cblx0XHRcdC8vIENob29zZSB0aGUgZmlyc3QgZWxlbWVudCB0aGF0IGlzIHJlbGF0ZWQgdG8gb3VyIHByZWZlcnJlZCBkb2N1bWVudFxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRcdGlmICggYSA9PSBkb2N1bWVudCB8fCBhLm93bmVyRG9jdW1lbnQgPT0gcHJlZmVycmVkRG9jICYmXG5cdFx0XHRcdGNvbnRhaW5zKCBwcmVmZXJyZWREb2MsIGEgKSApIHtcblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSssIEVkZ2UgMTcgLSAxOCtcblx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGVxZXFlcVxuXHRcdFx0aWYgKCBiID09IGRvY3VtZW50IHx8IGIub3duZXJEb2N1bWVudCA9PSBwcmVmZXJyZWREb2MgJiZcblx0XHRcdFx0Y29udGFpbnMoIHByZWZlcnJlZERvYywgYiApICkge1xuXHRcdFx0XHRyZXR1cm4gMTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFpbnRhaW4gb3JpZ2luYWwgb3JkZXJcblx0XHRcdHJldHVybiBzb3J0SW5wdXQgP1xuXHRcdFx0XHQoIGluZGV4T2YoIHNvcnRJbnB1dCwgYSApIC0gaW5kZXhPZiggc29ydElucHV0LCBiICkgKSA6XG5cdFx0XHRcdDA7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGNvbXBhcmUgJiA0ID8gLTEgOiAxO1xuXHR9IDpcblx0ZnVuY3Rpb24oIGEsIGIgKSB7XG5cblx0XHQvLyBFeGl0IGVhcmx5IGlmIHRoZSBub2RlcyBhcmUgaWRlbnRpY2FsXG5cdFx0aWYgKCBhID09PSBiICkge1xuXHRcdFx0aGFzRHVwbGljYXRlID0gdHJ1ZTtcblx0XHRcdHJldHVybiAwO1xuXHRcdH1cblxuXHRcdHZhciBjdXIsXG5cdFx0XHRpID0gMCxcblx0XHRcdGF1cCA9IGEucGFyZW50Tm9kZSxcblx0XHRcdGJ1cCA9IGIucGFyZW50Tm9kZSxcblx0XHRcdGFwID0gWyBhIF0sXG5cdFx0XHRicCA9IFsgYiBdO1xuXG5cdFx0Ly8gUGFyZW50bGVzcyBub2RlcyBhcmUgZWl0aGVyIGRvY3VtZW50cyBvciBkaXNjb25uZWN0ZWRcblx0XHRpZiAoICFhdXAgfHwgIWJ1cCApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdC8qIGVzbGludC1kaXNhYmxlIGVxZXFlcSAqL1xuXHRcdFx0cmV0dXJuIGEgPT0gZG9jdW1lbnQgPyAtMSA6XG5cdFx0XHRcdGIgPT0gZG9jdW1lbnQgPyAxIDpcblx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSBlcWVxZXEgKi9cblx0XHRcdFx0YXVwID8gLTEgOlxuXHRcdFx0XHRidXAgPyAxIDpcblx0XHRcdFx0c29ydElucHV0ID9cblx0XHRcdFx0KCBpbmRleE9mKCBzb3J0SW5wdXQsIGEgKSAtIGluZGV4T2YoIHNvcnRJbnB1dCwgYiApICkgOlxuXHRcdFx0XHQwO1xuXG5cdFx0Ly8gSWYgdGhlIG5vZGVzIGFyZSBzaWJsaW5ncywgd2UgY2FuIGRvIGEgcXVpY2sgY2hlY2tcblx0XHR9IGVsc2UgaWYgKCBhdXAgPT09IGJ1cCApIHtcblx0XHRcdHJldHVybiBzaWJsaW5nQ2hlY2soIGEsIGIgKTtcblx0XHR9XG5cblx0XHQvLyBPdGhlcndpc2Ugd2UgbmVlZCBmdWxsIGxpc3RzIG9mIHRoZWlyIGFuY2VzdG9ycyBmb3IgY29tcGFyaXNvblxuXHRcdGN1ciA9IGE7XG5cdFx0d2hpbGUgKCAoIGN1ciA9IGN1ci5wYXJlbnROb2RlICkgKSB7XG5cdFx0XHRhcC51bnNoaWZ0KCBjdXIgKTtcblx0XHR9XG5cdFx0Y3VyID0gYjtcblx0XHR3aGlsZSAoICggY3VyID0gY3VyLnBhcmVudE5vZGUgKSApIHtcblx0XHRcdGJwLnVuc2hpZnQoIGN1ciApO1xuXHRcdH1cblxuXHRcdC8vIFdhbGsgZG93biB0aGUgdHJlZSBsb29raW5nIGZvciBhIGRpc2NyZXBhbmN5XG5cdFx0d2hpbGUgKCBhcFsgaSBdID09PSBicFsgaSBdICkge1xuXHRcdFx0aSsrO1xuXHRcdH1cblxuXHRcdHJldHVybiBpID9cblxuXHRcdFx0Ly8gRG8gYSBzaWJsaW5nIGNoZWNrIGlmIHRoZSBub2RlcyBoYXZlIGEgY29tbW9uIGFuY2VzdG9yXG5cdFx0XHRzaWJsaW5nQ2hlY2soIGFwWyBpIF0sIGJwWyBpIF0gKSA6XG5cblx0XHRcdC8vIE90aGVyd2lzZSBub2RlcyBpbiBvdXIgZG9jdW1lbnQgc29ydCBmaXJzdFxuXHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdC8qIGVzbGludC1kaXNhYmxlIGVxZXFlcSAqL1xuXHRcdFx0YXBbIGkgXSA9PSBwcmVmZXJyZWREb2MgPyAtMSA6XG5cdFx0XHRicFsgaSBdID09IHByZWZlcnJlZERvYyA/IDEgOlxuXHRcdFx0LyogZXNsaW50LWVuYWJsZSBlcWVxZXEgKi9cblx0XHRcdDA7XG5cdH07XG5cblx0cmV0dXJuIGRvY3VtZW50O1xufTtcblxuU2l6emxlLm1hdGNoZXMgPSBmdW5jdGlvbiggZXhwciwgZWxlbWVudHMgKSB7XG5cdHJldHVybiBTaXp6bGUoIGV4cHIsIG51bGwsIG51bGwsIGVsZW1lbnRzICk7XG59O1xuXG5TaXp6bGUubWF0Y2hlc1NlbGVjdG9yID0gZnVuY3Rpb24oIGVsZW0sIGV4cHIgKSB7XG5cdHNldERvY3VtZW50KCBlbGVtICk7XG5cblx0aWYgKCBzdXBwb3J0Lm1hdGNoZXNTZWxlY3RvciAmJiBkb2N1bWVudElzSFRNTCAmJlxuXHRcdCFub25uYXRpdmVTZWxlY3RvckNhY2hlWyBleHByICsgXCIgXCIgXSAmJlxuXHRcdCggIXJidWdneU1hdGNoZXMgfHwgIXJidWdneU1hdGNoZXMudGVzdCggZXhwciApICkgJiZcblx0XHQoICFyYnVnZ3lRU0EgICAgIHx8ICFyYnVnZ3lRU0EudGVzdCggZXhwciApICkgKSB7XG5cblx0XHR0cnkge1xuXHRcdFx0dmFyIHJldCA9IG1hdGNoZXMuY2FsbCggZWxlbSwgZXhwciApO1xuXG5cdFx0XHQvLyBJRSA5J3MgbWF0Y2hlc1NlbGVjdG9yIHJldHVybnMgZmFsc2Ugb24gZGlzY29ubmVjdGVkIG5vZGVzXG5cdFx0XHRpZiAoIHJldCB8fCBzdXBwb3J0LmRpc2Nvbm5lY3RlZE1hdGNoIHx8XG5cblx0XHRcdFx0Ly8gQXMgd2VsbCwgZGlzY29ubmVjdGVkIG5vZGVzIGFyZSBzYWlkIHRvIGJlIGluIGEgZG9jdW1lbnRcblx0XHRcdFx0Ly8gZnJhZ21lbnQgaW4gSUUgOVxuXHRcdFx0XHRlbGVtLmRvY3VtZW50ICYmIGVsZW0uZG9jdW1lbnQubm9kZVR5cGUgIT09IDExICkge1xuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXHRcdH0gY2F0Y2ggKCBlICkge1xuXHRcdFx0bm9ubmF0aXZlU2VsZWN0b3JDYWNoZSggZXhwciwgdHJ1ZSApO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBTaXp6bGUoIGV4cHIsIGRvY3VtZW50LCBudWxsLCBbIGVsZW0gXSApLmxlbmd0aCA+IDA7XG59O1xuXG5TaXp6bGUuY29udGFpbnMgPSBmdW5jdGlvbiggY29udGV4dCwgZWxlbSApIHtcblxuXHQvLyBTZXQgZG9jdW1lbnQgdmFycyBpZiBuZWVkZWRcblx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0aWYgKCAoIGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0ICkgIT0gZG9jdW1lbnQgKSB7XG5cdFx0c2V0RG9jdW1lbnQoIGNvbnRleHQgKTtcblx0fVxuXHRyZXR1cm4gY29udGFpbnMoIGNvbnRleHQsIGVsZW0gKTtcbn07XG5cblNpenpsZS5hdHRyID0gZnVuY3Rpb24oIGVsZW0sIG5hbWUgKSB7XG5cblx0Ly8gU2V0IGRvY3VtZW50IHZhcnMgaWYgbmVlZGVkXG5cdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHQvLyBJRS9FZGdlIHNvbWV0aW1lcyB0aHJvdyBhIFwiUGVybWlzc2lvbiBkZW5pZWRcIiBlcnJvciB3aGVuIHN0cmljdC1jb21wYXJpbmdcblx0Ly8gdHdvIGRvY3VtZW50czsgc2hhbGxvdyBjb21wYXJpc29ucyB3b3JrLlxuXHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdGlmICggKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZWxlbSApICE9IGRvY3VtZW50ICkge1xuXHRcdHNldERvY3VtZW50KCBlbGVtICk7XG5cdH1cblxuXHR2YXIgZm4gPSBFeHByLmF0dHJIYW5kbGVbIG5hbWUudG9Mb3dlckNhc2UoKSBdLFxuXG5cdFx0Ly8gRG9uJ3QgZ2V0IGZvb2xlZCBieSBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKGpRdWVyeSAjMTM4MDcpXG5cdFx0dmFsID0gZm4gJiYgaGFzT3duLmNhbGwoIEV4cHIuYXR0ckhhbmRsZSwgbmFtZS50b0xvd2VyQ2FzZSgpICkgP1xuXHRcdFx0Zm4oIGVsZW0sIG5hbWUsICFkb2N1bWVudElzSFRNTCApIDpcblx0XHRcdHVuZGVmaW5lZDtcblxuXHRyZXR1cm4gdmFsICE9PSB1bmRlZmluZWQgP1xuXHRcdHZhbCA6XG5cdFx0c3VwcG9ydC5hdHRyaWJ1dGVzIHx8ICFkb2N1bWVudElzSFRNTCA/XG5cdFx0XHRlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApIDpcblx0XHRcdCggdmFsID0gZWxlbS5nZXRBdHRyaWJ1dGVOb2RlKCBuYW1lICkgKSAmJiB2YWwuc3BlY2lmaWVkID9cblx0XHRcdFx0dmFsLnZhbHVlIDpcblx0XHRcdFx0bnVsbDtcbn07XG5cblNpenpsZS5lc2NhcGUgPSBmdW5jdGlvbiggc2VsICkge1xuXHRyZXR1cm4gKCBzZWwgKyBcIlwiICkucmVwbGFjZSggcmNzc2VzY2FwZSwgZmNzc2VzY2FwZSApO1xufTtcblxuU2l6emxlLmVycm9yID0gZnVuY3Rpb24oIG1zZyApIHtcblx0dGhyb3cgbmV3IEVycm9yKCBcIlN5bnRheCBlcnJvciwgdW5yZWNvZ25pemVkIGV4cHJlc3Npb246IFwiICsgbXNnICk7XG59O1xuXG4vKipcbiAqIERvY3VtZW50IHNvcnRpbmcgYW5kIHJlbW92aW5nIGR1cGxpY2F0ZXNcbiAqIEBwYXJhbSB7QXJyYXlMaWtlfSByZXN1bHRzXG4gKi9cblNpenpsZS51bmlxdWVTb3J0ID0gZnVuY3Rpb24oIHJlc3VsdHMgKSB7XG5cdHZhciBlbGVtLFxuXHRcdGR1cGxpY2F0ZXMgPSBbXSxcblx0XHRqID0gMCxcblx0XHRpID0gMDtcblxuXHQvLyBVbmxlc3Mgd2UgKmtub3cqIHdlIGNhbiBkZXRlY3QgZHVwbGljYXRlcywgYXNzdW1lIHRoZWlyIHByZXNlbmNlXG5cdGhhc0R1cGxpY2F0ZSA9ICFzdXBwb3J0LmRldGVjdER1cGxpY2F0ZXM7XG5cdHNvcnRJbnB1dCA9ICFzdXBwb3J0LnNvcnRTdGFibGUgJiYgcmVzdWx0cy5zbGljZSggMCApO1xuXHRyZXN1bHRzLnNvcnQoIHNvcnRPcmRlciApO1xuXG5cdGlmICggaGFzRHVwbGljYXRlICkge1xuXHRcdHdoaWxlICggKCBlbGVtID0gcmVzdWx0c1sgaSsrIF0gKSApIHtcblx0XHRcdGlmICggZWxlbSA9PT0gcmVzdWx0c1sgaSBdICkge1xuXHRcdFx0XHRqID0gZHVwbGljYXRlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0cmVzdWx0cy5zcGxpY2UoIGR1cGxpY2F0ZXNbIGogXSwgMSApO1xuXHRcdH1cblx0fVxuXG5cdC8vIENsZWFyIGlucHV0IGFmdGVyIHNvcnRpbmcgdG8gcmVsZWFzZSBvYmplY3RzXG5cdC8vIFNlZSBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L3NpenpsZS9wdWxsLzIyNVxuXHRzb3J0SW5wdXQgPSBudWxsO1xuXG5cdHJldHVybiByZXN1bHRzO1xufTtcblxuLyoqXG4gKiBVdGlsaXR5IGZ1bmN0aW9uIGZvciByZXRyaWV2aW5nIHRoZSB0ZXh0IHZhbHVlIG9mIGFuIGFycmF5IG9mIERPTSBub2Rlc1xuICogQHBhcmFtIHtBcnJheXxFbGVtZW50fSBlbGVtXG4gKi9cbmdldFRleHQgPSBTaXp6bGUuZ2V0VGV4dCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHR2YXIgbm9kZSxcblx0XHRyZXQgPSBcIlwiLFxuXHRcdGkgPSAwLFxuXHRcdG5vZGVUeXBlID0gZWxlbS5ub2RlVHlwZTtcblxuXHRpZiAoICFub2RlVHlwZSApIHtcblxuXHRcdC8vIElmIG5vIG5vZGVUeXBlLCB0aGlzIGlzIGV4cGVjdGVkIHRvIGJlIGFuIGFycmF5XG5cdFx0d2hpbGUgKCAoIG5vZGUgPSBlbGVtWyBpKysgXSApICkge1xuXG5cdFx0XHQvLyBEbyBub3QgdHJhdmVyc2UgY29tbWVudCBub2Rlc1xuXHRcdFx0cmV0ICs9IGdldFRleHQoIG5vZGUgKTtcblx0XHR9XG5cdH0gZWxzZSBpZiAoIG5vZGVUeXBlID09PSAxIHx8IG5vZGVUeXBlID09PSA5IHx8IG5vZGVUeXBlID09PSAxMSApIHtcblxuXHRcdC8vIFVzZSB0ZXh0Q29udGVudCBmb3IgZWxlbWVudHNcblx0XHQvLyBpbm5lclRleHQgdXNhZ2UgcmVtb3ZlZCBmb3IgY29uc2lzdGVuY3kgb2YgbmV3IGxpbmVzIChqUXVlcnkgIzExMTUzKVxuXHRcdGlmICggdHlwZW9mIGVsZW0udGV4dENvbnRlbnQgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS50ZXh0Q29udGVudDtcblx0XHR9IGVsc2Uge1xuXG5cdFx0XHQvLyBUcmF2ZXJzZSBpdHMgY2hpbGRyZW5cblx0XHRcdGZvciAoIGVsZW0gPSBlbGVtLmZpcnN0Q2hpbGQ7IGVsZW07IGVsZW0gPSBlbGVtLm5leHRTaWJsaW5nICkge1xuXHRcdFx0XHRyZXQgKz0gZ2V0VGV4dCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSBlbHNlIGlmICggbm9kZVR5cGUgPT09IDMgfHwgbm9kZVR5cGUgPT09IDQgKSB7XG5cdFx0cmV0dXJuIGVsZW0ubm9kZVZhbHVlO1xuXHR9XG5cblx0Ly8gRG8gbm90IGluY2x1ZGUgY29tbWVudCBvciBwcm9jZXNzaW5nIGluc3RydWN0aW9uIG5vZGVzXG5cblx0cmV0dXJuIHJldDtcbn07XG5cbkV4cHIgPSBTaXp6bGUuc2VsZWN0b3JzID0ge1xuXG5cdC8vIENhbiBiZSBhZGp1c3RlZCBieSB0aGUgdXNlclxuXHRjYWNoZUxlbmd0aDogNTAsXG5cblx0Y3JlYXRlUHNldWRvOiBtYXJrRnVuY3Rpb24sXG5cblx0bWF0Y2g6IG1hdGNoRXhwcixcblxuXHRhdHRySGFuZGxlOiB7fSxcblxuXHRmaW5kOiB7fSxcblxuXHRyZWxhdGl2ZToge1xuXHRcdFwiPlwiOiB7IGRpcjogXCJwYXJlbnROb2RlXCIsIGZpcnN0OiB0cnVlIH0sXG5cdFx0XCIgXCI6IHsgZGlyOiBcInBhcmVudE5vZGVcIiB9LFxuXHRcdFwiK1wiOiB7IGRpcjogXCJwcmV2aW91c1NpYmxpbmdcIiwgZmlyc3Q6IHRydWUgfSxcblx0XHRcIn5cIjogeyBkaXI6IFwicHJldmlvdXNTaWJsaW5nXCIgfVxuXHR9LFxuXG5cdHByZUZpbHRlcjoge1xuXHRcdFwiQVRUUlwiOiBmdW5jdGlvbiggbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaFsgMSBdID0gbWF0Y2hbIDEgXS5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXG5cdFx0XHQvLyBNb3ZlIHRoZSBnaXZlbiB2YWx1ZSB0byBtYXRjaFszXSB3aGV0aGVyIHF1b3RlZCBvciB1bnF1b3RlZFxuXHRcdFx0bWF0Y2hbIDMgXSA9ICggbWF0Y2hbIDMgXSB8fCBtYXRjaFsgNCBdIHx8XG5cdFx0XHRcdG1hdGNoWyA1IF0gfHwgXCJcIiApLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICk7XG5cblx0XHRcdGlmICggbWF0Y2hbIDIgXSA9PT0gXCJ+PVwiICkge1xuXHRcdFx0XHRtYXRjaFsgMyBdID0gXCIgXCIgKyBtYXRjaFsgMyBdICsgXCIgXCI7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBtYXRjaC5zbGljZSggMCwgNCApO1xuXHRcdH0sXG5cblx0XHRcIkNISUxEXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblxuXHRcdFx0LyogbWF0Y2hlcyBmcm9tIG1hdGNoRXhwcltcIkNISUxEXCJdXG5cdFx0XHRcdDEgdHlwZSAob25seXxudGh8Li4uKVxuXHRcdFx0XHQyIHdoYXQgKGNoaWxkfG9mLXR5cGUpXG5cdFx0XHRcdDMgYXJndW1lbnQgKGV2ZW58b2RkfFxcZCp8XFxkKm4oWystXVxcZCspP3wuLi4pXG5cdFx0XHRcdDQgeG4tY29tcG9uZW50IG9mIHhuK3kgYXJndW1lbnQgKFsrLV0/XFxkKm58KVxuXHRcdFx0XHQ1IHNpZ24gb2YgeG4tY29tcG9uZW50XG5cdFx0XHRcdDYgeCBvZiB4bi1jb21wb25lbnRcblx0XHRcdFx0NyBzaWduIG9mIHktY29tcG9uZW50XG5cdFx0XHRcdDggeSBvZiB5LWNvbXBvbmVudFxuXHRcdFx0Ki9cblx0XHRcdG1hdGNoWyAxIF0gPSBtYXRjaFsgMSBdLnRvTG93ZXJDYXNlKCk7XG5cblx0XHRcdGlmICggbWF0Y2hbIDEgXS5zbGljZSggMCwgMyApID09PSBcIm50aFwiICkge1xuXG5cdFx0XHRcdC8vIG50aC0qIHJlcXVpcmVzIGFyZ3VtZW50XG5cdFx0XHRcdGlmICggIW1hdGNoWyAzIF0gKSB7XG5cdFx0XHRcdFx0U2l6emxlLmVycm9yKCBtYXRjaFsgMCBdICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBudW1lcmljIHggYW5kIHkgcGFyYW1ldGVycyBmb3IgRXhwci5maWx0ZXIuQ0hJTERcblx0XHRcdFx0Ly8gcmVtZW1iZXIgdGhhdCBmYWxzZS90cnVlIGNhc3QgcmVzcGVjdGl2ZWx5IHRvIDAvMVxuXHRcdFx0XHRtYXRjaFsgNCBdID0gKyggbWF0Y2hbIDQgXSA/XG5cdFx0XHRcdFx0bWF0Y2hbIDUgXSArICggbWF0Y2hbIDYgXSB8fCAxICkgOlxuXHRcdFx0XHRcdDIgKiAoIG1hdGNoWyAzIF0gPT09IFwiZXZlblwiIHx8IG1hdGNoWyAzIF0gPT09IFwib2RkXCIgKSApO1xuXHRcdFx0XHRtYXRjaFsgNSBdID0gKyggKCBtYXRjaFsgNyBdICsgbWF0Y2hbIDggXSApIHx8IG1hdGNoWyAzIF0gPT09IFwib2RkXCIgKTtcblxuXHRcdFx0XHQvLyBvdGhlciB0eXBlcyBwcm9oaWJpdCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIG1hdGNoWyAzIF0gKSB7XG5cdFx0XHRcdFNpenpsZS5lcnJvciggbWF0Y2hbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXR1cm4gbWF0Y2g7XG5cdFx0fSxcblxuXHRcdFwiUFNFVURPXCI6IGZ1bmN0aW9uKCBtYXRjaCApIHtcblx0XHRcdHZhciBleGNlc3MsXG5cdFx0XHRcdHVucXVvdGVkID0gIW1hdGNoWyA2IF0gJiYgbWF0Y2hbIDIgXTtcblxuXHRcdFx0aWYgKCBtYXRjaEV4cHJbIFwiQ0hJTERcIiBdLnRlc3QoIG1hdGNoWyAwIF0gKSApIHtcblx0XHRcdFx0cmV0dXJuIG51bGw7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFjY2VwdCBxdW90ZWQgYXJndW1lbnRzIGFzLWlzXG5cdFx0XHRpZiAoIG1hdGNoWyAzIF0gKSB7XG5cdFx0XHRcdG1hdGNoWyAyIF0gPSBtYXRjaFsgNCBdIHx8IG1hdGNoWyA1IF0gfHwgXCJcIjtcblxuXHRcdFx0Ly8gU3RyaXAgZXhjZXNzIGNoYXJhY3RlcnMgZnJvbSB1bnF1b3RlZCBhcmd1bWVudHNcblx0XHRcdH0gZWxzZSBpZiAoIHVucXVvdGVkICYmIHJwc2V1ZG8udGVzdCggdW5xdW90ZWQgKSAmJlxuXG5cdFx0XHRcdC8vIEdldCBleGNlc3MgZnJvbSB0b2tlbml6ZSAocmVjdXJzaXZlbHkpXG5cdFx0XHRcdCggZXhjZXNzID0gdG9rZW5pemUoIHVucXVvdGVkLCB0cnVlICkgKSAmJlxuXG5cdFx0XHRcdC8vIGFkdmFuY2UgdG8gdGhlIG5leHQgY2xvc2luZyBwYXJlbnRoZXNpc1xuXHRcdFx0XHQoIGV4Y2VzcyA9IHVucXVvdGVkLmluZGV4T2YoIFwiKVwiLCB1bnF1b3RlZC5sZW5ndGggLSBleGNlc3MgKSAtIHVucXVvdGVkLmxlbmd0aCApICkge1xuXG5cdFx0XHRcdC8vIGV4Y2VzcyBpcyBhIG5lZ2F0aXZlIGluZGV4XG5cdFx0XHRcdG1hdGNoWyAwIF0gPSBtYXRjaFsgMCBdLnNsaWNlKCAwLCBleGNlc3MgKTtcblx0XHRcdFx0bWF0Y2hbIDIgXSA9IHVucXVvdGVkLnNsaWNlKCAwLCBleGNlc3MgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUmV0dXJuIG9ubHkgY2FwdHVyZXMgbmVlZGVkIGJ5IHRoZSBwc2V1ZG8gZmlsdGVyIG1ldGhvZCAodHlwZSBhbmQgYXJndW1lbnQpXG5cdFx0XHRyZXR1cm4gbWF0Y2guc2xpY2UoIDAsIDMgKTtcblx0XHR9XG5cdH0sXG5cblx0ZmlsdGVyOiB7XG5cblx0XHRcIlRBR1wiOiBmdW5jdGlvbiggbm9kZU5hbWVTZWxlY3RvciApIHtcblx0XHRcdHZhciBub2RlTmFtZSA9IG5vZGVOYW1lU2VsZWN0b3IucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIG5vZGVOYW1lU2VsZWN0b3IgPT09IFwiKlwiID9cblx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdH0gOlxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5vZGVOYW1lO1xuXHRcdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIkNMQVNTXCI6IGZ1bmN0aW9uKCBjbGFzc05hbWUgKSB7XG5cdFx0XHR2YXIgcGF0dGVybiA9IGNsYXNzQ2FjaGVbIGNsYXNzTmFtZSArIFwiIFwiIF07XG5cblx0XHRcdHJldHVybiBwYXR0ZXJuIHx8XG5cdFx0XHRcdCggcGF0dGVybiA9IG5ldyBSZWdFeHAoIFwiKF58XCIgKyB3aGl0ZXNwYWNlICtcblx0XHRcdFx0XHRcIilcIiArIGNsYXNzTmFtZSArIFwiKFwiICsgd2hpdGVzcGFjZSArIFwifCQpXCIgKSApICYmIGNsYXNzQ2FjaGUoXG5cdFx0XHRcdFx0XHRjbGFzc05hbWUsIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gcGF0dGVybi50ZXN0KFxuXHRcdFx0XHRcdFx0XHRcdHR5cGVvZiBlbGVtLmNsYXNzTmFtZSA9PT0gXCJzdHJpbmdcIiAmJiBlbGVtLmNsYXNzTmFtZSB8fFxuXHRcdFx0XHRcdFx0XHRcdHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSAhPT0gXCJ1bmRlZmluZWRcIiAmJlxuXHRcdFx0XHRcdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGUoIFwiY2xhc3NcIiApIHx8XG5cdFx0XHRcdFx0XHRcdFx0XCJcIlxuXHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9ICk7XG5cdFx0fSxcblxuXHRcdFwiQVRUUlwiOiBmdW5jdGlvbiggbmFtZSwgb3BlcmF0b3IsIGNoZWNrICkge1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgcmVzdWx0ID0gU2l6emxlLmF0dHIoIGVsZW0sIG5hbWUgKTtcblxuXHRcdFx0XHRpZiAoIHJlc3VsdCA9PSBudWxsICkge1xuXHRcdFx0XHRcdHJldHVybiBvcGVyYXRvciA9PT0gXCIhPVwiO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGlmICggIW9wZXJhdG9yICkge1xuXHRcdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmVzdWx0ICs9IFwiXCI7XG5cblx0XHRcdFx0LyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuXG5cdFx0XHRcdHJldHVybiBvcGVyYXRvciA9PT0gXCI9XCIgPyByZXN1bHQgPT09IGNoZWNrIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCIhPVwiID8gcmVzdWx0ICE9PSBjaGVjayA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiXj1cIiA/IGNoZWNrICYmIHJlc3VsdC5pbmRleE9mKCBjaGVjayApID09PSAwIDpcblx0XHRcdFx0XHRvcGVyYXRvciA9PT0gXCIqPVwiID8gY2hlY2sgJiYgcmVzdWx0LmluZGV4T2YoIGNoZWNrICkgPiAtMSA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwiJD1cIiA/IGNoZWNrICYmIHJlc3VsdC5zbGljZSggLWNoZWNrLmxlbmd0aCApID09PSBjaGVjayA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwifj1cIiA/ICggXCIgXCIgKyByZXN1bHQucmVwbGFjZSggcndoaXRlc3BhY2UsIFwiIFwiICkgKyBcIiBcIiApLmluZGV4T2YoIGNoZWNrICkgPiAtMSA6XG5cdFx0XHRcdFx0b3BlcmF0b3IgPT09IFwifD1cIiA/IHJlc3VsdCA9PT0gY2hlY2sgfHwgcmVzdWx0LnNsaWNlKCAwLCBjaGVjay5sZW5ndGggKyAxICkgPT09IGNoZWNrICsgXCItXCIgOlxuXHRcdFx0XHRcdGZhbHNlO1xuXHRcdFx0XHQvKiBlc2xpbnQtZW5hYmxlIG1heC1sZW4gKi9cblxuXHRcdFx0fTtcblx0XHR9LFxuXG5cdFx0XCJDSElMRFwiOiBmdW5jdGlvbiggdHlwZSwgd2hhdCwgX2FyZ3VtZW50LCBmaXJzdCwgbGFzdCApIHtcblx0XHRcdHZhciBzaW1wbGUgPSB0eXBlLnNsaWNlKCAwLCAzICkgIT09IFwibnRoXCIsXG5cdFx0XHRcdGZvcndhcmQgPSB0eXBlLnNsaWNlKCAtNCApICE9PSBcImxhc3RcIixcblx0XHRcdFx0b2ZUeXBlID0gd2hhdCA9PT0gXCJvZi10eXBlXCI7XG5cblx0XHRcdHJldHVybiBmaXJzdCA9PT0gMSAmJiBsYXN0ID09PSAwID9cblxuXHRcdFx0XHQvLyBTaG9ydGN1dCBmb3IgOm50aC0qKG4pXG5cdFx0XHRcdGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRcdHJldHVybiAhIWVsZW0ucGFyZW50Tm9kZTtcblx0XHRcdFx0fSA6XG5cblx0XHRcdFx0ZnVuY3Rpb24oIGVsZW0sIF9jb250ZXh0LCB4bWwgKSB7XG5cdFx0XHRcdFx0dmFyIGNhY2hlLCB1bmlxdWVDYWNoZSwgb3V0ZXJDYWNoZSwgbm9kZSwgbm9kZUluZGV4LCBzdGFydCxcblx0XHRcdFx0XHRcdGRpciA9IHNpbXBsZSAhPT0gZm9yd2FyZCA/IFwibmV4dFNpYmxpbmdcIiA6IFwicHJldmlvdXNTaWJsaW5nXCIsXG5cdFx0XHRcdFx0XHRwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGUsXG5cdFx0XHRcdFx0XHRuYW1lID0gb2ZUeXBlICYmIGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSxcblx0XHRcdFx0XHRcdHVzZUNhY2hlID0gIXhtbCAmJiAhb2ZUeXBlLFxuXHRcdFx0XHRcdFx0ZGlmZiA9IGZhbHNlO1xuXG5cdFx0XHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cblx0XHRcdFx0XHRcdC8vIDooZmlyc3R8bGFzdHxvbmx5KS0oY2hpbGR8b2YtdHlwZSlcblx0XHRcdFx0XHRcdGlmICggc2ltcGxlICkge1xuXHRcdFx0XHRcdFx0XHR3aGlsZSAoIGRpciApIHtcblx0XHRcdFx0XHRcdFx0XHRub2RlID0gZWxlbTtcblx0XHRcdFx0XHRcdFx0XHR3aGlsZSAoICggbm9kZSA9IG5vZGVbIGRpciBdICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRpZiAoIG9mVHlwZSA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKSA9PT0gbmFtZSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdG5vZGUubm9kZVR5cGUgPT09IDEgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdC8vIFJldmVyc2UgZGlyZWN0aW9uIGZvciA6b25seS0qIChpZiB3ZSBoYXZlbid0IHlldCBkb25lIHNvKVxuXHRcdFx0XHRcdFx0XHRcdHN0YXJ0ID0gZGlyID0gdHlwZSA9PT0gXCJvbmx5XCIgJiYgIXN0YXJ0ICYmIFwibmV4dFNpYmxpbmdcIjtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0c3RhcnQgPSBbIGZvcndhcmQgPyBwYXJlbnQuZmlyc3RDaGlsZCA6IHBhcmVudC5sYXN0Q2hpbGQgXTtcblxuXHRcdFx0XHRcdFx0Ly8gbm9uLXhtbCA6bnRoLWNoaWxkKC4uLikgc3RvcmVzIGNhY2hlIGRhdGEgb24gYHBhcmVudGBcblx0XHRcdFx0XHRcdGlmICggZm9yd2FyZCAmJiB1c2VDYWNoZSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBTZWVrIGBlbGVtYCBmcm9tIGEgcHJldmlvdXNseS1jYWNoZWQgaW5kZXhcblxuXHRcdFx0XHRcdFx0XHQvLyAuLi5pbiBhIGd6aXAtZnJpZW5kbHkgd2F5XG5cdFx0XHRcdFx0XHRcdG5vZGUgPSBwYXJlbnQ7XG5cdFx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBub2RlWyBleHBhbmRvIF0gfHwgKCBub2RlWyBleHBhbmRvIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0KCBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRcdGNhY2hlID0gdW5pcXVlQ2FjaGVbIHR5cGUgXSB8fCBbXTtcblx0XHRcdFx0XHRcdFx0bm9kZUluZGV4ID0gY2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBjYWNoZVsgMSBdO1xuXHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4ICYmIGNhY2hlWyAyIF07XG5cdFx0XHRcdFx0XHRcdG5vZGUgPSBub2RlSW5kZXggJiYgcGFyZW50LmNoaWxkTm9kZXNbIG5vZGVJbmRleCBdO1xuXG5cdFx0XHRcdFx0XHRcdHdoaWxlICggKCBub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gRmFsbGJhY2sgdG8gc2Vla2luZyBgZWxlbWAgZnJvbSB0aGUgc3RhcnRcblx0XHRcdFx0XHRcdFx0XHQoIGRpZmYgPSBub2RlSW5kZXggPSAwICkgfHwgc3RhcnQucG9wKCkgKSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFdoZW4gZm91bmQsIGNhY2hlIGluZGV4ZXMgb24gYHBhcmVudGAgYW5kIGJyZWFrXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBub2RlLm5vZGVUeXBlID09PSAxICYmICsrZGlmZiAmJiBub2RlID09PSBlbGVtICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGVbIHR5cGUgXSA9IFsgZGlycnVucywgbm9kZUluZGV4LCBkaWZmIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBVc2UgcHJldmlvdXNseS1jYWNoZWQgZWxlbWVudCBpbmRleCBpZiBhdmFpbGFibGVcblx0XHRcdFx0XHRcdFx0aWYgKCB1c2VDYWNoZSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIC4uLmluIGEgZ3ppcC1mcmllbmRseSB3YXlcblx0XHRcdFx0XHRcdFx0XHRub2RlID0gZWxlbTtcblx0XHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8ICggbm9kZVsgZXhwYW5kbyBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw5IG9ubHlcblx0XHRcdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdFx0XHR1bmlxdWVDYWNoZSA9IG91dGVyQ2FjaGVbIG5vZGUudW5pcXVlSUQgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0KCBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHRcdFx0Y2FjaGUgPSB1bmlxdWVDYWNoZVsgdHlwZSBdIHx8IFtdO1xuXHRcdFx0XHRcdFx0XHRcdG5vZGVJbmRleCA9IGNhY2hlWyAwIF0gPT09IGRpcnJ1bnMgJiYgY2FjaGVbIDEgXTtcblx0XHRcdFx0XHRcdFx0XHRkaWZmID0gbm9kZUluZGV4O1xuXHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0Ly8geG1sIDpudGgtY2hpbGQoLi4uKVxuXHRcdFx0XHRcdFx0XHQvLyBvciA6bnRoLWxhc3QtY2hpbGQoLi4uKSBvciA6bnRoKC1sYXN0KT8tb2YtdHlwZSguLi4pXG5cdFx0XHRcdFx0XHRcdGlmICggZGlmZiA9PT0gZmFsc2UgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBVc2UgdGhlIHNhbWUgbG9vcCBhcyBhYm92ZSB0byBzZWVrIGBlbGVtYCBmcm9tIHRoZSBzdGFydFxuXHRcdFx0XHRcdFx0XHRcdHdoaWxlICggKCBub2RlID0gKytub2RlSW5kZXggJiYgbm9kZSAmJiBub2RlWyBkaXIgXSB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0KCBkaWZmID0gbm9kZUluZGV4ID0gMCApIHx8IHN0YXJ0LnBvcCgpICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdGlmICggKCBvZlR5cGUgP1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUgOlxuXHRcdFx0XHRcdFx0XHRcdFx0XHRub2RlLm5vZGVUeXBlID09PSAxICkgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0KytkaWZmICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIENhY2hlIHRoZSBpbmRleCBvZiBlYWNoIGVuY291bnRlcmVkIGVsZW1lbnRcblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCB1c2VDYWNoZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRvdXRlckNhY2hlID0gbm9kZVsgZXhwYW5kbyBdIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHQoIG5vZGVbIGV4cGFuZG8gXSA9IHt9ICk7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRGVmZW5kIGFnYWluc3QgY2xvbmVkIGF0dHJvcGVydGllcyAoalF1ZXJ5IGdoLTE3MDkpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0dW5pcXVlQ2FjaGUgPSBvdXRlckNhY2hlWyBub2RlLnVuaXF1ZUlEIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdCggb3V0ZXJDYWNoZVsgbm9kZS51bmlxdWVJRCBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlWyB0eXBlIF0gPSBbIGRpcnJ1bnMsIGRpZmYgXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggbm9kZSA9PT0gZWxlbSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHQvLyBJbmNvcnBvcmF0ZSB0aGUgb2Zmc2V0LCB0aGVuIGNoZWNrIGFnYWluc3QgY3ljbGUgc2l6ZVxuXHRcdFx0XHRcdFx0ZGlmZiAtPSBsYXN0O1xuXHRcdFx0XHRcdFx0cmV0dXJuIGRpZmYgPT09IGZpcnN0IHx8ICggZGlmZiAlIGZpcnN0ID09PSAwICYmIGRpZmYgLyBmaXJzdCA+PSAwICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9O1xuXHRcdH0sXG5cblx0XHRcIlBTRVVET1wiOiBmdW5jdGlvbiggcHNldWRvLCBhcmd1bWVudCApIHtcblxuXHRcdFx0Ly8gcHNldWRvLWNsYXNzIG5hbWVzIGFyZSBjYXNlLWluc2Vuc2l0aXZlXG5cdFx0XHQvLyBodHRwOi8vd3d3LnczLm9yZy9UUi9zZWxlY3RvcnMvI3BzZXVkby1jbGFzc2VzXG5cdFx0XHQvLyBQcmlvcml0aXplIGJ5IGNhc2Ugc2Vuc2l0aXZpdHkgaW4gY2FzZSBjdXN0b20gcHNldWRvcyBhcmUgYWRkZWQgd2l0aCB1cHBlcmNhc2UgbGV0dGVyc1xuXHRcdFx0Ly8gUmVtZW1iZXIgdGhhdCBzZXRGaWx0ZXJzIGluaGVyaXRzIGZyb20gcHNldWRvc1xuXHRcdFx0dmFyIGFyZ3MsXG5cdFx0XHRcdGZuID0gRXhwci5wc2V1ZG9zWyBwc2V1ZG8gXSB8fCBFeHByLnNldEZpbHRlcnNbIHBzZXVkby50b0xvd2VyQ2FzZSgpIF0gfHxcblx0XHRcdFx0XHRTaXp6bGUuZXJyb3IoIFwidW5zdXBwb3J0ZWQgcHNldWRvOiBcIiArIHBzZXVkbyApO1xuXG5cdFx0XHQvLyBUaGUgdXNlciBtYXkgdXNlIGNyZWF0ZVBzZXVkbyB0byBpbmRpY2F0ZSB0aGF0XG5cdFx0XHQvLyBhcmd1bWVudHMgYXJlIG5lZWRlZCB0byBjcmVhdGUgdGhlIGZpbHRlciBmdW5jdGlvblxuXHRcdFx0Ly8ganVzdCBhcyBTaXp6bGUgZG9lc1xuXHRcdFx0aWYgKCBmblsgZXhwYW5kbyBdICkge1xuXHRcdFx0XHRyZXR1cm4gZm4oIGFyZ3VtZW50ICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEJ1dCBtYWludGFpbiBzdXBwb3J0IGZvciBvbGQgc2lnbmF0dXJlc1xuXHRcdFx0aWYgKCBmbi5sZW5ndGggPiAxICkge1xuXHRcdFx0XHRhcmdzID0gWyBwc2V1ZG8sIHBzZXVkbywgXCJcIiwgYXJndW1lbnQgXTtcblx0XHRcdFx0cmV0dXJuIEV4cHIuc2V0RmlsdGVycy5oYXNPd25Qcm9wZXJ0eSggcHNldWRvLnRvTG93ZXJDYXNlKCkgKSA/XG5cdFx0XHRcdFx0bWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VlZCwgbWF0Y2hlcyApIHtcblx0XHRcdFx0XHRcdHZhciBpZHgsXG5cdFx0XHRcdFx0XHRcdG1hdGNoZWQgPSBmbiggc2VlZCwgYXJndW1lbnQgKSxcblx0XHRcdFx0XHRcdFx0aSA9IG1hdGNoZWQubGVuZ3RoO1xuXHRcdFx0XHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdFx0XHRcdGlkeCA9IGluZGV4T2YoIHNlZWQsIG1hdGNoZWRbIGkgXSApO1xuXHRcdFx0XHRcdFx0XHRzZWVkWyBpZHggXSA9ICEoIG1hdGNoZXNbIGlkeCBdID0gbWF0Y2hlZFsgaSBdICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fSApIDpcblx0XHRcdFx0XHRmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0XHRcdHJldHVybiBmbiggZWxlbSwgMCwgYXJncyApO1xuXHRcdFx0XHRcdH07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBmbjtcblx0XHR9XG5cdH0sXG5cblx0cHNldWRvczoge1xuXG5cdFx0Ly8gUG90ZW50aWFsbHkgY29tcGxleCBwc2V1ZG9zXG5cdFx0XCJub3RcIjogbWFya0Z1bmN0aW9uKCBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cblx0XHRcdC8vIFRyaW0gdGhlIHNlbGVjdG9yIHBhc3NlZCB0byBjb21waWxlXG5cdFx0XHQvLyB0byBhdm9pZCB0cmVhdGluZyBsZWFkaW5nIGFuZCB0cmFpbGluZ1xuXHRcdFx0Ly8gc3BhY2VzIGFzIGNvbWJpbmF0b3JzXG5cdFx0XHR2YXIgaW5wdXQgPSBbXSxcblx0XHRcdFx0cmVzdWx0cyA9IFtdLFxuXHRcdFx0XHRtYXRjaGVyID0gY29tcGlsZSggc2VsZWN0b3IucmVwbGFjZSggcnRyaW0sIFwiJDFcIiApICk7XG5cblx0XHRcdHJldHVybiBtYXRjaGVyWyBleHBhbmRvIF0gP1xuXHRcdFx0XHRtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWVkLCBtYXRjaGVzLCBfY29udGV4dCwgeG1sICkge1xuXHRcdFx0XHRcdHZhciBlbGVtLFxuXHRcdFx0XHRcdFx0dW5tYXRjaGVkID0gbWF0Y2hlciggc2VlZCwgbnVsbCwgeG1sLCBbXSApLFxuXHRcdFx0XHRcdFx0aSA9IHNlZWQubGVuZ3RoO1xuXG5cdFx0XHRcdFx0Ly8gTWF0Y2ggZWxlbWVudHMgdW5tYXRjaGVkIGJ5IGBtYXRjaGVyYFxuXHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSB1bm1hdGNoZWRbIGkgXSApICkge1xuXHRcdFx0XHRcdFx0XHRzZWVkWyBpIF0gPSAhKCBtYXRjaGVzWyBpIF0gPSBlbGVtICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRmdW5jdGlvbiggZWxlbSwgX2NvbnRleHQsIHhtbCApIHtcblx0XHRcdFx0XHRpbnB1dFsgMCBdID0gZWxlbTtcblx0XHRcdFx0XHRtYXRjaGVyKCBpbnB1dCwgbnVsbCwgeG1sLCByZXN1bHRzICk7XG5cblx0XHRcdFx0XHQvLyBEb24ndCBrZWVwIHRoZSBlbGVtZW50IChpc3N1ZSAjMjk5KVxuXHRcdFx0XHRcdGlucHV0WyAwIF0gPSBudWxsO1xuXHRcdFx0XHRcdHJldHVybiAhcmVzdWx0cy5wb3AoKTtcblx0XHRcdFx0fTtcblx0XHR9ICksXG5cblx0XHRcImhhc1wiOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRcdHJldHVybiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdFx0cmV0dXJuIFNpenpsZSggc2VsZWN0b3IsIGVsZW0gKS5sZW5ndGggPiAwO1xuXHRcdFx0fTtcblx0XHR9ICksXG5cblx0XHRcImNvbnRhaW5zXCI6IG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHRleHQgKSB7XG5cdFx0XHR0ZXh0ID0gdGV4dC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHRyZXR1cm4gKCBlbGVtLnRleHRDb250ZW50IHx8IGdldFRleHQoIGVsZW0gKSApLmluZGV4T2YoIHRleHQgKSA+IC0xO1xuXHRcdFx0fTtcblx0XHR9ICksXG5cblx0XHQvLyBcIldoZXRoZXIgYW4gZWxlbWVudCBpcyByZXByZXNlbnRlZCBieSBhIDpsYW5nKCkgc2VsZWN0b3Jcblx0XHQvLyBpcyBiYXNlZCBzb2xlbHkgb24gdGhlIGVsZW1lbnQncyBsYW5ndWFnZSB2YWx1ZVxuXHRcdC8vIGJlaW5nIGVxdWFsIHRvIHRoZSBpZGVudGlmaWVyIEMsXG5cdFx0Ly8gb3IgYmVnaW5uaW5nIHdpdGggdGhlIGlkZW50aWZpZXIgQyBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBcIi1cIi5cblx0XHQvLyBUaGUgbWF0Y2hpbmcgb2YgQyBhZ2FpbnN0IHRoZSBlbGVtZW50J3MgbGFuZ3VhZ2UgdmFsdWUgaXMgcGVyZm9ybWVkIGNhc2UtaW5zZW5zaXRpdmVseS5cblx0XHQvLyBUaGUgaWRlbnRpZmllciBDIGRvZXMgbm90IGhhdmUgdG8gYmUgYSB2YWxpZCBsYW5ndWFnZSBuYW1lLlwiXG5cdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNsYW5nLXBzZXVkb1xuXHRcdFwibGFuZ1wiOiBtYXJrRnVuY3Rpb24oIGZ1bmN0aW9uKCBsYW5nICkge1xuXG5cdFx0XHQvLyBsYW5nIHZhbHVlIG11c3QgYmUgYSB2YWxpZCBpZGVudGlmaWVyXG5cdFx0XHRpZiAoICFyaWRlbnRpZmllci50ZXN0KCBsYW5nIHx8IFwiXCIgKSApIHtcblx0XHRcdFx0U2l6emxlLmVycm9yKCBcInVuc3VwcG9ydGVkIGxhbmc6IFwiICsgbGFuZyApO1xuXHRcdFx0fVxuXHRcdFx0bGFuZyA9IGxhbmcucmVwbGFjZSggcnVuZXNjYXBlLCBmdW5lc2NhcGUgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgZWxlbUxhbmc7XG5cdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRpZiAoICggZWxlbUxhbmcgPSBkb2N1bWVudElzSFRNTCA/XG5cdFx0XHRcdFx0XHRlbGVtLmxhbmcgOlxuXHRcdFx0XHRcdFx0ZWxlbS5nZXRBdHRyaWJ1dGUoIFwieG1sOmxhbmdcIiApIHx8IGVsZW0uZ2V0QXR0cmlidXRlKCBcImxhbmdcIiApICkgKSB7XG5cblx0XHRcdFx0XHRcdGVsZW1MYW5nID0gZWxlbUxhbmcudG9Mb3dlckNhc2UoKTtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtTGFuZyA9PT0gbGFuZyB8fCBlbGVtTGFuZy5pbmRleE9mKCBsYW5nICsgXCItXCIgKSA9PT0gMDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gd2hpbGUgKCAoIGVsZW0gPSBlbGVtLnBhcmVudE5vZGUgKSAmJiBlbGVtLm5vZGVUeXBlID09PSAxICk7XG5cdFx0XHRcdHJldHVybiBmYWxzZTtcblx0XHRcdH07XG5cdFx0fSApLFxuXG5cdFx0Ly8gTWlzY2VsbGFuZW91c1xuXHRcdFwidGFyZ2V0XCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIGhhc2ggPSB3aW5kb3cubG9jYXRpb24gJiYgd2luZG93LmxvY2F0aW9uLmhhc2g7XG5cdFx0XHRyZXR1cm4gaGFzaCAmJiBoYXNoLnNsaWNlKCAxICkgPT09IGVsZW0uaWQ7XG5cdFx0fSxcblxuXHRcdFwicm9vdFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiBlbGVtID09PSBkb2NFbGVtO1xuXHRcdH0sXG5cblx0XHRcImZvY3VzXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgJiZcblx0XHRcdFx0KCAhZG9jdW1lbnQuaGFzRm9jdXMgfHwgZG9jdW1lbnQuaGFzRm9jdXMoKSApICYmXG5cdFx0XHRcdCEhKCBlbGVtLnR5cGUgfHwgZWxlbS5ocmVmIHx8IH5lbGVtLnRhYkluZGV4ICk7XG5cdFx0fSxcblxuXHRcdC8vIEJvb2xlYW4gcHJvcGVydGllc1xuXHRcdFwiZW5hYmxlZFwiOiBjcmVhdGVEaXNhYmxlZFBzZXVkbyggZmFsc2UgKSxcblx0XHRcImRpc2FibGVkXCI6IGNyZWF0ZURpc2FibGVkUHNldWRvKCB0cnVlICksXG5cblx0XHRcImNoZWNrZWRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdC8vIEluIENTUzMsIDpjaGVja2VkIHNob3VsZCByZXR1cm4gYm90aCBjaGVja2VkIGFuZCBzZWxlY3RlZCBlbGVtZW50c1xuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvMjAxMS9SRUMtY3NzMy1zZWxlY3RvcnMtMjAxMTA5MjkvI2NoZWNrZWRcblx0XHRcdHZhciBub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblx0XHRcdHJldHVybiAoIG5vZGVOYW1lID09PSBcImlucHV0XCIgJiYgISFlbGVtLmNoZWNrZWQgKSB8fFxuXHRcdFx0XHQoIG5vZGVOYW1lID09PSBcIm9wdGlvblwiICYmICEhZWxlbS5zZWxlY3RlZCApO1xuXHRcdH0sXG5cblx0XHRcInNlbGVjdGVkXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvLyBBY2Nlc3NpbmcgdGhpcyBwcm9wZXJ0eSBtYWtlcyBzZWxlY3RlZC1ieS1kZWZhdWx0XG5cdFx0XHQvLyBvcHRpb25zIGluIFNhZmFyaSB3b3JrIHByb3Blcmx5XG5cdFx0XHRpZiAoIGVsZW0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0Ly8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xuXHRcdFx0XHRlbGVtLnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGVsZW0uc2VsZWN0ZWQgPT09IHRydWU7XG5cdFx0fSxcblxuXHRcdC8vIENvbnRlbnRzXG5cdFx0XCJlbXB0eVwiOiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0Ly8gaHR0cDovL3d3dy53My5vcmcvVFIvc2VsZWN0b3JzLyNlbXB0eS1wc2V1ZG9cblx0XHRcdC8vIDplbXB0eSBpcyBuZWdhdGVkIGJ5IGVsZW1lbnQgKDEpIG9yIGNvbnRlbnQgbm9kZXMgKHRleHQ6IDM7IGNkYXRhOiA0OyBlbnRpdHkgcmVmOiA1KSxcblx0XHRcdC8vICAgYnV0IG5vdCBieSBvdGhlcnMgKGNvbW1lbnQ6IDg7IHByb2Nlc3NpbmcgaW5zdHJ1Y3Rpb246IDc7IGV0Yy4pXG5cdFx0XHQvLyBub2RlVHlwZSA8IDYgd29ya3MgYmVjYXVzZSBhdHRyaWJ1dGVzICgyKSBkbyBub3QgYXBwZWFyIGFzIGNoaWxkcmVuXG5cdFx0XHRmb3IgKCBlbGVtID0gZWxlbS5maXJzdENoaWxkOyBlbGVtOyBlbGVtID0gZWxlbS5uZXh0U2libGluZyApIHtcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlIDwgNiApIHtcblx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0sXG5cblx0XHRcInBhcmVudFwiOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdHJldHVybiAhRXhwci5wc2V1ZG9zWyBcImVtcHR5XCIgXSggZWxlbSApO1xuXHRcdH0sXG5cblx0XHQvLyBFbGVtZW50L2lucHV0IHR5cGVzXG5cdFx0XCJoZWFkZXJcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gcmhlYWRlci50ZXN0KCBlbGVtLm5vZGVOYW1lICk7XG5cdFx0fSxcblxuXHRcdFwiaW5wdXRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gcmlucHV0cy50ZXN0KCBlbGVtLm5vZGVOYW1lICk7XG5cdFx0fSxcblxuXHRcdFwiYnV0dG9uXCI6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0dmFyIG5hbWUgPSBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7XG5cdFx0XHRyZXR1cm4gbmFtZSA9PT0gXCJpbnB1dFwiICYmIGVsZW0udHlwZSA9PT0gXCJidXR0b25cIiB8fCBuYW1lID09PSBcImJ1dHRvblwiO1xuXHRcdH0sXG5cblx0XHRcInRleHRcIjogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgYXR0cjtcblx0XHRcdHJldHVybiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IFwiaW5wdXRcIiAmJlxuXHRcdFx0XHRlbGVtLnR5cGUgPT09IFwidGV4dFwiICYmXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUU8OFxuXHRcdFx0XHQvLyBOZXcgSFRNTDUgYXR0cmlidXRlIHZhbHVlcyAoZS5nLiwgXCJzZWFyY2hcIikgYXBwZWFyIHdpdGggZWxlbS50eXBlID09PSBcInRleHRcIlxuXHRcdFx0XHQoICggYXR0ciA9IGVsZW0uZ2V0QXR0cmlidXRlKCBcInR5cGVcIiApICkgPT0gbnVsbCB8fFxuXHRcdFx0XHRcdGF0dHIudG9Mb3dlckNhc2UoKSA9PT0gXCJ0ZXh0XCIgKTtcblx0XHR9LFxuXG5cdFx0Ly8gUG9zaXRpb24taW4tY29sbGVjdGlvblxuXHRcdFwiZmlyc3RcIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXR1cm4gWyAwIF07XG5cdFx0fSApLFxuXG5cdFx0XCJsYXN0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBfbWF0Y2hJbmRleGVzLCBsZW5ndGggKSB7XG5cdFx0XHRyZXR1cm4gWyBsZW5ndGggLSAxIF07XG5cdFx0fSApLFxuXG5cdFx0XCJlcVwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggX21hdGNoSW5kZXhlcywgbGVuZ3RoLCBhcmd1bWVudCApIHtcblx0XHRcdHJldHVybiBbIGFyZ3VtZW50IDwgMCA/IGFyZ3VtZW50ICsgbGVuZ3RoIDogYXJndW1lbnQgXTtcblx0XHR9ICksXG5cblx0XHRcImV2ZW5cIjogY3JlYXRlUG9zaXRpb25hbFBzZXVkbyggZnVuY3Rpb24oIG1hdGNoSW5kZXhlcywgbGVuZ3RoICkge1xuXHRcdFx0dmFyIGkgPSAwO1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuZ3RoOyBpICs9IDIgKSB7XG5cdFx0XHRcdG1hdGNoSW5kZXhlcy5wdXNoKCBpICk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gbWF0Y2hJbmRleGVzO1xuXHRcdH0gKSxcblxuXHRcdFwib2RkXCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCApIHtcblx0XHRcdHZhciBpID0gMTtcblx0XHRcdGZvciAoIDsgaSA8IGxlbmd0aDsgaSArPSAyICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9ICksXG5cblx0XHRcImx0XCI6IGNyZWF0ZVBvc2l0aW9uYWxQc2V1ZG8oIGZ1bmN0aW9uKCBtYXRjaEluZGV4ZXMsIGxlbmd0aCwgYXJndW1lbnQgKSB7XG5cdFx0XHR2YXIgaSA9IGFyZ3VtZW50IDwgMCA/XG5cdFx0XHRcdGFyZ3VtZW50ICsgbGVuZ3RoIDpcblx0XHRcdFx0YXJndW1lbnQgPiBsZW5ndGggP1xuXHRcdFx0XHRcdGxlbmd0aCA6XG5cdFx0XHRcdFx0YXJndW1lbnQ7XG5cdFx0XHRmb3IgKCA7IC0taSA+PSAwOyApIHtcblx0XHRcdFx0bWF0Y2hJbmRleGVzLnB1c2goIGkgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiBtYXRjaEluZGV4ZXM7XG5cdFx0fSApLFxuXG5cdFx0XCJndFwiOiBjcmVhdGVQb3NpdGlvbmFsUHNldWRvKCBmdW5jdGlvbiggbWF0Y2hJbmRleGVzLCBsZW5ndGgsIGFyZ3VtZW50ICkge1xuXHRcdFx0dmFyIGkgPSBhcmd1bWVudCA8IDAgPyBhcmd1bWVudCArIGxlbmd0aCA6IGFyZ3VtZW50O1xuXHRcdFx0Zm9yICggOyArK2kgPCBsZW5ndGg7ICkge1xuXHRcdFx0XHRtYXRjaEluZGV4ZXMucHVzaCggaSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIG1hdGNoSW5kZXhlcztcblx0XHR9IClcblx0fVxufTtcblxuRXhwci5wc2V1ZG9zWyBcIm50aFwiIF0gPSBFeHByLnBzZXVkb3NbIFwiZXFcIiBdO1xuXG4vLyBBZGQgYnV0dG9uL2lucHV0IHR5cGUgcHNldWRvc1xuZm9yICggaSBpbiB7IHJhZGlvOiB0cnVlLCBjaGVja2JveDogdHJ1ZSwgZmlsZTogdHJ1ZSwgcGFzc3dvcmQ6IHRydWUsIGltYWdlOiB0cnVlIH0gKSB7XG5cdEV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlSW5wdXRQc2V1ZG8oIGkgKTtcbn1cbmZvciAoIGkgaW4geyBzdWJtaXQ6IHRydWUsIHJlc2V0OiB0cnVlIH0gKSB7XG5cdEV4cHIucHNldWRvc1sgaSBdID0gY3JlYXRlQnV0dG9uUHNldWRvKCBpICk7XG59XG5cbi8vIEVhc3kgQVBJIGZvciBjcmVhdGluZyBuZXcgc2V0RmlsdGVyc1xuZnVuY3Rpb24gc2V0RmlsdGVycygpIHt9XG5zZXRGaWx0ZXJzLnByb3RvdHlwZSA9IEV4cHIuZmlsdGVycyA9IEV4cHIucHNldWRvcztcbkV4cHIuc2V0RmlsdGVycyA9IG5ldyBzZXRGaWx0ZXJzKCk7XG5cbnRva2VuaXplID0gU2l6emxlLnRva2VuaXplID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBwYXJzZU9ubHkgKSB7XG5cdHZhciBtYXRjaGVkLCBtYXRjaCwgdG9rZW5zLCB0eXBlLFxuXHRcdHNvRmFyLCBncm91cHMsIHByZUZpbHRlcnMsXG5cdFx0Y2FjaGVkID0gdG9rZW5DYWNoZVsgc2VsZWN0b3IgKyBcIiBcIiBdO1xuXG5cdGlmICggY2FjaGVkICkge1xuXHRcdHJldHVybiBwYXJzZU9ubHkgPyAwIDogY2FjaGVkLnNsaWNlKCAwICk7XG5cdH1cblxuXHRzb0ZhciA9IHNlbGVjdG9yO1xuXHRncm91cHMgPSBbXTtcblx0cHJlRmlsdGVycyA9IEV4cHIucHJlRmlsdGVyO1xuXG5cdHdoaWxlICggc29GYXIgKSB7XG5cblx0XHQvLyBDb21tYSBhbmQgZmlyc3QgcnVuXG5cdFx0aWYgKCAhbWF0Y2hlZCB8fCAoIG1hdGNoID0gcmNvbW1hLmV4ZWMoIHNvRmFyICkgKSApIHtcblx0XHRcdGlmICggbWF0Y2ggKSB7XG5cblx0XHRcdFx0Ly8gRG9uJ3QgY29uc3VtZSB0cmFpbGluZyBjb21tYXMgYXMgdmFsaWRcblx0XHRcdFx0c29GYXIgPSBzb0Zhci5zbGljZSggbWF0Y2hbIDAgXS5sZW5ndGggKSB8fCBzb0Zhcjtcblx0XHRcdH1cblx0XHRcdGdyb3Vwcy5wdXNoKCAoIHRva2VucyA9IFtdICkgKTtcblx0XHR9XG5cblx0XHRtYXRjaGVkID0gZmFsc2U7XG5cblx0XHQvLyBDb21iaW5hdG9yc1xuXHRcdGlmICggKCBtYXRjaCA9IHJjb21iaW5hdG9ycy5leGVjKCBzb0ZhciApICkgKSB7XG5cdFx0XHRtYXRjaGVkID0gbWF0Y2guc2hpZnQoKTtcblx0XHRcdHRva2Vucy5wdXNoKCB7XG5cdFx0XHRcdHZhbHVlOiBtYXRjaGVkLFxuXG5cdFx0XHRcdC8vIENhc3QgZGVzY2VuZGFudCBjb21iaW5hdG9ycyB0byBzcGFjZVxuXHRcdFx0XHR0eXBlOiBtYXRjaFsgMCBdLnJlcGxhY2UoIHJ0cmltLCBcIiBcIiApXG5cdFx0XHR9ICk7XG5cdFx0XHRzb0ZhciA9IHNvRmFyLnNsaWNlKCBtYXRjaGVkLmxlbmd0aCApO1xuXHRcdH1cblxuXHRcdC8vIEZpbHRlcnNcblx0XHRmb3IgKCB0eXBlIGluIEV4cHIuZmlsdGVyICkge1xuXHRcdFx0aWYgKCAoIG1hdGNoID0gbWF0Y2hFeHByWyB0eXBlIF0uZXhlYyggc29GYXIgKSApICYmICggIXByZUZpbHRlcnNbIHR5cGUgXSB8fFxuXHRcdFx0XHQoIG1hdGNoID0gcHJlRmlsdGVyc1sgdHlwZSBdKCBtYXRjaCApICkgKSApIHtcblx0XHRcdFx0bWF0Y2hlZCA9IG1hdGNoLnNoaWZ0KCk7XG5cdFx0XHRcdHRva2Vucy5wdXNoKCB7XG5cdFx0XHRcdFx0dmFsdWU6IG1hdGNoZWQsXG5cdFx0XHRcdFx0dHlwZTogdHlwZSxcblx0XHRcdFx0XHRtYXRjaGVzOiBtYXRjaFxuXHRcdFx0XHR9ICk7XG5cdFx0XHRcdHNvRmFyID0gc29GYXIuc2xpY2UoIG1hdGNoZWQubGVuZ3RoICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCAhbWF0Y2hlZCApIHtcblx0XHRcdGJyZWFrO1xuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgbGVuZ3RoIG9mIHRoZSBpbnZhbGlkIGV4Y2Vzc1xuXHQvLyBpZiB3ZSdyZSBqdXN0IHBhcnNpbmdcblx0Ly8gT3RoZXJ3aXNlLCB0aHJvdyBhbiBlcnJvciBvciByZXR1cm4gdG9rZW5zXG5cdHJldHVybiBwYXJzZU9ubHkgP1xuXHRcdHNvRmFyLmxlbmd0aCA6XG5cdFx0c29GYXIgP1xuXHRcdFx0U2l6emxlLmVycm9yKCBzZWxlY3RvciApIDpcblxuXHRcdFx0Ly8gQ2FjaGUgdGhlIHRva2Vuc1xuXHRcdFx0dG9rZW5DYWNoZSggc2VsZWN0b3IsIGdyb3VwcyApLnNsaWNlKCAwICk7XG59O1xuXG5mdW5jdGlvbiB0b1NlbGVjdG9yKCB0b2tlbnMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSB0b2tlbnMubGVuZ3RoLFxuXHRcdHNlbGVjdG9yID0gXCJcIjtcblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0c2VsZWN0b3IgKz0gdG9rZW5zWyBpIF0udmFsdWU7XG5cdH1cblx0cmV0dXJuIHNlbGVjdG9yO1xufVxuXG5mdW5jdGlvbiBhZGRDb21iaW5hdG9yKCBtYXRjaGVyLCBjb21iaW5hdG9yLCBiYXNlICkge1xuXHR2YXIgZGlyID0gY29tYmluYXRvci5kaXIsXG5cdFx0c2tpcCA9IGNvbWJpbmF0b3IubmV4dCxcblx0XHRrZXkgPSBza2lwIHx8IGRpcixcblx0XHRjaGVja05vbkVsZW1lbnRzID0gYmFzZSAmJiBrZXkgPT09IFwicGFyZW50Tm9kZVwiLFxuXHRcdGRvbmVOYW1lID0gZG9uZSsrO1xuXG5cdHJldHVybiBjb21iaW5hdG9yLmZpcnN0ID9cblxuXHRcdC8vIENoZWNrIGFnYWluc3QgY2xvc2VzdCBhbmNlc3Rvci9wcmVjZWRpbmcgZWxlbWVudFxuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgKSB7XG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSB8fCBjaGVja05vbkVsZW1lbnRzICkge1xuXHRcdFx0XHRcdHJldHVybiBtYXRjaGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0gOlxuXG5cdFx0Ly8gQ2hlY2sgYWdhaW5zdCBhbGwgYW5jZXN0b3IvcHJlY2VkaW5nIGVsZW1lbnRzXG5cdFx0ZnVuY3Rpb24oIGVsZW0sIGNvbnRleHQsIHhtbCApIHtcblx0XHRcdHZhciBvbGRDYWNoZSwgdW5pcXVlQ2FjaGUsIG91dGVyQ2FjaGUsXG5cdFx0XHRcdG5ld0NhY2hlID0gWyBkaXJydW5zLCBkb25lTmFtZSBdO1xuXG5cdFx0XHQvLyBXZSBjYW4ndCBzZXQgYXJiaXRyYXJ5IGRhdGEgb24gWE1MIG5vZGVzLCBzbyB0aGV5IGRvbid0IGJlbmVmaXQgZnJvbSBjb21iaW5hdG9yIGNhY2hpbmdcblx0XHRcdGlmICggeG1sICkge1xuXHRcdFx0XHR3aGlsZSAoICggZWxlbSA9IGVsZW1bIGRpciBdICkgKSB7XG5cdFx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGNoZWNrTm9uRWxlbWVudHMgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHdoaWxlICggKCBlbGVtID0gZWxlbVsgZGlyIF0gKSApIHtcblx0XHRcdFx0XHRpZiAoIGVsZW0ubm9kZVR5cGUgPT09IDEgfHwgY2hlY2tOb25FbGVtZW50cyApIHtcblx0XHRcdFx0XHRcdG91dGVyQ2FjaGUgPSBlbGVtWyBleHBhbmRvIF0gfHwgKCBlbGVtWyBleHBhbmRvIF0gPSB7fSApO1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8OSBvbmx5XG5cdFx0XHRcdFx0XHQvLyBEZWZlbmQgYWdhaW5zdCBjbG9uZWQgYXR0cm9wZXJ0aWVzIChqUXVlcnkgZ2gtMTcwOSlcblx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlID0gb3V0ZXJDYWNoZVsgZWxlbS51bmlxdWVJRCBdIHx8XG5cdFx0XHRcdFx0XHRcdCggb3V0ZXJDYWNoZVsgZWxlbS51bmlxdWVJRCBdID0ge30gKTtcblxuXHRcdFx0XHRcdFx0aWYgKCBza2lwICYmIHNraXAgPT09IGVsZW0ubm9kZU5hbWUudG9Mb3dlckNhc2UoKSApIHtcblx0XHRcdFx0XHRcdFx0ZWxlbSA9IGVsZW1bIGRpciBdIHx8IGVsZW07XG5cdFx0XHRcdFx0XHR9IGVsc2UgaWYgKCAoIG9sZENhY2hlID0gdW5pcXVlQ2FjaGVbIGtleSBdICkgJiZcblx0XHRcdFx0XHRcdFx0b2xkQ2FjaGVbIDAgXSA9PT0gZGlycnVucyAmJiBvbGRDYWNoZVsgMSBdID09PSBkb25lTmFtZSApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBBc3NpZ24gdG8gbmV3Q2FjaGUgc28gcmVzdWx0cyBiYWNrLXByb3BhZ2F0ZSB0byBwcmV2aW91cyBlbGVtZW50c1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gKCBuZXdDYWNoZVsgMiBdID0gb2xkQ2FjaGVbIDIgXSApO1xuXHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBSZXVzZSBuZXdjYWNoZSBzbyByZXN1bHRzIGJhY2stcHJvcGFnYXRlIHRvIHByZXZpb3VzIGVsZW1lbnRzXG5cdFx0XHRcdFx0XHRcdHVuaXF1ZUNhY2hlWyBrZXkgXSA9IG5ld0NhY2hlO1xuXG5cdFx0XHRcdFx0XHRcdC8vIEEgbWF0Y2ggbWVhbnMgd2UncmUgZG9uZTsgYSBmYWlsIG1lYW5zIHdlIGhhdmUgdG8ga2VlcCBjaGVja2luZ1xuXHRcdFx0XHRcdFx0XHRpZiAoICggbmV3Q2FjaGVbIDIgXSA9IG1hdGNoZXIoIGVsZW0sIGNvbnRleHQsIHhtbCApICkgKSB7XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9O1xufVxuXG5mdW5jdGlvbiBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSB7XG5cdHJldHVybiBtYXRjaGVycy5sZW5ndGggPiAxID9cblx0XHRmdW5jdGlvbiggZWxlbSwgY29udGV4dCwgeG1sICkge1xuXHRcdFx0dmFyIGkgPSBtYXRjaGVycy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0aWYgKCAhbWF0Y2hlcnNbIGkgXSggZWxlbSwgY29udGV4dCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IDpcblx0XHRtYXRjaGVyc1sgMCBdO1xufVxuXG5mdW5jdGlvbiBtdWx0aXBsZUNvbnRleHRzKCBzZWxlY3RvciwgY29udGV4dHMsIHJlc3VsdHMgKSB7XG5cdHZhciBpID0gMCxcblx0XHRsZW4gPSBjb250ZXh0cy5sZW5ndGg7XG5cdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFNpenpsZSggc2VsZWN0b3IsIGNvbnRleHRzWyBpIF0sIHJlc3VsdHMgKTtcblx0fVxuXHRyZXR1cm4gcmVzdWx0cztcbn1cblxuZnVuY3Rpb24gY29uZGVuc2UoIHVubWF0Y2hlZCwgbWFwLCBmaWx0ZXIsIGNvbnRleHQsIHhtbCApIHtcblx0dmFyIGVsZW0sXG5cdFx0bmV3VW5tYXRjaGVkID0gW10sXG5cdFx0aSA9IDAsXG5cdFx0bGVuID0gdW5tYXRjaGVkLmxlbmd0aCxcblx0XHRtYXBwZWQgPSBtYXAgIT0gbnVsbDtcblxuXHRmb3IgKCA7IGkgPCBsZW47IGkrKyApIHtcblx0XHRpZiAoICggZWxlbSA9IHVubWF0Y2hlZFsgaSBdICkgKSB7XG5cdFx0XHRpZiAoICFmaWx0ZXIgfHwgZmlsdGVyKCBlbGVtLCBjb250ZXh0LCB4bWwgKSApIHtcblx0XHRcdFx0bmV3VW5tYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0aWYgKCBtYXBwZWQgKSB7XG5cdFx0XHRcdFx0bWFwLnB1c2goIGkgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBuZXdVbm1hdGNoZWQ7XG59XG5cbmZ1bmN0aW9uIHNldE1hdGNoZXIoIHByZUZpbHRlciwgc2VsZWN0b3IsIG1hdGNoZXIsIHBvc3RGaWx0ZXIsIHBvc3RGaW5kZXIsIHBvc3RTZWxlY3RvciApIHtcblx0aWYgKCBwb3N0RmlsdGVyICYmICFwb3N0RmlsdGVyWyBleHBhbmRvIF0gKSB7XG5cdFx0cG9zdEZpbHRlciA9IHNldE1hdGNoZXIoIHBvc3RGaWx0ZXIgKTtcblx0fVxuXHRpZiAoIHBvc3RGaW5kZXIgJiYgIXBvc3RGaW5kZXJbIGV4cGFuZG8gXSApIHtcblx0XHRwb3N0RmluZGVyID0gc2V0TWF0Y2hlciggcG9zdEZpbmRlciwgcG9zdFNlbGVjdG9yICk7XG5cdH1cblx0cmV0dXJuIG1hcmtGdW5jdGlvbiggZnVuY3Rpb24oIHNlZWQsIHJlc3VsdHMsIGNvbnRleHQsIHhtbCApIHtcblx0XHR2YXIgdGVtcCwgaSwgZWxlbSxcblx0XHRcdHByZU1hcCA9IFtdLFxuXHRcdFx0cG9zdE1hcCA9IFtdLFxuXHRcdFx0cHJlZXhpc3RpbmcgPSByZXN1bHRzLmxlbmd0aCxcblxuXHRcdFx0Ly8gR2V0IGluaXRpYWwgZWxlbWVudHMgZnJvbSBzZWVkIG9yIGNvbnRleHRcblx0XHRcdGVsZW1zID0gc2VlZCB8fCBtdWx0aXBsZUNvbnRleHRzKFxuXHRcdFx0XHRzZWxlY3RvciB8fCBcIipcIixcblx0XHRcdFx0Y29udGV4dC5ub2RlVHlwZSA/IFsgY29udGV4dCBdIDogY29udGV4dCxcblx0XHRcdFx0W11cblx0XHRcdCksXG5cblx0XHRcdC8vIFByZWZpbHRlciB0byBnZXQgbWF0Y2hlciBpbnB1dCwgcHJlc2VydmluZyBhIG1hcCBmb3Igc2VlZC1yZXN1bHRzIHN5bmNocm9uaXphdGlvblxuXHRcdFx0bWF0Y2hlckluID0gcHJlRmlsdGVyICYmICggc2VlZCB8fCAhc2VsZWN0b3IgKSA/XG5cdFx0XHRcdGNvbmRlbnNlKCBlbGVtcywgcHJlTWFwLCBwcmVGaWx0ZXIsIGNvbnRleHQsIHhtbCApIDpcblx0XHRcdFx0ZWxlbXMsXG5cblx0XHRcdG1hdGNoZXJPdXQgPSBtYXRjaGVyID9cblxuXHRcdFx0XHQvLyBJZiB3ZSBoYXZlIGEgcG9zdEZpbmRlciwgb3IgZmlsdGVyZWQgc2VlZCwgb3Igbm9uLXNlZWQgcG9zdEZpbHRlciBvciBwcmVleGlzdGluZyByZXN1bHRzLFxuXHRcdFx0XHRwb3N0RmluZGVyIHx8ICggc2VlZCA/IHByZUZpbHRlciA6IHByZWV4aXN0aW5nIHx8IHBvc3RGaWx0ZXIgKSA/XG5cblx0XHRcdFx0XHQvLyAuLi5pbnRlcm1lZGlhdGUgcHJvY2Vzc2luZyBpcyBuZWNlc3Nhcnlcblx0XHRcdFx0XHRbXSA6XG5cblx0XHRcdFx0XHQvLyAuLi5vdGhlcndpc2UgdXNlIHJlc3VsdHMgZGlyZWN0bHlcblx0XHRcdFx0XHRyZXN1bHRzIDpcblx0XHRcdFx0bWF0Y2hlckluO1xuXG5cdFx0Ly8gRmluZCBwcmltYXJ5IG1hdGNoZXNcblx0XHRpZiAoIG1hdGNoZXIgKSB7XG5cdFx0XHRtYXRjaGVyKCBtYXRjaGVySW4sIG1hdGNoZXJPdXQsIGNvbnRleHQsIHhtbCApO1xuXHRcdH1cblxuXHRcdC8vIEFwcGx5IHBvc3RGaWx0ZXJcblx0XHRpZiAoIHBvc3RGaWx0ZXIgKSB7XG5cdFx0XHR0ZW1wID0gY29uZGVuc2UoIG1hdGNoZXJPdXQsIHBvc3RNYXAgKTtcblx0XHRcdHBvc3RGaWx0ZXIoIHRlbXAsIFtdLCBjb250ZXh0LCB4bWwgKTtcblxuXHRcdFx0Ly8gVW4tbWF0Y2ggZmFpbGluZyBlbGVtZW50cyBieSBtb3ZpbmcgdGhlbSBiYWNrIHRvIG1hdGNoZXJJblxuXHRcdFx0aSA9IHRlbXAubGVuZ3RoO1xuXHRcdFx0d2hpbGUgKCBpLS0gKSB7XG5cdFx0XHRcdGlmICggKCBlbGVtID0gdGVtcFsgaSBdICkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlck91dFsgcG9zdE1hcFsgaSBdIF0gPSAhKCBtYXRjaGVySW5bIHBvc3RNYXBbIGkgXSBdID0gZWxlbSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0aWYgKCBwb3N0RmluZGVyIHx8IHByZUZpbHRlciApIHtcblx0XHRcdFx0aWYgKCBwb3N0RmluZGVyICkge1xuXG5cdFx0XHRcdFx0Ly8gR2V0IHRoZSBmaW5hbCBtYXRjaGVyT3V0IGJ5IGNvbmRlbnNpbmcgdGhpcyBpbnRlcm1lZGlhdGUgaW50byBwb3N0RmluZGVyIGNvbnRleHRzXG5cdFx0XHRcdFx0dGVtcCA9IFtdO1xuXHRcdFx0XHRcdGkgPSBtYXRjaGVyT3V0Lmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRcdGlmICggKCBlbGVtID0gbWF0Y2hlck91dFsgaSBdICkgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gUmVzdG9yZSBtYXRjaGVySW4gc2luY2UgZWxlbSBpcyBub3QgeWV0IGEgZmluYWwgbWF0Y2hcblx0XHRcdFx0XHRcdFx0dGVtcC5wdXNoKCAoIG1hdGNoZXJJblsgaSBdID0gZWxlbSApICk7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHBvc3RGaW5kZXIoIG51bGwsICggbWF0Y2hlck91dCA9IFtdICksIHRlbXAsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gTW92ZSBtYXRjaGVkIGVsZW1lbnRzIGZyb20gc2VlZCB0byByZXN1bHRzIHRvIGtlZXAgdGhlbSBzeW5jaHJvbml6ZWRcblx0XHRcdFx0aSA9IG1hdGNoZXJPdXQubGVuZ3RoO1xuXHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdFx0XHRpZiAoICggZWxlbSA9IG1hdGNoZXJPdXRbIGkgXSApICYmXG5cdFx0XHRcdFx0XHQoIHRlbXAgPSBwb3N0RmluZGVyID8gaW5kZXhPZiggc2VlZCwgZWxlbSApIDogcHJlTWFwWyBpIF0gKSA+IC0xICkge1xuXG5cdFx0XHRcdFx0XHRzZWVkWyB0ZW1wIF0gPSAhKCByZXN1bHRzWyB0ZW1wIF0gPSBlbGVtICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHQvLyBBZGQgZWxlbWVudHMgdG8gcmVzdWx0cywgdGhyb3VnaCBwb3N0RmluZGVyIGlmIGRlZmluZWRcblx0XHR9IGVsc2Uge1xuXHRcdFx0bWF0Y2hlck91dCA9IGNvbmRlbnNlKFxuXHRcdFx0XHRtYXRjaGVyT3V0ID09PSByZXN1bHRzID9cblx0XHRcdFx0XHRtYXRjaGVyT3V0LnNwbGljZSggcHJlZXhpc3RpbmcsIG1hdGNoZXJPdXQubGVuZ3RoICkgOlxuXHRcdFx0XHRcdG1hdGNoZXJPdXRcblx0XHRcdCk7XG5cdFx0XHRpZiAoIHBvc3RGaW5kZXIgKSB7XG5cdFx0XHRcdHBvc3RGaW5kZXIoIG51bGwsIHJlc3VsdHMsIG1hdGNoZXJPdXQsIHhtbCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0cHVzaC5hcHBseSggcmVzdWx0cywgbWF0Y2hlck91dCApO1xuXHRcdFx0fVxuXHRcdH1cblx0fSApO1xufVxuXG5mdW5jdGlvbiBtYXRjaGVyRnJvbVRva2VucyggdG9rZW5zICkge1xuXHR2YXIgY2hlY2tDb250ZXh0LCBtYXRjaGVyLCBqLFxuXHRcdGxlbiA9IHRva2Vucy5sZW5ndGgsXG5cdFx0bGVhZGluZ1JlbGF0aXZlID0gRXhwci5yZWxhdGl2ZVsgdG9rZW5zWyAwIF0udHlwZSBdLFxuXHRcdGltcGxpY2l0UmVsYXRpdmUgPSBsZWFkaW5nUmVsYXRpdmUgfHwgRXhwci5yZWxhdGl2ZVsgXCIgXCIgXSxcblx0XHRpID0gbGVhZGluZ1JlbGF0aXZlID8gMSA6IDAsXG5cblx0XHQvLyBUaGUgZm91bmRhdGlvbmFsIG1hdGNoZXIgZW5zdXJlcyB0aGF0IGVsZW1lbnRzIGFyZSByZWFjaGFibGUgZnJvbSB0b3AtbGV2ZWwgY29udGV4dChzKVxuXHRcdG1hdGNoQ29udGV4dCA9IGFkZENvbWJpbmF0b3IoIGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0gPT09IGNoZWNrQ29udGV4dDtcblx0XHR9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksXG5cdFx0bWF0Y2hBbnlDb250ZXh0ID0gYWRkQ29tYmluYXRvciggZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gaW5kZXhPZiggY2hlY2tDb250ZXh0LCBlbGVtICkgPiAtMTtcblx0XHR9LCBpbXBsaWNpdFJlbGF0aXZlLCB0cnVlICksXG5cdFx0bWF0Y2hlcnMgPSBbIGZ1bmN0aW9uKCBlbGVtLCBjb250ZXh0LCB4bWwgKSB7XG5cdFx0XHR2YXIgcmV0ID0gKCAhbGVhZGluZ1JlbGF0aXZlICYmICggeG1sIHx8IGNvbnRleHQgIT09IG91dGVybW9zdENvbnRleHQgKSApIHx8IChcblx0XHRcdFx0KCBjaGVja0NvbnRleHQgPSBjb250ZXh0ICkubm9kZVR5cGUgP1xuXHRcdFx0XHRcdG1hdGNoQ29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgOlxuXHRcdFx0XHRcdG1hdGNoQW55Q29udGV4dCggZWxlbSwgY29udGV4dCwgeG1sICkgKTtcblxuXHRcdFx0Ly8gQXZvaWQgaGFuZ2luZyBvbnRvIGVsZW1lbnQgKGlzc3VlICMyOTkpXG5cdFx0XHRjaGVja0NvbnRleHQgPSBudWxsO1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9IF07XG5cblx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0aWYgKCAoIG1hdGNoZXIgPSBFeHByLnJlbGF0aXZlWyB0b2tlbnNbIGkgXS50eXBlIF0gKSApIHtcblx0XHRcdG1hdGNoZXJzID0gWyBhZGRDb21iaW5hdG9yKCBlbGVtZW50TWF0Y2hlciggbWF0Y2hlcnMgKSwgbWF0Y2hlciApIF07XG5cdFx0fSBlbHNlIHtcblx0XHRcdG1hdGNoZXIgPSBFeHByLmZpbHRlclsgdG9rZW5zWyBpIF0udHlwZSBdLmFwcGx5KCBudWxsLCB0b2tlbnNbIGkgXS5tYXRjaGVzICk7XG5cblx0XHRcdC8vIFJldHVybiBzcGVjaWFsIHVwb24gc2VlaW5nIGEgcG9zaXRpb25hbCBtYXRjaGVyXG5cdFx0XHRpZiAoIG1hdGNoZXJbIGV4cGFuZG8gXSApIHtcblxuXHRcdFx0XHQvLyBGaW5kIHRoZSBuZXh0IHJlbGF0aXZlIG9wZXJhdG9yIChpZiBhbnkpIGZvciBwcm9wZXIgaGFuZGxpbmdcblx0XHRcdFx0aiA9ICsraTtcblx0XHRcdFx0Zm9yICggOyBqIDwgbGVuOyBqKysgKSB7XG5cdFx0XHRcdFx0aWYgKCBFeHByLnJlbGF0aXZlWyB0b2tlbnNbIGogXS50eXBlIF0gKSB7XG5cdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHNldE1hdGNoZXIoXG5cdFx0XHRcdFx0aSA+IDEgJiYgZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICksXG5cdFx0XHRcdFx0aSA+IDEgJiYgdG9TZWxlY3RvcihcblxuXHRcdFx0XHRcdC8vIElmIHRoZSBwcmVjZWRpbmcgdG9rZW4gd2FzIGEgZGVzY2VuZGFudCBjb21iaW5hdG9yLCBpbnNlcnQgYW4gaW1wbGljaXQgYW55LWVsZW1lbnQgYCpgXG5cdFx0XHRcdFx0dG9rZW5zXG5cdFx0XHRcdFx0XHQuc2xpY2UoIDAsIGkgLSAxIClcblx0XHRcdFx0XHRcdC5jb25jYXQoIHsgdmFsdWU6IHRva2Vuc1sgaSAtIDIgXS50eXBlID09PSBcIiBcIiA/IFwiKlwiIDogXCJcIiB9IClcblx0XHRcdFx0XHQpLnJlcGxhY2UoIHJ0cmltLCBcIiQxXCIgKSxcblx0XHRcdFx0XHRtYXRjaGVyLFxuXHRcdFx0XHRcdGkgPCBqICYmIG1hdGNoZXJGcm9tVG9rZW5zKCB0b2tlbnMuc2xpY2UoIGksIGogKSApLFxuXHRcdFx0XHRcdGogPCBsZW4gJiYgbWF0Y2hlckZyb21Ub2tlbnMoICggdG9rZW5zID0gdG9rZW5zLnNsaWNlKCBqICkgKSApLFxuXHRcdFx0XHRcdGogPCBsZW4gJiYgdG9TZWxlY3RvciggdG9rZW5zIClcblx0XHRcdFx0KTtcblx0XHRcdH1cblx0XHRcdG1hdGNoZXJzLnB1c2goIG1hdGNoZXIgKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZWxlbWVudE1hdGNoZXIoIG1hdGNoZXJzICk7XG59XG5cbmZ1bmN0aW9uIG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApIHtcblx0dmFyIGJ5U2V0ID0gc2V0TWF0Y2hlcnMubGVuZ3RoID4gMCxcblx0XHRieUVsZW1lbnQgPSBlbGVtZW50TWF0Y2hlcnMubGVuZ3RoID4gMCxcblx0XHRzdXBlck1hdGNoZXIgPSBmdW5jdGlvbiggc2VlZCwgY29udGV4dCwgeG1sLCByZXN1bHRzLCBvdXRlcm1vc3QgKSB7XG5cdFx0XHR2YXIgZWxlbSwgaiwgbWF0Y2hlcixcblx0XHRcdFx0bWF0Y2hlZENvdW50ID0gMCxcblx0XHRcdFx0aSA9IFwiMFwiLFxuXHRcdFx0XHR1bm1hdGNoZWQgPSBzZWVkICYmIFtdLFxuXHRcdFx0XHRzZXRNYXRjaGVkID0gW10sXG5cdFx0XHRcdGNvbnRleHRCYWNrdXAgPSBvdXRlcm1vc3RDb250ZXh0LFxuXG5cdFx0XHRcdC8vIFdlIG11c3QgYWx3YXlzIGhhdmUgZWl0aGVyIHNlZWQgZWxlbWVudHMgb3Igb3V0ZXJtb3N0IGNvbnRleHRcblx0XHRcdFx0ZWxlbXMgPSBzZWVkIHx8IGJ5RWxlbWVudCAmJiBFeHByLmZpbmRbIFwiVEFHXCIgXSggXCIqXCIsIG91dGVybW9zdCApLFxuXG5cdFx0XHRcdC8vIFVzZSBpbnRlZ2VyIGRpcnJ1bnMgaWZmIHRoaXMgaXMgdGhlIG91dGVybW9zdCBtYXRjaGVyXG5cdFx0XHRcdGRpcnJ1bnNVbmlxdWUgPSAoIGRpcnJ1bnMgKz0gY29udGV4dEJhY2t1cCA9PSBudWxsID8gMSA6IE1hdGgucmFuZG9tKCkgfHwgMC4xICksXG5cdFx0XHRcdGxlbiA9IGVsZW1zLmxlbmd0aDtcblxuXHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgMTErLCBFZGdlIDE3IC0gMTgrXG5cdFx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0XHQvLyB0d28gZG9jdW1lbnRzOyBzaGFsbG93IGNvbXBhcmlzb25zIHdvcmsuXG5cdFx0XHRcdC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBlcWVxZXFcblx0XHRcdFx0b3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHQgPT0gZG9jdW1lbnQgfHwgY29udGV4dCB8fCBvdXRlcm1vc3Q7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCBlbGVtZW50cyBwYXNzaW5nIGVsZW1lbnRNYXRjaGVycyBkaXJlY3RseSB0byByZXN1bHRzXG5cdFx0XHQvLyBTdXBwb3J0OiBJRTw5LCBTYWZhcmlcblx0XHRcdC8vIFRvbGVyYXRlIE5vZGVMaXN0IHByb3BlcnRpZXMgKElFOiBcImxlbmd0aFwiOyBTYWZhcmk6IDxudW1iZXI+KSBtYXRjaGluZyBlbGVtZW50cyBieSBpZFxuXHRcdFx0Zm9yICggOyBpICE9PSBsZW4gJiYgKCBlbGVtID0gZWxlbXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRcdFx0aWYgKCBieUVsZW1lbnQgJiYgZWxlbSApIHtcblx0XHRcdFx0XHRqID0gMDtcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDExKywgRWRnZSAxNyAtIDE4K1xuXHRcdFx0XHRcdC8vIElFL0VkZ2Ugc29tZXRpbWVzIHRocm93IGEgXCJQZXJtaXNzaW9uIGRlbmllZFwiIGVycm9yIHdoZW4gc3RyaWN0LWNvbXBhcmluZ1xuXHRcdFx0XHRcdC8vIHR3byBkb2N1bWVudHM7IHNoYWxsb3cgY29tcGFyaXNvbnMgd29yay5cblx0XHRcdFx0XHQvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZXFlcWVxXG5cdFx0XHRcdFx0aWYgKCAhY29udGV4dCAmJiBlbGVtLm93bmVyRG9jdW1lbnQgIT0gZG9jdW1lbnQgKSB7XG5cdFx0XHRcdFx0XHRzZXREb2N1bWVudCggZWxlbSApO1xuXHRcdFx0XHRcdFx0eG1sID0gIWRvY3VtZW50SXNIVE1MO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR3aGlsZSAoICggbWF0Y2hlciA9IGVsZW1lbnRNYXRjaGVyc1sgaisrIF0gKSApIHtcblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlciggZWxlbSwgY29udGV4dCB8fCBkb2N1bWVudCwgeG1sICkgKSB7XG5cdFx0XHRcdFx0XHRcdHJlc3VsdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBvdXRlcm1vc3QgKSB7XG5cdFx0XHRcdFx0XHRkaXJydW5zID0gZGlycnVuc1VuaXF1ZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBUcmFjayB1bm1hdGNoZWQgZWxlbWVudHMgZm9yIHNldCBmaWx0ZXJzXG5cdFx0XHRcdGlmICggYnlTZXQgKSB7XG5cblx0XHRcdFx0XHQvLyBUaGV5IHdpbGwgaGF2ZSBnb25lIHRocm91Z2ggYWxsIHBvc3NpYmxlIG1hdGNoZXJzXG5cdFx0XHRcdFx0aWYgKCAoIGVsZW0gPSAhbWF0Y2hlciAmJiBlbGVtICkgKSB7XG5cdFx0XHRcdFx0XHRtYXRjaGVkQ291bnQtLTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBMZW5ndGhlbiB0aGUgYXJyYXkgZm9yIGV2ZXJ5IGVsZW1lbnQsIG1hdGNoZWQgb3Igbm90XG5cdFx0XHRcdFx0aWYgKCBzZWVkICkge1xuXHRcdFx0XHRcdFx0dW5tYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gYGlgIGlzIG5vdyB0aGUgY291bnQgb2YgZWxlbWVudHMgdmlzaXRlZCBhYm92ZSwgYW5kIGFkZGluZyBpdCB0byBgbWF0Y2hlZENvdW50YFxuXHRcdFx0Ly8gbWFrZXMgdGhlIGxhdHRlciBub25uZWdhdGl2ZS5cblx0XHRcdG1hdGNoZWRDb3VudCArPSBpO1xuXG5cdFx0XHQvLyBBcHBseSBzZXQgZmlsdGVycyB0byB1bm1hdGNoZWQgZWxlbWVudHNcblx0XHRcdC8vIE5PVEU6IFRoaXMgY2FuIGJlIHNraXBwZWQgaWYgdGhlcmUgYXJlIG5vIHVubWF0Y2hlZCBlbGVtZW50cyAoaS5lLiwgYG1hdGNoZWRDb3VudGBcblx0XHRcdC8vIGVxdWFscyBgaWApLCB1bmxlc3Mgd2UgZGlkbid0IHZpc2l0IF9hbnlfIGVsZW1lbnRzIGluIHRoZSBhYm92ZSBsb29wIGJlY2F1c2Ugd2UgaGF2ZVxuXHRcdFx0Ly8gbm8gZWxlbWVudCBtYXRjaGVycyBhbmQgbm8gc2VlZC5cblx0XHRcdC8vIEluY3JlbWVudGluZyBhbiBpbml0aWFsbHktc3RyaW5nIFwiMFwiIGBpYCBhbGxvd3MgYGlgIHRvIHJlbWFpbiBhIHN0cmluZyBvbmx5IGluIHRoYXRcblx0XHRcdC8vIGNhc2UsIHdoaWNoIHdpbGwgcmVzdWx0IGluIGEgXCIwMFwiIGBtYXRjaGVkQ291bnRgIHRoYXQgZGlmZmVycyBmcm9tIGBpYCBidXQgaXMgYWxzb1xuXHRcdFx0Ly8gbnVtZXJpY2FsbHkgemVyby5cblx0XHRcdGlmICggYnlTZXQgJiYgaSAhPT0gbWF0Y2hlZENvdW50ICkge1xuXHRcdFx0XHRqID0gMDtcblx0XHRcdFx0d2hpbGUgKCAoIG1hdGNoZXIgPSBzZXRNYXRjaGVyc1sgaisrIF0gKSApIHtcblx0XHRcdFx0XHRtYXRjaGVyKCB1bm1hdGNoZWQsIHNldE1hdGNoZWQsIGNvbnRleHQsIHhtbCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0aWYgKCBzZWVkICkge1xuXG5cdFx0XHRcdFx0Ly8gUmVpbnRlZ3JhdGUgZWxlbWVudCBtYXRjaGVzIHRvIGVsaW1pbmF0ZSB0aGUgbmVlZCBmb3Igc29ydGluZ1xuXHRcdFx0XHRcdGlmICggbWF0Y2hlZENvdW50ID4gMCApIHtcblx0XHRcdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdFx0XHRpZiAoICEoIHVubWF0Y2hlZFsgaSBdIHx8IHNldE1hdGNoZWRbIGkgXSApICkge1xuXHRcdFx0XHRcdFx0XHRcdHNldE1hdGNoZWRbIGkgXSA9IHBvcC5jYWxsKCByZXN1bHRzICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBEaXNjYXJkIGluZGV4IHBsYWNlaG9sZGVyIHZhbHVlcyB0byBnZXQgb25seSBhY3R1YWwgbWF0Y2hlc1xuXHRcdFx0XHRcdHNldE1hdGNoZWQgPSBjb25kZW5zZSggc2V0TWF0Y2hlZCApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQWRkIG1hdGNoZXMgdG8gcmVzdWx0c1xuXHRcdFx0XHRwdXNoLmFwcGx5KCByZXN1bHRzLCBzZXRNYXRjaGVkICk7XG5cblx0XHRcdFx0Ly8gU2VlZGxlc3Mgc2V0IG1hdGNoZXMgc3VjY2VlZGluZyBtdWx0aXBsZSBzdWNjZXNzZnVsIG1hdGNoZXJzIHN0aXB1bGF0ZSBzb3J0aW5nXG5cdFx0XHRcdGlmICggb3V0ZXJtb3N0ICYmICFzZWVkICYmIHNldE1hdGNoZWQubGVuZ3RoID4gMCAmJlxuXHRcdFx0XHRcdCggbWF0Y2hlZENvdW50ICsgc2V0TWF0Y2hlcnMubGVuZ3RoICkgPiAxICkge1xuXG5cdFx0XHRcdFx0U2l6emxlLnVuaXF1ZVNvcnQoIHJlc3VsdHMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBPdmVycmlkZSBtYW5pcHVsYXRpb24gb2YgZ2xvYmFscyBieSBuZXN0ZWQgbWF0Y2hlcnNcblx0XHRcdGlmICggb3V0ZXJtb3N0ICkge1xuXHRcdFx0XHRkaXJydW5zID0gZGlycnVuc1VuaXF1ZTtcblx0XHRcdFx0b3V0ZXJtb3N0Q29udGV4dCA9IGNvbnRleHRCYWNrdXA7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB1bm1hdGNoZWQ7XG5cdFx0fTtcblxuXHRyZXR1cm4gYnlTZXQgP1xuXHRcdG1hcmtGdW5jdGlvbiggc3VwZXJNYXRjaGVyICkgOlxuXHRcdHN1cGVyTWF0Y2hlcjtcbn1cblxuY29tcGlsZSA9IFNpenpsZS5jb21waWxlID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBtYXRjaCAvKiBJbnRlcm5hbCBVc2UgT25seSAqLyApIHtcblx0dmFyIGksXG5cdFx0c2V0TWF0Y2hlcnMgPSBbXSxcblx0XHRlbGVtZW50TWF0Y2hlcnMgPSBbXSxcblx0XHRjYWNoZWQgPSBjb21waWxlckNhY2hlWyBzZWxlY3RvciArIFwiIFwiIF07XG5cblx0aWYgKCAhY2FjaGVkICkge1xuXG5cdFx0Ly8gR2VuZXJhdGUgYSBmdW5jdGlvbiBvZiByZWN1cnNpdmUgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIHVzZWQgdG8gY2hlY2sgZWFjaCBlbGVtZW50XG5cdFx0aWYgKCAhbWF0Y2ggKSB7XG5cdFx0XHRtYXRjaCA9IHRva2VuaXplKCBzZWxlY3RvciApO1xuXHRcdH1cblx0XHRpID0gbWF0Y2gubGVuZ3RoO1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0Y2FjaGVkID0gbWF0Y2hlckZyb21Ub2tlbnMoIG1hdGNoWyBpIF0gKTtcblx0XHRcdGlmICggY2FjaGVkWyBleHBhbmRvIF0gKSB7XG5cdFx0XHRcdHNldE1hdGNoZXJzLnB1c2goIGNhY2hlZCApO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbWVudE1hdGNoZXJzLnB1c2goIGNhY2hlZCApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENhY2hlIHRoZSBjb21waWxlZCBmdW5jdGlvblxuXHRcdGNhY2hlZCA9IGNvbXBpbGVyQ2FjaGUoXG5cdFx0XHRzZWxlY3Rvcixcblx0XHRcdG1hdGNoZXJGcm9tR3JvdXBNYXRjaGVycyggZWxlbWVudE1hdGNoZXJzLCBzZXRNYXRjaGVycyApXG5cdFx0KTtcblxuXHRcdC8vIFNhdmUgc2VsZWN0b3IgYW5kIHRva2VuaXphdGlvblxuXHRcdGNhY2hlZC5zZWxlY3RvciA9IHNlbGVjdG9yO1xuXHR9XG5cdHJldHVybiBjYWNoZWQ7XG59O1xuXG4vKipcbiAqIEEgbG93LWxldmVsIHNlbGVjdGlvbiBmdW5jdGlvbiB0aGF0IHdvcmtzIHdpdGggU2l6emxlJ3MgY29tcGlsZWRcbiAqICBzZWxlY3RvciBmdW5jdGlvbnNcbiAqIEBwYXJhbSB7U3RyaW5nfEZ1bmN0aW9ufSBzZWxlY3RvciBBIHNlbGVjdG9yIG9yIGEgcHJlLWNvbXBpbGVkXG4gKiAgc2VsZWN0b3IgZnVuY3Rpb24gYnVpbHQgd2l0aCBTaXp6bGUuY29tcGlsZVxuICogQHBhcmFtIHtFbGVtZW50fSBjb250ZXh0XG4gKiBAcGFyYW0ge0FycmF5fSBbcmVzdWx0c11cbiAqIEBwYXJhbSB7QXJyYXl9IFtzZWVkXSBBIHNldCBvZiBlbGVtZW50cyB0byBtYXRjaCBhZ2FpbnN0XG4gKi9cbnNlbGVjdCA9IFNpenpsZS5zZWxlY3QgPSBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQsIHJlc3VsdHMsIHNlZWQgKSB7XG5cdHZhciBpLCB0b2tlbnMsIHRva2VuLCB0eXBlLCBmaW5kLFxuXHRcdGNvbXBpbGVkID0gdHlwZW9mIHNlbGVjdG9yID09PSBcImZ1bmN0aW9uXCIgJiYgc2VsZWN0b3IsXG5cdFx0bWF0Y2ggPSAhc2VlZCAmJiB0b2tlbml6ZSggKCBzZWxlY3RvciA9IGNvbXBpbGVkLnNlbGVjdG9yIHx8IHNlbGVjdG9yICkgKTtcblxuXHRyZXN1bHRzID0gcmVzdWx0cyB8fCBbXTtcblxuXHQvLyBUcnkgdG8gbWluaW1pemUgb3BlcmF0aW9ucyBpZiB0aGVyZSBpcyBvbmx5IG9uZSBzZWxlY3RvciBpbiB0aGUgbGlzdCBhbmQgbm8gc2VlZFxuXHQvLyAodGhlIGxhdHRlciBvZiB3aGljaCBndWFyYW50ZWVzIHVzIGNvbnRleHQpXG5cdGlmICggbWF0Y2gubGVuZ3RoID09PSAxICkge1xuXG5cdFx0Ly8gUmVkdWNlIGNvbnRleHQgaWYgdGhlIGxlYWRpbmcgY29tcG91bmQgc2VsZWN0b3IgaXMgYW4gSURcblx0XHR0b2tlbnMgPSBtYXRjaFsgMCBdID0gbWF0Y2hbIDAgXS5zbGljZSggMCApO1xuXHRcdGlmICggdG9rZW5zLmxlbmd0aCA+IDIgJiYgKCB0b2tlbiA9IHRva2Vuc1sgMCBdICkudHlwZSA9PT0gXCJJRFwiICYmXG5cdFx0XHRjb250ZXh0Lm5vZGVUeXBlID09PSA5ICYmIGRvY3VtZW50SXNIVE1MICYmIEV4cHIucmVsYXRpdmVbIHRva2Vuc1sgMSBdLnR5cGUgXSApIHtcblxuXHRcdFx0Y29udGV4dCA9ICggRXhwci5maW5kWyBcIklEXCIgXSggdG9rZW4ubWF0Y2hlc1sgMCBdXG5cdFx0XHRcdC5yZXBsYWNlKCBydW5lc2NhcGUsIGZ1bmVzY2FwZSApLCBjb250ZXh0ICkgfHwgW10gKVsgMCBdO1xuXHRcdFx0aWYgKCAhY29udGV4dCApIHtcblx0XHRcdFx0cmV0dXJuIHJlc3VsdHM7XG5cblx0XHRcdC8vIFByZWNvbXBpbGVkIG1hdGNoZXJzIHdpbGwgc3RpbGwgdmVyaWZ5IGFuY2VzdHJ5LCBzbyBzdGVwIHVwIGEgbGV2ZWxcblx0XHRcdH0gZWxzZSBpZiAoIGNvbXBpbGVkICkge1xuXHRcdFx0XHRjb250ZXh0ID0gY29udGV4dC5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXG5cdFx0XHRzZWxlY3RvciA9IHNlbGVjdG9yLnNsaWNlKCB0b2tlbnMuc2hpZnQoKS52YWx1ZS5sZW5ndGggKTtcblx0XHR9XG5cblx0XHQvLyBGZXRjaCBhIHNlZWQgc2V0IGZvciByaWdodC10by1sZWZ0IG1hdGNoaW5nXG5cdFx0aSA9IG1hdGNoRXhwclsgXCJuZWVkc0NvbnRleHRcIiBdLnRlc3QoIHNlbGVjdG9yICkgPyAwIDogdG9rZW5zLmxlbmd0aDtcblx0XHR3aGlsZSAoIGktLSApIHtcblx0XHRcdHRva2VuID0gdG9rZW5zWyBpIF07XG5cblx0XHRcdC8vIEFib3J0IGlmIHdlIGhpdCBhIGNvbWJpbmF0b3Jcblx0XHRcdGlmICggRXhwci5yZWxhdGl2ZVsgKCB0eXBlID0gdG9rZW4udHlwZSApIF0gKSB7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCAoIGZpbmQgPSBFeHByLmZpbmRbIHR5cGUgXSApICkge1xuXG5cdFx0XHRcdC8vIFNlYXJjaCwgZXhwYW5kaW5nIGNvbnRleHQgZm9yIGxlYWRpbmcgc2libGluZyBjb21iaW5hdG9yc1xuXHRcdFx0XHRpZiAoICggc2VlZCA9IGZpbmQoXG5cdFx0XHRcdFx0dG9rZW4ubWF0Y2hlc1sgMCBdLnJlcGxhY2UoIHJ1bmVzY2FwZSwgZnVuZXNjYXBlICksXG5cdFx0XHRcdFx0cnNpYmxpbmcudGVzdCggdG9rZW5zWyAwIF0udHlwZSApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fFxuXHRcdFx0XHRcdFx0Y29udGV4dFxuXHRcdFx0XHQpICkgKSB7XG5cblx0XHRcdFx0XHQvLyBJZiBzZWVkIGlzIGVtcHR5IG9yIG5vIHRva2VucyByZW1haW4sIHdlIGNhbiByZXR1cm4gZWFybHlcblx0XHRcdFx0XHR0b2tlbnMuc3BsaWNlKCBpLCAxICk7XG5cdFx0XHRcdFx0c2VsZWN0b3IgPSBzZWVkLmxlbmd0aCAmJiB0b1NlbGVjdG9yKCB0b2tlbnMgKTtcblx0XHRcdFx0XHRpZiAoICFzZWxlY3RvciApIHtcblx0XHRcdFx0XHRcdHB1c2guYXBwbHkoIHJlc3VsdHMsIHNlZWQgKTtcblx0XHRcdFx0XHRcdHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ29tcGlsZSBhbmQgZXhlY3V0ZSBhIGZpbHRlcmluZyBmdW5jdGlvbiBpZiBvbmUgaXMgbm90IHByb3ZpZGVkXG5cdC8vIFByb3ZpZGUgYG1hdGNoYCB0byBhdm9pZCByZXRva2VuaXphdGlvbiBpZiB3ZSBtb2RpZmllZCB0aGUgc2VsZWN0b3IgYWJvdmVcblx0KCBjb21waWxlZCB8fCBjb21waWxlKCBzZWxlY3RvciwgbWF0Y2ggKSApKFxuXHRcdHNlZWQsXG5cdFx0Y29udGV4dCxcblx0XHQhZG9jdW1lbnRJc0hUTUwsXG5cdFx0cmVzdWx0cyxcblx0XHQhY29udGV4dCB8fCByc2libGluZy50ZXN0KCBzZWxlY3RvciApICYmIHRlc3RDb250ZXh0KCBjb250ZXh0LnBhcmVudE5vZGUgKSB8fCBjb250ZXh0XG5cdCk7XG5cdHJldHVybiByZXN1bHRzO1xufTtcblxuLy8gT25lLXRpbWUgYXNzaWdubWVudHNcblxuLy8gU29ydCBzdGFiaWxpdHlcbnN1cHBvcnQuc29ydFN0YWJsZSA9IGV4cGFuZG8uc3BsaXQoIFwiXCIgKS5zb3J0KCBzb3J0T3JkZXIgKS5qb2luKCBcIlwiICkgPT09IGV4cGFuZG87XG5cbi8vIFN1cHBvcnQ6IENocm9tZSAxNC0zNStcbi8vIEFsd2F5cyBhc3N1bWUgZHVwbGljYXRlcyBpZiB0aGV5IGFyZW4ndCBwYXNzZWQgdG8gdGhlIGNvbXBhcmlzb24gZnVuY3Rpb25cbnN1cHBvcnQuZGV0ZWN0RHVwbGljYXRlcyA9ICEhaGFzRHVwbGljYXRlO1xuXG4vLyBJbml0aWFsaXplIGFnYWluc3QgdGhlIGRlZmF1bHQgZG9jdW1lbnRcbnNldERvY3VtZW50KCk7XG5cbi8vIFN1cHBvcnQ6IFdlYmtpdDw1MzcuMzIgLSBTYWZhcmkgNi4wLjMvQ2hyb21lIDI1IChmaXhlZCBpbiBDaHJvbWUgMjcpXG4vLyBEZXRhY2hlZCBub2RlcyBjb25mb3VuZGluZ2x5IGZvbGxvdyAqZWFjaCBvdGhlcipcbnN1cHBvcnQuc29ydERldGFjaGVkID0gYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cblx0Ly8gU2hvdWxkIHJldHVybiAxLCBidXQgcmV0dXJucyA0IChmb2xsb3dpbmcpXG5cdHJldHVybiBlbC5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbiggZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJmaWVsZHNldFwiICkgKSAmIDE7XG59ICk7XG5cbi8vIFN1cHBvcnQ6IElFPDhcbi8vIFByZXZlbnQgYXR0cmlidXRlL3Byb3BlcnR5IFwiaW50ZXJwb2xhdGlvblwiXG4vLyBodHRwczovL21zZG4ubWljcm9zb2Z0LmNvbS9lbi11cy9saWJyYXJ5L21zNTM2NDI5JTI4VlMuODUlMjkuYXNweFxuaWYgKCAhYXNzZXJ0KCBmdW5jdGlvbiggZWwgKSB7XG5cdGVsLmlubmVySFRNTCA9IFwiPGEgaHJlZj0nIyc+PC9hPlwiO1xuXHRyZXR1cm4gZWwuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoIFwiaHJlZlwiICkgPT09IFwiI1wiO1xufSApICkge1xuXHRhZGRIYW5kbGUoIFwidHlwZXxocmVmfGhlaWdodHx3aWR0aFwiLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0aWYgKCAhaXNYTUwgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5nZXRBdHRyaWJ1dGUoIG5hbWUsIG5hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJ0eXBlXCIgPyAxIDogMiApO1xuXHRcdH1cblx0fSApO1xufVxuXG4vLyBTdXBwb3J0OiBJRTw5XG4vLyBVc2UgZGVmYXVsdFZhbHVlIGluIHBsYWNlIG9mIGdldEF0dHJpYnV0ZShcInZhbHVlXCIpXG5pZiAoICFzdXBwb3J0LmF0dHJpYnV0ZXMgfHwgIWFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRlbC5pbm5lckhUTUwgPSBcIjxpbnB1dC8+XCI7XG5cdGVsLmZpcnN0Q2hpbGQuc2V0QXR0cmlidXRlKCBcInZhbHVlXCIsIFwiXCIgKTtcblx0cmV0dXJuIGVsLmZpcnN0Q2hpbGQuZ2V0QXR0cmlidXRlKCBcInZhbHVlXCIgKSA9PT0gXCJcIjtcbn0gKSApIHtcblx0YWRkSGFuZGxlKCBcInZhbHVlXCIsIGZ1bmN0aW9uKCBlbGVtLCBfbmFtZSwgaXNYTUwgKSB7XG5cdFx0aWYgKCAhaXNYTUwgJiYgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpID09PSBcImlucHV0XCIgKSB7XG5cdFx0XHRyZXR1cm4gZWxlbS5kZWZhdWx0VmFsdWU7XG5cdFx0fVxuXHR9ICk7XG59XG5cbi8vIFN1cHBvcnQ6IElFPDlcbi8vIFVzZSBnZXRBdHRyaWJ1dGVOb2RlIHRvIGZldGNoIGJvb2xlYW5zIHdoZW4gZ2V0QXR0cmlidXRlIGxpZXNcbmlmICggIWFzc2VydCggZnVuY3Rpb24oIGVsICkge1xuXHRyZXR1cm4gZWwuZ2V0QXR0cmlidXRlKCBcImRpc2FibGVkXCIgKSA9PSBudWxsO1xufSApICkge1xuXHRhZGRIYW5kbGUoIGJvb2xlYW5zLCBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0dmFyIHZhbDtcblx0XHRpZiAoICFpc1hNTCApIHtcblx0XHRcdHJldHVybiBlbGVtWyBuYW1lIF0gPT09IHRydWUgPyBuYW1lLnRvTG93ZXJDYXNlKCkgOlxuXHRcdFx0XHQoIHZhbCA9IGVsZW0uZ2V0QXR0cmlidXRlTm9kZSggbmFtZSApICkgJiYgdmFsLnNwZWNpZmllZCA/XG5cdFx0XHRcdFx0dmFsLnZhbHVlIDpcblx0XHRcdFx0XHRudWxsO1xuXHRcdH1cblx0fSApO1xufVxuXG5yZXR1cm4gU2l6emxlO1xuXG59ICkoIHdpbmRvdyApO1xuXG5cblxualF1ZXJ5LmZpbmQgPSBTaXp6bGU7XG5qUXVlcnkuZXhwciA9IFNpenpsZS5zZWxlY3RvcnM7XG5cbi8vIERlcHJlY2F0ZWRcbmpRdWVyeS5leHByWyBcIjpcIiBdID0galF1ZXJ5LmV4cHIucHNldWRvcztcbmpRdWVyeS51bmlxdWVTb3J0ID0galF1ZXJ5LnVuaXF1ZSA9IFNpenpsZS51bmlxdWVTb3J0O1xualF1ZXJ5LnRleHQgPSBTaXp6bGUuZ2V0VGV4dDtcbmpRdWVyeS5pc1hNTERvYyA9IFNpenpsZS5pc1hNTDtcbmpRdWVyeS5jb250YWlucyA9IFNpenpsZS5jb250YWlucztcbmpRdWVyeS5lc2NhcGVTZWxlY3RvciA9IFNpenpsZS5lc2NhcGU7XG5cblxuXG5cbnZhciBkaXIgPSBmdW5jdGlvbiggZWxlbSwgZGlyLCB1bnRpbCApIHtcblx0dmFyIG1hdGNoZWQgPSBbXSxcblx0XHR0cnVuY2F0ZSA9IHVudGlsICE9PSB1bmRlZmluZWQ7XG5cblx0d2hpbGUgKCAoIGVsZW0gPSBlbGVtWyBkaXIgXSApICYmIGVsZW0ubm9kZVR5cGUgIT09IDkgKSB7XG5cdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0aWYgKCB0cnVuY2F0ZSAmJiBqUXVlcnkoIGVsZW0gKS5pcyggdW50aWwgKSApIHtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0XHRtYXRjaGVkLnB1c2goIGVsZW0gKTtcblx0XHR9XG5cdH1cblx0cmV0dXJuIG1hdGNoZWQ7XG59O1xuXG5cbnZhciBzaWJsaW5ncyA9IGZ1bmN0aW9uKCBuLCBlbGVtICkge1xuXHR2YXIgbWF0Y2hlZCA9IFtdO1xuXG5cdGZvciAoIDsgbjsgbiA9IG4ubmV4dFNpYmxpbmcgKSB7XG5cdFx0aWYgKCBuLm5vZGVUeXBlID09PSAxICYmIG4gIT09IGVsZW0gKSB7XG5cdFx0XHRtYXRjaGVkLnB1c2goIG4gKTtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gbWF0Y2hlZDtcbn07XG5cblxudmFyIHJuZWVkc0NvbnRleHQgPSBqUXVlcnkuZXhwci5tYXRjaC5uZWVkc0NvbnRleHQ7XG5cblxuXG5mdW5jdGlvbiBub2RlTmFtZSggZWxlbSwgbmFtZSApIHtcblxuXHRyZXR1cm4gZWxlbS5ub2RlTmFtZSAmJiBlbGVtLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkgPT09IG5hbWUudG9Mb3dlckNhc2UoKTtcblxufVxudmFyIHJzaW5nbGVUYWcgPSAoIC9ePChbYS16XVteXFwvXFwwPjpcXHgyMFxcdFxcclxcblxcZl0qKVtcXHgyMFxcdFxcclxcblxcZl0qXFwvPz4oPzo8XFwvXFwxPnwpJC9pICk7XG5cblxuXG4vLyBJbXBsZW1lbnQgdGhlIGlkZW50aWNhbCBmdW5jdGlvbmFsaXR5IGZvciBmaWx0ZXIgYW5kIG5vdFxuZnVuY3Rpb24gd2lubm93KCBlbGVtZW50cywgcXVhbGlmaWVyLCBub3QgKSB7XG5cdGlmICggaXNGdW5jdGlvbiggcXVhbGlmaWVyICkgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0sIGkgKSB7XG5cdFx0XHRyZXR1cm4gISFxdWFsaWZpZXIuY2FsbCggZWxlbSwgaSwgZWxlbSApICE9PSBub3Q7XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gU2luZ2xlIGVsZW1lbnRcblx0aWYgKCBxdWFsaWZpZXIubm9kZVR5cGUgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCBlbGVtID09PSBxdWFsaWZpZXIgKSAhPT0gbm90O1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEFycmF5bGlrZSBvZiBlbGVtZW50cyAoalF1ZXJ5LCBhcmd1bWVudHMsIEFycmF5KVxuXHRpZiAoIHR5cGVvZiBxdWFsaWZpZXIgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5ncmVwKCBlbGVtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4gKCBpbmRleE9mLmNhbGwoIHF1YWxpZmllciwgZWxlbSApID4gLTEgKSAhPT0gbm90O1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIEZpbHRlcmVkIGRpcmVjdGx5IGZvciBib3RoIHNpbXBsZSBhbmQgY29tcGxleCBzZWxlY3RvcnNcblx0cmV0dXJuIGpRdWVyeS5maWx0ZXIoIHF1YWxpZmllciwgZWxlbWVudHMsIG5vdCApO1xufVxuXG5qUXVlcnkuZmlsdGVyID0gZnVuY3Rpb24oIGV4cHIsIGVsZW1zLCBub3QgKSB7XG5cdHZhciBlbGVtID0gZWxlbXNbIDAgXTtcblxuXHRpZiAoIG5vdCApIHtcblx0XHRleHByID0gXCI6bm90KFwiICsgZXhwciArIFwiKVwiO1xuXHR9XG5cblx0aWYgKCBlbGVtcy5sZW5ndGggPT09IDEgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmZpbmQubWF0Y2hlc1NlbGVjdG9yKCBlbGVtLCBleHByICkgPyBbIGVsZW0gXSA6IFtdO1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeS5maW5kLm1hdGNoZXMoIGV4cHIsIGpRdWVyeS5ncmVwKCBlbGVtcywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGVsZW0ubm9kZVR5cGUgPT09IDE7XG5cdH0gKSApO1xufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRmaW5kOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0dmFyIGksIHJldCxcblx0XHRcdGxlbiA9IHRoaXMubGVuZ3RoLFxuXHRcdFx0c2VsZiA9IHRoaXM7XG5cblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggalF1ZXJ5KCBzZWxlY3RvciApLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdFx0aWYgKCBqUXVlcnkuY29udGFpbnMoIHNlbGZbIGkgXSwgdGhpcyApICkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9ICkgKTtcblx0XHR9XG5cblx0XHRyZXQgPSB0aGlzLnB1c2hTdGFjayggW10gKTtcblxuXHRcdGZvciAoIGkgPSAwOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRqUXVlcnkuZmluZCggc2VsZWN0b3IsIHNlbGZbIGkgXSwgcmV0ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGxlbiA+IDEgPyBqUXVlcnkudW5pcXVlU29ydCggcmV0ICkgOiByZXQ7XG5cdH0sXG5cdGZpbHRlcjogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggd2lubm93KCB0aGlzLCBzZWxlY3RvciB8fCBbXSwgZmFsc2UgKSApO1xuXHR9LFxuXHRub3Q6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIHdpbm5vdyggdGhpcywgc2VsZWN0b3IgfHwgW10sIHRydWUgKSApO1xuXHR9LFxuXHRpczogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHJldHVybiAhIXdpbm5vdyhcblx0XHRcdHRoaXMsXG5cblx0XHRcdC8vIElmIHRoaXMgaXMgYSBwb3NpdGlvbmFsL3JlbGF0aXZlIHNlbGVjdG9yLCBjaGVjayBtZW1iZXJzaGlwIGluIHRoZSByZXR1cm5lZCBzZXRcblx0XHRcdC8vIHNvICQoXCJwOmZpcnN0XCIpLmlzKFwicDpsYXN0XCIpIHdvbid0IHJldHVybiB0cnVlIGZvciBhIGRvYyB3aXRoIHR3byBcInBcIi5cblx0XHRcdHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiAmJiBybmVlZHNDb250ZXh0LnRlc3QoIHNlbGVjdG9yICkgP1xuXHRcdFx0XHRqUXVlcnkoIHNlbGVjdG9yICkgOlxuXHRcdFx0XHRzZWxlY3RvciB8fCBbXSxcblx0XHRcdGZhbHNlXG5cdFx0KS5sZW5ndGg7XG5cdH1cbn0gKTtcblxuXG4vLyBJbml0aWFsaXplIGEgalF1ZXJ5IG9iamVjdFxuXG5cbi8vIEEgY2VudHJhbCByZWZlcmVuY2UgdG8gdGhlIHJvb3QgalF1ZXJ5KGRvY3VtZW50KVxudmFyIHJvb3RqUXVlcnksXG5cblx0Ly8gQSBzaW1wbGUgd2F5IHRvIGNoZWNrIGZvciBIVE1MIHN0cmluZ3Ncblx0Ly8gUHJpb3JpdGl6ZSAjaWQgb3ZlciA8dGFnPiB0byBhdm9pZCBYU1MgdmlhIGxvY2F0aW9uLmhhc2ggKCM5NTIxKVxuXHQvLyBTdHJpY3QgSFRNTCByZWNvZ25pdGlvbiAoIzExMjkwOiBtdXN0IHN0YXJ0IHdpdGggPClcblx0Ly8gU2hvcnRjdXQgc2ltcGxlICNpZCBjYXNlIGZvciBzcGVlZFxuXHRycXVpY2tFeHByID0gL14oPzpcXHMqKDxbXFx3XFxXXSs+KVtePl0qfCMoW1xcdy1dKykpJC8sXG5cblx0aW5pdCA9IGpRdWVyeS5mbi5pbml0ID0gZnVuY3Rpb24oIHNlbGVjdG9yLCBjb250ZXh0LCByb290ICkge1xuXHRcdHZhciBtYXRjaCwgZWxlbTtcblxuXHRcdC8vIEhBTkRMRTogJChcIlwiKSwgJChudWxsKSwgJCh1bmRlZmluZWQpLCAkKGZhbHNlKVxuXHRcdGlmICggIXNlbGVjdG9yICkge1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXG5cdFx0Ly8gTWV0aG9kIGluaXQoKSBhY2NlcHRzIGFuIGFsdGVybmF0ZSByb290alF1ZXJ5XG5cdFx0Ly8gc28gbWlncmF0ZSBjYW4gc3VwcG9ydCBqUXVlcnkuc3ViIChnaC0yMTAxKVxuXHRcdHJvb3QgPSByb290IHx8IHJvb3RqUXVlcnk7XG5cblx0XHQvLyBIYW5kbGUgSFRNTCBzdHJpbmdzXG5cdFx0aWYgKCB0eXBlb2Ygc2VsZWN0b3IgPT09IFwic3RyaW5nXCIgKSB7XG5cdFx0XHRpZiAoIHNlbGVjdG9yWyAwIF0gPT09IFwiPFwiICYmXG5cdFx0XHRcdHNlbGVjdG9yWyBzZWxlY3Rvci5sZW5ndGggLSAxIF0gPT09IFwiPlwiICYmXG5cdFx0XHRcdHNlbGVjdG9yLmxlbmd0aCA+PSAzICkge1xuXG5cdFx0XHRcdC8vIEFzc3VtZSB0aGF0IHN0cmluZ3MgdGhhdCBzdGFydCBhbmQgZW5kIHdpdGggPD4gYXJlIEhUTUwgYW5kIHNraXAgdGhlIHJlZ2V4IGNoZWNrXG5cdFx0XHRcdG1hdGNoID0gWyBudWxsLCBzZWxlY3RvciwgbnVsbCBdO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRtYXRjaCA9IHJxdWlja0V4cHIuZXhlYyggc2VsZWN0b3IgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWF0Y2ggaHRtbCBvciBtYWtlIHN1cmUgbm8gY29udGV4dCBpcyBzcGVjaWZpZWQgZm9yICNpZFxuXHRcdFx0aWYgKCBtYXRjaCAmJiAoIG1hdGNoWyAxIF0gfHwgIWNvbnRleHQgKSApIHtcblxuXHRcdFx0XHQvLyBIQU5ETEU6ICQoaHRtbCkgLT4gJChhcnJheSlcblx0XHRcdFx0aWYgKCBtYXRjaFsgMSBdICkge1xuXHRcdFx0XHRcdGNvbnRleHQgPSBjb250ZXh0IGluc3RhbmNlb2YgalF1ZXJ5ID8gY29udGV4dFsgMCBdIDogY29udGV4dDtcblxuXHRcdFx0XHRcdC8vIE9wdGlvbiB0byBydW4gc2NyaXB0cyBpcyB0cnVlIGZvciBiYWNrLWNvbXBhdFxuXHRcdFx0XHRcdC8vIEludGVudGlvbmFsbHkgbGV0IHRoZSBlcnJvciBiZSB0aHJvd24gaWYgcGFyc2VIVE1MIGlzIG5vdCBwcmVzZW50XG5cdFx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCB0aGlzLCBqUXVlcnkucGFyc2VIVE1MKFxuXHRcdFx0XHRcdFx0bWF0Y2hbIDEgXSxcblx0XHRcdFx0XHRcdGNvbnRleHQgJiYgY29udGV4dC5ub2RlVHlwZSA/IGNvbnRleHQub3duZXJEb2N1bWVudCB8fCBjb250ZXh0IDogZG9jdW1lbnQsXG5cdFx0XHRcdFx0XHR0cnVlXG5cdFx0XHRcdFx0KSApO1xuXG5cdFx0XHRcdFx0Ly8gSEFORExFOiAkKGh0bWwsIHByb3BzKVxuXHRcdFx0XHRcdGlmICggcnNpbmdsZVRhZy50ZXN0KCBtYXRjaFsgMSBdICkgJiYgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGNvbnRleHQgKSApIHtcblx0XHRcdFx0XHRcdGZvciAoIG1hdGNoIGluIGNvbnRleHQgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gUHJvcGVydGllcyBvZiBjb250ZXh0IGFyZSBjYWxsZWQgYXMgbWV0aG9kcyBpZiBwb3NzaWJsZVxuXHRcdFx0XHRcdFx0XHRpZiAoIGlzRnVuY3Rpb24oIHRoaXNbIG1hdGNoIF0gKSApIHtcblx0XHRcdFx0XHRcdFx0XHR0aGlzWyBtYXRjaCBdKCBjb250ZXh0WyBtYXRjaCBdICk7XG5cblx0XHRcdFx0XHRcdFx0Ly8gLi4uYW5kIG90aGVyd2lzZSBzZXQgYXMgYXR0cmlidXRlc1xuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdHRoaXMuYXR0ciggbWF0Y2gsIGNvbnRleHRbIG1hdGNoIF0gKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXG5cdFx0XHRcdC8vIEhBTkRMRTogJCgjaWQpXG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0ZWxlbSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCBtYXRjaFsgMiBdICk7XG5cblx0XHRcdFx0XHRpZiAoIGVsZW0gKSB7XG5cblx0XHRcdFx0XHRcdC8vIEluamVjdCB0aGUgZWxlbWVudCBkaXJlY3RseSBpbnRvIHRoZSBqUXVlcnkgb2JqZWN0XG5cdFx0XHRcdFx0XHR0aGlzWyAwIF0gPSBlbGVtO1xuXHRcdFx0XHRcdFx0dGhpcy5sZW5ndGggPSAxO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdFx0fVxuXG5cdFx0XHQvLyBIQU5ETEU6ICQoZXhwciwgJCguLi4pKVxuXHRcdFx0fSBlbHNlIGlmICggIWNvbnRleHQgfHwgY29udGV4dC5qcXVlcnkgKSB7XG5cdFx0XHRcdHJldHVybiAoIGNvbnRleHQgfHwgcm9vdCApLmZpbmQoIHNlbGVjdG9yICk7XG5cblx0XHRcdC8vIEhBTkRMRTogJChleHByLCBjb250ZXh0KVxuXHRcdFx0Ly8gKHdoaWNoIGlzIGp1c3QgZXF1aXZhbGVudCB0bzogJChjb250ZXh0KS5maW5kKGV4cHIpXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5jb25zdHJ1Y3RvciggY29udGV4dCApLmZpbmQoIHNlbGVjdG9yICk7XG5cdFx0XHR9XG5cblx0XHQvLyBIQU5ETEU6ICQoRE9NRWxlbWVudClcblx0XHR9IGVsc2UgaWYgKCBzZWxlY3Rvci5ub2RlVHlwZSApIHtcblx0XHRcdHRoaXNbIDAgXSA9IHNlbGVjdG9yO1xuXHRcdFx0dGhpcy5sZW5ndGggPSAxO1xuXHRcdFx0cmV0dXJuIHRoaXM7XG5cblx0XHQvLyBIQU5ETEU6ICQoZnVuY3Rpb24pXG5cdFx0Ly8gU2hvcnRjdXQgZm9yIGRvY3VtZW50IHJlYWR5XG5cdFx0fSBlbHNlIGlmICggaXNGdW5jdGlvbiggc2VsZWN0b3IgKSApIHtcblx0XHRcdHJldHVybiByb290LnJlYWR5ICE9PSB1bmRlZmluZWQgP1xuXHRcdFx0XHRyb290LnJlYWR5KCBzZWxlY3RvciApIDpcblxuXHRcdFx0XHQvLyBFeGVjdXRlIGltbWVkaWF0ZWx5IGlmIHJlYWR5IGlzIG5vdCBwcmVzZW50XG5cdFx0XHRcdHNlbGVjdG9yKCBqUXVlcnkgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4galF1ZXJ5Lm1ha2VBcnJheSggc2VsZWN0b3IsIHRoaXMgKTtcblx0fTtcblxuLy8gR2l2ZSB0aGUgaW5pdCBmdW5jdGlvbiB0aGUgalF1ZXJ5IHByb3RvdHlwZSBmb3IgbGF0ZXIgaW5zdGFudGlhdGlvblxuaW5pdC5wcm90b3R5cGUgPSBqUXVlcnkuZm47XG5cbi8vIEluaXRpYWxpemUgY2VudHJhbCByZWZlcmVuY2VcbnJvb3RqUXVlcnkgPSBqUXVlcnkoIGRvY3VtZW50ICk7XG5cblxudmFyIHJwYXJlbnRzcHJldiA9IC9eKD86cGFyZW50c3xwcmV2KD86VW50aWx8QWxsKSkvLFxuXG5cdC8vIE1ldGhvZHMgZ3VhcmFudGVlZCB0byBwcm9kdWNlIGEgdW5pcXVlIHNldCB3aGVuIHN0YXJ0aW5nIGZyb20gYSB1bmlxdWUgc2V0XG5cdGd1YXJhbnRlZWRVbmlxdWUgPSB7XG5cdFx0Y2hpbGRyZW46IHRydWUsXG5cdFx0Y29udGVudHM6IHRydWUsXG5cdFx0bmV4dDogdHJ1ZSxcblx0XHRwcmV2OiB0cnVlXG5cdH07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0aGFzOiBmdW5jdGlvbiggdGFyZ2V0ICkge1xuXHRcdHZhciB0YXJnZXRzID0galF1ZXJ5KCB0YXJnZXQsIHRoaXMgKSxcblx0XHRcdGwgPSB0YXJnZXRzLmxlbmd0aDtcblxuXHRcdHJldHVybiB0aGlzLmZpbHRlciggZnVuY3Rpb24oKSB7XG5cdFx0XHR2YXIgaSA9IDA7XG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdGlmICggalF1ZXJ5LmNvbnRhaW5zKCB0aGlzLCB0YXJnZXRzWyBpIF0gKSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRjbG9zZXN0OiBmdW5jdGlvbiggc2VsZWN0b3JzLCBjb250ZXh0ICkge1xuXHRcdHZhciBjdXIsXG5cdFx0XHRpID0gMCxcblx0XHRcdGwgPSB0aGlzLmxlbmd0aCxcblx0XHRcdG1hdGNoZWQgPSBbXSxcblx0XHRcdHRhcmdldHMgPSB0eXBlb2Ygc2VsZWN0b3JzICE9PSBcInN0cmluZ1wiICYmIGpRdWVyeSggc2VsZWN0b3JzICk7XG5cblx0XHQvLyBQb3NpdGlvbmFsIHNlbGVjdG9ycyBuZXZlciBtYXRjaCwgc2luY2UgdGhlcmUncyBubyBfc2VsZWN0aW9uXyBjb250ZXh0XG5cdFx0aWYgKCAhcm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvcnMgKSApIHtcblx0XHRcdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0Zm9yICggY3VyID0gdGhpc1sgaSBdOyBjdXIgJiYgY3VyICE9PSBjb250ZXh0OyBjdXIgPSBjdXIucGFyZW50Tm9kZSApIHtcblxuXHRcdFx0XHRcdC8vIEFsd2F5cyBza2lwIGRvY3VtZW50IGZyYWdtZW50c1xuXHRcdFx0XHRcdGlmICggY3VyLm5vZGVUeXBlIDwgMTEgJiYgKCB0YXJnZXRzID9cblx0XHRcdFx0XHRcdHRhcmdldHMuaW5kZXgoIGN1ciApID4gLTEgOlxuXG5cdFx0XHRcdFx0XHQvLyBEb24ndCBwYXNzIG5vbi1lbGVtZW50cyB0byBTaXp6bGVcblx0XHRcdFx0XHRcdGN1ci5ub2RlVHlwZSA9PT0gMSAmJlxuXHRcdFx0XHRcdFx0XHRqUXVlcnkuZmluZC5tYXRjaGVzU2VsZWN0b3IoIGN1ciwgc2VsZWN0b3JzICkgKSApIHtcblxuXHRcdFx0XHRcdFx0bWF0Y2hlZC5wdXNoKCBjdXIgKTtcblx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzLnB1c2hTdGFjayggbWF0Y2hlZC5sZW5ndGggPiAxID8galF1ZXJ5LnVuaXF1ZVNvcnQoIG1hdGNoZWQgKSA6IG1hdGNoZWQgKTtcblx0fSxcblxuXHQvLyBEZXRlcm1pbmUgdGhlIHBvc2l0aW9uIG9mIGFuIGVsZW1lbnQgd2l0aGluIHRoZSBzZXRcblx0aW5kZXg6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gTm8gYXJndW1lbnQsIHJldHVybiBpbmRleCBpbiBwYXJlbnRcblx0XHRpZiAoICFlbGVtICkge1xuXHRcdFx0cmV0dXJuICggdGhpc1sgMCBdICYmIHRoaXNbIDAgXS5wYXJlbnROb2RlICkgPyB0aGlzLmZpcnN0KCkucHJldkFsbCgpLmxlbmd0aCA6IC0xO1xuXHRcdH1cblxuXHRcdC8vIEluZGV4IGluIHNlbGVjdG9yXG5cdFx0aWYgKCB0eXBlb2YgZWxlbSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHJldHVybiBpbmRleE9mLmNhbGwoIGpRdWVyeSggZWxlbSApLCB0aGlzWyAwIF0gKTtcblx0XHR9XG5cblx0XHQvLyBMb2NhdGUgdGhlIHBvc2l0aW9uIG9mIHRoZSBkZXNpcmVkIGVsZW1lbnRcblx0XHRyZXR1cm4gaW5kZXhPZi5jYWxsKCB0aGlzLFxuXG5cdFx0XHQvLyBJZiBpdCByZWNlaXZlcyBhIGpRdWVyeSBvYmplY3QsIHRoZSBmaXJzdCBlbGVtZW50IGlzIHVzZWRcblx0XHRcdGVsZW0uanF1ZXJ5ID8gZWxlbVsgMCBdIDogZWxlbVxuXHRcdCk7XG5cdH0sXG5cblx0YWRkOiBmdW5jdGlvbiggc2VsZWN0b3IsIGNvbnRleHQgKSB7XG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKFxuXHRcdFx0alF1ZXJ5LnVuaXF1ZVNvcnQoXG5cdFx0XHRcdGpRdWVyeS5tZXJnZSggdGhpcy5nZXQoKSwgalF1ZXJ5KCBzZWxlY3RvciwgY29udGV4dCApIClcblx0XHRcdClcblx0XHQpO1xuXHR9LFxuXG5cdGFkZEJhY2s6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gdGhpcy5hZGQoIHNlbGVjdG9yID09IG51bGwgP1xuXHRcdFx0dGhpcy5wcmV2T2JqZWN0IDogdGhpcy5wcmV2T2JqZWN0LmZpbHRlciggc2VsZWN0b3IgKVxuXHRcdCk7XG5cdH1cbn0gKTtcblxuZnVuY3Rpb24gc2libGluZyggY3VyLCBkaXIgKSB7XG5cdHdoaWxlICggKCBjdXIgPSBjdXJbIGRpciBdICkgJiYgY3VyLm5vZGVUeXBlICE9PSAxICkge31cblx0cmV0dXJuIGN1cjtcbn1cblxualF1ZXJ5LmVhY2goIHtcblx0cGFyZW50OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdHJldHVybiBwYXJlbnQgJiYgcGFyZW50Lm5vZGVUeXBlICE9PSAxMSA/IHBhcmVudCA6IG51bGw7XG5cdH0sXG5cdHBhcmVudHM6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBkaXIoIGVsZW0sIFwicGFyZW50Tm9kZVwiICk7XG5cdH0sXG5cdHBhcmVudHNVbnRpbDogZnVuY3Rpb24oIGVsZW0sIF9pLCB1bnRpbCApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcInBhcmVudE5vZGVcIiwgdW50aWwgKTtcblx0fSxcblx0bmV4dDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIHNpYmxpbmcoIGVsZW0sIFwibmV4dFNpYmxpbmdcIiApO1xuXHR9LFxuXHRwcmV2OiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZyggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiApO1xuXHR9LFxuXHRuZXh0QWxsOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gZGlyKCBlbGVtLCBcIm5leHRTaWJsaW5nXCIgKTtcblx0fSxcblx0cHJldkFsbDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiApO1xuXHR9LFxuXHRuZXh0VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBfaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJuZXh0U2libGluZ1wiLCB1bnRpbCApO1xuXHR9LFxuXHRwcmV2VW50aWw6IGZ1bmN0aW9uKCBlbGVtLCBfaSwgdW50aWwgKSB7XG5cdFx0cmV0dXJuIGRpciggZWxlbSwgXCJwcmV2aW91c1NpYmxpbmdcIiwgdW50aWwgKTtcblx0fSxcblx0c2libGluZ3M6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdHJldHVybiBzaWJsaW5ncyggKCBlbGVtLnBhcmVudE5vZGUgfHwge30gKS5maXJzdENoaWxkLCBlbGVtICk7XG5cdH0sXG5cdGNoaWxkcmVuOiBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRyZXR1cm4gc2libGluZ3MoIGVsZW0uZmlyc3RDaGlsZCApO1xuXHR9LFxuXHRjb250ZW50czogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0aWYgKCBlbGVtLmNvbnRlbnREb2N1bWVudCAhPSBudWxsICYmXG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDExK1xuXHRcdFx0Ly8gPG9iamVjdD4gZWxlbWVudHMgd2l0aCBubyBgZGF0YWAgYXR0cmlidXRlIGhhcyBhbiBvYmplY3Rcblx0XHRcdC8vIGBjb250ZW50RG9jdW1lbnRgIHdpdGggYSBgbnVsbGAgcHJvdG90eXBlLlxuXHRcdFx0Z2V0UHJvdG8oIGVsZW0uY29udGVudERvY3VtZW50ICkgKSB7XG5cblx0XHRcdHJldHVybiBlbGVtLmNvbnRlbnREb2N1bWVudDtcblx0XHR9XG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seSwgaU9TIDcgb25seSwgQW5kcm9pZCBCcm93c2VyIDw9NC4zIG9ubHlcblx0XHQvLyBUcmVhdCB0aGUgdGVtcGxhdGUgZWxlbWVudCBhcyBhIHJlZ3VsYXIgb25lIGluIGJyb3dzZXJzIHRoYXRcblx0XHQvLyBkb24ndCBzdXBwb3J0IGl0LlxuXHRcdGlmICggbm9kZU5hbWUoIGVsZW0sIFwidGVtcGxhdGVcIiApICkge1xuXHRcdFx0ZWxlbSA9IGVsZW0uY29udGVudCB8fCBlbGVtO1xuXHRcdH1cblxuXHRcdHJldHVybiBqUXVlcnkubWVyZ2UoIFtdLCBlbGVtLmNoaWxkTm9kZXMgKTtcblx0fVxufSwgZnVuY3Rpb24oIG5hbWUsIGZuICkge1xuXHRqUXVlcnkuZm5bIG5hbWUgXSA9IGZ1bmN0aW9uKCB1bnRpbCwgc2VsZWN0b3IgKSB7XG5cdFx0dmFyIG1hdGNoZWQgPSBqUXVlcnkubWFwKCB0aGlzLCBmbiwgdW50aWwgKTtcblxuXHRcdGlmICggbmFtZS5zbGljZSggLTUgKSAhPT0gXCJVbnRpbFwiICkge1xuXHRcdFx0c2VsZWN0b3IgPSB1bnRpbDtcblx0XHR9XG5cblx0XHRpZiAoIHNlbGVjdG9yICYmIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdG1hdGNoZWQgPSBqUXVlcnkuZmlsdGVyKCBzZWxlY3RvciwgbWF0Y2hlZCApO1xuXHRcdH1cblxuXHRcdGlmICggdGhpcy5sZW5ndGggPiAxICkge1xuXG5cdFx0XHQvLyBSZW1vdmUgZHVwbGljYXRlc1xuXHRcdFx0aWYgKCAhZ3VhcmFudGVlZFVuaXF1ZVsgbmFtZSBdICkge1xuXHRcdFx0XHRqUXVlcnkudW5pcXVlU29ydCggbWF0Y2hlZCApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBSZXZlcnNlIG9yZGVyIGZvciBwYXJlbnRzKiBhbmQgcHJldi1kZXJpdmF0aXZlc1xuXHRcdFx0aWYgKCBycGFyZW50c3ByZXYudGVzdCggbmFtZSApICkge1xuXHRcdFx0XHRtYXRjaGVkLnJldmVyc2UoKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5wdXNoU3RhY2soIG1hdGNoZWQgKTtcblx0fTtcbn0gKTtcbnZhciBybm90aHRtbHdoaXRlID0gKCAvW15cXHgyMFxcdFxcclxcblxcZl0rL2cgKTtcblxuXG5cbi8vIENvbnZlcnQgU3RyaW5nLWZvcm1hdHRlZCBvcHRpb25zIGludG8gT2JqZWN0LWZvcm1hdHRlZCBvbmVzXG5mdW5jdGlvbiBjcmVhdGVPcHRpb25zKCBvcHRpb25zICkge1xuXHR2YXIgb2JqZWN0ID0ge307XG5cdGpRdWVyeS5lYWNoKCBvcHRpb25zLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW10sIGZ1bmN0aW9uKCBfLCBmbGFnICkge1xuXHRcdG9iamVjdFsgZmxhZyBdID0gdHJ1ZTtcblx0fSApO1xuXHRyZXR1cm4gb2JqZWN0O1xufVxuXG4vKlxuICogQ3JlYXRlIGEgY2FsbGJhY2sgbGlzdCB1c2luZyB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnM6XG4gKlxuICpcdG9wdGlvbnM6IGFuIG9wdGlvbmFsIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIG9wdGlvbnMgdGhhdCB3aWxsIGNoYW5nZSBob3dcbiAqXHRcdFx0dGhlIGNhbGxiYWNrIGxpc3QgYmVoYXZlcyBvciBhIG1vcmUgdHJhZGl0aW9uYWwgb3B0aW9uIG9iamVjdFxuICpcbiAqIEJ5IGRlZmF1bHQgYSBjYWxsYmFjayBsaXN0IHdpbGwgYWN0IGxpa2UgYW4gZXZlbnQgY2FsbGJhY2sgbGlzdCBhbmQgY2FuIGJlXG4gKiBcImZpcmVkXCIgbXVsdGlwbGUgdGltZXMuXG4gKlxuICogUG9zc2libGUgb3B0aW9uczpcbiAqXG4gKlx0b25jZTpcdFx0XHR3aWxsIGVuc3VyZSB0aGUgY2FsbGJhY2sgbGlzdCBjYW4gb25seSBiZSBmaXJlZCBvbmNlIChsaWtlIGEgRGVmZXJyZWQpXG4gKlxuICpcdG1lbW9yeTpcdFx0XHR3aWxsIGtlZXAgdHJhY2sgb2YgcHJldmlvdXMgdmFsdWVzIGFuZCB3aWxsIGNhbGwgYW55IGNhbGxiYWNrIGFkZGVkXG4gKlx0XHRcdFx0XHRhZnRlciB0aGUgbGlzdCBoYXMgYmVlbiBmaXJlZCByaWdodCBhd2F5IHdpdGggdGhlIGxhdGVzdCBcIm1lbW9yaXplZFwiXG4gKlx0XHRcdFx0XHR2YWx1ZXMgKGxpa2UgYSBEZWZlcnJlZClcbiAqXG4gKlx0dW5pcXVlOlx0XHRcdHdpbGwgZW5zdXJlIGEgY2FsbGJhY2sgY2FuIG9ubHkgYmUgYWRkZWQgb25jZSAobm8gZHVwbGljYXRlIGluIHRoZSBsaXN0KVxuICpcbiAqXHRzdG9wT25GYWxzZTpcdGludGVycnVwdCBjYWxsaW5ncyB3aGVuIGEgY2FsbGJhY2sgcmV0dXJucyBmYWxzZVxuICpcbiAqL1xualF1ZXJ5LkNhbGxiYWNrcyA9IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXG5cdC8vIENvbnZlcnQgb3B0aW9ucyBmcm9tIFN0cmluZy1mb3JtYXR0ZWQgdG8gT2JqZWN0LWZvcm1hdHRlZCBpZiBuZWVkZWRcblx0Ly8gKHdlIGNoZWNrIGluIGNhY2hlIGZpcnN0KVxuXHRvcHRpb25zID0gdHlwZW9mIG9wdGlvbnMgPT09IFwic3RyaW5nXCIgP1xuXHRcdGNyZWF0ZU9wdGlvbnMoIG9wdGlvbnMgKSA6XG5cdFx0alF1ZXJ5LmV4dGVuZCgge30sIG9wdGlvbnMgKTtcblxuXHR2YXIgLy8gRmxhZyB0byBrbm93IGlmIGxpc3QgaXMgY3VycmVudGx5IGZpcmluZ1xuXHRcdGZpcmluZyxcblxuXHRcdC8vIExhc3QgZmlyZSB2YWx1ZSBmb3Igbm9uLWZvcmdldHRhYmxlIGxpc3RzXG5cdFx0bWVtb3J5LFxuXG5cdFx0Ly8gRmxhZyB0byBrbm93IGlmIGxpc3Qgd2FzIGFscmVhZHkgZmlyZWRcblx0XHRmaXJlZCxcblxuXHRcdC8vIEZsYWcgdG8gcHJldmVudCBmaXJpbmdcblx0XHRsb2NrZWQsXG5cblx0XHQvLyBBY3R1YWwgY2FsbGJhY2sgbGlzdFxuXHRcdGxpc3QgPSBbXSxcblxuXHRcdC8vIFF1ZXVlIG9mIGV4ZWN1dGlvbiBkYXRhIGZvciByZXBlYXRhYmxlIGxpc3RzXG5cdFx0cXVldWUgPSBbXSxcblxuXHRcdC8vIEluZGV4IG9mIGN1cnJlbnRseSBmaXJpbmcgY2FsbGJhY2sgKG1vZGlmaWVkIGJ5IGFkZC9yZW1vdmUgYXMgbmVlZGVkKVxuXHRcdGZpcmluZ0luZGV4ID0gLTEsXG5cblx0XHQvLyBGaXJlIGNhbGxiYWNrc1xuXHRcdGZpcmUgPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gRW5mb3JjZSBzaW5nbGUtZmlyaW5nXG5cdFx0XHRsb2NrZWQgPSBsb2NrZWQgfHwgb3B0aW9ucy5vbmNlO1xuXG5cdFx0XHQvLyBFeGVjdXRlIGNhbGxiYWNrcyBmb3IgYWxsIHBlbmRpbmcgZXhlY3V0aW9ucyxcblx0XHRcdC8vIHJlc3BlY3RpbmcgZmlyaW5nSW5kZXggb3ZlcnJpZGVzIGFuZCBydW50aW1lIGNoYW5nZXNcblx0XHRcdGZpcmVkID0gZmlyaW5nID0gdHJ1ZTtcblx0XHRcdGZvciAoIDsgcXVldWUubGVuZ3RoOyBmaXJpbmdJbmRleCA9IC0xICkge1xuXHRcdFx0XHRtZW1vcnkgPSBxdWV1ZS5zaGlmdCgpO1xuXHRcdFx0XHR3aGlsZSAoICsrZmlyaW5nSW5kZXggPCBsaXN0Lmxlbmd0aCApIHtcblxuXHRcdFx0XHRcdC8vIFJ1biBjYWxsYmFjayBhbmQgY2hlY2sgZm9yIGVhcmx5IHRlcm1pbmF0aW9uXG5cdFx0XHRcdFx0aWYgKCBsaXN0WyBmaXJpbmdJbmRleCBdLmFwcGx5KCBtZW1vcnlbIDAgXSwgbWVtb3J5WyAxIF0gKSA9PT0gZmFsc2UgJiZcblx0XHRcdFx0XHRcdG9wdGlvbnMuc3RvcE9uRmFsc2UgKSB7XG5cblx0XHRcdFx0XHRcdC8vIEp1bXAgdG8gZW5kIGFuZCBmb3JnZXQgdGhlIGRhdGEgc28gLmFkZCBkb2Vzbid0IHJlLWZpcmVcblx0XHRcdFx0XHRcdGZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGg7XG5cdFx0XHRcdFx0XHRtZW1vcnkgPSBmYWxzZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gRm9yZ2V0IHRoZSBkYXRhIGlmIHdlJ3JlIGRvbmUgd2l0aCBpdFxuXHRcdFx0aWYgKCAhb3B0aW9ucy5tZW1vcnkgKSB7XG5cdFx0XHRcdG1lbW9yeSA9IGZhbHNlO1xuXHRcdFx0fVxuXG5cdFx0XHRmaXJpbmcgPSBmYWxzZTtcblxuXHRcdFx0Ly8gQ2xlYW4gdXAgaWYgd2UncmUgZG9uZSBmaXJpbmcgZm9yIGdvb2Rcblx0XHRcdGlmICggbG9ja2VkICkge1xuXG5cdFx0XHRcdC8vIEtlZXAgYW4gZW1wdHkgbGlzdCBpZiB3ZSBoYXZlIGRhdGEgZm9yIGZ1dHVyZSBhZGQgY2FsbHNcblx0XHRcdFx0aWYgKCBtZW1vcnkgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IFtdO1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSwgdGhpcyBvYmplY3QgaXMgc3BlbnRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRsaXN0ID0gXCJcIjtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0sXG5cblx0XHQvLyBBY3R1YWwgQ2FsbGJhY2tzIG9iamVjdFxuXHRcdHNlbGYgPSB7XG5cblx0XHRcdC8vIEFkZCBhIGNhbGxiYWNrIG9yIGEgY29sbGVjdGlvbiBvZiBjYWxsYmFja3MgdG8gdGhlIGxpc3Rcblx0XHRcdGFkZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggbGlzdCApIHtcblxuXHRcdFx0XHRcdC8vIElmIHdlIGhhdmUgbWVtb3J5IGZyb20gYSBwYXN0IHJ1biwgd2Ugc2hvdWxkIGZpcmUgYWZ0ZXIgYWRkaW5nXG5cdFx0XHRcdFx0aWYgKCBtZW1vcnkgJiYgIWZpcmluZyApIHtcblx0XHRcdFx0XHRcdGZpcmluZ0luZGV4ID0gbGlzdC5sZW5ndGggLSAxO1xuXHRcdFx0XHRcdFx0cXVldWUucHVzaCggbWVtb3J5ICk7XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0KCBmdW5jdGlvbiBhZGQoIGFyZ3MgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggYXJncywgZnVuY3Rpb24oIF8sIGFyZyApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCBhcmcgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoICFvcHRpb25zLnVuaXF1ZSB8fCAhc2VsZi5oYXMoIGFyZyApICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0bGlzdC5wdXNoKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSBpZiAoIGFyZyAmJiBhcmcubGVuZ3RoICYmIHRvVHlwZSggYXJnICkgIT09IFwic3RyaW5nXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBJbnNwZWN0IHJlY3Vyc2l2ZWx5XG5cdFx0XHRcdFx0XHRcdFx0YWRkKCBhcmcgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdH0gKSggYXJndW1lbnRzICk7XG5cblx0XHRcdFx0XHRpZiAoIG1lbW9yeSAmJiAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIFJlbW92ZSBhIGNhbGxiYWNrIGZyb20gdGhlIGxpc3Rcblx0XHRcdHJlbW92ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGpRdWVyeS5lYWNoKCBhcmd1bWVudHMsIGZ1bmN0aW9uKCBfLCBhcmcgKSB7XG5cdFx0XHRcdFx0dmFyIGluZGV4O1xuXHRcdFx0XHRcdHdoaWxlICggKCBpbmRleCA9IGpRdWVyeS5pbkFycmF5KCBhcmcsIGxpc3QsIGluZGV4ICkgKSA+IC0xICkge1xuXHRcdFx0XHRcdFx0bGlzdC5zcGxpY2UoIGluZGV4LCAxICk7XG5cblx0XHRcdFx0XHRcdC8vIEhhbmRsZSBmaXJpbmcgaW5kZXhlc1xuXHRcdFx0XHRcdFx0aWYgKCBpbmRleCA8PSBmaXJpbmdJbmRleCApIHtcblx0XHRcdFx0XHRcdFx0ZmlyaW5nSW5kZXgtLTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBDaGVjayBpZiBhIGdpdmVuIGNhbGxiYWNrIGlzIGluIHRoZSBsaXN0LlxuXHRcdFx0Ly8gSWYgbm8gYXJndW1lbnQgaXMgZ2l2ZW4sIHJldHVybiB3aGV0aGVyIG9yIG5vdCBsaXN0IGhhcyBjYWxsYmFja3MgYXR0YWNoZWQuXG5cdFx0XHRoYXM6IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRcdFx0cmV0dXJuIGZuID9cblx0XHRcdFx0XHRqUXVlcnkuaW5BcnJheSggZm4sIGxpc3QgKSA+IC0xIDpcblx0XHRcdFx0XHRsaXN0Lmxlbmd0aCA+IDA7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBSZW1vdmUgYWxsIGNhbGxiYWNrcyBmcm9tIHRoZSBsaXN0XG5cdFx0XHRlbXB0eTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggbGlzdCApIHtcblx0XHRcdFx0XHRsaXN0ID0gW107XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXG5cdFx0XHQvLyBEaXNhYmxlIC5maXJlIGFuZCAuYWRkXG5cdFx0XHQvLyBBYm9ydCBhbnkgY3VycmVudC9wZW5kaW5nIGV4ZWN1dGlvbnNcblx0XHRcdC8vIENsZWFyIGFsbCBjYWxsYmFja3MgYW5kIHZhbHVlc1xuXHRcdFx0ZGlzYWJsZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGxvY2tlZCA9IHF1ZXVlID0gW107XG5cdFx0XHRcdGxpc3QgPSBtZW1vcnkgPSBcIlwiO1xuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cdFx0XHRkaXNhYmxlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhbGlzdDtcblx0XHRcdH0sXG5cblx0XHRcdC8vIERpc2FibGUgLmZpcmVcblx0XHRcdC8vIEFsc28gZGlzYWJsZSAuYWRkIHVubGVzcyB3ZSBoYXZlIG1lbW9yeSAoc2luY2UgaXQgd291bGQgaGF2ZSBubyBlZmZlY3QpXG5cdFx0XHQvLyBBYm9ydCBhbnkgcGVuZGluZyBleGVjdXRpb25zXG5cdFx0XHRsb2NrOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0bG9ja2VkID0gcXVldWUgPSBbXTtcblx0XHRcdFx0aWYgKCAhbWVtb3J5ICYmICFmaXJpbmcgKSB7XG5cdFx0XHRcdFx0bGlzdCA9IG1lbW9yeSA9IFwiXCI7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9LFxuXHRcdFx0bG9ja2VkOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuICEhbG9ja2VkO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gQ2FsbCBhbGwgY2FsbGJhY2tzIHdpdGggdGhlIGdpdmVuIGNvbnRleHQgYW5kIGFyZ3VtZW50c1xuXHRcdFx0ZmlyZVdpdGg6IGZ1bmN0aW9uKCBjb250ZXh0LCBhcmdzICkge1xuXHRcdFx0XHRpZiAoICFsb2NrZWQgKSB7XG5cdFx0XHRcdFx0YXJncyA9IGFyZ3MgfHwgW107XG5cdFx0XHRcdFx0YXJncyA9IFsgY29udGV4dCwgYXJncy5zbGljZSA/IGFyZ3Muc2xpY2UoKSA6IGFyZ3MgXTtcblx0XHRcdFx0XHRxdWV1ZS5wdXNoKCBhcmdzICk7XG5cdFx0XHRcdFx0aWYgKCAhZmlyaW5nICkge1xuXHRcdFx0XHRcdFx0ZmlyZSgpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdGhpcztcblx0XHRcdH0sXG5cblx0XHRcdC8vIENhbGwgYWxsIHRoZSBjYWxsYmFja3Mgd2l0aCB0aGUgZ2l2ZW4gYXJndW1lbnRzXG5cdFx0XHRmaXJlOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0c2VsZi5maXJlV2l0aCggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gVG8ga25vdyBpZiB0aGUgY2FsbGJhY2tzIGhhdmUgYWxyZWFkeSBiZWVuIGNhbGxlZCBhdCBsZWFzdCBvbmNlXG5cdFx0XHRmaXJlZDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHJldHVybiAhIWZpcmVkO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0cmV0dXJuIHNlbGY7XG59O1xuXG5cbmZ1bmN0aW9uIElkZW50aXR5KCB2ICkge1xuXHRyZXR1cm4gdjtcbn1cbmZ1bmN0aW9uIFRocm93ZXIoIGV4ICkge1xuXHR0aHJvdyBleDtcbn1cblxuZnVuY3Rpb24gYWRvcHRWYWx1ZSggdmFsdWUsIHJlc29sdmUsIHJlamVjdCwgbm9WYWx1ZSApIHtcblx0dmFyIG1ldGhvZDtcblxuXHR0cnkge1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIHByb21pc2UgYXNwZWN0IGZpcnN0IHRvIHByaXZpbGVnZSBzeW5jaHJvbm91cyBiZWhhdmlvclxuXHRcdGlmICggdmFsdWUgJiYgaXNGdW5jdGlvbiggKCBtZXRob2QgPSB2YWx1ZS5wcm9taXNlICkgKSApIHtcblx0XHRcdG1ldGhvZC5jYWxsKCB2YWx1ZSApLmRvbmUoIHJlc29sdmUgKS5mYWlsKCByZWplY3QgKTtcblxuXHRcdC8vIE90aGVyIHRoZW5hYmxlc1xuXHRcdH0gZWxzZSBpZiAoIHZhbHVlICYmIGlzRnVuY3Rpb24oICggbWV0aG9kID0gdmFsdWUudGhlbiApICkgKSB7XG5cdFx0XHRtZXRob2QuY2FsbCggdmFsdWUsIHJlc29sdmUsIHJlamVjdCApO1xuXG5cdFx0Ly8gT3RoZXIgbm9uLXRoZW5hYmxlc1xuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIENvbnRyb2wgYHJlc29sdmVgIGFyZ3VtZW50cyBieSBsZXR0aW5nIEFycmF5I3NsaWNlIGNhc3QgYm9vbGVhbiBgbm9WYWx1ZWAgdG8gaW50ZWdlcjpcblx0XHRcdC8vICogZmFsc2U6IFsgdmFsdWUgXS5zbGljZSggMCApID0+IHJlc29sdmUoIHZhbHVlIClcblx0XHRcdC8vICogdHJ1ZTogWyB2YWx1ZSBdLnNsaWNlKCAxICkgPT4gcmVzb2x2ZSgpXG5cdFx0XHRyZXNvbHZlLmFwcGx5KCB1bmRlZmluZWQsIFsgdmFsdWUgXS5zbGljZSggbm9WYWx1ZSApICk7XG5cdFx0fVxuXG5cdC8vIEZvciBQcm9taXNlcy9BKywgY29udmVydCBleGNlcHRpb25zIGludG8gcmVqZWN0aW9uc1xuXHQvLyBTaW5jZSBqUXVlcnkud2hlbiBkb2Vzbid0IHVud3JhcCB0aGVuYWJsZXMsIHdlIGNhbiBza2lwIHRoZSBleHRyYSBjaGVja3MgYXBwZWFyaW5nIGluXG5cdC8vIERlZmVycmVkI3RoZW4gdG8gY29uZGl0aW9uYWxseSBzdXBwcmVzcyByZWplY3Rpb24uXG5cdH0gY2F0Y2ggKCB2YWx1ZSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIG9ubHlcblx0XHQvLyBTdHJpY3QgbW9kZSBmdW5jdGlvbnMgaW52b2tlZCB3aXRob3V0IC5jYWxsLy5hcHBseSBnZXQgZ2xvYmFsLW9iamVjdCBjb250ZXh0XG5cdFx0cmVqZWN0LmFwcGx5KCB1bmRlZmluZWQsIFsgdmFsdWUgXSApO1xuXHR9XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHREZWZlcnJlZDogZnVuY3Rpb24oIGZ1bmMgKSB7XG5cdFx0dmFyIHR1cGxlcyA9IFtcblxuXHRcdFx0XHQvLyBhY3Rpb24sIGFkZCBsaXN0ZW5lciwgY2FsbGJhY2tzLFxuXHRcdFx0XHQvLyAuLi4gLnRoZW4gaGFuZGxlcnMsIGFyZ3VtZW50IGluZGV4LCBbZmluYWwgc3RhdGVdXG5cdFx0XHRcdFsgXCJub3RpZnlcIiwgXCJwcm9ncmVzc1wiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm1lbW9yeVwiICksXG5cdFx0XHRcdFx0alF1ZXJ5LkNhbGxiYWNrcyggXCJtZW1vcnlcIiApLCAyIF0sXG5cdFx0XHRcdFsgXCJyZXNvbHZlXCIsIFwiZG9uZVwiLCBqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSxcblx0XHRcdFx0XHRqUXVlcnkuQ2FsbGJhY2tzKCBcIm9uY2UgbWVtb3J5XCIgKSwgMCwgXCJyZXNvbHZlZFwiIF0sXG5cdFx0XHRcdFsgXCJyZWplY3RcIiwgXCJmYWlsXCIsIGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLFxuXHRcdFx0XHRcdGpRdWVyeS5DYWxsYmFja3MoIFwib25jZSBtZW1vcnlcIiApLCAxLCBcInJlamVjdGVkXCIgXVxuXHRcdFx0XSxcblx0XHRcdHN0YXRlID0gXCJwZW5kaW5nXCIsXG5cdFx0XHRwcm9taXNlID0ge1xuXHRcdFx0XHRzdGF0ZTogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHN0YXRlO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRhbHdheXM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdGRlZmVycmVkLmRvbmUoIGFyZ3VtZW50cyApLmZhaWwoIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRcImNhdGNoXCI6IGZ1bmN0aW9uKCBmbiApIHtcblx0XHRcdFx0XHRyZXR1cm4gcHJvbWlzZS50aGVuKCBudWxsLCBmbiApO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIEtlZXAgcGlwZSBmb3IgYmFjay1jb21wYXRcblx0XHRcdFx0cGlwZTogZnVuY3Rpb24oIC8qIGZuRG9uZSwgZm5GYWlsLCBmblByb2dyZXNzICovICkge1xuXHRcdFx0XHRcdHZhciBmbnMgPSBhcmd1bWVudHM7XG5cblx0XHRcdFx0XHRyZXR1cm4galF1ZXJ5LkRlZmVycmVkKCBmdW5jdGlvbiggbmV3RGVmZXIgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggX2ksIHR1cGxlICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIE1hcCB0dXBsZXMgKHByb2dyZXNzLCBkb25lLCBmYWlsKSB0byBhcmd1bWVudHMgKGRvbmUsIGZhaWwsIHByb2dyZXNzKVxuXHRcdFx0XHRcdFx0XHR2YXIgZm4gPSBpc0Z1bmN0aW9uKCBmbnNbIHR1cGxlWyA0IF0gXSApICYmIGZuc1sgdHVwbGVbIDQgXSBdO1xuXG5cdFx0XHRcdFx0XHRcdC8vIGRlZmVycmVkLnByb2dyZXNzKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLm5vdGlmeSB9KVxuXHRcdFx0XHRcdFx0XHQvLyBkZWZlcnJlZC5kb25lKGZ1bmN0aW9uKCkgeyBiaW5kIHRvIG5ld0RlZmVyIG9yIG5ld0RlZmVyLnJlc29sdmUgfSlcblx0XHRcdFx0XHRcdFx0Ly8gZGVmZXJyZWQuZmFpbChmdW5jdGlvbigpIHsgYmluZCB0byBuZXdEZWZlciBvciBuZXdEZWZlci5yZWplY3QgfSlcblx0XHRcdFx0XHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAxIF0gXSggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0dmFyIHJldHVybmVkID0gZm4gJiYgZm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdFx0XHRcdFx0XHRcdGlmICggcmV0dXJuZWQgJiYgaXNGdW5jdGlvbiggcmV0dXJuZWQucHJvbWlzZSApICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQucHJvbWlzZSgpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC5wcm9ncmVzcyggbmV3RGVmZXIubm90aWZ5IClcblx0XHRcdFx0XHRcdFx0XHRcdFx0LmRvbmUoIG5ld0RlZmVyLnJlc29sdmUgKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuZmFpbCggbmV3RGVmZXIucmVqZWN0ICk7XG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRcdG5ld0RlZmVyWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXShcblx0XHRcdFx0XHRcdFx0XHRcdFx0dGhpcyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0Zm4gPyBbIHJldHVybmVkIF0gOiBhcmd1bWVudHNcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0XHRmbnMgPSBudWxsO1xuXHRcdFx0XHRcdH0gKS5wcm9taXNlKCk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHRoZW46IGZ1bmN0aW9uKCBvbkZ1bGZpbGxlZCwgb25SZWplY3RlZCwgb25Qcm9ncmVzcyApIHtcblx0XHRcdFx0XHR2YXIgbWF4RGVwdGggPSAwO1xuXHRcdFx0XHRcdGZ1bmN0aW9uIHJlc29sdmUoIGRlcHRoLCBkZWZlcnJlZCwgaGFuZGxlciwgc3BlY2lhbCApIHtcblx0XHRcdFx0XHRcdHJldHVybiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0dmFyIHRoYXQgPSB0aGlzLFxuXHRcdFx0XHRcdFx0XHRcdGFyZ3MgPSBhcmd1bWVudHMsXG5cdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdyA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0dmFyIHJldHVybmVkLCB0aGVuO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4zLjMuM1xuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTlcblx0XHRcdFx0XHRcdFx0XHRcdC8vIElnbm9yZSBkb3VibGUtcmVzb2x1dGlvbiBhdHRlbXB0c1xuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCA8IG1heERlcHRoICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkID0gaGFuZGxlci5hcHBseSggdGhhdCwgYXJncyApO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy4xXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBodHRwczovL3Byb21pc2VzYXBsdXMuY29tLyNwb2ludC00OFxuXHRcdFx0XHRcdFx0XHRcdFx0aWYgKCByZXR1cm5lZCA9PT0gZGVmZXJyZWQucHJvbWlzZSgpICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCBcIlRoZW5hYmxlIHNlbGYtcmVzb2x1dGlvblwiICk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IFByb21pc2VzL0ErIHNlY3Rpb25zIDIuMy4zLjEsIDMuNVxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTRcblx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTc1XG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBSZXRyaWV2ZSBgdGhlbmAgb25seSBvbmNlXG5cdFx0XHRcdFx0XHRcdFx0XHR0aGVuID0gcmV0dXJuZWQgJiZcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBQcm9taXNlcy9BKyBzZWN0aW9uIDIuMy40XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTY0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgY2hlY2sgb2JqZWN0cyBhbmQgZnVuY3Rpb25zIGZvciB0aGVuYWJpbGl0eVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQoIHR5cGVvZiByZXR1cm5lZCA9PT0gXCJvYmplY3RcIiB8fFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHR5cGVvZiByZXR1cm5lZCA9PT0gXCJmdW5jdGlvblwiICkgJiZcblx0XHRcdFx0XHRcdFx0XHRcdFx0cmV0dXJuZWQudGhlbjtcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gSGFuZGxlIGEgcmV0dXJuZWQgdGhlbmFibGVcblx0XHRcdFx0XHRcdFx0XHRcdGlmICggaXNGdW5jdGlvbiggdGhlbiApICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFNwZWNpYWwgcHJvY2Vzc29ycyAobm90aWZ5KSBqdXN0IHdhaXQgZm9yIHJlc29sdXRpb25cblx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBzcGVjaWFsICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoZW4uY2FsbChcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJldHVybmVkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBUaHJvd2VyLCBzcGVjaWFsIClcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE5vcm1hbCBwcm9jZXNzb3JzIChyZXNvbHZlKSBhbHNvIGhvb2sgaW50byBwcm9ncmVzc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gLi4uYW5kIGRpc3JlZ2FyZCBvbGRlciByZXNvbHV0aW9uIHZhbHVlc1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdG1heERlcHRoKys7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGVuLmNhbGwoXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm5lZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgSWRlbnRpdHksIHNwZWNpYWwgKSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoIG1heERlcHRoLCBkZWZlcnJlZCwgVGhyb3dlciwgc3BlY2lhbCApLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZSggbWF4RGVwdGgsIGRlZmVycmVkLCBJZGVudGl0eSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0ZGVmZXJyZWQubm90aWZ5V2l0aCApXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHQvLyBIYW5kbGUgYWxsIG90aGVyIHJldHVybmVkIHZhbHVlc1xuXHRcdFx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHQvLyBPbmx5IHN1YnN0aXR1dGUgaGFuZGxlcnMgcGFzcyBvbiBjb250ZXh0XG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGFuZCBtdWx0aXBsZSB2YWx1ZXMgKG5vbi1zcGVjIGJlaGF2aW9yKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRpZiAoIGhhbmRsZXIgIT09IElkZW50aXR5ICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdHRoYXQgPSB1bmRlZmluZWQ7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0YXJncyA9IFsgcmV0dXJuZWQgXTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIFByb2Nlc3MgdGhlIHZhbHVlKHMpXG5cdFx0XHRcdFx0XHRcdFx0XHRcdC8vIERlZmF1bHQgcHJvY2VzcyBpcyByZXNvbHZlXG5cdFx0XHRcdFx0XHRcdFx0XHRcdCggc3BlY2lhbCB8fCBkZWZlcnJlZC5yZXNvbHZlV2l0aCApKCB0aGF0LCBhcmdzICk7XG5cdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0fSxcblxuXHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgbm9ybWFsIHByb2Nlc3NvcnMgKHJlc29sdmUpIGNhdGNoIGFuZCByZWplY3QgZXhjZXB0aW9uc1xuXHRcdFx0XHRcdFx0XHRcdHByb2Nlc3MgPSBzcGVjaWFsID9cblx0XHRcdFx0XHRcdFx0XHRcdG1pZ2h0VGhyb3cgOlxuXHRcdFx0XHRcdFx0XHRcdFx0ZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHRyeSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0bWlnaHRUaHJvdygpO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5LkRlZmVycmVkLmV4Y2VwdGlvbkhvb2sgKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRqUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayggZSxcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0cHJvY2Vzcy5zdGFja1RyYWNlICk7XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjQuMVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGh0dHBzOi8vcHJvbWlzZXNhcGx1cy5jb20vI3BvaW50LTYxXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gSWdub3JlIHBvc3QtcmVzb2x1dGlvbiBleGNlcHRpb25zXG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBkZXB0aCArIDEgPj0gbWF4RGVwdGggKSB7XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIE9ubHkgc3Vic3RpdHV0ZSBoYW5kbGVycyBwYXNzIG9uIGNvbnRleHRcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdC8vIGFuZCBtdWx0aXBsZSB2YWx1ZXMgKG5vbi1zcGVjIGJlaGF2aW9yKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0aWYgKCBoYW5kbGVyICE9PSBUaHJvd2VyICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR0aGF0ID0gdW5kZWZpbmVkO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHRhcmdzID0gWyBlIF07XG5cdFx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIHRoYXQsIGFyZ3MgKTtcblx0XHRcdFx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRcdH07XG5cblx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogUHJvbWlzZXMvQSsgc2VjdGlvbiAyLjMuMy4zLjFcblx0XHRcdFx0XHRcdFx0Ly8gaHR0cHM6Ly9wcm9taXNlc2FwbHVzLmNvbS8jcG9pbnQtNTdcblx0XHRcdFx0XHRcdFx0Ly8gUmUtcmVzb2x2ZSBwcm9taXNlcyBpbW1lZGlhdGVseSB0byBkb2RnZSBmYWxzZSByZWplY3Rpb24gZnJvbVxuXHRcdFx0XHRcdFx0XHQvLyBzdWJzZXF1ZW50IGVycm9yc1xuXHRcdFx0XHRcdFx0XHRpZiAoIGRlcHRoICkge1xuXHRcdFx0XHRcdFx0XHRcdHByb2Nlc3MoKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHRcdFx0XHRcdC8vIENhbGwgYW4gb3B0aW9uYWwgaG9vayB0byByZWNvcmQgdGhlIHN0YWNrLCBpbiBjYXNlIG9mIGV4Y2VwdGlvblxuXHRcdFx0XHRcdFx0XHRcdC8vIHNpbmNlIGl0J3Mgb3RoZXJ3aXNlIGxvc3Qgd2hlbiBleGVjdXRpb24gZ29lcyBhc3luY1xuXHRcdFx0XHRcdFx0XHRcdGlmICggalF1ZXJ5LkRlZmVycmVkLmdldFN0YWNrSG9vayApIHtcblx0XHRcdFx0XHRcdFx0XHRcdHByb2Nlc3Muc3RhY2tUcmFjZSA9IGpRdWVyeS5EZWZlcnJlZC5nZXRTdGFja0hvb2soKTtcblx0XHRcdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0XHRcdFx0d2luZG93LnNldFRpbWVvdXQoIHByb2Nlc3MgKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRyZXR1cm4galF1ZXJ5LkRlZmVycmVkKCBmdW5jdGlvbiggbmV3RGVmZXIgKSB7XG5cblx0XHRcdFx0XHRcdC8vIHByb2dyZXNzX2hhbmRsZXJzLmFkZCggLi4uIClcblx0XHRcdFx0XHRcdHR1cGxlc1sgMCBdWyAzIF0uYWRkKFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIsXG5cdFx0XHRcdFx0XHRcdFx0aXNGdW5jdGlvbiggb25Qcm9ncmVzcyApID9cblx0XHRcdFx0XHRcdFx0XHRcdG9uUHJvZ3Jlc3MgOlxuXHRcdFx0XHRcdFx0XHRcdFx0SWRlbnRpdHksXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIubm90aWZ5V2l0aFxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXG5cdFx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfaGFuZGxlcnMuYWRkKCAuLi4gKVxuXHRcdFx0XHRcdFx0dHVwbGVzWyAxIF1bIDMgXS5hZGQoXG5cdFx0XHRcdFx0XHRcdHJlc29sdmUoXG5cdFx0XHRcdFx0XHRcdFx0MCxcblx0XHRcdFx0XHRcdFx0XHRuZXdEZWZlcixcblx0XHRcdFx0XHRcdFx0XHRpc0Z1bmN0aW9uKCBvbkZ1bGZpbGxlZCApID9cblx0XHRcdFx0XHRcdFx0XHRcdG9uRnVsZmlsbGVkIDpcblx0XHRcdFx0XHRcdFx0XHRcdElkZW50aXR5XG5cdFx0XHRcdFx0XHRcdClcblx0XHRcdFx0XHRcdCk7XG5cblx0XHRcdFx0XHRcdC8vIHJlamVjdGVkX2hhbmRsZXJzLmFkZCggLi4uIClcblx0XHRcdFx0XHRcdHR1cGxlc1sgMiBdWyAzIF0uYWRkKFxuXHRcdFx0XHRcdFx0XHRyZXNvbHZlKFxuXHRcdFx0XHRcdFx0XHRcdDAsXG5cdFx0XHRcdFx0XHRcdFx0bmV3RGVmZXIsXG5cdFx0XHRcdFx0XHRcdFx0aXNGdW5jdGlvbiggb25SZWplY3RlZCApID9cblx0XHRcdFx0XHRcdFx0XHRcdG9uUmVqZWN0ZWQgOlxuXHRcdFx0XHRcdFx0XHRcdFx0VGhyb3dlclxuXHRcdFx0XHRcdFx0XHQpXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0gKS5wcm9taXNlKCk7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gR2V0IGEgcHJvbWlzZSBmb3IgdGhpcyBkZWZlcnJlZFxuXHRcdFx0XHQvLyBJZiBvYmogaXMgcHJvdmlkZWQsIHRoZSBwcm9taXNlIGFzcGVjdCBpcyBhZGRlZCB0byB0aGUgb2JqZWN0XG5cdFx0XHRcdHByb21pc2U6IGZ1bmN0aW9uKCBvYmogKSB7XG5cdFx0XHRcdFx0cmV0dXJuIG9iaiAhPSBudWxsID8galF1ZXJ5LmV4dGVuZCggb2JqLCBwcm9taXNlICkgOiBwcm9taXNlO1xuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXHRcdFx0ZGVmZXJyZWQgPSB7fTtcblxuXHRcdC8vIEFkZCBsaXN0LXNwZWNpZmljIG1ldGhvZHNcblx0XHRqUXVlcnkuZWFjaCggdHVwbGVzLCBmdW5jdGlvbiggaSwgdHVwbGUgKSB7XG5cdFx0XHR2YXIgbGlzdCA9IHR1cGxlWyAyIF0sXG5cdFx0XHRcdHN0YXRlU3RyaW5nID0gdHVwbGVbIDUgXTtcblxuXHRcdFx0Ly8gcHJvbWlzZS5wcm9ncmVzcyA9IGxpc3QuYWRkXG5cdFx0XHQvLyBwcm9taXNlLmRvbmUgPSBsaXN0LmFkZFxuXHRcdFx0Ly8gcHJvbWlzZS5mYWlsID0gbGlzdC5hZGRcblx0XHRcdHByb21pc2VbIHR1cGxlWyAxIF0gXSA9IGxpc3QuYWRkO1xuXG5cdFx0XHQvLyBIYW5kbGUgc3RhdGVcblx0XHRcdGlmICggc3RhdGVTdHJpbmcgKSB7XG5cdFx0XHRcdGxpc3QuYWRkKFxuXHRcdFx0XHRcdGZ1bmN0aW9uKCkge1xuXG5cdFx0XHRcdFx0XHQvLyBzdGF0ZSA9IFwicmVzb2x2ZWRcIiAoaS5lLiwgZnVsZmlsbGVkKVxuXHRcdFx0XHRcdFx0Ly8gc3RhdGUgPSBcInJlamVjdGVkXCJcblx0XHRcdFx0XHRcdHN0YXRlID0gc3RhdGVTdHJpbmc7XG5cdFx0XHRcdFx0fSxcblxuXHRcdFx0XHRcdC8vIHJlamVjdGVkX2NhbGxiYWNrcy5kaXNhYmxlXG5cdFx0XHRcdFx0Ly8gZnVsZmlsbGVkX2NhbGxiYWNrcy5kaXNhYmxlXG5cdFx0XHRcdFx0dHVwbGVzWyAzIC0gaSBdWyAyIF0uZGlzYWJsZSxcblxuXHRcdFx0XHRcdC8vIHJlamVjdGVkX2hhbmRsZXJzLmRpc2FibGVcblx0XHRcdFx0XHQvLyBmdWxmaWxsZWRfaGFuZGxlcnMuZGlzYWJsZVxuXHRcdFx0XHRcdHR1cGxlc1sgMyAtIGkgXVsgMyBdLmRpc2FibGUsXG5cblx0XHRcdFx0XHQvLyBwcm9ncmVzc19jYWxsYmFja3MubG9ja1xuXHRcdFx0XHRcdHR1cGxlc1sgMCBdWyAyIF0ubG9jayxcblxuXHRcdFx0XHRcdC8vIHByb2dyZXNzX2hhbmRsZXJzLmxvY2tcblx0XHRcdFx0XHR0dXBsZXNbIDAgXVsgMyBdLmxvY2tcblx0XHRcdFx0KTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gcHJvZ3Jlc3NfaGFuZGxlcnMuZmlyZVxuXHRcdFx0Ly8gZnVsZmlsbGVkX2hhbmRsZXJzLmZpcmVcblx0XHRcdC8vIHJlamVjdGVkX2hhbmRsZXJzLmZpcmVcblx0XHRcdGxpc3QuYWRkKCB0dXBsZVsgMyBdLmZpcmUgKTtcblxuXHRcdFx0Ly8gZGVmZXJyZWQubm90aWZ5ID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLm5vdGlmeVdpdGgoLi4uKSB9XG5cdFx0XHQvLyBkZWZlcnJlZC5yZXNvbHZlID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLnJlc29sdmVXaXRoKC4uLikgfVxuXHRcdFx0Ly8gZGVmZXJyZWQucmVqZWN0ID0gZnVuY3Rpb24oKSB7IGRlZmVycmVkLnJlamVjdFdpdGgoLi4uKSB9XG5cdFx0XHRkZWZlcnJlZFsgdHVwbGVbIDAgXSBdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGRlZmVycmVkWyB0dXBsZVsgMCBdICsgXCJXaXRoXCIgXSggdGhpcyA9PT0gZGVmZXJyZWQgPyB1bmRlZmluZWQgOiB0aGlzLCBhcmd1bWVudHMgKTtcblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9O1xuXG5cdFx0XHQvLyBkZWZlcnJlZC5ub3RpZnlXaXRoID0gbGlzdC5maXJlV2l0aFxuXHRcdFx0Ly8gZGVmZXJyZWQucmVzb2x2ZVdpdGggPSBsaXN0LmZpcmVXaXRoXG5cdFx0XHQvLyBkZWZlcnJlZC5yZWplY3RXaXRoID0gbGlzdC5maXJlV2l0aFxuXHRcdFx0ZGVmZXJyZWRbIHR1cGxlWyAwIF0gKyBcIldpdGhcIiBdID0gbGlzdC5maXJlV2l0aDtcblx0XHR9ICk7XG5cblx0XHQvLyBNYWtlIHRoZSBkZWZlcnJlZCBhIHByb21pc2Vcblx0XHRwcm9taXNlLnByb21pc2UoIGRlZmVycmVkICk7XG5cblx0XHQvLyBDYWxsIGdpdmVuIGZ1bmMgaWYgYW55XG5cdFx0aWYgKCBmdW5jICkge1xuXHRcdFx0ZnVuYy5jYWxsKCBkZWZlcnJlZCwgZGVmZXJyZWQgKTtcblx0XHR9XG5cblx0XHQvLyBBbGwgZG9uZSFcblx0XHRyZXR1cm4gZGVmZXJyZWQ7XG5cdH0sXG5cblx0Ly8gRGVmZXJyZWQgaGVscGVyXG5cdHdoZW46IGZ1bmN0aW9uKCBzaW5nbGVWYWx1ZSApIHtcblx0XHR2YXJcblxuXHRcdFx0Ly8gY291bnQgb2YgdW5jb21wbGV0ZWQgc3Vib3JkaW5hdGVzXG5cdFx0XHRyZW1haW5pbmcgPSBhcmd1bWVudHMubGVuZ3RoLFxuXG5cdFx0XHQvLyBjb3VudCBvZiB1bnByb2Nlc3NlZCBhcmd1bWVudHNcblx0XHRcdGkgPSByZW1haW5pbmcsXG5cblx0XHRcdC8vIHN1Ym9yZGluYXRlIGZ1bGZpbGxtZW50IGRhdGFcblx0XHRcdHJlc29sdmVDb250ZXh0cyA9IEFycmF5KCBpICksXG5cdFx0XHRyZXNvbHZlVmFsdWVzID0gc2xpY2UuY2FsbCggYXJndW1lbnRzICksXG5cblx0XHRcdC8vIHRoZSBwcmltYXJ5IERlZmVycmVkXG5cdFx0XHRwcmltYXJ5ID0galF1ZXJ5LkRlZmVycmVkKCksXG5cblx0XHRcdC8vIHN1Ym9yZGluYXRlIGNhbGxiYWNrIGZhY3Rvcnlcblx0XHRcdHVwZGF0ZUZ1bmMgPSBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0cmV0dXJuIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdFx0XHRyZXNvbHZlQ29udGV4dHNbIGkgXSA9IHRoaXM7XG5cdFx0XHRcdFx0cmVzb2x2ZVZhbHVlc1sgaSBdID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBzbGljZS5jYWxsKCBhcmd1bWVudHMgKSA6IHZhbHVlO1xuXHRcdFx0XHRcdGlmICggISggLS1yZW1haW5pbmcgKSApIHtcblx0XHRcdFx0XHRcdHByaW1hcnkucmVzb2x2ZVdpdGgoIHJlc29sdmVDb250ZXh0cywgcmVzb2x2ZVZhbHVlcyApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fTtcblx0XHRcdH07XG5cblx0XHQvLyBTaW5nbGUtIGFuZCBlbXB0eSBhcmd1bWVudHMgYXJlIGFkb3B0ZWQgbGlrZSBQcm9taXNlLnJlc29sdmVcblx0XHRpZiAoIHJlbWFpbmluZyA8PSAxICkge1xuXHRcdFx0YWRvcHRWYWx1ZSggc2luZ2xlVmFsdWUsIHByaW1hcnkuZG9uZSggdXBkYXRlRnVuYyggaSApICkucmVzb2x2ZSwgcHJpbWFyeS5yZWplY3QsXG5cdFx0XHRcdCFyZW1haW5pbmcgKTtcblxuXHRcdFx0Ly8gVXNlIC50aGVuKCkgdG8gdW53cmFwIHNlY29uZGFyeSB0aGVuYWJsZXMgKGNmLiBnaC0zMDAwKVxuXHRcdFx0aWYgKCBwcmltYXJ5LnN0YXRlKCkgPT09IFwicGVuZGluZ1wiIHx8XG5cdFx0XHRcdGlzRnVuY3Rpb24oIHJlc29sdmVWYWx1ZXNbIGkgXSAmJiByZXNvbHZlVmFsdWVzWyBpIF0udGhlbiApICkge1xuXG5cdFx0XHRcdHJldHVybiBwcmltYXJ5LnRoZW4oKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBNdWx0aXBsZSBhcmd1bWVudHMgYXJlIGFnZ3JlZ2F0ZWQgbGlrZSBQcm9taXNlLmFsbCBhcnJheSBlbGVtZW50c1xuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0YWRvcHRWYWx1ZSggcmVzb2x2ZVZhbHVlc1sgaSBdLCB1cGRhdGVGdW5jKCBpICksIHByaW1hcnkucmVqZWN0ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHByaW1hcnkucHJvbWlzZSgpO1xuXHR9XG59ICk7XG5cblxuLy8gVGhlc2UgdXN1YWxseSBpbmRpY2F0ZSBhIHByb2dyYW1tZXIgbWlzdGFrZSBkdXJpbmcgZGV2ZWxvcG1lbnQsXG4vLyB3YXJuIGFib3V0IHRoZW0gQVNBUCByYXRoZXIgdGhhbiBzd2FsbG93aW5nIHRoZW0gYnkgZGVmYXVsdC5cbnZhciByZXJyb3JOYW1lcyA9IC9eKEV2YWx8SW50ZXJuYWx8UmFuZ2V8UmVmZXJlbmNlfFN5bnRheHxUeXBlfFVSSSlFcnJvciQvO1xuXG5qUXVlcnkuRGVmZXJyZWQuZXhjZXB0aW9uSG9vayA9IGZ1bmN0aW9uKCBlcnJvciwgc3RhY2sgKSB7XG5cblx0Ly8gU3VwcG9ydDogSUUgOCAtIDkgb25seVxuXHQvLyBDb25zb2xlIGV4aXN0cyB3aGVuIGRldiB0b29scyBhcmUgb3Blbiwgd2hpY2ggY2FuIGhhcHBlbiBhdCBhbnkgdGltZVxuXHRpZiAoIHdpbmRvdy5jb25zb2xlICYmIHdpbmRvdy5jb25zb2xlLndhcm4gJiYgZXJyb3IgJiYgcmVycm9yTmFtZXMudGVzdCggZXJyb3IubmFtZSApICkge1xuXHRcdHdpbmRvdy5jb25zb2xlLndhcm4oIFwialF1ZXJ5LkRlZmVycmVkIGV4Y2VwdGlvbjogXCIgKyBlcnJvci5tZXNzYWdlLCBlcnJvci5zdGFjaywgc3RhY2sgKTtcblx0fVxufTtcblxuXG5cblxualF1ZXJ5LnJlYWR5RXhjZXB0aW9uID0gZnVuY3Rpb24oIGVycm9yICkge1xuXHR3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0dGhyb3cgZXJyb3I7XG5cdH0gKTtcbn07XG5cblxuXG5cbi8vIFRoZSBkZWZlcnJlZCB1c2VkIG9uIERPTSByZWFkeVxudmFyIHJlYWR5TGlzdCA9IGpRdWVyeS5EZWZlcnJlZCgpO1xuXG5qUXVlcnkuZm4ucmVhZHkgPSBmdW5jdGlvbiggZm4gKSB7XG5cblx0cmVhZHlMaXN0XG5cdFx0LnRoZW4oIGZuIClcblxuXHRcdC8vIFdyYXAgalF1ZXJ5LnJlYWR5RXhjZXB0aW9uIGluIGEgZnVuY3Rpb24gc28gdGhhdCB0aGUgbG9va3VwXG5cdFx0Ly8gaGFwcGVucyBhdCB0aGUgdGltZSBvZiBlcnJvciBoYW5kbGluZyBpbnN0ZWFkIG9mIGNhbGxiYWNrXG5cdFx0Ly8gcmVnaXN0cmF0aW9uLlxuXHRcdC5jYXRjaCggZnVuY3Rpb24oIGVycm9yICkge1xuXHRcdFx0alF1ZXJ5LnJlYWR5RXhjZXB0aW9uKCBlcnJvciApO1xuXHRcdH0gKTtcblxuXHRyZXR1cm4gdGhpcztcbn07XG5cbmpRdWVyeS5leHRlbmQoIHtcblxuXHQvLyBJcyB0aGUgRE9NIHJlYWR5IHRvIGJlIHVzZWQ/IFNldCB0byB0cnVlIG9uY2UgaXQgb2NjdXJzLlxuXHRpc1JlYWR5OiBmYWxzZSxcblxuXHQvLyBBIGNvdW50ZXIgdG8gdHJhY2sgaG93IG1hbnkgaXRlbXMgdG8gd2FpdCBmb3IgYmVmb3JlXG5cdC8vIHRoZSByZWFkeSBldmVudCBmaXJlcy4gU2VlICM2NzgxXG5cdHJlYWR5V2FpdDogMSxcblxuXHQvLyBIYW5kbGUgd2hlbiB0aGUgRE9NIGlzIHJlYWR5XG5cdHJlYWR5OiBmdW5jdGlvbiggd2FpdCApIHtcblxuXHRcdC8vIEFib3J0IGlmIHRoZXJlIGFyZSBwZW5kaW5nIGhvbGRzIG9yIHdlJ3JlIGFscmVhZHkgcmVhZHlcblx0XHRpZiAoIHdhaXQgPT09IHRydWUgPyAtLWpRdWVyeS5yZWFkeVdhaXQgOiBqUXVlcnkuaXNSZWFkeSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBSZW1lbWJlciB0aGF0IHRoZSBET00gaXMgcmVhZHlcblx0XHRqUXVlcnkuaXNSZWFkeSA9IHRydWU7XG5cblx0XHQvLyBJZiBhIG5vcm1hbCBET00gUmVhZHkgZXZlbnQgZmlyZWQsIGRlY3JlbWVudCwgYW5kIHdhaXQgaWYgbmVlZCBiZVxuXHRcdGlmICggd2FpdCAhPT0gdHJ1ZSAmJiAtLWpRdWVyeS5yZWFkeVdhaXQgPiAwICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIElmIHRoZXJlIGFyZSBmdW5jdGlvbnMgYm91bmQsIHRvIGV4ZWN1dGVcblx0XHRyZWFkeUxpc3QucmVzb2x2ZVdpdGgoIGRvY3VtZW50LCBbIGpRdWVyeSBdICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LnJlYWR5LnRoZW4gPSByZWFkeUxpc3QudGhlbjtcblxuLy8gVGhlIHJlYWR5IGV2ZW50IGhhbmRsZXIgYW5kIHNlbGYgY2xlYW51cCBtZXRob2RcbmZ1bmN0aW9uIGNvbXBsZXRlZCgpIHtcblx0ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggXCJET01Db250ZW50TG9hZGVkXCIsIGNvbXBsZXRlZCApO1xuXHR3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lciggXCJsb2FkXCIsIGNvbXBsZXRlZCApO1xuXHRqUXVlcnkucmVhZHkoKTtcbn1cblxuLy8gQ2F0Y2ggY2FzZXMgd2hlcmUgJChkb2N1bWVudCkucmVhZHkoKSBpcyBjYWxsZWRcbi8vIGFmdGVyIHRoZSBicm93c2VyIGV2ZW50IGhhcyBhbHJlYWR5IG9jY3VycmVkLlxuLy8gU3VwcG9ydDogSUUgPD05IC0gMTAgb25seVxuLy8gT2xkZXIgSUUgc29tZXRpbWVzIHNpZ25hbHMgXCJpbnRlcmFjdGl2ZVwiIHRvbyBzb29uXG5pZiAoIGRvY3VtZW50LnJlYWR5U3RhdGUgPT09IFwiY29tcGxldGVcIiB8fFxuXHQoIGRvY3VtZW50LnJlYWR5U3RhdGUgIT09IFwibG9hZGluZ1wiICYmICFkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZG9TY3JvbGwgKSApIHtcblxuXHQvLyBIYW5kbGUgaXQgYXN5bmNocm9ub3VzbHkgdG8gYWxsb3cgc2NyaXB0cyB0aGUgb3Bwb3J0dW5pdHkgdG8gZGVsYXkgcmVhZHlcblx0d2luZG93LnNldFRpbWVvdXQoIGpRdWVyeS5yZWFkeSApO1xuXG59IGVsc2Uge1xuXG5cdC8vIFVzZSB0aGUgaGFuZHkgZXZlbnQgY2FsbGJhY2tcblx0ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lciggXCJET01Db250ZW50TG9hZGVkXCIsIGNvbXBsZXRlZCApO1xuXG5cdC8vIEEgZmFsbGJhY2sgdG8gd2luZG93Lm9ubG9hZCwgdGhhdCB3aWxsIGFsd2F5cyB3b3JrXG5cdHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCBcImxvYWRcIiwgY29tcGxldGVkICk7XG59XG5cblxuXG5cbi8vIE11bHRpZnVuY3Rpb25hbCBtZXRob2QgdG8gZ2V0IGFuZCBzZXQgdmFsdWVzIG9mIGEgY29sbGVjdGlvblxuLy8gVGhlIHZhbHVlL3MgY2FuIG9wdGlvbmFsbHkgYmUgZXhlY3V0ZWQgaWYgaXQncyBhIGZ1bmN0aW9uXG52YXIgYWNjZXNzID0gZnVuY3Rpb24oIGVsZW1zLCBmbiwga2V5LCB2YWx1ZSwgY2hhaW5hYmxlLCBlbXB0eUdldCwgcmF3ICkge1xuXHR2YXIgaSA9IDAsXG5cdFx0bGVuID0gZWxlbXMubGVuZ3RoLFxuXHRcdGJ1bGsgPSBrZXkgPT0gbnVsbDtcblxuXHQvLyBTZXRzIG1hbnkgdmFsdWVzXG5cdGlmICggdG9UeXBlKCBrZXkgKSA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRjaGFpbmFibGUgPSB0cnVlO1xuXHRcdGZvciAoIGkgaW4ga2V5ICkge1xuXHRcdFx0YWNjZXNzKCBlbGVtcywgZm4sIGksIGtleVsgaSBdLCB0cnVlLCBlbXB0eUdldCwgcmF3ICk7XG5cdFx0fVxuXG5cdC8vIFNldHMgb25lIHZhbHVlXG5cdH0gZWxzZSBpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0Y2hhaW5hYmxlID0gdHJ1ZTtcblxuXHRcdGlmICggIWlzRnVuY3Rpb24oIHZhbHVlICkgKSB7XG5cdFx0XHRyYXcgPSB0cnVlO1xuXHRcdH1cblxuXHRcdGlmICggYnVsayApIHtcblxuXHRcdFx0Ly8gQnVsayBvcGVyYXRpb25zIHJ1biBhZ2FpbnN0IHRoZSBlbnRpcmUgc2V0XG5cdFx0XHRpZiAoIHJhdyApIHtcblx0XHRcdFx0Zm4uY2FsbCggZWxlbXMsIHZhbHVlICk7XG5cdFx0XHRcdGZuID0gbnVsbDtcblxuXHRcdFx0Ly8gLi4uZXhjZXB0IHdoZW4gZXhlY3V0aW5nIGZ1bmN0aW9uIHZhbHVlc1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0YnVsayA9IGZuO1xuXHRcdFx0XHRmbiA9IGZ1bmN0aW9uKCBlbGVtLCBfa2V5LCB2YWx1ZSApIHtcblx0XHRcdFx0XHRyZXR1cm4gYnVsay5jYWxsKCBqUXVlcnkoIGVsZW0gKSwgdmFsdWUgKTtcblx0XHRcdFx0fTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRpZiAoIGZuICkge1xuXHRcdFx0Zm9yICggOyBpIDwgbGVuOyBpKysgKSB7XG5cdFx0XHRcdGZuKFxuXHRcdFx0XHRcdGVsZW1zWyBpIF0sIGtleSwgcmF3ID9cblx0XHRcdFx0XHRcdHZhbHVlIDpcblx0XHRcdFx0XHRcdHZhbHVlLmNhbGwoIGVsZW1zWyBpIF0sIGksIGZuKCBlbGVtc1sgaSBdLCBrZXkgKSApXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0aWYgKCBjaGFpbmFibGUgKSB7XG5cdFx0cmV0dXJuIGVsZW1zO1xuXHR9XG5cblx0Ly8gR2V0c1xuXHRpZiAoIGJ1bGsgKSB7XG5cdFx0cmV0dXJuIGZuLmNhbGwoIGVsZW1zICk7XG5cdH1cblxuXHRyZXR1cm4gbGVuID8gZm4oIGVsZW1zWyAwIF0sIGtleSApIDogZW1wdHlHZXQ7XG59O1xuXG5cbi8vIE1hdGNoZXMgZGFzaGVkIHN0cmluZyBmb3IgY2FtZWxpemluZ1xudmFyIHJtc1ByZWZpeCA9IC9eLW1zLS8sXG5cdHJkYXNoQWxwaGEgPSAvLShbYS16XSkvZztcblxuLy8gVXNlZCBieSBjYW1lbENhc2UgYXMgY2FsbGJhY2sgdG8gcmVwbGFjZSgpXG5mdW5jdGlvbiBmY2FtZWxDYXNlKCBfYWxsLCBsZXR0ZXIgKSB7XG5cdHJldHVybiBsZXR0ZXIudG9VcHBlckNhc2UoKTtcbn1cblxuLy8gQ29udmVydCBkYXNoZWQgdG8gY2FtZWxDYXNlOyB1c2VkIGJ5IHRoZSBjc3MgYW5kIGRhdGEgbW9kdWxlc1xuLy8gU3VwcG9ydDogSUUgPD05IC0gMTEsIEVkZ2UgMTIgLSAxNVxuLy8gTWljcm9zb2Z0IGZvcmdvdCB0byBodW1wIHRoZWlyIHZlbmRvciBwcmVmaXggKCM5NTcyKVxuZnVuY3Rpb24gY2FtZWxDYXNlKCBzdHJpbmcgKSB7XG5cdHJldHVybiBzdHJpbmcucmVwbGFjZSggcm1zUHJlZml4LCBcIm1zLVwiICkucmVwbGFjZSggcmRhc2hBbHBoYSwgZmNhbWVsQ2FzZSApO1xufVxudmFyIGFjY2VwdERhdGEgPSBmdW5jdGlvbiggb3duZXIgKSB7XG5cblx0Ly8gQWNjZXB0cyBvbmx5OlxuXHQvLyAgLSBOb2RlXG5cdC8vICAgIC0gTm9kZS5FTEVNRU5UX05PREVcblx0Ly8gICAgLSBOb2RlLkRPQ1VNRU5UX05PREVcblx0Ly8gIC0gT2JqZWN0XG5cdC8vICAgIC0gQW55XG5cdHJldHVybiBvd25lci5ub2RlVHlwZSA9PT0gMSB8fCBvd25lci5ub2RlVHlwZSA9PT0gOSB8fCAhKCArb3duZXIubm9kZVR5cGUgKTtcbn07XG5cblxuXG5cbmZ1bmN0aW9uIERhdGEoKSB7XG5cdHRoaXMuZXhwYW5kbyA9IGpRdWVyeS5leHBhbmRvICsgRGF0YS51aWQrKztcbn1cblxuRGF0YS51aWQgPSAxO1xuXG5EYXRhLnByb3RvdHlwZSA9IHtcblxuXHRjYWNoZTogZnVuY3Rpb24oIG93bmVyICkge1xuXG5cdFx0Ly8gQ2hlY2sgaWYgdGhlIG93bmVyIG9iamVjdCBhbHJlYWR5IGhhcyBhIGNhY2hlXG5cdFx0dmFyIHZhbHVlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXG5cdFx0Ly8gSWYgbm90LCBjcmVhdGUgb25lXG5cdFx0aWYgKCAhdmFsdWUgKSB7XG5cdFx0XHR2YWx1ZSA9IHt9O1xuXG5cdFx0XHQvLyBXZSBjYW4gYWNjZXB0IGRhdGEgZm9yIG5vbi1lbGVtZW50IG5vZGVzIGluIG1vZGVybiBicm93c2Vycyxcblx0XHRcdC8vIGJ1dCB3ZSBzaG91bGQgbm90LCBzZWUgIzgzMzUuXG5cdFx0XHQvLyBBbHdheXMgcmV0dXJuIGFuIGVtcHR5IG9iamVjdC5cblx0XHRcdGlmICggYWNjZXB0RGF0YSggb3duZXIgKSApIHtcblxuXHRcdFx0XHQvLyBJZiBpdCBpcyBhIG5vZGUgdW5saWtlbHkgdG8gYmUgc3RyaW5naWZ5LWVkIG9yIGxvb3BlZCBvdmVyXG5cdFx0XHRcdC8vIHVzZSBwbGFpbiBhc3NpZ25tZW50XG5cdFx0XHRcdGlmICggb3duZXIubm9kZVR5cGUgKSB7XG5cdFx0XHRcdFx0b3duZXJbIHRoaXMuZXhwYW5kbyBdID0gdmFsdWU7XG5cblx0XHRcdFx0Ly8gT3RoZXJ3aXNlIHNlY3VyZSBpdCBpbiBhIG5vbi1lbnVtZXJhYmxlIHByb3BlcnR5XG5cdFx0XHRcdC8vIGNvbmZpZ3VyYWJsZSBtdXN0IGJlIHRydWUgdG8gYWxsb3cgdGhlIHByb3BlcnR5IHRvIGJlXG5cdFx0XHRcdC8vIGRlbGV0ZWQgd2hlbiBkYXRhIGlzIHJlbW92ZWRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIG93bmVyLCB0aGlzLmV4cGFuZG8sIHtcblx0XHRcdFx0XHRcdHZhbHVlOiB2YWx1ZSxcblx0XHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZVxuXHRcdFx0XHRcdH0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB2YWx1ZTtcblx0fSxcblx0c2V0OiBmdW5jdGlvbiggb3duZXIsIGRhdGEsIHZhbHVlICkge1xuXHRcdHZhciBwcm9wLFxuXHRcdFx0Y2FjaGUgPSB0aGlzLmNhY2hlKCBvd25lciApO1xuXG5cdFx0Ly8gSGFuZGxlOiBbIG93bmVyLCBrZXksIHZhbHVlIF0gYXJnc1xuXHRcdC8vIEFsd2F5cyB1c2UgY2FtZWxDYXNlIGtleSAoZ2gtMjI1Nylcblx0XHRpZiAoIHR5cGVvZiBkYXRhID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0Y2FjaGVbIGNhbWVsQ2FzZSggZGF0YSApIF0gPSB2YWx1ZTtcblxuXHRcdC8vIEhhbmRsZTogWyBvd25lciwgeyBwcm9wZXJ0aWVzIH0gXSBhcmdzXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gQ29weSB0aGUgcHJvcGVydGllcyBvbmUtYnktb25lIHRvIHRoZSBjYWNoZSBvYmplY3Rcblx0XHRcdGZvciAoIHByb3AgaW4gZGF0YSApIHtcblx0XHRcdFx0Y2FjaGVbIGNhbWVsQ2FzZSggcHJvcCApIF0gPSBkYXRhWyBwcm9wIF07XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiBjYWNoZTtcblx0fSxcblx0Z2V0OiBmdW5jdGlvbiggb3duZXIsIGtleSApIHtcblx0XHRyZXR1cm4ga2V5ID09PSB1bmRlZmluZWQgP1xuXHRcdFx0dGhpcy5jYWNoZSggb3duZXIgKSA6XG5cblx0XHRcdC8vIEFsd2F5cyB1c2UgY2FtZWxDYXNlIGtleSAoZ2gtMjI1Nylcblx0XHRcdG93bmVyWyB0aGlzLmV4cGFuZG8gXSAmJiBvd25lclsgdGhpcy5leHBhbmRvIF1bIGNhbWVsQ2FzZSgga2V5ICkgXTtcblx0fSxcblx0YWNjZXNzOiBmdW5jdGlvbiggb3duZXIsIGtleSwgdmFsdWUgKSB7XG5cblx0XHQvLyBJbiBjYXNlcyB3aGVyZSBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIE5vIGtleSB3YXMgc3BlY2lmaWVkXG5cdFx0Ly8gICAyLiBBIHN0cmluZyBrZXkgd2FzIHNwZWNpZmllZCwgYnV0IG5vIHZhbHVlIHByb3ZpZGVkXG5cdFx0Ly9cblx0XHQvLyBUYWtlIHRoZSBcInJlYWRcIiBwYXRoIGFuZCBhbGxvdyB0aGUgZ2V0IG1ldGhvZCB0byBkZXRlcm1pbmVcblx0XHQvLyB3aGljaCB2YWx1ZSB0byByZXR1cm4sIHJlc3BlY3RpdmVseSBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIFRoZSBlbnRpcmUgY2FjaGUgb2JqZWN0XG5cdFx0Ly8gICAyLiBUaGUgZGF0YSBzdG9yZWQgYXQgdGhlIGtleVxuXHRcdC8vXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCB8fFxuXHRcdFx0XHQoICgga2V5ICYmIHR5cGVvZiBrZXkgPT09IFwic3RyaW5nXCIgKSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICkgKSB7XG5cblx0XHRcdHJldHVybiB0aGlzLmdldCggb3duZXIsIGtleSApO1xuXHRcdH1cblxuXHRcdC8vIFdoZW4gdGhlIGtleSBpcyBub3QgYSBzdHJpbmcsIG9yIGJvdGggYSBrZXkgYW5kIHZhbHVlXG5cdFx0Ly8gYXJlIHNwZWNpZmllZCwgc2V0IG9yIGV4dGVuZCAoZXhpc3Rpbmcgb2JqZWN0cykgd2l0aCBlaXRoZXI6XG5cdFx0Ly9cblx0XHQvLyAgIDEuIEFuIG9iamVjdCBvZiBwcm9wZXJ0aWVzXG5cdFx0Ly8gICAyLiBBIGtleSBhbmQgdmFsdWVcblx0XHQvL1xuXHRcdHRoaXMuc2V0KCBvd25lciwga2V5LCB2YWx1ZSApO1xuXG5cdFx0Ly8gU2luY2UgdGhlIFwic2V0XCIgcGF0aCBjYW4gaGF2ZSB0d28gcG9zc2libGUgZW50cnkgcG9pbnRzXG5cdFx0Ly8gcmV0dXJuIHRoZSBleHBlY3RlZCBkYXRhIGJhc2VkIG9uIHdoaWNoIHBhdGggd2FzIHRha2VuWypdXG5cdFx0cmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgPyB2YWx1ZSA6IGtleTtcblx0fSxcblx0cmVtb3ZlOiBmdW5jdGlvbiggb3duZXIsIGtleSApIHtcblx0XHR2YXIgaSxcblx0XHRcdGNhY2hlID0gb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXG5cdFx0aWYgKCBjYWNoZSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdGlmICgga2V5ICE9PSB1bmRlZmluZWQgKSB7XG5cblx0XHRcdC8vIFN1cHBvcnQgYXJyYXkgb3Igc3BhY2Ugc2VwYXJhdGVkIHN0cmluZyBvZiBrZXlzXG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIGtleSApICkge1xuXG5cdFx0XHRcdC8vIElmIGtleSBpcyBhbiBhcnJheSBvZiBrZXlzLi4uXG5cdFx0XHRcdC8vIFdlIGFsd2F5cyBzZXQgY2FtZWxDYXNlIGtleXMsIHNvIHJlbW92ZSB0aGF0LlxuXHRcdFx0XHRrZXkgPSBrZXkubWFwKCBjYW1lbENhc2UgKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGtleSA9IGNhbWVsQ2FzZSgga2V5ICk7XG5cblx0XHRcdFx0Ly8gSWYgYSBrZXkgd2l0aCB0aGUgc3BhY2VzIGV4aXN0cywgdXNlIGl0LlxuXHRcdFx0XHQvLyBPdGhlcndpc2UsIGNyZWF0ZSBhbiBhcnJheSBieSBtYXRjaGluZyBub24td2hpdGVzcGFjZVxuXHRcdFx0XHRrZXkgPSBrZXkgaW4gY2FjaGUgP1xuXHRcdFx0XHRcdFsga2V5IF0gOlxuXHRcdFx0XHRcdCgga2V5Lm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW10gKTtcblx0XHRcdH1cblxuXHRcdFx0aSA9IGtleS5sZW5ndGg7XG5cblx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRkZWxldGUgY2FjaGVbIGtleVsgaSBdIF07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUmVtb3ZlIHRoZSBleHBhbmRvIGlmIHRoZXJlJ3Mgbm8gbW9yZSBkYXRhXG5cdFx0aWYgKCBrZXkgPT09IHVuZGVmaW5lZCB8fCBqUXVlcnkuaXNFbXB0eU9iamVjdCggY2FjaGUgKSApIHtcblxuXHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDw9MzUgLSA0NVxuXHRcdFx0Ly8gV2Via2l0ICYgQmxpbmsgcGVyZm9ybWFuY2Ugc3VmZmVycyB3aGVuIGRlbGV0aW5nIHByb3BlcnRpZXNcblx0XHRcdC8vIGZyb20gRE9NIG5vZGVzLCBzbyBzZXQgdG8gdW5kZWZpbmVkIGluc3RlYWRcblx0XHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC9jaHJvbWl1bS9pc3N1ZXMvZGV0YWlsP2lkPTM3ODYwNyAoYnVnIHJlc3RyaWN0ZWQpXG5cdFx0XHRpZiAoIG93bmVyLm5vZGVUeXBlICkge1xuXHRcdFx0XHRvd25lclsgdGhpcy5leHBhbmRvIF0gPSB1bmRlZmluZWQ7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRkZWxldGUgb3duZXJbIHRoaXMuZXhwYW5kbyBdO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblx0aGFzRGF0YTogZnVuY3Rpb24oIG93bmVyICkge1xuXHRcdHZhciBjYWNoZSA9IG93bmVyWyB0aGlzLmV4cGFuZG8gXTtcblx0XHRyZXR1cm4gY2FjaGUgIT09IHVuZGVmaW5lZCAmJiAhalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGNhY2hlICk7XG5cdH1cbn07XG52YXIgZGF0YVByaXYgPSBuZXcgRGF0YSgpO1xuXG52YXIgZGF0YVVzZXIgPSBuZXcgRGF0YSgpO1xuXG5cblxuLy9cdEltcGxlbWVudGF0aW9uIFN1bW1hcnlcbi8vXG4vL1x0MS4gRW5mb3JjZSBBUEkgc3VyZmFjZSBhbmQgc2VtYW50aWMgY29tcGF0aWJpbGl0eSB3aXRoIDEuOS54IGJyYW5jaFxuLy9cdDIuIEltcHJvdmUgdGhlIG1vZHVsZSdzIG1haW50YWluYWJpbGl0eSBieSByZWR1Y2luZyB0aGUgc3RvcmFnZVxuLy9cdFx0cGF0aHMgdG8gYSBzaW5nbGUgbWVjaGFuaXNtLlxuLy9cdDMuIFVzZSB0aGUgc2FtZSBzaW5nbGUgbWVjaGFuaXNtIHRvIHN1cHBvcnQgXCJwcml2YXRlXCIgYW5kIFwidXNlclwiIGRhdGEuXG4vL1x0NC4gX05ldmVyXyBleHBvc2UgXCJwcml2YXRlXCIgZGF0YSB0byB1c2VyIGNvZGUgKFRPRE86IERyb3AgX2RhdGEsIF9yZW1vdmVEYXRhKVxuLy9cdDUuIEF2b2lkIGV4cG9zaW5nIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb24gdXNlciBvYmplY3RzIChlZy4gZXhwYW5kbyBwcm9wZXJ0aWVzKVxuLy9cdDYuIFByb3ZpZGUgYSBjbGVhciBwYXRoIGZvciBpbXBsZW1lbnRhdGlvbiB1cGdyYWRlIHRvIFdlYWtNYXAgaW4gMjAxNFxuXG52YXIgcmJyYWNlID0gL14oPzpcXHtbXFx3XFxXXSpcXH18XFxbW1xcd1xcV10qXFxdKSQvLFxuXHRybXVsdGlEYXNoID0gL1tBLVpdL2c7XG5cbmZ1bmN0aW9uIGdldERhdGEoIGRhdGEgKSB7XG5cdGlmICggZGF0YSA9PT0gXCJ0cnVlXCIgKSB7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblxuXHRpZiAoIGRhdGEgPT09IFwiZmFsc2VcIiApIHtcblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblxuXHRpZiAoIGRhdGEgPT09IFwibnVsbFwiICkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cblx0Ly8gT25seSBjb252ZXJ0IHRvIGEgbnVtYmVyIGlmIGl0IGRvZXNuJ3QgY2hhbmdlIHRoZSBzdHJpbmdcblx0aWYgKCBkYXRhID09PSArZGF0YSArIFwiXCIgKSB7XG5cdFx0cmV0dXJuICtkYXRhO1xuXHR9XG5cblx0aWYgKCByYnJhY2UudGVzdCggZGF0YSApICkge1xuXHRcdHJldHVybiBKU09OLnBhcnNlKCBkYXRhICk7XG5cdH1cblxuXHRyZXR1cm4gZGF0YTtcbn1cblxuZnVuY3Rpb24gZGF0YUF0dHIoIGVsZW0sIGtleSwgZGF0YSApIHtcblx0dmFyIG5hbWU7XG5cblx0Ly8gSWYgbm90aGluZyB3YXMgZm91bmQgaW50ZXJuYWxseSwgdHJ5IHRvIGZldGNoIGFueVxuXHQvLyBkYXRhIGZyb20gdGhlIEhUTUw1IGRhdGEtKiBhdHRyaWJ1dGVcblx0aWYgKCBkYXRhID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRuYW1lID0gXCJkYXRhLVwiICsga2V5LnJlcGxhY2UoIHJtdWx0aURhc2gsIFwiLSQmXCIgKS50b0xvd2VyQ2FzZSgpO1xuXHRcdGRhdGEgPSBlbGVtLmdldEF0dHJpYnV0ZSggbmFtZSApO1xuXG5cdFx0aWYgKCB0eXBlb2YgZGF0YSA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdGRhdGEgPSBnZXREYXRhKCBkYXRhICk7XG5cdFx0XHR9IGNhdGNoICggZSApIHt9XG5cblx0XHRcdC8vIE1ha2Ugc3VyZSB3ZSBzZXQgdGhlIGRhdGEgc28gaXQgaXNuJ3QgY2hhbmdlZCBsYXRlclxuXHRcdFx0ZGF0YVVzZXIuc2V0KCBlbGVtLCBrZXksIGRhdGEgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGF0YSA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdH1cblx0cmV0dXJuIGRhdGE7XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0aGFzRGF0YTogZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0cmV0dXJuIGRhdGFVc2VyLmhhc0RhdGEoIGVsZW0gKSB8fCBkYXRhUHJpdi5oYXNEYXRhKCBlbGVtICk7XG5cdH0sXG5cblx0ZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIGRhdGFVc2VyLmFjY2VzcyggZWxlbSwgbmFtZSwgZGF0YSApO1xuXHR9LFxuXG5cdHJlbW92ZURhdGE6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lICkge1xuXHRcdGRhdGFVc2VyLnJlbW92ZSggZWxlbSwgbmFtZSApO1xuXHR9LFxuXG5cdC8vIFRPRE86IE5vdyB0aGF0IGFsbCBjYWxscyB0byBfZGF0YSBhbmQgX3JlbW92ZURhdGEgaGF2ZSBiZWVuIHJlcGxhY2VkXG5cdC8vIHdpdGggZGlyZWN0IGNhbGxzIHRvIGRhdGFQcml2IG1ldGhvZHMsIHRoZXNlIGNhbiBiZSBkZXByZWNhdGVkLlxuXHRfZGF0YTogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGRhdGEgKSB7XG5cdFx0cmV0dXJuIGRhdGFQcml2LmFjY2VzcyggZWxlbSwgbmFtZSwgZGF0YSApO1xuXHR9LFxuXG5cdF9yZW1vdmVEYXRhOiBmdW5jdGlvbiggZWxlbSwgbmFtZSApIHtcblx0XHRkYXRhUHJpdi5yZW1vdmUoIGVsZW0sIG5hbWUgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGRhdGE6IGZ1bmN0aW9uKCBrZXksIHZhbHVlICkge1xuXHRcdHZhciBpLCBuYW1lLCBkYXRhLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXSxcblx0XHRcdGF0dHJzID0gZWxlbSAmJiBlbGVtLmF0dHJpYnV0ZXM7XG5cblx0XHQvLyBHZXRzIGFsbCB2YWx1ZXNcblx0XHRpZiAoIGtleSA9PT0gdW5kZWZpbmVkICkge1xuXHRcdFx0aWYgKCB0aGlzLmxlbmd0aCApIHtcblx0XHRcdFx0ZGF0YSA9IGRhdGFVc2VyLmdldCggZWxlbSApO1xuXG5cdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSAmJiAhZGF0YVByaXYuZ2V0KCBlbGVtLCBcImhhc0RhdGFBdHRyc1wiICkgKSB7XG5cdFx0XHRcdFx0aSA9IGF0dHJzLmxlbmd0aDtcblx0XHRcdFx0XHR3aGlsZSAoIGktLSApIHtcblxuXHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgMTEgb25seVxuXHRcdFx0XHRcdFx0Ly8gVGhlIGF0dHJzIGVsZW1lbnRzIGNhbiBiZSBudWxsICgjMTQ4OTQpXG5cdFx0XHRcdFx0XHRpZiAoIGF0dHJzWyBpIF0gKSB7XG5cdFx0XHRcdFx0XHRcdG5hbWUgPSBhdHRyc1sgaSBdLm5hbWU7XG5cdFx0XHRcdFx0XHRcdGlmICggbmFtZS5pbmRleE9mKCBcImRhdGEtXCIgKSA9PT0gMCApIHtcblx0XHRcdFx0XHRcdFx0XHRuYW1lID0gY2FtZWxDYXNlKCBuYW1lLnNsaWNlKCA1ICkgKTtcblx0XHRcdFx0XHRcdFx0XHRkYXRhQXR0ciggZWxlbSwgbmFtZSwgZGF0YVsgbmFtZSBdICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCBlbGVtLCBcImhhc0RhdGFBdHRyc1wiLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIGRhdGE7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0cyBtdWx0aXBsZSB2YWx1ZXNcblx0XHRpZiAoIHR5cGVvZiBrZXkgPT09IFwib2JqZWN0XCIgKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGF0YVVzZXIuc2V0KCB0aGlzLCBrZXkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHR2YXIgZGF0YTtcblxuXHRcdFx0Ly8gVGhlIGNhbGxpbmcgalF1ZXJ5IG9iamVjdCAoZWxlbWVudCBtYXRjaGVzKSBpcyBub3QgZW1wdHlcblx0XHRcdC8vIChhbmQgdGhlcmVmb3JlIGhhcyBhbiBlbGVtZW50IGFwcGVhcnMgYXQgdGhpc1sgMCBdKSBhbmQgdGhlXG5cdFx0XHQvLyBgdmFsdWVgIHBhcmFtZXRlciB3YXMgbm90IHVuZGVmaW5lZC4gQW4gZW1wdHkgalF1ZXJ5IG9iamVjdFxuXHRcdFx0Ly8gd2lsbCByZXN1bHQgaW4gYHVuZGVmaW5lZGAgZm9yIGVsZW0gPSB0aGlzWyAwIF0gd2hpY2ggd2lsbFxuXHRcdFx0Ly8gdGhyb3cgYW4gZXhjZXB0aW9uIGlmIGFuIGF0dGVtcHQgdG8gcmVhZCBhIGRhdGEgY2FjaGUgaXMgbWFkZS5cblx0XHRcdGlmICggZWxlbSAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdC8vIEF0dGVtcHQgdG8gZ2V0IGRhdGEgZnJvbSB0aGUgY2FjaGVcblx0XHRcdFx0Ly8gVGhlIGtleSB3aWxsIGFsd2F5cyBiZSBjYW1lbENhc2VkIGluIERhdGFcblx0XHRcdFx0ZGF0YSA9IGRhdGFVc2VyLmdldCggZWxlbSwga2V5ICk7XG5cdFx0XHRcdGlmICggZGF0YSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdHJldHVybiBkYXRhO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQXR0ZW1wdCB0byBcImRpc2NvdmVyXCIgdGhlIGRhdGEgaW5cblx0XHRcdFx0Ly8gSFRNTDUgY3VzdG9tIGRhdGEtKiBhdHRyc1xuXHRcdFx0XHRkYXRhID0gZGF0YUF0dHIoIGVsZW0sIGtleSApO1xuXHRcdFx0XHRpZiAoIGRhdGEgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0XHRyZXR1cm4gZGF0YTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFdlIHRyaWVkIHJlYWxseSBoYXJkLCBidXQgdGhlIGRhdGEgZG9lc24ndCBleGlzdC5cblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZXQgdGhlIGRhdGEuLi5cblx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0Ly8gV2UgYWx3YXlzIHN0b3JlIHRoZSBjYW1lbENhc2VkIGtleVxuXHRcdFx0XHRkYXRhVXNlci5zZXQoIHRoaXMsIGtleSwgdmFsdWUgKTtcblx0XHRcdH0gKTtcblx0XHR9LCBudWxsLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEsIG51bGwsIHRydWUgKTtcblx0fSxcblxuXHRyZW1vdmVEYXRhOiBmdW5jdGlvbigga2V5ICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0ZGF0YVVzZXIucmVtb3ZlKCB0aGlzLCBrZXkgKTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuZXh0ZW5kKCB7XG5cdHF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgcXVldWU7XG5cblx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHR0eXBlID0gKCB0eXBlIHx8IFwiZnhcIiApICsgXCJxdWV1ZVwiO1xuXHRcdFx0cXVldWUgPSBkYXRhUHJpdi5nZXQoIGVsZW0sIHR5cGUgKTtcblxuXHRcdFx0Ly8gU3BlZWQgdXAgZGVxdWV1ZSBieSBnZXR0aW5nIG91dCBxdWlja2x5IGlmIHRoaXMgaXMganVzdCBhIGxvb2t1cFxuXHRcdFx0aWYgKCBkYXRhICkge1xuXHRcdFx0XHRpZiAoICFxdWV1ZSB8fCBBcnJheS5pc0FycmF5KCBkYXRhICkgKSB7XG5cdFx0XHRcdFx0cXVldWUgPSBkYXRhUHJpdi5hY2Nlc3MoIGVsZW0sIHR5cGUsIGpRdWVyeS5tYWtlQXJyYXkoIGRhdGEgKSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHF1ZXVlLnB1c2goIGRhdGEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHF1ZXVlIHx8IFtdO1xuXHRcdH1cblx0fSxcblxuXHRkZXF1ZXVlOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHtcblx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cblx0XHR2YXIgcXVldWUgPSBqUXVlcnkucXVldWUoIGVsZW0sIHR5cGUgKSxcblx0XHRcdHN0YXJ0TGVuZ3RoID0gcXVldWUubGVuZ3RoLFxuXHRcdFx0Zm4gPSBxdWV1ZS5zaGlmdCgpLFxuXHRcdFx0aG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sIHR5cGUgKSxcblx0XHRcdG5leHQgPSBmdW5jdGlvbigpIHtcblx0XHRcdFx0alF1ZXJ5LmRlcXVldWUoIGVsZW0sIHR5cGUgKTtcblx0XHRcdH07XG5cblx0XHQvLyBJZiB0aGUgZnggcXVldWUgaXMgZGVxdWV1ZWQsIGFsd2F5cyByZW1vdmUgdGhlIHByb2dyZXNzIHNlbnRpbmVsXG5cdFx0aWYgKCBmbiA9PT0gXCJpbnByb2dyZXNzXCIgKSB7XG5cdFx0XHRmbiA9IHF1ZXVlLnNoaWZ0KCk7XG5cdFx0XHRzdGFydExlbmd0aC0tO1xuXHRcdH1cblxuXHRcdGlmICggZm4gKSB7XG5cblx0XHRcdC8vIEFkZCBhIHByb2dyZXNzIHNlbnRpbmVsIHRvIHByZXZlbnQgdGhlIGZ4IHF1ZXVlIGZyb20gYmVpbmdcblx0XHRcdC8vIGF1dG9tYXRpY2FsbHkgZGVxdWV1ZWRcblx0XHRcdGlmICggdHlwZSA9PT0gXCJmeFwiICkge1xuXHRcdFx0XHRxdWV1ZS51bnNoaWZ0KCBcImlucHJvZ3Jlc3NcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBDbGVhciB1cCB0aGUgbGFzdCBxdWV1ZSBzdG9wIGZ1bmN0aW9uXG5cdFx0XHRkZWxldGUgaG9va3Muc3RvcDtcblx0XHRcdGZuLmNhbGwoIGVsZW0sIG5leHQsIGhvb2tzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhc3RhcnRMZW5ndGggJiYgaG9va3MgKSB7XG5cdFx0XHRob29rcy5lbXB0eS5maXJlKCk7XG5cdFx0fVxuXHR9LFxuXG5cdC8vIE5vdCBwdWJsaWMgLSBnZW5lcmF0ZSBhIHF1ZXVlSG9va3Mgb2JqZWN0LCBvciByZXR1cm4gdGhlIGN1cnJlbnQgb25lXG5cdF9xdWV1ZUhvb2tzOiBmdW5jdGlvbiggZWxlbSwgdHlwZSApIHtcblx0XHR2YXIga2V5ID0gdHlwZSArIFwicXVldWVIb29rc1wiO1xuXHRcdHJldHVybiBkYXRhUHJpdi5nZXQoIGVsZW0sIGtleSApIHx8IGRhdGFQcml2LmFjY2VzcyggZWxlbSwga2V5LCB7XG5cdFx0XHRlbXB0eTogalF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICkuYWRkKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBbIHR5cGUgKyBcInF1ZXVlXCIsIGtleSBdICk7XG5cdFx0XHR9IClcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRxdWV1ZTogZnVuY3Rpb24oIHR5cGUsIGRhdGEgKSB7XG5cdFx0dmFyIHNldHRlciA9IDI7XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0ZGF0YSA9IHR5cGU7XG5cdFx0XHR0eXBlID0gXCJmeFwiO1xuXHRcdFx0c2V0dGVyLS07XG5cdFx0fVxuXG5cdFx0aWYgKCBhcmd1bWVudHMubGVuZ3RoIDwgc2V0dGVyICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5xdWV1ZSggdGhpc1sgMCBdLCB0eXBlICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGRhdGEgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHR0aGlzIDpcblx0XHRcdHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBxdWV1ZSA9IGpRdWVyeS5xdWV1ZSggdGhpcywgdHlwZSwgZGF0YSApO1xuXG5cdFx0XHRcdC8vIEVuc3VyZSBhIGhvb2tzIGZvciB0aGlzIHF1ZXVlXG5cdFx0XHRcdGpRdWVyeS5fcXVldWVIb29rcyggdGhpcywgdHlwZSApO1xuXG5cdFx0XHRcdGlmICggdHlwZSA9PT0gXCJmeFwiICYmIHF1ZXVlWyAwIF0gIT09IFwiaW5wcm9ncmVzc1wiICkge1xuXHRcdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gKTtcblx0fSxcblx0ZGVxdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgdHlwZSApO1xuXHRcdH0gKTtcblx0fSxcblx0Y2xlYXJRdWV1ZTogZnVuY3Rpb24oIHR5cGUgKSB7XG5cdFx0cmV0dXJuIHRoaXMucXVldWUoIHR5cGUgfHwgXCJmeFwiLCBbXSApO1xuXHR9LFxuXG5cdC8vIEdldCBhIHByb21pc2UgcmVzb2x2ZWQgd2hlbiBxdWV1ZXMgb2YgYSBjZXJ0YWluIHR5cGVcblx0Ly8gYXJlIGVtcHRpZWQgKGZ4IGlzIHRoZSB0eXBlIGJ5IGRlZmF1bHQpXG5cdHByb21pc2U6IGZ1bmN0aW9uKCB0eXBlLCBvYmogKSB7XG5cdFx0dmFyIHRtcCxcblx0XHRcdGNvdW50ID0gMSxcblx0XHRcdGRlZmVyID0galF1ZXJ5LkRlZmVycmVkKCksXG5cdFx0XHRlbGVtZW50cyA9IHRoaXMsXG5cdFx0XHRpID0gdGhpcy5sZW5ndGgsXG5cdFx0XHRyZXNvbHZlID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggISggLS1jb3VudCApICkge1xuXHRcdFx0XHRcdGRlZmVyLnJlc29sdmVXaXRoKCBlbGVtZW50cywgWyBlbGVtZW50cyBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRpZiAoIHR5cGVvZiB0eXBlICE9PSBcInN0cmluZ1wiICkge1xuXHRcdFx0b2JqID0gdHlwZTtcblx0XHRcdHR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0dG1wID0gZGF0YVByaXYuZ2V0KCBlbGVtZW50c1sgaSBdLCB0eXBlICsgXCJxdWV1ZUhvb2tzXCIgKTtcblx0XHRcdGlmICggdG1wICYmIHRtcC5lbXB0eSApIHtcblx0XHRcdFx0Y291bnQrKztcblx0XHRcdFx0dG1wLmVtcHR5LmFkZCggcmVzb2x2ZSApO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXNvbHZlKCk7XG5cdFx0cmV0dXJuIGRlZmVyLnByb21pc2UoIG9iaiApO1xuXHR9XG59ICk7XG52YXIgcG51bSA9ICggL1srLV0/KD86XFxkKlxcLnwpXFxkKyg/OltlRV1bKy1dP1xcZCt8KS8gKS5zb3VyY2U7XG5cbnZhciByY3NzTnVtID0gbmV3IFJlZ0V4cCggXCJeKD86KFsrLV0pPXwpKFwiICsgcG51bSArIFwiKShbYS16JV0qKSRcIiwgXCJpXCIgKTtcblxuXG52YXIgY3NzRXhwYW5kID0gWyBcIlRvcFwiLCBcIlJpZ2h0XCIsIFwiQm90dG9tXCIsIFwiTGVmdFwiIF07XG5cbnZhciBkb2N1bWVudEVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQ7XG5cblxuXG5cdHZhciBpc0F0dGFjaGVkID0gZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmNvbnRhaW5zKCBlbGVtLm93bmVyRG9jdW1lbnQsIGVsZW0gKTtcblx0XHR9LFxuXHRcdGNvbXBvc2VkID0geyBjb21wb3NlZDogdHJ1ZSB9O1xuXG5cdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSssIEVkZ2UgMTIgLSAxOCssIGlPUyAxMC4wIC0gMTAuMiBvbmx5XG5cdC8vIENoZWNrIGF0dGFjaG1lbnQgYWNyb3NzIHNoYWRvdyBET00gYm91bmRhcmllcyB3aGVuIHBvc3NpYmxlIChnaC0zNTA0KVxuXHQvLyBTdXBwb3J0OiBpT1MgMTAuMC0xMC4yIG9ubHlcblx0Ly8gRWFybHkgaU9TIDEwIHZlcnNpb25zIHN1cHBvcnQgYGF0dGFjaFNoYWRvd2AgYnV0IG5vdCBgZ2V0Um9vdE5vZGVgLFxuXHQvLyBsZWFkaW5nIHRvIGVycm9ycy4gV2UgbmVlZCB0byBjaGVjayBmb3IgYGdldFJvb3ROb2RlYC5cblx0aWYgKCBkb2N1bWVudEVsZW1lbnQuZ2V0Um9vdE5vZGUgKSB7XG5cdFx0aXNBdHRhY2hlZCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5jb250YWlucyggZWxlbS5vd25lckRvY3VtZW50LCBlbGVtICkgfHxcblx0XHRcdFx0ZWxlbS5nZXRSb290Tm9kZSggY29tcG9zZWQgKSA9PT0gZWxlbS5vd25lckRvY3VtZW50O1xuXHRcdH07XG5cdH1cbnZhciBpc0hpZGRlbldpdGhpblRyZWUgPSBmdW5jdGlvbiggZWxlbSwgZWwgKSB7XG5cblx0XHQvLyBpc0hpZGRlbldpdGhpblRyZWUgbWlnaHQgYmUgY2FsbGVkIGZyb20galF1ZXJ5I2ZpbHRlciBmdW5jdGlvbjtcblx0XHQvLyBpbiB0aGF0IGNhc2UsIGVsZW1lbnQgd2lsbCBiZSBzZWNvbmQgYXJndW1lbnRcblx0XHRlbGVtID0gZWwgfHwgZWxlbTtcblxuXHRcdC8vIElubGluZSBzdHlsZSB0cnVtcHMgYWxsXG5cdFx0cmV0dXJuIGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJub25lXCIgfHxcblx0XHRcdGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJcIiAmJlxuXG5cdFx0XHQvLyBPdGhlcndpc2UsIGNoZWNrIGNvbXB1dGVkIHN0eWxlXG5cdFx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NDMgLSA0NVxuXHRcdFx0Ly8gRGlzY29ubmVjdGVkIGVsZW1lbnRzIGNhbiBoYXZlIGNvbXB1dGVkIGRpc3BsYXk6IG5vbmUsIHNvIGZpcnN0IGNvbmZpcm0gdGhhdCBlbGVtIGlzXG5cdFx0XHQvLyBpbiB0aGUgZG9jdW1lbnQuXG5cdFx0XHRpc0F0dGFjaGVkKCBlbGVtICkgJiZcblxuXHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKSA9PT0gXCJub25lXCI7XG5cdH07XG5cblxuXG5mdW5jdGlvbiBhZGp1c3RDU1MoIGVsZW0sIHByb3AsIHZhbHVlUGFydHMsIHR3ZWVuICkge1xuXHR2YXIgYWRqdXN0ZWQsIHNjYWxlLFxuXHRcdG1heEl0ZXJhdGlvbnMgPSAyMCxcblx0XHRjdXJyZW50VmFsdWUgPSB0d2VlbiA/XG5cdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIHR3ZWVuLmN1cigpO1xuXHRcdFx0fSA6XG5cdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0cmV0dXJuIGpRdWVyeS5jc3MoIGVsZW0sIHByb3AsIFwiXCIgKTtcblx0XHRcdH0sXG5cdFx0aW5pdGlhbCA9IGN1cnJlbnRWYWx1ZSgpLFxuXHRcdHVuaXQgPSB2YWx1ZVBhcnRzICYmIHZhbHVlUGFydHNbIDMgXSB8fCAoIGpRdWVyeS5jc3NOdW1iZXJbIHByb3AgXSA/IFwiXCIgOiBcInB4XCIgKSxcblxuXHRcdC8vIFN0YXJ0aW5nIHZhbHVlIGNvbXB1dGF0aW9uIGlzIHJlcXVpcmVkIGZvciBwb3RlbnRpYWwgdW5pdCBtaXNtYXRjaGVzXG5cdFx0aW5pdGlhbEluVW5pdCA9IGVsZW0ubm9kZVR5cGUgJiZcblx0XHRcdCggalF1ZXJ5LmNzc051bWJlclsgcHJvcCBdIHx8IHVuaXQgIT09IFwicHhcIiAmJiAraW5pdGlhbCApICYmXG5cdFx0XHRyY3NzTnVtLmV4ZWMoIGpRdWVyeS5jc3MoIGVsZW0sIHByb3AgKSApO1xuXG5cdGlmICggaW5pdGlhbEluVW5pdCAmJiBpbml0aWFsSW5Vbml0WyAzIF0gIT09IHVuaXQgKSB7XG5cblx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDw9NTRcblx0XHQvLyBIYWx2ZSB0aGUgaXRlcmF0aW9uIHRhcmdldCB2YWx1ZSB0byBwcmV2ZW50IGludGVyZmVyZW5jZSBmcm9tIENTUyB1cHBlciBib3VuZHMgKGdoLTIxNDQpXG5cdFx0aW5pdGlhbCA9IGluaXRpYWwgLyAyO1xuXG5cdFx0Ly8gVHJ1c3QgdW5pdHMgcmVwb3J0ZWQgYnkgalF1ZXJ5LmNzc1xuXHRcdHVuaXQgPSB1bml0IHx8IGluaXRpYWxJblVuaXRbIDMgXTtcblxuXHRcdC8vIEl0ZXJhdGl2ZWx5IGFwcHJveGltYXRlIGZyb20gYSBub256ZXJvIHN0YXJ0aW5nIHBvaW50XG5cdFx0aW5pdGlhbEluVW5pdCA9ICtpbml0aWFsIHx8IDE7XG5cblx0XHR3aGlsZSAoIG1heEl0ZXJhdGlvbnMtLSApIHtcblxuXHRcdFx0Ly8gRXZhbHVhdGUgYW5kIHVwZGF0ZSBvdXIgYmVzdCBndWVzcyAoZG91YmxpbmcgZ3Vlc3NlcyB0aGF0IHplcm8gb3V0KS5cblx0XHRcdC8vIEZpbmlzaCBpZiB0aGUgc2NhbGUgZXF1YWxzIG9yIGNyb3NzZXMgMSAobWFraW5nIHRoZSBvbGQqbmV3IHByb2R1Y3Qgbm9uLXBvc2l0aXZlKS5cblx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCwgaW5pdGlhbEluVW5pdCArIHVuaXQgKTtcblx0XHRcdGlmICggKCAxIC0gc2NhbGUgKSAqICggMSAtICggc2NhbGUgPSBjdXJyZW50VmFsdWUoKSAvIGluaXRpYWwgfHwgMC41ICkgKSA8PSAwICkge1xuXHRcdFx0XHRtYXhJdGVyYXRpb25zID0gMDtcblx0XHRcdH1cblx0XHRcdGluaXRpYWxJblVuaXQgPSBpbml0aWFsSW5Vbml0IC8gc2NhbGU7XG5cblx0XHR9XG5cblx0XHRpbml0aWFsSW5Vbml0ID0gaW5pdGlhbEluVW5pdCAqIDI7XG5cdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBpbml0aWFsSW5Vbml0ICsgdW5pdCApO1xuXG5cdFx0Ly8gTWFrZSBzdXJlIHdlIHVwZGF0ZSB0aGUgdHdlZW4gcHJvcGVydGllcyBsYXRlciBvblxuXHRcdHZhbHVlUGFydHMgPSB2YWx1ZVBhcnRzIHx8IFtdO1xuXHR9XG5cblx0aWYgKCB2YWx1ZVBhcnRzICkge1xuXHRcdGluaXRpYWxJblVuaXQgPSAraW5pdGlhbEluVW5pdCB8fCAraW5pdGlhbCB8fCAwO1xuXG5cdFx0Ly8gQXBwbHkgcmVsYXRpdmUgb2Zmc2V0ICgrPS8tPSkgaWYgc3BlY2lmaWVkXG5cdFx0YWRqdXN0ZWQgPSB2YWx1ZVBhcnRzWyAxIF0gP1xuXHRcdFx0aW5pdGlhbEluVW5pdCArICggdmFsdWVQYXJ0c1sgMSBdICsgMSApICogdmFsdWVQYXJ0c1sgMiBdIDpcblx0XHRcdCt2YWx1ZVBhcnRzWyAyIF07XG5cdFx0aWYgKCB0d2VlbiApIHtcblx0XHRcdHR3ZWVuLnVuaXQgPSB1bml0O1xuXHRcdFx0dHdlZW4uc3RhcnQgPSBpbml0aWFsSW5Vbml0O1xuXHRcdFx0dHdlZW4uZW5kID0gYWRqdXN0ZWQ7XG5cdFx0fVxuXHR9XG5cdHJldHVybiBhZGp1c3RlZDtcbn1cblxuXG52YXIgZGVmYXVsdERpc3BsYXlNYXAgPSB7fTtcblxuZnVuY3Rpb24gZ2V0RGVmYXVsdERpc3BsYXkoIGVsZW0gKSB7XG5cdHZhciB0ZW1wLFxuXHRcdGRvYyA9IGVsZW0ub3duZXJEb2N1bWVudCxcblx0XHRub2RlTmFtZSA9IGVsZW0ubm9kZU5hbWUsXG5cdFx0ZGlzcGxheSA9IGRlZmF1bHREaXNwbGF5TWFwWyBub2RlTmFtZSBdO1xuXG5cdGlmICggZGlzcGxheSApIHtcblx0XHRyZXR1cm4gZGlzcGxheTtcblx0fVxuXG5cdHRlbXAgPSBkb2MuYm9keS5hcHBlbmRDaGlsZCggZG9jLmNyZWF0ZUVsZW1lbnQoIG5vZGVOYW1lICkgKTtcblx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIHRlbXAsIFwiZGlzcGxheVwiICk7XG5cblx0dGVtcC5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCB0ZW1wICk7XG5cblx0aWYgKCBkaXNwbGF5ID09PSBcIm5vbmVcIiApIHtcblx0XHRkaXNwbGF5ID0gXCJibG9ja1wiO1xuXHR9XG5cdGRlZmF1bHREaXNwbGF5TWFwWyBub2RlTmFtZSBdID0gZGlzcGxheTtcblxuXHRyZXR1cm4gZGlzcGxheTtcbn1cblxuZnVuY3Rpb24gc2hvd0hpZGUoIGVsZW1lbnRzLCBzaG93ICkge1xuXHR2YXIgZGlzcGxheSwgZWxlbSxcblx0XHR2YWx1ZXMgPSBbXSxcblx0XHRpbmRleCA9IDAsXG5cdFx0bGVuZ3RoID0gZWxlbWVudHMubGVuZ3RoO1xuXG5cdC8vIERldGVybWluZSBuZXcgZGlzcGxheSB2YWx1ZSBmb3IgZWxlbWVudHMgdGhhdCBuZWVkIHRvIGNoYW5nZVxuXHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdGVsZW0gPSBlbGVtZW50c1sgaW5kZXggXTtcblx0XHRpZiAoICFlbGVtLnN0eWxlICkge1xuXHRcdFx0Y29udGludWU7XG5cdFx0fVxuXG5cdFx0ZGlzcGxheSA9IGVsZW0uc3R5bGUuZGlzcGxheTtcblx0XHRpZiAoIHNob3cgKSB7XG5cblx0XHRcdC8vIFNpbmNlIHdlIGZvcmNlIHZpc2liaWxpdHkgdXBvbiBjYXNjYWRlLWhpZGRlbiBlbGVtZW50cywgYW4gaW1tZWRpYXRlIChhbmQgc2xvdylcblx0XHRcdC8vIGNoZWNrIGlzIHJlcXVpcmVkIGluIHRoaXMgZmlyc3QgbG9vcCB1bmxlc3Mgd2UgaGF2ZSBhIG5vbmVtcHR5IGRpc3BsYXkgdmFsdWUgKGVpdGhlclxuXHRcdFx0Ly8gaW5saW5lIG9yIGFib3V0LXRvLWJlLXJlc3RvcmVkKVxuXHRcdFx0aWYgKCBkaXNwbGF5ID09PSBcIm5vbmVcIiApIHtcblx0XHRcdFx0dmFsdWVzWyBpbmRleCBdID0gZGF0YVByaXYuZ2V0KCBlbGVtLCBcImRpc3BsYXlcIiApIHx8IG51bGw7XG5cdFx0XHRcdGlmICggIXZhbHVlc1sgaW5kZXggXSApIHtcblx0XHRcdFx0XHRlbGVtLnN0eWxlLmRpc3BsYXkgPSBcIlwiO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRpZiAoIGVsZW0uc3R5bGUuZGlzcGxheSA9PT0gXCJcIiAmJiBpc0hpZGRlbldpdGhpblRyZWUoIGVsZW0gKSApIHtcblx0XHRcdFx0dmFsdWVzWyBpbmRleCBdID0gZ2V0RGVmYXVsdERpc3BsYXkoIGVsZW0gKTtcblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKCBkaXNwbGF5ICE9PSBcIm5vbmVcIiApIHtcblx0XHRcdFx0dmFsdWVzWyBpbmRleCBdID0gXCJub25lXCI7XG5cblx0XHRcdFx0Ly8gUmVtZW1iZXIgd2hhdCB3ZSdyZSBvdmVyd3JpdGluZ1xuXHRcdFx0XHRkYXRhUHJpdi5zZXQoIGVsZW0sIFwiZGlzcGxheVwiLCBkaXNwbGF5ICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gU2V0IHRoZSBkaXNwbGF5IG9mIHRoZSBlbGVtZW50cyBpbiBhIHNlY29uZCBsb29wIHRvIGF2b2lkIGNvbnN0YW50IHJlZmxvd1xuXHRmb3IgKCBpbmRleCA9IDA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdGlmICggdmFsdWVzWyBpbmRleCBdICE9IG51bGwgKSB7XG5cdFx0XHRlbGVtZW50c1sgaW5kZXggXS5zdHlsZS5kaXNwbGF5ID0gdmFsdWVzWyBpbmRleCBdO1xuXHRcdH1cblx0fVxuXG5cdHJldHVybiBlbGVtZW50cztcbn1cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRzaG93OiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gc2hvd0hpZGUoIHRoaXMsIHRydWUgKTtcblx0fSxcblx0aGlkZTogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHNob3dIaWRlKCB0aGlzICk7XG5cdH0sXG5cdHRvZ2dsZTogZnVuY3Rpb24oIHN0YXRlICkge1xuXHRcdGlmICggdHlwZW9mIHN0YXRlID09PSBcImJvb2xlYW5cIiApIHtcblx0XHRcdHJldHVybiBzdGF0ZSA/IHRoaXMuc2hvdygpIDogdGhpcy5oaWRlKCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIGlzSGlkZGVuV2l0aGluVHJlZSggdGhpcyApICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5zaG93KCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5oaWRlKCk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9XG59ICk7XG52YXIgcmNoZWNrYWJsZVR5cGUgPSAoIC9eKD86Y2hlY2tib3h8cmFkaW8pJC9pICk7XG5cbnZhciBydGFnTmFtZSA9ICggLzwoW2Etel1bXlxcL1xcMD5cXHgyMFxcdFxcclxcblxcZl0qKS9pICk7XG5cbnZhciByc2NyaXB0VHlwZSA9ICggL14kfF5tb2R1bGUkfFxcLyg/OmphdmF8ZWNtYSlzY3JpcHQvaSApO1xuXG5cblxuKCBmdW5jdGlvbigpIHtcblx0dmFyIGZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpLFxuXHRcdGRpdiA9IGZyYWdtZW50LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgKSxcblx0XHRpbnB1dCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiaW5wdXRcIiApO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHlcblx0Ly8gQ2hlY2sgc3RhdGUgbG9zdCBpZiB0aGUgbmFtZSBpcyBzZXQgKCMxMTIxNylcblx0Ly8gU3VwcG9ydDogV2luZG93cyBXZWIgQXBwcyAoV1dBKVxuXHQvLyBgbmFtZWAgYW5kIGB0eXBlYCBtdXN0IHVzZSAuc2V0QXR0cmlidXRlIGZvciBXV0EgKCMxNDkwMSlcblx0aW5wdXQuc2V0QXR0cmlidXRlKCBcInR5cGVcIiwgXCJyYWRpb1wiICk7XG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJjaGVja2VkXCIsIFwiY2hlY2tlZFwiICk7XG5cdGlucHV0LnNldEF0dHJpYnV0ZSggXCJuYW1lXCIsIFwidFwiICk7XG5cblx0ZGl2LmFwcGVuZENoaWxkKCBpbnB1dCApO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjEgb25seVxuXHQvLyBPbGRlciBXZWJLaXQgZG9lc24ndCBjbG9uZSBjaGVja2VkIHN0YXRlIGNvcnJlY3RseSBpbiBmcmFnbWVudHNcblx0c3VwcG9ydC5jaGVja0Nsb25lID0gZGl2LmNsb25lTm9kZSggdHJ1ZSApLmNsb25lTm9kZSggdHJ1ZSApLmxhc3RDaGlsZC5jaGVja2VkO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHQvLyBNYWtlIHN1cmUgdGV4dGFyZWEgKGFuZCBjaGVja2JveCkgZGVmYXVsdFZhbHVlIGlzIHByb3Blcmx5IGNsb25lZFxuXHRkaXYuaW5uZXJIVE1MID0gXCI8dGV4dGFyZWE+eDwvdGV4dGFyZWE+XCI7XG5cdHN1cHBvcnQubm9DbG9uZUNoZWNrZWQgPSAhIWRpdi5jbG9uZU5vZGUoIHRydWUgKS5sYXN0Q2hpbGQuZGVmYXVsdFZhbHVlO1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5cdC8vIElFIDw9OSByZXBsYWNlcyA8b3B0aW9uPiB0YWdzIHdpdGggdGhlaXIgY29udGVudHMgd2hlbiBpbnNlcnRlZCBvdXRzaWRlIG9mXG5cdC8vIHRoZSBzZWxlY3QgZWxlbWVudC5cblx0ZGl2LmlubmVySFRNTCA9IFwiPG9wdGlvbj48L29wdGlvbj5cIjtcblx0c3VwcG9ydC5vcHRpb24gPSAhIWRpdi5sYXN0Q2hpbGQ7XG59ICkoKTtcblxuXG4vLyBXZSBoYXZlIHRvIGNsb3NlIHRoZXNlIHRhZ3MgdG8gc3VwcG9ydCBYSFRNTCAoIzEzMjAwKVxudmFyIHdyYXBNYXAgPSB7XG5cblx0Ly8gWEhUTUwgcGFyc2VycyBkbyBub3QgbWFnaWNhbGx5IGluc2VydCBlbGVtZW50cyBpbiB0aGVcblx0Ly8gc2FtZSB3YXkgdGhhdCB0YWcgc291cCBwYXJzZXJzIGRvLiBTbyB3ZSBjYW5ub3Qgc2hvcnRlblxuXHQvLyB0aGlzIGJ5IG9taXR0aW5nIDx0Ym9keT4gb3Igb3RoZXIgcmVxdWlyZWQgZWxlbWVudHMuXG5cdHRoZWFkOiBbIDEsIFwiPHRhYmxlPlwiLCBcIjwvdGFibGU+XCIgXSxcblx0Y29sOiBbIDIsIFwiPHRhYmxlPjxjb2xncm91cD5cIiwgXCI8L2NvbGdyb3VwPjwvdGFibGU+XCIgXSxcblx0dHI6IFsgMiwgXCI8dGFibGU+PHRib2R5PlwiLCBcIjwvdGJvZHk+PC90YWJsZT5cIiBdLFxuXHR0ZDogWyAzLCBcIjx0YWJsZT48dGJvZHk+PHRyPlwiLCBcIjwvdHI+PC90Ym9keT48L3RhYmxlPlwiIF0sXG5cblx0X2RlZmF1bHQ6IFsgMCwgXCJcIiwgXCJcIiBdXG59O1xuXG53cmFwTWFwLnRib2R5ID0gd3JhcE1hcC50Zm9vdCA9IHdyYXBNYXAuY29sZ3JvdXAgPSB3cmFwTWFwLmNhcHRpb24gPSB3cmFwTWFwLnRoZWFkO1xud3JhcE1hcC50aCA9IHdyYXBNYXAudGQ7XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG5pZiAoICFzdXBwb3J0Lm9wdGlvbiApIHtcblx0d3JhcE1hcC5vcHRncm91cCA9IHdyYXBNYXAub3B0aW9uID0gWyAxLCBcIjxzZWxlY3QgbXVsdGlwbGU9J211bHRpcGxlJz5cIiwgXCI8L3NlbGVjdD5cIiBdO1xufVxuXG5cbmZ1bmN0aW9uIGdldEFsbCggY29udGV4dCwgdGFnICkge1xuXG5cdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExIG9ubHlcblx0Ly8gVXNlIHR5cGVvZiB0byBhdm9pZCB6ZXJvLWFyZ3VtZW50IG1ldGhvZCBpbnZvY2F0aW9uIG9uIGhvc3Qgb2JqZWN0cyAoIzE1MTUxKVxuXHR2YXIgcmV0O1xuXG5cdGlmICggdHlwZW9mIGNvbnRleHQuZ2V0RWxlbWVudHNCeVRhZ05hbWUgIT09IFwidW5kZWZpbmVkXCIgKSB7XG5cdFx0cmV0ID0gY29udGV4dC5nZXRFbGVtZW50c0J5VGFnTmFtZSggdGFnIHx8IFwiKlwiICk7XG5cblx0fSBlbHNlIGlmICggdHlwZW9mIGNvbnRleHQucXVlcnlTZWxlY3RvckFsbCAhPT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRyZXQgPSBjb250ZXh0LnF1ZXJ5U2VsZWN0b3JBbGwoIHRhZyB8fCBcIipcIiApO1xuXG5cdH0gZWxzZSB7XG5cdFx0cmV0ID0gW107XG5cdH1cblxuXHRpZiAoIHRhZyA9PT0gdW5kZWZpbmVkIHx8IHRhZyAmJiBub2RlTmFtZSggY29udGV4dCwgdGFnICkgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5tZXJnZSggWyBjb250ZXh0IF0sIHJldCApO1xuXHR9XG5cblx0cmV0dXJuIHJldDtcbn1cblxuXG4vLyBNYXJrIHNjcmlwdHMgYXMgaGF2aW5nIGFscmVhZHkgYmVlbiBldmFsdWF0ZWRcbmZ1bmN0aW9uIHNldEdsb2JhbEV2YWwoIGVsZW1zLCByZWZFbGVtZW50cyApIHtcblx0dmFyIGkgPSAwLFxuXHRcdGwgPSBlbGVtcy5sZW5ndGg7XG5cblx0Zm9yICggOyBpIDwgbDsgaSsrICkge1xuXHRcdGRhdGFQcml2LnNldChcblx0XHRcdGVsZW1zWyBpIF0sXG5cdFx0XHRcImdsb2JhbEV2YWxcIixcblx0XHRcdCFyZWZFbGVtZW50cyB8fCBkYXRhUHJpdi5nZXQoIHJlZkVsZW1lbnRzWyBpIF0sIFwiZ2xvYmFsRXZhbFwiIClcblx0XHQpO1xuXHR9XG59XG5cblxudmFyIHJodG1sID0gLzx8JiM/XFx3KzsvO1xuXG5mdW5jdGlvbiBidWlsZEZyYWdtZW50KCBlbGVtcywgY29udGV4dCwgc2NyaXB0cywgc2VsZWN0aW9uLCBpZ25vcmVkICkge1xuXHR2YXIgZWxlbSwgdG1wLCB0YWcsIHdyYXAsIGF0dGFjaGVkLCBqLFxuXHRcdGZyYWdtZW50ID0gY29udGV4dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCksXG5cdFx0bm9kZXMgPSBbXSxcblx0XHRpID0gMCxcblx0XHRsID0gZWxlbXMubGVuZ3RoO1xuXG5cdGZvciAoIDsgaSA8IGw7IGkrKyApIHtcblx0XHRlbGVtID0gZWxlbXNbIGkgXTtcblxuXHRcdGlmICggZWxlbSB8fCBlbGVtID09PSAwICkge1xuXG5cdFx0XHQvLyBBZGQgbm9kZXMgZGlyZWN0bHlcblx0XHRcdGlmICggdG9UeXBlKCBlbGVtICkgPT09IFwib2JqZWN0XCIgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHRcdC8vIHB1c2guYXBwbHkoXywgYXJyYXlsaWtlKSB0aHJvd3Mgb24gYW5jaWVudCBXZWJLaXRcblx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBub2RlcywgZWxlbS5ub2RlVHlwZSA/IFsgZWxlbSBdIDogZWxlbSApO1xuXG5cdFx0XHQvLyBDb252ZXJ0IG5vbi1odG1sIGludG8gYSB0ZXh0IG5vZGVcblx0XHRcdH0gZWxzZSBpZiAoICFyaHRtbC50ZXN0KCBlbGVtICkgKSB7XG5cdFx0XHRcdG5vZGVzLnB1c2goIGNvbnRleHQuY3JlYXRlVGV4dE5vZGUoIGVsZW0gKSApO1xuXG5cdFx0XHQvLyBDb252ZXJ0IGh0bWwgaW50byBET00gbm9kZXNcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRtcCA9IHRtcCB8fCBmcmFnbWVudC5hcHBlbmRDaGlsZCggY29udGV4dC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkgKTtcblxuXHRcdFx0XHQvLyBEZXNlcmlhbGl6ZSBhIHN0YW5kYXJkIHJlcHJlc2VudGF0aW9uXG5cdFx0XHRcdHRhZyA9ICggcnRhZ05hbWUuZXhlYyggZWxlbSApIHx8IFsgXCJcIiwgXCJcIiBdIClbIDEgXS50b0xvd2VyQ2FzZSgpO1xuXHRcdFx0XHR3cmFwID0gd3JhcE1hcFsgdGFnIF0gfHwgd3JhcE1hcC5fZGVmYXVsdDtcblx0XHRcdFx0dG1wLmlubmVySFRNTCA9IHdyYXBbIDEgXSArIGpRdWVyeS5odG1sUHJlZmlsdGVyKCBlbGVtICkgKyB3cmFwWyAyIF07XG5cblx0XHRcdFx0Ly8gRGVzY2VuZCB0aHJvdWdoIHdyYXBwZXJzIHRvIHRoZSByaWdodCBjb250ZW50XG5cdFx0XHRcdGogPSB3cmFwWyAwIF07XG5cdFx0XHRcdHdoaWxlICggai0tICkge1xuXHRcdFx0XHRcdHRtcCA9IHRtcC5sYXN0Q2hpbGQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9NC4wIG9ubHksIFBoYW50b21KUyAxIG9ubHlcblx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRqUXVlcnkubWVyZ2UoIG5vZGVzLCB0bXAuY2hpbGROb2RlcyApO1xuXG5cdFx0XHRcdC8vIFJlbWVtYmVyIHRoZSB0b3AtbGV2ZWwgY29udGFpbmVyXG5cdFx0XHRcdHRtcCA9IGZyYWdtZW50LmZpcnN0Q2hpbGQ7XG5cblx0XHRcdFx0Ly8gRW5zdXJlIHRoZSBjcmVhdGVkIG5vZGVzIGFyZSBvcnBoYW5lZCAoIzEyMzkyKVxuXHRcdFx0XHR0bXAudGV4dENvbnRlbnQgPSBcIlwiO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIFJlbW92ZSB3cmFwcGVyIGZyb20gZnJhZ21lbnRcblx0ZnJhZ21lbnQudGV4dENvbnRlbnQgPSBcIlwiO1xuXG5cdGkgPSAwO1xuXHR3aGlsZSAoICggZWxlbSA9IG5vZGVzWyBpKysgXSApICkge1xuXG5cdFx0Ly8gU2tpcCBlbGVtZW50cyBhbHJlYWR5IGluIHRoZSBjb250ZXh0IGNvbGxlY3Rpb24gKHRyYWMtNDA4Nylcblx0XHRpZiAoIHNlbGVjdGlvbiAmJiBqUXVlcnkuaW5BcnJheSggZWxlbSwgc2VsZWN0aW9uICkgPiAtMSApIHtcblx0XHRcdGlmICggaWdub3JlZCApIHtcblx0XHRcdFx0aWdub3JlZC5wdXNoKCBlbGVtICk7XG5cdFx0XHR9XG5cdFx0XHRjb250aW51ZTtcblx0XHR9XG5cblx0XHRhdHRhY2hlZCA9IGlzQXR0YWNoZWQoIGVsZW0gKTtcblxuXHRcdC8vIEFwcGVuZCB0byBmcmFnbWVudFxuXHRcdHRtcCA9IGdldEFsbCggZnJhZ21lbnQuYXBwZW5kQ2hpbGQoIGVsZW0gKSwgXCJzY3JpcHRcIiApO1xuXG5cdFx0Ly8gUHJlc2VydmUgc2NyaXB0IGV2YWx1YXRpb24gaGlzdG9yeVxuXHRcdGlmICggYXR0YWNoZWQgKSB7XG5cdFx0XHRzZXRHbG9iYWxFdmFsKCB0bXAgKTtcblx0XHR9XG5cblx0XHQvLyBDYXB0dXJlIGV4ZWN1dGFibGVzXG5cdFx0aWYgKCBzY3JpcHRzICkge1xuXHRcdFx0aiA9IDA7XG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IHRtcFsgaisrIF0gKSApIHtcblx0XHRcdFx0aWYgKCByc2NyaXB0VHlwZS50ZXN0KCBlbGVtLnR5cGUgfHwgXCJcIiApICkge1xuXHRcdFx0XHRcdHNjcmlwdHMucHVzaCggZWxlbSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGZyYWdtZW50O1xufVxuXG5cbnZhciBydHlwZW5hbWVzcGFjZSA9IC9eKFteLl0qKSg/OlxcLiguKyl8KS87XG5cbmZ1bmN0aW9uIHJldHVyblRydWUoKSB7XG5cdHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiByZXR1cm5GYWxzZSgpIHtcblx0cmV0dXJuIGZhbHNlO1xufVxuXG4vLyBTdXBwb3J0OiBJRSA8PTkgLSAxMStcbi8vIGZvY3VzKCkgYW5kIGJsdXIoKSBhcmUgYXN5bmNocm9ub3VzLCBleGNlcHQgd2hlbiB0aGV5IGFyZSBuby1vcC5cbi8vIFNvIGV4cGVjdCBmb2N1cyB0byBiZSBzeW5jaHJvbm91cyB3aGVuIHRoZSBlbGVtZW50IGlzIGFscmVhZHkgYWN0aXZlLFxuLy8gYW5kIGJsdXIgdG8gYmUgc3luY2hyb25vdXMgd2hlbiB0aGUgZWxlbWVudCBpcyBub3QgYWxyZWFkeSBhY3RpdmUuXG4vLyAoZm9jdXMgYW5kIGJsdXIgYXJlIGFsd2F5cyBzeW5jaHJvbm91cyBpbiBvdGhlciBzdXBwb3J0ZWQgYnJvd3NlcnMsXG4vLyB0aGlzIGp1c3QgZGVmaW5lcyB3aGVuIHdlIGNhbiBjb3VudCBvbiBpdCkuXG5mdW5jdGlvbiBleHBlY3RTeW5jKCBlbGVtLCB0eXBlICkge1xuXHRyZXR1cm4gKCBlbGVtID09PSBzYWZlQWN0aXZlRWxlbWVudCgpICkgPT09ICggdHlwZSA9PT0gXCJmb2N1c1wiICk7XG59XG5cbi8vIFN1cHBvcnQ6IElFIDw9OSBvbmx5XG4vLyBBY2Nlc3NpbmcgZG9jdW1lbnQuYWN0aXZlRWxlbWVudCBjYW4gdGhyb3cgdW5leHBlY3RlZGx5XG4vLyBodHRwczovL2J1Z3MuanF1ZXJ5LmNvbS90aWNrZXQvMTMzOTNcbmZ1bmN0aW9uIHNhZmVBY3RpdmVFbGVtZW50KCkge1xuXHR0cnkge1xuXHRcdHJldHVybiBkb2N1bWVudC5hY3RpdmVFbGVtZW50O1xuXHR9IGNhdGNoICggZXJyICkgeyB9XG59XG5cbmZ1bmN0aW9uIG9uKCBlbGVtLCB0eXBlcywgc2VsZWN0b3IsIGRhdGEsIGZuLCBvbmUgKSB7XG5cdHZhciBvcmlnRm4sIHR5cGU7XG5cblx0Ly8gVHlwZXMgY2FuIGJlIGEgbWFwIG9mIHR5cGVzL2hhbmRsZXJzXG5cdGlmICggdHlwZW9mIHR5cGVzID09PSBcIm9iamVjdFwiICkge1xuXG5cdFx0Ly8gKCB0eXBlcy1PYmplY3QsIHNlbGVjdG9yLCBkYXRhIClcblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciAhPT0gXCJzdHJpbmdcIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcy1PYmplY3QsIGRhdGEgKVxuXHRcdFx0ZGF0YSA9IGRhdGEgfHwgc2VsZWN0b3I7XG5cdFx0XHRzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0XHR9XG5cdFx0Zm9yICggdHlwZSBpbiB0eXBlcyApIHtcblx0XHRcdG9uKCBlbGVtLCB0eXBlLCBzZWxlY3RvciwgZGF0YSwgdHlwZXNbIHR5cGUgXSwgb25lICk7XG5cdFx0fVxuXHRcdHJldHVybiBlbGVtO1xuXHR9XG5cblx0aWYgKCBkYXRhID09IG51bGwgJiYgZm4gPT0gbnVsbCApIHtcblxuXHRcdC8vICggdHlwZXMsIGZuIClcblx0XHRmbiA9IHNlbGVjdG9yO1xuXHRcdGRhdGEgPSBzZWxlY3RvciA9IHVuZGVmaW5lZDtcblx0fSBlbHNlIGlmICggZm4gPT0gbnVsbCApIHtcblx0XHRpZiAoIHR5cGVvZiBzZWxlY3RvciA9PT0gXCJzdHJpbmdcIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcywgc2VsZWN0b3IsIGZuIClcblx0XHRcdGZuID0gZGF0YTtcblx0XHRcdGRhdGEgPSB1bmRlZmluZWQ7XG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gKCB0eXBlcywgZGF0YSwgZm4gKVxuXHRcdFx0Zm4gPSBkYXRhO1xuXHRcdFx0ZGF0YSA9IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHR9XG5cdGlmICggZm4gPT09IGZhbHNlICkge1xuXHRcdGZuID0gcmV0dXJuRmFsc2U7XG5cdH0gZWxzZSBpZiAoICFmbiApIHtcblx0XHRyZXR1cm4gZWxlbTtcblx0fVxuXG5cdGlmICggb25lID09PSAxICkge1xuXHRcdG9yaWdGbiA9IGZuO1xuXHRcdGZuID0gZnVuY3Rpb24oIGV2ZW50ICkge1xuXG5cdFx0XHQvLyBDYW4gdXNlIGFuIGVtcHR5IHNldCwgc2luY2UgZXZlbnQgY29udGFpbnMgdGhlIGluZm9cblx0XHRcdGpRdWVyeSgpLm9mZiggZXZlbnQgKTtcblx0XHRcdHJldHVybiBvcmlnRm4uYXBwbHkoIHRoaXMsIGFyZ3VtZW50cyApO1xuXHRcdH07XG5cblx0XHQvLyBVc2Ugc2FtZSBndWlkIHNvIGNhbGxlciBjYW4gcmVtb3ZlIHVzaW5nIG9yaWdGblxuXHRcdGZuLmd1aWQgPSBvcmlnRm4uZ3VpZCB8fCAoIG9yaWdGbi5ndWlkID0galF1ZXJ5Lmd1aWQrKyApO1xuXHR9XG5cdHJldHVybiBlbGVtLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdGpRdWVyeS5ldmVudC5hZGQoIHRoaXMsIHR5cGVzLCBmbiwgZGF0YSwgc2VsZWN0b3IgKTtcblx0fSApO1xufVxuXG4vKlxuICogSGVscGVyIGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgZXZlbnRzIC0tIG5vdCBwYXJ0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLlxuICogUHJvcHMgdG8gRGVhbiBFZHdhcmRzJyBhZGRFdmVudCBsaWJyYXJ5IGZvciBtYW55IG9mIHRoZSBpZGVhcy5cbiAqL1xualF1ZXJ5LmV2ZW50ID0ge1xuXG5cdGdsb2JhbDoge30sXG5cblx0YWRkOiBmdW5jdGlvbiggZWxlbSwgdHlwZXMsIGhhbmRsZXIsIGRhdGEsIHNlbGVjdG9yICkge1xuXG5cdFx0dmFyIGhhbmRsZU9iakluLCBldmVudEhhbmRsZSwgdG1wLFxuXHRcdFx0ZXZlbnRzLCB0LCBoYW5kbGVPYmosXG5cdFx0XHRzcGVjaWFsLCBoYW5kbGVycywgdHlwZSwgbmFtZXNwYWNlcywgb3JpZ1R5cGUsXG5cdFx0XHRlbGVtRGF0YSA9IGRhdGFQcml2LmdldCggZWxlbSApO1xuXG5cdFx0Ly8gT25seSBhdHRhY2ggZXZlbnRzIHRvIG9iamVjdHMgdGhhdCBhY2NlcHQgZGF0YVxuXHRcdGlmICggIWFjY2VwdERhdGEoIGVsZW0gKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBDYWxsZXIgY2FuIHBhc3MgaW4gYW4gb2JqZWN0IG9mIGN1c3RvbSBkYXRhIGluIGxpZXUgb2YgdGhlIGhhbmRsZXJcblx0XHRpZiAoIGhhbmRsZXIuaGFuZGxlciApIHtcblx0XHRcdGhhbmRsZU9iakluID0gaGFuZGxlcjtcblx0XHRcdGhhbmRsZXIgPSBoYW5kbGVPYmpJbi5oYW5kbGVyO1xuXHRcdFx0c2VsZWN0b3IgPSBoYW5kbGVPYmpJbi5zZWxlY3Rvcjtcblx0XHR9XG5cblx0XHQvLyBFbnN1cmUgdGhhdCBpbnZhbGlkIHNlbGVjdG9ycyB0aHJvdyBleGNlcHRpb25zIGF0IGF0dGFjaCB0aW1lXG5cdFx0Ly8gRXZhbHVhdGUgYWdhaW5zdCBkb2N1bWVudEVsZW1lbnQgaW4gY2FzZSBlbGVtIGlzIGEgbm9uLWVsZW1lbnQgbm9kZSAoZS5nLiwgZG9jdW1lbnQpXG5cdFx0aWYgKCBzZWxlY3RvciApIHtcblx0XHRcdGpRdWVyeS5maW5kLm1hdGNoZXNTZWxlY3RvciggZG9jdW1lbnRFbGVtZW50LCBzZWxlY3RvciApO1xuXHRcdH1cblxuXHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHRoZSBoYW5kbGVyIGhhcyBhIHVuaXF1ZSBJRCwgdXNlZCB0byBmaW5kL3JlbW92ZSBpdCBsYXRlclxuXHRcdGlmICggIWhhbmRsZXIuZ3VpZCApIHtcblx0XHRcdGhhbmRsZXIuZ3VpZCA9IGpRdWVyeS5ndWlkKys7XG5cdFx0fVxuXG5cdFx0Ly8gSW5pdCB0aGUgZWxlbWVudCdzIGV2ZW50IHN0cnVjdHVyZSBhbmQgbWFpbiBoYW5kbGVyLCBpZiB0aGlzIGlzIHRoZSBmaXJzdFxuXHRcdGlmICggISggZXZlbnRzID0gZWxlbURhdGEuZXZlbnRzICkgKSB7XG5cdFx0XHRldmVudHMgPSBlbGVtRGF0YS5ldmVudHMgPSBPYmplY3QuY3JlYXRlKCBudWxsICk7XG5cdFx0fVxuXHRcdGlmICggISggZXZlbnRIYW5kbGUgPSBlbGVtRGF0YS5oYW5kbGUgKSApIHtcblx0XHRcdGV2ZW50SGFuZGxlID0gZWxlbURhdGEuaGFuZGxlID0gZnVuY3Rpb24oIGUgKSB7XG5cblx0XHRcdFx0Ly8gRGlzY2FyZCB0aGUgc2Vjb25kIGV2ZW50IG9mIGEgalF1ZXJ5LmV2ZW50LnRyaWdnZXIoKSBhbmRcblx0XHRcdFx0Ly8gd2hlbiBhbiBldmVudCBpcyBjYWxsZWQgYWZ0ZXIgYSBwYWdlIGhhcyB1bmxvYWRlZFxuXHRcdFx0XHRyZXR1cm4gdHlwZW9mIGpRdWVyeSAhPT0gXCJ1bmRlZmluZWRcIiAmJiBqUXVlcnkuZXZlbnQudHJpZ2dlcmVkICE9PSBlLnR5cGUgP1xuXHRcdFx0XHRcdGpRdWVyeS5ldmVudC5kaXNwYXRjaC5hcHBseSggZWxlbSwgYXJndW1lbnRzICkgOiB1bmRlZmluZWQ7XG5cdFx0XHR9O1xuXHRcdH1cblxuXHRcdC8vIEhhbmRsZSBtdWx0aXBsZSBldmVudHMgc2VwYXJhdGVkIGJ5IGEgc3BhY2Vcblx0XHR0eXBlcyA9ICggdHlwZXMgfHwgXCJcIiApLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyBcIlwiIF07XG5cdFx0dCA9IHR5cGVzLmxlbmd0aDtcblx0XHR3aGlsZSAoIHQtLSApIHtcblx0XHRcdHRtcCA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzWyB0IF0gKSB8fCBbXTtcblx0XHRcdHR5cGUgPSBvcmlnVHlwZSA9IHRtcFsgMSBdO1xuXHRcdFx0bmFtZXNwYWNlcyA9ICggdG1wWyAyIF0gfHwgXCJcIiApLnNwbGl0KCBcIi5cIiApLnNvcnQoKTtcblxuXHRcdFx0Ly8gVGhlcmUgKm11c3QqIGJlIGEgdHlwZSwgbm8gYXR0YWNoaW5nIG5hbWVzcGFjZS1vbmx5IGhhbmRsZXJzXG5cdFx0XHRpZiAoICF0eXBlICkge1xuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgZXZlbnQgY2hhbmdlcyBpdHMgdHlwZSwgdXNlIHRoZSBzcGVjaWFsIGV2ZW50IGhhbmRsZXJzIGZvciB0aGUgY2hhbmdlZCB0eXBlXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIHR5cGUgXSB8fCB7fTtcblxuXHRcdFx0Ly8gSWYgc2VsZWN0b3IgZGVmaW5lZCwgZGV0ZXJtaW5lIHNwZWNpYWwgZXZlbnQgYXBpIHR5cGUsIG90aGVyd2lzZSBnaXZlbiB0eXBlXG5cdFx0XHR0eXBlID0gKCBzZWxlY3RvciA/IHNwZWNpYWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7XG5cblx0XHRcdC8vIFVwZGF0ZSBzcGVjaWFsIGJhc2VkIG9uIG5ld2x5IHJlc2V0IHR5cGVcblx0XHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXG5cdFx0XHQvLyBoYW5kbGVPYmogaXMgcGFzc2VkIHRvIGFsbCBldmVudCBoYW5kbGVyc1xuXHRcdFx0aGFuZGxlT2JqID0galF1ZXJ5LmV4dGVuZCgge1xuXHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRvcmlnVHlwZTogb3JpZ1R5cGUsXG5cdFx0XHRcdGRhdGE6IGRhdGEsXG5cdFx0XHRcdGhhbmRsZXI6IGhhbmRsZXIsXG5cdFx0XHRcdGd1aWQ6IGhhbmRsZXIuZ3VpZCxcblx0XHRcdFx0c2VsZWN0b3I6IHNlbGVjdG9yLFxuXHRcdFx0XHRuZWVkc0NvbnRleHQ6IHNlbGVjdG9yICYmIGpRdWVyeS5leHByLm1hdGNoLm5lZWRzQ29udGV4dC50ZXN0KCBzZWxlY3RvciApLFxuXHRcdFx0XHRuYW1lc3BhY2U6IG5hbWVzcGFjZXMuam9pbiggXCIuXCIgKVxuXHRcdFx0fSwgaGFuZGxlT2JqSW4gKTtcblxuXHRcdFx0Ly8gSW5pdCB0aGUgZXZlbnQgaGFuZGxlciBxdWV1ZSBpZiB3ZSdyZSB0aGUgZmlyc3Rcblx0XHRcdGlmICggISggaGFuZGxlcnMgPSBldmVudHNbIHR5cGUgXSApICkge1xuXHRcdFx0XHRoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdID0gW107XG5cdFx0XHRcdGhhbmRsZXJzLmRlbGVnYXRlQ291bnQgPSAwO1xuXG5cdFx0XHRcdC8vIE9ubHkgdXNlIGFkZEV2ZW50TGlzdGVuZXIgaWYgdGhlIHNwZWNpYWwgZXZlbnRzIGhhbmRsZXIgcmV0dXJucyBmYWxzZVxuXHRcdFx0XHRpZiAoICFzcGVjaWFsLnNldHVwIHx8XG5cdFx0XHRcdFx0c3BlY2lhbC5zZXR1cC5jYWxsKCBlbGVtLCBkYXRhLCBuYW1lc3BhY2VzLCBldmVudEhhbmRsZSApID09PSBmYWxzZSApIHtcblxuXHRcdFx0XHRcdGlmICggZWxlbS5hZGRFdmVudExpc3RlbmVyICkge1xuXHRcdFx0XHRcdFx0ZWxlbS5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBldmVudEhhbmRsZSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIHNwZWNpYWwuYWRkICkge1xuXHRcdFx0XHRzcGVjaWFsLmFkZC5jYWxsKCBlbGVtLCBoYW5kbGVPYmogKTtcblxuXHRcdFx0XHRpZiAoICFoYW5kbGVPYmouaGFuZGxlci5ndWlkICkge1xuXHRcdFx0XHRcdGhhbmRsZU9iai5oYW5kbGVyLmd1aWQgPSBoYW5kbGVyLmd1aWQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Ly8gQWRkIHRvIHRoZSBlbGVtZW50J3MgaGFuZGxlciBsaXN0LCBkZWxlZ2F0ZXMgaW4gZnJvbnRcblx0XHRcdGlmICggc2VsZWN0b3IgKSB7XG5cdFx0XHRcdGhhbmRsZXJzLnNwbGljZSggaGFuZGxlcnMuZGVsZWdhdGVDb3VudCsrLCAwLCBoYW5kbGVPYmogKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGhhbmRsZXJzLnB1c2goIGhhbmRsZU9iaiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBLZWVwIHRyYWNrIG9mIHdoaWNoIGV2ZW50cyBoYXZlIGV2ZXIgYmVlbiB1c2VkLCBmb3IgZXZlbnQgb3B0aW1pemF0aW9uXG5cdFx0XHRqUXVlcnkuZXZlbnQuZ2xvYmFsWyB0eXBlIF0gPSB0cnVlO1xuXHRcdH1cblxuXHR9LFxuXG5cdC8vIERldGFjaCBhbiBldmVudCBvciBzZXQgb2YgZXZlbnRzIGZyb20gYW4gZWxlbWVudFxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBlbGVtLCB0eXBlcywgaGFuZGxlciwgc2VsZWN0b3IsIG1hcHBlZFR5cGVzICkge1xuXG5cdFx0dmFyIGosIG9yaWdDb3VudCwgdG1wLFxuXHRcdFx0ZXZlbnRzLCB0LCBoYW5kbGVPYmosXG5cdFx0XHRzcGVjaWFsLCBoYW5kbGVycywgdHlwZSwgbmFtZXNwYWNlcywgb3JpZ1R5cGUsXG5cdFx0XHRlbGVtRGF0YSA9IGRhdGFQcml2Lmhhc0RhdGEoIGVsZW0gKSAmJiBkYXRhUHJpdi5nZXQoIGVsZW0gKTtcblxuXHRcdGlmICggIWVsZW1EYXRhIHx8ICEoIGV2ZW50cyA9IGVsZW1EYXRhLmV2ZW50cyApICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIE9uY2UgZm9yIGVhY2ggdHlwZS5uYW1lc3BhY2UgaW4gdHlwZXM7IHR5cGUgbWF5IGJlIG9taXR0ZWRcblx0XHR0eXBlcyA9ICggdHlwZXMgfHwgXCJcIiApLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgWyBcIlwiIF07XG5cdFx0dCA9IHR5cGVzLmxlbmd0aDtcblx0XHR3aGlsZSAoIHQtLSApIHtcblx0XHRcdHRtcCA9IHJ0eXBlbmFtZXNwYWNlLmV4ZWMoIHR5cGVzWyB0IF0gKSB8fCBbXTtcblx0XHRcdHR5cGUgPSBvcmlnVHlwZSA9IHRtcFsgMSBdO1xuXHRcdFx0bmFtZXNwYWNlcyA9ICggdG1wWyAyIF0gfHwgXCJcIiApLnNwbGl0KCBcIi5cIiApLnNvcnQoKTtcblxuXHRcdFx0Ly8gVW5iaW5kIGFsbCBldmVudHMgKG9uIHRoaXMgbmFtZXNwYWNlLCBpZiBwcm92aWRlZCkgZm9yIHRoZSBlbGVtZW50XG5cdFx0XHRpZiAoICF0eXBlICkge1xuXHRcdFx0XHRmb3IgKCB0eXBlIGluIGV2ZW50cyApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCBlbGVtLCB0eXBlICsgdHlwZXNbIHQgXSwgaGFuZGxlciwgc2VsZWN0b3IsIHRydWUgKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRjb250aW51ZTtcblx0XHRcdH1cblxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gfHwge307XG5cdFx0XHR0eXBlID0gKCBzZWxlY3RvciA/IHNwZWNpYWwuZGVsZWdhdGVUeXBlIDogc3BlY2lhbC5iaW5kVHlwZSApIHx8IHR5cGU7XG5cdFx0XHRoYW5kbGVycyA9IGV2ZW50c1sgdHlwZSBdIHx8IFtdO1xuXHRcdFx0dG1wID0gdG1wWyAyIF0gJiZcblx0XHRcdFx0bmV3IFJlZ0V4cCggXCIoXnxcXFxcLilcIiArIG5hbWVzcGFjZXMuam9pbiggXCJcXFxcLig/Oi4qXFxcXC58KVwiICkgKyBcIihcXFxcLnwkKVwiICk7XG5cblx0XHRcdC8vIFJlbW92ZSBtYXRjaGluZyBldmVudHNcblx0XHRcdG9yaWdDb3VudCA9IGogPSBoYW5kbGVycy5sZW5ndGg7XG5cdFx0XHR3aGlsZSAoIGotLSApIHtcblx0XHRcdFx0aGFuZGxlT2JqID0gaGFuZGxlcnNbIGogXTtcblxuXHRcdFx0XHRpZiAoICggbWFwcGVkVHlwZXMgfHwgb3JpZ1R5cGUgPT09IGhhbmRsZU9iai5vcmlnVHlwZSApICYmXG5cdFx0XHRcdFx0KCAhaGFuZGxlciB8fCBoYW5kbGVyLmd1aWQgPT09IGhhbmRsZU9iai5ndWlkICkgJiZcblx0XHRcdFx0XHQoICF0bXAgfHwgdG1wLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApICYmXG5cdFx0XHRcdFx0KCAhc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09IGhhbmRsZU9iai5zZWxlY3RvciB8fFxuXHRcdFx0XHRcdFx0c2VsZWN0b3IgPT09IFwiKipcIiAmJiBoYW5kbGVPYmouc2VsZWN0b3IgKSApIHtcblx0XHRcdFx0XHRoYW5kbGVycy5zcGxpY2UoIGosIDEgKTtcblxuXHRcdFx0XHRcdGlmICggaGFuZGxlT2JqLnNlbGVjdG9yICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlcnMuZGVsZWdhdGVDb3VudC0tO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoIHNwZWNpYWwucmVtb3ZlICkge1xuXHRcdFx0XHRcdFx0c3BlY2lhbC5yZW1vdmUuY2FsbCggZWxlbSwgaGFuZGxlT2JqICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJlbW92ZSBnZW5lcmljIGV2ZW50IGhhbmRsZXIgaWYgd2UgcmVtb3ZlZCBzb21ldGhpbmcgYW5kIG5vIG1vcmUgaGFuZGxlcnMgZXhpc3Rcblx0XHRcdC8vIChhdm9pZHMgcG90ZW50aWFsIGZvciBlbmRsZXNzIHJlY3Vyc2lvbiBkdXJpbmcgcmVtb3ZhbCBvZiBzcGVjaWFsIGV2ZW50IGhhbmRsZXJzKVxuXHRcdFx0aWYgKCBvcmlnQ291bnQgJiYgIWhhbmRsZXJzLmxlbmd0aCApIHtcblx0XHRcdFx0aWYgKCAhc3BlY2lhbC50ZWFyZG93biB8fFxuXHRcdFx0XHRcdHNwZWNpYWwudGVhcmRvd24uY2FsbCggZWxlbSwgbmFtZXNwYWNlcywgZWxlbURhdGEuaGFuZGxlICkgPT09IGZhbHNlICkge1xuXG5cdFx0XHRcdFx0alF1ZXJ5LnJlbW92ZUV2ZW50KCBlbGVtLCB0eXBlLCBlbGVtRGF0YS5oYW5kbGUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGRlbGV0ZSBldmVudHNbIHR5cGUgXTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBSZW1vdmUgZGF0YSBhbmQgdGhlIGV4cGFuZG8gaWYgaXQncyBubyBsb25nZXIgdXNlZFxuXHRcdGlmICggalF1ZXJ5LmlzRW1wdHlPYmplY3QoIGV2ZW50cyApICkge1xuXHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBlbGVtLCBcImhhbmRsZSBldmVudHNcIiApO1xuXHRcdH1cblx0fSxcblxuXHRkaXNwYXRjaDogZnVuY3Rpb24oIG5hdGl2ZUV2ZW50ICkge1xuXG5cdFx0dmFyIGksIGosIHJldCwgbWF0Y2hlZCwgaGFuZGxlT2JqLCBoYW5kbGVyUXVldWUsXG5cdFx0XHRhcmdzID0gbmV3IEFycmF5KCBhcmd1bWVudHMubGVuZ3RoICksXG5cblx0XHRcdC8vIE1ha2UgYSB3cml0YWJsZSBqUXVlcnkuRXZlbnQgZnJvbSB0aGUgbmF0aXZlIGV2ZW50IG9iamVjdFxuXHRcdFx0ZXZlbnQgPSBqUXVlcnkuZXZlbnQuZml4KCBuYXRpdmVFdmVudCApLFxuXG5cdFx0XHRoYW5kbGVycyA9IChcblx0XHRcdFx0ZGF0YVByaXYuZ2V0KCB0aGlzLCBcImV2ZW50c1wiICkgfHwgT2JqZWN0LmNyZWF0ZSggbnVsbCApXG5cdFx0XHQpWyBldmVudC50eXBlIF0gfHwgW10sXG5cdFx0XHRzcGVjaWFsID0galF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGV2ZW50LnR5cGUgXSB8fCB7fTtcblxuXHRcdC8vIFVzZSB0aGUgZml4LWVkIGpRdWVyeS5FdmVudCByYXRoZXIgdGhhbiB0aGUgKHJlYWQtb25seSkgbmF0aXZlIGV2ZW50XG5cdFx0YXJnc1sgMCBdID0gZXZlbnQ7XG5cblx0XHRmb3IgKCBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKyApIHtcblx0XHRcdGFyZ3NbIGkgXSA9IGFyZ3VtZW50c1sgaSBdO1xuXHRcdH1cblxuXHRcdGV2ZW50LmRlbGVnYXRlVGFyZ2V0ID0gdGhpcztcblxuXHRcdC8vIENhbGwgdGhlIHByZURpc3BhdGNoIGhvb2sgZm9yIHRoZSBtYXBwZWQgdHlwZSwgYW5kIGxldCBpdCBiYWlsIGlmIGRlc2lyZWRcblx0XHRpZiAoIHNwZWNpYWwucHJlRGlzcGF0Y2ggJiYgc3BlY2lhbC5wcmVEaXNwYXRjaC5jYWxsKCB0aGlzLCBldmVudCApID09PSBmYWxzZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBEZXRlcm1pbmUgaGFuZGxlcnNcblx0XHRoYW5kbGVyUXVldWUgPSBqUXVlcnkuZXZlbnQuaGFuZGxlcnMuY2FsbCggdGhpcywgZXZlbnQsIGhhbmRsZXJzICk7XG5cblx0XHQvLyBSdW4gZGVsZWdhdGVzIGZpcnN0OyB0aGV5IG1heSB3YW50IHRvIHN0b3AgcHJvcGFnYXRpb24gYmVuZWF0aCB1c1xuXHRcdGkgPSAwO1xuXHRcdHdoaWxlICggKCBtYXRjaGVkID0gaGFuZGxlclF1ZXVlWyBpKysgXSApICYmICFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0ZXZlbnQuY3VycmVudFRhcmdldCA9IG1hdGNoZWQuZWxlbTtcblxuXHRcdFx0aiA9IDA7XG5cdFx0XHR3aGlsZSAoICggaGFuZGxlT2JqID0gbWF0Y2hlZC5oYW5kbGVyc1sgaisrIF0gKSAmJlxuXHRcdFx0XHQhZXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKSApIHtcblxuXHRcdFx0XHQvLyBJZiB0aGUgZXZlbnQgaXMgbmFtZXNwYWNlZCwgdGhlbiBlYWNoIGhhbmRsZXIgaXMgb25seSBpbnZva2VkIGlmIGl0IGlzXG5cdFx0XHRcdC8vIHNwZWNpYWxseSB1bml2ZXJzYWwgb3IgaXRzIG5hbWVzcGFjZXMgYXJlIGEgc3VwZXJzZXQgb2YgdGhlIGV2ZW50J3MuXG5cdFx0XHRcdGlmICggIWV2ZW50LnJuYW1lc3BhY2UgfHwgaGFuZGxlT2JqLm5hbWVzcGFjZSA9PT0gZmFsc2UgfHxcblx0XHRcdFx0XHRldmVudC5ybmFtZXNwYWNlLnRlc3QoIGhhbmRsZU9iai5uYW1lc3BhY2UgKSApIHtcblxuXHRcdFx0XHRcdGV2ZW50LmhhbmRsZU9iaiA9IGhhbmRsZU9iajtcblx0XHRcdFx0XHRldmVudC5kYXRhID0gaGFuZGxlT2JqLmRhdGE7XG5cblx0XHRcdFx0XHRyZXQgPSAoICggalF1ZXJ5LmV2ZW50LnNwZWNpYWxbIGhhbmRsZU9iai5vcmlnVHlwZSBdIHx8IHt9ICkuaGFuZGxlIHx8XG5cdFx0XHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlciApLmFwcGx5KCBtYXRjaGVkLmVsZW0sIGFyZ3MgKTtcblxuXHRcdFx0XHRcdGlmICggcmV0ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0XHRpZiAoICggZXZlbnQucmVzdWx0ID0gcmV0ICkgPT09IGZhbHNlICkge1xuXHRcdFx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHRcdFx0XHRldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWxsIHRoZSBwb3N0RGlzcGF0Y2ggaG9vayBmb3IgdGhlIG1hcHBlZCB0eXBlXG5cdFx0aWYgKCBzcGVjaWFsLnBvc3REaXNwYXRjaCApIHtcblx0XHRcdHNwZWNpYWwucG9zdERpc3BhdGNoLmNhbGwoIHRoaXMsIGV2ZW50ICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGV2ZW50LnJlc3VsdDtcblx0fSxcblxuXHRoYW5kbGVyczogZnVuY3Rpb24oIGV2ZW50LCBoYW5kbGVycyApIHtcblx0XHR2YXIgaSwgaGFuZGxlT2JqLCBzZWwsIG1hdGNoZWRIYW5kbGVycywgbWF0Y2hlZFNlbGVjdG9ycyxcblx0XHRcdGhhbmRsZXJRdWV1ZSA9IFtdLFxuXHRcdFx0ZGVsZWdhdGVDb3VudCA9IGhhbmRsZXJzLmRlbGVnYXRlQ291bnQsXG5cdFx0XHRjdXIgPSBldmVudC50YXJnZXQ7XG5cblx0XHQvLyBGaW5kIGRlbGVnYXRlIGhhbmRsZXJzXG5cdFx0aWYgKCBkZWxlZ2F0ZUNvdW50ICYmXG5cblx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OVxuXHRcdFx0Ly8gQmxhY2staG9sZSBTVkcgPHVzZT4gaW5zdGFuY2UgdHJlZXMgKHRyYWMtMTMxODApXG5cdFx0XHRjdXIubm9kZVR5cGUgJiZcblxuXHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCA8PTQyXG5cdFx0XHQvLyBTdXBwcmVzcyBzcGVjLXZpb2xhdGluZyBjbGlja3MgaW5kaWNhdGluZyBhIG5vbi1wcmltYXJ5IHBvaW50ZXIgYnV0dG9uICh0cmFjLTM4NjEpXG5cdFx0XHQvLyBodHRwczovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudC10eXBlLWNsaWNrXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSAxMSBvbmx5XG5cdFx0XHQvLyAuLi5idXQgbm90IGFycm93IGtleSBcImNsaWNrc1wiIG9mIHJhZGlvIGlucHV0cywgd2hpY2ggY2FuIGhhdmUgYGJ1dHRvbmAgLTEgKGdoLTIzNDMpXG5cdFx0XHQhKCBldmVudC50eXBlID09PSBcImNsaWNrXCIgJiYgZXZlbnQuYnV0dG9uID49IDEgKSApIHtcblxuXHRcdFx0Zm9yICggOyBjdXIgIT09IHRoaXM7IGN1ciA9IGN1ci5wYXJlbnROb2RlIHx8IHRoaXMgKSB7XG5cblx0XHRcdFx0Ly8gRG9uJ3QgY2hlY2sgbm9uLWVsZW1lbnRzICgjMTMyMDgpXG5cdFx0XHRcdC8vIERvbid0IHByb2Nlc3MgY2xpY2tzIG9uIGRpc2FibGVkIGVsZW1lbnRzICgjNjkxMSwgIzgxNjUsICMxMTM4MiwgIzExNzY0KVxuXHRcdFx0XHRpZiAoIGN1ci5ub2RlVHlwZSA9PT0gMSAmJiAhKCBldmVudC50eXBlID09PSBcImNsaWNrXCIgJiYgY3VyLmRpc2FibGVkID09PSB0cnVlICkgKSB7XG5cdFx0XHRcdFx0bWF0Y2hlZEhhbmRsZXJzID0gW107XG5cdFx0XHRcdFx0bWF0Y2hlZFNlbGVjdG9ycyA9IHt9O1xuXHRcdFx0XHRcdGZvciAoIGkgPSAwOyBpIDwgZGVsZWdhdGVDb3VudDsgaSsrICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlT2JqID0gaGFuZGxlcnNbIGkgXTtcblxuXHRcdFx0XHRcdFx0Ly8gRG9uJ3QgY29uZmxpY3Qgd2l0aCBPYmplY3QucHJvdG90eXBlIHByb3BlcnRpZXMgKCMxMzIwMylcblx0XHRcdFx0XHRcdHNlbCA9IGhhbmRsZU9iai5zZWxlY3RvciArIFwiIFwiO1xuXG5cdFx0XHRcdFx0XHRpZiAoIG1hdGNoZWRTZWxlY3RvcnNbIHNlbCBdID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0XHRcdG1hdGNoZWRTZWxlY3RvcnNbIHNlbCBdID0gaGFuZGxlT2JqLm5lZWRzQ29udGV4dCA/XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5KCBzZWwsIHRoaXMgKS5pbmRleCggY3VyICkgPiAtMSA6XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LmZpbmQoIHNlbCwgdGhpcywgbnVsbCwgWyBjdXIgXSApLmxlbmd0aDtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdGlmICggbWF0Y2hlZFNlbGVjdG9yc1sgc2VsIF0gKSB7XG5cdFx0XHRcdFx0XHRcdG1hdGNoZWRIYW5kbGVycy5wdXNoKCBoYW5kbGVPYmogKTtcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBtYXRjaGVkSGFuZGxlcnMubGVuZ3RoICkge1xuXHRcdFx0XHRcdFx0aGFuZGxlclF1ZXVlLnB1c2goIHsgZWxlbTogY3VyLCBoYW5kbGVyczogbWF0Y2hlZEhhbmRsZXJzIH0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBBZGQgdGhlIHJlbWFpbmluZyAoZGlyZWN0bHktYm91bmQpIGhhbmRsZXJzXG5cdFx0Y3VyID0gdGhpcztcblx0XHRpZiAoIGRlbGVnYXRlQ291bnQgPCBoYW5kbGVycy5sZW5ndGggKSB7XG5cdFx0XHRoYW5kbGVyUXVldWUucHVzaCggeyBlbGVtOiBjdXIsIGhhbmRsZXJzOiBoYW5kbGVycy5zbGljZSggZGVsZWdhdGVDb3VudCApIH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gaGFuZGxlclF1ZXVlO1xuXHR9LFxuXG5cdGFkZFByb3A6IGZ1bmN0aW9uKCBuYW1lLCBob29rICkge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eSggalF1ZXJ5LkV2ZW50LnByb3RvdHlwZSwgbmFtZSwge1xuXHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblxuXHRcdFx0Z2V0OiBpc0Z1bmN0aW9uKCBob29rICkgP1xuXHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIHRoaXMub3JpZ2luYWxFdmVudCApIHtcblx0XHRcdFx0XHRcdHJldHVybiBob29rKCB0aGlzLm9yaWdpbmFsRXZlbnQgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0gOlxuXHRcdFx0XHRmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRpZiAoIHRoaXMub3JpZ2luYWxFdmVudCApIHtcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLm9yaWdpbmFsRXZlbnRbIG5hbWUgXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH0sXG5cblx0XHRcdHNldDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoIHRoaXMsIG5hbWUsIHtcblx0XHRcdFx0XHRlbnVtZXJhYmxlOiB0cnVlLFxuXHRcdFx0XHRcdGNvbmZpZ3VyYWJsZTogdHJ1ZSxcblx0XHRcdFx0XHR3cml0YWJsZTogdHJ1ZSxcblx0XHRcdFx0XHR2YWx1ZTogdmFsdWVcblx0XHRcdFx0fSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRmaXg6IGZ1bmN0aW9uKCBvcmlnaW5hbEV2ZW50ICkge1xuXHRcdHJldHVybiBvcmlnaW5hbEV2ZW50WyBqUXVlcnkuZXhwYW5kbyBdID9cblx0XHRcdG9yaWdpbmFsRXZlbnQgOlxuXHRcdFx0bmV3IGpRdWVyeS5FdmVudCggb3JpZ2luYWxFdmVudCApO1xuXHR9LFxuXG5cdHNwZWNpYWw6IHtcblx0XHRsb2FkOiB7XG5cblx0XHRcdC8vIFByZXZlbnQgdHJpZ2dlcmVkIGltYWdlLmxvYWQgZXZlbnRzIGZyb20gYnViYmxpbmcgdG8gd2luZG93LmxvYWRcblx0XHRcdG5vQnViYmxlOiB0cnVlXG5cdFx0fSxcblx0XHRjbGljazoge1xuXG5cdFx0XHQvLyBVdGlsaXplIG5hdGl2ZSBldmVudCB0byBlbnN1cmUgY29ycmVjdCBzdGF0ZSBmb3IgY2hlY2thYmxlIGlucHV0c1xuXHRcdFx0c2V0dXA6IGZ1bmN0aW9uKCBkYXRhICkge1xuXG5cdFx0XHRcdC8vIEZvciBtdXR1YWwgY29tcHJlc3NpYmlsaXR5IHdpdGggX2RlZmF1bHQsIHJlcGxhY2UgYHRoaXNgIGFjY2VzcyB3aXRoIGEgbG9jYWwgdmFyLlxuXHRcdFx0XHQvLyBgfHwgZGF0YWAgaXMgZGVhZCBjb2RlIG1lYW50IG9ubHkgdG8gcHJlc2VydmUgdGhlIHZhcmlhYmxlIHRocm91Z2ggbWluaWZpY2F0aW9uLlxuXHRcdFx0XHR2YXIgZWwgPSB0aGlzIHx8IGRhdGE7XG5cblx0XHRcdFx0Ly8gQ2xhaW0gdGhlIGZpcnN0IGhhbmRsZXJcblx0XHRcdFx0aWYgKCByY2hlY2thYmxlVHlwZS50ZXN0KCBlbC50eXBlICkgJiZcblx0XHRcdFx0XHRlbC5jbGljayAmJiBub2RlTmFtZSggZWwsIFwiaW5wdXRcIiApICkge1xuXG5cdFx0XHRcdFx0Ly8gZGF0YVByaXYuc2V0KCBlbCwgXCJjbGlja1wiLCAuLi4gKVxuXHRcdFx0XHRcdGxldmVyYWdlTmF0aXZlKCBlbCwgXCJjbGlja1wiLCByZXR1cm5UcnVlICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZXR1cm4gZmFsc2UgdG8gYWxsb3cgbm9ybWFsIHByb2Nlc3NpbmcgaW4gdGhlIGNhbGxlclxuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9LFxuXHRcdFx0dHJpZ2dlcjogZnVuY3Rpb24oIGRhdGEgKSB7XG5cblx0XHRcdFx0Ly8gRm9yIG11dHVhbCBjb21wcmVzc2liaWxpdHkgd2l0aCBfZGVmYXVsdCwgcmVwbGFjZSBgdGhpc2AgYWNjZXNzIHdpdGggYSBsb2NhbCB2YXIuXG5cdFx0XHRcdC8vIGB8fCBkYXRhYCBpcyBkZWFkIGNvZGUgbWVhbnQgb25seSB0byBwcmVzZXJ2ZSB0aGUgdmFyaWFibGUgdGhyb3VnaCBtaW5pZmljYXRpb24uXG5cdFx0XHRcdHZhciBlbCA9IHRoaXMgfHwgZGF0YTtcblxuXHRcdFx0XHQvLyBGb3JjZSBzZXR1cCBiZWZvcmUgdHJpZ2dlcmluZyBhIGNsaWNrXG5cdFx0XHRcdGlmICggcmNoZWNrYWJsZVR5cGUudGVzdCggZWwudHlwZSApICYmXG5cdFx0XHRcdFx0ZWwuY2xpY2sgJiYgbm9kZU5hbWUoIGVsLCBcImlucHV0XCIgKSApIHtcblxuXHRcdFx0XHRcdGxldmVyYWdlTmF0aXZlKCBlbCwgXCJjbGlja1wiICk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBSZXR1cm4gbm9uLWZhbHNlIHRvIGFsbG93IG5vcm1hbCBldmVudC1wYXRoIHByb3BhZ2F0aW9uXG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fSxcblxuXHRcdFx0Ly8gRm9yIGNyb3NzLWJyb3dzZXIgY29uc2lzdGVuY3ksIHN1cHByZXNzIG5hdGl2ZSAuY2xpY2soKSBvbiBsaW5rc1xuXHRcdFx0Ly8gQWxzbyBwcmV2ZW50IGl0IGlmIHdlJ3JlIGN1cnJlbnRseSBpbnNpZGUgYSBsZXZlcmFnZWQgbmF0aXZlLWV2ZW50IHN0YWNrXG5cdFx0XHRfZGVmYXVsdDogZnVuY3Rpb24oIGV2ZW50ICkge1xuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0O1xuXHRcdFx0XHRyZXR1cm4gcmNoZWNrYWJsZVR5cGUudGVzdCggdGFyZ2V0LnR5cGUgKSAmJlxuXHRcdFx0XHRcdHRhcmdldC5jbGljayAmJiBub2RlTmFtZSggdGFyZ2V0LCBcImlucHV0XCIgKSAmJlxuXHRcdFx0XHRcdGRhdGFQcml2LmdldCggdGFyZ2V0LCBcImNsaWNrXCIgKSB8fFxuXHRcdFx0XHRcdG5vZGVOYW1lKCB0YXJnZXQsIFwiYVwiICk7XG5cdFx0XHR9XG5cdFx0fSxcblxuXHRcdGJlZm9yZXVubG9hZDoge1xuXHRcdFx0cG9zdERpc3BhdGNoOiBmdW5jdGlvbiggZXZlbnQgKSB7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogRmlyZWZveCAyMCtcblx0XHRcdFx0Ly8gRmlyZWZveCBkb2Vzbid0IGFsZXJ0IGlmIHRoZSByZXR1cm5WYWx1ZSBmaWVsZCBpcyBub3Qgc2V0LlxuXHRcdFx0XHRpZiAoIGV2ZW50LnJlc3VsdCAhPT0gdW5kZWZpbmVkICYmIGV2ZW50Lm9yaWdpbmFsRXZlbnQgKSB7XG5cdFx0XHRcdFx0ZXZlbnQub3JpZ2luYWxFdmVudC5yZXR1cm5WYWx1ZSA9IGV2ZW50LnJlc3VsdDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxufTtcblxuLy8gRW5zdXJlIHRoZSBwcmVzZW5jZSBvZiBhbiBldmVudCBsaXN0ZW5lciB0aGF0IGhhbmRsZXMgbWFudWFsbHktdHJpZ2dlcmVkXG4vLyBzeW50aGV0aWMgZXZlbnRzIGJ5IGludGVycnVwdGluZyBwcm9ncmVzcyB1bnRpbCByZWludm9rZWQgaW4gcmVzcG9uc2UgdG9cbi8vICpuYXRpdmUqIGV2ZW50cyB0aGF0IGl0IGZpcmVzIGRpcmVjdGx5LCBlbnN1cmluZyB0aGF0IHN0YXRlIGNoYW5nZXMgaGF2ZVxuLy8gYWxyZWFkeSBvY2N1cnJlZCBiZWZvcmUgb3RoZXIgbGlzdGVuZXJzIGFyZSBpbnZva2VkLlxuZnVuY3Rpb24gbGV2ZXJhZ2VOYXRpdmUoIGVsLCB0eXBlLCBleHBlY3RTeW5jICkge1xuXG5cdC8vIE1pc3NpbmcgZXhwZWN0U3luYyBpbmRpY2F0ZXMgYSB0cmlnZ2VyIGNhbGwsIHdoaWNoIG11c3QgZm9yY2Ugc2V0dXAgdGhyb3VnaCBqUXVlcnkuZXZlbnQuYWRkXG5cdGlmICggIWV4cGVjdFN5bmMgKSB7XG5cdFx0aWYgKCBkYXRhUHJpdi5nZXQoIGVsLCB0eXBlICkgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGpRdWVyeS5ldmVudC5hZGQoIGVsLCB0eXBlLCByZXR1cm5UcnVlICk7XG5cdFx0fVxuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIFJlZ2lzdGVyIHRoZSBjb250cm9sbGVyIGFzIGEgc3BlY2lhbCB1bml2ZXJzYWwgaGFuZGxlciBmb3IgYWxsIGV2ZW50IG5hbWVzcGFjZXNcblx0ZGF0YVByaXYuc2V0KCBlbCwgdHlwZSwgZmFsc2UgKTtcblx0alF1ZXJ5LmV2ZW50LmFkZCggZWwsIHR5cGUsIHtcblx0XHRuYW1lc3BhY2U6IGZhbHNlLFxuXHRcdGhhbmRsZXI6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHZhciBub3RBc3luYywgcmVzdWx0LFxuXHRcdFx0XHRzYXZlZCA9IGRhdGFQcml2LmdldCggdGhpcywgdHlwZSApO1xuXG5cdFx0XHRpZiAoICggZXZlbnQuaXNUcmlnZ2VyICYgMSApICYmIHRoaXNbIHR5cGUgXSApIHtcblxuXHRcdFx0XHQvLyBJbnRlcnJ1cHQgcHJvY2Vzc2luZyBvZiB0aGUgb3V0ZXIgc3ludGhldGljIC50cmlnZ2VyKCllZCBldmVudFxuXHRcdFx0XHQvLyBTYXZlZCBkYXRhIHNob3VsZCBiZSBmYWxzZSBpbiBzdWNoIGNhc2VzLCBidXQgbWlnaHQgYmUgYSBsZWZ0b3ZlciBjYXB0dXJlIG9iamVjdFxuXHRcdFx0XHQvLyBmcm9tIGFuIGFzeW5jIG5hdGl2ZSBoYW5kbGVyIChnaC00MzUwKVxuXHRcdFx0XHRpZiAoICFzYXZlZC5sZW5ndGggKSB7XG5cblx0XHRcdFx0XHQvLyBTdG9yZSBhcmd1bWVudHMgZm9yIHVzZSB3aGVuIGhhbmRsaW5nIHRoZSBpbm5lciBuYXRpdmUgZXZlbnRcblx0XHRcdFx0XHQvLyBUaGVyZSB3aWxsIGFsd2F5cyBiZSBhdCBsZWFzdCBvbmUgYXJndW1lbnQgKGFuIGV2ZW50IG9iamVjdCksIHNvIHRoaXMgYXJyYXlcblx0XHRcdFx0XHQvLyB3aWxsIG5vdCBiZSBjb25mdXNlZCB3aXRoIGEgbGVmdG92ZXIgY2FwdHVyZSBvYmplY3QuXG5cdFx0XHRcdFx0c2F2ZWQgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMgKTtcblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIHR5cGUsIHNhdmVkICk7XG5cblx0XHRcdFx0XHQvLyBUcmlnZ2VyIHRoZSBuYXRpdmUgZXZlbnQgYW5kIGNhcHR1cmUgaXRzIHJlc3VsdFxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExK1xuXHRcdFx0XHRcdC8vIGZvY3VzKCkgYW5kIGJsdXIoKSBhcmUgYXN5bmNocm9ub3VzXG5cdFx0XHRcdFx0bm90QXN5bmMgPSBleHBlY3RTeW5jKCB0aGlzLCB0eXBlICk7XG5cdFx0XHRcdFx0dGhpc1sgdHlwZSBdKCk7XG5cdFx0XHRcdFx0cmVzdWx0ID0gZGF0YVByaXYuZ2V0KCB0aGlzLCB0eXBlICk7XG5cdFx0XHRcdFx0aWYgKCBzYXZlZCAhPT0gcmVzdWx0IHx8IG5vdEFzeW5jICkge1xuXHRcdFx0XHRcdFx0ZGF0YVByaXYuc2V0KCB0aGlzLCB0eXBlLCBmYWxzZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRyZXN1bHQgPSB7fTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0aWYgKCBzYXZlZCAhPT0gcmVzdWx0ICkge1xuXG5cdFx0XHRcdFx0XHQvLyBDYW5jZWwgdGhlIG91dGVyIHN5bnRoZXRpYyBldmVudFxuXHRcdFx0XHRcdFx0ZXZlbnQuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7XG5cdFx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG5cdFx0XHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgODYrXG5cdFx0XHRcdFx0XHQvLyBJbiBDaHJvbWUsIGlmIGFuIGVsZW1lbnQgaGF2aW5nIGEgZm9jdXNvdXQgaGFuZGxlciBpcyBibHVycmVkIGJ5XG5cdFx0XHRcdFx0XHQvLyBjbGlja2luZyBvdXRzaWRlIG9mIGl0LCBpdCBpbnZva2VzIHRoZSBoYW5kbGVyIHN5bmNocm9ub3VzbHkuIElmXG5cdFx0XHRcdFx0XHQvLyB0aGF0IGhhbmRsZXIgY2FsbHMgYC5yZW1vdmUoKWAgb24gdGhlIGVsZW1lbnQsIHRoZSBkYXRhIGlzIGNsZWFyZWQsXG5cdFx0XHRcdFx0XHQvLyBsZWF2aW5nIGByZXN1bHRgIHVuZGVmaW5lZC4gV2UgbmVlZCB0byBndWFyZCBhZ2FpbnN0IHRoaXMuXG5cdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0ICYmIHJlc3VsdC52YWx1ZTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSWYgdGhpcyBpcyBhbiBpbm5lciBzeW50aGV0aWMgZXZlbnQgZm9yIGFuIGV2ZW50IHdpdGggYSBidWJibGluZyBzdXJyb2dhdGVcblx0XHRcdFx0Ly8gKGZvY3VzIG9yIGJsdXIpLCBhc3N1bWUgdGhhdCB0aGUgc3Vycm9nYXRlIGFscmVhZHkgcHJvcGFnYXRlZCBmcm9tIHRyaWdnZXJpbmcgdGhlXG5cdFx0XHRcdC8vIG5hdGl2ZSBldmVudCBhbmQgcHJldmVudCB0aGF0IGZyb20gaGFwcGVuaW5nIGFnYWluIGhlcmUuXG5cdFx0XHRcdC8vIFRoaXMgdGVjaG5pY2FsbHkgZ2V0cyB0aGUgb3JkZXJpbmcgd3Jvbmcgdy5yLnQuIHRvIGAudHJpZ2dlcigpYCAoaW4gd2hpY2ggdGhlXG5cdFx0XHRcdC8vIGJ1YmJsaW5nIHN1cnJvZ2F0ZSBwcm9wYWdhdGVzICphZnRlciogdGhlIG5vbi1idWJibGluZyBiYXNlKSwgYnV0IHRoYXQgc2VlbXNcblx0XHRcdFx0Ly8gbGVzcyBiYWQgdGhhbiBkdXBsaWNhdGlvbi5cblx0XHRcdFx0fSBlbHNlIGlmICggKCBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9ICkuZGVsZWdhdGVUeXBlICkge1xuXHRcdFx0XHRcdGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuXHRcdFx0XHR9XG5cblx0XHRcdC8vIElmIHRoaXMgaXMgYSBuYXRpdmUgZXZlbnQgdHJpZ2dlcmVkIGFib3ZlLCBldmVyeXRoaW5nIGlzIG5vdyBpbiBvcmRlclxuXHRcdFx0Ly8gRmlyZSBhbiBpbm5lciBzeW50aGV0aWMgZXZlbnQgd2l0aCB0aGUgb3JpZ2luYWwgYXJndW1lbnRzXG5cdFx0XHR9IGVsc2UgaWYgKCBzYXZlZC5sZW5ndGggKSB7XG5cblx0XHRcdFx0Ly8gLi4uYW5kIGNhcHR1cmUgdGhlIHJlc3VsdFxuXHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIHR5cGUsIHtcblx0XHRcdFx0XHR2YWx1ZTogalF1ZXJ5LmV2ZW50LnRyaWdnZXIoXG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExK1xuXHRcdFx0XHRcdFx0Ly8gRXh0ZW5kIHdpdGggdGhlIHByb3RvdHlwZSB0byByZXNldCB0aGUgYWJvdmUgc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKClcblx0XHRcdFx0XHRcdGpRdWVyeS5leHRlbmQoIHNhdmVkWyAwIF0sIGpRdWVyeS5FdmVudC5wcm90b3R5cGUgKSxcblx0XHRcdFx0XHRcdHNhdmVkLnNsaWNlKCAxICksXG5cdFx0XHRcdFx0XHR0aGlzXG5cdFx0XHRcdFx0KVxuXHRcdFx0XHR9ICk7XG5cblx0XHRcdFx0Ly8gQWJvcnQgaGFuZGxpbmcgb2YgdGhlIG5hdGl2ZSBldmVudFxuXHRcdFx0XHRldmVudC5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTtcblx0XHRcdH1cblx0XHR9XG5cdH0gKTtcbn1cblxualF1ZXJ5LnJlbW92ZUV2ZW50ID0gZnVuY3Rpb24oIGVsZW0sIHR5cGUsIGhhbmRsZSApIHtcblxuXHQvLyBUaGlzIFwiaWZcIiBpcyBuZWVkZWQgZm9yIHBsYWluIG9iamVjdHNcblx0aWYgKCBlbGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIgKSB7XG5cdFx0ZWxlbS5yZW1vdmVFdmVudExpc3RlbmVyKCB0eXBlLCBoYW5kbGUgKTtcblx0fVxufTtcblxualF1ZXJ5LkV2ZW50ID0gZnVuY3Rpb24oIHNyYywgcHJvcHMgKSB7XG5cblx0Ly8gQWxsb3cgaW5zdGFudGlhdGlvbiB3aXRob3V0IHRoZSAnbmV3JyBrZXl3b3JkXG5cdGlmICggISggdGhpcyBpbnN0YW5jZW9mIGpRdWVyeS5FdmVudCApICkge1xuXHRcdHJldHVybiBuZXcgalF1ZXJ5LkV2ZW50KCBzcmMsIHByb3BzICk7XG5cdH1cblxuXHQvLyBFdmVudCBvYmplY3Rcblx0aWYgKCBzcmMgJiYgc3JjLnR5cGUgKSB7XG5cdFx0dGhpcy5vcmlnaW5hbEV2ZW50ID0gc3JjO1xuXHRcdHRoaXMudHlwZSA9IHNyYy50eXBlO1xuXG5cdFx0Ly8gRXZlbnRzIGJ1YmJsaW5nIHVwIHRoZSBkb2N1bWVudCBtYXkgaGF2ZSBiZWVuIG1hcmtlZCBhcyBwcmV2ZW50ZWRcblx0XHQvLyBieSBhIGhhbmRsZXIgbG93ZXIgZG93biB0aGUgdHJlZTsgcmVmbGVjdCB0aGUgY29ycmVjdCB2YWx1ZS5cblx0XHR0aGlzLmlzRGVmYXVsdFByZXZlbnRlZCA9IHNyYy5kZWZhdWx0UHJldmVudGVkIHx8XG5cdFx0XHRcdHNyYy5kZWZhdWx0UHJldmVudGVkID09PSB1bmRlZmluZWQgJiZcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDw9Mi4zIG9ubHlcblx0XHRcdFx0c3JjLnJldHVyblZhbHVlID09PSBmYWxzZSA/XG5cdFx0XHRyZXR1cm5UcnVlIDpcblx0XHRcdHJldHVybkZhbHNlO1xuXG5cdFx0Ly8gQ3JlYXRlIHRhcmdldCBwcm9wZXJ0aWVzXG5cdFx0Ly8gU3VwcG9ydDogU2FmYXJpIDw9NiAtIDcgb25seVxuXHRcdC8vIFRhcmdldCBzaG91bGQgbm90IGJlIGEgdGV4dCBub2RlICgjNTA0LCAjMTMxNDMpXG5cdFx0dGhpcy50YXJnZXQgPSAoIHNyYy50YXJnZXQgJiYgc3JjLnRhcmdldC5ub2RlVHlwZSA9PT0gMyApID9cblx0XHRcdHNyYy50YXJnZXQucGFyZW50Tm9kZSA6XG5cdFx0XHRzcmMudGFyZ2V0O1xuXG5cdFx0dGhpcy5jdXJyZW50VGFyZ2V0ID0gc3JjLmN1cnJlbnRUYXJnZXQ7XG5cdFx0dGhpcy5yZWxhdGVkVGFyZ2V0ID0gc3JjLnJlbGF0ZWRUYXJnZXQ7XG5cblx0Ly8gRXZlbnQgdHlwZVxuXHR9IGVsc2Uge1xuXHRcdHRoaXMudHlwZSA9IHNyYztcblx0fVxuXG5cdC8vIFB1dCBleHBsaWNpdGx5IHByb3ZpZGVkIHByb3BlcnRpZXMgb250byB0aGUgZXZlbnQgb2JqZWN0XG5cdGlmICggcHJvcHMgKSB7XG5cdFx0alF1ZXJ5LmV4dGVuZCggdGhpcywgcHJvcHMgKTtcblx0fVxuXG5cdC8vIENyZWF0ZSBhIHRpbWVzdGFtcCBpZiBpbmNvbWluZyBldmVudCBkb2Vzbid0IGhhdmUgb25lXG5cdHRoaXMudGltZVN0YW1wID0gc3JjICYmIHNyYy50aW1lU3RhbXAgfHwgRGF0ZS5ub3coKTtcblxuXHQvLyBNYXJrIGl0IGFzIGZpeGVkXG5cdHRoaXNbIGpRdWVyeS5leHBhbmRvIF0gPSB0cnVlO1xufTtcblxuLy8galF1ZXJ5LkV2ZW50IGlzIGJhc2VkIG9uIERPTTMgRXZlbnRzIGFzIHNwZWNpZmllZCBieSB0aGUgRUNNQVNjcmlwdCBMYW5ndWFnZSBCaW5kaW5nXG4vLyBodHRwczovL3d3dy53My5vcmcvVFIvMjAwMy9XRC1ET00tTGV2ZWwtMy1FdmVudHMtMjAwMzAzMzEvZWNtYS1zY3JpcHQtYmluZGluZy5odG1sXG5qUXVlcnkuRXZlbnQucHJvdG90eXBlID0ge1xuXHRjb25zdHJ1Y3RvcjogalF1ZXJ5LkV2ZW50LFxuXHRpc0RlZmF1bHRQcmV2ZW50ZWQ6IHJldHVybkZhbHNlLFxuXHRpc1Byb3BhZ2F0aW9uU3RvcHBlZDogcmV0dXJuRmFsc2UsXG5cdGlzSW1tZWRpYXRlUHJvcGFnYXRpb25TdG9wcGVkOiByZXR1cm5GYWxzZSxcblx0aXNTaW11bGF0ZWQ6IGZhbHNlLFxuXG5cdHByZXZlbnREZWZhdWx0OiBmdW5jdGlvbigpIHtcblx0XHR2YXIgZSA9IHRoaXMub3JpZ2luYWxFdmVudDtcblxuXHRcdHRoaXMuaXNEZWZhdWx0UHJldmVudGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUucHJldmVudERlZmF1bHQoKTtcblx0XHR9XG5cdH0sXG5cdHN0b3BQcm9wYWdhdGlvbjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGUgPSB0aGlzLm9yaWdpbmFsRXZlbnQ7XG5cblx0XHR0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkID0gcmV0dXJuVHJ1ZTtcblxuXHRcdGlmICggZSAmJiAhdGhpcy5pc1NpbXVsYXRlZCApIHtcblx0XHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdFx0fVxuXHR9LFxuXHRzdG9wSW1tZWRpYXRlUHJvcGFnYXRpb246IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBlID0gdGhpcy5vcmlnaW5hbEV2ZW50O1xuXG5cdFx0dGhpcy5pc0ltbWVkaWF0ZVByb3BhZ2F0aW9uU3RvcHBlZCA9IHJldHVyblRydWU7XG5cblx0XHRpZiAoIGUgJiYgIXRoaXMuaXNTaW11bGF0ZWQgKSB7XG5cdFx0XHRlLnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbigpO1xuXHRcdH1cblxuXHRcdHRoaXMuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdH1cbn07XG5cbi8vIEluY2x1ZGVzIGFsbCBjb21tb24gZXZlbnQgcHJvcHMgaW5jbHVkaW5nIEtleUV2ZW50IGFuZCBNb3VzZUV2ZW50IHNwZWNpZmljIHByb3BzXG5qUXVlcnkuZWFjaCgge1xuXHRhbHRLZXk6IHRydWUsXG5cdGJ1YmJsZXM6IHRydWUsXG5cdGNhbmNlbGFibGU6IHRydWUsXG5cdGNoYW5nZWRUb3VjaGVzOiB0cnVlLFxuXHRjdHJsS2V5OiB0cnVlLFxuXHRkZXRhaWw6IHRydWUsXG5cdGV2ZW50UGhhc2U6IHRydWUsXG5cdG1ldGFLZXk6IHRydWUsXG5cdHBhZ2VYOiB0cnVlLFxuXHRwYWdlWTogdHJ1ZSxcblx0c2hpZnRLZXk6IHRydWUsXG5cdHZpZXc6IHRydWUsXG5cdFwiY2hhclwiOiB0cnVlLFxuXHRjb2RlOiB0cnVlLFxuXHRjaGFyQ29kZTogdHJ1ZSxcblx0a2V5OiB0cnVlLFxuXHRrZXlDb2RlOiB0cnVlLFxuXHRidXR0b246IHRydWUsXG5cdGJ1dHRvbnM6IHRydWUsXG5cdGNsaWVudFg6IHRydWUsXG5cdGNsaWVudFk6IHRydWUsXG5cdG9mZnNldFg6IHRydWUsXG5cdG9mZnNldFk6IHRydWUsXG5cdHBvaW50ZXJJZDogdHJ1ZSxcblx0cG9pbnRlclR5cGU6IHRydWUsXG5cdHNjcmVlblg6IHRydWUsXG5cdHNjcmVlblk6IHRydWUsXG5cdHRhcmdldFRvdWNoZXM6IHRydWUsXG5cdHRvRWxlbWVudDogdHJ1ZSxcblx0dG91Y2hlczogdHJ1ZSxcblx0d2hpY2g6IHRydWVcbn0sIGpRdWVyeS5ldmVudC5hZGRQcm9wICk7XG5cbmpRdWVyeS5lYWNoKCB7IGZvY3VzOiBcImZvY3VzaW5cIiwgYmx1cjogXCJmb2N1c291dFwiIH0sIGZ1bmN0aW9uKCB0eXBlLCBkZWxlZ2F0ZVR5cGUgKSB7XG5cdGpRdWVyeS5ldmVudC5zcGVjaWFsWyB0eXBlIF0gPSB7XG5cblx0XHQvLyBVdGlsaXplIG5hdGl2ZSBldmVudCBpZiBwb3NzaWJsZSBzbyBibHVyL2ZvY3VzIHNlcXVlbmNlIGlzIGNvcnJlY3Rcblx0XHRzZXR1cDogZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIENsYWltIHRoZSBmaXJzdCBoYW5kbGVyXG5cdFx0XHQvLyBkYXRhUHJpdi5zZXQoIHRoaXMsIFwiZm9jdXNcIiwgLi4uIClcblx0XHRcdC8vIGRhdGFQcml2LnNldCggdGhpcywgXCJibHVyXCIsIC4uLiApXG5cdFx0XHRsZXZlcmFnZU5hdGl2ZSggdGhpcywgdHlwZSwgZXhwZWN0U3luYyApO1xuXG5cdFx0XHQvLyBSZXR1cm4gZmFsc2UgdG8gYWxsb3cgbm9ybWFsIHByb2Nlc3NpbmcgaW4gdGhlIGNhbGxlclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0sXG5cdFx0dHJpZ2dlcjogZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEZvcmNlIHNldHVwIGJlZm9yZSB0cmlnZ2VyXG5cdFx0XHRsZXZlcmFnZU5hdGl2ZSggdGhpcywgdHlwZSApO1xuXG5cdFx0XHQvLyBSZXR1cm4gbm9uLWZhbHNlIHRvIGFsbG93IG5vcm1hbCBldmVudC1wYXRoIHByb3BhZ2F0aW9uXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9LFxuXG5cdFx0Ly8gU3VwcHJlc3MgbmF0aXZlIGZvY3VzIG9yIGJsdXIgYXMgaXQncyBhbHJlYWR5IGJlaW5nIGZpcmVkXG5cdFx0Ly8gaW4gbGV2ZXJhZ2VOYXRpdmUuXG5cdFx0X2RlZmF1bHQ6IGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSxcblxuXHRcdGRlbGVnYXRlVHlwZTogZGVsZWdhdGVUeXBlXG5cdH07XG59ICk7XG5cbi8vIENyZWF0ZSBtb3VzZWVudGVyL2xlYXZlIGV2ZW50cyB1c2luZyBtb3VzZW92ZXIvb3V0IGFuZCBldmVudC10aW1lIGNoZWNrc1xuLy8gc28gdGhhdCBldmVudCBkZWxlZ2F0aW9uIHdvcmtzIGluIGpRdWVyeS5cbi8vIERvIHRoZSBzYW1lIGZvciBwb2ludGVyZW50ZXIvcG9pbnRlcmxlYXZlIGFuZCBwb2ludGVyb3Zlci9wb2ludGVyb3V0XG4vL1xuLy8gU3VwcG9ydDogU2FmYXJpIDcgb25seVxuLy8gU2FmYXJpIHNlbmRzIG1vdXNlZW50ZXIgdG9vIG9mdGVuOyBzZWU6XG4vLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NzAyNThcbi8vIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGJ1ZyAoaXQgZXhpc3RlZCBpbiBvbGRlciBDaHJvbWUgdmVyc2lvbnMgYXMgd2VsbCkuXG5qUXVlcnkuZWFjaCgge1xuXHRtb3VzZWVudGVyOiBcIm1vdXNlb3ZlclwiLFxuXHRtb3VzZWxlYXZlOiBcIm1vdXNlb3V0XCIsXG5cdHBvaW50ZXJlbnRlcjogXCJwb2ludGVyb3ZlclwiLFxuXHRwb2ludGVybGVhdmU6IFwicG9pbnRlcm91dFwiXG59LCBmdW5jdGlvbiggb3JpZywgZml4ICkge1xuXHRqUXVlcnkuZXZlbnQuc3BlY2lhbFsgb3JpZyBdID0ge1xuXHRcdGRlbGVnYXRlVHlwZTogZml4LFxuXHRcdGJpbmRUeXBlOiBmaXgsXG5cblx0XHRoYW5kbGU6IGZ1bmN0aW9uKCBldmVudCApIHtcblx0XHRcdHZhciByZXQsXG5cdFx0XHRcdHRhcmdldCA9IHRoaXMsXG5cdFx0XHRcdHJlbGF0ZWQgPSBldmVudC5yZWxhdGVkVGFyZ2V0LFxuXHRcdFx0XHRoYW5kbGVPYmogPSBldmVudC5oYW5kbGVPYmo7XG5cblx0XHRcdC8vIEZvciBtb3VzZWVudGVyL2xlYXZlIGNhbGwgdGhlIGhhbmRsZXIgaWYgcmVsYXRlZCBpcyBvdXRzaWRlIHRoZSB0YXJnZXQuXG5cdFx0XHQvLyBOQjogTm8gcmVsYXRlZFRhcmdldCBpZiB0aGUgbW91c2UgbGVmdC9lbnRlcmVkIHRoZSBicm93c2VyIHdpbmRvd1xuXHRcdFx0aWYgKCAhcmVsYXRlZCB8fCAoIHJlbGF0ZWQgIT09IHRhcmdldCAmJiAhalF1ZXJ5LmNvbnRhaW5zKCB0YXJnZXQsIHJlbGF0ZWQgKSApICkge1xuXHRcdFx0XHRldmVudC50eXBlID0gaGFuZGxlT2JqLm9yaWdUeXBlO1xuXHRcdFx0XHRyZXQgPSBoYW5kbGVPYmouaGFuZGxlci5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0XHRcdGV2ZW50LnR5cGUgPSBmaXg7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gcmV0O1xuXHRcdH1cblx0fTtcbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdG9uOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4gKTtcblx0fSxcblx0b25lOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gb24oIHRoaXMsIHR5cGVzLCBzZWxlY3RvciwgZGF0YSwgZm4sIDEgKTtcblx0fSxcblx0b2ZmOiBmdW5jdGlvbiggdHlwZXMsIHNlbGVjdG9yLCBmbiApIHtcblx0XHR2YXIgaGFuZGxlT2JqLCB0eXBlO1xuXHRcdGlmICggdHlwZXMgJiYgdHlwZXMucHJldmVudERlZmF1bHQgJiYgdHlwZXMuaGFuZGxlT2JqICkge1xuXG5cdFx0XHQvLyAoIGV2ZW50ICkgIGRpc3BhdGNoZWQgalF1ZXJ5LkV2ZW50XG5cdFx0XHRoYW5kbGVPYmogPSB0eXBlcy5oYW5kbGVPYmo7XG5cdFx0XHRqUXVlcnkoIHR5cGVzLmRlbGVnYXRlVGFyZ2V0ICkub2ZmKFxuXHRcdFx0XHRoYW5kbGVPYmoubmFtZXNwYWNlID9cblx0XHRcdFx0XHRoYW5kbGVPYmoub3JpZ1R5cGUgKyBcIi5cIiArIGhhbmRsZU9iai5uYW1lc3BhY2UgOlxuXHRcdFx0XHRcdGhhbmRsZU9iai5vcmlnVHlwZSxcblx0XHRcdFx0aGFuZGxlT2JqLnNlbGVjdG9yLFxuXHRcdFx0XHRoYW5kbGVPYmouaGFuZGxlclxuXHRcdFx0KTtcblx0XHRcdHJldHVybiB0aGlzO1xuXHRcdH1cblx0XHRpZiAoIHR5cGVvZiB0eXBlcyA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdFx0Ly8gKCB0eXBlcy1vYmplY3QgWywgc2VsZWN0b3JdIClcblx0XHRcdGZvciAoIHR5cGUgaW4gdHlwZXMgKSB7XG5cdFx0XHRcdHRoaXMub2ZmKCB0eXBlLCBzZWxlY3RvciwgdHlwZXNbIHR5cGUgXSApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0fVxuXHRcdGlmICggc2VsZWN0b3IgPT09IGZhbHNlIHx8IHR5cGVvZiBzZWxlY3RvciA9PT0gXCJmdW5jdGlvblwiICkge1xuXG5cdFx0XHQvLyAoIHR5cGVzIFssIGZuXSApXG5cdFx0XHRmbiA9IHNlbGVjdG9yO1xuXHRcdFx0c2VsZWN0b3IgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICggZm4gPT09IGZhbHNlICkge1xuXHRcdFx0Zm4gPSByZXR1cm5GYWxzZTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQucmVtb3ZlKCB0aGlzLCB0eXBlcywgZm4sIHNlbGVjdG9yICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cblxudmFyXG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMCAtIDExLCBFZGdlIDEyIC0gMTMgb25seVxuXHQvLyBJbiBJRS9FZGdlIHVzaW5nIHJlZ2V4IGdyb3VwcyBoZXJlIGNhdXNlcyBzZXZlcmUgc2xvd2Rvd25zLlxuXHQvLyBTZWUgaHR0cHM6Ly9jb25uZWN0Lm1pY3Jvc29mdC5jb20vSUUvZmVlZGJhY2svZGV0YWlscy8xNzM2NTEyL1xuXHRybm9Jbm5lcmh0bWwgPSAvPHNjcmlwdHw8c3R5bGV8PGxpbmsvaSxcblxuXHQvLyBjaGVja2VkPVwiY2hlY2tlZFwiIG9yIGNoZWNrZWRcblx0cmNoZWNrZWQgPSAvY2hlY2tlZFxccyooPzpbXj1dfD1cXHMqLmNoZWNrZWQuKS9pLFxuXHRyY2xlYW5TY3JpcHQgPSAvXlxccyo8ISg/OlxcW0NEQVRBXFxbfC0tKXwoPzpcXF1cXF18LS0pPlxccyokL2c7XG5cbi8vIFByZWZlciBhIHRib2R5IG92ZXIgaXRzIHBhcmVudCB0YWJsZSBmb3IgY29udGFpbmluZyBuZXcgcm93c1xuZnVuY3Rpb24gbWFuaXB1bGF0aW9uVGFyZ2V0KCBlbGVtLCBjb250ZW50ICkge1xuXHRpZiAoIG5vZGVOYW1lKCBlbGVtLCBcInRhYmxlXCIgKSAmJlxuXHRcdG5vZGVOYW1lKCBjb250ZW50Lm5vZGVUeXBlICE9PSAxMSA/IGNvbnRlbnQgOiBjb250ZW50LmZpcnN0Q2hpbGQsIFwidHJcIiApICkge1xuXG5cdFx0cmV0dXJuIGpRdWVyeSggZWxlbSApLmNoaWxkcmVuKCBcInRib2R5XCIgKVsgMCBdIHx8IGVsZW07XG5cdH1cblxuXHRyZXR1cm4gZWxlbTtcbn1cblxuLy8gUmVwbGFjZS9yZXN0b3JlIHRoZSB0eXBlIGF0dHJpYnV0ZSBvZiBzY3JpcHQgZWxlbWVudHMgZm9yIHNhZmUgRE9NIG1hbmlwdWxhdGlvblxuZnVuY3Rpb24gZGlzYWJsZVNjcmlwdCggZWxlbSApIHtcblx0ZWxlbS50eXBlID0gKCBlbGVtLmdldEF0dHJpYnV0ZSggXCJ0eXBlXCIgKSAhPT0gbnVsbCApICsgXCIvXCIgKyBlbGVtLnR5cGU7XG5cdHJldHVybiBlbGVtO1xufVxuZnVuY3Rpb24gcmVzdG9yZVNjcmlwdCggZWxlbSApIHtcblx0aWYgKCAoIGVsZW0udHlwZSB8fCBcIlwiICkuc2xpY2UoIDAsIDUgKSA9PT0gXCJ0cnVlL1wiICkge1xuXHRcdGVsZW0udHlwZSA9IGVsZW0udHlwZS5zbGljZSggNSApO1xuXHR9IGVsc2Uge1xuXHRcdGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBcInR5cGVcIiApO1xuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbmZ1bmN0aW9uIGNsb25lQ29weUV2ZW50KCBzcmMsIGRlc3QgKSB7XG5cdHZhciBpLCBsLCB0eXBlLCBwZGF0YU9sZCwgdWRhdGFPbGQsIHVkYXRhQ3VyLCBldmVudHM7XG5cblx0aWYgKCBkZXN0Lm5vZGVUeXBlICE9PSAxICkge1xuXHRcdHJldHVybjtcblx0fVxuXG5cdC8vIDEuIENvcHkgcHJpdmF0ZSBkYXRhOiBldmVudHMsIGhhbmRsZXJzLCBldGMuXG5cdGlmICggZGF0YVByaXYuaGFzRGF0YSggc3JjICkgKSB7XG5cdFx0cGRhdGFPbGQgPSBkYXRhUHJpdi5nZXQoIHNyYyApO1xuXHRcdGV2ZW50cyA9IHBkYXRhT2xkLmV2ZW50cztcblxuXHRcdGlmICggZXZlbnRzICkge1xuXHRcdFx0ZGF0YVByaXYucmVtb3ZlKCBkZXN0LCBcImhhbmRsZSBldmVudHNcIiApO1xuXG5cdFx0XHRmb3IgKCB0eXBlIGluIGV2ZW50cyApIHtcblx0XHRcdFx0Zm9yICggaSA9IDAsIGwgPSBldmVudHNbIHR5cGUgXS5sZW5ndGg7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LmFkZCggZGVzdCwgdHlwZSwgZXZlbnRzWyB0eXBlIF1bIGkgXSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gMi4gQ29weSB1c2VyIGRhdGFcblx0aWYgKCBkYXRhVXNlci5oYXNEYXRhKCBzcmMgKSApIHtcblx0XHR1ZGF0YU9sZCA9IGRhdGFVc2VyLmFjY2Vzcyggc3JjICk7XG5cdFx0dWRhdGFDdXIgPSBqUXVlcnkuZXh0ZW5kKCB7fSwgdWRhdGFPbGQgKTtcblxuXHRcdGRhdGFVc2VyLnNldCggZGVzdCwgdWRhdGFDdXIgKTtcblx0fVxufVxuXG4vLyBGaXggSUUgYnVncywgc2VlIHN1cHBvcnQgdGVzdHNcbmZ1bmN0aW9uIGZpeElucHV0KCBzcmMsIGRlc3QgKSB7XG5cdHZhciBub2RlTmFtZSA9IGRlc3Qubm9kZU5hbWUudG9Mb3dlckNhc2UoKTtcblxuXHQvLyBGYWlscyB0byBwZXJzaXN0IHRoZSBjaGVja2VkIHN0YXRlIG9mIGEgY2xvbmVkIGNoZWNrYm94IG9yIHJhZGlvIGJ1dHRvbi5cblx0aWYgKCBub2RlTmFtZSA9PT0gXCJpbnB1dFwiICYmIHJjaGVja2FibGVUeXBlLnRlc3QoIHNyYy50eXBlICkgKSB7XG5cdFx0ZGVzdC5jaGVja2VkID0gc3JjLmNoZWNrZWQ7XG5cblx0Ly8gRmFpbHMgdG8gcmV0dXJuIHRoZSBzZWxlY3RlZCBvcHRpb24gdG8gdGhlIGRlZmF1bHQgc2VsZWN0ZWQgc3RhdGUgd2hlbiBjbG9uaW5nIG9wdGlvbnNcblx0fSBlbHNlIGlmICggbm9kZU5hbWUgPT09IFwiaW5wdXRcIiB8fCBub2RlTmFtZSA9PT0gXCJ0ZXh0YXJlYVwiICkge1xuXHRcdGRlc3QuZGVmYXVsdFZhbHVlID0gc3JjLmRlZmF1bHRWYWx1ZTtcblx0fVxufVxuXG5mdW5jdGlvbiBkb21NYW5pcCggY29sbGVjdGlvbiwgYXJncywgY2FsbGJhY2ssIGlnbm9yZWQgKSB7XG5cblx0Ly8gRmxhdHRlbiBhbnkgbmVzdGVkIGFycmF5c1xuXHRhcmdzID0gZmxhdCggYXJncyApO1xuXG5cdHZhciBmcmFnbWVudCwgZmlyc3QsIHNjcmlwdHMsIGhhc1NjcmlwdHMsIG5vZGUsIGRvYyxcblx0XHRpID0gMCxcblx0XHRsID0gY29sbGVjdGlvbi5sZW5ndGgsXG5cdFx0aU5vQ2xvbmUgPSBsIC0gMSxcblx0XHR2YWx1ZSA9IGFyZ3NbIDAgXSxcblx0XHR2YWx1ZUlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCB2YWx1ZSApO1xuXG5cdC8vIFdlIGNhbid0IGNsb25lTm9kZSBmcmFnbWVudHMgdGhhdCBjb250YWluIGNoZWNrZWQsIGluIFdlYktpdFxuXHRpZiAoIHZhbHVlSXNGdW5jdGlvbiB8fFxuXHRcdFx0KCBsID4gMSAmJiB0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0IXN1cHBvcnQuY2hlY2tDbG9uZSAmJiByY2hlY2tlZC50ZXN0KCB2YWx1ZSApICkgKSB7XG5cdFx0cmV0dXJuIGNvbGxlY3Rpb24uZWFjaCggZnVuY3Rpb24oIGluZGV4ICkge1xuXHRcdFx0dmFyIHNlbGYgPSBjb2xsZWN0aW9uLmVxKCBpbmRleCApO1xuXHRcdFx0aWYgKCB2YWx1ZUlzRnVuY3Rpb24gKSB7XG5cdFx0XHRcdGFyZ3NbIDAgXSA9IHZhbHVlLmNhbGwoIHRoaXMsIGluZGV4LCBzZWxmLmh0bWwoKSApO1xuXHRcdFx0fVxuXHRcdFx0ZG9tTWFuaXAoIHNlbGYsIGFyZ3MsIGNhbGxiYWNrLCBpZ25vcmVkICk7XG5cdFx0fSApO1xuXHR9XG5cblx0aWYgKCBsICkge1xuXHRcdGZyYWdtZW50ID0gYnVpbGRGcmFnbWVudCggYXJncywgY29sbGVjdGlvblsgMCBdLm93bmVyRG9jdW1lbnQsIGZhbHNlLCBjb2xsZWN0aW9uLCBpZ25vcmVkICk7XG5cdFx0Zmlyc3QgPSBmcmFnbWVudC5maXJzdENoaWxkO1xuXG5cdFx0aWYgKCBmcmFnbWVudC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMSApIHtcblx0XHRcdGZyYWdtZW50ID0gZmlyc3Q7XG5cdFx0fVxuXG5cdFx0Ly8gUmVxdWlyZSBlaXRoZXIgbmV3IGNvbnRlbnQgb3IgYW4gaW50ZXJlc3QgaW4gaWdub3JlZCBlbGVtZW50cyB0byBpbnZva2UgdGhlIGNhbGxiYWNrXG5cdFx0aWYgKCBmaXJzdCB8fCBpZ25vcmVkICkge1xuXHRcdFx0c2NyaXB0cyA9IGpRdWVyeS5tYXAoIGdldEFsbCggZnJhZ21lbnQsIFwic2NyaXB0XCIgKSwgZGlzYWJsZVNjcmlwdCApO1xuXHRcdFx0aGFzU2NyaXB0cyA9IHNjcmlwdHMubGVuZ3RoO1xuXG5cdFx0XHQvLyBVc2UgdGhlIG9yaWdpbmFsIGZyYWdtZW50IGZvciB0aGUgbGFzdCBpdGVtXG5cdFx0XHQvLyBpbnN0ZWFkIG9mIHRoZSBmaXJzdCBiZWNhdXNlIGl0IGNhbiBlbmQgdXBcblx0XHRcdC8vIGJlaW5nIGVtcHRpZWQgaW5jb3JyZWN0bHkgaW4gY2VydGFpbiBzaXR1YXRpb25zICgjODA3MCkuXG5cdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdG5vZGUgPSBmcmFnbWVudDtcblxuXHRcdFx0XHRpZiAoIGkgIT09IGlOb0Nsb25lICkge1xuXHRcdFx0XHRcdG5vZGUgPSBqUXVlcnkuY2xvbmUoIG5vZGUsIHRydWUsIHRydWUgKTtcblxuXHRcdFx0XHRcdC8vIEtlZXAgcmVmZXJlbmNlcyB0byBjbG9uZWQgc2NyaXB0cyBmb3IgbGF0ZXIgcmVzdG9yYXRpb25cblx0XHRcdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XG5cblx0XHRcdFx0XHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjAgb25seSwgUGhhbnRvbUpTIDEgb25seVxuXHRcdFx0XHRcdFx0Ly8gcHVzaC5hcHBseShfLCBhcnJheWxpa2UpIHRocm93cyBvbiBhbmNpZW50IFdlYktpdFxuXHRcdFx0XHRcdFx0alF1ZXJ5Lm1lcmdlKCBzY3JpcHRzLCBnZXRBbGwoIG5vZGUsIFwic2NyaXB0XCIgKSApO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdGNhbGxiYWNrLmNhbGwoIGNvbGxlY3Rpb25bIGkgXSwgbm9kZSwgaSApO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIGhhc1NjcmlwdHMgKSB7XG5cdFx0XHRcdGRvYyA9IHNjcmlwdHNbIHNjcmlwdHMubGVuZ3RoIC0gMSBdLm93bmVyRG9jdW1lbnQ7XG5cblx0XHRcdFx0Ly8gUmVlbmFibGUgc2NyaXB0c1xuXHRcdFx0XHRqUXVlcnkubWFwKCBzY3JpcHRzLCByZXN0b3JlU2NyaXB0ICk7XG5cblx0XHRcdFx0Ly8gRXZhbHVhdGUgZXhlY3V0YWJsZSBzY3JpcHRzIG9uIGZpcnN0IGRvY3VtZW50IGluc2VydGlvblxuXHRcdFx0XHRmb3IgKCBpID0gMDsgaSA8IGhhc1NjcmlwdHM7IGkrKyApIHtcblx0XHRcdFx0XHRub2RlID0gc2NyaXB0c1sgaSBdO1xuXHRcdFx0XHRcdGlmICggcnNjcmlwdFR5cGUudGVzdCggbm9kZS50eXBlIHx8IFwiXCIgKSAmJlxuXHRcdFx0XHRcdFx0IWRhdGFQcml2LmFjY2Vzcyggbm9kZSwgXCJnbG9iYWxFdmFsXCIgKSAmJlxuXHRcdFx0XHRcdFx0alF1ZXJ5LmNvbnRhaW5zKCBkb2MsIG5vZGUgKSApIHtcblxuXHRcdFx0XHRcdFx0aWYgKCBub2RlLnNyYyAmJiAoIG5vZGUudHlwZSB8fCBcIlwiICkudG9Mb3dlckNhc2UoKSAgIT09IFwibW9kdWxlXCIgKSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gT3B0aW9uYWwgQUpBWCBkZXBlbmRlbmN5LCBidXQgd29uJ3QgcnVuIHNjcmlwdHMgaWYgbm90IHByZXNlbnRcblx0XHRcdFx0XHRcdFx0aWYgKCBqUXVlcnkuX2V2YWxVcmwgJiYgIW5vZGUubm9Nb2R1bGUgKSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5Ll9ldmFsVXJsKCBub2RlLnNyYywge1xuXHRcdFx0XHRcdFx0XHRcdFx0bm9uY2U6IG5vZGUubm9uY2UgfHwgbm9kZS5nZXRBdHRyaWJ1dGUoIFwibm9uY2VcIiApXG5cdFx0XHRcdFx0XHRcdFx0fSwgZG9jICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdERPTUV2YWwoIG5vZGUudGV4dENvbnRlbnQucmVwbGFjZSggcmNsZWFuU2NyaXB0LCBcIlwiICksIG5vZGUsIGRvYyApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiBjb2xsZWN0aW9uO1xufVxuXG5mdW5jdGlvbiByZW1vdmUoIGVsZW0sIHNlbGVjdG9yLCBrZWVwRGF0YSApIHtcblx0dmFyIG5vZGUsXG5cdFx0bm9kZXMgPSBzZWxlY3RvciA/IGpRdWVyeS5maWx0ZXIoIHNlbGVjdG9yLCBlbGVtICkgOiBlbGVtLFxuXHRcdGkgPSAwO1xuXG5cdGZvciAoIDsgKCBub2RlID0gbm9kZXNbIGkgXSApICE9IG51bGw7IGkrKyApIHtcblx0XHRpZiAoICFrZWVwRGF0YSAmJiBub2RlLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBub2RlICkgKTtcblx0XHR9XG5cblx0XHRpZiAoIG5vZGUucGFyZW50Tm9kZSApIHtcblx0XHRcdGlmICgga2VlcERhdGEgJiYgaXNBdHRhY2hlZCggbm9kZSApICkge1xuXHRcdFx0XHRzZXRHbG9iYWxFdmFsKCBnZXRBbGwoIG5vZGUsIFwic2NyaXB0XCIgKSApO1xuXHRcdFx0fVxuXHRcdFx0bm9kZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKCBub2RlICk7XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIGVsZW07XG59XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0aHRtbFByZWZpbHRlcjogZnVuY3Rpb24oIGh0bWwgKSB7XG5cdFx0cmV0dXJuIGh0bWw7XG5cdH0sXG5cblx0Y2xvbmU6IGZ1bmN0aW9uKCBlbGVtLCBkYXRhQW5kRXZlbnRzLCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHR2YXIgaSwgbCwgc3JjRWxlbWVudHMsIGRlc3RFbGVtZW50cyxcblx0XHRcdGNsb25lID0gZWxlbS5jbG9uZU5vZGUoIHRydWUgKSxcblx0XHRcdGluUGFnZSA9IGlzQXR0YWNoZWQoIGVsZW0gKTtcblxuXHRcdC8vIEZpeCBJRSBjbG9uaW5nIGlzc3Vlc1xuXHRcdGlmICggIXN1cHBvcnQubm9DbG9uZUNoZWNrZWQgJiYgKCBlbGVtLm5vZGVUeXBlID09PSAxIHx8IGVsZW0ubm9kZVR5cGUgPT09IDExICkgJiZcblx0XHRcdFx0IWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkge1xuXG5cdFx0XHQvLyBXZSBlc2NoZXcgU2l6emxlIGhlcmUgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnM6IGh0dHBzOi8vanNwZXJmLmNvbS9nZXRhbGwtdnMtc2l6emxlLzJcblx0XHRcdGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUgKTtcblx0XHRcdHNyY0VsZW1lbnRzID0gZ2V0QWxsKCBlbGVtICk7XG5cblx0XHRcdGZvciAoIGkgPSAwLCBsID0gc3JjRWxlbWVudHMubGVuZ3RoOyBpIDwgbDsgaSsrICkge1xuXHRcdFx0XHRmaXhJbnB1dCggc3JjRWxlbWVudHNbIGkgXSwgZGVzdEVsZW1lbnRzWyBpIF0gKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDb3B5IHRoZSBldmVudHMgZnJvbSB0aGUgb3JpZ2luYWwgdG8gdGhlIGNsb25lXG5cdFx0aWYgKCBkYXRhQW5kRXZlbnRzICkge1xuXHRcdFx0aWYgKCBkZWVwRGF0YUFuZEV2ZW50cyApIHtcblx0XHRcdFx0c3JjRWxlbWVudHMgPSBzcmNFbGVtZW50cyB8fCBnZXRBbGwoIGVsZW0gKTtcblx0XHRcdFx0ZGVzdEVsZW1lbnRzID0gZGVzdEVsZW1lbnRzIHx8IGdldEFsbCggY2xvbmUgKTtcblxuXHRcdFx0XHRmb3IgKCBpID0gMCwgbCA9IHNyY0VsZW1lbnRzLmxlbmd0aDsgaSA8IGw7IGkrKyApIHtcblx0XHRcdFx0XHRjbG9uZUNvcHlFdmVudCggc3JjRWxlbWVudHNbIGkgXSwgZGVzdEVsZW1lbnRzWyBpIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y2xvbmVDb3B5RXZlbnQoIGVsZW0sIGNsb25lICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUHJlc2VydmUgc2NyaXB0IGV2YWx1YXRpb24gaGlzdG9yeVxuXHRcdGRlc3RFbGVtZW50cyA9IGdldEFsbCggY2xvbmUsIFwic2NyaXB0XCIgKTtcblx0XHRpZiAoIGRlc3RFbGVtZW50cy5sZW5ndGggPiAwICkge1xuXHRcdFx0c2V0R2xvYmFsRXZhbCggZGVzdEVsZW1lbnRzLCAhaW5QYWdlICYmIGdldEFsbCggZWxlbSwgXCJzY3JpcHRcIiApICk7XG5cdFx0fVxuXG5cdFx0Ly8gUmV0dXJuIHRoZSBjbG9uZWQgc2V0XG5cdFx0cmV0dXJuIGNsb25lO1xuXHR9LFxuXG5cdGNsZWFuRGF0YTogZnVuY3Rpb24oIGVsZW1zICkge1xuXHRcdHZhciBkYXRhLCBlbGVtLCB0eXBlLFxuXHRcdFx0c3BlY2lhbCA9IGpRdWVyeS5ldmVudC5zcGVjaWFsLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7ICggZWxlbSA9IGVsZW1zWyBpIF0gKSAhPT0gdW5kZWZpbmVkOyBpKysgKSB7XG5cdFx0XHRpZiAoIGFjY2VwdERhdGEoIGVsZW0gKSApIHtcblx0XHRcdFx0aWYgKCAoIGRhdGEgPSBlbGVtWyBkYXRhUHJpdi5leHBhbmRvIF0gKSApIHtcblx0XHRcdFx0XHRpZiAoIGRhdGEuZXZlbnRzICkge1xuXHRcdFx0XHRcdFx0Zm9yICggdHlwZSBpbiBkYXRhLmV2ZW50cyApIHtcblx0XHRcdFx0XHRcdFx0aWYgKCBzcGVjaWFsWyB0eXBlIF0gKSB7XG5cdFx0XHRcdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnJlbW92ZSggZWxlbSwgdHlwZSApO1xuXG5cdFx0XHRcdFx0XHRcdC8vIFRoaXMgaXMgYSBzaG9ydGN1dCB0byBhdm9pZCBqUXVlcnkuZXZlbnQucmVtb3ZlJ3Mgb3ZlcmhlYWRcblx0XHRcdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdFx0XHRqUXVlcnkucmVtb3ZlRXZlbnQoIGVsZW0sIHR5cGUsIGRhdGEuaGFuZGxlICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD0zNSAtIDQ1K1xuXHRcdFx0XHRcdC8vIEFzc2lnbiB1bmRlZmluZWQgaW5zdGVhZCBvZiB1c2luZyBkZWxldGUsIHNlZSBEYXRhI3JlbW92ZVxuXHRcdFx0XHRcdGVsZW1bIGRhdGFQcml2LmV4cGFuZG8gXSA9IHVuZGVmaW5lZDtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoIGVsZW1bIGRhdGFVc2VyLmV4cGFuZG8gXSApIHtcblxuXHRcdFx0XHRcdC8vIFN1cHBvcnQ6IENocm9tZSA8PTM1IC0gNDUrXG5cdFx0XHRcdFx0Ly8gQXNzaWduIHVuZGVmaW5lZCBpbnN0ZWFkIG9mIHVzaW5nIGRlbGV0ZSwgc2VlIERhdGEjcmVtb3ZlXG5cdFx0XHRcdFx0ZWxlbVsgZGF0YVVzZXIuZXhwYW5kbyBdID0gdW5kZWZpbmVkO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0ZGV0YWNoOiBmdW5jdGlvbiggc2VsZWN0b3IgKSB7XG5cdFx0cmV0dXJuIHJlbW92ZSggdGhpcywgc2VsZWN0b3IsIHRydWUgKTtcblx0fSxcblxuXHRyZW1vdmU6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHRyZXR1cm4gcmVtb3ZlKCB0aGlzLCBzZWxlY3RvciApO1xuXHR9LFxuXG5cdHRleHQ6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRyZXR1cm4gYWNjZXNzKCB0aGlzLCBmdW5jdGlvbiggdmFsdWUgKSB7XG5cdFx0XHRyZXR1cm4gdmFsdWUgPT09IHVuZGVmaW5lZCA/XG5cdFx0XHRcdGpRdWVyeS50ZXh0KCB0aGlzICkgOlxuXHRcdFx0XHR0aGlzLmVtcHR5KCkuZWFjaCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0aWYgKCB0aGlzLm5vZGVUeXBlID09PSAxIHx8IHRoaXMubm9kZVR5cGUgPT09IDExIHx8IHRoaXMubm9kZVR5cGUgPT09IDkgKSB7XG5cdFx0XHRcdFx0XHR0aGlzLnRleHRDb250ZW50ID0gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9ICk7XG5cdFx0fSwgbnVsbCwgdmFsdWUsIGFyZ3VtZW50cy5sZW5ndGggKTtcblx0fSxcblxuXHRhcHBlbmQ6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5ub2RlVHlwZSA9PT0gMSB8fCB0aGlzLm5vZGVUeXBlID09PSAxMSB8fCB0aGlzLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHR2YXIgdGFyZ2V0ID0gbWFuaXB1bGF0aW9uVGFyZ2V0KCB0aGlzLCBlbGVtICk7XG5cdFx0XHRcdHRhcmdldC5hcHBlbmRDaGlsZCggZWxlbSApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRwcmVwZW5kOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgPT09IDEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gMTEgfHwgdGhpcy5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0dmFyIHRhcmdldCA9IG1hbmlwdWxhdGlvblRhcmdldCggdGhpcywgZWxlbSApO1xuXHRcdFx0XHR0YXJnZXQuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0YXJnZXQuZmlyc3RDaGlsZCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRiZWZvcmU6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiBkb21NYW5pcCggdGhpcywgYXJndW1lbnRzLCBmdW5jdGlvbiggZWxlbSApIHtcblx0XHRcdGlmICggdGhpcy5wYXJlbnROb2RlICkge1xuXHRcdFx0XHR0aGlzLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKCBlbGVtLCB0aGlzICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXG5cdGFmdGVyOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHRpZiAoIHRoaXMucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0dGhpcy5wYXJlbnROb2RlLmluc2VydEJlZm9yZSggZWxlbSwgdGhpcy5uZXh0U2libGluZyApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHRlbXB0eTogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGVsZW0sXG5cdFx0XHRpID0gMDtcblxuXHRcdGZvciAoIDsgKCBlbGVtID0gdGhpc1sgaSBdICkgIT0gbnVsbDsgaSsrICkge1xuXHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXG5cdFx0XHRcdC8vIFByZXZlbnQgbWVtb3J5IGxlYWtzXG5cdFx0XHRcdGpRdWVyeS5jbGVhbkRhdGEoIGdldEFsbCggZWxlbSwgZmFsc2UgKSApO1xuXG5cdFx0XHRcdC8vIFJlbW92ZSBhbnkgcmVtYWluaW5nIG5vZGVzXG5cdFx0XHRcdGVsZW0udGV4dENvbnRlbnQgPSBcIlwiO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9LFxuXG5cdGNsb25lOiBmdW5jdGlvbiggZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKSB7XG5cdFx0ZGF0YUFuZEV2ZW50cyA9IGRhdGFBbmRFdmVudHMgPT0gbnVsbCA/IGZhbHNlIDogZGF0YUFuZEV2ZW50cztcblx0XHRkZWVwRGF0YUFuZEV2ZW50cyA9IGRlZXBEYXRhQW5kRXZlbnRzID09IG51bGwgPyBkYXRhQW5kRXZlbnRzIDogZGVlcERhdGFBbmRFdmVudHM7XG5cblx0XHRyZXR1cm4gdGhpcy5tYXAoIGZ1bmN0aW9uKCkge1xuXHRcdFx0cmV0dXJuIGpRdWVyeS5jbG9uZSggdGhpcywgZGF0YUFuZEV2ZW50cywgZGVlcERhdGFBbmRFdmVudHMgKTtcblx0XHR9ICk7XG5cdH0sXG5cblx0aHRtbDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdHZhciBlbGVtID0gdGhpc1sgMCBdIHx8IHt9LFxuXHRcdFx0XHRpID0gMCxcblx0XHRcdFx0bCA9IHRoaXMubGVuZ3RoO1xuXG5cdFx0XHRpZiAoIHZhbHVlID09PSB1bmRlZmluZWQgJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0cmV0dXJuIGVsZW0uaW5uZXJIVE1MO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTZWUgaWYgd2UgY2FuIHRha2UgYSBzaG9ydGN1dCBhbmQganVzdCB1c2UgaW5uZXJIVE1MXG5cdFx0XHRpZiAoIHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiAmJiAhcm5vSW5uZXJodG1sLnRlc3QoIHZhbHVlICkgJiZcblx0XHRcdFx0IXdyYXBNYXBbICggcnRhZ05hbWUuZXhlYyggdmFsdWUgKSB8fCBbIFwiXCIsIFwiXCIgXSApWyAxIF0udG9Mb3dlckNhc2UoKSBdICkge1xuXG5cdFx0XHRcdHZhbHVlID0galF1ZXJ5Lmh0bWxQcmVmaWx0ZXIoIHZhbHVlICk7XG5cblx0XHRcdFx0dHJ5IHtcblx0XHRcdFx0XHRmb3IgKCA7IGkgPCBsOyBpKysgKSB7XG5cdFx0XHRcdFx0XHRlbGVtID0gdGhpc1sgaSBdIHx8IHt9O1xuXG5cdFx0XHRcdFx0XHQvLyBSZW1vdmUgZWxlbWVudCBub2RlcyBhbmQgcHJldmVudCBtZW1vcnkgbGVha3Ncblx0XHRcdFx0XHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblx0XHRcdFx0XHRcdFx0alF1ZXJ5LmNsZWFuRGF0YSggZ2V0QWxsKCBlbGVtLCBmYWxzZSApICk7XG5cdFx0XHRcdFx0XHRcdGVsZW0uaW5uZXJIVE1MID0gdmFsdWU7XG5cdFx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0ZWxlbSA9IDA7XG5cblx0XHRcdFx0Ly8gSWYgdXNpbmcgaW5uZXJIVE1MIHRocm93cyBhbiBleGNlcHRpb24sIHVzZSB0aGUgZmFsbGJhY2sgbWV0aG9kXG5cdFx0XHRcdH0gY2F0Y2ggKCBlICkge31cblx0XHRcdH1cblxuXHRcdFx0aWYgKCBlbGVtICkge1xuXHRcdFx0XHR0aGlzLmVtcHR5KCkuYXBwZW5kKCB2YWx1ZSApO1xuXHRcdFx0fVxuXHRcdH0sIG51bGwsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoICk7XG5cdH0sXG5cblx0cmVwbGFjZVdpdGg6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBpZ25vcmVkID0gW107XG5cblx0XHQvLyBNYWtlIHRoZSBjaGFuZ2VzLCByZXBsYWNpbmcgZWFjaCBub24taWdub3JlZCBjb250ZXh0IGVsZW1lbnQgd2l0aCB0aGUgbmV3IGNvbnRlbnRcblx0XHRyZXR1cm4gZG9tTWFuaXAoIHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24oIGVsZW0gKSB7XG5cdFx0XHR2YXIgcGFyZW50ID0gdGhpcy5wYXJlbnROb2RlO1xuXG5cdFx0XHRpZiAoIGpRdWVyeS5pbkFycmF5KCB0aGlzLCBpZ25vcmVkICkgPCAwICkge1xuXHRcdFx0XHRqUXVlcnkuY2xlYW5EYXRhKCBnZXRBbGwoIHRoaXMgKSApO1xuXHRcdFx0XHRpZiAoIHBhcmVudCApIHtcblx0XHRcdFx0XHRwYXJlbnQucmVwbGFjZUNoaWxkKCBlbGVtLCB0aGlzICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdC8vIEZvcmNlIGNhbGxiYWNrIGludm9jYXRpb25cblx0XHR9LCBpZ25vcmVkICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIHtcblx0YXBwZW5kVG86IFwiYXBwZW5kXCIsXG5cdHByZXBlbmRUbzogXCJwcmVwZW5kXCIsXG5cdGluc2VydEJlZm9yZTogXCJiZWZvcmVcIixcblx0aW5zZXJ0QWZ0ZXI6IFwiYWZ0ZXJcIixcblx0cmVwbGFjZUFsbDogXCJyZXBsYWNlV2l0aFwiXG59LCBmdW5jdGlvbiggbmFtZSwgb3JpZ2luYWwgKSB7XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHZhciBlbGVtcyxcblx0XHRcdHJldCA9IFtdLFxuXHRcdFx0aW5zZXJ0ID0galF1ZXJ5KCBzZWxlY3RvciApLFxuXHRcdFx0bGFzdCA9IGluc2VydC5sZW5ndGggLSAxLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRmb3IgKCA7IGkgPD0gbGFzdDsgaSsrICkge1xuXHRcdFx0ZWxlbXMgPSBpID09PSBsYXN0ID8gdGhpcyA6IHRoaXMuY2xvbmUoIHRydWUgKTtcblx0XHRcdGpRdWVyeSggaW5zZXJ0WyBpIF0gKVsgb3JpZ2luYWwgXSggZWxlbXMgKTtcblxuXHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5LCBQaGFudG9tSlMgMSBvbmx5XG5cdFx0XHQvLyAuZ2V0KCkgYmVjYXVzZSBwdXNoLmFwcGx5KF8sIGFycmF5bGlrZSkgdGhyb3dzIG9uIGFuY2llbnQgV2ViS2l0XG5cdFx0XHRwdXNoLmFwcGx5KCByZXQsIGVsZW1zLmdldCgpICk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXMucHVzaFN0YWNrKCByZXQgKTtcblx0fTtcbn0gKTtcbnZhciBybnVtbm9ucHggPSBuZXcgUmVnRXhwKCBcIl4oXCIgKyBwbnVtICsgXCIpKD8hcHgpW2EteiVdKyRcIiwgXCJpXCIgKTtcblxudmFyIGdldFN0eWxlcyA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5LCBGaXJlZm94IDw9MzAgKCMxNTA5OCwgIzE0MTUwKVxuXHRcdC8vIElFIHRocm93cyBvbiBlbGVtZW50cyBjcmVhdGVkIGluIHBvcHVwc1xuXHRcdC8vIEZGIG1lYW53aGlsZSB0aHJvd3Mgb24gZnJhbWUgZWxlbWVudHMgdGhyb3VnaCBcImRlZmF1bHRWaWV3LmdldENvbXB1dGVkU3R5bGVcIlxuXHRcdHZhciB2aWV3ID0gZWxlbS5vd25lckRvY3VtZW50LmRlZmF1bHRWaWV3O1xuXG5cdFx0aWYgKCAhdmlldyB8fCAhdmlldy5vcGVuZXIgKSB7XG5cdFx0XHR2aWV3ID0gd2luZG93O1xuXHRcdH1cblxuXHRcdHJldHVybiB2aWV3LmdldENvbXB1dGVkU3R5bGUoIGVsZW0gKTtcblx0fTtcblxudmFyIHN3YXAgPSBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgY2FsbGJhY2sgKSB7XG5cdHZhciByZXQsIG5hbWUsXG5cdFx0b2xkID0ge307XG5cblx0Ly8gUmVtZW1iZXIgdGhlIG9sZCB2YWx1ZXMsIGFuZCBpbnNlcnQgdGhlIG5ldyBvbmVzXG5cdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRvbGRbIG5hbWUgXSA9IGVsZW0uc3R5bGVbIG5hbWUgXTtcblx0XHRlbGVtLnN0eWxlWyBuYW1lIF0gPSBvcHRpb25zWyBuYW1lIF07XG5cdH1cblxuXHRyZXQgPSBjYWxsYmFjay5jYWxsKCBlbGVtICk7XG5cblx0Ly8gUmV2ZXJ0IHRoZSBvbGQgdmFsdWVzXG5cdGZvciAoIG5hbWUgaW4gb3B0aW9ucyApIHtcblx0XHRlbGVtLnN0eWxlWyBuYW1lIF0gPSBvbGRbIG5hbWUgXTtcblx0fVxuXG5cdHJldHVybiByZXQ7XG59O1xuXG5cbnZhciByYm94U3R5bGUgPSBuZXcgUmVnRXhwKCBjc3NFeHBhbmQuam9pbiggXCJ8XCIgKSwgXCJpXCIgKTtcblxuXG5cbiggZnVuY3Rpb24oKSB7XG5cblx0Ly8gRXhlY3V0aW5nIGJvdGggcGl4ZWxQb3NpdGlvbiAmIGJveFNpemluZ1JlbGlhYmxlIHRlc3RzIHJlcXVpcmUgb25seSBvbmUgbGF5b3V0XG5cdC8vIHNvIHRoZXkncmUgZXhlY3V0ZWQgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHRoZSBzZWNvbmQgY29tcHV0YXRpb24uXG5cdGZ1bmN0aW9uIGNvbXB1dGVTdHlsZVRlc3RzKCkge1xuXG5cdFx0Ly8gVGhpcyBpcyBhIHNpbmdsZXRvbiwgd2UgbmVlZCB0byBleGVjdXRlIGl0IG9ubHkgb25jZVxuXHRcdGlmICggIWRpdiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRjb250YWluZXIuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246YWJzb2x1dGU7bGVmdDotMTExMTFweDt3aWR0aDo2MHB4O1wiICtcblx0XHRcdFwibWFyZ2luLXRvcDoxcHg7cGFkZGluZzowO2JvcmRlcjowXCI7XG5cdFx0ZGl2LnN0eWxlLmNzc1RleHQgPVxuXHRcdFx0XCJwb3NpdGlvbjpyZWxhdGl2ZTtkaXNwbGF5OmJsb2NrO2JveC1zaXppbmc6Ym9yZGVyLWJveDtvdmVyZmxvdzpzY3JvbGw7XCIgK1xuXHRcdFx0XCJtYXJnaW46YXV0bztib3JkZXI6MXB4O3BhZGRpbmc6MXB4O1wiICtcblx0XHRcdFwid2lkdGg6NjAlO3RvcDoxJVwiO1xuXHRcdGRvY3VtZW50RWxlbWVudC5hcHBlbmRDaGlsZCggY29udGFpbmVyICkuYXBwZW5kQ2hpbGQoIGRpdiApO1xuXG5cdFx0dmFyIGRpdlN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoIGRpdiApO1xuXHRcdHBpeGVsUG9zaXRpb25WYWwgPSBkaXZTdHlsZS50b3AgIT09IFwiMSVcIjtcblxuXHRcdC8vIFN1cHBvcnQ6IEFuZHJvaWQgNC4wIC0gNC4zIG9ubHksIEZpcmVmb3ggPD0zIC0gNDRcblx0XHRyZWxpYWJsZU1hcmdpbkxlZnRWYWwgPSByb3VuZFBpeGVsTWVhc3VyZXMoIGRpdlN0eWxlLm1hcmdpbkxlZnQgKSA9PT0gMTI7XG5cblx0XHQvLyBTdXBwb3J0OiBBbmRyb2lkIDQuMCAtIDQuMyBvbmx5LCBTYWZhcmkgPD05LjEgLSAxMC4xLCBpT1MgPD03LjAgLSA5LjNcblx0XHQvLyBTb21lIHN0eWxlcyBjb21lIGJhY2sgd2l0aCBwZXJjZW50YWdlIHZhbHVlcywgZXZlbiB0aG91Z2ggdGhleSBzaG91bGRuJ3Rcblx0XHRkaXYuc3R5bGUucmlnaHQgPSBcIjYwJVwiO1xuXHRcdHBpeGVsQm94U3R5bGVzVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS5yaWdodCApID09PSAzNjtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgLSAxMSBvbmx5XG5cdFx0Ly8gRGV0ZWN0IG1pc3JlcG9ydGluZyBvZiBjb250ZW50IGRpbWVuc2lvbnMgZm9yIGJveC1zaXppbmc6Ym9yZGVyLWJveCBlbGVtZW50c1xuXHRcdGJveFNpemluZ1JlbGlhYmxlVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXZTdHlsZS53aWR0aCApID09PSAzNjtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDkgb25seVxuXHRcdC8vIERldGVjdCBvdmVyZmxvdzpzY3JvbGwgc2NyZXdpbmVzcyAoZ2gtMzY5OSlcblx0XHQvLyBTdXBwb3J0OiBDaHJvbWUgPD02NFxuXHRcdC8vIERvbid0IGdldCB0cmlja2VkIHdoZW4gem9vbSBhZmZlY3RzIG9mZnNldFdpZHRoIChnaC00MDI5KVxuXHRcdGRpdi5zdHlsZS5wb3NpdGlvbiA9IFwiYWJzb2x1dGVcIjtcblx0XHRzY3JvbGxib3hTaXplVmFsID0gcm91bmRQaXhlbE1lYXN1cmVzKCBkaXYub2Zmc2V0V2lkdGggLyAzICkgPT09IDEyO1xuXG5cdFx0ZG9jdW1lbnRFbGVtZW50LnJlbW92ZUNoaWxkKCBjb250YWluZXIgKTtcblxuXHRcdC8vIE51bGxpZnkgdGhlIGRpdiBzbyBpdCB3b3VsZG4ndCBiZSBzdG9yZWQgaW4gdGhlIG1lbW9yeSBhbmRcblx0XHQvLyBpdCB3aWxsIGFsc28gYmUgYSBzaWduIHRoYXQgY2hlY2tzIGFscmVhZHkgcGVyZm9ybWVkXG5cdFx0ZGl2ID0gbnVsbDtcblx0fVxuXG5cdGZ1bmN0aW9uIHJvdW5kUGl4ZWxNZWFzdXJlcyggbWVhc3VyZSApIHtcblx0XHRyZXR1cm4gTWF0aC5yb3VuZCggcGFyc2VGbG9hdCggbWVhc3VyZSApICk7XG5cdH1cblxuXHR2YXIgcGl4ZWxQb3NpdGlvblZhbCwgYm94U2l6aW5nUmVsaWFibGVWYWwsIHNjcm9sbGJveFNpemVWYWwsIHBpeGVsQm94U3R5bGVzVmFsLFxuXHRcdHJlbGlhYmxlVHJEaW1lbnNpb25zVmFsLCByZWxpYWJsZU1hcmdpbkxlZnRWYWwsXG5cdFx0Y29udGFpbmVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJkaXZcIiApLFxuXHRcdGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKTtcblxuXHQvLyBGaW5pc2ggZWFybHkgaW4gbGltaXRlZCAobm9uLWJyb3dzZXIpIGVudmlyb25tZW50c1xuXHRpZiAoICFkaXYuc3R5bGUgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHQvLyBTdHlsZSBvZiBjbG9uZWQgZWxlbWVudCBhZmZlY3RzIHNvdXJjZSBlbGVtZW50IGNsb25lZCAoIzg5MDgpXG5cdGRpdi5zdHlsZS5iYWNrZ3JvdW5kQ2xpcCA9IFwiY29udGVudC1ib3hcIjtcblx0ZGl2LmNsb25lTm9kZSggdHJ1ZSApLnN0eWxlLmJhY2tncm91bmRDbGlwID0gXCJcIjtcblx0c3VwcG9ydC5jbGVhckNsb25lU3R5bGUgPSBkaXYuc3R5bGUuYmFja2dyb3VuZENsaXAgPT09IFwiY29udGVudC1ib3hcIjtcblxuXHRqUXVlcnkuZXh0ZW5kKCBzdXBwb3J0LCB7XG5cdFx0Ym94U2l6aW5nUmVsaWFibGU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBib3hTaXppbmdSZWxpYWJsZVZhbDtcblx0XHR9LFxuXHRcdHBpeGVsQm94U3R5bGVzOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcGl4ZWxCb3hTdHlsZXNWYWw7XG5cdFx0fSxcblx0XHRwaXhlbFBvc2l0aW9uOiBmdW5jdGlvbigpIHtcblx0XHRcdGNvbXB1dGVTdHlsZVRlc3RzKCk7XG5cdFx0XHRyZXR1cm4gcGl4ZWxQb3NpdGlvblZhbDtcblx0XHR9LFxuXHRcdHJlbGlhYmxlTWFyZ2luTGVmdDogZnVuY3Rpb24oKSB7XG5cdFx0XHRjb21wdXRlU3R5bGVUZXN0cygpO1xuXHRcdFx0cmV0dXJuIHJlbGlhYmxlTWFyZ2luTGVmdFZhbDtcblx0XHR9LFxuXHRcdHNjcm9sbGJveFNpemU6IGZ1bmN0aW9uKCkge1xuXHRcdFx0Y29tcHV0ZVN0eWxlVGVzdHMoKTtcblx0XHRcdHJldHVybiBzY3JvbGxib3hTaXplVmFsO1xuXHRcdH0sXG5cblx0XHQvLyBTdXBwb3J0OiBJRSA5IC0gMTErLCBFZGdlIDE1IC0gMTgrXG5cdFx0Ly8gSUUvRWRnZSBtaXNyZXBvcnQgYGdldENvbXB1dGVkU3R5bGVgIG9mIHRhYmxlIHJvd3Mgd2l0aCB3aWR0aC9oZWlnaHRcblx0XHQvLyBzZXQgaW4gQ1NTIHdoaWxlIGBvZmZzZXQqYCBwcm9wZXJ0aWVzIHJlcG9ydCBjb3JyZWN0IHZhbHVlcy5cblx0XHQvLyBCZWhhdmlvciBpbiBJRSA5IGlzIG1vcmUgc3VidGxlIHRoYW4gaW4gbmV3ZXIgdmVyc2lvbnMgJiBpdCBwYXNzZXNcblx0XHQvLyBzb21lIHZlcnNpb25zIG9mIHRoaXMgdGVzdDsgbWFrZSBzdXJlIG5vdCB0byBtYWtlIGl0IHBhc3MgdGhlcmUhXG5cdFx0Ly9cblx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDcwK1xuXHRcdC8vIE9ubHkgRmlyZWZveCBpbmNsdWRlcyBib3JkZXIgd2lkdGhzXG5cdFx0Ly8gaW4gY29tcHV0ZWQgZGltZW5zaW9ucy4gKGdoLTQ1MjkpXG5cdFx0cmVsaWFibGVUckRpbWVuc2lvbnM6IGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHRhYmxlLCB0ciwgdHJDaGlsZCwgdHJTdHlsZTtcblx0XHRcdGlmICggcmVsaWFibGVUckRpbWVuc2lvbnNWYWwgPT0gbnVsbCApIHtcblx0XHRcdFx0dGFibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcInRhYmxlXCIgKTtcblx0XHRcdFx0dHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcInRyXCIgKTtcblx0XHRcdFx0dHJDaGlsZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiZGl2XCIgKTtcblxuXHRcdFx0XHR0YWJsZS5zdHlsZS5jc3NUZXh0ID0gXCJwb3NpdGlvbjphYnNvbHV0ZTtsZWZ0Oi0xMTExMXB4O2JvcmRlci1jb2xsYXBzZTpzZXBhcmF0ZVwiO1xuXHRcdFx0XHR0ci5zdHlsZS5jc3NUZXh0ID0gXCJib3JkZXI6MXB4IHNvbGlkXCI7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQ2hyb21lIDg2K1xuXHRcdFx0XHQvLyBIZWlnaHQgc2V0IHRocm91Z2ggY3NzVGV4dCBkb2VzIG5vdCBnZXQgYXBwbGllZC5cblx0XHRcdFx0Ly8gQ29tcHV0ZWQgaGVpZ2h0IHRoZW4gY29tZXMgYmFjayBhcyAwLlxuXHRcdFx0XHR0ci5zdHlsZS5oZWlnaHQgPSBcIjFweFwiO1xuXHRcdFx0XHR0ckNoaWxkLnN0eWxlLmhlaWdodCA9IFwiOXB4XCI7XG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA4IENocm9tZSA4Nitcblx0XHRcdFx0Ly8gSW4gb3VyIGJvZHlCYWNrZ3JvdW5kLmh0bWwgaWZyYW1lLFxuXHRcdFx0XHQvLyBkaXNwbGF5IGZvciBhbGwgZGl2IGVsZW1lbnRzIGlzIHNldCB0byBcImlubGluZVwiLFxuXHRcdFx0XHQvLyB3aGljaCBjYXVzZXMgYSBwcm9ibGVtIG9ubHkgaW4gQW5kcm9pZCA4IENocm9tZSA4Ni5cblx0XHRcdFx0Ly8gRW5zdXJpbmcgdGhlIGRpdiBpcyBkaXNwbGF5OiBibG9ja1xuXHRcdFx0XHQvLyBnZXRzIGFyb3VuZCB0aGlzIGlzc3VlLlxuXHRcdFx0XHR0ckNoaWxkLnN0eWxlLmRpc3BsYXkgPSBcImJsb2NrXCI7XG5cblx0XHRcdFx0ZG9jdW1lbnRFbGVtZW50XG5cdFx0XHRcdFx0LmFwcGVuZENoaWxkKCB0YWJsZSApXG5cdFx0XHRcdFx0LmFwcGVuZENoaWxkKCB0ciApXG5cdFx0XHRcdFx0LmFwcGVuZENoaWxkKCB0ckNoaWxkICk7XG5cblx0XHRcdFx0dHJTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKCB0ciApO1xuXHRcdFx0XHRyZWxpYWJsZVRyRGltZW5zaW9uc1ZhbCA9ICggcGFyc2VJbnQoIHRyU3R5bGUuaGVpZ2h0LCAxMCApICtcblx0XHRcdFx0XHRwYXJzZUludCggdHJTdHlsZS5ib3JkZXJUb3BXaWR0aCwgMTAgKSArXG5cdFx0XHRcdFx0cGFyc2VJbnQoIHRyU3R5bGUuYm9yZGVyQm90dG9tV2lkdGgsIDEwICkgKSA9PT0gdHIub2Zmc2V0SGVpZ2h0O1xuXG5cdFx0XHRcdGRvY3VtZW50RWxlbWVudC5yZW1vdmVDaGlsZCggdGFibGUgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZWxpYWJsZVRyRGltZW5zaW9uc1ZhbDtcblx0XHR9XG5cdH0gKTtcbn0gKSgpO1xuXG5cbmZ1bmN0aW9uIGN1ckNTUyggZWxlbSwgbmFtZSwgY29tcHV0ZWQgKSB7XG5cdHZhciB3aWR0aCwgbWluV2lkdGgsIG1heFdpZHRoLCByZXQsXG5cblx0XHQvLyBTdXBwb3J0OiBGaXJlZm94IDUxK1xuXHRcdC8vIFJldHJpZXZpbmcgc3R5bGUgYmVmb3JlIGNvbXB1dGVkIHNvbWVob3dcblx0XHQvLyBmaXhlcyBhbiBpc3N1ZSB3aXRoIGdldHRpbmcgd3JvbmcgdmFsdWVzXG5cdFx0Ly8gb24gZGV0YWNoZWQgZWxlbWVudHNcblx0XHRzdHlsZSA9IGVsZW0uc3R5bGU7XG5cblx0Y29tcHV0ZWQgPSBjb21wdXRlZCB8fCBnZXRTdHlsZXMoIGVsZW0gKTtcblxuXHQvLyBnZXRQcm9wZXJ0eVZhbHVlIGlzIG5lZWRlZCBmb3I6XG5cdC8vICAgLmNzcygnZmlsdGVyJykgKElFIDkgb25seSwgIzEyNTM3KVxuXHQvLyAgIC5jc3MoJy0tY3VzdG9tUHJvcGVydHkpICgjMzE0NClcblx0aWYgKCBjb21wdXRlZCApIHtcblx0XHRyZXQgPSBjb21wdXRlZC5nZXRQcm9wZXJ0eVZhbHVlKCBuYW1lICkgfHwgY29tcHV0ZWRbIG5hbWUgXTtcblxuXHRcdGlmICggcmV0ID09PSBcIlwiICYmICFpc0F0dGFjaGVkKCBlbGVtICkgKSB7XG5cdFx0XHRyZXQgPSBqUXVlcnkuc3R5bGUoIGVsZW0sIG5hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBBIHRyaWJ1dGUgdG8gdGhlIFwiYXdlc29tZSBoYWNrIGJ5IERlYW4gRWR3YXJkc1wiXG5cdFx0Ly8gQW5kcm9pZCBCcm93c2VyIHJldHVybnMgcGVyY2VudGFnZSBmb3Igc29tZSB2YWx1ZXMsXG5cdFx0Ly8gYnV0IHdpZHRoIHNlZW1zIHRvIGJlIHJlbGlhYmx5IHBpeGVscy5cblx0XHQvLyBUaGlzIGlzIGFnYWluc3QgdGhlIENTU09NIGRyYWZ0IHNwZWM6XG5cdFx0Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLyNyZXNvbHZlZC12YWx1ZXNcblx0XHRpZiAoICFzdXBwb3J0LnBpeGVsQm94U3R5bGVzKCkgJiYgcm51bW5vbnB4LnRlc3QoIHJldCApICYmIHJib3hTdHlsZS50ZXN0KCBuYW1lICkgKSB7XG5cblx0XHRcdC8vIFJlbWVtYmVyIHRoZSBvcmlnaW5hbCB2YWx1ZXNcblx0XHRcdHdpZHRoID0gc3R5bGUud2lkdGg7XG5cdFx0XHRtaW5XaWR0aCA9IHN0eWxlLm1pbldpZHRoO1xuXHRcdFx0bWF4V2lkdGggPSBzdHlsZS5tYXhXaWR0aDtcblxuXHRcdFx0Ly8gUHV0IGluIHRoZSBuZXcgdmFsdWVzIHRvIGdldCBhIGNvbXB1dGVkIHZhbHVlIG91dFxuXHRcdFx0c3R5bGUubWluV2lkdGggPSBzdHlsZS5tYXhXaWR0aCA9IHN0eWxlLndpZHRoID0gcmV0O1xuXHRcdFx0cmV0ID0gY29tcHV0ZWQud2lkdGg7XG5cblx0XHRcdC8vIFJldmVydCB0aGUgY2hhbmdlZCB2YWx1ZXNcblx0XHRcdHN0eWxlLndpZHRoID0gd2lkdGg7XG5cdFx0XHRzdHlsZS5taW5XaWR0aCA9IG1pbldpZHRoO1xuXHRcdFx0c3R5bGUubWF4V2lkdGggPSBtYXhXaWR0aDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gcmV0ICE9PSB1bmRlZmluZWQgP1xuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IC0gMTEgb25seVxuXHRcdC8vIElFIHJldHVybnMgekluZGV4IHZhbHVlIGFzIGFuIGludGVnZXIuXG5cdFx0cmV0ICsgXCJcIiA6XG5cdFx0cmV0O1xufVxuXG5cbmZ1bmN0aW9uIGFkZEdldEhvb2tJZiggY29uZGl0aW9uRm4sIGhvb2tGbiApIHtcblxuXHQvLyBEZWZpbmUgdGhlIGhvb2ssIHdlJ2xsIGNoZWNrIG9uIHRoZSBmaXJzdCBydW4gaWYgaXQncyByZWFsbHkgbmVlZGVkLlxuXHRyZXR1cm4ge1xuXHRcdGdldDogZnVuY3Rpb24oKSB7XG5cdFx0XHRpZiAoIGNvbmRpdGlvbkZuKCkgKSB7XG5cblx0XHRcdFx0Ly8gSG9vayBub3QgbmVlZGVkIChvciBpdCdzIG5vdCBwb3NzaWJsZSB0byB1c2UgaXQgZHVlXG5cdFx0XHRcdC8vIHRvIG1pc3NpbmcgZGVwZW5kZW5jeSksIHJlbW92ZSBpdC5cblx0XHRcdFx0ZGVsZXRlIHRoaXMuZ2V0O1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdC8vIEhvb2sgbmVlZGVkOyByZWRlZmluZSBpdCBzbyB0aGF0IHRoZSBzdXBwb3J0IHRlc3QgaXMgbm90IGV4ZWN1dGVkIGFnYWluLlxuXHRcdFx0cmV0dXJuICggdGhpcy5nZXQgPSBob29rRm4gKS5hcHBseSggdGhpcywgYXJndW1lbnRzICk7XG5cdFx0fVxuXHR9O1xufVxuXG5cbnZhciBjc3NQcmVmaXhlcyA9IFsgXCJXZWJraXRcIiwgXCJNb3pcIiwgXCJtc1wiIF0sXG5cdGVtcHR5U3R5bGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImRpdlwiICkuc3R5bGUsXG5cdHZlbmRvclByb3BzID0ge307XG5cbi8vIFJldHVybiBhIHZlbmRvci1wcmVmaXhlZCBwcm9wZXJ0eSBvciB1bmRlZmluZWRcbmZ1bmN0aW9uIHZlbmRvclByb3BOYW1lKCBuYW1lICkge1xuXG5cdC8vIENoZWNrIGZvciB2ZW5kb3IgcHJlZml4ZWQgbmFtZXNcblx0dmFyIGNhcE5hbWUgPSBuYW1lWyAwIF0udG9VcHBlckNhc2UoKSArIG5hbWUuc2xpY2UoIDEgKSxcblx0XHRpID0gY3NzUHJlZml4ZXMubGVuZ3RoO1xuXG5cdHdoaWxlICggaS0tICkge1xuXHRcdG5hbWUgPSBjc3NQcmVmaXhlc1sgaSBdICsgY2FwTmFtZTtcblx0XHRpZiAoIG5hbWUgaW4gZW1wdHlTdHlsZSApIHtcblx0XHRcdHJldHVybiBuYW1lO1xuXHRcdH1cblx0fVxufVxuXG4vLyBSZXR1cm4gYSBwb3RlbnRpYWxseS1tYXBwZWQgalF1ZXJ5LmNzc1Byb3BzIG9yIHZlbmRvciBwcmVmaXhlZCBwcm9wZXJ0eVxuZnVuY3Rpb24gZmluYWxQcm9wTmFtZSggbmFtZSApIHtcblx0dmFyIGZpbmFsID0galF1ZXJ5LmNzc1Byb3BzWyBuYW1lIF0gfHwgdmVuZG9yUHJvcHNbIG5hbWUgXTtcblxuXHRpZiAoIGZpbmFsICkge1xuXHRcdHJldHVybiBmaW5hbDtcblx0fVxuXHRpZiAoIG5hbWUgaW4gZW1wdHlTdHlsZSApIHtcblx0XHRyZXR1cm4gbmFtZTtcblx0fVxuXHRyZXR1cm4gdmVuZG9yUHJvcHNbIG5hbWUgXSA9IHZlbmRvclByb3BOYW1lKCBuYW1lICkgfHwgbmFtZTtcbn1cblxuXG52YXJcblxuXHQvLyBTd2FwcGFibGUgaWYgZGlzcGxheSBpcyBub25lIG9yIHN0YXJ0cyB3aXRoIHRhYmxlXG5cdC8vIGV4Y2VwdCBcInRhYmxlXCIsIFwidGFibGUtY2VsbFwiLCBvciBcInRhYmxlLWNhcHRpb25cIlxuXHQvLyBTZWUgaGVyZSBmb3IgZGlzcGxheSB2YWx1ZXM6IGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvQ1NTL2Rpc3BsYXlcblx0cmRpc3BsYXlzd2FwID0gL14obm9uZXx0YWJsZSg/IS1jW2VhXSkuKykvLFxuXHRyY3VzdG9tUHJvcCA9IC9eLS0vLFxuXHRjc3NTaG93ID0geyBwb3NpdGlvbjogXCJhYnNvbHV0ZVwiLCB2aXNpYmlsaXR5OiBcImhpZGRlblwiLCBkaXNwbGF5OiBcImJsb2NrXCIgfSxcblx0Y3NzTm9ybWFsVHJhbnNmb3JtID0ge1xuXHRcdGxldHRlclNwYWNpbmc6IFwiMFwiLFxuXHRcdGZvbnRXZWlnaHQ6IFwiNDAwXCJcblx0fTtcblxuZnVuY3Rpb24gc2V0UG9zaXRpdmVOdW1iZXIoIF9lbGVtLCB2YWx1ZSwgc3VidHJhY3QgKSB7XG5cblx0Ly8gQW55IHJlbGF0aXZlICgrLy0pIHZhbHVlcyBoYXZlIGFscmVhZHkgYmVlblxuXHQvLyBub3JtYWxpemVkIGF0IHRoaXMgcG9pbnRcblx0dmFyIG1hdGNoZXMgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICk7XG5cdHJldHVybiBtYXRjaGVzID9cblxuXHRcdC8vIEd1YXJkIGFnYWluc3QgdW5kZWZpbmVkIFwic3VidHJhY3RcIiwgZS5nLiwgd2hlbiB1c2VkIGFzIGluIGNzc0hvb2tzXG5cdFx0TWF0aC5tYXgoIDAsIG1hdGNoZXNbIDIgXSAtICggc3VidHJhY3QgfHwgMCApICkgKyAoIG1hdGNoZXNbIDMgXSB8fCBcInB4XCIgKSA6XG5cdFx0dmFsdWU7XG59XG5cbmZ1bmN0aW9uIGJveE1vZGVsQWRqdXN0bWVudCggZWxlbSwgZGltZW5zaW9uLCBib3gsIGlzQm9yZGVyQm94LCBzdHlsZXMsIGNvbXB1dGVkVmFsICkge1xuXHR2YXIgaSA9IGRpbWVuc2lvbiA9PT0gXCJ3aWR0aFwiID8gMSA6IDAsXG5cdFx0ZXh0cmEgPSAwLFxuXHRcdGRlbHRhID0gMDtcblxuXHQvLyBBZGp1c3RtZW50IG1heSBub3QgYmUgbmVjZXNzYXJ5XG5cdGlmICggYm94ID09PSAoIGlzQm9yZGVyQm94ID8gXCJib3JkZXJcIiA6IFwiY29udGVudFwiICkgKSB7XG5cdFx0cmV0dXJuIDA7XG5cdH1cblxuXHRmb3IgKCA7IGkgPCA0OyBpICs9IDIgKSB7XG5cblx0XHQvLyBCb3RoIGJveCBtb2RlbHMgZXhjbHVkZSBtYXJnaW5cblx0XHRpZiAoIGJveCA9PT0gXCJtYXJnaW5cIiApIHtcblx0XHRcdGRlbHRhICs9IGpRdWVyeS5jc3MoIGVsZW0sIGJveCArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblx0XHR9XG5cblx0XHQvLyBJZiB3ZSBnZXQgaGVyZSB3aXRoIGEgY29udGVudC1ib3gsIHdlJ3JlIHNlZWtpbmcgXCJwYWRkaW5nXCIgb3IgXCJib3JkZXJcIiBvciBcIm1hcmdpblwiXG5cdFx0aWYgKCAhaXNCb3JkZXJCb3ggKSB7XG5cblx0XHRcdC8vIEFkZCBwYWRkaW5nXG5cdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblxuXHRcdFx0Ly8gRm9yIFwiYm9yZGVyXCIgb3IgXCJtYXJnaW5cIiwgYWRkIGJvcmRlclxuXHRcdFx0aWYgKCBib3ggIT09IFwicGFkZGluZ1wiICkge1xuXHRcdFx0XHRkZWx0YSArPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXG5cdFx0XHQvLyBCdXQgc3RpbGwga2VlcCB0cmFjayBvZiBpdCBvdGhlcndpc2Vcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGV4dHJhICs9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm9yZGVyXCIgKyBjc3NFeHBhbmRbIGkgXSArIFwiV2lkdGhcIiwgdHJ1ZSwgc3R5bGVzICk7XG5cdFx0XHR9XG5cblx0XHQvLyBJZiB3ZSBnZXQgaGVyZSB3aXRoIGEgYm9yZGVyLWJveCAoY29udGVudCArIHBhZGRpbmcgKyBib3JkZXIpLCB3ZSdyZSBzZWVraW5nIFwiY29udGVudFwiIG9yXG5cdFx0Ly8gXCJwYWRkaW5nXCIgb3IgXCJtYXJnaW5cIlxuXHRcdH0gZWxzZSB7XG5cblx0XHRcdC8vIEZvciBcImNvbnRlbnRcIiwgc3VidHJhY3QgcGFkZGluZ1xuXHRcdFx0aWYgKCBib3ggPT09IFwiY29udGVudFwiICkge1xuXHRcdFx0XHRkZWx0YSAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcInBhZGRpbmdcIiArIGNzc0V4cGFuZFsgaSBdLCB0cnVlLCBzdHlsZXMgKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gRm9yIFwiY29udGVudFwiIG9yIFwicGFkZGluZ1wiLCBzdWJ0cmFjdCBib3JkZXJcblx0XHRcdGlmICggYm94ICE9PSBcIm1hcmdpblwiICkge1xuXHRcdFx0XHRkZWx0YSAtPSBqUXVlcnkuY3NzKCBlbGVtLCBcImJvcmRlclwiICsgY3NzRXhwYW5kWyBpIF0gKyBcIldpZHRoXCIsIHRydWUsIHN0eWxlcyApO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIEFjY291bnQgZm9yIHBvc2l0aXZlIGNvbnRlbnQtYm94IHNjcm9sbCBndXR0ZXIgd2hlbiByZXF1ZXN0ZWQgYnkgcHJvdmlkaW5nIGNvbXB1dGVkVmFsXG5cdGlmICggIWlzQm9yZGVyQm94ICYmIGNvbXB1dGVkVmFsID49IDAgKSB7XG5cblx0XHQvLyBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgaXMgYSByb3VuZGVkIHN1bSBvZiBjb250ZW50LCBwYWRkaW5nLCBzY3JvbGwgZ3V0dGVyLCBhbmQgYm9yZGVyXG5cdFx0Ly8gQXNzdW1pbmcgaW50ZWdlciBzY3JvbGwgZ3V0dGVyLCBzdWJ0cmFjdCB0aGUgcmVzdCBhbmQgcm91bmQgZG93blxuXHRcdGRlbHRhICs9IE1hdGgubWF4KCAwLCBNYXRoLmNlaWwoXG5cdFx0XHRlbGVtWyBcIm9mZnNldFwiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApIF0gLVxuXHRcdFx0Y29tcHV0ZWRWYWwgLVxuXHRcdFx0ZGVsdGEgLVxuXHRcdFx0ZXh0cmEgLVxuXHRcdFx0MC41XG5cblx0XHQvLyBJZiBvZmZzZXRXaWR0aC9vZmZzZXRIZWlnaHQgaXMgdW5rbm93biwgdGhlbiB3ZSBjYW4ndCBkZXRlcm1pbmUgY29udGVudC1ib3ggc2Nyb2xsIGd1dHRlclxuXHRcdC8vIFVzZSBhbiBleHBsaWNpdCB6ZXJvIHRvIGF2b2lkIE5hTiAoZ2gtMzk2NClcblx0XHQpICkgfHwgMDtcblx0fVxuXG5cdHJldHVybiBkZWx0YTtcbn1cblxuZnVuY3Rpb24gZ2V0V2lkdGhPckhlaWdodCggZWxlbSwgZGltZW5zaW9uLCBleHRyYSApIHtcblxuXHQvLyBTdGFydCB3aXRoIGNvbXB1dGVkIHN0eWxlXG5cdHZhciBzdHlsZXMgPSBnZXRTdHlsZXMoIGVsZW0gKSxcblxuXHRcdC8vIFRvIGF2b2lkIGZvcmNpbmcgYSByZWZsb3csIG9ubHkgZmV0Y2ggYm94U2l6aW5nIGlmIHdlIG5lZWQgaXQgKGdoLTQzMjIpLlxuXHRcdC8vIEZha2UgY29udGVudC1ib3ggdW50aWwgd2Uga25vdyBpdCdzIG5lZWRlZCB0byBrbm93IHRoZSB0cnVlIHZhbHVlLlxuXHRcdGJveFNpemluZ05lZWRlZCA9ICFzdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlKCkgfHwgZXh0cmEsXG5cdFx0aXNCb3JkZXJCb3ggPSBib3hTaXppbmdOZWVkZWQgJiZcblx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCIsXG5cdFx0dmFsdWVJc0JvcmRlckJveCA9IGlzQm9yZGVyQm94LFxuXG5cdFx0dmFsID0gY3VyQ1NTKCBlbGVtLCBkaW1lbnNpb24sIHN0eWxlcyApLFxuXHRcdG9mZnNldFByb3AgPSBcIm9mZnNldFwiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApO1xuXG5cdC8vIFN1cHBvcnQ6IEZpcmVmb3ggPD01NFxuXHQvLyBSZXR1cm4gYSBjb25mb3VuZGluZyBub24tcGl4ZWwgdmFsdWUgb3IgZmVpZ24gaWdub3JhbmNlLCBhcyBhcHByb3ByaWF0ZS5cblx0aWYgKCBybnVtbm9ucHgudGVzdCggdmFsICkgKSB7XG5cdFx0aWYgKCAhZXh0cmEgKSB7XG5cdFx0XHRyZXR1cm4gdmFsO1xuXHRcdH1cblx0XHR2YWwgPSBcImF1dG9cIjtcblx0fVxuXG5cblx0Ly8gU3VwcG9ydDogSUUgOSAtIDExIG9ubHlcblx0Ly8gVXNlIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBmb3Igd2hlbiBib3ggc2l6aW5nIGlzIHVucmVsaWFibGUuXG5cdC8vIEluIHRob3NlIGNhc2VzLCB0aGUgY29tcHV0ZWQgdmFsdWUgY2FuIGJlIHRydXN0ZWQgdG8gYmUgYm9yZGVyLWJveC5cblx0aWYgKCAoICFzdXBwb3J0LmJveFNpemluZ1JlbGlhYmxlKCkgJiYgaXNCb3JkZXJCb3ggfHxcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDEwIC0gMTErLCBFZGdlIDE1IC0gMTgrXG5cdFx0Ly8gSUUvRWRnZSBtaXNyZXBvcnQgYGdldENvbXB1dGVkU3R5bGVgIG9mIHRhYmxlIHJvd3Mgd2l0aCB3aWR0aC9oZWlnaHRcblx0XHQvLyBzZXQgaW4gQ1NTIHdoaWxlIGBvZmZzZXQqYCBwcm9wZXJ0aWVzIHJlcG9ydCBjb3JyZWN0IHZhbHVlcy5cblx0XHQvLyBJbnRlcmVzdGluZ2x5LCBpbiBzb21lIGNhc2VzIElFIDkgZG9lc24ndCBzdWZmZXIgZnJvbSB0aGlzIGlzc3VlLlxuXHRcdCFzdXBwb3J0LnJlbGlhYmxlVHJEaW1lbnNpb25zKCkgJiYgbm9kZU5hbWUoIGVsZW0sIFwidHJcIiApIHx8XG5cblx0XHQvLyBGYWxsIGJhY2sgdG8gb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IHdoZW4gdmFsdWUgaXMgXCJhdXRvXCJcblx0XHQvLyBUaGlzIGhhcHBlbnMgZm9yIGlubGluZSBlbGVtZW50cyB3aXRoIG5vIGV4cGxpY2l0IHNldHRpbmcgKGdoLTM1NzEpXG5cdFx0dmFsID09PSBcImF1dG9cIiB8fFxuXG5cdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMSAtIDQuMyBvbmx5XG5cdFx0Ly8gQWxzbyB1c2Ugb2Zmc2V0V2lkdGgvb2Zmc2V0SGVpZ2h0IGZvciBtaXNyZXBvcnRlZCBpbmxpbmUgZGltZW5zaW9ucyAoZ2gtMzYwMilcblx0XHQhcGFyc2VGbG9hdCggdmFsICkgJiYgalF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJpbmxpbmVcIiApICYmXG5cblx0XHQvLyBNYWtlIHN1cmUgdGhlIGVsZW1lbnQgaXMgdmlzaWJsZSAmIGNvbm5lY3RlZFxuXHRcdGVsZW0uZ2V0Q2xpZW50UmVjdHMoKS5sZW5ndGggKSB7XG5cblx0XHRpc0JvcmRlckJveCA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCI7XG5cblx0XHQvLyBXaGVyZSBhdmFpbGFibGUsIG9mZnNldFdpZHRoL29mZnNldEhlaWdodCBhcHByb3hpbWF0ZSBib3JkZXIgYm94IGRpbWVuc2lvbnMuXG5cdFx0Ly8gV2hlcmUgbm90IGF2YWlsYWJsZSAoZS5nLiwgU1ZHKSwgYXNzdW1lIHVucmVsaWFibGUgYm94LXNpemluZyBhbmQgaW50ZXJwcmV0IHRoZVxuXHRcdC8vIHJldHJpZXZlZCB2YWx1ZSBhcyBhIGNvbnRlbnQgYm94IGRpbWVuc2lvbi5cblx0XHR2YWx1ZUlzQm9yZGVyQm94ID0gb2Zmc2V0UHJvcCBpbiBlbGVtO1xuXHRcdGlmICggdmFsdWVJc0JvcmRlckJveCApIHtcblx0XHRcdHZhbCA9IGVsZW1bIG9mZnNldFByb3AgXTtcblx0XHR9XG5cdH1cblxuXHQvLyBOb3JtYWxpemUgXCJcIiBhbmQgYXV0b1xuXHR2YWwgPSBwYXJzZUZsb2F0KCB2YWwgKSB8fCAwO1xuXG5cdC8vIEFkanVzdCBmb3IgdGhlIGVsZW1lbnQncyBib3ggbW9kZWxcblx0cmV0dXJuICggdmFsICtcblx0XHRib3hNb2RlbEFkanVzdG1lbnQoXG5cdFx0XHRlbGVtLFxuXHRcdFx0ZGltZW5zaW9uLFxuXHRcdFx0ZXh0cmEgfHwgKCBpc0JvcmRlckJveCA/IFwiYm9yZGVyXCIgOiBcImNvbnRlbnRcIiApLFxuXHRcdFx0dmFsdWVJc0JvcmRlckJveCxcblx0XHRcdHN0eWxlcyxcblxuXHRcdFx0Ly8gUHJvdmlkZSB0aGUgY3VycmVudCBjb21wdXRlZCBzaXplIHRvIHJlcXVlc3Qgc2Nyb2xsIGd1dHRlciBjYWxjdWxhdGlvbiAoZ2gtMzU4OSlcblx0XHRcdHZhbFxuXHRcdClcblx0KSArIFwicHhcIjtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIEFkZCBpbiBzdHlsZSBwcm9wZXJ0eSBob29rcyBmb3Igb3ZlcnJpZGluZyB0aGUgZGVmYXVsdFxuXHQvLyBiZWhhdmlvciBvZiBnZXR0aW5nIGFuZCBzZXR0aW5nIGEgc3R5bGUgcHJvcGVydHlcblx0Y3NzSG9va3M6IHtcblx0XHRvcGFjaXR5OiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRcdFx0aWYgKCBjb21wdXRlZCApIHtcblxuXHRcdFx0XHRcdC8vIFdlIHNob3VsZCBhbHdheXMgZ2V0IGEgbnVtYmVyIGJhY2sgZnJvbSBvcGFjaXR5XG5cdFx0XHRcdFx0dmFyIHJldCA9IGN1ckNTUyggZWxlbSwgXCJvcGFjaXR5XCIgKTtcblx0XHRcdFx0XHRyZXR1cm4gcmV0ID09PSBcIlwiID8gXCIxXCIgOiByZXQ7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH0sXG5cblx0Ly8gRG9uJ3QgYXV0b21hdGljYWxseSBhZGQgXCJweFwiIHRvIHRoZXNlIHBvc3NpYmx5LXVuaXRsZXNzIHByb3BlcnRpZXNcblx0Y3NzTnVtYmVyOiB7XG5cdFx0XCJhbmltYXRpb25JdGVyYXRpb25Db3VudFwiOiB0cnVlLFxuXHRcdFwiY29sdW1uQ291bnRcIjogdHJ1ZSxcblx0XHRcImZpbGxPcGFjaXR5XCI6IHRydWUsXG5cdFx0XCJmbGV4R3Jvd1wiOiB0cnVlLFxuXHRcdFwiZmxleFNocmlua1wiOiB0cnVlLFxuXHRcdFwiZm9udFdlaWdodFwiOiB0cnVlLFxuXHRcdFwiZ3JpZEFyZWFcIjogdHJ1ZSxcblx0XHRcImdyaWRDb2x1bW5cIjogdHJ1ZSxcblx0XHRcImdyaWRDb2x1bW5FbmRcIjogdHJ1ZSxcblx0XHRcImdyaWRDb2x1bW5TdGFydFwiOiB0cnVlLFxuXHRcdFwiZ3JpZFJvd1wiOiB0cnVlLFxuXHRcdFwiZ3JpZFJvd0VuZFwiOiB0cnVlLFxuXHRcdFwiZ3JpZFJvd1N0YXJ0XCI6IHRydWUsXG5cdFx0XCJsaW5lSGVpZ2h0XCI6IHRydWUsXG5cdFx0XCJvcGFjaXR5XCI6IHRydWUsXG5cdFx0XCJvcmRlclwiOiB0cnVlLFxuXHRcdFwib3JwaGFuc1wiOiB0cnVlLFxuXHRcdFwid2lkb3dzXCI6IHRydWUsXG5cdFx0XCJ6SW5kZXhcIjogdHJ1ZSxcblx0XHRcInpvb21cIjogdHJ1ZVxuXHR9LFxuXG5cdC8vIEFkZCBpbiBwcm9wZXJ0aWVzIHdob3NlIG5hbWVzIHlvdSB3aXNoIHRvIGZpeCBiZWZvcmVcblx0Ly8gc2V0dGluZyBvciBnZXR0aW5nIHRoZSB2YWx1ZVxuXHRjc3NQcm9wczoge30sXG5cblx0Ly8gR2V0IGFuZCBzZXQgdGhlIHN0eWxlIHByb3BlcnR5IG9uIGEgRE9NIE5vZGVcblx0c3R5bGU6IGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSwgZXh0cmEgKSB7XG5cblx0XHQvLyBEb24ndCBzZXQgc3R5bGVzIG9uIHRleHQgYW5kIGNvbW1lbnQgbm9kZXNcblx0XHRpZiAoICFlbGVtIHx8IGVsZW0ubm9kZVR5cGUgPT09IDMgfHwgZWxlbS5ub2RlVHlwZSA9PT0gOCB8fCAhZWxlbS5zdHlsZSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWVcblx0XHR2YXIgcmV0LCB0eXBlLCBob29rcyxcblx0XHRcdG9yaWdOYW1lID0gY2FtZWxDYXNlKCBuYW1lICksXG5cdFx0XHRpc0N1c3RvbVByb3AgPSByY3VzdG9tUHJvcC50ZXN0KCBuYW1lICksXG5cdFx0XHRzdHlsZSA9IGVsZW0uc3R5bGU7XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUuIFdlIGRvbid0XG5cdFx0Ly8gd2FudCB0byBxdWVyeSB0aGUgdmFsdWUgaWYgaXQgaXMgYSBDU1MgY3VzdG9tIHByb3BlcnR5XG5cdFx0Ly8gc2luY2UgdGhleSBhcmUgdXNlci1kZWZpbmVkLlxuXHRcdGlmICggIWlzQ3VzdG9tUHJvcCApIHtcblx0XHRcdG5hbWUgPSBmaW5hbFByb3BOYW1lKCBvcmlnTmFtZSApO1xuXHRcdH1cblxuXHRcdC8vIEdldHMgaG9vayBmb3IgdGhlIHByZWZpeGVkIHZlcnNpb24sIHRoZW4gdW5wcmVmaXhlZCB2ZXJzaW9uXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07XG5cblx0XHQvLyBDaGVjayBpZiB3ZSdyZSBzZXR0aW5nIGEgdmFsdWVcblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR0eXBlID0gdHlwZW9mIHZhbHVlO1xuXG5cdFx0XHQvLyBDb252ZXJ0IFwiKz1cIiBvciBcIi09XCIgdG8gcmVsYXRpdmUgbnVtYmVycyAoIzczNDUpXG5cdFx0XHRpZiAoIHR5cGUgPT09IFwic3RyaW5nXCIgJiYgKCByZXQgPSByY3NzTnVtLmV4ZWMoIHZhbHVlICkgKSAmJiByZXRbIDEgXSApIHtcblx0XHRcdFx0dmFsdWUgPSBhZGp1c3RDU1MoIGVsZW0sIG5hbWUsIHJldCApO1xuXG5cdFx0XHRcdC8vIEZpeGVzIGJ1ZyAjOTIzN1xuXHRcdFx0XHR0eXBlID0gXCJudW1iZXJcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFrZSBzdXJlIHRoYXQgbnVsbCBhbmQgTmFOIHZhbHVlcyBhcmVuJ3Qgc2V0ICgjNzExNilcblx0XHRcdGlmICggdmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSAhPT0gdmFsdWUgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgYSBudW1iZXIgd2FzIHBhc3NlZCBpbiwgYWRkIHRoZSB1bml0IChleGNlcHQgZm9yIGNlcnRhaW4gQ1NTIHByb3BlcnRpZXMpXG5cdFx0XHQvLyBUaGUgaXNDdXN0b21Qcm9wIGNoZWNrIGNhbiBiZSByZW1vdmVkIGluIGpRdWVyeSA0LjAgd2hlbiB3ZSBvbmx5IGF1dG8tYXBwZW5kXG5cdFx0XHQvLyBcInB4XCIgdG8gYSBmZXcgaGFyZGNvZGVkIHZhbHVlcy5cblx0XHRcdGlmICggdHlwZSA9PT0gXCJudW1iZXJcIiAmJiAhaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0XHR2YWx1ZSArPSByZXQgJiYgcmV0WyAzIF0gfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBvcmlnTmFtZSBdID8gXCJcIiA6IFwicHhcIiApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBiYWNrZ3JvdW5kLSogcHJvcHMgYWZmZWN0IG9yaWdpbmFsIGNsb25lJ3MgdmFsdWVzXG5cdFx0XHRpZiAoICFzdXBwb3J0LmNsZWFyQ2xvbmVTdHlsZSAmJiB2YWx1ZSA9PT0gXCJcIiAmJiBuYW1lLmluZGV4T2YoIFwiYmFja2dyb3VuZFwiICkgPT09IDAgKSB7XG5cdFx0XHRcdHN0eWxlWyBuYW1lIF0gPSBcImluaGVyaXRcIjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCwgdXNlIHRoYXQgdmFsdWUsIG90aGVyd2lzZSBqdXN0IHNldCB0aGUgc3BlY2lmaWVkIHZhbHVlXG5cdFx0XHRpZiAoICFob29rcyB8fCAhKCBcInNldFwiIGluIGhvb2tzICkgfHxcblx0XHRcdFx0KCB2YWx1ZSA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIGV4dHJhICkgKSAhPT0gdW5kZWZpbmVkICkge1xuXG5cdFx0XHRcdGlmICggaXNDdXN0b21Qcm9wICkge1xuXHRcdFx0XHRcdHN0eWxlLnNldFByb3BlcnR5KCBuYW1lLCB2YWx1ZSApO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHN0eWxlWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0fSBlbHNlIHtcblxuXHRcdFx0Ly8gSWYgYSBob29rIHdhcyBwcm92aWRlZCBnZXQgdGhlIG5vbi1jb21wdXRlZCB2YWx1ZSBmcm9tIHRoZXJlXG5cdFx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0KCByZXQgPSBob29rcy5nZXQoIGVsZW0sIGZhbHNlLCBleHRyYSApICkgIT09IHVuZGVmaW5lZCApIHtcblxuXHRcdFx0XHRyZXR1cm4gcmV0O1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBPdGhlcndpc2UganVzdCBnZXQgdGhlIHZhbHVlIGZyb20gdGhlIHN0eWxlIG9iamVjdFxuXHRcdFx0cmV0dXJuIHN0eWxlWyBuYW1lIF07XG5cdFx0fVxuXHR9LFxuXG5cdGNzczogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIGV4dHJhLCBzdHlsZXMgKSB7XG5cdFx0dmFyIHZhbCwgbnVtLCBob29rcyxcblx0XHRcdG9yaWdOYW1lID0gY2FtZWxDYXNlKCBuYW1lICksXG5cdFx0XHRpc0N1c3RvbVByb3AgPSByY3VzdG9tUHJvcC50ZXN0KCBuYW1lICk7XG5cblx0XHQvLyBNYWtlIHN1cmUgdGhhdCB3ZSdyZSB3b3JraW5nIHdpdGggdGhlIHJpZ2h0IG5hbWUuIFdlIGRvbid0XG5cdFx0Ly8gd2FudCB0byBtb2RpZnkgdGhlIHZhbHVlIGlmIGl0IGlzIGEgQ1NTIGN1c3RvbSBwcm9wZXJ0eVxuXHRcdC8vIHNpbmNlIHRoZXkgYXJlIHVzZXItZGVmaW5lZC5cblx0XHRpZiAoICFpc0N1c3RvbVByb3AgKSB7XG5cdFx0XHRuYW1lID0gZmluYWxQcm9wTmFtZSggb3JpZ05hbWUgKTtcblx0XHR9XG5cblx0XHQvLyBUcnkgcHJlZml4ZWQgbmFtZSBmb2xsb3dlZCBieSB0aGUgdW5wcmVmaXhlZCBuYW1lXG5cdFx0aG9va3MgPSBqUXVlcnkuY3NzSG9va3NbIG5hbWUgXSB8fCBqUXVlcnkuY3NzSG9va3NbIG9yaWdOYW1lIF07XG5cblx0XHQvLyBJZiBhIGhvb2sgd2FzIHByb3ZpZGVkIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZnJvbSB0aGVyZVxuXHRcdGlmICggaG9va3MgJiYgXCJnZXRcIiBpbiBob29rcyApIHtcblx0XHRcdHZhbCA9IGhvb2tzLmdldCggZWxlbSwgdHJ1ZSwgZXh0cmEgKTtcblx0XHR9XG5cblx0XHQvLyBPdGhlcndpc2UsIGlmIGEgd2F5IHRvIGdldCB0aGUgY29tcHV0ZWQgdmFsdWUgZXhpc3RzLCB1c2UgdGhhdFxuXHRcdGlmICggdmFsID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHR2YWwgPSBjdXJDU1MoIGVsZW0sIG5hbWUsIHN0eWxlcyApO1xuXHRcdH1cblxuXHRcdC8vIENvbnZlcnQgXCJub3JtYWxcIiB0byBjb21wdXRlZCB2YWx1ZVxuXHRcdGlmICggdmFsID09PSBcIm5vcm1hbFwiICYmIG5hbWUgaW4gY3NzTm9ybWFsVHJhbnNmb3JtICkge1xuXHRcdFx0dmFsID0gY3NzTm9ybWFsVHJhbnNmb3JtWyBuYW1lIF07XG5cdFx0fVxuXG5cdFx0Ly8gTWFrZSBudW1lcmljIGlmIGZvcmNlZCBvciBhIHF1YWxpZmllciB3YXMgcHJvdmlkZWQgYW5kIHZhbCBsb29rcyBudW1lcmljXG5cdFx0aWYgKCBleHRyYSA9PT0gXCJcIiB8fCBleHRyYSApIHtcblx0XHRcdG51bSA9IHBhcnNlRmxvYXQoIHZhbCApO1xuXHRcdFx0cmV0dXJuIGV4dHJhID09PSB0cnVlIHx8IGlzRmluaXRlKCBudW0gKSA/IG51bSB8fCAwIDogdmFsO1xuXHRcdH1cblxuXHRcdHJldHVybiB2YWw7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJoZWlnaHRcIiwgXCJ3aWR0aFwiIF0sIGZ1bmN0aW9uKCBfaSwgZGltZW5zaW9uICkge1xuXHRqUXVlcnkuY3NzSG9va3NbIGRpbWVuc2lvbiBdID0ge1xuXHRcdGdldDogZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkLCBleHRyYSApIHtcblx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cblx0XHRcdFx0Ly8gQ2VydGFpbiBlbGVtZW50cyBjYW4gaGF2ZSBkaW1lbnNpb24gaW5mbyBpZiB3ZSBpbnZpc2libHkgc2hvdyB0aGVtXG5cdFx0XHRcdC8vIGJ1dCBpdCBtdXN0IGhhdmUgYSBjdXJyZW50IGRpc3BsYXkgc3R5bGUgdGhhdCB3b3VsZCBiZW5lZml0XG5cdFx0XHRcdHJldHVybiByZGlzcGxheXN3YXAudGVzdCggalF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKSApICYmXG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBTYWZhcmkgOCtcblx0XHRcdFx0XHQvLyBUYWJsZSBjb2x1bW5zIGluIFNhZmFyaSBoYXZlIG5vbi16ZXJvIG9mZnNldFdpZHRoICYgemVyb1xuXHRcdFx0XHRcdC8vIGdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoIHVubGVzcyBkaXNwbGF5IGlzIGNoYW5nZWQuXG5cdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdFx0XHRcdFx0Ly8gUnVubmluZyBnZXRCb3VuZGluZ0NsaWVudFJlY3Qgb24gYSBkaXNjb25uZWN0ZWQgbm9kZVxuXHRcdFx0XHRcdC8vIGluIElFIHRocm93cyBhbiBlcnJvci5cblx0XHRcdFx0XHQoICFlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoIHx8ICFlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoICkgP1xuXHRcdFx0XHRcdHN3YXAoIGVsZW0sIGNzc1Nob3csIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRcdFx0cmV0dXJuIGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIGRpbWVuc2lvbiwgZXh0cmEgKTtcblx0XHRcdFx0XHR9ICkgOlxuXHRcdFx0XHRcdGdldFdpZHRoT3JIZWlnaHQoIGVsZW0sIGRpbWVuc2lvbiwgZXh0cmEgKTtcblx0XHRcdH1cblx0XHR9LFxuXG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUsIGV4dHJhICkge1xuXHRcdFx0dmFyIG1hdGNoZXMsXG5cdFx0XHRcdHN0eWxlcyA9IGdldFN0eWxlcyggZWxlbSApLFxuXG5cdFx0XHRcdC8vIE9ubHkgcmVhZCBzdHlsZXMucG9zaXRpb24gaWYgdGhlIHRlc3QgaGFzIGEgY2hhbmNlIHRvIGZhaWxcblx0XHRcdFx0Ly8gdG8gYXZvaWQgZm9yY2luZyBhIHJlZmxvdy5cblx0XHRcdFx0c2Nyb2xsYm94U2l6ZUJ1Z2d5ID0gIXN1cHBvcnQuc2Nyb2xsYm94U2l6ZSgpICYmXG5cdFx0XHRcdFx0c3R5bGVzLnBvc2l0aW9uID09PSBcImFic29sdXRlXCIsXG5cblx0XHRcdFx0Ly8gVG8gYXZvaWQgZm9yY2luZyBhIHJlZmxvdywgb25seSBmZXRjaCBib3hTaXppbmcgaWYgd2UgbmVlZCBpdCAoZ2gtMzk5MSlcblx0XHRcdFx0Ym94U2l6aW5nTmVlZGVkID0gc2Nyb2xsYm94U2l6ZUJ1Z2d5IHx8IGV4dHJhLFxuXHRcdFx0XHRpc0JvcmRlckJveCA9IGJveFNpemluZ05lZWRlZCAmJlxuXHRcdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIFwiYm94U2l6aW5nXCIsIGZhbHNlLCBzdHlsZXMgKSA9PT0gXCJib3JkZXItYm94XCIsXG5cdFx0XHRcdHN1YnRyYWN0ID0gZXh0cmEgP1xuXHRcdFx0XHRcdGJveE1vZGVsQWRqdXN0bWVudChcblx0XHRcdFx0XHRcdGVsZW0sXG5cdFx0XHRcdFx0XHRkaW1lbnNpb24sXG5cdFx0XHRcdFx0XHRleHRyYSxcblx0XHRcdFx0XHRcdGlzQm9yZGVyQm94LFxuXHRcdFx0XHRcdFx0c3R5bGVzXG5cdFx0XHRcdFx0KSA6XG5cdFx0XHRcdFx0MDtcblxuXHRcdFx0Ly8gQWNjb3VudCBmb3IgdW5yZWxpYWJsZSBib3JkZXItYm94IGRpbWVuc2lvbnMgYnkgY29tcGFyaW5nIG9mZnNldCogdG8gY29tcHV0ZWQgYW5kXG5cdFx0XHQvLyBmYWtpbmcgYSBjb250ZW50LWJveCB0byBnZXQgYm9yZGVyIGFuZCBwYWRkaW5nIChnaC0zNjk5KVxuXHRcdFx0aWYgKCBpc0JvcmRlckJveCAmJiBzY3JvbGxib3hTaXplQnVnZ3kgKSB7XG5cdFx0XHRcdHN1YnRyYWN0IC09IE1hdGguY2VpbChcblx0XHRcdFx0XHRlbGVtWyBcIm9mZnNldFwiICsgZGltZW5zaW9uWyAwIF0udG9VcHBlckNhc2UoKSArIGRpbWVuc2lvbi5zbGljZSggMSApIF0gLVxuXHRcdFx0XHRcdHBhcnNlRmxvYXQoIHN0eWxlc1sgZGltZW5zaW9uIF0gKSAtXG5cdFx0XHRcdFx0Ym94TW9kZWxBZGp1c3RtZW50KCBlbGVtLCBkaW1lbnNpb24sIFwiYm9yZGVyXCIsIGZhbHNlLCBzdHlsZXMgKSAtXG5cdFx0XHRcdFx0MC41XG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbnZlcnQgdG8gcGl4ZWxzIGlmIHZhbHVlIGFkanVzdG1lbnQgaXMgbmVlZGVkXG5cdFx0XHRpZiAoIHN1YnRyYWN0ICYmICggbWF0Y2hlcyA9IHJjc3NOdW0uZXhlYyggdmFsdWUgKSApICYmXG5cdFx0XHRcdCggbWF0Y2hlc1sgMyBdIHx8IFwicHhcIiApICE9PSBcInB4XCIgKSB7XG5cblx0XHRcdFx0ZWxlbS5zdHlsZVsgZGltZW5zaW9uIF0gPSB2YWx1ZTtcblx0XHRcdFx0dmFsdWUgPSBqUXVlcnkuY3NzKCBlbGVtLCBkaW1lbnNpb24gKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHNldFBvc2l0aXZlTnVtYmVyKCBlbGVtLCB2YWx1ZSwgc3VidHJhY3QgKTtcblx0XHR9XG5cdH07XG59ICk7XG5cbmpRdWVyeS5jc3NIb29rcy5tYXJnaW5MZWZ0ID0gYWRkR2V0SG9va0lmKCBzdXBwb3J0LnJlbGlhYmxlTWFyZ2luTGVmdCxcblx0ZnVuY3Rpb24oIGVsZW0sIGNvbXB1dGVkICkge1xuXHRcdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0XHRyZXR1cm4gKCBwYXJzZUZsb2F0KCBjdXJDU1MoIGVsZW0sIFwibWFyZ2luTGVmdFwiICkgKSB8fFxuXHRcdFx0XHRlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQgLVxuXHRcdFx0XHRcdHN3YXAoIGVsZW0sIHsgbWFyZ2luTGVmdDogMCB9LCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHJldHVybiBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmxlZnQ7XG5cdFx0XHRcdFx0fSApXG5cdFx0XHQpICsgXCJweFwiO1xuXHRcdH1cblx0fVxuKTtcblxuLy8gVGhlc2UgaG9va3MgYXJlIHVzZWQgYnkgYW5pbWF0ZSB0byBleHBhbmQgcHJvcGVydGllc1xualF1ZXJ5LmVhY2goIHtcblx0bWFyZ2luOiBcIlwiLFxuXHRwYWRkaW5nOiBcIlwiLFxuXHRib3JkZXI6IFwiV2lkdGhcIlxufSwgZnVuY3Rpb24oIHByZWZpeCwgc3VmZml4ICkge1xuXHRqUXVlcnkuY3NzSG9va3NbIHByZWZpeCArIHN1ZmZpeCBdID0ge1xuXHRcdGV4cGFuZDogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdFx0dmFyIGkgPSAwLFxuXHRcdFx0XHRleHBhbmRlZCA9IHt9LFxuXG5cdFx0XHRcdC8vIEFzc3VtZXMgYSBzaW5nbGUgbnVtYmVyIGlmIG5vdCBhIHN0cmluZ1xuXHRcdFx0XHRwYXJ0cyA9IHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIiA/IHZhbHVlLnNwbGl0KCBcIiBcIiApIDogWyB2YWx1ZSBdO1xuXG5cdFx0XHRmb3IgKCA7IGkgPCA0OyBpKysgKSB7XG5cdFx0XHRcdGV4cGFuZGVkWyBwcmVmaXggKyBjc3NFeHBhbmRbIGkgXSArIHN1ZmZpeCBdID1cblx0XHRcdFx0XHRwYXJ0c1sgaSBdIHx8IHBhcnRzWyBpIC0gMiBdIHx8IHBhcnRzWyAwIF07XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiBleHBhbmRlZDtcblx0XHR9XG5cdH07XG5cblx0aWYgKCBwcmVmaXggIT09IFwibWFyZ2luXCIgKSB7XG5cdFx0alF1ZXJ5LmNzc0hvb2tzWyBwcmVmaXggKyBzdWZmaXggXS5zZXQgPSBzZXRQb3NpdGl2ZU51bWJlcjtcblx0fVxufSApO1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGNzczogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBuYW1lLCB2YWx1ZSApIHtcblx0XHRcdHZhciBzdHlsZXMsIGxlbixcblx0XHRcdFx0bWFwID0ge30sXG5cdFx0XHRcdGkgPSAwO1xuXG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIG5hbWUgKSApIHtcblx0XHRcdFx0c3R5bGVzID0gZ2V0U3R5bGVzKCBlbGVtICk7XG5cdFx0XHRcdGxlbiA9IG5hbWUubGVuZ3RoO1xuXG5cdFx0XHRcdGZvciAoIDsgaSA8IGxlbjsgaSsrICkge1xuXHRcdFx0XHRcdG1hcFsgbmFtZVsgaSBdIF0gPSBqUXVlcnkuY3NzKCBlbGVtLCBuYW1lWyBpIF0sIGZhbHNlLCBzdHlsZXMgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJldHVybiBtYXA7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiB2YWx1ZSAhPT0gdW5kZWZpbmVkID9cblx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBuYW1lLCB2YWx1ZSApIDpcblx0XHRcdFx0alF1ZXJ5LmNzcyggZWxlbSwgbmFtZSApO1xuXHRcdH0sIG5hbWUsIHZhbHVlLCBhcmd1bWVudHMubGVuZ3RoID4gMSApO1xuXHR9XG59ICk7XG5cblxuZnVuY3Rpb24gVHdlZW4oIGVsZW0sIG9wdGlvbnMsIHByb3AsIGVuZCwgZWFzaW5nICkge1xuXHRyZXR1cm4gbmV3IFR3ZWVuLnByb3RvdHlwZS5pbml0KCBlbGVtLCBvcHRpb25zLCBwcm9wLCBlbmQsIGVhc2luZyApO1xufVxualF1ZXJ5LlR3ZWVuID0gVHdlZW47XG5cblR3ZWVuLnByb3RvdHlwZSA9IHtcblx0Y29uc3RydWN0b3I6IFR3ZWVuLFxuXHRpbml0OiBmdW5jdGlvbiggZWxlbSwgb3B0aW9ucywgcHJvcCwgZW5kLCBlYXNpbmcsIHVuaXQgKSB7XG5cdFx0dGhpcy5lbGVtID0gZWxlbTtcblx0XHR0aGlzLnByb3AgPSBwcm9wO1xuXHRcdHRoaXMuZWFzaW5nID0gZWFzaW5nIHx8IGpRdWVyeS5lYXNpbmcuX2RlZmF1bHQ7XG5cdFx0dGhpcy5vcHRpb25zID0gb3B0aW9ucztcblx0XHR0aGlzLnN0YXJ0ID0gdGhpcy5ub3cgPSB0aGlzLmN1cigpO1xuXHRcdHRoaXMuZW5kID0gZW5kO1xuXHRcdHRoaXMudW5pdCA9IHVuaXQgfHwgKCBqUXVlcnkuY3NzTnVtYmVyWyBwcm9wIF0gPyBcIlwiIDogXCJweFwiICk7XG5cdH0sXG5cdGN1cjogZnVuY3Rpb24oKSB7XG5cdFx0dmFyIGhvb2tzID0gVHdlZW4ucHJvcEhvb2tzWyB0aGlzLnByb3AgXTtcblxuXHRcdHJldHVybiBob29rcyAmJiBob29rcy5nZXQgP1xuXHRcdFx0aG9va3MuZ2V0KCB0aGlzICkgOlxuXHRcdFx0VHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LmdldCggdGhpcyApO1xuXHR9LFxuXHRydW46IGZ1bmN0aW9uKCBwZXJjZW50ICkge1xuXHRcdHZhciBlYXNlZCxcblx0XHRcdGhvb2tzID0gVHdlZW4ucHJvcEhvb2tzWyB0aGlzLnByb3AgXTtcblxuXHRcdGlmICggdGhpcy5vcHRpb25zLmR1cmF0aW9uICkge1xuXHRcdFx0dGhpcy5wb3MgPSBlYXNlZCA9IGpRdWVyeS5lYXNpbmdbIHRoaXMuZWFzaW5nIF0oXG5cdFx0XHRcdHBlcmNlbnQsIHRoaXMub3B0aW9ucy5kdXJhdGlvbiAqIHBlcmNlbnQsIDAsIDEsIHRoaXMub3B0aW9ucy5kdXJhdGlvblxuXHRcdFx0KTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5wb3MgPSBlYXNlZCA9IHBlcmNlbnQ7XG5cdFx0fVxuXHRcdHRoaXMubm93ID0gKCB0aGlzLmVuZCAtIHRoaXMuc3RhcnQgKSAqIGVhc2VkICsgdGhpcy5zdGFydDtcblxuXHRcdGlmICggdGhpcy5vcHRpb25zLnN0ZXAgKSB7XG5cdFx0XHR0aGlzLm9wdGlvbnMuc3RlcC5jYWxsKCB0aGlzLmVsZW0sIHRoaXMubm93LCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBob29rcy5zZXQgKSB7XG5cdFx0XHRob29rcy5zZXQoIHRoaXMgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0VHdlZW4ucHJvcEhvb2tzLl9kZWZhdWx0LnNldCggdGhpcyApO1xuXHRcdH1cblx0XHRyZXR1cm4gdGhpcztcblx0fVxufTtcblxuVHdlZW4ucHJvdG90eXBlLmluaXQucHJvdG90eXBlID0gVHdlZW4ucHJvdG90eXBlO1xuXG5Ud2Vlbi5wcm9wSG9va3MgPSB7XG5cdF9kZWZhdWx0OiB7XG5cdFx0Z2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XG5cdFx0XHR2YXIgcmVzdWx0O1xuXG5cdFx0XHQvLyBVc2UgYSBwcm9wZXJ0eSBvbiB0aGUgZWxlbWVudCBkaXJlY3RseSB3aGVuIGl0IGlzIG5vdCBhIERPTSBlbGVtZW50LFxuXHRcdFx0Ly8gb3Igd2hlbiB0aGVyZSBpcyBubyBtYXRjaGluZyBzdHlsZSBwcm9wZXJ0eSB0aGF0IGV4aXN0cy5cblx0XHRcdGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSAhPT0gMSB8fFxuXHRcdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gIT0gbnVsbCAmJiB0d2Vlbi5lbGVtLnN0eWxlWyB0d2Vlbi5wcm9wIF0gPT0gbnVsbCApIHtcblx0XHRcdFx0cmV0dXJuIHR3ZWVuLmVsZW1bIHR3ZWVuLnByb3AgXTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gUGFzc2luZyBhbiBlbXB0eSBzdHJpbmcgYXMgYSAzcmQgcGFyYW1ldGVyIHRvIC5jc3Mgd2lsbCBhdXRvbWF0aWNhbGx5XG5cdFx0XHQvLyBhdHRlbXB0IGEgcGFyc2VGbG9hdCBhbmQgZmFsbGJhY2sgdG8gYSBzdHJpbmcgaWYgdGhlIHBhcnNlIGZhaWxzLlxuXHRcdFx0Ly8gU2ltcGxlIHZhbHVlcyBzdWNoIGFzIFwiMTBweFwiIGFyZSBwYXJzZWQgdG8gRmxvYXQ7XG5cdFx0XHQvLyBjb21wbGV4IHZhbHVlcyBzdWNoIGFzIFwicm90YXRlKDFyYWQpXCIgYXJlIHJldHVybmVkIGFzLWlzLlxuXHRcdFx0cmVzdWx0ID0galF1ZXJ5LmNzcyggdHdlZW4uZWxlbSwgdHdlZW4ucHJvcCwgXCJcIiApO1xuXG5cdFx0XHQvLyBFbXB0eSBzdHJpbmdzLCBudWxsLCB1bmRlZmluZWQgYW5kIFwiYXV0b1wiIGFyZSBjb252ZXJ0ZWQgdG8gMC5cblx0XHRcdHJldHVybiAhcmVzdWx0IHx8IHJlc3VsdCA9PT0gXCJhdXRvXCIgPyAwIDogcmVzdWx0O1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiggdHdlZW4gKSB7XG5cblx0XHRcdC8vIFVzZSBzdGVwIGhvb2sgZm9yIGJhY2sgY29tcGF0LlxuXHRcdFx0Ly8gVXNlIGNzc0hvb2sgaWYgaXRzIHRoZXJlLlxuXHRcdFx0Ly8gVXNlIC5zdHlsZSBpZiBhdmFpbGFibGUgYW5kIHVzZSBwbGFpbiBwcm9wZXJ0aWVzIHdoZXJlIGF2YWlsYWJsZS5cblx0XHRcdGlmICggalF1ZXJ5LmZ4LnN0ZXBbIHR3ZWVuLnByb3AgXSApIHtcblx0XHRcdFx0alF1ZXJ5LmZ4LnN0ZXBbIHR3ZWVuLnByb3AgXSggdHdlZW4gKTtcblx0XHRcdH0gZWxzZSBpZiAoIHR3ZWVuLmVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKFxuXHRcdFx0XHRqUXVlcnkuY3NzSG9va3NbIHR3ZWVuLnByb3AgXSB8fFxuXHRcdFx0XHRcdHR3ZWVuLmVsZW0uc3R5bGVbIGZpbmFsUHJvcE5hbWUoIHR3ZWVuLnByb3AgKSBdICE9IG51bGwgKSApIHtcblx0XHRcdFx0alF1ZXJ5LnN0eWxlKCB0d2Vlbi5lbGVtLCB0d2Vlbi5wcm9wLCB0d2Vlbi5ub3cgKyB0d2Vlbi51bml0ICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59O1xuXG4vLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuLy8gUGFuaWMgYmFzZWQgYXBwcm9hY2ggdG8gc2V0dGluZyB0aGluZ3Mgb24gZGlzY29ubmVjdGVkIG5vZGVzXG5Ud2Vlbi5wcm9wSG9va3Muc2Nyb2xsVG9wID0gVHdlZW4ucHJvcEhvb2tzLnNjcm9sbExlZnQgPSB7XG5cdHNldDogZnVuY3Rpb24oIHR3ZWVuICkge1xuXHRcdGlmICggdHdlZW4uZWxlbS5ub2RlVHlwZSAmJiB0d2Vlbi5lbGVtLnBhcmVudE5vZGUgKSB7XG5cdFx0XHR0d2Vlbi5lbGVtWyB0d2Vlbi5wcm9wIF0gPSB0d2Vlbi5ub3c7XG5cdFx0fVxuXHR9XG59O1xuXG5qUXVlcnkuZWFzaW5nID0ge1xuXHRsaW5lYXI6IGZ1bmN0aW9uKCBwICkge1xuXHRcdHJldHVybiBwO1xuXHR9LFxuXHRzd2luZzogZnVuY3Rpb24oIHAgKSB7XG5cdFx0cmV0dXJuIDAuNSAtIE1hdGguY29zKCBwICogTWF0aC5QSSApIC8gMjtcblx0fSxcblx0X2RlZmF1bHQ6IFwic3dpbmdcIlxufTtcblxualF1ZXJ5LmZ4ID0gVHdlZW4ucHJvdG90eXBlLmluaXQ7XG5cbi8vIEJhY2sgY29tcGF0IDwxLjggZXh0ZW5zaW9uIHBvaW50XG5qUXVlcnkuZnguc3RlcCA9IHt9O1xuXG5cblxuXG52YXJcblx0ZnhOb3csIGluUHJvZ3Jlc3MsXG5cdHJmeHR5cGVzID0gL14oPzp0b2dnbGV8c2hvd3xoaWRlKSQvLFxuXHRycnVuID0gL3F1ZXVlSG9va3MkLztcblxuZnVuY3Rpb24gc2NoZWR1bGUoKSB7XG5cdGlmICggaW5Qcm9ncmVzcyApIHtcblx0XHRpZiAoIGRvY3VtZW50LmhpZGRlbiA9PT0gZmFsc2UgJiYgd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSApIHtcblx0XHRcdHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUoIHNjaGVkdWxlICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBzY2hlZHVsZSwgalF1ZXJ5LmZ4LmludGVydmFsICk7XG5cdFx0fVxuXG5cdFx0alF1ZXJ5LmZ4LnRpY2soKTtcblx0fVxufVxuXG4vLyBBbmltYXRpb25zIGNyZWF0ZWQgc3luY2hyb25vdXNseSB3aWxsIHJ1biBzeW5jaHJvbm91c2x5XG5mdW5jdGlvbiBjcmVhdGVGeE5vdygpIHtcblx0d2luZG93LnNldFRpbWVvdXQoIGZ1bmN0aW9uKCkge1xuXHRcdGZ4Tm93ID0gdW5kZWZpbmVkO1xuXHR9ICk7XG5cdHJldHVybiAoIGZ4Tm93ID0gRGF0ZS5ub3coKSApO1xufVxuXG4vLyBHZW5lcmF0ZSBwYXJhbWV0ZXJzIHRvIGNyZWF0ZSBhIHN0YW5kYXJkIGFuaW1hdGlvblxuZnVuY3Rpb24gZ2VuRngoIHR5cGUsIGluY2x1ZGVXaWR0aCApIHtcblx0dmFyIHdoaWNoLFxuXHRcdGkgPSAwLFxuXHRcdGF0dHJzID0geyBoZWlnaHQ6IHR5cGUgfTtcblxuXHQvLyBJZiB3ZSBpbmNsdWRlIHdpZHRoLCBzdGVwIHZhbHVlIGlzIDEgdG8gZG8gYWxsIGNzc0V4cGFuZCB2YWx1ZXMsXG5cdC8vIG90aGVyd2lzZSBzdGVwIHZhbHVlIGlzIDIgdG8gc2tpcCBvdmVyIExlZnQgYW5kIFJpZ2h0XG5cdGluY2x1ZGVXaWR0aCA9IGluY2x1ZGVXaWR0aCA/IDEgOiAwO1xuXHRmb3IgKCA7IGkgPCA0OyBpICs9IDIgLSBpbmNsdWRlV2lkdGggKSB7XG5cdFx0d2hpY2ggPSBjc3NFeHBhbmRbIGkgXTtcblx0XHRhdHRyc1sgXCJtYXJnaW5cIiArIHdoaWNoIF0gPSBhdHRyc1sgXCJwYWRkaW5nXCIgKyB3aGljaCBdID0gdHlwZTtcblx0fVxuXG5cdGlmICggaW5jbHVkZVdpZHRoICkge1xuXHRcdGF0dHJzLm9wYWNpdHkgPSBhdHRycy53aWR0aCA9IHR5cGU7XG5cdH1cblxuXHRyZXR1cm4gYXR0cnM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZVR3ZWVuKCB2YWx1ZSwgcHJvcCwgYW5pbWF0aW9uICkge1xuXHR2YXIgdHdlZW4sXG5cdFx0Y29sbGVjdGlvbiA9ICggQW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gfHwgW10gKS5jb25jYXQoIEFuaW1hdGlvbi50d2VlbmVyc1sgXCIqXCIgXSApLFxuXHRcdGluZGV4ID0gMCxcblx0XHRsZW5ndGggPSBjb2xsZWN0aW9uLmxlbmd0aDtcblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRpZiAoICggdHdlZW4gPSBjb2xsZWN0aW9uWyBpbmRleCBdLmNhbGwoIGFuaW1hdGlvbiwgcHJvcCwgdmFsdWUgKSApICkge1xuXG5cdFx0XHQvLyBXZSdyZSBkb25lIHdpdGggdGhpcyBwcm9wZXJ0eVxuXHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBkZWZhdWx0UHJlZmlsdGVyKCBlbGVtLCBwcm9wcywgb3B0cyApIHtcblx0dmFyIHByb3AsIHZhbHVlLCB0b2dnbGUsIGhvb2tzLCBvbGRmaXJlLCBwcm9wVHdlZW4sIHJlc3RvcmVEaXNwbGF5LCBkaXNwbGF5LFxuXHRcdGlzQm94ID0gXCJ3aWR0aFwiIGluIHByb3BzIHx8IFwiaGVpZ2h0XCIgaW4gcHJvcHMsXG5cdFx0YW5pbSA9IHRoaXMsXG5cdFx0b3JpZyA9IHt9LFxuXHRcdHN0eWxlID0gZWxlbS5zdHlsZSxcblx0XHRoaWRkZW4gPSBlbGVtLm5vZGVUeXBlICYmIGlzSGlkZGVuV2l0aGluVHJlZSggZWxlbSApLFxuXHRcdGRhdGFTaG93ID0gZGF0YVByaXYuZ2V0KCBlbGVtLCBcImZ4c2hvd1wiICk7XG5cblx0Ly8gUXVldWUtc2tpcHBpbmcgYW5pbWF0aW9ucyBoaWphY2sgdGhlIGZ4IGhvb2tzXG5cdGlmICggIW9wdHMucXVldWUgKSB7XG5cdFx0aG9va3MgPSBqUXVlcnkuX3F1ZXVlSG9va3MoIGVsZW0sIFwiZnhcIiApO1xuXHRcdGlmICggaG9va3MudW5xdWV1ZWQgPT0gbnVsbCApIHtcblx0XHRcdGhvb2tzLnVucXVldWVkID0gMDtcblx0XHRcdG9sZGZpcmUgPSBob29rcy5lbXB0eS5maXJlO1xuXHRcdFx0aG9va3MuZW1wdHkuZmlyZSA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRpZiAoICFob29rcy51bnF1ZXVlZCApIHtcblx0XHRcdFx0XHRvbGRmaXJlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cdFx0fVxuXHRcdGhvb2tzLnVucXVldWVkKys7XG5cblx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIEVuc3VyZSB0aGUgY29tcGxldGUgaGFuZGxlciBpcyBjYWxsZWQgYmVmb3JlIHRoaXMgY29tcGxldGVzXG5cdFx0XHRhbmltLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGhvb2tzLnVucXVldWVkLS07XG5cdFx0XHRcdGlmICggIWpRdWVyeS5xdWV1ZSggZWxlbSwgXCJmeFwiICkubGVuZ3RoICkge1xuXHRcdFx0XHRcdGhvb2tzLmVtcHR5LmZpcmUoKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0fVxuXG5cdC8vIERldGVjdCBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRmb3IgKCBwcm9wIGluIHByb3BzICkge1xuXHRcdHZhbHVlID0gcHJvcHNbIHByb3AgXTtcblx0XHRpZiAoIHJmeHR5cGVzLnRlc3QoIHZhbHVlICkgKSB7XG5cdFx0XHRkZWxldGUgcHJvcHNbIHByb3AgXTtcblx0XHRcdHRvZ2dsZSA9IHRvZ2dsZSB8fCB2YWx1ZSA9PT0gXCJ0b2dnbGVcIjtcblx0XHRcdGlmICggdmFsdWUgPT09ICggaGlkZGVuID8gXCJoaWRlXCIgOiBcInNob3dcIiApICkge1xuXG5cdFx0XHRcdC8vIFByZXRlbmQgdG8gYmUgaGlkZGVuIGlmIHRoaXMgaXMgYSBcInNob3dcIiBhbmRcblx0XHRcdFx0Ly8gdGhlcmUgaXMgc3RpbGwgZGF0YSBmcm9tIGEgc3RvcHBlZCBzaG93L2hpZGVcblx0XHRcdFx0aWYgKCB2YWx1ZSA9PT0gXCJzaG93XCIgJiYgZGF0YVNob3cgJiYgZGF0YVNob3dbIHByb3AgXSAhPT0gdW5kZWZpbmVkICkge1xuXHRcdFx0XHRcdGhpZGRlbiA9IHRydWU7XG5cblx0XHRcdFx0Ly8gSWdub3JlIGFsbCBvdGhlciBuby1vcCBzaG93L2hpZGUgZGF0YVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGNvbnRpbnVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRvcmlnWyBwcm9wIF0gPSBkYXRhU2hvdyAmJiBkYXRhU2hvd1sgcHJvcCBdIHx8IGpRdWVyeS5zdHlsZSggZWxlbSwgcHJvcCApO1xuXHRcdH1cblx0fVxuXG5cdC8vIEJhaWwgb3V0IGlmIHRoaXMgaXMgYSBuby1vcCBsaWtlIC5oaWRlKCkuaGlkZSgpXG5cdHByb3BUd2VlbiA9ICFqUXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcHMgKTtcblx0aWYgKCAhcHJvcFR3ZWVuICYmIGpRdWVyeS5pc0VtcHR5T2JqZWN0KCBvcmlnICkgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0Ly8gUmVzdHJpY3QgXCJvdmVyZmxvd1wiIGFuZCBcImRpc3BsYXlcIiBzdHlsZXMgZHVyaW5nIGJveCBhbmltYXRpb25zXG5cdGlmICggaXNCb3ggJiYgZWxlbS5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9OSAtIDExLCBFZGdlIDEyIC0gMTVcblx0XHQvLyBSZWNvcmQgYWxsIDMgb3ZlcmZsb3cgYXR0cmlidXRlcyBiZWNhdXNlIElFIGRvZXMgbm90IGluZmVyIHRoZSBzaG9ydGhhbmRcblx0XHQvLyBmcm9tIGlkZW50aWNhbGx5LXZhbHVlZCBvdmVyZmxvd1ggYW5kIG92ZXJmbG93WSBhbmQgRWRnZSBqdXN0IG1pcnJvcnNcblx0XHQvLyB0aGUgb3ZlcmZsb3dYIHZhbHVlIHRoZXJlLlxuXHRcdG9wdHMub3ZlcmZsb3cgPSBbIHN0eWxlLm92ZXJmbG93LCBzdHlsZS5vdmVyZmxvd1gsIHN0eWxlLm92ZXJmbG93WSBdO1xuXG5cdFx0Ly8gSWRlbnRpZnkgYSBkaXNwbGF5IHR5cGUsIHByZWZlcnJpbmcgb2xkIHNob3cvaGlkZSBkYXRhIG92ZXIgdGhlIENTUyBjYXNjYWRlXG5cdFx0cmVzdG9yZURpc3BsYXkgPSBkYXRhU2hvdyAmJiBkYXRhU2hvdy5kaXNwbGF5O1xuXHRcdGlmICggcmVzdG9yZURpc3BsYXkgPT0gbnVsbCApIHtcblx0XHRcdHJlc3RvcmVEaXNwbGF5ID0gZGF0YVByaXYuZ2V0KCBlbGVtLCBcImRpc3BsYXlcIiApO1xuXHRcdH1cblx0XHRkaXNwbGF5ID0galF1ZXJ5LmNzcyggZWxlbSwgXCJkaXNwbGF5XCIgKTtcblx0XHRpZiAoIGRpc3BsYXkgPT09IFwibm9uZVwiICkge1xuXHRcdFx0aWYgKCByZXN0b3JlRGlzcGxheSApIHtcblx0XHRcdFx0ZGlzcGxheSA9IHJlc3RvcmVEaXNwbGF5O1xuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBHZXQgbm9uZW1wdHkgdmFsdWUocykgYnkgdGVtcG9yYXJpbHkgZm9yY2luZyB2aXNpYmlsaXR5XG5cdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSwgdHJ1ZSApO1xuXHRcdFx0XHRyZXN0b3JlRGlzcGxheSA9IGVsZW0uc3R5bGUuZGlzcGxheSB8fCByZXN0b3JlRGlzcGxheTtcblx0XHRcdFx0ZGlzcGxheSA9IGpRdWVyeS5jc3MoIGVsZW0sIFwiZGlzcGxheVwiICk7XG5cdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEFuaW1hdGUgaW5saW5lIGVsZW1lbnRzIGFzIGlubGluZS1ibG9ja1xuXHRcdGlmICggZGlzcGxheSA9PT0gXCJpbmxpbmVcIiB8fCBkaXNwbGF5ID09PSBcImlubGluZS1ibG9ja1wiICYmIHJlc3RvcmVEaXNwbGF5ICE9IG51bGwgKSB7XG5cdFx0XHRpZiAoIGpRdWVyeS5jc3MoIGVsZW0sIFwiZmxvYXRcIiApID09PSBcIm5vbmVcIiApIHtcblxuXHRcdFx0XHQvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCBkaXNwbGF5IHZhbHVlIGF0IHRoZSBlbmQgb2YgcHVyZSBzaG93L2hpZGUgYW5pbWF0aW9uc1xuXHRcdFx0XHRpZiAoICFwcm9wVHdlZW4gKSB7XG5cdFx0XHRcdFx0YW5pbS5kb25lKCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdHN0eWxlLmRpc3BsYXkgPSByZXN0b3JlRGlzcGxheTtcblx0XHRcdFx0XHR9ICk7XG5cdFx0XHRcdFx0aWYgKCByZXN0b3JlRGlzcGxheSA9PSBudWxsICkge1xuXHRcdFx0XHRcdFx0ZGlzcGxheSA9IHN0eWxlLmRpc3BsYXk7XG5cdFx0XHRcdFx0XHRyZXN0b3JlRGlzcGxheSA9IGRpc3BsYXkgPT09IFwibm9uZVwiID8gXCJcIiA6IGRpc3BsYXk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHRcdHN0eWxlLmRpc3BsYXkgPSBcImlubGluZS1ibG9ja1wiO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdGlmICggb3B0cy5vdmVyZmxvdyApIHtcblx0XHRzdHlsZS5vdmVyZmxvdyA9IFwiaGlkZGVuXCI7XG5cdFx0YW5pbS5hbHdheXMoIGZ1bmN0aW9uKCkge1xuXHRcdFx0c3R5bGUub3ZlcmZsb3cgPSBvcHRzLm92ZXJmbG93WyAwIF07XG5cdFx0XHRzdHlsZS5vdmVyZmxvd1ggPSBvcHRzLm92ZXJmbG93WyAxIF07XG5cdFx0XHRzdHlsZS5vdmVyZmxvd1kgPSBvcHRzLm92ZXJmbG93WyAyIF07XG5cdFx0fSApO1xuXHR9XG5cblx0Ly8gSW1wbGVtZW50IHNob3cvaGlkZSBhbmltYXRpb25zXG5cdHByb3BUd2VlbiA9IGZhbHNlO1xuXHRmb3IgKCBwcm9wIGluIG9yaWcgKSB7XG5cblx0XHQvLyBHZW5lcmFsIHNob3cvaGlkZSBzZXR1cCBmb3IgdGhpcyBlbGVtZW50IGFuaW1hdGlvblxuXHRcdGlmICggIXByb3BUd2VlbiApIHtcblx0XHRcdGlmICggZGF0YVNob3cgKSB7XG5cdFx0XHRcdGlmICggXCJoaWRkZW5cIiBpbiBkYXRhU2hvdyApIHtcblx0XHRcdFx0XHRoaWRkZW4gPSBkYXRhU2hvdy5oaWRkZW47XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRhdGFTaG93ID0gZGF0YVByaXYuYWNjZXNzKCBlbGVtLCBcImZ4c2hvd1wiLCB7IGRpc3BsYXk6IHJlc3RvcmVEaXNwbGF5IH0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU3RvcmUgaGlkZGVuL3Zpc2libGUgZm9yIHRvZ2dsZSBzbyBgLnN0b3AoKS50b2dnbGUoKWAgXCJyZXZlcnNlc1wiXG5cdFx0XHRpZiAoIHRvZ2dsZSApIHtcblx0XHRcdFx0ZGF0YVNob3cuaGlkZGVuID0gIWhpZGRlbjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gU2hvdyBlbGVtZW50cyBiZWZvcmUgYW5pbWF0aW5nIHRoZW1cblx0XHRcdGlmICggaGlkZGVuICkge1xuXHRcdFx0XHRzaG93SGlkZSggWyBlbGVtIF0sIHRydWUgKTtcblx0XHRcdH1cblxuXHRcdFx0LyogZXNsaW50LWRpc2FibGUgbm8tbG9vcC1mdW5jICovXG5cblx0XHRcdGFuaW0uZG9uZSggZnVuY3Rpb24oKSB7XG5cblx0XHRcdFx0LyogZXNsaW50LWVuYWJsZSBuby1sb29wLWZ1bmMgKi9cblxuXHRcdFx0XHQvLyBUaGUgZmluYWwgc3RlcCBvZiBhIFwiaGlkZVwiIGFuaW1hdGlvbiBpcyBhY3R1YWxseSBoaWRpbmcgdGhlIGVsZW1lbnRcblx0XHRcdFx0aWYgKCAhaGlkZGVuICkge1xuXHRcdFx0XHRcdHNob3dIaWRlKCBbIGVsZW0gXSApO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGRhdGFQcml2LnJlbW92ZSggZWxlbSwgXCJmeHNob3dcIiApO1xuXHRcdFx0XHRmb3IgKCBwcm9wIGluIG9yaWcgKSB7XG5cdFx0XHRcdFx0alF1ZXJ5LnN0eWxlKCBlbGVtLCBwcm9wLCBvcmlnWyBwcm9wIF0gKTtcblx0XHRcdFx0fVxuXHRcdFx0fSApO1xuXHRcdH1cblxuXHRcdC8vIFBlci1wcm9wZXJ0eSBzZXR1cFxuXHRcdHByb3BUd2VlbiA9IGNyZWF0ZVR3ZWVuKCBoaWRkZW4gPyBkYXRhU2hvd1sgcHJvcCBdIDogMCwgcHJvcCwgYW5pbSApO1xuXHRcdGlmICggISggcHJvcCBpbiBkYXRhU2hvdyApICkge1xuXHRcdFx0ZGF0YVNob3dbIHByb3AgXSA9IHByb3BUd2Vlbi5zdGFydDtcblx0XHRcdGlmICggaGlkZGVuICkge1xuXHRcdFx0XHRwcm9wVHdlZW4uZW5kID0gcHJvcFR3ZWVuLnN0YXJ0O1xuXHRcdFx0XHRwcm9wVHdlZW4uc3RhcnQgPSAwO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufVxuXG5mdW5jdGlvbiBwcm9wRmlsdGVyKCBwcm9wcywgc3BlY2lhbEVhc2luZyApIHtcblx0dmFyIGluZGV4LCBuYW1lLCBlYXNpbmcsIHZhbHVlLCBob29rcztcblxuXHQvLyBjYW1lbENhc2UsIHNwZWNpYWxFYXNpbmcgYW5kIGV4cGFuZCBjc3NIb29rIHBhc3Ncblx0Zm9yICggaW5kZXggaW4gcHJvcHMgKSB7XG5cdFx0bmFtZSA9IGNhbWVsQ2FzZSggaW5kZXggKTtcblx0XHRlYXNpbmcgPSBzcGVjaWFsRWFzaW5nWyBuYW1lIF07XG5cdFx0dmFsdWUgPSBwcm9wc1sgaW5kZXggXTtcblx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0XHRlYXNpbmcgPSB2YWx1ZVsgMSBdO1xuXHRcdFx0dmFsdWUgPSBwcm9wc1sgaW5kZXggXSA9IHZhbHVlWyAwIF07XG5cdFx0fVxuXG5cdFx0aWYgKCBpbmRleCAhPT0gbmFtZSApIHtcblx0XHRcdHByb3BzWyBuYW1lIF0gPSB2YWx1ZTtcblx0XHRcdGRlbGV0ZSBwcm9wc1sgaW5kZXggXTtcblx0XHR9XG5cblx0XHRob29rcyA9IGpRdWVyeS5jc3NIb29rc1sgbmFtZSBdO1xuXHRcdGlmICggaG9va3MgJiYgXCJleHBhbmRcIiBpbiBob29rcyApIHtcblx0XHRcdHZhbHVlID0gaG9va3MuZXhwYW5kKCB2YWx1ZSApO1xuXHRcdFx0ZGVsZXRlIHByb3BzWyBuYW1lIF07XG5cblx0XHRcdC8vIE5vdCBxdWl0ZSAkLmV4dGVuZCwgdGhpcyB3b24ndCBvdmVyd3JpdGUgZXhpc3Rpbmcga2V5cy5cblx0XHRcdC8vIFJldXNpbmcgJ2luZGV4JyBiZWNhdXNlIHdlIGhhdmUgdGhlIGNvcnJlY3QgXCJuYW1lXCJcblx0XHRcdGZvciAoIGluZGV4IGluIHZhbHVlICkge1xuXHRcdFx0XHRpZiAoICEoIGluZGV4IGluIHByb3BzICkgKSB7XG5cdFx0XHRcdFx0cHJvcHNbIGluZGV4IF0gPSB2YWx1ZVsgaW5kZXggXTtcblx0XHRcdFx0XHRzcGVjaWFsRWFzaW5nWyBpbmRleCBdID0gZWFzaW5nO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHNwZWNpYWxFYXNpbmdbIG5hbWUgXSA9IGVhc2luZztcblx0XHR9XG5cdH1cbn1cblxuZnVuY3Rpb24gQW5pbWF0aW9uKCBlbGVtLCBwcm9wZXJ0aWVzLCBvcHRpb25zICkge1xuXHR2YXIgcmVzdWx0LFxuXHRcdHN0b3BwZWQsXG5cdFx0aW5kZXggPSAwLFxuXHRcdGxlbmd0aCA9IEFuaW1hdGlvbi5wcmVmaWx0ZXJzLmxlbmd0aCxcblx0XHRkZWZlcnJlZCA9IGpRdWVyeS5EZWZlcnJlZCgpLmFsd2F5cyggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIERvbid0IG1hdGNoIGVsZW0gaW4gdGhlIDphbmltYXRlZCBzZWxlY3RvclxuXHRcdFx0ZGVsZXRlIHRpY2suZWxlbTtcblx0XHR9ICksXG5cdFx0dGljayA9IGZ1bmN0aW9uKCkge1xuXHRcdFx0aWYgKCBzdG9wcGVkICkge1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9XG5cdFx0XHR2YXIgY3VycmVudFRpbWUgPSBmeE5vdyB8fCBjcmVhdGVGeE5vdygpLFxuXHRcdFx0XHRyZW1haW5pbmcgPSBNYXRoLm1heCggMCwgYW5pbWF0aW9uLnN0YXJ0VGltZSArIGFuaW1hdGlvbi5kdXJhdGlvbiAtIGN1cnJlbnRUaW1lICksXG5cblx0XHRcdFx0Ly8gU3VwcG9ydDogQW5kcm9pZCAyLjMgb25seVxuXHRcdFx0XHQvLyBBcmNoYWljIGNyYXNoIGJ1ZyB3b24ndCBhbGxvdyB1cyB0byB1c2UgYDEgLSAoIDAuNSB8fCAwIClgICgjMTI0OTcpXG5cdFx0XHRcdHRlbXAgPSByZW1haW5pbmcgLyBhbmltYXRpb24uZHVyYXRpb24gfHwgMCxcblx0XHRcdFx0cGVyY2VudCA9IDEgLSB0ZW1wLFxuXHRcdFx0XHRpbmRleCA9IDAsXG5cdFx0XHRcdGxlbmd0aCA9IGFuaW1hdGlvbi50d2VlbnMubGVuZ3RoO1xuXG5cdFx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0XHRhbmltYXRpb24udHdlZW5zWyBpbmRleCBdLnJ1biggcGVyY2VudCApO1xuXHRcdFx0fVxuXG5cdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgcGVyY2VudCwgcmVtYWluaW5nIF0gKTtcblxuXHRcdFx0Ly8gSWYgdGhlcmUncyBtb3JlIHRvIGRvLCB5aWVsZFxuXHRcdFx0aWYgKCBwZXJjZW50IDwgMSAmJiBsZW5ndGggKSB7XG5cdFx0XHRcdHJldHVybiByZW1haW5pbmc7XG5cdFx0XHR9XG5cblx0XHRcdC8vIElmIHRoaXMgd2FzIGFuIGVtcHR5IGFuaW1hdGlvbiwgc3ludGhlc2l6ZSBhIGZpbmFsIHByb2dyZXNzIG5vdGlmaWNhdGlvblxuXHRcdFx0aWYgKCAhbGVuZ3RoICkge1xuXHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgMSwgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFJlc29sdmUgdGhlIGFuaW1hdGlvbiBhbmQgcmVwb3J0IGl0cyBjb25jbHVzaW9uXG5cdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggZWxlbSwgWyBhbmltYXRpb24gXSApO1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH0sXG5cdFx0YW5pbWF0aW9uID0gZGVmZXJyZWQucHJvbWlzZSgge1xuXHRcdFx0ZWxlbTogZWxlbSxcblx0XHRcdHByb3BzOiBqUXVlcnkuZXh0ZW5kKCB7fSwgcHJvcGVydGllcyApLFxuXHRcdFx0b3B0czogalF1ZXJ5LmV4dGVuZCggdHJ1ZSwge1xuXHRcdFx0XHRzcGVjaWFsRWFzaW5nOiB7fSxcblx0XHRcdFx0ZWFzaW5nOiBqUXVlcnkuZWFzaW5nLl9kZWZhdWx0XG5cdFx0XHR9LCBvcHRpb25zICksXG5cdFx0XHRvcmlnaW5hbFByb3BlcnRpZXM6IHByb3BlcnRpZXMsXG5cdFx0XHRvcmlnaW5hbE9wdGlvbnM6IG9wdGlvbnMsXG5cdFx0XHRzdGFydFRpbWU6IGZ4Tm93IHx8IGNyZWF0ZUZ4Tm93KCksXG5cdFx0XHRkdXJhdGlvbjogb3B0aW9ucy5kdXJhdGlvbixcblx0XHRcdHR3ZWVuczogW10sXG5cdFx0XHRjcmVhdGVUd2VlbjogZnVuY3Rpb24oIHByb3AsIGVuZCApIHtcblx0XHRcdFx0dmFyIHR3ZWVuID0galF1ZXJ5LlR3ZWVuKCBlbGVtLCBhbmltYXRpb24ub3B0cywgcHJvcCwgZW5kLFxuXHRcdFx0XHRcdGFuaW1hdGlvbi5vcHRzLnNwZWNpYWxFYXNpbmdbIHByb3AgXSB8fCBhbmltYXRpb24ub3B0cy5lYXNpbmcgKTtcblx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVucy5wdXNoKCB0d2VlbiApO1xuXHRcdFx0XHRyZXR1cm4gdHdlZW47XG5cdFx0XHR9LFxuXHRcdFx0c3RvcDogZnVuY3Rpb24oIGdvdG9FbmQgKSB7XG5cdFx0XHRcdHZhciBpbmRleCA9IDAsXG5cblx0XHRcdFx0XHQvLyBJZiB3ZSBhcmUgZ29pbmcgdG8gdGhlIGVuZCwgd2Ugd2FudCB0byBydW4gYWxsIHRoZSB0d2VlbnNcblx0XHRcdFx0XHQvLyBvdGhlcndpc2Ugd2Ugc2tpcCB0aGlzIHBhcnRcblx0XHRcdFx0XHRsZW5ndGggPSBnb3RvRW5kID8gYW5pbWF0aW9uLnR3ZWVucy5sZW5ndGggOiAwO1xuXHRcdFx0XHRpZiAoIHN0b3BwZWQgKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH1cblx0XHRcdFx0c3RvcHBlZCA9IHRydWU7XG5cdFx0XHRcdGZvciAoIDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KysgKSB7XG5cdFx0XHRcdFx0YW5pbWF0aW9uLnR3ZWVuc1sgaW5kZXggXS5ydW4oIDEgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFJlc29sdmUgd2hlbiB3ZSBwbGF5ZWQgdGhlIGxhc3QgZnJhbWU7IG90aGVyd2lzZSwgcmVqZWN0XG5cdFx0XHRcdGlmICggZ290b0VuZCApIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5ub3RpZnlXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgMSwgMCBdICk7XG5cdFx0XHRcdFx0ZGVmZXJyZWQucmVzb2x2ZVdpdGgoIGVsZW0sIFsgYW5pbWF0aW9uLCBnb3RvRW5kIF0gKTtcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkZWZlcnJlZC5yZWplY3RXaXRoKCBlbGVtLCBbIGFuaW1hdGlvbiwgZ290b0VuZCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHR9XG5cdFx0fSApLFxuXHRcdHByb3BzID0gYW5pbWF0aW9uLnByb3BzO1xuXG5cdHByb3BGaWx0ZXIoIHByb3BzLCBhbmltYXRpb24ub3B0cy5zcGVjaWFsRWFzaW5nICk7XG5cblx0Zm9yICggOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRyZXN1bHQgPSBBbmltYXRpb24ucHJlZmlsdGVyc1sgaW5kZXggXS5jYWxsKCBhbmltYXRpb24sIGVsZW0sIHByb3BzLCBhbmltYXRpb24ub3B0cyApO1xuXHRcdGlmICggcmVzdWx0ICkge1xuXHRcdFx0aWYgKCBpc0Z1bmN0aW9uKCByZXN1bHQuc3RvcCApICkge1xuXHRcdFx0XHRqUXVlcnkuX3F1ZXVlSG9va3MoIGFuaW1hdGlvbi5lbGVtLCBhbmltYXRpb24ub3B0cy5xdWV1ZSApLnN0b3AgPVxuXHRcdFx0XHRcdHJlc3VsdC5zdG9wLmJpbmQoIHJlc3VsdCApO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cdH1cblxuXHRqUXVlcnkubWFwKCBwcm9wcywgY3JlYXRlVHdlZW4sIGFuaW1hdGlvbiApO1xuXG5cdGlmICggaXNGdW5jdGlvbiggYW5pbWF0aW9uLm9wdHMuc3RhcnQgKSApIHtcblx0XHRhbmltYXRpb24ub3B0cy5zdGFydC5jYWxsKCBlbGVtLCBhbmltYXRpb24gKTtcblx0fVxuXG5cdC8vIEF0dGFjaCBjYWxsYmFja3MgZnJvbSBvcHRpb25zXG5cdGFuaW1hdGlvblxuXHRcdC5wcm9ncmVzcyggYW5pbWF0aW9uLm9wdHMucHJvZ3Jlc3MgKVxuXHRcdC5kb25lKCBhbmltYXRpb24ub3B0cy5kb25lLCBhbmltYXRpb24ub3B0cy5jb21wbGV0ZSApXG5cdFx0LmZhaWwoIGFuaW1hdGlvbi5vcHRzLmZhaWwgKVxuXHRcdC5hbHdheXMoIGFuaW1hdGlvbi5vcHRzLmFsd2F5cyApO1xuXG5cdGpRdWVyeS5meC50aW1lcihcblx0XHRqUXVlcnkuZXh0ZW5kKCB0aWNrLCB7XG5cdFx0XHRlbGVtOiBlbGVtLFxuXHRcdFx0YW5pbTogYW5pbWF0aW9uLFxuXHRcdFx0cXVldWU6IGFuaW1hdGlvbi5vcHRzLnF1ZXVlXG5cdFx0fSApXG5cdCk7XG5cblx0cmV0dXJuIGFuaW1hdGlvbjtcbn1cblxualF1ZXJ5LkFuaW1hdGlvbiA9IGpRdWVyeS5leHRlbmQoIEFuaW1hdGlvbiwge1xuXG5cdHR3ZWVuZXJzOiB7XG5cdFx0XCIqXCI6IFsgZnVuY3Rpb24oIHByb3AsIHZhbHVlICkge1xuXHRcdFx0dmFyIHR3ZWVuID0gdGhpcy5jcmVhdGVUd2VlbiggcHJvcCwgdmFsdWUgKTtcblx0XHRcdGFkanVzdENTUyggdHdlZW4uZWxlbSwgcHJvcCwgcmNzc051bS5leGVjKCB2YWx1ZSApLCB0d2VlbiApO1xuXHRcdFx0cmV0dXJuIHR3ZWVuO1xuXHRcdH0gXVxuXHR9LFxuXG5cdHR3ZWVuZXI6IGZ1bmN0aW9uKCBwcm9wcywgY2FsbGJhY2sgKSB7XG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBwcm9wcyApICkge1xuXHRcdFx0Y2FsbGJhY2sgPSBwcm9wcztcblx0XHRcdHByb3BzID0gWyBcIipcIiBdO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwcm9wcyA9IHByb3BzLm1hdGNoKCBybm90aHRtbHdoaXRlICk7XG5cdFx0fVxuXG5cdFx0dmFyIHByb3AsXG5cdFx0XHRpbmRleCA9IDAsXG5cdFx0XHRsZW5ndGggPSBwcm9wcy5sZW5ndGg7XG5cblx0XHRmb3IgKCA7IGluZGV4IDwgbGVuZ3RoOyBpbmRleCsrICkge1xuXHRcdFx0cHJvcCA9IHByb3BzWyBpbmRleCBdO1xuXHRcdFx0QW5pbWF0aW9uLnR3ZWVuZXJzWyBwcm9wIF0gPSBBbmltYXRpb24udHdlZW5lcnNbIHByb3AgXSB8fCBbXTtcblx0XHRcdEFuaW1hdGlvbi50d2VlbmVyc1sgcHJvcCBdLnVuc2hpZnQoIGNhbGxiYWNrICk7XG5cdFx0fVxuXHR9LFxuXG5cdHByZWZpbHRlcnM6IFsgZGVmYXVsdFByZWZpbHRlciBdLFxuXG5cdHByZWZpbHRlcjogZnVuY3Rpb24oIGNhbGxiYWNrLCBwcmVwZW5kICkge1xuXHRcdGlmICggcHJlcGVuZCApIHtcblx0XHRcdEFuaW1hdGlvbi5wcmVmaWx0ZXJzLnVuc2hpZnQoIGNhbGxiYWNrICk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdEFuaW1hdGlvbi5wcmVmaWx0ZXJzLnB1c2goIGNhbGxiYWNrICk7XG5cdFx0fVxuXHR9XG59ICk7XG5cbmpRdWVyeS5zcGVlZCA9IGZ1bmN0aW9uKCBzcGVlZCwgZWFzaW5nLCBmbiApIHtcblx0dmFyIG9wdCA9IHNwZWVkICYmIHR5cGVvZiBzcGVlZCA9PT0gXCJvYmplY3RcIiA/IGpRdWVyeS5leHRlbmQoIHt9LCBzcGVlZCApIDoge1xuXHRcdGNvbXBsZXRlOiBmbiB8fCAhZm4gJiYgZWFzaW5nIHx8XG5cdFx0XHRpc0Z1bmN0aW9uKCBzcGVlZCApICYmIHNwZWVkLFxuXHRcdGR1cmF0aW9uOiBzcGVlZCxcblx0XHRlYXNpbmc6IGZuICYmIGVhc2luZyB8fCBlYXNpbmcgJiYgIWlzRnVuY3Rpb24oIGVhc2luZyApICYmIGVhc2luZ1xuXHR9O1xuXG5cdC8vIEdvIHRvIHRoZSBlbmQgc3RhdGUgaWYgZnggYXJlIG9mZlxuXHRpZiAoIGpRdWVyeS5meC5vZmYgKSB7XG5cdFx0b3B0LmR1cmF0aW9uID0gMDtcblxuXHR9IGVsc2Uge1xuXHRcdGlmICggdHlwZW9mIG9wdC5kdXJhdGlvbiAhPT0gXCJudW1iZXJcIiApIHtcblx0XHRcdGlmICggb3B0LmR1cmF0aW9uIGluIGpRdWVyeS5meC5zcGVlZHMgKSB7XG5cdFx0XHRcdG9wdC5kdXJhdGlvbiA9IGpRdWVyeS5meC5zcGVlZHNbIG9wdC5kdXJhdGlvbiBdO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRvcHQuZHVyYXRpb24gPSBqUXVlcnkuZnguc3BlZWRzLl9kZWZhdWx0O1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdC8vIE5vcm1hbGl6ZSBvcHQucXVldWUgLSB0cnVlL3VuZGVmaW5lZC9udWxsIC0+IFwiZnhcIlxuXHRpZiAoIG9wdC5xdWV1ZSA9PSBudWxsIHx8IG9wdC5xdWV1ZSA9PT0gdHJ1ZSApIHtcblx0XHRvcHQucXVldWUgPSBcImZ4XCI7XG5cdH1cblxuXHQvLyBRdWV1ZWluZ1xuXHRvcHQub2xkID0gb3B0LmNvbXBsZXRlO1xuXG5cdG9wdC5jb21wbGV0ZSA9IGZ1bmN0aW9uKCkge1xuXHRcdGlmICggaXNGdW5jdGlvbiggb3B0Lm9sZCApICkge1xuXHRcdFx0b3B0Lm9sZC5jYWxsKCB0aGlzICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBvcHQucXVldWUgKSB7XG5cdFx0XHRqUXVlcnkuZGVxdWV1ZSggdGhpcywgb3B0LnF1ZXVlICk7XG5cdFx0fVxuXHR9O1xuXG5cdHJldHVybiBvcHQ7XG59O1xuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdGZhZGVUbzogZnVuY3Rpb24oIHNwZWVkLCB0bywgZWFzaW5nLCBjYWxsYmFjayApIHtcblxuXHRcdC8vIFNob3cgYW55IGhpZGRlbiBlbGVtZW50cyBhZnRlciBzZXR0aW5nIG9wYWNpdHkgdG8gMFxuXHRcdHJldHVybiB0aGlzLmZpbHRlciggaXNIaWRkZW5XaXRoaW5UcmVlICkuY3NzKCBcIm9wYWNpdHlcIiwgMCApLnNob3coKVxuXG5cdFx0XHQvLyBBbmltYXRlIHRvIHRoZSB2YWx1ZSBzcGVjaWZpZWRcblx0XHRcdC5lbmQoKS5hbmltYXRlKCB7IG9wYWNpdHk6IHRvIH0sIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICk7XG5cdH0sXG5cdGFuaW1hdGU6IGZ1bmN0aW9uKCBwcm9wLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApIHtcblx0XHR2YXIgZW1wdHkgPSBqUXVlcnkuaXNFbXB0eU9iamVjdCggcHJvcCApLFxuXHRcdFx0b3B0YWxsID0galF1ZXJ5LnNwZWVkKCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApLFxuXHRcdFx0ZG9BbmltYXRpb24gPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBPcGVyYXRlIG9uIGEgY29weSBvZiBwcm9wIHNvIHBlci1wcm9wZXJ0eSBlYXNpbmcgd29uJ3QgYmUgbG9zdFxuXHRcdFx0XHR2YXIgYW5pbSA9IEFuaW1hdGlvbiggdGhpcywgalF1ZXJ5LmV4dGVuZCgge30sIHByb3AgKSwgb3B0YWxsICk7XG5cblx0XHRcdFx0Ly8gRW1wdHkgYW5pbWF0aW9ucywgb3IgZmluaXNoaW5nIHJlc29sdmVzIGltbWVkaWF0ZWx5XG5cdFx0XHRcdGlmICggZW1wdHkgfHwgZGF0YVByaXYuZ2V0KCB0aGlzLCBcImZpbmlzaFwiICkgKSB7XG5cdFx0XHRcdFx0YW5pbS5zdG9wKCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdH07XG5cblx0XHRkb0FuaW1hdGlvbi5maW5pc2ggPSBkb0FuaW1hdGlvbjtcblxuXHRcdHJldHVybiBlbXB0eSB8fCBvcHRhbGwucXVldWUgPT09IGZhbHNlID9cblx0XHRcdHRoaXMuZWFjaCggZG9BbmltYXRpb24gKSA6XG5cdFx0XHR0aGlzLnF1ZXVlKCBvcHRhbGwucXVldWUsIGRvQW5pbWF0aW9uICk7XG5cdH0sXG5cdHN0b3A6IGZ1bmN0aW9uKCB0eXBlLCBjbGVhclF1ZXVlLCBnb3RvRW5kICkge1xuXHRcdHZhciBzdG9wUXVldWUgPSBmdW5jdGlvbiggaG9va3MgKSB7XG5cdFx0XHR2YXIgc3RvcCA9IGhvb2tzLnN0b3A7XG5cdFx0XHRkZWxldGUgaG9va3Muc3RvcDtcblx0XHRcdHN0b3AoIGdvdG9FbmQgKTtcblx0XHR9O1xuXG5cdFx0aWYgKCB0eXBlb2YgdHlwZSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGdvdG9FbmQgPSBjbGVhclF1ZXVlO1xuXHRcdFx0Y2xlYXJRdWV1ZSA9IHR5cGU7XG5cdFx0XHR0eXBlID0gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHRpZiAoIGNsZWFyUXVldWUgKSB7XG5cdFx0XHR0aGlzLnF1ZXVlKCB0eXBlIHx8IFwiZnhcIiwgW10gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBkZXF1ZXVlID0gdHJ1ZSxcblx0XHRcdFx0aW5kZXggPSB0eXBlICE9IG51bGwgJiYgdHlwZSArIFwicXVldWVIb29rc1wiLFxuXHRcdFx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzLFxuXHRcdFx0XHRkYXRhID0gZGF0YVByaXYuZ2V0KCB0aGlzICk7XG5cblx0XHRcdGlmICggaW5kZXggKSB7XG5cdFx0XHRcdGlmICggZGF0YVsgaW5kZXggXSAmJiBkYXRhWyBpbmRleCBdLnN0b3AgKSB7XG5cdFx0XHRcdFx0c3RvcFF1ZXVlKCBkYXRhWyBpbmRleCBdICk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGZvciAoIGluZGV4IGluIGRhdGEgKSB7XG5cdFx0XHRcdFx0aWYgKCBkYXRhWyBpbmRleCBdICYmIGRhdGFbIGluZGV4IF0uc3RvcCAmJiBycnVuLnRlc3QoIGluZGV4ICkgKSB7XG5cdFx0XHRcdFx0XHRzdG9wUXVldWUoIGRhdGFbIGluZGV4IF0gKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Zm9yICggaW5kZXggPSB0aW1lcnMubGVuZ3RoOyBpbmRleC0tOyApIHtcblx0XHRcdFx0aWYgKCB0aW1lcnNbIGluZGV4IF0uZWxlbSA9PT0gdGhpcyAmJlxuXHRcdFx0XHRcdCggdHlwZSA9PSBudWxsIHx8IHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSApICkge1xuXG5cdFx0XHRcdFx0dGltZXJzWyBpbmRleCBdLmFuaW0uc3RvcCggZ290b0VuZCApO1xuXHRcdFx0XHRcdGRlcXVldWUgPSBmYWxzZTtcblx0XHRcdFx0XHR0aW1lcnMuc3BsaWNlKCBpbmRleCwgMSApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFN0YXJ0IHRoZSBuZXh0IGluIHRoZSBxdWV1ZSBpZiB0aGUgbGFzdCBzdGVwIHdhc24ndCBmb3JjZWQuXG5cdFx0XHQvLyBUaW1lcnMgY3VycmVudGx5IHdpbGwgY2FsbCB0aGVpciBjb21wbGV0ZSBjYWxsYmFja3MsIHdoaWNoXG5cdFx0XHQvLyB3aWxsIGRlcXVldWUgYnV0IG9ubHkgaWYgdGhleSB3ZXJlIGdvdG9FbmQuXG5cdFx0XHRpZiAoIGRlcXVldWUgfHwgIWdvdG9FbmQgKSB7XG5cdFx0XHRcdGpRdWVyeS5kZXF1ZXVlKCB0aGlzLCB0eXBlICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9LFxuXHRmaW5pc2g6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdGlmICggdHlwZSAhPT0gZmFsc2UgKSB7XG5cdFx0XHR0eXBlID0gdHlwZSB8fCBcImZ4XCI7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIGluZGV4LFxuXHRcdFx0XHRkYXRhID0gZGF0YVByaXYuZ2V0KCB0aGlzICksXG5cdFx0XHRcdHF1ZXVlID0gZGF0YVsgdHlwZSArIFwicXVldWVcIiBdLFxuXHRcdFx0XHRob29rcyA9IGRhdGFbIHR5cGUgKyBcInF1ZXVlSG9va3NcIiBdLFxuXHRcdFx0XHR0aW1lcnMgPSBqUXVlcnkudGltZXJzLFxuXHRcdFx0XHRsZW5ndGggPSBxdWV1ZSA/IHF1ZXVlLmxlbmd0aCA6IDA7XG5cblx0XHRcdC8vIEVuYWJsZSBmaW5pc2hpbmcgZmxhZyBvbiBwcml2YXRlIGRhdGFcblx0XHRcdGRhdGEuZmluaXNoID0gdHJ1ZTtcblxuXHRcdFx0Ly8gRW1wdHkgdGhlIHF1ZXVlIGZpcnN0XG5cdFx0XHRqUXVlcnkucXVldWUoIHRoaXMsIHR5cGUsIFtdICk7XG5cblx0XHRcdGlmICggaG9va3MgJiYgaG9va3Muc3RvcCApIHtcblx0XHRcdFx0aG9va3Muc3RvcC5jYWxsKCB0aGlzLCB0cnVlICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIExvb2sgZm9yIGFueSBhY3RpdmUgYW5pbWF0aW9ucywgYW5kIGZpbmlzaCB0aGVtXG5cdFx0XHRmb3IgKCBpbmRleCA9IHRpbWVycy5sZW5ndGg7IGluZGV4LS07ICkge1xuXHRcdFx0XHRpZiAoIHRpbWVyc1sgaW5kZXggXS5lbGVtID09PSB0aGlzICYmIHRpbWVyc1sgaW5kZXggXS5xdWV1ZSA9PT0gdHlwZSApIHtcblx0XHRcdFx0XHR0aW1lcnNbIGluZGV4IF0uYW5pbS5zdG9wKCB0cnVlICk7XG5cdFx0XHRcdFx0dGltZXJzLnNwbGljZSggaW5kZXgsIDEgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBMb29rIGZvciBhbnkgYW5pbWF0aW9ucyBpbiB0aGUgb2xkIHF1ZXVlIGFuZCBmaW5pc2ggdGhlbVxuXHRcdFx0Zm9yICggaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKyApIHtcblx0XHRcdFx0aWYgKCBxdWV1ZVsgaW5kZXggXSAmJiBxdWV1ZVsgaW5kZXggXS5maW5pc2ggKSB7XG5cdFx0XHRcdFx0cXVldWVbIGluZGV4IF0uZmluaXNoLmNhbGwoIHRoaXMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXG5cdFx0XHQvLyBUdXJuIG9mZiBmaW5pc2hpbmcgZmxhZ1xuXHRcdFx0ZGVsZXRlIGRhdGEuZmluaXNoO1xuXHRcdH0gKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaCggWyBcInRvZ2dsZVwiLCBcInNob3dcIiwgXCJoaWRlXCIgXSwgZnVuY3Rpb24oIF9pLCBuYW1lICkge1xuXHR2YXIgY3NzRm4gPSBqUXVlcnkuZm5bIG5hbWUgXTtcblx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggc3BlZWQsIGVhc2luZywgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIHNwZWVkID09IG51bGwgfHwgdHlwZW9mIHNwZWVkID09PSBcImJvb2xlYW5cIiA/XG5cdFx0XHRjc3NGbi5hcHBseSggdGhpcywgYXJndW1lbnRzICkgOlxuXHRcdFx0dGhpcy5hbmltYXRlKCBnZW5GeCggbmFtZSwgdHJ1ZSApLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xuXHR9O1xufSApO1xuXG4vLyBHZW5lcmF0ZSBzaG9ydGN1dHMgZm9yIGN1c3RvbSBhbmltYXRpb25zXG5qUXVlcnkuZWFjaCgge1xuXHRzbGlkZURvd246IGdlbkZ4KCBcInNob3dcIiApLFxuXHRzbGlkZVVwOiBnZW5GeCggXCJoaWRlXCIgKSxcblx0c2xpZGVUb2dnbGU6IGdlbkZ4KCBcInRvZ2dsZVwiICksXG5cdGZhZGVJbjogeyBvcGFjaXR5OiBcInNob3dcIiB9LFxuXHRmYWRlT3V0OiB7IG9wYWNpdHk6IFwiaGlkZVwiIH0sXG5cdGZhZGVUb2dnbGU6IHsgb3BhY2l0eTogXCJ0b2dnbGVcIiB9XG59LCBmdW5jdGlvbiggbmFtZSwgcHJvcHMgKSB7XG5cdGpRdWVyeS5mblsgbmFtZSBdID0gZnVuY3Rpb24oIHNwZWVkLCBlYXNpbmcsIGNhbGxiYWNrICkge1xuXHRcdHJldHVybiB0aGlzLmFuaW1hdGUoIHByb3BzLCBzcGVlZCwgZWFzaW5nLCBjYWxsYmFjayApO1xuXHR9O1xufSApO1xuXG5qUXVlcnkudGltZXJzID0gW107XG5qUXVlcnkuZngudGljayA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgdGltZXIsXG5cdFx0aSA9IDAsXG5cdFx0dGltZXJzID0galF1ZXJ5LnRpbWVycztcblxuXHRmeE5vdyA9IERhdGUubm93KCk7XG5cblx0Zm9yICggOyBpIDwgdGltZXJzLmxlbmd0aDsgaSsrICkge1xuXHRcdHRpbWVyID0gdGltZXJzWyBpIF07XG5cblx0XHQvLyBSdW4gdGhlIHRpbWVyIGFuZCBzYWZlbHkgcmVtb3ZlIGl0IHdoZW4gZG9uZSAoYWxsb3dpbmcgZm9yIGV4dGVybmFsIHJlbW92YWwpXG5cdFx0aWYgKCAhdGltZXIoKSAmJiB0aW1lcnNbIGkgXSA9PT0gdGltZXIgKSB7XG5cdFx0XHR0aW1lcnMuc3BsaWNlKCBpLS0sIDEgKTtcblx0XHR9XG5cdH1cblxuXHRpZiAoICF0aW1lcnMubGVuZ3RoICkge1xuXHRcdGpRdWVyeS5meC5zdG9wKCk7XG5cdH1cblx0ZnhOb3cgPSB1bmRlZmluZWQ7XG59O1xuXG5qUXVlcnkuZngudGltZXIgPSBmdW5jdGlvbiggdGltZXIgKSB7XG5cdGpRdWVyeS50aW1lcnMucHVzaCggdGltZXIgKTtcblx0alF1ZXJ5LmZ4LnN0YXJ0KCk7XG59O1xuXG5qUXVlcnkuZnguaW50ZXJ2YWwgPSAxMztcbmpRdWVyeS5meC5zdGFydCA9IGZ1bmN0aW9uKCkge1xuXHRpZiAoIGluUHJvZ3Jlc3MgKSB7XG5cdFx0cmV0dXJuO1xuXHR9XG5cblx0aW5Qcm9ncmVzcyA9IHRydWU7XG5cdHNjaGVkdWxlKCk7XG59O1xuXG5qUXVlcnkuZnguc3RvcCA9IGZ1bmN0aW9uKCkge1xuXHRpblByb2dyZXNzID0gbnVsbDtcbn07XG5cbmpRdWVyeS5meC5zcGVlZHMgPSB7XG5cdHNsb3c6IDYwMCxcblx0ZmFzdDogMjAwLFxuXG5cdC8vIERlZmF1bHQgc3BlZWRcblx0X2RlZmF1bHQ6IDQwMFxufTtcblxuXG4vLyBCYXNlZCBvZmYgb2YgdGhlIHBsdWdpbiBieSBDbGludCBIZWxmZXJzLCB3aXRoIHBlcm1pc3Npb24uXG4vLyBodHRwczovL3dlYi5hcmNoaXZlLm9yZy93ZWIvMjAxMDAzMjQwMTQ3NDcvaHR0cDovL2JsaW5kc2lnbmFscy5jb20vaW5kZXgucGhwLzIwMDkvMDcvanF1ZXJ5LWRlbGF5L1xualF1ZXJ5LmZuLmRlbGF5ID0gZnVuY3Rpb24oIHRpbWUsIHR5cGUgKSB7XG5cdHRpbWUgPSBqUXVlcnkuZnggPyBqUXVlcnkuZnguc3BlZWRzWyB0aW1lIF0gfHwgdGltZSA6IHRpbWU7XG5cdHR5cGUgPSB0eXBlIHx8IFwiZnhcIjtcblxuXHRyZXR1cm4gdGhpcy5xdWV1ZSggdHlwZSwgZnVuY3Rpb24oIG5leHQsIGhvb2tzICkge1xuXHRcdHZhciB0aW1lb3V0ID0gd2luZG93LnNldFRpbWVvdXQoIG5leHQsIHRpbWUgKTtcblx0XHRob29rcy5zdG9wID0gZnVuY3Rpb24oKSB7XG5cdFx0XHR3aW5kb3cuY2xlYXJUaW1lb3V0KCB0aW1lb3V0ICk7XG5cdFx0fTtcblx0fSApO1xufTtcblxuXG4oIGZ1bmN0aW9uKCkge1xuXHR2YXIgaW5wdXQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImlucHV0XCIgKSxcblx0XHRzZWxlY3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcInNlbGVjdFwiICksXG5cdFx0b3B0ID0gc2VsZWN0LmFwcGVuZENoaWxkKCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcIm9wdGlvblwiICkgKTtcblxuXHRpbnB1dC50eXBlID0gXCJjaGVja2JveFwiO1xuXG5cdC8vIFN1cHBvcnQ6IEFuZHJvaWQgPD00LjMgb25seVxuXHQvLyBEZWZhdWx0IHZhbHVlIGZvciBhIGNoZWNrYm94IHNob3VsZCBiZSBcIm9uXCJcblx0c3VwcG9ydC5jaGVja09uID0gaW5wdXQudmFsdWUgIT09IFwiXCI7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIE11c3QgYWNjZXNzIHNlbGVjdGVkSW5kZXggdG8gbWFrZSBkZWZhdWx0IG9wdGlvbnMgc2VsZWN0XG5cdHN1cHBvcnQub3B0U2VsZWN0ZWQgPSBvcHQuc2VsZWN0ZWQ7XG5cblx0Ly8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG5cdC8vIEFuIGlucHV0IGxvc2VzIGl0cyB2YWx1ZSBhZnRlciBiZWNvbWluZyBhIHJhZGlvXG5cdGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCggXCJpbnB1dFwiICk7XG5cdGlucHV0LnZhbHVlID0gXCJ0XCI7XG5cdGlucHV0LnR5cGUgPSBcInJhZGlvXCI7XG5cdHN1cHBvcnQucmFkaW9WYWx1ZSA9IGlucHV0LnZhbHVlID09PSBcInRcIjtcbn0gKSgpO1xuXG5cbnZhciBib29sSG9vayxcblx0YXR0ckhhbmRsZSA9IGpRdWVyeS5leHByLmF0dHJIYW5kbGU7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0YXR0cjogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGpRdWVyeS5hdHRyLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fSxcblxuXHRyZW1vdmVBdHRyOiBmdW5jdGlvbiggbmFtZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeS5yZW1vdmVBdHRyKCB0aGlzLCBuYW1lICk7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0YXR0cjogZnVuY3Rpb24oIGVsZW0sIG5hbWUsIHZhbHVlICkge1xuXHRcdHZhciByZXQsIGhvb2tzLFxuXHRcdFx0blR5cGUgPSBlbGVtLm5vZGVUeXBlO1xuXG5cdFx0Ly8gRG9uJ3QgZ2V0L3NldCBhdHRyaWJ1dGVzIG9uIHRleHQsIGNvbW1lbnQgYW5kIGF0dHJpYnV0ZSBub2Rlc1xuXHRcdGlmICggblR5cGUgPT09IDMgfHwgblR5cGUgPT09IDggfHwgblR5cGUgPT09IDIgKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0Ly8gRmFsbGJhY2sgdG8gcHJvcCB3aGVuIGF0dHJpYnV0ZXMgYXJlIG5vdCBzdXBwb3J0ZWRcblx0XHRpZiAoIHR5cGVvZiBlbGVtLmdldEF0dHJpYnV0ZSA9PT0gXCJ1bmRlZmluZWRcIiApIHtcblx0XHRcdHJldHVybiBqUXVlcnkucHJvcCggZWxlbSwgbmFtZSwgdmFsdWUgKTtcblx0XHR9XG5cblx0XHQvLyBBdHRyaWJ1dGUgaG9va3MgYXJlIGRldGVybWluZWQgYnkgdGhlIGxvd2VyY2FzZSB2ZXJzaW9uXG5cdFx0Ly8gR3JhYiBuZWNlc3NhcnkgaG9vayBpZiBvbmUgaXMgZGVmaW5lZFxuXHRcdGlmICggblR5cGUgIT09IDEgfHwgIWpRdWVyeS5pc1hNTERvYyggZWxlbSApICkge1xuXHRcdFx0aG9va3MgPSBqUXVlcnkuYXR0ckhvb2tzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSB8fFxuXHRcdFx0XHQoIGpRdWVyeS5leHByLm1hdGNoLmJvb2wudGVzdCggbmFtZSApID8gYm9vbEhvb2sgOiB1bmRlZmluZWQgKTtcblx0XHR9XG5cblx0XHRpZiAoIHZhbHVlICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRpZiAoIHZhbHVlID09PSBudWxsICkge1xuXHRcdFx0XHRqUXVlcnkucmVtb3ZlQXR0ciggZWxlbSwgbmFtZSApO1xuXHRcdFx0XHRyZXR1cm47XG5cdFx0XHR9XG5cblx0XHRcdGlmICggaG9va3MgJiYgXCJzZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdGVsZW0uc2V0QXR0cmlidXRlKCBuYW1lLCB2YWx1ZSArIFwiXCIgKTtcblx0XHRcdHJldHVybiB2YWx1ZTtcblx0XHR9XG5cblx0XHRpZiAoIGhvb2tzICYmIFwiZ2V0XCIgaW4gaG9va3MgJiYgKCByZXQgPSBob29rcy5nZXQoIGVsZW0sIG5hbWUgKSApICE9PSBudWxsICkge1xuXHRcdFx0cmV0dXJuIHJldDtcblx0XHR9XG5cblx0XHRyZXQgPSBqUXVlcnkuZmluZC5hdHRyKCBlbGVtLCBuYW1lICk7XG5cblx0XHQvLyBOb24tZXhpc3RlbnQgYXR0cmlidXRlcyByZXR1cm4gbnVsbCwgd2Ugbm9ybWFsaXplIHRvIHVuZGVmaW5lZFxuXHRcdHJldHVybiByZXQgPT0gbnVsbCA/IHVuZGVmaW5lZCA6IHJldDtcblx0fSxcblxuXHRhdHRySG9va3M6IHtcblx0XHR0eXBlOiB7XG5cdFx0XHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHRcdFx0aWYgKCAhc3VwcG9ydC5yYWRpb1ZhbHVlICYmIHZhbHVlID09PSBcInJhZGlvXCIgJiZcblx0XHRcdFx0XHRub2RlTmFtZSggZWxlbSwgXCJpbnB1dFwiICkgKSB7XG5cdFx0XHRcdFx0dmFyIHZhbCA9IGVsZW0udmFsdWU7XG5cdFx0XHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIFwidHlwZVwiLCB2YWx1ZSApO1xuXHRcdFx0XHRcdGlmICggdmFsICkge1xuXHRcdFx0XHRcdFx0ZWxlbS52YWx1ZSA9IHZhbDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHZhbHVlO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9LFxuXG5cdHJlbW92ZUF0dHI6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSApIHtcblx0XHR2YXIgbmFtZSxcblx0XHRcdGkgPSAwLFxuXG5cdFx0XHQvLyBBdHRyaWJ1dGUgbmFtZXMgY2FuIGNvbnRhaW4gbm9uLUhUTUwgd2hpdGVzcGFjZSBjaGFyYWN0ZXJzXG5cdFx0XHQvLyBodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnL211bHRpcGFnZS9zeW50YXguaHRtbCNhdHRyaWJ1dGVzLTJcblx0XHRcdGF0dHJOYW1lcyA9IHZhbHVlICYmIHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICk7XG5cblx0XHRpZiAoIGF0dHJOYW1lcyAmJiBlbGVtLm5vZGVUeXBlID09PSAxICkge1xuXHRcdFx0d2hpbGUgKCAoIG5hbWUgPSBhdHRyTmFtZXNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdGVsZW0ucmVtb3ZlQXR0cmlidXRlKCBuYW1lICk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG59ICk7XG5cbi8vIEhvb2tzIGZvciBib29sZWFuIGF0dHJpYnV0ZXNcbmJvb2xIb29rID0ge1xuXHRzZXQ6IGZ1bmN0aW9uKCBlbGVtLCB2YWx1ZSwgbmFtZSApIHtcblx0XHRpZiAoIHZhbHVlID09PSBmYWxzZSApIHtcblxuXHRcdFx0Ly8gUmVtb3ZlIGJvb2xlYW4gYXR0cmlidXRlcyB3aGVuIHNldCB0byBmYWxzZVxuXHRcdFx0alF1ZXJ5LnJlbW92ZUF0dHIoIGVsZW0sIG5hbWUgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZWxlbS5zZXRBdHRyaWJ1dGUoIG5hbWUsIG5hbWUgKTtcblx0XHR9XG5cdFx0cmV0dXJuIG5hbWU7XG5cdH1cbn07XG5cbmpRdWVyeS5lYWNoKCBqUXVlcnkuZXhwci5tYXRjaC5ib29sLnNvdXJjZS5tYXRjaCggL1xcdysvZyApLCBmdW5jdGlvbiggX2ksIG5hbWUgKSB7XG5cdHZhciBnZXR0ZXIgPSBhdHRySGFuZGxlWyBuYW1lIF0gfHwgalF1ZXJ5LmZpbmQuYXR0cjtcblxuXHRhdHRySGFuZGxlWyBuYW1lIF0gPSBmdW5jdGlvbiggZWxlbSwgbmFtZSwgaXNYTUwgKSB7XG5cdFx0dmFyIHJldCwgaGFuZGxlLFxuXHRcdFx0bG93ZXJjYXNlTmFtZSA9IG5hbWUudG9Mb3dlckNhc2UoKTtcblxuXHRcdGlmICggIWlzWE1MICkge1xuXG5cdFx0XHQvLyBBdm9pZCBhbiBpbmZpbml0ZSBsb29wIGJ5IHRlbXBvcmFyaWx5IHJlbW92aW5nIHRoaXMgZnVuY3Rpb24gZnJvbSB0aGUgZ2V0dGVyXG5cdFx0XHRoYW5kbGUgPSBhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF07XG5cdFx0XHRhdHRySGFuZGxlWyBsb3dlcmNhc2VOYW1lIF0gPSByZXQ7XG5cdFx0XHRyZXQgPSBnZXR0ZXIoIGVsZW0sIG5hbWUsIGlzWE1MICkgIT0gbnVsbCA/XG5cdFx0XHRcdGxvd2VyY2FzZU5hbWUgOlxuXHRcdFx0XHRudWxsO1xuXHRcdFx0YXR0ckhhbmRsZVsgbG93ZXJjYXNlTmFtZSBdID0gaGFuZGxlO1xuXHRcdH1cblx0XHRyZXR1cm4gcmV0O1xuXHR9O1xufSApO1xuXG5cblxuXG52YXIgcmZvY3VzYWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGJ1dHRvbikkL2ksXG5cdHJjbGlja2FibGUgPSAvXig/OmF8YXJlYSkkL2k7XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0cHJvcDogZnVuY3Rpb24oIG5hbWUsIHZhbHVlICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGpRdWVyeS5wcm9wLCBuYW1lLCB2YWx1ZSwgYXJndW1lbnRzLmxlbmd0aCA+IDEgKTtcblx0fSxcblxuXHRyZW1vdmVQcm9wOiBmdW5jdGlvbiggbmFtZSApIHtcblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGRlbGV0ZSB0aGlzWyBqUXVlcnkucHJvcEZpeFsgbmFtZSBdIHx8IG5hbWUgXTtcblx0XHR9ICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmV4dGVuZCgge1xuXHRwcm9wOiBmdW5jdGlvbiggZWxlbSwgbmFtZSwgdmFsdWUgKSB7XG5cdFx0dmFyIHJldCwgaG9va3MsXG5cdFx0XHRuVHlwZSA9IGVsZW0ubm9kZVR5cGU7XG5cblx0XHQvLyBEb24ndCBnZXQvc2V0IHByb3BlcnRpZXMgb24gdGV4dCwgY29tbWVudCBhbmQgYXR0cmlidXRlIG5vZGVzXG5cdFx0aWYgKCBuVHlwZSA9PT0gMyB8fCBuVHlwZSA9PT0gOCB8fCBuVHlwZSA9PT0gMiApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIG5UeXBlICE9PSAxIHx8ICFqUXVlcnkuaXNYTUxEb2MoIGVsZW0gKSApIHtcblxuXHRcdFx0Ly8gRml4IG5hbWUgYW5kIGF0dGFjaCBob29rc1xuXHRcdFx0bmFtZSA9IGpRdWVyeS5wcm9wRml4WyBuYW1lIF0gfHwgbmFtZTtcblx0XHRcdGhvb2tzID0galF1ZXJ5LnByb3BIb29rc1sgbmFtZSBdO1xuXHRcdH1cblxuXHRcdGlmICggdmFsdWUgIT09IHVuZGVmaW5lZCApIHtcblx0XHRcdGlmICggaG9va3MgJiYgXCJzZXRcIiBpbiBob29rcyAmJlxuXHRcdFx0XHQoIHJldCA9IGhvb2tzLnNldCggZWxlbSwgdmFsdWUsIG5hbWUgKSApICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybiAoIGVsZW1bIG5hbWUgXSA9IHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBob29rcyAmJiBcImdldFwiIGluIGhvb2tzICYmICggcmV0ID0gaG9va3MuZ2V0KCBlbGVtLCBuYW1lICkgKSAhPT0gbnVsbCApIHtcblx0XHRcdHJldHVybiByZXQ7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGVsZW1bIG5hbWUgXTtcblx0fSxcblxuXHRwcm9wSG9va3M6IHtcblx0XHR0YWJJbmRleDoge1xuXHRcdFx0Z2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgLSAxMSBvbmx5XG5cdFx0XHRcdC8vIGVsZW0udGFiSW5kZXggZG9lc24ndCBhbHdheXMgcmV0dXJuIHRoZVxuXHRcdFx0XHQvLyBjb3JyZWN0IHZhbHVlIHdoZW4gaXQgaGFzbid0IGJlZW4gZXhwbGljaXRseSBzZXRcblx0XHRcdFx0Ly8gaHR0cHM6Ly93ZWIuYXJjaGl2ZS5vcmcvd2ViLzIwMTQxMTE2MjMzMzQ3L2h0dHA6Ly9mbHVpZHByb2plY3Qub3JnL2Jsb2cvMjAwOC8wMS8wOS9nZXR0aW5nLXNldHRpbmctYW5kLXJlbW92aW5nLXRhYmluZGV4LXZhbHVlcy13aXRoLWphdmFzY3JpcHQvXG5cdFx0XHRcdC8vIFVzZSBwcm9wZXIgYXR0cmlidXRlIHJldHJpZXZhbCgjMTIwNzIpXG5cdFx0XHRcdHZhciB0YWJpbmRleCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIFwidGFiaW5kZXhcIiApO1xuXG5cdFx0XHRcdGlmICggdGFiaW5kZXggKSB7XG5cdFx0XHRcdFx0cmV0dXJuIHBhcnNlSW50KCB0YWJpbmRleCwgMTAgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGlmIChcblx0XHRcdFx0XHRyZm9jdXNhYmxlLnRlc3QoIGVsZW0ubm9kZU5hbWUgKSB8fFxuXHRcdFx0XHRcdHJjbGlja2FibGUudGVzdCggZWxlbS5ub2RlTmFtZSApICYmXG5cdFx0XHRcdFx0ZWxlbS5ocmVmXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiAwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIC0xO1xuXHRcdFx0fVxuXHRcdH1cblx0fSxcblxuXHRwcm9wRml4OiB7XG5cdFx0XCJmb3JcIjogXCJodG1sRm9yXCIsXG5cdFx0XCJjbGFzc1wiOiBcImNsYXNzTmFtZVwiXG5cdH1cbn0gKTtcblxuLy8gU3VwcG9ydDogSUUgPD0xMSBvbmx5XG4vLyBBY2Nlc3NpbmcgdGhlIHNlbGVjdGVkSW5kZXggcHJvcGVydHlcbi8vIGZvcmNlcyB0aGUgYnJvd3NlciB0byByZXNwZWN0IHNldHRpbmcgc2VsZWN0ZWRcbi8vIG9uIHRoZSBvcHRpb25cbi8vIFRoZSBnZXR0ZXIgZW5zdXJlcyBhIGRlZmF1bHQgb3B0aW9uIGlzIHNlbGVjdGVkXG4vLyB3aGVuIGluIGFuIG9wdGdyb3VwXG4vLyBlc2xpbnQgcnVsZSBcIm5vLXVudXNlZC1leHByZXNzaW9uc1wiIGlzIGRpc2FibGVkIGZvciB0aGlzIGNvZGVcbi8vIHNpbmNlIGl0IGNvbnNpZGVycyBzdWNoIGFjY2Vzc2lvbnMgbm9vcFxuaWYgKCAhc3VwcG9ydC5vcHRTZWxlY3RlZCApIHtcblx0alF1ZXJ5LnByb3BIb29rcy5zZWxlY3RlZCA9IHtcblx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXG5cdFx0XHQvKiBlc2xpbnQgbm8tdW51c2VkLWV4cHJlc3Npb25zOiBcIm9mZlwiICovXG5cblx0XHRcdHZhciBwYXJlbnQgPSBlbGVtLnBhcmVudE5vZGU7XG5cdFx0XHRpZiAoIHBhcmVudCAmJiBwYXJlbnQucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0cGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdH1cblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH0sXG5cdFx0c2V0OiBmdW5jdGlvbiggZWxlbSApIHtcblxuXHRcdFx0LyogZXNsaW50IG5vLXVudXNlZC1leHByZXNzaW9uczogXCJvZmZcIiAqL1xuXG5cdFx0XHR2YXIgcGFyZW50ID0gZWxlbS5wYXJlbnROb2RlO1xuXHRcdFx0aWYgKCBwYXJlbnQgKSB7XG5cdFx0XHRcdHBhcmVudC5zZWxlY3RlZEluZGV4O1xuXG5cdFx0XHRcdGlmICggcGFyZW50LnBhcmVudE5vZGUgKSB7XG5cdFx0XHRcdFx0cGFyZW50LnBhcmVudE5vZGUuc2VsZWN0ZWRJbmRleDtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxualF1ZXJ5LmVhY2goIFtcblx0XCJ0YWJJbmRleFwiLFxuXHRcInJlYWRPbmx5XCIsXG5cdFwibWF4TGVuZ3RoXCIsXG5cdFwiY2VsbFNwYWNpbmdcIixcblx0XCJjZWxsUGFkZGluZ1wiLFxuXHRcInJvd1NwYW5cIixcblx0XCJjb2xTcGFuXCIsXG5cdFwidXNlTWFwXCIsXG5cdFwiZnJhbWVCb3JkZXJcIixcblx0XCJjb250ZW50RWRpdGFibGVcIlxuXSwgZnVuY3Rpb24oKSB7XG5cdGpRdWVyeS5wcm9wRml4WyB0aGlzLnRvTG93ZXJDYXNlKCkgXSA9IHRoaXM7XG59ICk7XG5cblxuXG5cblx0Ly8gU3RyaXAgYW5kIGNvbGxhcHNlIHdoaXRlc3BhY2UgYWNjb3JkaW5nIHRvIEhUTUwgc3BlY1xuXHQvLyBodHRwczovL2luZnJhLnNwZWMud2hhdHdnLm9yZy8jc3RyaXAtYW5kLWNvbGxhcHNlLWFzY2lpLXdoaXRlc3BhY2Vcblx0ZnVuY3Rpb24gc3RyaXBBbmRDb2xsYXBzZSggdmFsdWUgKSB7XG5cdFx0dmFyIHRva2VucyA9IHZhbHVlLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107XG5cdFx0cmV0dXJuIHRva2Vucy5qb2luKCBcIiBcIiApO1xuXHR9XG5cblxuZnVuY3Rpb24gZ2V0Q2xhc3MoIGVsZW0gKSB7XG5cdHJldHVybiBlbGVtLmdldEF0dHJpYnV0ZSAmJiBlbGVtLmdldEF0dHJpYnV0ZSggXCJjbGFzc1wiICkgfHwgXCJcIjtcbn1cblxuZnVuY3Rpb24gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICkge1xuXHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbHVlICkgKSB7XG5cdFx0cmV0dXJuIHZhbHVlO1xuXHR9XG5cdGlmICggdHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiICkge1xuXHRcdHJldHVybiB2YWx1ZS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFtdO1xuXHR9XG5cdHJldHVybiBbXTtcbn1cblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHRhZGRDbGFzczogZnVuY3Rpb24oIHZhbHVlICkge1xuXHRcdHZhciBjbGFzc2VzLCBlbGVtLCBjdXIsIGN1clZhbHVlLCBjbGF6eiwgaiwgZmluYWxWYWx1ZSxcblx0XHRcdGkgPSAwO1xuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGogKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLmFkZENsYXNzKCB2YWx1ZS5jYWxsKCB0aGlzLCBqLCBnZXRDbGFzcyggdGhpcyApICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRjbGFzc2VzID0gY2xhc3Nlc1RvQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIGNsYXNzZXMubGVuZ3RoICkge1xuXHRcdFx0d2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkge1xuXHRcdFx0XHRjdXJWYWx1ZSA9IGdldENsYXNzKCBlbGVtICk7XG5cdFx0XHRcdGN1ciA9IGVsZW0ubm9kZVR5cGUgPT09IDEgJiYgKCBcIiBcIiArIHN0cmlwQW5kQ29sbGFwc2UoIGN1clZhbHVlICkgKyBcIiBcIiApO1xuXG5cdFx0XHRcdGlmICggY3VyICkge1xuXHRcdFx0XHRcdGogPSAwO1xuXHRcdFx0XHRcdHdoaWxlICggKCBjbGF6eiA9IGNsYXNzZXNbIGorKyBdICkgKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGN1ci5pbmRleE9mKCBcIiBcIiArIGNsYXp6ICsgXCIgXCIgKSA8IDAgKSB7XG5cdFx0XHRcdFx0XHRcdGN1ciArPSBjbGF6eiArIFwiIFwiO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuXG5cdFx0XHRcdFx0ZmluYWxWYWx1ZSA9IHN0cmlwQW5kQ29sbGFwc2UoIGN1ciApO1xuXHRcdFx0XHRcdGlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLCBmaW5hbFZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0cmVtb3ZlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgY2xhc3NlcywgZWxlbSwgY3VyLCBjdXJWYWx1ZSwgY2xhenosIGosIGZpbmFsVmFsdWUsXG5cdFx0XHRpID0gMDtcblxuXHRcdGlmICggaXNGdW5jdGlvbiggdmFsdWUgKSApIHtcblx0XHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCBqICkge1xuXHRcdFx0XHRqUXVlcnkoIHRoaXMgKS5yZW1vdmVDbGFzcyggdmFsdWUuY2FsbCggdGhpcywgaiwgZ2V0Q2xhc3MoIHRoaXMgKSApICk7XG5cdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0aWYgKCAhYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiB0aGlzLmF0dHIoIFwiY2xhc3NcIiwgXCJcIiApO1xuXHRcdH1cblxuXHRcdGNsYXNzZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcblxuXHRcdGlmICggY2xhc3Nlcy5sZW5ndGggKSB7XG5cdFx0XHR3aGlsZSAoICggZWxlbSA9IHRoaXNbIGkrKyBdICkgKSB7XG5cdFx0XHRcdGN1clZhbHVlID0gZ2V0Q2xhc3MoIGVsZW0gKTtcblxuXHRcdFx0XHQvLyBUaGlzIGV4cHJlc3Npb24gaXMgaGVyZSBmb3IgYmV0dGVyIGNvbXByZXNzaWJpbGl0eSAoc2VlIGFkZENsYXNzKVxuXHRcdFx0XHRjdXIgPSBlbGVtLm5vZGVUeXBlID09PSAxICYmICggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBjdXJWYWx1ZSApICsgXCIgXCIgKTtcblxuXHRcdFx0XHRpZiAoIGN1ciApIHtcblx0XHRcdFx0XHRqID0gMDtcblx0XHRcdFx0XHR3aGlsZSAoICggY2xhenogPSBjbGFzc2VzWyBqKysgXSApICkge1xuXG5cdFx0XHRcdFx0XHQvLyBSZW1vdmUgKmFsbCogaW5zdGFuY2VzXG5cdFx0XHRcdFx0XHR3aGlsZSAoIGN1ci5pbmRleE9mKCBcIiBcIiArIGNsYXp6ICsgXCIgXCIgKSA+IC0xICkge1xuXHRcdFx0XHRcdFx0XHRjdXIgPSBjdXIucmVwbGFjZSggXCIgXCIgKyBjbGF6eiArIFwiIFwiLCBcIiBcIiApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIE9ubHkgYXNzaWduIGlmIGRpZmZlcmVudCB0byBhdm9pZCB1bm5lZWRlZCByZW5kZXJpbmcuXG5cdFx0XHRcdFx0ZmluYWxWYWx1ZSA9IHN0cmlwQW5kQ29sbGFwc2UoIGN1ciApO1xuXHRcdFx0XHRcdGlmICggY3VyVmFsdWUgIT09IGZpbmFsVmFsdWUgKSB7XG5cdFx0XHRcdFx0XHRlbGVtLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLCBmaW5hbFZhbHVlICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH0sXG5cblx0dG9nZ2xlQ2xhc3M6IGZ1bmN0aW9uKCB2YWx1ZSwgc3RhdGVWYWwgKSB7XG5cdFx0dmFyIHR5cGUgPSB0eXBlb2YgdmFsdWUsXG5cdFx0XHRpc1ZhbGlkVmFsdWUgPSB0eXBlID09PSBcInN0cmluZ1wiIHx8IEFycmF5LmlzQXJyYXkoIHZhbHVlICk7XG5cblx0XHRpZiAoIHR5cGVvZiBzdGF0ZVZhbCA9PT0gXCJib29sZWFuXCIgJiYgaXNWYWxpZFZhbHVlICkge1xuXHRcdFx0cmV0dXJuIHN0YXRlVmFsID8gdGhpcy5hZGRDbGFzcyggdmFsdWUgKSA6IHRoaXMucmVtb3ZlQ2xhc3MoIHZhbHVlICk7XG5cdFx0fVxuXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCB2YWx1ZSApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLnRvZ2dsZUNsYXNzKFxuXHRcdFx0XHRcdHZhbHVlLmNhbGwoIHRoaXMsIGksIGdldENsYXNzKCB0aGlzICksIHN0YXRlVmFsICksXG5cdFx0XHRcdFx0c3RhdGVWYWxcblx0XHRcdFx0KTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBjbGFzc05hbWUsIGksIHNlbGYsIGNsYXNzTmFtZXM7XG5cblx0XHRcdGlmICggaXNWYWxpZFZhbHVlICkge1xuXG5cdFx0XHRcdC8vIFRvZ2dsZSBpbmRpdmlkdWFsIGNsYXNzIG5hbWVzXG5cdFx0XHRcdGkgPSAwO1xuXHRcdFx0XHRzZWxmID0galF1ZXJ5KCB0aGlzICk7XG5cdFx0XHRcdGNsYXNzTmFtZXMgPSBjbGFzc2VzVG9BcnJheSggdmFsdWUgKTtcblxuXHRcdFx0XHR3aGlsZSAoICggY2xhc3NOYW1lID0gY2xhc3NOYW1lc1sgaSsrIF0gKSApIHtcblxuXHRcdFx0XHRcdC8vIENoZWNrIGVhY2ggY2xhc3NOYW1lIGdpdmVuLCBzcGFjZSBzZXBhcmF0ZWQgbGlzdFxuXHRcdFx0XHRcdGlmICggc2VsZi5oYXNDbGFzcyggY2xhc3NOYW1lICkgKSB7XG5cdFx0XHRcdFx0XHRzZWxmLnJlbW92ZUNsYXNzKCBjbGFzc05hbWUgKTtcblx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0c2VsZi5hZGRDbGFzcyggY2xhc3NOYW1lICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdC8vIFRvZ2dsZSB3aG9sZSBjbGFzcyBuYW1lXG5cdFx0XHR9IGVsc2UgaWYgKCB2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHR5cGUgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdFx0XHRjbGFzc05hbWUgPSBnZXRDbGFzcyggdGhpcyApO1xuXHRcdFx0XHRpZiAoIGNsYXNzTmFtZSApIHtcblxuXHRcdFx0XHRcdC8vIFN0b3JlIGNsYXNzTmFtZSBpZiBzZXRcblx0XHRcdFx0XHRkYXRhUHJpdi5zZXQoIHRoaXMsIFwiX19jbGFzc05hbWVfX1wiLCBjbGFzc05hbWUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIElmIHRoZSBlbGVtZW50IGhhcyBhIGNsYXNzIG5hbWUgb3IgaWYgd2UncmUgcGFzc2VkIGBmYWxzZWAsXG5cdFx0XHRcdC8vIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBjbGFzc25hbWUgKGlmIHRoZXJlIHdhcyBvbmUsIHRoZSBhYm92ZSBzYXZlZCBpdCkuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBicmluZyBiYWNrIHdoYXRldmVyIHdhcyBwcmV2aW91c2x5IHNhdmVkIChpZiBhbnl0aGluZyksXG5cdFx0XHRcdC8vIGZhbGxpbmcgYmFjayB0byB0aGUgZW1wdHkgc3RyaW5nIGlmIG5vdGhpbmcgd2FzIHN0b3JlZC5cblx0XHRcdFx0aWYgKCB0aGlzLnNldEF0dHJpYnV0ZSApIHtcblx0XHRcdFx0XHR0aGlzLnNldEF0dHJpYnV0ZSggXCJjbGFzc1wiLFxuXHRcdFx0XHRcdFx0Y2xhc3NOYW1lIHx8IHZhbHVlID09PSBmYWxzZSA/XG5cdFx0XHRcdFx0XHRcdFwiXCIgOlxuXHRcdFx0XHRcdFx0XHRkYXRhUHJpdi5nZXQoIHRoaXMsIFwiX19jbGFzc05hbWVfX1wiICkgfHwgXCJcIlxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9ICk7XG5cdH0sXG5cblx0aGFzQ2xhc3M6IGZ1bmN0aW9uKCBzZWxlY3RvciApIHtcblx0XHR2YXIgY2xhc3NOYW1lLCBlbGVtLFxuXHRcdFx0aSA9IDA7XG5cblx0XHRjbGFzc05hbWUgPSBcIiBcIiArIHNlbGVjdG9yICsgXCIgXCI7XG5cdFx0d2hpbGUgKCAoIGVsZW0gPSB0aGlzWyBpKysgXSApICkge1xuXHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSAxICYmXG5cdFx0XHRcdCggXCIgXCIgKyBzdHJpcEFuZENvbGxhcHNlKCBnZXRDbGFzcyggZWxlbSApICkgKyBcIiBcIiApLmluZGV4T2YoIGNsYXNzTmFtZSApID4gLTEgKSB7XG5cdFx0XHRcdHJldHVybiB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufSApO1xuXG5cblxuXG52YXIgcnJldHVybiA9IC9cXHIvZztcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXHR2YWw6IGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHR2YXIgaG9va3MsIHJldCwgdmFsdWVJc0Z1bmN0aW9uLFxuXHRcdFx0ZWxlbSA9IHRoaXNbIDAgXTtcblxuXHRcdGlmICggIWFyZ3VtZW50cy5sZW5ndGggKSB7XG5cdFx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRcdGhvb2tzID0galF1ZXJ5LnZhbEhvb2tzWyBlbGVtLnR5cGUgXSB8fFxuXHRcdFx0XHRcdGpRdWVyeS52YWxIb29rc1sgZWxlbS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIF07XG5cblx0XHRcdFx0aWYgKCBob29rcyAmJlxuXHRcdFx0XHRcdFwiZ2V0XCIgaW4gaG9va3MgJiZcblx0XHRcdFx0XHQoIHJldCA9IGhvb2tzLmdldCggZWxlbSwgXCJ2YWx1ZVwiICkgKSAhPT0gdW5kZWZpbmVkXG5cdFx0XHRcdCkge1xuXHRcdFx0XHRcdHJldHVybiByZXQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXQgPSBlbGVtLnZhbHVlO1xuXG5cdFx0XHRcdC8vIEhhbmRsZSBtb3N0IGNvbW1vbiBzdHJpbmcgY2FzZXNcblx0XHRcdFx0aWYgKCB0eXBlb2YgcmV0ID09PSBcInN0cmluZ1wiICkge1xuXHRcdFx0XHRcdHJldHVybiByZXQucmVwbGFjZSggcnJldHVybiwgXCJcIiApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gSGFuZGxlIGNhc2VzIHdoZXJlIHZhbHVlIGlzIG51bGwvdW5kZWYgb3IgbnVtYmVyXG5cdFx0XHRcdHJldHVybiByZXQgPT0gbnVsbCA/IFwiXCIgOiByZXQ7XG5cdFx0XHR9XG5cblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHR2YWx1ZUlzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCB2YWx1ZSApO1xuXG5cdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHR2YXIgdmFsO1xuXG5cdFx0XHRpZiAoIHRoaXMubm9kZVR5cGUgIT09IDEgKSB7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB2YWx1ZUlzRnVuY3Rpb24gKSB7XG5cdFx0XHRcdHZhbCA9IHZhbHVlLmNhbGwoIHRoaXMsIGksIGpRdWVyeSggdGhpcyApLnZhbCgpICk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR2YWwgPSB2YWx1ZTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gVHJlYXQgbnVsbC91bmRlZmluZWQgYXMgXCJcIjsgY29udmVydCBudW1iZXJzIHRvIHN0cmluZ1xuXHRcdFx0aWYgKCB2YWwgPT0gbnVsbCApIHtcblx0XHRcdFx0dmFsID0gXCJcIjtcblxuXHRcdFx0fSBlbHNlIGlmICggdHlwZW9mIHZhbCA9PT0gXCJudW1iZXJcIiApIHtcblx0XHRcdFx0dmFsICs9IFwiXCI7XG5cblx0XHRcdH0gZWxzZSBpZiAoIEFycmF5LmlzQXJyYXkoIHZhbCApICkge1xuXHRcdFx0XHR2YWwgPSBqUXVlcnkubWFwKCB2YWwsIGZ1bmN0aW9uKCB2YWx1ZSApIHtcblx0XHRcdFx0XHRyZXR1cm4gdmFsdWUgPT0gbnVsbCA/IFwiXCIgOiB2YWx1ZSArIFwiXCI7XG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblxuXHRcdFx0aG9va3MgPSBqUXVlcnkudmFsSG9va3NbIHRoaXMudHlwZSBdIHx8IGpRdWVyeS52YWxIb29rc1sgdGhpcy5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpIF07XG5cblx0XHRcdC8vIElmIHNldCByZXR1cm5zIHVuZGVmaW5lZCwgZmFsbCBiYWNrIHRvIG5vcm1hbCBzZXR0aW5nXG5cdFx0XHRpZiAoICFob29rcyB8fCAhKCBcInNldFwiIGluIGhvb2tzICkgfHwgaG9va3Muc2V0KCB0aGlzLCB2YWwsIFwidmFsdWVcIiApID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdHRoaXMudmFsdWUgPSB2YWw7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbmpRdWVyeS5leHRlbmQoIHtcblx0dmFsSG9va3M6IHtcblx0XHRvcHRpb246IHtcblx0XHRcdGdldDogZnVuY3Rpb24oIGVsZW0gKSB7XG5cblx0XHRcdFx0dmFyIHZhbCA9IGpRdWVyeS5maW5kLmF0dHIoIGVsZW0sIFwidmFsdWVcIiApO1xuXHRcdFx0XHRyZXR1cm4gdmFsICE9IG51bGwgP1xuXHRcdFx0XHRcdHZhbCA6XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTEwIC0gMTEgb25seVxuXHRcdFx0XHRcdC8vIG9wdGlvbi50ZXh0IHRocm93cyBleGNlcHRpb25zICgjMTQ2ODYsICMxNDg1OClcblx0XHRcdFx0XHQvLyBTdHJpcCBhbmQgY29sbGFwc2Ugd2hpdGVzcGFjZVxuXHRcdFx0XHRcdC8vIGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI3N0cmlwLWFuZC1jb2xsYXBzZS13aGl0ZXNwYWNlXG5cdFx0XHRcdFx0c3RyaXBBbmRDb2xsYXBzZSggalF1ZXJ5LnRleHQoIGVsZW0gKSApO1xuXHRcdFx0fVxuXHRcdH0sXG5cdFx0c2VsZWN0OiB7XG5cdFx0XHRnZXQ6IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0XHR2YXIgdmFsdWUsIG9wdGlvbiwgaSxcblx0XHRcdFx0XHRvcHRpb25zID0gZWxlbS5vcHRpb25zLFxuXHRcdFx0XHRcdGluZGV4ID0gZWxlbS5zZWxlY3RlZEluZGV4LFxuXHRcdFx0XHRcdG9uZSA9IGVsZW0udHlwZSA9PT0gXCJzZWxlY3Qtb25lXCIsXG5cdFx0XHRcdFx0dmFsdWVzID0gb25lID8gbnVsbCA6IFtdLFxuXHRcdFx0XHRcdG1heCA9IG9uZSA/IGluZGV4ICsgMSA6IG9wdGlvbnMubGVuZ3RoO1xuXG5cdFx0XHRcdGlmICggaW5kZXggPCAwICkge1xuXHRcdFx0XHRcdGkgPSBtYXg7XG5cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRpID0gb25lID8gaW5kZXggOiAwO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gTG9vcCB0aHJvdWdoIGFsbCB0aGUgc2VsZWN0ZWQgb3B0aW9uc1xuXHRcdFx0XHRmb3IgKCA7IGkgPCBtYXg7IGkrKyApIHtcblx0XHRcdFx0XHRvcHRpb24gPSBvcHRpb25zWyBpIF07XG5cblx0XHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTkgb25seVxuXHRcdFx0XHRcdC8vIElFOC05IGRvZXNuJ3QgdXBkYXRlIHNlbGVjdGVkIGFmdGVyIGZvcm0gcmVzZXQgKCMyNTUxKVxuXHRcdFx0XHRcdGlmICggKCBvcHRpb24uc2VsZWN0ZWQgfHwgaSA9PT0gaW5kZXggKSAmJlxuXG5cdFx0XHRcdFx0XHRcdC8vIERvbid0IHJldHVybiBvcHRpb25zIHRoYXQgYXJlIGRpc2FibGVkIG9yIGluIGEgZGlzYWJsZWQgb3B0Z3JvdXBcblx0XHRcdFx0XHRcdFx0IW9wdGlvbi5kaXNhYmxlZCAmJlxuXHRcdFx0XHRcdFx0XHQoICFvcHRpb24ucGFyZW50Tm9kZS5kaXNhYmxlZCB8fFxuXHRcdFx0XHRcdFx0XHRcdCFub2RlTmFtZSggb3B0aW9uLnBhcmVudE5vZGUsIFwib3B0Z3JvdXBcIiApICkgKSB7XG5cblx0XHRcdFx0XHRcdC8vIEdldCB0aGUgc3BlY2lmaWMgdmFsdWUgZm9yIHRoZSBvcHRpb25cblx0XHRcdFx0XHRcdHZhbHVlID0galF1ZXJ5KCBvcHRpb24gKS52YWwoKTtcblxuXHRcdFx0XHRcdFx0Ly8gV2UgZG9uJ3QgbmVlZCBhbiBhcnJheSBmb3Igb25lIHNlbGVjdHNcblx0XHRcdFx0XHRcdGlmICggb25lICkge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdmFsdWU7XG5cdFx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRcdC8vIE11bHRpLVNlbGVjdHMgcmV0dXJuIGFuIGFycmF5XG5cdFx0XHRcdFx0XHR2YWx1ZXMucHVzaCggdmFsdWUgKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gdmFsdWVzO1xuXHRcdFx0fSxcblxuXHRcdFx0c2V0OiBmdW5jdGlvbiggZWxlbSwgdmFsdWUgKSB7XG5cdFx0XHRcdHZhciBvcHRpb25TZXQsIG9wdGlvbixcblx0XHRcdFx0XHRvcHRpb25zID0gZWxlbS5vcHRpb25zLFxuXHRcdFx0XHRcdHZhbHVlcyA9IGpRdWVyeS5tYWtlQXJyYXkoIHZhbHVlICksXG5cdFx0XHRcdFx0aSA9IG9wdGlvbnMubGVuZ3RoO1xuXG5cdFx0XHRcdHdoaWxlICggaS0tICkge1xuXHRcdFx0XHRcdG9wdGlvbiA9IG9wdGlvbnNbIGkgXTtcblxuXHRcdFx0XHRcdC8qIGVzbGludC1kaXNhYmxlIG5vLWNvbmQtYXNzaWduICovXG5cblx0XHRcdFx0XHRpZiAoIG9wdGlvbi5zZWxlY3RlZCA9XG5cdFx0XHRcdFx0XHRqUXVlcnkuaW5BcnJheSggalF1ZXJ5LnZhbEhvb2tzLm9wdGlvbi5nZXQoIG9wdGlvbiApLCB2YWx1ZXMgKSA+IC0xXG5cdFx0XHRcdFx0KSB7XG5cdFx0XHRcdFx0XHRvcHRpb25TZXQgPSB0cnVlO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8qIGVzbGludC1lbmFibGUgbm8tY29uZC1hc3NpZ24gKi9cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEZvcmNlIGJyb3dzZXJzIHRvIGJlaGF2ZSBjb25zaXN0ZW50bHkgd2hlbiBub24tbWF0Y2hpbmcgdmFsdWUgaXMgc2V0XG5cdFx0XHRcdGlmICggIW9wdGlvblNldCApIHtcblx0XHRcdFx0XHRlbGVtLnNlbGVjdGVkSW5kZXggPSAtMTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gdmFsdWVzO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxufSApO1xuXG4vLyBSYWRpb3MgYW5kIGNoZWNrYm94ZXMgZ2V0dGVyL3NldHRlclxualF1ZXJ5LmVhY2goIFsgXCJyYWRpb1wiLCBcImNoZWNrYm94XCIgXSwgZnVuY3Rpb24oKSB7XG5cdGpRdWVyeS52YWxIb29rc1sgdGhpcyBdID0ge1xuXHRcdHNldDogZnVuY3Rpb24oIGVsZW0sIHZhbHVlICkge1xuXHRcdFx0aWYgKCBBcnJheS5pc0FycmF5KCB2YWx1ZSApICkge1xuXHRcdFx0XHRyZXR1cm4gKCBlbGVtLmNoZWNrZWQgPSBqUXVlcnkuaW5BcnJheSggalF1ZXJ5KCBlbGVtICkudmFsKCksIHZhbHVlICkgPiAtMSApO1xuXHRcdFx0fVxuXHRcdH1cblx0fTtcblx0aWYgKCAhc3VwcG9ydC5jaGVja09uICkge1xuXHRcdGpRdWVyeS52YWxIb29rc1sgdGhpcyBdLmdldCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRcdFx0cmV0dXJuIGVsZW0uZ2V0QXR0cmlidXRlKCBcInZhbHVlXCIgKSA9PT0gbnVsbCA/IFwib25cIiA6IGVsZW0udmFsdWU7XG5cdFx0fTtcblx0fVxufSApO1xuXG5cblxuXG4vLyBSZXR1cm4galF1ZXJ5IGZvciBhdHRyaWJ1dGVzLW9ubHkgaW5jbHVzaW9uXG5cblxuc3VwcG9ydC5mb2N1c2luID0gXCJvbmZvY3VzaW5cIiBpbiB3aW5kb3c7XG5cblxudmFyIHJmb2N1c01vcnBoID0gL14oPzpmb2N1c2luZm9jdXN8Zm9jdXNvdXRibHVyKSQvLFxuXHRzdG9wUHJvcGFnYXRpb25DYWxsYmFjayA9IGZ1bmN0aW9uKCBlICkge1xuXHRcdGUuc3RvcFByb3BhZ2F0aW9uKCk7XG5cdH07XG5cbmpRdWVyeS5leHRlbmQoIGpRdWVyeS5ldmVudCwge1xuXG5cdHRyaWdnZXI6IGZ1bmN0aW9uKCBldmVudCwgZGF0YSwgZWxlbSwgb25seUhhbmRsZXJzICkge1xuXG5cdFx0dmFyIGksIGN1ciwgdG1wLCBidWJibGVUeXBlLCBvbnR5cGUsIGhhbmRsZSwgc3BlY2lhbCwgbGFzdEVsZW1lbnQsXG5cdFx0XHRldmVudFBhdGggPSBbIGVsZW0gfHwgZG9jdW1lbnQgXSxcblx0XHRcdHR5cGUgPSBoYXNPd24uY2FsbCggZXZlbnQsIFwidHlwZVwiICkgPyBldmVudC50eXBlIDogZXZlbnQsXG5cdFx0XHRuYW1lc3BhY2VzID0gaGFzT3duLmNhbGwoIGV2ZW50LCBcIm5hbWVzcGFjZVwiICkgPyBldmVudC5uYW1lc3BhY2Uuc3BsaXQoIFwiLlwiICkgOiBbXTtcblxuXHRcdGN1ciA9IGxhc3RFbGVtZW50ID0gdG1wID0gZWxlbSA9IGVsZW0gfHwgZG9jdW1lbnQ7XG5cblx0XHQvLyBEb24ndCBkbyBldmVudHMgb24gdGV4dCBhbmQgY29tbWVudCBub2Rlc1xuXHRcdGlmICggZWxlbS5ub2RlVHlwZSA9PT0gMyB8fCBlbGVtLm5vZGVUeXBlID09PSA4ICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIGZvY3VzL2JsdXIgbW9ycGhzIHRvIGZvY3VzaW4vb3V0OyBlbnN1cmUgd2UncmUgbm90IGZpcmluZyB0aGVtIHJpZ2h0IG5vd1xuXHRcdGlmICggcmZvY3VzTW9ycGgudGVzdCggdHlwZSArIGpRdWVyeS5ldmVudC50cmlnZ2VyZWQgKSApIHtcblx0XHRcdHJldHVybjtcblx0XHR9XG5cblx0XHRpZiAoIHR5cGUuaW5kZXhPZiggXCIuXCIgKSA+IC0xICkge1xuXG5cdFx0XHQvLyBOYW1lc3BhY2VkIHRyaWdnZXI7IGNyZWF0ZSBhIHJlZ2V4cCB0byBtYXRjaCBldmVudCB0eXBlIGluIGhhbmRsZSgpXG5cdFx0XHRuYW1lc3BhY2VzID0gdHlwZS5zcGxpdCggXCIuXCIgKTtcblx0XHRcdHR5cGUgPSBuYW1lc3BhY2VzLnNoaWZ0KCk7XG5cdFx0XHRuYW1lc3BhY2VzLnNvcnQoKTtcblx0XHR9XG5cdFx0b250eXBlID0gdHlwZS5pbmRleE9mKCBcIjpcIiApIDwgMCAmJiBcIm9uXCIgKyB0eXBlO1xuXG5cdFx0Ly8gQ2FsbGVyIGNhbiBwYXNzIGluIGEgalF1ZXJ5LkV2ZW50IG9iamVjdCwgT2JqZWN0LCBvciBqdXN0IGFuIGV2ZW50IHR5cGUgc3RyaW5nXG5cdFx0ZXZlbnQgPSBldmVudFsgalF1ZXJ5LmV4cGFuZG8gXSA/XG5cdFx0XHRldmVudCA6XG5cdFx0XHRuZXcgalF1ZXJ5LkV2ZW50KCB0eXBlLCB0eXBlb2YgZXZlbnQgPT09IFwib2JqZWN0XCIgJiYgZXZlbnQgKTtcblxuXHRcdC8vIFRyaWdnZXIgYml0bWFzazogJiAxIGZvciBuYXRpdmUgaGFuZGxlcnM7ICYgMiBmb3IgalF1ZXJ5IChhbHdheXMgdHJ1ZSlcblx0XHRldmVudC5pc1RyaWdnZXIgPSBvbmx5SGFuZGxlcnMgPyAyIDogMztcblx0XHRldmVudC5uYW1lc3BhY2UgPSBuYW1lc3BhY2VzLmpvaW4oIFwiLlwiICk7XG5cdFx0ZXZlbnQucm5hbWVzcGFjZSA9IGV2ZW50Lm5hbWVzcGFjZSA/XG5cdFx0XHRuZXcgUmVnRXhwKCBcIihefFxcXFwuKVwiICsgbmFtZXNwYWNlcy5qb2luKCBcIlxcXFwuKD86LipcXFxcLnwpXCIgKSArIFwiKFxcXFwufCQpXCIgKSA6XG5cdFx0XHRudWxsO1xuXG5cdFx0Ly8gQ2xlYW4gdXAgdGhlIGV2ZW50IGluIGNhc2UgaXQgaXMgYmVpbmcgcmV1c2VkXG5cdFx0ZXZlbnQucmVzdWx0ID0gdW5kZWZpbmVkO1xuXHRcdGlmICggIWV2ZW50LnRhcmdldCApIHtcblx0XHRcdGV2ZW50LnRhcmdldCA9IGVsZW07XG5cdFx0fVxuXG5cdFx0Ly8gQ2xvbmUgYW55IGluY29taW5nIGRhdGEgYW5kIHByZXBlbmQgdGhlIGV2ZW50LCBjcmVhdGluZyB0aGUgaGFuZGxlciBhcmcgbGlzdFxuXHRcdGRhdGEgPSBkYXRhID09IG51bGwgP1xuXHRcdFx0WyBldmVudCBdIDpcblx0XHRcdGpRdWVyeS5tYWtlQXJyYXkoIGRhdGEsIFsgZXZlbnQgXSApO1xuXG5cdFx0Ly8gQWxsb3cgc3BlY2lhbCBldmVudHMgdG8gZHJhdyBvdXRzaWRlIHRoZSBsaW5lc1xuXHRcdHNwZWNpYWwgPSBqUXVlcnkuZXZlbnQuc3BlY2lhbFsgdHlwZSBdIHx8IHt9O1xuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiBzcGVjaWFsLnRyaWdnZXIgJiYgc3BlY2lhbC50cmlnZ2VyLmFwcGx5KCBlbGVtLCBkYXRhICkgPT09IGZhbHNlICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIERldGVybWluZSBldmVudCBwcm9wYWdhdGlvbiBwYXRoIGluIGFkdmFuY2UsIHBlciBXM0MgZXZlbnRzIHNwZWMgKCM5OTUxKVxuXHRcdC8vIEJ1YmJsZSB1cCB0byBkb2N1bWVudCwgdGhlbiB0byB3aW5kb3c7IHdhdGNoIGZvciBhIGdsb2JhbCBvd25lckRvY3VtZW50IHZhciAoIzk3MjQpXG5cdFx0aWYgKCAhb25seUhhbmRsZXJzICYmICFzcGVjaWFsLm5vQnViYmxlICYmICFpc1dpbmRvdyggZWxlbSApICkge1xuXG5cdFx0XHRidWJibGVUeXBlID0gc3BlY2lhbC5kZWxlZ2F0ZVR5cGUgfHwgdHlwZTtcblx0XHRcdGlmICggIXJmb2N1c01vcnBoLnRlc3QoIGJ1YmJsZVR5cGUgKyB0eXBlICkgKSB7XG5cdFx0XHRcdGN1ciA9IGN1ci5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXHRcdFx0Zm9yICggOyBjdXI7IGN1ciA9IGN1ci5wYXJlbnROb2RlICkge1xuXHRcdFx0XHRldmVudFBhdGgucHVzaCggY3VyICk7XG5cdFx0XHRcdHRtcCA9IGN1cjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gT25seSBhZGQgd2luZG93IGlmIHdlIGdvdCB0byBkb2N1bWVudCAoZS5nLiwgbm90IHBsYWluIG9iaiBvciBkZXRhY2hlZCBET00pXG5cdFx0XHRpZiAoIHRtcCA9PT0gKCBlbGVtLm93bmVyRG9jdW1lbnQgfHwgZG9jdW1lbnQgKSApIHtcblx0XHRcdFx0ZXZlbnRQYXRoLnB1c2goIHRtcC5kZWZhdWx0VmlldyB8fCB0bXAucGFyZW50V2luZG93IHx8IHdpbmRvdyApO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIEZpcmUgaGFuZGxlcnMgb24gdGhlIGV2ZW50IHBhdGhcblx0XHRpID0gMDtcblx0XHR3aGlsZSAoICggY3VyID0gZXZlbnRQYXRoWyBpKysgXSApICYmICFldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0bGFzdEVsZW1lbnQgPSBjdXI7XG5cdFx0XHRldmVudC50eXBlID0gaSA+IDEgP1xuXHRcdFx0XHRidWJibGVUeXBlIDpcblx0XHRcdFx0c3BlY2lhbC5iaW5kVHlwZSB8fCB0eXBlO1xuXG5cdFx0XHQvLyBqUXVlcnkgaGFuZGxlclxuXHRcdFx0aGFuZGxlID0gKCBkYXRhUHJpdi5nZXQoIGN1ciwgXCJldmVudHNcIiApIHx8IE9iamVjdC5jcmVhdGUoIG51bGwgKSApWyBldmVudC50eXBlIF0gJiZcblx0XHRcdFx0ZGF0YVByaXYuZ2V0KCBjdXIsIFwiaGFuZGxlXCIgKTtcblx0XHRcdGlmICggaGFuZGxlICkge1xuXHRcdFx0XHRoYW5kbGUuYXBwbHkoIGN1ciwgZGF0YSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBOYXRpdmUgaGFuZGxlclxuXHRcdFx0aGFuZGxlID0gb250eXBlICYmIGN1clsgb250eXBlIF07XG5cdFx0XHRpZiAoIGhhbmRsZSAmJiBoYW5kbGUuYXBwbHkgJiYgYWNjZXB0RGF0YSggY3VyICkgKSB7XG5cdFx0XHRcdGV2ZW50LnJlc3VsdCA9IGhhbmRsZS5hcHBseSggY3VyLCBkYXRhICk7XG5cdFx0XHRcdGlmICggZXZlbnQucmVzdWx0ID09PSBmYWxzZSApIHtcblx0XHRcdFx0XHRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHRcdGV2ZW50LnR5cGUgPSB0eXBlO1xuXG5cdFx0Ly8gSWYgbm9ib2R5IHByZXZlbnRlZCB0aGUgZGVmYXVsdCBhY3Rpb24sIGRvIGl0IG5vd1xuXHRcdGlmICggIW9ubHlIYW5kbGVycyAmJiAhZXZlbnQuaXNEZWZhdWx0UHJldmVudGVkKCkgKSB7XG5cblx0XHRcdGlmICggKCAhc3BlY2lhbC5fZGVmYXVsdCB8fFxuXHRcdFx0XHRzcGVjaWFsLl9kZWZhdWx0LmFwcGx5KCBldmVudFBhdGgucG9wKCksIGRhdGEgKSA9PT0gZmFsc2UgKSAmJlxuXHRcdFx0XHRhY2NlcHREYXRhKCBlbGVtICkgKSB7XG5cblx0XHRcdFx0Ly8gQ2FsbCBhIG5hdGl2ZSBET00gbWV0aG9kIG9uIHRoZSB0YXJnZXQgd2l0aCB0aGUgc2FtZSBuYW1lIGFzIHRoZSBldmVudC5cblx0XHRcdFx0Ly8gRG9uJ3QgZG8gZGVmYXVsdCBhY3Rpb25zIG9uIHdpbmRvdywgdGhhdCdzIHdoZXJlIGdsb2JhbCB2YXJpYWJsZXMgYmUgKCM2MTcwKVxuXHRcdFx0XHRpZiAoIG9udHlwZSAmJiBpc0Z1bmN0aW9uKCBlbGVtWyB0eXBlIF0gKSAmJiAhaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0XHRcdC8vIERvbid0IHJlLXRyaWdnZXIgYW4gb25GT08gZXZlbnQgd2hlbiB3ZSBjYWxsIGl0cyBGT08oKSBtZXRob2Rcblx0XHRcdFx0XHR0bXAgPSBlbGVtWyBvbnR5cGUgXTtcblxuXHRcdFx0XHRcdGlmICggdG1wICkge1xuXHRcdFx0XHRcdFx0ZWxlbVsgb250eXBlIF0gPSBudWxsO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdC8vIFByZXZlbnQgcmUtdHJpZ2dlcmluZyBvZiB0aGUgc2FtZSBldmVudCwgc2luY2Ugd2UgYWxyZWFkeSBidWJibGVkIGl0IGFib3ZlXG5cdFx0XHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXJlZCA9IHR5cGU7XG5cblx0XHRcdFx0XHRpZiAoIGV2ZW50LmlzUHJvcGFnYXRpb25TdG9wcGVkKCkgKSB7XG5cdFx0XHRcdFx0XHRsYXN0RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCB0eXBlLCBzdG9wUHJvcGFnYXRpb25DYWxsYmFjayApO1xuXHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdGVsZW1bIHR5cGUgXSgpO1xuXG5cdFx0XHRcdFx0aWYgKCBldmVudC5pc1Byb3BhZ2F0aW9uU3RvcHBlZCgpICkge1xuXHRcdFx0XHRcdFx0bGFzdEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lciggdHlwZSwgc3RvcFByb3BhZ2F0aW9uQ2FsbGJhY2sgKTtcblx0XHRcdFx0XHR9XG5cblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlcmVkID0gdW5kZWZpbmVkO1xuXG5cdFx0XHRcdFx0aWYgKCB0bXAgKSB7XG5cdFx0XHRcdFx0XHRlbGVtWyBvbnR5cGUgXSA9IHRtcDtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4gZXZlbnQucmVzdWx0O1xuXHR9LFxuXG5cdC8vIFBpZ2d5YmFjayBvbiBhIGRvbm9yIGV2ZW50IHRvIHNpbXVsYXRlIGEgZGlmZmVyZW50IG9uZVxuXHQvLyBVc2VkIG9ubHkgZm9yIGBmb2N1cyhpbiB8IG91dClgIGV2ZW50c1xuXHRzaW11bGF0ZTogZnVuY3Rpb24oIHR5cGUsIGVsZW0sIGV2ZW50ICkge1xuXHRcdHZhciBlID0galF1ZXJ5LmV4dGVuZChcblx0XHRcdG5ldyBqUXVlcnkuRXZlbnQoKSxcblx0XHRcdGV2ZW50LFxuXHRcdFx0e1xuXHRcdFx0XHR0eXBlOiB0eXBlLFxuXHRcdFx0XHRpc1NpbXVsYXRlZDogdHJ1ZVxuXHRcdFx0fVxuXHRcdCk7XG5cblx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggZSwgbnVsbCwgZWxlbSApO1xuXHR9XG5cbn0gKTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdHRyaWdnZXI6IGZ1bmN0aW9uKCB0eXBlLCBkYXRhICkge1xuXHRcdHJldHVybiB0aGlzLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0alF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIHRoaXMgKTtcblx0XHR9ICk7XG5cdH0sXG5cdHRyaWdnZXJIYW5kbGVyOiBmdW5jdGlvbiggdHlwZSwgZGF0YSApIHtcblx0XHR2YXIgZWxlbSA9IHRoaXNbIDAgXTtcblx0XHRpZiAoIGVsZW0gKSB7XG5cdFx0XHRyZXR1cm4galF1ZXJ5LmV2ZW50LnRyaWdnZXIoIHR5cGUsIGRhdGEsIGVsZW0sIHRydWUgKTtcblx0XHR9XG5cdH1cbn0gKTtcblxuXG4vLyBTdXBwb3J0OiBGaXJlZm94IDw9NDRcbi8vIEZpcmVmb3ggZG9lc24ndCBoYXZlIGZvY3VzKGluIHwgb3V0KSBldmVudHNcbi8vIFJlbGF0ZWQgdGlja2V0IC0gaHR0cHM6Ly9idWd6aWxsYS5tb3ppbGxhLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg3Nzg3XG4vL1xuLy8gU3VwcG9ydDogQ2hyb21lIDw9NDggLSA0OSwgU2FmYXJpIDw9OS4wIC0gOS4xXG4vLyBmb2N1cyhpbiB8IG91dCkgZXZlbnRzIGZpcmUgYWZ0ZXIgZm9jdXMgJiBibHVyIGV2ZW50cyxcbi8vIHdoaWNoIGlzIHNwZWMgdmlvbGF0aW9uIC0gaHR0cDovL3d3dy53My5vcmcvVFIvRE9NLUxldmVsLTMtRXZlbnRzLyNldmVudHMtZm9jdXNldmVudC1ldmVudC1vcmRlclxuLy8gUmVsYXRlZCB0aWNrZXQgLSBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD00NDk4NTdcbmlmICggIXN1cHBvcnQuZm9jdXNpbiApIHtcblx0alF1ZXJ5LmVhY2goIHsgZm9jdXM6IFwiZm9jdXNpblwiLCBibHVyOiBcImZvY3Vzb3V0XCIgfSwgZnVuY3Rpb24oIG9yaWcsIGZpeCApIHtcblxuXHRcdC8vIEF0dGFjaCBhIHNpbmdsZSBjYXB0dXJpbmcgaGFuZGxlciBvbiB0aGUgZG9jdW1lbnQgd2hpbGUgc29tZW9uZSB3YW50cyBmb2N1c2luL2ZvY3Vzb3V0XG5cdFx0dmFyIGhhbmRsZXIgPSBmdW5jdGlvbiggZXZlbnQgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQuc2ltdWxhdGUoIGZpeCwgZXZlbnQudGFyZ2V0LCBqUXVlcnkuZXZlbnQuZml4KCBldmVudCApICk7XG5cdFx0fTtcblxuXHRcdGpRdWVyeS5ldmVudC5zcGVjaWFsWyBmaXggXSA9IHtcblx0XHRcdHNldHVwOiBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHQvLyBIYW5kbGU6IHJlZ3VsYXIgbm9kZXMgKHZpYSBgdGhpcy5vd25lckRvY3VtZW50YCksIHdpbmRvd1xuXHRcdFx0XHQvLyAodmlhIGB0aGlzLmRvY3VtZW50YCkgJiBkb2N1bWVudCAodmlhIGB0aGlzYCkuXG5cdFx0XHRcdHZhciBkb2MgPSB0aGlzLm93bmVyRG9jdW1lbnQgfHwgdGhpcy5kb2N1bWVudCB8fCB0aGlzLFxuXHRcdFx0XHRcdGF0dGFjaGVzID0gZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCApO1xuXG5cdFx0XHRcdGlmICggIWF0dGFjaGVzICkge1xuXHRcdFx0XHRcdGRvYy5hZGRFdmVudExpc3RlbmVyKCBvcmlnLCBoYW5kbGVyLCB0cnVlICk7XG5cdFx0XHRcdH1cblx0XHRcdFx0ZGF0YVByaXYuYWNjZXNzKCBkb2MsIGZpeCwgKCBhdHRhY2hlcyB8fCAwICkgKyAxICk7XG5cdFx0XHR9LFxuXHRcdFx0dGVhcmRvd246IGZ1bmN0aW9uKCkge1xuXHRcdFx0XHR2YXIgZG9jID0gdGhpcy5vd25lckRvY3VtZW50IHx8IHRoaXMuZG9jdW1lbnQgfHwgdGhpcyxcblx0XHRcdFx0XHRhdHRhY2hlcyA9IGRhdGFQcml2LmFjY2VzcyggZG9jLCBmaXggKSAtIDE7XG5cblx0XHRcdFx0aWYgKCAhYXR0YWNoZXMgKSB7XG5cdFx0XHRcdFx0ZG9jLnJlbW92ZUV2ZW50TGlzdGVuZXIoIG9yaWcsIGhhbmRsZXIsIHRydWUgKTtcblx0XHRcdFx0XHRkYXRhUHJpdi5yZW1vdmUoIGRvYywgZml4ICk7XG5cblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRkYXRhUHJpdi5hY2Nlc3MoIGRvYywgZml4LCBhdHRhY2hlcyApO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fTtcblx0fSApO1xufVxudmFyIGxvY2F0aW9uID0gd2luZG93LmxvY2F0aW9uO1xuXG52YXIgbm9uY2UgPSB7IGd1aWQ6IERhdGUubm93KCkgfTtcblxudmFyIHJxdWVyeSA9ICggL1xcPy8gKTtcblxuXG5cbi8vIENyb3NzLWJyb3dzZXIgeG1sIHBhcnNpbmdcbmpRdWVyeS5wYXJzZVhNTCA9IGZ1bmN0aW9uKCBkYXRhICkge1xuXHR2YXIgeG1sLCBwYXJzZXJFcnJvckVsZW07XG5cdGlmICggIWRhdGEgfHwgdHlwZW9mIGRhdGEgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblxuXHQvLyBTdXBwb3J0OiBJRSA5IC0gMTEgb25seVxuXHQvLyBJRSB0aHJvd3Mgb24gcGFyc2VGcm9tU3RyaW5nIHdpdGggaW52YWxpZCBpbnB1dC5cblx0dHJ5IHtcblx0XHR4bWwgPSAoIG5ldyB3aW5kb3cuRE9NUGFyc2VyKCkgKS5wYXJzZUZyb21TdHJpbmcoIGRhdGEsIFwidGV4dC94bWxcIiApO1xuXHR9IGNhdGNoICggZSApIHt9XG5cblx0cGFyc2VyRXJyb3JFbGVtID0geG1sICYmIHhtbC5nZXRFbGVtZW50c0J5VGFnTmFtZSggXCJwYXJzZXJlcnJvclwiIClbIDAgXTtcblx0aWYgKCAheG1sIHx8IHBhcnNlckVycm9yRWxlbSApIHtcblx0XHRqUXVlcnkuZXJyb3IoIFwiSW52YWxpZCBYTUw6IFwiICsgKFxuXHRcdFx0cGFyc2VyRXJyb3JFbGVtID9cblx0XHRcdFx0alF1ZXJ5Lm1hcCggcGFyc2VyRXJyb3JFbGVtLmNoaWxkTm9kZXMsIGZ1bmN0aW9uKCBlbCApIHtcblx0XHRcdFx0XHRyZXR1cm4gZWwudGV4dENvbnRlbnQ7XG5cdFx0XHRcdH0gKS5qb2luKCBcIlxcblwiICkgOlxuXHRcdFx0XHRkYXRhXG5cdFx0KSApO1xuXHR9XG5cdHJldHVybiB4bWw7XG59O1xuXG5cbnZhclxuXHRyYnJhY2tldCA9IC9cXFtcXF0kLyxcblx0ckNSTEYgPSAvXFxyP1xcbi9nLFxuXHRyc3VibWl0dGVyVHlwZXMgPSAvXig/OnN1Ym1pdHxidXR0b258aW1hZ2V8cmVzZXR8ZmlsZSkkL2ksXG5cdHJzdWJtaXR0YWJsZSA9IC9eKD86aW5wdXR8c2VsZWN0fHRleHRhcmVhfGtleWdlbikvaTtcblxuZnVuY3Rpb24gYnVpbGRQYXJhbXMoIHByZWZpeCwgb2JqLCB0cmFkaXRpb25hbCwgYWRkICkge1xuXHR2YXIgbmFtZTtcblxuXHRpZiAoIEFycmF5LmlzQXJyYXkoIG9iaiApICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIGFycmF5IGl0ZW0uXG5cdFx0alF1ZXJ5LmVhY2goIG9iaiwgZnVuY3Rpb24oIGksIHYgKSB7XG5cdFx0XHRpZiAoIHRyYWRpdGlvbmFsIHx8IHJicmFja2V0LnRlc3QoIHByZWZpeCApICkge1xuXG5cdFx0XHRcdC8vIFRyZWF0IGVhY2ggYXJyYXkgaXRlbSBhcyBhIHNjYWxhci5cblx0XHRcdFx0YWRkKCBwcmVmaXgsIHYgKTtcblxuXHRcdFx0fSBlbHNlIHtcblxuXHRcdFx0XHQvLyBJdGVtIGlzIG5vbi1zY2FsYXIgKGFycmF5IG9yIG9iamVjdCksIGVuY29kZSBpdHMgbnVtZXJpYyBpbmRleC5cblx0XHRcdFx0YnVpbGRQYXJhbXMoXG5cdFx0XHRcdFx0cHJlZml4ICsgXCJbXCIgKyAoIHR5cGVvZiB2ID09PSBcIm9iamVjdFwiICYmIHYgIT0gbnVsbCA/IGkgOiBcIlwiICkgKyBcIl1cIixcblx0XHRcdFx0XHR2LFxuXHRcdFx0XHRcdHRyYWRpdGlvbmFsLFxuXHRcdFx0XHRcdGFkZFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdH0gKTtcblxuXHR9IGVsc2UgaWYgKCAhdHJhZGl0aW9uYWwgJiYgdG9UeXBlKCBvYmogKSA9PT0gXCJvYmplY3RcIiApIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBvYmplY3QgaXRlbS5cblx0XHRmb3IgKCBuYW1lIGluIG9iaiApIHtcblx0XHRcdGJ1aWxkUGFyYW1zKCBwcmVmaXggKyBcIltcIiArIG5hbWUgKyBcIl1cIiwgb2JqWyBuYW1lIF0sIHRyYWRpdGlvbmFsLCBhZGQgKTtcblx0XHR9XG5cblx0fSBlbHNlIHtcblxuXHRcdC8vIFNlcmlhbGl6ZSBzY2FsYXIgaXRlbS5cblx0XHRhZGQoIHByZWZpeCwgb2JqICk7XG5cdH1cbn1cblxuLy8gU2VyaWFsaXplIGFuIGFycmF5IG9mIGZvcm0gZWxlbWVudHMgb3IgYSBzZXQgb2Zcbi8vIGtleS92YWx1ZXMgaW50byBhIHF1ZXJ5IHN0cmluZ1xualF1ZXJ5LnBhcmFtID0gZnVuY3Rpb24oIGEsIHRyYWRpdGlvbmFsICkge1xuXHR2YXIgcHJlZml4LFxuXHRcdHMgPSBbXSxcblx0XHRhZGQgPSBmdW5jdGlvbigga2V5LCB2YWx1ZU9yRnVuY3Rpb24gKSB7XG5cblx0XHRcdC8vIElmIHZhbHVlIGlzIGEgZnVuY3Rpb24sIGludm9rZSBpdCBhbmQgdXNlIGl0cyByZXR1cm4gdmFsdWVcblx0XHRcdHZhciB2YWx1ZSA9IGlzRnVuY3Rpb24oIHZhbHVlT3JGdW5jdGlvbiApID9cblx0XHRcdFx0dmFsdWVPckZ1bmN0aW9uKCkgOlxuXHRcdFx0XHR2YWx1ZU9yRnVuY3Rpb247XG5cblx0XHRcdHNbIHMubGVuZ3RoIF0gPSBlbmNvZGVVUklDb21wb25lbnQoIGtleSApICsgXCI9XCIgK1xuXHRcdFx0XHRlbmNvZGVVUklDb21wb25lbnQoIHZhbHVlID09IG51bGwgPyBcIlwiIDogdmFsdWUgKTtcblx0XHR9O1xuXG5cdGlmICggYSA9PSBudWxsICkge1xuXHRcdHJldHVybiBcIlwiO1xuXHR9XG5cblx0Ly8gSWYgYW4gYXJyYXkgd2FzIHBhc3NlZCBpbiwgYXNzdW1lIHRoYXQgaXQgaXMgYW4gYXJyYXkgb2YgZm9ybSBlbGVtZW50cy5cblx0aWYgKCBBcnJheS5pc0FycmF5KCBhICkgfHwgKCBhLmpxdWVyeSAmJiAhalF1ZXJ5LmlzUGxhaW5PYmplY3QoIGEgKSApICkge1xuXG5cdFx0Ly8gU2VyaWFsaXplIHRoZSBmb3JtIGVsZW1lbnRzXG5cdFx0alF1ZXJ5LmVhY2goIGEsIGZ1bmN0aW9uKCkge1xuXHRcdFx0YWRkKCB0aGlzLm5hbWUsIHRoaXMudmFsdWUgKTtcblx0XHR9ICk7XG5cblx0fSBlbHNlIHtcblxuXHRcdC8vIElmIHRyYWRpdGlvbmFsLCBlbmNvZGUgdGhlIFwib2xkXCIgd2F5ICh0aGUgd2F5IDEuMy4yIG9yIG9sZGVyXG5cdFx0Ly8gZGlkIGl0KSwgb3RoZXJ3aXNlIGVuY29kZSBwYXJhbXMgcmVjdXJzaXZlbHkuXG5cdFx0Zm9yICggcHJlZml4IGluIGEgKSB7XG5cdFx0XHRidWlsZFBhcmFtcyggcHJlZml4LCBhWyBwcmVmaXggXSwgdHJhZGl0aW9uYWwsIGFkZCApO1xuXHRcdH1cblx0fVxuXG5cdC8vIFJldHVybiB0aGUgcmVzdWx0aW5nIHNlcmlhbGl6YXRpb25cblx0cmV0dXJuIHMuam9pbiggXCImXCIgKTtcbn07XG5cbmpRdWVyeS5mbi5leHRlbmQoIHtcblx0c2VyaWFsaXplOiBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4galF1ZXJ5LnBhcmFtKCB0aGlzLnNlcmlhbGl6ZUFycmF5KCkgKTtcblx0fSxcblx0c2VyaWFsaXplQXJyYXk6IGZ1bmN0aW9uKCkge1xuXHRcdHJldHVybiB0aGlzLm1hcCggZnVuY3Rpb24oKSB7XG5cblx0XHRcdC8vIENhbiBhZGQgcHJvcEhvb2sgZm9yIFwiZWxlbWVudHNcIiB0byBmaWx0ZXIgb3IgYWRkIGZvcm0gZWxlbWVudHNcblx0XHRcdHZhciBlbGVtZW50cyA9IGpRdWVyeS5wcm9wKCB0aGlzLCBcImVsZW1lbnRzXCIgKTtcblx0XHRcdHJldHVybiBlbGVtZW50cyA/IGpRdWVyeS5tYWtlQXJyYXkoIGVsZW1lbnRzICkgOiB0aGlzO1xuXHRcdH0gKS5maWx0ZXIoIGZ1bmN0aW9uKCkge1xuXHRcdFx0dmFyIHR5cGUgPSB0aGlzLnR5cGU7XG5cblx0XHRcdC8vIFVzZSAuaXMoIFwiOmRpc2FibGVkXCIgKSBzbyB0aGF0IGZpZWxkc2V0W2Rpc2FibGVkXSB3b3Jrc1xuXHRcdFx0cmV0dXJuIHRoaXMubmFtZSAmJiAhalF1ZXJ5KCB0aGlzICkuaXMoIFwiOmRpc2FibGVkXCIgKSAmJlxuXHRcdFx0XHRyc3VibWl0dGFibGUudGVzdCggdGhpcy5ub2RlTmFtZSApICYmICFyc3VibWl0dGVyVHlwZXMudGVzdCggdHlwZSApICYmXG5cdFx0XHRcdCggdGhpcy5jaGVja2VkIHx8ICFyY2hlY2thYmxlVHlwZS50ZXN0KCB0eXBlICkgKTtcblx0XHR9ICkubWFwKCBmdW5jdGlvbiggX2ksIGVsZW0gKSB7XG5cdFx0XHR2YXIgdmFsID0galF1ZXJ5KCB0aGlzICkudmFsKCk7XG5cblx0XHRcdGlmICggdmFsID09IG51bGwgKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIEFycmF5LmlzQXJyYXkoIHZhbCApICkge1xuXHRcdFx0XHRyZXR1cm4galF1ZXJ5Lm1hcCggdmFsLCBmdW5jdGlvbiggdmFsICkge1xuXHRcdFx0XHRcdHJldHVybiB7IG5hbWU6IGVsZW0ubmFtZSwgdmFsdWU6IHZhbC5yZXBsYWNlKCByQ1JMRiwgXCJcXHJcXG5cIiApIH07XG5cdFx0XHRcdH0gKTtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIHsgbmFtZTogZWxlbS5uYW1lLCB2YWx1ZTogdmFsLnJlcGxhY2UoIHJDUkxGLCBcIlxcclxcblwiICkgfTtcblx0XHR9ICkuZ2V0KCk7XG5cdH1cbn0gKTtcblxuXG52YXJcblx0cjIwID0gLyUyMC9nLFxuXHRyaGFzaCA9IC8jLiokLyxcblx0cmFudGlDYWNoZSA9IC8oWz8mXSlfPVteJl0qLyxcblx0cmhlYWRlcnMgPSAvXiguKj8pOlsgXFx0XSooW15cXHJcXG5dKikkL21nLFxuXG5cdC8vICM3NjUzLCAjODEyNSwgIzgxNTI6IGxvY2FsIHByb3RvY29sIGRldGVjdGlvblxuXHRybG9jYWxQcm90b2NvbCA9IC9eKD86YWJvdXR8YXBwfGFwcC1zdG9yYWdlfC4rLWV4dGVuc2lvbnxmaWxlfHJlc3x3aWRnZXQpOiQvLFxuXHRybm9Db250ZW50ID0gL14oPzpHRVR8SEVBRCkkLyxcblx0cnByb3RvY29sID0gL15cXC9cXC8vLFxuXG5cdC8qIFByZWZpbHRlcnNcblx0ICogMSkgVGhleSBhcmUgdXNlZnVsIHRvIGludHJvZHVjZSBjdXN0b20gZGF0YVR5cGVzIChzZWUgYWpheC9qc29ucC5qcyBmb3IgYW4gZXhhbXBsZSlcblx0ICogMikgVGhlc2UgYXJlIGNhbGxlZDpcblx0ICogICAgLSBCRUZPUkUgYXNraW5nIGZvciBhIHRyYW5zcG9ydFxuXHQgKiAgICAtIEFGVEVSIHBhcmFtIHNlcmlhbGl6YXRpb24gKHMuZGF0YSBpcyBhIHN0cmluZyBpZiBzLnByb2Nlc3NEYXRhIGlzIHRydWUpXG5cdCAqIDMpIGtleSBpcyB0aGUgZGF0YVR5cGVcblx0ICogNCkgdGhlIGNhdGNoYWxsIHN5bWJvbCBcIipcIiBjYW4gYmUgdXNlZFxuXHQgKiA1KSBleGVjdXRpb24gd2lsbCBzdGFydCB3aXRoIHRyYW5zcG9ydCBkYXRhVHlwZSBhbmQgVEhFTiBjb250aW51ZSBkb3duIHRvIFwiKlwiIGlmIG5lZWRlZFxuXHQgKi9cblx0cHJlZmlsdGVycyA9IHt9LFxuXG5cdC8qIFRyYW5zcG9ydHMgYmluZGluZ3Ncblx0ICogMSkga2V5IGlzIHRoZSBkYXRhVHlwZVxuXHQgKiAyKSB0aGUgY2F0Y2hhbGwgc3ltYm9sIFwiKlwiIGNhbiBiZSB1c2VkXG5cdCAqIDMpIHNlbGVjdGlvbiB3aWxsIHN0YXJ0IHdpdGggdHJhbnNwb3J0IGRhdGFUeXBlIGFuZCBUSEVOIGdvIHRvIFwiKlwiIGlmIG5lZWRlZFxuXHQgKi9cblx0dHJhbnNwb3J0cyA9IHt9LFxuXG5cdC8vIEF2b2lkIGNvbW1lbnQtcHJvbG9nIGNoYXIgc2VxdWVuY2UgKCMxMDA5OCk7IG11c3QgYXBwZWFzZSBsaW50IGFuZCBldmFkZSBjb21wcmVzc2lvblxuXHRhbGxUeXBlcyA9IFwiKi9cIi5jb25jYXQoIFwiKlwiICksXG5cblx0Ly8gQW5jaG9yIHRhZyBmb3IgcGFyc2luZyB0aGUgZG9jdW1lbnQgb3JpZ2luXG5cdG9yaWdpbkFuY2hvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIFwiYVwiICk7XG5cbm9yaWdpbkFuY2hvci5ocmVmID0gbG9jYXRpb24uaHJlZjtcblxuLy8gQmFzZSBcImNvbnN0cnVjdG9yXCIgZm9yIGpRdWVyeS5hamF4UHJlZmlsdGVyIGFuZCBqUXVlcnkuYWpheFRyYW5zcG9ydFxuZnVuY3Rpb24gYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBzdHJ1Y3R1cmUgKSB7XG5cblx0Ly8gZGF0YVR5cGVFeHByZXNzaW9uIGlzIG9wdGlvbmFsIGFuZCBkZWZhdWx0cyB0byBcIipcIlxuXHRyZXR1cm4gZnVuY3Rpb24oIGRhdGFUeXBlRXhwcmVzc2lvbiwgZnVuYyApIHtcblxuXHRcdGlmICggdHlwZW9mIGRhdGFUeXBlRXhwcmVzc2lvbiAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdGZ1bmMgPSBkYXRhVHlwZUV4cHJlc3Npb247XG5cdFx0XHRkYXRhVHlwZUV4cHJlc3Npb24gPSBcIipcIjtcblx0XHR9XG5cblx0XHR2YXIgZGF0YVR5cGUsXG5cdFx0XHRpID0gMCxcblx0XHRcdGRhdGFUeXBlcyA9IGRhdGFUeXBlRXhwcmVzc2lvbi50b0xvd2VyQ2FzZSgpLm1hdGNoKCBybm90aHRtbHdoaXRlICkgfHwgW107XG5cblx0XHRpZiAoIGlzRnVuY3Rpb24oIGZ1bmMgKSApIHtcblxuXHRcdFx0Ly8gRm9yIGVhY2ggZGF0YVR5cGUgaW4gdGhlIGRhdGFUeXBlRXhwcmVzc2lvblxuXHRcdFx0d2hpbGUgKCAoIGRhdGFUeXBlID0gZGF0YVR5cGVzWyBpKysgXSApICkge1xuXG5cdFx0XHRcdC8vIFByZXBlbmQgaWYgcmVxdWVzdGVkXG5cdFx0XHRcdGlmICggZGF0YVR5cGVbIDAgXSA9PT0gXCIrXCIgKSB7XG5cdFx0XHRcdFx0ZGF0YVR5cGUgPSBkYXRhVHlwZS5zbGljZSggMSApIHx8IFwiKlwiO1xuXHRcdFx0XHRcdCggc3RydWN0dXJlWyBkYXRhVHlwZSBdID0gc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdICkudW5zaGlmdCggZnVuYyApO1xuXG5cdFx0XHRcdC8vIE90aGVyd2lzZSBhcHBlbmRcblx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHQoIHN0cnVjdHVyZVsgZGF0YVR5cGUgXSA9IHN0cnVjdHVyZVsgZGF0YVR5cGUgXSB8fCBbXSApLnB1c2goIGZ1bmMgKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fTtcbn1cblxuLy8gQmFzZSBpbnNwZWN0aW9uIGZ1bmN0aW9uIGZvciBwcmVmaWx0ZXJzIGFuZCB0cmFuc3BvcnRzXG5mdW5jdGlvbiBpbnNwZWN0UHJlZmlsdGVyc09yVHJhbnNwb3J0cyggc3RydWN0dXJlLCBvcHRpb25zLCBvcmlnaW5hbE9wdGlvbnMsIGpxWEhSICkge1xuXG5cdHZhciBpbnNwZWN0ZWQgPSB7fSxcblx0XHRzZWVraW5nVHJhbnNwb3J0ID0gKCBzdHJ1Y3R1cmUgPT09IHRyYW5zcG9ydHMgKTtcblxuXHRmdW5jdGlvbiBpbnNwZWN0KCBkYXRhVHlwZSApIHtcblx0XHR2YXIgc2VsZWN0ZWQ7XG5cdFx0aW5zcGVjdGVkWyBkYXRhVHlwZSBdID0gdHJ1ZTtcblx0XHRqUXVlcnkuZWFjaCggc3RydWN0dXJlWyBkYXRhVHlwZSBdIHx8IFtdLCBmdW5jdGlvbiggXywgcHJlZmlsdGVyT3JGYWN0b3J5ICkge1xuXHRcdFx0dmFyIGRhdGFUeXBlT3JUcmFuc3BvcnQgPSBwcmVmaWx0ZXJPckZhY3RvcnkoIG9wdGlvbnMsIG9yaWdpbmFsT3B0aW9ucywganFYSFIgKTtcblx0XHRcdGlmICggdHlwZW9mIGRhdGFUeXBlT3JUcmFuc3BvcnQgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0IXNlZWtpbmdUcmFuc3BvcnQgJiYgIWluc3BlY3RlZFsgZGF0YVR5cGVPclRyYW5zcG9ydCBdICkge1xuXG5cdFx0XHRcdG9wdGlvbnMuZGF0YVR5cGVzLnVuc2hpZnQoIGRhdGFUeXBlT3JUcmFuc3BvcnQgKTtcblx0XHRcdFx0aW5zcGVjdCggZGF0YVR5cGVPclRyYW5zcG9ydCApO1xuXHRcdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0XHR9IGVsc2UgaWYgKCBzZWVraW5nVHJhbnNwb3J0ICkge1xuXHRcdFx0XHRyZXR1cm4gISggc2VsZWN0ZWQgPSBkYXRhVHlwZU9yVHJhbnNwb3J0ICk7XG5cdFx0XHR9XG5cdFx0fSApO1xuXHRcdHJldHVybiBzZWxlY3RlZDtcblx0fVxuXG5cdHJldHVybiBpbnNwZWN0KCBvcHRpb25zLmRhdGFUeXBlc1sgMCBdICkgfHwgIWluc3BlY3RlZFsgXCIqXCIgXSAmJiBpbnNwZWN0KCBcIipcIiApO1xufVxuXG4vLyBBIHNwZWNpYWwgZXh0ZW5kIGZvciBhamF4IG9wdGlvbnNcbi8vIHRoYXQgdGFrZXMgXCJmbGF0XCIgb3B0aW9ucyAobm90IHRvIGJlIGRlZXAgZXh0ZW5kZWQpXG4vLyBGaXhlcyAjOTg4N1xuZnVuY3Rpb24gYWpheEV4dGVuZCggdGFyZ2V0LCBzcmMgKSB7XG5cdHZhciBrZXksIGRlZXAsXG5cdFx0ZmxhdE9wdGlvbnMgPSBqUXVlcnkuYWpheFNldHRpbmdzLmZsYXRPcHRpb25zIHx8IHt9O1xuXG5cdGZvciAoIGtleSBpbiBzcmMgKSB7XG5cdFx0aWYgKCBzcmNbIGtleSBdICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHQoIGZsYXRPcHRpb25zWyBrZXkgXSA/IHRhcmdldCA6ICggZGVlcCB8fCAoIGRlZXAgPSB7fSApICkgKVsga2V5IF0gPSBzcmNbIGtleSBdO1xuXHRcdH1cblx0fVxuXHRpZiAoIGRlZXAgKSB7XG5cdFx0alF1ZXJ5LmV4dGVuZCggdHJ1ZSwgdGFyZ2V0LCBkZWVwICk7XG5cdH1cblxuXHRyZXR1cm4gdGFyZ2V0O1xufVxuXG4vKiBIYW5kbGVzIHJlc3BvbnNlcyB0byBhbiBhamF4IHJlcXVlc3Q6XG4gKiAtIGZpbmRzIHRoZSByaWdodCBkYXRhVHlwZSAobWVkaWF0ZXMgYmV0d2VlbiBjb250ZW50LXR5cGUgYW5kIGV4cGVjdGVkIGRhdGFUeXBlKVxuICogLSByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIHJlc3BvbnNlXG4gKi9cbmZ1bmN0aW9uIGFqYXhIYW5kbGVSZXNwb25zZXMoIHMsIGpxWEhSLCByZXNwb25zZXMgKSB7XG5cblx0dmFyIGN0LCB0eXBlLCBmaW5hbERhdGFUeXBlLCBmaXJzdERhdGFUeXBlLFxuXHRcdGNvbnRlbnRzID0gcy5jb250ZW50cyxcblx0XHRkYXRhVHlwZXMgPSBzLmRhdGFUeXBlcztcblxuXHQvLyBSZW1vdmUgYXV0byBkYXRhVHlwZSBhbmQgZ2V0IGNvbnRlbnQtdHlwZSBpbiB0aGUgcHJvY2Vzc1xuXHR3aGlsZSAoIGRhdGFUeXBlc1sgMCBdID09PSBcIipcIiApIHtcblx0XHRkYXRhVHlwZXMuc2hpZnQoKTtcblx0XHRpZiAoIGN0ID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRjdCA9IHMubWltZVR5cGUgfHwganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiQ29udGVudC1UeXBlXCIgKTtcblx0XHR9XG5cdH1cblxuXHQvLyBDaGVjayBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBrbm93biBjb250ZW50LXR5cGVcblx0aWYgKCBjdCApIHtcblx0XHRmb3IgKCB0eXBlIGluIGNvbnRlbnRzICkge1xuXHRcdFx0aWYgKCBjb250ZW50c1sgdHlwZSBdICYmIGNvbnRlbnRzWyB0eXBlIF0udGVzdCggY3QgKSApIHtcblx0XHRcdFx0ZGF0YVR5cGVzLnVuc2hpZnQoIHR5cGUgKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0Ly8gQ2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgYSByZXNwb25zZSBmb3IgdGhlIGV4cGVjdGVkIGRhdGFUeXBlXG5cdGlmICggZGF0YVR5cGVzWyAwIF0gaW4gcmVzcG9uc2VzICkge1xuXHRcdGZpbmFsRGF0YVR5cGUgPSBkYXRhVHlwZXNbIDAgXTtcblx0fSBlbHNlIHtcblxuXHRcdC8vIFRyeSBjb252ZXJ0aWJsZSBkYXRhVHlwZXNcblx0XHRmb3IgKCB0eXBlIGluIHJlc3BvbnNlcyApIHtcblx0XHRcdGlmICggIWRhdGFUeXBlc1sgMCBdIHx8IHMuY29udmVydGVyc1sgdHlwZSArIFwiIFwiICsgZGF0YVR5cGVzWyAwIF0gXSApIHtcblx0XHRcdFx0ZmluYWxEYXRhVHlwZSA9IHR5cGU7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCAhZmlyc3REYXRhVHlwZSApIHtcblx0XHRcdFx0Zmlyc3REYXRhVHlwZSA9IHR5cGU7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gT3IganVzdCB1c2UgZmlyc3Qgb25lXG5cdFx0ZmluYWxEYXRhVHlwZSA9IGZpbmFsRGF0YVR5cGUgfHwgZmlyc3REYXRhVHlwZTtcblx0fVxuXG5cdC8vIElmIHdlIGZvdW5kIGEgZGF0YVR5cGVcblx0Ly8gV2UgYWRkIHRoZSBkYXRhVHlwZSB0byB0aGUgbGlzdCBpZiBuZWVkZWRcblx0Ly8gYW5kIHJldHVybiB0aGUgY29ycmVzcG9uZGluZyByZXNwb25zZVxuXHRpZiAoIGZpbmFsRGF0YVR5cGUgKSB7XG5cdFx0aWYgKCBmaW5hbERhdGFUeXBlICE9PSBkYXRhVHlwZXNbIDAgXSApIHtcblx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCBmaW5hbERhdGFUeXBlICk7XG5cdFx0fVxuXHRcdHJldHVybiByZXNwb25zZXNbIGZpbmFsRGF0YVR5cGUgXTtcblx0fVxufVxuXG4vKiBDaGFpbiBjb252ZXJzaW9ucyBnaXZlbiB0aGUgcmVxdWVzdCBhbmQgdGhlIG9yaWdpbmFsIHJlc3BvbnNlXG4gKiBBbHNvIHNldHMgdGhlIHJlc3BvbnNlWFhYIGZpZWxkcyBvbiB0aGUganFYSFIgaW5zdGFuY2VcbiAqL1xuZnVuY3Rpb24gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlLCBqcVhIUiwgaXNTdWNjZXNzICkge1xuXHR2YXIgY29udjIsIGN1cnJlbnQsIGNvbnYsIHRtcCwgcHJldixcblx0XHRjb252ZXJ0ZXJzID0ge30sXG5cblx0XHQvLyBXb3JrIHdpdGggYSBjb3B5IG9mIGRhdGFUeXBlcyBpbiBjYXNlIHdlIG5lZWQgdG8gbW9kaWZ5IGl0IGZvciBjb252ZXJzaW9uXG5cdFx0ZGF0YVR5cGVzID0gcy5kYXRhVHlwZXMuc2xpY2UoKTtcblxuXHQvLyBDcmVhdGUgY29udmVydGVycyBtYXAgd2l0aCBsb3dlcmNhc2VkIGtleXNcblx0aWYgKCBkYXRhVHlwZXNbIDEgXSApIHtcblx0XHRmb3IgKCBjb252IGluIHMuY29udmVydGVycyApIHtcblx0XHRcdGNvbnZlcnRlcnNbIGNvbnYudG9Mb3dlckNhc2UoKSBdID0gcy5jb252ZXJ0ZXJzWyBjb252IF07XG5cdFx0fVxuXHR9XG5cblx0Y3VycmVudCA9IGRhdGFUeXBlcy5zaGlmdCgpO1xuXG5cdC8vIENvbnZlcnQgdG8gZWFjaCBzZXF1ZW50aWFsIGRhdGFUeXBlXG5cdHdoaWxlICggY3VycmVudCApIHtcblxuXHRcdGlmICggcy5yZXNwb25zZUZpZWxkc1sgY3VycmVudCBdICkge1xuXHRcdFx0anFYSFJbIHMucmVzcG9uc2VGaWVsZHNbIGN1cnJlbnQgXSBdID0gcmVzcG9uc2U7XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgdGhlIGRhdGFGaWx0ZXIgaWYgcHJvdmlkZWRcblx0XHRpZiAoICFwcmV2ICYmIGlzU3VjY2VzcyAmJiBzLmRhdGFGaWx0ZXIgKSB7XG5cdFx0XHRyZXNwb25zZSA9IHMuZGF0YUZpbHRlciggcmVzcG9uc2UsIHMuZGF0YVR5cGUgKTtcblx0XHR9XG5cblx0XHRwcmV2ID0gY3VycmVudDtcblx0XHRjdXJyZW50ID0gZGF0YVR5cGVzLnNoaWZ0KCk7XG5cblx0XHRpZiAoIGN1cnJlbnQgKSB7XG5cblx0XHRcdC8vIFRoZXJlJ3Mgb25seSB3b3JrIHRvIGRvIGlmIGN1cnJlbnQgZGF0YVR5cGUgaXMgbm9uLWF1dG9cblx0XHRcdGlmICggY3VycmVudCA9PT0gXCIqXCIgKSB7XG5cblx0XHRcdFx0Y3VycmVudCA9IHByZXY7XG5cblx0XHRcdC8vIENvbnZlcnQgcmVzcG9uc2UgaWYgcHJldiBkYXRhVHlwZSBpcyBub24tYXV0byBhbmQgZGlmZmVycyBmcm9tIGN1cnJlbnRcblx0XHRcdH0gZWxzZSBpZiAoIHByZXYgIT09IFwiKlwiICYmIHByZXYgIT09IGN1cnJlbnQgKSB7XG5cblx0XHRcdFx0Ly8gU2VlayBhIGRpcmVjdCBjb252ZXJ0ZXJcblx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIHByZXYgKyBcIiBcIiArIGN1cnJlbnQgXSB8fCBjb252ZXJ0ZXJzWyBcIiogXCIgKyBjdXJyZW50IF07XG5cblx0XHRcdFx0Ly8gSWYgbm9uZSBmb3VuZCwgc2VlayBhIHBhaXJcblx0XHRcdFx0aWYgKCAhY29udiApIHtcblx0XHRcdFx0XHRmb3IgKCBjb252MiBpbiBjb252ZXJ0ZXJzICkge1xuXG5cdFx0XHRcdFx0XHQvLyBJZiBjb252MiBvdXRwdXRzIGN1cnJlbnRcblx0XHRcdFx0XHRcdHRtcCA9IGNvbnYyLnNwbGl0KCBcIiBcIiApO1xuXHRcdFx0XHRcdFx0aWYgKCB0bXBbIDEgXSA9PT0gY3VycmVudCApIHtcblxuXHRcdFx0XHRcdFx0XHQvLyBJZiBwcmV2IGNhbiBiZSBjb252ZXJ0ZWQgdG8gYWNjZXB0ZWQgaW5wdXRcblx0XHRcdFx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIHByZXYgKyBcIiBcIiArIHRtcFsgMCBdIF0gfHxcblx0XHRcdFx0XHRcdFx0XHRjb252ZXJ0ZXJzWyBcIiogXCIgKyB0bXBbIDAgXSBdO1xuXHRcdFx0XHRcdFx0XHRpZiAoIGNvbnYgKSB7XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBDb25kZW5zZSBlcXVpdmFsZW5jZSBjb252ZXJ0ZXJzXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCBjb252ID09PSB0cnVlICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29udiA9IGNvbnZlcnRlcnNbIGNvbnYyIF07XG5cblx0XHRcdFx0XHRcdFx0XHQvLyBPdGhlcndpc2UsIGluc2VydCB0aGUgaW50ZXJtZWRpYXRlIGRhdGFUeXBlXG5cdFx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggY29udmVydGVyc1sgY29udjIgXSAhPT0gdHJ1ZSApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGN1cnJlbnQgPSB0bXBbIDAgXTtcblx0XHRcdFx0XHRcdFx0XHRcdGRhdGFUeXBlcy51bnNoaWZ0KCB0bXBbIDEgXSApO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEFwcGx5IGNvbnZlcnRlciAoaWYgbm90IGFuIGVxdWl2YWxlbmNlKVxuXHRcdFx0XHRpZiAoIGNvbnYgIT09IHRydWUgKSB7XG5cblx0XHRcdFx0XHQvLyBVbmxlc3MgZXJyb3JzIGFyZSBhbGxvd2VkIHRvIGJ1YmJsZSwgY2F0Y2ggYW5kIHJldHVybiB0aGVtXG5cdFx0XHRcdFx0aWYgKCBjb252ICYmIHMudGhyb3dzICkge1xuXHRcdFx0XHRcdFx0cmVzcG9uc2UgPSBjb252KCByZXNwb25zZSApO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHR0cnkge1xuXHRcdFx0XHRcdFx0XHRyZXNwb25zZSA9IGNvbnYoIHJlc3BvbnNlICk7XG5cdFx0XHRcdFx0XHR9IGNhdGNoICggZSApIHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHtcblx0XHRcdFx0XHRcdFx0XHRzdGF0ZTogXCJwYXJzZXJlcnJvclwiLFxuXHRcdFx0XHRcdFx0XHRcdGVycm9yOiBjb252ID8gZSA6IFwiTm8gY29udmVyc2lvbiBmcm9tIFwiICsgcHJldiArIFwiIHRvIFwiICsgY3VycmVudFxuXHRcdFx0XHRcdFx0XHR9O1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH1cblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0fVxuXG5cdHJldHVybiB7IHN0YXRlOiBcInN1Y2Nlc3NcIiwgZGF0YTogcmVzcG9uc2UgfTtcbn1cblxualF1ZXJ5LmV4dGVuZCgge1xuXG5cdC8vIENvdW50ZXIgZm9yIGhvbGRpbmcgdGhlIG51bWJlciBvZiBhY3RpdmUgcXVlcmllc1xuXHRhY3RpdmU6IDAsXG5cblx0Ly8gTGFzdC1Nb2RpZmllZCBoZWFkZXIgY2FjaGUgZm9yIG5leHQgcmVxdWVzdFxuXHRsYXN0TW9kaWZpZWQ6IHt9LFxuXHRldGFnOiB7fSxcblxuXHRhamF4U2V0dGluZ3M6IHtcblx0XHR1cmw6IGxvY2F0aW9uLmhyZWYsXG5cdFx0dHlwZTogXCJHRVRcIixcblx0XHRpc0xvY2FsOiBybG9jYWxQcm90b2NvbC50ZXN0KCBsb2NhdGlvbi5wcm90b2NvbCApLFxuXHRcdGdsb2JhbDogdHJ1ZSxcblx0XHRwcm9jZXNzRGF0YTogdHJ1ZSxcblx0XHRhc3luYzogdHJ1ZSxcblx0XHRjb250ZW50VHlwZTogXCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7IGNoYXJzZXQ9VVRGLThcIixcblxuXHRcdC8qXG5cdFx0dGltZW91dDogMCxcblx0XHRkYXRhOiBudWxsLFxuXHRcdGRhdGFUeXBlOiBudWxsLFxuXHRcdHVzZXJuYW1lOiBudWxsLFxuXHRcdHBhc3N3b3JkOiBudWxsLFxuXHRcdGNhY2hlOiBudWxsLFxuXHRcdHRocm93czogZmFsc2UsXG5cdFx0dHJhZGl0aW9uYWw6IGZhbHNlLFxuXHRcdGhlYWRlcnM6IHt9LFxuXHRcdCovXG5cblx0XHRhY2NlcHRzOiB7XG5cdFx0XHRcIipcIjogYWxsVHlwZXMsXG5cdFx0XHR0ZXh0OiBcInRleHQvcGxhaW5cIixcblx0XHRcdGh0bWw6IFwidGV4dC9odG1sXCIsXG5cdFx0XHR4bWw6IFwiYXBwbGljYXRpb24veG1sLCB0ZXh0L3htbFwiLFxuXHRcdFx0anNvbjogXCJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L2phdmFzY3JpcHRcIlxuXHRcdH0sXG5cblx0XHRjb250ZW50czoge1xuXHRcdFx0eG1sOiAvXFxieG1sXFxiLyxcblx0XHRcdGh0bWw6IC9cXGJodG1sLyxcblx0XHRcdGpzb246IC9cXGJqc29uXFxiL1xuXHRcdH0sXG5cblx0XHRyZXNwb25zZUZpZWxkczoge1xuXHRcdFx0eG1sOiBcInJlc3BvbnNlWE1MXCIsXG5cdFx0XHR0ZXh0OiBcInJlc3BvbnNlVGV4dFwiLFxuXHRcdFx0anNvbjogXCJyZXNwb25zZUpTT05cIlxuXHRcdH0sXG5cblx0XHQvLyBEYXRhIGNvbnZlcnRlcnNcblx0XHQvLyBLZXlzIHNlcGFyYXRlIHNvdXJjZSAob3IgY2F0Y2hhbGwgXCIqXCIpIGFuZCBkZXN0aW5hdGlvbiB0eXBlcyB3aXRoIGEgc2luZ2xlIHNwYWNlXG5cdFx0Y29udmVydGVyczoge1xuXG5cdFx0XHQvLyBDb252ZXJ0IGFueXRoaW5nIHRvIHRleHRcblx0XHRcdFwiKiB0ZXh0XCI6IFN0cmluZyxcblxuXHRcdFx0Ly8gVGV4dCB0byBodG1sICh0cnVlID0gbm8gdHJhbnNmb3JtYXRpb24pXG5cdFx0XHRcInRleHQgaHRtbFwiOiB0cnVlLFxuXG5cdFx0XHQvLyBFdmFsdWF0ZSB0ZXh0IGFzIGEganNvbiBleHByZXNzaW9uXG5cdFx0XHRcInRleHQganNvblwiOiBKU09OLnBhcnNlLFxuXG5cdFx0XHQvLyBQYXJzZSB0ZXh0IGFzIHhtbFxuXHRcdFx0XCJ0ZXh0IHhtbFwiOiBqUXVlcnkucGFyc2VYTUxcblx0XHR9LFxuXG5cdFx0Ly8gRm9yIG9wdGlvbnMgdGhhdCBzaG91bGRuJ3QgYmUgZGVlcCBleHRlbmRlZDpcblx0XHQvLyB5b3UgY2FuIGFkZCB5b3VyIG93biBjdXN0b20gb3B0aW9ucyBoZXJlIGlmXG5cdFx0Ly8gYW5kIHdoZW4geW91IGNyZWF0ZSBvbmUgdGhhdCBzaG91bGRuJ3QgYmVcblx0XHQvLyBkZWVwIGV4dGVuZGVkIChzZWUgYWpheEV4dGVuZClcblx0XHRmbGF0T3B0aW9uczoge1xuXHRcdFx0dXJsOiB0cnVlLFxuXHRcdFx0Y29udGV4dDogdHJ1ZVxuXHRcdH1cblx0fSxcblxuXHQvLyBDcmVhdGVzIGEgZnVsbCBmbGVkZ2VkIHNldHRpbmdzIG9iamVjdCBpbnRvIHRhcmdldFxuXHQvLyB3aXRoIGJvdGggYWpheFNldHRpbmdzIGFuZCBzZXR0aW5ncyBmaWVsZHMuXG5cdC8vIElmIHRhcmdldCBpcyBvbWl0dGVkLCB3cml0ZXMgaW50byBhamF4U2V0dGluZ3MuXG5cdGFqYXhTZXR1cDogZnVuY3Rpb24oIHRhcmdldCwgc2V0dGluZ3MgKSB7XG5cdFx0cmV0dXJuIHNldHRpbmdzID9cblxuXHRcdFx0Ly8gQnVpbGRpbmcgYSBzZXR0aW5ncyBvYmplY3Rcblx0XHRcdGFqYXhFeHRlbmQoIGFqYXhFeHRlbmQoIHRhcmdldCwgalF1ZXJ5LmFqYXhTZXR0aW5ncyApLCBzZXR0aW5ncyApIDpcblxuXHRcdFx0Ly8gRXh0ZW5kaW5nIGFqYXhTZXR0aW5nc1xuXHRcdFx0YWpheEV4dGVuZCggalF1ZXJ5LmFqYXhTZXR0aW5ncywgdGFyZ2V0ICk7XG5cdH0sXG5cblx0YWpheFByZWZpbHRlcjogYWRkVG9QcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzICksXG5cdGFqYXhUcmFuc3BvcnQ6IGFkZFRvUHJlZmlsdGVyc09yVHJhbnNwb3J0cyggdHJhbnNwb3J0cyApLFxuXG5cdC8vIE1haW4gbWV0aG9kXG5cdGFqYXg6IGZ1bmN0aW9uKCB1cmwsIG9wdGlvbnMgKSB7XG5cblx0XHQvLyBJZiB1cmwgaXMgYW4gb2JqZWN0LCBzaW11bGF0ZSBwcmUtMS41IHNpZ25hdHVyZVxuXHRcdGlmICggdHlwZW9mIHVybCA9PT0gXCJvYmplY3RcIiApIHtcblx0XHRcdG9wdGlvbnMgPSB1cmw7XG5cdFx0XHR1cmwgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gRm9yY2Ugb3B0aW9ucyB0byBiZSBhbiBvYmplY3Rcblx0XHRvcHRpb25zID0gb3B0aW9ucyB8fCB7fTtcblxuXHRcdHZhciB0cmFuc3BvcnQsXG5cblx0XHRcdC8vIFVSTCB3aXRob3V0IGFudGktY2FjaGUgcGFyYW1cblx0XHRcdGNhY2hlVVJMLFxuXG5cdFx0XHQvLyBSZXNwb25zZSBoZWFkZXJzXG5cdFx0XHRyZXNwb25zZUhlYWRlcnNTdHJpbmcsXG5cdFx0XHRyZXNwb25zZUhlYWRlcnMsXG5cblx0XHRcdC8vIHRpbWVvdXQgaGFuZGxlXG5cdFx0XHR0aW1lb3V0VGltZXIsXG5cblx0XHRcdC8vIFVybCBjbGVhbnVwIHZhclxuXHRcdFx0dXJsQW5jaG9yLFxuXG5cdFx0XHQvLyBSZXF1ZXN0IHN0YXRlIChiZWNvbWVzIGZhbHNlIHVwb24gc2VuZCBhbmQgdHJ1ZSB1cG9uIGNvbXBsZXRpb24pXG5cdFx0XHRjb21wbGV0ZWQsXG5cblx0XHRcdC8vIFRvIGtub3cgaWYgZ2xvYmFsIGV2ZW50cyBhcmUgdG8gYmUgZGlzcGF0Y2hlZFxuXHRcdFx0ZmlyZUdsb2JhbHMsXG5cblx0XHRcdC8vIExvb3AgdmFyaWFibGVcblx0XHRcdGksXG5cblx0XHRcdC8vIHVuY2FjaGVkIHBhcnQgb2YgdGhlIHVybFxuXHRcdFx0dW5jYWNoZWQsXG5cblx0XHRcdC8vIENyZWF0ZSB0aGUgZmluYWwgb3B0aW9ucyBvYmplY3Rcblx0XHRcdHMgPSBqUXVlcnkuYWpheFNldHVwKCB7fSwgb3B0aW9ucyApLFxuXG5cdFx0XHQvLyBDYWxsYmFja3MgY29udGV4dFxuXHRcdFx0Y2FsbGJhY2tDb250ZXh0ID0gcy5jb250ZXh0IHx8IHMsXG5cblx0XHRcdC8vIENvbnRleHQgZm9yIGdsb2JhbCBldmVudHMgaXMgY2FsbGJhY2tDb250ZXh0IGlmIGl0IGlzIGEgRE9NIG5vZGUgb3IgalF1ZXJ5IGNvbGxlY3Rpb25cblx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dCA9IHMuY29udGV4dCAmJlxuXHRcdFx0XHQoIGNhbGxiYWNrQ29udGV4dC5ub2RlVHlwZSB8fCBjYWxsYmFja0NvbnRleHQuanF1ZXJ5ICkgP1xuXHRcdFx0XHRqUXVlcnkoIGNhbGxiYWNrQ29udGV4dCApIDpcblx0XHRcdFx0alF1ZXJ5LmV2ZW50LFxuXG5cdFx0XHQvLyBEZWZlcnJlZHNcblx0XHRcdGRlZmVycmVkID0galF1ZXJ5LkRlZmVycmVkKCksXG5cdFx0XHRjb21wbGV0ZURlZmVycmVkID0galF1ZXJ5LkNhbGxiYWNrcyggXCJvbmNlIG1lbW9yeVwiICksXG5cblx0XHRcdC8vIFN0YXR1cy1kZXBlbmRlbnQgY2FsbGJhY2tzXG5cdFx0XHRzdGF0dXNDb2RlID0gcy5zdGF0dXNDb2RlIHx8IHt9LFxuXG5cdFx0XHQvLyBIZWFkZXJzICh0aGV5IGFyZSBzZW50IGFsbCBhdCBvbmNlKVxuXHRcdFx0cmVxdWVzdEhlYWRlcnMgPSB7fSxcblx0XHRcdHJlcXVlc3RIZWFkZXJzTmFtZXMgPSB7fSxcblxuXHRcdFx0Ly8gRGVmYXVsdCBhYm9ydCBtZXNzYWdlXG5cdFx0XHRzdHJBYm9ydCA9IFwiY2FuY2VsZWRcIixcblxuXHRcdFx0Ly8gRmFrZSB4aHJcblx0XHRcdGpxWEhSID0ge1xuXHRcdFx0XHRyZWFkeVN0YXRlOiAwLFxuXG5cdFx0XHRcdC8vIEJ1aWxkcyBoZWFkZXJzIGhhc2h0YWJsZSBpZiBuZWVkZWRcblx0XHRcdFx0Z2V0UmVzcG9uc2VIZWFkZXI6IGZ1bmN0aW9uKCBrZXkgKSB7XG5cdFx0XHRcdFx0dmFyIG1hdGNoO1xuXHRcdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRcdFx0aWYgKCAhcmVzcG9uc2VIZWFkZXJzICkge1xuXHRcdFx0XHRcdFx0XHRyZXNwb25zZUhlYWRlcnMgPSB7fTtcblx0XHRcdFx0XHRcdFx0d2hpbGUgKCAoIG1hdGNoID0gcmhlYWRlcnMuZXhlYyggcmVzcG9uc2VIZWFkZXJzU3RyaW5nICkgKSApIHtcblx0XHRcdFx0XHRcdFx0XHRyZXNwb25zZUhlYWRlcnNbIG1hdGNoWyAxIF0udG9Mb3dlckNhc2UoKSArIFwiIFwiIF0gPVxuXHRcdFx0XHRcdFx0XHRcdFx0KCByZXNwb25zZUhlYWRlcnNbIG1hdGNoWyAxIF0udG9Mb3dlckNhc2UoKSArIFwiIFwiIF0gfHwgW10gKVxuXHRcdFx0XHRcdFx0XHRcdFx0XHQuY29uY2F0KCBtYXRjaFsgMiBdICk7XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdG1hdGNoID0gcmVzcG9uc2VIZWFkZXJzWyBrZXkudG9Mb3dlckNhc2UoKSArIFwiIFwiIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiBtYXRjaCA9PSBudWxsID8gbnVsbCA6IG1hdGNoLmpvaW4oIFwiLCBcIiApO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIFJhdyBzdHJpbmdcblx0XHRcdFx0Z2V0QWxsUmVzcG9uc2VIZWFkZXJzOiBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRyZXR1cm4gY29tcGxldGVkID8gcmVzcG9uc2VIZWFkZXJzU3RyaW5nIDogbnVsbDtcblx0XHRcdFx0fSxcblxuXHRcdFx0XHQvLyBDYWNoZXMgdGhlIGhlYWRlclxuXHRcdFx0XHRzZXRSZXF1ZXN0SGVhZGVyOiBmdW5jdGlvbiggbmFtZSwgdmFsdWUgKSB7XG5cdFx0XHRcdFx0aWYgKCBjb21wbGV0ZWQgPT0gbnVsbCApIHtcblx0XHRcdFx0XHRcdG5hbWUgPSByZXF1ZXN0SGVhZGVyc05hbWVzWyBuYW1lLnRvTG93ZXJDYXNlKCkgXSA9XG5cdFx0XHRcdFx0XHRcdHJlcXVlc3RIZWFkZXJzTmFtZXNbIG5hbWUudG9Mb3dlckNhc2UoKSBdIHx8IG5hbWU7XG5cdFx0XHRcdFx0XHRyZXF1ZXN0SGVhZGVyc1sgbmFtZSBdID0gdmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9LFxuXG5cdFx0XHRcdC8vIE92ZXJyaWRlcyByZXNwb25zZSBjb250ZW50LXR5cGUgaGVhZGVyXG5cdFx0XHRcdG92ZXJyaWRlTWltZVR5cGU6IGZ1bmN0aW9uKCB0eXBlICkge1xuXHRcdFx0XHRcdGlmICggY29tcGxldGVkID09IG51bGwgKSB7XG5cdFx0XHRcdFx0XHRzLm1pbWVUeXBlID0gdHlwZTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gU3RhdHVzLWRlcGVuZGVudCBjYWxsYmFja3Ncblx0XHRcdFx0c3RhdHVzQ29kZTogZnVuY3Rpb24oIG1hcCApIHtcblx0XHRcdFx0XHR2YXIgY29kZTtcblx0XHRcdFx0XHRpZiAoIG1hcCApIHtcblx0XHRcdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEV4ZWN1dGUgdGhlIGFwcHJvcHJpYXRlIGNhbGxiYWNrc1xuXHRcdFx0XHRcdFx0XHRqcVhIUi5hbHdheXMoIG1hcFsganFYSFIuc3RhdHVzIF0gKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cblx0XHRcdFx0XHRcdFx0Ly8gTGF6eS1hZGQgdGhlIG5ldyBjYWxsYmFja3MgaW4gYSB3YXkgdGhhdCBwcmVzZXJ2ZXMgb2xkIG9uZXNcblx0XHRcdFx0XHRcdFx0Zm9yICggY29kZSBpbiBtYXAgKSB7XG5cdFx0XHRcdFx0XHRcdFx0c3RhdHVzQ29kZVsgY29kZSBdID0gWyBzdGF0dXNDb2RlWyBjb2RlIF0sIG1hcFsgY29kZSBdIF07XG5cdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXM7XG5cdFx0XHRcdH0sXG5cblx0XHRcdFx0Ly8gQ2FuY2VsIHRoZSByZXF1ZXN0XG5cdFx0XHRcdGFib3J0OiBmdW5jdGlvbiggc3RhdHVzVGV4dCApIHtcblx0XHRcdFx0XHR2YXIgZmluYWxUZXh0ID0gc3RhdHVzVGV4dCB8fCBzdHJBYm9ydDtcblx0XHRcdFx0XHRpZiAoIHRyYW5zcG9ydCApIHtcblx0XHRcdFx0XHRcdHRyYW5zcG9ydC5hYm9ydCggZmluYWxUZXh0ICk7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdGRvbmUoIDAsIGZpbmFsVGV4dCApO1xuXHRcdFx0XHRcdHJldHVybiB0aGlzO1xuXHRcdFx0XHR9XG5cdFx0XHR9O1xuXG5cdFx0Ly8gQXR0YWNoIGRlZmVycmVkc1xuXHRcdGRlZmVycmVkLnByb21pc2UoIGpxWEhSICk7XG5cblx0XHQvLyBBZGQgcHJvdG9jb2wgaWYgbm90IHByb3ZpZGVkIChwcmVmaWx0ZXJzIG1pZ2h0IGV4cGVjdCBpdClcblx0XHQvLyBIYW5kbGUgZmFsc3kgdXJsIGluIHRoZSBzZXR0aW5ncyBvYmplY3QgKCMxMDA5MzogY29uc2lzdGVuY3kgd2l0aCBvbGQgc2lnbmF0dXJlKVxuXHRcdC8vIFdlIGFsc28gdXNlIHRoZSB1cmwgcGFyYW1ldGVyIGlmIGF2YWlsYWJsZVxuXHRcdHMudXJsID0gKCAoIHVybCB8fCBzLnVybCB8fCBsb2NhdGlvbi5ocmVmICkgKyBcIlwiIClcblx0XHRcdC5yZXBsYWNlKCBycHJvdG9jb2wsIGxvY2F0aW9uLnByb3RvY29sICsgXCIvL1wiICk7XG5cblx0XHQvLyBBbGlhcyBtZXRob2Qgb3B0aW9uIHRvIHR5cGUgYXMgcGVyIHRpY2tldCAjMTIwMDRcblx0XHRzLnR5cGUgPSBvcHRpb25zLm1ldGhvZCB8fCBvcHRpb25zLnR5cGUgfHwgcy5tZXRob2QgfHwgcy50eXBlO1xuXG5cdFx0Ly8gRXh0cmFjdCBkYXRhVHlwZXMgbGlzdFxuXHRcdHMuZGF0YVR5cGVzID0gKCBzLmRhdGFUeXBlIHx8IFwiKlwiICkudG9Mb3dlckNhc2UoKS5tYXRjaCggcm5vdGh0bWx3aGl0ZSApIHx8IFsgXCJcIiBdO1xuXG5cdFx0Ly8gQSBjcm9zcy1kb21haW4gcmVxdWVzdCBpcyBpbiBvcmRlciB3aGVuIHRoZSBvcmlnaW4gZG9lc24ndCBtYXRjaCB0aGUgY3VycmVudCBvcmlnaW4uXG5cdFx0aWYgKCBzLmNyb3NzRG9tYWluID09IG51bGwgKSB7XG5cdFx0XHR1cmxBbmNob3IgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCBcImFcIiApO1xuXG5cdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTggLSAxMSwgRWRnZSAxMiAtIDE1XG5cdFx0XHQvLyBJRSB0aHJvd3MgZXhjZXB0aW9uIG9uIGFjY2Vzc2luZyB0aGUgaHJlZiBwcm9wZXJ0eSBpZiB1cmwgaXMgbWFsZm9ybWVkLFxuXHRcdFx0Ly8gZS5nLiBodHRwOi8vZXhhbXBsZS5jb206ODB4L1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0dXJsQW5jaG9yLmhyZWYgPSBzLnVybDtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA8PTggLSAxMSBvbmx5XG5cdFx0XHRcdC8vIEFuY2hvcidzIGhvc3QgcHJvcGVydHkgaXNuJ3QgY29ycmVjdGx5IHNldCB3aGVuIHMudXJsIGlzIHJlbGF0aXZlXG5cdFx0XHRcdHVybEFuY2hvci5ocmVmID0gdXJsQW5jaG9yLmhyZWY7XG5cdFx0XHRcdHMuY3Jvc3NEb21haW4gPSBvcmlnaW5BbmNob3IucHJvdG9jb2wgKyBcIi8vXCIgKyBvcmlnaW5BbmNob3IuaG9zdCAhPT1cblx0XHRcdFx0XHR1cmxBbmNob3IucHJvdG9jb2wgKyBcIi8vXCIgKyB1cmxBbmNob3IuaG9zdDtcblx0XHRcdH0gY2F0Y2ggKCBlICkge1xuXG5cdFx0XHRcdC8vIElmIHRoZXJlIGlzIGFuIGVycm9yIHBhcnNpbmcgdGhlIFVSTCwgYXNzdW1lIGl0IGlzIGNyb3NzRG9tYWluLFxuXHRcdFx0XHQvLyBpdCBjYW4gYmUgcmVqZWN0ZWQgYnkgdGhlIHRyYW5zcG9ydCBpZiBpdCBpcyBpbnZhbGlkXG5cdFx0XHRcdHMuY3Jvc3NEb21haW4gPSB0cnVlO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIENvbnZlcnQgZGF0YSBpZiBub3QgYWxyZWFkeSBhIHN0cmluZ1xuXHRcdGlmICggcy5kYXRhICYmIHMucHJvY2Vzc0RhdGEgJiYgdHlwZW9mIHMuZGF0YSAhPT0gXCJzdHJpbmdcIiApIHtcblx0XHRcdHMuZGF0YSA9IGpRdWVyeS5wYXJhbSggcy5kYXRhLCBzLnRyYWRpdGlvbmFsICk7XG5cdFx0fVxuXG5cdFx0Ly8gQXBwbHkgcHJlZmlsdGVyc1xuXHRcdGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCBwcmVmaWx0ZXJzLCBzLCBvcHRpb25zLCBqcVhIUiApO1xuXG5cdFx0Ly8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYSBwcmVmaWx0ZXIsIHN0b3AgdGhlcmVcblx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdHJldHVybiBqcVhIUjtcblx0XHR9XG5cblx0XHQvLyBXZSBjYW4gZmlyZSBnbG9iYWwgZXZlbnRzIGFzIG9mIG5vdyBpZiBhc2tlZCB0b1xuXHRcdC8vIERvbid0IGZpcmUgZXZlbnRzIGlmIGpRdWVyeS5ldmVudCBpcyB1bmRlZmluZWQgaW4gYW4gQU1ELXVzYWdlIHNjZW5hcmlvICgjMTUxMTgpXG5cdFx0ZmlyZUdsb2JhbHMgPSBqUXVlcnkuZXZlbnQgJiYgcy5nbG9iYWw7XG5cblx0XHQvLyBXYXRjaCBmb3IgYSBuZXcgc2V0IG9mIHJlcXVlc3RzXG5cdFx0aWYgKCBmaXJlR2xvYmFscyAmJiBqUXVlcnkuYWN0aXZlKysgPT09IDAgKSB7XG5cdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggXCJhamF4U3RhcnRcIiApO1xuXHRcdH1cblxuXHRcdC8vIFVwcGVyY2FzZSB0aGUgdHlwZVxuXHRcdHMudHlwZSA9IHMudHlwZS50b1VwcGVyQ2FzZSgpO1xuXG5cdFx0Ly8gRGV0ZXJtaW5lIGlmIHJlcXVlc3QgaGFzIGNvbnRlbnRcblx0XHRzLmhhc0NvbnRlbnQgPSAhcm5vQ29udGVudC50ZXN0KCBzLnR5cGUgKTtcblxuXHRcdC8vIFNhdmUgdGhlIFVSTCBpbiBjYXNlIHdlJ3JlIHRveWluZyB3aXRoIHRoZSBJZi1Nb2RpZmllZC1TaW5jZVxuXHRcdC8vIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciBsYXRlciBvblxuXHRcdC8vIFJlbW92ZSBoYXNoIHRvIHNpbXBsaWZ5IHVybCBtYW5pcHVsYXRpb25cblx0XHRjYWNoZVVSTCA9IHMudXJsLnJlcGxhY2UoIHJoYXNoLCBcIlwiICk7XG5cblx0XHQvLyBNb3JlIG9wdGlvbnMgaGFuZGxpbmcgZm9yIHJlcXVlc3RzIHdpdGggbm8gY29udGVudFxuXHRcdGlmICggIXMuaGFzQ29udGVudCApIHtcblxuXHRcdFx0Ly8gUmVtZW1iZXIgdGhlIGhhc2ggc28gd2UgY2FuIHB1dCBpdCBiYWNrXG5cdFx0XHR1bmNhY2hlZCA9IHMudXJsLnNsaWNlKCBjYWNoZVVSTC5sZW5ndGggKTtcblxuXHRcdFx0Ly8gSWYgZGF0YSBpcyBhdmFpbGFibGUgYW5kIHNob3VsZCBiZSBwcm9jZXNzZWQsIGFwcGVuZCBkYXRhIHRvIHVybFxuXHRcdFx0aWYgKCBzLmRhdGEgJiYgKCBzLnByb2Nlc3NEYXRhIHx8IHR5cGVvZiBzLmRhdGEgPT09IFwic3RyaW5nXCIgKSApIHtcblx0XHRcdFx0Y2FjaGVVUkwgKz0gKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/IFwiJlwiIDogXCI/XCIgKSArIHMuZGF0YTtcblxuXHRcdFx0XHQvLyAjOTY4MjogcmVtb3ZlIGRhdGEgc28gdGhhdCBpdCdzIG5vdCB1c2VkIGluIGFuIGV2ZW50dWFsIHJldHJ5XG5cdFx0XHRcdGRlbGV0ZSBzLmRhdGE7XG5cdFx0XHR9XG5cblx0XHRcdC8vIEFkZCBvciB1cGRhdGUgYW50aS1jYWNoZSBwYXJhbSBpZiBuZWVkZWRcblx0XHRcdGlmICggcy5jYWNoZSA9PT0gZmFsc2UgKSB7XG5cdFx0XHRcdGNhY2hlVVJMID0gY2FjaGVVUkwucmVwbGFjZSggcmFudGlDYWNoZSwgXCIkMVwiICk7XG5cdFx0XHRcdHVuY2FjaGVkID0gKCBycXVlcnkudGVzdCggY2FjaGVVUkwgKSA/IFwiJlwiIDogXCI/XCIgKSArIFwiXz1cIiArICggbm9uY2UuZ3VpZCsrICkgK1xuXHRcdFx0XHRcdHVuY2FjaGVkO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBQdXQgaGFzaCBhbmQgYW50aS1jYWNoZSBvbiB0aGUgVVJMIHRoYXQgd2lsbCBiZSByZXF1ZXN0ZWQgKGdoLTE3MzIpXG5cdFx0XHRzLnVybCA9IGNhY2hlVVJMICsgdW5jYWNoZWQ7XG5cblx0XHQvLyBDaGFuZ2UgJyUyMCcgdG8gJysnIGlmIHRoaXMgaXMgZW5jb2RlZCBmb3JtIGJvZHkgY29udGVudCAoZ2gtMjY1OClcblx0XHR9IGVsc2UgaWYgKCBzLmRhdGEgJiYgcy5wcm9jZXNzRGF0YSAmJlxuXHRcdFx0KCBzLmNvbnRlbnRUeXBlIHx8IFwiXCIgKS5pbmRleE9mKCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiICkgPT09IDAgKSB7XG5cdFx0XHRzLmRhdGEgPSBzLmRhdGEucmVwbGFjZSggcjIwLCBcIitcIiApO1xuXHRcdH1cblxuXHRcdC8vIFNldCB0aGUgSWYtTW9kaWZpZWQtU2luY2UgYW5kL29yIElmLU5vbmUtTWF0Y2ggaGVhZGVyLCBpZiBpbiBpZk1vZGlmaWVkIG1vZGUuXG5cdFx0aWYgKCBzLmlmTW9kaWZpZWQgKSB7XG5cdFx0XHRpZiAoIGpRdWVyeS5sYXN0TW9kaWZpZWRbIGNhY2hlVVJMIF0gKSB7XG5cdFx0XHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoIFwiSWYtTW9kaWZpZWQtU2luY2VcIiwgalF1ZXJ5Lmxhc3RNb2RpZmllZFsgY2FjaGVVUkwgXSApO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBqUXVlcnkuZXRhZ1sgY2FjaGVVUkwgXSApIHtcblx0XHRcdFx0anFYSFIuc2V0UmVxdWVzdEhlYWRlciggXCJJZi1Ob25lLU1hdGNoXCIsIGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdICk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBjb3JyZWN0IGhlYWRlciwgaWYgZGF0YSBpcyBiZWluZyBzZW50XG5cdFx0aWYgKCBzLmRhdGEgJiYgcy5oYXNDb250ZW50ICYmIHMuY29udGVudFR5cGUgIT09IGZhbHNlIHx8IG9wdGlvbnMuY29udGVudFR5cGUgKSB7XG5cdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBcIkNvbnRlbnQtVHlwZVwiLCBzLmNvbnRlbnRUeXBlICk7XG5cdFx0fVxuXG5cdFx0Ly8gU2V0IHRoZSBBY2NlcHRzIGhlYWRlciBmb3IgdGhlIHNlcnZlciwgZGVwZW5kaW5nIG9uIHRoZSBkYXRhVHlwZVxuXHRcdGpxWEhSLnNldFJlcXVlc3RIZWFkZXIoXG5cdFx0XHRcIkFjY2VwdFwiLFxuXHRcdFx0cy5kYXRhVHlwZXNbIDAgXSAmJiBzLmFjY2VwdHNbIHMuZGF0YVR5cGVzWyAwIF0gXSA/XG5cdFx0XHRcdHMuYWNjZXB0c1sgcy5kYXRhVHlwZXNbIDAgXSBdICtcblx0XHRcdFx0XHQoIHMuZGF0YVR5cGVzWyAwIF0gIT09IFwiKlwiID8gXCIsIFwiICsgYWxsVHlwZXMgKyBcIjsgcT0wLjAxXCIgOiBcIlwiICkgOlxuXHRcdFx0XHRzLmFjY2VwdHNbIFwiKlwiIF1cblx0XHQpO1xuXG5cdFx0Ly8gQ2hlY2sgZm9yIGhlYWRlcnMgb3B0aW9uXG5cdFx0Zm9yICggaSBpbiBzLmhlYWRlcnMgKSB7XG5cdFx0XHRqcVhIUi5zZXRSZXF1ZXN0SGVhZGVyKCBpLCBzLmhlYWRlcnNbIGkgXSApO1xuXHRcdH1cblxuXHRcdC8vIEFsbG93IGN1c3RvbSBoZWFkZXJzL21pbWV0eXBlcyBhbmQgZWFybHkgYWJvcnRcblx0XHRpZiAoIHMuYmVmb3JlU2VuZCAmJlxuXHRcdFx0KCBzLmJlZm9yZVNlbmQuY2FsbCggY2FsbGJhY2tDb250ZXh0LCBqcVhIUiwgcyApID09PSBmYWxzZSB8fCBjb21wbGV0ZWQgKSApIHtcblxuXHRcdFx0Ly8gQWJvcnQgaWYgbm90IGRvbmUgYWxyZWFkeSBhbmQgcmV0dXJuXG5cdFx0XHRyZXR1cm4ganFYSFIuYWJvcnQoKTtcblx0XHR9XG5cblx0XHQvLyBBYm9ydGluZyBpcyBubyBsb25nZXIgYSBjYW5jZWxsYXRpb25cblx0XHRzdHJBYm9ydCA9IFwiYWJvcnRcIjtcblxuXHRcdC8vIEluc3RhbGwgY2FsbGJhY2tzIG9uIGRlZmVycmVkc1xuXHRcdGNvbXBsZXRlRGVmZXJyZWQuYWRkKCBzLmNvbXBsZXRlICk7XG5cdFx0anFYSFIuZG9uZSggcy5zdWNjZXNzICk7XG5cdFx0anFYSFIuZmFpbCggcy5lcnJvciApO1xuXG5cdFx0Ly8gR2V0IHRyYW5zcG9ydFxuXHRcdHRyYW5zcG9ydCA9IGluc3BlY3RQcmVmaWx0ZXJzT3JUcmFuc3BvcnRzKCB0cmFuc3BvcnRzLCBzLCBvcHRpb25zLCBqcVhIUiApO1xuXG5cdFx0Ly8gSWYgbm8gdHJhbnNwb3J0LCB3ZSBhdXRvLWFib3J0XG5cdFx0aWYgKCAhdHJhbnNwb3J0ICkge1xuXHRcdFx0ZG9uZSggLTEsIFwiTm8gVHJhbnNwb3J0XCIgKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0anFYSFIucmVhZHlTdGF0ZSA9IDE7XG5cblx0XHRcdC8vIFNlbmQgZ2xvYmFsIGV2ZW50XG5cdFx0XHRpZiAoIGZpcmVHbG9iYWxzICkge1xuXHRcdFx0XHRnbG9iYWxFdmVudENvbnRleHQudHJpZ2dlciggXCJhamF4U2VuZFwiLCBbIGpxWEhSLCBzIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gSWYgcmVxdWVzdCB3YXMgYWJvcnRlZCBpbnNpZGUgYWpheFNlbmQsIHN0b3AgdGhlcmVcblx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRyZXR1cm4ganFYSFI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRpbWVvdXRcblx0XHRcdGlmICggcy5hc3luYyAmJiBzLnRpbWVvdXQgPiAwICkge1xuXHRcdFx0XHR0aW1lb3V0VGltZXIgPSB3aW5kb3cuc2V0VGltZW91dCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0anFYSFIuYWJvcnQoIFwidGltZW91dFwiICk7XG5cdFx0XHRcdH0sIHMudGltZW91dCApO1xuXHRcdFx0fVxuXG5cdFx0XHR0cnkge1xuXHRcdFx0XHRjb21wbGV0ZWQgPSBmYWxzZTtcblx0XHRcdFx0dHJhbnNwb3J0LnNlbmQoIHJlcXVlc3RIZWFkZXJzLCBkb25lICk7XG5cdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHQvLyBSZXRocm93IHBvc3QtY29tcGxldGlvbiBleGNlcHRpb25zXG5cdFx0XHRcdGlmICggY29tcGxldGVkICkge1xuXHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBQcm9wYWdhdGUgb3RoZXJzIGFzIHJlc3VsdHNcblx0XHRcdFx0ZG9uZSggLTEsIGUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDYWxsYmFjayBmb3Igd2hlbiBldmVyeXRoaW5nIGlzIGRvbmVcblx0XHRmdW5jdGlvbiBkb25lKCBzdGF0dXMsIG5hdGl2ZVN0YXR1c1RleHQsIHJlc3BvbnNlcywgaGVhZGVycyApIHtcblx0XHRcdHZhciBpc1N1Y2Nlc3MsIHN1Y2Nlc3MsIGVycm9yLCByZXNwb25zZSwgbW9kaWZpZWQsXG5cdFx0XHRcdHN0YXR1c1RleHQgPSBuYXRpdmVTdGF0dXNUZXh0O1xuXG5cdFx0XHQvLyBJZ25vcmUgcmVwZWF0IGludm9jYXRpb25zXG5cdFx0XHRpZiAoIGNvbXBsZXRlZCApIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fVxuXG5cdFx0XHRjb21wbGV0ZWQgPSB0cnVlO1xuXG5cdFx0XHQvLyBDbGVhciB0aW1lb3V0IGlmIGl0IGV4aXN0c1xuXHRcdFx0aWYgKCB0aW1lb3V0VGltZXIgKSB7XG5cdFx0XHRcdHdpbmRvdy5jbGVhclRpbWVvdXQoIHRpbWVvdXRUaW1lciApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBEZXJlZmVyZW5jZSB0cmFuc3BvcnQgZm9yIGVhcmx5IGdhcmJhZ2UgY29sbGVjdGlvblxuXHRcdFx0Ly8gKG5vIG1hdHRlciBob3cgbG9uZyB0aGUganFYSFIgb2JqZWN0IHdpbGwgYmUgdXNlZClcblx0XHRcdHRyYW5zcG9ydCA9IHVuZGVmaW5lZDtcblxuXHRcdFx0Ly8gQ2FjaGUgcmVzcG9uc2UgaGVhZGVyc1xuXHRcdFx0cmVzcG9uc2VIZWFkZXJzU3RyaW5nID0gaGVhZGVycyB8fCBcIlwiO1xuXG5cdFx0XHQvLyBTZXQgcmVhZHlTdGF0ZVxuXHRcdFx0anFYSFIucmVhZHlTdGF0ZSA9IHN0YXR1cyA+IDAgPyA0IDogMDtcblxuXHRcdFx0Ly8gRGV0ZXJtaW5lIGlmIHN1Y2Nlc3NmdWxcblx0XHRcdGlzU3VjY2VzcyA9IHN0YXR1cyA+PSAyMDAgJiYgc3RhdHVzIDwgMzAwIHx8IHN0YXR1cyA9PT0gMzA0O1xuXG5cdFx0XHQvLyBHZXQgcmVzcG9uc2UgZGF0YVxuXHRcdFx0aWYgKCByZXNwb25zZXMgKSB7XG5cdFx0XHRcdHJlc3BvbnNlID0gYWpheEhhbmRsZVJlc3BvbnNlcyggcywganFYSFIsIHJlc3BvbnNlcyApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBVc2UgYSBub29wIGNvbnZlcnRlciBmb3IgbWlzc2luZyBzY3JpcHQgYnV0IG5vdCBpZiBqc29ucFxuXHRcdFx0aWYgKCAhaXNTdWNjZXNzICYmXG5cdFx0XHRcdGpRdWVyeS5pbkFycmF5KCBcInNjcmlwdFwiLCBzLmRhdGFUeXBlcyApID4gLTEgJiZcblx0XHRcdFx0alF1ZXJ5LmluQXJyYXkoIFwianNvblwiLCBzLmRhdGFUeXBlcyApIDwgMCApIHtcblx0XHRcdFx0cy5jb252ZXJ0ZXJzWyBcInRleHQgc2NyaXB0XCIgXSA9IGZ1bmN0aW9uKCkge307XG5cdFx0XHR9XG5cblx0XHRcdC8vIENvbnZlcnQgbm8gbWF0dGVyIHdoYXQgKHRoYXQgd2F5IHJlc3BvbnNlWFhYIGZpZWxkcyBhcmUgYWx3YXlzIHNldClcblx0XHRcdHJlc3BvbnNlID0gYWpheENvbnZlcnQoIHMsIHJlc3BvbnNlLCBqcVhIUiwgaXNTdWNjZXNzICk7XG5cblx0XHRcdC8vIElmIHN1Y2Nlc3NmdWwsIGhhbmRsZSB0eXBlIGNoYWluaW5nXG5cdFx0XHRpZiAoIGlzU3VjY2VzcyApIHtcblxuXHRcdFx0XHQvLyBTZXQgdGhlIElmLU1vZGlmaWVkLVNpbmNlIGFuZC9vciBJZi1Ob25lLU1hdGNoIGhlYWRlciwgaWYgaW4gaWZNb2RpZmllZCBtb2RlLlxuXHRcdFx0XHRpZiAoIHMuaWZNb2RpZmllZCApIHtcblx0XHRcdFx0XHRtb2RpZmllZCA9IGpxWEhSLmdldFJlc3BvbnNlSGVhZGVyKCBcIkxhc3QtTW9kaWZpZWRcIiApO1xuXHRcdFx0XHRcdGlmICggbW9kaWZpZWQgKSB7XG5cdFx0XHRcdFx0XHRqUXVlcnkubGFzdE1vZGlmaWVkWyBjYWNoZVVSTCBdID0gbW9kaWZpZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdG1vZGlmaWVkID0ganFYSFIuZ2V0UmVzcG9uc2VIZWFkZXIoIFwiZXRhZ1wiICk7XG5cdFx0XHRcdFx0aWYgKCBtb2RpZmllZCApIHtcblx0XHRcdFx0XHRcdGpRdWVyeS5ldGFnWyBjYWNoZVVSTCBdID0gbW9kaWZpZWQ7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gaWYgbm8gY29udGVudFxuXHRcdFx0XHRpZiAoIHN0YXR1cyA9PT0gMjA0IHx8IHMudHlwZSA9PT0gXCJIRUFEXCIgKSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IFwibm9jb250ZW50XCI7XG5cblx0XHRcdFx0Ly8gaWYgbm90IG1vZGlmaWVkXG5cdFx0XHRcdH0gZWxzZSBpZiAoIHN0YXR1cyA9PT0gMzA0ICkge1xuXHRcdFx0XHRcdHN0YXR1c1RleHQgPSBcIm5vdG1vZGlmaWVkXCI7XG5cblx0XHRcdFx0Ly8gSWYgd2UgaGF2ZSBkYXRhLCBsZXQncyBjb252ZXJ0IGl0XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0c3RhdHVzVGV4dCA9IHJlc3BvbnNlLnN0YXRlO1xuXHRcdFx0XHRcdHN1Y2Nlc3MgPSByZXNwb25zZS5kYXRhO1xuXHRcdFx0XHRcdGVycm9yID0gcmVzcG9uc2UuZXJyb3I7XG5cdFx0XHRcdFx0aXNTdWNjZXNzID0gIWVycm9yO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGVsc2Uge1xuXG5cdFx0XHRcdC8vIEV4dHJhY3QgZXJyb3IgZnJvbSBzdGF0dXNUZXh0IGFuZCBub3JtYWxpemUgZm9yIG5vbi1hYm9ydHNcblx0XHRcdFx0ZXJyb3IgPSBzdGF0dXNUZXh0O1xuXHRcdFx0XHRpZiAoIHN0YXR1cyB8fCAhc3RhdHVzVGV4dCApIHtcblx0XHRcdFx0XHRzdGF0dXNUZXh0ID0gXCJlcnJvclwiO1xuXHRcdFx0XHRcdGlmICggc3RhdHVzIDwgMCApIHtcblx0XHRcdFx0XHRcdHN0YXR1cyA9IDA7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNldCBkYXRhIGZvciB0aGUgZmFrZSB4aHIgb2JqZWN0XG5cdFx0XHRqcVhIUi5zdGF0dXMgPSBzdGF0dXM7XG5cdFx0XHRqcVhIUi5zdGF0dXNUZXh0ID0gKCBuYXRpdmVTdGF0dXNUZXh0IHx8IHN0YXR1c1RleHQgKSArIFwiXCI7XG5cblx0XHRcdC8vIFN1Y2Nlc3MvRXJyb3Jcblx0XHRcdGlmICggaXNTdWNjZXNzICkge1xuXHRcdFx0XHRkZWZlcnJlZC5yZXNvbHZlV2l0aCggY2FsbGJhY2tDb250ZXh0LCBbIHN1Y2Nlc3MsIHN0YXR1c1RleHQsIGpxWEhSIF0gKTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGRlZmVycmVkLnJlamVjdFdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCwgZXJyb3IgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHQvLyBTdGF0dXMtZGVwZW5kZW50IGNhbGxiYWNrc1xuXHRcdFx0anFYSFIuc3RhdHVzQ29kZSggc3RhdHVzQ29kZSApO1xuXHRcdFx0c3RhdHVzQ29kZSA9IHVuZGVmaW5lZDtcblxuXHRcdFx0aWYgKCBmaXJlR2xvYmFscyApIHtcblx0XHRcdFx0Z2xvYmFsRXZlbnRDb250ZXh0LnRyaWdnZXIoIGlzU3VjY2VzcyA/IFwiYWpheFN1Y2Nlc3NcIiA6IFwiYWpheEVycm9yXCIsXG5cdFx0XHRcdFx0WyBqcVhIUiwgcywgaXNTdWNjZXNzID8gc3VjY2VzcyA6IGVycm9yIF0gKTtcblx0XHRcdH1cblxuXHRcdFx0Ly8gQ29tcGxldGVcblx0XHRcdGNvbXBsZXRlRGVmZXJyZWQuZmlyZVdpdGgoIGNhbGxiYWNrQ29udGV4dCwgWyBqcVhIUiwgc3RhdHVzVGV4dCBdICk7XG5cblx0XHRcdGlmICggZmlyZUdsb2JhbHMgKSB7XG5cdFx0XHRcdGdsb2JhbEV2ZW50Q29udGV4dC50cmlnZ2VyKCBcImFqYXhDb21wbGV0ZVwiLCBbIGpxWEhSLCBzIF0gKTtcblxuXHRcdFx0XHQvLyBIYW5kbGUgdGhlIGdsb2JhbCBBSkFYIGNvdW50ZXJcblx0XHRcdFx0aWYgKCAhKCAtLWpRdWVyeS5hY3RpdmUgKSApIHtcblx0XHRcdFx0XHRqUXVlcnkuZXZlbnQudHJpZ2dlciggXCJhamF4U3RvcFwiICk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cblx0XHRyZXR1cm4ganFYSFI7XG5cdH0sXG5cblx0Z2V0SlNPTjogZnVuY3Rpb24oIHVybCwgZGF0YSwgY2FsbGJhY2sgKSB7XG5cdFx0cmV0dXJuIGpRdWVyeS5nZXQoIHVybCwgZGF0YSwgY2FsbGJhY2ssIFwianNvblwiICk7XG5cdH0sXG5cblx0Z2V0U2NyaXB0OiBmdW5jdGlvbiggdXJsLCBjYWxsYmFjayApIHtcblx0XHRyZXR1cm4galF1ZXJ5LmdldCggdXJsLCB1bmRlZmluZWQsIGNhbGxiYWNrLCBcInNjcmlwdFwiICk7XG5cdH1cbn0gKTtcblxualF1ZXJ5LmVhY2goIFsgXCJnZXRcIiwgXCJwb3N0XCIgXSwgZnVuY3Rpb24oIF9pLCBtZXRob2QgKSB7XG5cdGpRdWVyeVsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdXJsLCBkYXRhLCBjYWxsYmFjaywgdHlwZSApIHtcblxuXHRcdC8vIFNoaWZ0IGFyZ3VtZW50cyBpZiBkYXRhIGFyZ3VtZW50IHdhcyBvbWl0dGVkXG5cdFx0aWYgKCBpc0Z1bmN0aW9uKCBkYXRhICkgKSB7XG5cdFx0XHR0eXBlID0gdHlwZSB8fCBjYWxsYmFjaztcblx0XHRcdGNhbGxiYWNrID0gZGF0YTtcblx0XHRcdGRhdGEgPSB1bmRlZmluZWQ7XG5cdFx0fVxuXG5cdFx0Ly8gVGhlIHVybCBjYW4gYmUgYW4gb3B0aW9ucyBvYmplY3QgKHdoaWNoIHRoZW4gbXVzdCBoYXZlIC51cmwpXG5cdFx0cmV0dXJuIGpRdWVyeS5hamF4KCBqUXVlcnkuZXh0ZW5kKCB7XG5cdFx0XHR1cmw6IHVybCxcblx0XHRcdHR5cGU6IG1ldGhvZCxcblx0XHRcdGRhdGFUeXBlOiB0eXBlLFxuXHRcdFx0ZGF0YTogZGF0YSxcblx0XHRcdHN1Y2Nlc3M6IGNhbGxiYWNrXG5cdFx0fSwgalF1ZXJ5LmlzUGxhaW5PYmplY3QoIHVybCApICYmIHVybCApICk7XG5cdH07XG59ICk7XG5cbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBmdW5jdGlvbiggcyApIHtcblx0dmFyIGk7XG5cdGZvciAoIGkgaW4gcy5oZWFkZXJzICkge1xuXHRcdGlmICggaS50b0xvd2VyQ2FzZSgpID09PSBcImNvbnRlbnQtdHlwZVwiICkge1xuXHRcdFx0cy5jb250ZW50VHlwZSA9IHMuaGVhZGVyc1sgaSBdIHx8IFwiXCI7XG5cdFx0fVxuXHR9XG59ICk7XG5cblxualF1ZXJ5Ll9ldmFsVXJsID0gZnVuY3Rpb24oIHVybCwgb3B0aW9ucywgZG9jICkge1xuXHRyZXR1cm4galF1ZXJ5LmFqYXgoIHtcblx0XHR1cmw6IHVybCxcblxuXHRcdC8vIE1ha2UgdGhpcyBleHBsaWNpdCwgc2luY2UgdXNlciBjYW4gb3ZlcnJpZGUgdGhpcyB0aHJvdWdoIGFqYXhTZXR1cCAoIzExMjY0KVxuXHRcdHR5cGU6IFwiR0VUXCIsXG5cdFx0ZGF0YVR5cGU6IFwic2NyaXB0XCIsXG5cdFx0Y2FjaGU6IHRydWUsXG5cdFx0YXN5bmM6IGZhbHNlLFxuXHRcdGdsb2JhbDogZmFsc2UsXG5cblx0XHQvLyBPbmx5IGV2YWx1YXRlIHRoZSByZXNwb25zZSBpZiBpdCBpcyBzdWNjZXNzZnVsIChnaC00MTI2KVxuXHRcdC8vIGRhdGFGaWx0ZXIgaXMgbm90IGludm9rZWQgZm9yIGZhaWx1cmUgcmVzcG9uc2VzLCBzbyB1c2luZyBpdCBpbnN0ZWFkXG5cdFx0Ly8gb2YgdGhlIGRlZmF1bHQgY29udmVydGVyIGlzIGtsdWRneSBidXQgaXQgd29ya3MuXG5cdFx0Y29udmVydGVyczoge1xuXHRcdFx0XCJ0ZXh0IHNjcmlwdFwiOiBmdW5jdGlvbigpIHt9XG5cdFx0fSxcblx0XHRkYXRhRmlsdGVyOiBmdW5jdGlvbiggcmVzcG9uc2UgKSB7XG5cdFx0XHRqUXVlcnkuZ2xvYmFsRXZhbCggcmVzcG9uc2UsIG9wdGlvbnMsIGRvYyApO1xuXHRcdH1cblx0fSApO1xufTtcblxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cdHdyYXBBbGw6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdHZhciB3cmFwO1xuXG5cdFx0aWYgKCB0aGlzWyAwIF0gKSB7XG5cdFx0XHRpZiAoIGlzRnVuY3Rpb24oIGh0bWwgKSApIHtcblx0XHRcdFx0aHRtbCA9IGh0bWwuY2FsbCggdGhpc1sgMCBdICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIFRoZSBlbGVtZW50cyB0byB3cmFwIHRoZSB0YXJnZXQgYXJvdW5kXG5cdFx0XHR3cmFwID0galF1ZXJ5KCBodG1sLCB0aGlzWyAwIF0ub3duZXJEb2N1bWVudCApLmVxKCAwICkuY2xvbmUoIHRydWUgKTtcblxuXHRcdFx0aWYgKCB0aGlzWyAwIF0ucGFyZW50Tm9kZSApIHtcblx0XHRcdFx0d3JhcC5pbnNlcnRCZWZvcmUoIHRoaXNbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHR3cmFwLm1hcCggZnVuY3Rpb24oKSB7XG5cdFx0XHRcdHZhciBlbGVtID0gdGhpcztcblxuXHRcdFx0XHR3aGlsZSAoIGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQgKSB7XG5cdFx0XHRcdFx0ZWxlbSA9IGVsZW0uZmlyc3RFbGVtZW50Q2hpbGQ7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRyZXR1cm4gZWxlbTtcblx0XHRcdH0gKS5hcHBlbmQoIHRoaXMgKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fSxcblxuXHR3cmFwSW5uZXI6IGZ1bmN0aW9uKCBodG1sICkge1xuXHRcdGlmICggaXNGdW5jdGlvbiggaHRtbCApICkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZWFjaCggZnVuY3Rpb24oIGkgKSB7XG5cdFx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBJbm5lciggaHRtbC5jYWxsKCB0aGlzLCBpICkgKTtcblx0XHRcdH0gKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBzZWxmID0galF1ZXJ5KCB0aGlzICksXG5cdFx0XHRcdGNvbnRlbnRzID0gc2VsZi5jb250ZW50cygpO1xuXG5cdFx0XHRpZiAoIGNvbnRlbnRzLmxlbmd0aCApIHtcblx0XHRcdFx0Y29udGVudHMud3JhcEFsbCggaHRtbCApO1xuXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRzZWxmLmFwcGVuZCggaHRtbCApO1xuXHRcdFx0fVxuXHRcdH0gKTtcblx0fSxcblxuXHR3cmFwOiBmdW5jdGlvbiggaHRtbCApIHtcblx0XHR2YXIgaHRtbElzRnVuY3Rpb24gPSBpc0Z1bmN0aW9uKCBodG1sICk7XG5cblx0XHRyZXR1cm4gdGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdGpRdWVyeSggdGhpcyApLndyYXBBbGwoIGh0bWxJc0Z1bmN0aW9uID8gaHRtbC5jYWxsKCB0aGlzLCBpICkgOiBodG1sICk7XG5cdFx0fSApO1xuXHR9LFxuXG5cdHVud3JhcDogZnVuY3Rpb24oIHNlbGVjdG9yICkge1xuXHRcdHRoaXMucGFyZW50KCBzZWxlY3RvciApLm5vdCggXCJib2R5XCIgKS5lYWNoKCBmdW5jdGlvbigpIHtcblx0XHRcdGpRdWVyeSggdGhpcyApLnJlcGxhY2VXaXRoKCB0aGlzLmNoaWxkTm9kZXMgKTtcblx0XHR9ICk7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn0gKTtcblxuXG5qUXVlcnkuZXhwci5wc2V1ZG9zLmhpZGRlbiA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4gIWpRdWVyeS5leHByLnBzZXVkb3MudmlzaWJsZSggZWxlbSApO1xufTtcbmpRdWVyeS5leHByLnBzZXVkb3MudmlzaWJsZSA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4gISEoIGVsZW0ub2Zmc2V0V2lkdGggfHwgZWxlbS5vZmZzZXRIZWlnaHQgfHwgZWxlbS5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCApO1xufTtcblxuXG5cblxualF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIgPSBmdW5jdGlvbigpIHtcblx0dHJ5IHtcblx0XHRyZXR1cm4gbmV3IHdpbmRvdy5YTUxIdHRwUmVxdWVzdCgpO1xuXHR9IGNhdGNoICggZSApIHt9XG59O1xuXG52YXIgeGhyU3VjY2Vzc1N0YXR1cyA9IHtcblxuXHRcdC8vIEZpbGUgcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgY29kZSAwLCBhc3N1bWUgMjAwXG5cdFx0MDogMjAwLFxuXG5cdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHQvLyAjMTQ1MDogc29tZXRpbWVzIElFIHJldHVybnMgMTIyMyB3aGVuIGl0IHNob3VsZCBiZSAyMDRcblx0XHQxMjIzOiAyMDRcblx0fSxcblx0eGhyU3VwcG9ydGVkID0galF1ZXJ5LmFqYXhTZXR0aW5ncy54aHIoKTtcblxuc3VwcG9ydC5jb3JzID0gISF4aHJTdXBwb3J0ZWQgJiYgKCBcIndpdGhDcmVkZW50aWFsc1wiIGluIHhoclN1cHBvcnRlZCApO1xuc3VwcG9ydC5hamF4ID0geGhyU3VwcG9ydGVkID0gISF4aHJTdXBwb3J0ZWQ7XG5cbmpRdWVyeS5hamF4VHJhbnNwb3J0KCBmdW5jdGlvbiggb3B0aW9ucyApIHtcblx0dmFyIGNhbGxiYWNrLCBlcnJvckNhbGxiYWNrO1xuXG5cdC8vIENyb3NzIGRvbWFpbiBvbmx5IGFsbG93ZWQgaWYgc3VwcG9ydGVkIHRocm91Z2ggWE1MSHR0cFJlcXVlc3Rcblx0aWYgKCBzdXBwb3J0LmNvcnMgfHwgeGhyU3VwcG9ydGVkICYmICFvcHRpb25zLmNyb3NzRG9tYWluICkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRzZW5kOiBmdW5jdGlvbiggaGVhZGVycywgY29tcGxldGUgKSB7XG5cdFx0XHRcdHZhciBpLFxuXHRcdFx0XHRcdHhociA9IG9wdGlvbnMueGhyKCk7XG5cblx0XHRcdFx0eGhyLm9wZW4oXG5cdFx0XHRcdFx0b3B0aW9ucy50eXBlLFxuXHRcdFx0XHRcdG9wdGlvbnMudXJsLFxuXHRcdFx0XHRcdG9wdGlvbnMuYXN5bmMsXG5cdFx0XHRcdFx0b3B0aW9ucy51c2VybmFtZSxcblx0XHRcdFx0XHRvcHRpb25zLnBhc3N3b3JkXG5cdFx0XHRcdCk7XG5cblx0XHRcdFx0Ly8gQXBwbHkgY3VzdG9tIGZpZWxkcyBpZiBwcm92aWRlZFxuXHRcdFx0XHRpZiAoIG9wdGlvbnMueGhyRmllbGRzICkge1xuXHRcdFx0XHRcdGZvciAoIGkgaW4gb3B0aW9ucy54aHJGaWVsZHMgKSB7XG5cdFx0XHRcdFx0XHR4aHJbIGkgXSA9IG9wdGlvbnMueGhyRmllbGRzWyBpIF07XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gT3ZlcnJpZGUgbWltZSB0eXBlIGlmIG5lZWRlZFxuXHRcdFx0XHRpZiAoIG9wdGlvbnMubWltZVR5cGUgJiYgeGhyLm92ZXJyaWRlTWltZVR5cGUgKSB7XG5cdFx0XHRcdFx0eGhyLm92ZXJyaWRlTWltZVR5cGUoIG9wdGlvbnMubWltZVR5cGUgKTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIFgtUmVxdWVzdGVkLVdpdGggaGVhZGVyXG5cdFx0XHRcdC8vIEZvciBjcm9zcy1kb21haW4gcmVxdWVzdHMsIHNlZWluZyBhcyBjb25kaXRpb25zIGZvciBhIHByZWZsaWdodCBhcmVcblx0XHRcdFx0Ly8gYWtpbiB0byBhIGppZ3NhdyBwdXp6bGUsIHdlIHNpbXBseSBuZXZlciBzZXQgaXQgdG8gYmUgc3VyZS5cblx0XHRcdFx0Ly8gKGl0IGNhbiBhbHdheXMgYmUgc2V0IG9uIGEgcGVyLXJlcXVlc3QgYmFzaXMgb3IgZXZlbiB1c2luZyBhamF4U2V0dXApXG5cdFx0XHRcdC8vIEZvciBzYW1lLWRvbWFpbiByZXF1ZXN0cywgd29uJ3QgY2hhbmdlIGhlYWRlciBpZiBhbHJlYWR5IHByb3ZpZGVkLlxuXHRcdFx0XHRpZiAoICFvcHRpb25zLmNyb3NzRG9tYWluICYmICFoZWFkZXJzWyBcIlgtUmVxdWVzdGVkLVdpdGhcIiBdICkge1xuXHRcdFx0XHRcdGhlYWRlcnNbIFwiWC1SZXF1ZXN0ZWQtV2l0aFwiIF0gPSBcIlhNTEh0dHBSZXF1ZXN0XCI7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBTZXQgaGVhZGVyc1xuXHRcdFx0XHRmb3IgKCBpIGluIGhlYWRlcnMgKSB7XG5cdFx0XHRcdFx0eGhyLnNldFJlcXVlc3RIZWFkZXIoIGksIGhlYWRlcnNbIGkgXSApO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0Ly8gQ2FsbGJhY2tcblx0XHRcdFx0Y2FsbGJhY2sgPSBmdW5jdGlvbiggdHlwZSApIHtcblx0XHRcdFx0XHRyZXR1cm4gZnVuY3Rpb24oKSB7XG5cdFx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0XHRjYWxsYmFjayA9IGVycm9yQ2FsbGJhY2sgPSB4aHIub25sb2FkID1cblx0XHRcdFx0XHRcdFx0XHR4aHIub25lcnJvciA9IHhoci5vbmFib3J0ID0geGhyLm9udGltZW91dCA9XG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gbnVsbDtcblxuXHRcdFx0XHRcdFx0XHRpZiAoIHR5cGUgPT09IFwiYWJvcnRcIiApIHtcblx0XHRcdFx0XHRcdFx0XHR4aHIuYWJvcnQoKTtcblx0XHRcdFx0XHRcdFx0fSBlbHNlIGlmICggdHlwZSA9PT0gXCJlcnJvclwiICkge1xuXG5cdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHRcdFx0XHQvLyBPbiBhIG1hbnVhbCBuYXRpdmUgYWJvcnQsIElFOSB0aHJvd3Ncblx0XHRcdFx0XHRcdFx0XHQvLyBlcnJvcnMgb24gYW55IHByb3BlcnR5IGFjY2VzcyB0aGF0IGlzIG5vdCByZWFkeVN0YXRlXG5cdFx0XHRcdFx0XHRcdFx0aWYgKCB0eXBlb2YgeGhyLnN0YXR1cyAhPT0gXCJudW1iZXJcIiApIHtcblx0XHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKCAwLCBcImVycm9yXCIgKTtcblx0XHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdFx0Y29tcGxldGUoXG5cblx0XHRcdFx0XHRcdFx0XHRcdFx0Ly8gRmlsZTogcHJvdG9jb2wgYWx3YXlzIHlpZWxkcyBzdGF0dXMgMDsgc2VlICM4NjA1LCAjMTQyMDdcblx0XHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1cyxcblx0XHRcdFx0XHRcdFx0XHRcdFx0eGhyLnN0YXR1c1RleHRcblx0XHRcdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdFx0XHRcdGNvbXBsZXRlKFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyU3VjY2Vzc1N0YXR1c1sgeGhyLnN0YXR1cyBdIHx8IHhoci5zdGF0dXMsXG5cdFx0XHRcdFx0XHRcdFx0XHR4aHIuc3RhdHVzVGV4dCxcblxuXHRcdFx0XHRcdFx0XHRcdFx0Ly8gU3VwcG9ydDogSUUgPD05IG9ubHlcblx0XHRcdFx0XHRcdFx0XHRcdC8vIElFOSBoYXMgbm8gWEhSMiBidXQgdGhyb3dzIG9uIGJpbmFyeSAodHJhYy0xMTQyNilcblx0XHRcdFx0XHRcdFx0XHRcdC8vIEZvciBYSFIyIG5vbi10ZXh0LCBsZXQgdGhlIGNhbGxlciBoYW5kbGUgaXQgKGdoLTI0OTgpXG5cdFx0XHRcdFx0XHRcdFx0XHQoIHhoci5yZXNwb25zZVR5cGUgfHwgXCJ0ZXh0XCIgKSAhPT0gXCJ0ZXh0XCIgIHx8XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlb2YgeGhyLnJlc3BvbnNlVGV4dCAhPT0gXCJzdHJpbmdcIiA/XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsgYmluYXJ5OiB4aHIucmVzcG9uc2UgfSA6XG5cdFx0XHRcdFx0XHRcdFx0XHRcdHsgdGV4dDogeGhyLnJlc3BvbnNlVGV4dCB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0eGhyLmdldEFsbFJlc3BvbnNlSGVhZGVycygpXG5cdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH07XG5cblx0XHRcdFx0Ly8gTGlzdGVuIHRvIGV2ZW50c1xuXHRcdFx0XHR4aHIub25sb2FkID0gY2FsbGJhY2soKTtcblx0XHRcdFx0ZXJyb3JDYWxsYmFjayA9IHhoci5vbmVycm9yID0geGhyLm9udGltZW91dCA9IGNhbGxiYWNrKCBcImVycm9yXCIgKTtcblxuXHRcdFx0XHQvLyBTdXBwb3J0OiBJRSA5IG9ubHlcblx0XHRcdFx0Ly8gVXNlIG9ucmVhZHlzdGF0ZWNoYW5nZSB0byByZXBsYWNlIG9uYWJvcnRcblx0XHRcdFx0Ly8gdG8gaGFuZGxlIHVuY2F1Z2h0IGFib3J0c1xuXHRcdFx0XHRpZiAoIHhoci5vbmFib3J0ICE9PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdFx0eGhyLm9uYWJvcnQgPSBlcnJvckNhbGxiYWNrO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHhoci5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5jdGlvbigpIHtcblxuXHRcdFx0XHRcdFx0Ly8gQ2hlY2sgcmVhZHlTdGF0ZSBiZWZvcmUgdGltZW91dCBhcyBpdCBjaGFuZ2VzXG5cdFx0XHRcdFx0XHRpZiAoIHhoci5yZWFkeVN0YXRlID09PSA0ICkge1xuXG5cdFx0XHRcdFx0XHRcdC8vIEFsbG93IG9uZXJyb3IgdG8gYmUgY2FsbGVkIGZpcnN0LFxuXHRcdFx0XHRcdFx0XHQvLyBidXQgdGhhdCB3aWxsIG5vdCBoYW5kbGUgYSBuYXRpdmUgYWJvcnRcblx0XHRcdFx0XHRcdFx0Ly8gQWxzbywgc2F2ZSBlcnJvckNhbGxiYWNrIHRvIGEgdmFyaWFibGVcblx0XHRcdFx0XHRcdFx0Ly8gYXMgeGhyLm9uZXJyb3IgY2Fubm90IGJlIGFjY2Vzc2VkXG5cdFx0XHRcdFx0XHRcdHdpbmRvdy5zZXRUaW1lb3V0KCBmdW5jdGlvbigpIHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoIGNhbGxiYWNrICkge1xuXHRcdFx0XHRcdFx0XHRcdFx0ZXJyb3JDYWxsYmFjaygpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0fSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH07XG5cdFx0XHRcdH1cblxuXHRcdFx0XHQvLyBDcmVhdGUgdGhlIGFib3J0IGNhbGxiYWNrXG5cdFx0XHRcdGNhbGxiYWNrID0gY2FsbGJhY2soIFwiYWJvcnRcIiApO1xuXG5cdFx0XHRcdHRyeSB7XG5cblx0XHRcdFx0XHQvLyBEbyBzZW5kIHRoZSByZXF1ZXN0ICh0aGlzIG1heSByYWlzZSBhbiBleGNlcHRpb24pXG5cdFx0XHRcdFx0eGhyLnNlbmQoIG9wdGlvbnMuaGFzQ29udGVudCAmJiBvcHRpb25zLmRhdGEgfHwgbnVsbCApO1xuXHRcdFx0XHR9IGNhdGNoICggZSApIHtcblxuXHRcdFx0XHRcdC8vICMxNDY4MzogT25seSByZXRocm93IGlmIHRoaXMgaGFzbid0IGJlZW4gbm90aWZpZWQgYXMgYW4gZXJyb3IgeWV0XG5cdFx0XHRcdFx0aWYgKCBjYWxsYmFjayApIHtcblx0XHRcdFx0XHRcdHRocm93IGU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHRhYm9ydDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxuLy8gUHJldmVudCBhdXRvLWV4ZWN1dGlvbiBvZiBzY3JpcHRzIHdoZW4gbm8gZXhwbGljaXQgZGF0YVR5cGUgd2FzIHByb3ZpZGVkIChTZWUgZ2gtMjQzMilcbmpRdWVyeS5hamF4UHJlZmlsdGVyKCBmdW5jdGlvbiggcyApIHtcblx0aWYgKCBzLmNyb3NzRG9tYWluICkge1xuXHRcdHMuY29udGVudHMuc2NyaXB0ID0gZmFsc2U7XG5cdH1cbn0gKTtcblxuLy8gSW5zdGFsbCBzY3JpcHQgZGF0YVR5cGVcbmpRdWVyeS5hamF4U2V0dXAoIHtcblx0YWNjZXB0czoge1xuXHRcdHNjcmlwdDogXCJ0ZXh0L2phdmFzY3JpcHQsIGFwcGxpY2F0aW9uL2phdmFzY3JpcHQsIFwiICtcblx0XHRcdFwiYXBwbGljYXRpb24vZWNtYXNjcmlwdCwgYXBwbGljYXRpb24veC1lY21hc2NyaXB0XCJcblx0fSxcblx0Y29udGVudHM6IHtcblx0XHRzY3JpcHQ6IC9cXGIoPzpqYXZhfGVjbWEpc2NyaXB0XFxiL1xuXHR9LFxuXHRjb252ZXJ0ZXJzOiB7XG5cdFx0XCJ0ZXh0IHNjcmlwdFwiOiBmdW5jdGlvbiggdGV4dCApIHtcblx0XHRcdGpRdWVyeS5nbG9iYWxFdmFsKCB0ZXh0ICk7XG5cdFx0XHRyZXR1cm4gdGV4dDtcblx0XHR9XG5cdH1cbn0gKTtcblxuLy8gSGFuZGxlIGNhY2hlJ3Mgc3BlY2lhbCBjYXNlIGFuZCBjcm9zc0RvbWFpblxualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIFwic2NyaXB0XCIsIGZ1bmN0aW9uKCBzICkge1xuXHRpZiAoIHMuY2FjaGUgPT09IHVuZGVmaW5lZCApIHtcblx0XHRzLmNhY2hlID0gZmFsc2U7XG5cdH1cblx0aWYgKCBzLmNyb3NzRG9tYWluICkge1xuXHRcdHMudHlwZSA9IFwiR0VUXCI7XG5cdH1cbn0gKTtcblxuLy8gQmluZCBzY3JpcHQgdGFnIGhhY2sgdHJhbnNwb3J0XG5qUXVlcnkuYWpheFRyYW5zcG9ydCggXCJzY3JpcHRcIiwgZnVuY3Rpb24oIHMgKSB7XG5cblx0Ly8gVGhpcyB0cmFuc3BvcnQgb25seSBkZWFscyB3aXRoIGNyb3NzIGRvbWFpbiBvciBmb3JjZWQtYnktYXR0cnMgcmVxdWVzdHNcblx0aWYgKCBzLmNyb3NzRG9tYWluIHx8IHMuc2NyaXB0QXR0cnMgKSB7XG5cdFx0dmFyIHNjcmlwdCwgY2FsbGJhY2s7XG5cdFx0cmV0dXJuIHtcblx0XHRcdHNlbmQ6IGZ1bmN0aW9uKCBfLCBjb21wbGV0ZSApIHtcblx0XHRcdFx0c2NyaXB0ID0galF1ZXJ5KCBcIjxzY3JpcHQ+XCIgKVxuXHRcdFx0XHRcdC5hdHRyKCBzLnNjcmlwdEF0dHJzIHx8IHt9IClcblx0XHRcdFx0XHQucHJvcCggeyBjaGFyc2V0OiBzLnNjcmlwdENoYXJzZXQsIHNyYzogcy51cmwgfSApXG5cdFx0XHRcdFx0Lm9uKCBcImxvYWQgZXJyb3JcIiwgY2FsbGJhY2sgPSBmdW5jdGlvbiggZXZ0ICkge1xuXHRcdFx0XHRcdFx0c2NyaXB0LnJlbW92ZSgpO1xuXHRcdFx0XHRcdFx0Y2FsbGJhY2sgPSBudWxsO1xuXHRcdFx0XHRcdFx0aWYgKCBldnQgKSB7XG5cdFx0XHRcdFx0XHRcdGNvbXBsZXRlKCBldnQudHlwZSA9PT0gXCJlcnJvclwiID8gNDA0IDogMjAwLCBldnQudHlwZSApO1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdH0gKTtcblxuXHRcdFx0XHQvLyBVc2UgbmF0aXZlIERPTSBtYW5pcHVsYXRpb24gdG8gYXZvaWQgb3VyIGRvbU1hbmlwIEFKQVggdHJpY2tlcnlcblx0XHRcdFx0ZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZCggc2NyaXB0WyAwIF0gKTtcblx0XHRcdH0sXG5cdFx0XHRhYm9ydDogZnVuY3Rpb24oKSB7XG5cdFx0XHRcdGlmICggY2FsbGJhY2sgKSB7XG5cdFx0XHRcdFx0Y2FsbGJhY2soKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH07XG5cdH1cbn0gKTtcblxuXG5cblxudmFyIG9sZENhbGxiYWNrcyA9IFtdLFxuXHRyanNvbnAgPSAvKD0pXFw/KD89JnwkKXxcXD9cXD8vO1xuXG4vLyBEZWZhdWx0IGpzb25wIHNldHRpbmdzXG5qUXVlcnkuYWpheFNldHVwKCB7XG5cdGpzb25wOiBcImNhbGxiYWNrXCIsXG5cdGpzb25wQ2FsbGJhY2s6IGZ1bmN0aW9uKCkge1xuXHRcdHZhciBjYWxsYmFjayA9IG9sZENhbGxiYWNrcy5wb3AoKSB8fCAoIGpRdWVyeS5leHBhbmRvICsgXCJfXCIgKyAoIG5vbmNlLmd1aWQrKyApICk7XG5cdFx0dGhpc1sgY2FsbGJhY2sgXSA9IHRydWU7XG5cdFx0cmV0dXJuIGNhbGxiYWNrO1xuXHR9XG59ICk7XG5cbi8vIERldGVjdCwgbm9ybWFsaXplIG9wdGlvbnMgYW5kIGluc3RhbGwgY2FsbGJhY2tzIGZvciBqc29ucCByZXF1ZXN0c1xualF1ZXJ5LmFqYXhQcmVmaWx0ZXIoIFwianNvbiBqc29ucFwiLCBmdW5jdGlvbiggcywgb3JpZ2luYWxTZXR0aW5ncywganFYSFIgKSB7XG5cblx0dmFyIGNhbGxiYWNrTmFtZSwgb3ZlcndyaXR0ZW4sIHJlc3BvbnNlQ29udGFpbmVyLFxuXHRcdGpzb25Qcm9wID0gcy5qc29ucCAhPT0gZmFsc2UgJiYgKCByanNvbnAudGVzdCggcy51cmwgKSA/XG5cdFx0XHRcInVybFwiIDpcblx0XHRcdHR5cGVvZiBzLmRhdGEgPT09IFwic3RyaW5nXCIgJiZcblx0XHRcdFx0KCBzLmNvbnRlbnRUeXBlIHx8IFwiXCIgKVxuXHRcdFx0XHRcdC5pbmRleE9mKCBcImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZFwiICkgPT09IDAgJiZcblx0XHRcdFx0cmpzb25wLnRlc3QoIHMuZGF0YSApICYmIFwiZGF0YVwiXG5cdFx0KTtcblxuXHQvLyBIYW5kbGUgaWZmIHRoZSBleHBlY3RlZCBkYXRhIHR5cGUgaXMgXCJqc29ucFwiIG9yIHdlIGhhdmUgYSBwYXJhbWV0ZXIgdG8gc2V0XG5cdGlmICgganNvblByb3AgfHwgcy5kYXRhVHlwZXNbIDAgXSA9PT0gXCJqc29ucFwiICkge1xuXG5cdFx0Ly8gR2V0IGNhbGxiYWNrIG5hbWUsIHJlbWVtYmVyaW5nIHByZWV4aXN0aW5nIHZhbHVlIGFzc29jaWF0ZWQgd2l0aCBpdFxuXHRcdGNhbGxiYWNrTmFtZSA9IHMuanNvbnBDYWxsYmFjayA9IGlzRnVuY3Rpb24oIHMuanNvbnBDYWxsYmFjayApID9cblx0XHRcdHMuanNvbnBDYWxsYmFjaygpIDpcblx0XHRcdHMuanNvbnBDYWxsYmFjaztcblxuXHRcdC8vIEluc2VydCBjYWxsYmFjayBpbnRvIHVybCBvciBmb3JtIGRhdGFcblx0XHRpZiAoIGpzb25Qcm9wICkge1xuXHRcdFx0c1sganNvblByb3AgXSA9IHNbIGpzb25Qcm9wIF0ucmVwbGFjZSggcmpzb25wLCBcIiQxXCIgKyBjYWxsYmFja05hbWUgKTtcblx0XHR9IGVsc2UgaWYgKCBzLmpzb25wICE9PSBmYWxzZSApIHtcblx0XHRcdHMudXJsICs9ICggcnF1ZXJ5LnRlc3QoIHMudXJsICkgPyBcIiZcIiA6IFwiP1wiICkgKyBzLmpzb25wICsgXCI9XCIgKyBjYWxsYmFja05hbWU7XG5cdFx0fVxuXG5cdFx0Ly8gVXNlIGRhdGEgY29udmVydGVyIHRvIHJldHJpZXZlIGpzb24gYWZ0ZXIgc2NyaXB0IGV4ZWN1dGlvblxuXHRcdHMuY29udmVydGVyc1sgXCJzY3JpcHQganNvblwiIF0gPSBmdW5jdGlvbigpIHtcblx0XHRcdGlmICggIXJlc3BvbnNlQ29udGFpbmVyICkge1xuXHRcdFx0XHRqUXVlcnkuZXJyb3IoIGNhbGxiYWNrTmFtZSArIFwiIHdhcyBub3QgY2FsbGVkXCIgKTtcblx0XHRcdH1cblx0XHRcdHJldHVybiByZXNwb25zZUNvbnRhaW5lclsgMCBdO1xuXHRcdH07XG5cblx0XHQvLyBGb3JjZSBqc29uIGRhdGFUeXBlXG5cdFx0cy5kYXRhVHlwZXNbIDAgXSA9IFwianNvblwiO1xuXG5cdFx0Ly8gSW5zdGFsbCBjYWxsYmFja1xuXHRcdG92ZXJ3cml0dGVuID0gd2luZG93WyBjYWxsYmFja05hbWUgXTtcblx0XHR3aW5kb3dbIGNhbGxiYWNrTmFtZSBdID0gZnVuY3Rpb24oKSB7XG5cdFx0XHRyZXNwb25zZUNvbnRhaW5lciA9IGFyZ3VtZW50cztcblx0XHR9O1xuXG5cdFx0Ly8gQ2xlYW4tdXAgZnVuY3Rpb24gKGZpcmVzIGFmdGVyIGNvbnZlcnRlcnMpXG5cdFx0anFYSFIuYWx3YXlzKCBmdW5jdGlvbigpIHtcblxuXHRcdFx0Ly8gSWYgcHJldmlvdXMgdmFsdWUgZGlkbid0IGV4aXN0IC0gcmVtb3ZlIGl0XG5cdFx0XHRpZiAoIG92ZXJ3cml0dGVuID09PSB1bmRlZmluZWQgKSB7XG5cdFx0XHRcdGpRdWVyeSggd2luZG93ICkucmVtb3ZlUHJvcCggY2FsbGJhY2tOYW1lICk7XG5cblx0XHRcdC8vIE90aGVyd2lzZSByZXN0b3JlIHByZWV4aXN0aW5nIHZhbHVlXG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHR3aW5kb3dbIGNhbGxiYWNrTmFtZSBdID0gb3ZlcndyaXR0ZW47XG5cdFx0XHR9XG5cblx0XHRcdC8vIFNhdmUgYmFjayBhcyBmcmVlXG5cdFx0XHRpZiAoIHNbIGNhbGxiYWNrTmFtZSBdICkge1xuXG5cdFx0XHRcdC8vIE1ha2Ugc3VyZSB0aGF0IHJlLXVzaW5nIHRoZSBvcHRpb25zIGRvZXNuJ3Qgc2NyZXcgdGhpbmdzIGFyb3VuZFxuXHRcdFx0XHRzLmpzb25wQ2FsbGJhY2sgPSBvcmlnaW5hbFNldHRpbmdzLmpzb25wQ2FsbGJhY2s7XG5cblx0XHRcdFx0Ly8gU2F2ZSB0aGUgY2FsbGJhY2sgbmFtZSBmb3IgZnV0dXJlIHVzZVxuXHRcdFx0XHRvbGRDYWxsYmFja3MucHVzaCggY2FsbGJhY2tOYW1lICk7XG5cdFx0XHR9XG5cblx0XHRcdC8vIENhbGwgaWYgaXQgd2FzIGEgZnVuY3Rpb24gYW5kIHdlIGhhdmUgYSByZXNwb25zZVxuXHRcdFx0aWYgKCByZXNwb25zZUNvbnRhaW5lciAmJiBpc0Z1bmN0aW9uKCBvdmVyd3JpdHRlbiApICkge1xuXHRcdFx0XHRvdmVyd3JpdHRlbiggcmVzcG9uc2VDb250YWluZXJbIDAgXSApO1xuXHRcdFx0fVxuXG5cdFx0XHRyZXNwb25zZUNvbnRhaW5lciA9IG92ZXJ3cml0dGVuID0gdW5kZWZpbmVkO1xuXHRcdH0gKTtcblxuXHRcdC8vIERlbGVnYXRlIHRvIHNjcmlwdFxuXHRcdHJldHVybiBcInNjcmlwdFwiO1xuXHR9XG59ICk7XG5cblxuXG5cbi8vIFN1cHBvcnQ6IFNhZmFyaSA4IG9ubHlcbi8vIEluIFNhZmFyaSA4IGRvY3VtZW50cyBjcmVhdGVkIHZpYSBkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnRcbi8vIGNvbGxhcHNlIHNpYmxpbmcgZm9ybXM6IHRoZSBzZWNvbmQgb25lIGJlY29tZXMgYSBjaGlsZCBvZiB0aGUgZmlyc3Qgb25lLlxuLy8gQmVjYXVzZSBvZiB0aGF0LCB0aGlzIHNlY3VyaXR5IG1lYXN1cmUgaGFzIHRvIGJlIGRpc2FibGVkIGluIFNhZmFyaSA4LlxuLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNzMzN1xuc3VwcG9ydC5jcmVhdGVIVE1MRG9jdW1lbnQgPSAoIGZ1bmN0aW9uKCkge1xuXHR2YXIgYm9keSA9IGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCggXCJcIiApLmJvZHk7XG5cdGJvZHkuaW5uZXJIVE1MID0gXCI8Zm9ybT48L2Zvcm0+PGZvcm0+PC9mb3JtPlwiO1xuXHRyZXR1cm4gYm9keS5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMjtcbn0gKSgpO1xuXG5cbi8vIEFyZ3VtZW50IFwiZGF0YVwiIHNob3VsZCBiZSBzdHJpbmcgb2YgaHRtbFxuLy8gY29udGV4dCAob3B0aW9uYWwpOiBJZiBzcGVjaWZpZWQsIHRoZSBmcmFnbWVudCB3aWxsIGJlIGNyZWF0ZWQgaW4gdGhpcyBjb250ZXh0LFxuLy8gZGVmYXVsdHMgdG8gZG9jdW1lbnRcbi8vIGtlZXBTY3JpcHRzIChvcHRpb25hbCk6IElmIHRydWUsIHdpbGwgaW5jbHVkZSBzY3JpcHRzIHBhc3NlZCBpbiB0aGUgaHRtbCBzdHJpbmdcbmpRdWVyeS5wYXJzZUhUTUwgPSBmdW5jdGlvbiggZGF0YSwgY29udGV4dCwga2VlcFNjcmlwdHMgKSB7XG5cdGlmICggdHlwZW9mIGRhdGEgIT09IFwic3RyaW5nXCIgKSB7XG5cdFx0cmV0dXJuIFtdO1xuXHR9XG5cdGlmICggdHlwZW9mIGNvbnRleHQgPT09IFwiYm9vbGVhblwiICkge1xuXHRcdGtlZXBTY3JpcHRzID0gY29udGV4dDtcblx0XHRjb250ZXh0ID0gZmFsc2U7XG5cdH1cblxuXHR2YXIgYmFzZSwgcGFyc2VkLCBzY3JpcHRzO1xuXG5cdGlmICggIWNvbnRleHQgKSB7XG5cblx0XHQvLyBTdG9wIHNjcmlwdHMgb3IgaW5saW5lIGV2ZW50IGhhbmRsZXJzIGZyb20gYmVpbmcgZXhlY3V0ZWQgaW1tZWRpYXRlbHlcblx0XHQvLyBieSB1c2luZyBkb2N1bWVudC5pbXBsZW1lbnRhdGlvblxuXHRcdGlmICggc3VwcG9ydC5jcmVhdGVIVE1MRG9jdW1lbnQgKSB7XG5cdFx0XHRjb250ZXh0ID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCBcIlwiICk7XG5cblx0XHRcdC8vIFNldCB0aGUgYmFzZSBocmVmIGZvciB0aGUgY3JlYXRlZCBkb2N1bWVudFxuXHRcdFx0Ly8gc28gYW55IHBhcnNlZCBlbGVtZW50cyB3aXRoIFVSTHNcblx0XHRcdC8vIGFyZSBiYXNlZCBvbiB0aGUgZG9jdW1lbnQncyBVUkwgKGdoLTI5NjUpXG5cdFx0XHRiYXNlID0gY29udGV4dC5jcmVhdGVFbGVtZW50KCBcImJhc2VcIiApO1xuXHRcdFx0YmFzZS5ocmVmID0gZG9jdW1lbnQubG9jYXRpb24uaHJlZjtcblx0XHRcdGNvbnRleHQuaGVhZC5hcHBlbmRDaGlsZCggYmFzZSApO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb250ZXh0ID0gZG9jdW1lbnQ7XG5cdFx0fVxuXHR9XG5cblx0cGFyc2VkID0gcnNpbmdsZVRhZy5leGVjKCBkYXRhICk7XG5cdHNjcmlwdHMgPSAha2VlcFNjcmlwdHMgJiYgW107XG5cblx0Ly8gU2luZ2xlIHRhZ1xuXHRpZiAoIHBhcnNlZCApIHtcblx0XHRyZXR1cm4gWyBjb250ZXh0LmNyZWF0ZUVsZW1lbnQoIHBhcnNlZFsgMSBdICkgXTtcblx0fVxuXG5cdHBhcnNlZCA9IGJ1aWxkRnJhZ21lbnQoIFsgZGF0YSBdLCBjb250ZXh0LCBzY3JpcHRzICk7XG5cblx0aWYgKCBzY3JpcHRzICYmIHNjcmlwdHMubGVuZ3RoICkge1xuXHRcdGpRdWVyeSggc2NyaXB0cyApLnJlbW92ZSgpO1xuXHR9XG5cblx0cmV0dXJuIGpRdWVyeS5tZXJnZSggW10sIHBhcnNlZC5jaGlsZE5vZGVzICk7XG59O1xuXG5cbi8qKlxuICogTG9hZCBhIHVybCBpbnRvIGEgcGFnZVxuICovXG5qUXVlcnkuZm4ubG9hZCA9IGZ1bmN0aW9uKCB1cmwsIHBhcmFtcywgY2FsbGJhY2sgKSB7XG5cdHZhciBzZWxlY3RvciwgdHlwZSwgcmVzcG9uc2UsXG5cdFx0c2VsZiA9IHRoaXMsXG5cdFx0b2ZmID0gdXJsLmluZGV4T2YoIFwiIFwiICk7XG5cblx0aWYgKCBvZmYgPiAtMSApIHtcblx0XHRzZWxlY3RvciA9IHN0cmlwQW5kQ29sbGFwc2UoIHVybC5zbGljZSggb2ZmICkgKTtcblx0XHR1cmwgPSB1cmwuc2xpY2UoIDAsIG9mZiApO1xuXHR9XG5cblx0Ly8gSWYgaXQncyBhIGZ1bmN0aW9uXG5cdGlmICggaXNGdW5jdGlvbiggcGFyYW1zICkgKSB7XG5cblx0XHQvLyBXZSBhc3N1bWUgdGhhdCBpdCdzIHRoZSBjYWxsYmFja1xuXHRcdGNhbGxiYWNrID0gcGFyYW1zO1xuXHRcdHBhcmFtcyA9IHVuZGVmaW5lZDtcblxuXHQvLyBPdGhlcndpc2UsIGJ1aWxkIGEgcGFyYW0gc3RyaW5nXG5cdH0gZWxzZSBpZiAoIHBhcmFtcyAmJiB0eXBlb2YgcGFyYW1zID09PSBcIm9iamVjdFwiICkge1xuXHRcdHR5cGUgPSBcIlBPU1RcIjtcblx0fVxuXG5cdC8vIElmIHdlIGhhdmUgZWxlbWVudHMgdG8gbW9kaWZ5LCBtYWtlIHRoZSByZXF1ZXN0XG5cdGlmICggc2VsZi5sZW5ndGggPiAwICkge1xuXHRcdGpRdWVyeS5hamF4KCB7XG5cdFx0XHR1cmw6IHVybCxcblxuXHRcdFx0Ly8gSWYgXCJ0eXBlXCIgdmFyaWFibGUgaXMgdW5kZWZpbmVkLCB0aGVuIFwiR0VUXCIgbWV0aG9kIHdpbGwgYmUgdXNlZC5cblx0XHRcdC8vIE1ha2UgdmFsdWUgb2YgdGhpcyBmaWVsZCBleHBsaWNpdCBzaW5jZVxuXHRcdFx0Ly8gdXNlciBjYW4gb3ZlcnJpZGUgaXQgdGhyb3VnaCBhamF4U2V0dXAgbWV0aG9kXG5cdFx0XHR0eXBlOiB0eXBlIHx8IFwiR0VUXCIsXG5cdFx0XHRkYXRhVHlwZTogXCJodG1sXCIsXG5cdFx0XHRkYXRhOiBwYXJhbXNcblx0XHR9ICkuZG9uZSggZnVuY3Rpb24oIHJlc3BvbnNlVGV4dCApIHtcblxuXHRcdFx0Ly8gU2F2ZSByZXNwb25zZSBmb3IgdXNlIGluIGNvbXBsZXRlIGNhbGxiYWNrXG5cdFx0XHRyZXNwb25zZSA9IGFyZ3VtZW50cztcblxuXHRcdFx0c2VsZi5odG1sKCBzZWxlY3RvciA/XG5cblx0XHRcdFx0Ly8gSWYgYSBzZWxlY3RvciB3YXMgc3BlY2lmaWVkLCBsb2NhdGUgdGhlIHJpZ2h0IGVsZW1lbnRzIGluIGEgZHVtbXkgZGl2XG5cdFx0XHRcdC8vIEV4Y2x1ZGUgc2NyaXB0cyB0byBhdm9pZCBJRSAnUGVybWlzc2lvbiBEZW5pZWQnIGVycm9yc1xuXHRcdFx0XHRqUXVlcnkoIFwiPGRpdj5cIiApLmFwcGVuZCggalF1ZXJ5LnBhcnNlSFRNTCggcmVzcG9uc2VUZXh0ICkgKS5maW5kKCBzZWxlY3RvciApIDpcblxuXHRcdFx0XHQvLyBPdGhlcndpc2UgdXNlIHRoZSBmdWxsIHJlc3VsdFxuXHRcdFx0XHRyZXNwb25zZVRleHQgKTtcblxuXHRcdC8vIElmIHRoZSByZXF1ZXN0IHN1Y2NlZWRzLCB0aGlzIGZ1bmN0aW9uIGdldHMgXCJkYXRhXCIsIFwic3RhdHVzXCIsIFwianFYSFJcIlxuXHRcdC8vIGJ1dCB0aGV5IGFyZSBpZ25vcmVkIGJlY2F1c2UgcmVzcG9uc2Ugd2FzIHNldCBhYm92ZS5cblx0XHQvLyBJZiBpdCBmYWlscywgdGhpcyBmdW5jdGlvbiBnZXRzIFwianFYSFJcIiwgXCJzdGF0dXNcIiwgXCJlcnJvclwiXG5cdFx0fSApLmFsd2F5cyggY2FsbGJhY2sgJiYgZnVuY3Rpb24oIGpxWEhSLCBzdGF0dXMgKSB7XG5cdFx0XHRzZWxmLmVhY2goIGZ1bmN0aW9uKCkge1xuXHRcdFx0XHRjYWxsYmFjay5hcHBseSggdGhpcywgcmVzcG9uc2UgfHwgWyBqcVhIUi5yZXNwb25zZVRleHQsIHN0YXR1cywganFYSFIgXSApO1xuXHRcdFx0fSApO1xuXHRcdH0gKTtcblx0fVxuXG5cdHJldHVybiB0aGlzO1xufTtcblxuXG5cblxualF1ZXJ5LmV4cHIucHNldWRvcy5hbmltYXRlZCA9IGZ1bmN0aW9uKCBlbGVtICkge1xuXHRyZXR1cm4galF1ZXJ5LmdyZXAoIGpRdWVyeS50aW1lcnMsIGZ1bmN0aW9uKCBmbiApIHtcblx0XHRyZXR1cm4gZWxlbSA9PT0gZm4uZWxlbTtcblx0fSApLmxlbmd0aDtcbn07XG5cblxuXG5cbmpRdWVyeS5vZmZzZXQgPSB7XG5cdHNldE9mZnNldDogZnVuY3Rpb24oIGVsZW0sIG9wdGlvbnMsIGkgKSB7XG5cdFx0dmFyIGN1clBvc2l0aW9uLCBjdXJMZWZ0LCBjdXJDU1NUb3AsIGN1clRvcCwgY3VyT2Zmc2V0LCBjdXJDU1NMZWZ0LCBjYWxjdWxhdGVQb3NpdGlvbixcblx0XHRcdHBvc2l0aW9uID0galF1ZXJ5LmNzcyggZWxlbSwgXCJwb3NpdGlvblwiICksXG5cdFx0XHRjdXJFbGVtID0galF1ZXJ5KCBlbGVtICksXG5cdFx0XHRwcm9wcyA9IHt9O1xuXG5cdFx0Ly8gU2V0IHBvc2l0aW9uIGZpcnN0LCBpbi1jYXNlIHRvcC9sZWZ0IGFyZSBzZXQgZXZlbiBvbiBzdGF0aWMgZWxlbVxuXHRcdGlmICggcG9zaXRpb24gPT09IFwic3RhdGljXCIgKSB7XG5cdFx0XHRlbGVtLnN0eWxlLnBvc2l0aW9uID0gXCJyZWxhdGl2ZVwiO1xuXHRcdH1cblxuXHRcdGN1ck9mZnNldCA9IGN1ckVsZW0ub2Zmc2V0KCk7XG5cdFx0Y3VyQ1NTVG9wID0galF1ZXJ5LmNzcyggZWxlbSwgXCJ0b3BcIiApO1xuXHRcdGN1ckNTU0xlZnQgPSBqUXVlcnkuY3NzKCBlbGVtLCBcImxlZnRcIiApO1xuXHRcdGNhbGN1bGF0ZVBvc2l0aW9uID0gKCBwb3NpdGlvbiA9PT0gXCJhYnNvbHV0ZVwiIHx8IHBvc2l0aW9uID09PSBcImZpeGVkXCIgKSAmJlxuXHRcdFx0KCBjdXJDU1NUb3AgKyBjdXJDU1NMZWZ0ICkuaW5kZXhPZiggXCJhdXRvXCIgKSA+IC0xO1xuXG5cdFx0Ly8gTmVlZCB0byBiZSBhYmxlIHRvIGNhbGN1bGF0ZSBwb3NpdGlvbiBpZiBlaXRoZXJcblx0XHQvLyB0b3Agb3IgbGVmdCBpcyBhdXRvIGFuZCBwb3NpdGlvbiBpcyBlaXRoZXIgYWJzb2x1dGUgb3IgZml4ZWRcblx0XHRpZiAoIGNhbGN1bGF0ZVBvc2l0aW9uICkge1xuXHRcdFx0Y3VyUG9zaXRpb24gPSBjdXJFbGVtLnBvc2l0aW9uKCk7XG5cdFx0XHRjdXJUb3AgPSBjdXJQb3NpdGlvbi50b3A7XG5cdFx0XHRjdXJMZWZ0ID0gY3VyUG9zaXRpb24ubGVmdDtcblxuXHRcdH0gZWxzZSB7XG5cdFx0XHRjdXJUb3AgPSBwYXJzZUZsb2F0KCBjdXJDU1NUb3AgKSB8fCAwO1xuXHRcdFx0Y3VyTGVmdCA9IHBhcnNlRmxvYXQoIGN1ckNTU0xlZnQgKSB8fCAwO1xuXHRcdH1cblxuXHRcdGlmICggaXNGdW5jdGlvbiggb3B0aW9ucyApICkge1xuXG5cdFx0XHQvLyBVc2UgalF1ZXJ5LmV4dGVuZCBoZXJlIHRvIGFsbG93IG1vZGlmaWNhdGlvbiBvZiBjb29yZGluYXRlcyBhcmd1bWVudCAoZ2gtMTg0OClcblx0XHRcdG9wdGlvbnMgPSBvcHRpb25zLmNhbGwoIGVsZW0sIGksIGpRdWVyeS5leHRlbmQoIHt9LCBjdXJPZmZzZXQgKSApO1xuXHRcdH1cblxuXHRcdGlmICggb3B0aW9ucy50b3AgIT0gbnVsbCApIHtcblx0XHRcdHByb3BzLnRvcCA9ICggb3B0aW9ucy50b3AgLSBjdXJPZmZzZXQudG9wICkgKyBjdXJUb3A7XG5cdFx0fVxuXHRcdGlmICggb3B0aW9ucy5sZWZ0ICE9IG51bGwgKSB7XG5cdFx0XHRwcm9wcy5sZWZ0ID0gKCBvcHRpb25zLmxlZnQgLSBjdXJPZmZzZXQubGVmdCApICsgY3VyTGVmdDtcblx0XHR9XG5cblx0XHRpZiAoIFwidXNpbmdcIiBpbiBvcHRpb25zICkge1xuXHRcdFx0b3B0aW9ucy51c2luZy5jYWxsKCBlbGVtLCBwcm9wcyApO1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdGN1ckVsZW0uY3NzKCBwcm9wcyApO1xuXHRcdH1cblx0fVxufTtcblxualF1ZXJ5LmZuLmV4dGVuZCgge1xuXG5cdC8vIG9mZnNldCgpIHJlbGF0ZXMgYW4gZWxlbWVudCdzIGJvcmRlciBib3ggdG8gdGhlIGRvY3VtZW50IG9yaWdpblxuXHRvZmZzZXQ6IGZ1bmN0aW9uKCBvcHRpb25zICkge1xuXG5cdFx0Ly8gUHJlc2VydmUgY2hhaW5pbmcgZm9yIHNldHRlclxuXHRcdGlmICggYXJndW1lbnRzLmxlbmd0aCApIHtcblx0XHRcdHJldHVybiBvcHRpb25zID09PSB1bmRlZmluZWQgP1xuXHRcdFx0XHR0aGlzIDpcblx0XHRcdFx0dGhpcy5lYWNoKCBmdW5jdGlvbiggaSApIHtcblx0XHRcdFx0XHRqUXVlcnkub2Zmc2V0LnNldE9mZnNldCggdGhpcywgb3B0aW9ucywgaSApO1xuXHRcdFx0XHR9ICk7XG5cdFx0fVxuXG5cdFx0dmFyIHJlY3QsIHdpbixcblx0XHRcdGVsZW0gPSB0aGlzWyAwIF07XG5cblx0XHRpZiAoICFlbGVtICkge1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblxuXHRcdC8vIFJldHVybiB6ZXJvcyBmb3IgZGlzY29ubmVjdGVkIGFuZCBoaWRkZW4gKGRpc3BsYXk6IG5vbmUpIGVsZW1lbnRzIChnaC0yMzEwKVxuXHRcdC8vIFN1cHBvcnQ6IElFIDw9MTEgb25seVxuXHRcdC8vIFJ1bm5pbmcgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IG9uIGFcblx0XHQvLyBkaXNjb25uZWN0ZWQgbm9kZSBpbiBJRSB0aHJvd3MgYW4gZXJyb3Jcblx0XHRpZiAoICFlbGVtLmdldENsaWVudFJlY3RzKCkubGVuZ3RoICkge1xuXHRcdFx0cmV0dXJuIHsgdG9wOiAwLCBsZWZ0OiAwIH07XG5cdFx0fVxuXG5cdFx0Ly8gR2V0IGRvY3VtZW50LXJlbGF0aXZlIHBvc2l0aW9uIGJ5IGFkZGluZyB2aWV3cG9ydCBzY3JvbGwgdG8gdmlld3BvcnQtcmVsYXRpdmUgZ0JDUlxuXHRcdHJlY3QgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXHRcdHdpbiA9IGVsZW0ub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlldztcblx0XHRyZXR1cm4ge1xuXHRcdFx0dG9wOiByZWN0LnRvcCArIHdpbi5wYWdlWU9mZnNldCxcblx0XHRcdGxlZnQ6IHJlY3QubGVmdCArIHdpbi5wYWdlWE9mZnNldFxuXHRcdH07XG5cdH0sXG5cblx0Ly8gcG9zaXRpb24oKSByZWxhdGVzIGFuIGVsZW1lbnQncyBtYXJnaW4gYm94IHRvIGl0cyBvZmZzZXQgcGFyZW50J3MgcGFkZGluZyBib3hcblx0Ly8gVGhpcyBjb3JyZXNwb25kcyB0byB0aGUgYmVoYXZpb3Igb2YgQ1NTIGFic29sdXRlIHBvc2l0aW9uaW5nXG5cdHBvc2l0aW9uOiBmdW5jdGlvbigpIHtcblx0XHRpZiAoICF0aGlzWyAwIF0gKSB7XG5cdFx0XHRyZXR1cm47XG5cdFx0fVxuXG5cdFx0dmFyIG9mZnNldFBhcmVudCwgb2Zmc2V0LCBkb2MsXG5cdFx0XHRlbGVtID0gdGhpc1sgMCBdLFxuXHRcdFx0cGFyZW50T2Zmc2V0ID0geyB0b3A6IDAsIGxlZnQ6IDAgfTtcblxuXHRcdC8vIHBvc2l0aW9uOmZpeGVkIGVsZW1lbnRzIGFyZSBvZmZzZXQgZnJvbSB0aGUgdmlld3BvcnQsIHdoaWNoIGl0c2VsZiBhbHdheXMgaGFzIHplcm8gb2Zmc2V0XG5cdFx0aWYgKCBqUXVlcnkuY3NzKCBlbGVtLCBcInBvc2l0aW9uXCIgKSA9PT0gXCJmaXhlZFwiICkge1xuXG5cdFx0XHQvLyBBc3N1bWUgcG9zaXRpb246Zml4ZWQgaW1wbGllcyBhdmFpbGFiaWxpdHkgb2YgZ2V0Qm91bmRpbmdDbGllbnRSZWN0XG5cdFx0XHRvZmZzZXQgPSBlbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG5cdFx0fSBlbHNlIHtcblx0XHRcdG9mZnNldCA9IHRoaXMub2Zmc2V0KCk7XG5cblx0XHRcdC8vIEFjY291bnQgZm9yIHRoZSAqcmVhbCogb2Zmc2V0IHBhcmVudCwgd2hpY2ggY2FuIGJlIHRoZSBkb2N1bWVudCBvciBpdHMgcm9vdCBlbGVtZW50XG5cdFx0XHQvLyB3aGVuIGEgc3RhdGljYWxseSBwb3NpdGlvbmVkIGVsZW1lbnQgaXMgaWRlbnRpZmllZFxuXHRcdFx0ZG9jID0gZWxlbS5vd25lckRvY3VtZW50O1xuXHRcdFx0b2Zmc2V0UGFyZW50ID0gZWxlbS5vZmZzZXRQYXJlbnQgfHwgZG9jLmRvY3VtZW50RWxlbWVudDtcblx0XHRcdHdoaWxlICggb2Zmc2V0UGFyZW50ICYmXG5cdFx0XHRcdCggb2Zmc2V0UGFyZW50ID09PSBkb2MuYm9keSB8fCBvZmZzZXRQYXJlbnQgPT09IGRvYy5kb2N1bWVudEVsZW1lbnQgKSAmJlxuXHRcdFx0XHRqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwicG9zaXRpb25cIiApID09PSBcInN0YXRpY1wiICkge1xuXG5cdFx0XHRcdG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudC5wYXJlbnROb2RlO1xuXHRcdFx0fVxuXHRcdFx0aWYgKCBvZmZzZXRQYXJlbnQgJiYgb2Zmc2V0UGFyZW50ICE9PSBlbGVtICYmIG9mZnNldFBhcmVudC5ub2RlVHlwZSA9PT0gMSApIHtcblxuXHRcdFx0XHQvLyBJbmNvcnBvcmF0ZSBib3JkZXJzIGludG8gaXRzIG9mZnNldCwgc2luY2UgdGhleSBhcmUgb3V0c2lkZSBpdHMgY29udGVudCBvcmlnaW5cblx0XHRcdFx0cGFyZW50T2Zmc2V0ID0galF1ZXJ5KCBvZmZzZXRQYXJlbnQgKS5vZmZzZXQoKTtcblx0XHRcdFx0cGFyZW50T2Zmc2V0LnRvcCArPSBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwiYm9yZGVyVG9wV2lkdGhcIiwgdHJ1ZSApO1xuXHRcdFx0XHRwYXJlbnRPZmZzZXQubGVmdCArPSBqUXVlcnkuY3NzKCBvZmZzZXRQYXJlbnQsIFwiYm9yZGVyTGVmdFdpZHRoXCIsIHRydWUgKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBTdWJ0cmFjdCBwYXJlbnQgb2Zmc2V0cyBhbmQgZWxlbWVudCBtYXJnaW5zXG5cdFx0cmV0dXJuIHtcblx0XHRcdHRvcDogb2Zmc2V0LnRvcCAtIHBhcmVudE9mZnNldC50b3AgLSBqUXVlcnkuY3NzKCBlbGVtLCBcIm1hcmdpblRvcFwiLCB0cnVlICksXG5cdFx0XHRsZWZ0OiBvZmZzZXQubGVmdCAtIHBhcmVudE9mZnNldC5sZWZ0IC0galF1ZXJ5LmNzcyggZWxlbSwgXCJtYXJnaW5MZWZ0XCIsIHRydWUgKVxuXHRcdH07XG5cdH0sXG5cblx0Ly8gVGhpcyBtZXRob2Qgd2lsbCByZXR1cm4gZG9jdW1lbnRFbGVtZW50IGluIHRoZSBmb2xsb3dpbmcgY2FzZXM6XG5cdC8vIDEpIEZvciB0aGUgZWxlbWVudCBpbnNpZGUgdGhlIGlmcmFtZSB3aXRob3V0IG9mZnNldFBhcmVudCwgdGhpcyBtZXRob2Qgd2lsbCByZXR1cm5cblx0Ly8gICAgZG9jdW1lbnRFbGVtZW50IG9mIHRoZSBwYXJlbnQgd2luZG93XG5cdC8vIDIpIEZvciB0aGUgaGlkZGVuIG9yIGRldGFjaGVkIGVsZW1lbnRcblx0Ly8gMykgRm9yIGJvZHkgb3IgaHRtbCBlbGVtZW50LCBpLmUuIGluIGNhc2Ugb2YgdGhlIGh0bWwgbm9kZSAtIGl0IHdpbGwgcmV0dXJuIGl0c2VsZlxuXHQvL1xuXHQvLyBidXQgdGhvc2UgZXhjZXB0aW9ucyB3ZXJlIG5ldmVyIHByZXNlbnRlZCBhcyBhIHJlYWwgbGlmZSB1c2UtY2FzZXNcblx0Ly8gYW5kIG1pZ2h0IGJlIGNvbnNpZGVyZWQgYXMgbW9yZSBwcmVmZXJhYmxlIHJlc3VsdHMuXG5cdC8vXG5cdC8vIFRoaXMgbG9naWMsIGhvd2V2ZXIsIGlzIG5vdCBndWFyYW50ZWVkIGFuZCBjYW4gY2hhbmdlIGF0IGFueSBwb2ludCBpbiB0aGUgZnV0dXJlXG5cdG9mZnNldFBhcmVudDogZnVuY3Rpb24oKSB7XG5cdFx0cmV0dXJuIHRoaXMubWFwKCBmdW5jdGlvbigpIHtcblx0XHRcdHZhciBvZmZzZXRQYXJlbnQgPSB0aGlzLm9mZnNldFBhcmVudDtcblxuXHRcdFx0d2hpbGUgKCBvZmZzZXRQYXJlbnQgJiYgalF1ZXJ5LmNzcyggb2Zmc2V0UGFyZW50LCBcInBvc2l0aW9uXCIgKSA9PT0gXCJzdGF0aWNcIiApIHtcblx0XHRcdFx0b2Zmc2V0UGFyZW50ID0gb2Zmc2V0UGFyZW50Lm9mZnNldFBhcmVudDtcblx0XHRcdH1cblxuXHRcdFx0cmV0dXJuIG9mZnNldFBhcmVudCB8fCBkb2N1bWVudEVsZW1lbnQ7XG5cdFx0fSApO1xuXHR9XG59ICk7XG5cbi8vIENyZWF0ZSBzY3JvbGxMZWZ0IGFuZCBzY3JvbGxUb3AgbWV0aG9kc1xualF1ZXJ5LmVhY2goIHsgc2Nyb2xsTGVmdDogXCJwYWdlWE9mZnNldFwiLCBzY3JvbGxUb3A6IFwicGFnZVlPZmZzZXRcIiB9LCBmdW5jdGlvbiggbWV0aG9kLCBwcm9wICkge1xuXHR2YXIgdG9wID0gXCJwYWdlWU9mZnNldFwiID09PSBwcm9wO1xuXG5cdGpRdWVyeS5mblsgbWV0aG9kIF0gPSBmdW5jdGlvbiggdmFsICkge1xuXHRcdHJldHVybiBhY2Nlc3MoIHRoaXMsIGZ1bmN0aW9uKCBlbGVtLCBtZXRob2QsIHZhbCApIHtcblxuXHRcdFx0Ly8gQ29hbGVzY2UgZG9jdW1lbnRzIGFuZCB3aW5kb3dzXG5cdFx0XHR2YXIgd2luO1xuXHRcdFx0aWYgKCBpc1dpbmRvdyggZWxlbSApICkge1xuXHRcdFx0XHR3aW4gPSBlbGVtO1xuXHRcdFx0fSBlbHNlIGlmICggZWxlbS5ub2RlVHlwZSA9PT0gOSApIHtcblx0XHRcdFx0d2luID0gZWxlbS5kZWZhdWx0Vmlldztcblx0XHRcdH1cblxuXHRcdFx0aWYgKCB2YWwgPT09IHVuZGVmaW5lZCApIHtcblx0XHRcdFx0cmV0dXJuIHdpbiA/IHdpblsgcHJvcCBdIDogZWxlbVsgbWV0aG9kIF07XG5cdFx0XHR9XG5cblx0XHRcdGlmICggd2luICkge1xuXHRcdFx0XHR3aW4uc2Nyb2xsVG8oXG5cdFx0XHRcdFx0IXRvcCA/IHZhbCA6IHdpbi5wYWdlWE9mZnNldCxcblx0XHRcdFx0XHR0b3AgPyB2YWwgOiB3aW4ucGFnZVlPZmZzZXRcblx0XHRcdFx0KTtcblxuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0ZWxlbVsgbWV0aG9kIF0gPSB2YWw7XG5cdFx0XHR9XG5cdFx0fSwgbWV0aG9kLCB2YWwsIGFyZ3VtZW50cy5sZW5ndGggKTtcblx0fTtcbn0gKTtcblxuLy8gU3VwcG9ydDogU2FmYXJpIDw9NyAtIDkuMSwgQ2hyb21lIDw9MzcgLSA0OVxuLy8gQWRkIHRoZSB0b3AvbGVmdCBjc3NIb29rcyB1c2luZyBqUXVlcnkuZm4ucG9zaXRpb25cbi8vIFdlYmtpdCBidWc6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTA4NFxuLy8gQmxpbmsgYnVnOiBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvY2hyb21pdW0vaXNzdWVzL2RldGFpbD9pZD01ODkzNDdcbi8vIGdldENvbXB1dGVkU3R5bGUgcmV0dXJucyBwZXJjZW50IHdoZW4gc3BlY2lmaWVkIGZvciB0b3AvbGVmdC9ib3R0b20vcmlnaHQ7XG4vLyByYXRoZXIgdGhhbiBtYWtlIHRoZSBjc3MgbW9kdWxlIGRlcGVuZCBvbiB0aGUgb2Zmc2V0IG1vZHVsZSwganVzdCBjaGVjayBmb3IgaXQgaGVyZVxualF1ZXJ5LmVhY2goIFsgXCJ0b3BcIiwgXCJsZWZ0XCIgXSwgZnVuY3Rpb24oIF9pLCBwcm9wICkge1xuXHRqUXVlcnkuY3NzSG9va3NbIHByb3AgXSA9IGFkZEdldEhvb2tJZiggc3VwcG9ydC5waXhlbFBvc2l0aW9uLFxuXHRcdGZ1bmN0aW9uKCBlbGVtLCBjb21wdXRlZCApIHtcblx0XHRcdGlmICggY29tcHV0ZWQgKSB7XG5cdFx0XHRcdGNvbXB1dGVkID0gY3VyQ1NTKCBlbGVtLCBwcm9wICk7XG5cblx0XHRcdFx0Ly8gSWYgY3VyQ1NTIHJldHVybnMgcGVyY2VudGFnZSwgZmFsbGJhY2sgdG8gb2Zmc2V0XG5cdFx0XHRcdHJldHVybiBybnVtbm9ucHgudGVzdCggY29tcHV0ZWQgKSA/XG5cdFx0XHRcdFx0alF1ZXJ5KCBlbGVtICkucG9zaXRpb24oKVsgcHJvcCBdICsgXCJweFwiIDpcblx0XHRcdFx0XHRjb21wdXRlZDtcblx0XHRcdH1cblx0XHR9XG5cdCk7XG59ICk7XG5cblxuLy8gQ3JlYXRlIGlubmVySGVpZ2h0LCBpbm5lcldpZHRoLCBoZWlnaHQsIHdpZHRoLCBvdXRlckhlaWdodCBhbmQgb3V0ZXJXaWR0aCBtZXRob2RzXG5qUXVlcnkuZWFjaCggeyBIZWlnaHQ6IFwiaGVpZ2h0XCIsIFdpZHRoOiBcIndpZHRoXCIgfSwgZnVuY3Rpb24oIG5hbWUsIHR5cGUgKSB7XG5cdGpRdWVyeS5lYWNoKCB7XG5cdFx0cGFkZGluZzogXCJpbm5lclwiICsgbmFtZSxcblx0XHRjb250ZW50OiB0eXBlLFxuXHRcdFwiXCI6IFwib3V0ZXJcIiArIG5hbWVcblx0fSwgZnVuY3Rpb24oIGRlZmF1bHRFeHRyYSwgZnVuY05hbWUgKSB7XG5cblx0XHQvLyBNYXJnaW4gaXMgb25seSBmb3Igb3V0ZXJIZWlnaHQsIG91dGVyV2lkdGhcblx0XHRqUXVlcnkuZm5bIGZ1bmNOYW1lIF0gPSBmdW5jdGlvbiggbWFyZ2luLCB2YWx1ZSApIHtcblx0XHRcdHZhciBjaGFpbmFibGUgPSBhcmd1bWVudHMubGVuZ3RoICYmICggZGVmYXVsdEV4dHJhIHx8IHR5cGVvZiBtYXJnaW4gIT09IFwiYm9vbGVhblwiICksXG5cdFx0XHRcdGV4dHJhID0gZGVmYXVsdEV4dHJhIHx8ICggbWFyZ2luID09PSB0cnVlIHx8IHZhbHVlID09PSB0cnVlID8gXCJtYXJnaW5cIiA6IFwiYm9yZGVyXCIgKTtcblxuXHRcdFx0cmV0dXJuIGFjY2VzcyggdGhpcywgZnVuY3Rpb24oIGVsZW0sIHR5cGUsIHZhbHVlICkge1xuXHRcdFx0XHR2YXIgZG9jO1xuXG5cdFx0XHRcdGlmICggaXNXaW5kb3coIGVsZW0gKSApIHtcblxuXHRcdFx0XHRcdC8vICQoIHdpbmRvdyApLm91dGVyV2lkdGgvSGVpZ2h0IHJldHVybiB3L2ggaW5jbHVkaW5nIHNjcm9sbGJhcnMgKGdoLTE3MjkpXG5cdFx0XHRcdFx0cmV0dXJuIGZ1bmNOYW1lLmluZGV4T2YoIFwib3V0ZXJcIiApID09PSAwID9cblx0XHRcdFx0XHRcdGVsZW1bIFwiaW5uZXJcIiArIG5hbWUgXSA6XG5cdFx0XHRcdFx0XHRlbGVtLmRvY3VtZW50LmRvY3VtZW50RWxlbWVudFsgXCJjbGllbnRcIiArIG5hbWUgXTtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdC8vIEdldCBkb2N1bWVudCB3aWR0aCBvciBoZWlnaHRcblx0XHRcdFx0aWYgKCBlbGVtLm5vZGVUeXBlID09PSA5ICkge1xuXHRcdFx0XHRcdGRvYyA9IGVsZW0uZG9jdW1lbnRFbGVtZW50O1xuXG5cdFx0XHRcdFx0Ly8gRWl0aGVyIHNjcm9sbFtXaWR0aC9IZWlnaHRdIG9yIG9mZnNldFtXaWR0aC9IZWlnaHRdIG9yIGNsaWVudFtXaWR0aC9IZWlnaHRdLFxuXHRcdFx0XHRcdC8vIHdoaWNoZXZlciBpcyBncmVhdGVzdFxuXHRcdFx0XHRcdHJldHVybiBNYXRoLm1heChcblx0XHRcdFx0XHRcdGVsZW0uYm9keVsgXCJzY3JvbGxcIiArIG5hbWUgXSwgZG9jWyBcInNjcm9sbFwiICsgbmFtZSBdLFxuXHRcdFx0XHRcdFx0ZWxlbS5ib2R5WyBcIm9mZnNldFwiICsgbmFtZSBdLCBkb2NbIFwib2Zmc2V0XCIgKyBuYW1lIF0sXG5cdFx0XHRcdFx0XHRkb2NbIFwiY2xpZW50XCIgKyBuYW1lIF1cblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgP1xuXG5cdFx0XHRcdFx0Ly8gR2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudCwgcmVxdWVzdGluZyBidXQgbm90IGZvcmNpbmcgcGFyc2VGbG9hdFxuXHRcdFx0XHRcdGpRdWVyeS5jc3MoIGVsZW0sIHR5cGUsIGV4dHJhICkgOlxuXG5cdFx0XHRcdFx0Ly8gU2V0IHdpZHRoIG9yIGhlaWdodCBvbiB0aGUgZWxlbWVudFxuXHRcdFx0XHRcdGpRdWVyeS5zdHlsZSggZWxlbSwgdHlwZSwgdmFsdWUsIGV4dHJhICk7XG5cdFx0XHR9LCB0eXBlLCBjaGFpbmFibGUgPyBtYXJnaW4gOiB1bmRlZmluZWQsIGNoYWluYWJsZSApO1xuXHRcdH07XG5cdH0gKTtcbn0gKTtcblxuXG5qUXVlcnkuZWFjaCggW1xuXHRcImFqYXhTdGFydFwiLFxuXHRcImFqYXhTdG9wXCIsXG5cdFwiYWpheENvbXBsZXRlXCIsXG5cdFwiYWpheEVycm9yXCIsXG5cdFwiYWpheFN1Y2Nlc3NcIixcblx0XCJhamF4U2VuZFwiXG5dLCBmdW5jdGlvbiggX2ksIHR5cGUgKSB7XG5cdGpRdWVyeS5mblsgdHlwZSBdID0gZnVuY3Rpb24oIGZuICkge1xuXHRcdHJldHVybiB0aGlzLm9uKCB0eXBlLCBmbiApO1xuXHR9O1xufSApO1xuXG5cblxuXG5qUXVlcnkuZm4uZXh0ZW5kKCB7XG5cblx0YmluZDogZnVuY3Rpb24oIHR5cGVzLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZXMsIG51bGwsIGRhdGEsIGZuICk7XG5cdH0sXG5cdHVuYmluZDogZnVuY3Rpb24oIHR5cGVzLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vZmYoIHR5cGVzLCBudWxsLCBmbiApO1xuXHR9LFxuXG5cdGRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBkYXRhLCBmbiApIHtcblx0XHRyZXR1cm4gdGhpcy5vbiggdHlwZXMsIHNlbGVjdG9yLCBkYXRhLCBmbiApO1xuXHR9LFxuXHR1bmRlbGVnYXRlOiBmdW5jdGlvbiggc2VsZWN0b3IsIHR5cGVzLCBmbiApIHtcblxuXHRcdC8vICggbmFtZXNwYWNlICkgb3IgKCBzZWxlY3RvciwgdHlwZXMgWywgZm5dIClcblx0XHRyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA9PT0gMSA/XG5cdFx0XHR0aGlzLm9mZiggc2VsZWN0b3IsIFwiKipcIiApIDpcblx0XHRcdHRoaXMub2ZmKCB0eXBlcywgc2VsZWN0b3IgfHwgXCIqKlwiLCBmbiApO1xuXHR9LFxuXG5cdGhvdmVyOiBmdW5jdGlvbiggZm5PdmVyLCBmbk91dCApIHtcblx0XHRyZXR1cm4gdGhpcy5tb3VzZWVudGVyKCBmbk92ZXIgKS5tb3VzZWxlYXZlKCBmbk91dCB8fCBmbk92ZXIgKTtcblx0fVxufSApO1xuXG5qUXVlcnkuZWFjaChcblx0KCBcImJsdXIgZm9jdXMgZm9jdXNpbiBmb2N1c291dCByZXNpemUgc2Nyb2xsIGNsaWNrIGRibGNsaWNrIFwiICtcblx0XCJtb3VzZWRvd24gbW91c2V1cCBtb3VzZW1vdmUgbW91c2VvdmVyIG1vdXNlb3V0IG1vdXNlZW50ZXIgbW91c2VsZWF2ZSBcIiArXG5cdFwiY2hhbmdlIHNlbGVjdCBzdWJtaXQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBjb250ZXh0bWVudVwiICkuc3BsaXQoIFwiIFwiICksXG5cdGZ1bmN0aW9uKCBfaSwgbmFtZSApIHtcblxuXHRcdC8vIEhhbmRsZSBldmVudCBiaW5kaW5nXG5cdFx0alF1ZXJ5LmZuWyBuYW1lIF0gPSBmdW5jdGlvbiggZGF0YSwgZm4gKSB7XG5cdFx0XHRyZXR1cm4gYXJndW1lbnRzLmxlbmd0aCA+IDAgP1xuXHRcdFx0XHR0aGlzLm9uKCBuYW1lLCBudWxsLCBkYXRhLCBmbiApIDpcblx0XHRcdFx0dGhpcy50cmlnZ2VyKCBuYW1lICk7XG5cdFx0fTtcblx0fVxuKTtcblxuXG5cblxuLy8gU3VwcG9ydDogQW5kcm9pZCA8PTQuMCBvbmx5XG4vLyBNYWtlIHN1cmUgd2UgdHJpbSBCT00gYW5kIE5CU1BcbnZhciBydHJpbSA9IC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZztcblxuLy8gQmluZCBhIGZ1bmN0aW9uIHRvIGEgY29udGV4dCwgb3B0aW9uYWxseSBwYXJ0aWFsbHkgYXBwbHlpbmcgYW55XG4vLyBhcmd1bWVudHMuXG4vLyBqUXVlcnkucHJveHkgaXMgZGVwcmVjYXRlZCB0byBwcm9tb3RlIHN0YW5kYXJkcyAoc3BlY2lmaWNhbGx5IEZ1bmN0aW9uI2JpbmQpXG4vLyBIb3dldmVyLCBpdCBpcyBub3Qgc2xhdGVkIGZvciByZW1vdmFsIGFueSB0aW1lIHNvb25cbmpRdWVyeS5wcm94eSA9IGZ1bmN0aW9uKCBmbiwgY29udGV4dCApIHtcblx0dmFyIHRtcCwgYXJncywgcHJveHk7XG5cblx0aWYgKCB0eXBlb2YgY29udGV4dCA9PT0gXCJzdHJpbmdcIiApIHtcblx0XHR0bXAgPSBmblsgY29udGV4dCBdO1xuXHRcdGNvbnRleHQgPSBmbjtcblx0XHRmbiA9IHRtcDtcblx0fVxuXG5cdC8vIFF1aWNrIGNoZWNrIHRvIGRldGVybWluZSBpZiB0YXJnZXQgaXMgY2FsbGFibGUsIGluIHRoZSBzcGVjXG5cdC8vIHRoaXMgdGhyb3dzIGEgVHlwZUVycm9yLCBidXQgd2Ugd2lsbCBqdXN0IHJldHVybiB1bmRlZmluZWQuXG5cdGlmICggIWlzRnVuY3Rpb24oIGZuICkgKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXG5cdC8vIFNpbXVsYXRlZCBiaW5kXG5cdGFyZ3MgPSBzbGljZS5jYWxsKCBhcmd1bWVudHMsIDIgKTtcblx0cHJveHkgPSBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4gZm4uYXBwbHkoIGNvbnRleHQgfHwgdGhpcywgYXJncy5jb25jYXQoIHNsaWNlLmNhbGwoIGFyZ3VtZW50cyApICkgKTtcblx0fTtcblxuXHQvLyBTZXQgdGhlIGd1aWQgb2YgdW5pcXVlIGhhbmRsZXIgdG8gdGhlIHNhbWUgb2Ygb3JpZ2luYWwgaGFuZGxlciwgc28gaXQgY2FuIGJlIHJlbW92ZWRcblx0cHJveHkuZ3VpZCA9IGZuLmd1aWQgPSBmbi5ndWlkIHx8IGpRdWVyeS5ndWlkKys7XG5cblx0cmV0dXJuIHByb3h5O1xufTtcblxualF1ZXJ5LmhvbGRSZWFkeSA9IGZ1bmN0aW9uKCBob2xkICkge1xuXHRpZiAoIGhvbGQgKSB7XG5cdFx0alF1ZXJ5LnJlYWR5V2FpdCsrO1xuXHR9IGVsc2Uge1xuXHRcdGpRdWVyeS5yZWFkeSggdHJ1ZSApO1xuXHR9XG59O1xualF1ZXJ5LmlzQXJyYXkgPSBBcnJheS5pc0FycmF5O1xualF1ZXJ5LnBhcnNlSlNPTiA9IEpTT04ucGFyc2U7XG5qUXVlcnkubm9kZU5hbWUgPSBub2RlTmFtZTtcbmpRdWVyeS5pc0Z1bmN0aW9uID0gaXNGdW5jdGlvbjtcbmpRdWVyeS5pc1dpbmRvdyA9IGlzV2luZG93O1xualF1ZXJ5LmNhbWVsQ2FzZSA9IGNhbWVsQ2FzZTtcbmpRdWVyeS50eXBlID0gdG9UeXBlO1xuXG5qUXVlcnkubm93ID0gRGF0ZS5ub3c7XG5cbmpRdWVyeS5pc051bWVyaWMgPSBmdW5jdGlvbiggb2JqICkge1xuXG5cdC8vIEFzIG9mIGpRdWVyeSAzLjAsIGlzTnVtZXJpYyBpcyBsaW1pdGVkIHRvXG5cdC8vIHN0cmluZ3MgYW5kIG51bWJlcnMgKHByaW1pdGl2ZXMgb3Igb2JqZWN0cylcblx0Ly8gdGhhdCBjYW4gYmUgY29lcmNlZCB0byBmaW5pdGUgbnVtYmVycyAoZ2gtMjY2Milcblx0dmFyIHR5cGUgPSBqUXVlcnkudHlwZSggb2JqICk7XG5cdHJldHVybiAoIHR5cGUgPT09IFwibnVtYmVyXCIgfHwgdHlwZSA9PT0gXCJzdHJpbmdcIiApICYmXG5cblx0XHQvLyBwYXJzZUZsb2F0IE5hTnMgbnVtZXJpYy1jYXN0IGZhbHNlIHBvc2l0aXZlcyAoXCJcIilcblx0XHQvLyAuLi5idXQgbWlzaW50ZXJwcmV0cyBsZWFkaW5nLW51bWJlciBzdHJpbmdzLCBwYXJ0aWN1bGFybHkgaGV4IGxpdGVyYWxzIChcIjB4Li4uXCIpXG5cdFx0Ly8gc3VidHJhY3Rpb24gZm9yY2VzIGluZmluaXRpZXMgdG8gTmFOXG5cdFx0IWlzTmFOKCBvYmogLSBwYXJzZUZsb2F0KCBvYmogKSApO1xufTtcblxualF1ZXJ5LnRyaW0gPSBmdW5jdGlvbiggdGV4dCApIHtcblx0cmV0dXJuIHRleHQgPT0gbnVsbCA/XG5cdFx0XCJcIiA6XG5cdFx0KCB0ZXh0ICsgXCJcIiApLnJlcGxhY2UoIHJ0cmltLCBcIlwiICk7XG59O1xuXG5cblxuLy8gUmVnaXN0ZXIgYXMgYSBuYW1lZCBBTUQgbW9kdWxlLCBzaW5jZSBqUXVlcnkgY2FuIGJlIGNvbmNhdGVuYXRlZCB3aXRoIG90aGVyXG4vLyBmaWxlcyB0aGF0IG1heSB1c2UgZGVmaW5lLCBidXQgbm90IHZpYSBhIHByb3BlciBjb25jYXRlbmF0aW9uIHNjcmlwdCB0aGF0XG4vLyB1bmRlcnN0YW5kcyBhbm9ueW1vdXMgQU1EIG1vZHVsZXMuIEEgbmFtZWQgQU1EIGlzIHNhZmVzdCBhbmQgbW9zdCByb2J1c3Rcbi8vIHdheSB0byByZWdpc3Rlci4gTG93ZXJjYXNlIGpxdWVyeSBpcyB1c2VkIGJlY2F1c2UgQU1EIG1vZHVsZSBuYW1lcyBhcmVcbi8vIGRlcml2ZWQgZnJvbSBmaWxlIG5hbWVzLCBhbmQgalF1ZXJ5IGlzIG5vcm1hbGx5IGRlbGl2ZXJlZCBpbiBhIGxvd2VyY2FzZVxuLy8gZmlsZSBuYW1lLiBEbyB0aGlzIGFmdGVyIGNyZWF0aW5nIHRoZSBnbG9iYWwgc28gdGhhdCBpZiBhbiBBTUQgbW9kdWxlIHdhbnRzXG4vLyB0byBjYWxsIG5vQ29uZmxpY3QgdG8gaGlkZSB0aGlzIHZlcnNpb24gb2YgalF1ZXJ5LCBpdCB3aWxsIHdvcmsuXG5cbi8vIE5vdGUgdGhhdCBmb3IgbWF4aW11bSBwb3J0YWJpbGl0eSwgbGlicmFyaWVzIHRoYXQgYXJlIG5vdCBqUXVlcnkgc2hvdWxkXG4vLyBkZWNsYXJlIHRoZW1zZWx2ZXMgYXMgYW5vbnltb3VzIG1vZHVsZXMsIGFuZCBhdm9pZCBzZXR0aW5nIGEgZ2xvYmFsIGlmIGFuXG4vLyBBTUQgbG9hZGVyIGlzIHByZXNlbnQuIGpRdWVyeSBpcyBhIHNwZWNpYWwgY2FzZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZVxuLy8gaHR0cHM6Ly9naXRodWIuY29tL2pyYnVya2UvcmVxdWlyZWpzL3dpa2kvVXBkYXRpbmctZXhpc3RpbmctbGlicmFyaWVzI3dpa2ktYW5vblxuXG5pZiAoIHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kICkge1xuXHRkZWZpbmUoIFwianF1ZXJ5XCIsIFtdLCBmdW5jdGlvbigpIHtcblx0XHRyZXR1cm4galF1ZXJ5O1xuXHR9ICk7XG59XG5cblxuXG5cbnZhclxuXG5cdC8vIE1hcCBvdmVyIGpRdWVyeSBpbiBjYXNlIG9mIG92ZXJ3cml0ZVxuXHRfalF1ZXJ5ID0gd2luZG93LmpRdWVyeSxcblxuXHQvLyBNYXAgb3ZlciB0aGUgJCBpbiBjYXNlIG9mIG92ZXJ3cml0ZVxuXHRfJCA9IHdpbmRvdy4kO1xuXG5qUXVlcnkubm9Db25mbGljdCA9IGZ1bmN0aW9uKCBkZWVwICkge1xuXHRpZiAoIHdpbmRvdy4kID09PSBqUXVlcnkgKSB7XG5cdFx0d2luZG93LiQgPSBfJDtcblx0fVxuXG5cdGlmICggZGVlcCAmJiB3aW5kb3cualF1ZXJ5ID09PSBqUXVlcnkgKSB7XG5cdFx0d2luZG93LmpRdWVyeSA9IF9qUXVlcnk7XG5cdH1cblxuXHRyZXR1cm4galF1ZXJ5O1xufTtcblxuLy8gRXhwb3NlIGpRdWVyeSBhbmQgJCBpZGVudGlmaWVycywgZXZlbiBpbiBBTURcbi8vICgjNzEwMiNjb21tZW50OjEwLCBodHRwczovL2dpdGh1Yi5jb20vanF1ZXJ5L2pxdWVyeS9wdWxsLzU1Nylcbi8vIGFuZCBDb21tb25KUyBmb3IgYnJvd3NlciBlbXVsYXRvcnMgKCMxMzU2NilcbmlmICggdHlwZW9mIG5vR2xvYmFsID09PSBcInVuZGVmaW5lZFwiICkge1xuXHR3aW5kb3cualF1ZXJ5ID0gd2luZG93LiQgPSBqUXVlcnk7XG59XG5cblxuXG5cbnJldHVybiBqUXVlcnk7XG59ICk7XG4iLCIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjEuMyk6IHV0aWwvaW5kZXguanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCBNQVhfVUlEID0gMTAwMDAwMFxuY29uc3QgTUlMTElTRUNPTkRTX01VTFRJUExJRVIgPSAxMDAwXG5jb25zdCBUUkFOU0lUSU9OX0VORCA9ICd0cmFuc2l0aW9uZW5kJ1xuXG4vLyBTaG91dG91dCBBbmd1c0Nyb2xsIChodHRwczovL2dvby5nbC9weHdRR3ApXG5jb25zdCB0b1R5cGUgPSBvYmogPT4ge1xuICBpZiAob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgcmV0dXJuIGAke29ian1gXG4gIH1cblxuICByZXR1cm4ge30udG9TdHJpbmcuY2FsbChvYmopLm1hdGNoKC9cXHMoW2Etel0rKS9pKVsxXS50b0xvd2VyQ2FzZSgpXG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIFB1YmxpYyBVdGlsIEFwaVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCBnZXRVSUQgPSBwcmVmaXggPT4ge1xuICBkbyB7XG4gICAgcHJlZml4ICs9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIE1BWF9VSUQpXG4gIH0gd2hpbGUgKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHByZWZpeCkpXG5cbiAgcmV0dXJuIHByZWZpeFxufVxuXG5jb25zdCBnZXRTZWxlY3RvciA9IGVsZW1lbnQgPT4ge1xuICBsZXQgc2VsZWN0b3IgPSBlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1icy10YXJnZXQnKVxuXG4gIGlmICghc2VsZWN0b3IgfHwgc2VsZWN0b3IgPT09ICcjJykge1xuICAgIGxldCBocmVmQXR0ciA9IGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdocmVmJylcblxuICAgIC8vIFRoZSBvbmx5IHZhbGlkIGNvbnRlbnQgdGhhdCBjb3VsZCBkb3VibGUgYXMgYSBzZWxlY3RvciBhcmUgSURzIG9yIGNsYXNzZXMsXG4gICAgLy8gc28gZXZlcnl0aGluZyBzdGFydGluZyB3aXRoIGAjYCBvciBgLmAuIElmIGEgXCJyZWFsXCIgVVJMIGlzIHVzZWQgYXMgdGhlIHNlbGVjdG9yLFxuICAgIC8vIGBkb2N1bWVudC5xdWVyeVNlbGVjdG9yYCB3aWxsIHJpZ2h0ZnVsbHkgY29tcGxhaW4gaXQgaXMgaW52YWxpZC5cbiAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2lzc3Vlcy8zMjI3M1xuICAgIGlmICghaHJlZkF0dHIgfHwgKCFocmVmQXR0ci5pbmNsdWRlcygnIycpICYmICFocmVmQXR0ci5zdGFydHNXaXRoKCcuJykpKSB7XG4gICAgICByZXR1cm4gbnVsbFxuICAgIH1cblxuICAgIC8vIEp1c3QgaW4gY2FzZSBzb21lIENNUyBwdXRzIG91dCBhIGZ1bGwgVVJMIHdpdGggdGhlIGFuY2hvciBhcHBlbmRlZFxuICAgIGlmIChocmVmQXR0ci5pbmNsdWRlcygnIycpICYmICFocmVmQXR0ci5zdGFydHNXaXRoKCcjJykpIHtcbiAgICAgIGhyZWZBdHRyID0gYCMke2hyZWZBdHRyLnNwbGl0KCcjJylbMV19YFxuICAgIH1cblxuICAgIHNlbGVjdG9yID0gaHJlZkF0dHIgJiYgaHJlZkF0dHIgIT09ICcjJyA/IGhyZWZBdHRyLnRyaW0oKSA6IG51bGxcbiAgfVxuXG4gIHJldHVybiBzZWxlY3RvclxufVxuXG5jb25zdCBnZXRTZWxlY3RvckZyb21FbGVtZW50ID0gZWxlbWVudCA9PiB7XG4gIGNvbnN0IHNlbGVjdG9yID0gZ2V0U2VsZWN0b3IoZWxlbWVudClcblxuICBpZiAoc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihzZWxlY3RvcikgPyBzZWxlY3RvciA6IG51bGxcbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmNvbnN0IGdldEVsZW1lbnRGcm9tU2VsZWN0b3IgPSBlbGVtZW50ID0+IHtcbiAgY29uc3Qgc2VsZWN0b3IgPSBnZXRTZWxlY3RvcihlbGVtZW50KVxuXG4gIHJldHVybiBzZWxlY3RvciA/IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpIDogbnVsbFxufVxuXG5jb25zdCBnZXRUcmFuc2l0aW9uRHVyYXRpb25Gcm9tRWxlbWVudCA9IGVsZW1lbnQgPT4ge1xuICBpZiAoIWVsZW1lbnQpIHtcbiAgICByZXR1cm4gMFxuICB9XG5cbiAgLy8gR2V0IHRyYW5zaXRpb24tZHVyYXRpb24gb2YgdGhlIGVsZW1lbnRcbiAgbGV0IHsgdHJhbnNpdGlvbkR1cmF0aW9uLCB0cmFuc2l0aW9uRGVsYXkgfSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpXG5cbiAgY29uc3QgZmxvYXRUcmFuc2l0aW9uRHVyYXRpb24gPSBOdW1iZXIucGFyc2VGbG9hdCh0cmFuc2l0aW9uRHVyYXRpb24pXG4gIGNvbnN0IGZsb2F0VHJhbnNpdGlvbkRlbGF5ID0gTnVtYmVyLnBhcnNlRmxvYXQodHJhbnNpdGlvbkRlbGF5KVxuXG4gIC8vIFJldHVybiAwIGlmIGVsZW1lbnQgb3IgdHJhbnNpdGlvbiBkdXJhdGlvbiBpcyBub3QgZm91bmRcbiAgaWYgKCFmbG9hdFRyYW5zaXRpb25EdXJhdGlvbiAmJiAhZmxvYXRUcmFuc2l0aW9uRGVsYXkpIHtcbiAgICByZXR1cm4gMFxuICB9XG5cbiAgLy8gSWYgbXVsdGlwbGUgZHVyYXRpb25zIGFyZSBkZWZpbmVkLCB0YWtlIHRoZSBmaXJzdFxuICB0cmFuc2l0aW9uRHVyYXRpb24gPSB0cmFuc2l0aW9uRHVyYXRpb24uc3BsaXQoJywnKVswXVxuICB0cmFuc2l0aW9uRGVsYXkgPSB0cmFuc2l0aW9uRGVsYXkuc3BsaXQoJywnKVswXVxuXG4gIHJldHVybiAoTnVtYmVyLnBhcnNlRmxvYXQodHJhbnNpdGlvbkR1cmF0aW9uKSArIE51bWJlci5wYXJzZUZsb2F0KHRyYW5zaXRpb25EZWxheSkpICogTUlMTElTRUNPTkRTX01VTFRJUExJRVJcbn1cblxuY29uc3QgdHJpZ2dlclRyYW5zaXRpb25FbmQgPSBlbGVtZW50ID0+IHtcbiAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudChUUkFOU0lUSU9OX0VORCkpXG59XG5cbmNvbnN0IGlzRWxlbWVudCA9IG9iaiA9PiB7XG4gIGlmICghb2JqIHx8IHR5cGVvZiBvYmogIT09ICdvYmplY3QnKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cblxuICBpZiAodHlwZW9mIG9iai5qcXVlcnkgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgb2JqID0gb2JqWzBdXG4gIH1cblxuICByZXR1cm4gdHlwZW9mIG9iai5ub2RlVHlwZSAhPT0gJ3VuZGVmaW5lZCdcbn1cblxuY29uc3QgZ2V0RWxlbWVudCA9IG9iaiA9PiB7XG4gIGlmIChpc0VsZW1lbnQob2JqKSkgeyAvLyBpdCdzIGEgalF1ZXJ5IG9iamVjdCBvciBhIG5vZGUgZWxlbWVudFxuICAgIHJldHVybiBvYmouanF1ZXJ5ID8gb2JqWzBdIDogb2JqXG4gIH1cblxuICBpZiAodHlwZW9mIG9iaiA9PT0gJ3N0cmluZycgJiYgb2JqLmxlbmd0aCA+IDApIHtcbiAgICByZXR1cm4gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihvYmopXG4gIH1cblxuICByZXR1cm4gbnVsbFxufVxuXG5jb25zdCB0eXBlQ2hlY2tDb25maWcgPSAoY29tcG9uZW50TmFtZSwgY29uZmlnLCBjb25maWdUeXBlcykgPT4ge1xuICBPYmplY3Qua2V5cyhjb25maWdUeXBlcykuZm9yRWFjaChwcm9wZXJ0eSA9PiB7XG4gICAgY29uc3QgZXhwZWN0ZWRUeXBlcyA9IGNvbmZpZ1R5cGVzW3Byb3BlcnR5XVxuICAgIGNvbnN0IHZhbHVlID0gY29uZmlnW3Byb3BlcnR5XVxuICAgIGNvbnN0IHZhbHVlVHlwZSA9IHZhbHVlICYmIGlzRWxlbWVudCh2YWx1ZSkgPyAnZWxlbWVudCcgOiB0b1R5cGUodmFsdWUpXG5cbiAgICBpZiAoIW5ldyBSZWdFeHAoZXhwZWN0ZWRUeXBlcykudGVzdCh2YWx1ZVR5cGUpKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKFxuICAgICAgICBgJHtjb21wb25lbnROYW1lLnRvVXBwZXJDYXNlKCl9OiBPcHRpb24gXCIke3Byb3BlcnR5fVwiIHByb3ZpZGVkIHR5cGUgXCIke3ZhbHVlVHlwZX1cIiBidXQgZXhwZWN0ZWQgdHlwZSBcIiR7ZXhwZWN0ZWRUeXBlc31cIi5gXG4gICAgICApXG4gICAgfVxuICB9KVxufVxuXG5jb25zdCBpc1Zpc2libGUgPSBlbGVtZW50ID0+IHtcbiAgaWYgKCFpc0VsZW1lbnQoZWxlbWVudCkgfHwgZWxlbWVudC5nZXRDbGllbnRSZWN0cygpLmxlbmd0aCA9PT0gMCkge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG5cbiAgcmV0dXJuIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZSgndmlzaWJpbGl0eScpID09PSAndmlzaWJsZSdcbn1cblxuY29uc3QgaXNEaXNhYmxlZCA9IGVsZW1lbnQgPT4ge1xuICBpZiAoIWVsZW1lbnQgfHwgZWxlbWVudC5ub2RlVHlwZSAhPT0gTm9kZS5FTEVNRU5UX05PREUpIHtcbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgaWYgKGVsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKCdkaXNhYmxlZCcpKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGlmICh0eXBlb2YgZWxlbWVudC5kaXNhYmxlZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZWxlbWVudC5kaXNhYmxlZFxuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQuaGFzQXR0cmlidXRlKCdkaXNhYmxlZCcpICYmIGVsZW1lbnQuZ2V0QXR0cmlidXRlKCdkaXNhYmxlZCcpICE9PSAnZmFsc2UnXG59XG5cbmNvbnN0IGZpbmRTaGFkb3dSb290ID0gZWxlbWVudCA9PiB7XG4gIGlmICghZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmF0dGFjaFNoYWRvdykge1xuICAgIHJldHVybiBudWxsXG4gIH1cblxuICAvLyBDYW4gZmluZCB0aGUgc2hhZG93IHJvb3Qgb3RoZXJ3aXNlIGl0J2xsIHJldHVybiB0aGUgZG9jdW1lbnRcbiAgaWYgKHR5cGVvZiBlbGVtZW50LmdldFJvb3ROb2RlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgY29uc3Qgcm9vdCA9IGVsZW1lbnQuZ2V0Um9vdE5vZGUoKVxuICAgIHJldHVybiByb290IGluc3RhbmNlb2YgU2hhZG93Um9vdCA/IHJvb3QgOiBudWxsXG4gIH1cblxuICBpZiAoZWxlbWVudCBpbnN0YW5jZW9mIFNoYWRvd1Jvb3QpIHtcbiAgICByZXR1cm4gZWxlbWVudFxuICB9XG5cbiAgLy8gd2hlbiB3ZSBkb24ndCBmaW5kIGEgc2hhZG93IHJvb3RcbiAgaWYgKCFlbGVtZW50LnBhcmVudE5vZGUpIHtcbiAgICByZXR1cm4gbnVsbFxuICB9XG5cbiAgcmV0dXJuIGZpbmRTaGFkb3dSb290KGVsZW1lbnQucGFyZW50Tm9kZSlcbn1cblxuY29uc3Qgbm9vcCA9ICgpID0+IHt9XG5cbi8qKlxuICogVHJpY2sgdG8gcmVzdGFydCBhbiBlbGVtZW50J3MgYW5pbWF0aW9uXG4gKlxuICogQHBhcmFtIHtIVE1MRWxlbWVudH0gZWxlbWVudFxuICogQHJldHVybiB2b2lkXG4gKlxuICogQHNlZSBodHRwczovL3d3dy5jaGFyaXN0aGVvLmlvL2Jsb2cvMjAyMS8wMi9yZXN0YXJ0LWEtY3NzLWFuaW1hdGlvbi13aXRoLWphdmFzY3JpcHQvI3Jlc3RhcnRpbmctYS1jc3MtYW5pbWF0aW9uXG4gKi9cbmNvbnN0IHJlZmxvdyA9IGVsZW1lbnQgPT4ge1xuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXG4gIGVsZW1lbnQub2Zmc2V0SGVpZ2h0XG59XG5cbmNvbnN0IGdldGpRdWVyeSA9ICgpID0+IHtcbiAgY29uc3QgeyBqUXVlcnkgfSA9IHdpbmRvd1xuXG4gIGlmIChqUXVlcnkgJiYgIWRvY3VtZW50LmJvZHkuaGFzQXR0cmlidXRlKCdkYXRhLWJzLW5vLWpxdWVyeScpKSB7XG4gICAgcmV0dXJuIGpRdWVyeVxuICB9XG5cbiAgcmV0dXJuIG51bGxcbn1cblxuY29uc3QgRE9NQ29udGVudExvYWRlZENhbGxiYWNrcyA9IFtdXG5cbmNvbnN0IG9uRE9NQ29udGVudExvYWRlZCA9IGNhbGxiYWNrID0+IHtcbiAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdsb2FkaW5nJykge1xuICAgIC8vIGFkZCBsaXN0ZW5lciBvbiB0aGUgZmlyc3QgY2FsbCB3aGVuIHRoZSBkb2N1bWVudCBpcyBpbiBsb2FkaW5nIHN0YXRlXG4gICAgaWYgKCFET01Db250ZW50TG9hZGVkQ2FsbGJhY2tzLmxlbmd0aCkge1xuICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsICgpID0+IHtcbiAgICAgICAgRE9NQ29udGVudExvYWRlZENhbGxiYWNrcy5mb3JFYWNoKGNhbGxiYWNrID0+IGNhbGxiYWNrKCkpXG4gICAgICB9KVxuICAgIH1cblxuICAgIERPTUNvbnRlbnRMb2FkZWRDYWxsYmFja3MucHVzaChjYWxsYmFjaylcbiAgfSBlbHNlIHtcbiAgICBjYWxsYmFjaygpXG4gIH1cbn1cblxuY29uc3QgaXNSVEwgPSAoKSA9PiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZGlyID09PSAncnRsJ1xuXG5jb25zdCBkZWZpbmVKUXVlcnlQbHVnaW4gPSBwbHVnaW4gPT4ge1xuICBvbkRPTUNvbnRlbnRMb2FkZWQoKCkgPT4ge1xuICAgIGNvbnN0ICQgPSBnZXRqUXVlcnkoKVxuICAgIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAqL1xuICAgIGlmICgkKSB7XG4gICAgICBjb25zdCBuYW1lID0gcGx1Z2luLk5BTUVcbiAgICAgIGNvbnN0IEpRVUVSWV9OT19DT05GTElDVCA9ICQuZm5bbmFtZV1cbiAgICAgICQuZm5bbmFtZV0gPSBwbHVnaW4ualF1ZXJ5SW50ZXJmYWNlXG4gICAgICAkLmZuW25hbWVdLkNvbnN0cnVjdG9yID0gcGx1Z2luXG4gICAgICAkLmZuW25hbWVdLm5vQ29uZmxpY3QgPSAoKSA9PiB7XG4gICAgICAgICQuZm5bbmFtZV0gPSBKUVVFUllfTk9fQ09ORkxJQ1RcbiAgICAgICAgcmV0dXJuIHBsdWdpbi5qUXVlcnlJbnRlcmZhY2VcbiAgICAgIH1cbiAgICB9XG4gIH0pXG59XG5cbmNvbnN0IGV4ZWN1dGUgPSBjYWxsYmFjayA9PiB7XG4gIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICdmdW5jdGlvbicpIHtcbiAgICBjYWxsYmFjaygpXG4gIH1cbn1cblxuY29uc3QgZXhlY3V0ZUFmdGVyVHJhbnNpdGlvbiA9IChjYWxsYmFjaywgdHJhbnNpdGlvbkVsZW1lbnQsIHdhaXRGb3JUcmFuc2l0aW9uID0gdHJ1ZSkgPT4ge1xuICBpZiAoIXdhaXRGb3JUcmFuc2l0aW9uKSB7XG4gICAgZXhlY3V0ZShjYWxsYmFjaylcbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IGR1cmF0aW9uUGFkZGluZyA9IDVcbiAgY29uc3QgZW11bGF0ZWREdXJhdGlvbiA9IGdldFRyYW5zaXRpb25EdXJhdGlvbkZyb21FbGVtZW50KHRyYW5zaXRpb25FbGVtZW50KSArIGR1cmF0aW9uUGFkZGluZ1xuXG4gIGxldCBjYWxsZWQgPSBmYWxzZVxuXG4gIGNvbnN0IGhhbmRsZXIgPSAoeyB0YXJnZXQgfSkgPT4ge1xuICAgIGlmICh0YXJnZXQgIT09IHRyYW5zaXRpb25FbGVtZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjYWxsZWQgPSB0cnVlXG4gICAgdHJhbnNpdGlvbkVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihUUkFOU0lUSU9OX0VORCwgaGFuZGxlcilcbiAgICBleGVjdXRlKGNhbGxiYWNrKVxuICB9XG5cbiAgdHJhbnNpdGlvbkVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihUUkFOU0lUSU9OX0VORCwgaGFuZGxlcilcbiAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgaWYgKCFjYWxsZWQpIHtcbiAgICAgIHRyaWdnZXJUcmFuc2l0aW9uRW5kKHRyYW5zaXRpb25FbGVtZW50KVxuICAgIH1cbiAgfSwgZW11bGF0ZWREdXJhdGlvbilcbn1cblxuLyoqXG4gKiBSZXR1cm4gdGhlIHByZXZpb3VzL25leHQgZWxlbWVudCBvZiBhIGxpc3QuXG4gKlxuICogQHBhcmFtIHthcnJheX0gbGlzdCAgICBUaGUgbGlzdCBvZiBlbGVtZW50c1xuICogQHBhcmFtIGFjdGl2ZUVsZW1lbnQgICBUaGUgYWN0aXZlIGVsZW1lbnRcbiAqIEBwYXJhbSBzaG91bGRHZXROZXh0ICAgQ2hvb3NlIHRvIGdldCBuZXh0IG9yIHByZXZpb3VzIGVsZW1lbnRcbiAqIEBwYXJhbSBpc0N5Y2xlQWxsb3dlZFxuICogQHJldHVybiB7RWxlbWVudHxlbGVtfSBUaGUgcHJvcGVyIGVsZW1lbnRcbiAqL1xuY29uc3QgZ2V0TmV4dEFjdGl2ZUVsZW1lbnQgPSAobGlzdCwgYWN0aXZlRWxlbWVudCwgc2hvdWxkR2V0TmV4dCwgaXNDeWNsZUFsbG93ZWQpID0+IHtcbiAgbGV0IGluZGV4ID0gbGlzdC5pbmRleE9mKGFjdGl2ZUVsZW1lbnQpXG5cbiAgLy8gaWYgdGhlIGVsZW1lbnQgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGxpc3QgcmV0dXJuIGFuIGVsZW1lbnQgZGVwZW5kaW5nIG9uIHRoZSBkaXJlY3Rpb24gYW5kIGlmIGN5Y2xlIGlzIGFsbG93ZWRcbiAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgIHJldHVybiBsaXN0WyFzaG91bGRHZXROZXh0ICYmIGlzQ3ljbGVBbGxvd2VkID8gbGlzdC5sZW5ndGggLSAxIDogMF1cbiAgfVxuXG4gIGNvbnN0IGxpc3RMZW5ndGggPSBsaXN0Lmxlbmd0aFxuXG4gIGluZGV4ICs9IHNob3VsZEdldE5leHQgPyAxIDogLTFcblxuICBpZiAoaXNDeWNsZUFsbG93ZWQpIHtcbiAgICBpbmRleCA9IChpbmRleCArIGxpc3RMZW5ndGgpICUgbGlzdExlbmd0aFxuICB9XG5cbiAgcmV0dXJuIGxpc3RbTWF0aC5tYXgoMCwgTWF0aC5taW4oaW5kZXgsIGxpc3RMZW5ndGggLSAxKSldXG59XG5cbmV4cG9ydCB7XG4gIGdldEVsZW1lbnQsXG4gIGdldFVJRCxcbiAgZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCxcbiAgZ2V0RWxlbWVudEZyb21TZWxlY3RvcixcbiAgZ2V0VHJhbnNpdGlvbkR1cmF0aW9uRnJvbUVsZW1lbnQsXG4gIHRyaWdnZXJUcmFuc2l0aW9uRW5kLFxuICBpc0VsZW1lbnQsXG4gIHR5cGVDaGVja0NvbmZpZyxcbiAgaXNWaXNpYmxlLFxuICBpc0Rpc2FibGVkLFxuICBmaW5kU2hhZG93Um9vdCxcbiAgbm9vcCxcbiAgZ2V0TmV4dEFjdGl2ZUVsZW1lbnQsXG4gIHJlZmxvdyxcbiAgZ2V0alF1ZXJ5LFxuICBvbkRPTUNvbnRlbnRMb2FkZWQsXG4gIGlzUlRMLFxuICBkZWZpbmVKUXVlcnlQbHVnaW4sXG4gIGV4ZWN1dGUsXG4gIGV4ZWN1dGVBZnRlclRyYW5zaXRpb25cbn1cbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMS4zKTogZG9tL2V2ZW50LWhhbmRsZXIuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgeyBnZXRqUXVlcnkgfSBmcm9tICcuLi91dGlsL2luZGV4J1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ29uc3RhbnRzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCBuYW1lc3BhY2VSZWdleCA9IC9bXi5dKig/PVxcLi4qKVxcLnwuKi9cbmNvbnN0IHN0cmlwTmFtZVJlZ2V4ID0gL1xcLi4qL1xuY29uc3Qgc3RyaXBVaWRSZWdleCA9IC86OlxcZCskL1xuY29uc3QgZXZlbnRSZWdpc3RyeSA9IHt9IC8vIEV2ZW50cyBzdG9yYWdlXG5sZXQgdWlkRXZlbnQgPSAxXG5jb25zdCBjdXN0b21FdmVudHMgPSB7XG4gIG1vdXNlZW50ZXI6ICdtb3VzZW92ZXInLFxuICBtb3VzZWxlYXZlOiAnbW91c2VvdXQnXG59XG5jb25zdCBjdXN0b21FdmVudHNSZWdleCA9IC9eKG1vdXNlZW50ZXJ8bW91c2VsZWF2ZSkvaVxuY29uc3QgbmF0aXZlRXZlbnRzID0gbmV3IFNldChbXG4gICdjbGljaycsXG4gICdkYmxjbGljaycsXG4gICdtb3VzZXVwJyxcbiAgJ21vdXNlZG93bicsXG4gICdjb250ZXh0bWVudScsXG4gICdtb3VzZXdoZWVsJyxcbiAgJ0RPTU1vdXNlU2Nyb2xsJyxcbiAgJ21vdXNlb3ZlcicsXG4gICdtb3VzZW91dCcsXG4gICdtb3VzZW1vdmUnLFxuICAnc2VsZWN0c3RhcnQnLFxuICAnc2VsZWN0ZW5kJyxcbiAgJ2tleWRvd24nLFxuICAna2V5cHJlc3MnLFxuICAna2V5dXAnLFxuICAnb3JpZW50YXRpb25jaGFuZ2UnLFxuICAndG91Y2hzdGFydCcsXG4gICd0b3VjaG1vdmUnLFxuICAndG91Y2hlbmQnLFxuICAndG91Y2hjYW5jZWwnLFxuICAncG9pbnRlcmRvd24nLFxuICAncG9pbnRlcm1vdmUnLFxuICAncG9pbnRlcnVwJyxcbiAgJ3BvaW50ZXJsZWF2ZScsXG4gICdwb2ludGVyY2FuY2VsJyxcbiAgJ2dlc3R1cmVzdGFydCcsXG4gICdnZXN0dXJlY2hhbmdlJyxcbiAgJ2dlc3R1cmVlbmQnLFxuICAnZm9jdXMnLFxuICAnYmx1cicsXG4gICdjaGFuZ2UnLFxuICAncmVzZXQnLFxuICAnc2VsZWN0JyxcbiAgJ3N1Ym1pdCcsXG4gICdmb2N1c2luJyxcbiAgJ2ZvY3Vzb3V0JyxcbiAgJ2xvYWQnLFxuICAndW5sb2FkJyxcbiAgJ2JlZm9yZXVubG9hZCcsXG4gICdyZXNpemUnLFxuICAnbW92ZScsXG4gICdET01Db250ZW50TG9hZGVkJyxcbiAgJ3JlYWR5c3RhdGVjaGFuZ2UnLFxuICAnZXJyb3InLFxuICAnYWJvcnQnLFxuICAnc2Nyb2xsJ1xuXSlcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIFByaXZhdGUgbWV0aG9kc1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuZnVuY3Rpb24gZ2V0VWlkRXZlbnQoZWxlbWVudCwgdWlkKSB7XG4gIHJldHVybiAodWlkICYmIGAke3VpZH06OiR7dWlkRXZlbnQrK31gKSB8fCBlbGVtZW50LnVpZEV2ZW50IHx8IHVpZEV2ZW50Kytcbn1cblxuZnVuY3Rpb24gZ2V0RXZlbnQoZWxlbWVudCkge1xuICBjb25zdCB1aWQgPSBnZXRVaWRFdmVudChlbGVtZW50KVxuXG4gIGVsZW1lbnQudWlkRXZlbnQgPSB1aWRcbiAgZXZlbnRSZWdpc3RyeVt1aWRdID0gZXZlbnRSZWdpc3RyeVt1aWRdIHx8IHt9XG5cbiAgcmV0dXJuIGV2ZW50UmVnaXN0cnlbdWlkXVxufVxuXG5mdW5jdGlvbiBib290c3RyYXBIYW5kbGVyKGVsZW1lbnQsIGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBoYW5kbGVyKGV2ZW50KSB7XG4gICAgZXZlbnQuZGVsZWdhdGVUYXJnZXQgPSBlbGVtZW50XG5cbiAgICBpZiAoaGFuZGxlci5vbmVPZmYpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vZmYoZWxlbWVudCwgZXZlbnQudHlwZSwgZm4pXG4gICAgfVxuXG4gICAgcmV0dXJuIGZuLmFwcGx5KGVsZW1lbnQsIFtldmVudF0pXG4gIH1cbn1cblxuZnVuY3Rpb24gYm9vdHN0cmFwRGVsZWdhdGlvbkhhbmRsZXIoZWxlbWVudCwgc2VsZWN0b3IsIGZuKSB7XG4gIHJldHVybiBmdW5jdGlvbiBoYW5kbGVyKGV2ZW50KSB7XG4gICAgY29uc3QgZG9tRWxlbWVudHMgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpXG5cbiAgICBmb3IgKGxldCB7IHRhcmdldCB9ID0gZXZlbnQ7IHRhcmdldCAmJiB0YXJnZXQgIT09IHRoaXM7IHRhcmdldCA9IHRhcmdldC5wYXJlbnROb2RlKSB7XG4gICAgICBmb3IgKGxldCBpID0gZG9tRWxlbWVudHMubGVuZ3RoOyBpLS07KSB7XG4gICAgICAgIGlmIChkb21FbGVtZW50c1tpXSA9PT0gdGFyZ2V0KSB7XG4gICAgICAgICAgZXZlbnQuZGVsZWdhdGVUYXJnZXQgPSB0YXJnZXRcblxuICAgICAgICAgIGlmIChoYW5kbGVyLm9uZU9mZikge1xuICAgICAgICAgICAgRXZlbnRIYW5kbGVyLm9mZihlbGVtZW50LCBldmVudC50eXBlLCBzZWxlY3RvciwgZm4pXG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGZuLmFwcGx5KHRhcmdldCwgW2V2ZW50XSlcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRvIHBsZWFzZSBFU0xpbnRcbiAgICByZXR1cm4gbnVsbFxuICB9XG59XG5cbmZ1bmN0aW9uIGZpbmRIYW5kbGVyKGV2ZW50cywgaGFuZGxlciwgZGVsZWdhdGlvblNlbGVjdG9yID0gbnVsbCkge1xuICBjb25zdCB1aWRFdmVudExpc3QgPSBPYmplY3Qua2V5cyhldmVudHMpXG5cbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHVpZEV2ZW50TGlzdC5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGNvbnN0IGV2ZW50ID0gZXZlbnRzW3VpZEV2ZW50TGlzdFtpXV1cblxuICAgIGlmIChldmVudC5vcmlnaW5hbEhhbmRsZXIgPT09IGhhbmRsZXIgJiYgZXZlbnQuZGVsZWdhdGlvblNlbGVjdG9yID09PSBkZWxlZ2F0aW9uU2VsZWN0b3IpIHtcbiAgICAgIHJldHVybiBldmVudFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsXG59XG5cbmZ1bmN0aW9uIG5vcm1hbGl6ZVBhcmFtcyhvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZuKSB7XG4gIGNvbnN0IGRlbGVnYXRpb24gPSB0eXBlb2YgaGFuZGxlciA9PT0gJ3N0cmluZydcbiAgY29uc3Qgb3JpZ2luYWxIYW5kbGVyID0gZGVsZWdhdGlvbiA/IGRlbGVnYXRpb25GbiA6IGhhbmRsZXJcblxuICBsZXQgdHlwZUV2ZW50ID0gZ2V0VHlwZUV2ZW50KG9yaWdpbmFsVHlwZUV2ZW50KVxuICBjb25zdCBpc05hdGl2ZSA9IG5hdGl2ZUV2ZW50cy5oYXModHlwZUV2ZW50KVxuXG4gIGlmICghaXNOYXRpdmUpIHtcbiAgICB0eXBlRXZlbnQgPSBvcmlnaW5hbFR5cGVFdmVudFxuICB9XG5cbiAgcmV0dXJuIFtkZWxlZ2F0aW9uLCBvcmlnaW5hbEhhbmRsZXIsIHR5cGVFdmVudF1cbn1cblxuZnVuY3Rpb24gYWRkSGFuZGxlcihlbGVtZW50LCBvcmlnaW5hbFR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZuLCBvbmVPZmYpIHtcbiAgaWYgKHR5cGVvZiBvcmlnaW5hbFR5cGVFdmVudCAhPT0gJ3N0cmluZycgfHwgIWVsZW1lbnQpIHtcbiAgICByZXR1cm5cbiAgfVxuXG4gIGlmICghaGFuZGxlcikge1xuICAgIGhhbmRsZXIgPSBkZWxlZ2F0aW9uRm5cbiAgICBkZWxlZ2F0aW9uRm4gPSBudWxsXG4gIH1cblxuICAvLyBpbiBjYXNlIG9mIG1vdXNlZW50ZXIgb3IgbW91c2VsZWF2ZSB3cmFwIHRoZSBoYW5kbGVyIHdpdGhpbiBhIGZ1bmN0aW9uIHRoYXQgY2hlY2tzIGZvciBpdHMgRE9NIHBvc2l0aW9uXG4gIC8vIHRoaXMgcHJldmVudHMgdGhlIGhhbmRsZXIgZnJvbSBiZWluZyBkaXNwYXRjaGVkIHRoZSBzYW1lIHdheSBhcyBtb3VzZW92ZXIgb3IgbW91c2VvdXQgZG9lc1xuICBpZiAoY3VzdG9tRXZlbnRzUmVnZXgudGVzdChvcmlnaW5hbFR5cGVFdmVudCkpIHtcbiAgICBjb25zdCB3cmFwRm4gPSBmbiA9PiB7XG4gICAgICByZXR1cm4gZnVuY3Rpb24gKGV2ZW50KSB7XG4gICAgICAgIGlmICghZXZlbnQucmVsYXRlZFRhcmdldCB8fCAoZXZlbnQucmVsYXRlZFRhcmdldCAhPT0gZXZlbnQuZGVsZWdhdGVUYXJnZXQgJiYgIWV2ZW50LmRlbGVnYXRlVGFyZ2V0LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpKSkge1xuICAgICAgICAgIHJldHVybiBmbi5jYWxsKHRoaXMsIGV2ZW50KVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGRlbGVnYXRpb25Gbikge1xuICAgICAgZGVsZWdhdGlvbkZuID0gd3JhcEZuKGRlbGVnYXRpb25GbilcbiAgICB9IGVsc2Uge1xuICAgICAgaGFuZGxlciA9IHdyYXBGbihoYW5kbGVyKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IFtkZWxlZ2F0aW9uLCBvcmlnaW5hbEhhbmRsZXIsIHR5cGVFdmVudF0gPSBub3JtYWxpemVQYXJhbXMob3JpZ2luYWxUeXBlRXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GbilcbiAgY29uc3QgZXZlbnRzID0gZ2V0RXZlbnQoZWxlbWVudClcbiAgY29uc3QgaGFuZGxlcnMgPSBldmVudHNbdHlwZUV2ZW50XSB8fCAoZXZlbnRzW3R5cGVFdmVudF0gPSB7fSlcbiAgY29uc3QgcHJldmlvdXNGbiA9IGZpbmRIYW5kbGVyKGhhbmRsZXJzLCBvcmlnaW5hbEhhbmRsZXIsIGRlbGVnYXRpb24gPyBoYW5kbGVyIDogbnVsbClcblxuICBpZiAocHJldmlvdXNGbikge1xuICAgIHByZXZpb3VzRm4ub25lT2ZmID0gcHJldmlvdXNGbi5vbmVPZmYgJiYgb25lT2ZmXG5cbiAgICByZXR1cm5cbiAgfVxuXG4gIGNvbnN0IHVpZCA9IGdldFVpZEV2ZW50KG9yaWdpbmFsSGFuZGxlciwgb3JpZ2luYWxUeXBlRXZlbnQucmVwbGFjZShuYW1lc3BhY2VSZWdleCwgJycpKVxuICBjb25zdCBmbiA9IGRlbGVnYXRpb24gP1xuICAgIGJvb3RzdHJhcERlbGVnYXRpb25IYW5kbGVyKGVsZW1lbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GbikgOlxuICAgIGJvb3RzdHJhcEhhbmRsZXIoZWxlbWVudCwgaGFuZGxlcilcblxuICBmbi5kZWxlZ2F0aW9uU2VsZWN0b3IgPSBkZWxlZ2F0aW9uID8gaGFuZGxlciA6IG51bGxcbiAgZm4ub3JpZ2luYWxIYW5kbGVyID0gb3JpZ2luYWxIYW5kbGVyXG4gIGZuLm9uZU9mZiA9IG9uZU9mZlxuICBmbi51aWRFdmVudCA9IHVpZFxuICBoYW5kbGVyc1t1aWRdID0gZm5cblxuICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIodHlwZUV2ZW50LCBmbiwgZGVsZWdhdGlvbilcbn1cblxuZnVuY3Rpb24gcmVtb3ZlSGFuZGxlcihlbGVtZW50LCBldmVudHMsIHR5cGVFdmVudCwgaGFuZGxlciwgZGVsZWdhdGlvblNlbGVjdG9yKSB7XG4gIGNvbnN0IGZuID0gZmluZEhhbmRsZXIoZXZlbnRzW3R5cGVFdmVudF0sIGhhbmRsZXIsIGRlbGVnYXRpb25TZWxlY3RvcilcblxuICBpZiAoIWZuKSB7XG4gICAgcmV0dXJuXG4gIH1cblxuICBlbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZUV2ZW50LCBmbiwgQm9vbGVhbihkZWxlZ2F0aW9uU2VsZWN0b3IpKVxuICBkZWxldGUgZXZlbnRzW3R5cGVFdmVudF1bZm4udWlkRXZlbnRdXG59XG5cbmZ1bmN0aW9uIHJlbW92ZU5hbWVzcGFjZWRIYW5kbGVycyhlbGVtZW50LCBldmVudHMsIHR5cGVFdmVudCwgbmFtZXNwYWNlKSB7XG4gIGNvbnN0IHN0b3JlRWxlbWVudEV2ZW50ID0gZXZlbnRzW3R5cGVFdmVudF0gfHwge31cblxuICBPYmplY3Qua2V5cyhzdG9yZUVsZW1lbnRFdmVudCkuZm9yRWFjaChoYW5kbGVyS2V5ID0+IHtcbiAgICBpZiAoaGFuZGxlcktleS5pbmNsdWRlcyhuYW1lc3BhY2UpKSB7XG4gICAgICBjb25zdCBldmVudCA9IHN0b3JlRWxlbWVudEV2ZW50W2hhbmRsZXJLZXldXG5cbiAgICAgIHJlbW92ZUhhbmRsZXIoZWxlbWVudCwgZXZlbnRzLCB0eXBlRXZlbnQsIGV2ZW50Lm9yaWdpbmFsSGFuZGxlciwgZXZlbnQuZGVsZWdhdGlvblNlbGVjdG9yKVxuICAgIH1cbiAgfSlcbn1cblxuZnVuY3Rpb24gZ2V0VHlwZUV2ZW50KGV2ZW50KSB7XG4gIC8vIGFsbG93IHRvIGdldCB0aGUgbmF0aXZlIGV2ZW50cyBmcm9tIG5hbWVzcGFjZWQgZXZlbnRzICgnY2xpY2suYnMuYnV0dG9uJyAtLT4gJ2NsaWNrJylcbiAgZXZlbnQgPSBldmVudC5yZXBsYWNlKHN0cmlwTmFtZVJlZ2V4LCAnJylcbiAgcmV0dXJuIGN1c3RvbUV2ZW50c1tldmVudF0gfHwgZXZlbnRcbn1cblxuY29uc3QgRXZlbnRIYW5kbGVyID0ge1xuICBvbihlbGVtZW50LCBldmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZuKSB7XG4gICAgYWRkSGFuZGxlcihlbGVtZW50LCBldmVudCwgaGFuZGxlciwgZGVsZWdhdGlvbkZuLCBmYWxzZSlcbiAgfSxcblxuICBvbmUoZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25Gbikge1xuICAgIGFkZEhhbmRsZXIoZWxlbWVudCwgZXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25GbiwgdHJ1ZSlcbiAgfSxcblxuICBvZmYoZWxlbWVudCwgb3JpZ2luYWxUeXBlRXZlbnQsIGhhbmRsZXIsIGRlbGVnYXRpb25Gbikge1xuICAgIGlmICh0eXBlb2Ygb3JpZ2luYWxUeXBlRXZlbnQgIT09ICdzdHJpbmcnIHx8ICFlbGVtZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBbZGVsZWdhdGlvbiwgb3JpZ2luYWxIYW5kbGVyLCB0eXBlRXZlbnRdID0gbm9ybWFsaXplUGFyYW1zKG9yaWdpbmFsVHlwZUV2ZW50LCBoYW5kbGVyLCBkZWxlZ2F0aW9uRm4pXG4gICAgY29uc3QgaW5OYW1lc3BhY2UgPSB0eXBlRXZlbnQgIT09IG9yaWdpbmFsVHlwZUV2ZW50XG4gICAgY29uc3QgZXZlbnRzID0gZ2V0RXZlbnQoZWxlbWVudClcbiAgICBjb25zdCBpc05hbWVzcGFjZSA9IG9yaWdpbmFsVHlwZUV2ZW50LnN0YXJ0c1dpdGgoJy4nKVxuXG4gICAgaWYgKHR5cGVvZiBvcmlnaW5hbEhhbmRsZXIgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAvLyBTaW1wbGVzdCBjYXNlOiBoYW5kbGVyIGlzIHBhc3NlZCwgcmVtb3ZlIHRoYXQgbGlzdGVuZXIgT05MWS5cbiAgICAgIGlmICghZXZlbnRzIHx8ICFldmVudHNbdHlwZUV2ZW50XSkge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgcmVtb3ZlSGFuZGxlcihlbGVtZW50LCBldmVudHMsIHR5cGVFdmVudCwgb3JpZ2luYWxIYW5kbGVyLCBkZWxlZ2F0aW9uID8gaGFuZGxlciA6IG51bGwpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoaXNOYW1lc3BhY2UpIHtcbiAgICAgIE9iamVjdC5rZXlzKGV2ZW50cykuZm9yRWFjaChlbGVtZW50RXZlbnQgPT4ge1xuICAgICAgICByZW1vdmVOYW1lc3BhY2VkSGFuZGxlcnMoZWxlbWVudCwgZXZlbnRzLCBlbGVtZW50RXZlbnQsIG9yaWdpbmFsVHlwZUV2ZW50LnNsaWNlKDEpKVxuICAgICAgfSlcbiAgICB9XG5cbiAgICBjb25zdCBzdG9yZUVsZW1lbnRFdmVudCA9IGV2ZW50c1t0eXBlRXZlbnRdIHx8IHt9XG4gICAgT2JqZWN0LmtleXMoc3RvcmVFbGVtZW50RXZlbnQpLmZvckVhY2goa2V5SGFuZGxlcnMgPT4ge1xuICAgICAgY29uc3QgaGFuZGxlcktleSA9IGtleUhhbmRsZXJzLnJlcGxhY2Uoc3RyaXBVaWRSZWdleCwgJycpXG5cbiAgICAgIGlmICghaW5OYW1lc3BhY2UgfHwgb3JpZ2luYWxUeXBlRXZlbnQuaW5jbHVkZXMoaGFuZGxlcktleSkpIHtcbiAgICAgICAgY29uc3QgZXZlbnQgPSBzdG9yZUVsZW1lbnRFdmVudFtrZXlIYW5kbGVyc11cblxuICAgICAgICByZW1vdmVIYW5kbGVyKGVsZW1lbnQsIGV2ZW50cywgdHlwZUV2ZW50LCBldmVudC5vcmlnaW5hbEhhbmRsZXIsIGV2ZW50LmRlbGVnYXRpb25TZWxlY3RvcilcbiAgICAgIH1cbiAgICB9KVxuICB9LFxuXG4gIHRyaWdnZXIoZWxlbWVudCwgZXZlbnQsIGFyZ3MpIHtcbiAgICBpZiAodHlwZW9mIGV2ZW50ICE9PSAnc3RyaW5nJyB8fCAhZWxlbWVudCkge1xuICAgICAgcmV0dXJuIG51bGxcbiAgICB9XG5cbiAgICBjb25zdCAkID0gZ2V0alF1ZXJ5KClcbiAgICBjb25zdCB0eXBlRXZlbnQgPSBnZXRUeXBlRXZlbnQoZXZlbnQpXG4gICAgY29uc3QgaW5OYW1lc3BhY2UgPSBldmVudCAhPT0gdHlwZUV2ZW50XG4gICAgY29uc3QgaXNOYXRpdmUgPSBuYXRpdmVFdmVudHMuaGFzKHR5cGVFdmVudClcblxuICAgIGxldCBqUXVlcnlFdmVudFxuICAgIGxldCBidWJibGVzID0gdHJ1ZVxuICAgIGxldCBuYXRpdmVEaXNwYXRjaCA9IHRydWVcbiAgICBsZXQgZGVmYXVsdFByZXZlbnRlZCA9IGZhbHNlXG4gICAgbGV0IGV2dCA9IG51bGxcblxuICAgIGlmIChpbk5hbWVzcGFjZSAmJiAkKSB7XG4gICAgICBqUXVlcnlFdmVudCA9ICQuRXZlbnQoZXZlbnQsIGFyZ3MpXG5cbiAgICAgICQoZWxlbWVudCkudHJpZ2dlcihqUXVlcnlFdmVudClcbiAgICAgIGJ1YmJsZXMgPSAhalF1ZXJ5RXZlbnQuaXNQcm9wYWdhdGlvblN0b3BwZWQoKVxuICAgICAgbmF0aXZlRGlzcGF0Y2ggPSAhalF1ZXJ5RXZlbnQuaXNJbW1lZGlhdGVQcm9wYWdhdGlvblN0b3BwZWQoKVxuICAgICAgZGVmYXVsdFByZXZlbnRlZCA9IGpRdWVyeUV2ZW50LmlzRGVmYXVsdFByZXZlbnRlZCgpXG4gICAgfVxuXG4gICAgaWYgKGlzTmF0aXZlKSB7XG4gICAgICBldnQgPSBkb2N1bWVudC5jcmVhdGVFdmVudCgnSFRNTEV2ZW50cycpXG4gICAgICBldnQuaW5pdEV2ZW50KHR5cGVFdmVudCwgYnViYmxlcywgdHJ1ZSlcbiAgICB9IGVsc2Uge1xuICAgICAgZXZ0ID0gbmV3IEN1c3RvbUV2ZW50KGV2ZW50LCB7XG4gICAgICAgIGJ1YmJsZXMsXG4gICAgICAgIGNhbmNlbGFibGU6IHRydWVcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgLy8gbWVyZ2UgY3VzdG9tIGluZm9ybWF0aW9uIGluIG91ciBldmVudFxuICAgIGlmICh0eXBlb2YgYXJncyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIE9iamVjdC5rZXlzKGFyZ3MpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV2dCwga2V5LCB7XG4gICAgICAgICAgZ2V0KCkge1xuICAgICAgICAgICAgcmV0dXJuIGFyZ3Nba2V5XVxuICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKGRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgfVxuXG4gICAgaWYgKG5hdGl2ZURpc3BhdGNoKSB7XG4gICAgICBlbGVtZW50LmRpc3BhdGNoRXZlbnQoZXZ0KVxuICAgIH1cblxuICAgIGlmIChldnQuZGVmYXVsdFByZXZlbnRlZCAmJiB0eXBlb2YgalF1ZXJ5RXZlbnQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICBqUXVlcnlFdmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgfVxuXG4gICAgcmV0dXJuIGV2dFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEV2ZW50SGFuZGxlclxuIiwiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4xLjMpOiBkb20vZGF0YS5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDb25zdGFudHNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IGVsZW1lbnRNYXAgPSBuZXcgTWFwKClcblxuZXhwb3J0IGRlZmF1bHQge1xuICBzZXQoZWxlbWVudCwga2V5LCBpbnN0YW5jZSkge1xuICAgIGlmICghZWxlbWVudE1hcC5oYXMoZWxlbWVudCkpIHtcbiAgICAgIGVsZW1lbnRNYXAuc2V0KGVsZW1lbnQsIG5ldyBNYXAoKSlcbiAgICB9XG5cbiAgICBjb25zdCBpbnN0YW5jZU1hcCA9IGVsZW1lbnRNYXAuZ2V0KGVsZW1lbnQpXG5cbiAgICAvLyBtYWtlIGl0IGNsZWFyIHdlIG9ubHkgd2FudCBvbmUgaW5zdGFuY2UgcGVyIGVsZW1lbnRcbiAgICAvLyBjYW4gYmUgcmVtb3ZlZCBsYXRlciB3aGVuIG11bHRpcGxlIGtleS9pbnN0YW5jZXMgYXJlIGZpbmUgdG8gYmUgdXNlZFxuICAgIGlmICghaW5zdGFuY2VNYXAuaGFzKGtleSkgJiYgaW5zdGFuY2VNYXAuc2l6ZSAhPT0gMCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEJvb3RzdHJhcCBkb2Vzbid0IGFsbG93IG1vcmUgdGhhbiBvbmUgaW5zdGFuY2UgcGVyIGVsZW1lbnQuIEJvdW5kIGluc3RhbmNlOiAke0FycmF5LmZyb20oaW5zdGFuY2VNYXAua2V5cygpKVswXX0uYClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGluc3RhbmNlTWFwLnNldChrZXksIGluc3RhbmNlKVxuICB9LFxuXG4gIGdldChlbGVtZW50LCBrZXkpIHtcbiAgICBpZiAoZWxlbWVudE1hcC5oYXMoZWxlbWVudCkpIHtcbiAgICAgIHJldHVybiBlbGVtZW50TWFwLmdldChlbGVtZW50KS5nZXQoa2V5KSB8fCBudWxsXG4gICAgfVxuXG4gICAgcmV0dXJuIG51bGxcbiAgfSxcblxuICByZW1vdmUoZWxlbWVudCwga2V5KSB7XG4gICAgaWYgKCFlbGVtZW50TWFwLmhhcyhlbGVtZW50KSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgaW5zdGFuY2VNYXAgPSBlbGVtZW50TWFwLmdldChlbGVtZW50KVxuXG4gICAgaW5zdGFuY2VNYXAuZGVsZXRlKGtleSlcblxuICAgIC8vIGZyZWUgdXAgZWxlbWVudCByZWZlcmVuY2VzIGlmIHRoZXJlIGFyZSBubyBpbnN0YW5jZXMgbGVmdCBmb3IgYW4gZWxlbWVudFxuICAgIGlmIChpbnN0YW5jZU1hcC5zaXplID09PSAwKSB7XG4gICAgICBlbGVtZW50TWFwLmRlbGV0ZShlbGVtZW50KVxuICAgIH1cbiAgfVxufVxuIiwiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4xLjMpOiBiYXNlLWNvbXBvbmVudC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCBEYXRhIGZyb20gJy4vZG9tL2RhdGEnXG5pbXBvcnQge1xuICBleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uLFxuICBnZXRFbGVtZW50XG59IGZyb20gJy4vdXRpbC9pbmRleCdcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlcidcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvbnN0YW50c1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgVkVSU0lPTiA9ICc1LjEuMydcblxuY2xhc3MgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQpIHtcbiAgICBlbGVtZW50ID0gZ2V0RWxlbWVudChlbGVtZW50KVxuXG4gICAgaWYgKCFlbGVtZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9lbGVtZW50ID0gZWxlbWVudFxuICAgIERhdGEuc2V0KHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuREFUQV9LRVksIHRoaXMpXG4gIH1cblxuICBkaXNwb3NlKCkge1xuICAgIERhdGEucmVtb3ZlKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuREFUQV9LRVkpXG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLkVWRU5UX0tFWSlcblxuICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMpLmZvckVhY2gocHJvcGVydHlOYW1lID0+IHtcbiAgICAgIHRoaXNbcHJvcGVydHlOYW1lXSA9IG51bGxcbiAgICB9KVxuICB9XG5cbiAgX3F1ZXVlQ2FsbGJhY2soY2FsbGJhY2ssIGVsZW1lbnQsIGlzQW5pbWF0ZWQgPSB0cnVlKSB7XG4gICAgZXhlY3V0ZUFmdGVyVHJhbnNpdGlvbihjYWxsYmFjaywgZWxlbWVudCwgaXNBbmltYXRlZClcbiAgfVxuXG4gIC8qKiBTdGF0aWMgKi9cblxuICBzdGF0aWMgZ2V0SW5zdGFuY2UoZWxlbWVudCkge1xuICAgIHJldHVybiBEYXRhLmdldChnZXRFbGVtZW50KGVsZW1lbnQpLCB0aGlzLkRBVEFfS0VZKVxuICB9XG5cbiAgc3RhdGljIGdldE9yQ3JlYXRlSW5zdGFuY2UoZWxlbWVudCwgY29uZmlnID0ge30pIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJbnN0YW5jZShlbGVtZW50KSB8fCBuZXcgdGhpcyhlbGVtZW50LCB0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyA/IGNvbmZpZyA6IG51bGwpXG4gIH1cblxuICBzdGF0aWMgZ2V0IFZFUlNJT04oKSB7XG4gICAgcmV0dXJuIFZFUlNJT05cbiAgfVxuXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ1lvdSBoYXZlIHRvIGltcGxlbWVudCB0aGUgc3RhdGljIG1ldGhvZCBcIk5BTUVcIiwgZm9yIGVhY2ggY29tcG9uZW50IScpXG4gIH1cblxuICBzdGF0aWMgZ2V0IERBVEFfS0VZKCkge1xuICAgIHJldHVybiBgYnMuJHt0aGlzLk5BTUV9YFxuICB9XG5cbiAgc3RhdGljIGdldCBFVkVOVF9LRVkoKSB7XG4gICAgcmV0dXJuIGAuJHt0aGlzLkRBVEFfS0VZfWBcbiAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBCYXNlQ29tcG9uZW50XG4iLCIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjEuMyk6IHV0aWwvY29tcG9uZW50LWZ1bmN0aW9ucy5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgeyBnZXRFbGVtZW50RnJvbVNlbGVjdG9yLCBpc0Rpc2FibGVkIH0gZnJvbSAnLi9pbmRleCdcblxuY29uc3QgZW5hYmxlRGlzbWlzc1RyaWdnZXIgPSAoY29tcG9uZW50LCBtZXRob2QgPSAnaGlkZScpID0+IHtcbiAgY29uc3QgY2xpY2tFdmVudCA9IGBjbGljay5kaXNtaXNzJHtjb21wb25lbnQuRVZFTlRfS0VZfWBcbiAgY29uc3QgbmFtZSA9IGNvbXBvbmVudC5OQU1FXG5cbiAgRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBjbGlja0V2ZW50LCBgW2RhdGEtYnMtZGlzbWlzcz1cIiR7bmFtZX1cIl1gLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgICBpZiAoWydBJywgJ0FSRUEnXS5pbmNsdWRlcyh0aGlzLnRhZ05hbWUpKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gICAgfVxuXG4gICAgaWYgKGlzRGlzYWJsZWQodGhpcykpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHRhcmdldCA9IGdldEVsZW1lbnRGcm9tU2VsZWN0b3IodGhpcykgfHwgdGhpcy5jbG9zZXN0KGAuJHtuYW1lfWApXG4gICAgY29uc3QgaW5zdGFuY2UgPSBjb21wb25lbnQuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0YXJnZXQpXG5cbiAgICAvLyBNZXRob2QgYXJndW1lbnQgaXMgbGVmdCwgZm9yIEFsZXJ0IGFuZCBvbmx5LCBhcyBpdCBkb2Vzbid0IGltcGxlbWVudCB0aGUgJ2hpZGUnIG1ldGhvZFxuICAgIGluc3RhbmNlW21ldGhvZF0oKVxuICB9KVxufVxuXG5leHBvcnQge1xuICBlbmFibGVEaXNtaXNzVHJpZ2dlclxufVxuIiwiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4xLjMpOiBhbGVydC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCB7IGRlZmluZUpRdWVyeVBsdWdpbiB9IGZyb20gJy4vdXRpbC9pbmRleCdcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlcidcbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gJy4vYmFzZS1jb21wb25lbnQnXG5pbXBvcnQgeyBlbmFibGVEaXNtaXNzVHJpZ2dlciB9IGZyb20gJy4vdXRpbC9jb21wb25lbnQtZnVuY3Rpb25zJ1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ29uc3RhbnRzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCBOQU1FID0gJ2FsZXJ0J1xuY29uc3QgREFUQV9LRVkgPSAnYnMuYWxlcnQnXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuXG5jb25zdCBFVkVOVF9DTE9TRSA9IGBjbG9zZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0NMT1NFRCA9IGBjbG9zZWQke0VWRU5UX0tFWX1gXG5jb25zdCBDTEFTU19OQU1FX0ZBREUgPSAnZmFkZSdcbmNvbnN0IENMQVNTX05BTUVfU0hPVyA9ICdzaG93J1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ2xhc3MgRGVmaW5pdGlvblxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY2xhc3MgQWxlcnQgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgLy8gR2V0dGVyc1xuXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRVxuICB9XG5cbiAgLy8gUHVibGljXG5cbiAgY2xvc2UoKSB7XG4gICAgY29uc3QgY2xvc2VFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0NMT1NFKVxuXG4gICAgaWYgKGNsb3NlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVylcblxuICAgIGNvbnN0IGlzQW5pbWF0ZWQgPSB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUpXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjaygoKSA9PiB0aGlzLl9kZXN0cm95RWxlbWVudCgpLCB0aGlzLl9lbGVtZW50LCBpc0FuaW1hdGVkKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuICBfZGVzdHJveUVsZW1lbnQoKSB7XG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmUoKVxuICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0NMT1NFRClcbiAgICB0aGlzLmRpc3Bvc2UoKVxuICB9XG5cbiAgLy8gU3RhdGljXG5cbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBBbGVydC5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMpXG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGFbY29uZmlnXSA9PT0gdW5kZWZpbmVkIHx8IGNvbmZpZy5zdGFydHNXaXRoKCdfJykgfHwgY29uZmlnID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYClcbiAgICAgIH1cblxuICAgICAgZGF0YVtjb25maWddKHRoaXMpXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmVuYWJsZURpc21pc3NUcmlnZ2VyKEFsZXJ0LCAnY2xvc2UnKVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogalF1ZXJ5XG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIGFkZCAuQWxlcnQgdG8galF1ZXJ5IG9ubHkgaWYgalF1ZXJ5IGlzIHByZXNlbnRcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oQWxlcnQpXG5cbmV4cG9ydCBkZWZhdWx0IEFsZXJ0XG4iLCIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjEuMyk6IGJ1dHRvbi5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCB7IGRlZmluZUpRdWVyeVBsdWdpbiB9IGZyb20gJy4vdXRpbC9pbmRleCdcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlcidcbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gJy4vYmFzZS1jb21wb25lbnQnXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDb25zdGFudHNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IE5BTUUgPSAnYnV0dG9uJ1xuY29uc3QgREFUQV9LRVkgPSAnYnMuYnV0dG9uJ1xuY29uc3QgRVZFTlRfS0VZID0gYC4ke0RBVEFfS0VZfWBcbmNvbnN0IERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknXG5cbmNvbnN0IENMQVNTX05BTUVfQUNUSVZFID0gJ2FjdGl2ZSdcblxuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUgPSAnW2RhdGEtYnMtdG9nZ2xlPVwiYnV0dG9uXCJdJ1xuXG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSA9IGBjbGljayR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENsYXNzIERlZmluaXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNsYXNzIEJ1dHRvbiBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICAvLyBHZXR0ZXJzXG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcblxuICB0b2dnbGUoKSB7XG4gICAgLy8gVG9nZ2xlIGNsYXNzIGFuZCBzeW5jIHRoZSBgYXJpYS1wcmVzc2VkYCBhdHRyaWJ1dGUgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBgLnRvZ2dsZSgpYCBtZXRob2RcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1wcmVzc2VkJywgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QudG9nZ2xlKENMQVNTX05BTUVfQUNUSVZFKSlcbiAgfVxuXG4gIC8vIFN0YXRpY1xuXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gQnV0dG9uLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcylcblxuICAgICAgaWYgKGNvbmZpZyA9PT0gJ3RvZ2dsZScpIHtcbiAgICAgICAgZGF0YVtjb25maWddKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBEYXRhIEFwaSBpbXBsZW1lbnRhdGlvblxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSwgU0VMRUNUT1JfREFUQV9UT0dHTEUsIGV2ZW50ID0+IHtcbiAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuXG4gIGNvbnN0IGJ1dHRvbiA9IGV2ZW50LnRhcmdldC5jbG9zZXN0KFNFTEVDVE9SX0RBVEFfVE9HR0xFKVxuICBjb25zdCBkYXRhID0gQnV0dG9uLmdldE9yQ3JlYXRlSW5zdGFuY2UoYnV0dG9uKVxuXG4gIGRhdGEudG9nZ2xlKClcbn0pXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBqUXVlcnlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogYWRkIC5CdXR0b24gdG8galF1ZXJ5IG9ubHkgaWYgalF1ZXJ5IGlzIHByZXNlbnRcbiAqL1xuXG5kZWZpbmVKUXVlcnlQbHVnaW4oQnV0dG9uKVxuXG5leHBvcnQgZGVmYXVsdCBCdXR0b25cbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMS4zKTogZG9tL21hbmlwdWxhdG9yLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuZnVuY3Rpb24gbm9ybWFsaXplRGF0YSh2YWwpIHtcbiAgaWYgKHZhbCA9PT0gJ3RydWUnKSB7XG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIGlmICh2YWwgPT09ICdmYWxzZScpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIGlmICh2YWwgPT09IE51bWJlcih2YWwpLnRvU3RyaW5nKCkpIHtcbiAgICByZXR1cm4gTnVtYmVyKHZhbClcbiAgfVxuXG4gIGlmICh2YWwgPT09ICcnIHx8IHZhbCA9PT0gJ251bGwnKSB7XG4gICAgcmV0dXJuIG51bGxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplRGF0YUtleShrZXkpIHtcbiAgcmV0dXJuIGtleS5yZXBsYWNlKC9bQS1aXS9nLCBjaHIgPT4gYC0ke2Noci50b0xvd2VyQ2FzZSgpfWApXG59XG5cbmNvbnN0IE1hbmlwdWxhdG9yID0ge1xuICBzZXREYXRhQXR0cmlidXRlKGVsZW1lbnQsIGtleSwgdmFsdWUpIHtcbiAgICBlbGVtZW50LnNldEF0dHJpYnV0ZShgZGF0YS1icy0ke25vcm1hbGl6ZURhdGFLZXkoa2V5KX1gLCB2YWx1ZSlcbiAgfSxcblxuICByZW1vdmVEYXRhQXR0cmlidXRlKGVsZW1lbnQsIGtleSkge1xuICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGBkYXRhLWJzLSR7bm9ybWFsaXplRGF0YUtleShrZXkpfWApXG4gIH0sXG5cbiAgZ2V0RGF0YUF0dHJpYnV0ZXMoZWxlbWVudCkge1xuICAgIGlmICghZWxlbWVudCkge1xuICAgICAgcmV0dXJuIHt9XG4gICAgfVxuXG4gICAgY29uc3QgYXR0cmlidXRlcyA9IHt9XG5cbiAgICBPYmplY3Qua2V5cyhlbGVtZW50LmRhdGFzZXQpXG4gICAgICAuZmlsdGVyKGtleSA9PiBrZXkuc3RhcnRzV2l0aCgnYnMnKSlcbiAgICAgIC5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgIGxldCBwdXJlS2V5ID0ga2V5LnJlcGxhY2UoL15icy8sICcnKVxuICAgICAgICBwdXJlS2V5ID0gcHVyZUtleS5jaGFyQXQoMCkudG9Mb3dlckNhc2UoKSArIHB1cmVLZXkuc2xpY2UoMSwgcHVyZUtleS5sZW5ndGgpXG4gICAgICAgIGF0dHJpYnV0ZXNbcHVyZUtleV0gPSBub3JtYWxpemVEYXRhKGVsZW1lbnQuZGF0YXNldFtrZXldKVxuICAgICAgfSlcblxuICAgIHJldHVybiBhdHRyaWJ1dGVzXG4gIH0sXG5cbiAgZ2V0RGF0YUF0dHJpYnV0ZShlbGVtZW50LCBrZXkpIHtcbiAgICByZXR1cm4gbm9ybWFsaXplRGF0YShlbGVtZW50LmdldEF0dHJpYnV0ZShgZGF0YS1icy0ke25vcm1hbGl6ZURhdGFLZXkoa2V5KX1gKSlcbiAgfSxcblxuICBvZmZzZXQoZWxlbWVudCkge1xuICAgIGNvbnN0IHJlY3QgPSBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpXG5cbiAgICByZXR1cm4ge1xuICAgICAgdG9wOiByZWN0LnRvcCArIHdpbmRvdy5wYWdlWU9mZnNldCxcbiAgICAgIGxlZnQ6IHJlY3QubGVmdCArIHdpbmRvdy5wYWdlWE9mZnNldFxuICAgIH1cbiAgfSxcblxuICBwb3NpdGlvbihlbGVtZW50KSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHRvcDogZWxlbWVudC5vZmZzZXRUb3AsXG4gICAgICBsZWZ0OiBlbGVtZW50Lm9mZnNldExlZnRcbiAgICB9XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgTWFuaXB1bGF0b3JcbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMS4zKTogZG9tL3NlbGVjdG9yLWVuZ2luZS5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDb25zdGFudHNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCB7IGlzRGlzYWJsZWQsIGlzVmlzaWJsZSB9IGZyb20gJy4uL3V0aWwvaW5kZXgnXG5cbmNvbnN0IE5PREVfVEVYVCA9IDNcblxuY29uc3QgU2VsZWN0b3JFbmdpbmUgPSB7XG4gIGZpbmQoc2VsZWN0b3IsIGVsZW1lbnQgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICByZXR1cm4gW10uY29uY2F0KC4uLkVsZW1lbnQucHJvdG90eXBlLnF1ZXJ5U2VsZWN0b3JBbGwuY2FsbChlbGVtZW50LCBzZWxlY3RvcikpXG4gIH0sXG5cbiAgZmluZE9uZShzZWxlY3RvciwgZWxlbWVudCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgIHJldHVybiBFbGVtZW50LnByb3RvdHlwZS5xdWVyeVNlbGVjdG9yLmNhbGwoZWxlbWVudCwgc2VsZWN0b3IpXG4gIH0sXG5cbiAgY2hpbGRyZW4oZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICByZXR1cm4gW10uY29uY2F0KC4uLmVsZW1lbnQuY2hpbGRyZW4pXG4gICAgICAuZmlsdGVyKGNoaWxkID0+IGNoaWxkLm1hdGNoZXMoc2VsZWN0b3IpKVxuICB9LFxuXG4gIHBhcmVudHMoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICBjb25zdCBwYXJlbnRzID0gW11cblxuICAgIGxldCBhbmNlc3RvciA9IGVsZW1lbnQucGFyZW50Tm9kZVxuXG4gICAgd2hpbGUgKGFuY2VzdG9yICYmIGFuY2VzdG9yLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJiBhbmNlc3Rvci5ub2RlVHlwZSAhPT0gTk9ERV9URVhUKSB7XG4gICAgICBpZiAoYW5jZXN0b3IubWF0Y2hlcyhzZWxlY3RvcikpIHtcbiAgICAgICAgcGFyZW50cy5wdXNoKGFuY2VzdG9yKVxuICAgICAgfVxuXG4gICAgICBhbmNlc3RvciA9IGFuY2VzdG9yLnBhcmVudE5vZGVcbiAgICB9XG5cbiAgICByZXR1cm4gcGFyZW50c1xuICB9LFxuXG4gIHByZXYoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICBsZXQgcHJldmlvdXMgPSBlbGVtZW50LnByZXZpb3VzRWxlbWVudFNpYmxpbmdcblxuICAgIHdoaWxlIChwcmV2aW91cykge1xuICAgICAgaWYgKHByZXZpb3VzLm1hdGNoZXMoc2VsZWN0b3IpKSB7XG4gICAgICAgIHJldHVybiBbcHJldmlvdXNdXG4gICAgICB9XG5cbiAgICAgIHByZXZpb3VzID0gcHJldmlvdXMucHJldmlvdXNFbGVtZW50U2libGluZ1xuICAgIH1cblxuICAgIHJldHVybiBbXVxuICB9LFxuXG4gIG5leHQoZWxlbWVudCwgc2VsZWN0b3IpIHtcbiAgICBsZXQgbmV4dCA9IGVsZW1lbnQubmV4dEVsZW1lbnRTaWJsaW5nXG5cbiAgICB3aGlsZSAobmV4dCkge1xuICAgICAgaWYgKG5leHQubWF0Y2hlcyhzZWxlY3RvcikpIHtcbiAgICAgICAgcmV0dXJuIFtuZXh0XVxuICAgICAgfVxuXG4gICAgICBuZXh0ID0gbmV4dC5uZXh0RWxlbWVudFNpYmxpbmdcbiAgICB9XG5cbiAgICByZXR1cm4gW11cbiAgfSxcblxuICBmb2N1c2FibGVDaGlsZHJlbihlbGVtZW50KSB7XG4gICAgY29uc3QgZm9jdXNhYmxlcyA9IFtcbiAgICAgICdhJyxcbiAgICAgICdidXR0b24nLFxuICAgICAgJ2lucHV0JyxcbiAgICAgICd0ZXh0YXJlYScsXG4gICAgICAnc2VsZWN0JyxcbiAgICAgICdkZXRhaWxzJyxcbiAgICAgICdbdGFiaW5kZXhdJyxcbiAgICAgICdbY29udGVudGVkaXRhYmxlPVwidHJ1ZVwiXSdcbiAgICBdLm1hcChzZWxlY3RvciA9PiBgJHtzZWxlY3Rvcn06bm90KFt0YWJpbmRleF49XCItXCJdKWApLmpvaW4oJywgJylcblxuICAgIHJldHVybiB0aGlzLmZpbmQoZm9jdXNhYmxlcywgZWxlbWVudCkuZmlsdGVyKGVsID0+ICFpc0Rpc2FibGVkKGVsKSAmJiBpc1Zpc2libGUoZWwpKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNlbGVjdG9yRW5naW5lXG4iLCIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjEuMyk6IGNhcm91c2VsLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IHtcbiAgZGVmaW5lSlF1ZXJ5UGx1Z2luLFxuICBnZXRFbGVtZW50RnJvbVNlbGVjdG9yLFxuICBpc1JUTCxcbiAgaXNWaXNpYmxlLFxuICBnZXROZXh0QWN0aXZlRWxlbWVudCxcbiAgcmVmbG93LFxuICB0cmlnZ2VyVHJhbnNpdGlvbkVuZCxcbiAgdHlwZUNoZWNrQ29uZmlnXG59IGZyb20gJy4vdXRpbC9pbmRleCdcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlcidcbmltcG9ydCBNYW5pcHVsYXRvciBmcm9tICcuL2RvbS9tYW5pcHVsYXRvcidcbmltcG9ydCBTZWxlY3RvckVuZ2luZSBmcm9tICcuL2RvbS9zZWxlY3Rvci1lbmdpbmUnXG5pbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tICcuL2Jhc2UtY29tcG9uZW50J1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ29uc3RhbnRzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCBOQU1FID0gJ2Nhcm91c2VsJ1xuY29uc3QgREFUQV9LRVkgPSAnYnMuY2Fyb3VzZWwnXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSdcblxuY29uc3QgQVJST1dfTEVGVF9LRVkgPSAnQXJyb3dMZWZ0J1xuY29uc3QgQVJST1dfUklHSFRfS0VZID0gJ0Fycm93UmlnaHQnXG5jb25zdCBUT1VDSEVWRU5UX0NPTVBBVF9XQUlUID0gNTAwIC8vIFRpbWUgZm9yIG1vdXNlIGNvbXBhdCBldmVudHMgdG8gZmlyZSBhZnRlciB0b3VjaFxuY29uc3QgU1dJUEVfVEhSRVNIT0xEID0gNDBcblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgaW50ZXJ2YWw6IDUwMDAsXG4gIGtleWJvYXJkOiB0cnVlLFxuICBzbGlkZTogZmFsc2UsXG4gIHBhdXNlOiAnaG92ZXInLFxuICB3cmFwOiB0cnVlLFxuICB0b3VjaDogdHJ1ZVxufVxuXG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgaW50ZXJ2YWw6ICcobnVtYmVyfGJvb2xlYW4pJyxcbiAga2V5Ym9hcmQ6ICdib29sZWFuJyxcbiAgc2xpZGU6ICcoYm9vbGVhbnxzdHJpbmcpJyxcbiAgcGF1c2U6ICcoc3RyaW5nfGJvb2xlYW4pJyxcbiAgd3JhcDogJ2Jvb2xlYW4nLFxuICB0b3VjaDogJ2Jvb2xlYW4nXG59XG5cbmNvbnN0IE9SREVSX05FWFQgPSAnbmV4dCdcbmNvbnN0IE9SREVSX1BSRVYgPSAncHJldidcbmNvbnN0IERJUkVDVElPTl9MRUZUID0gJ2xlZnQnXG5jb25zdCBESVJFQ1RJT05fUklHSFQgPSAncmlnaHQnXG5cbmNvbnN0IEtFWV9UT19ESVJFQ1RJT04gPSB7XG4gIFtBUlJPV19MRUZUX0tFWV06IERJUkVDVElPTl9SSUdIVCxcbiAgW0FSUk9XX1JJR0hUX0tFWV06IERJUkVDVElPTl9MRUZUXG59XG5cbmNvbnN0IEVWRU5UX1NMSURFID0gYHNsaWRlJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfU0xJRCA9IGBzbGlkJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfS0VZRE9XTiA9IGBrZXlkb3duJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfTU9VU0VFTlRFUiA9IGBtb3VzZWVudGVyJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfTU9VU0VMRUFWRSA9IGBtb3VzZWxlYXZlJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfVE9VQ0hTVEFSVCA9IGB0b3VjaHN0YXJ0JHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfVE9VQ0hNT1ZFID0gYHRvdWNobW92ZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1RPVUNIRU5EID0gYHRvdWNoZW5kJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfUE9JTlRFUkRPV04gPSBgcG9pbnRlcmRvd24ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9QT0lOVEVSVVAgPSBgcG9pbnRlcnVwJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfRFJBR19TVEFSVCA9IGBkcmFnc3RhcnQke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9MT0FEX0RBVEFfQVBJID0gYGxvYWQke0VWRU5UX0tFWX0ke0RBVEFfQVBJX0tFWX1gXG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSA9IGBjbGljayR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcblxuY29uc3QgQ0xBU1NfTkFNRV9DQVJPVVNFTCA9ICdjYXJvdXNlbCdcbmNvbnN0IENMQVNTX05BTUVfQUNUSVZFID0gJ2FjdGl2ZSdcbmNvbnN0IENMQVNTX05BTUVfU0xJREUgPSAnc2xpZGUnXG5jb25zdCBDTEFTU19OQU1FX0VORCA9ICdjYXJvdXNlbC1pdGVtLWVuZCdcbmNvbnN0IENMQVNTX05BTUVfU1RBUlQgPSAnY2Fyb3VzZWwtaXRlbS1zdGFydCdcbmNvbnN0IENMQVNTX05BTUVfTkVYVCA9ICdjYXJvdXNlbC1pdGVtLW5leHQnXG5jb25zdCBDTEFTU19OQU1FX1BSRVYgPSAnY2Fyb3VzZWwtaXRlbS1wcmV2J1xuY29uc3QgQ0xBU1NfTkFNRV9QT0lOVEVSX0VWRU5UID0gJ3BvaW50ZXItZXZlbnQnXG5cbmNvbnN0IFNFTEVDVE9SX0FDVElWRSA9ICcuYWN0aXZlJ1xuY29uc3QgU0VMRUNUT1JfQUNUSVZFX0lURU0gPSAnLmFjdGl2ZS5jYXJvdXNlbC1pdGVtJ1xuY29uc3QgU0VMRUNUT1JfSVRFTSA9ICcuY2Fyb3VzZWwtaXRlbSdcbmNvbnN0IFNFTEVDVE9SX0lURU1fSU1HID0gJy5jYXJvdXNlbC1pdGVtIGltZydcbmNvbnN0IFNFTEVDVE9SX05FWFRfUFJFViA9ICcuY2Fyb3VzZWwtaXRlbS1uZXh0LCAuY2Fyb3VzZWwtaXRlbS1wcmV2J1xuY29uc3QgU0VMRUNUT1JfSU5ESUNBVE9SUyA9ICcuY2Fyb3VzZWwtaW5kaWNhdG9ycydcbmNvbnN0IFNFTEVDVE9SX0lORElDQVRPUiA9ICdbZGF0YS1icy10YXJnZXRdJ1xuY29uc3QgU0VMRUNUT1JfREFUQV9TTElERSA9ICdbZGF0YS1icy1zbGlkZV0sIFtkYXRhLWJzLXNsaWRlLXRvXSdcbmNvbnN0IFNFTEVDVE9SX0RBVEFfUklERSA9ICdbZGF0YS1icy1yaWRlPVwiY2Fyb3VzZWxcIl0nXG5cbmNvbnN0IFBPSU5URVJfVFlQRV9UT1VDSCA9ICd0b3VjaCdcbmNvbnN0IFBPSU5URVJfVFlQRV9QRU4gPSAncGVuJ1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ2xhc3MgRGVmaW5pdGlvblxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cbmNsYXNzIENhcm91c2VsIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQpXG5cbiAgICB0aGlzLl9pdGVtcyA9IG51bGxcbiAgICB0aGlzLl9pbnRlcnZhbCA9IG51bGxcbiAgICB0aGlzLl9hY3RpdmVFbGVtZW50ID0gbnVsbFxuICAgIHRoaXMuX2lzUGF1c2VkID0gZmFsc2VcbiAgICB0aGlzLl9pc1NsaWRpbmcgPSBmYWxzZVxuICAgIHRoaXMudG91Y2hUaW1lb3V0ID0gbnVsbFxuICAgIHRoaXMudG91Y2hTdGFydFggPSAwXG4gICAgdGhpcy50b3VjaERlbHRhWCA9IDBcblxuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpXG4gICAgdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0lORElDQVRPUlMsIHRoaXMuX2VsZW1lbnQpXG4gICAgdGhpcy5fdG91Y2hTdXBwb3J0ZWQgPSAnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgfHwgbmF2aWdhdG9yLm1heFRvdWNoUG9pbnRzID4gMFxuICAgIHRoaXMuX3BvaW50ZXJFdmVudCA9IEJvb2xlYW4od2luZG93LlBvaW50ZXJFdmVudClcblxuICAgIHRoaXMuX2FkZEV2ZW50TGlzdGVuZXJzKClcbiAgfVxuXG4gIC8vIEdldHRlcnNcblxuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRVxuICB9XG5cbiAgLy8gUHVibGljXG5cbiAgbmV4dCgpIHtcbiAgICB0aGlzLl9zbGlkZShPUkRFUl9ORVhUKVxuICB9XG5cbiAgbmV4dFdoZW5WaXNpYmxlKCkge1xuICAgIC8vIERvbid0IGNhbGwgbmV4dCB3aGVuIHRoZSBwYWdlIGlzbid0IHZpc2libGVcbiAgICAvLyBvciB0aGUgY2Fyb3VzZWwgb3IgaXRzIHBhcmVudCBpc24ndCB2aXNpYmxlXG4gICAgaWYgKCFkb2N1bWVudC5oaWRkZW4gJiYgaXNWaXNpYmxlKHRoaXMuX2VsZW1lbnQpKSB7XG4gICAgICB0aGlzLm5leHQoKVxuICAgIH1cbiAgfVxuXG4gIHByZXYoKSB7XG4gICAgdGhpcy5fc2xpZGUoT1JERVJfUFJFVilcbiAgfVxuXG4gIHBhdXNlKGV2ZW50KSB7XG4gICAgaWYgKCFldmVudCkge1xuICAgICAgdGhpcy5faXNQYXVzZWQgPSB0cnVlXG4gICAgfVxuXG4gICAgaWYgKFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfTkVYVF9QUkVWLCB0aGlzLl9lbGVtZW50KSkge1xuICAgICAgdHJpZ2dlclRyYW5zaXRpb25FbmQodGhpcy5fZWxlbWVudClcbiAgICAgIHRoaXMuY3ljbGUodHJ1ZSlcbiAgICB9XG5cbiAgICBjbGVhckludGVydmFsKHRoaXMuX2ludGVydmFsKVxuICAgIHRoaXMuX2ludGVydmFsID0gbnVsbFxuICB9XG5cbiAgY3ljbGUoZXZlbnQpIHtcbiAgICBpZiAoIWV2ZW50KSB7XG4gICAgICB0aGlzLl9pc1BhdXNlZCA9IGZhbHNlXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2ludGVydmFsKSB7XG4gICAgICBjbGVhckludGVydmFsKHRoaXMuX2ludGVydmFsKVxuICAgICAgdGhpcy5faW50ZXJ2YWwgPSBudWxsXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZyAmJiB0aGlzLl9jb25maWcuaW50ZXJ2YWwgJiYgIXRoaXMuX2lzUGF1c2VkKSB7XG4gICAgICB0aGlzLl91cGRhdGVJbnRlcnZhbCgpXG5cbiAgICAgIHRoaXMuX2ludGVydmFsID0gc2V0SW50ZXJ2YWwoXG4gICAgICAgIChkb2N1bWVudC52aXNpYmlsaXR5U3RhdGUgPyB0aGlzLm5leHRXaGVuVmlzaWJsZSA6IHRoaXMubmV4dCkuYmluZCh0aGlzKSxcbiAgICAgICAgdGhpcy5fY29uZmlnLmludGVydmFsXG4gICAgICApXG4gICAgfVxuICB9XG5cbiAgdG8oaW5kZXgpIHtcbiAgICB0aGlzLl9hY3RpdmVFbGVtZW50ID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9BQ1RJVkVfSVRFTSwgdGhpcy5fZWxlbWVudClcbiAgICBjb25zdCBhY3RpdmVJbmRleCA9IHRoaXMuX2dldEl0ZW1JbmRleCh0aGlzLl9hY3RpdmVFbGVtZW50KVxuXG4gICAgaWYgKGluZGV4ID4gdGhpcy5faXRlbXMubGVuZ3RoIC0gMSB8fCBpbmRleCA8IDApIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0aGlzLl9pc1NsaWRpbmcpIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbmUodGhpcy5fZWxlbWVudCwgRVZFTlRfU0xJRCwgKCkgPT4gdGhpcy50byhpbmRleCkpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoYWN0aXZlSW5kZXggPT09IGluZGV4KSB7XG4gICAgICB0aGlzLnBhdXNlKClcbiAgICAgIHRoaXMuY3ljbGUoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgb3JkZXIgPSBpbmRleCA+IGFjdGl2ZUluZGV4ID9cbiAgICAgIE9SREVSX05FWFQgOlxuICAgICAgT1JERVJfUFJFVlxuXG4gICAgdGhpcy5fc2xpZGUob3JkZXIsIHRoaXMuX2l0ZW1zW2luZGV4XSlcbiAgfVxuXG4gIC8vIFByaXZhdGVcblxuICBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IHtcbiAgICAgIC4uLkRlZmF1bHQsXG4gICAgICAuLi5NYW5pcHVsYXRvci5nZXREYXRhQXR0cmlidXRlcyh0aGlzLl9lbGVtZW50KSxcbiAgICAgIC4uLih0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyA/IGNvbmZpZyA6IHt9KVxuICAgIH1cbiAgICB0eXBlQ2hlY2tDb25maWcoTkFNRSwgY29uZmlnLCBEZWZhdWx0VHlwZSlcbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICBfaGFuZGxlU3dpcGUoKSB7XG4gICAgY29uc3QgYWJzRGVsdGF4ID0gTWF0aC5hYnModGhpcy50b3VjaERlbHRhWClcblxuICAgIGlmIChhYnNEZWx0YXggPD0gU1dJUEVfVEhSRVNIT0xEKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBkaXJlY3Rpb24gPSBhYnNEZWx0YXggLyB0aGlzLnRvdWNoRGVsdGFYXG5cbiAgICB0aGlzLnRvdWNoRGVsdGFYID0gMFxuXG4gICAgaWYgKCFkaXJlY3Rpb24pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX3NsaWRlKGRpcmVjdGlvbiA+IDAgPyBESVJFQ1RJT05fUklHSFQgOiBESVJFQ1RJT05fTEVGVClcbiAgfVxuXG4gIF9hZGRFdmVudExpc3RlbmVycygpIHtcbiAgICBpZiAodGhpcy5fY29uZmlnLmtleWJvYXJkKSB7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfS0VZRE9XTiwgZXZlbnQgPT4gdGhpcy5fa2V5ZG93bihldmVudCkpXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5wYXVzZSA9PT0gJ2hvdmVyJykge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFRU5URVIsIGV2ZW50ID0+IHRoaXMucGF1c2UoZXZlbnQpKVxuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX01PVVNFTEVBVkUsIGV2ZW50ID0+IHRoaXMuY3ljbGUoZXZlbnQpKVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb25maWcudG91Y2ggJiYgdGhpcy5fdG91Y2hTdXBwb3J0ZWQpIHtcbiAgICAgIHRoaXMuX2FkZFRvdWNoRXZlbnRMaXN0ZW5lcnMoKVxuICAgIH1cbiAgfVxuXG4gIF9hZGRUb3VjaEV2ZW50TGlzdGVuZXJzKCkge1xuICAgIGNvbnN0IGhhc1BvaW50ZXJQZW5Ub3VjaCA9IGV2ZW50ID0+IHtcbiAgICAgIHJldHVybiB0aGlzLl9wb2ludGVyRXZlbnQgJiZcbiAgICAgICAgKGV2ZW50LnBvaW50ZXJUeXBlID09PSBQT0lOVEVSX1RZUEVfUEVOIHx8IGV2ZW50LnBvaW50ZXJUeXBlID09PSBQT0lOVEVSX1RZUEVfVE9VQ0gpXG4gICAgfVxuXG4gICAgY29uc3Qgc3RhcnQgPSBldmVudCA9PiB7XG4gICAgICBpZiAoaGFzUG9pbnRlclBlblRvdWNoKGV2ZW50KSkge1xuICAgICAgICB0aGlzLnRvdWNoU3RhcnRYID0gZXZlbnQuY2xpZW50WFxuICAgICAgfSBlbHNlIGlmICghdGhpcy5fcG9pbnRlckV2ZW50KSB7XG4gICAgICAgIHRoaXMudG91Y2hTdGFydFggPSBldmVudC50b3VjaGVzWzBdLmNsaWVudFhcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBtb3ZlID0gZXZlbnQgPT4ge1xuICAgICAgLy8gZW5zdXJlIHN3aXBpbmcgd2l0aCBvbmUgdG91Y2ggYW5kIG5vdCBwaW5jaGluZ1xuICAgICAgdGhpcy50b3VjaERlbHRhWCA9IGV2ZW50LnRvdWNoZXMgJiYgZXZlbnQudG91Y2hlcy5sZW5ndGggPiAxID9cbiAgICAgICAgMCA6XG4gICAgICAgIGV2ZW50LnRvdWNoZXNbMF0uY2xpZW50WCAtIHRoaXMudG91Y2hTdGFydFhcbiAgICB9XG5cbiAgICBjb25zdCBlbmQgPSBldmVudCA9PiB7XG4gICAgICBpZiAoaGFzUG9pbnRlclBlblRvdWNoKGV2ZW50KSkge1xuICAgICAgICB0aGlzLnRvdWNoRGVsdGFYID0gZXZlbnQuY2xpZW50WCAtIHRoaXMudG91Y2hTdGFydFhcbiAgICAgIH1cblxuICAgICAgdGhpcy5faGFuZGxlU3dpcGUoKVxuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5wYXVzZSA9PT0gJ2hvdmVyJykge1xuICAgICAgICAvLyBJZiBpdCdzIGEgdG91Y2gtZW5hYmxlZCBkZXZpY2UsIG1vdXNlZW50ZXIvbGVhdmUgYXJlIGZpcmVkIGFzXG4gICAgICAgIC8vIHBhcnQgb2YgdGhlIG1vdXNlIGNvbXBhdGliaWxpdHkgZXZlbnRzIG9uIGZpcnN0IHRhcCAtIHRoZSBjYXJvdXNlbFxuICAgICAgICAvLyB3b3VsZCBzdG9wIGN5Y2xpbmcgdW50aWwgdXNlciB0YXBwZWQgb3V0IG9mIGl0O1xuICAgICAgICAvLyBoZXJlLCB3ZSBsaXN0ZW4gZm9yIHRvdWNoZW5kLCBleHBsaWNpdGx5IHBhdXNlIHRoZSBjYXJvdXNlbFxuICAgICAgICAvLyAoYXMgaWYgaXQncyB0aGUgc2Vjb25kIHRpbWUgd2UgdGFwIG9uIGl0LCBtb3VzZWVudGVyIGNvbXBhdCBldmVudFxuICAgICAgICAvLyBpcyBOT1QgZmlyZWQpIGFuZCBhZnRlciBhIHRpbWVvdXQgKHRvIGFsbG93IGZvciBtb3VzZSBjb21wYXRpYmlsaXR5XG4gICAgICAgIC8vIGV2ZW50cyB0byBmaXJlKSB3ZSBleHBsaWNpdGx5IHJlc3RhcnQgY3ljbGluZ1xuXG4gICAgICAgIHRoaXMucGF1c2UoKVxuICAgICAgICBpZiAodGhpcy50b3VjaFRpbWVvdXQpIHtcbiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy50b3VjaFRpbWVvdXQpXG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRvdWNoVGltZW91dCA9IHNldFRpbWVvdXQoZXZlbnQgPT4gdGhpcy5jeWNsZShldmVudCksIFRPVUNIRVZFTlRfQ09NUEFUX1dBSVQgKyB0aGlzLl9jb25maWcuaW50ZXJ2YWwpXG4gICAgICB9XG4gICAgfVxuXG4gICAgU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9JVEVNX0lNRywgdGhpcy5fZWxlbWVudCkuZm9yRWFjaChpdGVtSW1nID0+IHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbihpdGVtSW1nLCBFVkVOVF9EUkFHX1NUQVJULCBldmVudCA9PiBldmVudC5wcmV2ZW50RGVmYXVsdCgpKVxuICAgIH0pXG5cbiAgICBpZiAodGhpcy5fcG9pbnRlckV2ZW50KSB7XG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfUE9JTlRFUkRPV04sIGV2ZW50ID0+IHN0YXJ0KGV2ZW50KSlcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9QT0lOVEVSVVAsIGV2ZW50ID0+IGVuZChldmVudCkpXG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1BPSU5URVJfRVZFTlQpXG4gICAgfSBlbHNlIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9UT1VDSFNUQVJULCBldmVudCA9PiBzdGFydChldmVudCkpXG4gICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfVE9VQ0hNT1ZFLCBldmVudCA9PiBtb3ZlKGV2ZW50KSlcbiAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9UT1VDSEVORCwgZXZlbnQgPT4gZW5kKGV2ZW50KSlcbiAgICB9XG4gIH1cblxuICBfa2V5ZG93bihldmVudCkge1xuICAgIGlmICgvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGV2ZW50LnRhcmdldC50YWdOYW1lKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgZGlyZWN0aW9uID0gS0VZX1RPX0RJUkVDVElPTltldmVudC5rZXldXG4gICAgaWYgKGRpcmVjdGlvbikge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgICAgdGhpcy5fc2xpZGUoZGlyZWN0aW9uKVxuICAgIH1cbiAgfVxuXG4gIF9nZXRJdGVtSW5kZXgoZWxlbWVudCkge1xuICAgIHRoaXMuX2l0ZW1zID0gZWxlbWVudCAmJiBlbGVtZW50LnBhcmVudE5vZGUgP1xuICAgICAgU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9JVEVNLCBlbGVtZW50LnBhcmVudE5vZGUpIDpcbiAgICAgIFtdXG5cbiAgICByZXR1cm4gdGhpcy5faXRlbXMuaW5kZXhPZihlbGVtZW50KVxuICB9XG5cbiAgX2dldEl0ZW1CeU9yZGVyKG9yZGVyLCBhY3RpdmVFbGVtZW50KSB7XG4gICAgY29uc3QgaXNOZXh0ID0gb3JkZXIgPT09IE9SREVSX05FWFRcbiAgICByZXR1cm4gZ2V0TmV4dEFjdGl2ZUVsZW1lbnQodGhpcy5faXRlbXMsIGFjdGl2ZUVsZW1lbnQsIGlzTmV4dCwgdGhpcy5fY29uZmlnLndyYXApXG4gIH1cblxuICBfdHJpZ2dlclNsaWRlRXZlbnQocmVsYXRlZFRhcmdldCwgZXZlbnREaXJlY3Rpb25OYW1lKSB7XG4gICAgY29uc3QgdGFyZ2V0SW5kZXggPSB0aGlzLl9nZXRJdGVtSW5kZXgocmVsYXRlZFRhcmdldClcbiAgICBjb25zdCBmcm9tSW5kZXggPSB0aGlzLl9nZXRJdGVtSW5kZXgoU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9BQ1RJVkVfSVRFTSwgdGhpcy5fZWxlbWVudCkpXG5cbiAgICByZXR1cm4gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0xJREUsIHtcbiAgICAgIHJlbGF0ZWRUYXJnZXQsXG4gICAgICBkaXJlY3Rpb246IGV2ZW50RGlyZWN0aW9uTmFtZSxcbiAgICAgIGZyb206IGZyb21JbmRleCxcbiAgICAgIHRvOiB0YXJnZXRJbmRleFxuICAgIH0pXG4gIH1cblxuICBfc2V0QWN0aXZlSW5kaWNhdG9yRWxlbWVudChlbGVtZW50KSB7XG4gICAgaWYgKHRoaXMuX2luZGljYXRvcnNFbGVtZW50KSB7XG4gICAgICBjb25zdCBhY3RpdmVJbmRpY2F0b3IgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0FDVElWRSwgdGhpcy5faW5kaWNhdG9yc0VsZW1lbnQpXG5cbiAgICAgIGFjdGl2ZUluZGljYXRvci5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQUNUSVZFKVxuICAgICAgYWN0aXZlSW5kaWNhdG9yLnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1jdXJyZW50JylcblxuICAgICAgY29uc3QgaW5kaWNhdG9ycyA9IFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfSU5ESUNBVE9SLCB0aGlzLl9pbmRpY2F0b3JzRWxlbWVudClcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBpbmRpY2F0b3JzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGlmIChOdW1iZXIucGFyc2VJbnQoaW5kaWNhdG9yc1tpXS5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtc2xpZGUtdG8nKSwgMTApID09PSB0aGlzLl9nZXRJdGVtSW5kZXgoZWxlbWVudCkpIHtcbiAgICAgICAgICBpbmRpY2F0b3JzW2ldLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUpXG4gICAgICAgICAgaW5kaWNhdG9yc1tpXS5zZXRBdHRyaWJ1dGUoJ2FyaWEtY3VycmVudCcsICd0cnVlJylcbiAgICAgICAgICBicmVha1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgX3VwZGF0ZUludGVydmFsKCkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLl9hY3RpdmVFbGVtZW50IHx8IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfQUNUSVZFX0lURU0sIHRoaXMuX2VsZW1lbnQpXG5cbiAgICBpZiAoIWVsZW1lbnQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnRJbnRlcnZhbCA9IE51bWJlci5wYXJzZUludChlbGVtZW50LmdldEF0dHJpYnV0ZSgnZGF0YS1icy1pbnRlcnZhbCcpLCAxMClcblxuICAgIGlmIChlbGVtZW50SW50ZXJ2YWwpIHtcbiAgICAgIHRoaXMuX2NvbmZpZy5kZWZhdWx0SW50ZXJ2YWwgPSB0aGlzLl9jb25maWcuZGVmYXVsdEludGVydmFsIHx8IHRoaXMuX2NvbmZpZy5pbnRlcnZhbFxuICAgICAgdGhpcy5fY29uZmlnLmludGVydmFsID0gZWxlbWVudEludGVydmFsXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2NvbmZpZy5pbnRlcnZhbCA9IHRoaXMuX2NvbmZpZy5kZWZhdWx0SW50ZXJ2YWwgfHwgdGhpcy5fY29uZmlnLmludGVydmFsXG4gICAgfVxuICB9XG5cbiAgX3NsaWRlKGRpcmVjdGlvbk9yT3JkZXIsIGVsZW1lbnQpIHtcbiAgICBjb25zdCBvcmRlciA9IHRoaXMuX2RpcmVjdGlvblRvT3JkZXIoZGlyZWN0aW9uT3JPcmRlcilcbiAgICBjb25zdCBhY3RpdmVFbGVtZW50ID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9BQ1RJVkVfSVRFTSwgdGhpcy5fZWxlbWVudClcbiAgICBjb25zdCBhY3RpdmVFbGVtZW50SW5kZXggPSB0aGlzLl9nZXRJdGVtSW5kZXgoYWN0aXZlRWxlbWVudClcbiAgICBjb25zdCBuZXh0RWxlbWVudCA9IGVsZW1lbnQgfHwgdGhpcy5fZ2V0SXRlbUJ5T3JkZXIob3JkZXIsIGFjdGl2ZUVsZW1lbnQpXG5cbiAgICBjb25zdCBuZXh0RWxlbWVudEluZGV4ID0gdGhpcy5fZ2V0SXRlbUluZGV4KG5leHRFbGVtZW50KVxuICAgIGNvbnN0IGlzQ3ljbGluZyA9IEJvb2xlYW4odGhpcy5faW50ZXJ2YWwpXG5cbiAgICBjb25zdCBpc05leHQgPSBvcmRlciA9PT0gT1JERVJfTkVYVFxuICAgIGNvbnN0IGRpcmVjdGlvbmFsQ2xhc3NOYW1lID0gaXNOZXh0ID8gQ0xBU1NfTkFNRV9TVEFSVCA6IENMQVNTX05BTUVfRU5EXG4gICAgY29uc3Qgb3JkZXJDbGFzc05hbWUgPSBpc05leHQgPyBDTEFTU19OQU1FX05FWFQgOiBDTEFTU19OQU1FX1BSRVZcbiAgICBjb25zdCBldmVudERpcmVjdGlvbk5hbWUgPSB0aGlzLl9vcmRlclRvRGlyZWN0aW9uKG9yZGVyKVxuXG4gICAgaWYgKG5leHRFbGVtZW50ICYmIG5leHRFbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0FDVElWRSkpIHtcbiAgICAgIHRoaXMuX2lzU2xpZGluZyA9IGZhbHNlXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAodGhpcy5faXNTbGlkaW5nKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzbGlkZUV2ZW50ID0gdGhpcy5fdHJpZ2dlclNsaWRlRXZlbnQobmV4dEVsZW1lbnQsIGV2ZW50RGlyZWN0aW9uTmFtZSlcbiAgICBpZiAoc2xpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIWFjdGl2ZUVsZW1lbnQgfHwgIW5leHRFbGVtZW50KSB7XG4gICAgICAvLyBTb21lIHdlaXJkbmVzcyBpcyBoYXBwZW5pbmcsIHNvIHdlIGJhaWxcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2lzU2xpZGluZyA9IHRydWVcblxuICAgIGlmIChpc0N5Y2xpbmcpIHtcbiAgICAgIHRoaXMucGF1c2UoKVxuICAgIH1cblxuICAgIHRoaXMuX3NldEFjdGl2ZUluZGljYXRvckVsZW1lbnQobmV4dEVsZW1lbnQpXG4gICAgdGhpcy5fYWN0aXZlRWxlbWVudCA9IG5leHRFbGVtZW50XG5cbiAgICBjb25zdCB0cmlnZ2VyU2xpZEV2ZW50ID0gKCkgPT4ge1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0xJRCwge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiBuZXh0RWxlbWVudCxcbiAgICAgICAgZGlyZWN0aW9uOiBldmVudERpcmVjdGlvbk5hbWUsXG4gICAgICAgIGZyb206IGFjdGl2ZUVsZW1lbnRJbmRleCxcbiAgICAgICAgdG86IG5leHRFbGVtZW50SW5kZXhcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0xJREUpKSB7XG4gICAgICBuZXh0RWxlbWVudC5jbGFzc0xpc3QuYWRkKG9yZGVyQ2xhc3NOYW1lKVxuXG4gICAgICByZWZsb3cobmV4dEVsZW1lbnQpXG5cbiAgICAgIGFjdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LmFkZChkaXJlY3Rpb25hbENsYXNzTmFtZSlcbiAgICAgIG5leHRFbGVtZW50LmNsYXNzTGlzdC5hZGQoZGlyZWN0aW9uYWxDbGFzc05hbWUpXG5cbiAgICAgIGNvbnN0IGNvbXBsZXRlQ2FsbEJhY2sgPSAoKSA9PiB7XG4gICAgICAgIG5leHRFbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoZGlyZWN0aW9uYWxDbGFzc05hbWUsIG9yZGVyQ2xhc3NOYW1lKVxuICAgICAgICBuZXh0RWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfQUNUSVZFKVxuXG4gICAgICAgIGFjdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0FDVElWRSwgb3JkZXJDbGFzc05hbWUsIGRpcmVjdGlvbmFsQ2xhc3NOYW1lKVxuXG4gICAgICAgIHRoaXMuX2lzU2xpZGluZyA9IGZhbHNlXG5cbiAgICAgICAgc2V0VGltZW91dCh0cmlnZ2VyU2xpZEV2ZW50LCAwKVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlQ2FsbEJhY2ssIGFjdGl2ZUVsZW1lbnQsIHRydWUpXG4gICAgfSBlbHNlIHtcbiAgICAgIGFjdGl2ZUVsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0FDVElWRSlcbiAgICAgIG5leHRFbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUpXG5cbiAgICAgIHRoaXMuX2lzU2xpZGluZyA9IGZhbHNlXG4gICAgICB0cmlnZ2VyU2xpZEV2ZW50KClcbiAgICB9XG5cbiAgICBpZiAoaXNDeWNsaW5nKSB7XG4gICAgICB0aGlzLmN5Y2xlKClcbiAgICB9XG4gIH1cblxuICBfZGlyZWN0aW9uVG9PcmRlcihkaXJlY3Rpb24pIHtcbiAgICBpZiAoIVtESVJFQ1RJT05fUklHSFQsIERJUkVDVElPTl9MRUZUXS5pbmNsdWRlcyhkaXJlY3Rpb24pKSB7XG4gICAgICByZXR1cm4gZGlyZWN0aW9uXG4gICAgfVxuXG4gICAgaWYgKGlzUlRMKCkpIHtcbiAgICAgIHJldHVybiBkaXJlY3Rpb24gPT09IERJUkVDVElPTl9MRUZUID8gT1JERVJfUFJFViA6IE9SREVSX05FWFRcbiAgICB9XG5cbiAgICByZXR1cm4gZGlyZWN0aW9uID09PSBESVJFQ1RJT05fTEVGVCA/IE9SREVSX05FWFQgOiBPUkRFUl9QUkVWXG4gIH1cblxuICBfb3JkZXJUb0RpcmVjdGlvbihvcmRlcikge1xuICAgIGlmICghW09SREVSX05FWFQsIE9SREVSX1BSRVZdLmluY2x1ZGVzKG9yZGVyKSkge1xuICAgICAgcmV0dXJuIG9yZGVyXG4gICAgfVxuXG4gICAgaWYgKGlzUlRMKCkpIHtcbiAgICAgIHJldHVybiBvcmRlciA9PT0gT1JERVJfUFJFViA/IERJUkVDVElPTl9MRUZUIDogRElSRUNUSU9OX1JJR0hUXG4gICAgfVxuXG4gICAgcmV0dXJuIG9yZGVyID09PSBPUkRFUl9QUkVWID8gRElSRUNUSU9OX1JJR0hUIDogRElSRUNUSU9OX0xFRlRcbiAgfVxuXG4gIC8vIFN0YXRpY1xuXG4gIHN0YXRpYyBjYXJvdXNlbEludGVyZmFjZShlbGVtZW50LCBjb25maWcpIHtcbiAgICBjb25zdCBkYXRhID0gQ2Fyb3VzZWwuZ2V0T3JDcmVhdGVJbnN0YW5jZShlbGVtZW50LCBjb25maWcpXG5cbiAgICBsZXQgeyBfY29uZmlnIH0gPSBkYXRhXG4gICAgaWYgKHR5cGVvZiBjb25maWcgPT09ICdvYmplY3QnKSB7XG4gICAgICBfY29uZmlnID0ge1xuICAgICAgICAuLi5fY29uZmlnLFxuICAgICAgICAuLi5jb25maWdcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBhY3Rpb24gPSB0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJyA/IGNvbmZpZyA6IF9jb25maWcuc2xpZGVcblxuICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnbnVtYmVyJykge1xuICAgICAgZGF0YS50byhjb25maWcpXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgYWN0aW9uID09PSAnc3RyaW5nJykge1xuICAgICAgaWYgKHR5cGVvZiBkYXRhW2FjdGlvbl0gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7YWN0aW9ufVwiYClcbiAgICAgIH1cblxuICAgICAgZGF0YVthY3Rpb25dKClcbiAgICB9IGVsc2UgaWYgKF9jb25maWcuaW50ZXJ2YWwgJiYgX2NvbmZpZy5yaWRlKSB7XG4gICAgICBkYXRhLnBhdXNlKClcbiAgICAgIGRhdGEuY3ljbGUoKVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBDYXJvdXNlbC5jYXJvdXNlbEludGVyZmFjZSh0aGlzLCBjb25maWcpXG4gICAgfSlcbiAgfVxuXG4gIHN0YXRpYyBkYXRhQXBpQ2xpY2tIYW5kbGVyKGV2ZW50KSB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0aGlzKVxuXG4gICAgaWYgKCF0YXJnZXQgfHwgIXRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9DQVJPVVNFTCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGNvbmZpZyA9IHtcbiAgICAgIC4uLk1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGVzKHRhcmdldCksXG4gICAgICAuLi5NYW5pcHVsYXRvci5nZXREYXRhQXR0cmlidXRlcyh0aGlzKVxuICAgIH1cbiAgICBjb25zdCBzbGlkZUluZGV4ID0gdGhpcy5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtc2xpZGUtdG8nKVxuXG4gICAgaWYgKHNsaWRlSW5kZXgpIHtcbiAgICAgIGNvbmZpZy5pbnRlcnZhbCA9IGZhbHNlXG4gICAgfVxuXG4gICAgQ2Fyb3VzZWwuY2Fyb3VzZWxJbnRlcmZhY2UodGFyZ2V0LCBjb25maWcpXG5cbiAgICBpZiAoc2xpZGVJbmRleCkge1xuICAgICAgQ2Fyb3VzZWwuZ2V0SW5zdGFuY2UodGFyZ2V0KS50byhzbGlkZUluZGV4KVxuICAgIH1cblxuICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfU0xJREUsIENhcm91c2VsLmRhdGFBcGlDbGlja0hhbmRsZXIpXG5cbkV2ZW50SGFuZGxlci5vbih3aW5kb3csIEVWRU5UX0xPQURfREFUQV9BUEksICgpID0+IHtcbiAgY29uc3QgY2Fyb3VzZWxzID0gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9EQVRBX1JJREUpXG5cbiAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IGNhcm91c2Vscy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIENhcm91c2VsLmNhcm91c2VsSW50ZXJmYWNlKGNhcm91c2Vsc1tpXSwgQ2Fyb3VzZWwuZ2V0SW5zdGFuY2UoY2Fyb3VzZWxzW2ldKSlcbiAgfVxufSlcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIGpRdWVyeVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBhZGQgLkNhcm91c2VsIHRvIGpRdWVyeSBvbmx5IGlmIGpRdWVyeSBpcyBwcmVzZW50XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKENhcm91c2VsKVxuXG5leHBvcnQgZGVmYXVsdCBDYXJvdXNlbFxuIiwiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4xLjMpOiBjb2xsYXBzZS5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCB7XG4gIGRlZmluZUpRdWVyeVBsdWdpbixcbiAgZ2V0RWxlbWVudCxcbiAgZ2V0U2VsZWN0b3JGcm9tRWxlbWVudCxcbiAgZ2V0RWxlbWVudEZyb21TZWxlY3RvcixcbiAgcmVmbG93LFxuICB0eXBlQ2hlY2tDb25maWdcbn0gZnJvbSAnLi91dGlsL2luZGV4J1xuaW1wb3J0IERhdGEgZnJvbSAnLi9kb20vZGF0YSdcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlcidcbmltcG9ydCBNYW5pcHVsYXRvciBmcm9tICcuL2RvbS9tYW5pcHVsYXRvcidcbmltcG9ydCBTZWxlY3RvckVuZ2luZSBmcm9tICcuL2RvbS9zZWxlY3Rvci1lbmdpbmUnXG5pbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tICcuL2Jhc2UtY29tcG9uZW50J1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ29uc3RhbnRzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCBOQU1FID0gJ2NvbGxhcHNlJ1xuY29uc3QgREFUQV9LRVkgPSAnYnMuY29sbGFwc2UnXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSdcblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgdG9nZ2xlOiB0cnVlLFxuICBwYXJlbnQ6IG51bGxcbn1cblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIHRvZ2dsZTogJ2Jvb2xlYW4nLFxuICBwYXJlbnQ6ICcobnVsbHxlbGVtZW50KSdcbn1cblxuY29uc3QgRVZFTlRfU0hPVyA9IGBzaG93JHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfU0hPV04gPSBgc2hvd24ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9ISURFID0gYGhpZGUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9ISURERU4gPSBgaGlkZGVuJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkgPSBgY2xpY2ske0VWRU5UX0tFWX0ke0RBVEFfQVBJX0tFWX1gXG5cbmNvbnN0IENMQVNTX05BTUVfU0hPVyA9ICdzaG93J1xuY29uc3QgQ0xBU1NfTkFNRV9DT0xMQVBTRSA9ICdjb2xsYXBzZSdcbmNvbnN0IENMQVNTX05BTUVfQ09MTEFQU0lORyA9ICdjb2xsYXBzaW5nJ1xuY29uc3QgQ0xBU1NfTkFNRV9DT0xMQVBTRUQgPSAnY29sbGFwc2VkJ1xuY29uc3QgQ0xBU1NfTkFNRV9ERUVQRVJfQ0hJTERSRU4gPSBgOnNjb3BlIC4ke0NMQVNTX05BTUVfQ09MTEFQU0V9IC4ke0NMQVNTX05BTUVfQ09MTEFQU0V9YFxuY29uc3QgQ0xBU1NfTkFNRV9IT1JJWk9OVEFMID0gJ2NvbGxhcHNlLWhvcml6b250YWwnXG5cbmNvbnN0IFdJRFRIID0gJ3dpZHRoJ1xuY29uc3QgSEVJR0hUID0gJ2hlaWdodCdcblxuY29uc3QgU0VMRUNUT1JfQUNUSVZFUyA9ICcuY29sbGFwc2Uuc2hvdywgLmNvbGxhcHNlLmNvbGxhcHNpbmcnXG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSA9ICdbZGF0YS1icy10b2dnbGU9XCJjb2xsYXBzZVwiXSdcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENsYXNzIERlZmluaXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNsYXNzIENvbGxhcHNlIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQpXG5cbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZVxuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpXG4gICAgdGhpcy5fdHJpZ2dlckFycmF5ID0gW11cblxuICAgIGNvbnN0IHRvZ2dsZUxpc3QgPSBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0RBVEFfVE9HR0xFKVxuXG4gICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRvZ2dsZUxpc3QubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGNvbnN0IGVsZW0gPSB0b2dnbGVMaXN0W2ldXG4gICAgICBjb25zdCBzZWxlY3RvciA9IGdldFNlbGVjdG9yRnJvbUVsZW1lbnQoZWxlbSlcbiAgICAgIGNvbnN0IGZpbHRlckVsZW1lbnQgPSBTZWxlY3RvckVuZ2luZS5maW5kKHNlbGVjdG9yKVxuICAgICAgICAuZmlsdGVyKGZvdW5kRWxlbSA9PiBmb3VuZEVsZW0gPT09IHRoaXMuX2VsZW1lbnQpXG5cbiAgICAgIGlmIChzZWxlY3RvciAhPT0gbnVsbCAmJiBmaWx0ZXJFbGVtZW50Lmxlbmd0aCkge1xuICAgICAgICB0aGlzLl9zZWxlY3RvciA9IHNlbGVjdG9yXG4gICAgICAgIHRoaXMuX3RyaWdnZXJBcnJheS5wdXNoKGVsZW0pXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5faW5pdGlhbGl6ZUNoaWxkcmVuKClcblxuICAgIGlmICghdGhpcy5fY29uZmlnLnBhcmVudCkge1xuICAgICAgdGhpcy5fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKHRoaXMuX3RyaWdnZXJBcnJheSwgdGhpcy5faXNTaG93bigpKVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9jb25maWcudG9nZ2xlKSB7XG4gICAgICB0aGlzLnRvZ2dsZSgpXG4gICAgfVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcblxuICB0b2dnbGUoKSB7XG4gICAgaWYgKHRoaXMuX2lzU2hvd24oKSkge1xuICAgICAgdGhpcy5oaWRlKClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5zaG93KClcbiAgICB9XG4gIH1cblxuICBzaG93KCkge1xuICAgIGlmICh0aGlzLl9pc1RyYW5zaXRpb25pbmcgfHwgdGhpcy5faXNTaG93bigpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBsZXQgYWN0aXZlcyA9IFtdXG4gICAgbGV0IGFjdGl2ZXNEYXRhXG5cbiAgICBpZiAodGhpcy5fY29uZmlnLnBhcmVudCkge1xuICAgICAgY29uc3QgY2hpbGRyZW4gPSBTZWxlY3RvckVuZ2luZS5maW5kKENMQVNTX05BTUVfREVFUEVSX0NISUxEUkVOLCB0aGlzLl9jb25maWcucGFyZW50KVxuICAgICAgYWN0aXZlcyA9IFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfQUNUSVZFUywgdGhpcy5fY29uZmlnLnBhcmVudCkuZmlsdGVyKGVsZW0gPT4gIWNoaWxkcmVuLmluY2x1ZGVzKGVsZW0pKSAvLyByZW1vdmUgY2hpbGRyZW4gaWYgZ3JlYXRlciBkZXB0aFxuICAgIH1cblxuICAgIGNvbnN0IGNvbnRhaW5lciA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUodGhpcy5fc2VsZWN0b3IpXG4gICAgaWYgKGFjdGl2ZXMubGVuZ3RoKSB7XG4gICAgICBjb25zdCB0ZW1wQWN0aXZlRGF0YSA9IGFjdGl2ZXMuZmluZChlbGVtID0+IGNvbnRhaW5lciAhPT0gZWxlbSlcbiAgICAgIGFjdGl2ZXNEYXRhID0gdGVtcEFjdGl2ZURhdGEgPyBDb2xsYXBzZS5nZXRJbnN0YW5jZSh0ZW1wQWN0aXZlRGF0YSkgOiBudWxsXG5cbiAgICAgIGlmIChhY3RpdmVzRGF0YSAmJiBhY3RpdmVzRGF0YS5faXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IHN0YXJ0RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XKVxuICAgIGlmIChzdGFydEV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGFjdGl2ZXMuZm9yRWFjaChlbGVtQWN0aXZlID0+IHtcbiAgICAgIGlmIChjb250YWluZXIgIT09IGVsZW1BY3RpdmUpIHtcbiAgICAgICAgQ29sbGFwc2UuZ2V0T3JDcmVhdGVJbnN0YW5jZShlbGVtQWN0aXZlLCB7IHRvZ2dsZTogZmFsc2UgfSkuaGlkZSgpXG4gICAgICB9XG5cbiAgICAgIGlmICghYWN0aXZlc0RhdGEpIHtcbiAgICAgICAgRGF0YS5zZXQoZWxlbUFjdGl2ZSwgREFUQV9LRVksIG51bGwpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGNvbnN0IGRpbWVuc2lvbiA9IHRoaXMuX2dldERpbWVuc2lvbigpXG5cbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9DT0xMQVBTRSlcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9DT0xMQVBTSU5HKVxuXG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gMFxuXG4gICAgdGhpcy5fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKHRoaXMuX3RyaWdnZXJBcnJheSwgdHJ1ZSlcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlXG5cbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIHRoaXMuX2lzVHJhbnNpdGlvbmluZyA9IGZhbHNlXG5cbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0NPTExBUFNJTkcpXG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9DT0xMQVBTRSwgQ0xBU1NfTkFNRV9TSE9XKVxuXG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlW2RpbWVuc2lvbl0gPSAnJ1xuXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XTilcbiAgICB9XG5cbiAgICBjb25zdCBjYXBpdGFsaXplZERpbWVuc2lvbiA9IGRpbWVuc2lvblswXS50b1VwcGVyQ2FzZSgpICsgZGltZW5zaW9uLnNsaWNlKDEpXG4gICAgY29uc3Qgc2Nyb2xsU2l6ZSA9IGBzY3JvbGwke2NhcGl0YWxpemVkRGltZW5zaW9ufWBcblxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMuX2VsZW1lbnQsIHRydWUpXG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gYCR7dGhpcy5fZWxlbWVudFtzY3JvbGxTaXplXX1weGBcbiAgfVxuXG4gIGhpZGUoKSB7XG4gICAgaWYgKHRoaXMuX2lzVHJhbnNpdGlvbmluZyB8fCAhdGhpcy5faXNTaG93bigpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzdGFydEV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSlcbiAgICBpZiAoc3RhcnRFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBkaW1lbnNpb24gPSB0aGlzLl9nZXREaW1lbnNpb24oKVxuXG4gICAgdGhpcy5fZWxlbWVudC5zdHlsZVtkaW1lbnNpb25dID0gYCR7dGhpcy5fZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVtkaW1lbnNpb25dfXB4YFxuXG4gICAgcmVmbG93KHRoaXMuX2VsZW1lbnQpXG5cbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9DT0xMQVBTSU5HKVxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0NPTExBUFNFLCBDTEFTU19OQU1FX1NIT1cpXG5cbiAgICBjb25zdCB0cmlnZ2VyQXJyYXlMZW5ndGggPSB0aGlzLl90cmlnZ2VyQXJyYXkubGVuZ3RoXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0cmlnZ2VyQXJyYXlMZW5ndGg7IGkrKykge1xuICAgICAgY29uc3QgdHJpZ2dlciA9IHRoaXMuX3RyaWdnZXJBcnJheVtpXVxuICAgICAgY29uc3QgZWxlbSA9IGdldEVsZW1lbnRGcm9tU2VsZWN0b3IodHJpZ2dlcilcblxuICAgICAgaWYgKGVsZW0gJiYgIXRoaXMuX2lzU2hvd24oZWxlbSkpIHtcbiAgICAgICAgdGhpcy5fYWRkQXJpYUFuZENvbGxhcHNlZENsYXNzKFt0cmlnZ2VyXSwgZmFsc2UpXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gdHJ1ZVxuXG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZVxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfQ09MTEFQU0lORylcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0NPTExBUFNFKVxuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElEREVOKVxuICAgIH1cblxuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGVbZGltZW5zaW9uXSA9ICcnXG5cbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCB0aGlzLl9lbGVtZW50LCB0cnVlKVxuICB9XG5cbiAgX2lzU2hvd24oZWxlbWVudCA9IHRoaXMuX2VsZW1lbnQpIHtcbiAgICByZXR1cm4gZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9TSE9XKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuXG4gIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgY29uZmlnID0ge1xuICAgICAgLi4uRGVmYXVsdCxcbiAgICAgIC4uLk1hbmlwdWxhdG9yLmdldERhdGFBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQpLFxuICAgICAgLi4uY29uZmlnXG4gICAgfVxuICAgIGNvbmZpZy50b2dnbGUgPSBCb29sZWFuKGNvbmZpZy50b2dnbGUpIC8vIENvZXJjZSBzdHJpbmcgdmFsdWVzXG4gICAgY29uZmlnLnBhcmVudCA9IGdldEVsZW1lbnQoY29uZmlnLnBhcmVudClcbiAgICB0eXBlQ2hlY2tDb25maWcoTkFNRSwgY29uZmlnLCBEZWZhdWx0VHlwZSlcbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICBfZ2V0RGltZW5zaW9uKCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0hPUklaT05UQUwpID8gV0lEVEggOiBIRUlHSFRcbiAgfVxuXG4gIF9pbml0aWFsaXplQ2hpbGRyZW4oKSB7XG4gICAgaWYgKCF0aGlzLl9jb25maWcucGFyZW50KSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBjaGlsZHJlbiA9IFNlbGVjdG9yRW5naW5lLmZpbmQoQ0xBU1NfTkFNRV9ERUVQRVJfQ0hJTERSRU4sIHRoaXMuX2NvbmZpZy5wYXJlbnQpXG4gICAgU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9EQVRBX1RPR0dMRSwgdGhpcy5fY29uZmlnLnBhcmVudCkuZmlsdGVyKGVsZW0gPT4gIWNoaWxkcmVuLmluY2x1ZGVzKGVsZW0pKVxuICAgICAgLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkID0gZ2V0RWxlbWVudEZyb21TZWxlY3RvcihlbGVtZW50KVxuXG4gICAgICAgIGlmIChzZWxlY3RlZCkge1xuICAgICAgICAgIHRoaXMuX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyhbZWxlbWVudF0sIHRoaXMuX2lzU2hvd24oc2VsZWN0ZWQpKVxuICAgICAgICB9XG4gICAgICB9KVxuICB9XG5cbiAgX2FkZEFyaWFBbmRDb2xsYXBzZWRDbGFzcyh0cmlnZ2VyQXJyYXksIGlzT3Blbikge1xuICAgIGlmICghdHJpZ2dlckFycmF5Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdHJpZ2dlckFycmF5LmZvckVhY2goZWxlbSA9PiB7XG4gICAgICBpZiAoaXNPcGVuKSB7XG4gICAgICAgIGVsZW0uY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0NPTExBUFNFRClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGVsZW0uY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0NPTExBUFNFRClcbiAgICAgIH1cblxuICAgICAgZWxlbS5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCBpc09wZW4pXG4gICAgfSlcbiAgfVxuXG4gIC8vIFN0YXRpY1xuXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBfY29uZmlnID0ge31cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJyAmJiAvc2hvd3xoaWRlLy50ZXN0KGNvbmZpZykpIHtcbiAgICAgICAgX2NvbmZpZy50b2dnbGUgPSBmYWxzZVxuICAgICAgfVxuXG4gICAgICBjb25zdCBkYXRhID0gQ29sbGFwc2UuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBfY29uZmlnKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKVxuICAgICAgICB9XG5cbiAgICAgICAgZGF0YVtjb25maWddKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBEYXRhIEFwaSBpbXBsZW1lbnRhdGlvblxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSwgU0VMRUNUT1JfREFUQV9UT0dHTEUsIGZ1bmN0aW9uIChldmVudCkge1xuICAvLyBwcmV2ZW50RGVmYXVsdCBvbmx5IGZvciA8YT4gZWxlbWVudHMgKHdoaWNoIGNoYW5nZSB0aGUgVVJMKSBub3QgaW5zaWRlIHRoZSBjb2xsYXBzaWJsZSBlbGVtZW50XG4gIGlmIChldmVudC50YXJnZXQudGFnTmFtZSA9PT0gJ0EnIHx8IChldmVudC5kZWxlZ2F0ZVRhcmdldCAmJiBldmVudC5kZWxlZ2F0ZVRhcmdldC50YWdOYW1lID09PSAnQScpKSB7XG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICB9XG5cbiAgY29uc3Qgc2VsZWN0b3IgPSBnZXRTZWxlY3RvckZyb21FbGVtZW50KHRoaXMpXG4gIGNvbnN0IHNlbGVjdG9yRWxlbWVudHMgPSBTZWxlY3RvckVuZ2luZS5maW5kKHNlbGVjdG9yKVxuXG4gIHNlbGVjdG9yRWxlbWVudHMuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICBDb2xsYXBzZS5nZXRPckNyZWF0ZUluc3RhbmNlKGVsZW1lbnQsIHsgdG9nZ2xlOiBmYWxzZSB9KS50b2dnbGUoKVxuICB9KVxufSlcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIGpRdWVyeVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBhZGQgLkNvbGxhcHNlIHRvIGpRdWVyeSBvbmx5IGlmIGpRdWVyeSBpcyBwcmVzZW50XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKENvbGxhcHNlKVxuXG5leHBvcnQgZGVmYXVsdCBDb2xsYXBzZVxuIiwiZXhwb3J0IHZhciB0b3AgPSAndG9wJztcbmV4cG9ydCB2YXIgYm90dG9tID0gJ2JvdHRvbSc7XG5leHBvcnQgdmFyIHJpZ2h0ID0gJ3JpZ2h0JztcbmV4cG9ydCB2YXIgbGVmdCA9ICdsZWZ0JztcbmV4cG9ydCB2YXIgYXV0byA9ICdhdXRvJztcbmV4cG9ydCB2YXIgYmFzZVBsYWNlbWVudHMgPSBbdG9wLCBib3R0b20sIHJpZ2h0LCBsZWZ0XTtcbmV4cG9ydCB2YXIgc3RhcnQgPSAnc3RhcnQnO1xuZXhwb3J0IHZhciBlbmQgPSAnZW5kJztcbmV4cG9ydCB2YXIgY2xpcHBpbmdQYXJlbnRzID0gJ2NsaXBwaW5nUGFyZW50cyc7XG5leHBvcnQgdmFyIHZpZXdwb3J0ID0gJ3ZpZXdwb3J0JztcbmV4cG9ydCB2YXIgcG9wcGVyID0gJ3BvcHBlcic7XG5leHBvcnQgdmFyIHJlZmVyZW5jZSA9ICdyZWZlcmVuY2UnO1xuZXhwb3J0IHZhciB2YXJpYXRpb25QbGFjZW1lbnRzID0gLyojX19QVVJFX18qL2Jhc2VQbGFjZW1lbnRzLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIGFjYy5jb25jYXQoW3BsYWNlbWVudCArIFwiLVwiICsgc3RhcnQsIHBsYWNlbWVudCArIFwiLVwiICsgZW5kXSk7XG59LCBbXSk7XG5leHBvcnQgdmFyIHBsYWNlbWVudHMgPSAvKiNfX1BVUkVfXyovW10uY29uY2F0KGJhc2VQbGFjZW1lbnRzLCBbYXV0b10pLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIGFjYy5jb25jYXQoW3BsYWNlbWVudCwgcGxhY2VtZW50ICsgXCItXCIgKyBzdGFydCwgcGxhY2VtZW50ICsgXCItXCIgKyBlbmRdKTtcbn0sIFtdKTsgLy8gbW9kaWZpZXJzIHRoYXQgbmVlZCB0byByZWFkIHRoZSBET01cblxuZXhwb3J0IHZhciBiZWZvcmVSZWFkID0gJ2JlZm9yZVJlYWQnO1xuZXhwb3J0IHZhciByZWFkID0gJ3JlYWQnO1xuZXhwb3J0IHZhciBhZnRlclJlYWQgPSAnYWZ0ZXJSZWFkJzsgLy8gcHVyZS1sb2dpYyBtb2RpZmllcnNcblxuZXhwb3J0IHZhciBiZWZvcmVNYWluID0gJ2JlZm9yZU1haW4nO1xuZXhwb3J0IHZhciBtYWluID0gJ21haW4nO1xuZXhwb3J0IHZhciBhZnRlck1haW4gPSAnYWZ0ZXJNYWluJzsgLy8gbW9kaWZpZXIgd2l0aCB0aGUgcHVycG9zZSB0byB3cml0ZSB0byB0aGUgRE9NIChvciB3cml0ZSBpbnRvIGEgZnJhbWV3b3JrIHN0YXRlKVxuXG5leHBvcnQgdmFyIGJlZm9yZVdyaXRlID0gJ2JlZm9yZVdyaXRlJztcbmV4cG9ydCB2YXIgd3JpdGUgPSAnd3JpdGUnO1xuZXhwb3J0IHZhciBhZnRlcldyaXRlID0gJ2FmdGVyV3JpdGUnO1xuZXhwb3J0IHZhciBtb2RpZmllclBoYXNlcyA9IFtiZWZvcmVSZWFkLCByZWFkLCBhZnRlclJlYWQsIGJlZm9yZU1haW4sIG1haW4sIGFmdGVyTWFpbiwgYmVmb3JlV3JpdGUsIHdyaXRlLCBhZnRlcldyaXRlXTsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXROb2RlTmFtZShlbGVtZW50KSB7XG4gIHJldHVybiBlbGVtZW50ID8gKGVsZW1lbnQubm9kZU5hbWUgfHwgJycpLnRvTG93ZXJDYXNlKCkgOiBudWxsO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvdyhub2RlKSB7XG4gIGlmIChub2RlID09IG51bGwpIHtcbiAgICByZXR1cm4gd2luZG93O1xuICB9XG5cbiAgaWYgKG5vZGUudG9TdHJpbmcoKSAhPT0gJ1tvYmplY3QgV2luZG93XScpIHtcbiAgICB2YXIgb3duZXJEb2N1bWVudCA9IG5vZGUub3duZXJEb2N1bWVudDtcbiAgICByZXR1cm4gb3duZXJEb2N1bWVudCA/IG93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcgfHwgd2luZG93IDogd2luZG93O1xuICB9XG5cbiAgcmV0dXJuIG5vZGU7XG59IiwiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcblxuZnVuY3Rpb24gaXNFbGVtZW50KG5vZGUpIHtcbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuRWxlbWVudDtcbiAgcmV0dXJuIG5vZGUgaW5zdGFuY2VvZiBPd25FbGVtZW50IHx8IG5vZGUgaW5zdGFuY2VvZiBFbGVtZW50O1xufVxuXG5mdW5jdGlvbiBpc0hUTUxFbGVtZW50KG5vZGUpIHtcbiAgdmFyIE93bkVsZW1lbnQgPSBnZXRXaW5kb3cobm9kZSkuSFRNTEVsZW1lbnQ7XG4gIHJldHVybiBub2RlIGluc3RhbmNlb2YgT3duRWxlbWVudCB8fCBub2RlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQ7XG59XG5cbmZ1bmN0aW9uIGlzU2hhZG93Um9vdChub2RlKSB7XG4gIC8vIElFIDExIGhhcyBubyBTaGFkb3dSb290XG4gIGlmICh0eXBlb2YgU2hhZG93Um9vdCA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB2YXIgT3duRWxlbWVudCA9IGdldFdpbmRvdyhub2RlKS5TaGFkb3dSb290O1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIE93bkVsZW1lbnQgfHwgbm9kZSBpbnN0YW5jZW9mIFNoYWRvd1Jvb3Q7XG59XG5cbmV4cG9ydCB7IGlzRWxlbWVudCwgaXNIVE1MRWxlbWVudCwgaXNTaGFkb3dSb290IH07IiwiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi4vZG9tLXV0aWxzL2luc3RhbmNlT2YuanNcIjsgLy8gVGhpcyBtb2RpZmllciB0YWtlcyB0aGUgc3R5bGVzIHByZXBhcmVkIGJ5IHRoZSBgY29tcHV0ZVN0eWxlc2AgbW9kaWZpZXJcbi8vIGFuZCBhcHBsaWVzIHRoZW0gdG8gdGhlIEhUTUxFbGVtZW50cyBzdWNoIGFzIHBvcHBlciBhbmQgYXJyb3dcblxuZnVuY3Rpb24gYXBwbHlTdHlsZXMoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlO1xuICBPYmplY3Qua2V5cyhzdGF0ZS5lbGVtZW50cykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgIHZhciBzdHlsZSA9IHN0YXRlLnN0eWxlc1tuYW1lXSB8fCB7fTtcbiAgICB2YXIgYXR0cmlidXRlcyA9IHN0YXRlLmF0dHJpYnV0ZXNbbmFtZV0gfHwge307XG4gICAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1tuYW1lXTsgLy8gYXJyb3cgaXMgb3B0aW9uYWwgKyB2aXJ0dWFsIGVsZW1lbnRzXG5cbiAgICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgIWdldE5vZGVOYW1lKGVsZW1lbnQpKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBGbG93IGRvZXNuJ3Qgc3VwcG9ydCB0byBleHRlbmQgdGhpcyBwcm9wZXJ0eSwgYnV0IGl0J3MgdGhlIG1vc3RcbiAgICAvLyBlZmZlY3RpdmUgd2F5IHRvIGFwcGx5IHN0eWxlcyB0byBhbiBIVE1MRWxlbWVudFxuICAgIC8vICRGbG93Rml4TWVbY2Fubm90LXdyaXRlXVxuXG5cbiAgICBPYmplY3QuYXNzaWduKGVsZW1lbnQuc3R5bGUsIHN0eWxlKTtcbiAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChuYW1lKSB7XG4gICAgICB2YXIgdmFsdWUgPSBhdHRyaWJ1dGVzW25hbWVdO1xuXG4gICAgICBpZiAodmFsdWUgPT09IGZhbHNlKSB7XG4gICAgICAgIGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKG5hbWUpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUobmFtZSwgdmFsdWUgPT09IHRydWUgPyAnJyA6IHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGVmZmVjdChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZTtcbiAgdmFyIGluaXRpYWxTdHlsZXMgPSB7XG4gICAgcG9wcGVyOiB7XG4gICAgICBwb3NpdGlvbjogc3RhdGUub3B0aW9ucy5zdHJhdGVneSxcbiAgICAgIGxlZnQ6ICcwJyxcbiAgICAgIHRvcDogJzAnLFxuICAgICAgbWFyZ2luOiAnMCdcbiAgICB9LFxuICAgIGFycm93OiB7XG4gICAgICBwb3NpdGlvbjogJ2Fic29sdXRlJ1xuICAgIH0sXG4gICAgcmVmZXJlbmNlOiB7fVxuICB9O1xuICBPYmplY3QuYXNzaWduKHN0YXRlLmVsZW1lbnRzLnBvcHBlci5zdHlsZSwgaW5pdGlhbFN0eWxlcy5wb3BwZXIpO1xuICBzdGF0ZS5zdHlsZXMgPSBpbml0aWFsU3R5bGVzO1xuXG4gIGlmIChzdGF0ZS5lbGVtZW50cy5hcnJvdykge1xuICAgIE9iamVjdC5hc3NpZ24oc3RhdGUuZWxlbWVudHMuYXJyb3cuc3R5bGUsIGluaXRpYWxTdHlsZXMuYXJyb3cpO1xuICB9XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBPYmplY3Qua2V5cyhzdGF0ZS5lbGVtZW50cykuZm9yRWFjaChmdW5jdGlvbiAobmFtZSkge1xuICAgICAgdmFyIGVsZW1lbnQgPSBzdGF0ZS5lbGVtZW50c1tuYW1lXTtcbiAgICAgIHZhciBhdHRyaWJ1dGVzID0gc3RhdGUuYXR0cmlidXRlc1tuYW1lXSB8fCB7fTtcbiAgICAgIHZhciBzdHlsZVByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhzdGF0ZS5zdHlsZXMuaGFzT3duUHJvcGVydHkobmFtZSkgPyBzdGF0ZS5zdHlsZXNbbmFtZV0gOiBpbml0aWFsU3R5bGVzW25hbWVdKTsgLy8gU2V0IGFsbCB2YWx1ZXMgdG8gYW4gZW1wdHkgc3RyaW5nIHRvIHVuc2V0IHRoZW1cblxuICAgICAgdmFyIHN0eWxlID0gc3R5bGVQcm9wZXJ0aWVzLnJlZHVjZShmdW5jdGlvbiAoc3R5bGUsIHByb3BlcnR5KSB7XG4gICAgICAgIHN0eWxlW3Byb3BlcnR5XSA9ICcnO1xuICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICB9LCB7fSk7IC8vIGFycm93IGlzIG9wdGlvbmFsICsgdmlydHVhbCBlbGVtZW50c1xuXG4gICAgICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgIWdldE5vZGVOYW1lKGVsZW1lbnQpKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cblxuICAgICAgT2JqZWN0LmFzc2lnbihlbGVtZW50LnN0eWxlLCBzdHlsZSk7XG4gICAgICBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzKS5mb3JFYWNoKGZ1bmN0aW9uIChhdHRyaWJ1dGUpIHtcbiAgICAgICAgZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoYXR0cmlidXRlKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnYXBwbHlTdHlsZXMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3dyaXRlJyxcbiAgZm46IGFwcGx5U3R5bGVzLFxuICBlZmZlY3Q6IGVmZmVjdCxcbiAgcmVxdWlyZXM6IFsnY29tcHV0ZVN0eWxlcyddXG59OyIsImltcG9ydCB7IGF1dG8gfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVswXTtcbn0iLCIvLyBpbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSAnLi9pbnN0YW5jZU9mJztcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50LCAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW51c2VkLWltcG9ydHMvbm8tdW51c2VkLXZhcnNcbmluY2x1ZGVTY2FsZSkge1xuICBpZiAoaW5jbHVkZVNjYWxlID09PSB2b2lkIDApIHtcbiAgICBpbmNsdWRlU2NhbGUgPSBmYWxzZTtcbiAgfVxuXG4gIHZhciByZWN0ID0gZWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgdmFyIHNjYWxlWCA9IDE7XG4gIHZhciBzY2FsZVkgPSAxOyAvLyBGSVhNRTpcbiAgLy8gYG9mZnNldFdpZHRoYCByZXR1cm5zIGFuIGludGVnZXIgd2hpbGUgYGdldEJvdW5kaW5nQ2xpZW50UmVjdGBcbiAgLy8gcmV0dXJucyBhIGZsb2F0LiBUaGlzIHJlc3VsdHMgaW4gYHNjYWxlWGAgb3IgYHNjYWxlWWAgYmVpbmdcbiAgLy8gbm9uLTEgd2hlbiBpdCBzaG91bGQgYmUgZm9yIGVsZW1lbnRzIHRoYXQgYXJlbid0IGEgZnVsbCBwaXhlbCBpblxuICAvLyB3aWR0aCBvciBoZWlnaHQuXG4gIC8vIGlmIChpc0hUTUxFbGVtZW50KGVsZW1lbnQpICYmIGluY2x1ZGVTY2FsZSkge1xuICAvLyAgIGNvbnN0IG9mZnNldEhlaWdodCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuICAvLyAgIGNvbnN0IG9mZnNldFdpZHRoID0gZWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgLy8gICAvLyBEbyBub3QgYXR0ZW1wdCB0byBkaXZpZGUgYnkgMCwgb3RoZXJ3aXNlIHdlIGdldCBgSW5maW5pdHlgIGFzIHNjYWxlXG4gIC8vICAgLy8gRmFsbGJhY2sgdG8gMSBpbiBjYXNlIGJvdGggdmFsdWVzIGFyZSBgMGBcbiAgLy8gICBpZiAob2Zmc2V0V2lkdGggPiAwKSB7XG4gIC8vICAgICBzY2FsZVggPSByZWN0LndpZHRoIC8gb2Zmc2V0V2lkdGggfHwgMTtcbiAgLy8gICB9XG4gIC8vICAgaWYgKG9mZnNldEhlaWdodCA+IDApIHtcbiAgLy8gICAgIHNjYWxlWSA9IHJlY3QuaGVpZ2h0IC8gb2Zmc2V0SGVpZ2h0IHx8IDE7XG4gIC8vICAgfVxuICAvLyB9XG5cbiAgcmV0dXJuIHtcbiAgICB3aWR0aDogcmVjdC53aWR0aCAvIHNjYWxlWCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0IC8gc2NhbGVZLFxuICAgIHRvcDogcmVjdC50b3AgLyBzY2FsZVksXG4gICAgcmlnaHQ6IHJlY3QucmlnaHQgLyBzY2FsZVgsXG4gICAgYm90dG9tOiByZWN0LmJvdHRvbSAvIHNjYWxlWSxcbiAgICBsZWZ0OiByZWN0LmxlZnQgLyBzY2FsZVgsXG4gICAgeDogcmVjdC5sZWZ0IC8gc2NhbGVYLFxuICAgIHk6IHJlY3QudG9wIC8gc2NhbGVZXG4gIH07XG59IiwiaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjsgLy8gUmV0dXJucyB0aGUgbGF5b3V0IHJlY3Qgb2YgYW4gZWxlbWVudCByZWxhdGl2ZSB0byBpdHMgb2Zmc2V0UGFyZW50LiBMYXlvdXRcbi8vIG1lYW5zIGl0IGRvZXNuJ3QgdGFrZSBpbnRvIGFjY291bnQgdHJhbnNmb3Jtcy5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TGF5b3V0UmVjdChlbGVtZW50KSB7XG4gIHZhciBjbGllbnRSZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQpOyAvLyBVc2UgdGhlIGNsaWVudFJlY3Qgc2l6ZXMgaWYgaXQncyBub3QgYmVlbiB0cmFuc2Zvcm1lZC5cbiAgLy8gRml4ZXMgaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy8xMjIzXG5cbiAgdmFyIHdpZHRoID0gZWxlbWVudC5vZmZzZXRXaWR0aDtcbiAgdmFyIGhlaWdodCA9IGVsZW1lbnQub2Zmc2V0SGVpZ2h0O1xuXG4gIGlmIChNYXRoLmFicyhjbGllbnRSZWN0LndpZHRoIC0gd2lkdGgpIDw9IDEpIHtcbiAgICB3aWR0aCA9IGNsaWVudFJlY3Qud2lkdGg7XG4gIH1cblxuICBpZiAoTWF0aC5hYnMoY2xpZW50UmVjdC5oZWlnaHQgLSBoZWlnaHQpIDw9IDEpIHtcbiAgICBoZWlnaHQgPSBjbGllbnRSZWN0LmhlaWdodDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgeDogZWxlbWVudC5vZmZzZXRMZWZ0LFxuICAgIHk6IGVsZW1lbnQub2Zmc2V0VG9wLFxuICAgIHdpZHRoOiB3aWR0aCxcbiAgICBoZWlnaHQ6IGhlaWdodFxuICB9O1xufSIsImltcG9ydCB7IGlzU2hhZG93Um9vdCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNvbnRhaW5zKHBhcmVudCwgY2hpbGQpIHtcbiAgdmFyIHJvb3ROb2RlID0gY2hpbGQuZ2V0Um9vdE5vZGUgJiYgY2hpbGQuZ2V0Um9vdE5vZGUoKTsgLy8gRmlyc3QsIGF0dGVtcHQgd2l0aCBmYXN0ZXIgbmF0aXZlIG1ldGhvZFxuXG4gIGlmIChwYXJlbnQuY29udGFpbnMoY2hpbGQpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH0gLy8gdGhlbiBmYWxsYmFjayB0byBjdXN0b20gaW1wbGVtZW50YXRpb24gd2l0aCBTaGFkb3cgRE9NIHN1cHBvcnRcbiAgZWxzZSBpZiAocm9vdE5vZGUgJiYgaXNTaGFkb3dSb290KHJvb3ROb2RlKSkge1xuICAgICAgdmFyIG5leHQgPSBjaGlsZDtcblxuICAgICAgZG8ge1xuICAgICAgICBpZiAobmV4dCAmJiBwYXJlbnQuaXNTYW1lTm9kZShuZXh0KSkge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXTogbmVlZCBhIGJldHRlciB3YXkgdG8gaGFuZGxlIHRoaXMuLi5cblxuXG4gICAgICAgIG5leHQgPSBuZXh0LnBhcmVudE5vZGUgfHwgbmV4dC5ob3N0O1xuICAgICAgfSB3aGlsZSAobmV4dCk7XG4gICAgfSAvLyBHaXZlIHVwLCB0aGUgcmVzdWx0IGlzIGZhbHNlXG5cblxuICByZXR1cm4gZmFsc2U7XG59IiwiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkge1xuICByZXR1cm4gZ2V0V2luZG93KGVsZW1lbnQpLmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCk7XG59IiwiaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpc1RhYmxlRWxlbWVudChlbGVtZW50KSB7XG4gIHJldHVybiBbJ3RhYmxlJywgJ3RkJywgJ3RoJ10uaW5kZXhPZihnZXROb2RlTmFtZShlbGVtZW50KSkgPj0gMDtcbn0iLCJpbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkge1xuICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dOiBhc3N1bWUgYm9keSBpcyBhbHdheXMgYXZhaWxhYmxlXG4gIHJldHVybiAoKGlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQub3duZXJEb2N1bWVudCA6IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuICBlbGVtZW50LmRvY3VtZW50KSB8fCB3aW5kb3cuZG9jdW1lbnQpLmRvY3VtZW50RWxlbWVudDtcbn0iLCJpbXBvcnQgZ2V0Tm9kZU5hbWUgZnJvbSBcIi4vZ2V0Tm9kZU5hbWUuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgeyBpc1NoYWRvd1Jvb3QgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRQYXJlbnROb2RlKGVsZW1lbnQpIHtcbiAgaWYgKGdldE5vZGVOYW1lKGVsZW1lbnQpID09PSAnaHRtbCcpIHtcbiAgICByZXR1cm4gZWxlbWVudDtcbiAgfVxuXG4gIHJldHVybiAoLy8gdGhpcyBpcyBhIHF1aWNrZXIgKGJ1dCBsZXNzIHR5cGUgc2FmZSkgd2F5IHRvIHNhdmUgcXVpdGUgc29tZSBieXRlcyBmcm9tIHRoZSBidW5kbGVcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1yZXR1cm5dXG4gICAgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG4gICAgZWxlbWVudC5hc3NpZ25lZFNsb3QgfHwgLy8gc3RlcCBpbnRvIHRoZSBzaGFkb3cgRE9NIG9mIHRoZSBwYXJlbnQgb2YgYSBzbG90dGVkIG5vZGVcbiAgICBlbGVtZW50LnBhcmVudE5vZGUgfHwgKCAvLyBET00gRWxlbWVudCBkZXRlY3RlZFxuICAgIGlzU2hhZG93Um9vdChlbGVtZW50KSA/IGVsZW1lbnQuaG9zdCA6IG51bGwpIHx8IC8vIFNoYWRvd1Jvb3QgZGV0ZWN0ZWRcbiAgICAvLyAkRmxvd0ZpeE1lW2luY29tcGF0aWJsZS1jYWxsXTogSFRNTEVsZW1lbnQgaXMgYSBOb2RlXG4gICAgZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpIC8vIGZhbGxiYWNrXG5cbiAgKTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgZ2V0Q29tcHV0ZWRTdHlsZSBmcm9tIFwiLi9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGlzVGFibGVFbGVtZW50IGZyb20gXCIuL2lzVGFibGVFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5cbmZ1bmN0aW9uIGdldFRydWVPZmZzZXRQYXJlbnQoZWxlbWVudCkge1xuICBpZiAoIWlzSFRNTEVsZW1lbnQoZWxlbWVudCkgfHwgLy8gaHR0cHM6Ly9naXRodWIuY29tL3BvcHBlcmpzL3BvcHBlci1jb3JlL2lzc3Vlcy84MzdcbiAgZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KS5wb3NpdGlvbiA9PT0gJ2ZpeGVkJykge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcmV0dXJuIGVsZW1lbnQub2Zmc2V0UGFyZW50O1xufSAvLyBgLm9mZnNldFBhcmVudGAgcmVwb3J0cyBgbnVsbGAgZm9yIGZpeGVkIGVsZW1lbnRzLCB3aGlsZSBhYnNvbHV0ZSBlbGVtZW50c1xuLy8gcmV0dXJuIHRoZSBjb250YWluaW5nIGJsb2NrXG5cblxuZnVuY3Rpb24gZ2V0Q29udGFpbmluZ0Jsb2NrKGVsZW1lbnQpIHtcbiAgdmFyIGlzRmlyZWZveCA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5pbmRleE9mKCdmaXJlZm94JykgIT09IC0xO1xuICB2YXIgaXNJRSA9IG5hdmlnYXRvci51c2VyQWdlbnQuaW5kZXhPZignVHJpZGVudCcpICE9PSAtMTtcblxuICBpZiAoaXNJRSAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpKSB7XG4gICAgLy8gSW4gSUUgOSwgMTAgYW5kIDExIGZpeGVkIGVsZW1lbnRzIGNvbnRhaW5pbmcgYmxvY2sgaXMgYWx3YXlzIGVzdGFibGlzaGVkIGJ5IHRoZSB2aWV3cG9ydFxuICAgIHZhciBlbGVtZW50Q3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KTtcblxuICAgIGlmIChlbGVtZW50Q3NzLnBvc2l0aW9uID09PSAnZml4ZWQnKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICB2YXIgY3VycmVudE5vZGUgPSBnZXRQYXJlbnROb2RlKGVsZW1lbnQpO1xuXG4gIHdoaWxlIChpc0hUTUxFbGVtZW50KGN1cnJlbnROb2RlKSAmJiBbJ2h0bWwnLCAnYm9keSddLmluZGV4T2YoZ2V0Tm9kZU5hbWUoY3VycmVudE5vZGUpKSA8IDApIHtcbiAgICB2YXIgY3NzID0gZ2V0Q29tcHV0ZWRTdHlsZShjdXJyZW50Tm9kZSk7IC8vIFRoaXMgaXMgbm9uLWV4aGF1c3RpdmUgYnV0IGNvdmVycyB0aGUgbW9zdCBjb21tb24gQ1NTIHByb3BlcnRpZXMgdGhhdFxuICAgIC8vIGNyZWF0ZSBhIGNvbnRhaW5pbmcgYmxvY2suXG4gICAgLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvQ1NTL0NvbnRhaW5pbmdfYmxvY2sjaWRlbnRpZnlpbmdfdGhlX2NvbnRhaW5pbmdfYmxvY2tcblxuICAgIGlmIChjc3MudHJhbnNmb3JtICE9PSAnbm9uZScgfHwgY3NzLnBlcnNwZWN0aXZlICE9PSAnbm9uZScgfHwgY3NzLmNvbnRhaW4gPT09ICdwYWludCcgfHwgWyd0cmFuc2Zvcm0nLCAncGVyc3BlY3RpdmUnXS5pbmRleE9mKGNzcy53aWxsQ2hhbmdlKSAhPT0gLTEgfHwgaXNGaXJlZm94ICYmIGNzcy53aWxsQ2hhbmdlID09PSAnZmlsdGVyJyB8fCBpc0ZpcmVmb3ggJiYgY3NzLmZpbHRlciAmJiBjc3MuZmlsdGVyICE9PSAnbm9uZScpIHtcbiAgICAgIHJldHVybiBjdXJyZW50Tm9kZTtcbiAgICB9IGVsc2Uge1xuICAgICAgY3VycmVudE5vZGUgPSBjdXJyZW50Tm9kZS5wYXJlbnROb2RlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBudWxsO1xufSAvLyBHZXRzIHRoZSBjbG9zZXN0IGFuY2VzdG9yIHBvc2l0aW9uZWQgZWxlbWVudC4gSGFuZGxlcyBzb21lIGVkZ2UgY2FzZXMsXG4vLyBzdWNoIGFzIHRhYmxlIGFuY2VzdG9ycyBhbmQgY3Jvc3MgYnJvd3NlciBidWdzLlxuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9mZnNldFBhcmVudChlbGVtZW50KSB7XG4gIHZhciB3aW5kb3cgPSBnZXRXaW5kb3coZWxlbWVudCk7XG4gIHZhciBvZmZzZXRQYXJlbnQgPSBnZXRUcnVlT2Zmc2V0UGFyZW50KGVsZW1lbnQpO1xuXG4gIHdoaWxlIChvZmZzZXRQYXJlbnQgJiYgaXNUYWJsZUVsZW1lbnQob2Zmc2V0UGFyZW50KSAmJiBnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnKSB7XG4gICAgb2Zmc2V0UGFyZW50ID0gZ2V0VHJ1ZU9mZnNldFBhcmVudChvZmZzZXRQYXJlbnQpO1xuICB9XG5cbiAgaWYgKG9mZnNldFBhcmVudCAmJiAoZ2V0Tm9kZU5hbWUob2Zmc2V0UGFyZW50KSA9PT0gJ2h0bWwnIHx8IGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgPT09ICdib2R5JyAmJiBnZXRDb21wdXRlZFN0eWxlKG9mZnNldFBhcmVudCkucG9zaXRpb24gPT09ICdzdGF0aWMnKSkge1xuICAgIHJldHVybiB3aW5kb3c7XG4gIH1cblxuICByZXR1cm4gb2Zmc2V0UGFyZW50IHx8IGdldENvbnRhaW5pbmdCbG9jayhlbGVtZW50KSB8fCB3aW5kb3c7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gWyd0b3AnLCAnYm90dG9tJ10uaW5kZXhPZihwbGFjZW1lbnQpID49IDAgPyAneCcgOiAneSc7XG59IiwiZXhwb3J0IHZhciBtYXggPSBNYXRoLm1heDtcbmV4cG9ydCB2YXIgbWluID0gTWF0aC5taW47XG5leHBvcnQgdmFyIHJvdW5kID0gTWF0aC5yb3VuZDsiLCJpbXBvcnQgeyBtYXggYXMgbWF0aE1heCwgbWluIGFzIG1hdGhNaW4gfSBmcm9tIFwiLi9tYXRoLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiB3aXRoaW4obWluLCB2YWx1ZSwgbWF4KSB7XG4gIHJldHVybiBtYXRoTWF4KG1pbiwgbWF0aE1pbih2YWx1ZSwgbWF4KSk7XG59IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RnJlc2hTaWRlT2JqZWN0KCkge1xuICByZXR1cm4ge1xuICAgIHRvcDogMCxcbiAgICByaWdodDogMCxcbiAgICBib3R0b206IDAsXG4gICAgbGVmdDogMFxuICB9O1xufSIsImltcG9ydCBnZXRGcmVzaFNpZGVPYmplY3QgZnJvbSBcIi4vZ2V0RnJlc2hTaWRlT2JqZWN0LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZVBhZGRpbmdPYmplY3QocGFkZGluZ09iamVjdCkge1xuICByZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgZ2V0RnJlc2hTaWRlT2JqZWN0KCksIHBhZGRpbmdPYmplY3QpO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGV4cGFuZFRvSGFzaE1hcCh2YWx1ZSwga2V5cykge1xuICByZXR1cm4ga2V5cy5yZWR1Y2UoZnVuY3Rpb24gKGhhc2hNYXAsIGtleSkge1xuICAgIGhhc2hNYXBba2V5XSA9IHZhbHVlO1xuICAgIHJldHVybiBoYXNoTWFwO1xuICB9LCB7fSk7XG59IiwiaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRMYXlvdXRSZWN0IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0TGF5b3V0UmVjdC5qc1wiO1xuaW1wb3J0IGNvbnRhaW5zIGZyb20gXCIuLi9kb20tdXRpbHMvY29udGFpbnMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRPZmZzZXRQYXJlbnQuanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHdpdGhpbiBmcm9tIFwiLi4vdXRpbHMvd2l0aGluLmpzXCI7XG5pbXBvcnQgbWVyZ2VQYWRkaW5nT2JqZWN0IGZyb20gXCIuLi91dGlscy9tZXJnZVBhZGRpbmdPYmplY3QuanNcIjtcbmltcG9ydCBleHBhbmRUb0hhc2hNYXAgZnJvbSBcIi4uL3V0aWxzL2V4cGFuZFRvSGFzaE1hcC5qc1wiO1xuaW1wb3J0IHsgbGVmdCwgcmlnaHQsIGJhc2VQbGFjZW1lbnRzLCB0b3AsIGJvdHRvbSB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbnZhciB0b1BhZGRpbmdPYmplY3QgPSBmdW5jdGlvbiB0b1BhZGRpbmdPYmplY3QocGFkZGluZywgc3RhdGUpIHtcbiAgcGFkZGluZyA9IHR5cGVvZiBwYWRkaW5nID09PSAnZnVuY3Rpb24nID8gcGFkZGluZyhPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5yZWN0cywge1xuICAgIHBsYWNlbWVudDogc3RhdGUucGxhY2VtZW50XG4gIH0pKSA6IHBhZGRpbmc7XG4gIHJldHVybiBtZXJnZVBhZGRpbmdPYmplY3QodHlwZW9mIHBhZGRpbmcgIT09ICdudW1iZXInID8gcGFkZGluZyA6IGV4cGFuZFRvSGFzaE1hcChwYWRkaW5nLCBiYXNlUGxhY2VtZW50cykpO1xufTtcblxuZnVuY3Rpb24gYXJyb3coX3JlZikge1xuICB2YXIgX3N0YXRlJG1vZGlmaWVyc0RhdGEkO1xuXG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lLFxuICAgICAgb3B0aW9ucyA9IF9yZWYub3B0aW9ucztcbiAgdmFyIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93O1xuICB2YXIgcG9wcGVyT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cztcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBnZXRCYXNlUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciBheGlzID0gZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50KGJhc2VQbGFjZW1lbnQpO1xuICB2YXIgaXNWZXJ0aWNhbCA9IFtsZWZ0LCByaWdodF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwO1xuICB2YXIgbGVuID0gaXNWZXJ0aWNhbCA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICBpZiAoIWFycm93RWxlbWVudCB8fCAhcG9wcGVyT2Zmc2V0cykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHZhciBwYWRkaW5nT2JqZWN0ID0gdG9QYWRkaW5nT2JqZWN0KG9wdGlvbnMucGFkZGluZywgc3RhdGUpO1xuICB2YXIgYXJyb3dSZWN0ID0gZ2V0TGF5b3V0UmVjdChhcnJvd0VsZW1lbnQpO1xuICB2YXIgbWluUHJvcCA9IGF4aXMgPT09ICd5JyA/IHRvcCA6IGxlZnQ7XG4gIHZhciBtYXhQcm9wID0gYXhpcyA9PT0gJ3knID8gYm90dG9tIDogcmlnaHQ7XG4gIHZhciBlbmREaWZmID0gc3RhdGUucmVjdHMucmVmZXJlbmNlW2xlbl0gKyBzdGF0ZS5yZWN0cy5yZWZlcmVuY2VbYXhpc10gLSBwb3BwZXJPZmZzZXRzW2F4aXNdIC0gc3RhdGUucmVjdHMucG9wcGVyW2xlbl07XG4gIHZhciBzdGFydERpZmYgPSBwb3BwZXJPZmZzZXRzW2F4aXNdIC0gc3RhdGUucmVjdHMucmVmZXJlbmNlW2F4aXNdO1xuICB2YXIgYXJyb3dPZmZzZXRQYXJlbnQgPSBnZXRPZmZzZXRQYXJlbnQoYXJyb3dFbGVtZW50KTtcbiAgdmFyIGNsaWVudFNpemUgPSBhcnJvd09mZnNldFBhcmVudCA/IGF4aXMgPT09ICd5JyA/IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudEhlaWdodCB8fCAwIDogYXJyb3dPZmZzZXRQYXJlbnQuY2xpZW50V2lkdGggfHwgMCA6IDA7XG4gIHZhciBjZW50ZXJUb1JlZmVyZW5jZSA9IGVuZERpZmYgLyAyIC0gc3RhcnREaWZmIC8gMjsgLy8gTWFrZSBzdXJlIHRoZSBhcnJvdyBkb2Vzbid0IG92ZXJmbG93IHRoZSBwb3BwZXIgaWYgdGhlIGNlbnRlciBwb2ludCBpc1xuICAvLyBvdXRzaWRlIG9mIHRoZSBwb3BwZXIgYm91bmRzXG5cbiAgdmFyIG1pbiA9IHBhZGRpbmdPYmplY3RbbWluUHJvcF07XG4gIHZhciBtYXggPSBjbGllbnRTaXplIC0gYXJyb3dSZWN0W2xlbl0gLSBwYWRkaW5nT2JqZWN0W21heFByb3BdO1xuICB2YXIgY2VudGVyID0gY2xpZW50U2l6ZSAvIDIgLSBhcnJvd1JlY3RbbGVuXSAvIDIgKyBjZW50ZXJUb1JlZmVyZW5jZTtcbiAgdmFyIG9mZnNldCA9IHdpdGhpbihtaW4sIGNlbnRlciwgbWF4KTsgLy8gUHJldmVudHMgYnJlYWtpbmcgc3ludGF4IGhpZ2hsaWdodGluZy4uLlxuXG4gIHZhciBheGlzUHJvcCA9IGF4aXM7XG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSAoX3N0YXRlJG1vZGlmaWVyc0RhdGEkID0ge30sIF9zdGF0ZSRtb2RpZmllcnNEYXRhJFtheGlzUHJvcF0gPSBvZmZzZXQsIF9zdGF0ZSRtb2RpZmllcnNEYXRhJC5jZW50ZXJPZmZzZXQgPSBvZmZzZXQgLSBjZW50ZXIsIF9zdGF0ZSRtb2RpZmllcnNEYXRhJCk7XG59XG5cbmZ1bmN0aW9uIGVmZmVjdChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmMi5vcHRpb25zO1xuICB2YXIgX29wdGlvbnMkZWxlbWVudCA9IG9wdGlvbnMuZWxlbWVudCxcbiAgICAgIGFycm93RWxlbWVudCA9IF9vcHRpb25zJGVsZW1lbnQgPT09IHZvaWQgMCA/ICdbZGF0YS1wb3BwZXItYXJyb3ddJyA6IF9vcHRpb25zJGVsZW1lbnQ7XG5cbiAgaWYgKGFycm93RWxlbWVudCA9PSBudWxsKSB7XG4gICAgcmV0dXJuO1xuICB9IC8vIENTUyBzZWxlY3RvclxuXG5cbiAgaWYgKHR5cGVvZiBhcnJvd0VsZW1lbnQgPT09ICdzdHJpbmcnKSB7XG4gICAgYXJyb3dFbGVtZW50ID0gc3RhdGUuZWxlbWVudHMucG9wcGVyLnF1ZXJ5U2VsZWN0b3IoYXJyb3dFbGVtZW50KTtcblxuICAgIGlmICghYXJyb3dFbGVtZW50KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICB9XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIGlmICghaXNIVE1MRWxlbWVudChhcnJvd0VsZW1lbnQpKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFsnUG9wcGVyOiBcImFycm93XCIgZWxlbWVudCBtdXN0IGJlIGFuIEhUTUxFbGVtZW50IChub3QgYW4gU1ZHRWxlbWVudCkuJywgJ1RvIHVzZSBhbiBTVkcgYXJyb3csIHdyYXAgaXQgaW4gYW4gSFRNTEVsZW1lbnQgdGhhdCB3aWxsIGJlIHVzZWQgYXMnLCAndGhlIGFycm93LiddLmpvaW4oJyAnKSk7XG4gICAgfVxuICB9XG5cbiAgaWYgKCFjb250YWlucyhzdGF0ZS5lbGVtZW50cy5wb3BwZXIsIGFycm93RWxlbWVudCkpIHtcbiAgICBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09IFwicHJvZHVjdGlvblwiKSB7XG4gICAgICBjb25zb2xlLmVycm9yKFsnUG9wcGVyOiBcImFycm93XCIgbW9kaWZpZXJcXCdzIGBlbGVtZW50YCBtdXN0IGJlIGEgY2hpbGQgb2YgdGhlIHBvcHBlcicsICdlbGVtZW50LiddLmpvaW4oJyAnKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuO1xuICB9XG5cbiAgc3RhdGUuZWxlbWVudHMuYXJyb3cgPSBhcnJvd0VsZW1lbnQ7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdhcnJvdycsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBhcnJvdyxcbiAgZWZmZWN0OiBlZmZlY3QsXG4gIHJlcXVpcmVzOiBbJ3BvcHBlck9mZnNldHMnXSxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydwcmV2ZW50T3ZlcmZsb3cnXVxufTsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRWYXJpYXRpb24ocGxhY2VtZW50KSB7XG4gIHJldHVybiBwbGFjZW1lbnQuc3BsaXQoJy0nKVsxXTtcbn0iLCJpbXBvcnQgeyB0b3AsIGxlZnQsIHJpZ2h0LCBib3R0b20sIGVuZCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldE9mZnNldFBhcmVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi4vZG9tLXV0aWxzL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRDb21wdXRlZFN0eWxlLmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgeyByb3VuZCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxudmFyIHVuc2V0U2lkZXMgPSB7XG4gIHRvcDogJ2F1dG8nLFxuICByaWdodDogJ2F1dG8nLFxuICBib3R0b206ICdhdXRvJyxcbiAgbGVmdDogJ2F1dG8nXG59OyAvLyBSb3VuZCB0aGUgb2Zmc2V0cyB0byB0aGUgbmVhcmVzdCBzdWl0YWJsZSBzdWJwaXhlbCBiYXNlZCBvbiB0aGUgRFBSLlxuLy8gWm9vbWluZyBjYW4gY2hhbmdlIHRoZSBEUFIsIGJ1dCBpdCBzZWVtcyB0byByZXBvcnQgYSB2YWx1ZSB0aGF0IHdpbGxcbi8vIGNsZWFubHkgZGl2aWRlIHRoZSB2YWx1ZXMgaW50byB0aGUgYXBwcm9wcmlhdGUgc3VicGl4ZWxzLlxuXG5mdW5jdGlvbiByb3VuZE9mZnNldHNCeURQUihfcmVmKSB7XG4gIHZhciB4ID0gX3JlZi54LFxuICAgICAgeSA9IF9yZWYueTtcbiAgdmFyIHdpbiA9IHdpbmRvdztcbiAgdmFyIGRwciA9IHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDE7XG4gIHJldHVybiB7XG4gICAgeDogcm91bmQocm91bmQoeCAqIGRwcikgLyBkcHIpIHx8IDAsXG4gICAgeTogcm91bmQocm91bmQoeSAqIGRwcikgLyBkcHIpIHx8IDBcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIG1hcFRvU3R5bGVzKF9yZWYyKSB7XG4gIHZhciBfT2JqZWN0JGFzc2lnbjI7XG5cbiAgdmFyIHBvcHBlciA9IF9yZWYyLnBvcHBlcixcbiAgICAgIHBvcHBlclJlY3QgPSBfcmVmMi5wb3BwZXJSZWN0LFxuICAgICAgcGxhY2VtZW50ID0gX3JlZjIucGxhY2VtZW50LFxuICAgICAgdmFyaWF0aW9uID0gX3JlZjIudmFyaWF0aW9uLFxuICAgICAgb2Zmc2V0cyA9IF9yZWYyLm9mZnNldHMsXG4gICAgICBwb3NpdGlvbiA9IF9yZWYyLnBvc2l0aW9uLFxuICAgICAgZ3B1QWNjZWxlcmF0aW9uID0gX3JlZjIuZ3B1QWNjZWxlcmF0aW9uLFxuICAgICAgYWRhcHRpdmUgPSBfcmVmMi5hZGFwdGl2ZSxcbiAgICAgIHJvdW5kT2Zmc2V0cyA9IF9yZWYyLnJvdW5kT2Zmc2V0cztcblxuICB2YXIgX3JlZjMgPSByb3VuZE9mZnNldHMgPT09IHRydWUgPyByb3VuZE9mZnNldHNCeURQUihvZmZzZXRzKSA6IHR5cGVvZiByb3VuZE9mZnNldHMgPT09ICdmdW5jdGlvbicgPyByb3VuZE9mZnNldHMob2Zmc2V0cykgOiBvZmZzZXRzLFxuICAgICAgX3JlZjMkeCA9IF9yZWYzLngsXG4gICAgICB4ID0gX3JlZjMkeCA9PT0gdm9pZCAwID8gMCA6IF9yZWYzJHgsXG4gICAgICBfcmVmMyR5ID0gX3JlZjMueSxcbiAgICAgIHkgPSBfcmVmMyR5ID09PSB2b2lkIDAgPyAwIDogX3JlZjMkeTtcblxuICB2YXIgaGFzWCA9IG9mZnNldHMuaGFzT3duUHJvcGVydHkoJ3gnKTtcbiAgdmFyIGhhc1kgPSBvZmZzZXRzLmhhc093blByb3BlcnR5KCd5Jyk7XG4gIHZhciBzaWRlWCA9IGxlZnQ7XG4gIHZhciBzaWRlWSA9IHRvcDtcbiAgdmFyIHdpbiA9IHdpbmRvdztcblxuICBpZiAoYWRhcHRpdmUpIHtcbiAgICB2YXIgb2Zmc2V0UGFyZW50ID0gZ2V0T2Zmc2V0UGFyZW50KHBvcHBlcik7XG4gICAgdmFyIGhlaWdodFByb3AgPSAnY2xpZW50SGVpZ2h0JztcbiAgICB2YXIgd2lkdGhQcm9wID0gJ2NsaWVudFdpZHRoJztcblxuICAgIGlmIChvZmZzZXRQYXJlbnQgPT09IGdldFdpbmRvdyhwb3BwZXIpKSB7XG4gICAgICBvZmZzZXRQYXJlbnQgPSBnZXREb2N1bWVudEVsZW1lbnQocG9wcGVyKTtcblxuICAgICAgaWYgKGdldENvbXB1dGVkU3R5bGUob2Zmc2V0UGFyZW50KS5wb3NpdGlvbiAhPT0gJ3N0YXRpYycgJiYgcG9zaXRpb24gPT09ICdhYnNvbHV0ZScpIHtcbiAgICAgICAgaGVpZ2h0UHJvcCA9ICdzY3JvbGxIZWlnaHQnO1xuICAgICAgICB3aWR0aFByb3AgPSAnc2Nyb2xsV2lkdGgnO1xuICAgICAgfVxuICAgIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FzdF06IGZvcmNlIHR5cGUgcmVmaW5lbWVudCwgd2UgY29tcGFyZSBvZmZzZXRQYXJlbnQgd2l0aCB3aW5kb3cgYWJvdmUsIGJ1dCBGbG93IGRvZXNuJ3QgZGV0ZWN0IGl0XG5cblxuICAgIG9mZnNldFBhcmVudCA9IG9mZnNldFBhcmVudDtcblxuICAgIGlmIChwbGFjZW1lbnQgPT09IHRvcCB8fCAocGxhY2VtZW50ID09PSBsZWZ0IHx8IHBsYWNlbWVudCA9PT0gcmlnaHQpICYmIHZhcmlhdGlvbiA9PT0gZW5kKSB7XG4gICAgICBzaWRlWSA9IGJvdHRvbTsgLy8gJEZsb3dGaXhNZVtwcm9wLW1pc3NpbmddXG5cbiAgICAgIHkgLT0gb2Zmc2V0UGFyZW50W2hlaWdodFByb3BdIC0gcG9wcGVyUmVjdC5oZWlnaHQ7XG4gICAgICB5ICo9IGdwdUFjY2VsZXJhdGlvbiA/IDEgOiAtMTtcbiAgICB9XG5cbiAgICBpZiAocGxhY2VtZW50ID09PSBsZWZ0IHx8IChwbGFjZW1lbnQgPT09IHRvcCB8fCBwbGFjZW1lbnQgPT09IGJvdHRvbSkgJiYgdmFyaWF0aW9uID09PSBlbmQpIHtcbiAgICAgIHNpZGVYID0gcmlnaHQ7IC8vICRGbG93Rml4TWVbcHJvcC1taXNzaW5nXVxuXG4gICAgICB4IC09IG9mZnNldFBhcmVudFt3aWR0aFByb3BdIC0gcG9wcGVyUmVjdC53aWR0aDtcbiAgICAgIHggKj0gZ3B1QWNjZWxlcmF0aW9uID8gMSA6IC0xO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjb21tb25TdHlsZXMgPSBPYmplY3QuYXNzaWduKHtcbiAgICBwb3NpdGlvbjogcG9zaXRpb25cbiAgfSwgYWRhcHRpdmUgJiYgdW5zZXRTaWRlcyk7XG5cbiAgaWYgKGdwdUFjY2VsZXJhdGlvbikge1xuICAgIHZhciBfT2JqZWN0JGFzc2lnbjtcblxuICAgIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBjb21tb25TdHlsZXMsIChfT2JqZWN0JGFzc2lnbiA9IHt9LCBfT2JqZWN0JGFzc2lnbltzaWRlWV0gPSBoYXNZID8gJzAnIDogJycsIF9PYmplY3QkYXNzaWduW3NpZGVYXSA9IGhhc1ggPyAnMCcgOiAnJywgX09iamVjdCRhc3NpZ24udHJhbnNmb3JtID0gKHdpbi5kZXZpY2VQaXhlbFJhdGlvIHx8IDEpIDw9IDEgPyBcInRyYW5zbGF0ZShcIiArIHggKyBcInB4LCBcIiArIHkgKyBcInB4KVwiIDogXCJ0cmFuc2xhdGUzZChcIiArIHggKyBcInB4LCBcIiArIHkgKyBcInB4LCAwKVwiLCBfT2JqZWN0JGFzc2lnbikpO1xuICB9XG5cbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywgKF9PYmplY3QkYXNzaWduMiA9IHt9LCBfT2JqZWN0JGFzc2lnbjJbc2lkZVldID0gaGFzWSA/IHkgKyBcInB4XCIgOiAnJywgX09iamVjdCRhc3NpZ24yW3NpZGVYXSA9IGhhc1ggPyB4ICsgXCJweFwiIDogJycsIF9PYmplY3QkYXNzaWduMi50cmFuc2Zvcm0gPSAnJywgX09iamVjdCRhc3NpZ24yKSk7XG59XG5cbmZ1bmN0aW9uIGNvbXB1dGVTdHlsZXMoX3JlZjQpIHtcbiAgdmFyIHN0YXRlID0gX3JlZjQuc3RhdGUsXG4gICAgICBvcHRpb25zID0gX3JlZjQub3B0aW9ucztcbiAgdmFyIF9vcHRpb25zJGdwdUFjY2VsZXJhdCA9IG9wdGlvbnMuZ3B1QWNjZWxlcmF0aW9uLFxuICAgICAgZ3B1QWNjZWxlcmF0aW9uID0gX29wdGlvbnMkZ3B1QWNjZWxlcmF0ID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkZ3B1QWNjZWxlcmF0LFxuICAgICAgX29wdGlvbnMkYWRhcHRpdmUgPSBvcHRpb25zLmFkYXB0aXZlLFxuICAgICAgYWRhcHRpdmUgPSBfb3B0aW9ucyRhZGFwdGl2ZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJGFkYXB0aXZlLFxuICAgICAgX29wdGlvbnMkcm91bmRPZmZzZXRzID0gb3B0aW9ucy5yb3VuZE9mZnNldHMsXG4gICAgICByb3VuZE9mZnNldHMgPSBfb3B0aW9ucyRyb3VuZE9mZnNldHMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRyb3VuZE9mZnNldHM7XG5cbiAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgIHZhciB0cmFuc2l0aW9uUHJvcGVydHkgPSBnZXRDb21wdXRlZFN0eWxlKHN0YXRlLmVsZW1lbnRzLnBvcHBlcikudHJhbnNpdGlvblByb3BlcnR5IHx8ICcnO1xuXG4gICAgaWYgKGFkYXB0aXZlICYmIFsndHJhbnNmb3JtJywgJ3RvcCcsICdyaWdodCcsICdib3R0b20nLCAnbGVmdCddLnNvbWUoZnVuY3Rpb24gKHByb3BlcnR5KSB7XG4gICAgICByZXR1cm4gdHJhbnNpdGlvblByb3BlcnR5LmluZGV4T2YocHJvcGVydHkpID49IDA7XG4gICAgfSkpIHtcbiAgICAgIGNvbnNvbGUud2FybihbJ1BvcHBlcjogRGV0ZWN0ZWQgQ1NTIHRyYW5zaXRpb25zIG9uIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nJywgJ0NTUyBwcm9wZXJ0aWVzOiBcInRyYW5zZm9ybVwiLCBcInRvcFwiLCBcInJpZ2h0XCIsIFwiYm90dG9tXCIsIFwibGVmdFwiLicsICdcXG5cXG4nLCAnRGlzYWJsZSB0aGUgXCJjb21wdXRlU3R5bGVzXCIgbW9kaWZpZXJcXCdzIGBhZGFwdGl2ZWAgb3B0aW9uIHRvIGFsbG93JywgJ2ZvciBzbW9vdGggdHJhbnNpdGlvbnMsIG9yIHJlbW92ZSB0aGVzZSBwcm9wZXJ0aWVzIGZyb20gdGhlIENTUycsICd0cmFuc2l0aW9uIGRlY2xhcmF0aW9uIG9uIHRoZSBwb3BwZXIgZWxlbWVudCBpZiBvbmx5IHRyYW5zaXRpb25pbmcnLCAnb3BhY2l0eSBvciBiYWNrZ3JvdW5kLWNvbG9yIGZvciBleGFtcGxlLicsICdcXG5cXG4nLCAnV2UgcmVjb21tZW5kIHVzaW5nIHRoZSBwb3BwZXIgZWxlbWVudCBhcyBhIHdyYXBwZXIgYXJvdW5kIGFuIGlubmVyJywgJ2VsZW1lbnQgdGhhdCBjYW4gaGF2ZSBhbnkgQ1NTIHByb3BlcnR5IHRyYW5zaXRpb25lZCBmb3IgYW5pbWF0aW9ucy4nXS5qb2luKCcgJykpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBjb21tb25TdHlsZXMgPSB7XG4gICAgcGxhY2VtZW50OiBnZXRCYXNlUGxhY2VtZW50KHN0YXRlLnBsYWNlbWVudCksXG4gICAgdmFyaWF0aW9uOiBnZXRWYXJpYXRpb24oc3RhdGUucGxhY2VtZW50KSxcbiAgICBwb3BwZXI6IHN0YXRlLmVsZW1lbnRzLnBvcHBlcixcbiAgICBwb3BwZXJSZWN0OiBzdGF0ZS5yZWN0cy5wb3BwZXIsXG4gICAgZ3B1QWNjZWxlcmF0aW9uOiBncHVBY2NlbGVyYXRpb25cbiAgfTtcblxuICBpZiAoc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzICE9IG51bGwpIHtcbiAgICBzdGF0ZS5zdHlsZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuc3R5bGVzLnBvcHBlciwgbWFwVG9TdHlsZXMoT2JqZWN0LmFzc2lnbih7fSwgY29tbW9uU3R5bGVzLCB7XG4gICAgICBvZmZzZXRzOiBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMsXG4gICAgICBwb3NpdGlvbjogc3RhdGUub3B0aW9ucy5zdHJhdGVneSxcbiAgICAgIGFkYXB0aXZlOiBhZGFwdGl2ZSxcbiAgICAgIHJvdW5kT2Zmc2V0czogcm91bmRPZmZzZXRzXG4gICAgfSkpKTtcbiAgfVxuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhLmFycm93ICE9IG51bGwpIHtcbiAgICBzdGF0ZS5zdHlsZXMuYXJyb3cgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5zdHlsZXMuYXJyb3csIG1hcFRvU3R5bGVzKE9iamVjdC5hc3NpZ24oe30sIGNvbW1vblN0eWxlcywge1xuICAgICAgb2Zmc2V0czogc3RhdGUubW9kaWZpZXJzRGF0YS5hcnJvdyxcbiAgICAgIHBvc2l0aW9uOiAnYWJzb2x1dGUnLFxuICAgICAgYWRhcHRpdmU6IGZhbHNlLFxuICAgICAgcm91bmRPZmZzZXRzOiByb3VuZE9mZnNldHNcbiAgICB9KSkpO1xuICB9XG5cbiAgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIgPSBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZS5hdHRyaWJ1dGVzLnBvcHBlciwge1xuICAgICdkYXRhLXBvcHBlci1wbGFjZW1lbnQnOiBzdGF0ZS5wbGFjZW1lbnRcbiAgfSk7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdjb21wdXRlU3R5bGVzJyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdiZWZvcmVXcml0ZScsXG4gIGZuOiBjb21wdXRlU3R5bGVzLFxuICBkYXRhOiB7fVxufTsiLCJpbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0V2luZG93LmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxudmFyIHBhc3NpdmUgPSB7XG4gIHBhc3NpdmU6IHRydWVcbn07XG5cbmZ1bmN0aW9uIGVmZmVjdChfcmVmKSB7XG4gIHZhciBzdGF0ZSA9IF9yZWYuc3RhdGUsXG4gICAgICBpbnN0YW5jZSA9IF9yZWYuaW5zdGFuY2UsXG4gICAgICBvcHRpb25zID0gX3JlZi5vcHRpb25zO1xuICB2YXIgX29wdGlvbnMkc2Nyb2xsID0gb3B0aW9ucy5zY3JvbGwsXG4gICAgICBzY3JvbGwgPSBfb3B0aW9ucyRzY3JvbGwgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRzY3JvbGwsXG4gICAgICBfb3B0aW9ucyRyZXNpemUgPSBvcHRpb25zLnJlc2l6ZSxcbiAgICAgIHJlc2l6ZSA9IF9vcHRpb25zJHJlc2l6ZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJHJlc2l6ZTtcbiAgdmFyIHdpbmRvdyA9IGdldFdpbmRvdyhzdGF0ZS5lbGVtZW50cy5wb3BwZXIpO1xuICB2YXIgc2Nyb2xsUGFyZW50cyA9IFtdLmNvbmNhdChzdGF0ZS5zY3JvbGxQYXJlbnRzLnJlZmVyZW5jZSwgc3RhdGUuc2Nyb2xsUGFyZW50cy5wb3BwZXIpO1xuXG4gIGlmIChzY3JvbGwpIHtcbiAgICBzY3JvbGxQYXJlbnRzLmZvckVhY2goZnVuY3Rpb24gKHNjcm9sbFBhcmVudCkge1xuICAgICAgc2Nyb2xsUGFyZW50LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgfSk7XG4gIH1cblxuICBpZiAocmVzaXplKSB7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gIH1cblxuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmIChzY3JvbGwpIHtcbiAgICAgIHNjcm9sbFBhcmVudHMuZm9yRWFjaChmdW5jdGlvbiAoc2Nyb2xsUGFyZW50KSB7XG4gICAgICAgIHNjcm9sbFBhcmVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBpbnN0YW5jZS51cGRhdGUsIHBhc3NpdmUpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHJlc2l6ZSkge1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIGluc3RhbmNlLnVwZGF0ZSwgcGFzc2l2ZSk7XG4gICAgfVxuICB9O1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnZXZlbnRMaXN0ZW5lcnMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3dyaXRlJyxcbiAgZm46IGZ1bmN0aW9uIGZuKCkge30sXG4gIGVmZmVjdDogZWZmZWN0LFxuICBkYXRhOiB7fVxufTsiLCJ2YXIgaGFzaCA9IHtcbiAgbGVmdDogJ3JpZ2h0JyxcbiAgcmlnaHQ6ICdsZWZ0JyxcbiAgYm90dG9tOiAndG9wJyxcbiAgdG9wOiAnYm90dG9tJ1xufTtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE9wcG9zaXRlUGxhY2VtZW50KHBsYWNlbWVudCkge1xuICByZXR1cm4gcGxhY2VtZW50LnJlcGxhY2UoL2xlZnR8cmlnaHR8Ym90dG9tfHRvcC9nLCBmdW5jdGlvbiAobWF0Y2hlZCkge1xuICAgIHJldHVybiBoYXNoW21hdGNoZWRdO1xuICB9KTtcbn0iLCJ2YXIgaGFzaCA9IHtcbiAgc3RhcnQ6ICdlbmQnLFxuICBlbmQ6ICdzdGFydCdcbn07XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChwbGFjZW1lbnQpIHtcbiAgcmV0dXJuIHBsYWNlbWVudC5yZXBsYWNlKC9zdGFydHxlbmQvZywgZnVuY3Rpb24gKG1hdGNoZWQpIHtcbiAgICByZXR1cm4gaGFzaFttYXRjaGVkXTtcbiAgfSk7XG59IiwiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFdpbmRvd1Njcm9sbChub2RlKSB7XG4gIHZhciB3aW4gPSBnZXRXaW5kb3cobm9kZSk7XG4gIHZhciBzY3JvbGxMZWZ0ID0gd2luLnBhZ2VYT2Zmc2V0O1xuICB2YXIgc2Nyb2xsVG9wID0gd2luLnBhZ2VZT2Zmc2V0O1xuICByZXR1cm4ge1xuICAgIHNjcm9sbExlZnQ6IHNjcm9sbExlZnQsXG4gICAgc2Nyb2xsVG9wOiBzY3JvbGxUb3BcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRXaW5kb3dTY3JvbGwgZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpIHtcbiAgLy8gSWYgPGh0bWw+IGhhcyBhIENTUyB3aWR0aCBncmVhdGVyIHRoYW4gdGhlIHZpZXdwb3J0LCB0aGVuIHRoaXMgd2lsbCBiZVxuICAvLyBpbmNvcnJlY3QgZm9yIFJUTC5cbiAgLy8gUG9wcGVyIDEgaXMgYnJva2VuIGluIHRoaXMgY2FzZSBhbmQgbmV2ZXIgaGFkIGEgYnVnIHJlcG9ydCBzbyBsZXQncyBhc3N1bWVcbiAgLy8gaXQncyBub3QgYW4gaXNzdWUuIEkgZG9uJ3QgdGhpbmsgYW55b25lIGV2ZXIgc3BlY2lmaWVzIHdpZHRoIG9uIDxodG1sPlxuICAvLyBhbnl3YXkuXG4gIC8vIEJyb3dzZXJzIHdoZXJlIHRoZSBsZWZ0IHNjcm9sbGJhciBkb2Vzbid0IGNhdXNlIGFuIGlzc3VlIHJlcG9ydCBgMGAgZm9yXG4gIC8vIHRoaXMgKGUuZy4gRWRnZSAyMDE5LCBJRTExLCBTYWZhcmkpXG4gIHJldHVybiBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZ2V0RG9jdW1lbnRFbGVtZW50KGVsZW1lbnQpKS5sZWZ0ICsgZ2V0V2luZG93U2Nyb2xsKGVsZW1lbnQpLnNjcm9sbExlZnQ7XG59IiwiaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4vZ2V0RG9jdW1lbnRFbGVtZW50LmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93U2Nyb2xsQmFyWCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGxCYXJYLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRWaWV3cG9ydFJlY3QoZWxlbWVudCkge1xuICB2YXIgd2luID0gZ2V0V2luZG93KGVsZW1lbnQpO1xuICB2YXIgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgdmFyIHZpc3VhbFZpZXdwb3J0ID0gd2luLnZpc3VhbFZpZXdwb3J0O1xuICB2YXIgd2lkdGggPSBodG1sLmNsaWVudFdpZHRoO1xuICB2YXIgaGVpZ2h0ID0gaHRtbC5jbGllbnRIZWlnaHQ7XG4gIHZhciB4ID0gMDtcbiAgdmFyIHkgPSAwOyAvLyBOQjogVGhpcyBpc24ndCBzdXBwb3J0ZWQgb24gaU9TIDw9IDEyLiBJZiB0aGUga2V5Ym9hcmQgaXMgb3BlbiwgdGhlIHBvcHBlclxuICAvLyBjYW4gYmUgb2JzY3VyZWQgdW5kZXJuZWF0aCBpdC5cbiAgLy8gQWxzbywgYGh0bWwuY2xpZW50SGVpZ2h0YCBhZGRzIHRoZSBib3R0b20gYmFyIGhlaWdodCBpbiBTYWZhcmkgaU9TLCBldmVuXG4gIC8vIGlmIGl0IGlzbid0IG9wZW4sIHNvIGlmIHRoaXMgaXNuJ3QgYXZhaWxhYmxlLCB0aGUgcG9wcGVyIHdpbGwgYmUgZGV0ZWN0ZWRcbiAgLy8gdG8gb3ZlcmZsb3cgdGhlIGJvdHRvbSBvZiB0aGUgc2NyZWVuIHRvbyBlYXJseS5cblxuICBpZiAodmlzdWFsVmlld3BvcnQpIHtcbiAgICB3aWR0aCA9IHZpc3VhbFZpZXdwb3J0LndpZHRoO1xuICAgIGhlaWdodCA9IHZpc3VhbFZpZXdwb3J0LmhlaWdodDsgLy8gVXNlcyBMYXlvdXQgVmlld3BvcnQgKGxpa2UgQ2hyb21lOyBTYWZhcmkgZG9lcyBub3QgY3VycmVudGx5KVxuICAgIC8vIEluIENocm9tZSwgaXQgcmV0dXJucyBhIHZhbHVlIHZlcnkgY2xvc2UgdG8gMCAoKy8tKSBidXQgY29udGFpbnMgcm91bmRpbmdcbiAgICAvLyBlcnJvcnMgZHVlIHRvIGZsb2F0aW5nIHBvaW50IG51bWJlcnMsIHNvIHdlIG5lZWQgdG8gY2hlY2sgcHJlY2lzaW9uLlxuICAgIC8vIFNhZmFyaSByZXR1cm5zIGEgbnVtYmVyIDw9IDAsIHVzdWFsbHkgPCAtMSB3aGVuIHBpbmNoLXpvb21lZFxuICAgIC8vIEZlYXR1cmUgZGV0ZWN0aW9uIGZhaWxzIGluIG1vYmlsZSBlbXVsYXRpb24gbW9kZSBpbiBDaHJvbWUuXG4gICAgLy8gTWF0aC5hYnMod2luLmlubmVyV2lkdGggLyB2aXN1YWxWaWV3cG9ydC5zY2FsZSAtIHZpc3VhbFZpZXdwb3J0LndpZHRoKSA8XG4gICAgLy8gMC4wMDFcbiAgICAvLyBGYWxsYmFjayBoZXJlOiBcIk5vdCBTYWZhcmlcIiB1c2VyQWdlbnRcblxuICAgIGlmICghL14oKD8hY2hyb21lfGFuZHJvaWQpLikqc2FmYXJpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSkge1xuICAgICAgeCA9IHZpc3VhbFZpZXdwb3J0Lm9mZnNldExlZnQ7XG4gICAgICB5ID0gdmlzdWFsVmlld3BvcnQub2Zmc2V0VG9wO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHg6IHggKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpLFxuICAgIHk6IHlcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbCBmcm9tIFwiLi9nZXRXaW5kb3dTY3JvbGwuanNcIjtcbmltcG9ydCB7IG1heCB9IGZyb20gXCIuLi91dGlscy9tYXRoLmpzXCI7IC8vIEdldHMgdGhlIGVudGlyZSBzaXplIG9mIHRoZSBzY3JvbGxhYmxlIGRvY3VtZW50IGFyZWEsIGV2ZW4gZXh0ZW5kaW5nIG91dHNpZGVcbi8vIG9mIHRoZSBgPGh0bWw+YCBhbmQgYDxib2R5PmAgcmVjdCBib3VuZHMgaWYgaG9yaXpvbnRhbGx5IHNjcm9sbGFibGVcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0RG9jdW1lbnRSZWN0KGVsZW1lbnQpIHtcbiAgdmFyIF9lbGVtZW50JG93bmVyRG9jdW1lbjtcblxuICB2YXIgaHRtbCA9IGdldERvY3VtZW50RWxlbWVudChlbGVtZW50KTtcbiAgdmFyIHdpblNjcm9sbCA9IGdldFdpbmRvd1Njcm9sbChlbGVtZW50KTtcbiAgdmFyIGJvZHkgPSAoX2VsZW1lbnQkb3duZXJEb2N1bWVuID0gZWxlbWVudC5vd25lckRvY3VtZW50KSA9PSBudWxsID8gdm9pZCAwIDogX2VsZW1lbnQkb3duZXJEb2N1bWVuLmJvZHk7XG4gIHZhciB3aWR0aCA9IG1heChodG1sLnNjcm9sbFdpZHRoLCBodG1sLmNsaWVudFdpZHRoLCBib2R5ID8gYm9keS5zY3JvbGxXaWR0aCA6IDAsIGJvZHkgPyBib2R5LmNsaWVudFdpZHRoIDogMCk7XG4gIHZhciBoZWlnaHQgPSBtYXgoaHRtbC5zY3JvbGxIZWlnaHQsIGh0bWwuY2xpZW50SGVpZ2h0LCBib2R5ID8gYm9keS5zY3JvbGxIZWlnaHQgOiAwLCBib2R5ID8gYm9keS5jbGllbnRIZWlnaHQgOiAwKTtcbiAgdmFyIHggPSAtd2luU2Nyb2xsLnNjcm9sbExlZnQgKyBnZXRXaW5kb3dTY3JvbGxCYXJYKGVsZW1lbnQpO1xuICB2YXIgeSA9IC13aW5TY3JvbGwuc2Nyb2xsVG9wO1xuXG4gIGlmIChnZXRDb21wdXRlZFN0eWxlKGJvZHkgfHwgaHRtbCkuZGlyZWN0aW9uID09PSAncnRsJykge1xuICAgIHggKz0gbWF4KGh0bWwuY2xpZW50V2lkdGgsIGJvZHkgPyBib2R5LmNsaWVudFdpZHRoIDogMCkgLSB3aWR0aDtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgd2lkdGg6IHdpZHRoLFxuICAgIGhlaWdodDogaGVpZ2h0LFxuICAgIHg6IHgsXG4gICAgeTogeVxuICB9O1xufSIsImltcG9ydCBnZXRDb21wdXRlZFN0eWxlIGZyb20gXCIuL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGlzU2Nyb2xsUGFyZW50KGVsZW1lbnQpIHtcbiAgLy8gRmlyZWZveCB3YW50cyB1cyB0byBjaGVjayBgLXhgIGFuZCBgLXlgIHZhcmlhdGlvbnMgYXMgd2VsbFxuICB2YXIgX2dldENvbXB1dGVkU3R5bGUgPSBnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLFxuICAgICAgb3ZlcmZsb3cgPSBfZ2V0Q29tcHV0ZWRTdHlsZS5vdmVyZmxvdyxcbiAgICAgIG92ZXJmbG93WCA9IF9nZXRDb21wdXRlZFN0eWxlLm92ZXJmbG93WCxcbiAgICAgIG92ZXJmbG93WSA9IF9nZXRDb21wdXRlZFN0eWxlLm92ZXJmbG93WTtcblxuICByZXR1cm4gL2F1dG98c2Nyb2xsfG92ZXJsYXl8aGlkZGVuLy50ZXN0KG92ZXJmbG93ICsgb3ZlcmZsb3dZICsgb3ZlcmZsb3dYKTtcbn0iLCJpbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgaXNTY3JvbGxQYXJlbnQgZnJvbSBcIi4vaXNTY3JvbGxQYXJlbnQuanNcIjtcbmltcG9ydCBnZXROb2RlTmFtZSBmcm9tIFwiLi9nZXROb2RlTmFtZS5qc1wiO1xuaW1wb3J0IHsgaXNIVE1MRWxlbWVudCB9IGZyb20gXCIuL2luc3RhbmNlT2YuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFNjcm9sbFBhcmVudChub2RlKSB7XG4gIGlmIChbJ2h0bWwnLCAnYm9keScsICcjZG9jdW1lbnQnXS5pbmRleE9mKGdldE5vZGVOYW1lKG5vZGUpKSA+PSAwKSB7XG4gICAgLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogYXNzdW1lIGJvZHkgaXMgYWx3YXlzIGF2YWlsYWJsZVxuICAgIHJldHVybiBub2RlLm93bmVyRG9jdW1lbnQuYm9keTtcbiAgfVxuXG4gIGlmIChpc0hUTUxFbGVtZW50KG5vZGUpICYmIGlzU2Nyb2xsUGFyZW50KG5vZGUpKSB7XG4gICAgcmV0dXJuIG5vZGU7XG4gIH1cblxuICByZXR1cm4gZ2V0U2Nyb2xsUGFyZW50KGdldFBhcmVudE5vZGUobm9kZSkpO1xufSIsImltcG9ydCBnZXRTY3JvbGxQYXJlbnQgZnJvbSBcIi4vZ2V0U2Nyb2xsUGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0UGFyZW50Tm9kZSBmcm9tIFwiLi9nZXRQYXJlbnROb2RlLmpzXCI7XG5pbXBvcnQgZ2V0V2luZG93IGZyb20gXCIuL2dldFdpbmRvdy5qc1wiO1xuaW1wb3J0IGlzU2Nyb2xsUGFyZW50IGZyb20gXCIuL2lzU2Nyb2xsUGFyZW50LmpzXCI7XG4vKlxuZ2l2ZW4gYSBET00gZWxlbWVudCwgcmV0dXJuIHRoZSBsaXN0IG9mIGFsbCBzY3JvbGwgcGFyZW50cywgdXAgdGhlIGxpc3Qgb2YgYW5jZXNvcnNcbnVudGlsIHdlIGdldCB0byB0aGUgdG9wIHdpbmRvdyBvYmplY3QuIFRoaXMgbGlzdCBpcyB3aGF0IHdlIGF0dGFjaCBzY3JvbGwgbGlzdGVuZXJzXG50bywgYmVjYXVzZSBpZiBhbnkgb2YgdGhlc2UgcGFyZW50IGVsZW1lbnRzIHNjcm9sbCwgd2UnbGwgbmVlZCB0byByZS1jYWxjdWxhdGUgdGhlXG5yZWZlcmVuY2UgZWxlbWVudCdzIHBvc2l0aW9uLlxuKi9cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGlzdFNjcm9sbFBhcmVudHMoZWxlbWVudCwgbGlzdCkge1xuICB2YXIgX2VsZW1lbnQkb3duZXJEb2N1bWVuO1xuXG4gIGlmIChsaXN0ID09PSB2b2lkIDApIHtcbiAgICBsaXN0ID0gW107XG4gIH1cblxuICB2YXIgc2Nyb2xsUGFyZW50ID0gZ2V0U2Nyb2xsUGFyZW50KGVsZW1lbnQpO1xuICB2YXIgaXNCb2R5ID0gc2Nyb2xsUGFyZW50ID09PSAoKF9lbGVtZW50JG93bmVyRG9jdW1lbiA9IGVsZW1lbnQub3duZXJEb2N1bWVudCkgPT0gbnVsbCA/IHZvaWQgMCA6IF9lbGVtZW50JG93bmVyRG9jdW1lbi5ib2R5KTtcbiAgdmFyIHdpbiA9IGdldFdpbmRvdyhzY3JvbGxQYXJlbnQpO1xuICB2YXIgdGFyZ2V0ID0gaXNCb2R5ID8gW3dpbl0uY29uY2F0KHdpbi52aXN1YWxWaWV3cG9ydCB8fCBbXSwgaXNTY3JvbGxQYXJlbnQoc2Nyb2xsUGFyZW50KSA/IHNjcm9sbFBhcmVudCA6IFtdKSA6IHNjcm9sbFBhcmVudDtcbiAgdmFyIHVwZGF0ZWRMaXN0ID0gbGlzdC5jb25jYXQodGFyZ2V0KTtcbiAgcmV0dXJuIGlzQm9keSA/IHVwZGF0ZWRMaXN0IDogLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtY2FsbF06IGlzQm9keSB0ZWxscyB1cyB0YXJnZXQgd2lsbCBiZSBhbiBIVE1MRWxlbWVudCBoZXJlXG4gIHVwZGF0ZWRMaXN0LmNvbmNhdChsaXN0U2Nyb2xsUGFyZW50cyhnZXRQYXJlbnROb2RlKHRhcmdldCkpKTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZWN0VG9DbGllbnRSZWN0KHJlY3QpIHtcbiAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIHJlY3QsIHtcbiAgICBsZWZ0OiByZWN0LngsXG4gICAgdG9wOiByZWN0LnksXG4gICAgcmlnaHQ6IHJlY3QueCArIHJlY3Qud2lkdGgsXG4gICAgYm90dG9tOiByZWN0LnkgKyByZWN0LmhlaWdodFxuICB9KTtcbn0iLCJpbXBvcnQgeyB2aWV3cG9ydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldFZpZXdwb3J0UmVjdCBmcm9tIFwiLi9nZXRWaWV3cG9ydFJlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudFJlY3QgZnJvbSBcIi4vZ2V0RG9jdW1lbnRSZWN0LmpzXCI7XG5pbXBvcnQgbGlzdFNjcm9sbFBhcmVudHMgZnJvbSBcIi4vbGlzdFNjcm9sbFBhcmVudHMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4vZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZ2V0RG9jdW1lbnRFbGVtZW50IGZyb20gXCIuL2dldERvY3VtZW50RWxlbWVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZ2V0Q29tcHV0ZWRTdHlsZS5qc1wiO1xuaW1wb3J0IHsgaXNFbGVtZW50LCBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldEJvdW5kaW5nQ2xpZW50UmVjdCBmcm9tIFwiLi9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBnZXRQYXJlbnROb2RlIGZyb20gXCIuL2dldFBhcmVudE5vZGUuanNcIjtcbmltcG9ydCBjb250YWlucyBmcm9tIFwiLi9jb250YWlucy5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgcmVjdFRvQ2xpZW50UmVjdCBmcm9tIFwiLi4vdXRpbHMvcmVjdFRvQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IHsgbWF4LCBtaW4gfSBmcm9tIFwiLi4vdXRpbHMvbWF0aC5qc1wiO1xuXG5mdW5jdGlvbiBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChlbGVtZW50KSB7XG4gIHZhciByZWN0ID0gZ2V0Qm91bmRpbmdDbGllbnRSZWN0KGVsZW1lbnQpO1xuICByZWN0LnRvcCA9IHJlY3QudG9wICsgZWxlbWVudC5jbGllbnRUb3A7XG4gIHJlY3QubGVmdCA9IHJlY3QubGVmdCArIGVsZW1lbnQuY2xpZW50TGVmdDtcbiAgcmVjdC5ib3R0b20gPSByZWN0LnRvcCArIGVsZW1lbnQuY2xpZW50SGVpZ2h0O1xuICByZWN0LnJpZ2h0ID0gcmVjdC5sZWZ0ICsgZWxlbWVudC5jbGllbnRXaWR0aDtcbiAgcmVjdC53aWR0aCA9IGVsZW1lbnQuY2xpZW50V2lkdGg7XG4gIHJlY3QuaGVpZ2h0ID0gZWxlbWVudC5jbGllbnRIZWlnaHQ7XG4gIHJlY3QueCA9IHJlY3QubGVmdDtcbiAgcmVjdC55ID0gcmVjdC50b3A7XG4gIHJldHVybiByZWN0O1xufVxuXG5mdW5jdGlvbiBnZXRDbGllbnRSZWN0RnJvbU1peGVkVHlwZShlbGVtZW50LCBjbGlwcGluZ1BhcmVudCkge1xuICByZXR1cm4gY2xpcHBpbmdQYXJlbnQgPT09IHZpZXdwb3J0ID8gcmVjdFRvQ2xpZW50UmVjdChnZXRWaWV3cG9ydFJlY3QoZWxlbWVudCkpIDogaXNIVE1MRWxlbWVudChjbGlwcGluZ1BhcmVudCkgPyBnZXRJbm5lckJvdW5kaW5nQ2xpZW50UmVjdChjbGlwcGluZ1BhcmVudCkgOiByZWN0VG9DbGllbnRSZWN0KGdldERvY3VtZW50UmVjdChnZXREb2N1bWVudEVsZW1lbnQoZWxlbWVudCkpKTtcbn0gLy8gQSBcImNsaXBwaW5nIHBhcmVudFwiIGlzIGFuIG92ZXJmbG93YWJsZSBjb250YWluZXIgd2l0aCB0aGUgY2hhcmFjdGVyaXN0aWMgb2Zcbi8vIGNsaXBwaW5nIChvciBoaWRpbmcpIG92ZXJmbG93aW5nIGVsZW1lbnRzIHdpdGggYSBwb3NpdGlvbiBkaWZmZXJlbnQgZnJvbVxuLy8gYGluaXRpYWxgXG5cblxuZnVuY3Rpb24gZ2V0Q2xpcHBpbmdQYXJlbnRzKGVsZW1lbnQpIHtcbiAgdmFyIGNsaXBwaW5nUGFyZW50cyA9IGxpc3RTY3JvbGxQYXJlbnRzKGdldFBhcmVudE5vZGUoZWxlbWVudCkpO1xuICB2YXIgY2FuRXNjYXBlQ2xpcHBpbmcgPSBbJ2Fic29sdXRlJywgJ2ZpeGVkJ10uaW5kZXhPZihnZXRDb21wdXRlZFN0eWxlKGVsZW1lbnQpLnBvc2l0aW9uKSA+PSAwO1xuICB2YXIgY2xpcHBlckVsZW1lbnQgPSBjYW5Fc2NhcGVDbGlwcGluZyAmJiBpc0hUTUxFbGVtZW50KGVsZW1lbnQpID8gZ2V0T2Zmc2V0UGFyZW50KGVsZW1lbnQpIDogZWxlbWVudDtcblxuICBpZiAoIWlzRWxlbWVudChjbGlwcGVyRWxlbWVudCkpIHtcbiAgICByZXR1cm4gW107XG4gIH0gLy8gJEZsb3dGaXhNZVtpbmNvbXBhdGlibGUtcmV0dXJuXTogaHR0cHM6Ly9naXRodWIuY29tL2ZhY2Vib29rL2Zsb3cvaXNzdWVzLzE0MTRcblxuXG4gIHJldHVybiBjbGlwcGluZ1BhcmVudHMuZmlsdGVyKGZ1bmN0aW9uIChjbGlwcGluZ1BhcmVudCkge1xuICAgIHJldHVybiBpc0VsZW1lbnQoY2xpcHBpbmdQYXJlbnQpICYmIGNvbnRhaW5zKGNsaXBwaW5nUGFyZW50LCBjbGlwcGVyRWxlbWVudCkgJiYgZ2V0Tm9kZU5hbWUoY2xpcHBpbmdQYXJlbnQpICE9PSAnYm9keSc7XG4gIH0pO1xufSAvLyBHZXRzIHRoZSBtYXhpbXVtIGFyZWEgdGhhdCB0aGUgZWxlbWVudCBpcyB2aXNpYmxlIGluIGR1ZSB0byBhbnkgbnVtYmVyIG9mXG4vLyBjbGlwcGluZyBwYXJlbnRzXG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0Q2xpcHBpbmdSZWN0KGVsZW1lbnQsIGJvdW5kYXJ5LCByb290Qm91bmRhcnkpIHtcbiAgdmFyIG1haW5DbGlwcGluZ1BhcmVudHMgPSBib3VuZGFyeSA9PT0gJ2NsaXBwaW5nUGFyZW50cycgPyBnZXRDbGlwcGluZ1BhcmVudHMoZWxlbWVudCkgOiBbXS5jb25jYXQoYm91bmRhcnkpO1xuICB2YXIgY2xpcHBpbmdQYXJlbnRzID0gW10uY29uY2F0KG1haW5DbGlwcGluZ1BhcmVudHMsIFtyb290Qm91bmRhcnldKTtcbiAgdmFyIGZpcnN0Q2xpcHBpbmdQYXJlbnQgPSBjbGlwcGluZ1BhcmVudHNbMF07XG4gIHZhciBjbGlwcGluZ1JlY3QgPSBjbGlwcGluZ1BhcmVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2NSZWN0LCBjbGlwcGluZ1BhcmVudCkge1xuICAgIHZhciByZWN0ID0gZ2V0Q2xpZW50UmVjdEZyb21NaXhlZFR5cGUoZWxlbWVudCwgY2xpcHBpbmdQYXJlbnQpO1xuICAgIGFjY1JlY3QudG9wID0gbWF4KHJlY3QudG9wLCBhY2NSZWN0LnRvcCk7XG4gICAgYWNjUmVjdC5yaWdodCA9IG1pbihyZWN0LnJpZ2h0LCBhY2NSZWN0LnJpZ2h0KTtcbiAgICBhY2NSZWN0LmJvdHRvbSA9IG1pbihyZWN0LmJvdHRvbSwgYWNjUmVjdC5ib3R0b20pO1xuICAgIGFjY1JlY3QubGVmdCA9IG1heChyZWN0LmxlZnQsIGFjY1JlY3QubGVmdCk7XG4gICAgcmV0dXJuIGFjY1JlY3Q7XG4gIH0sIGdldENsaWVudFJlY3RGcm9tTWl4ZWRUeXBlKGVsZW1lbnQsIGZpcnN0Q2xpcHBpbmdQYXJlbnQpKTtcbiAgY2xpcHBpbmdSZWN0LndpZHRoID0gY2xpcHBpbmdSZWN0LnJpZ2h0IC0gY2xpcHBpbmdSZWN0LmxlZnQ7XG4gIGNsaXBwaW5nUmVjdC5oZWlnaHQgPSBjbGlwcGluZ1JlY3QuYm90dG9tIC0gY2xpcHBpbmdSZWN0LnRvcDtcbiAgY2xpcHBpbmdSZWN0LnggPSBjbGlwcGluZ1JlY3QubGVmdDtcbiAgY2xpcHBpbmdSZWN0LnkgPSBjbGlwcGluZ1JlY3QudG9wO1xuICByZXR1cm4gY2xpcHBpbmdSZWN0O1xufSIsImltcG9ydCBnZXRCYXNlUGxhY2VtZW50IGZyb20gXCIuL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRWYXJpYXRpb24gZnJvbSBcIi4vZ2V0VmFyaWF0aW9uLmpzXCI7XG5pbXBvcnQgZ2V0TWFpbkF4aXNGcm9tUGxhY2VtZW50IGZyb20gXCIuL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0LCBzdGFydCwgZW5kIH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wdXRlT2Zmc2V0cyhfcmVmKSB7XG4gIHZhciByZWZlcmVuY2UgPSBfcmVmLnJlZmVyZW5jZSxcbiAgICAgIGVsZW1lbnQgPSBfcmVmLmVsZW1lbnQsXG4gICAgICBwbGFjZW1lbnQgPSBfcmVmLnBsYWNlbWVudDtcbiAgdmFyIGJhc2VQbGFjZW1lbnQgPSBwbGFjZW1lbnQgPyBnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgOiBudWxsO1xuICB2YXIgdmFyaWF0aW9uID0gcGxhY2VtZW50ID8gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgOiBudWxsO1xuICB2YXIgY29tbW9uWCA9IHJlZmVyZW5jZS54ICsgcmVmZXJlbmNlLndpZHRoIC8gMiAtIGVsZW1lbnQud2lkdGggLyAyO1xuICB2YXIgY29tbW9uWSA9IHJlZmVyZW5jZS55ICsgcmVmZXJlbmNlLmhlaWdodCAvIDIgLSBlbGVtZW50LmhlaWdodCAvIDI7XG4gIHZhciBvZmZzZXRzO1xuXG4gIHN3aXRjaCAoYmFzZVBsYWNlbWVudCkge1xuICAgIGNhc2UgdG9wOlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogY29tbW9uWCxcbiAgICAgICAgeTogcmVmZXJlbmNlLnkgLSBlbGVtZW50LmhlaWdodFxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBib3R0b206XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiBjb21tb25YLFxuICAgICAgICB5OiByZWZlcmVuY2UueSArIHJlZmVyZW5jZS5oZWlnaHRcbiAgICAgIH07XG4gICAgICBicmVhaztcblxuICAgIGNhc2UgcmlnaHQ6XG4gICAgICBvZmZzZXRzID0ge1xuICAgICAgICB4OiByZWZlcmVuY2UueCArIHJlZmVyZW5jZS53aWR0aCxcbiAgICAgICAgeTogY29tbW9uWVxuICAgICAgfTtcbiAgICAgIGJyZWFrO1xuXG4gICAgY2FzZSBsZWZ0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLnggLSBlbGVtZW50LndpZHRoLFxuICAgICAgICB5OiBjb21tb25ZXG4gICAgICB9O1xuICAgICAgYnJlYWs7XG5cbiAgICBkZWZhdWx0OlxuICAgICAgb2Zmc2V0cyA9IHtcbiAgICAgICAgeDogcmVmZXJlbmNlLngsXG4gICAgICAgIHk6IHJlZmVyZW5jZS55XG4gICAgICB9O1xuICB9XG5cbiAgdmFyIG1haW5BeGlzID0gYmFzZVBsYWNlbWVudCA/IGdldE1haW5BeGlzRnJvbVBsYWNlbWVudChiYXNlUGxhY2VtZW50KSA6IG51bGw7XG5cbiAgaWYgKG1haW5BeGlzICE9IG51bGwpIHtcbiAgICB2YXIgbGVuID0gbWFpbkF4aXMgPT09ICd5JyA/ICdoZWlnaHQnIDogJ3dpZHRoJztcblxuICAgIHN3aXRjaCAodmFyaWF0aW9uKSB7XG4gICAgICBjYXNlIHN0YXJ0OlxuICAgICAgICBvZmZzZXRzW21haW5BeGlzXSA9IG9mZnNldHNbbWFpbkF4aXNdIC0gKHJlZmVyZW5jZVtsZW5dIC8gMiAtIGVsZW1lbnRbbGVuXSAvIDIpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSBlbmQ6XG4gICAgICAgIG9mZnNldHNbbWFpbkF4aXNdID0gb2Zmc2V0c1ttYWluQXhpc10gKyAocmVmZXJlbmNlW2xlbl0gLyAyIC0gZWxlbWVudFtsZW5dIC8gMik7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBvZmZzZXRzO1xufSIsImltcG9ydCBnZXRDbGlwcGluZ1JlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRDbGlwcGluZ1JlY3QuanNcIjtcbmltcG9ydCBnZXREb2N1bWVudEVsZW1lbnQgZnJvbSBcIi4uL2RvbS11dGlscy9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBnZXRCb3VuZGluZ0NsaWVudFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRCb3VuZGluZ0NsaWVudFJlY3QuanNcIjtcbmltcG9ydCBjb21wdXRlT2Zmc2V0cyBmcm9tIFwiLi9jb21wdXRlT2Zmc2V0cy5qc1wiO1xuaW1wb3J0IHJlY3RUb0NsaWVudFJlY3QgZnJvbSBcIi4vcmVjdFRvQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IHsgY2xpcHBpbmdQYXJlbnRzLCByZWZlcmVuY2UsIHBvcHBlciwgYm90dG9tLCB0b3AsIHJpZ2h0LCBiYXNlUGxhY2VtZW50cywgdmlld3BvcnQgfSBmcm9tIFwiLi4vZW51bXMuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuLi9kb20tdXRpbHMvaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IG1lcmdlUGFkZGluZ09iamVjdCBmcm9tIFwiLi9tZXJnZVBhZGRpbmdPYmplY3QuanNcIjtcbmltcG9ydCBleHBhbmRUb0hhc2hNYXAgZnJvbSBcIi4vZXhwYW5kVG9IYXNoTWFwLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIG9wdGlvbnMpIHtcbiAgaWYgKG9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIG9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfb3B0aW9ucyA9IG9wdGlvbnMsXG4gICAgICBfb3B0aW9ucyRwbGFjZW1lbnQgPSBfb3B0aW9ucy5wbGFjZW1lbnQsXG4gICAgICBwbGFjZW1lbnQgPSBfb3B0aW9ucyRwbGFjZW1lbnQgPT09IHZvaWQgMCA/IHN0YXRlLnBsYWNlbWVudCA6IF9vcHRpb25zJHBsYWNlbWVudCxcbiAgICAgIF9vcHRpb25zJGJvdW5kYXJ5ID0gX29wdGlvbnMuYm91bmRhcnksXG4gICAgICBib3VuZGFyeSA9IF9vcHRpb25zJGJvdW5kYXJ5ID09PSB2b2lkIDAgPyBjbGlwcGluZ1BhcmVudHMgOiBfb3B0aW9ucyRib3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJHJvb3RCb3VuZGFyeSA9IF9vcHRpb25zLnJvb3RCb3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeSA9IF9vcHRpb25zJHJvb3RCb3VuZGFyeSA9PT0gdm9pZCAwID8gdmlld3BvcnQgOiBfb3B0aW9ucyRyb290Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRlbGVtZW50Q29udGUgPSBfb3B0aW9ucy5lbGVtZW50Q29udGV4dCxcbiAgICAgIGVsZW1lbnRDb250ZXh0ID0gX29wdGlvbnMkZWxlbWVudENvbnRlID09PSB2b2lkIDAgPyBwb3BwZXIgOiBfb3B0aW9ucyRlbGVtZW50Q29udGUsXG4gICAgICBfb3B0aW9ucyRhbHRCb3VuZGFyeSA9IF9vcHRpb25zLmFsdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnkgPSBfb3B0aW9ucyRhbHRCb3VuZGFyeSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfb3B0aW9ucyRhbHRCb3VuZGFyeSxcbiAgICAgIF9vcHRpb25zJHBhZGRpbmcgPSBfb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgcGFkZGluZyA9IF9vcHRpb25zJHBhZGRpbmcgPT09IHZvaWQgMCA/IDAgOiBfb3B0aW9ucyRwYWRkaW5nO1xuICB2YXIgcGFkZGluZ09iamVjdCA9IG1lcmdlUGFkZGluZ09iamVjdCh0eXBlb2YgcGFkZGluZyAhPT0gJ251bWJlcicgPyBwYWRkaW5nIDogZXhwYW5kVG9IYXNoTWFwKHBhZGRpbmcsIGJhc2VQbGFjZW1lbnRzKSk7XG4gIHZhciBhbHRDb250ZXh0ID0gZWxlbWVudENvbnRleHQgPT09IHBvcHBlciA/IHJlZmVyZW5jZSA6IHBvcHBlcjtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBlbGVtZW50ID0gc3RhdGUuZWxlbWVudHNbYWx0Qm91bmRhcnkgPyBhbHRDb250ZXh0IDogZWxlbWVudENvbnRleHRdO1xuICB2YXIgY2xpcHBpbmdDbGllbnRSZWN0ID0gZ2V0Q2xpcHBpbmdSZWN0KGlzRWxlbWVudChlbGVtZW50KSA/IGVsZW1lbnQgOiBlbGVtZW50LmNvbnRleHRFbGVtZW50IHx8IGdldERvY3VtZW50RWxlbWVudChzdGF0ZS5lbGVtZW50cy5wb3BwZXIpLCBib3VuZGFyeSwgcm9vdEJvdW5kYXJ5KTtcbiAgdmFyIHJlZmVyZW5jZUNsaWVudFJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3Qoc3RhdGUuZWxlbWVudHMucmVmZXJlbmNlKTtcbiAgdmFyIHBvcHBlck9mZnNldHMgPSBjb21wdXRlT2Zmc2V0cyh7XG4gICAgcmVmZXJlbmNlOiByZWZlcmVuY2VDbGllbnRSZWN0LFxuICAgIGVsZW1lbnQ6IHBvcHBlclJlY3QsXG4gICAgc3RyYXRlZ3k6ICdhYnNvbHV0ZScsXG4gICAgcGxhY2VtZW50OiBwbGFjZW1lbnRcbiAgfSk7XG4gIHZhciBwb3BwZXJDbGllbnRSZWN0ID0gcmVjdFRvQ2xpZW50UmVjdChPYmplY3QuYXNzaWduKHt9LCBwb3BwZXJSZWN0LCBwb3BwZXJPZmZzZXRzKSk7XG4gIHZhciBlbGVtZW50Q2xpZW50UmVjdCA9IGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgPyBwb3BwZXJDbGllbnRSZWN0IDogcmVmZXJlbmNlQ2xpZW50UmVjdDsgLy8gcG9zaXRpdmUgPSBvdmVyZmxvd2luZyB0aGUgY2xpcHBpbmcgcmVjdFxuICAvLyAwIG9yIG5lZ2F0aXZlID0gd2l0aGluIHRoZSBjbGlwcGluZyByZWN0XG5cbiAgdmFyIG92ZXJmbG93T2Zmc2V0cyA9IHtcbiAgICB0b3A6IGNsaXBwaW5nQ2xpZW50UmVjdC50b3AgLSBlbGVtZW50Q2xpZW50UmVjdC50b3AgKyBwYWRkaW5nT2JqZWN0LnRvcCxcbiAgICBib3R0b206IGVsZW1lbnRDbGllbnRSZWN0LmJvdHRvbSAtIGNsaXBwaW5nQ2xpZW50UmVjdC5ib3R0b20gKyBwYWRkaW5nT2JqZWN0LmJvdHRvbSxcbiAgICBsZWZ0OiBjbGlwcGluZ0NsaWVudFJlY3QubGVmdCAtIGVsZW1lbnRDbGllbnRSZWN0LmxlZnQgKyBwYWRkaW5nT2JqZWN0LmxlZnQsXG4gICAgcmlnaHQ6IGVsZW1lbnRDbGllbnRSZWN0LnJpZ2h0IC0gY2xpcHBpbmdDbGllbnRSZWN0LnJpZ2h0ICsgcGFkZGluZ09iamVjdC5yaWdodFxuICB9O1xuICB2YXIgb2Zmc2V0RGF0YSA9IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0OyAvLyBPZmZzZXRzIGNhbiBiZSBhcHBsaWVkIG9ubHkgdG8gdGhlIHBvcHBlciBlbGVtZW50XG5cbiAgaWYgKGVsZW1lbnRDb250ZXh0ID09PSBwb3BwZXIgJiYgb2Zmc2V0RGF0YSkge1xuICAgIHZhciBvZmZzZXQgPSBvZmZzZXREYXRhW3BsYWNlbWVudF07XG4gICAgT2JqZWN0LmtleXMob3ZlcmZsb3dPZmZzZXRzKS5mb3JFYWNoKGZ1bmN0aW9uIChrZXkpIHtcbiAgICAgIHZhciBtdWx0aXBseSA9IFtyaWdodCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/IDEgOiAtMTtcbiAgICAgIHZhciBheGlzID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKGtleSkgPj0gMCA/ICd5JyA6ICd4JztcbiAgICAgIG92ZXJmbG93T2Zmc2V0c1trZXldICs9IG9mZnNldFtheGlzXSAqIG11bHRpcGx5O1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIG92ZXJmbG93T2Zmc2V0cztcbn0iLCJpbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuL2dldFZhcmlhdGlvbi5qc1wiO1xuaW1wb3J0IHsgdmFyaWF0aW9uUGxhY2VtZW50cywgYmFzZVBsYWNlbWVudHMsIHBsYWNlbWVudHMgYXMgYWxsUGxhY2VtZW50cyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi9nZXRCYXNlUGxhY2VtZW50LmpzXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjb21wdXRlQXV0b1BsYWNlbWVudChzdGF0ZSwgb3B0aW9ucykge1xuICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgb3B0aW9ucyA9IHt9O1xuICB9XG5cbiAgdmFyIF9vcHRpb25zID0gb3B0aW9ucyxcbiAgICAgIHBsYWNlbWVudCA9IF9vcHRpb25zLnBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5ID0gX29wdGlvbnMuYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnkgPSBfb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBwYWRkaW5nID0gX29wdGlvbnMucGFkZGluZyxcbiAgICAgIGZsaXBWYXJpYXRpb25zID0gX29wdGlvbnMuZmxpcFZhcmlhdGlvbnMsXG4gICAgICBfb3B0aW9ucyRhbGxvd2VkQXV0b1AgPSBfb3B0aW9ucy5hbGxvd2VkQXV0b1BsYWNlbWVudHMsXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHMgPSBfb3B0aW9ucyRhbGxvd2VkQXV0b1AgPT09IHZvaWQgMCA/IGFsbFBsYWNlbWVudHMgOiBfb3B0aW9ucyRhbGxvd2VkQXV0b1A7XG4gIHZhciB2YXJpYXRpb24gPSBnZXRWYXJpYXRpb24ocGxhY2VtZW50KTtcbiAgdmFyIHBsYWNlbWVudHMgPSB2YXJpYXRpb24gPyBmbGlwVmFyaWF0aW9ucyA/IHZhcmlhdGlvblBsYWNlbWVudHMgOiB2YXJpYXRpb25QbGFjZW1lbnRzLmZpbHRlcihmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgcmV0dXJuIGdldFZhcmlhdGlvbihwbGFjZW1lbnQpID09PSB2YXJpYXRpb247XG4gIH0pIDogYmFzZVBsYWNlbWVudHM7XG4gIHZhciBhbGxvd2VkUGxhY2VtZW50cyA9IHBsYWNlbWVudHMuZmlsdGVyKGZ1bmN0aW9uIChwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gYWxsb3dlZEF1dG9QbGFjZW1lbnRzLmluZGV4T2YocGxhY2VtZW50KSA+PSAwO1xuICB9KTtcblxuICBpZiAoYWxsb3dlZFBsYWNlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgYWxsb3dlZFBsYWNlbWVudHMgPSBwbGFjZW1lbnRzO1xuXG4gICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgY29uc29sZS5lcnJvcihbJ1BvcHBlcjogVGhlIGBhbGxvd2VkQXV0b1BsYWNlbWVudHNgIG9wdGlvbiBkaWQgbm90IGFsbG93IGFueScsICdwbGFjZW1lbnRzLiBFbnN1cmUgdGhlIGBwbGFjZW1lbnRgIG9wdGlvbiBtYXRjaGVzIHRoZSB2YXJpYXRpb24nLCAnb2YgdGhlIGFsbG93ZWQgcGxhY2VtZW50cy4nLCAnRm9yIGV4YW1wbGUsIFwiYXV0b1wiIGNhbm5vdCBiZSB1c2VkIHRvIGFsbG93IFwiYm90dG9tLXN0YXJ0XCIuJywgJ1VzZSBcImF1dG8tc3RhcnRcIiBpbnN0ZWFkLiddLmpvaW4oJyAnKSk7XG4gICAgfVxuICB9IC8vICRGbG93Rml4TWVbaW5jb21wYXRpYmxlLXR5cGVdOiBGbG93IHNlZW1zIHRvIGhhdmUgcHJvYmxlbXMgd2l0aCB0d28gYXJyYXkgdW5pb25zLi4uXG5cblxuICB2YXIgb3ZlcmZsb3dzID0gYWxsb3dlZFBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIGFjY1twbGFjZW1lbnRdID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICAgIHBsYWNlbWVudDogcGxhY2VtZW50LFxuICAgICAgYm91bmRhcnk6IGJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgICBwYWRkaW5nOiBwYWRkaW5nXG4gICAgfSlbZ2V0QmFzZVBsYWNlbWVudChwbGFjZW1lbnQpXTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHJldHVybiBPYmplY3Qua2V5cyhvdmVyZmxvd3MpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcbiAgICByZXR1cm4gb3ZlcmZsb3dzW2FdIC0gb3ZlcmZsb3dzW2JdO1xuICB9KTtcbn0iLCJpbXBvcnQgZ2V0T3Bwb3NpdGVQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE9wcG9zaXRlUGxhY2VtZW50LmpzXCI7XG5pbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9nZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGRldGVjdE92ZXJmbG93IGZyb20gXCIuLi91dGlscy9kZXRlY3RPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGNvbXB1dGVBdXRvUGxhY2VtZW50IGZyb20gXCIuLi91dGlscy9jb21wdXRlQXV0b1BsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgYm90dG9tLCB0b3AsIHN0YXJ0LCByaWdodCwgbGVmdCwgYXV0byB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldFZhcmlhdGlvbiBmcm9tIFwiLi4vdXRpbHMvZ2V0VmFyaWF0aW9uLmpzXCI7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZnVuY3Rpb24gZ2V0RXhwYW5kZWRGYWxsYmFja1BsYWNlbWVudHMocGxhY2VtZW50KSB7XG4gIGlmIChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8pIHtcbiAgICByZXR1cm4gW107XG4gIH1cblxuICB2YXIgb3Bwb3NpdGVQbGFjZW1lbnQgPSBnZXRPcHBvc2l0ZVBsYWNlbWVudChwbGFjZW1lbnQpO1xuICByZXR1cm4gW2dldE9wcG9zaXRlVmFyaWF0aW9uUGxhY2VtZW50KHBsYWNlbWVudCksIG9wcG9zaXRlUGxhY2VtZW50LCBnZXRPcHBvc2l0ZVZhcmlhdGlvblBsYWNlbWVudChvcHBvc2l0ZVBsYWNlbWVudCldO1xufVxuXG5mdW5jdGlvbiBmbGlwKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuXG4gIGlmIChzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdLl9za2lwKSB7XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgdmFyIF9vcHRpb25zJG1haW5BeGlzID0gb3B0aW9ucy5tYWluQXhpcyxcbiAgICAgIGNoZWNrTWFpbkF4aXMgPSBfb3B0aW9ucyRtYWluQXhpcyA9PT0gdm9pZCAwID8gdHJ1ZSA6IF9vcHRpb25zJG1haW5BeGlzLFxuICAgICAgX29wdGlvbnMkYWx0QXhpcyA9IG9wdGlvbnMuYWx0QXhpcyxcbiAgICAgIGNoZWNrQWx0QXhpcyA9IF9vcHRpb25zJGFsdEF4aXMgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRhbHRBeGlzLFxuICAgICAgc3BlY2lmaWVkRmFsbGJhY2tQbGFjZW1lbnRzID0gb3B0aW9ucy5mYWxsYmFja1BsYWNlbWVudHMsXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgYm91bmRhcnkgPSBvcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IG9wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPSBvcHRpb25zLmZsaXBWYXJpYXRpb25zLFxuICAgICAgZmxpcFZhcmlhdGlvbnMgPSBfb3B0aW9ucyRmbGlwVmFyaWF0aW8gPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyRmbGlwVmFyaWF0aW8sXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHMgPSBvcHRpb25zLmFsbG93ZWRBdXRvUGxhY2VtZW50cztcbiAgdmFyIHByZWZlcnJlZFBsYWNlbWVudCA9IHN0YXRlLm9wdGlvbnMucGxhY2VtZW50O1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocHJlZmVycmVkUGxhY2VtZW50KTtcbiAgdmFyIGlzQmFzZVBsYWNlbWVudCA9IGJhc2VQbGFjZW1lbnQgPT09IHByZWZlcnJlZFBsYWNlbWVudDtcbiAgdmFyIGZhbGxiYWNrUGxhY2VtZW50cyA9IHNwZWNpZmllZEZhbGxiYWNrUGxhY2VtZW50cyB8fCAoaXNCYXNlUGxhY2VtZW50IHx8ICFmbGlwVmFyaWF0aW9ucyA/IFtnZXRPcHBvc2l0ZVBsYWNlbWVudChwcmVmZXJyZWRQbGFjZW1lbnQpXSA6IGdldEV4cGFuZGVkRmFsbGJhY2tQbGFjZW1lbnRzKHByZWZlcnJlZFBsYWNlbWVudCkpO1xuICB2YXIgcGxhY2VtZW50cyA9IFtwcmVmZXJyZWRQbGFjZW1lbnRdLmNvbmNhdChmYWxsYmFja1BsYWNlbWVudHMpLnJlZHVjZShmdW5jdGlvbiAoYWNjLCBwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gYWNjLmNvbmNhdChnZXRCYXNlUGxhY2VtZW50KHBsYWNlbWVudCkgPT09IGF1dG8gPyBjb21wdXRlQXV0b1BsYWNlbWVudChzdGF0ZSwge1xuICAgICAgcGxhY2VtZW50OiBwbGFjZW1lbnQsXG4gICAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgICByb290Qm91bmRhcnk6IHJvb3RCb3VuZGFyeSxcbiAgICAgIHBhZGRpbmc6IHBhZGRpbmcsXG4gICAgICBmbGlwVmFyaWF0aW9uczogZmxpcFZhcmlhdGlvbnMsXG4gICAgICBhbGxvd2VkQXV0b1BsYWNlbWVudHM6IGFsbG93ZWRBdXRvUGxhY2VtZW50c1xuICAgIH0pIDogcGxhY2VtZW50KTtcbiAgfSwgW10pO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciBjaGVja3NNYXAgPSBuZXcgTWFwKCk7XG4gIHZhciBtYWtlRmFsbGJhY2tDaGVja3MgPSB0cnVlO1xuICB2YXIgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gcGxhY2VtZW50c1swXTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHBsYWNlbWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgcGxhY2VtZW50ID0gcGxhY2VtZW50c1tpXTtcblxuICAgIHZhciBfYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcblxuICAgIHZhciBpc1N0YXJ0VmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHBsYWNlbWVudCkgPT09IHN0YXJ0O1xuICAgIHZhciBpc1ZlcnRpY2FsID0gW3RvcCwgYm90dG9tXS5pbmRleE9mKF9iYXNlUGxhY2VtZW50KSA+PSAwO1xuICAgIHZhciBsZW4gPSBpc1ZlcnRpY2FsID8gJ3dpZHRoJyA6ICdoZWlnaHQnO1xuICAgIHZhciBvdmVyZmxvdyA9IGRldGVjdE92ZXJmbG93KHN0YXRlLCB7XG4gICAgICBwbGFjZW1lbnQ6IHBsYWNlbWVudCxcbiAgICAgIGJvdW5kYXJ5OiBib3VuZGFyeSxcbiAgICAgIHJvb3RCb3VuZGFyeTogcm9vdEJvdW5kYXJ5LFxuICAgICAgYWx0Qm91bmRhcnk6IGFsdEJvdW5kYXJ5LFxuICAgICAgcGFkZGluZzogcGFkZGluZ1xuICAgIH0pO1xuICAgIHZhciBtYWluVmFyaWF0aW9uU2lkZSA9IGlzVmVydGljYWwgPyBpc1N0YXJ0VmFyaWF0aW9uID8gcmlnaHQgOiBsZWZ0IDogaXNTdGFydFZhcmlhdGlvbiA/IGJvdHRvbSA6IHRvcDtcblxuICAgIGlmIChyZWZlcmVuY2VSZWN0W2xlbl0gPiBwb3BwZXJSZWN0W2xlbl0pIHtcbiAgICAgIG1haW5WYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIH1cblxuICAgIHZhciBhbHRWYXJpYXRpb25TaWRlID0gZ2V0T3Bwb3NpdGVQbGFjZW1lbnQobWFpblZhcmlhdGlvblNpZGUpO1xuICAgIHZhciBjaGVja3MgPSBbXTtcblxuICAgIGlmIChjaGVja01haW5BeGlzKSB7XG4gICAgICBjaGVja3MucHVzaChvdmVyZmxvd1tfYmFzZVBsYWNlbWVudF0gPD0gMCk7XG4gICAgfVxuXG4gICAgaWYgKGNoZWNrQWx0QXhpcykge1xuICAgICAgY2hlY2tzLnB1c2gob3ZlcmZsb3dbbWFpblZhcmlhdGlvblNpZGVdIDw9IDAsIG92ZXJmbG93W2FsdFZhcmlhdGlvblNpZGVdIDw9IDApO1xuICAgIH1cblxuICAgIGlmIChjaGVja3MuZXZlcnkoZnVuY3Rpb24gKGNoZWNrKSB7XG4gICAgICByZXR1cm4gY2hlY2s7XG4gICAgfSkpIHtcbiAgICAgIGZpcnN0Rml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudDtcbiAgICAgIG1ha2VGYWxsYmFja0NoZWNrcyA9IGZhbHNlO1xuICAgICAgYnJlYWs7XG4gICAgfVxuXG4gICAgY2hlY2tzTWFwLnNldChwbGFjZW1lbnQsIGNoZWNrcyk7XG4gIH1cblxuICBpZiAobWFrZUZhbGxiYWNrQ2hlY2tzKSB7XG4gICAgLy8gYDJgIG1heSBiZSBkZXNpcmVkIGluIHNvbWUgY2FzZXMg4oCTIHJlc2VhcmNoIGxhdGVyXG4gICAgdmFyIG51bWJlck9mQ2hlY2tzID0gZmxpcFZhcmlhdGlvbnMgPyAzIDogMTtcblxuICAgIHZhciBfbG9vcCA9IGZ1bmN0aW9uIF9sb29wKF9pKSB7XG4gICAgICB2YXIgZml0dGluZ1BsYWNlbWVudCA9IHBsYWNlbWVudHMuZmluZChmdW5jdGlvbiAocGxhY2VtZW50KSB7XG4gICAgICAgIHZhciBjaGVja3MgPSBjaGVja3NNYXAuZ2V0KHBsYWNlbWVudCk7XG5cbiAgICAgICAgaWYgKGNoZWNrcykge1xuICAgICAgICAgIHJldHVybiBjaGVja3Muc2xpY2UoMCwgX2kpLmV2ZXJ5KGZ1bmN0aW9uIChjaGVjaykge1xuICAgICAgICAgICAgcmV0dXJuIGNoZWNrO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgaWYgKGZpdHRpbmdQbGFjZW1lbnQpIHtcbiAgICAgICAgZmlyc3RGaXR0aW5nUGxhY2VtZW50ID0gZml0dGluZ1BsYWNlbWVudDtcbiAgICAgICAgcmV0dXJuIFwiYnJlYWtcIjtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgZm9yICh2YXIgX2kgPSBudW1iZXJPZkNoZWNrczsgX2kgPiAwOyBfaS0tKSB7XG4gICAgICB2YXIgX3JldCA9IF9sb29wKF9pKTtcblxuICAgICAgaWYgKF9yZXQgPT09IFwiYnJlYWtcIikgYnJlYWs7XG4gICAgfVxuICB9XG5cbiAgaWYgKHN0YXRlLnBsYWNlbWVudCAhPT0gZmlyc3RGaXR0aW5nUGxhY2VtZW50KSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXS5fc2tpcCA9IHRydWU7XG4gICAgc3RhdGUucGxhY2VtZW50ID0gZmlyc3RGaXR0aW5nUGxhY2VtZW50O1xuICAgIHN0YXRlLnJlc2V0ID0gdHJ1ZTtcbiAgfVxufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAnZmxpcCcsXG4gIGVuYWJsZWQ6IHRydWUsXG4gIHBoYXNlOiAnbWFpbicsXG4gIGZuOiBmbGlwLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ29mZnNldCddLFxuICBkYXRhOiB7XG4gICAgX3NraXA6IGZhbHNlXG4gIH1cbn07IiwiaW1wb3J0IHsgdG9wLCBib3R0b20sIGxlZnQsIHJpZ2h0IH0gZnJvbSBcIi4uL2VudW1zLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5cbmZ1bmN0aW9uIGdldFNpZGVPZmZzZXRzKG92ZXJmbG93LCByZWN0LCBwcmV2ZW50ZWRPZmZzZXRzKSB7XG4gIGlmIChwcmV2ZW50ZWRPZmZzZXRzID09PSB2b2lkIDApIHtcbiAgICBwcmV2ZW50ZWRPZmZzZXRzID0ge1xuICAgICAgeDogMCxcbiAgICAgIHk6IDBcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0b3A6IG92ZXJmbG93LnRvcCAtIHJlY3QuaGVpZ2h0IC0gcHJldmVudGVkT2Zmc2V0cy55LFxuICAgIHJpZ2h0OiBvdmVyZmxvdy5yaWdodCAtIHJlY3Qud2lkdGggKyBwcmV2ZW50ZWRPZmZzZXRzLngsXG4gICAgYm90dG9tOiBvdmVyZmxvdy5ib3R0b20gLSByZWN0LmhlaWdodCArIHByZXZlbnRlZE9mZnNldHMueSxcbiAgICBsZWZ0OiBvdmVyZmxvdy5sZWZ0IC0gcmVjdC53aWR0aCAtIHByZXZlbnRlZE9mZnNldHMueFxuICB9O1xufVxuXG5mdW5jdGlvbiBpc0FueVNpZGVGdWxseUNsaXBwZWQob3ZlcmZsb3cpIHtcbiAgcmV0dXJuIFt0b3AsIHJpZ2h0LCBib3R0b20sIGxlZnRdLnNvbWUoZnVuY3Rpb24gKHNpZGUpIHtcbiAgICByZXR1cm4gb3ZlcmZsb3dbc2lkZV0gPj0gMDtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGhpZGUoX3JlZikge1xuICB2YXIgc3RhdGUgPSBfcmVmLnN0YXRlLFxuICAgICAgbmFtZSA9IF9yZWYubmFtZTtcbiAgdmFyIHJlZmVyZW5jZVJlY3QgPSBzdGF0ZS5yZWN0cy5yZWZlcmVuY2U7XG4gIHZhciBwb3BwZXJSZWN0ID0gc3RhdGUucmVjdHMucG9wcGVyO1xuICB2YXIgcHJldmVudGVkT2Zmc2V0cyA9IHN0YXRlLm1vZGlmaWVyc0RhdGEucHJldmVudE92ZXJmbG93O1xuICB2YXIgcmVmZXJlbmNlT3ZlcmZsb3cgPSBkZXRlY3RPdmVyZmxvdyhzdGF0ZSwge1xuICAgIGVsZW1lbnRDb250ZXh0OiAncmVmZXJlbmNlJ1xuICB9KTtcbiAgdmFyIHBvcHBlckFsdE92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBhbHRCb3VuZGFyeTogdHJ1ZVxuICB9KTtcbiAgdmFyIHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyA9IGdldFNpZGVPZmZzZXRzKHJlZmVyZW5jZU92ZXJmbG93LCByZWZlcmVuY2VSZWN0KTtcbiAgdmFyIHBvcHBlckVzY2FwZU9mZnNldHMgPSBnZXRTaWRlT2Zmc2V0cyhwb3BwZXJBbHRPdmVyZmxvdywgcG9wcGVyUmVjdCwgcHJldmVudGVkT2Zmc2V0cyk7XG4gIHZhciBpc1JlZmVyZW5jZUhpZGRlbiA9IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChyZWZlcmVuY2VDbGlwcGluZ09mZnNldHMpO1xuICB2YXIgaGFzUG9wcGVyRXNjYXBlZCA9IGlzQW55U2lkZUZ1bGx5Q2xpcHBlZChwb3BwZXJFc2NhcGVPZmZzZXRzKTtcbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IHtcbiAgICByZWZlcmVuY2VDbGlwcGluZ09mZnNldHM6IHJlZmVyZW5jZUNsaXBwaW5nT2Zmc2V0cyxcbiAgICBwb3BwZXJFc2NhcGVPZmZzZXRzOiBwb3BwZXJFc2NhcGVPZmZzZXRzLFxuICAgIGlzUmVmZXJlbmNlSGlkZGVuOiBpc1JlZmVyZW5jZUhpZGRlbixcbiAgICBoYXNQb3BwZXJFc2NhcGVkOiBoYXNQb3BwZXJFc2NhcGVkXG4gIH07XG4gIHN0YXRlLmF0dHJpYnV0ZXMucG9wcGVyID0gT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUuYXR0cmlidXRlcy5wb3BwZXIsIHtcbiAgICAnZGF0YS1wb3BwZXItcmVmZXJlbmNlLWhpZGRlbic6IGlzUmVmZXJlbmNlSGlkZGVuLFxuICAgICdkYXRhLXBvcHBlci1lc2NhcGVkJzogaGFzUG9wcGVyRXNjYXBlZFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ2hpZGUnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICByZXF1aXJlc0lmRXhpc3RzOiBbJ3ByZXZlbnRPdmVyZmxvdyddLFxuICBmbjogaGlkZVxufTsiLCJpbXBvcnQgZ2V0QmFzZVBsYWNlbWVudCBmcm9tIFwiLi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgcGxhY2VtZW50cyB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuZXhwb3J0IGZ1bmN0aW9uIGRpc3RhbmNlQW5kU2tpZGRpbmdUb1hZKHBsYWNlbWVudCwgcmVjdHMsIG9mZnNldCkge1xuICB2YXIgYmFzZVBsYWNlbWVudCA9IGdldEJhc2VQbGFjZW1lbnQocGxhY2VtZW50KTtcbiAgdmFyIGludmVydERpc3RhbmNlID0gW2xlZnQsIHRvcF0uaW5kZXhPZihiYXNlUGxhY2VtZW50KSA+PSAwID8gLTEgOiAxO1xuXG4gIHZhciBfcmVmID0gdHlwZW9mIG9mZnNldCA9PT0gJ2Z1bmN0aW9uJyA/IG9mZnNldChPYmplY3QuYXNzaWduKHt9LCByZWN0cywge1xuICAgIHBsYWNlbWVudDogcGxhY2VtZW50XG4gIH0pKSA6IG9mZnNldCxcbiAgICAgIHNraWRkaW5nID0gX3JlZlswXSxcbiAgICAgIGRpc3RhbmNlID0gX3JlZlsxXTtcblxuICBza2lkZGluZyA9IHNraWRkaW5nIHx8IDA7XG4gIGRpc3RhbmNlID0gKGRpc3RhbmNlIHx8IDApICogaW52ZXJ0RGlzdGFuY2U7XG4gIHJldHVybiBbbGVmdCwgcmlnaHRdLmluZGV4T2YoYmFzZVBsYWNlbWVudCkgPj0gMCA/IHtcbiAgICB4OiBkaXN0YW5jZSxcbiAgICB5OiBza2lkZGluZ1xuICB9IDoge1xuICAgIHg6IHNraWRkaW5nLFxuICAgIHk6IGRpc3RhbmNlXG4gIH07XG59XG5cbmZ1bmN0aW9uIG9mZnNldChfcmVmMikge1xuICB2YXIgc3RhdGUgPSBfcmVmMi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmMi5vcHRpb25zLFxuICAgICAgbmFtZSA9IF9yZWYyLm5hbWU7XG4gIHZhciBfb3B0aW9ucyRvZmZzZXQgPSBvcHRpb25zLm9mZnNldCxcbiAgICAgIG9mZnNldCA9IF9vcHRpb25zJG9mZnNldCA9PT0gdm9pZCAwID8gWzAsIDBdIDogX29wdGlvbnMkb2Zmc2V0O1xuICB2YXIgZGF0YSA9IHBsYWNlbWVudHMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBsYWNlbWVudCkge1xuICAgIGFjY1twbGFjZW1lbnRdID0gZGlzdGFuY2VBbmRTa2lkZGluZ1RvWFkocGxhY2VtZW50LCBzdGF0ZS5yZWN0cywgb2Zmc2V0KTtcbiAgICByZXR1cm4gYWNjO1xuICB9LCB7fSk7XG4gIHZhciBfZGF0YSRzdGF0ZSRwbGFjZW1lbnQgPSBkYXRhW3N0YXRlLnBsYWNlbWVudF0sXG4gICAgICB4ID0gX2RhdGEkc3RhdGUkcGxhY2VtZW50LngsXG4gICAgICB5ID0gX2RhdGEkc3RhdGUkcGxhY2VtZW50Lnk7XG5cbiAgaWYgKHN0YXRlLm1vZGlmaWVyc0RhdGEucG9wcGVyT2Zmc2V0cyAhPSBudWxsKSB7XG4gICAgc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzLnggKz0geDtcbiAgICBzdGF0ZS5tb2RpZmllcnNEYXRhLnBvcHBlck9mZnNldHMueSArPSB5O1xuICB9XG5cbiAgc3RhdGUubW9kaWZpZXJzRGF0YVtuYW1lXSA9IGRhdGE7XG59IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuXG5leHBvcnQgZGVmYXVsdCB7XG4gIG5hbWU6ICdvZmZzZXQnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ21haW4nLFxuICByZXF1aXJlczogWydwb3BwZXJPZmZzZXRzJ10sXG4gIGZuOiBvZmZzZXRcbn07IiwiaW1wb3J0IGNvbXB1dGVPZmZzZXRzIGZyb20gXCIuLi91dGlscy9jb21wdXRlT2Zmc2V0cy5qc1wiO1xuXG5mdW5jdGlvbiBwb3BwZXJPZmZzZXRzKF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG5hbWUgPSBfcmVmLm5hbWU7XG4gIC8vIE9mZnNldHMgYXJlIHRoZSBhY3R1YWwgcG9zaXRpb24gdGhlIHBvcHBlciBuZWVkcyB0byBoYXZlIHRvIGJlXG4gIC8vIHByb3Blcmx5IHBvc2l0aW9uZWQgbmVhciBpdHMgcmVmZXJlbmNlIGVsZW1lbnRcbiAgLy8gVGhpcyBpcyB0aGUgbW9zdCBiYXNpYyBwbGFjZW1lbnQsIGFuZCB3aWxsIGJlIGFkanVzdGVkIGJ5XG4gIC8vIHRoZSBtb2RpZmllcnMgaW4gdGhlIG5leHQgc3RlcFxuICBzdGF0ZS5tb2RpZmllcnNEYXRhW25hbWVdID0gY29tcHV0ZU9mZnNldHMoe1xuICAgIHJlZmVyZW5jZTogc3RhdGUucmVjdHMucmVmZXJlbmNlLFxuICAgIGVsZW1lbnQ6IHN0YXRlLnJlY3RzLnBvcHBlcixcbiAgICBzdHJhdGVneTogJ2Fic29sdXRlJyxcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KTtcbn0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgbmFtZTogJ3BvcHBlck9mZnNldHMnLFxuICBlbmFibGVkOiB0cnVlLFxuICBwaGFzZTogJ3JlYWQnLFxuICBmbjogcG9wcGVyT2Zmc2V0cyxcbiAgZGF0YToge31cbn07IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QWx0QXhpcyhheGlzKSB7XG4gIHJldHVybiBheGlzID09PSAneCcgPyAneScgOiAneCc7XG59IiwiaW1wb3J0IHsgdG9wLCBsZWZ0LCByaWdodCwgYm90dG9tLCBzdGFydCB9IGZyb20gXCIuLi9lbnVtcy5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldEJhc2VQbGFjZW1lbnQuanNcIjtcbmltcG9ydCBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQgZnJvbSBcIi4uL3V0aWxzL2dldE1haW5BeGlzRnJvbVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IGdldEFsdEF4aXMgZnJvbSBcIi4uL3V0aWxzL2dldEFsdEF4aXMuanNcIjtcbmltcG9ydCB3aXRoaW4gZnJvbSBcIi4uL3V0aWxzL3dpdGhpbi5qc1wiO1xuaW1wb3J0IGdldExheW91dFJlY3QgZnJvbSBcIi4uL2RvbS11dGlscy9nZXRMYXlvdXRSZWN0LmpzXCI7XG5pbXBvcnQgZ2V0T2Zmc2V0UGFyZW50IGZyb20gXCIuLi9kb20tdXRpbHMvZ2V0T2Zmc2V0UGFyZW50LmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4uL3V0aWxzL2RldGVjdE92ZXJmbG93LmpzXCI7XG5pbXBvcnQgZ2V0VmFyaWF0aW9uIGZyb20gXCIuLi91dGlscy9nZXRWYXJpYXRpb24uanNcIjtcbmltcG9ydCBnZXRGcmVzaFNpZGVPYmplY3QgZnJvbSBcIi4uL3V0aWxzL2dldEZyZXNoU2lkZU9iamVjdC5qc1wiO1xuaW1wb3J0IHsgbWF4IGFzIG1hdGhNYXgsIG1pbiBhcyBtYXRoTWluIH0gZnJvbSBcIi4uL3V0aWxzL21hdGguanNcIjtcblxuZnVuY3Rpb24gcHJldmVudE92ZXJmbG93KF9yZWYpIHtcbiAgdmFyIHN0YXRlID0gX3JlZi5zdGF0ZSxcbiAgICAgIG9wdGlvbnMgPSBfcmVmLm9wdGlvbnMsXG4gICAgICBuYW1lID0gX3JlZi5uYW1lO1xuICB2YXIgX29wdGlvbnMkbWFpbkF4aXMgPSBvcHRpb25zLm1haW5BeGlzLFxuICAgICAgY2hlY2tNYWluQXhpcyA9IF9vcHRpb25zJG1haW5BeGlzID09PSB2b2lkIDAgPyB0cnVlIDogX29wdGlvbnMkbWFpbkF4aXMsXG4gICAgICBfb3B0aW9ucyRhbHRBeGlzID0gb3B0aW9ucy5hbHRBeGlzLFxuICAgICAgY2hlY2tBbHRBeGlzID0gX29wdGlvbnMkYWx0QXhpcyA9PT0gdm9pZCAwID8gZmFsc2UgOiBfb3B0aW9ucyRhbHRBeGlzLFxuICAgICAgYm91bmRhcnkgPSBvcHRpb25zLmJvdW5kYXJ5LFxuICAgICAgcm9vdEJvdW5kYXJ5ID0gb3B0aW9ucy5yb290Qm91bmRhcnksXG4gICAgICBhbHRCb3VuZGFyeSA9IG9wdGlvbnMuYWx0Qm91bmRhcnksXG4gICAgICBwYWRkaW5nID0gb3B0aW9ucy5wYWRkaW5nLFxuICAgICAgX29wdGlvbnMkdGV0aGVyID0gb3B0aW9ucy50ZXRoZXIsXG4gICAgICB0ZXRoZXIgPSBfb3B0aW9ucyR0ZXRoZXIgPT09IHZvaWQgMCA/IHRydWUgOiBfb3B0aW9ucyR0ZXRoZXIsXG4gICAgICBfb3B0aW9ucyR0ZXRoZXJPZmZzZXQgPSBvcHRpb25zLnRldGhlck9mZnNldCxcbiAgICAgIHRldGhlck9mZnNldCA9IF9vcHRpb25zJHRldGhlck9mZnNldCA9PT0gdm9pZCAwID8gMCA6IF9vcHRpb25zJHRldGhlck9mZnNldDtcbiAgdmFyIG92ZXJmbG93ID0gZGV0ZWN0T3ZlcmZsb3coc3RhdGUsIHtcbiAgICBib3VuZGFyeTogYm91bmRhcnksXG4gICAgcm9vdEJvdW5kYXJ5OiByb290Qm91bmRhcnksXG4gICAgcGFkZGluZzogcGFkZGluZyxcbiAgICBhbHRCb3VuZGFyeTogYWx0Qm91bmRhcnlcbiAgfSk7XG4gIHZhciBiYXNlUGxhY2VtZW50ID0gZ2V0QmFzZVBsYWNlbWVudChzdGF0ZS5wbGFjZW1lbnQpO1xuICB2YXIgdmFyaWF0aW9uID0gZ2V0VmFyaWF0aW9uKHN0YXRlLnBsYWNlbWVudCk7XG4gIHZhciBpc0Jhc2VQbGFjZW1lbnQgPSAhdmFyaWF0aW9uO1xuICB2YXIgbWFpbkF4aXMgPSBnZXRNYWluQXhpc0Zyb21QbGFjZW1lbnQoYmFzZVBsYWNlbWVudCk7XG4gIHZhciBhbHRBeGlzID0gZ2V0QWx0QXhpcyhtYWluQXhpcyk7XG4gIHZhciBwb3BwZXJPZmZzZXRzID0gc3RhdGUubW9kaWZpZXJzRGF0YS5wb3BwZXJPZmZzZXRzO1xuICB2YXIgcmVmZXJlbmNlUmVjdCA9IHN0YXRlLnJlY3RzLnJlZmVyZW5jZTtcbiAgdmFyIHBvcHBlclJlY3QgPSBzdGF0ZS5yZWN0cy5wb3BwZXI7XG4gIHZhciB0ZXRoZXJPZmZzZXRWYWx1ZSA9IHR5cGVvZiB0ZXRoZXJPZmZzZXQgPT09ICdmdW5jdGlvbicgPyB0ZXRoZXJPZmZzZXQoT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUucmVjdHMsIHtcbiAgICBwbGFjZW1lbnQ6IHN0YXRlLnBsYWNlbWVudFxuICB9KSkgOiB0ZXRoZXJPZmZzZXQ7XG4gIHZhciBkYXRhID0ge1xuICAgIHg6IDAsXG4gICAgeTogMFxuICB9O1xuXG4gIGlmICghcG9wcGVyT2Zmc2V0cykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGlmIChjaGVja01haW5BeGlzIHx8IGNoZWNrQWx0QXhpcykge1xuICAgIHZhciBtYWluU2lkZSA9IG1haW5BeGlzID09PSAneScgPyB0b3AgOiBsZWZ0O1xuICAgIHZhciBhbHRTaWRlID0gbWFpbkF4aXMgPT09ICd5JyA/IGJvdHRvbSA6IHJpZ2h0O1xuICAgIHZhciBsZW4gPSBtYWluQXhpcyA9PT0gJ3knID8gJ2hlaWdodCcgOiAnd2lkdGgnO1xuICAgIHZhciBvZmZzZXQgPSBwb3BwZXJPZmZzZXRzW21haW5BeGlzXTtcbiAgICB2YXIgbWluID0gcG9wcGVyT2Zmc2V0c1ttYWluQXhpc10gKyBvdmVyZmxvd1ttYWluU2lkZV07XG4gICAgdmFyIG1heCA9IHBvcHBlck9mZnNldHNbbWFpbkF4aXNdIC0gb3ZlcmZsb3dbYWx0U2lkZV07XG4gICAgdmFyIGFkZGl0aXZlID0gdGV0aGVyID8gLXBvcHBlclJlY3RbbGVuXSAvIDIgOiAwO1xuICAgIHZhciBtaW5MZW4gPSB2YXJpYXRpb24gPT09IHN0YXJ0ID8gcmVmZXJlbmNlUmVjdFtsZW5dIDogcG9wcGVyUmVjdFtsZW5dO1xuICAgIHZhciBtYXhMZW4gPSB2YXJpYXRpb24gPT09IHN0YXJ0ID8gLXBvcHBlclJlY3RbbGVuXSA6IC1yZWZlcmVuY2VSZWN0W2xlbl07IC8vIFdlIG5lZWQgdG8gaW5jbHVkZSB0aGUgYXJyb3cgaW4gdGhlIGNhbGN1bGF0aW9uIHNvIHRoZSBhcnJvdyBkb2Vzbid0IGdvXG4gICAgLy8gb3V0c2lkZSB0aGUgcmVmZXJlbmNlIGJvdW5kc1xuXG4gICAgdmFyIGFycm93RWxlbWVudCA9IHN0YXRlLmVsZW1lbnRzLmFycm93O1xuICAgIHZhciBhcnJvd1JlY3QgPSB0ZXRoZXIgJiYgYXJyb3dFbGVtZW50ID8gZ2V0TGF5b3V0UmVjdChhcnJvd0VsZW1lbnQpIDoge1xuICAgICAgd2lkdGg6IDAsXG4gICAgICBoZWlnaHQ6IDBcbiAgICB9O1xuICAgIHZhciBhcnJvd1BhZGRpbmdPYmplY3QgPSBzdGF0ZS5tb2RpZmllcnNEYXRhWydhcnJvdyNwZXJzaXN0ZW50J10gPyBzdGF0ZS5tb2RpZmllcnNEYXRhWydhcnJvdyNwZXJzaXN0ZW50J10ucGFkZGluZyA6IGdldEZyZXNoU2lkZU9iamVjdCgpO1xuICAgIHZhciBhcnJvd1BhZGRpbmdNaW4gPSBhcnJvd1BhZGRpbmdPYmplY3RbbWFpblNpZGVdO1xuICAgIHZhciBhcnJvd1BhZGRpbmdNYXggPSBhcnJvd1BhZGRpbmdPYmplY3RbYWx0U2lkZV07IC8vIElmIHRoZSByZWZlcmVuY2UgbGVuZ3RoIGlzIHNtYWxsZXIgdGhhbiB0aGUgYXJyb3cgbGVuZ3RoLCB3ZSBkb24ndCB3YW50XG4gICAgLy8gdG8gaW5jbHVkZSBpdHMgZnVsbCBzaXplIGluIHRoZSBjYWxjdWxhdGlvbi4gSWYgdGhlIHJlZmVyZW5jZSBpcyBzbWFsbFxuICAgIC8vIGFuZCBuZWFyIHRoZSBlZGdlIG9mIGEgYm91bmRhcnksIHRoZSBwb3BwZXIgY2FuIG92ZXJmbG93IGV2ZW4gaWYgdGhlXG4gICAgLy8gcmVmZXJlbmNlIGlzIG5vdCBvdmVyZmxvd2luZyBhcyB3ZWxsIChlLmcuIHZpcnR1YWwgZWxlbWVudHMgd2l0aCBub1xuICAgIC8vIHdpZHRoIG9yIGhlaWdodClcblxuICAgIHZhciBhcnJvd0xlbiA9IHdpdGhpbigwLCByZWZlcmVuY2VSZWN0W2xlbl0sIGFycm93UmVjdFtsZW5dKTtcbiAgICB2YXIgbWluT2Zmc2V0ID0gaXNCYXNlUGxhY2VtZW50ID8gcmVmZXJlbmNlUmVjdFtsZW5dIC8gMiAtIGFkZGl0aXZlIC0gYXJyb3dMZW4gLSBhcnJvd1BhZGRpbmdNaW4gLSB0ZXRoZXJPZmZzZXRWYWx1ZSA6IG1pbkxlbiAtIGFycm93TGVuIC0gYXJyb3dQYWRkaW5nTWluIC0gdGV0aGVyT2Zmc2V0VmFsdWU7XG4gICAgdmFyIG1heE9mZnNldCA9IGlzQmFzZVBsYWNlbWVudCA/IC1yZWZlcmVuY2VSZWN0W2xlbl0gLyAyICsgYWRkaXRpdmUgKyBhcnJvd0xlbiArIGFycm93UGFkZGluZ01heCArIHRldGhlck9mZnNldFZhbHVlIDogbWF4TGVuICsgYXJyb3dMZW4gKyBhcnJvd1BhZGRpbmdNYXggKyB0ZXRoZXJPZmZzZXRWYWx1ZTtcbiAgICB2YXIgYXJyb3dPZmZzZXRQYXJlbnQgPSBzdGF0ZS5lbGVtZW50cy5hcnJvdyAmJiBnZXRPZmZzZXRQYXJlbnQoc3RhdGUuZWxlbWVudHMuYXJyb3cpO1xuICAgIHZhciBjbGllbnRPZmZzZXQgPSBhcnJvd09mZnNldFBhcmVudCA/IG1haW5BeGlzID09PSAneScgPyBhcnJvd09mZnNldFBhcmVudC5jbGllbnRUb3AgfHwgMCA6IGFycm93T2Zmc2V0UGFyZW50LmNsaWVudExlZnQgfHwgMCA6IDA7XG4gICAgdmFyIG9mZnNldE1vZGlmaWVyVmFsdWUgPSBzdGF0ZS5tb2RpZmllcnNEYXRhLm9mZnNldCA/IHN0YXRlLm1vZGlmaWVyc0RhdGEub2Zmc2V0W3N0YXRlLnBsYWNlbWVudF1bbWFpbkF4aXNdIDogMDtcbiAgICB2YXIgdGV0aGVyTWluID0gcG9wcGVyT2Zmc2V0c1ttYWluQXhpc10gKyBtaW5PZmZzZXQgLSBvZmZzZXRNb2RpZmllclZhbHVlIC0gY2xpZW50T2Zmc2V0O1xuICAgIHZhciB0ZXRoZXJNYXggPSBwb3BwZXJPZmZzZXRzW21haW5BeGlzXSArIG1heE9mZnNldCAtIG9mZnNldE1vZGlmaWVyVmFsdWU7XG5cbiAgICBpZiAoY2hlY2tNYWluQXhpcykge1xuICAgICAgdmFyIHByZXZlbnRlZE9mZnNldCA9IHdpdGhpbih0ZXRoZXIgPyBtYXRoTWluKG1pbiwgdGV0aGVyTWluKSA6IG1pbiwgb2Zmc2V0LCB0ZXRoZXIgPyBtYXRoTWF4KG1heCwgdGV0aGVyTWF4KSA6IG1heCk7XG4gICAgICBwb3BwZXJPZmZzZXRzW21haW5BeGlzXSA9IHByZXZlbnRlZE9mZnNldDtcbiAgICAgIGRhdGFbbWFpbkF4aXNdID0gcHJldmVudGVkT2Zmc2V0IC0gb2Zmc2V0O1xuICAgIH1cblxuICAgIGlmIChjaGVja0FsdEF4aXMpIHtcbiAgICAgIHZhciBfbWFpblNpZGUgPSBtYWluQXhpcyA9PT0gJ3gnID8gdG9wIDogbGVmdDtcblxuICAgICAgdmFyIF9hbHRTaWRlID0gbWFpbkF4aXMgPT09ICd4JyA/IGJvdHRvbSA6IHJpZ2h0O1xuXG4gICAgICB2YXIgX29mZnNldCA9IHBvcHBlck9mZnNldHNbYWx0QXhpc107XG5cbiAgICAgIHZhciBfbWluID0gX29mZnNldCArIG92ZXJmbG93W19tYWluU2lkZV07XG5cbiAgICAgIHZhciBfbWF4ID0gX29mZnNldCAtIG92ZXJmbG93W19hbHRTaWRlXTtcblxuICAgICAgdmFyIF9wcmV2ZW50ZWRPZmZzZXQgPSB3aXRoaW4odGV0aGVyID8gbWF0aE1pbihfbWluLCB0ZXRoZXJNaW4pIDogX21pbiwgX29mZnNldCwgdGV0aGVyID8gbWF0aE1heChfbWF4LCB0ZXRoZXJNYXgpIDogX21heCk7XG5cbiAgICAgIHBvcHBlck9mZnNldHNbYWx0QXhpc10gPSBfcHJldmVudGVkT2Zmc2V0O1xuICAgICAgZGF0YVthbHRBeGlzXSA9IF9wcmV2ZW50ZWRPZmZzZXQgLSBfb2Zmc2V0O1xuICAgIH1cbiAgfVxuXG4gIHN0YXRlLm1vZGlmaWVyc0RhdGFbbmFtZV0gPSBkYXRhO1xufSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cblxuZXhwb3J0IGRlZmF1bHQge1xuICBuYW1lOiAncHJldmVudE92ZXJmbG93JyxcbiAgZW5hYmxlZDogdHJ1ZSxcbiAgcGhhc2U6ICdtYWluJyxcbiAgZm46IHByZXZlbnRPdmVyZmxvdyxcbiAgcmVxdWlyZXNJZkV4aXN0czogWydvZmZzZXQnXVxufTsiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRIVE1MRWxlbWVudFNjcm9sbChlbGVtZW50KSB7XG4gIHJldHVybiB7XG4gICAgc2Nyb2xsTGVmdDogZWxlbWVudC5zY3JvbGxMZWZ0LFxuICAgIHNjcm9sbFRvcDogZWxlbWVudC5zY3JvbGxUb3BcbiAgfTtcbn0iLCJpbXBvcnQgZ2V0V2luZG93U2Nyb2xsIGZyb20gXCIuL2dldFdpbmRvd1Njcm9sbC5qc1wiO1xuaW1wb3J0IGdldFdpbmRvdyBmcm9tIFwiLi9nZXRXaW5kb3cuanNcIjtcbmltcG9ydCB7IGlzSFRNTEVsZW1lbnQgfSBmcm9tIFwiLi9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgZ2V0SFRNTEVsZW1lbnRTY3JvbGwgZnJvbSBcIi4vZ2V0SFRNTEVsZW1lbnRTY3JvbGwuanNcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldE5vZGVTY3JvbGwobm9kZSkge1xuICBpZiAobm9kZSA9PT0gZ2V0V2luZG93KG5vZGUpIHx8ICFpc0hUTUxFbGVtZW50KG5vZGUpKSB7XG4gICAgcmV0dXJuIGdldFdpbmRvd1Njcm9sbChub2RlKTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gZ2V0SFRNTEVsZW1lbnRTY3JvbGwobm9kZSk7XG4gIH1cbn0iLCJpbXBvcnQgZ2V0Qm91bmRpbmdDbGllbnRSZWN0IGZyb20gXCIuL2dldEJvdW5kaW5nQ2xpZW50UmVjdC5qc1wiO1xuaW1wb3J0IGdldE5vZGVTY3JvbGwgZnJvbSBcIi4vZ2V0Tm9kZVNjcm9sbC5qc1wiO1xuaW1wb3J0IGdldE5vZGVOYW1lIGZyb20gXCIuL2dldE5vZGVOYW1lLmpzXCI7XG5pbXBvcnQgeyBpc0hUTUxFbGVtZW50IH0gZnJvbSBcIi4vaW5zdGFuY2VPZi5qc1wiO1xuaW1wb3J0IGdldFdpbmRvd1Njcm9sbEJhclggZnJvbSBcIi4vZ2V0V2luZG93U2Nyb2xsQmFyWC5qc1wiO1xuaW1wb3J0IGdldERvY3VtZW50RWxlbWVudCBmcm9tIFwiLi9nZXREb2N1bWVudEVsZW1lbnQuanNcIjtcbmltcG9ydCBpc1Njcm9sbFBhcmVudCBmcm9tIFwiLi9pc1Njcm9sbFBhcmVudC5qc1wiO1xuXG5mdW5jdGlvbiBpc0VsZW1lbnRTY2FsZWQoZWxlbWVudCkge1xuICB2YXIgcmVjdCA9IGVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gIHZhciBzY2FsZVggPSByZWN0LndpZHRoIC8gZWxlbWVudC5vZmZzZXRXaWR0aCB8fCAxO1xuICB2YXIgc2NhbGVZID0gcmVjdC5oZWlnaHQgLyBlbGVtZW50Lm9mZnNldEhlaWdodCB8fCAxO1xuICByZXR1cm4gc2NhbGVYICE9PSAxIHx8IHNjYWxlWSAhPT0gMTtcbn0gLy8gUmV0dXJucyB0aGUgY29tcG9zaXRlIHJlY3Qgb2YgYW4gZWxlbWVudCByZWxhdGl2ZSB0byBpdHMgb2Zmc2V0UGFyZW50LlxuLy8gQ29tcG9zaXRlIG1lYW5zIGl0IHRha2VzIGludG8gYWNjb3VudCB0cmFuc2Zvcm1zIGFzIHdlbGwgYXMgbGF5b3V0LlxuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldENvbXBvc2l0ZVJlY3QoZWxlbWVudE9yVmlydHVhbEVsZW1lbnQsIG9mZnNldFBhcmVudCwgaXNGaXhlZCkge1xuICBpZiAoaXNGaXhlZCA9PT0gdm9pZCAwKSB7XG4gICAgaXNGaXhlZCA9IGZhbHNlO1xuICB9XG5cbiAgdmFyIGlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ID0gaXNIVE1MRWxlbWVudChvZmZzZXRQYXJlbnQpO1xuICB2YXIgb2Zmc2V0UGFyZW50SXNTY2FsZWQgPSBpc0hUTUxFbGVtZW50KG9mZnNldFBhcmVudCkgJiYgaXNFbGVtZW50U2NhbGVkKG9mZnNldFBhcmVudCk7XG4gIHZhciBkb2N1bWVudEVsZW1lbnQgPSBnZXREb2N1bWVudEVsZW1lbnQob2Zmc2V0UGFyZW50KTtcbiAgdmFyIHJlY3QgPSBnZXRCb3VuZGluZ0NsaWVudFJlY3QoZWxlbWVudE9yVmlydHVhbEVsZW1lbnQsIG9mZnNldFBhcmVudElzU2NhbGVkKTtcbiAgdmFyIHNjcm9sbCA9IHtcbiAgICBzY3JvbGxMZWZ0OiAwLFxuICAgIHNjcm9sbFRvcDogMFxuICB9O1xuICB2YXIgb2Zmc2V0cyA9IHtcbiAgICB4OiAwLFxuICAgIHk6IDBcbiAgfTtcblxuICBpZiAoaXNPZmZzZXRQYXJlbnRBbkVsZW1lbnQgfHwgIWlzT2Zmc2V0UGFyZW50QW5FbGVtZW50ICYmICFpc0ZpeGVkKSB7XG4gICAgaWYgKGdldE5vZGVOYW1lKG9mZnNldFBhcmVudCkgIT09ICdib2R5JyB8fCAvLyBodHRwczovL2dpdGh1Yi5jb20vcG9wcGVyanMvcG9wcGVyLWNvcmUvaXNzdWVzLzEwNzhcbiAgICBpc1Njcm9sbFBhcmVudChkb2N1bWVudEVsZW1lbnQpKSB7XG4gICAgICBzY3JvbGwgPSBnZXROb2RlU2Nyb2xsKG9mZnNldFBhcmVudCk7XG4gICAgfVxuXG4gICAgaWYgKGlzSFRNTEVsZW1lbnQob2Zmc2V0UGFyZW50KSkge1xuICAgICAgb2Zmc2V0cyA9IGdldEJvdW5kaW5nQ2xpZW50UmVjdChvZmZzZXRQYXJlbnQsIHRydWUpO1xuICAgICAgb2Zmc2V0cy54ICs9IG9mZnNldFBhcmVudC5jbGllbnRMZWZ0O1xuICAgICAgb2Zmc2V0cy55ICs9IG9mZnNldFBhcmVudC5jbGllbnRUb3A7XG4gICAgfSBlbHNlIGlmIChkb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIG9mZnNldHMueCA9IGdldFdpbmRvd1Njcm9sbEJhclgoZG9jdW1lbnRFbGVtZW50KTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIHg6IHJlY3QubGVmdCArIHNjcm9sbC5zY3JvbGxMZWZ0IC0gb2Zmc2V0cy54LFxuICAgIHk6IHJlY3QudG9wICsgc2Nyb2xsLnNjcm9sbFRvcCAtIG9mZnNldHMueSxcbiAgICB3aWR0aDogcmVjdC53aWR0aCxcbiAgICBoZWlnaHQ6IHJlY3QuaGVpZ2h0XG4gIH07XG59IiwiaW1wb3J0IHsgbW9kaWZpZXJQaGFzZXMgfSBmcm9tIFwiLi4vZW51bXMuanNcIjsgLy8gc291cmNlOiBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy80OTg3NTI1NVxuXG5mdW5jdGlvbiBvcmRlcihtb2RpZmllcnMpIHtcbiAgdmFyIG1hcCA9IG5ldyBNYXAoKTtcbiAgdmFyIHZpc2l0ZWQgPSBuZXcgU2V0KCk7XG4gIHZhciByZXN1bHQgPSBbXTtcbiAgbW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgbWFwLnNldChtb2RpZmllci5uYW1lLCBtb2RpZmllcik7XG4gIH0pOyAvLyBPbiB2aXNpdGluZyBvYmplY3QsIGNoZWNrIGZvciBpdHMgZGVwZW5kZW5jaWVzIGFuZCB2aXNpdCB0aGVtIHJlY3Vyc2l2ZWx5XG5cbiAgZnVuY3Rpb24gc29ydChtb2RpZmllcikge1xuICAgIHZpc2l0ZWQuYWRkKG1vZGlmaWVyLm5hbWUpO1xuICAgIHZhciByZXF1aXJlcyA9IFtdLmNvbmNhdChtb2RpZmllci5yZXF1aXJlcyB8fCBbXSwgbW9kaWZpZXIucmVxdWlyZXNJZkV4aXN0cyB8fCBbXSk7XG4gICAgcmVxdWlyZXMuZm9yRWFjaChmdW5jdGlvbiAoZGVwKSB7XG4gICAgICBpZiAoIXZpc2l0ZWQuaGFzKGRlcCkpIHtcbiAgICAgICAgdmFyIGRlcE1vZGlmaWVyID0gbWFwLmdldChkZXApO1xuXG4gICAgICAgIGlmIChkZXBNb2RpZmllcikge1xuICAgICAgICAgIHNvcnQoZGVwTW9kaWZpZXIpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfSk7XG4gICAgcmVzdWx0LnB1c2gobW9kaWZpZXIpO1xuICB9XG5cbiAgbW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgaWYgKCF2aXNpdGVkLmhhcyhtb2RpZmllci5uYW1lKSkge1xuICAgICAgLy8gY2hlY2sgZm9yIHZpc2l0ZWQgb2JqZWN0XG4gICAgICBzb3J0KG1vZGlmaWVyKTtcbiAgICB9XG4gIH0pO1xuICByZXR1cm4gcmVzdWx0O1xufVxuXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBvcmRlck1vZGlmaWVycyhtb2RpZmllcnMpIHtcbiAgLy8gb3JkZXIgYmFzZWQgb24gZGVwZW5kZW5jaWVzXG4gIHZhciBvcmRlcmVkTW9kaWZpZXJzID0gb3JkZXIobW9kaWZpZXJzKTsgLy8gb3JkZXIgYmFzZWQgb24gcGhhc2VcblxuICByZXR1cm4gbW9kaWZpZXJQaGFzZXMucmVkdWNlKGZ1bmN0aW9uIChhY2MsIHBoYXNlKSB7XG4gICAgcmV0dXJuIGFjYy5jb25jYXQob3JkZXJlZE1vZGlmaWVycy5maWx0ZXIoZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgICByZXR1cm4gbW9kaWZpZXIucGhhc2UgPT09IHBoYXNlO1xuICAgIH0pKTtcbiAgfSwgW10pO1xufSIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlYm91bmNlKGZuKSB7XG4gIHZhciBwZW5kaW5nO1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIGlmICghcGVuZGluZykge1xuICAgICAgcGVuZGluZyA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlKSB7XG4gICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHBlbmRpbmcgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgcmVzb2x2ZShmbigpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gcGVuZGluZztcbiAgfTtcbn0iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtZXJnZUJ5TmFtZShtb2RpZmllcnMpIHtcbiAgdmFyIG1lcmdlZCA9IG1vZGlmaWVycy5yZWR1Y2UoZnVuY3Rpb24gKG1lcmdlZCwgY3VycmVudCkge1xuICAgIHZhciBleGlzdGluZyA9IG1lcmdlZFtjdXJyZW50Lm5hbWVdO1xuICAgIG1lcmdlZFtjdXJyZW50Lm5hbWVdID0gZXhpc3RpbmcgPyBPYmplY3QuYXNzaWduKHt9LCBleGlzdGluZywgY3VycmVudCwge1xuICAgICAgb3B0aW9uczogT2JqZWN0LmFzc2lnbih7fSwgZXhpc3Rpbmcub3B0aW9ucywgY3VycmVudC5vcHRpb25zKSxcbiAgICAgIGRhdGE6IE9iamVjdC5hc3NpZ24oe30sIGV4aXN0aW5nLmRhdGEsIGN1cnJlbnQuZGF0YSlcbiAgICB9KSA6IGN1cnJlbnQ7XG4gICAgcmV0dXJuIG1lcmdlZDtcbiAgfSwge30pOyAvLyBJRTExIGRvZXMgbm90IHN1cHBvcnQgT2JqZWN0LnZhbHVlc1xuXG4gIHJldHVybiBPYmplY3Qua2V5cyhtZXJnZWQpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG4gICAgcmV0dXJuIG1lcmdlZFtrZXldO1xuICB9KTtcbn0iLCJpbXBvcnQgZ2V0Q29tcG9zaXRlUmVjdCBmcm9tIFwiLi9kb20tdXRpbHMvZ2V0Q29tcG9zaXRlUmVjdC5qc1wiO1xuaW1wb3J0IGdldExheW91dFJlY3QgZnJvbSBcIi4vZG9tLXV0aWxzL2dldExheW91dFJlY3QuanNcIjtcbmltcG9ydCBsaXN0U2Nyb2xsUGFyZW50cyBmcm9tIFwiLi9kb20tdXRpbHMvbGlzdFNjcm9sbFBhcmVudHMuanNcIjtcbmltcG9ydCBnZXRPZmZzZXRQYXJlbnQgZnJvbSBcIi4vZG9tLXV0aWxzL2dldE9mZnNldFBhcmVudC5qc1wiO1xuaW1wb3J0IGdldENvbXB1dGVkU3R5bGUgZnJvbSBcIi4vZG9tLXV0aWxzL2dldENvbXB1dGVkU3R5bGUuanNcIjtcbmltcG9ydCBvcmRlck1vZGlmaWVycyBmcm9tIFwiLi91dGlscy9vcmRlck1vZGlmaWVycy5qc1wiO1xuaW1wb3J0IGRlYm91bmNlIGZyb20gXCIuL3V0aWxzL2RlYm91bmNlLmpzXCI7XG5pbXBvcnQgdmFsaWRhdGVNb2RpZmllcnMgZnJvbSBcIi4vdXRpbHMvdmFsaWRhdGVNb2RpZmllcnMuanNcIjtcbmltcG9ydCB1bmlxdWVCeSBmcm9tIFwiLi91dGlscy91bmlxdWVCeS5qc1wiO1xuaW1wb3J0IGdldEJhc2VQbGFjZW1lbnQgZnJvbSBcIi4vdXRpbHMvZ2V0QmFzZVBsYWNlbWVudC5qc1wiO1xuaW1wb3J0IG1lcmdlQnlOYW1lIGZyb20gXCIuL3V0aWxzL21lcmdlQnlOYW1lLmpzXCI7XG5pbXBvcnQgZGV0ZWN0T3ZlcmZsb3cgZnJvbSBcIi4vdXRpbHMvZGV0ZWN0T3ZlcmZsb3cuanNcIjtcbmltcG9ydCB7IGlzRWxlbWVudCB9IGZyb20gXCIuL2RvbS11dGlscy9pbnN0YW5jZU9mLmpzXCI7XG5pbXBvcnQgeyBhdXRvIH0gZnJvbSBcIi4vZW51bXMuanNcIjtcbnZhciBJTlZBTElEX0VMRU1FTlRfRVJST1IgPSAnUG9wcGVyOiBJbnZhbGlkIHJlZmVyZW5jZSBvciBwb3BwZXIgYXJndW1lbnQgcHJvdmlkZWQuIFRoZXkgbXVzdCBiZSBlaXRoZXIgYSBET00gZWxlbWVudCBvciB2aXJ0dWFsIGVsZW1lbnQuJztcbnZhciBJTkZJTklURV9MT09QX0VSUk9SID0gJ1BvcHBlcjogQW4gaW5maW5pdGUgbG9vcCBpbiB0aGUgbW9kaWZpZXJzIGN5Y2xlIGhhcyBiZWVuIGRldGVjdGVkISBUaGUgY3ljbGUgaGFzIGJlZW4gaW50ZXJydXB0ZWQgdG8gcHJldmVudCBhIGJyb3dzZXIgY3Jhc2guJztcbnZhciBERUZBVUxUX09QVElPTlMgPSB7XG4gIHBsYWNlbWVudDogJ2JvdHRvbScsXG4gIG1vZGlmaWVyczogW10sXG4gIHN0cmF0ZWd5OiAnYWJzb2x1dGUnXG59O1xuXG5mdW5jdGlvbiBhcmVWYWxpZEVsZW1lbnRzKCkge1xuICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuKSwgX2tleSA9IDA7IF9rZXkgPCBfbGVuOyBfa2V5KyspIHtcbiAgICBhcmdzW19rZXldID0gYXJndW1lbnRzW19rZXldO1xuICB9XG5cbiAgcmV0dXJuICFhcmdzLnNvbWUoZnVuY3Rpb24gKGVsZW1lbnQpIHtcbiAgICByZXR1cm4gIShlbGVtZW50ICYmIHR5cGVvZiBlbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCA9PT0gJ2Z1bmN0aW9uJyk7XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcG9wcGVyR2VuZXJhdG9yKGdlbmVyYXRvck9wdGlvbnMpIHtcbiAgaWYgKGdlbmVyYXRvck9wdGlvbnMgPT09IHZvaWQgMCkge1xuICAgIGdlbmVyYXRvck9wdGlvbnMgPSB7fTtcbiAgfVxuXG4gIHZhciBfZ2VuZXJhdG9yT3B0aW9ucyA9IGdlbmVyYXRvck9wdGlvbnMsXG4gICAgICBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYgPSBfZ2VuZXJhdG9yT3B0aW9ucy5kZWZhdWx0TW9kaWZpZXJzLFxuICAgICAgZGVmYXVsdE1vZGlmaWVycyA9IF9nZW5lcmF0b3JPcHRpb25zJGRlZiA9PT0gdm9pZCAwID8gW10gOiBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYsXG4gICAgICBfZ2VuZXJhdG9yT3B0aW9ucyRkZWYyID0gX2dlbmVyYXRvck9wdGlvbnMuZGVmYXVsdE9wdGlvbnMsXG4gICAgICBkZWZhdWx0T3B0aW9ucyA9IF9nZW5lcmF0b3JPcHRpb25zJGRlZjIgPT09IHZvaWQgMCA/IERFRkFVTFRfT1BUSU9OUyA6IF9nZW5lcmF0b3JPcHRpb25zJGRlZjI7XG4gIHJldHVybiBmdW5jdGlvbiBjcmVhdGVQb3BwZXIocmVmZXJlbmNlLCBwb3BwZXIsIG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucyA9PT0gdm9pZCAwKSB7XG4gICAgICBvcHRpb25zID0gZGVmYXVsdE9wdGlvbnM7XG4gICAgfVxuXG4gICAgdmFyIHN0YXRlID0ge1xuICAgICAgcGxhY2VtZW50OiAnYm90dG9tJyxcbiAgICAgIG9yZGVyZWRNb2RpZmllcnM6IFtdLFxuICAgICAgb3B0aW9uczogT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9PUFRJT05TLCBkZWZhdWx0T3B0aW9ucyksXG4gICAgICBtb2RpZmllcnNEYXRhOiB7fSxcbiAgICAgIGVsZW1lbnRzOiB7XG4gICAgICAgIHJlZmVyZW5jZTogcmVmZXJlbmNlLFxuICAgICAgICBwb3BwZXI6IHBvcHBlclxuICAgICAgfSxcbiAgICAgIGF0dHJpYnV0ZXM6IHt9LFxuICAgICAgc3R5bGVzOiB7fVxuICAgIH07XG4gICAgdmFyIGVmZmVjdENsZWFudXBGbnMgPSBbXTtcbiAgICB2YXIgaXNEZXN0cm95ZWQgPSBmYWxzZTtcbiAgICB2YXIgaW5zdGFuY2UgPSB7XG4gICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICBzZXRPcHRpb25zOiBmdW5jdGlvbiBzZXRPcHRpb25zKHNldE9wdGlvbnNBY3Rpb24pIHtcbiAgICAgICAgdmFyIG9wdGlvbnMgPSB0eXBlb2Ygc2V0T3B0aW9uc0FjdGlvbiA9PT0gJ2Z1bmN0aW9uJyA/IHNldE9wdGlvbnNBY3Rpb24oc3RhdGUub3B0aW9ucykgOiBzZXRPcHRpb25zQWN0aW9uO1xuICAgICAgICBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIHN0YXRlLm9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBkZWZhdWx0T3B0aW9ucywgc3RhdGUub3B0aW9ucywgb3B0aW9ucyk7XG4gICAgICAgIHN0YXRlLnNjcm9sbFBhcmVudHMgPSB7XG4gICAgICAgICAgcmVmZXJlbmNlOiBpc0VsZW1lbnQocmVmZXJlbmNlKSA/IGxpc3RTY3JvbGxQYXJlbnRzKHJlZmVyZW5jZSkgOiByZWZlcmVuY2UuY29udGV4dEVsZW1lbnQgPyBsaXN0U2Nyb2xsUGFyZW50cyhyZWZlcmVuY2UuY29udGV4dEVsZW1lbnQpIDogW10sXG4gICAgICAgICAgcG9wcGVyOiBsaXN0U2Nyb2xsUGFyZW50cyhwb3BwZXIpXG4gICAgICAgIH07IC8vIE9yZGVycyB0aGUgbW9kaWZpZXJzIGJhc2VkIG9uIHRoZWlyIGRlcGVuZGVuY2llcyBhbmQgYHBoYXNlYFxuICAgICAgICAvLyBwcm9wZXJ0aWVzXG5cbiAgICAgICAgdmFyIG9yZGVyZWRNb2RpZmllcnMgPSBvcmRlck1vZGlmaWVycyhtZXJnZUJ5TmFtZShbXS5jb25jYXQoZGVmYXVsdE1vZGlmaWVycywgc3RhdGUub3B0aW9ucy5tb2RpZmllcnMpKSk7IC8vIFN0cmlwIG91dCBkaXNhYmxlZCBtb2RpZmllcnNcblxuICAgICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzID0gb3JkZXJlZE1vZGlmaWVycy5maWx0ZXIoZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgICByZXR1cm4gbS5lbmFibGVkO1xuICAgICAgICB9KTsgLy8gVmFsaWRhdGUgdGhlIHByb3ZpZGVkIG1vZGlmaWVycyBzbyB0aGF0IHRoZSBjb25zdW1lciB3aWxsIGdldCB3YXJuZWRcbiAgICAgICAgLy8gaWYgb25lIG9mIHRoZSBtb2RpZmllcnMgaXMgaW52YWxpZCBmb3IgYW55IHJlYXNvblxuXG4gICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICB2YXIgbW9kaWZpZXJzID0gdW5pcXVlQnkoW10uY29uY2F0KG9yZGVyZWRNb2RpZmllcnMsIHN0YXRlLm9wdGlvbnMubW9kaWZpZXJzKSwgZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgICAgICAgIHZhciBuYW1lID0gX3JlZi5uYW1lO1xuICAgICAgICAgICAgcmV0dXJuIG5hbWU7XG4gICAgICAgICAgfSk7XG4gICAgICAgICAgdmFsaWRhdGVNb2RpZmllcnMobW9kaWZpZXJzKTtcblxuICAgICAgICAgIGlmIChnZXRCYXNlUGxhY2VtZW50KHN0YXRlLm9wdGlvbnMucGxhY2VtZW50KSA9PT0gYXV0bykge1xuICAgICAgICAgICAgdmFyIGZsaXBNb2RpZmllciA9IHN0YXRlLm9yZGVyZWRNb2RpZmllcnMuZmluZChmdW5jdGlvbiAoX3JlZjIpIHtcbiAgICAgICAgICAgICAgdmFyIG5hbWUgPSBfcmVmMi5uYW1lO1xuICAgICAgICAgICAgICByZXR1cm4gbmFtZSA9PT0gJ2ZsaXAnO1xuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIGlmICghZmxpcE1vZGlmaWVyKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoWydQb3BwZXI6IFwiYXV0b1wiIHBsYWNlbWVudHMgcmVxdWlyZSB0aGUgXCJmbGlwXCIgbW9kaWZpZXIgYmUnLCAncHJlc2VudCBhbmQgZW5hYmxlZCB0byB3b3JrLiddLmpvaW4oJyAnKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdmFyIF9nZXRDb21wdXRlZFN0eWxlID0gZ2V0Q29tcHV0ZWRTdHlsZShwb3BwZXIpLFxuICAgICAgICAgICAgICBtYXJnaW5Ub3AgPSBfZ2V0Q29tcHV0ZWRTdHlsZS5tYXJnaW5Ub3AsXG4gICAgICAgICAgICAgIG1hcmdpblJpZ2h0ID0gX2dldENvbXB1dGVkU3R5bGUubWFyZ2luUmlnaHQsXG4gICAgICAgICAgICAgIG1hcmdpbkJvdHRvbSA9IF9nZXRDb21wdXRlZFN0eWxlLm1hcmdpbkJvdHRvbSxcbiAgICAgICAgICAgICAgbWFyZ2luTGVmdCA9IF9nZXRDb21wdXRlZFN0eWxlLm1hcmdpbkxlZnQ7IC8vIFdlIG5vIGxvbmdlciB0YWtlIGludG8gYWNjb3VudCBgbWFyZ2luc2Agb24gdGhlIHBvcHBlciwgYW5kIGl0IGNhblxuICAgICAgICAgIC8vIGNhdXNlIGJ1Z3Mgd2l0aCBwb3NpdGlvbmluZywgc28gd2UnbGwgd2FybiB0aGUgY29uc3VtZXJcblxuXG4gICAgICAgICAgaWYgKFttYXJnaW5Ub3AsIG1hcmdpblJpZ2h0LCBtYXJnaW5Cb3R0b20sIG1hcmdpbkxlZnRdLnNvbWUoZnVuY3Rpb24gKG1hcmdpbikge1xuICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQobWFyZ2luKTtcbiAgICAgICAgICB9KSkge1xuICAgICAgICAgICAgY29uc29sZS53YXJuKFsnUG9wcGVyOiBDU1MgXCJtYXJnaW5cIiBzdHlsZXMgY2Fubm90IGJlIHVzZWQgdG8gYXBwbHkgcGFkZGluZycsICdiZXR3ZWVuIHRoZSBwb3BwZXIgYW5kIGl0cyByZWZlcmVuY2UgZWxlbWVudCBvciBib3VuZGFyeS4nLCAnVG8gcmVwbGljYXRlIG1hcmdpbiwgdXNlIHRoZSBgb2Zmc2V0YCBtb2RpZmllciwgYXMgd2VsbCBhcycsICd0aGUgYHBhZGRpbmdgIG9wdGlvbiBpbiB0aGUgYHByZXZlbnRPdmVyZmxvd2AgYW5kIGBmbGlwYCcsICdtb2RpZmllcnMuJ10uam9pbignICcpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBydW5Nb2RpZmllckVmZmVjdHMoKTtcbiAgICAgICAgcmV0dXJuIGluc3RhbmNlLnVwZGF0ZSgpO1xuICAgICAgfSxcbiAgICAgIC8vIFN5bmMgdXBkYXRlIOKAkyBpdCB3aWxsIGFsd2F5cyBiZSBleGVjdXRlZCwgZXZlbiBpZiBub3QgbmVjZXNzYXJ5LiBUaGlzXG4gICAgICAvLyBpcyB1c2VmdWwgZm9yIGxvdyBmcmVxdWVuY3kgdXBkYXRlcyB3aGVyZSBzeW5jIGJlaGF2aW9yIHNpbXBsaWZpZXMgdGhlXG4gICAgICAvLyBsb2dpYy5cbiAgICAgIC8vIEZvciBoaWdoIGZyZXF1ZW5jeSB1cGRhdGVzIChlLmcuIGByZXNpemVgIGFuZCBgc2Nyb2xsYCBldmVudHMpLCBhbHdheXNcbiAgICAgIC8vIHByZWZlciB0aGUgYXN5bmMgUG9wcGVyI3VwZGF0ZSBtZXRob2RcbiAgICAgIGZvcmNlVXBkYXRlOiBmdW5jdGlvbiBmb3JjZVVwZGF0ZSgpIHtcbiAgICAgICAgaWYgKGlzRGVzdHJveWVkKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdmFyIF9zdGF0ZSRlbGVtZW50cyA9IHN0YXRlLmVsZW1lbnRzLFxuICAgICAgICAgICAgcmVmZXJlbmNlID0gX3N0YXRlJGVsZW1lbnRzLnJlZmVyZW5jZSxcbiAgICAgICAgICAgIHBvcHBlciA9IF9zdGF0ZSRlbGVtZW50cy5wb3BwZXI7IC8vIERvbid0IHByb2NlZWQgaWYgYHJlZmVyZW5jZWAgb3IgYHBvcHBlcmAgYXJlIG5vdCB2YWxpZCBlbGVtZW50c1xuICAgICAgICAvLyBhbnltb3JlXG5cbiAgICAgICAgaWYgKCFhcmVWYWxpZEVsZW1lbnRzKHJlZmVyZW5jZSwgcG9wcGVyKSkge1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoSU5WQUxJRF9FTEVNRU5UX0VSUk9SKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gLy8gU3RvcmUgdGhlIHJlZmVyZW5jZSBhbmQgcG9wcGVyIHJlY3RzIHRvIGJlIHJlYWQgYnkgbW9kaWZpZXJzXG5cblxuICAgICAgICBzdGF0ZS5yZWN0cyA9IHtcbiAgICAgICAgICByZWZlcmVuY2U6IGdldENvbXBvc2l0ZVJlY3QocmVmZXJlbmNlLCBnZXRPZmZzZXRQYXJlbnQocG9wcGVyKSwgc3RhdGUub3B0aW9ucy5zdHJhdGVneSA9PT0gJ2ZpeGVkJyksXG4gICAgICAgICAgcG9wcGVyOiBnZXRMYXlvdXRSZWN0KHBvcHBlcilcbiAgICAgICAgfTsgLy8gTW9kaWZpZXJzIGhhdmUgdGhlIGFiaWxpdHkgdG8gcmVzZXQgdGhlIGN1cnJlbnQgdXBkYXRlIGN5Y2xlLiBUaGVcbiAgICAgICAgLy8gbW9zdCBjb21tb24gdXNlIGNhc2UgZm9yIHRoaXMgaXMgdGhlIGBmbGlwYCBtb2RpZmllciBjaGFuZ2luZyB0aGVcbiAgICAgICAgLy8gcGxhY2VtZW50LCB3aGljaCB0aGVuIG5lZWRzIHRvIHJlLXJ1biBhbGwgdGhlIG1vZGlmaWVycywgYmVjYXVzZSB0aGVcbiAgICAgICAgLy8gbG9naWMgd2FzIHByZXZpb3VzbHkgcmFuIGZvciB0aGUgcHJldmlvdXMgcGxhY2VtZW50IGFuZCBpcyB0aGVyZWZvcmVcbiAgICAgICAgLy8gc3RhbGUvaW5jb3JyZWN0XG5cbiAgICAgICAgc3RhdGUucmVzZXQgPSBmYWxzZTtcbiAgICAgICAgc3RhdGUucGxhY2VtZW50ID0gc3RhdGUub3B0aW9ucy5wbGFjZW1lbnQ7IC8vIE9uIGVhY2ggdXBkYXRlIGN5Y2xlLCB0aGUgYG1vZGlmaWVyc0RhdGFgIHByb3BlcnR5IGZvciBlYWNoIG1vZGlmaWVyXG4gICAgICAgIC8vIGlzIGZpbGxlZCB3aXRoIHRoZSBpbml0aWFsIGRhdGEgc3BlY2lmaWVkIGJ5IHRoZSBtb2RpZmllci4gVGhpcyBtZWFuc1xuICAgICAgICAvLyBpdCBkb2Vzbid0IHBlcnNpc3QgYW5kIGlzIGZyZXNoIG9uIGVhY2ggdXBkYXRlLlxuICAgICAgICAvLyBUbyBlbnN1cmUgcGVyc2lzdGVudCBkYXRhLCB1c2UgYCR7bmFtZX0jcGVyc2lzdGVudGBcblxuICAgICAgICBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmZvckVhY2goZnVuY3Rpb24gKG1vZGlmaWVyKSB7XG4gICAgICAgICAgcmV0dXJuIHN0YXRlLm1vZGlmaWVyc0RhdGFbbW9kaWZpZXIubmFtZV0gPSBPYmplY3QuYXNzaWduKHt9LCBtb2RpZmllci5kYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHZhciBfX2RlYnVnX2xvb3BzX18gPSAwO1xuXG4gICAgICAgIGZvciAodmFyIGluZGV4ID0gMDsgaW5kZXggPCBzdGF0ZS5vcmRlcmVkTW9kaWZpZXJzLmxlbmd0aDsgaW5kZXgrKykge1xuICAgICAgICAgIGlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgICAgICAgICAgIF9fZGVidWdfbG9vcHNfXyArPSAxO1xuXG4gICAgICAgICAgICBpZiAoX19kZWJ1Z19sb29wc19fID4gMTAwKSB7XG4gICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoSU5GSU5JVEVfTE9PUF9FUlJPUik7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzdGF0ZS5yZXNldCA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgc3RhdGUucmVzZXQgPSBmYWxzZTtcbiAgICAgICAgICAgIGluZGV4ID0gLTE7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICB2YXIgX3N0YXRlJG9yZGVyZWRNb2RpZmllID0gc3RhdGUub3JkZXJlZE1vZGlmaWVyc1tpbmRleF0sXG4gICAgICAgICAgICAgIGZuID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllLmZuLFxuICAgICAgICAgICAgICBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllLm9wdGlvbnMsXG4gICAgICAgICAgICAgIF9vcHRpb25zID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllMiA9PT0gdm9pZCAwID8ge30gOiBfc3RhdGUkb3JkZXJlZE1vZGlmaWUyLFxuICAgICAgICAgICAgICBuYW1lID0gX3N0YXRlJG9yZGVyZWRNb2RpZmllLm5hbWU7XG5cbiAgICAgICAgICBpZiAodHlwZW9mIGZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBzdGF0ZSA9IGZuKHtcbiAgICAgICAgICAgICAgc3RhdGU6IHN0YXRlLFxuICAgICAgICAgICAgICBvcHRpb25zOiBfb3B0aW9ucyxcbiAgICAgICAgICAgICAgbmFtZTogbmFtZSxcbiAgICAgICAgICAgICAgaW5zdGFuY2U6IGluc3RhbmNlXG4gICAgICAgICAgICB9KSB8fCBzdGF0ZTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0sXG4gICAgICAvLyBBc3luYyBhbmQgb3B0aW1pc3RpY2FsbHkgb3B0aW1pemVkIHVwZGF0ZSDigJMgaXQgd2lsbCBub3QgYmUgZXhlY3V0ZWQgaWZcbiAgICAgIC8vIG5vdCBuZWNlc3NhcnkgKGRlYm91bmNlZCB0byBydW4gYXQgbW9zdCBvbmNlLXBlci10aWNrKVxuICAgICAgdXBkYXRlOiBkZWJvdW5jZShmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSkge1xuICAgICAgICAgIGluc3RhbmNlLmZvcmNlVXBkYXRlKCk7XG4gICAgICAgICAgcmVzb2x2ZShzdGF0ZSk7XG4gICAgICAgIH0pO1xuICAgICAgfSksXG4gICAgICBkZXN0cm95OiBmdW5jdGlvbiBkZXN0cm95KCkge1xuICAgICAgICBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCk7XG4gICAgICAgIGlzRGVzdHJveWVkID0gdHJ1ZTtcbiAgICAgIH1cbiAgICB9O1xuXG4gICAgaWYgKCFhcmVWYWxpZEVsZW1lbnRzKHJlZmVyZW5jZSwgcG9wcGVyKSkge1xuICAgICAgaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WICE9PSBcInByb2R1Y3Rpb25cIikge1xuICAgICAgICBjb25zb2xlLmVycm9yKElOVkFMSURfRUxFTUVOVF9FUlJPUik7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9XG5cbiAgICBpbnN0YW5jZS5zZXRPcHRpb25zKG9wdGlvbnMpLnRoZW4oZnVuY3Rpb24gKHN0YXRlKSB7XG4gICAgICBpZiAoIWlzRGVzdHJveWVkICYmIG9wdGlvbnMub25GaXJzdFVwZGF0ZSkge1xuICAgICAgICBvcHRpb25zLm9uRmlyc3RVcGRhdGUoc3RhdGUpO1xuICAgICAgfVxuICAgIH0pOyAvLyBNb2RpZmllcnMgaGF2ZSB0aGUgYWJpbGl0eSB0byBleGVjdXRlIGFyYml0cmFyeSBjb2RlIGJlZm9yZSB0aGUgZmlyc3RcbiAgICAvLyB1cGRhdGUgY3ljbGUgcnVucy4gVGhleSB3aWxsIGJlIGV4ZWN1dGVkIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSB1cGRhdGVcbiAgICAvLyBjeWNsZS4gVGhpcyBpcyB1c2VmdWwgd2hlbiBhIG1vZGlmaWVyIGFkZHMgc29tZSBwZXJzaXN0ZW50IGRhdGEgdGhhdFxuICAgIC8vIG90aGVyIG1vZGlmaWVycyBuZWVkIHRvIHVzZSwgYnV0IHRoZSBtb2RpZmllciBpcyBydW4gYWZ0ZXIgdGhlIGRlcGVuZGVudFxuICAgIC8vIG9uZS5cblxuICAgIGZ1bmN0aW9uIHJ1bk1vZGlmaWVyRWZmZWN0cygpIHtcbiAgICAgIHN0YXRlLm9yZGVyZWRNb2RpZmllcnMuZm9yRWFjaChmdW5jdGlvbiAoX3JlZjMpIHtcbiAgICAgICAgdmFyIG5hbWUgPSBfcmVmMy5uYW1lLFxuICAgICAgICAgICAgX3JlZjMkb3B0aW9ucyA9IF9yZWYzLm9wdGlvbnMsXG4gICAgICAgICAgICBvcHRpb25zID0gX3JlZjMkb3B0aW9ucyA9PT0gdm9pZCAwID8ge30gOiBfcmVmMyRvcHRpb25zLFxuICAgICAgICAgICAgZWZmZWN0ID0gX3JlZjMuZWZmZWN0O1xuXG4gICAgICAgIGlmICh0eXBlb2YgZWZmZWN0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgdmFyIGNsZWFudXBGbiA9IGVmZmVjdCh7XG4gICAgICAgICAgICBzdGF0ZTogc3RhdGUsXG4gICAgICAgICAgICBuYW1lOiBuYW1lLFxuICAgICAgICAgICAgaW5zdGFuY2U6IGluc3RhbmNlLFxuICAgICAgICAgICAgb3B0aW9uczogb3B0aW9uc1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgdmFyIG5vb3BGbiA9IGZ1bmN0aW9uIG5vb3BGbigpIHt9O1xuXG4gICAgICAgICAgZWZmZWN0Q2xlYW51cEZucy5wdXNoKGNsZWFudXBGbiB8fCBub29wRm4pO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjbGVhbnVwTW9kaWZpZXJFZmZlY3RzKCkge1xuICAgICAgZWZmZWN0Q2xlYW51cEZucy5mb3JFYWNoKGZ1bmN0aW9uIChmbikge1xuICAgICAgICByZXR1cm4gZm4oKTtcbiAgICAgIH0pO1xuICAgICAgZWZmZWN0Q2xlYW51cEZucyA9IFtdO1xuICAgIH1cblxuICAgIHJldHVybiBpbnN0YW5jZTtcbiAgfTtcbn1cbmV4cG9ydCB2YXIgY3JlYXRlUG9wcGVyID0gLyojX19QVVJFX18qL3BvcHBlckdlbmVyYXRvcigpOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCB7IGRldGVjdE92ZXJmbG93IH07IiwiaW1wb3J0IHsgcG9wcGVyR2VuZXJhdG9yLCBkZXRlY3RPdmVyZmxvdyB9IGZyb20gXCIuL2NyZWF0ZVBvcHBlci5qc1wiO1xuaW1wb3J0IGV2ZW50TGlzdGVuZXJzIGZyb20gXCIuL21vZGlmaWVycy9ldmVudExpc3RlbmVycy5qc1wiO1xuaW1wb3J0IHBvcHBlck9mZnNldHMgZnJvbSBcIi4vbW9kaWZpZXJzL3BvcHBlck9mZnNldHMuanNcIjtcbmltcG9ydCBjb21wdXRlU3R5bGVzIGZyb20gXCIuL21vZGlmaWVycy9jb21wdXRlU3R5bGVzLmpzXCI7XG5pbXBvcnQgYXBwbHlTdHlsZXMgZnJvbSBcIi4vbW9kaWZpZXJzL2FwcGx5U3R5bGVzLmpzXCI7XG52YXIgZGVmYXVsdE1vZGlmaWVycyA9IFtldmVudExpc3RlbmVycywgcG9wcGVyT2Zmc2V0cywgY29tcHV0ZVN0eWxlcywgYXBwbHlTdHlsZXNdO1xudmFyIGNyZWF0ZVBvcHBlciA9IC8qI19fUFVSRV9fKi9wb3BwZXJHZW5lcmF0b3Ioe1xuICBkZWZhdWx0TW9kaWZpZXJzOiBkZWZhdWx0TW9kaWZpZXJzXG59KTsgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIGltcG9ydC9uby11bnVzZWQtbW9kdWxlc1xuXG5leHBvcnQgeyBjcmVhdGVQb3BwZXIsIHBvcHBlckdlbmVyYXRvciwgZGVmYXVsdE1vZGlmaWVycywgZGV0ZWN0T3ZlcmZsb3cgfTsiLCJpbXBvcnQgeyBwb3BwZXJHZW5lcmF0b3IsIGRldGVjdE92ZXJmbG93IH0gZnJvbSBcIi4vY3JlYXRlUG9wcGVyLmpzXCI7XG5pbXBvcnQgZXZlbnRMaXN0ZW5lcnMgZnJvbSBcIi4vbW9kaWZpZXJzL2V2ZW50TGlzdGVuZXJzLmpzXCI7XG5pbXBvcnQgcG9wcGVyT2Zmc2V0cyBmcm9tIFwiLi9tb2RpZmllcnMvcG9wcGVyT2Zmc2V0cy5qc1wiO1xuaW1wb3J0IGNvbXB1dGVTdHlsZXMgZnJvbSBcIi4vbW9kaWZpZXJzL2NvbXB1dGVTdHlsZXMuanNcIjtcbmltcG9ydCBhcHBseVN0eWxlcyBmcm9tIFwiLi9tb2RpZmllcnMvYXBwbHlTdHlsZXMuanNcIjtcbmltcG9ydCBvZmZzZXQgZnJvbSBcIi4vbW9kaWZpZXJzL29mZnNldC5qc1wiO1xuaW1wb3J0IGZsaXAgZnJvbSBcIi4vbW9kaWZpZXJzL2ZsaXAuanNcIjtcbmltcG9ydCBwcmV2ZW50T3ZlcmZsb3cgZnJvbSBcIi4vbW9kaWZpZXJzL3ByZXZlbnRPdmVyZmxvdy5qc1wiO1xuaW1wb3J0IGFycm93IGZyb20gXCIuL21vZGlmaWVycy9hcnJvdy5qc1wiO1xuaW1wb3J0IGhpZGUgZnJvbSBcIi4vbW9kaWZpZXJzL2hpZGUuanNcIjtcbnZhciBkZWZhdWx0TW9kaWZpZXJzID0gW2V2ZW50TGlzdGVuZXJzLCBwb3BwZXJPZmZzZXRzLCBjb21wdXRlU3R5bGVzLCBhcHBseVN0eWxlcywgb2Zmc2V0LCBmbGlwLCBwcmV2ZW50T3ZlcmZsb3csIGFycm93LCBoaWRlXTtcbnZhciBjcmVhdGVQb3BwZXIgPSAvKiNfX1BVUkVfXyovcG9wcGVyR2VuZXJhdG9yKHtcbiAgZGVmYXVsdE1vZGlmaWVyczogZGVmYXVsdE1vZGlmaWVyc1xufSk7IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyLCBwb3BwZXJHZW5lcmF0b3IsIGRlZmF1bHRNb2RpZmllcnMsIGRldGVjdE92ZXJmbG93IH07IC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBpbXBvcnQvbm8tdW51c2VkLW1vZHVsZXNcblxuZXhwb3J0IHsgY3JlYXRlUG9wcGVyIGFzIGNyZWF0ZVBvcHBlckxpdGUgfSBmcm9tIFwiLi9wb3BwZXItbGl0ZS5qc1wiOyAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgaW1wb3J0L25vLXVudXNlZC1tb2R1bGVzXG5cbmV4cG9ydCAqIGZyb20gXCIuL21vZGlmaWVycy9pbmRleC5qc1wiOyIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMS4zKTogZHJvcGRvd24uanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgKiBhcyBQb3BwZXIgZnJvbSAnQHBvcHBlcmpzL2NvcmUnXG5cbmltcG9ydCB7XG4gIGRlZmluZUpRdWVyeVBsdWdpbixcbiAgZ2V0RWxlbWVudCxcbiAgZ2V0RWxlbWVudEZyb21TZWxlY3RvcixcbiAgZ2V0TmV4dEFjdGl2ZUVsZW1lbnQsXG4gIGlzRGlzYWJsZWQsXG4gIGlzRWxlbWVudCxcbiAgaXNSVEwsXG4gIGlzVmlzaWJsZSxcbiAgbm9vcCxcbiAgdHlwZUNoZWNrQ29uZmlnXG59IGZyb20gJy4vdXRpbC9pbmRleCdcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlcidcbmltcG9ydCBNYW5pcHVsYXRvciBmcm9tICcuL2RvbS9tYW5pcHVsYXRvcidcbmltcG9ydCBTZWxlY3RvckVuZ2luZSBmcm9tICcuL2RvbS9zZWxlY3Rvci1lbmdpbmUnXG5pbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tICcuL2Jhc2UtY29tcG9uZW50J1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ29uc3RhbnRzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCBOQU1FID0gJ2Ryb3Bkb3duJ1xuY29uc3QgREFUQV9LRVkgPSAnYnMuZHJvcGRvd24nXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSdcblxuY29uc3QgRVNDQVBFX0tFWSA9ICdFc2NhcGUnXG5jb25zdCBTUEFDRV9LRVkgPSAnU3BhY2UnXG5jb25zdCBUQUJfS0VZID0gJ1RhYidcbmNvbnN0IEFSUk9XX1VQX0tFWSA9ICdBcnJvd1VwJ1xuY29uc3QgQVJST1dfRE9XTl9LRVkgPSAnQXJyb3dEb3duJ1xuY29uc3QgUklHSFRfTU9VU0VfQlVUVE9OID0gMiAvLyBNb3VzZUV2ZW50LmJ1dHRvbiB2YWx1ZSBmb3IgdGhlIHNlY29uZGFyeSBidXR0b24sIHVzdWFsbHkgdGhlIHJpZ2h0IGJ1dHRvblxuXG5jb25zdCBSRUdFWFBfS0VZRE9XTiA9IG5ldyBSZWdFeHAoYCR7QVJST1dfVVBfS0VZfXwke0FSUk9XX0RPV05fS0VZfXwke0VTQ0FQRV9LRVl9YClcblxuY29uc3QgRVZFTlRfSElERSA9IGBoaWRlJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfSElEREVOID0gYGhpZGRlbiR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NIT1cgPSBgc2hvdyR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NIT1dOID0gYHNob3duJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfQ0xJQ0tfREFUQV9BUEkgPSBgY2xpY2ske0VWRU5UX0tFWX0ke0RBVEFfQVBJX0tFWX1gXG5jb25zdCBFVkVOVF9LRVlET1dOX0RBVEFfQVBJID0gYGtleWRvd24ke0VWRU5UX0tFWX0ke0RBVEFfQVBJX0tFWX1gXG5jb25zdCBFVkVOVF9LRVlVUF9EQVRBX0FQSSA9IGBrZXl1cCR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcblxuY29uc3QgQ0xBU1NfTkFNRV9TSE9XID0gJ3Nob3cnXG5jb25zdCBDTEFTU19OQU1FX0RST1BVUCA9ICdkcm9wdXAnXG5jb25zdCBDTEFTU19OQU1FX0RST1BFTkQgPSAnZHJvcGVuZCdcbmNvbnN0IENMQVNTX05BTUVfRFJPUFNUQVJUID0gJ2Ryb3BzdGFydCdcbmNvbnN0IENMQVNTX05BTUVfTkFWQkFSID0gJ25hdmJhcidcblxuY29uc3QgU0VMRUNUT1JfREFUQV9UT0dHTEUgPSAnW2RhdGEtYnMtdG9nZ2xlPVwiZHJvcGRvd25cIl0nXG5jb25zdCBTRUxFQ1RPUl9NRU5VID0gJy5kcm9wZG93bi1tZW51J1xuY29uc3QgU0VMRUNUT1JfTkFWQkFSX05BViA9ICcubmF2YmFyLW5hdidcbmNvbnN0IFNFTEVDVE9SX1ZJU0lCTEVfSVRFTVMgPSAnLmRyb3Bkb3duLW1lbnUgLmRyb3Bkb3duLWl0ZW06bm90KC5kaXNhYmxlZCk6bm90KDpkaXNhYmxlZCknXG5cbmNvbnN0IFBMQUNFTUVOVF9UT1AgPSBpc1JUTCgpID8gJ3RvcC1lbmQnIDogJ3RvcC1zdGFydCdcbmNvbnN0IFBMQUNFTUVOVF9UT1BFTkQgPSBpc1JUTCgpID8gJ3RvcC1zdGFydCcgOiAndG9wLWVuZCdcbmNvbnN0IFBMQUNFTUVOVF9CT1RUT00gPSBpc1JUTCgpID8gJ2JvdHRvbS1lbmQnIDogJ2JvdHRvbS1zdGFydCdcbmNvbnN0IFBMQUNFTUVOVF9CT1RUT01FTkQgPSBpc1JUTCgpID8gJ2JvdHRvbS1zdGFydCcgOiAnYm90dG9tLWVuZCdcbmNvbnN0IFBMQUNFTUVOVF9SSUdIVCA9IGlzUlRMKCkgPyAnbGVmdC1zdGFydCcgOiAncmlnaHQtc3RhcnQnXG5jb25zdCBQTEFDRU1FTlRfTEVGVCA9IGlzUlRMKCkgPyAncmlnaHQtc3RhcnQnIDogJ2xlZnQtc3RhcnQnXG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIG9mZnNldDogWzAsIDJdLFxuICBib3VuZGFyeTogJ2NsaXBwaW5nUGFyZW50cycsXG4gIHJlZmVyZW5jZTogJ3RvZ2dsZScsXG4gIGRpc3BsYXk6ICdkeW5hbWljJyxcbiAgcG9wcGVyQ29uZmlnOiBudWxsLFxuICBhdXRvQ2xvc2U6IHRydWVcbn1cblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIG9mZnNldDogJyhhcnJheXxzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgYm91bmRhcnk6ICcoc3RyaW5nfGVsZW1lbnQpJyxcbiAgcmVmZXJlbmNlOiAnKHN0cmluZ3xlbGVtZW50fG9iamVjdCknLFxuICBkaXNwbGF5OiAnc3RyaW5nJyxcbiAgcG9wcGVyQ29uZmlnOiAnKG51bGx8b2JqZWN0fGZ1bmN0aW9uKScsXG4gIGF1dG9DbG9zZTogJyhib29sZWFufHN0cmluZyknXG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDbGFzcyBEZWZpbml0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jbGFzcyBEcm9wZG93biBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50KVxuXG4gICAgdGhpcy5fcG9wcGVyID0gbnVsbFxuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpXG4gICAgdGhpcy5fbWVudSA9IHRoaXMuX2dldE1lbnVFbGVtZW50KClcbiAgICB0aGlzLl9pbk5hdmJhciA9IHRoaXMuX2RldGVjdE5hdmJhcigpXG4gIH1cblxuICAvLyBHZXR0ZXJzXG5cbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZVxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcblxuICB0b2dnbGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU2hvd24oKSA/IHRoaXMuaGlkZSgpIDogdGhpcy5zaG93KClcbiAgfVxuXG4gIHNob3coKSB7XG4gICAgaWYgKGlzRGlzYWJsZWQodGhpcy5fZWxlbWVudCkgfHwgdGhpcy5faXNTaG93bih0aGlzLl9tZW51KSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgcmVsYXRlZFRhcmdldCA9IHtcbiAgICAgIHJlbGF0ZWRUYXJnZXQ6IHRoaXMuX2VsZW1lbnRcbiAgICB9XG5cbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XLCByZWxhdGVkVGFyZ2V0KVxuXG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBwYXJlbnQgPSBEcm9wZG93bi5nZXRQYXJlbnRGcm9tRWxlbWVudCh0aGlzLl9lbGVtZW50KVxuICAgIC8vIFRvdGFsbHkgZGlzYWJsZSBQb3BwZXIgZm9yIERyb3Bkb3ducyBpbiBOYXZiYXJcbiAgICBpZiAodGhpcy5faW5OYXZiYXIpIHtcbiAgICAgIE1hbmlwdWxhdG9yLnNldERhdGFBdHRyaWJ1dGUodGhpcy5fbWVudSwgJ3BvcHBlcicsICdub25lJylcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fY3JlYXRlUG9wcGVyKHBhcmVudClcbiAgICB9XG5cbiAgICAvLyBJZiB0aGlzIGlzIGEgdG91Y2gtZW5hYmxlZCBkZXZpY2Ugd2UgYWRkIGV4dHJhXG4gICAgLy8gZW1wdHkgbW91c2VvdmVyIGxpc3RlbmVycyB0byB0aGUgYm9keSdzIGltbWVkaWF0ZSBjaGlsZHJlbjtcbiAgICAvLyBvbmx5IG5lZWRlZCBiZWNhdXNlIG9mIGJyb2tlbiBldmVudCBkZWxlZ2F0aW9uIG9uIGlPU1xuICAgIC8vIGh0dHBzOi8vd3d3LnF1aXJrc21vZGUub3JnL2Jsb2cvYXJjaGl2ZXMvMjAxNC8wMi9tb3VzZV9ldmVudF9idWIuaHRtbFxuICAgIGlmICgnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgJiZcbiAgICAgICFwYXJlbnQuY2xvc2VzdChTRUxFQ1RPUl9OQVZCQVJfTkFWKSkge1xuICAgICAgW10uY29uY2F0KC4uLmRvY3VtZW50LmJvZHkuY2hpbGRyZW4pXG4gICAgICAgIC5mb3JFYWNoKGVsZW0gPT4gRXZlbnRIYW5kbGVyLm9uKGVsZW0sICdtb3VzZW92ZXInLCBub29wKSlcbiAgICB9XG5cbiAgICB0aGlzLl9lbGVtZW50LmZvY3VzKClcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1leHBhbmRlZCcsIHRydWUpXG5cbiAgICB0aGlzLl9tZW51LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XKVxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1cpXG4gICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPV04sIHJlbGF0ZWRUYXJnZXQpXG4gIH1cblxuICBoaWRlKCkge1xuICAgIGlmIChpc0Rpc2FibGVkKHRoaXMuX2VsZW1lbnQpIHx8ICF0aGlzLl9pc1Nob3duKHRoaXMuX21lbnUpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCByZWxhdGVkVGFyZ2V0ID0ge1xuICAgICAgcmVsYXRlZFRhcmdldDogdGhpcy5fZWxlbWVudFxuICAgIH1cblxuICAgIHRoaXMuX2NvbXBsZXRlSGlkZShyZWxhdGVkVGFyZ2V0KVxuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICBpZiAodGhpcy5fcG9wcGVyKSB7XG4gICAgICB0aGlzLl9wb3BwZXIuZGVzdHJveSgpXG4gICAgfVxuXG4gICAgc3VwZXIuZGlzcG9zZSgpXG4gIH1cblxuICB1cGRhdGUoKSB7XG4gICAgdGhpcy5faW5OYXZiYXIgPSB0aGlzLl9kZXRlY3ROYXZiYXIoKVxuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHRoaXMuX3BvcHBlci51cGRhdGUoKVxuICAgIH1cbiAgfVxuXG4gIC8vIFByaXZhdGVcblxuICBfY29tcGxldGVIaWRlKHJlbGF0ZWRUYXJnZXQpIHtcbiAgICBjb25zdCBoaWRlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFLCByZWxhdGVkVGFyZ2V0KVxuICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gSWYgdGhpcyBpcyBhIHRvdWNoLWVuYWJsZWQgZGV2aWNlIHdlIHJlbW92ZSB0aGUgZXh0cmFcbiAgICAvLyBlbXB0eSBtb3VzZW92ZXIgbGlzdGVuZXJzIHdlIGFkZGVkIGZvciBpT1Mgc3VwcG9ydFxuICAgIGlmICgnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIFtdLmNvbmNhdCguLi5kb2N1bWVudC5ib2R5LmNoaWxkcmVuKVxuICAgICAgICAuZm9yRWFjaChlbGVtID0+IEV2ZW50SGFuZGxlci5vZmYoZWxlbSwgJ21vdXNlb3ZlcicsIG5vb3ApKVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHRoaXMuX3BvcHBlci5kZXN0cm95KClcbiAgICB9XG5cbiAgICB0aGlzLl9tZW51LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XKVxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpXG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtZXhwYW5kZWQnLCAnZmFsc2UnKVxuICAgIE1hbmlwdWxhdG9yLnJlbW92ZURhdGFBdHRyaWJ1dGUodGhpcy5fbWVudSwgJ3BvcHBlcicpXG4gICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElEREVOLCByZWxhdGVkVGFyZ2V0KVxuICB9XG5cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25maWcgPSB7XG4gICAgICAuLi50aGlzLmNvbnN0cnVjdG9yLkRlZmF1bHQsXG4gICAgICAuLi5NYW5pcHVsYXRvci5nZXREYXRhQXR0cmlidXRlcyh0aGlzLl9lbGVtZW50KSxcbiAgICAgIC4uLmNvbmZpZ1xuICAgIH1cblxuICAgIHR5cGVDaGVja0NvbmZpZyhOQU1FLCBjb25maWcsIHRoaXMuY29uc3RydWN0b3IuRGVmYXVsdFR5cGUpXG5cbiAgICBpZiAodHlwZW9mIGNvbmZpZy5yZWZlcmVuY2UgPT09ICdvYmplY3QnICYmICFpc0VsZW1lbnQoY29uZmlnLnJlZmVyZW5jZSkgJiZcbiAgICAgIHR5cGVvZiBjb25maWcucmVmZXJlbmNlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCAhPT0gJ2Z1bmN0aW9uJ1xuICAgICkge1xuICAgICAgLy8gUG9wcGVyIHZpcnR1YWwgZWxlbWVudHMgcmVxdWlyZSBhIGdldEJvdW5kaW5nQ2xpZW50UmVjdCBtZXRob2RcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYCR7TkFNRS50b1VwcGVyQ2FzZSgpfTogT3B0aW9uIFwicmVmZXJlbmNlXCIgcHJvdmlkZWQgdHlwZSBcIm9iamVjdFwiIHdpdGhvdXQgYSByZXF1aXJlZCBcImdldEJvdW5kaW5nQ2xpZW50UmVjdFwiIG1ldGhvZC5gKVxuICAgIH1cblxuICAgIHJldHVybiBjb25maWdcbiAgfVxuXG4gIF9jcmVhdGVQb3BwZXIocGFyZW50KSB7XG4gICAgaWYgKHR5cGVvZiBQb3BwZXIgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb290c3RyYXBcXCdzIGRyb3Bkb3ducyByZXF1aXJlIFBvcHBlciAoaHR0cHM6Ly9wb3BwZXIuanMub3JnKScpXG4gICAgfVxuXG4gICAgbGV0IHJlZmVyZW5jZUVsZW1lbnQgPSB0aGlzLl9lbGVtZW50XG5cbiAgICBpZiAodGhpcy5fY29uZmlnLnJlZmVyZW5jZSA9PT0gJ3BhcmVudCcpIHtcbiAgICAgIHJlZmVyZW5jZUVsZW1lbnQgPSBwYXJlbnRcbiAgICB9IGVsc2UgaWYgKGlzRWxlbWVudCh0aGlzLl9jb25maWcucmVmZXJlbmNlKSkge1xuICAgICAgcmVmZXJlbmNlRWxlbWVudCA9IGdldEVsZW1lbnQodGhpcy5fY29uZmlnLnJlZmVyZW5jZSlcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiB0aGlzLl9jb25maWcucmVmZXJlbmNlID09PSAnb2JqZWN0Jykge1xuICAgICAgcmVmZXJlbmNlRWxlbWVudCA9IHRoaXMuX2NvbmZpZy5yZWZlcmVuY2VcbiAgICB9XG5cbiAgICBjb25zdCBwb3BwZXJDb25maWcgPSB0aGlzLl9nZXRQb3BwZXJDb25maWcoKVxuICAgIGNvbnN0IGlzRGlzcGxheVN0YXRpYyA9IHBvcHBlckNvbmZpZy5tb2RpZmllcnMuZmluZChtb2RpZmllciA9PiBtb2RpZmllci5uYW1lID09PSAnYXBwbHlTdHlsZXMnICYmIG1vZGlmaWVyLmVuYWJsZWQgPT09IGZhbHNlKVxuXG4gICAgdGhpcy5fcG9wcGVyID0gUG9wcGVyLmNyZWF0ZVBvcHBlcihyZWZlcmVuY2VFbGVtZW50LCB0aGlzLl9tZW51LCBwb3BwZXJDb25maWcpXG5cbiAgICBpZiAoaXNEaXNwbGF5U3RhdGljKSB7XG4gICAgICBNYW5pcHVsYXRvci5zZXREYXRhQXR0cmlidXRlKHRoaXMuX21lbnUsICdwb3BwZXInLCAnc3RhdGljJylcbiAgICB9XG4gIH1cblxuICBfaXNTaG93bihlbGVtZW50ID0gdGhpcy5fZWxlbWVudCkge1xuICAgIHJldHVybiBlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NIT1cpXG4gIH1cblxuICBfZ2V0TWVudUVsZW1lbnQoKSB7XG4gICAgcmV0dXJuIFNlbGVjdG9yRW5naW5lLm5leHQodGhpcy5fZWxlbWVudCwgU0VMRUNUT1JfTUVOVSlbMF1cbiAgfVxuXG4gIF9nZXRQbGFjZW1lbnQoKSB7XG4gICAgY29uc3QgcGFyZW50RHJvcGRvd24gPSB0aGlzLl9lbGVtZW50LnBhcmVudE5vZGVcblxuICAgIGlmIChwYXJlbnREcm9wZG93bi5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9EUk9QRU5EKSkge1xuICAgICAgcmV0dXJuIFBMQUNFTUVOVF9SSUdIVFxuICAgIH1cblxuICAgIGlmIChwYXJlbnREcm9wZG93bi5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9EUk9QU1RBUlQpKSB7XG4gICAgICByZXR1cm4gUExBQ0VNRU5UX0xFRlRcbiAgICB9XG5cbiAgICAvLyBXZSBuZWVkIHRvIHRyaW0gdGhlIHZhbHVlIGJlY2F1c2UgY3VzdG9tIHByb3BlcnRpZXMgY2FuIGFsc28gaW5jbHVkZSBzcGFjZXNcbiAgICBjb25zdCBpc0VuZCA9IGdldENvbXB1dGVkU3R5bGUodGhpcy5fbWVudSkuZ2V0UHJvcGVydHlWYWx1ZSgnLS1icy1wb3NpdGlvbicpLnRyaW0oKSA9PT0gJ2VuZCdcblxuICAgIGlmIChwYXJlbnREcm9wZG93bi5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9EUk9QVVApKSB7XG4gICAgICByZXR1cm4gaXNFbmQgPyBQTEFDRU1FTlRfVE9QRU5EIDogUExBQ0VNRU5UX1RPUFxuICAgIH1cblxuICAgIHJldHVybiBpc0VuZCA/IFBMQUNFTUVOVF9CT1RUT01FTkQgOiBQTEFDRU1FTlRfQk9UVE9NXG4gIH1cblxuICBfZGV0ZWN0TmF2YmFyKCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50LmNsb3Nlc3QoYC4ke0NMQVNTX05BTUVfTkFWQkFSfWApICE9PSBudWxsXG4gIH1cblxuICBfZ2V0T2Zmc2V0KCkge1xuICAgIGNvbnN0IHsgb2Zmc2V0IH0gPSB0aGlzLl9jb25maWdcblxuICAgIGlmICh0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgcmV0dXJuIG9mZnNldC5zcGxpdCgnLCcpLm1hcCh2YWwgPT4gTnVtYmVyLnBhcnNlSW50KHZhbCwgMTApKVxuICAgIH1cblxuICAgIGlmICh0eXBlb2Ygb2Zmc2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICByZXR1cm4gcG9wcGVyRGF0YSA9PiBvZmZzZXQocG9wcGVyRGF0YSwgdGhpcy5fZWxlbWVudClcbiAgICB9XG5cbiAgICByZXR1cm4gb2Zmc2V0XG4gIH1cblxuICBfZ2V0UG9wcGVyQ29uZmlnKCkge1xuICAgIGNvbnN0IGRlZmF1bHRCc1BvcHBlckNvbmZpZyA9IHtcbiAgICAgIHBsYWNlbWVudDogdGhpcy5fZ2V0UGxhY2VtZW50KCksXG4gICAgICBtb2RpZmllcnM6IFt7XG4gICAgICAgIG5hbWU6ICdwcmV2ZW50T3ZlcmZsb3cnLFxuICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgYm91bmRhcnk6IHRoaXMuX2NvbmZpZy5ib3VuZGFyeVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAge1xuICAgICAgICBuYW1lOiAnb2Zmc2V0JyxcbiAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgIG9mZnNldDogdGhpcy5fZ2V0T2Zmc2V0KClcbiAgICAgICAgfVxuICAgICAgfV1cbiAgICB9XG5cbiAgICAvLyBEaXNhYmxlIFBvcHBlciBpZiB3ZSBoYXZlIGEgc3RhdGljIGRpc3BsYXlcbiAgICBpZiAodGhpcy5fY29uZmlnLmRpc3BsYXkgPT09ICdzdGF0aWMnKSB7XG4gICAgICBkZWZhdWx0QnNQb3BwZXJDb25maWcubW9kaWZpZXJzID0gW3tcbiAgICAgICAgbmFtZTogJ2FwcGx5U3R5bGVzJyxcbiAgICAgICAgZW5hYmxlZDogZmFsc2VcbiAgICAgIH1dXG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZmF1bHRCc1BvcHBlckNvbmZpZyxcbiAgICAgIC4uLih0eXBlb2YgdGhpcy5fY29uZmlnLnBvcHBlckNvbmZpZyA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMuX2NvbmZpZy5wb3BwZXJDb25maWcoZGVmYXVsdEJzUG9wcGVyQ29uZmlnKSA6IHRoaXMuX2NvbmZpZy5wb3BwZXJDb25maWcpXG4gICAgfVxuICB9XG5cbiAgX3NlbGVjdE1lbnVJdGVtKHsga2V5LCB0YXJnZXQgfSkge1xuICAgIGNvbnN0IGl0ZW1zID0gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9WSVNJQkxFX0lURU1TLCB0aGlzLl9tZW51KS5maWx0ZXIoaXNWaXNpYmxlKVxuXG4gICAgaWYgKCFpdGVtcy5sZW5ndGgpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIC8vIGlmIHRhcmdldCBpc24ndCBpbmNsdWRlZCBpbiBpdGVtcyAoZS5nLiB3aGVuIGV4cGFuZGluZyB0aGUgZHJvcGRvd24pXG4gICAgLy8gYWxsb3cgY3ljbGluZyB0byBnZXQgdGhlIGxhc3QgaXRlbSBpbiBjYXNlIGtleSBlcXVhbHMgQVJST1dfVVBfS0VZXG4gICAgZ2V0TmV4dEFjdGl2ZUVsZW1lbnQoaXRlbXMsIHRhcmdldCwga2V5ID09PSBBUlJPV19ET1dOX0tFWSwgIWl0ZW1zLmluY2x1ZGVzKHRhcmdldCkpLmZvY3VzKClcbiAgfVxuXG4gIC8vIFN0YXRpY1xuXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnKSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gRHJvcGRvd24uZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpXG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYClcbiAgICAgIH1cblxuICAgICAgZGF0YVtjb25maWddKClcbiAgICB9KVxuICB9XG5cbiAgc3RhdGljIGNsZWFyTWVudXMoZXZlbnQpIHtcbiAgICBpZiAoZXZlbnQgJiYgKGV2ZW50LmJ1dHRvbiA9PT0gUklHSFRfTU9VU0VfQlVUVE9OIHx8IChldmVudC50eXBlID09PSAna2V5dXAnICYmIGV2ZW50LmtleSAhPT0gVEFCX0tFWSkpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCB0b2dnbGVzID0gU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9EQVRBX1RPR0dMRSlcblxuICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0b2dnbGVzLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICBjb25zdCBjb250ZXh0ID0gRHJvcGRvd24uZ2V0SW5zdGFuY2UodG9nZ2xlc1tpXSlcbiAgICAgIGlmICghY29udGV4dCB8fCBjb250ZXh0Ll9jb25maWcuYXV0b0Nsb3NlID09PSBmYWxzZSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBpZiAoIWNvbnRleHQuX2lzU2hvd24oKSkge1xuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICBjb25zdCByZWxhdGVkVGFyZ2V0ID0ge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiBjb250ZXh0Ll9lbGVtZW50XG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudCkge1xuICAgICAgICBjb25zdCBjb21wb3NlZFBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKVxuICAgICAgICBjb25zdCBpc01lbnVUYXJnZXQgPSBjb21wb3NlZFBhdGguaW5jbHVkZXMoY29udGV4dC5fbWVudSlcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGNvbXBvc2VkUGF0aC5pbmNsdWRlcyhjb250ZXh0Ll9lbGVtZW50KSB8fFxuICAgICAgICAgIChjb250ZXh0Ll9jb25maWcuYXV0b0Nsb3NlID09PSAnaW5zaWRlJyAmJiAhaXNNZW51VGFyZ2V0KSB8fFxuICAgICAgICAgIChjb250ZXh0Ll9jb25maWcuYXV0b0Nsb3NlID09PSAnb3V0c2lkZScgJiYgaXNNZW51VGFyZ2V0KVxuICAgICAgICApIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gVGFiIG5hdmlnYXRpb24gdGhyb3VnaCB0aGUgZHJvcGRvd24gbWVudSBvciBldmVudHMgZnJvbSBjb250YWluZWQgaW5wdXRzIHNob3VsZG4ndCBjbG9zZSB0aGUgbWVudVxuICAgICAgICBpZiAoY29udGV4dC5fbWVudS5jb250YWlucyhldmVudC50YXJnZXQpICYmICgoZXZlbnQudHlwZSA9PT0gJ2tleXVwJyAmJiBldmVudC5rZXkgPT09IFRBQl9LRVkpIHx8IC9pbnB1dHxzZWxlY3R8b3B0aW9ufHRleHRhcmVhfGZvcm0vaS50ZXN0KGV2ZW50LnRhcmdldC50YWdOYW1lKSkpIHtcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICdjbGljaycpIHtcbiAgICAgICAgICByZWxhdGVkVGFyZ2V0LmNsaWNrRXZlbnQgPSBldmVudFxuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIGNvbnRleHQuX2NvbXBsZXRlSGlkZShyZWxhdGVkVGFyZ2V0KVxuICAgIH1cbiAgfVxuXG4gIHN0YXRpYyBnZXRQYXJlbnRGcm9tRWxlbWVudChlbGVtZW50KSB7XG4gICAgcmV0dXJuIGdldEVsZW1lbnRGcm9tU2VsZWN0b3IoZWxlbWVudCkgfHwgZWxlbWVudC5wYXJlbnROb2RlXG4gIH1cblxuICBzdGF0aWMgZGF0YUFwaUtleWRvd25IYW5kbGVyKGV2ZW50KSB7XG4gICAgLy8gSWYgbm90IGlucHV0L3RleHRhcmVhOlxuICAgIC8vICAtIEFuZCBub3QgYSBrZXkgaW4gUkVHRVhQX0tFWURPV04gPT4gbm90IGEgZHJvcGRvd24gY29tbWFuZFxuICAgIC8vIElmIGlucHV0L3RleHRhcmVhOlxuICAgIC8vICAtIElmIHNwYWNlIGtleSA9PiBub3QgYSBkcm9wZG93biBjb21tYW5kXG4gICAgLy8gIC0gSWYga2V5IGlzIG90aGVyIHRoYW4gZXNjYXBlXG4gICAgLy8gICAgLSBJZiBrZXkgaXMgbm90IHVwIG9yIGRvd24gPT4gbm90IGEgZHJvcGRvd24gY29tbWFuZFxuICAgIC8vICAgIC0gSWYgdHJpZ2dlciBpbnNpZGUgdGhlIG1lbnUgPT4gbm90IGEgZHJvcGRvd24gY29tbWFuZFxuICAgIGlmICgvaW5wdXR8dGV4dGFyZWEvaS50ZXN0KGV2ZW50LnRhcmdldC50YWdOYW1lKSA/XG4gICAgICBldmVudC5rZXkgPT09IFNQQUNFX0tFWSB8fCAoZXZlbnQua2V5ICE9PSBFU0NBUEVfS0VZICYmXG4gICAgICAoKGV2ZW50LmtleSAhPT0gQVJST1dfRE9XTl9LRVkgJiYgZXZlbnQua2V5ICE9PSBBUlJPV19VUF9LRVkpIHx8XG4gICAgICAgIGV2ZW50LnRhcmdldC5jbG9zZXN0KFNFTEVDVE9SX01FTlUpKSkgOlxuICAgICAgIVJFR0VYUF9LRVlET1dOLnRlc3QoZXZlbnQua2V5KSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgaXNBY3RpdmUgPSB0aGlzLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NIT1cpXG5cbiAgICBpZiAoIWlzQWN0aXZlICYmIGV2ZW50LmtleSA9PT0gRVNDQVBFX0tFWSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZXZlbnQucHJldmVudERlZmF1bHQoKVxuICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpXG5cbiAgICBpZiAoaXNEaXNhYmxlZCh0aGlzKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgZ2V0VG9nZ2xlQnV0dG9uID0gdGhpcy5tYXRjaGVzKFNFTEVDVE9SX0RBVEFfVE9HR0xFKSA/IHRoaXMgOiBTZWxlY3RvckVuZ2luZS5wcmV2KHRoaXMsIFNFTEVDVE9SX0RBVEFfVE9HR0xFKVswXVxuICAgIGNvbnN0IGluc3RhbmNlID0gRHJvcGRvd24uZ2V0T3JDcmVhdGVJbnN0YW5jZShnZXRUb2dnbGVCdXR0b24pXG5cbiAgICBpZiAoZXZlbnQua2V5ID09PSBFU0NBUEVfS0VZKSB7XG4gICAgICBpbnN0YW5jZS5oaWRlKClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChldmVudC5rZXkgPT09IEFSUk9XX1VQX0tFWSB8fCBldmVudC5rZXkgPT09IEFSUk9XX0RPV05fS0VZKSB7XG4gICAgICBpZiAoIWlzQWN0aXZlKSB7XG4gICAgICAgIGluc3RhbmNlLnNob3coKVxuICAgICAgfVxuXG4gICAgICBpbnN0YW5jZS5fc2VsZWN0TWVudUl0ZW0oZXZlbnQpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBpZiAoIWlzQWN0aXZlIHx8IGV2ZW50LmtleSA9PT0gU1BBQ0VfS0VZKSB7XG4gICAgICBEcm9wZG93bi5jbGVhck1lbnVzKClcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0tFWURPV05fREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfVE9HR0xFLCBEcm9wZG93bi5kYXRhQXBpS2V5ZG93bkhhbmRsZXIpXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0tFWURPV05fREFUQV9BUEksIFNFTEVDVE9SX01FTlUsIERyb3Bkb3duLmRhdGFBcGlLZXlkb3duSGFuZGxlcilcbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEksIERyb3Bkb3duLmNsZWFyTWVudXMpXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0tFWVVQX0RBVEFfQVBJLCBEcm9wZG93bi5jbGVhck1lbnVzKVxuRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9DTElDS19EQVRBX0FQSSwgU0VMRUNUT1JfREFUQV9UT0dHTEUsIGZ1bmN0aW9uIChldmVudCkge1xuICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gIERyb3Bkb3duLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcykudG9nZ2xlKClcbn0pXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBqUXVlcnlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogYWRkIC5Ecm9wZG93biB0byBqUXVlcnkgb25seSBpZiBqUXVlcnkgaXMgcHJlc2VudFxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihEcm9wZG93bilcblxuZXhwb3J0IGRlZmF1bHQgRHJvcGRvd25cbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMS4zKTogdXRpbC9zY3JvbGxCYXIuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi4vZG9tL3NlbGVjdG9yLWVuZ2luZSdcbmltcG9ydCBNYW5pcHVsYXRvciBmcm9tICcuLi9kb20vbWFuaXB1bGF0b3InXG5pbXBvcnQgeyBpc0VsZW1lbnQgfSBmcm9tICcuL2luZGV4J1xuXG5jb25zdCBTRUxFQ1RPUl9GSVhFRF9DT05URU5UID0gJy5maXhlZC10b3AsIC5maXhlZC1ib3R0b20sIC5pcy1maXhlZCwgLnN0aWNreS10b3AnXG5jb25zdCBTRUxFQ1RPUl9TVElDS1lfQ09OVEVOVCA9ICcuc3RpY2t5LXRvcCdcblxuY2xhc3MgU2Nyb2xsQmFySGVscGVyIHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgdGhpcy5fZWxlbWVudCA9IGRvY3VtZW50LmJvZHlcbiAgfVxuXG4gIGdldFdpZHRoKCkge1xuICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9XaW5kb3cvaW5uZXJXaWR0aCN1c2FnZV9ub3Rlc1xuICAgIGNvbnN0IGRvY3VtZW50V2lkdGggPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50V2lkdGhcbiAgICByZXR1cm4gTWF0aC5hYnMod2luZG93LmlubmVyV2lkdGggLSBkb2N1bWVudFdpZHRoKVxuICB9XG5cbiAgaGlkZSgpIHtcbiAgICBjb25zdCB3aWR0aCA9IHRoaXMuZ2V0V2lkdGgoKVxuICAgIHRoaXMuX2Rpc2FibGVPdmVyRmxvdygpXG4gICAgLy8gZ2l2ZSBwYWRkaW5nIHRvIGVsZW1lbnQgdG8gYmFsYW5jZSB0aGUgaGlkZGVuIHNjcm9sbGJhciB3aWR0aFxuICAgIHRoaXMuX3NldEVsZW1lbnRBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQsICdwYWRkaW5nUmlnaHQnLCBjYWxjdWxhdGVkVmFsdWUgPT4gY2FsY3VsYXRlZFZhbHVlICsgd2lkdGgpXG4gICAgLy8gdHJpY2s6IFdlIGFkanVzdCBwb3NpdGl2ZSBwYWRkaW5nUmlnaHQgYW5kIG5lZ2F0aXZlIG1hcmdpblJpZ2h0IHRvIHN0aWNreS10b3AgZWxlbWVudHMgdG8ga2VlcCBzaG93aW5nIGZ1bGx3aWR0aFxuICAgIHRoaXMuX3NldEVsZW1lbnRBdHRyaWJ1dGVzKFNFTEVDVE9SX0ZJWEVEX0NPTlRFTlQsICdwYWRkaW5nUmlnaHQnLCBjYWxjdWxhdGVkVmFsdWUgPT4gY2FsY3VsYXRlZFZhbHVlICsgd2lkdGgpXG4gICAgdGhpcy5fc2V0RWxlbWVudEF0dHJpYnV0ZXMoU0VMRUNUT1JfU1RJQ0tZX0NPTlRFTlQsICdtYXJnaW5SaWdodCcsIGNhbGN1bGF0ZWRWYWx1ZSA9PiBjYWxjdWxhdGVkVmFsdWUgLSB3aWR0aClcbiAgfVxuXG4gIF9kaXNhYmxlT3ZlckZsb3coKSB7XG4gICAgdGhpcy5fc2F2ZUluaXRpYWxBdHRyaWJ1dGUodGhpcy5fZWxlbWVudCwgJ292ZXJmbG93JylcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlLm92ZXJmbG93ID0gJ2hpZGRlbidcbiAgfVxuXG4gIF9zZXRFbGVtZW50QXR0cmlidXRlcyhzZWxlY3Rvciwgc3R5bGVQcm9wLCBjYWxsYmFjaykge1xuICAgIGNvbnN0IHNjcm9sbGJhcldpZHRoID0gdGhpcy5nZXRXaWR0aCgpXG4gICAgY29uc3QgbWFuaXB1bGF0aW9uQ2FsbEJhY2sgPSBlbGVtZW50ID0+IHtcbiAgICAgIGlmIChlbGVtZW50ICE9PSB0aGlzLl9lbGVtZW50ICYmIHdpbmRvdy5pbm5lcldpZHRoID4gZWxlbWVudC5jbGllbnRXaWR0aCArIHNjcm9sbGJhcldpZHRoKSB7XG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICB0aGlzLl9zYXZlSW5pdGlhbEF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3ApXG4gICAgICBjb25zdCBjYWxjdWxhdGVkVmFsdWUgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShlbGVtZW50KVtzdHlsZVByb3BdXG4gICAgICBlbGVtZW50LnN0eWxlW3N0eWxlUHJvcF0gPSBgJHtjYWxsYmFjayhOdW1iZXIucGFyc2VGbG9hdChjYWxjdWxhdGVkVmFsdWUpKX1weGBcbiAgICB9XG5cbiAgICB0aGlzLl9hcHBseU1hbmlwdWxhdGlvbkNhbGxiYWNrKHNlbGVjdG9yLCBtYW5pcHVsYXRpb25DYWxsQmFjaylcbiAgfVxuXG4gIHJlc2V0KCkge1xuICAgIHRoaXMuX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCwgJ292ZXJmbG93JylcbiAgICB0aGlzLl9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKHRoaXMuX2VsZW1lbnQsICdwYWRkaW5nUmlnaHQnKVxuICAgIHRoaXMuX3Jlc2V0RWxlbWVudEF0dHJpYnV0ZXMoU0VMRUNUT1JfRklYRURfQ09OVEVOVCwgJ3BhZGRpbmdSaWdodCcpXG4gICAgdGhpcy5fcmVzZXRFbGVtZW50QXR0cmlidXRlcyhTRUxFQ1RPUl9TVElDS1lfQ09OVEVOVCwgJ21hcmdpblJpZ2h0JylcbiAgfVxuXG4gIF9zYXZlSW5pdGlhbEF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3ApIHtcbiAgICBjb25zdCBhY3R1YWxWYWx1ZSA9IGVsZW1lbnQuc3R5bGVbc3R5bGVQcm9wXVxuICAgIGlmIChhY3R1YWxWYWx1ZSkge1xuICAgICAgTWFuaXB1bGF0b3Iuc2V0RGF0YUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3AsIGFjdHVhbFZhbHVlKVxuICAgIH1cbiAgfVxuXG4gIF9yZXNldEVsZW1lbnRBdHRyaWJ1dGVzKHNlbGVjdG9yLCBzdHlsZVByb3ApIHtcbiAgICBjb25zdCBtYW5pcHVsYXRpb25DYWxsQmFjayA9IGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgdmFsdWUgPSBNYW5pcHVsYXRvci5nZXREYXRhQXR0cmlidXRlKGVsZW1lbnQsIHN0eWxlUHJvcClcbiAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGVsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkoc3R5bGVQcm9wKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgTWFuaXB1bGF0b3IucmVtb3ZlRGF0YUF0dHJpYnV0ZShlbGVtZW50LCBzdHlsZVByb3ApXG4gICAgICAgIGVsZW1lbnQuc3R5bGVbc3R5bGVQcm9wXSA9IHZhbHVlXG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5fYXBwbHlNYW5pcHVsYXRpb25DYWxsYmFjayhzZWxlY3RvciwgbWFuaXB1bGF0aW9uQ2FsbEJhY2spXG4gIH1cblxuICBfYXBwbHlNYW5pcHVsYXRpb25DYWxsYmFjayhzZWxlY3RvciwgY2FsbEJhY2spIHtcbiAgICBpZiAoaXNFbGVtZW50KHNlbGVjdG9yKSkge1xuICAgICAgY2FsbEJhY2soc2VsZWN0b3IpXG4gICAgfSBlbHNlIHtcbiAgICAgIFNlbGVjdG9yRW5naW5lLmZpbmQoc2VsZWN0b3IsIHRoaXMuX2VsZW1lbnQpLmZvckVhY2goY2FsbEJhY2spXG4gICAgfVxuICB9XG5cbiAgaXNPdmVyZmxvd2luZygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRXaWR0aCgpID4gMFxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNjcm9sbEJhckhlbHBlclxuIiwiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4xLjMpOiB1dGlsL2JhY2tkcm9wLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuLi9kb20vZXZlbnQtaGFuZGxlcidcbmltcG9ydCB7IGV4ZWN1dGUsIGV4ZWN1dGVBZnRlclRyYW5zaXRpb24sIGdldEVsZW1lbnQsIHJlZmxvdywgdHlwZUNoZWNrQ29uZmlnIH0gZnJvbSAnLi9pbmRleCdcblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgY2xhc3NOYW1lOiAnbW9kYWwtYmFja2Ryb3AnLFxuICBpc1Zpc2libGU6IHRydWUsIC8vIGlmIGZhbHNlLCB3ZSB1c2UgdGhlIGJhY2tkcm9wIGhlbHBlciB3aXRob3V0IGFkZGluZyBhbnkgZWxlbWVudCB0byB0aGUgZG9tXG4gIGlzQW5pbWF0ZWQ6IGZhbHNlLFxuICByb290RWxlbWVudDogJ2JvZHknLCAvLyBnaXZlIHRoZSBjaG9pY2UgdG8gcGxhY2UgYmFja2Ryb3AgdW5kZXIgZGlmZmVyZW50IGVsZW1lbnRzXG4gIGNsaWNrQ2FsbGJhY2s6IG51bGxcbn1cblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIGNsYXNzTmFtZTogJ3N0cmluZycsXG4gIGlzVmlzaWJsZTogJ2Jvb2xlYW4nLFxuICBpc0FuaW1hdGVkOiAnYm9vbGVhbicsXG4gIHJvb3RFbGVtZW50OiAnKGVsZW1lbnR8c3RyaW5nKScsXG4gIGNsaWNrQ2FsbGJhY2s6ICcoZnVuY3Rpb258bnVsbCknXG59XG5jb25zdCBOQU1FID0gJ2JhY2tkcm9wJ1xuY29uc3QgQ0xBU1NfTkFNRV9GQURFID0gJ2ZhZGUnXG5jb25zdCBDTEFTU19OQU1FX1NIT1cgPSAnc2hvdydcblxuY29uc3QgRVZFTlRfTU9VU0VET1dOID0gYG1vdXNlZG93bi5icy4ke05BTUV9YFxuXG5jbGFzcyBCYWNrZHJvcCB7XG4gIGNvbnN0cnVjdG9yKGNvbmZpZykge1xuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpXG4gICAgdGhpcy5faXNBcHBlbmRlZCA9IGZhbHNlXG4gICAgdGhpcy5fZWxlbWVudCA9IG51bGxcbiAgfVxuXG4gIHNob3coY2FsbGJhY2spIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5pc1Zpc2libGUpIHtcbiAgICAgIGV4ZWN1dGUoY2FsbGJhY2spXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9hcHBlbmQoKVxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5pc0FuaW1hdGVkKSB7XG4gICAgICByZWZsb3codGhpcy5fZ2V0RWxlbWVudCgpKVxuICAgIH1cblxuICAgIHRoaXMuX2dldEVsZW1lbnQoKS5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVylcblxuICAgIHRoaXMuX2VtdWxhdGVBbmltYXRpb24oKCkgPT4ge1xuICAgICAgZXhlY3V0ZShjYWxsYmFjaylcbiAgICB9KVxuICB9XG5cbiAgaGlkZShjYWxsYmFjaykge1xuICAgIGlmICghdGhpcy5fY29uZmlnLmlzVmlzaWJsZSkge1xuICAgICAgZXhlY3V0ZShjYWxsYmFjaylcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2dldEVsZW1lbnQoKS5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPVylcblxuICAgIHRoaXMuX2VtdWxhdGVBbmltYXRpb24oKCkgPT4ge1xuICAgICAgdGhpcy5kaXNwb3NlKClcbiAgICAgIGV4ZWN1dGUoY2FsbGJhY2spXG4gICAgfSlcbiAgfVxuXG4gIC8vIFByaXZhdGVcblxuICBfZ2V0RWxlbWVudCgpIHtcbiAgICBpZiAoIXRoaXMuX2VsZW1lbnQpIHtcbiAgICAgIGNvbnN0IGJhY2tkcm9wID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICAgIGJhY2tkcm9wLmNsYXNzTmFtZSA9IHRoaXMuX2NvbmZpZy5jbGFzc05hbWVcbiAgICAgIGlmICh0aGlzLl9jb25maWcuaXNBbmltYXRlZCkge1xuICAgICAgICBiYWNrZHJvcC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfRkFERSlcbiAgICAgIH1cblxuICAgICAgdGhpcy5fZWxlbWVudCA9IGJhY2tkcm9wXG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX2VsZW1lbnRcbiAgfVxuXG4gIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgY29uZmlnID0ge1xuICAgICAgLi4uRGVmYXVsdCxcbiAgICAgIC4uLih0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyA/IGNvbmZpZyA6IHt9KVxuICAgIH1cblxuICAgIC8vIHVzZSBnZXRFbGVtZW50KCkgd2l0aCB0aGUgZGVmYXVsdCBcImJvZHlcIiB0byBnZXQgYSBmcmVzaCBFbGVtZW50IG9uIGVhY2ggaW5zdGFudGlhdGlvblxuICAgIGNvbmZpZy5yb290RWxlbWVudCA9IGdldEVsZW1lbnQoY29uZmlnLnJvb3RFbGVtZW50KVxuICAgIHR5cGVDaGVja0NvbmZpZyhOQU1FLCBjb25maWcsIERlZmF1bHRUeXBlKVxuICAgIHJldHVybiBjb25maWdcbiAgfVxuXG4gIF9hcHBlbmQoKSB7XG4gICAgaWYgKHRoaXMuX2lzQXBwZW5kZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2NvbmZpZy5yb290RWxlbWVudC5hcHBlbmQodGhpcy5fZ2V0RWxlbWVudCgpKVxuXG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2dldEVsZW1lbnQoKSwgRVZFTlRfTU9VU0VET1dOLCAoKSA9PiB7XG4gICAgICBleGVjdXRlKHRoaXMuX2NvbmZpZy5jbGlja0NhbGxiYWNrKVxuICAgIH0pXG5cbiAgICB0aGlzLl9pc0FwcGVuZGVkID0gdHJ1ZVxuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzQXBwZW5kZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VET1dOKVxuXG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmUoKVxuICAgIHRoaXMuX2lzQXBwZW5kZWQgPSBmYWxzZVxuICB9XG5cbiAgX2VtdWxhdGVBbmltYXRpb24oY2FsbGJhY2spIHtcbiAgICBleGVjdXRlQWZ0ZXJUcmFuc2l0aW9uKGNhbGxiYWNrLCB0aGlzLl9nZXRFbGVtZW50KCksIHRoaXMuX2NvbmZpZy5pc0FuaW1hdGVkKVxuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJhY2tkcm9wXG4iLCIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjEuMyk6IHV0aWwvZm9jdXN0cmFwLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuLi9kb20vZXZlbnQtaGFuZGxlcidcbmltcG9ydCBTZWxlY3RvckVuZ2luZSBmcm9tICcuLi9kb20vc2VsZWN0b3ItZW5naW5lJ1xuaW1wb3J0IHsgdHlwZUNoZWNrQ29uZmlnIH0gZnJvbSAnLi9pbmRleCdcblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgdHJhcEVsZW1lbnQ6IG51bGwsIC8vIFRoZSBlbGVtZW50IHRvIHRyYXAgZm9jdXMgaW5zaWRlIG9mXG4gIGF1dG9mb2N1czogdHJ1ZVxufVxuXG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgdHJhcEVsZW1lbnQ6ICdlbGVtZW50JyxcbiAgYXV0b2ZvY3VzOiAnYm9vbGVhbidcbn1cblxuY29uc3QgTkFNRSA9ICdmb2N1c3RyYXAnXG5jb25zdCBEQVRBX0tFWSA9ICdicy5mb2N1c3RyYXAnXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgRVZFTlRfRk9DVVNJTiA9IGBmb2N1c2luJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfS0VZRE9XTl9UQUIgPSBga2V5ZG93bi50YWIke0VWRU5UX0tFWX1gXG5cbmNvbnN0IFRBQl9LRVkgPSAnVGFiJ1xuY29uc3QgVEFCX05BVl9GT1JXQVJEID0gJ2ZvcndhcmQnXG5jb25zdCBUQUJfTkFWX0JBQ0tXQVJEID0gJ2JhY2t3YXJkJ1xuXG5jbGFzcyBGb2N1c1RyYXAge1xuICBjb25zdHJ1Y3Rvcihjb25maWcpIHtcbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKVxuICAgIHRoaXMuX2lzQWN0aXZlID0gZmFsc2VcbiAgICB0aGlzLl9sYXN0VGFiTmF2RGlyZWN0aW9uID0gbnVsbFxuICB9XG5cbiAgYWN0aXZhdGUoKSB7XG4gICAgY29uc3QgeyB0cmFwRWxlbWVudCwgYXV0b2ZvY3VzIH0gPSB0aGlzLl9jb25maWdcblxuICAgIGlmICh0aGlzLl9pc0FjdGl2ZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKGF1dG9mb2N1cykge1xuICAgICAgdHJhcEVsZW1lbnQuZm9jdXMoKVxuICAgIH1cblxuICAgIEV2ZW50SGFuZGxlci5vZmYoZG9jdW1lbnQsIEVWRU5UX0tFWSkgLy8gZ3VhcmQgYWdhaW5zdCBpbmZpbml0ZSBmb2N1cyBsb29wXG4gICAgRXZlbnRIYW5kbGVyLm9uKGRvY3VtZW50LCBFVkVOVF9GT0NVU0lOLCBldmVudCA9PiB0aGlzLl9oYW5kbGVGb2N1c2luKGV2ZW50KSlcbiAgICBFdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0tFWURPV05fVEFCLCBldmVudCA9PiB0aGlzLl9oYW5kbGVLZXlkb3duKGV2ZW50KSlcblxuICAgIHRoaXMuX2lzQWN0aXZlID0gdHJ1ZVxuICB9XG5cbiAgZGVhY3RpdmF0ZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzQWN0aXZlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9pc0FjdGl2ZSA9IGZhbHNlXG4gICAgRXZlbnRIYW5kbGVyLm9mZihkb2N1bWVudCwgRVZFTlRfS0VZKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuXG4gIF9oYW5kbGVGb2N1c2luKGV2ZW50KSB7XG4gICAgY29uc3QgeyB0YXJnZXQgfSA9IGV2ZW50XG4gICAgY29uc3QgeyB0cmFwRWxlbWVudCB9ID0gdGhpcy5fY29uZmlnXG5cbiAgICBpZiAodGFyZ2V0ID09PSBkb2N1bWVudCB8fCB0YXJnZXQgPT09IHRyYXBFbGVtZW50IHx8IHRyYXBFbGVtZW50LmNvbnRhaW5zKHRhcmdldCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGVsZW1lbnRzID0gU2VsZWN0b3JFbmdpbmUuZm9jdXNhYmxlQ2hpbGRyZW4odHJhcEVsZW1lbnQpXG5cbiAgICBpZiAoZWxlbWVudHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0cmFwRWxlbWVudC5mb2N1cygpXG4gICAgfSBlbHNlIGlmICh0aGlzLl9sYXN0VGFiTmF2RGlyZWN0aW9uID09PSBUQUJfTkFWX0JBQ0tXQVJEKSB7XG4gICAgICBlbGVtZW50c1tlbGVtZW50cy5sZW5ndGggLSAxXS5mb2N1cygpXG4gICAgfSBlbHNlIHtcbiAgICAgIGVsZW1lbnRzWzBdLmZvY3VzKClcbiAgICB9XG4gIH1cblxuICBfaGFuZGxlS2V5ZG93bihldmVudCkge1xuICAgIGlmIChldmVudC5rZXkgIT09IFRBQl9LRVkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2xhc3RUYWJOYXZEaXJlY3Rpb24gPSBldmVudC5zaGlmdEtleSA/IFRBQl9OQVZfQkFDS1dBUkQgOiBUQUJfTkFWX0ZPUldBUkRcbiAgfVxuXG4gIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgY29uZmlnID0ge1xuICAgICAgLi4uRGVmYXVsdCxcbiAgICAgIC4uLih0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyA/IGNvbmZpZyA6IHt9KVxuICAgIH1cbiAgICB0eXBlQ2hlY2tDb25maWcoTkFNRSwgY29uZmlnLCBEZWZhdWx0VHlwZSlcbiAgICByZXR1cm4gY29uZmlnXG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgRm9jdXNUcmFwXG4iLCIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjEuMyk6IG1vZGFsLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IHtcbiAgZGVmaW5lSlF1ZXJ5UGx1Z2luLFxuICBnZXRFbGVtZW50RnJvbVNlbGVjdG9yLFxuICBpc1JUTCxcbiAgaXNWaXNpYmxlLFxuICByZWZsb3csXG4gIHR5cGVDaGVja0NvbmZpZ1xufSBmcm9tICcuL3V0aWwvaW5kZXgnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgTWFuaXB1bGF0b3IgZnJvbSAnLi9kb20vbWFuaXB1bGF0b3InXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi9kb20vc2VsZWN0b3ItZW5naW5lJ1xuaW1wb3J0IFNjcm9sbEJhckhlbHBlciBmcm9tICcuL3V0aWwvc2Nyb2xsYmFyJ1xuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudCdcbmltcG9ydCBCYWNrZHJvcCBmcm9tICcuL3V0aWwvYmFja2Ryb3AnXG5pbXBvcnQgRm9jdXNUcmFwIGZyb20gJy4vdXRpbC9mb2N1c3RyYXAnXG5pbXBvcnQgeyBlbmFibGVEaXNtaXNzVHJpZ2dlciB9IGZyb20gJy4vdXRpbC9jb21wb25lbnQtZnVuY3Rpb25zJ1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ29uc3RhbnRzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCBOQU1FID0gJ21vZGFsJ1xuY29uc3QgREFUQV9LRVkgPSAnYnMubW9kYWwnXG5jb25zdCBFVkVOVF9LRVkgPSBgLiR7REFUQV9LRVl9YFxuY29uc3QgREFUQV9BUElfS0VZID0gJy5kYXRhLWFwaSdcbmNvbnN0IEVTQ0FQRV9LRVkgPSAnRXNjYXBlJ1xuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBiYWNrZHJvcDogdHJ1ZSxcbiAga2V5Ym9hcmQ6IHRydWUsXG4gIGZvY3VzOiB0cnVlXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBiYWNrZHJvcDogJyhib29sZWFufHN0cmluZyknLFxuICBrZXlib2FyZDogJ2Jvb2xlYW4nLFxuICBmb2N1czogJ2Jvb2xlYW4nXG59XG5cbmNvbnN0IEVWRU5UX0hJREUgPSBgaGlkZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0hJREVfUFJFVkVOVEVEID0gYGhpZGVQcmV2ZW50ZWQke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9ISURERU4gPSBgaGlkZGVuJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfU0hPVyA9IGBzaG93JHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfU0hPV04gPSBgc2hvd24ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9SRVNJWkUgPSBgcmVzaXplJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfQ0xJQ0tfRElTTUlTUyA9IGBjbGljay5kaXNtaXNzJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfS0VZRE9XTl9ESVNNSVNTID0gYGtleWRvd24uZGlzbWlzcyR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX01PVVNFVVBfRElTTUlTUyA9IGBtb3VzZXVwLmRpc21pc3Mke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9NT1VTRURPV05fRElTTUlTUyA9IGBtb3VzZWRvd24uZGlzbWlzcyR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0NMSUNLX0RBVEFfQVBJID0gYGNsaWNrJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuXG5jb25zdCBDTEFTU19OQU1FX09QRU4gPSAnbW9kYWwtb3BlbidcbmNvbnN0IENMQVNTX05BTUVfRkFERSA9ICdmYWRlJ1xuY29uc3QgQ0xBU1NfTkFNRV9TSE9XID0gJ3Nob3cnXG5jb25zdCBDTEFTU19OQU1FX1NUQVRJQyA9ICdtb2RhbC1zdGF0aWMnXG5cbmNvbnN0IE9QRU5fU0VMRUNUT1IgPSAnLm1vZGFsLnNob3cnXG5jb25zdCBTRUxFQ1RPUl9ESUFMT0cgPSAnLm1vZGFsLWRpYWxvZydcbmNvbnN0IFNFTEVDVE9SX01PREFMX0JPRFkgPSAnLm1vZGFsLWJvZHknXG5jb25zdCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSA9ICdbZGF0YS1icy10b2dnbGU9XCJtb2RhbFwiXSdcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENsYXNzIERlZmluaXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNsYXNzIE1vZGFsIGV4dGVuZHMgQmFzZUNvbXBvbmVudCB7XG4gIGNvbnN0cnVjdG9yKGVsZW1lbnQsIGNvbmZpZykge1xuICAgIHN1cGVyKGVsZW1lbnQpXG5cbiAgICB0aGlzLl9jb25maWcgPSB0aGlzLl9nZXRDb25maWcoY29uZmlnKVxuICAgIHRoaXMuX2RpYWxvZyA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfRElBTE9HLCB0aGlzLl9lbGVtZW50KVxuICAgIHRoaXMuX2JhY2tkcm9wID0gdGhpcy5faW5pdGlhbGl6ZUJhY2tEcm9wKClcbiAgICB0aGlzLl9mb2N1c3RyYXAgPSB0aGlzLl9pbml0aWFsaXplRm9jdXNUcmFwKClcbiAgICB0aGlzLl9pc1Nob3duID0gZmFsc2VcbiAgICB0aGlzLl9pZ25vcmVCYWNrZHJvcENsaWNrID0gZmFsc2VcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZVxuICAgIHRoaXMuX3Njcm9sbEJhciA9IG5ldyBTY3JvbGxCYXJIZWxwZXIoKVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICAvLyBQdWJsaWNcblxuICB0b2dnbGUocmVsYXRlZFRhcmdldCkge1xuICAgIHJldHVybiB0aGlzLl9pc1Nob3duID8gdGhpcy5oaWRlKCkgOiB0aGlzLnNob3cocmVsYXRlZFRhcmdldClcbiAgfVxuXG4gIHNob3cocmVsYXRlZFRhcmdldCkge1xuICAgIGlmICh0aGlzLl9pc1Nob3duIHx8IHRoaXMuX2lzVHJhbnNpdGlvbmluZykge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPVywge1xuICAgICAgcmVsYXRlZFRhcmdldFxuICAgIH0pXG5cbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2lzU2hvd24gPSB0cnVlXG5cbiAgICBpZiAodGhpcy5faXNBbmltYXRlZCgpKSB7XG4gICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlXG4gICAgfVxuXG4gICAgdGhpcy5fc2Nyb2xsQmFyLmhpZGUoKVxuXG4gICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfT1BFTilcblxuICAgIHRoaXMuX2FkanVzdERpYWxvZygpXG5cbiAgICB0aGlzLl9zZXRFc2NhcGVFdmVudCgpXG4gICAgdGhpcy5fc2V0UmVzaXplRXZlbnQoKVxuXG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2RpYWxvZywgRVZFTlRfTU9VU0VET1dOX0RJU01JU1MsICgpID0+IHtcbiAgICAgIEV2ZW50SGFuZGxlci5vbmUodGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VVUF9ESVNNSVNTLCBldmVudCA9PiB7XG4gICAgICAgIGlmIChldmVudC50YXJnZXQgPT09IHRoaXMuX2VsZW1lbnQpIHtcbiAgICAgICAgICB0aGlzLl9pZ25vcmVCYWNrZHJvcENsaWNrID0gdHJ1ZVxuICAgICAgICB9XG4gICAgICB9KVxuICAgIH0pXG5cbiAgICB0aGlzLl9zaG93QmFja2Ryb3AoKCkgPT4gdGhpcy5fc2hvd0VsZW1lbnQocmVsYXRlZFRhcmdldCkpXG4gIH1cblxuICBoaWRlKCkge1xuICAgIGlmICghdGhpcy5faXNTaG93biB8fCB0aGlzLl9pc1RyYW5zaXRpb25pbmcpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREUpXG5cbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2lzU2hvd24gPSBmYWxzZVxuICAgIGNvbnN0IGlzQW5pbWF0ZWQgPSB0aGlzLl9pc0FuaW1hdGVkKClcblxuICAgIGlmIChpc0FuaW1hdGVkKSB7XG4gICAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSB0cnVlXG4gICAgfVxuXG4gICAgdGhpcy5fc2V0RXNjYXBlRXZlbnQoKVxuICAgIHRoaXMuX3NldFJlc2l6ZUV2ZW50KClcblxuICAgIHRoaXMuX2ZvY3VzdHJhcC5kZWFjdGl2YXRlKClcblxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpXG5cbiAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0NMSUNLX0RJU01JU1MpXG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9kaWFsb2csIEVWRU5UX01PVVNFRE9XTl9ESVNNSVNTKVxuXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjaygoKSA9PiB0aGlzLl9oaWRlTW9kYWwoKSwgdGhpcy5fZWxlbWVudCwgaXNBbmltYXRlZClcbiAgfVxuXG4gIGRpc3Bvc2UoKSB7XG4gICAgW3dpbmRvdywgdGhpcy5fZGlhbG9nXVxuICAgICAgLmZvckVhY2goaHRtbEVsZW1lbnQgPT4gRXZlbnRIYW5kbGVyLm9mZihodG1sRWxlbWVudCwgRVZFTlRfS0VZKSlcblxuICAgIHRoaXMuX2JhY2tkcm9wLmRpc3Bvc2UoKVxuICAgIHRoaXMuX2ZvY3VzdHJhcC5kZWFjdGl2YXRlKClcbiAgICBzdXBlci5kaXNwb3NlKClcbiAgfVxuXG4gIGhhbmRsZVVwZGF0ZSgpIHtcbiAgICB0aGlzLl9hZGp1c3REaWFsb2coKVxuICB9XG5cbiAgLy8gUHJpdmF0ZVxuXG4gIF9pbml0aWFsaXplQmFja0Ryb3AoKSB7XG4gICAgcmV0dXJuIG5ldyBCYWNrZHJvcCh7XG4gICAgICBpc1Zpc2libGU6IEJvb2xlYW4odGhpcy5fY29uZmlnLmJhY2tkcm9wKSwgLy8gJ3N0YXRpYycgb3B0aW9uIHdpbGwgYmUgdHJhbnNsYXRlZCB0byB0cnVlLCBhbmQgYm9vbGVhbnMgd2lsbCBrZWVwIHRoZWlyIHZhbHVlXG4gICAgICBpc0FuaW1hdGVkOiB0aGlzLl9pc0FuaW1hdGVkKClcbiAgICB9KVxuICB9XG5cbiAgX2luaXRpYWxpemVGb2N1c1RyYXAoKSB7XG4gICAgcmV0dXJuIG5ldyBGb2N1c1RyYXAoe1xuICAgICAgdHJhcEVsZW1lbnQ6IHRoaXMuX2VsZW1lbnRcbiAgICB9KVxuICB9XG5cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25maWcgPSB7XG4gICAgICAuLi5EZWZhdWx0LFxuICAgICAgLi4uTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCksXG4gICAgICAuLi4odHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiB7fSlcbiAgICB9XG4gICAgdHlwZUNoZWNrQ29uZmlnKE5BTUUsIGNvbmZpZywgRGVmYXVsdFR5cGUpXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG5cbiAgX3Nob3dFbGVtZW50KHJlbGF0ZWRUYXJnZXQpIHtcbiAgICBjb25zdCBpc0FuaW1hdGVkID0gdGhpcy5faXNBbmltYXRlZCgpXG4gICAgY29uc3QgbW9kYWxCb2R5ID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShTRUxFQ1RPUl9NT0RBTF9CT0RZLCB0aGlzLl9kaWFsb2cpXG5cbiAgICBpZiAoIXRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSB8fCB0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUubm9kZVR5cGUgIT09IE5vZGUuRUxFTUVOVF9OT0RFKSB7XG4gICAgICAvLyBEb24ndCBtb3ZlIG1vZGFsJ3MgRE9NIHBvc2l0aW9uXG4gICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZCh0aGlzLl9lbGVtZW50KVxuICAgIH1cblxuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdibG9jaydcbiAgICB0aGlzLl9lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgnYXJpYS1oaWRkZW4nKVxuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLW1vZGFsJywgdHJ1ZSlcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgncm9sZScsICdkaWFsb2cnKVxuICAgIHRoaXMuX2VsZW1lbnQuc2Nyb2xsVG9wID0gMFxuXG4gICAgaWYgKG1vZGFsQm9keSkge1xuICAgICAgbW9kYWxCb2R5LnNjcm9sbFRvcCA9IDBcbiAgICB9XG5cbiAgICBpZiAoaXNBbmltYXRlZCkge1xuICAgICAgcmVmbG93KHRoaXMuX2VsZW1lbnQpXG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVylcblxuICAgIGNvbnN0IHRyYW5zaXRpb25Db21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9jb25maWcuZm9jdXMpIHtcbiAgICAgICAgdGhpcy5fZm9jdXN0cmFwLmFjdGl2YXRlKClcbiAgICAgIH1cblxuICAgICAgdGhpcy5faXNUcmFuc2l0aW9uaW5nID0gZmFsc2VcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX1NIT1dOLCB7XG4gICAgICAgIHJlbGF0ZWRUYXJnZXRcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayh0cmFuc2l0aW9uQ29tcGxldGUsIHRoaXMuX2RpYWxvZywgaXNBbmltYXRlZClcbiAgfVxuXG4gIF9zZXRFc2NhcGVFdmVudCgpIHtcbiAgICBpZiAodGhpcy5faXNTaG93bikge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0tFWURPV05fRElTTUlTUywgZXZlbnQgPT4ge1xuICAgICAgICBpZiAodGhpcy5fY29uZmlnLmtleWJvYXJkICYmIGV2ZW50LmtleSA9PT0gRVNDQVBFX0tFWSkge1xuICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KClcbiAgICAgICAgICB0aGlzLmhpZGUoKVxuICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLl9jb25maWcua2V5Ym9hcmQgJiYgZXZlbnQua2V5ID09PSBFU0NBUEVfS0VZKSB7XG4gICAgICAgICAgdGhpcy5fdHJpZ2dlckJhY2tkcm9wVHJhbnNpdGlvbigpXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgfSBlbHNlIHtcbiAgICAgIEV2ZW50SGFuZGxlci5vZmYodGhpcy5fZWxlbWVudCwgRVZFTlRfS0VZRE9XTl9ESVNNSVNTKVxuICAgIH1cbiAgfVxuXG4gIF9zZXRSZXNpemVFdmVudCgpIHtcbiAgICBpZiAodGhpcy5faXNTaG93bikge1xuICAgICAgRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfUkVTSVpFLCAoKSA9PiB0aGlzLl9hZGp1c3REaWFsb2coKSlcbiAgICB9IGVsc2Uge1xuICAgICAgRXZlbnRIYW5kbGVyLm9mZih3aW5kb3csIEVWRU5UX1JFU0laRSlcbiAgICB9XG4gIH1cblxuICBfaGlkZU1vZGFsKCkge1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJ1xuICAgIHRoaXMuX2VsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWhpZGRlbicsIHRydWUpXG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtbW9kYWwnKVxuICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdyb2xlJylcbiAgICB0aGlzLl9pc1RyYW5zaXRpb25pbmcgPSBmYWxzZVxuICAgIHRoaXMuX2JhY2tkcm9wLmhpZGUoKCkgPT4ge1xuICAgICAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfT1BFTilcbiAgICAgIHRoaXMuX3Jlc2V0QWRqdXN0bWVudHMoKVxuICAgICAgdGhpcy5fc2Nyb2xsQmFyLnJlc2V0KClcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJRERFTilcbiAgICB9KVxuICB9XG5cbiAgX3Nob3dCYWNrZHJvcChjYWxsYmFjaykge1xuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBFVkVOVF9DTElDS19ESVNNSVNTLCBldmVudCA9PiB7XG4gICAgICBpZiAodGhpcy5faWdub3JlQmFja2Ryb3BDbGljaykge1xuICAgICAgICB0aGlzLl9pZ25vcmVCYWNrZHJvcENsaWNrID0gZmFsc2VcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmIChldmVudC50YXJnZXQgIT09IGV2ZW50LmN1cnJlbnRUYXJnZXQpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9jb25maWcuYmFja2Ryb3AgPT09IHRydWUpIHtcbiAgICAgICAgdGhpcy5oaWRlKClcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5fY29uZmlnLmJhY2tkcm9wID09PSAnc3RhdGljJykge1xuICAgICAgICB0aGlzLl90cmlnZ2VyQmFja2Ryb3BUcmFuc2l0aW9uKClcbiAgICAgIH1cbiAgICB9KVxuXG4gICAgdGhpcy5fYmFja2Ryb3Auc2hvdyhjYWxsYmFjaylcbiAgfVxuXG4gIF9pc0FuaW1hdGVkKCkge1xuICAgIHJldHVybiB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUpXG4gIH1cblxuICBfdHJpZ2dlckJhY2tkcm9wVHJhbnNpdGlvbigpIHtcbiAgICBjb25zdCBoaWRlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURFX1BSRVZFTlRFRClcbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHsgY2xhc3NMaXN0LCBzY3JvbGxIZWlnaHQsIHN0eWxlIH0gPSB0aGlzLl9lbGVtZW50XG4gICAgY29uc3QgaXNNb2RhbE92ZXJmbG93aW5nID0gc2Nyb2xsSGVpZ2h0ID4gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodFxuXG4gICAgLy8gcmV0dXJuIGlmIHRoZSBmb2xsb3dpbmcgYmFja2dyb3VuZCB0cmFuc2l0aW9uIGhhc24ndCB5ZXQgY29tcGxldGVkXG4gICAgaWYgKCghaXNNb2RhbE92ZXJmbG93aW5nICYmIHN0eWxlLm92ZXJmbG93WSA9PT0gJ2hpZGRlbicpIHx8IGNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX1NUQVRJQykpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICghaXNNb2RhbE92ZXJmbG93aW5nKSB7XG4gICAgICBzdHlsZS5vdmVyZmxvd1kgPSAnaGlkZGVuJ1xuICAgIH1cblxuICAgIGNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TVEFUSUMpXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjaygoKSA9PiB7XG4gICAgICBjbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU1RBVElDKVxuICAgICAgaWYgKCFpc01vZGFsT3ZlcmZsb3dpbmcpIHtcbiAgICAgICAgdGhpcy5fcXVldWVDYWxsYmFjaygoKSA9PiB7XG4gICAgICAgICAgc3R5bGUub3ZlcmZsb3dZID0gJydcbiAgICAgICAgfSwgdGhpcy5fZGlhbG9nKVxuICAgICAgfVxuICAgIH0sIHRoaXMuX2RpYWxvZylcblxuICAgIHRoaXMuX2VsZW1lbnQuZm9jdXMoKVxuICB9XG5cbiAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICAvLyB0aGUgZm9sbG93aW5nIG1ldGhvZHMgYXJlIHVzZWQgdG8gaGFuZGxlIG92ZXJmbG93aW5nIG1vZGFsc1xuICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cbiAgX2FkanVzdERpYWxvZygpIHtcbiAgICBjb25zdCBpc01vZGFsT3ZlcmZsb3dpbmcgPSB0aGlzLl9lbGVtZW50LnNjcm9sbEhlaWdodCA+IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHRcbiAgICBjb25zdCBzY3JvbGxiYXJXaWR0aCA9IHRoaXMuX3Njcm9sbEJhci5nZXRXaWR0aCgpXG4gICAgY29uc3QgaXNCb2R5T3ZlcmZsb3dpbmcgPSBzY3JvbGxiYXJXaWR0aCA+IDBcblxuICAgIGlmICgoIWlzQm9keU92ZXJmbG93aW5nICYmIGlzTW9kYWxPdmVyZmxvd2luZyAmJiAhaXNSVEwoKSkgfHwgKGlzQm9keU92ZXJmbG93aW5nICYmICFpc01vZGFsT3ZlcmZsb3dpbmcgJiYgaXNSVEwoKSkpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ0xlZnQgPSBgJHtzY3JvbGxiYXJXaWR0aH1weGBcbiAgICB9XG5cbiAgICBpZiAoKGlzQm9keU92ZXJmbG93aW5nICYmICFpc01vZGFsT3ZlcmZsb3dpbmcgJiYgIWlzUlRMKCkpIHx8ICghaXNCb2R5T3ZlcmZsb3dpbmcgJiYgaXNNb2RhbE92ZXJmbG93aW5nICYmIGlzUlRMKCkpKSB7XG4gICAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnBhZGRpbmdSaWdodCA9IGAke3Njcm9sbGJhcldpZHRofXB4YFxuICAgIH1cbiAgfVxuXG4gIF9yZXNldEFkanVzdG1lbnRzKCkge1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ0xlZnQgPSAnJ1xuICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUucGFkZGluZ1JpZ2h0ID0gJydcbiAgfVxuXG4gIC8vIFN0YXRpY1xuXG4gIHN0YXRpYyBqUXVlcnlJbnRlcmZhY2UoY29uZmlnLCByZWxhdGVkVGFyZ2V0KSB7XG4gICAgcmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICBjb25zdCBkYXRhID0gTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpXG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYClcbiAgICAgIH1cblxuICAgICAgZGF0YVtjb25maWddKHJlbGF0ZWRUYXJnZXQpXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfVE9HR0xFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgY29uc3QgdGFyZ2V0ID0gZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0aGlzKVxuXG4gIGlmIChbJ0EnLCAnQVJFQSddLmluY2x1ZGVzKHRoaXMudGFnTmFtZSkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gIH1cblxuICBFdmVudEhhbmRsZXIub25lKHRhcmdldCwgRVZFTlRfU0hPVywgc2hvd0V2ZW50ID0+IHtcbiAgICBpZiAoc2hvd0V2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIC8vIG9ubHkgcmVnaXN0ZXIgZm9jdXMgcmVzdG9yZXIgaWYgbW9kYWwgd2lsbCBhY3R1YWxseSBnZXQgc2hvd25cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIEV2ZW50SGFuZGxlci5vbmUodGFyZ2V0LCBFVkVOVF9ISURERU4sICgpID0+IHtcbiAgICAgIGlmIChpc1Zpc2libGUodGhpcykpIHtcbiAgICAgICAgdGhpcy5mb2N1cygpXG4gICAgICB9XG4gICAgfSlcbiAgfSlcblxuICAvLyBhdm9pZCBjb25mbGljdCB3aGVuIGNsaWNraW5nIG1vZGRhbCB0b2dnbGVyIHdoaWxlIGFub3RoZXIgb25lIGlzIG9wZW5cbiAgY29uc3QgYWxsUmVhZHlPcGVuID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShPUEVOX1NFTEVDVE9SKVxuICBpZiAoYWxsUmVhZHlPcGVuKSB7XG4gICAgTW9kYWwuZ2V0SW5zdGFuY2UoYWxsUmVhZHlPcGVuKS5oaWRlKClcbiAgfVxuXG4gIGNvbnN0IGRhdGEgPSBNb2RhbC5nZXRPckNyZWF0ZUluc3RhbmNlKHRhcmdldClcblxuICBkYXRhLnRvZ2dsZSh0aGlzKVxufSlcblxuZW5hYmxlRGlzbWlzc1RyaWdnZXIoTW9kYWwpXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBqUXVlcnlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogYWRkIC5Nb2RhbCB0byBqUXVlcnkgb25seSBpZiBqUXVlcnkgaXMgcHJlc2VudFxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihNb2RhbClcblxuZXhwb3J0IGRlZmF1bHQgTW9kYWxcbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMS4zKTogb2ZmY2FudmFzLmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IHtcbiAgZGVmaW5lSlF1ZXJ5UGx1Z2luLFxuICBnZXRFbGVtZW50RnJvbVNlbGVjdG9yLFxuICBpc0Rpc2FibGVkLFxuICBpc1Zpc2libGUsXG4gIHR5cGVDaGVja0NvbmZpZ1xufSBmcm9tICcuL3V0aWwvaW5kZXgnXG5pbXBvcnQgU2Nyb2xsQmFySGVscGVyIGZyb20gJy4vdXRpbC9zY3JvbGxiYXInXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tICcuL2Jhc2UtY29tcG9uZW50J1xuaW1wb3J0IFNlbGVjdG9yRW5naW5lIGZyb20gJy4vZG9tL3NlbGVjdG9yLWVuZ2luZSdcbmltcG9ydCBNYW5pcHVsYXRvciBmcm9tICcuL2RvbS9tYW5pcHVsYXRvcidcbmltcG9ydCBCYWNrZHJvcCBmcm9tICcuL3V0aWwvYmFja2Ryb3AnXG5pbXBvcnQgRm9jdXNUcmFwIGZyb20gJy4vdXRpbC9mb2N1c3RyYXAnXG5pbXBvcnQgeyBlbmFibGVEaXNtaXNzVHJpZ2dlciB9IGZyb20gJy4vdXRpbC9jb21wb25lbnQtZnVuY3Rpb25zJ1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ29uc3RhbnRzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCBOQU1FID0gJ29mZmNhbnZhcydcbmNvbnN0IERBVEFfS0VZID0gJ2JzLm9mZmNhbnZhcydcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5jb25zdCBEQVRBX0FQSV9LRVkgPSAnLmRhdGEtYXBpJ1xuY29uc3QgRVZFTlRfTE9BRF9EQVRBX0FQSSA9IGBsb2FkJHtFVkVOVF9LRVl9JHtEQVRBX0FQSV9LRVl9YFxuY29uc3QgRVNDQVBFX0tFWSA9ICdFc2NhcGUnXG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIGJhY2tkcm9wOiB0cnVlLFxuICBrZXlib2FyZDogdHJ1ZSxcbiAgc2Nyb2xsOiBmYWxzZVxufVxuXG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgYmFja2Ryb3A6ICdib29sZWFuJyxcbiAga2V5Ym9hcmQ6ICdib29sZWFuJyxcbiAgc2Nyb2xsOiAnYm9vbGVhbidcbn1cblxuY29uc3QgQ0xBU1NfTkFNRV9TSE9XID0gJ3Nob3cnXG5jb25zdCBDTEFTU19OQU1FX0JBQ0tEUk9QID0gJ29mZmNhbnZhcy1iYWNrZHJvcCdcbmNvbnN0IE9QRU5fU0VMRUNUT1IgPSAnLm9mZmNhbnZhcy5zaG93J1xuXG5jb25zdCBFVkVOVF9TSE9XID0gYHNob3cke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9TSE9XTiA9IGBzaG93biR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0hJREUgPSBgaGlkZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX0hJRERFTiA9IGBoaWRkZW4ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSA9IGBjbGljayR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcbmNvbnN0IEVWRU5UX0tFWURPV05fRElTTUlTUyA9IGBrZXlkb3duLmRpc21pc3Mke0VWRU5UX0tFWX1gXG5cbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFID0gJ1tkYXRhLWJzLXRvZ2dsZT1cIm9mZmNhbnZhc1wiXSdcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENsYXNzIERlZmluaXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNsYXNzIE9mZmNhbnZhcyBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBzdXBlcihlbGVtZW50KVxuXG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZylcbiAgICB0aGlzLl9pc1Nob3duID0gZmFsc2VcbiAgICB0aGlzLl9iYWNrZHJvcCA9IHRoaXMuX2luaXRpYWxpemVCYWNrRHJvcCgpXG4gICAgdGhpcy5fZm9jdXN0cmFwID0gdGhpcy5faW5pdGlhbGl6ZUZvY3VzVHJhcCgpXG4gICAgdGhpcy5fYWRkRXZlbnRMaXN0ZW5lcnMoKVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRVxuICB9XG5cbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICAvLyBQdWJsaWNcblxuICB0b2dnbGUocmVsYXRlZFRhcmdldCkge1xuICAgIHJldHVybiB0aGlzLl9pc1Nob3duID8gdGhpcy5oaWRlKCkgOiB0aGlzLnNob3cocmVsYXRlZFRhcmdldClcbiAgfVxuXG4gIHNob3cocmVsYXRlZFRhcmdldCkge1xuICAgIGlmICh0aGlzLl9pc1Nob3duKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XLCB7IHJlbGF0ZWRUYXJnZXQgfSlcblxuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5faXNTaG93biA9IHRydWVcbiAgICB0aGlzLl9lbGVtZW50LnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSdcblxuICAgIHRoaXMuX2JhY2tkcm9wLnNob3coKVxuXG4gICAgaWYgKCF0aGlzLl9jb25maWcuc2Nyb2xsKSB7XG4gICAgICBuZXcgU2Nyb2xsQmFySGVscGVyKCkuaGlkZSgpXG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJylcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1tb2RhbCcsIHRydWUpXG4gICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3JvbGUnLCAnZGlhbG9nJylcbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XKVxuXG4gICAgY29uc3QgY29tcGxldGVDYWxsQmFjayA9ICgpID0+IHtcbiAgICAgIGlmICghdGhpcy5fY29uZmlnLnNjcm9sbCkge1xuICAgICAgICB0aGlzLl9mb2N1c3RyYXAuYWN0aXZhdGUoKVxuICAgICAgfVxuXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XTiwgeyByZWxhdGVkVGFyZ2V0IH0pXG4gICAgfVxuXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZUNhbGxCYWNrLCB0aGlzLl9lbGVtZW50LCB0cnVlKVxuICB9XG5cbiAgaGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuX2lzU2hvd24pIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IGhpZGVFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0hJREUpXG5cbiAgICBpZiAoaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIHRoaXMuX2ZvY3VzdHJhcC5kZWFjdGl2YXRlKClcbiAgICB0aGlzLl9lbGVtZW50LmJsdXIoKVxuICAgIHRoaXMuX2lzU2hvd24gPSBmYWxzZVxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpXG4gICAgdGhpcy5fYmFja2Ryb3AuaGlkZSgpXG5cbiAgICBjb25zdCBjb21wbGV0ZUNhbGxiYWNrID0gKCkgPT4ge1xuICAgICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2FyaWEtaGlkZGVuJywgdHJ1ZSlcbiAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLW1vZGFsJylcbiAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdyb2xlJylcbiAgICAgIHRoaXMuX2VsZW1lbnQuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nXG5cbiAgICAgIGlmICghdGhpcy5fY29uZmlnLnNjcm9sbCkge1xuICAgICAgICBuZXcgU2Nyb2xsQmFySGVscGVyKCkucmVzZXQoKVxuICAgICAgfVxuXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURERU4pXG4gICAgfVxuXG4gICAgdGhpcy5fcXVldWVDYWxsYmFjayhjb21wbGV0ZUNhbGxiYWNrLCB0aGlzLl9lbGVtZW50LCB0cnVlKVxuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICB0aGlzLl9iYWNrZHJvcC5kaXNwb3NlKClcbiAgICB0aGlzLl9mb2N1c3RyYXAuZGVhY3RpdmF0ZSgpXG4gICAgc3VwZXIuZGlzcG9zZSgpXG4gIH1cblxuICAvLyBQcml2YXRlXG5cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25maWcgPSB7XG4gICAgICAuLi5EZWZhdWx0LFxuICAgICAgLi4uTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCksXG4gICAgICAuLi4odHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgPyBjb25maWcgOiB7fSlcbiAgICB9XG4gICAgdHlwZUNoZWNrQ29uZmlnKE5BTUUsIGNvbmZpZywgRGVmYXVsdFR5cGUpXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG5cbiAgX2luaXRpYWxpemVCYWNrRHJvcCgpIHtcbiAgICByZXR1cm4gbmV3IEJhY2tkcm9wKHtcbiAgICAgIGNsYXNzTmFtZTogQ0xBU1NfTkFNRV9CQUNLRFJPUCxcbiAgICAgIGlzVmlzaWJsZTogdGhpcy5fY29uZmlnLmJhY2tkcm9wLFxuICAgICAgaXNBbmltYXRlZDogdHJ1ZSxcbiAgICAgIHJvb3RFbGVtZW50OiB0aGlzLl9lbGVtZW50LnBhcmVudE5vZGUsXG4gICAgICBjbGlja0NhbGxiYWNrOiAoKSA9PiB0aGlzLmhpZGUoKVxuICAgIH0pXG4gIH1cblxuICBfaW5pdGlhbGl6ZUZvY3VzVHJhcCgpIHtcbiAgICByZXR1cm4gbmV3IEZvY3VzVHJhcCh7XG4gICAgICB0cmFwRWxlbWVudDogdGhpcy5fZWxlbWVudFxuICAgIH0pXG4gIH1cblxuICBfYWRkRXZlbnRMaXN0ZW5lcnMoKSB7XG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0tFWURPV05fRElTTUlTUywgZXZlbnQgPT4ge1xuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5rZXlib2FyZCAmJiBldmVudC5rZXkgPT09IEVTQ0FQRV9LRVkpIHtcbiAgICAgICAgdGhpcy5oaWRlKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG5cbiAgLy8gU3RhdGljXG5cbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBPZmZjYW52YXMuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpXG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKGRhdGFbY29uZmlnXSA9PT0gdW5kZWZpbmVkIHx8IGNvbmZpZy5zdGFydHNXaXRoKCdfJykgfHwgY29uZmlnID09PSAnY29uc3RydWN0b3InKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYClcbiAgICAgIH1cblxuICAgICAgZGF0YVtjb25maWddKHRoaXMpXG4gICAgfSlcbiAgfVxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogRGF0YSBBcGkgaW1wbGVtZW50YXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbkV2ZW50SGFuZGxlci5vbihkb2N1bWVudCwgRVZFTlRfQ0xJQ0tfREFUQV9BUEksIFNFTEVDVE9SX0RBVEFfVE9HR0xFLCBmdW5jdGlvbiAoZXZlbnQpIHtcbiAgY29uc3QgdGFyZ2V0ID0gZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0aGlzKVxuXG4gIGlmIChbJ0EnLCAnQVJFQSddLmluY2x1ZGVzKHRoaXMudGFnTmFtZSkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gIH1cblxuICBpZiAoaXNEaXNhYmxlZCh0aGlzKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgRXZlbnRIYW5kbGVyLm9uZSh0YXJnZXQsIEVWRU5UX0hJRERFTiwgKCkgPT4ge1xuICAgIC8vIGZvY3VzIG9uIHRyaWdnZXIgd2hlbiBpdCBpcyBjbG9zZWRcbiAgICBpZiAoaXNWaXNpYmxlKHRoaXMpKSB7XG4gICAgICB0aGlzLmZvY3VzKClcbiAgICB9XG4gIH0pXG5cbiAgLy8gYXZvaWQgY29uZmxpY3Qgd2hlbiBjbGlja2luZyBhIHRvZ2dsZXIgb2YgYW4gb2ZmY2FudmFzLCB3aGlsZSBhbm90aGVyIGlzIG9wZW5cbiAgY29uc3QgYWxsUmVhZHlPcGVuID0gU2VsZWN0b3JFbmdpbmUuZmluZE9uZShPUEVOX1NFTEVDVE9SKVxuICBpZiAoYWxsUmVhZHlPcGVuICYmIGFsbFJlYWR5T3BlbiAhPT0gdGFyZ2V0KSB7XG4gICAgT2ZmY2FudmFzLmdldEluc3RhbmNlKGFsbFJlYWR5T3BlbikuaGlkZSgpXG4gIH1cblxuICBjb25zdCBkYXRhID0gT2ZmY2FudmFzLmdldE9yQ3JlYXRlSW5zdGFuY2UodGFyZ2V0KVxuICBkYXRhLnRvZ2dsZSh0aGlzKVxufSlcblxuRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfTE9BRF9EQVRBX0FQSSwgKCkgPT5cbiAgU2VsZWN0b3JFbmdpbmUuZmluZChPUEVOX1NFTEVDVE9SKS5mb3JFYWNoKGVsID0+IE9mZmNhbnZhcy5nZXRPckNyZWF0ZUluc3RhbmNlKGVsKS5zaG93KCkpXG4pXG5cbmVuYWJsZURpc21pc3NUcmlnZ2VyKE9mZmNhbnZhcylcbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBqUXVlcnlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmRlZmluZUpRdWVyeVBsdWdpbihPZmZjYW52YXMpXG5cbmV4cG9ydCBkZWZhdWx0IE9mZmNhbnZhc1xuIiwiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4xLjMpOiB1dGlsL3Nhbml0aXplci5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IHVyaUF0dHJpYnV0ZXMgPSBuZXcgU2V0KFtcbiAgJ2JhY2tncm91bmQnLFxuICAnY2l0ZScsXG4gICdocmVmJyxcbiAgJ2l0ZW10eXBlJyxcbiAgJ2xvbmdkZXNjJyxcbiAgJ3Bvc3RlcicsXG4gICdzcmMnLFxuICAneGxpbms6aHJlZidcbl0pXG5cbmNvbnN0IEFSSUFfQVRUUklCVVRFX1BBVFRFUk4gPSAvXmFyaWEtW1xcdy1dKiQvaVxuXG4vKipcbiAqIEEgcGF0dGVybiB0aGF0IHJlY29nbml6ZXMgYSBjb21tb25seSB1c2VmdWwgc3Vic2V0IG9mIFVSTHMgdGhhdCBhcmUgc2FmZS5cbiAqXG4gKiBTaG91dG91dCB0byBBbmd1bGFyIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvYmxvYi8xMi4yLngvcGFja2FnZXMvY29yZS9zcmMvc2FuaXRpemF0aW9uL3VybF9zYW5pdGl6ZXIudHNcbiAqL1xuY29uc3QgU0FGRV9VUkxfUEFUVEVSTiA9IC9eKD86KD86aHR0cHM/fG1haWx0b3xmdHB8dGVsfGZpbGV8c21zKTp8W14jJi86P10qKD86WyMvP118JCkpL2lcblxuLyoqXG4gKiBBIHBhdHRlcm4gdGhhdCBtYXRjaGVzIHNhZmUgZGF0YSBVUkxzLiBPbmx5IG1hdGNoZXMgaW1hZ2UsIHZpZGVvIGFuZCBhdWRpbyB0eXBlcy5cbiAqXG4gKiBTaG91dG91dCB0byBBbmd1bGFyIGh0dHBzOi8vZ2l0aHViLmNvbS9hbmd1bGFyL2FuZ3VsYXIvYmxvYi8xMi4yLngvcGFja2FnZXMvY29yZS9zcmMvc2FuaXRpemF0aW9uL3VybF9zYW5pdGl6ZXIudHNcbiAqL1xuY29uc3QgREFUQV9VUkxfUEFUVEVSTiA9IC9eZGF0YTooPzppbWFnZVxcLyg/OmJtcHxnaWZ8anBlZ3xqcGd8cG5nfHRpZmZ8d2VicCl8dmlkZW9cXC8oPzptcGVnfG1wNHxvZ2d8d2VibSl8YXVkaW9cXC8oPzptcDN8b2dhfG9nZ3xvcHVzKSk7YmFzZTY0LFtcXGQrL2Etel0rPSokL2lcblxuY29uc3QgYWxsb3dlZEF0dHJpYnV0ZSA9IChhdHRyaWJ1dGUsIGFsbG93ZWRBdHRyaWJ1dGVMaXN0KSA9PiB7XG4gIGNvbnN0IGF0dHJpYnV0ZU5hbWUgPSBhdHRyaWJ1dGUubm9kZU5hbWUudG9Mb3dlckNhc2UoKVxuXG4gIGlmIChhbGxvd2VkQXR0cmlidXRlTGlzdC5pbmNsdWRlcyhhdHRyaWJ1dGVOYW1lKSkge1xuICAgIGlmICh1cmlBdHRyaWJ1dGVzLmhhcyhhdHRyaWJ1dGVOYW1lKSkge1xuICAgICAgcmV0dXJuIEJvb2xlYW4oU0FGRV9VUkxfUEFUVEVSTi50ZXN0KGF0dHJpYnV0ZS5ub2RlVmFsdWUpIHx8IERBVEFfVVJMX1BBVFRFUk4udGVzdChhdHRyaWJ1dGUubm9kZVZhbHVlKSlcbiAgICB9XG5cbiAgICByZXR1cm4gdHJ1ZVxuICB9XG5cbiAgY29uc3QgcmVnRXhwID0gYWxsb3dlZEF0dHJpYnV0ZUxpc3QuZmlsdGVyKGF0dHJpYnV0ZVJlZ2V4ID0+IGF0dHJpYnV0ZVJlZ2V4IGluc3RhbmNlb2YgUmVnRXhwKVxuXG4gIC8vIENoZWNrIGlmIGEgcmVndWxhciBleHByZXNzaW9uIHZhbGlkYXRlcyB0aGUgYXR0cmlidXRlLlxuICBmb3IgKGxldCBpID0gMCwgbGVuID0gcmVnRXhwLmxlbmd0aDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgaWYgKHJlZ0V4cFtpXS50ZXN0KGF0dHJpYnV0ZU5hbWUpKSB7XG4gICAgICByZXR1cm4gdHJ1ZVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZVxufVxuXG5leHBvcnQgY29uc3QgRGVmYXVsdEFsbG93bGlzdCA9IHtcbiAgLy8gR2xvYmFsIGF0dHJpYnV0ZXMgYWxsb3dlZCBvbiBhbnkgc3VwcGxpZWQgZWxlbWVudCBiZWxvdy5cbiAgJyonOiBbJ2NsYXNzJywgJ2RpcicsICdpZCcsICdsYW5nJywgJ3JvbGUnLCBBUklBX0FUVFJJQlVURV9QQVRURVJOXSxcbiAgYTogWyd0YXJnZXQnLCAnaHJlZicsICd0aXRsZScsICdyZWwnXSxcbiAgYXJlYTogW10sXG4gIGI6IFtdLFxuICBicjogW10sXG4gIGNvbDogW10sXG4gIGNvZGU6IFtdLFxuICBkaXY6IFtdLFxuICBlbTogW10sXG4gIGhyOiBbXSxcbiAgaDE6IFtdLFxuICBoMjogW10sXG4gIGgzOiBbXSxcbiAgaDQ6IFtdLFxuICBoNTogW10sXG4gIGg2OiBbXSxcbiAgaTogW10sXG4gIGltZzogWydzcmMnLCAnc3Jjc2V0JywgJ2FsdCcsICd0aXRsZScsICd3aWR0aCcsICdoZWlnaHQnXSxcbiAgbGk6IFtdLFxuICBvbDogW10sXG4gIHA6IFtdLFxuICBwcmU6IFtdLFxuICBzOiBbXSxcbiAgc21hbGw6IFtdLFxuICBzcGFuOiBbXSxcbiAgc3ViOiBbXSxcbiAgc3VwOiBbXSxcbiAgc3Ryb25nOiBbXSxcbiAgdTogW10sXG4gIHVsOiBbXVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc2FuaXRpemVIdG1sKHVuc2FmZUh0bWwsIGFsbG93TGlzdCwgc2FuaXRpemVGbikge1xuICBpZiAoIXVuc2FmZUh0bWwubGVuZ3RoKSB7XG4gICAgcmV0dXJuIHVuc2FmZUh0bWxcbiAgfVxuXG4gIGlmIChzYW5pdGl6ZUZuICYmIHR5cGVvZiBzYW5pdGl6ZUZuID09PSAnZnVuY3Rpb24nKSB7XG4gICAgcmV0dXJuIHNhbml0aXplRm4odW5zYWZlSHRtbClcbiAgfVxuXG4gIGNvbnN0IGRvbVBhcnNlciA9IG5ldyB3aW5kb3cuRE9NUGFyc2VyKClcbiAgY29uc3QgY3JlYXRlZERvY3VtZW50ID0gZG9tUGFyc2VyLnBhcnNlRnJvbVN0cmluZyh1bnNhZmVIdG1sLCAndGV4dC9odG1sJylcbiAgY29uc3QgZWxlbWVudHMgPSBbXS5jb25jYXQoLi4uY3JlYXRlZERvY3VtZW50LmJvZHkucXVlcnlTZWxlY3RvckFsbCgnKicpKVxuXG4gIGZvciAobGV0IGkgPSAwLCBsZW4gPSBlbGVtZW50cy5sZW5ndGg7IGkgPCBsZW47IGkrKykge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBlbGVtZW50c1tpXVxuICAgIGNvbnN0IGVsZW1lbnROYW1lID0gZWxlbWVudC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpXG5cbiAgICBpZiAoIU9iamVjdC5rZXlzKGFsbG93TGlzdCkuaW5jbHVkZXMoZWxlbWVudE5hbWUpKSB7XG4gICAgICBlbGVtZW50LnJlbW92ZSgpXG5cbiAgICAgIGNvbnRpbnVlXG4gICAgfVxuXG4gICAgY29uc3QgYXR0cmlidXRlTGlzdCA9IFtdLmNvbmNhdCguLi5lbGVtZW50LmF0dHJpYnV0ZXMpXG4gICAgY29uc3QgYWxsb3dlZEF0dHJpYnV0ZXMgPSBbXS5jb25jYXQoYWxsb3dMaXN0WycqJ10gfHwgW10sIGFsbG93TGlzdFtlbGVtZW50TmFtZV0gfHwgW10pXG5cbiAgICBhdHRyaWJ1dGVMaXN0LmZvckVhY2goYXR0cmlidXRlID0+IHtcbiAgICAgIGlmICghYWxsb3dlZEF0dHJpYnV0ZShhdHRyaWJ1dGUsIGFsbG93ZWRBdHRyaWJ1dGVzKSkge1xuICAgICAgICBlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShhdHRyaWJ1dGUubm9kZU5hbWUpXG4gICAgICB9XG4gICAgfSlcbiAgfVxuXG4gIHJldHVybiBjcmVhdGVkRG9jdW1lbnQuYm9keS5pbm5lckhUTUxcbn1cbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMS4zKTogdG9vbHRpcC5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCAqIGFzIFBvcHBlciBmcm9tICdAcG9wcGVyanMvY29yZSdcblxuaW1wb3J0IHtcbiAgZGVmaW5lSlF1ZXJ5UGx1Z2luLFxuICBmaW5kU2hhZG93Um9vdCxcbiAgZ2V0RWxlbWVudCxcbiAgZ2V0VUlELFxuICBpc0VsZW1lbnQsXG4gIGlzUlRMLFxuICBub29wLFxuICB0eXBlQ2hlY2tDb25maWdcbn0gZnJvbSAnLi91dGlsL2luZGV4J1xuaW1wb3J0IHsgRGVmYXVsdEFsbG93bGlzdCwgc2FuaXRpemVIdG1sIH0gZnJvbSAnLi91dGlsL3Nhbml0aXplcidcbmltcG9ydCBEYXRhIGZyb20gJy4vZG9tL2RhdGEnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgTWFuaXB1bGF0b3IgZnJvbSAnLi9kb20vbWFuaXB1bGF0b3InXG5pbXBvcnQgU2VsZWN0b3JFbmdpbmUgZnJvbSAnLi9kb20vc2VsZWN0b3ItZW5naW5lJ1xuaW1wb3J0IEJhc2VDb21wb25lbnQgZnJvbSAnLi9iYXNlLWNvbXBvbmVudCdcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvbnN0YW50c1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgTkFNRSA9ICd0b29sdGlwJ1xuY29uc3QgREFUQV9LRVkgPSAnYnMudG9vbHRpcCdcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5jb25zdCBDTEFTU19QUkVGSVggPSAnYnMtdG9vbHRpcCdcbmNvbnN0IERJU0FMTE9XRURfQVRUUklCVVRFUyA9IG5ldyBTZXQoWydzYW5pdGl6ZScsICdhbGxvd0xpc3QnLCAnc2FuaXRpemVGbiddKVxuXG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgYW5pbWF0aW9uOiAnYm9vbGVhbicsXG4gIHRlbXBsYXRlOiAnc3RyaW5nJyxcbiAgdGl0bGU6ICcoc3RyaW5nfGVsZW1lbnR8ZnVuY3Rpb24pJyxcbiAgdHJpZ2dlcjogJ3N0cmluZycsXG4gIGRlbGF5OiAnKG51bWJlcnxvYmplY3QpJyxcbiAgaHRtbDogJ2Jvb2xlYW4nLFxuICBzZWxlY3RvcjogJyhzdHJpbmd8Ym9vbGVhbiknLFxuICBwbGFjZW1lbnQ6ICcoc3RyaW5nfGZ1bmN0aW9uKScsXG4gIG9mZnNldDogJyhhcnJheXxzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgY29udGFpbmVyOiAnKHN0cmluZ3xlbGVtZW50fGJvb2xlYW4pJyxcbiAgZmFsbGJhY2tQbGFjZW1lbnRzOiAnYXJyYXknLFxuICBib3VuZGFyeTogJyhzdHJpbmd8ZWxlbWVudCknLFxuICBjdXN0b21DbGFzczogJyhzdHJpbmd8ZnVuY3Rpb24pJyxcbiAgc2FuaXRpemU6ICdib29sZWFuJyxcbiAgc2FuaXRpemVGbjogJyhudWxsfGZ1bmN0aW9uKScsXG4gIGFsbG93TGlzdDogJ29iamVjdCcsXG4gIHBvcHBlckNvbmZpZzogJyhudWxsfG9iamVjdHxmdW5jdGlvbiknXG59XG5cbmNvbnN0IEF0dGFjaG1lbnRNYXAgPSB7XG4gIEFVVE86ICdhdXRvJyxcbiAgVE9QOiAndG9wJyxcbiAgUklHSFQ6IGlzUlRMKCkgPyAnbGVmdCcgOiAncmlnaHQnLFxuICBCT1RUT006ICdib3R0b20nLFxuICBMRUZUOiBpc1JUTCgpID8gJ3JpZ2h0JyA6ICdsZWZ0J1xufVxuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBhbmltYXRpb246IHRydWUsXG4gIHRlbXBsYXRlOiAnPGRpdiBjbGFzcz1cInRvb2x0aXBcIiByb2xlPVwidG9vbHRpcFwiPicgK1xuICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInRvb2x0aXAtYXJyb3dcIj48L2Rpdj4nICtcbiAgICAgICAgICAgICAgJzxkaXYgY2xhc3M9XCJ0b29sdGlwLWlubmVyXCI+PC9kaXY+JyArXG4gICAgICAgICAgICAnPC9kaXY+JyxcbiAgdHJpZ2dlcjogJ2hvdmVyIGZvY3VzJyxcbiAgdGl0bGU6ICcnLFxuICBkZWxheTogMCxcbiAgaHRtbDogZmFsc2UsXG4gIHNlbGVjdG9yOiBmYWxzZSxcbiAgcGxhY2VtZW50OiAndG9wJyxcbiAgb2Zmc2V0OiBbMCwgMF0sXG4gIGNvbnRhaW5lcjogZmFsc2UsXG4gIGZhbGxiYWNrUGxhY2VtZW50czogWyd0b3AnLCAncmlnaHQnLCAnYm90dG9tJywgJ2xlZnQnXSxcbiAgYm91bmRhcnk6ICdjbGlwcGluZ1BhcmVudHMnLFxuICBjdXN0b21DbGFzczogJycsXG4gIHNhbml0aXplOiB0cnVlLFxuICBzYW5pdGl6ZUZuOiBudWxsLFxuICBhbGxvd0xpc3Q6IERlZmF1bHRBbGxvd2xpc3QsXG4gIHBvcHBlckNvbmZpZzogbnVsbFxufVxuXG5jb25zdCBFdmVudCA9IHtcbiAgSElERTogYGhpZGUke0VWRU5UX0tFWX1gLFxuICBISURERU46IGBoaWRkZW4ke0VWRU5UX0tFWX1gLFxuICBTSE9XOiBgc2hvdyR7RVZFTlRfS0VZfWAsXG4gIFNIT1dOOiBgc2hvd24ke0VWRU5UX0tFWX1gLFxuICBJTlNFUlRFRDogYGluc2VydGVkJHtFVkVOVF9LRVl9YCxcbiAgQ0xJQ0s6IGBjbGljayR7RVZFTlRfS0VZfWAsXG4gIEZPQ1VTSU46IGBmb2N1c2luJHtFVkVOVF9LRVl9YCxcbiAgRk9DVVNPVVQ6IGBmb2N1c291dCR7RVZFTlRfS0VZfWAsXG4gIE1PVVNFRU5URVI6IGBtb3VzZWVudGVyJHtFVkVOVF9LRVl9YCxcbiAgTU9VU0VMRUFWRTogYG1vdXNlbGVhdmUke0VWRU5UX0tFWX1gXG59XG5cbmNvbnN0IENMQVNTX05BTUVfRkFERSA9ICdmYWRlJ1xuY29uc3QgQ0xBU1NfTkFNRV9NT0RBTCA9ICdtb2RhbCdcbmNvbnN0IENMQVNTX05BTUVfU0hPVyA9ICdzaG93J1xuXG5jb25zdCBIT1ZFUl9TVEFURV9TSE9XID0gJ3Nob3cnXG5jb25zdCBIT1ZFUl9TVEFURV9PVVQgPSAnb3V0J1xuXG5jb25zdCBTRUxFQ1RPUl9UT09MVElQX0lOTkVSID0gJy50b29sdGlwLWlubmVyJ1xuY29uc3QgU0VMRUNUT1JfTU9EQUwgPSBgLiR7Q0xBU1NfTkFNRV9NT0RBTH1gXG5cbmNvbnN0IEVWRU5UX01PREFMX0hJREUgPSAnaGlkZS5icy5tb2RhbCdcblxuY29uc3QgVFJJR0dFUl9IT1ZFUiA9ICdob3ZlcidcbmNvbnN0IFRSSUdHRVJfRk9DVVMgPSAnZm9jdXMnXG5jb25zdCBUUklHR0VSX0NMSUNLID0gJ2NsaWNrJ1xuY29uc3QgVFJJR0dFUl9NQU5VQUwgPSAnbWFudWFsJ1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ2xhc3MgRGVmaW5pdGlvblxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY2xhc3MgVG9vbHRpcCBleHRlbmRzIEJhc2VDb21wb25lbnQge1xuICBjb25zdHJ1Y3RvcihlbGVtZW50LCBjb25maWcpIHtcbiAgICBpZiAodHlwZW9mIFBvcHBlciA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0Jvb3RzdHJhcFxcJ3MgdG9vbHRpcHMgcmVxdWlyZSBQb3BwZXIgKGh0dHBzOi8vcG9wcGVyLmpzLm9yZyknKVxuICAgIH1cblxuICAgIHN1cGVyKGVsZW1lbnQpXG5cbiAgICAvLyBwcml2YXRlXG4gICAgdGhpcy5faXNFbmFibGVkID0gdHJ1ZVxuICAgIHRoaXMuX3RpbWVvdXQgPSAwXG4gICAgdGhpcy5faG92ZXJTdGF0ZSA9ICcnXG4gICAgdGhpcy5fYWN0aXZlVHJpZ2dlciA9IHt9XG4gICAgdGhpcy5fcG9wcGVyID0gbnVsbFxuXG4gICAgLy8gUHJvdGVjdGVkXG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZylcbiAgICB0aGlzLnRpcCA9IG51bGxcblxuICAgIHRoaXMuX3NldExpc3RlbmVycygpXG4gIH1cblxuICAvLyBHZXR0ZXJzXG5cbiAgc3RhdGljIGdldCBEZWZhdWx0KCkge1xuICAgIHJldHVybiBEZWZhdWx0XG4gIH1cblxuICBzdGF0aWMgZ2V0IE5BTUUoKSB7XG4gICAgcmV0dXJuIE5BTUVcbiAgfVxuXG4gIHN0YXRpYyBnZXQgRXZlbnQoKSB7XG4gICAgcmV0dXJuIEV2ZW50XG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHRUeXBlKCkge1xuICAgIHJldHVybiBEZWZhdWx0VHlwZVxuICB9XG5cbiAgLy8gUHVibGljXG5cbiAgZW5hYmxlKCkge1xuICAgIHRoaXMuX2lzRW5hYmxlZCA9IHRydWVcbiAgfVxuXG4gIGRpc2FibGUoKSB7XG4gICAgdGhpcy5faXNFbmFibGVkID0gZmFsc2VcbiAgfVxuXG4gIHRvZ2dsZUVuYWJsZWQoKSB7XG4gICAgdGhpcy5faXNFbmFibGVkID0gIXRoaXMuX2lzRW5hYmxlZFxuICB9XG5cbiAgdG9nZ2xlKGV2ZW50KSB7XG4gICAgaWYgKCF0aGlzLl9pc0VuYWJsZWQpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChldmVudCkge1xuICAgICAgY29uc3QgY29udGV4dCA9IHRoaXMuX2luaXRpYWxpemVPbkRlbGVnYXRlZFRhcmdldChldmVudClcblxuICAgICAgY29udGV4dC5fYWN0aXZlVHJpZ2dlci5jbGljayA9ICFjb250ZXh0Ll9hY3RpdmVUcmlnZ2VyLmNsaWNrXG5cbiAgICAgIGlmIChjb250ZXh0Ll9pc1dpdGhBY3RpdmVUcmlnZ2VyKCkpIHtcbiAgICAgICAgY29udGV4dC5fZW50ZXIobnVsbCwgY29udGV4dClcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbnRleHQuX2xlYXZlKG51bGwsIGNvbnRleHQpXG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmdldFRpcEVsZW1lbnQoKS5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9TSE9XKSkge1xuICAgICAgICB0aGlzLl9sZWF2ZShudWxsLCB0aGlzKVxuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgdGhpcy5fZW50ZXIobnVsbCwgdGhpcylcbiAgICB9XG4gIH1cblxuICBkaXNwb3NlKCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KVxuXG4gICAgRXZlbnRIYW5kbGVyLm9mZih0aGlzLl9lbGVtZW50LmNsb3Nlc3QoU0VMRUNUT1JfTU9EQUwpLCBFVkVOVF9NT0RBTF9ISURFLCB0aGlzLl9oaWRlTW9kYWxIYW5kbGVyKVxuXG4gICAgaWYgKHRoaXMudGlwKSB7XG4gICAgICB0aGlzLnRpcC5yZW1vdmUoKVxuICAgIH1cblxuICAgIHRoaXMuX2Rpc3Bvc2VQb3BwZXIoKVxuICAgIHN1cGVyLmRpc3Bvc2UoKVxuICB9XG5cbiAgc2hvdygpIHtcbiAgICBpZiAodGhpcy5fZWxlbWVudC5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignUGxlYXNlIHVzZSBzaG93IG9uIHZpc2libGUgZWxlbWVudHMnKVxuICAgIH1cblxuICAgIGlmICghKHRoaXMuaXNXaXRoQ29udGVudCgpICYmIHRoaXMuX2lzRW5hYmxlZCkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IHNob3dFdmVudCA9IEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuRXZlbnQuU0hPVylcbiAgICBjb25zdCBzaGFkb3dSb290ID0gZmluZFNoYWRvd1Jvb3QodGhpcy5fZWxlbWVudClcbiAgICBjb25zdCBpc0luVGhlRG9tID0gc2hhZG93Um9vdCA9PT0gbnVsbCA/XG4gICAgICB0aGlzLl9lbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zKHRoaXMuX2VsZW1lbnQpIDpcbiAgICAgIHNoYWRvd1Jvb3QuY29udGFpbnModGhpcy5fZWxlbWVudClcblxuICAgIGlmIChzaG93RXZlbnQuZGVmYXVsdFByZXZlbnRlZCB8fCAhaXNJblRoZURvbSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgLy8gQSB0cmljayB0byByZWNyZWF0ZSBhIHRvb2x0aXAgaW4gY2FzZSBhIG5ldyB0aXRsZSBpcyBnaXZlbiBieSB1c2luZyB0aGUgTk9UIGRvY3VtZW50ZWQgYGRhdGEtYnMtb3JpZ2luYWwtdGl0bGVgXG4gICAgLy8gVGhpcyB3aWxsIGJlIHJlbW92ZWQgbGF0ZXIgaW4gZmF2b3Igb2YgYSBgc2V0Q29udGVudGAgbWV0aG9kXG4gICAgaWYgKHRoaXMuY29uc3RydWN0b3IuTkFNRSA9PT0gJ3Rvb2x0aXAnICYmIHRoaXMudGlwICYmIHRoaXMuZ2V0VGl0bGUoKSAhPT0gdGhpcy50aXAucXVlcnlTZWxlY3RvcihTRUxFQ1RPUl9UT09MVElQX0lOTkVSKS5pbm5lckhUTUwpIHtcbiAgICAgIHRoaXMuX2Rpc3Bvc2VQb3BwZXIoKVxuICAgICAgdGhpcy50aXAucmVtb3ZlKClcbiAgICAgIHRoaXMudGlwID0gbnVsbFxuICAgIH1cblxuICAgIGNvbnN0IHRpcCA9IHRoaXMuZ2V0VGlwRWxlbWVudCgpXG4gICAgY29uc3QgdGlwSWQgPSBnZXRVSUQodGhpcy5jb25zdHJ1Y3Rvci5OQU1FKVxuXG4gICAgdGlwLnNldEF0dHJpYnV0ZSgnaWQnLCB0aXBJZClcbiAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1kZXNjcmliZWRieScsIHRpcElkKVxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5hbmltYXRpb24pIHtcbiAgICAgIHRpcC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfRkFERSlcbiAgICB9XG5cbiAgICBjb25zdCBwbGFjZW1lbnQgPSB0eXBlb2YgdGhpcy5fY29uZmlnLnBsYWNlbWVudCA9PT0gJ2Z1bmN0aW9uJyA/XG4gICAgICB0aGlzLl9jb25maWcucGxhY2VtZW50LmNhbGwodGhpcywgdGlwLCB0aGlzLl9lbGVtZW50KSA6XG4gICAgICB0aGlzLl9jb25maWcucGxhY2VtZW50XG5cbiAgICBjb25zdCBhdHRhY2htZW50ID0gdGhpcy5fZ2V0QXR0YWNobWVudChwbGFjZW1lbnQpXG4gICAgdGhpcy5fYWRkQXR0YWNobWVudENsYXNzKGF0dGFjaG1lbnQpXG5cbiAgICBjb25zdCB7IGNvbnRhaW5lciB9ID0gdGhpcy5fY29uZmlnXG4gICAgRGF0YS5zZXQodGlwLCB0aGlzLmNvbnN0cnVjdG9yLkRBVEFfS0VZLCB0aGlzKVxuXG4gICAgaWYgKCF0aGlzLl9lbGVtZW50Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zKHRoaXMudGlwKSkge1xuICAgICAgY29udGFpbmVyLmFwcGVuZCh0aXApXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLkV2ZW50LklOU0VSVEVEKVxuICAgIH1cblxuICAgIGlmICh0aGlzLl9wb3BwZXIpIHtcbiAgICAgIHRoaXMuX3BvcHBlci51cGRhdGUoKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLl9wb3BwZXIgPSBQb3BwZXIuY3JlYXRlUG9wcGVyKHRoaXMuX2VsZW1lbnQsIHRpcCwgdGhpcy5fZ2V0UG9wcGVyQ29uZmlnKGF0dGFjaG1lbnQpKVxuICAgIH1cblxuICAgIHRpcC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPVylcblxuICAgIGNvbnN0IGN1c3RvbUNsYXNzID0gdGhpcy5fcmVzb2x2ZVBvc3NpYmxlRnVuY3Rpb24odGhpcy5fY29uZmlnLmN1c3RvbUNsYXNzKVxuICAgIGlmIChjdXN0b21DbGFzcykge1xuICAgICAgdGlwLmNsYXNzTGlzdC5hZGQoLi4uY3VzdG9tQ2xhc3Muc3BsaXQoJyAnKSlcbiAgICB9XG5cbiAgICAvLyBJZiB0aGlzIGlzIGEgdG91Y2gtZW5hYmxlZCBkZXZpY2Ugd2UgYWRkIGV4dHJhXG4gICAgLy8gZW1wdHkgbW91c2VvdmVyIGxpc3RlbmVycyB0byB0aGUgYm9keSdzIGltbWVkaWF0ZSBjaGlsZHJlbjtcbiAgICAvLyBvbmx5IG5lZWRlZCBiZWNhdXNlIG9mIGJyb2tlbiBldmVudCBkZWxlZ2F0aW9uIG9uIGlPU1xuICAgIC8vIGh0dHBzOi8vd3d3LnF1aXJrc21vZGUub3JnL2Jsb2cvYXJjaGl2ZXMvMjAxNC8wMi9tb3VzZV9ldmVudF9idWIuaHRtbFxuICAgIGlmICgnb250b3VjaHN0YXJ0JyBpbiBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpIHtcbiAgICAgIFtdLmNvbmNhdCguLi5kb2N1bWVudC5ib2R5LmNoaWxkcmVuKS5mb3JFYWNoKGVsZW1lbnQgPT4ge1xuICAgICAgICBFdmVudEhhbmRsZXIub24oZWxlbWVudCwgJ21vdXNlb3ZlcicsIG5vb3ApXG4gICAgICB9KVxuICAgIH1cblxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgY29uc3QgcHJldkhvdmVyU3RhdGUgPSB0aGlzLl9ob3ZlclN0YXRlXG5cbiAgICAgIHRoaXMuX2hvdmVyU3RhdGUgPSBudWxsXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLkV2ZW50LlNIT1dOKVxuXG4gICAgICBpZiAocHJldkhvdmVyU3RhdGUgPT09IEhPVkVSX1NUQVRFX09VVCkge1xuICAgICAgICB0aGlzLl9sZWF2ZShudWxsLCB0aGlzKVxuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGlzQW5pbWF0ZWQgPSB0aGlzLnRpcC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9GQURFKVxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMudGlwLCBpc0FuaW1hdGVkKVxuICB9XG5cbiAgaGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuX3BvcHBlcikge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgdGlwID0gdGhpcy5nZXRUaXBFbGVtZW50KClcbiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHtcbiAgICAgIGlmICh0aGlzLl9pc1dpdGhBY3RpdmVUcmlnZ2VyKCkpIHtcbiAgICAgICAgcmV0dXJuXG4gICAgICB9XG5cbiAgICAgIGlmICh0aGlzLl9ob3ZlclN0YXRlICE9PSBIT1ZFUl9TVEFURV9TSE9XKSB7XG4gICAgICAgIHRpcC5yZW1vdmUoKVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9jbGVhblRpcENsYXNzKClcbiAgICAgIHRoaXMuX2VsZW1lbnQucmVtb3ZlQXR0cmlidXRlKCdhcmlhLWRlc2NyaWJlZGJ5JylcbiAgICAgIEV2ZW50SGFuZGxlci50cmlnZ2VyKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuRXZlbnQuSElEREVOKVxuXG4gICAgICB0aGlzLl9kaXNwb3NlUG9wcGVyKClcbiAgICB9XG5cbiAgICBjb25zdCBoaWRlRXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCB0aGlzLmNvbnN0cnVjdG9yLkV2ZW50LkhJREUpXG4gICAgaWYgKGhpZGVFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aXAuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpXG5cbiAgICAvLyBJZiB0aGlzIGlzIGEgdG91Y2gtZW5hYmxlZCBkZXZpY2Ugd2UgcmVtb3ZlIHRoZSBleHRyYVxuICAgIC8vIGVtcHR5IG1vdXNlb3ZlciBsaXN0ZW5lcnMgd2UgYWRkZWQgZm9yIGlPUyBzdXBwb3J0XG4gICAgaWYgKCdvbnRvdWNoc3RhcnQnIGluIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkge1xuICAgICAgW10uY29uY2F0KC4uLmRvY3VtZW50LmJvZHkuY2hpbGRyZW4pXG4gICAgICAgIC5mb3JFYWNoKGVsZW1lbnQgPT4gRXZlbnRIYW5kbGVyLm9mZihlbGVtZW50LCAnbW91c2VvdmVyJywgbm9vcCkpXG4gICAgfVxuXG4gICAgdGhpcy5fYWN0aXZlVHJpZ2dlcltUUklHR0VSX0NMSUNLXSA9IGZhbHNlXG4gICAgdGhpcy5fYWN0aXZlVHJpZ2dlcltUUklHR0VSX0ZPQ1VTXSA9IGZhbHNlXG4gICAgdGhpcy5fYWN0aXZlVHJpZ2dlcltUUklHR0VSX0hPVkVSXSA9IGZhbHNlXG5cbiAgICBjb25zdCBpc0FuaW1hdGVkID0gdGhpcy50aXAuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRkFERSlcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCB0aGlzLnRpcCwgaXNBbmltYXRlZClcbiAgICB0aGlzLl9ob3ZlclN0YXRlID0gJydcbiAgfVxuXG4gIHVwZGF0ZSgpIHtcbiAgICBpZiAodGhpcy5fcG9wcGVyICE9PSBudWxsKSB7XG4gICAgICB0aGlzLl9wb3BwZXIudXBkYXRlKClcbiAgICB9XG4gIH1cblxuICAvLyBQcm90ZWN0ZWRcblxuICBpc1dpdGhDb250ZW50KCkge1xuICAgIHJldHVybiBCb29sZWFuKHRoaXMuZ2V0VGl0bGUoKSlcbiAgfVxuXG4gIGdldFRpcEVsZW1lbnQoKSB7XG4gICAgaWYgKHRoaXMudGlwKSB7XG4gICAgICByZXR1cm4gdGhpcy50aXBcbiAgICB9XG5cbiAgICBjb25zdCBlbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2JylcbiAgICBlbGVtZW50LmlubmVySFRNTCA9IHRoaXMuX2NvbmZpZy50ZW1wbGF0ZVxuXG4gICAgY29uc3QgdGlwID0gZWxlbWVudC5jaGlsZHJlblswXVxuICAgIHRoaXMuc2V0Q29udGVudCh0aXApXG4gICAgdGlwLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9GQURFLCBDTEFTU19OQU1FX1NIT1cpXG5cbiAgICB0aGlzLnRpcCA9IHRpcFxuICAgIHJldHVybiB0aGlzLnRpcFxuICB9XG5cbiAgc2V0Q29udGVudCh0aXApIHtcbiAgICB0aGlzLl9zYW5pdGl6ZUFuZFNldENvbnRlbnQodGlwLCB0aGlzLmdldFRpdGxlKCksIFNFTEVDVE9SX1RPT0xUSVBfSU5ORVIpXG4gIH1cblxuICBfc2FuaXRpemVBbmRTZXRDb250ZW50KHRlbXBsYXRlLCBjb250ZW50LCBzZWxlY3Rvcikge1xuICAgIGNvbnN0IHRlbXBsYXRlRWxlbWVudCA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoc2VsZWN0b3IsIHRlbXBsYXRlKVxuXG4gICAgaWYgKCFjb250ZW50ICYmIHRlbXBsYXRlRWxlbWVudCkge1xuICAgICAgdGVtcGxhdGVFbGVtZW50LnJlbW92ZSgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICAvLyB3ZSB1c2UgYXBwZW5kIGZvciBodG1sIG9iamVjdHMgdG8gbWFpbnRhaW4ganMgZXZlbnRzXG4gICAgdGhpcy5zZXRFbGVtZW50Q29udGVudCh0ZW1wbGF0ZUVsZW1lbnQsIGNvbnRlbnQpXG4gIH1cblxuICBzZXRFbGVtZW50Q29udGVudChlbGVtZW50LCBjb250ZW50KSB7XG4gICAgaWYgKGVsZW1lbnQgPT09IG51bGwpIHtcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmIChpc0VsZW1lbnQoY29udGVudCkpIHtcbiAgICAgIGNvbnRlbnQgPSBnZXRFbGVtZW50KGNvbnRlbnQpXG5cbiAgICAgIC8vIGNvbnRlbnQgaXMgYSBET00gbm9kZSBvciBhIGpRdWVyeVxuICAgICAgaWYgKHRoaXMuX2NvbmZpZy5odG1sKSB7XG4gICAgICAgIGlmIChjb250ZW50LnBhcmVudE5vZGUgIT09IGVsZW1lbnQpIHtcbiAgICAgICAgICBlbGVtZW50LmlubmVySFRNTCA9ICcnXG4gICAgICAgICAgZWxlbWVudC5hcHBlbmQoY29udGVudClcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZWxlbWVudC50ZXh0Q29udGVudCA9IGNvbnRlbnQudGV4dENvbnRlbnRcbiAgICAgIH1cblxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5odG1sKSB7XG4gICAgICBpZiAodGhpcy5fY29uZmlnLnNhbml0aXplKSB7XG4gICAgICAgIGNvbnRlbnQgPSBzYW5pdGl6ZUh0bWwoY29udGVudCwgdGhpcy5fY29uZmlnLmFsbG93TGlzdCwgdGhpcy5fY29uZmlnLnNhbml0aXplRm4pXG4gICAgICB9XG5cbiAgICAgIGVsZW1lbnQuaW5uZXJIVE1MID0gY29udGVudFxuICAgIH0gZWxzZSB7XG4gICAgICBlbGVtZW50LnRleHRDb250ZW50ID0gY29udGVudFxuICAgIH1cbiAgfVxuXG4gIGdldFRpdGxlKCkge1xuICAgIGNvbnN0IHRpdGxlID0gdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtb3JpZ2luYWwtdGl0bGUnKSB8fCB0aGlzLl9jb25maWcudGl0bGVcblxuICAgIHJldHVybiB0aGlzLl9yZXNvbHZlUG9zc2libGVGdW5jdGlvbih0aXRsZSlcbiAgfVxuXG4gIHVwZGF0ZUF0dGFjaG1lbnQoYXR0YWNobWVudCkge1xuICAgIGlmIChhdHRhY2htZW50ID09PSAncmlnaHQnKSB7XG4gICAgICByZXR1cm4gJ2VuZCdcbiAgICB9XG5cbiAgICBpZiAoYXR0YWNobWVudCA9PT0gJ2xlZnQnKSB7XG4gICAgICByZXR1cm4gJ3N0YXJ0J1xuICAgIH1cblxuICAgIHJldHVybiBhdHRhY2htZW50XG4gIH1cblxuICAvLyBQcml2YXRlXG5cbiAgX2luaXRpYWxpemVPbkRlbGVnYXRlZFRhcmdldChldmVudCwgY29udGV4dCkge1xuICAgIHJldHVybiBjb250ZXh0IHx8IHRoaXMuY29uc3RydWN0b3IuZ2V0T3JDcmVhdGVJbnN0YW5jZShldmVudC5kZWxlZ2F0ZVRhcmdldCwgdGhpcy5fZ2V0RGVsZWdhdGVDb25maWcoKSlcbiAgfVxuXG4gIF9nZXRPZmZzZXQoKSB7XG4gICAgY29uc3QgeyBvZmZzZXQgfSA9IHRoaXMuX2NvbmZpZ1xuXG4gICAgaWYgKHR5cGVvZiBvZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgICByZXR1cm4gb2Zmc2V0LnNwbGl0KCcsJykubWFwKHZhbCA9PiBOdW1iZXIucGFyc2VJbnQodmFsLCAxMCkpXG4gICAgfVxuXG4gICAgaWYgKHR5cGVvZiBvZmZzZXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgIHJldHVybiBwb3BwZXJEYXRhID0+IG9mZnNldChwb3BwZXJEYXRhLCB0aGlzLl9lbGVtZW50KVxuICAgIH1cblxuICAgIHJldHVybiBvZmZzZXRcbiAgfVxuXG4gIF9yZXNvbHZlUG9zc2libGVGdW5jdGlvbihjb250ZW50KSB7XG4gICAgcmV0dXJuIHR5cGVvZiBjb250ZW50ID09PSAnZnVuY3Rpb24nID8gY29udGVudC5jYWxsKHRoaXMuX2VsZW1lbnQpIDogY29udGVudFxuICB9XG5cbiAgX2dldFBvcHBlckNvbmZpZyhhdHRhY2htZW50KSB7XG4gICAgY29uc3QgZGVmYXVsdEJzUG9wcGVyQ29uZmlnID0ge1xuICAgICAgcGxhY2VtZW50OiBhdHRhY2htZW50LFxuICAgICAgbW9kaWZpZXJzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnZmxpcCcsXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgZmFsbGJhY2tQbGFjZW1lbnRzOiB0aGlzLl9jb25maWcuZmFsbGJhY2tQbGFjZW1lbnRzXG4gICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogJ29mZnNldCcsXG4gICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgb2Zmc2V0OiB0aGlzLl9nZXRPZmZzZXQoKVxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdwcmV2ZW50T3ZlcmZsb3cnLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIGJvdW5kYXJ5OiB0aGlzLl9jb25maWcuYm91bmRhcnlcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnYXJyb3cnLFxuICAgICAgICAgIG9wdGlvbnM6IHtcbiAgICAgICAgICAgIGVsZW1lbnQ6IGAuJHt0aGlzLmNvbnN0cnVjdG9yLk5BTUV9LWFycm93YFxuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdvbkNoYW5nZScsXG4gICAgICAgICAgZW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICBwaGFzZTogJ2FmdGVyV3JpdGUnLFxuICAgICAgICAgIGZuOiBkYXRhID0+IHRoaXMuX2hhbmRsZVBvcHBlclBsYWNlbWVudENoYW5nZShkYXRhKVxuICAgICAgICB9XG4gICAgICBdLFxuICAgICAgb25GaXJzdFVwZGF0ZTogZGF0YSA9PiB7XG4gICAgICAgIGlmIChkYXRhLm9wdGlvbnMucGxhY2VtZW50ICE9PSBkYXRhLnBsYWNlbWVudCkge1xuICAgICAgICAgIHRoaXMuX2hhbmRsZVBvcHBlclBsYWNlbWVudENoYW5nZShkYXRhKVxuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIC4uLmRlZmF1bHRCc1BvcHBlckNvbmZpZyxcbiAgICAgIC4uLih0eXBlb2YgdGhpcy5fY29uZmlnLnBvcHBlckNvbmZpZyA9PT0gJ2Z1bmN0aW9uJyA/IHRoaXMuX2NvbmZpZy5wb3BwZXJDb25maWcoZGVmYXVsdEJzUG9wcGVyQ29uZmlnKSA6IHRoaXMuX2NvbmZpZy5wb3BwZXJDb25maWcpXG4gICAgfVxuICB9XG5cbiAgX2FkZEF0dGFjaG1lbnRDbGFzcyhhdHRhY2htZW50KSB7XG4gICAgdGhpcy5nZXRUaXBFbGVtZW50KCkuY2xhc3NMaXN0LmFkZChgJHt0aGlzLl9nZXRCYXNpY0NsYXNzUHJlZml4KCl9LSR7dGhpcy51cGRhdGVBdHRhY2htZW50KGF0dGFjaG1lbnQpfWApXG4gIH1cblxuICBfZ2V0QXR0YWNobWVudChwbGFjZW1lbnQpIHtcbiAgICByZXR1cm4gQXR0YWNobWVudE1hcFtwbGFjZW1lbnQudG9VcHBlckNhc2UoKV1cbiAgfVxuXG4gIF9zZXRMaXN0ZW5lcnMoKSB7XG4gICAgY29uc3QgdHJpZ2dlcnMgPSB0aGlzLl9jb25maWcudHJpZ2dlci5zcGxpdCgnICcpXG5cbiAgICB0cmlnZ2Vycy5mb3JFYWNoKHRyaWdnZXIgPT4ge1xuICAgICAgaWYgKHRyaWdnZXIgPT09ICdjbGljaycpIHtcbiAgICAgICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIHRoaXMuY29uc3RydWN0b3IuRXZlbnQuQ0xJQ0ssIHRoaXMuX2NvbmZpZy5zZWxlY3RvciwgZXZlbnQgPT4gdGhpcy50b2dnbGUoZXZlbnQpKVxuICAgICAgfSBlbHNlIGlmICh0cmlnZ2VyICE9PSBUUklHR0VSX01BTlVBTCkge1xuICAgICAgICBjb25zdCBldmVudEluID0gdHJpZ2dlciA9PT0gVFJJR0dFUl9IT1ZFUiA/XG4gICAgICAgICAgdGhpcy5jb25zdHJ1Y3Rvci5FdmVudC5NT1VTRUVOVEVSIDpcbiAgICAgICAgICB0aGlzLmNvbnN0cnVjdG9yLkV2ZW50LkZPQ1VTSU5cbiAgICAgICAgY29uc3QgZXZlbnRPdXQgPSB0cmlnZ2VyID09PSBUUklHR0VSX0hPVkVSID9cbiAgICAgICAgICB0aGlzLmNvbnN0cnVjdG9yLkV2ZW50Lk1PVVNFTEVBVkUgOlxuICAgICAgICAgIHRoaXMuY29uc3RydWN0b3IuRXZlbnQuRk9DVVNPVVRcblxuICAgICAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgZXZlbnRJbiwgdGhpcy5fY29uZmlnLnNlbGVjdG9yLCBldmVudCA9PiB0aGlzLl9lbnRlcihldmVudCkpXG4gICAgICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LCBldmVudE91dCwgdGhpcy5fY29uZmlnLnNlbGVjdG9yLCBldmVudCA9PiB0aGlzLl9sZWF2ZShldmVudCkpXG4gICAgICB9XG4gICAgfSlcblxuICAgIHRoaXMuX2hpZGVNb2RhbEhhbmRsZXIgPSAoKSA9PiB7XG4gICAgICBpZiAodGhpcy5fZWxlbWVudCkge1xuICAgICAgICB0aGlzLmhpZGUoKVxuICAgICAgfVxuICAgIH1cblxuICAgIEV2ZW50SGFuZGxlci5vbih0aGlzLl9lbGVtZW50LmNsb3Nlc3QoU0VMRUNUT1JfTU9EQUwpLCBFVkVOVF9NT0RBTF9ISURFLCB0aGlzLl9oaWRlTW9kYWxIYW5kbGVyKVxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5zZWxlY3Rvcikge1xuICAgICAgdGhpcy5fY29uZmlnID0ge1xuICAgICAgICAuLi50aGlzLl9jb25maWcsXG4gICAgICAgIHRyaWdnZXI6ICdtYW51YWwnLFxuICAgICAgICBzZWxlY3RvcjogJydcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZml4VGl0bGUoKVxuICAgIH1cbiAgfVxuXG4gIF9maXhUaXRsZSgpIHtcbiAgICBjb25zdCB0aXRsZSA9IHRoaXMuX2VsZW1lbnQuZ2V0QXR0cmlidXRlKCd0aXRsZScpXG4gICAgY29uc3Qgb3JpZ2luYWxUaXRsZVR5cGUgPSB0eXBlb2YgdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtb3JpZ2luYWwtdGl0bGUnKVxuXG4gICAgaWYgKHRpdGxlIHx8IG9yaWdpbmFsVGl0bGVUeXBlICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhpcy5fZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ2RhdGEtYnMtb3JpZ2luYWwtdGl0bGUnLCB0aXRsZSB8fCAnJylcbiAgICAgIGlmICh0aXRsZSAmJiAhdGhpcy5fZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnKSAmJiAhdGhpcy5fZWxlbWVudC50ZXh0Q29udGVudCkge1xuICAgICAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHRpdGxlKVxuICAgICAgfVxuXG4gICAgICB0aGlzLl9lbGVtZW50LnNldEF0dHJpYnV0ZSgndGl0bGUnLCAnJylcbiAgICB9XG4gIH1cblxuICBfZW50ZXIoZXZlbnQsIGNvbnRleHQpIHtcbiAgICBjb250ZXh0ID0gdGhpcy5faW5pdGlhbGl6ZU9uRGVsZWdhdGVkVGFyZ2V0KGV2ZW50LCBjb250ZXh0KVxuXG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBjb250ZXh0Ll9hY3RpdmVUcmlnZ2VyW1xuICAgICAgICBldmVudC50eXBlID09PSAnZm9jdXNpbicgPyBUUklHR0VSX0ZPQ1VTIDogVFJJR0dFUl9IT1ZFUlxuICAgICAgXSA9IHRydWVcbiAgICB9XG5cbiAgICBpZiAoY29udGV4dC5nZXRUaXBFbGVtZW50KCkuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0hPVykgfHwgY29udGV4dC5faG92ZXJTdGF0ZSA9PT0gSE9WRVJfU1RBVEVfU0hPVykge1xuICAgICAgY29udGV4dC5faG92ZXJTdGF0ZSA9IEhPVkVSX1NUQVRFX1NIT1dcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNsZWFyVGltZW91dChjb250ZXh0Ll90aW1lb3V0KVxuXG4gICAgY29udGV4dC5faG92ZXJTdGF0ZSA9IEhPVkVSX1NUQVRFX1NIT1dcblxuICAgIGlmICghY29udGV4dC5fY29uZmlnLmRlbGF5IHx8ICFjb250ZXh0Ll9jb25maWcuZGVsYXkuc2hvdykge1xuICAgICAgY29udGV4dC5zaG93KClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnRleHQuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGlmIChjb250ZXh0Ll9ob3ZlclN0YXRlID09PSBIT1ZFUl9TVEFURV9TSE9XKSB7XG4gICAgICAgIGNvbnRleHQuc2hvdygpXG4gICAgICB9XG4gICAgfSwgY29udGV4dC5fY29uZmlnLmRlbGF5LnNob3cpXG4gIH1cblxuICBfbGVhdmUoZXZlbnQsIGNvbnRleHQpIHtcbiAgICBjb250ZXh0ID0gdGhpcy5faW5pdGlhbGl6ZU9uRGVsZWdhdGVkVGFyZ2V0KGV2ZW50LCBjb250ZXh0KVxuXG4gICAgaWYgKGV2ZW50KSB7XG4gICAgICBjb250ZXh0Ll9hY3RpdmVUcmlnZ2VyW1xuICAgICAgICBldmVudC50eXBlID09PSAnZm9jdXNvdXQnID8gVFJJR0dFUl9GT0NVUyA6IFRSSUdHRVJfSE9WRVJcbiAgICAgIF0gPSBjb250ZXh0Ll9lbGVtZW50LmNvbnRhaW5zKGV2ZW50LnJlbGF0ZWRUYXJnZXQpXG4gICAgfVxuXG4gICAgaWYgKGNvbnRleHQuX2lzV2l0aEFjdGl2ZVRyaWdnZXIoKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY2xlYXJUaW1lb3V0KGNvbnRleHQuX3RpbWVvdXQpXG5cbiAgICBjb250ZXh0Ll9ob3ZlclN0YXRlID0gSE9WRVJfU1RBVEVfT1VUXG5cbiAgICBpZiAoIWNvbnRleHQuX2NvbmZpZy5kZWxheSB8fCAhY29udGV4dC5fY29uZmlnLmRlbGF5LmhpZGUpIHtcbiAgICAgIGNvbnRleHQuaGlkZSgpXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICBjb250ZXh0Ll90aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBpZiAoY29udGV4dC5faG92ZXJTdGF0ZSA9PT0gSE9WRVJfU1RBVEVfT1VUKSB7XG4gICAgICAgIGNvbnRleHQuaGlkZSgpXG4gICAgICB9XG4gICAgfSwgY29udGV4dC5fY29uZmlnLmRlbGF5LmhpZGUpXG4gIH1cblxuICBfaXNXaXRoQWN0aXZlVHJpZ2dlcigpIHtcbiAgICBmb3IgKGNvbnN0IHRyaWdnZXIgaW4gdGhpcy5fYWN0aXZlVHJpZ2dlcikge1xuICAgICAgaWYgKHRoaXMuX2FjdGl2ZVRyaWdnZXJbdHJpZ2dlcl0pIHtcbiAgICAgICAgcmV0dXJuIHRydWVcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gZmFsc2VcbiAgfVxuXG4gIF9nZXRDb25maWcoY29uZmlnKSB7XG4gICAgY29uc3QgZGF0YUF0dHJpYnV0ZXMgPSBNYW5pcHVsYXRvci5nZXREYXRhQXR0cmlidXRlcyh0aGlzLl9lbGVtZW50KVxuXG4gICAgT2JqZWN0LmtleXMoZGF0YUF0dHJpYnV0ZXMpLmZvckVhY2goZGF0YUF0dHIgPT4ge1xuICAgICAgaWYgKERJU0FMTE9XRURfQVRUUklCVVRFUy5oYXMoZGF0YUF0dHIpKSB7XG4gICAgICAgIGRlbGV0ZSBkYXRhQXR0cmlidXRlc1tkYXRhQXR0cl1cbiAgICAgIH1cbiAgICB9KVxuXG4gICAgY29uZmlnID0ge1xuICAgICAgLi4udGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0LFxuICAgICAgLi4uZGF0YUF0dHJpYnV0ZXMsXG4gICAgICAuLi4odHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgJiYgY29uZmlnID8gY29uZmlnIDoge30pXG4gICAgfVxuXG4gICAgY29uZmlnLmNvbnRhaW5lciA9IGNvbmZpZy5jb250YWluZXIgPT09IGZhbHNlID8gZG9jdW1lbnQuYm9keSA6IGdldEVsZW1lbnQoY29uZmlnLmNvbnRhaW5lcilcblxuICAgIGlmICh0eXBlb2YgY29uZmlnLmRlbGF5ID09PSAnbnVtYmVyJykge1xuICAgICAgY29uZmlnLmRlbGF5ID0ge1xuICAgICAgICBzaG93OiBjb25maWcuZGVsYXksXG4gICAgICAgIGhpZGU6IGNvbmZpZy5kZWxheVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0eXBlb2YgY29uZmlnLnRpdGxlID09PSAnbnVtYmVyJykge1xuICAgICAgY29uZmlnLnRpdGxlID0gY29uZmlnLnRpdGxlLnRvU3RyaW5nKClcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIGNvbmZpZy5jb250ZW50ID09PSAnbnVtYmVyJykge1xuICAgICAgY29uZmlnLmNvbnRlbnQgPSBjb25maWcuY29udGVudC50b1N0cmluZygpXG4gICAgfVxuXG4gICAgdHlwZUNoZWNrQ29uZmlnKE5BTUUsIGNvbmZpZywgdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0VHlwZSlcblxuICAgIGlmIChjb25maWcuc2FuaXRpemUpIHtcbiAgICAgIGNvbmZpZy50ZW1wbGF0ZSA9IHNhbml0aXplSHRtbChjb25maWcudGVtcGxhdGUsIGNvbmZpZy5hbGxvd0xpc3QsIGNvbmZpZy5zYW5pdGl6ZUZuKVxuICAgIH1cblxuICAgIHJldHVybiBjb25maWdcbiAgfVxuXG4gIF9nZXREZWxlZ2F0ZUNvbmZpZygpIHtcbiAgICBjb25zdCBjb25maWcgPSB7fVxuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gdGhpcy5fY29uZmlnKSB7XG4gICAgICBpZiAodGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0W2tleV0gIT09IHRoaXMuX2NvbmZpZ1trZXldKSB7XG4gICAgICAgIGNvbmZpZ1trZXldID0gdGhpcy5fY29uZmlnW2tleV1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJbiB0aGUgZnV0dXJlIGNhbiBiZSByZXBsYWNlZCB3aXRoOlxuICAgIC8vIGNvbnN0IGtleXNXaXRoRGlmZmVyZW50VmFsdWVzID0gT2JqZWN0LmVudHJpZXModGhpcy5fY29uZmlnKS5maWx0ZXIoZW50cnkgPT4gdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0W2VudHJ5WzBdXSAhPT0gdGhpcy5fY29uZmlnW2VudHJ5WzBdXSlcbiAgICAvLyBgT2JqZWN0LmZyb21FbnRyaWVzKGtleXNXaXRoRGlmZmVyZW50VmFsdWVzKWBcbiAgICByZXR1cm4gY29uZmlnXG4gIH1cblxuICBfY2xlYW5UaXBDbGFzcygpIHtcbiAgICBjb25zdCB0aXAgPSB0aGlzLmdldFRpcEVsZW1lbnQoKVxuICAgIGNvbnN0IGJhc2ljQ2xhc3NQcmVmaXhSZWdleCA9IG5ldyBSZWdFeHAoYChefFxcXFxzKSR7dGhpcy5fZ2V0QmFzaWNDbGFzc1ByZWZpeCgpfVxcXFxTK2AsICdnJylcbiAgICBjb25zdCB0YWJDbGFzcyA9IHRpcC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJykubWF0Y2goYmFzaWNDbGFzc1ByZWZpeFJlZ2V4KVxuICAgIGlmICh0YWJDbGFzcyAhPT0gbnVsbCAmJiB0YWJDbGFzcy5sZW5ndGggPiAwKSB7XG4gICAgICB0YWJDbGFzcy5tYXAodG9rZW4gPT4gdG9rZW4udHJpbSgpKVxuICAgICAgICAuZm9yRWFjaCh0Q2xhc3MgPT4gdGlwLmNsYXNzTGlzdC5yZW1vdmUodENsYXNzKSlcbiAgICB9XG4gIH1cblxuICBfZ2V0QmFzaWNDbGFzc1ByZWZpeCgpIHtcbiAgICByZXR1cm4gQ0xBU1NfUFJFRklYXG4gIH1cblxuICBfaGFuZGxlUG9wcGVyUGxhY2VtZW50Q2hhbmdlKHBvcHBlckRhdGEpIHtcbiAgICBjb25zdCB7IHN0YXRlIH0gPSBwb3BwZXJEYXRhXG5cbiAgICBpZiAoIXN0YXRlKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnRpcCA9IHN0YXRlLmVsZW1lbnRzLnBvcHBlclxuICAgIHRoaXMuX2NsZWFuVGlwQ2xhc3MoKVxuICAgIHRoaXMuX2FkZEF0dGFjaG1lbnRDbGFzcyh0aGlzLl9nZXRBdHRhY2htZW50KHN0YXRlLnBsYWNlbWVudCkpXG4gIH1cblxuICBfZGlzcG9zZVBvcHBlcigpIHtcbiAgICBpZiAodGhpcy5fcG9wcGVyKSB7XG4gICAgICB0aGlzLl9wb3BwZXIuZGVzdHJveSgpXG4gICAgICB0aGlzLl9wb3BwZXIgPSBudWxsXG4gICAgfVxuICB9XG5cbiAgLy8gU3RhdGljXG5cbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBUb29sdGlwLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKVxuICAgICAgICB9XG5cbiAgICAgICAgZGF0YVtjb25maWddKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBqUXVlcnlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogYWRkIC5Ub29sdGlwIHRvIGpRdWVyeSBvbmx5IGlmIGpRdWVyeSBpcyBwcmVzZW50XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFRvb2x0aXApXG5cbmV4cG9ydCBkZWZhdWx0IFRvb2x0aXBcbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMS4zKTogcG9wb3Zlci5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCB7IGRlZmluZUpRdWVyeVBsdWdpbiB9IGZyb20gJy4vdXRpbC9pbmRleCdcbmltcG9ydCBUb29sdGlwIGZyb20gJy4vdG9vbHRpcCdcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvbnN0YW50c1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgTkFNRSA9ICdwb3BvdmVyJ1xuY29uc3QgREFUQV9LRVkgPSAnYnMucG9wb3ZlcidcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5jb25zdCBDTEFTU19QUkVGSVggPSAnYnMtcG9wb3ZlcidcblxuY29uc3QgRGVmYXVsdCA9IHtcbiAgLi4uVG9vbHRpcC5EZWZhdWx0LFxuICBwbGFjZW1lbnQ6ICdyaWdodCcsXG4gIG9mZnNldDogWzAsIDhdLFxuICB0cmlnZ2VyOiAnY2xpY2snLFxuICBjb250ZW50OiAnJyxcbiAgdGVtcGxhdGU6ICc8ZGl2IGNsYXNzPVwicG9wb3ZlclwiIHJvbGU9XCJ0b29sdGlwXCI+JyArXG4gICAgICAgICAgICAgICc8ZGl2IGNsYXNzPVwicG9wb3Zlci1hcnJvd1wiPjwvZGl2PicgK1xuICAgICAgICAgICAgICAnPGgzIGNsYXNzPVwicG9wb3Zlci1oZWFkZXJcIj48L2gzPicgK1xuICAgICAgICAgICAgICAnPGRpdiBjbGFzcz1cInBvcG92ZXItYm9keVwiPjwvZGl2PicgK1xuICAgICAgICAgICAgJzwvZGl2Pidcbn1cblxuY29uc3QgRGVmYXVsdFR5cGUgPSB7XG4gIC4uLlRvb2x0aXAuRGVmYXVsdFR5cGUsXG4gIGNvbnRlbnQ6ICcoc3RyaW5nfGVsZW1lbnR8ZnVuY3Rpb24pJ1xufVxuXG5jb25zdCBFdmVudCA9IHtcbiAgSElERTogYGhpZGUke0VWRU5UX0tFWX1gLFxuICBISURERU46IGBoaWRkZW4ke0VWRU5UX0tFWX1gLFxuICBTSE9XOiBgc2hvdyR7RVZFTlRfS0VZfWAsXG4gIFNIT1dOOiBgc2hvd24ke0VWRU5UX0tFWX1gLFxuICBJTlNFUlRFRDogYGluc2VydGVkJHtFVkVOVF9LRVl9YCxcbiAgQ0xJQ0s6IGBjbGljayR7RVZFTlRfS0VZfWAsXG4gIEZPQ1VTSU46IGBmb2N1c2luJHtFVkVOVF9LRVl9YCxcbiAgRk9DVVNPVVQ6IGBmb2N1c291dCR7RVZFTlRfS0VZfWAsXG4gIE1PVVNFRU5URVI6IGBtb3VzZWVudGVyJHtFVkVOVF9LRVl9YCxcbiAgTU9VU0VMRUFWRTogYG1vdXNlbGVhdmUke0VWRU5UX0tFWX1gXG59XG5cbmNvbnN0IFNFTEVDVE9SX1RJVExFID0gJy5wb3BvdmVyLWhlYWRlcidcbmNvbnN0IFNFTEVDVE9SX0NPTlRFTlQgPSAnLnBvcG92ZXItYm9keSdcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENsYXNzIERlZmluaXRpb25cbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNsYXNzIFBvcG92ZXIgZXh0ZW5kcyBUb29sdGlwIHtcbiAgLy8gR2V0dGVyc1xuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdCgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFxuICB9XG5cbiAgc3RhdGljIGdldCBOQU1FKCkge1xuICAgIHJldHVybiBOQU1FXG4gIH1cblxuICBzdGF0aWMgZ2V0IEV2ZW50KCkge1xuICAgIHJldHVybiBFdmVudFxuICB9XG5cbiAgc3RhdGljIGdldCBEZWZhdWx0VHlwZSgpIHtcbiAgICByZXR1cm4gRGVmYXVsdFR5cGVcbiAgfVxuXG4gIC8vIE92ZXJyaWRlc1xuXG4gIGlzV2l0aENvbnRlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0VGl0bGUoKSB8fCB0aGlzLl9nZXRDb250ZW50KClcbiAgfVxuXG4gIHNldENvbnRlbnQodGlwKSB7XG4gICAgdGhpcy5fc2FuaXRpemVBbmRTZXRDb250ZW50KHRpcCwgdGhpcy5nZXRUaXRsZSgpLCBTRUxFQ1RPUl9USVRMRSlcbiAgICB0aGlzLl9zYW5pdGl6ZUFuZFNldENvbnRlbnQodGlwLCB0aGlzLl9nZXRDb250ZW50KCksIFNFTEVDVE9SX0NPTlRFTlQpXG4gIH1cblxuICAvLyBQcml2YXRlXG5cbiAgX2dldENvbnRlbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Jlc29sdmVQb3NzaWJsZUZ1bmN0aW9uKHRoaXMuX2NvbmZpZy5jb250ZW50KVxuICB9XG5cbiAgX2dldEJhc2ljQ2xhc3NQcmVmaXgoKSB7XG4gICAgcmV0dXJuIENMQVNTX1BSRUZJWFxuICB9XG5cbiAgLy8gU3RhdGljXG5cbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBQb3BvdmVyLmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKVxuICAgICAgICB9XG5cbiAgICAgICAgZGF0YVtjb25maWddKClcbiAgICAgIH1cbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBqUXVlcnlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogYWRkIC5Qb3BvdmVyIHRvIGpRdWVyeSBvbmx5IGlmIGpRdWVyeSBpcyBwcmVzZW50XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFBvcG92ZXIpXG5cbmV4cG9ydCBkZWZhdWx0IFBvcG92ZXJcbiIsIi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIEJvb3RzdHJhcCAodjUuMS4zKTogc2Nyb2xsc3B5LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IHtcbiAgZGVmaW5lSlF1ZXJ5UGx1Z2luLFxuICBnZXRFbGVtZW50LFxuICBnZXRTZWxlY3RvckZyb21FbGVtZW50LFxuICB0eXBlQ2hlY2tDb25maWdcbn0gZnJvbSAnLi91dGlsL2luZGV4J1xuaW1wb3J0IEV2ZW50SGFuZGxlciBmcm9tICcuL2RvbS9ldmVudC1oYW5kbGVyJ1xuaW1wb3J0IE1hbmlwdWxhdG9yIGZyb20gJy4vZG9tL21hbmlwdWxhdG9yJ1xuaW1wb3J0IFNlbGVjdG9yRW5naW5lIGZyb20gJy4vZG9tL3NlbGVjdG9yLWVuZ2luZSdcbmltcG9ydCBCYXNlQ29tcG9uZW50IGZyb20gJy4vYmFzZS1jb21wb25lbnQnXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDb25zdGFudHNcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmNvbnN0IE5BTUUgPSAnc2Nyb2xsc3B5J1xuY29uc3QgREFUQV9LRVkgPSAnYnMuc2Nyb2xsc3B5J1xuY29uc3QgRVZFTlRfS0VZID0gYC4ke0RBVEFfS0VZfWBcbmNvbnN0IERBVEFfQVBJX0tFWSA9ICcuZGF0YS1hcGknXG5cbmNvbnN0IERlZmF1bHQgPSB7XG4gIG9mZnNldDogMTAsXG4gIG1ldGhvZDogJ2F1dG8nLFxuICB0YXJnZXQ6ICcnXG59XG5cbmNvbnN0IERlZmF1bHRUeXBlID0ge1xuICBvZmZzZXQ6ICdudW1iZXInLFxuICBtZXRob2Q6ICdzdHJpbmcnLFxuICB0YXJnZXQ6ICcoc3RyaW5nfGVsZW1lbnQpJ1xufVxuXG5jb25zdCBFVkVOVF9BQ1RJVkFURSA9IGBhY3RpdmF0ZSR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX1NDUk9MTCA9IGBzY3JvbGwke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9MT0FEX0RBVEFfQVBJID0gYGxvYWQke0VWRU5UX0tFWX0ke0RBVEFfQVBJX0tFWX1gXG5cbmNvbnN0IENMQVNTX05BTUVfRFJPUERPV05fSVRFTSA9ICdkcm9wZG93bi1pdGVtJ1xuY29uc3QgQ0xBU1NfTkFNRV9BQ1RJVkUgPSAnYWN0aXZlJ1xuXG5jb25zdCBTRUxFQ1RPUl9EQVRBX1NQWSA9ICdbZGF0YS1icy1zcHk9XCJzY3JvbGxcIl0nXG5jb25zdCBTRUxFQ1RPUl9OQVZfTElTVF9HUk9VUCA9ICcubmF2LCAubGlzdC1ncm91cCdcbmNvbnN0IFNFTEVDVE9SX05BVl9MSU5LUyA9ICcubmF2LWxpbmsnXG5jb25zdCBTRUxFQ1RPUl9OQVZfSVRFTVMgPSAnLm5hdi1pdGVtJ1xuY29uc3QgU0VMRUNUT1JfTElTVF9JVEVNUyA9ICcubGlzdC1ncm91cC1pdGVtJ1xuY29uc3QgU0VMRUNUT1JfTElOS19JVEVNUyA9IGAke1NFTEVDVE9SX05BVl9MSU5LU30sICR7U0VMRUNUT1JfTElTVF9JVEVNU30sIC4ke0NMQVNTX05BTUVfRFJPUERPV05fSVRFTX1gXG5jb25zdCBTRUxFQ1RPUl9EUk9QRE9XTiA9ICcuZHJvcGRvd24nXG5jb25zdCBTRUxFQ1RPUl9EUk9QRE9XTl9UT0dHTEUgPSAnLmRyb3Bkb3duLXRvZ2dsZSdcblxuY29uc3QgTUVUSE9EX09GRlNFVCA9ICdvZmZzZXQnXG5jb25zdCBNRVRIT0RfUE9TSVRJT04gPSAncG9zaXRpb24nXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDbGFzcyBEZWZpbml0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jbGFzcyBTY3JvbGxTcHkgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudClcbiAgICB0aGlzLl9zY3JvbGxFbGVtZW50ID0gdGhpcy5fZWxlbWVudC50YWdOYW1lID09PSAnQk9EWScgPyB3aW5kb3cgOiB0aGlzLl9lbGVtZW50XG4gICAgdGhpcy5fY29uZmlnID0gdGhpcy5fZ2V0Q29uZmlnKGNvbmZpZylcbiAgICB0aGlzLl9vZmZzZXRzID0gW11cbiAgICB0aGlzLl90YXJnZXRzID0gW11cbiAgICB0aGlzLl9hY3RpdmVUYXJnZXQgPSBudWxsXG4gICAgdGhpcy5fc2Nyb2xsSGVpZ2h0ID0gMFxuXG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX3Njcm9sbEVsZW1lbnQsIEVWRU5UX1NDUk9MTCwgKCkgPT4gdGhpcy5fcHJvY2VzcygpKVxuXG4gICAgdGhpcy5yZWZyZXNoKClcbiAgICB0aGlzLl9wcm9jZXNzKClcbiAgfVxuXG4gIC8vIEdldHRlcnNcblxuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRVxuICB9XG5cbiAgLy8gUHVibGljXG5cbiAgcmVmcmVzaCgpIHtcbiAgICBjb25zdCBhdXRvTWV0aG9kID0gdGhpcy5fc2Nyb2xsRWxlbWVudCA9PT0gdGhpcy5fc2Nyb2xsRWxlbWVudC53aW5kb3cgP1xuICAgICAgTUVUSE9EX09GRlNFVCA6XG4gICAgICBNRVRIT0RfUE9TSVRJT05cblxuICAgIGNvbnN0IG9mZnNldE1ldGhvZCA9IHRoaXMuX2NvbmZpZy5tZXRob2QgPT09ICdhdXRvJyA/XG4gICAgICBhdXRvTWV0aG9kIDpcbiAgICAgIHRoaXMuX2NvbmZpZy5tZXRob2RcblxuICAgIGNvbnN0IG9mZnNldEJhc2UgPSBvZmZzZXRNZXRob2QgPT09IE1FVEhPRF9QT1NJVElPTiA/XG4gICAgICB0aGlzLl9nZXRTY3JvbGxUb3AoKSA6XG4gICAgICAwXG5cbiAgICB0aGlzLl9vZmZzZXRzID0gW11cbiAgICB0aGlzLl90YXJnZXRzID0gW11cbiAgICB0aGlzLl9zY3JvbGxIZWlnaHQgPSB0aGlzLl9nZXRTY3JvbGxIZWlnaHQoKVxuXG4gICAgY29uc3QgdGFyZ2V0cyA9IFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfTElOS19JVEVNUywgdGhpcy5fY29uZmlnLnRhcmdldClcblxuICAgIHRhcmdldHMubWFwKGVsZW1lbnQgPT4ge1xuICAgICAgY29uc3QgdGFyZ2V0U2VsZWN0b3IgPSBnZXRTZWxlY3RvckZyb21FbGVtZW50KGVsZW1lbnQpXG4gICAgICBjb25zdCB0YXJnZXQgPSB0YXJnZXRTZWxlY3RvciA/IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUodGFyZ2V0U2VsZWN0b3IpIDogbnVsbFxuXG4gICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgIGNvbnN0IHRhcmdldEJDUiA9IHRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKVxuICAgICAgICBpZiAodGFyZ2V0QkNSLndpZHRoIHx8IHRhcmdldEJDUi5oZWlnaHQpIHtcbiAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgTWFuaXB1bGF0b3Jbb2Zmc2V0TWV0aG9kXSh0YXJnZXQpLnRvcCArIG9mZnNldEJhc2UsXG4gICAgICAgICAgICB0YXJnZXRTZWxlY3RvclxuICAgICAgICAgIF1cbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICByZXR1cm4gbnVsbFxuICAgIH0pXG4gICAgICAuZmlsdGVyKGl0ZW0gPT4gaXRlbSlcbiAgICAgIC5zb3J0KChhLCBiKSA9PiBhWzBdIC0gYlswXSlcbiAgICAgIC5mb3JFYWNoKGl0ZW0gPT4ge1xuICAgICAgICB0aGlzLl9vZmZzZXRzLnB1c2goaXRlbVswXSlcbiAgICAgICAgdGhpcy5fdGFyZ2V0cy5wdXNoKGl0ZW1bMV0pXG4gICAgICB9KVxuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICBFdmVudEhhbmRsZXIub2ZmKHRoaXMuX3Njcm9sbEVsZW1lbnQsIEVWRU5UX0tFWSlcbiAgICBzdXBlci5kaXNwb3NlKClcbiAgfVxuXG4gIC8vIFByaXZhdGVcblxuICBfZ2V0Q29uZmlnKGNvbmZpZykge1xuICAgIGNvbmZpZyA9IHtcbiAgICAgIC4uLkRlZmF1bHQsXG4gICAgICAuLi5NYW5pcHVsYXRvci5nZXREYXRhQXR0cmlidXRlcyh0aGlzLl9lbGVtZW50KSxcbiAgICAgIC4uLih0eXBlb2YgY29uZmlnID09PSAnb2JqZWN0JyAmJiBjb25maWcgPyBjb25maWcgOiB7fSlcbiAgICB9XG5cbiAgICBjb25maWcudGFyZ2V0ID0gZ2V0RWxlbWVudChjb25maWcudGFyZ2V0KSB8fCBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnRcblxuICAgIHR5cGVDaGVja0NvbmZpZyhOQU1FLCBjb25maWcsIERlZmF1bHRUeXBlKVxuXG4gICAgcmV0dXJuIGNvbmZpZ1xuICB9XG5cbiAgX2dldFNjcm9sbFRvcCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2Nyb2xsRWxlbWVudCA9PT0gd2luZG93ID9cbiAgICAgIHRoaXMuX3Njcm9sbEVsZW1lbnQucGFnZVlPZmZzZXQgOlxuICAgICAgdGhpcy5fc2Nyb2xsRWxlbWVudC5zY3JvbGxUb3BcbiAgfVxuXG4gIF9nZXRTY3JvbGxIZWlnaHQoKSB7XG4gICAgcmV0dXJuIHRoaXMuX3Njcm9sbEVsZW1lbnQuc2Nyb2xsSGVpZ2h0IHx8IE1hdGgubWF4KFxuICAgICAgZG9jdW1lbnQuYm9keS5zY3JvbGxIZWlnaHQsXG4gICAgICBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuc2Nyb2xsSGVpZ2h0XG4gICAgKVxuICB9XG5cbiAgX2dldE9mZnNldEhlaWdodCgpIHtcbiAgICByZXR1cm4gdGhpcy5fc2Nyb2xsRWxlbWVudCA9PT0gd2luZG93ID9cbiAgICAgIHdpbmRvdy5pbm5lckhlaWdodCA6XG4gICAgICB0aGlzLl9zY3JvbGxFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLmhlaWdodFxuICB9XG5cbiAgX3Byb2Nlc3MoKSB7XG4gICAgY29uc3Qgc2Nyb2xsVG9wID0gdGhpcy5fZ2V0U2Nyb2xsVG9wKCkgKyB0aGlzLl9jb25maWcub2Zmc2V0XG4gICAgY29uc3Qgc2Nyb2xsSGVpZ2h0ID0gdGhpcy5fZ2V0U2Nyb2xsSGVpZ2h0KClcbiAgICBjb25zdCBtYXhTY3JvbGwgPSB0aGlzLl9jb25maWcub2Zmc2V0ICsgc2Nyb2xsSGVpZ2h0IC0gdGhpcy5fZ2V0T2Zmc2V0SGVpZ2h0KClcblxuICAgIGlmICh0aGlzLl9zY3JvbGxIZWlnaHQgIT09IHNjcm9sbEhlaWdodCkge1xuICAgICAgdGhpcy5yZWZyZXNoKClcbiAgICB9XG5cbiAgICBpZiAoc2Nyb2xsVG9wID49IG1heFNjcm9sbCkge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5fdGFyZ2V0c1t0aGlzLl90YXJnZXRzLmxlbmd0aCAtIDFdXG5cbiAgICAgIGlmICh0aGlzLl9hY3RpdmVUYXJnZXQgIT09IHRhcmdldCkge1xuICAgICAgICB0aGlzLl9hY3RpdmF0ZSh0YXJnZXQpXG4gICAgICB9XG5cbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGlmICh0aGlzLl9hY3RpdmVUYXJnZXQgJiYgc2Nyb2xsVG9wIDwgdGhpcy5fb2Zmc2V0c1swXSAmJiB0aGlzLl9vZmZzZXRzWzBdID4gMCkge1xuICAgICAgdGhpcy5fYWN0aXZlVGFyZ2V0ID0gbnVsbFxuICAgICAgdGhpcy5fY2xlYXIoKVxuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgZm9yIChsZXQgaSA9IHRoaXMuX29mZnNldHMubGVuZ3RoOyBpLS07KSB7XG4gICAgICBjb25zdCBpc0FjdGl2ZVRhcmdldCA9IHRoaXMuX2FjdGl2ZVRhcmdldCAhPT0gdGhpcy5fdGFyZ2V0c1tpXSAmJlxuICAgICAgICAgIHNjcm9sbFRvcCA+PSB0aGlzLl9vZmZzZXRzW2ldICYmXG4gICAgICAgICAgKHR5cGVvZiB0aGlzLl9vZmZzZXRzW2kgKyAxXSA9PT0gJ3VuZGVmaW5lZCcgfHwgc2Nyb2xsVG9wIDwgdGhpcy5fb2Zmc2V0c1tpICsgMV0pXG5cbiAgICAgIGlmIChpc0FjdGl2ZVRhcmdldCkge1xuICAgICAgICB0aGlzLl9hY3RpdmF0ZSh0aGlzLl90YXJnZXRzW2ldKVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIF9hY3RpdmF0ZSh0YXJnZXQpIHtcbiAgICB0aGlzLl9hY3RpdmVUYXJnZXQgPSB0YXJnZXRcblxuICAgIHRoaXMuX2NsZWFyKClcblxuICAgIGNvbnN0IHF1ZXJpZXMgPSBTRUxFQ1RPUl9MSU5LX0lURU1TLnNwbGl0KCcsJylcbiAgICAgIC5tYXAoc2VsZWN0b3IgPT4gYCR7c2VsZWN0b3J9W2RhdGEtYnMtdGFyZ2V0PVwiJHt0YXJnZXR9XCJdLCR7c2VsZWN0b3J9W2hyZWY9XCIke3RhcmdldH1cIl1gKVxuXG4gICAgY29uc3QgbGluayA9IFNlbGVjdG9yRW5naW5lLmZpbmRPbmUocXVlcmllcy5qb2luKCcsJyksIHRoaXMuX2NvbmZpZy50YXJnZXQpXG5cbiAgICBsaW5rLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUpXG4gICAgaWYgKGxpbmsuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfRFJPUERPV05fSVRFTSkpIHtcbiAgICAgIFNlbGVjdG9yRW5naW5lLmZpbmRPbmUoU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFLCBsaW5rLmNsb3Nlc3QoU0VMRUNUT1JfRFJPUERPV04pKVxuICAgICAgICAuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0FDVElWRSlcbiAgICB9IGVsc2Uge1xuICAgICAgU2VsZWN0b3JFbmdpbmUucGFyZW50cyhsaW5rLCBTRUxFQ1RPUl9OQVZfTElTVF9HUk9VUClcbiAgICAgICAgLmZvckVhY2gobGlzdEdyb3VwID0+IHtcbiAgICAgICAgICAvLyBTZXQgdHJpZ2dlcmVkIGxpbmtzIHBhcmVudHMgYXMgYWN0aXZlXG4gICAgICAgICAgLy8gV2l0aCBib3RoIDx1bD4gYW5kIDxuYXY+IG1hcmt1cCBhIHBhcmVudCBpcyB0aGUgcHJldmlvdXMgc2libGluZyBvZiBhbnkgbmF2IGFuY2VzdG9yXG4gICAgICAgICAgU2VsZWN0b3JFbmdpbmUucHJldihsaXN0R3JvdXAsIGAke1NFTEVDVE9SX05BVl9MSU5LU30sICR7U0VMRUNUT1JfTElTVF9JVEVNU31gKVxuICAgICAgICAgICAgLmZvckVhY2goaXRlbSA9PiBpdGVtLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUpKVxuXG4gICAgICAgICAgLy8gSGFuZGxlIHNwZWNpYWwgY2FzZSB3aGVuIC5uYXYtbGluayBpcyBpbnNpZGUgLm5hdi1pdGVtXG4gICAgICAgICAgU2VsZWN0b3JFbmdpbmUucHJldihsaXN0R3JvdXAsIFNFTEVDVE9SX05BVl9JVEVNUylcbiAgICAgICAgICAgIC5mb3JFYWNoKG5hdkl0ZW0gPT4ge1xuICAgICAgICAgICAgICBTZWxlY3RvckVuZ2luZS5jaGlsZHJlbihuYXZJdGVtLCBTRUxFQ1RPUl9OQVZfTElOS1MpXG4gICAgICAgICAgICAgICAgLmZvckVhY2goaXRlbSA9PiBpdGVtLmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9BQ1RJVkUpKVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcbiAgICB9XG5cbiAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9zY3JvbGxFbGVtZW50LCBFVkVOVF9BQ1RJVkFURSwge1xuICAgICAgcmVsYXRlZFRhcmdldDogdGFyZ2V0XG4gICAgfSlcbiAgfVxuXG4gIF9jbGVhcigpIHtcbiAgICBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0xJTktfSVRFTVMsIHRoaXMuX2NvbmZpZy50YXJnZXQpXG4gICAgICAuZmlsdGVyKG5vZGUgPT4gbm9kZS5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9BQ1RJVkUpKVxuICAgICAgLmZvckVhY2gobm9kZSA9PiBub2RlLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9BQ1RJVkUpKVxuICB9XG5cbiAgLy8gU3RhdGljXG5cbiAgc3RhdGljIGpRdWVyeUludGVyZmFjZShjb25maWcpIHtcbiAgICByZXR1cm4gdGhpcy5lYWNoKGZ1bmN0aW9uICgpIHtcbiAgICAgIGNvbnN0IGRhdGEgPSBTY3JvbGxTcHkuZ2V0T3JDcmVhdGVJbnN0YW5jZSh0aGlzLCBjb25maWcpXG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnICE9PSAnc3RyaW5nJykge1xuICAgICAgICByZXR1cm5cbiAgICAgIH1cblxuICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE5vIG1ldGhvZCBuYW1lZCBcIiR7Y29uZmlnfVwiYClcbiAgICAgIH1cblxuICAgICAgZGF0YVtjb25maWddKClcbiAgICB9KVxuICB9XG59XG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBEYXRhIEFwaSBpbXBsZW1lbnRhdGlvblxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuRXZlbnRIYW5kbGVyLm9uKHdpbmRvdywgRVZFTlRfTE9BRF9EQVRBX0FQSSwgKCkgPT4ge1xuICBTZWxlY3RvckVuZ2luZS5maW5kKFNFTEVDVE9SX0RBVEFfU1BZKVxuICAgIC5mb3JFYWNoKHNweSA9PiBuZXcgU2Nyb2xsU3B5KHNweSkpXG59KVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogalF1ZXJ5XG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIGFkZCAuU2Nyb2xsU3B5IHRvIGpRdWVyeSBvbmx5IGlmIGpRdWVyeSBpcyBwcmVzZW50XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFNjcm9sbFNweSlcblxuZXhwb3J0IGRlZmF1bHQgU2Nyb2xsU3B5XG4iLCIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjEuMyk6IHRhYi5qc1xuICogTGljZW5zZWQgdW5kZXIgTUlUIChodHRwczovL2dpdGh1Yi5jb20vdHdicy9ib290c3RyYXAvYmxvYi9tYWluL0xJQ0VOU0UpXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICovXG5cbmltcG9ydCB7XG4gIGRlZmluZUpRdWVyeVBsdWdpbixcbiAgZ2V0RWxlbWVudEZyb21TZWxlY3RvcixcbiAgaXNEaXNhYmxlZCxcbiAgcmVmbG93XG59IGZyb20gJy4vdXRpbC9pbmRleCdcbmltcG9ydCBFdmVudEhhbmRsZXIgZnJvbSAnLi9kb20vZXZlbnQtaGFuZGxlcidcbmltcG9ydCBTZWxlY3RvckVuZ2luZSBmcm9tICcuL2RvbS9zZWxlY3Rvci1lbmdpbmUnXG5pbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tICcuL2Jhc2UtY29tcG9uZW50J1xuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ29uc3RhbnRzXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jb25zdCBOQU1FID0gJ3RhYidcbmNvbnN0IERBVEFfS0VZID0gJ2JzLnRhYidcbmNvbnN0IEVWRU5UX0tFWSA9IGAuJHtEQVRBX0tFWX1gXG5jb25zdCBEQVRBX0FQSV9LRVkgPSAnLmRhdGEtYXBpJ1xuXG5jb25zdCBFVkVOVF9ISURFID0gYGhpZGUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9ISURERU4gPSBgaGlkZGVuJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfU0hPVyA9IGBzaG93JHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfU0hPV04gPSBgc2hvd24ke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9DTElDS19EQVRBX0FQSSA9IGBjbGljayR7RVZFTlRfS0VZfSR7REFUQV9BUElfS0VZfWBcblxuY29uc3QgQ0xBU1NfTkFNRV9EUk9QRE9XTl9NRU5VID0gJ2Ryb3Bkb3duLW1lbnUnXG5jb25zdCBDTEFTU19OQU1FX0FDVElWRSA9ICdhY3RpdmUnXG5jb25zdCBDTEFTU19OQU1FX0ZBREUgPSAnZmFkZSdcbmNvbnN0IENMQVNTX05BTUVfU0hPVyA9ICdzaG93J1xuXG5jb25zdCBTRUxFQ1RPUl9EUk9QRE9XTiA9ICcuZHJvcGRvd24nXG5jb25zdCBTRUxFQ1RPUl9OQVZfTElTVF9HUk9VUCA9ICcubmF2LCAubGlzdC1ncm91cCdcbmNvbnN0IFNFTEVDVE9SX0FDVElWRSA9ICcuYWN0aXZlJ1xuY29uc3QgU0VMRUNUT1JfQUNUSVZFX1VMID0gJzpzY29wZSA+IGxpID4gLmFjdGl2ZSdcbmNvbnN0IFNFTEVDVE9SX0RBVEFfVE9HR0xFID0gJ1tkYXRhLWJzLXRvZ2dsZT1cInRhYlwiXSwgW2RhdGEtYnMtdG9nZ2xlPVwicGlsbFwiXSwgW2RhdGEtYnMtdG9nZ2xlPVwibGlzdFwiXSdcbmNvbnN0IFNFTEVDVE9SX0RST1BET1dOX1RPR0dMRSA9ICcuZHJvcGRvd24tdG9nZ2xlJ1xuY29uc3QgU0VMRUNUT1JfRFJPUERPV05fQUNUSVZFX0NISUxEID0gJzpzY29wZSA+IC5kcm9wZG93bi1tZW51IC5hY3RpdmUnXG5cbi8qKlxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBDbGFzcyBEZWZpbml0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5jbGFzcyBUYWIgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgLy8gR2V0dGVyc1xuXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRVxuICB9XG5cbiAgLy8gUHVibGljXG5cbiAgc2hvdygpIHtcbiAgICBpZiAoKHRoaXMuX2VsZW1lbnQucGFyZW50Tm9kZSAmJlxuICAgICAgdGhpcy5fZWxlbWVudC5wYXJlbnROb2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSAmJlxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9BQ1RJVkUpKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgbGV0IHByZXZpb3VzXG4gICAgY29uc3QgdGFyZ2V0ID0gZ2V0RWxlbWVudEZyb21TZWxlY3Rvcih0aGlzLl9lbGVtZW50KVxuICAgIGNvbnN0IGxpc3RFbGVtZW50ID0gdGhpcy5fZWxlbWVudC5jbG9zZXN0KFNFTEVDVE9SX05BVl9MSVNUX0dST1VQKVxuXG4gICAgaWYgKGxpc3RFbGVtZW50KSB7XG4gICAgICBjb25zdCBpdGVtU2VsZWN0b3IgPSBsaXN0RWxlbWVudC5ub2RlTmFtZSA9PT0gJ1VMJyB8fCBsaXN0RWxlbWVudC5ub2RlTmFtZSA9PT0gJ09MJyA/IFNFTEVDVE9SX0FDVElWRV9VTCA6IFNFTEVDVE9SX0FDVElWRVxuICAgICAgcHJldmlvdXMgPSBTZWxlY3RvckVuZ2luZS5maW5kKGl0ZW1TZWxlY3RvciwgbGlzdEVsZW1lbnQpXG4gICAgICBwcmV2aW91cyA9IHByZXZpb3VzW3ByZXZpb3VzLmxlbmd0aCAtIDFdXG4gICAgfVxuXG4gICAgY29uc3QgaGlkZUV2ZW50ID0gcHJldmlvdXMgP1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIocHJldmlvdXMsIEVWRU5UX0hJREUsIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldDogdGhpcy5fZWxlbWVudFxuICAgICAgfSkgOlxuICAgICAgbnVsbFxuXG4gICAgY29uc3Qgc2hvd0V2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPVywge1xuICAgICAgcmVsYXRlZFRhcmdldDogcHJldmlvdXNcbiAgICB9KVxuXG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkIHx8IChoaWRlRXZlbnQgIT09IG51bGwgJiYgaGlkZUV2ZW50LmRlZmF1bHRQcmV2ZW50ZWQpKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9hY3RpdmF0ZSh0aGlzLl9lbGVtZW50LCBsaXN0RWxlbWVudClcblxuICAgIGNvbnN0IGNvbXBsZXRlID0gKCkgPT4ge1xuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIocHJldmlvdXMsIEVWRU5UX0hJRERFTiwge1xuICAgICAgICByZWxhdGVkVGFyZ2V0OiB0aGlzLl9lbGVtZW50XG4gICAgICB9KVxuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPV04sIHtcbiAgICAgICAgcmVsYXRlZFRhcmdldDogcHJldmlvdXNcbiAgICAgIH0pXG4gICAgfVxuXG4gICAgaWYgKHRhcmdldCkge1xuICAgICAgdGhpcy5fYWN0aXZhdGUodGFyZ2V0LCB0YXJnZXQucGFyZW50Tm9kZSwgY29tcGxldGUpXG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbXBsZXRlKClcbiAgICB9XG4gIH1cblxuICAvLyBQcml2YXRlXG5cbiAgX2FjdGl2YXRlKGVsZW1lbnQsIGNvbnRhaW5lciwgY2FsbGJhY2spIHtcbiAgICBjb25zdCBhY3RpdmVFbGVtZW50cyA9IGNvbnRhaW5lciAmJiAoY29udGFpbmVyLm5vZGVOYW1lID09PSAnVUwnIHx8IGNvbnRhaW5lci5ub2RlTmFtZSA9PT0gJ09MJykgP1xuICAgICAgU2VsZWN0b3JFbmdpbmUuZmluZChTRUxFQ1RPUl9BQ1RJVkVfVUwsIGNvbnRhaW5lcikgOlxuICAgICAgU2VsZWN0b3JFbmdpbmUuY2hpbGRyZW4oY29udGFpbmVyLCBTRUxFQ1RPUl9BQ1RJVkUpXG5cbiAgICBjb25zdCBhY3RpdmUgPSBhY3RpdmVFbGVtZW50c1swXVxuICAgIGNvbnN0IGlzVHJhbnNpdGlvbmluZyA9IGNhbGxiYWNrICYmIChhY3RpdmUgJiYgYWN0aXZlLmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUpKVxuXG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB0aGlzLl90cmFuc2l0aW9uQ29tcGxldGUoZWxlbWVudCwgYWN0aXZlLCBjYWxsYmFjaylcblxuICAgIGlmIChhY3RpdmUgJiYgaXNUcmFuc2l0aW9uaW5nKSB7XG4gICAgICBhY3RpdmUuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpXG4gICAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCBlbGVtZW50LCB0cnVlKVxuICAgIH0gZWxzZSB7XG4gICAgICBjb21wbGV0ZSgpXG4gICAgfVxuICB9XG5cbiAgX3RyYW5zaXRpb25Db21wbGV0ZShlbGVtZW50LCBhY3RpdmUsIGNhbGxiYWNrKSB7XG4gICAgaWYgKGFjdGl2ZSkge1xuICAgICAgYWN0aXZlLmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9BQ1RJVkUpXG5cbiAgICAgIGNvbnN0IGRyb3Bkb3duQ2hpbGQgPSBTZWxlY3RvckVuZ2luZS5maW5kT25lKFNFTEVDVE9SX0RST1BET1dOX0FDVElWRV9DSElMRCwgYWN0aXZlLnBhcmVudE5vZGUpXG5cbiAgICAgIGlmIChkcm9wZG93bkNoaWxkKSB7XG4gICAgICAgIGRyb3Bkb3duQ2hpbGQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX0FDVElWRSlcbiAgICAgIH1cblxuICAgICAgaWYgKGFjdGl2ZS5nZXRBdHRyaWJ1dGUoJ3JvbGUnKSA9PT0gJ3RhYicpIHtcbiAgICAgICAgYWN0aXZlLnNldEF0dHJpYnV0ZSgnYXJpYS1zZWxlY3RlZCcsIGZhbHNlKVxuICAgICAgfVxuICAgIH1cblxuICAgIGVsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0FDVElWRSlcbiAgICBpZiAoZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ3JvbGUnKSA9PT0gJ3RhYicpIHtcbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLXNlbGVjdGVkJywgdHJ1ZSlcbiAgICB9XG5cbiAgICByZWZsb3coZWxlbWVudClcblxuICAgIGlmIChlbGVtZW50LmNsYXNzTGlzdC5jb250YWlucyhDTEFTU19OQU1FX0ZBREUpKSB7XG4gICAgICBlbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9TSE9XKVxuICAgIH1cblxuICAgIGxldCBwYXJlbnQgPSBlbGVtZW50LnBhcmVudE5vZGVcbiAgICBpZiAocGFyZW50ICYmIHBhcmVudC5ub2RlTmFtZSA9PT0gJ0xJJykge1xuICAgICAgcGFyZW50ID0gcGFyZW50LnBhcmVudE5vZGVcbiAgICB9XG5cbiAgICBpZiAocGFyZW50ICYmIHBhcmVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9EUk9QRE9XTl9NRU5VKSkge1xuICAgICAgY29uc3QgZHJvcGRvd25FbGVtZW50ID0gZWxlbWVudC5jbG9zZXN0KFNFTEVDVE9SX0RST1BET1dOKVxuXG4gICAgICBpZiAoZHJvcGRvd25FbGVtZW50KSB7XG4gICAgICAgIFNlbGVjdG9yRW5naW5lLmZpbmQoU0VMRUNUT1JfRFJPUERPV05fVE9HR0xFLCBkcm9wZG93bkVsZW1lbnQpXG4gICAgICAgICAgLmZvckVhY2goZHJvcGRvd24gPT4gZHJvcGRvd24uY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0FDVElWRSkpXG4gICAgICB9XG5cbiAgICAgIGVsZW1lbnQuc2V0QXR0cmlidXRlKCdhcmlhLWV4cGFuZGVkJywgdHJ1ZSlcbiAgICB9XG5cbiAgICBpZiAoY2FsbGJhY2spIHtcbiAgICAgIGNhbGxiYWNrKClcbiAgICB9XG4gIH1cblxuICAvLyBTdGF0aWNcblxuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IFRhYi5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMpXG5cbiAgICAgIGlmICh0eXBlb2YgY29uZmlnID09PSAnc3RyaW5nJykge1xuICAgICAgICBpZiAodHlwZW9mIGRhdGFbY29uZmlnXSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBObyBtZXRob2QgbmFtZWQgXCIke2NvbmZpZ31cImApXG4gICAgICAgIH1cblxuICAgICAgICBkYXRhW2NvbmZpZ10oKVxuICAgICAgfVxuICAgIH0pXG4gIH1cbn1cblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIERhdGEgQXBpIGltcGxlbWVudGF0aW9uXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5FdmVudEhhbmRsZXIub24oZG9jdW1lbnQsIEVWRU5UX0NMSUNLX0RBVEFfQVBJLCBTRUxFQ1RPUl9EQVRBX1RPR0dMRSwgZnVuY3Rpb24gKGV2ZW50KSB7XG4gIGlmIChbJ0EnLCAnQVJFQSddLmluY2x1ZGVzKHRoaXMudGFnTmFtZSkpIHtcbiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpXG4gIH1cblxuICBpZiAoaXNEaXNhYmxlZCh0aGlzKSkge1xuICAgIHJldHVyblxuICB9XG5cbiAgY29uc3QgZGF0YSA9IFRhYi5nZXRPckNyZWF0ZUluc3RhbmNlKHRoaXMpXG4gIGRhdGEuc2hvdygpXG59KVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogalF1ZXJ5XG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIGFkZCAuVGFiIHRvIGpRdWVyeSBvbmx5IGlmIGpRdWVyeSBpcyBwcmVzZW50XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFRhYilcblxuZXhwb3J0IGRlZmF1bHQgVGFiXG4iLCIvKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBCb290c3RyYXAgKHY1LjEuMyk6IHRvYXN0LmpzXG4gKiBMaWNlbnNlZCB1bmRlciBNSVQgKGh0dHBzOi8vZ2l0aHViLmNvbS90d2JzL2Jvb3RzdHJhcC9ibG9iL21haW4vTElDRU5TRSlcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuaW1wb3J0IHtcbiAgZGVmaW5lSlF1ZXJ5UGx1Z2luLFxuICByZWZsb3csXG4gIHR5cGVDaGVja0NvbmZpZ1xufSBmcm9tICcuL3V0aWwvaW5kZXgnXG5pbXBvcnQgRXZlbnRIYW5kbGVyIGZyb20gJy4vZG9tL2V2ZW50LWhhbmRsZXInXG5pbXBvcnQgTWFuaXB1bGF0b3IgZnJvbSAnLi9kb20vbWFuaXB1bGF0b3InXG5pbXBvcnQgQmFzZUNvbXBvbmVudCBmcm9tICcuL2Jhc2UtY29tcG9uZW50J1xuaW1wb3J0IHsgZW5hYmxlRGlzbWlzc1RyaWdnZXIgfSBmcm9tICcuL3V0aWwvY29tcG9uZW50LWZ1bmN0aW9ucydcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIENvbnN0YW50c1xuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY29uc3QgTkFNRSA9ICd0b2FzdCdcbmNvbnN0IERBVEFfS0VZID0gJ2JzLnRvYXN0J1xuY29uc3QgRVZFTlRfS0VZID0gYC4ke0RBVEFfS0VZfWBcblxuY29uc3QgRVZFTlRfTU9VU0VPVkVSID0gYG1vdXNlb3ZlciR7RVZFTlRfS0VZfWBcbmNvbnN0IEVWRU5UX01PVVNFT1VUID0gYG1vdXNlb3V0JHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfRk9DVVNJTiA9IGBmb2N1c2luJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfRk9DVVNPVVQgPSBgZm9jdXNvdXQke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9ISURFID0gYGhpZGUke0VWRU5UX0tFWX1gXG5jb25zdCBFVkVOVF9ISURERU4gPSBgaGlkZGVuJHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfU0hPVyA9IGBzaG93JHtFVkVOVF9LRVl9YFxuY29uc3QgRVZFTlRfU0hPV04gPSBgc2hvd24ke0VWRU5UX0tFWX1gXG5cbmNvbnN0IENMQVNTX05BTUVfRkFERSA9ICdmYWRlJ1xuY29uc3QgQ0xBU1NfTkFNRV9ISURFID0gJ2hpZGUnIC8vIEBkZXByZWNhdGVkIC0ga2VwdCBoZXJlIG9ubHkgZm9yIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5XG5jb25zdCBDTEFTU19OQU1FX1NIT1cgPSAnc2hvdydcbmNvbnN0IENMQVNTX05BTUVfU0hPV0lORyA9ICdzaG93aW5nJ1xuXG5jb25zdCBEZWZhdWx0VHlwZSA9IHtcbiAgYW5pbWF0aW9uOiAnYm9vbGVhbicsXG4gIGF1dG9oaWRlOiAnYm9vbGVhbicsXG4gIGRlbGF5OiAnbnVtYmVyJ1xufVxuXG5jb25zdCBEZWZhdWx0ID0ge1xuICBhbmltYXRpb246IHRydWUsXG4gIGF1dG9oaWRlOiB0cnVlLFxuICBkZWxheTogNTAwMFxufVxuXG4vKipcbiAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQ2xhc3MgRGVmaW5pdGlvblxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKi9cblxuY2xhc3MgVG9hc3QgZXh0ZW5kcyBCYXNlQ29tcG9uZW50IHtcbiAgY29uc3RydWN0b3IoZWxlbWVudCwgY29uZmlnKSB7XG4gICAgc3VwZXIoZWxlbWVudClcblxuICAgIHRoaXMuX2NvbmZpZyA9IHRoaXMuX2dldENvbmZpZyhjb25maWcpXG4gICAgdGhpcy5fdGltZW91dCA9IG51bGxcbiAgICB0aGlzLl9oYXNNb3VzZUludGVyYWN0aW9uID0gZmFsc2VcbiAgICB0aGlzLl9oYXNLZXlib2FyZEludGVyYWN0aW9uID0gZmFsc2VcbiAgICB0aGlzLl9zZXRMaXN0ZW5lcnMoKVxuICB9XG5cbiAgLy8gR2V0dGVyc1xuXG4gIHN0YXRpYyBnZXQgRGVmYXVsdFR5cGUoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRUeXBlXG4gIH1cblxuICBzdGF0aWMgZ2V0IERlZmF1bHQoKSB7XG4gICAgcmV0dXJuIERlZmF1bHRcbiAgfVxuXG4gIHN0YXRpYyBnZXQgTkFNRSgpIHtcbiAgICByZXR1cm4gTkFNRVxuICB9XG5cbiAgLy8gUHVibGljXG5cbiAgc2hvdygpIHtcbiAgICBjb25zdCBzaG93RXZlbnQgPSBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9TSE9XKVxuXG4gICAgaWYgKHNob3dFdmVudC5kZWZhdWx0UHJldmVudGVkKSB7XG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLl9jbGVhclRpbWVvdXQoKVxuXG4gICAgaWYgKHRoaXMuX2NvbmZpZy5hbmltYXRpb24pIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX0ZBREUpXG4gICAgfVxuXG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9TSE9XSU5HKVxuICAgICAgRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfU0hPV04pXG5cbiAgICAgIHRoaXMuX21heWJlU2NoZWR1bGVIaWRlKClcbiAgICB9XG5cbiAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoQ0xBU1NfTkFNRV9ISURFKSAvLyBAZGVwcmVjYXRlZFxuICAgIHJlZmxvdyh0aGlzLl9lbGVtZW50KVxuICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmFkZChDTEFTU19OQU1FX1NIT1cpXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPV0lORylcblxuICAgIHRoaXMuX3F1ZXVlQ2FsbGJhY2soY29tcGxldGUsIHRoaXMuX2VsZW1lbnQsIHRoaXMuX2NvbmZpZy5hbmltYXRpb24pXG4gIH1cblxuICBoaWRlKCkge1xuICAgIGlmICghdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoQ0xBU1NfTkFNRV9TSE9XKSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgaGlkZUV2ZW50ID0gRXZlbnRIYW5kbGVyLnRyaWdnZXIodGhpcy5fZWxlbWVudCwgRVZFTlRfSElERSlcblxuICAgIGlmIChoaWRlRXZlbnQuZGVmYXVsdFByZXZlbnRlZCkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgY29uc3QgY29tcGxldGUgPSAoKSA9PiB7XG4gICAgICB0aGlzLl9lbGVtZW50LmNsYXNzTGlzdC5hZGQoQ0xBU1NfTkFNRV9ISURFKSAvLyBAZGVwcmVjYXRlZFxuICAgICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QucmVtb3ZlKENMQVNTX05BTUVfU0hPV0lORylcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpXG4gICAgICBFdmVudEhhbmRsZXIudHJpZ2dlcih0aGlzLl9lbGVtZW50LCBFVkVOVF9ISURERU4pXG4gICAgfVxuXG4gICAgdGhpcy5fZWxlbWVudC5jbGFzc0xpc3QuYWRkKENMQVNTX05BTUVfU0hPV0lORylcbiAgICB0aGlzLl9xdWV1ZUNhbGxiYWNrKGNvbXBsZXRlLCB0aGlzLl9lbGVtZW50LCB0aGlzLl9jb25maWcuYW5pbWF0aW9uKVxuICB9XG5cbiAgZGlzcG9zZSgpIHtcbiAgICB0aGlzLl9jbGVhclRpbWVvdXQoKVxuXG4gICAgaWYgKHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LmNvbnRhaW5zKENMQVNTX05BTUVfU0hPVykpIHtcbiAgICAgIHRoaXMuX2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShDTEFTU19OQU1FX1NIT1cpXG4gICAgfVxuXG4gICAgc3VwZXIuZGlzcG9zZSgpXG4gIH1cblxuICAvLyBQcml2YXRlXG5cbiAgX2dldENvbmZpZyhjb25maWcpIHtcbiAgICBjb25maWcgPSB7XG4gICAgICAuLi5EZWZhdWx0LFxuICAgICAgLi4uTWFuaXB1bGF0b3IuZ2V0RGF0YUF0dHJpYnV0ZXModGhpcy5fZWxlbWVudCksXG4gICAgICAuLi4odHlwZW9mIGNvbmZpZyA9PT0gJ29iamVjdCcgJiYgY29uZmlnID8gY29uZmlnIDoge30pXG4gICAgfVxuXG4gICAgdHlwZUNoZWNrQ29uZmlnKE5BTUUsIGNvbmZpZywgdGhpcy5jb25zdHJ1Y3Rvci5EZWZhdWx0VHlwZSlcblxuICAgIHJldHVybiBjb25maWdcbiAgfVxuXG4gIF9tYXliZVNjaGVkdWxlSGlkZSgpIHtcbiAgICBpZiAoIXRoaXMuX2NvbmZpZy5hdXRvaGlkZSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgaWYgKHRoaXMuX2hhc01vdXNlSW50ZXJhY3Rpb24gfHwgdGhpcy5faGFzS2V5Ym9hcmRJbnRlcmFjdGlvbikge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5oaWRlKClcbiAgICB9LCB0aGlzLl9jb25maWcuZGVsYXkpXG4gIH1cblxuICBfb25JbnRlcmFjdGlvbihldmVudCwgaXNJbnRlcmFjdGluZykge1xuICAgIHN3aXRjaCAoZXZlbnQudHlwZSkge1xuICAgICAgY2FzZSAnbW91c2VvdmVyJzpcbiAgICAgIGNhc2UgJ21vdXNlb3V0JzpcbiAgICAgICAgdGhpcy5faGFzTW91c2VJbnRlcmFjdGlvbiA9IGlzSW50ZXJhY3RpbmdcbiAgICAgICAgYnJlYWtcbiAgICAgIGNhc2UgJ2ZvY3VzaW4nOlxuICAgICAgY2FzZSAnZm9jdXNvdXQnOlxuICAgICAgICB0aGlzLl9oYXNLZXlib2FyZEludGVyYWN0aW9uID0gaXNJbnRlcmFjdGluZ1xuICAgICAgICBicmVha1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgYnJlYWtcbiAgICB9XG5cbiAgICBpZiAoaXNJbnRlcmFjdGluZykge1xuICAgICAgdGhpcy5fY2xlYXJUaW1lb3V0KClcbiAgICAgIHJldHVyblxuICAgIH1cblxuICAgIGNvbnN0IG5leHRFbGVtZW50ID0gZXZlbnQucmVsYXRlZFRhcmdldFxuICAgIGlmICh0aGlzLl9lbGVtZW50ID09PSBuZXh0RWxlbWVudCB8fCB0aGlzLl9lbGVtZW50LmNvbnRhaW5zKG5leHRFbGVtZW50KSkge1xuICAgICAgcmV0dXJuXG4gICAgfVxuXG4gICAgdGhpcy5fbWF5YmVTY2hlZHVsZUhpZGUoKVxuICB9XG5cbiAgX3NldExpc3RlbmVycygpIHtcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VPVkVSLCBldmVudCA9PiB0aGlzLl9vbkludGVyYWN0aW9uKGV2ZW50LCB0cnVlKSlcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfTU9VU0VPVVQsIGV2ZW50ID0+IHRoaXMuX29uSW50ZXJhY3Rpb24oZXZlbnQsIGZhbHNlKSlcbiAgICBFdmVudEhhbmRsZXIub24odGhpcy5fZWxlbWVudCwgRVZFTlRfRk9DVVNJTiwgZXZlbnQgPT4gdGhpcy5fb25JbnRlcmFjdGlvbihldmVudCwgdHJ1ZSkpXG4gICAgRXZlbnRIYW5kbGVyLm9uKHRoaXMuX2VsZW1lbnQsIEVWRU5UX0ZPQ1VTT1VULCBldmVudCA9PiB0aGlzLl9vbkludGVyYWN0aW9uKGV2ZW50LCBmYWxzZSkpXG4gIH1cblxuICBfY2xlYXJUaW1lb3V0KCkge1xuICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KVxuICAgIHRoaXMuX3RpbWVvdXQgPSBudWxsXG4gIH1cblxuICAvLyBTdGF0aWNcblxuICBzdGF0aWMgalF1ZXJ5SW50ZXJmYWNlKGNvbmZpZykge1xuICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24gKCkge1xuICAgICAgY29uc3QgZGF0YSA9IFRvYXN0LmdldE9yQ3JlYXRlSW5zdGFuY2UodGhpcywgY29uZmlnKVxuXG4gICAgICBpZiAodHlwZW9mIGNvbmZpZyA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBkYXRhW2NvbmZpZ10gPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgTm8gbWV0aG9kIG5hbWVkIFwiJHtjb25maWd9XCJgKVxuICAgICAgICB9XG5cbiAgICAgICAgZGF0YVtjb25maWddKHRoaXMpXG4gICAgICB9XG4gICAgfSlcbiAgfVxufVxuXG5lbmFibGVEaXNtaXNzVHJpZ2dlcihUb2FzdClcblxuLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqIGpRdWVyeVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4gKiBhZGQgLlRvYXN0IHRvIGpRdWVyeSBvbmx5IGlmIGpRdWVyeSBpcyBwcmVzZW50XG4gKi9cblxuZGVmaW5lSlF1ZXJ5UGx1Z2luKFRvYXN0KVxuXG5leHBvcnQgZGVmYXVsdCBUb2FzdFxuIiwiLyoqXG4gKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuICogQm9vdHN0cmFwICh2NS4xLjMpOiBpbmRleC51bWQuanNcbiAqIExpY2Vuc2VkIHVuZGVyIE1JVCAoaHR0cHM6Ly9naXRodWIuY29tL3R3YnMvYm9vdHN0cmFwL2Jsb2IvbWFpbi9MSUNFTlNFKVxuICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiAqL1xuXG5pbXBvcnQgQWxlcnQgZnJvbSAnLi9zcmMvYWxlcnQnXG5pbXBvcnQgQnV0dG9uIGZyb20gJy4vc3JjL2J1dHRvbidcbmltcG9ydCBDYXJvdXNlbCBmcm9tICcuL3NyYy9jYXJvdXNlbCdcbmltcG9ydCBDb2xsYXBzZSBmcm9tICcuL3NyYy9jb2xsYXBzZSdcbmltcG9ydCBEcm9wZG93biBmcm9tICcuL3NyYy9kcm9wZG93bidcbmltcG9ydCBNb2RhbCBmcm9tICcuL3NyYy9tb2RhbCdcbmltcG9ydCBPZmZjYW52YXMgZnJvbSAnLi9zcmMvb2ZmY2FudmFzJ1xuaW1wb3J0IFBvcG92ZXIgZnJvbSAnLi9zcmMvcG9wb3ZlcidcbmltcG9ydCBTY3JvbGxTcHkgZnJvbSAnLi9zcmMvc2Nyb2xsc3B5J1xuaW1wb3J0IFRhYiBmcm9tICcuL3NyYy90YWInXG5pbXBvcnQgVG9hc3QgZnJvbSAnLi9zcmMvdG9hc3QnXG5pbXBvcnQgVG9vbHRpcCBmcm9tICcuL3NyYy90b29sdGlwJ1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIEFsZXJ0LFxuICBCdXR0b24sXG4gIENhcm91c2VsLFxuICBDb2xsYXBzZSxcbiAgRHJvcGRvd24sXG4gIE1vZGFsLFxuICBPZmZjYW52YXMsXG4gIFBvcG92ZXIsXG4gIFNjcm9sbFNweSxcbiAgVGFiLFxuICBUb2FzdCxcbiAgVG9vbHRpcFxufVxuIiwiJChmdW5jdGlvbiAoKSB7XHJcbiAgICB0b2dnbGVDb25uZWN0aW9uU3RyaW5nQW5kUHJlZml4KCk7XHJcblxyXG4gICAgLy8gU2hvdyBoaWRlIHRoZSBjb25uZWN0aW9uIHN0cmluZyB3aGVuIGEgcHJvdmlkZXIgaXMgc2VsZWN0ZWRcclxuICAgICQoXCIjRGF0YWJhc2VQcm92aWRlclwiKS5jaGFuZ2UoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRvZ2dsZUNvbm5lY3Rpb25TdHJpbmdBbmRQcmVmaXgoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIC8vIFJlZnJlc2ggdGhlIHJlY2lwZSBkZXNjcmlwdGlvblxyXG4gICAgJChcIiNyZWNpcGVzIGRpdiBhXCIpLm9uKCdjbGljaycsIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZWZyZXNoRGVzY3JpcHRpb24oJCh0aGlzKSk7XHJcbiAgICB9KTtcclxufSk7XHJcblxyXG4vLyBTaG93IG9yIGhpZGUgdGhlIGNvbm5lY3Rpb24gc3RyaW5nIG9yIHRhYmxlIHByZWZpeCBzZWN0aW9uIHdoZW4gdGhlIGRhdGFiYXNlIHByb3ZpZGVyIGlzIHNlbGVjdGVkXHJcbmZ1bmN0aW9uIHRvZ2dsZUNvbm5lY3Rpb25TdHJpbmdBbmRQcmVmaXgoKSB7XHJcbiAgICAkKFwiI0RhdGFiYXNlUHJvdmlkZXIgb3B0aW9uOnNlbGVjdGVkXCIpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICQodGhpcykuZGF0YShcImNvbm5lY3Rpb24tc3RyaW5nXCIpLnRvTG93ZXJDYXNlKCkgPT09IFwidHJ1ZVwiXHJcbiAgICAgICAgICAgID8gJChcIi5jb25uZWN0aW9uU3RyaW5nXCIpLnNob3coKVxyXG4gICAgICAgICAgICA6ICQoXCIuY29ubmVjdGlvblN0cmluZ1wiKS5oaWRlKCk7XHJcblxyXG4gICAgICAgICQodGhpcykuZGF0YShcInRhYmxlLXByZWZpeFwiKS50b0xvd2VyQ2FzZSgpID09PSBcInRydWVcIlxyXG4gICAgICAgICAgICA/ICQoXCIudGFibGVQcmVmaXhcIikuc2hvdygpXHJcbiAgICAgICAgICAgIDogJChcIi50YWJsZVByZWZpeFwiKS5oaWRlKCk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgJCh0aGlzKS5kYXRhKFwiY29ubmVjdGlvbi1zdHJpbmdcIikudG9Mb3dlckNhc2UoKSA9PT0gXCJ0cnVlXCJcclxuICAgICAgICAgICAgPyAkKFwiLnB3ZFwiKS5hdHRyKCdyZXF1aXJlZCcsICdyZXF1aXJlZCcpXHJcbiAgICAgICAgICAgIDogJChcIi5wd2RcIikucmVtb3ZlQXR0cigncmVxdWlyZWQnKTtcclxuXHJcbiAgICAgICAgJChcIiNjb25uZWN0aW9uU3RyaW5nSGludFwiKS50ZXh0KCQodGhpcykuZGF0YShcImNvbm5lY3Rpb24tc3RyaW5nLXNhbXBsZVwiKSk7XHJcbiAgICB9KTtcclxufVxyXG5cclxuLy8gU2hvdyB0aGUgcmVjaXBlIGRlc2NyaXB0aW9uXHJcbmZ1bmN0aW9uIHJlZnJlc2hEZXNjcmlwdGlvbih0YXJnZXQpIHtcclxuICAgIHZhciByZWNpcGVOYW1lID0gJCh0YXJnZXQpLmRhdGEoXCJyZWNpcGUtbmFtZVwiKTtcclxuICAgIHZhciByZWNpcGVEaXNwbGF5TmFtZSA9ICQodGFyZ2V0KS5kYXRhKFwicmVjaXBlLWRpc3BsYXktbmFtZVwiKTtcclxuICAgIHZhciByZWNpcGVEZXNjcmlwdGlvbiA9ICQodGFyZ2V0KS5kYXRhKFwicmVjaXBlLWRlc2NyaXB0aW9uXCIpO1xyXG4gICAgJChcIiNyZWNpcGVCdXR0b25cIikudGV4dChyZWNpcGVEaXNwbGF5TmFtZSk7XHJcbiAgICAkKFwiI1JlY2lwZU5hbWVcIikudmFsKHJlY2lwZU5hbWUpO1xyXG4gICAgJChcIiNyZWNpcGVCdXR0b25cIikuYXR0cihcInRpdGxlXCIsIHJlY2lwZURlc2NyaXB0aW9uKTtcclxuICAgICQoXCIjcmVjaXBlQnV0dG9uXCIpLmZvY3VzKCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHNldExvY2FsaXphdGlvblVybCgpIHtcclxuICAgIHZhciBjdWx0dXJlc0xpc3QgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY3VsdHVyZXNMaXN0Jyk7XHJcbiAgICB3aW5kb3cubG9jYXRpb24gPSBjdWx0dXJlc0xpc3Qub3B0aW9uc1tjdWx0dXJlc0xpc3Quc2VsZWN0ZWRJbmRleF0uZGF0YXNldC51cmw7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRvZ2dsZVBhc3N3b3JkVmlzaWJpbGl0eShwYXNzd29yZEN0bCwgdG9nZ2xlUGFzc3dvcmRDdGwpXHJcbntcclxuICAgIC8vIHRvZ2dsZSB0aGUgdHlwZSBhdHRyaWJ1dGVcclxuICAgIHR5cGUgPSBwYXNzd29yZEN0bC5nZXRBdHRyaWJ1dGUoJ3R5cGUnKSA9PT0gJ3Bhc3N3b3JkJyA/ICd0ZXh0JyA6ICdwYXNzd29yZCc7XHJcbiAgICBwYXNzd29yZEN0bC5zZXRBdHRyaWJ1dGUoJ3R5cGUnLCB0eXBlKTtcclxuXHJcbiAgICAvLyB0b2dnbGUgdGhlIGV5ZSBzbGFzaCBpY29uXHJcbiAgICBpY29uID0gdG9nZ2xlUGFzc3dvcmRDdGwuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZSgnaWNvbicpWzBdO1xyXG4gICAgaWYoaWNvbi5nZXRBdHRyaWJ1dGUoJ2RhdGEtaWNvbicpKXsgLy8gaWYgdGhlIGljb24gaXMgcmVuZGVyZWQgYXMgYSBzdmdcclxuICAgICAgICB0eXBlID09PSAncGFzc3dvcmQnID8gaWNvbi5zZXRBdHRyaWJ1dGUoJ2RhdGEtaWNvbicsICdleWUnKSA6IGljb24uc2V0QXR0cmlidXRlKCdkYXRhLWljb24nLCAnZXllLXNsYXNoJyk7XHJcbiAgICB9XHJcbiAgICBlbHNleyAvLyBpZiB0aGUgaWNvbiBpcyBzdGlsbCBhIDxpPiBlbGVtZW50XHJcbiAgICAgICAgdHlwZSA9PT0gJ3Bhc3N3b3JkJyA/IGljb24uY2xhc3NMaXN0LnJlbW92ZSgnZmEtZXllLXNsYXNoJykgOiBpY29uLmNsYXNzTGlzdC5yZW1vdmUoJ2ZhLWV5ZScpO1xyXG4gICAgICAgIHR5cGUgPT09ICdwYXNzd29yZCcgPyBpY29uLmNsYXNzTGlzdC5hZGQoJ2ZhLWV5ZScpIDogaWNvbi5jbGFzc0xpc3QuYWRkKCdmYS1leWUtc2xhc2gnKTtcclxuICAgIH1cclxufVxyXG4iLCIoZnVuY3Rpb24gKCQpIHtcclxuXHJcbiAgICAkLmZuLnN0cmVuZ3RoID0gZnVuY3Rpb24gKG9wdGlvbnMpIHtcclxuXHJcbiAgICAgICAgdmFyIHNldHRpbmdzID0gJC5leHRlbmQoe1xyXG4gICAgICAgICAgICBtaW5MZW5ndGg6IDgsXHJcbiAgICAgICAgICAgIHVwcGVyQ2FzZTogZmFsc2UsXHJcbiAgICAgICAgICAgIGxvd2VyQ2FzZTogZmFsc2UsXHJcbiAgICAgICAgICAgIG51bWJlcnM6IGZhbHNlLFxyXG4gICAgICAgICAgICBzcGVjaWFsY2hhcnM6IGZhbHNlLFxyXG4gICAgICAgICAgICB0YXJnZXQ6ICcnLFxyXG4gICAgICAgICAgICBzdHlsZTogJydcclxuICAgICAgICB9LCBvcHRpb25zKTtcclxuXHJcblxyXG4gICAgICAgIHZhciBjYXBpdGFsbGV0dGVycyA9IDA7XHJcbiAgICAgICAgdmFyIGxvd2VybGV0dGVycyA9IDA7XHJcbiAgICAgICAgdmFyIG51bWJlcnMgPSAwO1xyXG4gICAgICAgIHZhciBzcGVjaWFsY2hhcnMgPSAwO1xyXG5cclxuICAgICAgICB2YXIgdXBwZXJDYXNlID0gbmV3IFJlZ0V4cCgnW0EtWl0nKTtcclxuICAgICAgICB2YXIgbG93ZXJDYXNlID0gbmV3IFJlZ0V4cCgnW2Etel0nKTtcclxuICAgICAgICB2YXIgbnVtYmVyID0gbmV3IFJlZ0V4cCgnWzAtOV0nKTtcclxuICAgICAgICB2YXIgc3BlY2lhbGNoYXIgPSBuZXcgUmVnRXhwKCdbXkEtWmEtejAtOV0nKTtcclxuXHJcbiAgICAgICAgdmFyIHZhbGlkID0gZmFsc2U7XHJcblxyXG4gICAgICAgIGNyZWF0ZVByb2dyZXNzQmFyKDAsICcnKTtcclxuXHJcbiAgICAgICAgZnVuY3Rpb24gZ2V0UGVyY2VudGFnZShhLCBiKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAoKGIgLyBhKSAqIDEwMCkudG9GaXhlZCgwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGdldExldmVsKHZhbHVlKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAodmFsdWUgPj0gMTAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gXCJiZy1zdWNjZXNzXCI7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA+PSA1MCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiYmctd2FybmluZ1wiO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodmFsdWUgPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICcnOyAvLyBncmF5ZWRcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIFwiYmctZGFuZ2VyXCI7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmdW5jdGlvbiBjaGVja1N0cmVuZ3RoKHZhbHVlKSB7XHJcblxyXG4gICAgICAgICAgICBtaW5MZW5ndGggPSB2YWx1ZS5sZW5ndGggPj0gc2V0dGluZ3MubWluTGVuZ3RoID8gMSA6IDA7XHJcbiAgICAgICAgICAgIGNhcGl0YWxsZXR0ZXJzID0gIXNldHRpbmdzLnVwcGVyQ2FzZSB8fCB2YWx1ZS5tYXRjaCh1cHBlckNhc2UpID8gMSA6IDA7XHJcbiAgICAgICAgICAgIGxvd2VybGV0dGVycyA9ICFzZXR0aW5ncy5sb3dlckNhc2UgfHwgdmFsdWUubWF0Y2gobG93ZXJDYXNlKSA/IDEgOiAwO1xyXG4gICAgICAgICAgICBudW1iZXJzID0gIXNldHRpbmdzLm51bWJlcnMgfHwgdmFsdWUubWF0Y2gobnVtYmVyKSA/IDEgOiAwO1xyXG4gICAgICAgICAgICBzcGVjaWFsY2hhcnMgPSAhc2V0dGluZ3Muc3BlY2lhbGNoYXJzIHx8IHZhbHVlLm1hdGNoKHNwZWNpYWxjaGFyKSA/IDEgOiAwO1xyXG5cclxuICAgICAgICAgICAgdmFyIHRvdGFsID0gbWluTGVuZ3RoICsgY2FwaXRhbGxldHRlcnMgKyBsb3dlcmxldHRlcnMgKyBudW1iZXJzICsgc3BlY2lhbGNoYXJzO1xyXG4gICAgICAgICAgICB2YXIgcGVyY2VudGFnZSA9IGdldFBlcmNlbnRhZ2UoNSwgdG90YWwpO1xyXG5cclxuICAgICAgICAgICAgdmFsaWQgPSBwZXJjZW50YWdlID49IDEwMDtcclxuXHJcbiAgICAgICAgICAgIGNyZWF0ZVByb2dyZXNzQmFyKHBlcmNlbnRhZ2UsIGdldExldmVsKHBlcmNlbnRhZ2UpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZ1bmN0aW9uIGNyZWF0ZVByb2dyZXNzQmFyKHBlcmNlbnRhZ2UsIGxldmVsKSB7XHJcbiAgICAgICAgICAgIHZhciBlbCA9ICQoJzxkaXYgY2xhc3M9XCJwcm9ncmVzc1wiIHZhbHVlPVwiJyArIHBlcmNlbnRhZ2UgKyAnXCIgc3R5bGU9XCInICsgc2V0dGluZ3Muc3R5bGUgKyAnXCIgbWF4PVwiMTAwXCIgYXJpYS1kZXNjcmliZWRieT1cIlwiPjxkaXYgY2xhc3M9XCJwcm9ncmVzcy1iYXIgJyArIGxldmVsICsgJ1wiIHJvbGU9XCJwcm9ncmVzcy1iYXJcIiBzdHlsZT1cIndpZHRoOiAnICsgcGVyY2VudGFnZSArICclO1wiPjwvZGl2PjwvZGl2PicpO1xyXG4gICAgICAgICAgICB2YXIgdGFyZ2V0ID0gJChzZXR0aW5ncy50YXJnZXQpO1xyXG4gICAgICAgICAgICB0YXJnZXQuZW1wdHkoKTtcclxuICAgICAgICAgICAgdGFyZ2V0LmFwcGVuZChlbCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmJpbmQoJ2tleXVwIGtleWRvd24nLCBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgY2hlY2tTdHJlbmd0aCgkKHRoaXMpLnZhbCgpKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmJpbmQoJ2Ryb3AnLCBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgY2hlY2tTdHJlbmd0aChldmVudC5vcmlnaW5hbEV2ZW50LmRhdGFUcmFuc2Zlci5nZXREYXRhKFwidGV4dFwiKSk7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMucGFyZW50cygnZm9ybScpLm9uKCdzdWJtaXQnLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICghdmFsaWQpIHtcclxuICAgICAgICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH07XHJcbn0oalF1ZXJ5KSk7XHJcbiAgICAiXX0= diff --git a/src/OrchardCore.Modules/OrchardCore.Setup/wwwroot/Scripts/setup.min.js b/src/OrchardCore.Modules/OrchardCore.Setup/wwwroot/Scripts/setup.min.js index 8a083c2fd86..60c35530bb7 100644 --- a/src/OrchardCore.Modules/OrchardCore.Setup/wwwroot/Scripts/setup.min.js +++ b/src/OrchardCore.Modules/OrchardCore.Setup/wwwroot/Scripts/setup.min.js @@ -13,7 +13,7 @@ function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof S * Date: 2021-03-02T17:08Z */function _get(e,t,n){return _get="undefined"!=typeof Reflect&&Reflect.get?Reflect.get:function(e,t,n){var i=_superPropBase(e,t);if(i){var r=Object.getOwnPropertyDescriptor(i,t);return r.get?r.get.call(n):r.value}},_get(e,t,n||e)}function _superPropBase(e,t){for(;!Object.prototype.hasOwnProperty.call(e,t)&&null!==(e=_getPrototypeOf(e)););return e}function ownKeys(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(e);t&&(i=i.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,i)}return n}function _objectSpread(e){for(var t=1;te.length)&&(t=e.length);for(var n=0,i=new Array(t);n0&&t-1 in e)}w.fn=w.prototype={jquery:b,constructor:w,length:0,toArray:function(){return r.call(this)},get:function(e){return null==e?r.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=w.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return w.each(this,e)},map:function(e){return this.pushStack(w.map(this,(function(t,n){return e.call(t,n,t)})))},slice:function(){return this.pushStack(r.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(w.grep(this,(function(e,t){return(t+1)%2})))},odd:function(){return this.pushStack(w.grep(this,(function(e,t){return t%2})))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(n>=0&&n+~]|[\\x20\\t\\r\\n\\f])[\\x20\\t\\r\\n\\f]*"),U=new RegExp(M+"|>"),V=new RegExp(B),X=new RegExp("^"+q+"$"),K={ID:new RegExp("^#("+q+")"),CLASS:new RegExp("^\\.("+q+")"),TAG:new RegExp("^("+q+"|[*])"),ATTR:new RegExp("^"+R),PSEUDO:new RegExp("^"+B),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\([\\x20\\t\\r\\n\\f]*(even|odd|(([+-]|)(\\d*)n|)[\\x20\\t\\r\\n\\f]*(?:([+-]|)[\\x20\\t\\r\\n\\f]*(\\d+)|))[\\x20\\t\\r\\n\\f]*\\)|)","i"),bool:new RegExp("^(?:"+H+")$","i"),needsContext:new RegExp("^[\\x20\\t\\r\\n\\f]*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\([\\x20\\t\\r\\n\\f]*((?:-\\d)?\\d*)[\\x20\\t\\r\\n\\f]*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,G=/^h\d$/i,J=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}[\\x20\\t\\r\\n\\f]?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},ie=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,re=function(e,t){return t?"\0"===e?"�":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){d()},ae=be((function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()}),{dir:"parentNode",next:"legend"});try{N.apply(j=P.call(w.childNodes),w.childNodes),j[w.childNodes.length].nodeType}catch(e){N={apply:j.length?function(e,t){L.apply(e,P.call(t))}:function(e,t){for(var n=e.length,i=0;e[n++]=t[i++];);e.length=n-1}}}function se(e,t,i,r){var o,s,l,u,f,h,v,y=t&&t.ownerDocument,w=t?t.nodeType:9;if(i=i||[],"string"!=typeof e||!e||1!==w&&9!==w&&11!==w)return i;if(!r&&(d(t),t=t||p,g)){if(11!==w&&(f=Z.exec(e)))if(o=f[1]){if(9===w){if(!(l=t.getElementById(o)))return i;if(l.id===o)return i.push(l),i}else if(y&&(l=y.getElementById(o))&&_(t,l)&&l.id===o)return i.push(l),i}else{if(f[2])return N.apply(i,t.getElementsByTagName(e)),i;if((o=f[3])&&n.getElementsByClassName&&t.getElementsByClassName)return N.apply(i,t.getElementsByClassName(o)),i}if(n.qsa&&!A[e+" "]&&(!m||!m.test(e))&&(1!==w||"object"!==t.nodeName.toLowerCase())){if(v=e,y=t,1===w&&(U.test(e)||z.test(e))){for((y=ee.test(e)&&ve(t.parentNode)||t)===t&&n.scope||((u=t.getAttribute("id"))?u=u.replace(ie,re):t.setAttribute("id",u=b)),s=(h=a(e)).length;s--;)h[s]=(u?"#"+u:":scope")+" "+_e(h[s]);v=h.join(",")}try{return N.apply(i,y.querySelectorAll(v)),i}catch(t){A(e,!0)}finally{u===b&&t.removeAttribute("id")}}}return c(e.replace(F,"$1"),t,i,r)}function ce(){var e=[];return function t(n,r){return e.push(n+" ")>i.cacheLength&&delete t[e.shift()],t[n+" "]=r}}function le(e){return e[b]=!0,e}function ue(e){var t=p.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){for(var n=e.split("|"),r=n.length;r--;)i.attrHandle[n[r]]=t}function de(e,t){var n=t&&e,i=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(i)return i;if(n)for(;n=n.nextSibling;)if(n===t)return-1;return e?1:-1}function pe(e){return function(t){return"input"===t.nodeName.toLowerCase()&&t.type===e}}function he(e){return function(t){var n=t.nodeName.toLowerCase();return("input"===n||"button"===n)&&t.type===e}}function ge(e){return function(t){return"form"in t?t.parentNode&&!1===t.disabled?"label"in t?"label"in t.parentNode?t.parentNode.disabled===e:t.disabled===e:t.isDisabled===e||t.isDisabled!==!e&&ae(t)===e:t.disabled===e:"label"in t&&t.disabled===e}}function me(e){return le((function(t){return t=+t,le((function(n,i){for(var r,o=e([],n.length,t),a=o.length;a--;)n[r=o[a]]&&(n[r]=!(i[r]=n[r]))}))}))}function ve(e){return e&&void 0!==e.getElementsByTagName&&e}for(t in n=se.support={},o=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},d=se.setDocument=function(e){var t,r,a=e?e.ownerDocument||e:w;return a!=p&&9===a.nodeType&&a.documentElement?(h=(p=a).documentElement,g=!o(p),w!=p&&(r=p.defaultView)&&r.top!==r&&(r.addEventListener?r.addEventListener("unload",oe,!1):r.attachEvent&&r.attachEvent("onunload",oe)),n.scope=ue((function(e){return h.appendChild(e).appendChild(p.createElement("div")),void 0!==e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length})),n.attributes=ue((function(e){return e.className="i",!e.getAttribute("className")})),n.getElementsByTagName=ue((function(e){return e.appendChild(p.createComment("")),!e.getElementsByTagName("*").length})),n.getElementsByClassName=J.test(p.getElementsByClassName),n.getById=ue((function(e){return h.appendChild(e).id=b,!p.getElementsByName||!p.getElementsByName(b).length})),n.getById?(i.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},i.find.ID=function(e,t){if(void 0!==t.getElementById&&g){var n=t.getElementById(e);return n?[n]:[]}}):(i.filter.ID=function(e){var t=e.replace(te,ne);return function(e){var n=void 0!==e.getAttributeNode&&e.getAttributeNode("id");return n&&n.value===t}},i.find.ID=function(e,t){if(void 0!==t.getElementById&&g){var n,i,r,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];for(r=t.getElementsByName(e),i=0;o=r[i++];)if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),i.find.TAG=n.getElementsByTagName?function(e,t){return void 0!==t.getElementsByTagName?t.getElementsByTagName(e):n.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,i=[],r=0,o=t.getElementsByTagName(e);if("*"===e){for(;n=o[r++];)1===n.nodeType&&i.push(n);return i}return o},i.find.CLASS=n.getElementsByClassName&&function(e,t){if(void 0!==t.getElementsByClassName&&g)return t.getElementsByClassName(e)},v=[],m=[],(n.qsa=J.test(p.querySelectorAll))&&(ue((function(e){var t;h.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&m.push("[*^$]=[\\x20\\t\\r\\n\\f]*(?:''|\"\")"),e.querySelectorAll("[selected]").length||m.push("\\[[\\x20\\t\\r\\n\\f]*(?:value|"+H+")"),e.querySelectorAll("[id~="+b+"-]").length||m.push("~="),(t=p.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||m.push("\\[[\\x20\\t\\r\\n\\f]*name[\\x20\\t\\r\\n\\f]*=[\\x20\\t\\r\\n\\f]*(?:''|\"\")"),e.querySelectorAll(":checked").length||m.push(":checked"),e.querySelectorAll("a#"+b+"+*").length||m.push(".#.+[+~]"),e.querySelectorAll("\\\f"),m.push("[\\r\\n\\f]")})),ue((function(e){e.innerHTML="";var t=p.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&m.push("name[\\x20\\t\\r\\n\\f]*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&m.push(":enabled",":disabled"),h.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&m.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),m.push(",.*:")}))),(n.matchesSelector=J.test(y=h.matches||h.webkitMatchesSelector||h.mozMatchesSelector||h.oMatchesSelector||h.msMatchesSelector))&&ue((function(e){n.disconnectedMatch=y.call(e,"*"),y.call(e,"[s!='']:x"),v.push("!=",B)})),m=m.length&&new RegExp(m.join("|")),v=v.length&&new RegExp(v.join("|")),t=J.test(h.compareDocumentPosition),_=t||J.test(h.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,i=t&&t.parentNode;return e===i||!(!i||1!==i.nodeType||!(n.contains?n.contains(i):e.compareDocumentPosition&&16&e.compareDocumentPosition(i)))}:function(e,t){if(t)for(;t=t.parentNode;)if(t===e)return!0;return!1},S=t?function(e,t){if(e===t)return f=!0,0;var i=!e.compareDocumentPosition-!t.compareDocumentPosition;return i||(1&(i=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!n.sortDetached&&t.compareDocumentPosition(e)===i?e==p||e.ownerDocument==w&&_(w,e)?-1:t==p||t.ownerDocument==w&&_(w,t)?1:u?I(u,e)-I(u,t):0:4&i?-1:1)}:function(e,t){if(e===t)return f=!0,0;var n,i=0,r=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!r||!o)return e==p?-1:t==p?1:r?-1:o?1:u?I(u,e)-I(u,t):0;if(r===o)return de(e,t);for(n=e;n=n.parentNode;)a.unshift(n);for(n=t;n=n.parentNode;)s.unshift(n);for(;a[i]===s[i];)i++;return i?de(a[i],s[i]):a[i]==w?-1:s[i]==w?1:0},p):p},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(d(e),n.matchesSelector&&g&&!A[t+" "]&&(!v||!v.test(t))&&(!m||!m.test(t)))try{var i=y.call(e,t);if(i||n.disconnectedMatch||e.document&&11!==e.document.nodeType)return i}catch(e){A(t,!0)}return se(t,p,null,[e]).length>0},se.contains=function(e,t){return(e.ownerDocument||e)!=p&&d(e),_(e,t)},se.attr=function(e,t){(e.ownerDocument||e)!=p&&d(e);var r=i.attrHandle[t.toLowerCase()],o=r&&O.call(i.attrHandle,t.toLowerCase())?r(e,t,!g):void 0;return void 0!==o?o:n.attributes||!g?e.getAttribute(t):(o=e.getAttributeNode(t))&&o.specified?o.value:null},se.escape=function(e){return(e+"").replace(ie,re)},se.error=function(e){throw new Error("Syntax error, unrecognized expression: "+e)},se.uniqueSort=function(e){var t,i=[],r=0,o=0;if(f=!n.detectDuplicates,u=!n.sortStable&&e.slice(0),e.sort(S),f){for(;t=e[o++];)t===e[o]&&(r=i.push(o));for(;r--;)e.splice(i[r],1)}return u=null,e},r=se.getText=function(e){var t,n="",i=0,o=e.nodeType;if(o){if(1===o||9===o||11===o){if("string"==typeof e.textContent)return e.textContent;for(e=e.firstChild;e;e=e.nextSibling)n+=r(e)}else if(3===o||4===o)return e.nodeValue}else for(;t=e[i++];)n+=r(t);return n},i=se.selectors={cacheLength:50,createPseudo:le,match:K,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return K.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&V.test(n)&&(t=a(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=E[e+" "];return t||(t=new RegExp("(^|[\\x20\\t\\r\\n\\f])"+e+"("+M+"|$)"))&&E(e,(function(e){return t.test("string"==typeof e.className&&e.className||void 0!==e.getAttribute&&e.getAttribute("class")||"")}))},ATTR:function(e,t,n){return function(i){var r=se.attr(i,e);return null==r?"!="===t:!t||(r+="","="===t?r===n:"!="===t?r!==n:"^="===t?n&&0===r.indexOf(n):"*="===t?n&&r.indexOf(n)>-1:"$="===t?n&&r.slice(-n.length)===n:"~="===t?(" "+r.replace(W," ")+" ").indexOf(n)>-1:"|="===t&&(r===n||r.slice(0,n.length+1)===n+"-"))}},CHILD:function(e,t,n,i,r){var o="nth"!==e.slice(0,3),a="last"!==e.slice(-4),s="of-type"===t;return 1===i&&0===r?function(e){return!!e.parentNode}:function(t,n,c){var l,u,f,d,p,h,g=o!==a?"nextSibling":"previousSibling",m=t.parentNode,v=s&&t.nodeName.toLowerCase(),y=!c&&!s,_=!1;if(m){if(o){for(;g;){for(d=t;d=d[g];)if(s?d.nodeName.toLowerCase()===v:1===d.nodeType)return!1;h=g="only"===e&&!h&&"nextSibling"}return!0}if(h=[a?m.firstChild:m.lastChild],a&&y){for(_=(p=(l=(u=(f=(d=m)[b]||(d[b]={}))[d.uniqueID]||(f[d.uniqueID]={}))[e]||[])[0]===x&&l[1])&&l[2],d=p&&m.childNodes[p];d=++p&&d&&d[g]||(_=p=0)||h.pop();)if(1===d.nodeType&&++_&&d===t){u[e]=[x,p,_];break}}else if(y&&(_=p=(l=(u=(f=(d=t)[b]||(d[b]={}))[d.uniqueID]||(f[d.uniqueID]={}))[e]||[])[0]===x&&l[1]),!1===_)for(;(d=++p&&d&&d[g]||(_=p=0)||h.pop())&&((s?d.nodeName.toLowerCase()!==v:1!==d.nodeType)||!++_||(y&&((u=(f=d[b]||(d[b]={}))[d.uniqueID]||(f[d.uniqueID]={}))[e]=[x,_]),d!==t)););return(_-=r)===i||_%i==0&&_/i>=0}}},PSEUDO:function(e,t){var n,r=i.pseudos[e]||i.setFilters[e.toLowerCase()]||se.error("unsupported pseudo: "+e);return r[b]?r(t):r.length>1?(n=[e,e,"",t],i.setFilters.hasOwnProperty(e.toLowerCase())?le((function(e,n){for(var i,o=r(e,t),a=o.length;a--;)e[i=I(e,o[a])]=!(n[i]=o[a])})):function(e){return r(e,0,n)}):r}},pseudos:{not:le((function(e){var t=[],n=[],i=s(e.replace(F,"$1"));return i[b]?le((function(e,t,n,r){for(var o,a=i(e,null,r,[]),s=e.length;s--;)(o=a[s])&&(e[s]=!(t[s]=o))})):function(e,r,o){return t[0]=e,i(t,null,o,n),t[0]=null,!n.pop()}})),has:le((function(e){return function(t){return se(e,t).length>0}})),contains:le((function(e){return e=e.replace(te,ne),function(t){return(t.textContent||r(t)).indexOf(e)>-1}})),lang:le((function(e){return X.test(e||"")||se.error("unsupported lang: "+e),e=e.replace(te,ne).toLowerCase(),function(t){var n;do{if(n=g?t.lang:t.getAttribute("xml:lang")||t.getAttribute("lang"))return(n=n.toLowerCase())===e||0===n.indexOf(e+"-")}while((t=t.parentNode)&&1===t.nodeType);return!1}})),target:function(t){var n=e.location&&e.location.hash;return n&&n.slice(1)===t.id},root:function(e){return e===h},focus:function(e){return e===p.activeElement&&(!p.hasFocus||p.hasFocus())&&!!(e.type||e.href||~e.tabIndex)},enabled:ge(!1),disabled:ge(!0),checked:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&!!e.checked||"option"===t&&!!e.selected},selected:function(e){return e.parentNode&&e.parentNode.selectedIndex,!0===e.selected},empty:function(e){for(e=e.firstChild;e;e=e.nextSibling)if(e.nodeType<6)return!1;return!0},parent:function(e){return!i.pseudos.empty(e)},header:function(e){return G.test(e.nodeName)},input:function(e){return Q.test(e.nodeName)},button:function(e){var t=e.nodeName.toLowerCase();return"input"===t&&"button"===e.type||"button"===t},text:function(e){var t;return"input"===e.nodeName.toLowerCase()&&"text"===e.type&&(null==(t=e.getAttribute("type"))||"text"===t.toLowerCase())},first:me((function(){return[0]})),last:me((function(e,t){return[t-1]})),eq:me((function(e,t,n){return[n<0?n+t:n]})),even:me((function(e,t){for(var n=0;nt?t:n;--i>=0;)e.push(i);return e})),gt:me((function(e,t,n){for(var i=n<0?n+t:n;++i1?function(t,n,i){for(var r=e.length;r--;)if(!e[r](t,n,i))return!1;return!0}:e[0]}function xe(e,t,n,i,r){for(var o,a=[],s=0,c=e.length,l=null!=t;s-1&&(o[l]=!(a[l]=f))}}else v=xe(v===a?v.splice(h,v.length):v),r?r(null,a,v,c):N.apply(a,v)}))}function Ee(e){for(var t,n,r,o=e.length,a=i.relative[e[0].type],s=a||i.relative[" "],c=a?1:0,u=be((function(e){return e===t}),s,!0),f=be((function(e){return I(t,e)>-1}),s,!0),d=[function(e,n,i){var r=!a&&(i||n!==l)||((t=n).nodeType?u(e,n,i):f(e,n,i));return t=null,r}];c1&&we(d),c>1&&_e(e.slice(0,c-1).concat({value:" "===e[c-2].type?"*":""})).replace(F,"$1"),n,c0,r=e.length>0,o=function(o,a,s,c,u){var f,h,m,v=0,y="0",_=o&&[],b=[],w=l,k=o||r&&i.find.TAG("*",u),E=x+=null==w?1:Math.random()||.1,C=k.length;for(u&&(l=a==p||a||u);y!==C&&null!=(f=k[y]);y++){if(r&&f){for(h=0,a||f.ownerDocument==p||(d(f),s=!g);m=e[h++];)if(m(f,a||p,s)){c.push(f);break}u&&(x=E)}n&&((f=!m&&f)&&v--,o&&_.push(f))}if(v+=y,n&&y!==v){for(h=0;m=t[h++];)m(_,b,a,s);if(o){if(v>0)for(;y--;)_[y]||b[y]||(b[y]=D.call(c));b=xe(b)}N.apply(c,b),u&&!o&&b.length>0&&v+t.length>1&&se.uniqueSort(c)}return u&&(x=E,l=w),_};return n?le(o):o}(o,r)),s.selector=e}return s},c=se.select=function(e,t,n,r){var o,c,l,u,f,d="function"==typeof e&&e,p=!r&&a(e=d.selector||e);if(n=n||[],1===p.length){if((c=p[0]=p[0].slice(0)).length>2&&"ID"===(l=c[0]).type&&9===t.nodeType&&g&&i.relative[c[1].type]){if(!(t=(i.find.ID(l.matches[0].replace(te,ne),t)||[])[0]))return n;d&&(t=t.parentNode),e=e.slice(c.shift().value.length)}for(o=K.needsContext.test(e)?0:c.length;o--&&(l=c[o],!i.relative[u=l.type]);)if((f=i.find[u])&&(r=f(l.matches[0].replace(te,ne),ee.test(c[0].type)&&ve(t.parentNode)||t))){if(c.splice(o,1),!(e=r.length&&_e(c)))return N.apply(n,r),n;break}}return(d||s(e,p))(r,t,!g,n,!t||ee.test(e)&&ve(t.parentNode)||t),n},n.sortStable=b.split("").sort(S).join("")===b,n.detectDuplicates=!!f,d(),n.sortDetached=ue((function(e){return 1&e.compareDocumentPosition(p.createElement("fieldset"))})),ue((function(e){return e.innerHTML="","#"===e.firstChild.getAttribute("href")}))||fe("type|href|height|width",(function(e,t,n){if(!n)return e.getAttribute(t,"type"===t.toLowerCase()?1:2)})),n.attributes&&ue((function(e){return e.innerHTML="",e.firstChild.setAttribute("value",""),""===e.firstChild.getAttribute("value")}))||fe("value",(function(e,t,n){if(!n&&"input"===e.nodeName.toLowerCase())return e.defaultValue})),ue((function(e){return null==e.getAttribute("disabled")}))||fe(H,(function(e,t,n){var i;if(!n)return!0===e[t]?t.toLowerCase():(i=e.getAttributeNode(t))&&i.specified?i.value:null})),se}(e);w.find=k,(w.expr=k.selectors)[":"]=w.expr.pseudos,w.uniqueSort=w.unique=k.uniqueSort,w.text=k.getText,w.isXMLDoc=k.isXML,w.contains=k.contains,w.escapeSelector=k.escape;var E=function(e,t,n){for(var i=[],r=void 0!==n;(e=e[t])&&9!==e.nodeType;)if(1===e.nodeType){if(r&&w(e).is(n))break;i.push(e)}return i},C=function(e,t){for(var n=[];e;e=e.nextSibling)1===e.nodeType&&e!==t&&n.push(e);return n},T=w.expr.match.needsContext;function A(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}var S=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function O(e,t,n){return h(t)?w.grep(e,(function(e,i){return!!t.call(e,i,e)!==n})):t.nodeType?w.grep(e,(function(e){return e===t!==n})):"string"!=typeof t?w.grep(e,(function(e){return s.call(t,e)>-1!==n})):w.filter(t,e,n)}w.filter=function(e,t,n){var i=t[0];return n&&(e=":not("+e+")"),1===t.length&&1===i.nodeType?w.find.matchesSelector(i,e)?[i]:[]:w.find.matches(e,w.grep(t,(function(e){return 1===e.nodeType})))},w.fn.extend({find:function(e){var t,n,i=this.length,r=this;if("string"!=typeof e)return this.pushStack(w(e).filter((function(){for(t=0;t1?w.uniqueSort(n):n},filter:function(e){return this.pushStack(O(this,e||[],!1))},not:function(e){return this.pushStack(O(this,e||[],!0))},is:function(e){return!!O(this,"string"==typeof e&&T.test(e)?w(e):e||[],!1).length}});var j,D=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/;(w.fn.init=function(e,t,n){var i,r;if(!e)return this;if(n=n||j,"string"==typeof e){if(!(i="<"===e[0]&&">"===e[e.length-1]&&e.length>=3?[null,e,null]:D.exec(e))||!i[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(i[1]){if(t=t instanceof w?t[0]:t,w.merge(this,w.parseHTML(i[1],t&&t.nodeType?t.ownerDocument||t:m,!0)),S.test(i[1])&&w.isPlainObject(t))for(i in t)h(this[i])?this[i](t[i]):this.attr(i,t[i]);return this}return(r=m.getElementById(i[2]))&&(this[0]=r,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):h(e)?void 0!==n.ready?n.ready(e):e(w):w.makeArray(e,this)}).prototype=w.fn,j=w(m);var L=/^(?:parents|prev(?:Until|All))/,N={children:!0,contents:!0,next:!0,prev:!0};function P(e,t){for(;(e=e[t])&&1!==e.nodeType;);return e}w.fn.extend({has:function(e){var t=w(e,this),n=t.length;return this.filter((function(){for(var e=0;e-1:1===n.nodeType&&w.find.matchesSelector(n,e))){o.push(n);break}return this.pushStack(o.length>1?w.uniqueSort(o):o)},index:function(e){return e?"string"==typeof e?s.call(w(e),this[0]):s.call(this,e.jquery?e[0]:e):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(e,t){return this.pushStack(w.uniqueSort(w.merge(this.get(),w(e,t))))},addBack:function(e){return this.add(null==e?this.prevObject:this.prevObject.filter(e))}}),w.each({parent:function(e){var t=e.parentNode;return t&&11!==t.nodeType?t:null},parents:function(e){return E(e,"parentNode")},parentsUntil:function(e,t,n){return E(e,"parentNode",n)},next:function(e){return P(e,"nextSibling")},prev:function(e){return P(e,"previousSibling")},nextAll:function(e){return E(e,"nextSibling")},prevAll:function(e){return E(e,"previousSibling")},nextUntil:function(e,t,n){return E(e,"nextSibling",n)},prevUntil:function(e,t,n){return E(e,"previousSibling",n)},siblings:function(e){return C((e.parentNode||{}).firstChild,e)},children:function(e){return C(e.firstChild)},contents:function(e){return null!=e.contentDocument&&i(e.contentDocument)?e.contentDocument:(A(e,"template")&&(e=e.content||e),w.merge([],e.childNodes))}},(function(e,t){w.fn[e]=function(n,i){var r=w.map(this,t,n);return"Until"!==e.slice(-5)&&(i=n),i&&"string"==typeof i&&(r=w.filter(i,r)),this.length>1&&(N[e]||w.uniqueSort(r),L.test(e)&&r.reverse()),this.pushStack(r)}}));var I=/[^\x20\t\r\n\f]+/g;function H(e){return e}function M(e){throw e}function q(e,t,n,i){var r;try{e&&h(r=e.promise)?r.call(e).done(t).fail(n):e&&h(r=e.then)?r.call(e,t,n):t.apply(void 0,[e].slice(i))}catch(e){n.apply(void 0,[e])}}w.Callbacks=function(e){e="string"==typeof e?function(e){var t={};return w.each(e.match(I)||[],(function(e,n){t[n]=!0})),t}(e):w.extend({},e);var t,n,i,r,o=[],a=[],s=-1,c=function(){for(r=r||e.once,i=t=!0;a.length;s=-1)for(n=a.shift();++s-1;)o.splice(n,1),n<=s&&s--})),this},has:function(e){return e?w.inArray(e,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return r=a=[],o=n="",this},disabled:function(){return!o},lock:function(){return r=a=[],n||t||(o=n=""),this},locked:function(){return!!r},fireWith:function(e,n){return r||(n=[e,(n=n||[]).slice?n.slice():n],a.push(n),t||c()),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!i}};return l},w.extend({Deferred:function(t){var n=[["notify","progress",w.Callbacks("memory"),w.Callbacks("memory"),2],["resolve","done",w.Callbacks("once memory"),w.Callbacks("once memory"),0,"resolved"],["reject","fail",w.Callbacks("once memory"),w.Callbacks("once memory"),1,"rejected"]],i="pending",r={state:function(){return i},always:function(){return o.done(arguments).fail(arguments),this},catch:function(e){return r.then(null,e)},pipe:function(){var e=arguments;return w.Deferred((function(t){w.each(n,(function(n,i){var r=h(e[i[4]])&&e[i[4]];o[i[1]]((function(){var e=r&&r.apply(this,arguments);e&&h(e.promise)?e.promise().progress(t.notify).done(t.resolve).fail(t.reject):t[i[0]+"With"](this,r?[e]:arguments)}))})),e=null})).promise()},then:function(t,i,r){var o=0;function a(t,n,i,r){return function(){var s=this,c=arguments,l=function(){var e,l;if(!(t=o&&(i!==M&&(s=void 0,c=[e]),n.rejectWith(s,c))}};t?u():(w.Deferred.getStackHook&&(u.stackTrace=w.Deferred.getStackHook()),e.setTimeout(u))}}return w.Deferred((function(e){n[0][3].add(a(0,e,h(r)?r:H,e.notifyWith)),n[1][3].add(a(0,e,h(t)?t:H)),n[2][3].add(a(0,e,h(i)?i:M))})).promise()},promise:function(e){return null!=e?w.extend(e,r):r}},o={};return w.each(n,(function(e,t){var a=t[2],s=t[5];r[t[1]]=a.add,s&&a.add((function(){i=s}),n[3-e][2].disable,n[3-e][3].disable,n[0][2].lock,n[0][3].lock),a.add(t[3].fire),o[t[0]]=function(){return o[t[0]+"With"](this===o?void 0:this,arguments),this},o[t[0]+"With"]=a.fireWith})),r.promise(o),t&&t.call(o,o),o},when:function(e){var t=arguments.length,n=t,i=Array(n),o=r.call(arguments),a=w.Deferred(),s=function(e){return function(n){i[e]=this,o[e]=arguments.length>1?r.call(arguments):n,--t||a.resolveWith(i,o)}};if(t<=1&&(q(e,a.done(s(n)).resolve,a.reject,!t),"pending"===a.state()||h(o[n]&&o[n].then)))return a.then();for(;n--;)q(o[n],s(n),a.reject);return a.promise()}});var R=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;w.Deferred.exceptionHook=function(t,n){e.console&&e.console.warn&&t&&R.test(t.name)&&e.console.warn("jQuery.Deferred exception: "+t.message,t.stack,n)},w.readyException=function(t){e.setTimeout((function(){throw t}))};var B=w.Deferred();function W(){m.removeEventListener("DOMContentLoaded",W),e.removeEventListener("load",W),w.ready()}w.fn.ready=function(e){return B.then(e).catch((function(e){w.readyException(e)})),this},w.extend({isReady:!1,readyWait:1,ready:function(e){(!0===e?--w.readyWait:w.isReady)||(w.isReady=!0,!0!==e&&--w.readyWait>0||B.resolveWith(m,[w]))}}),w.ready.then=B.then,"complete"===m.readyState||"loading"!==m.readyState&&!m.documentElement.doScroll?e.setTimeout(w.ready):(m.addEventListener("DOMContentLoaded",W),e.addEventListener("load",W));var F=function e(t,n,i,r,o,a,s){var c=0,l=t.length,u=null==i;if("object"===_(i))for(c in o=!0,i)e(t,n,c,i[c],!0,a,s);else if(void 0!==r&&(o=!0,h(r)||(s=!0),u&&(s?(n.call(t,r),n=null):(u=n,n=function(e,t,n){return u.call(w(e),n)})),n))for(;c1,null,!0)},removeData:function(e){return this.each((function(){Q.remove(this,e)}))}}),w.extend({queue:function(e,t,n){var i;if(e)return t=(t||"fx")+"queue",i=Y.get(e,t),n&&(!i||Array.isArray(n)?i=Y.access(e,t,w.makeArray(n)):i.push(n)),i||[]},dequeue:function(e,t){var n=w.queue(e,t=t||"fx"),i=n.length,r=n.shift(),o=w._queueHooks(e,t);"inprogress"===r&&(r=n.shift(),i--),r&&("fx"===t&&n.unshift("inprogress"),delete o.stop,r.call(e,(function(){w.dequeue(e,t)}),o)),!i&&o&&o.empty.fire()},_queueHooks:function(e,t){var n=t+"queueHooks";return Y.get(e,n)||Y.access(e,n,{empty:w.Callbacks("once memory").add((function(){Y.remove(e,[t+"queue",n])}))})}}),w.fn.extend({queue:function(e,t){var n=2;return"string"!=typeof e&&(t=e,e="fx",n--),arguments.length\x20\t\r\n\f]*)/i,ge=/^$|^module$|\/(?:java|ecma)script/i;fe=m.createDocumentFragment().appendChild(m.createElement("div")),(de=m.createElement("input")).setAttribute("type","radio"),de.setAttribute("checked","checked"),de.setAttribute("name","t"),fe.appendChild(de),p.checkClone=fe.cloneNode(!0).cloneNode(!0).lastChild.checked,fe.innerHTML="",p.noCloneChecked=!!fe.cloneNode(!0).lastChild.defaultValue,fe.innerHTML="",p.option=!!fe.lastChild;var me={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n=void 0!==e.getElementsByTagName?e.getElementsByTagName(t||"*"):void 0!==e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?w.merge([e],n):n}function ye(e,t){for(var n=0,i=e.length;n",""]);var _e=/<|&#?\w+;/;function be(e,t,n,i,r){for(var o,a,s,c,l,u,f=t.createDocumentFragment(),d=[],p=0,h=e.length;p-1)r&&r.push(o);else if(l=re(o),a=ve(f.appendChild(o),"script"),l&&ye(a),n)for(u=0;o=a[u++];)ge.test(o.type||"")&&n.push(o);return f}var we=/^([^.]*)(?:\.(.+)|)/;function xe(){return!0}function ke(){return!1}function Ee(e,t){return e===function(){try{return m.activeElement}catch(e){}}()==("focus"===t)}function Ce(e,t,n,i,r,o){var a,s;if("object"===_typeof(t)){for(s in"string"!=typeof n&&(i=i||n,n=void 0),t)Ce(e,s,n,i,t[s],o);return e}if(null==i&&null==r?(r=n,i=n=void 0):null==r&&("string"==typeof n?(r=i,i=void 0):(r=i,i=n,n=void 0)),!1===r)r=ke;else if(!r)return e;return 1===o&&(a=r,r=function(e){return w().off(e),a.apply(this,arguments)},r.guid=a.guid||(a.guid=w.guid++)),e.each((function(){w.event.add(this,t,r,i,n)}))}function Te(e,t,n){n?(Y.set(e,t,!1),w.event.add(e,t,{namespace:!1,handler:function(e){var i,o,a=Y.get(this,t);if(1&e.isTrigger&&this[t]){if(a.length)(w.event.special[t]||{}).delegateType&&e.stopPropagation();else if(a=r.call(arguments),Y.set(this,t,a),i=n(this,t),this[t](),a!==(o=Y.get(this,t))||i?Y.set(this,t,!1):o={},a!==o)return e.stopImmediatePropagation(),e.preventDefault(),o&&o.value}else a.length&&(Y.set(this,t,{value:w.event.trigger(w.extend(a[0],w.Event.prototype),a.slice(1),this)}),e.stopImmediatePropagation())}})):void 0===Y.get(e,t)&&w.event.add(e,t,xe)}w.event={global:{},add:function(e,t,n,i,r){var o,a,s,c,l,u,f,d,p,h,g,m=Y.get(e);if(X(e))for(n.handler&&(n=(o=n).handler,r=o.selector),r&&w.find.matchesSelector(ie,r),n.guid||(n.guid=w.guid++),(c=m.events)||(c=m.events=Object.create(null)),(a=m.handle)||(a=m.handle=function(t){return w.event.triggered!==t.type?w.event.dispatch.apply(e,arguments):void 0}),l=(t=(t||"").match(I)||[""]).length;l--;)p=g=(s=we.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),p&&(f=w.event.special[p]||{},p=(r?f.delegateType:f.bindType)||p,f=w.event.special[p]||{},u=w.extend({type:p,origType:g,data:i,handler:n,guid:n.guid,selector:r,needsContext:r&&w.expr.match.needsContext.test(r),namespace:h.join(".")},o),(d=c[p])||((d=c[p]=[]).delegateCount=0,f.setup&&!1!==f.setup.call(e,i,h,a)||e.addEventListener&&e.addEventListener(p,a)),f.add&&(f.add.call(e,u),u.handler.guid||(u.handler.guid=n.guid)),r?d.splice(d.delegateCount++,0,u):d.push(u),w.event.global[p]=!0)},remove:function(e,t,n,i,r){var o,a,s,c,l,u,f,d,p,h,g,m=Y.hasData(e)&&Y.get(e);if(m&&(c=m.events)){for(l=(t=(t||"").match(I)||[""]).length;l--;)if(p=g=(s=we.exec(t[l])||[])[1],h=(s[2]||"").split(".").sort(),p){for(f=w.event.special[p]||{},d=c[p=(i?f.delegateType:f.bindType)||p]||[],s=s[2]&&new RegExp("(^|\\.)"+h.join("\\.(?:.*\\.|)")+"(\\.|$)"),a=o=d.length;o--;)u=d[o],!r&&g!==u.origType||n&&n.guid!==u.guid||s&&!s.test(u.namespace)||i&&i!==u.selector&&("**"!==i||!u.selector)||(d.splice(o,1),u.selector&&d.delegateCount--,f.remove&&f.remove.call(e,u));a&&!d.length&&(f.teardown&&!1!==f.teardown.call(e,h,m.handle)||w.removeEvent(e,p,m.handle),delete c[p])}else for(p in c)w.event.remove(e,p+t[l],n,i,!0);w.isEmptyObject(c)&&Y.remove(e,"handle events")}},dispatch:function(e){var t,n,i,r,o,a,s=new Array(arguments.length),c=w.event.fix(e),l=(Y.get(this,"events")||Object.create(null))[c.type]||[],u=w.event.special[c.type]||{};for(s[0]=c,t=1;t=1))for(;l!==this;l=l.parentNode||this)if(1===l.nodeType&&("click"!==e.type||!0!==l.disabled)){for(o=[],a={},n=0;n-1:w.find(r,this,null,[l]).length),a[r]&&o.push(i);o.length&&s.push({elem:l,handlers:o})}return l=this,c\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&w(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function Le(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Ne(e,t){var n,i,r,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(r in Y.remove(t,"handle events"),s)for(n=0,i=s[r].length;n1&&"string"==typeof m&&!p.checkClone&&Se.test(m))return e.each((function(r){var o=e.eq(r);v&&(t[0]=m.call(this,r,o.html())),Ie(o,t,n,i)}));if(d&&(a=(r=be(t,e[0].ownerDocument,!1,e,i)).firstChild,1===r.childNodes.length&&(r=a),a||i)){for(c=(s=w.map(ve(r,"script"),De)).length;f0&&ye(a,!c&&ve(e,"script")),s},cleanData:function(e){for(var t,n,i,r=w.event.special,o=0;void 0!==(n=e[o]);o++)if(X(n)){if(t=n[Y.expando]){if(t.events)for(i in t.events)r[i]?w.event.remove(n,i):w.removeEvent(n,i,t.handle);n[Y.expando]=void 0}n[Q.expando]&&(n[Q.expando]=void 0)}}}),w.fn.extend({detach:function(e){return He(this,e,!0)},remove:function(e){return He(this,e)},text:function(e){return F(this,(function(e){return void 0===e?w.text(this):this.empty().each((function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=e)}))}),null,e,arguments.length)},append:function(){return Ie(this,arguments,(function(e){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||je(this,e).appendChild(e)}))},prepend:function(){return Ie(this,arguments,(function(e){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var t=je(this,e);t.insertBefore(e,t.firstChild)}}))},before:function(){return Ie(this,arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this)}))},after:function(){return Ie(this,arguments,(function(e){this.parentNode&&this.parentNode.insertBefore(e,this.nextSibling)}))},empty:function(){for(var e,t=0;null!=(e=this[t]);t++)1===e.nodeType&&(w.cleanData(ve(e,!1)),e.textContent="");return this},clone:function(e,t){return e=null!=e&&e,t=null==t?e:t,this.map((function(){return w.clone(this,e,t)}))},html:function(e){return F(this,(function(e){var t=this[0]||{},n=0,i=this.length;if(void 0===e&&1===t.nodeType)return t.innerHTML;if("string"==typeof e&&!Ae.test(e)&&!me[(he.exec(e)||["",""])[1].toLowerCase()]){e=w.htmlPrefilter(e);try{for(;n=0&&(c+=Math.max(0,Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-o-c-s-.5))||0),c}function Ze(e,t,n){var i=qe(e),r=(!p.boxSizingReliable()||n)&&"border-box"===w.css(e,"boxSizing",!1,i),o=r,a=We(e,t,i),s="offset"+t[0].toUpperCase()+t.slice(1);if(Me.test(a)){if(!n)return a;a="auto"}return(!p.boxSizingReliable()&&r||!p.reliableTrDimensions()&&A(e,"tr")||"auto"===a||!parseFloat(a)&&"inline"===w.css(e,"display",!1,i))&&e.getClientRects().length&&(r="border-box"===w.css(e,"boxSizing",!1,i),(o=s in e)&&(a=e[s])),(a=parseFloat(a)||0)+Je(e,t,n||(r?"border":"content"),o,i,a)+"px"}function et(e,t,n,i,r){return new et.prototype.init(e,t,n,i,r)}w.extend({cssHooks:{opacity:{get:function(e,t){if(t){var n=We(e,"opacity");return""===n?"1":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,gridArea:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnStart:!0,gridRow:!0,gridRowEnd:!0,gridRowStart:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{},style:function(e,t,n,i){if(e&&3!==e.nodeType&&8!==e.nodeType&&e.style){var r,o,a,s=V(t),c=Ke.test(t),l=e.style;if(c||(t=Ve(s)),a=w.cssHooks[t]||w.cssHooks[s],void 0===n)return a&&"get"in a&&void 0!==(r=a.get(e,!1,i))?r:l[t];"string"===(o=_typeof(n))&&(r=te.exec(n))&&r[1]&&(n=se(e,t,r),o="number"),null!=n&&n==n&&("number"!==o||c||(n+=r&&r[3]||(w.cssNumber[s]?"":"px")),p.clearCloneStyle||""!==n||0!==t.indexOf("background")||(l[t]="inherit"),a&&"set"in a&&void 0===(n=a.set(e,n,i))||(c?l.setProperty(t,n):l[t]=n))}},css:function(e,t,n,i){var r,o,a,s=V(t);return Ke.test(t)||(t=Ve(s)),(a=w.cssHooks[t]||w.cssHooks[s])&&"get"in a&&(r=a.get(e,!0,n)),void 0===r&&(r=We(e,t,i)),"normal"===r&&t in Qe&&(r=Qe[t]),""===n||n?(o=parseFloat(r),!0===n||isFinite(o)?o||0:r):r}}),w.each(["height","width"],(function(e,t){w.cssHooks[t]={get:function(e,n,i){if(n)return!Xe.test(w.css(e,"display"))||e.getClientRects().length&&e.getBoundingClientRect().width?Ze(e,t,i):Re(e,Ye,(function(){return Ze(e,t,i)}))},set:function(e,n,i){var r,o=qe(e),a=!p.scrollboxSize()&&"absolute"===o.position,s=(a||i)&&"border-box"===w.css(e,"boxSizing",!1,o),c=i?Je(e,t,i,s,o):0;return s&&a&&(c-=Math.ceil(e["offset"+t[0].toUpperCase()+t.slice(1)]-parseFloat(o[t])-Je(e,t,"border",!1,o)-.5)),c&&(r=te.exec(n))&&"px"!==(r[3]||"px")&&(e.style[t]=n,n=w.css(e,t)),Ge(0,n,c)}}})),w.cssHooks.marginLeft=Fe(p.reliableMarginLeft,(function(e,t){if(t)return(parseFloat(We(e,"marginLeft"))||e.getBoundingClientRect().left-Re(e,{marginLeft:0},(function(){return e.getBoundingClientRect().left})))+"px"})),w.each({margin:"",padding:"",border:"Width"},(function(e,t){w.cssHooks[e+t]={expand:function(n){for(var i=0,r={},o="string"==typeof n?n.split(" "):[n];i<4;i++)r[e+ne[i]+t]=o[i]||o[i-2]||o[0];return r}},"margin"!==e&&(w.cssHooks[e+t].set=Ge)})),w.fn.extend({css:function(e,t){return F(this,(function(e,t,n){var i,r,o={},a=0;if(Array.isArray(t)){for(i=qe(e),r=t.length;a1)}}),w.Tween=et,et.prototype={constructor:et,init:function(e,t,n,i,r,o){this.elem=e,this.prop=n,this.easing=r||w.easing._default,this.options=t,this.start=this.now=this.cur(),this.end=i,this.unit=o||(w.cssNumber[n]?"":"px")},cur:function(){var e=et.propHooks[this.prop];return e&&e.get?e.get(this):et.propHooks._default.get(this)},run:function(e){var t,n=et.propHooks[this.prop];return this.options.duration?this.pos=t=w.easing[this.easing](e,this.options.duration*e,0,1,this.options.duration):this.pos=t=e,this.now=(this.end-this.start)*t+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):et.propHooks._default.set(this),this}},et.prototype.init.prototype=et.prototype,et.propHooks={_default:{get:function(e){var t;return 1!==e.elem.nodeType||null!=e.elem[e.prop]&&null==e.elem.style[e.prop]?e.elem[e.prop]:(t=w.css(e.elem,e.prop,""))&&"auto"!==t?t:0},set:function(e){w.fx.step[e.prop]?w.fx.step[e.prop](e):1!==e.elem.nodeType||!w.cssHooks[e.prop]&&null==e.elem.style[Ve(e.prop)]?e.elem[e.prop]=e.now:w.style(e.elem,e.prop,e.now+e.unit)}}},et.propHooks.scrollTop=et.propHooks.scrollLeft={set:function(e){e.elem.nodeType&&e.elem.parentNode&&(e.elem[e.prop]=e.now)}},w.easing={linear:function(e){return e},swing:function(e){return.5-Math.cos(e*Math.PI)/2},_default:"swing"},(w.fx=et.prototype.init).step={};var tt,nt,it=/^(?:toggle|show|hide)$/,rt=/queueHooks$/;function ot(){nt&&(!1===m.hidden&&e.requestAnimationFrame?e.requestAnimationFrame(ot):e.setTimeout(ot,w.fx.interval),w.fx.tick())}function at(){return e.setTimeout((function(){tt=void 0})),tt=Date.now()}function st(e,t){var n,i=0,r={height:e};for(t=t?1:0;i<4;i+=2-t)r["margin"+(n=ne[i])]=r["padding"+n]=e;return t&&(r.opacity=r.width=e),r}function ct(e,t,n){for(var i,r=(lt.tweeners[t]||[]).concat(lt.tweeners["*"]),o=0,a=r.length;o1)},removeAttr:function(e){return this.each((function(){w.removeAttr(this,e)}))}}),w.extend({attr:function(e,t,n){var i,r,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return void 0===e.getAttribute?w.prop(e,t,n):(1===o&&w.isXMLDoc(e)||(r=w.attrHooks[t.toLowerCase()]||(w.expr.match.bool.test(t)?ut:void 0)),void 0!==n?null===n?void w.removeAttr(e,t):r&&"set"in r&&void 0!==(i=r.set(e,n,t))?i:(e.setAttribute(t,n+""),n):r&&"get"in r&&null!==(i=r.get(e,t))?i:null==(i=w.find.attr(e,t))?void 0:i)},attrHooks:{type:{set:function(e,t){if(!p.radioValue&&"radio"===t&&A(e,"input")){var n=e.value;return e.setAttribute("type",t),n&&(e.value=n),t}}}},removeAttr:function(e,t){var n,i=0,r=t&&t.match(I);if(r&&1===e.nodeType)for(;n=r[i++];)e.removeAttribute(n)}}),ut={set:function(e,t,n){return!1===t?w.removeAttr(e,n):e.setAttribute(n,n),n}},w.each(w.expr.match.bool.source.match(/\w+/g),(function(e,t){var n=ft[t]||w.find.attr;ft[t]=function(e,t,i){var r,o,a=t.toLowerCase();return i||(o=ft[a],ft[a]=r,r=null!=n(e,t,i)?a:null,ft[a]=o),r}}));var dt=/^(?:input|select|textarea|button)$/i,pt=/^(?:a|area)$/i;function ht(e){return(e.match(I)||[]).join(" ")}function gt(e){return e.getAttribute&&e.getAttribute("class")||""}function mt(e){return Array.isArray(e)?e:"string"==typeof e&&e.match(I)||[]}w.fn.extend({prop:function(e,t){return F(this,w.prop,e,t,arguments.length>1)},removeProp:function(e){return this.each((function(){delete this[w.propFix[e]||e]}))}}),w.extend({prop:function(e,t,n){var i,r,o=e.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&w.isXMLDoc(e)||(t=w.propFix[t]||t,r=w.propHooks[t]),void 0!==n?r&&"set"in r&&void 0!==(i=r.set(e,n,t))?i:e[t]=n:r&&"get"in r&&null!==(i=r.get(e,t))?i:e[t]},propHooks:{tabIndex:{get:function(e){var t=w.find.attr(e,"tabindex");return t?parseInt(t,10):dt.test(e.nodeName)||pt.test(e.nodeName)&&e.href?0:-1}}},propFix:{for:"htmlFor",class:"className"}}),p.optSelected||(w.propHooks.selected={get:function(e){var t=e.parentNode;return t&&t.parentNode&&t.parentNode.selectedIndex,null},set:function(e){var t=e.parentNode;t&&(t.selectedIndex,t.parentNode&&t.parentNode.selectedIndex)}}),w.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],(function(){w.propFix[this.toLowerCase()]=this})),w.fn.extend({addClass:function(e){var t,n,i,r,o,a,s,c=0;if(h(e))return this.each((function(t){w(this).addClass(e.call(this,t,gt(this)))}));if((t=mt(e)).length)for(;n=this[c++];)if(r=gt(n),i=1===n.nodeType&&" "+ht(r)+" "){for(a=0;o=t[a++];)i.indexOf(" "+o+" ")<0&&(i+=o+" ");r!==(s=ht(i))&&n.setAttribute("class",s)}return this},removeClass:function(e){var t,n,i,r,o,a,s,c=0;if(h(e))return this.each((function(t){w(this).removeClass(e.call(this,t,gt(this)))}));if(!arguments.length)return this.attr("class","");if((t=mt(e)).length)for(;n=this[c++];)if(r=gt(n),i=1===n.nodeType&&" "+ht(r)+" "){for(a=0;o=t[a++];)for(;i.indexOf(" "+o+" ")>-1;)i=i.replace(" "+o+" "," ");r!==(s=ht(i))&&n.setAttribute("class",s)}return this},toggleClass:function(e,t){var n=_typeof(e),i="string"===n||Array.isArray(e);return"boolean"==typeof t&&i?t?this.addClass(e):this.removeClass(e):h(e)?this.each((function(n){w(this).toggleClass(e.call(this,n,gt(this),t),t)})):this.each((function(){var t,r,o,a;if(i)for(r=0,o=w(this),a=mt(e);t=a[r++];)o.hasClass(t)?o.removeClass(t):o.addClass(t);else void 0!==e&&"boolean"!==n||((t=gt(this))&&Y.set(this,"__className__",t),this.setAttribute&&this.setAttribute("class",t||!1===e?"":Y.get(this,"__className__")||""))}))},hasClass:function(e){var t,n,i=0;for(t=" "+e+" ";n=this[i++];)if(1===n.nodeType&&(" "+ht(gt(n))+" ").indexOf(t)>-1)return!0;return!1}});var vt=/\r/g;w.fn.extend({val:function(e){var t,n,i,r=this[0];return arguments.length?(i=h(e),this.each((function(n){var r;1===this.nodeType&&(null==(r=i?e.call(this,n,w(this).val()):e)?r="":"number"==typeof r?r+="":Array.isArray(r)&&(r=w.map(r,(function(e){return null==e?"":e+""}))),(t=w.valHooks[this.type]||w.valHooks[this.nodeName.toLowerCase()])&&"set"in t&&void 0!==t.set(this,r,"value")||(this.value=r))}))):r?(t=w.valHooks[r.type]||w.valHooks[r.nodeName.toLowerCase()])&&"get"in t&&void 0!==(n=t.get(r,"value"))?n:"string"==typeof(n=r.value)?n.replace(vt,""):null==n?"":n:void 0}}),w.extend({valHooks:{option:{get:function(e){var t=w.find.attr(e,"value");return null!=t?t:ht(w.text(e))}},select:{get:function(e){var t,n,i,r=e.options,o=e.selectedIndex,a="select-one"===e.type,s=a?null:[],c=a?o+1:r.length;for(i=o<0?c:a?o:0;i-1)&&(n=!0);return n||(e.selectedIndex=-1),o}}}}),w.each(["radio","checkbox"],(function(){w.valHooks[this]={set:function(e,t){if(Array.isArray(t))return e.checked=w.inArray(w(e).val(),t)>-1}},p.checkOn||(w.valHooks[this].get=function(e){return null===e.getAttribute("value")?"on":e.value})})),p.focusin="onfocusin"in e;var yt=/^(?:focusinfocus|focusoutblur)$/,_t=function(e){e.stopPropagation()};w.extend(w.event,{trigger:function(t,n,i,r){var o,a,s,c,l,f,d,p,v=[i||m],y=u.call(t,"type")?t.type:t,_=u.call(t,"namespace")?t.namespace.split("."):[];if(a=p=s=i=i||m,3!==i.nodeType&&8!==i.nodeType&&!yt.test(y+w.event.triggered)&&(y.indexOf(".")>-1&&(_=y.split("."),y=_.shift(),_.sort()),l=y.indexOf(":")<0&&"on"+y,(t=t[w.expando]?t:new w.Event(y,"object"===_typeof(t)&&t)).isTrigger=r?2:3,t.namespace=_.join("."),t.rnamespace=t.namespace?new RegExp("(^|\\.)"+_.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,t.result=void 0,t.target||(t.target=i),n=null==n?[t]:w.makeArray(n,[t]),d=w.event.special[y]||{},r||!d.trigger||!1!==d.trigger.apply(i,n))){if(!r&&!d.noBubble&&!g(i)){for(c=d.delegateType||y,yt.test(c+y)||(a=a.parentNode);a;a=a.parentNode)v.push(a),s=a;s===(i.ownerDocument||m)&&v.push(s.defaultView||s.parentWindow||e)}for(o=0;(a=v[o++])&&!t.isPropagationStopped();)p=a,t.type=o>1?c:d.bindType||y,(f=(Y.get(a,"events")||Object.create(null))[t.type]&&Y.get(a,"handle"))&&f.apply(a,n),(f=l&&a[l])&&f.apply&&X(a)&&(t.result=f.apply(a,n),!1===t.result&&t.preventDefault());return t.type=y,r||t.isDefaultPrevented()||d._default&&!1!==d._default.apply(v.pop(),n)||!X(i)||l&&h(i[y])&&!g(i)&&((s=i[l])&&(i[l]=null),w.event.triggered=y,t.isPropagationStopped()&&p.addEventListener(y,_t),i[y](),t.isPropagationStopped()&&p.removeEventListener(y,_t),w.event.triggered=void 0,s&&(i[l]=s)),t.result}},simulate:function(e,t,n){var i=w.extend(new w.Event,n,{type:e,isSimulated:!0});w.event.trigger(i,null,t)}}),w.fn.extend({trigger:function(e,t){return this.each((function(){w.event.trigger(e,t,this)}))},triggerHandler:function(e,t){var n=this[0];if(n)return w.event.trigger(e,t,n,!0)}}),p.focusin||w.each({focus:"focusin",blur:"focusout"},(function(e,t){var n=function(e){w.event.simulate(t,e.target,w.event.fix(e))};w.event.special[t]={setup:function(){var i=this.ownerDocument||this.document||this,r=Y.access(i,t);r||i.addEventListener(e,n,!0),Y.access(i,t,(r||0)+1)},teardown:function(){var i=this.ownerDocument||this.document||this,r=Y.access(i,t)-1;r?Y.access(i,t,r):(i.removeEventListener(e,n,!0),Y.remove(i,t))}}}));var bt=e.location,wt={guid:Date.now()},xt=/\?/;w.parseXML=function(t){var n,i;if(!t||"string"!=typeof t)return null;try{n=(new e.DOMParser).parseFromString(t,"text/xml")}catch(e){}return i=n&&n.getElementsByTagName("parsererror")[0],n&&!i||w.error("Invalid XML: "+(i?w.map(i.childNodes,(function(e){return e.textContent})).join("\n"):t)),n};var kt=/\[\]$/,Et=/\r?\n/g,Ct=/^(?:submit|button|image|reset|file)$/i,Tt=/^(?:input|select|textarea|keygen)/i;function At(e,t,n,i){var r;if(Array.isArray(t))w.each(t,(function(t,r){n||kt.test(e)?i(e,r):At(e+"["+("object"===_typeof(r)&&null!=r?t:"")+"]",r,n,i)}));else if(n||"object"!==_(t))i(e,t);else for(r in t)At(e+"["+r+"]",t[r],n,i)}w.param=function(e,t){var n,i=[],r=function(e,t){var n=h(t)?t():t;i[i.length]=encodeURIComponent(e)+"="+encodeURIComponent(null==n?"":n)};if(null==e)return"";if(Array.isArray(e)||e.jquery&&!w.isPlainObject(e))w.each(e,(function(){r(this.name,this.value)}));else for(n in e)At(n,e[n],t,r);return i.join("&")},w.fn.extend({serialize:function(){return w.param(this.serializeArray())},serializeArray:function(){return this.map((function(){var e=w.prop(this,"elements");return e?w.makeArray(e):this})).filter((function(){var e=this.type;return this.name&&!w(this).is(":disabled")&&Tt.test(this.nodeName)&&!Ct.test(e)&&(this.checked||!pe.test(e))})).map((function(e,t){var n=w(this).val();return null==n?null:Array.isArray(n)?w.map(n,(function(e){return{name:t.name,value:e.replace(Et,"\r\n")}})):{name:t.name,value:n.replace(Et,"\r\n")}})).get()}});var St=/%20/g,Ot=/#.*$/,jt=/([?&])_=[^&]*/,Dt=/^(.*?):[ \t]*([^\r\n]*)$/gm,Lt=/^(?:GET|HEAD)$/,Nt=/^\/\//,Pt={},It={},Ht="*/".concat("*"),Mt=m.createElement("a");function qt(e){return function(t,n){"string"!=typeof t&&(n=t,t="*");var i,r=0,o=t.toLowerCase().match(I)||[];if(h(n))for(;i=o[r++];)"+"===i[0]?(i=i.slice(1)||"*",(e[i]=e[i]||[]).unshift(n)):(e[i]=e[i]||[]).push(n)}}function Rt(e,t,n,i){var r={},o=e===It;function a(s){var c;return r[s]=!0,w.each(e[s]||[],(function(e,s){var l=s(t,n,i);return"string"!=typeof l||o||r[l]?o?!(c=l):void 0:(t.dataTypes.unshift(l),a(l),!1)})),c}return a(t.dataTypes[0])||!r["*"]&&a("*")}function Bt(e,t){var n,i,r=w.ajaxSettings.flatOptions||{};for(n in t)void 0!==t[n]&&((r[n]?e:i||(i={}))[n]=t[n]);return i&&w.extend(!0,e,i),e}Mt.href=bt.href,w.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:bt.href,type:"GET",isLocal:/^(?:about|app|app-storage|.+-extension|file|res|widget):$/.test(bt.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Ht,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":w.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(e,t){return t?Bt(Bt(e,w.ajaxSettings),t):Bt(w.ajaxSettings,e)},ajaxPrefilter:qt(Pt),ajaxTransport:qt(It),ajax:function(t,n){"object"===_typeof(t)&&(n=t,t=void 0);var i,r,o,a,s,c,l,u,f,d,p=w.ajaxSetup({},n=n||{}),h=p.context||p,g=p.context&&(h.nodeType||h.jquery)?w(h):w.event,v=w.Deferred(),y=w.Callbacks("once memory"),_=p.statusCode||{},b={},x={},k="canceled",E={readyState:0,getResponseHeader:function(e){var t;if(l){if(!a)for(a={};t=Dt.exec(o);)a[t[1].toLowerCase()+" "]=(a[t[1].toLowerCase()+" "]||[]).concat(t[2]);t=a[e.toLowerCase()+" "]}return null==t?null:t.join(", ")},getAllResponseHeaders:function(){return l?o:null},setRequestHeader:function(e,t){return null==l&&(e=x[e.toLowerCase()]=x[e.toLowerCase()]||e,b[e]=t),this},overrideMimeType:function(e){return null==l&&(p.mimeType=e),this},statusCode:function(e){var t;if(e)if(l)E.always(e[E.status]);else for(t in e)_[t]=[_[t],e[t]];return this},abort:function(e){var t=e||k;return i&&i.abort(t),C(0,t),this}};if(v.promise(E),p.url=((t||p.url||bt.href)+"").replace(Nt,bt.protocol+"//"),p.type=n.method||n.type||p.method||p.type,p.dataTypes=(p.dataType||"*").toLowerCase().match(I)||[""],null==p.crossDomain){c=m.createElement("a");try{c.href=p.url,c.href=c.href,p.crossDomain=Mt.protocol+"//"+Mt.host!=c.protocol+"//"+c.host}catch(e){p.crossDomain=!0}}if(p.data&&p.processData&&"string"!=typeof p.data&&(p.data=w.param(p.data,p.traditional)),Rt(Pt,p,n,E),l)return E;for(f in(u=w.event&&p.global)&&0==w.active++&&w.event.trigger("ajaxStart"),p.type=p.type.toUpperCase(),p.hasContent=!Lt.test(p.type),r=p.url.replace(Ot,""),p.hasContent?p.data&&p.processData&&0===(p.contentType||"").indexOf("application/x-www-form-urlencoded")&&(p.data=p.data.replace(St,"+")):(d=p.url.slice(r.length),p.data&&(p.processData||"string"==typeof p.data)&&(r+=(xt.test(r)?"&":"?")+p.data,delete p.data),!1===p.cache&&(r=r.replace(jt,"$1"),d=(xt.test(r)?"&":"?")+"_="+wt.guid+++d),p.url=r+d),p.ifModified&&(w.lastModified[r]&&E.setRequestHeader("If-Modified-Since",w.lastModified[r]),w.etag[r]&&E.setRequestHeader("If-None-Match",w.etag[r])),(p.data&&p.hasContent&&!1!==p.contentType||n.contentType)&&E.setRequestHeader("Content-Type",p.contentType),E.setRequestHeader("Accept",p.dataTypes[0]&&p.accepts[p.dataTypes[0]]?p.accepts[p.dataTypes[0]]+("*"!==p.dataTypes[0]?", "+Ht+"; q=0.01":""):p.accepts["*"]),p.headers)E.setRequestHeader(f,p.headers[f]);if(p.beforeSend&&(!1===p.beforeSend.call(h,E,p)||l))return E.abort();if(k="abort",y.add(p.complete),E.done(p.success),E.fail(p.error),i=Rt(It,p,n,E)){if(E.readyState=1,u&&g.trigger("ajaxSend",[E,p]),l)return E;p.async&&p.timeout>0&&(s=e.setTimeout((function(){E.abort("timeout")}),p.timeout));try{l=!1,i.send(b,C)}catch(e){if(l)throw e;C(-1,e)}}else C(-1,"No Transport");function C(t,n,a,c){var f,d,m,b,x,k=n;l||(l=!0,s&&e.clearTimeout(s),i=void 0,o=c||"",E.readyState=t>0?4:0,f=t>=200&&t<300||304===t,a&&(b=function(e,t,n){for(var i,r,o,a,s=e.contents,c=e.dataTypes;"*"===c[0];)c.shift(),void 0===i&&(i=e.mimeType||t.getResponseHeader("Content-Type"));if(i)for(r in s)if(s[r]&&s[r].test(i)){c.unshift(r);break}if(c[0]in n)o=c[0];else{for(r in n){if(!c[0]||e.converters[r+" "+c[0]]){o=r;break}a||(a=r)}o=o||a}if(o)return o!==c[0]&&c.unshift(o),n[o]}(p,E,a)),!f&&w.inArray("script",p.dataTypes)>-1&&w.inArray("json",p.dataTypes)<0&&(p.converters["text script"]=function(){}),b=function(e,t,n,i){var r,o,a,s,c,l={},u=e.dataTypes.slice();if(u[1])for(a in e.converters)l[a.toLowerCase()]=e.converters[a];for(o=u.shift();o;)if(e.responseFields[o]&&(n[e.responseFields[o]]=t),!c&&i&&e.dataFilter&&(t=e.dataFilter(t,e.dataType)),c=o,o=u.shift())if("*"===o)o=c;else if("*"!==c&&c!==o){if(!(a=l[c+" "+o]||l["* "+o]))for(r in l)if((s=r.split(" "))[1]===o&&(a=l[c+" "+s[0]]||l["* "+s[0]])){!0===a?a=l[r]:!0!==l[r]&&(o=s[0],u.unshift(s[1]));break}if(!0!==a)if(a&&e.throws)t=a(t);else try{t=a(t)}catch(e){return{state:"parsererror",error:a?e:"No conversion from "+c+" to "+o}}}return{state:"success",data:t}}(p,b,E,f),f?(p.ifModified&&((x=E.getResponseHeader("Last-Modified"))&&(w.lastModified[r]=x),(x=E.getResponseHeader("etag"))&&(w.etag[r]=x)),204===t||"HEAD"===p.type?k="nocontent":304===t?k="notmodified":(k=b.state,d=b.data,f=!(m=b.error))):(m=k,!t&&k||(k="error",t<0&&(t=0))),E.status=t,E.statusText=(n||k)+"",f?v.resolveWith(h,[d,k,E]):v.rejectWith(h,[E,k,m]),E.statusCode(_),_=void 0,u&&g.trigger(f?"ajaxSuccess":"ajaxError",[E,p,f?d:m]),y.fireWith(h,[E,k]),u&&(g.trigger("ajaxComplete",[E,p]),--w.active||w.event.trigger("ajaxStop")))}return E},getJSON:function(e,t,n){return w.get(e,t,n,"json")},getScript:function(e,t){return w.get(e,void 0,t,"script")}}),w.each(["get","post"],(function(e,t){w[t]=function(e,n,i,r){return h(n)&&(r=r||i,i=n,n=void 0),w.ajax(w.extend({url:e,type:t,dataType:r,data:n,success:i},w.isPlainObject(e)&&e))}})),w.ajaxPrefilter((function(e){var t;for(t in e.headers)"content-type"===t.toLowerCase()&&(e.contentType=e.headers[t]||"")})),w._evalUrl=function(e,t,n){return w.ajax({url:e,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,converters:{"text script":function(){}},dataFilter:function(e){w.globalEval(e,t,n)}})},w.fn.extend({wrapAll:function(e){var t;return this[0]&&(h(e)&&(e=e.call(this[0])),t=w(e,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&t.insertBefore(this[0]),t.map((function(){for(var e=this;e.firstElementChild;)e=e.firstElementChild;return e})).append(this)),this},wrapInner:function(e){return h(e)?this.each((function(t){w(this).wrapInner(e.call(this,t))})):this.each((function(){var t=w(this),n=t.contents();n.length?n.wrapAll(e):t.append(e)}))},wrap:function(e){var t=h(e);return this.each((function(n){w(this).wrapAll(t?e.call(this,n):e)}))},unwrap:function(e){return this.parent(e).not("body").each((function(){w(this).replaceWith(this.childNodes)})),this}}),w.expr.pseudos.hidden=function(e){return!w.expr.pseudos.visible(e)},w.expr.pseudos.visible=function(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)},w.ajaxSettings.xhr=function(){try{return new e.XMLHttpRequest}catch(e){}};var Wt={0:200,1223:204},Ft=w.ajaxSettings.xhr();p.cors=!!Ft&&"withCredentials"in Ft,p.ajax=Ft=!!Ft,w.ajaxTransport((function(t){var n,i;if(p.cors||Ft&&!t.crossDomain)return{send:function(r,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];for(a in t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||r["X-Requested-With"]||(r["X-Requested-With"]="XMLHttpRequest"),r)s.setRequestHeader(a,r[a]);n=function(e){return function(){n&&(n=i=s.onload=s.onerror=s.onabort=s.ontimeout=s.onreadystatechange=null,"abort"===e?s.abort():"error"===e?"number"!=typeof s.status?o(0,"error"):o(s.status,s.statusText):o(Wt[s.status]||s.status,s.statusText,"text"!==(s.responseType||"text")||"string"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=n(),i=s.onerror=s.ontimeout=n("error"),void 0!==s.onabort?s.onabort=i:s.onreadystatechange=function(){4===s.readyState&&e.setTimeout((function(){n&&i()}))},n=n("abort");try{s.send(t.hasContent&&t.data||null)}catch(e){if(n)throw e}},abort:function(){n&&n()}}})),w.ajaxPrefilter((function(e){e.crossDomain&&(e.contents.script=!1)})),w.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(e){return w.globalEval(e),e}}}),w.ajaxPrefilter("script",(function(e){void 0===e.cache&&(e.cache=!1),e.crossDomain&&(e.type="GET")})),w.ajaxTransport("script",(function(e){var t,n;if(e.crossDomain||e.scriptAttrs)return{send:function(i,r){t=w("