diff --git a/.all-contributorsrc b/.all-contributorsrc index d323f7c0164..6287f526d1a 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -1877,7 +1877,7 @@ ] }, { - "login": "NogginBox", + "login": "nogginbox", "name": "Richard Garside", "avatar_url": "https://avatars3.githubusercontent.com/u/729381?v=4", "profile": "http://www.nogginbox.co.uk", @@ -2861,6 +2861,267 @@ "contributions": [ "code" ] + }, + { + "login": "jorisdebock", + "name": "Joris de Bock", + "avatar_url": "https://avatars.githubusercontent.com/u/10253291?v=4", + "profile": "https://github.com/jorisdebock", + "contributions": [ + "code" + ] + }, + { + "login": "MarGraz", + "name": "MarGraz", + "avatar_url": "https://avatars.githubusercontent.com/u/19241483?v=4", + "profile": "https://codingops.dev/", + "contributions": [ + "code" + ] + }, + { + "login": "arnaudroy97", + "name": "Arnaud", + "avatar_url": "https://avatars.githubusercontent.com/u/66786602?v=4", + "profile": "https://github.com/arnaudroy97", + "contributions": [ + "code" + ] + }, + { + "login": "mroskamp", + "name": "Brian Roskamp", + "avatar_url": "https://avatars.githubusercontent.com/u/4029047?v=4", + "profile": "https://github.com/mroskamp", + "contributions": [ + "code" + ] + }, + { + "login": "M-Lipin", + "name": "Mikhail Lipin", + "avatar_url": "https://avatars.githubusercontent.com/u/23213980?v=4", + "profile": "https://github.com/M-Lipin", + "contributions": [ + "code" + ] + }, + { + "login": "AndreySurkov", + "name": "AndreySurkov", + "avatar_url": "https://avatars.githubusercontent.com/u/17640441?v=4", + "profile": "https://github.com/AndreySurkov", + "contributions": [ + "code" + ] + }, + { + "login": "spyraklas", + "name": "Spyros", + "avatar_url": "https://avatars.githubusercontent.com/u/93044877?v=4", + "profile": "https://github.com/spyraklas", + "contributions": [ + "code" + ] + }, + { + "login": "ThiemeNL", + "name": "ThiemeNL", + "avatar_url": "https://avatars.githubusercontent.com/u/5397828?v=4", + "profile": "https://github.com/ThiemeNL", + "contributions": [ + "code" + ] + }, + { + "login": "miroslavpopovic", + "name": "Miroslav Popovic", + "avatar_url": "https://avatars.githubusercontent.com/u/1155797?v=4", + "profile": "https://miroslavpopovic.com/", + "contributions": [ + "code" + ] + }, + { + "login": "ovekaaven", + "name": "Ove Kåven", + "avatar_url": "https://avatars.githubusercontent.com/u/20878244?v=4", + "profile": "https://github.com/ovekaaven", + "contributions": [ + "code" + ] + }, + { + "login": "Psichorex", + "name": "Roland Márkus", + "avatar_url": "https://avatars.githubusercontent.com/u/92299130?v=4", + "profile": "https://github.com/Psichorex", + "contributions": [ + "code" + ] + }, + { + "login": "santoshyadavdev", + "name": "Santosh Yadav", + "avatar_url": "https://avatars.githubusercontent.com/u/11923975?v=4", + "profile": "https://mastodon.online/@SantoshYadavDev", + "contributions": [ + "code" + ] + }, + { + "login": "michaelschiller", + "name": "michaelschiller", + "avatar_url": "https://avatars.githubusercontent.com/u/6459215?v=4", + "profile": "https://github.com/michaelschiller", + "contributions": [ + "code" + ] + }, + { + "login": "minhtaile2712", + "name": "minhtaile2712", + "avatar_url": "https://avatars.githubusercontent.com/u/53080238?v=4", + "profile": "https://github.com/minhtaile2712", + "contributions": [ + "code" + ] + }, + { + "login": "rwawr", + "name": "rwawr", + "avatar_url": "https://avatars.githubusercontent.com/u/153218770?v=4", + "profile": "https://github.com/rwawr", + "contributions": [ + "code" + ] + }, + { + "login": "thatplatypus", + "name": "thatplatypus", + "avatar_url": "https://avatars.githubusercontent.com/u/29233866?v=4", + "profile": "https://github.com/thatplatypus", + "contributions": [ + "code" + ] + }, + { + "login": "vesko-k", + "name": "Veselin Kutsarov", + "avatar_url": "https://avatars.githubusercontent.com/u/12114162?v=4", + "profile": "https://github.com/vesko-k", + "contributions": [ + "code" + ] + }, + { + "login": "lakuri", + "name": "lakuri", + "avatar_url": "https://avatars.githubusercontent.com/u/8038760?v=4", + "profile": "https://github.com/lakuri", + "contributions": [ + "code" + ] + }, + { + "login": "plompd", + "name": "Daniel Plomp", + "avatar_url": "https://avatars.githubusercontent.com/u/1482375?v=4", + "profile": "https://www.zimplerapps.com/", + "contributions": [ + "code" + ] + }, + { + "login": "drewnoakes", + "name": "Drew Noakes", + "avatar_url": "https://avatars.githubusercontent.com/u/350947?v=4", + "profile": "https://github.com/drewnoakes", + "contributions": [ + "code" + ] + }, + { + "login": "DrewScoggins", + "name": "Drew Scoggins", + "avatar_url": "https://avatars.githubusercontent.com/u/9439069?v=4", + "profile": "https://github.com/DrewScoggins", + "contributions": [ + "code" + ] + }, + { + "login": "xperiandri", + "name": "Andrii Chebukin", + "avatar_url": "https://avatars.githubusercontent.com/u/2365592?v=4", + "profile": "https://github.com/xperiandri", + "contributions": [ + "code" + ] + }, + { + "login": "elaurentin", + "name": "Banzai316", + "avatar_url": "https://avatars.githubusercontent.com/u/5598813?v=4", + "profile": "http://www.ernzo.com/", + "contributions": [ + "code" + ] + }, + { + "login": "ahmedbera", + "name": "Bera", + "avatar_url": "https://avatars.githubusercontent.com/u/5622227?v=4", + "profile": "https://github.com/ahmedbera", + "contributions": [ + "code" + ] + }, + { + "login": "markus-codechefs", + "name": "Markus Trachsel", + "avatar_url": "https://avatars.githubusercontent.com/u/62404942?v=4", + "profile": "https://github.com/markus-codechefs", + "contributions": [ + "code" + ] + }, + { + "login": "mwpowellhtx", + "name": "Michael W Powell", + "avatar_url": "https://avatars.githubusercontent.com/u/1824187?v=4", + "profile": "https://github.com/mwpowellhtx", + "contributions": [ + "code" + ] + }, + { + "login": "ggkoning", + "name": "Gido Koning", + "avatar_url": "https://avatars.githubusercontent.com/u/60574784?v=4", + "profile": "https://github.com/ggkoning", + "contributions": [ + "code" + ] + }, + { + "login": "idan-h", + "name": "Idan", + "avatar_url": "https://avatars.githubusercontent.com/u/61008695?v=4", + "profile": "https://github.com/idan-h", + "contributions": [ + "code" + ] + }, + { + "login": "kartheekp-ms", + "name": "Kartheek Penagamuri", + "avatar_url": "https://avatars.githubusercontent.com/u/52756182?v=4", + "profile": "https://github.com/kartheekp-ms", + "contributions": [ + "code" + ] } ], "skipCi": true, diff --git a/.dockerignore b/.dockerignore index d055c334463..86de177373f 100644 --- a/.dockerignore +++ b/.dockerignore @@ -3,6 +3,8 @@ # Except src for building !./src/* +!Directory.Build.props + # TODO : Remove this line when Docker Buildkit works in Windows !/.build/release/* diff --git a/.gitattributes b/.gitattributes index 405521fae01..b175f24ba07 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,7 @@ * text=auto -**/wwwroot/Scripts/* linguist-vendored \ No newline at end of file +**/wwwroot/Scripts/* linguist-vendored + +# Keep LF line endings in webroot assets files. Otherwise, building them under Windows would change the line endings to CLRF and cause changes without actually editing the source files. +**/wwwroot/**/*.js text eol=lf +**/wwwroot/**/*.css text eol=lf diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS deleted file mode 100644 index d5f8eb1b087..00000000000 --- a/.github/CODEOWNERS +++ /dev/null @@ -1,27 +0,0 @@ -src/docs/ @agriffard - -src/OrchardCore/OrchardCore.Data/ @sebastienros - -src/OrchardCore/OrchardCore.Infrastructure/ @jtkech - -src/OrchardCore.Modules/OrchardCore.Apis.GraphQL/ @Jetski5822 @carlwoodhouse - -src/OrchardCore.Modules/OrchardCore.Email/ @hishamco - -src/OrchardCore.Modules/OrchardCore.Lucene/ @Skrypt - -src/OrchardCore.Modules/OrchardCore.Facebook/ @MichaelPetrinolis - -src/OrchardCore.Modules/OrchardCore.GitHub/ @MichaelPetrinolis - -src/OrchardCore.Modules/OrchardCore.Google/ @MichaelPetrinolis - -src/OrchardCore.Modules/OrchardCore.Microsoft.Authentication/ @MichaelPetrinolis - -src/OrchardCore.Modules/OrchardCore.OpenId/ @kevinchalet - -src/OrchardCore.Modules/OrchardCore.Shortcodes/ @deanmarcussen - -src/OrchardCore.Modules/OrchardCore.Twitter/ @MichaelPetrinolis - -src/OrchardCore.Modules/OrchardCore.Workflows/ @sfmskywalker diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 00000000000..18d80fefbb1 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/.github/workflows/assets_validation.yml b/.github/workflows/assets_validation.yml index 709311002f9..90a304e4888 100644 --- a/.github/workflows/assets_validation.yml +++ b/.github/workflows/assets_validation.yml @@ -1,23 +1,29 @@ -name: Frontend Assets Build Validation -on: - # Manual trigger. - workflow_dispatch: +name: Validating the Building of Public Assets + +on: + push: + paths-ignore: + - '**/*.md' + - 'mkdocs.yml' + - 'src/docs/**/*' + branches: [ main ] + pull_request: + branches: [ main, release/** ] + +concurrency: + group: ${{ github.head_ref || github.run_id }}-assets_validation + cancel-in-progress: true + jobs: test-npm-build: name: Test building assets runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: actions/cache@v4 - with: - path: ~/.npm - key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-node- - name: Rebuild packages run: | npm install - npm run rebuild + gulp rebuild - name: Check if git has changes shell: pwsh run: | @@ -28,9 +34,81 @@ jobs: Write-Output 'Please make sure to build the assets properly before pushing, see https://docs.orchardcore.net/en/latest/docs/guides/gulp-pipeline/.' Write-Output 'The following files changed:' Write-Output $changes + Write-Output 'You can also download the attached artifact to see the changes.' + Write-Output '' + Write-Output '---------------------------------------' + Write-Output '' + + $changeLines = $changes -split '`n' + $changedFiles = @() + $hasNonCrlfChange = $false + + foreach ($line in $changeLines) + { + if ($line -match '^\s?(M|A|\?\?)\s+(.*)$') + { + $changeType = $matches[1] + $file = $matches[2] + + Write-Output "Diff for: $file" + + if ($changeType -eq 'M') + { + # File is modified; use git diff to get the diff of the modified file. + + # The diff will be sent to stderr so we need to redirect it to stdout to capture it. + git diff -- $file 2>&1 >> tmp.txt + $diffOutput = Get-Content tmp.txt + Remove-Item tmp.txt + + # Filtering out this pattern is necessary because certain CRLF line endings are not replaced by + # gulp-eol, so the output files can still have some CRLF. + if ($($diffOutput ?? '').Contains('CRLF will be replaced by LF the next time Git touches it')) + { + Write-Output "Warning: CRLF will be replaced by LF in $file. Fix this if you can, but certain CRLF line endings can't be replaced." + } + else + { + Write-Output $diffOutput + $hasNonCrlfChange = $true + } + } + elseif ($changeType -eq '??') + { + # File is (untracked); display the file contents. + Get-Content -Path $file + $hasNonCrlfChange = $true + } + + $changedFiles += $file + + Write-Output '' + Write-Output '---------------------------------------' + Write-Output '' + } + } + + if (-not $hasNonCrlfChange) + { + Write-Output 'No non-CRLF changes found. Repository is clean.' + exit 0 + } + + # Convert the array of changed files to a single string with each file on a new line so actions/upload-artifact + # can consume it. + $changedFilesString = $changedFiles -join "`n" + "CHANGED_FILES<> $Env:GITHUB_ENV + exit -1 } else { Write-Host "No uncommitted changes found. Repository is clean." } + - name: Upload changed files as artifact + uses: actions/upload-artifact@v4 + if: failure() + with: + name: changed-files + path: ${{ env.CHANGED_FILES }} + retention-days: 30 diff --git a/.github/workflows/close_stale_prs.yml b/.github/workflows/close_stale_prs.yml new file mode 100644 index 00000000000..b78897a8809 --- /dev/null +++ b/.github/workflows/close_stale_prs.yml @@ -0,0 +1,26 @@ +# Labels PRs without updates for 60 days as stale, then closes them 15 days later. +name: Close stale PRs + +on: + schedule: + # Every day at 1:39 AM UTC. A random time to avoid GitHub Actions being overloaded by scheduled workflows. + - cron: '39 1 * * *' + +jobs: + close-stale-prs: + runs-on: ubuntu-latest + steps: + - uses: actions/stale@v9 + with: + stale-pr-message: > + It seems that this pull request didn't really move for quite a while. Is this something you'd like to + revisit any time soon or should we close? Pleaes comment if you'd like to pick it up and remove the + "stale" label. + stale-pr-label: stale + # Not marking issues as stale. + days-before-issue-stale: -1 + # Close the PR 15 days after marking it as stale. + days-before-close: 15 + close-pr-message: > + Closing this pull request because it has been stale for very long. If you think this is still relevant, + feel free to reopen it. diff --git a/.github/workflows/docs_validation.yml b/.github/workflows/docs_validation.yml new file mode 100644 index 00000000000..493ec2b58ac --- /dev/null +++ b/.github/workflows/docs_validation.yml @@ -0,0 +1,36 @@ +name: Validating Building the Documentation + +on: + push: + paths: + - 'mkdocs.yml' + - 'src/docs/**' + branches: [ main ] + pull_request: + paths: + - 'mkdocs.yml' + - 'src/docs/**' + +concurrency: + group: ${{ github.head_ref || github.run_id }}-docs_validation + cancel-in-progress: true + +jobs: + validate-building-documentation: + name: Validating Building the Documentation + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + # Necessary to avoid mkdocs-git-revision-date-localized-plugin warnings. + fetch-depth: 0 + + - name: Install Dependencies + # Installing pip v22.0.3 is only necessary because unbuntu-latest runners include v22.0.2, which has a bug. That + # line can be removed once the runners are updated, see https://github.com/actions/runner-images?tab=readme-ov-file#available-images. + run: | + python -m pip install pip==22.0.3 + pip install -r src/docs/requirements.txt -v + + - name: Build Documentation + run: python -m mkdocs build --strict diff --git a/.github/workflows/first_time_contributor.yml b/.github/workflows/first_time_contributor.yml new file mode 100644 index 00000000000..4fecb26020a --- /dev/null +++ b/.github/workflows/first_time_contributor.yml @@ -0,0 +1,31 @@ +name: First-time Contributor Welcome + +on: + issues: + types: [opened] + pull_request_target: + types: [opened, closed] + +jobs: + first-time-contributor-welcome: + runs-on: ubuntu-latest + steps: + # We don't use the actions/first-interaction action because it can't reference the author, nor can it comment after + # PR merge. + # Once https://github.com/wow-actions/welcome/pull/12 is merged, we should use https://github.com/wow-actions/welcome + # directly. + - uses: OrchardCMS/welcome-action@task/update-to-node-20 + with: + FIRST_ISSUE_COMMENT: > + Thank you for submitting your first issue, awesome! 🚀 We're thrilled to receive your input. If you haven't + completed the template yet, please take a moment to do so. This ensures that we fully understand your feature + request or bug report. A core team member will review your issue and get back to you. + FIRST_PR_COMMENT: > + Thank you for submitting your first pull request, awesome! 🚀 If you haven't already, please take a moment + to review our [contribution guide](https://docs.orchardcore.net/en/latest/docs/guides/contributing/). This + guide provides helpful information to ensure your contribution aligns with our standards. A core team member + will review your pull request. + FIRST_PR_MERGED_COMMENT: > + Congratulations on your first PR merge! 🎉 Thank you for your contribution! We're looking forward to welcome + other contributions of yours in the future. @all-contributors please add @{{ author }} for code. + STAR_MESSAGE: If you like Orchard Core, please star our repo and join our [community channels ](https://github.com/OrchardCMS/OrchardCore/?tab=readme-ov-file#get-in-touch) diff --git a/.github/workflows/issue_metrics.yml b/.github/workflows/issue_metrics.yml new file mode 100644 index 00000000000..4ebbef489b6 --- /dev/null +++ b/.github/workflows/issue_metrics.yml @@ -0,0 +1,81 @@ +name: Monthly Issue and Pull Request Metrics +on: + workflow_dispatch: + schedule: + # Run on the first day of every month at 2:19 AM UTC. + - cron: '19 2 1 * *' + +permissions: + issues: write + pull-requests: read + +jobs: + publish-issue-metrics: + name: Generate Issue and Pull Request Metrics + runs-on: ubuntu-latest + steps: + - name: Get Dates For Last Month + shell: pwsh + run: | + # Calculate the first day of the previous month. + $firstDay = (Get-Date).AddMonths(-1).ToString("yyyy-MM-01") + + # Calculate the last day of the previous month. + $lastDay = (Get-Date $firstDay).AddMonths(1).AddDays(-1).ToString("yyyy-MM-dd") + + # Set an environment variable with the date range. + Write-Output "$firstDay..$lastDay" + Write-Output "LAST_MONTH=$firstDay..$lastDay" >> $env:GITHUB_ENV + + - name: Compute Issue Metrics + uses: github/issue-metrics@v2 + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SEARCH_QUERY: 'repo:OrchardCMS/OrchardCore is:issue created:${{ env.LAST_MONTH }} -reason:"not planned" -label:"community metrics"' + HIDE_TIME_TO_ANSWER: true + + - name: Rename Issue Metrics File + shell: pwsh + run: | + # Renaming the file wouldn't work since other scripts will be denied access to it for some reason. + Add-Content -Path ./community_metrics.md -Value (Get-Content -Path ./issue_metrics.md -Raw) + + - name: Compute Pull Request Metrics + uses: github/issue-metrics@v2 + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SEARCH_QUERY: 'repo:OrchardCMS/OrchardCore is:pr created:${{ env.LAST_MONTH }} -label:dontmerge -label:notready -is:draft' + HIDE_TIME_TO_ANSWER: true + + - name: Concatenate Issue and Pull Request Metrics + shell: pwsh + run: | + $content = (Get-Content -Path ./issue_metrics.md -Raw) -replace '# Issue Metrics', '# Pull Request Metrics' + Add-Content -Path ./community_metrics.md -Value ([Environment]::NewLine + $content) + + - name: Compute Q&A Discussion Request Metrics + uses: github/issue-metrics@v2 + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SEARCH_QUERY: 'repo:OrchardCMS/OrchardCore type:discussions created:${{ env.LAST_MONTH }} category:Q&A' + HIDE_TIME_TO_CLOSE: true + + - name: Concatenate Issue/PR and Discussion Metrics + shell: pwsh + run: | + $content = (Get-Content -Path ./issue_metrics.md -Raw) -replace '# Issue Metrics', '# Discussion Metrics' + Add-Content -Path ./community_metrics.md -Value ([Environment]::NewLine + $content) + + - name: Display Issue Metrics in Summary + shell: pwsh + run: | + Get-Content ./community_metrics.md >> $env:GITHUB_STEP_SUMMARY + + - name: Create Issue + # v4.0.1 + uses: peter-evans/create-issue-from-file@433e51abf769039ee20ba1293a088ca19d573b7f + with: + title: Monthly community metrics report for ${{ env.LAST_MONTH }} + token: ${{ secrets.GITHUB_TOKEN }} + content-filepath: ./community_metrics.md + labels: community metrics diff --git a/.github/workflows/mac_unit_test_ci.yml b/.github/workflows/mac_unit_test_ci.yml index 71e5c3c40ad..a915d0d2be5 100644 --- a/.github/workflows/mac_unit_test_ci.yml +++ b/.github/workflows/mac_unit_test_ci.yml @@ -13,5 +13,5 @@ jobs: - uses: actions/checkout@v4 - name: Build and test run: | - dotnet build -c Release + dotnet build -c Release -warnaserror /p:TreatWarningsAsErrors=true /p:RunAnalyzers=true dotnet test -c Release --no-restore --no-build ./test/OrchardCore.Tests/OrchardCore.Tests.csproj diff --git a/.github/workflows/main_ci.yml b/.github/workflows/main_ci.yml index 26af91e7515..0da6626d638 100644 --- a/.github/workflows/main_ci.yml +++ b/.github/workflows/main_ci.yml @@ -27,7 +27,7 @@ jobs: dotnet-version: '8.0.x' - name: Build run: | - dotnet build -c Release + dotnet build -c Release -warnaserror /p:TreatWarningsAsErrors=true /p:RunAnalyzers=true - name: Unit Tests run: | dotnet test -c Release --no-build ./test/OrchardCore.Tests/OrchardCore.Tests.csproj diff --git a/.github/workflows/pr_ci.yml b/.github/workflows/pr_ci.yml index be7f5702dc0..4e645136ff5 100644 --- a/.github/workflows/pr_ci.yml +++ b/.github/workflows/pr_ci.yml @@ -26,7 +26,7 @@ jobs: dotnet-version: '8.0.x' - name: Build run: | - dotnet build -c Release + dotnet build -c Release -warnaserror /p:TreatWarningsAsErrors=true /p:RunAnalyzers=true - name: Unit Tests run: | dotnet test -c Release --no-build ./test/OrchardCore.Tests/OrchardCore.Tests.csproj diff --git a/.github/workflows/preview_ci.yml b/.github/workflows/preview_ci.yml index fbfa1d9b46d..cc7910525ef 100644 --- a/.github/workflows/preview_ci.yml +++ b/.github/workflows/preview_ci.yml @@ -35,7 +35,7 @@ jobs: - name: Build if: steps.check-publish.outputs.should-publish == 'true' run: | - dotnet build -c Release + dotnet build -c Release -warnaserror /p:TreatWarningsAsErrors=true /p:RunAnalyzers=true - name: Unit Tests if: steps.check-publish.outputs.should-publish == 'true' run: | diff --git a/.github/workflows/release_ci.yml b/.github/workflows/release_ci.yml index 095376e81cb..6b9b440c45f 100644 --- a/.github/workflows/release_ci.yml +++ b/.github/workflows/release_ci.yml @@ -41,7 +41,7 @@ jobs: run: echo "BuildNumber=$(( $GITHUB_RUN_NUMBER + 15471 ))" >> $GITHUB_ENV - name: Build run: | - dotnet build -c Release -p:Version=${{ steps.get_version.outputs.VERSION }} + dotnet build -c Release -warnaserror /p:TreatWarningsAsErrors=true /p:RunAnalyzers=true -p:Version=${{ steps.get_version.outputs.VERSION }} - name: Unit Tests run: | dotnet test -c Release --no-build ./test/OrchardCore.Tests/OrchardCore.Tests.csproj diff --git a/CODE-OF-CONDUCT.md b/CODE-OF-CONDUCT.md index c3705d1fa04..d7d6c3e18e3 100644 --- a/CODE-OF-CONDUCT.md +++ b/CODE-OF-CONDUCT.md @@ -1,4 +1,3 @@ # Code of Conduct -This project has adopted the code of conduct defined by the [Contributor Covenant](http://contributor-covenant.org/) to clarify expected behavior in our community. -For more information see the [.NET Foundation Code of Conduct](http://www.dotnetfoundation.org/code-of-conduct). +See [Contributing to Orchard Core](https://docs.orchardcore.net/en/latest/docs/guides/contributing/) on the documentation site. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 49b2116e169..cfd4da9ec65 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,43 +1,3 @@ # How to contribute -One of the easiest ways to contribute is to participate in discussions on GitHub issues. You can also contribute by submitting pull requests with code changes. - -## General feedback and discussions? - -Start a discussion on the [repository issue tracker](https://github.com/orchardcms/orchardcore/issues). - -## Reporting security issues - -Security issues should be reported privately, via email, to contact@orchardcore.net. - -## Other discussions - -Our team members also monitor other discussion forums: - -* [GitHub Discussions](https://github.com/OrchardCMS/OrchardCore/discussions). - -## Contributing code and content - -We accept fixes and features! Here are some resources to help you get started on how to contribute code or new content. - -* Look at the [documentation](https://docs.orchardcore.net/). -* ["Help wanted" issues](https://github.com/orchardcms/orchardcore/labels/help%20wanted) - these issues are up for grabs. Comment on an issue if you want to create a fix. -* ["Good first issue" issues](https://github.com/orchardcms/orchardcore/labels/good%20first%20issue) - we think these are a good for newcomers. - -### Identifying the scale - -If you would like to contribute, first identify the scale of what you would like to contribute. If it is small (grammar/spelling or a bug fix) feel free to start working on a fix. If you are submitting a feature or substantial code contribution, please discuss it with the team and ensure it follows the roadmap. You might also read these two blogs posts on contributing code: [Open Source Contribution Etiquette](http://tirania.org/blog/archive/2010/Dec-31.html) by Miguel de Icaza and [Don't "Push" Your Pull Requests](https://www.igvita.com/2011/12/19/dont-push-your-pull-requests/) by Ilya Grigorik. All code submissions will be rigorously reviewed and tested by the team, and only those that meet an extremely high bar for both quality and design/roadmap appropriateness will be merged into the source. - -### Submitting a pull request - -You will need to sign a [Contributor License Agreement](https://cla.dotnetfoundation.org/) when submitting your pull request. To complete the Contributor License Agreement (CLA), you will need to follow the instructions provided by the CLA bot when you send the pull request. This needs to only be done once for any .NET Foundation OSS project. - -If you don't know what a pull request is read this article: https://help.github.com/articles/using-pull-requests. Make sure the repository can build and all tests pass. Familiarize yourself with the project workflow and our coding conventions. The coding, style, and general engineering guidelines are published on the [Engineering guidelines](https://github.com/dotnet/aspnetcore/wiki/Engineering-guidelines) page. - -### Feedback - -Your pull request will now go through extensive checks by the subject matter experts on our team. Please be patient; we have hundreds of pull requests across all of our repositories. Update your pull request according to feedback until it is approved by one of the ASP.NET team members. After that, one of our team members may adjust the branch you merge into based on the expected release schedule. - -## Code of conduct - -See [CODE-OF-CONDUCT.md](./CODE-OF-CONDUCT.md) +See [Contributing to Orchard Core](https://docs.orchardcore.net/en/latest/docs/guides/contributing/) on the documentation site. \ No newline at end of file diff --git a/Directory.Build.props b/Directory.Build.props index 235d562dc61..735e9c009c9 100644 --- a/Directory.Build.props +++ b/Directory.Build.props @@ -33,7 +33,7 @@ $(NoWarn);CA1200 - + $(NoWarn);CA1711 @@ -54,7 +54,7 @@ $(NoWarn);CA1727 - + $(NoWarn);CA1861 diff --git a/Dockerfile b/Dockerfile index 85b899d1c23..7adafe714ea 100644 --- a/Dockerfile +++ b/Dockerfile @@ -7,7 +7,9 @@ WORKDIR /app # Copy and build COPY ./src /app -RUN dotnet publish /app/OrchardCore.Cms.Web -c Release -o ./build/release --framework net8.0 +COPY Directory.Build.props / + +RUN dotnet publish /app/OrchardCore.Cms.Web -c Release -o ./build/release --framework net8.0 /p:RunAnalyzers=false # Build runtime image FROM mcr.microsoft.com/dotnet/aspnet:8.0-nanoserver-1809 AS build_windows diff --git a/OrchardCore.sln b/OrchardCore.sln index 0cf0422cf87..71f5867318a 100644 --- a/OrchardCore.sln +++ b/OrchardCore.sln @@ -500,6 +500,8 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OrchardCore.Notifications.C EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OrchardCore.Notifications", "src\OrchardCore.Modules\OrchardCore.Notifications\OrchardCore.Notifications.csproj", "{19594A96-A033-4820-820B-C6186D00D507}" EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OrchardCore.HealthChecks.Abstractions", "src\OrchardCore\OrchardCore.HealthChecks.Abstractions\OrchardCore.HealthChecks.Abstractions.csproj", "{91CED599-45B1-474D-A7F2-231BF857A5F2}" +EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OrchardCore.Seo.Abstractions", "src\OrchardCore\OrchardCore.Seo.Abstractions\OrchardCore.Seo.Abstractions.csproj", "{C61CC748-39BD-4900-9FEE-A2483259573D}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OrchardCore.Sms.Abstractions", "src\OrchardCore\OrchardCore.Sms.Abstractions\OrchardCore.Sms.Abstractions.csproj", "{2D93F509-1FB3-4E22-92F0-588D0EFBA921}" @@ -1334,6 +1336,10 @@ Global {19594A96-A033-4820-820B-C6186D00D507}.Debug|Any CPU.Build.0 = Debug|Any CPU {19594A96-A033-4820-820B-C6186D00D507}.Release|Any CPU.ActiveCfg = Release|Any CPU {19594A96-A033-4820-820B-C6186D00D507}.Release|Any CPU.Build.0 = Release|Any CPU + {91CED599-45B1-474D-A7F2-231BF857A5F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {91CED599-45B1-474D-A7F2-231BF857A5F2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {91CED599-45B1-474D-A7F2-231BF857A5F2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {91CED599-45B1-474D-A7F2-231BF857A5F2}.Release|Any CPU.Build.0 = Release|Any CPU {C61CC748-39BD-4900-9FEE-A2483259573D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {C61CC748-39BD-4900-9FEE-A2483259573D}.Debug|Any CPU.Build.0 = Debug|Any CPU {C61CC748-39BD-4900-9FEE-A2483259573D}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -1605,6 +1611,7 @@ Global {307AA9CB-D62E-4E30-B715-53E3BF535D94} = {F23AC6C2-DE44-4699-999D-3C478EF3D691} {2A6E7DF9-E417-42F8-94F7-0060E252E4D6} = {F23AC6C2-DE44-4699-999D-3C478EF3D691} {19594A96-A033-4820-820B-C6186D00D507} = {A066395F-6F73-45DC-B5A6-B4E306110DCE} + {91CED599-45B1-474D-A7F2-231BF857A5F2} = {F23AC6C2-DE44-4699-999D-3C478EF3D691} {C61CC748-39BD-4900-9FEE-A2483259573D} = {F23AC6C2-DE44-4699-999D-3C478EF3D691} {2D93F509-1FB3-4E22-92F0-588D0EFBA921} = {F23AC6C2-DE44-4699-999D-3C478EF3D691} {CBF6DB53-FD0C-47F8-9E60-A1D247ACFD05} = {A066395F-6F73-45DC-B5A6-B4E306110DCE} diff --git a/README.md b/README.md index e8d7ca49416..0373d72e22b 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,12 @@ # Orchard Core +Orchard Core is an open-source, modular, multi-tenant application framework and CMS for ASP.NET Core. + Orchard Core consists of two distinct projects: - __Orchard Core Framework__: An application framework for building modular, multi-tenant applications on ASP.NET Core. - __Orchard Core CMS__: A Web Content Management System (CMS) built on top of the Orchard Core Framework. -[![Join the chat at https://gitter.im/OrchardCMS/OrchardCore](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/OrchardCMS/OrchardCore?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) [![BSD-3-Clause License](https://img.shields.io/badge/license-BSD--3--Clause-blue.svg)](LICENSE) [![Documentation](https://readthedocs.org/projects/orchardcore/badge/)](https://docs.orchardcore.net/) [![Crowdin](https://badges.crowdin.net/orchard-core/localized.svg)](https://crowdin.com/project/orchard-core) @@ -22,9 +23,7 @@ Nightly (`main`): [![Build status](https://github.com/OrchardCMS/OrchardCore/actions/workflows/preview_ci.yml/badge.svg)](https://github.com/OrchardCMS/OrchardCore/actions?query=workflow%3A%22Preview+-+CI%22) [![Cloudsmith](https://api-prd.cloudsmith.io/badges/version/orchardcore/preview/nuget/OrchardCore.Application.Cms.Targets/latest/x/?render=true&badge_token=gAAAAABey9hKFD_C-ZIpLvayS3HDsIjIorQluDs53KjIdlxoDz6Ntt1TzvMNJp7a_UWvQbsfN5nS7_0IbxCyqHZsjhmZP6cBkKforo-NqwrH5-E6QCrJ3D8%3D)](https://cloudsmith.io/~orchardcore/repos/preview/packages/detail/nuget/OrchardCore.Application.Cms.Targets/latest/) -## Status - -### 1.8.2 +## Project Status: v1.8.2 The software is production-ready, and capable of serving large mission-critical applications as well, and we're not aware of any fundamental bugs or missing features we deem crucial. Orchard Core continues to evolve, with each version bringing new improvements, and keeping up with the cutting-edge of .NET. @@ -34,15 +33,7 @@ See the [issue milestones](https://github.com/OrchardCMS/OrchardCore/milestones) ## Getting Started and Documentation -The documentation can be accessed under . See [the getting started docs](https://docs.orchardcore.net/en/latest/docs/getting-started/) on how to start using Orchard Core. - -You can also run Orchard Core from Docker: - -``` -docker run --name orchardcms -p 8080:80 orchardproject/orchardcore-cms-linux:latest -``` - -Docker images and parameters can be found at . See [our Docker documentation](https://docs.orchardcore.net/en/latest/docs/topics/docker/) for more details, especially if you're new to Docker. +The documentation can be accessed under . See the homepage for an overview, and [the getting started docs](https://docs.orchardcore.net/en/latest/docs/getting-started/) on how to start building apps with Orchard Core. If you'd just like to test drive Orchard Core as a user, check out [Test drive Orchard Core](https://docs.orchardcore.net/en/latest/docs/getting-started/test-drive-orchard-core/). ## Help and Support @@ -50,14 +41,16 @@ Do you need some help with Orchard Core? Don't worry, there are ways to get help - Did you find a bug or have a feature request? Open an issue [in the issue tracker](https://github.com/OrchardCMS/OrchardCore/issues). - Do you have a question about how to do something with Orchard Core, or would like a second opinion on your code? Open [a discussion](https://github.com/OrchardCMS/OrchardCore/discussions). +- Do you want to chat with other community members? Check out [our Discord server](https://discord.gg/s3e2HtyPZc) and [Gitter chatroom](https://gitter.im/OrchardCMS/OrchardCore]). ## Get in Touch - [X (Twitter)](https://twitter.com/orchardcms) - [LinkedIn](https://www.linkedin.com/groups/13605669/) -- [Meta (Facebook)](https://www.facebook.com/OrchardCore) +- [Facebook](https://www.facebook.com/OrchardCore) +- Please report security issues privately, via email, to [contact@orchardcore.net](mailto:contact@orchardcore.net). -## Local Communities +### Local Communities 中文资源 @@ -67,34 +60,19 @@ Do you need some help with Orchard Core? Don't worry, there are ways to get help It's great that you're thinking about contributing to Orchard Core! You'd join [our wonderful community of contributors](https://docs.orchardcore.net/en/latest/docs/community/). -First, clone the repository using the command `git clone https://github.com/OrchardCMS/OrchardCore.git` and checkout the `main` branch. Then, you have multiple options, see below. And when you're ready, head over to [our contribution guide](CONTRIBUTING.md). - -### Command Line - -1. Install the latest version of the .NET SDK from this page: . -2. Navigate to `./OrchardCore/src/OrchardCore.Cms.Web`. -3. Run `dotnet run`. -4. Open the `http://localhost:5000` URL in your browser. - -### Visual Studio - -1. Download Visual Studio 2022 (v17.8+) from . -2. Launch the solution by clicking on `OrchardCore.sln`. Give Visual Studio time to restore all missing Nuget packages. -3. Ensure `OrchardCore.Cms.Web` is set as the startup project. Then run the app. +Check out the docs [on contributing to Orchard Core](https://docs.orchardcore.net/en/latest/docs/guides/contributing/). ## Preview Package Feed [![Hosted By: Cloudsmith](https://img.shields.io/badge/OSS%20hosting%20by-cloudsmith-blue?logo=cloudsmith&style=for-the-badge)](https://cloudsmith.com) -NuGet package repository hosting for the preview feed is graciously provided by [Cloudsmith](https://cloudsmith.com). +NuGet package repository hosting for the preview feed is graciously provided by [Cloudsmith](https://cloudsmith.com). Check out [the docs on using the preview package feed](https://docs.orchardcore.net/en/latest/docs/getting-started/preview-package-source/). -Cloudsmith is the only fully hosted, cloud-native, universal package management solution, that -enables your organization to create, store, and share packages in any format, to any place, with total -confidence. +Cloudsmith is the only fully hosted, cloud-native, universal package management solution, that enables your organization to create, store, and share packages in any format, to any place, with total confidence. ## Code of Conduct -See [our Code of Conduct](./CODE-OF-CONDUCT.md). +See [our Code of Conduct](https://docs.orchardcore.net/en/latest/docs/guides/contributing/#code-of-conduct). ## .NET Foundation diff --git a/SECURITY.md b/SECURITY.md index ee6d4472a71..b109ca841ef 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -2,13 +2,8 @@ ## Supported Versions -| Version | Supported | -| ------- | ------------------ | -| 1.0 | :x: | -| 1.1 | :x: | -| 1.2 | :x: | -| 1.3 | :white_check_mark: | +We primarily support the latest version only. For serious security issues, we'll patch several older versions too. ## Reporting a Vulnerability -Send an email to sebros@microsoft.com +Please report security issues privately, via email, to [contact@orchardcore.net](mailto:contact@orchardcore.net). diff --git a/gulpfile.js b/gulpfile.js index c763738fa3a..58cc3b085c3 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -112,11 +112,19 @@ function getAssetGroups() { } function resolveAssetGroupPaths(assetGroup, assetManifestPath) { - assetGroup.manifestPath = assetManifestPath; - assetGroup.basePath = path.dirname(assetManifestPath); - assetGroup.inputPaths = assetGroup.inputs.map(function (inputPath) { + assetGroup.manifestPath = assetManifestPath.replace(/\\/g, '/'); + assetGroup.basePath = path.dirname(assetGroup.manifestPath); + var inputPaths = assetGroup.inputs.map(function (inputPath) { return path.resolve(path.join(assetGroup.basePath, inputPath)).replace(/\\/g, '/'); }); + + // For wildcard input paths also sortthem to ensure file concatenation is consistent. + if (inputPaths.some(path => path.includes('*'))) { + inputPaths = glob.sync(inputPaths, {}).sort(); + } + + assetGroup.inputPaths = inputPaths; + assetGroup.watchPaths = []; if (!!assetGroup.watch) { assetGroup.watchPaths = assetGroup.watch.map(function (watchPath) { @@ -163,7 +171,7 @@ function buildCssPipeline(assetGroup, doConcat, doRebuild) { if (ext !== ".scss" && ext !== ".less" && ext !== ".css") throw "Input file '" + inputPath + "' is not of a valid type for output file '" + assetGroup.outputPath + "'."; }); - var generateSourceMaps = assetGroup.hasOwnProperty("generateSourceMaps") ? assetGroup.generateSourceMaps : true; + var generateSourceMaps = assetGroup.hasOwnProperty("generateSourceMaps") ? assetGroup.generateSourceMaps : false; var generateRTL = assetGroup.hasOwnProperty("generateRTL") ? assetGroup.generateRTL : false; var containsLessOrScss = assetGroup.inputPaths.some(function (inputPath) { var ext = path.extname(inputPath).toLowerCase(); @@ -203,7 +211,7 @@ function buildCssPipeline(assetGroup, doConcat, doRebuild) { .pipe(rename({ suffix: ".min" })) - .pipe(eol()) + .pipe(eol('\n')) .pipe(gulp.dest(assetGroup.outputDir)); // Uncomment to copy assets to wwwroot //.pipe(gulp.dest(assetGroup.webroot)); @@ -224,7 +232,7 @@ function buildCssPipeline(assetGroup, doConcat, doRebuild) { .pipe(gulpif(doConcat, concat(assetGroup.outputFileName))) .pipe(gulpif(generateRTL, postcss([rtl()]))) .pipe(gulpif(generateSourceMaps, sourcemaps.write())) - .pipe(eol()) + .pipe(eol('\n')) .pipe(gulp.dest(assetGroup.outputDir)); // Uncomment to copy assets to wwwroot //.pipe(gulp.dest(assetGroup.webroot)); @@ -237,7 +245,7 @@ function buildJsPipeline(assetGroup, doConcat, doRebuild) { if (ext !== ".ts" && ext !== ".js") throw "Input file '" + inputPath + "' is not of a valid type for output file '" + assetGroup.outputPath + "'."; }); - var generateSourceMaps = assetGroup.hasOwnProperty("generateSourceMaps") ? assetGroup.generateSourceMaps : true; + var generateSourceMaps = assetGroup.hasOwnProperty("generateSourceMaps") ? assetGroup.generateSourceMaps : false; // Source maps are useless if neither concatenating nor transforming. if ((!doConcat || assetGroup.inputPaths.length < 2) && !assetGroup.inputPaths.some(function (inputPath) { return path.extname(inputPath).toLowerCase() === ".ts"; })) generateSourceMaps = false; @@ -292,7 +300,7 @@ function buildJsPipeline(assetGroup, doConcat, doRebuild) { .pipe(rename({ suffix: ".min" })) - .pipe(eol()) + .pipe(eol('\n')) .pipe(gulp.dest(assetGroup.outputDir)) // Uncomment to copy assets to wwwroot //.pipe(gulp.dest(assetGroup.webroot)); diff --git a/mkdocs.yml b/mkdocs.yml index 7621f1b35f7..44dd824117e 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -80,12 +80,16 @@ plugins: 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*" + - redirects: + redirect_maps: + 'docs/topics/docs-contributions/README.md': 'docs/guides/contributing/contributing-documentation.md' # Page tree nav: - About Orchard Core: README.md - Getting started: - Create a CMS Web application: docs/getting-started/README.md + - Test drive Orchard Core: docs/getting-started/test-drive-orchard-core.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 @@ -112,6 +116,11 @@ nav: - Microsoft Entra ID (Azure AD) integration: docs/guides/microsoft-entra-id-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 + - Contributing: + - Contributing to Orchard Core: docs/guides/contributing/README.md + - Contributing code: docs/guides/contributing/contributing-code.md + - Contributing documentation: docs/guides/contributing/contributing-documentation.md + - Reviewing pull requests: docs/guides/contributing/reviewing-pull-requests.md - Gulp pipeline: docs/guides/gulp-pipeline/README.md - Key Topics: - Manage your Content: docs/topics/content-management/README.md @@ -125,7 +134,6 @@ nav: - 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 - Using local NuGet packages: docs/topics/local-nuget-packages/README.md diff --git a/package-lock.json b/package-lock.json index 9277bc3bf35..2835b668f0a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -13,7 +13,7 @@ "all-contributors-cli": "^6.26.1", "child_process": "^1.0.2", "es6-promise": "4.2.8", - "glob": "^8.0.3", + "glob": "^10.3.12", "graceful-fs": "4.2.11", "gulp": "^4.0.2", "gulp-babel": "8.0.0", @@ -1827,6 +1827,102 @@ "node": ">=0.10.0" } }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, "node_modules/@jridgewell/gen-mapping": { "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", @@ -1900,6 +1996,16 @@ "semver": "bin/semver.js" } }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, "node_modules/acorn": { "version": "6.4.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", @@ -3283,6 +3389,12 @@ "node": ">=0.10.0" } }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, "node_modules/electron-to-chromium": { "version": "1.4.502", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.502.tgz", @@ -3849,6 +3961,93 @@ "node": ">=0.10.0" } }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/foreground-child/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, "node_modules/fork-stream": { "version": "0.0.4", "resolved": "https://registry.npmjs.org/fork-stream/-/fork-stream-0.0.4.tgz", @@ -3984,19 +4183,22 @@ } }, "node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "version": "10.3.12", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz", + "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==", "dev": true, "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.6", + "minimatch": "^9.0.1", + "minipass": "^7.0.4", + "path-scurry": "^1.10.2" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">=12" + "node": ">=16 || 14 >=14.17" }, "funding": { "url": "https://github.com/sponsors/isaacs" @@ -6069,6 +6271,24 @@ "node": ">=0.10.0" } }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, "node_modules/js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", @@ -6797,15 +7017,18 @@ } }, "node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, "dependencies": { "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=10" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/minimist": { @@ -6814,6 +7037,15 @@ "integrity": "sha512-iotkTvxc+TwOm5Ieim8VnSNvCDjCK9S8G3scJ50ZthspSxa7jx50jkhYduuAtAjvfDUwSgOwf8+If99AlOEhyw==", "dev": true }, + "node_modules/minipass": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, "node_modules/mixin-deep": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", @@ -7589,6 +7821,31 @@ "node": ">=0.10.0" } }, + "node_modules/path-scurry": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz", + "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, "node_modules/path-type": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", @@ -9191,6 +9448,42 @@ "node": ">=8" } }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/string-width/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", @@ -9300,6 +9593,28 @@ "node": ">=4" } }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, "node_modules/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", @@ -10119,6 +10434,78 @@ "node": ">=8" } }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/wrap-ansi/node_modules/ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", diff --git a/package.json b/package.json index 910b78dd12a..c650a0ea5cc 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "all-contributors-cli": "^6.26.1", "child_process": "^1.0.2", "es6-promise": "4.2.8", - "glob": "^8.0.3", + "glob": "^10.3.12", "graceful-fs": "4.2.11", "gulp": "^4.0.2", "gulp-babel": "8.0.0", diff --git a/src/OrchardCore.Build/Dependencies.props b/src/OrchardCore.Build/Dependencies.props index da6a25c9f18..2935a034fda 100644 --- a/src/OrchardCore.Build/Dependencies.props +++ b/src/OrchardCore.Build/Dependencies.props @@ -14,14 +14,14 @@ - - + + - + @@ -30,21 +30,21 @@ - + - + - + - + - + diff --git a/src/OrchardCore.Build/OrchardCore.Commons.props b/src/OrchardCore.Build/OrchardCore.Commons.props index 1ddaaab5712..68598319ed7 100644 --- a/src/OrchardCore.Build/OrchardCore.Commons.props +++ b/src/OrchardCore.Build/OrchardCore.Commons.props @@ -7,7 +7,6 @@ 1.9.0 preview $(VersionSuffix)-$(BuildNumber) - true 612,618 true $(NoWarn);CS1591 diff --git a/src/OrchardCore.Cms.Web/OrchardCore.Cms.Web.csproj b/src/OrchardCore.Cms.Web/OrchardCore.Cms.Web.csproj index a5ac7fee774..8e43cc43852 100644 --- a/src/OrchardCore.Cms.Web/OrchardCore.Cms.Web.csproj +++ b/src/OrchardCore.Cms.Web/OrchardCore.Cms.Web.csproj @@ -7,7 +7,6 @@ $(CommonTargetFrameworks) - true 612,618 InProcess false diff --git a/src/OrchardCore.Cms.Web/appsettings.json b/src/OrchardCore.Cms.Web/appsettings.json index bc2487e454a..77a207c80da 100644 --- a/src/OrchardCore.Cms.Web/appsettings.json +++ b/src/OrchardCore.Cms.Web/appsettings.json @@ -224,7 +224,8 @@ // "DisableNotificationHtmlBodySanitizer": false //}, //"OrchardCore_HealthChecks": { - // "Url": "/health/live" + // "Url": "/health/live", + // "ShowDetails": true //}, //"OrchardCore_Email_Smtp": { // "DefaultSender": "", diff --git a/src/OrchardCore.Modules/OrchardCore.Admin/Drivers/AdminSiteSettingsDisplayDriver.cs b/src/OrchardCore.Modules/OrchardCore.Admin/Drivers/AdminSiteSettingsDisplayDriver.cs index 81b9665bf23..ae16daa2e1d 100644 --- a/src/OrchardCore.Modules/OrchardCore.Admin/Drivers/AdminSiteSettingsDisplayDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.Admin/Drivers/AdminSiteSettingsDisplayDriver.cs @@ -43,7 +43,7 @@ public override async Task EditAsync(AdminSettings settings, Bui }).Location("Content:3").OnGroup(GroupId); } - public override async Task UpdateAsync(AdminSettings settings, BuildEditorContext context) + public override async Task UpdateAsync(AdminSettings settings, UpdateEditorContext context) { var user = _httpContextAccessor.HttpContext?.User; diff --git a/src/OrchardCore.Modules/OrchardCore.AdminDashboard/Assets.json b/src/OrchardCore.Modules/OrchardCore.AdminDashboard/Assets.json index 6795207610b..7e1da2c181b 100644 --- a/src/OrchardCore.Modules/OrchardCore.AdminDashboard/Assets.json +++ b/src/OrchardCore.Modules/OrchardCore.AdminDashboard/Assets.json @@ -1,7 +1,6 @@ [ { - "generateSourceMaps": false, - "inputs": [ + "inputs": [ "Assets/scss/dashboard.scss" ], "output": "wwwroot/Styles/dashboard.css" diff --git a/src/OrchardCore.Modules/OrchardCore.AdminMenu/AdminNodes/LinkAdminNodeDriver.cs b/src/OrchardCore.Modules/OrchardCore.AdminMenu/AdminNodes/LinkAdminNodeDriver.cs index 8b46ca2bf06..780cdce97e4 100644 --- a/src/OrchardCore.Modules/OrchardCore.AdminMenu/AdminNodes/LinkAdminNodeDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.AdminMenu/AdminNodes/LinkAdminNodeDriver.cs @@ -56,19 +56,18 @@ public override IDisplayResult Edit(LinkAdminNode treeNode) public override async Task UpdateAsync(LinkAdminNode treeNode, IUpdateModel updater) { var model = new LinkAdminNodeViewModel(); - if (await updater.TryUpdateModelAsync(model, Prefix, x => x.LinkUrl, x => x.LinkText, x => x.IconClass, x => x.SelectedPermissionNames)) - { - treeNode.LinkText = model.LinkText; - treeNode.LinkUrl = model.LinkUrl; - treeNode.IconClass = model.IconClass; + await updater.TryUpdateModelAsync(model, Prefix, x => x.LinkUrl, x => x.LinkText, x => x.IconClass, x => x.SelectedPermissionNames); - var selectedPermissions = (model.SelectedPermissionNames == null ? [] : model.SelectedPermissionNames.Split(',', StringSplitOptions.RemoveEmptyEntries)); + treeNode.LinkText = model.LinkText; + treeNode.LinkUrl = model.LinkUrl; + treeNode.IconClass = model.IconClass; - var permissions = await _adminMenuPermissionService.GetPermissionsAsync(); - treeNode.PermissionNames = permissions - .Where(p => selectedPermissions.Contains(p.Name)) - .Select(p => p.Name).ToArray(); - } + var selectedPermissions = (model.SelectedPermissionNames == null ? [] : model.SelectedPermissionNames.Split(',', StringSplitOptions.RemoveEmptyEntries)); + + var permissions = await _adminMenuPermissionService.GetPermissionsAsync(); + treeNode.PermissionNames = permissions + .Where(p => selectedPermissions.Contains(p.Name)) + .Select(p => p.Name).ToArray(); return Edit(treeNode); } diff --git a/src/OrchardCore.Modules/OrchardCore.AdminMenu/AdminNodes/PlaceholderAdminNodeDriver.cs b/src/OrchardCore.Modules/OrchardCore.AdminMenu/AdminNodes/PlaceholderAdminNodeDriver.cs index 9976d19a583..0cfaa3053ce 100644 --- a/src/OrchardCore.Modules/OrchardCore.AdminMenu/AdminNodes/PlaceholderAdminNodeDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.AdminMenu/AdminNodes/PlaceholderAdminNodeDriver.cs @@ -55,17 +55,16 @@ public override IDisplayResult Edit(PlaceholderAdminNode treeNode) public override async Task UpdateAsync(PlaceholderAdminNode treeNode, IUpdateModel updater) { var model = new PlaceholderAdminNodeViewModel(); - if (await updater.TryUpdateModelAsync(model, Prefix, x => x.LinkText, x => x.IconClass, x => x.SelectedPermissionNames)) - { - treeNode.LinkText = model.LinkText; - treeNode.IconClass = model.IconClass; + await updater.TryUpdateModelAsync(model, Prefix, x => x.LinkText, x => x.IconClass, x => x.SelectedPermissionNames); - var selectedPermissions = (model.SelectedPermissionNames == null ? Array.Empty() : model.SelectedPermissionNames.Split(',', StringSplitOptions.RemoveEmptyEntries)); - var permissions = await _adminMenuPermissionService.GetPermissionsAsync(); - treeNode.PermissionNames = permissions - .Where(p => selectedPermissions.Contains(p.Name)) - .Select(p => p.Name).ToArray(); - } + treeNode.LinkText = model.LinkText; + treeNode.IconClass = model.IconClass; + + var selectedPermissions = (model.SelectedPermissionNames == null ? Array.Empty() : model.SelectedPermissionNames.Split(',', StringSplitOptions.RemoveEmptyEntries)); + var permissions = await _adminMenuPermissionService.GetPermissionsAsync(); + treeNode.PermissionNames = permissions + .Where(p => selectedPermissions.Contains(p.Name)) + .Select(p => p.Name).ToArray(); return Edit(treeNode); } diff --git a/src/OrchardCore.Modules/OrchardCore.AdminMenu/Assets.json b/src/OrchardCore.Modules/OrchardCore.AdminMenu/Assets.json index 029a1de39a5..8e83bc43b2c 100644 --- a/src/OrchardCore.Modules/OrchardCore.AdminMenu/Assets.json +++ b/src/OrchardCore.Modules/OrchardCore.AdminMenu/Assets.json @@ -1,6 +1,5 @@ [ { - "generateSourceMaps": false, "inputs": [ "Assets/scss/admin-menu-permission-picker.scss" ], @@ -13,14 +12,12 @@ "output": "wwwroot/Scripts/admin-menu-permission-picker.js" }, { - "generateSourceMaps": false, "inputs": [ "Assets/scss/admin-menu.scss" ], "output": "wwwroot/Styles/admin-menu.css" }, { - "generateSourceMaps": false, "inputs": [ "Assets/scss/admin-menu-icon-picker.scss" ], diff --git a/src/OrchardCore.Modules/OrchardCore.AdminMenu/wwwroot/Scripts/admin-menu-icon-picker.js b/src/OrchardCore.Modules/OrchardCore.AdminMenu/wwwroot/Scripts/admin-menu-icon-picker.js index 1a9c903ab08..e7f8509841c 100644 --- a/src/OrchardCore.Modules/OrchardCore.AdminMenu/wwwroot/Scripts/admin-menu-icon-picker.js +++ b/src/OrchardCore.Modules/OrchardCore.AdminMenu/wwwroot/Scripts/admin-menu-icon-picker.js @@ -5424,5 +5424,4 @@ var iconPickerVue = new Vue({ this.iconPickerModal.show(); } } -}); -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImZvbnRhd2Vzb21lLWljb25waWNrZXIuanMiLCJBZG1pbk5vZGVJY29uUGlja2VyLmpzIl0sIm5hbWVzIjpbImUiLCJkZWZpbmUiLCJhbWQiLCJqUXVlcnkiLCJqIiwidWkiLCJ2ZXJzaW9uIiwiciIsInkiLCJNYXRoIiwibWF4IiwieCIsImFicyIsInMiLCJpIiwiZiIsImwiLCJjIiwiYSIsImZuIiwicG9zIiwicSIsInQiLCJwYXJzZUZsb2F0IiwidGVzdCIsIkMiLCJwYXJzZUludCIsImNzcyIsIm5vZGVUeXBlIiwid2lkdGgiLCJoZWlnaHQiLCJvZmZzZXQiLCJ0b3AiLCJsZWZ0IiwiaXNXaW5kb3ciLCJzY3JvbGxUb3AiLCJzY3JvbGxMZWZ0IiwicHJldmVudERlZmF1bHQiLCJwYWdlWSIsInBhZ2VYIiwib3V0ZXJXaWR0aCIsIm91dGVySGVpZ2h0Iiwic2Nyb2xsYmFyV2lkdGgiLCJ1bmRlZmluZWQiLCJjaGlsZHJlbiIsImFwcGVuZCIsIm9mZnNldFdpZHRoIiwiY2xpZW50V2lkdGgiLCJyZW1vdmUiLCJnZXRTY3JvbGxJbmZvIiwiaXNEb2N1bWVudCIsImVsZW1lbnQiLCJzY3JvbGxXaWR0aCIsInNjcm9sbEhlaWdodCIsImdldFdpdGhpbkluZm8iLCJ3aW5kb3ciLCJoIiwib2YiLCJhcHBseSIsImFyZ3VtZW50cyIsImV4dGVuZCIsIm0iLCJwIiwiZCIsInUiLCJUIiwiZyIsImIiLCJ3aXRoaW4iLCJrIiwidyIsImNvbGxpc2lvbiIsInNwbGl0IiwidiIsImF0IiwiZWFjaCIsImxlbmd0aCIsImNvbmNhdCIsImV4ZWMiLCJvIiwibiIsIm15IiwibWFyZ2luTGVmdCIsIm1hcmdpblRvcCIsInRhcmdldFdpZHRoIiwidGFyZ2V0SGVpZ2h0IiwiZWxlbVdpZHRoIiwiZWxlbUhlaWdodCIsImNvbGxpc2lvblBvc2l0aW9uIiwiY29sbGlzaW9uV2lkdGgiLCJjb2xsaXNpb25IZWlnaHQiLCJlbGVtIiwidXNpbmciLCJ0YXJnZXQiLCJob3Jpem9udGFsIiwidmVydGljYWwiLCJpbXBvcnRhbnQiLCJjYWxsIiwiX3RyaWdnZXIiLCJ0cmlnZ2VyIiwidHlwZSIsInBvc2l0aW9uIiwicG9zaXRpb25EYXRhIiwidHJpZ2dlcmVkIiwiZml0IiwiZmxpcCIsImZsaXBmaXQiLCJkb2N1bWVudCIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiY3JlYXRlRWxlbWVudCIsInZpc2liaWxpdHkiLCJib3JkZXIiLCJtYXJnaW4iLCJiYWNrZ3JvdW5kIiwic3R5bGUiLCJhcHBlbmRDaGlsZCIsImRvY3VtZW50RWxlbWVudCIsImluc2VydEJlZm9yZSIsImZpcnN0Q2hpbGQiLCJjc3NUZXh0Iiwic3VwcG9ydCIsIm9mZnNldEZyYWN0aW9ucyIsImlubmVySFRNTCIsInJlbW92ZUNoaWxkIiwiaWNvbnBpY2tlciIsImlzRW1wdHkiLCJpc0VtcHR5T2JqZWN0IiwiaXNFbGVtZW50IiwiaXNTdHJpbmciLCJTdHJpbmciLCJpc0FycmF5IiwiaW5BcnJheSIsInRocm93RXJyb3IiLCJfaWQiLCJfaWRDb3VudGVyIiwiYWRkQ2xhc3MiLCJpY29ucGlja2VyVmFsdWUiLCJvcHRpb25zIiwiZGVmYXVsdE9wdGlvbnMiLCJkYXRhIiwidGVtcGxhdGVzIiwib3JpZ2luYWxQbGFjZW1lbnQiLCJwbGFjZW1lbnQiLCJjb250YWluZXIiLCJpcyIsInBhcmVudCIsImlzRHJvcGRvd25NZW51IiwiaW5wdXQiLCJmaW5kIiwiY29tcG9uZW50IiwiX2NyZWF0ZVBvcG92ZXIiLCJfY3JlYXRlSWNvbnBpY2tlciIsImdldEFjY2VwdEJ1dHRvbiIsIm11c3RBY2NlcHQiLCJpc0lucHV0R3JvdXAiLCJwb3BvdmVyIiwiX2JpbmRFbGVtZW50RXZlbnRzIiwiX2JpbmRXaW5kb3dFdmVudHMiLCJ1cGRhdGUiLCJzZWxlY3RlZCIsImlzSW5saW5lIiwic2hvdyIsInRpdGxlIiwiZGVmYXVsdFZhbHVlIiwiYW5pbWF0aW9uIiwiaGlkZU9uU2VsZWN0Iiwic2hvd0Zvb3RlciIsInNlYXJjaEluRm9vdGVyIiwic2VsZWN0ZWRDdXN0b21DbGFzcyIsImljb25zIiwiZnVsbENsYXNzRm9ybWF0dGVyIiwiaW5wdXRTZWFyY2giLCJmb290ZXIiLCJidXR0b25zIiwic2VhcmNoIiwiaWNvbnBpY2tlckl0ZW0iLCJiYXRjaCIsIkFycmF5IiwicHJvdG90eXBlIiwic2xpY2UiLCJjb25zdHJ1Y3RvciIsImljb25waWNrZXJJbnN0YW5jZSIsImhhc1NlcGFyYXRlZFNlYXJjaElucHV0IiwiaGlkZSIsImNsb25lIiwib24iLCJhdHRyIiwic2VhcmNoVGVybXMiLCJwdXNoIiwiX2lzRXZlbnRJbnNpZGVJY29ucGlja2VyIiwiaGFzQ2xhc3MiLCJwYXJlbnRzIiwiZ2V0U2VhcmNoSW5wdXQiLCJmaWx0ZXIiLCJ2YWwiLCJ0b0xvd2VyQ2FzZSIsImdldCIsImdldENhbmNlbEJ1dHRvbiIsInN0b3BQcm9wYWdhdGlvbiIsImhhc0NvbXBvbmVudCIsInRvZ2dsZSIsImhhc0lucHV0Iiwia2V5Q29kZSIsIl91cGRhdGVGb3JtR3JvdXBTdGF0dXMiLCJnZXRWYWxpZCIsInZhbHVlIiwidXBkYXRlUGxhY2VtZW50IiwiX3VuYmluZEVsZW1lbnRFdmVudHMiLCJvZmYiLCJoYXNDb250YWluZXIiLCJfdW5iaW5kV2luZG93RXZlbnRzIiwicmVtb3ZlQ2xhc3MiLCJfdHlwZW9mIiwiZGlzcGxheSIsInJpZ2h0IiwiYm90dG9tIiwibWF4V2lkdGgiLCJfdXBkYXRlQ29tcG9uZW50cyIsInJlcGxhY2UiLCJodG1sIiwiZ2V0SHRtbCIsInRyaW0iLCJzZXRWYWx1ZSIsInNldFNvdXJjZVZhbHVlIiwiZ2V0U291cmNlVmFsdWUiLCJpc0lucHV0U2VhcmNoIiwiUmVnRXhwIiwibWF0Y2giLCJub3QiLCJzZXRUaW1lb3V0IiwicHJveHkiLCJkZXN0cm95IiwicmVtb3ZlRGF0YSIsImRpc2FibGUiLCJwcm9wIiwiZW5hYmxlIiwiaXNEaXNhYmxlZCIsImljb25QaWNrZXJWdWUiLCJWdWUiLCJlbCIsInRhcmdldElucHV0RmllbGQiLCJ0YXJnZXRJY29uVGFnIiwiaWNvblBpY2tlck1vZGFsIiwibW91bnRlZCIsInNlbGYiLCIkIiwicmVwbGFjZVdpdGgiLCJtZXRob2RzIiwiYm9vdHN0cmFwIiwiTW9kYWwiLCJrZXlib2FyZCJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFHQSxDQUFDLFVBQVNBLENBQUMsRUFBRTtFQUNULElBQUksT0FBT0MsTUFBTSxLQUFLLFVBQVUsSUFBSUEsTUFBTSxDQUFDQyxHQUFHLEVBQUU7SUFDNUNELE1BQU0sQ0FBQyxDQUFFLFFBQVEsQ0FBRSxFQUFFRCxDQUFDLENBQUM7RUFDM0IsQ0FBQyxNQUFNO0lBQ0hBLENBQUMsQ0FBQ0csTUFBTSxDQUFDO0VBQ2I7QUFDSixDQUFDLEVBQUUsVUFBU0MsQ0FBQyxFQUFFO0VBQ1hBLENBQUMsQ0FBQ0MsRUFBRSxHQUFHRCxDQUFDLENBQUNDLEVBQUUsSUFBSSxDQUFDLENBQUM7RUFDakIsSUFBSUwsQ0FBQyxHQUFHSSxDQUFDLENBQUNDLEVBQUUsQ0FBQ0MsT0FBTyxHQUFHLFFBQVE7RUFDL0IsQ0FBQyxZQUFXO0lBQ1IsSUFBSUMsQ0FBQztNQUFFQyxDQUFDLEdBQUdDLElBQUksQ0FBQ0MsR0FBRztNQUFFQyxDQUFDLEdBQUdGLElBQUksQ0FBQ0csR0FBRztNQUFFQyxDQUFDLEdBQUcsbUJBQW1CO01BQUVDLENBQUMsR0FBRyxtQkFBbUI7TUFBRUMsQ0FBQyxHQUFHLHVCQUF1QjtNQUFFQyxDQUFDLEdBQUcsTUFBTTtNQUFFQyxDQUFDLEdBQUcsSUFBSTtNQUFFQyxDQUFDLEdBQUdkLENBQUMsQ0FBQ2UsRUFBRSxDQUFDQyxHQUFHO0lBQ3BKLFNBQVNDLENBQUNBLENBQUNyQixDQUFDLEVBQUVrQixDQUFDLEVBQUVJLENBQUMsRUFBRTtNQUNoQixPQUFPLENBQUVDLFVBQVUsQ0FBQ3ZCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJaUIsQ0FBQyxDQUFDTyxJQUFJLENBQUN4QixDQUFDLENBQUMsQ0FB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SUFBSSxFQUNoQztRQUNJLElBQUksQ0FBQ0EsZUFBZSxHQUFHLElBQUlNLFNBQVMsQ0FBQ0MsS0FBSyxDQUFDSixDQUFDLENBQUMsa0JBQWtCLENBQUMsRUFBRTtVQUM5REssUUFBUSxFQUFFO1FBQ2QsQ0FBQyxDQUFDO01BQ047TUFFQSxJQUFJLENBQUNSLGVBQWUsQ0FBQ2pGLElBQUksQ0FBQyxDQUFDO0lBQy9CO0VBQ0o7QUFDSixDQUFDLENBQUMiLCJmaWxlIjoiYWRtaW4tbWVudS1pY29uLXBpY2tlci5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogRm9udCBBd2Vzb21lIEljb24gUGlja2VyXG4gKiBodHRwczovL2ZhcmJlbG91cy5naXRodWIuaW8vZm9udGF3ZXNvbWUtaWNvbnBpY2tlci9cbiAqXG4gKiBAYXV0aG9yIEphdmkgQWd1aWxhciwgaXRzamF2aS5jb21cbiAqIEBsaWNlbnNlIE1JVCBMaWNlbnNlXG4gKiBAc2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYXJiZWxvdXMvZm9udGF3ZXNvbWUtaWNvbnBpY2tlci9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuXG4oZnVuY3Rpb24oZSkge1xuICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSBcImZ1bmN0aW9uXCIgJiYgZGVmaW5lLmFtZCkge1xuICAgICAgICBkZWZpbmUoWyBcImpxdWVyeVwiIF0sIGUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIGUoalF1ZXJ5KTtcbiAgICB9XG59KShmdW5jdGlvbihqKSB7XG4gICAgai51aSA9IGoudWkgfHwge307XG4gICAgdmFyIGUgPSBqLnVpLnZlcnNpb24gPSBcIjEuMTIuMVwiO1xuICAgIChmdW5jdGlvbigpIHtcbiAgICAgICAgdmFyIHIsIHkgPSBNYXRoLm1heCwgeCA9IE1hdGguYWJzLCBzID0gL2xlZnR8Y2VudGVyfHJpZ2h0LywgaSA9IC90b3B8Y2VudGVyfGJvdHRvbS8sIGYgPSAvW1xcK1xcLV1cXGQrKFxcLltcXGRdKyk/JT8vLCBsID0gL15cXHcrLywgYyA9IC8lJC8sIGEgPSBqLmZuLnBvcztcbiAgICAgICAgZnVuY3Rpb24gcShlLCBhLCB0KSB7XG4gICAgICAgICAgICByZXR1cm4gWyBwYXJzZUZsb2F0KGVbMF0pICogKGMudGVzdChlWzBdKSA/IGEgLyAxMDAgOiAxKSwgcGFyc2VGbG9hdChlWzFdKSAqIChjLnRlc3QoZVsxXSkgPyB0IC8gMTAwIDogMSkgXTtcbiAgICAgICAgfVxuICAgICAgICBmdW5jdGlvbiBDKGUsIGEpIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUludChqLmNzcyhlLCBhKSwgMTApIHx8IDA7XG4gICAgICAgIH1cbiAgICAgICAgZnVuY3Rpb24gdChlKSB7XG4gICAgICAgICAgICB2YXIgYSA9IGVbMF07XG4gICAgICAgICAgICBpZiAoYS5ub2RlVHlwZSA9PT0gOSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiBlLndpZHRoKCksXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogZS5oZWlnaHQoKSxcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0b3A6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICBsZWZ0OiAwXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGouaXNXaW5kb3coYSkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogZS53aWR0aCgpLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGUuaGVpZ2h0KCksXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiBlLnNjcm9sbFRvcCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogZS5zY3JvbGxMZWZ0KClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoYS5wcmV2ZW50RGVmYXVsdCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHdpZHRoOiAwLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IDAsXG4gICAgICAgICAgICAgICAgICAgIG9mZnNldDoge1xuICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiBhLnBhZ2VZLFxuICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogYS5wYWdlWFxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgd2lkdGg6IGUub3V0ZXJXaWR0aCgpLFxuICAgICAgICAgICAgICAgIGhlaWdodDogZS5vdXRlckhlaWdodCgpLFxuICAgICAgICAgICAgICAgIG9mZnNldDogZS5vZmZzZXQoKVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICBqLnBvcyA9IHtcbiAgICAgICAgICAgIHNjcm9sbGJhcldpZHRoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICBpZiAociAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiByO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB2YXIgZSwgYSwgdCA9IGooXCI8ZGl2IFwiICsgXCJzdHlsZT0nZGlzcGxheTpibG9jaztwb3NpdGlvbjphYnNvbHV0ZTt3aWR0aDo1MHB4O2hlaWdodDo1MHB4O292ZXJmbG93OmhpZGRlbjsnPlwiICsgXCI8ZGl2IHN0eWxlPSdoZWlnaHQ6MTAwcHg7d2lkdGg6YXV0bzsnPjwvZGl2PjwvZGl2PlwiKSwgcyA9IHQuY2hpbGRyZW4oKVswXTtcbiAgICAgICAgICAgICAgICBqKFwiYm9keVwiKS5hcHBlbmQodCk7XG4gICAgICAgICAgICAgICAgZSA9IHMub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICAgICAgdC5jc3MoXCJvdmVyZmxvd1wiLCBcInNjcm9sbFwiKTtcbiAgICAgICAgICAgICAgICBhID0gcy5vZmZzZXRXaWR0aDtcbiAgICAgICAgICAgICAgICBpZiAoZSA9PT0gYSkge1xuICAgICAgICAgICAgICAgICAgICBhID0gdFswXS5jbGllbnRXaWR0aDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdC5yZW1vdmUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gciA9IGUgLSBhO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGdldFNjcm9sbEluZm86IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICB2YXIgYSA9IGUuaXNXaW5kb3cgfHwgZS5pc0RvY3VtZW50ID8gXCJcIiA6IGUuZWxlbWVudC5jc3MoXCJvdmVyZmxvdy14XCIpLCB0ID0gZS5pc1dpbmRvdyB8fCBlLmlzRG9jdW1lbnQgPyBcIlwiIDogZS5lbGVtZW50LmNzcyhcIm92ZXJmbG93LXlcIiksIHMgPSBhID09PSBcInNjcm9sbFwiIHx8IGEgPT09IFwiYXV0b1wiICYmIGUud2lkdGggPCBlLmVsZW1lbnRbMF0uc2Nyb2xsV2lkdGgsIHIgPSB0ID09PSBcInNjcm9sbFwiIHx8IHQgPT09IFwiYXV0b1wiICYmIGUuaGVpZ2h0IDwgZS5lbGVtZW50WzBdLnNjcm9sbEhlaWdodDtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB3aWR0aDogciA/IGoucG9zLnNjcm9sbGJhcldpZHRoKCkgOiAwLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IHMgPyBqLnBvcy5zY3JvbGxiYXJXaWR0aCgpIDogMFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZ2V0V2l0aGluSW5mbzogZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgIHZhciBhID0gaihlIHx8IHdpbmRvdyksIHQgPSBqLmlzV2luZG93KGFbMF0pLCBzID0gISFhWzBdICYmIGFbMF0ubm9kZVR5cGUgPT09IDksIHIgPSAhdCAmJiAhcztcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiBhLFxuICAgICAgICAgICAgICAgICAgICBpc1dpbmRvdzogdCxcbiAgICAgICAgICAgICAgICAgICAgaXNEb2N1bWVudDogcyxcbiAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiByID8gaihlKS5vZmZzZXQoKSA6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICB0b3A6IDBcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgc2Nyb2xsTGVmdDogYS5zY3JvbGxMZWZ0KCksXG4gICAgICAgICAgICAgICAgICAgIHNjcm9sbFRvcDogYS5zY3JvbGxUb3AoKSxcbiAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGEub3V0ZXJXaWR0aCgpLFxuICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6IGEub3V0ZXJIZWlnaHQoKVxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIGouZm4ucG9zID0gZnVuY3Rpb24oaCkge1xuICAgICAgICAgICAgaWYgKCFoIHx8ICFoLm9mKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGggPSBqLmV4dGVuZCh7fSwgaCk7XG4gICAgICAgICAgICB2YXIgbSwgcCwgZCwgdSwgVCwgZSwgZyA9IGooaC5vZiksIGIgPSBqLnBvcy5nZXRXaXRoaW5JbmZvKGgud2l0aGluKSwgayA9IGoucG9zLmdldFNjcm9sbEluZm8oYiksIHcgPSAoaC5jb2xsaXNpb24gfHwgXCJmbGlwXCIpLnNwbGl0KFwiIFwiKSwgdiA9IHt9O1xuICAgICAgICAgICAgZSA9IHQoZyk7XG4gICAgICAgICAgICBpZiAoZ1swXS5wcmV2ZW50RGVmYXVsdCkge1xuICAgICAgICAgICAgICAgIGguYXQgPSBcImxlZnQgdG9wXCI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwID0gZS53aWR0aDtcbiAgICAgICAgICAgIGQgPSBlLmhlaWdodDtcbiAgICAgICAgICAgIHUgPSBlLm9mZnNldDtcbiAgICAgICAgICAgIFQgPSBqLmV4dGVuZCh7fSwgdSk7XG4gICAgICAgICAgICBqLmVhY2goWyBcIm15XCIsIFwiYXRcIiBdLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB2YXIgZSA9IChoW3RoaXNdIHx8IFwiXCIpLnNwbGl0KFwiIFwiKSwgYSwgdDtcbiAgICAgICAgICAgICAgICBpZiAoZS5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgZSA9IHMudGVzdChlWzBdKSA/IGUuY29uY2F0KFsgXCJjZW50ZXJcIiBdKSA6IGkudGVzdChlWzBdKSA/IFsgXCJjZW50ZXJcIiBdLmNvbmNhdChlKSA6IFsgXCJjZW50ZXJcIiwgXCJjZW50ZXJcIiBdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlWzBdID0gcy50ZXN0KGVbMF0pID8gZVswXSA6IFwiY2VudGVyXCI7XG4gICAgICAgICAgICAgICAgZVsxXSA9IGkudGVzdChlWzFdKSA/IGVbMV0gOiBcImNlbnRlclwiO1xuICAgICAgICAgICAgICAgIGEgPSBmLmV4ZWMoZVswXSk7XG4gICAgICAgICAgICAgICAgdCA9IGYuZXhlYyhlWzFdKTtcbiAgICAgICAgICAgICAgICB2W3RoaXNdID0gWyBhID8gYVswXSA6IDAsIHQgPyB0WzBdIDogMCBdO1xuICAgICAgICAgICAgICAgIGhbdGhpc10gPSBbIGwuZXhlYyhlWzBdKVswXSwgbC5leGVjKGVbMV0pWzBdIF07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICh3Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgICAgIHdbMV0gPSB3WzBdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGguYXRbMF0gPT09IFwicmlnaHRcIikge1xuICAgICAgICAgICAgICAgIFQubGVmdCArPSBwO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChoLmF0WzBdID09PSBcImNlbnRlclwiKSB7XG4gICAgICAgICAgICAgICAgVC5sZWZ0ICs9IHAgLyAyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGguYXRbMV0gPT09IFwiYm90dG9tXCIpIHtcbiAgICAgICAgICAgICAgICBULnRvcCArPSBkO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChoLmF0WzFdID09PSBcImNlbnRlclwiKSB7XG4gICAgICAgICAgICAgICAgVC50b3AgKz0gZCAvIDI7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBtID0gcSh2LmF0LCBwLCBkKTtcbiAgICAgICAgICAgIFQubGVmdCArPSBtWzBdO1xuICAgICAgICAgICAgVC50b3AgKz0gbVsxXTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdmFyIHQsIGUsIGYgPSBqKHRoaXMpLCBsID0gZi5vdXRlcldpZHRoKCksIGMgPSBmLm91dGVySGVpZ2h0KCksIGEgPSBDKHRoaXMsIFwibWFyZ2luTGVmdFwiKSwgcyA9IEModGhpcywgXCJtYXJnaW5Ub3BcIiksIHIgPSBsICsgYSArIEModGhpcywgXCJtYXJnaW5SaWdodFwiKSArIGsud2lkdGgsIGkgPSBjICsgcyArIEModGhpcywgXCJtYXJnaW5Cb3R0b21cIikgKyBrLmhlaWdodCwgbyA9IGouZXh0ZW5kKHt9LCBUKSwgbiA9IHEodi5teSwgZi5vdXRlcldpZHRoKCksIGYub3V0ZXJIZWlnaHQoKSk7XG4gICAgICAgICAgICAgICAgaWYgKGgubXlbMF0gPT09IFwicmlnaHRcIikge1xuICAgICAgICAgICAgICAgICAgICBvLmxlZnQgLT0gbDtcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGgubXlbMF0gPT09IFwiY2VudGVyXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgby5sZWZ0IC09IGwgLyAyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoaC5teVsxXSA9PT0gXCJib3R0b21cIikge1xuICAgICAgICAgICAgICAgICAgICBvLnRvcCAtPSBjO1xuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaC5teVsxXSA9PT0gXCJjZW50ZXJcIikge1xuICAgICAgICAgICAgICAgICAgICBvLnRvcCAtPSBjIC8gMjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgby5sZWZ0ICs9IG5bMF07XG4gICAgICAgICAgICAgICAgby50b3AgKz0gblsxXTtcbiAgICAgICAgICAgICAgICB0ID0ge1xuICAgICAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0OiBhLFxuICAgICAgICAgICAgICAgICAgICBtYXJnaW5Ub3A6IHNcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIGouZWFjaChbIFwibGVmdFwiLCBcInRvcFwiIF0sIGZ1bmN0aW9uKGUsIGEpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGoudWkucG9zW3dbZV1dKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBqLnVpLnBvc1t3W2VdXVthXShvLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0V2lkdGg6IHAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0SGVpZ2h0OiBkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1XaWR0aDogbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtSGVpZ2h0OiBjLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxpc2lvblBvc2l0aW9uOiB0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxpc2lvbldpZHRoOiByLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbGxpc2lvbkhlaWdodDogaSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IFsgbVswXSArIG5bMF0sIG1bMV0gKyBuWzFdIF0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXk6IGgubXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXQ6IGguYXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2l0aGluOiBiLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW06IGZcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgaWYgKGgudXNpbmcpIHtcbiAgICAgICAgICAgICAgICAgICAgZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBhID0gdS5sZWZ0IC0gby5sZWZ0LCB0ID0gYSArIHAgLSBsLCBzID0gdS50b3AgLSBvLnRvcCwgciA9IHMgKyBkIC0gYywgaSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXQ6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudDogZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVmdDogdS5sZWZ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3A6IHUudG9wLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50OiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IGYsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlZnQ6IG8ubGVmdCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9wOiBvLnRvcCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGwsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogY1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbDogdCA8IDAgPyBcImxlZnRcIiA6IGEgPiAwID8gXCJyaWdodFwiIDogXCJjZW50ZXJcIixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbDogciA8IDAgPyBcInRvcFwiIDogcyA+IDAgPyBcImJvdHRvbVwiIDogXCJtaWRkbGVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwIDwgbCAmJiB4KGEgKyB0KSA8IHApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLmhvcml6b250YWwgPSBcImNlbnRlclwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGQgPCBjICYmIHgocyArIHIpIDwgZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkudmVydGljYWwgPSBcIm1pZGRsZVwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHkoeChhKSwgeCh0KSkgPiB5KHgocyksIHgocikpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaS5pbXBvcnRhbnQgPSBcImhvcml6b250YWxcIjtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaS5pbXBvcnRhbnQgPSBcInZlcnRpY2FsXCI7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBoLnVzaW5nLmNhbGwodGhpcywgZSwgaSk7XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGYub2Zmc2V0KGouZXh0ZW5kKG8sIHtcbiAgICAgICAgICAgICAgICAgICAgdXNpbmc6IGVcbiAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgai51aS5wb3MgPSB7XG4gICAgICAgICAgICBfdHJpZ2dlcjogZnVuY3Rpb24oZSwgYSwgdCwgcykge1xuICAgICAgICAgICAgICAgIGlmIChhLmVsZW0pIHtcbiAgICAgICAgICAgICAgICAgICAgYS5lbGVtLnRyaWdnZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uOiBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb25EYXRhOiBhLFxuICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcmVkOiBzXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmaXQ6IHtcbiAgICAgICAgICAgICAgICBsZWZ0OiBmdW5jdGlvbihlLCBhKSB7XG4gICAgICAgICAgICAgICAgICAgIGoudWkucG9zLl90cmlnZ2VyKGUsIGEsIFwicG9zQ29sbGlkZVwiLCBcImZpdExlZnRcIik7XG4gICAgICAgICAgICAgICAgICAgIHZhciB0ID0gYS53aXRoaW4sIHMgPSB0LmlzV2luZG93ID8gdC5zY3JvbGxMZWZ0IDogdC5vZmZzZXQubGVmdCwgciA9IHQud2lkdGgsIGkgPSBlLmxlZnQgLSBhLmNvbGxpc2lvblBvc2l0aW9uLm1hcmdpbkxlZnQsIGYgPSBzIC0gaSwgbCA9IGkgKyBhLmNvbGxpc2lvbldpZHRoIC0gciAtIHMsIGM7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhLmNvbGxpc2lvbldpZHRoID4gcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYgPiAwICYmIGwgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSBlLmxlZnQgKyBmICsgYS5jb2xsaXNpb25XaWR0aCAtIHIgLSBzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUubGVmdCArPSBmIC0gYztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobCA+IDAgJiYgZiA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5sZWZ0ID0gcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYgPiBsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUubGVmdCA9IHMgKyByIC0gYS5jb2xsaXNpb25XaWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmxlZnQgPSBzO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChmID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5sZWZ0ICs9IGY7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGUubGVmdCAtPSBsO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5sZWZ0ID0geShlLmxlZnQgLSBpLCBlLmxlZnQpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGoudWkucG9zLl90cmlnZ2VyKGUsIGEsIFwicG9zQ29sbGlkZWRcIiwgXCJmaXRMZWZ0XCIpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdG9wOiBmdW5jdGlvbihlLCBhKSB7XG4gICAgICAgICAgICAgICAgICAgIGoudWkucG9zLl90cmlnZ2VyKGUsIGEsIFwicG9zQ29sbGlkZVwiLCBcImZpdFRvcFwiKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSBhLndpdGhpbiwgcyA9IHQuaXNXaW5kb3cgPyB0LnNjcm9sbFRvcCA6IHQub2Zmc2V0LnRvcCwgciA9IGEud2l0aGluLmhlaWdodCwgaSA9IGUudG9wIC0gYS5jb2xsaXNpb25Qb3NpdGlvbi5tYXJnaW5Ub3AsIGYgPSBzIC0gaSwgbCA9IGkgKyBhLmNvbGxpc2lvbkhlaWdodCAtIHIgLSBzLCBjO1xuICAgICAgICAgICAgICAgICAgICBpZiAoYS5jb2xsaXNpb25IZWlnaHQgPiByKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZiA+IDAgJiYgbCA8PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IGUudG9wICsgZiArIGEuY29sbGlzaW9uSGVpZ2h0IC0gciAtIHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS50b3AgKz0gZiAtIGM7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGwgPiAwICYmIGYgPD0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUudG9wID0gcztcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGYgPiBsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUudG9wID0gcyArIHIgLSBhLmNvbGxpc2lvbkhlaWdodDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLnRvcCA9IHM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGYgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnRvcCArPSBmO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGwgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnRvcCAtPSBsO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZS50b3AgPSB5KGUudG9wIC0gaSwgZS50b3ApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGoudWkucG9zLl90cmlnZ2VyKGUsIGEsIFwicG9zQ29sbGlkZWRcIiwgXCJmaXRUb3BcIik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGZsaXA6IHtcbiAgICAgICAgICAgICAgICBsZWZ0OiBmdW5jdGlvbihlLCBhKSB7XG4gICAgICAgICAgICAgICAgICAgIGoudWkucG9zLl90cmlnZ2VyKGUsIGEsIFwicG9zQ29sbGlkZVwiLCBcImZsaXBMZWZ0XCIpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IGEud2l0aGluLCBzID0gdC5vZmZzZXQubGVmdCArIHQuc2Nyb2xsTGVmdCwgciA9IHQud2lkdGgsIGkgPSB0LmlzV2luZG93ID8gdC5zY3JvbGxMZWZ0IDogdC5vZmZzZXQubGVmdCwgZiA9IGUubGVmdCAtIGEuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luTGVmdCwgbCA9IGYgLSBpLCBjID0gZiArIGEuY29sbGlzaW9uV2lkdGggLSByIC0gaSwgbyA9IGEubXlbMF0gPT09IFwibGVmdFwiID8gLWEuZWxlbVdpZHRoIDogYS5teVswXSA9PT0gXCJyaWdodFwiID8gYS5lbGVtV2lkdGggOiAwLCBuID0gYS5hdFswXSA9PT0gXCJsZWZ0XCIgPyBhLnRhcmdldFdpZHRoIDogYS5hdFswXSA9PT0gXCJyaWdodFwiID8gLWEudGFyZ2V0V2lkdGggOiAwLCBoID0gLTIgKiBhLm9mZnNldFswXSwgbSwgcDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGwgPCAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtID0gZS5sZWZ0ICsgbyArIG4gKyBoICsgYS5jb2xsaXNpb25XaWR0aCAtIHIgLSBzO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0gPCAwIHx8IG0gPCB4KGwpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS5sZWZ0ICs9IG8gKyBuICsgaDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcCA9IGUubGVmdCAtIGEuY29sbGlzaW9uUG9zaXRpb24ubWFyZ2luTGVmdCArIG8gKyBuICsgaCAtIGk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocCA+IDAgfHwgeChwKSA8IGMpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlLmxlZnQgKz0gbyArIG4gKyBoO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGoudWkucG9zLl90cmlnZ2VyKGUsIGEsIFwicG9zQ29sbGlkZWRcIiwgXCJmbGlwTGVmdFwiKTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHRvcDogZnVuY3Rpb24oZSwgYSkge1xuICAgICAgICAgICAgICAgICAgICBqLnVpLnBvcy5fdHJpZ2dlcihlLCBhLCBcInBvc0NvbGxpZGVcIiwgXCJmbGlwVG9wXCIpO1xuICAgICAgICAgICAgICAgICAgICB2YXIgdCA9IGEud2l0aGluLCBzID0gdC5vZmZzZXQudG9wICsgdC5zY3JvbGxUb3AsIHIgPSB0LmhlaWdodCwgaSA9IHQuaXNXaW5kb3cgPyB0LnNjcm9sbFRvcCA6IHQub2Zmc2V0LnRvcCwgZiA9IGUudG9wIC0gYS5jb2xsaXNpb25Qb3NpdGlvbi5tYXJnaW5Ub3AsIGwgPSBmIC0gaSwgYyA9IGYgKyBhLmNvbGxpc2lvbkhlaWdodCAtIHIgLSBpLCBvID0gYS5teVsxXSA9PT0gXCJ0b3BcIiwgbiA9IG8gPyAtYS5lbGVtSGVpZ2h0IDogYS5teVsxXSA9PT0gXCJib3R0b21cIiA/IGEuZWxlbUhlaWdodCA6IDAsIGggPSBhLmF0WzFdID09PSBcInRvcFwiID8gYS50YXJnZXRIZWlnaHQgOiBhLmF0WzFdID09PSBcImJvdHRvbVwiID8gLWEudGFyZ2V0SGVpZ2h0IDogMCwgbSA9IC0yICogYS5vZmZzZXRbMV0sIHAsIGQ7XG4gICAgICAgICAgICAgICAgICAgIGlmIChsIDwgMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZCA9IGUudG9wICsgbiArIGggKyBtICsgYS5jb2xsaXNpb25IZWlnaHQgLSByIC0gcztcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkIDwgMCB8fCBkIDwgeChsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGUudG9wICs9IG4gKyBoICsgbTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcCA9IGUudG9wIC0gYS5jb2xsaXNpb25Qb3NpdGlvbi5tYXJnaW5Ub3AgKyBuICsgaCArIG0gLSBpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHAgPiAwIHx8IHgocCkgPCBjKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZS50b3AgKz0gbiArIGggKyBtO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGoudWkucG9zLl90cmlnZ2VyKGUsIGEsIFwicG9zQ29sbGlkZWRcIiwgXCJmbGlwVG9wXCIpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmbGlwZml0OiB7XG4gICAgICAgICAgICAgICAgbGVmdDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgICAgIGoudWkucG9zLmZsaXAubGVmdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgICAgICBqLnVpLnBvcy5maXQubGVmdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgdG9wOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgai51aS5wb3MuZmxpcC50b3AuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICAgICAgICAgICAgICAgICAgai51aS5wb3MuZml0LnRvcC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgICAgKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGUsIGEsIHQsIHMsIHIsIGkgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImJvZHlcIilbMF0sIGYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiZGl2XCIpO1xuICAgICAgICAgICAgZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoaSA/IFwiZGl2XCIgOiBcImJvZHlcIik7XG4gICAgICAgICAgICB0ID0ge1xuICAgICAgICAgICAgICAgIHZpc2liaWxpdHk6IFwiaGlkZGVuXCIsXG4gICAgICAgICAgICAgICAgd2lkdGg6IDAsXG4gICAgICAgICAgICAgICAgaGVpZ2h0OiAwLFxuICAgICAgICAgICAgICAgIGJvcmRlcjogMCxcbiAgICAgICAgICAgICAgICBtYXJnaW46IDAsXG4gICAgICAgICAgICAgICAgYmFja2dyb3VuZDogXCJub25lXCJcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICBpZiAoaSkge1xuICAgICAgICAgICAgICAgIGouZXh0ZW5kKHQsIHtcbiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IFwiYWJzb2x1dGVcIixcbiAgICAgICAgICAgICAgICAgICAgbGVmdDogXCItMTAwMHB4XCIsXG4gICAgICAgICAgICAgICAgICAgIHRvcDogXCItMTAwMHB4XCJcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAociBpbiB0KSB7XG4gICAgICAgICAgICAgICAgZS5zdHlsZVtyXSA9IHRbcl07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlLmFwcGVuZENoaWxkKGYpO1xuICAgICAgICAgICAgYSA9IGkgfHwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50O1xuICAgICAgICAgICAgYS5pbnNlcnRCZWZvcmUoZSwgYS5maXJzdENoaWxkKTtcbiAgICAgICAgICAgIGYuc3R5bGUuY3NzVGV4dCA9IFwicG9zaXRpb246IGFic29sdXRlOyBsZWZ0OiAxMC43NDMyMjIycHg7XCI7XG4gICAgICAgICAgICBzID0gaihmKS5vZmZzZXQoKS5sZWZ0O1xuICAgICAgICAgICAgai5zdXBwb3J0Lm9mZnNldEZyYWN0aW9ucyA9IHMgPiAxMCAmJiBzIDwgMTE7XG4gICAgICAgICAgICBlLmlubmVySFRNTCA9IFwiXCI7XG4gICAgICAgICAgICBhLnJlbW92ZUNoaWxkKGUpO1xuICAgICAgICB9KSgpO1xuICAgIH0pKCk7XG4gICAgdmFyIGEgPSBqLnVpLnBvc2l0aW9uO1xufSk7XG5cbihmdW5jdGlvbihlKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShbIFwianF1ZXJ5XCIgXSwgZSk7XG4gICAgfSBlbHNlIGlmICh3aW5kb3cualF1ZXJ5ICYmICF3aW5kb3cualF1ZXJ5LmZuLmljb25waWNrZXIpIHtcbiAgICAgICAgZSh3aW5kb3cualF1ZXJ5KTtcbiAgICB9XG59KShmdW5jdGlvbihjKSB7XG4gICAgXCJ1c2Ugc3RyaWN0XCI7XG4gICAgdmFyIGYgPSB7XG4gICAgICAgIGlzRW1wdHk6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBlID09PSBmYWxzZSB8fCBlID09PSBcIlwiIHx8IGUgPT09IG51bGwgfHwgZSA9PT0gdW5kZWZpbmVkO1xuICAgICAgICB9LFxuICAgICAgICBpc0VtcHR5T2JqZWN0OiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc0VtcHR5KGUpID09PSB0cnVlIHx8IGUubGVuZ3RoID09PSAwO1xuICAgICAgICB9LFxuICAgICAgICBpc0VsZW1lbnQ6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHJldHVybiBjKGUpLmxlbmd0aCA+IDA7XG4gICAgICAgIH0sXG4gICAgICAgIGlzU3RyaW5nOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIGUgPT09IFwic3RyaW5nXCIgfHwgZSBpbnN0YW5jZW9mIFN0cmluZztcbiAgICAgICAgfSxcbiAgICAgICAgaXNBcnJheTogZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIGMuaXNBcnJheShlKTtcbiAgICAgICAgfSxcbiAgICAgICAgaW5BcnJheTogZnVuY3Rpb24oZSwgYSkge1xuICAgICAgICAgICAgcmV0dXJuIGMuaW5BcnJheShlLCBhKSAhPT0gLTE7XG4gICAgICAgIH0sXG4gICAgICAgIHRocm93RXJyb3I6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIHRocm93IFwiRm9udCBBd2Vzb21lIEljb24gUGlja2VyIEV4Y2VwdGlvbjogXCIgKyBlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICB2YXIgdCA9IGZ1bmN0aW9uKGUsIGEpIHtcbiAgICAgICAgdGhpcy5faWQgPSB0Ll9pZENvdW50ZXIrKztcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gYyhlKS5hZGRDbGFzcyhcImljb25waWNrZXItZWxlbWVudFwiKTtcbiAgICAgICAgdGhpcy5fdHJpZ2dlcihcImljb25waWNrZXJDcmVhdGVcIiwge1xuICAgICAgICAgICAgaWNvbnBpY2tlclZhbHVlOiB0aGlzLmljb25waWNrZXJWYWx1ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gYy5leHRlbmQoe30sIHQuZGVmYXVsdE9wdGlvbnMsIHRoaXMuZWxlbWVudC5kYXRhKCksIGEpO1xuICAgICAgICB0aGlzLm9wdGlvbnMudGVtcGxhdGVzID0gYy5leHRlbmQoe30sIHQuZGVmYXVsdE9wdGlvbnMudGVtcGxhdGVzLCB0aGlzLm9wdGlvbnMudGVtcGxhdGVzKTtcbiAgICAgICAgdGhpcy5vcHRpb25zLm9yaWdpbmFsUGxhY2VtZW50ID0gdGhpcy5vcHRpb25zLnBsYWNlbWVudDtcbiAgICAgICAgdGhpcy5jb250YWluZXIgPSBmLmlzRWxlbWVudCh0aGlzLm9wdGlvbnMuY29udGFpbmVyKSA/IGModGhpcy5vcHRpb25zLmNvbnRhaW5lcikgOiBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuY29udGFpbmVyID09PSBmYWxzZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuZWxlbWVudC5pcyhcIi5kcm9wZG93bi10b2dnbGVcIikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lciA9IGMoXCJ+IC5kcm9wZG93bi1tZW51OmZpcnN0XCIsIHRoaXMuZWxlbWVudCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuY29udGFpbmVyID0gdGhpcy5lbGVtZW50LmlzKFwiaW5wdXQsdGV4dGFyZWEsYnV0dG9uLC5idG5cIikgPyB0aGlzLmVsZW1lbnQucGFyZW50KCkgOiB0aGlzLmVsZW1lbnQ7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb250YWluZXIuYWRkQ2xhc3MoXCJpY29ucGlja2VyLWNvbnRhaW5lclwiKTtcbiAgICAgICAgaWYgKHRoaXMuaXNEcm9wZG93bk1lbnUoKSkge1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBsYWNlbWVudCA9IFwiaW5saW5lXCI7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbnB1dCA9IHRoaXMuZWxlbWVudC5pcyhcImlucHV0LHRleHRhcmVhXCIpID8gdGhpcy5lbGVtZW50LmFkZENsYXNzKFwiaWNvbnBpY2tlci1pbnB1dFwiKSA6IGZhbHNlO1xuICAgICAgICBpZiAodGhpcy5pbnB1dCA9PT0gZmFsc2UpIHtcbiAgICAgICAgICAgIHRoaXMuaW5wdXQgPSB0aGlzLmNvbnRhaW5lci5maW5kKHRoaXMub3B0aW9ucy5pbnB1dCk7XG4gICAgICAgICAgICBpZiAoIXRoaXMuaW5wdXQuaXMoXCJpbnB1dCx0ZXh0YXJlYVwiKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNvbXBvbmVudCA9IHRoaXMuaXNEcm9wZG93bk1lbnUoKSA/IHRoaXMuY29udGFpbmVyLnBhcmVudCgpLmZpbmQodGhpcy5vcHRpb25zLmNvbXBvbmVudCkgOiB0aGlzLmNvbnRhaW5lci5maW5kKHRoaXMub3B0aW9ucy5jb21wb25lbnQpO1xuICAgICAgICBpZiAodGhpcy5jb21wb25lbnQubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLmNvbXBvbmVudCA9IGZhbHNlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5jb21wb25lbnQuZmluZChcImlcIikuYWRkQ2xhc3MoXCJpY29ucGlja2VyLWNvbXBvbmVudFwiKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9jcmVhdGVQb3BvdmVyKCk7XG4gICAgICAgIHRoaXMuX2NyZWF0ZUljb25waWNrZXIoKTtcbiAgICAgICAgaWYgKHRoaXMuZ2V0QWNjZXB0QnV0dG9uKCkubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMubXVzdEFjY2VwdCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmlzSW5wdXRHcm91cCgpKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5wYXJlbnQoKS5hcHBlbmQodGhpcy5wb3BvdmVyKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY29udGFpbmVyLmFwcGVuZCh0aGlzLnBvcG92ZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2JpbmRFbGVtZW50RXZlbnRzKCk7XG4gICAgICAgIHRoaXMuX2JpbmRXaW5kb3dFdmVudHMoKTtcbiAgICAgICAgdGhpcy51cGRhdGUodGhpcy5vcHRpb25zLnNlbGVjdGVkKTtcbiAgICAgICAgaWYgKHRoaXMuaXNJbmxpbmUoKSkge1xuICAgICAgICAgICAgdGhpcy5zaG93KCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5fdHJpZ2dlcihcImljb25waWNrZXJDcmVhdGVkXCIsIHtcbiAgICAgICAgICAgIGljb25waWNrZXJWYWx1ZTogdGhpcy5pY29ucGlja2VyVmFsdWVcbiAgICAgICAgfSk7XG4gICAgfTtcbiAgICB0Ll9pZENvdW50ZXIgPSAwO1xuICAgIHQuZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICAgIHRpdGxlOiBmYWxzZSxcbiAgICAgICAgc2VsZWN0ZWQ6IGZhbHNlLFxuICAgICAgICBkZWZhdWx0VmFsdWU6IGZhbHNlLFxuICAgICAgICBwbGFjZW1lbnQ6IFwiYm90dG9tXCIsXG4gICAgICAgIGNvbGxpc2lvbjogXCJub25lXCIsXG4gICAgICAgIGFuaW1hdGlvbjogdHJ1ZSxcbiAgICAgICAgaGlkZU9uU2VsZWN0OiBmYWxzZSxcbiAgICAgICAgc2hvd0Zvb3RlcjogZmFsc2UsXG4gICAgICAgIHNlYXJjaEluRm9vdGVyOiBmYWxzZSxcbiAgICAgICAgbXVzdEFjY2VwdDogZmFsc2UsXG4gICAgICAgIHNlbGVjdGVkQ3VzdG9tQ2xhc3M6IFwiYmctcHJpbWFyeVwiLFxuICAgICAgICBpY29uczogW10sXG4gICAgICAgIGZ1bGxDbGFzc0Zvcm1hdHRlcjogZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgIH0sXG4gICAgICAgIGlucHV0OiBcImlucHV0LC5pY29ucGlja2VyLWlucHV0XCIsXG4gICAgICAgIGlucHV0U2VhcmNoOiBmYWxzZSxcbiAgICAgICAgY29udGFpbmVyOiBmYWxzZSxcbiAgICAgICAgY29tcG9uZW50OiBcIi5pbnB1dC1ncm91cC1hZGRvbiwuaWNvbnBpY2tlci1jb21wb25lbnRcIixcbiAgICAgICAgdGVtcGxhdGVzOiB7XG4gICAgICAgICAgICBwb3BvdmVyOiAnPGRpdiBjbGFzcz1cImljb25waWNrZXItcG9wb3ZlciBwb3BvdmVyXCI+PGRpdiBjbGFzcz1cImFycm93XCI+PC9kaXY+JyArICc8ZGl2IGNsYXNzPVwicG9wb3Zlci10aXRsZVwiPjwvZGl2PjxkaXYgY2xhc3M9XCJwb3BvdmVyLWNvbnRlbnRcIj48L2Rpdj48L2Rpdj4nLFxuICAgICAgICAgICAgZm9vdGVyOiAnPGRpdiBjbGFzcz1cInBvcG92ZXItZm9vdGVyXCI+PC9kaXY+JyxcbiAgICAgICAgICAgIGJ1dHRvbnM6ICc8YnV0dG9uIGNsYXNzPVwiaWNvbnBpY2tlci1idG4gaWNvbnBpY2tlci1idG4tY2FuY2VsIGJ0biBidG4tZGVmYXVsdCBidG4tc21cIj5DYW5jZWw8L2J1dHRvbj4nICsgJyA8YnV0dG9uIGNsYXNzPVwiaWNvbnBpY2tlci1idG4gaWNvbnBpY2tlci1idG4tYWNjZXB0IGJ0biBidG4tcHJpbWFyeSBidG4tc21cIj5BY2NlcHQ8L2J1dHRvbj4nLFxuICAgICAgICAgICAgc2VhcmNoOiAnPGlucHV0IHR5cGU9XCJzZWFyY2hcIiBjbGFzcz1cImZvcm0tY29udHJvbCBpY29ucGlja2VyLXNlYXJjaFwiIHBsYWNlaG9sZGVyPVwiVHlwZSB0byBmaWx0ZXJcIiAvPicsXG4gICAgICAgICAgICBpY29ucGlja2VyOiAnPGRpdiBjbGFzcz1cImljb25waWNrZXJcIj48ZGl2IGNsYXNzPVwiaWNvbnBpY2tlci1pdGVtc1wiPjwvZGl2PjwvZGl2PicsXG4gICAgICAgICAgICBpY29ucGlja2VySXRlbTogJzxhIHJvbGU9XCJidXR0b25cIiBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJpY29ucGlja2VyLWl0ZW1cIj48aT48L2k+PC9hPidcbiAgICAgICAgfVxuICAgIH07XG4gICAgdC5iYXRjaCA9IGZ1bmN0aW9uKGUsIGEpIHtcbiAgICAgICAgdmFyIHQgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDIpO1xuICAgICAgICByZXR1cm4gYyhlKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdmFyIGUgPSBjKHRoaXMpLmRhdGEoXCJpY29ucGlja2VyXCIpO1xuICAgICAgICAgICAgaWYgKCEhZSkge1xuICAgICAgICAgICAgICAgIGVbYV0uYXBwbHkoZSwgdCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgdC5wcm90b3R5cGUgPSB7XG4gICAgICAgIGNvbnN0cnVjdG9yOiB0LFxuICAgICAgICBvcHRpb25zOiB7fSxcbiAgICAgICAgX2lkOiAwLFxuICAgICAgICBfdHJpZ2dlcjogZnVuY3Rpb24oZSwgYSkge1xuICAgICAgICAgICAgYSA9IGEgfHwge307XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQudHJpZ2dlcihjLmV4dGVuZCh7XG4gICAgICAgICAgICAgICAgdHlwZTogZSxcbiAgICAgICAgICAgICAgICBpY29ucGlja2VySW5zdGFuY2U6IHRoaXNcbiAgICAgICAgICAgIH0sIGEpKTtcbiAgICAgICAgfSxcbiAgICAgICAgX2NyZWF0ZVBvcG92ZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdGhpcy5wb3BvdmVyID0gYyh0aGlzLm9wdGlvbnMudGVtcGxhdGVzLnBvcG92ZXIpO1xuICAgICAgICAgICAgdmFyIGUgPSB0aGlzLnBvcG92ZXIuZmluZChcIi5wb3BvdmVyLXRpdGxlXCIpO1xuICAgICAgICAgICAgaWYgKCEhdGhpcy5vcHRpb25zLnRpdGxlKSB7XG4gICAgICAgICAgICAgICAgZS5hcHBlbmQoYygnPGRpdiBjbGFzcz1cInBvcG92ZXItdGl0bGUtdGV4dFwiPicgKyB0aGlzLm9wdGlvbnMudGl0bGUgKyBcIjwvZGl2PlwiKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNTZXBhcmF0ZWRTZWFyY2hJbnB1dCgpICYmICF0aGlzLm9wdGlvbnMuc2VhcmNoSW5Gb290ZXIpIHtcbiAgICAgICAgICAgICAgICBlLmFwcGVuZCh0aGlzLm9wdGlvbnMudGVtcGxhdGVzLnNlYXJjaCk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCF0aGlzLm9wdGlvbnMudGl0bGUpIHtcbiAgICAgICAgICAgICAgICBlLnJlbW92ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5zaG93Rm9vdGVyICYmICFmLmlzRW1wdHkodGhpcy5vcHRpb25zLnRlbXBsYXRlcy5mb290ZXIpKSB7XG4gICAgICAgICAgICAgICAgdmFyIGEgPSBjKHRoaXMub3B0aW9ucy50ZW1wbGF0ZXMuZm9vdGVyKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5oYXNTZXBhcmF0ZWRTZWFyY2hJbnB1dCgpICYmIHRoaXMub3B0aW9ucy5zZWFyY2hJbkZvb3Rlcikge1xuICAgICAgICAgICAgICAgICAgICBhLmFwcGVuZChjKHRoaXMub3B0aW9ucy50ZW1wbGF0ZXMuc2VhcmNoKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICghZi5pc0VtcHR5KHRoaXMub3B0aW9ucy50ZW1wbGF0ZXMuYnV0dG9ucykpIHtcbiAgICAgICAgICAgICAgICAgICAgYS5hcHBlbmQoYyh0aGlzLm9wdGlvbnMudGVtcGxhdGVzLmJ1dHRvbnMpKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5wb3BvdmVyLmFwcGVuZChhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYW5pbWF0aW9uID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3BvdmVyLmFkZENsYXNzKFwiZmFkZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvcG92ZXI7XG4gICAgICAgIH0sXG4gICAgICAgIF9jcmVhdGVJY29ucGlja2VyOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciB0ID0gdGhpcztcbiAgICAgICAgICAgIHRoaXMuaWNvbnBpY2tlciA9IGModGhpcy5vcHRpb25zLnRlbXBsYXRlcy5pY29ucGlja2VyKTtcbiAgICAgICAgICAgIHZhciBlID0gZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgICAgIHZhciBhID0gYyh0aGlzKTtcbiAgICAgICAgICAgICAgICBpZiAoYS5pcyhcImlcIikpIHtcbiAgICAgICAgICAgICAgICAgICAgYSA9IGEucGFyZW50KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHQuX3RyaWdnZXIoXCJpY29ucGlja2VyU2VsZWN0XCIsIHtcbiAgICAgICAgICAgICAgICAgICAgaWNvbnBpY2tlckl0ZW06IGEsXG4gICAgICAgICAgICAgICAgICAgIGljb25waWNrZXJWYWx1ZTogdC5pY29ucGlja2VyVmFsdWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBpZiAodC5vcHRpb25zLm11c3RBY2NlcHQgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgICAgIHQudXBkYXRlKGEuZGF0YShcImljb25waWNrZXJWYWx1ZVwiKSk7XG4gICAgICAgICAgICAgICAgICAgIHQuX3RyaWdnZXIoXCJpY29ucGlja2VyU2VsZWN0ZWRcIiwge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbnBpY2tlckl0ZW06IHRoaXMsXG4gICAgICAgICAgICAgICAgICAgICAgICBpY29ucGlja2VyVmFsdWU6IHQuaWNvbnBpY2tlclZhbHVlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHQudXBkYXRlKGEuZGF0YShcImljb25waWNrZXJWYWx1ZVwiKSwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmICh0Lm9wdGlvbnMuaGlkZU9uU2VsZWN0ICYmIHQub3B0aW9ucy5tdXN0QWNjZXB0ID09PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICB0LmhpZGUoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICAgICAgdmFyIGEgPSBjKHRoaXMub3B0aW9ucy50ZW1wbGF0ZXMuaWNvbnBpY2tlckl0ZW0pO1xuICAgICAgICAgICAgdmFyIHMgPSBbXTtcbiAgICAgICAgICAgIGZvciAodmFyIHIgaW4gdGhpcy5vcHRpb25zLmljb25zKSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMuaWNvbnNbcl0udGl0bGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFyIGkgPSBhLmNsb25lKCk7XG4gICAgICAgICAgICAgICAgICAgIGkuZmluZChcImlcIikuYWRkQ2xhc3ModGhpcy5vcHRpb25zLmZ1bGxDbGFzc0Zvcm1hdHRlcih0aGlzLm9wdGlvbnMuaWNvbnNbcl0udGl0bGUpKTtcbiAgICAgICAgICAgICAgICAgICAgaS5kYXRhKFwiaWNvbnBpY2tlclZhbHVlXCIsIHRoaXMub3B0aW9ucy5pY29uc1tyXS50aXRsZSkub24oXCJjbGljay5pY29ucGlja2VyXCIsIGUpO1xuICAgICAgICAgICAgICAgICAgICBpLmF0dHIoXCJ0aXRsZVwiLCBcIi5cIiArIHRoaXMub3B0aW9ucy5pY29uc1tyXS50aXRsZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMuaWNvbnNbcl0uc2VhcmNoVGVybXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGYgPSBcIlwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgbCA9IDA7IGwgPCB0aGlzLm9wdGlvbnMuaWNvbnNbcl0uc2VhcmNoVGVybXMubGVuZ3RoOyBsKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmID0gZiArIHRoaXMub3B0aW9ucy5pY29uc1tyXS5zZWFyY2hUZXJtc1tsXSArIFwiIFwiO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaS5hdHRyKFwiZGF0YS1zZWFyY2gtdGVybXNcIiwgZik7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcy5wdXNoKGkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuaWNvbnBpY2tlci5maW5kKFwiLmljb25waWNrZXItaXRlbXNcIikuYXBwZW5kKHMpO1xuICAgICAgICAgICAgdGhpcy5wb3BvdmVyLmZpbmQoXCIucG9wb3Zlci1jb250ZW50XCIpLmFwcGVuZCh0aGlzLmljb25waWNrZXIpO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaWNvbnBpY2tlcjtcbiAgICAgICAgfSxcbiAgICAgICAgX2lzRXZlbnRJbnNpZGVJY29ucGlja2VyOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICB2YXIgYSA9IGMoZS50YXJnZXQpO1xuICAgICAgICAgICAgaWYgKCghYS5oYXNDbGFzcyhcImljb25waWNrZXItZWxlbWVudFwiKSB8fCBhLmhhc0NsYXNzKFwiaWNvbnBpY2tlci1lbGVtZW50XCIpICYmICFhLmlzKHRoaXMuZWxlbWVudCkpICYmIGEucGFyZW50cyhcIi5pY29ucGlja2VyLXBvcG92ZXJcIikubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH0sXG4gICAgICAgIF9iaW5kRWxlbWVudEV2ZW50czogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgYSA9IHRoaXM7XG4gICAgICAgICAgICB0aGlzLmdldFNlYXJjaElucHV0KCkub24oXCJrZXl1cC5pY29ucGlja2VyXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIGEuZmlsdGVyKGModGhpcykudmFsKCkudG9Mb3dlckNhc2UoKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZ2V0QWNjZXB0QnV0dG9uKCkub24oXCJjbGljay5pY29ucGlja2VyXCIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgIHZhciBlID0gYS5pY29ucGlja2VyLmZpbmQoXCIuaWNvbnBpY2tlci1zZWxlY3RlZFwiKS5nZXQoMCk7XG4gICAgICAgICAgICAgICAgYS51cGRhdGUoYS5pY29ucGlja2VyVmFsdWUpO1xuICAgICAgICAgICAgICAgIGEuX3RyaWdnZXIoXCJpY29ucGlja2VyU2VsZWN0ZWRcIiwge1xuICAgICAgICAgICAgICAgICAgICBpY29ucGlja2VySXRlbTogZSxcbiAgICAgICAgICAgICAgICAgICAgaWNvbnBpY2tlclZhbHVlOiBhLmljb25waWNrZXJWYWx1ZVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGlmICghYS5pc0lubGluZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGEuaGlkZSgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5nZXRDYW5jZWxCdXR0b24oKS5vbihcImNsaWNrLmljb25waWNrZXJcIiwgZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFhLmlzSW5saW5lKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgYS5oaWRlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmVsZW1lbnQub24oXCJmb2N1cy5pY29ucGlja2VyXCIsIGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgICAgICBhLnNob3coKTtcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNDb21wb25lbnQoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50Lm9uKFwiY2xpY2suaWNvbnBpY2tlclwiLCBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICAgICAgYS50b2dnbGUoKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLmhhc0lucHV0KCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmlucHV0Lm9uKFwia2V5dXAuaWNvbnBpY2tlclwiLCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghZi5pbkFycmF5KGUua2V5Q29kZSwgWyAzOCwgNDAsIDM3LCAzOSwgMTYsIDE3LCAxOCwgOSwgOCwgOTEsIDkzLCAyMCwgNDYsIDE4NiwgMTkwLCA0NiwgNzgsIDE4OCwgNDQsIDg2IF0pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhLnVwZGF0ZSgpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYS5fdXBkYXRlRm9ybUdyb3VwU3RhdHVzKGEuZ2V0VmFsaWQodGhpcy52YWx1ZSkgIT09IGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoYS5vcHRpb25zLmlucHV0U2VhcmNoID09PSB0cnVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBhLmZpbHRlcihjKHRoaXMpLnZhbCgpLnRvTG93ZXJDYXNlKCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIF9iaW5kV2luZG93RXZlbnRzOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHZhciBlID0gYyh3aW5kb3cuZG9jdW1lbnQpO1xuICAgICAgICAgICAgdmFyIGEgPSB0aGlzO1xuICAgICAgICAgICAgdmFyIHQgPSBcIi5pY29ucGlja2VyLmluc3RcIiArIHRoaXMuX2lkO1xuICAgICAgICAgICAgYyh3aW5kb3cpLm9uKFwicmVzaXplLmljb25waWNrZXJcIiArIHQgKyBcIiBvcmllbnRhdGlvbmNoYW5nZS5pY29ucGlja2VyXCIgKyB0LCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgaWYgKGEucG9wb3Zlci5oYXNDbGFzcyhcImluXCIpKSB7XG4gICAgICAgICAgICAgICAgICAgIGEudXBkYXRlUGxhY2VtZW50KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAoIWEuaXNJbmxpbmUoKSkge1xuICAgICAgICAgICAgICAgIGUub24oXCJtb3VzZXVwXCIgKyB0LCBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghYS5faXNFdmVudEluc2lkZUljb25waWNrZXIoZSkgJiYgIWEuaXNJbmxpbmUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYS5oaWRlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgX3VuYmluZEVsZW1lbnRFdmVudHM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdGhpcy5wb3BvdmVyLm9mZihcIi5pY29ucGlja2VyXCIpO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50Lm9mZihcIi5pY29ucGlja2VyXCIpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaGFzSW5wdXQoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaW5wdXQub2ZmKFwiLmljb25waWNrZXJcIik7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNDb21wb25lbnQoKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50Lm9mZihcIi5pY29ucGlja2VyXCIpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuaGFzQ29udGFpbmVyKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNvbnRhaW5lci5vZmYoXCIuaWNvbnBpY2tlclwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgX3VuYmluZFdpbmRvd0V2ZW50czogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBjKHdpbmRvdykub2ZmKFwiLmljb25waWNrZXIuaW5zdFwiICsgdGhpcy5faWQpO1xuICAgICAgICAgICAgYyh3aW5kb3cuZG9jdW1lbnQpLm9mZihcIi5pY29ucGlja2VyLmluc3RcIiArIHRoaXMuX2lkKTtcbiAgICAgICAgfSxcbiAgICAgICAgdXBkYXRlUGxhY2VtZW50OiBmdW5jdGlvbihlLCBhKSB7XG4gICAgICAgICAgICBlID0gZSB8fCB0aGlzLm9wdGlvbnMucGxhY2VtZW50O1xuICAgICAgICAgICAgdGhpcy5vcHRpb25zLnBsYWNlbWVudCA9IGU7XG4gICAgICAgICAgICBhID0gYSB8fCB0aGlzLm9wdGlvbnMuY29sbGlzaW9uO1xuICAgICAgICAgICAgYSA9IGEgPT09IHRydWUgPyBcImZsaXBcIiA6IGE7XG4gICAgICAgICAgICB2YXIgdCA9IHtcbiAgICAgICAgICAgICAgICBhdDogXCJyaWdodCBib3R0b21cIixcbiAgICAgICAgICAgICAgICBteTogXCJyaWdodCB0b3BcIixcbiAgICAgICAgICAgICAgICBvZjogdGhpcy5oYXNJbnB1dCgpICYmICF0aGlzLmlzSW5wdXRHcm91cCgpID8gdGhpcy5pbnB1dCA6IHRoaXMuY29udGFpbmVyLFxuICAgICAgICAgICAgICAgIGNvbGxpc2lvbjogYSA9PT0gdHJ1ZSA/IFwiZmxpcFwiIDogYSxcbiAgICAgICAgICAgICAgICB3aXRoaW46IHdpbmRvd1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRoaXMucG9wb3Zlci5yZW1vdmVDbGFzcyhcImlubGluZSB0b3BMZWZ0Q29ybmVyIHRvcExlZnQgdG9wIHRvcFJpZ2h0IHRvcFJpZ2h0Q29ybmVyIFwiICsgXCJyaWdodFRvcCByaWdodCByaWdodEJvdHRvbSBib3R0b21SaWdodCBib3R0b21SaWdodENvcm5lciBcIiArIFwiYm90dG9tIGJvdHRvbUxlZnQgYm90dG9tTGVmdENvcm5lciBsZWZ0Qm90dG9tIGxlZnQgbGVmdFRvcFwiKTtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgZSA9PT0gXCJvYmplY3RcIikge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnBvcG92ZXIucG9zKGMuZXh0ZW5kKHt9LCB0LCBlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzd2l0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgY2FzZSBcImlubGluZVwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIFwidG9wTGVmdENvcm5lclwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdC5teSA9IFwicmlnaHQgYm90dG9tXCI7XG4gICAgICAgICAgICAgICAgICAgIHQuYXQgPSBcImxlZnQgdG9wXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgXCJ0b3BMZWZ0XCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0Lm15ID0gXCJsZWZ0IGJvdHRvbVwiO1xuICAgICAgICAgICAgICAgICAgICB0LmF0ID0gXCJsZWZ0IHRvcFwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIFwidG9wXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0Lm15ID0gXCJjZW50ZXIgYm90dG9tXCI7XG4gICAgICAgICAgICAgICAgICAgIHQuYXQgPSBcImNlbnRlciB0b3BcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSBcInRvcFJpZ2h0XCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0Lm15ID0gXCJyaWdodCBib3R0b21cIjtcbiAgICAgICAgICAgICAgICAgICAgdC5hdCA9IFwicmlnaHQgdG9wXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgXCJ0b3BSaWdodENvcm5lclwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdC5teSA9IFwibGVmdCBib3R0b21cIjtcbiAgICAgICAgICAgICAgICAgICAgdC5hdCA9IFwicmlnaHQgdG9wXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgXCJyaWdodFRvcFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdC5teSA9IFwibGVmdCBib3R0b21cIjtcbiAgICAgICAgICAgICAgICAgICAgdC5hdCA9IFwicmlnaHQgY2VudGVyXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgXCJyaWdodFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdC5teSA9IFwibGVmdCBjZW50ZXJcIjtcbiAgICAgICAgICAgICAgICAgICAgdC5hdCA9IFwicmlnaHQgY2VudGVyXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgXCJyaWdodEJvdHRvbVwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdC5teSA9IFwibGVmdCB0b3BcIjtcbiAgICAgICAgICAgICAgICAgICAgdC5hdCA9IFwicmlnaHQgY2VudGVyXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgXCJib3R0b21SaWdodENvcm5lclwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdC5teSA9IFwibGVmdCB0b3BcIjtcbiAgICAgICAgICAgICAgICAgICAgdC5hdCA9IFwicmlnaHQgYm90dG9tXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgXCJib3R0b21SaWdodFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdC5teSA9IFwicmlnaHQgdG9wXCI7XG4gICAgICAgICAgICAgICAgICAgIHQuYXQgPSBcInJpZ2h0IGJvdHRvbVwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIFwiYm90dG9tXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0Lm15ID0gXCJjZW50ZXIgdG9wXCI7XG4gICAgICAgICAgICAgICAgICAgIHQuYXQgPSBcImNlbnRlciBib3R0b21cIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSBcImJvdHRvbUxlZnRcIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHQubXkgPSBcImxlZnQgdG9wXCI7XG4gICAgICAgICAgICAgICAgICAgIHQuYXQgPSBcImxlZnQgYm90dG9tXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgXCJib3R0b21MZWZ0Q29ybmVyXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0Lm15ID0gXCJyaWdodCB0b3BcIjtcbiAgICAgICAgICAgICAgICAgICAgdC5hdCA9IFwibGVmdCBib3R0b21cIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgY2FzZSBcImxlZnRCb3R0b21cIjpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHQubXkgPSBcInJpZ2h0IHRvcFwiO1xuICAgICAgICAgICAgICAgICAgICB0LmF0ID0gXCJsZWZ0IGNlbnRlclwiO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgICBjYXNlIFwibGVmdFwiOlxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgdC5teSA9IFwicmlnaHQgY2VudGVyXCI7XG4gICAgICAgICAgICAgICAgICAgIHQuYXQgPSBcImxlZnQgY2VudGVyXCI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAgIGNhc2UgXCJsZWZ0VG9wXCI6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICB0Lm15ID0gXCJyaWdodCBib3R0b21cIjtcbiAgICAgICAgICAgICAgICAgICAgdC5hdCA9IFwibGVmdCBjZW50ZXJcIjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBvcG92ZXIuY3NzKHtcbiAgICAgICAgICAgICAgICBkaXNwbGF5OiB0aGlzLm9wdGlvbnMucGxhY2VtZW50ID09PSBcImlubGluZVwiID8gXCJcIiA6IFwiYmxvY2tcIlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBpZiAodCAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcG92ZXIucG9zKHQpLmNzcyhcIm1heFdpZHRoXCIsIGMod2luZG93KS53aWR0aCgpIC0gdGhpcy5jb250YWluZXIub2Zmc2V0KCkubGVmdCAtIDUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcG92ZXIuY3NzKHtcbiAgICAgICAgICAgICAgICAgICAgdG9wOiBcImF1dG9cIixcbiAgICAgICAgICAgICAgICAgICAgcmlnaHQ6IFwiYXV0b1wiLFxuICAgICAgICAgICAgICAgICAgICBib3R0b206IFwiYXV0b1wiLFxuICAgICAgICAgICAgICAgICAgICBsZWZ0OiBcImF1dG9cIixcbiAgICAgICAgICAgICAgICAgICAgbWF4V2lkdGg6IFwibm9uZVwiXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnBvcG92ZXIuYWRkQ2xhc3ModGhpcy5vcHRpb25zLnBsYWNlbWVudCk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfSxcbiAgICAgICAgX3VwZGF0ZUNvbXBvbmVudHM6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgdGhpcy5pY29ucGlja2VyLmZpbmQoXCIuaWNvbnBpY2tlci1pdGVtLmljb25waWNrZXItc2VsZWN0ZWRcIikucmVtb3ZlQ2xhc3MoXCJpY29ucGlja2VyLXNlbGVjdGVkIFwiICsgdGhpcy5vcHRpb25zLnNlbGVjdGVkQ3VzdG9tQ2xhc3MpO1xuICAgICAgICAgICAgaWYgKHRoaXMuaWNvbnBpY2tlclZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pY29ucGlja2VyLmZpbmQoXCIuXCIgKyB0aGlzLm9wdGlvbnMuZnVsbENsYXNzRm9ybWF0dGVyKHRoaXMuaWNvbnBpY2tlclZhbHVlKS5yZXBsYWNlKC8gL2csIFwiLlwiKSkucGFyZW50KCkuYWRkQ2xhc3MoXCJpY29ucGlja2VyLXNlbGVjdGVkIFwiICsgdGhpcy5vcHRpb25zLnNlbGVjdGVkQ3VzdG9tQ2xhc3MpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuaGFzQ29tcG9uZW50KCkpIHtcbiAgICAgICAgICAgICAgICB2YXIgZSA9IHRoaXMuY29tcG9uZW50LmZpbmQoXCJpXCIpO1xuICAgICAgICAgICAgICAgIGlmIChlLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgZS5hdHRyKFwiY2xhc3NcIiwgdGhpcy5vcHRpb25zLmZ1bGxDbGFzc0Zvcm1hdHRlcih0aGlzLmljb25waWNrZXJWYWx1ZSkpO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29tcG9uZW50Lmh0bWwodGhpcy5nZXRIdG1sKCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgX3VwZGF0ZUZvcm1Hcm91cFN0YXR1czogZnVuY3Rpb24oZSkge1xuICAgICAgICAgICAgaWYgKHRoaXMuaGFzSW5wdXQoKSkge1xuICAgICAgICAgICAgICAgIGlmIChlICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0LnBhcmVudHMoXCIuZm9ybS1ncm91cDpmaXJzdFwiKS5yZW1vdmVDbGFzcyhcImhhcy1lcnJvclwiKTtcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0LnBhcmVudHMoXCIuZm9ybS1ncm91cDpmaXJzdFwiKS5hZGRDbGFzcyhcImhhcy1lcnJvclwiKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIGdldFZhbGlkOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBpZiAoIWYuaXNTdHJpbmcoZSkpIHtcbiAgICAgICAgICAgICAgICBlID0gXCJcIjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHZhciBhID0gZSA9PT0gXCJcIjtcbiAgICAgICAgICAgIGUgPSBjLnRyaW0oZSk7XG4gICAgICAgICAgICB2YXIgdCA9IGZhbHNlO1xuICAgICAgICAgICAgZm9yICh2YXIgcyA9IDA7IHMgPCB0aGlzLm9wdGlvbnMuaWNvbnMubGVuZ3RoOyBzKyspIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5vcHRpb25zLmljb25zW3NdLnRpdGxlID09PSBlKSB7XG4gICAgICAgICAgICAgICAgICAgIHQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAodCB8fCBhKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIHNldFZhbHVlOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICB2YXIgYSA9IHRoaXMuZ2V0VmFsaWQoZSk7XG4gICAgICAgICAgICBpZiAoYSAhPT0gZmFsc2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmljb25waWNrZXJWYWx1ZSA9IGE7XG4gICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlcihcImljb25waWNrZXJTZXRWYWx1ZVwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGljb25waWNrZXJWYWx1ZTogYVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmljb25waWNrZXJWYWx1ZTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlcihcImljb25waWNrZXJJbnZhbGlkXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgaWNvbnBpY2tlclZhbHVlOiBlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBnZXRIdG1sOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiAnPGkgY2xhc3M9XCInICsgdGhpcy5vcHRpb25zLmZ1bGxDbGFzc0Zvcm1hdHRlcih0aGlzLmljb25waWNrZXJWYWx1ZSkgKyAnXCI+PC9pPic7XG4gICAgICAgIH0sXG4gICAgICAgIHNldFNvdXJjZVZhbHVlOiBmdW5jdGlvbihlKSB7XG4gICAgICAgICAgICBlID0gdGhpcy5zZXRWYWx1ZShlKTtcbiAgICAgICAgICAgIGlmIChlICE9PSBmYWxzZSAmJiBlICE9PSBcIlwiKSB7XG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzSW5wdXQoKSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmlucHV0LnZhbCh0aGlzLmljb25waWNrZXJWYWx1ZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5lbGVtZW50LmRhdGEoXCJpY29ucGlja2VyVmFsdWVcIiwgdGhpcy5pY29ucGlja2VyVmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyKFwiaWNvbnBpY2tlclNldFNvdXJjZVZhbHVlXCIsIHtcbiAgICAgICAgICAgICAgICAgICAgaWNvbnBpY2tlclZhbHVlOiBlXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0U291cmNlVmFsdWU6IGZ1bmN0aW9uKGUpIHtcbiAgICAgICAgICAgIGUgPSBlIHx8IHRoaXMub3B0aW9ucy5kZWZhdWx0VmFsdWU7XG4gICAgICAgICAgICB2YXIgYSA9IGU7XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNJbnB1dCgpKSB7XG4gICAgICAgICAgICAgICAgYSA9IHRoaXMuaW5wdXQudmFsKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGEgPSB0aGlzLmVsZW1lbnQuZGF0YShcImljb25waWNrZXJWYWx1ZVwiKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChhID09PSB1bmRlZmluZWQgfHwgYSA9PT0gXCJcIiB8fCBhID09PSBudWxsIHx8IGEgPT09IGZhbHNlKSB7XG4gICAgICAgICAgICAgICAgYSA9IGU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYTtcbiAgICAgICAgfSxcbiAgICAgICAgaGFzSW5wdXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXQgIT09IGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgICBpc0lucHV0U2VhcmNoOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmhhc0lucHV0KCkgJiYgdGhpcy5vcHRpb25zLmlucHV0U2VhcmNoID09PSB0cnVlO1xuICAgICAgICB9LFxuICAgICAgICBpc0lucHV0R3JvdXA6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyLmlzKFwiLmlucHV0LWdyb3VwXCIpO1xuICAgICAgICB9LFxuICAgICAgICBpc0Ryb3Bkb3duTWVudTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXIuaXMoXCIuZHJvcGRvd24tbWVudVwiKTtcbiAgICAgICAgfSxcbiAgICAgICAgaGFzU2VwYXJhdGVkU2VhcmNoSW5wdXQ6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy50ZW1wbGF0ZXMuc2VhcmNoICE9PSBmYWxzZSAmJiAhdGhpcy5pc0lucHV0U2VhcmNoKCk7XG4gICAgICAgIH0sXG4gICAgICAgIGhhc0NvbXBvbmVudDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jb21wb25lbnQgIT09IGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgICBoYXNDb250YWluZXI6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29udGFpbmVyICE9PSBmYWxzZTtcbiAgICAgICAgfSxcbiAgICAgICAgZ2V0QWNjZXB0QnV0dG9uOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnBvcG92ZXIuZmluZChcIi5pY29ucGlja2VyLWJ0bi1hY2NlcHRcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGdldENhbmNlbEJ1dHRvbjogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wb3BvdmVyLmZpbmQoXCIuaWNvbnBpY2tlci1idG4tY2FuY2VsXCIpO1xuICAgICAgICB9LFxuICAgICAgICBnZXRTZWFyY2hJbnB1dDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5wb3BvdmVyLmZpbmQoXCIuaWNvbnBpY2tlci1zZWFyY2hcIik7XG4gICAgICAgIH0sXG4gICAgICAgIGZpbHRlcjogZnVuY3Rpb24ocikge1xuICAgICAgICAgICAgaWYgKGYuaXNFbXB0eShyKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaWNvbnBpY2tlci5maW5kKFwiLmljb25waWNrZXItaXRlbVwiKS5zaG93KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGMoZmFsc2UpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YXIgaSA9IFtdO1xuICAgICAgICAgICAgICAgIHRoaXMuaWNvbnBpY2tlci5maW5kKFwiLmljb25waWNrZXItaXRlbVwiKS5lYWNoKGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICAgICAgICB2YXIgZSA9IGModGhpcyk7XG4gICAgICAgICAgICAgICAgICAgIHZhciBhID0gZS5hdHRyKFwidGl0bGVcIikudG9Mb3dlckNhc2UoKTtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHQgPSBlLmF0dHIoXCJkYXRhLXNlYXJjaC10ZXJtc1wiKSA/IGUuYXR0cihcImRhdGEtc2VhcmNoLXRlcm1zXCIpLnRvTG93ZXJDYXNlKCkgOiBcIlwiO1xuICAgICAgICAgICAgICAgICAgICBhID0gYSArIFwiIFwiICsgdDtcbiAgICAgICAgICAgICAgICAgICAgdmFyIHMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBuZXcgUmVnRXhwKFwiKF58XFxcXFcpXCIgKyByLCBcImdcIik7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHMgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAocyAhPT0gZmFsc2UgJiYgYS5tYXRjaChzKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaS5wdXNoKGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZS5zaG93KCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlLmhpZGUoKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICBzaG93OiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnBvcG92ZXIuaGFzQ2xhc3MoXCJpblwiKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGMuaWNvbnBpY2tlci5iYXRjaChjKFwiLmljb25waWNrZXItcG9wb3Zlci5pbjpub3QoLmlubGluZSlcIikubm90KHRoaXMucG9wb3ZlciksIFwiaGlkZVwiKTtcbiAgICAgICAgICAgIHRoaXMuX3RyaWdnZXIoXCJpY29ucGlja2VyU2hvd1wiLCB7XG4gICAgICAgICAgICAgICAgaWNvbnBpY2tlclZhbHVlOiB0aGlzLmljb25waWNrZXJWYWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnVwZGF0ZVBsYWNlbWVudCgpO1xuICAgICAgICAgICAgdGhpcy5wb3BvdmVyLmFkZENsYXNzKFwiaW5cIik7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KGMucHJveHkoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3BvdmVyLmNzcyhcImRpc3BsYXlcIiwgdGhpcy5pc0lubGluZSgpID8gXCJcIiA6IFwiYmxvY2tcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5fdHJpZ2dlcihcImljb25waWNrZXJTaG93blwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGljb25waWNrZXJWYWx1ZTogdGhpcy5pY29ucGlja2VyVmFsdWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIHRoaXMpLCB0aGlzLm9wdGlvbnMuYW5pbWF0aW9uID8gMzAwIDogMSk7XG4gICAgICAgIH0sXG4gICAgICAgIGhpZGU6IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnBvcG92ZXIuaGFzQ2xhc3MoXCJpblwiKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RyaWdnZXIoXCJpY29ucGlja2VySGlkZVwiLCB7XG4gICAgICAgICAgICAgICAgaWNvbnBpY2tlclZhbHVlOiB0aGlzLmljb25waWNrZXJWYWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLnBvcG92ZXIucmVtb3ZlQ2xhc3MoXCJpblwiKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoYy5wcm94eShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnBvcG92ZXIuY3NzKFwiZGlzcGxheVwiLCBcIm5vbmVcIik7XG4gICAgICAgICAgICAgICAgdGhpcy5nZXRTZWFyY2hJbnB1dCgpLnZhbChcIlwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlcihcIlwiKTtcbiAgICAgICAgICAgICAgICB0aGlzLl90cmlnZ2VyKFwiaWNvbnBpY2tlckhpZGRlblwiLCB7XG4gICAgICAgICAgICAgICAgICAgIGljb25waWNrZXJWYWx1ZTogdGhpcy5pY29ucGlja2VyVmFsdWVcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIHRoaXMpLCB0aGlzLm9wdGlvbnMuYW5pbWF0aW9uID8gMzAwIDogMSk7XG4gICAgICAgIH0sXG4gICAgICAgIHRvZ2dsZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5wb3BvdmVyLmlzKFwiOnZpc2libGVcIikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhpZGUoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zaG93KHRydWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9LFxuICAgICAgICB1cGRhdGU6IGZ1bmN0aW9uKGUsIGEpIHtcbiAgICAgICAgICAgIGUgPSBlID8gZSA6IHRoaXMuZ2V0U291cmNlVmFsdWUodGhpcy5pY29ucGlja2VyVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy5fdHJpZ2dlcihcImljb25waWNrZXJVcGRhdGVcIiwge1xuICAgICAgICAgICAgICAgIGljb25waWNrZXJWYWx1ZTogdGhpcy5pY29ucGlja2VyVmFsdWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKGEgPT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICBlID0gdGhpcy5zZXRWYWx1ZShlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgZSA9IHRoaXMuc2V0U291cmNlVmFsdWUoZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fdXBkYXRlRm9ybUdyb3VwU3RhdHVzKGUgIT09IGZhbHNlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlICE9PSBmYWxzZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3VwZGF0ZUNvbXBvbmVudHMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuX3RyaWdnZXIoXCJpY29ucGlja2VyVXBkYXRlZFwiLCB7XG4gICAgICAgICAgICAgICAgaWNvbnBpY2tlclZhbHVlOiB0aGlzLmljb25waWNrZXJWYWx1ZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gZTtcbiAgICAgICAgfSxcbiAgICAgICAgZGVzdHJveTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0aGlzLl90cmlnZ2VyKFwiaWNvbnBpY2tlckRlc3Ryb3lcIiwge1xuICAgICAgICAgICAgICAgIGljb25waWNrZXJWYWx1ZTogdGhpcy5pY29ucGlja2VyVmFsdWVcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZURhdGEoXCJpY29ucGlja2VyXCIpLnJlbW92ZURhdGEoXCJpY29ucGlja2VyVmFsdWVcIikucmVtb3ZlQ2xhc3MoXCJpY29ucGlja2VyLWVsZW1lbnRcIik7XG4gICAgICAgICAgICB0aGlzLl91bmJpbmRFbGVtZW50RXZlbnRzKCk7XG4gICAgICAgICAgICB0aGlzLl91bmJpbmRXaW5kb3dFdmVudHMoKTtcbiAgICAgICAgICAgIGModGhpcy5wb3BvdmVyKS5yZW1vdmUoKTtcbiAgICAgICAgICAgIHRoaXMuX3RyaWdnZXIoXCJpY29ucGlja2VyRGVzdHJveWVkXCIsIHtcbiAgICAgICAgICAgICAgICBpY29ucGlja2VyVmFsdWU6IHRoaXMuaWNvbnBpY2tlclZhbHVlXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSxcbiAgICAgICAgZGlzYWJsZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNJbnB1dCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dC5wcm9wKFwiZGlzYWJsZWRcIiwgdHJ1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIGVuYWJsZTogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5oYXNJbnB1dCgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5pbnB1dC5wcm9wKFwiZGlzYWJsZWRcIiwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9LFxuICAgICAgICBpc0Rpc2FibGVkOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc0lucHV0KCkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5pbnB1dC5wcm9wKFwiZGlzYWJsZWRcIikgPT09IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH0sXG4gICAgICAgIGlzSW5saW5lOiBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMucGxhY2VtZW50ID09PSBcImlubGluZVwiIHx8IHRoaXMucG9wb3Zlci5oYXNDbGFzcyhcImlubGluZVwiKTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgYy5pY29ucGlja2VyID0gdDtcbiAgICBjLmZuLmljb25waWNrZXIgPSBmdW5jdGlvbihhKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmVhY2goZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgZSA9IGModGhpcyk7XG4gICAgICAgICAgICBpZiAoIWUuZGF0YShcImljb25waWNrZXJcIikpIHtcbiAgICAgICAgICAgICAgICBlLmRhdGEoXCJpY29ucGlja2VyXCIsIG5ldyB0KHRoaXMsIHR5cGVvZiBhID09PSBcIm9iamVjdFwiID8gYSA6IHt9KSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH07XG4gICAgdC5kZWZhdWx0T3B0aW9ucyA9IGMuZXh0ZW5kKHQuZGVmYXVsdE9wdGlvbnMsIHtcbiAgICAgICAgaWNvbnM6IFsge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLTUwMHB4XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWFjY2Vzc2libGUtaWNvblwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhY2Nlc3NpYmlsaXR5XCIsIFwiaGFuZGljYXBcIiwgXCJwZXJzb25cIiwgXCJ3aGVlbGNoYWlyXCIsIFwid2hlZWxjaGFpci1hbHRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1hY2N1c29mdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1hY3F1aXNpdGlvbnMtaW5jb3Jwb3JhdGVkXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcIkR1bmdlb25zICYgRHJhZ29uc1wiLCBcImQmZFwiLCBcImRuZFwiLCBcImZhbnRhc3lcIiwgXCJnYW1lXCIsIFwiZ2FtaW5nXCIsIFwidGFibGV0b3BcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1hZFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1hZGRyZXNzLWJvb2tcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtYWRkcmVzcy1ib29rXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWFkZHJlc3MtY2FyZFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1hZGRyZXNzLWNhcmRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtYWRqdXN0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImNvbnRyYXN0XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtYWRuXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWFkdmVyc2FsXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWFmZmlsaWF0ZXRoZW1lXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWFpci1mcmVzaGVuZXJcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtYWxnb2xpYVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1hbGlnbi1jZW50ZXJcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwibWlkZGxlXCIsIFwidGV4dFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWFsaWduLWp1c3RpZnlcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwidGV4dFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWFsaWduLWxlZnRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwidGV4dFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWFsaWduLXJpZ2h0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcInRleHRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1hbGlwYXlcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtYWxsZXJnaWVzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImZyZWNrbGVzXCIsIFwiaGFuZFwiLCBcImludG9sZXJhbmNlc1wiLCBcInBveFwiLCBcInNwb3RzXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtYW1hem9uXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWFtYXpvbi1wYXlcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtYW1idWxhbmNlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImhlbHBcIiwgXCJtYWNoaW5lXCIsIFwic3VwcG9ydFwiLCBcInZlaGljbGVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1hbWVyaWNhbi1zaWduLWxhbmd1YWdlLWludGVycHJldGluZ1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1hbWlsaWFcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtYW5jaG9yXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImxpbmtcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1hbmRyb2lkXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcInJvYm90XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtYW5nZWxsaXN0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWFuZ2xlLWRvdWJsZS1kb3duXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFycm93c1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWFuZ2xlLWRvdWJsZS1sZWZ0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFycm93c1wiLCBcImJhY2tcIiwgXCJsYXF1b1wiLCBcInByZXZpb3VzXCIsIFwicXVvdGVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1hbmdsZS1kb3VibGUtcmlnaHRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYXJyb3dzXCIsIFwiZm9yd2FyZFwiLCBcIm5leHRcIiwgXCJxdW90ZVwiLCBcInJhcXVvXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtYW5nbGUtZG91YmxlLXVwXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFycm93c1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWFuZ2xlLWRvd25cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYXJyb3dcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1hbmdsZS1sZWZ0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFycm93XCIsIFwiYmFja1wiLCBcInByZXZpb3VzXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtYW5nbGUtcmlnaHRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYXJyb3dcIiwgXCJmb3J3YXJkXCIsIFwibmV4dFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWFuZ2xlLXVwXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFycm93XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtYW5ncnlcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZGlzYXBwcm92ZVwiLCBcImVtb3RpY29uXCIsIFwiZmFjZVwiLCBcIm1hZFwiLCBcInVwc2V0XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtYW5ncnlcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZGlzYXBwcm92ZVwiLCBcImVtb3RpY29uXCIsIFwiZmFjZVwiLCBcIm1hZFwiLCBcInVwc2V0XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtYW5ncnljcmVhdGl2ZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1hbmd1bGFyXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWFua2hcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYW11bGV0XCIsIFwiY29wcGVyXCIsIFwiY29wdGljIGNocmlzdGlhbml0eVwiLCBcImNvcHRzXCIsIFwiY3J1eCBhbnNhdGFcIiwgXCJlZ3lwdGlhblwiLCBcInZlbnVzXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtYXBwLXN0b3JlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWFwcC1zdG9yZS1pb3NcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtYXBwZXJcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtYXBwbGVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZm9vZFwiLCBcImZydWl0XCIsIFwibWFjXCIsIFwib3N4XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtYXBwbGUtYWx0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImZhbGxcIiwgXCJmb29kXCIsIFwiZnJ1aXRcIiwgXCJmdWppXCIsIFwibWFjaW50b3NoXCIsIFwic2Vhc29uYWxcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1hcHBsZS1wYXlcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtYXJjaGl2ZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJib3hcIiwgXCJwYWNrYWdlXCIsIFwic3RvcmFnZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWFyY2h3YXlcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYXJjXCIsIFwibW9udW1lbnRcIiwgXCJyb2FkXCIsIFwic3RyZWV0XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtYXJyb3ctYWx0LWNpcmNsZS1kb3duXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFycm93LWNpcmNsZS1vLWRvd25cIiwgXCJkb3dubG9hZFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWFycm93LWFsdC1jaXJjbGUtZG93blwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhcnJvdy1jaXJjbGUtby1kb3duXCIsIFwiZG93bmxvYWRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1hcnJvdy1hbHQtY2lyY2xlLWxlZnRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYXJyb3ctY2lyY2xlLW8tbGVmdFwiLCBcImJhY2tcIiwgXCJwcmV2aW91c1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWFycm93LWFsdC1jaXJjbGUtbGVmdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhcnJvdy1jaXJjbGUtby1sZWZ0XCIsIFwiYmFja1wiLCBcInByZXZpb3VzXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtYXJyb3ctYWx0LWNpcmNsZS1yaWdodFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhcnJvdy1jaXJjbGUtby1yaWdodFwiLCBcImZvcndhcmRcIiwgXCJuZXh0XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtYXJyb3ctYWx0LWNpcmNsZS1yaWdodFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhcnJvdy1jaXJjbGUtby1yaWdodFwiLCBcImZvcndhcmRcIiwgXCJuZXh0XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtYXJyb3ctYWx0LWNpcmNsZS11cFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhcnJvdy1jaXJjbGUtby11cFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWFycm93LWFsdC1jaXJjbGUtdXBcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYXJyb3ctY2lyY2xlLW8tdXBcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1hcnJvdy1jaXJjbGUtZG93blwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJkb3dubG9hZFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWFycm93LWNpcmNsZS1sZWZ0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJhY2tcIiwgXCJwcmV2aW91c1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWFycm93LWNpcmNsZS1yaWdodFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJmb3J3YXJkXCIsIFwibmV4dFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWFycm93LWNpcmNsZS11cFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1hcnJvdy1kb3duXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImRvd25sb2FkXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtYXJyb3ctbGVmdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJiYWNrXCIsIFwicHJldmlvdXNcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1hcnJvdy1yaWdodFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJmb3J3YXJkXCIsIFwibmV4dFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWFycm93LXVwXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWFycm93cy1hbHRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYXJyb3dcIiwgXCJhcnJvd3NcIiwgXCJiaWdnZXJcIiwgXCJlbmxhcmdlXCIsIFwiZXhwYW5kXCIsIFwiZnVsbHNjcmVlblwiLCBcIm1vdmVcIiwgXCJwb3NpdGlvblwiLCBcInJlb3JkZXJcIiwgXCJyZXNpemVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1hcnJvd3MtYWx0LWhcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYXJyb3dzLWhcIiwgXCJyZXNpemVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1hcnJvd3MtYWx0LXZcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYXJyb3dzLXZcIiwgXCJyZXNpemVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1hc3Npc3RpdmUtbGlzdGVuaW5nLXN5c3RlbXNcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtYXN0ZXJpc2tcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZGV0YWlsc1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWFzeW1tZXRyaWtcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtYXRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZS1tYWlsXCIsIFwiZW1haWxcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1hdGxhc1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJib29rXCIsIFwiZGlyZWN0aW9uc1wiLCBcImdlb2dyYXBoeVwiLCBcIm1hcFwiLCBcIndheWZpbmRpbmdcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1hdG9tXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImF0aGVpc21cIiwgXCJjaGVtaXN0cnlcIiwgXCJzY2llbmNlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtYXVkaWJsZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1hdWRpby1kZXNjcmlwdGlvblwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1hdXRvcHJlZml4ZXJcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtYXZpYW5leFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1hdmlhdG9cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtYXdhcmRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiaG9ub3JcIiwgXCJwcmFpc2VcIiwgXCJwcml6ZVwiLCBcInJlY29nbml0aW9uXCIsIFwicmliYm9uXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtYXdzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWJhY2tzcGFjZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJjb21tYW5kXCIsIFwiZGVsZXRlXCIsIFwia2V5Ym9hcmRcIiwgXCJ1bmRvXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtYmFja3dhcmRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwicHJldmlvdXNcIiwgXCJyZXdpbmRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1iYWxhbmNlLXNjYWxlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJhbGFuY2VkXCIsIFwianVzdGljZVwiLCBcImxlZ2FsXCIsIFwibWVhc3VyZVwiLCBcIndlaWdodFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWJhblwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhYm9ydFwiLCBcImJhblwiLCBcImJsb2NrXCIsIFwiY2FuY2VsXCIsIFwiZGVsZXRlXCIsIFwiaGlkZVwiLCBcInByb2hpYml0XCIsIFwicmVtb3ZlXCIsIFwic3RvcFwiLCBcInRyYXNoXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtYmFuZC1haWRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYmFuZGFnZVwiLCBcImJvbyBib29cIiwgXCJvdWNoXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtYmFuZGNhbXBcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtYmFyY29kZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJzY2FuXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtYmFyc1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJjaGVja2xpc3RcIiwgXCJkcmFnXCIsIFwiaGFtYnVyZ2VyXCIsIFwibGlzdFwiLCBcIm1lbnVcIiwgXCJuYXZcIiwgXCJuYXZpZ2F0aW9uXCIsIFwib2xcIiwgXCJyZW9yZGVyXCIsIFwic2V0dGluZ3NcIiwgXCJ0b2RvXCIsIFwidWxcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1iYXNlYmFsbC1iYWxsXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWJhc2tldGJhbGwtYmFsbFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1iYXRoXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWJhdHRlcnktZW1wdHlcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwicG93ZXJcIiwgXCJzdGF0dXNcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1iYXR0ZXJ5LWZ1bGxcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwicG93ZXJcIiwgXCJzdGF0dXNcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1iYXR0ZXJ5LWhhbGZcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwicG93ZXJcIiwgXCJzdGF0dXNcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1iYXR0ZXJ5LXF1YXJ0ZXJcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwicG93ZXJcIiwgXCJzdGF0dXNcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1iYXR0ZXJ5LXRocmVlLXF1YXJ0ZXJzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcInBvd2VyXCIsIFwic3RhdHVzXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtYmVkXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImxvZGdpbmdcIiwgXCJzbGVlcFwiLCBcInRyYXZlbFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWJlZXJcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYWxjb2hvbFwiLCBcImJhclwiLCBcImJldmVyYWdlXCIsIFwiZHJpbmtcIiwgXCJsaXF1b3JcIiwgXCJtdWdcIiwgXCJzdGVpblwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWJlaGFuY2VcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtYmVoYW5jZS1zcXVhcmVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtYmVsbFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhbGVydFwiLCBcIm5vdGlmaWNhdGlvblwiLCBcInJlbWluZGVyXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtYmVsbFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhbGVydFwiLCBcIm5vdGlmaWNhdGlvblwiLCBcInJlbWluZGVyXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtYmVsbC1zbGFzaFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1iZWxsLXNsYXNoXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWJlemllci1jdXJ2ZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJjdXJ2ZXNcIiwgXCJpbGx1c3RyYXRvclwiLCBcImxpbmVzXCIsIFwicGF0aFwiLCBcInZlY3RvclwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWJpYmxlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJvb2tcIiwgXCJjYXRob2xpY2lzbVwiLCBcImNocmlzdGlhbml0eVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWJpY3ljbGVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYmlrZVwiLCBcImdlYXJzXCIsIFwidHJhbnNwb3J0YXRpb25cIiwgXCJ2ZWhpY2xlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtYmltb2JqZWN0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWJpbm9jdWxhcnNcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtYmlydGhkYXktY2FrZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1iaXRidWNrZXRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYml0YnVja2V0LXNxdWFyZVwiLCBcImdpdFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWJpdGNvaW5cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtYml0eVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1ibGFjay10aWVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtYmxhY2tiZXJyeVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1ibGVuZGVyXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWJsZW5kZXItcGhvbmVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYXBwbGlhbmNlXCIsIFwiZmFudGFzeVwiLCBcInNpbGx5XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtYmxpbmRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtYmxvZ2dlclwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1ibG9nZ2VyLWJcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtYmx1ZXRvb3RoXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWJsdWV0b290aC1iXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWJvbGRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtYm9sdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJlbGVjdHJpY2l0eVwiLCBcImxpZ2h0bmluZ1wiLCBcIndlYXRoZXJcIiwgXCJ6YXBcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1ib21iXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWJvbmVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtYm9uZ1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhcGFyYXR1c1wiLCBcImNhbm5hYmlzXCIsIFwibWFyaWp1YW5hXCIsIFwicGlwZVwiLCBcInNtb2tlXCIsIFwic21va2luZ1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWJvb2tcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZG9jdW1lbnRhdGlvblwiLCBcInJlYWRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1ib29rLWRlYWRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiRHVuZ2VvbnMgJiBEcmFnb25zXCIsIFwiY3Jvc3Nib25lc1wiLCBcImQmZFwiLCBcImRhcmsgYXJ0c1wiLCBcImRlYXRoXCIsIFwiZG5kXCIsIFwiZG9jdW1lbnRhdGlvblwiLCBcImV2aWxcIiwgXCJmYW50YXN5XCIsIFwiaGFsbG93ZWVuXCIsIFwiaG9saWRheVwiLCBcInJlYWRcIiwgXCJza3VsbFwiLCBcInNwZWxsXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtYm9vay1vcGVuXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImZseWVyXCIsIFwibm90ZWJvb2tcIiwgXCJvcGVuIGJvb2tcIiwgXCJwYW1waGxldFwiLCBcInJlYWRpbmdcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1ib29rLXJlYWRlclwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJsaWJyYXJ5XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtYm9va21hcmtcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwic2F2ZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWJvb2ttYXJrXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcInNhdmVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1ib3dsaW5nLWJhbGxcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtYm94XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcInBhY2thZ2VcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1ib3gtb3BlblwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1ib3hlc1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1icmFpbGxlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWJyYWluXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImNlcmViZWxsdW1cIiwgXCJncmF5IG1hdHRlclwiLCBcImludGVsbGVjdFwiLCBcIm1lZHVsbGEgb2Jsb25nYXRhXCIsIFwibWluZFwiLCBcIm5vb2RsZVwiLCBcIndpdFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWJyaWVmY2FzZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJiYWdcIiwgXCJidXNpbmVzc1wiLCBcImx1Z2dhZ2VcIiwgXCJvZmZpY2VcIiwgXCJ3b3JrXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtYnJpZWZjYXNlLW1lZGljYWxcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiaGVhbHRoIGJyaWVmY2FzZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWJyb2FkY2FzdC10b3dlclwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhaXJ3YXZlc1wiLCBcInJhZGlvXCIsIFwid2F2ZXNcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1icm9vbVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJjbGVhblwiLCBcImZpcmVib2x0XCIsIFwiZmx5XCIsIFwiaGFsbG93ZWVuXCIsIFwiaG9saWRheVwiLCBcIm5pbWJ1cyAyMDAwXCIsIFwicXVpZGRpdGNoXCIsIFwic3dlZXBcIiwgXCJ3aXRjaFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWJydXNoXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJyaXN0bGVzXCIsIFwiY29sb3JcIiwgXCJoYW5kbGVcIiwgXCJwYWludGluZ1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWJ0Y1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1idWdcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiaW5zZWN0XCIsIFwicmVwb3J0XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtYnVpbGRpbmdcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYXBhcnRtZW50XCIsIFwiYnVzaW5lc3NcIiwgXCJjb21wYW55XCIsIFwib2ZmaWNlXCIsIFwid29ya1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWJ1aWxkaW5nXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFwYXJ0bWVudFwiLCBcImJ1c2luZXNzXCIsIFwiY29tcGFueVwiLCBcIm9mZmljZVwiLCBcIndvcmtcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1idWxsaG9yblwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhbm5vdW5jZW1lbnRcIiwgXCJicm9hZGNhc3RcIiwgXCJsb3VkZXJcIiwgXCJtZWdhcGhvbmVcIiwgXCJzaGFyZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWJ1bGxzZXllXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcInRhcmdldFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWJ1cm5cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZW5lcmd5XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtYnVyb21vYmVsZXhwZXJ0ZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1idXNcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwibWFjaGluZVwiLCBcInB1YmxpYyB0cmFuc3BvcnRhdGlvblwiLCBcInRyYW5zcG9ydGF0aW9uXCIsIFwidmVoaWNsZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWJ1cy1hbHRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwibWFjaGluZVwiLCBcInB1YmxpYyB0cmFuc3BvcnRhdGlvblwiLCBcInRyYW5zcG9ydGF0aW9uXCIsIFwidmVoaWNsZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWJ1c2luZXNzLXRpbWVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYnJpZWZjYXNlXCIsIFwiYnVzaW5lc3Mgc29ja3NcIiwgXCJjbG9ja1wiLCBcImZsaWdodCBvZiB0aGUgY29uY2hvcmRzXCIsIFwid2VkbmVzZGF5XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtYnV5c2VsbGFkc1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jYWxjdWxhdG9yXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWNhbGVuZGFyXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImNhbGVuZGFyLW9cIiwgXCJkYXRlXCIsIFwiZXZlbnRcIiwgXCJzY2hlZHVsZVwiLCBcInRpbWVcIiwgXCJ3aGVuXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtY2FsZW5kYXJcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY2FsZW5kYXItb1wiLCBcImRhdGVcIiwgXCJldmVudFwiLCBcInNjaGVkdWxlXCIsIFwidGltZVwiLCBcIndoZW5cIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jYWxlbmRhci1hbHRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY2FsZW5kYXJcIiwgXCJkYXRlXCIsIFwiZXZlbnRcIiwgXCJzY2hlZHVsZVwiLCBcInRpbWVcIiwgXCJ3aGVuXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtY2FsZW5kYXItYWx0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImNhbGVuZGFyXCIsIFwiZGF0ZVwiLCBcImV2ZW50XCIsIFwic2NoZWR1bGVcIiwgXCJ0aW1lXCIsIFwid2hlblwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWNhbGVuZGFyLWNoZWNrXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFjY2VwdFwiLCBcImFncmVlXCIsIFwiYXBwb2ludG1lbnRcIiwgXCJjb25maXJtXCIsIFwiY29ycmVjdFwiLCBcImRvbmVcIiwgXCJva1wiLCBcInNlbGVjdFwiLCBcInN1Y2Nlc3NcIiwgXCJ0b2RvXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtY2FsZW5kYXItY2hlY2tcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYWNjZXB0XCIsIFwiYWdyZWVcIiwgXCJhcHBvaW50bWVudFwiLCBcImNvbmZpcm1cIiwgXCJjb3JyZWN0XCIsIFwiZG9uZVwiLCBcIm9rXCIsIFwic2VsZWN0XCIsIFwic3VjY2Vzc1wiLCBcInRvZG9cIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jYWxlbmRhci1taW51c1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJkZWxldGVcIiwgXCJuZWdhdGl2ZVwiLCBcInJlbW92ZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWNhbGVuZGFyLW1pbnVzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImRlbGV0ZVwiLCBcIm5lZ2F0aXZlXCIsIFwicmVtb3ZlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtY2FsZW5kYXItcGx1c1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhZGRcIiwgXCJjcmVhdGVcIiwgXCJuZXdcIiwgXCJwb3NpdGl2ZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWNhbGVuZGFyLXBsdXNcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYWRkXCIsIFwiY3JlYXRlXCIsIFwibmV3XCIsIFwicG9zaXRpdmVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jYWxlbmRhci10aW1lc1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhcmNoaXZlXCIsIFwiZGVsZXRlXCIsIFwicmVtb3ZlXCIsIFwieFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWNhbGVuZGFyLXRpbWVzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFyY2hpdmVcIiwgXCJkZWxldGVcIiwgXCJyZW1vdmVcIiwgXCJ4XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtY2FtZXJhXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcInBob3RvXCIsIFwicGljdHVyZVwiLCBcInJlY29yZFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWNhbWVyYS1yZXRyb1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJwaG90b1wiLCBcInBpY3R1cmVcIiwgXCJyZWNvcmRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jYW1wZ3JvdW5kXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImNhbXBpbmdcIiwgXCJmYWxsXCIsIFwib3V0ZG9vcnNcIiwgXCJzZWFzb25hbFwiLCBcInRlbnRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jYW5uYWJpc1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJidWRcIiwgXCJjaHJvbmljXCIsIFwiZHJ1Z3NcIiwgXCJlbmRpY2FcIiwgXCJlbmRvXCIsIFwiZ2FuamFcIiwgXCJtYXJpanVhbmFcIiwgXCJtYXJ5IGphbmVcIiwgXCJwb3RcIiwgXCJyZWVmZXJcIiwgXCJzYXRpdmFcIiwgXCJzcGxpZmZcIiwgXCJ3ZWVkXCIsIFwid2hhY2t5LXRhYmFja3lcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jYXBzdWxlc1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJkcnVnc1wiLCBcIm1lZGljaW5lXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtY2FyXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcIm1hY2hpbmVcIiwgXCJ0cmFuc3BvcnRhdGlvblwiLCBcInZlaGljbGVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jYXItYWx0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWNhci1iYXR0ZXJ5XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWNhci1jcmFzaFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jYXItc2lkZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jYXJldC1kb3duXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFycm93XCIsIFwiZHJvcGRvd25cIiwgXCJtZW51XCIsIFwibW9yZVwiLCBcInRyaWFuZ2xlIGRvd25cIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jYXJldC1sZWZ0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFycm93XCIsIFwiYmFja1wiLCBcInByZXZpb3VzXCIsIFwidHJpYW5nbGUgbGVmdFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWNhcmV0LXJpZ2h0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFycm93XCIsIFwiZm9yd2FyZFwiLCBcIm5leHRcIiwgXCJ0cmlhbmdsZSByaWdodFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWNhcmV0LXNxdWFyZS1kb3duXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImNhcmV0LXNxdWFyZS1vLWRvd25cIiwgXCJkcm9wZG93blwiLCBcIm1lbnVcIiwgXCJtb3JlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtY2FyZXQtc3F1YXJlLWRvd25cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY2FyZXQtc3F1YXJlLW8tZG93blwiLCBcImRyb3Bkb3duXCIsIFwibWVudVwiLCBcIm1vcmVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jYXJldC1zcXVhcmUtbGVmdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJiYWNrXCIsIFwiY2FyZXQtc3F1YXJlLW8tbGVmdFwiLCBcInByZXZpb3VzXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtY2FyZXQtc3F1YXJlLWxlZnRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYmFja1wiLCBcImNhcmV0LXNxdWFyZS1vLWxlZnRcIiwgXCJwcmV2aW91c1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWNhcmV0LXNxdWFyZS1yaWdodFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJjYXJldC1zcXVhcmUtby1yaWdodFwiLCBcImZvcndhcmRcIiwgXCJuZXh0XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtY2FyZXQtc3F1YXJlLXJpZ2h0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImNhcmV0LXNxdWFyZS1vLXJpZ2h0XCIsIFwiZm9yd2FyZFwiLCBcIm5leHRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jYXJldC1zcXVhcmUtdXBcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY2FyZXQtc3F1YXJlLW8tdXBcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1jYXJldC1zcXVhcmUtdXBcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY2FyZXQtc3F1YXJlLW8tdXBcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jYXJldC11cFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhcnJvd1wiLCBcInRyaWFuZ2xlIHVwXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtY2FydC1hcnJvdy1kb3duXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcInNob3BwaW5nXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtY2FydC1wbHVzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFkZFwiLCBcImNyZWF0ZVwiLCBcIm5ld1wiLCBcInBvc2l0aXZlXCIsIFwic2hvcHBpbmdcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jYXRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZmVsaW5lXCIsIFwiaGFsbG93ZWVuXCIsIFwiaG9saWRheVwiLCBcImtpdHRlblwiLCBcImtpdHR5XCIsIFwibWVvd1wiLCBcInBldFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWNjLWFtYXpvbi1wYXlcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtY2MtYW1leFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhbWV4XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtY2MtYXBwbGUtcGF5XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWNjLWRpbmVycy1jbHViXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWNjLWRpc2NvdmVyXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWNjLWpjYlwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1jYy1tYXN0ZXJjYXJkXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWNjLXBheXBhbFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1jYy1zdHJpcGVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtY2MtdmlzYVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1jZW50ZXJjb2RlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWNlcnRpZmljYXRlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJhZGdlXCIsIFwic3RhclwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWNoYWlyXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImZ1cm5pdHVyZVwiLCBcInNlYXRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jaGFsa2JvYXJkXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJsYWNrYm9hcmRcIiwgXCJsZWFybmluZ1wiLCBcInNjaG9vbFwiLCBcInRlYWNoaW5nXCIsIFwid2hpdGVib2FyZFwiLCBcIndyaXRpbmdcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jaGFsa2JvYXJkLXRlYWNoZXJcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYmxhY2tib2FyZFwiLCBcImluc3RydWN0b3JcIiwgXCJsZWFybmluZ1wiLCBcInByb2Zlc3NvclwiLCBcInNjaG9vbFwiLCBcIndoaXRlYm9hcmRcIiwgXCJ3cml0aW5nXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtY2hhcmdpbmctc3RhdGlvblwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jaGFydC1hcmVhXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFuYWx5dGljc1wiLCBcImFyZWEtY2hhcnRcIiwgXCJncmFwaFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWNoYXJ0LWJhclwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhbmFseXRpY3NcIiwgXCJiYXItY2hhcnRcIiwgXCJncmFwaFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWNoYXJ0LWJhclwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhbmFseXRpY3NcIiwgXCJiYXItY2hhcnRcIiwgXCJncmFwaFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWNoYXJ0LWxpbmVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYWN0aXZpdHlcIiwgXCJhbmFseXRpY3NcIiwgXCJkYXNoYm9hcmRcIiwgXCJncmFwaFwiLCBcImxpbmUtY2hhcnRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jaGFydC1waWVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYW5hbHl0aWNzXCIsIFwiZ3JhcGhcIiwgXCJwaWUtY2hhcnRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jaGVja1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhY2NlcHRcIiwgXCJhZ3JlZVwiLCBcImNoZWNrbWFya1wiLCBcImNvbmZpcm1cIiwgXCJjb3JyZWN0XCIsIFwiZG9uZVwiLCBcIm5vdGljZVwiLCBcIm5vdGlmaWNhdGlvblwiLCBcIm5vdGlmeVwiLCBcIm9rXCIsIFwic2VsZWN0XCIsIFwic3VjY2Vzc1wiLCBcInRpY2tcIiwgXCJ0b2RvXCIsIFwieWVzXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtY2hlY2stY2lyY2xlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFjY2VwdFwiLCBcImFncmVlXCIsIFwiY29uZmlybVwiLCBcImNvcnJlY3RcIiwgXCJkb25lXCIsIFwib2tcIiwgXCJzZWxlY3RcIiwgXCJzdWNjZXNzXCIsIFwidG9kb1wiLCBcInllc1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWNoZWNrLWNpcmNsZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhY2NlcHRcIiwgXCJhZ3JlZVwiLCBcImNvbmZpcm1cIiwgXCJjb3JyZWN0XCIsIFwiZG9uZVwiLCBcIm9rXCIsIFwic2VsZWN0XCIsIFwic3VjY2Vzc1wiLCBcInRvZG9cIiwgXCJ5ZXNcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jaGVjay1kb3VibGVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYWNjZXB0XCIsIFwiYWdyZWVcIiwgXCJjaGVja21hcmtcIiwgXCJjb25maXJtXCIsIFwiY29ycmVjdFwiLCBcImRvbmVcIiwgXCJub3RpY2VcIiwgXCJub3RpZmljYXRpb25cIiwgXCJub3RpZnlcIiwgXCJva1wiLCBcInNlbGVjdFwiLCBcInN1Y2Nlc3NcIiwgXCJ0aWNrXCIsIFwidG9kb1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWNoZWNrLXNxdWFyZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhY2NlcHRcIiwgXCJhZ3JlZVwiLCBcImNoZWNrbWFya1wiLCBcImNvbmZpcm1cIiwgXCJjb3JyZWN0XCIsIFwiZG9uZVwiLCBcIm9rXCIsIFwic2VsZWN0XCIsIFwic3VjY2Vzc1wiLCBcInRvZG9cIiwgXCJ5ZXNcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1jaGVjay1zcXVhcmVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYWNjZXB0XCIsIFwiYWdyZWVcIiwgXCJjaGVja21hcmtcIiwgXCJjb25maXJtXCIsIFwiY29ycmVjdFwiLCBcImRvbmVcIiwgXCJva1wiLCBcInNlbGVjdFwiLCBcInN1Y2Nlc3NcIiwgXCJ0b2RvXCIsIFwieWVzXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtY2hlc3NcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtY2hlc3MtYmlzaG9wXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWNoZXNzLWJvYXJkXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWNoZXNzLWtpbmdcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtY2hlc3Mta25pZ2h0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWNoZXNzLXBhd25cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtY2hlc3MtcXVlZW5cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtY2hlc3Mtcm9va1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jaGV2cm9uLWNpcmNsZS1kb3duXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFycm93XCIsIFwiZHJvcGRvd25cIiwgXCJtZW51XCIsIFwibW9yZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWNoZXZyb24tY2lyY2xlLWxlZnRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYXJyb3dcIiwgXCJiYWNrXCIsIFwicHJldmlvdXNcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jaGV2cm9uLWNpcmNsZS1yaWdodFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhcnJvd1wiLCBcImZvcndhcmRcIiwgXCJuZXh0XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtY2hldnJvbi1jaXJjbGUtdXBcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYXJyb3dcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jaGV2cm9uLWRvd25cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtY2hldnJvbi1sZWZ0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJhY2tcIiwgXCJicmFja2V0XCIsIFwicHJldmlvdXNcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jaGV2cm9uLXJpZ2h0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJyYWNrZXRcIiwgXCJmb3J3YXJkXCIsIFwibmV4dFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWNoZXZyb24tdXBcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtY2hpbGRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtY2hyb21lXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJyb3dzZXJcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jaHVyY2hcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYnVpbGRpbmdcIiwgXCJjb21tdW5pdHlcIiwgXCJyZWxpZ2lvblwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWNpcmNsZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJjaXJjbGUtdGhpblwiLCBcImRvdFwiLCBcIm5vdGlmaWNhdGlvblwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWNpcmNsZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJjaXJjbGUtdGhpblwiLCBcImRvdFwiLCBcIm5vdGlmaWNhdGlvblwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWNpcmNsZS1ub3RjaFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJjaXJjbGUtby1ub3RjaFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWNpdHlcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYnVpbGRpbmdzXCIsIFwiYnVzeVwiLCBcInNreXNjcmFwZXJzXCIsIFwidXJiYW5cIiwgXCJ3aW5kb3dzXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtY2xpcGJvYXJkXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcInBhc3RlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtY2xpcGJvYXJkXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcInBhc3RlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtY2xpcGJvYXJkLWNoZWNrXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFjY2VwdFwiLCBcImFncmVlXCIsIFwiY29uZmlybVwiLCBcImRvbmVcIiwgXCJva1wiLCBcInNlbGVjdFwiLCBcInN1Y2Nlc3NcIiwgXCJ0b2RvXCIsIFwieWVzXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtY2xpcGJvYXJkLWxpc3RcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY2hlY2tsaXN0XCIsIFwiY29tcGxldGVkXCIsIFwiZG9uZVwiLCBcImZpbmlzaGVkXCIsIFwiaW50aW5lcmFyeVwiLCBcIm9sXCIsIFwic2NoZWR1bGVcIiwgXCJ0b2RvXCIsIFwidWxcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jbG9ja1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJkYXRlXCIsIFwibGF0ZVwiLCBcInNjaGVkdWxlXCIsIFwidGltZXJcIiwgXCJ0aW1lc3RhbXBcIiwgXCJ3YXRjaFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWNsb2NrXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImRhdGVcIiwgXCJsYXRlXCIsIFwic2NoZWR1bGVcIiwgXCJ0aW1lclwiLCBcInRpbWVzdGFtcFwiLCBcIndhdGNoXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtY2xvbmVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY29weVwiLCBcImR1cGxpY2F0ZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWNsb25lXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImNvcHlcIiwgXCJkdXBsaWNhdGVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jbG9zZWQtY2FwdGlvbmluZ1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJjY1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWNsb3NlZC1jYXB0aW9uaW5nXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImNjXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtY2xvdWRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwic2F2ZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWNsb3VkLWRvd25sb2FkLWFsdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJpbXBvcnRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jbG91ZC1tZWF0YmFsbFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jbG91ZC1tb29uXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImNyZXNjZW50XCIsIFwiZXZlbmluZ1wiLCBcImhhbGxvd2VlblwiLCBcImhvbGlkYXlcIiwgXCJsdW5hclwiLCBcIm5pZ2h0XCIsIFwic2t5XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtY2xvdWQtbW9vbi1yYWluXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWNsb3VkLXJhaW5cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwicHJlY2lwaXRhdGlvblwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWNsb3VkLXNob3dlcnMtaGVhdnlcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwicHJlY2lwaXRhdGlvblwiLCBcInJhaW5cIiwgXCJzdG9ybVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWNsb3VkLXN1blwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJkYXlcIiwgXCJkYXl0aW1lXCIsIFwiZmFsbFwiLCBcIm91dGRvb3JzXCIsIFwic2Vhc29uYWxcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jbG91ZC1zdW4tcmFpblwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jbG91ZC11cGxvYWQtYWx0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImNsb3VkLXVwbG9hZFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWNsb3Vkc2NhbGVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtY2xvdWRzbWl0aFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1jbG91ZHZlcnNpZnlcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtY29ja3RhaWxcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYWxjb2hvbFwiLCBcImJldmVyYWdlXCIsIFwiZHJpbmtcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jb2RlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJyYWNrZXRzXCIsIFwiaHRtbFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWNvZGUtYnJhbmNoXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJyYW5jaFwiLCBcImNvZGUtZm9ya1wiLCBcImZvcmtcIiwgXCJnaXRcIiwgXCJnaXRodWJcIiwgXCJyZWJhc2VcIiwgXCJzdm5cIiwgXCJ2Y3NcIiwgXCJ2ZXJzaW9uXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtY29kZXBlblwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1jb2RpZXBpZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jb2ZmZWVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYmV2ZXJhZ2VcIiwgXCJicmVha2Zhc3RcIiwgXCJjYWZlXCIsIFwiZHJpbmtcIiwgXCJmYWxsXCIsIFwibW9ybmluZ1wiLCBcIm11Z1wiLCBcInNlYXNvbmFsXCIsIFwidGVhXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtY29nXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcInNldHRpbmdzXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtY29nc1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJnZWFyc1wiLCBcInNldHRpbmdzXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtY29pbnNcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtY29sdW1uc1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJkYXNoYm9hcmRcIiwgXCJwYW5lc1wiLCBcInNwbGl0XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtY29tbWVudFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJidWJibGVcIiwgXCJjaGF0XCIsIFwiY29udmVyc2F0aW9uXCIsIFwiZmVlZGJhY2tcIiwgXCJtZXNzYWdlXCIsIFwibm90ZVwiLCBcIm5vdGlmaWNhdGlvblwiLCBcInNtc1wiLCBcInNwZWVjaFwiLCBcInRleHRpbmdcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1jb21tZW50XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJ1YmJsZVwiLCBcImNoYXRcIiwgXCJjb252ZXJzYXRpb25cIiwgXCJmZWVkYmFja1wiLCBcIm1lc3NhZ2VcIiwgXCJub3RlXCIsIFwibm90aWZpY2F0aW9uXCIsIFwic21zXCIsIFwic3BlZWNoXCIsIFwidGV4dGluZ1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWNvbW1lbnQtYWx0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJ1YmJsZVwiLCBcImNoYXRcIiwgXCJjb21tZW50aW5nXCIsIFwiY29udmVyc2F0aW9uXCIsIFwiZmVlZGJhY2tcIiwgXCJtZXNzYWdlXCIsIFwibm90ZVwiLCBcIm5vdGlmaWNhdGlvblwiLCBcInNtc1wiLCBcInNwZWVjaFwiLCBcInRleHRpbmdcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1jb21tZW50LWFsdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJidWJibGVcIiwgXCJjaGF0XCIsIFwiY29tbWVudGluZ1wiLCBcImNvbnZlcnNhdGlvblwiLCBcImZlZWRiYWNrXCIsIFwibWVzc2FnZVwiLCBcIm5vdGVcIiwgXCJub3RpZmljYXRpb25cIiwgXCJzbXNcIiwgXCJzcGVlY2hcIiwgXCJ0ZXh0aW5nXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtY29tbWVudC1kb2xsYXJcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtY29tbWVudC1kb3RzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWNvbW1lbnQtZG90c1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jb21tZW50LXNsYXNoXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWNvbW1lbnRzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJ1YmJsZVwiLCBcImNoYXRcIiwgXCJjb252ZXJzYXRpb25cIiwgXCJmZWVkYmFja1wiLCBcIm1lc3NhZ2VcIiwgXCJub3RlXCIsIFwibm90aWZpY2F0aW9uXCIsIFwic21zXCIsIFwic3BlZWNoXCIsIFwidGV4dGluZ1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWNvbW1lbnRzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJ1YmJsZVwiLCBcImNoYXRcIiwgXCJjb252ZXJzYXRpb25cIiwgXCJmZWVkYmFja1wiLCBcIm1lc3NhZ2VcIiwgXCJub3RlXCIsIFwibm90aWZpY2F0aW9uXCIsIFwic21zXCIsIFwic3BlZWNoXCIsIFwidGV4dGluZ1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWNvbW1lbnRzLWRvbGxhclwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jb21wYWN0LWRpc2NcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYmx1cmF5XCIsIFwiY2RcIiwgXCJkaXNjXCIsIFwibWVkaWFcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jb21wYXNzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImRpcmVjdG9yeVwiLCBcImxvY2F0aW9uXCIsIFwibWVudVwiLCBcInNhZmFyaVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWNvbXBhc3NcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZGlyZWN0b3J5XCIsIFwibG9jYXRpb25cIiwgXCJtZW51XCIsIFwic2FmYXJpXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtY29tcHJlc3NcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY29sbGFwc2VcIiwgXCJjb21iaW5lXCIsIFwiY29udHJhY3RcIiwgXCJtZXJnZVwiLCBcInNtYWxsZXJcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jb25jaWVyZ2UtYmVsbFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhdHRlbnRpb25cIiwgXCJob3RlbFwiLCBcInNlcnZpY2VcIiwgXCJzdXBwb3J0XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtY29ubmVjdGRldmVsb3BcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtY29udGFvXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWNvb2tpZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJiYWtlZCBnb29kXCIsIFwiY2hpcHNcIiwgXCJmb29kXCIsIFwic25hY2tcIiwgXCJzd2VldFwiLCBcInRyZWF0XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtY29va2llLWJpdGVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYmFrZWQgZ29vZFwiLCBcImJpdHRlblwiLCBcImNoaXBzXCIsIFwiZWF0aW5nXCIsIFwiZm9vZFwiLCBcInNuYWNrXCIsIFwic3dlZXRcIiwgXCJ0cmVhdFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWNvcHlcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY2xvbmVcIiwgXCJkdXBsaWNhdGVcIiwgXCJmaWxlXCIsIFwiZmlsZXMtb1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWNvcHlcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY2xvbmVcIiwgXCJkdXBsaWNhdGVcIiwgXCJmaWxlXCIsIFwiZmlsZXMtb1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWNvcHlyaWdodFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1jb3B5cmlnaHRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtY291Y2hcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZnVybml0dXJlXCIsIFwic29mYVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWNwYW5lbFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1jcmVhdGl2ZS1jb21tb25zXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWNyZWF0aXZlLWNvbW1vbnMtYnlcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtY3JlYXRpdmUtY29tbW9ucy1uY1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1jcmVhdGl2ZS1jb21tb25zLW5jLWV1XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWNyZWF0aXZlLWNvbW1vbnMtbmMtanBcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtY3JlYXRpdmUtY29tbW9ucy1uZFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1jcmVhdGl2ZS1jb21tb25zLXBkXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWNyZWF0aXZlLWNvbW1vbnMtcGQtYWx0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWNyZWF0aXZlLWNvbW1vbnMtcmVtaXhcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtY3JlYXRpdmUtY29tbW9ucy1zYVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1jcmVhdGl2ZS1jb21tb25zLXNhbXBsaW5nXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWNyZWF0aXZlLWNvbW1vbnMtc2FtcGxpbmctcGx1c1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1jcmVhdGl2ZS1jb21tb25zLXNoYXJlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWNyZWF0aXZlLWNvbW1vbnMtemVyb1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jcmVkaXQtY2FyZFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJidXlcIiwgXCJjaGVja291dFwiLCBcImNyZWRpdC1jYXJkLWFsdFwiLCBcImRlYml0XCIsIFwibW9uZXlcIiwgXCJwYXltZW50XCIsIFwicHVyY2hhc2VcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1jcmVkaXQtY2FyZFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJidXlcIiwgXCJjaGVja291dFwiLCBcImNyZWRpdC1jYXJkLWFsdFwiLCBcImRlYml0XCIsIFwibW9uZXlcIiwgXCJwYXltZW50XCIsIFwicHVyY2hhc2VcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1jcml0aWNhbC1yb2xlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcIkR1bmdlb25zICYgRHJhZ29uc1wiLCBcImQmZFwiLCBcImRuZFwiLCBcImZhbnRhc3lcIiwgXCJnYW1lXCIsIFwiZ2FtaW5nXCIsIFwidGFibGV0b3BcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1jcm9wXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImRlc2lnblwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWNyb3AtYWx0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWNyb3NzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImNhdGhvbGljaXNtXCIsIFwiY2hyaXN0aWFuaXR5XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtY3Jvc3NoYWlyc1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJncGRcIiwgXCJwaWNrZXJcIiwgXCJwb3NpdGlvblwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWNyb3dcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYmlyZFwiLCBcImJ1bGxmcm9nXCIsIFwiZmF1bmFcIiwgXCJoYWxsb3dlZW5cIiwgXCJob2xpZGF5XCIsIFwidG9hZFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWNyb3duXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWNzczNcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY29kZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWNzczMtYWx0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWN1YmVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwicGFja2FnZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWN1YmVzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcInBhY2thZ2VzXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtY3V0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcInNjaXNzb3JzXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtY3V0dGxlZmlzaFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1kLWFuZC1kXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWQtYW5kLWQtYmV5b25kXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcIkR1bmdlb25zICYgRHJhZ29uc1wiLCBcImQmZFwiLCBcImRuZFwiLCBcImZhbnRhc3lcIiwgXCJnYW1pbmdcIiwgXCJ0YWJsZXRvcFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWRhc2hjdWJlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWRhdGFiYXNlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWRlYWZcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtZGVsaWNpb3VzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWRlbW9jcmF0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFtZXJpY2FuXCIsIFwiZGVtb2NyYXRpYyBwYXJ0eVwiLCBcImRvbmtleVwiLCBcImVsZWN0aW9uXCIsIFwibGVmdFwiLCBcImxlZnQtd2luZ1wiLCBcImxpYmVyYWxcIiwgXCJwb2xpdGljc1wiLCBcInVzYVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWRlcGxveWRvZ1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1kZXNrcHJvXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWRlc2t0b3BcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY29tcHV0ZXJcIiwgXCJjcHVcIiwgXCJkZW1vXCIsIFwiZGVza3RvcFwiLCBcImRldmljZVwiLCBcIm1hY2hpbmVcIiwgXCJtb25pdG9yXCIsIFwicGNcIiwgXCJzY3JlZW5cIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1kZXZcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtZGV2aWFudGFydFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1kaGFybWFjaGFrcmFcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYnVkZGhpc21cIiwgXCJidWRkaGlzdFwiLCBcIndoZWVsIG9mIGRoYXJtYVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWRpYWdub3Nlc1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1kaWNlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImNoYW5jZVwiLCBcImdhbWJsaW5nXCIsIFwiZ2FtZVwiLCBcInJvbGxcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1kaWNlLWQyMFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJEdW5nZW9ucyAmIERyYWdvbnNcIiwgXCJjaGFuY2VcIiwgXCJkJmRcIiwgXCJkbmRcIiwgXCJmYW50YXN5XCIsIFwiZ2FtYmxpbmdcIiwgXCJnYW1lXCIsIFwicm9sbFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWRpY2UtZDZcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiRHVuZ2VvbnMgJiBEcmFnb25zXCIsIFwiY2hhbmNlXCIsIFwiZCZkXCIsIFwiZG5kXCIsIFwiZmFudGFzeVwiLCBcImdhbWJsaW5nXCIsIFwiZ2FtZVwiLCBcInJvbGxcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1kaWNlLWZpdmVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY2hhbmNlXCIsIFwiZ2FtYmxpbmdcIiwgXCJnYW1lXCIsIFwicm9sbFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWRpY2UtZm91clwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJjaGFuY2VcIiwgXCJnYW1ibGluZ1wiLCBcImdhbWVcIiwgXCJyb2xsXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZGljZS1vbmVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY2hhbmNlXCIsIFwiZ2FtYmxpbmdcIiwgXCJnYW1lXCIsIFwicm9sbFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWRpY2Utc2l4XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImNoYW5jZVwiLCBcImdhbWJsaW5nXCIsIFwiZ2FtZVwiLCBcInJvbGxcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1kaWNlLXRocmVlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImNoYW5jZVwiLCBcImdhbWJsaW5nXCIsIFwiZ2FtZVwiLCBcInJvbGxcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1kaWNlLXR3b1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJjaGFuY2VcIiwgXCJnYW1ibGluZ1wiLCBcImdhbWVcIiwgXCJyb2xsXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtZGlnZ1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1kaWdpdGFsLW9jZWFuXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWRpZ2l0YWwtdGFjaG9ncmFwaFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1kaXJlY3Rpb25zXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWRpc2NvcmRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtZGlzY291cnNlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWRpdmlkZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1kaXp6eVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJkYXplZFwiLCBcImRpc2FwcHJvdmVcIiwgXCJlbW90aWNvblwiLCBcImZhY2VcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1kaXp6eVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJkYXplZFwiLCBcImRpc2FwcHJvdmVcIiwgXCJlbW90aWNvblwiLCBcImZhY2VcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1kbmFcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZG91YmxlIGhlbGl4XCIsIFwiaGVsaXhcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1kb2NodWJcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtZG9ja2VyXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWRvZ1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJjYW5pbmVcIiwgXCJmYXVuYVwiLCBcIm1hbW1tYWxcIiwgXCJwZXRcIiwgXCJwb29jaFwiLCBcInB1cHB5XCIsIFwid29vZlwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWRvbGxhci1zaWduXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcIiRcIiwgXCJkb2xsYXItc2lnblwiLCBcIm1vbmV5XCIsIFwicHJpY2VcIiwgXCJ1c2RcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1kb2xseVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1kb2xseS1mbGF0YmVkXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWRvbmF0ZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJnZW5lcm9zaXR5XCIsIFwiZ2l2ZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWRvb3ItY2xvc2VkXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWRvb3Itb3BlblwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1kb3QtY2lyY2xlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJ1bGxzZXllXCIsIFwibm90aWZpY2F0aW9uXCIsIFwidGFyZ2V0XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtZG90LWNpcmNsZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJidWxsc2V5ZVwiLCBcIm5vdGlmaWNhdGlvblwiLCBcInRhcmdldFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWRvdmVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYmlyZFwiLCBcImZhdW5hXCIsIFwiZmx5aW5nXCIsIFwicGVhY2VcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1kb3dubG9hZFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJpbXBvcnRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1kcmFmdDJkaWdpdGFsXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWRyYWZ0aW5nLWNvbXBhc3NcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwibWVjaGFuaWNhbCBkcmF3aW5nXCIsIFwicGxvdFwiLCBcInBsb3R0aW5nXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZHJhZ29uXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcIkR1bmdlb25zICYgRHJhZ29uc1wiLCBcImQmZFwiLCBcImRuZFwiLCBcImZhbnRhc3lcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1kcmF3LXBvbHlnb25cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtZHJpYmJibGVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtZHJpYmJibGUtc3F1YXJlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWRyb3Bib3hcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZHJ1bVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJpbnN0cnVtZW50XCIsIFwibXVzaWNcIiwgXCJwZXJjdXNzaW9uXCIsIFwic25hcmVcIiwgXCJzb3VuZFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWRydW0tc3RlZWxwYW5cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY2FseXBzb1wiLCBcImluc3RydW1lbnRcIiwgXCJtdXNpY1wiLCBcInBlcmN1c3Npb25cIiwgXCJyZWdnYWVcIiwgXCJzbmFyZVwiLCBcInNvdW5kXCIsIFwic3RlZWxcIiwgXCJ0cm9waWNhbFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWRydW1zdGljay1iaXRlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWRydXBhbFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1kdW1iYmVsbFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJleGVyY2lzZVwiLCBcImd5bVwiLCBcInN0cmVuZ3RoXCIsIFwid2VpZ2h0XCIsIFwid2VpZ2h0LWxpZnRpbmdcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1kdW5nZW9uXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcIkR1bmdlb25zICYgRHJhZ29uc1wiLCBcImQmZFwiLCBcImRuZFwiLCBcImRvb3JcIiwgXCJlbnRyYW5jZVwiLCBcImZhbnRhc3lcIiwgXCJnYXRlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtZHlhbG9nXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWVhcmx5YmlyZHNcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtZWJheVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1lZGdlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJyb3dzZXJcIiwgXCJpZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWVkaXRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZWRpdFwiLCBcInBlblwiLCBcInBlbmNpbFwiLCBcInVwZGF0ZVwiLCBcIndyaXRlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtZWRpdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJlZGl0XCIsIFwicGVuXCIsIFwicGVuY2lsXCIsIFwidXBkYXRlXCIsIFwid3JpdGVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1lamVjdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1lbGVtZW50b3JcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZWxsaXBzaXMtaFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJkb3RzXCIsIFwiZHJhZ1wiLCBcImtlYmFiXCIsIFwibGlzdFwiLCBcIm1lbnVcIiwgXCJuYXZcIiwgXCJuYXZpZ2F0aW9uXCIsIFwib2xcIiwgXCJyZW9yZGVyXCIsIFwic2V0dGluZ3NcIiwgXCJ1bFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWVsbGlwc2lzLXZcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZG90c1wiLCBcImRyYWdcIiwgXCJrZWJhYlwiLCBcImxpc3RcIiwgXCJtZW51XCIsIFwibmF2XCIsIFwibmF2aWdhdGlvblwiLCBcIm9sXCIsIFwicmVvcmRlclwiLCBcInNldHRpbmdzXCIsIFwidWxcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1lbGxvXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWVtYmVyXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWVtcGlyZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1lbnZlbG9wZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJlLW1haWxcIiwgXCJlbWFpbFwiLCBcImxldHRlclwiLCBcIm1haWxcIiwgXCJtZXNzYWdlXCIsIFwibm90aWZpY2F0aW9uXCIsIFwic3VwcG9ydFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWVudmVsb3BlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImUtbWFpbFwiLCBcImVtYWlsXCIsIFwibGV0dGVyXCIsIFwibWFpbFwiLCBcIm1lc3NhZ2VcIiwgXCJub3RpZmljYXRpb25cIiwgXCJzdXBwb3J0XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZW52ZWxvcGUtb3BlblwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJlLW1haWxcIiwgXCJlbWFpbFwiLCBcImxldHRlclwiLCBcIm1haWxcIiwgXCJtZXNzYWdlXCIsIFwibm90aWZpY2F0aW9uXCIsIFwic3VwcG9ydFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWVudmVsb3BlLW9wZW5cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZS1tYWlsXCIsIFwiZW1haWxcIiwgXCJsZXR0ZXJcIiwgXCJtYWlsXCIsIFwibWVzc2FnZVwiLCBcIm5vdGlmaWNhdGlvblwiLCBcInN1cHBvcnRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1lbnZlbG9wZS1vcGVuLXRleHRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZW52ZWxvcGUtc3F1YXJlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImUtbWFpbFwiLCBcImVtYWlsXCIsIFwibGV0dGVyXCIsIFwibWFpbFwiLCBcIm1lc3NhZ2VcIiwgXCJub3RpZmljYXRpb25cIiwgXCJzdXBwb3J0XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtZW52aXJhXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImxlYWZcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1lcXVhbHNcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZXJhc2VyXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImRlbGV0ZVwiLCBcInJlbW92ZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWVybGFuZ1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1ldGhlcmV1bVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1ldHN5XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWV1cm8tc2lnblwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJldXJcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1leGNoYW5nZS1hbHRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYXJyb3dcIiwgXCJhcnJvd3NcIiwgXCJleGNoYW5nZVwiLCBcInJlY2lwcm9jYXRlXCIsIFwicmV0dXJuXCIsIFwic3dhcFwiLCBcInRyYW5zZmVyXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZXhjbGFtYXRpb25cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYWxlcnRcIiwgXCJkYW5nZXJcIiwgXCJlcnJvclwiLCBcImltcG9ydGFudFwiLCBcIm5vdGljZVwiLCBcIm5vdGlmaWNhdGlvblwiLCBcIm5vdGlmeVwiLCBcInByb2JsZW1cIiwgXCJ3YXJuaW5nXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZXhjbGFtYXRpb24tY2lyY2xlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFsZXJ0XCIsIFwiZGFuZ2VyXCIsIFwiZXJyb3JcIiwgXCJpbXBvcnRhbnRcIiwgXCJub3RpY2VcIiwgXCJub3RpZmljYXRpb25cIiwgXCJub3RpZnlcIiwgXCJwcm9ibGVtXCIsIFwid2FybmluZ1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWV4Y2xhbWF0aW9uLXRyaWFuZ2xlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFsZXJ0XCIsIFwiZGFuZ2VyXCIsIFwiZXJyb3JcIiwgXCJpbXBvcnRhbnRcIiwgXCJub3RpY2VcIiwgXCJub3RpZmljYXRpb25cIiwgXCJub3RpZnlcIiwgXCJwcm9ibGVtXCIsIFwid2FybmluZ1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWV4cGFuZFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJiaWdnZXJcIiwgXCJlbmxhcmdlXCIsIFwicmVzaXplXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZXhwYW5kLWFycm93cy1hbHRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYXJyb3dzLWFsdFwiLCBcImJpZ2dlclwiLCBcImVubGFyZ2VcIiwgXCJtb3ZlXCIsIFwicmVzaXplXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtZXhwZWRpdGVkc3NsXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWV4dGVybmFsLWxpbmstYWx0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImV4dGVybmFsLWxpbmtcIiwgXCJuZXdcIiwgXCJvcGVuXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZXh0ZXJuYWwtbGluay1zcXVhcmUtYWx0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImV4dGVybmFsLWxpbmstc3F1YXJlXCIsIFwibmV3XCIsIFwib3BlblwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWV5ZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJvcHRpY1wiLCBcInNlZVwiLCBcInNlZW5cIiwgXCJzaG93XCIsIFwic2lnaHRcIiwgXCJ2aWV3c1wiLCBcInZpc2libGVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1leWVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwib3B0aWNcIiwgXCJzZWVcIiwgXCJzZWVuXCIsIFwic2hvd1wiLCBcInNpZ2h0XCIsIFwidmlld3NcIiwgXCJ2aXNpYmxlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZXllLWRyb3BwZXJcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZXllZHJvcHBlclwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWV5ZS1zbGFzaFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJibGluZFwiLCBcImhpZGVcIiwgXCJzaG93XCIsIFwidG9nZ2xlXCIsIFwidW5zZWVuXCIsIFwidmlld3NcIiwgXCJ2aXNpYmxlXCIsIFwidmlzaWJsaXR5XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtZXllLXNsYXNoXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJsaW5kXCIsIFwiaGlkZVwiLCBcInNob3dcIiwgXCJ0b2dnbGVcIiwgXCJ1bnNlZW5cIiwgXCJ2aWV3c1wiLCBcInZpc2libGVcIiwgXCJ2aXNpYmxpdHlcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1mYWNlYm9va1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJmYWNlYm9vay1vZmZpY2lhbFwiLCBcInNvY2lhbCBuZXR3b3JrXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtZmFjZWJvb2stZlwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJmYWNlYm9va1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWZhY2Vib29rLW1lc3NlbmdlclwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1mYWNlYm9vay1zcXVhcmVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwic29jaWFsIG5ldHdvcmtcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1mYW50YXN5LWZsaWdodC1nYW1lc1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJEdW5nZW9ucyAmIERyYWdvbnNcIiwgXCJkJmRcIiwgXCJkbmRcIiwgXCJmYW50YXN5XCIsIFwiZ2FtZVwiLCBcImdhbWluZ1wiLCBcInRhYmxldG9wXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZmFzdC1iYWNrd2FyZFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJiZWdpbm5pbmdcIiwgXCJmaXJzdFwiLCBcInByZXZpb3VzXCIsIFwicmV3aW5kXCIsIFwic3RhcnRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1mYXN0LWZvcndhcmRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZW5kXCIsIFwibGFzdFwiLCBcIm5leHRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1mYXhcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZmVhdGhlclwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJiaXJkXCIsIFwibGlnaHRcIiwgXCJwbHVja2VkXCIsIFwicXVpbGxcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1mZWF0aGVyLWFsdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJiaXJkXCIsIFwibGlnaHRcIiwgXCJwbHVja2VkXCIsIFwicXVpbGxcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1mZW1hbGVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiaHVtYW5cIiwgXCJwZXJzb25cIiwgXCJwcm9maWxlXCIsIFwidXNlclwiLCBcIndvbWFuXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZmlnaHRlci1qZXRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYWlycGxhbmVcIiwgXCJmYXN0XCIsIFwiZmx5XCIsIFwiZ29vc2VcIiwgXCJtYXZlcmlja1wiLCBcInBsYW5lXCIsIFwicXVpY2tcIiwgXCJ0b3AgZ3VuXCIsIFwidHJhbnNwb3J0YXRpb25cIiwgXCJ0cmF2ZWxcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1maWxlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImRvY3VtZW50XCIsIFwibmV3XCIsIFwicGFnZVwiLCBcInBkZlwiLCBcInJlc3VtZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWZpbGVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZG9jdW1lbnRcIiwgXCJuZXdcIiwgXCJwYWdlXCIsIFwicGRmXCIsIFwicmVzdW1lXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZmlsZS1hbHRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZG9jdW1lbnRcIiwgXCJmaWxlLXRleHRcIiwgXCJpbnZvaWNlXCIsIFwibmV3XCIsIFwicGFnZVwiLCBcInBkZlwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWZpbGUtYWx0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImRvY3VtZW50XCIsIFwiZmlsZS10ZXh0XCIsIFwiaW52b2ljZVwiLCBcIm5ld1wiLCBcInBhZ2VcIiwgXCJwZGZcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1maWxlLWFyY2hpdmVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiLnppcFwiLCBcImJ1bmRsZVwiLCBcImNvbXByZXNzXCIsIFwiY29tcHJlc3Npb25cIiwgXCJkb3dubG9hZFwiLCBcInppcFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWZpbGUtYXJjaGl2ZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCIuemlwXCIsIFwiYnVuZGxlXCIsIFwiY29tcHJlc3NcIiwgXCJjb21wcmVzc2lvblwiLCBcImRvd25sb2FkXCIsIFwiemlwXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZmlsZS1hdWRpb1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1maWxlLWF1ZGlvXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWZpbGUtY29kZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1maWxlLWNvZGVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZmlsZS1jb250cmFjdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhZ3JlZW1lbnRcIiwgXCJiaW5kaW5nXCIsIFwiZG9jdW1lbnRcIiwgXCJsZWdhbFwiLCBcInNpZ25hdHVyZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWZpbGUtY3N2XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcInNwcmVhZHNoZWV0c1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWZpbGUtZG93bmxvYWRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZmlsZS1leGNlbFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1maWxlLWV4Y2VsXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWZpbGUtZXhwb3J0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWZpbGUtaW1hZ2VcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtZmlsZS1pbWFnZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1maWxlLWltcG9ydFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1maWxlLWludm9pY2VcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYmlsbFwiLCBcImRvY3VtZW50XCIsIFwicmVjZWlwdFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWZpbGUtaW52b2ljZS1kb2xsYXJcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiJFwiLCBcImJpbGxcIiwgXCJkb2N1bWVudFwiLCBcImRvbGxhci1zaWduXCIsIFwibW9uZXlcIiwgXCJyZWNlaXB0XCIsIFwidXNkXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZmlsZS1tZWRpY2FsXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWZpbGUtbWVkaWNhbC1hbHRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZmlsZS1wZGZcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtZmlsZS1wZGZcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZmlsZS1wb3dlcnBvaW50XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWZpbGUtcG93ZXJwb2ludFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1maWxlLXByZXNjcmlwdGlvblwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJkcnVnc1wiLCBcIm1lZGljYWxcIiwgXCJtZWRpY2luZVwiLCBcInJ4XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZmlsZS1zaWduYXR1cmVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiSm9obiBIYW5jb2NrXCIsIFwiY29udHJhY3RcIiwgXCJkb2N1bWVudFwiLCBcIm5hbWVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1maWxlLXVwbG9hZFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1maWxlLXZpZGVvXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWZpbGUtdmlkZW9cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZmlsZS13b3JkXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWZpbGUtd29yZFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1maWxsXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJ1Y2tldFwiLCBcImNvbG9yXCIsIFwicGFpbnRcIiwgXCJwYWludCBidWNrZXRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1maWxsLWRyaXBcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYnVja2V0XCIsIFwiY29sb3JcIiwgXCJkcm9wXCIsIFwicGFpbnRcIiwgXCJwYWludCBidWNrZXRcIiwgXCJzcGlsbFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWZpbG1cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwibW92aWVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1maWx0ZXJcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZnVubmVsXCIsIFwib3B0aW9uc1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWZpbmdlcnByaW50XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImh1bWFuXCIsIFwiaWRcIiwgXCJpZGVudGlmaWNhdGlvblwiLCBcImxvY2tcIiwgXCJzbXVkZ2VcIiwgXCJ0b3VjaFwiLCBcInVuaXF1ZVwiLCBcInVubG9ja1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWZpcmVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY2FsaWVudGVcIiwgXCJmbGFtZVwiLCBcImhlYXRcIiwgXCJob3RcIiwgXCJwb3B1bGFyXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZmlyZS1leHRpbmd1aXNoZXJcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtZmlyZWZveFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJicm93c2VyXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZmlyc3QtYWlkXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWZpcnN0LW9yZGVyXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWZpcnN0LW9yZGVyLWFsdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1maXJzdGRyYWZ0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWZpc2hcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZmF1bmFcIiwgXCJnb2xkXCIsIFwic3dpbW1pbmdcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1maXN0LXJhaXNlZFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJEdW5nZW9ucyAmIERyYWdvbnNcIiwgXCJkJmRcIiwgXCJkbmRcIiwgXCJmYW50YXN5XCIsIFwiaGFuZFwiLCBcImtpXCIsIFwibW9ua1wiLCBcInJlc2lzdFwiLCBcInN0cmVuZ3RoXCIsIFwidW5hcm1lZCBjb21iYXRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1mbGFnXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImNvdW50cnlcIiwgXCJub3RpY2VcIiwgXCJub3RpZmljYXRpb25cIiwgXCJub3RpZnlcIiwgXCJwb2xlXCIsIFwicmVwb3J0XCIsIFwic3ltYm9sXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtZmxhZ1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJjb3VudHJ5XCIsIFwibm90aWNlXCIsIFwibm90aWZpY2F0aW9uXCIsIFwibm90aWZ5XCIsIFwicG9sZVwiLCBcInJlcG9ydFwiLCBcInN5bWJvbFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWZsYWctY2hlY2tlcmVkXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcIm5vdGljZVwiLCBcIm5vdGlmaWNhdGlvblwiLCBcIm5vdGlmeVwiLCBcInBvbGVcIiwgXCJyYWNpbmdcIiwgXCJyZXBvcnRcIiwgXCJzeW1ib2xcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1mbGFnLXVzYVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJiZXRzeSByb3NzXCIsIFwiY291bnRyeVwiLCBcIm9sZCBnbG9yeVwiLCBcInN0YXJzXCIsIFwic3RyaXBlc1wiLCBcInN5bWJvbFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWZsYXNrXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJlYWtlclwiLCBcImV4cGVyaW1lbnRhbFwiLCBcImxhYnNcIiwgXCJzY2llbmNlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtZmxpY2tyXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWZsaXBib2FyZFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1mbHVzaGVkXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImVtYmFycmFzc2VkXCIsIFwiZW1vdGljb25cIiwgXCJmYWNlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtZmx1c2hlZFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJlbWJhcnJhc3NlZFwiLCBcImVtb3RpY29uXCIsIFwiZmFjZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWZseVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1mb2xkZXJcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtZm9sZGVyXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWZvbGRlci1taW51c1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhcmNoaXZlXCIsIFwiZGVsZXRlXCIsIFwibmVnYXRpdmVcIiwgXCJyZW1vdmVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1mb2xkZXItb3BlblwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1mb2xkZXItb3BlblwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1mb2xkZXItcGx1c1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhZGRcIiwgXCJjcmVhdGVcIiwgXCJuZXdcIiwgXCJwb3NpdGl2ZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWZvbnRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwidGV4dFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWZvbnQtYXdlc29tZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJtZWFucGF0aFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWZvbnQtYXdlc29tZS1hbHRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtZm9udC1hd2Vzb21lLWZsYWdcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtZm9udC1hd2Vzb21lLWxvZ28tZnVsbFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1mb250LWF3ZXNvbWUtbG9nby1mdWxsXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWZvbnQtYXdlc29tZS1sb2dvLWZ1bGxcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtZm9udGljb25zXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWZvbnRpY29ucy1maVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1mb290YmFsbC1iYWxsXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImZhbGxcIiwgXCJwaWdza2luXCIsIFwic2Vhc29uYWxcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1mb3J0LWF3ZXNvbWVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY2FzdGxlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtZm9ydC1hd2Vzb21lLWFsdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJjYXN0bGVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1mb3J1bWJlZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1mb3J3YXJkXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImZvcndhcmRcIiwgXCJuZXh0XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtZm91cnNxdWFyZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1mcmVlLWNvZGUtY2FtcFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1mcmVlYnNkXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWZyb2dcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYW1waGliaWFuXCIsIFwiYnVsbGZyb2dcIiwgXCJmYXVuYVwiLCBcImhvcFwiLCBcImtlcm1pdFwiLCBcImtpc3NcIiwgXCJwcmluY2VcIiwgXCJyaWJiaXRcIiwgXCJ0b2FkXCIsIFwid2FydFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWZyb3duXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImRpc2FwcHJvdmVcIiwgXCJlbW90aWNvblwiLCBcImZhY2VcIiwgXCJyYXRpbmdcIiwgXCJzYWRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1mcm93blwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJkaXNhcHByb3ZlXCIsIFwiZW1vdGljb25cIiwgXCJmYWNlXCIsIFwicmF0aW5nXCIsIFwic2FkXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZnJvd24tb3BlblwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJkaXNhcHByb3ZlXCIsIFwiZW1vdGljb25cIiwgXCJmYWNlXCIsIFwicmF0aW5nXCIsIFwic2FkXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtZnJvd24tb3BlblwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJkaXNhcHByb3ZlXCIsIFwiZW1vdGljb25cIiwgXCJmYWNlXCIsIFwicmF0aW5nXCIsIFwic2FkXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtZnVsY3J1bVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1mdW5uZWwtZG9sbGFyXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWZ1dGJvbFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJiYWxsXCIsIFwiZm9vdGJhbGxcIiwgXCJzb2NjZXJcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1mdXRib2xcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYmFsbFwiLCBcImZvb3RiYWxsXCIsIFwic29jY2VyXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtZ2FsYWN0aWMtcmVwdWJsaWNcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwicG9saXRpY3NcIiwgXCJzdGFyIHdhcnNcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1nYWxhY3RpYy1zZW5hdGVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwic3RhciB3YXJzXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZ2FtZXBhZFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJjb250cm9sbGVyXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZ2FzLXB1bXBcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZ2F2ZWxcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiaGFtbWVyXCIsIFwianVkZ2VcIiwgXCJsYXd5ZXJcIiwgXCJvcGluaW9uXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZ2VtXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImRpYW1vbmRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1nZW1cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZGlhbW9uZFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWdlbmRlcmxlc3NcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtZ2V0LXBvY2tldFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1nZ1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1nZy1jaXJjbGVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZ2hvc3RcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYXBwYXJpdGlvblwiLCBcImJsaW5reVwiLCBcImNseWRlXCIsIFwiZmxvYXRpbmdcIiwgXCJoYWxsb3dlZW5cIiwgXCJob2xpZGF5XCIsIFwiaW5reVwiLCBcInBpbmt5XCIsIFwic3Bpcml0XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZ2lmdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJnZW5lcm9zaXR5XCIsIFwiZ2l2aW5nXCIsIFwicGFydHlcIiwgXCJwcmVzZW50XCIsIFwid3JhcHBlZFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWdpdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1naXQtc3F1YXJlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWdpdGh1YlwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJvY3RvY2F0XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtZ2l0aHViLWFsdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJvY3RvY2F0XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtZ2l0aHViLXNxdWFyZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJvY3RvY2F0XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtZ2l0a3Jha2VuXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWdpdGxhYlwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJBeG9zb2Z0XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtZ2l0dGVyXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWdsYXNzLW1hcnRpbmlcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYWxjb2hvbFwiLCBcImJhclwiLCBcImJldmVyYWdlXCIsIFwiZHJpbmtcIiwgXCJnbGFzc1wiLCBcImxpcXVvclwiLCBcIm1hcnRpbmlcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1nbGFzcy1tYXJ0aW5pLWFsdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1nbGFzc2VzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImZvdXJleWVzXCIsIFwiaGlwc3RlclwiLCBcIm5lcmRcIiwgXCJyZWFkaW5nXCIsIFwic2lnaHRcIiwgXCJzcGVjdGFjbGVzXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtZ2xpZGVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtZ2xpZGUtZ1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1nbG9iZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhbGxcIiwgXCJjb29yZGluYXRlc1wiLCBcImNvdW50cnlcIiwgXCJlYXJ0aFwiLCBcImdsb2JhbFwiLCBcImdwc1wiLCBcImxhbmd1YWdlXCIsIFwibG9jYWxpemVcIiwgXCJsb2NhdGlvblwiLCBcIm1hcFwiLCBcIm9ubGluZVwiLCBcInBsYWNlXCIsIFwicGxhbmV0XCIsIFwidHJhbnNsYXRlXCIsIFwidHJhdmVsXCIsIFwid29ybGRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1nbG9iZS1hZnJpY2FcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYWxsXCIsIFwiY291bnRyeVwiLCBcImVhcnRoXCIsIFwiZ2xvYmFsXCIsIFwiZ3BzXCIsIFwibGFuZ3VhZ2VcIiwgXCJsb2NhbGl6ZVwiLCBcImxvY2F0aW9uXCIsIFwibWFwXCIsIFwib25saW5lXCIsIFwicGxhY2VcIiwgXCJwbGFuZXRcIiwgXCJ0cmFuc2xhdGVcIiwgXCJ0cmF2ZWxcIiwgXCJ3b3JsZFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWdsb2JlLWFtZXJpY2FzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFsbFwiLCBcImNvdW50cnlcIiwgXCJlYXJ0aFwiLCBcImdsb2JhbFwiLCBcImdwc1wiLCBcImxhbmd1YWdlXCIsIFwibG9jYWxpemVcIiwgXCJsb2NhdGlvblwiLCBcIm1hcFwiLCBcIm9ubGluZVwiLCBcInBsYWNlXCIsIFwicGxhbmV0XCIsIFwidHJhbnNsYXRlXCIsIFwidHJhdmVsXCIsIFwid29ybGRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1nbG9iZS1hc2lhXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFsbFwiLCBcImNvdW50cnlcIiwgXCJlYXJ0aFwiLCBcImdsb2JhbFwiLCBcImdwc1wiLCBcImxhbmd1YWdlXCIsIFwibG9jYWxpemVcIiwgXCJsb2NhdGlvblwiLCBcIm1hcFwiLCBcIm9ubGluZVwiLCBcInBsYWNlXCIsIFwicGxhbmV0XCIsIFwidHJhbnNsYXRlXCIsIFwidHJhdmVsXCIsIFwid29ybGRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1nb2ZvcmVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZ29sZi1iYWxsXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWdvb2RyZWFkc1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1nb29kcmVhZHMtZ1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1nb29nbGVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtZ29vZ2xlLWRyaXZlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWdvb2dsZS1wbGF5XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWdvb2dsZS1wbHVzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImdvb2dsZS1wbHVzLWNpcmNsZVwiLCBcImdvb2dsZS1wbHVzLW9mZmljaWFsXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtZ29vZ2xlLXBsdXMtZ1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJnb29nbGUtcGx1c1wiLCBcInNvY2lhbCBuZXR3b3JrXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtZ29vZ2xlLXBsdXMtc3F1YXJlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcInNvY2lhbCBuZXR3b3JrXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtZ29vZ2xlLXdhbGxldFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1nb3B1cmFtXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJ1aWxkaW5nXCIsIFwiZW50cmFuY2VcIiwgXCJoaW5kdWlzbVwiLCBcInRlbXBsZVwiLCBcInRvd2VyXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZ3JhZHVhdGlvbi1jYXBcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwibGVhcm5pbmdcIiwgXCJzY2hvb2xcIiwgXCJzdHVkZW50XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtZ3JhdGlwYXlcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZmF2b3JpdGVcIiwgXCJoZWFydFwiLCBcImxpa2VcIiwgXCJsb3ZlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtZ3JhdlwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1ncmVhdGVyLXRoYW5cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZ3JlYXRlci10aGFuLWVxdWFsXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWdyaW1hY2VcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY3JpbmdlXCIsIFwiZW1vdGljb25cIiwgXCJmYWNlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtZ3JpbWFjZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJjcmluZ2VcIiwgXCJlbW90aWNvblwiLCBcImZhY2VcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1ncmluXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImVtb3RpY29uXCIsIFwiZmFjZVwiLCBcImxhdWdoXCIsIFwic21pbGVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1ncmluXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImVtb3RpY29uXCIsIFwiZmFjZVwiLCBcImxhdWdoXCIsIFwic21pbGVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1ncmluLWFsdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJlbW90aWNvblwiLCBcImZhY2VcIiwgXCJsYXVnaFwiLCBcInNtaWxlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtZ3Jpbi1hbHRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZW1vdGljb25cIiwgXCJmYWNlXCIsIFwibGF1Z2hcIiwgXCJzbWlsZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWdyaW4tYmVhbVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJlbW90aWNvblwiLCBcImZhY2VcIiwgXCJsYXVnaFwiLCBcInNtaWxlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtZ3Jpbi1iZWFtXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImVtb3RpY29uXCIsIFwiZmFjZVwiLCBcImxhdWdoXCIsIFwic21pbGVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1ncmluLWJlYW0tc3dlYXRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZW1vdGljb25cIiwgXCJmYWNlXCIsIFwic21pbGVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1ncmluLWJlYW0tc3dlYXRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZW1vdGljb25cIiwgXCJmYWNlXCIsIFwic21pbGVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1ncmluLWhlYXJ0c1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJlbW90aWNvblwiLCBcImZhY2VcIiwgXCJsb3ZlXCIsIFwic21pbGVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1ncmluLWhlYXJ0c1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJlbW90aWNvblwiLCBcImZhY2VcIiwgXCJsb3ZlXCIsIFwic21pbGVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1ncmluLXNxdWludFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJlbW90aWNvblwiLCBcImZhY2VcIiwgXCJsYXVnaFwiLCBcInNtaWxlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtZ3Jpbi1zcXVpbnRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZW1vdGljb25cIiwgXCJmYWNlXCIsIFwibGF1Z2hcIiwgXCJzbWlsZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWdyaW4tc3F1aW50LXRlYXJzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImVtb3RpY29uXCIsIFwiZmFjZVwiLCBcImhhcHB5XCIsIFwic21pbGVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1ncmluLXNxdWludC10ZWFyc1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJlbW90aWNvblwiLCBcImZhY2VcIiwgXCJoYXBweVwiLCBcInNtaWxlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZ3Jpbi1zdGFyc1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJlbW90aWNvblwiLCBcImZhY2VcIiwgXCJzdGFyLXN0cnVja1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWdyaW4tc3RhcnNcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZW1vdGljb25cIiwgXCJmYWNlXCIsIFwic3Rhci1zdHJ1Y2tcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1ncmluLXRlYXJzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcIkxPTFwiLCBcImVtb3RpY29uXCIsIFwiZmFjZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWdyaW4tdGVhcnNcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiTE9MXCIsIFwiZW1vdGljb25cIiwgXCJmYWNlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZ3Jpbi10b25ndWVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiTE9MXCIsIFwiZW1vdGljb25cIiwgXCJmYWNlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtZ3Jpbi10b25ndWVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiTE9MXCIsIFwiZW1vdGljb25cIiwgXCJmYWNlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZ3Jpbi10b25ndWUtc3F1aW50XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcIkxPTFwiLCBcImVtb3RpY29uXCIsIFwiZmFjZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWdyaW4tdG9uZ3VlLXNxdWludFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJMT0xcIiwgXCJlbW90aWNvblwiLCBcImZhY2VcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1ncmluLXRvbmd1ZS13aW5rXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcIkxPTFwiLCBcImVtb3RpY29uXCIsIFwiZmFjZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWdyaW4tdG9uZ3VlLXdpbmtcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiTE9MXCIsIFwiZW1vdGljb25cIiwgXCJmYWNlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtZ3Jpbi13aW5rXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImVtb3RpY29uXCIsIFwiZmFjZVwiLCBcImZsaXJ0XCIsIFwibGF1Z2hcIiwgXCJzbWlsZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWdyaW4td2lua1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJlbW90aWNvblwiLCBcImZhY2VcIiwgXCJmbGlydFwiLCBcImxhdWdoXCIsIFwic21pbGVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1ncmlwLWhvcml6b250YWxcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYWZmb3JkYW5jZVwiLCBcImRyYWdcIiwgXCJkcm9wXCIsIFwiZ3JhYlwiLCBcImhhbmRsZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWdyaXAtdmVydGljYWxcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYWZmb3JkYW5jZVwiLCBcImRyYWdcIiwgXCJkcm9wXCIsIFwiZ3JhYlwiLCBcImhhbmRsZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWdyaXBmaXJlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWdydW50XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWd1bHBcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtaC1zcXVhcmVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiaG9zcGl0YWxcIiwgXCJob3RlbFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWhhY2tlci1uZXdzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWhhY2tlci1uZXdzLXNxdWFyZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1oYWNrZXJyYW5rXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWhhbW1lclwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhZG1pblwiLCBcImZpeFwiLCBcInJlcGFpclwiLCBcInNldHRpbmdzXCIsIFwidG9vbFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWhhbXNhXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFtdWxldFwiLCBcImNocmlzdGlhbml0eVwiLCBcImlzbGFtXCIsIFwiamV3aXNoXCIsIFwianVkYWlzbVwiLCBcIm11c2xpbVwiLCBcInByb3RlY3Rpb25cIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1oYW5kLWhvbGRpbmdcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtaGFuZC1ob2xkaW5nLWhlYXJ0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWhhbmQtaG9sZGluZy11c2RcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiJFwiLCBcImRvbGxhciBzaWduXCIsIFwiZG9uYXRpb25cIiwgXCJnaXZpbmdcIiwgXCJtb25leVwiLCBcInByaWNlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtaGFuZC1saXphcmRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtaGFuZC1saXphcmRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtaGFuZC1wYXBlclwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJzdG9wXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtaGFuZC1wYXBlclwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJzdG9wXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtaGFuZC1wZWFjZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1oYW5kLXBlYWNlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWhhbmQtcG9pbnQtZG93blwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJmaW5nZXJcIiwgXCJoYW5kLW8tZG93blwiLCBcInBvaW50XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtaGFuZC1wb2ludC1kb3duXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImZpbmdlclwiLCBcImhhbmQtby1kb3duXCIsIFwicG9pbnRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1oYW5kLXBvaW50LWxlZnRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYmFja1wiLCBcImZpbmdlclwiLCBcImhhbmQtby1sZWZ0XCIsIFwibGVmdFwiLCBcInBvaW50XCIsIFwicHJldmlvdXNcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1oYW5kLXBvaW50LWxlZnRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYmFja1wiLCBcImZpbmdlclwiLCBcImhhbmQtby1sZWZ0XCIsIFwibGVmdFwiLCBcInBvaW50XCIsIFwicHJldmlvdXNcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1oYW5kLXBvaW50LXJpZ2h0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImZpbmdlclwiLCBcImZvcndhcmRcIiwgXCJoYW5kLW8tcmlnaHRcIiwgXCJuZXh0XCIsIFwicG9pbnRcIiwgXCJyaWdodFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWhhbmQtcG9pbnQtcmlnaHRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZmluZ2VyXCIsIFwiZm9yd2FyZFwiLCBcImhhbmQtby1yaWdodFwiLCBcIm5leHRcIiwgXCJwb2ludFwiLCBcInJpZ2h0XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtaGFuZC1wb2ludC11cFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJmaW5nZXJcIiwgXCJoYW5kLW8tdXBcIiwgXCJwb2ludFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWhhbmQtcG9pbnQtdXBcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZmluZ2VyXCIsIFwiaGFuZC1vLXVwXCIsIFwicG9pbnRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1oYW5kLXBvaW50ZXJcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwic2VsZWN0XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtaGFuZC1wb2ludGVyXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcInNlbGVjdFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWhhbmQtcm9ja1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1oYW5kLXJvY2tcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtaGFuZC1zY2lzc29yc1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1oYW5kLXNjaXNzb3JzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWhhbmQtc3BvY2tcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtaGFuZC1zcG9ja1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1oYW5kc1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1oYW5kcy1oZWxwaW5nXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFpZFwiLCBcImFzc2lzdGFuY2VcIiwgXCJwYXJ0bmVyc2hpcFwiLCBcInZvbHVudGVlcmluZ1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWhhbmRzaGFrZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJncmVldGluZ1wiLCBcInBhcnRuZXJzaGlwXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtaGFuZHNoYWtlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImdyZWV0aW5nXCIsIFwicGFydG5lcnNoaXBcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1oYW51a2lhaFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJjYW5kbGVcIiwgXCJoYW51a2thaFwiLCBcImpld2lzaFwiLCBcImp1ZGFpc21cIiwgXCJsaWdodFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWhhc2h0YWdcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtaGF0LXdpemFyZFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJEdW5nZW9ucyAmIERyYWdvbnNcIiwgXCJidWNrbGVcIiwgXCJjbG90aFwiLCBcImNsb3RoaW5nXCIsIFwiZCZkXCIsIFwiZG5kXCIsIFwiZmFudGFzeVwiLCBcImhhbGxvd2VlblwiLCBcImhvbGlkYXlcIiwgXCJtYWdlXCIsIFwibWFnaWNcIiwgXCJwb2ludHlcIiwgXCJ3aXRjaFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWhheWthbFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJiYWhhaVwiLCBcImJhaMOhJ8OtXCIsIFwic3RhclwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWhkZFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJjcHVcIiwgXCJoYXJkIGRyaXZlXCIsIFwiaGFyZGRyaXZlXCIsIFwibWFjaGluZVwiLCBcInNhdmVcIiwgXCJzdG9yYWdlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtaGRkXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImNwdVwiLCBcImhhcmQgZHJpdmVcIiwgXCJoYXJkZHJpdmVcIiwgXCJtYWNoaW5lXCIsIFwic2F2ZVwiLCBcInN0b3JhZ2VcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1oZWFkaW5nXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImhlYWRlclwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWhlYWRwaG9uZXNcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYXVkaW9cIiwgXCJsaXN0ZW5cIiwgXCJtdXNpY1wiLCBcInNvdW5kXCIsIFwic3BlYWtlclwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWhlYWRwaG9uZXMtYWx0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImF1ZGlvXCIsIFwibGlzdGVuXCIsIFwibXVzaWNcIiwgXCJzb3VuZFwiLCBcInNwZWFrZXJcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1oZWFkc2V0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImF1ZGlvXCIsIFwiZ2FtZXJcIiwgXCJnYW1pbmdcIiwgXCJsaXN0ZW5cIiwgXCJsaXZlIGNoYXRcIiwgXCJtaWNyb3Bob25lXCIsIFwic2hvdCBjYWxsZXJcIiwgXCJzb3VuZFwiLCBcInN1cHBvcnRcIiwgXCJ0ZWxlbWFya2V0ZXJcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1oZWFydFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJmYXZvcml0ZVwiLCBcImxpa2VcIiwgXCJsb3ZlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtaGVhcnRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZmF2b3JpdGVcIiwgXCJsaWtlXCIsIFwibG92ZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWhlYXJ0YmVhdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJla2dcIiwgXCJsaWZlbGluZVwiLCBcInZpdGFsIHNpZ25zXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtaGVsaWNvcHRlclwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhaXJ3b2xmXCIsIFwiYXBhY2hlXCIsIFwiY2hvcHBlclwiLCBcImZsaWdodFwiLCBcImZseVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWhpZ2hsaWdodGVyXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImVkaXRcIiwgXCJtYXJrZXJcIiwgXCJzaGFycGllXCIsIFwidXBkYXRlXCIsIFwid3JpdGVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1oaWtpbmdcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYWN0aXZpdHlcIiwgXCJiYWNrcGFja1wiLCBcImZhbGxcIiwgXCJmaXRuZXNzXCIsIFwib3V0ZG9vcnNcIiwgXCJzZWFzb25hbFwiLCBcIndhbGtpbmdcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1oaXBwb1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJmYXVuYVwiLCBcImh1bmdyeVwiLCBcIm1hbW1tYWxcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1oaXBzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWhpcmUtYS1oZWxwZXJcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtaGlzdG9yeVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1ob2NrZXktcHVja1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1ob21lXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImhvdXNlXCIsIFwibWFpblwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWhvb2xpXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWhvcm5iaWxsXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWhvcnNlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImVxdXVzXCIsIFwiZmF1bmFcIiwgXCJtYW1tbWFsXCIsIFwibmVpZ2hcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1ob3NwaXRhbFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJidWlsZGluZ1wiLCBcImVtZXJnZW5jeSByb29tXCIsIFwibWVkaWNhbCBjZW50ZXJcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1ob3NwaXRhbFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJidWlsZGluZ1wiLCBcImVtZXJnZW5jeSByb29tXCIsIFwibWVkaWNhbCBjZW50ZXJcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1ob3NwaXRhbC1hbHRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYnVpbGRpbmdcIiwgXCJlbWVyZ2VuY3kgcm9vbVwiLCBcIm1lZGljYWwgY2VudGVyXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtaG9zcGl0YWwtc3ltYm9sXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWhvdC10dWJcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtaG90ZWxcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYnVpbGRpbmdcIiwgXCJsb2RnaW5nXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtaG90amFyXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWhvdXJnbGFzc1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1ob3VyZ2xhc3NcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtaG91cmdsYXNzLWVuZFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1ob3VyZ2xhc3MtaGFsZlwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1ob3VyZ2xhc3Mtc3RhcnRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtaG91c2UtZGFtYWdlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImRldmFzdGF0aW9uXCIsIFwiaG9tZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWhvdXp6XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWhyeXZuaWFcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwibW9uZXlcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1odG1sNVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1odWJzcG90XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWktY3Vyc29yXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWlkLWJhZGdlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWlkLWJhZGdlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWlkLWNhcmRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZG9jdW1lbnRcIiwgXCJpZGVudGlmaWNhdGlvblwiLCBcImlzc3VlZFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWlkLWNhcmRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZG9jdW1lbnRcIiwgXCJpZGVudGlmaWNhdGlvblwiLCBcImlzc3VlZFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWlkLWNhcmQtYWx0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImRlbW9ncmFwaGljc1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWltYWdlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFsYnVtXCIsIFwicGhvdG9cIiwgXCJwaWN0dXJlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtaW1hZ2VcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYWxidW1cIiwgXCJwaG90b1wiLCBcInBpY3R1cmVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1pbWFnZXNcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYWxidW1cIiwgXCJwaG90b1wiLCBcInBpY3R1cmVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1pbWFnZXNcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYWxidW1cIiwgXCJwaG90b1wiLCBcInBpY3R1cmVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1pbWRiXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWluYm94XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWluZGVudFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1pbmR1c3RyeVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJmYWN0b3J5XCIsIFwibWFudWZhY3R1cmluZ1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWluZmluaXR5XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWluZm9cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZGV0YWlsc1wiLCBcImhlbHBcIiwgXCJpbmZvcm1hdGlvblwiLCBcIm1vcmVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1pbmZvLWNpcmNsZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJkZXRhaWxzXCIsIFwiaGVscFwiLCBcImluZm9ybWF0aW9uXCIsIFwibW9yZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWluc3RhZ3JhbVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1pbnRlcm5ldC1leHBsb3JlclwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJicm93c2VyXCIsIFwiaWVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1pb3hob3N0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWl0YWxpY1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJpdGFsaWNzXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtaXR1bmVzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWl0dW5lcy1ub3RlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWphdmFcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtamVkaVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJzdGFyIHdhcnNcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1qZWRpLW9yZGVyXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcInN0YXIgd2Fyc1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWplbmtpbnNcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtam9nZXRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtam9pbnRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYmx1bnRcIiwgXCJjYW5uYWJpc1wiLCBcImRvb2JpZVwiLCBcImRydWdzXCIsIFwibWFyaWp1YW5hXCIsIFwicm9hY2hcIiwgXCJzbW9rZVwiLCBcInNtb2tpbmdcIiwgXCJzcGxpZmZcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1qb29tbGFcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtam91cm5hbC13aGlsbHNcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYm9va1wiLCBcImplZGlcIiwgXCJzdGFyIHdhcnNcIiwgXCJ0aGUgZm9yY2VcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1qc1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1qcy1zcXVhcmVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtanNmaWRkbGVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEta2FhYmFcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYnVpbGRpbmdcIiwgXCJjdWJlXCIsIFwiaXNsYW1cIiwgXCJtdXNsaW1cIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1rYWdnbGVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEta2V5XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcInBhc3N3b3JkXCIsIFwidW5sb2NrXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEta2V5YmFzZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1rZXlib2FyZFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJpbnB1dFwiLCBcInR5cGVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1rZXlib2FyZFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJpbnB1dFwiLCBcInR5cGVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1rZXljZG5cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEta2hhbmRhXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImNoYWtrYXJcIiwgXCJzaWtoXCIsIFwic2lraGlzbVwiLCBcInN3b3JkXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEta2lja3N0YXJ0ZXJcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEta2lja3N0YXJ0ZXIta1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1raXNzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJlc29cIiwgXCJlbW90aWNvblwiLCBcImZhY2VcIiwgXCJsb3ZlXCIsIFwic21vb2NoXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEta2lzc1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJiZXNvXCIsIFwiZW1vdGljb25cIiwgXCJmYWNlXCIsIFwibG92ZVwiLCBcInNtb29jaFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWtpc3MtYmVhbVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJiZXNvXCIsIFwiZW1vdGljb25cIiwgXCJmYWNlXCIsIFwibG92ZVwiLCBcInNtb29jaFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWtpc3MtYmVhbVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJiZXNvXCIsIFwiZW1vdGljb25cIiwgXCJmYWNlXCIsIFwibG92ZVwiLCBcInNtb29jaFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWtpc3Mtd2luay1oZWFydFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJiZXNvXCIsIFwiZW1vdGljb25cIiwgXCJmYWNlXCIsIFwibG92ZVwiLCBcInNtb29jaFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWtpc3Mtd2luay1oZWFydFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJiZXNvXCIsIFwiZW1vdGljb25cIiwgXCJmYWNlXCIsIFwibG92ZVwiLCBcInNtb29jaFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWtpd2ktYmlyZFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJiaXJkXCIsIFwiZmF1bmFcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1rb3J2dWVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtbGFuZG1hcmtcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYnVpbGRpbmdcIiwgXCJoaXN0b3JpY1wiLCBcIm1lbW9yb2FibGVcIiwgXCJwb2xpdGljc1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWxhbmd1YWdlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImRpYWxlY3RcIiwgXCJpZGlvbVwiLCBcImxvY2FsaXplXCIsIFwic3BlZWNoXCIsIFwidHJhbnNsYXRlXCIsIFwidmVybmFjdWxhclwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWxhcHRvcFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJjb21wdXRlclwiLCBcImNwdVwiLCBcImRlbGxcIiwgXCJkZW1vXCIsIFwiZGV2aWNlXCIsIFwiZHVkZSB5b3UncmUgZ2V0dGluZ1wiLCBcIm1hY1wiLCBcIm1hY2Jvb2tcIiwgXCJtYWNoaW5lXCIsIFwicGNcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1sYXB0b3AtY29kZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1sYXJhdmVsXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWxhc3RmbVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1sYXN0Zm0tc3F1YXJlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWxhdWdoXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcIkxPTFwiLCBcImVtb3RpY29uXCIsIFwiZmFjZVwiLCBcImxhdWdoXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtbGF1Z2hcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiTE9MXCIsIFwiZW1vdGljb25cIiwgXCJmYWNlXCIsIFwibGF1Z2hcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1sYXVnaC1iZWFtXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcIkxPTFwiLCBcImVtb3RpY29uXCIsIFwiZmFjZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWxhdWdoLWJlYW1cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiTE9MXCIsIFwiZW1vdGljb25cIiwgXCJmYWNlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtbGF1Z2gtc3F1aW50XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcIkxPTFwiLCBcImVtb3RpY29uXCIsIFwiZmFjZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWxhdWdoLXNxdWludFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJMT0xcIiwgXCJlbW90aWNvblwiLCBcImZhY2VcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1sYXVnaC13aW5rXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcIkxPTFwiLCBcImVtb3RpY29uXCIsIFwiZmFjZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLWxhdWdoLXdpbmtcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiTE9MXCIsIFwiZW1vdGljb25cIiwgXCJmYWNlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtbGF5ZXItZ3JvdXBcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwibGF5ZXJzXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtbGVhZlwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJlY29cIiwgXCJmbG9yYVwiLCBcIm5hdHVyZVwiLCBcInBsYW50XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtbGVhbnB1YlwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1sZW1vblwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJmb29kXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtbGVtb25cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZm9vZFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLWxlc3NcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtbGVzcy10aGFuXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWxlc3MtdGhhbi1lcXVhbFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1sZXZlbC1kb3duLWFsdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJsZXZlbC1kb3duXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtbGV2ZWwtdXAtYWx0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImxldmVsLXVwXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtbGlmZS1yaW5nXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcInN1cHBvcnRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1saWZlLXJpbmdcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwic3VwcG9ydFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWxpZ2h0YnVsYlwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJpZGVhXCIsIFwiaW5zcGlyYXRpb25cIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1saWdodGJ1bGJcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiaWRlYVwiLCBcImluc3BpcmF0aW9uXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtbGluZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1saW5rXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImNoYWluXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtbGlua2VkaW5cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwibGlua2VkaW4tc3F1YXJlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtbGlua2VkaW4taW5cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwibGlua2VkaW5cIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1saW5vZGVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtbGludXhcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwidHV4XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtbGlyYS1zaWduXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcInRyeVwiLCBcInR1cmtpc2hcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1saXN0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImNoZWNrbGlzdFwiLCBcImNvbXBsZXRlZFwiLCBcImRvbmVcIiwgXCJmaW5pc2hlZFwiLCBcIm9sXCIsIFwidG9kb1wiLCBcInVsXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtbGlzdC1hbHRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY2hlY2tsaXN0XCIsIFwiY29tcGxldGVkXCIsIFwiZG9uZVwiLCBcImZpbmlzaGVkXCIsIFwib2xcIiwgXCJ0b2RvXCIsIFwidWxcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1saXN0LWFsdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJjaGVja2xpc3RcIiwgXCJjb21wbGV0ZWRcIiwgXCJkb25lXCIsIFwiZmluaXNoZWRcIiwgXCJvbFwiLCBcInRvZG9cIiwgXCJ1bFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWxpc3Qtb2xcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY2hlY2tsaXN0XCIsIFwibGlzdFwiLCBcIm51bWJlcnNcIiwgXCJvbFwiLCBcInRvZG9cIiwgXCJ1bFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWxpc3QtdWxcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY2hlY2tsaXN0XCIsIFwibGlzdFwiLCBcIm9sXCIsIFwidG9kb1wiLCBcInVsXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtbG9jYXRpb24tYXJyb3dcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYWRkcmVzc1wiLCBcImNvb3JkaW5hdGVzXCIsIFwiZ3BzXCIsIFwibG9jYXRpb25cIiwgXCJtYXBcIiwgXCJwbGFjZVwiLCBcIndoZXJlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtbG9ja1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhZG1pblwiLCBcInByb3RlY3RcIiwgXCJzZWN1cml0eVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWxvY2stb3BlblwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhZG1pblwiLCBcImxvY2tcIiwgXCJvcGVuXCIsIFwicGFzc3dvcmRcIiwgXCJwcm90ZWN0XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtbG9uZy1hcnJvdy1hbHQtZG93blwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJsb25nLWFycm93LWRvd25cIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1sb25nLWFycm93LWFsdC1sZWZ0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJhY2tcIiwgXCJsb25nLWFycm93LWxlZnRcIiwgXCJwcmV2aW91c1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLWxvbmctYXJyb3ctYWx0LXJpZ2h0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImxvbmctYXJyb3ctcmlnaHRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1sb25nLWFycm93LWFsdC11cFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJsb25nLWFycm93LXVwXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtbG93LXZpc2lvblwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1sdWdnYWdlLWNhcnRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtbHlmdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1tYWdlbnRvXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLW1hZ2ljXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImF1dG9jb21wbGV0ZVwiLCBcImF1dG9tYXRpY1wiLCBcIm1hZ2VcIiwgXCJtYWdpY1wiLCBcInNwZWxsXCIsIFwid2l0Y2hcIiwgXCJ3aXphcmRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1tYWduZXRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtbWFpbC1idWxrXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLW1haWxjaGltcFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1tYWxlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImh1bWFuXCIsIFwibWFuXCIsIFwicGVyc29uXCIsIFwicHJvZmlsZVwiLCBcInVzZXJcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1tYW5kYWxvcmlhblwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1tYXBcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY29vcmRpbmF0ZXNcIiwgXCJsb2NhdGlvblwiLCBcInBhcGVyXCIsIFwicGxhY2VcIiwgXCJ0cmF2ZWxcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1tYXBcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY29vcmRpbmF0ZXNcIiwgXCJsb2NhdGlvblwiLCBcInBhcGVyXCIsIFwicGxhY2VcIiwgXCJ0cmF2ZWxcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1tYXAtbWFya2VkXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFkZHJlc3NcIiwgXCJjb29yZGluYXRlc1wiLCBcImRlc3RpbmF0aW9uXCIsIFwiZ3BzXCIsIFwibG9jYWxpemVcIiwgXCJsb2NhdGlvblwiLCBcIm1hcFwiLCBcInBhcGVyXCIsIFwicGluXCIsIFwicGxhY2VcIiwgXCJwb2ludCBvZiBpbnRlcmVzdFwiLCBcInBvc2l0aW9uXCIsIFwicm91dGVcIiwgXCJ0cmF2ZWxcIiwgXCJ3aGVyZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLW1hcC1tYXJrZWQtYWx0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFkZHJlc3NcIiwgXCJjb29yZGluYXRlc1wiLCBcImRlc3RpbmF0aW9uXCIsIFwiZ3BzXCIsIFwibG9jYWxpemVcIiwgXCJsb2NhdGlvblwiLCBcIm1hcFwiLCBcInBhcGVyXCIsIFwicGluXCIsIFwicGxhY2VcIiwgXCJwb2ludCBvZiBpbnRlcmVzdFwiLCBcInBvc2l0aW9uXCIsIFwicm91dGVcIiwgXCJ0cmF2ZWxcIiwgXCJ3aGVyZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLW1hcC1tYXJrZXJcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYWRkcmVzc1wiLCBcImNvb3JkaW5hdGVzXCIsIFwiZ3BzXCIsIFwibG9jYWxpemVcIiwgXCJsb2NhdGlvblwiLCBcIm1hcFwiLCBcInBpblwiLCBcInBsYWNlXCIsIFwicG9zaXRpb25cIiwgXCJ0cmF2ZWxcIiwgXCJ3aGVyZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLW1hcC1tYXJrZXItYWx0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFkZHJlc3NcIiwgXCJjb29yZGluYXRlc1wiLCBcImdwc1wiLCBcImxvY2FsaXplXCIsIFwibG9jYXRpb25cIiwgXCJtYXBcIiwgXCJwaW5cIiwgXCJwbGFjZVwiLCBcInBvc2l0aW9uXCIsIFwidHJhdmVsXCIsIFwid2hlcmVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1tYXAtcGluXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFkZHJlc3NcIiwgXCJjb29yZGluYXRlc1wiLCBcImdwc1wiLCBcImxvY2FsaXplXCIsIFwibG9jYXRpb25cIiwgXCJtYXBcIiwgXCJtYXJrZXJcIiwgXCJwbGFjZVwiLCBcInBvc2l0aW9uXCIsIFwidHJhdmVsXCIsIFwid2hlcmVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1tYXAtc2lnbnNcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtbWFya2Rvd25cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtbWFya2VyXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImVkaXRcIiwgXCJzaGFycGllXCIsIFwidXBkYXRlXCIsIFwid3JpdGVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1tYXJzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcIm1hbGVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1tYXJzLWRvdWJsZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1tYXJzLXN0cm9rZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1tYXJzLXN0cm9rZS1oXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLW1hcnMtc3Ryb2tlLXZcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtbWFza1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJjb3N0dW1lXCIsIFwiZGlzZ3Vpc2VcIiwgXCJoYWxsb3dlZW5cIiwgXCJob2xpZGF5XCIsIFwic2VjcmV0XCIsIFwic3VwZXIgaGVyb1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLW1hc3RvZG9uXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLW1heGNkblwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1tZWRhbFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1tZWRhcHBzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLW1lZGl1bVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1tZWRpdW0tbVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1tZWRraXRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZmlyc3QgYWlkXCIsIFwiZmlyc3RhaWRcIiwgXCJoZWFsdGhcIiwgXCJoZWxwXCIsIFwic3VwcG9ydFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLW1lZHJ0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLW1lZXR1cFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1tZWdhcG9ydFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1tZWhcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZW1vdGljb25cIiwgXCJmYWNlXCIsIFwibmV1dHJhbFwiLCBcInJhdGluZ1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLW1laFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJlbW90aWNvblwiLCBcImZhY2VcIiwgXCJuZXV0cmFsXCIsIFwicmF0aW5nXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtbWVoLWJsYW5rXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImVtb3RpY29uXCIsIFwiZmFjZVwiLCBcIm5ldXRyYWxcIiwgXCJyYXRpbmdcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1tZWgtYmxhbmtcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZW1vdGljb25cIiwgXCJmYWNlXCIsIFwibmV1dHJhbFwiLCBcInJhdGluZ1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLW1laC1yb2xsaW5nLWV5ZXNcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZW1vdGljb25cIiwgXCJmYWNlXCIsIFwibmV1dHJhbFwiLCBcInJhdGluZ1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLW1laC1yb2xsaW5nLWV5ZXNcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZW1vdGljb25cIiwgXCJmYWNlXCIsIFwibmV1dHJhbFwiLCBcInJhdGluZ1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLW1lbW9yeVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJESU1NXCIsIFwiUkFNXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtbWVub3JhaFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJjYW5kbGVcIiwgXCJoYW51a2thaFwiLCBcImpld2lzaFwiLCBcImp1ZGFpc21cIiwgXCJsaWdodFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLW1lcmN1cnlcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwidHJhbnNnZW5kZXJcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1tZXRlb3JcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtbWljcm9jaGlwXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImNwdVwiLCBcInByb2Nlc3NvclwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLW1pY3JvcGhvbmVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwicmVjb3JkXCIsIFwic291bmRcIiwgXCJ2b2ljZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLW1pY3JvcGhvbmUtYWx0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcInJlY29yZFwiLCBcInNvdW5kXCIsIFwidm9pY2VcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1taWNyb3Bob25lLWFsdC1zbGFzaFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJkaXNhYmxlXCIsIFwibXV0ZVwiLCBcInJlY29yZFwiLCBcInNvdW5kXCIsIFwidm9pY2VcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1taWNyb3Bob25lLXNsYXNoXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImRpc2FibGVcIiwgXCJtdXRlXCIsIFwicmVjb3JkXCIsIFwic291bmRcIiwgXCJ2b2ljZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLW1pY3Jvc2NvcGVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtbWljcm9zb2Z0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLW1pbnVzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImNvbGxhcHNlXCIsIFwiZGVsZXRlXCIsIFwiaGlkZVwiLCBcIm1pbmlmeVwiLCBcIm5lZ2F0aXZlXCIsIFwicmVtb3ZlXCIsIFwidHJhc2hcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1taW51cy1jaXJjbGVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZGVsZXRlXCIsIFwiaGlkZVwiLCBcIm5lZ2F0aXZlXCIsIFwicmVtb3ZlXCIsIFwidHJhc2hcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1taW51cy1zcXVhcmVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY29sbGFwc2VcIiwgXCJkZWxldGVcIiwgXCJoaWRlXCIsIFwibWluaWZ5XCIsIFwibmVnYXRpdmVcIiwgXCJyZW1vdmVcIiwgXCJ0cmFzaFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLW1pbnVzLXNxdWFyZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJjb2xsYXBzZVwiLCBcImRlbGV0ZVwiLCBcImhpZGVcIiwgXCJtaW5pZnlcIiwgXCJuZWdhdGl2ZVwiLCBcInJlbW92ZVwiLCBcInRyYXNoXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtbWl4XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLW1peGNsb3VkXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLW1penVuaVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1tb2JpbGVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYXBwbGVcIiwgXCJjYWxsXCIsIFwiY2VsbCBwaG9uZVwiLCBcImNlbGxwaG9uZVwiLCBcImRldmljZVwiLCBcImlwaG9uZVwiLCBcIm51bWJlclwiLCBcInNjcmVlblwiLCBcInRlbGVwaG9uZVwiLCBcInRleHRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1tb2JpbGUtYWx0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFwcGxlXCIsIFwiY2FsbFwiLCBcImNlbGwgcGhvbmVcIiwgXCJjZWxscGhvbmVcIiwgXCJkZXZpY2VcIiwgXCJpcGhvbmVcIiwgXCJudW1iZXJcIiwgXCJzY3JlZW5cIiwgXCJ0ZWxlcGhvbmVcIiwgXCJ0ZXh0XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtbW9keFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1tb25lcm9cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtbW9uZXktYmlsbFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJidXlcIiwgXCJjYXNoXCIsIFwiY2hlY2tvdXRcIiwgXCJtb25leVwiLCBcInBheW1lbnRcIiwgXCJwcmljZVwiLCBcInB1cmNoYXNlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtbW9uZXktYmlsbC1hbHRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYnV5XCIsIFwiY2FzaFwiLCBcImNoZWNrb3V0XCIsIFwibW9uZXlcIiwgXCJwYXltZW50XCIsIFwicHJpY2VcIiwgXCJwdXJjaGFzZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLW1vbmV5LWJpbGwtYWx0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJ1eVwiLCBcImNhc2hcIiwgXCJjaGVja291dFwiLCBcIm1vbmV5XCIsIFwicGF5bWVudFwiLCBcInByaWNlXCIsIFwicHVyY2hhc2VcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1tb25leS1iaWxsLXdhdmVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtbW9uZXktYmlsbC13YXZlLWFsdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1tb25leS1jaGVja1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJiYW5rIGNoZWNrXCIsIFwiY2hlcXVlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtbW9uZXktY2hlY2stYWx0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJhbmsgY2hlY2tcIiwgXCJjaGVxdWVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1tb251bWVudFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJidWlsZGluZ1wiLCBcImhpc3RvcmljXCIsIFwibWVtb3JvYWJsZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLW1vb25cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY29udHJhc3RcIiwgXCJjcmVzY2VudFwiLCBcImRhcmtlclwiLCBcImx1bmFyXCIsIFwibmlnaHRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1tb29uXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImNvbnRyYXN0XCIsIFwiY3Jlc2NlbnRcIiwgXCJkYXJrZXJcIiwgXCJsdW5hclwiLCBcIm5pZ2h0XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtbW9ydGFyLXBlc3RsZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJjcnVzaFwiLCBcImN1bGluYXJ5XCIsIFwiZ3JpbmRcIiwgXCJtZWRpY2FsXCIsIFwibWl4XCIsIFwic3BpY2VzXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtbW9zcXVlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJ1aWxkaW5nXCIsIFwiaXNsYW1cIiwgXCJtdXNsaW1cIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1tb3RvcmN5Y2xlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJpa2VcIiwgXCJtYWNoaW5lXCIsIFwidHJhbnNwb3J0YXRpb25cIiwgXCJ2ZWhpY2xlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtbW91bnRhaW5cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtbW91c2UtcG9pbnRlclwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJzZWxlY3RcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1tdXNpY1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJub3RlXCIsIFwic291bmRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1uYXBzdGVyXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLW5lb3NcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtbmV0d29yay13aXJlZFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1uZXV0ZXJcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtbmV3c3BhcGVyXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFydGljbGVcIiwgXCJwcmVzc1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLW5ld3NwYXBlclwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhcnRpY2xlXCIsIFwicHJlc3NcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1uaW1ibHJcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtbmludGVuZG8tc3dpdGNoXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLW5vZGVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtbm9kZS1qc1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1ub3QtZXF1YWxcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtbm90ZXMtbWVkaWNhbFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1ucG1cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtbnM4XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLW51dHJpdGlvbml4XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLW9iamVjdC1ncm91cFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJkZXNpZ25cIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1vYmplY3QtZ3JvdXBcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZGVzaWduXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtb2JqZWN0LXVuZ3JvdXBcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZGVzaWduXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtb2JqZWN0LXVuZ3JvdXBcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZGVzaWduXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtb2Rub2tsYXNzbmlraVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1vZG5va2xhc3NuaWtpLXNxdWFyZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1vaWwtY2FuXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLW9sZC1yZXB1YmxpY1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJwb2xpdGljc1wiLCBcInN0YXIgd2Fyc1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLW9tXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJ1ZGRoaXNtXCIsIFwiaGluZHVpc21cIiwgXCJqYWluaXNtXCIsIFwibWFudHJhXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtb3BlbmNhcnRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtb3BlbmlkXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLW9wZXJhXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLW9wdGluLW1vbnN0ZXJcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtb3NpXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLW90dGVyXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImZhdW5hXCIsIFwibWFtbW1hbFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLW91dGRlbnRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtcGFnZTRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtcGFnZWxpbmVzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImVjb1wiLCBcImZsb3JhXCIsIFwibGVhZlwiLCBcImxlYXZlc1wiLCBcIm5hdHVyZVwiLCBcInBsYW50XCIsIFwidHJlZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXBhaW50LWJydXNoXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXBhaW50LXJvbGxlclwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJicnVzaFwiLCBcInBhaW50aW5nXCIsIFwidG9vbFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXBhbGV0dGVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY29sb3JzXCIsIFwicGFpbnRpbmdcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1wYWxmZWRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtcGFsbGV0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXBhcGVyLXBsYW5lXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLXBhcGVyLXBsYW5lXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXBhcGVyY2xpcFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhdHRhY2htZW50XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtcGFyYWNodXRlLWJveFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhaWRcIiwgXCJhc3Npc3RhbmNlXCIsIFwicmVzY3VlXCIsIFwic3VwcGxpZXNcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1wYXJhZ3JhcGhcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtcGFya2luZ1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1wYXNzcG9ydFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJkb2N1bWVudFwiLCBcImlkZW50aWZpY2F0aW9uXCIsIFwiaXNzdWVkXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtcGFzdGFmYXJpYW5pc21cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYWdub3N0aWNpc21cIiwgXCJhdGhlaXNtXCIsIFwiZmx5aW5nIHNwYWdoZXR0aSBtb25zdGVyXCIsIFwiZnNtXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtcGFzdGVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY2xpcGJvYXJkXCIsIFwiY29weVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXBhdHJlb25cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtcGF1c2VcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwid2FpdFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXBhdXNlLWNpcmNsZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1wYXVzZS1jaXJjbGVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtcGF3XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFuaW1hbFwiLCBcInBldFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXBheXBhbFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1wZWFjZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1wZW5cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZGVzaWduXCIsIFwiZWRpdFwiLCBcInVwZGF0ZVwiLCBcIndyaXRlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtcGVuLWFsdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJkZXNpZ25cIiwgXCJlZGl0XCIsIFwidXBkYXRlXCIsIFwid3JpdGVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1wZW4tZmFuY3lcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZGVzaWduXCIsIFwiZWRpdFwiLCBcImZvdW50YWluIHBlblwiLCBcInVwZGF0ZVwiLCBcIndyaXRlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtcGVuLW5pYlwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJkZXNpZ25cIiwgXCJlZGl0XCIsIFwiZm91bnRhaW4gcGVuXCIsIFwidXBkYXRlXCIsIFwid3JpdGVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1wZW4tc3F1YXJlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImVkaXRcIiwgXCJwZW5jaWwtc3F1YXJlXCIsIFwidXBkYXRlXCIsIFwid3JpdGVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1wZW5jaWwtYWx0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImRlc2lnblwiLCBcImVkaXRcIiwgXCJwZW5jaWxcIiwgXCJ1cGRhdGVcIiwgXCJ3cml0ZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXBlbmNpbC1ydWxlclwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1wZW5ueS1hcmNhZGVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiRHVuZ2VvbnMgJiBEcmFnb25zXCIsIFwiZCZkXCIsIFwiZG5kXCIsIFwiZmFudGFzeVwiLCBcImdhbWVcIiwgXCJnYW1pbmdcIiwgXCJwYXhcIiwgXCJ0YWJsZXRvcFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXBlb3BsZS1jYXJyeVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJtb3ZlcnNcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1wZXJjZW50XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXBlcmNlbnRhZ2VcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtcGVyaXNjb3BlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXBlcnNvbi1ib290aFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJjaGFuZ2luZ1wiLCBcImNoYW5naW5nIHJvb21cIiwgXCJlbGVjdGlvblwiLCBcImh1bWFuXCIsIFwicGVyc29uXCIsIFwidm90ZVwiLCBcInZvdGluZ1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXBoYWJyaWNhdG9yXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXBob2VuaXgtZnJhbWV3b3JrXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXBob2VuaXgtc3F1YWRyb25cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtcGhvbmVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY2FsbFwiLCBcImVhcnBob25lXCIsIFwibnVtYmVyXCIsIFwic3VwcG9ydFwiLCBcInRlbGVwaG9uZVwiLCBcInZvaWNlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtcGhvbmUtc2xhc2hcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtcGhvbmUtc3F1YXJlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImNhbGxcIiwgXCJudW1iZXJcIiwgXCJzdXBwb3J0XCIsIFwidGVsZXBob25lXCIsIFwidm9pY2VcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1waG9uZS12b2x1bWVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwidGVsZXBob25lXCIsIFwidm9sdW1lLWNvbnRyb2wtcGhvbmVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1waHBcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtcGllZC1waXBlclwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1waWVkLXBpcGVyLWFsdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1waWVkLXBpcGVyLWhhdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJjbG90aGluZ1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXBpZWQtcGlwZXItcHBcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtcGlnZ3ktYmFua1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJzYXZlXCIsIFwic2F2aW5nc1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXBpbGxzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImRydWdzXCIsIFwibWVkaWNpbmVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1waW50ZXJlc3RcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtcGludGVyZXN0LXBcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtcGludGVyZXN0LXNxdWFyZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1wbGFjZS1vZi13b3JzaGlwXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXBsYW5lXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFpcnBsYW5lXCIsIFwiZGVzdGluYXRpb25cIiwgXCJmbHlcIiwgXCJsb2NhdGlvblwiLCBcIm1vZGVcIiwgXCJ0cmF2ZWxcIiwgXCJ0cmlwXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtcGxhbmUtYXJyaXZhbFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhaXJwbGFuZVwiLCBcImFycml2aW5nXCIsIFwiZGVzdGluYXRpb25cIiwgXCJmbHlcIiwgXCJsYW5kXCIsIFwibGFuZGluZ1wiLCBcImxvY2F0aW9uXCIsIFwibW9kZVwiLCBcInRyYXZlbFwiLCBcInRyaXBcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1wbGFuZS1kZXBhcnR1cmVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYWlycGxhbmVcIiwgXCJkZXBhcnRpbmdcIiwgXCJkZXN0aW5hdGlvblwiLCBcImZseVwiLCBcImxvY2F0aW9uXCIsIFwibW9kZVwiLCBcInRha2Ugb2ZmXCIsIFwidGFraW5nIG9mZlwiLCBcInRyYXZlbFwiLCBcInRyaXBcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1wbGF5XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcIm11c2ljXCIsIFwicGxheWluZ1wiLCBcInNvdW5kXCIsIFwic3RhcnRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1wbGF5LWNpcmNsZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJwbGF5aW5nXCIsIFwic3RhcnRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1wbGF5LWNpcmNsZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJwbGF5aW5nXCIsIFwic3RhcnRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1wbGF5c3RhdGlvblwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1wbHVnXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImNvbm5lY3RcIiwgXCJvbmxpbmVcIiwgXCJwb3dlclwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXBsdXNcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYWRkXCIsIFwiY3JlYXRlXCIsIFwiZXhwYW5kXCIsIFwibmV3XCIsIFwicG9zaXRpdmVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1wbHVzLWNpcmNsZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhZGRcIiwgXCJjcmVhdGVcIiwgXCJleHBhbmRcIiwgXCJuZXdcIiwgXCJwb3NpdGl2ZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXBsdXMtc3F1YXJlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFkZFwiLCBcImNyZWF0ZVwiLCBcImV4cGFuZFwiLCBcIm5ld1wiLCBcInBvc2l0aXZlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtcGx1cy1zcXVhcmVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYWRkXCIsIFwiY3JlYXRlXCIsIFwiZXhwYW5kXCIsIFwibmV3XCIsIFwicG9zaXRpdmVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1wb2RjYXN0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXBvbGxcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwicmVzdWx0c1wiLCBcInN1cnZleVwiLCBcInZvdGVcIiwgXCJ2b3RpbmdcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1wb2xsLWhcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwicmVzdWx0c1wiLCBcInN1cnZleVwiLCBcInZvdGVcIiwgXCJ2b3RpbmdcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1wb29cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtcG9vLXN0b3JtXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcIm1lc3NcIiwgXCJwb29wXCIsIFwic2hpdFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXBvb3BcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtcG9ydHJhaXRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtcG91bmQtc2lnblwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJnYnBcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1wb3dlci1vZmZcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwib25cIiwgXCJyZWJvb3RcIiwgXCJyZXN0YXJ0XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtcHJheVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1wcmF5aW5nLWhhbmRzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXByZXNjcmlwdGlvblwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJkcnVnc1wiLCBcIm1lZGljYWxcIiwgXCJtZWRpY2luZVwiLCBcInJ4XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtcHJlc2NyaXB0aW9uLWJvdHRsZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJkcnVnc1wiLCBcIm1lZGljYWxcIiwgXCJtZWRpY2luZVwiLCBcInJ4XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtcHJlc2NyaXB0aW9uLWJvdHRsZS1hbHRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZHJ1Z3NcIiwgXCJtZWRpY2FsXCIsIFwibWVkaWNpbmVcIiwgXCJyeFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXByaW50XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXByb2NlZHVyZXNcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtcHJvZHVjdC1odW50XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXByb2plY3QtZGlhZ3JhbVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1wdXNoZWRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtcHV6emxlLXBpZWNlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFkZC1vblwiLCBcImFkZG9uXCIsIFwic2VjdGlvblwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXB5dGhvblwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1xcVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1xcmNvZGVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwic2NhblwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXF1ZXN0aW9uXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImhlbHBcIiwgXCJpbmZvcm1hdGlvblwiLCBcInN1cHBvcnRcIiwgXCJ1bmtub3duXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtcXVlc3Rpb24tY2lyY2xlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImhlbHBcIiwgXCJpbmZvcm1hdGlvblwiLCBcInN1cHBvcnRcIiwgXCJ1bmtub3duXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtcXVlc3Rpb24tY2lyY2xlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImhlbHBcIiwgXCJpbmZvcm1hdGlvblwiLCBcInN1cHBvcnRcIiwgXCJ1bmtub3duXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtcXVpZGRpdGNoXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXF1aW5zY2FwZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1xdW9yYVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1xdW90ZS1sZWZ0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXF1b3RlLXJpZ2h0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXF1cmFuXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJvb2tcIiwgXCJpc2xhbVwiLCBcIm11c2xpbVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXItcHJvamVjdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1yYWluYm93XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXJhbmRvbVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJzaHVmZmxlXCIsIFwic29ydFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXJhdmVscnlcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtcmVhY3RcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtcmVhY3RldXJvcGVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtcmVhZG1lXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXJlYmVsXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXJlY2VpcHRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY2hlY2tcIiwgXCJpbnZvaWNlXCIsIFwidGFibGVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1yZWN5Y2xlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXJlZC1yaXZlclwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1yZWRkaXRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtcmVkZGl0LWFsaWVuXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXJlZGRpdC1zcXVhcmVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtcmVkb1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJmb3J3YXJkXCIsIFwicmVmcmVzaFwiLCBcInJlbG9hZFwiLCBcInJlcGVhdFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXJlZG8tYWx0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImZvcndhcmRcIiwgXCJyZWZyZXNoXCIsIFwicmVsb2FkXCIsIFwicmVwZWF0XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtcmVnaXN0ZXJlZFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1yZWdpc3RlcmVkXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXJlbnJlblwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1yZXBseVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1yZXBseS1hbGxcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtcmVwbHlkXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXJlcHVibGljYW5cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYW1lcmljYW5cIiwgXCJjb25zZXJ2YXRpdmVcIiwgXCJlbGVjdGlvblwiLCBcImVsZXBoYW50XCIsIFwicG9saXRpY3NcIiwgXCJyZXB1YmxpY2FuIHBhcnR5XCIsIFwicmlnaHRcIiwgXCJyaWdodC13aW5nXCIsIFwidXNhXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtcmVzZWFyY2hnYXRlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXJlc29sdmluZ1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1yZXR3ZWV0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcInJlZnJlc2hcIiwgXCJyZWxvYWRcIiwgXCJzaGFyZVwiLCBcInN3YXBcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1yZXZcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtcmliYm9uXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJhZGdlXCIsIFwiY2F1c2VcIiwgXCJsYXBlbFwiLCBcInBpblwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXJpbmdcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiRHVuZ2VvbnMgJiBEcmFnb25zXCIsIFwiR29sbHVtXCIsIFwiYmFuZFwiLCBcImJpbmRpbmdcIiwgXCJkJmRcIiwgXCJkbmRcIiwgXCJmYW50YXN5XCIsIFwiamV3ZWxyeVwiLCBcInByZWNpb3VzXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtcm9hZFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJzdHJlZXRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1yb2JvdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1yb2NrZXRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYXBwXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtcm9ja2V0Y2hhdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1yb2Nrcm1zXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXJvdXRlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXJzc1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJibG9nXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtcnNzLXNxdWFyZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJibG9nXCIsIFwiZmVlZFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXJ1YmxlLXNpZ25cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwicnViXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtcnVsZXJcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtcnVsZXItY29tYmluZWRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtcnVsZXItaG9yaXpvbnRhbFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1ydWxlci12ZXJ0aWNhbFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1ydW5uaW5nXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImpvZ1wiLCBcInNwcmludFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXJ1cGVlLXNpZ25cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiaW5kaWFuXCIsIFwiaW5yXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtc2FkLWNyeVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJlbW90aWNvblwiLCBcImZhY2VcIiwgXCJ0ZWFyXCIsIFwidGVhcnNcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1zYWQtY3J5XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImVtb3RpY29uXCIsIFwiZmFjZVwiLCBcInRlYXJcIiwgXCJ0ZWFyc1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXNhZC10ZWFyXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImVtb3RpY29uXCIsIFwiZmFjZVwiLCBcInRlYXJcIiwgXCJ0ZWFyc1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLXNhZC10ZWFyXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImVtb3RpY29uXCIsIFwiZmFjZVwiLCBcInRlYXJcIiwgXCJ0ZWFyc1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXNhZmFyaVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJicm93c2VyXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtc2Fzc1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1zYXZlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImZsb3BweVwiLCBcImZsb3BweS1vXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtc2F2ZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJmbG9wcHlcIiwgXCJmbG9wcHktb1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXNjaGxpeFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1zY2hvb2xcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtc2NyZXdkcml2ZXJcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYWRtaW5cIiwgXCJmaXhcIiwgXCJyZXBhaXJcIiwgXCJzZXR0aW5nc1wiLCBcInRvb2xcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1zY3JpYmRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtc2Nyb2xsXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcIkR1bmdlb25zICYgRHJhZ29uc1wiLCBcImFubm91bmNlbWVudFwiLCBcImQmZFwiLCBcImRuZFwiLCBcImZhbnRhc3lcIiwgXCJwYXBlclwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXNlYXJjaFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJiaWdnZXJcIiwgXCJlbmxhcmdlXCIsIFwibWFnbmlmeVwiLCBcInByZXZpZXdcIiwgXCJ6b29tXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtc2VhcmNoLWRvbGxhclwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1zZWFyY2gtbG9jYXRpb25cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtc2VhcmNoLW1pbnVzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcIm1pbmlmeVwiLCBcIm5lZ2F0aXZlXCIsIFwic21hbGxlclwiLCBcInpvb21cIiwgXCJ6b29tIG91dFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXNlYXJjaC1wbHVzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJpZ2dlclwiLCBcImVubGFyZ2VcIiwgXCJtYWduaWZ5XCIsIFwicG9zaXRpdmVcIiwgXCJ6b29tXCIsIFwiem9vbSBpblwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXNlYXJjaGVuZ2luXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXNlZWRsaW5nXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXNlbGxjYXN0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImVlcmNhc3RcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1zZWxsc3lcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtc2VydmVyXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImNwdVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXNlcnZpY2VzdGFja1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1zaGFwZXNcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY2lyY2xlXCIsIFwic3F1YXJlXCIsIFwidHJpYW5nbGVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1zaGFyZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1zaGFyZS1hbHRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtc2hhcmUtYWx0LXNxdWFyZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1zaGFyZS1zcXVhcmVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwic2VuZFwiLCBcInNvY2lhbFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLXNoYXJlLXNxdWFyZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJzZW5kXCIsIFwic29jaWFsXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtc2hla2VsLXNpZ25cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiaWxzXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtc2hpZWxkLWFsdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhY2hpZXZlbWVudFwiLCBcImF3YXJkXCIsIFwiYmxvY2tcIiwgXCJkZWZlbmRcIiwgXCJzZWN1cml0eVwiLCBcIndpbm5lclwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXNoaXBcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYm9hdFwiLCBcInNlYVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXNoaXBwaW5nLWZhc3RcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtc2hpcnRzaW5idWxrXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXNob2UtcHJpbnRzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImZlZXRcIiwgXCJmb290cHJpbnRzXCIsIFwic3RlcHNcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1zaG9wcGluZy1iYWdcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtc2hvcHBpbmctYmFza2V0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXNob3BwaW5nLWNhcnRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYnV5XCIsIFwiY2hlY2tvdXRcIiwgXCJwYXltZW50XCIsIFwicHVyY2hhc2VcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1zaG9wd2FyZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1zaG93ZXJcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtc2h1dHRsZS12YW5cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwibWFjaGluZVwiLCBcInB1YmxpYy10cmFuc3BvcnRhdGlvblwiLCBcInRyYW5zcG9ydGF0aW9uXCIsIFwidmVoaWNsZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXNpZ25cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtc2lnbi1pbi1hbHRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYXJyb3dcIiwgXCJlbnRlclwiLCBcImpvaW5cIiwgXCJsb2cgaW5cIiwgXCJsb2dpblwiLCBcInNpZ24gaW5cIiwgXCJzaWduIHVwXCIsIFwic2lnbi1pblwiLCBcInNpZ25pblwiLCBcInNpZ251cFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXNpZ24tbGFuZ3VhZ2VcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtc2lnbi1vdXQtYWx0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFycm93XCIsIFwiZXhpdFwiLCBcImxlYXZlXCIsIFwibG9nIG91dFwiLCBcImxvZ291dFwiLCBcInNpZ24tb3V0XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtc2lnbmFsXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJhcnNcIiwgXCJncmFwaFwiLCBcIm9ubGluZVwiLCBcInN0YXR1c1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXNpZ25hdHVyZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJKb2huIEhhbmNvY2tcIiwgXCJjdXJzaXZlXCIsIFwibmFtZVwiLCBcIndyaXRpbmdcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1zaW1wbHlidWlsdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1zaXN0cml4XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXNpdGVtYXBcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZGlyZWN0b3J5XCIsIFwiaGllcmFyY2h5XCIsIFwiaWFcIiwgXCJpbmZvcm1hdGlvbiBhcmNoaXRlY3R1cmVcIiwgXCJvcmdhbml6YXRpb25cIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1zaXRoXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXNrdWxsXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJvbmVzXCIsIFwic2tlbGV0b25cIiwgXCJ5b3JpY2tcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1za3VsbC1jcm9zc2JvbmVzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcIkR1bmdlb25zICYgRHJhZ29uc1wiLCBcImFsZXJ0XCIsIFwiYm9uZXNcIiwgXCJkJmRcIiwgXCJkYW5nZXJcIiwgXCJkZWFkXCIsIFwiZGVhZGx5XCIsIFwiZGVhdGhcIiwgXCJkbmRcIiwgXCJmYW50YXN5XCIsIFwiaGFsbG93ZWVuXCIsIFwiaG9saWRheVwiLCBcImpvbGx5LXJvZ2VyXCIsIFwicGlyYXRlXCIsIFwicG9pc29uXCIsIFwic2tlbGV0b25cIiwgXCJ3YXJuaW5nXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtc2t5YXRsYXNcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtc2t5cGVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtc2xhY2tcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYW5jaG9yXCIsIFwiaGFzaFwiLCBcImhhc2h0YWdcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1zbGFjay1oYXNoXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFuY2hvclwiLCBcImhhc2hcIiwgXCJoYXNodGFnXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtc2xhc2hcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtc2xpZGVycy1oXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcInNldHRpbmdzXCIsIFwic2xpZGVyc1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXNsaWRlc2hhcmVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtc21pbGVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYXBwcm92ZVwiLCBcImVtb3RpY29uXCIsIFwiZmFjZVwiLCBcImhhcHB5XCIsIFwicmF0aW5nXCIsIFwic2F0aXNmaWVkXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtc21pbGVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYXBwcm92ZVwiLCBcImVtb3RpY29uXCIsIFwiZmFjZVwiLCBcImhhcHB5XCIsIFwicmF0aW5nXCIsIFwic2F0aXNmaWVkXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtc21pbGUtYmVhbVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJlbW90aWNvblwiLCBcImZhY2VcIiwgXCJoYXBweVwiLCBcInBvc2l0aXZlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtc21pbGUtYmVhbVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJlbW90aWNvblwiLCBcImZhY2VcIiwgXCJoYXBweVwiLCBcInBvc2l0aXZlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtc21pbGUtd2lua1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJlbW90aWNvblwiLCBcImZhY2VcIiwgXCJoYXBweVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLXNtaWxlLXdpbmtcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZW1vdGljb25cIiwgXCJmYWNlXCIsIFwiaGFwcHlcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1zbW9nXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImRyYWdvblwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXNtb2tpbmdcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY2lnYXJldHRlXCIsIFwibmljb3RpbmVcIiwgXCJzbW9raW5nIHN0YXR1c1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXNtb2tpbmctYmFuXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcIm5vIHNtb2tpbmdcIiwgXCJub24tc21va2luZ1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXNuYXBjaGF0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXNuYXBjaGF0LWdob3N0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXNuYXBjaGF0LXNxdWFyZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1zbm93Zmxha2VcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwicHJlY2lwaXRhdGlvblwiLCBcInNlYXNvbmFsXCIsIFwid2ludGVyXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtc25vd2ZsYWtlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcInByZWNpcGl0YXRpb25cIiwgXCJzZWFzb25hbFwiLCBcIndpbnRlclwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXNvY2tzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJ1c2luZXNzIHNvY2tzXCIsIFwiYnVzaW5lc3MgdGltZVwiLCBcImZsaWdodCBvZiB0aGUgY29uY2hvcmRzXCIsIFwid2VkbmVzZGF5XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtc29sYXItcGFuZWxcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY2xlYW5cIiwgXCJlY28tZnJpZW5kbHlcIiwgXCJlbmVyZ3lcIiwgXCJncmVlblwiLCBcInN1blwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXNvcnRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwib3JkZXJcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1zb3J0LWFscGhhLWRvd25cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwic29ydC1hbHBoYS1hc2NcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1zb3J0LWFscGhhLXVwXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcInNvcnQtYWxwaGEtZGVzY1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXNvcnQtYW1vdW50LWRvd25cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwic29ydC1hbW91bnQtYXNjXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtc29ydC1hbW91bnQtdXBcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwic29ydC1hbW91bnQtZGVzY1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXNvcnQtZG93blwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhcnJvd1wiLCBcImRlc2NlbmRpbmdcIiwgXCJzb3J0LWRlc2NcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1zb3J0LW51bWVyaWMtZG93blwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJudW1iZXJzXCIsIFwic29ydC1udW1lcmljLWFzY1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXNvcnQtbnVtZXJpYy11cFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJudW1iZXJzXCIsIFwic29ydC1udW1lcmljLWRlc2NcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1zb3J0LXVwXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFycm93XCIsIFwiYXNjZW5kaW5nXCIsIFwic29ydC1hc2NcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1zb3VuZGNsb3VkXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXNwYVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJmbG9yYVwiLCBcIm1pbmRmdWxsbmVzc1wiLCBcInBsYW50XCIsIFwid2VsbG5lc3NcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1zcGFjZS1zaHV0dGxlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFzdHJvbmF1dFwiLCBcIm1hY2hpbmVcIiwgXCJuYXNhXCIsIFwicm9ja2V0XCIsIFwidHJhbnNwb3J0YXRpb25cIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1zcGVha2FwXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXNwaWRlclwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhcmFjaG5pZFwiLCBcImJ1Z1wiLCBcImNoYXJsb3R0ZVwiLCBcImNyYXdsXCIsIFwiZWlnaHRcIiwgXCJoYWxsb3dlZW5cIiwgXCJob2xpZGF5XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtc3Bpbm5lclwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJsb2FkaW5nXCIsIFwicHJvZ3Jlc3NcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1zcGxvdGNoXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXNwb3RpZnlcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtc3ByYXktY2FuXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXNxdWFyZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJibG9ja1wiLCBcImJveFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLXNxdWFyZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJibG9ja1wiLCBcImJveFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXNxdWFyZS1mdWxsXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXNxdWFyZS1yb290LWFsdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1zcXVhcmVzcGFjZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1zdGFjay1leGNoYW5nZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1zdGFjay1vdmVyZmxvd1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1zdGFtcFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1zdGFyXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFjaGlldmVtZW50XCIsIFwiYXdhcmRcIiwgXCJmYXZvcml0ZVwiLCBcImltcG9ydGFudFwiLCBcIm5pZ2h0XCIsIFwicmF0aW5nXCIsIFwic2NvcmVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1zdGFyXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFjaGlldmVtZW50XCIsIFwiYXdhcmRcIiwgXCJmYXZvcml0ZVwiLCBcImltcG9ydGFudFwiLCBcIm5pZ2h0XCIsIFwicmF0aW5nXCIsIFwic2NvcmVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1zdGFyLWFuZC1jcmVzY2VudFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJpc2xhbVwiLCBcIm11c2xpbVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXN0YXItaGFsZlwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhY2hpZXZlbWVudFwiLCBcImF3YXJkXCIsIFwicmF0aW5nXCIsIFwic2NvcmVcIiwgXCJzdGFyLWhhbGYtZW1wdHlcIiwgXCJzdGFyLWhhbGYtZnVsbFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLXN0YXItaGFsZlwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhY2hpZXZlbWVudFwiLCBcImF3YXJkXCIsIFwicmF0aW5nXCIsIFwic2NvcmVcIiwgXCJzdGFyLWhhbGYtZW1wdHlcIiwgXCJzdGFyLWhhbGYtZnVsbFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXN0YXItaGFsZi1hbHRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYWNoaWV2ZW1lbnRcIiwgXCJhd2FyZFwiLCBcInJhdGluZ1wiLCBcInNjb3JlXCIsIFwic3Rhci1oYWxmLWVtcHR5XCIsIFwic3Rhci1oYWxmLWZ1bGxcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1zdGFyLW9mLWRhdmlkXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImpld2lzaFwiLCBcImp1ZGFpc21cIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1zdGFyLW9mLWxpZmVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtc3RheWxpbmtlZFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1zdGVhbVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1zdGVhbS1zcXVhcmVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtc3RlYW0tc3ltYm9sXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXN0ZXAtYmFja3dhcmRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYmVnaW5uaW5nXCIsIFwiZmlyc3RcIiwgXCJwcmV2aW91c1wiLCBcInJld2luZFwiLCBcInN0YXJ0XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtc3RlcC1mb3J3YXJkXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImVuZFwiLCBcImxhc3RcIiwgXCJuZXh0XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtc3RldGhvc2NvcGVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtc3RpY2tlci1tdWxlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXN0aWNreS1ub3RlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLXN0aWNreS1ub3RlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXN0b3BcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYmxvY2tcIiwgXCJib3hcIiwgXCJzcXVhcmVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1zdG9wLWNpcmNsZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1zdG9wLWNpcmNsZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1zdG9wd2F0Y2hcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwidGltZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXN0b3JlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXN0b3JlLWFsdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1zdHJhdmFcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtc3RyZWFtXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXN0cmVldC12aWV3XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcIm1hcFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXN0cmlrZXRocm91Z2hcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtc3RyaXBlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXN0cmlwZS1zXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXN0cm9vcHdhZmVsXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImRlc3NlcnRcIiwgXCJmb29kXCIsIFwic3dlZXRzXCIsIFwid2FmZmxlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtc3R1ZGlvdmluYXJpXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXN0dW1ibGV1cG9uXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXN0dW1ibGV1cG9uLWNpcmNsZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1zdWJzY3JpcHRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtc3Vid2F5XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcIm1hY2hpbmVcIiwgXCJyYWlsd2F5XCIsIFwidHJhaW5cIiwgXCJ0cmFuc3BvcnRhdGlvblwiLCBcInZlaGljbGVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1zdWl0Y2FzZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJiYWdnYWdlXCIsIFwibHVnZ2FnZVwiLCBcIm1vdmVcIiwgXCJzdWl0Y2FzZVwiLCBcInRyYXZlbFwiLCBcInRyaXBcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1zdWl0Y2FzZS1yb2xsaW5nXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXN1blwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJicmlnaHRlblwiLCBcImNvbnRyYXN0XCIsIFwiZGF5XCIsIFwibGlnaHRlclwiLCBcInNvbFwiLCBcInNvbGFyXCIsIFwic3RhclwiLCBcIndlYXRoZXJcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS1zdW5cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYnJpZ2h0ZW5cIiwgXCJjb250cmFzdFwiLCBcImRheVwiLCBcImxpZ2h0ZXJcIiwgXCJzb2xcIiwgXCJzb2xhclwiLCBcInN0YXJcIiwgXCJ3ZWF0aGVyXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtc3VwZXJwb3dlcnNcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtc3VwZXJzY3JpcHRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZXhwb25lbnRpYWxcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS1zdXBwbGVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtc3VycHJpc2VcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZW1vdGljb25cIiwgXCJmYWNlXCIsIFwic2hvY2tlZFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLXN1cnByaXNlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImVtb3RpY29uXCIsIFwiZmFjZVwiLCBcInNob2NrZWRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1zd2F0Y2hib29rXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXN3aW1tZXJcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYXRobGV0ZVwiLCBcImhlYWRcIiwgXCJtYW5cIiwgXCJwZXJzb25cIiwgXCJ3YXRlclwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXN3aW1taW5nLXBvb2xcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwibGFkZGVyXCIsIFwicmVjcmVhdGlvblwiLCBcIndhdGVyXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtc3luYWdvZ3VlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJ1aWxkaW5nXCIsIFwiamV3aXNoXCIsIFwianVkYWlzbVwiLCBcInN0YXIgb2YgZGF2aWRcIiwgXCJ0ZW1wbGVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1zeW5jXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImV4Y2hhbmdlXCIsIFwicmVmcmVzaFwiLCBcInJlbG9hZFwiLCBcInJvdGF0ZVwiLCBcInN3YXBcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS1zeW5jLWFsdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJyZWZyZXNoXCIsIFwicmVsb2FkXCIsIFwicm90YXRlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtc3lyaW5nZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJpbW11bml6YXRpb25zXCIsIFwibmVlZGxlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtdGFibGVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZGF0YVwiLCBcImV4Y2VsXCIsIFwic3ByZWFkc2hlZXRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS10YWJsZS10ZW5uaXNcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtdGFibGV0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFwcGxlXCIsIFwiZGV2aWNlXCIsIFwiaXBhZFwiLCBcImtpbmRsZVwiLCBcInNjcmVlblwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXRhYmxldC1hbHRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYXBwbGVcIiwgXCJkZXZpY2VcIiwgXCJpcGFkXCIsIFwia2luZGxlXCIsIFwic2NyZWVuXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtdGFibGV0c1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJkcnVnc1wiLCBcIm1lZGljaW5lXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtdGFjaG9tZXRlci1hbHRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZGFzaGJvYXJkXCIsIFwidGFjaG9tZXRlclwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXRhZ1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJsYWJlbFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXRhZ3NcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwibGFiZWxzXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtdGFwZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS10YXNrc1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJkb3dubG9hZGluZ1wiLCBcImRvd25sb2Fkc1wiLCBcImxvYWRpbmdcIiwgXCJwcm9ncmVzc1wiLCBcInNldHRpbmdzXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtdGF4aVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJjYWJcIiwgXCJjYWJiaWVcIiwgXCJjYXJcIiwgXCJjYXIgc2VydmljZVwiLCBcImx5ZnRcIiwgXCJtYWNoaW5lXCIsIFwidHJhbnNwb3J0YXRpb25cIiwgXCJ1YmVyXCIsIFwidmVoaWNsZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXRlYW1zcGVha1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS10ZWV0aFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS10ZWV0aC1vcGVuXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXRlbGVncmFtXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXRlbGVncmFtLXBsYW5lXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXRlbXBlcmF0dXJlLWhpZ2hcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwibWVyY3VyeVwiLCBcInRoZXJtb21ldGVyXCIsIFwid2FybVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXRlbXBlcmF0dXJlLWxvd1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJjb29sXCIsIFwibWVyY3VyeVwiLCBcInRoZXJtb21ldGVyXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtdGVuY2VudC13ZWlib1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS10ZXJtaW5hbFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJjb2RlXCIsIFwiY29tbWFuZFwiLCBcImNvbnNvbGVcIiwgXCJwcm9tcHRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS10ZXh0LWhlaWdodFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS10ZXh0LXdpZHRoXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXRoXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJsb2Nrc1wiLCBcImJveGVzXCIsIFwiZ3JpZFwiLCBcInNxdWFyZXNcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS10aC1sYXJnZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJibG9ja3NcIiwgXCJib3hlc1wiLCBcImdyaWRcIiwgXCJzcXVhcmVzXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtdGgtbGlzdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJjaGVja2xpc3RcIiwgXCJjb21wbGV0ZWRcIiwgXCJkb25lXCIsIFwiZmluaXNoZWRcIiwgXCJvbFwiLCBcInRvZG9cIiwgXCJ1bFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXRoZS1yZWQteWV0aVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS10aGVhdGVyLW1hc2tzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXRoZW1lY29cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtdGhlbWVpc2xlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXRoZXJtb21ldGVyXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcIm1lcmN1cnlcIiwgXCJzdGF0dXNcIiwgXCJ0ZW1wZXJhdHVyZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXRoZXJtb21ldGVyLWVtcHR5XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcIm1lcmN1cnlcIiwgXCJzdGF0dXNcIiwgXCJ0ZW1wZXJhdHVyZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXRoZXJtb21ldGVyLWZ1bGxcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZmV2ZXJcIiwgXCJtZXJjdXJ5XCIsIFwic3RhdHVzXCIsIFwidGVtcGVyYXR1cmVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS10aGVybW9tZXRlci1oYWxmXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcIm1lcmN1cnlcIiwgXCJzdGF0dXNcIiwgXCJ0ZW1wZXJhdHVyZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXRoZXJtb21ldGVyLXF1YXJ0ZXJcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwibWVyY3VyeVwiLCBcInN0YXR1c1wiLCBcInRlbXBlcmF0dXJlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtdGhlcm1vbWV0ZXItdGhyZWUtcXVhcnRlcnNcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwibWVyY3VyeVwiLCBcInN0YXR1c1wiLCBcInRlbXBlcmF0dXJlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtdGhpbmstcGVha3NcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtdGh1bWJzLWRvd25cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZGlzYWdyZWVcIiwgXCJkaXNhcHByb3ZlXCIsIFwiZGlzbGlrZVwiLCBcImhhbmRcIiwgXCJ0aHVtYnMtby1kb3duXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtdGh1bWJzLWRvd25cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZGlzYWdyZWVcIiwgXCJkaXNhcHByb3ZlXCIsIFwiZGlzbGlrZVwiLCBcImhhbmRcIiwgXCJ0aHVtYnMtby1kb3duXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtdGh1bWJzLXVwXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFncmVlXCIsIFwiYXBwcm92ZVwiLCBcImZhdm9yaXRlXCIsIFwiaGFuZFwiLCBcImxpa2VcIiwgXCJva1wiLCBcIm9rYXlcIiwgXCJzdWNjZXNzXCIsIFwidGh1bWJzLW8tdXBcIiwgXCJ5ZXNcIiwgXCJ5b3UgZ290IGl0IGR1ZGVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS10aHVtYnMtdXBcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYWdyZWVcIiwgXCJhcHByb3ZlXCIsIFwiZmF2b3JpdGVcIiwgXCJoYW5kXCIsIFwibGlrZVwiLCBcIm9rXCIsIFwib2theVwiLCBcInN1Y2Nlc3NcIiwgXCJ0aHVtYnMtby11cFwiLCBcInllc1wiLCBcInlvdSBnb3QgaXQgZHVkZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXRodW1idGFja1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJjb29yZGluYXRlc1wiLCBcImxvY2F0aW9uXCIsIFwibWFya2VyXCIsIFwicGluXCIsIFwidGh1bWItdGFja1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXRpY2tldC1hbHRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwidGlja2V0XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtdGltZXNcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY2xvc2VcIiwgXCJjcm9zc1wiLCBcImVycm9yXCIsIFwiZXhpdFwiLCBcImluY29ycmVjdFwiLCBcIm5vdGljZVwiLCBcIm5vdGlmaWNhdGlvblwiLCBcIm5vdGlmeVwiLCBcInByb2JsZW1cIiwgXCJ3cm9uZ1wiLCBcInhcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS10aW1lcy1jaXJjbGVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY2xvc2VcIiwgXCJjcm9zc1wiLCBcImV4aXRcIiwgXCJpbmNvcnJlY3RcIiwgXCJub3RpY2VcIiwgXCJub3RpZmljYXRpb25cIiwgXCJub3RpZnlcIiwgXCJwcm9ibGVtXCIsIFwid3JvbmdcIiwgXCJ4XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtdGltZXMtY2lyY2xlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImNsb3NlXCIsIFwiY3Jvc3NcIiwgXCJleGl0XCIsIFwiaW5jb3JyZWN0XCIsIFwibm90aWNlXCIsIFwibm90aWZpY2F0aW9uXCIsIFwibm90aWZ5XCIsIFwicHJvYmxlbVwiLCBcIndyb25nXCIsIFwieFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXRpbnRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZHJvcFwiLCBcImRyb3BsZXRcIiwgXCJyYWluZHJvcFwiLCBcIndhdGVyZHJvcFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXRpbnQtc2xhc2hcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtdGlyZWRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZW1vdGljb25cIiwgXCJmYWNlXCIsIFwiZ3J1bXB5XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtdGlyZWRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZW1vdGljb25cIiwgXCJmYWNlXCIsIFwiZ3J1bXB5XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtdG9nZ2xlLW9mZlwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJzd2l0Y2hcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS10b2dnbGUtb25cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwic3dpdGNoXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtdG9pbGV0LXBhcGVyXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJhdGhyb29tXCIsIFwiaGFsbG93ZWVuXCIsIFwiaG9saWRheVwiLCBcImxhdmF0b3J5XCIsIFwicHJhbmtcIiwgXCJyZXN0cm9vbVwiLCBcInJvbGxcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS10b29sYm94XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFkbWluXCIsIFwiY29udGFpbmVyXCIsIFwiZml4XCIsIFwicmVwYWlyXCIsIFwic2V0dGluZ3NcIiwgXCJ0b29sc1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXRvb3RoXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJpY3VzcGlkXCIsIFwiZGVudGFsXCIsIFwibW9sYXJcIiwgXCJtb3V0aFwiLCBcInRlZXRoXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtdG9yYWhcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYm9va1wiLCBcImpld2lzaFwiLCBcImp1ZGFpc21cIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS10b3JpaS1nYXRlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJ1aWxkaW5nXCIsIFwic2hpbnRvaXNtXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtdHJhY3RvclwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS10cmFkZS1mZWRlcmF0aW9uXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXRyYWRlbWFya1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS10cmFmZmljLWxpZ2h0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXRyYWluXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJ1bGxldFwiLCBcImxvY29tb3RpdmVcIiwgXCJyYWlsd2F5XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtdHJhbnNnZW5kZXJcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiaW50ZXJzZXhcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS10cmFuc2dlbmRlci1hbHRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtdHJhc2hcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZGVsZXRlXCIsIFwiZ2FyYmFnZVwiLCBcImhpZGVcIiwgXCJyZW1vdmVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS10cmFzaC1hbHRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZGVsZXRlXCIsIFwiZ2FyYmFnZVwiLCBcImhpZGVcIiwgXCJyZW1vdmVcIiwgXCJ0cmFzaFwiLCBcInRyYXNoLW9cIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS10cmFzaC1hbHRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZGVsZXRlXCIsIFwiZ2FyYmFnZVwiLCBcImhpZGVcIiwgXCJyZW1vdmVcIiwgXCJ0cmFzaFwiLCBcInRyYXNoLW9cIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS10cmVlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImJhcmtcIiwgXCJmYWxsXCIsIFwiZmxvcmFcIiwgXCJmb3Jlc3RcIiwgXCJuYXR1cmVcIiwgXCJwbGFudFwiLCBcInNlYXNvbmFsXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtdHJlbGxvXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXRyaXBhZHZpc29yXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXRyb3BoeVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhY2hpZXZlbWVudFwiLCBcImF3YXJkXCIsIFwiY3VwXCIsIFwiZ2FtZVwiLCBcIndpbm5lclwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXRydWNrXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImRlbGl2ZXJ5XCIsIFwic2hpcHBpbmdcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS10cnVjay1sb2FkaW5nXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXRydWNrLW1vbnN0ZXJcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtdHJ1Y2stbW92aW5nXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXRydWNrLXBpY2t1cFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS10c2hpcnRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY2xvdGhcIiwgXCJjbG90aGluZ1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXR0eVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS10dW1ibHJcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtdHVtYmxyLXNxdWFyZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS10dlwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJjb21wdXRlclwiLCBcImRpc3BsYXlcIiwgXCJtb25pdG9yXCIsIFwidGVsZXZpc2lvblwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXR3aXRjaFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS10d2l0dGVyXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcInNvY2lhbCBuZXR3b3JrXCIsIFwidHdlZXRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS10d2l0dGVyLXNxdWFyZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJzb2NpYWwgbmV0d29ya1wiLCBcInR3ZWV0XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtdHlwbzNcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtdWJlclwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS11aWtpdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS11bWJyZWxsYVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJwcm90ZWN0aW9uXCIsIFwicmFpblwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXVtYnJlbGxhLWJlYWNoXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcInByb3RlY3Rpb25cIiwgXCJyZWNyZWF0aW9uXCIsIFwic3VuXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtdW5kZXJsaW5lXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXVuZG9cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYmFja1wiLCBcImNvbnRyb2wgelwiLCBcImV4Y2hhbmdlXCIsIFwib29wc1wiLCBcInJldHVyblwiLCBcInJvdGF0ZVwiLCBcInN3YXBcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS11bmRvLWFsdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJiYWNrXCIsIFwiY29udHJvbCB6XCIsIFwiZXhjaGFuZ2VcIiwgXCJvb3BzXCIsIFwicmV0dXJuXCIsIFwic3dhcFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXVuaXJlZ2lzdHJ5XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXVuaXZlcnNhbC1hY2Nlc3NcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtdW5pdmVyc2l0eVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJiYW5rXCIsIFwiaW5zdGl0dXRpb25cIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS11bmxpbmtcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY2hhaW5cIiwgXCJjaGFpbi1icm9rZW5cIiwgXCJyZW1vdmVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS11bmxvY2tcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYWRtaW5cIiwgXCJsb2NrXCIsIFwicGFzc3dvcmRcIiwgXCJwcm90ZWN0XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtdW5sb2NrLWFsdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhZG1pblwiLCBcImxvY2tcIiwgXCJwYXNzd29yZFwiLCBcInByb3RlY3RcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS11bnRhcHBkXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXVwbG9hZFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJleHBvcnRcIiwgXCJwdWJsaXNoXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtdXNiXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXVzZXJcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYWNjb3VudFwiLCBcImF2YXRhclwiLCBcImhlYWRcIiwgXCJodW1hblwiLCBcIm1hblwiLCBcInBlcnNvblwiLCBcInByb2ZpbGVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS11c2VyXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFjY291bnRcIiwgXCJhdmF0YXJcIiwgXCJoZWFkXCIsIFwiaHVtYW5cIiwgXCJtYW5cIiwgXCJwZXJzb25cIiwgXCJwcm9maWxlXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtdXNlci1hbHRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYWNjb3VudFwiLCBcImF2YXRhclwiLCBcImhlYWRcIiwgXCJodW1hblwiLCBcIm1hblwiLCBcInBlcnNvblwiLCBcInByb2ZpbGVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS11c2VyLWFsdC1zbGFzaFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS11c2VyLWFzdHJvbmF1dFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhdmF0YXJcIiwgXCJjbG90aGluZ1wiLCBcImNvc21vbmF1dFwiLCBcInNwYWNlXCIsIFwic3VpdFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXVzZXItY2hlY2tcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtdXNlci1jaXJjbGVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYWNjb3VudFwiLCBcImF2YXRhclwiLCBcImhlYWRcIiwgXCJodW1hblwiLCBcIm1hblwiLCBcInBlcnNvblwiLCBcInByb2ZpbGVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS11c2VyLWNpcmNsZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhY2NvdW50XCIsIFwiYXZhdGFyXCIsIFwiaGVhZFwiLCBcImh1bWFuXCIsIFwibWFuXCIsIFwicGVyc29uXCIsIFwicHJvZmlsZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXVzZXItY2xvY2tcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtdXNlci1jb2dcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtdXNlci1lZGl0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXVzZXItZnJpZW5kc1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS11c2VyLWdyYWR1YXRlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImNhcFwiLCBcImNsb3RoaW5nXCIsIFwiY29tbWVuY2VtZW50XCIsIFwiZ293blwiLCBcImdyYWR1YXRpb25cIiwgXCJzdHVkZW50XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtdXNlci1pbmp1cmVkXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImNhc3RcIiwgXCJvdWNoXCIsIFwic2xpbmdcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS11c2VyLWxvY2tcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtdXNlci1tZFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJkb2N0b3JcIiwgXCJqb2JcIiwgXCJtZWRpY2FsXCIsIFwibnVyc2VcIiwgXCJvY2N1cGF0aW9uXCIsIFwicHJvZmlsZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXVzZXItbWludXNcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZGVsZXRlXCIsIFwibmVnYXRpdmVcIiwgXCJyZW1vdmVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS11c2VyLW5pbmphXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFzc2Fzc2luXCIsIFwiYXZhdGFyXCIsIFwiZGFuZ2Vyb3VzXCIsIFwiZGVhZGx5XCIsIFwic25lYWt5XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtdXNlci1wbHVzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcInBvc2l0aXZlXCIsIFwic2lnbiB1cFwiLCBcInNpZ251cFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXVzZXItc2VjcmV0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImNsb3RoaW5nXCIsIFwiY29hdFwiLCBcImhhdFwiLCBcImluY29nbml0b1wiLCBcInByaXZhY3lcIiwgXCJzcHlcIiwgXCJ3aGlzcGVyXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtdXNlci1zaGllbGRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtdXNlci1zbGFzaFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJiYW5cIiwgXCJyZW1vdmVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS11c2VyLXRhZ1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS11c2VyLXRpZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhdmF0YXJcIiwgXCJidXNpbmVzc1wiLCBcImNsb3RoaW5nXCIsIFwiZm9ybWFsXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtdXNlci10aW1lc1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhcmNoaXZlXCIsIFwiZGVsZXRlXCIsIFwicmVtb3ZlXCIsIFwieFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXVzZXJzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcInBlb3BsZVwiLCBcInBlcnNvbnNcIiwgXCJwcm9maWxlc1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXVzZXJzLWNvZ1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS11c3N1bm5haFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS11dGVuc2lsLXNwb29uXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcInNwb29uXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtdXRlbnNpbHNcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiY3V0bGVyeVwiLCBcImRpbm5lclwiLCBcImVhdFwiLCBcImZvb2RcIiwgXCJrbmlmZVwiLCBcInJlc3RhdXJhbnRcIiwgXCJzcG9vblwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXZhYWRpblwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS12ZWN0b3Itc3F1YXJlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImFuY2hvcnNcIiwgXCJsaW5lc1wiLCBcIm9iamVjdFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXZlbnVzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImZlbWFsZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXZlbnVzLWRvdWJsZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS12ZW51cy1tYXJzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXZpYWNvaW5cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtdmlhZGVvXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXZpYWRlby1zcXVhcmVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtdmlhbFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJ0ZXN0IHR1YmVcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS12aWFsc1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJsYWIgcmVzdWx0c1wiLCBcInRlc3QgdHViZXNcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS12aWJlclwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS12aWRlb1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJjYW1lcmFcIiwgXCJmaWxtXCIsIFwibW92aWVcIiwgXCJyZWNvcmRcIiwgXCJ2aWRlby1jYW1lcmFcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS12aWRlby1zbGFzaFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS12aWhhcmFcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYnVkZGhpc21cIiwgXCJidWRkaGlzdFwiLCBcImJ1aWxkaW5nXCIsIFwibW9uYXN0ZXJ5XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtdmltZW9cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtdmltZW8tc3F1YXJlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXZpbWVvLXZcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwidmltZW9cIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS12aW5lXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXZrXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXZudlwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS12b2xsZXliYWxsLWJhbGxcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtdm9sdW1lLWRvd25cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYXVkaW9cIiwgXCJsb3dlclwiLCBcIm11c2ljXCIsIFwicXVpZXRlclwiLCBcInNvdW5kXCIsIFwic3BlYWtlclwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXZvbHVtZS1tdXRlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXZvbHVtZS1vZmZcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYXVkaW9cIiwgXCJtdXNpY1wiLCBcIm11dGVcIiwgXCJzb3VuZFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXZvbHVtZS11cFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhdWRpb1wiLCBcImhpZ2hlclwiLCBcImxvdWRlclwiLCBcIm11c2ljXCIsIFwic291bmRcIiwgXCJzcGVha2VyXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtdm90ZS15ZWFcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYWNjZXB0XCIsIFwiY2FzdFwiLCBcImVsZWN0aW9uXCIsIFwicG9saXRpY3NcIiwgXCJwb3NpdGl2ZVwiLCBcInllc1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXZyLWNhcmRib2FyZFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJnb29nbGVcIiwgXCJyZWFsaXR5XCIsIFwidmlydHVhbFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXZ1ZWpzXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXdhbGtpbmdcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtd2FsbGV0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXdhcmVob3VzZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS13YXRlclwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS13ZWVibHlcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtd2VpYm9cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtd2VpZ2h0XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcIm1lYXN1cmVtZW50XCIsIFwic2NhbGVcIiwgXCJ3ZWlnaHRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS13ZWlnaHQtaGFuZ2luZ1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhbnZpbFwiLCBcImhlYXZ5XCIsIFwibWVhc3VyZW1lbnRcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS13ZWl4aW5cIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtd2hhdHNhcHBcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtd2hhdHNhcHAtc3F1YXJlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXdoZWVsY2hhaXJcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiaGFuZGljYXBcIiwgXCJwZXJzb25cIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS13aG1jc1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS13aWZpXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXdpa2lwZWRpYS13XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXdpbmRcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYWlyXCIsIFwiYmxvd1wiLCBcImJyZWV6ZVwiLCBcImZhbGxcIiwgXCJzZWFzb25hbFwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXdpbmRvdy1jbG9zZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhciBmYS13aW5kb3ctY2xvc2VcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtd2luZG93LW1heGltaXplXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLXdpbmRvdy1tYXhpbWl6ZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS13aW5kb3ctbWluaW1pemVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXIgZmEtd2luZG93LW1pbmltaXplXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXdpbmRvdy1yZXN0b3JlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFyIGZhLXdpbmRvdy1yZXN0b3JlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXdpbmRvd3NcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwibWljcm9zb2Z0XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEtd2luZS1ib3R0bGVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYWxjb2hvbFwiLCBcImJldmVyYWdlXCIsIFwiZHJpbmtcIiwgXCJnbGFzc1wiLCBcImdyYXBlc1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXdpbmUtZ2xhc3NcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiYWxjb2hvbFwiLCBcImJldmVyYWdlXCIsIFwiZHJpbmtcIiwgXCJncmFwZXNcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS13aW5lLWdsYXNzLWFsdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJhbGNvaG9sXCIsIFwiYmV2ZXJhZ2VcIiwgXCJkcmlua1wiLCBcImdyYXBlc1wiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXdpeFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS13aXphcmRzLW9mLXRoZS1jb2FzdFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJEdW5nZW9ucyAmIERyYWdvbnNcIiwgXCJkJmRcIiwgXCJkbmRcIiwgXCJmYW50YXN5XCIsIFwiZ2FtZVwiLCBcImdhbWluZ1wiLCBcInRhYmxldG9wXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtd29sZi1wYWNrLWJhdHRhbGlvblwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS13b24tc2lnblwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJrcndcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS13b3JkcHJlc3NcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtd29yZHByZXNzLXNpbXBsZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS13cGJlZ2lubmVyXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXdwZXhwbG9yZXJcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEtd3Bmb3Jtc1wiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS13cHJlc3NyXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcInJlbmRhY3RcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhcyBmYS13cmVuY2hcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZml4XCIsIFwic2V0dGluZ3NcIiwgXCJzcGFubmVyXCIsIFwidG9vbFwiLCBcInVwZGF0ZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXgtcmF5XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcInJhZGlvbG9naWNhbCBpbWFnZXNcIiwgXCJyYWRpb2xvZ3lcIiBdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS14Ym94XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXhpbmdcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEteGluZy1zcXVhcmVcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEteS1jb21iaW5hdG9yXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXlhaG9vXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXlhbmRleFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS15YW5kZXgtaW50ZXJuYXRpb25hbFwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFtdXG4gICAgICAgIH0sIHtcbiAgICAgICAgICAgIHRpdGxlOiBcImZhYiBmYS15ZWxwXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFzIGZhLXllbi1zaWduXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogWyBcImpweVwiLCBcIm1vbmV5XCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYXMgZmEteWluLXlhbmdcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbIFwiZGFvaXNtXCIsIFwib3Bwb3NpdGVzXCIsIFwidGFvaXNtXCIgXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEteW9hc3RcIixcbiAgICAgICAgICAgIHNlYXJjaFRlcm1zOiBbXVxuICAgICAgICB9LCB7XG4gICAgICAgICAgICB0aXRsZTogXCJmYWIgZmEteW91dHViZVwiLFxuICAgICAgICAgICAgc2VhcmNoVGVybXM6IFsgXCJmaWxtXCIsIFwidmlkZW9cIiwgXCJ5b3V0dWJlLXBsYXlcIiwgXCJ5b3V0dWJlLXNxdWFyZVwiIF1cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXlvdXR1YmUtc3F1YXJlXCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSwge1xuICAgICAgICAgICAgdGl0bGU6IFwiZmFiIGZhLXpoaWh1XCIsXG4gICAgICAgICAgICBzZWFyY2hUZXJtczogW11cbiAgICAgICAgfSBdXG4gICAgfSk7XG59KTsiLCIvLyBhIHdyYXBwZXIgYXJvdW5kIGh0dHBzOi8vZ2l0aHViLmNvbS9mYXJiZWxvdXMvZm9udGF3ZXNvbWUtaWNvbnBpY2tlclxyXG4vLyBJdCBtYWtlcyBlYXNpZXIgdG8gdXNlIGEgc2luZ2xlIHBpY2tlciBpbnN0YW5jZSB3aXRoIHNldmVyYWwgaW5wdXQgZmllbGRzLlxyXG4vLyBIb3cgdG8gdXNlIGl0OiBDYWxsIHNob3coKSBmcm9tIG91dHNpZGUgLCBwYXNzaW5nIGl0IHRoZSBpZCdzIG9mIHRoZSBpbnB1dCBmaWVsZHMgeW91IHdhbnQgdGhlIGljb24gY2xhc3NlcyBhcHBsaWVkIHRvLlxyXG5cclxudmFyIGljb25QaWNrZXJWdWUgPSBuZXcgVnVlKHtcclxuICAgIGVsOiAnI2ljb25QaWNrZXJWdWUnLFxyXG4gICAgZGF0YToge1xyXG4gICAgICAgIHRhcmdldElucHV0RmllbGQ6ICcnLFxyXG4gICAgICAgIHRhcmdldEljb25UYWc6ICcnLFxyXG4gICAgICAgIGljb25QaWNrZXJNb2RhbDogbnVsbCxcclxuICAgIH0sXHJcbiAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICAkKCcuaWNwLWF1dG8nKS5pY29ucGlja2VyKHtcclxuICAgICAgICAgICAgdGl0bGU6IGZhbHNlLFxyXG4gICAgICAgICAgICB0ZW1wbGF0ZXM6IHtcclxuICAgICAgICAgICAgICAgIHNlYXJjaDogJzxpbnB1dCB0eXBlPVwic2VhcmNoXCIgY2xhc3M9XCJmb3JtLWNvbnRyb2wgaWNvbnBpY2tlci1zZWFyY2hcIiBwbGFjZWhvbGRlcj1cIlwiIC8+JyAvLyBqdXN0IHRvIGxlYXZlIGVtcHR5IHRoZSBwbGFjZWhvbGRlciBiZWNhdXNlIGl0IGlzIG5vdCBsb2NhbGl6ZWRcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkKCcjaW5saW5lLXBpY2tlcicpLm9uKCdpY29ucGlja2VyU2VsZWN0ZWQnLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICB2YXIgc2VsZWN0ZWQgPSBlLmljb25waWNrZXJJbnN0YW5jZS5vcHRpb25zLmZ1bGxDbGFzc0Zvcm1hdHRlcihlLmljb25waWNrZXJWYWx1ZSk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAoc2VsZi50YXJnZXRJbnB1dEZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgICAkKCcjJyArIHNlbGYudGFyZ2V0SW5wdXRGaWVsZCkudmFsKHNlbGVjdGVkKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHNlbGYudGFyZ2V0SWNvblRhZykge1xyXG4gICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byByZXBsYWNlIHRoZSBmdWxsIHRhZyB3aXRoIHRoZSBuZXcgY2xhc3MuXHJcbiAgICAgICAgICAgICAgICAvLyBXZSBjb3VsZCBzaW1wbHkgYXBwbHkgdGhlIG5ldyBzZWxlY3RlZCBjbGFzcyB0byB0aGUgaSBlbGVtZW50LlxyXG4gICAgICAgICAgICAgICAgLy8gQnV0IHRoZXJlIGlzIGFuIGlzc3VlOiB3aGVuIHRoZSBwcmV2aW91cyBjbGFzcyBpcyBub3QgYSB2YWxpZCBmYSBpY29uIHRoZSBpY29uIGRvZXMgbm90IHJlZnJlc2guXHJcbiAgICAgICAgICAgICAgICAkKCcjJyArIHNlbGYudGFyZ2V0SWNvblRhZykucmVwbGFjZVdpdGgoJzxpIGlkPVwiJyArIHNlbGYudGFyZ2V0SWNvblRhZyArICdcIiBjbGFzcz1cIicrIHNlbGVjdGVkICsgJ1wiPjwvaT4nKSAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHNlbGYuaWNvblBpY2tlck1vZGFsICE9IG51bGwpXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuaWNvblBpY2tlck1vZGFsLmhpZGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH0sXHJcbiAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgc2hvdzogZnVuY3Rpb24gKHRhcmdldElucHV0RmllbGQsIHRhcmdldEljb25UYWcpIHtcclxuICAgICAgICAgICAgdGhpcy50YXJnZXRJbnB1dEZpZWxkID0gdGFyZ2V0SW5wdXRGaWVsZDtcclxuICAgICAgICAgICAgdGhpcy50YXJnZXRJY29uVGFnID0gdGFyZ2V0SWNvblRhZztcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmljb25QaWNrZXJNb2RhbCA9PSBudWxsKVxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmljb25QaWNrZXJNb2RhbCA9IG5ldyBib290c3RyYXAuTW9kYWwoJChcIiNpY29uUGlja2VyTW9kYWxcIiksIHtcclxuICAgICAgICAgICAgICAgICAgICBrZXlib2FyZDogZmFsc2VcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB0aGlzLmljb25QaWNrZXJNb2RhbC5zaG93KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KVxyXG4iXX0= +}); \ No newline at end of file diff --git a/src/OrchardCore.Modules/OrchardCore.Alias/Settings/AliasPartSettingsDisplayDriver.cs b/src/OrchardCore.Modules/OrchardCore.Alias/Settings/AliasPartSettingsDisplayDriver.cs index 1215a4b31c9..3b67103fd0d 100644 --- a/src/OrchardCore.Modules/OrchardCore.Alias/Settings/AliasPartSettingsDisplayDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.Alias/Settings/AliasPartSettingsDisplayDriver.cs @@ -36,16 +36,15 @@ public override async Task UpdateAsync(ContentTypePartDefinition { var model = new AliasPartSettingsViewModel(); - if (await context.Updater.TryUpdateModelAsync(model, Prefix, m => m.Pattern, m => m.Options)) + await context.Updater.TryUpdateModelAsync(model, Prefix, m => m.Pattern, m => m.Options); + + if (!string.IsNullOrEmpty(model.Pattern) && !_templateManager.Validate(model.Pattern, out var errors)) + { + context.Updater.ModelState.AddModelError(nameof(model.Pattern), S["Pattern doesn't contain a valid Liquid expression. Details: {0}", string.Join(" ", errors)]); + } + else { - if (!string.IsNullOrEmpty(model.Pattern) && !_templateManager.Validate(model.Pattern, out var errors)) - { - context.Updater.ModelState.AddModelError(nameof(model.Pattern), S["Pattern doesn't contain a valid Liquid expression. Details: {0}", string.Join(" ", errors)]); - } - else - { - context.Builder.WithSettings(new AliasPartSettings { Pattern = model.Pattern, Options = model.Options }); - } + context.Builder.WithSettings(new AliasPartSettings { Pattern = model.Pattern, Options = model.Options }); } return Edit(contentTypePartDefinition, context.Updater); diff --git a/src/OrchardCore.Modules/OrchardCore.AuditTrail/Assets.json b/src/OrchardCore.Modules/OrchardCore.AuditTrail/Assets.json index 3a579cbb601..740de272b12 100644 --- a/src/OrchardCore.Modules/OrchardCore.AuditTrail/Assets.json +++ b/src/OrchardCore.Modules/OrchardCore.AuditTrail/Assets.json @@ -6,7 +6,6 @@ "output": "wwwroot/Scripts/diff.js" }, { - "generateSourceMaps": false, "generateRTL": true, "inputs": [ "Assets/scss/audittrailui.scss" diff --git a/src/OrchardCore.Modules/OrchardCore.AuditTrail/Drivers/AuditTrailSettingsDisplayDriver.cs b/src/OrchardCore.Modules/OrchardCore.AuditTrail/Drivers/AuditTrailSettingsDisplayDriver.cs index b419eaf2be3..5fd1954dfad 100644 --- a/src/OrchardCore.Modules/OrchardCore.AuditTrail/Drivers/AuditTrailSettingsDisplayDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.AuditTrail/Drivers/AuditTrailSettingsDisplayDriver.cs @@ -78,7 +78,7 @@ public override async Task EditAsync(AuditTrailSettings settings }).Location("Content:1#Events").OnGroup(AuditTrailSettingsGroup.Id); } - public override async Task UpdateAsync(AuditTrailSettings settings, BuildEditorContext context) + public override async Task UpdateAsync(AuditTrailSettings settings, UpdateEditorContext context) { if (!await _authorizationService.AuthorizeAsync(_httpContextAccessor.HttpContext?.User, AuditTrailPermissions.ManageAuditTrailSettings)) { diff --git a/src/OrchardCore.Modules/OrchardCore.AuditTrail/Drivers/AuditTrailTrimmingSettingsDisplayDriver.cs b/src/OrchardCore.Modules/OrchardCore.AuditTrail/Drivers/AuditTrailTrimmingSettingsDisplayDriver.cs index 855814ecc13..78a6eee6c08 100644 --- a/src/OrchardCore.Modules/OrchardCore.AuditTrail/Drivers/AuditTrailTrimmingSettingsDisplayDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.AuditTrail/Drivers/AuditTrailTrimmingSettingsDisplayDriver.cs @@ -37,7 +37,7 @@ public override async Task EditAsync(AuditTrailTrimmingSettings }).Location("Content:10#Trimming;0").OnGroup(AuditTrailSettingsGroup.Id); } - public override async Task UpdateAsync(AuditTrailTrimmingSettings section, BuildEditorContext context) + public override async Task UpdateAsync(AuditTrailTrimmingSettings section, UpdateEditorContext context) { var user = _httpContextAccessor.HttpContext?.User; if (!await _authorizationService.AuthorizeAsync(user, AuditTrailPermissions.ManageAuditTrailSettings)) diff --git a/src/OrchardCore.Modules/OrchardCore.ContentFields/Assets.json b/src/OrchardCore.Modules/OrchardCore.ContentFields/Assets.json index aee19a1d9c2..6edee06ee8f 100644 --- a/src/OrchardCore.Modules/OrchardCore.ContentFields/Assets.json +++ b/src/OrchardCore.Modules/OrchardCore.ContentFields/Assets.json @@ -18,14 +18,12 @@ "output": "wwwroot/Scripts/vue-multiselect-multitextfieldpicker.js" }, { - "generateSourceMaps": false, "inputs": [ "Assets/scss/optionsEditor.scss" ], "output": "wwwroot/Styles/optionsEditor.css" }, { - "generateSourceMaps": false, "inputs": [ "Assets/scss/fontawesome_iconpicker.scss" ], diff --git a/src/OrchardCore.Modules/OrchardCore.ContentFields/Assets/js/vue-multiselect-wrapper.js b/src/OrchardCore.Modules/OrchardCore.ContentFields/Assets/js/vue-multiselect-wrapper.js index 829f21f50b4..5c5a45968d3 100644 --- a/src/OrchardCore.Modules/OrchardCore.ContentFields/Assets/js/vue-multiselect-wrapper.js +++ b/src/OrchardCore.Modules/OrchardCore.ContentFields/Assets/js/vue-multiselect-wrapper.js @@ -17,6 +17,8 @@ function initVueMultiselect(element) { if (element) { var elementId = element.id; var selectedItems = JSON.parse(element.dataset.selectedItems || "[]"); + var editUrl = element.dataset.editUrl; + var viewUrl = element.dataset.viewUrl; var searchUrl = element.dataset.searchUrl; var multiple = JSON.parse(element.dataset.multiple); @@ -99,6 +101,10 @@ function initVueMultiselect(element) { // a single content item and we've just selected that one item. this.searchBoxContainer.css("display", multiple ? "block" : "none"); }, + url: function(item) { + var url = item.isEditable ? editUrl : viewUrl; + return url.replace('contentItemId', item.id); + }, remove: function (item) { this.arrayOfItems.splice(this.arrayOfItems.indexOf(item), 1); diff --git a/src/OrchardCore.Modules/OrchardCore.ContentFields/Controllers/ContentPickerAdminController.cs b/src/OrchardCore.Modules/OrchardCore.ContentFields/Controllers/ContentPickerAdminController.cs index 6b83767828a..e46628f75fd 100644 --- a/src/OrchardCore.Modules/OrchardCore.ContentFields/Controllers/ContentPickerAdminController.cs +++ b/src/OrchardCore.Modules/OrchardCore.ContentFields/Controllers/ContentPickerAdminController.cs @@ -2,6 +2,8 @@ using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using OrchardCore.Admin; using OrchardCore.ContentFields.Settings; @@ -9,6 +11,7 @@ using OrchardCore.ContentManagement; using OrchardCore.ContentManagement.Metadata; using OrchardCore.ContentManagement.Metadata.Models; +using OrchardCore.Contents; namespace OrchardCore.ContentFields.Controllers { @@ -16,15 +19,23 @@ namespace OrchardCore.ContentFields.Controllers public class ContentPickerAdminController : Controller { private readonly IContentDefinitionManager _contentDefinitionManager; + private readonly IContentManager _contentManager; private readonly IEnumerable _resultProviders; + private readonly IAuthorizationService _authorizationService; + private readonly IHttpContextAccessor _httpContextAccessor; public ContentPickerAdminController( IContentDefinitionManager contentDefinitionManager, - IEnumerable resultProviders - ) + IContentManager contentManager, + IEnumerable resultProviders, + IAuthorizationService authorizationService, + IHttpContextAccessor httpContextAccessor) { _contentDefinitionManager = contentDefinitionManager; + _contentManager = contentManager; _resultProviders = resultProviders; + _authorizationService = authorizationService; + _httpContextAccessor = httpContextAccessor; } [Admin("ContentFields/SearchContentItems", "ContentPicker")] @@ -76,7 +87,23 @@ public async Task SearchContentItems(string part, string field, s PartFieldDefinition = partFieldDefinition, }); - return new ObjectResult(results.Select(r => new VueMultiselectItemViewModel() { Id = r.ContentItemId, DisplayText = r.DisplayText, HasPublished = r.HasPublished })); + var contentItems = await _contentManager + .GetAsync(results.Select(r => r.ContentItemId)); + + var selectedItems = new List(); + foreach (var contentItem in contentItems) + { + selectedItems.Add(new VueMultiselectItemViewModel() + { + Id = contentItem.ContentItemId, + DisplayText = contentItem.ToString(), + HasPublished = contentItem.IsPublished(), + IsViewable = await _authorizationService.AuthorizeAsync(_httpContextAccessor.HttpContext?.User, + CommonPermissions.EditContent, contentItem) + }); + } + + return new ObjectResult(selectedItems); } } } diff --git a/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/ContentPickerFieldDisplayDriver.cs b/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/ContentPickerFieldDisplayDriver.cs index fa03ef66b58..5dbb80e836d 100644 --- a/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/ContentPickerFieldDisplayDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/ContentPickerFieldDisplayDriver.cs @@ -3,6 +3,8 @@ using System.Threading.Tasks; using Fluid; using Fluid.Values; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Localization; using OrchardCore.ContentFields.Fields; using OrchardCore.ContentFields.Settings; @@ -12,6 +14,7 @@ using OrchardCore.ContentManagement.Display.ContentDisplay; using OrchardCore.ContentManagement.Display.Models; using OrchardCore.ContentManagement.Metadata.Models; +using OrchardCore.Contents; using OrchardCore.DisplayManagement.ModelBinding; using OrchardCore.DisplayManagement.Views; using OrchardCore.Liquid; @@ -25,15 +28,21 @@ public class ContentPickerFieldDisplayDriver : ContentFieldDisplayDriver localizer, - ILiquidTemplateManager templateManager) + ILiquidTemplateManager templateManager, + IAuthorizationService authorizationService, + IHttpContextAccessor httpContextAccessor) { _contentManager = contentManager; S = localizer; _templateManager = templateManager; + _authorizationService = authorizationService; + _httpContextAccessor = httpContextAccessor; } public override IDisplayResult Display(ContentPickerField field, BuildFieldDisplayContext fieldDisplayContext) @@ -79,9 +88,12 @@ public override IDisplayResult Edit(ContentPickerField field, BuildFieldEditorCo Id = contentItemId, DisplayText = await _templateManager.RenderStringAsync(settings.TitlePattern, NullEncoder.Default, contentItem, new Dictionary() { [nameof(ContentItem)] = new ObjectValue(contentItem) }), - HasPublished = await _contentManager.HasPublishedVersionAsync(contentItem) + HasPublished = await _contentManager.HasPublishedVersionAsync(contentItem), + IsEditable = await _authorizationService.AuthorizeAsync(_httpContextAccessor.HttpContext!.User, CommonPermissions.EditContent, contentItem), + IsViewable = await _authorizationService.AuthorizeAsync(_httpContextAccessor.HttpContext!.User, CommonPermissions.ViewContent, contentItem) }); } + } }); } diff --git a/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/DateFieldDisplayDriver.cs b/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/DateFieldDisplayDriver.cs index 06a9096539b..9a319c82894 100644 --- a/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/DateFieldDisplayDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/DateFieldDisplayDriver.cs @@ -46,13 +46,12 @@ public override IDisplayResult Edit(DateField field, BuildFieldEditorContext con public override async Task UpdateAsync(DateField field, IUpdateModel updater, UpdateFieldEditorContext context) { - if (await updater.TryUpdateModelAsync(field, Prefix, f => f.Value)) + await updater.TryUpdateModelAsync(field, Prefix, f => f.Value); + var settings = context.PartFieldDefinition.GetSettings(); + + if (settings.Required && field.Value == null) { - var settings = context.PartFieldDefinition.GetSettings(); - if (settings.Required && field.Value == null) - { - updater.ModelState.AddModelError(Prefix, nameof(field.Value), S["A value is required for {0}.", context.PartFieldDefinition.DisplayName()]); - } + updater.ModelState.AddModelError(Prefix, nameof(field.Value), S["A value is required for {0}.", context.PartFieldDefinition.DisplayName()]); } return Edit(field, context); diff --git a/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/DateTimeFieldDisplayDriver.cs b/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/DateTimeFieldDisplayDriver.cs index a9cdaae1af3..0c79a2ded8f 100644 --- a/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/DateTimeFieldDisplayDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/DateTimeFieldDisplayDriver.cs @@ -55,23 +55,22 @@ public override async Task UpdateAsync(DateTimeField field, IUpd { var model = new EditDateTimeFieldViewModel(); - if (await updater.TryUpdateModelAsync(model, Prefix, f => f.LocalDateTime)) + await updater.TryUpdateModelAsync(model, Prefix, f => f.LocalDateTime); + var settings = context.PartFieldDefinition.GetSettings(); + + if (settings.Required && model.LocalDateTime == null) + { + updater.ModelState.AddModelError(Prefix, nameof(model.LocalDateTime), S["A value is required for {0}.", context.PartFieldDefinition.DisplayName()]); + } + else { - var settings = context.PartFieldDefinition.GetSettings(); - if (settings.Required && model.LocalDateTime == null) + if (model.LocalDateTime == null) { - updater.ModelState.AddModelError(Prefix, nameof(model.LocalDateTime), S["A value is required for {0}.", context.PartFieldDefinition.DisplayName()]); + field.Value = null; } else { - if (model.LocalDateTime == null) - { - field.Value = null; - } - else - { - field.Value = await _localClock.ConvertToUtcAsync(model.LocalDateTime.Value); - } + field.Value = await _localClock.ConvertToUtcAsync(model.LocalDateTime.Value); } } diff --git a/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/HtmlFieldDisplayDriver.cs b/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/HtmlFieldDisplayDriver.cs index aafb66f4652..44c1c3fe5fe 100644 --- a/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/HtmlFieldDisplayDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/HtmlFieldDisplayDriver.cs @@ -84,22 +84,20 @@ public override async Task UpdateAsync(HtmlField field, IUpdateM var viewModel = new EditHtmlFieldViewModel(); var settings = context.PartFieldDefinition.GetSettings(); + await updater.TryUpdateModelAsync(viewModel, Prefix, f => f.Html); - if (await updater.TryUpdateModelAsync(viewModel, Prefix, f => f.Html)) + if (!string.IsNullOrEmpty(viewModel.Html) && !_liquidTemplateManager.Validate(viewModel.Html, out var errors)) { - if (!string.IsNullOrEmpty(viewModel.Html) && !_liquidTemplateManager.Validate(viewModel.Html, out var errors)) - { - var fieldName = context.PartFieldDefinition.DisplayName(); - context.Updater.ModelState.AddModelError( - Prefix, - nameof(viewModel.Html), S["{0} doesn't contain a valid Liquid expression. Details: {1}", - fieldName, - string.Join(' ', errors)]); - } - else - { - field.Html = settings.SanitizeHtml ? _htmlSanitizerService.Sanitize(viewModel.Html) : viewModel.Html; - } + var fieldName = context.PartFieldDefinition.DisplayName(); + context.Updater.ModelState.AddModelError( + Prefix, + nameof(viewModel.Html), S["{0} doesn't contain a valid Liquid expression. Details: {1}", + fieldName, + string.Join(' ', errors)]); + } + else + { + field.Html = settings.SanitizeHtml ? _htmlSanitizerService.Sanitize(viewModel.Html) : viewModel.Html; } return Edit(field, context); diff --git a/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/MultiTextFieldDisplayDriver.cs b/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/MultiTextFieldDisplayDriver.cs index 913a73f30f1..54ffb0bdde2 100644 --- a/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/MultiTextFieldDisplayDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/MultiTextFieldDisplayDriver.cs @@ -59,15 +59,14 @@ public override IDisplayResult Edit(MultiTextField field, BuildFieldEditorContex public override async Task UpdateAsync(MultiTextField field, IUpdateModel updater, UpdateFieldEditorContext context) { var viewModel = new EditMultiTextFieldViewModel(); - if (await updater.TryUpdateModelAsync(viewModel, Prefix)) - { - field.Values = viewModel.Values; + await updater.TryUpdateModelAsync(viewModel, Prefix); - var settings = context.PartFieldDefinition.GetSettings(); - if (settings.Required && viewModel.Values.Length == 0) - { - updater.ModelState.AddModelError(Prefix, nameof(field.Values), S["A value is required for {0}.", context.PartFieldDefinition.DisplayName()]); - } + field.Values = viewModel.Values; + + var settings = context.PartFieldDefinition.GetSettings(); + if (settings.Required && viewModel.Values.Length == 0) + { + updater.ModelState.AddModelError(Prefix, nameof(field.Values), S["A value is required for {0}.", context.PartFieldDefinition.DisplayName()]); } return Edit(field, context); diff --git a/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/NumericFieldDisplayDriver.cs b/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/NumericFieldDisplayDriver.cs index 6790236c763..78c2b9bb958 100644 --- a/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/NumericFieldDisplayDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/NumericFieldDisplayDriver.cs @@ -67,48 +67,46 @@ public override async Task UpdateAsync(NumericField field, IUpda { var viewModel = new EditNumericFieldViewModel(); - if (await updater.TryUpdateModelAsync(viewModel, Prefix, f => f.Value)) - { - var settings = context.PartFieldDefinition.GetSettings(); + await updater.TryUpdateModelAsync(viewModel, Prefix, f => f.Value); + var settings = context.PartFieldDefinition.GetSettings(); - field.Value = null; + field.Value = null; - if (string.IsNullOrWhiteSpace(viewModel.Value)) + if (string.IsNullOrWhiteSpace(viewModel.Value)) + { + if (settings.Required) { - if (settings.Required) - { - updater.ModelState.AddModelError(Prefix, nameof(field.Value), S["A value is required for {0}.", context.PartFieldDefinition.DisplayName()]); - } + updater.ModelState.AddModelError(Prefix, nameof(field.Value), S["A value is required for {0}.", context.PartFieldDefinition.DisplayName()]); } - else if (!decimal.TryParse(viewModel.Value, NumberStyles.Any, CultureInfo.CurrentUICulture, out var value)) + } + else if (!decimal.TryParse(viewModel.Value, NumberStyles.Any, CultureInfo.CurrentUICulture, out var value)) + { + updater.ModelState.AddModelError(Prefix, nameof(field.Value), S["{0} is an invalid number.", context.PartFieldDefinition.DisplayName()]); + } + else + { + field.Value = value; + + if (settings.Minimum.HasValue && value < settings.Minimum.Value) { - updater.ModelState.AddModelError(Prefix, nameof(field.Value), S["{0} is an invalid number.", context.PartFieldDefinition.DisplayName()]); + updater.ModelState.AddModelError(Prefix, nameof(field.Value), S["The value must be greater than {0}.", settings.Minimum.Value]); } - else - { - field.Value = value; - if (settings.Minimum.HasValue && value < settings.Minimum.Value) - { - updater.ModelState.AddModelError(Prefix, nameof(field.Value), S["The value must be greater than {0}.", settings.Minimum.Value]); - } + if (settings.Maximum.HasValue && value > settings.Maximum.Value) + { + updater.ModelState.AddModelError(Prefix, nameof(field.Value), S["The value must be less than {0}.", settings.Maximum.Value]); + } - if (settings.Maximum.HasValue && value > settings.Maximum.Value) + // Check the number of decimals. + if (Math.Round(value, settings.Scale) != value) + { + if (settings.Scale == 0) { - updater.ModelState.AddModelError(Prefix, nameof(field.Value), S["The value must be less than {0}.", settings.Maximum.Value]); + updater.ModelState.AddModelError(Prefix, nameof(field.Value), S["The {0} field must be an integer.", context.PartFieldDefinition.DisplayName()]); } - - // Check the number of decimals. - if (Math.Round(value, settings.Scale) != value) + else { - if (settings.Scale == 0) - { - updater.ModelState.AddModelError(Prefix, nameof(field.Value), S["The {0} field must be an integer.", context.PartFieldDefinition.DisplayName()]); - } - else - { - updater.ModelState.AddModelError(Prefix, nameof(field.Value), S["Invalid number of digits for {0}, max allowed: {1}.", context.PartFieldDefinition.DisplayName(), settings.Scale]); - } + updater.ModelState.AddModelError(Prefix, nameof(field.Value), S["Invalid number of digits for {0}, max allowed: {1}.", context.PartFieldDefinition.DisplayName(), settings.Scale]); } } } diff --git a/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/TextFieldDisplayDriver.cs b/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/TextFieldDisplayDriver.cs index cf8518c535d..08b17228e00 100644 --- a/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/TextFieldDisplayDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/TextFieldDisplayDriver.cs @@ -47,13 +47,12 @@ public override IDisplayResult Edit(TextField field, BuildFieldEditorContext con public override async Task UpdateAsync(TextField field, IUpdateModel updater, UpdateFieldEditorContext context) { - if (await updater.TryUpdateModelAsync(field, Prefix, f => f.Text)) + await updater.TryUpdateModelAsync(field, Prefix, f => f.Text); + var settings = context.PartFieldDefinition.GetSettings(); + + if (settings.Required && string.IsNullOrWhiteSpace(field.Text)) { - var settings = context.PartFieldDefinition.GetSettings(); - if (settings.Required && string.IsNullOrWhiteSpace(field.Text)) - { - updater.ModelState.AddModelError(Prefix, nameof(field.Text), S["A value is required for {0}.", context.PartFieldDefinition.DisplayName()]); - } + updater.ModelState.AddModelError(Prefix, nameof(field.Text), S["A value is required for {0}.", context.PartFieldDefinition.DisplayName()]); } return Edit(field, context); diff --git a/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/TimeFieldDisplayDriver.cs b/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/TimeFieldDisplayDriver.cs index 21029aa74bc..2ab89c28a6f 100644 --- a/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/TimeFieldDisplayDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/TimeFieldDisplayDriver.cs @@ -46,13 +46,12 @@ public override IDisplayResult Edit(TimeField field, BuildFieldEditorContext con public override async Task UpdateAsync(TimeField field, IUpdateModel updater, UpdateFieldEditorContext context) { - if (await updater.TryUpdateModelAsync(field, Prefix, f => f.Value)) + await updater.TryUpdateModelAsync(field, Prefix, f => f.Value); + var settings = context.PartFieldDefinition.GetSettings(); + + if (settings.Required && field.Value == null) { - var settings = context.PartFieldDefinition.GetSettings(); - if (settings.Required && field.Value == null) - { - updater.ModelState.AddModelError(Prefix, nameof(field.Value), S["A value is required for {0}.", context.PartFieldDefinition.DisplayName()]); - } + updater.ModelState.AddModelError(Prefix, nameof(field.Value), S["A value is required for {0}.", context.PartFieldDefinition.DisplayName()]); } return Edit(field, context); diff --git a/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/UserPickerFieldDisplayDriver.cs b/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/UserPickerFieldDisplayDriver.cs index e8eedc8b9d2..f48453d3d52 100644 --- a/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/UserPickerFieldDisplayDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/UserPickerFieldDisplayDriver.cs @@ -76,27 +76,25 @@ public override async Task UpdateAsync(UserPickerField field, IU { var viewModel = new EditUserPickerFieldViewModel(); - if (await updater.TryUpdateModelAsync(viewModel, Prefix, f => f.UserIds)) - { - field.UserIds = viewModel.UserIds == null - ? [] : viewModel.UserIds.Split(',', StringSplitOptions.RemoveEmptyEntries); + await updater.TryUpdateModelAsync(viewModel, Prefix, f => f.UserIds); + field.UserIds = viewModel.UserIds == null + ? [] : viewModel.UserIds.Split(',', StringSplitOptions.RemoveEmptyEntries); - var settings = context.PartFieldDefinition.GetSettings(); + var settings = context.PartFieldDefinition.GetSettings(); - if (settings.Required && field.UserIds.Length == 0) - { - updater.ModelState.AddModelError(Prefix, nameof(field.UserIds), S["The value is required for {0}.", context.PartFieldDefinition.DisplayName()]); - } - - if (!settings.Multiple && field.UserIds.Length > 1) - { - updater.ModelState.AddModelError(Prefix, nameof(field.UserIds), S["The {0} field cannot contain multiple items.", context.PartFieldDefinition.DisplayName()]); - } + if (settings.Required && field.UserIds.Length == 0) + { + updater.ModelState.AddModelError(Prefix, nameof(field.UserIds), S["The value is required for {0}.", context.PartFieldDefinition.DisplayName()]); + } - var users = await _session.Query().Where(x => x.UserId.IsIn(field.UserIds)).ListAsync(); - field.SetUserNames(users.Select(t => t.UserName).ToArray()); + if (!settings.Multiple && field.UserIds.Length > 1) + { + updater.ModelState.AddModelError(Prefix, nameof(field.UserIds), S["The {0} field cannot contain multiple items.", context.PartFieldDefinition.DisplayName()]); } + var users = await _session.Query().Where(x => x.UserId.IsIn(field.UserIds)).ListAsync(); + field.SetUserNames(users.Select(t => t.UserName).ToArray()); + return Edit(field, context); } } diff --git a/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/YoutubeFieldDisplayDriver.cs b/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/YoutubeFieldDisplayDriver.cs index 4ed03ff9061..35b0dfb8ea5 100644 --- a/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/YoutubeFieldDisplayDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.ContentFields/Drivers/YoutubeFieldDisplayDriver.cs @@ -51,46 +51,45 @@ public override async Task UpdateAsync(YoutubeField field, IUpda { var model = new EditYoutubeFieldViewModel(); - if (await updater.TryUpdateModelAsync(model, Prefix)) + await updater.TryUpdateModelAsync(model, Prefix); + var settings = context.PartFieldDefinition.GetSettings(); + + if (settings.Required && string.IsNullOrWhiteSpace(model.RawAddress)) { - var settings = context.PartFieldDefinition.GetSettings(); - if (settings.Required && string.IsNullOrWhiteSpace(model.RawAddress)) - { - updater.ModelState.AddModelError(Prefix, nameof(model.RawAddress), S["A value is required for {0}.", context.PartFieldDefinition.DisplayName()]); - } - else + updater.ModelState.AddModelError(Prefix, nameof(model.RawAddress), S["A value is required for {0}.", context.PartFieldDefinition.DisplayName()]); + } + else + { + if (model.RawAddress != null) { - if (model.RawAddress != null) - { - var uri = new Uri(model.RawAddress); + var uri = new Uri(model.RawAddress); - // If it is a url with QueryString. - if (!string.IsNullOrWhiteSpace(uri.Query)) + // If it is a url with QueryString. + if (!string.IsNullOrWhiteSpace(uri.Query)) + { + var query = QueryHelpers.ParseQuery(uri.Query); + if (query.TryGetValue("v", out var values)) { - var query = QueryHelpers.ParseQuery(uri.Query); - if (query.TryGetValue("v", out var values)) - { - model.EmbeddedAddress = $"{uri.GetLeftPart(UriPartial.Authority)}/embed/{values}"; - } - else - { - updater.ModelState.AddModelError(Prefix, nameof(model.RawAddress), S["The format of the url is invalid"]); - } + model.EmbeddedAddress = $"{uri.GetLeftPart(UriPartial.Authority)}/embed/{values}"; } else { - var path = uri.AbsolutePath.Split('?')[0]; - model.EmbeddedAddress = $"{uri.GetLeftPart(UriPartial.Authority)}/embed/{path}"; + updater.ModelState.AddModelError(Prefix, nameof(model.RawAddress), S["The format of the url is invalid"]); } - - field.RawAddress = model.RawAddress; - field.EmbeddedAddress = model.EmbeddedAddress; } else { - field.RawAddress = null; - field.EmbeddedAddress = null; + var path = uri.AbsolutePath.Split('?')[0]; + model.EmbeddedAddress = $"{uri.GetLeftPart(UriPartial.Authority)}/embed/{path}"; } + + field.RawAddress = model.RawAddress; + field.EmbeddedAddress = model.EmbeddedAddress; + } + else + { + field.RawAddress = null; + field.EmbeddedAddress = null; } } diff --git a/src/OrchardCore.Modules/OrchardCore.ContentFields/Settings/ContentPickerFieldSettingsDriver.cs b/src/OrchardCore.Modules/OrchardCore.ContentFields/Settings/ContentPickerFieldSettingsDriver.cs index 19cb2705da6..50d4afe674c 100644 --- a/src/OrchardCore.Modules/OrchardCore.ContentFields/Settings/ContentPickerFieldSettingsDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.ContentFields/Settings/ContentPickerFieldSettingsDriver.cs @@ -41,33 +41,32 @@ public override async Task UpdateAsync(ContentPartFieldDefinitio { var model = new ContentPickerFieldSettingsViewModel(); - if (await context.Updater.TryUpdateModelAsync(model, Prefix)) + await context.Updater.TryUpdateModelAsync(model, Prefix); + + var settings = new ContentPickerFieldSettings + { + Hint = model.Hint, + Required = model.Required, + Multiple = model.Multiple, + TitlePattern = model.TitlePattern, + }; + + switch (model.Source) + { + case ContentPickerSettingType.ContentTypes: + SetContentTypes(context.Updater, model.DisplayedContentTypes, settings); + break; + case ContentPickerSettingType.Stereotypes: + SetStereoTypes(context.Updater, model.Stereotypes, settings); + break; + default: + settings.DisplayAllContentTypes = true; + break; + } + + if (IsValidTitlePattern(context, model)) { - var settings = new ContentPickerFieldSettings - { - Hint = model.Hint, - Required = model.Required, - Multiple = model.Multiple, - TitlePattern = model.TitlePattern, - }; - - switch (model.Source) - { - case ContentPickerSettingType.ContentTypes: - SetContentTypes(context.Updater, model.DisplayedContentTypes, settings); - break; - case ContentPickerSettingType.Stereotypes: - SetStereoTypes(context.Updater, model.Stereotypes, settings); - break; - default: - settings.DisplayAllContentTypes = true; - break; - } - - if (IsValidTitlePattern(context, model)) - { - context.Builder.WithSettings(settings); - } + context.Builder.WithSettings(settings); } return Edit(partFieldDefinition); diff --git a/src/OrchardCore.Modules/OrchardCore.ContentFields/Settings/MultiTextFieldSettingsDriver.cs b/src/OrchardCore.Modules/OrchardCore.ContentFields/Settings/MultiTextFieldSettingsDriver.cs index b39c9d07a0b..a76f09ab480 100644 --- a/src/OrchardCore.Modules/OrchardCore.ContentFields/Settings/MultiTextFieldSettingsDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.ContentFields/Settings/MultiTextFieldSettingsDriver.cs @@ -36,22 +36,22 @@ public override async Task UpdateAsync(ContentPartFieldDefinitio var model = new MultiTextFieldSettingsViewModel(); var settings = new MultiTextFieldSettings(); - if (await context.Updater.TryUpdateModelAsync(model, Prefix)) + await context.Updater.TryUpdateModelAsync(model, Prefix); + + settings.Required = model.Required; + settings.Hint = model.Hint; + + try { - settings.Required = model.Required; - settings.Hint = model.Hint; - try - { - settings.Options = JConvert.DeserializeObject(model.Options); - } - catch - { - context.Updater.ModelState.AddModelError(Prefix, S["The options are written in an incorrect format."]); - return Edit(partFieldDefinition); - } - - context.Builder.WithSettings(settings); + settings.Options = JConvert.DeserializeObject(model.Options); } + catch + { + context.Updater.ModelState.AddModelError(Prefix, S["The options are written in an incorrect format."]); + return Edit(partFieldDefinition); + } + + context.Builder.WithSettings(settings); return Edit(partFieldDefinition); } diff --git a/src/OrchardCore.Modules/OrchardCore.ContentFields/Settings/UserPickerFieldSettingsDriver.cs b/src/OrchardCore.Modules/OrchardCore.ContentFields/Settings/UserPickerFieldSettingsDriver.cs index 0c5459e3ab1..486f152c18e 100644 --- a/src/OrchardCore.Modules/OrchardCore.ContentFields/Settings/UserPickerFieldSettingsDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.ContentFields/Settings/UserPickerFieldSettingsDriver.cs @@ -45,31 +45,30 @@ public override async Task UpdateAsync(ContentPartFieldDefinitio { var model = new UserPickerFieldSettingsViewModel(); - if (await context.Updater.TryUpdateModelAsync(model, Prefix)) - { - var settings = new UserPickerFieldSettings - { - Hint = model.Hint, - Required = model.Required, - Multiple = model.Multiple - }; + await context.Updater.TryUpdateModelAsync(model, Prefix); - var selectedRoles = model.Roles.Where(x => x.IsSelected).Select(x => x.Role).ToArray(); + var settings = new UserPickerFieldSettings + { + Hint = model.Hint, + Required = model.Required, + Multiple = model.Multiple + }; - if (model.DisplayAllUsers || selectedRoles.Length == 0) - { - // No selected role should have the same effect as display all users - settings.DisplayedRoles = []; - settings.DisplayAllUsers = true; - } - else - { - settings.DisplayedRoles = selectedRoles; - settings.DisplayAllUsers = false; - } + var selectedRoles = model.Roles.Where(x => x.IsSelected).Select(x => x.Role).ToArray(); - context.Builder.WithSettings(settings); + if (model.DisplayAllUsers || selectedRoles.Length == 0) + { + // No selected role should have the same effect as display all users + settings.DisplayedRoles = []; + settings.DisplayAllUsers = true; } + else + { + settings.DisplayedRoles = selectedRoles; + settings.DisplayAllUsers = false; + } + + context.Builder.WithSettings(settings); return Edit(partFieldDefinition, context.Updater); } diff --git a/src/OrchardCore.Modules/OrchardCore.ContentFields/ViewModels/VueMultiselectItemViewModel.cs b/src/OrchardCore.Modules/OrchardCore.ContentFields/ViewModels/VueMultiselectItemViewModel.cs index d896ddc1e9d..0b87f027d56 100644 --- a/src/OrchardCore.Modules/OrchardCore.ContentFields/ViewModels/VueMultiselectItemViewModel.cs +++ b/src/OrchardCore.Modules/OrchardCore.ContentFields/ViewModels/VueMultiselectItemViewModel.cs @@ -5,5 +5,8 @@ public class VueMultiselectItemViewModel public string Id { get; set; } public string DisplayText { get; set; } public bool HasPublished { get; set; } + public bool IsViewable { get; set; } + public bool IsEditable { get; set; } + public bool IsClickable => IsEditable || IsViewable; } } diff --git a/src/OrchardCore.Modules/OrchardCore.ContentFields/Views/ContentPickerField.Edit.cshtml b/src/OrchardCore.Modules/OrchardCore.ContentFields/Views/ContentPickerField.Edit.cshtml index c5cfae40470..712431b2f8b 100644 --- a/src/OrchardCore.Modules/OrchardCore.ContentFields/Views/ContentPickerField.Edit.cshtml +++ b/src/OrchardCore.Modules/OrchardCore.ContentFields/Views/ContentPickerField.Edit.cshtml @@ -7,6 +7,8 @@ var selectedItems = JConvert.SerializeObject(Model.SelectedItems, JOptions.CamelCase); var partName = Model.PartFieldDefinition.PartDefinition.Name; var fieldName = Model.PartFieldDefinition.Name; + var editUrl = Url.RouteUrl(new { area = "OrchardCore.Contents", controller = "Admin", action = "Edit", contentItemId = "contentItemId", returnUrl = FullRequestPath }); + var viewUrl = Url.RouteUrl(new { area = "OrchardCore.Contents", controller = "Admin", action = "Display", contentItemId = "contentItemId" }); var searchUrl = Url.RouteUrl(new { area = "OrchardCore.ContentFields", controller = "ContentPickerAdmin", action = "SearchContentItems", part = partName, field = fieldName }); var vueElementId = $"ContentPicker_{partName}_{fieldName}_{Guid.NewGuid().ToString("n")}"; var multiple = settings.Multiple.ToString().ToLowerInvariant(); @@ -18,15 +20,21 @@
-
+
  • -
    {{ item.displayText }} (@T["Not published"])
    - +
    + + {{ item.displayText }} (@T["Not published"]) + + + {{ item.displayText }} (@T["Not published"]) + +
    diff --git a/src/OrchardCore.Modules/OrchardCore.ContentFields/wwwroot/Scripts/vue-multiselect-wrapper.js b/src/OrchardCore.Modules/OrchardCore.ContentFields/wwwroot/Scripts/vue-multiselect-wrapper.js index cbcb39be679..cccdaf2fd5a 100644 --- a/src/OrchardCore.Modules/OrchardCore.ContentFields/wwwroot/Scripts/vue-multiselect-wrapper.js +++ b/src/OrchardCore.Modules/OrchardCore.ContentFields/wwwroot/Scripts/vue-multiselect-wrapper.js @@ -24,6 +24,8 @@ function initVueMultiselect(element) { if (element) { var elementId = element.id; var selectedItems = JSON.parse(element.dataset.selectedItems || "[]"); + var editUrl = element.dataset.editUrl; + var viewUrl = element.dataset.viewUrl; var searchUrl = element.dataset.searchUrl; var multiple = JSON.parse(element.dataset.multiple); var debouncedSearch = debounce(function (vm, query) { @@ -107,6 +109,10 @@ function initVueMultiselect(element) { // a single content item and we've just selected that one item. this.searchBoxContainer.css("display", multiple ? "block" : "none"); }, + url: function url(item) { + var url = item.isEditable ? editUrl : viewUrl; + return url.replace('contentItemId', item.id); + }, remove: function remove(item) { this.arrayOfItems.splice(this.arrayOfItems.indexOf(item), 1); diff --git a/src/OrchardCore.Modules/OrchardCore.ContentFields/wwwroot/Scripts/vue-multiselect-wrapper.min.js b/src/OrchardCore.Modules/OrchardCore.ContentFields/wwwroot/Scripts/vue-multiselect-wrapper.min.js index 685de5be821..ab5ecce2c99 100644 --- a/src/OrchardCore.Modules/OrchardCore.ContentFields/wwwroot/Scripts/vue-multiselect-wrapper.min.js +++ b/src/OrchardCore.Modules/OrchardCore.ContentFields/wwwroot/Scripts/vue-multiselect-wrapper.min.js @@ -1 +1 @@ -function debounce(e,t,n){var i;return function(){var s=this,a=arguments,o=n&&!i;clearTimeout(i),i=setTimeout((function(){i=null,n||e.apply(s,a)}),t),o&&e.apply(s,a)}}function initVueMultiselect(e){if(e){var t=e.id,n=JSON.parse(e.dataset.selectedItems||"[]"),s=e.dataset.searchUrl,a=JSON.parse(e.dataset.multiple),o=debounce((function(e,t){e.isLoading=!0;var n=s;t&&(n+="&query="+t),fetch(n).then((function(t){t.json().then((function(t){e.options=t,e.isLoading=!1}))}))}),250),r=Vue.component("vue-multiselect",window.VueMultiselect.default),c=new Vue({el:"#"+t,components:{"vue-multiselect":r},data:{value:null,arrayOfItems:n,options:[]},computed:{selectedIds:function(){return this.arrayOfItems.map((function(e){return e.id})).join(",")},isDisabled:function(){return this.arrayOfItems.length>0&&!a}},watch:{selectedIds:function(){setTimeout((function(){$(document).trigger("contentpreview:render")}),100)}},created:function(){this.asyncFind()},mounted:function(){this.searchBoxContainer=$(this.$el).children().last(),this.searchBoxContainer.css("display",a||0===this.arrayOfItems.length?"block":"none")},methods:{asyncFind:function(e){o(this,e)},onSelect:function(e,t){var n=this;for(i=0;i0&&!o}},watch:{selectedIds:function(){setTimeout((function(){$(document).trigger("contentpreview:render")}),100)}},created:function(){this.asyncFind()},mounted:function(){this.searchBoxContainer=$(this.$el).children().last(),this.searchBoxContainer.css("display",o||0===this.arrayOfItems.length?"block":"none")},methods:{asyncFind:function(e){c(this,e)},onSelect:function(e,t){var n=this;for(i=0;i EditAsync(ContentCulturePickerSetting }).Location("Content:5").OnGroup(GroupId); } - public override async Task UpdateAsync(ContentCulturePickerSettings section, BuildEditorContext context) + public override async Task UpdateAsync(ContentCulturePickerSettings section, UpdateEditorContext context) { var user = _httpContextAccessor.HttpContext?.User; diff --git a/src/OrchardCore.Modules/OrchardCore.ContentLocalization/Drivers/ContentRequestCultureProviderSettingsDriver.cs b/src/OrchardCore.Modules/OrchardCore.ContentLocalization/Drivers/ContentRequestCultureProviderSettingsDriver.cs index 04256a09ebb..3e84b1a92de 100644 --- a/src/OrchardCore.Modules/OrchardCore.ContentLocalization/Drivers/ContentRequestCultureProviderSettingsDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.ContentLocalization/Drivers/ContentRequestCultureProviderSettingsDriver.cs @@ -39,7 +39,7 @@ public override async Task EditAsync(ContentRequestCultureProvid }).Location("Content:5").OnGroup(GroupId); } - public override async Task UpdateAsync(ContentRequestCultureProviderSettings section, BuildEditorContext context) + public override async Task UpdateAsync(ContentRequestCultureProviderSettings section, UpdateEditorContext context) { var user = _httpContextAccessor.HttpContext?.User; diff --git a/src/OrchardCore.Modules/OrchardCore.ContentLocalization/Drivers/LocalizationContentsAdminListDisplayDriver.cs b/src/OrchardCore.Modules/OrchardCore.ContentLocalization/Drivers/LocalizationContentsAdminListDisplayDriver.cs index 1bbf1455e77..5f06f9dcc4f 100644 --- a/src/OrchardCore.Modules/OrchardCore.ContentLocalization/Drivers/LocalizationContentsAdminListDisplayDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.ContentLocalization/Drivers/LocalizationContentsAdminListDisplayDriver.cs @@ -52,16 +52,15 @@ public override IDisplayResult Edit(ContentOptionsViewModel model, IUpdateModel public override async Task UpdateAsync(ContentOptionsViewModel model, IUpdateModel updater) { var viewModel = new LocalizationContentsAdminFilterViewModel(); - if (await updater.TryUpdateModelAsync(viewModel, "Localization")) - { - if (viewModel.ShowLocalizedContentTypes) - { - model.RouteValues.TryAdd("Localization.ShowLocalizedContentTypes", viewModel.ShowLocalizedContentTypes); - } + await updater.TryUpdateModelAsync(viewModel, "Localization"); - model.FilterResult.MapFrom(viewModel); + if (viewModel.ShowLocalizedContentTypes) + { + model.RouteValues.TryAdd("Localization.ShowLocalizedContentTypes", viewModel.ShowLocalizedContentTypes); } + model.FilterResult.MapFrom(viewModel); + return Edit(model, updater); } } diff --git a/src/OrchardCore.Modules/OrchardCore.ContentLocalization/Services/LocalizationPartContentsAdminListFilter.cs b/src/OrchardCore.Modules/OrchardCore.ContentLocalization/Services/LocalizationPartContentsAdminListFilter.cs index 2682fd54750..69cc22a8d3b 100644 --- a/src/OrchardCore.Modules/OrchardCore.ContentLocalization/Services/LocalizationPartContentsAdminListFilter.cs +++ b/src/OrchardCore.Modules/OrchardCore.ContentLocalization/Services/LocalizationPartContentsAdminListFilter.cs @@ -25,20 +25,20 @@ public LocalizationPartContentsAdminListFilter(IContentDefinitionManager content public async Task FilterAsync(ContentOptionsViewModel model, IQuery query, IUpdateModel updater) { var viewModel = new LocalizationContentsAdminFilterViewModel(); - if (await updater.TryUpdateModelAsync(viewModel, "Localization")) + await updater.TryUpdateModelAsync(viewModel, "Localization"); + + // Show localization content items + // This is intended to be used by adding ?Localization.ShowLocalizedContentTypes to an AdminMenu url. + if (viewModel.ShowLocalizedContentTypes) { - // Show localization content items - // This is intended to be used by adding ?Localization.ShowLocalizedContentTypes to an AdminMenu url. - if (viewModel.ShowLocalizedContentTypes) - { - var localizedTypes = (await _contentDefinitionManager.ListTypeDefinitionsAsync()) - .Where(x => - x.Parts.Any(p => - p.PartDefinition.Name == nameof(LocalizationPart))) - .Select(x => x.Name); + var localizedTypes = (await _contentDefinitionManager.ListTypeDefinitionsAsync()) + .Where(x => + x.Parts.Any(p => + p.PartDefinition.Name == nameof(LocalizationPart))) + .Select(x => x.Name); + + query.With(x => x.ContentType.IsIn(localizedTypes)); - query.With(x => x.ContentType.IsIn(localizedTypes)); - } } } } diff --git a/src/OrchardCore.Modules/OrchardCore.ContentLocalization/Views/ContentCulturePicker.cshtml b/src/OrchardCore.Modules/OrchardCore.ContentLocalization/Views/ContentCulturePicker.cshtml index e493f8dbfa3..5920bdeb7c1 100644 --- a/src/OrchardCore.Modules/OrchardCore.ContentLocalization/Views/ContentCulturePicker.cshtml +++ b/src/OrchardCore.Modules/OrchardCore.ContentLocalization/Views/ContentCulturePicker.cshtml @@ -16,7 +16,7 @@ }
  • \n \n
      \n \n \n
    \n
  • \n "), + props: { + model: Object, + selectedInMediaApp: Object, + level: Number + }, + data: function data() { + return { + open: false, + children: null, + // not initialized state (for lazy-loading) + parent: null, + isHovered: false, + padding: 0 + }; + }, + computed: { + empty: function empty() { + return !this.children || this.children.length == 0; }, - _onSend: function _onSend(e, data) { - if (!data.submit) { - this._addConvenienceMethods(e, data); + isSelected: function isSelected() { + return this.selectedInMediaApp.name == this.model.name && this.selectedInMediaApp.path == this.model.path; + }, + isRoot: function isRoot() { + return this.model.path === ''; + } + }, + mounted: function mounted() { + if (this.isRoot == false && this.isAncestorOfSelectedFolder()) { + this.toggle(); + } + this.padding = this.level < 3 ? 16 : 16 + this.level * 8; + }, + created: function created() { + var self = this; + bus.$on('deleteFolder', function (folder) { + if (self.children) { + var index = self.children && self.children.indexOf(folder); + if (index > -1) { + self.children.splice(index, 1); + bus.$emit('folderDeleted'); + } } - var that = this, - jqXHR, - aborted, - slot, - pipe, - options = that._getAJAXSettings(data), - send = function send() { - that._sending += 1; - // Set timer for bitrate progress calculation: - options._bitrateTimer = new that._BitrateTimer(); - jqXHR = jqXHR || ((aborted || that._trigger('send', $.Event('send', { - delegatedEvent: e - }), options) === false) && that._getXHRPromise(false, options.context, aborted) || that._chunkedUpload(options) || $.ajax(options)).done(function (result, textStatus, jqXHR) { - that._onDone(result, textStatus, jqXHR, options); - }).fail(function (jqXHR, textStatus, errorThrown) { - that._onFail(jqXHR, textStatus, errorThrown, options); - }).always(function (jqXHRorResult, textStatus, jqXHRorError) { - that._deinitProgressListener(options); - that._onAlways(jqXHRorResult, textStatus, jqXHRorError, options); - that._sending -= 1; - that._active -= 1; - if (options.limitConcurrentUploads && options.limitConcurrentUploads > that._sending) { - // Start the next queued upload, - // that has not been aborted: - var nextSlot = that._slots.shift(); - while (nextSlot) { - if (that._getDeferredState(nextSlot) === 'pending') { - nextSlot.resolve(); - break; - } - nextSlot = that._slots.shift(); - } - } - if (that._active === 0) { - // The stop callback is triggered when all uploads have - // been completed, equivalent to the global ajaxStop event: - that._trigger('stop'); - } - }); - return jqXHR; - }; - this._beforeSend(e, options); - if (this.options.sequentialUploads || this.options.limitConcurrentUploads && this.options.limitConcurrentUploads <= this._sending) { - if (this.options.limitConcurrentUploads > 1) { - slot = $.Deferred(); - this._slots.push(slot); - pipe = slot[that._promisePipe](send); - } else { - this._sequence = this._sequence[that._promisePipe](send, send); - pipe = this._sequence; + }); + bus.$on('addFolder', function (target, folder) { + if (self.model == target) { + if (self.children !== null) { + self.children.push(folder); } - // Return the piped Promise object, enhanced with an abort method, - // which is delegated to the jqXHR object of the current upload, - // and jqXHR callbacks mapped to the equivalent Promise methods: - pipe.abort = function () { - aborted = [undefined, 'abort', 'abort']; - if (!jqXHR) { - if (slot) { - slot.rejectWith(options.context, aborted); - } - return send(); - } - return jqXHR.abort(); - }; - return this._enhancePromise(pipe); + folder.parent = self.model; + bus.$emit('folderAdded', folder); } - return send(); + }); + }, + methods: { + isAncestorOfSelectedFolder: function isAncestorOfSelectedFolder() { + parentFolder = mediaApp.selectedFolder; + while (parentFolder) { + if (parentFolder.path == this.model.path) { + return true; + } + parentFolder = parentFolder.parent; + } + return false; }, - _onAdd: function _onAdd(e, data) { - var that = this, - result = true, - options = $.extend({}, this.options, data), - files = data.files, - filesLength = files.length, - limit = options.limitMultiFileUploads, - limitSize = options.limitMultiFileUploadSize, - overhead = options.limitMultiFileUploadSizeOverhead, - batchSize = 0, - paramName = this._getParamName(options), - paramNameSet, - paramNameSlice, - fileSet, - i, - j = 0; - if (!filesLength) { - return false; + toggle: function toggle() { + this.open = !this.open; + if (this.open && !this.children) { + this.loadChildren(); } - if (limitSize && files[0].size === undefined) { - limitSize = undefined; + }, + select: function select() { + bus.$emit('folderSelected', this.model); + this.loadChildren(); + }, + createFolder: function createFolder() { + bus.$emit('createFolderRequested'); + }, + deleteFolder: function deleteFolder() { + bus.$emit('deleteFolderRequested'); + }, + loadChildren: function loadChildren() { + var self = this; + if (this.open == false) { + this.open = true; } - if (!(options.singleFileUploads || limit || limitSize) || !this._isXHRUpload(options)) { - fileSet = [files]; - paramNameSet = [paramName]; - } else if (!(options.singleFileUploads || limitSize) && limit) { - fileSet = []; - paramNameSet = []; - for (i = 0; i < filesLength; i += limit) { - fileSet.push(files.slice(i, i + limit)); - paramNameSlice = paramName.slice(i, i + limit); - if (!paramNameSlice.length) { - paramNameSlice = paramName; - } - paramNameSet.push(paramNameSlice); - } - } else if (!options.singleFileUploads && limitSize) { - fileSet = []; - paramNameSet = []; - for (i = 0; i < filesLength; i = i + 1) { - batchSize += files[i].size + overhead; - if (i + 1 === filesLength || batchSize + files[i + 1].size + overhead > limitSize || limit && i + 1 - j >= limit) { - fileSet.push(files.slice(j, i + 1)); - paramNameSlice = paramName.slice(j, i + 1); - if (!paramNameSlice.length) { - paramNameSlice = paramName; - } - paramNameSet.push(paramNameSlice); - j = i + 1; - batchSize = 0; - } + $.ajax({ + url: $('#getFoldersUrl').val() + "?path=" + encodeURIComponent(self.model.path), + method: 'GET', + success: function success(data) { + self.children = data; + self.children.forEach(function (c) { + c.parent = self.model; + }); + }, + error: function error(_error) { + emtpy = false; + console.error(_error.responseText); } - } else { - paramNameSet = paramName; - } - data.originalFiles = files; - $.each(fileSet || files, function (index, element) { - var newData = $.extend({}, data); - newData.files = fileSet ? element : [element]; - newData.paramName = paramNameSet[index]; - that._initResponseObject(newData); - that._initProgressObject(newData); - that._addConvenienceMethods(e, newData); - result = that._trigger('add', $.Event('add', { - delegatedEvent: e - }), newData); - return result; - }); - return result; - }, - _replaceFileInput: function _replaceFileInput(data) { - var input = data.fileInput, - inputClone = input.clone(true), - restoreFocus = input.is(document.activeElement); - // Add a reference for the new cloned file input to the data argument: - data.fileInputClone = inputClone; - $('
    ').append(inputClone)[0].reset(); - // Detaching allows to insert the fileInput on another form - // without losing the file input value: - input.after(inputClone).detach(); - // If the fileInput had focus before it was detached, - // restore focus to the inputClone. - if (restoreFocus) { - inputClone.trigger('focus'); - } - // Avoid memory leaks with the detached file input: - $.cleanData(input.off('remove')); - // Replace the original file input element in the fileInput - // elements set with the clone, which has been copied including - // event handlers: - this.options.fileInput = this.options.fileInput.map(function (i, el) { - if (el === input[0]) { - return inputClone[0]; - } - return el; }); - // If the widget has been initialized on the file input itself, - // override this.element with the file input clone: - if (input[0] === this.element[0]) { - this.element = inputClone; - } }, - _handleFileTreeEntry: function _handleFileTreeEntry(entry, path) { - var that = this, - dfd = $.Deferred(), - entries = [], - dirReader, - errorHandler = function errorHandler(e) { - if (e && !e.entry) { - e.entry = entry; - } - // Since $.when returns immediately if one - // Deferred is rejected, we use resolve instead. - // This allows valid files and invalid items - // to be returned together in one set: - dfd.resolve([e]); - }, - successHandler = function successHandler(entries) { - that._handleFileTreeEntries(entries, path + entry.name + '/').done(function (files) { - dfd.resolve(files); - }).fail(errorHandler); - }, - readEntries = function readEntries() { - dirReader.readEntries(function (results) { - if (!results.length) { - successHandler(entries); - } else { - entries = entries.concat(results); - readEntries(); - } - }, errorHandler); - }; - // eslint-disable-next-line no-param-reassign - path = path || ''; - if (entry.isFile) { - if (entry._file) { - // Workaround for Chrome bug #149735 - entry._file.relativePath = path; - dfd.resolve(entry._file); - } else { - entry.file(function (file) { - file.relativePath = path; - dfd.resolve(file); - }, errorHandler); - } - } else if (entry.isDirectory) { - dirReader = entry.createReader(); - readEntries(); - } else { - // Return an empty list for file system items - // other than files or directories: - dfd.resolve([]); - } - return dfd.promise(); + handleDragOver: function handleDragOver(e) { + this.isHovered = true; }, - _handleFileTreeEntries: function _handleFileTreeEntries(entries, path) { - var that = this; - return $.when.apply($, $.map(entries, function (entry) { - return that._handleFileTreeEntry(entry, path); - }))[this._promisePipe](function () { - return Array.prototype.concat.apply([], arguments); - }); + handleDragLeave: function handleDragLeave(e) { + this.isHovered = false; }, - _getDroppedFiles: function _getDroppedFiles(dataTransfer) { - // eslint-disable-next-line no-param-reassign - dataTransfer = dataTransfer || {}; - var items = dataTransfer.items; - if (items && items.length && (items[0].webkitGetAsEntry || items[0].getAsEntry)) { - return this._handleFileTreeEntries($.map(items, function (item) { - var entry; - if (item.webkitGetAsEntry) { - entry = item.webkitGetAsEntry(); - if (entry) { - // Workaround for Chrome bug #149735: - entry._file = item.getAsFile(); - } - return entry; - } - return item.getAsEntry(); - })); + moveMediaToFolder: function moveMediaToFolder(folder, e) { + var self = this; + self.isHovered = false; + var mediaNames = JSON.parse(e.dataTransfer.getData('mediaNames')); + if (mediaNames.length < 1) { + return; } - return $.Deferred().resolve($.makeArray(dataTransfer.files)).promise(); - }, - _getSingleFileInputFiles: function _getSingleFileInputFiles(fileInput) { - // eslint-disable-next-line no-param-reassign - fileInput = $(fileInput); - var entries = fileInput.prop('entries'), - files, - value; - if (entries && entries.length) { - return this._handleFileTreeEntries(entries); + var sourceFolder = e.dataTransfer.getData('sourceFolder'); + var targetFolder = folder.path; + if (sourceFolder === '') { + sourceFolder = 'root'; } - files = $.makeArray(fileInput.prop('files')); - if (!files.length) { - value = fileInput.prop('value'); - if (!value) { - return $.Deferred().resolve([]).promise(); - } - // If the files property is not available, the browser does not - // support the File API and we add a pseudo File object with - // the input value as name with path information removed: - files = [{ - name: value.replace(/^.*\\/, '') - }]; - } else if (files[0].name === undefined && files[0].fileName) { - // File normalization for Safari 4 and Firefox 3: - $.each(files, function (index, file) { - file.name = file.fileName; - file.size = file.fileSize; - }); + if (targetFolder === '') { + targetFolder = 'root'; } - return $.Deferred().resolve(files).promise(); - }, - _getFileInputFiles: function _getFileInputFiles(fileInput) { - if (!(fileInput instanceof $) || fileInput.length === 1) { - return this._getSingleFileInputFiles(fileInput); + if (sourceFolder === targetFolder) { + alert($('#sameFolderMessage').val()); + return; } - return $.when.apply($, $.map(fileInput, this._getSingleFileInputFiles))[this._promisePipe](function () { - return Array.prototype.concat.apply([], arguments); - }); - }, - _onChange: function _onChange(e) { - var that = this, - data = { - fileInput: $(e.target), - form: $(e.target.form) - }; - this._getFileInputFiles(data.fileInput).always(function (files) { - data.files = files; - if (that.options.replaceFileInput) { - that._replaceFileInput(data); - } - if (that._trigger('change', $.Event('change', { - delegatedEvent: e - }), data) !== false) { - that._onAdd(e, data); - } - }); - }, - _onPaste: function _onPaste(e) { - var items = e.originalEvent && e.originalEvent.clipboardData && e.originalEvent.clipboardData.items, - data = { - files: [] - }; - if (items && items.length) { - $.each(items, function (index, item) { - var file = item.getAsFile && item.getAsFile(); - if (file) { - data.files.push(file); + confirmDialog(_objectSpread(_objectSpread({}, $("#moveMedia").data()), {}, { + callback: function callback(resp) { + if (resp) { + $.ajax({ + url: $('#moveMediaListUrl').val(), + method: 'POST', + data: { + __RequestVerificationToken: $("input[name='__RequestVerificationToken']").val(), + mediaNames: mediaNames, + sourceFolder: sourceFolder, + targetFolder: targetFolder + }, + success: function success() { + bus.$emit('mediaListMoved'); // MediaApp will listen to this, and then it will reload page so the moved medias won't be there anymore + }, + + error: function error(_error2) { + console.error(_error2.responseText); + bus.$emit('mediaListMoved', _error2.responseText); + } + }); } - }); - if (this._trigger('paste', $.Event('paste', { - delegatedEvent: e - }), data) !== false) { - this._onAdd(e, data); } - } - }, - _onDrop: function _onDrop(e) { - e.dataTransfer = e.originalEvent && e.originalEvent.dataTransfer; - var that = this, - dataTransfer = e.dataTransfer, - data = {}; - if (dataTransfer && dataTransfer.files && dataTransfer.files.length) { - e.preventDefault(); - this._getDroppedFiles(dataTransfer).always(function (files) { - data.files = files; - if (that._trigger('drop', $.Event('drop', { - delegatedEvent: e - }), data) !== false) { - that._onAdd(e, data); - } - }); - } - }, - _onDragOver: getDragHandler('dragover'), - _onDragEnter: getDragHandler('dragenter'), - _onDragLeave: getDragHandler('dragleave'), - _initEventHandlers: function _initEventHandlers() { - if (this._isXHRUpload(this.options)) { - this._on(this.options.dropZone, { - dragover: this._onDragOver, - drop: this._onDrop, - // event.preventDefault() on dragenter is required for IE10+: - dragenter: this._onDragEnter, - // dragleave is not required, but added for completeness: - dragleave: this._onDragLeave - }); - this._on(this.options.pasteZone, { - paste: this._onPaste - }); - } - if ($.support.fileInput) { - this._on(this.options.fileInput, { - change: this._onChange - }); - } - }, - _destroyEventHandlers: function _destroyEventHandlers() { - this._off(this.options.dropZone, 'dragenter dragleave dragover drop'); - this._off(this.options.pasteZone, 'paste'); - this._off(this.options.fileInput, 'change'); + })); + } + } +}); +// https://github.com/spatie/font-awesome-filetypes + +var faIcons = { + image: 'fa-regular fa-image', + pdf: 'fa-regular fa-file-pdf', + word: 'fa-regular fa-file-word', + powerpoint: 'fa-regular fa-file-powerpoint', + excel: 'fa-regular fa-file-excel', + csv: 'fa-regular fa-file', + audio: 'fa-regular fa-file-audio', + video: 'fa-regular fa-file-video', + archive: 'fa-regular fa-file-zipper', + code: 'fa-regular fa-file-code', + text: 'fa-regular fa-file-lines', + file: 'fa-regular fa-file' +}; +var faThumbnails = { + gif: faIcons.image, + jpeg: faIcons.image, + jpg: faIcons.image, + png: faIcons.image, + pdf: faIcons.pdf, + doc: faIcons.word, + docx: faIcons.word, + ppt: faIcons.powerpoint, + pptx: faIcons.powerpoint, + xls: faIcons.excel, + xlsx: faIcons.excel, + csv: faIcons.csv, + aac: faIcons.audio, + mp3: faIcons.audio, + ogg: faIcons.audio, + avi: faIcons.video, + flv: faIcons.video, + mkv: faIcons.video, + mp4: faIcons.video, + webm: faIcons.video, + gz: faIcons.archive, + zip: faIcons.archive, + css: faIcons.code, + html: faIcons.code, + js: faIcons.code, + txt: faIcons.text +}; +function getClassNameForExtension(extension) { + return faThumbnails[extension.toLowerCase()] || faIcons.file; +} +function getExtensionForFilename(filename) { + return filename.slice((filename.lastIndexOf('.') - 1 >>> 0) + 2); +} +function getClassNameForFilename(filename) { + return getClassNameForExtension(getExtensionForFilename(filename)); +} +// component +Vue.component('media-items-grid', { + template: "\n
      \n
    1. \n
      \n \n \n
      \n
      \n \n \n \n {{ media.name }}\n
      \n
    2. \n
    \n ", + data: function data() { + return { + T: {} + }; + }, + props: { + filteredMediaItems: Array, + selectedMedias: Array, + thumbSize: Number + }, + created: function created() { + var self = this; + // retrieving localized strings from view + self.T.editButton = $('#t-edit-button').val(); + self.T.deleteButton = $('#t-delete-button').val(); + }, + methods: { + isMediaSelected: function isMediaSelected(media) { + var result = this.selectedMedias.some(function (element, index, array) { + return element.url.toLowerCase() === media.url.toLowerCase(); + }); + return result; }, - _destroy: function _destroy() { - this._destroyEventHandlers(); + buildMediaUrl: function buildMediaUrl(url, thumbSize) { + return url + (url.indexOf('?') == -1 ? '?' : '&') + 'width=' + thumbSize + '&height=' + thumbSize; }, - _setOption: function _setOption(key, value) { - var reinit = $.inArray(key, this._specialOptions) !== -1; - if (reinit) { - this._destroyEventHandlers(); - } - this._super(key, value); - if (reinit) { - this._initSpecialOptions(); - this._initEventHandlers(); - } + toggleSelectionOfMedia: function toggleSelectionOfMedia(media) { + bus.$emit('mediaToggleRequested', media); }, - _initSpecialOptions: function _initSpecialOptions() { - var options = this.options; - if (options.fileInput === undefined) { - options.fileInput = this.element.is('input[type="file"]') ? this.element : this.element.find('input[type="file"]'); - } else if (!(options.fileInput instanceof $)) { - options.fileInput = $(options.fileInput); - } - if (!(options.dropZone instanceof $)) { - options.dropZone = $(options.dropZone); - } - if (!(options.pasteZone instanceof $)) { - options.pasteZone = $(options.pasteZone); - } + renameMedia: function renameMedia(media) { + bus.$emit('renameMediaRequested', media); }, - _getRegExp: function _getRegExp(str) { - var parts = str.split('/'), - modifiers = parts.pop(); - parts.shift(); - return new RegExp(parts.join('/'), modifiers); + deleteMedia: function deleteMedia(media) { + bus.$emit('deleteMediaRequested', media); }, - _isRegExpOption: function _isRegExpOption(key, value) { - return key !== 'url' && $.type(value) === 'string' && /^\/.*\/[igm]{0,3}$/.test(value); + dragStart: function dragStart(media, e) { + bus.$emit('mediaDragStartRequested', media, e); }, - _initDataAttributes: function _initDataAttributes() { - var that = this, - options = this.options, - data = this.element.data(); - // Initialize options set via HTML5 data-attributes: - $.each(this.element[0].attributes, function (index, attr) { - var key = attr.name.toLowerCase(), - value; - if (/^data-/.test(key)) { - // Convert hyphen-ated key to camelCase: - key = key.slice(5).replace(/-[a-z]/g, function (str) { - return str.charAt(1).toUpperCase(); - }); - value = data[key]; - if (that._isRegExpOption(key, value)) { - value = that._getRegExp(value); - } - options[key] = value; - } + getfontAwesomeClassNameForFileName: function getfontAwesomeClassNameForFilename(filename, thumbsize) { + return getClassNameForFilename(filename) + ' ' + thumbsize; + } + } +}); +// component +Vue.component('media-items-table', { + template: "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    {{ T.imageHeader }}\n {{ T.nameHeader }}\n \n \n {{ T.lastModifyHeader }} \n \n \n \n {{ T.sizeHeader }}\n \n \n \n \n {{ T.typeHeader }}\n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    {{ printDateTime(media.lastModify) }}
    \n
    \n
    {{ isNaN(media.size)? 0 : Math.round(media.size / 1024) }} KB
    \n
    \n
    {{ media.mime }}
    \n
    \n ", + data: function data() { + return { + T: {} + }; + }, + props: { + sortBy: String, + sortAsc: Boolean, + filteredMediaItems: Array, + selectedMedias: Array, + thumbSize: Number + }, + created: function created() { + var self = this; + self.T.imageHeader = $('#t-image-header').val(); + self.T.nameHeader = $('#t-name-header').val(); + self.T.lastModifyHeader = $('#t-lastModify-header').val(); + self.T.sizeHeader = $('#t-size-header').val(); + self.T.typeHeader = $('#t-type-header').val(); + self.T.editButton = $('#t-edit-button').val(); + self.T.deleteButton = $('#t-delete-button').val(); + self.T.viewButton = $('#t-view-button').val(); + }, + methods: { + isMediaSelected: function isMediaSelected(media) { + var result = this.selectedMedias.some(function (element, index, array) { + return element.url.toLowerCase() === media.url.toLowerCase(); }); + return result; }, - _create: function _create() { - this._initDataAttributes(); - this._initSpecialOptions(); - this._slots = []; - this._sequence = this._getXHRPromise(true); - this._sending = this._active = 0; - this._initProgressObject(this); - this._initEventHandlers(); + buildMediaUrl: function buildMediaUrl(url, thumbSize) { + return url + (url.indexOf('?') == -1 ? '?' : '&') + 'width=' + thumbSize + '&height=' + thumbSize; }, - // This method is exposed to the widget API and allows to query - // the number of active uploads: - active: function active() { - return this._active; + changeSort: function changeSort(newSort) { + bus.$emit('sortChangeRequested', newSort); }, - // This method is exposed to the widget API and allows to query - // the widget upload progress. - // It returns an object with loaded, total and bitrate properties - // for the running uploads: - progress: function progress() { - return this._progress; + toggleSelectionOfMedia: function toggleSelectionOfMedia(media) { + bus.$emit('mediaToggleRequested', media); }, - // This method is exposed to the widget API and allows adding files - // using the fileupload API. The data parameter accepts an object which - // must have a files property and can contain additional options: - // .fileupload('add', {files: filesList}); - add: function add(data) { - var that = this; - if (!data || this.options.disabled) { - return; - } - if (data.fileInput && !data.files) { - this._getFileInputFiles(data.fileInput).always(function (files) { - data.files = files; - that._onAdd(null, data); - }); - } else { - data.files = $.makeArray(data.files); - this._onAdd(null, data); - } + renameMedia: function renameMedia(media) { + bus.$emit('renameMediaRequested', media); }, - // This method is exposed to the widget API and allows sending files - // using the fileupload API. The data parameter accepts an object which - // must have a files or fileInput property and can contain additional options: - // .fileupload('send', {files: filesList}); - // The method returns a Promise object for the file upload call. - send: function send(data) { - if (data && !this.options.disabled) { - if (data.fileInput && !data.files) { - var that = this, - dfd = $.Deferred(), - promise = dfd.promise(), - jqXHR, - aborted; - promise.abort = function () { - aborted = true; - if (jqXHR) { - return jqXHR.abort(); - } - dfd.reject(null, 'abort', 'abort'); - return promise; - }; - this._getFileInputFiles(data.fileInput).always(function (files) { - if (aborted) { - return; - } - if (!files.length) { - dfd.reject(); - return; - } - data.files = files; - jqXHR = that._onSend(null, data); - jqXHR.then(function (result, textStatus, jqXHR) { - dfd.resolve(result, textStatus, jqXHR); - }, function (jqXHR, textStatus, errorThrown) { - dfd.reject(jqXHR, textStatus, errorThrown); - }); - }); - return this._enhancePromise(promise); - } - data.files = $.makeArray(data.files); - if (data.files.length) { - return this._onSend(null, data); - } - } - return this._getXHRPromise(false, data && data.context); + deleteMedia: function deleteMedia(media) { + bus.$emit('deleteMediaRequested', media); + }, + dragStart: function dragStart(media, e) { + bus.$emit('mediaDragStartRequested', media, e); + }, + printDateTime: function printDateTime(datemillis) { + var d = new Date(datemillis); + return d.toLocaleString(); + }, + getfontAwesomeClassNameForFileName: function getfontAwesomeClassNameForFilename(filename, thumbsize) { + return getClassNameForFilename(filename) + ' ' + thumbsize; } - }); + } }); -function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } -/* - * jQuery Iframe Transport Plugin - * https://github.com/blueimp/jQuery-File-Upload - * - * Copyright 2011, Sebastian Tschan - * https://blueimp.net - * - * Licensed under the MIT license: - * https://opensource.org/licenses/MIT - */ +// This component receives a list of all the items, unpaged. +// As the user interacts with the pager, it raises events with the items in the current page. +// It's the parent's responsibility to listen for these events and display the received items +// component +Vue.component('pager', { + template: "\n
    \n \n \n
    \n ", + props: { + sourceItems: Array + }, + data: function data() { + return { + pageSize: 10, + pageSizeOptions: [10, 30, 50, 100], + current: 0, + T: {} + }; + }, + created: function created() { + var self = this; -/* global define, require */ + // retrieving localized strings from view + self.T.pagerFirstButton = $('#t-pager-first-button').val(); + self.T.pagerPreviousButton = $('#t-pager-previous-button').val(); + self.T.pagerNextButton = $('#t-pager-next-button').val(); + self.T.pagerLastButton = $('#t-pager-last-button').val(); + self.T.pagerPageSizeLabel = $('#t-pager-page-size-label').val(); + self.T.pagerPageLabel = $('#t-pager-page-label').val(); + self.T.pagerTotalLabel = $('#t-pager-total-label').val(); + }, + methods: { + next: function next() { + this.current = this.current + 1; + }, + previous: function previous() { + this.current = this.current - 1; + }, + goFirst: function goFirst() { + this.current = 0; + }, + goLast: function goLast() { + this.current = this.totalPages - 1; + }, + goTo: function goTo(targetPage) { + this.current = targetPage; + } + }, + computed: { + total: function total() { + return this.sourceItems ? this.sourceItems.length : 0; + }, + totalPages: function totalPages() { + var pages = Math.ceil(this.total / this.pageSize); + return pages > 0 ? pages : 1; + }, + isLastPage: function isLastPage() { + return this.current + 1 >= this.totalPages; + }, + isFirstPage: function isFirstPage() { + return this.current === 0; + }, + canDoNext: function canDoNext() { + return !this.isLastPage; + }, + canDoPrev: function canDoPrev() { + return !this.isFirstPage; + }, + canDoFirst: function canDoFirst() { + return !this.isFirstPage; + }, + canDoLast: function canDoLast() { + return !this.isLastPage; + }, + // this computed is only to have a central place where we detect changes and leverage Vue JS reactivity to raise our event. + // That event will be handled by the parent media app to display the items in the page. + // this logic will not run if the computed property is not used in the template. We use a dummy "data-computed-trigger" attribute for that. + itemsInCurrentPage: function itemsInCurrentPage() { + var start = this.pageSize * this.current; + var end = start + this.pageSize; + var result = this.sourceItems.slice(start, end); + bus.$emit('pagerEvent', result); + return result; + }, + pageLinks: function pageLinks() { + var links = []; + links.push(this.current + 1); -(function (factory) { - 'use strict'; + // Add 2 items before current + var beforeCurrent = this.current > 0 ? this.current : -1; + links.unshift(beforeCurrent); + var beforeBeforeCurrent = this.current > 1 ? this.current - 1 : -1; + links.unshift(beforeBeforeCurrent); - if (typeof define === 'function' && define.amd) { - // Register as an anonymous AMD module: - define(['jquery'], factory); - } else if ((typeof exports === "undefined" ? "undefined" : _typeof(exports)) === 'object') { - // Node/CommonJS: - factory(require('jquery')); - } else { - // Browser globals: - factory(window.jQuery); - } -})(function ($) { - 'use strict'; + // Add 2 items after current + var afterCurrent = this.totalPages - this.current > 1 ? this.current + 2 : -1; + links.push(afterCurrent); + var afterAfterCurrent = this.totalPages - this.current > 2 ? this.current + 3 : -1; + links.push(afterAfterCurrent); + return links; + } + }, + watch: { + sourceItems: function sourceItems() { + this.current = 0; // resetting current page after receiving a new list of unpaged items + }, - // Helper variable to create unique names for the transport iframes: - var counter = 0, - jsonAPI = $, - jsonParse = 'parseJSON'; - if ('JSON' in window && 'parse' in JSON) { - jsonAPI = JSON; - jsonParse = 'parse'; + pageSize: function pageSize() { + this.current = 0; + } } - - // The iframe transport accepts four additional options: - // options.fileInput: a jQuery collection of file input fields - // options.paramName: the parameter name for the file form data, - // overrides the name property of the file input field(s), - // can be a string or an array of strings. - // options.formData: an array of objects with name and value properties, - // equivalent to the return data of .serializeArray(), e.g.: - // [{name: 'a', value: 1}, {name: 'b', value: 2}] - // options.initialIframeSrc: the URL of the initial iframe src, - // by default set to "javascript:false;" - $.ajaxTransport('iframe', function (options) { - if (options.async) { - // javascript:false as initial iframe src - // prevents warning popups on HTTPS in IE6: - // eslint-disable-next-line no-script-url - var initialIframeSrc = options.initialIframeSrc || 'javascript:false;', - form, - iframe, - addParamChar; - return { - send: function send(_, completeCallback) { - form = $('
    '); - form.attr('accept-charset', options.formAcceptCharset); - addParamChar = /\?/.test(options.url) ? '&' : '?'; - // XDomainRequest only supports GET and POST: - if (options.type === 'DELETE') { - options.url = options.url + addParamChar + '_method=DELETE'; - options.type = 'POST'; - } else if (options.type === 'PUT') { - options.url = options.url + addParamChar + '_method=PUT'; - options.type = 'POST'; - } else if (options.type === 'PATCH') { - options.url = options.url + addParamChar + '_method=PATCH'; - options.type = 'POST'; - } - // IE versions below IE8 cannot set the name property of - // elements that have already been added to the DOM, - // so we set the name along with the iframe HTML markup: - counter += 1; - iframe = $('').on('load', function () { - var fileInputClones, - paramNames = $.isArray(options.paramName) ? options.paramName : [options.paramName]; - iframe.off('load').on('load', function () { - var response; - // Wrap in a try/catch block to catch exceptions thrown - // when trying to access cross-domain iframe contents: - try { - response = iframe.contents(); - // Google Chrome and Firefox do not throw an - // exception when calling iframe.contents() on - // cross-domain requests, so we unify the response: - if (!response.length || !response[0].firstChild) { - throw new Error(); - } - } catch (e) { - response = undefined; - } - // The complete callback returns the - // iframe content document as response object: - completeCallback(200, 'success', { - iframe: response - }); - // Fix for IE endless progress bar activity bug - // (happens on form submits to iframe targets): - $('').appendTo(form); - window.setTimeout(function () { - // Removing the form in a setTimeout call - // allows Chrome's developer tools to display - // the response result - form.remove(); - }, 0); - }); - form.prop('target', iframe.prop('name')).prop('action', options.url).prop('method', options.type); - if (options.formData) { - $.each(options.formData, function (index, field) { - $('').prop('name', field.name).val(field.value).appendTo(form); - }); - } - if (options.fileInput && options.fileInput.length && options.type === 'POST') { - fileInputClones = options.fileInput.clone(); - // Insert a clone for each file input field: - options.fileInput.after(function (index) { - return fileInputClones[index]; - }); - if (options.paramName) { - options.fileInput.each(function (index) { - $(this).prop('name', paramNames[index] || options.paramName); - }); - } - // Appending the file input fields to the hidden form - // removes them from their original location: - form.append(options.fileInput).prop('enctype', 'multipart/form-data') - // enctype must be set as encoding for IE: - .prop('encoding', 'multipart/form-data'); - // Remove the HTML5 form attribute from the input(s): - options.fileInput.removeAttr('form'); +}); +// component +Vue.component('sortIndicator', { + template: "\n
    \n \n \n
    \n ", + props: { + colname: String, + selectedcolname: String, + asc: Boolean + }, + computed: { + isActive: function isActive() { + return this.colname.toLowerCase() == this.selectedcolname.toLowerCase(); + } + } +}); +function initializeAttachedMediaField(el, idOfUploadButton, uploadAction, mediaItemUrl, allowMultiple, allowMediaText, allowAnchors, tempUploadFolder, maxUploadChunkSize) { + var target = $(document.getElementById($(el).data('for'))); + var initialPaths = target.data("init"); + var mediaFieldEditor = $(el); + var idprefix = mediaFieldEditor.attr("id"); + var mediaFieldApp; + mediaFieldApps.push(mediaFieldApp = new Vue({ + el: mediaFieldEditor.get(0), + data: { + mediaItems: [], + selectedMedia: null, + smallThumbs: false, + idPrefix: idprefix, + initialized: false, + allowMediaText: allowMediaText, + backupMediaText: '', + allowAnchors: allowAnchors, + backupAnchor: null, + mediaTextmodal: null, + anchoringModal: null + }, + created: function created() { + var self = this; + self.currentPrefs = JSON.parse(localStorage.getItem('mediaFieldPrefs')); + }, + computed: { + paths: { + get: function get() { + var mediaPaths = []; + if (!this.initialized) { + return JSON.stringify(initialPaths); + } + this.mediaItems.forEach(function (x) { + if (x.mediaPath === 'not-found') { + return; } - window.setTimeout(function () { - // Submitting the form in a setTimeout call fixes an issue with - // Safari 13 not triggering the iframe load event after resetting - // the load event handler, see also: - // https://github.com/blueimp/jQuery-File-Upload/issues/3633 - form.submit(); - // Insert the file input fields at their original location - // by replacing the clones with the originals: - if (fileInputClones && fileInputClones.length) { - options.fileInput.each(function (index, input) { - var clone = $(fileInputClones[index]); - // Restore the original name and form properties: - $(input).prop('name', clone.prop('name')).attr('form', clone.attr('form')); - clone.replaceWith(input); - }); - } - }, 0); + mediaPaths.push({ + path: x.mediaPath, + isRemoved: x.isRemoved, + isNew: x.isNew, + mediaText: x.mediaText, + anchor: x.anchor, + attachedFileName: x.attachedFileName + }); }); - form.append(iframe).appendTo(document.body); + return JSON.stringify(mediaPaths); }, - abort: function abort() { - if (iframe) { - // javascript:false as iframe src aborts the request - // and prevents warning popups on HTTPS in IE6. - iframe.off('load').prop('src', initialIframeSrc); - } - if (form) { - form.remove(); - } + set: function set(values) { + var self = this; + var mediaPaths = values || []; + var signal = $.Deferred(); + var items = []; + var length = 0; + mediaPaths.forEach(function (x, i) { + items.push({ + name: ' ' + x.path, + mime: '', + mediaPath: '', + anchor: x.anchor, + attachedFileName: x.attachedFileName + }); // don't remove the space. Something different is needed or it wont react when the real name arrives. + promise = $.when(signal).done(function () { + $.ajax({ + url: mediaItemUrl + "?path=" + encodeURIComponent(x.path), + method: 'GET', + success: function success(data) { + data.vuekey = data.name + i.toString(); // Because a unique key is required by Vue on v-for + data.mediaText = x.mediaText; // This value is not returned from the ajax call. + data.anchor = x.anchor; // This value is not returned from the ajax call. + data.attachedFileName = x.attachedFileName; // This value is not returned from the ajax call. + items.splice(i, 1, data); + if (items.length === ++length) { + items.forEach(function (x) { + self.mediaItems.push(x); + }); + self.initialized = true; + } + }, + error: function error(_error) { + console.log(JSON.stringify(_error)); + items.splice(i, 1, { + name: x.path, + mime: '', + mediaPath: 'not-found', + mediaText: '', + anchor: { + x: 0.5, + y: 0.5 + }, + attachedFileName: x.attachedFileName + }); + if (items.length === ++length) { + items.forEach(function (x) { + self.mediaItems.push(x); + }); + self.initialized = true; + } + } + }); + }); + }); + signal.resolve(); } - }; - } - }); - - // The iframe transport returns the iframe content document as response. - // The following adds converters from iframe to text, json, html, xml - // and script. - // Please note that the Content-Type for JSON responses has to be text/plain - // or text/html, if the browser doesn't include application/json in the - // Accept header, else IE will show a download dialog. - // The Content-Type for XML responses on the other hand has to be always - // application/xml or text/xml, so IE properly parses the XML response. - // See also - // https://github.com/blueimp/jQuery-File-Upload/wiki/Setup#content-type-negotiation - $.ajaxSetup({ - converters: { - 'iframe text': function iframeText(iframe) { - return iframe && $(iframe[0].body).text(); }, - 'iframe json': function iframeJson(iframe) { - return iframe && jsonAPI[jsonParse]($(iframe[0].body).text()); + fileSize: function fileSize() { + return Math.round(this.selectedMedia.size / 1024); }, - 'iframe html': function iframeHtml(iframe) { - return iframe && $(iframe[0].body).html(); + canAddMedia: function canAddMedia() { + var nonRemovedMediaItems = []; + for (var i = 0; i < this.mediaItems.length; i++) { + if (!this.mediaItems[i].isRemoved) { + nonRemovedMediaItems.push(this.mediaItems[i]); + } + } + return nonRemovedMediaItems.length === 0 || nonRemovedMediaItems.length > 0 && allowMultiple; }, - 'iframe xml': function iframeXml(iframe) { - var xmlDoc = iframe && iframe[0]; - return xmlDoc && $.isXMLDoc(xmlDoc) ? xmlDoc : $.parseXML(xmlDoc.XMLDocument && xmlDoc.XMLDocument.xml || $(xmlDoc.body).html()); + thumbSize: function thumbSize() { + return this.smallThumbs ? 120 : 240; }, - 'iframe script': function iframeScript(iframe) { - return iframe && $.globalEval($(iframe[0].body).text()); + currentPrefs: { + get: function get() { + return { + smallThumbs: this.smallThumbs + }; + }, + set: function set(newPrefs) { + if (!newPrefs) { + return; + } + this.smallThumbs = newPrefs.smallThumbs; + } } - } - }); -}); -function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } -function randomUUID() { - if ((typeof crypto === "undefined" ? "undefined" : _typeof(crypto)) === 'object' && typeof crypto.randomUUID === 'function') { - return crypto.randomUUID(); - } - return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, function (c) { - return (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16); - }); -} -function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } -function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } -function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } -function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } -function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); } -function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } -var initialized; -var mediaApp; -var bus = new Vue(); -function initializeMediaApplication(displayMediaApplication, mediaApplicationUrl, pathBase) { - if (initialized) { - return; - } - initialized = true; - if (!mediaApplicationUrl) { - console.error('mediaApplicationUrl variable is not defined'); - } - $.ajax({ - url: mediaApplicationUrl, - method: 'GET', - success: function success(content) { - $('.ta-content').append(content); - $(document).trigger('mediaapplication:ready'); - var _root = { - name: $('#t-mediaLibrary').text(), - path: '', - folder: '', - isDirectory: true - }; - mediaApp = new Vue({ - el: '#mediaApp', - data: { - selectedFolder: {}, - mediaItems: [], - selectedMedias: [], - errors: [], - dragDropThumbnail: new Image(), - smallThumbs: false, - gridView: false, - mediaFilter: '', - sortBy: '', - sortAsc: true, - itemsInPage: [] + }, + mounted: function mounted() { + var self = this; + self.paths = initialPaths; + self.$on('selectAndDeleteMediaRequested', function (media) { + self.selectAndDeleteMedia(media); + }); + self.$on('selectMediaRequested', function (media) { + self.selectMedia(media); + }); + var selector = '#' + idOfUploadButton; + var editorId = mediaFieldEditor.attr('id'); + var chunkedFileUploadId = randomUUID(); + $(selector).fileupload({ + limitConcurrentUploads: 20, + dropZone: $('#' + editorId), + dataType: 'json', + url: uploadAction, + maxChunkSize: maxUploadChunkSize, + add: function add(e, data) { + var count = data.files.length; + var i; + for (i = 0; i < count; i++) { + data.files[i].uploadName = self.getUniqueId() + data.files[i].name; + data.files[i].attachedFileName = data.files[i].name; + } + data.submit(); }, - created: function created() { - var self = this; - self.dragDropThumbnail.src = (pathBase || '') + '/OrchardCore.Media/Images/drag-thumbnail.png'; - bus.$on('folderSelected', function (folder) { - self.selectedFolder = folder; - }); - bus.$on('folderDeleted', function () { - self.selectRoot(); - }); - bus.$on('folderAdded', function (folder) { - self.selectedFolder = folder; - folder.selected = true; - }); - bus.$on('mediaListMoved', function (errorInfo) { - self.loadFolder(self.selectedFolder); - if (errorInfo) { - self.errors.push(errorInfo); + formData: function formData() { + var antiForgeryToken = $("input[name=__RequestVerificationToken]").val(); + return [{ + name: 'path', + value: tempUploadFolder + }, { + name: '__RequestVerificationToken', + value: antiForgeryToken + }, { + name: '__chunkedFileUploadId', + value: chunkedFileUploadId + }]; + }, + done: function done(e, data) { + var newMediaItems = []; + var errormsg = ""; + if (data.result.files.length > 0) { + for (var i = 0; i < data.result.files.length; i++) { + data.result.files[i].isNew = true; + //if error is defined probably the file type is not allowed + if (data.result.files[i].error === undefined || data.result.files[i].error === null) { + data.result.files[i].attachedFileName = data.files[i].attachedFileName; + newMediaItems.push(data.result.files[i]); + } else errormsg += data.result.files[i].error + "\n"; } - }); - bus.$on('mediaRenamed', function (newName, newPath, oldPath, newUrl) { - var media = self.mediaItems.filter(function (item) { - return item.mediaPath === oldPath; - })[0]; - media.mediaPath = newPath; - media.name = newName; - media.url = newUrl; - }); - bus.$on('createFolderRequested', function (media) { - self.createFolder(); - }); - bus.$on('deleteFolderRequested', function (media) { - self.deleteFolder(); - }); - - // common handlers for actions in both grid and table view. - bus.$on('sortChangeRequested', function (newSort) { - self.changeSort(newSort); - }); - bus.$on('mediaToggleRequested', function (media) { - self.toggleSelectionOfMedia(media); - }); - bus.$on('renameMediaRequested', function (media) { - self.renameMedia(media); - }); - bus.$on('deleteMediaRequested', function (media) { - self.deleteMediaItem(media); - }); - bus.$on('mediaDragStartRequested', function (media, e) { - self.handleDragStart(media, e); - }); - - // handler for pager events - bus.$on('pagerEvent', function (itemsInPage) { - self.itemsInPage = itemsInPage; - self.selectedMedias = []; - }); - if (!localStorage.getItem('mediaApplicationPrefs')) { - self.selectedFolder = _root; + } + if (errormsg !== "") { + alert(errormsg); return; } - self.currentPrefs = JSON.parse(localStorage.getItem('mediaApplicationPrefs')); - }, - computed: { - isHome: function isHome() { - return this.selectedFolder == _root; - }, - parents: function parents() { - var p = []; - parentFolder = this.selectedFolder; - while (parentFolder && parentFolder.path != '') { - p.unshift(parentFolder); - parentFolder = parentFolder.parent; - } - return p; - }, - root: function root() { - return _root; - }, - filteredMediaItems: function filteredMediaItems() { - var self = this; - self.selectedMedias = []; - var filtered = self.mediaItems.filter(function (item) { - return item.name.toLowerCase().indexOf(self.mediaFilter.toLowerCase()) > -1; - }); - switch (self.sortBy) { - case 'size': - filtered.sort(function (a, b) { - return self.sortAsc ? a.size - b.size : b.size - a.size; - }); - break; - case 'mime': - filtered.sort(function (a, b) { - return self.sortAsc ? a.mime.toLowerCase().localeCompare(b.mime.toLowerCase()) : b.mime.toLowerCase().localeCompare(a.mime.toLowerCase()); - }); - break; - case 'lastModify': - filtered.sort(function (a, b) { - return self.sortAsc ? a.lastModify - b.lastModify : b.lastModify - a.lastModify; - }); - break; - default: - filtered.sort(function (a, b) { - return self.sortAsc ? a.name.toLowerCase().localeCompare(b.name.toLowerCase()) : b.name.toLowerCase().localeCompare(a.name.toLowerCase()); - }); - } - return filtered; - }, - hiddenCount: function hiddenCount() { - var result = 0; - result = this.mediaItems.length - this.filteredMediaItems.length; - return result; - }, - thumbSize: function thumbSize() { - return this.smallThumbs ? 100 : 240; - }, - currentPrefs: { - get: function get() { - return { - smallThumbs: this.smallThumbs, - selectedFolder: this.selectedFolder, - gridView: this.gridView - }; - }, - set: function set(newPrefs) { - if (!newPrefs) { - return; - } - this.smallThumbs = newPrefs.smallThumbs; - this.selectedFolder = newPrefs.selectedFolder; - this.gridView = newPrefs.gridView; - } + console.log(newMediaItems); + if (newMediaItems.length > 1 && allowMultiple === false) { + alert($('#onlyOneItemMessage').val()); + mediaFieldApp.mediaItems.push(newMediaItems[0]); + mediaFieldApp.initialized = true; + } else { + mediaFieldApp.mediaItems = mediaFieldApp.mediaItems.concat(newMediaItems); + mediaFieldApp.initialized = true; } }, - watch: { - currentPrefs: function currentPrefs(newPrefs) { - localStorage.setItem('mediaApplicationPrefs', JSON.stringify(newPrefs)); - }, - selectedFolder: function selectedFolder(newFolder) { - this.mediaFilter = ''; - this.selectedFolder = newFolder; - this.loadFolder(newFolder); + error: function error(jqXHR, textStatus, errorThrown) { + console.log('Error on upload.'); + console.log(jqXHR); + console.log(textStatus); + console.log(errorThrown); + } + }).on('fileuploadchunkbeforesend', function (e, options) { + var file = options.files[0]; + // Here we replace the blob with a File object to ensure the file name and others are preserved for the backend. + options.blob = new File([options.blob], file.name, { + type: file.type, + lastModified: file.lastModified + }); + }); + }, + methods: { + selectMedia: function selectMedia(media) { + this.selectedMedia = media; + }, + getUniqueId: function getUniqueId() { + return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { + var r = Math.random() * 16 | 0, + v = c === 'x' ? r : r & 0x3 | 0x8; + return v.toString(16); + }); + }, + removeSelected: function removeSelected(event) { + var removed = {}; + if (this.selectedMedia) { + var index = this.mediaItems && this.mediaItems.indexOf(this.selectedMedia); + if (index > -1) { + removed = this.mediaItems[index]; + removed.isRemoved = true; + //this.mediaItems.splice([index], 1, removed); + this.mediaItems.splice(index, 1); } - }, - mounted: function mounted() { - this.$refs.rootFolder.toggle(); - }, - methods: { - uploadUrl: function uploadUrl() { - if (!this.selectedFolder) { - return null; - } - var urlValue = $('#uploadFiles').val(); - return urlValue + (urlValue.indexOf('?') == -1 ? '?' : '&') + "path=" + encodeURIComponent(this.selectedFolder.path); - }, - selectRoot: function selectRoot() { - this.selectedFolder = this.root; - }, - loadFolder: function loadFolder(folder) { - this.errors = []; - this.selectedMedias = []; - var self = this; - var mediaUrl = $('#getMediaItemsUrl').val(); - console.log(folder.path); - $.ajax({ - url: mediaUrl + (mediaUrl.indexOf('?') == -1 ? '?' : '&') + "path=" + encodeURIComponent(folder.path), - method: 'GET', - success: function success(data) { - data.forEach(function (item) { - item.open = false; - }); - self.mediaItems = data; - self.selectedMedias = []; - self.sortBy = ''; - self.sortAsc = true; - }, - error: function error(_error) { - console.log('error loading folder:' + folder.path); - self.selectRoot(); - } - }); - }, - selectAll: function selectAll() { - this.selectedMedias = []; - for (var i = 0; i < this.filteredMediaItems.length; i++) { - this.selectedMedias.push(this.filteredMediaItems[i]); - } - }, - unSelectAll: function unSelectAll() { - this.selectedMedias = []; - }, - invertSelection: function invertSelection() { - var temp = []; - for (var i = 0; i < this.filteredMediaItems.length; i++) { - if (this.isMediaSelected(this.filteredMediaItems[i]) == false) { - temp.push(this.filteredMediaItems[i]); - } - } - this.selectedMedias = temp; - }, - toggleSelectionOfMedia: function toggleSelectionOfMedia(media) { - if (this.isMediaSelected(media) == true) { - this.selectedMedias.splice(this.selectedMedias.indexOf(media), 1); - } else { - this.selectedMedias.push(media); - } - }, - isMediaSelected: function isMediaSelected(media) { - var result = this.selectedMedias.some(function (element, index, array) { - return element.url.toLowerCase() === media.url.toLowerCase(); - }); - return result; - }, - deleteFolder: function deleteFolder() { - var folder = this.selectedFolder; - var self = this; - // The root folder can't be deleted - if (folder == this.root.model) { - return; - } - confirmDialog(_objectSpread(_objectSpread({}, $("#deleteFolder").data()), {}, { - callback: function callback(resp) { - if (resp) { - $.ajax({ - url: $('#deleteFolderUrl').val() + "?path=" + encodeURIComponent(folder.path), - method: 'POST', - data: { - __RequestVerificationToken: $("input[name='__RequestVerificationToken']").val() - }, - success: function success(data) { - bus.$emit('deleteFolder', folder); - }, - error: function error(_error2) { - console.error(_error2.responseText); - } - }); - } - } - })); - }, - createFolder: function createFolder() { - $('#createFolderModal-errors').empty(); - var modal = bootstrap.Modal.getOrCreateInstance($('#createFolderModal')); - modal.show(); - $('#createFolderModal .modal-body input').val('').focus(); - }, - renameMedia: function renameMedia(media) { - $('#renameMediaModal-errors').empty(); - var modal = bootstrap.Modal.getOrCreateInstance($('#renameMediaModal')); - modal.show(); - $('#old-item-name').val(media.name); - $('#renameMediaModal .modal-body input').val(media.name).focus(); - }, - selectAndDeleteMedia: function selectAndDeleteMedia(media) { - this.deleteMedia(); - }, - deleteMediaList: function deleteMediaList() { - var mediaList = this.selectedMedias; - var self = this; - if (mediaList.length < 1) { + } else { + // The remove button can also remove a unique media item + if (this.mediaItems.length === 1) { + removed = this.mediaItems[index]; + removed.isRemoved = true; + //this.mediaItems.splice(0, 1, removed); + this.mediaItems.splice(0, 1); + } + } + this.selectedMedia = null; + }, + showMediaTextModal: function showMediaTextModal(event) { + this.mediaTextModal = new bootstrap.Modal(this.$refs.mediaTextModal); + this.mediaTextModal.show(); + this.backupMediaText = this.selectedMedia.mediaText; + }, + cancelMediaTextModal: function cancelMediaTextModal(event) { + this.mediaTextModal.hide(); + this.selectedMedia.mediaText = this.backupMediaText; + }, + showAnchorModal: function showAnchorModal(event) { + this.anchoringModal = new bootstrap.Modal(this.$refs.anchoringModal); + this.anchoringModal.show(); + // Cause a refresh to recalc heights. + this.selectedMedia.anchor = { + x: this.selectedMedia.anchor.x, + y: this.selectedMedia.anchor.y + }; + this.backupAnchor = this.selectedMedia.anchor; + }, + cancelAnchoringModal: function cancelAnchoringModal(event) { + this.anchoringModal.hide(); + this.selectedMedia.anchor = this.backupAnchor; + }, + resetAnchor: function resetAnchor(event) { + this.selectedMedia.anchor = { + x: 0.5, + y: 0.5 + }; + }, + onAnchorDrop: function onAnchorDrop(event) { + var image = this.$refs.anchorImage; + this.selectedMedia.anchor = { + x: event.offsetX / image.clientWidth, + y: event.offsetY / image.clientHeight + }; + }, + anchorLeft: function anchorLeft() { + if (this.$refs.anchorImage && this.$refs.modalBody && this.selectedMedia) { + // When image is shrunk compare against the modal body. + var offset = (this.$refs.modalBody.clientWidth - this.$refs.anchorImage.clientWidth) / 2; + var position = this.selectedMedia.anchor.x * this.$refs.anchorImage.clientWidth + offset; + if (position < 17) { + // Adjust so the target doesn't show outside image. + position = 17; + } else { + position = position - 8; // Adjust to hit the mouse pointer. + } + + return position + 'px'; + } else { + return '0'; + } + }, + anchorTop: function anchorTop() { + if (this.$refs.anchorImage && this.selectedMedia) { + var position = this.selectedMedia.anchor.y * this.$refs.anchorImage.clientHeight; + if (position < 15) { + // Adjustment so the target doesn't show outside image. + position = 15; + } else { + position = position + 5; // Adjust to hit the mouse pointer. + } + + return position + 'px'; + } else { + return '0'; + } + }, + setAnchor: function setAnchor(event) { + var image = this.$refs.anchorImage; + this.selectedMedia.anchor = { + x: event.offsetX / image.clientWidth, + y: event.offsetY / image.clientHeight + }; + }, + addMediaFiles: function addMediaFiles(files) { + if (files.length > 1 && allowMultiple === false) { + alert($('#onlyOneItemMessage').val()); + mediaFieldApp.mediaItems.push(files[0]); + mediaFieldApp.initialized = true; + } else { + mediaFieldApp.mediaItems = mediaFieldApp.mediaItems.concat(files); + mediaFieldApp.initialized = true; + } + }, + selectAndDeleteMedia: function selectAndDeleteMedia(media) { + var self = this; + self.selectedMedia = media; + // setTimeout because sometimes + // removeSelected was called even before the media was set. + setTimeout(function () { + self.removeSelected(); + }, 100); + } + }, + watch: { + mediaItems: { + deep: true, + handler: function handler() { + // Trigger preview rendering + setTimeout(function () { + $(document).trigger('contentpreview:render'); + }, 100); + } + }, + currentPrefs: function currentPrefs(newPrefs) { + localStorage.setItem('mediaFieldPrefs', JSON.stringify(newPrefs)); + } + } + })); +} +// component +// different media field editors share this component to present the thumbs. +Vue.component('mediaFieldThumbsContainer', { + template: '\ +
    \ +
    \ +
    \ + {{T.noImages}}\ +
    \ +
    \ + \ +
  • \ +
    \ +
    \ + \ + \ +
    \ +
    \ + \ + \ + {{ media.isNew ? media.name.substr(36) : media.name }}\ +
    \ +
    \ +
    \ +
    \ + \ + {{ T.mediaNotFound }}\ + {{ T.discardWarning }}\ +
    \ +
    \ + \ + {{ media.name }}\ +
    \ +
    \ +
  • \ +
    \ +
    \ + ', + data: function data() { + return { + T: {} + }; + }, + props: { + mediaItems: Array, + selectedMedia: Object, + thumbSize: Number, + idPrefix: String + }, + created: function created() { + var self = this; + + // retrieving localized strings from view + self.T.mediaNotFound = $('#t-media-not-found').val(); + self.T.discardWarning = $('#t-discard-warning').val(); + self.T.noImages = $('#t-no-images').val(); + }, + methods: { + selectAndDeleteMedia: function selectAndDeleteMedia(media) { + this.$parent.$emit('selectAndDeleteMediaRequested', media); + }, + selectMedia: function selectMedia(media) { + this.$parent.$emit('selectMediaRequested', media); + }, + buildMediaUrl: function buildMediaUrl(url, thumbSize) { + return url + (url.indexOf('?') == -1 ? '?' : '&') + 'width=' + thumbSize + '&height=' + thumbSize; + }, + getfontAwesomeClassNameForFileName: function getfontAwesomeClassNameForFilename(filename, thumbsize) { + return getClassNameForFilename(filename) + ' ' + thumbsize; + } + } +}); +function initializeMediaField(el, modalBodyElement, mediaItemUrl, allowMultiple, allowMediaText, allowAnchors) { + //BagPart create a script section without other DOM elements + if (el === null) return; + var target = $(document.getElementById($(el).data('for'))); + var initialPaths = target.data("init"); + var mediaFieldEditor = $(el); + var idprefix = mediaFieldEditor.attr("id"); + var mediaFieldApp; + + //when hide modal detach media app to avoid issue on BagPart + modalBodyElement.addEventListener('hidden.bs.modal', function (event) { + $("#mediaApp").appendTo('body'); + $("#mediaApp").hide(); + }); + mediaFieldApps.push(mediaFieldApp = new Vue({ + el: mediaFieldEditor.get(0), + data: { + mediaItems: [], + selectedMedia: null, + smallThumbs: false, + idPrefix: idprefix, + initialized: false, + allowMediaText: allowMediaText, + backupMediaText: '', + allowAnchors: allowAnchors, + backupAnchor: null, + mediaTextModal: null, + anchoringModal: null + }, + created: function created() { + var self = this; + self.currentPrefs = JSON.parse(localStorage.getItem('mediaFieldPrefs')); + }, + computed: { + paths: { + get: function get() { + var mediaPaths = []; + if (!this.initialized) { + return JSON.stringify(initialPaths); + } + this.mediaItems.forEach(function (x) { + if (x.mediaPath === 'not-found') { return; } - confirmDialog(_objectSpread(_objectSpread({}, $("#deleteMedia").data()), {}, { - callback: function callback(resp) { - if (resp) { - var paths = []; - for (var i = 0; i < mediaList.length; i++) { - paths.push(mediaList[i].mediaPath); + mediaPaths.push({ + path: x.mediaPath, + mediaText: x.mediaText, + anchor: x.anchor + }); + }); + return JSON.stringify(mediaPaths); + }, + set: function set(values) { + var self = this; + var mediaPaths = values || []; + var signal = $.Deferred(); + var items = []; + var length = 0; + mediaPaths.forEach(function (x, i) { + items.push({ + name: ' ' + x.path, + mime: '', + mediaPath: '' + }); // don't remove the space. Something different is needed or it wont react when the real name arrives. + promise = $.when(signal).done(function () { + $.ajax({ + url: mediaItemUrl + "?path=" + encodeURIComponent(x.path), + method: 'GET', + success: function success(data) { + data.vuekey = data.name + i.toString(); + data.mediaText = x.mediaText; // This value is not returned from the ajax call. + data.anchor = x.anchor; // This value is not returned from the ajax call. + items.splice(i, 1, data); + if (items.length === ++length) { + items.forEach(function (y) { + self.mediaItems.push(y); + }); + self.initialized = true; } - $.ajax({ - url: $('#deleteMediaListUrl').val(), - method: 'POST', - data: { - __RequestVerificationToken: $("input[name='__RequestVerificationToken']").val(), - paths: paths - }, - success: function success(data) { - for (var i = 0; i < self.selectedMedias.length; i++) { - var index = self.mediaItems && self.mediaItems.indexOf(self.selectedMedias[i]); - if (index > -1) { - self.mediaItems.splice(index, 1); - bus.$emit('mediaDeleted', self.selectedMedias[i]); - } - } - self.selectedMedias = []; - }, - error: function error(_error3) { - console.error(_error3.responseText); - } - }); - } - } - })); - }, - deleteMediaItem: function deleteMediaItem(media) { - var self = this; - if (!media) { - return; - } - confirmDialog(_objectSpread(_objectSpread({}, $("#deleteMedia").data()), {}, { - callback: function callback(resp) { - if (resp) { - $.ajax({ - url: $('#deleteMediaUrl').val() + "?path=" + encodeURIComponent(media.mediaPath), - method: 'POST', - data: { - __RequestVerificationToken: $("input[name='__RequestVerificationToken']").val() - }, - success: function success(data) { - var index = self.mediaItems && self.mediaItems.indexOf(media); - if (index > -1) { - self.mediaItems.splice(index, 1); - bus.$emit('mediaDeleted', media); - } - //self.selectedMedia = null; - }, - - error: function error(_error4) { - console.error(_error4.responseText); + }, + error: function error(_error) { + console.log(_error); + items.splice(i, 1, { + name: x.path, + mime: '', + mediaPath: 'not-found', + mediaText: '', + anchor: { + x: 0, + y: 0 } }); + if (items.length === ++length) { + items.forEach(function (x) { + self.mediaItems.push(x); + }); + self.initialized = true; + } } - } - })); - }, - handleDragStart: function handleDragStart(media, e) { - // first part of move media to folder: - // prepare the data that will be handled by the folder component on drop event - var mediaNames = []; - this.selectedMedias.forEach(function (item) { - mediaNames.push(item.name); + }); }); - - // in case the user drags an unselected item, we select it first - if (this.isMediaSelected(media) == false) { - mediaNames.push(media.name); - this.selectedMedias.push(media); - } - e.dataTransfer.setData('mediaNames', JSON.stringify(mediaNames)); - e.dataTransfer.setData('sourceFolder', this.selectedFolder.path); - e.dataTransfer.setDragImage(this.dragDropThumbnail, 10, 10); - e.dataTransfer.effectAllowed = 'move'; - }, - handleScrollWhileDrag: function handleScrollWhileDrag(e) { - if (e.clientY < 150) { - window.scrollBy(0, -10); - } - if (e.clientY > window.innerHeight - 100) { - window.scrollBy(0, 10); - } - }, - changeSort: function changeSort(newSort) { - if (this.sortBy == newSort) { - this.sortAsc = !this.sortAsc; - } else { - this.sortAsc = true; - this.sortBy = newSort; - } + }); + signal.resolve(); + } + }, + fileSize: function fileSize() { + return Math.round(this.selectedMedia.size / 1024); + }, + canAddMedia: function canAddMedia() { + return this.mediaItems.length === 0 || this.mediaItems.length > 0 && allowMultiple; + }, + thumbSize: function thumbSize() { + return this.smallThumbs ? 120 : 240; + }, + currentPrefs: { + get: function get() { + return { + smallThumbs: this.smallThumbs + }; + }, + set: function set(newPrefs) { + if (!newPrefs) { + return; } + this.smallThumbs = newPrefs.smallThumbs; } + } + }, + mounted: function mounted() { + var self = this; + self.paths = initialPaths; + self.$on('selectAndDeleteMediaRequested', function (media) { + self.selectAndDeleteMedia(media); }); - $('#create-folder-name').keypress(function (e) { - var key = e.which; - if (key == 13) { - // the enter key code - $('#modalFooterOk').click(); - return false; - } + self.$on('selectMediaRequested', function (media) { + self.selectMedia(media); }); - $('#modalFooterOk').on('click', function (e) { - var name = $('#create-folder-name').val(); - if (name === "") { - return; - } - $.ajax({ - url: $('#createFolderUrl').val() + "?path=" + encodeURIComponent(mediaApp.selectedFolder.path) + "&name=" + encodeURIComponent(name), - method: 'POST', - data: { - __RequestVerificationToken: $("input[name='__RequestVerificationToken']").val() - }, - success: function success(data) { - bus.$emit('addFolder', mediaApp.selectedFolder, data); - var modal = bootstrap.Modal.getOrCreateInstance($('#createFolderModal')); + self.$on('filesUploaded', function (files) { + self.addMediaFiles(files); + }); + }, + methods: { + selectMedia: function selectMedia(media) { + this.selectedMedia = media; + }, + showModal: function showModal(event) { + var self = this; + if (self.canAddMedia) { + $("#mediaApp").appendTo($(modalBodyElement).find('.modal-body')); + $("#mediaApp").show(); + var modal = new bootstrap.Modal(modalBodyElement); + modal.show(); + $(modalBodyElement).find('.mediaFieldSelectButton').off('click').on('click', function (v) { + self.addMediaFiles(mediaApp.selectedMedias); + + // we don't want the included medias to be still selected the next time we open the modal. + mediaApp.selectedMedias = []; modal.hide(); - }, - error: function error(_error5) { - $('#createFolderModal-errors').empty(); - var errorMessage = JSON.parse(_error5.responseText).value; - $('').text(errorMessage).appendTo($('#createFolderModal-errors')); + return true; + }); + } + }, + showMediaTextModal: function showMediaTextModal(event) { + this.mediaTextModal = new bootstrap.Modal(this.$refs.mediaTextModal); + this.mediaTextModal.show(); + this.backupMediaText = this.selectedMedia.mediaText; + }, + cancelMediaTextModal: function cancelMediaTextModal(event) { + this.mediaTextModal.hide(); + this.selectedMedia.mediaText = this.backupMediaText; + }, + showAnchorModal: function showAnchorModal(event) { + this.anchoringModal = new bootstrap.Modal(this.$refs.anchoringModal); + this.anchoringModal.show(); + // Cause a refresh to recalc heights. + this.selectedMedia.anchor = { + x: this.selectedMedia.anchor.x, + y: this.selectedMedia.anchor.y + }; + this.backupAnchor = this.selectedMedia.anchor; + }, + cancelAnchoringModal: function cancelAnchoringModal(event) { + this.anchoringModal.hide(); + this.selectedMedia.anchor = this.backupAnchor; + }, + resetAnchor: function resetAnchor(event) { + this.selectedMedia.anchor = { + x: 0.5, + y: 0.5 + }; + }, + onAnchorDrop: function onAnchorDrop(event) { + var image = this.$refs.anchorImage; + this.selectedMedia.anchor = { + x: event.offsetX / image.clientWidth, + y: event.offsetY / image.clientHeight + }; + }, + anchorLeft: function anchorLeft() { + if (this.$refs.anchorImage && this.$refs.modalBody && this.selectedMedia) { + // When image is shrunk compare against the modal body. + var offset = (this.$refs.modalBody.clientWidth - this.$refs.anchorImage.clientWidth) / 2; + var position = this.selectedMedia.anchor.x * this.$refs.anchorImage.clientWidth + offset; + var anchorIcon = Math.round(this.$refs.modalBody.querySelector('.icon-media-anchor').clientWidth); + if (Number.isInteger(anchorIcon)) { + position = position - anchorIcon / 2; } - }); - }); - $('#renameMediaModalFooterOk').on('click', function (e) { - var newName = $('#new-item-name').val(); - var oldName = $('#old-item-name').val(); - if (newName === "") { - return; + return position + 'px'; + } else { + return '0'; } - var currentFolder = mediaApp.selectedFolder.path + "/"; - if (currentFolder === "/") { - currentFolder = ""; + }, + anchorTop: function anchorTop() { + if (this.$refs.anchorImage && this.selectedMedia) { + var position = this.selectedMedia.anchor.y * this.$refs.anchorImage.clientHeight; + return position + 'px'; + } else { + return '0'; } - var newPath = currentFolder + newName; - var oldPath = currentFolder + oldName; - if (newPath.toLowerCase() === oldPath.toLowerCase()) { - var modal = bootstrap.Modal.getOrCreateInstance($('#renameMediaModal')); - modal.hide(); - return; + }, + setAnchor: function setAnchor(event) { + var image = this.$refs.anchorImage; + this.selectedMedia.anchor = { + x: event.offsetX / image.clientWidth, + y: event.offsetY / image.clientHeight + }; + }, + addMediaFiles: function addMediaFiles(files) { + if (files.length > 1 && allowMultiple === false) { + alert($('#onlyOneItemMessage').val()); + mediaFieldApp.mediaItems.push(files[0]); + mediaFieldApp.initialized = true; + } else { + mediaFieldApp.mediaItems = mediaFieldApp.mediaItems.concat(files); + mediaFieldApp.initialized = true; } - $.ajax({ - url: $('#renameMediaUrl').val() + "?oldPath=" + encodeURIComponent(oldPath) + "&newPath=" + encodeURIComponent(newPath), - method: 'POST', - data: { - __RequestVerificationToken: $("input[name='__RequestVerificationToken']").val() - }, - success: function success(data) { - var modal = bootstrap.Modal.getOrCreateInstance($('#renameMediaModal')); - modal.hide(); - bus.$emit('mediaRenamed', newName, newPath, oldPath, data.newUrl); - }, - error: function error(_error6) { - $('#renameMediaModal-errors').empty(); - var errorMessage = JSON.parse(_error6.responseText).value; - $('').text(errorMessage).appendTo($('#renameMediaModal-errors')); + }, + removeSelected: function removeSelected(event) { + if (this.selectedMedia) { + var index = this.mediaItems && this.mediaItems.indexOf(this.selectedMedia); + if (index > -1) { + this.mediaItems.splice(index, 1); } - }); - }); - if (displayMediaApplication) { - document.getElementById('mediaApp').style.display = ""; + } else { + // The remove button can also remove a unique media item + if (this.mediaItems.length === 1) { + this.mediaItems.splice(0, 1); + } + } + this.selectedMedia = null; + }, + selectAndDeleteMedia: function selectAndDeleteMedia(media) { + var self = this; + self.selectedMedia = media; + // setTimeout because sometimes removeSelected was called even before the media was set. + setTimeout(function () { + self.removeSelected(); + }, 100); } - $(document).trigger('mediaApp:ready'); - }, - error: function error(_error7) { - console.error(_error7.responseText); - } - }); -} -$(document).on('mediaApp:ready', function () { - var chunkedFileUploadId = randomUUID(); - $('#fileupload').fileupload({ - dropZone: $('#mediaApp'), - limitConcurrentUploads: 20, - dataType: 'json', - url: $('#uploadFiles').val(), - maxChunkSize: Number($('#maxUploadChunkSize').val() || 0), - formData: function formData() { - var antiForgeryToken = $("input[name=__RequestVerificationToken]").val(); - return [{ - name: 'path', - value: mediaApp.selectedFolder.path - }, { - name: '__RequestVerificationToken', - value: antiForgeryToken - }, { - name: '__chunkedFileUploadId', - value: chunkedFileUploadId - }]; }, - done: function done(e, data) { - $.each(data.result.files, function (index, file) { - if (!file.error) { - mediaApp.mediaItems.push(file); + watch: { + mediaItems: { + deep: true, + handler: function handler() { + // Trigger preview rendering + setTimeout(function () { + $(document).trigger('contentpreview:render'); + }, 100); } - }); + }, + currentPrefs: function currentPrefs(newPrefs) { + localStorage.setItem('mediaFieldPrefs', JSON.stringify(newPrefs)); + } } - }).on('fileuploadchunkbeforesend', function (e, options) { - var file = options.files[0]; - // Here we replace the blob with a File object to ensure the file name and others are preserved for the backend. - options.blob = new File([options.blob], file.name, { - type: file.type, - lastModified: file.lastModified + })); +} +// different media field editors will add themselves to this array +var mediaFieldApps = []; +// component +Vue.component('upload', { + template: '\ +
    \ + \ +

    {{ model.name }}

    \ +
    \ + \ + Error: {{ model.errorMessage }} \ +
    \ +
    \ + ', + props: { + model: Object, + uploadInputId: String + }, + mounted: function mounted() { + var _self$uploadInputId; + var self = this; + var uploadInput = document.getElementById((_self$uploadInputId = self.uploadInputId) !== null && _self$uploadInputId !== void 0 ? _self$uploadInputId : 'fileupload'); + $(uploadInput).bind('fileuploadprogress', function (e, data) { + if (data.files[0].name !== self.model.name) { + return; + } + self.model.percentage = parseInt(data.loaded / data.total * 100, 10); }); - }); -}); -$(document).bind('dragover', function (e) { - var dt = e.originalEvent.dataTransfer; - if (dt.types && (dt.types.indexOf ? dt.types.indexOf('Files') != -1 : dt.types.contains('Files'))) { - var dropZone = $('#customdropzone'), - timeout = window.dropZoneTimeout; - if (timeout) { - clearTimeout(timeout); - } else { - dropZone.addClass('in'); + $(uploadInput).bind('fileuploaddone', function (e, data) { + if (data.files[0].name !== self.model.name) { + return; + } + if (data.result.files[0].error) { + self.handleFailure(data.files[0].name, data.result.files[0].error); + } else { + bus.$emit('removalRequest', self.model); + } + }); + $(uploadInput).bind('fileuploadfail', function (e, data) { + if (data.files[0].name !== self.model.name) { + return; + } + self.handleFailure(data.files[0].name, $('#t-error').val()); + }); + }, + methods: { + handleFailure: function handleFailure(fileName, message) { + if (fileName !== this.model.name) { + return; + } + this.model.errorMessage = message; + bus.$emit('ErrorOnUpload', this.model); + }, + dismissWarning: function dismissWarning() { + bus.$emit('removalRequest', this.model); } - var hoveredDropZone = $(e.target).closest(dropZone); - window.dropZoneTimeout = setTimeout(function () { - window.dropZoneTimeout = null; - dropZone.removeClass('in'); - }, 100); } }); -function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } -function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; } -function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; } -function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } -function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); } -function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } -// component -Vue.component('folder', { - template: "\n
  • \n \n
      \n \n \n
    \n
  • \n "), - props: { - model: Object, - selectedInMediaApp: Object, - level: Number - }, +// component +Vue.component('uploadList', { + template: '\ +
    \ +
    \ + {{ T.uploads }} \ + (Pending: {{ pendingCount }}) \ + ( {{ T.errors }}: {{ errorCount }} / {{ T.clearErrors }} ) \ +
    \ +
    \ + \ +
    \ +
    \ + \ +
    \ +
    \ +
    \ +
    \ +
    \ + \ +
    \ +
    \ +
    \ + ', data: function data() { return { - open: false, - children: null, - // not initialized state (for lazy-loading) - parent: null, - isHovered: false, - padding: 0 + files: [], + T: {}, + expanded: false, + pendingCount: 0, + errorCount: 0 }; }, + props: { + uploadInputId: String + }, + created: function created() { + var self = this; + // retrieving localized strings from view + self.T.uploads = $('#t-uploads').val(); + self.T.errors = $('#t-errors').val(); + self.T.clearErrors = $('#t-clear-errors').val(); + }, computed: { - empty: function empty() { - return !this.children || this.children.length == 0; - }, - isSelected: function isSelected() { - return this.selectedInMediaApp.name == this.model.name && this.selectedInMediaApp.path == this.model.path; - }, - isRoot: function isRoot() { - return this.model.path === ''; + fileCount: function fileCount() { + return this.files.length; } }, mounted: function mounted() { - if (this.isRoot == false && this.isAncestorOfSelectedFolder()) { - this.toggle(); + var _self$uploadInputId; + var self = this; + var uploadInput = document.getElementById((_self$uploadInputId = self.uploadInputId) !== null && _self$uploadInputId !== void 0 ? _self$uploadInputId : 'fileupload'); + $(uploadInput).bind('fileuploadadd', function (e, data) { + if (!data.files) { + return; + } + data.files.forEach(function (newFile) { + var alreadyInList = self.files.some(function (f) { + return f.name == newFile.name; + }); + if (!alreadyInList) { + self.files.push({ + name: newFile.name, + percentage: 0, + errorMessage: '' + }); + } else { + console.error('A file with the same name is already on the queue:' + newFile.name); + } + }); + }); + bus.$on('removalRequest', function (fileUpload) { + self.files.forEach(function (item, index, array) { + if (item.name == fileUpload.name) { + array.splice(index, 1); + } + }); + }); + bus.$on('ErrorOnUpload', function (fileUpload) { + self.updateCount(); + }); + }, + methods: { + updateCount: function updateCount() { + this.errorCount = this.files.filter(function (item) { + return item.errorMessage != ''; + }).length; + this.pendingCount = this.files.length - this.errorCount; + if (this.files.length < 1) { + this.expanded = false; + } + }, + clearErrors: function clearErrors() { + this.files = this.files.filter(function (item) { + return item.errorMessage == ''; + }); } - this.padding = this.level < 3 ? 16 : 16 + this.level * 8; }, - created: function created() { - var self = this; - bus.$on('deleteFolder', function (folder) { - if (self.children) { - var index = self.children && self.children.indexOf(folder); - if (index > -1) { - self.children.splice(index, 1); - bus.$emit('folderDeleted'); + watch: { + files: function files() { + this.updateCount(); + } + } +}); +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +function randomUUID() { + if ((typeof crypto === "undefined" ? "undefined" : _typeof(crypto)) === 'object' && typeof crypto.randomUUID === 'function') { + return crypto.randomUUID(); + } + return ([1e7] + -1e3 + -4e3 + -8e3 + -1e11).replace(/[018]/g, function (c) { + return (c ^ crypto.getRandomValues(new Uint8Array(1))[0] & 15 >> c / 4).toString(16); + }); +} +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +/* + * jQuery File Upload Plugin + * https://github.com/blueimp/jQuery-File-Upload + * + * Copyright 2010, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * https://opensource.org/licenses/MIT + */ + +/* global define, require */ +/* eslint-disable new-cap */ + +(function (factory) { + 'use strict'; + + if (typeof define === 'function' && define.amd) { + // Register as an anonymous AMD module: + define(['jquery', 'jquery-ui/ui/widget'], factory); + } else if ((typeof exports === "undefined" ? "undefined" : _typeof(exports)) === 'object') { + // Node/CommonJS: + factory(require('jquery'), require('./vendor/jquery.ui.widget')); + } else { + // Browser globals: + factory(window.jQuery); + } +})(function ($) { + 'use strict'; + + // Detect file input support, based on + // https://viljamis.com/2012/file-upload-support-on-mobile/ + $.support.fileInput = !(new RegExp( + // Handle devices which give false positives for the feature detection: + '(Android (1\\.[0156]|2\\.[01]))' + '|(Windows Phone (OS 7|8\\.0))|(XBLWP)|(ZuneWP)|(WPDesktop)' + '|(w(eb)?OSBrowser)|(webOS)' + '|(Kindle/(1\\.0|2\\.[05]|3\\.0))').test(window.navigator.userAgent) || + // Feature detection for all other devices: + $('').prop('disabled')); + + // The FileReader API is not actually used, but works as feature detection, + // as some Safari versions (5?) support XHR file uploads via the FormData API, + // but not non-multipart XHR file uploads. + // window.XMLHttpRequestUpload is not available on IE10, so we check for + // window.ProgressEvent instead to detect XHR2 file upload capability: + $.support.xhrFileUpload = !!(window.ProgressEvent && window.FileReader); + $.support.xhrFormDataFileUpload = !!window.FormData; + + // Detect support for Blob slicing (required for chunked uploads): + $.support.blobSlice = window.Blob && (Blob.prototype.slice || Blob.prototype.webkitSlice || Blob.prototype.mozSlice); + + /** + * Helper function to create drag handlers for dragover/dragenter/dragleave + * + * @param {string} type Event type + * @returns {Function} Drag handler + */ + function getDragHandler(type) { + var isDragOver = type === 'dragover'; + return function (e) { + e.dataTransfer = e.originalEvent && e.originalEvent.dataTransfer; + var dataTransfer = e.dataTransfer; + if (dataTransfer && $.inArray('Files', dataTransfer.types) !== -1 && this._trigger(type, $.Event(type, { + delegatedEvent: e + })) !== false) { + e.preventDefault(); + if (isDragOver) { + dataTransfer.dropEffect = 'copy'; } } - }); - bus.$on('addFolder', function (target, folder) { - if (self.model == target) { - if (self.children !== null) { - self.children.push(folder); + }; + } + + // The fileupload widget listens for change events on file input fields defined + // via fileInput setting and paste or drop events of the given dropZone. + // In addition to the default jQuery Widget methods, the fileupload widget + // exposes the "add" and "send" methods, to add or directly send files using + // the fileupload API. + // By default, files added via file input selection, paste, drag & drop or + // "add" method are uploaded immediately, but it is possible to override + // the "add" callback option to queue file uploads. + $.widget('blueimp.fileupload', { + options: { + // The drop target element(s), by the default the complete document. + // Set to null to disable drag & drop support: + dropZone: $(document), + // The paste target element(s), by the default undefined. + // Set to a DOM node or jQuery object to enable file pasting: + pasteZone: undefined, + // The file input field(s), that are listened to for change events. + // If undefined, it is set to the file input fields inside + // of the widget element on plugin initialization. + // Set to null to disable the change listener. + fileInput: undefined, + // By default, the file input field is replaced with a clone after + // each input field change event. This is required for iframe transport + // queues and allows change events to be fired for the same file + // selection, but can be disabled by setting the following option to false: + replaceFileInput: true, + // The parameter name for the file form data (the request argument name). + // If undefined or empty, the name property of the file input field is + // used, or "files[]" if the file input name property is also empty, + // can be a string or an array of strings: + paramName: undefined, + // By default, each file of a selection is uploaded using an individual + // request for XHR type uploads. Set to false to upload file + // selections in one request each: + singleFileUploads: true, + // To limit the number of files uploaded with one XHR request, + // set the following option to an integer greater than 0: + limitMultiFileUploads: undefined, + // The following option limits the number of files uploaded with one + // XHR request to keep the request size under or equal to the defined + // limit in bytes: + limitMultiFileUploadSize: undefined, + // Multipart file uploads add a number of bytes to each uploaded file, + // therefore the following option adds an overhead for each file used + // in the limitMultiFileUploadSize configuration: + limitMultiFileUploadSizeOverhead: 512, + // Set the following option to true to issue all file upload requests + // in a sequential order: + sequentialUploads: false, + // To limit the number of concurrent uploads, + // set the following option to an integer greater than 0: + limitConcurrentUploads: undefined, + // Set the following option to true to force iframe transport uploads: + forceIframeTransport: false, + // Set the following option to the location of a redirect url on the + // origin server, for cross-domain iframe transport uploads: + redirect: undefined, + // The parameter name for the redirect url, sent as part of the form + // data and set to 'redirect' if this option is empty: + redirectParamName: undefined, + // Set the following option to the location of a postMessage window, + // to enable postMessage transport uploads: + postMessage: undefined, + // By default, XHR file uploads are sent as multipart/form-data. + // The iframe transport is always using multipart/form-data. + // Set to false to enable non-multipart XHR uploads: + multipart: true, + // To upload large files in smaller chunks, set the following option + // to a preferred maximum chunk size. If set to 0, null or undefined, + // or the browser does not support the required Blob API, files will + // be uploaded as a whole. + maxChunkSize: undefined, + // When a non-multipart upload or a chunked multipart upload has been + // aborted, this option can be used to resume the upload by setting + // it to the size of the already uploaded bytes. This option is most + // useful when modifying the options object inside of the "add" or + // "send" callbacks, as the options are cloned for each file upload. + uploadedBytes: undefined, + // By default, failed (abort or error) file uploads are removed from the + // global progress calculation. Set the following option to false to + // prevent recalculating the global progress data: + recalculateProgress: true, + // Interval in milliseconds to calculate and trigger progress events: + progressInterval: 100, + // Interval in milliseconds to calculate progress bitrate: + bitrateInterval: 500, + // By default, uploads are started automatically when adding files: + autoUpload: true, + // By default, duplicate file names are expected to be handled on + // the server-side. If this is not possible (e.g. when uploading + // files directly to Amazon S3), the following option can be set to + // an empty object or an object mapping existing filenames, e.g.: + // { "image.jpg": true, "image (1).jpg": true } + // If it is set, all files will be uploaded with unique filenames, + // adding increasing number suffixes if necessary, e.g.: + // "image (2).jpg" + uniqueFilenames: undefined, + // Error and info messages: + messages: { + uploadedBytes: 'Uploaded bytes exceed file size' + }, + // Translation function, gets the message key to be translated + // and an object with context specific data as arguments: + i18n: function i18n(message, context) { + // eslint-disable-next-line no-param-reassign + message = this.messages[message] || message.toString(); + if (context) { + $.each(context, function (key, value) { + // eslint-disable-next-line no-param-reassign + message = message.replace('{' + key + '}', value); + }); } - folder.parent = self.model; - bus.$emit('folderAdded', folder); - } - }); - }, - methods: { - isAncestorOfSelectedFolder: function isAncestorOfSelectedFolder() { - parentFolder = mediaApp.selectedFolder; - while (parentFolder) { - if (parentFolder.path == this.model.path) { - return true; + return message; + }, + // Additional form data to be sent along with the file uploads can be set + // using this option, which accepts an array of objects with name and + // value properties, a function returning such an array, a FormData + // object (for XHR file uploads), or a simple object. + // The form of the first fileInput is given as parameter to the function: + formData: function formData(form) { + return form.serializeArray(); + }, + // The add callback is invoked as soon as files are added to the fileupload + // widget (via file input selection, drag & drop, paste or add API call). + // If the singleFileUploads option is enabled, this callback will be + // called once for each file in the selection for XHR file uploads, else + // once for each file selection. + // + // The upload starts when the submit method is invoked on the data parameter. + // The data object contains a files property holding the added files + // and allows you to override plugin options as well as define ajax settings. + // + // Listeners for this callback can also be bound the following way: + // .on('fileuploadadd', func); + // + // data.submit() returns a Promise object and allows to attach additional + // handlers using jQuery's Deferred callbacks: + // data.submit().done(func).fail(func).always(func); + add: function add(e, data) { + if (e.isDefaultPrevented()) { + return false; } - parentFolder = parentFolder.parent; - } - return false; - }, - toggle: function toggle() { - this.open = !this.open; - if (this.open && !this.children) { - this.loadChildren(); - } - }, - select: function select() { - bus.$emit('folderSelected', this.model); - this.loadChildren(); - }, - createFolder: function createFolder() { - bus.$emit('createFolderRequested'); - }, - deleteFolder: function deleteFolder() { - bus.$emit('deleteFolderRequested'); - }, - loadChildren: function loadChildren() { - var self = this; - if (this.open == false) { - this.open = true; - } - $.ajax({ - url: $('#getFoldersUrl').val() + "?path=" + encodeURIComponent(self.model.path), - method: 'GET', - success: function success(data) { - self.children = data; - self.children.forEach(function (c) { - c.parent = self.model; + if (data.autoUpload || data.autoUpload !== false && $(this).fileupload('option', 'autoUpload')) { + data.process().done(function () { + data.submit(); }); - }, - error: function error(_error) { - emtpy = false; - console.error(_error.responseText); } - }); - }, - handleDragOver: function handleDragOver(e) { - this.isHovered = true; - }, - handleDragLeave: function handleDragLeave(e) { - this.isHovered = false; - }, - moveMediaToFolder: function moveMediaToFolder(folder, e) { - var self = this; - self.isHovered = false; - var mediaNames = JSON.parse(e.dataTransfer.getData('mediaNames')); - if (mediaNames.length < 1) { - return; - } - var sourceFolder = e.dataTransfer.getData('sourceFolder'); - var targetFolder = folder.path; - if (sourceFolder === '') { - sourceFolder = 'root'; - } - if (targetFolder === '') { - targetFolder = 'root'; - } - if (sourceFolder === targetFolder) { - alert($('#sameFolderMessage').val()); - return; - } - confirmDialog(_objectSpread(_objectSpread({}, $("#moveMedia").data()), {}, { - callback: function callback(resp) { - if (resp) { - $.ajax({ - url: $('#moveMediaListUrl').val(), - method: 'POST', - data: { - __RequestVerificationToken: $("input[name='__RequestVerificationToken']").val(), - mediaNames: mediaNames, - sourceFolder: sourceFolder, - targetFolder: targetFolder - }, - success: function success() { - bus.$emit('mediaListMoved'); // MediaApp will listen to this, and then it will reload page so the moved medias won't be there anymore - }, + }, + // Other callbacks: + + // Callback for the submit event of each file upload: + // submit: function (e, data) {}, // .on('fileuploadsubmit', func); + + // Callback for the start of each file upload request: + // send: function (e, data) {}, // .on('fileuploadsend', func); + + // Callback for successful uploads: + // done: function (e, data) {}, // .on('fileuploaddone', func); + + // Callback for failed (abort or error) uploads: + // fail: function (e, data) {}, // .on('fileuploadfail', func); + + // Callback for completed (success, abort or error) requests: + // always: function (e, data) {}, // .on('fileuploadalways', func); + + // Callback for upload progress events: + // progress: function (e, data) {}, // .on('fileuploadprogress', func); + + // Callback for global upload progress events: + // progressall: function (e, data) {}, // .on('fileuploadprogressall', func); + + // Callback for uploads start, equivalent to the global ajaxStart event: + // start: function (e) {}, // .on('fileuploadstart', func); + + // Callback for uploads stop, equivalent to the global ajaxStop event: + // stop: function (e) {}, // .on('fileuploadstop', func); + + // Callback for change events of the fileInput(s): + // change: function (e, data) {}, // .on('fileuploadchange', func); + + // Callback for paste events to the pasteZone(s): + // paste: function (e, data) {}, // .on('fileuploadpaste', func); + + // Callback for drop events of the dropZone(s): + // drop: function (e, data) {}, // .on('fileuploaddrop', func); + + // Callback for dragover events of the dropZone(s): + // dragover: function (e) {}, // .on('fileuploaddragover', func); + + // Callback before the start of each chunk upload request (before form data initialization): + // chunkbeforesend: function (e, data) {}, // .on('fileuploadchunkbeforesend', func); + + // Callback for the start of each chunk upload request: + // chunksend: function (e, data) {}, // .on('fileuploadchunksend', func); + + // Callback for successful chunk uploads: + // chunkdone: function (e, data) {}, // .on('fileuploadchunkdone', func); + + // Callback for failed (abort or error) chunk uploads: + // chunkfail: function (e, data) {}, // .on('fileuploadchunkfail', func); - error: function error(_error2) { - console.error(_error2.responseText); - bus.$emit('mediaListMoved', _error2.responseText); - } - }); - } - } - })); - } - } -}); -// https://github.com/spatie/font-awesome-filetypes + // Callback for completed (success, abort or error) chunk upload requests: + // chunkalways: function (e, data) {}, // .on('fileuploadchunkalways', func); -var faIcons = { - image: 'fa-regular fa-image', - pdf: 'fa-regular fa-file-pdf', - word: 'fa-regular fa-file-word', - powerpoint: 'fa-regular fa-file-powerpoint', - excel: 'fa-regular fa-file-excel', - csv: 'fa-regular fa-file', - audio: 'fa-regular fa-file-audio', - video: 'fa-regular fa-file-video', - archive: 'fa-regular fa-file-zipper', - code: 'fa-regular fa-file-code', - text: 'fa-regular fa-file-lines', - file: 'fa-regular fa-file' -}; -var faThumbnails = { - gif: faIcons.image, - jpeg: faIcons.image, - jpg: faIcons.image, - png: faIcons.image, - pdf: faIcons.pdf, - doc: faIcons.word, - docx: faIcons.word, - ppt: faIcons.powerpoint, - pptx: faIcons.powerpoint, - xls: faIcons.excel, - xlsx: faIcons.excel, - csv: faIcons.csv, - aac: faIcons.audio, - mp3: faIcons.audio, - ogg: faIcons.audio, - avi: faIcons.video, - flv: faIcons.video, - mkv: faIcons.video, - mp4: faIcons.video, - webm: faIcons.video, - gz: faIcons.archive, - zip: faIcons.archive, - css: faIcons.code, - html: faIcons.code, - js: faIcons.code, - txt: faIcons.text -}; -function getClassNameForExtension(extension) { - return faThumbnails[extension.toLowerCase()] || faIcons.file; -} -function getExtensionForFilename(filename) { - return filename.slice((filename.lastIndexOf('.') - 1 >>> 0) + 2); -} -function getClassNameForFilename(filename) { - return getClassNameForExtension(getExtensionForFilename(filename)); -} -// component -Vue.component('media-items-grid', { - template: "\n
      \n
    1. \n
      \n \n \n
      \n
      \n \n \n \n {{ media.name }}\n
      \n
    2. \n
    \n ", - data: function data() { - return { - T: {} - }; - }, - props: { - filteredMediaItems: Array, - selectedMedias: Array, - thumbSize: Number - }, - created: function created() { - var self = this; - // retrieving localized strings from view - self.T.editButton = $('#t-edit-button').val(); - self.T.deleteButton = $('#t-delete-button').val(); - }, - methods: { - isMediaSelected: function isMediaSelected(media) { - var result = this.selectedMedias.some(function (element, index, array) { - return element.url.toLowerCase() === media.url.toLowerCase(); - }); - return result; - }, - buildMediaUrl: function buildMediaUrl(url, thumbSize) { - return url + (url.indexOf('?') == -1 ? '?' : '&') + 'width=' + thumbSize + '&height=' + thumbSize; - }, - toggleSelectionOfMedia: function toggleSelectionOfMedia(media) { - bus.$emit('mediaToggleRequested', media); - }, - renameMedia: function renameMedia(media) { - bus.$emit('renameMediaRequested', media); - }, - deleteMedia: function deleteMedia(media) { - bus.$emit('deleteMediaRequested', media); - }, - dragStart: function dragStart(media, e) { - bus.$emit('mediaDragStartRequested', media, e); - }, - getfontAwesomeClassNameForFileName: function getfontAwesomeClassNameForFilename(filename, thumbsize) { - return getClassNameForFilename(filename) + ' ' + thumbsize; - } - } -}); -// component -Vue.component('media-items-table', { - template: "\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    {{ T.imageHeader }}\n {{ T.nameHeader }}\n \n \n {{ T.lastModifyHeader }} \n \n \n \n {{ T.sizeHeader }}\n \n \n \n \n {{ T.typeHeader }}\n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    {{ printDateTime(media.lastModify) }}
    \n
    \n
    {{ isNaN(media.size)? 0 : Math.round(media.size / 1024) }} KB
    \n
    \n
    {{ media.mime }}
    \n
    \n ", - data: function data() { - return { - T: {} - }; - }, - props: { - sortBy: String, - sortAsc: Boolean, - filteredMediaItems: Array, - selectedMedias: Array, - thumbSize: Number - }, - created: function created() { - var self = this; - self.T.imageHeader = $('#t-image-header').val(); - self.T.nameHeader = $('#t-name-header').val(); - self.T.lastModifyHeader = $('#t-lastModify-header').val(); - self.T.sizeHeader = $('#t-size-header').val(); - self.T.typeHeader = $('#t-type-header').val(); - self.T.editButton = $('#t-edit-button').val(); - self.T.deleteButton = $('#t-delete-button').val(); - self.T.viewButton = $('#t-view-button').val(); - }, - methods: { - isMediaSelected: function isMediaSelected(media) { - var result = this.selectedMedias.some(function (element, index, array) { - return element.url.toLowerCase() === media.url.toLowerCase(); - }); - return result; - }, - buildMediaUrl: function buildMediaUrl(url, thumbSize) { - return url + (url.indexOf('?') == -1 ? '?' : '&') + 'width=' + thumbSize + '&height=' + thumbSize; - }, - changeSort: function changeSort(newSort) { - bus.$emit('sortChangeRequested', newSort); - }, - toggleSelectionOfMedia: function toggleSelectionOfMedia(media) { - bus.$emit('mediaToggleRequested', media); - }, - renameMedia: function renameMedia(media) { - bus.$emit('renameMediaRequested', media); + // The plugin options are used as settings object for the ajax calls. + // The following are jQuery ajax settings required for the file uploads: + processData: false, + contentType: false, + cache: false, + timeout: 0 }, - deleteMedia: function deleteMedia(media) { - bus.$emit('deleteMediaRequested', media); + // jQuery versions before 1.8 require promise.pipe if the return value is + // used, as promise.then in older versions has a different behavior, see: + // https://blog.jquery.com/2012/08/09/jquery-1-8-released/ + // https://bugs.jquery.com/ticket/11010 + // https://github.com/blueimp/jQuery-File-Upload/pull/3435 + _promisePipe: function () { + var parts = $.fn.jquery.split('.'); + return Number(parts[0]) > 1 || Number(parts[1]) > 7 ? 'then' : 'pipe'; + }(), + // A list of options that require reinitializing event listeners and/or + // special initialization code: + _specialOptions: ['fileInput', 'dropZone', 'pasteZone', 'multipart', 'forceIframeTransport'], + _blobSlice: $.support.blobSlice && function () { + var slice = this.slice || this.webkitSlice || this.mozSlice; + return slice.apply(this, arguments); }, - dragStart: function dragStart(media, e) { - bus.$emit('mediaDragStartRequested', media, e); + _BitrateTimer: function _BitrateTimer() { + this.timestamp = Date.now ? Date.now() : new Date().getTime(); + this.loaded = 0; + this.bitrate = 0; + this.getBitrate = function (now, loaded, interval) { + var timeDiff = now - this.timestamp; + if (!this.bitrate || !interval || timeDiff > interval) { + this.bitrate = (loaded - this.loaded) * (1000 / timeDiff) * 8; + this.loaded = loaded; + this.timestamp = now; + } + return this.bitrate; + }; }, - printDateTime: function printDateTime(datemillis) { - var d = new Date(datemillis); - return d.toLocaleString(); + _isXHRUpload: function _isXHRUpload(options) { + return !options.forceIframeTransport && (!options.multipart && $.support.xhrFileUpload || $.support.xhrFormDataFileUpload); }, - getfontAwesomeClassNameForFileName: function getfontAwesomeClassNameForFilename(filename, thumbsize) { - return getClassNameForFilename(filename) + ' ' + thumbsize; - } - } -}); -// This component receives a list of all the items, unpaged. -// As the user interacts with the pager, it raises events with the items in the current page. -// It's the parent's responsibility to listen for these events and display the received items -// component -Vue.component('pager', { - template: "\n
    \n \n \n
    \n ", - props: { - sourceItems: Array - }, - data: function data() { - return { - pageSize: 10, - pageSizeOptions: [10, 30, 50, 100], - current: 0, - T: {} - }; - }, - created: function created() { - var self = this; - - // retrieving localized strings from view - self.T.pagerFirstButton = $('#t-pager-first-button').val(); - self.T.pagerPreviousButton = $('#t-pager-previous-button').val(); - self.T.pagerNextButton = $('#t-pager-next-button').val(); - self.T.pagerLastButton = $('#t-pager-last-button').val(); - self.T.pagerPageSizeLabel = $('#t-pager-page-size-label').val(); - self.T.pagerPageLabel = $('#t-pager-page-label').val(); - self.T.pagerTotalLabel = $('#t-pager-total-label').val(); - }, - methods: { - next: function next() { - this.current = this.current + 1; + _getFormData: function _getFormData(options) { + var formData; + if ($.type(options.formData) === 'function') { + return options.formData(options.form); + } + if ($.isArray(options.formData)) { + return options.formData; + } + if ($.type(options.formData) === 'object') { + formData = []; + $.each(options.formData, function (name, value) { + formData.push({ + name: name, + value: value + }); + }); + return formData; + } + return []; }, - previous: function previous() { - this.current = this.current - 1; + _getTotal: function _getTotal(files) { + var total = 0; + $.each(files, function (index, file) { + total += file.size || 1; + }); + return total; }, - goFirst: function goFirst() { - this.current = 0; + _initProgressObject: function _initProgressObject(obj) { + var progress = { + loaded: 0, + total: 0, + bitrate: 0 + }; + if (obj._progress) { + $.extend(obj._progress, progress); + } else { + obj._progress = progress; + } }, - goLast: function goLast() { - this.current = this.totalPages - 1; + _initResponseObject: function _initResponseObject(obj) { + var prop; + if (obj._response) { + for (prop in obj._response) { + if (Object.prototype.hasOwnProperty.call(obj._response, prop)) { + delete obj._response[prop]; + } + } + } else { + obj._response = {}; + } }, - goTo: function goTo(targetPage) { - this.current = targetPage; - } - }, - computed: { - total: function total() { - return this.sourceItems ? this.sourceItems.length : 0; + _onProgress: function _onProgress(e, data) { + if (e.lengthComputable) { + var now = Date.now ? Date.now() : new Date().getTime(), + loaded; + if (data._time && data.progressInterval && now - data._time < data.progressInterval && e.loaded !== e.total) { + return; + } + data._time = now; + loaded = Math.floor(e.loaded / e.total * (data.chunkSize || data._progress.total)) + (data.uploadedBytes || 0); + // Add the difference from the previously loaded state + // to the global loaded counter: + this._progress.loaded += loaded - data._progress.loaded; + this._progress.bitrate = this._bitrateTimer.getBitrate(now, this._progress.loaded, data.bitrateInterval); + data._progress.loaded = data.loaded = loaded; + data._progress.bitrate = data.bitrate = data._bitrateTimer.getBitrate(now, loaded, data.bitrateInterval); + // Trigger a custom progress event with a total data property set + // to the file size(s) of the current upload and a loaded data + // property calculated accordingly: + this._trigger('progress', $.Event('progress', { + delegatedEvent: e + }), data); + // Trigger a global progress event for all current file uploads, + // including ajax calls queued for sequential file uploads: + this._trigger('progressall', $.Event('progressall', { + delegatedEvent: e + }), this._progress); + } }, - totalPages: function totalPages() { - var pages = Math.ceil(this.total / this.pageSize); - return pages > 0 ? pages : 1; + _initProgressListener: function _initProgressListener(options) { + var that = this, + xhr = options.xhr ? options.xhr() : $.ajaxSettings.xhr(); + // Access to the native XHR object is required to add event listeners + // for the upload progress event: + if (xhr.upload) { + $(xhr.upload).on('progress', function (e) { + var oe = e.originalEvent; + // Make sure the progress event properties get copied over: + e.lengthComputable = oe.lengthComputable; + e.loaded = oe.loaded; + e.total = oe.total; + that._onProgress(e, options); + }); + options.xhr = function () { + return xhr; + }; + } }, - isLastPage: function isLastPage() { - return this.current + 1 >= this.totalPages; + _deinitProgressListener: function _deinitProgressListener(options) { + var xhr = options.xhr ? options.xhr() : $.ajaxSettings.xhr(); + if (xhr.upload) { + $(xhr.upload).off('progress'); + } }, - isFirstPage: function isFirstPage() { - return this.current === 0; + _isInstanceOf: function _isInstanceOf(type, obj) { + // Cross-frame instanceof check + return Object.prototype.toString.call(obj) === '[object ' + type + ']'; }, - canDoNext: function canDoNext() { - return !this.isLastPage; + _getUniqueFilename: function _getUniqueFilename(name, map) { + // eslint-disable-next-line no-param-reassign + name = String(name); + if (map[name]) { + // eslint-disable-next-line no-param-reassign + name = name.replace(/(?: \(([\d]+)\))?(\.[^.]+)?$/, function (_, p1, p2) { + var index = p1 ? Number(p1) + 1 : 1; + var ext = p2 || ''; + return ' (' + index + ')' + ext; + }); + return this._getUniqueFilename(name, map); + } + map[name] = true; + return name; }, - canDoPrev: function canDoPrev() { - return !this.isFirstPage; + _initXHRData: function _initXHRData(options) { + var that = this, + formData, + file = options.files[0], + // Ignore non-multipart setting if not supported: + multipart = options.multipart || !$.support.xhrFileUpload, + paramName = $.type(options.paramName) === 'array' ? options.paramName[0] : options.paramName; + options.headers = $.extend({}, options.headers); + if (options.contentRange) { + options.headers['Content-Range'] = options.contentRange; + } + if (!multipart || options.blob || !this._isInstanceOf('File', file)) { + options.headers['Content-Disposition'] = 'attachment; filename="' + encodeURI(file.uploadName || file.name) + '"'; + } + if (!multipart) { + options.contentType = file.type || 'application/octet-stream'; + options.data = options.blob || file; + } else if ($.support.xhrFormDataFileUpload) { + if (options.postMessage) { + // window.postMessage does not allow sending FormData + // objects, so we just add the File/Blob objects to + // the formData array and let the postMessage window + // create the FormData object out of this array: + formData = this._getFormData(options); + if (options.blob) { + formData.push({ + name: paramName, + value: options.blob + }); + } else { + $.each(options.files, function (index, file) { + formData.push({ + name: $.type(options.paramName) === 'array' && options.paramName[index] || paramName, + value: file + }); + }); + } + } else { + if (that._isInstanceOf('FormData', options.formData)) { + formData = options.formData; + } else { + formData = new FormData(); + $.each(this._getFormData(options), function (index, field) { + formData.append(field.name, field.value); + }); + } + if (options.blob) { + formData.append(paramName, options.blob, file.uploadName || file.name); + } else { + $.each(options.files, function (index, file) { + // This check allows the tests to run with + // dummy objects: + if (that._isInstanceOf('File', file) || that._isInstanceOf('Blob', file)) { + var fileName = file.uploadName || file.name; + if (options.uniqueFilenames) { + fileName = that._getUniqueFilename(fileName, options.uniqueFilenames); + } + formData.append($.type(options.paramName) === 'array' && options.paramName[index] || paramName, file, fileName); + } + }); + } + } + options.data = formData; + } + // Blob reference is not needed anymore, free memory: + options.blob = null; }, - canDoFirst: function canDoFirst() { - return !this.isFirstPage; + _initIframeSettings: function _initIframeSettings(options) { + var targetHost = $('').prop('href', options.url).prop('host'); + // Setting the dataType to iframe enables the iframe transport: + options.dataType = 'iframe ' + (options.dataType || ''); + // The iframe transport accepts a serialized array as form data: + options.formData = this._getFormData(options); + // Add redirect url to form data on cross-domain uploads: + if (options.redirect && targetHost && targetHost !== location.host) { + options.formData.push({ + name: options.redirectParamName || 'redirect', + value: options.redirect + }); + } }, - canDoLast: function canDoLast() { - return !this.isLastPage; + _initDataSettings: function _initDataSettings(options) { + if (this._isXHRUpload(options)) { + if (!this._chunkedUpload(options, true)) { + if (!options.data) { + this._initXHRData(options); + } + this._initProgressListener(options); + } + if (options.postMessage) { + // Setting the dataType to postmessage enables the + // postMessage transport: + options.dataType = 'postmessage ' + (options.dataType || ''); + } + } else { + this._initIframeSettings(options); + } + }, + _getParamName: function _getParamName(options) { + var fileInput = $(options.fileInput), + paramName = options.paramName; + if (!paramName) { + paramName = []; + fileInput.each(function () { + var input = $(this), + name = input.prop('name') || 'files[]', + i = (input.prop('files') || [1]).length; + while (i) { + paramName.push(name); + i -= 1; + } + }); + if (!paramName.length) { + paramName = [fileInput.prop('name') || 'files[]']; + } + } else if (!$.isArray(paramName)) { + paramName = [paramName]; + } + return paramName; + }, + _initFormSettings: function _initFormSettings(options) { + // Retrieve missing options from the input field and the + // associated form, if available: + if (!options.form || !options.form.length) { + options.form = $(options.fileInput.prop('form')); + // If the given file input doesn't have an associated form, + // use the default widget file input's form: + if (!options.form.length) { + options.form = $(this.options.fileInput.prop('form')); + } + } + options.paramName = this._getParamName(options); + if (!options.url) { + options.url = options.form.prop('action') || location.href; + } + // The HTTP request method must be "POST" or "PUT": + options.type = (options.type || $.type(options.form.prop('method')) === 'string' && options.form.prop('method') || '').toUpperCase(); + if (options.type !== 'POST' && options.type !== 'PUT' && options.type !== 'PATCH') { + options.type = 'POST'; + } + if (!options.formAcceptCharset) { + options.formAcceptCharset = options.form.attr('accept-charset'); + } }, - // this computed is only to have a central place where we detect changes and leverage Vue JS reactivity to raise our event. - // That event will be handled by the parent media app to display the items in the page. - // this logic will not run if the computed property is not used in the template. We use a dummy "data-computed-trigger" attribute for that. - itemsInCurrentPage: function itemsInCurrentPage() { - var start = this.pageSize * this.current; - var end = start + this.pageSize; - var result = this.sourceItems.slice(start, end); - bus.$emit('pagerEvent', result); - return result; + _getAJAXSettings: function _getAJAXSettings(data) { + var options = $.extend({}, this.options, data); + this._initFormSettings(options); + this._initDataSettings(options); + return options; }, - pageLinks: function pageLinks() { - var links = []; - links.push(this.current + 1); - - // Add 2 items before current - var beforeCurrent = this.current > 0 ? this.current : -1; - links.unshift(beforeCurrent); - var beforeBeforeCurrent = this.current > 1 ? this.current - 1 : -1; - links.unshift(beforeBeforeCurrent); - - // Add 2 items after current - var afterCurrent = this.totalPages - this.current > 1 ? this.current + 2 : -1; - links.push(afterCurrent); - var afterAfterCurrent = this.totalPages - this.current > 2 ? this.current + 3 : -1; - links.push(afterAfterCurrent); - return links; - } - }, - watch: { - sourceItems: function sourceItems() { - this.current = 0; // resetting current page after receiving a new list of unpaged items + // jQuery 1.6 doesn't provide .state(), + // while jQuery 1.8+ removed .isRejected() and .isResolved(): + _getDeferredState: function _getDeferredState(deferred) { + if (deferred.state) { + return deferred.state(); + } + if (deferred.isResolved()) { + return 'resolved'; + } + if (deferred.isRejected()) { + return 'rejected'; + } + return 'pending'; }, - - pageSize: function pageSize() { - this.current = 0; - } - } -}); -// component -Vue.component('sortIndicator', { - template: "\n
    \n \n \n
    \n ", - props: { - colname: String, - selectedcolname: String, - asc: Boolean - }, - computed: { - isActive: function isActive() { - return this.colname.toLowerCase() == this.selectedcolname.toLowerCase(); - } - } -}); -function initializeAttachedMediaField(el, idOfUploadButton, uploadAction, mediaItemUrl, allowMultiple, allowMediaText, allowAnchors, tempUploadFolder, maxUploadChunkSize) { - var target = $(document.getElementById($(el).data('for'))); - var initialPaths = target.data("init"); - var mediaFieldEditor = $(el); - var idprefix = mediaFieldEditor.attr("id"); - var mediaFieldApp; - mediaFieldApps.push(mediaFieldApp = new Vue({ - el: mediaFieldEditor.get(0), - data: { - mediaItems: [], - selectedMedia: null, - smallThumbs: false, - idPrefix: idprefix, - initialized: false, - allowMediaText: allowMediaText, - backupMediaText: '', - allowAnchors: allowAnchors, - backupAnchor: null, - mediaTextmodal: null, - anchoringModal: null + // Maps jqXHR callbacks to the equivalent + // methods of the given Promise object: + _enhancePromise: function _enhancePromise(promise) { + promise.success = promise.done; + promise.error = promise.fail; + promise.complete = promise.always; + return promise; }, - created: function created() { - var self = this; - self.currentPrefs = JSON.parse(localStorage.getItem('mediaFieldPrefs')); + // Creates and returns a Promise object enhanced with + // the jqXHR methods abort, success, error and complete: + _getXHRPromise: function _getXHRPromise(resolveOrReject, context, args) { + var dfd = $.Deferred(), + promise = dfd.promise(); + // eslint-disable-next-line no-param-reassign + context = context || this.options.context || promise; + if (resolveOrReject === true) { + dfd.resolveWith(context, args); + } else if (resolveOrReject === false) { + dfd.rejectWith(context, args); + } + promise.abort = dfd.promise; + return this._enhancePromise(promise); }, - computed: { - paths: { - get: function get() { - var mediaPaths = []; - if (!this.initialized) { - return JSON.stringify(initialPaths); - } - this.mediaItems.forEach(function (x) { - if (x.mediaPath === 'not-found') { - return; + // Adds convenience methods to the data callback argument: + _addConvenienceMethods: function _addConvenienceMethods(e, data) { + var that = this, + getPromise = function getPromise(args) { + return $.Deferred().resolveWith(that, args).promise(); + }; + data.process = function (resolveFunc, rejectFunc) { + if (resolveFunc || rejectFunc) { + data._processQueue = this._processQueue = (this._processQueue || getPromise([this]))[that._promisePipe](function () { + if (data.errorThrown) { + return $.Deferred().rejectWith(that, [data]).promise(); } - mediaPaths.push({ - path: x.mediaPath, - isRemoved: x.isRemoved, - isNew: x.isNew, - mediaText: x.mediaText, - anchor: x.anchor, - attachedFileName: x.attachedFileName - }); - }); - return JSON.stringify(mediaPaths); - }, - set: function set(values) { - var self = this; - var mediaPaths = values || []; - var signal = $.Deferred(); - var items = []; - var length = 0; - mediaPaths.forEach(function (x, i) { - items.push({ - name: ' ' + x.path, - mime: '', - mediaPath: '', - anchor: x.anchor, - attachedFileName: x.attachedFileName - }); // don't remove the space. Something different is needed or it wont react when the real name arrives. - promise = $.when(signal).done(function () { - $.ajax({ - url: mediaItemUrl + "?path=" + encodeURIComponent(x.path), - method: 'GET', - success: function success(data) { - data.vuekey = data.name + i.toString(); // Because a unique key is required by Vue on v-for - data.mediaText = x.mediaText; // This value is not returned from the ajax call. - data.anchor = x.anchor; // This value is not returned from the ajax call. - data.attachedFileName = x.attachedFileName; // This value is not returned from the ajax call. - items.splice(i, 1, data); - if (items.length === ++length) { - items.forEach(function (x) { - self.mediaItems.push(x); - }); - self.initialized = true; - } - }, - error: function error(_error) { - console.log(JSON.stringify(_error)); - items.splice(i, 1, { - name: x.path, - mime: '', - mediaPath: 'not-found', - mediaText: '', - anchor: { - x: 0.5, - y: 0.5 - }, - attachedFileName: x.attachedFileName - }); - if (items.length === ++length) { - items.forEach(function (x) { - self.mediaItems.push(x); - }); - self.initialized = true; - } - } - }); - }); - }); - signal.resolve(); + return getPromise(arguments); + })[that._promisePipe](resolveFunc, rejectFunc); } - }, - fileSize: function fileSize() { - return Math.round(this.selectedMedia.size / 1024); - }, - canAddMedia: function canAddMedia() { - var nonRemovedMediaItems = []; - for (var i = 0; i < this.mediaItems.length; i++) { - if (!this.mediaItems[i].isRemoved) { - nonRemovedMediaItems.push(this.mediaItems[i]); + return this._processQueue || getPromise([this]); + }; + data.submit = function () { + if (this.state() !== 'pending') { + data.jqXHR = this.jqXHR = that._trigger('submit', $.Event('submit', { + delegatedEvent: e + }), this) !== false && that._onSend(e, this); + } + return this.jqXHR || that._getXHRPromise(); + }; + data.abort = function () { + if (this.jqXHR) { + return this.jqXHR.abort(); + } + this.errorThrown = 'abort'; + that._trigger('fail', null, this); + return that._getXHRPromise(false); + }; + data.state = function () { + if (this.jqXHR) { + return that._getDeferredState(this.jqXHR); + } + if (this._processQueue) { + return that._getDeferredState(this._processQueue); + } + }; + data.processing = function () { + return !this.jqXHR && this._processQueue && that._getDeferredState(this._processQueue) === 'pending'; + }; + data.progress = function () { + return this._progress; + }; + data.response = function () { + return this._response; + }; + }, + // Parses the Range header from the server response + // and returns the uploaded bytes: + _getUploadedBytes: function _getUploadedBytes(jqXHR) { + var range = jqXHR.getResponseHeader('Range'), + parts = range && range.split('-'), + upperBytesPos = parts && parts.length > 1 && parseInt(parts[1], 10); + return upperBytesPos && upperBytesPos + 1; + }, + // Uploads a file in multiple, sequential requests + // by splitting the file up in multiple blob chunks. + // If the second parameter is true, only tests if the file + // should be uploaded in chunks, but does not invoke any + // upload requests: + _chunkedUpload: function _chunkedUpload(options, testOnly) { + options.uploadedBytes = options.uploadedBytes || 0; + var that = this, + file = options.files[0], + fs = file.size, + ub = options.uploadedBytes, + mcs = options.maxChunkSize || fs, + slice = this._blobSlice, + dfd = $.Deferred(), + promise = dfd.promise(), + jqXHR, + _upload; + if (!(this._isXHRUpload(options) && slice && (ub || ($.type(mcs) === 'function' ? mcs(options) : mcs) < fs)) || options.data) { + return false; + } + if (testOnly) { + return true; + } + if (ub >= fs) { + file.error = options.i18n('uploadedBytes'); + return this._getXHRPromise(false, options.context, [null, 'error', file.error]); + } + // The chunk upload method: + _upload = function upload() { + // Clone the options object for each chunk upload: + var o = $.extend({}, options), + currentLoaded = o._progress.loaded; + o.blob = slice.call(file, ub, ub + ($.type(mcs) === 'function' ? mcs(o) : mcs), file.type); + // Store the current chunk size, as the blob itself + // will be dereferenced after data processing: + o.chunkSize = o.blob.size; + // Expose the chunk bytes position range: + o.contentRange = 'bytes ' + ub + '-' + (ub + o.chunkSize - 1) + '/' + fs; + // Trigger chunkbeforesend to allow form data to be updated for this chunk + that._trigger('chunkbeforesend', null, o); + // Process the upload data (the blob and potential form data): + that._initXHRData(o); + // Add progress listeners for this chunk upload: + that._initProgressListener(o); + jqXHR = (that._trigger('chunksend', null, o) !== false && $.ajax(o) || that._getXHRPromise(false, o.context)).done(function (result, textStatus, jqXHR) { + ub = that._getUploadedBytes(jqXHR) || ub + o.chunkSize; + // Create a progress event if no final progress event + // with loaded equaling total has been triggered + // for this chunk: + if (currentLoaded + o.chunkSize - o._progress.loaded) { + that._onProgress($.Event('progress', { + lengthComputable: true, + loaded: ub - o.uploadedBytes, + total: ub - o.uploadedBytes + }), o); } - } - return nonRemovedMediaItems.length === 0 || nonRemovedMediaItems.length > 0 && allowMultiple; - }, - thumbSize: function thumbSize() { - return this.smallThumbs ? 120 : 240; - }, - currentPrefs: { - get: function get() { - return { - smallThumbs: this.smallThumbs - }; - }, - set: function set(newPrefs) { - if (!newPrefs) { - return; + options.uploadedBytes = o.uploadedBytes = ub; + o.result = result; + o.textStatus = textStatus; + o.jqXHR = jqXHR; + that._trigger('chunkdone', null, o); + that._trigger('chunkalways', null, o); + if (ub < fs) { + // File upload not yet complete, + // continue with the next chunk: + _upload(); + } else { + dfd.resolveWith(o.context, [result, textStatus, jqXHR]); } - this.smallThumbs = newPrefs.smallThumbs; - } + }).fail(function (jqXHR, textStatus, errorThrown) { + o.jqXHR = jqXHR; + o.textStatus = textStatus; + o.errorThrown = errorThrown; + that._trigger('chunkfail', null, o); + that._trigger('chunkalways', null, o); + dfd.rejectWith(o.context, [jqXHR, textStatus, errorThrown]); + }).always(function () { + that._deinitProgressListener(o); + }); + }; + this._enhancePromise(promise); + promise.abort = function () { + return jqXHR.abort(); + }; + _upload(); + return promise; + }, + _beforeSend: function _beforeSend(e, data) { + if (this._active === 0) { + // the start callback is triggered when an upload starts + // and no other uploads are currently running, + // equivalent to the global ajaxStart event: + this._trigger('start'); + // Set timer for global bitrate progress calculation: + this._bitrateTimer = new this._BitrateTimer(); + // Reset the global progress values: + this._progress.loaded = this._progress.total = 0; + this._progress.bitrate = 0; + } + // Make sure the container objects for the .response() and + // .progress() methods on the data object are available + // and reset to their initial state: + this._initResponseObject(data); + this._initProgressObject(data); + data._progress.loaded = data.loaded = data.uploadedBytes || 0; + data._progress.total = data.total = this._getTotal(data.files) || 1; + data._progress.bitrate = data.bitrate = 0; + this._active += 1; + // Initialize the global progress values: + this._progress.loaded += data.loaded; + this._progress.total += data.total; + }, + _onDone: function _onDone(result, textStatus, jqXHR, options) { + var total = options._progress.total, + response = options._response; + if (options._progress.loaded < total) { + // Create a progress event if no final progress event + // with loaded equaling total has been triggered: + this._onProgress($.Event('progress', { + lengthComputable: true, + loaded: total, + total: total + }), options); } + response.result = options.result = result; + response.textStatus = options.textStatus = textStatus; + response.jqXHR = options.jqXHR = jqXHR; + this._trigger('done', null, options); }, - mounted: function mounted() { - var self = this; - self.paths = initialPaths; - self.$on('selectAndDeleteMediaRequested', function (media) { - self.selectAndDeleteMedia(media); - }); - self.$on('selectMediaRequested', function (media) { - self.selectMedia(media); - }); - var selector = '#' + idOfUploadButton; - var editorId = mediaFieldEditor.attr('id'); - var chunkedFileUploadId = randomUUID(); - $(selector).fileupload({ - limitConcurrentUploads: 20, - dropZone: $('#' + editorId), - dataType: 'json', - url: uploadAction, - maxChunkSize: maxUploadChunkSize, - add: function add(e, data) { - var count = data.files.length; - var i; - for (i = 0; i < count; i++) { - data.files[i].uploadName = self.getUniqueId() + data.files[i].name; - data.files[i].attachedFileName = data.files[i].name; - } - data.submit(); - }, - formData: function formData() { - var antiForgeryToken = $("input[name=__RequestVerificationToken]").val(); - return [{ - name: 'path', - value: tempUploadFolder - }, { - name: '__RequestVerificationToken', - value: antiForgeryToken - }, { - name: '__chunkedFileUploadId', - value: chunkedFileUploadId - }]; - }, - done: function done(e, data) { - var newMediaItems = []; - var errormsg = ""; - if (data.result.files.length > 0) { - for (var i = 0; i < data.result.files.length; i++) { - data.result.files[i].isNew = true; - //if error is defined probably the file type is not allowed - if (data.result.files[i].error === undefined || data.result.files[i].error === null) { - data.result.files[i].attachedFileName = data.files[i].attachedFileName; - newMediaItems.push(data.result.files[i]); - } else errormsg += data.result.files[i].error + "\n"; + _onFail: function _onFail(jqXHR, textStatus, errorThrown, options) { + var response = options._response; + if (options.recalculateProgress) { + // Remove the failed (error or abort) file upload from + // the global progress calculation: + this._progress.loaded -= options._progress.loaded; + this._progress.total -= options._progress.total; + } + response.jqXHR = options.jqXHR = jqXHR; + response.textStatus = options.textStatus = textStatus; + response.errorThrown = options.errorThrown = errorThrown; + this._trigger('fail', null, options); + }, + _onAlways: function _onAlways(jqXHRorResult, textStatus, jqXHRorError, options) { + // jqXHRorResult, textStatus and jqXHRorError are added to the + // options object via done and fail callbacks + this._trigger('always', null, options); + }, + _onSend: function _onSend(e, data) { + if (!data.submit) { + this._addConvenienceMethods(e, data); + } + var that = this, + jqXHR, + aborted, + slot, + pipe, + options = that._getAJAXSettings(data), + send = function send() { + that._sending += 1; + // Set timer for bitrate progress calculation: + options._bitrateTimer = new that._BitrateTimer(); + jqXHR = jqXHR || ((aborted || that._trigger('send', $.Event('send', { + delegatedEvent: e + }), options) === false) && that._getXHRPromise(false, options.context, aborted) || that._chunkedUpload(options) || $.ajax(options)).done(function (result, textStatus, jqXHR) { + that._onDone(result, textStatus, jqXHR, options); + }).fail(function (jqXHR, textStatus, errorThrown) { + that._onFail(jqXHR, textStatus, errorThrown, options); + }).always(function (jqXHRorResult, textStatus, jqXHRorError) { + that._deinitProgressListener(options); + that._onAlways(jqXHRorResult, textStatus, jqXHRorError, options); + that._sending -= 1; + that._active -= 1; + if (options.limitConcurrentUploads && options.limitConcurrentUploads > that._sending) { + // Start the next queued upload, + // that has not been aborted: + var nextSlot = that._slots.shift(); + while (nextSlot) { + if (that._getDeferredState(nextSlot) === 'pending') { + nextSlot.resolve(); + break; + } + nextSlot = that._slots.shift(); + } + } + if (that._active === 0) { + // The stop callback is triggered when all uploads have + // been completed, equivalent to the global ajaxStop event: + that._trigger('stop'); } - } - if (errormsg !== "") { - alert(errormsg); - return; - } - console.log(newMediaItems); - if (newMediaItems.length > 1 && allowMultiple === false) { - alert($('#onlyOneItemMessage').val()); - mediaFieldApp.mediaItems.push(newMediaItems[0]); - mediaFieldApp.initialized = true; - } else { - mediaFieldApp.mediaItems = mediaFieldApp.mediaItems.concat(newMediaItems); - mediaFieldApp.initialized = true; - } - }, - error: function error(jqXHR, textStatus, errorThrown) { - console.log('Error on upload.'); - console.log(jqXHR); - console.log(textStatus); - console.log(errorThrown); - } - }).on('fileuploadchunkbeforesend', function (e, options) { - var file = options.files[0]; - // Here we replace the blob with a File object to ensure the file name and others are preserved for the backend. - options.blob = new File([options.blob], file.name, { - type: file.type, - lastModified: file.lastModified - }); - }); - }, - methods: { - selectMedia: function selectMedia(media) { - this.selectedMedia = media; - }, - getUniqueId: function getUniqueId() { - return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { - var r = Math.random() * 16 | 0, - v = c === 'x' ? r : r & 0x3 | 0x8; - return v.toString(16); - }); - }, - removeSelected: function removeSelected(event) { - var removed = {}; - if (this.selectedMedia) { - var index = this.mediaItems && this.mediaItems.indexOf(this.selectedMedia); - if (index > -1) { - removed = this.mediaItems[index]; - removed.isRemoved = true; - //this.mediaItems.splice([index], 1, removed); - this.mediaItems.splice(index, 1); - } + }); + return jqXHR; + }; + this._beforeSend(e, options); + if (this.options.sequentialUploads || this.options.limitConcurrentUploads && this.options.limitConcurrentUploads <= this._sending) { + if (this.options.limitConcurrentUploads > 1) { + slot = $.Deferred(); + this._slots.push(slot); + pipe = slot[that._promisePipe](send); } else { - // The remove button can also remove a unique media item - if (this.mediaItems.length === 1) { - removed = this.mediaItems[index]; - removed.isRemoved = true; - //this.mediaItems.splice(0, 1, removed); - this.mediaItems.splice(0, 1); - } + this._sequence = this._sequence[that._promisePipe](send, send); + pipe = this._sequence; } - this.selectedMedia = null; - }, - showMediaTextModal: function showMediaTextModal(event) { - this.mediaTextModal = new bootstrap.Modal(this.$refs.mediaTextModal); - this.mediaTextModal.show(); - this.backupMediaText = this.selectedMedia.mediaText; - }, - cancelMediaTextModal: function cancelMediaTextModal(event) { - this.mediaTextModal.hide(); - this.selectedMedia.mediaText = this.backupMediaText; - }, - showAnchorModal: function showAnchorModal(event) { - this.anchoringModal = new bootstrap.Modal(this.$refs.anchoringModal); - this.anchoringModal.show(); - // Cause a refresh to recalc heights. - this.selectedMedia.anchor = { - x: this.selectedMedia.anchor.x, - y: this.selectedMedia.anchor.y - }; - this.backupAnchor = this.selectedMedia.anchor; - }, - cancelAnchoringModal: function cancelAnchoringModal(event) { - this.anchoringModal.hide(); - this.selectedMedia.anchor = this.backupAnchor; - }, - resetAnchor: function resetAnchor(event) { - this.selectedMedia.anchor = { - x: 0.5, - y: 0.5 - }; - }, - onAnchorDrop: function onAnchorDrop(event) { - var image = this.$refs.anchorImage; - this.selectedMedia.anchor = { - x: event.offsetX / image.clientWidth, - y: event.offsetY / image.clientHeight + // Return the piped Promise object, enhanced with an abort method, + // which is delegated to the jqXHR object of the current upload, + // and jqXHR callbacks mapped to the equivalent Promise methods: + pipe.abort = function () { + aborted = [undefined, 'abort', 'abort']; + if (!jqXHR) { + if (slot) { + slot.rejectWith(options.context, aborted); + } + return send(); + } + return jqXHR.abort(); }; - }, - anchorLeft: function anchorLeft() { - if (this.$refs.anchorImage && this.$refs.modalBody && this.selectedMedia) { - // When image is shrunk compare against the modal body. - var offset = (this.$refs.modalBody.clientWidth - this.$refs.anchorImage.clientWidth) / 2; - var position = this.selectedMedia.anchor.x * this.$refs.anchorImage.clientWidth + offset; - if (position < 17) { - // Adjust so the target doesn't show outside image. - position = 17; - } else { - position = position - 8; // Adjust to hit the mouse pointer. + return this._enhancePromise(pipe); + } + return send(); + }, + _onAdd: function _onAdd(e, data) { + var that = this, + result = true, + options = $.extend({}, this.options, data), + files = data.files, + filesLength = files.length, + limit = options.limitMultiFileUploads, + limitSize = options.limitMultiFileUploadSize, + overhead = options.limitMultiFileUploadSizeOverhead, + batchSize = 0, + paramName = this._getParamName(options), + paramNameSet, + paramNameSlice, + fileSet, + i, + j = 0; + if (!filesLength) { + return false; + } + if (limitSize && files[0].size === undefined) { + limitSize = undefined; + } + if (!(options.singleFileUploads || limit || limitSize) || !this._isXHRUpload(options)) { + fileSet = [files]; + paramNameSet = [paramName]; + } else if (!(options.singleFileUploads || limitSize) && limit) { + fileSet = []; + paramNameSet = []; + for (i = 0; i < filesLength; i += limit) { + fileSet.push(files.slice(i, i + limit)); + paramNameSlice = paramName.slice(i, i + limit); + if (!paramNameSlice.length) { + paramNameSlice = paramName; } - - return position + 'px'; - } else { - return '0'; + paramNameSet.push(paramNameSlice); } - }, - anchorTop: function anchorTop() { - if (this.$refs.anchorImage && this.selectedMedia) { - var position = this.selectedMedia.anchor.y * this.$refs.anchorImage.clientHeight; - if (position < 15) { - // Adjustment so the target doesn't show outside image. - position = 15; - } else { - position = position + 5; // Adjust to hit the mouse pointer. + } else if (!options.singleFileUploads && limitSize) { + fileSet = []; + paramNameSet = []; + for (i = 0; i < filesLength; i = i + 1) { + batchSize += files[i].size + overhead; + if (i + 1 === filesLength || batchSize + files[i + 1].size + overhead > limitSize || limit && i + 1 - j >= limit) { + fileSet.push(files.slice(j, i + 1)); + paramNameSlice = paramName.slice(j, i + 1); + if (!paramNameSlice.length) { + paramNameSlice = paramName; + } + paramNameSet.push(paramNameSlice); + j = i + 1; + batchSize = 0; } - - return position + 'px'; - } else { - return '0'; - } - }, - setAnchor: function setAnchor(event) { - var image = this.$refs.anchorImage; - this.selectedMedia.anchor = { - x: event.offsetX / image.clientWidth, - y: event.offsetY / image.clientHeight - }; - }, - addMediaFiles: function addMediaFiles(files) { - if (files.length > 1 && allowMultiple === false) { - alert($('#onlyOneItemMessage').val()); - mediaFieldApp.mediaItems.push(files[0]); - mediaFieldApp.initialized = true; - } else { - mediaFieldApp.mediaItems = mediaFieldApp.mediaItems.concat(files); - mediaFieldApp.initialized = true; } - }, - selectAndDeleteMedia: function selectAndDeleteMedia(media) { - var self = this; - self.selectedMedia = media; - // setTimeout because sometimes - // removeSelected was called even before the media was set. - setTimeout(function () { - self.removeSelected(); - }, 100); + } else { + paramNameSet = paramName; } + data.originalFiles = files; + $.each(fileSet || files, function (index, element) { + var newData = $.extend({}, data); + newData.files = fileSet ? element : [element]; + newData.paramName = paramNameSet[index]; + that._initResponseObject(newData); + that._initProgressObject(newData); + that._addConvenienceMethods(e, newData); + result = that._trigger('add', $.Event('add', { + delegatedEvent: e + }), newData); + return result; + }); + return result; }, - watch: { - mediaItems: { - deep: true, - handler: function handler() { - // Trigger preview rendering - setTimeout(function () { - $(document).trigger('contentpreview:render'); - }, 100); + _replaceFileInput: function _replaceFileInput(data) { + var input = data.fileInput, + inputClone = input.clone(true), + restoreFocus = input.is(document.activeElement); + // Add a reference for the new cloned file input to the data argument: + data.fileInputClone = inputClone; + $('
    ').append(inputClone)[0].reset(); + // Detaching allows to insert the fileInput on another form + // without losing the file input value: + input.after(inputClone).detach(); + // If the fileInput had focus before it was detached, + // restore focus to the inputClone. + if (restoreFocus) { + inputClone.trigger('focus'); + } + // Avoid memory leaks with the detached file input: + $.cleanData(input.off('remove')); + // Replace the original file input element in the fileInput + // elements set with the clone, which has been copied including + // event handlers: + this.options.fileInput = this.options.fileInput.map(function (i, el) { + if (el === input[0]) { + return inputClone[0]; } - }, - currentPrefs: function currentPrefs(newPrefs) { - localStorage.setItem('mediaFieldPrefs', JSON.stringify(newPrefs)); + return el; + }); + // If the widget has been initialized on the file input itself, + // override this.element with the file input clone: + if (input[0] === this.element[0]) { + this.element = inputClone; } - } - })); -} -function initializeMediaField(el, modalBodyElement, mediaItemUrl, allowMultiple, allowMediaText, allowAnchors) { - //BagPart create a script section without other DOM elements - if (el === null) return; - var target = $(document.getElementById($(el).data('for'))); - var initialPaths = target.data("init"); - var mediaFieldEditor = $(el); - var idprefix = mediaFieldEditor.attr("id"); - var mediaFieldApp; - - //when hide modal detach media app to avoid issue on BagPart - modalBodyElement.addEventListener('hidden.bs.modal', function (event) { - $("#mediaApp").appendTo('body'); - $("#mediaApp").hide(); - }); - mediaFieldApps.push(mediaFieldApp = new Vue({ - el: mediaFieldEditor.get(0), - data: { - mediaItems: [], - selectedMedia: null, - smallThumbs: false, - idPrefix: idprefix, - initialized: false, - allowMediaText: allowMediaText, - backupMediaText: '', - allowAnchors: allowAnchors, - backupAnchor: null, - mediaTextModal: null, - anchoringModal: null }, - created: function created() { - var self = this; - self.currentPrefs = JSON.parse(localStorage.getItem('mediaFieldPrefs')); - }, - computed: { - paths: { - get: function get() { - var mediaPaths = []; - if (!this.initialized) { - return JSON.stringify(initialPaths); + _handleFileTreeEntry: function _handleFileTreeEntry(entry, path) { + var that = this, + dfd = $.Deferred(), + entries = [], + dirReader, + errorHandler = function errorHandler(e) { + if (e && !e.entry) { + e.entry = entry; } - this.mediaItems.forEach(function (x) { - if (x.mediaPath === 'not-found') { - return; - } - mediaPaths.push({ - path: x.mediaPath, - mediaText: x.mediaText, - anchor: x.anchor - }); - }); - return JSON.stringify(mediaPaths); + // Since $.when returns immediately if one + // Deferred is rejected, we use resolve instead. + // This allows valid files and invalid items + // to be returned together in one set: + dfd.resolve([e]); }, - set: function set(values) { - var self = this; - var mediaPaths = values || []; - var signal = $.Deferred(); - var items = []; - var length = 0; - mediaPaths.forEach(function (x, i) { - items.push({ - name: ' ' + x.path, - mime: '', - mediaPath: '' - }); // don't remove the space. Something different is needed or it wont react when the real name arrives. - promise = $.when(signal).done(function () { - $.ajax({ - url: mediaItemUrl + "?path=" + encodeURIComponent(x.path), - method: 'GET', - success: function success(data) { - data.vuekey = data.name + i.toString(); - data.mediaText = x.mediaText; // This value is not returned from the ajax call. - data.anchor = x.anchor; // This value is not returned from the ajax call. - items.splice(i, 1, data); - if (items.length === ++length) { - items.forEach(function (y) { - self.mediaItems.push(y); - }); - self.initialized = true; - } - }, - error: function error(_error) { - console.log(_error); - items.splice(i, 1, { - name: x.path, - mime: '', - mediaPath: 'not-found', - mediaText: '', - anchor: { - x: 0, - y: 0 - } - }); - if (items.length === ++length) { - items.forEach(function (x) { - self.mediaItems.push(x); - }); - self.initialized = true; - } - } - }); - }); - }); - signal.resolve(); - } - }, - fileSize: function fileSize() { - return Math.round(this.selectedMedia.size / 1024); - }, - canAddMedia: function canAddMedia() { - return this.mediaItems.length === 0 || this.mediaItems.length > 0 && allowMultiple; - }, - thumbSize: function thumbSize() { - return this.smallThumbs ? 120 : 240; - }, - currentPrefs: { - get: function get() { - return { - smallThumbs: this.smallThumbs - }; + successHandler = function successHandler(entries) { + that._handleFileTreeEntries(entries, path + entry.name + '/').done(function (files) { + dfd.resolve(files); + }).fail(errorHandler); }, - set: function set(newPrefs) { - if (!newPrefs) { - return; - } - this.smallThumbs = newPrefs.smallThumbs; + readEntries = function readEntries() { + dirReader.readEntries(function (results) { + if (!results.length) { + successHandler(entries); + } else { + entries = entries.concat(results); + readEntries(); + } + }, errorHandler); + }; + // eslint-disable-next-line no-param-reassign + path = path || ''; + if (entry.isFile) { + if (entry._file) { + // Workaround for Chrome bug #149735 + entry._file.relativePath = path; + dfd.resolve(entry._file); + } else { + entry.file(function (file) { + file.relativePath = path; + dfd.resolve(file); + }, errorHandler); } + } else if (entry.isDirectory) { + dirReader = entry.createReader(); + readEntries(); + } else { + // Return an empty list for file system items + // other than files or directories: + dfd.resolve([]); } + return dfd.promise(); }, - mounted: function mounted() { - var self = this; - self.paths = initialPaths; - self.$on('selectAndDeleteMediaRequested', function (media) { - self.selectAndDeleteMedia(media); - }); - self.$on('selectMediaRequested', function (media) { - self.selectMedia(media); + _handleFileTreeEntries: function _handleFileTreeEntries(entries, path) { + var that = this; + return $.when.apply($, $.map(entries, function (entry) { + return that._handleFileTreeEntry(entry, path); + }))[this._promisePipe](function () { + return Array.prototype.concat.apply([], arguments); }); - self.$on('filesUploaded', function (files) { - self.addMediaFiles(files); + }, + _getDroppedFiles: function _getDroppedFiles(dataTransfer) { + // eslint-disable-next-line no-param-reassign + dataTransfer = dataTransfer || {}; + var items = dataTransfer.items; + if (items && items.length && (items[0].webkitGetAsEntry || items[0].getAsEntry)) { + return this._handleFileTreeEntries($.map(items, function (item) { + var entry; + if (item.webkitGetAsEntry) { + entry = item.webkitGetAsEntry(); + if (entry) { + // Workaround for Chrome bug #149735: + entry._file = item.getAsFile(); + } + return entry; + } + return item.getAsEntry(); + })); + } + return $.Deferred().resolve($.makeArray(dataTransfer.files)).promise(); + }, + _getSingleFileInputFiles: function _getSingleFileInputFiles(fileInput) { + // eslint-disable-next-line no-param-reassign + fileInput = $(fileInput); + var entries = fileInput.prop('entries'), + files, + value; + if (entries && entries.length) { + return this._handleFileTreeEntries(entries); + } + files = $.makeArray(fileInput.prop('files')); + if (!files.length) { + value = fileInput.prop('value'); + if (!value) { + return $.Deferred().resolve([]).promise(); + } + // If the files property is not available, the browser does not + // support the File API and we add a pseudo File object with + // the input value as name with path information removed: + files = [{ + name: value.replace(/^.*\\/, '') + }]; + } else if (files[0].name === undefined && files[0].fileName) { + // File normalization for Safari 4 and Firefox 3: + $.each(files, function (index, file) { + file.name = file.fileName; + file.size = file.fileSize; + }); + } + return $.Deferred().resolve(files).promise(); + }, + _getFileInputFiles: function _getFileInputFiles(fileInput) { + if (!(fileInput instanceof $) || fileInput.length === 1) { + return this._getSingleFileInputFiles(fileInput); + } + return $.when.apply($, $.map(fileInput, this._getSingleFileInputFiles))[this._promisePipe](function () { + return Array.prototype.concat.apply([], arguments); }); }, - methods: { - selectMedia: function selectMedia(media) { - this.selectedMedia = media; - }, - showModal: function showModal(event) { - var self = this; - if (self.canAddMedia) { - $("#mediaApp").appendTo($(modalBodyElement).find('.modal-body')); - $("#mediaApp").show(); - var modal = new bootstrap.Modal(modalBodyElement); - modal.show(); - $(modalBodyElement).find('.mediaFieldSelectButton').off('click').on('click', function (v) { - self.addMediaFiles(mediaApp.selectedMedias); - - // we don't want the included medias to be still selected the next time we open the modal. - mediaApp.selectedMedias = []; - modal.hide(); - return true; - }); - } - }, - showMediaTextModal: function showMediaTextModal(event) { - this.mediaTextModal = new bootstrap.Modal(this.$refs.mediaTextModal); - this.mediaTextModal.show(); - this.backupMediaText = this.selectedMedia.mediaText; - }, - cancelMediaTextModal: function cancelMediaTextModal(event) { - this.mediaTextModal.hide(); - this.selectedMedia.mediaText = this.backupMediaText; - }, - showAnchorModal: function showAnchorModal(event) { - this.anchoringModal = new bootstrap.Modal(this.$refs.anchoringModal); - this.anchoringModal.show(); - // Cause a refresh to recalc heights. - this.selectedMedia.anchor = { - x: this.selectedMedia.anchor.x, - y: this.selectedMedia.anchor.y - }; - this.backupAnchor = this.selectedMedia.anchor; - }, - cancelAnchoringModal: function cancelAnchoringModal(event) { - this.anchoringModal.hide(); - this.selectedMedia.anchor = this.backupAnchor; - }, - resetAnchor: function resetAnchor(event) { - this.selectedMedia.anchor = { - x: 0.5, - y: 0.5 - }; - }, - onAnchorDrop: function onAnchorDrop(event) { - var image = this.$refs.anchorImage; - this.selectedMedia.anchor = { - x: event.offsetX / image.clientWidth, - y: event.offsetY / image.clientHeight + _onChange: function _onChange(e) { + var that = this, + data = { + fileInput: $(e.target), + form: $(e.target.form) }; - }, - anchorLeft: function anchorLeft() { - if (this.$refs.anchorImage && this.$refs.modalBody && this.selectedMedia) { - // When image is shrunk compare against the modal body. - var offset = (this.$refs.modalBody.clientWidth - this.$refs.anchorImage.clientWidth) / 2; - var position = this.selectedMedia.anchor.x * this.$refs.anchorImage.clientWidth + offset; - var anchorIcon = Math.round(this.$refs.modalBody.querySelector('.icon-media-anchor').clientWidth); - if (Number.isInteger(anchorIcon)) { - position = position - anchorIcon / 2; - } - return position + 'px'; - } else { - return '0'; + this._getFileInputFiles(data.fileInput).always(function (files) { + data.files = files; + if (that.options.replaceFileInput) { + that._replaceFileInput(data); } - }, - anchorTop: function anchorTop() { - if (this.$refs.anchorImage && this.selectedMedia) { - var position = this.selectedMedia.anchor.y * this.$refs.anchorImage.clientHeight; - return position + 'px'; - } else { - return '0'; + if (that._trigger('change', $.Event('change', { + delegatedEvent: e + }), data) !== false) { + that._onAdd(e, data); } - }, - setAnchor: function setAnchor(event) { - var image = this.$refs.anchorImage; - this.selectedMedia.anchor = { - x: event.offsetX / image.clientWidth, - y: event.offsetY / image.clientHeight + }); + }, + _onPaste: function _onPaste(e) { + var items = e.originalEvent && e.originalEvent.clipboardData && e.originalEvent.clipboardData.items, + data = { + files: [] }; - }, - addMediaFiles: function addMediaFiles(files) { - if (files.length > 1 && allowMultiple === false) { - alert($('#onlyOneItemMessage').val()); - mediaFieldApp.mediaItems.push(files[0]); - mediaFieldApp.initialized = true; - } else { - mediaFieldApp.mediaItems = mediaFieldApp.mediaItems.concat(files); - mediaFieldApp.initialized = true; - } - }, - removeSelected: function removeSelected(event) { - if (this.selectedMedia) { - var index = this.mediaItems && this.mediaItems.indexOf(this.selectedMedia); - if (index > -1) { - this.mediaItems.splice(index, 1); - } - } else { - // The remove button can also remove a unique media item - if (this.mediaItems.length === 1) { - this.mediaItems.splice(0, 1); + if (items && items.length) { + $.each(items, function (index, item) { + var file = item.getAsFile && item.getAsFile(); + if (file) { + data.files.push(file); } + }); + if (this._trigger('paste', $.Event('paste', { + delegatedEvent: e + }), data) !== false) { + this._onAdd(e, data); } - this.selectedMedia = null; - }, - selectAndDeleteMedia: function selectAndDeleteMedia(media) { - var self = this; - self.selectedMedia = media; - // setTimeout because sometimes removeSelected was called even before the media was set. - setTimeout(function () { - self.removeSelected(); - }, 100); } }, - watch: { - mediaItems: { - deep: true, - handler: function handler() { - // Trigger preview rendering - setTimeout(function () { - $(document).trigger('contentpreview:render'); - }, 100); - } - }, - currentPrefs: function currentPrefs(newPrefs) { - localStorage.setItem('mediaFieldPrefs', JSON.stringify(newPrefs)); - } - } - })); -} -// different media field editors will add themselves to this array -var mediaFieldApps = []; -// component -// different media field editors share this component to present the thumbs. -Vue.component('mediaFieldThumbsContainer', { - template: '\ -
    \ -
    \ -
    \ - {{T.noImages}}\ -
    \ -
    \ - \ -
  • \ -
    \ -
    \ - \ - \ -
    \ -
    \ - \ - \ - {{ media.isNew ? media.name.substr(36) : media.name }}\ -
    \ -
    \ -
    \ -
    \ - \ - {{ T.mediaNotFound }}\ - {{ T.discardWarning }}\ -
    \ -
    \ - \ - {{ media.name }}\ -
    \ -
    \ -
  • \ -
    \ -
    \ - ', - data: function data() { - return { - T: {} - }; - }, - props: { - mediaItems: Array, - selectedMedia: Object, - thumbSize: Number, - idPrefix: String - }, - created: function created() { - var self = this; - - // retrieving localized strings from view - self.T.mediaNotFound = $('#t-media-not-found').val(); - self.T.discardWarning = $('#t-discard-warning').val(); - self.T.noImages = $('#t-no-images').val(); - }, - methods: { - selectAndDeleteMedia: function selectAndDeleteMedia(media) { - this.$parent.$emit('selectAndDeleteMediaRequested', media); + _onDrop: function _onDrop(e) { + e.dataTransfer = e.originalEvent && e.originalEvent.dataTransfer; + var that = this, + dataTransfer = e.dataTransfer, + data = {}; + if (dataTransfer && dataTransfer.files && dataTransfer.files.length) { + e.preventDefault(); + this._getDroppedFiles(dataTransfer).always(function (files) { + data.files = files; + if (that._trigger('drop', $.Event('drop', { + delegatedEvent: e + }), data) !== false) { + that._onAdd(e, data); + } + }); + } }, - selectMedia: function selectMedia(media) { - this.$parent.$emit('selectMediaRequested', media); + _onDragOver: getDragHandler('dragover'), + _onDragEnter: getDragHandler('dragenter'), + _onDragLeave: getDragHandler('dragleave'), + _initEventHandlers: function _initEventHandlers() { + if (this._isXHRUpload(this.options)) { + this._on(this.options.dropZone, { + dragover: this._onDragOver, + drop: this._onDrop, + // event.preventDefault() on dragenter is required for IE10+: + dragenter: this._onDragEnter, + // dragleave is not required, but added for completeness: + dragleave: this._onDragLeave + }); + this._on(this.options.pasteZone, { + paste: this._onPaste + }); + } + if ($.support.fileInput) { + this._on(this.options.fileInput, { + change: this._onChange + }); + } }, - buildMediaUrl: function buildMediaUrl(url, thumbSize) { - return url + (url.indexOf('?') == -1 ? '?' : '&') + 'width=' + thumbSize + '&height=' + thumbSize; + _destroyEventHandlers: function _destroyEventHandlers() { + this._off(this.options.dropZone, 'dragenter dragleave dragover drop'); + this._off(this.options.pasteZone, 'paste'); + this._off(this.options.fileInput, 'change'); }, - getfontAwesomeClassNameForFileName: function getfontAwesomeClassNameForFilename(filename, thumbsize) { - return getClassNameForFilename(filename) + ' ' + thumbsize; - } - } -}); -// component -Vue.component('upload', { - template: '\ -
    \ - \ -

    {{ model.name }}

    \ -
    \ - \ - Error: {{ model.errorMessage }} \ -
    \ -
    \ - ', - props: { - model: Object, - uploadInputId: String - }, - mounted: function mounted() { - var _self$uploadInputId; - var self = this; - var uploadInput = document.getElementById((_self$uploadInputId = self.uploadInputId) !== null && _self$uploadInputId !== void 0 ? _self$uploadInputId : 'fileupload'); - $(uploadInput).bind('fileuploadprogress', function (e, data) { - if (data.files[0].name !== self.model.name) { - return; + _destroy: function _destroy() { + this._destroyEventHandlers(); + }, + _setOption: function _setOption(key, value) { + var reinit = $.inArray(key, this._specialOptions) !== -1; + if (reinit) { + this._destroyEventHandlers(); } - self.model.percentage = parseInt(data.loaded / data.total * 100, 10); - }); - $(uploadInput).bind('fileuploaddone', function (e, data) { - if (data.files[0].name !== self.model.name) { - return; + this._super(key, value); + if (reinit) { + this._initSpecialOptions(); + this._initEventHandlers(); } - if (data.result.files[0].error) { - self.handleFailure(data.files[0].name, data.result.files[0].error); - } else { - bus.$emit('removalRequest', self.model); + }, + _initSpecialOptions: function _initSpecialOptions() { + var options = this.options; + if (options.fileInput === undefined) { + options.fileInput = this.element.is('input[type="file"]') ? this.element : this.element.find('input[type="file"]'); + } else if (!(options.fileInput instanceof $)) { + options.fileInput = $(options.fileInput); } - }); - $(uploadInput).bind('fileuploadfail', function (e, data) { - if (data.files[0].name !== self.model.name) { - return; + if (!(options.dropZone instanceof $)) { + options.dropZone = $(options.dropZone); } - self.handleFailure(data.files[0].name, $('#t-error').val()); - }); - }, - methods: { - handleFailure: function handleFailure(fileName, message) { - if (fileName !== this.model.name) { - return; + if (!(options.pasteZone instanceof $)) { + options.pasteZone = $(options.pasteZone); } - this.model.errorMessage = message; - bus.$emit('ErrorOnUpload', this.model); }, - dismissWarning: function dismissWarning() { - bus.$emit('removalRequest', this.model); - } - } -}); -// component -Vue.component('uploadList', { - template: '\ -
    \ -
    \ - {{ T.uploads }} \ - (Pending: {{ pendingCount }}) \ - ( {{ T.errors }}: {{ errorCount }} / {{ T.clearErrors }} ) \ -
    \ -
    \ - \ -
    \ -
    \ - \ -
    \ -
    \ -
    \ -
    \ -
    \ - \ -
    \ -
    \ -
    \ - ', - data: function data() { - return { - files: [], - T: {}, - expanded: false, - pendingCount: 0, - errorCount: 0 - }; - }, - props: { - uploadInputId: String - }, - created: function created() { - var self = this; - // retrieving localized strings from view - self.T.uploads = $('#t-uploads').val(); - self.T.errors = $('#t-errors').val(); - self.T.clearErrors = $('#t-clear-errors').val(); - }, - computed: { - fileCount: function fileCount() { - return this.files.length; - } - }, - mounted: function mounted() { - var _self$uploadInputId; - var self = this; - var uploadInput = document.getElementById((_self$uploadInputId = self.uploadInputId) !== null && _self$uploadInputId !== void 0 ? _self$uploadInputId : 'fileupload'); - $(uploadInput).bind('fileuploadadd', function (e, data) { - if (!data.files) { + _getRegExp: function _getRegExp(str) { + var parts = str.split('/'), + modifiers = parts.pop(); + parts.shift(); + return new RegExp(parts.join('/'), modifiers); + }, + _isRegExpOption: function _isRegExpOption(key, value) { + return key !== 'url' && $.type(value) === 'string' && /^\/.*\/[igm]{0,3}$/.test(value); + }, + _initDataAttributes: function _initDataAttributes() { + var that = this, + options = this.options, + data = this.element.data(); + // Initialize options set via HTML5 data-attributes: + $.each(this.element[0].attributes, function (index, attr) { + var key = attr.name.toLowerCase(), + value; + if (/^data-/.test(key)) { + // Convert hyphen-ated key to camelCase: + key = key.slice(5).replace(/-[a-z]/g, function (str) { + return str.charAt(1).toUpperCase(); + }); + value = data[key]; + if (that._isRegExpOption(key, value)) { + value = that._getRegExp(value); + } + options[key] = value; + } + }); + }, + _create: function _create() { + this._initDataAttributes(); + this._initSpecialOptions(); + this._slots = []; + this._sequence = this._getXHRPromise(true); + this._sending = this._active = 0; + this._initProgressObject(this); + this._initEventHandlers(); + }, + // This method is exposed to the widget API and allows to query + // the number of active uploads: + active: function active() { + return this._active; + }, + // This method is exposed to the widget API and allows to query + // the widget upload progress. + // It returns an object with loaded, total and bitrate properties + // for the running uploads: + progress: function progress() { + return this._progress; + }, + // This method is exposed to the widget API and allows adding files + // using the fileupload API. The data parameter accepts an object which + // must have a files property and can contain additional options: + // .fileupload('add', {files: filesList}); + add: function add(data) { + var that = this; + if (!data || this.options.disabled) { return; } - data.files.forEach(function (newFile) { - var alreadyInList = self.files.some(function (f) { - return f.name == newFile.name; + if (data.fileInput && !data.files) { + this._getFileInputFiles(data.fileInput).always(function (files) { + data.files = files; + that._onAdd(null, data); }); - if (!alreadyInList) { - self.files.push({ - name: newFile.name, - percentage: 0, - errorMessage: '' + } else { + data.files = $.makeArray(data.files); + this._onAdd(null, data); + } + }, + // This method is exposed to the widget API and allows sending files + // using the fileupload API. The data parameter accepts an object which + // must have a files or fileInput property and can contain additional options: + // .fileupload('send', {files: filesList}); + // The method returns a Promise object for the file upload call. + send: function send(data) { + if (data && !this.options.disabled) { + if (data.fileInput && !data.files) { + var that = this, + dfd = $.Deferred(), + promise = dfd.promise(), + jqXHR, + aborted; + promise.abort = function () { + aborted = true; + if (jqXHR) { + return jqXHR.abort(); + } + dfd.reject(null, 'abort', 'abort'); + return promise; + }; + this._getFileInputFiles(data.fileInput).always(function (files) { + if (aborted) { + return; + } + if (!files.length) { + dfd.reject(); + return; + } + data.files = files; + jqXHR = that._onSend(null, data); + jqXHR.then(function (result, textStatus, jqXHR) { + dfd.resolve(result, textStatus, jqXHR); + }, function (jqXHR, textStatus, errorThrown) { + dfd.reject(jqXHR, textStatus, errorThrown); + }); }); - } else { - console.error('A file with the same name is already on the queue:' + newFile.name); + return this._enhancePromise(promise); } - }); - }); - bus.$on('removalRequest', function (fileUpload) { - self.files.forEach(function (item, index, array) { - if (item.name == fileUpload.name) { - array.splice(index, 1); + data.files = $.makeArray(data.files); + if (data.files.length) { + return this._onSend(null, data); } - }); - }); - bus.$on('ErrorOnUpload', function (fileUpload) { - self.updateCount(); - }); - }, - methods: { - updateCount: function updateCount() { - this.errorCount = this.files.filter(function (item) { - return item.errorMessage != ''; - }).length; - this.pendingCount = this.files.length - this.errorCount; - if (this.files.length < 1) { - this.expanded = false; } - }, - clearErrors: function clearErrors() { - this.files = this.files.filter(function (item) { - return item.errorMessage == ''; - }); - } - }, - watch: { - files: function files() { - this.updateCount(); + return this._getXHRPromise(false, data && data.context); } - } + }); }); -//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImpxdWVyeS5maWxldXBsb2FkLmpzIiwianF1ZXJ5LmlmcmFtZS10cmFuc3BvcnQuanMiLCJoZWxwZXJzLmpzIiwiTWVkaWFBcHAvYXBwLmpzIiwiTWVkaWFBcHAvZmlsZXVwbG9hZC5qcyIsIk1lZGlhQXBwL2ZvbGRlckNvbXBvbmVudC5qcyIsIk1lZGlhQXBwL2ZvbnQtYXdlc29tZS10aHVtYm5haWxzLmpzIiwiTWVkaWFBcHAvbWVkaWFJdGVtc0dyaWRDb21wb25lbnQuanMiLCJNZWRpYUFwcC9tZWRpYUl0ZW1zVGFibGVDb21wb25lbnQuanMiLCJNZWRpYUFwcC9wYWdlckNvbXBvbmVudC5qcyIsIk1lZGlhQXBwL3NvcnRJbmRpY2F0b3JDb21wb25lbnQuanMiLCJNZWRpYUZpZWxkL2F0dGFjaGVkTWVkaWFGaWVsZC5qcyIsIk1lZGlhRmllbGQvbWVkaWFmaWVsZC5qcyIsIk1lZGlhRmllbGQvbWVkaWFmaWVsZHNBcHBzQXJyYXkuanMiLCJNZWRpYUZpZWxkL21lZGlhRmllbGRUaHVtYnNDb250YWluZXIuanMiLCJTaGFyZWQvdXBsb2FkQ29tcG9uZW50LmpzIiwiU2hhcmVkL3VwbG9hZExpc3RDb21wb25lbnQuanMiXSwibmFtZXMiOlsiZmFjdG9yeSIsImRlZmluZSIsImFtZCIsImV4cG9ydHMiLCJfdHlwZW9mIiwicmVxdWlyZSIsIndpbmRvdyIsImpRdWVyeSIsIiQiLCJzdXBwb3J0IiwiZmlsZUlucHV0IiwiUmVnRXhwIiwidGVzdCIsIm5hdmlnYXRvciIsInVzZXJBZ2VudCIsInByb3AiLCJ4aHJGaWxlVXBsb2FkIiwiUHJvZ3Jlc3NFdmVudCIsIkZpbGVSZWFkZXIiLCJ4aHJGb3JtRGF0YUZpbGVVcGxvYWQiLCJGb3JtRGF0YSIsImJsb2JTbGljZSIsIkJsb2IiLCJwcm90b3R5cGUiLCJzbGljZSIsIndlYmtpdFNsaWNlIiwibW96U2xpY2UiLCJnZXREcmFnSGFuZGxlciIsInR5cGUiLCJpc0RyYWdPdmVyIiwiZSIsImRhdGFUcmFuc2ZlciIsIm9yaWdpbmFsRXZlbnQiLCJpbkFycmF5IiwidHlwZXMiLCJfdHJpZ2dlciIsIkV2ZW50IiwiZGVsZWdhdGVkRXZlbnQiLCJwcmV2ZW50RGVmYXVsdCIsImRyb3BFZmZlY3QiLCJ3aWRnZXQiLCJvcHRpb25zIiwiZHJvcFpvbmUiLCJkb2N1bWVudCIsInBhc3RlWm9uZSIsInVuZGVmaW5lZCIsInJlcGxhY2VGaWxlSW5wdXQiLCJwYXJhbU5hbWUiLCJzaW5nbGVGaWxlVXBsb2FkcyIsImxpbWl0TXVsdGlGaWxlVXBsb2FkcyIsImxpbWl0TXVsdGlGaWxlVXBsb2FkU2l6ZSIsImxpbWl0TXVsdGlGaWxlVXBsb2FkU2l6ZU92ZXJoZWFkIiwic2VxdWVudGlhbFVwbG9hZHMiLCJsaW1pdENvbmN1cnJlbnRVcGxvYWRzIiwiZm9yY2VJZnJhbWVUcmFuc3BvcnQiLCJyZWRpcmVjdCIsInJlZGlyZWN0UGFyYW1OYW1lIiwicG9zdE1lc3NhZ2UiLCJtdWx0aXBhcnQiLCJtYXhDaHVua1NpemUiLCJ1cGxvYWRlZEJ5dGVzIiwicmVjYWxjdWxhdGVQcm9ncmVzcyIsInByb2dyZXNzSW50ZXJ2YWwiLCJiaXRyYXRlSW50ZXJ2YWwiLCJhdXRvVXBsb2FkIiwidW5pcXVlRmlsZW5hbWVzIiwibWVzc2FnZXMiLCJpMThuIiwibWVzc2FnZSIsImNvbnRleHQiLCJ0b1N0cmluZyIsImVhY2giLCJrZXkiLCJ2YWx1ZSIsInJlcGxhY2UiLCJmb3JtRGF0YSIsImZvcm0iLCJzZXJpYWxpemVBcnJheSIsImFkZCIsImRhdGEiLCJpc0RlZmF1bHRQcmV2ZW50ZWQiLCJmaWxldXBsb2FkIiwicHJvY2VzcyIsImRvbmUiLCJzdWJtaXQiLCJwcm9jZXNzRGF0YSIsImNvbnRlbnRUeXBlIiwiY2FjaGUiLCJ0aW1lb3V0IiwiX3Byb21pc2VQaXBlIiwicGFydHMiLCJmbiIsImpxdWVyeSIsInNwbGl0IiwiTnVtYmVyIiwiX3NwZWNpYWxPcHRpb25zIiwiX2Jsb2JTbGljZSIsImFwcGx5IiwiYXJndW1lbnRzIiwiX0JpdHJhdGVUaW1lciIsInRpbWVzdGFtcCIsIkRhdGUiLCJub3ciLCJnZXRUaW1lIiwibG9hZGVkIiwiYml0cmF0ZSIsImdldEJpdHJhdGUiLCJpbnRlcnZhbCIsInRpbWVEaWZmIiwiX2lzWEhSVXBsb2FkIiwiX2dldEZvcm1EYXRhIiwiaXNBcnJheSIsIm5hbWUiLCJwdXNoIiwiX2dldFRvdGFsIiwiZmlsZXMiLCJ0b3RhbCIsImluZGV4IiwiZmlsZSIsInNpemUiLCJfaW5pdFByb2dyZXNzT2JqZWN0Iiwib2JqIiwicHJvZ3Jlc3MiLCJfcHJvZ3Jlc3MiLCJleHRlbmQiLCJfaW5pdFJlc3BvbnNlT2JqZWN0IiwiX3Jlc3BvbnNlIiwiT2JqZWN0IiwiaGFzT3duUHJvcGVydHkiLCJjYWxsIiwiX29uUHJvZ3Jlc3MiLCJsZW5ndGhDb21wdXRhYmxlIiwiX3RpbWUiLCJNYXRoIiwiZmxvb3IiLCJjaHVua1NpemUiLCJfYml0cmF0ZVRpbWVyIiwiX2luaXRQcm9ncmVzc0xpc3RlbmVyIiwidGhhdCIsInhociIsImFqYXhTZXR0aW5ncyIsInVwbG9hZCIsIm9uIiwib2UiLCJfZGVpbml0UHJvZ3Jlc3NMaXN0ZW5lciIsIm9mZiIsIl9pc0luc3RhbmNlT2YiLCJfZ2V0VW5pcXVlRmlsZW5hbWUiLCJtYXAiLCJTdHJpbmciLCJfIiwicDEiLCJwMiIsImV4dCIsIl9pbml0WEhSRGF0YSIsImhlYWRlcnMiLCJjb250ZW50UmFuZ2UiLCJibG9iIiwiZW5jb2RlVVJJIiwidXBsb2FkTmFtZSIsImZpZWxkIiwiYXBwZW5kIiwiZmlsZU5hbWUiLCJfaW5pdElmcmFtZVNldHRpbmdzIiwidGFyZ2V0SG9zdCIsInVybCIsImRhdGFUeXBlIiwibG9jYXRpb24iLCJob3N0IiwiX2luaXREYXRhU2V0dGluZ3MiLCJfY2h1bmtlZFVwbG9hZCIsIl9nZXRQYXJhbU5hbWUiLCJpbnB1dCIsImkiLCJsZW5ndGgiLCJfaW5pdEZvcm1TZXR0aW5ncyIsImhyZWYiLCJ0b1VwcGVyQ2FzZSIsImZvcm1BY2NlcHRDaGFyc2V0IiwiYXR0ciIsIl9nZXRBSkFYU2V0dGluZ3MiLCJfZ2V0RGVmZXJyZWRTdGF0ZSIsImRlZmVycmVkIiwic3RhdGUiLCJpc1Jlc29sdmVkIiwiaXNSZWplY3RlZCIsIl9lbmhhbmNlUHJvbWlzZSIsInByb21pc2UiLCJzdWNjZXNzIiwiZXJyb3IiLCJmYWlsIiwiY29tcGxldGUiLCJhbHdheXMiLCJfZ2V0WEhSUHJvbWlzZSIsInJlc29sdmVPclJlamVjdCIsImFyZ3MiLCJkZmQiLCJEZWZlcnJlZCIsInJlc29sdmVXaXRoIiwicmVqZWN0V2l0aCIsImFib3J0IiwiX2FkZENvbnZlbmllbmNlTWV0aG9kcyIsImdldFByb21pc2UiLCJyZXNvbHZlRnVuYyIsInJlamVjdEZ1bmMiLCJfcHJvY2Vzc1F1ZXVlIiwiZXJyb3JUaHJvd24iLCJqcVhIUiIsIl9vblNlbmQiLCJwcm9jZXNzaW5nIiwicmVzcG9uc2UiLCJfZ2V0VXBsb2FkZWRCeXRlcyIsInJhbmdlIiwiZ2V0UmVzcG9uc2VIZWFkZXIiLCJ1cHBlckJ5dGVzUG9zIiwicGFyc2VJbnQiLCJ0ZXN0T25seSIsImZzIiwidWIiLCJtY3MiLCJvIiwiY3VycmVudExvYWRlZCIsImFqYXgiLCJyZXN1bHQiLCJ0ZXh0U3RhdHVzIiwiX2JlZm9yZVNlbmQiLCJfYWN0aXZlIiwiX29uRG9uZSIsIl9vbkZhaWwiLCJfb25BbHdheXMiLCJqcVhIUm9yUmVzdWx0IiwianFYSFJvckVycm9yIiwiYWJvcnRlZCIsInNsb3QiLCJwaXBlIiwic2VuZCIsIl9zZW5kaW5nIiwibmV4dFNsb3QiLCJfc2xvdHMiLCJzaGlmdCIsInJlc29sdmUiLCJfc2VxdWVuY2UiLCJfb25BZGQiLCJmaWxlc0xlbmd0aCIsImxpbWl0IiwibGltaXRTaXplIiwib3ZlcmhlYWQiLCJiYXRjaFNpemUiLCJwYXJhbU5hbWVTZXQiLCJwYXJhbU5hbWVTbGljZSIsImZpbGVTZXQiLCJqIiwib3JpZ2luYWxGaWxlcyIsImVsZW1lbnQiLCJuZXdEYXRhIiwiX3JlcGxhY2VGaWxlSW5wdXQiLCJpbnB1dENsb25lIiwiY2xvbmUiLCJyZXN0b3JlRm9jdXMiLCJpcyIsImFjdGl2ZUVsZW1lbnQiLCJmaWxlSW5wdXRDbG9uZSIsInJlc2V0IiwiYWZ0ZXIiLCJkZXRhY2giLCJ0cmlnZ2VyIiwiY2xlYW5EYXRhIiwiZWwiLCJfaGFuZGxlRmlsZVRyZWVFbnRyeSIsImVudHJ5IiwicGF0aCIsImVudHJpZXMiLCJkaXJSZWFkZXIiLCJlcnJvckhhbmRsZXIiLCJzdWNjZXNzSGFuZGxlciIsIl9oYW5kbGVGaWxlVHJlZUVudHJpZXMiLCJyZWFkRW50cmllcyIsInJlc3VsdHMiLCJjb25jYXQiLCJpc0ZpbGUiLCJfZmlsZSIsInJlbGF0aXZlUGF0aCIsImlzRGlyZWN0b3J5IiwiY3JlYXRlUmVhZGVyIiwid2hlbiIsIkFycmF5IiwiX2dldERyb3BwZWRGaWxlcyIsIml0ZW1zIiwid2Via2l0R2V0QXNFbnRyeSIsImdldEFzRW50cnkiLCJpdGVtIiwiZ2V0QXNGaWxlIiwibWFrZUFycmF5IiwiX2dldFNpbmdsZUZpbGVJbnB1dEZpbGVzIiwiZmlsZVNpemUiLCJfZ2V0RmlsZUlucHV0RmlsZXMiLCJfb25DaGFuZ2UiLCJ0YXJnZXQiLCJfb25QYXN0ZSIsImNsaXBib2FyZERhdGEiLCJfb25Ecm9wIiwiX29uRHJhZ092ZXIiLCJfb25EcmFnRW50ZXIiLCJfb25EcmFnTGVhdmUiLCJfaW5pdEV2ZW50SGFuZGxlcnMiLCJfb24iLCJkcmFnb3ZlciIsImRyb3AiLCJkcmFnZW50ZXIiLCJkcmFnbGVhdmUiLCJwYXN0ZSIsImNoYW5nZSIsIl9kZXN0cm95RXZlbnRIYW5kbGVycyIsIl9vZmYiLCJfZGVzdHJveSIsIl9zZXRPcHRpb24iLCJyZWluaXQiLCJfc3VwZXIiLCJfaW5pdFNwZWNpYWxPcHRpb25zIiwiZmluZCIsIl9nZXRSZWdFeHAiLCJzdHIiLCJtb2RpZmllcnMiLCJwb3AiLCJqb2luIiwiX2lzUmVnRXhwT3B0aW9uIiwiX2luaXREYXRhQXR0cmlidXRlcyIsImF0dHJpYnV0ZXMiLCJ0b0xvd2VyQ2FzZSIsImNoYXJBdCIsIl9jcmVhdGUiLCJhY3RpdmUiLCJkaXNhYmxlZCIsInJlamVjdCIsInRoZW4iLCJjb3VudGVyIiwianNvbkFQSSIsImpzb25QYXJzZSIsIkpTT04iLCJhamF4VHJhbnNwb3J0IiwiYXN5bmMiLCJpbml0aWFsSWZyYW1lU3JjIiwiaWZyYW1lIiwiYWRkUGFyYW1DaGFyIiwiY29tcGxldGVDYWxsYmFjayIsImZpbGVJbnB1dENsb25lcyIsInBhcmFtTmFtZXMiLCJjb250ZW50cyIsImZpcnN0Q2hpbGQiLCJFcnJvciIsImFwcGVuZFRvIiwic2V0VGltZW91dCIsInJlbW92ZSIsInZhbCIsInJlbW92ZUF0dHIiLCJyZXBsYWNlV2l0aCIsImJvZHkiLCJhamF4U2V0dXAiLCJjb252ZXJ0ZXJzIiwiaWZyYW1lVGV4dCIsInRleHQiLCJpZnJhbWVKc29uIiwiaWZyYW1lSHRtbCIsImh0bWwiLCJpZnJhbWVYbWwiLCJ4bWxEb2MiLCJpc1hNTERvYyIsInBhcnNlWE1MIiwiWE1MRG9jdW1lbnQiLCJ4bWwiLCJpZnJhbWVTY3JpcHQiLCJnbG9iYWxFdmFsIiwicmFuZG9tVVVJRCIsImNyeXB0byIsImMiLCJnZXRSYW5kb21WYWx1ZXMiLCJVaW50OEFycmF5IiwiaW5pdGlhbGl6ZWQiLCJtZWRpYUFwcCIsImJ1cyIsIlZ1ZSIsImluaXRpYWxpemVNZWRpYUFwcGxpY2F0aW9uIiwiZGlzcGxheU1lZGlhQXBwbGljYXRpb24iLCJtZWRpYUFwcGxpY2F0aW9uVXJsIiwicGF0aEJhc2UiLCJjb25zb2xlIiwibWV0aG9kIiwiY29udGVudCIsInJvb3QiLCJmb2xkZXIiLCJzZWxlY3RlZEZvbGRlciIsIm1lZGlhSXRlbXMiLCJzZWxlY3RlZE1lZGlhcyIsImVycm9ycyIsImRyYWdEcm9wVGh1bWJuYWlsIiwiSW1hZ2UiLCJzbWFsbFRodW1icyIsImdyaWRWaWV3IiwibWVkaWFGaWx0ZXIiLCJzb3J0QnkiLCJzb3J0QXNjIiwiaXRlbXNJblBhZ2UiLCJjcmVhdGVkIiwic2VsZiIsInNyYyIsIiRvbiIsInNlbGVjdFJvb3QiLCJzZWxlY3RlZCIsImVycm9ySW5mbyIsImxvYWRGb2xkZXIiLCJuZXdOYW1lIiwibmV3UGF0aCIsIm9sZFBhdGgiLCJuZXdVcmwiLCJtZWRpYSIsImZpbHRlciIsIm1lZGlhUGF0aCIsImNyZWF0ZUZvbGRlciIsImRlbGV0ZUZvbGRlciIsIm5ld1NvcnQiLCJjaGFuZ2VTb3J0IiwidG9nZ2xlU2VsZWN0aW9uT2ZNZWRpYSIsInJlbmFtZU1lZGlhIiwiZGVsZXRlTWVkaWFJdGVtIiwiaGFuZGxlRHJhZ1N0YXJ0IiwibG9jYWxTdG9yYWdlIiwiZ2V0SXRlbSIsImN1cnJlbnRQcmVmcyIsInBhcnNlIiwiY29tcHV0ZWQiLCJpc0hvbWUiLCJwYXJlbnRzIiwicCIsInBhcmVudEZvbGRlciIsInVuc2hpZnQiLCJwYXJlbnQiLCJmaWx0ZXJlZE1lZGlhSXRlbXMiLCJmaWx0ZXJlZCIsImluZGV4T2YiLCJzb3J0IiwiYSIsImIiLCJtaW1lIiwibG9jYWxlQ29tcGFyZSIsImxhc3RNb2RpZnkiLCJoaWRkZW5Db3VudCIsInRodW1iU2l6ZSIsImdldCIsInNldCIsIm5ld1ByZWZzIiwid2F0Y2giLCJzZXRJdGVtIiwic3RyaW5naWZ5IiwibmV3Rm9sZGVyIiwibW91bnRlZCIsIiRyZWZzIiwicm9vdEZvbGRlciIsInRvZ2dsZSIsIm1ldGhvZHMiLCJ1cGxvYWRVcmwiLCJ1cmxWYWx1ZSIsImVuY29kZVVSSUNvbXBvbmVudCIsIm1lZGlhVXJsIiwibG9nIiwiZm9yRWFjaCIsIm9wZW4iLCJzZWxlY3RBbGwiLCJ1blNlbGVjdEFsbCIsImludmVydFNlbGVjdGlvbiIsInRlbXAiLCJpc01lZGlhU2VsZWN0ZWQiLCJzcGxpY2UiLCJzb21lIiwiYXJyYXkiLCJtb2RlbCIsImNvbmZpcm1EaWFsb2ciLCJfb2JqZWN0U3ByZWFkIiwiY2FsbGJhY2siLCJyZXNwIiwiX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4iLCIkZW1pdCIsInJlc3BvbnNlVGV4dCIsImVtcHR5IiwibW9kYWwiLCJib290c3RyYXAiLCJNb2RhbCIsImdldE9yQ3JlYXRlSW5zdGFuY2UiLCJzaG93IiwiZm9jdXMiLCJzZWxlY3RBbmREZWxldGVNZWRpYSIsImRlbGV0ZU1lZGlhIiwiZGVsZXRlTWVkaWFMaXN0IiwibWVkaWFMaXN0IiwicGF0aHMiLCJtZWRpYU5hbWVzIiwic2V0RGF0YSIsInNldERyYWdJbWFnZSIsImVmZmVjdEFsbG93ZWQiLCJoYW5kbGVTY3JvbGxXaGlsZURyYWciLCJjbGllbnRZIiwic2Nyb2xsQnkiLCJpbm5lckhlaWdodCIsImtleXByZXNzIiwid2hpY2giLCJjbGljayIsImhpZGUiLCJlcnJvck1lc3NhZ2UiLCJvbGROYW1lIiwiY3VycmVudEZvbGRlciIsImdldEVsZW1lbnRCeUlkIiwic3R5bGUiLCJkaXNwbGF5IiwiY2h1bmtlZEZpbGVVcGxvYWRJZCIsImFudGlGb3JnZXJ5VG9rZW4iLCJGaWxlIiwibGFzdE1vZGlmaWVkIiwiYmluZCIsImR0IiwiY29udGFpbnMiLCJkcm9wWm9uZVRpbWVvdXQiLCJjbGVhclRpbWVvdXQiLCJhZGRDbGFzcyIsImhvdmVyZWREcm9wWm9uZSIsImNsb3Nlc3QiLCJyZW1vdmVDbGFzcyIsImNvbXBvbmVudCIsInRlbXBsYXRlIiwiZGlyIiwicHJvcHMiLCJzZWxlY3RlZEluTWVkaWFBcHAiLCJsZXZlbCIsImNoaWxkcmVuIiwiaXNIb3ZlcmVkIiwicGFkZGluZyIsImlzU2VsZWN0ZWQiLCJpc1Jvb3QiLCJpc0FuY2VzdG9yT2ZTZWxlY3RlZEZvbGRlciIsImxvYWRDaGlsZHJlbiIsInNlbGVjdCIsImVtdHB5IiwiaGFuZGxlRHJhZ092ZXIiLCJoYW5kbGVEcmFnTGVhdmUiLCJtb3ZlTWVkaWFUb0ZvbGRlciIsImdldERhdGEiLCJzb3VyY2VGb2xkZXIiLCJ0YXJnZXRGb2xkZXIiLCJhbGVydCIsImZhSWNvbnMiLCJpbWFnZSIsInBkZiIsIndvcmQiLCJwb3dlcnBvaW50IiwiZXhjZWwiLCJjc3YiLCJhdWRpbyIsInZpZGVvIiwiYXJjaGl2ZSIsImNvZGUiLCJmYVRodW1ibmFpbHMiLCJnaWYiLCJqcGVnIiwianBnIiwicG5nIiwiZG9jIiwiZG9jeCIsInBwdCIsInBwdHgiLCJ4bHMiLCJ4bHN4IiwiYWFjIiwibXAzIiwib2dnIiwiYXZpIiwiZmx2IiwibWt2IiwibXA0Iiwid2VibSIsImd6IiwiemlwIiwiY3NzIiwianMiLCJ0eHQiLCJnZXRDbGFzc05hbWVGb3JFeHRlbnNpb24iLCJleHRlbnNpb24iLCJnZXRFeHRlbnNpb25Gb3JGaWxlbmFtZSIsImZpbGVuYW1lIiwibGFzdEluZGV4T2YiLCJnZXRDbGFzc05hbWVGb3JGaWxlbmFtZSIsIlQiLCJlZGl0QnV0dG9uIiwiZGVsZXRlQnV0dG9uIiwiYnVpbGRNZWRpYVVybCIsImRyYWdTdGFydCIsImdldGZvbnRBd2Vzb21lQ2xhc3NOYW1lRm9yRmlsZU5hbWUiLCJnZXRmb250QXdlc29tZUNsYXNzTmFtZUZvckZpbGVuYW1lIiwidGh1bWJzaXplIiwiQm9vbGVhbiIsImltYWdlSGVhZGVyIiwibmFtZUhlYWRlciIsImxhc3RNb2RpZnlIZWFkZXIiLCJzaXplSGVhZGVyIiwidHlwZUhlYWRlciIsInZpZXdCdXR0b24iLCJwcmludERhdGVUaW1lIiwiZGF0ZW1pbGxpcyIsImQiLCJ0b0xvY2FsZVN0cmluZyIsInNvdXJjZUl0ZW1zIiwicGFnZVNpemUiLCJwYWdlU2l6ZU9wdGlvbnMiLCJjdXJyZW50IiwicGFnZXJGaXJzdEJ1dHRvbiIsInBhZ2VyUHJldmlvdXNCdXR0b24iLCJwYWdlck5leHRCdXR0b24iLCJwYWdlckxhc3RCdXR0b24iLCJwYWdlclBhZ2VTaXplTGFiZWwiLCJwYWdlclBhZ2VMYWJlbCIsInBhZ2VyVG90YWxMYWJlbCIsIm5leHQiLCJwcmV2aW91cyIsImdvRmlyc3QiLCJnb0xhc3QiLCJ0b3RhbFBhZ2VzIiwiZ29UbyIsInRhcmdldFBhZ2UiLCJwYWdlcyIsImNlaWwiLCJpc0xhc3RQYWdlIiwiaXNGaXJzdFBhZ2UiLCJjYW5Eb05leHQiLCJjYW5Eb1ByZXYiLCJjYW5Eb0ZpcnN0IiwiY2FuRG9MYXN0IiwiaXRlbXNJbkN1cnJlbnRQYWdlIiwic3RhcnQiLCJlbmQiLCJwYWdlTGlua3MiLCJsaW5rcyIsImJlZm9yZUN1cnJlbnQiLCJiZWZvcmVCZWZvcmVDdXJyZW50IiwiYWZ0ZXJDdXJyZW50IiwiYWZ0ZXJBZnRlckN1cnJlbnQiLCJjb2xuYW1lIiwic2VsZWN0ZWRjb2xuYW1lIiwiYXNjIiwiaXNBY3RpdmUiLCJpbml0aWFsaXplQXR0YWNoZWRNZWRpYUZpZWxkIiwiaWRPZlVwbG9hZEJ1dHRvbiIsInVwbG9hZEFjdGlvbiIsIm1lZGlhSXRlbVVybCIsImFsbG93TXVsdGlwbGUiLCJhbGxvd01lZGlhVGV4dCIsImFsbG93QW5jaG9ycyIsInRlbXBVcGxvYWRGb2xkZXIiLCJtYXhVcGxvYWRDaHVua1NpemUiLCJpbml0aWFsUGF0aHMiLCJtZWRpYUZpZWxkRWRpdG9yIiwiaWRwcmVmaXgiLCJtZWRpYUZpZWxkQXBwIiwibWVkaWFGaWVsZEFwcHMiLCJzZWxlY3RlZE1lZGlhIiwiaWRQcmVmaXgiLCJiYWNrdXBNZWRpYVRleHQiLCJiYWNrdXBBbmNob3IiLCJtZWRpYVRleHRtb2RhbCIsImFuY2hvcmluZ01vZGFsIiwibWVkaWFQYXRocyIsIngiLCJpc1JlbW92ZWQiLCJpc05ldyIsIm1lZGlhVGV4dCIsImFuY2hvciIsImF0dGFjaGVkRmlsZU5hbWUiLCJ2YWx1ZXMiLCJzaWduYWwiLCJ2dWVrZXkiLCJ5Iiwicm91bmQiLCJjYW5BZGRNZWRpYSIsIm5vblJlbW92ZWRNZWRpYUl0ZW1zIiwic2VsZWN0TWVkaWEiLCJzZWxlY3RvciIsImVkaXRvcklkIiwiY291bnQiLCJnZXRVbmlxdWVJZCIsIm5ld01lZGlhSXRlbXMiLCJlcnJvcm1zZyIsInIiLCJyYW5kb20iLCJ2IiwicmVtb3ZlU2VsZWN0ZWQiLCJldmVudCIsInJlbW92ZWQiLCJzaG93TWVkaWFUZXh0TW9kYWwiLCJtZWRpYVRleHRNb2RhbCIsImNhbmNlbE1lZGlhVGV4dE1vZGFsIiwic2hvd0FuY2hvck1vZGFsIiwiY2FuY2VsQW5jaG9yaW5nTW9kYWwiLCJyZXNldEFuY2hvciIsIm9uQW5jaG9yRHJvcCIsImFuY2hvckltYWdlIiwib2Zmc2V0WCIsImNsaWVudFdpZHRoIiwib2Zmc2V0WSIsImNsaWVudEhlaWdodCIsImFuY2hvckxlZnQiLCJtb2RhbEJvZHkiLCJvZmZzZXQiLCJwb3NpdGlvbiIsImFuY2hvclRvcCIsInNldEFuY2hvciIsImFkZE1lZGlhRmlsZXMiLCJkZWVwIiwiaGFuZGxlciIsImluaXRpYWxpemVNZWRpYUZpZWxkIiwibW9kYWxCb2R5RWxlbWVudCIsImFkZEV2ZW50TGlzdGVuZXIiLCJzaG93TW9kYWwiLCJhbmNob3JJY29uIiwicXVlcnlTZWxlY3RvciIsImlzSW50ZWdlciIsIm1lZGlhTm90Rm91bmQiLCJkaXNjYXJkV2FybmluZyIsIm5vSW1hZ2VzIiwiJHBhcmVudCIsInVwbG9hZElucHV0SWQiLCJfc2VsZiR1cGxvYWRJbnB1dElkIiwidXBsb2FkSW5wdXQiLCJwZXJjZW50YWdlIiwiaGFuZGxlRmFpbHVyZSIsImRpc21pc3NXYXJuaW5nIiwiZXhwYW5kZWQiLCJwZW5kaW5nQ291bnQiLCJlcnJvckNvdW50IiwidXBsb2FkcyIsImNsZWFyRXJyb3JzIiwiZmlsZUNvdW50IiwibmV3RmlsZSIsImFscmVhZHlJbkxpc3QiLCJmIiwiZmlsZVVwbG9hZCIsInVwZGF0ZUNvdW50Il0sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLENBQUMsVUFBVUEsT0FBTyxFQUFFO0VBQ2xCLFlBQVk7O0VBQ1osSUFBSSxPQUFPQyxNQUFNLEtBQUssVUFBVSxJQUFJQSxNQUFNLENBQUNDLEdBQUcsRUFBRTtJQUM5QztJQUNBRCxNQUFNLENBQUMsQ0FBQyxRQUFRLEVBQUUscUJBQXFCLENBQUMsRUFBRUQsT0FBTyxDQUFDO0VBQ3BELENBQUMsTUFBTSxJQUFJLFFBQU9HLE9BQU8saUNBQUFDLE9BQUEsQ0FBUEQsT0FBTyxPQUFLLFFBQVEsRUFBRTtJQUN0QztJ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LENBQUMyRCxNQUFNLEdBQUcsQ0FBQyxFQUFFO1FBQ3ZCLElBQUksQ0FBQzZpQixRQUFRLEdBQUcsS0FBSztNQUN6QjtJQUNKLENBQUM7SUFDREksV0FBVyxFQUFFLFNBQUFBLFlBQUEsRUFBWTtNQUNyQixJQUFJLENBQUM1bUIsS0FBSyxHQUFHLElBQUksQ0FBQ0EsS0FBSyxDQUFDNFMsTUFBTSxDQUFDLFVBQVU3SCxJQUFJLEVBQUU7UUFDM0MsT0FBT0EsSUFBSSxDQUFDd04sWUFBWSxJQUFJLEVBQUU7TUFDbEMsQ0FBQyxDQUFDO0lBQ047RUFDSixDQUFDO0VBQ0R4RCxLQUFLLEVBQUU7SUFDSC9VLEtBQUssRUFBRSxTQUFBQSxNQUFBLEVBQVk7TUFDZixJQUFJLENBQUNrbkIsV0FBVyxDQUFDLENBQUM7SUFDdEI7RUFDSjtBQUNKLENBQUMsQ0FBQyIsImZpbGUiOiJtZWRpYS5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBqUXVlcnkgRmlsZSBVcGxvYWQgUGx1Z2luXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9qUXVlcnktRmlsZS1VcGxvYWRcbiAqXG4gKiBDb3B5cmlnaHQgMjAxMCwgU2ViYXN0aWFuIFRzY2hhblxuICogaHR0cHM6Ly9ibHVlaW1wLm5ldFxuICpcbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZTpcbiAqIGh0dHBzOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvTUlUXG4gKi9cblxuLyogZ2xvYmFsIGRlZmluZSwgcmVxdWlyZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbmV3LWNhcCAqL1xuXG4oZnVuY3Rpb24gKGZhY3RvcnkpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuICBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgLy8gUmVnaXN0ZXIgYXMgYW4gYW5vbnltb3VzIEFNRCBtb2R1bGU6XG4gICAgZGVmaW5lKFsnanF1ZXJ5JywgJ2pxdWVyeS11aS91aS93aWRnZXQnXSwgZmFjdG9yeSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgLy8gTm9kZS9Db21tb25KUzpcbiAgICBmYWN0b3J5KHJlcXVpcmUoJ2pxdWVyeScpLCByZXF1aXJlKCcuL3ZlbmRvci9qcXVlcnkudWkud2lkZ2V0JykpO1xuICB9IGVsc2Uge1xuICAgIC8vIEJyb3dzZXIgZ2xvYmFsczpcbiAgICBmYWN0b3J5KHdpbmRvdy5qUXVlcnkpO1xuICB9XG59KShmdW5jdGlvbiAoJCkge1xuICAndXNlIHN0cmljdCc7XG5cbiAgLy8gRGV0ZWN0IGZpbGUgaW5wdXQgc3VwcG9ydCwgYmFzZWQgb25cbiAgLy8gaHR0cHM6Ly92aWxqYW1pcy5jb20vMjAxMi9maWxlLXVwbG9hZC1zdXBwb3J0LW9uLW1vYmlsZS9cbiAgJC5zdXBwb3J0LmZpbGVJbnB1dCA9ICEoXG4gICAgbmV3IFJlZ0V4cChcbiAgICAgIC8vIEhhbmRsZSBkZXZpY2VzIHdoaWNoIGdpdmUgZmFsc2UgcG9zaXRpdmVzIGZvciB0aGUgZmVhdHVyZSBkZXRlY3Rpb246XG4gICAgICAnKEFuZHJvaWQgKDFcXFxcLlswMTU2XXwyXFxcXC5bMDFdKSknICtcbiAgICAgICAgJ3woV2luZG93cyBQaG9uZSAoT1MgN3w4XFxcXC4wKSl8KFhCTFdQKXwoWnVuZVdQKXwoV1BEZXNrdG9wKScgK1xuICAgICAgICAnfCh3KGViKT9PU0Jyb3dzZXIpfCh3ZWJPUyknICtcbiAgICAgICAgJ3woS2luZGxlLygxXFxcXC4wfDJcXFxcLlswNV18M1xcXFwuMCkpJ1xuICAgICkudGVzdCh3aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudCkgfHxcbiAgICAvLyBGZWF0dXJlIGRldGVjdGlvbiBmb3IgYWxsIG90aGVyIGRldmljZXM6XG4gICAgJCgnPGlucHV0IHR5cGU9XCJmaWxlXCIvPicpLnByb3AoJ2Rpc2FibGVkJylcbiAgKTtcblxuICAvLyBUaGUgRmlsZVJlYWRlciBBUEkgaXMgbm90IGFjdHVhbGx5IHVzZWQsIGJ1dCB3b3JrcyBhcyBmZWF0dXJlIGRldGVjdGlvbixcbiAgLy8gYXMgc29tZSBTYWZhcmkgdmVyc2lvbnMgKDU/KSBzdXBwb3J0IFhIUiBmaWxlIHVwbG9hZHMgdmlhIHRoZSBGb3JtRGF0YSBBUEksXG4gIC8vIGJ1dCBub3Qgbm9uLW11bHRpcGFydCBYSFIgZmlsZSB1cGxvYWRzLlxuICAvLyB3aW5kb3cuWE1MSHR0cFJlcXVlc3RVcGxvYWQgaXMgbm90IGF2YWlsYWJsZSBvbiBJRTEwLCBzbyB3ZSBjaGVjayBmb3JcbiAgLy8gd2luZG93LlByb2dyZXNzRXZlbnQgaW5zdGVhZCB0byBkZXRlY3QgWEhSMiBmaWxlIHVwbG9hZCBjYXBhYmlsaXR5OlxuICAkLnN1cHBvcnQueGhyRmlsZVVwbG9hZCA9ICEhKHdpbmRvdy5Qcm9ncmVzc0V2ZW50ICYmIHdpbmRvdy5GaWxlUmVhZGVyKTtcbiAgJC5zdXBwb3J0LnhockZvcm1EYXRhRmlsZVVwbG9hZCA9ICEhd2luZG93LkZvcm1EYXRhO1xuXG4gIC8vIERldGVjdCBzdXBwb3J0IGZvciBCbG9iIHNsaWNpbmcgKHJlcXVpcmVkIGZvciBjaHVua2VkIHVwbG9hZHMpOlxuICAkLnN1cHBvcnQuYmxvYlNsaWNlID1cbiAgICB3aW5kb3cuQmxvYiAmJlxuICAgIChCbG9iLnByb3RvdHlwZS5zbGljZSB8fFxuICAgICAgQmxvYi5wcm90b3R5cGUud2Via2l0U2xpY2UgfHxcbiAgICAgIEJsb2IucHJvdG90eXBlLm1velNsaWNlKTtcblxuICAvKipcbiAgICogSGVscGVyIGZ1bmN0aW9uIHRvIGNyZWF0ZSBkcmFnIGhhbmRsZXJzIGZvciBkcmFnb3Zlci9kcmFnZW50ZXIvZHJhZ2xlYXZlXG4gICAqXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0eXBlIEV2ZW50IHR5cGVcbiAgICogQHJldHVybnMge0Z1bmN0aW9ufSBEcmFnIGhhbmRsZXJcbiAgICovXG4gIGZ1bmN0aW9uIGdldERyYWdIYW5kbGVyKHR5cGUpIHtcbiAgICB2YXIgaXNEcmFnT3ZlciA9IHR5cGUgPT09ICdkcmFnb3Zlcic7XG4gICAgcmV0dXJuIGZ1bmN0aW9uIChlKSB7XG4gICAgICBlLmRhdGFUcmFuc2ZlciA9IGUub3JpZ2luYWxFdmVudCAmJiBlLm9yaWdpbmFsRXZlbnQuZGF0YVRyYW5zZmVyO1xuICAgICAgdmFyIGRhdGFUcmFuc2ZlciA9IGUuZGF0YVRyYW5zZmVyO1xuICAgICAgaWYgKFxuICAgICAgICBkYXRhVHJhbnNmZXIgJiZcbiAgICAgICAgJC5pbkFycmF5KCdGaWxlcycsIGRhdGFUcmFuc2Zlci50eXBlcykgIT09IC0xICYmXG4gICAgICAgIHRoaXMuX3RyaWdnZXIodHlwZSwgJC5FdmVudCh0eXBlLCB7IGRlbGVnYXRlZEV2ZW50OiBlIH0pKSAhPT0gZmFsc2VcbiAgICAgICkge1xuICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGlmIChpc0RyYWdPdmVyKSB7XG4gICAgICAgICAgZGF0YVRyYW5zZmVyLmRyb3BFZmZlY3QgPSAnY29weSc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgLy8gVGhlIGZpbGV1cGxvYWQgd2lkZ2V0IGxpc3RlbnMgZm9yIGNoYW5nZSBldmVudHMgb24gZmlsZSBpbnB1dCBmaWVsZHMgZGVmaW5lZFxuICAvLyB2aWEgZmlsZUlucHV0IHNldHRpbmcgYW5kIHBhc3RlIG9yIGRyb3AgZXZlbnRzIG9mIHRoZSBnaXZlbiBkcm9wWm9uZS5cbiAgLy8gSW4gYWRkaXRpb24gdG8gdGhlIGRlZmF1bHQgalF1ZXJ5IFdpZGdldCBtZXRob2RzLCB0aGUgZmlsZXVwbG9hZCB3aWRnZXRcbiAgLy8gZXhwb3NlcyB0aGUgXCJhZGRcIiBhbmQgXCJzZW5kXCIgbWV0aG9kcywgdG8gYWRkIG9yIGRpcmVjdGx5IHNlbmQgZmlsZXMgdXNpbmdcbiAgLy8gdGhlIGZpbGV1cGxvYWQgQVBJLlxuICAvLyBCeSBkZWZhdWx0LCBmaWxlcyBhZGRlZCB2aWEgZmlsZSBpbnB1dCBzZWxlY3Rpb24sIHBhc3RlLCBkcmFnICYgZHJvcCBvclxuICAvLyBcImFkZFwiIG1ldGhvZCBhcmUgdXBsb2FkZWQgaW1tZWRpYXRlbHksIGJ1dCBpdCBpcyBwb3NzaWJsZSB0byBvdmVycmlkZVxuICAvLyB0aGUgXCJhZGRcIiBjYWxsYmFjayBvcHRpb24gdG8gcXVldWUgZmlsZSB1cGxvYWRzLlxuICAkLndpZGdldCgnYmx1ZWltcC5maWxldXBsb2FkJywge1xuICAgIG9wdGlvbnM6IHtcbiAgICAgIC8vIFRoZSBkcm9wIHRhcmdldCBlbGVtZW50KHMpLCBieSB0aGUgZGVmYXVsdCB0aGUgY29tcGxldGUgZG9jdW1lbnQuXG4gICAgICAvLyBTZXQgdG8gbnVsbCB0byBkaXNhYmxlIGRyYWcgJiBkcm9wIHN1cHBvcnQ6XG4gICAgICBkcm9wWm9uZTogJChkb2N1bWVudCksXG4gICAgICAvLyBUaGUgcGFzdGUgdGFyZ2V0IGVsZW1lbnQocyksIGJ5IHRoZSBkZWZhdWx0IHVuZGVmaW5lZC5cbiAgICAgIC8vIFNldCB0byBhIERPTSBub2RlIG9yIGpRdWVyeSBvYmplY3QgdG8gZW5hYmxlIGZpbGUgcGFzdGluZzpcbiAgICAgIHBhc3RlWm9uZTogdW5kZWZpbmVkLFxuICAgICAgLy8gVGhlIGZpbGUgaW5wdXQgZmllbGQocyksIHRoYXQgYXJlIGxpc3RlbmVkIHRvIGZvciBjaGFuZ2UgZXZlbnRzLlxuICAgICAgLy8gSWYgdW5kZWZpbmVkLCBpdCBpcyBzZXQgdG8gdGhlIGZpbGUgaW5wdXQgZmllbGRzIGluc2lkZVxuICAgICAgLy8gb2YgdGhlIHdpZGdldCBlbGVtZW50IG9uIHBsdWdpbiBpbml0aWFsaXphdGlvbi5cbiAgICAgIC8vIFNldCB0byBudWxsIHRvIGRpc2FibGUgdGhlIGNoYW5nZSBsaXN0ZW5lci5cbiAgICAgIGZpbGVJbnB1dDogdW5kZWZpbmVkLFxuICAgICAgLy8gQnkgZGVmYXVsdCwgdGhlIGZpbGUgaW5wdXQgZmllbGQgaXMgcmVwbGFjZWQgd2l0aCBhIGNsb25lIGFmdGVyXG4gICAgICAvLyBlYWNoIGlucHV0IGZpZWxkIGNoYW5nZSBldmVudC4gVGhpcyBpcyByZXF1aXJlZCBmb3IgaWZyYW1lIHRyYW5zcG9ydFxuICAgICAgLy8gcXVldWVzIGFuZCBhbGxvd3MgY2hhbmdlIGV2ZW50cyB0byBiZSBmaXJlZCBmb3IgdGhlIHNhbWUgZmlsZVxuICAgICAgLy8gc2VsZWN0aW9uLCBidXQgY2FuIGJlIGRpc2FibGVkIGJ5IHNldHRpbmcgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gZmFsc2U6XG4gICAgICByZXBsYWNlRmlsZUlucHV0OiB0cnVlLFxuICAgICAgLy8gVGhlIHBhcmFtZXRlciBuYW1lIGZvciB0aGUgZmlsZSBmb3JtIGRhdGEgKHRoZSByZXF1ZXN0IGFyZ3VtZW50IG5hbWUpLlxuICAgICAgLy8gSWYgdW5kZWZpbmVkIG9yIGVtcHR5LCB0aGUgbmFtZSBwcm9wZXJ0eSBvZiB0aGUgZmlsZSBpbnB1dCBmaWVsZCBpc1xuICAgICAgLy8gdXNlZCwgb3IgXCJmaWxlc1tdXCIgaWYgdGhlIGZpbGUgaW5wdXQgbmFtZSBwcm9wZXJ0eSBpcyBhbHNvIGVtcHR5LFxuICAgICAgLy8gY2FuIGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5IG9mIHN0cmluZ3M6XG4gICAgICBwYXJhbU5hbWU6IHVuZGVmaW5lZCxcbiAgICAgIC8vIEJ5IGRlZmF1bHQsIGVhY2ggZmlsZSBvZiBhIHNlbGVjdGlvbiBpcyB1cGxvYWRlZCB1c2luZyBhbiBpbmRpdmlkdWFsXG4gICAgICAvLyByZXF1ZXN0IGZvciBYSFIgdHlwZSB1cGxvYWRzLiBTZXQgdG8gZmFsc2UgdG8gdXBsb2FkIGZpbGVcbiAgICAgIC8vIHNlbGVjdGlvbnMgaW4gb25lIHJlcXVlc3QgZWFjaDpcbiAgICAgIHNpbmdsZUZpbGVVcGxvYWRzOiB0cnVlLFxuICAgICAgLy8gVG8gbGltaXQgdGhlIG51bWJlciBvZiBmaWxlcyB1cGxvYWRlZCB3aXRoIG9uZSBYSFIgcmVxdWVzdCxcbiAgICAgIC8vIHNldCB0aGUgZm9sbG93aW5nIG9wdGlvbiB0byBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiAwOlxuICAgICAgbGltaXRNdWx0aUZpbGVVcGxvYWRzOiB1bmRlZmluZWQsXG4gICAgICAvLyBUaGUgZm9sbG93aW5nIG9wdGlvbiBsaW1pdHMgdGhlIG51bWJlciBvZiBmaWxlcyB1cGxvYWRlZCB3aXRoIG9uZVxuICAgICAgLy8gWEhSIHJlcXVlc3QgdG8ga2VlcCB0aGUgcmVxdWVzdCBzaXplIHVuZGVyIG9yIGVxdWFsIHRvIHRoZSBkZWZpbmVkXG4gICAgICAvLyBsaW1pdCBpbiBieXRlczpcbiAgICAgIGxpbWl0TXVsdGlGaWxlVXBsb2FkU2l6ZTogdW5kZWZpbmVkLFxuICAgICAgLy8gTXVsdGlwYXJ0IGZpbGUgdXBsb2FkcyBhZGQgYSBudW1iZXIgb2YgYnl0ZXMgdG8gZWFjaCB1cGxvYWRlZCBmaWxlLFxuICAgICAgLy8gdGhlcmVmb3JlIHRoZSBmb2xsb3dpbmcgb3B0aW9uIGFkZHMgYW4gb3ZlcmhlYWQgZm9yIGVhY2ggZmlsZSB1c2VkXG4gICAgICAvLyBpbiB0aGUgbGltaXRNdWx0aUZpbGVVcGxvYWRTaXplIGNvbmZpZ3VyYXRpb246XG4gICAgICBsaW1pdE11bHRpRmlsZVVwbG9hZFNpemVPdmVyaGVhZDogNTEyLFxuICAgICAgLy8gU2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uIHRvIHRydWUgdG8gaXNzdWUgYWxsIGZpbGUgdXBsb2FkIHJlcXVlc3RzXG4gICAgICAvLyBpbiBhIHNlcXVlbnRpYWwgb3JkZXI6XG4gICAgICBzZXF1ZW50aWFsVXBsb2FkczogZmFsc2UsXG4gICAgICAvLyBUbyBsaW1pdCB0aGUgbnVtYmVyIG9mIGNvbmN1cnJlbnQgdXBsb2FkcyxcbiAgICAgIC8vIHNldCB0aGUgZm9sbG93aW5nIG9wdGlvbiB0byBhbiBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiAwOlxuICAgICAgbGltaXRDb25jdXJyZW50VXBsb2FkczogdW5kZWZpbmVkLFxuICAgICAgLy8gU2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uIHRvIHRydWUgdG8gZm9yY2UgaWZyYW1lIHRyYW5zcG9ydCB1cGxvYWRzOlxuICAgICAgZm9yY2VJZnJhbWVUcmFuc3BvcnQ6IGZhbHNlLFxuICAgICAgLy8gU2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uIHRvIHRoZSBsb2NhdGlvbiBvZiBhIHJlZGlyZWN0IHVybCBvbiB0aGVcbiAgICAgIC8vIG9yaWdpbiBzZXJ2ZXIsIGZvciBjcm9zcy1kb21haW4gaWZyYW1lIHRyYW5zcG9ydCB1cGxvYWRzOlxuICAgICAgcmVkaXJlY3Q6IHVuZGVmaW5lZCxcbiAgICAgIC8vIFRoZSBwYXJhbWV0ZXIgbmFtZSBmb3IgdGhlIHJlZGlyZWN0IHVybCwgc2VudCBhcyBwYXJ0IG9mIHRoZSBmb3JtXG4gICAgICAvLyBkYXRhIGFuZCBzZXQgdG8gJ3JlZGlyZWN0JyBpZiB0aGlzIG9wdGlvbiBpcyBlbXB0eTpcbiAgICAgIHJlZGlyZWN0UGFyYW1OYW1lOiB1bmRlZmluZWQsXG4gICAgICAvLyBTZXQgdGhlIGZvbGxvd2luZyBvcHRpb24gdG8gdGhlIGxvY2F0aW9uIG9mIGEgcG9zdE1lc3NhZ2Ugd2luZG93LFxuICAgICAgLy8gdG8gZW5hYmxlIHBvc3RNZXNzYWdlIHRyYW5zcG9ydCB1cGxvYWRzOlxuICAgICAgcG9zdE1lc3NhZ2U6IHVuZGVmaW5lZCxcbiAgICAgIC8vIEJ5IGRlZmF1bHQsIFhIUiBmaWxlIHVwbG9hZHMgYXJlIHNlbnQgYXMgbXVsdGlwYXJ0L2Zvcm0tZGF0YS5cbiAgICAgIC8vIFRoZSBpZnJhbWUgdHJhbnNwb3J0IGlzIGFsd2F5cyB1c2luZyBtdWx0aXBhcnQvZm9ybS1kYXRhLlxuICAgICAgLy8gU2V0IHRvIGZhbHNlIHRvIGVuYWJsZSBub24tbXVsdGlwYXJ0IFhIUiB1cGxvYWRzOlxuICAgICAgbXVsdGlwYXJ0OiB0cnVlLFxuICAgICAgLy8gVG8gdXBsb2FkIGxhcmdlIGZpbGVzIGluIHNtYWxsZXIgY2h1bmtzLCBzZXQgdGhlIGZvbGxvd2luZyBvcHRpb25cbiAgICAgIC8vIHRvIGEgcHJlZmVycmVkIG1heGltdW0gY2h1bmsgc2l6ZS4gSWYgc2V0IHRvIDAsIG51bGwgb3IgdW5kZWZpbmVkLFxuICAgICAgLy8gb3IgdGhlIGJyb3dzZXIgZG9lcyBub3Qgc3VwcG9ydCB0aGUgcmVxdWlyZWQgQmxvYiBBUEksIGZpbGVzIHdpbGxcbiAgICAgIC8vIGJlIHVwbG9hZGVkIGFzIGEgd2hvbGUuXG4gICAgICBtYXhDaHVua1NpemU6IHVuZGVmaW5lZCxcbiAgICAgIC8vIFdoZW4gYSBub24tbXVsdGlwYXJ0IHVwbG9hZCBvciBhIGNodW5rZWQgbXVsdGlwYXJ0IHVwbG9hZCBoYXMgYmVlblxuICAgICAgLy8gYWJvcnRlZCwgdGhpcyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gcmVzdW1lIHRoZSB1cGxvYWQgYnkgc2V0dGluZ1xuICAgICAgLy8gaXQgdG8gdGhlIHNpemUgb2YgdGhlIGFscmVhZHkgdXBsb2FkZWQgYnl0ZXMuIFRoaXMgb3B0aW9uIGlzIG1vc3RcbiAgICAgIC8vIHVzZWZ1bCB3aGVuIG1vZGlmeWluZyB0aGUgb3B0aW9ucyBvYmplY3QgaW5zaWRlIG9mIHRoZSBcImFkZFwiIG9yXG4gICAgICAvLyBcInNlbmRcIiBjYWxsYmFja3MsIGFzIHRoZSBvcHRpb25zIGFyZSBjbG9uZWQgZm9yIGVhY2ggZmlsZSB1cGxvYWQuXG4gICAgICB1cGxvYWRlZEJ5dGVzOiB1bmRlZmluZWQsXG4gICAgICAvLyBCeSBkZWZhdWx0LCBmYWlsZWQgKGFib3J0IG9yIGVycm9yKSBmaWxlIHVwbG9hZHMgYXJlIHJlbW92ZWQgZnJvbSB0aGVcbiAgICAgIC8vIGdsb2JhbCBwcm9ncmVzcyBjYWxjdWxhdGlvbi4gU2V0IHRoZSBmb2xsb3dpbmcgb3B0aW9uIHRvIGZhbHNlIHRvXG4gICAgICAvLyBwcmV2ZW50IHJlY2FsY3VsYXRpbmcgdGhlIGdsb2JhbCBwcm9ncmVzcyBkYXRhOlxuICAgICAgcmVjYWxjdWxhdGVQcm9ncmVzczogdHJ1ZSxcbiAgICAgIC8vIEludGVydmFsIGluIG1pbGxpc2Vjb25kcyB0byBjYWxjdWxhdGUgYW5kIHRyaWdnZXIgcHJvZ3Jlc3MgZXZlbnRzOlxuICAgICAgcHJvZ3Jlc3NJbnRlcnZhbDogMTAwLFxuICAgICAgLy8gSW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzIHRvIGNhbGN1bGF0ZSBwcm9ncmVzcyBiaXRyYXRlOlxuICAgICAgYml0cmF0ZUludGVydmFsOiA1MDAsXG4gICAgICAvLyBCeSBkZWZhdWx0LCB1cGxvYWRzIGFyZSBzdGFydGVkIGF1dG9tYXRpY2FsbHkgd2hlbiBhZGRpbmcgZmlsZXM6XG4gICAgICBhdXRvVXBsb2FkOiB0cnVlLFxuICAgICAgLy8gQnkgZGVmYXVsdCwgZHVwbGljYXRlIGZpbGUgbmFtZXMgYXJlIGV4cGVjdGVkIHRvIGJlIGhhbmRsZWQgb25cbiAgICAgIC8vIHRoZSBzZXJ2ZXItc2lkZS4gSWYgdGhpcyBpcyBub3QgcG9zc2libGUgKGUuZy4gd2hlbiB1cGxvYWRpbmdcbiAgICAgIC8vIGZpbGVzIGRpcmVjdGx5IHRvIEFtYXpvbiBTMyksIHRoZSBmb2xsb3dpbmcgb3B0aW9uIGNhbiBiZSBzZXQgdG9cbiAgICAgIC8vIGFuIGVtcHR5IG9iamVjdCBvciBhbiBvYmplY3QgbWFwcGluZyBleGlzdGluZyBmaWxlbmFtZXMsIGUuZy46XG4gICAgICAvLyB7IFwiaW1hZ2UuanBnXCI6IHRydWUsIFwiaW1hZ2UgKDEpLmpwZ1wiOiB0cnVlIH1cbiAgICAgIC8vIElmIGl0IGlzIHNldCwgYWxsIGZpbGVzIHdpbGwgYmUgdXBsb2FkZWQgd2l0aCB1bmlxdWUgZmlsZW5hbWVzLFxuICAgICAgLy8gYWRkaW5nIGluY3JlYXNpbmcgbnVtYmVyIHN1ZmZpeGVzIGlmIG5lY2Vzc2FyeSwgZS5nLjpcbiAgICAgIC8vIFwiaW1hZ2UgKDIpLmpwZ1wiXG4gICAgICB1bmlxdWVGaWxlbmFtZXM6IHVuZGVmaW5lZCxcblxuICAgICAgLy8gRXJyb3IgYW5kIGluZm8gbWVzc2FnZXM6XG4gICAgICBtZXNzYWdlczoge1xuICAgICAgICB1cGxvYWRlZEJ5dGVzOiAnVXBsb2FkZWQgYnl0ZXMgZXhjZWVkIGZpbGUgc2l6ZSdcbiAgICAgIH0sXG5cbiAgICAgIC8vIFRyYW5zbGF0aW9uIGZ1bmN0aW9uLCBnZXRzIHRoZSBtZXNzYWdlIGtleSB0byBiZSB0cmFuc2xhdGVkXG4gICAgICAvLyBhbmQgYW4gb2JqZWN0IHdpdGggY29udGV4dCBzcGVjaWZpYyBkYXRhIGFzIGFyZ3VtZW50czpcbiAgICAgIGkxOG46IGZ1bmN0aW9uIChtZXNzYWdlLCBjb250ZXh0KSB7XG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgICBtZXNzYWdlID0gdGhpcy5tZXNzYWdlc1ttZXNzYWdlXSB8fCBtZXNzYWdlLnRvU3RyaW5nKCk7XG4gICAgICAgIGlmIChjb250ZXh0KSB7XG4gICAgICAgICAgJC5lYWNoKGNvbnRleHQsIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgICAgIG1lc3NhZ2UgPSBtZXNzYWdlLnJlcGxhY2UoJ3snICsga2V5ICsgJ30nLCB2YWx1ZSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1lc3NhZ2U7XG4gICAgICB9LFxuXG4gICAgICAvLyBBZGRpdGlvbmFsIGZvcm0gZGF0YSB0byBiZSBzZW50IGFsb25nIHdpdGggdGhlIGZpbGUgdXBsb2FkcyBjYW4gYmUgc2V0XG4gICAgICAvLyB1c2luZyB0aGlzIG9wdGlvbiwgd2hpY2ggYWNjZXB0cyBhbiBhcnJheSBvZiBvYmplY3RzIHdpdGggbmFtZSBhbmRcbiAgICAgIC8vIHZhbHVlIHByb3BlcnRpZXMsIGEgZnVuY3Rpb24gcmV0dXJuaW5nIHN1Y2ggYW4gYXJyYXksIGEgRm9ybURhdGFcbiAgICAgIC8vIG9iamVjdCAoZm9yIFhIUiBmaWxlIHVwbG9hZHMpLCBvciBhIHNpbXBsZSBvYmplY3QuXG4gICAgICAvLyBUaGUgZm9ybSBvZiB0aGUgZmlyc3QgZmlsZUlucHV0IGlzIGdpdmVuIGFzIHBhcmFtZXRlciB0byB0aGUgZnVuY3Rpb246XG4gICAgICBmb3JtRGF0YTogZnVuY3Rpb24gKGZvcm0pIHtcbiAgICAgICAgcmV0dXJuIGZvcm0uc2VyaWFsaXplQXJyYXkoKTtcbiAgICAgIH0sXG5cbiAgICAgIC8vIFRoZSBhZGQgY2FsbGJhY2sgaXMgaW52b2tlZCBhcyBzb29uIGFzIGZpbGVzIGFyZSBhZGRlZCB0byB0aGUgZmlsZXVwbG9hZFxuICAgICAgLy8gd2lkZ2V0ICh2aWEgZmlsZSBpbnB1dCBzZWxlY3Rpb24sIGRyYWcgJiBkcm9wLCBwYXN0ZSBvciBhZGQgQVBJIGNhbGwpLlxuICAgICAgLy8gSWYgdGhlIHNpbmdsZUZpbGVVcGxvYWRzIG9wdGlvbiBpcyBlbmFibGVkLCB0aGlzIGNhbGxiYWNrIHdpbGwgYmVcbiAgICAgIC8vIGNhbGxlZCBvbmNlIGZvciBlYWNoIGZpbGUgaW4gdGhlIHNlbGVjdGlvbiBmb3IgWEhSIGZpbGUgdXBsb2FkcywgZWxzZVxuICAgICAgLy8gb25jZSBmb3IgZWFjaCBmaWxlIHNlbGVjdGlvbi5cbiAgICAgIC8vXG4gICAgICAvLyBUaGUgdXBsb2FkIHN0YXJ0cyB3aGVuIHRoZSBzdWJtaXQgbWV0aG9kIGlzIGludm9rZWQgb24gdGhlIGRhdGEgcGFyYW1ldGVyLlxuICAgICAgLy8gVGhlIGRhdGEgb2JqZWN0IGNvbnRhaW5zIGEgZmlsZXMgcHJvcGVydHkgaG9sZGluZyB0aGUgYWRkZWQgZmlsZXNcbiAgICAgIC8vIGFuZCBhbGxvd3MgeW91IHRvIG92ZXJyaWRlIHBsdWdpbiBvcHRpb25zIGFzIHdlbGwgYXMgZGVmaW5lIGFqYXggc2V0dGluZ3MuXG4gICAgICAvL1xuICAgICAgLy8gTGlzdGVuZXJzIGZvciB0aGlzIGNhbGxiYWNrIGNhbiBhbHNvIGJlIGJvdW5kIHRoZSBmb2xsb3dpbmcgd2F5OlxuICAgICAgLy8gLm9uKCdmaWxldXBsb2FkYWRkJywgZnVuYyk7XG4gICAgICAvL1xuICAgICAgLy8gZGF0YS5zdWJtaXQoKSByZXR1cm5zIGEgUHJvbWlzZSBvYmplY3QgYW5kIGFsbG93cyB0byBhdHRhY2ggYWRkaXRpb25hbFxuICAgICAgLy8gaGFuZGxlcnMgdXNpbmcgalF1ZXJ5J3MgRGVmZXJyZWQgY2FsbGJhY2tzOlxuICAgICAgLy8gZGF0YS5zdWJtaXQoKS5kb25lKGZ1bmMpLmZhaWwoZnVuYykuYWx3YXlzKGZ1bmMpO1xuICAgICAgYWRkOiBmdW5jdGlvbiAoZSwgZGF0YSkge1xuICAgICAgICBpZiAoZS5pc0RlZmF1bHRQcmV2ZW50ZWQoKSkge1xuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgZGF0YS5hdXRvVXBsb2FkIHx8XG4gICAgICAgICAgKGRhdGEuYXV0b1VwbG9hZCAhPT0gZmFsc2UgJiZcbiAgICAgICAgICAgICQodGhpcykuZmlsZXVwbG9hZCgnb3B0aW9uJywgJ2F1dG9VcGxvYWQnKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgZGF0YS5wcm9jZXNzKCkuZG9uZShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBkYXRhLnN1Ym1pdCgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgICB9LFxuXG4gICAgICAvLyBPdGhlciBjYWxsYmFja3M6XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciB0aGUgc3VibWl0IGV2ZW50IG9mIGVhY2ggZmlsZSB1cGxvYWQ6XG4gICAgICAvLyBzdWJtaXQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2Fkc3VibWl0JywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciB0aGUgc3RhcnQgb2YgZWFjaCBmaWxlIHVwbG9hZCByZXF1ZXN0OlxuICAgICAgLy8gc2VuZDogZnVuY3Rpb24gKGUsIGRhdGEpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRzZW5kJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciBzdWNjZXNzZnVsIHVwbG9hZHM6XG4gICAgICAvLyBkb25lOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5vbignZmlsZXVwbG9hZGRvbmUnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIGZhaWxlZCAoYWJvcnQgb3IgZXJyb3IpIHVwbG9hZHM6XG4gICAgICAvLyBmYWlsOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5vbignZmlsZXVwbG9hZGZhaWwnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIGNvbXBsZXRlZCAoc3VjY2VzcywgYWJvcnQgb3IgZXJyb3IpIHJlcXVlc3RzOlxuICAgICAgLy8gYWx3YXlzOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5vbignZmlsZXVwbG9hZGFsd2F5cycsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgdXBsb2FkIHByb2dyZXNzIGV2ZW50czpcbiAgICAgIC8vIHByb2dyZXNzOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5vbignZmlsZXVwbG9hZHByb2dyZXNzJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciBnbG9iYWwgdXBsb2FkIHByb2dyZXNzIGV2ZW50czpcbiAgICAgIC8vIHByb2dyZXNzYWxsOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5vbignZmlsZXVwbG9hZHByb2dyZXNzYWxsJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciB1cGxvYWRzIHN0YXJ0LCBlcXVpdmFsZW50IHRvIHRoZSBnbG9iYWwgYWpheFN0YXJ0IGV2ZW50OlxuICAgICAgLy8gc3RhcnQ6IGZ1bmN0aW9uIChlKSB7fSwgLy8gLm9uKCdmaWxldXBsb2Fkc3RhcnQnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIHVwbG9hZHMgc3RvcCwgZXF1aXZhbGVudCB0byB0aGUgZ2xvYmFsIGFqYXhTdG9wIGV2ZW50OlxuICAgICAgLy8gc3RvcDogZnVuY3Rpb24gKGUpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRzdG9wJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciBjaGFuZ2UgZXZlbnRzIG9mIHRoZSBmaWxlSW5wdXQocyk6XG4gICAgICAvLyBjaGFuZ2U6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkY2hhbmdlJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciBwYXN0ZSBldmVudHMgdG8gdGhlIHBhc3RlWm9uZShzKTpcbiAgICAgIC8vIHBhc3RlOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5vbignZmlsZXVwbG9hZHBhc3RlJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciBkcm9wIGV2ZW50cyBvZiB0aGUgZHJvcFpvbmUocyk6XG4gICAgICAvLyBkcm9wOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5vbignZmlsZXVwbG9hZGRyb3AnLCBmdW5jKTtcblxuICAgICAgLy8gQ2FsbGJhY2sgZm9yIGRyYWdvdmVyIGV2ZW50cyBvZiB0aGUgZHJvcFpvbmUocyk6XG4gICAgICAvLyBkcmFnb3ZlcjogZnVuY3Rpb24gKGUpIHt9LCAvLyAub24oJ2ZpbGV1cGxvYWRkcmFnb3ZlcicsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBiZWZvcmUgdGhlIHN0YXJ0IG9mIGVhY2ggY2h1bmsgdXBsb2FkIHJlcXVlc3QgKGJlZm9yZSBmb3JtIGRhdGEgaW5pdGlhbGl6YXRpb24pOlxuICAgICAgLy8gY2h1bmtiZWZvcmVzZW5kOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5vbignZmlsZXVwbG9hZGNodW5rYmVmb3Jlc2VuZCcsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgdGhlIHN0YXJ0IG9mIGVhY2ggY2h1bmsgdXBsb2FkIHJlcXVlc3Q6XG4gICAgICAvLyBjaHVua3NlbmQ6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkY2h1bmtzZW5kJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciBzdWNjZXNzZnVsIGNodW5rIHVwbG9hZHM6XG4gICAgICAvLyBjaHVua2RvbmU6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkY2h1bmtkb25lJywgZnVuYyk7XG5cbiAgICAgIC8vIENhbGxiYWNrIGZvciBmYWlsZWQgKGFib3J0IG9yIGVycm9yKSBjaHVuayB1cGxvYWRzOlxuICAgICAgLy8gY2h1bmtmYWlsOiBmdW5jdGlvbiAoZSwgZGF0YSkge30sIC8vIC5vbignZmlsZXVwbG9hZGNodW5rZmFpbCcsIGZ1bmMpO1xuXG4gICAgICAvLyBDYWxsYmFjayBmb3IgY29tcGxldGVkIChzdWNjZXNzLCBhYm9ydCBvciBlcnJvcikgY2h1bmsgdXBsb2FkIHJlcXVlc3RzOlxuICAgICAgLy8gY2h1bmthbHdheXM6IGZ1bmN0aW9uIChlLCBkYXRhKSB7fSwgLy8gLm9uKCdmaWxldXBsb2FkY2h1bmthbHdheXMnLCBmdW5jKTtcblxuICAgICAgLy8gVGhlIHBsdWdpbiBvcHRpb25zIGFyZSB1c2VkIGFzIHNldHRpbmdzIG9iamVjdCBmb3IgdGhlIGFqYXggY2FsbHMuXG4gICAgICAvLyBUaGUgZm9sbG93aW5nIGFyZSBqUXVlcnkgYWpheCBzZXR0aW5ncyByZXF1aXJlZCBmb3IgdGhlIGZpbGUgdXBsb2FkczpcbiAgICAgIHByb2Nlc3NEYXRhOiBmYWxzZSxcbiAgICAgIGNvbnRlbnRUeXBlOiBmYWxzZSxcbiAgICAgIGNhY2hlOiBmYWxzZSxcbiAgICAgIHRpbWVvdXQ6IDBcbiAgICB9LFxuXG4gICAgLy8galF1ZXJ5IHZlcnNpb25zIGJlZm9yZSAxLjggcmVxdWlyZSBwcm9taXNlLnBpcGUgaWYgdGhlIHJldHVybiB2YWx1ZSBpc1xuICAgIC8vIHVzZWQsIGFzIHByb21pc2UudGhlbiBpbiBvbGRlciB2ZXJzaW9ucyBoYXMgYSBkaWZmZXJlbnQgYmVoYXZpb3IsIHNlZTpcbiAgICAvLyBodHRwczovL2Jsb2cuanF1ZXJ5LmNvbS8yMDEyLzA4LzA5L2pxdWVyeS0xLTgtcmVsZWFzZWQvXG4gICAgLy8gaHR0cHM6Ly9idWdzLmpxdWVyeS5jb20vdGlja2V0LzExMDEwXG4gICAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2JsdWVpbXAvalF1ZXJ5LUZpbGUtVXBsb2FkL3B1bGwvMzQzNVxuICAgIF9wcm9taXNlUGlwZTogKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBwYXJ0cyA9ICQuZm4uanF1ZXJ5LnNwbGl0KCcuJyk7XG4gICAgICByZXR1cm4gTnVtYmVyKHBhcnRzWzBdKSA+IDEgfHwgTnVtYmVyKHBhcnRzWzFdKSA+IDcgPyAndGhlbicgOiAncGlwZSc7XG4gICAgfSkoKSxcblxuICAgIC8vIEEgbGlzdCBvZiBvcHRpb25zIHRoYXQgcmVxdWlyZSByZWluaXRpYWxpemluZyBldmVudCBsaXN0ZW5lcnMgYW5kL29yXG4gICAgLy8gc3BlY2lhbCBpbml0aWFsaXphdGlvbiBjb2RlOlxuICAgIF9zcGVjaWFsT3B0aW9uczogW1xuICAgICAgJ2ZpbGVJbnB1dCcsXG4gICAgICAnZHJvcFpvbmUnLFxuICAgICAgJ3Bhc3RlWm9uZScsXG4gICAgICAnbXVsdGlwYXJ0JyxcbiAgICAgICdmb3JjZUlmcmFtZVRyYW5zcG9ydCdcbiAgICBdLFxuXG4gICAgX2Jsb2JTbGljZTpcbiAgICAgICQuc3VwcG9ydC5ibG9iU2xpY2UgJiZcbiAgICAgIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgdmFyIHNsaWNlID0gdGhpcy5zbGljZSB8fCB0aGlzLndlYmtpdFNsaWNlIHx8IHRoaXMubW96U2xpY2U7XG4gICAgICAgIHJldHVybiBzbGljZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfSxcblxuICAgIF9CaXRyYXRlVGltZXI6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMudGltZXN0YW1wID0gRGF0ZS5ub3cgPyBEYXRlLm5vdygpIDogbmV3IERhdGUoKS5nZXRUaW1lKCk7XG4gICAgICB0aGlzLmxvYWRlZCA9IDA7XG4gICAgICB0aGlzLmJpdHJhdGUgPSAwO1xuICAgICAgdGhpcy5nZXRCaXRyYXRlID0gZnVuY3Rpb24gKG5vdywgbG9hZGVkLCBpbnRlcnZhbCkge1xuICAgICAgICB2YXIgdGltZURpZmYgPSBub3cgLSB0aGlzLnRpbWVzdGFtcDtcbiAgICAgICAgaWYgKCF0aGlzLmJpdHJhdGUgfHwgIWludGVydmFsIHx8IHRpbWVEaWZmID4gaW50ZXJ2YWwpIHtcbiAgICAgICAgICB0aGlzLmJpdHJhdGUgPSAobG9hZGVkIC0gdGhpcy5sb2FkZWQpICogKDEwMDAgLyB0aW1lRGlmZikgKiA4O1xuICAgICAgICAgIHRoaXMubG9hZGVkID0gbG9hZGVkO1xuICAgICAgICAgIHRoaXMudGltZXN0YW1wID0gbm93O1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLmJpdHJhdGU7XG4gICAgICB9O1xuICAgIH0sXG5cbiAgICBfaXNYSFJVcGxvYWQ6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAhb3B0aW9ucy5mb3JjZUlmcmFtZVRyYW5zcG9ydCAmJlxuICAgICAgICAoKCFvcHRpb25zLm11bHRpcGFydCAmJiAkLnN1cHBvcnQueGhyRmlsZVVwbG9hZCkgfHxcbiAgICAgICAgICAkLnN1cHBvcnQueGhyRm9ybURhdGFGaWxlVXBsb2FkKVxuICAgICAgKTtcbiAgICB9LFxuXG4gICAgX2dldEZvcm1EYXRhOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgdmFyIGZvcm1EYXRhO1xuICAgICAgaWYgKCQudHlwZShvcHRpb25zLmZvcm1EYXRhKSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5mb3JtRGF0YShvcHRpb25zLmZvcm0pO1xuICAgICAgfVxuICAgICAgaWYgKCQuaXNBcnJheShvcHRpb25zLmZvcm1EYXRhKSkge1xuICAgICAgICByZXR1cm4gb3B0aW9ucy5mb3JtRGF0YTtcbiAgICAgIH1cbiAgICAgIGlmICgkLnR5cGUob3B0aW9ucy5mb3JtRGF0YSkgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIGZvcm1EYXRhID0gW107XG4gICAgICAgICQuZWFjaChvcHRpb25zLmZvcm1EYXRhLCBmdW5jdGlvbiAobmFtZSwgdmFsdWUpIHtcbiAgICAgICAgICBmb3JtRGF0YS5wdXNoKHsgbmFtZTogbmFtZSwgdmFsdWU6IHZhbHVlIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIGZvcm1EYXRhO1xuICAgICAgfVxuICAgICAgcmV0dXJuIFtdO1xuICAgIH0sXG5cbiAgICBfZ2V0VG90YWw6IGZ1bmN0aW9uIChmaWxlcykge1xuICAgICAgdmFyIHRvdGFsID0gMDtcbiAgICAgICQuZWFjaChmaWxlcywgZnVuY3Rpb24gKGluZGV4LCBmaWxlKSB7XG4gICAgICAgIHRvdGFsICs9IGZpbGUuc2l6ZSB8fCAxO1xuICAgICAgfSk7XG4gICAgICByZXR1cm4gdG90YWw7XG4gICAgfSxcblxuICAgIF9pbml0UHJvZ3Jlc3NPYmplY3Q6IGZ1bmN0aW9uIChvYmopIHtcbiAgICAgIHZhciBwcm9ncmVzcyA9IHtcbiAgICAgICAgbG9hZGVkOiAwLFxuICAgICAgICB0b3RhbDogMCxcbiAgICAgICAgYml0cmF0ZTogMFxuICAgICAgfTtcbiAgICAgIGlmIChvYmouX3Byb2dyZXNzKSB7XG4gICAgICAgICQuZXh0ZW5kKG9iai5fcHJvZ3Jlc3MsIHByb2dyZXNzKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG9iai5fcHJvZ3Jlc3MgPSBwcm9ncmVzcztcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2luaXRSZXNwb25zZU9iamVjdDogZnVuY3Rpb24gKG9iaikge1xuICAgICAgdmFyIHByb3A7XG4gICAgICBpZiAob2JqLl9yZXNwb25zZSkge1xuICAgICAgICBmb3IgKHByb3AgaW4gb2JqLl9yZXNwb25zZSkge1xuICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqLl9yZXNwb25zZSwgcHJvcCkpIHtcbiAgICAgICAgICAgIGRlbGV0ZSBvYmouX3Jlc3BvbnNlW3Byb3BdO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb2JqLl9yZXNwb25zZSA9IHt9O1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfb25Qcm9ncmVzczogZnVuY3Rpb24gKGUsIGRhdGEpIHtcbiAgICAgIGlmIChlLmxlbmd0aENvbXB1dGFibGUpIHtcbiAgICAgICAgdmFyIG5vdyA9IERhdGUubm93ID8gRGF0ZS5ub3coKSA6IG5ldyBEYXRlKCkuZ2V0VGltZSgpLFxuICAgICAgICAgIGxvYWRlZDtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGRhdGEuX3RpbWUgJiZcbiAgICAgICAgICBkYXRhLnByb2dyZXNzSW50ZXJ2YWwgJiZcbiAgICAgICAgICBub3cgLSBkYXRhLl90aW1lIDwgZGF0YS5wcm9ncmVzc0ludGVydmFsICYmXG4gICAgICAgICAgZS5sb2FkZWQgIT09IGUudG90YWxcbiAgICAgICAgKSB7XG4gICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGRhdGEuX3RpbWUgPSBub3c7XG4gICAgICAgIGxvYWRlZCA9XG4gICAgICAgICAgTWF0aC5mbG9vcihcbiAgICAgICAgICAgIChlLmxvYWRlZCAvIGUudG90YWwpICogKGRhdGEuY2h1bmtTaXplIHx8IGRhdGEuX3Byb2dyZXNzLnRvdGFsKVxuICAgICAgICAgICkgKyAoZGF0YS51cGxvYWRlZEJ5dGVzIHx8IDApO1xuICAgICAgICAvLyBBZGQgdGhlIGRpZmZlcmVuY2UgZnJvbSB0aGUgcHJldmlvdXNseSBsb2FkZWQgc3RhdGVcbiAgICAgICAgLy8gdG8gdGhlIGdsb2JhbCBsb2FkZWQgY291bnRlcjpcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MubG9hZGVkICs9IGxvYWRlZCAtIGRhdGEuX3Byb2dyZXNzLmxvYWRlZDtcbiAgICAgICAgdGhpcy5fcHJvZ3Jlc3MuYml0cmF0ZSA9IHRoaXMuX2JpdHJhdGVUaW1lci5nZXRCaXRyYXRlKFxuICAgICAgICAgIG5vdyxcbiAgICAgICAgICB0aGlzLl9wcm9ncmVzcy5sb2FkZWQsXG4gICAgICAgICAgZGF0YS5iaXRyYXRlSW50ZXJ2YWxcbiAgICAgICAgKTtcbiAgICAgICAgZGF0YS5fcHJvZ3Jlc3MubG9hZGVkID0gZGF0YS5sb2FkZWQgPSBsb2FkZWQ7XG4gICAgICAgIGRhdGEuX3Byb2dyZXNzLmJpdHJhdGUgPSBkYXRhLmJpdHJhdGUgPSBkYXRhLl9iaXRyYXRlVGltZXIuZ2V0Qml0cmF0ZShcbiAgICAgICAgICBub3csXG4gICAgICAgICAgbG9hZGVkLFxuICAgICAgICAgIGRhdGEuYml0cmF0ZUludGVydmFsXG4gICAgICAgICk7XG4gICAgICAgIC8vIFRyaWdnZXIgYSBjdXN0b20gcHJvZ3Jlc3MgZXZlbnQgd2l0aCBhIHRvdGFsIGRhdGEgcHJvcGVydHkgc2V0XG4gICAgICAgIC8vIHRvIHRoZSBmaWxlIHNpemUocykgb2YgdGhlIGN1cnJlbnQgdXBsb2FkIGFuZCBhIGxvYWRlZCBkYXRhXG4gICAgICAgIC8vIHByb3BlcnR5IGNhbGN1bGF0ZWQgYWNjb3JkaW5nbHk6XG4gICAgICAgIHRoaXMuX3RyaWdnZXIoXG4gICAgICAgICAgJ3Byb2dyZXNzJyxcbiAgICAgICAgICAkLkV2ZW50KCdwcm9ncmVzcycsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSksXG4gICAgICAgICAgZGF0YVxuICAgICAgICApO1xuICAgICAgICAvLyBUcmlnZ2VyIGEgZ2xvYmFsIHByb2dyZXNzIGV2ZW50IGZvciBhbGwgY3VycmVudCBmaWxlIHVwbG9hZHMsXG4gICAgICAgIC8vIGluY2x1ZGluZyBhamF4IGNhbGxzIHF1ZXVlZCBmb3Igc2VxdWVudGlhbCBmaWxlIHVwbG9hZHM6XG4gICAgICAgIHRoaXMuX3RyaWdnZXIoXG4gICAgICAgICAgJ3Byb2dyZXNzYWxsJyxcbiAgICAgICAgICAkLkV2ZW50KCdwcm9ncmVzc2FsbCcsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSksXG4gICAgICAgICAgdGhpcy5fcHJvZ3Jlc3NcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2luaXRQcm9ncmVzc0xpc3RlbmVyOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICB4aHIgPSBvcHRpb25zLnhociA/IG9wdGlvbnMueGhyKCkgOiAkLmFqYXhTZXR0aW5ncy54aHIoKTtcbiAgICAgIC8vIEFjY2VzcyB0byB0aGUgbmF0aXZlIFhIUiBvYmplY3QgaXMgcmVxdWlyZWQgdG8gYWRkIGV2ZW50IGxpc3RlbmVyc1xuICAgICAgLy8gZm9yIHRoZSB1cGxvYWQgcHJvZ3Jlc3MgZXZlbnQ6XG4gICAgICBpZiAoeGhyLnVwbG9hZCkge1xuICAgICAgICAkKHhoci51cGxvYWQpLm9uKCdwcm9ncmVzcycsIGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgdmFyIG9lID0gZS5vcmlnaW5hbEV2ZW50O1xuICAgICAgICAgIC8vIE1ha2Ugc3VyZSB0aGUgcHJvZ3Jlc3MgZXZlbnQgcHJvcGVydGllcyBnZXQgY29waWVkIG92ZXI6XG4gICAgICAgICAgZS5sZW5ndGhDb21wdXRhYmxlID0gb2UubGVuZ3RoQ29tcHV0YWJsZTtcbiAgICAgICAgICBlLmxvYWRlZCA9IG9lLmxvYWRlZDtcbiAgICAgICAgICBlLnRvdGFsID0gb2UudG90YWw7XG4gICAgICAgICAgdGhhdC5fb25Qcm9ncmVzcyhlLCBvcHRpb25zKTtcbiAgICAgICAgfSk7XG4gICAgICAgIG9wdGlvbnMueGhyID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHJldHVybiB4aHI7XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9kZWluaXRQcm9ncmVzc0xpc3RlbmVyOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgdmFyIHhociA9IG9wdGlvbnMueGhyID8gb3B0aW9ucy54aHIoKSA6ICQuYWpheFNldHRpbmdzLnhocigpO1xuICAgICAgaWYgKHhoci51cGxvYWQpIHtcbiAgICAgICAgJCh4aHIudXBsb2FkKS5vZmYoJ3Byb2dyZXNzJyk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9pc0luc3RhbmNlT2Y6IGZ1bmN0aW9uICh0eXBlLCBvYmopIHtcbiAgICAgIC8vIENyb3NzLWZyYW1lIGluc3RhbmNlb2YgY2hlY2tcbiAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSA9PT0gJ1tvYmplY3QgJyArIHR5cGUgKyAnXSc7XG4gICAgfSxcblxuICAgIF9nZXRVbmlxdWVGaWxlbmFtZTogZnVuY3Rpb24gKG5hbWUsIG1hcCkge1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICBuYW1lID0gU3RyaW5nKG5hbWUpO1xuICAgICAgaWYgKG1hcFtuYW1lXSkge1xuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgICAgbmFtZSA9IG5hbWUucmVwbGFjZShcbiAgICAgICAgICAvKD86IFxcKChbXFxkXSspXFwpKT8oXFwuW14uXSspPyQvLFxuICAgICAgICAgIGZ1bmN0aW9uIChfLCBwMSwgcDIpIHtcbiAgICAgICAgICAgIHZhciBpbmRleCA9IHAxID8gTnVtYmVyKHAxKSArIDEgOiAxO1xuICAgICAgICAgICAgdmFyIGV4dCA9IHAyIHx8ICcnO1xuICAgICAgICAgICAgcmV0dXJuICcgKCcgKyBpbmRleCArICcpJyArIGV4dDtcbiAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRVbmlxdWVGaWxlbmFtZShuYW1lLCBtYXApO1xuICAgICAgfVxuICAgICAgbWFwW25hbWVdID0gdHJ1ZTtcbiAgICAgIHJldHVybiBuYW1lO1xuICAgIH0sXG5cbiAgICBfaW5pdFhIUkRhdGE6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIGZvcm1EYXRhLFxuICAgICAgICBmaWxlID0gb3B0aW9ucy5maWxlc1swXSxcbiAgICAgICAgLy8gSWdub3JlIG5vbi1tdWx0aXBhcnQgc2V0dGluZyBpZiBub3Qgc3VwcG9ydGVkOlxuICAgICAgICBtdWx0aXBhcnQgPSBvcHRpb25zLm11bHRpcGFydCB8fCAhJC5zdXBwb3J0LnhockZpbGVVcGxvYWQsXG4gICAgICAgIHBhcmFtTmFtZSA9XG4gICAgICAgICAgJC50eXBlKG9wdGlvbnMucGFyYW1OYW1lKSA9PT0gJ2FycmF5J1xuICAgICAgICAgICAgPyBvcHRpb25zLnBhcmFtTmFtZVswXVxuICAgICAgICAgICAgOiBvcHRpb25zLnBhcmFtTmFtZTtcbiAgICAgIG9wdGlvbnMuaGVhZGVycyA9ICQuZXh0ZW5kKHt9LCBvcHRpb25zLmhlYWRlcnMpO1xuICAgICAgaWYgKG9wdGlvbnMuY29udGVudFJhbmdlKSB7XG4gICAgICAgIG9wdGlvbnMuaGVhZGVyc1snQ29udGVudC1SYW5nZSddID0gb3B0aW9ucy5jb250ZW50UmFuZ2U7XG4gICAgICB9XG4gICAgICBpZiAoIW11bHRpcGFydCB8fCBvcHRpb25zLmJsb2IgfHwgIXRoaXMuX2lzSW5zdGFuY2VPZignRmlsZScsIGZpbGUpKSB7XG4gICAgICAgIG9wdGlvbnMuaGVhZGVyc1snQ29udGVudC1EaXNwb3NpdGlvbiddID1cbiAgICAgICAgICAnYXR0YWNobWVudDsgZmlsZW5hbWU9XCInICtcbiAgICAgICAgICBlbmNvZGVVUkkoZmlsZS51cGxvYWROYW1lIHx8IGZpbGUubmFtZSkgK1xuICAgICAgICAgICdcIic7XG4gICAgICB9XG4gICAgICBpZiAoIW11bHRpcGFydCkge1xuICAgICAgICBvcHRpb25zLmNvbnRlbnRUeXBlID0gZmlsZS50eXBlIHx8ICdhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nO1xuICAgICAgICBvcHRpb25zLmRhdGEgPSBvcHRpb25zLmJsb2IgfHwgZmlsZTtcbiAgICAgIH0gZWxzZSBpZiAoJC5zdXBwb3J0LnhockZvcm1EYXRhRmlsZVVwbG9hZCkge1xuICAgICAgICBpZiAob3B0aW9ucy5wb3N0TWVzc2FnZSkge1xuICAgICAgICAgIC8vIHdpbmRvdy5wb3N0TWVzc2FnZSBkb2VzIG5vdCBhbGxvdyBzZW5kaW5nIEZvcm1EYXRhXG4gICAgICAgICAgLy8gb2JqZWN0cywgc28gd2UganVzdCBhZGQgdGhlIEZpbGUvQmxvYiBvYmplY3RzIHRvXG4gICAgICAgICAgLy8gdGhlIGZvcm1EYXRhIGFycmF5IGFuZCBsZXQgdGhlIHBvc3RNZXNzYWdlIHdpbmRvd1xuICAgICAgICAgIC8vIGNyZWF0ZSB0aGUgRm9ybURhdGEgb2JqZWN0IG91dCBvZiB0aGlzIGFycmF5OlxuICAgICAgICAgIGZvcm1EYXRhID0gdGhpcy5fZ2V0Rm9ybURhdGEob3B0aW9ucyk7XG4gICAgICAgICAgaWYgKG9wdGlvbnMuYmxvYikge1xuICAgICAgICAgICAgZm9ybURhdGEucHVzaCh7XG4gICAgICAgICAgICAgIG5hbWU6IHBhcmFtTmFtZSxcbiAgICAgICAgICAgICAgdmFsdWU6IG9wdGlvbnMuYmxvYlxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICQuZWFjaChvcHRpb25zLmZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGZpbGUpIHtcbiAgICAgICAgICAgICAgZm9ybURhdGEucHVzaCh7XG4gICAgICAgICAgICAgICAgbmFtZTpcbiAgICAgICAgICAgICAgICAgICgkLnR5cGUob3B0aW9ucy5wYXJhbU5hbWUpID09PSAnYXJyYXknICYmXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMucGFyYW1OYW1lW2luZGV4XSkgfHxcbiAgICAgICAgICAgICAgICAgIHBhcmFtTmFtZSxcbiAgICAgICAgICAgICAgICB2YWx1ZTogZmlsZVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodGhhdC5faXNJbnN0YW5jZU9mKCdGb3JtRGF0YScsIG9wdGlvbnMuZm9ybURhdGEpKSB7XG4gICAgICAgICAgICBmb3JtRGF0YSA9IG9wdGlvbnMuZm9ybURhdGE7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGZvcm1EYXRhID0gbmV3IEZvcm1EYXRhKCk7XG4gICAgICAgICAgICAkLmVhY2godGhpcy5fZ2V0Rm9ybURhdGEob3B0aW9ucyksIGZ1bmN0aW9uIChpbmRleCwgZmllbGQpIHtcbiAgICAgICAgICAgICAgZm9ybURhdGEuYXBwZW5kKGZpZWxkLm5hbWUsIGZpZWxkLnZhbHVlKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAob3B0aW9ucy5ibG9iKSB7XG4gICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoXG4gICAgICAgICAgICAgIHBhcmFtTmFtZSxcbiAgICAgICAgICAgICAgb3B0aW9ucy5ibG9iLFxuICAgICAgICAgICAgICBmaWxlLnVwbG9hZE5hbWUgfHwgZmlsZS5uYW1lXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAkLmVhY2gob3B0aW9ucy5maWxlcywgZnVuY3Rpb24gKGluZGV4LCBmaWxlKSB7XG4gICAgICAgICAgICAgIC8vIFRoaXMgY2hlY2sgYWxsb3dzIHRoZSB0ZXN0cyB0byBydW4gd2l0aFxuICAgICAgICAgICAgICAvLyBkdW1teSBvYmplY3RzOlxuICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgdGhhdC5faXNJbnN0YW5jZU9mKCdGaWxlJywgZmlsZSkgfHxcbiAgICAgICAgICAgICAgICB0aGF0Ll9pc0luc3RhbmNlT2YoJ0Jsb2InLCBmaWxlKVxuICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB2YXIgZmlsZU5hbWUgPSBmaWxlLnVwbG9hZE5hbWUgfHwgZmlsZS5uYW1lO1xuICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnVuaXF1ZUZpbGVuYW1lcykge1xuICAgICAgICAgICAgICAgICAgZmlsZU5hbWUgPSB0aGF0Ll9nZXRVbmlxdWVGaWxlbmFtZShcbiAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMudW5pcXVlRmlsZW5hbWVzXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmb3JtRGF0YS5hcHBlbmQoXG4gICAgICAgICAgICAgICAgICAoJC50eXBlKG9wdGlvbnMucGFyYW1OYW1lKSA9PT0gJ2FycmF5JyAmJlxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLnBhcmFtTmFtZVtpbmRleF0pIHx8XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtTmFtZSxcbiAgICAgICAgICAgICAgICAgIGZpbGUsXG4gICAgICAgICAgICAgICAgICBmaWxlTmFtZVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBvcHRpb25zLmRhdGEgPSBmb3JtRGF0YTtcbiAgICAgIH1cbiAgICAgIC8vIEJsb2IgcmVmZXJlbmNlIGlzIG5vdCBuZWVkZWQgYW55bW9yZSwgZnJlZSBtZW1vcnk6XG4gICAgICBvcHRpb25zLmJsb2IgPSBudWxsO1xuICAgIH0sXG5cbiAgICBfaW5pdElmcmFtZVNldHRpbmdzOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgdmFyIHRhcmdldEhvc3QgPSAkKCc8YT48L2E+JykucHJvcCgnaHJlZicsIG9wdGlvbnMudXJsKS5wcm9wKCdob3N0Jyk7XG4gICAgICAvLyBTZXR0aW5nIHRoZSBkYXRhVHlwZSB0byBpZnJhbWUgZW5hYmxlcyB0aGUgaWZyYW1lIHRyYW5zcG9ydDpcbiAgICAgIG9wdGlvbnMuZGF0YVR5cGUgPSAnaWZyYW1lICcgKyAob3B0aW9ucy5kYXRhVHlwZSB8fCAnJyk7XG4gICAgICAvLyBUaGUgaWZyYW1lIHRyYW5zcG9ydCBhY2NlcHRzIGEgc2VyaWFsaXplZCBhcnJheSBhcyBmb3JtIGRhdGE6XG4gICAgICBvcHRpb25zLmZvcm1EYXRhID0gdGhpcy5fZ2V0Rm9ybURhdGEob3B0aW9ucyk7XG4gICAgICAvLyBBZGQgcmVkaXJlY3QgdXJsIHRvIGZvcm0gZGF0YSBvbiBjcm9zcy1kb21haW4gdXBsb2FkczpcbiAgICAgIGlmIChvcHRpb25zLnJlZGlyZWN0ICYmIHRhcmdldEhvc3QgJiYgdGFyZ2V0SG9zdCAhPT0gbG9jYXRpb24uaG9zdCkge1xuICAgICAgICBvcHRpb25zLmZvcm1EYXRhLnB1c2goe1xuICAgICAgICAgIG5hbWU6IG9wdGlvbnMucmVkaXJlY3RQYXJhbU5hbWUgfHwgJ3JlZGlyZWN0JyxcbiAgICAgICAgICB2YWx1ZTogb3B0aW9ucy5yZWRpcmVjdFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2luaXREYXRhU2V0dGluZ3M6IGZ1bmN0aW9uIChvcHRpb25zKSB7XG4gICAgICBpZiAodGhpcy5faXNYSFJVcGxvYWQob3B0aW9ucykpIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jaHVua2VkVXBsb2FkKG9wdGlvbnMsIHRydWUpKSB7XG4gICAgICAgICAgaWYgKCFvcHRpb25zLmRhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuX2luaXRYSFJEYXRhKG9wdGlvbnMpO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aGlzLl9pbml0UHJvZ3Jlc3NMaXN0ZW5lcihvcHRpb25zKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5wb3N0TWVzc2FnZSkge1xuICAgICAgICAgIC8vIFNldHRpbmcgdGhlIGRhdGFUeXBlIHRvIHBvc3RtZXNzYWdlIGVuYWJsZXMgdGhlXG4gICAgICAgICAgLy8gcG9zdE1lc3NhZ2UgdHJhbnNwb3J0OlxuICAgICAgICAgIG9wdGlvbnMuZGF0YVR5cGUgPSAncG9zdG1lc3NhZ2UgJyArIChvcHRpb25zLmRhdGFUeXBlIHx8ICcnKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5faW5pdElmcmFtZVNldHRpbmdzKG9wdGlvbnMpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfZ2V0UGFyYW1OYW1lOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgdmFyIGZpbGVJbnB1dCA9ICQob3B0aW9ucy5maWxlSW5wdXQpLFxuICAgICAgICBwYXJhbU5hbWUgPSBvcHRpb25zLnBhcmFtTmFtZTtcbiAgICAgIGlmICghcGFyYW1OYW1lKSB7XG4gICAgICAgIHBhcmFtTmFtZSA9IFtdO1xuICAgICAgICBmaWxlSW5wdXQuZWFjaChmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgdmFyIGlucHV0ID0gJCh0aGlzKSxcbiAgICAgICAgICAgIG5hbWUgPSBpbnB1dC5wcm9wKCduYW1lJykgfHwgJ2ZpbGVzW10nLFxuICAgICAgICAgICAgaSA9IChpbnB1dC5wcm9wKCdmaWxlcycpIHx8IFsxXSkubGVuZ3RoO1xuICAgICAgICAgIHdoaWxlIChpKSB7XG4gICAgICAgICAgICBwYXJhbU5hbWUucHVzaChuYW1lKTtcbiAgICAgICAgICAgIGkgLT0gMTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoIXBhcmFtTmFtZS5sZW5ndGgpIHtcbiAgICAgICAgICBwYXJhbU5hbWUgPSBbZmlsZUlucHV0LnByb3AoJ25hbWUnKSB8fCAnZmlsZXNbXSddO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKCEkLmlzQXJyYXkocGFyYW1OYW1lKSkge1xuICAgICAgICBwYXJhbU5hbWUgPSBbcGFyYW1OYW1lXTtcbiAgICAgIH1cbiAgICAgIHJldHVybiBwYXJhbU5hbWU7XG4gICAgfSxcblxuICAgIF9pbml0Rm9ybVNldHRpbmdzOiBmdW5jdGlvbiAob3B0aW9ucykge1xuICAgICAgLy8gUmV0cmlldmUgbWlzc2luZyBvcHRpb25zIGZyb20gdGhlIGlucHV0IGZpZWxkIGFuZCB0aGVcbiAgICAgIC8vIGFzc29jaWF0ZWQgZm9ybSwgaWYgYXZhaWxhYmxlOlxuICAgICAgaWYgKCFvcHRpb25zLmZvcm0gfHwgIW9wdGlvbnMuZm9ybS5sZW5ndGgpIHtcbiAgICAgICAgb3B0aW9ucy5mb3JtID0gJChvcHRpb25zLmZpbGVJbnB1dC5wcm9wKCdmb3JtJykpO1xuICAgICAgICAvLyBJZiB0aGUgZ2l2ZW4gZmlsZSBpbnB1dCBkb2Vzbid0IGhhdmUgYW4gYXNzb2NpYXRlZCBmb3JtLFxuICAgICAgICAvLyB1c2UgdGhlIGRlZmF1bHQgd2lkZ2V0IGZpbGUgaW5wdXQncyBmb3JtOlxuICAgICAgICBpZiAoIW9wdGlvbnMuZm9ybS5sZW5ndGgpIHtcbiAgICAgICAgICBvcHRpb25zLmZvcm0gPSAkKHRoaXMub3B0aW9ucy5maWxlSW5wdXQucHJvcCgnZm9ybScpKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgb3B0aW9ucy5wYXJhbU5hbWUgPSB0aGlzLl9nZXRQYXJhbU5hbWUob3B0aW9ucyk7XG4gICAgICBpZiAoIW9wdGlvbnMudXJsKSB7XG4gICAgICAgIG9wdGlvbnMudXJsID0gb3B0aW9ucy5mb3JtLnByb3AoJ2FjdGlvbicpIHx8IGxvY2F0aW9uLmhyZWY7XG4gICAgICB9XG4gICAgICAvLyBUaGUgSFRUUCByZXF1ZXN0IG1ldGhvZCBtdXN0IGJlIFwiUE9TVFwiIG9yIFwiUFVUXCI6XG4gICAgICBvcHRpb25zLnR5cGUgPSAoXG4gICAgICAgIG9wdGlvbnMudHlwZSB8fFxuICAgICAgICAoJC50eXBlKG9wdGlvbnMuZm9ybS5wcm9wKCdtZXRob2QnKSkgPT09ICdzdHJpbmcnICYmXG4gICAgICAgICAgb3B0aW9ucy5mb3JtLnByb3AoJ21ldGhvZCcpKSB8fFxuICAgICAgICAnJ1xuICAgICAgKS50b1VwcGVyQ2FzZSgpO1xuICAgICAgaWYgKFxuICAgICAgICBvcHRpb25zLnR5cGUgIT09ICdQT1NUJyAmJlxuICAgICAgICBvcHRpb25zLnR5cGUgIT09ICdQVVQnICYmXG4gICAgICAgIG9wdGlvbnMudHlwZSAhPT0gJ1BBVENIJ1xuICAgICAgKSB7XG4gICAgICAgIG9wdGlvbnMudHlwZSA9ICdQT1NUJztcbiAgICAgIH1cbiAgICAgIGlmICghb3B0aW9ucy5mb3JtQWNjZXB0Q2hhcnNldCkge1xuICAgICAgICBvcHRpb25zLmZvcm1BY2NlcHRDaGFyc2V0ID0gb3B0aW9ucy5mb3JtLmF0dHIoJ2FjY2VwdC1jaGFyc2V0Jyk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9nZXRBSkFYU2V0dGluZ3M6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICB2YXIgb3B0aW9ucyA9ICQuZXh0ZW5kKHt9LCB0aGlzLm9wdGlvbnMsIGRhdGEpO1xuICAgICAgdGhpcy5faW5pdEZvcm1TZXR0aW5ncyhvcHRpb25zKTtcbiAgICAgIHRoaXMuX2luaXREYXRhU2V0dGluZ3Mob3B0aW9ucyk7XG4gICAgICByZXR1cm4gb3B0aW9ucztcbiAgICB9LFxuXG4gICAgLy8galF1ZXJ5IDEuNiBkb2Vzbid0IHByb3ZpZGUgLnN0YXRlKCksXG4gICAgLy8gd2hpbGUgalF1ZXJ5IDEuOCsgcmVtb3ZlZCAuaXNSZWplY3RlZCgpIGFuZCAuaXNSZXNvbHZlZCgpOlxuICAgIF9nZXREZWZlcnJlZFN0YXRlOiBmdW5jdGlvbiAoZGVmZXJyZWQpIHtcbiAgICAgIGlmIChkZWZlcnJlZC5zdGF0ZSkge1xuICAgICAgICByZXR1cm4gZGVmZXJyZWQuc3RhdGUoKTtcbiAgICAgIH1cbiAgICAgIGlmIChkZWZlcnJlZC5pc1Jlc29sdmVkKCkpIHtcbiAgICAgICAgcmV0dXJuICdyZXNvbHZlZCc7XG4gICAgICB9XG4gICAgICBpZiAoZGVmZXJyZWQuaXNSZWplY3RlZCgpKSB7XG4gICAgICAgIHJldHVybiAncmVqZWN0ZWQnO1xuICAgICAgfVxuICAgICAgcmV0dXJuICdwZW5kaW5nJztcbiAgICB9LFxuXG4gICAgLy8gTWFwcyBqcVhIUiBjYWxsYmFja3MgdG8gdGhlIGVxdWl2YWxlbnRcbiAgICAvLyBtZXRob2RzIG9mIHRoZSBnaXZlbiBQcm9taXNlIG9iamVjdDpcbiAgICBfZW5oYW5jZVByb21pc2U6IGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgICBwcm9taXNlLnN1Y2Nlc3MgPSBwcm9taXNlLmRvbmU7XG4gICAgICBwcm9taXNlLmVycm9yID0gcHJvbWlzZS5mYWlsO1xuICAgICAgcHJvbWlzZS5jb21wbGV0ZSA9IHByb21pc2UuYWx3YXlzO1xuICAgICAgcmV0dXJuIHByb21pc2U7XG4gICAgfSxcblxuICAgIC8vIENyZWF0ZXMgYW5kIHJldHVybnMgYSBQcm9taXNlIG9iamVjdCBlbmhhbmNlZCB3aXRoXG4gICAgLy8gdGhlIGpxWEhSIG1ldGhvZHMgYWJvcnQsIHN1Y2Nlc3MsIGVycm9yIGFuZCBjb21wbGV0ZTpcbiAgICBfZ2V0WEhSUHJvbWlzZTogZnVuY3Rpb24gKHJlc29sdmVPclJlamVjdCwgY29udGV4dCwgYXJncykge1xuICAgICAgdmFyIGRmZCA9ICQuRGVmZXJyZWQoKSxcbiAgICAgICAgcHJvbWlzZSA9IGRmZC5wcm9taXNlKCk7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIGNvbnRleHQgPSBjb250ZXh0IHx8IHRoaXMub3B0aW9ucy5jb250ZXh0IHx8IHByb21pc2U7XG4gICAgICBpZiAocmVzb2x2ZU9yUmVqZWN0ID09PSB0cnVlKSB7XG4gICAgICAgIGRmZC5yZXNvbHZlV2l0aChjb250ZXh0LCBhcmdzKTtcbiAgICAgIH0gZWxzZSBpZiAocmVzb2x2ZU9yUmVqZWN0ID09PSBmYWxzZSkge1xuICAgICAgICBkZmQucmVqZWN0V2l0aChjb250ZXh0LCBhcmdzKTtcbiAgICAgIH1cbiAgICAgIHByb21pc2UuYWJvcnQgPSBkZmQucHJvbWlzZTtcbiAgICAgIHJldHVybiB0aGlzLl9lbmhhbmNlUHJvbWlzZShwcm9taXNlKTtcbiAgICB9LFxuXG4gICAgLy8gQWRkcyBjb252ZW5pZW5jZSBtZXRob2RzIHRvIHRoZSBkYXRhIGNhbGxiYWNrIGFyZ3VtZW50OlxuICAgIF9hZGRDb252ZW5pZW5jZU1ldGhvZHM6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XG4gICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIGdldFByb21pc2UgPSBmdW5jdGlvbiAoYXJncykge1xuICAgICAgICAgIHJldHVybiAkLkRlZmVycmVkKCkucmVzb2x2ZVdpdGgodGhhdCwgYXJncykucHJvbWlzZSgpO1xuICAgICAgICB9O1xuICAgICAgZGF0YS5wcm9jZXNzID0gZnVuY3Rpb24gKHJlc29sdmVGdW5jLCByZWplY3RGdW5jKSB7XG4gICAgICAgIGlmIChyZXNvbHZlRnVuYyB8fCByZWplY3RGdW5jKSB7XG4gICAgICAgICAgZGF0YS5fcHJvY2Vzc1F1ZXVlID0gdGhpcy5fcHJvY2Vzc1F1ZXVlID0gKHRoaXMuX3Byb2Nlc3NRdWV1ZSB8fFxuICAgICAgICAgICAgZ2V0UHJvbWlzZShbdGhpc10pKVxuICAgICAgICAgICAgW3RoYXQuX3Byb21pc2VQaXBlXShmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICAgIGlmIChkYXRhLmVycm9yVGhyb3duKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICQuRGVmZXJyZWQoKS5yZWplY3RXaXRoKHRoYXQsIFtkYXRhXSkucHJvbWlzZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBnZXRQcm9taXNlKGFyZ3VtZW50cyk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgW3RoYXQuX3Byb21pc2VQaXBlXShyZXNvbHZlRnVuYywgcmVqZWN0RnVuYyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2Nlc3NRdWV1ZSB8fCBnZXRQcm9taXNlKFt0aGlzXSk7XG4gICAgICB9O1xuICAgICAgZGF0YS5zdWJtaXQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLnN0YXRlKCkgIT09ICdwZW5kaW5nJykge1xuICAgICAgICAgIGRhdGEuanFYSFIgPSB0aGlzLmpxWEhSID1cbiAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoXG4gICAgICAgICAgICAgICdzdWJtaXQnLFxuICAgICAgICAgICAgICAkLkV2ZW50KCdzdWJtaXQnLCB7IGRlbGVnYXRlZEV2ZW50OiBlIH0pLFxuICAgICAgICAgICAgICB0aGlzXG4gICAgICAgICAgICApICE9PSBmYWxzZSAmJiB0aGF0Ll9vblNlbmQoZSwgdGhpcyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXMuanFYSFIgfHwgdGhhdC5fZ2V0WEhSUHJvbWlzZSgpO1xuICAgICAgfTtcbiAgICAgIGRhdGEuYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIGlmICh0aGlzLmpxWEhSKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMuanFYSFIuYWJvcnQoKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmVycm9yVGhyb3duID0gJ2Fib3J0JztcbiAgICAgICAgdGhhdC5fdHJpZ2dlcignZmFpbCcsIG51bGwsIHRoaXMpO1xuICAgICAgICByZXR1cm4gdGhhdC5fZ2V0WEhSUHJvbWlzZShmYWxzZSk7XG4gICAgICB9O1xuICAgICAgZGF0YS5zdGF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgaWYgKHRoaXMuanFYSFIpIHtcbiAgICAgICAgICByZXR1cm4gdGhhdC5fZ2V0RGVmZXJyZWRTdGF0ZSh0aGlzLmpxWEhSKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fcHJvY2Vzc1F1ZXVlKSB7XG4gICAgICAgICAgcmV0dXJuIHRoYXQuX2dldERlZmVycmVkU3RhdGUodGhpcy5fcHJvY2Vzc1F1ZXVlKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGRhdGEucHJvY2Vzc2luZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAhdGhpcy5qcVhIUiAmJlxuICAgICAgICAgIHRoaXMuX3Byb2Nlc3NRdWV1ZSAmJlxuICAgICAgICAgIHRoYXQuX2dldERlZmVycmVkU3RhdGUodGhpcy5fcHJvY2Vzc1F1ZXVlKSA9PT0gJ3BlbmRpbmcnXG4gICAgICAgICk7XG4gICAgICB9O1xuICAgICAgZGF0YS5wcm9ncmVzcyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Byb2dyZXNzO1xuICAgICAgfTtcbiAgICAgIGRhdGEucmVzcG9uc2UgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yZXNwb25zZTtcbiAgICAgIH07XG4gICAgfSxcblxuICAgIC8vIFBhcnNlcyB0aGUgUmFuZ2UgaGVhZGVyIGZyb20gdGhlIHNlcnZlciByZXNwb25zZVxuICAgIC8vIGFuZCByZXR1cm5zIHRoZSB1cGxvYWRlZCBieXRlczpcbiAgICBfZ2V0VXBsb2FkZWRCeXRlczogZnVuY3Rpb24gKGpxWEhSKSB7XG4gICAgICB2YXIgcmFuZ2UgPSBqcVhIUi5nZXRSZXNwb25zZUhlYWRlcignUmFuZ2UnKSxcbiAgICAgICAgcGFydHMgPSByYW5nZSAmJiByYW5nZS5zcGxpdCgnLScpLFxuICAgICAgICB1cHBlckJ5dGVzUG9zID0gcGFydHMgJiYgcGFydHMubGVuZ3RoID4gMSAmJiBwYXJzZUludChwYXJ0c1sxXSwgMTApO1xuICAgICAgcmV0dXJuIHVwcGVyQnl0ZXNQb3MgJiYgdXBwZXJCeXRlc1BvcyArIDE7XG4gICAgfSxcblxuICAgIC8vIFVwbG9hZHMgYSBmaWxlIGluIG11bHRpcGxlLCBzZXF1ZW50aWFsIHJlcXVlc3RzXG4gICAgLy8gYnkgc3BsaXR0aW5nIHRoZSBmaWxlIHVwIGluIG11bHRpcGxlIGJsb2IgY2h1bmtzLlxuICAgIC8vIElmIHRoZSBzZWNvbmQgcGFyYW1ldGVyIGlzIHRydWUsIG9ubHkgdGVzdHMgaWYgdGhlIGZpbGVcbiAgICAvLyBzaG91bGQgYmUgdXBsb2FkZWQgaW4gY2h1bmtzLCBidXQgZG9lcyBub3QgaW52b2tlIGFueVxuICAgIC8vIHVwbG9hZCByZXF1ZXN0czpcbiAgICBfY2h1bmtlZFVwbG9hZDogZnVuY3Rpb24gKG9wdGlvbnMsIHRlc3RPbmx5KSB7XG4gICAgICBvcHRpb25zLnVwbG9hZGVkQnl0ZXMgPSBvcHRpb25zLnVwbG9hZGVkQnl0ZXMgfHwgMDtcbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgZmlsZSA9IG9wdGlvbnMuZmlsZXNbMF0sXG4gICAgICAgIGZzID0gZmlsZS5zaXplLFxuICAgICAgICB1YiA9IG9wdGlvbnMudXBsb2FkZWRCeXRlcyxcbiAgICAgICAgbWNzID0gb3B0aW9ucy5tYXhDaHVua1NpemUgfHwgZnMsXG4gICAgICAgIHNsaWNlID0gdGhpcy5fYmxvYlNsaWNlLFxuICAgICAgICBkZmQgPSAkLkRlZmVycmVkKCksXG4gICAgICAgIHByb21pc2UgPSBkZmQucHJvbWlzZSgpLFxuICAgICAgICBqcVhIUixcbiAgICAgICAgdXBsb2FkO1xuICAgICAgaWYgKFxuICAgICAgICAhKFxuICAgICAgICAgIHRoaXMuX2lzWEhSVXBsb2FkKG9wdGlvbnMpICYmXG4gICAgICAgICAgc2xpY2UgJiZcbiAgICAgICAgICAodWIgfHwgKCQudHlwZShtY3MpID09PSAnZnVuY3Rpb24nID8gbWNzKG9wdGlvbnMpIDogbWNzKSA8IGZzKVxuICAgICAgICApIHx8XG4gICAgICAgIG9wdGlvbnMuZGF0YVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmICh0ZXN0T25seSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmICh1YiA+PSBmcykge1xuICAgICAgICBmaWxlLmVycm9yID0gb3B0aW9ucy5pMThuKCd1cGxvYWRlZEJ5dGVzJyk7XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRYSFJQcm9taXNlKGZhbHNlLCBvcHRpb25zLmNvbnRleHQsIFtcbiAgICAgICAgICBudWxsLFxuICAgICAgICAgICdlcnJvcicsXG4gICAgICAgICAgZmlsZS5lcnJvclxuICAgICAgICBdKTtcbiAgICAgIH1cbiAgICAgIC8vIFRoZSBjaHVuayB1cGxvYWQgbWV0aG9kOlxuICAgICAgdXBsb2FkID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAvLyBDbG9uZSB0aGUgb3B0aW9ucyBvYmplY3QgZm9yIGVhY2ggY2h1bmsgdXBsb2FkOlxuICAgICAgICB2YXIgbyA9ICQuZXh0ZW5kKHt9LCBvcHRpb25zKSxcbiAgICAgICAgICBjdXJyZW50TG9hZGVkID0gby5fcHJvZ3Jlc3MubG9hZGVkO1xuICAgICAgICBvLmJsb2IgPSBzbGljZS5jYWxsKFxuICAgICAgICAgIGZpbGUsXG4gICAgICAgICAgdWIsXG4gICAgICAgICAgdWIgKyAoJC50eXBlKG1jcykgPT09ICdmdW5jdGlvbicgPyBtY3MobykgOiBtY3MpLFxuICAgICAgICAgIGZpbGUudHlwZVxuICAgICAgICApO1xuICAgICAgICAvLyBTdG9yZSB0aGUgY3VycmVudCBjaHVuayBzaXplLCBhcyB0aGUgYmxvYiBpdHNlbGZcbiAgICAgICAgLy8gd2lsbCBiZSBkZXJlZmVyZW5jZWQgYWZ0ZXIgZGF0YSBwcm9jZXNzaW5nOlxuICAgICAgICBvLmNodW5rU2l6ZSA9IG8uYmxvYi5zaXplO1xuICAgICAgICAvLyBFeHBvc2UgdGhlIGNodW5rIGJ5dGVzIHBvc2l0aW9uIHJhbmdlOlxuICAgICAgICBvLmNvbnRlbnRSYW5nZSA9XG4gICAgICAgICAgJ2J5dGVzICcgKyB1YiArICctJyArICh1YiArIG8uY2h1bmtTaXplIC0gMSkgKyAnLycgKyBmcztcbiAgICAgICAgLy8gVHJpZ2dlciBjaHVua2JlZm9yZXNlbmQgdG8gYWxsb3cgZm9ybSBkYXRhIHRvIGJlIHVwZGF0ZWQgZm9yIHRoaXMgY2h1bmtcbiAgICAgICAgdGhhdC5fdHJpZ2dlcignY2h1bmtiZWZvcmVzZW5kJywgbnVsbCwgbyk7XG4gICAgICAgIC8vIFByb2Nlc3MgdGhlIHVwbG9hZCBkYXRhICh0aGUgYmxvYiBhbmQgcG90ZW50aWFsIGZvcm0gZGF0YSk6XG4gICAgICAgIHRoYXQuX2luaXRYSFJEYXRhKG8pO1xuICAgICAgICAvLyBBZGQgcHJvZ3Jlc3MgbGlzdGVuZXJzIGZvciB0aGlzIGNodW5rIHVwbG9hZDpcbiAgICAgICAgdGhhdC5faW5pdFByb2dyZXNzTGlzdGVuZXIobyk7XG4gICAgICAgIGpxWEhSID0gKFxuICAgICAgICAgICh0aGF0Ll90cmlnZ2VyKCdjaHVua3NlbmQnLCBudWxsLCBvKSAhPT0gZmFsc2UgJiYgJC5hamF4KG8pKSB8fFxuICAgICAgICAgIHRoYXQuX2dldFhIUlByb21pc2UoZmFsc2UsIG8uY29udGV4dClcbiAgICAgICAgKVxuICAgICAgICAgIC5kb25lKGZ1bmN0aW9uIChyZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSKSB7XG4gICAgICAgICAgICB1YiA9IHRoYXQuX2dldFVwbG9hZGVkQnl0ZXMoanFYSFIpIHx8IHViICsgby5jaHVua1NpemU7XG4gICAgICAgICAgICAvLyBDcmVhdGUgYSBwcm9ncmVzcyBldmVudCBpZiBubyBmaW5hbCBwcm9ncmVzcyBldmVudFxuICAgICAgICAgICAgLy8gd2l0aCBsb2FkZWQgZXF1YWxpbmcgdG90YWwgaGFzIGJlZW4gdHJpZ2dlcmVkXG4gICAgICAgICAgICAvLyBmb3IgdGhpcyBjaHVuazpcbiAgICAgICAgICAgIGlmIChjdXJyZW50TG9hZGVkICsgby5jaHVua1NpemUgLSBvLl9wcm9ncmVzcy5sb2FkZWQpIHtcbiAgICAgICAgICAgICAgdGhhdC5fb25Qcm9ncmVzcyhcbiAgICAgICAgICAgICAgICAkLkV2ZW50KCdwcm9ncmVzcycsIHtcbiAgICAgICAgICAgICAgICAgIGxlbmd0aENvbXB1dGFibGU6IHRydWUsXG4gICAgICAgICAgICAgICAgICBsb2FkZWQ6IHViIC0gby51cGxvYWRlZEJ5dGVzLFxuICAgICAgICAgICAgICAgICAgdG90YWw6IHViIC0gby51cGxvYWRlZEJ5dGVzXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgb1xuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3B0aW9ucy51cGxvYWRlZEJ5dGVzID0gby51cGxvYWRlZEJ5dGVzID0gdWI7XG4gICAgICAgICAgICBvLnJlc3VsdCA9IHJlc3VsdDtcbiAgICAgICAgICAgIG8udGV4dFN0YXR1cyA9IHRleHRTdGF0dXM7XG4gICAgICAgICAgICBvLmpxWEhSID0ganFYSFI7XG4gICAgICAgICAgICB0aGF0Ll90cmlnZ2VyKCdjaHVua2RvbmUnLCBudWxsLCBvKTtcbiAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoJ2NodW5rYWx3YXlzJywgbnVsbCwgbyk7XG4gICAgICAgICAgICBpZiAodWIgPCBmcykge1xuICAgICAgICAgICAgICAvLyBGaWxlIHVwbG9hZCBub3QgeWV0IGNvbXBsZXRlLFxuICAgICAgICAgICAgICAvLyBjb250aW51ZSB3aXRoIHRoZSBuZXh0IGNodW5rOlxuICAgICAgICAgICAgICB1cGxvYWQoKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGRmZC5yZXNvbHZlV2l0aChvLmNvbnRleHQsIFtyZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuZmFpbChmdW5jdGlvbiAoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKSB7XG4gICAgICAgICAgICBvLmpxWEhSID0ganFYSFI7XG4gICAgICAgICAgICBvLnRleHRTdGF0dXMgPSB0ZXh0U3RhdHVzO1xuICAgICAgICAgICAgby5lcnJvclRocm93biA9IGVycm9yVGhyb3duO1xuICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcignY2h1bmtmYWlsJywgbnVsbCwgbyk7XG4gICAgICAgICAgICB0aGF0Ll90cmlnZ2VyKCdjaHVua2Fsd2F5cycsIG51bGwsIG8pO1xuICAgICAgICAgICAgZGZkLnJlamVjdFdpdGgoby5jb250ZXh0LCBbanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duXSk7XG4gICAgICAgICAgfSlcbiAgICAgICAgICAuYWx3YXlzKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHRoYXQuX2RlaW5pdFByb2dyZXNzTGlzdGVuZXIobyk7XG4gICAgICAgICAgfSk7XG4gICAgICB9O1xuICAgICAgdGhpcy5fZW5oYW5jZVByb21pc2UocHJvbWlzZSk7XG4gICAgICBwcm9taXNlLmFib3J0ID0gZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4ganFYSFIuYWJvcnQoKTtcbiAgICAgIH07XG4gICAgICB1cGxvYWQoKTtcbiAgICAgIHJldHVybiBwcm9taXNlO1xuICAgIH0sXG5cbiAgICBfYmVmb3JlU2VuZDogZnVuY3Rpb24gKGUsIGRhdGEpIHtcbiAgICAgIGlmICh0aGlzLl9hY3RpdmUgPT09IDApIHtcbiAgICAgICAgLy8gdGhlIHN0YXJ0IGNhbGxiYWNrIGlzIHRyaWdnZXJlZCB3aGVuIGFuIHVwbG9hZCBzdGFydHNcbiAgICAgICAgLy8gYW5kIG5vIG90aGVyIHVwbG9hZHMgYXJlIGN1cnJlbnRseSBydW5uaW5nLFxuICAgICAgICAvLyBlcXVpdmFsZW50IHRvIHRoZSBnbG9iYWwgYWpheFN0YXJ0IGV2ZW50OlxuICAgICAgICB0aGlzLl90cmlnZ2VyKCdzdGFydCcpO1xuICAgICAgICAvLyBTZXQgdGltZXIgZm9yIGdsb2JhbCBiaXRyYXRlIHByb2dyZXNzIGNhbGN1bGF0aW9uOlxuICAgICAgICB0aGlzLl9iaXRyYXRlVGltZXIgPSBuZXcgdGhpcy5fQml0cmF0ZVRpbWVyKCk7XG4gICAgICAgIC8vIFJlc2V0IHRoZSBnbG9iYWwgcHJvZ3Jlc3MgdmFsdWVzOlxuICAgICAgICB0aGlzLl9wcm9ncmVzcy5sb2FkZWQgPSB0aGlzLl9wcm9ncmVzcy50b3RhbCA9IDA7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzLmJpdHJhdGUgPSAwO1xuICAgICAgfVxuICAgICAgLy8gTWFrZSBzdXJlIHRoZSBjb250YWluZXIgb2JqZWN0cyBmb3IgdGhlIC5yZXNwb25zZSgpIGFuZFxuICAgICAgLy8gLnByb2dyZXNzKCkgbWV0aG9kcyBvbiB0aGUgZGF0YSBvYmplY3QgYXJlIGF2YWlsYWJsZVxuICAgICAgLy8gYW5kIHJlc2V0IHRvIHRoZWlyIGluaXRpYWwgc3RhdGU6XG4gICAgICB0aGlzLl9pbml0UmVzcG9uc2VPYmplY3QoZGF0YSk7XG4gICAgICB0aGlzLl9pbml0UHJvZ3Jlc3NPYmplY3QoZGF0YSk7XG4gICAgICBkYXRhLl9wcm9ncmVzcy5sb2FkZWQgPSBkYXRhLmxvYWRlZCA9IGRhdGEudXBsb2FkZWRCeXRlcyB8fCAwO1xuICAgICAgZGF0YS5fcHJvZ3Jlc3MudG90YWwgPSBkYXRhLnRvdGFsID0gdGhpcy5fZ2V0VG90YWwoZGF0YS5maWxlcykgfHwgMTtcbiAgICAgIGRhdGEuX3Byb2dyZXNzLmJpdHJhdGUgPSBkYXRhLmJpdHJhdGUgPSAwO1xuICAgICAgdGhpcy5fYWN0aXZlICs9IDE7XG4gICAgICAvLyBJbml0aWFsaXplIHRoZSBnbG9iYWwgcHJvZ3Jlc3MgdmFsdWVzOlxuICAgICAgdGhpcy5fcHJvZ3Jlc3MubG9hZGVkICs9IGRhdGEubG9hZGVkO1xuICAgICAgdGhpcy5fcHJvZ3Jlc3MudG90YWwgKz0gZGF0YS50b3RhbDtcbiAgICB9LFxuXG4gICAgX29uRG9uZTogZnVuY3Rpb24gKHJlc3VsdCwgdGV4dFN0YXR1cywganFYSFIsIG9wdGlvbnMpIHtcbiAgICAgIHZhciB0b3RhbCA9IG9wdGlvbnMuX3Byb2dyZXNzLnRvdGFsLFxuICAgICAgICByZXNwb25zZSA9IG9wdGlvbnMuX3Jlc3BvbnNlO1xuICAgICAgaWYgKG9wdGlvbnMuX3Byb2dyZXNzLmxvYWRlZCA8IHRvdGFsKSB7XG4gICAgICAgIC8vIENyZWF0ZSBhIHByb2dyZXNzIGV2ZW50IGlmIG5vIGZpbmFsIHByb2dyZXNzIGV2ZW50XG4gICAgICAgIC8vIHdpdGggbG9hZGVkIGVxdWFsaW5nIHRvdGFsIGhhcyBiZWVuIHRyaWdnZXJlZDpcbiAgICAgICAgdGhpcy5fb25Qcm9ncmVzcyhcbiAgICAgICAgICAkLkV2ZW50KCdwcm9ncmVzcycsIHtcbiAgICAgICAgICAgIGxlbmd0aENvbXB1dGFibGU6IHRydWUsXG4gICAgICAgICAgICBsb2FkZWQ6IHRvdGFsLFxuICAgICAgICAgICAgdG90YWw6IHRvdGFsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgb3B0aW9uc1xuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmVzcG9uc2UucmVzdWx0ID0gb3B0aW9ucy5yZXN1bHQgPSByZXN1bHQ7XG4gICAgICByZXNwb25zZS50ZXh0U3RhdHVzID0gb3B0aW9ucy50ZXh0U3RhdHVzID0gdGV4dFN0YXR1cztcbiAgICAgIHJlc3BvbnNlLmpxWEhSID0gb3B0aW9ucy5qcVhIUiA9IGpxWEhSO1xuICAgICAgdGhpcy5fdHJpZ2dlcignZG9uZScsIG51bGwsIG9wdGlvbnMpO1xuICAgIH0sXG5cbiAgICBfb25GYWlsOiBmdW5jdGlvbiAoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duLCBvcHRpb25zKSB7XG4gICAgICB2YXIgcmVzcG9uc2UgPSBvcHRpb25zLl9yZXNwb25zZTtcbiAgICAgIGlmIChvcHRpb25zLnJlY2FsY3VsYXRlUHJvZ3Jlc3MpIHtcbiAgICAgICAgLy8gUmVtb3ZlIHRoZSBmYWlsZWQgKGVycm9yIG9yIGFib3J0KSBmaWxlIHVwbG9hZCBmcm9tXG4gICAgICAgIC8vIHRoZSBnbG9iYWwgcHJvZ3Jlc3MgY2FsY3VsYXRpb246XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzLmxvYWRlZCAtPSBvcHRpb25zLl9wcm9ncmVzcy5sb2FkZWQ7XG4gICAgICAgIHRoaXMuX3Byb2dyZXNzLnRvdGFsIC09IG9wdGlvbnMuX3Byb2dyZXNzLnRvdGFsO1xuICAgICAgfVxuICAgICAgcmVzcG9uc2UuanFYSFIgPSBvcHRpb25zLmpxWEhSID0ganFYSFI7XG4gICAgICByZXNwb25zZS50ZXh0U3RhdHVzID0gb3B0aW9ucy50ZXh0U3RhdHVzID0gdGV4dFN0YXR1cztcbiAgICAgIHJlc3BvbnNlLmVycm9yVGhyb3duID0gb3B0aW9ucy5lcnJvclRocm93biA9IGVycm9yVGhyb3duO1xuICAgICAgdGhpcy5fdHJpZ2dlcignZmFpbCcsIG51bGwsIG9wdGlvbnMpO1xuICAgIH0sXG5cbiAgICBfb25BbHdheXM6IGZ1bmN0aW9uIChqcVhIUm9yUmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUm9yRXJyb3IsIG9wdGlvbnMpIHtcbiAgICAgIC8vIGpxWEhSb3JSZXN1bHQsIHRleHRTdGF0dXMgYW5kIGpxWEhSb3JFcnJvciBhcmUgYWRkZWQgdG8gdGhlXG4gICAgICAvLyBvcHRpb25zIG9iamVjdCB2aWEgZG9uZSBhbmQgZmFpbCBjYWxsYmFja3NcbiAgICAgIHRoaXMuX3RyaWdnZXIoJ2Fsd2F5cycsIG51bGwsIG9wdGlvbnMpO1xuICAgIH0sXG5cbiAgICBfb25TZW5kOiBmdW5jdGlvbiAoZSwgZGF0YSkge1xuICAgICAgaWYgKCFkYXRhLnN1Ym1pdCkge1xuICAgICAgICB0aGlzLl9hZGRDb252ZW5pZW5jZU1ldGhvZHMoZSwgZGF0YSk7XG4gICAgICB9XG4gICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIGpxWEhSLFxuICAgICAgICBhYm9ydGVkLFxuICAgICAgICBzbG90LFxuICAgICAgICBwaXBlLFxuICAgICAgICBvcHRpb25zID0gdGhhdC5fZ2V0QUpBWFNldHRpbmdzKGRhdGEpLFxuICAgICAgICBzZW5kID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIHRoYXQuX3NlbmRpbmcgKz0gMTtcbiAgICAgICAgICAvLyBTZXQgdGltZXIgZm9yIGJpdHJhdGUgcHJvZ3Jlc3MgY2FsY3VsYXRpb246XG4gICAgICAgICAgb3B0aW9ucy5fYml0cmF0ZVRpbWVyID0gbmV3IHRoYXQuX0JpdHJhdGVUaW1lcigpO1xuICAgICAgICAgIGpxWEhSID1cbiAgICAgICAgICAgIGpxWEhSIHx8XG4gICAgICAgICAgICAoXG4gICAgICAgICAgICAgICgoYWJvcnRlZCB8fFxuICAgICAgICAgICAgICAgIHRoYXQuX3RyaWdnZXIoXG4gICAgICAgICAgICAgICAgICAnc2VuZCcsXG4gICAgICAgICAgICAgICAgICAkLkV2ZW50KCdzZW5kJywgeyBkZWxlZ2F0ZWRFdmVudDogZSB9KSxcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnNcbiAgICAgICAgICAgICAgICApID09PSBmYWxzZSkgJiZcbiAgICAgICAgICAgICAgICB0aGF0Ll9nZXRYSFJQcm9taXNlKGZhbHNlLCBvcHRpb25zLmNvbnRleHQsIGFib3J0ZWQpKSB8fFxuICAgICAgICAgICAgICB0aGF0Ll9jaHVua2VkVXBsb2FkKG9wdGlvbnMpIHx8XG4gICAgICAgICAgICAgICQuYWpheChvcHRpb25zKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAuZG9uZShmdW5jdGlvbiAocmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUikge1xuICAgICAgICAgICAgICAgIHRoYXQuX29uRG9uZShyZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSLCBvcHRpb25zKTtcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgLmZhaWwoZnVuY3Rpb24gKGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bikge1xuICAgICAgICAgICAgICAgIHRoYXQuX29uRmFpbChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24sIG9wdGlvbnMpO1xuICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAuYWx3YXlzKGZ1bmN0aW9uIChqcVhIUm9yUmVzdWx0LCB0ZXh0U3RhdHVzLCBqcVhIUm9yRXJyb3IpIHtcbiAgICAgICAgICAgICAgICB0aGF0Ll9kZWluaXRQcm9ncmVzc0xpc3RlbmVyKG9wdGlvbnMpO1xuICAgICAgICAgICAgICAgIHRoYXQuX29uQWx3YXlzKFxuICAgICAgICAgICAgICAgICAganFYSFJvclJlc3VsdCxcbiAgICAgICAgICAgICAgICAgIHRleHRTdGF0dXMsXG4gICAgICAgICAgICAgICAgICBqcVhIUm9yRXJyb3IsXG4gICAgICAgICAgICAgICAgICBvcHRpb25zXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGF0Ll9zZW5kaW5nIC09IDE7XG4gICAgICAgICAgICAgICAgdGhhdC5fYWN0aXZlIC09IDE7XG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgb3B0aW9ucy5saW1pdENvbmN1cnJlbnRVcGxvYWRzICYmXG4gICAgICAgICAgICAgICAgICBvcHRpb25zLmxpbWl0Q29uY3VycmVudFVwbG9hZHMgPiB0aGF0Ll9zZW5kaW5nXG4gICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAvLyBTdGFydCB0aGUgbmV4dCBxdWV1ZWQgdXBsb2FkLFxuICAgICAgICAgICAgICAgICAgLy8gdGhhdCBoYXMgbm90IGJlZW4gYWJvcnRlZDpcbiAgICAgICAgICAgICAgICAgIHZhciBuZXh0U2xvdCA9IHRoYXQuX3Nsb3RzLnNoaWZ0KCk7XG4gICAgICAgICAgICAgICAgICB3aGlsZSAobmV4dFNsb3QpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoYXQuX2dldERlZmVycmVkU3RhdGUobmV4dFNsb3QpID09PSAncGVuZGluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICBuZXh0U2xvdC5yZXNvbHZlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbmV4dFNsb3QgPSB0aGF0Ll9zbG90cy5zaGlmdCgpO1xuICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAodGhhdC5fYWN0aXZlID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAvLyBUaGUgc3RvcCBjYWxsYmFjayBpcyB0cmlnZ2VyZWQgd2hlbiBhbGwgdXBsb2FkcyBoYXZlXG4gICAgICAgICAgICAgICAgICAvLyBiZWVuIGNvbXBsZXRlZCwgZXF1aXZhbGVudCB0byB0aGUgZ2xvYmFsIGFqYXhTdG9wIGV2ZW50OlxuICAgICAgICAgICAgICAgICAgdGhhdC5fdHJpZ2dlcignc3RvcCcpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgcmV0dXJuIGpxWEhSO1xuICAgICAgICB9O1xuICAgICAgdGhpcy5fYmVmb3JlU2VuZChlLCBvcHRpb25zKTtcbiAgICAgIGlmIChcbiAgICAgICAgdGhpcy5vcHRpb25zLnNlcXVlbnRpYWxVcGxvYWRzIHx8XG4gICAgICAgICh0aGlzLm9wdGlvbnMubGltaXRDb25jdXJyZW50VXBsb2FkcyAmJlxuICAgICAgICAgIHRoaXMub3B0aW9ucy5saW1pdENvbmN1cnJlbnRVcGxvYWRzIDw9IHRoaXMuX3NlbmRpbmcpXG4gICAgICApIHtcbiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5saW1pdENvbmN1cnJlbnRVcGxvYWRzID4gMSkge1xuICAgICAgICAgIHNsb3QgPSAkLkRlZmVycmVkKCk7XG4gICAgICAgICAgdGhpcy5fc2xvdHMucHVzaChzbG90KTtcbiAgICAgICAgICBwaXBlID0gc2xvdFt0aGF0Ll9wcm9taXNlUGlwZV0oc2VuZCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5fc2VxdWVuY2UgPSB0aGlzLl9zZXF1ZW5jZVt0aGF0Ll9wcm9taXNlUGlwZV0oc2VuZCwgc2VuZCk7XG4gICAgICAgICAgcGlwZSA9IHRoaXMuX3NlcXVlbmNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIFJldHVybiB0aGUgcGlwZWQgUHJvbWlzZSBvYmplY3QsIGVuaGFuY2VkIHdpdGggYW4gYWJvcnQgbWV0aG9kLFxuICAgICAgICAvLyB3aGljaCBpcyBkZWxlZ2F0ZWQgdG8gdGhlIGpxWEhSIG9iamVjdCBvZiB0aGUgY3VycmVudCB1cGxvYWQsXG4gICAgICAgIC8vIGFuZCBqcVhIUiBjYWxsYmFja3MgbWFwcGVkIHRvIHRoZSBlcXVpdmFsZW50IFByb21pc2UgbWV0aG9kczpcbiAgICAgICAgcGlwZS5hYm9ydCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICBhYm9ydGVkID0gW3VuZGVmaW5lZCwgJ2Fib3J0JywgJ2Fib3J0J107XG4gICAgICAgICAgaWYgKCFqcVhIUikge1xuICAgICAgICAgICAgaWYgKHNsb3QpIHtcbiAgICAgICAgICAgICAgc2xvdC5yZWplY3RXaXRoKG9wdGlvbnMuY29udGV4dCwgYWJvcnRlZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gc2VuZCgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4ganFYSFIuYWJvcnQoKTtcbiAgICAgICAgfTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2VuaGFuY2VQcm9taXNlKHBpcGUpO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHNlbmQoKTtcbiAgICB9LFxuXG4gICAgX29uQWRkOiBmdW5jdGlvbiAoZSwgZGF0YSkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICByZXN1bHQgPSB0cnVlLFxuICAgICAgICBvcHRpb25zID0gJC5leHRlbmQoe30sIHRoaXMub3B0aW9ucywgZGF0YSksXG4gICAgICAgIGZpbGVzID0gZGF0YS5maWxlcyxcbiAgICAgICAgZmlsZXNMZW5ndGggPSBmaWxlcy5sZW5ndGgsXG4gICAgICAgIGxpbWl0ID0gb3B0aW9ucy5saW1pdE11bHRpRmlsZVVwbG9hZHMsXG4gICAgICAgIGxpbWl0U2l6ZSA9IG9wdGlvbnMubGltaXRNdWx0aUZpbGVVcGxvYWRTaXplLFxuICAgICAgICBvdmVyaGVhZCA9IG9wdGlvbnMubGltaXRNdWx0aUZpbGVVcGxvYWRTaXplT3ZlcmhlYWQsXG4gICAgICAgIGJhdGNoU2l6ZSA9IDAsXG4gICAgICAgIHBhcmFtTmFtZSA9IHRoaXMuX2dldFBhcmFtTmFtZShvcHRpb25zKSxcbiAgICAgICAgcGFyYW1OYW1lU2V0LFxuICAgICAgICBwYXJhbU5hbWVTbGljZSxcbiAgICAgICAgZmlsZVNldCxcbiAgICAgICAgaSxcbiAgICAgICAgaiA9IDA7XG4gICAgICBpZiAoIWZpbGVzTGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChsaW1pdFNpemUgJiYgZmlsZXNbMF0uc2l6ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIGxpbWl0U2l6ZSA9IHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIGlmIChcbiAgICAgICAgIShvcHRpb25zLnNpbmdsZUZpbGVVcGxvYWRzIHx8IGxpbWl0IHx8IGxpbWl0U2l6ZSkgfHxcbiAgICAgICAgIXRoaXMuX2lzWEhSVXBsb2FkKG9wdGlvbnMpXG4gICAgICApIHtcbiAgICAgICAgZmlsZVNldCA9IFtmaWxlc107XG4gICAgICAgIHBhcmFtTmFtZVNldCA9IFtwYXJhbU5hbWVdO1xuICAgICAgfSBlbHNlIGlmICghKG9wdGlvbnMuc2luZ2xlRmlsZVVwbG9hZHMgfHwgbGltaXRTaXplKSAmJiBsaW1pdCkge1xuICAgICAgICBmaWxlU2V0ID0gW107XG4gICAgICAgIHBhcmFtTmFtZVNldCA9IFtdO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZmlsZXNMZW5ndGg7IGkgKz0gbGltaXQpIHtcbiAgICAgICAgICBmaWxlU2V0LnB1c2goZmlsZXMuc2xpY2UoaSwgaSArIGxpbWl0KSk7XG4gICAgICAgICAgcGFyYW1OYW1lU2xpY2UgPSBwYXJhbU5hbWUuc2xpY2UoaSwgaSArIGxpbWl0KTtcbiAgICAgICAgICBpZiAoIXBhcmFtTmFtZVNsaWNlLmxlbmd0aCkge1xuICAgICAgICAgICAgcGFyYW1OYW1lU2xpY2UgPSBwYXJhbU5hbWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHBhcmFtTmFtZVNldC5wdXNoKHBhcmFtTmFtZVNsaWNlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmICghb3B0aW9ucy5zaW5nbGVGaWxlVXBsb2FkcyAmJiBsaW1pdFNpemUpIHtcbiAgICAgICAgZmlsZVNldCA9IFtdO1xuICAgICAgICBwYXJhbU5hbWVTZXQgPSBbXTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGZpbGVzTGVuZ3RoOyBpID0gaSArIDEpIHtcbiAgICAgICAgICBiYXRjaFNpemUgKz0gZmlsZXNbaV0uc2l6ZSArIG92ZXJoZWFkO1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIGkgKyAxID09PSBmaWxlc0xlbmd0aCB8fFxuICAgICAgICAgICAgYmF0Y2hTaXplICsgZmlsZXNbaSArIDFdLnNpemUgKyBvdmVyaGVhZCA+IGxpbWl0U2l6ZSB8fFxuICAgICAgICAgICAgKGxpbWl0ICYmIGkgKyAxIC0gaiA+PSBsaW1pdClcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIGZpbGVTZXQucHVzaChmaWxlcy5zbGljZShqLCBpICsgMSkpO1xuICAgICAgICAgICAgcGFyYW1OYW1lU2xpY2UgPSBwYXJhbU5hbWUuc2xpY2UoaiwgaSArIDEpO1xuICAgICAgICAgICAgaWYgKCFwYXJhbU5hbWVTbGljZS5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgcGFyYW1OYW1lU2xpY2UgPSBwYXJhbU5hbWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBwYXJhbU5hbWVTZXQucHVzaChwYXJhbU5hbWVTbGljZSk7XG4gICAgICAgICAgICBqID0gaSArIDE7XG4gICAgICAgICAgICBiYXRjaFNpemUgPSAwO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcGFyYW1OYW1lU2V0ID0gcGFyYW1OYW1lO1xuICAgICAgfVxuICAgICAgZGF0YS5vcmlnaW5hbEZpbGVzID0gZmlsZXM7XG4gICAgICAkLmVhY2goZmlsZVNldCB8fCBmaWxlcywgZnVuY3Rpb24gKGluZGV4LCBlbGVtZW50KSB7XG4gICAgICAgIHZhciBuZXdEYXRhID0gJC5leHRlbmQoe30sIGRhdGEpO1xuICAgICAgICBuZXdEYXRhLmZpbGVzID0gZmlsZVNldCA/IGVsZW1lbnQgOiBbZWxlbWVudF07XG4gICAgICAgIG5ld0RhdGEucGFyYW1OYW1lID0gcGFyYW1OYW1lU2V0W2luZGV4XTtcbiAgICAgICAgdGhhdC5faW5pdFJlc3BvbnNlT2JqZWN0KG5ld0RhdGEpO1xuICAgICAgICB0aGF0Ll9pbml0UHJvZ3Jlc3NPYmplY3QobmV3RGF0YSk7XG4gICAgICAgIHRoYXQuX2FkZENvbnZlbmllbmNlTWV0aG9kcyhlLCBuZXdEYXRhKTtcbiAgICAgICAgcmVzdWx0ID0gdGhhdC5fdHJpZ2dlcihcbiAgICAgICAgICAnYWRkJyxcbiAgICAgICAgICAkLkV2ZW50KCdhZGQnLCB7IGRlbGVnYXRlZEV2ZW50OiBlIH0pLFxuICAgICAgICAgIG5ld0RhdGFcbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9LFxuXG4gICAgX3JlcGxhY2VGaWxlSW5wdXQ6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICB2YXIgaW5wdXQgPSBkYXRhLmZpbGVJbnB1dCxcbiAgICAgICAgaW5wdXRDbG9uZSA9IGlucHV0LmNsb25lKHRydWUpLFxuICAgICAgICByZXN0b3JlRm9jdXMgPSBpbnB1dC5pcyhkb2N1bWVudC5hY3RpdmVFbGVtZW50KTtcbiAgICAgIC8vIEFkZCBhIHJlZmVyZW5jZSBmb3IgdGhlIG5ldyBjbG9uZWQgZmlsZSBpbnB1dCB0byB0aGUgZGF0YSBhcmd1bWVudDpcbiAgICAgIGRhdGEuZmlsZUlucHV0Q2xvbmUgPSBpbnB1dENsb25lO1xuICAgICAgJCgnPGZvcm0+PC9mb3JtPicpLmFwcGVuZChpbnB1dENsb25lKVswXS5yZXNldCgpO1xuICAgICAgLy8gRGV0YWNoaW5nIGFsbG93cyB0byBpbnNlcnQgdGhlIGZpbGVJbnB1dCBvbiBhbm90aGVyIGZvcm1cbiAgICAgIC8vIHdpdGhvdXQgbG9zaW5nIHRoZSBmaWxlIGlucHV0IHZhbHVlOlxuICAgICAgaW5wdXQuYWZ0ZXIoaW5wdXRDbG9uZSkuZGV0YWNoKCk7XG4gICAgICAvLyBJZiB0aGUgZmlsZUlucHV0IGhhZCBmb2N1cyBiZWZvcmUgaXQgd2FzIGRldGFjaGVkLFxuICAgICAgLy8gcmVzdG9yZSBmb2N1cyB0byB0aGUgaW5wdXRDbG9uZS5cbiAgICAgIGlmIChyZXN0b3JlRm9jdXMpIHtcbiAgICAgICAgaW5wdXRDbG9uZS50cmlnZ2VyKCdmb2N1cycpO1xuICAgICAgfVxuICAgICAgLy8gQXZvaWQgbWVtb3J5IGxlYWtzIHdpdGggdGhlIGRldGFjaGVkIGZpbGUgaW5wdXQ6XG4gICAgICAkLmNsZWFuRGF0YShpbnB1dC5vZmYoJ3JlbW92ZScpKTtcbiAgICAgIC8vIFJlcGxhY2UgdGhlIG9yaWdpbmFsIGZpbGUgaW5wdXQgZWxlbWVudCBpbiB0aGUgZmlsZUlucHV0XG4gICAgICAvLyBlbGVtZW50cyBzZXQgd2l0aCB0aGUgY2xvbmUsIHdoaWNoIGhhcyBiZWVuIGNvcGllZCBpbmNsdWRpbmdcbiAgICAgIC8vIGV2ZW50IGhhbmRsZXJzOlxuICAgICAgdGhpcy5vcHRpb25zLmZpbGVJbnB1dCA9IHRoaXMub3B0aW9ucy5maWxlSW5wdXQubWFwKGZ1bmN0aW9uIChpLCBlbCkge1xuICAgICAgICBpZiAoZWwgPT09IGlucHV0WzBdKSB7XG4gICAgICAgICAgcmV0dXJuIGlucHV0Q2xvbmVbMF07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGVsO1xuICAgICAgfSk7XG4gICAgICAvLyBJZiB0aGUgd2lkZ2V0IGhhcyBiZWVuIGluaXRpYWxpemVkIG9uIHRoZSBmaWxlIGlucHV0IGl0c2VsZixcbiAgICAgIC8vIG92ZXJyaWRlIHRoaXMuZWxlbWVudCB3aXRoIHRoZSBmaWxlIGlucHV0IGNsb25lOlxuICAgICAgaWYgKGlucHV0WzBdID09PSB0aGlzLmVsZW1lbnRbMF0pIHtcbiAgICAgICAgdGhpcy5lbGVtZW50ID0gaW5wdXRDbG9uZTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX2hhbmRsZUZpbGVUcmVlRW50cnk6IGZ1bmN0aW9uIChlbnRyeSwgcGF0aCkge1xuICAgICAgdmFyIHRoYXQgPSB0aGlzLFxuICAgICAgICBkZmQgPSAkLkRlZmVycmVkKCksXG4gICAgICAgIGVudHJpZXMgPSBbXSxcbiAgICAgICAgZGlyUmVhZGVyLFxuICAgICAgICBlcnJvckhhbmRsZXIgPSBmdW5jdGlvbiAoZSkge1xuICAgICAgICAgIGlmIChlICYmICFlLmVudHJ5KSB7XG4gICAgICAgICAgICBlLmVudHJ5ID0gZW50cnk7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIFNpbmNlICQud2hlbiByZXR1cm5zIGltbWVkaWF0ZWx5IGlmIG9uZVxuICAgICAgICAgIC8vIERlZmVycmVkIGlzIHJlamVjdGVkLCB3ZSB1c2UgcmVzb2x2ZSBpbnN0ZWFkLlxuICAgICAgICAgIC8vIFRoaXMgYWxsb3dzIHZhbGlkIGZpbGVzIGFuZCBpbnZhbGlkIGl0ZW1zXG4gICAgICAgICAgLy8gdG8gYmUgcmV0dXJuZWQgdG9nZXRoZXIgaW4gb25lIHNldDpcbiAgICAgICAgICBkZmQucmVzb2x2ZShbZV0pO1xuICAgICAgICB9LFxuICAgICAgICBzdWNjZXNzSGFuZGxlciA9IGZ1bmN0aW9uIChlbnRyaWVzKSB7XG4gICAgICAgICAgdGhhdFxuICAgICAgICAgICAgLl9oYW5kbGVGaWxlVHJlZUVudHJpZXMoZW50cmllcywgcGF0aCArIGVudHJ5Lm5hbWUgKyAnLycpXG4gICAgICAgICAgICAuZG9uZShmdW5jdGlvbiAoZmlsZXMpIHtcbiAgICAgICAgICAgICAgZGZkLnJlc29sdmUoZmlsZXMpO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIC5mYWlsKGVycm9ySGFuZGxlcik7XG4gICAgICAgIH0sXG4gICAgICAgIHJlYWRFbnRyaWVzID0gZnVuY3Rpb24gKCkge1xuICAgICAgICAgIGRpclJlYWRlci5yZWFkRW50cmllcyhmdW5jdGlvbiAocmVzdWx0cykge1xuICAgICAgICAgICAgaWYgKCFyZXN1bHRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICBzdWNjZXNzSGFuZGxlcihlbnRyaWVzKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIGVudHJpZXMgPSBlbnRyaWVzLmNvbmNhdChyZXN1bHRzKTtcbiAgICAgICAgICAgICAgcmVhZEVudHJpZXMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9LCBlcnJvckhhbmRsZXIpO1xuICAgICAgICB9O1xuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXBhcmFtLXJlYXNzaWduXG4gICAgICBwYXRoID0gcGF0aCB8fCAnJztcbiAgICAgIGlmIChlbnRyeS5pc0ZpbGUpIHtcbiAgICAgICAgaWYgKGVudHJ5Ll9maWxlKSB7XG4gICAgICAgICAgLy8gV29ya2Fyb3VuZCBmb3IgQ2hyb21lIGJ1ZyAjMTQ5NzM1XG4gICAgICAgICAgZW50cnkuX2ZpbGUucmVsYXRpdmVQYXRoID0gcGF0aDtcbiAgICAgICAgICBkZmQucmVzb2x2ZShlbnRyeS5fZmlsZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZW50cnkuZmlsZShmdW5jdGlvbiAoZmlsZSkge1xuICAgICAgICAgICAgZmlsZS5yZWxhdGl2ZVBhdGggPSBwYXRoO1xuICAgICAgICAgICAgZGZkLnJlc29sdmUoZmlsZSk7XG4gICAgICAgICAgfSwgZXJyb3JIYW5kbGVyKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIGlmIChlbnRyeS5pc0RpcmVjdG9yeSkge1xuICAgICAgICBkaXJSZWFkZXIgPSBlbnRyeS5jcmVhdGVSZWFkZXIoKTtcbiAgICAgICAgcmVhZEVudHJpZXMoKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIFJldHVybiBhbiBlbXB0eSBsaXN0IGZvciBmaWxlIHN5c3RlbSBpdGVtc1xuICAgICAgICAvLyBvdGhlciB0aGFuIGZpbGVzIG9yIGRpcmVjdG9yaWVzOlxuICAgICAgICBkZmQucmVzb2x2ZShbXSk7XG4gICAgICB9XG4gICAgICByZXR1cm4gZGZkLnByb21pc2UoKTtcbiAgICB9LFxuXG4gICAgX2hhbmRsZUZpbGVUcmVlRW50cmllczogZnVuY3Rpb24gKGVudHJpZXMsIHBhdGgpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIHJldHVybiAkLndoZW5cbiAgICAgICAgLmFwcGx5KFxuICAgICAgICAgICQsXG4gICAgICAgICAgJC5tYXAoZW50cmllcywgZnVuY3Rpb24gKGVudHJ5KSB7XG4gICAgICAgICAgICByZXR1cm4gdGhhdC5faGFuZGxlRmlsZVRyZWVFbnRyeShlbnRyeSwgcGF0aCk7XG4gICAgICAgICAgfSlcbiAgICAgICAgKVxuICAgICAgICBbdGhpcy5fcHJvbWlzZVBpcGVdKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSwgYXJndW1lbnRzKTtcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIF9nZXREcm9wcGVkRmlsZXM6IGZ1bmN0aW9uIChkYXRhVHJhbnNmZXIpIHtcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wYXJhbS1yZWFzc2lnblxuICAgICAgZGF0YVRyYW5zZmVyID0gZGF0YVRyYW5zZmVyIHx8IHt9O1xuICAgICAgdmFyIGl0ZW1zID0gZGF0YVRyYW5zZmVyLml0ZW1zO1xuICAgICAgaWYgKFxuICAgICAgICBpdGVtcyAmJlxuICAgICAgICBpdGVtcy5sZW5ndGggJiZcbiAgICAgICAgKGl0ZW1zWzBdLndlYmtpdEdldEFzRW50cnkgfHwgaXRlbXNbMF0uZ2V0QXNFbnRyeSlcbiAgICAgICkge1xuICAgICAgICByZXR1cm4gdGhpcy5faGFuZGxlRmlsZVRyZWVFbnRyaWVzKFxuICAgICAgICAgICQubWFwKGl0ZW1zLCBmdW5jdGlvbiAoaXRlbSkge1xuICAgICAgICAgICAgdmFyIGVudHJ5O1xuICAgICAgICAgICAgaWYgKGl0ZW0ud2Via2l0R2V0QXNFbnRyeSkge1xuICAgICAgICAgICAgICBlbnRyeSA9IGl0ZW0ud2Via2l0R2V0QXNFbnRyeSgpO1xuICAgICAgICAgICAgICBpZiAoZW50cnkpIHtcbiAgICAgICAgICAgICAgICAvLyBXb3JrYXJvdW5kIGZvciBDaHJvbWUgYnVnICMxNDk3MzU6XG4gICAgICAgICAgICAgICAgZW50cnkuX2ZpbGUgPSBpdGVtLmdldEFzRmlsZSgpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBlbnRyeTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpdGVtLmdldEFzRW50cnkoKTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgcmV0dXJuICQuRGVmZXJyZWQoKS5yZXNvbHZlKCQubWFrZUFycmF5KGRhdGFUcmFuc2Zlci5maWxlcykpLnByb21pc2UoKTtcbiAgICB9LFxuXG4gICAgX2dldFNpbmdsZUZpbGVJbnB1dEZpbGVzOiBmdW5jdGlvbiAoZmlsZUlucHV0KSB7XG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcGFyYW0tcmVhc3NpZ25cbiAgICAgIGZpbGVJbnB1dCA9ICQoZmlsZUlucHV0KTtcbiAgICAgIHZhciBlbnRyaWVzID0gZmlsZUlucHV0LnByb3AoJ2VudHJpZXMnKSxcbiAgICAgICAgZmlsZXMsXG4gICAgICAgIHZhbHVlO1xuICAgICAgaWYgKGVudHJpZXMgJiYgZW50cmllcy5sZW5ndGgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2hhbmRsZUZpbGVUcmVlRW50cmllcyhlbnRyaWVzKTtcbiAgICAgIH1cbiAgICAgIGZpbGVzID0gJC5tYWtlQXJyYXkoZmlsZUlucHV0LnByb3AoJ2ZpbGVzJykpO1xuICAgICAgaWYgKCFmaWxlcy5sZW5ndGgpIHtcbiAgICAgICAgdmFsdWUgPSBmaWxlSW5wdXQucHJvcCgndmFsdWUnKTtcbiAgICAgICAgaWYgKCF2YWx1ZSkge1xuICAgICAgICAgIHJldHVybiAkLkRlZmVycmVkKCkucmVzb2x2ZShbXSkucHJvbWlzZSgpO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIHRoZSBmaWxlcyBwcm9wZXJ0eSBpcyBub3QgYXZhaWxhYmxlLCB0aGUgYnJvd3NlciBkb2VzIG5vdFxuICAgICAgICAvLyBzdXBwb3J0IHRoZSBGaWxlIEFQSSBhbmQgd2UgYWRkIGEgcHNldWRvIEZpbGUgb2JqZWN0IHdpdGhcbiAgICAgICAgLy8gdGhlIGlucHV0IHZhbHVlIGFzIG5hbWUgd2l0aCBwYXRoIGluZm9ybWF0aW9uIHJlbW92ZWQ6XG4gICAgICAgIGZpbGVzID0gW3sgbmFtZTogdmFsdWUucmVwbGFjZSgvXi4qXFxcXC8sICcnKSB9XTtcbiAgICAgIH0gZWxzZSBpZiAoZmlsZXNbMF0ubmFtZSA9PT0gdW5kZWZpbmVkICYmIGZpbGVzWzBdLmZpbGVOYW1lKSB7XG4gICAgICAgIC8vIEZpbGUgbm9ybWFsaXphdGlvbiBmb3IgU2FmYXJpIDQgYW5kIEZpcmVmb3ggMzpcbiAgICAgICAgJC5lYWNoKGZpbGVzLCBmdW5jdGlvbiAoaW5kZXgsIGZpbGUpIHtcbiAgICAgICAgICBmaWxlLm5hbWUgPSBmaWxlLmZpbGVOYW1lO1xuICAgICAgICAgIGZpbGUuc2l6ZSA9IGZpbGUuZmlsZVNpemU7XG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgICAgcmV0dXJuICQuRGVmZXJyZWQoKS5yZXNvbHZlKGZpbGVzKS5wcm9taXNlKCk7XG4gICAgfSxcblxuICAgIF9nZXRGaWxlSW5wdXRGaWxlczogZnVuY3Rpb24gKGZpbGVJbnB1dCkge1xuICAgICAgaWYgKCEoZmlsZUlucHV0IGluc3RhbmNlb2YgJCkgfHwgZmlsZUlucHV0Lmxlbmd0aCA9PT0gMSkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0U2luZ2xlRmlsZUlucHV0RmlsZXMoZmlsZUlucHV0KTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAkLndoZW5cbiAgICAgICAgLmFwcGx5KCQsICQubWFwKGZpbGVJbnB1dCwgdGhpcy5fZ2V0U2luZ2xlRmlsZUlucHV0RmlsZXMpKVxuICAgICAgICBbdGhpcy5fcHJvbWlzZVBpcGVdKGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSwgYXJndW1lbnRzKTtcbiAgICAgICAgfSk7XG4gICAgfSxcblxuICAgIF9vbkNoYW5nZTogZnVuY3Rpb24gKGUpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgZGF0YSA9IHtcbiAgICAgICAgICBmaWxlSW5wdXQ6ICQoZS50YXJnZXQpLFxuICAgICAgICAgIGZvcm06ICQoZS50YXJnZXQuZm9ybSlcbiAgICAgICAgfTtcbiAgICAgIHRoaXMuX2dldEZpbGVJbnB1dEZpbGVzKGRhdGEuZmlsZUlucHV0KS5hbHdheXMoZnVuY3Rpb24gKGZpbGVzKSB7XG4gICAgICAgIGRhdGEuZmlsZXMgPSBmaWxlcztcbiAgICAgICAgaWYgKHRoYXQub3B0aW9ucy5yZXBsYWNlRmlsZUlucHV0KSB7XG4gICAgICAgICAgdGhhdC5fcmVwbGFjZUZpbGVJbnB1dChkYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhhdC5fdHJpZ2dlcihcbiAgICAgICAgICAgICdjaGFuZ2UnLFxuICAgICAgICAgICAgJC5FdmVudCgnY2hhbmdlJywgeyBkZWxlZ2F0ZWRFdmVudDogZSB9KSxcbiAgICAgICAgICAgIGRhdGFcbiAgICAgICAgICApICE9PSBmYWxzZVxuICAgICAgICApIHtcbiAgICAgICAgICB0aGF0Ll9vbkFkZChlLCBkYXRhKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIF9vblBhc3RlOiBmdW5jdGlvbiAoZSkge1xuICAgICAgdmFyIGl0ZW1zID1cbiAgICAgICAgICBlLm9yaWdpbmFsRXZlbnQgJiZcbiAgICAgICAgICBlLm9yaWdpbmFsRXZlbnQuY2xpcGJvYXJkRGF0YSAmJlxuICAgICAgICAgIGUub3JpZ2luYWxFdmVudC5jbGlwYm9hcmREYXRhLml0ZW1zLFxuICAgICAgICBkYXRhID0geyBmaWxlczogW10gfTtcbiAgICAgIGlmIChpdGVtcyAmJiBpdGVtcy5sZW5ndGgpIHtcbiAgICAgICAgJC5lYWNoKGl0ZW1zLCBmdW5jdGlvbiAoaW5kZXgsIGl0ZW0pIHtcbiAgICAgICAgICB2YXIgZmlsZSA9IGl0ZW0uZ2V0QXNGaWxlICYmIGl0ZW0uZ2V0QXNGaWxlKCk7XG4gICAgICAgICAgaWYgKGZpbGUpIHtcbiAgICAgICAgICAgIGRhdGEuZmlsZXMucHVzaChmaWxlKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgdGhpcy5fdHJpZ2dlcihcbiAgICAgICAgICAgICdwYXN0ZScsXG4gICAgICAgICAgICAkLkV2ZW50KCdwYXN0ZScsIHsgZGVsZWdhdGVkRXZlbnQ6IGUgfSksXG4gICAgICAgICAgICBkYXRhXG4gICAgICAgICAgKSAhPT0gZmFsc2VcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhpcy5fb25BZGQoZSwgZGF0YSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX29uRHJvcDogZnVuY3Rpb24gKGUpIHtcbiAgICAgIGUuZGF0YVRyYW5zZmVyID0gZS5vcmlnaW5hbEV2ZW50ICYmIGUub3JpZ2luYWxFdmVudC5kYXRhVHJhbnNmZXI7XG4gICAgICB2YXIgdGhhdCA9IHRoaXMsXG4gICAgICAgIGRhdGFUcmFuc2ZlciA9IGUuZGF0YVRyYW5zZmVyLFxuICAgICAgICBkYXRhID0ge307XG4gICAgICBpZiAoZGF0YVRyYW5zZmVyICYmIGRhdGFUcmFuc2Zlci5maWxlcyAmJiBkYXRhVHJhbnNmZXIuZmlsZXMubGVuZ3RoKSB7XG4gICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5fZ2V0RHJvcHBlZEZpbGVzKGRhdGFUcmFuc2ZlcikuYWx3YXlzKGZ1bmN0aW9uIChmaWxlcykge1xuICAgICAgICAgIGRhdGEuZmlsZXMgPSBmaWxlcztcbiAgICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGF0Ll90cmlnZ2VyKFxuICAgICAgICAgICAgICAnZHJvcCcsXG4gICAgICAgICAgICAgICQuRXZlbnQoJ2Ryb3AnLCB7IGRlbGVnYXRlZEV2ZW50OiBlIH0pLFxuICAgICAgICAgICAgICBkYXRhXG4gICAgICAgICAgICApICE9PSBmYWxzZVxuICAgICAgICAgICkge1xuICAgICAgICAgICAgdGhhdC5fb25BZGQoZSwgZGF0YSk7XG4gICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9LFxuXG4gICAgX29uRHJhZ092ZXI6IGdldERyYWdIYW5kbGVyKCdkcmFnb3ZlcicpLFxuXG4gICAgX29uRHJhZ0VudGVyOiBnZXREcmFnSGFuZGxlcignZHJhZ2VudGVyJyksXG5cbiAgICBfb25EcmFnTGVhdmU6IGdldERyYWdIYW5kbGVyKCdkcmFnbGVhdmUnKSxcblxuICAgIF9pbml0RXZlbnRIYW5kbGVyczogZnVuY3Rpb24gKCkge1xuICAgICAgaWYgKHRoaXMuX2lzWEhSVXBsb2FkKHRoaXMub3B0aW9ucykpIHtcbiAgICAgICAgdGhpcy5fb24odGhpcy5vcHRpb25zLmRyb3Bab25lLCB7XG4gICAgICAgICAgZHJhZ292ZXI6IHRoaXMuX29uRHJhZ092ZXIsXG4gICAgICAgICAgZHJvcDogdGhpcy5fb25Ecm9wLFxuICAgICAgICAgIC8vIGV2ZW50LnByZXZlbnREZWZhdWx0KCkgb24gZHJhZ2VudGVyIGlzIHJlcXVpcmVkIGZvciBJRTEwKzpcbiAgICAgICAgICBkcmFnZW50ZXI6IHRoaXMuX29uRHJhZ0VudGVyLFxuICAgICAgICAgIC8vIGRyYWdsZWF2ZSBpcyBub3QgcmVxdWlyZWQsIGJ1dCBhZGRlZCBmb3IgY29tcGxldGVuZXNzOlxuICAgICAgICAgIGRyYWdsZWF2ZTogdGhpcy5fb25EcmFnTGVhdmVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuX29uKHRoaXMub3B0aW9ucy5wYXN0ZVpvbmUsIHtcbiAgICAgICAgICBwYXN0ZTogdGhpcy5fb25QYXN0ZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICAgIGlmICgkLnN1cHBvcnQuZmlsZUlucHV0KSB7XG4gICAgICAgIHRoaXMuX29uKHRoaXMub3B0aW9ucy5maWxlSW5wdXQsIHtcbiAgICAgICAgICBjaGFuZ2U6IHRoaXMuX29uQ2hhbmdlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfZGVzdHJveUV2ZW50SGFuZGxlcnM6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuX29mZih0aGlzLm9wdGlvbnMuZHJvcFpvbmUsICdkcmFnZW50ZXIgZHJhZ2xlYXZlIGRyYWdvdmVyIGRyb3AnKTtcbiAgICAgIHRoaXMuX29mZih0aGlzLm9wdGlvbnMucGFzdGVab25lLCAncGFzdGUnKTtcbiAgICAgIHRoaXMuX29mZih0aGlzLm9wdGlvbnMuZmlsZUlucHV0LCAnY2hhbmdlJyk7XG4gICAgfSxcblxuICAgIF9kZXN0cm95OiBmdW5jdGlvbiAoKSB7XG4gICAgICB0aGlzLl9kZXN0cm95RXZlbnRIYW5kbGVycygpO1xuICAgIH0sXG5cbiAgICBfc2V0T3B0aW9uOiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuICAgICAgdmFyIHJlaW5pdCA9ICQuaW5BcnJheShrZXksIHRoaXMuX3NwZWNpYWxPcHRpb25zKSAhPT0gLTE7XG4gICAgICBpZiAocmVpbml0KSB7XG4gICAgICAgIHRoaXMuX2Rlc3Ryb3lFdmVudEhhbmRsZXJzKCk7XG4gICAgICB9XG4gICAgICB0aGlzLl9zdXBlcihrZXksIHZhbHVlKTtcbiAgICAgIGlmIChyZWluaXQpIHtcbiAgICAgICAgdGhpcy5faW5pdFNwZWNpYWxPcHRpb25zKCk7XG4gICAgICAgIHRoaXMuX2luaXRFdmVudEhhbmRsZXJzKCk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIF9pbml0U3BlY2lhbE9wdGlvbnM6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBvcHRpb25zID0gdGhpcy5vcHRpb25zO1xuICAgICAgaWYgKG9wdGlvbnMuZmlsZUlucHV0ID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgb3B0aW9ucy5maWxlSW5wdXQgPSB0aGlzLmVsZW1lbnQuaXMoJ2lucHV0W3R5cGU9XCJmaWxlXCJdJylcbiAgICAgICAgICA/IHRoaXMuZWxlbWVudFxuICAgICAgICAgIDogdGhpcy5lbGVtZW50LmZpbmQoJ2lucHV0W3R5cGU9XCJmaWxlXCJdJyk7XG4gICAgICB9IGVsc2UgaWYgKCEob3B0aW9ucy5maWxlSW5wdXQgaW5zdGFuY2VvZiAkKSkge1xuICAgICAgICBvcHRpb25zLmZpbGVJbnB1dCA9ICQob3B0aW9ucy5maWxlSW5wdXQpO1xuICAgICAgfVxuICAgICAgaWYgKCEob3B0aW9ucy5kcm9wWm9uZSBpbnN0YW5jZW9mICQpKSB7XG4gICAgICAgIG9wdGlvbnMuZHJvcFpvbmUgPSAkKG9wdGlvbnMuZHJvcFpvbmUpO1xuICAgICAgfVxuICAgICAgaWYgKCEob3B0aW9ucy5wYXN0ZVpvbmUgaW5zdGFuY2VvZiAkKSkge1xuICAgICAgICBvcHRpb25zLnBhc3RlWm9uZSA9ICQob3B0aW9ucy5wYXN0ZVpvbmUpO1xuICAgICAgfVxuICAgIH0sXG5cbiAgICBfZ2V0UmVnRXhwOiBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICB2YXIgcGFydHMgPSBzdHIuc3BsaXQoJy8nKSxcbiAgICAgICAgbW9kaWZpZXJzID0gcGFydHMucG9wKCk7XG4gICAgICBwYXJ0cy5zaGlmdCgpO1xuICAgICAgcmV0dXJuIG5ldyBSZWdFeHAocGFydHMuam9pbignLycpLCBtb2RpZmllcnMpO1xuICAgIH0sXG5cbiAgICBfaXNSZWdFeHBPcHRpb246IGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7XG4gICAgICByZXR1cm4gKFxuICAgICAgICBrZXkgIT09ICd1cmwnICYmXG4gICAgICAgICQudHlwZSh2YWx1ZSkgPT09ICdzdHJpbmcnICYmXG4gICAgICAgIC9eXFwvLipcXC9baWdtXXswLDN9JC8udGVzdCh2YWx1ZSlcbiAgICAgICk7XG4gICAgfSxcblxuICAgIF9pbml0RGF0YUF0dHJpYnV0ZXM6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgb3B0aW9ucyA9IHRoaXMub3B0aW9ucyxcbiAgICAgICAgZGF0YSA9IHRoaXMuZWxlbWVudC5kYXRhKCk7XG4gICAgICAvLyBJbml0aWFsaXplIG9wdGlvbnMgc2V0IHZpYSBIVE1MNSBkYXRhLWF0dHJpYnV0ZXM6XG4gICAgICAkLmVhY2godGhpcy5lbGVtZW50WzBdLmF0dHJpYnV0ZXMsIGZ1bmN0aW9uIChpbmRleCwgYXR0cikge1xuICAgICAgICB2YXIga2V5ID0gYXR0ci5uYW1lLnRvTG93ZXJDYXNlKCksXG4gICAgICAgICAgdmFsdWU7XG4gICAgICAgIGlmICgvXmRhdGEtLy50ZXN0KGtleSkpIHtcbiAgICAgICAgICAvLyBDb252ZXJ0IGh5cGhlbi1hdGVkIGtleSB0byBjYW1lbENhc2U6XG4gICAgICAgICAga2V5ID0ga2V5LnNsaWNlKDUpLnJlcGxhY2UoLy1bYS16XS9nLCBmdW5jdGlvbiAoc3RyKSB7XG4gICAgICAgICAgICByZXR1cm4gc3RyLmNoYXJBdCgxKS50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIHZhbHVlID0gZGF0YVtrZXldO1xuICAgICAgICAgIGlmICh0aGF0Ll9pc1JlZ0V4cE9wdGlvbihrZXksIHZhbHVlKSkge1xuICAgICAgICAgICAgdmFsdWUgPSB0aGF0Ll9nZXRSZWdFeHAodmFsdWUpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBvcHRpb25zW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfSxcblxuICAgIF9jcmVhdGU6IGZ1bmN0aW9uICgpIHtcbiAgICAgIHRoaXMuX2luaXREYXRhQXR0cmlidXRlcygpO1xuICAgICAgdGhpcy5faW5pdFNwZWNpYWxPcHRpb25zKCk7XG4gICAgICB0aGlzLl9zbG90cyA9IFtdO1xuICAgICAgdGhpcy5fc2VxdWVuY2UgPSB0aGlzLl9nZXRYSFJQcm9taXNlKHRydWUpO1xuICAgICAgdGhpcy5fc2VuZGluZyA9IHRoaXMuX2FjdGl2ZSA9IDA7XG4gICAgICB0aGlzLl9pbml0UHJvZ3Jlc3NPYmplY3QodGhpcyk7XG4gICAgICB0aGlzLl9pbml0RXZlbnRIYW5kbGVycygpO1xuICAgIH0sXG5cbiAgICAvLyBUaGlzIG1ldGhvZCBpcyBleHBvc2VkIHRvIHRoZSB3aWRnZXQgQVBJIGFuZCBhbGxvd3MgdG8gcXVlcnlcbiAgICAvLyB0aGUgbnVtYmVyIG9mIGFjdGl2ZSB1cGxvYWRzOlxuICAgIGFjdGl2ZTogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX2FjdGl2ZTtcbiAgICB9LFxuXG4gICAgLy8gVGhpcyBtZXRob2QgaXMgZXhwb3NlZCB0byB0aGUgd2lkZ2V0IEFQSSBhbmQgYWxsb3dzIHRvIHF1ZXJ5XG4gICAgLy8gdGhlIHdpZGdldCB1cGxvYWQgcHJvZ3Jlc3MuXG4gICAgLy8gSXQgcmV0dXJucyBhbiBvYmplY3Qgd2l0aCBsb2FkZWQsIHRvdGFsIGFuZCBiaXRyYXRlIHByb3BlcnRpZXNcbiAgICAvLyBmb3IgdGhlIHJ1bm5pbmcgdXBsb2FkczpcbiAgICBwcm9ncmVzczogZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIHRoaXMuX3Byb2dyZXNzO1xuICAgIH0sXG5cbiAgICAvLyBUaGlzIG1ldGhvZCBpcyBleHBvc2VkIHRvIHRoZSB3aWRnZXQgQVBJIGFuZCBhbGxvd3MgYWRkaW5nIGZpbGVzXG4gICAgLy8gdXNpbmcgdGhlIGZpbGV1cGxvYWQgQVBJLiBUaGUgZGF0YSBwYXJhbWV0ZXIgYWNjZXB0cyBhbiBvYmplY3Qgd2hpY2hcbiAgICAvLyBtdXN0IGhhdmUgYSBmaWxlcyBwcm9wZXJ0eSBhbmQgY2FuIGNvbnRhaW4gYWRkaXRpb25hbCBvcHRpb25zOlxuICAgIC8vIC5maWxldXBsb2FkKCdhZGQnLCB7ZmlsZXM6IGZpbGVzTGlzdH0pO1xuICAgIGFkZDogZnVuY3Rpb24gKGRhdGEpIHtcbiAgICAgIHZhciB0aGF0ID0gdGhpcztcbiAgICAgIGlmICghZGF0YSB8fCB0aGlzLm9wdGlvbnMuZGlzYWJsZWQpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgaWYgKGRhdGEuZmlsZUlucHV0ICYmICFkYXRhLmZpbGVzKSB7XG4gICAgICAgIHRoaXMuX2dldEZpbGVJbnB1dEZpbGVzKGRhdGEuZmlsZUlucHV0KS5hbHdheXMoZnVuY3Rpb24gKGZpbGVzKSB7XG4gICAgICAgICAgZGF0YS5maWxlcyA9IGZpbGVzO1xuICAgICAgICAgIHRoYXQuX29uQWRkKG51bGwsIGRhdGEpO1xuICAgICAgICB9KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGEuZmlsZXMgPSAkLm1ha2VBcnJheShkYXRhLmZpbGVzKTtcbiAgICAgICAgdGhpcy5fb25BZGQobnVsbCwgZGF0YSk7XG4gICAgICB9XG4gICAgfSxcblxuICAgIC8vIFRoaXMgbWV0aG9kIGlzIGV4cG9zZWQgdG8gdGhlIHdpZGdldCBBUEkgYW5kIGFsbG93cyBzZW5kaW5nIGZpbGVzXG4gICAgLy8gdXNpbmcgdGhlIGZpbGV1cGxvYWQgQVBJLiBUaGUgZGF0YSBwYXJhbWV0ZXIgYWNjZXB0cyBhbiBvYmplY3Qgd2hpY2hcbiAgICAvLyBtdXN0IGhhdmUgYSBmaWxlcyBvciBmaWxlSW5wdXQgcHJvcGVydHkgYW5kIGNhbiBjb250YWluIGFkZGl0aW9uYWwgb3B0aW9uczpcbiAgICAvLyAuZmlsZXVwbG9hZCgnc2VuZCcsIHtmaWxlczogZmlsZXNMaXN0fSk7XG4gICAgLy8gVGhlIG1ldGhvZCByZXR1cm5zIGEgUHJvbWlzZSBvYmplY3QgZm9yIHRoZSBmaWxlIHVwbG9hZCBjYWxsLlxuICAgIHNlbmQ6IGZ1bmN0aW9uIChkYXRhKSB7XG4gICAgICBpZiAoZGF0YSAmJiAhdGhpcy5vcHRpb25zLmRpc2FibGVkKSB7XG4gICAgICAgIGlmIChkYXRhLmZpbGVJbnB1dCAmJiAhZGF0YS5maWxlcykge1xuICAgICAgICAgIHZhciB0aGF0ID0gdGhpcyxcbiAgICAgICAgICAgIGRmZCA9ICQuRGVmZXJyZWQoKSxcbiAgICAgICAgICAgIHByb21pc2UgPSBkZmQucHJvbWlzZSgpLFxuICAgICAgICAgICAganFYSFIsXG4gICAgICAgICAgICBhYm9ydGVkO1xuICAgICAgICAgIHByb21pc2UuYWJvcnQgPSBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgICBhYm9ydGVkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmIChqcVhIUikge1xuICAgICAgICAgICAgICByZXR1cm4ganFYSFIuYWJvcnQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRmZC5yZWplY3QobnVsbCwgJ2Fib3J0JywgJ2Fib3J0Jyk7XG4gICAgICAgICAgICByZXR1cm4gcHJvbWlzZTtcbiAgICAgICAgICB9O1xuICAgICAgICAgIHRoaXMuX2dldEZpbGVJbnB1dEZpbGVzKGRhdGEuZmlsZUlucHV0KS5hbHdheXMoZnVuY3Rpb24gKGZpbGVzKSB7XG4gICAgICAgICAgICBpZiAoYWJvcnRlZCkge1xuICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIWZpbGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICBkZmQucmVqZWN0KCk7XG4gICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRhdGEuZmlsZXMgPSBmaWxlcztcbiAgICAgICAgICAgIGpxWEhSID0gdGhhdC5fb25TZW5kKG51bGwsIGRhdGEpO1xuICAgICAgICAgICAganFYSFIudGhlbihcbiAgICAgICAgICAgICAgZnVuY3Rpb24gKHJlc3VsdCwgdGV4dFN0YXR1cywganFYSFIpIHtcbiAgICAgICAgICAgICAgICBkZmQucmVzb2x2ZShyZXN1bHQsIHRleHRTdGF0dXMsIGpxWEhSKTtcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgZnVuY3Rpb24gKGpxWEhSLCB0ZXh0U3RhdHVzLCBlcnJvclRocm93bikge1xuICAgICAgICAgICAgICAgIGRmZC5yZWplY3QoanFYSFIsIHRleHRTdGF0dXMsIGVycm9yVGhyb3duKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9KTtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fZW5oYW5jZVByb21pc2UocHJvbWlzZSk7XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5maWxlcyA9ICQubWFrZUFycmF5KGRhdGEuZmlsZXMpO1xuICAgICAgICBpZiAoZGF0YS5maWxlcy5sZW5ndGgpIHtcbiAgICAgICAgICByZXR1cm4gdGhpcy5fb25TZW5kKG51bGwsIGRhdGEpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5fZ2V0WEhSUHJvbWlzZShmYWxzZSwgZGF0YSAmJiBkYXRhLmNvbnRleHQpO1xuICAgIH1cbiAgfSk7XG59KTtcbiIsIi8qXG4gKiBqUXVlcnkgSWZyYW1lIFRyYW5zcG9ydCBQbHVnaW5cbiAqIGh0dHBzOi8vZ2l0aHViLmNvbS9ibHVlaW1wL2pRdWVyeS1GaWxlLVVwbG9hZFxuICpcbiAqIENvcHlyaWdodCAyMDExLCBTZWJhc3RpYW4gVHNjaGFuXG4gKiBodHRwczovL2JsdWVpbXAubmV0XG4gKlxuICogTGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlOlxuICogaHR0cHM6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9NSVRcbiAqL1xuXG4vKiBnbG9iYWwgZGVmaW5lLCByZXF1aXJlICovXG5cbihmdW5jdGlvbiAoZmFjdG9yeSkge1xuICAndXNlIHN0cmljdCc7XG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAvLyBSZWdpc3RlciBhcyBhbiBhbm9ueW1vdXMgQU1EIG1vZHVsZTpcbiAgICBkZWZpbmUoWydqcXVlcnknXSwgZmFjdG9yeSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgLy8gTm9kZS9Db21tb25KUzpcbiAgICBmYWN0b3J5KHJlcXVpcmUoJ2pxdWVyeScpKTtcbiAgfSBlbHNlIHtcbiAgICAvLyBCcm93c2VyIGdsb2JhbHM6XG4gICAgZmFjdG9yeSh3aW5kb3cualF1ZXJ5KTtcbiAgfVxufSkoZnVuY3Rpb24gKCQpIHtcbiAgJ3VzZSBzdHJpY3QnO1xuXG4gIC8vIEhlbHBlciB2YXJpYWJsZSB0byBjcmVhdGUgdW5pcXVlIG5hbWVzIGZvciB0aGUgdHJhbnNwb3J0IGlmcmFtZXM6XG4gIHZhciBjb3VudGVyID0gMCxcbiAgICBqc29uQVBJID0gJCxcbiAgICBqc29uUGFyc2UgPSAncGFyc2VKU09OJztcblxuICBpZiAoJ0pTT04nIGluIHdpbmRvdyAmJiAncGFyc2UnIGluIEpTT04pIHtcbiAgICBqc29uQVBJID0gSlNPTjtcbiAgICBqc29uUGFyc2UgPSAncGFyc2UnO1xuICB9XG5cbiAgLy8gVGhlIGlmcmFtZSB0cmFuc3BvcnQgYWNjZXB0cyBmb3VyIGFkZGl0aW9uYWwgb3B0aW9uczpcbiAgLy8gb3B0aW9ucy5maWxlSW5wdXQ6IGEgalF1ZXJ5IGNvbGxlY3Rpb24gb2YgZmlsZSBpbnB1dCBmaWVsZHNcbiAgLy8gb3B0aW9ucy5wYXJhbU5hbWU6IHRoZSBwYXJhbWV0ZXIgbmFtZSBmb3IgdGhlIGZpbGUgZm9ybSBkYXRhLFxuICAvLyAgb3ZlcnJpZGVzIHRoZSBuYW1lIHByb3BlcnR5IG9mIHRoZSBmaWxlIGlucHV0IGZpZWxkKHMpLFxuICAvLyAgY2FuIGJlIGEgc3RyaW5nIG9yIGFuIGFycmF5IG9mIHN0cmluZ3MuXG4gIC8vIG9wdGlvbnMuZm9ybURhdGE6IGFuIGFycmF5IG9mIG9iamVjdHMgd2l0aCBuYW1lIGFuZCB2YWx1ZSBwcm9wZXJ0aWVzLFxuICAvLyAgZXF1aXZhbGVudCB0byB0aGUgcmV0dXJuIGRhdGEgb2YgLnNlcmlhbGl6ZUFycmF5KCksIGUuZy46XG4gIC8vICBbe25hbWU6ICdhJywgdmFsdWU6IDF9LCB7bmFtZTogJ2InLCB2YWx1ZTogMn1dXG4gIC8vIG9wdGlvbnMuaW5pdGlhbElmcmFtZVNyYzogdGhlIFVSTCBvZiB0aGUgaW5pdGlhbCBpZnJhbWUgc3JjLFxuICAvLyAgYnkgZGVmYXVsdCBzZXQgdG8gXCJqYXZhc2NyaXB0OmZhbHNlO1wiXG4gICQuYWpheFRyYW5zcG9ydCgnaWZyYW1lJywgZnVuY3Rpb24gKG9wdGlvbnMpIHtcbiAgICBpZiAob3B0aW9ucy5hc3luYykge1xuICAgICAgLy8gamF2YXNjcmlwdDpmYWxzZSBhcyBpbml0aWFsIGlmcmFtZSBzcmNcbiAgICAgIC8vIHByZXZlbnRzIHdhcm5pbmcgcG9wdXBzIG9uIEhUVFBTIGluIElFNjpcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1zY3JpcHQtdXJsXG4gICAgICB2YXIgaW5pdGlhbElmcmFtZVNyYyA9IG9wdGlvbnMuaW5pdGlhbElmcmFtZVNyYyB8fCAnamF2YXNjcmlwdDpmYWxzZTsnLFxuICAgICAgICBmb3JtLFxuICAgICAgICBpZnJhbWUsXG4gICAgICAgIGFkZFBhcmFtQ2hhcjtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHNlbmQ6IGZ1bmN0aW9uIChfLCBjb21wbGV0ZUNhbGxiYWNrKSB7XG4gICAgICAgICAgZm9ybSA9ICQoJzxmb3JtIHN0eWxlPVwiZGlzcGxheTpub25lO1wiPjwvZm9ybT4nKTtcbiAgICAgICAgICBmb3JtLmF0dHIoJ2FjY2VwdC1jaGFyc2V0Jywgb3B0aW9ucy5mb3JtQWNjZXB0Q2hhcnNldCk7XG4gICAgICAgICAgYWRkUGFyYW1DaGFyID0gL1xcPy8udGVzdChvcHRpb25zLnVybCkgPyAnJicgOiAnPyc7XG4gICAgICAgICAgLy8gWERvbWFpblJlcXVlc3Qgb25seSBzdXBwb3J0cyBHRVQgYW5kIFBPU1Q6XG4gICAgICAgICAgaWYgKG9wdGlvbnMudHlwZSA9PT0gJ0RFTEVURScpIHtcbiAgICAgICAgICAgIG9wdGlvbnMudXJsID0gb3B0aW9ucy51cmwgKyBhZGRQYXJhbUNoYXIgKyAnX21ldGhvZD1ERUxFVEUnO1xuICAgICAgICAgICAgb3B0aW9ucy50eXBlID0gJ1BPU1QnO1xuICAgICAgICAgIH0gZWxzZSBpZiAob3B0aW9ucy50eXBlID09PSAnUFVUJykge1xuICAgICAgICAgICAgb3B0aW9ucy51cmwgPSBvcHRpb25zLnVybCArIGFkZFBhcmFtQ2hhciArICdfbWV0aG9kPVBVVCc7XG4gICAgICAgICAgICBvcHRpb25zLnR5cGUgPSAnUE9TVCc7XG4gICAgICAgICAgfSBlbHNlIGlmIChvcHRpb25zLnR5cGUgPT09ICdQQVRDSCcpIHtcbiAgICAgICAgICAgIG9wdGlvbnMudXJsID0gb3B0aW9ucy51cmwgKyBhZGRQYXJhbUNoYXIgKyAnX21ldGhvZD1QQVRDSCc7XG4gICAgICAgICAgICBvcHRpb25zLnR5cGUgPSAnUE9TVCc7XG4gICAgICAgICAgfVxuICAgICAgICAgIC8vIElFIHZlcnNpb25zIGJlbG93IElFOCBjYW5ub3Qgc2V0IHRoZSBuYW1lIHByb3BlcnR5IG9mXG4gICAgICAgICAgLy8gZWxlbWVudHMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbiBhZGRlZCB0byB0aGUgRE9NLFxuICAgICAgICAgIC8vIHNvIHdlIHNldCB0aGUgbmFtZSBhbG9uZyB3aXRoIHRoZSBpZnJhbWUgSFRNTCBtYXJrdXA6XG4gICAgICAgICAgY291bnRlciArPSAxO1xuICAgICAgICAgIGlmcmFtZSA9ICQoXG4gICAgICAgICAgICAnPGlmcmFtZSBzcmM9XCInICtcbiAgICAgICAgICAgICAgaW5pdGlhbElmcmFtZVNyYyArXG4gICAgICAgICAgICAgICdcIiBuYW1lPVwiaWZyYW1lLXRyYW5zcG9ydC0nICtcbiAgICAgICAgICAgICAgY291bnRlciArXG4gICAgICAgICAgICAgICdcIj48L2lmcmFtZT4nXG4gICAgICAgICAgKS5vbignbG9hZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgIHZhciBmaWxlSW5wdXRDbG9uZXMsXG4gICAgICAgICAgICAgIHBhcmFtTmFtZXMgPSAkLmlzQXJyYXkob3B0aW9ucy5wYXJhbU5hbWUpXG4gICAgICAgICAgICAgICAgPyBvcHRpb25zLnBhcmFtTmFtZVxuICAgICAgICAgICAgICAgIDogW29wdGlvbnMucGFyYW1OYW1lXTtcbiAgICAgICAgICAgIGlmcmFtZS5vZmYoJ2xvYWQnKS5vbignbG9hZCcsIGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgdmFyIHJlc3BvbnNlO1xuICAgICAgICAgICAgICAvLyBXcmFwIGluIGEgdHJ5L2NhdGNoIGJsb2NrIHRvIGNhdGNoIGV4Y2VwdGlvbnMgdGhyb3duXG4gICAgICAgICAgICAgIC8vIHdoZW4gdHJ5aW5nIHRvIGFjY2VzcyBjcm9zcy1kb21haW4gaWZyYW1lIGNvbnRlbnRzOlxuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gaWZyYW1lLmNvbnRlbnRzKCk7XG4gICAgICAgICAgICAgICAgLy8gR29vZ2xlIENocm9tZSBhbmQgRmlyZWZveCBkbyBub3QgdGhyb3cgYW5cbiAgICAgICAgICAgICAgICAvLyBleGNlcHRpb24gd2hlbiBjYWxsaW5nIGlmcmFtZS5jb250ZW50cygpIG9uXG4gICAgICAgICAgICAgICAgLy8gY3Jvc3MtZG9tYWluIHJlcXVlc3RzLCBzbyB3ZSB1bmlmeSB0aGUgcmVzcG9uc2U6XG4gICAgICAgICAgICAgICAgaWYgKCFyZXNwb25zZS5sZW5ndGggfHwgIXJlc3BvbnNlWzBdLmZpcnN0Q2hpbGQpIHtcbiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgIHJlc3BvbnNlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIC8vIFRoZSBjb21wbGV0ZSBjYWxsYmFjayByZXR1cm5zIHRoZVxuICAgICAgICAgICAgICAvLyBpZnJhbWUgY29udGVudCBkb2N1bWVudCBhcyByZXNwb25zZSBvYmplY3Q6XG4gICAgICAgICAgICAgIGNvbXBsZXRlQ2FsbGJhY2soMjAwLCAnc3VjY2VzcycsIHsgaWZyYW1lOiByZXNwb25zZSB9KTtcbiAgICAgICAgICAgICAgLy8gRml4IGZvciBJRSBlbmRsZXNzIHByb2dyZXNzIGJhciBhY3Rpdml0eSBidWdcbiAgICAgICAgICAgICAgLy8gKGhhcHBlbnMgb24gZm9ybSBzdWJtaXRzIHRvIGlmcmFtZSB0YXJnZXRzKTpcbiAgICAgICAgICAgICAgJCgnPGlmcmFtZSBzcmM9XCInICsgaW5pdGlhbElmcmFtZVNyYyArICdcIj48L2lmcmFtZT4nKS5hcHBlbmRUbyhcbiAgICAgICAgICAgICAgICBmb3JtXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgICAvLyBSZW1vdmluZyB0aGUgZm9ybSBpbiBhIHNldFRpbWVvdXQgY2FsbFxuICAgICAgICAgICAgICAgIC8vIGFsbG93cyBDaHJvbWUncyBkZXZlbG9wZXIgdG9vbHMgdG8gZGlzcGxheVxuICAgICAgICAgICAgICAgIC8vIHRoZSByZXNwb25zZSByZXN1bHRcbiAgICAgICAgICAgICAgICBmb3JtLnJlbW92ZSgpO1xuICAgICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgZm9ybVxuICAgICAgICAgICAgICAucHJvcCgndGFyZ2V0JywgaWZyYW1lLnByb3AoJ25hbWUnKSlcbiAgICAgICAgICAgICAgLnByb3AoJ2FjdGlvbicsIG9wdGlvbnMudXJsKVxuICAgICAgICAgICAgICAucHJvcCgnbWV0aG9kJywgb3B0aW9ucy50eXBlKTtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLmZvcm1EYXRhKSB7XG4gICAgICAgICAgICAgICQuZWFjaChvcHRpb25zLmZvcm1EYXRhLCBmdW5jdGlvbiAoaW5kZXgsIGZpZWxkKSB7XG4gICAgICAgICAgICAgICAgJCgnPGlucHV0IHR5cGU9XCJoaWRkZW5cIi8+JylcbiAgICAgICAgICAgICAgICAgIC5wcm9wKCduYW1lJywgZmllbGQubmFtZSlcbiAgICAgICAgICAgICAgICAgIC52YWwoZmllbGQudmFsdWUpXG4gICAgICAgICAgICAgICAgICAuYXBwZW5kVG8oZm9ybSk7XG4gICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICBvcHRpb25zLmZpbGVJbnB1dCAmJlxuICAgICAgICAgICAgICBvcHRpb25zLmZpbGVJbnB1dC5sZW5ndGggJiZcbiAgICAgICAgICAgICAgb3B0aW9ucy50eXBlID09PSAnUE9TVCdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICBmaWxlSW5wdXRDbG9uZXMgPSBvcHRpb25zLmZpbGVJbnB1dC5jbG9uZSgpO1xuICAgICAgICAgICAgICAvLyBJbnNlcnQgYSBjbG9uZSBmb3IgZWFjaCBmaWxlIGlucHV0IGZpZWxkOlxuICAgICAgICAgICAgICBvcHRpb25zLmZpbGVJbnB1dC5hZnRlcihmdW5jdGlvbiAoaW5kZXgpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmlsZUlucHV0Q2xvbmVzW2luZGV4XTtcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnBhcmFtTmFtZSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuZmlsZUlucHV0LmVhY2goZnVuY3Rpb24gKGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAkKHRoaXMpLnByb3AoJ25hbWUnLCBwYXJhbU5hbWVzW2luZGV4XSB8fCBvcHRpb25zLnBhcmFtTmFtZSk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gQXBwZW5kaW5nIHRoZSBmaWxlIGlucHV0IGZpZWxkcyB0byB0aGUgaGlkZGVuIGZvcm1cbiAgICAgICAgICAgICAgLy8gcmVtb3ZlcyB0aGVtIGZyb20gdGhlaXIgb3JpZ2luYWwgbG9jYXRpb246XG4gICAgICAgICAgICAgIGZvcm1cbiAgICAgICAgICAgICAgICAuYXBwZW5kKG9wdGlvbnMuZmlsZUlucHV0KVxuICAgICAgICAgICAgICAgIC5wcm9wKCdlbmN0eXBlJywgJ211bHRpcGFydC9mb3JtLWRhdGEnKVxuICAgICAgICAgICAgICAgIC8vIGVuY3R5cGUgbXVzdCBiZSBzZXQgYXMgZW5jb2RpbmcgZm9yIElFOlxuICAgICAgICAgICAgICAgIC5wcm9wKCdlbmNvZGluZycsICdtdWx0aXBhcnQvZm9ybS1kYXRhJyk7XG4gICAgICAgICAgICAgIC8vIFJlbW92ZSB0aGUgSFRNTDUgZm9ybSBhdHRyaWJ1dGUgZnJvbSB0aGUgaW5wdXQocyk6XG4gICAgICAgICAgICAgIG9wdGlvbnMuZmlsZUlucHV0LnJlbW92ZUF0dHIoJ2Zvcm0nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICAgICAgLy8gU3VibWl0dGluZyB0aGUgZm9ybSBpbiBhIHNldFRpbWVvdXQgY2FsbCBmaXhlcyBhbiBpc3N1ZSB3aXRoXG4gICAgICAgICAgICAgIC8vIFNhZmFyaSAxMyBub3QgdHJpZ2dlcmluZyB0aGUgaWZyYW1lIGxvYWQgZXZlbnQgYWZ0ZXIgcmVzZXR0aW5nXG4gICAgICAgICAgICAgIC8vIHRoZSBsb2FkIGV2ZW50IGhhbmRsZXIsIHNlZSBhbHNvOlxuICAgICAgICAgICAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vYmx1ZWltcC9qUXVlcnktRmlsZS1VcGxvYWQvaXNzdWVzLzM2MzNcbiAgICAgICAgICAgICAgZm9ybS5zdWJtaXQoKTtcbiAgICAgICAgICAgICAgLy8gSW5zZXJ0IHRoZSBmaWxlIGlucHV0IGZpZWxkcyBhdCB0aGVpciBvcmlnaW5hbCBsb2NhdGlvblxuICAgICAgICAgICAgICAvLyBieSByZXBsYWNpbmcgdGhlIGNsb25lcyB3aXRoIHRoZSBvcmlnaW5hbHM6XG4gICAgICAgICAgICAgIGlmIChmaWxlSW5wdXRDbG9uZXMgJiYgZmlsZUlucHV0Q2xvbmVzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMuZmlsZUlucHV0LmVhY2goZnVuY3Rpb24gKGluZGV4LCBpbnB1dCkge1xuICAgICAgICAgICAgICAgICAgdmFyIGNsb25lID0gJChmaWxlSW5wdXRDbG9uZXNbaW5kZXhdKTtcbiAgICAgICAgICAgICAgICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsIG5hbWUgYW5kIGZvcm0gcHJvcGVydGllczpcbiAgICAgICAgICAgICAgICAgICQoaW5wdXQpXG4gICAgICAgICAgICAgICAgICAgIC5wcm9wKCduYW1lJywgY2xvbmUucHJvcCgnbmFtZScpKVxuICAgICAgICAgICAgICAgICAgICAuYXR0cignZm9ybScsIGNsb25lLmF0dHIoJ2Zvcm0nKSk7XG4gICAgICAgICAgICAgICAgICBjbG9uZS5yZXBsYWNlV2l0aChpbnB1dCk7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDApO1xuICAgICAgICAgIH0pO1xuICAgICAgICAgIGZvcm0uYXBwZW5kKGlmcmFtZSkuYXBwZW5kVG8oZG9jdW1lbnQuYm9keSk7XG4gICAgICAgIH0sXG4gICAgICAgIGFib3J0OiBmdW5jdGlvbiAoKSB7XG4gICAgICAgICAgaWYgKGlmcmFtZSkge1xuICAgICAgICAgICAgLy8gamF2YXNjcmlwdDpmYWxzZSBhcyBpZnJhbWUgc3JjIGFib3J0cyB0aGUgcmVxdWVzdFxuICAgICAgICAgICAgLy8gYW5kIHByZXZlbnRzIHdhcm5pbmcgcG9wdXBzIG9uIEhUVFBTIGluIElFNi5cbiAgICAgICAgICAgIGlmcmFtZS5vZmYoJ2xvYWQnKS5wcm9wKCdzcmMnLCBpbml0aWFsSWZyYW1lU3JjKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKGZvcm0pIHtcbiAgICAgICAgICAgIGZvcm0ucmVtb3ZlKCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cbiAgfSk7XG5cbiAgLy8gVGhlIGlmcmFtZSB0cmFuc3BvcnQgcmV0dXJucyB0aGUgaWZyYW1lIGNvbnRlbnQgZG9jdW1lbnQgYXMgcmVzcG9uc2UuXG4gIC8vIFRoZSBmb2xsb3dpbmcgYWRkcyBjb252ZXJ0ZXJzIGZyb20gaWZyYW1lIHRvIHRleHQsIGpzb24sIGh0bWwsIHhtbFxuICAvLyBhbmQgc2NyaXB0LlxuICAvLyBQbGVhc2Ugbm90ZSB0aGF0IHRoZSBDb250ZW50LVR5cGUgZm9yIEpTT04gcmVzcG9uc2VzIGhhcyB0byBiZSB0ZXh0L3BsYWluXG4gIC8vIG9yIHRleHQvaHRtbCwgaWYgdGhlIGJyb3dzZXIgZG9lc24ndCBpbmNsdWRlIGFwcGxpY2F0aW9uL2pzb24gaW4gdGhlXG4gIC8vIEFjY2VwdCBoZWFkZXIsIGVsc2UgSUUgd2lsbCBzaG93IGEgZG93bmxvYWQgZGlhbG9nLlxuICAvLyBUaGUgQ29udGVudC1UeXBlIGZvciBYTUwgcmVzcG9uc2VzIG9uIHRoZSBvdGhlciBoYW5kIGhhcyB0byBiZSBhbHdheXNcbiAgLy8gYXBwbGljYXRpb24veG1sIG9yIHRleHQveG1sLCBzbyBJRSBwcm9wZXJseSBwYXJzZXMgdGhlIFhNTCByZXNwb25zZS5cbiAgLy8gU2VlIGFsc29cbiAgLy8gaHR0cHM6Ly9naXRodWIuY29tL2JsdWVpbXAvalF1ZXJ5LUZpbGUtVXBsb2FkL3dpa2kvU2V0dXAjY29udGVudC10eXBlLW5lZ290aWF0aW9uXG4gICQuYWpheFNldHVwKHtcbiAgICBjb252ZXJ0ZXJzOiB7XG4gICAgICAnaWZyYW1lIHRleHQnOiBmdW5jdGlvbiAoaWZyYW1lKSB7XG4gICAgICAgIHJldHVybiBpZnJhbWUgJiYgJChpZnJhbWVbMF0uYm9keSkudGV4dCgpO1xuICAgICAgfSxcbiAgICAgICdpZnJhbWUganNvbic6IGZ1bmN0aW9uIChpZnJhbWUpIHtcbiAgICAgICAgcmV0dXJuIGlmcmFtZSAmJiBqc29uQVBJW2pzb25QYXJzZV0oJChpZnJhbWVbMF0uYm9keSkudGV4dCgpKTtcbiAgICAgIH0sXG4gICAgICAnaWZyYW1lIGh0bWwnOiBmdW5jdGlvbiAoaWZyYW1lKSB7XG4gICAgICAgIHJldHVybiBpZnJhbWUgJiYgJChpZnJhbWVbMF0uYm9keSkuaHRtbCgpO1xuICAgICAgfSxcbiAgICAgICdpZnJhbWUgeG1sJzogZnVuY3Rpb24gKGlmcmFtZSkge1xuICAgICAgICB2YXIgeG1sRG9jID0gaWZyYW1lICYmIGlmcmFtZVswXTtcbiAgICAgICAgcmV0dXJuIHhtbERvYyAmJiAkLmlzWE1MRG9jKHhtbERvYylcbiAgICAgICAgICA/IHhtbERvY1xuICAgICAgICAgIDogJC5wYXJzZVhNTChcbiAgICAgICAgICAgICAgKHhtbERvYy5YTUxEb2N1bWVudCAmJiB4bWxEb2MuWE1MRG9jdW1lbnQueG1sKSB8fFxuICAgICAgICAgICAgICAgICQoeG1sRG9jLmJvZHkpLmh0bWwoKVxuICAgICAgICAgICAgKTtcbiAgICAgIH0sXG4gICAgICAnaWZyYW1lIHNjcmlwdCc6IGZ1bmN0aW9uIChpZnJhbWUpIHtcbiAgICAgICAgcmV0dXJuIGlmcmFtZSAmJiAkLmdsb2JhbEV2YWwoJChpZnJhbWVbMF0uYm9keSkudGV4dCgpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0pO1xufSk7XG4iLCJmdW5jdGlvbiByYW5kb21VVUlEKCkge1xyXG4gICAgaWYgKHR5cGVvZiBjcnlwdG8gPT09ICdvYmplY3QnICYmIHR5cGVvZiBjcnlwdG8ucmFuZG9tVVVJRCA9PT0gJ2Z1bmN0aW9uJykge1xyXG4gICAgICAgIHJldHVybiBjcnlwdG8ucmFuZG9tVVVJRCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiAoWzFlN10gKyAtMWUzICsgLTRlMyArIC04ZTMgKyAtMWUxMSkucmVwbGFjZSgvWzAxOF0vZywgYyA9PlxyXG4gICAgICAgIChjIF4gY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhuZXcgVWludDhBcnJheSgxKSlbMF0gJiAxNSA+PiBjIC8gNCkudG9TdHJpbmcoMTYpXHJcbiAgICApO1xyXG59XHJcbiIsInZhciBpbml0aWFsaXplZDtcclxudmFyIG1lZGlhQXBwO1xyXG5cclxudmFyIGJ1cyA9IG5ldyBWdWUoKTtcclxuXHJcbmZ1bmN0aW9uIGluaXRpYWxpemVNZWRpYUFwcGxpY2F0aW9uKGRpc3BsYXlNZWRpYUFwcGxpY2F0aW9uLCBtZWRpYUFwcGxpY2F0aW9uVXJsLCBwYXRoQmFzZSkge1xyXG5cclxuICAgIGlmIChpbml0aWFsaXplZCkge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgIH1cclxuXHJcbiAgICBpbml0aWFsaXplZCA9IHRydWU7XHJcblxyXG4gICAgaWYgKCFtZWRpYUFwcGxpY2F0aW9uVXJsKSB7XHJcbiAgICAgICAgY29uc29sZS5lcnJvcignbWVkaWFBcHBsaWNhdGlvblVybCB2YXJpYWJsZSBpcyBub3QgZGVmaW5lZCcpO1xyXG4gICAgfVxyXG5cclxuICAgICQuYWpheCh7XHJcbiAgICAgICAgdXJsOiBtZWRpYUFwcGxpY2F0aW9uVXJsLFxyXG4gICAgICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGNvbnRlbnQpIHtcclxuICAgICAgICAgICAgJCgnLnRhLWNvbnRlbnQnKS5hcHBlbmQoY29udGVudCk7XHJcblxyXG4gICAgICAgICAgICAkKGRvY3VtZW50KS50cmlnZ2VyKCdtZWRpYWFwcGxpY2F0aW9uOnJlYWR5Jyk7XHJcblxyXG4gICAgICAgICAgICB2YXIgcm9vdCA9IHtcclxuICAgICAgICAgICAgICAgIG5hbWU6ICQoJyN0LW1lZGlhTGlicmFyeScpLnRleHQoKSxcclxuICAgICAgICAgICAgICAgIHBhdGg6ICcnLFxyXG4gICAgICAgICAgICAgICAgZm9sZGVyOiAnJyxcclxuICAgICAgICAgICAgICAgIGlzRGlyZWN0b3J5OiB0cnVlXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICBtZWRpYUFwcCA9IG5ldyBWdWUoe1xyXG4gICAgICAgICAgICAgICAgZWw6ICcjbWVkaWFBcHAnLFxyXG4gICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkRm9sZGVyOiB7fSxcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYUl0ZW1zOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZE1lZGlhczogW10sXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3JzOiBbXSxcclxuICAgICAgICAgICAgICAgICAgICBkcmFnRHJvcFRodW1ibmFpbDogbmV3IEltYWdlKCksXHJcbiAgICAgICAgICAgICAgICAgICAgc21hbGxUaHVtYnM6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgIGdyaWRWaWV3OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYUZpbHRlcjogJycsXHJcbiAgICAgICAgICAgICAgICAgICAgc29ydEJ5OiAnJyxcclxuICAgICAgICAgICAgICAgICAgICBzb3J0QXNjOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1zSW5QYWdlOiBbXVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuZHJhZ0Ryb3BUaHVtYm5haWwuc3JjID0gKHBhdGhCYXNlIHx8ICcnKSArICcvT3JjaGFyZENvcmUuTWVkaWEvSW1hZ2VzL2RyYWctdGh1bWJuYWlsLnBuZyc7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ2ZvbGRlclNlbGVjdGVkJywgZnVuY3Rpb24gKGZvbGRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdGVkRm9sZGVyID0gZm9sZGVyO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdmb2xkZXJEZWxldGVkJywgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdFJvb3QoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRvbignZm9sZGVyQWRkZWQnLCBmdW5jdGlvbiAoZm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRGb2xkZXIgPSBmb2xkZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvbGRlci5zZWxlY3RlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ21lZGlhTGlzdE1vdmVkJywgZnVuY3Rpb24gKGVycm9ySW5mbykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmxvYWRGb2xkZXIoc2VsZi5zZWxlY3RlZEZvbGRlcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvckluZm8pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZXJyb3JzLnB1c2goZXJyb3JJbmZvKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdtZWRpYVJlbmFtZWQnLCBmdW5jdGlvbiAobmV3TmFtZSwgbmV3UGF0aCwgb2xkUGF0aCwgbmV3VXJsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYSA9IHNlbGYubWVkaWFJdGVtcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLm1lZGlhUGF0aCA9PT0gb2xkUGF0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlbMF07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYS5tZWRpYVBhdGggPSBuZXdQYXRoO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYS5uYW1lID0gbmV3TmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWEudXJsID0gbmV3VXJsO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBidXMuJG9uKCdjcmVhdGVGb2xkZXJSZXF1ZXN0ZWQnLCBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jcmVhdGVGb2xkZXIoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRvbignZGVsZXRlRm9sZGVyUmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVsZXRlRm9sZGVyKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGNvbW1vbiBoYW5kbGVycyBmb3IgYWN0aW9ucyBpbiBib3RoIGdyaWQgYW5kIHRhYmxlIHZpZXcuXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRvbignc29ydENoYW5nZVJlcXVlc3RlZCcsIGZ1bmN0aW9uIChuZXdTb3J0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuY2hhbmdlU29ydChuZXdTb3J0KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRvbignbWVkaWFUb2dnbGVSZXF1ZXN0ZWQnLCBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi50b2dnbGVTZWxlY3Rpb25PZk1lZGlhKG1lZGlhKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRvbigncmVuYW1lTWVkaWFSZXF1ZXN0ZWQnLCBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5yZW5hbWVNZWRpYShtZWRpYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJ1cy4kb24oJ2RlbGV0ZU1lZGlhUmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZGVsZXRlTWVkaWFJdGVtKG1lZGlhKTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRvbignbWVkaWFEcmFnU3RhcnRSZXF1ZXN0ZWQnLCBmdW5jdGlvbiAobWVkaWEsIGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVEcmFnU3RhcnQobWVkaWEsIGUpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaGFuZGxlciBmb3IgcGFnZXIgZXZlbnRzXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRvbigncGFnZXJFdmVudCcsIGZ1bmN0aW9uIChpdGVtc0luUGFnZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWxmLml0ZW1zSW5QYWdlID0gaXRlbXNJblBhZ2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRNZWRpYXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbWVkaWFBcHBsaWNhdGlvblByZWZzJykpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZEZvbGRlciA9IHJvb3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYuY3VycmVudFByZWZzID0gSlNPTi5wYXJzZShsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnbWVkaWFBcHBsaWNhdGlvblByZWZzJykpO1xyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIGNvbXB1dGVkOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaXNIb21lOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkRm9sZGVyID09IHJvb3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBwYXJlbnRzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEZvbGRlciA9IHRoaXMuc2VsZWN0ZWRGb2xkZXI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwYXJlbnRGb2xkZXIgJiYgcGFyZW50Rm9sZGVyLnBhdGggIT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAudW5zaGlmdChwYXJlbnRGb2xkZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyZW50Rm9sZGVyID0gcGFyZW50Rm9sZGVyLnBhcmVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcDtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHJvb3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJvb3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZE1lZGlhSXRlbXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZE1lZGlhcyA9IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGZpbHRlcmVkID0gc2VsZi5tZWRpYUl0ZW1zLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0ubmFtZS50b0xvd2VyQ2FzZSgpLmluZGV4T2Yoc2VsZi5tZWRpYUZpbHRlci50b0xvd2VyQ2FzZSgpKSA+IC0gMTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHNlbGYuc29ydEJ5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdzaXplJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNvcnRBc2MgPyBhLnNpemUgLSBiLnNpemUgOiBiLnNpemUgLSBhLnNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlICdtaW1lJzpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNvcnRBc2MgPyBhLm1pbWUudG9Mb3dlckNhc2UoKS5sb2NhbGVDb21wYXJlKGIubWltZS50b0xvd2VyQ2FzZSgpKSA6IGIubWltZS50b0xvd2VyQ2FzZSgpLmxvY2FsZUNvbXBhcmUoYS5taW1lLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnbGFzdE1vZGlmeSc6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWQuc29ydChmdW5jdGlvbiAoYSwgYikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2VsZi5zb3J0QXNjID8gYS5sYXN0TW9kaWZ5IC0gYi5sYXN0TW9kaWZ5IDogYi5sYXN0TW9kaWZ5IC0gYS5sYXN0TW9kaWZ5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZC5zb3J0KGZ1bmN0aW9uIChhLCBiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnNvcnRBc2MgPyBhLm5hbWUudG9Mb3dlckNhc2UoKS5sb2NhbGVDb21wYXJlKGIubmFtZS50b0xvd2VyQ2FzZSgpKSA6IGIubmFtZS50b0xvd2VyQ2FzZSgpLmxvY2FsZUNvbXBhcmUoYS5uYW1lLnRvTG93ZXJDYXNlKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmlsdGVyZWQ7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBoaWRkZW5Db3VudDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmVzdWx0ID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5tZWRpYUl0ZW1zLmxlbmd0aCAtIHRoaXMuZmlsdGVyZWRNZWRpYUl0ZW1zLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHRodW1iU2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zbWFsbFRodW1icyA/IDEwMCA6IDI0MDtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQcmVmczoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc21hbGxUaHVtYnM6IHRoaXMuc21hbGxUaHVtYnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRGb2xkZXI6IHRoaXMuc2VsZWN0ZWRGb2xkZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JpZFZpZXc6IHRoaXMuZ3JpZFZpZXdcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldDogZnVuY3Rpb24gKG5ld1ByZWZzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW5ld1ByZWZzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc21hbGxUaHVtYnMgPSBuZXdQcmVmcy5zbWFsbFRodW1icztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRGb2xkZXIgPSBuZXdQcmVmcy5zZWxlY3RlZEZvbGRlcjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ3JpZFZpZXcgPSBuZXdQcmVmcy5ncmlkVmlldztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB3YXRjaDoge1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRQcmVmczogZnVuY3Rpb24gKG5ld1ByZWZzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKCdtZWRpYUFwcGxpY2F0aW9uUHJlZnMnLCBKU09OLnN0cmluZ2lmeShuZXdQcmVmcykpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRGb2xkZXI6IGZ1bmN0aW9uIChuZXdGb2xkZXIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpYUZpbHRlciA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRm9sZGVyID0gbmV3Rm9sZGVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmxvYWRGb2xkZXIobmV3Rm9sZGVyKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLiRyZWZzLnJvb3RGb2xkZXIudG9nZ2xlKCk7XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgbWV0aG9kczoge1xyXG4gICAgICAgICAgICAgICAgICAgIHVwbG9hZFVybDogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkRm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHVybFZhbHVlID0gJCgnI3VwbG9hZEZpbGVzJykudmFsKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXJsVmFsdWUgKyAodXJsVmFsdWUuaW5kZXhPZignPycpID09IC0xID8gJz8nIDogJyYnKSArIFwicGF0aD1cIiArIGVuY29kZVVSSUNvbXBvbmVudCh0aGlzLnNlbGVjdGVkRm9sZGVyLnBhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0Um9vdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkRm9sZGVyID0gdGhpcy5yb290O1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgbG9hZEZvbGRlcjogZnVuY3Rpb24gKGZvbGRlcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmVycm9ycyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWFzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lZGlhVXJsID0gJCgnI2dldE1lZGlhSXRlbXNVcmwnKS52YWwoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZm9sZGVyLnBhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBtZWRpYVVybCArIChtZWRpYVVybC5pbmRleE9mKCc/JykgPT0gLTEgPyAnPycgOiAnJicpICsgXCJwYXRoPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KGZvbGRlci5wYXRoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ0dFVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLm9wZW4gPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1lZGlhSXRlbXMgPSBkYXRhO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRNZWRpYXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLnNvcnRCeSA9ICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc29ydEFzYyA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdlcnJvciBsb2FkaW5nIGZvbGRlcjonICsgZm9sZGVyLnBhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0Um9vdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdEFsbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWFzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5maWx0ZXJlZE1lZGlhSXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYXMucHVzaCh0aGlzLmZpbHRlcmVkTWVkaWFJdGVtc1tpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHVuU2VsZWN0QWxsOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGludmVydFNlbGVjdGlvbjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGVtcCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMuZmlsdGVyZWRNZWRpYUl0ZW1zLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc01lZGlhU2VsZWN0ZWQodGhpcy5maWx0ZXJlZE1lZGlhSXRlbXNbaV0pID09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC5wdXNoKHRoaXMuZmlsdGVyZWRNZWRpYUl0ZW1zW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWFzID0gdGVtcDtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHRvZ2dsZVNlbGVjdGlvbk9mTWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc01lZGlhU2VsZWN0ZWQobWVkaWEpID09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYXMuc3BsaWNlKHRoaXMuc2VsZWN0ZWRNZWRpYXMuaW5kZXhPZihtZWRpYSksIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhcy5wdXNoKG1lZGlhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgaXNNZWRpYVNlbGVjdGVkOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuc2VsZWN0ZWRNZWRpYXMuc29tZShmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgsIGFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC51cmwudG9Mb3dlckNhc2UoKSA9PT0gbWVkaWEudXJsLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlRm9sZGVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb2xkZXIgPSB0aGlzLnNlbGVjdGVkRm9sZGVyO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZSByb290IGZvbGRlciBjYW4ndCBiZSBkZWxldGVkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmb2xkZXIgPT0gdGhpcy5yb290Lm1vZGVsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm1EaWFsb2coe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uJChcIiNkZWxldGVGb2xkZXJcIikuZGF0YSgpLCBjYWxsYmFjazogZnVuY3Rpb24gKHJlc3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjZGVsZXRlRm9sZGVyVXJsJykudmFsKCkgKyBcIj9wYXRoPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KGZvbGRlci5wYXRoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuOiAkKFwiaW5wdXRbbmFtZT0nX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4nXVwiKS52YWwoKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzLiRlbWl0KCdkZWxldGVGb2xkZXInLCBmb2xkZXIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBjcmVhdGVGb2xkZXI6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2NyZWF0ZUZvbGRlck1vZGFsLWVycm9ycycpLmVtcHR5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtb2RhbCA9IGJvb3RzdHJhcC5Nb2RhbC5nZXRPckNyZWF0ZUluc3RhbmNlKCQoJyNjcmVhdGVGb2xkZXJNb2RhbCcpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbW9kYWwuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcjY3JlYXRlRm9sZGVyTW9kYWwgLm1vZGFsLWJvZHkgaW5wdXQnKS52YWwoJycpLmZvY3VzKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICByZW5hbWVNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNyZW5hbWVNZWRpYU1vZGFsLWVycm9ycycpLmVtcHR5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtb2RhbCA9IGJvb3RzdHJhcC5Nb2RhbC5nZXRPckNyZWF0ZUluc3RhbmNlKCQoJyNyZW5hbWVNZWRpYU1vZGFsJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJyNvbGQtaXRlbS1uYW1lJykudmFsKG1lZGlhLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcjcmVuYW1lTWVkaWFNb2RhbCAubW9kYWwtYm9keSBpbnB1dCcpLnZhbChtZWRpYS5uYW1lKS5mb2N1cygpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0QW5kRGVsZXRlTWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbGV0ZU1lZGlhKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGVNZWRpYUxpc3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG1lZGlhTGlzdCA9IHRoaXMuc2VsZWN0ZWRNZWRpYXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtZWRpYUxpc3QubGVuZ3RoIDwgMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtRGlhbG9nKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLiQoXCIjZGVsZXRlTWVkaWFcIikuZGF0YSgpLCBjYWxsYmFjazogZnVuY3Rpb24gKHJlc3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmVzcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGF0aHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZWRpYUxpc3QubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhdGhzLnB1c2gobWVkaWFMaXN0W2ldLm1lZGlhUGF0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNkZWxldGVNZWRpYUxpc3RVcmwnKS52YWwoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuOiAkKFwiaW5wdXRbbmFtZT0nX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4nXVwiKS52YWwoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoczogcGF0aHNcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2VsZi5zZWxlY3RlZE1lZGlhcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW5kZXggPSBzZWxmLm1lZGlhSXRlbXMgJiYgc2VsZi5tZWRpYUl0ZW1zLmluZGV4T2Yoc2VsZi5zZWxlY3RlZE1lZGlhc1tpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1lZGlhSXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgnbWVkaWFEZWxldGVkJywgc2VsZi5zZWxlY3RlZE1lZGlhc1tpXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZE1lZGlhcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICBkZWxldGVNZWRpYUl0ZW06IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybURpYWxvZyh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4kKFwiI2RlbGV0ZU1lZGlhXCIpLmRhdGEoKSwgY2FsbGJhY2s6IGZ1bmN0aW9uIChyZXNwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3ApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI2RlbGV0ZU1lZGlhVXJsJykudmFsKCkgKyBcIj9wYXRoPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KG1lZGlhLm1lZGlhUGF0aCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbjogJChcImlucHV0W25hbWU9J19fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuJ11cIikudmFsKClcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHNlbGYubWVkaWFJdGVtcyAmJiBzZWxmLm1lZGlhSXRlbXMuaW5kZXhPZihtZWRpYSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1lZGlhSXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzLiRlbWl0KCdtZWRpYURlbGV0ZWQnLCBtZWRpYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vc2VsZi5zZWxlY3RlZE1lZGlhID0gbnVsbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgaGFuZGxlRHJhZ1N0YXJ0OiBmdW5jdGlvbiAobWVkaWEsIGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmlyc3QgcGFydCBvZiBtb3ZlIG1lZGlhIHRvIGZvbGRlcjpcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJlcGFyZSB0aGUgZGF0YSB0aGF0IHdpbGwgYmUgaGFuZGxlZCBieSB0aGUgZm9sZGVyIGNvbXBvbmVudCBvbiBkcm9wIGV2ZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtZWRpYU5hbWVzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYXMuZm9yRWFjaChmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFOYW1lcy5wdXNoKGl0ZW0ubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gaW4gY2FzZSB0aGUgdXNlciBkcmFncyBhbiB1bnNlbGVjdGVkIGl0ZW0sIHdlIHNlbGVjdCBpdCBmaXJzdFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5pc01lZGlhU2VsZWN0ZWQobWVkaWEpID09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYU5hbWVzLnB1c2gobWVkaWEubmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWFzLnB1c2gobWVkaWEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLmRhdGFUcmFuc2Zlci5zZXREYXRhKCdtZWRpYU5hbWVzJywgSlNPTi5zdHJpbmdpZnkobWVkaWFOYW1lcykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLmRhdGFUcmFuc2Zlci5zZXREYXRhKCdzb3VyY2VGb2xkZXInLCB0aGlzLnNlbGVjdGVkRm9sZGVyLnBhdGgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UodGhpcy5kcmFnRHJvcFRodW1ibmFpbCwgMTAsIDEwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZS5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZCA9ICdtb3ZlJztcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGhhbmRsZVNjcm9sbFdoaWxlRHJhZzogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGUuY2xpZW50WSA8IDE1MCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93LnNjcm9sbEJ5KDAsIC0xMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlLmNsaWVudFkgPiB3aW5kb3cuaW5uZXJIZWlnaHQgLSAxMDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxCeSgwLCAxMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGNoYW5nZVNvcnQ6IGZ1bmN0aW9uIChuZXdTb3J0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnNvcnRCeSA9PSBuZXdTb3J0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNvcnRBc2MgPSAhdGhpcy5zb3J0QXNjO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zb3J0QXNjID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc29ydEJ5ID0gbmV3U29ydDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAkKCcjY3JlYXRlLWZvbGRlci1uYW1lJykua2V5cHJlc3MoZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBrZXkgPSBlLndoaWNoO1xyXG4gICAgICAgICAgICAgICAgaWYgKGtleSA9PSAxMykgeyAgLy8gdGhlIGVudGVyIGtleSBjb2RlXHJcbiAgICAgICAgICAgICAgICAgICAgJCgnI21vZGFsRm9vdGVyT2snKS5jbGljaygpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAkKCcjbW9kYWxGb290ZXJPaycpLm9uKCdjbGljaycsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgbmFtZSA9ICQoJyNjcmVhdGUtZm9sZGVyLW5hbWUnKS52YWwoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobmFtZSA9PT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgIHVybDogJCgnI2NyZWF0ZUZvbGRlclVybCcpLnZhbCgpICsgXCI/cGF0aD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChtZWRpYUFwcC5zZWxlY3RlZEZvbGRlci5wYXRoKSArIFwiJm5hbWU9XCIgKyBlbmNvZGVVUklDb21wb25lbnQobmFtZSksXHJcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbjogJChcImlucHV0W25hbWU9J19fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuJ11cIikudmFsKClcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgnYWRkRm9sZGVyJywgbWVkaWFBcHAuc2VsZWN0ZWRGb2xkZXIsIGRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbW9kYWwgPSBib290c3RyYXAuTW9kYWwuZ2V0T3JDcmVhdGVJbnN0YW5jZSgkKCcjY3JlYXRlRm9sZGVyTW9kYWwnKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJCgnI2NyZWF0ZUZvbGRlck1vZGFsLWVycm9ycycpLmVtcHR5KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlcnJvck1lc3NhZ2UgPSBKU09OLnBhcnNlKGVycm9yLnJlc3BvbnNlVGV4dCkudmFsdWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoJzxkaXYgY2xhc3M9XCJhbGVydCBhbGVydC1kYW5nZXJcIiByb2xlPVwiYWxlcnRcIj48L2Rpdj4nKS50ZXh0KGVycm9yTWVzc2FnZSkuYXBwZW5kVG8oJCgnI2NyZWF0ZUZvbGRlck1vZGFsLWVycm9ycycpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAkKCcjcmVuYW1lTWVkaWFNb2RhbEZvb3Rlck9rJykub24oJ2NsaWNrJywgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgICAgIHZhciBuZXdOYW1lID0gJCgnI25ldy1pdGVtLW5hbWUnKS52YWwoKTtcclxuICAgICAgICAgICAgICAgIHZhciBvbGROYW1lID0gJCgnI29sZC1pdGVtLW5hbWUnKS52YWwoKTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAobmV3TmFtZSA9PT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgY3VycmVudEZvbGRlciA9IG1lZGlhQXBwLnNlbGVjdGVkRm9sZGVyLnBhdGggKyBcIi9cIjtcclxuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Rm9sZGVyID09PSBcIi9cIikge1xyXG4gICAgICAgICAgICAgICAgICAgIGN1cnJlbnRGb2xkZXIgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIHZhciBuZXdQYXRoID0gY3VycmVudEZvbGRlciArIG5ld05hbWU7XHJcbiAgICAgICAgICAgICAgICB2YXIgb2xkUGF0aCA9IGN1cnJlbnRGb2xkZXIgKyBvbGROYW1lO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChuZXdQYXRoLnRvTG93ZXJDYXNlKCkgPT09IG9sZFBhdGgudG9Mb3dlckNhc2UoKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtb2RhbCA9IGJvb3RzdHJhcC5Nb2RhbC5nZXRPckNyZWF0ZUluc3RhbmNlKCQoJyNyZW5hbWVNZWRpYU1vZGFsJykpO1xyXG4gICAgICAgICAgICAgICAgICAgIG1vZGFsLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNyZW5hbWVNZWRpYVVybCcpLnZhbCgpICsgXCI/b2xkUGF0aD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChvbGRQYXRoKSArIFwiJm5ld1BhdGg9XCIgKyBlbmNvZGVVUklDb21wb25lbnQobmV3UGF0aCksXHJcbiAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbjogJChcImlucHV0W25hbWU9J19fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuJ11cIikudmFsKClcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBtb2RhbCA9IGJvb3RzdHJhcC5Nb2RhbC5nZXRPckNyZWF0ZUluc3RhbmNlKCQoJyNyZW5hbWVNZWRpYU1vZGFsJykpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtb2RhbC5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgnbWVkaWFSZW5hbWVkJywgbmV3TmFtZSwgbmV3UGF0aCwgb2xkUGF0aCwgZGF0YS5uZXdVcmwpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCcjcmVuYW1lTWVkaWFNb2RhbC1lcnJvcnMnKS5lbXB0eSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgZXJyb3JNZXNzYWdlID0gSlNPTi5wYXJzZShlcnJvci5yZXNwb25zZVRleHQpLnZhbHVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKCc8ZGl2IGNsYXNzPVwiYWxlcnQgYWxlcnQtZGFuZ2VyXCIgcm9sZT1cImFsZXJ0XCI+PC9kaXY+JykudGV4dChlcnJvck1lc3NhZ2UpLmFwcGVuZFRvKCQoJyNyZW5hbWVNZWRpYU1vZGFsLWVycm9ycycpKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBpZiAoZGlzcGxheU1lZGlhQXBwbGljYXRpb24pIHtcclxuICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtZWRpYUFwcCcpLnN0eWxlLmRpc3BsYXkgPSBcIlwiO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAkKGRvY3VtZW50KS50cmlnZ2VyKCdtZWRpYUFwcDpyZWFkeScpO1xyXG5cclxuICAgICAgICB9LFxyXG4gICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgIH1cclxuICAgIH0pO1xyXG59XHJcbiIsIiQoZG9jdW1lbnQpLm9uKCdtZWRpYUFwcDpyZWFkeScsIGZ1bmN0aW9uICgpIHtcclxuICAgIHZhciBjaHVua2VkRmlsZVVwbG9hZElkID0gcmFuZG9tVVVJRCgpO1xyXG5cclxuICAgICQoJyNmaWxldXBsb2FkJylcclxuICAgICAgICAuZmlsZXVwbG9hZCh7XHJcbiAgICAgICAgICAgIGRyb3Bab25lOiAkKCcjbWVkaWFBcHAnKSxcclxuICAgICAgICAgICAgbGltaXRDb25jdXJyZW50VXBsb2FkczogMjAsXHJcbiAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgICAgIHVybDogJCgnI3VwbG9hZEZpbGVzJykudmFsKCksXHJcbiAgICAgICAgICAgIG1heENodW5rU2l6ZTogTnVtYmVyKCQoJyNtYXhVcGxvYWRDaHVua1NpemUnKS52YWwoKSB8fCAwKSxcclxuICAgICAgICAgICAgZm9ybURhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHZhciBhbnRpRm9yZ2VyeVRva2VuID0gJChcImlucHV0W25hbWU9X19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW5dXCIpLnZhbCgpO1xyXG5cclxuICAgICAgICAgICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAncGF0aCcsIHZhbHVlOiBtZWRpYUFwcC5zZWxlY3RlZEZvbGRlci5wYXRoIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAnX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4nLCB2YWx1ZTogYW50aUZvcmdlcnlUb2tlbiB9LFxyXG4gICAgICAgICAgICAgICAgICAgIHsgbmFtZTogJ19fY2h1bmtlZEZpbGVVcGxvYWRJZCcsIHZhbHVlOiBjaHVua2VkRmlsZVVwbG9hZElkIH0sXHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGRvbmU6IGZ1bmN0aW9uIChlLCBkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAkLmVhY2goZGF0YS5yZXN1bHQuZmlsZXMsIGZ1bmN0aW9uIChpbmRleCwgZmlsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZmlsZS5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUFwcC5tZWRpYUl0ZW1zLnB1c2goZmlsZSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pXHJcbiAgICAgICAgLm9uKCdmaWxldXBsb2FkY2h1bmtiZWZvcmVzZW5kJywgKGUsIG9wdGlvbnMpID0+IHtcclxuICAgICAgICAgICAgbGV0IGZpbGUgPSBvcHRpb25zLmZpbGVzWzBdO1xyXG4gICAgICAgICAgICAvLyBIZXJlIHdlIHJlcGxhY2UgdGhlIGJsb2Igd2l0aCBhIEZpbGUgb2JqZWN0IHRvIGVuc3VyZSB0aGUgZmlsZSBuYW1lIGFuZCBvdGhlcnMgYXJlIHByZXNlcnZlZCBmb3IgdGhlIGJhY2tlbmQuXHJcbiAgICAgICAgICAgIG9wdGlvbnMuYmxvYiA9IG5ldyBGaWxlKFxyXG4gICAgICAgICAgICAgICAgW29wdGlvbnMuYmxvYl0sXHJcbiAgICAgICAgICAgICAgICBmaWxlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogZmlsZS50eXBlLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhc3RNb2RpZmllZDogZmlsZS5sYXN0TW9kaWZpZWQsXHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxufSk7XHJcblxyXG5cclxuJChkb2N1bWVudCkuYmluZCgnZHJhZ292ZXInLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgdmFyIGR0ID0gZS5vcmlnaW5hbEV2ZW50LmRhdGFUcmFuc2ZlcjtcclxuICAgIGlmIChkdC50eXBlcyAmJiAoZHQudHlwZXMuaW5kZXhPZiA/IGR0LnR5cGVzLmluZGV4T2YoJ0ZpbGVzJykgIT0gLTEgOiBkdC50eXBlcy5jb250YWlucygnRmlsZXMnKSkpIHtcclxuICAgICAgICB2YXIgZHJvcFpvbmUgPSAkKCcjY3VzdG9tZHJvcHpvbmUnKSxcclxuICAgICAgICAgICAgdGltZW91dCA9IHdpbmRvdy5kcm9wWm9uZVRpbWVvdXQ7XHJcbiAgICAgICAgaWYgKHRpbWVvdXQpIHtcclxuICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRyb3Bab25lLmFkZENsYXNzKCdpbicpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB2YXIgaG92ZXJlZERyb3Bab25lID0gJChlLnRhcmdldCkuY2xvc2VzdChkcm9wWm9uZSk7XHJcbiAgICAgICAgd2luZG93LmRyb3Bab25lVGltZW91dCA9IHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB3aW5kb3cuZHJvcFpvbmVUaW1lb3V0ID0gbnVsbDtcclxuICAgICAgICAgICAgZHJvcFpvbmUucmVtb3ZlQ2xhc3MoJ2luJyk7XHJcbiAgICAgICAgfSwgMTAwKTtcclxuICAgIH1cclxufSk7XHJcbiIsIi8vIDxmb2xkZXI+IGNvbXBvbmVudFxyXG5WdWUuY29tcG9uZW50KCdmb2xkZXInLCB7XHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxsaSA6Y2xhc3M9XCJ7c2VsZWN0ZWQ6IGlzU2VsZWN0ZWR9XCIgXHJcbiAgICAgICAgICAgICAgICB2LW9uOmRyYWdsZWF2ZS5wcmV2ZW50ID0gXCJoYW5kbGVEcmFnTGVhdmUoJGV2ZW50KTtcIiBcclxuICAgICAgICAgICAgICAgIHYtb246ZHJhZ292ZXIucHJldmVudC5zdG9wPVwiaGFuZGxlRHJhZ092ZXIoJGV2ZW50KTtcIiBcclxuICAgICAgICAgICAgICAgIHYtb246ZHJvcC5wcmV2ZW50LnN0b3AgPSBcIm1vdmVNZWRpYVRvRm9sZGVyKG1vZGVsLCAkZXZlbnQpXCIgPlxyXG4gICAgICAgICAgICA8ZGl2IDpjbGFzcz1cIntmb2xkZXJob3ZlcmVkOiBpc0hvdmVyZWQgLCB0cmVlcm9vdDogbGV2ZWwgPT0gMX1cIiA+XHJcbiAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgOnN0eWxlPVwieyBwYWRkaW5nJHtkb2N1bWVudC5kaXIgPT0gXCJsdHJcIiA/IFwiTGVmdFwiIDogXCJSaWdodFwifTpwYWRkaW5nICsgJ3B4JyB9XCIgdi1vbjpjbGljaz1cInNlbGVjdFwiICBkcmFnZ2FibGU9XCJmYWxzZVwiIGNsYXNzPVwiZm9sZGVyLW1lbnUtaXRlbVwiPlxyXG4gICAgICAgICAgICAgICAgICA8c3BhbiB2LW9uOmNsaWNrLnN0b3A9XCJ0b2dnbGVcIiBjbGFzcz1cImV4cGFuZFwiIDpjbGFzcz1cIntvcGVuZWQ6IG9wZW4sIGNsb3NlZDogIW9wZW4sIGVtcHR5OiBlbXB0eX1cIj48aSB2LWlmPVwib3BlblwiIGNsYXNzPVwiZmEtc29saWQgZmEtY2hldnJvbi0ke2RvY3VtZW50LmRpciA9PSBcImx0clwiID8gXCJyaWdodFwiIDogXCJsZWZ0XCJ9XCI+PC9pPjwvc3Bhbj4gXHJcbiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmb2xkZXItbmFtZSBtcy0yXCI+e3ttb2RlbC5uYW1lfX08L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnRuLWdyb3VwIGZvbGRlci1hY3Rpb25zXCIgPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgdi1jbG9hayBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJidG4gYnRuLXNtXCIgdi1vbjpjbGljaz1cImNyZWF0ZUZvbGRlclwiIHYtaWY9XCJpc1NlbGVjdGVkIHx8IGlzUm9vdFwiPjxpIGNsYXNzPVwiZmEtc29saWQgZmEtcGx1c1wiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB2LWNsb2FrIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cImJ0biBidG4tc21cIiB2LW9uOmNsaWNrPVwiZGVsZXRlRm9sZGVyXCIgdi1pZj1cImlzU2VsZWN0ZWQgJiYgIWlzUm9vdFwiPjxpIGNsYXNzPVwiZmEtc29saWQgZmEtdHJhc2hcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgPC9hPlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgPG9sIHYtc2hvdz1cIm9wZW5cIj5cclxuICAgICAgICAgICAgICAgIDxmb2xkZXIgdi1mb3I9XCJmb2xkZXIgaW4gY2hpbGRyZW5cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6a2V5PVwiZm9sZGVyLnBhdGhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6bW9kZWw9XCJmb2xkZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA6c2VsZWN0ZWQtaW4tbWVkaWEtYXBwPVwic2VsZWN0ZWRJbk1lZGlhQXBwXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgOmxldmVsPVwibGV2ZWwgKyAxXCI+XHJcbiAgICAgICAgICAgICAgICA8L2ZvbGRlcj5cclxuICAgICAgICAgICAgPC9vbD5cclxuICAgICAgICA8L2xpPlxyXG4gICAgICAgIGAsXHJcbiAgICBwcm9wczoge1xyXG4gICAgICAgIG1vZGVsOiBPYmplY3QsXHJcbiAgICAgICAgc2VsZWN0ZWRJbk1lZGlhQXBwOiBPYmplY3QsXHJcbiAgICAgICAgbGV2ZWw6IE51bWJlclxyXG4gICAgfSxcclxuICAgIGRhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICBvcGVuOiBmYWxzZSxcclxuICAgICAgICAgICAgY2hpbGRyZW46IG51bGwsIC8vIG5vdCBpbml0aWFsaXplZCBzdGF0ZSAoZm9yIGxhenktbG9hZGluZylcclxuICAgICAgICAgICAgcGFyZW50OiBudWxsLFxyXG4gICAgICAgICAgICBpc0hvdmVyZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBwYWRkaW5nOiAwXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIGNvbXB1dGVkOiB7XHJcbiAgICAgICAgZW1wdHk6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuICF0aGlzLmNoaWxkcmVuIHx8IHRoaXMuY2hpbGRyZW4ubGVuZ3RoID09IDA7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBpc1NlbGVjdGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAodGhpcy5zZWxlY3RlZEluTWVkaWFBcHAubmFtZSA9PSB0aGlzLm1vZGVsLm5hbWUpICYmICh0aGlzLnNlbGVjdGVkSW5NZWRpYUFwcC5wYXRoID09IHRoaXMubW9kZWwucGF0aCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBpc1Jvb3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwucGF0aCA9PT0gJyc7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICBpZiAoKHRoaXMuaXNSb290ID09IGZhbHNlKSAmJiAodGhpcy5pc0FuY2VzdG9yT2ZTZWxlY3RlZEZvbGRlcigpKSl7XHJcbiAgICAgICAgICAgIHRoaXMudG9nZ2xlKCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBhZGRpbmcgPSB0aGlzLmxldmVsIDwgMyA/ICAxNiA6IDE2ICsgKHRoaXMubGV2ZWwgKiA4KTtcclxuICAgIH0sXHJcbiAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIGJ1cy4kb24oJ2RlbGV0ZUZvbGRlcicsIGZ1bmN0aW9uIChmb2xkZXIpIHtcclxuICAgICAgICAgICAgaWYgKHNlbGYuY2hpbGRyZW4pIHtcclxuICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHNlbGYuY2hpbGRyZW4gJiYgc2VsZi5jaGlsZHJlbi5pbmRleE9mKGZvbGRlcilcclxuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGlsZHJlbi5zcGxpY2UoaW5kZXgsIDEpXHJcbiAgICAgICAgICAgICAgICAgICAgYnVzLiRlbWl0KCdmb2xkZXJEZWxldGVkJyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgYnVzLiRvbignYWRkRm9sZGVyJywgZnVuY3Rpb24gKHRhcmdldCwgZm9sZGVyKSB7XHJcbiAgICAgICAgICAgIGlmIChzZWxmLm1vZGVsID09IHRhcmdldCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY2hpbGRyZW4gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWxmLmNoaWxkcmVuLnB1c2goZm9sZGVyKTtcclxuICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBmb2xkZXIucGFyZW50ID0gc2VsZi5tb2RlbDtcclxuICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgnZm9sZGVyQWRkZWQnLCBmb2xkZXIpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9LFxyXG4gICAgbWV0aG9kczoge1xyXG4gICAgICAgIGlzQW5jZXN0b3JPZlNlbGVjdGVkRm9sZGVyOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHBhcmVudEZvbGRlciA9IG1lZGlhQXBwLnNlbGVjdGVkRm9sZGVyO1xyXG4gICAgICAgICAgICB3aGlsZSAocGFyZW50Rm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50Rm9sZGVyLnBhdGggPT0gdGhpcy5tb2RlbC5wYXRoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHBhcmVudEZvbGRlciA9IHBhcmVudEZvbGRlci5wYXJlbnQ7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRvZ2dsZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLm9wZW4gPSAhdGhpcy5vcGVuO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5vcGVuICYmICF0aGlzLmNoaWxkcmVuKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmxvYWRDaGlsZHJlbigpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZWxlY3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdmb2xkZXJTZWxlY3RlZCcsIHRoaXMubW9kZWwpO1xyXG4gICAgICAgICAgICB0aGlzLmxvYWRDaGlsZHJlbigpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY3JlYXRlRm9sZGVyOiBmdW5jdGlvbiAoKSB7ICAgICAgICAgICBcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdjcmVhdGVGb2xkZXJSZXF1ZXN0ZWQnKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRlbGV0ZUZvbGRlcjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ2RlbGV0ZUZvbGRlclJlcXVlc3RlZCcpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgbG9hZENoaWxkcmVuOiBmdW5jdGlvbiAoKSB7ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgaWYgKHRoaXMub3BlbiA9PSBmYWxzZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vcGVuID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgdXJsOiAkKCcjZ2V0Rm9sZGVyc1VybCcpLnZhbCgpICsgXCI/cGF0aD1cIiArIGVuY29kZVVSSUNvbXBvbmVudChzZWxmLm1vZGVsLnBhdGgpLFxyXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGlsZHJlbiA9IGRhdGE7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uIChjKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGMucGFyZW50ID0gc2VsZi5tb2RlbDtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZW10cHkgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaGFuZGxlRHJhZ092ZXI6IGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuaXNIb3ZlcmVkID0gdHJ1ZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGhhbmRsZURyYWdMZWF2ZTogZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgdGhpcy5pc0hvdmVyZWQgPSBmYWxzZTsgICAgICAgICAgICBcclxuICAgICAgICB9LFxyXG4gICAgICAgIG1vdmVNZWRpYVRvRm9sZGVyOiBmdW5jdGlvbiAoZm9sZGVyLCBlKSB7XHJcblxyXG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgIHNlbGYuaXNIb3ZlcmVkID0gZmFsc2U7XHJcblxyXG4gICAgICAgICAgICB2YXIgbWVkaWFOYW1lcyA9IEpTT04ucGFyc2UoZS5kYXRhVHJhbnNmZXIuZ2V0RGF0YSgnbWVkaWFOYW1lcycpKTsgXHJcblxyXG4gICAgICAgICAgICBpZiAobWVkaWFOYW1lcy5sZW5ndGggPCAxKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHZhciBzb3VyY2VGb2xkZXIgPSBlLmRhdGFUcmFuc2Zlci5nZXREYXRhKCdzb3VyY2VGb2xkZXInKTtcclxuICAgICAgICAgICAgdmFyIHRhcmdldEZvbGRlciA9IGZvbGRlci5wYXRoO1xyXG5cclxuICAgICAgICAgICAgaWYgKHNvdXJjZUZvbGRlciA9PT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHNvdXJjZUZvbGRlciA9ICdyb290JztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHRhcmdldEZvbGRlciA9PT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHRhcmdldEZvbGRlciA9ICdyb290JztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKHNvdXJjZUZvbGRlciA9PT0gdGFyZ2V0Rm9sZGVyKSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydCgkKCcjc2FtZUZvbGRlck1lc3NhZ2UnKS52YWwoKSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbmZpcm1EaWFsb2coey4uLiQoXCIjbW92ZU1lZGlhXCIpLmRhdGEoKSwgY2FsbGJhY2s6IGZ1bmN0aW9uIChyZXNwKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAocmVzcCkge1xyXG4gICAgICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI21vdmVNZWRpYUxpc3RVcmwnKS52YWwoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRhdGE6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fUmVxdWVzdFZlcmlmaWNhdGlvblRva2VuOiAkKFwiaW5wdXRbbmFtZT0nX19SZXF1ZXN0VmVyaWZpY2F0aW9uVG9rZW4nXVwiKS52YWwoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhTmFtZXM6IG1lZGlhTmFtZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VGb2xkZXI6IHNvdXJjZUZvbGRlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldEZvbGRlcjogdGFyZ2V0Rm9sZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1cy4kZW1pdCgnbWVkaWFMaXN0TW92ZWQnKTsgLy8gTWVkaWFBcHAgd2lsbCBsaXN0ZW4gdG8gdGhpcywgYW5kIHRoZW4gaXQgd2lsbCByZWxvYWQgcGFnZSBzbyB0aGUgbW92ZWQgbWVkaWFzIHdvbid0IGJlIHRoZXJlIGFueW1vcmVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvci5yZXNwb25zZVRleHQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVzLiRlbWl0KCdtZWRpYUxpc3RNb3ZlZCcsIGVycm9yLnJlc3BvbnNlVGV4dCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfX0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICB9XHJcbn0pO1xyXG4iLCIvLyBodHRwczovL2dpdGh1Yi5jb20vc3BhdGllL2ZvbnQtYXdlc29tZS1maWxldHlwZXNcclxuXHJcbmNvbnN0IGZhSWNvbnMgPSB7XHJcbiAgICBpbWFnZTogJ2ZhLXJlZ3VsYXIgZmEtaW1hZ2UnLFxyXG4gICAgcGRmOiAnZmEtcmVndWxhciBmYS1maWxlLXBkZicsXHJcbiAgICB3b3JkOiAnZmEtcmVndWxhciBmYS1maWxlLXdvcmQnLFxyXG4gICAgcG93ZXJwb2ludDogJ2ZhLXJlZ3VsYXIgZmEtZmlsZS1wb3dlcnBvaW50JyxcclxuICAgIGV4Y2VsOiAnZmEtcmVndWxhciBmYS1maWxlLWV4Y2VsJyxcclxuICAgIGNzdjogJ2ZhLXJlZ3VsYXIgZmEtZmlsZScsXHJcbiAgICBhdWRpbzogJ2ZhLXJlZ3VsYXIgZmEtZmlsZS1hdWRpbycsXHJcbiAgICB2aWRlbzogJ2ZhLXJlZ3VsYXIgZmEtZmlsZS12aWRlbycsXHJcbiAgICBhcmNoaXZlOiAnZmEtcmVndWxhciBmYS1maWxlLXppcHBlcicsXHJcbiAgICBjb2RlOiAnZmEtcmVndWxhciBmYS1maWxlLWNvZGUnLFxyXG4gICAgdGV4dDogJ2ZhLXJlZ3VsYXIgZmEtZmlsZS1saW5lcycsXHJcbiAgICBmaWxlOiAnZmEtcmVndWxhciBmYS1maWxlJ1xyXG59O1xyXG5cclxuY29uc3QgZmFUaHVtYm5haWxzID0ge1xyXG4gICAgZ2lmOiBmYUljb25zLmltYWdlLFxyXG4gICAganBlZzogZmFJY29ucy5pbWFnZSxcclxuICAgIGpwZzogZmFJY29ucy5pbWFnZSxcclxuICAgIHBuZzogZmFJY29ucy5pbWFnZSxcclxuICAgIHBkZjogZmFJY29ucy5wZGYsXHJcbiAgICBkb2M6IGZhSWNvbnMud29yZCxcclxuICAgIGRvY3g6IGZhSWNvbnMud29yZCxcclxuICAgIHBwdDogZmFJY29ucy5wb3dlcnBvaW50LFxyXG4gICAgcHB0eDogZmFJY29ucy5wb3dlcnBvaW50LFxyXG4gICAgeGxzOiBmYUljb25zLmV4Y2VsLFxyXG4gICAgeGxzeDogZmFJY29ucy5leGNlbCxcclxuICAgIGNzdjogZmFJY29ucy5jc3YsXHJcbiAgICBhYWM6IGZhSWNvbnMuYXVkaW8sXHJcbiAgICBtcDM6IGZhSWNvbnMuYXVkaW8sXHJcbiAgICBvZ2c6IGZhSWNvbnMuYXVkaW8sXHJcbiAgICBhdmk6IGZhSWNvbnMudmlkZW8sXHJcbiAgICBmbHY6IGZhSWNvbnMudmlkZW8sXHJcbiAgICBta3Y6IGZhSWNvbnMudmlkZW8sXHJcbiAgICBtcDQ6IGZhSWNvbnMudmlkZW8sXHJcbiAgICB3ZWJtOiBmYUljb25zLnZpZGVvLFxyXG4gICAgZ3o6IGZhSWNvbnMuYXJjaGl2ZSxcclxuICAgIHppcDogZmFJY29ucy5hcmNoaXZlLFxyXG4gICAgY3NzOiBmYUljb25zLmNvZGUsXHJcbiAgICBodG1sOiBmYUljb25zLmNvZGUsXHJcbiAgICBqczogZmFJY29ucy5jb2RlLFxyXG4gICAgdHh0OiBmYUljb25zLnRleHRcclxufTtcclxuXHJcbmZ1bmN0aW9uIGdldENsYXNzTmFtZUZvckV4dGVuc2lvbihleHRlbnNpb24pIHtcclxuICAgIHJldHVybiBmYVRodW1ibmFpbHNbZXh0ZW5zaW9uLnRvTG93ZXJDYXNlKCldIHx8IGZhSWNvbnMuZmlsZVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRFeHRlbnNpb25Gb3JGaWxlbmFtZShmaWxlbmFtZSkge1xyXG4gICAgcmV0dXJuIGZpbGVuYW1lLnNsaWNlKChmaWxlbmFtZS5sYXN0SW5kZXhPZignLicpIC0gMSA+Pj4gMCkgKyAyKVxyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRDbGFzc05hbWVGb3JGaWxlbmFtZShmaWxlbmFtZSkge1xyXG4gICAgcmV0dXJuIGdldENsYXNzTmFtZUZvckV4dGVuc2lvbihnZXRFeHRlbnNpb25Gb3JGaWxlbmFtZShmaWxlbmFtZSkpXHJcbn1cclxuIiwiLy8gPG1lZGlhLWl0ZW1zLWdyaWQ+IGNvbXBvbmVudFxyXG5WdWUuY29tcG9uZW50KCdtZWRpYS1pdGVtcy1ncmlkJywge1xyXG4gICAgdGVtcGxhdGU6IGBcclxuICAgICAgICA8b2wgY2xhc3M9XCJyb3cgbWVkaWEtaXRlbXMtZ3JpZFwiPlxyXG4gICAgICAgICAgICAgICAgPGxpIHYtZm9yPVwibWVkaWEgaW4gZmlsdGVyZWRNZWRpYUl0ZW1zXCJcclxuICAgICAgICAgICAgICAgICAgICA6a2V5PVwibWVkaWEubmFtZVwiIFxyXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwibWVkaWEtaXRlbSBtZWRpYS1jb250YWluZXItbWFpbi1saXN0LWl0ZW0gY2FyZCBwLTBcIlxyXG4gICAgICAgICAgICAgICAgICAgIDpzdHlsZT1cInt3aWR0aDogdGh1bWJTaXplICsgMiArICdweCd9XCJcclxuICAgICAgICAgICAgICAgICAgICA6Y2xhc3M9XCJ7c2VsZWN0ZWQ6IGlzTWVkaWFTZWxlY3RlZChtZWRpYSl9XCJcclxuICAgICAgICAgICAgICAgICAgICB2LW9uOmNsaWNrLnN0b3A9XCJ0b2dnbGVTZWxlY3Rpb25PZk1lZGlhKG1lZGlhKVwiXHJcbiAgICAgICAgICAgICAgICAgICAgZHJhZ2dhYmxlPVwidHJ1ZVwiIHYtb246ZHJhZ3N0YXJ0PVwiZHJhZ1N0YXJ0KG1lZGlhLCAkZXZlbnQpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRodW1iLWNvbnRhaW5lclwiIDpzdHlsZT1cIntoZWlnaHQ6IHRodW1iU2l6ZSArJ3B4J31cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGltZyB2LWlmPVwibWVkaWEubWltZS5zdGFydHNXaXRoKCdpbWFnZScpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c3JjPVwiYnVpbGRNZWRpYVVybChtZWRpYS51cmwsIHRodW1iU2l6ZSlcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDpkYXRhLW1pbWU9XCJtZWRpYS5taW1lXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c3R5bGU9XCJ7bWF4SGVpZ2h0OiB0aHVtYlNpemUgKydweCcsIG1heFdpZHRoOiB0aHVtYlNpemUgKydweCd9XCIgLz5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGkgdi1lbHNlIDpjbGFzcz1cImdldGZvbnRBd2Vzb21lQ2xhc3NOYW1lRm9yRmlsZU5hbWUobWVkaWEubmFtZSwgXFwnZmEtNXhcXCcpXCIgOmRhdGEtbWltZT1cIm1lZGlhLm1pbWVcIj48L2k+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVkaWEtY29udGFpbmVyLW1haW4taXRlbS10aXRsZSBjYXJkLWJvZHlcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gZmxvYXQtZW5kIGlubGluZS1tZWRpYS1idXR0b24gZWRpdC1idXR0b25cIiB2LW9uOmNsaWNrLnN0b3A9XCJyZW5hbWVNZWRpYShtZWRpYSlcIj48aSBjbGFzcz1cImZhLXNvbGlkIGZhLWVkaXRcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+PC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSBmbG9hdC1lbmQgaW5saW5lLW1lZGlhLWJ1dHRvbiBkZWxldGUtYnV0dG9uXCIgdi1vbjpjbGljay5zdG9wPVwiZGVsZXRlTWVkaWEobWVkaWEpXCI+PGkgY2xhc3M9XCJmYS1zb2xpZCBmYS10cmFzaFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxhIDpocmVmPVwibWVkaWEudXJsXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSBmbG9hdC1lbmQgaW5saW5lLW1lZGlhLWJ1dHRvbiB2aWV3LWJ1dHRvblwiXCI+PGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1kb3dubG9hZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwibWVkaWEtZmlsZW5hbWUgY2FyZC10ZXh0IHNtYWxsXCIgOnRpdGxlPVwibWVkaWEubmFtZVwiPnt7IG1lZGlhLm5hbWUgfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICA8L29sPlxyXG4gICAgICAgIGAsXHJcbiAgICBkYXRhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgVDoge31cclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgcHJvcHM6IHtcclxuICAgICAgICBmaWx0ZXJlZE1lZGlhSXRlbXM6IEFycmF5LFxyXG4gICAgICAgIHNlbGVjdGVkTWVkaWFzOiBBcnJheSxcclxuICAgICAgICB0aHVtYlNpemU6IE51bWJlclxyXG4gICAgfSxcclxuICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgLy8gcmV0cmlldmluZyBsb2NhbGl6ZWQgc3RyaW5ncyBmcm9tIHZpZXdcclxuICAgICAgICBzZWxmLlQuZWRpdEJ1dHRvbiA9ICQoJyN0LWVkaXQtYnV0dG9uJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULmRlbGV0ZUJ1dHRvbiA9ICQoJyN0LWRlbGV0ZS1idXR0b24nKS52YWwoKTtcclxuICAgIH0sXHJcbiAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgaXNNZWRpYVNlbGVjdGVkOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuc2VsZWN0ZWRNZWRpYXMuc29tZShmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgsIGFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC51cmwudG9Mb3dlckNhc2UoKSA9PT0gbWVkaWEudXJsLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYnVpbGRNZWRpYVVybDogZnVuY3Rpb24gKHVybCwgdGh1bWJTaXplKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1cmwgKyAodXJsLmluZGV4T2YoJz8nKSA9PSAtMSA/ICc/JyA6ICcmJykgKyAnd2lkdGg9JyArIHRodW1iU2l6ZSArICcmaGVpZ2h0PScgKyB0aHVtYlNpemU7XHJcbiAgICAgICAgfSxcclxuICAgICAgICB0b2dnbGVTZWxlY3Rpb25PZk1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdtZWRpYVRvZ2dsZVJlcXVlc3RlZCcsIG1lZGlhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHJlbmFtZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdyZW5hbWVNZWRpYVJlcXVlc3RlZCcsIG1lZGlhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRlbGV0ZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdkZWxldGVNZWRpYVJlcXVlc3RlZCcsIG1lZGlhKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRyYWdTdGFydDogZnVuY3Rpb24gKG1lZGlhLCBlKSB7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgnbWVkaWFEcmFnU3RhcnRSZXF1ZXN0ZWQnLCBtZWRpYSwgZSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBnZXRmb250QXdlc29tZUNsYXNzTmFtZUZvckZpbGVOYW1lOmZ1bmN0aW9uIGdldGZvbnRBd2Vzb21lQ2xhc3NOYW1lRm9yRmlsZW5hbWUoZmlsZW5hbWUsIHRodW1ic2l6ZSl7XHJcbiAgICAgICAgICAgIHJldHVybiBnZXRDbGFzc05hbWVGb3JGaWxlbmFtZShmaWxlbmFtZSkgKyAnICcgKyB0aHVtYnNpemU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuIiwiLy8gPG1lZGlhLWl0ZW1zLXRhYmxlPiBjb21wb25lbnRcclxuVnVlLmNvbXBvbmVudCgnbWVkaWEtaXRlbXMtdGFibGUnLCB7XHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDx0YWJsZSBjbGFzcz1cInRhYmxlIG1lZGlhLWl0ZW1zLXRhYmxlIG0tMFwiPlxyXG4gICAgICAgICAgICA8dGhlYWQ+XHJcbiAgICAgICAgICAgICAgICA8dHIgY2xhc3M9XCJoZWFkZXItcm93XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgY2xhc3M9XCJ0aHVtYm5haWwtY29sdW1uXCI+e3sgVC5pbWFnZUhlYWRlciB9fTwvdGg+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgdi1vbjpjbGljaz1cImNoYW5nZVNvcnQoJ25hbWUnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgIHt7IFQubmFtZUhlYWRlciB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPHNvcnQtaW5kaWNhdG9yIGNvbG5hbWU9XCJuYW1lXCIgOnNlbGVjdGVkY29sbmFtZT1cInNvcnRCeVwiIDphc2M9XCJzb3J0QXNjXCI+PC9zb3J0LWluZGljYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICA8L3RoPlxyXG4gICAgICAgICAgICAgICAgICAgIDx0aCBzY29wZT1cImNvbFwiIHYtb246Y2xpY2s9XCJjaGFuZ2VTb3J0KCdsYXN0TW9kaWZ5JylcIj4gXHJcbiAgICAgICAgICAgICAgICAgICAgICAge3sgVC5sYXN0TW9kaWZ5SGVhZGVyIH19IFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPHNvcnQtaW5kaWNhdG9yIGNvbG5hbWU9XCJsYXN0TW9kaWZ5XCIgOnNlbGVjdGVkY29sbmFtZT1cInNvcnRCeVwiIDphc2M9XCJzb3J0QXNjXCI+PC9zb3J0LWluZGljYXRvcj4gXHJcbiAgICAgICAgICAgICAgICAgICAgPC90aD4gXHJcbiAgICAgICAgICAgICAgICAgICAgPHRoIHNjb3BlPVwiY29sXCIgdi1vbjpjbGljaz1cImNoYW5nZVNvcnQoJ3NpemUnKVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIm9wdGlvbmFsLWNvbFwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAge3sgVC5zaXplSGVhZGVyIH19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8c29ydC1pbmRpY2F0b3IgY29sbmFtZT1cInNpemVcIiA6c2VsZWN0ZWRjb2xuYW1lPVwic29ydEJ5XCIgOmFzYz1cInNvcnRBc2NcIj48L3NvcnQtaW5kaWNhdG9yPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XHJcbiAgICAgICAgICAgICAgICAgICAgPC90aD5cclxuICAgICAgICAgICAgICAgICAgICA8dGggc2NvcGU9XCJjb2xcIiB2LW9uOmNsaWNrPVwiY2hhbmdlU29ydCgnbWltZScpXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwib3B0aW9uYWwtY29sXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIHt7IFQudHlwZUhlYWRlciB9fVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPHNvcnQtaW5kaWNhdG9yIGNvbG5hbWU9XCJtaW1lXCIgOnNlbGVjdGVkY29sbmFtZT1cInNvcnRCeVwiIDphc2M9XCJzb3J0QXNjXCI+PC9zb3J0LWluZGljYXRvcj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvdGg+XHJcbiAgICAgICAgICAgICAgICA8L3RyPlxyXG4gICAgICAgICAgICA8L3RoZWFkPlxyXG4gICAgICAgICAgICA8dGJvZHk+XHJcbiAgICAgICAgICAgICAgICAgICAgPHRyIHYtZm9yPVwibWVkaWEgaW4gZmlsdGVyZWRNZWRpYUl0ZW1zXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIm1lZGlhLWl0ZW1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDpjbGFzcz1cIntzZWxlY3RlZDogaXNNZWRpYVNlbGVjdGVkKG1lZGlhKX1cIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHYtb246Y2xpY2suc3RvcD1cInRvZ2dsZVNlbGVjdGlvbk9mTWVkaWEobWVkaWEpXCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBkcmFnZ2FibGU9XCJ0cnVlXCIgdi1vbjpkcmFnc3RhcnQ9XCJkcmFnU3RhcnQobWVkaWEsICRldmVudClcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDprZXk9XCJtZWRpYS5uYW1lXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPVwidGh1bWJuYWlsLWNvbHVtblwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbWctd3JhcHBlclwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8aW1nIHYtaWY9XCJtZWRpYS5taW1lLnN0YXJ0c1dpdGgoJ2ltYWdlJylcIiBkcmFnZ2FibGU9XCJmYWxzZVwiIDpzcmM9XCJidWlsZE1lZGlhVXJsKG1lZGlhLnVybCwgdGh1bWJTaXplKVwiIC8+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIHYtZWxzZSA6Y2xhc3M9XCJnZXRmb250QXdlc29tZUNsYXNzTmFtZUZvckZpbGVOYW1lKG1lZGlhLm5hbWUsIFxcJ2ZhLTR4XFwnKVwiIDpkYXRhLW1pbWU9XCJtZWRpYS5taW1lXCI+PC9pPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVkaWEtbmFtZS1jZWxsXCI+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJicmVhay13b3JkXCI+IHt7IG1lZGlhLm5hbWUgfX0gPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYnV0dG9ucy1jb250YWluZXJcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cImJ0biBidG4tbGluayBidG4tc20gbWUtMSBlZGl0LWJ1dHRvblwiIHYtb246Y2xpY2suc3RvcD1cInJlbmFtZU1lZGlhKG1lZGlhKVwiPiB7eyBULmVkaXRCdXR0b24gfX0gPC9hID5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cImJ0biBidG4tbGluayBidG4tc20gZGVsZXRlLWJ1dHRvblwiIHYtb246Y2xpY2suc3RvcD1cImRlbGV0ZU1lZGlhKG1lZGlhKVwiPiB7eyBULmRlbGV0ZUJ1dHRvbiB9fSA8L2E+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSA6aHJlZj1cIm1lZGlhLnVybFwiIHRhcmdldD1cIl9ibGFua1wiIGNsYXNzPVwiYnRuIGJ0bi1saW5rIGJ0bi1zbSB2aWV3LWJ1dHRvblwiPiB7eyBULnZpZXdCdXR0b24gfX0gPC9hPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtY29sXCI+IHt7IHByaW50RGF0ZVRpbWUobWVkaWEubGFzdE1vZGlmeSkgfX0gPC9kaXY+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWNvbCBvcHRpb25hbC1jb2xcIj4ge3sgaXNOYU4obWVkaWEuc2l6ZSk/IDAgOiBNYXRoLnJvdW5kKG1lZGlhLnNpemUgLyAxMDI0KSB9fSBLQjwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC1jb2wgb3B0aW9uYWwtY29sXCI+e3sgbWVkaWEubWltZSB9fTwvZGl2PlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD5cclxuICAgICAgICAgICAgICAgICAgIDwvdHI+XHJcbiAgICAgICAgICAgIDwvdGJvZHk+XHJcbiAgICAgICAgPC90YWJsZT5cclxuICAgICAgICBgLFxyXG4gICAgZGF0YTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIFQ6IHt9XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgc29ydEJ5OiBTdHJpbmcsXHJcbiAgICAgICAgc29ydEFzYzogQm9vbGVhbixcclxuICAgICAgICBmaWx0ZXJlZE1lZGlhSXRlbXM6IEFycmF5LFxyXG4gICAgICAgIHNlbGVjdGVkTWVkaWFzOiBBcnJheSxcclxuICAgICAgICB0aHVtYlNpemU6IE51bWJlclxyXG4gICAgfSxcclxuICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgc2VsZi5ULmltYWdlSGVhZGVyID0gJCgnI3QtaW1hZ2UtaGVhZGVyJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULm5hbWVIZWFkZXIgPSAkKCcjdC1uYW1lLWhlYWRlcicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5sYXN0TW9kaWZ5SGVhZGVyID0gJCgnI3QtbGFzdE1vZGlmeS1oZWFkZXInKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQuc2l6ZUhlYWRlciA9ICQoJyN0LXNpemUtaGVhZGVyJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULnR5cGVIZWFkZXIgPSAkKCcjdC10eXBlLWhlYWRlcicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5lZGl0QnV0dG9uID0gJCgnI3QtZWRpdC1idXR0b24nKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQuZGVsZXRlQnV0dG9uID0gJCgnI3QtZGVsZXRlLWJ1dHRvbicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC52aWV3QnV0dG9uID0gJCgnI3Qtdmlldy1idXR0b24nKS52YWwoKTtcclxuICAgIH0sXHJcbiAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgaXNNZWRpYVNlbGVjdGVkOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgdmFyIHJlc3VsdCA9IHRoaXMuc2VsZWN0ZWRNZWRpYXMuc29tZShmdW5jdGlvbiAoZWxlbWVudCwgaW5kZXgsIGFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZWxlbWVudC51cmwudG9Mb3dlckNhc2UoKSA9PT0gbWVkaWEudXJsLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgYnVpbGRNZWRpYVVybDogZnVuY3Rpb24gKHVybCwgdGh1bWJTaXplKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB1cmwgKyAodXJsLmluZGV4T2YoJz8nKSA9PSAtMSA/ICc/JyA6ICcmJykgKyAnd2lkdGg9JyArIHRodW1iU2l6ZSArICcmaGVpZ2h0PScgKyB0aHVtYlNpemU7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjaGFuZ2VTb3J0OiBmdW5jdGlvbiAobmV3U29ydCkge1xyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ3NvcnRDaGFuZ2VSZXF1ZXN0ZWQnLCBuZXdTb3J0KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRvZ2dsZVNlbGVjdGlvbk9mTWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ21lZGlhVG9nZ2xlUmVxdWVzdGVkJywgbWVkaWEpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcmVuYW1lTWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ3JlbmFtZU1lZGlhUmVxdWVzdGVkJywgbWVkaWEpOyAgICAgICAgICAgIFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZGVsZXRlTWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ2RlbGV0ZU1lZGlhUmVxdWVzdGVkJywgbWVkaWEpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZHJhZ1N0YXJ0OiBmdW5jdGlvbiAobWVkaWEsIGUpIHtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdtZWRpYURyYWdTdGFydFJlcXVlc3RlZCcsIG1lZGlhLCBlKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHByaW50RGF0ZVRpbWU6IGZ1bmN0aW9uIChkYXRlbWlsbGlzKXtcclxuICAgICAgICAgICAgdmFyIGQgPSBuZXcgRGF0ZShkYXRlbWlsbGlzKTtcclxuICAgICAgICAgICAgcmV0dXJuIGQudG9Mb2NhbGVTdHJpbmcoKTsgICAgICAgICAgICBcclxuICAgICAgICB9LFxyXG4gICAgICAgIGdldGZvbnRBd2Vzb21lQ2xhc3NOYW1lRm9yRmlsZU5hbWU6ZnVuY3Rpb24gZ2V0Zm9udEF3ZXNvbWVDbGFzc05hbWVGb3JGaWxlbmFtZShmaWxlbmFtZSwgdGh1bWJzaXplKXtcclxuICAgICAgICAgICAgIHJldHVybiAgIGdldENsYXNzTmFtZUZvckZpbGVuYW1lKGZpbGVuYW1lKSArICcgJyArIHRodW1ic2l6ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG4iLCIvLyBUaGlzIGNvbXBvbmVudCByZWNlaXZlcyBhIGxpc3Qgb2YgYWxsIHRoZSBpdGVtcywgdW5wYWdlZC5cclxuLy8gQXMgdGhlIHVzZXIgaW50ZXJhY3RzIHdpdGggdGhlIHBhZ2VyLCBpdCByYWlzZXMgZXZlbnRzIHdpdGggdGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50IHBhZ2UuXHJcbi8vIEl0J3MgdGhlIHBhcmVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGxpc3RlbiBmb3IgdGhlc2UgZXZlbnRzIGFuZCBkaXNwbGF5IHRoZSByZWNlaXZlZCBpdGVtc1xyXG4vLyA8cGFnZXI+IGNvbXBvbmVudFxyXG5WdWUuY29tcG9uZW50KCdwYWdlcicsIHtcclxuICAgIHRlbXBsYXRlOiBgXHJcbiAgICA8ZGl2PlxyXG4gICAgICAgIDxuYXYgaWQ9XCJtZWRpYS1wYWdlclwiIGNsYXNzPVwiZC1mbGV4IGp1c3RpZnktY29udGVudC1jZW50ZXJcIiBhcmlhLWxhYmVsPVwiUGFnaW5hdGlvbiBOYXZpZ2F0aW9uXCIgcm9sZT1cIm5hdmlnYXRpb25cIiA6ZGF0YS1jb21wdXRlZC10cmlnZ2VyPVwiaXRlbXNJbkN1cnJlbnRQYWdlLmxlbmd0aFwiPlxyXG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJwYWdpbmF0aW9uIHBhZ2luYXRpb24tc20gbS0wXCI+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW0gbWVkaWEtZmlyc3QtYnV0dG9uXCIgOmNsYXNzPVwie2Rpc2FibGVkIDogIWNhbkRvRmlyc3R9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwYWdlLWxpbmtcIiBocmVmPVwiI1wiIDp0YWJpbmRleD1cImNhbkRvRmlyc3QgPyAwIDogLTFcIiB2LW9uOmNsaWNrPVwiZ29GaXJzdFwiPnt7IFQucGFnZXJGaXJzdEJ1dHRvbiB9fTwvYT5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW1cIiA6Y2xhc3M9XCJ7ZGlzYWJsZWQgOiAhY2FuRG9QcmV2fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCIgaHJlZj1cIiNcIiA6dGFiaW5kZXg9XCJjYW5Eb1ByZXYgPyAwIDogLTFcIiB2LW9uOmNsaWNrPVwicHJldmlvdXNcIj57eyBULnBhZ2VyUHJldmlvdXNCdXR0b24gfX08L2E+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIHYtaWY9XCJsaW5rICE9PSAtMVwiIGNsYXNzPVwicGFnZS1pdGVtIHBhZ2UtbnVtYmVyXCIgIDpjbGFzcz1cInthY3RpdmUgOiBjdXJyZW50ID09IGxpbmsgLSAxfVwiIHYtZm9yPVwibGluayBpbiBwYWdlTGlua3NcIj5cclxuICAgICAgICAgICAgICAgICAgICA8YSBjbGFzcz1cInBhZ2UtbGlua1wiIGhyZWY9XCIjXCIgdi1vbjpjbGljaz1cImdvVG8obGluayAtIDEpXCIgOmFyaWEtbGFiZWw9XCInR290byBQYWdlJyArIGxpbmtcIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAge3tsaW5rfX1cclxuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cImN1cnJlbnQgPT0gbGluayAtMVwiIGNsYXNzPVwidmlzdWFsbHktaGlkZGVuXCI+KGN1cnJlbnQpPC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgIDwvYT5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW1cIiA6Y2xhc3M9XCJ7ZGlzYWJsZWQgOiAhY2FuRG9OZXh0fVwiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxhIGNsYXNzPVwicGFnZS1saW5rXCIgaHJlZj1cIiNcIiA6dGFiaW5kZXg9XCJjYW5Eb05leHQgPyAwIDogLTFcIiB2LW9uOmNsaWNrPVwibmV4dFwiPnt7IFQucGFnZXJOZXh0QnV0dG9uIH19PC9hPlxyXG4gICAgICAgICAgICAgICAgPC9saT5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInBhZ2UtaXRlbSBtZWRpYS1sYXN0LWJ1dHRvblwiIDpjbGFzcz1cIntkaXNhYmxlZCA6ICFjYW5Eb0xhc3R9XCI+XHJcbiAgICAgICAgICAgICAgICAgICAgPGEgY2xhc3M9XCJwYWdlLWxpbmtcIiBocmVmPVwiI1wiIDp0YWJpbmRleD1cImNhbkRvTGFzdCA/IDAgOiAtMVwiIHYtb246Y2xpY2s9XCJnb0xhc3RcIj57eyBULnBhZ2VyTGFzdEJ1dHRvbiB9fTwvYT5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgICAgICA8bGkgY2xhc3M9XCJwYWdlLWl0ZW0gbXMtNCBwYWdlLXNpemUtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9XCJkaXNwbGF5OiBmbGV4O1wiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInBhZ2UtbGluayBkaXNhYmxlZCB0ZXh0LW11dGVkIHBhZ2Utc2l6ZS1sYWJlbFwiPnt7IFQucGFnZXJQYWdlU2l6ZUxhYmVsIH19PC9zcGFuPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8c2VsZWN0IGlkPVwicGFnZVNpemVTZWxlY3RcIiBjbGFzcz1cInBhZ2UtbGlua1wiIHYtbW9kZWw9XCJwYWdlU2l6ZVwiPlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2LWZvcj1cIm9wdGlvbiBpbiBwYWdlU2l6ZU9wdGlvbnNcIiB2LWJpbmQ6dmFsdWU9XCJvcHRpb25cIj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7e29wdGlvbn19XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L29wdGlvbj5cclxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zZWxlY3Q+XHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICA8L3VsPlxyXG4gICAgICAgIDwvbmF2PlxyXG4gICAgICAgIDxuYXYgY2xhc3M9XCJkLWZsZXgganVzdGlmeS1jb250ZW50LWNlbnRlclwiPlxyXG4gICAgICAgICAgICA8dWwgY2xhc3M9XCJwYWdpbmF0aW9uIHBhZ2luYXRpb24tc20gbS0wIG10LTJcIj5cclxuICAgICAgICAgICAgICAgIDxsaSBjbGFzcz1cInBhZ2UtaXRlbSBtcy00IHBhZ2UtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFnZS1saW5rIGRpc2FibGVkIHRleHQtbXV0ZWQgXCI+e3sgVC5wYWdlclBhZ2VMYWJlbCB9fSB7e2N1cnJlbnQgKyAxfX0ve3t0b3RhbFBhZ2VzfX08L3NwYW4+XHJcbiAgICAgICAgICAgICAgICA8L2xpPlxyXG4gICAgICAgICAgICAgICAgPGxpIGNsYXNzPVwicGFnZS1pdGVtIG1zLTQgdG90YWwtaW5mb1wiPlxyXG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicGFnZS1saW5rIGRpc2FibGVkIHRleHQtbXV0ZWQgXCI+IHt7IFQucGFnZXJUb3RhbExhYmVsIH19IHt7dG90YWx9fTwvc3Bhbj5cclxuICAgICAgICAgICAgICAgIDwvbGk+XHJcbiAgICAgICAgICAgIDwvdWw+XHJcbiAgICAgICAgPC9uYXY+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgYCxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgc291cmNlSXRlbXM6IEFycmF5XHJcbiAgICB9LFxyXG4gICAgZGF0YTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIHBhZ2VTaXplOiAxMCxcclxuICAgICAgICAgICAgcGFnZVNpemVPcHRpb25zOiBbMTAsIDMwLCA1MCwgMTAwXSxcclxuICAgICAgICAgICAgY3VycmVudDogMCxcclxuICAgICAgICAgICAgVDoge31cclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIGNyZWF0ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgIC8vIHJldHJpZXZpbmcgbG9jYWxpemVkIHN0cmluZ3MgZnJvbSB2aWV3XHJcbiAgICAgICAgc2VsZi5ULnBhZ2VyRmlyc3RCdXR0b24gPSAkKCcjdC1wYWdlci1maXJzdC1idXR0b24nKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQucGFnZXJQcmV2aW91c0J1dHRvbiA9ICQoJyN0LXBhZ2VyLXByZXZpb3VzLWJ1dHRvbicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5wYWdlck5leHRCdXR0b24gPSAkKCcjdC1wYWdlci1uZXh0LWJ1dHRvbicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5wYWdlckxhc3RCdXR0b24gPSAkKCcjdC1wYWdlci1sYXN0LWJ1dHRvbicpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5wYWdlclBhZ2VTaXplTGFiZWwgPSAkKCcjdC1wYWdlci1wYWdlLXNpemUtbGFiZWwnKS52YWwoKTtcclxuICAgICAgICBzZWxmLlQucGFnZXJQYWdlTGFiZWwgPSAkKCcjdC1wYWdlci1wYWdlLWxhYmVsJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULnBhZ2VyVG90YWxMYWJlbCA9ICQoJyN0LXBhZ2VyLXRvdGFsLWxhYmVsJykudmFsKCk7ICAgICAgICBcclxuICAgIH0sXHJcbiAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLmN1cnJlbnQgKyAxO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgcHJldmlvdXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gdGhpcy5jdXJyZW50IC0gMTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGdvRmlyc3Q6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gMDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGdvTGFzdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSB0aGlzLnRvdGFsUGFnZXMgLSAxO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZ29UbzogZnVuY3Rpb24gKHRhcmdldFBhZ2UpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gdGFyZ2V0UGFnZTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgY29tcHV0ZWQ6IHtcclxuICAgICAgICB0b3RhbDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zb3VyY2VJdGVtcyA/IHRoaXMuc291cmNlSXRlbXMubGVuZ3RoIDogMDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHRvdGFsUGFnZXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHBhZ2VzID0gTWF0aC5jZWlsKHRoaXMudG90YWwgLyB0aGlzLnBhZ2VTaXplKTtcclxuICAgICAgICAgICAgcmV0dXJuIHBhZ2VzID4gMCA/IHBhZ2VzIDogMTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGlzTGFzdFBhZ2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudCArIDEgPj0gdGhpcy50b3RhbFBhZ2VzO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaXNGaXJzdFBhZ2U6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY3VycmVudCA9PT0gMDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNhbkRvTmV4dDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuaXNMYXN0UGFnZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNhbkRvUHJldjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuaXNGaXJzdFBhZ2U7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBjYW5Eb0ZpcnN0OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiAhdGhpcy5pc0ZpcnN0UGFnZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNhbkRvTGFzdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICByZXR1cm4gIXRoaXMuaXNMYXN0UGFnZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIHRoaXMgY29tcHV0ZWQgaXMgb25seSB0byBoYXZlIGEgY2VudHJhbCBwbGFjZSB3aGVyZSB3ZSBkZXRlY3QgY2hhbmdlcyBhbmQgbGV2ZXJhZ2UgVnVlIEpTIHJlYWN0aXZpdHkgdG8gcmFpc2Ugb3VyIGV2ZW50LlxyXG4gICAgICAgIC8vIFRoYXQgZXZlbnQgd2lsbCBiZSBoYW5kbGVkIGJ5IHRoZSBwYXJlbnQgbWVkaWEgYXBwIHRvIGRpc3BsYXkgdGhlIGl0ZW1zIGluIHRoZSBwYWdlLlxyXG4gICAgICAgIC8vIHRoaXMgbG9naWMgd2lsbCBub3QgcnVuIGlmIHRoZSBjb21wdXRlZCBwcm9wZXJ0eSBpcyBub3QgdXNlZCBpbiB0aGUgdGVtcGxhdGUuIFdlIHVzZSBhIGR1bW15IFwiZGF0YS1jb21wdXRlZC10cmlnZ2VyXCIgYXR0cmlidXRlIGZvciB0aGF0LlxyXG4gICAgICAgIGl0ZW1zSW5DdXJyZW50UGFnZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgc3RhcnQgPSB0aGlzLnBhZ2VTaXplICogdGhpcy5jdXJyZW50O1xyXG4gICAgICAgICAgICB2YXIgZW5kID0gc3RhcnQgKyB0aGlzLnBhZ2VTaXplO1xyXG4gICAgICAgICAgICB2YXIgcmVzdWx0ID0gdGhpcy5zb3VyY2VJdGVtcy5zbGljZShzdGFydCwgZW5kKTtcclxuICAgICAgICAgICAgYnVzLiRlbWl0KCdwYWdlckV2ZW50JywgcmVzdWx0KTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHBhZ2VMaW5rczogZnVuY3Rpb24gKCkge1xyXG5cclxuICAgICAgICAgICAgdmFyIGxpbmtzID0gW107XHJcblxyXG4gICAgICAgICAgICBsaW5rcy5wdXNoKHRoaXMuY3VycmVudCArIDEpO1xyXG5cclxuICAgICAgICAgICAgLy8gQWRkIDIgaXRlbXMgYmVmb3JlIGN1cnJlbnRcclxuICAgICAgICAgICAgdmFyIGJlZm9yZUN1cnJlbnQgPSB0aGlzLmN1cnJlbnQgPiAwID8gdGhpcy5jdXJyZW50IDogLTE7XHJcbiAgICAgICAgICAgIGxpbmtzLnVuc2hpZnQoYmVmb3JlQ3VycmVudCk7XHJcblxyXG4gICAgICAgICAgICB2YXIgYmVmb3JlQmVmb3JlQ3VycmVudCA9IHRoaXMuY3VycmVudCA+IDEgPyB0aGlzLmN1cnJlbnQgLSAxIDogLTE7XHJcbiAgICAgICAgICAgIGxpbmtzLnVuc2hpZnQoYmVmb3JlQmVmb3JlQ3VycmVudCk7XHJcblxyXG5cclxuICAgICAgICAgICAgLy8gQWRkIDIgaXRlbXMgYWZ0ZXIgY3VycmVudFxyXG4gICAgICAgICAgICB2YXIgYWZ0ZXJDdXJyZW50ID0gdGhpcy50b3RhbFBhZ2VzIC0gdGhpcy5jdXJyZW50ID4gMSA/IHRoaXMuY3VycmVudCArIDIgOiAtMTtcclxuICAgICAgICAgICAgbGlua3MucHVzaChhZnRlckN1cnJlbnQpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGFmdGVyQWZ0ZXJDdXJyZW50ID0gdGhpcy50b3RhbFBhZ2VzIC0gdGhpcy5jdXJyZW50ID4gMiA/IHRoaXMuY3VycmVudCArIDMgOiAtMTtcclxuICAgICAgICAgICAgbGlua3MucHVzaChhZnRlckFmdGVyQ3VycmVudCk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gbGlua3M7XHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIHdhdGNoOiB7XHJcbiAgICAgICAgc291cmNlSXRlbXM6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50ID0gMDsgLy8gcmVzZXR0aW5nIGN1cnJlbnQgcGFnZSBhZnRlciByZWNlaXZpbmcgYSBuZXcgbGlzdCBvZiB1bnBhZ2VkIGl0ZW1zXHJcbiAgICAgICAgfSxcclxuICAgICAgICBwYWdlU2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnQgPSAwO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxufSk7XHJcbiIsIi8vIDxzb3J0LWluZGljYXRvcj4gY29tcG9uZW50XHJcblZ1ZS5jb21wb25lbnQoJ3NvcnRJbmRpY2F0b3InLCB7XHJcbiAgICB0ZW1wbGF0ZTogYFxyXG4gICAgICAgIDxkaXYgdi1zaG93PVwiaXNBY3RpdmVcIiBjbGFzcz1cInNvcnQtaW5kaWNhdG9yXCI+XHJcbiAgICAgICAgICAgIDxzcGFuIHYtc2hvdz1cImFzY1wiPjxpIGNsYXNzPVwic21hbGwgZmEgZmEtY2hldnJvbi11cFwiPjwvaT48L3NwYW4+XHJcbiAgICAgICAgICAgIDxzcGFuIHYtc2hvdz1cIiFhc2NcIj48aSBjbGFzcz1cInNtYWxsIGZhIGZhLWNoZXZyb24tZG93blwiPjwvaT48L3NwYW4+XHJcbiAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgYCxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgY29sbmFtZTogU3RyaW5nLFxyXG4gICAgICAgIHNlbGVjdGVkY29sbmFtZTogU3RyaW5nLFxyXG4gICAgICAgIGFzYzogQm9vbGVhblxyXG4gICAgfSxcclxuICAgIGNvbXB1dGVkOiB7XHJcbiAgICAgICAgaXNBY3RpdmU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29sbmFtZS50b0xvd2VyQ2FzZSgpID09IHRoaXMuc2VsZWN0ZWRjb2xuYW1lLnRvTG93ZXJDYXNlKCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuIiwiZnVuY3Rpb24gaW5pdGlhbGl6ZUF0dGFjaGVkTWVkaWFGaWVsZChlbCwgaWRPZlVwbG9hZEJ1dHRvbiwgdXBsb2FkQWN0aW9uLCBtZWRpYUl0ZW1VcmwsIGFsbG93TXVsdGlwbGUsIGFsbG93TWVkaWFUZXh0LCBhbGxvd0FuY2hvcnMsIHRlbXBVcGxvYWRGb2xkZXIsIG1heFVwbG9hZENodW5rU2l6ZSkge1xyXG5cclxuICAgIHZhciB0YXJnZXQgPSAkKGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCQoZWwpLmRhdGEoJ2ZvcicpKSk7XHJcbiAgICB2YXIgaW5pdGlhbFBhdGhzID0gdGFyZ2V0LmRhdGEoXCJpbml0XCIpO1xyXG5cclxuICAgIHZhciBtZWRpYUZpZWxkRWRpdG9yID0gJChlbCk7XHJcbiAgICB2YXIgaWRwcmVmaXggPSBtZWRpYUZpZWxkRWRpdG9yLmF0dHIoXCJpZFwiKTtcclxuICAgIHZhciBtZWRpYUZpZWxkQXBwO1xyXG5cclxuICAgIG1lZGlhRmllbGRBcHBzLnB1c2gobWVkaWFGaWVsZEFwcCA9IG5ldyBWdWUoe1xyXG4gICAgICAgIGVsOiBtZWRpYUZpZWxkRWRpdG9yLmdldCgwKSxcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIG1lZGlhSXRlbXM6IFtdLFxyXG4gICAgICAgICAgICBzZWxlY3RlZE1lZGlhOiBudWxsLFxyXG4gICAgICAgICAgICBzbWFsbFRodW1iczogZmFsc2UsXHJcbiAgICAgICAgICAgIGlkUHJlZml4OiBpZHByZWZpeCxcclxuICAgICAgICAgICAgaW5pdGlhbGl6ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBhbGxvd01lZGlhVGV4dDogYWxsb3dNZWRpYVRleHQsXHJcbiAgICAgICAgICAgIGJhY2t1cE1lZGlhVGV4dDogJycsXHJcbiAgICAgICAgICAgIGFsbG93QW5jaG9yczogYWxsb3dBbmNob3JzLFxyXG4gICAgICAgICAgICBiYWNrdXBBbmNob3I6IG51bGwsXHJcbiAgICAgICAgICAgIG1lZGlhVGV4dG1vZGFsOiBudWxsLFxyXG4gICAgICAgICAgICBhbmNob3JpbmdNb2RhbDogbnVsbFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgICAgICBzZWxmLmN1cnJlbnRQcmVmcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21lZGlhRmllbGRQcmVmcycpKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXB1dGVkOiB7XHJcbiAgICAgICAgICAgIHBhdGhzOiB7XHJcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbWVkaWFQYXRocyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoaW5pdGlhbFBhdGhzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpYUl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHgubWVkaWFQYXRoID09PSAnbm90LWZvdW5kJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhUGF0aHMucHVzaCh7IHBhdGg6IHgubWVkaWFQYXRoLCBpc1JlbW92ZWQ6IHguaXNSZW1vdmVkLCBpc05ldzogeC5pc05ldywgbWVkaWFUZXh0OiB4Lm1lZGlhVGV4dCwgYW5jaG9yOiB4LmFuY2hvciwgYXR0YWNoZWRGaWxlTmFtZTogeC5hdHRhY2hlZEZpbGVOYW1lIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShtZWRpYVBhdGhzKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1lZGlhUGF0aHMgPSB2YWx1ZXMgfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNpZ25hbCA9ICQuRGVmZXJyZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYVBhdGhzLmZvckVhY2goZnVuY3Rpb24gKHgsIGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7IG5hbWU6ICcgJyArIHgucGF0aCwgbWltZTogJycsIG1lZGlhUGF0aDogJycsIGFuY2hvcjogeC5hbmNob3IsIGF0dGFjaGVkRmlsZU5hbWU6IHguYXR0YWNoZWRGaWxlTmFtZSB9KTsgLy8gZG9uJ3QgcmVtb3ZlIHRoZSBzcGFjZS4gU29tZXRoaW5nIGRpZmZlcmVudCBpcyBuZWVkZWQgb3IgaXQgd29udCByZWFjdCB3aGVuIHRoZSByZWFsIG5hbWUgYXJyaXZlcy5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvbWlzZSA9ICQud2hlbihzaWduYWwpLmRvbmUoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IG1lZGlhSXRlbVVybCArIFwiP3BhdGg9XCIgKyBlbmNvZGVVUklDb21wb25lbnQoeC5wYXRoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6ICdHRVQnLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEudnVla2V5ID0gZGF0YS5uYW1lICsgaS50b1N0cmluZygpOyAvLyBCZWNhdXNlIGEgdW5pcXVlIGtleSBpcyByZXF1aXJlZCBieSBWdWUgb24gdi1mb3IgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEubWVkaWFUZXh0ID0geC5tZWRpYVRleHQ7IC8vIFRoaXMgdmFsdWUgaXMgbm90IHJldHVybmVkIGZyb20gdGhlIGFqYXggY2FsbC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5hbmNob3IgPSB4LmFuY2hvcjsgLy8gVGhpcyB2YWx1ZSBpcyBub3QgcmV0dXJuZWQgZnJvbSB0aGUgYWpheCBjYWxsLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmF0dGFjaGVkRmlsZU5hbWUgPSB4LmF0dGFjaGVkRmlsZU5hbWU7Ly8gVGhpcyB2YWx1ZSBpcyBub3QgcmV0dXJuZWQgZnJvbSB0aGUgYWpheCBjYWxsLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5zcGxpY2UoaSwgMSwgZGF0YSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09ICsrbGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZWRpYUl0ZW1zLnB1c2goeCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcjogZnVuY3Rpb24gKGVycm9yKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKEpTT04uc3RyaW5naWZ5KGVycm9yKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnNwbGljZShpLCAxLCB7IG5hbWU6IHgucGF0aCwgbWltZTogJycsIG1lZGlhUGF0aDogJ25vdC1mb3VuZCcsIG1lZGlhVGV4dDogJycsIGFuY2hvcjogeyB4OiAwLjUsIHk6IDAuNSB9LCBhdHRhY2hlZEZpbGVOYW1lOiB4LmF0dGFjaGVkRmlsZU5hbWUgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtcy5sZW5ndGggPT09ICsrbGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5mb3JFYWNoKGZ1bmN0aW9uICh4KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5tZWRpYUl0ZW1zLnB1c2goeCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICBzaWduYWwucmVzb2x2ZSgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBmaWxlU2l6ZTogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGgucm91bmQodGhpcy5zZWxlY3RlZE1lZGlhLnNpemUgLyAxMDI0KTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY2FuQWRkTWVkaWE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHZhciBub25SZW1vdmVkTWVkaWFJdGVtcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB0aGlzLm1lZGlhSXRlbXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMubWVkaWFJdGVtc1tpXS5pc1JlbW92ZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbm9uUmVtb3ZlZE1lZGlhSXRlbXMucHVzaCh0aGlzLm1lZGlhSXRlbXNbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbm9uUmVtb3ZlZE1lZGlhSXRlbXMubGVuZ3RoID09PSAwIHx8IG5vblJlbW92ZWRNZWRpYUl0ZW1zLmxlbmd0aCA+IDAgJiYgYWxsb3dNdWx0aXBsZTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgdGh1bWJTaXplOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5zbWFsbFRodW1icyA/IDEyMCA6IDI0MDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgY3VycmVudFByZWZzOiB7XHJcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzbWFsbFRodW1iczogdGhpcy5zbWFsbFRodW1ic1xyXG4gICAgICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgc2V0OiBmdW5jdGlvbiAobmV3UHJlZnMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5ld1ByZWZzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zbWFsbFRodW1icyA9IG5ld1ByZWZzLnNtYWxsVGh1bWJzO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgICAgIHNlbGYucGF0aHMgPSBpbml0aWFsUGF0aHM7XHJcblxyXG4gICAgICAgICAgICBzZWxmLiRvbignc2VsZWN0QW5kRGVsZXRlTWVkaWFSZXF1ZXN0ZWQnLCBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0QW5kRGVsZXRlTWVkaWEobWVkaWEpO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHNlbGYuJG9uKCdzZWxlY3RNZWRpYVJlcXVlc3RlZCcsIGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RNZWRpYShtZWRpYSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdmFyIHNlbGVjdG9yID0gJyMnICsgaWRPZlVwbG9hZEJ1dHRvbjtcclxuICAgICAgICAgICAgdmFyIGVkaXRvcklkID0gbWVkaWFGaWVsZEVkaXRvci5hdHRyKCdpZCcpO1xyXG4gICAgICAgICAgICB2YXIgY2h1bmtlZEZpbGVVcGxvYWRJZCA9IHJhbmRvbVVVSUQoKTtcclxuXHJcbiAgICAgICAgICAgICQoc2VsZWN0b3IpXHJcbiAgICAgICAgICAgICAgICAuZmlsZXVwbG9hZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgbGltaXRDb25jdXJyZW50VXBsb2FkczogMjAsXHJcbiAgICAgICAgICAgICAgICAgICAgZHJvcFpvbmU6ICQoJyMnICsgZWRpdG9ySWQpLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiAnanNvbicsXHJcbiAgICAgICAgICAgICAgICAgICAgdXJsOiB1cGxvYWRBY3Rpb24sXHJcbiAgICAgICAgICAgICAgICAgICAgbWF4Q2h1bmtTaXplOiBtYXhVcGxvYWRDaHVua1NpemUsXHJcbiAgICAgICAgICAgICAgICAgICAgYWRkOiBmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgY291bnQgPSBkYXRhLmZpbGVzLmxlbmd0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmZpbGVzW2ldLnVwbG9hZE5hbWUgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuZ2V0VW5pcXVlSWQoKSArIGRhdGEuZmlsZXNbaV0ubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEuZmlsZXNbaV0uYXR0YWNoZWRGaWxlTmFtZSA9IGRhdGEuZmlsZXNbaV0ubmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnN1Ym1pdCgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZm9ybURhdGE6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGFudGlGb3JnZXJ5VG9rZW4gPSAkKFwiaW5wdXRbbmFtZT1fX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbl1cIikudmFsKCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBuYW1lOiAncGF0aCcsIHZhbHVlOiB0ZW1wVXBsb2FkRm9sZGVyIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdfX1JlcXVlc3RWZXJpZmljYXRpb25Ub2tlbicsIHZhbHVlOiBhbnRpRm9yZ2VyeVRva2VuIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IG5hbWU6ICdfX2NodW5rZWRGaWxlVXBsb2FkSWQnLCB2YWx1ZTogY2h1bmtlZEZpbGVVcGxvYWRJZCB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZG9uZTogZnVuY3Rpb24gKGUsIGRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5ld01lZGlhSXRlbXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVycm9ybXNnID0gXCJcIjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnJlc3VsdC5maWxlcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGRhdGEucmVzdWx0LmZpbGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5yZXN1bHQuZmlsZXNbaV0uaXNOZXcgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vaWYgZXJyb3IgaXMgZGVmaW5lZCBwcm9iYWJseSB0aGUgZmlsZSB0eXBlIGlzIG5vdCBhbGxvd2VkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEucmVzdWx0LmZpbGVzW2ldLmVycm9yID09PSB1bmRlZmluZWQgfHwgZGF0YS5yZXN1bHQuZmlsZXNbaV0uZXJyb3IgPT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5yZXN1bHQuZmlsZXNbaV0uYXR0YWNoZWRGaWxlTmFtZSA9IGRhdGEuZmlsZXNbaV0uYXR0YWNoZWRGaWxlTmFtZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3TWVkaWFJdGVtcy5wdXNoKGRhdGEucmVzdWx0LmZpbGVzW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcm1zZyArPSBkYXRhLnJlc3VsdC5maWxlc1tpXS5lcnJvciArIFwiXFxuXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnJvcm1zZyAhPT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlcnQoZXJyb3Jtc2cpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKG5ld01lZGlhSXRlbXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAobmV3TWVkaWFJdGVtcy5sZW5ndGggPiAxICYmIGFsbG93TXVsdGlwbGUgPT09IGZhbHNlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVydCgkKCcjb25seU9uZUl0ZW1NZXNzYWdlJykudmFsKCkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5tZWRpYUl0ZW1zLnB1c2gobmV3TWVkaWFJdGVtc1swXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAubWVkaWFJdGVtcyA9IG1lZGlhRmllbGRBcHAubWVkaWFJdGVtcy5jb25jYXQobmV3TWVkaWFJdGVtcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGZ1bmN0aW9uIChqcVhIUiwgdGV4dFN0YXR1cywgZXJyb3JUaHJvd24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0Vycm9yIG9uIHVwbG9hZC4nKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coanFYSFIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyh0ZXh0U3RhdHVzKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3JUaHJvd24pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAub24oJ2ZpbGV1cGxvYWRjaHVua2JlZm9yZXNlbmQnLCAoZSwgb3B0aW9ucykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBmaWxlID0gb3B0aW9ucy5maWxlc1swXTtcclxuICAgICAgICAgICAgICAgICAgICAvLyBIZXJlIHdlIHJlcGxhY2UgdGhlIGJsb2Igd2l0aCBhIEZpbGUgb2JqZWN0IHRvIGVuc3VyZSB0aGUgZmlsZSBuYW1lIGFuZCBvdGhlcnMgYXJlIHByZXNlcnZlZCBmb3IgdGhlIGJhY2tlbmQuXHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5ibG9iID0gbmV3IEZpbGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFtvcHRpb25zLmJsb2JdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IGZpbGUudHlwZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RNb2RpZmllZDogZmlsZS5sYXN0TW9kaWZpZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgICAgIHNlbGVjdE1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYSA9IG1lZGlhO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBnZXRVbmlxdWVJZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuICd4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHgnLnJlcGxhY2UoL1t4eV0vZywgZnVuY3Rpb24gKGMpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgciA9IE1hdGgucmFuZG9tKCkgKiAxNiB8IDAsIHYgPSBjID09PSAneCcgPyByIDogKHIgJiAweDMgfCAweDgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICByZW1vdmVTZWxlY3RlZDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVtb3ZlZCA9IHt9O1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRNZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBpbmRleCA9IHRoaXMubWVkaWFJdGVtcyAmJiB0aGlzLm1lZGlhSXRlbXMuaW5kZXhPZih0aGlzLnNlbGVjdGVkTWVkaWEpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW92ZWQgPSB0aGlzLm1lZGlhSXRlbXNbaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkLmlzUmVtb3ZlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vdGhpcy5tZWRpYUl0ZW1zLnNwbGljZShbaW5kZXhdLCAxLCByZW1vdmVkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpYUl0ZW1zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHJlbW92ZSBidXR0b24gY2FuIGFsc28gcmVtb3ZlIGEgdW5pcXVlIG1lZGlhIGl0ZW1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tZWRpYUl0ZW1zLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVkID0gdGhpcy5tZWRpYUl0ZW1zW2luZGV4XTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlZC5pc1JlbW92ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL3RoaXMubWVkaWFJdGVtcy5zcGxpY2UoMCwgMSwgcmVtb3ZlZCk7ICAgICAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubWVkaWFJdGVtcy5zcGxpY2UoMCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhID0gbnVsbDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2hvd01lZGlhVGV4dE1vZGFsOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVkaWFUZXh0TW9kYWwgPSBuZXcgYm9vdHN0cmFwLk1vZGFsKHRoaXMuJHJlZnMubWVkaWFUZXh0TW9kYWwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZWRpYVRleHRNb2RhbC5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJhY2t1cE1lZGlhVGV4dCA9IHRoaXMuc2VsZWN0ZWRNZWRpYS5tZWRpYVRleHQ7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNhbmNlbE1lZGlhVGV4dE1vZGFsOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVkaWFUZXh0TW9kYWwuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLm1lZGlhVGV4dCA9IHRoaXMuYmFja3VwTWVkaWFUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzaG93QW5jaG9yTW9kYWw6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmNob3JpbmdNb2RhbCA9IG5ldyBib290c3RyYXAuTW9kYWwodGhpcy4kcmVmcy5hbmNob3JpbmdNb2RhbCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFuY2hvcmluZ01vZGFsLnNob3coKTtcclxuICAgICAgICAgICAgICAgIC8vIENhdXNlIGEgcmVmcmVzaCB0byByZWNhbGMgaGVpZ2h0cy5cclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgeDogdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvci54LFxyXG4gICAgICAgICAgICAgICAgICAgIHk6IHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IueVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5iYWNrdXBBbmNob3IgPSB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjYW5jZWxBbmNob3JpbmdNb2RhbDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFuY2hvcmluZ01vZGFsLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IgPSB0aGlzLmJhY2t1cEFuY2hvcjtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgcmVzZXRBbmNob3I6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvciA9IHsgeDogMC41LCB5OiAwLjUgfTtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgb25BbmNob3JEcm9wOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpbWFnZSA9IHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHg6IGV2ZW50Lm9mZnNldFggLyBpbWFnZS5jbGllbnRXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgICB5OiBldmVudC5vZmZzZXRZIC8gaW1hZ2UuY2xpZW50SGVpZ2h0XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGFuY2hvckxlZnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLiRyZWZzLmFuY2hvckltYWdlICYmIHRoaXMuJHJlZnMubW9kYWxCb2R5ICYmIHRoaXMuc2VsZWN0ZWRNZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFdoZW4gaW1hZ2UgaXMgc2hydW5rIGNvbXBhcmUgYWdhaW5zdCB0aGUgbW9kYWwgYm9keS5cclxuICAgICAgICAgICAgICAgICAgICB2YXIgb2Zmc2V0ID0gKHRoaXMuJHJlZnMubW9kYWxCb2R5LmNsaWVudFdpZHRoIC0gdGhpcy4kcmVmcy5hbmNob3JJbWFnZS5jbGllbnRXaWR0aCkgLyAyO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwb3NpdGlvbiA9ICh0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yLnggKiB0aGlzLiRyZWZzLmFuY2hvckltYWdlLmNsaWVudFdpZHRoKSArIG9mZnNldDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24gPCAxNykgeyAvLyBBZGp1c3Qgc28gdGhlIHRhcmdldCBkb2Vzbid0IHNob3cgb3V0c2lkZSBpbWFnZS5cclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSAxNztcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbiA9IHBvc2l0aW9uIC0gODsgLy8gQWRqdXN0IHRvIGhpdCB0aGUgbW91c2UgcG9pbnRlci5cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcwJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYW5jaG9yVG9wOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy4kcmVmcy5hbmNob3JJbWFnZSAmJiB0aGlzLnNlbGVjdGVkTWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgcG9zaXRpb24gPSB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yLnkgKiB0aGlzLiRyZWZzLmFuY2hvckltYWdlLmNsaWVudEhlaWdodDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAocG9zaXRpb24gPCAxNSkgeyAvLyBBZGp1c3RtZW50IHNvIHRoZSB0YXJnZXQgZG9lc24ndCBzaG93IG91dHNpZGUgaW1hZ2UuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gMTU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiArIDU7IC8vIEFkanVzdCB0byBoaXQgdGhlIG1vdXNlIHBvaW50ZXIuXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbiArICdweCc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnMCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNldEFuY2hvcjogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSB0aGlzLiRyZWZzLmFuY2hvckltYWdlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvciA9IHtcclxuICAgICAgICAgICAgICAgICAgICB4OiBldmVudC5vZmZzZXRYIC8gaW1hZ2UuY2xpZW50V2lkdGgsXHJcbiAgICAgICAgICAgICAgICAgICAgeTogZXZlbnQub2Zmc2V0WSAvIGltYWdlLmNsaWVudEhlaWdodFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBhZGRNZWRpYUZpbGVzOiBmdW5jdGlvbiAoZmlsZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmICgoZmlsZXMubGVuZ3RoID4gMSkgJiYgKGFsbG93TXVsdGlwbGUgPT09IGZhbHNlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KCQoJyNvbmx5T25lSXRlbU1lc3NhZ2UnKS52YWwoKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5tZWRpYUl0ZW1zLnB1c2goZmlsZXNbMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLm1lZGlhSXRlbXMgPSBtZWRpYUZpZWxkQXBwLm1lZGlhSXRlbXMuY29uY2F0KGZpbGVzKTtcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2VsZWN0QW5kRGVsZXRlTWVkaWE6IGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RlZE1lZGlhID0gbWVkaWE7XHJcbiAgICAgICAgICAgICAgICAvLyBzZXRUaW1lb3V0IGJlY2F1c2Ugc29tZXRpbWVzIFxyXG4gICAgICAgICAgICAgICAgLy8gcmVtb3ZlU2VsZWN0ZWQgd2FzIGNhbGxlZCBldmVuIGJlZm9yZSB0aGUgbWVkaWEgd2FzIHNldC5cclxuICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlbGYucmVtb3ZlU2VsZWN0ZWQoKTtcclxuICAgICAgICAgICAgICAgIH0sIDEwMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIHdhdGNoOiB7XHJcbiAgICAgICAgICAgIG1lZGlhSXRlbXM6IHtcclxuICAgICAgICAgICAgICAgIGRlZXA6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBoYW5kbGVyKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRyaWdnZXIgcHJldmlldyByZW5kZXJpbmdcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgJChkb2N1bWVudCkudHJpZ2dlcignY29udGVudHByZXZpZXc6cmVuZGVyJyk7IH0sIDEwMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGN1cnJlbnRQcmVmczogZnVuY3Rpb24gKG5ld1ByZWZzKSB7XHJcbiAgICAgICAgICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbSgnbWVkaWFGaWVsZFByZWZzJywgSlNPTi5zdHJpbmdpZnkobmV3UHJlZnMpKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pKTtcclxufVxyXG4iLCJmdW5jdGlvbiBpbml0aWFsaXplTWVkaWFGaWVsZChlbCwgbW9kYWxCb2R5RWxlbWVudCwgbWVkaWFJdGVtVXJsLCBhbGxvd011bHRpcGxlLCBhbGxvd01lZGlhVGV4dCwgYWxsb3dBbmNob3JzKSB7XHJcbiAgICAvL0JhZ1BhcnQgY3JlYXRlIGEgc2NyaXB0IHNlY3Rpb24gd2l0aG91dCBvdGhlciBET00gZWxlbWVudHNcclxuICAgIGlmKGVsID09PSBudWxsKVxyXG4gICAgICAgIHJldHVybjtcclxuICAgIFxyXG4gICAgdmFyIHRhcmdldCA9ICQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJChlbCkuZGF0YSgnZm9yJykpKTtcclxuICAgIHZhciBpbml0aWFsUGF0aHMgPSB0YXJnZXQuZGF0YShcImluaXRcIik7XHJcblxyXG4gICAgdmFyIG1lZGlhRmllbGRFZGl0b3IgPSAkKGVsKTtcclxuICAgIHZhciBpZHByZWZpeCA9IG1lZGlhRmllbGRFZGl0b3IuYXR0cihcImlkXCIpO1xyXG4gICAgdmFyIG1lZGlhRmllbGRBcHA7XHJcblxyXG4gICAgLy93aGVuIGhpZGUgbW9kYWwgZGV0YWNoIG1lZGlhIGFwcCB0byBhdm9pZCBpc3N1ZSBvbiBCYWdQYXJ0XHJcbiAgICBtb2RhbEJvZHlFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2hpZGRlbi5icy5tb2RhbCcsIGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICQoXCIjbWVkaWFBcHBcIikuYXBwZW5kVG8oJ2JvZHknKTtcclxuICAgICAgICAkKFwiI21lZGlhQXBwXCIpLmhpZGUoKTtcclxuICAgIH0pO1xyXG5cclxuICAgIG1lZGlhRmllbGRBcHBzLnB1c2gobWVkaWFGaWVsZEFwcCA9IG5ldyBWdWUoe1xyXG4gICAgICAgIGVsOiBtZWRpYUZpZWxkRWRpdG9yLmdldCgwKSxcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIG1lZGlhSXRlbXM6IFtdLFxyXG4gICAgICAgICAgICBzZWxlY3RlZE1lZGlhOiBudWxsLFxyXG4gICAgICAgICAgICBzbWFsbFRodW1iczogZmFsc2UsXHJcbiAgICAgICAgICAgIGlkUHJlZml4OiBpZHByZWZpeCxcclxuICAgICAgICAgICAgaW5pdGlhbGl6ZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBhbGxvd01lZGlhVGV4dDogYWxsb3dNZWRpYVRleHQsXHJcbiAgICAgICAgICAgIGJhY2t1cE1lZGlhVGV4dDogJycsXHJcbiAgICAgICAgICAgIGFsbG93QW5jaG9yczogYWxsb3dBbmNob3JzLFxyXG4gICAgICAgICAgICBiYWNrdXBBbmNob3I6IG51bGwsXHJcbiAgICAgICAgICAgIG1lZGlhVGV4dE1vZGFsOiBudWxsLFxyXG4gICAgICAgICAgICBhbmNob3JpbmdNb2RhbDogbnVsbFxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgY3JlYXRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcblxyXG4gICAgICAgICAgICBzZWxmLmN1cnJlbnRQcmVmcyA9IEpTT04ucGFyc2UobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ21lZGlhRmllbGRQcmVmcycpKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGNvbXB1dGVkOiB7XHJcbiAgICAgICAgICAgIHBhdGhzOiB7XHJcbiAgICAgICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbWVkaWFQYXRocyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5pbml0aWFsaXplZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoaW5pdGlhbFBhdGhzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpYUl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKHgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHgubWVkaWFQYXRoID09PSAnbm90LWZvdW5kJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1lZGlhUGF0aHMucHVzaCh7IHBhdGg6IHgubWVkaWFQYXRoLCBtZWRpYVRleHQ6IHgubWVkaWFUZXh0LCBhbmNob3I6IHguYW5jaG9yIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShtZWRpYVBhdGhzKTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uICh2YWx1ZXMpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgc2VsZiA9IHRoaXM7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIG1lZGlhUGF0aHMgPSB2YWx1ZXMgfHwgW107XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHNpZ25hbCA9ICQuRGVmZXJyZWQoKTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbXMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgbGVuZ3RoID0gMDtcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYVBhdGhzLmZvckVhY2goZnVuY3Rpb24gKHgsIGkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMucHVzaCh7IG5hbWU6ICcgJyArIHgucGF0aCwgbWltZTogJycsIG1lZGlhUGF0aDogJycgfSk7IC8vIGRvbid0IHJlbW92ZSB0aGUgc3BhY2UuIFNvbWV0aGluZyBkaWZmZXJlbnQgaXMgbmVlZGVkIG9yIGl0IHdvbnQgcmVhY3Qgd2hlbiB0aGUgcmVhbCBuYW1lIGFycml2ZXMuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb21pc2UgPSAkLndoZW4oc2lnbmFsKS5kb25lKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBtZWRpYUl0ZW1VcmwgKyBcIj9wYXRoPVwiICsgZW5jb2RlVVJJQ29tcG9uZW50KHgucGF0aCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiAnR0VUJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLnZ1ZWtleSA9IGRhdGEubmFtZSArIGkudG9TdHJpbmcoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS5tZWRpYVRleHQgPSB4Lm1lZGlhVGV4dDsgLy8gVGhpcyB2YWx1ZSBpcyBub3QgcmV0dXJuZWQgZnJvbSB0aGUgYWpheCBjYWxsLlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLmFuY2hvciA9IHguYW5jaG9yOyAvLyBUaGlzIHZhbHVlIGlzIG5vdCByZXR1cm5lZCBmcm9tIHRoZSBhamF4IGNhbGwuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLnNwbGljZShpLCAxLCBkYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gKytsZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1zLmZvckVhY2goZnVuY3Rpb24gKHkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLm1lZGlhSXRlbXMucHVzaCh5KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yOiBmdW5jdGlvbiAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtcy5zcGxpY2UoaSwgMSwgeyBuYW1lOiB4LnBhdGgsIG1pbWU6ICcnLCBtZWRpYVBhdGg6ICdub3QtZm91bmQnLCBtZWRpYVRleHQ6ICcnLCBhbmNob3I6IHsgeDogMCwgeTogMCB9IH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSArK2xlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbXMuZm9yRWFjaChmdW5jdGlvbiAoeCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYubWVkaWFJdGVtcy5wdXNoKHgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmluaXRpYWxpemVkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgc2lnbmFsLnJlc29sdmUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZmlsZVNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKHRoaXMuc2VsZWN0ZWRNZWRpYS5zaXplIC8gMTAyNCk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGNhbkFkZE1lZGlhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5tZWRpYUl0ZW1zLmxlbmd0aCA9PT0gMCB8fCB0aGlzLm1lZGlhSXRlbXMubGVuZ3RoID4gMCAmJiBhbGxvd011bHRpcGxlO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB0aHVtYlNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLnNtYWxsVGh1bWJzID8gMTIwIDogMjQwO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjdXJyZW50UHJlZnM6IHtcclxuICAgICAgICAgICAgICAgIGdldDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNtYWxsVGh1bWJzOiB0aGlzLnNtYWxsVGh1bWJzXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICBzZXQ6IGZ1bmN0aW9uIChuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghbmV3UHJlZnMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNtYWxsVGh1bWJzID0gbmV3UHJlZnMuc21hbGxUaHVtYnM7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIG1vdW50ZWQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG5cclxuICAgICAgICAgICAgc2VsZi5wYXRocyA9IGluaXRpYWxQYXRocztcclxuXHJcbiAgICAgICAgICAgIHNlbGYuJG9uKCdzZWxlY3RBbmREZWxldGVNZWRpYVJlcXVlc3RlZCcsIGZ1bmN0aW9uIChtZWRpYSkge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5zZWxlY3RBbmREZWxldGVNZWRpYShtZWRpYSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgc2VsZi4kb24oJ3NlbGVjdE1lZGlhUmVxdWVzdGVkJywgZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxmLnNlbGVjdE1lZGlhKG1lZGlhKTtcclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBzZWxmLiRvbignZmlsZXNVcGxvYWRlZCcsIGZ1bmN0aW9uIChmaWxlcykge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5hZGRNZWRpYUZpbGVzKGZpbGVzKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgICAgIHNlbGVjdE1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYSA9IG1lZGlhO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBzaG93TW9kYWw6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlbGYuY2FuQWRkTWVkaWEpIHtcclxuICAgICAgICAgICAgICAgICAgICAkKFwiI21lZGlhQXBwXCIpLmFwcGVuZFRvKCQobW9kYWxCb2R5RWxlbWVudCkuZmluZCgnLm1vZGFsLWJvZHknKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgJChcIiNtZWRpYUFwcFwiKS5zaG93KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBtb2RhbCA9IG5ldyBib290c3RyYXAuTW9kYWwobW9kYWxCb2R5RWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgbW9kYWwuc2hvdygpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAkKG1vZGFsQm9keUVsZW1lbnQpLmZpbmQoJy5tZWRpYUZpZWxkU2VsZWN0QnV0dG9uJykub2ZmKCdjbGljaycpLm9uKCdjbGljaycsIGZ1bmN0aW9uICh2KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuYWRkTWVkaWFGaWxlcyhtZWRpYUFwcC5zZWxlY3RlZE1lZGlhcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBkb24ndCB3YW50IHRoZSBpbmNsdWRlZCBtZWRpYXMgdG8gYmUgc3RpbGwgc2VsZWN0ZWQgdGhlIG5leHQgdGltZSB3ZSBvcGVuIHRoZSBtb2RhbC5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbWVkaWFBcHAuc2VsZWN0ZWRNZWRpYXMgPSBbXTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGFsLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNob3dNZWRpYVRleHRNb2RhbDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lZGlhVGV4dE1vZGFsID0gbmV3IGJvb3RzdHJhcC5Nb2RhbCh0aGlzLiRyZWZzLm1lZGlhVGV4dE1vZGFsKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubWVkaWFUZXh0TW9kYWwuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5iYWNrdXBNZWRpYVRleHQgPSB0aGlzLnNlbGVjdGVkTWVkaWEubWVkaWFUZXh0O1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBjYW5jZWxNZWRpYVRleHRNb2RhbDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1lZGlhVGV4dE1vZGFsLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5tZWRpYVRleHQgPSB0aGlzLmJhY2t1cE1lZGlhVGV4dDtcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2hvd0FuY2hvck1vZGFsOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuYW5jaG9yaW5nTW9kYWwgPSBuZXcgYm9vdHN0cmFwLk1vZGFsKHRoaXMuJHJlZnMuYW5jaG9yaW5nTW9kYWwpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5hbmNob3JpbmdNb2RhbC5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICAvLyBDYXVzZSBhIHJlZnJlc2ggdG8gcmVjYWxjIGhlaWdodHMuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yID0ge1xyXG4gICAgICAgICAgICAgICAgICB4OiB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yLngsXHJcbiAgICAgICAgICAgICAgICAgIHk6IHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IueVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5iYWNrdXBBbmNob3IgPSB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yO1xyXG4gICAgICAgICAgICB9LCAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjYW5jZWxBbmNob3JpbmdNb2RhbDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFuY2hvcmluZ01vZGFsLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IgPSB0aGlzLmJhY2t1cEFuY2hvcjtcclxuICAgICAgICAgICAgfSwgICAgICAgICAgICBcclxuICAgICAgICAgICAgcmVzZXRBbmNob3I6IGZ1bmN0aW9uIChldmVudCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvciA9IHsgeDogMC41LCB5OiAwLjUgfTtcclxuICAgICAgICAgICAgfSwgIFxyXG4gICAgICAgICAgICBvbkFuY2hvckRyb3A6IGZ1bmN0aW9uKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgaW1hZ2UgPSB0aGlzLiRyZWZzLmFuY2hvckltYWdlO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvciA9IHtcclxuICAgICAgICAgICAgICAgICAgIHg6IGV2ZW50Lm9mZnNldFggLyBpbWFnZS5jbGllbnRXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgIHk6IGV2ZW50Lm9mZnNldFkgLyBpbWFnZS5jbGllbnRIZWlnaHRcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgYW5jaG9yTGVmdDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UgJiYgdGhpcy4kcmVmcy5tb2RhbEJvZHkgJiYgdGhpcy5zZWxlY3RlZE1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gV2hlbiBpbWFnZSBpcyBzaHJ1bmsgY29tcGFyZSBhZ2FpbnN0IHRoZSBtb2RhbCBib2R5LlxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBvZmZzZXQgPSAodGhpcy4kcmVmcy5tb2RhbEJvZHkuY2xpZW50V2lkdGggLSB0aGlzLiRyZWZzLmFuY2hvckltYWdlLmNsaWVudFdpZHRoKSAvIDI7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gKHRoaXMuc2VsZWN0ZWRNZWRpYS5hbmNob3IueCAqIHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UuY2xpZW50V2lkdGgpICsgb2Zmc2V0O1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBhbmNob3JJY29uID0gTWF0aC5yb3VuZCh0aGlzLiRyZWZzLm1vZGFsQm9keS5xdWVyeVNlbGVjdG9yKCcuaWNvbi1tZWRpYS1hbmNob3InKS5jbGllbnRXaWR0aCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoTnVtYmVyLmlzSW50ZWdlcihhbmNob3JJY29uKSlcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gLSBhbmNob3JJY29uLzI7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBwb3NpdGlvbiArICdweCc7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnMCc7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIGFuY2hvclRvcDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2UgJiYgdGhpcy5zZWxlY3RlZE1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHBvc2l0aW9uID0gdGhpcy5zZWxlY3RlZE1lZGlhLmFuY2hvci55ICogdGhpcy4kcmVmcy5hbmNob3JJbWFnZS5jbGllbnRIZWlnaHQ7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHBvc2l0aW9uICsgJ3B4JztcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICcwJztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgc2V0QW5jaG9yOiBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgICAgIHZhciBpbWFnZSA9IHRoaXMuJHJlZnMuYW5jaG9ySW1hZ2U7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkTWVkaWEuYW5jaG9yID0ge1xyXG4gICAgICAgICAgICAgICAgICAgIHg6IGV2ZW50Lm9mZnNldFggLyBpbWFnZS5jbGllbnRXaWR0aCxcclxuICAgICAgICAgICAgICAgICAgICB5OiBldmVudC5vZmZzZXRZIC8gaW1hZ2UuY2xpZW50SGVpZ2h0XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0sICAgICAgICAgXHJcbiAgICAgICAgICAgIGFkZE1lZGlhRmlsZXM6IGZ1bmN0aW9uIChmaWxlcykge1xyXG4gICAgICAgICAgICAgICAgaWYgKChmaWxlcy5sZW5ndGggPiAxKSAmJiAoYWxsb3dNdWx0aXBsZSA9PT0gZmFsc2UpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoJCgnI29ubHlPbmVJdGVtTWVzc2FnZScpLnZhbCgpKTtcclxuICAgICAgICAgICAgICAgICAgICBtZWRpYUZpZWxkQXBwLm1lZGlhSXRlbXMucHVzaChmaWxlc1swXSk7XHJcbiAgICAgICAgICAgICAgICAgICAgbWVkaWFGaWVsZEFwcC5pbml0aWFsaXplZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAubWVkaWFJdGVtcyA9IG1lZGlhRmllbGRBcHAubWVkaWFJdGVtcy5jb25jYXQoZmlsZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIG1lZGlhRmllbGRBcHAuaW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICByZW1vdmVTZWxlY3RlZDogZnVuY3Rpb24gKGV2ZW50KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZE1lZGlhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5tZWRpYUl0ZW1zICYmIHRoaXMubWVkaWFJdGVtcy5pbmRleE9mKHRoaXMuc2VsZWN0ZWRNZWRpYSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tZWRpYUl0ZW1zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhlIHJlbW92ZSBidXR0b24gY2FuIGFsc28gcmVtb3ZlIGEgdW5pcXVlIG1lZGlhIGl0ZW1cclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5tZWRpYUl0ZW1zLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1lZGlhSXRlbXMuc3BsaWNlKDAsIDEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNZWRpYSA9IG51bGw7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHNlbGVjdEFuZERlbGV0ZU1lZGlhOiBmdW5jdGlvbiAobWVkaWEpIHtcclxuICAgICAgICAgICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICAgICAgICAgIHNlbGYuc2VsZWN0ZWRNZWRpYSA9IG1lZGlhO1xyXG4gICAgICAgICAgICAgICAgLy8gc2V0VGltZW91dCBiZWNhdXNlIHNvbWV0aW1lcyByZW1vdmVTZWxlY3RlZCB3YXMgY2FsbGVkIGV2ZW4gYmVmb3JlIHRoZSBtZWRpYSB3YXMgc2V0LlxyXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5yZW1vdmVTZWxlY3RlZCgpO1xyXG4gICAgICAgICAgICAgICAgfSwgMTAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgd2F0Y2g6IHtcclxuICAgICAgICAgICAgbWVkaWFJdGVtczoge1xyXG4gICAgICAgICAgICAgICAgZGVlcDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIGhhbmRsZXIgKCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIFRyaWdnZXIgcHJldmlldyByZW5kZXJpbmdcclxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHsgJChkb2N1bWVudCkudHJpZ2dlcignY29udGVudHByZXZpZXc6cmVuZGVyJyk7IH0sIDEwMCk7IFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LCAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBjdXJyZW50UHJlZnM6IGZ1bmN0aW9uIChuZXdQcmVmcykge1xyXG4gICAgICAgICAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oJ21lZGlhRmllbGRQcmVmcycsIEpTT04uc3RyaW5naWZ5KG5ld1ByZWZzKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9KSk7XHJcbn1cclxuIiwiLy8gZGlmZmVyZW50IG1lZGlhIGZpZWxkIGVkaXRvcnMgd2lsbCBhZGQgdGhlbXNlbHZlcyB0byB0aGlzIGFycmF5XHJcbnZhciBtZWRpYUZpZWxkQXBwcyA9IFtdO1xyXG4iLCIvLyA8bWVkaWEtZmllbGQtdGh1bWJzLWNvbnRhaW5lcj4gY29tcG9uZW50IFxyXG4vLyBkaWZmZXJlbnQgbWVkaWEgZmllbGQgZWRpdG9ycyBzaGFyZSB0aGlzIGNvbXBvbmVudCB0byBwcmVzZW50IHRoZSB0aHVtYnMuXHJcblZ1ZS5jb21wb25lbnQoJ21lZGlhRmllbGRUaHVtYnNDb250YWluZXInLCB7XHJcbiAgICB0ZW1wbGF0ZTogJ1xcXHJcbiAgICAgICA8ZGl2IDppZD1cImlkUHJlZml4ICsgXFwnX21lZGlhQ29udGFpbmVyTWFpblxcJ1wiIHYtY2xvYWs+XFxcclxuICAgICAgICAgPGRpdiB2LWlmPVwibWVkaWFJdGVtcy5sZW5ndGggPCAxXCIgY2xhc3M9XCJjYXJkIHRleHQtY2VudGVyXCI+XFxcclxuICAgICAgICAgICAgIDxkaXYgY2xhc3M9IFwiY2FyZC1ib2R5XCIgPlxcXHJcbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImhpbnRcIj57e1Qubm9JbWFnZXN9fTwvc3Bhbj5cXFxyXG4gICAgICAgICAgICAgPC9kaXY+XFxcclxuICAgICAgICAgPC9kaXY+XFxcclxuICAgICAgICAgPGRyYWdnYWJsZSA6bGlzdD1cIm1lZGlhSXRlbXNcIiB0YWc9XCJvbFwiIGNsYXNzPVwicm93IG1lZGlhLWl0ZW1zLWdyaWRcIiA+XFxcclxuICAgICAgICAgICAgPGxpIHYtZm9yPVwibWVkaWEgaW4gbWVkaWFJdGVtc1wiXFxcclxuICAgICAgICAgICAgICAgIDprZXk9XCJtZWRpYS52dWVrZXlcIiBcXFxyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJtZWRpYS1jb250YWluZXItbWFpbi1saXN0LWl0ZW0gY2FyZCBwLTBcIlxcXHJcbiAgICAgICAgICAgICAgICA6c3R5bGU9XCJ7d2lkdGg6IHRodW1iU2l6ZSArIDIgKyBcXCdweFxcJ31cIlxcXHJcbiAgICAgICAgICAgICAgICA6Y2xhc3M9XCJ7c2VsZWN0ZWQ6IHNlbGVjdGVkTWVkaWEgPT0gbWVkaWF9XCJcXFxyXG4gICAgICAgICAgICAgICAgdi1vbjpjbGljaz1cInNlbGVjdE1lZGlhKG1lZGlhKVwiIHYtaWY9XCIhbWVkaWEuaXNSZW1vdmVkXCI+XFxcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtaWY9XCJtZWRpYS5tZWRpYVBhdGghPT0gXFwnbm90LWZvdW5kXFwnXCI+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRodW1iLWNvbnRhaW5lclwiIDpzdHlsZT1cIntoZWlnaHQ6IHRodW1iU2l6ZSArIFxcJ3B4XFwnfVwiID5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGltZyB2LWlmPVwibWVkaWEubWltZS5zdGFydHNXaXRoKFxcJ2ltYWdlXFwnKVwiIFxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c3JjPVwiYnVpbGRNZWRpYVVybChtZWRpYS51cmwsIHRodW1iU2l6ZSlcIiBcXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgOmRhdGEtbWltZT1cIm1lZGlhLm1pbWVcIlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA6c3R5bGU9XCJ7bWF4SGVpZ2h0OiB0aHVtYlNpemUgKyBcXCdweFxcJyAsIG1heFdpZHRoOiB0aHVtYlNpemUgKyBcXCdweFxcJ31cIi8+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIHYtZWxzZSA6Y2xhc3M9XCJnZXRmb250QXdlc29tZUNsYXNzTmFtZUZvckZpbGVOYW1lKG1lZGlhLm5hbWUsIFxcJ2ZhLTR4XFwnKVwiIDpkYXRhLW1pbWU9XCJtZWRpYS5taW1lXCI+PC9pPlxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cIm1lZGlhLWNvbnRhaW5lci1tYWluLWl0ZW0tdGl0bGUgY2FyZC1ib2R5XCI+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPVwiamF2YXNjcmlwdDo7XCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSBmbG9hdC1lbmQgaW5saW5lLW1lZGlhLWJ1dHRvbiBkZWxldGUtYnV0dG9uXCJcXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LW9uOmNsaWNrLnN0b3A9XCJzZWxlY3RBbmREZWxldGVNZWRpYShtZWRpYSlcIj48aSBjbGFzcz1cImZhLXNvbGlkIGZhLXRyYXNoXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYT5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhIDpocmVmPVwibWVkaWEudXJsXCIgdGFyZ2V0PVwiX2JsYW5rXCIgY2xhc3M9XCJidG4gYnRuLWxpZ2h0IGJ0bi1zbSBmbG9hdC1lbmQgaW5saW5lLW1lZGlhLWJ1dHRvbiB2aWV3LWJ1dHRvblwiXCI+PGkgY2xhc3M9XCJmYS1zb2xpZCBmYS1kb3dubG9hZFwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT48L2E+IFxcXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZWRpYS1maWxlbmFtZSBjYXJkLXRleHQgc21hbGxcIiA6dGl0bGU9XCJtZWRpYS5tZWRpYVBhdGhcIj57eyBtZWRpYS5pc05ldyA/IG1lZGlhLm5hbWUuc3Vic3RyKDM2KSA6IG1lZGlhLm5hbWUgfX08L3NwYW4+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PlxcXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+XFxcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtZWxzZT5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwidGh1bWItY29udGFpbmVyIGZsZXgtY29sdW1uXCIgOnN0eWxlPVwie2hlaWdodDogdGh1bWJTaXplICsgXFwncHhcXCd9XCI+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpIGNsYXNzPVwiZmEtc29saWQgZmEtYmFuIHRleHQtZGFuZ2VyIGQtYmxvY2tcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+XFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1kYW5nZXIgc21hbGwgZC1ibG9ja1wiPnt7IFQubWVkaWFOb3RGb3VuZCB9fTwvc3Bhbj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0ZXh0LWRhbmdlciBzbWFsbCBkLWJsb2NrIHRleHQtY2VudGVyXCI+e3sgVC5kaXNjYXJkV2FybmluZyB9fTwvc3Bhbj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwibWVkaWEtY29udGFpbmVyLW1haW4taXRlbS10aXRsZSBjYXJkLWJvZHlcIj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwiYnRuIGJ0bi1saWdodCBidG4tc20gZmxvYXQtZW5kIGlubGluZS1tZWRpYS1idXR0b24gZGVsZXRlLWJ1dHRvblwiXFxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2LW9uOmNsaWNrLnN0b3A9XCJzZWxlY3RBbmREZWxldGVNZWRpYShtZWRpYSlcIj48aSBjbGFzcz1cImZhLXNvbGlkIGZhLXRyYXNoXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+PC9pPjwvYT5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJtZWRpYS1maWxlbmFtZSBjYXJkLXRleHQgc21hbGwgdGV4dC1kYW5nZXJcIiA6dGl0bGU9XCJtZWRpYS5uYW1lXCI+e3sgbWVkaWEubmFtZSB9fTwvc3Bhbj5cXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj5cXFxyXG4gICAgICAgICAgICAgICAgICAgPC9kaXY+XFxcclxuICAgICAgICAgICAgPC9saT5cXFxyXG4gICAgICAgICA8L2RyYWdnYWJsZT5cXFxyXG4gICAgICAgPC9kaXY+XFxcclxuICAgICcsXHJcbiAgICBkYXRhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgVDoge31cclxuICAgICAgICB9O1xyXG4gICAgfSxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgbWVkaWFJdGVtczogQXJyYXksXHJcbiAgICAgICAgc2VsZWN0ZWRNZWRpYTogT2JqZWN0LFxyXG4gICAgICAgIHRodW1iU2l6ZTogTnVtYmVyLFxyXG4gICAgICAgIGlkUHJlZml4OiBTdHJpbmdcclxuICAgIH0sXHJcbiAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuXHJcbiAgICAgICAgLy8gcmV0cmlldmluZyBsb2NhbGl6ZWQgc3RyaW5ncyBmcm9tIHZpZXdcclxuICAgICAgICBzZWxmLlQubWVkaWFOb3RGb3VuZCA9ICQoJyN0LW1lZGlhLW5vdC1mb3VuZCcpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5kaXNjYXJkV2FybmluZyA9ICQoJyN0LWRpc2NhcmQtd2FybmluZycpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5ub0ltYWdlcyA9ICQoJyN0LW5vLWltYWdlcycpLnZhbCgpO1xyXG4gICAgfSxcclxuICAgIG1ldGhvZHM6IHtcclxuICAgICAgICBzZWxlY3RBbmREZWxldGVNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJHBhcmVudC4kZW1pdCgnc2VsZWN0QW5kRGVsZXRlTWVkaWFSZXF1ZXN0ZWQnLCBtZWRpYSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBzZWxlY3RNZWRpYTogZnVuY3Rpb24gKG1lZGlhKSB7XHJcbiAgICAgICAgICAgIHRoaXMuJHBhcmVudC4kZW1pdCgnc2VsZWN0TWVkaWFSZXF1ZXN0ZWQnLCBtZWRpYSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBidWlsZE1lZGlhVXJsOiBmdW5jdGlvbiAodXJsLCB0aHVtYlNpemUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHVybCArICh1cmwuaW5kZXhPZignPycpID09IC0xID8gJz8nIDogJyYnKSArICd3aWR0aD0nICsgdGh1bWJTaXplICsgJyZoZWlnaHQ9JyArIHRodW1iU2l6ZTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGdldGZvbnRBd2Vzb21lQ2xhc3NOYW1lRm9yRmlsZU5hbWU6ZnVuY3Rpb24gZ2V0Zm9udEF3ZXNvbWVDbGFzc05hbWVGb3JGaWxlbmFtZShmaWxlbmFtZSwgdGh1bWJzaXplKXtcclxuICAgICAgICAgICAgcmV0dXJuIGdldENsYXNzTmFtZUZvckZpbGVuYW1lKGZpbGVuYW1lKSArICcgJyArIHRodW1ic2l6ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG4iLCIvLyA8dXBsb2FkPiBjb21wb25lbnRcclxuVnVlLmNvbXBvbmVudCgndXBsb2FkJywge1xyXG4gICAgdGVtcGxhdGU6ICdcXFxyXG4gICAgICAgIDxkaXYgOmNsYXNzPVwieyBcXCd1cGxvYWQtd2FybmluZ1xcJyA6IG1vZGVsLmVycm9yTWVzc2FnZSB9XCIgY2xhc3M9XCJ1cGxvYWQgbS0yIHAtMiBwdC0wXCI+IFxcXHJcbiAgICAgICAgICAgIDxzcGFuIHYtaWY9XCJtb2RlbC5lcnJvck1lc3NhZ2VcIiB2LW9uOmNsaWNrPVwiZGlzbWlzc1dhcm5pbmcoKVwiIGNsYXNzPVwiY2xvc2Utd2FybmluZ1wiPjxpIGNsYXNzPVwiZmEtc29saWQgZmEtdGltZXNcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+IDwvc3Bhbj5cXFxyXG4gICAgICAgICAgICA8cCBjbGFzcz1cInVwbG9hZC1uYW1lXCIgOnRpdGxlPVwibW9kZWwuZXJyb3JNZXNzYWdlXCI+e3sgbW9kZWwubmFtZSB9fTwvcD4gXFxcclxuICAgICAgICAgICAgPGRpdj4gXFxcclxuICAgICAgICAgICAgICAgPHNwYW4gdi1zaG93PVwiIW1vZGVsLmVycm9yTWVzc2FnZVwiIDpzdHlsZT1cInsgd2lkdGg6IG1vZGVsLnBlcmNlbnRhZ2UgKyBcXCclXFwnfVwiIGNsYXNzPVwicHJvZ3Jlc3MtYmFyXCI+IDwvc3Bhbj4gXFxcclxuICAgICAgICAgICAgICAgPHNwYW4gdi1pZj1cIm1vZGVsLmVycm9yTWVzc2FnZVwiIGNsYXNzPVwiZXJyb3ItbWVzc2FnZVwiIDp0aXRsZT1cIm1vZGVsLmVycm9yTWVzc2FnZVwiPiBFcnJvcjoge3sgbW9kZWwuZXJyb3JNZXNzYWdlIH19IDwvc3Bhbj4gXFxcclxuICAgICAgICAgICAgPC9kaXY+IFxcXHJcbiAgICAgICAgPC9kaXY+IFxcXHJcbiAgICAgICAgJyxcclxuICAgIHByb3BzOiB7XHJcbiAgICAgICAgbW9kZWw6IE9iamVjdCxcclxuICAgICAgICB1cGxvYWRJbnB1dElkOiBTdHJpbmdcclxuICAgIH0sXHJcbiAgICBtb3VudGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIHZhciB1cGxvYWRJbnB1dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlbGYudXBsb2FkSW5wdXRJZCA/PyAnZmlsZXVwbG9hZCcpO1xyXG4gICAgICAgICQodXBsb2FkSW5wdXQpLmJpbmQoJ2ZpbGV1cGxvYWRwcm9ncmVzcycsIGZ1bmN0aW9uIChlLCBkYXRhKSB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGVzWzBdLm5hbWUgIT09IHNlbGYubW9kZWwubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9ICAgICAgICAgICAgXHJcbiAgICAgICAgICAgIHNlbGYubW9kZWwucGVyY2VudGFnZSA9IHBhcnNlSW50KGRhdGEubG9hZGVkIC8gZGF0YS50b3RhbCAqIDEwMCwgMTApO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkKHVwbG9hZElucHV0KS5iaW5kKCdmaWxldXBsb2FkZG9uZScsIGZ1bmN0aW9uIChlLCBkYXRhKSB7XHJcbiAgICAgICAgICAgIGlmIChkYXRhLmZpbGVzWzBdLm5hbWUgIT09IHNlbGYubW9kZWwubmFtZSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChkYXRhLnJlc3VsdC5maWxlc1swXS5lcnJvcikge1xyXG4gICAgICAgICAgICAgICAgc2VsZi5oYW5kbGVGYWlsdXJlKGRhdGEuZmlsZXNbMF0ubmFtZSwgZGF0YS5yZXN1bHQuZmlsZXNbMF0uZXJyb3IpO1xyXG4gICAgICAgICAgICB9IGVsc2UgeyAgXHJcbiAgICAgICAgICAgICAgICBidXMuJGVtaXQoJ3JlbW92YWxSZXF1ZXN0Jywgc2VsZi5tb2RlbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJCh1cGxvYWRJbnB1dCkuYmluZCgnZmlsZXVwbG9hZGZhaWwnLCBmdW5jdGlvbiAoZSwgZGF0YSkge1xyXG4gICAgICAgICAgICBpZiAoZGF0YS5maWxlc1swXS5uYW1lICE9PSBzZWxmLm1vZGVsLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzZWxmLmhhbmRsZUZhaWx1cmUoZGF0YS5maWxlc1swXS5uYW1lLCAkKCcjdC1lcnJvcicpLnZhbCgpKTtcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcbiAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgaGFuZGxlRmFpbHVyZTogZnVuY3Rpb24gKGZpbGVOYW1lLCBtZXNzYWdlKSB7XHJcbiAgICAgICAgICAgIGlmIChmaWxlTmFtZSAhPT0gdGhpcy5tb2RlbC5uYW1lKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5tb2RlbC5lcnJvck1lc3NhZ2UgPSBtZXNzYWdlO1xyXG4gICAgICAgICAgICBidXMuJGVtaXQoJ0Vycm9yT25VcGxvYWQnLCB0aGlzLm1vZGVsKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIGRpc21pc3NXYXJuaW5nOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGJ1cy4kZW1pdCgncmVtb3ZhbFJlcXVlc3QnLCB0aGlzLm1vZGVsKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn0pO1xyXG4iLCIvLyA8dXBsb2FkLWxpc3Q+IGNvbXBvbmVudFxyXG5WdWUuY29tcG9uZW50KCd1cGxvYWRMaXN0Jywge1xyXG4gICAgdGVtcGxhdGU6ICdcXFxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJ1cGxvYWQtbGlzdFwiIHYtc2hvdz1cImZpbGVzLmxlbmd0aCA+IDBcIj4gXFxcclxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImhlYWRlclwiIEBjbGljaz1cImV4cGFuZGVkID0gIWV4cGFuZGVkXCI+IFxcXHJcbiAgICAgICAgICAgICAgICA8c3Bhbj4ge3sgVC51cGxvYWRzIH19IDwvc3Bhbj4gXFxcclxuICAgICAgICAgICAgICAgIDxzcGFuIHYtc2hvdz1cInBlbmRpbmdDb3VudFwiPiAoUGVuZGluZzoge3sgcGVuZGluZ0NvdW50IH19KSA8L3NwYW4+IFxcXHJcbiAgICAgICAgICAgICAgICA8c3BhbiB2LXNob3c9XCJlcnJvckNvdW50XCIgOmNsYXNzPVwieyBcXCd0ZXh0LWRhbmdlclxcJyA6IGVycm9yQ291bnQgfVwiPiAoIHt7IFQuZXJyb3JzIH19OiB7eyBlcnJvckNvdW50IH19IC8gPGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIHYtb246Y2xpY2suc3RvcD1cImNsZWFyRXJyb3JzXCIgPiB7eyBULmNsZWFyRXJyb3JzIH19IDwvYT4pPC9zcGFuPiBcXFxyXG4gICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0b2dnbGUtYnV0dG9uXCI+IFxcXHJcbiAgICAgICAgICAgICAgICAgICAgPGRpdiB2LXNob3c9XCJleHBhbmRlZFwiPiBcXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLWNoZXZyb24tZG93blwiIGFyaWEtaGlkZGVuPVwidHJ1ZVwiPjwvaT4gXFxcclxuICAgICAgICAgICAgICAgICAgICA8L2Rpdj4gXFxcclxuICAgICAgICAgICAgICAgICAgICA8ZGl2IHYtc2hvdz1cIiFleHBhbmRlZFwiPiBcXFxyXG4gICAgICAgICAgICAgICAgICAgICAgICA8aSBjbGFzcz1cImZhLXNvbGlkIGZhLWNoZXZyb24tdXBcIiBhcmlhLWhpZGRlbj1cInRydWVcIj48L2k+IFxcXHJcbiAgICAgICAgICAgICAgICAgICAgPC9kaXY+IFxcXHJcbiAgICAgICAgICAgICAgICA8L2Rpdj4gXFxcclxuICAgICAgICAgICAgPC9kaXY+IFxcXHJcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJjYXJkLWJvZHlcIiB2LXNob3c9XCJleHBhbmRlZFwiPiBcXFxyXG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImQtZmxleCBmbGV4LXdyYXBcIj4gXFxcclxuICAgICAgICAgICAgICAgICAgICA8dXBsb2FkIDp1cGxvYWQtaW5wdXQtaWQ9XCJ1cGxvYWRJbnB1dElkXCIgdi1mb3I9XCJmIGluIGZpbGVzXCIgOmtleT1cImYubmFtZVwiICA6bW9kZWw9XCJmXCI+PC91cGxvYWQ+IFxcXHJcbiAgICAgICAgICAgICAgICA8L2RpdiA+IFxcXHJcbiAgICAgICAgICAgIDwvZGl2PiBcXFxyXG4gICAgICAgIDwvZGl2PiBcXFxyXG4gICAgICAgICcsXHJcbiAgICBkYXRhOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgZmlsZXM6IFtdLFxyXG4gICAgICAgICAgICBUOiB7fSxcclxuICAgICAgICAgICAgZXhwYW5kZWQ6IGZhbHNlLFxyXG4gICAgICAgICAgICBwZW5kaW5nQ291bnQ6IDAsXHJcbiAgICAgICAgICAgIGVycm9yQ291bnQ6IDBcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgcHJvcHM6IHtcclxuICAgICAgICB1cGxvYWRJbnB1dElkOiBTdHJpbmdcclxuICAgIH0sXHJcbiAgICBjcmVhdGVkOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHNlbGYgPSB0aGlzO1xyXG4gICAgICAgIC8vIHJldHJpZXZpbmcgbG9jYWxpemVkIHN0cmluZ3MgZnJvbSB2aWV3XHJcbiAgICAgICAgc2VsZi5ULnVwbG9hZHMgPSAkKCcjdC11cGxvYWRzJykudmFsKCk7XHJcbiAgICAgICAgc2VsZi5ULmVycm9ycyA9ICQoJyN0LWVycm9ycycpLnZhbCgpO1xyXG4gICAgICAgIHNlbGYuVC5jbGVhckVycm9ycyA9ICQoJyN0LWNsZWFyLWVycm9ycycpLnZhbCgpO1xyXG4gICAgfSxcclxuICAgIGNvbXB1dGVkOiB7XHJcbiAgICAgICAgZmlsZUNvdW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmZpbGVzLmxlbmd0aDtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgbW91bnRlZDogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBzZWxmID0gdGhpcztcclxuICAgICAgICB2YXIgdXBsb2FkSW5wdXQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzZWxmLnVwbG9hZElucHV0SWQgPz8gJ2ZpbGV1cGxvYWQnKTtcclxuICAgICAgICAkKHVwbG9hZElucHV0KS5iaW5kKCdmaWxldXBsb2FkYWRkJywgZnVuY3Rpb24gKGUsIGRhdGEpIHtcclxuICAgICAgICAgICAgaWYgKCFkYXRhLmZpbGVzKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZGF0YS5maWxlcy5mb3JFYWNoKGZ1bmN0aW9uIChuZXdGaWxlKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgYWxyZWFkeUluTGlzdCA9IHNlbGYuZmlsZXMuc29tZShmdW5jdGlvbiAoZikge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmLm5hbWUgPT0gbmV3RmlsZS5uYW1lO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKCFhbHJlYWR5SW5MaXN0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VsZi5maWxlcy5wdXNoKHsgbmFtZTogbmV3RmlsZS5uYW1lLCBwZXJjZW50YWdlOiAwLCBlcnJvck1lc3NhZ2U6ICcnIH0pO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKCdBIGZpbGUgd2l0aCB0aGUgc2FtZSBuYW1lIGlzIGFscmVhZHkgb24gdGhlIHF1ZXVlOicgKyBuZXdGaWxlLm5hbWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgYnVzLiRvbigncmVtb3ZhbFJlcXVlc3QnLCBmdW5jdGlvbiAoZmlsZVVwbG9hZCkge1xyXG4gICAgICAgICAgICBzZWxmLmZpbGVzLmZvckVhY2goZnVuY3Rpb24gKGl0ZW0sIGluZGV4LCBhcnJheSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0ubmFtZSA9PSBmaWxlVXBsb2FkLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICBhcnJheS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgYnVzLiRvbignRXJyb3JPblVwbG9hZCcsIGZ1bmN0aW9uIChmaWxlVXBsb2FkKSB7XHJcbiAgICAgICAgICAgIHNlbGYudXBkYXRlQ291bnQoKTtcclxuICAgICAgICB9KTtcclxuICAgIH0sXHJcbiAgICBtZXRob2RzOiB7XHJcbiAgICAgICAgdXBkYXRlQ291bnQ6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgdGhpcy5lcnJvckNvdW50ID0gdGhpcy5maWxlcy5maWx0ZXIoZnVuY3Rpb24gKGl0ZW0pIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLmVycm9yTWVzc2FnZSAhPSAnJztcclxuICAgICAgICAgICAgfSkubGVuZ3RoO1xyXG4gICAgICAgICAgICB0aGlzLnBlbmRpbmdDb3VudCA9IHRoaXMuZmlsZXMubGVuZ3RoIC0gdGhpcy5lcnJvckNvdW50O1xyXG4gICAgICAgICAgICBpZiAodGhpcy5maWxlcy5sZW5ndGggPCAxKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmV4cGFuZGVkID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9LFxyXG4gICAgICAgIGNsZWFyRXJyb3JzOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsZXMgPSB0aGlzLmZpbGVzLmZpbHRlcihmdW5jdGlvbiAoaXRlbSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZXJyb3JNZXNzYWdlID09ICcnO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9LFxyXG4gICAgd2F0Y2g6IHtcclxuICAgICAgICBmaWxlczogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICB0aGlzLnVwZGF0ZUNvdW50KCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59KTtcclxuIl19 +function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); } +/* + * jQuery Iframe Transport Plugin + * https://github.com/blueimp/jQuery-File-Upload + * + * Copyright 2011, Sebastian Tschan + * https://blueimp.net + * + * Licensed under the MIT license: + * https://opensource.org/licenses/MIT + */ + +/* global define, require */ + +(function (factory) { + 'use strict'; + + if (typeof define === 'function' && define.amd) { + // Register as an anonymous AMD module: + define(['jquery'], factory); + } else if ((typeof exports === "undefined" ? "undefined" : _typeof(exports)) === 'object') { + // Node/CommonJS: + factory(require('jquery')); + } else { + // Browser globals: + factory(window.jQuery); + } +})(function ($) { + 'use strict'; + + // Helper variable to create unique names for the transport iframes: + var counter = 0, + jsonAPI = $, + jsonParse = 'parseJSON'; + if ('JSON' in window && 'parse' in JSON) { + jsonAPI = JSON; + jsonParse = 'parse'; + } + + // The iframe transport accepts four additional options: + // options.fileInput: a jQuery collection of file input fields + // options.paramName: the parameter name for the file form data, + // overrides the name property of the file input field(s), + // can be a string or an array of strings. + // options.formData: an array of objects with name and value properties, + // equivalent to the return data of .serializeArray(), e.g.: + // [{name: 'a', value: 1}, {name: 'b', value: 2}] + // options.initialIframeSrc: the URL of the initial iframe src, + // by default set to "javascript:false;" + $.ajaxTransport('iframe', function (options) { + if (options.async) { + // javascript:false as initial iframe src + // prevents warning popups on HTTPS in IE6: + // eslint-disable-next-line no-script-url + var initialIframeSrc = options.initialIframeSrc || 'javascript:false;', + form, + iframe, + addParamChar; + return { + send: function send(_, completeCallback) { + form = $('
    '); + form.attr('accept-charset', options.formAcceptCharset); + addParamChar = /\?/.test(options.url) ? '&' : '?'; + // XDomainRequest only supports GET and POST: + if (options.type === 'DELETE') { + options.url = options.url + addParamChar + '_method=DELETE'; + options.type = 'POST'; + } else if (options.type === 'PUT') { + options.url = options.url + addParamChar + '_method=PUT'; + options.type = 'POST'; + } else if (options.type === 'PATCH') { + options.url = options.url + addParamChar + '_method=PATCH'; + options.type = 'POST'; + } + // IE versions below IE8 cannot set the name property of + // elements that have already been added to the DOM, + // so we set the name along with the iframe HTML markup: + counter += 1; + iframe = $('').on('load', function () { + var fileInputClones, + paramNames = $.isArray(options.paramName) ? options.paramName : [options.paramName]; + iframe.off('load').on('load', function () { + var response; + // Wrap in a try/catch block to catch exceptions thrown + // when trying to access cross-domain iframe contents: + try { + response = iframe.contents(); + // Google Chrome and Firefox do not throw an + // exception when calling iframe.contents() on + // cross-domain requests, so we unify the response: + if (!response.length || !response[0].firstChild) { + throw new Error(); + } + } catch (e) { + response = undefined; + } + // The complete callback returns the + // iframe content document as response object: + completeCallback(200, 'success', { + iframe: response + }); + // Fix for IE endless progress bar activity bug + // (happens on form submits to iframe targets): + $('').appendTo(form); + window.setTimeout(function () { + // Removing the form in a setTimeout call + // allows Chrome's developer tools to display + // the response result + form.remove(); + }, 0); + }); + form.prop('target', iframe.prop('name')).prop('action', options.url).prop('method', options.type); + if (options.formData) { + $.each(options.formData, function (index, field) { + $('').prop('name', field.name).val(field.value).appendTo(form); + }); + } + if (options.fileInput && options.fileInput.length && options.type === 'POST') { + fileInputClones = options.fileInput.clone(); + // Insert a clone for each file input field: + options.fileInput.after(function (index) { + return fileInputClones[index]; + }); + if (options.paramName) { + options.fileInput.each(function (index) { + $(this).prop('name', paramNames[index] || options.paramName); + }); + } + // Appending the file input fields to the hidden form + // removes them from their original location: + form.append(options.fileInput).prop('enctype', 'multipart/form-data') + // enctype must be set as encoding for IE: + .prop('encoding', 'multipart/form-data'); + // Remove the HTML5 form attribute from the input(s): + options.fileInput.removeAttr('form'); + } + window.setTimeout(function () { + // Submitting the form in a setTimeout call fixes an issue with + // Safari 13 not triggering the iframe load event after resetting + // the load event handler, see also: + // https://github.com/blueimp/jQuery-File-Upload/issues/3633 + form.submit(); + // Insert the file input fields at their original location + // by replacing the clones with the originals: + if (fileInputClones && fileInputClones.length) { + options.fileInput.each(function (index, input) { + var clone = $(fileInputClones[index]); + // Restore the original name and form properties: + $(input).prop('name', clone.prop('name')).attr('form', clone.attr('form')); + clone.replaceWith(input); + }); + } + }, 0); + }); + form.append(iframe).appendTo(document.body); + }, + abort: function abort() { + if (iframe) { + // javascript:false as iframe src aborts the request + // and prevents warning popups on HTTPS in IE6. + iframe.off('load').prop('src', initialIframeSrc); + } + if (form) { + form.remove(); + } + } + }; + } + }); + + // The iframe transport returns the iframe content document as response. + // The following adds converters from iframe to text, json, html, xml + // and script. + // Please note that the Content-Type for JSON responses has to be text/plain + // or text/html, if the browser doesn't include application/json in the + // Accept header, else IE will show a download dialog. + // The Content-Type for XML responses on the other hand has to be always + // application/xml or text/xml, so IE properly parses the XML response. + // See also + // https://github.com/blueimp/jQuery-File-Upload/wiki/Setup#content-type-negotiation + $.ajaxSetup({ + converters: { + 'iframe text': function iframeText(iframe) { + return iframe && $(iframe[0].body).text(); + }, + 'iframe json': function iframeJson(iframe) { + return iframe && jsonAPI[jsonParse]($(iframe[0].body).text()); + }, + 'iframe html': function iframeHtml(iframe) { + return iframe && $(iframe[0].body).html(); + }, + 'iframe xml': function iframeXml(iframe) { + var xmlDoc = iframe && iframe[0]; + return xmlDoc && $.isXMLDoc(xmlDoc) ? xmlDoc : $.parseXML(xmlDoc.XMLDocument && xmlDoc.XMLDocument.xml || $(xmlDoc.body).html()); + }, + 'iframe script': function iframeScript(iframe) { + return iframe && $.globalEval($(iframe[0].body).text()); + } + } + }); +}); \ No newline at end of file diff --git a/src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.min.js b/src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.min.js index 76b90bf686f..df24f4fcf2a 100644 --- a/src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.min.js +++ b/src/OrchardCore.Modules/OrchardCore.Media/wwwroot/Scripts/media.min.js @@ -1 +1 @@ -function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function randomUUID(){return"object"===("undefined"==typeof crypto?"undefined":_typeof(crypto))&&"function"==typeof crypto.randomUUID?crypto.randomUUID():([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,(function(e){return(e^crypto.getRandomValues(new Uint8Array(1))[0]&15>>e/4).toString(16)}))}function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function ownKeys(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function _objectSpread(e){for(var t=1;t').prop("disabled")),e.support.xhrFileUpload=!(!window.ProgressEvent||!window.FileReader),e.support.xhrFormDataFileUpload=!!window.FormData,e.support.blobSlice=window.Blob&&(Blob.prototype.slice||Blob.prototype.webkitSlice||Blob.prototype.mozSlice),e.widget("blueimp.fileupload",{options:{dropZone:e(document),pasteZone:void 0,fileInput:void 0,replaceFileInput:!0,paramName:void 0,singleFileUploads:!0,limitMultiFileUploads:void 0,limitMultiFileUploadSize:void 0,limitMultiFileUploadSizeOverhead:512,sequentialUploads:!1,limitConcurrentUploads:void 0,forceIframeTransport:!1,redirect:void 0,redirectParamName:void 0,postMessage:void 0,multipart:!0,maxChunkSize:void 0,uploadedBytes:void 0,recalculateProgress:!0,progressInterval:100,bitrateInterval:500,autoUpload:!0,uniqueFilenames:void 0,messages:{uploadedBytes:"Uploaded bytes exceed file size"},i18n:function(t,i){return t=this.messages[t]||t.toString(),i&&e.each(i,(function(e,i){t=t.replace("{"+e+"}",i)})),t},formData:function(e){return e.serializeArray()},add:function(t,i){if(t.isDefaultPrevented())return!1;(i.autoUpload||!1!==i.autoUpload&&e(this).fileupload("option","autoUpload"))&&i.process().done((function(){i.submit()}))},processData:!1,contentType:!1,cache:!1,timeout:0},_promisePipe:(i=e.fn.jquery.split("."),Number(i[0])>1||Number(i[1])>7?"then":"pipe"),_specialOptions:["fileInput","dropZone","pasteZone","multipart","forceIframeTransport"],_blobSlice:e.support.blobSlice&&function(){return(this.slice||this.webkitSlice||this.mozSlice).apply(this,arguments)},_BitrateTimer:function(){this.timestamp=Date.now?Date.now():(new Date).getTime(),this.loaded=0,this.bitrate=0,this.getBitrate=function(e,t,i){var n=e-this.timestamp;return(!this.bitrate||!i||n>i)&&(this.bitrate=(t-this.loaded)*(1e3/n)*8,this.loaded=t,this.timestamp=e),this.bitrate}},_isXHRUpload:function(t){return!t.forceIframeTransport&&(!t.multipart&&e.support.xhrFileUpload||e.support.xhrFormDataFileUpload)},_getFormData:function(t){var i;return"function"===e.type(t.formData)?t.formData(t.form):e.isArray(t.formData)?t.formData:"object"===e.type(t.formData)?(i=[],e.each(t.formData,(function(e,t){i.push({name:e,value:t})})),i):[]},_getTotal:function(t){var i=0;return e.each(t,(function(e,t){i+=t.size||1})),i},_initProgressObject:function(t){var i={loaded:0,total:0,bitrate:0};t._progress?e.extend(t._progress,i):t._progress=i},_initResponseObject:function(e){var t;if(e._response)for(t in e._response)Object.prototype.hasOwnProperty.call(e._response,t)&&delete e._response[t];else e._response={}},_onProgress:function(t,i){if(t.lengthComputable){var n,a=Date.now?Date.now():(new Date).getTime();if(i._time&&i.progressInterval&&a-i._time").prop("href",t.url).prop("host");t.dataType="iframe "+(t.dataType||""),t.formData=this._getFormData(t),t.redirect&&i&&i!==location.host&&t.formData.push({name:t.redirectParamName||"redirect",value:t.redirect})},_initDataSettings:function(e){this._isXHRUpload(e)?(this._chunkedUpload(e,!0)||(e.data||this._initXHRData(e),this._initProgressListener(e)),e.postMessage&&(e.dataType="postmessage "+(e.dataType||""))):this._initIframeSettings(e)},_getParamName:function(t){var i=e(t.fileInput),n=t.paramName;return n?e.isArray(n)||(n=[n]):(n=[],i.each((function(){for(var t=e(this),i=t.prop("name")||"files[]",a=(t.prop("files")||[1]).length;a;)n.push(i),a-=1})),n.length||(n=[i.prop("name")||"files[]"])),n},_initFormSettings:function(t){t.form&&t.form.length||(t.form=e(t.fileInput.prop("form")),t.form.length||(t.form=e(this.options.fileInput.prop("form")))),t.paramName=this._getParamName(t),t.url||(t.url=t.form.prop("action")||location.href),t.type=(t.type||"string"===e.type(t.form.prop("method"))&&t.form.prop("method")||"").toUpperCase(),"POST"!==t.type&&"PUT"!==t.type&&"PATCH"!==t.type&&(t.type="POST"),t.formAcceptCharset||(t.formAcceptCharset=t.form.attr("accept-charset"))},_getAJAXSettings:function(t){var i=e.extend({},this.options,t);return this._initFormSettings(i),this._initDataSettings(i),i},_getDeferredState:function(e){return e.state?e.state():e.isResolved()?"resolved":e.isRejected()?"rejected":"pending"},_enhancePromise:function(e){return e.success=e.done,e.error=e.fail,e.complete=e.always,e},_getXHRPromise:function(t,i,n){var a=e.Deferred(),o=a.promise();return i=i||this.options.context||o,!0===t?a.resolveWith(i,n):!1===t&&a.rejectWith(i,n),o.abort=a.promise,this._enhancePromise(o)},_addConvenienceMethods:function(t,i){var n=this,a=function(t){return e.Deferred().resolveWith(n,t).promise()};i.process=function(t,o){return(t||o)&&(i._processQueue=this._processQueue=(this._processQueue||a([this]))[n._promisePipe]((function(){return i.errorThrown?e.Deferred().rejectWith(n,[i]).promise():a(arguments)}))[n._promisePipe](t,o)),this._processQueue||a([this])},i.submit=function(){return"pending"!==this.state()&&(i.jqXHR=this.jqXHR=!1!==n._trigger("submit",e.Event("submit",{delegatedEvent:t}),this)&&n._onSend(t,this)),this.jqXHR||n._getXHRPromise()},i.abort=function(){return this.jqXHR?this.jqXHR.abort():(this.errorThrown="abort",n._trigger("fail",null,this),n._getXHRPromise(!1))},i.state=function(){return this.jqXHR?n._getDeferredState(this.jqXHR):this._processQueue?n._getDeferredState(this._processQueue):void 0},i.processing=function(){return!this.jqXHR&&this._processQueue&&"pending"===n._getDeferredState(this._processQueue)},i.progress=function(){return this._progress},i.response=function(){return this._response}},_getUploadedBytes:function(e){var t=e.getResponseHeader("Range"),i=t&&t.split("-"),n=i&&i.length>1&&parseInt(i[1],10);return n&&n+1},_chunkedUpload:function(t,i){t.uploadedBytes=t.uploadedBytes||0;var n,a,o=this,r=t.files[0],s=r.size,l=t.uploadedBytes,d=t.maxChunkSize||s,c=this._blobSlice,u=e.Deferred(),m=u.promise();return!(!(this._isXHRUpload(t)&&c&&(l||("function"===e.type(d)?d(t):d)=s?(r.error=t.i18n("uploadedBytes"),this._getXHRPromise(!1,t.context,[null,"error",r.error])):(a=function(){var i=e.extend({},t),m=i._progress.loaded;i.blob=c.call(r,l,l+("function"===e.type(d)?d(i):d),r.type),i.chunkSize=i.blob.size,i.contentRange="bytes "+l+"-"+(l+i.chunkSize-1)+"/"+s,o._trigger("chunkbeforesend",null,i),o._initXHRData(i),o._initProgressListener(i),n=(!1!==o._trigger("chunksend",null,i)&&e.ajax(i)||o._getXHRPromise(!1,i.context)).done((function(n,r,d){l=o._getUploadedBytes(d)||l+i.chunkSize,m+i.chunkSize-i._progress.loaded&&o._onProgress(e.Event("progress",{lengthComputable:!0,loaded:l-i.uploadedBytes,total:l-i.uploadedBytes}),i),t.uploadedBytes=i.uploadedBytes=l,i.result=n,i.textStatus=r,i.jqXHR=d,o._trigger("chunkdone",null,i),o._trigger("chunkalways",null,i),ls._sending)for(var n=s._slots.shift();n;){if("pending"===s._getDeferredState(n)){n.resolve();break}n=s._slots.shift()}0===s._active&&s._trigger("stop")}))};return this._beforeSend(t,l),this.options.sequentialUploads||this.options.limitConcurrentUploads&&this.options.limitConcurrentUploads<=this._sending?(this.options.limitConcurrentUploads>1?(o=e.Deferred(),this._slots.push(o),r=o[s._promisePipe](d)):(this._sequence=this._sequence[s._promisePipe](d,d),r=this._sequence),r.abort=function(){return a=[void 0,"abort","abort"],n?n.abort():(o&&o.rejectWith(l.context,a),d())},this._enhancePromise(r)):d()},_onAdd:function(t,i){var n,a,o,r,s=this,l=!0,d=e.extend({},this.options,i),c=i.files,u=c.length,m=d.limitMultiFileUploads,p=d.limitMultiFileUploadSize,f=d.limitMultiFileUploadSizeOverhead,h=0,g=this._getParamName(d),v=0;if(!u)return!1;if(p&&void 0===c[0].size&&(p=void 0),(d.singleFileUploads||m||p)&&this._isXHRUpload(d))if(d.singleFileUploads||p||!m)if(!d.singleFileUploads&&p)for(o=[],n=[],r=0;rp||m&&r+1-v>=m)&&(o.push(c.slice(v,r+1)),(a=g.slice(v,r+1)).length||(a=g),n.push(a),v=r+1,h=0);else n=g;else for(o=[],n=[],r=0;r").append(n)[0].reset(),i.after(n).detach(),a&&n.trigger("focus"),e.cleanData(i.off("remove")),this.options.fileInput=this.options.fileInput.map((function(e,t){return t===i[0]?n[0]:t})),i[0]===this.element[0]&&(this.element=n)},_handleFileTreeEntry:function(t,i){var n,a=this,o=e.Deferred(),r=[],s=function(e){e&&!e.entry&&(e.entry=t),o.resolve([e])};return i=i||"",t.isFile?t._file?(t._file.relativePath=i,o.resolve(t._file)):t.file((function(e){e.relativePath=i,o.resolve(e)}),s):t.isDirectory?(n=t.createReader(),function e(){n.readEntries((function(n){n.length?(r=r.concat(n),e()):function(e){a._handleFileTreeEntries(e,i+t.name+"/").done((function(e){o.resolve(e)})).fail(s)}(r)}),s)}()):o.resolve([]),o.promise()},_handleFileTreeEntries:function(t,i){var n=this;return e.when.apply(e,e.map(t,(function(e){return n._handleFileTreeEntry(e,i)})))[this._promisePipe]((function(){return Array.prototype.concat.apply([],arguments)}))},_getDroppedFiles:function(t){var i=(t=t||{}).items;return i&&i.length&&(i[0].webkitGetAsEntry||i[0].getAsEntry)?this._handleFileTreeEntries(e.map(i,(function(e){var t;return e.webkitGetAsEntry?((t=e.webkitGetAsEntry())&&(t._file=e.getAsFile()),t):e.getAsEntry()}))):e.Deferred().resolve(e.makeArray(t.files)).promise()},_getSingleFileInputFiles:function(t){var i,n,a=(t=e(t)).prop("entries");if(a&&a.length)return this._handleFileTreeEntries(a);if((i=e.makeArray(t.prop("files"))).length)void 0===i[0].name&&i[0].fileName&&e.each(i,(function(e,t){t.name=t.fileName,t.size=t.fileSize}));else{if(!(n=t.prop("value")))return e.Deferred().resolve([]).promise();i=[{name:n.replace(/^.*\\/,"")}]}return e.Deferred().resolve(i).promise()},_getFileInputFiles:function(t){return t instanceof e&&1!==t.length?e.when.apply(e,e.map(t,this._getSingleFileInputFiles))[this._promisePipe]((function(){return Array.prototype.concat.apply([],arguments)})):this._getSingleFileInputFiles(t)},_onChange:function(t){var i=this,n={fileInput:e(t.target),form:e(t.target.form)};this._getFileInputFiles(n.fileInput).always((function(a){n.files=a,i.options.replaceFileInput&&i._replaceFileInput(n),!1!==i._trigger("change",e.Event("change",{delegatedEvent:t}),n)&&i._onAdd(t,n)}))},_onPaste:function(t){var i=t.originalEvent&&t.originalEvent.clipboardData&&t.originalEvent.clipboardData.items,n={files:[]};i&&i.length&&(e.each(i,(function(e,t){var i=t.getAsFile&&t.getAsFile();i&&n.files.push(i)})),!1!==this._trigger("paste",e.Event("paste",{delegatedEvent:t}),n)&&this._onAdd(t,n))},_onDrop:function(t){t.dataTransfer=t.originalEvent&&t.originalEvent.dataTransfer;var i=this,n=t.dataTransfer,a={};n&&n.files&&n.files.length&&(t.preventDefault(),this._getDroppedFiles(n).always((function(n){a.files=n,!1!==i._trigger("drop",e.Event("drop",{delegatedEvent:t}),a)&&i._onAdd(t,a)})))},_onDragOver:t("dragover"),_onDragEnter:t("dragenter"),_onDragLeave:t("dragleave"),_initEventHandlers:function(){this._isXHRUpload(this.options)&&(this._on(this.options.dropZone,{dragover:this._onDragOver,drop:this._onDrop,dragenter:this._onDragEnter,dragleave:this._onDragLeave}),this._on(this.options.pasteZone,{paste:this._onPaste})),e.support.fileInput&&this._on(this.options.fileInput,{change:this._onChange})},_destroyEventHandlers:function(){this._off(this.options.dropZone,"dragenter dragleave dragover drop"),this._off(this.options.pasteZone,"paste"),this._off(this.options.fileInput,"change")},_destroy:function(){this._destroyEventHandlers()},_setOption:function(t,i){var n=-1!==e.inArray(t,this._specialOptions);n&&this._destroyEventHandlers(),this._super(t,i),n&&(this._initSpecialOptions(),this._initEventHandlers())},_initSpecialOptions:function(){var t=this.options;void 0===t.fileInput?t.fileInput=this.element.is('input[type="file"]')?this.element:this.element.find('input[type="file"]'):t.fileInput instanceof e||(t.fileInput=e(t.fileInput)),t.dropZone instanceof e||(t.dropZone=e(t.dropZone)),t.pasteZone instanceof e||(t.pasteZone=e(t.pasteZone))},_getRegExp:function(e){var t=e.split("/"),i=t.pop();return t.shift(),new RegExp(t.join("/"),i)},_isRegExpOption:function(t,i){return"url"!==t&&"string"===e.type(i)&&/^\/.*\/[igm]{0,3}$/.test(i)},_initDataAttributes:function(){var t=this,i=this.options,n=this.element.data();e.each(this.element[0].attributes,(function(e,a){var o,r=a.name.toLowerCase();/^data-/.test(r)&&(r=r.slice(5).replace(/-[a-z]/g,(function(e){return e.charAt(1).toUpperCase()})),o=n[r],t._isRegExpOption(r,o)&&(o=t._getRegExp(o)),i[r]=o)}))},_create:function(){this._initDataAttributes(),this._initSpecialOptions(),this._slots=[],this._sequence=this._getXHRPromise(!0),this._sending=this._active=0,this._initProgressObject(this),this._initEventHandlers()},active:function(){return this._active},progress:function(){return this._progress},add:function(t){var i=this;t&&!this.options.disabled&&(t.fileInput&&!t.files?this._getFileInputFiles(t.fileInput).always((function(e){t.files=e,i._onAdd(null,t)})):(t.files=e.makeArray(t.files),this._onAdd(null,t)))},send:function(t){if(t&&!this.options.disabled){if(t.fileInput&&!t.files){var i,n,a=this,o=e.Deferred(),r=o.promise();return r.abort=function(){return n=!0,i?i.abort():(o.reject(null,"abort","abort"),r)},this._getFileInputFiles(t.fileInput).always((function(e){n||(e.length?(t.files=e,(i=a._onSend(null,t)).then((function(e,t,i){o.resolve(e,t,i)}),(function(e,t,i){o.reject(e,t,i)}))):o.reject())})),this._enhancePromise(r)}if(t.files=e.makeArray(t.files),t.files.length)return this._onSend(null,t)}return this._getXHRPromise(!1,t&&t.context)}})})),function(e){"use strict";"function"==typeof define&&define.amd?define(["jquery"],e):"object"===("undefined"==typeof exports?"undefined":_typeof(exports))?e(require("jquery")):e(window.jQuery)}((function(e){"use strict";var t=0,i=e,n="parseJSON";"JSON"in window&&"parse"in JSON&&(i=JSON,n="parse"),e.ajaxTransport("iframe",(function(i){if(i.async){var n,a,o,r=i.initialIframeSrc||"javascript:false;";return{send:function(s,l){(n=e('
    ')).attr("accept-charset",i.formAcceptCharset),o=/\?/.test(i.url)?"&":"?","DELETE"===i.type?(i.url=i.url+o+"_method=DELETE",i.type="POST"):"PUT"===i.type?(i.url=i.url+o+"_method=PUT",i.type="POST"):"PATCH"===i.type&&(i.url=i.url+o+"_method=PATCH",i.type="POST"),a=e('').on("load",(function(){var t,o=e.isArray(i.paramName)?i.paramName:[i.paramName];a.off("load").on("load",(function(){var t;try{if(!(t=a.contents()).length||!t[0].firstChild)throw new Error}catch(e){t=void 0}l(200,"success",{iframe:t}),e('').appendTo(n),window.setTimeout((function(){n.remove()}),0)})),n.prop("target",a.prop("name")).prop("action",i.url).prop("method",i.type),i.formData&&e.each(i.formData,(function(t,i){e('').prop("name",i.name).val(i.value).appendTo(n)})),i.fileInput&&i.fileInput.length&&"POST"===i.type&&(t=i.fileInput.clone(),i.fileInput.after((function(e){return t[e]})),i.paramName&&i.fileInput.each((function(t){e(this).prop("name",o[t]||i.paramName)})),n.append(i.fileInput).prop("enctype","multipart/form-data").prop("encoding","multipart/form-data"),i.fileInput.removeAttr("form")),window.setTimeout((function(){n.submit(),t&&t.length&&i.fileInput.each((function(i,n){var a=e(t[i]);e(n).prop("name",a.prop("name")).attr("form",a.attr("form")),a.replaceWith(n)}))}),0)})),n.append(a).appendTo(document.body)},abort:function(){a&&a.off("load").prop("src",r),n&&n.remove()}}}})),e.ajaxSetup({converters:{"iframe text":function(t){return t&&e(t[0].body).text()},"iframe json":function(t){return t&&i[n](e(t[0].body).text())},"iframe html":function(t){return t&&e(t[0].body).html()},"iframe xml":function(t){var i=t&&t[0];return i&&e.isXMLDoc(i)?i:e.parseXML(i.XMLDocument&&i.XMLDocument.xml||e(i.body).html())},"iframe script":function(t){return t&&e.globalEval(e(t[0].body).text())}}})}));var bus=new Vue;function initializeMediaApplication(e,t,i){initialized||(initialized=!0,t||console.error("mediaApplicationUrl variable is not defined"),$.ajax({url:t,method:"GET",success:function(t){$(".ta-content").append(t),$(document).trigger("mediaapplication:ready");var n={name:$("#t-mediaLibrary").text(),path:"",folder:"",isDirectory:!0};mediaApp=new Vue({el:"#mediaApp",data:{selectedFolder:{},mediaItems:[],selectedMedias:[],errors:[],dragDropThumbnail:new Image,smallThumbs:!1,gridView:!1,mediaFilter:"",sortBy:"",sortAsc:!0,itemsInPage:[]},created:function(){var e=this;e.dragDropThumbnail.src=(i||"")+"/OrchardCore.Media/Images/drag-thumbnail.png",bus.$on("folderSelected",(function(t){e.selectedFolder=t})),bus.$on("folderDeleted",(function(){e.selectRoot()})),bus.$on("folderAdded",(function(t){e.selectedFolder=t,t.selected=!0})),bus.$on("mediaListMoved",(function(t){e.loadFolder(e.selectedFolder),t&&e.errors.push(t)})),bus.$on("mediaRenamed",(function(t,i,n,a){var o=e.mediaItems.filter((function(e){return e.mediaPath===n}))[0];o.mediaPath=i,o.name=t,o.url=a})),bus.$on("createFolderRequested",(function(t){e.createFolder()})),bus.$on("deleteFolderRequested",(function(t){e.deleteFolder()})),bus.$on("sortChangeRequested",(function(t){e.changeSort(t)})),bus.$on("mediaToggleRequested",(function(t){e.toggleSelectionOfMedia(t)})),bus.$on("renameMediaRequested",(function(t){e.renameMedia(t)})),bus.$on("deleteMediaRequested",(function(t){e.deleteMediaItem(t)})),bus.$on("mediaDragStartRequested",(function(t,i){e.handleDragStart(t,i)})),bus.$on("pagerEvent",(function(t){e.itemsInPage=t,e.selectedMedias=[]})),localStorage.getItem("mediaApplicationPrefs")?e.currentPrefs=JSON.parse(localStorage.getItem("mediaApplicationPrefs")):e.selectedFolder=n},computed:{isHome:function(){return this.selectedFolder==n},parents:function(){var e=[];for(parentFolder=this.selectedFolder;parentFolder&&""!=parentFolder.path;)e.unshift(parentFolder),parentFolder=parentFolder.parent;return e},root:function(){return n},filteredMediaItems:function(){var e=this;e.selectedMedias=[];var t=e.mediaItems.filter((function(t){return t.name.toLowerCase().indexOf(e.mediaFilter.toLowerCase())>-1}));switch(e.sortBy){case"size":t.sort((function(t,i){return e.sortAsc?t.size-i.size:i.size-t.size}));break;case"mime":t.sort((function(t,i){return e.sortAsc?t.mime.toLowerCase().localeCompare(i.mime.toLowerCase()):i.mime.toLowerCase().localeCompare(t.mime.toLowerCase())}));break;case"lastModify":t.sort((function(t,i){return e.sortAsc?t.lastModify-i.lastModify:i.lastModify-t.lastModify}));break;default:t.sort((function(t,i){return e.sortAsc?t.name.toLowerCase().localeCompare(i.name.toLowerCase()):i.name.toLowerCase().localeCompare(t.name.toLowerCase())}))}return t},hiddenCount:function(){return this.mediaItems.length-this.filteredMediaItems.length},thumbSize:function(){return this.smallThumbs?100:240},currentPrefs:{get:function(){return{smallThumbs:this.smallThumbs,selectedFolder:this.selectedFolder,gridView:this.gridView}},set:function(e){e&&(this.smallThumbs=e.smallThumbs,this.selectedFolder=e.selectedFolder,this.gridView=e.gridView)}}},watch:{currentPrefs:function(e){localStorage.setItem("mediaApplicationPrefs",JSON.stringify(e))},selectedFolder:function(e){this.mediaFilter="",this.selectedFolder=e,this.loadFolder(e)}},mounted:function(){this.$refs.rootFolder.toggle()},methods:{uploadUrl:function(){if(!this.selectedFolder)return null;var e=$("#uploadFiles").val();return e+(-1==e.indexOf("?")?"?":"&")+"path="+encodeURIComponent(this.selectedFolder.path)},selectRoot:function(){this.selectedFolder=this.root},loadFolder:function(e){this.errors=[],this.selectedMedias=[];var t=this,i=$("#getMediaItemsUrl").val();console.log(e.path),$.ajax({url:i+(-1==i.indexOf("?")?"?":"&")+"path="+encodeURIComponent(e.path),method:"GET",success:function(e){e.forEach((function(e){e.open=!1})),t.mediaItems=e,t.selectedMedias=[],t.sortBy="",t.sortAsc=!0},error:function(i){console.log("error loading folder:"+e.path),t.selectRoot()}})},selectAll:function(){this.selectedMedias=[];for(var e=0;e-1&&(t.mediaItems.splice(n,1),bus.$emit("mediaDeleted",t.selectedMedias[i]))}t.selectedMedias=[]},error:function(e){console.error(e.responseText)}})}}}))},deleteMediaItem:function(e){var t=this;e&&confirmDialog(_objectSpread(_objectSpread({},$("#deleteMedia").data()),{},{callback:function(i){i&&$.ajax({url:$("#deleteMediaUrl").val()+"?path="+encodeURIComponent(e.mediaPath),method:"POST",data:{__RequestVerificationToken:$("input[name='__RequestVerificationToken']").val()},success:function(i){var n=t.mediaItems&&t.mediaItems.indexOf(e);n>-1&&(t.mediaItems.splice(n,1),bus.$emit("mediaDeleted",e))},error:function(e){console.error(e.responseText)}})}}))},handleDragStart:function(e,t){var i=[];this.selectedMedias.forEach((function(e){i.push(e.name)})),0==this.isMediaSelected(e)&&(i.push(e.name),this.selectedMedias.push(e)),t.dataTransfer.setData("mediaNames",JSON.stringify(i)),t.dataTransfer.setData("sourceFolder",this.selectedFolder.path),t.dataTransfer.setDragImage(this.dragDropThumbnail,10,10),t.dataTransfer.effectAllowed="move"},handleScrollWhileDrag:function(e){e.clientY<150&&window.scrollBy(0,-10),e.clientY>window.innerHeight-100&&window.scrollBy(0,10)},changeSort:function(e){this.sortBy==e?this.sortAsc=!this.sortAsc:(this.sortAsc=!0,this.sortBy=e)}}}),$("#create-folder-name").keypress((function(e){if(13==e.which)return $("#modalFooterOk").click(),!1})),$("#modalFooterOk").on("click",(function(e){var t=$("#create-folder-name").val();""!==t&&$.ajax({url:$("#createFolderUrl").val()+"?path="+encodeURIComponent(mediaApp.selectedFolder.path)+"&name="+encodeURIComponent(t),method:"POST",data:{__RequestVerificationToken:$("input[name='__RequestVerificationToken']").val()},success:function(e){bus.$emit("addFolder",mediaApp.selectedFolder,e),bootstrap.Modal.getOrCreateInstance($("#createFolderModal")).hide()},error:function(e){$("#createFolderModal-errors").empty();var t=JSON.parse(e.responseText).value;$('').text(t).appendTo($("#createFolderModal-errors"))}})})),$("#renameMediaModalFooterOk").on("click",(function(e){var t=$("#new-item-name").val(),i=$("#old-item-name").val();if(""!==t){var n=mediaApp.selectedFolder.path+"/";"/"===n&&(n="");var a=n+t,o=n+i;if(a.toLowerCase()!==o.toLowerCase())$.ajax({url:$("#renameMediaUrl").val()+"?oldPath="+encodeURIComponent(o)+"&newPath="+encodeURIComponent(a),method:"POST",data:{__RequestVerificationToken:$("input[name='__RequestVerificationToken']").val()},success:function(e){bootstrap.Modal.getOrCreateInstance($("#renameMediaModal")).hide(),bus.$emit("mediaRenamed",t,a,o,e.newUrl)},error:function(e){$("#renameMediaModal-errors").empty();var t=JSON.parse(e.responseText).value;$('').text(t).appendTo($("#renameMediaModal-errors"))}});else bootstrap.Modal.getOrCreateInstance($("#renameMediaModal")).hide()}})),e&&(document.getElementById("mediaApp").style.display=""),$(document).trigger("mediaApp:ready")},error:function(e){console.error(e.responseText)}}))}function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function ownKeys(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function _objectSpread(e){for(var t=1;t\n \n
      \n \n \n
    \n \n '),props:{model:Object,selectedInMediaApp:Object,level:Number},data:function(){return{open:!1,children:null,parent:null,isHovered:!1,padding:0}},computed:{empty:function(){return!this.children||0==this.children.length},isSelected:function(){return this.selectedInMediaApp.name==this.model.name&&this.selectedInMediaApp.path==this.model.path},isRoot:function(){return""===this.model.path}},mounted:function(){0==this.isRoot&&this.isAncestorOfSelectedFolder()&&this.toggle(),this.padding=this.level<3?16:16+8*this.level},created:function(){var e=this;bus.$on("deleteFolder",(function(t){if(e.children){var i=e.children&&e.children.indexOf(t);i>-1&&(e.children.splice(i,1),bus.$emit("folderDeleted"))}})),bus.$on("addFolder",(function(t,i){e.model==t&&(null!==e.children&&e.children.push(i),i.parent=e.model,bus.$emit("folderAdded",i))}))},methods:{isAncestorOfSelectedFolder:function(){for(parentFolder=mediaApp.selectedFolder;parentFolder;){if(parentFolder.path==this.model.path)return!0;parentFolder=parentFolder.parent}return!1},toggle:function(){this.open=!this.open,this.open&&!this.children&&this.loadChildren()},select:function(){bus.$emit("folderSelected",this.model),this.loadChildren()},createFolder:function(){bus.$emit("createFolderRequested")},deleteFolder:function(){bus.$emit("deleteFolderRequested")},loadChildren:function(){var e=this;0==this.open&&(this.open=!0),$.ajax({url:$("#getFoldersUrl").val()+"?path="+encodeURIComponent(e.model.path),method:"GET",success:function(t){e.children=t,e.children.forEach((function(t){t.parent=e.model}))},error:function(e){emtpy=!1,console.error(e.responseText)}})},handleDragOver:function(e){this.isHovered=!0},handleDragLeave:function(e){this.isHovered=!1},moveMediaToFolder:function(e,t){this.isHovered=!1;var i=JSON.parse(t.dataTransfer.getData("mediaNames"));if(!(i.length<1)){var n=t.dataTransfer.getData("sourceFolder"),a=e.path;""===n&&(n="root"),""===a&&(a="root"),n!==a?confirmDialog(_objectSpread(_objectSpread({},$("#moveMedia").data()),{},{callback:function(e){e&&$.ajax({url:$("#moveMediaListUrl").val(),method:"POST",data:{__RequestVerificationToken:$("input[name='__RequestVerificationToken']").val(),mediaNames:i,sourceFolder:n,targetFolder:a},success:function(){bus.$emit("mediaListMoved")},error:function(e){console.error(e.responseText),bus.$emit("mediaListMoved",e.responseText)}})}})):alert($("#sameFolderMessage").val())}}}});var faIcons={image:"fa-regular fa-image",pdf:"fa-regular fa-file-pdf",word:"fa-regular fa-file-word",powerpoint:"fa-regular fa-file-powerpoint",excel:"fa-regular fa-file-excel",csv:"fa-regular fa-file",audio:"fa-regular fa-file-audio",video:"fa-regular fa-file-video",archive:"fa-regular fa-file-zipper",code:"fa-regular fa-file-code",text:"fa-regular fa-file-lines",file:"fa-regular fa-file"},faThumbnails={gif:faIcons.image,jpeg:faIcons.image,jpg:faIcons.image,png:faIcons.image,pdf:faIcons.pdf,doc:faIcons.word,docx:faIcons.word,ppt:faIcons.powerpoint,pptx:faIcons.powerpoint,xls:faIcons.excel,xlsx:faIcons.excel,csv:faIcons.csv,aac:faIcons.audio,mp3:faIcons.audio,ogg:faIcons.audio,avi:faIcons.video,flv:faIcons.video,mkv:faIcons.video,mp4:faIcons.video,webm:faIcons.video,gz:faIcons.archive,zip:faIcons.archive,css:faIcons.code,html:faIcons.code,js:faIcons.code,txt:faIcons.text};function getClassNameForExtension(e){return faThumbnails[e.toLowerCase()]||faIcons.file}function getExtensionForFilename(e){return e.slice(2+(e.lastIndexOf(".")-1>>>0))}function getClassNameForFilename(e){return getClassNameForExtension(getExtensionForFilename(e))}function initializeAttachedMediaField(e,t,i,n,a,o,r,s,l){var d,c=$(document.getElementById($(e).data("for"))).data("init"),u=$(e),m=u.attr("id");mediaFieldApps.push(d=new Vue({el:u.get(0),data:{mediaItems:[],selectedMedia:null,smallThumbs:!1,idPrefix:m,initialized:!1,allowMediaText:o,backupMediaText:"",allowAnchors:r,backupAnchor:null,mediaTextmodal:null,anchoringModal:null},created:function(){this.currentPrefs=JSON.parse(localStorage.getItem("mediaFieldPrefs"))},computed:{paths:{get:function(){var e=[];return this.initialized?(this.mediaItems.forEach((function(t){"not-found"!==t.mediaPath&&e.push({path:t.mediaPath,isRemoved:t.isRemoved,isNew:t.isNew,mediaText:t.mediaText,anchor:t.anchor,attachedFileName:t.attachedFileName})})),JSON.stringify(e)):JSON.stringify(c)},set:function(e){var t=this,i=e||[],a=$.Deferred(),o=[],r=0;i.forEach((function(e,i){o.push({name:" "+e.path,mime:"",mediaPath:"",anchor:e.anchor,attachedFileName:e.attachedFileName}),promise=$.when(a).done((function(){$.ajax({url:n+"?path="+encodeURIComponent(e.path),method:"GET",success:function(n){n.vuekey=n.name+i.toString(),n.mediaText=e.mediaText,n.anchor=e.anchor,n.attachedFileName=e.attachedFileName,o.splice(i,1,n),o.length===++r&&(o.forEach((function(e){t.mediaItems.push(e)})),t.initialized=!0)},error:function(n){console.log(JSON.stringify(n)),o.splice(i,1,{name:e.path,mime:"",mediaPath:"not-found",mediaText:"",anchor:{x:.5,y:.5},attachedFileName:e.attachedFileName}),o.length===++r&&(o.forEach((function(e){t.mediaItems.push(e)})),t.initialized=!0)}})}))})),a.resolve()}},fileSize:function(){return Math.round(this.selectedMedia.size/1024)},canAddMedia:function(){for(var e=[],t=0;t0&&a},thumbSize:function(){return this.smallThumbs?120:240},currentPrefs:{get:function(){return{smallThumbs:this.smallThumbs}},set:function(e){e&&(this.smallThumbs=e.smallThumbs)}}},mounted:function(){var e=this;e.paths=c,e.$on("selectAndDeleteMediaRequested",(function(t){e.selectAndDeleteMedia(t)})),e.$on("selectMediaRequested",(function(t){e.selectMedia(t)}));var n="#"+t,o=u.attr("id"),r=randomUUID();$(n).fileupload({limitConcurrentUploads:20,dropZone:$("#"+o),dataType:"json",url:i,maxChunkSize:l,add:function(t,i){var n,a=i.files.length;for(n=0;n0)for(var o=0;o1&&!1===a?(alert($("#onlyOneItemMessage").val()),d.mediaItems.push(i[0]),d.initialized=!0):(d.mediaItems=d.mediaItems.concat(i),d.initialized=!0)):alert(n)},error:function(e,t,i){console.log("Error on upload."),console.log(e),console.log(t),console.log(i)}}).on("fileuploadchunkbeforesend",(function(e,t){var i=t.files[0];t.blob=new File([t.blob],i.name,{type:i.type,lastModified:i.lastModified})}))},methods:{selectMedia:function(e){this.selectedMedia=e},getUniqueId:function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}))},removeSelected:function(e){if(this.selectedMedia){var t=this.mediaItems&&this.mediaItems.indexOf(this.selectedMedia);t>-1&&(this.mediaItems[t].isRemoved=!0,this.mediaItems.splice(t,1))}else 1===this.mediaItems.length&&(this.mediaItems[t].isRemoved=!0,this.mediaItems.splice(0,1));this.selectedMedia=null},showMediaTextModal:function(e){this.mediaTextModal=new bootstrap.Modal(this.$refs.mediaTextModal),this.mediaTextModal.show(),this.backupMediaText=this.selectedMedia.mediaText},cancelMediaTextModal:function(e){this.mediaTextModal.hide(),this.selectedMedia.mediaText=this.backupMediaText},showAnchorModal:function(e){this.anchoringModal=new bootstrap.Modal(this.$refs.anchoringModal),this.anchoringModal.show(),this.selectedMedia.anchor={x:this.selectedMedia.anchor.x,y:this.selectedMedia.anchor.y},this.backupAnchor=this.selectedMedia.anchor},cancelAnchoringModal:function(e){this.anchoringModal.hide(),this.selectedMedia.anchor=this.backupAnchor},resetAnchor:function(e){this.selectedMedia.anchor={x:.5,y:.5}},onAnchorDrop:function(e){var t=this.$refs.anchorImage;this.selectedMedia.anchor={x:e.offsetX/t.clientWidth,y:e.offsetY/t.clientHeight}},anchorLeft:function(){if(this.$refs.anchorImage&&this.$refs.modalBody&&this.selectedMedia){var e=(this.$refs.modalBody.clientWidth-this.$refs.anchorImage.clientWidth)/2,t=this.selectedMedia.anchor.x*this.$refs.anchorImage.clientWidth+e;return t<17?t=17:t-=8,t+"px"}return"0"},anchorTop:function(){if(this.$refs.anchorImage&&this.selectedMedia){var e=this.selectedMedia.anchor.y*this.$refs.anchorImage.clientHeight;return e<15?e=15:e+=5,e+"px"}return"0"},setAnchor:function(e){var t=this.$refs.anchorImage;this.selectedMedia.anchor={x:e.offsetX/t.clientWidth,y:e.offsetY/t.clientHeight}},addMediaFiles:function(e){e.length>1&&!1===a?(alert($("#onlyOneItemMessage").val()),d.mediaItems.push(e[0]),d.initialized=!0):(d.mediaItems=d.mediaItems.concat(e),d.initialized=!0)},selectAndDeleteMedia:function(e){var t=this;t.selectedMedia=e,setTimeout((function(){t.removeSelected()}),100)}},watch:{mediaItems:{deep:!0,handler:function(){setTimeout((function(){$(document).trigger("contentpreview:render")}),100)}},currentPrefs:function(e){localStorage.setItem("mediaFieldPrefs",JSON.stringify(e))}}}))}function initializeMediaField(e,t,i,n,a,o){if(null!==e){var r,s=$(document.getElementById($(e).data("for"))).data("init"),l=$(e),d=l.attr("id");t.addEventListener("hidden.bs.modal",(function(e){$("#mediaApp").appendTo("body"),$("#mediaApp").hide()})),mediaFieldApps.push(r=new Vue({el:l.get(0),data:{mediaItems:[],selectedMedia:null,smallThumbs:!1,idPrefix:d,initialized:!1,allowMediaText:a,backupMediaText:"",allowAnchors:o,backupAnchor:null,mediaTextModal:null,anchoringModal:null},created:function(){this.currentPrefs=JSON.parse(localStorage.getItem("mediaFieldPrefs"))},computed:{paths:{get:function(){var e=[];return this.initialized?(this.mediaItems.forEach((function(t){"not-found"!==t.mediaPath&&e.push({path:t.mediaPath,mediaText:t.mediaText,anchor:t.anchor})})),JSON.stringify(e)):JSON.stringify(s)},set:function(e){var t=this,n=e||[],a=$.Deferred(),o=[],r=0;n.forEach((function(e,n){o.push({name:" "+e.path,mime:"",mediaPath:""}),promise=$.when(a).done((function(){$.ajax({url:i+"?path="+encodeURIComponent(e.path),method:"GET",success:function(i){i.vuekey=i.name+n.toString(),i.mediaText=e.mediaText,i.anchor=e.anchor,o.splice(n,1,i),o.length===++r&&(o.forEach((function(e){t.mediaItems.push(e)})),t.initialized=!0)},error:function(i){console.log(i),o.splice(n,1,{name:e.path,mime:"",mediaPath:"not-found",mediaText:"",anchor:{x:0,y:0}}),o.length===++r&&(o.forEach((function(e){t.mediaItems.push(e)})),t.initialized=!0)}})}))})),a.resolve()}},fileSize:function(){return Math.round(this.selectedMedia.size/1024)},canAddMedia:function(){return 0===this.mediaItems.length||this.mediaItems.length>0&&n},thumbSize:function(){return this.smallThumbs?120:240},currentPrefs:{get:function(){return{smallThumbs:this.smallThumbs}},set:function(e){e&&(this.smallThumbs=e.smallThumbs)}}},mounted:function(){var e=this;e.paths=s,e.$on("selectAndDeleteMediaRequested",(function(t){e.selectAndDeleteMedia(t)})),e.$on("selectMediaRequested",(function(t){e.selectMedia(t)})),e.$on("filesUploaded",(function(t){e.addMediaFiles(t)}))},methods:{selectMedia:function(e){this.selectedMedia=e},showModal:function(e){var i=this;if(i.canAddMedia){$("#mediaApp").appendTo($(t).find(".modal-body")),$("#mediaApp").show();var n=new bootstrap.Modal(t);n.show(),$(t).find(".mediaFieldSelectButton").off("click").on("click",(function(e){return i.addMediaFiles(mediaApp.selectedMedias),mediaApp.selectedMedias=[],n.hide(),!0}))}},showMediaTextModal:function(e){this.mediaTextModal=new bootstrap.Modal(this.$refs.mediaTextModal),this.mediaTextModal.show(),this.backupMediaText=this.selectedMedia.mediaText},cancelMediaTextModal:function(e){this.mediaTextModal.hide(),this.selectedMedia.mediaText=this.backupMediaText},showAnchorModal:function(e){this.anchoringModal=new bootstrap.Modal(this.$refs.anchoringModal),this.anchoringModal.show(),this.selectedMedia.anchor={x:this.selectedMedia.anchor.x,y:this.selectedMedia.anchor.y},this.backupAnchor=this.selectedMedia.anchor},cancelAnchoringModal:function(e){this.anchoringModal.hide(),this.selectedMedia.anchor=this.backupAnchor},resetAnchor:function(e){this.selectedMedia.anchor={x:.5,y:.5}},onAnchorDrop:function(e){var t=this.$refs.anchorImage;this.selectedMedia.anchor={x:e.offsetX/t.clientWidth,y:e.offsetY/t.clientHeight}},anchorLeft:function(){if(this.$refs.anchorImage&&this.$refs.modalBody&&this.selectedMedia){var e=(this.$refs.modalBody.clientWidth-this.$refs.anchorImage.clientWidth)/2,t=this.selectedMedia.anchor.x*this.$refs.anchorImage.clientWidth+e,i=Math.round(this.$refs.modalBody.querySelector(".icon-media-anchor").clientWidth);return Number.isInteger(i)&&(t-=i/2),t+"px"}return"0"},anchorTop:function(){return this.$refs.anchorImage&&this.selectedMedia?this.selectedMedia.anchor.y*this.$refs.anchorImage.clientHeight+"px":"0"},setAnchor:function(e){var t=this.$refs.anchorImage;this.selectedMedia.anchor={x:e.offsetX/t.clientWidth,y:e.offsetY/t.clientHeight}},addMediaFiles:function(e){e.length>1&&!1===n?(alert($("#onlyOneItemMessage").val()),r.mediaItems.push(e[0]),r.initialized=!0):(r.mediaItems=r.mediaItems.concat(e),r.initialized=!0)},removeSelected:function(e){if(this.selectedMedia){var t=this.mediaItems&&this.mediaItems.indexOf(this.selectedMedia);t>-1&&this.mediaItems.splice(t,1)}else 1===this.mediaItems.length&&this.mediaItems.splice(0,1);this.selectedMedia=null},selectAndDeleteMedia:function(e){var t=this;t.selectedMedia=e,setTimeout((function(){t.removeSelected()}),100)}},watch:{mediaItems:{deep:!0,handler:function(){setTimeout((function(){$(document).trigger("contentpreview:render")}),100)}},currentPrefs:function(e){localStorage.setItem("mediaFieldPrefs",JSON.stringify(e))}}}))}}Vue.component("media-items-grid",{template:'\n
      \n
    1. \n
      \n \n \n
      \n
      \n \n \n \n {{ media.name }}\n
      \n
    2. \n
    \n ',data:function(){return{T:{}}},props:{filteredMediaItems:Array,selectedMedias:Array,thumbSize:Number},created:function(){this.T.editButton=$("#t-edit-button").val(),this.T.deleteButton=$("#t-delete-button").val()},methods:{isMediaSelected:function(e){return this.selectedMedias.some((function(t,i,n){return t.url.toLowerCase()===e.url.toLowerCase()}))},buildMediaUrl:function(e,t){return e+(-1==e.indexOf("?")?"?":"&")+"width="+t+"&height="+t},toggleSelectionOfMedia:function(e){bus.$emit("mediaToggleRequested",e)},renameMedia:function(e){bus.$emit("renameMediaRequested",e)},deleteMedia:function(e){bus.$emit("deleteMediaRequested",e)},dragStart:function(e,t){bus.$emit("mediaDragStartRequested",e,t)},getfontAwesomeClassNameForFileName:function(e,t){return getClassNameForFilename(e)+" "+t}}}),Vue.component("media-items-table",{template:'\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    {{ T.imageHeader }}\n {{ T.nameHeader }}\n \n \n {{ T.lastModifyHeader }} \n \n \n \n {{ T.sizeHeader }}\n \n \n \n \n {{ T.typeHeader }}\n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    {{ printDateTime(media.lastModify) }}
    \n
    \n
    {{ isNaN(media.size)? 0 : Math.round(media.size / 1024) }} KB
    \n
    \n
    {{ media.mime }}
    \n
    \n ',data:function(){return{T:{}}},props:{sortBy:String,sortAsc:Boolean,filteredMediaItems:Array,selectedMedias:Array,thumbSize:Number},created:function(){var e=this;e.T.imageHeader=$("#t-image-header").val(),e.T.nameHeader=$("#t-name-header").val(),e.T.lastModifyHeader=$("#t-lastModify-header").val(),e.T.sizeHeader=$("#t-size-header").val(),e.T.typeHeader=$("#t-type-header").val(),e.T.editButton=$("#t-edit-button").val(),e.T.deleteButton=$("#t-delete-button").val(),e.T.viewButton=$("#t-view-button").val()},methods:{isMediaSelected:function(e){return this.selectedMedias.some((function(t,i,n){return t.url.toLowerCase()===e.url.toLowerCase()}))},buildMediaUrl:function(e,t){return e+(-1==e.indexOf("?")?"?":"&")+"width="+t+"&height="+t},changeSort:function(e){bus.$emit("sortChangeRequested",e)},toggleSelectionOfMedia:function(e){bus.$emit("mediaToggleRequested",e)},renameMedia:function(e){bus.$emit("renameMediaRequested",e)},deleteMedia:function(e){bus.$emit("deleteMediaRequested",e)},dragStart:function(e,t){bus.$emit("mediaDragStartRequested",e,t)},printDateTime:function(e){return new Date(e).toLocaleString()},getfontAwesomeClassNameForFileName:function(e,t){return getClassNameForFilename(e)+" "+t}}}),Vue.component("pager",{template:'\n
    \n \n \n
    \n ',props:{sourceItems:Array},data:function(){return{pageSize:10,pageSizeOptions:[10,30,50,100],current:0,T:{}}},created:function(){var e=this;e.T.pagerFirstButton=$("#t-pager-first-button").val(),e.T.pagerPreviousButton=$("#t-pager-previous-button").val(),e.T.pagerNextButton=$("#t-pager-next-button").val(),e.T.pagerLastButton=$("#t-pager-last-button").val(),e.T.pagerPageSizeLabel=$("#t-pager-page-size-label").val(),e.T.pagerPageLabel=$("#t-pager-page-label").val(),e.T.pagerTotalLabel=$("#t-pager-total-label").val()},methods:{next:function(){this.current=this.current+1},previous:function(){this.current=this.current-1},goFirst:function(){this.current=0},goLast:function(){this.current=this.totalPages-1},goTo:function(e){this.current=e}},computed:{total:function(){return this.sourceItems?this.sourceItems.length:0},totalPages:function(){var e=Math.ceil(this.total/this.pageSize);return e>0?e:1},isLastPage:function(){return this.current+1>=this.totalPages},isFirstPage:function(){return 0===this.current},canDoNext:function(){return!this.isLastPage},canDoPrev:function(){return!this.isFirstPage},canDoFirst:function(){return!this.isFirstPage},canDoLast:function(){return!this.isLastPage},itemsInCurrentPage:function(){var e=this.pageSize*this.current,t=e+this.pageSize,i=this.sourceItems.slice(e,t);return bus.$emit("pagerEvent",i),i},pageLinks:function(){var e=[];e.push(this.current+1);var t=this.current>0?this.current:-1;e.unshift(t);var i=this.current>1?this.current-1:-1;e.unshift(i);var n=this.totalPages-this.current>1?this.current+2:-1;e.push(n);var a=this.totalPages-this.current>2?this.current+3:-1;return e.push(a),e}},watch:{sourceItems:function(){this.current=0},pageSize:function(){this.current=0}}}),Vue.component("sortIndicator",{template:'\n
    \n \n \n
    \n ',props:{colname:String,selectedcolname:String,asc:Boolean},computed:{isActive:function(){return this.colname.toLowerCase()==this.selectedcolname.toLowerCase()}}});var mediaFieldApps=[];Vue.component("mediaFieldThumbsContainer",{template:'
    {{T.noImages}}
  • {{ media.isNew ? media.name.substr(36) : media.name }}
    {{ T.mediaNotFound }} {{ T.discardWarning }}
    {{ media.name }}
  • ',data:function(){return{T:{}}},props:{mediaItems:Array,selectedMedia:Object,thumbSize:Number,idPrefix:String},created:function(){var e=this;e.T.mediaNotFound=$("#t-media-not-found").val(),e.T.discardWarning=$("#t-discard-warning").val(),e.T.noImages=$("#t-no-images").val()},methods:{selectAndDeleteMedia:function(e){this.$parent.$emit("selectAndDeleteMediaRequested",e)},selectMedia:function(e){this.$parent.$emit("selectMediaRequested",e)},buildMediaUrl:function(e,t){return e+(-1==e.indexOf("?")?"?":"&")+"width="+t+"&height="+t},getfontAwesomeClassNameForFileName:function(e,t){return getClassNameForFilename(e)+" "+t}}}),Vue.component("upload",{template:'

    {{ model.name }}

    Error: {{ model.errorMessage }}
    ',props:{model:Object,uploadInputId:String},mounted:function(){var e,t=this,i=document.getElementById(null!==(e=t.uploadInputId)&&void 0!==e?e:"fileupload");$(i).bind("fileuploadprogress",(function(e,i){i.files[0].name===t.model.name&&(t.model.percentage=parseInt(i.loaded/i.total*100,10))})),$(i).bind("fileuploaddone",(function(e,i){i.files[0].name===t.model.name&&(i.result.files[0].error?t.handleFailure(i.files[0].name,i.result.files[0].error):bus.$emit("removalRequest",t.model))})),$(i).bind("fileuploadfail",(function(e,i){i.files[0].name===t.model.name&&t.handleFailure(i.files[0].name,$("#t-error").val())}))},methods:{handleFailure:function(e,t){e===this.model.name&&(this.model.errorMessage=t,bus.$emit("ErrorOnUpload",this.model))},dismissWarning:function(){bus.$emit("removalRequest",this.model)}}}),Vue.component("uploadList",{template:'
    {{ T.uploads }} (Pending: {{ pendingCount }}) ( {{ T.errors }}: {{ errorCount }} / {{ T.clearErrors }} )
    ',data:function(){return{files:[],T:{},expanded:!1,pendingCount:0,errorCount:0}},props:{uploadInputId:String},created:function(){var e=this;e.T.uploads=$("#t-uploads").val(),e.T.errors=$("#t-errors").val(),e.T.clearErrors=$("#t-clear-errors").val()},computed:{fileCount:function(){return this.files.length}},mounted:function(){var e,t=this,i=document.getElementById(null!==(e=t.uploadInputId)&&void 0!==e?e:"fileupload");$(i).bind("fileuploadadd",(function(e,i){i.files&&i.files.forEach((function(e){t.files.some((function(t){return t.name==e.name}))?console.error("A file with the same name is already on the queue:"+e.name):t.files.push({name:e.name,percentage:0,errorMessage:""})}))})),bus.$on("removalRequest",(function(e){t.files.forEach((function(t,i,n){t.name==e.name&&n.splice(i,1)}))})),bus.$on("ErrorOnUpload",(function(e){t.updateCount()}))},methods:{updateCount:function(){this.errorCount=this.files.filter((function(e){return""!=e.errorMessage})).length,this.pendingCount=this.files.length-this.errorCount,this.files.length<1&&(this.expanded=!1)},clearErrors:function(){this.files=this.files.filter((function(e){return""==e.errorMessage}))}},watch:{files:function(){this.updateCount()}}}); +function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function ownKeys(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function _objectSpread(e){for(var t=1;t-1}));switch(e.sortBy){case"size":t.sort((function(t,i){return e.sortAsc?t.size-i.size:i.size-t.size}));break;case"mime":t.sort((function(t,i){return e.sortAsc?t.mime.toLowerCase().localeCompare(i.mime.toLowerCase()):i.mime.toLowerCase().localeCompare(t.mime.toLowerCase())}));break;case"lastModify":t.sort((function(t,i){return e.sortAsc?t.lastModify-i.lastModify:i.lastModify-t.lastModify}));break;default:t.sort((function(t,i){return e.sortAsc?t.name.toLowerCase().localeCompare(i.name.toLowerCase()):i.name.toLowerCase().localeCompare(t.name.toLowerCase())}))}return t},hiddenCount:function(){return this.mediaItems.length-this.filteredMediaItems.length},thumbSize:function(){return this.smallThumbs?100:240},currentPrefs:{get:function(){return{smallThumbs:this.smallThumbs,selectedFolder:this.selectedFolder,gridView:this.gridView}},set:function(e){e&&(this.smallThumbs=e.smallThumbs,this.selectedFolder=e.selectedFolder,this.gridView=e.gridView)}}},watch:{currentPrefs:function(e){localStorage.setItem("mediaApplicationPrefs",JSON.stringify(e))},selectedFolder:function(e){this.mediaFilter="",this.selectedFolder=e,this.loadFolder(e)}},mounted:function(){this.$refs.rootFolder.toggle()},methods:{uploadUrl:function(){if(!this.selectedFolder)return null;var e=$("#uploadFiles").val();return e+(-1==e.indexOf("?")?"?":"&")+"path="+encodeURIComponent(this.selectedFolder.path)},selectRoot:function(){this.selectedFolder=this.root},loadFolder:function(e){this.errors=[],this.selectedMedias=[];var t=this,i=$("#getMediaItemsUrl").val();console.log(e.path),$.ajax({url:i+(-1==i.indexOf("?")?"?":"&")+"path="+encodeURIComponent(e.path),method:"GET",success:function(e){e.forEach((function(e){e.open=!1})),t.mediaItems=e,t.selectedMedias=[],t.sortBy="",t.sortAsc=!0},error:function(i){console.log("error loading folder:"+e.path),t.selectRoot()}})},selectAll:function(){this.selectedMedias=[];for(var e=0;e-1&&(t.mediaItems.splice(n,1),bus.$emit("mediaDeleted",t.selectedMedias[i]))}t.selectedMedias=[]},error:function(e){console.error(e.responseText)}})}}}))},deleteMediaItem:function(e){var t=this;e&&confirmDialog(_objectSpread(_objectSpread({},$("#deleteMedia").data()),{},{callback:function(i){i&&$.ajax({url:$("#deleteMediaUrl").val()+"?path="+encodeURIComponent(e.mediaPath),method:"POST",data:{__RequestVerificationToken:$("input[name='__RequestVerificationToken']").val()},success:function(i){var n=t.mediaItems&&t.mediaItems.indexOf(e);n>-1&&(t.mediaItems.splice(n,1),bus.$emit("mediaDeleted",e))},error:function(e){console.error(e.responseText)}})}}))},handleDragStart:function(e,t){var i=[];this.selectedMedias.forEach((function(e){i.push(e.name)})),0==this.isMediaSelected(e)&&(i.push(e.name),this.selectedMedias.push(e)),t.dataTransfer.setData("mediaNames",JSON.stringify(i)),t.dataTransfer.setData("sourceFolder",this.selectedFolder.path),t.dataTransfer.setDragImage(this.dragDropThumbnail,10,10),t.dataTransfer.effectAllowed="move"},handleScrollWhileDrag:function(e){e.clientY<150&&window.scrollBy(0,-10),e.clientY>window.innerHeight-100&&window.scrollBy(0,10)},changeSort:function(e){this.sortBy==e?this.sortAsc=!this.sortAsc:(this.sortAsc=!0,this.sortBy=e)}}}),$("#create-folder-name").keypress((function(e){if(13==e.which)return $("#modalFooterOk").click(),!1})),$("#modalFooterOk").on("click",(function(e){var t=$("#create-folder-name").val();""!==t&&$.ajax({url:$("#createFolderUrl").val()+"?path="+encodeURIComponent(mediaApp.selectedFolder.path)+"&name="+encodeURIComponent(t),method:"POST",data:{__RequestVerificationToken:$("input[name='__RequestVerificationToken']").val()},success:function(e){bus.$emit("addFolder",mediaApp.selectedFolder,e),bootstrap.Modal.getOrCreateInstance($("#createFolderModal")).hide()},error:function(e){$("#createFolderModal-errors").empty();var t=JSON.parse(e.responseText).value;$('').text(t).appendTo($("#createFolderModal-errors"))}})})),$("#renameMediaModalFooterOk").on("click",(function(e){var t=$("#new-item-name").val(),i=$("#old-item-name").val();if(""!==t){var n=mediaApp.selectedFolder.path+"/";"/"===n&&(n="");var a=n+t,o=n+i;if(a.toLowerCase()!==o.toLowerCase())$.ajax({url:$("#renameMediaUrl").val()+"?oldPath="+encodeURIComponent(o)+"&newPath="+encodeURIComponent(a),method:"POST",data:{__RequestVerificationToken:$("input[name='__RequestVerificationToken']").val()},success:function(e){bootstrap.Modal.getOrCreateInstance($("#renameMediaModal")).hide(),bus.$emit("mediaRenamed",t,a,o,e.newUrl)},error:function(e){$("#renameMediaModal-errors").empty();var t=JSON.parse(e.responseText).value;$('').text(t).appendTo($("#renameMediaModal-errors"))}});else bootstrap.Modal.getOrCreateInstance($("#renameMediaModal")).hide()}})),e&&(document.getElementById("mediaApp").style.display=""),$(document).trigger("mediaApp:ready")},error:function(e){console.error(e.responseText)}}))}function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function ownKeys(e,t){var i=Object.keys(e);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(e);t&&(n=n.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),i.push.apply(i,n)}return i}function _objectSpread(e){for(var t=1;t\n \n
      \n \n \n
    \n \n '),props:{model:Object,selectedInMediaApp:Object,level:Number},data:function(){return{open:!1,children:null,parent:null,isHovered:!1,padding:0}},computed:{empty:function(){return!this.children||0==this.children.length},isSelected:function(){return this.selectedInMediaApp.name==this.model.name&&this.selectedInMediaApp.path==this.model.path},isRoot:function(){return""===this.model.path}},mounted:function(){0==this.isRoot&&this.isAncestorOfSelectedFolder()&&this.toggle(),this.padding=this.level<3?16:16+8*this.level},created:function(){var e=this;bus.$on("deleteFolder",(function(t){if(e.children){var i=e.children&&e.children.indexOf(t);i>-1&&(e.children.splice(i,1),bus.$emit("folderDeleted"))}})),bus.$on("addFolder",(function(t,i){e.model==t&&(null!==e.children&&e.children.push(i),i.parent=e.model,bus.$emit("folderAdded",i))}))},methods:{isAncestorOfSelectedFolder:function(){for(parentFolder=mediaApp.selectedFolder;parentFolder;){if(parentFolder.path==this.model.path)return!0;parentFolder=parentFolder.parent}return!1},toggle:function(){this.open=!this.open,this.open&&!this.children&&this.loadChildren()},select:function(){bus.$emit("folderSelected",this.model),this.loadChildren()},createFolder:function(){bus.$emit("createFolderRequested")},deleteFolder:function(){bus.$emit("deleteFolderRequested")},loadChildren:function(){var e=this;0==this.open&&(this.open=!0),$.ajax({url:$("#getFoldersUrl").val()+"?path="+encodeURIComponent(e.model.path),method:"GET",success:function(t){e.children=t,e.children.forEach((function(t){t.parent=e.model}))},error:function(e){emtpy=!1,console.error(e.responseText)}})},handleDragOver:function(e){this.isHovered=!0},handleDragLeave:function(e){this.isHovered=!1},moveMediaToFolder:function(e,t){this.isHovered=!1;var i=JSON.parse(t.dataTransfer.getData("mediaNames"));if(!(i.length<1)){var n=t.dataTransfer.getData("sourceFolder"),a=e.path;""===n&&(n="root"),""===a&&(a="root"),n!==a?confirmDialog(_objectSpread(_objectSpread({},$("#moveMedia").data()),{},{callback:function(e){e&&$.ajax({url:$("#moveMediaListUrl").val(),method:"POST",data:{__RequestVerificationToken:$("input[name='__RequestVerificationToken']").val(),mediaNames:i,sourceFolder:n,targetFolder:a},success:function(){bus.$emit("mediaListMoved")},error:function(e){console.error(e.responseText),bus.$emit("mediaListMoved",e.responseText)}})}})):alert($("#sameFolderMessage").val())}}}});var faIcons={image:"fa-regular fa-image",pdf:"fa-regular fa-file-pdf",word:"fa-regular fa-file-word",powerpoint:"fa-regular fa-file-powerpoint",excel:"fa-regular fa-file-excel",csv:"fa-regular fa-file",audio:"fa-regular fa-file-audio",video:"fa-regular fa-file-video",archive:"fa-regular fa-file-zipper",code:"fa-regular fa-file-code",text:"fa-regular fa-file-lines",file:"fa-regular fa-file"},faThumbnails={gif:faIcons.image,jpeg:faIcons.image,jpg:faIcons.image,png:faIcons.image,pdf:faIcons.pdf,doc:faIcons.word,docx:faIcons.word,ppt:faIcons.powerpoint,pptx:faIcons.powerpoint,xls:faIcons.excel,xlsx:faIcons.excel,csv:faIcons.csv,aac:faIcons.audio,mp3:faIcons.audio,ogg:faIcons.audio,avi:faIcons.video,flv:faIcons.video,mkv:faIcons.video,mp4:faIcons.video,webm:faIcons.video,gz:faIcons.archive,zip:faIcons.archive,css:faIcons.code,html:faIcons.code,js:faIcons.code,txt:faIcons.text};function getClassNameForExtension(e){return faThumbnails[e.toLowerCase()]||faIcons.file}function getExtensionForFilename(e){return e.slice(2+(e.lastIndexOf(".")-1>>>0))}function getClassNameForFilename(e){return getClassNameForExtension(getExtensionForFilename(e))}function initializeAttachedMediaField(e,t,i,n,a,o,r,s,l){var d,c=$(document.getElementById($(e).data("for"))).data("init"),u=$(e),m=u.attr("id");mediaFieldApps.push(d=new Vue({el:u.get(0),data:{mediaItems:[],selectedMedia:null,smallThumbs:!1,idPrefix:m,initialized:!1,allowMediaText:o,backupMediaText:"",allowAnchors:r,backupAnchor:null,mediaTextmodal:null,anchoringModal:null},created:function(){this.currentPrefs=JSON.parse(localStorage.getItem("mediaFieldPrefs"))},computed:{paths:{get:function(){var e=[];return this.initialized?(this.mediaItems.forEach((function(t){"not-found"!==t.mediaPath&&e.push({path:t.mediaPath,isRemoved:t.isRemoved,isNew:t.isNew,mediaText:t.mediaText,anchor:t.anchor,attachedFileName:t.attachedFileName})})),JSON.stringify(e)):JSON.stringify(c)},set:function(e){var t=this,i=e||[],a=$.Deferred(),o=[],r=0;i.forEach((function(e,i){o.push({name:" "+e.path,mime:"",mediaPath:"",anchor:e.anchor,attachedFileName:e.attachedFileName}),promise=$.when(a).done((function(){$.ajax({url:n+"?path="+encodeURIComponent(e.path),method:"GET",success:function(n){n.vuekey=n.name+i.toString(),n.mediaText=e.mediaText,n.anchor=e.anchor,n.attachedFileName=e.attachedFileName,o.splice(i,1,n),o.length===++r&&(o.forEach((function(e){t.mediaItems.push(e)})),t.initialized=!0)},error:function(n){console.log(JSON.stringify(n)),o.splice(i,1,{name:e.path,mime:"",mediaPath:"not-found",mediaText:"",anchor:{x:.5,y:.5},attachedFileName:e.attachedFileName}),o.length===++r&&(o.forEach((function(e){t.mediaItems.push(e)})),t.initialized=!0)}})}))})),a.resolve()}},fileSize:function(){return Math.round(this.selectedMedia.size/1024)},canAddMedia:function(){for(var e=[],t=0;t0&&a},thumbSize:function(){return this.smallThumbs?120:240},currentPrefs:{get:function(){return{smallThumbs:this.smallThumbs}},set:function(e){e&&(this.smallThumbs=e.smallThumbs)}}},mounted:function(){var e=this;e.paths=c,e.$on("selectAndDeleteMediaRequested",(function(t){e.selectAndDeleteMedia(t)})),e.$on("selectMediaRequested",(function(t){e.selectMedia(t)}));var n="#"+t,o=u.attr("id"),r=randomUUID();$(n).fileupload({limitConcurrentUploads:20,dropZone:$("#"+o),dataType:"json",url:i,maxChunkSize:l,add:function(t,i){var n,a=i.files.length;for(n=0;n0)for(var o=0;o1&&!1===a?(alert($("#onlyOneItemMessage").val()),d.mediaItems.push(i[0]),d.initialized=!0):(d.mediaItems=d.mediaItems.concat(i),d.initialized=!0)):alert(n)},error:function(e,t,i){console.log("Error on upload."),console.log(e),console.log(t),console.log(i)}}).on("fileuploadchunkbeforesend",(function(e,t){var i=t.files[0];t.blob=new File([t.blob],i.name,{type:i.type,lastModified:i.lastModified})}))},methods:{selectMedia:function(e){this.selectedMedia=e},getUniqueId:function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}))},removeSelected:function(e){if(this.selectedMedia){var t=this.mediaItems&&this.mediaItems.indexOf(this.selectedMedia);t>-1&&(this.mediaItems[t].isRemoved=!0,this.mediaItems.splice(t,1))}else 1===this.mediaItems.length&&(this.mediaItems[t].isRemoved=!0,this.mediaItems.splice(0,1));this.selectedMedia=null},showMediaTextModal:function(e){this.mediaTextModal=new bootstrap.Modal(this.$refs.mediaTextModal),this.mediaTextModal.show(),this.backupMediaText=this.selectedMedia.mediaText},cancelMediaTextModal:function(e){this.mediaTextModal.hide(),this.selectedMedia.mediaText=this.backupMediaText},showAnchorModal:function(e){this.anchoringModal=new bootstrap.Modal(this.$refs.anchoringModal),this.anchoringModal.show(),this.selectedMedia.anchor={x:this.selectedMedia.anchor.x,y:this.selectedMedia.anchor.y},this.backupAnchor=this.selectedMedia.anchor},cancelAnchoringModal:function(e){this.anchoringModal.hide(),this.selectedMedia.anchor=this.backupAnchor},resetAnchor:function(e){this.selectedMedia.anchor={x:.5,y:.5}},onAnchorDrop:function(e){var t=this.$refs.anchorImage;this.selectedMedia.anchor={x:e.offsetX/t.clientWidth,y:e.offsetY/t.clientHeight}},anchorLeft:function(){if(this.$refs.anchorImage&&this.$refs.modalBody&&this.selectedMedia){var e=(this.$refs.modalBody.clientWidth-this.$refs.anchorImage.clientWidth)/2,t=this.selectedMedia.anchor.x*this.$refs.anchorImage.clientWidth+e;return t<17?t=17:t-=8,t+"px"}return"0"},anchorTop:function(){if(this.$refs.anchorImage&&this.selectedMedia){var e=this.selectedMedia.anchor.y*this.$refs.anchorImage.clientHeight;return e<15?e=15:e+=5,e+"px"}return"0"},setAnchor:function(e){var t=this.$refs.anchorImage;this.selectedMedia.anchor={x:e.offsetX/t.clientWidth,y:e.offsetY/t.clientHeight}},addMediaFiles:function(e){e.length>1&&!1===a?(alert($("#onlyOneItemMessage").val()),d.mediaItems.push(e[0]),d.initialized=!0):(d.mediaItems=d.mediaItems.concat(e),d.initialized=!0)},selectAndDeleteMedia:function(e){var t=this;t.selectedMedia=e,setTimeout((function(){t.removeSelected()}),100)}},watch:{mediaItems:{deep:!0,handler:function(){setTimeout((function(){$(document).trigger("contentpreview:render")}),100)}},currentPrefs:function(e){localStorage.setItem("mediaFieldPrefs",JSON.stringify(e))}}}))}function initializeMediaField(e,t,i,n,a,o){if(null!==e){var r,s=$(document.getElementById($(e).data("for"))).data("init"),l=$(e),d=l.attr("id");t.addEventListener("hidden.bs.modal",(function(e){$("#mediaApp").appendTo("body"),$("#mediaApp").hide()})),mediaFieldApps.push(r=new Vue({el:l.get(0),data:{mediaItems:[],selectedMedia:null,smallThumbs:!1,idPrefix:d,initialized:!1,allowMediaText:a,backupMediaText:"",allowAnchors:o,backupAnchor:null,mediaTextModal:null,anchoringModal:null},created:function(){this.currentPrefs=JSON.parse(localStorage.getItem("mediaFieldPrefs"))},computed:{paths:{get:function(){var e=[];return this.initialized?(this.mediaItems.forEach((function(t){"not-found"!==t.mediaPath&&e.push({path:t.mediaPath,mediaText:t.mediaText,anchor:t.anchor})})),JSON.stringify(e)):JSON.stringify(s)},set:function(e){var t=this,n=e||[],a=$.Deferred(),o=[],r=0;n.forEach((function(e,n){o.push({name:" "+e.path,mime:"",mediaPath:""}),promise=$.when(a).done((function(){$.ajax({url:i+"?path="+encodeURIComponent(e.path),method:"GET",success:function(i){i.vuekey=i.name+n.toString(),i.mediaText=e.mediaText,i.anchor=e.anchor,o.splice(n,1,i),o.length===++r&&(o.forEach((function(e){t.mediaItems.push(e)})),t.initialized=!0)},error:function(i){console.log(i),o.splice(n,1,{name:e.path,mime:"",mediaPath:"not-found",mediaText:"",anchor:{x:0,y:0}}),o.length===++r&&(o.forEach((function(e){t.mediaItems.push(e)})),t.initialized=!0)}})}))})),a.resolve()}},fileSize:function(){return Math.round(this.selectedMedia.size/1024)},canAddMedia:function(){return 0===this.mediaItems.length||this.mediaItems.length>0&&n},thumbSize:function(){return this.smallThumbs?120:240},currentPrefs:{get:function(){return{smallThumbs:this.smallThumbs}},set:function(e){e&&(this.smallThumbs=e.smallThumbs)}}},mounted:function(){var e=this;e.paths=s,e.$on("selectAndDeleteMediaRequested",(function(t){e.selectAndDeleteMedia(t)})),e.$on("selectMediaRequested",(function(t){e.selectMedia(t)})),e.$on("filesUploaded",(function(t){e.addMediaFiles(t)}))},methods:{selectMedia:function(e){this.selectedMedia=e},showModal:function(e){var i=this;if(i.canAddMedia){$("#mediaApp").appendTo($(t).find(".modal-body")),$("#mediaApp").show();var n=new bootstrap.Modal(t);n.show(),$(t).find(".mediaFieldSelectButton").off("click").on("click",(function(e){return i.addMediaFiles(mediaApp.selectedMedias),mediaApp.selectedMedias=[],n.hide(),!0}))}},showMediaTextModal:function(e){this.mediaTextModal=new bootstrap.Modal(this.$refs.mediaTextModal),this.mediaTextModal.show(),this.backupMediaText=this.selectedMedia.mediaText},cancelMediaTextModal:function(e){this.mediaTextModal.hide(),this.selectedMedia.mediaText=this.backupMediaText},showAnchorModal:function(e){this.anchoringModal=new bootstrap.Modal(this.$refs.anchoringModal),this.anchoringModal.show(),this.selectedMedia.anchor={x:this.selectedMedia.anchor.x,y:this.selectedMedia.anchor.y},this.backupAnchor=this.selectedMedia.anchor},cancelAnchoringModal:function(e){this.anchoringModal.hide(),this.selectedMedia.anchor=this.backupAnchor},resetAnchor:function(e){this.selectedMedia.anchor={x:.5,y:.5}},onAnchorDrop:function(e){var t=this.$refs.anchorImage;this.selectedMedia.anchor={x:e.offsetX/t.clientWidth,y:e.offsetY/t.clientHeight}},anchorLeft:function(){if(this.$refs.anchorImage&&this.$refs.modalBody&&this.selectedMedia){var e=(this.$refs.modalBody.clientWidth-this.$refs.anchorImage.clientWidth)/2,t=this.selectedMedia.anchor.x*this.$refs.anchorImage.clientWidth+e,i=Math.round(this.$refs.modalBody.querySelector(".icon-media-anchor").clientWidth);return Number.isInteger(i)&&(t-=i/2),t+"px"}return"0"},anchorTop:function(){return this.$refs.anchorImage&&this.selectedMedia?this.selectedMedia.anchor.y*this.$refs.anchorImage.clientHeight+"px":"0"},setAnchor:function(e){var t=this.$refs.anchorImage;this.selectedMedia.anchor={x:e.offsetX/t.clientWidth,y:e.offsetY/t.clientHeight}},addMediaFiles:function(e){e.length>1&&!1===n?(alert($("#onlyOneItemMessage").val()),r.mediaItems.push(e[0]),r.initialized=!0):(r.mediaItems=r.mediaItems.concat(e),r.initialized=!0)},removeSelected:function(e){if(this.selectedMedia){var t=this.mediaItems&&this.mediaItems.indexOf(this.selectedMedia);t>-1&&this.mediaItems.splice(t,1)}else 1===this.mediaItems.length&&this.mediaItems.splice(0,1);this.selectedMedia=null},selectAndDeleteMedia:function(e){var t=this;t.selectedMedia=e,setTimeout((function(){t.removeSelected()}),100)}},watch:{mediaItems:{deep:!0,handler:function(){setTimeout((function(){$(document).trigger("contentpreview:render")}),100)}},currentPrefs:function(e){localStorage.setItem("mediaFieldPrefs",JSON.stringify(e))}}}))}}Vue.component("media-items-grid",{template:'\n
      \n
    1. \n
      \n \n \n
      \n
      \n \n \n \n {{ media.name }}\n
      \n
    2. \n
    \n ',data:function(){return{T:{}}},props:{filteredMediaItems:Array,selectedMedias:Array,thumbSize:Number},created:function(){this.T.editButton=$("#t-edit-button").val(),this.T.deleteButton=$("#t-delete-button").val()},methods:{isMediaSelected:function(e){return this.selectedMedias.some((function(t,i,n){return t.url.toLowerCase()===e.url.toLowerCase()}))},buildMediaUrl:function(e,t){return e+(-1==e.indexOf("?")?"?":"&")+"width="+t+"&height="+t},toggleSelectionOfMedia:function(e){bus.$emit("mediaToggleRequested",e)},renameMedia:function(e){bus.$emit("renameMediaRequested",e)},deleteMedia:function(e){bus.$emit("deleteMediaRequested",e)},dragStart:function(e,t){bus.$emit("mediaDragStartRequested",e,t)},getfontAwesomeClassNameForFileName:function(e,t){return getClassNameForFilename(e)+" "+t}}}),Vue.component("media-items-table",{template:'\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
    {{ T.imageHeader }}\n {{ T.nameHeader }}\n \n \n {{ T.lastModifyHeader }} \n \n \n \n {{ T.sizeHeader }}\n \n \n \n \n {{ T.typeHeader }}\n \n \n
    \n
    \n \n \n
    \n
    \n \n \n
    {{ printDateTime(media.lastModify) }}
    \n
    \n
    {{ isNaN(media.size)? 0 : Math.round(media.size / 1024) }} KB
    \n
    \n
    {{ media.mime }}
    \n
    \n ',data:function(){return{T:{}}},props:{sortBy:String,sortAsc:Boolean,filteredMediaItems:Array,selectedMedias:Array,thumbSize:Number},created:function(){var e=this;e.T.imageHeader=$("#t-image-header").val(),e.T.nameHeader=$("#t-name-header").val(),e.T.lastModifyHeader=$("#t-lastModify-header").val(),e.T.sizeHeader=$("#t-size-header").val(),e.T.typeHeader=$("#t-type-header").val(),e.T.editButton=$("#t-edit-button").val(),e.T.deleteButton=$("#t-delete-button").val(),e.T.viewButton=$("#t-view-button").val()},methods:{isMediaSelected:function(e){return this.selectedMedias.some((function(t,i,n){return t.url.toLowerCase()===e.url.toLowerCase()}))},buildMediaUrl:function(e,t){return e+(-1==e.indexOf("?")?"?":"&")+"width="+t+"&height="+t},changeSort:function(e){bus.$emit("sortChangeRequested",e)},toggleSelectionOfMedia:function(e){bus.$emit("mediaToggleRequested",e)},renameMedia:function(e){bus.$emit("renameMediaRequested",e)},deleteMedia:function(e){bus.$emit("deleteMediaRequested",e)},dragStart:function(e,t){bus.$emit("mediaDragStartRequested",e,t)},printDateTime:function(e){return new Date(e).toLocaleString()},getfontAwesomeClassNameForFileName:function(e,t){return getClassNameForFilename(e)+" "+t}}}),Vue.component("pager",{template:'\n
    \n \n \n
    \n ',props:{sourceItems:Array},data:function(){return{pageSize:10,pageSizeOptions:[10,30,50,100],current:0,T:{}}},created:function(){var e=this;e.T.pagerFirstButton=$("#t-pager-first-button").val(),e.T.pagerPreviousButton=$("#t-pager-previous-button").val(),e.T.pagerNextButton=$("#t-pager-next-button").val(),e.T.pagerLastButton=$("#t-pager-last-button").val(),e.T.pagerPageSizeLabel=$("#t-pager-page-size-label").val(),e.T.pagerPageLabel=$("#t-pager-page-label").val(),e.T.pagerTotalLabel=$("#t-pager-total-label").val()},methods:{next:function(){this.current=this.current+1},previous:function(){this.current=this.current-1},goFirst:function(){this.current=0},goLast:function(){this.current=this.totalPages-1},goTo:function(e){this.current=e}},computed:{total:function(){return this.sourceItems?this.sourceItems.length:0},totalPages:function(){var e=Math.ceil(this.total/this.pageSize);return e>0?e:1},isLastPage:function(){return this.current+1>=this.totalPages},isFirstPage:function(){return 0===this.current},canDoNext:function(){return!this.isLastPage},canDoPrev:function(){return!this.isFirstPage},canDoFirst:function(){return!this.isFirstPage},canDoLast:function(){return!this.isLastPage},itemsInCurrentPage:function(){var e=this.pageSize*this.current,t=e+this.pageSize,i=this.sourceItems.slice(e,t);return bus.$emit("pagerEvent",i),i},pageLinks:function(){var e=[];e.push(this.current+1);var t=this.current>0?this.current:-1;e.unshift(t);var i=this.current>1?this.current-1:-1;e.unshift(i);var n=this.totalPages-this.current>1?this.current+2:-1;e.push(n);var a=this.totalPages-this.current>2?this.current+3:-1;return e.push(a),e}},watch:{sourceItems:function(){this.current=0},pageSize:function(){this.current=0}}}),Vue.component("sortIndicator",{template:'\n
    \n \n \n
    \n ',props:{colname:String,selectedcolname:String,asc:Boolean},computed:{isActive:function(){return this.colname.toLowerCase()==this.selectedcolname.toLowerCase()}}}),Vue.component("mediaFieldThumbsContainer",{template:'
    {{T.noImages}}
  • {{ media.isNew ? media.name.substr(36) : media.name }}
    {{ T.mediaNotFound }} {{ T.discardWarning }}
    {{ media.name }}
  • ',data:function(){return{T:{}}},props:{mediaItems:Array,selectedMedia:Object,thumbSize:Number,idPrefix:String},created:function(){var e=this;e.T.mediaNotFound=$("#t-media-not-found").val(),e.T.discardWarning=$("#t-discard-warning").val(),e.T.noImages=$("#t-no-images").val()},methods:{selectAndDeleteMedia:function(e){this.$parent.$emit("selectAndDeleteMediaRequested",e)},selectMedia:function(e){this.$parent.$emit("selectMediaRequested",e)},buildMediaUrl:function(e,t){return e+(-1==e.indexOf("?")?"?":"&")+"width="+t+"&height="+t},getfontAwesomeClassNameForFileName:function(e,t){return getClassNameForFilename(e)+" "+t}}});var mediaFieldApps=[];function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function randomUUID(){return"object"===("undefined"==typeof crypto?"undefined":_typeof(crypto))&&"function"==typeof crypto.randomUUID?crypto.randomUUID():([1e7]+-1e3+-4e3+-8e3+-1e11).replace(/[018]/g,(function(e){return(e^crypto.getRandomValues(new Uint8Array(1))[0]&15>>e/4).toString(16)}))}function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}function _typeof(e){return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},_typeof(e)}Vue.component("upload",{template:'

    {{ model.name }}

    Error: {{ model.errorMessage }}
    ',props:{model:Object,uploadInputId:String},mounted:function(){var e,t=this,i=document.getElementById(null!==(e=t.uploadInputId)&&void 0!==e?e:"fileupload");$(i).bind("fileuploadprogress",(function(e,i){i.files[0].name===t.model.name&&(t.model.percentage=parseInt(i.loaded/i.total*100,10))})),$(i).bind("fileuploaddone",(function(e,i){i.files[0].name===t.model.name&&(i.result.files[0].error?t.handleFailure(i.files[0].name,i.result.files[0].error):bus.$emit("removalRequest",t.model))})),$(i).bind("fileuploadfail",(function(e,i){i.files[0].name===t.model.name&&t.handleFailure(i.files[0].name,$("#t-error").val())}))},methods:{handleFailure:function(e,t){e===this.model.name&&(this.model.errorMessage=t,bus.$emit("ErrorOnUpload",this.model))},dismissWarning:function(){bus.$emit("removalRequest",this.model)}}}),Vue.component("uploadList",{template:'
    {{ T.uploads }} (Pending: {{ pendingCount }}) ( {{ T.errors }}: {{ errorCount }} / {{ T.clearErrors }} )
    ',data:function(){return{files:[],T:{},expanded:!1,pendingCount:0,errorCount:0}},props:{uploadInputId:String},created:function(){var e=this;e.T.uploads=$("#t-uploads").val(),e.T.errors=$("#t-errors").val(),e.T.clearErrors=$("#t-clear-errors").val()},computed:{fileCount:function(){return this.files.length}},mounted:function(){var e,t=this,i=document.getElementById(null!==(e=t.uploadInputId)&&void 0!==e?e:"fileupload");$(i).bind("fileuploadadd",(function(e,i){i.files&&i.files.forEach((function(e){t.files.some((function(t){return t.name==e.name}))?console.error("A file with the same name is already on the queue:"+e.name):t.files.push({name:e.name,percentage:0,errorMessage:""})}))})),bus.$on("removalRequest",(function(e){t.files.forEach((function(t,i,n){t.name==e.name&&n.splice(i,1)}))})),bus.$on("ErrorOnUpload",(function(e){t.updateCount()}))},methods:{updateCount:function(){this.errorCount=this.files.filter((function(e){return""!=e.errorMessage})).length,this.pendingCount=this.files.length-this.errorCount,this.files.length<1&&(this.expanded=!1)},clearErrors:function(){this.files=this.files.filter((function(e){return""==e.errorMessage}))}},watch:{files:function(){this.updateCount()}}}),function(e){"use strict";"function"==typeof define&&define.amd?define(["jquery","jquery-ui/ui/widget"],e):"object"===("undefined"==typeof exports?"undefined":_typeof(exports))?e(require("jquery"),require("./vendor/jquery.ui.widget")):e(window.jQuery)}((function(e){"use strict";function t(t){var i="dragover"===t;return function(n){n.dataTransfer=n.originalEvent&&n.originalEvent.dataTransfer;var a=n.dataTransfer;a&&-1!==e.inArray("Files",a.types)&&!1!==this._trigger(t,e.Event(t,{delegatedEvent:n}))&&(n.preventDefault(),i&&(a.dropEffect="copy"))}}var i;e.support.fileInput=!(new RegExp("(Android (1\\.[0156]|2\\.[01]))|(Windows Phone (OS 7|8\\.0))|(XBLWP)|(ZuneWP)|(WPDesktop)|(w(eb)?OSBrowser)|(webOS)|(Kindle/(1\\.0|2\\.[05]|3\\.0))").test(window.navigator.userAgent)||e('').prop("disabled")),e.support.xhrFileUpload=!(!window.ProgressEvent||!window.FileReader),e.support.xhrFormDataFileUpload=!!window.FormData,e.support.blobSlice=window.Blob&&(Blob.prototype.slice||Blob.prototype.webkitSlice||Blob.prototype.mozSlice),e.widget("blueimp.fileupload",{options:{dropZone:e(document),pasteZone:void 0,fileInput:void 0,replaceFileInput:!0,paramName:void 0,singleFileUploads:!0,limitMultiFileUploads:void 0,limitMultiFileUploadSize:void 0,limitMultiFileUploadSizeOverhead:512,sequentialUploads:!1,limitConcurrentUploads:void 0,forceIframeTransport:!1,redirect:void 0,redirectParamName:void 0,postMessage:void 0,multipart:!0,maxChunkSize:void 0,uploadedBytes:void 0,recalculateProgress:!0,progressInterval:100,bitrateInterval:500,autoUpload:!0,uniqueFilenames:void 0,messages:{uploadedBytes:"Uploaded bytes exceed file size"},i18n:function(t,i){return t=this.messages[t]||t.toString(),i&&e.each(i,(function(e,i){t=t.replace("{"+e+"}",i)})),t},formData:function(e){return e.serializeArray()},add:function(t,i){if(t.isDefaultPrevented())return!1;(i.autoUpload||!1!==i.autoUpload&&e(this).fileupload("option","autoUpload"))&&i.process().done((function(){i.submit()}))},processData:!1,contentType:!1,cache:!1,timeout:0},_promisePipe:(i=e.fn.jquery.split("."),Number(i[0])>1||Number(i[1])>7?"then":"pipe"),_specialOptions:["fileInput","dropZone","pasteZone","multipart","forceIframeTransport"],_blobSlice:e.support.blobSlice&&function(){return(this.slice||this.webkitSlice||this.mozSlice).apply(this,arguments)},_BitrateTimer:function(){this.timestamp=Date.now?Date.now():(new Date).getTime(),this.loaded=0,this.bitrate=0,this.getBitrate=function(e,t,i){var n=e-this.timestamp;return(!this.bitrate||!i||n>i)&&(this.bitrate=(t-this.loaded)*(1e3/n)*8,this.loaded=t,this.timestamp=e),this.bitrate}},_isXHRUpload:function(t){return!t.forceIframeTransport&&(!t.multipart&&e.support.xhrFileUpload||e.support.xhrFormDataFileUpload)},_getFormData:function(t){var i;return"function"===e.type(t.formData)?t.formData(t.form):e.isArray(t.formData)?t.formData:"object"===e.type(t.formData)?(i=[],e.each(t.formData,(function(e,t){i.push({name:e,value:t})})),i):[]},_getTotal:function(t){var i=0;return e.each(t,(function(e,t){i+=t.size||1})),i},_initProgressObject:function(t){var i={loaded:0,total:0,bitrate:0};t._progress?e.extend(t._progress,i):t._progress=i},_initResponseObject:function(e){var t;if(e._response)for(t in e._response)Object.prototype.hasOwnProperty.call(e._response,t)&&delete e._response[t];else e._response={}},_onProgress:function(t,i){if(t.lengthComputable){var n,a=Date.now?Date.now():(new Date).getTime();if(i._time&&i.progressInterval&&a-i._time").prop("href",t.url).prop("host");t.dataType="iframe "+(t.dataType||""),t.formData=this._getFormData(t),t.redirect&&i&&i!==location.host&&t.formData.push({name:t.redirectParamName||"redirect",value:t.redirect})},_initDataSettings:function(e){this._isXHRUpload(e)?(this._chunkedUpload(e,!0)||(e.data||this._initXHRData(e),this._initProgressListener(e)),e.postMessage&&(e.dataType="postmessage "+(e.dataType||""))):this._initIframeSettings(e)},_getParamName:function(t){var i=e(t.fileInput),n=t.paramName;return n?e.isArray(n)||(n=[n]):(n=[],i.each((function(){for(var t=e(this),i=t.prop("name")||"files[]",a=(t.prop("files")||[1]).length;a;)n.push(i),a-=1})),n.length||(n=[i.prop("name")||"files[]"])),n},_initFormSettings:function(t){t.form&&t.form.length||(t.form=e(t.fileInput.prop("form")),t.form.length||(t.form=e(this.options.fileInput.prop("form")))),t.paramName=this._getParamName(t),t.url||(t.url=t.form.prop("action")||location.href),t.type=(t.type||"string"===e.type(t.form.prop("method"))&&t.form.prop("method")||"").toUpperCase(),"POST"!==t.type&&"PUT"!==t.type&&"PATCH"!==t.type&&(t.type="POST"),t.formAcceptCharset||(t.formAcceptCharset=t.form.attr("accept-charset"))},_getAJAXSettings:function(t){var i=e.extend({},this.options,t);return this._initFormSettings(i),this._initDataSettings(i),i},_getDeferredState:function(e){return e.state?e.state():e.isResolved()?"resolved":e.isRejected()?"rejected":"pending"},_enhancePromise:function(e){return e.success=e.done,e.error=e.fail,e.complete=e.always,e},_getXHRPromise:function(t,i,n){var a=e.Deferred(),o=a.promise();return i=i||this.options.context||o,!0===t?a.resolveWith(i,n):!1===t&&a.rejectWith(i,n),o.abort=a.promise,this._enhancePromise(o)},_addConvenienceMethods:function(t,i){var n=this,a=function(t){return e.Deferred().resolveWith(n,t).promise()};i.process=function(t,o){return(t||o)&&(i._processQueue=this._processQueue=(this._processQueue||a([this]))[n._promisePipe]((function(){return i.errorThrown?e.Deferred().rejectWith(n,[i]).promise():a(arguments)}))[n._promisePipe](t,o)),this._processQueue||a([this])},i.submit=function(){return"pending"!==this.state()&&(i.jqXHR=this.jqXHR=!1!==n._trigger("submit",e.Event("submit",{delegatedEvent:t}),this)&&n._onSend(t,this)),this.jqXHR||n._getXHRPromise()},i.abort=function(){return this.jqXHR?this.jqXHR.abort():(this.errorThrown="abort",n._trigger("fail",null,this),n._getXHRPromise(!1))},i.state=function(){return this.jqXHR?n._getDeferredState(this.jqXHR):this._processQueue?n._getDeferredState(this._processQueue):void 0},i.processing=function(){return!this.jqXHR&&this._processQueue&&"pending"===n._getDeferredState(this._processQueue)},i.progress=function(){return this._progress},i.response=function(){return this._response}},_getUploadedBytes:function(e){var t=e.getResponseHeader("Range"),i=t&&t.split("-"),n=i&&i.length>1&&parseInt(i[1],10);return n&&n+1},_chunkedUpload:function(t,i){t.uploadedBytes=t.uploadedBytes||0;var n,a,o=this,r=t.files[0],s=r.size,l=t.uploadedBytes,d=t.maxChunkSize||s,c=this._blobSlice,u=e.Deferred(),m=u.promise();return!(!(this._isXHRUpload(t)&&c&&(l||("function"===e.type(d)?d(t):d)=s?(r.error=t.i18n("uploadedBytes"),this._getXHRPromise(!1,t.context,[null,"error",r.error])):(a=function(){var i=e.extend({},t),m=i._progress.loaded;i.blob=c.call(r,l,l+("function"===e.type(d)?d(i):d),r.type),i.chunkSize=i.blob.size,i.contentRange="bytes "+l+"-"+(l+i.chunkSize-1)+"/"+s,o._trigger("chunkbeforesend",null,i),o._initXHRData(i),o._initProgressListener(i),n=(!1!==o._trigger("chunksend",null,i)&&e.ajax(i)||o._getXHRPromise(!1,i.context)).done((function(n,r,d){l=o._getUploadedBytes(d)||l+i.chunkSize,m+i.chunkSize-i._progress.loaded&&o._onProgress(e.Event("progress",{lengthComputable:!0,loaded:l-i.uploadedBytes,total:l-i.uploadedBytes}),i),t.uploadedBytes=i.uploadedBytes=l,i.result=n,i.textStatus=r,i.jqXHR=d,o._trigger("chunkdone",null,i),o._trigger("chunkalways",null,i),ls._sending)for(var n=s._slots.shift();n;){if("pending"===s._getDeferredState(n)){n.resolve();break}n=s._slots.shift()}0===s._active&&s._trigger("stop")}))};return this._beforeSend(t,l),this.options.sequentialUploads||this.options.limitConcurrentUploads&&this.options.limitConcurrentUploads<=this._sending?(this.options.limitConcurrentUploads>1?(o=e.Deferred(),this._slots.push(o),r=o[s._promisePipe](d)):(this._sequence=this._sequence[s._promisePipe](d,d),r=this._sequence),r.abort=function(){return a=[void 0,"abort","abort"],n?n.abort():(o&&o.rejectWith(l.context,a),d())},this._enhancePromise(r)):d()},_onAdd:function(t,i){var n,a,o,r,s=this,l=!0,d=e.extend({},this.options,i),c=i.files,u=c.length,m=d.limitMultiFileUploads,p=d.limitMultiFileUploadSize,f=d.limitMultiFileUploadSizeOverhead,h=0,g=this._getParamName(d),v=0;if(!u)return!1;if(p&&void 0===c[0].size&&(p=void 0),(d.singleFileUploads||m||p)&&this._isXHRUpload(d))if(d.singleFileUploads||p||!m)if(!d.singleFileUploads&&p)for(o=[],n=[],r=0;rp||m&&r+1-v>=m)&&(o.push(c.slice(v,r+1)),(a=g.slice(v,r+1)).length||(a=g),n.push(a),v=r+1,h=0);else n=g;else for(o=[],n=[],r=0;r").append(n)[0].reset(),i.after(n).detach(),a&&n.trigger("focus"),e.cleanData(i.off("remove")),this.options.fileInput=this.options.fileInput.map((function(e,t){return t===i[0]?n[0]:t})),i[0]===this.element[0]&&(this.element=n)},_handleFileTreeEntry:function(t,i){var n,a=this,o=e.Deferred(),r=[],s=function(e){e&&!e.entry&&(e.entry=t),o.resolve([e])};return i=i||"",t.isFile?t._file?(t._file.relativePath=i,o.resolve(t._file)):t.file((function(e){e.relativePath=i,o.resolve(e)}),s):t.isDirectory?(n=t.createReader(),function e(){n.readEntries((function(n){n.length?(r=r.concat(n),e()):function(e){a._handleFileTreeEntries(e,i+t.name+"/").done((function(e){o.resolve(e)})).fail(s)}(r)}),s)}()):o.resolve([]),o.promise()},_handleFileTreeEntries:function(t,i){var n=this;return e.when.apply(e,e.map(t,(function(e){return n._handleFileTreeEntry(e,i)})))[this._promisePipe]((function(){return Array.prototype.concat.apply([],arguments)}))},_getDroppedFiles:function(t){var i=(t=t||{}).items;return i&&i.length&&(i[0].webkitGetAsEntry||i[0].getAsEntry)?this._handleFileTreeEntries(e.map(i,(function(e){var t;return e.webkitGetAsEntry?((t=e.webkitGetAsEntry())&&(t._file=e.getAsFile()),t):e.getAsEntry()}))):e.Deferred().resolve(e.makeArray(t.files)).promise()},_getSingleFileInputFiles:function(t){var i,n,a=(t=e(t)).prop("entries");if(a&&a.length)return this._handleFileTreeEntries(a);if((i=e.makeArray(t.prop("files"))).length)void 0===i[0].name&&i[0].fileName&&e.each(i,(function(e,t){t.name=t.fileName,t.size=t.fileSize}));else{if(!(n=t.prop("value")))return e.Deferred().resolve([]).promise();i=[{name:n.replace(/^.*\\/,"")}]}return e.Deferred().resolve(i).promise()},_getFileInputFiles:function(t){return t instanceof e&&1!==t.length?e.when.apply(e,e.map(t,this._getSingleFileInputFiles))[this._promisePipe]((function(){return Array.prototype.concat.apply([],arguments)})):this._getSingleFileInputFiles(t)},_onChange:function(t){var i=this,n={fileInput:e(t.target),form:e(t.target.form)};this._getFileInputFiles(n.fileInput).always((function(a){n.files=a,i.options.replaceFileInput&&i._replaceFileInput(n),!1!==i._trigger("change",e.Event("change",{delegatedEvent:t}),n)&&i._onAdd(t,n)}))},_onPaste:function(t){var i=t.originalEvent&&t.originalEvent.clipboardData&&t.originalEvent.clipboardData.items,n={files:[]};i&&i.length&&(e.each(i,(function(e,t){var i=t.getAsFile&&t.getAsFile();i&&n.files.push(i)})),!1!==this._trigger("paste",e.Event("paste",{delegatedEvent:t}),n)&&this._onAdd(t,n))},_onDrop:function(t){t.dataTransfer=t.originalEvent&&t.originalEvent.dataTransfer;var i=this,n=t.dataTransfer,a={};n&&n.files&&n.files.length&&(t.preventDefault(),this._getDroppedFiles(n).always((function(n){a.files=n,!1!==i._trigger("drop",e.Event("drop",{delegatedEvent:t}),a)&&i._onAdd(t,a)})))},_onDragOver:t("dragover"),_onDragEnter:t("dragenter"),_onDragLeave:t("dragleave"),_initEventHandlers:function(){this._isXHRUpload(this.options)&&(this._on(this.options.dropZone,{dragover:this._onDragOver,drop:this._onDrop,dragenter:this._onDragEnter,dragleave:this._onDragLeave}),this._on(this.options.pasteZone,{paste:this._onPaste})),e.support.fileInput&&this._on(this.options.fileInput,{change:this._onChange})},_destroyEventHandlers:function(){this._off(this.options.dropZone,"dragenter dragleave dragover drop"),this._off(this.options.pasteZone,"paste"),this._off(this.options.fileInput,"change")},_destroy:function(){this._destroyEventHandlers()},_setOption:function(t,i){var n=-1!==e.inArray(t,this._specialOptions);n&&this._destroyEventHandlers(),this._super(t,i),n&&(this._initSpecialOptions(),this._initEventHandlers())},_initSpecialOptions:function(){var t=this.options;void 0===t.fileInput?t.fileInput=this.element.is('input[type="file"]')?this.element:this.element.find('input[type="file"]'):t.fileInput instanceof e||(t.fileInput=e(t.fileInput)),t.dropZone instanceof e||(t.dropZone=e(t.dropZone)),t.pasteZone instanceof e||(t.pasteZone=e(t.pasteZone))},_getRegExp:function(e){var t=e.split("/"),i=t.pop();return t.shift(),new RegExp(t.join("/"),i)},_isRegExpOption:function(t,i){return"url"!==t&&"string"===e.type(i)&&/^\/.*\/[igm]{0,3}$/.test(i)},_initDataAttributes:function(){var t=this,i=this.options,n=this.element.data();e.each(this.element[0].attributes,(function(e,a){var o,r=a.name.toLowerCase();/^data-/.test(r)&&(r=r.slice(5).replace(/-[a-z]/g,(function(e){return e.charAt(1).toUpperCase()})),o=n[r],t._isRegExpOption(r,o)&&(o=t._getRegExp(o)),i[r]=o)}))},_create:function(){this._initDataAttributes(),this._initSpecialOptions(),this._slots=[],this._sequence=this._getXHRPromise(!0),this._sending=this._active=0,this._initProgressObject(this),this._initEventHandlers()},active:function(){return this._active},progress:function(){return this._progress},add:function(t){var i=this;t&&!this.options.disabled&&(t.fileInput&&!t.files?this._getFileInputFiles(t.fileInput).always((function(e){t.files=e,i._onAdd(null,t)})):(t.files=e.makeArray(t.files),this._onAdd(null,t)))},send:function(t){if(t&&!this.options.disabled){if(t.fileInput&&!t.files){var i,n,a=this,o=e.Deferred(),r=o.promise();return r.abort=function(){return n=!0,i?i.abort():(o.reject(null,"abort","abort"),r)},this._getFileInputFiles(t.fileInput).always((function(e){n||(e.length?(t.files=e,(i=a._onSend(null,t)).then((function(e,t,i){o.resolve(e,t,i)}),(function(e,t,i){o.reject(e,t,i)}))):o.reject())})),this._enhancePromise(r)}if(t.files=e.makeArray(t.files),t.files.length)return this._onSend(null,t)}return this._getXHRPromise(!1,t&&t.context)}})})),function(e){"use strict";"function"==typeof define&&define.amd?define(["jquery"],e):"object"===("undefined"==typeof exports?"undefined":_typeof(exports))?e(require("jquery")):e(window.jQuery)}((function(e){"use strict";var t=0,i=e,n="parseJSON";"JSON"in window&&"parse"in JSON&&(i=JSON,n="parse"),e.ajaxTransport("iframe",(function(i){if(i.async){var n,a,o,r=i.initialIframeSrc||"javascript:false;";return{send:function(s,l){(n=e('
    ')).attr("accept-charset",i.formAcceptCharset),o=/\?/.test(i.url)?"&":"?","DELETE"===i.type?(i.url=i.url+o+"_method=DELETE",i.type="POST"):"PUT"===i.type?(i.url=i.url+o+"_method=PUT",i.type="POST"):"PATCH"===i.type&&(i.url=i.url+o+"_method=PATCH",i.type="POST"),a=e('').on("load",(function(){var t,o=e.isArray(i.paramName)?i.paramName:[i.paramName];a.off("load").on("load",(function(){var t;try{if(!(t=a.contents()).length||!t[0].firstChild)throw new Error}catch(e){t=void 0}l(200,"success",{iframe:t}),e('').appendTo(n),window.setTimeout((function(){n.remove()}),0)})),n.prop("target",a.prop("name")).prop("action",i.url).prop("method",i.type),i.formData&&e.each(i.formData,(function(t,i){e('').prop("name",i.name).val(i.value).appendTo(n)})),i.fileInput&&i.fileInput.length&&"POST"===i.type&&(t=i.fileInput.clone(),i.fileInput.after((function(e){return t[e]})),i.paramName&&i.fileInput.each((function(t){e(this).prop("name",o[t]||i.paramName)})),n.append(i.fileInput).prop("enctype","multipart/form-data").prop("encoding","multipart/form-data"),i.fileInput.removeAttr("form")),window.setTimeout((function(){n.submit(),t&&t.length&&i.fileInput.each((function(i,n){var a=e(t[i]);e(n).prop("name",a.prop("name")).attr("form",a.attr("form")),a.replaceWith(n)}))}),0)})),n.append(a).appendTo(document.body)},abort:function(){a&&a.off("load").prop("src",r),n&&n.remove()}}}})),e.ajaxSetup({converters:{"iframe text":function(t){return t&&e(t[0].body).text()},"iframe json":function(t){return t&&i[n](e(t[0].body).text())},"iframe html":function(t){return t&&e(t[0].body).html()},"iframe xml":function(t){var i=t&&t[0];return i&&e.isXMLDoc(i)?i:e.parseXML(i.XMLDocument&&i.XMLDocument.xml||e(i.body).html())},"iframe script":function(t){return t&&e.globalEval(e(t[0].body).text())}}})})); diff --git a/src/OrchardCore.Modules/OrchardCore.Menu/Assets.json b/src/OrchardCore.Modules/OrchardCore.Menu/Assets.json index 275aab66aae..3f1c785a54f 100644 --- a/src/OrchardCore.Modules/OrchardCore.Menu/Assets.json +++ b/src/OrchardCore.Modules/OrchardCore.Menu/Assets.json @@ -1,6 +1,5 @@ [ { - "generateSourceMaps": false, "inputs": [ "Assets/scss/menu.scss" ], diff --git a/src/OrchardCore.Modules/OrchardCore.Menu/Drivers/ContentMenuItemPartDisplayDriver.cs b/src/OrchardCore.Modules/OrchardCore.Menu/Drivers/ContentMenuItemPartDisplayDriver.cs index 5d07cc7748f..df343140e0f 100644 --- a/src/OrchardCore.Modules/OrchardCore.Menu/Drivers/ContentMenuItemPartDisplayDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.Menu/Drivers/ContentMenuItemPartDisplayDriver.cs @@ -39,14 +39,13 @@ public override async Task UpdateAsync(ContentMenuItemPart part, { var model = new ContentMenuItemPartEditViewModel(); - if (await updater.TryUpdateModelAsync(model, Prefix)) - { - part.ContentItem.DisplayText = model.Name; - // This code can be removed in a later release. + await updater.TryUpdateModelAsync(model, Prefix); + + part.ContentItem.DisplayText = model.Name; + // This code can be removed in a later release. #pragma warning disable 0618 - part.Name = model.Name; + part.Name = model.Name; #pragma warning restore 0618 - } return Edit(part); } diff --git a/src/OrchardCore.Modules/OrchardCore.Menu/Drivers/HtmlMenuItemPartDisplayDriver.cs b/src/OrchardCore.Modules/OrchardCore.Menu/Drivers/HtmlMenuItemPartDisplayDriver.cs index c10348387e4..9d52962dbf4 100644 --- a/src/OrchardCore.Modules/OrchardCore.Menu/Drivers/HtmlMenuItemPartDisplayDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.Menu/Drivers/HtmlMenuItemPartDisplayDriver.cs @@ -76,39 +76,38 @@ public override async Task UpdateAsync(HtmlMenuItemPart part, IU { var settings = context.TypePartDefinition.GetSettings(); var model = new HtmlMenuItemPartEditViewModel(); - if (await updater.TryUpdateModelAsync(model, Prefix)) - { - part.ContentItem.DisplayText = model.Name; - part.Html = settings.SanitizeHtml ? _htmlSanitizerService.Sanitize(model.Html) : model.Html; - part.Url = model.Url; + await updater.TryUpdateModelAsync(model, Prefix); + + part.ContentItem.DisplayText = model.Name; + part.Html = settings.SanitizeHtml ? _htmlSanitizerService.Sanitize(model.Html) : model.Html; + part.Url = model.Url; - var urlToValidate = part.Url; + var urlToValidate = part.Url; + + if (!string.IsNullOrEmpty(urlToValidate)) + { + urlToValidate = urlToValidate.Split('#', 2)[0]; - if (!string.IsNullOrEmpty(urlToValidate)) + if (urlToValidate.StartsWith("~/", StringComparison.Ordinal)) { - urlToValidate = urlToValidate.Split('#', 2)[0]; + var urlHelper = _urlHelperFactory.GetUrlHelper(_actionContextAccessor.ActionContext); + urlToValidate = urlHelper.Content(urlToValidate); + } - if (urlToValidate.StartsWith("~/", StringComparison.Ordinal)) - { - var urlHelper = _urlHelperFactory.GetUrlHelper(_actionContextAccessor.ActionContext); - urlToValidate = urlHelper.Content(urlToValidate); - } + urlToValidate = urlToValidate.ToUriComponents(); - urlToValidate = urlToValidate.ToUriComponents(); + if (!Uri.IsWellFormedUriString(urlToValidate, UriKind.RelativeOrAbsolute)) + { + updater.ModelState.AddModelError(nameof(part.Url), S["{0} is an invalid url.", part.Url]); + } + else + { + var link = $""; - if (!Uri.IsWellFormedUriString(urlToValidate, UriKind.RelativeOrAbsolute)) + if (!string.Equals(link, _htmlSanitizerService.Sanitize(link), StringComparison.OrdinalIgnoreCase)) { updater.ModelState.AddModelError(nameof(part.Url), S["{0} is an invalid url.", part.Url]); } - else - { - var link = $""; - - if (!string.Equals(link, _htmlSanitizerService.Sanitize(link), StringComparison.OrdinalIgnoreCase)) - { - updater.ModelState.AddModelError(nameof(part.Url), S["{0} is an invalid url.", part.Url]); - } - } } } diff --git a/src/OrchardCore.Modules/OrchardCore.Menu/Drivers/LinkMenuItemPartDisplayDriver.cs b/src/OrchardCore.Modules/OrchardCore.Menu/Drivers/LinkMenuItemPartDisplayDriver.cs index 1fee2baa094..a06b65985c3 100644 --- a/src/OrchardCore.Modules/OrchardCore.Menu/Drivers/LinkMenuItemPartDisplayDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.Menu/Drivers/LinkMenuItemPartDisplayDriver.cs @@ -67,43 +67,42 @@ public override async Task UpdateAsync(LinkMenuItemPart part, IU { var model = new LinkMenuItemPartEditViewModel(); - if (await updater.TryUpdateModelAsync(model, Prefix)) - { - part.Url = model.Url; - part.ContentItem.DisplayText = model.Name; + await updater.TryUpdateModelAsync(model, Prefix); + + part.Url = model.Url; + part.ContentItem.DisplayText = model.Name; - // This code can be removed in a later release. + // This code can be removed in a later release. #pragma warning disable 0618 - part.Name = model.Name; + part.Name = model.Name; #pragma warning restore 0618 - var urlToValidate = part.Url; + var urlToValidate = part.Url; + + if (!string.IsNullOrEmpty(urlToValidate)) + { + urlToValidate = urlToValidate.Split('#', 2)[0]; - if (!string.IsNullOrEmpty(urlToValidate)) + if (urlToValidate.StartsWith("~/", StringComparison.Ordinal)) { - urlToValidate = urlToValidate.Split('#', 2)[0]; + var urlHelper = _urlHelperFactory.GetUrlHelper(_actionContextAccessor.ActionContext); + urlToValidate = urlHelper.Content(urlToValidate); + } - if (urlToValidate.StartsWith("~/", StringComparison.Ordinal)) - { - var urlHelper = _urlHelperFactory.GetUrlHelper(_actionContextAccessor.ActionContext); - urlToValidate = urlHelper.Content(urlToValidate); - } + urlToValidate = urlToValidate.ToUriComponents(); - urlToValidate = urlToValidate.ToUriComponents(); + if (!Uri.IsWellFormedUriString(urlToValidate, UriKind.RelativeOrAbsolute)) + { + updater.ModelState.AddModelError(nameof(part.Url), S["{0} is an invalid url.", part.Url]); + } + else + { + var link = $""; - if (!Uri.IsWellFormedUriString(urlToValidate, UriKind.RelativeOrAbsolute)) + if (!string.Equals(link, _htmlSanitizerService.Sanitize(link), StringComparison.OrdinalIgnoreCase)) { updater.ModelState.AddModelError(nameof(part.Url), S["{0} is an invalid url.", part.Url]); } - else - { - var link = $""; - - if (!string.Equals(link, _htmlSanitizerService.Sanitize(link), StringComparison.OrdinalIgnoreCase)) - { - updater.ModelState.AddModelError(nameof(part.Url), S["{0} is an invalid url.", part.Url]); - } - } } } diff --git a/src/OrchardCore.Modules/OrchardCore.Menu/Drivers/MenuPartDisplayDriver.cs b/src/OrchardCore.Modules/OrchardCore.Menu/Drivers/MenuPartDisplayDriver.cs index 5b2b512e18a..5e16573fa12 100644 --- a/src/OrchardCore.Modules/OrchardCore.Menu/Drivers/MenuPartDisplayDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.Menu/Drivers/MenuPartDisplayDriver.cs @@ -71,9 +71,9 @@ public override IDisplayResult Edit(MenuPart part) public override async Task UpdateAsync(MenuPart part, IUpdateModel updater) { var model = new MenuPartEditViewModel(); + await updater.TryUpdateModelAsync(model, Prefix, t => t.Hierarchy); - if (await updater.TryUpdateModelAsync(model, Prefix, t => t.Hierarchy) && - !string.IsNullOrWhiteSpace(model.Hierarchy)) + if (!string.IsNullOrWhiteSpace(model.Hierarchy)) { var menuItems = new JsonArray(); diff --git a/src/OrchardCore.Modules/OrchardCore.Menu/Settings/HtmlMenuItemPartSettingsDisplayDriver.cs b/src/OrchardCore.Modules/OrchardCore.Menu/Settings/HtmlMenuItemPartSettingsDisplayDriver.cs index b452dec1e45..02702d4bb06 100644 --- a/src/OrchardCore.Modules/OrchardCore.Menu/Settings/HtmlMenuItemPartSettingsDisplayDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.Menu/Settings/HtmlMenuItemPartSettingsDisplayDriver.cs @@ -26,12 +26,11 @@ public override async Task UpdateAsync(ContentTypePartDefinition var model = new HtmlMenuItemPartSettingsViewModel(); var settings = new HtmlMenuItemPartSettings(); - if (await context.Updater.TryUpdateModelAsync(model, Prefix)) - { - settings.SanitizeHtml = model.SanitizeHtml; + await context.Updater.TryUpdateModelAsync(model, Prefix); + + settings.SanitizeHtml = model.SanitizeHtml; - context.Builder.WithSettings(settings); - } + context.Builder.WithSettings(settings); return Edit(contentTypePartDefinition, context.Updater); } diff --git a/src/OrchardCore.Modules/OrchardCore.Microsoft.Authentication/Drivers/AzureADSettingsDisplayDriver.cs b/src/OrchardCore.Modules/OrchardCore.Microsoft.Authentication/Drivers/AzureADSettingsDisplayDriver.cs index eeeb6472f3c..0c4476ff957 100644 --- a/src/OrchardCore.Modules/OrchardCore.Microsoft.Authentication/Drivers/AzureADSettingsDisplayDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.Microsoft.Authentication/Drivers/AzureADSettingsDisplayDriver.cs @@ -50,7 +50,7 @@ public override async Task EditAsync(AzureADSettings settings, B }).Location("Content:0").OnGroup(MicrosoftAuthenticationConstants.Features.AAD); } - public override async Task UpdateAsync(AzureADSettings settings, BuildEditorContext context) + public override async Task UpdateAsync(AzureADSettings settings, UpdateEditorContext context) { if (context.GroupId == MicrosoftAuthenticationConstants.Features.AAD) { diff --git a/src/OrchardCore.Modules/OrchardCore.Microsoft.Authentication/Drivers/MicrosoftAccountSettingsDisplayDriver.cs b/src/OrchardCore.Modules/OrchardCore.Microsoft.Authentication/Drivers/MicrosoftAccountSettingsDisplayDriver.cs index c66aa8edbca..ea78b820391 100644 --- a/src/OrchardCore.Modules/OrchardCore.Microsoft.Authentication/Drivers/MicrosoftAccountSettingsDisplayDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.Microsoft.Authentication/Drivers/MicrosoftAccountSettingsDisplayDriver.cs @@ -76,7 +76,7 @@ public override async Task EditAsync(MicrosoftAccountSettings se }).Location("Content:5").OnGroup(MicrosoftAuthenticationConstants.Features.MicrosoftAccount); } - public override async Task UpdateAsync(MicrosoftAccountSettings settings, BuildEditorContext context) + public override async Task UpdateAsync(MicrosoftAccountSettings settings, UpdateEditorContext context) { if (context.GroupId == MicrosoftAuthenticationConstants.Features.MicrosoftAccount) { diff --git a/src/OrchardCore.Modules/OrchardCore.Notifications/Drivers/NotifyUserTaskActivityDisplayDriver.cs b/src/OrchardCore.Modules/OrchardCore.Notifications/Drivers/NotifyUserTaskActivityDisplayDriver.cs index c44d2f08195..a6408af4151 100644 --- a/src/OrchardCore.Modules/OrchardCore.Notifications/Drivers/NotifyUserTaskActivityDisplayDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.Notifications/Drivers/NotifyUserTaskActivityDisplayDriver.cs @@ -51,32 +51,31 @@ public override IDisplayResult Edit(TActivity model) public async override Task UpdateAsync(TActivity model, IUpdateModel updater) { var viewModel = new TEditViewModel(); - if (await updater.TryUpdateModelAsync(viewModel, Prefix)) + await updater.TryUpdateModelAsync(viewModel, Prefix); + + if (!_liquidTemplateManager.Validate(viewModel.Subject, out var subjectErrors)) { - if (!_liquidTemplateManager.Validate(viewModel.Subject, out var subjectErrors)) - { - updater.ModelState.AddModelError(Prefix, nameof(viewModel.Subject), S["Subject field does not contain a valid Liquid expression. Details: {0}", string.Join(' ', subjectErrors)]); - } - - if (!_liquidTemplateManager.Validate(viewModel.Summary, out var summaryErrors)) - { - updater.ModelState.AddModelError(Prefix, nameof(viewModel.Summary), S["Summary field does not contain a valid Liquid expression. Details: {0}", string.Join(' ', summaryErrors)]); - } - - if (!_liquidTemplateManager.Validate(viewModel.TextBody, out var textBodyErrors)) - { - updater.ModelState.AddModelError(Prefix, nameof(viewModel.TextBody), S["Text Body field does not contain a valid Liquid expression. Details: {0}", string.Join(' ', textBodyErrors)]); - } - - if (!_liquidTemplateManager.Validate(viewModel.HtmlBody, out var htmlBodyErrors)) - { - updater.ModelState.AddModelError(Prefix, nameof(viewModel.HtmlBody), S["HTML Body field does not contain a valid Liquid expression. Details: {0}", string.Join(' ', htmlBodyErrors)]); - } - - if (updater.ModelState.IsValid) - { - await UpdateActivityAsync(viewModel, model); - } + updater.ModelState.AddModelError(Prefix, nameof(viewModel.Subject), S["Subject field does not contain a valid Liquid expression. Details: {0}", string.Join(' ', subjectErrors)]); + } + + if (!_liquidTemplateManager.Validate(viewModel.Summary, out var summaryErrors)) + { + updater.ModelState.AddModelError(Prefix, nameof(viewModel.Summary), S["Summary field does not contain a valid Liquid expression. Details: {0}", string.Join(' ', summaryErrors)]); + } + + if (!_liquidTemplateManager.Validate(viewModel.TextBody, out var textBodyErrors)) + { + updater.ModelState.AddModelError(Prefix, nameof(viewModel.TextBody), S["Text Body field does not contain a valid Liquid expression. Details: {0}", string.Join(' ', textBodyErrors)]); + } + + if (!_liquidTemplateManager.Validate(viewModel.HtmlBody, out var htmlBodyErrors)) + { + updater.ModelState.AddModelError(Prefix, nameof(viewModel.HtmlBody), S["HTML Body field does not contain a valid Liquid expression. Details: {0}", string.Join(' ', htmlBodyErrors)]); + } + + if (updater.ModelState.IsValid) + { + await UpdateActivityAsync(viewModel, model); } return Edit(model); diff --git a/src/OrchardCore.Modules/OrchardCore.Notifications/Drivers/UserNotificationPreferencesPartDisplayDriver.cs b/src/OrchardCore.Modules/OrchardCore.Notifications/Drivers/UserNotificationPreferencesPartDisplayDriver.cs index de90879412c..2c4c02fc0a9 100644 --- a/src/OrchardCore.Modules/OrchardCore.Notifications/Drivers/UserNotificationPreferencesPartDisplayDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.Notifications/Drivers/UserNotificationPreferencesPartDisplayDriver.cs @@ -54,38 +54,37 @@ public override Task EditAsync(User user, UserNotificationPrefer return Task.FromResult(result); } - public override async Task UpdateAsync(User user, UserNotificationPreferencesPart part, IUpdateModel updater, BuildEditorContext context) + public override async Task UpdateAsync(User user, UserNotificationPreferencesPart part, IUpdateModel updater, UpdateEditorContext context) { var model = new UserNotificationViewModel(); - if (await updater.TryUpdateModelAsync(model, Prefix)) - { - var sortedMethods = new List(model.SortedMethods ?? []); - - if (sortedMethods.Count > 0) - { - // Important to execute this code only when sortedMethods has at least one element to avoid exception. - // Store all methods in the same order they appear. - part.Methods = _notificationMethodProviders - .OrderBy(provider => sortedMethods.IndexOf(provider.Method)) - .ThenBy(provider => provider.Name.ToString()) - .Select(x => x.Method) - .ToArray(); - } - else - { - part.Methods = _notificationMethodProviders.OrderBy(provider => provider.Name.ToString()) - .Select(x => x.Method) - .ToArray(); - } + await updater.TryUpdateModelAsync(model, Prefix); - var selectedMethods = new List(model.Methods ?? []); + var sortedMethods = new List(model.SortedMethods ?? []); - // Store any method that is not selected as an optout. - part.Optout = _notificationMethodProviders.Where(provider => !selectedMethods.Contains(provider.Method)) - .Select(provider => provider.Method) + if (sortedMethods.Count > 0) + { + // Important to execute this code only when sortedMethods has at least one element to avoid exception. + // Store all methods in the same order they appear. + part.Methods = _notificationMethodProviders + .OrderBy(provider => sortedMethods.IndexOf(provider.Method)) + .ThenBy(provider => provider.Name.ToString()) + .Select(x => x.Method) .ToArray(); } + else + { + part.Methods = _notificationMethodProviders.OrderBy(provider => provider.Name.ToString()) + .Select(x => x.Method) + .ToArray(); + } + + var selectedMethods = new List(model.Methods ?? []); + + // Store any method that is not selected as an optout. + part.Optout = _notificationMethodProviders.Where(provider => !selectedMethods.Contains(provider.Method)) + .Select(provider => provider.Method) + .ToArray(); return await EditAsync(user, part, context); } diff --git a/src/OrchardCore.Modules/OrchardCore.OpenId/Assets.json b/src/OrchardCore.Modules/OrchardCore.OpenId/Assets.json index 175dc97ed45..7ca14f4a4c3 100644 --- a/src/OrchardCore.Modules/OrchardCore.OpenId/Assets.json +++ b/src/OrchardCore.Modules/OrchardCore.OpenId/Assets.json @@ -1,6 +1,5 @@ [ { - "generateSourceMaps": false, "inputs": [ "Assets/scss/parametersEditor/parametersEditor.scss" ], diff --git a/src/OrchardCore.Modules/OrchardCore.OpenId/Drivers/OpenIdClientSettingsDisplayDriver.cs b/src/OrchardCore.Modules/OrchardCore.OpenId/Drivers/OpenIdClientSettingsDisplayDriver.cs index acc02e34764..14a66304c54 100644 --- a/src/OrchardCore.Modules/OrchardCore.OpenId/Drivers/OpenIdClientSettingsDisplayDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.OpenId/Drivers/OpenIdClientSettingsDisplayDriver.cs @@ -109,7 +109,7 @@ public override async Task EditAsync(OpenIdClientSettings settin }).Location("Content:2").OnGroup(SettingsGroupId); } - public override async Task UpdateAsync(OpenIdClientSettings settings, BuildEditorContext context) + public override async Task UpdateAsync(OpenIdClientSettings settings, UpdateEditorContext context) { var user = _httpContextAccessor.HttpContext?.User; if (!await _authorizationService.AuthorizeAsync(user, Permissions.ManageClientSettings)) diff --git a/src/OrchardCore.Modules/OrchardCore.Queries/Deployment/QueryBasedContentDeploymentStepDriver.cs b/src/OrchardCore.Modules/OrchardCore.Queries/Deployment/QueryBasedContentDeploymentStepDriver.cs index e22d2ff3de8..43b71b41959 100644 --- a/src/OrchardCore.Modules/OrchardCore.Queries/Deployment/QueryBasedContentDeploymentStepDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.Queries/Deployment/QueryBasedContentDeploymentStepDriver.cs @@ -47,36 +47,34 @@ public override IDisplayResult Edit(QueryBasedContentDeploymentStep step) public override async Task UpdateAsync(QueryBasedContentDeploymentStep step, IUpdateModel updater) { var queryBasedContentViewModel = new QueryBasedContentDeploymentStepViewModel(); + await updater.TryUpdateModelAsync(queryBasedContentViewModel, Prefix, viewModel => viewModel.QueryName, viewModel => viewModel.QueryParameters, viewModel => viewModel.ExportAsSetupRecipe); + var query = await _queryManager.LoadQueryAsync(queryBasedContentViewModel.QueryName); - if (await updater.TryUpdateModelAsync(queryBasedContentViewModel, Prefix, viewModel => viewModel.QueryName, viewModel => viewModel.QueryParameters, viewModel => viewModel.ExportAsSetupRecipe)) + if (!query.ResultsOfType()) { - var query = await _queryManager.LoadQueryAsync(queryBasedContentViewModel.QueryName); - if (!query.ResultsOfType()) - { - updater.ModelState.AddModelError(Prefix, nameof(step.QueryName), S["Your Query is not returning content items."]); - } + updater.ModelState.AddModelError(Prefix, nameof(step.QueryName), S["Your Query is not returning content items."]); + } - if (queryBasedContentViewModel.QueryParameters != null) + if (queryBasedContentViewModel.QueryParameters != null) + { + try { - try - { - var parameters = JConvert.DeserializeObject>(queryBasedContentViewModel.QueryParameters); - if (parameters == null) - { - updater.ModelState.AddModelError(Prefix, nameof(step.QueryParameters), S["Make sure it is a valid JSON object. Example: { key : 'value' }"]); - } - } - catch (JsonException) + var parameters = JConvert.DeserializeObject>(queryBasedContentViewModel.QueryParameters); + if (parameters == null) { - updater.ModelState.AddModelError(Prefix, nameof(step.QueryParameters), S["Something is wrong with your JSON."]); + updater.ModelState.AddModelError(Prefix, nameof(step.QueryParameters), S["Make sure it is a valid JSON object. Example: { key : 'value' }"]); } } - - step.QueryName = queryBasedContentViewModel.QueryName; - step.ExportAsSetupRecipe = queryBasedContentViewModel.ExportAsSetupRecipe; - step.QueryParameters = queryBasedContentViewModel.QueryParameters; + catch (JsonException) + { + updater.ModelState.AddModelError(Prefix, nameof(step.QueryParameters), S["Something is wrong with your JSON."]); + } } + step.QueryName = queryBasedContentViewModel.QueryName; + step.ExportAsSetupRecipe = queryBasedContentViewModel.ExportAsSetupRecipe; + step.QueryParameters = queryBasedContentViewModel.QueryParameters; + return Edit(step); } } diff --git a/src/OrchardCore.Modules/OrchardCore.Queries/Sql/Drivers/SqlQueryDisplayDriver.cs b/src/OrchardCore.Modules/OrchardCore.Queries/Sql/Drivers/SqlQueryDisplayDriver.cs index d0ce86cca59..58f1605e8e3 100644 --- a/src/OrchardCore.Modules/OrchardCore.Queries/Sql/Drivers/SqlQueryDisplayDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.Queries/Sql/Drivers/SqlQueryDisplayDriver.cs @@ -48,11 +48,10 @@ public override IDisplayResult Edit(SqlQuery query, IUpdateModel updater) public override async Task UpdateAsync(SqlQuery model, IUpdateModel updater) { var viewModel = new SqlQueryViewModel(); - if (await updater.TryUpdateModelAsync(viewModel, Prefix, m => m.Query, m => m.ReturnDocuments)) - { - model.Template = viewModel.Query; - model.ReturnDocuments = viewModel.ReturnDocuments; - } + await updater.TryUpdateModelAsync(viewModel, Prefix, m => m.Query, m => m.ReturnDocuments); + + model.Template = viewModel.Query; + model.ReturnDocuments = viewModel.ReturnDocuments; if (string.IsNullOrWhiteSpace(model.Template)) { diff --git a/src/OrchardCore.Modules/OrchardCore.ReCaptcha/Drivers/ReCaptchaForgotPasswordFormDisplayDriver.cs b/src/OrchardCore.Modules/OrchardCore.ReCaptcha/Drivers/ReCaptchaForgotPasswordFormDisplayDriver.cs new file mode 100644 index 00000000000..f3f6943ca40 --- /dev/null +++ b/src/OrchardCore.Modules/OrchardCore.ReCaptcha/Drivers/ReCaptchaForgotPasswordFormDisplayDriver.cs @@ -0,0 +1,30 @@ +using System.Threading.Tasks; +using OrchardCore.DisplayManagement.Handlers; +using OrchardCore.DisplayManagement.Views; +using OrchardCore.ReCaptcha.Configuration; +using OrchardCore.Settings; +using OrchardCore.Users.Models; + +namespace OrchardCore.ReCaptcha.Drivers; + +public sealed class ReCaptchaForgotPasswordFormDisplayDriver : DisplayDriver +{ + private readonly ISiteService _siteService; + + public ReCaptchaForgotPasswordFormDisplayDriver(ISiteService siteService) + { + _siteService = siteService; + } + + public override async Task EditAsync(ForgotPasswordForm model, BuildEditorContext context) + { + var _reCaptchaSettings = (await _siteService.GetSiteSettingsAsync()).As(); + + if (!_reCaptchaSettings.IsValid()) + { + return null; + } + + return View("FormReCaptcha", model).Location("Content:after"); + } +} diff --git a/src/OrchardCore.Modules/OrchardCore.ReCaptcha/Drivers/ReCaptchaLoginFormDisplayDriver.cs b/src/OrchardCore.Modules/OrchardCore.ReCaptcha/Drivers/ReCaptchaLoginFormDisplayDriver.cs index 8b2432b7941..08be62e8225 100644 --- a/src/OrchardCore.Modules/OrchardCore.ReCaptcha/Drivers/ReCaptchaLoginFormDisplayDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.ReCaptcha/Drivers/ReCaptchaLoginFormDisplayDriver.cs @@ -8,7 +8,7 @@ namespace OrchardCore.ReCaptcha.Drivers; -public class ReCaptchaLoginFormDisplayDriver : DisplayDriver +public sealed class ReCaptchaLoginFormDisplayDriver : DisplayDriver { private readonly ISiteService _siteService; private readonly ReCaptchaService _reCaptchaService; @@ -30,6 +30,6 @@ public override async Task EditAsync(LoginForm model, BuildEdito return null; } - return View("LoginFormReCaptcha_Edit", model).Location("Content:after"); + return View("FormReCaptcha", model).Location("Content:after"); } } diff --git a/src/OrchardCore.Modules/OrchardCore.ReCaptcha/Drivers/ReCaptchaResetPasswordFormDisplayDriver.cs b/src/OrchardCore.Modules/OrchardCore.ReCaptcha/Drivers/ReCaptchaResetPasswordFormDisplayDriver.cs new file mode 100644 index 00000000000..010fe0cba4a --- /dev/null +++ b/src/OrchardCore.Modules/OrchardCore.ReCaptcha/Drivers/ReCaptchaResetPasswordFormDisplayDriver.cs @@ -0,0 +1,30 @@ +using System.Threading.Tasks; +using OrchardCore.DisplayManagement.Handlers; +using OrchardCore.DisplayManagement.Views; +using OrchardCore.ReCaptcha.Configuration; +using OrchardCore.Settings; +using OrchardCore.Users.Models; + +namespace OrchardCore.ReCaptcha.Drivers; + +public sealed class ReCaptchaResetPasswordFormDisplayDriver : DisplayDriver +{ + private readonly ISiteService _siteService; + + public ReCaptchaResetPasswordFormDisplayDriver(ISiteService siteService) + { + _siteService = siteService; + } + + public override async Task EditAsync(ResetPasswordForm model, BuildEditorContext context) + { + var _reCaptchaSettings = (await _siteService.GetSiteSettingsAsync()).As(); + + if (!_reCaptchaSettings.IsValid()) + { + return null; + } + + return View("FormReCaptcha", model).Location("Content:after"); + } +} diff --git a/src/OrchardCore.Modules/OrchardCore.ReCaptcha/Drivers/ReCaptchaSettingsDisplayDriver.cs b/src/OrchardCore.Modules/OrchardCore.ReCaptcha/Drivers/ReCaptchaSettingsDisplayDriver.cs index c4d1dbb0338..62bbaec4cba 100644 --- a/src/OrchardCore.Modules/OrchardCore.ReCaptcha/Drivers/ReCaptchaSettingsDisplayDriver.cs +++ b/src/OrchardCore.Modules/OrchardCore.ReCaptcha/Drivers/ReCaptchaSettingsDisplayDriver.cs @@ -58,7 +58,7 @@ public override async Task EditAsync(ReCaptchaSettings settings, .OnGroup(GroupId); } - public override async Task UpdateAsync(ReCaptchaSettings section, BuildEditorContext context) + public override async Task UpdateAsync(ReCaptchaSettings section, UpdateEditorContext context) { var user = _httpContextAccessor.HttpContext?.User; @@ -71,14 +71,13 @@ public override async Task UpdateAsync(ReCaptchaSettings section { var model = new ReCaptchaSettingsViewModel(); - if (await context.Updater.TryUpdateModelAsync(model, Prefix)) - { - section.SiteKey = model.SiteKey?.Trim(); - section.SecretKey = model.SecretKey?.Trim(); + await context.Updater.TryUpdateModelAsync(model, Prefix); + + section.SiteKey = model.SiteKey?.Trim(); + section.SecretKey = model.SecretKey?.Trim(); - // Release the tenant to apply settings. - await _shellHost.ReleaseShellContextAsync(_shellSettings); - } + // Release the tenant to apply settings. + await _shellHost.ReleaseShellContextAsync(_shellSettings); } return await EditAsync(section, context); diff --git a/src/OrchardCore.Modules/OrchardCore.ReCaptcha/Drivers/RegisterUserFormDisplayDriver.cs b/src/OrchardCore.Modules/OrchardCore.ReCaptcha/Drivers/RegisterUserFormDisplayDriver.cs new file mode 100644 index 00000000000..2ab32c34563 --- /dev/null +++ b/src/OrchardCore.Modules/OrchardCore.ReCaptcha/Drivers/RegisterUserFormDisplayDriver.cs @@ -0,0 +1,30 @@ +using System.Threading.Tasks; +using OrchardCore.DisplayManagement.Handlers; +using OrchardCore.DisplayManagement.Views; +using OrchardCore.ReCaptcha.Configuration; +using OrchardCore.Settings; +using OrchardCore.Users.Models; + +namespace OrchardCore.ReCaptcha.Drivers; + +public sealed class RegisterUserFormDisplayDriver : DisplayDriver +{ + private readonly ISiteService _siteService; + + public RegisterUserFormDisplayDriver(ISiteService siteService) + { + _siteService = siteService; + } + + public override async Task EditAsync(RegisterUserForm model, BuildEditorContext context) + { + var _reCaptchaSettings = (await _siteService.GetSiteSettingsAsync()).As(); + + if (!_reCaptchaSettings.IsValid()) + { + return null; + } + + return View("FormReCaptcha", model).Location("Content:after"); + } +} diff --git a/src/OrchardCore.Modules/OrchardCore.ReCaptcha/ReCaptchaLoginFilter.cs b/src/OrchardCore.Modules/OrchardCore.ReCaptcha/ReCaptchaLoginFilter.cs deleted file mode 100644 index 411d0e19e1f..00000000000 --- a/src/OrchardCore.Modules/OrchardCore.ReCaptcha/ReCaptchaLoginFilter.cs +++ /dev/null @@ -1,64 +0,0 @@ -using System; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc.Filters; -using OrchardCore.DisplayManagement; -using OrchardCore.DisplayManagement.Layout; -using OrchardCore.ReCaptcha.Configuration; -using OrchardCore.ReCaptcha.Services; -using OrchardCore.Settings; - -namespace OrchardCore.ReCaptcha -{ - public class ReCaptchaLoginFilter : IAsyncResultFilter - { - private readonly ILayoutAccessor _layoutAccessor; - private readonly ISiteService _siteService; - private readonly ReCaptchaService _reCaptchaService; - private readonly IShapeFactory _shapeFactory; - - private ReCaptchaSettings _reCaptchaSettings; - - public ReCaptchaLoginFilter( - ILayoutAccessor layoutAccessor, - ISiteService siteService, - ReCaptchaService reCaptchaService, - IShapeFactory shapeFactory) - { - _layoutAccessor = layoutAccessor; - _siteService = siteService; - _reCaptchaService = reCaptchaService; - _shapeFactory = shapeFactory; - } - - public async Task OnResultExecutionAsync(ResultExecutingContext context, ResultExecutionDelegate next) - { - if (!context.IsViewOrPageResult() - || !string.Equals("OrchardCore.Users", Convert.ToString(context.RouteData.Values["area"]), StringComparison.OrdinalIgnoreCase)) - { - await next(); - return; - } - - _reCaptchaSettings ??= (await _siteService.GetSiteSettingsAsync()).As(); - - if (!_reCaptchaSettings.IsValid()) - { - await next(); - return; - } - - var layout = await _layoutAccessor.GetLayoutAsync(); - - var afterForgotPasswordZone = layout.Zones["AfterForgotPassword"]; - await afterForgotPasswordZone.AddAsync(await _shapeFactory.CreateAsync("ReCaptcha")); - - var afterRegisterZone = layout.Zones["AfterRegister"]; - await afterRegisterZone.AddAsync(await _shapeFactory.CreateAsync("ReCaptcha")); - - var afterResetPasswordZone = layout.Zones["AfterResetPassword"]; - await afterResetPasswordZone.AddAsync(await _shapeFactory.CreateAsync("ReCaptcha")); - - await next(); - } - } -} diff --git a/src/OrchardCore.Modules/OrchardCore.ReCaptcha/Startup.cs b/src/OrchardCore.Modules/OrchardCore.ReCaptcha/Startup.cs index b1d37986d92..32274a3b8e1 100644 --- a/src/OrchardCore.Modules/OrchardCore.ReCaptcha/Startup.cs +++ b/src/OrchardCore.Modules/OrchardCore.ReCaptcha/Startup.cs @@ -1,4 +1,3 @@ -using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.DependencyInjection; using OrchardCore.DisplayManagement.Handlers; using OrchardCore.Modules; @@ -10,13 +9,14 @@ using OrchardCore.Security.Permissions; using OrchardCore.Settings; using OrchardCore.Settings.Deployment; +using OrchardCore.Users; using OrchardCore.Users.Events; using OrchardCore.Users.Models; namespace OrchardCore.ReCaptcha { [Feature("OrchardCore.ReCaptcha")] - public class Startup : StartupBase + public sealed class Startup : StartupBase { public override void ConfigureServices(IServiceCollection services) { @@ -30,7 +30,7 @@ public override void ConfigureServices(IServiceCollection services) [Feature("OrchardCore.ReCaptcha")] [RequireFeatures("OrchardCore.Deployment")] - public class DeploymentStartup : StartupBase + public sealed class DeploymentStartup : StartupBase { public override void ConfigureServices(IServiceCollection services) { @@ -39,7 +39,7 @@ public override void ConfigureServices(IServiceCollection services) } [Feature("OrchardCore.ReCaptcha.Users")] - public class StartupUsers : StartupBase + public sealed class UsersStartup : StartupBase { public override void ConfigureServices(IServiceCollection services) { @@ -47,10 +47,27 @@ public override void ConfigureServices(IServiceCollection services) services.AddScoped(); services.AddScoped(); services.AddScoped, ReCaptchaLoginFormDisplayDriver>(); - services.Configure((options) => - { - options.Filters.Add(); - }); + } + } + + [Feature("OrchardCore.ReCaptcha.Users")] + [RequireFeatures(UserConstants.Features.ResetPassword)] + public sealed class UsersResetPasswordStartup : StartupBase + { + public override void ConfigureServices(IServiceCollection services) + { + services.AddScoped, ReCaptchaForgotPasswordFormDisplayDriver>(); + services.AddScoped, ReCaptchaResetPasswordFormDisplayDriver>(); + } + } + + [Feature("OrchardCore.ReCaptcha.Users")] + [RequireFeatures(UserConstants.Features.UserRegistration)] + public sealed class UsersRegistrationStartup : StartupBase + { + public override void ConfigureServices(IServiceCollection services) + { + services.AddScoped, RegisterUserFormDisplayDriver>(); } } } diff --git a/src/OrchardCore.Modules/OrchardCore.ReCaptcha/Views/LoginFormReCaptcha.Edit.cshtml b/src/OrchardCore.Modules/OrchardCore.ReCaptcha/Views/FormReCaptcha.cshtml similarity index 100% rename from src/OrchardCore.Modules/OrchardCore.ReCaptcha/Views/LoginFormReCaptcha.Edit.cshtml rename to src/OrchardCore.Modules/OrchardCore.ReCaptcha/Views/FormReCaptcha.cshtml diff --git a/src/OrchardCore.Modules/OrchardCore.Redis/HealthChecks/Startup.cs b/src/OrchardCore.Modules/OrchardCore.Redis/HealthChecks/Startup.cs index c5a81553976..c15a7f0caa8 100644 --- a/src/OrchardCore.Modules/OrchardCore.Redis/HealthChecks/Startup.cs +++ b/src/OrchardCore.Modules/OrchardCore.Redis/HealthChecks/Startup.cs @@ -6,10 +6,6 @@ namespace OrchardCore.Redis.HealthChecks; [RequireFeatures("OrchardCore.HealthChecks")] public class Startup : StartupBase { - // The order of this startup configuration should be greater than zero to register the Redis check early, - // so the health check can be reported alongside with other health checks in the system. - public override int Order => 100; - public override void ConfigureServices(IServiceCollection services) { services diff --git a/src/OrchardCore.Modules/OrchardCore.Redis/Services/RedisDatabaseFactory.cs b/src/OrchardCore.Modules/OrchardCore.Redis/Services/RedisDatabaseFactory.cs index 53b4b7f7be6..60ab6462fbb 100644 --- a/src/OrchardCore.Modules/OrchardCore.Redis/Services/RedisDatabaseFactory.cs +++ b/src/OrchardCore.Modules/OrchardCore.Redis/Services/RedisDatabaseFactory.cs @@ -49,7 +49,8 @@ public Task CreateAsync(RedisOptions options) => catch (Exception e) { _logger.LogError(e, "Unable to connect to Redis."); - throw; + + return null; } })).Value; diff --git a/src/OrchardCore.Modules/OrchardCore.Resources/Assets.json b/src/OrchardCore.Modules/OrchardCore.Resources/Assets.json index 204e37c2cff..7fa020746e7 100644 --- a/src/OrchardCore.Modules/OrchardCore.Resources/Assets.json +++ b/src/OrchardCore.Modules/OrchardCore.Resources/Assets.json @@ -1,7 +1,6 @@ [ { "generateRTL": false, - "generateSourceMaps": false, "inputs": [ "node_modules/bootstrap/scss/bootstrap.scss" ], @@ -9,7 +8,6 @@ }, { "generateRTL": false, - "generateSourceMaps": false, "inputs": [ "node_modules/bootstrap/dist/css/bootstrap.rtl.css" ], @@ -180,7 +178,6 @@ "output": "wwwroot/Scripts/popper.js" }, { - "generateSourceMaps": false, "generateRTL": true, "inputs": [ "node_modules/trumbowyg/dist/ui/sass/trumbowyg.scss" @@ -188,7 +185,6 @@ "output": "wwwroot/Styles/trumbowyg.css" }, { - "generateSourceMaps": false, "generateRTL": true, "inputs": [ "Assets/trumbowyg/plugins/*/ui/sass/*.scss" @@ -209,7 +205,29 @@ }, { "inputs": [ - "Assets/trumbowyg/plugins/*/*.js" + "Assets/trumbowyg/plugins/allowtagsfrompaste/trumbowyg.allowtagsfrompaste.js", + "Assets/trumbowyg/plugins/base64/trumbowyg.base64.js", + "Assets/trumbowyg/plugins/cleanpaste/trumbowyg.cleanpaste.js", + "Assets/trumbowyg/plugins/colors/trumbowyg.colors.js", + "Assets/trumbowyg/plugins/emoji/trumbowyg.emoji.js", + "Assets/trumbowyg/plugins/fontfamily/trumbowyg.fontfamily.js", + "Assets/trumbowyg/plugins/fontsize/trumbowyg.fontsize.js", + "Assets/trumbowyg/plugins/giphy/trumbowyg.giphy.js", + "Assets/trumbowyg/plugins/history/trumbowyg.history.js", + "Assets/trumbowyg/plugins/indent/trumbowyg.indent.js", + "Assets/trumbowyg/plugins/insertaudio/trumbowyg.insertaudio.js", + "Assets/trumbowyg/plugins/lineheight/trumbowyg.lineheight.js", + "Assets/trumbowyg/plugins/mathml/trumbowyg.mathml.js", + "Assets/trumbowyg/plugins/mention/trumbowyg.mention.js", + "Assets/trumbowyg/plugins/noembed/trumbowyg.noembed.js", + "Assets/trumbowyg/plugins/pasteembed/trumbowyg.pasteembed.js", + "Assets/trumbowyg/plugins/pasteimage/trumbowyg.pasteimage.js", + "Assets/trumbowyg/plugins/preformatted/trumbowyg.preformatted.js", + "Assets/trumbowyg/plugins/resizimg/trumbowyg.resizimg.js", + "Assets/trumbowyg/plugins/specialchars/trumbowyg.specialchars.js", + "Assets/trumbowyg/plugins/table/trumbowyg.table.js", + "Assets/trumbowyg/plugins/template/trumbowyg.template.js", + "Assets/trumbowyg/plugins/upload/trumbowyg.upload.js" ], "output": "wwwroot/Scripts/trumbowyg-plugins.js" }, @@ -284,7 +302,6 @@ "output": "wwwroot/Vendor/fontawesome-free/webfonts/@" }, { - "generateSourceMaps": false, "inputs": [ "node_modules/js-cookie/dist/js.cookie.js" ], diff --git a/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/abap.js b/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/abap.js new file mode 100644 index 00000000000..1846aacb7fe --- /dev/null +++ b/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/abap.js @@ -0,0 +1,10 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f) + * Released under the MIT license + * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/abap/abap", ["require","require"],(require)=>{ +"use strict";var moduleExports=(()=>{var s=Object.defineProperty;var o=Object.getOwnPropertyDescriptor;var r=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var l=(t,e)=>{for(var i in e)s(t,i,{get:e[i],enumerable:!0})},d=(t,e,i,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of r(e))!c.call(t,n)&&n!==i&&s(t,n,{get:()=>e[n],enumerable:!(a=o(e,n))||a.enumerable});return t};var p=t=>d(s({},"__esModule",{value:!0}),t);var g={};l(g,{conf:()=>m,language:()=>u});var m={comments:{lineComment:"*"},brackets:[["[","]"],["(",")"]]},u={defaultToken:"invalid",ignoreCase:!0,tokenPostfix:".abap",keywords:["abap-source","abbreviated","abstract","accept","accepting","according","activation","actual","add","add-corresponding","adjacent","after","alias","aliases","align","all","allocate","alpha","analysis","analyzer","and","append","appendage","appending","application","archive","area","arithmetic","as","ascending","aspect","assert","assign","assigned","assigning","association","asynchronous","at","attributes","authority","authority-check","avg","back","background","backup","backward","badi","base","before","begin","between","big","binary","bintohex","bit","black","blank","blanks","blob","block","blocks","blue","bound","boundaries","bounds","boxed","break-point","buffer","by","bypassing","byte","byte-order","call","calling","case","cast","casting","catch","center","centered","chain","chain-input","chain-request","change","changing","channels","character","char-to-hex","check","checkbox","ci_","circular","class","class-coding","class-data","class-events","class-methods","class-pool","cleanup","clear","client","clob","clock","close","coalesce","code","coding","col_background","col_group","col_heading","col_key","col_negative","col_normal","col_positive","col_total","collect","color","column","columns","comment","comments","commit","common","communication","comparing","component","components","compression","compute","concat","concat_with_space","concatenate","cond","condense","condition","connect","connection","constants","context","contexts","continue","control","controls","conv","conversion","convert","copies","copy","corresponding","country","cover","cpi","create","creating","critical","currency","currency_conversion","current","cursor","cursor-selection","customer","customer-function","dangerous","data","database","datainfo","dataset","date","dats_add_days","dats_add_months","dats_days_between","dats_is_valid","daylight","dd/mm/yy","dd/mm/yyyy","ddmmyy","deallocate","decimal_shift","decimals","declarations","deep","default","deferred","define","defining","definition","delete","deleting","demand","department","descending","describe","destination","detail","dialog","directory","disconnect","display","display-mode","distinct","divide","divide-corresponding","division","do","dummy","duplicate","duplicates","duration","during","dynamic","dynpro","edit","editor-call","else","elseif","empty","enabled","enabling","encoding","end","endat","endcase","endcatch","endchain","endclass","enddo","endenhancement","end-enhancement-section","endexec","endform","endfunction","endian","endif","ending","endinterface","end-lines","endloop","endmethod","endmodule","end-of-definition","end-of-editing","end-of-file","end-of-page","end-of-selection","endon","endprovide","endselect","end-test-injection","end-test-seam","endtry","endwhile","endwith","engineering","enhancement","enhancement-point","enhancements","enhancement-section","entries","entry","enum","environment","equiv","errormessage","errors","escaping","event","events","exact","except","exception","exceptions","exception-table","exclude","excluding","exec","execute","exists","exit","exit-command","expand","expanding","expiration","explicit","exponent","export","exporting","extend","extended","extension","extract","fail","fetch","field","field-groups","fields","field-symbol","field-symbols","file","filter","filters","filter-table","final","find","first","first-line","fixed-point","fkeq","fkge","flush","font","for","form","format","forward","found","frame","frames","free","friends","from","function","functionality","function-pool","further","gaps","generate","get","giving","gkeq","gkge","global","grant","green","group","groups","handle","handler","harmless","hashed","having","hdb","header","headers","heading","head-lines","help-id","help-request","hextobin","hide","high","hint","hold","hotspot","icon","id","identification","identifier","ids","if","ignore","ignoring","immediately","implementation","implementations","implemented","implicit","import","importing","in","inactive","incl","include","includes","including","increment","index","index-line","infotypes","inheriting","init","initial","initialization","inner","inout","input","insert","instance","instances","instr","intensified","interface","interface-pool","interfaces","internal","intervals","into","inverse","inverted-date","is","iso","job","join","keep","keeping","kernel","key","keys","keywords","kind","language","last","late","layout","leading","leave","left","left-justified","leftplus","leftspace","legacy","length","let","level","levels","like","line","lines","line-count","linefeed","line-selection","line-size","list","listbox","list-processing","little","llang","load","load-of-program","lob","local","locale","locator","logfile","logical","log-point","long","loop","low","lower","lpad","lpi","ltrim","mail","main","major-id","mapping","margin","mark","mask","match","matchcode","max","maximum","medium","members","memory","mesh","message","message-id","messages","messaging","method","methods","min","minimum","minor-id","mm/dd/yy","mm/dd/yyyy","mmddyy","mode","modif","modifier","modify","module","move","move-corresponding","multiply","multiply-corresponding","name","nametab","native","nested","nesting","new","new-line","new-page","new-section","next","no","no-display","no-extension","no-gap","no-gaps","no-grouping","no-heading","no-scrolling","no-sign","no-title","no-topofpage","no-zero","node","nodes","non-unicode","non-unique","not","null","number","object","objects","obligatory","occurrence","occurrences","occurs","of","off","offset","ole","on","only","open","option","optional","options","or","order","other","others","out","outer","output","output-length","overflow","overlay","pack","package","pad","padding","page","pages","parameter","parameters","parameter-table","part","partially","pattern","percentage","perform","performing","person","pf1","pf10","pf11","pf12","pf13","pf14","pf15","pf2","pf3","pf4","pf5","pf6","pf7","pf8","pf9","pf-status","pink","places","pool","pos_high","pos_low","position","pragmas","precompiled","preferred","preserving","primary","print","print-control","priority","private","procedure","process","program","property","protected","provide","public","push","pushbutton","put","queue-only","quickinfo","radiobutton","raise","raising","range","ranges","read","reader","read-only","receive","received","receiver","receiving","red","redefinition","reduce","reduced","ref","reference","refresh","regex","reject","remote","renaming","replace","replacement","replacing","report","request","requested","reserve","reset","resolution","respecting","responsible","result","results","resumable","resume","retry","return","returncode","returning","returns","right","right-justified","rightplus","rightspace","risk","rmc_communication_failure","rmc_invalid_status","rmc_system_failure","role","rollback","rows","rpad","rtrim","run","sap","sap-spool","saving","scale_preserving","scale_preserving_scientific","scan","scientific","scientific_with_leading_zero","scroll","scroll-boundary","scrolling","search","secondary","seconds","section","select","selection","selections","selection-screen","selection-set","selection-sets","selection-table","select-options","send","separate","separated","set","shared","shift","short","shortdump-id","sign_as_postfix","single","size","skip","skipping","smart","some","sort","sortable","sorted","source","specified","split","spool","spots","sql","sqlscript","stable","stamp","standard","starting","start-of-editing","start-of-selection","state","statement","statements","static","statics","statusinfo","step-loop","stop","structure","structures","style","subkey","submatches","submit","subroutine","subscreen","subtract","subtract-corresponding","suffix","sum","summary","summing","supplied","supply","suppress","switch","switchstates","symbol","syncpoints","syntax","syntax-check","syntax-trace","system-call","system-exceptions","system-exit","tab","tabbed","table","tables","tableview","tabstrip","target","task","tasks","test","testing","test-injection","test-seam","text","textpool","then","throw","time","times","timestamp","timezone","tims_is_valid","title","titlebar","title-lines","to","tokenization","tokens","top-lines","top-of-page","trace-file","trace-table","trailing","transaction","transfer","transformation","translate","transporting","trmac","truncate","truncation","try","tstmp_add_seconds","tstmp_current_utctimestamp","tstmp_is_valid","tstmp_seconds_between","type","type-pool","type-pools","types","uline","unassign","under","unicode","union","unique","unit_conversion","unix","unpack","until","unwind","up","update","upper","user","user-command","using","utf-8","valid","value","value-request","values","vary","varying","verification-message","version","via","view","visible","wait","warning","when","whenever","where","while","width","window","windows","with","with-heading","without","with-title","word","work","write","writer","xml","xsd","yellow","yes","yymmdd","zero","zone","abap_system_timezone","abap_user_timezone","access","action","adabas","adjust_numbers","allow_precision_loss","allowed","amdp","applicationuser","as_geo_json","as400","associations","balance","behavior","breakup","bulk","cds","cds_client","check_before_save","child","clients","corr","corr_spearman","cross","cycles","datn_add_days","datn_add_months","datn_days_between","dats_from_datn","dats_tims_to_tstmp","dats_to_datn","db2","db6","ddl","dense_rank","depth","deterministic","discarding","entities","entity","error","failed","finalize","first_value","fltp_to_dec","following","fractional","full","graph","grouping","hierarchy","hierarchy_ancestors","hierarchy_ancestors_aggregate","hierarchy_descendants","hierarchy_descendants_aggregate","hierarchy_siblings","incremental","indicators","lag","last_value","lead","leaves","like_regexpr","link","locale_sap","lock","locks","many","mapped","matched","measures","median","mssqlnt","multiple","nodetype","ntile","nulls","occurrences_regexpr","one","operations","oracle","orphans","over","parent","parents","partition","pcre","period","pfcg_mapping","preceding","privileged","product","projection","rank","redirected","replace_regexpr","reported","response","responses","root","row","row_number","sap_system_date","save","schema","session","sets","shortdump","siblings","spantree","start","stddev","string_agg","subtotal","sybase","tims_from_timn","tims_to_timn","to_blob","to_clob","total","trace-entry","tstmp_to_dats","tstmp_to_dst","tstmp_to_tims","tstmpl_from_utcl","tstmpl_to_utcl","unbounded","utcl_add_seconds","utcl_current","utcl_seconds_between","uuid","var","verbatim"],builtinFunctions:["abs","acos","asin","atan","bit-set","boolc","boolx","ceil","char_off","charlen","cmax","cmin","concat_lines_of","contains","contains_any_not_of","contains_any_of","cos","cosh","count","count_any_not_of","count_any_of","dbmaxlen","distance","escape","exp","find_any_not_of","find_any_of","find_end","floor","frac","from_mixed","ipow","line_exists","line_index","log","log10","matches","nmax","nmin","numofchar","repeat","rescale","reverse","round","segment","shift_left","shift_right","sign","sin","sinh","sqrt","strlen","substring","substring_after","substring_before","substring_from","substring_to","tan","tanh","to_lower","to_mixed","to_upper","trunc","utclong_add","utclong_current","utclong_diff","xsdbool","xstrlen"],typeKeywords:["b","c","d","decfloat16","decfloat34","f","i","int8","n","p","s","string","t","utclong","x","xstring","any","clike","csequence","decfloat","numeric","simple","xsequence","accp","char","clnt","cuky","curr","datn","dats","d16d","d16n","d16r","d34d","d34n","d34r","dec","df16_dec","df16_raw","df34_dec","df34_raw","fltp","geom_ewkb","int1","int2","int4","lang","lchr","lraw","numc","quan","raw","rawstring","sstring","timn","tims","unit","utcl","df16_scl","df34_scl","prec","varc","abap_bool","abap_false","abap_true","abap_undefined","me","screen","space","super","sy","syst","table_line","*sys*"],builtinMethods:["class_constructor","constructor"],derivedTypes:["%CID","%CID_REF","%CONTROL","%DATA","%ELEMENT","%FAIL","%KEY","%MSG","%PARAM","%PID","%PID_ASSOC","%PID_PARENT","%_HINTS"],cdsLanguage:["@AbapAnnotation","@AbapCatalog","@AccessControl","@API","@ClientDependent","@ClientHandling","@CompatibilityContract","@DataAging","@EndUserText","@Environment","@LanguageDependency","@MappingRole","@Metadata","@MetadataExtension","@ObjectModel","@Scope","@Semantics","$EXTENSION","$SELF"],selectors:["->","->*","=>","~","~*"],operators:[" +"," -","/","*","**","div","mod","=","#","@","+=","-=","*=","/=","**=","&&=","?=","&","&&","bit-and","bit-not","bit-or","bit-xor","m","o","z","<"," >","<=",">=","<>","><","=<","=>","bt","byte-ca","byte-cn","byte-co","byte-cs","byte-na","byte-ns","ca","cn","co","cp","cs","eq","ge","gt","le","lt","na","nb","ne","np","ns","*/","*:","--","/*","//"],symbols:/[=>))*/,{cases:{"@typeKeywords":"type","@keywords":"keyword","@cdsLanguage":"annotation","@derivedTypes":"type","@builtinFunctions":"type","@builtinMethods":"type","@operators":"key","@default":"identifier"}}],[/<[\w]+>/,"identifier"],[/##[\w|_]+/,"comment"],{include:"@whitespace"},[/[:,.]/,"delimiter"],[/[{}()\[\]]/,"@brackets"],[/@symbols/,{cases:{"@selectors":"tag","@operators":"key","@default":""}}],[/'/,{token:"string",bracket:"@open",next:"@stringquote"}],[/`/,{token:"string",bracket:"@open",next:"@stringping"}],[/\|/,{token:"string",bracket:"@open",next:"@stringtemplate"}],[/\d+/,"number"]],stringtemplate:[[/[^\\\|]+/,"string"],[/\\\|/,"string"],[/\|/,{token:"string",bracket:"@close",next:"@pop"}]],stringping:[[/[^\\`]+/,"string"],[/`/,{token:"string",bracket:"@close",next:"@pop"}]],stringquote:[[/[^\\']+/,"string"],[/'/,{token:"string",bracket:"@close",next:"@pop"}]],whitespace:[[/[ \t\r\n]+/,""],[/^\*.*$/,"comment"],[/\".*$/,"comment"]]}};return p(g);})(); +return moduleExports; +}); diff --git a/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/apex.js b/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/apex.js new file mode 100644 index 00000000000..42869976e0f --- /dev/null +++ b/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/apex.js @@ -0,0 +1,10 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f) + * Released under the MIT license + * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/apex/apex", ["require","require"],(require)=>{ +"use strict";var moduleExports=(()=>{var i=Object.defineProperty;var r=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var d=(e,t)=>{for(var s in t)i(e,s,{get:t[s],enumerable:!0})},g=(e,t,s,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of c(t))!l.call(e,o)&&o!==s&&i(e,o,{get:()=>t[o],enumerable:!(a=r(t,o))||a.enumerable});return e};var p=e=>g(i({},"__esModule",{value:!0}),e);var h={};d(h,{conf:()=>m,language:()=>b});var m={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\#\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"},{open:"<",close:">"}],folding:{markers:{start:new RegExp("^\\s*//\\s*(?:(?:#?region\\b)|(?:))")}}},u=["abstract","activate","and","any","array","as","asc","assert","autonomous","begin","bigdecimal","blob","boolean","break","bulk","by","case","cast","catch","char","class","collect","commit","const","continue","convertcurrency","decimal","default","delete","desc","do","double","else","end","enum","exception","exit","export","extends","false","final","finally","float","for","from","future","get","global","goto","group","having","hint","if","implements","import","in","inner","insert","instanceof","int","interface","into","join","last_90_days","last_month","last_n_days","last_week","like","limit","list","long","loop","map","merge","native","new","next_90_days","next_month","next_n_days","next_week","not","null","nulls","number","object","of","on","or","outer","override","package","parallel","pragma","private","protected","public","retrieve","return","returning","rollback","savepoint","search","select","set","short","sort","stat","static","strictfp","super","switch","synchronized","system","testmethod","then","this","this_month","this_week","throw","throws","today","tolabel","tomorrow","transaction","transient","trigger","true","try","type","undelete","update","upsert","using","virtual","void","volatile","webservice","when","where","while","yesterday"],f=e=>e.charAt(0).toUpperCase()+e.substr(1),n=[];u.forEach(e=>{n.push(e),n.push(e.toUpperCase()),n.push(f(e))});var b={defaultToken:"",tokenPostfix:".apex",keywords:n,operators:["=",">","<","!","~","?",":","==","<=",">=","!=","&&","||","++","--","+","-","*","/","&","|","^","%","<<",">>",">>>","+=","-=","*=","/=","&=","|=","^=","%=","<<=",">>=",">>>="],symbols:/[=>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/@\s*[a-zA-Z_\$][\w\$]*/,"annotation"],[/(@digits)[eE]([\-+]?(@digits))?[fFdD]?/,"number.float"],[/(@digits)\.(@digits)([eE][\-+]?(@digits))?[fFdD]?/,"number.float"],[/(@digits)[fFdD]/,"number.float"],[/(@digits)[lL]?/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/"/,"string",'@string."'],[/'/,"string","@string.'"],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*\*(?!\/)/,"comment.doc","@apexdoc"],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],apexdoc:[[/[^\/*]+/,"comment.doc"],[/\*\//,"comment.doc","@pop"],[/[\/*]/,"comment.doc"]],string:[[/[^\\"']+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/["']/,{cases:{"$#==$S2":{token:"string",next:"@pop"},"@default":"string"}}]]}};return p(h);})(); +return moduleExports; +}); diff --git a/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/azcli.js b/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/azcli.js new file mode 100644 index 00000000000..0d0e5c0eb34 --- /dev/null +++ b/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/azcli.js @@ -0,0 +1,10 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f) + * Released under the MIT license + * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/azcli/azcli", ["require","require"],(require)=>{ +"use strict";var moduleExports=(()=>{var s=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var r=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var c=(t,e)=>{for(var o in e)s(t,o,{get:e[o],enumerable:!0})},k=(t,e,o,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of r(e))!l.call(t,n)&&n!==o&&s(t,n,{get:()=>e[n],enumerable:!(a=i(e,n))||a.enumerable});return t};var p=t=>k(s({},"__esModule",{value:!0}),t);var d={};c(d,{conf:()=>f,language:()=>g});var f={comments:{lineComment:"#"}},g={defaultToken:"keyword",ignoreCase:!0,tokenPostfix:".azcli",str:/[^#\s]/,tokenizer:{root:[{include:"@comment"},[/\s-+@str*\s*/,{cases:{"@eos":{token:"key.identifier",next:"@popall"},"@default":{token:"key.identifier",next:"@type"}}}],[/^-+@str*\s*/,{cases:{"@eos":{token:"key.identifier",next:"@popall"},"@default":{token:"key.identifier",next:"@type"}}}]],type:[{include:"@comment"},[/-+@str*\s*/,{cases:{"@eos":{token:"key.identifier",next:"@popall"},"@default":"key.identifier"}}],[/@str+\s*/,{cases:{"@eos":{token:"string",next:"@popall"},"@default":"string"}}]],comment:[[/#.*$/,{cases:{"@eos":{token:"comment",next:"@popall"}}}]]}};return p(d);})(); +return moduleExports; +}); diff --git a/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/bat.js b/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/bat.js new file mode 100644 index 00000000000..2f3ef12b691 --- /dev/null +++ b/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/bat.js @@ -0,0 +1,10 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f) + * Released under the MIT license + * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/bat/bat", ["require","require"],(require)=>{ +"use strict";var moduleExports=(()=>{var n=Object.defineProperty;var r=Object.getOwnPropertyDescriptor;var l=Object.getOwnPropertyNames;var i=Object.prototype.hasOwnProperty;var g=(o,e)=>{for(var t in e)n(o,t,{get:e[t],enumerable:!0})},c=(o,e,t,a)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of l(e))!i.call(o,s)&&s!==t&&n(o,s,{get:()=>e[s],enumerable:!(a=r(e,s))||a.enumerable});return o};var p=o=>c(n({},"__esModule",{value:!0}),o);var k={};g(k,{conf:()=>d,language:()=>m});var d={comments:{lineComment:"REM"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'}],surroundingPairs:[{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'}],folding:{markers:{start:new RegExp("^\\s*(::\\s*|REM\\s+)#region"),end:new RegExp("^\\s*(::\\s*|REM\\s+)#endregion")}}},m={defaultToken:"",ignoreCase:!0,tokenPostfix:".bat",brackets:[{token:"delimiter.bracket",open:"{",close:"}"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"delimiter.square",open:"[",close:"]"}],keywords:/call|defined|echo|errorlevel|exist|for|goto|if|pause|set|shift|start|title|not|pushd|popd/,symbols:/[=>{ +"use strict";var moduleExports=(()=>{var r=Object.defineProperty;var s=Object.getOwnPropertyDescriptor;var c=Object.getOwnPropertyNames;var a=Object.prototype.hasOwnProperty;var g=(e,n)=>{for(var o in n)r(e,o,{get:n[o],enumerable:!0})},l=(e,n,o,i)=>{if(n&&typeof n=="object"||typeof n=="function")for(let t of c(n))!a.call(e,t)&&t!==o&&r(e,t,{get:()=>n[t],enumerable:!(i=s(n,t))||i.enumerable});return e};var m=e=>l(r({},"__esModule",{value:!0}),e);var y={};g(y,{conf:()=>$,language:()=>w});var p=e=>`\\b${e}\\b`,k="[_a-zA-Z]",x="[_a-zA-Z0-9]",u=p(`${k}${x}*`),d=["targetScope","resource","module","param","var","output","for","in","if","existing"],b=["true","false","null"],f="[ \\t\\r\\n]",C="[0-9]+",$={comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"'",close:"'"},{open:"'''",close:"'''"}],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"'",close:"'",notIn:["string","comment"]},{open:"'''",close:"'''",notIn:["string","comment"]}],autoCloseBefore:`:.,=}])' + `,indentationRules:{increaseIndentPattern:new RegExp("^((?!\\/\\/).)*(\\{[^}\"'`]*|\\([^)\"'`]*|\\[[^\\]\"'`]*)$"),decreaseIndentPattern:new RegExp("^((?!.*?\\/\\*).*\\*/)?\\s*[\\}\\]].*$")}},w={defaultToken:"",tokenPostfix:".bicep",brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"}],symbols:/[=>{ +"use strict";var moduleExports=(()=>{var s=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var c=(o,e)=>{for(var n in e)s(o,n,{get:e[n],enumerable:!0})},m=(o,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of a(e))!l.call(o,t)&&t!==n&&s(o,t,{get:()=>e[t],enumerable:!(r=i(e,t))||r.enumerable});return o};var p=o=>m(s({},"__esModule",{value:!0}),o);var u={};c(u,{conf:()=>d,language:()=>g});var d={comments:{lineComment:"//",blockComment:["(*","*)"]},brackets:[["{","}"],["[","]"],["(",")"],["<",">"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"},{open:"'",close:"'"},{open:'"',close:'"'},{open:"(*",close:"*)"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"},{open:"'",close:"'"},{open:'"',close:'"'},{open:"(*",close:"*)"}]},g={defaultToken:"",tokenPostfix:".cameligo",ignoreCase:!0,brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],keywords:["abs","assert","block","Bytes","case","Crypto","Current","else","failwith","false","for","fun","if","in","let","let%entry","let%init","List","list","Map","map","match","match%nat","mod","not","operation","Operation","of","record","Set","set","sender","skip","source","String","then","to","true","type","with"],typeKeywords:["int","unit","string","tz","nat","bool"],operators:["=",">","<","<=",">=","<>",":",":=","and","mod","or","+","-","*","/","@","&","^","%","->","<-","&&","||"],symbols:/[=><:@\^&|+\-*\/\^%]+/,tokenizer:{root:[[/[a-zA-Z_][\w]*/,{cases:{"@keywords":{token:"keyword.$0"},"@default":"identifier"}}],{include:"@whitespace"},[/[{}()\[\]]/,"@brackets"],[/[<>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/\d*\.\d+([eE][\-+]?\d+)?/,"number.float"],[/\$[0-9a-fA-F]{1,16}/,"number.hex"],[/\d+/,"number"],[/[;,.]/,"delimiter"],[/'([^'\\]|\\.)*$/,"string.invalid"],[/'/,"string","@string"],[/'[^\\']'/,"string"],[/'/,"string.invalid"],[/\#\d+/,"string"]],comment:[[/[^\(\*]+/,"comment"],[/\*\)/,"comment","@pop"],[/\(\*/,"comment"]],string:[[/[^\\']+/,"string"],[/\\./,"string.escape.invalid"],[/'/,{token:"string.quote",bracket:"@close",next:"@pop"}]],whitespace:[[/[ \t\r\n]+/,"white"],[/\(\*/,"comment","@comment"],[/\/\/.*$/,"comment"]]}};return p(u);})(); +return moduleExports; +}); diff --git a/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/clojure.js b/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/clojure.js new file mode 100644 index 00000000000..b469c57d59f --- /dev/null +++ b/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/clojure.js @@ -0,0 +1,10 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f) + * Released under the MIT license + * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/clojure/clojure", ["require","require"],(require)=>{ +"use strict";var moduleExports=(()=>{var a=Object.defineProperty;var o=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var d=(t,e)=>{for(var r in e)a(t,r,{get:e[r],enumerable:!0})},l=(t,e,r,s)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of i(e))!c.call(t,n)&&n!==r&&a(t,n,{get:()=>e[n],enumerable:!(s=o(e,n))||s.enumerable});return t};var p=t=>l(a({},"__esModule",{value:!0}),t);var h={};d(h,{conf:()=>u,language:()=>m});var u={comments:{lineComment:";;"},brackets:[["[","]"],["(",")"],["{","}"]],autoClosingPairs:[{open:"[",close:"]"},{open:'"',close:'"'},{open:"(",close:")"},{open:"{",close:"}"}],surroundingPairs:[{open:"[",close:"]"},{open:'"',close:'"'},{open:"(",close:")"},{open:"{",close:"}"}]},m={defaultToken:"",ignoreCase:!0,tokenPostfix:".clj",brackets:[{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"{",close:"}",token:"delimiter.curly"}],constants:["true","false","nil"],numbers:/^(?:[+\-]?\d+(?:(?:N|(?:[eE][+\-]?\d+))|(?:\.?\d*(?:M|(?:[eE][+\-]?\d+))?)|\/\d+|[xX][0-9a-fA-F]+|r[0-9a-zA-Z]+)?(?=[\\\[\]\s"#'(),;@^`{}~]|$))/,characters:/^(?:\\(?:backspace|formfeed|newline|return|space|tab|o[0-7]{3}|u[0-9A-Fa-f]{4}|x[0-9A-Fa-f]{4}|.)?(?=[\\\[\]\s"(),;@^`{}~]|$))/,escapes:/^\\(?:["'\\bfnrt]|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,qualifiedSymbols:/^(?:(?:[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*(?:\.[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*)*\/)?(?:\/|[^\\\/\[\]\d\s"#'(),;@^`{}~][^\\\[\]\s"(),;@^`{}~]*)*(?=[\\\[\]\s"(),;@^`{}~]|$))/,specialForms:[".","catch","def","do","if","monitor-enter","monitor-exit","new","quote","recur","set!","throw","try","var"],coreSymbols:["*","*'","*1","*2","*3","*agent*","*allow-unresolved-vars*","*assert*","*clojure-version*","*command-line-args*","*compile-files*","*compile-path*","*compiler-options*","*data-readers*","*default-data-reader-fn*","*e","*err*","*file*","*flush-on-newline*","*fn-loader*","*in*","*math-context*","*ns*","*out*","*print-dup*","*print-length*","*print-level*","*print-meta*","*print-namespace-maps*","*print-readably*","*read-eval*","*reader-resolver*","*source-path*","*suppress-read*","*unchecked-math*","*use-context-classloader*","*verbose-defrecords*","*warn-on-reflection*","+","+'","-","-'","->","->>","->ArrayChunk","->Eduction","->Vec","->VecNode","->VecSeq","-cache-protocol-fn","-reset-methods","..","/","<","<=","=","==",">",">=","EMPTY-NODE","Inst","StackTraceElement->vec","Throwable->map","accessor","aclone","add-classpath","add-watch","agent","agent-error","agent-errors","aget","alength","alias","all-ns","alter","alter-meta!","alter-var-root","amap","ancestors","and","any?","apply","areduce","array-map","as->","aset","aset-boolean","aset-byte","aset-char","aset-double","aset-float","aset-int","aset-long","aset-short","assert","assoc","assoc!","assoc-in","associative?","atom","await","await-for","await1","bases","bean","bigdec","bigint","biginteger","binding","bit-and","bit-and-not","bit-clear","bit-flip","bit-not","bit-or","bit-set","bit-shift-left","bit-shift-right","bit-test","bit-xor","boolean","boolean-array","boolean?","booleans","bound-fn","bound-fn*","bound?","bounded-count","butlast","byte","byte-array","bytes","bytes?","case","cast","cat","char","char-array","char-escape-string","char-name-string","char?","chars","chunk","chunk-append","chunk-buffer","chunk-cons","chunk-first","chunk-next","chunk-rest","chunked-seq?","class","class?","clear-agent-errors","clojure-version","coll?","comment","commute","comp","comparator","compare","compare-and-set!","compile","complement","completing","concat","cond","cond->","cond->>","condp","conj","conj!","cons","constantly","construct-proxy","contains?","count","counted?","create-ns","create-struct","cycle","dec","dec'","decimal?","declare","dedupe","default-data-readers","definline","definterface","defmacro","defmethod","defmulti","defn","defn-","defonce","defprotocol","defrecord","defstruct","deftype","delay","delay?","deliver","denominator","deref","derive","descendants","destructure","disj","disj!","dissoc","dissoc!","distinct","distinct?","doall","dorun","doseq","dosync","dotimes","doto","double","double-array","double?","doubles","drop","drop-last","drop-while","eduction","empty","empty?","ensure","ensure-reduced","enumeration-seq","error-handler","error-mode","eval","even?","every-pred","every?","ex-data","ex-info","extend","extend-protocol","extend-type","extenders","extends?","false?","ffirst","file-seq","filter","filterv","find","find-keyword","find-ns","find-protocol-impl","find-protocol-method","find-var","first","flatten","float","float-array","float?","floats","flush","fn","fn?","fnext","fnil","for","force","format","frequencies","future","future-call","future-cancel","future-cancelled?","future-done?","future?","gen-class","gen-interface","gensym","get","get-in","get-method","get-proxy-class","get-thread-bindings","get-validator","group-by","halt-when","hash","hash-combine","hash-map","hash-ordered-coll","hash-set","hash-unordered-coll","ident?","identical?","identity","if-let","if-not","if-some","ifn?","import","in-ns","inc","inc'","indexed?","init-proxy","inst-ms","inst-ms*","inst?","instance?","int","int-array","int?","integer?","interleave","intern","interpose","into","into-array","ints","io!","isa?","iterate","iterator-seq","juxt","keep","keep-indexed","key","keys","keyword","keyword?","last","lazy-cat","lazy-seq","let","letfn","line-seq","list","list*","list?","load","load-file","load-reader","load-string","loaded-libs","locking","long","long-array","longs","loop","macroexpand","macroexpand-1","make-array","make-hierarchy","map","map-entry?","map-indexed","map?","mapcat","mapv","max","max-key","memfn","memoize","merge","merge-with","meta","method-sig","methods","min","min-key","mix-collection-hash","mod","munge","name","namespace","namespace-munge","nat-int?","neg-int?","neg?","newline","next","nfirst","nil?","nnext","not","not-any?","not-empty","not-every?","not=","ns","ns-aliases","ns-imports","ns-interns","ns-map","ns-name","ns-publics","ns-refers","ns-resolve","ns-unalias","ns-unmap","nth","nthnext","nthrest","num","number?","numerator","object-array","odd?","or","parents","partial","partition","partition-all","partition-by","pcalls","peek","persistent!","pmap","pop","pop!","pop-thread-bindings","pos-int?","pos?","pr","pr-str","prefer-method","prefers","primitives-classnames","print","print-ctor","print-dup","print-method","print-simple","print-str","printf","println","println-str","prn","prn-str","promise","proxy","proxy-call-with-super","proxy-mappings","proxy-name","proxy-super","push-thread-bindings","pvalues","qualified-ident?","qualified-keyword?","qualified-symbol?","quot","rand","rand-int","rand-nth","random-sample","range","ratio?","rational?","rationalize","re-find","re-groups","re-matcher","re-matches","re-pattern","re-seq","read","read-line","read-string","reader-conditional","reader-conditional?","realized?","record?","reduce","reduce-kv","reduced","reduced?","reductions","ref","ref-history-count","ref-max-history","ref-min-history","ref-set","refer","refer-clojure","reify","release-pending-sends","rem","remove","remove-all-methods","remove-method","remove-ns","remove-watch","repeat","repeatedly","replace","replicate","require","reset!","reset-meta!","reset-vals!","resolve","rest","restart-agent","resultset-seq","reverse","reversible?","rseq","rsubseq","run!","satisfies?","second","select-keys","send","send-off","send-via","seq","seq?","seqable?","seque","sequence","sequential?","set","set-agent-send-executor!","set-agent-send-off-executor!","set-error-handler!","set-error-mode!","set-validator!","set?","short","short-array","shorts","shuffle","shutdown-agents","simple-ident?","simple-keyword?","simple-symbol?","slurp","some","some->","some->>","some-fn","some?","sort","sort-by","sorted-map","sorted-map-by","sorted-set","sorted-set-by","sorted?","special-symbol?","spit","split-at","split-with","str","string?","struct","struct-map","subs","subseq","subvec","supers","swap!","swap-vals!","symbol","symbol?","sync","tagged-literal","tagged-literal?","take","take-last","take-nth","take-while","test","the-ns","thread-bound?","time","to-array","to-array-2d","trampoline","transduce","transient","tree-seq","true?","type","unchecked-add","unchecked-add-int","unchecked-byte","unchecked-char","unchecked-dec","unchecked-dec-int","unchecked-divide-int","unchecked-double","unchecked-float","unchecked-inc","unchecked-inc-int","unchecked-int","unchecked-long","unchecked-multiply","unchecked-multiply-int","unchecked-negate","unchecked-negate-int","unchecked-remainder-int","unchecked-short","unchecked-subtract","unchecked-subtract-int","underive","unquote","unquote-splicing","unreduced","unsigned-bit-shift-right","update","update-in","update-proxy","uri?","use","uuid?","val","vals","var-get","var-set","var?","vary-meta","vec","vector","vector-of","vector?","volatile!","volatile?","vreset!","vswap!","when","when-first","when-let","when-not","when-some","while","with-bindings","with-bindings*","with-in-str","with-loading-context","with-local-vars","with-meta","with-open","with-out-str","with-precision","with-redefs","with-redefs-fn","xml-seq","zero?","zipmap"],tokenizer:{root:[{include:"@whitespace"},[/@numbers/,"number"],[/@characters/,"string"],{include:"@string"},[/[()\[\]{}]/,"@brackets"],[/\/#"(?:\.|(?:")|[^"\n])*"\/g/,"regexp"],[/[#'@^`~]/,"meta"],[/@qualifiedSymbols/,{cases:{"^:.+$":"constant","@specialForms":"keyword","@coreSymbols":"keyword","@constants":"constant","@default":"identifier"}}]],whitespace:[[/[\s,]+/,"white"],[/;.*$/,"comment"],[/\(comment\b/,"comment","@comment"]],comment:[[/\(/,"comment","@push"],[/\)/,"comment","@pop"],[/[^()]/,"comment"]],string:[[/"/,"string","@multiLineString"]],multiLineString:[[/"/,"string","@popall"],[/@escapes/,"string.escape"],[/./,"string"]]}};return p(h);})(); +return moduleExports; +}); diff --git a/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/codicon.ttf b/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/codicon.ttf new file mode 100644 index 00000000000..4894dfa316d Binary files /dev/null and b/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/codicon.ttf differ diff --git a/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/coffee.js b/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/coffee.js new file mode 100644 index 00000000000..ef54f544c57 --- /dev/null +++ b/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/coffee.js @@ -0,0 +1,10 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f) + * Released under the MIT license + * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/coffee/coffee", ["require","require"],(require)=>{ +"use strict";var moduleExports=(()=>{var s=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var g=Object.getOwnPropertyNames;var a=Object.prototype.hasOwnProperty;var l=(n,e)=>{for(var t in e)s(n,t,{get:e[t],enumerable:!0})},p=(n,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of g(e))!a.call(n,r)&&r!==t&&s(n,r,{get:()=>e[r],enumerable:!(o=i(e,r))||o.enumerable});return n};var c=n=>p(s({},"__esModule",{value:!0}),n);var m={};l(m,{conf:()=>d,language:()=>x});var d={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\@\#%\^\&\*\(\)\=\$\-\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{blockComment:["###","###"],lineComment:"#"},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{markers:{start:new RegExp("^\\s*#region\\b"),end:new RegExp("^\\s*#endregion\\b")}}},x={defaultToken:"",ignoreCase:!0,tokenPostfix:".coffee",brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"}],regEx:/\/(?!\/\/)(?:[^\/\\]|\\.)*\/[igm]*/,keywords:["and","or","is","isnt","not","on","yes","@","no","off","true","false","null","this","new","delete","typeof","in","instanceof","return","throw","break","continue","debugger","if","else","switch","for","while","do","try","catch","finally","class","extends","super","undefined","then","unless","until","loop","of","by","when"],symbols:/[=>{ +"use strict";var moduleExports=(()=>{var r=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var _=Object.getOwnPropertyNames;var s=Object.prototype.hasOwnProperty;var c=(n,e)=>{for(var i in e)r(n,i,{get:e[i],enumerable:!0})},l=(n,e,i,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let t of _(e))!s.call(n,t)&&t!==i&&r(n,t,{get:()=>e[t],enumerable:!(o=a(e,t))||o.enumerable});return n};var d=n=>l(r({},"__esModule",{value:!0}),n);var g={};c(g,{conf:()=>p,language:()=>m});var p={comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"[",close:"]"},{open:"{",close:"}"},{open:"(",close:")"},{open:"'",close:"'",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{markers:{start:new RegExp("^\\s*#pragma\\s+region\\b"),end:new RegExp("^\\s*#pragma\\s+endregion\\b")}}},m={defaultToken:"",tokenPostfix:".cpp",brackets:[{token:"delimiter.curly",open:"{",close:"}"},{token:"delimiter.parenthesis",open:"(",close:")"},{token:"delimiter.square",open:"[",close:"]"},{token:"delimiter.angle",open:"<",close:">"}],keywords:["abstract","amp","array","auto","bool","break","case","catch","char","class","const","constexpr","const_cast","continue","cpu","decltype","default","delegate","delete","do","double","dynamic_cast","each","else","enum","event","explicit","export","extern","false","final","finally","float","for","friend","gcnew","generic","goto","if","in","initonly","inline","int","interface","interior_ptr","internal","literal","long","mutable","namespace","new","noexcept","nullptr","__nullptr","operator","override","partial","pascal","pin_ptr","private","property","protected","public","ref","register","reinterpret_cast","restrict","return","safe_cast","sealed","short","signed","sizeof","static","static_assert","static_cast","struct","switch","template","this","thread_local","throw","tile_static","true","try","typedef","typeid","typename","union","unsigned","using","virtual","void","volatile","wchar_t","where","while","_asm","_based","_cdecl","_declspec","_fastcall","_if_exists","_if_not_exists","_inline","_multiple_inheritance","_pascal","_single_inheritance","_stdcall","_virtual_inheritance","_w64","__abstract","__alignof","__asm","__assume","__based","__box","__builtin_alignof","__cdecl","__clrcall","__declspec","__delegate","__event","__except","__fastcall","__finally","__forceinline","__gc","__hook","__identifier","__if_exists","__if_not_exists","__inline","__int128","__int16","__int32","__int64","__int8","__interface","__leave","__m128","__m128d","__m128i","__m256","__m256d","__m256i","__m512","__m512d","__m512i","__m64","__multiple_inheritance","__newslot","__nogc","__noop","__nounwind","__novtordisp","__pascal","__pin","__pragma","__property","__ptr32","__ptr64","__raise","__restrict","__resume","__sealed","__single_inheritance","__stdcall","__super","__thiscall","__try","__try_cast","__typeof","__unaligned","__unhook","__uuidof","__value","__virtual_inheritance","__w64","__wchar_t"],operators:["=",">","<","!","~","?",":","==","<=",">=","!=","&&","||","++","--","+","-","*","/","&","|","^","%","<<",">>","+=","-=","*=","/=","&=","|=","^=","%=","<<=",">>="],symbols:/[=>\[\]]/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/\d*\d+[eE]([\-+]?\d+)?(@floatsuffix)/,"number.float"],[/\d*\.\d+([eE][\-+]?\d+)?(@floatsuffix)/,"number.float"],[/0[xX][0-9a-fA-F']*[0-9a-fA-F](@integersuffix)/,"number.hex"],[/0[0-7']*[0-7](@integersuffix)/,"number.octal"],[/0[bB][0-1']*[0-1](@integersuffix)/,"number.binary"],[/\d[\d']*\d(@integersuffix)/,"number"],[/\d(@integersuffix)/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,"string","@string"],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],whitespace:[[/[ \t\r\n]+/,""],[/\/\*\*(?!\/)/,"comment.doc","@doccomment"],[/\/\*/,"comment","@comment"],[/\/\/.*\\$/,"comment","@linecomment"],[/\/\/.*$/,"comment"]],comment:[[/[^\/*]+/,"comment"],[/\*\//,"comment","@pop"],[/[\/*]/,"comment"]],linecomment:[[/.*[^\\]$/,"comment","@pop"],[/[^]+/,"comment"]],doccomment:[[/[^\/*]+/,"comment.doc"],[/\*\//,"comment.doc","@pop"],[/[\/*]/,"comment.doc"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,"string","@pop"]],raw:[[/(.*)(\))(?:([^ ()\\\t"]*))(\")/,{cases:{"$3==$S2":["string.raw","string.raw.end","string.raw.end",{token:"string.raw.end",next:"@pop"}],"@default":["string.raw","string.raw","string.raw","string.raw"]}}],[/.*/,"string.raw"]],annotation:[{include:"@whitespace"},[/using|alignas/,"keyword"],[/[a-zA-Z0-9_]+/,"annotation"],[/[,:]/,"delimiter"],[/[()]/,"@brackets"],[/\]\s*\]/,{token:"annotation",next:"@pop"}]],include:[[/(\s*)(<)([^<>]*)(>)/,["","keyword.directive.include.begin","string.include.identifier",{token:"keyword.directive.include.end",next:"@pop"}]],[/(\s*)(")([^"]*)(")/,["","keyword.directive.include.begin","string.include.identifier",{token:"keyword.directive.include.end",next:"@pop"}]]]}};return d(g);})(); +return moduleExports; +}); diff --git a/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/csharp.js b/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/csharp.js new file mode 100644 index 00000000000..227f65a3fa0 --- /dev/null +++ b/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/csharp.js @@ -0,0 +1,10 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f) + * Released under the MIT license + * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/csharp/csharp", ["require","require"],(require)=>{ +"use strict";var moduleExports=(()=>{var s=Object.defineProperty;var r=Object.getOwnPropertyDescriptor;var a=Object.getOwnPropertyNames;var c=Object.prototype.hasOwnProperty;var l=(t,e)=>{for(var o in e)s(t,o,{get:e[o],enumerable:!0})},p=(t,e,o,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of a(e))!c.call(t,n)&&n!==o&&s(t,n,{get:()=>e[n],enumerable:!(i=r(e,n))||i.enumerable});return t};var g=t=>p(s({},"__esModule",{value:!0}),t);var u={};l(u,{conf:()=>d,language:()=>m});var d={wordPattern:/(-?\d*\.\d\w*)|([^\`\~\!\#\$\%\^\&\*\(\)\-\=\+\[\{\]\}\\\|\;\:\'\"\,\.\<\>\/\?\s]+)/g,comments:{lineComment:"//",blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"'",close:"'",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string","comment"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">"},{open:"'",close:"'"},{open:'"',close:'"'}],folding:{markers:{start:new RegExp("^\\s*#region\\b"),end:new RegExp("^\\s*#endregion\\b")}}},m={defaultToken:"",tokenPostfix:".cs",brackets:[{open:"{",close:"}",token:"delimiter.curly"},{open:"[",close:"]",token:"delimiter.square"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],keywords:["extern","alias","using","bool","decimal","sbyte","byte","short","ushort","int","uint","long","ulong","char","float","double","object","dynamic","string","assembly","is","as","ref","out","this","base","new","typeof","void","checked","unchecked","default","delegate","var","const","if","else","switch","case","while","do","for","foreach","in","break","continue","goto","return","throw","try","catch","finally","lock","yield","from","let","where","join","on","equals","into","orderby","ascending","descending","select","group","by","namespace","partial","class","field","event","method","param","public","protected","internal","private","abstract","sealed","static","struct","readonly","volatile","virtual","override","params","get","set","add","remove","operator","true","false","implicit","explicit","interface","enum","null","async","await","fixed","sizeof","stackalloc","unsafe","nameof","when"],namespaceFollows:["namespace","using"],parenFollows:["if","for","while","switch","foreach","using","catch","when"],operators:["=","??","||","&&","|","^","&","==","!=","<=",">=","<<","+","-","*","/","%","!","~","++","--","+=","-=","*=","/=","%=","&=","|=","^=","<<=",">>=",">>","=>"],symbols:/[=>](?!@symbols)/,"@brackets"],[/@symbols/,{cases:{"@operators":"delimiter","@default":""}}],[/[0-9_]*\.[0-9_]+([eE][\-+]?\d+)?[fFdD]?/,"number.float"],[/0[xX][0-9a-fA-F_]+/,"number.hex"],[/0[bB][01_]+/,"number.hex"],[/[0-9_]+/,"number"],[/[;,.]/,"delimiter"],[/"([^"\\]|\\.)*$/,"string.invalid"],[/"/,{token:"string.quote",next:"@string"}],[/\$\@"/,{token:"string.quote",next:"@litinterpstring"}],[/\@"/,{token:"string.quote",next:"@litstring"}],[/\$"/,{token:"string.quote",next:"@interpolatedstring"}],[/'[^\\']'/,"string"],[/(')(@escapes)(')/,["string","string.escape","string"]],[/'/,"string.invalid"]],qualified:[[/[a-zA-Z_][\w]*/,{cases:{"@keywords":{token:"keyword.$0"},"@default":"identifier"}}],[/\./,"delimiter"],["","","@pop"]],namespace:[{include:"@whitespace"},[/[A-Z]\w*/,"namespace"],[/[\.=]/,"delimiter"],["","","@pop"]],comment:[[/[^\/*]+/,"comment"],["\\*/","comment","@pop"],[/[\/*]/,"comment"]],string:[[/[^\\"]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/"/,{token:"string.quote",next:"@pop"}]],litstring:[[/[^"]+/,"string"],[/""/,"string.escape"],[/"/,{token:"string.quote",next:"@pop"}]],litinterpstring:[[/[^"{]+/,"string"],[/""/,"string.escape"],[/{{/,"string.escape"],[/}}/,"string.escape"],[/{/,{token:"string.quote",next:"root.litinterpstring"}],[/"/,{token:"string.quote",next:"@pop"}]],interpolatedstring:[[/[^\\"{]+/,"string"],[/@escapes/,"string.escape"],[/\\./,"string.escape.invalid"],[/{{/,"string.escape"],[/}}/,"string.escape"],[/{/,{token:"string.quote",next:"root.interpolatedstring"}],[/"/,{token:"string.quote",next:"@pop"}]],whitespace:[[/^[ \t\v\f]*#((r)|(load))(?=\s)/,"directive.csx"],[/^[ \t\v\f]*#\w.*$/,"namespace.cpp"],[/[ \t\v\f\r\n]+/,""],[/\/\*/,"comment","@comment"],[/\/\/.*$/,"comment"]]}};return g(u);})(); +return moduleExports; +}); diff --git a/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/csp.js b/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/csp.js new file mode 100644 index 00000000000..1eea1630128 --- /dev/null +++ b/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/csp.js @@ -0,0 +1,10 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f) + * Released under the MIT license + * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt + *-----------------------------------------------------------------------------*/ +define("vs/basic-languages/csp/csp", ["require","require"],(require)=>{ +"use strict";var moduleExports=(()=>{var o=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var u=Object.getOwnPropertyNames;var g=Object.prototype.hasOwnProperty;var a=(r,t)=>{for(var s in t)o(r,s,{get:t[s],enumerable:!0})},c=(r,t,s,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of u(t))!g.call(r,e)&&e!==s&&o(r,e,{get:()=>t[e],enumerable:!(n=i(t,e))||n.enumerable});return r};var q=r=>c(o({},"__esModule",{value:!0}),r);var p={};a(p,{conf:()=>f,language:()=>l});var f={brackets:[],autoClosingPairs:[],surroundingPairs:[]},l={keywords:[],typeKeywords:[],tokenPostfix:".csp",operators:[],symbols:/[=>{ +"use strict";var moduleExports=(()=>{var r=Object.defineProperty;var a=Object.getOwnPropertyDescriptor;var s=Object.getOwnPropertyNames;var l=Object.prototype.hasOwnProperty;var m=(t,e)=>{for(var o in e)r(t,o,{get:e[o],enumerable:!0})},c=(t,e,o,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of s(e))!l.call(t,n)&&n!==o&&r(t,n,{get:()=>e[n],enumerable:!(i=a(e,n))||i.enumerable});return t};var d=t=>c(r({},"__esModule",{value:!0}),t);var k={};m(k,{conf:()=>u,language:()=>p});var u={wordPattern:/(#?-?\d*\.\d\w*%?)|((::|[@#.!:])?[\w-?]+%?)|::|[@#.!:]/g,comments:{blockComment:["/*","*/"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}",notIn:["string","comment"]},{open:"[",close:"]",notIn:["string","comment"]},{open:"(",close:")",notIn:["string","comment"]},{open:'"',close:'"',notIn:["string","comment"]},{open:"'",close:"'",notIn:["string","comment"]}],surroundingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:'"',close:'"'},{open:"'",close:"'"}],folding:{markers:{start:new RegExp("^\\s*\\/\\*\\s*#region\\b\\s*(.*?)\\s*\\*\\/"),end:new RegExp("^\\s*\\/\\*\\s*#endregion\\b.*\\*\\/")}}},p={defaultToken:"",tokenPostfix:".css",ws:`[ +\r\f]*`,identifier:"-?-?([a-zA-Z]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))([\\w\\-]|(\\\\(([0-9a-fA-F]{1,6}\\s?)|[^[0-9a-fA-F])))*",brackets:[{open:"{",close:"}",token:"delimiter.bracket"},{open:"[",close:"]",token:"delimiter.bracket"},{open:"(",close:")",token:"delimiter.parenthesis"},{open:"<",close:">",token:"delimiter.angle"}],tokenizer:{root:[{include:"@selector"}],selector:[{include:"@comments"},{include:"@import"},{include:"@strings"},["[@](keyframes|-webkit-keyframes|-moz-keyframes|-o-keyframes)",{token:"keyword",next:"@keyframedeclaration"}],["[@](page|content|font-face|-moz-document)",{token:"keyword"}],["[@](charset|namespace)",{token:"keyword",next:"@declarationbody"}],["(url-prefix)(\\()",["attribute.value",{token:"delimiter.parenthesis",next:"@urldeclaration"}]],["(url)(\\()",["attribute.value",{token:"delimiter.parenthesis",next:"@urldeclaration"}]],{include:"@selectorname"},["[\\*]","tag"],["[>\\+,]","delimiter"],["\\[",{token:"delimiter.bracket",next:"@selectorattribute"}],["{",{token:"delimiter.bracket",next:"@selectorbody"}]],selectorbody:[{include:"@comments"},["[*_]?@identifier@ws:(?=(\\s|\\d|[^{;}]*[;}]))","attribute.name","@rulevalue"],["}",{token:"delimiter.bracket",next:"@pop"}]],selectorname:[["(\\.|#(?=[^{])|%|(@identifier)|:)+","tag"]],selectorattribute:[{include:"@term"},["]",{token:"delimiter.bracket",next:"@pop"}]],term:[{include:"@comments"},["(url-prefix)(\\()",["attribute.value",{token:"delimiter.parenthesis",next:"@urldeclaration"}]],["(url)(\\()",["attribute.value",{token:"delimiter.parenthesis",next:"@urldeclaration"}]],{include:"@functioninvocation"},{include:"@numbers"},{include:"@name"},{include:"@strings"},["([<>=\\+\\-\\*\\/\\^\\|\\~,])","delimiter"],[",","delimiter"]],rulevalue:[{include:"@comments"},{include:"@strings"},{include:"@term"},["!important","keyword"],[";","delimiter","@pop"],["(?=})",{token:"",next:"@pop"}]],warndebug:[["[@](warn|debug)",{token:"keyword",next:"@declarationbody"}]],import:[["[@](import)",{token:"keyword",next:"@declarationbody"}]],urldeclaration:[{include:"@strings"},[`[^)\r +]+`,"string"],["\\)",{token:"delimiter.parenthesis",next:"@pop"}]],parenthizedterm:[{include:"@term"},["\\)",{token:"delimiter.parenthesis",next:"@pop"}]],declarationbody:[{include:"@term"},[";","delimiter","@pop"],["(?=})",{token:"",next:"@pop"}]],comments:[["\\/\\*","comment","@comment"],["\\/\\/+.*","comment"]],comment:[["\\*\\/","comment","@pop"],[/[^*/]+/,"comment"],[/./,"comment"]],name:[["@identifier","attribute.value"]],numbers:[["-?(\\d*\\.)?\\d+([eE][\\-+]?\\d+)?",{token:"attribute.value.number",next:"@units"}],["#[0-9a-fA-F_]+(?!\\w)","attribute.value.hex"]],units:[["(em|ex|ch|rem|fr|vmin|vmax|vw|vh|vm|cm|mm|in|px|pt|pc|deg|grad|rad|turn|s|ms|Hz|kHz|%)?","attribute.value.unit","@pop"]],keyframedeclaration:[["@identifier","attribute.value"],["{",{token:"delimiter.bracket",switchTo:"@keyframebody"}]],keyframebody:[{include:"@term"},["{",{token:"delimiter.bracket",next:"@selectorbody"}],["}",{token:"delimiter.bracket",next:"@pop"}]],functioninvocation:[["@identifier\\(",{token:"attribute.value",next:"@functionarguments"}]],functionarguments:[["\\$@identifier@ws:","attribute.name"],["[,]","delimiter"],{include:"@term"},["\\)",{token:"attribute.value",next:"@pop"}]],strings:[['~?"',{token:"string",next:"@stringenddoublequote"}],["~?'",{token:"string",next:"@stringendquote"}]],stringenddoublequote:[["\\\\.","string"],['"',{token:"string",next:"@pop"}],[/[^\\"]+/,"string"],[".","string"]],stringendquote:[["\\\\.","string"],["'",{token:"string",next:"@pop"}],[/[^\\']+/,"string"],[".","string"]]}};return d(k);})(); +return moduleExports; +}); diff --git a/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/cssMode.js b/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/cssMode.js new file mode 100644 index 00000000000..75e827cd874 --- /dev/null +++ b/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/cssMode.js @@ -0,0 +1,13 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f) + * Released under the MIT license + * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt + *-----------------------------------------------------------------------------*/ +define("vs/language/css/cssMode", ["require","require"],(require)=>{ +"use strict";var moduleExports=(()=>{var tn=Object.create;var Y=Object.defineProperty;var rn=Object.getOwnPropertyDescriptor;var on=Object.getOwnPropertyNames;var sn=Object.getPrototypeOf,an=Object.prototype.hasOwnProperty;var un=(n=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(t,i)=>(typeof require<"u"?require:t)[i]}):n)(function(n){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')});var dn=(n,t)=>()=>(t||n((t={exports:{}}).exports,t),t.exports),cn=(n,t)=>{for(var i in t)Y(n,i,{get:t[i],enumerable:!0})},J=(n,t,i,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of on(t))!an.call(n,e)&&e!==i&&Y(n,e,{get:()=>t[e],enumerable:!(r=rn(t,e))||r.enumerable});return n},pe=(n,t,i)=>(J(n,t,"default"),i&&J(i,t,"default")),he=(n,t,i)=>(i=n!=null?tn(sn(n)):{},J(t||!n||!n.__esModule?Y(i,"default",{value:n,enumerable:!0}):i,n)),ln=n=>J(Y({},"__esModule",{value:!0}),n);var ve=dn((Wn,me)=>{var gn=he(un("vs/editor/editor.api"));me.exports=gn});var Sn={};cn(Sn,{CompletionAdapter:()=>H,DefinitionAdapter:()=>O,DiagnosticsAdapter:()=>K,DocumentColorAdapter:()=>$,DocumentFormattingEditProvider:()=>X,DocumentHighlightAdapter:()=>j,DocumentLinkAdapter:()=>le,DocumentRangeFormattingEditProvider:()=>B,DocumentSymbolAdapter:()=>z,FoldingRangeAdapter:()=>q,HoverAdapter:()=>U,ReferenceAdapter:()=>N,RenameAdapter:()=>V,SelectionRangeAdapter:()=>Q,WorkerManager:()=>E,fromPosition:()=>_,fromRange:()=>ge,setupMode:()=>Rn,toRange:()=>T,toTextEdit:()=>W});var d={};pe(d,he(ve()));var fn=2*60*1e3,E=class{constructor(t){this._defaults=t,this._worker=null,this._client=null,this._idleCheckInterval=window.setInterval(()=>this._checkIfIdle(),30*1e3),this._lastUsedTime=0,this._configChangeListener=this._defaults.onDidChange(()=>this._stopWorker())}_stopWorker(){this._worker&&(this._worker.dispose(),this._worker=null),this._client=null}dispose(){clearInterval(this._idleCheckInterval),this._configChangeListener.dispose(),this._stopWorker()}_checkIfIdle(){if(!this._worker)return;Date.now()-this._lastUsedTime>fn&&this._stopWorker()}_getClient(){return this._lastUsedTime=Date.now(),this._client||(this._worker=d.editor.createWebWorker({moduleId:"vs/language/css/cssWorker",label:this._defaults.languageId,createData:{options:this._defaults.options,languageId:this._defaults.languageId}}),this._client=this._worker.getProxy()),this._client}getLanguageServiceWorker(...t){let i;return this._getClient().then(r=>{i=r}).then(r=>{if(this._worker)return this._worker.withSyncedResources(t)}).then(r=>i)}};var ye;(function(n){n.MIN_VALUE=-2147483648,n.MAX_VALUE=2147483647})(ye||(ye={}));var ee;(function(n){n.MIN_VALUE=0,n.MAX_VALUE=2147483647})(ee||(ee={}));var x;(function(n){function t(r,e){return r===Number.MAX_VALUE&&(r=ee.MAX_VALUE),e===Number.MAX_VALUE&&(e=ee.MAX_VALUE),{line:r,character:e}}n.create=t;function i(r){var e=r;return a.objectLiteral(e)&&a.uinteger(e.line)&&a.uinteger(e.character)}n.is=i})(x||(x={}));var v;(function(n){function t(r,e,o,s){if(a.uinteger(r)&&a.uinteger(e)&&a.uinteger(o)&&a.uinteger(s))return{start:x.create(r,e),end:x.create(o,s)};if(x.is(r)&&x.is(e))return{start:r,end:e};throw new Error("Range#create called with invalid arguments["+r+", "+e+", "+o+", "+s+"]")}n.create=t;function i(r){var e=r;return a.objectLiteral(e)&&x.is(e.start)&&x.is(e.end)}n.is=i})(v||(v={}));var se;(function(n){function t(r,e){return{uri:r,range:e}}n.create=t;function i(r){var e=r;return a.defined(e)&&v.is(e.range)&&(a.string(e.uri)||a.undefined(e.uri))}n.is=i})(se||(se={}));var Te;(function(n){function t(r,e,o,s){return{targetUri:r,targetRange:e,targetSelectionRange:o,originSelectionRange:s}}n.create=t;function i(r){var e=r;return a.defined(e)&&v.is(e.targetRange)&&a.string(e.targetUri)&&(v.is(e.targetSelectionRange)||a.undefined(e.targetSelectionRange))&&(v.is(e.originSelectionRange)||a.undefined(e.originSelectionRange))}n.is=i})(Te||(Te={}));var ae;(function(n){function t(r,e,o,s){return{red:r,green:e,blue:o,alpha:s}}n.create=t;function i(r){var e=r;return a.numberRange(e.red,0,1)&&a.numberRange(e.green,0,1)&&a.numberRange(e.blue,0,1)&&a.numberRange(e.alpha,0,1)}n.is=i})(ae||(ae={}));var xe;(function(n){function t(r,e){return{range:r,color:e}}n.create=t;function i(r){var e=r;return v.is(e.range)&&ae.is(e.color)}n.is=i})(xe||(xe={}));var ke;(function(n){function t(r,e,o){return{label:r,textEdit:e,additionalTextEdits:o}}n.create=t;function i(r){var e=r;return a.string(e.label)&&(a.undefined(e.textEdit)||C.is(e))&&(a.undefined(e.additionalTextEdits)||a.typedArray(e.additionalTextEdits,C.is))}n.is=i})(ke||(ke={}));var S;(function(n){n.Comment="comment",n.Imports="imports",n.Region="region"})(S||(S={}));var Ie;(function(n){function t(r,e,o,s,u){var l={startLine:r,endLine:e};return a.defined(o)&&(l.startCharacter=o),a.defined(s)&&(l.endCharacter=s),a.defined(u)&&(l.kind=u),l}n.create=t;function i(r){var e=r;return a.uinteger(e.startLine)&&a.uinteger(e.startLine)&&(a.undefined(e.startCharacter)||a.uinteger(e.startCharacter))&&(a.undefined(e.endCharacter)||a.uinteger(e.endCharacter))&&(a.undefined(e.kind)||a.string(e.kind))}n.is=i})(Ie||(Ie={}));var ue;(function(n){function t(r,e){return{location:r,message:e}}n.create=t;function i(r){var e=r;return a.defined(e)&&se.is(e.location)&&a.string(e.message)}n.is=i})(ue||(ue={}));var b;(function(n){n.Error=1,n.Warning=2,n.Information=3,n.Hint=4})(b||(b={}));var Ce;(function(n){n.Unnecessary=1,n.Deprecated=2})(Ce||(Ce={}));var _e;(function(n){function t(i){var r=i;return r!=null&&a.string(r.href)}n.is=t})(_e||(_e={}));var ne;(function(n){function t(r,e,o,s,u,l){var f={range:r,message:e};return a.defined(o)&&(f.severity=o),a.defined(s)&&(f.code=s),a.defined(u)&&(f.source=u),a.defined(l)&&(f.relatedInformation=l),f}n.create=t;function i(r){var e,o=r;return a.defined(o)&&v.is(o.range)&&a.string(o.message)&&(a.number(o.severity)||a.undefined(o.severity))&&(a.integer(o.code)||a.string(o.code)||a.undefined(o.code))&&(a.undefined(o.codeDescription)||a.string((e=o.codeDescription)===null||e===void 0?void 0:e.href))&&(a.string(o.source)||a.undefined(o.source))&&(a.undefined(o.relatedInformation)||a.typedArray(o.relatedInformation,ue.is))}n.is=i})(ne||(ne={}));var D;(function(n){function t(r,e){for(var o=[],s=2;s0&&(u.arguments=o),u}n.create=t;function i(r){var e=r;return a.defined(e)&&a.string(e.title)&&a.string(e.command)}n.is=i})(D||(D={}));var C;(function(n){function t(o,s){return{range:o,newText:s}}n.replace=t;function i(o,s){return{range:{start:o,end:o},newText:s}}n.insert=i;function r(o){return{range:o,newText:""}}n.del=r;function e(o){var s=o;return a.objectLiteral(s)&&a.string(s.newText)&&v.is(s.range)}n.is=e})(C||(C={}));var R;(function(n){function t(r,e,o){var s={label:r};return e!==void 0&&(s.needsConfirmation=e),o!==void 0&&(s.description=o),s}n.create=t;function i(r){var e=r;return e!==void 0&&a.objectLiteral(e)&&a.string(e.label)&&(a.boolean(e.needsConfirmation)||e.needsConfirmation===void 0)&&(a.string(e.description)||e.description===void 0)}n.is=i})(R||(R={}));var y;(function(n){function t(i){var r=i;return typeof r=="string"}n.is=t})(y||(y={}));var I;(function(n){function t(o,s,u){return{range:o,newText:s,annotationId:u}}n.replace=t;function i(o,s,u){return{range:{start:o,end:o},newText:s,annotationId:u}}n.insert=i;function r(o,s){return{range:o,newText:"",annotationId:s}}n.del=r;function e(o){var s=o;return C.is(s)&&(R.is(s.annotationId)||y.is(s.annotationId))}n.is=e})(I||(I={}));var te;(function(n){function t(r,e){return{textDocument:r,edits:e}}n.create=t;function i(r){var e=r;return a.defined(e)&&re.is(e.textDocument)&&Array.isArray(e.edits)}n.is=i})(te||(te={}));var L;(function(n){function t(r,e,o){var s={kind:"create",uri:r};return e!==void 0&&(e.overwrite!==void 0||e.ignoreIfExists!==void 0)&&(s.options=e),o!==void 0&&(s.annotationId=o),s}n.create=t;function i(r){var e=r;return e&&e.kind==="create"&&a.string(e.uri)&&(e.options===void 0||(e.options.overwrite===void 0||a.boolean(e.options.overwrite))&&(e.options.ignoreIfExists===void 0||a.boolean(e.options.ignoreIfExists)))&&(e.annotationId===void 0||y.is(e.annotationId))}n.is=i})(L||(L={}));var F;(function(n){function t(r,e,o,s){var u={kind:"rename",oldUri:r,newUri:e};return o!==void 0&&(o.overwrite!==void 0||o.ignoreIfExists!==void 0)&&(u.options=o),s!==void 0&&(u.annotationId=s),u}n.create=t;function i(r){var e=r;return e&&e.kind==="rename"&&a.string(e.oldUri)&&a.string(e.newUri)&&(e.options===void 0||(e.options.overwrite===void 0||a.boolean(e.options.overwrite))&&(e.options.ignoreIfExists===void 0||a.boolean(e.options.ignoreIfExists)))&&(e.annotationId===void 0||y.is(e.annotationId))}n.is=i})(F||(F={}));var M;(function(n){function t(r,e,o){var s={kind:"delete",uri:r};return e!==void 0&&(e.recursive!==void 0||e.ignoreIfNotExists!==void 0)&&(s.options=e),o!==void 0&&(s.annotationId=o),s}n.create=t;function i(r){var e=r;return e&&e.kind==="delete"&&a.string(e.uri)&&(e.options===void 0||(e.options.recursive===void 0||a.boolean(e.options.recursive))&&(e.options.ignoreIfNotExists===void 0||a.boolean(e.options.ignoreIfNotExists)))&&(e.annotationId===void 0||y.is(e.annotationId))}n.is=i})(M||(M={}));var de;(function(n){function t(i){var r=i;return r&&(r.changes!==void 0||r.documentChanges!==void 0)&&(r.documentChanges===void 0||r.documentChanges.every(function(e){return a.string(e.kind)?L.is(e)||F.is(e)||M.is(e):te.is(e)}))}n.is=t})(de||(de={}));var Z=function(){function n(t,i){this.edits=t,this.changeAnnotations=i}return n.prototype.insert=function(t,i,r){var e,o;if(r===void 0?e=C.insert(t,i):y.is(r)?(o=r,e=I.insert(t,i,r)):(this.assertChangeAnnotations(this.changeAnnotations),o=this.changeAnnotations.manage(r),e=I.insert(t,i,o)),this.edits.push(e),o!==void 0)return o},n.prototype.replace=function(t,i,r){var e,o;if(r===void 0?e=C.replace(t,i):y.is(r)?(o=r,e=I.replace(t,i,r)):(this.assertChangeAnnotations(this.changeAnnotations),o=this.changeAnnotations.manage(r),e=I.replace(t,i,o)),this.edits.push(e),o!==void 0)return o},n.prototype.delete=function(t,i){var r,e;if(i===void 0?r=C.del(t):y.is(i)?(e=i,r=I.del(t,i)):(this.assertChangeAnnotations(this.changeAnnotations),e=this.changeAnnotations.manage(i),r=I.del(t,e)),this.edits.push(r),e!==void 0)return e},n.prototype.add=function(t){this.edits.push(t)},n.prototype.all=function(){return this.edits},n.prototype.clear=function(){this.edits.splice(0,this.edits.length)},n.prototype.assertChangeAnnotations=function(t){if(t===void 0)throw new Error("Text edit change is not configured to manage change annotations.")},n}(),be=function(){function n(t){this._annotations=t===void 0?Object.create(null):t,this._counter=0,this._size=0}return n.prototype.all=function(){return this._annotations},Object.defineProperty(n.prototype,"size",{get:function(){return this._size},enumerable:!1,configurable:!0}),n.prototype.manage=function(t,i){var r;if(y.is(t)?r=t:(r=this.nextId(),i=t),this._annotations[r]!==void 0)throw new Error("Id "+r+" is already in use.");if(i===void 0)throw new Error("No annotation provided for id "+r);return this._annotations[r]=i,this._size++,r},n.prototype.nextId=function(){return this._counter++,this._counter.toString()},n}(),Kn=function(){function n(t){var i=this;this._textEditChanges=Object.create(null),t!==void 0?(this._workspaceEdit=t,t.documentChanges?(this._changeAnnotations=new be(t.changeAnnotations),t.changeAnnotations=this._changeAnnotations.all(),t.documentChanges.forEach(function(r){if(te.is(r)){var e=new Z(r.edits,i._changeAnnotations);i._textEditChanges[r.textDocument.uri]=e}})):t.changes&&Object.keys(t.changes).forEach(function(r){var e=new Z(t.changes[r]);i._textEditChanges[r]=e})):this._workspaceEdit={}}return Object.defineProperty(n.prototype,"edit",{get:function(){return this.initDocumentChanges(),this._changeAnnotations!==void 0&&(this._changeAnnotations.size===0?this._workspaceEdit.changeAnnotations=void 0:this._workspaceEdit.changeAnnotations=this._changeAnnotations.all()),this._workspaceEdit},enumerable:!1,configurable:!0}),n.prototype.getTextEditChange=function(t){if(re.is(t)){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");var i={uri:t.uri,version:t.version},r=this._textEditChanges[i.uri];if(!r){var e=[],o={textDocument:i,edits:e};this._workspaceEdit.documentChanges.push(o),r=new Z(e,this._changeAnnotations),this._textEditChanges[i.uri]=r}return r}else{if(this.initChanges(),this._workspaceEdit.changes===void 0)throw new Error("Workspace edit is not configured for normal text edit changes.");var r=this._textEditChanges[t];if(!r){var e=[];this._workspaceEdit.changes[t]=e,r=new Z(e),this._textEditChanges[t]=r}return r}},n.prototype.initDocumentChanges=function(){this._workspaceEdit.documentChanges===void 0&&this._workspaceEdit.changes===void 0&&(this._changeAnnotations=new be,this._workspaceEdit.documentChanges=[],this._workspaceEdit.changeAnnotations=this._changeAnnotations.all())},n.prototype.initChanges=function(){this._workspaceEdit.documentChanges===void 0&&this._workspaceEdit.changes===void 0&&(this._workspaceEdit.changes=Object.create(null))},n.prototype.createFile=function(t,i,r){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");var e;R.is(i)||y.is(i)?e=i:r=i;var o,s;if(e===void 0?o=L.create(t,r):(s=y.is(e)?e:this._changeAnnotations.manage(e),o=L.create(t,r,s)),this._workspaceEdit.documentChanges.push(o),s!==void 0)return s},n.prototype.renameFile=function(t,i,r,e){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");var o;R.is(r)||y.is(r)?o=r:e=r;var s,u;if(o===void 0?s=F.create(t,i,e):(u=y.is(o)?o:this._changeAnnotations.manage(o),s=F.create(t,i,e,u)),this._workspaceEdit.documentChanges.push(s),u!==void 0)return u},n.prototype.deleteFile=function(t,i,r){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");var e;R.is(i)||y.is(i)?e=i:r=i;var o,s;if(e===void 0?o=M.create(t,r):(s=y.is(e)?e:this._changeAnnotations.manage(e),o=M.create(t,r,s)),this._workspaceEdit.documentChanges.push(o),s!==void 0)return s},n}();var we;(function(n){function t(r){return{uri:r}}n.create=t;function i(r){var e=r;return a.defined(e)&&a.string(e.uri)}n.is=i})(we||(we={}));var Ee;(function(n){function t(r,e){return{uri:r,version:e}}n.create=t;function i(r){var e=r;return a.defined(e)&&a.string(e.uri)&&a.integer(e.version)}n.is=i})(Ee||(Ee={}));var re;(function(n){function t(r,e){return{uri:r,version:e}}n.create=t;function i(r){var e=r;return a.defined(e)&&a.string(e.uri)&&(e.version===null||a.integer(e.version))}n.is=i})(re||(re={}));var Re;(function(n){function t(r,e,o,s){return{uri:r,languageId:e,version:o,text:s}}n.create=t;function i(r){var e=r;return a.defined(e)&&a.string(e.uri)&&a.string(e.languageId)&&a.integer(e.version)&&a.string(e.text)}n.is=i})(Re||(Re={}));var A;(function(n){n.PlainText="plaintext",n.Markdown="markdown"})(A||(A={}));(function(n){function t(i){var r=i;return r===n.PlainText||r===n.Markdown}n.is=t})(A||(A={}));var ce;(function(n){function t(i){var r=i;return a.objectLiteral(i)&&A.is(r.kind)&&a.string(r.value)}n.is=t})(ce||(ce={}));var p;(function(n){n.Text=1,n.Method=2,n.Function=3,n.Constructor=4,n.Field=5,n.Variable=6,n.Class=7,n.Interface=8,n.Module=9,n.Property=10,n.Unit=11,n.Value=12,n.Enum=13,n.Keyword=14,n.Snippet=15,n.Color=16,n.File=17,n.Reference=18,n.Folder=19,n.EnumMember=20,n.Constant=21,n.Struct=22,n.Event=23,n.Operator=24,n.TypeParameter=25})(p||(p={}));var ie;(function(n){n.PlainText=1,n.Snippet=2})(ie||(ie={}));var Se;(function(n){n.Deprecated=1})(Se||(Se={}));var Pe;(function(n){function t(r,e,o){return{newText:r,insert:e,replace:o}}n.create=t;function i(r){var e=r;return e&&a.string(e.newText)&&v.is(e.insert)&&v.is(e.replace)}n.is=i})(Pe||(Pe={}));var We;(function(n){n.asIs=1,n.adjustIndentation=2})(We||(We={}));var De;(function(n){function t(i){return{label:i}}n.create=t})(De||(De={}));var Le;(function(n){function t(i,r){return{items:i||[],isIncomplete:!!r}}n.create=t})(Le||(Le={}));var oe;(function(n){function t(r){return r.replace(/[\\`*_{}[\]()#+\-.!]/g,"\\$&")}n.fromPlainText=t;function i(r){var e=r;return a.string(e)||a.objectLiteral(e)&&a.string(e.language)&&a.string(e.value)}n.is=i})(oe||(oe={}));var Fe;(function(n){function t(i){var r=i;return!!r&&a.objectLiteral(r)&&(ce.is(r.contents)||oe.is(r.contents)||a.typedArray(r.contents,oe.is))&&(i.range===void 0||v.is(i.range))}n.is=t})(Fe||(Fe={}));var Me;(function(n){function t(i,r){return r?{label:i,documentation:r}:{label:i}}n.create=t})(Me||(Me={}));var Ae;(function(n){function t(i,r){for(var e=[],o=2;o=0;g--){var m=l[g],k=o.offsetAt(m.range.start),c=o.offsetAt(m.range.end);if(c<=f)u=u.substring(0,k)+m.newText+u.substring(c,u.length);else throw new Error("Overlapping edit");f=k}return u}n.applyEdits=r;function e(o,s){if(o.length<=1)return o;var u=o.length/2|0,l=o.slice(0,u),f=o.slice(u);e(l,s),e(f,s);for(var g=0,m=0,k=0;g0&&t.push(i.length),this._lineOffsets=t}return this._lineOffsets},n.prototype.positionAt=function(t){t=Math.max(Math.min(t,this._content.length),0);var i=this.getLineOffsets(),r=0,e=i.length;if(e===0)return x.create(0,t);for(;rt?e=o:r=o+1}var s=r-1;return x.create(s,t-i[s])},n.prototype.offsetAt=function(t){var i=this.getLineOffsets();if(t.line>=i.length)return this._content.length;if(t.line<0)return 0;var r=i[t.line],e=t.line+1"u"}n.undefined=r;function e(c){return c===!0||c===!1}n.boolean=e;function o(c){return t.call(c)==="[object String]"}n.string=o;function s(c){return t.call(c)==="[object Number]"}n.number=s;function u(c,w,G){return t.call(c)==="[object Number]"&&w<=c&&c<=G}n.numberRange=u;function l(c){return t.call(c)==="[object Number]"&&-2147483648<=c&&c<=2147483647}n.integer=l;function f(c){return t.call(c)==="[object Number]"&&0<=c&&c<=2147483647}n.uinteger=f;function g(c){return t.call(c)==="[object Function]"}n.func=g;function m(c){return c!==null&&typeof c=="object"}n.objectLiteral=m;function k(c,w){return Array.isArray(c)&&c.every(w)}n.typedArray=k})(a||(a={}));var K=class{constructor(t,i,r){this._languageId=t;this._worker=i;this._disposables=[];this._listener=Object.create(null);let e=s=>{let u=s.getLanguageId();if(u!==this._languageId)return;let l;this._listener[s.uri.toString()]=s.onDidChangeContent(()=>{window.clearTimeout(l),l=window.setTimeout(()=>this._doValidate(s.uri,u),500)}),this._doValidate(s.uri,u)},o=s=>{d.editor.setModelMarkers(s,this._languageId,[]);let u=s.uri.toString(),l=this._listener[u];l&&(l.dispose(),delete this._listener[u])};this._disposables.push(d.editor.onDidCreateModel(e)),this._disposables.push(d.editor.onWillDisposeModel(o)),this._disposables.push(d.editor.onDidChangeModelLanguage(s=>{o(s.model),e(s.model)})),this._disposables.push(r(s=>{d.editor.getModels().forEach(u=>{u.getLanguageId()===this._languageId&&(o(u),e(u))})})),this._disposables.push({dispose:()=>{d.editor.getModels().forEach(o);for(let s in this._listener)this._listener[s].dispose()}}),d.editor.getModels().forEach(e)}dispose(){this._disposables.forEach(t=>t&&t.dispose()),this._disposables.length=0}_doValidate(t,i){this._worker(t).then(r=>r.doValidation(t.toString())).then(r=>{let e=r.map(s=>vn(t,s)),o=d.editor.getModel(t);o&&o.getLanguageId()===i&&d.editor.setModelMarkers(o,i,e)}).then(void 0,r=>{console.error(r)})}};function mn(n){switch(n){case b.Error:return d.MarkerSeverity.Error;case b.Warning:return d.MarkerSeverity.Warning;case b.Information:return d.MarkerSeverity.Info;case b.Hint:return d.MarkerSeverity.Hint;default:return d.MarkerSeverity.Info}}function vn(n,t){let i=typeof t.code=="number"?String(t.code):t.code;return{severity:mn(t.severity),startLineNumber:t.range.start.line+1,startColumn:t.range.start.character+1,endLineNumber:t.range.end.line+1,endColumn:t.range.end.character+1,message:t.message,code:i,source:t.source}}var H=class{constructor(t,i){this._worker=t;this._triggerCharacters=i}get triggerCharacters(){return this._triggerCharacters}provideCompletionItems(t,i,r,e){let o=t.uri;return this._worker(o).then(s=>s.doComplete(o.toString(),_(i))).then(s=>{if(!s)return;let u=t.getWordUntilPosition(i),l=new d.Range(i.lineNumber,u.startColumn,i.lineNumber,u.endColumn),f=s.items.map(g=>{let m={label:g.label,insertText:g.insertText||g.label,sortText:g.sortText,filterText:g.filterText,documentation:g.documentation,detail:g.detail,command:xn(g.command),range:l,kind:Tn(g.kind)};return g.textEdit&&(yn(g.textEdit)?m.range={insert:T(g.textEdit.insert),replace:T(g.textEdit.replace)}:m.range=T(g.textEdit.range),m.insertText=g.textEdit.newText),g.additionalTextEdits&&(m.additionalTextEdits=g.additionalTextEdits.map(W)),g.insertTextFormat===ie.Snippet&&(m.insertTextRules=d.languages.CompletionItemInsertTextRule.InsertAsSnippet),m});return{isIncomplete:s.isIncomplete,suggestions:f}})}};function _(n){if(n)return{character:n.column-1,line:n.lineNumber-1}}function ge(n){if(n)return{start:{line:n.startLineNumber-1,character:n.startColumn-1},end:{line:n.endLineNumber-1,character:n.endColumn-1}}}function T(n){if(n)return new d.Range(n.start.line+1,n.start.character+1,n.end.line+1,n.end.character+1)}function yn(n){return typeof n.insert<"u"&&typeof n.replace<"u"}function Tn(n){let t=d.languages.CompletionItemKind;switch(n){case p.Text:return t.Text;case p.Method:return t.Method;case p.Function:return t.Function;case p.Constructor:return t.Constructor;case p.Field:return t.Field;case p.Variable:return t.Variable;case p.Class:return t.Class;case p.Interface:return t.Interface;case p.Module:return t.Module;case p.Property:return t.Property;case p.Unit:return t.Unit;case p.Value:return t.Value;case p.Enum:return t.Enum;case p.Keyword:return t.Keyword;case p.Snippet:return t.Snippet;case p.Color:return t.Color;case p.File:return t.File;case p.Reference:return t.Reference}return t.Property}function W(n){if(n)return{range:T(n.range),text:n.newText}}function xn(n){return n&&n.command==="editor.action.triggerSuggest"?{id:n.command,title:n.title,arguments:n.arguments}:void 0}var U=class{constructor(t){this._worker=t}provideHover(t,i,r){let e=t.uri;return this._worker(e).then(o=>o.doHover(e.toString(),_(i))).then(o=>{if(o)return{range:T(o.range),contents:In(o.contents)}})}};function kn(n){return n&&typeof n=="object"&&typeof n.kind=="string"}function Qe(n){return typeof n=="string"?{value:n}:kn(n)?n.kind==="plaintext"?{value:n.value.replace(/[\\`*_{}[\]()#+\-.!]/g,"\\$&")}:{value:n.value}:{value:"```"+n.language+` +`+n.value+"\n```\n"}}function In(n){if(n)return Array.isArray(n)?n.map(Qe):[Qe(n)]}var j=class{constructor(t){this._worker=t}provideDocumentHighlights(t,i,r){let e=t.uri;return this._worker(e).then(o=>o.findDocumentHighlights(e.toString(),_(i))).then(o=>{if(o)return o.map(s=>({range:T(s.range),kind:Cn(s.kind)}))})}};function Cn(n){switch(n){case P.Read:return d.languages.DocumentHighlightKind.Read;case P.Write:return d.languages.DocumentHighlightKind.Write;case P.Text:return d.languages.DocumentHighlightKind.Text}return d.languages.DocumentHighlightKind.Text}var O=class{constructor(t){this._worker=t}provideDefinition(t,i,r){let e=t.uri;return this._worker(e).then(o=>o.findDefinition(e.toString(),_(i))).then(o=>{if(o)return[Ge(o)]})}};function Ge(n){return{uri:d.Uri.parse(n.uri),range:T(n.range)}}var N=class{constructor(t){this._worker=t}provideReferences(t,i,r,e){let o=t.uri;return this._worker(o).then(s=>s.findReferences(o.toString(),_(i))).then(s=>{if(s)return s.map(Ge)})}},V=class{constructor(t){this._worker=t}provideRenameEdits(t,i,r,e){let o=t.uri;return this._worker(o).then(s=>s.doRename(o.toString(),_(i),r)).then(s=>_n(s))}};function _n(n){if(!n||!n.changes)return;let t=[];for(let i in n.changes){let r=d.Uri.parse(i);for(let e of n.changes[i])t.push({resource:r,versionId:void 0,textEdit:{range:T(e.range),text:e.newText}})}return{edits:t}}var z=class{constructor(t){this._worker=t}provideDocumentSymbols(t,i){let r=t.uri;return this._worker(r).then(e=>e.findDocumentSymbols(r.toString())).then(e=>{if(e)return e.map(o=>bn(o)?Je(o):{name:o.name,detail:"",containerName:o.containerName,kind:Ye(o.kind),range:T(o.location.range),selectionRange:T(o.location.range),tags:[]})})}};function bn(n){return"children"in n}function Je(n){return{name:n.name,detail:n.detail??"",kind:Ye(n.kind),range:T(n.range),selectionRange:T(n.selectionRange),tags:n.tags??[],children:(n.children??[]).map(t=>Je(t))}}function Ye(n){let t=d.languages.SymbolKind;switch(n){case h.File:return t.File;case h.Module:return t.Module;case h.Namespace:return t.Namespace;case h.Package:return t.Package;case h.Class:return t.Class;case h.Method:return t.Method;case h.Property:return t.Property;case h.Field:return t.Field;case h.Constructor:return t.Constructor;case h.Enum:return t.Enum;case h.Interface:return t.Interface;case h.Function:return t.Function;case h.Variable:return t.Variable;case h.Constant:return t.Constant;case h.String:return t.String;case h.Number:return t.Number;case h.Boolean:return t.Boolean;case h.Array:return t.Array}return t.Function}var le=class{constructor(t){this._worker=t}provideLinks(t,i){let r=t.uri;return this._worker(r).then(e=>e.findDocumentLinks(r.toString())).then(e=>{if(e)return{links:e.map(o=>({range:T(o.range),url:o.target}))}})}},X=class{constructor(t){this._worker=t}provideDocumentFormattingEdits(t,i,r){let e=t.uri;return this._worker(e).then(o=>o.format(e.toString(),null,Ze(i)).then(s=>{if(!(!s||s.length===0))return s.map(W)}))}},B=class{constructor(t){this._worker=t;this.canFormatMultipleRanges=!1}provideDocumentRangeFormattingEdits(t,i,r,e){let o=t.uri;return this._worker(o).then(s=>s.format(o.toString(),ge(i),Ze(r)).then(u=>{if(!(!u||u.length===0))return u.map(W)}))}};function Ze(n){return{tabSize:n.tabSize,insertSpaces:n.insertSpaces}}var $=class{constructor(t){this._worker=t}provideDocumentColors(t,i){let r=t.uri;return this._worker(r).then(e=>e.findDocumentColors(r.toString())).then(e=>{if(e)return e.map(o=>({color:o.color,range:T(o.range)}))})}provideColorPresentations(t,i,r){let e=t.uri;return this._worker(e).then(o=>o.getColorPresentations(e.toString(),i.color,ge(i.range))).then(o=>{if(o)return o.map(s=>{let u={label:s.label};return s.textEdit&&(u.textEdit=W(s.textEdit)),s.additionalTextEdits&&(u.additionalTextEdits=s.additionalTextEdits.map(W)),u})})}},q=class{constructor(t){this._worker=t}provideFoldingRanges(t,i,r){let e=t.uri;return this._worker(e).then(o=>o.getFoldingRanges(e.toString(),i)).then(o=>{if(o)return o.map(s=>{let u={start:s.startLine+1,end:s.endLine+1};return typeof s.kind<"u"&&(u.kind=wn(s.kind)),u})})}};function wn(n){switch(n){case S.Comment:return d.languages.FoldingRangeKind.Comment;case S.Imports:return d.languages.FoldingRangeKind.Imports;case S.Region:return d.languages.FoldingRangeKind.Region}}var Q=class{constructor(t){this._worker=t}provideSelectionRanges(t,i,r){let e=t.uri;return this._worker(e).then(o=>o.getSelectionRanges(e.toString(),i.map(_))).then(o=>{if(o)return o.map(s=>{let u=[];for(;s;)u.push({range:T(s.range)}),s=s.parent;return u})})}};function Rn(n){let t=[],i=[],r=new E(n);t.push(r);let e=(...s)=>r.getLanguageServiceWorker(...s);function o(){let{languageId:s,modeConfiguration:u}=n;nn(i),u.completionItems&&i.push(d.languages.registerCompletionItemProvider(s,new H(e,["/","-",":"]))),u.hovers&&i.push(d.languages.registerHoverProvider(s,new U(e))),u.documentHighlights&&i.push(d.languages.registerDocumentHighlightProvider(s,new j(e))),u.definitions&&i.push(d.languages.registerDefinitionProvider(s,new O(e))),u.references&&i.push(d.languages.registerReferenceProvider(s,new N(e))),u.documentSymbols&&i.push(d.languages.registerDocumentSymbolProvider(s,new z(e))),u.rename&&i.push(d.languages.registerRenameProvider(s,new V(e))),u.colors&&i.push(d.languages.registerColorProvider(s,new $(e))),u.foldingRanges&&i.push(d.languages.registerFoldingRangeProvider(s,new q(e))),u.diagnostics&&i.push(new K(s,e,n.onDidChange)),u.selectionRanges&&i.push(d.languages.registerSelectionRangeProvider(s,new Q(e))),u.documentFormattingEdits&&i.push(d.languages.registerDocumentFormattingEditProvider(s,new X(e))),u.documentRangeFormattingEdits&&i.push(d.languages.registerDocumentRangeFormattingEditProvider(s,new B(e)))}return o(),t.push(en(i)),en(t)}function en(n){return{dispose:()=>nn(n)}}function nn(n){for(;n.length;)n.pop().dispose()}return ln(Sn);})(); +return moduleExports; +}); diff --git a/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/cssWorker.js b/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/cssWorker.js new file mode 100644 index 00000000000..aad04ab233b --- /dev/null +++ b/src/OrchardCore.Modules/OrchardCore.Resources/wwwroot/Scripts/monaco/cssWorker.js @@ -0,0 +1,78 @@ +/*!----------------------------------------------------------------------------- + * Copyright (c) Microsoft Corporation. All rights reserved. + * Version: 0.46.0(21007360cad28648bdf46282a2592cb47c3a7a6f) + * Released under the MIT license + * https://github.com/microsoft/monaco-editor/blob/main/LICENSE.txt + *-----------------------------------------------------------------------------*/ +define("vs/language/css/cssWorker", ["require","require"],(require)=>{ +"use strict";var moduleExports=(()=>{var $n=Object.defineProperty;var ds=Object.getOwnPropertyDescriptor;var hs=Object.getOwnPropertyNames;var ps=Object.prototype.hasOwnProperty;var us=(n,e)=>{for(var t in e)$n(n,t,{get:e[t],enumerable:!0})},ms=(n,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of hs(e))!ps.call(n,i)&&i!==t&&$n(n,i,{get:()=>e[i],enumerable:!(r=ds(e,i))||r.enumerable});return n};var fs=n=>ms($n({},"__esModule",{value:!0}),n);var sl={};us(sl,{CSSWorker:()=>Vn,create:()=>ol});var d;(function(n){n[n.Ident=0]="Ident",n[n.AtKeyword=1]="AtKeyword",n[n.String=2]="String",n[n.BadString=3]="BadString",n[n.UnquotedString=4]="UnquotedString",n[n.Hash=5]="Hash",n[n.Num=6]="Num",n[n.Percentage=7]="Percentage",n[n.Dimension=8]="Dimension",n[n.UnicodeRange=9]="UnicodeRange",n[n.CDO=10]="CDO",n[n.CDC=11]="CDC",n[n.Colon=12]="Colon",n[n.SemiColon=13]="SemiColon",n[n.CurlyL=14]="CurlyL",n[n.CurlyR=15]="CurlyR",n[n.ParenthesisL=16]="ParenthesisL",n[n.ParenthesisR=17]="ParenthesisR",n[n.BracketL=18]="BracketL",n[n.BracketR=19]="BracketR",n[n.Whitespace=20]="Whitespace",n[n.Includes=21]="Includes",n[n.Dashmatch=22]="Dashmatch",n[n.SubstringOperator=23]="SubstringOperator",n[n.PrefixOperator=24]="PrefixOperator",n[n.SuffixOperator=25]="SuffixOperator",n[n.Delim=26]="Delim",n[n.EMS=27]="EMS",n[n.EXS=28]="EXS",n[n.Length=29]="Length",n[n.Angle=30]="Angle",n[n.Time=31]="Time",n[n.Freq=32]="Freq",n[n.Exclamation=33]="Exclamation",n[n.Resolution=34]="Resolution",n[n.Comma=35]="Comma",n[n.Charset=36]="Charset",n[n.EscapedJavaScript=37]="EscapedJavaScript",n[n.BadEscapedJavaScript=38]="BadEscapedJavaScript",n[n.Comment=39]="Comment",n[n.SingleLineComment=40]="SingleLineComment",n[n.EOF=41]="EOF",n[n.CustomToken=42]="CustomToken"})(d||(d={}));var Kr=function(){function n(e){this.source=e,this.len=e.length,this.position=0}return n.prototype.substring=function(e,t){return t===void 0&&(t=this.position),this.source.substring(e,t)},n.prototype.eos=function(){return this.len<=this.position},n.prototype.pos=function(){return this.position},n.prototype.goBackTo=function(e){this.position=e},n.prototype.goBack=function(e){this.position-=e},n.prototype.advance=function(e){this.position+=e},n.prototype.nextChar=function(){return this.source.charCodeAt(this.position++)||0},n.prototype.peekChar=function(e){return e===void 0&&(e=0),this.source.charCodeAt(this.position+e)||0},n.prototype.lookbackChar=function(e){return e===void 0&&(e=0),this.source.charCodeAt(this.position-e)||0},n.prototype.advanceIfChar=function(e){return e===this.source.charCodeAt(this.position)?(this.position++,!0):!1},n.prototype.advanceIfChars=function(e){if(this.position+e.length>this.source.length)return!1;for(var t=0;t=St&&t<=kt?(this.stream.advance(e+1),this.stream.advanceWhileChar(function(r){return r>=St&&r<=kt||e===0&&r===ti}),!0):!1},n.prototype._newline=function(e){var t=this.stream.peekChar();switch(t){case at:case _t:case st:return this.stream.advance(1),e.push(String.fromCharCode(t)),t===at&&this.stream.advanceIfChar(st)&&e.push(` +`),!0}return!1},n.prototype._escape=function(e,t){var r=this.stream.peekChar();if(r===Kn){this.stream.advance(1),r=this.stream.peekChar();for(var i=0;i<6&&(r>=St&&r<=kt||r>=tn&&r<=Gr||r>=nn&&r<=Jr);)this.stream.advance(1),r=this.stream.peekChar(),i++;if(i>0){try{var o=parseInt(this.stream.substring(this.stream.pos()-i),16);o&&e.push(String.fromCharCode(o))}catch{}return r===Gn||r===Hn?this.stream.advance(1):this._newline([]),!0}if(r!==at&&r!==_t&&r!==st)return this.stream.advance(1),e.push(String.fromCharCode(r)),!0;if(t)return this._newline(e)}return!1},n.prototype._stringChar=function(e,t){var r=this.stream.peekChar();return r!==0&&r!==e&&r!==Kn&&r!==at&&r!==_t&&r!==st?(this.stream.advance(1),t.push(String.fromCharCode(r)),!0):!1},n.prototype._string=function(e){if(this.stream.peekChar()===ei||this.stream.peekChar()===Zr){var t=this.stream.nextChar();for(e.push(String.fromCharCode(t));this._stringChar(t,e)||this._escape(e,!0););return this.stream.peekChar()===t?(this.stream.nextChar(),e.push(String.fromCharCode(t)),d.String):d.BadString}return null},n.prototype._unquotedChar=function(e){var t=this.stream.peekChar();return t!==0&&t!==Kn&&t!==ei&&t!==Zr&&t!==ri&&t!==ii&&t!==Gn&&t!==Hn&&t!==st&&t!==_t&&t!==at?(this.stream.advance(1),e.push(String.fromCharCode(t)),!0):!1},n.prototype._unquotedString=function(e){for(var t=!1;this._unquotedChar(e)||this._escape(e);)t=!0;return t},n.prototype._whitespace=function(){var e=this.stream.advanceWhileChar(function(t){return t===Gn||t===Hn||t===st||t===_t||t===at});return e>0},n.prototype._name=function(e){for(var t=!1;this._identChar(e)||this._escape(e);)t=!0;return t},n.prototype.ident=function(e){var t=this.stream.pos(),r=this._minus(e);if(r){if(this._minus(e)||this._identFirstChar(e)||this._escape(e)){for(;this._identChar(e)||this._escape(e););return!0}}else if(this._identFirstChar(e)||this._escape(e)){for(;this._identChar(e)||this._escape(e););return!0}return this.stream.goBackTo(t),!1},n.prototype._identFirstChar=function(e){var t=this.stream.peekChar();return t===Yr||t>=tn&&t<=Hr||t>=nn&&t<=Xr||t>=128&&t<=65535?(this.stream.advance(1),e.push(String.fromCharCode(t)),!0):!1},n.prototype._minus=function(e){var t=this.stream.peekChar();return t===Ye?(this.stream.advance(1),e.push(String.fromCharCode(t)),!0):!1},n.prototype._identChar=function(e){var t=this.stream.peekChar();return t===Yr||t===Ye||t>=tn&&t<=Hr||t>=nn&&t<=Xr||t>=St&&t<=kt||t>=128&&t<=65535?(this.stream.advance(1),e.push(String.fromCharCode(t)),!0):!1},n.prototype._unicodeRange=function(){if(this.stream.advanceIfChar(Ts)){var e=function(i){return i>=St&&i<=kt||i>=tn&&i<=Gr||i>=nn&&i<=Jr},t=this.stream.advanceWhileChar(e)+this.stream.advanceWhileChar(function(i){return i===Ms});if(t>=1&&t<=6)if(this.stream.advanceIfChar(Ye)){var r=this.stream.advanceWhileChar(e);if(r>=1&&r<=6)return!0}else return!0}return!1},n}();function q(n,e){if(n.length0?n.lastIndexOf(e)===t:t===0?n===e:!1}function oi(n,e,t){t===void 0&&(t=4);var r=Math.abs(n.length-e.length);if(r>t)return 0;var i=[],o=[],s,a;for(s=0;s0;)(e&1)===1&&(t+=n),n+=n,e=e>>>1;return t}var E=function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(r[o]=i[o])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),u;(function(n){n[n.Undefined=0]="Undefined",n[n.Identifier=1]="Identifier",n[n.Stylesheet=2]="Stylesheet",n[n.Ruleset=3]="Ruleset",n[n.Selector=4]="Selector",n[n.SimpleSelector=5]="SimpleSelector",n[n.SelectorInterpolation=6]="SelectorInterpolation",n[n.SelectorCombinator=7]="SelectorCombinator",n[n.SelectorCombinatorParent=8]="SelectorCombinatorParent",n[n.SelectorCombinatorSibling=9]="SelectorCombinatorSibling",n[n.SelectorCombinatorAllSiblings=10]="SelectorCombinatorAllSiblings",n[n.SelectorCombinatorShadowPiercingDescendant=11]="SelectorCombinatorShadowPiercingDescendant",n[n.Page=12]="Page",n[n.PageBoxMarginBox=13]="PageBoxMarginBox",n[n.ClassSelector=14]="ClassSelector",n[n.IdentifierSelector=15]="IdentifierSelector",n[n.ElementNameSelector=16]="ElementNameSelector",n[n.PseudoSelector=17]="PseudoSelector",n[n.AttributeSelector=18]="AttributeSelector",n[n.Declaration=19]="Declaration",n[n.Declarations=20]="Declarations",n[n.Property=21]="Property",n[n.Expression=22]="Expression",n[n.BinaryExpression=23]="BinaryExpression",n[n.Term=24]="Term",n[n.Operator=25]="Operator",n[n.Value=26]="Value",n[n.StringLiteral=27]="StringLiteral",n[n.URILiteral=28]="URILiteral",n[n.EscapedValue=29]="EscapedValue",n[n.Function=30]="Function",n[n.NumericValue=31]="NumericValue",n[n.HexColorValue=32]="HexColorValue",n[n.RatioValue=33]="RatioValue",n[n.MixinDeclaration=34]="MixinDeclaration",n[n.MixinReference=35]="MixinReference",n[n.VariableName=36]="VariableName",n[n.VariableDeclaration=37]="VariableDeclaration",n[n.Prio=38]="Prio",n[n.Interpolation=39]="Interpolation",n[n.NestedProperties=40]="NestedProperties",n[n.ExtendsReference=41]="ExtendsReference",n[n.SelectorPlaceholder=42]="SelectorPlaceholder",n[n.Debug=43]="Debug",n[n.If=44]="If",n[n.Else=45]="Else",n[n.For=46]="For",n[n.Each=47]="Each",n[n.While=48]="While",n[n.MixinContentReference=49]="MixinContentReference",n[n.MixinContentDeclaration=50]="MixinContentDeclaration",n[n.Media=51]="Media",n[n.Keyframe=52]="Keyframe",n[n.FontFace=53]="FontFace",n[n.Import=54]="Import",n[n.Namespace=55]="Namespace",n[n.Invocation=56]="Invocation",n[n.FunctionDeclaration=57]="FunctionDeclaration",n[n.ReturnStatement=58]="ReturnStatement",n[n.MediaQuery=59]="MediaQuery",n[n.MediaCondition=60]="MediaCondition",n[n.MediaFeature=61]="MediaFeature",n[n.FunctionParameter=62]="FunctionParameter",n[n.FunctionArgument=63]="FunctionArgument",n[n.KeyframeSelector=64]="KeyframeSelector",n[n.ViewPort=65]="ViewPort",n[n.Document=66]="Document",n[n.AtApplyRule=67]="AtApplyRule",n[n.CustomPropertyDeclaration=68]="CustomPropertyDeclaration",n[n.CustomPropertySet=69]="CustomPropertySet",n[n.ListEntry=70]="ListEntry",n[n.Supports=71]="Supports",n[n.SupportsCondition=72]="SupportsCondition",n[n.NamespacePrefix=73]="NamespacePrefix",n[n.GridLine=74]="GridLine",n[n.Plugin=75]="Plugin",n[n.UnknownAtRule=76]="UnknownAtRule",n[n.Use=77]="Use",n[n.ModuleConfiguration=78]="ModuleConfiguration",n[n.Forward=79]="Forward",n[n.ForwardVisibility=80]="ForwardVisibility",n[n.Module=81]="Module",n[n.UnicodeRange=82]="UnicodeRange"})(u||(u={}));var A;(function(n){n[n.Mixin=0]="Mixin",n[n.Rule=1]="Rule",n[n.Variable=2]="Variable",n[n.Function=3]="Function",n[n.Keyframe=4]="Keyframe",n[n.Unknown=5]="Unknown",n[n.Module=6]="Module",n[n.Forward=7]="Forward",n[n.ForwardVisibility=8]="ForwardVisibility"})(A||(A={}));function on(n,e){var t=null;return!n||en.end?null:(n.accept(function(r){return r.offset===-1&&r.length===-1?!0:r.offset<=e&&r.end>=e?(t?r.length<=t.length&&(t=r):t=r,!0):!1}),t)}function lt(n,e){for(var t=on(n,e),r=[];t;)r.unshift(t),t=t.parent;return r}function ai(n){var e=n.findParent(u.Declaration),t=e&&e.getValue();return t&&t.encloses(n)?e:null}var F=function(){function n(e,t,r){e===void 0&&(e=-1),t===void 0&&(t=-1),this.parent=null,this.offset=e,this.length=t,r&&(this.nodeType=r)}return Object.defineProperty(n.prototype,"end",{get:function(){return this.offset+this.length},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"type",{get:function(){return this.nodeType||u.Undefined},set:function(e){this.nodeType=e},enumerable:!1,configurable:!0}),n.prototype.getTextProvider=function(){for(var e=this;e&&!e.textProvider;)e=e.parent;return e?e.textProvider:function(){return"unknown"}},n.prototype.getText=function(){return this.getTextProvider()(this.offset,this.length)},n.prototype.matches=function(e){return this.length===e.length&&this.getTextProvider()(this.offset,this.length)===e},n.prototype.startsWith=function(e){return this.length>=e.length&&this.getTextProvider()(this.offset,e.length)===e},n.prototype.endsWith=function(e){return this.length>=e.length&&this.getTextProvider()(this.end-e.length,e.length)===e},n.prototype.accept=function(e){if(e(this)&&this.children)for(var t=0,r=this.children;t=0&&e.parent.children.splice(r,1)}e.parent=this;var i=this.children;return i||(i=this.children=[]),t!==-1?i.splice(t,0,e):i.push(e),e},n.prototype.attachTo=function(e,t){return t===void 0&&(t=-1),e&&e.adoptChild(this,t),this},n.prototype.collectIssues=function(e){this.issues&&e.push.apply(e,this.issues)},n.prototype.addIssue=function(e){this.issues||(this.issues=[]),this.issues.push(e)},n.prototype.hasIssue=function(e){return Array.isArray(this.issues)&&this.issues.some(function(t){return t.getRule()===e})},n.prototype.isErroneous=function(e){return e===void 0&&(e=!1),this.issues&&this.issues.length>0?!0:e&&Array.isArray(this.children)&&this.children.some(function(t){return t.isErroneous(!0)})},n.prototype.setNode=function(e,t,r){return r===void 0&&(r=-1),t?(t.attachTo(this,r),this[e]=t,!0):!1},n.prototype.addChild=function(e){return e?(this.children||(this.children=[]),e.attachTo(this),this.updateOffsetAndLength(e),!0):!1},n.prototype.updateOffsetAndLength=function(e){(e.offsetthis.end||this.length===-1)&&(this.length=t-this.offset)},n.prototype.hasChildren=function(){return!!this.children&&this.children.length>0},n.prototype.getChildren=function(){return this.children?this.children.slice(0):[]},n.prototype.getChild=function(e){return this.children&&e=0;r--)if(t=this.children[r],t.offset<=e)return t}return null},n.prototype.findChildAtOffset=function(e,t){var r=this.findFirstChildBeforeOffset(e);return r&&r.end>=e?t&&r.findChildAtOffset(e,!0)||r:null},n.prototype.encloses=function(e){return this.offset<=e.offset&&this.offset+this.length>=e.offset+e.length},n.prototype.getParent=function(){for(var e=this.parent;e instanceof ee;)e=e.parent;return e},n.prototype.findParent=function(e){for(var t=this;t&&t.type!==e;)t=t.parent;return t},n.prototype.findAParent=function(){for(var e=[],t=0;t{let o=i[0];return typeof e[o]<"u"?e[o]:r}),t}function js(n,e,...t){return Us(e,t)}function H(n){return js}var U=H(),j=function(){function n(e,t){this.id=e,this.message=t}return n}();var f={NumberExpected:new j("css-numberexpected",U("expected.number","number expected")),ConditionExpected:new j("css-conditionexpected",U("expected.condt","condition expected")),RuleOrSelectorExpected:new j("css-ruleorselectorexpected",U("expected.ruleorselector","at-rule or selector expected")),DotExpected:new j("css-dotexpected",U("expected.dot","dot expected")),ColonExpected:new j("css-colonexpected",U("expected.colon","colon expected")),SemiColonExpected:new j("css-semicolonexpected",U("expected.semicolon","semi-colon expected")),TermExpected:new j("css-termexpected",U("expected.term","term expected")),ExpressionExpected:new j("css-expressionexpected",U("expected.expression","expression expected")),OperatorExpected:new j("css-operatorexpected",U("expected.operator","operator expected")),IdentifierExpected:new j("css-identifierexpected",U("expected.ident","identifier expected")),PercentageExpected:new j("css-percentageexpected",U("expected.percentage","percentage expected")),URIOrStringExpected:new j("css-uriorstringexpected",U("expected.uriorstring","uri or string expected")),URIExpected:new j("css-uriexpected",U("expected.uri","URI expected")),VariableNameExpected:new j("css-varnameexpected",U("expected.varname","variable name expected")),VariableValueExpected:new j("css-varvalueexpected",U("expected.varvalue","variable value expected")),PropertyValueExpected:new j("css-propertyvalueexpected",U("expected.propvalue","property value expected")),LeftCurlyExpected:new j("css-lcurlyexpected",U("expected.lcurly","{ expected")),RightCurlyExpected:new j("css-rcurlyexpected",U("expected.rcurly","} expected")),LeftSquareBracketExpected:new j("css-rbracketexpected",U("expected.lsquare","[ expected")),RightSquareBracketExpected:new j("css-lbracketexpected",U("expected.rsquare","] expected")),LeftParenthesisExpected:new j("css-lparentexpected",U("expected.lparen","( expected")),RightParenthesisExpected:new j("css-rparentexpected",U("expected.rparent",") expected")),CommaExpected:new j("css-commaexpected",U("expected.comma","comma expected")),PageDirectiveOrDeclarationExpected:new j("css-pagedirordeclexpected",U("expected.pagedirordecl","page directive or declaraton expected")),UnknownAtRule:new j("css-unknownatrule",U("unknown.atrule","at-rule unknown")),UnknownKeyword:new j("css-unknownkeyword",U("unknown.keyword","unknown keyword")),SelectorExpected:new j("css-selectorexpected",U("expected.selector","selector expected")),StringLiteralExpected:new j("css-stringliteralexpected",U("expected.stringliteral","string literal expected")),WhitespaceExpected:new j("css-whitespaceexpected",U("expected.whitespace","whitespace expected")),MediaQueryExpected:new j("css-mediaqueryexpected",U("expected.mediaquery","media query expected")),IdentifierOrWildcardExpected:new j("css-idorwildcardexpected",U("expected.idorwildcard","identifier or wildcard expected")),WildcardExpected:new j("css-wildcardexpected",U("expected.wildcard","wildcard expected")),IdentifierOrVariableExpected:new j("css-idorvarexpected",U("expected.idorvar","identifier or variable expected"))};var Oi;(function(n){n.MIN_VALUE=-2147483648,n.MAX_VALUE=2147483647})(Oi||(Oi={}));var gn;(function(n){n.MIN_VALUE=0,n.MAX_VALUE=2147483647})(gn||(gn={}));var Q;(function(n){function e(r,i){return r===Number.MAX_VALUE&&(r=gn.MAX_VALUE),i===Number.MAX_VALUE&&(i=gn.MAX_VALUE),{line:r,character:i}}n.create=e;function t(r){var i=r;return v.objectLiteral(i)&&v.uinteger(i.line)&&v.uinteger(i.character)}n.is=t})(Q||(Q={}));var W;(function(n){function e(r,i,o,s){if(v.uinteger(r)&&v.uinteger(i)&&v.uinteger(o)&&v.uinteger(s))return{start:Q.create(r,i),end:Q.create(o,s)};if(Q.is(r)&&Q.is(i))return{start:r,end:i};throw new Error("Range#create called with invalid arguments["+r+", "+i+", "+o+", "+s+"]")}n.create=e;function t(r){var i=r;return v.objectLiteral(i)&&Q.is(i.start)&&Q.is(i.end)}n.is=t})(W||(W={}));var tt;(function(n){function e(r,i){return{uri:r,range:i}}n.create=e;function t(r){var i=r;return v.defined(i)&&W.is(i.range)&&(v.string(i.uri)||v.undefined(i.uri))}n.is=t})(tt||(tt={}));var Wi;(function(n){function e(r,i,o,s){return{targetUri:r,targetRange:i,targetSelectionRange:o,originSelectionRange:s}}n.create=e;function t(r){var i=r;return v.defined(i)&&W.is(i.targetRange)&&v.string(i.targetUri)&&(W.is(i.targetSelectionRange)||v.undefined(i.targetSelectionRange))&&(W.is(i.originSelectionRange)||v.undefined(i.originSelectionRange))}n.is=t})(Wi||(Wi={}));var bn;(function(n){function e(r,i,o,s){return{red:r,green:i,blue:o,alpha:s}}n.create=e;function t(r){var i=r;return v.numberRange(i.red,0,1)&&v.numberRange(i.green,0,1)&&v.numberRange(i.blue,0,1)&&v.numberRange(i.alpha,0,1)}n.is=t})(bn||(bn={}));var er;(function(n){function e(r,i){return{range:r,color:i}}n.create=e;function t(r){var i=r;return W.is(i.range)&&bn.is(i.color)}n.is=t})(er||(er={}));var tr;(function(n){function e(r,i,o){return{label:r,textEdit:i,additionalTextEdits:o}}n.create=e;function t(r){var i=r;return v.string(i.label)&&(v.undefined(i.textEdit)||T.is(i))&&(v.undefined(i.additionalTextEdits)||v.typedArray(i.additionalTextEdits,T.is))}n.is=t})(tr||(tr={}));var nr;(function(n){n.Comment="comment",n.Imports="imports",n.Region="region"})(nr||(nr={}));var rr;(function(n){function e(r,i,o,s,a){var l={startLine:r,endLine:i};return v.defined(o)&&(l.startCharacter=o),v.defined(s)&&(l.endCharacter=s),v.defined(a)&&(l.kind=a),l}n.create=e;function t(r){var i=r;return v.uinteger(i.startLine)&&v.uinteger(i.startLine)&&(v.undefined(i.startCharacter)||v.uinteger(i.startCharacter))&&(v.undefined(i.endCharacter)||v.uinteger(i.endCharacter))&&(v.undefined(i.kind)||v.string(i.kind))}n.is=t})(rr||(rr={}));var ir;(function(n){function e(r,i){return{location:r,message:i}}n.create=e;function t(r){var i=r;return v.defined(i)&&tt.is(i.location)&&v.string(i.message)}n.is=t})(ir||(ir={}));var mt;(function(n){n.Error=1,n.Warning=2,n.Information=3,n.Hint=4})(mt||(mt={}));var Li;(function(n){n.Unnecessary=1,n.Deprecated=2})(Li||(Li={}));var Ui;(function(n){function e(t){var r=t;return r!=null&&v.string(r.href)}n.is=e})(Ui||(Ui={}));var It;(function(n){function e(r,i,o,s,a,l){var c={range:r,message:i};return v.defined(o)&&(c.severity=o),v.defined(s)&&(c.code=s),v.defined(a)&&(c.source=a),v.defined(l)&&(c.relatedInformation=l),c}n.create=e;function t(r){var i,o=r;return v.defined(o)&&W.is(o.range)&&v.string(o.message)&&(v.number(o.severity)||v.undefined(o.severity))&&(v.integer(o.code)||v.string(o.code)||v.undefined(o.code))&&(v.undefined(o.codeDescription)||v.string((i=o.codeDescription)===null||i===void 0?void 0:i.href))&&(v.string(o.source)||v.undefined(o.source))&&(v.undefined(o.relatedInformation)||v.typedArray(o.relatedInformation,ir.is))}n.is=t})(It||(It={}));var Ge;(function(n){function e(r,i){for(var o=[],s=2;s0&&(a.arguments=o),a}n.create=e;function t(r){var i=r;return v.defined(i)&&v.string(i.title)&&v.string(i.command)}n.is=t})(Ge||(Ge={}));var T;(function(n){function e(o,s){return{range:o,newText:s}}n.replace=e;function t(o,s){return{range:{start:o,end:o},newText:s}}n.insert=t;function r(o){return{range:o,newText:""}}n.del=r;function i(o){var s=o;return v.objectLiteral(s)&&v.string(s.newText)&&W.is(s.range)}n.is=i})(T||(T={}));var ut;(function(n){function e(r,i,o){var s={label:r};return i!==void 0&&(s.needsConfirmation=i),o!==void 0&&(s.description=o),s}n.create=e;function t(r){var i=r;return i!==void 0&&v.objectLiteral(i)&&v.string(i.label)&&(v.boolean(i.needsConfirmation)||i.needsConfirmation===void 0)&&(v.string(i.description)||i.description===void 0)}n.is=t})(ut||(ut={}));var le;(function(n){function e(t){var r=t;return typeof r=="string"}n.is=e})(le||(le={}));var Ke;(function(n){function e(o,s,a){return{range:o,newText:s,annotationId:a}}n.replace=e;function t(o,s,a){return{range:{start:o,end:o},newText:s,annotationId:a}}n.insert=t;function r(o,s){return{range:o,newText:"",annotationId:s}}n.del=r;function i(o){var s=o;return T.is(s)&&(ut.is(s.annotationId)||le.is(s.annotationId))}n.is=i})(Ke||(Ke={}));var nt;(function(n){function e(r,i){return{textDocument:r,edits:i}}n.create=e;function t(r){var i=r;return v.defined(i)&&yn.is(i.textDocument)&&Array.isArray(i.edits)}n.is=t})(nt||(nt={}));var Mt;(function(n){function e(r,i,o){var s={kind:"create",uri:r};return i!==void 0&&(i.overwrite!==void 0||i.ignoreIfExists!==void 0)&&(s.options=i),o!==void 0&&(s.annotationId=o),s}n.create=e;function t(r){var i=r;return i&&i.kind==="create"&&v.string(i.uri)&&(i.options===void 0||(i.options.overwrite===void 0||v.boolean(i.options.overwrite))&&(i.options.ignoreIfExists===void 0||v.boolean(i.options.ignoreIfExists)))&&(i.annotationId===void 0||le.is(i.annotationId))}n.is=t})(Mt||(Mt={}));var Tt;(function(n){function e(r,i,o,s){var a={kind:"rename",oldUri:r,newUri:i};return o!==void 0&&(o.overwrite!==void 0||o.ignoreIfExists!==void 0)&&(a.options=o),s!==void 0&&(a.annotationId=s),a}n.create=e;function t(r){var i=r;return i&&i.kind==="rename"&&v.string(i.oldUri)&&v.string(i.newUri)&&(i.options===void 0||(i.options.overwrite===void 0||v.boolean(i.options.overwrite))&&(i.options.ignoreIfExists===void 0||v.boolean(i.options.ignoreIfExists)))&&(i.annotationId===void 0||le.is(i.annotationId))}n.is=t})(Tt||(Tt={}));var Pt;(function(n){function e(r,i,o){var s={kind:"delete",uri:r};return i!==void 0&&(i.recursive!==void 0||i.ignoreIfNotExists!==void 0)&&(s.options=i),o!==void 0&&(s.annotationId=o),s}n.create=e;function t(r){var i=r;return i&&i.kind==="delete"&&v.string(i.uri)&&(i.options===void 0||(i.options.recursive===void 0||v.boolean(i.options.recursive))&&(i.options.ignoreIfNotExists===void 0||v.boolean(i.options.ignoreIfNotExists)))&&(i.annotationId===void 0||le.is(i.annotationId))}n.is=t})(Pt||(Pt={}));var vn;(function(n){function e(t){var r=t;return r&&(r.changes!==void 0||r.documentChanges!==void 0)&&(r.documentChanges===void 0||r.documentChanges.every(function(i){return v.string(i.kind)?Mt.is(i)||Tt.is(i)||Pt.is(i):nt.is(i)}))}n.is=e})(vn||(vn={}));var fn=function(){function n(e,t){this.edits=e,this.changeAnnotations=t}return n.prototype.insert=function(e,t,r){var i,o;if(r===void 0?i=T.insert(e,t):le.is(r)?(o=r,i=Ke.insert(e,t,r)):(this.assertChangeAnnotations(this.changeAnnotations),o=this.changeAnnotations.manage(r),i=Ke.insert(e,t,o)),this.edits.push(i),o!==void 0)return o},n.prototype.replace=function(e,t,r){var i,o;if(r===void 0?i=T.replace(e,t):le.is(r)?(o=r,i=Ke.replace(e,t,r)):(this.assertChangeAnnotations(this.changeAnnotations),o=this.changeAnnotations.manage(r),i=Ke.replace(e,t,o)),this.edits.push(i),o!==void 0)return o},n.prototype.delete=function(e,t){var r,i;if(t===void 0?r=T.del(e):le.is(t)?(i=t,r=Ke.del(e,t)):(this.assertChangeAnnotations(this.changeAnnotations),i=this.changeAnnotations.manage(t),r=Ke.del(e,i)),this.edits.push(r),i!==void 0)return i},n.prototype.add=function(e){this.edits.push(e)},n.prototype.all=function(){return this.edits},n.prototype.clear=function(){this.edits.splice(0,this.edits.length)},n.prototype.assertChangeAnnotations=function(e){if(e===void 0)throw new Error("Text edit change is not configured to manage change annotations.")},n}(),ji=function(){function n(e){this._annotations=e===void 0?Object.create(null):e,this._counter=0,this._size=0}return n.prototype.all=function(){return this._annotations},Object.defineProperty(n.prototype,"size",{get:function(){return this._size},enumerable:!1,configurable:!0}),n.prototype.manage=function(e,t){var r;if(le.is(e)?r=e:(r=this.nextId(),t=e),this._annotations[r]!==void 0)throw new Error("Id "+r+" is already in use.");if(t===void 0)throw new Error("No annotation provided for id "+r);return this._annotations[r]=t,this._size++,r},n.prototype.nextId=function(){return this._counter++,this._counter.toString()},n}(),pl=function(){function n(e){var t=this;this._textEditChanges=Object.create(null),e!==void 0?(this._workspaceEdit=e,e.documentChanges?(this._changeAnnotations=new ji(e.changeAnnotations),e.changeAnnotations=this._changeAnnotations.all(),e.documentChanges.forEach(function(r){if(nt.is(r)){var i=new fn(r.edits,t._changeAnnotations);t._textEditChanges[r.textDocument.uri]=i}})):e.changes&&Object.keys(e.changes).forEach(function(r){var i=new fn(e.changes[r]);t._textEditChanges[r]=i})):this._workspaceEdit={}}return Object.defineProperty(n.prototype,"edit",{get:function(){return this.initDocumentChanges(),this._changeAnnotations!==void 0&&(this._changeAnnotations.size===0?this._workspaceEdit.changeAnnotations=void 0:this._workspaceEdit.changeAnnotations=this._changeAnnotations.all()),this._workspaceEdit},enumerable:!1,configurable:!0}),n.prototype.getTextEditChange=function(e){if(yn.is(e)){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");var t={uri:e.uri,version:e.version},r=this._textEditChanges[t.uri];if(!r){var i=[],o={textDocument:t,edits:i};this._workspaceEdit.documentChanges.push(o),r=new fn(i,this._changeAnnotations),this._textEditChanges[t.uri]=r}return r}else{if(this.initChanges(),this._workspaceEdit.changes===void 0)throw new Error("Workspace edit is not configured for normal text edit changes.");var r=this._textEditChanges[e];if(!r){var i=[];this._workspaceEdit.changes[e]=i,r=new fn(i),this._textEditChanges[e]=r}return r}},n.prototype.initDocumentChanges=function(){this._workspaceEdit.documentChanges===void 0&&this._workspaceEdit.changes===void 0&&(this._changeAnnotations=new ji,this._workspaceEdit.documentChanges=[],this._workspaceEdit.changeAnnotations=this._changeAnnotations.all())},n.prototype.initChanges=function(){this._workspaceEdit.documentChanges===void 0&&this._workspaceEdit.changes===void 0&&(this._workspaceEdit.changes=Object.create(null))},n.prototype.createFile=function(e,t,r){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");var i;ut.is(t)||le.is(t)?i=t:r=t;var o,s;if(i===void 0?o=Mt.create(e,r):(s=le.is(i)?i:this._changeAnnotations.manage(i),o=Mt.create(e,r,s)),this._workspaceEdit.documentChanges.push(o),s!==void 0)return s},n.prototype.renameFile=function(e,t,r,i){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");var o;ut.is(r)||le.is(r)?o=r:i=r;var s,a;if(o===void 0?s=Tt.create(e,t,i):(a=le.is(o)?o:this._changeAnnotations.manage(o),s=Tt.create(e,t,i,a)),this._workspaceEdit.documentChanges.push(s),a!==void 0)return a},n.prototype.deleteFile=function(e,t,r){if(this.initDocumentChanges(),this._workspaceEdit.documentChanges===void 0)throw new Error("Workspace edit is not configured for document changes.");var i;ut.is(t)||le.is(t)?i=t:r=t;var o,s;if(i===void 0?o=Pt.create(e,r):(s=le.is(i)?i:this._changeAnnotations.manage(i),o=Pt.create(e,r,s)),this._workspaceEdit.documentChanges.push(o),s!==void 0)return s},n}();var Vi;(function(n){function e(r){return{uri:r}}n.create=e;function t(r){var i=r;return v.defined(i)&&v.string(i.uri)}n.is=t})(Vi||(Vi={}));var At;(function(n){function e(r,i){return{uri:r,version:i}}n.create=e;function t(r){var i=r;return v.defined(i)&&v.string(i.uri)&&v.integer(i.version)}n.is=t})(At||(At={}));var yn;(function(n){function e(r,i){return{uri:r,version:i}}n.create=e;function t(r){var i=r;return v.defined(i)&&v.string(i.uri)&&(i.version===null||v.integer(i.version))}n.is=t})(yn||(yn={}));var Bi;(function(n){function e(r,i,o,s){return{uri:r,languageId:i,version:o,text:s}}n.create=e;function t(r){var i=r;return v.defined(i)&&v.string(i.uri)&&v.string(i.languageId)&&v.integer(i.version)&&v.string(i.text)}n.is=t})(Bi||(Bi={}));var ce;(function(n){n.PlainText="plaintext",n.Markdown="markdown"})(ce||(ce={}));(function(n){function e(t){var r=t;return r===n.PlainText||r===n.Markdown}n.is=e})(ce||(ce={}));var wn;(function(n){function e(t){var r=t;return v.objectLiteral(t)&&ce.is(r.kind)&&v.string(r.value)}n.is=e})(wn||(wn={}));var R;(function(n){n.Text=1,n.Method=2,n.Function=3,n.Constructor=4,n.Field=5,n.Variable=6,n.Class=7,n.Interface=8,n.Module=9,n.Property=10,n.Unit=11,n.Value=12,n.Enum=13,n.Keyword=14,n.Snippet=15,n.Color=16,n.File=17,n.Reference=18,n.Folder=19,n.EnumMember=20,n.Constant=21,n.Struct=22,n.Event=23,n.Operator=24,n.TypeParameter=25})(R||(R={}));var re;(function(n){n.PlainText=1,n.Snippet=2})(re||(re={}));var Ne;(function(n){n.Deprecated=1})(Ne||(Ne={}));var $i;(function(n){function e(r,i,o){return{newText:r,insert:i,replace:o}}n.create=e;function t(r){var i=r;return i&&v.string(i.newText)&&W.is(i.insert)&&W.is(i.replace)}n.is=t})($i||($i={}));var qi;(function(n){n.asIs=1,n.adjustIndentation=2})(qi||(qi={}));var or;(function(n){function e(t){return{label:t}}n.create=e})(or||(or={}));var sr;(function(n){function e(t,r){return{items:t||[],isIncomplete:!!r}}n.create=e})(sr||(sr={}));var Nt;(function(n){function e(r){return r.replace(/[\\`*_{}[\]()#+\-.!]/g,"\\$&")}n.fromPlainText=e;function t(r){var i=r;return v.string(i)||v.objectLiteral(i)&&v.string(i.language)&&v.string(i.value)}n.is=t})(Nt||(Nt={}));var ar;(function(n){function e(t){var r=t;return!!r&&v.objectLiteral(r)&&(wn.is(r.contents)||Nt.is(r.contents)||v.typedArray(r.contents,Nt.is))&&(t.range===void 0||W.is(t.range))}n.is=e})(ar||(ar={}));var Ki;(function(n){function e(t,r){return r?{label:t,documentation:r}:{label:t}}n.create=e})(Ki||(Ki={}));var Gi;(function(n){function e(t,r){for(var i=[],o=2;o=0;h--){var p=l[h],m=o.offsetAt(p.range.start),g=o.offsetAt(p.range.end);if(g<=c)a=a.substring(0,m)+p.newText+a.substring(g,a.length);else throw new Error("Overlapping edit");c=m}return a}n.applyEdits=r;function i(o,s){if(o.length<=1)return o;var a=o.length/2|0,l=o.slice(0,a),c=o.slice(a);i(l,s),i(c,s);for(var h=0,p=0,m=0;h0&&e.push(t.length),this._lineOffsets=e}return this._lineOffsets},n.prototype.positionAt=function(e){e=Math.max(Math.min(e,this._content.length),0);var t=this.getLineOffsets(),r=0,i=t.length;if(i===0)return Q.create(0,e);for(;re?i=o:r=o+1}var s=r-1;return Q.create(s,e-t[s])},n.prototype.offsetAt=function(e){var t=this.getLineOffsets();if(e.line>=t.length)return this._content.length;if(e.line<0)return 0;var r=t[e.line],i=e.line+1"u"}n.undefined=r;function i(g){return g===!0||g===!1}n.boolean=i;function o(g){return e.call(g)==="[object String]"}n.string=o;function s(g){return e.call(g)==="[object Number]"}n.number=s;function a(g,w,x){return e.call(g)==="[object Number]"&&w<=g&&g<=x}n.numberRange=a;function l(g){return e.call(g)==="[object Number]"&&-2147483648<=g&&g<=2147483647}n.integer=l;function c(g){return e.call(g)==="[object Number]"&&0<=g&&g<=2147483647}n.uinteger=c;function h(g){return e.call(g)==="[object Function]"}n.func=h;function p(g){return g!==null&&typeof g=="object"}n.objectLiteral=p;function m(g,w){return Array.isArray(g)&&g.every(w)}n.typedArray=m})(v||(v={}));var xn=class n{constructor(e,t,r,i){this._uri=e,this._languageId=t,this._version=r,this._content=i,this._lineOffsets=void 0}get uri(){return this._uri}get languageId(){return this._languageId}get version(){return this._version}getText(e){if(e){let t=this.offsetAt(e.start),r=this.offsetAt(e.end);return this._content.substring(t,r)}return this._content}update(e,t){for(let r of e)if(n.isIncremental(r)){let i=Zi(r.range),o=this.offsetAt(i.start),s=this.offsetAt(i.end);this._content=this._content.substring(0,o)+r.text+this._content.substring(s,this._content.length);let a=Math.max(i.start.line,0),l=Math.max(i.end.line,0),c=this._lineOffsets,h=Qi(r.text,!1,o);if(l-a===h.length)for(let m=0,g=h.length;me?i=s:r=s+1}let o=r-1;return{line:o,character:e-t[o]}}offsetAt(e){let t=this.getLineOffsets();if(e.line>=t.length)return this._content.length;if(e.line<0)return 0;let r=t[e.line],i=e.line+1{let m=h.range.start.line-p.range.start.line;return m===0?h.range.start.character-p.range.start.character:m}),l=0,c=[];for(let h of a){let p=i.offsetAt(h.range.start);if(pl&&c.push(s.substring(l,p)),h.newText.length&&c.push(h.newText),l=i.offsetAt(h.range.end)}return c.push(s.substr(l)),c.join("")}n.applyEdits=r})(Lt||(Lt={}));function ur(n,e){if(n.length<=1)return n;let t=n.length/2|0,r=n.slice(0,t),i=n.slice(t);ur(r,e),ur(i,e);let o=0,s=0,a=0;for(;ot.line||e.line===t.line&&e.character>t.character?{start:t,end:e}:n}function Bs(n){let e=Zi(n.range);return e!==n.range?{newText:n.newText,range:e}:n}var eo;(function(n){n.LATEST={textDocument:{completion:{completionItem:{documentationFormat:[ce.Markdown,ce.PlainText]}},hover:{contentFormat:[ce.Markdown,ce.PlainText]}}}})(eo||(eo={}));var rt;(function(n){n[n.Unknown=0]="Unknown",n[n.File=1]="File",n[n.Directory=2]="Directory",n[n.SymbolicLink=64]="SymbolicLink"})(rt||(rt={}));var to={E:"Edge",FF:"Firefox",S:"Safari",C:"Chrome",IE:"IE",O:"Opera"};function no(n){switch(n){case"experimental":return`\u26A0\uFE0F Property is experimental. Be cautious when using it.\uFE0F + +`;case"nonstandard":return`\u{1F6A8}\uFE0F Property is nonstandard. Avoid using it. + +`;case"obsolete":return`\u{1F6A8}\uFE0F\uFE0F\uFE0F Property is obsolete. Avoid using it. + +`;default:return""}}function ze(n,e,t){var r;if(e?r={kind:"markdown",value:qs(n,t)}:r={kind:"plaintext",value:$s(n,t)},r.value!=="")return r}function Sn(n){return n=n.replace(/[\\`*_{}[\]()#+\-.!]/g,"\\$&"),n.replace(//g,">")}function $s(n,e){if(!n.description||n.description==="")return"";if(typeof n.description!="string")return n.description.value;var t="";if(e?.documentation!==!1){n.status&&(t+=no(n.status)),t+=n.description;var r=ro(n.browsers);r&&(t+=` +(`+r+")"),"syntax"in n&&(t+=` + +Syntax: `.concat(n.syntax))}return n.references&&n.references.length>0&&e?.references!==!1&&(t.length>0&&(t+=` + +`),t+=n.references.map(function(i){return"".concat(i.name,": ").concat(i.url)}).join(" | ")),t}function qs(n,e){if(!n.description||n.description==="")return"";var t="";if(e?.documentation!==!1){n.status&&(t+=no(n.status)),typeof n.description=="string"?t+=Sn(n.description):t+=n.description.kind===ce.Markdown?n.description.value:Sn(n.description.value);var r=ro(n.browsers);r&&(t+=` + +(`+Sn(r)+")"),"syntax"in n&&n.syntax&&(t+=` + +Syntax: `.concat(Sn(n.syntax)))}return n.references&&n.references.length>0&&e?.references!==!1&&(t.length>0&&(t+=` + +`),t+=n.references.map(function(i){return"[".concat(i.name,"](").concat(i.url,")")}).join(" | ")),t}function ro(n){return n===void 0&&(n=[]),n.length===0?null:n.map(function(e){var t="",r=e.match(/([A-Z]+)(\d+)?/),i=r[1],o=r[2];return i in to&&(t+=to[i]),o&&(t+=" "+o),t}).join(", ")}var Ut=H(),ao=[{func:"rgb($red, $green, $blue)",desc:Ut("css.builtin.rgb","Creates a Color from red, green, and blue values.")},{func:"rgba($red, $green, $blue, $alpha)",desc:Ut("css.builtin.rgba","Creates a Color from red, green, blue, and alpha values.")},{func:"hsl($hue, $saturation, $lightness)",desc:Ut("css.builtin.hsl","Creates a Color from hue, saturation, and lightness values.")},{func:"hsla($hue, $saturation, $lightness, $alpha)",desc:Ut("css.builtin.hsla","Creates a Color from hue, saturation, lightness, and alpha values.")},{func:"hwb($hue $white $black)",desc:Ut("css.builtin.hwb","Creates a Color from hue, white and black.")}],jt={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#00ffff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000000",blanchedalmond:"#ffebcd",blue:"#0000ff",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkgray:"#a9a9a9",darkgrey:"#a9a9a9",darkgreen:"#006400",darkkhaki:"#bdb76b",darkmagenta:"#8b008b",darkolivegreen:"#556b2f",darkorange:"#ff8c00",darkorchid:"#9932cc",darkred:"#8b0000",darksalmon:"#e9967a",darkseagreen:"#8fbc8f",darkslateblue:"#483d8b",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",darkturquoise:"#00ced1",darkviolet:"#9400d3",deeppink:"#ff1493",deepskyblue:"#00bfff",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1e90ff",firebrick:"#b22222",floralwhite:"#fffaf0",forestgreen:"#228b22",fuchsia:"#ff00ff",gainsboro:"#dcdcdc",ghostwhite:"#f8f8ff",gold:"#ffd700",goldenrod:"#daa520",gray:"#808080",grey:"#808080",green:"#008000",greenyellow:"#adff2f",honeydew:"#f0fff0",hotpink:"#ff69b4",indianred:"#cd5c5c",indigo:"#4b0082",ivory:"#fffff0",khaki:"#f0e68c",lavender:"#e6e6fa",lavenderblush:"#fff0f5",lawngreen:"#7cfc00",lemonchiffon:"#fffacd",lightblue:"#add8e6",lightcoral:"#f08080",lightcyan:"#e0ffff",lightgoldenrodyellow:"#fafad2",lightgray:"#d3d3d3",lightgrey:"#d3d3d3",lightgreen:"#90ee90",lightpink:"#ffb6c1",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",lightskyblue:"#87cefa",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#00ff00",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#ff00ff",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",mediumseagreen:"#3cb371",mediumslateblue:"#7b68ee",mediumspringgreen:"#00fa9a",mediumturquoise:"#48d1cc",mediumvioletred:"#c71585",midnightblue:"#191970",mintcream:"#f5fffa",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",navajowhite:"#ffdead",navy:"#000080",oldlace:"#fdf5e6",olive:"#808000",olivedrab:"#6b8e23",orange:"#ffa500",orangered:"#ff4500",orchid:"#da70d6",palegoldenrod:"#eee8aa",palegreen:"#98fb98",paleturquoise:"#afeeee",palevioletred:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#ff0000",rebeccapurple:"#663399",rosybrown:"#bc8f8f",royalblue:"#4169e1",saddlebrown:"#8b4513",salmon:"#fa8072",sandybrown:"#f4a460",seagreen:"#2e8b57",seashell:"#fff5ee",sienna:"#a0522d",silver:"#c0c0c0",skyblue:"#87ceeb",slateblue:"#6a5acd",slategray:"#708090",slategrey:"#708090",snow:"#fffafa",springgreen:"#00ff7f",steelblue:"#4682b4",tan:"#d2b48c",teal:"#008080",thistle:"#d8bfd8",tomato:"#ff6347",turquoise:"#40e0d0",violet:"#ee82ee",wheat:"#f5deb3",white:"#ffffff",whitesmoke:"#f5f5f5",yellow:"#ffff00",yellowgreen:"#9acd32"},mr={currentColor:"The value of the 'color' property. The computed value of the 'currentColor' keyword is the computed value of the 'color' property. If the 'currentColor' keyword is set on the 'color' property itself, it is treated as 'color:inherit' at parse time.",transparent:"Fully transparent. This keyword can be considered a shorthand for rgba(0,0,0,0) which is its computed value."};function Je(n,e){var t=n.getText(),r=t.match(/^([-+]?[0-9]*\.?[0-9]+)(%?)$/);if(r){r[2]&&(e=100);var i=parseFloat(r[1])/e;if(i>=0&&i<=1)return i}throw new Error}function io(n){var e=n.getText(),t=e.match(/^([-+]?[0-9]*\.?[0-9]+)(deg|rad|grad|turn)?$/);if(t)switch(t[2]){case"deg":return parseFloat(e)%360;case"rad":return parseFloat(e)*180/Math.PI%360;case"grad":return parseFloat(e)*.9%360;case"turn":return parseFloat(e)*360%360;default:if(typeof t[2]>"u")return parseFloat(e)%360}throw new Error}function lo(n){var e=n.getName();return e?/^(rgb|rgba|hsl|hsla|hwb)$/gi.test(e):!1}var oo=48,Ks=57,Gs=65;var kn=97,Hs=102;function J(n){return n=kn&&n<=Hs?n-kn+10:0)}function so(n){if(n[0]!=="#")return null;switch(n.length){case 4:return{red:J(n.charCodeAt(1))*17/255,green:J(n.charCodeAt(2))*17/255,blue:J(n.charCodeAt(3))*17/255,alpha:1};case 5:return{red:J(n.charCodeAt(1))*17/255,green:J(n.charCodeAt(2))*17/255,blue:J(n.charCodeAt(3))*17/255,alpha:J(n.charCodeAt(4))*17/255};case 7:return{red:(J(n.charCodeAt(1))*16+J(n.charCodeAt(2)))/255,green:(J(n.charCodeAt(3))*16+J(n.charCodeAt(4)))/255,blue:(J(n.charCodeAt(5))*16+J(n.charCodeAt(6)))/255,alpha:1};case 9:return{red:(J(n.charCodeAt(1))*16+J(n.charCodeAt(2)))/255,green:(J(n.charCodeAt(3))*16+J(n.charCodeAt(4)))/255,blue:(J(n.charCodeAt(5))*16+J(n.charCodeAt(6)))/255,alpha:(J(n.charCodeAt(7))*16+J(n.charCodeAt(8)))/255}}return null}function co(n,e,t,r){if(r===void 0&&(r=1),n=n/60,e===0)return{red:t,green:t,blue:t,alpha:r};var i=function(a,l,c){for(;c<0;)c+=6;for(;c>=6;)c-=6;return c<1?(l-a)*c+a:c<3?l:c<4?(l-a)*(4-c)+a:a},o=t<=.5?t*(e+1):t+e-t*e,s=t*2-o;return{red:i(s,o,n+2),green:i(s,o,n),blue:i(s,o,n-2),alpha:r}}function fr(n){var e=n.red,t=n.green,r=n.blue,i=n.alpha,o=Math.max(e,t,r),s=Math.min(e,t,r),a=0,l=0,c=(s+o)/2,h=o-s;if(h>0){switch(l=Math.min(c<=.5?h/(2*c):h/(2-2*c),1),o){case e:a=(t-r)/h+(t=1){var i=e/(e+t);return{red:i,green:i,blue:i,alpha:r}}var o=co(n,1,.5,r),s=o.red;s*=1-e-t,s+=e;var a=o.green;a*=1-e-t,a+=e;var l=o.blue;return l*=1-e-t,l+=e,{red:s,green:a,blue:l,alpha:r}}function ho(n){var e=fr(n),t=Math.min(n.red,n.green,n.blue),r=1-Math.max(n.red,n.green,n.blue);return{h:e.h,w:t,b:r,a:e.a}}function po(n){if(n.type===u.HexColorValue){var e=n.getText();return so(e)}else if(n.type===u.Function){var t=n,r=t.getName(),i=t.getArguments().getChildren();if(i.length===1){var o=i[0].getChildren();if(o.length===1&&o[0].type===u.Expression&&(i=o[0].getChildren(),i.length===3)){var s=i[2];if(s instanceof ht){var a=s.getLeft(),l=s.getRight(),c=s.getOperator();a&&l&&c&&c.matches("/")&&(i=[i[0],i[1],a,l])}}}if(!r||i.length<3||i.length>4)return null;try{var h=i.length===4?Je(i[3],1):1;if(r==="rgb"||r==="rgba")return{red:Je(i[0],255),green:Je(i[1],255),blue:Je(i[2],255),alpha:h};if(r==="hsl"||r==="hsla"){var p=io(i[0]),m=Je(i[1],100),g=Je(i[2],100);return co(p,m,g,h)}else if(r==="hwb"){var p=io(i[0]),w=Je(i[1],100),x=Je(i[2],100);return Js(p,w,x,h)}}catch{return null}}else if(n.type===u.Identifier){if(n.parent&&n.parent.type!==u.Term)return null;var y=n.parent;if(y&&y.parent&&y.parent.type===u.BinaryExpression){var D=y.parent;if(D.parent&&D.parent.type===u.ListEntry&&D.parent.key===D)return null}var M=n.getText().toLowerCase();if(M==="none")return null;var z=jt[M];if(z)return so(z)}return null}var gr={bottom:"Computes to \u2018100%\u2019 for the vertical position if one or two values are given, otherwise specifies the bottom edge as the origin for the next offset.",center:"Computes to \u201850%\u2019 (\u2018left 50%\u2019) for the horizontal position if the horizontal position is not otherwise specified, or \u201850%\u2019 (\u2018top 50%\u2019) for the vertical position if it is.",left:"Computes to \u20180%\u2019 for the horizontal position if one or two values are given, otherwise specifies the left edge as the origin for the next offset.",right:"Computes to \u2018100%\u2019 for the horizontal position if one or two values are given, otherwise specifies the right edge as the origin for the next offset.",top:"Computes to \u20180%\u2019 for the vertical position if one or two values are given, otherwise specifies the top edge as the origin for the next offset."},br={"no-repeat":"Placed once and not repeated in this direction.",repeat:"Repeated in this direction as often as needed to cover the background painting area.","repeat-x":"Computes to \u2018repeat no-repeat\u2019.","repeat-y":"Computes to \u2018no-repeat repeat\u2019.",round:"Repeated as often as will fit within the background positioning area. If it doesn\u2019t fit a whole number of times, it is rescaled so that it does.",space:"Repeated as often as will fit within the background positioning area without being clipped and then the images are spaced out to fill the area."},vr={dashed:"A series of square-ended dashes.",dotted:"A series of round dots.",double:"Two parallel solid lines with some space between them.",groove:"Looks as if it were carved in the canvas.",hidden:"Same as \u2018none\u2019, but has different behavior in the border conflict resolution rules for border-collapsed tables.",inset:"Looks as if the content on the inside of the border is sunken into the canvas.",none:"No border. Color and width are ignored.",outset:"Looks as if the content on the inside of the border is coming out of the canvas.",ridge:"Looks as if it were coming out of the canvas.",solid:"A single line segment."},uo=["medium","thick","thin"],yr={"border-box":"The background is painted within (clipped to) the border box.","content-box":"The background is painted within (clipped to) the content box.","padding-box":"The background is painted within (clipped to) the padding box."},wr={"margin-box":"Uses the margin box as reference box.","fill-box":"Uses the object bounding box as reference box.","stroke-box":"Uses the stroke bounding box as reference box.","view-box":"Uses the nearest SVG viewport as reference box."},xr={initial:"Represents the value specified as the property\u2019s initial value.",inherit:"Represents the computed value of the property on the element\u2019s parent.",unset:"Acts as either `inherit` or `initial`, depending on whether the property is inherited or not."},Sr={"var()":"Evaluates the value of a custom variable.","calc()":"Evaluates an mathematical expression. The following operators can be used: + - * /."},kr={"url()":"Reference an image file by URL","image()":"Provide image fallbacks and annotations.","-webkit-image-set()":"Provide multiple resolutions. Remember to use unprefixed image-set() in addition.","image-set()":"Provide multiple resolutions of an image and const the UA decide which is most appropriate in a given situation.","-moz-element()":"Use an element in the document as an image. Remember to use unprefixed element() in addition.","element()":"Use an element in the document as an image.","cross-fade()":"Indicates the two images to be combined and how far along in the transition the combination is.","-webkit-gradient()":"Deprecated. Use modern linear-gradient() or radial-gradient() instead.","-webkit-linear-gradient()":"Linear gradient. Remember to use unprefixed version in addition.","-moz-linear-gradient()":"Linear gradient. Remember to use unprefixed version in addition.","-o-linear-gradient()":"Linear gradient. Remember to use unprefixed version in addition.","linear-gradient()":"A linear gradient is created by specifying a straight gradient line, and then several colors placed along that line.","-webkit-repeating-linear-gradient()":"Repeating Linear gradient. Remember to use unprefixed version in addition.","-moz-repeating-linear-gradient()":"Repeating Linear gradient. Remember to use unprefixed version in addition.","-o-repeating-linear-gradient()":"Repeating Linear gradient. Remember to use unprefixed version in addition.","repeating-linear-gradient()":"Same as linear-gradient, except the color-stops are repeated infinitely in both directions, with their positions shifted by multiples of the difference between the last specified color-stop\u2019s position and the first specified color-stop\u2019s position.","-webkit-radial-gradient()":"Radial gradient. Remember to use unprefixed version in addition.","-moz-radial-gradient()":"Radial gradient. Remember to use unprefixed version in addition.","radial-gradient()":"Colors emerge from a single point and smoothly spread outward in a circular or elliptical shape.","-webkit-repeating-radial-gradient()":"Repeating radial gradient. Remember to use unprefixed version in addition.","-moz-repeating-radial-gradient()":"Repeating radial gradient. Remember to use unprefixed version in addition.","repeating-radial-gradient()":"Same as radial-gradient, except the color-stops are repeated infinitely in both directions, with their positions shifted by multiples of the difference between the last specified color-stop\u2019s position and the first specified color-stop\u2019s position."},Cr={ease:"Equivalent to cubic-bezier(0.25, 0.1, 0.25, 1.0).","ease-in":"Equivalent to cubic-bezier(0.42, 0, 1.0, 1.0).","ease-in-out":"Equivalent to cubic-bezier(0.42, 0, 0.58, 1.0).","ease-out":"Equivalent to cubic-bezier(0, 0, 0.58, 1.0).",linear:"Equivalent to cubic-bezier(0.0, 0.0, 1.0, 1.0).","step-end":"Equivalent to steps(1, end).","step-start":"Equivalent to steps(1, start).","steps()":"The first parameter specifies the number of intervals in the function. The second parameter, which is optional, is either the value \u201Cstart\u201D or \u201Cend\u201D.","cubic-bezier()":"Specifies a cubic-bezier curve. The four values specify points P1 and P2 of the curve as (x1, y1, x2, y2).","cubic-bezier(0.6, -0.28, 0.735, 0.045)":"Ease-in Back. Overshoots.","cubic-bezier(0.68, -0.55, 0.265, 1.55)":"Ease-in-out Back. Overshoots.","cubic-bezier(0.175, 0.885, 0.32, 1.275)":"Ease-out Back. Overshoots.","cubic-bezier(0.6, 0.04, 0.98, 0.335)":"Ease-in Circular. Based on half circle.","cubic-bezier(0.785, 0.135, 0.15, 0.86)":"Ease-in-out Circular. Based on half circle.","cubic-bezier(0.075, 0.82, 0.165, 1)":"Ease-out Circular. Based on half circle.","cubic-bezier(0.55, 0.055, 0.675, 0.19)":"Ease-in Cubic. Based on power of three.","cubic-bezier(0.645, 0.045, 0.355, 1)":"Ease-in-out Cubic. Based on power of three.","cubic-bezier(0.215, 0.610, 0.355, 1)":"Ease-out Cubic. Based on power of three.","cubic-bezier(0.95, 0.05, 0.795, 0.035)":"Ease-in Exponential. Based on two to the power ten.","cubic-bezier(1, 0, 0, 1)":"Ease-in-out Exponential. Based on two to the power ten.","cubic-bezier(0.19, 1, 0.22, 1)":"Ease-out Exponential. Based on two to the power ten.","cubic-bezier(0.47, 0, 0.745, 0.715)":"Ease-in Sine.","cubic-bezier(0.445, 0.05, 0.55, 0.95)":"Ease-in-out Sine.","cubic-bezier(0.39, 0.575, 0.565, 1)":"Ease-out Sine.","cubic-bezier(0.55, 0.085, 0.68, 0.53)":"Ease-in Quadratic. Based on power of two.","cubic-bezier(0.455, 0.03, 0.515, 0.955)":"Ease-in-out Quadratic. Based on power of two.","cubic-bezier(0.25, 0.46, 0.45, 0.94)":"Ease-out Quadratic. Based on power of two.","cubic-bezier(0.895, 0.03, 0.685, 0.22)":"Ease-in Quartic. Based on power of four.","cubic-bezier(0.77, 0, 0.175, 1)":"Ease-in-out Quartic. Based on power of four.","cubic-bezier(0.165, 0.84, 0.44, 1)":"Ease-out Quartic. Based on power of four.","cubic-bezier(0.755, 0.05, 0.855, 0.06)":"Ease-in Quintic. Based on power of five.","cubic-bezier(0.86, 0, 0.07, 1)":"Ease-in-out Quintic. Based on power of five.","cubic-bezier(0.23, 1, 0.320, 1)":"Ease-out Quintic. Based on power of five."},_r={"circle()":"Defines a circle.","ellipse()":"Defines an ellipse.","inset()":"Defines an inset rectangle.","polygon()":"Defines a polygon."},Cn={length:["em","rem","ex","px","cm","mm","in","pt","pc","ch","vw","vh","vmin","vmax"],angle:["deg","rad","grad","turn"],time:["ms","s"],frequency:["Hz","kHz"],resolution:["dpi","dpcm","dppx"],percentage:["%","fr"]},mo=["a","abbr","address","area","article","aside","audio","b","base","bdi","bdo","blockquote","body","br","button","canvas","caption","cite","code","col","colgroup","data","datalist","dd","del","details","dfn","dialog","div","dl","dt","em","embed","fieldset","figcaption","figure","footer","form","h1","h2","h3","h4","h5","h6","head","header","hgroup","hr","html","i","iframe","img","input","ins","kbd","keygen","label","legend","li","link","main","map","mark","menu","menuitem","meta","meter","nav","noscript","object","ol","optgroup","option","output","p","param","picture","pre","progress","q","rb","rp","rt","rtc","ruby","s","samp","script","section","select","small","source","span","strong","style","sub","summary","sup","table","tbody","td","template","textarea","tfoot","th","thead","time","title","tr","track","u","ul","const","video","wbr"],fo=["circle","clipPath","cursor","defs","desc","ellipse","feBlend","feColorMatrix","feComponentTransfer","feComposite","feConvolveMatrix","feDiffuseLighting","feDisplacementMap","feDistantLight","feDropShadow","feFlood","feFuncA","feFuncB","feFuncG","feFuncR","feGaussianBlur","feImage","feMerge","feMergeNode","feMorphology","feOffset","fePointLight","feSpecularLighting","feSpotLight","feTile","feTurbulence","filter","foreignObject","g","hatch","hatchpath","image","line","linearGradient","marker","mask","mesh","meshpatch","meshrow","metadata","mpath","path","pattern","polygon","polyline","radialGradient","rect","set","solidcolor","stop","svg","switch","symbol","text","textPath","tspan","use","view"],go=["@bottom-center","@bottom-left","@bottom-left-corner","@bottom-right","@bottom-right-corner","@left-bottom","@left-middle","@left-top","@right-bottom","@right-middle","@right-top","@top-center","@top-left","@top-left-corner","@top-right","@top-right-corner"];function Vt(n){return Object.keys(n).map(function(e){return n[e]})}function he(n){return typeof n<"u"}var bo=function(n,e,t){if(t||arguments.length===2)for(var r=0,i=e.length,o;re.offset?o-e.offset:0}return e},n.prototype.markError=function(e,t,r,i){this.token!==this.lastErrorToken&&(e.addIssue(new mn(e,t,ne.Error,void 0,this.token.offset,this.token.len)),this.lastErrorToken=this.token),(r||i)&&this.resync(r,i)},n.prototype.parseStylesheet=function(e){var t=e.version,r=e.getText(),i=function(o,s){if(e.version!==t)throw new Error("Underlying model has changed, AST is no longer valid");return r.substr(o,s)};return this.internalParse(r,this._parseStylesheet,i)},n.prototype.internalParse=function(e,t,r){this.scanner.setSource(e),this.token=this.scanner.scan();var i=t.bind(this)();return i&&(r?i.textProvider=r:i.textProvider=function(o,s){return e.substr(o,s)}),i},n.prototype._parseStylesheet=function(){for(var e=this.create(ci);e.addChild(this._parseStylesheetStart()););var t=!1;do{var r=!1;do{r=!1;var i=this._parseStylesheetStatement();for(i&&(e.addChild(i),r=!0,t=!1,!this.peek(d.EOF)&&this._needsSemicolonAfter(i)&&!this.accept(d.SemiColon)&&this.markError(e,f.SemiColonExpected));this.accept(d.SemiColon)||this.accept(d.CDO)||this.accept(d.CDC);)r=!0,t=!1}while(r);if(this.peek(d.EOF))break;t||(this.peek(d.AtKeyword)?this.markError(e,f.UnknownAtRule):this.markError(e,f.RuleOrSelectorExpected),t=!0),this.consumeToken()}while(!this.peek(d.EOF));return this.finish(e)},n.prototype._parseStylesheetStart=function(){return this._parseCharset()},n.prototype._parseStylesheetStatement=function(e){return e===void 0&&(e=!1),this.peek(d.AtKeyword)?this._parseStylesheetAtStatement(e):this._parseRuleset(e)},n.prototype._parseStylesheetAtStatement=function(e){return e===void 0&&(e=!1),this._parseImport()||this._parseMedia(e)||this._parsePage()||this._parseFontFace()||this._parseKeyframe()||this._parseSupports(e)||this._parseViewPort()||this._parseNamespace()||this._parseDocument()||this._parseUnknownAtRule()},n.prototype._tryParseRuleset=function(e){var t=this.mark();if(this._parseSelector(e)){for(;this.accept(d.Comma)&&this._parseSelector(e););if(this.accept(d.CurlyL))return this.restoreAtMark(t),this._parseRuleset(e)}return this.restoreAtMark(t),null},n.prototype._parseRuleset=function(e){e===void 0&&(e=!1);var t=this.create(Te),r=t.getSelectors();if(!r.addChild(this._parseSelector(e)))return null;for(;this.accept(d.Comma);)if(!r.addChild(this._parseSelector(e)))return this.finish(t,f.SelectorExpected);return this._parseBody(t,this._parseRuleSetDeclaration.bind(this))},n.prototype._parseRuleSetDeclarationAtStatement=function(){return this._parseUnknownAtRule()},n.prototype._parseRuleSetDeclaration=function(){return this.peek(d.AtKeyword)?this._parseRuleSetDeclarationAtStatement():this._parseDeclaration()},n.prototype._needsSemicolonAfter=function(e){switch(e.type){case u.Keyframe:case u.ViewPort:case u.Media:case u.Ruleset:case u.Namespace:case u.If:case u.For:case u.Each:case u.While:case u.MixinDeclaration:case u.FunctionDeclaration:case u.MixinContentDeclaration:return!1;case u.ExtendsReference:case u.MixinContentReference:case u.ReturnStatement:case u.MediaQuery:case u.Debug:case u.Import:case u.AtApplyRule:case u.CustomPropertyDeclaration:return!0;case u.VariableDeclaration:return e.needsSemicolon;case u.MixinReference:return!e.getContent();case u.Declaration:return!e.getNestedProperties()}return!1},n.prototype._parseDeclarations=function(e){var t=this.create(Ft);if(!this.accept(d.CurlyL))return null;for(var r=e();t.addChild(r)&&!this.peek(d.CurlyR);){if(this._needsSemicolonAfter(r)&&!this.accept(d.SemiColon))return this.finish(t,f.SemiColonExpected,[d.SemiColon,d.CurlyR]);for(r&&this.prevToken&&this.prevToken.type===d.SemiColon&&(r.semicolonPosition=this.prevToken.offset);this.accept(d.SemiColon););r=e()}return this.accept(d.CurlyR)?this.finish(t):this.finish(t,f.RightCurlyExpected,[d.CurlyR,d.SemiColon])},n.prototype._parseBody=function(e,t){return e.setDeclarations(this._parseDeclarations(t))?this.finish(e):this.finish(e,f.LeftCurlyExpected,[d.CurlyR,d.SemiColon])},n.prototype._parseSelector=function(e){var t=this.create(Ee),r=!1;for(e&&(r=t.addChild(this._parseCombinator()));t.addChild(this._parseSimpleSelector());)r=!0,t.addChild(this._parseCombinator());return r?this.finish(t):null},n.prototype._parseDeclaration=function(e){var t=this._tryParseCustomPropertyDeclaration(e);if(t)return t;var r=this.create(ae);return r.setProperty(this._parseProperty())?this.accept(d.Colon)?(this.prevToken&&(r.colonPosition=this.prevToken.offset),r.setValue(this._parseExpr())?(r.addChild(this._parsePrio()),this.peek(d.SemiColon)&&(r.semicolonPosition=this.token.offset),this.finish(r)):this.finish(r,f.PropertyValueExpected)):this.finish(r,f.ColonExpected,[d.Colon],e||[d.SemiColon]):null},n.prototype._tryParseCustomPropertyDeclaration=function(e){if(!this.peekRegExp(d.Ident,/^--/))return null;var t=this.create(hi);if(!t.setProperty(this._parseProperty()))return null;if(!this.accept(d.Colon))return this.finish(t,f.ColonExpected,[d.Colon]);this.prevToken&&(t.colonPosition=this.prevToken.offset);var r=this.mark();if(this.peek(d.CurlyL)){var i=this.create(di),o=this._parseDeclarations(this._parseRuleSetDeclaration.bind(this));if(i.setDeclarations(o)&&!o.isErroneous(!0)&&(i.addChild(this._parsePrio()),this.peek(d.SemiColon)))return this.finish(i),t.setPropertySet(i),t.semicolonPosition=this.token.offset,this.finish(t);this.restoreAtMark(r)}var s=this._parseExpr();return s&&!s.isErroneous(!0)&&(this._parsePrio(),this.peekOne.apply(this,bo(bo([],e||[],!1),[d.SemiColon,d.EOF],!1)))?(t.setValue(s),this.peek(d.SemiColon)&&(t.semicolonPosition=this.token.offset),this.finish(t)):(this.restoreAtMark(r),t.addChild(this._parseCustomPropertyValue(e)),t.addChild(this._parsePrio()),he(t.colonPosition)&&this.token.offset===t.colonPosition+1?this.finish(t,f.PropertyValueExpected):this.finish(t))},n.prototype._parseCustomPropertyValue=function(e){var t=this;e===void 0&&(e=[d.CurlyR]);var r=this.create(F),i=function(){return s===0&&a===0&&l===0},o=function(){return e.indexOf(t.token.type)!==-1},s=0,a=0,l=0;e:for(;;){switch(this.token.type){case d.SemiColon:if(i())break e;break;case d.Exclamation:if(i())break e;break;case d.CurlyL:s++;break;case d.CurlyR:if(s--,s<0){if(o()&&a===0&&l===0)break e;return this.finish(r,f.LeftCurlyExpected)}break;case d.ParenthesisL:a++;break;case d.ParenthesisR:if(a--,a<0){if(o()&&l===0&&s===0)break e;return this.finish(r,f.LeftParenthesisExpected)}break;case d.BracketL:l++;break;case d.BracketR:if(l--,l<0)return this.finish(r,f.LeftSquareBracketExpected);break;case d.BadString:break e;case d.EOF:var c=f.RightCurlyExpected;return l>0?c=f.RightSquareBracketExpected:a>0&&(c=f.RightParenthesisExpected),this.finish(r,c)}this.consumeToken()}return this.finish(r)},n.prototype._tryToParseDeclaration=function(e){var t=this.mark();return this._parseProperty()&&this.accept(d.Colon)?(this.restoreAtMark(t),this._parseDeclaration(e)):(this.restoreAtMark(t),null)},n.prototype._parseProperty=function(){var e=this.create(ct),t=this.mark();return(this.acceptDelim("*")||this.acceptDelim("_"))&&this.hasWhitespace()?(this.restoreAtMark(t),null):e.setIdentifier(this._parsePropertyIdentifier())?this.finish(e):null},n.prototype._parsePropertyIdentifier=function(){return this._parseIdent()},n.prototype._parseCharset=function(){if(!this.peek(d.Charset))return null;var e=this.create(F);return this.consumeToken(),this.accept(d.String)?this.accept(d.SemiColon)?this.finish(e):this.finish(e,f.SemiColonExpected):this.finish(e,f.IdentifierExpected)},n.prototype._parseImport=function(){if(!this.peekKeyword("@import"))return null;var e=this.create(dt);return this.consumeToken(),!e.addChild(this._parseURILiteral())&&!e.addChild(this._parseStringLiteral())?this.finish(e,f.URIOrStringExpected):(!this.peek(d.SemiColon)&&!this.peek(d.EOF)&&e.setMedialist(this._parseMediaQueryList()),this.finish(e))},n.prototype._parseNamespace=function(){if(!this.peekKeyword("@namespace"))return null;var e=this.create(Si);return this.consumeToken(),!e.addChild(this._parseURILiteral())&&(e.addChild(this._parseIdent()),!e.addChild(this._parseURILiteral())&&!e.addChild(this._parseStringLiteral()))?this.finish(e,f.URIExpected,[d.SemiColon]):this.accept(d.SemiColon)?this.finish(e):this.finish(e,f.SemiColonExpected)},n.prototype._parseFontFace=function(){if(!this.peekKeyword("@font-face"))return null;var e=this.create(an);return this.consumeToken(),this._parseBody(e,this._parseRuleSetDeclaration.bind(this))},n.prototype._parseViewPort=function(){if(!this.peekKeyword("@-ms-viewport")&&!this.peekKeyword("@-o-viewport")&&!this.peekKeyword("@viewport"))return null;var e=this.create(bi);return this.consumeToken(),this._parseBody(e,this._parseRuleSetDeclaration.bind(this))},n.prototype._parseKeyframe=function(){if(!this.peekRegExp(d.AtKeyword,this.keyframeRegex))return null;var e=this.create(ln),t=this.create(F);return this.consumeToken(),e.setKeyword(this.finish(t)),t.matches("@-ms-keyframes")&&this.markError(t,f.UnknownKeyword),e.setIdentifier(this._parseKeyframeIdent())?this._parseBody(e,this._parseKeyframeSelector.bind(this)):this.finish(e,f.IdentifierExpected,[d.CurlyR])},n.prototype._parseKeyframeIdent=function(){return this._parseIdent([A.Keyframe])},n.prototype._parseKeyframeSelector=function(){var e=this.create(Qn);if(!e.addChild(this._parseIdent())&&!this.accept(d.Percentage))return null;for(;this.accept(d.Comma);)if(!e.addChild(this._parseIdent())&&!this.accept(d.Percentage))return this.finish(e,f.PercentageExpected);return this._parseBody(e,this._parseRuleSetDeclaration.bind(this))},n.prototype._tryParseKeyframeSelector=function(){var e=this.create(Qn),t=this.mark();if(!e.addChild(this._parseIdent())&&!this.accept(d.Percentage))return null;for(;this.accept(d.Comma);)if(!e.addChild(this._parseIdent())&&!this.accept(d.Percentage))return this.restoreAtMark(t),null;return this.peek(d.CurlyL)?this._parseBody(e,this._parseRuleSetDeclaration.bind(this)):(this.restoreAtMark(t),null)},n.prototype._parseSupports=function(e){if(e===void 0&&(e=!1),!this.peekKeyword("@supports"))return null;var t=this.create(Et);return this.consumeToken(),t.addChild(this._parseSupportsCondition()),this._parseBody(t,this._parseSupportsDeclaration.bind(this,e))},n.prototype._parseSupportsDeclaration=function(e){return e===void 0&&(e=!1),e?this._tryParseRuleset(!0)||this._tryToParseDeclaration()||this._parseStylesheetStatement(!0):this._parseStylesheetStatement(!1)},n.prototype._parseSupportsCondition=function(){var e=this.create(Ze);if(this.acceptIdent("not"))e.addChild(this._parseSupportsConditionInParens());else if(e.addChild(this._parseSupportsConditionInParens()),this.peekRegExp(d.Ident,/^(and|or)$/i))for(var t=this.token.text.toLowerCase();this.acceptIdent(t);)e.addChild(this._parseSupportsConditionInParens());return this.finish(e)},n.prototype._parseSupportsConditionInParens=function(){var e=this.create(Ze);if(this.accept(d.ParenthesisL))return this.prevToken&&(e.lParent=this.prevToken.offset),!e.addChild(this._tryToParseDeclaration([d.ParenthesisR]))&&!this._parseSupportsCondition()?this.finish(e,f.ConditionExpected):this.accept(d.ParenthesisR)?(this.prevToken&&(e.rParent=this.prevToken.offset),this.finish(e)):this.finish(e,f.RightParenthesisExpected,[d.ParenthesisR],[]);if(this.peek(d.Ident)){var t=this.mark();if(this.consumeToken(),!this.hasWhitespace()&&this.accept(d.ParenthesisL)){for(var r=1;this.token.type!==d.EOF&&r!==0;)this.token.type===d.ParenthesisL?r++:this.token.type===d.ParenthesisR&&r--,this.consumeToken();return this.finish(e)}else this.restoreAtMark(t)}return this.finish(e,f.LeftParenthesisExpected,[],[d.ParenthesisL])},n.prototype._parseMediaDeclaration=function(e){return e===void 0&&(e=!1),e?this._tryParseRuleset(!0)||this._tryToParseDeclaration()||this._parseStylesheetStatement(!0):this._parseStylesheetStatement(!1)},n.prototype._parseMedia=function(e){if(e===void 0&&(e=!1),!this.peekKeyword("@media"))return null;var t=this.create(cn);return this.consumeToken(),t.addChild(this._parseMediaQueryList())?this._parseBody(t,this._parseMediaDeclaration.bind(this,e)):this.finish(t,f.MediaQueryExpected)},n.prototype._parseMediaQueryList=function(){var e=this.create(dn);if(!e.addChild(this._parseMediaQuery()))return this.finish(e,f.MediaQueryExpected);for(;this.accept(d.Comma);)if(!e.addChild(this._parseMediaQuery()))return this.finish(e,f.MediaQueryExpected);return this.finish(e)},n.prototype._parseMediaQuery=function(){var e=this.create(hn),t=this.mark();if(this.acceptIdent("not"),this.peek(d.ParenthesisL))this.restoreAtMark(t),e.addChild(this._parseMediaCondition());else{if(this.acceptIdent("only"),!e.addChild(this._parseIdent()))return null;this.acceptIdent("and")&&e.addChild(this._parseMediaCondition())}return this.finish(e)},n.prototype._parseRatio=function(){var e=this.mark(),t=this.create(Ri);return this._parseNumeric()?this.acceptDelim("/")?this._parseNumeric()?this.finish(t):this.finish(t,f.NumberExpected):(this.restoreAtMark(e),null):null},n.prototype._parseMediaCondition=function(){var e=this.create(Ci);this.acceptIdent("not");for(var t=!0;t;){if(!this.accept(d.ParenthesisL))return this.finish(e,f.LeftParenthesisExpected,[],[d.CurlyL]);if(this.peek(d.ParenthesisL)||this.peekIdent("not")?e.addChild(this._parseMediaCondition()):e.addChild(this._parseMediaFeature()),!this.accept(d.ParenthesisR))return this.finish(e,f.RightParenthesisExpected,[],[d.CurlyL]);t=this.acceptIdent("and")||this.acceptIdent("or")}return this.finish(e)},n.prototype._parseMediaFeature=function(){var e=this,t=[d.ParenthesisR],r=this.create(_i),i=function(){return e.acceptDelim("<")||e.acceptDelim(">")?(e.hasWhitespace()||e.acceptDelim("="),!0):!!e.acceptDelim("=")};if(r.addChild(this._parseMediaFeatureName())){if(this.accept(d.Colon)){if(!r.addChild(this._parseMediaFeatureValue()))return this.finish(r,f.TermExpected,[],t)}else if(i()){if(!r.addChild(this._parseMediaFeatureValue()))return this.finish(r,f.TermExpected,[],t);if(i()&&!r.addChild(this._parseMediaFeatureValue()))return this.finish(r,f.TermExpected,[],t)}}else if(r.addChild(this._parseMediaFeatureValue())){if(!i())return this.finish(r,f.OperatorExpected,[],t);if(!r.addChild(this._parseMediaFeatureName()))return this.finish(r,f.IdentifierExpected,[],t);if(i()&&!r.addChild(this._parseMediaFeatureValue()))return this.finish(r,f.TermExpected,[],t)}else return this.finish(r,f.IdentifierExpected,[],t);return this.finish(r)},n.prototype._parseMediaFeatureName=function(){return this._parseIdent()},n.prototype._parseMediaFeatureValue=function(){return this._parseRatio()||this._parseTermExpression()},n.prototype._parseMedium=function(){var e=this.create(F);return e.addChild(this._parseIdent())?this.finish(e):null},n.prototype._parsePageDeclaration=function(){return this._parsePageMarginBox()||this._parseRuleSetDeclaration()},n.prototype._parsePage=function(){if(!this.peekKeyword("@page"))return null;var e=this.create(Fi);if(this.consumeToken(),e.addChild(this._parsePageSelector())){for(;this.accept(d.Comma);)if(!e.addChild(this._parsePageSelector()))return this.finish(e,f.IdentifierExpected)}return this._parseBody(e,this._parsePageDeclaration.bind(this))},n.prototype._parsePageMarginBox=function(){if(!this.peek(d.AtKeyword))return null;var e=this.create(Ei);return this.acceptOneKeyword(go)||this.markError(e,f.UnknownAtRule,[],[d.CurlyL]),this._parseBody(e,this._parseRuleSetDeclaration.bind(this))},n.prototype._parsePageSelector=function(){if(!this.peek(d.Ident)&&!this.peek(d.Colon))return null;var e=this.create(F);return e.addChild(this._parseIdent()),this.accept(d.Colon)&&!e.addChild(this._parseIdent())?this.finish(e,f.IdentifierExpected):this.finish(e)},n.prototype._parseDocument=function(){if(!this.peekKeyword("@-moz-document"))return null;var e=this.create(ki);return this.consumeToken(),this.resync([],[d.CurlyL]),this._parseBody(e,this._parseStylesheetStatement.bind(this))},n.prototype._parseUnknownAtRule=function(){if(!this.peek(d.AtKeyword))return null;var e=this.create(un);e.addChild(this._parseUnknownAtRuleName());var t=function(){return i===0&&o===0&&s===0},r=0,i=0,o=0,s=0;e:for(;;){switch(this.token.type){case d.SemiColon:if(t())break e;break;case d.EOF:return i>0?this.finish(e,f.RightCurlyExpected):s>0?this.finish(e,f.RightSquareBracketExpected):o>0?this.finish(e,f.RightParenthesisExpected):this.finish(e);case d.CurlyL:r++,i++;break;case d.CurlyR:if(i--,r>0&&i===0){if(this.consumeToken(),s>0)return this.finish(e,f.RightSquareBracketExpected);if(o>0)return this.finish(e,f.RightParenthesisExpected);break e}if(i<0){if(o===0&&s===0)break e;return this.finish(e,f.LeftCurlyExpected)}break;case d.ParenthesisL:o++;break;case d.ParenthesisR:if(o--,o<0)return this.finish(e,f.LeftParenthesisExpected);break;case d.BracketL:s++;break;case d.BracketR:if(s--,s<0)return this.finish(e,f.LeftSquareBracketExpected);break}this.consumeToken()}return e},n.prototype._parseUnknownAtRuleName=function(){var e=this.create(F);return this.accept(d.AtKeyword)?this.finish(e):e},n.prototype._parseOperator=function(){if(this.peekDelim("/")||this.peekDelim("*")||this.peekDelim("+")||this.peekDelim("-")||this.peek(d.Dashmatch)||this.peek(d.Includes)||this.peek(d.SubstringOperator)||this.peek(d.PrefixOperator)||this.peek(d.SuffixOperator)||this.peekDelim("=")){var e=this.createNode(u.Operator);return this.consumeToken(),this.finish(e)}else return null},n.prototype._parseUnaryOperator=function(){if(!this.peekDelim("+")&&!this.peekDelim("-"))return null;var e=this.create(F);return this.consumeToken(),this.finish(e)},n.prototype._parseCombinator=function(){if(this.peekDelim(">")){var e=this.create(F);this.consumeToken();var t=this.mark();if(!this.hasWhitespace()&&this.acceptDelim(">")){if(!this.hasWhitespace()&&this.acceptDelim(">"))return e.type=u.SelectorCombinatorShadowPiercingDescendant,this.finish(e);this.restoreAtMark(t)}return e.type=u.SelectorCombinatorParent,this.finish(e)}else if(this.peekDelim("+")){var e=this.create(F);return this.consumeToken(),e.type=u.SelectorCombinatorSibling,this.finish(e)}else if(this.peekDelim("~")){var e=this.create(F);return this.consumeToken(),e.type=u.SelectorCombinatorAllSiblings,this.finish(e)}else if(this.peekDelim("/")){var e=this.create(F);this.consumeToken();var t=this.mark();if(!this.hasWhitespace()&&this.acceptIdent("deep")&&!this.hasWhitespace()&&this.acceptDelim("/"))return e.type=u.SelectorCombinatorShadowPiercingDescendant,this.finish(e);this.restoreAtMark(t)}return null},n.prototype._parseSimpleSelector=function(){var e=this.create(De),t=0;for(e.addChild(this._parseElementName())&&t++;(t===0||!this.hasWhitespace())&&e.addChild(this._parseSimpleSelectorBody());)t++;return t>0?this.finish(e):null},n.prototype._parseSimpleSelectorBody=function(){return this._parsePseudo()||this._parseHash()||this._parseClass()||this._parseAttrib()},n.prototype._parseSelectorIdent=function(){return this._parseIdent()},n.prototype._parseHash=function(){if(!this.peek(d.Hash)&&!this.peekDelim("#"))return null;var e=this.createNode(u.IdentifierSelector);if(this.acceptDelim("#")){if(this.hasWhitespace()||!e.addChild(this._parseSelectorIdent()))return this.finish(e,f.IdentifierExpected)}else this.consumeToken();return this.finish(e)},n.prototype._parseClass=function(){if(!this.peekDelim("."))return null;var e=this.createNode(u.ClassSelector);return this.consumeToken(),this.hasWhitespace()||!e.addChild(this._parseSelectorIdent())?this.finish(e,f.IdentifierExpected):this.finish(e)},n.prototype._parseElementName=function(){var e=this.mark(),t=this.createNode(u.ElementNameSelector);return t.addChild(this._parseNamespacePrefix()),!t.addChild(this._parseSelectorIdent())&&!this.acceptDelim("*")?(this.restoreAtMark(e),null):this.finish(t)},n.prototype._parseNamespacePrefix=function(){var e=this.mark(),t=this.createNode(u.NamespacePrefix);return!t.addChild(this._parseIdent())&&this.acceptDelim("*"),this.acceptDelim("|")?this.finish(t):(this.restoreAtMark(e),null)},n.prototype._parseAttrib=function(){if(!this.peek(d.BracketL))return null;var e=this.create(zi);return this.consumeToken(),e.setNamespacePrefix(this._parseNamespacePrefix()),e.setIdentifier(this._parseIdent())?(e.setOperator(this._parseOperator())&&(e.setValue(this._parseBinaryExpr()),this.acceptIdent("i"),this.acceptIdent("s")),this.accept(d.BracketR)?this.finish(e):this.finish(e,f.RightSquareBracketExpected)):this.finish(e,f.IdentifierExpected)},n.prototype._parsePseudo=function(){var e=this,t=this._tryParsePseudoIdentifier();if(t){if(!this.hasWhitespace()&&this.accept(d.ParenthesisL)){var r=function(){var i=e.create(F);if(!i.addChild(e._parseSelector(!1)))return null;for(;e.accept(d.Comma)&&i.addChild(e._parseSelector(!1)););return e.peek(d.ParenthesisR)?e.finish(i):null};if(t.addChild(this.try(r)||this._parseBinaryExpr()),!this.accept(d.ParenthesisR))return this.finish(t,f.RightParenthesisExpected)}return this.finish(t)}return null},n.prototype._tryParsePseudoIdentifier=function(){if(!this.peek(d.Colon))return null;var e=this.mark(),t=this.createNode(u.PseudoSelector);return this.consumeToken(),this.hasWhitespace()?(this.restoreAtMark(e),null):(this.accept(d.Colon),this.hasWhitespace()||!t.addChild(this._parseIdent())?this.finish(t,f.IdentifierExpected):this.finish(t))},n.prototype._tryParsePrio=function(){var e=this.mark(),t=this._parsePrio();return t||(this.restoreAtMark(e),null)},n.prototype._parsePrio=function(){if(!this.peek(d.Exclamation))return null;var e=this.createNode(u.Prio);return this.accept(d.Exclamation)&&this.acceptIdent("important")?this.finish(e):null},n.prototype._parseExpr=function(e){e===void 0&&(e=!1);var t=this.create(pn);if(!t.addChild(this._parseBinaryExpr()))return null;for(;;){if(this.peek(d.Comma)){if(e)return this.finish(t);this.consumeToken()}else if(!this.hasWhitespace())break;if(!t.addChild(this._parseBinaryExpr()))break}return this.finish(t)},n.prototype._parseUnicodeRange=function(){if(!this.peekIdent("u"))return null;var e=this.create(li);return this.acceptUnicodeRange()?this.finish(e):null},n.prototype._parseNamedLine=function(){if(!this.peek(d.BracketL))return null;var e=this.createNode(u.GridLine);for(this.consumeToken();e.addChild(this._parseIdent()););return this.accept(d.BracketR)?this.finish(e):this.finish(e,f.RightSquareBracketExpected)},n.prototype._parseBinaryExpr=function(e,t){var r=this.create(ht);if(!r.setLeft(e||this._parseTerm()))return null;if(!r.setOperator(t||this._parseOperator()))return this.finish(r);if(!r.setRight(this._parseTerm()))return this.finish(r,f.TermExpected);r=this.finish(r);var i=this._parseOperator();return i&&(r=this._parseBinaryExpr(r,i)),this.finish(r)},n.prototype._parseTerm=function(){var e=this.create(Di);return e.setOperator(this._parseUnaryOperator()),e.setExpression(this._parseTermExpression())?this.finish(e):null},n.prototype._parseTermExpression=function(){return this._parseURILiteral()||this._parseUnicodeRange()||this._parseFunction()||this._parseIdent()||this._parseStringLiteral()||this._parseNumeric()||this._parseHexColor()||this._parseOperation()||this._parseNamedLine()},n.prototype._parseOperation=function(){if(!this.peek(d.ParenthesisL))return null;var e=this.create(F);return this.consumeToken(),e.addChild(this._parseExpr()),this.accept(d.ParenthesisR)?this.finish(e):this.finish(e,f.RightParenthesisExpected)},n.prototype._parseNumeric=function(){if(this.peek(d.Num)||this.peek(d.Percentage)||this.peek(d.Resolution)||this.peek(d.Length)||this.peek(d.EMS)||this.peek(d.EXS)||this.peek(d.Angle)||this.peek(d.Time)||this.peek(d.Dimension)||this.peek(d.Freq)){var e=this.create(zt);return this.consumeToken(),this.finish(e)}return null},n.prototype._parseStringLiteral=function(){if(!this.peek(d.String)&&!this.peek(d.BadString))return null;var e=this.createNode(u.StringLiteral);return this.consumeToken(),this.finish(e)},n.prototype._parseURILiteral=function(){if(!this.peekRegExp(d.Ident,/^url(-prefix)?$/i))return null;var e=this.mark(),t=this.createNode(u.URILiteral);return this.accept(d.Ident),this.hasWhitespace()||!this.peek(d.ParenthesisL)?(this.restoreAtMark(e),null):(this.scanner.inURL=!0,this.consumeToken(),t.addChild(this._parseURLArgument()),this.scanner.inURL=!1,this.accept(d.ParenthesisR)?this.finish(t):this.finish(t,f.RightParenthesisExpected))},n.prototype._parseURLArgument=function(){var e=this.create(F);return!this.accept(d.String)&&!this.accept(d.BadString)&&!this.acceptUnquotedString()?null:this.finish(e)},n.prototype._parseIdent=function(e){if(!this.peek(d.Ident))return null;var t=this.create(te);return e&&(t.referenceTypes=e),t.isCustomProperty=this.peekRegExp(d.Ident,/^--/),this.consumeToken(),this.finish(t)},n.prototype._parseFunction=function(){var e=this.mark(),t=this.create(Pe);if(!t.setIdentifier(this._parseFunctionIdentifier()))return null;if(this.hasWhitespace()||!this.accept(d.ParenthesisL))return this.restoreAtMark(e),null;if(t.getArguments().addChild(this._parseFunctionArgument()))for(;this.accept(d.Comma)&&!this.peek(d.ParenthesisR);)t.getArguments().addChild(this._parseFunctionArgument())||this.markError(t,f.ExpressionExpected);return this.accept(d.ParenthesisR)?this.finish(t):this.finish(t,f.RightParenthesisExpected)},n.prototype._parseFunctionIdentifier=function(){if(!this.peek(d.Ident))return null;var e=this.create(te);if(e.referenceTypes=[A.Function],this.acceptIdent("progid")){if(this.accept(d.Colon))for(;this.accept(d.Ident)&&this.acceptDelim("."););return this.finish(e)}return this.consumeToken(),this.finish(e)},n.prototype._parseFunctionArgument=function(){var e=this.create(we);return e.setValue(this._parseExpr(!0))?this.finish(e):null},n.prototype._parseHexColor=function(){if(this.peekRegExp(d.Hash,/^#([A-Fa-f0-9]{3}|[A-Fa-f0-9]{4}|[A-Fa-f0-9]{6}|[A-Fa-f0-9]{8})$/g)){var e=this.create(Dt);return this.consumeToken(),this.finish(e)}else return null},n}();function yo(n,e){var t=0,r=n.length;if(r===0)return 0;for(;te+t||this.offset===e&&this.length===t?this.findInScope(e,t):null},n.prototype.findInScope=function(e,t){t===void 0&&(t=0);var r=e+t,i=yo(this.children,function(s){return s.offset>r});if(i===0)return this;var o=this.children[i-1];return o.offset<=e&&o.offset+o.length>=e+t?o.findInScope(e,t):this},n.prototype.addSymbol=function(e){this.symbols.push(e)},n.prototype.getSymbol=function(e,t){for(var r=0;r{"use strict";var n={470:r=>{function i(a){if(typeof a!="string")throw new TypeError("Path must be a string. Received "+JSON.stringify(a))}function o(a,l){for(var c,h="",p=0,m=-1,g=0,w=0;w<=a.length;++w){if(w2){var x=h.lastIndexOf("/");if(x!==h.length-1){x===-1?(h="",p=0):p=(h=h.slice(0,x)).length-1-h.lastIndexOf("/"),m=w,g=0;continue}}else if(h.length===2||h.length===1){h="",p=0,m=w,g=0;continue}}l&&(h.length>0?h+="/..":h="..",p=2)}else h.length>0?h+="/"+a.slice(m+1,w):h=a.slice(m+1,w),p=w-m-1;m=w,g=0}else c===46&&g!==-1?++g:g=-1}return h}var s={resolve:function(){for(var a,l="",c=!1,h=arguments.length-1;h>=-1&&!c;h--){var p;h>=0?p=arguments[h]:(a===void 0&&(a=process.cwd()),p=a),i(p),p.length!==0&&(l=p+"/"+l,c=p.charCodeAt(0)===47)}return l=o(l,!c),c?l.length>0?"/"+l:"/":l.length>0?l:"."},normalize:function(a){if(i(a),a.length===0)return".";var l=a.charCodeAt(0)===47,c=a.charCodeAt(a.length-1)===47;return(a=o(a,!l)).length!==0||l||(a="."),a.length>0&&c&&(a+="/"),l?"/"+a:a},isAbsolute:function(a){return i(a),a.length>0&&a.charCodeAt(0)===47},join:function(){if(arguments.length===0)return".";for(var a,l=0;l0&&(a===void 0?a=c:a+="/"+c)}return a===void 0?".":s.normalize(a)},relative:function(a,l){if(i(a),i(l),a===l||(a=s.resolve(a))===(l=s.resolve(l)))return"";for(var c=1;cw){if(l.charCodeAt(m+y)===47)return l.slice(m+y+1);if(y===0)return l.slice(m+y)}else p>w&&(a.charCodeAt(c+y)===47?x=y:y===0&&(x=0));break}var D=a.charCodeAt(c+y);if(D!==l.charCodeAt(m+y))break;D===47&&(x=y)}var M="";for(y=c+x+1;y<=h;++y)y!==h&&a.charCodeAt(y)!==47||(M.length===0?M+="..":M+="/..");return M.length>0?M+l.slice(m+x):(m+=x,l.charCodeAt(m)===47&&++m,l.slice(m))},_makeLong:function(a){return a},dirname:function(a){if(i(a),a.length===0)return".";for(var l=a.charCodeAt(0),c=l===47,h=-1,p=!0,m=a.length-1;m>=1;--m)if((l=a.charCodeAt(m))===47){if(!p){h=m;break}}else p=!1;return h===-1?c?"/":".":c&&h===1?"//":a.slice(0,h)},basename:function(a,l){if(l!==void 0&&typeof l!="string")throw new TypeError('"ext" argument must be a string');i(a);var c,h=0,p=-1,m=!0;if(l!==void 0&&l.length>0&&l.length<=a.length){if(l.length===a.length&&l===a)return"";var g=l.length-1,w=-1;for(c=a.length-1;c>=0;--c){var x=a.charCodeAt(c);if(x===47){if(!m){h=c+1;break}}else w===-1&&(m=!1,w=c+1),g>=0&&(x===l.charCodeAt(g)?--g==-1&&(p=c):(g=-1,p=w))}return h===p?p=w:p===-1&&(p=a.length),a.slice(h,p)}for(c=a.length-1;c>=0;--c)if(a.charCodeAt(c)===47){if(!m){h=c+1;break}}else p===-1&&(m=!1,p=c+1);return p===-1?"":a.slice(h,p)},extname:function(a){i(a);for(var l=-1,c=0,h=-1,p=!0,m=0,g=a.length-1;g>=0;--g){var w=a.charCodeAt(g);if(w!==47)h===-1&&(p=!1,h=g+1),w===46?l===-1?l=g:m!==1&&(m=1):l!==-1&&(m=-1);else if(!p){c=g+1;break}}return l===-1||h===-1||m===0||m===1&&l===h-1&&l===c+1?"":a.slice(l,h)},format:function(a){if(a===null||typeof a!="object")throw new TypeError('The "pathObject" argument must be of type Object. Received type '+typeof a);return function(l,c){var h=c.dir||c.root,p=c.base||(c.name||"")+(c.ext||"");return h?h===c.root?h+p:h+"/"+p:p}(0,a)},parse:function(a){i(a);var l={root:"",dir:"",base:"",ext:"",name:""};if(a.length===0)return l;var c,h=a.charCodeAt(0),p=h===47;p?(l.root="/",c=1):c=0;for(var m=-1,g=0,w=-1,x=!0,y=a.length-1,D=0;y>=c;--y)if((h=a.charCodeAt(y))!==47)w===-1&&(x=!1,w=y+1),h===46?m===-1?m=y:D!==1&&(D=1):m!==-1&&(D=-1);else if(!x){g=y+1;break}return m===-1||w===-1||D===0||D===1&&m===w-1&&m===g+1?w!==-1&&(l.base=l.name=g===0&&p?a.slice(1,w):a.slice(g,w)):(g===0&&p?(l.name=a.slice(1,m),l.base=a.slice(1,w)):(l.name=a.slice(g,m),l.base=a.slice(g,w)),l.ext=a.slice(m,w)),g>0?l.dir=a.slice(0,g-1):p&&(l.dir="/"),l},sep:"/",delimiter:":",win32:null,posix:null};s.posix=s,r.exports=s},447:(r,i,o)=>{var s;if(o.r(i),o.d(i,{URI:()=>M,Utils:()=>pe}),typeof process=="object")s=process.platform==="win32";else if(typeof navigator=="object"){var a=navigator.userAgent;s=a.indexOf("Windows")>=0}var l,c,h=(l=function(C,b){return(l=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(k,_){k.__proto__=_}||function(k,_){for(var N in _)Object.prototype.hasOwnProperty.call(_,N)&&(k[N]=_[N])})(C,b)},function(C,b){if(typeof b!="function"&&b!==null)throw new TypeError("Class extends value "+String(b)+" is not a constructor or null");function k(){this.constructor=C}l(C,b),C.prototype=b===null?Object.create(b):(k.prototype=b.prototype,new k)}),p=/^\w[\w\d+.-]*$/,m=/^\//,g=/^\/\//;function w(C,b){if(!C.scheme&&b)throw new Error('[UriError]: Scheme is missing: {scheme: "", authority: "'.concat(C.authority,'", path: "').concat(C.path,'", query: "').concat(C.query,'", fragment: "').concat(C.fragment,'"}'));if(C.scheme&&!p.test(C.scheme))throw new Error("[UriError]: Scheme contains illegal characters.");if(C.path){if(C.authority){if(!m.test(C.path))throw new Error('[UriError]: If a URI contains an authority component, then the path component must either be empty or begin with a slash ("/") character')}else if(g.test(C.path))throw new Error('[UriError]: If a URI does not contain an authority component, then the path cannot begin with two slash characters ("//")')}}var x="",y="/",D=/^(([^:/?#]+?):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?/,M=function(){function C(b,k,_,N,O,B){B===void 0&&(B=!1),typeof b=="object"?(this.scheme=b.scheme||x,this.authority=b.authority||x,this.path=b.path||x,this.query=b.query||x,this.fragment=b.fragment||x):(this.scheme=function(Ce,se){return Ce||se?Ce:"file"}(b,B),this.authority=k||x,this.path=function(Ce,se){switch(Ce){case"https":case"http":case"file":se?se[0]!==y&&(se=y+se):se=y}return se}(this.scheme,_||x),this.query=N||x,this.fragment=O||x,w(this,B))}return C.isUri=function(b){return b instanceof C||!!b&&typeof b.authority=="string"&&typeof b.fragment=="string"&&typeof b.path=="string"&&typeof b.query=="string"&&typeof b.scheme=="string"&&typeof b.fsPath=="string"&&typeof b.with=="function"&&typeof b.toString=="function"},Object.defineProperty(C.prototype,"fsPath",{get:function(){return oe(this,!1)},enumerable:!1,configurable:!0}),C.prototype.with=function(b){if(!b)return this;var k=b.scheme,_=b.authority,N=b.path,O=b.query,B=b.fragment;return k===void 0?k=this.scheme:k===null&&(k=x),_===void 0?_=this.authority:_===null&&(_=x),N===void 0?N=this.path:N===null&&(N=x),O===void 0?O=this.query:O===null&&(O=x),B===void 0?B=this.fragment:B===null&&(B=x),k===this.scheme&&_===this.authority&&N===this.path&&O===this.query&&B===this.fragment?this:new P(k,_,N,O,B)},C.parse=function(b,k){k===void 0&&(k=!1);var _=D.exec(b);return _?new P(_[2]||x,ke(_[4]||x),ke(_[5]||x),ke(_[7]||x),ke(_[9]||x),k):new P(x,x,x,x,x)},C.file=function(b){var k=x;if(s&&(b=b.replace(/\\/g,y)),b[0]===y&&b[1]===y){var _=b.indexOf(y,2);_===-1?(k=b.substring(2),b=y):(k=b.substring(2,_),b=b.substring(_)||y)}return new P("file",k,b,x,x)},C.from=function(b){var k=new P(b.scheme,b.authority,b.path,b.query,b.fragment);return w(k,!0),k},C.prototype.toString=function(b){return b===void 0&&(b=!1),me(this,b)},C.prototype.toJSON=function(){return this},C.revive=function(b){if(b){if(b instanceof C)return b;var k=new P(b);return k._formatted=b.external,k._fsPath=b._sep===z?b.fsPath:null,k}return b},C}(),z=s?1:void 0,P=function(C){function b(){var k=C!==null&&C.apply(this,arguments)||this;return k._formatted=null,k._fsPath=null,k}return h(b,C),Object.defineProperty(b.prototype,"fsPath",{get:function(){return this._fsPath||(this._fsPath=oe(this,!1)),this._fsPath},enumerable:!1,configurable:!0}),b.prototype.toString=function(k){return k===void 0&&(k=!1),k?me(this,!0):(this._formatted||(this._formatted=me(this,!1)),this._formatted)},b.prototype.toJSON=function(){var k={$mid:1};return this._fsPath&&(k.fsPath=this._fsPath,k._sep=z),this._formatted&&(k.external=this._formatted),this.path&&(k.path=this.path),this.scheme&&(k.scheme=this.scheme),this.authority&&(k.authority=this.authority),this.query&&(k.query=this.query),this.fragment&&(k.fragment=this.fragment),k},b}(M),L=((c={})[58]="%3A",c[47]="%2F",c[63]="%3F",c[35]="%23",c[91]="%5B",c[93]="%5D",c[64]="%40",c[33]="%21",c[36]="%24",c[38]="%26",c[39]="%27",c[40]="%28",c[41]="%29",c[42]="%2A",c[43]="%2B",c[44]="%2C",c[59]="%3B",c[61]="%3D",c[32]="%20",c);function $(C,b){for(var k=void 0,_=-1,N=0;N=97&&O<=122||O>=65&&O<=90||O>=48&&O<=57||O===45||O===46||O===95||O===126||b&&O===47)_!==-1&&(k+=encodeURIComponent(C.substring(_,N)),_=-1),k!==void 0&&(k+=C.charAt(N));else{k===void 0&&(k=C.substr(0,N));var B=L[O];B!==void 0?(_!==-1&&(k+=encodeURIComponent(C.substring(_,N)),_=-1),k+=B):_===-1&&(_=N)}}return _!==-1&&(k+=encodeURIComponent(C.substring(_))),k!==void 0?k:C}function ue(C){for(var b=void 0,k=0;k1&&C.scheme==="file"?"//".concat(C.authority).concat(C.path):C.path.charCodeAt(0)===47&&(C.path.charCodeAt(1)>=65&&C.path.charCodeAt(1)<=90||C.path.charCodeAt(1)>=97&&C.path.charCodeAt(1)<=122)&&C.path.charCodeAt(2)===58?b?C.path.substr(1):C.path[1].toLowerCase()+C.path.substr(2):C.path,s&&(k=k.replace(/\//g,"\\")),k}function me(C,b){var k=b?ue:$,_="",N=C.scheme,O=C.authority,B=C.path,Ce=C.query,se=C.fragment;if(N&&(_+=N,_+=":"),(O||N==="file")&&(_+=y,_+=y),O){var ge=O.indexOf("@");if(ge!==-1){var Xe=O.substr(0,ge);O=O.substr(ge+1),(ge=Xe.indexOf(":"))===-1?_+=k(Xe,!1):(_+=k(Xe.substr(0,ge),!1),_+=":",_+=k(Xe.substr(ge+1),!1)),_+="@"}(ge=(O=O.toLowerCase()).indexOf(":"))===-1?_+=k(O,!1):(_+=k(O.substr(0,ge),!1),_+=O.substr(ge))}if(B){if(B.length>=3&&B.charCodeAt(0)===47&&B.charCodeAt(2)===58)(Me=B.charCodeAt(1))>=65&&Me<=90&&(B="/".concat(String.fromCharCode(Me+32),":").concat(B.substr(3)));else if(B.length>=2&&B.charCodeAt(1)===58){var Me;(Me=B.charCodeAt(0))>=65&&Me<=90&&(B="".concat(String.fromCharCode(Me+32),":").concat(B.substr(2)))}_+=k(B,!0)}return Ce&&(_+="?",_+=k(Ce,!1)),se&&(_+="#",_+=b?se:$(se,!1)),_}function ve(C){try{return decodeURIComponent(C)}catch{return C.length>3?C.substr(0,3)+ve(C.substr(3)):C}}var ye=/(%[0-9A-Za-z][0-9A-Za-z])+/g;function ke(C){return C.match(ye)?C.replace(ye,function(b){return ve(b)}):C}var pe,G=o(470),Ie=function(C,b,k){if(k||arguments.length===2)for(var _,N=0,O=b.length;N{for(var o in i)t.o(i,o)&&!t.o(r,o)&&Object.defineProperty(r,o,{enumerable:!0,get:i[o]})},t.o=(r,i)=>Object.prototype.hasOwnProperty.call(r,i),t.r=r=>{typeof Symbol<"u"&&Symbol.toStringTag&&Object.defineProperty(r,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(r,"__esModule",{value:!0})},t(447)})();var{URI:qt,Utils:En}=xo;var ea=function(n,e,t){if(t||arguments.length===2)for(var r=0,i=e.length,o;r0&&o[o.length-1])&&(c[0]===6||c[0]===2)){t=0;continue}if(c[0]===3&&(!o||c[1]>o[0]&&c[1]0&&o[o.length-1])&&(c[0]===6||c[0]===2)){t=0;continue}if(c[0]===3&&(!o||c[1]>o[0]&&c[1]=0;s--){var a=this.nodePath[s];if(a instanceof ct)this.getCompletionsForDeclarationProperty(a.getParent(),o);else if(a instanceof pn)a.parent instanceof Rt?this.getVariableProposals(null,o):this.getCompletionsForExpression(a,o);else if(a instanceof De){var l=a.findAParent(u.ExtendsReference,u.Ruleset);if(l)if(l.type===u.ExtendsReference)this.getCompletionsForExtendsReference(l,a,o);else{var c=l;this.getCompletionsForSelector(c,c&&c.isNested(),o)}}else if(a instanceof we)this.getCompletionsForFunctionArgument(a,a.getParent(),o);else if(a instanceof Ft)this.getCompletionsForDeclarations(a,o);else if(a instanceof $e)this.getCompletionsForVariableDeclaration(a,o);else if(a instanceof Te)this.getCompletionsForRuleSet(a,o);else if(a instanceof Rt)this.getCompletionsForInterpolation(a,o);else if(a instanceof Qe)this.getCompletionsForFunctionDeclaration(a,o);else if(a instanceof et)this.getCompletionsForMixinReference(a,o);else if(a instanceof Pe)this.getCompletionsForFunctionArgument(null,a,o);else if(a instanceof Et)this.getCompletionsForSupports(a,o);else if(a instanceof Ze)this.getCompletionsForSupportsCondition(a,o);else if(a instanceof qe)this.getCompletionsForExtendsReference(a,null,o);else if(a.type===u.URILiteral)this.getCompletionForUriLiteralValue(a,o);else if(a.parent===null)this.getCompletionForTopLevel(o);else if(a.type===u.StringLiteral&&this.isImportPathParent(a.parent.type))this.getCompletionForImportPath(a,o);else continue;if(o.items.length>0||this.offset>a.offset)return this.finalize(o)}return this.getCompletionsForStylesheet(o),o.items.length===0&&this.variablePrefix&&this.currentWord.indexOf(this.variablePrefix)===0&&this.getVariableProposals(null,o),this.finalize(o)}finally{this.position=null,this.currentWord=null,this.textDocument=null,this.styleSheet=null,this.symbolContext=null,this.defaultReplaceRange=null,this.nodePath=null}},n.prototype.isImportPathParent=function(e){return e===u.Import},n.prototype.finalize=function(e){return e},n.prototype.findInNodePath=function(){for(var e=[],t=0;t=0;r--){var i=this.nodePath[r];if(e.indexOf(i.type)!==-1)return i}return null},n.prototype.getCompletionsForDeclarationProperty=function(e,t){return this.getPropertyProposals(e,t)},n.prototype.getPropertyProposals=function(e,t){var r=this,i=this.isTriggerPropertyValueCompletionEnabled,o=this.isCompletePropertyWithSemicolonEnabled,s=this.cssDataManager.getProperties();return s.forEach(function(a){var l,c,h=!1;e?(l=r.getCompletionRange(e.getProperty()),c=a.name,he(e.colonPosition)||(c+=": ",h=!0)):(l=r.getCompletionRange(null),c=a.name+": ",h=!0),!e&&o&&(c+="$0;"),e&&!e.semicolonPosition&&o&&r.offset>=r.textDocument.offsetAt(l.end)&&(c+="$0;");var p={label:a.name,documentation:ze(a,r.doesSupportMarkdown()),tags:Gt(a)?[Ne.Deprecated]:[],textEdit:T.replace(l,c),insertTextFormat:re.Snippet,kind:R.Property};a.restrictions||(h=!1),i&&h&&(p.command=_o);var m=typeof a.relevance=="number"?Math.min(Math.max(a.relevance,0),99):50,g=(255-m).toString(16),w=q(a.name,"-")?Re.VendorPrefixed:Re.Normal;p.sortText=w+"_"+g,t.items.push(p)}),this.completionParticipants.forEach(function(a){a.onCssProperty&&a.onCssProperty({propertyName:r.currentWord,range:r.defaultReplaceRange})}),t},Object.defineProperty(n.prototype,"isTriggerPropertyValueCompletionEnabled",{get:function(){var e,t;return(t=(e=this.documentSettings)===null||e===void 0?void 0:e.triggerPropertyValueCompletion)!==null&&t!==void 0?t:!0},enumerable:!1,configurable:!0}),Object.defineProperty(n.prototype,"isCompletePropertyWithSemicolonEnabled",{get:function(){var e,t;return(t=(e=this.documentSettings)===null||e===void 0?void 0:e.completePropertyWithSemicolon)!==null&&t!==void 0?t:!0},enumerable:!1,configurable:!0}),n.prototype.getCompletionsForDeclarationValue=function(e,t){for(var r=this,i=e.getFullPropertyName(),o=this.cssDataManager.getProperty(i),s=e.getValue()||null;s&&s.hasChildren();)s=s.findChildAtOffset(this.offset,!1);if(this.completionParticipants.forEach(function(w){w.onCssPropertyValue&&w.onCssPropertyValue({propertyName:i,propertyValue:r.currentWord,range:r.getCompletionRange(s)})}),o){if(o.restrictions)for(var a=0,l=o.restrictions;a=e.offset+2&&this.getVariableProposals(null,t),t},n.prototype.getVariableProposals=function(e,t){for(var r=this.getSymbolContext().findSymbolsAtOffset(this.offset,A.Variable),i=0,o=r;i0){var o=this.currentWord.match(/^-?\d[\.\d+]*/);o&&(i=o[0],r.isIncomplete=i.length===this.currentWord.length)}else this.currentWord.length===0&&(r.isIncomplete=!0);if(t&&t.parent&&t.parent.type===u.Term&&(t=t.getParent()),e.restrictions)for(var s=0,a=e.restrictions;s=r.end;if(i)return this.getCompletionForTopLevel(t);var o=!r||this.offset<=r.offset;return o?this.getCompletionsForSelector(e,e.isNested(),t):this.getCompletionsForDeclarations(e.getDeclarations(),t)},n.prototype.getCompletionsForSelector=function(e,t,r){var i=this,o=this.findInNodePath(u.PseudoSelector,u.IdentifierSelector,u.ClassSelector,u.ElementNameSelector);!o&&this.hasCharacterAtPosition(this.offset-this.currentWord.length-1,":")&&(this.currentWord=":"+this.currentWord,this.hasCharacterAtPosition(this.offset-this.currentWord.length-1,":")&&(this.currentWord=":"+this.currentWord),this.defaultReplaceRange=W.create(Q.create(this.position.line,this.position.character-this.currentWord.length),this.position));var s=this.cssDataManager.getPseudoClasses();s.forEach(function(y){var D=bt(y.name),M={label:y.name,textEdit:T.replace(i.getCompletionRange(o),D),documentation:ze(y,i.doesSupportMarkdown()),tags:Gt(y)?[Ne.Deprecated]:[],kind:R.Function,insertTextFormat:y.name!==D?We:void 0};q(y.name,":-")&&(M.sortText=Re.VendorPrefixed),r.items.push(M)});var a=this.cssDataManager.getPseudoElements();if(a.forEach(function(y){var D=bt(y.name),M={label:y.name,textEdit:T.replace(i.getCompletionRange(o),D),documentation:ze(y,i.doesSupportMarkdown()),tags:Gt(y)?[Ne.Deprecated]:[],kind:R.Function,insertTextFormat:y.name!==D?We:void 0};q(y.name,"::-")&&(M.sortText=Re.VendorPrefixed),r.items.push(M)}),!t){for(var l=0,c=mo;l0){var D=w.substr(y.offset,y.length);return D.charAt(0)==="."&&!g[D]&&(g[D]=!0,r.items.push({label:D,textEdit:T.replace(i.getCompletionRange(o),D),kind:R.Keyword})),!1}return!0}),e&&e.isNested()){var x=e.getSelectors().findFirstChildBeforeOffset(this.offset);x&&e.getSelectors().getChildren().indexOf(x)===0&&this.getPropertyProposals(null,r)}return r},n.prototype.getCompletionsForDeclarations=function(e,t){if(!e||this.offset===e.offset)return t;var r=e.findFirstChildBeforeOffset(this.offset);if(!r)return this.getCompletionsForDeclarationProperty(null,t);if(r instanceof sn){var i=r;if(!he(i.colonPosition)||this.offset<=i.colonPosition)return this.getCompletionsForDeclarationProperty(i,t);if(he(i.semicolonPosition)&&i.semicolonPositione.colonPosition&&this.getVariableProposals(e.getValue(),t),t},n.prototype.getCompletionsForExpression=function(e,t){var r=e.getParent();if(r instanceof we)return this.getCompletionsForFunctionArgument(r,r.getParent(),t),t;var i=e.findParent(u.Declaration);if(!i)return this.getTermProposals(void 0,null,t),t;var o=e.findChildAtOffset(this.offset,!0);return o?o instanceof zt||o instanceof te?this.getCompletionsForDeclarationValue(i,t):t:this.getCompletionsForDeclarationValue(i,t)},n.prototype.getCompletionsForFunctionArgument=function(e,t,r){var i=t.getIdentifier();return i&&i.matches("var")&&(!t.getArguments().hasChildren()||t.getArguments().getChild(0)===e)&&this.getVariableProposalsForCSSVarFunction(r),r},n.prototype.getCompletionsForFunctionDeclaration=function(e,t){var r=e.getDeclarations();return r&&this.offset>r.offset&&this.offsete.lParent&&(!he(e.rParent)||this.offset<=e.rParent)?this.getCompletionsForDeclarationProperty(null,t):t},n.prototype.getCompletionsForSupports=function(e,t){var r=e.getDeclarations(),i=!r||this.offset<=r.offset;if(i){var o=e.findFirstChildBeforeOffset(this.offset);return o instanceof Ze?this.getCompletionsForSupportsCondition(o,t):t}return this.getCompletionForTopLevel(t)},n.prototype.getCompletionsForExtendsReference=function(e,t,r){return r},n.prototype.getCompletionForUriLiteralValue=function(e,t){var r,i,o;if(e.hasChildren()){var a=e.getChild(0);r=a.getText(),i=this.position,o=this.getCompletionRange(a)}else{r="",i=this.position;var s=this.textDocument.positionAt(e.offset+4);o=W.create(s,s)}return this.completionParticipants.forEach(function(l){l.onCssURILiteralValue&&l.onCssURILiteralValue({uriValue:r,position:i,range:o})}),t},n.prototype.getCompletionForImportPath=function(e,t){var r=this;return this.completionParticipants.forEach(function(i){i.onCssImportPath&&i.onCssImportPath({pathValue:e.getText(),position:r.position,range:r.getCompletionRange(e)})}),t},n.prototype.hasCharacterAtPosition=function(e,t){var r=this.textDocument.getText();return e>=0&&e=0&&` +\r":{[()]},*>+`.indexOf(r.charAt(t))===-1;)t--;return r.substring(t+1,e)}function Fo(n){return n.toLowerCase()in jt||/(^#[0-9A-F]{6}$)|(^#[0-9A-F]{3}$)/i.test(n)}var zo=function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(r[o]=i[o])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),pa=H(),Rr=function(){function n(){this.parent=null,this.children=null,this.attributes=null}return n.prototype.findAttribute=function(e){if(this.attributes)for(var t=0,r=this.attributes;t"),this.writeLine(t,i.join(""))},n}(),Le;(function(n){function e(r,i){return i+t(r)+i}n.ensure=e;function t(r){var i=r.match(/^['"](.*)["']$/);return i?i[1]:r}n.remove=t})(Le||(Le={}));var Do=function(){function n(){this.id=0,this.attr=0,this.tag=0}return n}();function Ro(n,e){for(var t=new Rr,r=0,i=n.getChildren();r1){var c=e.cloneWithParent();t.addChild(c.findRoot()),t=c}t.append(s[l])}}break;case u.SelectorPlaceholder:if(o.matches("@at-root"))return t;case u.ElementNameSelector:var h=o.getText();t.addAttr("name",h==="*"?"element":be(h));break;case u.ClassSelector:t.addAttr("class",be(o.getText().substring(1)));break;case u.IdentifierSelector:t.addAttr("id",be(o.getText().substring(1)));break;case u.MixinDeclaration:t.addAttr("class",o.getName());break;case u.PseudoSelector:t.addAttr(be(o.getText()),"");break;case u.AttributeSelector:var p=o,m=p.getIdentifier();if(m){var g=p.getValue(),w=p.getOperator(),x=void 0;if(g&&w)switch(be(w.getText())){case"|=":x="".concat(Le.remove(be(g.getText())),"-\u2026");break;case"^=":x="".concat(Le.remove(be(g.getText())),"\u2026");break;case"$=":x="\u2026".concat(Le.remove(be(g.getText())));break;case"~=":x=" \u2026 ".concat(Le.remove(be(g.getText()))," \u2026 ");break;case"*=":x="\u2026".concat(Le.remove(be(g.getText())),"\u2026");break;default:x=Le.remove(be(g.getText()));break}t.addAttr(be(m.getText()),x)}break}}return t}function be(n){var e=new Fe;e.setSource(n);var t=e.scanUnquotedString();return t?t.text:n}var Io=function(){function n(e){this.cssDataManager=e}return n.prototype.selectorToMarkedString=function(e){var t=fa(e);if(t){var r=new Eo('"').print(t);return r.push(this.selectorToSpecificityMarkedString(e)),r}else return[]},n.prototype.simpleSelectorToMarkedString=function(e){var t=Ro(e),r=new Eo('"').print(t);return r.push(this.selectorToSpecificityMarkedString(e)),r},n.prototype.isPseudoElementIdentifier=function(e){var t=e.match(/^::?([\w-]+)/);return t?!!this.cssDataManager.getPseudoElement("::"+t[1]):!1},n.prototype.selectorToSpecificityMarkedString=function(e){var t=this,r=function(o){var s=new Do;e:for(var a=0,l=o.getChildren();a0){for(var p=new Do,m=0,g=c.getChildren();mp.id){p=z;continue}else if(z.idp.attr){p=z;continue}else if(z.attrp.tag){p=z;continue}}}s.id+=p.id,s.attr+=p.attr,s.tag+=p.tag;continue e}s.attr++;break}if(c.getChildren().length>0){var z=r(c);s.id+=z.id,s.attr+=z.attr,s.tag+=z.tag}}return s},i=r(e);return pa("specificity","[Selector Specificity](https://developer.mozilla.org/en-US/docs/Web/CSS/Specificity): ({0}, {1}, {2})",i.id,i.attr,i.tag)},n}();var ua=function(){function n(e){this.prev=null,this.element=e}return n.prototype.processSelector=function(e){var t=null;if(!(this.element instanceof yt)&&e.getChildren().some(function(h){return h.hasChildren()&&h.getChild(0).type===u.SelectorCombinator})){var r=this.element.findRoot();r.parent instanceof yt&&(t=this.element,this.element=r.parent,this.element.removeChild(r),this.prev=null)}for(var i=0,o=e.getChildren();i=0;s--){var a=t[s].getSelectors().getChild(0);a&&o.processSelector(a)}return o.processSelector(n),e}var In=function(){function n(e,t){this.clientCapabilities=e,this.cssDataManager=t,this.selectorPrinting=new Io(t)}return n.prototype.configure=function(e){this.defaultSettings=e},n.prototype.doHover=function(e,t,r,i){i===void 0&&(i=this.defaultSettings);function o(y){return W.create(e.positionAt(y.offset),e.positionAt(y.end))}for(var s=e.offsetAt(t),a=lt(r,s),l=null,c=0;c0&&o[o.length-1])&&(c[0]===6||c[0]===2)){t=0;continue}if(c[0]===3&&(!o||c[1]>o[0]&&c[1]=o.length/2&&s.push({property:D.name,score:M})}),s.sort(function(D,M){return M.score-D.score||D.property.localeCompare(M.property)});for(var a=3,l=0,c=s;l=0;l--){var c=a[l];if(c instanceof ae){var h=c.getProperty();if(h&&h.offset===o&&h.end===s){this.getFixesForUnknownProperty(e,h,r,i);return}}}},n}();var Uo=function(){function n(e){this.fullPropertyName=e.getFullPropertyName().toLowerCase(),this.node=e}return n}();function Yt(n,e,t,r){var i=n[e];i.value=t,t&&(Fr(i.properties,r)||i.properties.push(r))}function xa(n,e,t){Yt(n,"top",e,t),Yt(n,"right",e,t),Yt(n,"bottom",e,t),Yt(n,"left",e,t)}function ie(n,e,t,r){e==="top"||e==="right"||e==="bottom"||e==="left"?Yt(n,e,t,r):xa(n,t,r)}function Ir(n,e,t){switch(e.length){case 1:ie(n,void 0,e[0],t);break;case 2:ie(n,"top",e[0],t),ie(n,"bottom",e[0],t),ie(n,"right",e[1],t),ie(n,"left",e[1],t);break;case 3:ie(n,"top",e[0],t),ie(n,"right",e[1],t),ie(n,"left",e[1],t),ie(n,"bottom",e[2],t);break;case 4:ie(n,"top",e[0],t),ie(n,"right",e[1],t),ie(n,"bottom",e[2],t),ie(n,"left",e[3],t);break}}function Mr(n,e){for(var t=0,r=e;t"u"))switch(i.fullPropertyName){case"box-sizing":return{top:{value:!1,properties:[]},right:{value:!1,properties:[]},bottom:{value:!1,properties:[]},left:{value:!1,properties:[]}};case"width":e.width=i;break;case"height":e.height=i;break;default:var s=i.fullPropertyName.split("-");switch(s[0]){case"border":switch(s[1]){case void 0:case"top":case"right":case"bottom":case"left":switch(s[2]){case void 0:ie(e,s[1],ka(o),i);break;case"width":ie(e,s[1],Qt(o,!1),i);break;case"style":ie(e,s[1],Tn(o,!0),i);break}break;case"width":Ir(e,Lo(o.getChildren(),!1),i);break;case"style":Ir(e,Sa(o.getChildren(),!0),i);break}break;case"padding":s.length===1?Ir(e,Lo(o.getChildren(),!0),i):ie(e,s[1],Qt(o,!0),i);break}break}}return e}var Ue=H(),jo=function(){function n(){this.data={}}return n.prototype.add=function(e,t,r){var i=this.data[e];i||(i={nodes:[],names:[]},this.data[e]=i),i.names.push(t),r&&i.nodes.push(r)},n}(),Vo=function(){function n(e,t,r){var i=this;this.cssDataManager=r,this.warnings=[],this.settings=t,this.documentText=e.getText(),this.keyframes=new jo,this.validProperties={};var o=t.getSetting(Oo.ValidProperties);Array.isArray(o)&&o.forEach(function(s){if(typeof s=="string"){var a=s.trim().toLowerCase();a.length&&(i.validProperties[a]=!0)}})}return n.entries=function(e,t,r,i,o){var s=new n(t,r,i);return e.acceptVisitor(s),s.completeValidations(),s.getEntries(o)},n.prototype.isValidPropertyDeclaration=function(e){var t=e.fullPropertyName;return this.validProperties[t]},n.prototype.fetch=function(e,t){for(var r=[],i=0,o=e;i0)for(var x=this.fetch(r,"float"),y=0;y0)for(var x=this.fetch(r,"vertical-align"),y=0;y1)for(var $=0;$")||this.peekDelim("<")||this.peekIdent("and")||this.peekIdent("or")||this.peekDelim("%")){var t=this.createNode(u.Operator);return this.consumeToken(),this.finish(t)}return n.prototype._parseOperator.call(this)},e.prototype._parseUnaryOperator=function(){if(this.peekIdent("not")){var t=this.create(F);return this.consumeToken(),this.finish(t)}return n.prototype._parseUnaryOperator.call(this)},e.prototype._parseRuleSetDeclaration=function(){return this.peek(d.AtKeyword)?this._parseKeyframe()||this._parseImport()||this._parseMedia(!0)||this._parseFontFace()||this._parseWarnAndDebug()||this._parseControlStatement()||this._parseFunctionDeclaration()||this._parseExtends()||this._parseMixinReference()||this._parseMixinContent()||this._parseMixinDeclaration()||this._parseRuleset(!0)||this._parseSupports(!0)||n.prototype._parseRuleSetDeclarationAtStatement.call(this):this._parseVariableDeclaration()||this._tryParseRuleset(!0)||n.prototype._parseRuleSetDeclaration.call(this)},e.prototype._parseDeclaration=function(t){var r=this._tryParseCustomPropertyDeclaration(t);if(r)return r;var i=this.create(ae);if(!i.setProperty(this._parseProperty()))return null;if(!this.accept(d.Colon))return this.finish(i,f.ColonExpected,[d.Colon],t||[d.SemiColon]);this.prevToken&&(i.colonPosition=this.prevToken.offset);var o=!1;if(i.setValue(this._parseExpr())&&(o=!0,i.addChild(this._parsePrio())),this.peek(d.CurlyL))i.setNestedProperties(this._parseNestedProperties());else if(!o)return this.finish(i,f.PropertyValueExpected);return this.peek(d.SemiColon)&&(i.semicolonPosition=this.token.offset),this.finish(i)},e.prototype._parseNestedProperties=function(){var t=this.create(Yn);return this._parseBody(t,this._parseDeclaration.bind(this))},e.prototype._parseExtends=function(){if(this.peekKeyword("@extend")){var t=this.create(qe);if(this.consumeToken(),!t.getSelectors().addChild(this._parseSimpleSelector()))return this.finish(t,f.SelectorExpected);for(;this.accept(d.Comma);)t.getSelectors().addChild(this._parseSimpleSelector());return this.accept(d.Exclamation)&&!this.acceptIdent("optional")?this.finish(t,f.UnknownKeyword):this.finish(t)}return null},e.prototype._parseSimpleSelectorBody=function(){return this._parseSelectorCombinator()||this._parseSelectorPlaceholder()||n.prototype._parseSimpleSelectorBody.call(this)},e.prototype._parseSelectorCombinator=function(){if(this.peekDelim("&")){var t=this.createNode(u.SelectorCombinator);for(this.consumeToken();!this.hasWhitespace()&&(this.acceptDelim("-")||this.accept(d.Num)||this.accept(d.Dimension)||t.addChild(this._parseIdent())||this.acceptDelim("&")););return this.finish(t)}return null},e.prototype._parseSelectorPlaceholder=function(){if(this.peekDelim("%")){var t=this.createNode(u.SelectorPlaceholder);return this.consumeToken(),this._parseIdent(),this.finish(t)}else if(this.peekKeyword("@at-root")){var t=this.createNode(u.SelectorPlaceholder);return this.consumeToken(),this.finish(t)}return null},e.prototype._parseElementName=function(){var t=this.mark(),r=n.prototype._parseElementName.call(this);return r&&!this.hasWhitespace()&&this.peek(d.ParenthesisL)?(this.restoreAtMark(t),null):r},e.prototype._tryParsePseudoIdentifier=function(){return this._parseInterpolation()||n.prototype._tryParsePseudoIdentifier.call(this)},e.prototype._parseWarnAndDebug=function(){if(!this.peekKeyword("@debug")&&!this.peekKeyword("@warn")&&!this.peekKeyword("@error"))return null;var t=this.createNode(u.Debug);return this.consumeToken(),t.addChild(this._parseExpr()),this.finish(t)},e.prototype._parseControlStatement=function(t){return t===void 0&&(t=this._parseRuleSetDeclaration.bind(this)),this.peek(d.AtKeyword)?this._parseIfStatement(t)||this._parseForStatement(t)||this._parseEachStatement(t)||this._parseWhileStatement(t):null},e.prototype._parseIfStatement=function(t){return this.peekKeyword("@if")?this._internalParseIfStatement(t):null},e.prototype._internalParseIfStatement=function(t){var r=this.create(pi);if(this.consumeToken(),!r.setExpression(this._parseExpr(!0)))return this.finish(r,f.ExpressionExpected);if(this._parseBody(r,t),this.acceptKeyword("@else")){if(this.peekIdent("if"))r.setElseClause(this._internalParseIfStatement(t));else if(this.peek(d.CurlyL)){var i=this.create(gi);this._parseBody(i,t),r.setElseClause(i)}}return this.finish(r)},e.prototype._parseForStatement=function(t){if(!this.peekKeyword("@for"))return null;var r=this.create(ui);return this.consumeToken(),r.setVariable(this._parseVariable())?this.acceptIdent("from")?r.addChild(this._parseBinaryExpr())?!this.acceptIdent("to")&&!this.acceptIdent("through")?this.finish(r,On.ThroughOrToExpected,[d.CurlyR]):r.addChild(this._parseBinaryExpr())?this._parseBody(r,t):this.finish(r,f.ExpressionExpected,[d.CurlyR]):this.finish(r,f.ExpressionExpected,[d.CurlyR]):this.finish(r,On.FromExpected,[d.CurlyR]):this.finish(r,f.VariableNameExpected,[d.CurlyR])},e.prototype._parseEachStatement=function(t){if(!this.peekKeyword("@each"))return null;var r=this.create(mi);this.consumeToken();var i=r.getVariables();if(!i.addChild(this._parseVariable()))return this.finish(r,f.VariableNameExpected,[d.CurlyR]);for(;this.accept(d.Comma);)if(!i.addChild(this._parseVariable()))return this.finish(r,f.VariableNameExpected,[d.CurlyR]);return this.finish(i),this.acceptIdent("in")?r.addChild(this._parseExpr())?this._parseBody(r,t):this.finish(r,f.ExpressionExpected,[d.CurlyR]):this.finish(r,On.InExpected,[d.CurlyR])},e.prototype._parseWhileStatement=function(t){if(!this.peekKeyword("@while"))return null;var r=this.create(fi);return this.consumeToken(),r.addChild(this._parseBinaryExpr())?this._parseBody(r,t):this.finish(r,f.ExpressionExpected,[d.CurlyR])},e.prototype._parseFunctionBodyDeclaration=function(){return this._parseVariableDeclaration()||this._parseReturnStatement()||this._parseWarnAndDebug()||this._parseControlStatement(this._parseFunctionBodyDeclaration.bind(this))},e.prototype._parseFunctionDeclaration=function(){if(!this.peekKeyword("@function"))return null;var t=this.create(Qe);if(this.consumeToken(),!t.setIdentifier(this._parseIdent([A.Function])))return this.finish(t,f.IdentifierExpected,[d.CurlyR]);if(!this.accept(d.ParenthesisL))return this.finish(t,f.LeftParenthesisExpected,[d.CurlyR]);if(t.getParameters().addChild(this._parseParameterDeclaration())){for(;this.accept(d.Comma)&&!this.peek(d.ParenthesisR);)if(!t.getParameters().addChild(this._parseParameterDeclaration()))return this.finish(t,f.VariableNameExpected)}return this.accept(d.ParenthesisR)?this._parseBody(t,this._parseFunctionBodyDeclaration.bind(this)):this.finish(t,f.RightParenthesisExpected,[d.CurlyR])},e.prototype._parseReturnStatement=function(){if(!this.peekKeyword("@return"))return null;var t=this.createNode(u.ReturnStatement);return this.consumeToken(),t.addChild(this._parseExpr())?this.finish(t):this.finish(t,f.ExpressionExpected)},e.prototype._parseMixinDeclaration=function(){if(!this.peekKeyword("@mixin"))return null;var t=this.create(Ae);if(this.consumeToken(),!t.setIdentifier(this._parseIdent([A.Mixin])))return this.finish(t,f.IdentifierExpected,[d.CurlyR]);if(this.accept(d.ParenthesisL)){if(t.getParameters().addChild(this._parseParameterDeclaration())){for(;this.accept(d.Comma)&&!this.peek(d.ParenthesisR);)if(!t.getParameters().addChild(this._parseParameterDeclaration()))return this.finish(t,f.VariableNameExpected)}if(!this.accept(d.ParenthesisR))return this.finish(t,f.RightParenthesisExpected,[d.CurlyR])}return this._parseBody(t,this._parseRuleSetDeclaration.bind(this))},e.prototype._parseParameterDeclaration=function(){var t=this.create(Be);return t.setIdentifier(this._parseVariable())?(this.accept(en),this.accept(d.Colon)&&!t.setDefaultValue(this._parseExpr(!0))?this.finish(t,f.VariableValueExpected,[],[d.Comma,d.ParenthesisR]):this.finish(t)):null},e.prototype._parseMixinContent=function(){if(!this.peekKeyword("@content"))return null;var t=this.create(Ii);if(this.consumeToken(),this.accept(d.ParenthesisL)){if(t.getArguments().addChild(this._parseFunctionArgument())){for(;this.accept(d.Comma)&&!this.peek(d.ParenthesisR);)if(!t.getArguments().addChild(this._parseFunctionArgument()))return this.finish(t,f.ExpressionExpected)}if(!this.accept(d.ParenthesisR))return this.finish(t,f.RightParenthesisExpected)}return this.finish(t)},e.prototype._parseMixinReference=function(){if(!this.peekKeyword("@include"))return null;var t=this.create(et);this.consumeToken();var r=this._parseIdent([A.Mixin]);if(!t.setIdentifier(r))return this.finish(t,f.IdentifierExpected,[d.CurlyR]);if(!this.hasWhitespace()&&this.acceptDelim(".")&&!this.hasWhitespace()){var i=this._parseIdent([A.Mixin]);if(!i)return this.finish(t,f.IdentifierExpected,[d.CurlyR]);var o=this.create(Zn);r.referenceTypes=[A.Module],o.setIdentifier(r),t.setIdentifier(i),t.addChild(o)}if(this.accept(d.ParenthesisL)){if(t.getArguments().addChild(this._parseFunctionArgument())){for(;this.accept(d.Comma)&&!this.peek(d.ParenthesisR);)if(!t.getArguments().addChild(this._parseFunctionArgument()))return this.finish(t,f.ExpressionExpected)}if(!this.accept(d.ParenthesisR))return this.finish(t,f.RightParenthesisExpected)}return(this.peekIdent("using")||this.peek(d.CurlyL))&&t.setContent(this._parseMixinContentDeclaration()),this.finish(t)},e.prototype._parseMixinContentDeclaration=function(){var t=this.create(Mi);if(this.acceptIdent("using")){if(!this.accept(d.ParenthesisL))return this.finish(t,f.LeftParenthesisExpected,[d.CurlyL]);if(t.getParameters().addChild(this._parseParameterDeclaration())){for(;this.accept(d.Comma)&&!this.peek(d.ParenthesisR);)if(!t.getParameters().addChild(this._parseParameterDeclaration()))return this.finish(t,f.VariableNameExpected)}if(!this.accept(d.ParenthesisR))return this.finish(t,f.RightParenthesisExpected,[d.CurlyL])}return this.peek(d.CurlyL)&&this._parseBody(t,this._parseMixinReferenceBodyStatement.bind(this)),this.finish(t)},e.prototype._parseMixinReferenceBodyStatement=function(){return this._tryParseKeyframeSelector()||this._parseRuleSetDeclaration()},e.prototype._parseFunctionArgument=function(){var t=this.create(we),r=this.mark(),i=this._parseVariable();if(i)if(this.accept(d.Colon))t.setIdentifier(i);else{if(this.accept(en))return t.setValue(i),this.finish(t);this.restoreAtMark(r)}return t.setValue(this._parseExpr(!0))?(this.accept(en),t.addChild(this._parsePrio()),this.finish(t)):t.setValue(this._tryParsePrio())?this.finish(t):null},e.prototype._parseURLArgument=function(){var t=this.mark(),r=n.prototype._parseURLArgument.call(this);if(!r||!this.peek(d.ParenthesisR)){this.restoreAtMark(t);var i=this.create(F);return i.addChild(this._parseBinaryExpr()),this.finish(i)}return r},e.prototype._parseOperation=function(){if(!this.peek(d.ParenthesisL))return null;var t=this.create(F);for(this.consumeToken();t.addChild(this._parseListElement());)this.accept(d.Comma);return this.accept(d.ParenthesisR)?this.finish(t):this.finish(t,f.RightParenthesisExpected)},e.prototype._parseListElement=function(){var t=this.create(Ti),r=this._parseBinaryExpr();if(!r)return null;if(this.accept(d.Colon)){if(t.setKey(r),!t.setValue(this._parseBinaryExpr()))return this.finish(t,f.ExpressionExpected)}else t.setValue(r);return this.finish(t)},e.prototype._parseUse=function(){if(!this.peekKeyword("@use"))return null;var t=this.create(vi);if(this.consumeToken(),!t.addChild(this._parseStringLiteral()))return this.finish(t,f.StringLiteralExpected);if(!this.peek(d.SemiColon)&&!this.peek(d.EOF)){if(!this.peekRegExp(d.Ident,/as|with/))return this.finish(t,f.UnknownKeyword);if(this.acceptIdent("as")&&!t.setIdentifier(this._parseIdent([A.Module]))&&!this.acceptDelim("*"))return this.finish(t,f.IdentifierOrWildcardExpected);if(this.acceptIdent("with")){if(!this.accept(d.ParenthesisL))return this.finish(t,f.LeftParenthesisExpected,[d.ParenthesisR]);if(!t.getParameters().addChild(this._parseModuleConfigDeclaration()))return this.finish(t,f.VariableNameExpected);for(;this.accept(d.Comma)&&!this.peek(d.ParenthesisR);)if(!t.getParameters().addChild(this._parseModuleConfigDeclaration()))return this.finish(t,f.VariableNameExpected);if(!this.accept(d.ParenthesisR))return this.finish(t,f.RightParenthesisExpected)}}return!this.accept(d.SemiColon)&&!this.accept(d.EOF)?this.finish(t,f.SemiColonExpected):this.finish(t)},e.prototype._parseModuleConfigDeclaration=function(){var t=this.create(yi);return t.setIdentifier(this._parseVariable())?!this.accept(d.Colon)||!t.setValue(this._parseExpr(!0))?this.finish(t,f.VariableValueExpected,[],[d.Comma,d.ParenthesisR]):this.accept(d.Exclamation)&&(this.hasWhitespace()||!this.acceptIdent("default"))?this.finish(t,f.UnknownKeyword):this.finish(t):null},e.prototype._parseForward=function(){if(!this.peekKeyword("@forward"))return null;var t=this.create(wi);if(this.consumeToken(),!t.addChild(this._parseStringLiteral()))return this.finish(t,f.StringLiteralExpected);if(this.acceptIdent("with")){if(!this.accept(d.ParenthesisL))return this.finish(t,f.LeftParenthesisExpected,[d.ParenthesisR]);if(!t.getParameters().addChild(this._parseModuleConfigDeclaration()))return this.finish(t,f.VariableNameExpected);for(;this.accept(d.Comma)&&!this.peek(d.ParenthesisR);)if(!t.getParameters().addChild(this._parseModuleConfigDeclaration()))return this.finish(t,f.VariableNameExpected);if(!this.accept(d.ParenthesisR))return this.finish(t,f.RightParenthesisExpected)}if(!this.peek(d.SemiColon)&&!this.peek(d.EOF)){if(!this.peekRegExp(d.Ident,/as|hide|show/))return this.finish(t,f.UnknownKeyword);if(this.acceptIdent("as")){var r=this._parseIdent([A.Forward]);if(!t.setIdentifier(r))return this.finish(t,f.IdentifierExpected);if(this.hasWhitespace()||!this.acceptDelim("*"))return this.finish(t,f.WildcardExpected)}if((this.peekIdent("hide")||this.peekIdent("show"))&&!t.addChild(this._parseForwardVisibility()))return this.finish(t,f.IdentifierOrVariableExpected)}return!this.accept(d.SemiColon)&&!this.accept(d.EOF)?this.finish(t,f.SemiColonExpected):this.finish(t)},e.prototype._parseForwardVisibility=function(){var t=this.create(xi);for(t.setIdentifier(this._parseIdent());t.addChild(this._parseVariable()||this._parseIdent());)this.accept(d.Comma);return t.getChildren().length>1?t:null},e.prototype._parseSupportsCondition=function(){return this._parseInterpolation()||n.prototype._parseSupportsCondition.call(this)},e}(gt);var Na=function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(r[o]=i[o])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),S=H(),Ko=function(n){Na(e,n);function e(t,r){var i=n.call(this,"$",t,r)||this;return qo(e.scssModuleLoaders),qo(e.scssModuleBuiltIns),i}return e.prototype.isImportPathParent=function(t){return t===u.Forward||t===u.Use||n.prototype.isImportPathParent.call(this,t)},e.prototype.getCompletionForImportPath=function(t,r){var i=t.getParent().type;if(i===u.Forward||i===u.Use)for(var o=0,s=e.scssModuleBuiltIns;o0){var t=typeof e.documentation=="string"?{kind:"markdown",value:e.documentation}:{kind:"markdown",value:e.documentation.value};t.value+=` + +`,t.value+=e.references.map(function(r){return"[".concat(r.name,"](").concat(r.url,")")}).join(" | "),e.documentation=t}})}var Oa=function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(r[o]=i[o])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),Go=47,Wa=10,La=13,Ua=12,jr=96,Vr=46,ja=d.CustomToken,Wn=ja++,Ln=function(n){Oa(e,n);function e(){return n!==null&&n.apply(this,arguments)||this}return e.prototype.scanNext=function(t){var r=this.escapedJavaScript();return r!==null?this.finishToken(t,r):this.stream.advanceIfChars([Vr,Vr,Vr])?this.finishToken(t,Wn):n.prototype.scanNext.call(this,t)},e.prototype.comment=function(){return n.prototype.comment.call(this)?!0:!this.inURL&&this.stream.advanceIfChars([Go,Go])?(this.stream.advanceWhileChar(function(t){switch(t){case Wa:case La:case Ua:return!1;default:return!0}}),!0):!1},e.prototype.escapedJavaScript=function(){var t=this.stream.peekChar();return t===jr?(this.stream.advance(1),this.stream.advanceWhileChar(function(r){return r!==jr}),this.stream.advanceIfChar(jr)?d.EscapedJavaScript:d.BadEscapedJavaScript):null},e}(Fe);var Ba=function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(r[o]=i[o])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),Ho=function(n){Ba(e,n);function e(){return n.call(this,new Ln)||this}return e.prototype._parseStylesheetStatement=function(t){return t===void 0&&(t=!1),this.peek(d.AtKeyword)?this._parseVariableDeclaration()||this._parsePlugin()||n.prototype._parseStylesheetAtStatement.call(this,t):this._tryParseMixinDeclaration()||this._tryParseMixinReference()||this._parseFunction()||this._parseRuleset(!0)},e.prototype._parseImport=function(){if(!this.peekKeyword("@import")&&!this.peekKeyword("@import-once"))return null;var t=this.create(dt);if(this.consumeToken(),this.accept(d.ParenthesisL)){if(!this.accept(d.Ident))return this.finish(t,f.IdentifierExpected,[d.SemiColon]);do if(!this.accept(d.Comma))break;while(this.accept(d.Ident));if(!this.accept(d.ParenthesisR))return this.finish(t,f.RightParenthesisExpected,[d.SemiColon])}return!t.addChild(this._parseURILiteral())&&!t.addChild(this._parseStringLiteral())?this.finish(t,f.URIOrStringExpected,[d.SemiColon]):(!this.peek(d.SemiColon)&&!this.peek(d.EOF)&&t.setMedialist(this._parseMediaQueryList()),this.finish(t))},e.prototype._parsePlugin=function(){if(!this.peekKeyword("@plugin"))return null;var t=this.createNode(u.Plugin);return this.consumeToken(),t.addChild(this._parseStringLiteral())?this.accept(d.SemiColon)?this.finish(t):this.finish(t,f.SemiColonExpected):this.finish(t,f.StringLiteralExpected)},e.prototype._parseMediaQuery=function(){var t=n.prototype._parseMediaQuery.call(this);if(!t){var r=this.create(hn);return r.addChild(this._parseVariable())?this.finish(r):null}return t},e.prototype._parseMediaDeclaration=function(t){return t===void 0&&(t=!1),this._tryParseRuleset(t)||this._tryToParseDeclaration()||this._tryParseMixinDeclaration()||this._tryParseMixinReference()||this._parseDetachedRuleSetMixin()||this._parseStylesheetStatement(t)},e.prototype._parseMediaFeatureName=function(){return this._parseIdent()||this._parseVariable()},e.prototype._parseVariableDeclaration=function(t){t===void 0&&(t=[]);var r=this.create($e),i=this.mark();if(!r.setVariable(this._parseVariable(!0)))return null;if(this.accept(d.Colon)){if(this.prevToken&&(r.colonPosition=this.prevToken.offset),r.setValue(this._parseDetachedRuleSet()))r.needsSemicolon=!1;else if(!r.setValue(this._parseExpr()))return this.finish(r,f.VariableValueExpected,[],t);r.addChild(this._parsePrio())}else return this.restoreAtMark(i),null;return this.peek(d.SemiColon)&&(r.semicolonPosition=this.token.offset),this.finish(r)},e.prototype._parseDetachedRuleSet=function(){var t=this.mark();if(this.peekDelim("#")||this.peekDelim("."))if(this.consumeToken(),!this.hasWhitespace()&&this.accept(d.ParenthesisL)){var r=this.create(Ae);if(r.getParameters().addChild(this._parseMixinParameter()))for(;(this.accept(d.Comma)||this.accept(d.SemiColon))&&!this.peek(d.ParenthesisR);)r.getParameters().addChild(this._parseMixinParameter())||this.markError(r,f.IdentifierExpected,[],[d.ParenthesisR]);if(!this.accept(d.ParenthesisR))return this.restoreAtMark(t),null}else return this.restoreAtMark(t),null;if(!this.peek(d.CurlyL))return null;var i=this.create(K);return this._parseBody(i,this._parseDetachedRuleSetBody.bind(this)),this.finish(i)},e.prototype._parseDetachedRuleSetBody=function(){return this._tryParseKeyframeSelector()||this._parseRuleSetDeclaration()},e.prototype._addLookupChildren=function(t){if(!t.addChild(this._parseLookupValue()))return!1;for(var r=!1;this.peek(d.BracketL)&&(r=!0),!!t.addChild(this._parseLookupValue());)r=!1;return!r},e.prototype._parseLookupValue=function(){var t=this.create(F),r=this.mark();return this.accept(d.BracketL)?(t.addChild(this._parseVariable(!1,!0))||t.addChild(this._parsePropertyIdentifier()))&&this.accept(d.BracketR)||this.accept(d.BracketR)?t:(this.restoreAtMark(r),null):(this.restoreAtMark(r),null)},e.prototype._parseVariable=function(t,r){t===void 0&&(t=!1),r===void 0&&(r=!1);var i=!t&&this.peekDelim("$");if(!this.peekDelim("@")&&!i&&!this.peek(d.AtKeyword))return null;for(var o=this.create(pt),s=this.mark();this.acceptDelim("@")||!t&&this.acceptDelim("$");)if(this.hasWhitespace())return this.restoreAtMark(s),null;return!this.accept(d.AtKeyword)&&!this.accept(d.Ident)?(this.restoreAtMark(s),null):!r&&this.peek(d.BracketL)&&!this._addLookupChildren(o)?(this.restoreAtMark(s),null):o},e.prototype._parseTermExpression=function(){return this._parseVariable()||this._parseEscaped()||n.prototype._parseTermExpression.call(this)||this._tryParseMixinReference(!1)},e.prototype._parseEscaped=function(){if(this.peek(d.EscapedJavaScript)||this.peek(d.BadEscapedJavaScript)){var t=this.createNode(u.EscapedValue);return this.consumeToken(),this.finish(t)}if(this.peekDelim("~")){var t=this.createNode(u.EscapedValue);return this.consumeToken(),this.accept(d.String)||this.accept(d.EscapedJavaScript)?this.finish(t):this.finish(t,f.TermExpected)}return null},e.prototype._parseOperator=function(){var t=this._parseGuardOperator();return t||n.prototype._parseOperator.call(this)},e.prototype._parseGuardOperator=function(){if(this.peekDelim(">")){var t=this.createNode(u.Operator);return this.consumeToken(),this.acceptDelim("="),t}else if(this.peekDelim("=")){var t=this.createNode(u.Operator);return this.consumeToken(),this.acceptDelim("<"),t}else if(this.peekDelim("<")){var t=this.createNode(u.Operator);return this.consumeToken(),this.acceptDelim("="),t}return null},e.prototype._parseRuleSetDeclaration=function(){return this.peek(d.AtKeyword)?this._parseKeyframe()||this._parseMedia(!0)||this._parseImport()||this._parseSupports(!0)||this._parseDetachedRuleSetMixin()||this._parseVariableDeclaration()||n.prototype._parseRuleSetDeclarationAtStatement.call(this):this._tryParseMixinDeclaration()||this._tryParseRuleset(!0)||this._tryParseMixinReference()||this._parseFunction()||this._parseExtend()||n.prototype._parseRuleSetDeclaration.call(this)},e.prototype._parseKeyframeIdent=function(){return this._parseIdent([A.Keyframe])||this._parseVariable()},e.prototype._parseKeyframeSelector=function(){return this._parseDetachedRuleSetMixin()||n.prototype._parseKeyframeSelector.call(this)},e.prototype._parseSimpleSelectorBody=function(){return this._parseSelectorCombinator()||n.prototype._parseSimpleSelectorBody.call(this)},e.prototype._parseSelector=function(t){var r=this.create(Ee),i=!1;for(t&&(i=r.addChild(this._parseCombinator()));r.addChild(this._parseSimpleSelector());){i=!0;var o=this.mark();if(r.addChild(this._parseGuard())&&this.peek(d.CurlyL))break;this.restoreAtMark(o),r.addChild(this._parseCombinator())}return i?this.finish(r):null},e.prototype._parseSelectorCombinator=function(){if(this.peekDelim("&")){var t=this.createNode(u.SelectorCombinator);for(this.consumeToken();!this.hasWhitespace()&&(this.acceptDelim("-")||this.accept(d.Num)||this.accept(d.Dimension)||t.addChild(this._parseIdent())||this.acceptDelim("&")););return this.finish(t)}return null},e.prototype._parseSelectorIdent=function(){if(!this.peekInterpolatedIdent())return null;var t=this.createNode(u.SelectorInterpolation),r=this._acceptInterpolatedIdent(t);return r?this.finish(t):null},e.prototype._parsePropertyIdentifier=function(t){t===void 0&&(t=!1);var r=/^[\w-]+/;if(!this.peekInterpolatedIdent()&&!this.peekRegExp(this.token.type,r))return null;var i=this.mark(),o=this.create(te);o.isCustomProperty=this.acceptDelim("-")&&this.acceptDelim("-");var s=!1;return t?o.isCustomProperty?s=o.addChild(this._parseIdent()):s=o.addChild(this._parseRegexp(r)):o.isCustomProperty?s=this._acceptInterpolatedIdent(o):s=this._acceptInterpolatedIdent(o,r),s?(!t&&!this.hasWhitespace()&&(this.acceptDelim("+"),this.hasWhitespace()||this.acceptIdent("_")),this.finish(o)):(this.restoreAtMark(i),null)},e.prototype.peekInterpolatedIdent=function(){return this.peek(d.Ident)||this.peekDelim("@")||this.peekDelim("$")||this.peekDelim("-")},e.prototype._acceptInterpolatedIdent=function(t,r){for(var i=this,o=!1,s=function(){var l=i.mark();return i.acceptDelim("-")&&(i.hasWhitespace()||i.acceptDelim("-"),i.hasWhitespace())?(i.restoreAtMark(l),null):i._parseInterpolation()},a=r?function(){return i.acceptRegexp(r)}:function(){return i.accept(d.Ident)};(a()||t.addChild(this._parseInterpolation()||this.try(s)))&&(o=!0,!this.hasWhitespace()););return o},e.prototype._parseInterpolation=function(){var t=this.mark();if(this.peekDelim("@")||this.peekDelim("$")){var r=this.createNode(u.Interpolation);return this.consumeToken(),this.hasWhitespace()||!this.accept(d.CurlyL)?(this.restoreAtMark(t),null):r.addChild(this._parseIdent())?this.accept(d.CurlyR)?this.finish(r):this.finish(r,f.RightCurlyExpected):this.finish(r,f.IdentifierExpected)}return null},e.prototype._tryParseMixinDeclaration=function(){var t=this.mark(),r=this.create(Ae);if(!r.setIdentifier(this._parseMixinDeclarationIdentifier())||!this.accept(d.ParenthesisL))return this.restoreAtMark(t),null;if(r.getParameters().addChild(this._parseMixinParameter()))for(;(this.accept(d.Comma)||this.accept(d.SemiColon))&&!this.peek(d.ParenthesisR);)r.getParameters().addChild(this._parseMixinParameter())||this.markError(r,f.IdentifierExpected,[],[d.ParenthesisR]);return this.accept(d.ParenthesisR)?(r.setGuard(this._parseGuard()),this.peek(d.CurlyL)?this._parseBody(r,this._parseMixInBodyDeclaration.bind(this)):(this.restoreAtMark(t),null)):(this.restoreAtMark(t),null)},e.prototype._parseMixInBodyDeclaration=function(){return this._parseFontFace()||this._parseRuleSetDeclaration()},e.prototype._parseMixinDeclarationIdentifier=function(){var t;if(this.peekDelim("#")||this.peekDelim(".")){if(t=this.create(te),this.consumeToken(),this.hasWhitespace()||!t.addChild(this._parseIdent()))return null}else if(this.peek(d.Hash))t=this.create(te),this.consumeToken();else return null;return t.referenceTypes=[A.Mixin],this.finish(t)},e.prototype._parsePseudo=function(){if(!this.peek(d.Colon))return null;var t=this.mark(),r=this.create(qe);return this.consumeToken(),this.acceptIdent("extend")?this._completeExtends(r):(this.restoreAtMark(t),n.prototype._parsePseudo.call(this))},e.prototype._parseExtend=function(){if(!this.peekDelim("&"))return null;var t=this.mark(),r=this.create(qe);return this.consumeToken(),this.hasWhitespace()||!this.accept(d.Colon)||!this.acceptIdent("extend")?(this.restoreAtMark(t),null):this._completeExtends(r)},e.prototype._completeExtends=function(t){if(!this.accept(d.ParenthesisL))return this.finish(t,f.LeftParenthesisExpected);var r=t.getSelectors();if(!r.addChild(this._parseSelector(!0)))return this.finish(t,f.SelectorExpected);for(;this.accept(d.Comma);)if(!r.addChild(this._parseSelector(!0)))return this.finish(t,f.SelectorExpected);return this.accept(d.ParenthesisR)?this.finish(t):this.finish(t,f.RightParenthesisExpected)},e.prototype._parseDetachedRuleSetMixin=function(){if(!this.peek(d.AtKeyword))return null;var t=this.mark(),r=this.create(et);return r.addChild(this._parseVariable(!0))&&(this.hasWhitespace()||!this.accept(d.ParenthesisL))?(this.restoreAtMark(t),null):this.accept(d.ParenthesisR)?this.finish(r):this.finish(r,f.RightParenthesisExpected)},e.prototype._tryParseMixinReference=function(t){t===void 0&&(t=!0);for(var r=this.mark(),i=this.create(et),o=this._parseMixinDeclarationIdentifier();o;){this.acceptDelim(">");var s=this._parseMixinDeclarationIdentifier();if(s)i.getNamespaces().addChild(o),o=s;else break}if(!i.setIdentifier(o))return this.restoreAtMark(r),null;var a=!1;if(this.accept(d.ParenthesisL)){if(a=!0,i.getArguments().addChild(this._parseMixinArgument())){for(;(this.accept(d.Comma)||this.accept(d.SemiColon))&&!this.peek(d.ParenthesisR);)if(!i.getArguments().addChild(this._parseMixinArgument()))return this.finish(i,f.ExpressionExpected)}if(!this.accept(d.ParenthesisR))return this.finish(i,f.RightParenthesisExpected);o.referenceTypes=[A.Mixin]}else o.referenceTypes=[A.Mixin,A.Rule];return this.peek(d.BracketL)?t||this._addLookupChildren(i):i.addChild(this._parsePrio()),!a&&!this.peek(d.SemiColon)&&!this.peek(d.CurlyR)&&!this.peek(d.EOF)?(this.restoreAtMark(r),null):this.finish(i)},e.prototype._parseMixinArgument=function(){var t=this.create(we),r=this.mark(),i=this._parseVariable();return i&&(this.accept(d.Colon)?t.setIdentifier(i):this.restoreAtMark(r)),t.setValue(this._parseDetachedRuleSet()||this._parseExpr(!0))?this.finish(t):(this.restoreAtMark(r),null)},e.prototype._parseMixinParameter=function(){var t=this.create(Be);if(this.peekKeyword("@rest")){var r=this.create(F);return this.consumeToken(),this.accept(Wn)?(t.setIdentifier(this.finish(r)),this.finish(t)):this.finish(t,f.DotExpected,[],[d.Comma,d.ParenthesisR])}if(this.peek(Wn)){var i=this.create(F);return this.consumeToken(),t.setIdentifier(this.finish(i)),this.finish(t)}var o=!1;return t.setIdentifier(this._parseVariable())&&(this.accept(d.Colon),o=!0),!t.setDefaultValue(this._parseDetachedRuleSet()||this._parseExpr(!0))&&!o?null:this.finish(t)},e.prototype._parseGuard=function(){if(!this.peekIdent("when"))return null;var t=this.create(Pi);if(this.consumeToken(),t.isNegated=this.acceptIdent("not"),!t.getConditions().addChild(this._parseGuardCondition()))return this.finish(t,f.ConditionExpected);for(;this.acceptIdent("and")||this.accept(d.Comma);)if(!t.getConditions().addChild(this._parseGuardCondition()))return this.finish(t,f.ConditionExpected);return this.finish(t)},e.prototype._parseGuardCondition=function(){if(!this.peek(d.ParenthesisL))return null;var t=this.create(Ai);return this.consumeToken(),t.addChild(this._parseExpr()),this.accept(d.ParenthesisR)?this.finish(t):this.finish(t,f.RightParenthesisExpected)},e.prototype._parseFunction=function(){var t=this.mark(),r=this.create(Pe);if(!r.setIdentifier(this._parseFunctionIdentifier()))return null;if(this.hasWhitespace()||!this.accept(d.ParenthesisL))return this.restoreAtMark(t),null;if(r.getArguments().addChild(this._parseMixinArgument())){for(;(this.accept(d.Comma)||this.accept(d.SemiColon))&&!this.peek(d.ParenthesisR);)if(!r.getArguments().addChild(this._parseMixinArgument()))return this.finish(r,f.ExpressionExpected)}return this.accept(d.ParenthesisR)?this.finish(r):this.finish(r,f.RightParenthesisExpected)},e.prototype._parseFunctionIdentifier=function(){if(this.peekDelim("%")){var t=this.create(te);return t.referenceTypes=[A.Function],this.consumeToken(),this.finish(t)}return n.prototype._parseFunctionIdentifier.call(this)},e.prototype._parseURLArgument=function(){var t=this.mark(),r=n.prototype._parseURLArgument.call(this);if(!r||!this.peek(d.ParenthesisR)){this.restoreAtMark(t);var i=this.create(F);return i.addChild(this._parseBinaryExpr()),this.finish(i)}return r},e}(gt);var $a=function(){var n=function(e,t){return n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(r,i){r.__proto__=i}||function(r,i){for(var o in i)Object.prototype.hasOwnProperty.call(i,o)&&(r[o]=i[o])},n(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");n(e,t);function r(){this.constructor=e}e.prototype=t===null?Object.create(t):(r.prototype=t.prototype,new r)}}(),I=H(),Jo=function(n){$a(e,n);function e(t,r){return n.call(this,"@",t,r)||this}return e.prototype.createFunctionProposals=function(t,r,i,o){for(var s=0,a=t;s 50%"),example:"percentage(@number);",type:"percentage"},{name:"round",description:I("less.builtin.round","rounds a number to a number of places"),example:"round(number, [places: 0]);"},{name:"sqrt",description:I("less.builtin.sqrt","calculates square root of a number"),example:"sqrt(number);"},{name:"sin",description:I("less.builtin.sin","sine function"),example:"sin(number);"},{name:"tan",description:I("less.builtin.tan","tangent function"),example:"tan(number);"},{name:"atan",description:I("less.builtin.atan","arctangent - inverse of tangent function"),example:"atan(number);"},{name:"pi",description:I("less.builtin.pi","returns pi"),example:"pi();"},{name:"pow",description:I("less.builtin.pow","first argument raised to the power of the second argument"),example:"pow(@base, @exponent);"},{name:"mod",description:I("less.builtin.mod","first argument modulus second argument"),example:"mod(number, number);"},{name:"min",description:I("less.builtin.min","returns the lowest of one or more values"),example:"min(@x, @y);"},{name:"max",description:I("less.builtin.max","returns the lowest of one or more values"),example:"max(@x, @y);"}],e.colorProposals=[{name:"argb",example:"argb(@color);",description:I("less.builtin.argb","creates a #AARRGGBB")},{name:"hsl",example:"hsl(@hue, @saturation, @lightness);",description:I("less.builtin.hsl","creates a color")},{name:"hsla",example:"hsla(@hue, @saturation, @lightness, @alpha);",description:I("less.builtin.hsla","creates a color")},{name:"hsv",example:"hsv(@hue, @saturation, @value);",description:I("less.builtin.hsv","creates a color")},{name:"hsva",example:"hsva(@hue, @saturation, @value, @alpha);",description:I("less.builtin.hsva","creates a color")},{name:"hue",example:"hue(@color);",description:I("less.builtin.hue","returns the `hue` channel of `@color` in the HSL space")},{name:"saturation",example:"saturation(@color);",description:I("less.builtin.saturation","returns the `saturation` channel of `@color` in the HSL space")},{name:"lightness",example:"lightness(@color);",description:I("less.builtin.lightness","returns the `lightness` channel of `@color` in the HSL space")},{name:"hsvhue",example:"hsvhue(@color);",description:I("less.builtin.hsvhue","returns the `hue` channel of `@color` in the HSV space")},{name:"hsvsaturation",example:"hsvsaturation(@color);",description:I("less.builtin.hsvsaturation","returns the `saturation` channel of `@color` in the HSV space")},{name:"hsvvalue",example:"hsvvalue(@color);",description:I("less.builtin.hsvvalue","returns the `value` channel of `@color` in the HSV space")},{name:"red",example:"red(@color);",description:I("less.builtin.red","returns the `red` channel of `@color`")},{name:"green",example:"green(@color);",description:I("less.builtin.green","returns the `green` channel of `@color`")},{name:"blue",example:"blue(@color);",description:I("less.builtin.blue","returns the `blue` channel of `@color`")},{name:"alpha",example:"alpha(@color);",description:I("less.builtin.alpha","returns the `alpha` channel of `@color`")},{name:"luma",example:"luma(@color);",description:I("less.builtin.luma","returns the `luma` value (perceptual brightness) of `@color`")},{name:"saturate",example:"saturate(@color, 10%);",description:I("less.builtin.saturate","return `@color` 10% points more saturated")},{name:"desaturate",example:"desaturate(@color, 10%);",description:I("less.builtin.desaturate","return `@color` 10% points less saturated")},{name:"lighten",example:"lighten(@color, 10%);",description:I("less.builtin.lighten","return `@color` 10% points lighter")},{name:"darken",example:"darken(@color, 10%);",description:I("less.builtin.darken","return `@color` 10% points darker")},{name:"fadein",example:"fadein(@color, 10%);",description:I("less.builtin.fadein","return `@color` 10% points less transparent")},{name:"fadeout",example:"fadeout(@color, 10%);",description:I("less.builtin.fadeout","return `@color` 10% points more transparent")},{name:"fade",example:"fade(@color, 50%);",description:I("less.builtin.fade","return `@color` with 50% transparency")},{name:"spin",example:"spin(@color, 10);",description:I("less.builtin.spin","return `@color` with a 10 degree larger in hue")},{name:"mix",example:"mix(@color1, @color2, [@weight: 50%]);",description:I("less.builtin.mix","return a mix of `@color1` and `@color2`")},{name:"greyscale",example:"greyscale(@color);",description:I("less.builtin.greyscale","returns a grey, 100% desaturated color")},{name:"contrast",example:"contrast(@color1, [@darkcolor: black], [@lightcolor: white], [@threshold: 43%]);",description:I("less.builtin.contrast","return `@darkcolor` if `@color1 is> 43% luma` otherwise return `@lightcolor`, see notes")},{name:"multiply",example:"multiply(@color1, @color2);"},{name:"screen",example:"screen(@color1, @color2);"},{name:"overlay",example:"overlay(@color1, @color2);"},{name:"softlight",example:"softlight(@color1, @color2);"},{name:"hardlight",example:"hardlight(@color1, @color2);"},{name:"difference",example:"difference(@color1, @color2);"},{name:"exclusion",example:"exclusion(@color1, @color2);"},{name:"average",example:"average(@color1, @color2);"},{name:"negation",example:"negation(@color1, @color2);"}],e}(vt);function Yo(n,e){var t=qa(n);return Ka(t,e)}function qa(n){function e(p){return n.positionAt(p.offset).line}function t(p){return n.positionAt(p.offset+p.len).line}function r(){switch(n.languageId){case"scss":return new Nn;case"less":return new Ln;default:return new Fe}}function i(p,m){var g=e(p),w=t(p);return g!==w?{startLine:g,endLine:w,kind:m}:null}var o=[],s=[],a=r();a.ignoreComment=!1,a.setSource(n.getText());for(var l=a.scan(),c=null,h=function(){switch(l.type){case d.CurlyL:case xt:{s.push({line:e(l),type:"brace",isStart:!0});break}case d.CurlyR:{if(s.length!==0){var p=Xo(s,"brace");if(!p)break;var m=t(l);p.type==="brace"&&(c&&t(c)!==m&&m--,p.line!==m&&o.push({startLine:p.line,endLine:m,kind:void 0}))}break}case d.Comment:{var g=function(D){return D==="#region"?{line:e(l),type:"comment",isStart:!0}:{line:t(l),type:"comment",isStart:!1}},w=function(D){var M=D.text.match(/^\s*\/\*\s*(#region|#endregion)\b\s*(.*?)\s*\*\//);if(M)return g(M[1]);if(n.languageId==="scss"||n.languageId==="less"){var z=D.text.match(/^\s*\/\/\s*(#region|#endregion)\b\s*(.*?)\s*/);if(z)return g(z[1])}return null},x=w(l);if(x)if(x.isStart)s.push(x);else{var p=Xo(s,"comment");if(!p)break;p.type==="comment"&&p.line!==x.line&&o.push({startLine:p.line,endLine:x.line,kind:"region"})}else{var y=i(l,"comment");y&&o.push(y)}break}}c=l,l=a.scan()};l.type!==d.EOF;)h();return o}function Xo(n,e){if(n.length===0)return null;for(var t=n.length-1;t>=0;t--)if(n[t].type===e&&n[t].isStart)return n.splice(t,1)[0];return null}function Ka(n,e){var t=e&&e.rangeLimit||Number.MAX_VALUE,r=n.sort(function(s,a){var l=s.startLine-a.startLine;return l===0&&(l=s.endLine-a.endLine),l}),i=[],o=-1;return r.forEach(function(s){s.startLine=0;c--)if(this.__items[c].match(l))return!0;return!1},o.prototype.set_indent=function(l,c){this.is_empty()&&(this.__indent_count=l||0,this.__alignment_count=c||0,this.__character_count=this.__parent.get_indent_size(this.__indent_count,this.__alignment_count))},o.prototype._set_wrap_point=function(){this.__parent.wrap_line_length&&(this.__wrap_point_index=this.__items.length,this.__wrap_point_character_count=this.__character_count,this.__wrap_point_indent_count=this.__parent.next_line.__indent_count,this.__wrap_point_alignment_count=this.__parent.next_line.__alignment_count)},o.prototype._should_wrap=function(){return this.__wrap_point_index&&this.__character_count>this.__parent.wrap_line_length&&this.__wrap_point_character_count>this.__parent.next_line.__character_count},o.prototype._allow_wrap=function(){if(this._should_wrap()){this.__parent.add_new_line();var l=this.__parent.current_line;return l.set_indent(this.__wrap_point_indent_count,this.__wrap_point_alignment_count),l.__items=this.__items.slice(this.__wrap_point_index),this.__items=this.__items.slice(0,this.__wrap_point_index),l.__character_count+=this.__character_count-this.__wrap_point_character_count,this.__character_count=this.__wrap_point_character_count,l.__items[0]===" "&&(l.__items.splice(0,1),l.__character_count-=1),!0}return!1},o.prototype.is_empty=function(){return this.__items.length===0},o.prototype.last=function(){return this.is_empty()?null:this.__items[this.__items.length-1]},o.prototype.push=function(l){this.__items.push(l);var c=l.lastIndexOf(` +`);c!==-1?this.__character_count=l.length-c:this.__character_count+=l.length},o.prototype.pop=function(){var l=null;return this.is_empty()||(l=this.__items.pop(),this.__character_count-=l.length),l},o.prototype._remove_indent=function(){this.__indent_count>0&&(this.__indent_count-=1,this.__character_count-=this.__parent.indent_size)},o.prototype._remove_wrap_indent=function(){this.__wrap_point_indent_count>0&&(this.__wrap_point_indent_count-=1)},o.prototype.trim=function(){for(;this.last()===" ";)this.__items.pop(),this.__character_count-=1},o.prototype.toString=function(){var l="";return this.is_empty()?this.__parent.indent_empty_lines&&(l=this.__parent.get_indent_string(this.__indent_count)):(l=this.__parent.get_indent_string(this.__indent_count,this.__alignment_count),l+=this.__items.join("")),l};function s(l,c){this.__cache=[""],this.__indent_size=l.indent_size,this.__indent_string=l.indent_char,l.indent_with_tabs||(this.__indent_string=new Array(l.indent_size+1).join(l.indent_char)),c=c||"",l.indent_level>0&&(c=new Array(l.indent_level+1).join(this.__indent_string)),this.__base_string=c,this.__base_string_length=c.length}s.prototype.get_indent_size=function(l,c){var h=this.__base_string_length;return c=c||0,l<0&&(h=0),h+=l*this.__indent_size,h+=c,h},s.prototype.get_indent_string=function(l,c){var h=this.__base_string;return c=c||0,l<0&&(l=0,h=""),c+=l*this.__indent_size,this.__ensure_cache(c),h+=this.__cache[c],h},s.prototype.__ensure_cache=function(l){for(;l>=this.__cache.length;)this.__add_column()},s.prototype.__add_column=function(){var l=this.__cache.length,c=0,h="";this.__indent_size&&l>=this.__indent_size&&(c=Math.floor(l/this.__indent_size),l-=c*this.__indent_size,h=new Array(c+1).join(this.__indent_string)),l&&(h+=new Array(l+1).join(" ")),this.__cache.push(h)};function a(l,c){this.__indent_cache=new s(l,c),this.raw=!1,this._end_with_newline=l.end_with_newline,this.indent_size=l.indent_size,this.wrap_line_length=l.wrap_line_length,this.indent_empty_lines=l.indent_empty_lines,this.__lines=[],this.previous_line=null,this.current_line=null,this.next_line=new o(this),this.space_before_token=!1,this.non_breaking_space=!1,this.previous_token_wrapped=!1,this.__add_outputline()}a.prototype.__add_outputline=function(){this.previous_line=this.current_line,this.current_line=this.next_line.clone_empty(),this.__lines.push(this.current_line)},a.prototype.get_line_number=function(){return this.__lines.length},a.prototype.get_indent_string=function(l,c){return this.__indent_cache.get_indent_string(l,c)},a.prototype.get_indent_size=function(l,c){return this.__indent_cache.get_indent_size(l,c)},a.prototype.is_empty=function(){return!this.previous_line&&this.current_line.is_empty()},a.prototype.add_new_line=function(l){return this.is_empty()||!l&&this.just_added_newline()?!1:(this.raw||this.__add_outputline(),!0)},a.prototype.get_code=function(l){this.trim(!0);var c=this.current_line.pop();c&&(c[c.length-1]===` +`&&(c=c.replace(/\n+$/g,"")),this.current_line.push(c)),this._end_with_newline&&this.__add_outputline();var h=this.__lines.join(` +`);return l!==` +`&&(h=h.replace(/[\n]/g,l)),h},a.prototype.set_wrap_point=function(){this.current_line._set_wrap_point()},a.prototype.set_indent=function(l,c){return l=l||0,c=c||0,this.next_line.set_indent(l,c),this.__lines.length>1?(this.current_line.set_indent(l,c),!0):(this.current_line.set_indent(),!1)},a.prototype.add_raw_token=function(l){for(var c=0;c1&&this.current_line.is_empty();)this.__lines.pop(),this.current_line=this.__lines[this.__lines.length-1],this.current_line.trim();this.previous_line=this.__lines.length>1?this.__lines[this.__lines.length-2]:null},a.prototype.just_added_newline=function(){return this.current_line.is_empty()},a.prototype.just_added_blankline=function(){return this.is_empty()||this.current_line.is_empty()&&this.previous_line.is_empty()},a.prototype.ensure_empty_line_above=function(l,c){for(var h=this.__lines.length-2;h>=0;){var p=this.__lines[h];if(p.is_empty())break;if(p.item(0).indexOf(l)!==0&&p.item(-1)!==c){this.__lines.splice(h+1,0,new o(this)),this.previous_line=this.__lines[this.__lines.length-2];break}h--}},i.exports.Output=a},,,,function(i){function o(l,c){this.raw_options=s(l,c),this.disabled=this._get_boolean("disabled"),this.eol=this._get_characters("eol","auto"),this.end_with_newline=this._get_boolean("end_with_newline"),this.indent_size=this._get_number("indent_size",4),this.indent_char=this._get_characters("indent_char"," "),this.indent_level=this._get_number("indent_level"),this.preserve_newlines=this._get_boolean("preserve_newlines",!0),this.max_preserve_newlines=this._get_number("max_preserve_newlines",32786),this.preserve_newlines||(this.max_preserve_newlines=0),this.indent_with_tabs=this._get_boolean("indent_with_tabs",this.indent_char===" "),this.indent_with_tabs&&(this.indent_char=" ",this.indent_size===1&&(this.indent_size=4)),this.wrap_line_length=this._get_number("wrap_line_length",this._get_number("max_char")),this.indent_empty_lines=this._get_boolean("indent_empty_lines"),this.templating=this._get_selection_list("templating",["auto","none","django","erb","handlebars","php","smarty"],["auto"])}o.prototype._get_array=function(l,c){var h=this.raw_options[l],p=c||[];return typeof h=="object"?h!==null&&typeof h.concat=="function"&&(p=h.concat()):typeof h=="string"&&(p=h.split(/[^a-zA-Z0-9_\/\-]+/)),p},o.prototype._get_boolean=function(l,c){var h=this.raw_options[l],p=h===void 0?!!c:!!h;return p},o.prototype._get_characters=function(l,c){var h=this.raw_options[l],p=c||"";return typeof h=="string"&&(p=h.replace(/\\r/,"\r").replace(/\\n/,` +`).replace(/\\t/," ")),p},o.prototype._get_number=function(l,c){var h=this.raw_options[l];c=parseInt(c,10),isNaN(c)&&(c=0);var p=parseInt(h,10);return isNaN(p)&&(p=c),p},o.prototype._get_selection=function(l,c,h){var p=this._get_selection_list(l,c,h);if(p.length!==1)throw new Error("Invalid Option Value: The option '"+l+`' can only be one of the following values: +`+c+` +You passed in: '`+this.raw_options[l]+"'");return p[0]},o.prototype._get_selection_list=function(l,c,h){if(!c||c.length===0)throw new Error("Selection list cannot be empty.");if(h=h||[c[0]],!this._is_valid_selection(h,c))throw new Error("Invalid Default Value!");var p=this._get_array(l,h);if(!this._is_valid_selection(p,c))throw new Error("Invalid Option Value: The option '"+l+`' can contain only the following values: +`+c+` +You passed in: '`+this.raw_options[l]+"'");return p},o.prototype._is_valid_selection=function(l,c){return l.length&&c.length&&!l.some(function(h){return c.indexOf(h)===-1})};function s(l,c){var h={};l=a(l);var p;for(p in l)p!==c&&(h[p]=l[p]);if(c&&l[c])for(p in l[c])h[p]=l[c][p];return h}function a(l){var c={},h;for(h in l){var p=h.replace(/-/g,"_");c[p]=l[h]}return c}i.exports.Options=o,i.exports.normalizeOpts=a,i.exports.mergeOpts=s},,function(i){var o=RegExp.prototype.hasOwnProperty("sticky");function s(a){this.__input=a||"",this.__input_length=this.__input.length,this.__position=0}s.prototype.restart=function(){this.__position=0},s.prototype.back=function(){this.__position>0&&(this.__position-=1)},s.prototype.hasNext=function(){return this.__position=0&&a=0&&l=a.length&&this.__input.substring(l-a.length,l).toLowerCase()===a},i.exports.InputScanner=s},,,,,function(i){function o(s,a){s=typeof s=="string"?s:s.source,a=typeof a=="string"?a:a.source,this.__directives_block_pattern=new RegExp(s+/ beautify( \w+[:]\w+)+ /.source+a,"g"),this.__directive_pattern=/ (\w+)[:](\w+)/g,this.__directives_end_ignore_pattern=new RegExp(s+/\sbeautify\signore:end\s/.source+a,"g")}o.prototype.get_directives=function(s){if(!s.match(this.__directives_block_pattern))return null;var a={};this.__directive_pattern.lastIndex=0;for(var l=this.__directive_pattern.exec(s);l;)a[l[1]]=l[2],l=this.__directive_pattern.exec(s);return a},o.prototype.readIgnored=function(s){return s.readUntilAfter(this.__directives_end_ignore_pattern)},i.exports.Directives=o},,function(i,o,s){var a=s(16).Beautifier,l=s(17).Options;function c(h,p){var m=new a(h,p);return m.beautify()}i.exports=c,i.exports.defaultOptions=function(){return new l}},function(i,o,s){var a=s(17).Options,l=s(2).Output,c=s(8).InputScanner,h=s(13).Directives,p=new h(/\/\*/,/\*\//),m=/\r\n|[\r\n]/,g=/\r\n|[\r\n]/g,w=/\s/,x=/(?:\s|\n)+/g,y=/\/\*(?:[\s\S]*?)((?:\*\/)|$)/g,D=/\/\/(?:[^\n\r\u2028\u2029]*)/g;function M(z,P){this._source_text=z||"",this._options=new a(P),this._ch=null,this._input=null,this.NESTED_AT_RULE={"@page":!0,"@font-face":!0,"@keyframes":!0,"@media":!0,"@supports":!0,"@document":!0},this.CONDITIONAL_GROUP_RULE={"@media":!0,"@supports":!0,"@document":!0}}M.prototype.eatString=function(z){var P="";for(this._ch=this._input.next();this._ch;){if(P+=this._ch,this._ch==="\\")P+=this._input.next();else if(z.indexOf(this._ch)!==-1||this._ch===` +`)break;this._ch=this._input.next()}return P},M.prototype.eatWhitespace=function(z){for(var P=w.test(this._input.peek()),L=0;w.test(this._input.peek());)this._ch=this._input.next(),z&&this._ch===` +`&&(L===0||L0&&this._indentLevel--},M.prototype.beautify=function(){if(this._options.disabled)return this._source_text;var z=this._source_text,P=this._options.eol;P==="auto"&&(P=` +`,z&&m.test(z||"")&&(P=z.match(m)[0])),z=z.replace(g,` +`);var L=z.match(/^[\t ]*/)[0];this._output=new l(this._options,L),this._input=new c(z),this._indentLevel=0,this._nestedLevel=0,this._ch=null;for(var $=0,ue=!1,oe=!1,me=!1,ve=!1,ye=!1,ke=this._ch,pe,G,Ie;pe=this._input.read(x),G=pe!=="",Ie=ke,this._ch=this._input.next(),this._ch==="\\"&&this._input.hasNext()&&(this._ch+=this._input.next()),ke=this._ch,this._ch;)if(this._ch==="/"&&this._input.peek()==="*"){this._output.add_new_line(),this._input.back();var fe=this._input.read(y),C=p.get_directives(fe);C&&C.ignore==="start"&&(fe+=p.readIgnored(this._input)),this.print_string(fe),this.eatWhitespace(!0),this._output.add_new_line()}else if(this._ch==="/"&&this._input.peek()==="/")this._output.space_before_token=!0,this._input.back(),this.print_string(this._input.read(D)),this.eatWhitespace(!0);else if(this._ch==="@")if(this.preserveSingleSpace(G),this._input.peek()==="{")this.print_string(this._ch+this.eatString("}"));else{this.print_string(this._ch);var b=this._input.peekUntilAfter(/[: ,;{}()[\]\/='"]/g);b.match(/[ :]$/)&&(b=this.eatString(": ").replace(/\s$/,""),this.print_string(b),this._output.space_before_token=!0),b=b.replace(/\s$/,""),b==="extend"?ve=!0:b==="import"&&(ye=!0),b in this.NESTED_AT_RULE?(this._nestedLevel+=1,b in this.CONDITIONAL_GROUP_RULE&&(me=!0)):!ue&&$===0&&b.indexOf(":")!==-1&&(oe=!0,this.indent())}else this._ch==="#"&&this._input.peek()==="{"?(this.preserveSingleSpace(G),this.print_string(this._ch+this.eatString("}"))):this._ch==="{"?(oe&&(oe=!1,this.outdent()),me?(me=!1,ue=this._indentLevel>=this._nestedLevel):ue=this._indentLevel>=this._nestedLevel-1,this._options.newline_between_rules&&ue&&this._output.previous_line&&this._output.previous_line.item(-1)!=="{"&&this._output.ensure_empty_line_above("/",","),this._output.space_before_token=!0,this._options.brace_style==="expand"?(this._output.add_new_line(),this.print_string(this._ch),this.indent(),this._output.set_indent(this._indentLevel)):(this.indent(),this.print_string(this._ch)),this.eatWhitespace(!0),this._output.add_new_line()):this._ch==="}"?(this.outdent(),this._output.add_new_line(),Ie==="{"&&this._output.trim(!0),ye=!1,ve=!1,oe&&(this.outdent(),oe=!1),this.print_string(this._ch),ue=!1,this._nestedLevel&&this._nestedLevel--,this.eatWhitespace(!0),this._output.add_new_line(),this._options.newline_between_rules&&!this._output.just_added_blankline()&&this._input.peek()!=="}"&&this._output.add_new_line(!0)):this._ch===":"?(ue||me)&&!(this._input.lookBack("&")||this.foundNestedPseudoClass())&&!this._input.lookBack("(")&&!ve&&$===0?(this.print_string(":"),oe||(oe=!0,this._output.space_before_token=!0,this.eatWhitespace(!0),this.indent())):(this._input.lookBack(" ")&&(this._output.space_before_token=!0),this._input.peek()===":"?(this._ch=this._input.next(),this.print_string("::")):this.print_string(":")):this._ch==='"'||this._ch==="'"?(this.preserveSingleSpace(G),this.print_string(this._ch+this.eatString(this._ch)),this.eatWhitespace(!0)):this._ch===";"?$===0?(oe&&(this.outdent(),oe=!1),ve=!1,ye=!1,this.print_string(this._ch),this.eatWhitespace(!0),this._input.peek()!=="/"&&this._output.add_new_line()):(this.print_string(this._ch),this.eatWhitespace(!0),this._output.space_before_token=!0):this._ch==="("?this._input.lookBack("url")?(this.print_string(this._ch),this.eatWhitespace(),$++,this.indent(),this._ch=this._input.next(),this._ch===")"||this._ch==='"'||this._ch==="'"?this._input.back():this._ch&&(this.print_string(this._ch+this.eatString(")")),$&&($--,this.outdent()))):(this.preserveSingleSpace(G),this.print_string(this._ch),this.eatWhitespace(),$++,this.indent()):this._ch===")"?($&&($--,this.outdent()),this.print_string(this._ch)):this._ch===","?(this.print_string(this._ch),this.eatWhitespace(!0),this._options.selector_separator_newline&&!oe&&$===0&&!ye&&!ve?this._output.add_new_line():this._output.space_before_token=!0):(this._ch===">"||this._ch==="+"||this._ch==="~")&&!oe&&$===0?this._options.space_around_combinator?(this._output.space_before_token=!0,this.print_string(this._ch),this._output.space_before_token=!0):(this.print_string(this._ch),this.eatWhitespace(),this._ch&&w.test(this._ch)&&(this._ch="")):this._ch==="]"?this.print_string(this._ch):this._ch==="["?(this.preserveSingleSpace(G),this.print_string(this._ch)):this._ch==="="?(this.eatWhitespace(),this.print_string("="),w.test(this._ch)&&(this._ch="")):this._ch==="!"&&!this._input.lookBack("\\")?(this.print_string(" "),this.print_string(this._ch)):(this.preserveSingleSpace(G),this.print_string(this._ch));var k=this._output.get_code(P);return k},i.exports.Beautifier=M},function(i,o,s){var a=s(6).Options;function l(c){a.call(this,c,"css"),this.selector_separator_newline=this._get_boolean("selector_separator_newline",!0),this.newline_between_rules=this._get_boolean("newline_between_rules",!0);var h=this._get_boolean("space_around_selector_separator");this.space_around_combinator=this._get_boolean("space_around_combinator")||h;var p=this._get_selection_list("brace_style",["collapse","expand","end-expand","none","preserve-inline"]);this.brace_style="collapse";for(var m=0;m0&&ns(r,c-1);)c--;c===0||ts(r,c-1)?l=c:c0){var x=t.insertSpaces?Xn(" ",a*o):Xn(" ",o);w=w.split(` +`).join(` +`+x),e.start.character===0&&(w=x+w)}return[{range:e,newText:w}]}function es(n){return n.replace(/^\s+/,"")}var Ga=123,Ha=125;function Ja(n,e){for(;e>=0;){var t=n.charCodeAt(e);if(t===Ga)return!0;if(t===Ha)return!1;e--}return!1}function Ve(n,e,t){if(n&&n.hasOwnProperty(e)){var r=n[e];if(r!==null)return r}return t}function Xa(n,e,t){for(var r=e,i=0,o=t.tabSize||4;r && ]#",relevance:50,description:"@counter-style descriptor. Specifies the symbols used by the marker-construction algorithm specified by the system descriptor. Needs to be specified if the counter system is 'additive'.",restrictions:["integer","string","image","identifier"]},{name:"align-content",values:[{name:"center",description:"Lines are packed toward the center of the flex container."},{name:"flex-end",description:"Lines are packed toward the end of the flex container."},{name:"flex-start",description:"Lines are packed toward the start of the flex container."},{name:"space-around",description:"Lines are evenly distributed in the flex container, with half-size spaces on either end."},{name:"space-between",description:"Lines are evenly distributed in the flex container."},{name:"stretch",description:"Lines stretch to take up the remaining space."}],syntax:"normal | | | ? ",relevance:62,description:"Aligns a flex container\u2019s lines within the flex container when there is extra space in the cross-axis, similar to how 'justify-content' aligns individual items within the main-axis.",restrictions:["enum"]},{name:"align-items",values:[{name:"baseline",description:"If the flex item\u2019s inline axis is the same as the cross axis, this value is identical to 'flex-start'. Otherwise, it participates in baseline alignment."},{name:"center",description:"The flex item\u2019s margin box is centered in the cross axis within the line."},{name:"flex-end",description:"The cross-end margin edge of the flex item is placed flush with the cross-end edge of the line."},{name:"flex-start",description:"The cross-start margin edge of the flex item is placed flush with the cross-start edge of the line."},{name:"stretch",description:"If the cross size property of the flex item computes to auto, and neither of the cross-axis margins are auto, the flex item is stretched."}],syntax:"normal | stretch | | [ ? ]",relevance:85,description:"Aligns flex items along the cross axis of the current line of the flex container.",restrictions:["enum"]},{name:"justify-items",values:[{name:"auto"},{name:"normal"},{name:"end"},{name:"start"},{name:"flex-end",description:'"Flex items are packed toward the end of the line."'},{name:"flex-start",description:'"Flex items are packed toward the start of the line."'},{name:"self-end",description:"The item is packed flush to the edge of the alignment container of the end side of the item, in the appropriate axis."},{name:"self-start",description:"The item is packed flush to the edge of the alignment container of the start side of the item, in the appropriate axis.."},{name:"center",description:"The items are packed flush to each other toward the center of the of the alignment container."},{name:"left"},{name:"right"},{name:"baseline"},{name:"first baseline"},{name:"last baseline"},{name:"stretch",description:"If the cross size property of the flex item computes to auto, and neither of the cross-axis margins are auto, the flex item is stretched."},{name:"save"},{name:"unsave"},{name:"legacy"}],syntax:"normal | stretch | | ? [ | left | right ] | legacy | legacy && [ left | right | center ]",relevance:53,description:"Defines the default justify-self for all items of the box, giving them the default way of justifying each box along the appropriate axis",restrictions:["enum"]},{name:"justify-self",values:[{name:"auto"},{name:"normal"},{name:"end"},{name:"start"},{name:"flex-end",description:'"Flex items are packed toward the end of the line."'},{name:"flex-start",description:'"Flex items are packed toward the start of the line."'},{name:"self-end",description:"The item is packed flush to the edge of the alignment container of the end side of the item, in the appropriate axis."},{name:"self-start",description:"The item is packed flush to the edge of the alignment container of the start side of the item, in the appropriate axis.."},{name:"center",description:"The items are packed flush to each other toward the center of the of the alignment container."},{name:"left"},{name:"right"},{name:"baseline"},{name:"first baseline"},{name:"last baseline"},{name:"stretch",description:"If the cross size property of the flex item computes to auto, and neither of the cross-axis margins are auto, the flex item is stretched."},{name:"save"},{name:"unsave"}],syntax:"auto | normal | stretch | | ? [ | left | right ]",relevance:53,description:"Defines the way of justifying a box inside its container along the appropriate axis.",restrictions:["enum"]},{name:"align-self",values:[{name:"auto",description:"Computes to the value of 'align-items' on the element\u2019s parent, or 'stretch' if the element has no parent. On absolutely positioned elements, it computes to itself."},{name:"baseline",description:"If the flex item\u2019s inline axis is the same as the cross axis, this value is identical to 'flex-start'. Otherwise, it participates in baseline alignment."},{name:"center",description:"The flex item\u2019s margin box is centered in the cross axis within the line."},{name:"flex-end",description:"The cross-end margin edge of the flex item is placed flush with the cross-end edge of the line."},{name:"flex-start",description:"The cross-start margin edge of the flex item is placed flush with the cross-start edge of the line."},{name:"stretch",description:"If the cross size property of the flex item computes to auto, and neither of the cross-axis margins are auto, the flex item is stretched."}],syntax:"auto | normal | stretch | | ? ",relevance:72,description:"Allows the default alignment along the cross axis to be overridden for individual flex items.",restrictions:["enum"]},{name:"all",browsers:["E79","FF27","S9.1","C37","O24"],values:[],syntax:"initial | inherit | unset | revert",relevance:53,references:[{name:"MDN Reference",url:"https://developer.mozilla.org/docs/Web/CSS/all"}],description:"Shorthand that resets all properties except 'direction' and 'unicode-bidi'.",restrictions:["enum"]},{name:"alt",browsers:["S9"],values:[],relevance:50,references:[{name:"MDN Reference",url:"https://developer.mozilla.org/docs/Web/CSS/alt"}],description:"Provides alternative text for assistive technology to replace the generated content of a ::before or ::after element.",restrictions:["string","enum"]},{name:"animation",values:[{name:"alternate",description:"The animation cycle iterations that are odd counts are played in the normal direction, and the animation cycle iterations that are even counts are played in a reverse direction."},{name:"alternate-reverse",description:"The animation cycle iterations that are odd counts are played in the reverse direction, and the animation cycle iterations that are even counts are played in a normal direction."},{name:"backwards",description:"The beginning property value (as defined in the first @keyframes at-rule) is applied before the animation is displayed, during the period defined by 'animation-delay'."},{name:"both",description:"Both forwards and backwards fill modes are applied."},{name:"forwards",description:"The final property value (as defined in the last @keyframes at-rule) is maintained after the animation completes."},{name:"infinite",description:"Causes the animation to repeat forever."},{name:"none",description:"No animation is performed"},{name:"normal",description:"Normal playback."},{name:"reverse",description:"All iterations of the animation are played in the reverse direction from the way they were specified."}],syntax:"#",relevance:82,references:[{name:"MDN Reference",url:"https://developer.mozilla.org/docs/Web/CSS/animation"}],description:"Shorthand property combines six of the animation properties into a single property.",restrictions:["time","timing-function","enum","identifier","number"]},{name:"animation-delay",syntax:"