@cdktn/provider-project 0.9.10 → 0.9.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. package/.jsii +2 -2
  2. package/lib/index.js +44 -2
  3. package/package.json +1 -1
package/.jsii CHANGED
@@ -456,6 +456,6 @@
456
456
  "symbolId": "src/index:CdktnProviderProjectOptions"
457
457
  }
458
458
  },
459
- "version": "0.9.10",
460
- "fingerprint": "UaaGZJj5qg11tvCeJWvTDVGKEe6pT4Pd2LIY3EM1BGQ="
459
+ "version": "0.9.11",
460
+ "fingerprint": "cCKwUi/2vxvdMA1fDdGaXj/IKAj9CW4WXK5inef2PGo="
461
461
  }
package/lib/index.js CHANGED
@@ -88,7 +88,7 @@ const githubActionPinnedVersions = {
88
88
  "pnpm/action-setup": "fc06bc1257f339d1d5d8b3a19a8cae5388b55320", // v5
89
89
  };
90
90
  class CdktnProviderProject extends projen_1.cdk.JsiiProject {
91
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@cdktn/provider-project.CdktnProviderProject", version: "0.9.10" };
91
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@cdktn/provider-project.CdktnProviderProject", version: "0.9.11" };
92
92
  constructor(options) {
93
93
  const cdktnVersion = options.cdktnVersion ?? options.cdktfVersion;
94
94
  assert(cdktnVersion, "Either cdktnVersion or cdktfVersion must be provided");
@@ -525,6 +525,48 @@ class CdktnProviderProject extends projen_1.cdk.JsiiProject {
525
525
  }),
526
526
  },
527
527
  ]);
528
+ // A failed upgrade run is otherwise silent -- `releaseFailureIssue` covers only
529
+ // the release workflow -- and on a weekly cron each one costs a full week of
530
+ // dependency movement. Nothing flagged cdktn-provider-awscc's break on
531
+ // 2026-08-10, or this repo's three consecutive failures that July.
532
+ //
533
+ // Its own job, not a step on `upgrade`: permissions are job-wide, so adding
534
+ // `issues: write` there would hand that scope to the persisted checkout
535
+ // credential while dependency lifecycle scripts and `projen upgrade` run. This
536
+ // job checks nothing out and runs no repository code.
537
+ //
538
+ // GH_REPO is required because of that -- with no checkout, `gh` has no remote
539
+ // to infer the repository from, and a checkout failure is exactly one of the
540
+ // failures this needs to report.
541
+ //
542
+ // Deduplicated on the label so a persistent failure files one issue, not one
543
+ // per run. The label is created here because repo labels are provisioned
544
+ // out-of-band by cdktn-repository-manager and `gh issue create` rejects an
545
+ // unknown one.
546
+ upgradeWorkflow?.patch(projen_1.JsonPatch.add("/jobs/upgrade_failure_issue", {
547
+ name: "Report a failed upgrade",
548
+ needs: "upgrade",
549
+ // always(), or a failed `upgrade` would skip this with it.
550
+ if: "${{ always() && needs.upgrade.result == 'failure' && github.event_name == 'schedule' }}",
551
+ "runs-on": "ubuntu-latest",
552
+ permissions: { issues: "write" },
553
+ steps: [
554
+ {
555
+ name: "Create issue on failure",
556
+ env: {
557
+ GH_TOKEN: "${{ secrets.GITHUB_TOKEN }}",
558
+ GH_REPO: "${{ github.repository }}",
559
+ RUN_URL: "https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}",
560
+ },
561
+ run: [
562
+ "gh label create failed-upgrade --color B60205 --description 'A scheduled dependency upgrade run failed' --force",
563
+ 'if [ "$(gh issue list --label failed-upgrade --state open --limit 1 --json number --jq length)" = "0" ]; then',
564
+ ' gh issue create --label failed-upgrade --title "Dependency upgrade failed" --body "The scheduled dependency upgrade run failed: $RUN_URL"',
565
+ "fi",
566
+ ].join("\n"),
567
+ },
568
+ ],
569
+ }));
528
570
  // Submodule documentation generation
529
571
  this.gitignore.exclude("API.md"); // ignore the old file, we now generate it in the docs folder
530
572
  this.addDevDeps("jsii-docgen@^10.2.3");
@@ -723,4 +765,4 @@ function prettyAssertEqual(subject, expected, message) {
723
765
  throw new Error(`${message ?? "Assertion failed"}: expected ${JSON.stringify(expected)} but got ${JSON.stringify(subject)}`);
724
766
  }
725
767
  }
726
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDBEQUEwRDtBQUMxRCxpQ0FBa0M7QUFDbEMsNkNBQXlDO0FBQ3pDLG1DQUFxRTtBQUVyRSxzREFJK0I7QUFDL0IscURBQWdEO0FBQ2hELGlEQUE2QztBQUM3QywrRUFBeUU7QUFDekUsMkNBQXdDO0FBQ3hDLGlEQUE2QztBQUM3QywyREFBdUQ7QUFDdkQsNkRBQXlEO0FBQ3pELDZDQUEwQztBQUMxQyw2REFBeUQ7QUFDekQsbURBQStDO0FBQy9DLG1EQUErQztBQUMvQywrQ0FBMkM7QUFFM0MseURBQXFEO0FBQ3JELHFFQUEwRTtBQUMxRSw2REFBbUU7QUFDbkUsNkZBQWtHO0FBQ2xHLG9EQUFrRTtBQUVsRSxtSEFBbUg7QUFDbkgsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUFFNUI7Ozs7R0FJRztBQUNILE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQztBQUV4QixxREFBcUQ7QUFDckQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDO0FBRTNCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILE1BQU0sMkJBQTJCLEdBQUc7SUFDbEMseUJBQXlCO0lBQ3pCLE9BQU87SUFDUCxXQUFXO0NBQ1osQ0FBQztBQTRGRixNQUFNLFlBQVksR0FBRyxDQUFDLFlBQW9CLEVBQVUsRUFBRTtJQUNwRCxPQUFPLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFDOUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxXQUFXO1FBQzVCLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN2QyxDQUFDLENBQUM7QUFFRixNQUFNLDBCQUEwQixHQUFHO0lBQ2pDLGtCQUFrQixFQUFFLDBDQUEwQyxFQUFFLFNBQVM7SUFDekUsMkJBQTJCLEVBQUUsMENBQTBDLEVBQUUsU0FBUztJQUNsRix1QkFBdUIsRUFBRSwwQ0FBMEMsRUFBRSxTQUFTO0lBQzlFLHNCQUFzQixFQUFFLDBDQUEwQyxFQUFFLFNBQVM7SUFDN0Usa0JBQWtCLEVBQUUsMENBQTBDLEVBQUUsU0FBUztJQUN6RSxvQkFBb0IsRUFBRSwwQ0FBMEMsRUFBRSxTQUFTO0lBQzNFLG9CQUFvQixFQUFFLDBDQUEwQyxFQUFFLFNBQVM7SUFDM0Usc0JBQXNCLEVBQUUsMENBQTBDLEVBQUUsU0FBUztJQUM3RSxlQUFlLEVBQUUsMENBQTBDLEVBQUUsVUFBVTtJQUN2RSx5QkFBeUIsRUFBRSwwQ0FBMEMsRUFBRSxTQUFTO0lBQ2hGLHFDQUFxQyxFQUNuQywwQ0FBMEMsRUFBRSxTQUFTO0lBQ3ZELHNCQUFzQixFQUFFLDBDQUEwQyxFQUFFLFNBQVM7SUFDN0UsMkJBQTJCLEVBQUUsMENBQTBDLEVBQUUsU0FBUztJQUNsRiwyQkFBMkIsRUFBRSwwQ0FBMEMsRUFBRSxTQUFTO0lBQ2xGLG9CQUFvQixFQUFFLDBDQUEwQyxFQUFFLFNBQVM7SUFDM0UsaUNBQWlDLEVBQUUsMENBQTBDLEVBQUUsU0FBUztJQUN4Riw4QkFBOEIsRUFBRSwwQ0FBMEMsRUFBRSxTQUFTO0lBQ3JGLGlDQUFpQyxFQUFFLDBDQUEwQyxFQUFFLFNBQVM7SUFDeEYsbUZBQW1GO0lBQ25GLG1CQUFtQixFQUFFLDBDQUEwQyxFQUFFLEtBQUs7Q0FDdkUsQ0FBQztBQUVGLE1BQWEsb0JBQXFCLFNBQVEsWUFBRyxDQUFDLFdBQVc7O0lBQ3ZELFlBQVksT0FBb0M7UUFDOUMsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksSUFBSSxPQUFPLENBQUMsWUFBWSxDQUFDO1FBQ2xFLE1BQU0sQ0FDSixZQUFZLEVBQ1osc0RBQXNELENBQ3ZELENBQUM7UUFFRixNQUFNLEVBQ0osaUJBQWlCLEVBQ2pCLHNCQUFzQixFQUN0QixpQkFBaUIsRUFDakIsY0FBYyxFQUNkLFdBQVcsRUFDWCxpQkFBaUIsRUFDakIsWUFBWSxFQUNaLGVBQWU7UUFDZixvQ0FBb0M7UUFDcEMsVUFBVSxHQUFHLHlCQUF5QixFQUN0QyxhQUFhLEdBQUcsa0JBQWtCLEVBQ2xDLFNBQVMsR0FBRyxPQUFPLEVBQ25CLGVBQWUsR0FBRyxVQUFVLEVBQzVCLFFBQVEsR0FBRyxVQUFVLEVBQ3JCLFFBQVEsR0FBRyxPQUFPLEVBQ2xCLG9CQUFvQixFQUNwQixxQkFBcUIsR0FDdEIsR0FBRyxPQUFPLENBQUM7UUFFWixNQUFNLENBQUMsY0FBYyxFQUFFLGVBQWUsQ0FBQyxHQUFHLGlCQUFpQixDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2RSxNQUFNLFlBQVksR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ3JELE1BQU0sQ0FBQyxZQUFZLEVBQUUsR0FBRyxpQkFBaUIsMkJBQTJCLENBQUMsQ0FBQztRQUN0RSxNQUFNLENBQ0osQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUM3QixxRkFBcUYsQ0FDdEYsQ0FBQztRQUVGLE1BQU0sU0FBUyxHQUFHLEdBQUcsUUFBUSxjQUFjLElBQUEsd0JBQVUsRUFBQyxZQUFZLENBQUMsRUFBRSxDQUFDO1FBQ3RFLE1BQU0sWUFBWSxHQUFHLE9BQU8sQ0FBQyxZQUFZLElBQUksTUFBTSxRQUFRLEVBQUUsQ0FBQztRQUM5RCxNQUFNLFNBQVMsR0FBRyxHQUFHLFlBQVksY0FBYyxZQUFZLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQztRQUM1RSxNQUFNLFVBQVUsR0FBRyxHQUFHLGVBQWUsSUFBSSxTQUFTLGFBQWEsWUFBWSxDQUFDLE9BQU8sQ0FDakYsSUFBSSxFQUNKLEVBQUUsQ0FDSCxFQUFFLENBQUM7UUFDSixNQUFNLGFBQWEsR0FBRyxjQUFjLFVBQVUsRUFBRSxDQUFDO1FBRWpELE1BQU0sV0FBVyxHQUFnQjtZQUMvQixHQUFHLEVBQUU7Z0JBQ0gsSUFBSSxFQUFFLElBQUksU0FBUyxhQUFhLFlBQVksRUFBRTthQUMvQztZQUNELE1BQU0sRUFBRTtnQkFDTiw4RUFBOEU7Z0JBQzlFLFFBQVEsRUFBRSxHQUFHLFNBQVMsYUFBYSxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsRUFBRTtnQkFDckUsNEVBQTRFO2dCQUM1RSxNQUFNLEVBQUUsR0FBRyxTQUFTLGFBQWEsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLEVBQUU7Z0JBQ25FLGlCQUFpQixFQUFFLHFCQUFxQixJQUFJLEtBQUs7YUFDbEQ7WUFDRCxjQUFjLEVBQUU7Z0JBQ2QsZUFBZSxFQUFFLFNBQVM7Z0JBQzFCLFNBQVMsRUFBRSxTQUFTO2FBQ3JCO1lBQ0QsY0FBYyxFQUFFO2dCQUNkLFdBQVcsRUFBRSxTQUFTO2dCQUN0QixZQUFZLEVBQUUsWUFBWTtnQkFDMUIsZUFBZSxFQUFFLEdBQUcsU0FBUyxhQUFhLFlBQVksRUFBRTthQUN6RDtZQUNELFdBQVcsRUFBRTtnQkFDWCxVQUFVLEVBQUUsR0FBRyxhQUFhLEtBQUs7Z0JBQ2pDLFlBQVksRUFBRSxrQ0FBa0M7Z0JBQ2hELFdBQVcsRUFBRSxrQkFBa0I7Z0JBQy9CLFdBQVcsRUFBRSxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7Z0JBQzNDLDZHQUE2RztnQkFDN0csMkZBQTJGO2dCQUMzRixlQUFlLEVBQUU7b0JBQ2YsNERBQTREO29CQUM1RCw4REFBOEQ7b0JBQzlELG1FQUFtRTtvQkFDbkU7d0JBQ0UsSUFBSSxFQUFFLFVBQVU7d0JBQ2hCLElBQUksRUFBRSxrQkFBa0I7d0JBQ3hCLElBQUksRUFBRTs0QkFDSixJQUFJLEVBQUUsT0FBTzt5QkFDZDtxQkFDRjtvQkFDRDt3QkFDRSxJQUFJLEVBQUUsc0JBQXNCO3dCQUM1QixHQUFHLEVBQUUsNENBQTRDO3FCQUNsRDtvQkFDRDt3QkFDRSxJQUFJLEVBQUUsd0JBQXdCO3dCQUM5QixHQUFHLEVBQUUsdURBQXVEO3FCQUM3RDtvQkFDRDt3QkFDRSxJQUFJLEVBQUUsb0NBQW9DO3dCQUMxQyxHQUFHLEVBQUUsa0JBQWtCO3FCQUN4QjtvQkFDRDt3QkFDRSxJQUFJLEVBQUUsb0JBQW9CO3dCQUMxQixHQUFHLEVBQUUsbUNBQW1DO3FCQUN6QztvQkFDRDt3QkFDRSxJQUFJLEVBQUUsc0JBQXNCO3dCQUM1QixJQUFJLEVBQUUsMkJBQTJCO3FCQUNsQztvQkFDRDt3QkFDRSxJQUFJLEVBQUUseUJBQXlCO3dCQUMvQixHQUFHLEVBQUUsc0RBQXNEO3FCQUM1RDtvQkFDRDt3QkFDRSxJQUFJLEVBQUUsa0NBQWtDO3dCQUN4QyxHQUFHLEVBQUUsdUNBQXVDO3FCQUM3QztvQkFDRDt3QkFDRSxJQUFJLEVBQUUsMkJBQTJCO3dCQUNqQyxHQUFHLEVBQUUsb0NBQW9DO3FCQUMxQztvQkFDRDt3QkFDRSxJQUFJLEVBQUUsMkRBQTJEO3dCQUNqRSxHQUFHLEVBQUU7NEJBQ0gsNkZBQTZGOzRCQUM3Riw0Q0FBNEM7NEJBQzVDLDZDQUE2Qzs0QkFDN0Msa0JBQWtCOzRCQUNsQixrQkFBa0IsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLFdBQVcsb0dBQW9HOzRCQUMvSix1R0FBdUc7NEJBQ3ZHLDZDQUE2Qzs0QkFDN0Msa0JBQWtCOzRCQUNsQix1QkFBdUIsWUFBWSxDQUFDLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLElBQUksc0NBQXNDOzRCQUMvRiwyRUFBMkU7NEJBQzNFLDBHQUEwRzs0QkFDMUcsd0hBQXdILGFBQWEseURBQXlEOzRCQUM5TCwyRUFBMkU7NEJBQzNFLDhHQUE4Rzt5QkFDL0csQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDO3FCQUNiO29CQUNEO3dCQUNFLElBQUksRUFBRSw4Q0FBOEM7d0JBQ3BELEdBQUcsRUFBRSxzREFBc0Q7cUJBQzVEO29CQUNEO3dCQUNFLElBQUksRUFBRSxxQkFBcUI7d0JBQzNCLEdBQUcsRUFBRSxvQkFBb0I7cUJBQzFCO2lCQUNGO2FBQ0Y7U0FDRixDQUFDO1FBRUYsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLHFCQUFxQjtZQUNsRCxDQUFDLENBQUMsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDLGdCQUFnQjtZQUMzQyxDQUFDLENBQUMsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLE9BQU87UUFFOUIsS0FBSyxDQUFDO1lBQ0osR0FBRyxPQUFPO1lBQ1YsYUFBYTtZQUNiLFVBQVU7WUFDVixjQUFjO1lBQ2Qsc0JBQXNCO1lBQ3RCLGNBQWM7WUFDZCxRQUFRLEVBQUUsS0FBSyxFQUFFLHlEQUF5RDtZQUMxRSxZQUFZLEVBQUUsSUFBSTtZQUNsQixvQkFBb0IsRUFBRSxvQkFBb0IsSUFBSSxLQUFLO1lBQ25ELElBQUksRUFBRSxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUk7WUFDMUIsV0FBVyxFQUFFLFlBQVksWUFBWSxtQ0FBbUM7WUFDeEUsUUFBUSxFQUFFO2dCQUNSLE9BQU87Z0JBQ1AsYUFBYTtnQkFDYixPQUFPO2dCQUNQLFdBQVc7Z0JBQ1gsVUFBVTtnQkFDVixLQUFLO2dCQUNMLFVBQVU7Z0JBQ1YsWUFBWTthQUNiO1lBQ0QsVUFBVSxFQUFFLEtBQUs7WUFDakIsSUFBSSxFQUFFLEtBQUs7WUFDWCxrQkFBa0IsRUFBRSxJQUFJO1lBQ3hCLG9CQUFvQixFQUFFLE1BQU07WUFDNUIsVUFBVSxFQUFFLHNCQUFzQixVQUFVLE1BQU07WUFDbEQsTUFBTSxFQUFFLEtBQUs7WUFDYixjQUFjLEVBQUUsK0JBQWtCLENBQUMsSUFBSTtZQUN2QywyRUFBMkU7WUFDM0UsNkVBQTZFO1lBQzdFLHdFQUF3RTtZQUN4RSxXQUFXLEVBQUU7Z0JBQ1gsb0JBQW9CLEVBQUU7b0JBQ3BCLFVBQVUsRUFBRSw4Q0FBaUMsQ0FBQyxPQUFPO29CQUNyRCxXQUFXLEVBQUU7d0JBQ1gsdUVBQXVFO3dCQUN2RSwyRUFBMkU7d0JBQzNFLHdFQUF3RTt3QkFDeEUsV0FBVyxFQUFFLENBQUMscUJBQXFCLENBQUM7cUJBQ3JDO29CQUNELHdFQUF3RTtvQkFDeEUsaURBQWlEO29CQUNqRCx3QkFBd0IsRUFBRSwyQkFBMkI7aUJBQ3REO2FBQ0Y7WUFDRCxXQUFXLEVBQUUsQ0FBQyxZQUFZO1lBQzFCLGtCQUFrQixFQUFFO2dCQUNsQixRQUFRLEVBQUUsYUFBYTtnQkFDdkIsZUFBZSxFQUFFO29CQUNmLE1BQU0sRUFBRSxDQUFDLFdBQVcsRUFBRSxjQUFjLEVBQUUsY0FBYyxDQUFDO29CQUNyRCxRQUFRLEVBQUUsd0NBQTJCLENBQUMsTUFBTTtpQkFDN0M7YUFDRjtZQUNELFNBQVMsRUFBRSxDQUFDLFlBQVk7WUFDeEIsZ0JBQWdCLEVBQUU7Z0JBQ2hCLEtBQUssRUFBRSxXQUFXO2dCQUNsQixLQUFLLEVBQUUsT0FBTzthQUNmO1lBQ0QsYUFBYSxFQUFFLFdBQVcsQ0FBQyxNQUFNO1lBQ2pDLGNBQWMsRUFBRSxXQUFXLENBQUMsY0FBYztZQUMxQyxjQUFjLEVBQUUsV0FBVyxDQUFDLGNBQWM7WUFDMUMsV0FBVyxFQUFFLFdBQVcsQ0FBQyxXQUFXO1lBQ3BDLG1CQUFtQixFQUFFLElBQUk7WUFDekIscUJBQXFCLEVBQUU7Z0JBQ3JCLG1CQUFtQixFQUFFLEtBQUs7YUFDM0I7WUFDRCxtQkFBbUIsRUFBRTtnQkFDbkIsSUFBSSxFQUFFLGtCQUFrQjtnQkFDeEIsS0FBSyxFQUFFLGtDQUFrQzthQUMxQztZQUNELGVBQWUsRUFBRSxpQkFBaUI7WUFDbEMsS0FBSyxFQUFFLElBQUk7WUFDWCxZQUFZLEVBQUU7Z0JBQ1osTUFBTSxFQUFFO29CQUNOLFVBQVUsRUFBRSxPQUFPO29CQUNuQixlQUFlLEVBQUUsRUFBRTtvQkFDbkIsWUFBWSxFQUNWLGdIQUFnSDt3QkFDaEgsaUdBQWlHO29CQUNuRyxlQUFlLEVBQUUsRUFBRTtvQkFDbkIsWUFBWSxFQUNWLDBIQUEwSDtpQkFDN0g7Z0JBQ0QsV0FBVyxFQUFFO29CQUNYLFVBQVUsRUFBRSxPQUFPO29CQUNuQixlQUFlLEVBQUUsQ0FBQztvQkFDbEIsWUFBWSxFQUFFLHFPQUFxTztvQkFDblAsZUFBZSxFQUFFLENBQUM7b0JBQ2xCLFlBQVksRUFBRSxDQUFDLGVBQWUsQ0FBQztpQkFDaEM7YUFDRjtZQUNELG1CQUFtQixFQUFFLEtBQUs7WUFDMUIsTUFBTSxFQUFFLEtBQUs7WUFDYixhQUFhLEVBQUU7Z0JBQ2IsaUJBQWlCLEVBQUUsZUFBTSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sRUFBRTtnQkFDckQsd0VBQXdFO2dCQUN4RSxPQUFPLEVBQUUsS0FBSzthQUNmO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFVBQVUsQ0FDYixpQkFBaUI7UUFDakIsK0RBQStEO1FBQy9ELDJFQUEyRTtRQUMzRSw0RUFBNEU7UUFDNUUsNEVBQTRFO1FBQzVFLDZFQUE2RTtRQUM3RSx3Q0FBd0M7UUFDeEMsc0JBQXNCLEVBQ3RCLHdCQUF3QixFQUN4Qix1QkFBdUIsQ0FDeEIsQ0FBQztRQUVGLDZKQUE2SjtRQUM3Siw2Q0FBNkM7UUFDN0MsRUFBRTtRQUNGLDJFQUEyRTtRQUMzRSwwRUFBMEU7UUFDMUUsOEVBQThFO1FBQzlFLDZFQUE2RTtRQUM3RSwyREFBMkQ7UUFDM0QsRUFBRTtRQUNGLDZFQUE2RTtRQUM3RSxnRkFBZ0Y7UUFDaEYsdUVBQXVFO1FBQ3ZFLHNFQUFzRTtRQUN0RSx1RUFBdUU7UUFDdkUsK0VBQStFO1FBQy9FLCtFQUErRTtRQUMvRSw4RUFBOEU7UUFDOUUsK0VBQStFO1FBQy9FLDJCQUEyQjtRQUMzQixFQUFFO1FBQ0YsOEVBQThFO1FBQzlFLDJFQUEyRTtRQUMzRSxnRkFBZ0Y7UUFDaEYsOEVBQThFO1FBQzlFLGdGQUFnRjtRQUNoRixNQUFNLDZCQUE2QixHQUFHLEtBQUssQ0FBQztRQUM1QyxNQUFNLDZCQUE2QixHQUFHLElBQUksQ0FBQyxDQUFDLGVBQWU7UUFFM0QsMkVBQTJFO1FBQzNFLHNFQUFzRTtRQUN0RSx3RUFBd0U7UUFDeEUsMEVBQTBFO1FBQzFFLHNFQUFzRTtRQUN0RSwwRUFBMEU7UUFDMUUsc0VBQXNFO1FBQ3RFLE1BQU0sQ0FDSixPQUFPLENBQUMsY0FBYyxLQUFLLFNBQVM7WUFDbEMsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUM7Z0JBQzNDLE9BQU8sQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDLEVBQy9CLDZEQUE2RCxPQUFPLENBQUMsY0FBYyxFQUFFLENBQ3RGLENBQUM7UUFFRixNQUFNLGVBQWUsR0FBRyxNQUFNLENBQzVCLE9BQU8sQ0FBQyxjQUFjO1lBQ3BCLENBQUMsT0FBTyxDQUFDLHFCQUFxQjtnQkFDNUIsQ0FBQyxDQUFDLDZCQUE2QjtnQkFDL0IsQ0FBQyxDQUFDLDZCQUE2QixDQUFDLENBQ3JDLENBQUM7UUFFRixvQ0FBb0M7UUFDcEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxjQUFjLENBQ3ZCLGNBQWMsRUFDZCx3QkFBd0IsZUFBZSxFQUFFLENBQzFDLENBQUM7UUFFRixJQUFJLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsRUFBRSxHQUFHLENBQUMsQ0FBQztRQUVyRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixFQUFFO1lBQ3RELElBQUksRUFBRSw2RkFBNkY7U0FDcEcsQ0FBQyxDQUFDO1FBQ0gsWUFBWSxDQUFDLFdBQVc7WUFDdEIsOEhBQThILENBQUM7UUFDakksSUFBSSxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFekMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO1FBRTNELE1BQU0sZ0JBQWdCLEdBQUc7WUFDdkIsSUFBSSxFQUFFLCtCQUErQjtZQUNyQyxHQUFHLEVBQUUsaURBQWlEO1NBQ3ZELENBQUM7UUFFQSxJQUFJLENBQUMsYUFBcUIsQ0FBQyxhQUEyQixDQUFDLElBQUksQ0FDM0QsZ0JBQWdCLENBQ2pCLENBQUM7UUFDRCxJQUFJLENBQUMsT0FBZSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUNwRSxDQUFDLEVBQ0QsQ0FBQyxFQUNELGdCQUFnQixDQUNqQixDQUFDO1FBRUYsa0dBQWtHO1FBQ2xHLE1BQU0sZUFBZSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FDNUMsK0JBQStCLENBQ2hDLENBQUM7UUFDRixlQUFlLEVBQUUsV0FBVyxDQUFDLDJCQUEyQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBRXJFLG9FQUFvRTtRQUNwRSxJQUFJLG9CQUFvQixFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLE1BQU07Z0JBQ1QsRUFBRSxlQUFlLENBQUMsU0FBUyxDQUFDO2dCQUM1QixFQUFFLElBQUksRUFBRSxLQUFLLENBQ1gsa0JBQVMsQ0FBQyxPQUFPLENBQ2YsNkNBQTZDLEVBQzdDLE1BQU0sQ0FDUCxDQUNGLENBQUM7WUFFSixtREFBbUQ7WUFDbkQsSUFBSSxDQUFDLE1BQU07Z0JBQ1QsRUFBRSxlQUFlLENBQUMsU0FBUyxDQUFDO2dCQUM1QixFQUFFLElBQUksRUFBRSxLQUFLLENBQ1gsa0JBQVMsQ0FBQyxPQUFPLENBQUMsMkJBQTJCLEVBQUUsZUFBZSxDQUFDLENBQ2hFLENBQUM7UUFDTixDQUFDO1FBRUQsMEVBQTBFO1FBQzFFLHVFQUF1RTtRQUN2RSw2RUFBNkU7UUFDN0UseUVBQXlFO1FBQ3pFLDRFQUE0RTtRQUM1RSw4RUFBOEU7UUFDOUUsd0VBQXdFO1FBQ3hFLHlFQUF5RTtRQUN6RSw4REFBOEQ7UUFFOUQsMERBQTBEO1FBQzFELE1BQU0sb0JBQW9CLEdBQ3hCLElBQUksQ0FBQyxPQUNOLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQzlDLENBQUMsQ0FBUyxFQUFFLEVBQUUsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLEtBQUssa0JBQWtCLENBQ3hELENBQUM7UUFDRixNQUFNLGlCQUFpQixHQUFXLG9CQUFvQixDQUFDLEdBQUcsQ0FBQztRQUMzRCxpQkFBaUIsQ0FDZixpQkFBaUIsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQ2hDLGdDQUFnQyxFQUNoQyxtRUFBbUUsQ0FDcEUsQ0FBQztRQUNGLG9CQUFvQixDQUFDLEdBQUcsR0FBRywrRkFBK0YsaUJBQWlCLEVBQUUsQ0FBQztRQUU5SSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEIsTUFBTSxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsR0FBSSxJQUFJLENBQUMsZUFBdUIsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ3hFLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztZQUM3QyxFQUFFLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLGdCQUFnQixDQUFDLENBQUM7UUFDMUMsQ0FBQztRQUVELDRFQUE0RTtRQUM1RSw2RUFBNkU7UUFDN0UsMkRBQTJEO1FBQzNELElBQUksaUJBQWlCLENBQUMsSUFBSSxFQUFFO1lBQzFCLGtCQUFrQixFQUFFLFlBQVk7Z0JBQzlCLENBQUMsQ0FBQyxTQUFTO2dCQUNYLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRTtTQUNoRSxDQUFDLENBQUM7UUFFSCwrREFBK0Q7UUFDL0QsRUFBRTtRQUNGLCtFQUErRTtRQUMvRSw2RUFBNkU7UUFDN0UsZ0ZBQWdGO1FBQ2hGLCtFQUErRTtRQUMvRSxnRUFBZ0U7UUFDaEUsSUFBSSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFekIsSUFBSSxDQUFDLHVCQUF1QixDQUFDLDBCQUEwQixDQUFDLENBQUM7UUFFekQsSUFBSSwwQkFBVyxDQUFDLElBQUksRUFBRTtZQUNwQixpQkFBaUI7WUFDakIsWUFBWTtZQUNaLGNBQWM7WUFDZCxlQUFlO1lBQ2YsWUFBWTtZQUNaLGlCQUFpQjtZQUNqQixXQUFXO1lBQ1gsaUJBQWlCO1lBQ2pCLFdBQVc7WUFDWCxlQUFlO1lBQ2YsZUFBZTtZQUNmLFlBQVksRUFBRSxDQUFDLENBQUMsWUFBWTtTQUM3QixDQUFDLENBQUM7UUFDSCxJQUFJLHNDQUFpQixDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNwRSxJQUFJLDRCQUFZLENBQUMsSUFBSSxFQUFFLEVBQUUsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUN6QyxJQUFJLDBCQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEIsSUFBSSxzREFBd0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFDO1FBQ3JELElBQUkscUJBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwQixJQUFJLHdCQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFckIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2xCLE1BQU0sYUFBYSxHQUFHLElBQUksK0NBQTBCLENBQUMsSUFBSSxFQUFFO2dCQUN6RCxlQUFlO2dCQUNmLGNBQWM7YUFDZixDQUFDLENBQUM7WUFDSCxJQUFJLGtDQUFlLENBQUMsSUFBSSxFQUFFO2dCQUN4QiwwQkFBMEIsRUFBRSxhQUFhLENBQUMsSUFBSTtnQkFDOUMsY0FBYztnQkFDZCxZQUFZLEVBQUUsZUFBZTthQUM5QixDQUFDLENBQUM7WUFDSCxJQUFJLDZCQUFZLENBQUMsSUFBSSxFQUFFO2dCQUNyQixlQUFlLEVBQUUsNENBQTRDO2dCQUM3RCxVQUFVO2FBQ1gsQ0FBQyxDQUFDO1lBQ0gsSUFBSSx1QkFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRXJCLHdFQUF3RTtZQUN4RSxvQ0FBb0M7WUFDcEMsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLHVFQUFzQyxDQUNsRSxJQUFJLEVBQ0o7Z0JBQ0Usd0JBQXdCLEVBQUUsYUFBYSxHQUFHLEVBQUUsR0FBRyxFQUFFO2dCQUNqRCxVQUFVLEVBQUUsV0FBVzthQUN4QixDQUNGLENBQUM7WUFDRiw0RUFBNEU7WUFDNUUsSUFBSSxDQUFDLEtBQUs7aUJBQ1AsT0FBTyxDQUFDLGNBQWMsQ0FBQztnQkFDeEIsRUFBRSxJQUFJLENBQUMsVUFBVSxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQy9DLENBQUM7UUFFRCxJQUFJLGlCQUFRLENBQUMsSUFBSSxFQUFFLG9CQUFvQixFQUFFO1lBQ3ZDLEtBQUssRUFBRTtnQkFDTCw4REFBOEQ7Z0JBQzlELHFEQUFxRDtnQkFDckQsMkRBQTJEO2dCQUMzRCxpQkFBaUI7Z0JBQ2pCLG9DQUFvQzthQUNyQztTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNsQixJQUFJLHdDQUF1QixDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztZQUV0QyxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUUsQ0FBQztZQUNuRCxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1lBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFO2dCQUN0QixXQUFXLEVBQUUsV0FBVyxDQUFDLFdBQVc7Z0JBQ3BDLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSztnQkFDeEIsR0FBRyxFQUFHLFdBQW1CLENBQUMsSUFBSTtnQkFDOUIsU0FBUyxFQUFFLGtDQUFrQzthQUM5QyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixFQUFFO2dCQUNwQyxXQUFXLEVBQUUsV0FBVyxDQUFDLFdBQVc7Z0JBQ3BDLEtBQUssRUFBRSxXQUFXLENBQUMsS0FBSztnQkFDeEIsR0FBRyxFQUFHLFdBQW1CLENBQUMsSUFBSTthQUMvQixDQUFDLENBQUM7WUFFSCxNQUFNLGVBQWUsR0FBVSxDQUM3QixJQUFJLENBQUMsTUFBTSxFQUFFLGVBQWUsQ0FBQyxTQUFTLENBQ3ZDLENBQUEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztZQUNyQixNQUFNLFlBQVksR0FBRyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLFlBQVksQ0FBQyxDQUFDO1lBQzFFLE1BQU0sQ0FDSixZQUFZLEVBQ1osNEZBQTRGLENBQzdGLENBQUM7WUFDRiwwRUFBMEU7WUFDMUUsd0VBQXdFO1lBQ3hFLHNFQUFzRTtZQUN0RSw0RUFBNEU7WUFDNUUsbUVBQW1FO1lBQ25FLE1BQU0sQ0FDSixPQUFPLFlBQVksQ0FBQyxHQUFHLEtBQUssUUFBUTtnQkFDbEMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDO2dCQUMxQyxZQUFZLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUM3QyxxSEFBcUgsSUFBSSxDQUFDLFNBQVMsQ0FDakksWUFBWSxDQUFDLEdBQUcsQ0FDakIsRUFBRSxDQUNKLENBQUM7WUFDRix1RUFBdUU7WUFDdkUsMERBQTBEO1lBQzFELE1BQU0sZUFBZSxHQUFHLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUVsRSxNQUFNLGFBQWEsR0FDakIsMERBQTBELENBQUMsQ0FBQyxtREFBbUQ7WUFDakgsWUFBWSxDQUFDLEdBQUcsR0FBRyx3Q0FBd0MsZUFBZSxRQUFRLGFBQWEsRUFBRSxDQUFDO1lBQ2xHLFlBQVksQ0FBQyxJQUFJO2dCQUNmLHNEQUFzRCxDQUFDO1FBQzNELENBQUM7UUFFRCxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsNkJBQTZCLENBQUMsQ0FBQztRQUM1RSxhQUFhLEVBQUUsV0FBVyxDQUFDLGFBQWEsRUFBRTtZQUN4QztnQkFDRSxJQUFJLEVBQUUsSUFBQSxnQ0FBa0IsRUFBQyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUMsRUFBRSxVQUFVLEVBQUUsQ0FBQyxFQUFFLENBQUM7YUFDdkU7U0FDRixDQUFDLENBQUM7UUFFSCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQzVDLG9DQUFvQyxDQUNyQyxDQUFDO1FBQ0YsZUFBZSxFQUFFLFdBQVcsQ0FBQyxhQUFhLEVBQUU7WUFDMUM7Z0JBQ0UsSUFBSSxFQUFFLElBQUEsZ0NBQWtCLEVBQUM7b0JBQ3ZCLE9BQU8sRUFBRSxJQUFJO29CQUNiLE9BQU8sRUFBRSxDQUFDO29CQUNWLFVBQVUsRUFBRSxDQUFDO29CQUNiLFFBQVEsRUFBRSxzQkFBUSxDQUFDLE1BQU07aUJBQzFCLENBQUM7YUFDSDtTQUNGLENBQUMsQ0FBQztRQUVILHFDQUFxQztRQUNyQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLDZEQUE2RDtRQUMvRixJQUFJLENBQUMsVUFBVSxDQUFDLHFCQUFxQixDQUFDLENBQUM7UUFDdkMsSUFBSSxXQUFXLEVBQUUsQ0FBQztZQUNoQix3R0FBd0c7WUFDeEcsOEZBQThGO1lBQzlGLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLFdBQVcsRUFBRSxDQUFDLENBQUM7UUFDakQsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFFRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRTtZQUNwQyxXQUFXLEVBQUUsd0NBQXdDO1lBQ3JELEtBQUssRUFBRTtnQkFDTDtvQkFDRSxJQUFJLEVBQUU7d0JBQ0osYUFBYTt3QkFDYixjQUFjO3dCQUNkLFlBQVk7d0JBQ1osa0ZBQWtGO3dCQUNsRiwrRkFBK0Y7d0JBQy9GLGdCQUFnQjt3QkFDaEIsaUZBQWlGO3dCQUNqRixTQUFTO3dCQUNULHNDQUFzQztxQkFDdkMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDO2lCQUNmO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsWUFBWSxDQUFDLENBQUM7UUFFckMsa0ZBQWtGO1FBQ2xGLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsRUFBRTtZQUMzRCxXQUFXLEVBQUUsd0RBQXdEO1lBQ3JFLEtBQUssRUFBRTtnQkFDTDtvQkFDRSxJQUFJLEVBQUUsNERBQTREO29CQUNsRSxJQUFJLEVBQUUsa0JBQWtCO2lCQUN6QjtnQkFDRCw2RUFBNkU7Z0JBQzdFLDRFQUE0RTtnQkFDNUUsMEVBQTBFO2dCQUMxRSx5RUFBeUU7Z0JBQ3pFLG1FQUFtRTtnQkFDbkUsRUFBRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRTtnQkFDbEUsNkRBQTZEO2dCQUM3RCx3RUFBd0U7Z0JBQ3hFLHNFQUFzRTtnQkFDdEUsdUVBQXVFO2dCQUN2RSx3REFBd0Q7Z0JBQ3hEO29CQUNFLEtBQUssRUFBRSx5QkFBeUI7b0JBQ2hDLFNBQVMsRUFBRSxvQkFBb0I7b0JBQy9CLHVFQUF1RTtvQkFDdkUsdUNBQXVDO29CQUN2QyxTQUFTLEVBQUUsd0RBQXdEO2lCQUNwRTtnQkFDRDtvQkFDRSxPQUFPLEVBQUUsOEJBQThCO29CQUN2QyxTQUFTLEVBQUUsZ0JBQWdCO2lCQUM1QjtnQkFDRCxFQUFFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRTthQUMxQztZQUNELEdBQUcsRUFBRTtnQkFDSCxPQUFPLEVBQUUsY0FBYztnQkFDdkIsU0FBUyxFQUFFLG1CQUFtQjtnQkFDOUIsUUFBUSxFQUFFLGtCQUFrQjtnQkFDNUIsVUFBVSxFQUFFLHFCQUFxQjtnQkFDakMsa0JBQWtCLEVBQUUsRUFBRTtnQkFDdEIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQzthQUNyQztTQUNGLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUM7UUFDN0MsK0RBQStEO1FBQzlELElBQUksQ0FBQyxhQUFxQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUNuRCxxQ0FBcUMsRUFDckMsQ0FBQyxDQUNGLENBQUM7UUFDRixxQ0FBcUM7UUFDckMsSUFBSSxDQUFDLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQztZQUNwQyxJQUFJLEVBQUUsa0NBQWtDO1lBQ3hDLEdBQUcsRUFBRSwyQkFBMkI7U0FDakMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxvQ0FBZ0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMzQixJQUFJLHNDQUFpQixDQUFDLElBQUksRUFBRTtZQUMxQixZQUFZO1lBQ1osV0FBVztZQUNYLFlBQVksRUFBRSxDQUFDLENBQUMsWUFBWTtTQUM3QixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEIscUVBQXFFO1lBQ3JFLHdFQUF3RTtZQUN4RSxJQUFJLDRCQUFZLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDekIsQ0FBQztJQUNILENBQUM7SUFFTyx1QkFBdUIsQ0FBQyxjQUFzQztRQUNwRSx3Q0FBd0M7UUFDeEMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLENBQUMsRUFBRSxFQUFFO1lBQ3JELElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsR0FBRyxJQUFJLElBQUksR0FBRyxFQUFFLENBQUMsQ0FBQztRQUNuRCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7O0FBL29CSCxvREFncEJDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLGNBQWUsU0FBUSxrQkFBUztJQUM3QixhQUFhO1FBQ2xCLE1BQU0sUUFBUSxHQUFHLGVBQU0sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDNUUsTUFBTSxLQUFLLEdBQTJCLFFBQWdCLEVBQUUsSUFBSSxFQUFFLGFBQWE7WUFDekUsRUFBRSxLQUFLLENBQUM7UUFDVixNQUFNLENBQ0osS0FBSyxFQUNMLHFGQUFxRixDQUN0RixDQUFDO1FBQ0YsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQztRQUNoRSxNQUFNLENBQ0osSUFBSSxFQUFFLEdBQUcsRUFDVCxpSEFBaUgsQ0FDbEgsQ0FBQztRQUNGLDRFQUE0RTtRQUM1RSw4RUFBOEU7UUFDOUUsZ0ZBQWdGO1FBQ2hGLGtJQUFrSTtRQUNsSSxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVU7WUFDakIsZ01BQWdNLENBQUM7UUFDbk0sMEJBQTBCO1FBQzFCLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQztJQUMzQyxDQUFDO0NBQ0Y7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNILE1BQU0saUJBQWtCLFNBQVEsa0JBQVM7SUFJcEI7SUFIRixrQkFBa0IsQ0FBVTtJQUU3QyxZQUNtQixXQUE0QixFQUM3QyxPQUF3QztRQUV4QyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7UUFIRixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFJN0MsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztJQUN2RCxDQUFDO0lBRU0sYUFBYTtRQUNsQixNQUFNLFFBQVEsR0FBRyxlQUFNLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsZUFBZSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzVFLE1BQU0sS0FBSyxHQUEyQixRQUFnQixFQUFFLElBQUksRUFBRSxjQUFjO1lBQzFFLEVBQUUsS0FBSyxDQUFDO1FBQ1YsTUFBTSxDQUNKLEtBQUssRUFDTCxzRkFBc0YsQ0FDdkYsQ0FBQztRQUVGLG9FQUFvRTtRQUNwRSwwRUFBMEU7UUFDMUUsaUVBQWlFO1FBQ2pFLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUN6QyxDQUFDLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FDaEMsQ0FBQztRQUNGLE1BQU0sQ0FDSixZQUFZLElBQUksQ0FBQyxFQUNqQixnR0FBZ0csQ0FDakcsQ0FBQztRQUNGLEtBQUssQ0FBQyxNQUFNLENBQUMsWUFBWSxFQUFFLENBQUMsRUFBRTtZQUM1QixJQUFJLEVBQUUsWUFBWTtZQUNsQixJQUFJLEVBQUUsbUJBQW1CO1lBQ3pCLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUU7U0FDeEQsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLElBQUksQ0FBQyxrQkFBa0I7WUFBRSxPQUFPO1FBRXJDLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLGVBQWUsQ0FBQyxDQUFDLENBQUM7UUFDdkUsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFCLE1BQU0sQ0FDSixJQUFJLEVBQUUsR0FBRyxFQUNULHlIQUF5SCxDQUMxSCxDQUFDO1FBRUYsTUFBTSxjQUFjLEdBQUcsZUFBTSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQztZQUN0RCxXQUFXLEVBQUUsZUFBZTtZQUM1QixnQkFBZ0IsRUFBRSx3QkFBd0I7WUFDMUMsS0FBSyxFQUFFLGdDQUFnQztZQUN2QyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUM7WUFDdkMsV0FBVyxFQUFFLEVBQUUsUUFBUSxFQUFFLGVBQU0sQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDLEtBQUssRUFBRTtTQUNoRSxDQUFDLENBQUM7UUFFSCw0RUFBNEU7UUFDNUUsc0VBQXNFO1FBQ3RFLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxjQUFjLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckQsc0VBQXNFO1FBQ3RFLG9FQUFvRTtRQUNwRSx5RUFBeUU7UUFDekUsZ0VBQWdFO1FBQ2hFLElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxHQUFHLGtCQUFrQixjQUFjLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDdEUsQ0FBQztDQUNGO0FBRUQsU0FBUyxpQkFBaUIsQ0FBSSxPQUFVLEVBQUUsUUFBVyxFQUFFLE9BQWdCO0lBQ3JFLElBQUksT0FBTyxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sSUFBSSxLQUFLLENBQ2IsR0FBRyxPQUFPLElBQUksa0JBQWtCLGNBQWMsSUFBSSxDQUFDLFNBQVMsQ0FDMUQsUUFBUSxDQUNULFlBQVksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUN2QyxDQUFDO0lBQ0osQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzICovXG5pbXBvcnQgYXNzZXJ0ID0gcmVxdWlyZShcImFzc2VydFwiKTtcbmltcG9ydCB7IHBhc2NhbENhc2UgfSBmcm9tIFwiY2hhbmdlLWNhc2VcIjtcbmltcG9ydCB7IENvbXBvbmVudCwgVGV4dEZpbGUsIGNkaywgZ2l0aHViLCBKc29uUGF0Y2ggfSBmcm9tIFwicHJvamVuXCI7XG5pbXBvcnQgeyBKb2JTdGVwIH0gZnJvbSBcInByb2plbi9saWIvZ2l0aHViL3dvcmtmbG93cy1tb2RlbFwiO1xuaW1wb3J0IHtcbiAgTm9kZVBhY2thZ2VNYW5hZ2VyLFxuICBQbnBtV29ya3NwYWNlWWFtbFNjaGVtYU5vZGVMaW5rZXIsXG4gIFVwZ3JhZGVEZXBlbmRlbmNpZXNTY2hlZHVsZSxcbn0gZnJvbSBcInByb2plbi9saWIvamF2YXNjcmlwdFwiO1xuaW1wb3J0IHsgQWxlcnRPcGVuUHJzIH0gZnJvbSBcIi4vYWxlcnQtb3Blbi1wcnNcIjtcbmltcG9ydCB7IEF1dG9BcHByb3ZlIH0gZnJvbSBcIi4vYXV0by1hcHByb3ZlXCI7XG5pbXBvcnQgeyBBdXRvQ2xvc2VDb21tdW5pdHlJc3N1ZXMgfSBmcm9tIFwiLi9hdXRvLWNsb3NlLWNvbW11bml0eS1pc3N1ZXNcIjtcbmltcG9ydCB7IEF1dG9tZXJnZSB9IGZyb20gXCIuL2F1dG9tZXJnZVwiO1xuaW1wb3J0IHsgQ2RrdGZDb25maWcgfSBmcm9tIFwiLi9jZGt0Zi1jb25maWdcIjtcbmltcG9ydCB7IENvcHlyaWdodEhlYWRlcnMgfSBmcm9tIFwiLi9jb3B5cmlnaHQtaGVhZGVyc1wiO1xuaW1wb3J0IHsgQ3VzdG9taXplZExpY2Vuc2UgfSBmcm9tIFwiLi9jdXN0b21pemVkLWxpY2Vuc2VcIjtcbmltcG9ydCB7IERlcGVuZGFib3QgfSBmcm9tIFwiLi9kZXBlbmRhYm90XCI7XG5pbXBvcnQgeyBEZXByZWNhdGVQYWNrYWdlcyB9IGZyb20gXCIuL2RlcHJlY2F0ZS1wYWNrYWdlc1wiO1xuaW1wb3J0IHsgRm9yY2VSZWxlYXNlIH0gZnJvbSBcIi4vZm9yY2UtcmVsZWFzZVwiO1xuaW1wb3J0IHsgR2l0aHViSXNzdWVzIH0gZnJvbSBcIi4vZ2l0aHViLWlzc3Vlc1wiO1xuaW1wb3J0IHsgTG9ja0lzc3VlcyB9IGZyb20gXCIuL2xvY2staXNzdWVzXCI7XG5pbXBvcnQgeyBQYWNrYWdlSW5mbyB9IGZyb20gXCIuL3BhY2thZ2UtaW5mb1wiO1xuaW1wb3J0IHsgUHJvdmlkZXJVcGdyYWRlIH0gZnJvbSBcIi4vcHJvdmlkZXItdXBncmFkZVwiO1xuaW1wb3J0IHsgQ2hlY2tGb3JVcGdyYWRlc1NjcmlwdEZpbGUgfSBmcm9tIFwiLi9zY3JpcHRzL2NoZWNrLWZvci11cGdyYWRlc1wiO1xuaW1wb3J0IHsgU2hvdWxkUmVsZWFzZVNjcmlwdEZpbGUgfSBmcm9tIFwiLi9zY3JpcHRzL3Nob3VsZC1yZWxlYXNlXCI7XG5pbXBvcnQgeyBVcGdyYWRlVnVsbmVyYWJsZVRyYW5zaXRpdmVzU2NyaXB0RmlsZSB9IGZyb20gXCIuL3NjcmlwdHMvdXBncmFkZS12dWxuZXJhYmxlLXRyYW5zaXRpdmVzXCI7XG5pbXBvcnQgeyBnZW5lcmF0ZVJhbmRvbUNyb24sIFNjaGVkdWxlIH0gZnJvbSBcIi4vdXRpbC9yYW5kb20tY3JvblwiO1xuXG4vLyBlbnN1cmUgbmV3IHByb2plY3RzIHN0YXJ0IHdpdGggMS4wLjAgc28gdGhhdCBldmVyeSBmb2xsb3dpbmcgYnJlYWtpbmcgY2hhbmdlIGxlYWRzIHRvIGFuIGluY3JlYXNlZCBtYWpvciB2ZXJzaW9uXG5jb25zdCBNSU5fTUFKT1JfVkVSU0lPTiA9IDE7XG5cbi8qKlxuICogRGF5cyBhIHJlbGVhc2UgbXVzdCBhZ2UgYmVmb3JlIGFuIHVwZ3JhZGUgbWF5IGluc3RhbGwgaXQsIHNvIGEgY29tcHJvbWlzZWRcbiAqIHZlcnNpb24gaGFzIHRpbWUgdG8gYmUgZmxhZ2dlZCBiZWZvcmUgYW4gYXV0by1tZXJnaW5nIFBSIHB1bGxzIGl0IGluLiBXYWl2ZWRcbiAqIGZvciBNSU5JTVVNX1JFTEVBU0VfQUdFX0VYQ0xVREUuXG4gKi9cbmNvbnN0IENPT0xET1dOX0RBWVMgPSA0O1xuXG4vKiogU2V2ZXJpdHkgZmxvb3IgZm9yIHRoZSBgYXVkaXREZXBzYCBidWlsZCBnYXRlLiAqL1xuY29uc3QgQVVESVRfTEVWRUwgPSBcImhpZ2hcIjtcblxuLyoqXG4gKiBGaXJzdC1wYXJ0eSBwYWNrYWdlcyB0aGF0IGFyZSBleGVtcHQgZnJvbSB0aGUgZGVwZW5kZW5jeS11cGdyYWRlIGNvb2xkb3duLlxuICpcbiAqIGBDT09MRE9XTl9EQVlTYCBiZWxvdyByZWFjaGVzIHRoZSBnZW5lcmF0ZWQgdXBncmFkZSB0YXNrIGFzXG4gKiBgcG5wbSB1cGRhdGUgLS1jb25maWcubWluaW11bS1yZWxlYXNlLWFnZT01NzYwYCwgd2hpY2ggZ2F0ZXMgKmV2ZXJ5KiBwYWNrYWdlXG4gKiAtLSBpbmNsdWRpbmcgdGhlIG9uZXMgd2UgcHVibGlzaCBvdXJzZWx2ZXMuIFRoYXQgaXMgYmFja3dhcmRzIGZvciB0aG9zZTogYVxuICogZml4IHJlbGVhc2VkIGhlcmUgY2Fubm90IHJlYWNoIHRoZSBmbGVldCBmb3IgZm91ciBkYXlzLCB3aGljaCBpcyBleGFjdGx5IHRoZVxuICogd2luZG93IGluIHdoaWNoIHdlIG5lZWQgaXQgdG8gbW92ZS4gVGhlIGNvb2xkb3duIGV4aXN0cyB0byBnaXZlIGEgY29tcHJvbWlzZWRcbiAqIHRoaXJkLXBhcnR5IHJlbGVhc2UgdGltZSB0byBiZSBmbGFnZ2VkOyBmb3IgcGFja2FnZXMgcHVibGlzaGVkIGZyb20gcmVwb3Mgd2VcbiAqIG93biwgd2l0aCB0cnVzdGVkIHB1Ymxpc2hpbmcgYW5kIGFuIGF1ZGl0IGdhdGUgb24gdGhlaXIgb3duIHJlbGVhc2VzLCBpdCBidXlzXG4gKiBub3RoaW5nIHRoYXQgd2UgZG8gbm90IGFscmVhZHkgY29udHJvbC5cbiAqXG4gKiBgY2RrdG5gIGFuZCBgY2RrdG4tY2xpYCBhcmUgaGVyZSBmb3IgdGhlIHNhbWUgcmVhc29uOiBhIHByb3ZpZGVyIHJlcG8gaGFzIHRvXG4gKiBiZSBhYmxlIHRvIHJlYnVpbGQgYWdhaW5zdCBhIGZyZXNobHkgcmVsZWFzZWQgQ0RLVE4sIGVzcGVjaWFsbHkgYWZ0ZXIgYSBtYWpvclxuICogb25lLiBUaGV5IGFyZSBhbHNvIHZlcnNpb24tcGlubmVkIHRvZ2V0aGVyIGJ5IGBDZGt0ZkNvbmZpZ2AsIHNvIGV4Y2x1ZGluZyBvbmVcbiAqIHdpdGhvdXQgdGhlIG90aGVyIHdvdWxkIG9ubHkgaGFsZi1hcHBseS5cbiAqXG4gKiBwbnBtIGhvbm91cnMgdGhpcyBmcm9tIGBwbnBtLXdvcmtzcGFjZS55YW1sYCBldmVuIHRob3VnaCBgbWluaW11bVJlbGVhc2VBZ2VgXG4gKiBpdHNlbGYgYXJyaXZlcyBvbiB0aGUgY29tbWFuZCBsaW5lOyBpdCBtYXRjaGVzIG9uIHBhY2thZ2UgbmFtZSBhbmQgYXBwbGllcyB0b1xuICogZXZlcnkgdmVyc2lvbiBvZiB0aGF0IHBhY2thZ2UuIEV2ZXJ5dGhpbmcgbm90IGxpc3RlZCBoZXJlIHN0YXlzIGdhdGVkLlxuICovXG5jb25zdCBNSU5JTVVNX1JFTEVBU0VfQUdFX0VYQ0xVREUgPSBbXG4gIFwiQGNka3RuL3Byb3ZpZGVyLXByb2plY3RcIixcbiAgXCJjZGt0blwiLFxuICBcImNka3RuLWNsaVwiLFxuXTtcblxuZXhwb3J0IGludGVyZmFjZSBDZGt0blByb3ZpZGVyUHJvamVjdE9wdGlvbnMgZXh0ZW5kcyBjZGsuSnNpaVByb2plY3RPcHRpb25zIHtcbiAgcmVhZG9ubHkgdXNlQ3VzdG9tR2l0aHViUnVubmVyPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFY4IGhlYXAgY2VpbGluZyBpbiBNaUIsIHdyaXR0ZW4gYXMgYC0tbWF4LW9sZC1zcGFjZS1zaXplYCBpbnRvIHRoZSBnbG9iYWxcbiAgICogYE5PREVfT1BUSU9OU2AgaW4gYC5wcm9qZW4vdGFza3MuanNvbmAuXG4gICAqXG4gICAqIE11c3QgYmUgYSBwb3NpdGl2ZSBzYWZlIGludGVnZXIuIE5vZGUgcmVmdXNlcyB0byBzdGFydCBvbiBhIG1hbGZvcm1lZFxuICAgKiB2YWx1ZSAoYC0tbWF4LW9sZC1zcGFjZS1zaXplPTEuNWAgYW5kIGA9TmFOYCBhcmUgYm90aCByZWplY3RlZCBiZWZvcmUgYW55XG4gICAqIHNjcmlwdCBydW5zKSwgYW5kIGAwYCByZXN0b3JlcyBWOCdzIG93biBkZWZhdWx0IHJhdGhlciB0aGFuIGFwcGx5aW5nIGFcbiAgICogY2VpbGluZyAtLSBzbyBhbiBpbnZhbGlkIHZhbHVlIGhlcmUgd291bGQgYnJlYWsgZXZlcnkgdGFzayBpbiB0aGVcbiAgICogZ2VuZXJhdGVkIHJlcG8sIGZhciBmcm9tIHRoaXMgY2FsbCBzaXRlLiBJdCBpcyB2YWxpZGF0ZWQgYXQgc3ludGggdGltZS5cbiAgICpcbiAgICogTGVhdmUgdW5zZXQgdG8gdGFrZSB0aGUgZGVmYXVsdCBmb3IgdGhlIHJ1bm5lciBjbGFzczpcbiAgICogYERFRkFVTFRfSEVBUF9NQl9DVVNUT01fUlVOTkVSYCAoMjA0ODAsIG9uIDMyR0IgY3VzdG9tIHJ1bm5lcnMpIG9yXG4gICAqIGBERUZBVUxUX0hFQVBfTUJfSE9TVEVEX1JVTk5FUmAgKDY2NTYsIG9uIDdHQiBHaXRIdWItaG9zdGVkIHJ1bm5lcnMpLlxuICAgKlxuICAgKiBTZXQgaXQgb25seSBmb3IgYSBwcm92aWRlciB0aGF0IHN0aWxsIE9PTXMgb24gdGhhdCBkZWZhdWx0LlxuICAgKiBgLS1tYXgtb2xkLXNwYWNlLXNpemVgIGlzIGEgKmNlaWxpbmcqLCBub3QgYSByZXNlcnZhdGlvbjogbG93ZXJpbmcgaXRcbiAgICogY2Fubm90IHNsb3cgZG93biBwcm92aWRlcnMgdGhhdCBuZXZlciBhcHByb2FjaCBpdCwgaXQgb25seSBtYWtlcyBWOFxuICAgKiBjb2xsZWN0IGhhcmRlciBpbnN0ZWFkIG9mIGxldHRpbmcgdGhlIGtlcm5lbCBPT00ta2lsbCB0aGUgcHJvY2Vzcy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBERUZBVUxUX0hFQVBfTUJfQ1VTVE9NX1JVTk5FUiBpZiBgdXNlQ3VzdG9tR2l0aHViUnVubmVyYCxcbiAgICogb3RoZXJ3aXNlIERFRkFVTFRfSEVBUF9NQl9IT1NURURfUlVOTkVSXG4gICAqL1xuICByZWFkb25seSBub2RlSGVhcFNpemVNYj86IG51bWJlcjtcbiAgcmVhZG9ubHkgdGVycmFmb3JtUHJvdmlkZXI6IHN0cmluZztcbiAgcmVhZG9ubHkgY2RrdG5WZXJzaW9uOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCBVc2UgYGNka3RuVmVyc2lvbmAgaW5zdGVhZC4gVGhpcyBhbGlhcyBpcyBwcm92aWRlZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS5cbiAgICovXG4gIHJlYWRvbmx5IGNka3RmVmVyc2lvbj86IHN0cmluZztcbiAgcmVhZG9ubHkgY29uc3RydWN0c1ZlcnNpb246IHN0cmluZztcbiAgcmVhZG9ubHkgZm9yY2VNYWpvclZlcnNpb24/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBkZWZhdWx0cyB0byBcImNka3RuXCJcbiAgICovXG4gIHJlYWRvbmx5IG5hbWVzcGFjZT86IHN0cmluZztcbiAgLyoqXG4gICAqIGRlZmF1bHRzIHRvIFwiY2RrdG4taW9cIlxuICAgKiBwcmV2aW91c2x5IHdhcyBcImNka3RmXCIuIFVzZWQgZm9yIEdpdEh1YiBvcmcgbmFtZSBhbmQgcGFja2FnZSBzY29waW5nXG4gICAqL1xuICByZWFkb25seSBnaXRodWJOYW1lc3BhY2U/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBkZWZhdWx0cyB0byBcIklvLkNka3RuXCJcbiAgICovXG4gIHJlYWRvbmx5IG51Z2V0T3JnPzogc3RyaW5nO1xuICAvKipcbiAgICogZGVmYXVsdHMgdG8gXCJjZGt0blwiXG4gICAqL1xuICByZWFkb25seSBtYXZlbk9yZz86IHN0cmluZztcbiAgLyoqXG4gICAqIGRlZmF1bHRzIHRvIFwiaW8uJHttYXZlbk9yZ31cIlxuICAgKi9cbiAgcmVhZG9ubHkgbWF2ZW5Hcm91cElkPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHllYXIgb2YgdGhlIGNyZWF0aW9uIG9mIHRoZSByZXBvc2l0b3J5LCBmb3IgY29weXJpZ2h0IHB1cnBvc2VzLlxuICAgKiBXaWxsIGZhbGwgYmFjayB0byB0aGUgY3VycmVudCB5ZWFyIGlmIG5vdCBzcGVjaWZpZWQuXG4gICAqL1xuICByZWFkb25seSBjcmVhdGlvblllYXI/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBXaGV0aGVyIG9yIG5vdCB0aGlzIHByZWJ1aWx0IHByb3ZpZGVyIGlzIGRlcHJlY2F0ZWQuXG4gICAqIElmIHRydWUsIG5vIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHB1Ymxpc2hlZC5cbiAgICovXG4gIHJlYWRvbmx5IGlzRGVwcmVjYXRlZD86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBBbiBvcHRpb25hbCBkYXRlIHdoZW4gdGhlIHByb2plY3Qgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZGVwcmVjYXRlZCwgdG8gYmUgdXNlZCBpbiB0aGUgUkVBRE1FIHRleHQuXG4gICAqIElmIG5vIGRhdGUgaXMgcHJvdmlkZWQsIHRoZW4gdGhlIGRhdGUgb2YgdGhlIGJ1aWxkIHdpbGwgYmUgdXNlZCBieSBkZWZhdWx0LlxuICAgKi9cbiAgcmVhZG9ubHkgZGVwcmVjYXRpb25EYXRlPzogc3RyaW5nO1xuICAvKipcbiAgICogZGVmYXVsdHMgdG8gXCJIYXNoaUNvcnAsIEluYy5cIlxuICAgKi9cbiAgcmVhZG9ubHkgbGljZW5zZWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBVc2UgdHJ1c3RlZCBwdWJsaXNoaW5nIGZvciBwdWJsaXNoaW5nIHRvIHB5cGkub3JnXG4gICAqIE5lZWRzIHRvIGJlIHByZS1jb25maWd1cmVkIG9uIFB5UEkgdG8gd29yay5cbiAgICpcbiAgICogVGhlIGByZWxlYXNlX3B5cGlgIGpvYiBrZWVwcyB3aGF0ZXZlciBydW5uZXIgdGhlIHByb2plY3QgaXMgY29uZmlndXJlZCBmb3IuXG4gICAqIFB5UEksIHVubGlrZSBucG0sIGRvZXMgbm90IHJlc3RyaWN0IHRydXN0ZWQgcHVibGlzaGluZyB0byBHaXRIdWItaG9zdGVkXG4gICAqIHJ1bm5lcnMgLS0gdHJ1c3QgaXMgYm91bmQgdG8gdGhlIHdvcmtmbG93IHJlZiwgYW5kIHRoZSBPSURDIHRva2VuIGlzIG1pbnRlZFxuICAgKiBmcm9tIEFDVElPTlNfSURfVE9LRU5fUkVRVUVTVF9VUkwsIHdoaWNoIGlzIGF2YWlsYWJsZSBvbiBhbnkgcnVubmVyIHdpdGhcbiAgICogYGlkLXRva2VuOiB3cml0ZWAuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLnB5cGkub3JnL3RydXN0ZWQtcHVibGlzaGVycy9cbiAgICpcbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcHlwaVRydXN0ZWRQdWJsaXNoaW5nPzogYm9vbGVhbjtcbn1cblxuY29uc3QgZ2V0TWF2ZW5OYW1lID0gKHByb3ZpZGVyTmFtZTogc3RyaW5nKTogc3RyaW5nID0+IHtcbiAgcmV0dXJuIFtcIm51bGxcIiwgXCJyYW5kb21cIl0uaW5jbHVkZXMocHJvdmlkZXJOYW1lKVxuICAgID8gYCR7cHJvdmlkZXJOYW1lfV9wcm92aWRlcmBcbiAgICA6IHByb3ZpZGVyTmFtZS5yZXBsYWNlKC8tL2dpLCBcIl9cIik7XG59O1xuXG5jb25zdCBnaXRodWJBY3Rpb25QaW5uZWRWZXJzaW9ucyA9IHtcbiAgXCJhY3Rpb25zL2NoZWNrb3V0XCI6IFwiZGUwZmFjMmU0NTAwZGFiZTAwMDllNjcyMTRmZjVmNTQ0N2NlODNkZFwiLCAvLyB2Ni4wLjJcbiAgXCJhY3Rpb25zL2Rvd25sb2FkLWFydGlmYWN0XCI6IFwiM2U1ZjQ1YjJjZmI5MTcyMDU0YjQwODdhNDBlOGUwYjVhNTQ2MWU3Y1wiLCAvLyB2OC4wLjFcbiAgXCJhY3Rpb25zL2dpdGh1Yi1zY3JpcHRcIjogXCJlZDU5NzQxMWQ4ZjkyNDA3M2Y5OGRmYzVjNjVhMjNhMjMyNWYzNGNkXCIsIC8vIHY4LjAuMFxuICBcImFjdGlvbnMvc2V0dXAtZG90bmV0XCI6IFwiYzJmYTA5ZjRiZGU1ZWJiOWQxNzc3Y2YyODI2MmEzZWIzZGIzY2VkN1wiLCAvLyB2NS4yLjBcbiAgXCJhY3Rpb25zL3NldHVwLWdvXCI6IFwiNGEzNjAxMTIxZGQwMWQxNjI2YTFlMjNlMzcyMTFlMzI1NGMxYzA2Y1wiLCAvLyB2Ni40LjBcbiAgXCJhY3Rpb25zL3NldHVwLWphdmFcIjogXCJiZTY2NmMyZmNkMjdlYzgwOTcwM2RlYzUwZTUwOGMyZmRjN2Y2NjU0XCIsIC8vIHY1LjIuMFxuICBcImFjdGlvbnMvc2V0dXAtbm9kZVwiOiBcIjQ4YjU1YTAxMWJkYTlmNWQ2YWViNGMyZDljNzM2MmU4ZGFlNDA0MWVcIiwgLy8gdjYuNC4wXG4gIFwiYWN0aW9ucy9zZXR1cC1weXRob25cIjogXCJhMzA5ZmY4YjQyNmI1OGVjMGUyYTQ1ZjBmODY5ZDQ2ODg5ZDAyNDA1XCIsIC8vIHY2LjIuMFxuICBcImFjdGlvbnMvc3RhbGVcIjogXCJiNWQ0MWQ0ZTFkNWRjZWVhMTBlNzEwNDc4NmI3MzYyNGMxOGExOTBmXCIsIC8vIHYxMC4yLjBcbiAgXCJhY3Rpb25zL3VwbG9hZC1hcnRpZmFjdFwiOiBcIjA0M2ZiNDZkMWE5M2M3N2FhZTY1NmU3YzFjNjRhODc1ZDFmYzZhMGFcIiwgLy8gdjcuMC4xXG4gIFwiYW1hbm5uL2FjdGlvbi1zZW1hbnRpYy1wdWxsLXJlcXVlc3RcIjpcbiAgICBcIjQ4ZjI1NjI4NGJkNDZjZGFhYjEwNDhjMzcyMTM2MGU4MDgzMzVkNTBcIiwgLy8gdjYuMS4xXG4gIFwiZGVzc2FudC9sb2NrLXRocmVhZHNcIjogXCI3MjY2YTdjZTVjMWRmMDFiMWM2ZGI4NWJmOGNkODZjNzM3ZGFkYmU3XCIsIC8vIHY2LjAuMFxuICBcImhhc2hpY29ycC9zZXR1cC1jb3B5d3JpdGVcIjogXCIzMjYzOGRhMmQ0ZTgxZDU2YTA3NjRhYTE1NDc4ODJmYzRkMjA5NjM2XCIsIC8vIHYxLjEuM1xuICBcImhhc2hpY29ycC9zZXR1cC10ZXJyYWZvcm1cIjogXCI1ZThkYmYzYzZkOWRlYWY0MTkzY2E3YThmYjIzZjJhYzgzYmI2Yzg1XCIsIC8vIHY0LjAuMFxuICBcImltam9obmJvL2lzc3VlLWJvdFwiOiBcIjMxODhjNmNlMDYyNDkyMDY3MDlkM2IxZjI3NGQwZDRjNWE1MjE2MDFcIiwgLy8gdjMuNC41XG4gIFwicGV0ZXItZXZhbnMvY3JlYXRlLXB1bGwtcmVxdWVzdFwiOiBcIjVmNjk3OGZhZjA4OWQ0ZDIwYjAwYzc3NjY5ODlkMDc2YmIyZmM3ZjFcIiwgLy8gdjguMS4xXG4gIFwic2xhY2thcGkvc2xhY2stZ2l0aHViLWFjdGlvblwiOiBcIjQ1YTg4Yjk1ODFiZmFiMjU2NmRjODgxZTJjZDY2ZDMzNGU2MjFlMmNcIiwgLy8gdjMuMC4zXG4gIFwiYWN0aW9ucy9jcmVhdGUtZ2l0aHViLWFwcC10b2tlblwiOiBcIjI5ODI0ZTY5ZjU0NjEyMTMzZTc2ZjdlYWFjNzI2ZWVmNmM4NzViYWZcIiwgLy8gdjIuMi4xXG4gIC8vIHByb2plbiBlbWl0cyB0aGlzIHVucGlubmVkIGFzIGBwbnBtL2FjdGlvbi1zZXR1cEB2NWAgb25jZSBwYWNrYWdlTWFuYWdlciBpcyBwbnBtXG4gIFwicG5wbS9hY3Rpb24tc2V0dXBcIjogXCJmYzA2YmMxMjU3ZjMzOWQxZDVkOGIzYTE5YThjYWU1Mzg4YjU1MzIwXCIsIC8vIHY1XG59O1xuXG5leHBvcnQgY2xhc3MgQ2RrdG5Qcm92aWRlclByb2plY3QgZXh0ZW5kcyBjZGsuSnNpaVByb2plY3Qge1xuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBDZGt0blByb3ZpZGVyUHJvamVjdE9wdGlvbnMpIHtcbiAgICBjb25zdCBjZGt0blZlcnNpb24gPSBvcHRpb25zLmNka3RuVmVyc2lvbiA/PyBvcHRpb25zLmNka3RmVmVyc2lvbjtcbiAgICBhc3NlcnQoXG4gICAgICBjZGt0blZlcnNpb24sXG4gICAgICBcIkVpdGhlciBjZGt0blZlcnNpb24gb3IgY2RrdGZWZXJzaW9uIG11c3QgYmUgcHJvdmlkZWRcIlxuICAgICk7XG5cbiAgICBjb25zdCB7XG4gICAgICB0ZXJyYWZvcm1Qcm92aWRlcixcbiAgICAgIHdvcmtmbG93Q29udGFpbmVySW1hZ2UsXG4gICAgICBjb25zdHJ1Y3RzVmVyc2lvbixcbiAgICAgIG1pbk5vZGVWZXJzaW9uLFxuICAgICAganNpaVZlcnNpb24sXG4gICAgICB0eXBlc2NyaXB0VmVyc2lvbixcbiAgICAgIGlzRGVwcmVjYXRlZCxcbiAgICAgIGRlcHJlY2F0aW9uRGF0ZSxcbiAgICAgIC8vIFRPRE86IENvbmZpcm0gZGVmYXVsdCBBdXRob3IgTmFtZVxuICAgICAgYXV0aG9yTmFtZSA9IFwiQ0RLIFRlcnJhaW4gTWFpbnRhaW5lcnNcIixcbiAgICAgIGF1dGhvckFkZHJlc3MgPSBcImh0dHBzOi8vY2RrdG4uaW9cIixcbiAgICAgIG5hbWVzcGFjZSA9IFwiY2RrdG5cIixcbiAgICAgIGdpdGh1Yk5hbWVzcGFjZSA9IFwiY2RrdG4taW9cIixcbiAgICAgIG51Z2V0T3JnID0gXCJJby5DZGt0blwiLFxuICAgICAgbWF2ZW5PcmcgPSBcImNka3RuXCIsXG4gICAgICBucG1UcnVzdGVkUHVibGlzaGluZyxcbiAgICAgIHB5cGlUcnVzdGVkUHVibGlzaGluZyxcbiAgICB9ID0gb3B0aW9ucztcblxuICAgIGNvbnN0IFtmcXByb3ZpZGVyTmFtZSwgcHJvdmlkZXJWZXJzaW9uXSA9IHRlcnJhZm9ybVByb3ZpZGVyLnNwbGl0KFwiQFwiKTtcbiAgICBjb25zdCBwcm92aWRlck5hbWUgPSBmcXByb3ZpZGVyTmFtZS5zcGxpdChcIi9cIikucG9wKCk7XG4gICAgYXNzZXJ0KHByb3ZpZGVyTmFtZSwgYCR7dGVycmFmb3JtUHJvdmlkZXJ9IGRvZXNuJ3Qgc2VlbSB0byBiZSB2YWxpZGApO1xuICAgIGFzc2VydChcbiAgICAgICFwcm92aWRlck5hbWUuZW5kc1dpdGgoXCItZ29cIiksXG4gICAgICBcInByb3ZpZGVyTmFtZSBtYXkgbm90IGVuZCB3aXRoICctZ28nIGFzIHRoaXMgY2FuIGNvbmZsaWN0IHdpdGggcmVwb3MgZm9yIGdvIHBhY2thZ2VzXCJcbiAgICApO1xuXG4gICAgY29uc3QgbnVnZXROYW1lID0gYCR7bnVnZXRPcmd9LlByb3ZpZGVycy4ke3Bhc2NhbENhc2UocHJvdmlkZXJOYW1lKX1gO1xuICAgIGNvbnN0IG1hdmVuR3JvdXBJZCA9IG9wdGlvbnMubWF2ZW5Hcm91cElkID8/IGBpby4ke21hdmVuT3JnfWA7XG4gICAgY29uc3QgbWF2ZW5OYW1lID0gYCR7bWF2ZW5Hcm91cElkfS5wcm92aWRlcnMuJHtnZXRNYXZlbk5hbWUocHJvdmlkZXJOYW1lKX1gO1xuICAgIGNvbnN0IHJlcG9zaXRvcnkgPSBgJHtnaXRodWJOYW1lc3BhY2V9LyR7bmFtZXNwYWNlfS1wcm92aWRlci0ke3Byb3ZpZGVyTmFtZS5yZXBsYWNlKFxuICAgICAgLy0vZyxcbiAgICAgIFwiXCJcbiAgICApfWA7XG4gICAgY29uc3QgcmVwb3NpdG9yeVVybCA9IGBnaXRodWIuY29tLyR7cmVwb3NpdG9yeX1gO1xuXG4gICAgY29uc3QgcGFja2FnZUluZm86IFBhY2thZ2VJbmZvID0ge1xuICAgICAgbnBtOiB7XG4gICAgICAgIG5hbWU6IGBAJHtuYW1lc3BhY2V9L3Byb3ZpZGVyLSR7cHJvdmlkZXJOYW1lfWAsXG4gICAgICB9LFxuICAgICAgcHl0aG9uOiB7XG4gICAgICAgIC8vIGRpc3ROYW1lOiBgJHtnaXRodWJOYW1lc3BhY2V9LSR7bmFtZXNwYWNlfS1wcm92aWRlci0ke3Byb3ZpZGVyTmFtZS5yZXBsYWNlKFxuICAgICAgICBkaXN0TmFtZTogYCR7bmFtZXNwYWNlfS1wcm92aWRlci0ke3Byb3ZpZGVyTmFtZS5yZXBsYWNlKC8tL2dpLCBcIl9cIil9YCxcbiAgICAgICAgLy8gbW9kdWxlOiBgJHtnaXRodWJOYW1lc3BhY2V9XyR7bmFtZXNwYWNlfV9wcm92aWRlcl8ke3Byb3ZpZGVyTmFtZS5yZXBsYWNlKFxuICAgICAgICBtb2R1bGU6IGAke25hbWVzcGFjZX1fcHJvdmlkZXJfJHtwcm92aWRlck5hbWUucmVwbGFjZSgvLS9naSwgXCJfXCIpfWAsXG4gICAgICAgIHRydXN0ZWRQdWJsaXNoaW5nOiBweXBpVHJ1c3RlZFB1Ymxpc2hpbmcgPz8gZmFsc2UsXG4gICAgICB9LFxuICAgICAgcHVibGlzaFRvTnVnZXQ6IHtcbiAgICAgICAgZG90TmV0TmFtZXNwYWNlOiBudWdldE5hbWUsXG4gICAgICAgIHBhY2thZ2VJZDogbnVnZXROYW1lLFxuICAgICAgfSxcbiAgICAgIHB1Ymxpc2hUb01hdmVuOiB7XG4gICAgICAgIGphdmFQYWNrYWdlOiBtYXZlbk5hbWUsXG4gICAgICAgIG1hdmVuR3JvdXBJZDogbWF2ZW5Hcm91cElkLFxuICAgICAgICBtYXZlbkFydGlmYWN0SWQ6IGAke25hbWVzcGFjZX0tcHJvdmlkZXItJHtwcm92aWRlck5hbWV9YCxcbiAgICAgIH0sXG4gICAgICBwdWJsaXNoVG9Hbzoge1xuICAgICAgICBtb2R1bGVOYW1lOiBgJHtyZXBvc2l0b3J5VXJsfS1nb2AsXG4gICAgICAgIGdpdFVzZXJFbWFpbDogXCJnaXRodWItdGVhbS1jZGstdGVycmFpbkBjZGt0bi5pb1wiLFxuICAgICAgICBnaXRVc2VyTmFtZTogXCJ0ZWFtLWNkay10ZXJyYWluXCIsXG4gICAgICAgIHBhY2thZ2VOYW1lOiBwcm92aWRlck5hbWUucmVwbGFjZSgvLS9nLCBcIlwiKSxcbiAgICAgICAgLy8gSW4gb3JkZXIgdG8gdXNlIHRoZSBjb3B5d3JpdGUgYWN0aW9uLCB3ZSBuZWVkIHRvIHJlYnVpbGQgdGhlIGZ1bGwgcHJlLXB1Ymxpc2ggc3RlcHMgd29ya2Zsb3cgdW5mb3J0dW5hdGVseVxuICAgICAgICAvLyBJZiBzb21lb25lIGtub3dzIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzIG11dGF0aW9uIHdpdGggbWluaW1hbCBjdXN0b20gY29kZSwgcGxlYXNlIGRvIHNvXG4gICAgICAgIHByZVB1Ymxpc2hTdGVwczogW1xuICAgICAgICAgIC8vIE5PVEU6IHRoZSBcIlNldHVwIHBucG1cIiBzdGVwIHRoaXMgam9iIG5lZWRzIGlzIGluc2VydGVkIGJ5XG4gICAgICAgICAgLy8gR29QdWJsaXNoSm9iUGF0Y2ggYXQgc3ludGggdGltZSwgbm90IGhlcmUgLS0gaXQgaGFzIHRvIHJlYWRcbiAgICAgICAgICAvLyBgdGhpcy5wYWNrYWdlLnBucG1WZXJzaW9uYCwgd2hpY2ggZG9lcyBub3QgZXhpc3QgeWV0IGF0IHN1cGVyKCkuXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJDaGVja291dFwiLFxuICAgICAgICAgICAgdXNlczogXCJhY3Rpb25zL2NoZWNrb3V0XCIsXG4gICAgICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgICAgIHBhdGg6IFwiLnJlcG9cIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIkluc3RhbGwgRGVwZW5kZW5jaWVzXCIsXG4gICAgICAgICAgICBydW46IFwiY2QgLnJlcG8gJiYgcG5wbSBpbnN0YWxsIC0tZnJvemVuLWxvY2tmaWxlXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIkV4dHJhY3QgYnVpbGQgYXJ0aWZhY3RcIixcbiAgICAgICAgICAgIHJ1bjogXCJ0YXIgLS1zdHJpcC1jb21wb25lbnRzPTEgLXh6dmYgZGlzdC9qcy8qLnRneiAtQyAucmVwb1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJNb3ZlIGJ1aWxkIGFydGlmYWN0IG91dCBvZiB0aGUgd2F5XCIsXG4gICAgICAgICAgICBydW46IFwibXYgZGlzdCBkaXN0Lm9sZFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJDcmVhdGUgZ28gYXJ0aWZhY3RcIixcbiAgICAgICAgICAgIHJ1bjogXCJjZCAucmVwbyAmJiBucHggcHJvamVuIHBhY2thZ2U6Z29cIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiU2V0dXAgQ29weXdyaXRlIHRvb2xcIixcbiAgICAgICAgICAgIHVzZXM6IFwiaGFzaGljb3JwL3NldHVwLWNvcHl3cml0ZVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJDb3B5IGNvcHl3cml0ZSBoY2wgZmlsZVwiLFxuICAgICAgICAgICAgcnVuOiBcImNwIC5yZXBvLy5jb3B5d3JpdGUuaGNsIC5yZXBvL2Rpc3QvZ28vLmNvcHl3cml0ZS5oY2xcIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiQWRkIGhlYWRlcnMgdXNpbmcgQ29weXdyaXRlIHRvb2xcIixcbiAgICAgICAgICAgIHJ1bjogXCJjZCAucmVwby9kaXN0L2dvICYmIGNvcHl3cml0ZSBoZWFkZXJzXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIlJlbW92ZSBjb3B5d3JpdGUgaGNsIGZpbGVcIixcbiAgICAgICAgICAgIHJ1bjogXCJybSAtZiAucmVwby9kaXN0L2dvLy5jb3B5d3JpdGUuaGNsXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIlJlbW92ZSBzb21lIHRleHQgZnJvbSB0aGUgUkVBRE1FIHRoYXQgZG9lc24ndCBhcHBseSB0byBHb1wiLFxuICAgICAgICAgICAgcnVuOiBbXG4gICAgICAgICAgICAgIFwic2VkIC1pICdzLyMgQ0RLVE4gcHJlYnVpbHQgYmluZGluZ3MgZm9yLyMgQ0RLVE4gR28gYmluZGluZ3MgZm9yLycgLnJlcG8vZGlzdC9nby8qL1JFQURNRS5tZFwiLFxuICAgICAgICAgICAgICAvLyBAc2VlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vYS80OTUxMTk0OVxuICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgcHJldHRpZXIvcHJldHRpZXJcbiAgICAgICAgICAgICAgLy8gcHJldHRpZXItaWdub3JlXG4gICAgICAgICAgICAgIGBzZWQgLWkgLWUgJy8jIyAke2lzRGVwcmVjYXRlZCA/IFwiRGVwcmVjYXRlZFwiIDogXCJBdmFpbGFibGVcIn0gUGFja2FnZXMvLC8jIyMgR28vIWInIC1lICcvIyMjIEdvLyFkO3A7IHMvIyMjIEdvLyMjIEdvIFBhY2thZ2UvJyAtZSAnZCcgLnJlcG8vZGlzdC9nby8qL1JFQURNRS5tZGAsXG4gICAgICAgICAgICAgIC8vIHNlZCAtZSBpcyBibGFjayBtYWdpYyBhbmQgZm9yIHdoYXRldmVyIHJlYXNvbiB0aGUgc3RyaW5nIHJlcGxhY2UgZG9lc24ndCB3b3JrIHNvIGxldCdzIHRyeSBpdCBhZ2FpbjpcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZXR0aWVyL3ByZXR0aWVyXG4gICAgICAgICAgICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgICAgICAgICAgICBgc2VkIC1pICdzLyMjIyBHby8jIyAke2lzRGVwcmVjYXRlZCA/IFwiRGVwcmVjYXRlZFwiIDogXCJHb1wifSBQYWNrYWdlLycgLnJlcG8vZGlzdC9nby8qL1JFQURNRS5tZGAsXG4gICAgICAgICAgICAgIC8vIEp1c3Qgc3RyYWlnaHQgdXAgZGVsZXRlIHRoZXNlIGZ1bGwgbGluZXMgYW5kIGV2ZXJ5dGhpbmcgaW4gYmV0d2VlbiB0aGVtOlxuICAgICAgICAgICAgICBcInNlZCAtaSAtZSAnL0FQSS50eXBlc2NyaXB0Lm1kLywvWW91IGNhbiBhbHNvIHZpc2l0IGEgaG9zdGVkIHZlcnNpb24vIWInIC1lICdkJyAucmVwby9kaXN0L2dvLyovUkVBRE1FLm1kXCIsXG4gICAgICAgICAgICAgIGBzZWQgLWkgJ3N8RmluZCBhdXRvLWdlbmVyYXRlZCBkb2NzIGZvciB0aGlzIHByb3ZpZGVyIGhlcmU6fEZpbmQgYXV0by1nZW5lcmF0ZWQgZG9jcyBmb3IgdGhpcyBwcm92aWRlciBbaGVyZV0oaHR0cHM6Ly8ke3JlcG9zaXRvcnlVcmx9L2Jsb2IvbWFpbi9kb2NzL0FQSS5nby5tZCkufCcgLnJlcG8vZGlzdC9nby8qL1JFQURNRS5tZGAsXG4gICAgICAgICAgICAgIC8vIEp1c3Qgc3RyYWlnaHQgdXAgZGVsZXRlIHRoZXNlIGZ1bGwgbGluZXMgYW5kIGV2ZXJ5dGhpbmcgaW4gYmV0d2VlbiB0aGVtOlxuICAgICAgICAgICAgICBcInNlZCAtaSAtZSAnLyMjIyBQcm92aWRlciBWZXJzaW9uLywvVGhlIHByb3ZpZGVyIHZlcnNpb24gY2FuIGJlIGFkanVzdGVkLyFiJyAtZSAnZCcgLnJlcG8vZGlzdC9nby8qL1JFQURNRS5tZFwiLFxuICAgICAgICAgICAgXS5qb2luKFwiXFxuXCIpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJDb3B5IHRoZSBSRUFETUUgZmlsZSB0byB0aGUgcGFyZW50IGRpcmVjdG9yeVwiLFxuICAgICAgICAgICAgcnVuOiBcImNwIC5yZXBvL2Rpc3QvZ28vKi9SRUFETUUubWQgLnJlcG8vZGlzdC9nby9SRUFETUUubWRcIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiQ29sbGVjdCBnbyBBcnRpZmFjdFwiLFxuICAgICAgICAgICAgcnVuOiBcIm12IC5yZXBvL2Rpc3QgZGlzdFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9LFxuICAgIH07XG5cbiAgICBjb25zdCB3b3JrZmxvd1J1bnNPbiA9IG9wdGlvbnMudXNlQ3VzdG9tR2l0aHViUnVubmVyXG4gICAgICA/IFtcImRlcG90LXVidW50dS0yNC4wNC04XCJdIC8vIDggY29yZSwgMzIgR0JcbiAgICAgIDogW1widWJ1bnR1LWxhdGVzdFwiXTsgLy8gNyBHQlxuXG4gICAgc3VwZXIoe1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGF1dGhvckFkZHJlc3MsXG4gICAgICBhdXRob3JOYW1lLFxuICAgICAgbWluTm9kZVZlcnNpb24sXG4gICAgICB3b3JrZmxvd0NvbnRhaW5lckltYWdlLFxuICAgICAgd29ya2Zsb3dSdW5zT24sXG4gICAgICBsaWNlbnNlZDogZmFsc2UsIC8vIHdlIGRvIHN1cHBseSBvdXIgb3duIGxpY2Vuc2UgZmlsZSB3aXRoIGEgY3VzdG9tIGhlYWRlclxuICAgICAgcmVsZWFzZVRvTnBtOiB0cnVlLFxuICAgICAgbnBtVHJ1c3RlZFB1Ymxpc2hpbmc6IG5wbVRydXN0ZWRQdWJsaXNoaW5nID8/IGZhbHNlLFxuICAgICAgbmFtZTogcGFja2FnZUluZm8ubnBtLm5hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogYFByZWJ1aWx0ICR7cHJvdmlkZXJOYW1lfSBQcm92aWRlciBmb3IgQ0RLIFRlcnJhaW4gKGNka3RuKWAsXG4gICAgICBrZXl3b3JkczogW1xuICAgICAgICBcImNka3RuXCIsXG4gICAgICAgIFwiY2RrLXRlcnJhaW5cIixcbiAgICAgICAgXCJjZGt0ZlwiLFxuICAgICAgICBcInRlcnJhZm9ybVwiLFxuICAgICAgICBcIm9wZW50b2Z1XCIsXG4gICAgICAgIFwiY2RrXCIsXG4gICAgICAgIFwicHJvdmlkZXJcIixcbiAgICAgICAgcHJvdmlkZXJOYW1lLFxuICAgICAgXSxcbiAgICAgIHNhbXBsZUNvZGU6IGZhbHNlLFxuICAgICAgamVzdDogZmFsc2UsXG4gICAgICBhdXRob3JPcmdhbml6YXRpb246IHRydWUsXG4gICAgICBkZWZhdWx0UmVsZWFzZUJyYW5jaDogXCJtYWluXCIsXG4gICAgICByZXBvc2l0b3J5OiBgaHR0cHM6Ly9naXRodWIuY29tLyR7cmVwb3NpdG9yeX0uZ2l0YCxcbiAgICAgIGVzbGludDogZmFsc2UsXG4gICAgICBwYWNrYWdlTWFuYWdlcjogTm9kZVBhY2thZ2VNYW5hZ2VyLlBOUE0sXG4gICAgICAvLyBQcm92aWRlciByZXBvcyBydW4ganNpaS1wYWNtYWsgb3ZlciBidW5kbGVkIGRlcHMgZXhhY3RseSBhcyB0aGlzIHByb2plY3RcbiAgICAgIC8vIGRvZXMsIHNvIHRoZXkgbmVlZCB0aGUgaG9pc3RlZCBsaW5rZXIgdG9vIC0tIHNlZSB0aGUgbm90ZSBpbiAucHJvamVucmMudHMuXG4gICAgICAvLyBJdCBtdXN0IGJlIGluIHBucG0td29ya3NwYWNlLnlhbWwsIG5vdCAubnBtcmMsIG9yIHBucG0gMTEgaWdub3JlcyBpdC5cbiAgICAgIHBucG1PcHRpb25zOiB7XG4gICAgICAgIHdvcmtzcGFjZVlhbWxPcHRpb25zOiB7XG4gICAgICAgICAgbm9kZUxpbmtlcjogUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFOb2RlTGlua2VyLkhPSVNURUQsXG4gICAgICAgICAgYXVkaXRDb25maWc6IHtcbiAgICAgICAgICAgIC8vIEdIU0EtdmZqNy04Y2p3LXA2eG0gKGJyYWNlcyBzdGFjayBleGhhdXN0aW9uKSBoYXMgbm8gcGF0Y2hlZCB2ZXJzaW9uXG4gICAgICAgICAgICAvLyBhdCBhbGwgLS0gYWZmZWN0ZWQgaXMgXCI8PTMuMC4zXCIgYW5kIDMuMC4zIGlzIHRoZSBuZXdlc3QgcmVsZWFzZS4gUmVhY2hlZFxuICAgICAgICAgICAgLy8gdmlhIGpzaWktZG9jZ2VuID4gZmFzdC1nbG9iID4gbWljcm9tYXRjaDsgZGV2IHRvb2xpbmcsIG5ldmVyIHNoaXBwZWQuXG4gICAgICAgICAgICBpZ25vcmVHaHNhczogW1wiR0hTQS12Zmo3LThjanctcDZ4bVwiXSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIC8vIExldCBmaXJzdC1wYXJ0eSByZWxlYXNlcyBza2lwIHRoZSBgY29vbGRvd25gIGJlbG93IC0tIHNlZSB0aGUgbm90ZSBvblxuICAgICAgICAgIC8vIHRoZSBjb25zdGFudC4gVGhpcmQtcGFydHkgZGVwcyBhcmUgdW5hZmZlY3RlZC5cbiAgICAgICAgICBtaW5pbXVtUmVsZWFzZUFnZUV4Y2x1ZGU6IE1JTklNVU1fUkVMRUFTRV9BR0VfRVhDTFVERSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICBkZXBzVXBncmFkZTogIWlzRGVwcmVjYXRlZCxcbiAgICAgIGRlcHNVcGdyYWRlT3B0aW9uczoge1xuICAgICAgICBjb29sZG93bjogQ09PTERPV05fREFZUyxcbiAgICAgICAgd29ya2Zsb3dPcHRpb25zOiB7XG4gICAgICAgICAgbGFiZWxzOiBbXCJhdXRvbWVyZ2VcIiwgXCJhdXRvLWFwcHJvdmVcIiwgXCJkZXBlbmRlbmNpZXNcIl0sXG4gICAgICAgICAgc2NoZWR1bGU6IFVwZ3JhZGVEZXBlbmRlbmNpZXNTY2hlZHVsZS5XRUVLTFksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgYXVkaXREZXBzOiAhaXNEZXByZWNhdGVkLFxuICAgICAgYXVkaXREZXBzT3B0aW9uczoge1xuICAgICAgICBsZXZlbDogQVVESVRfTEVWRUwsXG4gICAgICAgIHJ1bk9uOiBcImJ1aWxkXCIsXG4gICAgICB9LFxuICAgICAgcHVibGlzaFRvUHlwaTogcGFja2FnZUluZm8ucHl0aG9uLFxuICAgICAgcHVibGlzaFRvTnVnZXQ6IHBhY2thZ2VJbmZvLnB1Ymxpc2hUb051Z2V0LFxuICAgICAgcHVibGlzaFRvTWF2ZW46IHBhY2thZ2VJbmZvLnB1Ymxpc2hUb01hdmVuLFxuICAgICAgcHVibGlzaFRvR286IHBhY2thZ2VJbmZvLnB1Ymxpc2hUb0dvLFxuICAgICAgcmVsZWFzZUZhaWx1cmVJc3N1ZTogdHJ1ZSxcbiAgICAgIHBlZXJEZXBlbmRlbmN5T3B0aW9uczoge1xuICAgICAgICBwaW5uZWREZXZEZXBlbmRlbmN5OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgICB3b3JrZmxvd0dpdElkZW50aXR5OiB7XG4gICAgICAgIG5hbWU6IFwidGVhbS1jZGstdGVycmFpblwiLFxuICAgICAgICBlbWFpbDogXCJnaXRodWItdGVhbS1jZGstdGVycmFpbkBjZGt0bi5pb1wiLFxuICAgICAgfSxcbiAgICAgIG1pbk1ham9yVmVyc2lvbjogTUlOX01BSk9SX1ZFUlNJT04sXG4gICAgICBzdGFsZTogdHJ1ZSxcbiAgICAgIHN0YWxlT3B0aW9uczoge1xuICAgICAgICBpc3N1ZXM6IHtcbiAgICAgICAgICBzdGFsZUxhYmVsOiBcInN0YWxlXCIsXG4gICAgICAgICAgZGF5c0JlZm9yZVN0YWxlOiA0NSxcbiAgICAgICAgICBzdGFsZU1lc3NhZ2U6XG4gICAgICAgICAgICBcIjQ1IGRheXMgaGF2ZSBwYXNzZWQgc2luY2UgdGhpcyBpc3N1ZSB3YXMgb3BlbmVkLCBhbmQgSSBhc3N1bWUgb3RoZXIgcHVibGlzaGVzIGhhdmUgc3VjY2VlZGVkIGluIHRoZSBtZWFudGltZS4gXCIgK1xuICAgICAgICAgICAgXCJJZiBubyBvbmUgcmVtb3ZlcyB0aGUgYHN0YWxlYCBsYWJlbCBvciBjb21tZW50cywgSSdtIGdvaW5nIHRvIGF1dG8tY2xvc2UgdGhpcyBpc3N1ZSBpbiAxNCBkYXlzLlwiLFxuICAgICAgICAgIGRheXNCZWZvcmVDbG9zZTogMTQsXG4gICAgICAgICAgY2xvc2VNZXNzYWdlOlxuICAgICAgICAgICAgXCIyIG1vbnRocyBoYXZlIHBhc3NlZCwgc28gSSdtIGNsb3NpbmcgdGhpcyBpc3N1ZSB3aXRoIHRoZSBhc3N1bXB0aW9uIHRoYXQgb3RoZXIgcHVibGlzaGVzIGhhdmUgc3VjY2VlZGVkIGluIHRoZSBtZWFudGltZS5cIixcbiAgICAgICAgfSxcbiAgICAgICAgcHVsbFJlcXVlc3Q6IHtcbiAgICAgICAgICBzdGFsZUxhYmVsOiBcInN0YWxlXCIsXG4gICAgICAgICAgZGF5c0JlZm9yZVN0YWxlOiAxLFxuICAgICAgICAgIHN0YWxlTWVzc2FnZTogYENsb3NpbmcgdGhpcyBQUiwgaWYgaXQgaGFzIG5vdCBtZXJnZWQgdGhlcmUgaXMgbW9zdCBsaWtlbHkgYSBDSSBvciBDREtUTiBpc3N1ZSBwcmV2ZW50aW5nIGl0IGZyb20gbWVyZ2luZy4gSWYgdGhpcyBoYXMgYmVlbiBhIG1hbnVhbCBQUiwgcGxlYXNlIHJlb3BlbiBpdCBhbmQgYWRkIHRoZSBcXGBuby1hdXRvLWNsb3NlXFxgIGxhYmVsIHRvIHByZXZlbnQgdGhpcyBmcm9tIGhhcHBlbmluZyBhZ2Fpbi5gLFxuICAgICAgICAgIGRheXNCZWZvcmVDbG9zZTogMCxcbiAgICAgICAgICBleGVtcHRMYWJlbHM6IFtcIm5vLWF1dG8tY2xvc2VcIl0sXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgcHVsbFJlcXVlc3RUZW1wbGF0ZTogZmFsc2UsXG4gICAgICBkb2NnZW46IGZhbHNlLFxuICAgICAgZ2l0aHViT3B0aW9uczoge1xuICAgICAgICBwcm9qZW5DcmVkZW50aWFsczogZ2l0aHViLkdpdGh1YkNyZWRlbnRpYWxzLmZyb21BcHAoKSxcbiAgICAgICAgLy8gcHJvamVuID49MC4xMDAgbW92ZWQgdGhlIGBtZXJnaWZ5YCBwcm9qZWN0IG9wdGlvbiB1bmRlciBnaXRodWJPcHRpb25zXG4gICAgICAgIG1lcmdpZnk6IGZhbHNlLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkRGV2RGVwcyhcbiAgICAgIFwiZG90LXByb3BAXjUuMi4wXCIsXG4gICAgICAvLyBeMS4xLjAgY291bGQgbmV2ZXIgbGVhdmUgdGhlIDEueCBsaW5lLCB3aGljaCBkcmFncyBpbiBhbiBvbGRcbiAgICAgIC8vIEBhY3Rpb25zL2h0dHAtY2xpZW50IGFuZCB3aXRoIGl0IHVuZGljaSA8Ni4yNC4wIC0tIHRocmVlIGhpZ2ggYWR2aXNvcmllc1xuICAgICAgLy8gKEdIU0EtdnJtNi04dnB2LXF2OHEsIEdIU0EtdjlwOS1oZmoyLWhjdzgsIGFuZCB0aGUgPDYuMjcuMCBmcmFnbWVudC1jb3VudFxuICAgICAgLy8gRG9TKS4gMy54IGRlcGVuZHMgb24gQGFjdGlvbnMvaHR0cC1jbGllbnQgXjQgLT4gdW5kaWNpIF42LjIzLjAsIHJlc29sdmluZ1xuICAgICAgLy8gdG8gNi4yOC4wLiBOT1RFOiAzLnggaXMgRVNNLW9ubHksIHNvIGNoZWNrLWZvci11cGdyYWRlcy5qcyBsb2FkcyBpdCB3aXRoIGFcbiAgICAgIC8vIGR5bmFtaWMgaW1wb3J0IHJhdGhlciB0aGFuIGByZXF1aXJlYC5cbiAgICAgIFwiQGFjdGlvbnMvY29yZUBeMy4wLjBcIixcbiAgICAgIFwiQGFjdGlvbi12YWxpZGF0b3IvY29yZVwiLFxuICAgICAgXCJAYWN0aW9uLXZhbGlkYXRvci9jbGlcIlxuICAgICk7XG5cbiAgICAvLyBEZWZhdWx0IG1lbW9yeSBpcyA3R0I6IGh0dHBzOi8vZG9jcy5naXRodWIuY29tL2VuL2FjdGlvbnMvdXNpbmctZ2l0aHViLWhvc3RlZC1ydW5uZXJzL2Fib3V0LWdpdGh1Yi1ob3N0ZWQtcnVubmVycyNzdXBwb3J0ZWQtcnVubmVycy1hbmQtaGFyZHdhcmUtcmVzb3VyY2VzXG4gICAgLy8gQ3VzdG9tIFJ1bm5lcnMgd2UgdXNlIGhhdmUgMzJHQiBvZiBtZW1vcnkuXG4gICAgLy9cbiAgICAvLyBUaGUgY3VzdG9tLXJ1bm5lciBjZWlsaW5nIGhhcyB0byBzaXQgYmVsb3cgdGhlIG1lbW9yeSBhIGpvYiBjYW4gQUNUVUFMTFlcbiAgICAvLyBnZXQsIG9yIFY4IG5ldmVyIGZlZWxzIHByZXNzdXJlIHRvIGNvbGxlY3QgYW5kIHRoZSBrZXJuZWwgT09NLWtpbGxzIHRoZVxuICAgIC8vIHByb2Nlc3MgZmlyc3QuIFRoZSBzaWduYXR1cmUgaXMgZGlzdGluY3RpdmU6IHRoZSBzdGVwIHNpdHMgaW5fcHJvZ3Jlc3Mgd2l0aFxuICAgIC8vIGEgbnVsbCBjb21wbGV0ZWRBdCAoa2lsbGVkIHByb2Nlc3MsIG5vdCBhIG5vbi16ZXJvIGV4aXQpIGFuZCB0aGUgam9iIGJ1cm5zXG4gICAgLy8gfjEyLTEzbSBpbnN0ZWFkIG9mIHRoZSB+NG0gYSBoZWFsdGh5IHJ1biB0YWtlcy4gU2VlICMzNC5cbiAgICAvL1xuICAgIC8vIFwiQmVsb3cgYXZhaWxhYmxlIFJBTVwiIGlzIG5vdCB0aGUgc2FtZSBhcyBcImJlbG93IHRoZSBhZHZlcnRpc2VkIFJBTVwiLCB3aGljaFxuICAgIC8vIGlzIHdoYXQgdGhlIGZpcnN0IHR3byBhdHRlbXB0cyBhdCB0aGlzIG51bWJlciBnb3Qgd3JvbmcuIGRlcG90LXVidW50dS0yNC4wNC04XG4gICAgLy8gYWR2ZXJ0aXNlcyAzMkdCLCBidXQgRGVwb3QgcmVzZXJ2ZXMgOEdCIG9mIGl0IGZvciB0aGUgaW4tbWVtb3J5IGRpc2tcbiAgICAvLyBhY2NlbGVyYXRvciAoXCJhIHBvcnRpb24gb2YgdGhlIG1lbW9yeSBvbiB0aGUgcnVubmVyIGhvc3QgZm9yIGEgZGlza1xuICAgIC8vIGFjY2VsZXJhdG9yLCBiYWNrZWQgYnkgYSBSQU0gZGlza1wiKSwgbGVhdmluZyB+MjRHQiB1c2FibGUgLS0gYW5kIHRoZVxuICAgIC8vIHdvcmtzcGFjZSBsaXZlcyBvbiB0aGF0IFJBTSBkaXNrLCBzbyB0aGUgZ2VuZXJhdGVkIGJpbmRpbmdzIHNxdWVlemUgdGhlIHNhbWVcbiAgICAvLyBwb29sIHBhY21hayBpcyBncm93aW5nIGludG8uIDMxNzQ0ICh+OTclIG9mIDMyR0IpIGFuZCB0aGVuIDI4NjcyICh+OTAlKSBib3RoXG4gICAgLy8gc2F0IEFCT1ZFIHRoYXQgcmVhbCBjZWlsaW5nLCBzbyBsb3dlcmluZyBpdCB0aGUgZmlyc3QgdGltZSBjaGFuZ2VkIG5vdGhpbmc6XG4gICAgLy8gY2RrdG4tcHJvdmlkZXItZGF0YWRvZyBkaWVkIGF0IDEybTIxcyBvbiAzMTc0NCBhbmQgYWdhaW4gYXQgMTJtMjNzLzEybTQwcyBvblxuICAgIC8vIDI4NjcyLCBzYW1lIHNpbGVudCBraWxsLlxuICAgIC8vXG4gICAgLy8gRW1waXJpY2FsbHk6IGRhdGFkb2cncyBwYWNrYWdlOmdvLCB3aGljaCBoYWQgbmV2ZXIgb25jZSBjb21wbGV0ZWQsIGZpbmlzaGVkXG4gICAgLy8gaXRzIGBDcmVhdGUgZ28gYXJ0aWZhY3RgIHN0ZXAgaW4gM20wMXMgYXQgMTYzODQgKHJ1biAzMDgyNDc4NzI5MSkuIDIwNDgwXG4gICAgLy8ga2VlcHMgfjRHQiBiZWxvdyB0aGUgfjI0R0IgdXNhYmxlIGxpbmUgd2hpbGUgZ2l2aW5nIHBhY21hayBtb3JlIHJvb20gdGhhbiB0aGVcbiAgICAvLyB2ZXJpZmllZC1nb29kIHZhbHVlLiBUaGlzIGlzIGEgY2VpbGluZywgbm90IGEgcmVzZXJ2YXRpb24gLS0gcHJvdmlkZXJzIHRoYXRcbiAgICAvLyBuZXZlciBhcHByb2FjaCBpdCBhcmUgdW5hZmZlY3RlZCwgc28gaXQgY29zdHMgbm90aGluZyB0byBsZWF2ZSBoZWFkcm9vbSBoZXJlLlxuICAgIGNvbnN0IERFRkFVTFRfSEVBUF9NQl9DVVNUT01fUlVOTkVSID0gMjA0ODA7XG4gICAgY29uc3QgREVGQVVMVF9IRUFQX01CX0hPU1RFRF9SVU5ORVIgPSA2NjU2OyAvLyA2LjVHQiBvZiA3R0JcblxuICAgIC8vIGBub2RlSGVhcFNpemVNYmAgaXMgcHVibGljIEFQSSBhbmQsIHZpYSBqc2lpLCByZWFjaGFibGUgZnJvbSBQeXRob24sIEdvLFxuICAgIC8vIEphdmEgYW5kIC5ORVQgd2hlcmUgYG51bWJlcmAgaXMgZXZlbiBsb29zZXIgdGhhbiBUeXBlU2NyaXB0J3MuIE5vZGVcbiAgICAvLyByZWZ1c2VzIHRvIHN0YXJ0IG9uIGEgbWFsZm9ybWVkIGNlaWxpbmcgLS0gYC0tbWF4LW9sZC1zcGFjZS1zaXplPTEuNWBcbiAgICAvLyBhbmQgYD1OYU5gIGFyZSBib3RoIHJlamVjdGVkIGJlZm9yZSBhbnkgc2NyaXB0IHJ1bnMgLS0gYW5kIGAwYCBzaWxlbnRseVxuICAgIC8vIHJlc3RvcmVzIFY4J3MgZGVmYXVsdCBpbnN0ZWFkIG9mIGFwcGx5aW5nIGEgbGltaXQuIEludGVycG9sYXRpbmcgYW5cbiAgICAvLyB1bmNoZWNrZWQgdmFsdWUgd291bGQgdGhlcmVmb3JlIGJyZWFrIGV2ZXJ5IHRhc2sgaW4gdGhlIGdlbmVyYXRlZCByZXBvLFxuICAgIC8vIHN1cmZhY2luZyBhcyBhbiBpbnNjcnV0YWJsZSBzdGFydHVwIGZhaWx1cmUgaW4gQ0kgcmF0aGVyIHRoYW4gaGVyZS5cbiAgICBhc3NlcnQoXG4gICAgICBvcHRpb25zLm5vZGVIZWFwU2l6ZU1iID09PSB1bmRlZmluZWQgfHxcbiAgICAgICAgKE51bWJlci5pc1NhZmVJbnRlZ2VyKG9wdGlvbnMubm9kZUhlYXBTaXplTWIpICYmXG4gICAgICAgICAgb3B0aW9ucy5ub2RlSGVhcFNpemVNYiA+IDApLFxuICAgICAgYG5vZGVIZWFwU2l6ZU1iIG11c3QgYmUgYSBwb3NpdGl2ZSBzYWZlIGludGVnZXIgKE1pQiksIGdvdCAke29wdGlvbnMubm9kZUhlYXBTaXplTWJ9YFxuICAgICk7XG5cbiAgICBjb25zdCBtYXhPbGRTcGFjZVNpemUgPSBTdHJpbmcoXG4gICAgICBvcHRpb25zLm5vZGVIZWFwU2l6ZU1iID8/XG4gICAgICAgIChvcHRpb25zLnVzZUN1c3RvbUdpdGh1YlJ1bm5lclxuICAgICAgICAgID8gREVGQVVMVF9IRUFQX01CX0NVU1RPTV9SVU5ORVJcbiAgICAgICAgICA6IERFRkFVTFRfSEVBUF9NQl9IT1NURURfUlVOTkVSKVxuICAgICk7XG5cbiAgICAvLyBHb2xhbmcgbmVlZHMgbW9yZSBtZW1vcnkgdG8gYnVpbGRcbiAgICB0aGlzLnRhc2tzLmFkZEVudmlyb25tZW50KFxuICAgICAgXCJOT0RFX09QVElPTlNcIixcbiAgICAgIGAtLW1heC1vbGQtc3BhY2Utc2l6ZT0ke21heE9sZFNwYWNlU2l6ZX1gXG4gICAgKTtcblxuICAgIHRoaXMudGFza3MuYWRkRW52aXJvbm1lbnQoXCJDSEVDS1BPSU5UX0RJU0FCTEVcIiwgXCIxXCIpO1xuXG4gICAgY29uc3QgdmFsaWRhdGVUYXNrID0gdGhpcy5hZGRUYXNrKFwidmFsaWRhdGUtd29ya2Zsb3dzXCIsIHtcbiAgICAgIGV4ZWM6IGBmaW5kIC4vLmdpdGh1Yi93b3JrZmxvd3MgLXR5cGUgZiAtbmFtZSBcIioueW1sXCIgLXByaW50MCB8IHhhcmdzIC0wIC1uIDEgbnB4IGFjdGlvbi12YWxpZGF0b3JgLFxuICAgIH0pO1xuICAgIHZhbGlkYXRlVGFzay5kZXNjcmlwdGlvbiA9XG4gICAgICBcIkxpbnQgdGhlIFlBTUwgZmlsZXMgZ2VuZXJhdGVkIGJ5IFByb2plbiB0byBkZWZpbmUgR2l0SHViIEFjdGlvbnMgYW5kIFdvcmtmbG93cywgY2hlY2tpbmcgdGhlbSBhZ2FpbnN0IHB1Ymxpc2hlZCBKU09OIHNjaGVtYXNcIjtcbiAgICB0aGlzLnBvc3RDb21waWxlVGFzay5zcGF3bih2YWxpZGF0ZVRhc2spO1xuXG4gICAgdGhpcy5wYWNrYWdlLmFkZFBhY2thZ2VSZXNvbHV0aW9ucyhcIkB0eXBlcy95YXJnc0AxNy4wLjEzXCIpO1xuXG4gICAgY29uc3Qgc2V0U2FmZURpcmVjdG9yeSA9IHtcbiAgICAgIG5hbWU6IFwiU2V0IGdpdCBjb25maWcgc2FmZS5kaXJlY3RvcnlcIixcbiAgICAgIHJ1bjogXCJnaXQgY29uZmlnIC0tZ2xvYmFsIC0tYWRkIHNhZmUuZGlyZWN0b3J5ICQocHdkKVwiLFxuICAgIH07XG5cbiAgICAoKHRoaXMuYnVpbGRXb3JrZmxvdyBhcyBhbnkpLnByZUJ1aWxkU3RlcHMgYXMgSm9iU3RlcFtdKS5wdXNoKFxuICAgICAgc2V0U2FmZURpcmVjdG9yeVxuICAgICk7XG4gICAgKHRoaXMucmVsZWFzZSBhcyBhbnkpLmRlZmF1bHRCcmFuY2gud29ya2Zsb3cuam9icy5yZWxlYXNlLnN0ZXBzLnNwbGljZShcbiAgICAgIDEsXG4gICAgICAwLFxuICAgICAgc2V0U2FmZURpcmVjdG9yeVxuICAgICk7XG5cbiAgICAvLyBhbHdheXMgcHVibGlzaCBhIG5ldyBHaXRIdWIgcmVsZWFzZSwgZXZlbiB3aGVuIHB1Ymxpc2hpbmcgdG8gYSBwYXJ0aWN1bGFyIHBhY2thZ2UgbWFuYWdlciBmYWlsc1xuICAgIGNvbnN0IHJlbGVhc2VXb3JrZmxvdyA9IHRoaXMudHJ5RmluZE9iamVjdEZpbGUoXG4gICAgICBcIi5naXRodWIvd29ya2Zsb3dzL3JlbGVhc2UueW1sXCJcbiAgICApO1xuICAgIHJlbGVhc2VXb3JrZmxvdz8uYWRkT3ZlcnJpZGUoXCJqb2JzLnJlbGVhc2VfZ2l0aHViLm5lZWRzXCIsIFwicmVsZWFzZVwiKTtcblxuICAgIC8vIFRydXN0ZWQgcHVibGlzaGluZyByZXF1aXJlcyBucG0gPj0xMS41LjEgd2hpY2ggc2hpcHMgd2l0aCBOb2RlIDI0XG4gICAgaWYgKG5wbVRydXN0ZWRQdWJsaXNoaW5nKSB7XG4gICAgICB0aGlzLmdpdGh1YlxuICAgICAgICA/LnRyeUZpbmRXb3JrZmxvdyhcInJlbGVhc2VcIilcbiAgICAgICAgPy5maWxlPy5wYXRjaChcbiAgICAgICAgICBKc29uUGF0Y2gucmVwbGFjZShcbiAgICAgICAgICAgIFwiL2pvYnMvcmVsZWFzZV9ucG0vc3RlcHMvMC93aXRoL25vZGUtdmVyc2lvblwiLFxuICAgICAgICAgICAgXCIyNC54XCJcbiAgICAgICAgICApXG4gICAgICAgICk7XG5cbiAgICAgIC8vIE5QTSBPSURDIGRvZXNuJ3Qgc3VwcG9ydCBzZWxmLWhvc3RlZCBydW5uZXJzIHlldFxuICAgICAgdGhpcy5naXRodWJcbiAgICAgICAgPy50cnlGaW5kV29ya2Zsb3coXCJyZWxlYXNlXCIpXG4gICAgICAgID8uZmlsZT8ucGF0Y2goXG4gICAgICAgICAgSnNvblBhdGNoLnJlcGxhY2UoXCIvam9icy9yZWxlYXNlX25wbS9ydW5zLW9uXCIsIFwidWJ1bnR1LWxhdGVzdFwiKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8vIE5PVEU6IHJlbGVhc2VfcHlwaSBkZWxpYmVyYXRlbHkgc3RheXMgb24gd2hhdGV2ZXIgcnVubmVyIHRoZSBwcm9qZWN0IGlzXG4gICAgLy8gY29uZmlndXJlZCBmb3IuIFVubGlrZSBucG0sIFB5UEkgcGxhY2VzIG5vIHJlc3RyaWN0aW9uIG9uIHRoZSBydW5uZXJcbiAgICAvLyBlbnZpcm9ubWVudDogcHVibGliLXB5cGkgbWludHMgaXRzIHRva2VuIHdpdGggYHB5dGhvbjMgLW0gaWQgcHlwaWAgYWdhaW5zdFxuICAgIC8vIEFDVElPTlNfSURfVE9LRU5fUkVRVUVTVF9VUkwsIHdoaWNoIEdpdEh1YiBpbmplY3RzIG9uIGFueSBydW5uZXIgZ2l2ZW5cbiAgICAvLyBgaWQtdG9rZW46IHdyaXRlYCwgYW5kIFB5UEkncyB0cnVzdCBpcyBib3VuZCB0byB0aGUgd29ya2Zsb3cgcmVmLCBub3QgdGhlXG4gICAgLy8gcnVubmVyLiBGb3JjaW5nIHRoaXMgam9iIG9udG8gYSBob3N0ZWQgcnVubmVyIHdvdWxkIGFsc28gc3RyYW5kIGl0IHdpdGggdGhlXG4gICAgLy8gMjBHQiBOT0RFX09QVElPTlMgaGVhcCBjZWlsaW5nIHRoYXQgdXNlQ3VzdG9tR2l0aHViUnVubmVyIHdyaXRlcyBpbnRvXG4gICAgLy8gLnByb2plbi90YXNrcy5qc29uLCBvbiBhIGJveCB3aXRoIGZhciBsZXNzIFJBTSB0aGFuIHRoYXQgLS0gYW5kIHVubGlrZVxuICAgIC8vIHBhY2thZ2U6anMsIHBhY2thZ2U6cHl0aG9uIGlzIGEgcmVhbCBqc2lpLXBhY21hayB0cmFuc3BpbGUuXG5cbiAgICAvLyBlbnN1cmUgd2UgZG9uJ3QgZmFpbCBpZiB0aGUgcmVsZWFzZSBmaWxlIGlzIG5vdCBwcmVzZW50XG4gICAgY29uc3QgY2hlY2tFeGlzdGluZ1RhZ1N0ZXAgPSAoXG4gICAgICB0aGlzLnJlbGVhc2UgYXMgYW55XG4gICAgKS5kZWZhdWx0QnJhbmNoLndvcmtmbG93LmpvYnMucmVsZWFzZS5zdGVwcy5maW5kKFxuICAgICAgKHM6IG9iamVjdCkgPT4gXCJpZFwiIGluIHMgJiYgcy5pZCA9PT0gXCJjaGVja190YWdfZXhpc3RzXCJcbiAgICApO1xuICAgIGNvbnN0IG9sZEV4aXN0aW5nVGFnUnVuOiBzdHJpbmcgPSBjaGVja0V4aXN0aW5nVGFnU3RlcC5ydW47XG4gICAgcHJldHR5QXNzZXJ0RXF1YWwoXG4gICAgICBvbGRFeGlzdGluZ1RhZ1J1bi5zcGxpdChcIlxcblwiKVswXSxcbiAgICAgIFwiVEFHPSQoY2F0IGRpc3QvcmVsZWFzZXRhZy50eHQpXCIsXG4gICAgICBcInJlbGVhc2Ugc3RlcCBjaGFuZ2VkLCBwbGVhc2UgY2hlY2sgaWYgdGhlIHdvcmthcm91bmQgc3RpbGwgd29ya3MhXCJcbiAgICApO1xuICAgIGNoZWNrRXhpc3RpbmdUYWdTdGVwLnJ1biA9IGBpZiBbICEgLWYgZGlzdC9yZWxlYXNldGFnLnR4dCBdOyB0aGVuIChlY2hvIFwiZXhpc3RzPXRydWVcIiA+PiAkR0lUSFVCX09VVFBVVCkgJiYgZXhpdCAwOyBmaVxcbiR7b2xkRXhpc3RpbmdUYWdSdW59YDtcblxuICAgIGlmICghaXNEZXByZWNhdGVkKSB7XG4gICAgICBjb25zdCB7IHVwZ3JhZGUsIHByIH0gPSAodGhpcy51cGdyYWRlV29ya2Zsb3cgYXMgYW55KS53b3JrZmxvd3NbMF0uam9icztcbiAgICAgIHVwZ3JhZGUuc3RlcHMuc3BsaWNlKDEsIDAsIHNldFNhZmVEaXJlY3RvcnkpO1xuICAgICAgcHIuc3RlcHMuc3BsaWNlKDEsIDAsIHNldFNhZmVEaXJlY3RvcnkpO1xuICAgIH1cblxuICAgIC8vIHJlbGVhc2U6IEdvIOKAlCBjb21wbGV0ZSB0aGUgaGFuZC1idWlsdCBHbyBwdWJsaXNoIGpvYi4gRGVwcmVjYXRlZCBwcm9qZWN0c1xuICAgIC8vIHN0aWxsIHB1Ymxpc2ggR28sIHNvIHRoZXkgc3RpbGwgbmVlZCB0aGUgcG5wbSBzZXR1cDsgb25seSB0aGUgQXBwIHRva2VuIGlzXG4gICAgLy8gY29uZGl0aW9uYWwsIHNpbmNlIHRoZXkgZG8gbm90IHB1c2ggbmV3IG1vZHVsZSB2ZXJzaW9ucy5cbiAgICBuZXcgR29QdWJsaXNoSm9iUGF0Y2godGhpcywge1xuICAgICAgYXBwVG9rZW5SZXBvc2l0b3J5OiBpc0RlcHJlY2F0ZWRcbiAgICAgICAgPyB1bmRlZmluZWRcbiAgICAgICAgOiBwYWNrYWdlSW5mby5wdWJsaXNoVG9Hbz8ubW9kdWxlTmFtZT8uc3BsaXQoXCIvXCIpLnBvcCgpID8/IFwiXCIsXG4gICAgfSk7XG5cbiAgICAvLyBGaXggbWF2ZW4gaXNzdWUgKGh0dHBzOi8vZ2l0aHViLmNvbS9jZGtsYWJzL3B1YmxpYi9wdWxsLzc3NylcbiAgICAvL1xuICAgIC8vIFRoZSBwdWJsaXNoIGpvYnMgZG9uJ3QgZXhpc3QgdW50aWwgUmVsZWFzZSBzeW50aGVzaXplcywgYW5kIHRoZSBzdGVwJ3MgaW5kZXhcbiAgICAvLyB3aXRoaW4gcmVsZWFzZV9tYXZlbiBzaGlmdHMgd2hlbmV2ZXIgdGhlIGpvYiBnYWlucyBhIHN0ZXAgLS0gc3dpdGNoaW5nIHRoZVxuICAgIC8vIHBhY2thZ2UgbWFuYWdlciB0byBwbnBtIGluc2VydHMgYSBcIlNldHVwIHBucG1cIiBzdGVwLCB3aGljaCBzaWxlbnRseSBtb3ZlZCB0aGVcbiAgICAvLyBvbGQgaGFyZGNvZGVkIC9zdGVwcy8xMC8gb250byBhIHN0ZXAgd2l0aCBubyBlbnYgYXQgYWxsLiBSZXNvbHZlIHRoZSBzdGVwIGJ5XG4gICAgLy8gd2hhdCBpdCBydW5zLCBpbiBwcmVTeW50aGVzaXplLCBzbyBuZWl0aGVyIHByb2JsZW0gY2FuIHJlY3VyLlxuICAgIG5ldyBNYXZlbk9wdHNQYXRjaCh0aGlzKTtcblxuICAgIHRoaXMucGluR2l0aHViQWN0aW9uVmVyc2lvbnMoZ2l0aHViQWN0aW9uUGlubmVkVmVyc2lvbnMpO1xuXG4gICAgbmV3IENka3RmQ29uZmlnKHRoaXMsIHtcbiAgICAgIHRlcnJhZm9ybVByb3ZpZGVyLFxuICAgICAgcHJvdmlkZXJOYW1lLFxuICAgICAgZnFwcm92aWRlck5hbWUsXG4gICAgICBwcm92aWRlclZlcnNpb24sXG4gICAgICBjZGt0blZlcnNpb24sXG4gICAgICBjb25zdHJ1Y3RzVmVyc2lvbixcbiAgICAgIGpzaWlWZXJzaW9uLFxuICAgICAgdHlwZXNjcmlwdFZlcnNpb24sXG4gICAgICBwYWNrYWdlSW5mbyxcbiAgICAgIGdpdGh1Yk5hbWVzcGFjZSxcbiAgICAgIGRlcHJlY2F0aW9uRGF0ZSxcbiAgICAgIGlzRGVwcmVjYXRlZDogISFpc0RlcHJlY2F0ZWQsXG4gICAgfSk7XG4gICAgbmV3IEN1c3RvbWl6ZWRMaWNlbnNlKHRoaXMsIG9wdGlvbnMuY3JlYXRpb25ZZWFyLCBvcHRpb25zLmxpY2Vuc2VlKTtcbiAgICBuZXcgR2l0aHViSXNzdWVzKHRoaXMsIHsgcHJvdmlkZXJOYW1lIH0pO1xuICAgIG5ldyBBdXRvQXBwcm92ZSh0aGlzKTtcbiAgICBuZXcgQXV0b0Nsb3NlQ29tbXVuaXR5SXNzdWVzKHRoaXMsIHsgcHJvdmlkZXJOYW1lIH0pO1xuICAgIG5ldyBBdXRvbWVyZ2UodGhpcyk7XG4gICAgbmV3IExvY2tJc3N1ZXModGhpcyk7XG5cbiAgICBpZiAoIWlzRGVwcmVjYXRlZCkge1xuICAgICAgY29uc3QgdXBncmFkZVNjcmlwdCA9IG5ldyBDaGVja0ZvclVwZ3JhZGVzU2NyaXB0RmlsZSh0aGlzLCB7XG4gICAgICAgIHByb3ZpZGVyVmVyc2lvbixcbiAgICAgICAgZnFwcm92aWRlck5hbWUsXG4gICAgICB9KTtcbiAgICAgIG5ldyBQcm92aWRlclVwZ3JhZGUodGhpcywge1xuICAgICAgICBjaGVja0ZvclVwZ3JhZGVzU2NyaXB0UGF0aDogdXBncmFkZVNjcmlwdC5wYXRoLFxuICAgICAgICB3b3JrZmxvd1J1bnNPbixcbiAgICAgICAgbm9kZUhlYXBTaXplOiBtYXhPbGRTcGFjZVNpemUsXG4gICAgICB9KTtcbiAgICAgIG5ldyBBbGVydE9wZW5QcnModGhpcywge1xuICAgICAgICBzbGFja1dlYmhvb2tVcmw6IFwiJHt7IHNlY3JldHMuQUxFUlRfUFJTX1NMQUNLX1dFQkhPT0tfVVJMIH19XCIsXG4gICAgICAgIHJlcG9zaXRvcnksXG4gICAgICB9KTtcbiAgICAgIG5ldyBEZXBlbmRhYm90KHRoaXMpO1xuXG4gICAgICAvLyBUcmFuc2l0aXZlIGFkdmlzb3JpZXMgbmV2ZXIgbW92ZSBvdGhlcndpc2UsIGFuZCBgYXVkaXREZXBzYCBmYWlscyB0aGVcbiAgICAgIC8vIGJ1aWxkIG9uIHRoZW0uIFNlZSB0aGUgY29tcG9uZW50LlxuICAgICAgY29uc3QgdHJhbnNpdGl2ZXNTY3JpcHQgPSBuZXcgVXBncmFkZVZ1bG5lcmFibGVUcmFuc2l0aXZlc1NjcmlwdEZpbGUoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIHtcbiAgICAgICAgICBtaW5pbXVtUmVsZWFzZUFnZU1pbnV0ZXM6IENPT0xET1dOX0RBWVMgKiAyNCAqIDYwLFxuICAgICAgICAgIGF1ZGl0TGV2ZWw6IEFVRElUX0xFVkVMLFxuICAgICAgICB9XG4gICAgICApO1xuICAgICAgLy8gcG9zdC11cGdyYWRlOiBydW5zIGFmdGVyIGBwbnBtIGV4ZWMgcHJvamVuYCwgYW5kIG9ubHkgbW92ZXMgdGhlIGxvY2tmaWxlLlxuICAgICAgdGhpcy50YXNrc1xuICAgICAgICAudHJ5RmluZChcInBvc3QtdXBncmFkZVwiKVxuICAgICAgICA/LmV4ZWMoYG5vZGUgLi8ke3RyYW5zaXRpdmVzU2NyaXB0LnBhdGh9YCk7XG4gICAgfVxuXG4gICAgbmV3IFRleHRGaWxlKHRoaXMsIFwiLmdpdGh1Yi9DT0RFT1dORVJTXCIsIHtcbiAgICAgIGxpbmVzOiBbXG4gICAgICAgIFwiIyBUaGVzZSBvd25lcnMgd2lsbCBiZSB0aGUgZGVmYXVsdCBvd25lcnMgZm9yIGV2ZXJ5dGhpbmcgaW4gXCIsXG4gICAgICAgIFwiIyB0aGUgcmVwby4gVW5sZXNzIGEgbGF0ZXIgbWF0Y2ggdGFrZXMgcHJlY2VkZW5jZSwgXCIsXG4gICAgICAgIFwiIyB0aGV5IHdpbGwgYmUgcmVxdWVzdGVkIGZvciByZXZpZXcgd2hlbiBzb21lb25lIG9wZW5zIGEgXCIsXG4gICAgICAgIFwiIyBwdWxsIHJlcXVlc3QuXCIsXG4gICAgICAgIFwiKiAgICAgICBAY2RrdG4taW8vdGVhbS1jZGstdGVycmFpblwiLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIGlmICghaXNEZXByZWNhdGVkKSB7XG4gICAgICBuZXcgU2hvdWxkUmVsZWFzZVNjcmlwdEZpbGUodGhpcywge30pO1xuXG4gICAgICBjb25zdCByZWxlYXNlVGFzayA9IHRoaXMudGFza3MudHJ5RmluZChcInJlbGVhc2VcIikhO1xuICAgICAgdGhpcy5yZW1vdmVUYXNrKFwicmVsZWFzZVwiKTtcbiAgICAgIHRoaXMuYWRkVGFzayhcInJlbGVhc2VcIiwge1xuICAgICAgICBkZXNjcmlwdGlvbjogcmVsZWFzZVRhc2suZGVzY3JpcHRpb24sXG4gICAgICAgIHN0ZXBzOiByZWxlYXNlVGFzay5zdGVwcyxcbiAgICAgICAgZW52OiAocmVsZWFzZVRhc2sgYXMgYW55KS5fZW52LFxuICAgICAgICBjb25kaXRpb246IFwibm9kZSAuL3NjcmlwdHMvc2hvdWxkLXJlbGVhc2UuanNcIixcbiAgICAgIH0pO1xuICAgICAgdGhpcy5hZGRUYXNrKFwidW5jb25kaXRpb25hbC1yZWxlYXNlXCIsIHtcbiAgICAgICAgZGVzY3JpcHRpb246IHJlbGVhc2VUYXNrLmRlc2NyaXB0aW9uLFxuICAgICAgICBzdGVwczogcmVsZWFzZVRhc2suc3RlcHMsXG4gICAgICAgIGVudjogKHJlbGVhc2VUYXNrIGFzIGFueSkuX2VudixcbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCByZWxlYXNlSm9iU3RlcHM6IGFueVtdID0gKFxuICAgICAgICB0aGlzLmdpdGh1Yj8udHJ5RmluZFdvcmtmbG93KFwicmVsZWFzZVwiKSBhcyBhbnlcbiAgICAgICkuam9icy5yZWxlYXNlLnN0ZXBzO1xuICAgICAgY29uc3QgZ2l0UmVtb3RlSm9iID0gcmVsZWFzZUpvYlN0ZXBzLmZpbmQoKGl0KSA9PiBpdC5pZCA9PT0gXCJnaXRfcmVtb3RlXCIpO1xuICAgICAgYXNzZXJ0KFxuICAgICAgICBnaXRSZW1vdGVKb2IsXG4gICAgICAgIFwiZ2l0X3JlbW90ZSBzdGVwIG5vdCBmb3VuZCBpbiByZWxlYXNlIHdvcmtmbG93LCBwbGVhc2UgY2hlY2sgaWYgdGhlIHdvcmthcm91bmQgc3RpbGwgd29ya3MhXCJcbiAgICAgICk7XG4gICAgICAvLyBXZSB3cmFwIHdoYXRldmVyIHByb2plbiBnZW5lcmF0ZWQgaW4gYSBzaG91bGQtcmVsZWFzZSBndWFyZCByYXRoZXIgdGhhblxuICAgICAgLy8gcmV3cml0aW5nIGl0LCBzbyBhc3NlcnQgb25seSB0aGUgdHdvIHByb3BlcnRpZXMgdGhlIHdyYXBwaW5nIGFjdHVhbGx5XG4gICAgICAvLyBkZXBlbmRzIG9uLiBQaW5uaW5nIHRvIHByb2plbidzIGV4YWN0IHdvcmRpbmcgYnJva2UgdGhlIHdob2xlIGZsZWV0XG4gICAgICAvLyBvbmNlIGFscmVhZHk6IHByb2plbiAwLjEwMSBjaGFuZ2VkIGAke3sgZ2l0aHViLnJlZiB9fWAgdG8gYFwiJEdJVEhVQl9SRUZcImBcbiAgICAgIC8vIGFuZCBldmVyeSBwcm92aWRlciByZXBvJ3MgdXBncmFkZS1tYWluIHN0YXJ0ZWQgZmFpbGluZyBhdCBzeW50aC5cbiAgICAgIGFzc2VydChcbiAgICAgICAgdHlwZW9mIGdpdFJlbW90ZUpvYi5ydW4gPT09IFwic3RyaW5nXCIgJiZcbiAgICAgICAgICBnaXRSZW1vdGVKb2IucnVuLmluY2x1ZGVzKFwiZ2l0IGxzLXJlbW90ZVwiKSAmJlxuICAgICAgICAgIGdpdFJlbW90ZUpvYi5ydW4uaW5jbHVkZXMoXCJsYXRlc3RfY29tbWl0PVwiKSxcbiAgICAgICAgYGdpdF9yZW1vdGUgc3RlcCBubyBsb25nZXIgc2V0cyBsYXRlc3RfY29tbWl0IGZyb20gZ2l0IGxzLXJlbW90ZSwgcGxlYXNlIGNoZWNrIGlmIHRoZSB3b3JrYXJvdW5kIHN0aWxsIHdvcmtzISBHb3Q6ICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgZ2l0UmVtb3RlSm9iLnJ1blxuICAgICAgICApfWBcbiAgICAgICk7XG4gICAgICAvLyBGb2xkICpldmVyeSogbGluZTogcHJvamVuIGVtaXRzIHR3byB0b2RheSwgYnV0IFN0cmluZyNyZXBsYWNlIHdpdGggYVxuICAgICAgLy8gc3RyaW5nIHBhdHRlcm4gb25seSBmb2xkcyB0aGUgZmlyc3QgaWYgdGhhdCBldmVyIGdyb3dzLlxuICAgICAgY29uc3QgcHJldmlvdXNDb21tYW5kID0gZ2l0UmVtb3RlSm9iLnJ1bi5zcGxpdChcIlxcblwiKS5qb2luKFwiICYmIFwiKTtcblxuICAgICAgY29uc3QgY2FuY2VsQ29tbWFuZCA9XG4gICAgICAgICdlY2hvIFwibGF0ZXN0X2NvbW1pdD1yZWxlYXNlX2NhbmNlbGxlZFwiID4+ICRHSVRIVUJfT1VUUFVUJzsgLy8gdGhpcyBjYW5jZWxzIHRoZSByZWxlYXNlIHZpYSBhIG5vbi1tYXRjaGluZyBTSEE7XG4gICAgICBnaXRSZW1vdGVKb2IucnVuID0gYG5vZGUgLi9zY3JpcHRzL3Nob3VsZC1yZWxlYXNlLmpzICYmICgke3ByZXZpb3VzQ29tbWFuZH0pIHx8ICR7Y2FuY2VsQ29tbWFuZH1gO1xuICAgICAgZ2l0UmVtb3RlSm9iLm5hbWUgKz1cbiAgICAgICAgXCIgb3IgY2FuY2VsIHZpYSBmYWtpbmcgYSBTSEEgaWYgcmVsZWFzZSB3YXMgY2FuY2VsbGVkXCI7XG4gICAgfVxuXG4gICAgY29uc3Qgc3RhbGVXb3JrZmxvdyA9IHRoaXMudHJ5RmluZE9iamVjdEZpbGUoXCIuZ2l0aHViL3dvcmtmbG93cy9zdGFsZS55bWxcIik7XG4gICAgc3RhbGVXb3JrZmxvdz8uYWRkT3ZlcnJpZGUoXCJvbi5zY2hlZHVsZVwiLCBbXG4gICAgICB7XG4gICAgICAgIGNyb246IGdlbmVyYXRlUmFuZG9tQ3Jvbih7IHByb2plY3Q6IHRoaXMsIG1heEhvdXI6IDQsIGhvdXJPZmZzZXQ6IDEgfSksXG4gICAgICB9LFxuICAgIF0pO1xuXG4gICAgY29uc3QgdXBncmFkZVdvcmtmbG93ID0gdGhpcy50cnlGaW5kT2JqZWN0RmlsZShcbiAgICAgIFwiLmdpdGh1Yi93b3JrZmxvd3MvdXBncmFkZS1tYWluLnltbFwiXG4gICAgKTtcbiAgICB1cGdyYWRlV29ya2Zsb3c/LmFkZE92ZXJyaWRlKFwib24uc2NoZWR1bGVcIiwgW1xuICAgICAge1xuICAgICAgICBjcm9uOiBnZW5lcmF0ZVJhbmRvbUNyb24oe1xuICAgICAgICAgIHByb2plY3Q6IHRoaXMsXG4gICAgICAgICAgbWF4SG91cjogMCxcbiAgICAgICAgICBob3VyT2Zmc2V0OiAxLFxuICAgICAgICAgIHNjaGVkdWxlOiBTY2hlZHVsZS5XZWVrbHksXG4gICAgICAgIH0pLFxuICAgICAgfSxcbiAgICBdKTtcblxuICAgIC8vIFN1Ym1vZHVsZSBkb2N1bWVudGF0aW9uIGdlbmVyYXRpb25cbiAgICB0aGlzLmdpdGlnbm9yZS5leGNsdWRlKFwiQVBJLm1kXCIpOyAvLyBpZ25vcmUgdGhlIG9sZCBmaWxlLCB3ZSBub3cgZ2VuZXJhdGUgaXQgaW4gdGhlIGRvY3MgZm9sZGVyXG4gICAgdGhpcy5hZGREZXZEZXBzKFwianNpaS1kb2NnZW5AXjEwLjIuM1wiKTtcbiAgICBpZiAoanNpaVZlcnNpb24pIHtcbiAgICAgIC8vIE5PVEU6IHRoZSBiZWxvdyBpcyBtYWtpbmcgYSBicm9hZCBhc3N1bXB0aW9uIHRoYXQgeW91J3JlIHBhc3NpbmcgYSByYW5nZSBsaWtlIFwifjUuMy4wXCIgdG8ganNpaVZlcnNpb25cbiAgICAgIC8vIElmIHlvdSB1c2UgdGhhdCBmaWVsZCB0byBwYXNzIGEgdmVyeSBzcGVjaWZpYyB2ZXJzaW9uIChlLmcuIFwiNS4zLjExXCIpIHRoZW4gdGhpcyBtaWdodCBicmVha1xuICAgICAgdGhpcy5hZGREZXZEZXBzKGBqc2lpLXJvc2V0dGFAJHtqc2lpVmVyc2lvbn1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5hZGREZXZEZXBzKGBqc2lpLXJvc2V0dGFgKTtcbiAgICB9XG5cbiAgICBjb25zdCBkb2NnZW4gPSB0aGlzLmFkZFRhc2soXCJkb2NnZW5cIiwge1xuICAgICAgZGVzY3JpcHRpb246IFwiR2VuZXJhdGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIHByb2plY3RcIixcbiAgICAgIHN0ZXBzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBleGVjOiBbXG4gICAgICAgICAgICBcInJtIC1yZiBkb2NzXCIsXG4gICAgICAgICAgICBcInJtIC1mIEFQSS5tZFwiLFxuICAgICAgICAgICAgXCJta2RpciBkb2NzXCIsXG4gICAgICAgICAgICBcImpzaWktZG9jZ2VuIC0tc3BsaXQtYnktc3VibW9kdWxlIC1sIHR5cGVzY3JpcHQgLWwgcHl0aG9uIC1sIGphdmEgLWwgY3NoYXJwIC1sIGdvXCIsXG4gICAgICAgICAgICAvLyBUaGVyZSBpcyBubyBuaWNlIHdheSB0byB0ZWxsIGpzaWktZG9jZ2VuIHRvIGdlbmVyYXRlIGRvY3MgaW50byBhIGZvbGRlciBzbyBJIHdlbnQgdGhpcyByb3V0ZVxuICAgICAgICAgICAgXCJtdiAqLioubWQgZG9jc1wiLFxuICAgICAgICAgICAgLy8gU29tZSBwYXJ0IG9mIHRoZSBkb2N1bWVudGF0aW9uIGFyZSB0b28gbG9uZywgd2UgbmVlZCB0byB0cnVuY2F0ZSB0aGVtIHRvIH4xME1CXG4gICAgICAgICAgICBcImNkIGRvY3NcIixcbiAgICAgICAgICAgIFwibHMgLi8gfCB4YXJncyBzZWQgLWkgJzE1MDAwMCwkIGQnICQxXCIsXG4gICAgICAgICAgXS5qb2luKFwiICYmIFwiKSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfSk7XG4gICAgdGhpcy5wb3N0Q29tcGlsZVRhc2suc3Bhd24oZG9jZ2VuKTtcbiAgICB0aGlzLmdpdGlnbm9yZS5pbmNsdWRlKGAvZG9jcy8qLm1kYCk7XG4gICAgdGhpcy5hbm5vdGF0ZUdlbmVyYXRlZChgL2RvY3MvKi5tZGApO1xuXG4gICAgLy8gU2V0dGluZyB0aGUgdmVyc2lvbiBpbiBwYWNrYWdlLmpzb24gc28gdGhlIGdvbGFuZyBkb2NzIGhhdmUgdGhlIGNvcnJlY3QgdmVyc2lvblxuICAgIGNvbnN0IHVuY29uZGl0aW9uYWxCdW1wID0gdGhpcy5hZGRUYXNrKFwidW5jb25kaXRpb25hbC1idW1wXCIsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIlNldCB0aGUgdmVyc2lvbiBpbiBwYWNrYWdlLmpzb24gdG8gdGhlIGN1cnJlbnQgdmVyc2lvblwiLFxuICAgICAgc3RlcHM6IFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiQ2xlYXIgdGhlIGNoYW5nZWxvZyBzbyB0aGF0IGl0IGRvZXNuJ3QgZ2V0IHB1Ymxpc2hlZCB0d2ljZVwiLFxuICAgICAgICAgIGV4ZWM6IFwicm0gLWYgJENIQU5HRUxPR1wiLFxuICAgICAgICB9LFxuICAgICAgICAvLyBwcm9qZW4gMC4xMDEgcmVtb3ZlZCB0aGUgY29tYmluZWQgYHJlbGVhc2UvYnVtcC12ZXJzaW9uYCBidWlsdGluIGFuZCBzcGxpdFxuICAgICAgICAvLyBpdCBpbnRvIHJlc29sdmUtbGF0ZXN0LXRhZyAtPiBzdWdnZXN0LXZlcnNpb24tYnVtcCAtPiBhcHBseS12ZXJzaW9uLWJ1bXAsXG4gICAgICAgIC8vIGhhbmRpbmcgcmVzdWx0cyBmb3J3YXJkIHZpYSBzdGVwIGBvdXRwdXRFbnZgIGNhcHR1cmVzLiBhcHBseSBvbiBpdHMgb3duXG4gICAgICAgIC8vIHRocm93cyBcIm5laXRoZXIgQlVNUF9UWVBFIG5vciBTVUdHRVNURURfQlVNUCBpcyBzZXRcIiwgc28gYWxsIHRocmVlIGFyZVxuICAgICAgICAvLyBuZWVkZWQuIE1pcnJvcnMgcHJvamVuJ3Mgb3duIGJ1bXAgdGFzayAobGliL3ZlcnNpb24uanM6MTI4LTE0NCkuXG4gICAgICAgIHsgYnVpbHRpbjogXCJyZWxlYXNlL3Jlc29sdmUtbGF0ZXN0LXRhZ1wiLCBvdXRwdXRFbnY6IFwiTEFURVNUX1RBR1wiIH0sXG4gICAgICAgIC8vIHN1Z2dlc3QtdmVyc2lvbi1idW1wIGNvdW50cyByZWxlYXNhYmxlIGNvbW1pdHMgKm9ubHkqIGZyb21cbiAgICAgICAgLy8gJFJFTEVBU0FCTEVfQ09NTUlUUy4gV2l0aG91dCB0aGlzIHNwYXduIHRoZSBjb3VudCBpcyAwLCB0aGUgc3VnZ2VzdGVkXG4gICAgICAgIC8vIGJ1bXAgaXMgXCJub25lXCIsIGFuZCBhcHBseS12ZXJzaW9uLWJ1bXAgcmV3cml0ZXMgZGlzdC9yZWxlYXNldGFnLnR4dFxuICAgICAgICAvLyB3aXRoIHRoZSAqcHJldmlvdXMqIHRhZyAtIHdoaWNoIG1ha2VzIHRoZSByZWxlYXNlIHdvcmtmbG93IHRoaW5rIHRoZVxuICAgICAgICAvLyB2ZXJzaW9uIGlzIGFscmVhZHkgdGFnZ2VkIGFuZCBza2lwIGV2ZXJ5IHB1Ymxpc2ggam9iLlxuICAgICAgICB7XG4gICAgICAgICAgc3Bhd246IFwiYnVtcDpyZWxlYXNhYmxlLWNvbW1pdHNcIixcbiAgICAgICAgICBvdXRwdXRFbnY6IFwiUkVMRUFTQUJMRV9DT01NSVRTXCIsXG4gICAgICAgICAgLy8gT24gYSBmaXJzdCByZWxlYXNlIHRoZSByZXNvbHZlZCB0YWcgaXMgc3ludGhldGljIGFuZCBkb2VzIG5vdCBleGlzdCxcbiAgICAgICAgICAvLyBzbyB0aGVyZSBpcyBub3RoaW5nIHRvIGRpZmYgYWdhaW5zdC5cbiAgICAgICAgICBjb25kaXRpb246ICdnaXQgcmV2LXBhcnNlIC0tdmVyaWZ5IC0tcXVpZXQgXCJyZWZzL3RhZ3MvJExBVEVTVF9UQUdcIicsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBidWlsdGluOiBcInJlbGVhc2Uvc3VnZ2VzdC12ZXJzaW9uLWJ1bXBcIixcbiAgICAgICAgICBvdXRwdXRFbnY6IFwiU1VHR0VTVEVEX0JVTVBcIixcbiAgICAgICAgfSxcbiAgICAgICAgeyBidWlsdGluOiBcInJlbGVhc2UvYXBwbHktdmVyc2lvbi1idW1wXCIgfSxcbiAgICAgIF0sXG4gICAgICBlbnY6IHtcbiAgICAgICAgT1VURklMRTogXCJwYWNrYWdlLmpzb25cIixcbiAgICAgICAgQ0hBTkdFTE9HOiBcImRpc3QvY2hhbmdlbG9nLm1kXCIsXG4gICAgICAgIEJVTVBGSUxFOiBcImRpc3QvdmVyc2lvbi50eHRcIixcbiAgICAgICAgUkVMRUFTRVRBRzogXCJkaXN0L3JlbGVhc2V0YWcudHh0XCIsXG4gICAgICAgIFJFTEVBU0VfVEFHX1BSRUZJWDogXCJcIixcbiAgICAgICAgTUlOX01BSk9SOiBTdHJpbmcoTUlOX01BSk9SX1ZFUlNJT04pLFxuICAgICAgfSxcbiAgICB9KTtcbiAgICB0aGlzLnByZUNvbXBpbGVUYXNrLnNwYXduKHVuY29uZGl0aW9uYWxCdW1wKTtcbiAgICAvLyBUbyBidW1wIGNvcnJlY3RseSB3ZSBuZWVkIHRvIGhhdmUgdGhlIGNvbXBsZXRlbHkgY2xvbmVkIHJlcG9cbiAgICAodGhpcy5idWlsZFdvcmtmbG93IGFzIGFueSkud29ya2Zsb3cuZmlsZS5hZGRPdmVycmlkZShcbiAgICAgIFwiam9icy5idWlsZC5zdGVwcy4wLndpdGguZmV0Y2gtZGVwdGhcIixcbiAgICAgIDBcbiAgICApO1xuICAgIC8vIFVuZG8gdGhlIGNoYW5nZXMgYWZ0ZXIgY29tcGlsYXRpb25cbiAgICB0aGlzLmJ1aWxkV29ya2Zsb3c/LmFkZFBvc3RCdWlsZFN0ZXBzKHtcbiAgICAgIG5hbWU6IFwiUmV2ZXJ0IHBhY2thZ2UuanNvbiB2ZXJzaW9uIGJ1bXBcIixcbiAgICAgIHJ1bjogXCJnaXQgY2hlY2tvdXQgcGFja2FnZS5qc29uXCIsXG4gICAgfSk7XG5cbiAgICBuZXcgQ29weXJpZ2h0SGVhZGVycyh0aGlzKTtcbiAgICBuZXcgRGVwcmVjYXRlUGFja2FnZXModGhpcywge1xuICAgICAgcHJvdmlkZXJOYW1lLFxuICAgICAgcGFja2FnZUluZm8sXG4gICAgICBpc0RlcHJlY2F0ZWQ6ICEhaXNEZXByZWNhdGVkLFxuICAgIH0pO1xuICAgIGlmICghaXNEZXByZWNhdGVkKSB7XG4gICAgICAvLyBGb2xkcyB0aGUgbWFudWFsIGZvcmNlLXJlbGVhc2UgYmVoYXZpb3VyIGludG8gcmVsZWFzZS55bWwgYmVoaW5kIGFcbiAgICAgIC8vIHdvcmtmbG93X2Rpc3BhdGNoIHRyaWdnZXIsIHNvIG5wbS9QeVBJIE9JREMgdHJ1c3RzIGEgc2luZ2xlIHdvcmtmbG93LlxuICAgICAgbmV3IEZvcmNlUmVsZWFzZSh0aGlzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHBpbkdpdGh1YkFjdGlvblZlcnNpb25zKHBpbm5lZFZlcnNpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSB7XG4gICAgLy8gVXNlIHBpbm5lZCB2ZXJzaW9ucyBvZiBnaXRodWIgYWN0aW9uc1xuICAgIE9iamVjdC5lbnRyaWVzKHBpbm5lZFZlcnNpb25zKS5mb3JFYWNoKChbbmFtZSwgc2hhXSkgPT4ge1xuICAgICAgdGhpcy5naXRodWI/LmFjdGlvbnMuc2V0KG5hbWUsIGAke25hbWV9QCR7c2hhfWApO1xuICAgIH0pO1xuICB9XG59XG5cbi8qKlxuICogU2V0cyBNQVZFTl9PUFRTIG9uIHRoZSBtYXZlbiBwdWJsaXNoIHN0ZXAgYW5kIGRyb3BzIHRoZSB1bnVzZWRcbiAqIE1BVkVOX1NUQUdJTkdfUFJPRklMRV9JRCwgcmVzb2x2aW5nIHRoZSBzdGVwIGJ5IHRoZSBjb21tYW5kIGl0IHJ1bnMuXG4gKlxuICogUnVucyBpbiBwcmVTeW50aGVzaXplIGJlY2F1c2UgdGhlIHB1Ymxpc2ggam9icyBhcmUgYWRkZWQgYnkgUmVsZWFzZSBkdXJpbmdcbiAqIHN5bnRoZXNpcywgc28gdGhlIGpvYiBkb2VzIG5vdCBleGlzdCB5ZXQgYXQgY29uc3RydWN0aW9uIHRpbWUuXG4gKlxuICogQHNlZSBodHRwczovL2dpdGh1Yi5jb20vY2RrbGFicy9wdWJsaWIvcHVsbC83NzdcbiAqL1xuY2xhc3MgTWF2ZW5PcHRzUGF0Y2ggZXh0ZW5kcyBDb21wb25lbnQge1xuICBwdWJsaWMgcHJlU3ludGhlc2l6ZSgpIHtcbiAgICBjb25zdCB3b3JrZmxvdyA9IGdpdGh1Yi5HaXRIdWIub2YodGhpcy5wcm9qZWN0KT8udHJ5RmluZFdvcmtmbG93KFwicmVsZWFzZVwiKTtcbiAgICBjb25zdCBzdGVwczogSm9iU3RlcFtdIHwgdW5kZWZpbmVkID0gKHdvcmtmbG93IGFzIGFueSk/LmpvYnM/LnJlbGVhc2VfbWF2ZW5cbiAgICAgID8uc3RlcHM7XG4gICAgYXNzZXJ0KFxuICAgICAgc3RlcHMsXG4gICAgICBcInJlbGVhc2VfbWF2ZW4gam9iIG5vdCBmb3VuZCwgcGxlYXNlIGNoZWNrIGlmIHRoZSBNQVZFTl9PUFRTIHdvcmthcm91bmQgc3RpbGwgd29ya3MhXCJcbiAgICApO1xuICAgIGNvbnN0IHN0ZXAgPSBzdGVwcy5maW5kKChzKSA9PiBzLnJ1bj8uaW5jbHVkZXMoXCJwdWJsaWItbWF2ZW5cIikpO1xuICAgIGFzc2VydChcbiAgICAgIHN0ZXA/LmVudixcbiAgICAgIFwibm8gcHVibGliLW1hdmVuIHN0ZXAgd2l0aCBhbiBlbnYgYmxvY2sgaW4gcmVsZWFzZV9tYXZlbiwgcGxlYXNlIGNoZWNrIGlmIHRoZSBNQVZFTl9PUFRTIHdvcmthcm91bmQgc3RpbGwgd29ya3MhXCJcbiAgICApO1xuICAgIC8vIE11dGF0ZSB0aGUgc3RlcCBkaXJlY3RseSByYXRoZXIgdGhhbiBKc29uUGF0Y2gtaW5nIHRoZSByZW5kZXJlZCBmaWxlOiB0aGVcbiAgICAvLyBwdWJsaXNoZXIgcHJlcGVuZHMgdG9vbC1zZXR1cCBzdGVwcyBhdCByZW5kZXIgdGltZSwgc28gaW4tbWVtb3J5IGluZGljZXMgZG9cbiAgICAvLyBub3QgbWF0Y2ggcmVuZGVyZWQgb25lcywgYW5kIGEgSlNPTiBQb2ludGVyIHdvdWxkIGhhdmUgdG8gZW5jb2RlIHRoYXQgb2Zmc2V0LlxuICAgIC8vIFNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL3F1ZXN0aW9ucy83MDE1Mzk2Mi9uZXh1cy1zdGFnaW5nLW1hdmVuLXBsdWdpbi1tYXZlbi1kZXBsb3ktZmFpbGVkLWFuLWFwaS1pbmNvbXBhdGliaWxpdHktd2FzLWVuY29cbiAgICBzdGVwLmVudi5NQVZFTl9PUFRTID1cbiAgICAgIFwiLS1hZGQtb3BlbnM9amF2YS5iYXNlL2phdmEudXRpbD1BTEwtVU5OQU1FRCAtLWFkZC1vcGVucz1qYXZhLmJhc2UvamF2YS5sYW5nLnJlZmxlY3Q9QUxMLVVOTkFNRUQgLS1hZGQtb3BlbnM9amF2YS5iYXNlL2phdmEudGV4dD1BTEwtVU5OQU1FRCAtLWFkZC1vcGVucz1qYXZhLmRlc2t0b3AvamF2YS5hd3QuZm9udD1BTEwtVU5OQU1FRFwiO1xuICAgIC8vIFRoaXMgaXMgbm8gbG9uZ2VyIHVzZWQuXG4gICAgZGVsZXRlIHN0ZXAuZW52Lk1BVkVOX1NUQUdJTkdfUFJPRklMRV9JRDtcbiAgfVxufVxuXG4vKipcbiAqIEZpeGVzIHVwIHRoZSBoYW5kLWJ1aWx0IEdvIHB1Ymxpc2ggam9iLCB3aGljaCBgcHVibGlzaFRvR28ucHJlUHVibGlzaFN0ZXBzYFxuICogaGFzIHRvIGRlY2xhcmUgYmVmb3JlIGBzdXBlcigpYCBhbmQgdGhlcmVmb3JlIGNhbm5vdCBidWlsZCBjb21wbGV0ZWx5OlxuICpcbiAqIC0gaW5zZXJ0cyB0aGUgXCJTZXR1cCBwbnBtXCIgc3RlcCB0aGF0IHByb2plbiBpbmplY3RzIGludG8gdGhlIHdvcmtmbG93cyBpdFxuICogICBnZW5lcmF0ZXMgaXRzZWxmIGJ1dCBub3QgaW50byBoYW5kLWJ1aWx0IG9uZXMsIGF0IHRoZSBwcm9qZWN0J3Mgb3duIHBucG1cbiAqICAgdmVyc2lvbiByYXRoZXIgdGhhbiBhIGNvcHkgb2YgaXQuIEFwcGxpZXMgdG8gZGVwcmVjYXRlZCBwcm9qZWN0cyB0b286IHRoZXlcbiAqICAgc3RpbGwgcnVuIHRoaXMgam9iLCBzbyB0aGV5IHN0aWxsIG5lZWQgcG5wbSBvbiBQQVRIO1xuICogLSBwdXNoZXMgdGhlIG1vZHVsZSB3aXRoIGEgR2l0SHViIEFwcCBpbnN0YWxsYXRpb24gdG9rZW4gaW5zdGVhZCBvZiB0aGVcbiAqICAgZGVmYXVsdCBgR09fR0lUSFVCX1RPS0VOYCBzZWNyZXQsIHdoZW4gYGFwcFRva2VuUmVwb3NpdG9yeWAgaXMgZ2l2ZW4uXG4gKlxuICogUnVucyBpbiBwcmVTeW50aGVzaXplIGZvciB0d28gcmVhc29uczogdGhlIHB1Ymxpc2ggam9icyBhcmUgYWRkZWQgYnkgUmVsZWFzZVxuICogZHVyaW5nIHN5bnRoZXNpcywgc28gdGhlIGpvYiBkb2VzIG5vdCBleGlzdCBhdCBjb25zdHJ1Y3Rpb24gdGltZSwgYW5kXG4gKiBgdGhpcy5wYWNrYWdlLnBucG1WZXJzaW9uYCBpcyBvbmx5IHJlYWRhYmxlIGFmdGVyIGBzdXBlcigpYC5cbiAqXG4gKiBCb3RoIHN0ZXBzIGFyZSBzcGxpY2VkIGluIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgc3RlcCB0aGF0IG5lZWRzIHRoZW0sXG4gKiByZXNvbHZlZCBieSB3aGF0IHRoYXQgc3RlcCBydW5zLiBOZXZlciBieSBpbmRleDogcmVsZWFzZV9nb2xhbmcncyBpbmRpY2VzXG4gKiBzaGlmdCB3aGVuZXZlciB0aGUgam9iIGdhaW5zIGEgc3RlcCAtLSBhZGRpbmcgXCJTZXR1cCBwbnBtXCIgaXMgZXhhY3RseSB3aGF0XG4gKiBtb3ZlZCB0aGUgb2xkIGhhcmRjb2RlZCAvc3RlcHMvMTcvZW52IG9udG8gYSBzdGVwIHdpdGggbm8gZW52IGF0IGFsbC5cbiAqL1xuY2xhc3MgR29QdWJsaXNoSm9iUGF0Y2ggZXh0ZW5kcyBDb21wb25lbnQge1xuICBwcml2YXRlIHJlYWRvbmx5IGFwcFRva2VuUmVwb3NpdG9yeT86IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5vZGVQcm9qZWN0OiBjZGsuSnNpaVByb2plY3QsXG4gICAgb3B0aW9uczogeyBhcHBUb2tlblJlcG9zaXRvcnk/OiBzdHJpbmcgfVxuICApIHtcbiAgICBzdXBlcihub2RlUHJvamVjdCk7XG4gICAgdGhpcy5hcHBUb2tlblJlcG9zaXRvcnkgPSBvcHRpb25zLmFwcFRva2VuUmVwb3NpdG9yeTtcbiAgfVxuXG4gIHB1YmxpYyBwcmVTeW50aGVzaXplKCkge1xuICAgIGNvbnN0IHdvcmtmbG93ID0gZ2l0aHViLkdpdEh1Yi5vZih0aGlzLnByb2plY3QpPy50cnlGaW5kV29ya2Zsb3coXCJyZWxlYXNlXCIpO1xuICAgIGNvbnN0IHN0ZXBzOiBKb2JTdGVwW10gfCB1bmRlZmluZWQgPSAod29ya2Zsb3cgYXMgYW55KT8uam9icz8ucmVsZWFzZV9nb2xhbmdcbiAgICAgID8uc3RlcHM7XG4gICAgYXNzZXJ0KFxuICAgICAgc3RlcHMsXG4gICAgICBcInJlbGVhc2VfZ29sYW5nIGpvYiBub3QgZm91bmQsIHBsZWFzZSBjaGVjayBpZiB0aGUgR28gcHVibGlzaCB3b3JrYXJvdW5kcyBzdGlsbCB3b3JrIVwiXG4gICAgKTtcblxuICAgIC8vIFdpdGhvdXQgcG5wbSBvbiBQQVRIIHRoZSBpbnN0YWxsIGJlbG93IGV4aXRzIDEyNy4gQmVmb3JlIHRoZSBwbnBtXG4gICAgLy8gbWlncmF0aW9uIHJlYWNoZWQgdGhpcyBqb2IgaXQgcmFuIGB5YXJuIGluc3RhbGxgLCB3aGljaCBmYWlsZWQgb3V0cmlnaHRcbiAgICAvLyBhZ2FpbnN0IGEgcGFja2FnZS5qc29uIGRlY2xhcmluZyBgcGFja2FnZU1hbmFnZXI6IFwicG5wbUAuLi5cImAuXG4gICAgY29uc3QgaW5zdGFsbEluZGV4ID0gc3RlcHMuZmluZEluZGV4KChzKSA9PlxuICAgICAgcy5ydW4/LmluY2x1ZGVzKFwicG5wbSBpbnN0YWxsXCIpXG4gICAgKTtcbiAgICBhc3NlcnQoXG4gICAgICBpbnN0YWxsSW5kZXggPj0gMCxcbiAgICAgIFwibm8gcG5wbSBpbnN0YWxsIHN0ZXAgaW4gcmVsZWFzZV9nb2xhbmcsIHBsZWFzZSBjaGVjayBpZiB0aGUgU2V0dXAgcG5wbSB3b3JrYXJvdW5kIHN0aWxsIHdvcmtzIVwiXG4gICAgKTtcbiAgICBzdGVwcy5zcGxpY2UoaW5zdGFsbEluZGV4LCAwLCB7XG4gICAgICBuYW1lOiBcIlNldHVwIHBucG1cIixcbiAgICAgIHVzZXM6IFwicG5wbS9hY3Rpb24tc2V0dXBcIixcbiAgICAgIHdpdGg6IHsgdmVyc2lvbjogdGhpcy5ub2RlUHJvamVjdC5wYWNrYWdlLnBucG1WZXJzaW9uIH0sXG4gICAgfSk7XG5cbiAgICBpZiAoIXRoaXMuYXBwVG9rZW5SZXBvc2l0b3J5KSByZXR1cm47XG5cbiAgICBjb25zdCBpbmRleCA9IHN0ZXBzLmZpbmRJbmRleCgocykgPT4gcy5ydW4/LmluY2x1ZGVzKFwicHVibGliLWdvbGFuZ1wiKSk7XG4gICAgY29uc3Qgc3RlcCA9IHN0ZXBzW2luZGV4XTtcbiAgICBhc3NlcnQoXG4gICAgICBzdGVwPy5lbnYsXG4gICAgICBcIm5vIHB1YmxpYi1nb2xhbmcgc3RlcCB3aXRoIGFuIGVudiBibG9jayBpbiByZWxlYXNlX2dvbGFuZywgcGxlYXNlIGNoZWNrIGlmIHRoZSBHbyBwdWJsaXNoIHRva2VuIHdvcmthcm91bmQgc3RpbGwgd29ya3MhXCJcbiAgICApO1xuXG4gICAgY29uc3QgZ29QdWJsaXNoVG9rZW4gPSBnaXRodWIuR2l0aHViQ3JlZGVudGlhbHMuZnJvbUFwcCh7XG4gICAgICBhcHBJZFNlY3JldDogXCJQUk9KRU5fQVBQX0lEXCIsXG4gICAgICBwcml2YXRlS2V5U2VjcmV0OiBcIlBST0pFTl9BUFBfUFJJVkFURV9LRVlcIixcbiAgICAgIG93bmVyOiBcIiR7eyBnaXRodWIucmVwb3NpdG9yeV9vd25lciB9fVwiLFxuICAgICAgcmVwb3NpdG9yaWVzOiBbdGhpcy5hcHBUb2tlblJlcG9zaXRvcnldLFxuICAgICAgcGVybWlzc2lvbnM6IHsgY29udGVudHM6IGdpdGh1Yi53b3JrZmxvd3MuQXBwUGVybWlzc2lvbi5XUklURSB9LFxuICAgIH0pO1xuXG4gICAgLy8gTXV0YXRlIHRoZSBzdGVwcyBkaXJlY3RseSByYXRoZXIgdGhhbiBKc29uUGF0Y2gtaW5nIHRoZSByZW5kZXJlZCBmaWxlLCBzb1xuICAgIC8vIHRoZSB0b2tlbi1taW50aW5nIHN0ZXAgc3RheXMgYW5jaG9yZWQgdG8gdGhlIHB1Ymxpc2ggc3RlcCBpdCBmZWVkcy5cbiAgICBzdGVwcy5zcGxpY2UoaW5kZXgsIDAsIGdvUHVibGlzaFRva2VuLnNldHVwU3RlcHNbMF0pO1xuICAgIC8vIEdpdEh1YiBBcHAgaW5zdGFsbGF0aW9uIHRva2VucyAoZ2hzXyopIHJlcXVpcmUgdGhlIGB4LWFjY2Vzcy10b2tlbmBcbiAgICAvLyB1c2VybmFtZSB3aGVuIHVzZWQgaW4gSFRUUFMgZ2l0IFVSTHMuIHB1YmxpYiByZW5kZXJzIHRoaXMgZW52IHZhclxuICAgIC8vIHZlcmJhdGltIGludG8gYGh0dHBzOi8vJHtHSVRIVUJfVE9LRU59QGdpdGh1Yi5jb20vLi4uYCwgc28gd2l0aG91dCB0aGVcbiAgICAvLyBwcmVmaXggdGhlIHB1c2ggNDAxcyBhbmQgZmFsbHMgYmFjayB0byBhIFRUWSBwYXNzd29yZCBwcm9tcHQuXG4gICAgc3RlcC5lbnYuR0lUSFVCX1RPS0VOID0gYHgtYWNjZXNzLXRva2VuOiR7Z29QdWJsaXNoVG9rZW4udG9rZW5SZWZ9YDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwcmV0dHlBc3NlcnRFcXVhbDxUPihzdWJqZWN0OiBULCBleHBlY3RlZDogVCwgbWVzc2FnZT86IHN0cmluZyk6IHZvaWQge1xuICBpZiAoc3ViamVjdCAhPT0gZXhwZWN0ZWQpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgJHttZXNzYWdlID8/IFwiQXNzZXJ0aW9uIGZhaWxlZFwifTogZXhwZWN0ZWQgJHtKU09OLnN0cmluZ2lmeShcbiAgICAgICAgZXhwZWN0ZWRcbiAgICAgICl9IGJ1dCBnb3QgJHtKU09OLnN0cmluZ2lmeShzdWJqZWN0KX1gXG4gICAgKTtcbiAgfVxufVxuIl19
768
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQUFBLDBEQUEwRDtBQUMxRCxpQ0FBa0M7QUFDbEMsNkNBQXlDO0FBQ3pDLG1DQUFxRTtBQUVyRSxzREFJK0I7QUFDL0IscURBQWdEO0FBQ2hELGlEQUE2QztBQUM3QywrRUFBeUU7QUFDekUsMkNBQXdDO0FBQ3hDLGlEQUE2QztBQUM3QywyREFBdUQ7QUFDdkQsNkRBQXlEO0FBQ3pELDZDQUEwQztBQUMxQyw2REFBeUQ7QUFDekQsbURBQStDO0FBQy9DLG1EQUErQztBQUMvQywrQ0FBMkM7QUFFM0MseURBQXFEO0FBQ3JELHFFQUEwRTtBQUMxRSw2REFBbUU7QUFDbkUsNkZBQWtHO0FBQ2xHLG9EQUFrRTtBQUVsRSxtSEFBbUg7QUFDbkgsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLENBQUM7QUFFNUI7Ozs7R0FJRztBQUNILE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBQztBQUV4QixxREFBcUQ7QUFDckQsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDO0FBRTNCOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW9CRztBQUNILE1BQU0sMkJBQTJCLEdBQUc7SUFDbEMseUJBQXlCO0lBQ3pCLE9BQU87SUFDUCxXQUFXO0NBQ1osQ0FBQztBQTRGRixNQUFNLFlBQVksR0FBRyxDQUFDLFlBQW9CLEVBQVUsRUFBRTtJQUNwRCxPQUFPLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFDOUMsQ0FBQyxDQUFDLEdBQUcsWUFBWSxXQUFXO1FBQzVCLENBQUMsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztBQUN2QyxDQUFDLENBQUM7QUFFRixNQUFNLDBCQUEwQixHQUFHO0lBQ2pDLGtCQUFrQixFQUFFLDBDQUEwQyxFQUFFLFNBQVM7SUFDekUsMkJBQTJC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QU8sS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN6QixNQUFNLElBQUksS0FBSyxDQUNiLEdBQUcsT0FBTyxJQUFJLGtCQUFrQixjQUFjLElBQUksQ0FBQyxTQUFTLENBQzFELFFBQVEsQ0FDVCxZQUFZLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FDdkMsQ0FBQztJQUNKLENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0cyAqL1xuaW1wb3J0IGFzc2VydCA9IHJlcXVpcmUoXCJhc3NlcnRcIik7XG5pbXBvcnQgeyBwYXNjYWxDYXNlIH0gZnJvbSBcImNoYW5nZS1jYXNlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQsIFRleHRGaWxlLCBjZGssIGdpdGh1YiwgSnNvblBhdGNoIH0gZnJvbSBcInByb2plblwiO1xuaW1wb3J0IHsgSm9iU3RlcCB9IGZyb20gXCJwcm9qZW4vbGliL2dpdGh1Yi93b3JrZmxvd3MtbW9kZWxcIjtcbmltcG9ydCB7XG4gIE5vZGVQYWNrYWdlTWFuYWdlcixcbiAgUG5wbVdvcmtzcGFjZVlhbWxTY2hlbWFOb2RlTGlua2VyLFxuICBVcGdyYWRlRGVwZW5kZW5jaWVzU2NoZWR1bGUsXG59IGZyb20gXCJwcm9qZW4vbGliL2phdmFzY3JpcHRcIjtcbmltcG9ydCB7IEFsZXJ0T3BlblBycyB9IGZyb20gXCIuL2FsZXJ0LW9wZW4tcHJzXCI7XG5pbXBvcnQgeyBBdXRvQXBwcm92ZSB9IGZyb20gXCIuL2F1dG8tYXBwcm92ZVwiO1xuaW1wb3J0IHsgQXV0b0Nsb3NlQ29tbXVuaXR5SXNzdWVzIH0gZnJvbSBcIi4vYXV0by1jbG9zZS1jb21tdW5pdHktaXNzdWVzXCI7XG5pbXBvcnQgeyBBdXRvbWVyZ2UgfSBmcm9tIFwiLi9hdXRvbWVyZ2VcIjtcbmltcG9ydCB7IENka3RmQ29uZmlnIH0gZnJvbSBcIi4vY2RrdGYtY29uZmlnXCI7XG5pbXBvcnQgeyBDb3B5cmlnaHRIZWFkZXJzIH0gZnJvbSBcIi4vY29weXJpZ2h0LWhlYWRlcnNcIjtcbmltcG9ydCB7IEN1c3RvbWl6ZWRMaWNlbnNlIH0gZnJvbSBcIi4vY3VzdG9taXplZC1saWNlbnNlXCI7XG5pbXBvcnQgeyBEZXBlbmRhYm90IH0gZnJvbSBcIi4vZGVwZW5kYWJvdFwiO1xuaW1wb3J0IHsgRGVwcmVjYXRlUGFja2FnZXMgfSBmcm9tIFwiLi9kZXByZWNhdGUtcGFja2FnZXNcIjtcbmltcG9ydCB7IEZvcmNlUmVsZWFzZSB9IGZyb20gXCIuL2ZvcmNlLXJlbGVhc2VcIjtcbmltcG9ydCB7IEdpdGh1Yklzc3VlcyB9IGZyb20gXCIuL2dpdGh1Yi1pc3N1ZXNcIjtcbmltcG9ydCB7IExvY2tJc3N1ZXMgfSBmcm9tIFwiLi9sb2NrLWlzc3Vlc1wiO1xuaW1wb3J0IHsgUGFja2FnZUluZm8gfSBmcm9tIFwiLi9wYWNrYWdlLWluZm9cIjtcbmltcG9ydCB7IFByb3ZpZGVyVXBncmFkZSB9IGZyb20gXCIuL3Byb3ZpZGVyLXVwZ3JhZGVcIjtcbmltcG9ydCB7IENoZWNrRm9yVXBncmFkZXNTY3JpcHRGaWxlIH0gZnJvbSBcIi4vc2NyaXB0cy9jaGVjay1mb3ItdXBncmFkZXNcIjtcbmltcG9ydCB7IFNob3VsZFJlbGVhc2VTY3JpcHRGaWxlIH0gZnJvbSBcIi4vc2NyaXB0cy9zaG91bGQtcmVsZWFzZVwiO1xuaW1wb3J0IHsgVXBncmFkZVZ1bG5lcmFibGVUcmFuc2l0aXZlc1NjcmlwdEZpbGUgfSBmcm9tIFwiLi9zY3JpcHRzL3VwZ3JhZGUtdnVsbmVyYWJsZS10cmFuc2l0aXZlc1wiO1xuaW1wb3J0IHsgZ2VuZXJhdGVSYW5kb21Dcm9uLCBTY2hlZHVsZSB9IGZyb20gXCIuL3V0aWwvcmFuZG9tLWNyb25cIjtcblxuLy8gZW5zdXJlIG5ldyBwcm9qZWN0cyBzdGFydCB3aXRoIDEuMC4wIHNvIHRoYXQgZXZlcnkgZm9sbG93aW5nIGJyZWFraW5nIGNoYW5nZSBsZWFkcyB0byBhbiBpbmNyZWFzZWQgbWFqb3IgdmVyc2lvblxuY29uc3QgTUlOX01BSk9SX1ZFUlNJT04gPSAxO1xuXG4vKipcbiAqIERheXMgYSByZWxlYXNlIG11c3QgYWdlIGJlZm9yZSBhbiB1cGdyYWRlIG1heSBpbnN0YWxsIGl0LCBzbyBhIGNvbXByb21pc2VkXG4gKiB2ZXJzaW9uIGhhcyB0aW1lIHRvIGJlIGZsYWdnZWQgYmVmb3JlIGFuIGF1dG8tbWVyZ2luZyBQUiBwdWxscyBpdCBpbi4gV2FpdmVkXG4gKiBmb3IgTUlOSU1VTV9SRUxFQVNFX0FHRV9FWENMVURFLlxuICovXG5jb25zdCBDT09MRE9XTl9EQVlTID0gNDtcblxuLyoqIFNldmVyaXR5IGZsb29yIGZvciB0aGUgYGF1ZGl0RGVwc2AgYnVpbGQgZ2F0ZS4gKi9cbmNvbnN0IEFVRElUX0xFVkVMID0gXCJoaWdoXCI7XG5cbi8qKlxuICogRmlyc3QtcGFydHkgcGFja2FnZXMgdGhhdCBhcmUgZXhlbXB0IGZyb20gdGhlIGRlcGVuZGVuY3ktdXBncmFkZSBjb29sZG93bi5cbiAqXG4gKiBgQ09PTERPV05fREFZU2AgYmVsb3cgcmVhY2hlcyB0aGUgZ2VuZXJhdGVkIHVwZ3JhZGUgdGFzayBhc1xuICogYHBucG0gdXBkYXRlIC0tY29uZmlnLm1pbmltdW0tcmVsZWFzZS1hZ2U9NTc2MGAsIHdoaWNoIGdhdGVzICpldmVyeSogcGFja2FnZVxuICogLS0gaW5jbHVkaW5nIHRoZSBvbmVzIHdlIHB1Ymxpc2ggb3Vyc2VsdmVzLiBUaGF0IGlzIGJhY2t3YXJkcyBmb3IgdGhvc2U6IGFcbiAqIGZpeCByZWxlYXNlZCBoZXJlIGNhbm5vdCByZWFjaCB0aGUgZmxlZXQgZm9yIGZvdXIgZGF5cywgd2hpY2ggaXMgZXhhY3RseSB0aGVcbiAqIHdpbmRvdyBpbiB3aGljaCB3ZSBuZWVkIGl0IHRvIG1vdmUuIFRoZSBjb29sZG93biBleGlzdHMgdG8gZ2l2ZSBhIGNvbXByb21pc2VkXG4gKiB0aGlyZC1wYXJ0eSByZWxlYXNlIHRpbWUgdG8gYmUgZmxhZ2dlZDsgZm9yIHBhY2thZ2VzIHB1Ymxpc2hlZCBmcm9tIHJlcG9zIHdlXG4gKiBvd24sIHdpdGggdHJ1c3RlZCBwdWJsaXNoaW5nIGFuZCBhbiBhdWRpdCBnYXRlIG9uIHRoZWlyIG93biByZWxlYXNlcywgaXQgYnV5c1xuICogbm90aGluZyB0aGF0IHdlIGRvIG5vdCBhbHJlYWR5IGNvbnRyb2wuXG4gKlxuICogYGNka3RuYCBhbmQgYGNka3RuLWNsaWAgYXJlIGhlcmUgZm9yIHRoZSBzYW1lIHJlYXNvbjogYSBwcm92aWRlciByZXBvIGhhcyB0b1xuICogYmUgYWJsZSB0byByZWJ1aWxkIGFnYWluc3QgYSBmcmVzaGx5IHJlbGVhc2VkIENES1ROLCBlc3BlY2lhbGx5IGFmdGVyIGEgbWFqb3JcbiAqIG9uZS4gVGhleSBhcmUgYWxzbyB2ZXJzaW9uLXBpbm5lZCB0b2dldGhlciBieSBgQ2RrdGZDb25maWdgLCBzbyBleGNsdWRpbmcgb25lXG4gKiB3aXRob3V0IHRoZSBvdGhlciB3b3VsZCBvbmx5IGhhbGYtYXBwbHkuXG4gKlxuICogcG5wbSBob25vdXJzIHRoaXMgZnJvbSBgcG5wbS13b3Jrc3BhY2UueWFtbGAgZXZlbiB0aG91Z2ggYG1pbmltdW1SZWxlYXNlQWdlYFxuICogaXRzZWxmIGFycml2ZXMgb24gdGhlIGNvbW1hbmQgbGluZTsgaXQgbWF0Y2hlcyBvbiBwYWNrYWdlIG5hbWUgYW5kIGFwcGxpZXMgdG9cbiAqIGV2ZXJ5IHZlcnNpb24gb2YgdGhhdCBwYWNrYWdlLiBFdmVyeXRoaW5nIG5vdCBsaXN0ZWQgaGVyZSBzdGF5cyBnYXRlZC5cbiAqL1xuY29uc3QgTUlOSU1VTV9SRUxFQVNFX0FHRV9FWENMVURFID0gW1xuICBcIkBjZGt0bi9wcm92aWRlci1wcm9qZWN0XCIsXG4gIFwiY2RrdG5cIixcbiAgXCJjZGt0bi1jbGlcIixcbl07XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2RrdG5Qcm92aWRlclByb2plY3RPcHRpb25zIGV4dGVuZHMgY2RrLkpzaWlQcm9qZWN0T3B0aW9ucyB7XG4gIHJlYWRvbmx5IHVzZUN1c3RvbUdpdGh1YlJ1bm5lcj86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBWOCBoZWFwIGNlaWxpbmcgaW4gTWlCLCB3cml0dGVuIGFzIGAtLW1heC1vbGQtc3BhY2Utc2l6ZWAgaW50byB0aGUgZ2xvYmFsXG4gICAqIGBOT0RFX09QVElPTlNgIGluIGAucHJvamVuL3Rhc2tzLmpzb25gLlxuICAgKlxuICAgKiBNdXN0IGJlIGEgcG9zaXRpdmUgc2FmZSBpbnRlZ2VyLiBOb2RlIHJlZnVzZXMgdG8gc3RhcnQgb24gYSBtYWxmb3JtZWRcbiAgICogdmFsdWUgKGAtLW1heC1vbGQtc3BhY2Utc2l6ZT0xLjVgIGFuZCBgPU5hTmAgYXJlIGJvdGggcmVqZWN0ZWQgYmVmb3JlIGFueVxuICAgKiBzY3JpcHQgcnVucyksIGFuZCBgMGAgcmVzdG9yZXMgVjgncyBvd24gZGVmYXVsdCByYXRoZXIgdGhhbiBhcHBseWluZyBhXG4gICAqIGNlaWxpbmcgLS0gc28gYW4gaW52YWxpZCB2YWx1ZSBoZXJlIHdvdWxkIGJyZWFrIGV2ZXJ5IHRhc2sgaW4gdGhlXG4gICAqIGdlbmVyYXRlZCByZXBvLCBmYXIgZnJvbSB0aGlzIGNhbGwgc2l0ZS4gSXQgaXMgdmFsaWRhdGVkIGF0IHN5bnRoIHRpbWUuXG4gICAqXG4gICAqIExlYXZlIHVuc2V0IHRvIHRha2UgdGhlIGRlZmF1bHQgZm9yIHRoZSBydW5uZXIgY2xhc3M6XG4gICAqIGBERUZBVUxUX0hFQVBfTUJfQ1VTVE9NX1JVTk5FUmAgKDIwNDgwLCBvbiAzMkdCIGN1c3RvbSBydW5uZXJzKSBvclxuICAgKiBgREVGQVVMVF9IRUFQX01CX0hPU1RFRF9SVU5ORVJgICg2NjU2LCBvbiA3R0IgR2l0SHViLWhvc3RlZCBydW5uZXJzKS5cbiAgICpcbiAgICogU2V0IGl0IG9ubHkgZm9yIGEgcHJvdmlkZXIgdGhhdCBzdGlsbCBPT01zIG9uIHRoYXQgZGVmYXVsdC5cbiAgICogYC0tbWF4LW9sZC1zcGFjZS1zaXplYCBpcyBhICpjZWlsaW5nKiwgbm90IGEgcmVzZXJ2YXRpb246IGxvd2VyaW5nIGl0XG4gICAqIGNhbm5vdCBzbG93IGRvd24gcHJvdmlkZXJzIHRoYXQgbmV2ZXIgYXBwcm9hY2ggaXQsIGl0IG9ubHkgbWFrZXMgVjhcbiAgICogY29sbGVjdCBoYXJkZXIgaW5zdGVhZCBvZiBsZXR0aW5nIHRoZSBrZXJuZWwgT09NLWtpbGwgdGhlIHByb2Nlc3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gREVGQVVMVF9IRUFQX01CX0NVU1RPTV9SVU5ORVIgaWYgYHVzZUN1c3RvbUdpdGh1YlJ1bm5lcmAsXG4gICAqIG90aGVyd2lzZSBERUZBVUxUX0hFQVBfTUJfSE9TVEVEX1JVTk5FUlxuICAgKi9cbiAgcmVhZG9ubHkgbm9kZUhlYXBTaXplTWI/OiBudW1iZXI7XG4gIHJlYWRvbmx5IHRlcnJhZm9ybVByb3ZpZGVyOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNka3RuVmVyc2lvbjogc3RyaW5nO1xuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBjZGt0blZlcnNpb25gIGluc3RlYWQuIFRoaXMgYWxpYXMgaXMgcHJvdmlkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuXG4gICAqL1xuICByZWFkb25seSBjZGt0ZlZlcnNpb24/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbnN0cnVjdHNWZXJzaW9uOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGZvcmNlTWFqb3JWZXJzaW9uPzogbnVtYmVyO1xuICAvKipcbiAgICogZGVmYXVsdHMgdG8gXCJjZGt0blwiXG4gICAqL1xuICByZWFkb25seSBuYW1lc3BhY2U/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBkZWZhdWx0cyB0byBcImNka3RuLWlvXCJcbiAgICogcHJldmlvdXNseSB3YXMgXCJjZGt0ZlwiLiBVc2VkIGZvciBHaXRIdWIgb3JnIG5hbWUgYW5kIHBhY2thZ2Ugc2NvcGluZ1xuICAgKi9cbiAgcmVhZG9ubHkgZ2l0aHViTmFtZXNwYWNlPzogc3RyaW5nO1xuICAvKipcbiAgICogZGVmYXVsdHMgdG8gXCJJby5DZGt0blwiXG4gICAqL1xuICByZWFkb25seSBudWdldE9yZz86IHN0cmluZztcbiAgLyoqXG4gICAqIGRlZmF1bHRzIHRvIFwiY2RrdG5cIlxuICAgKi9cbiAgcmVhZG9ubHkgbWF2ZW5Pcmc/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBkZWZhdWx0cyB0byBcImlvLiR7bWF2ZW5Pcmd9XCJcbiAgICovXG4gIHJlYWRvbmx5IG1hdmVuR3JvdXBJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSB5ZWFyIG9mIHRoZSBjcmVhdGlvbiBvZiB0aGUgcmVwb3NpdG9yeSwgZm9yIGNvcHlyaWdodCBwdXJwb3Nlcy5cbiAgICogV2lsbCBmYWxsIGJhY2sgdG8gdGhlIGN1cnJlbnQgeWVhciBpZiBub3Qgc3BlY2lmaWVkLlxuICAgKi9cbiAgcmVhZG9ubHkgY3JlYXRpb25ZZWFyPzogbnVtYmVyO1xuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdGhpcyBwcmVidWlsdCBwcm92aWRlciBpcyBkZXByZWNhdGVkLlxuICAgKiBJZiB0cnVlLCBubyBuZXcgdmVyc2lvbnMgd2lsbCBiZSBwdWJsaXNoZWQuXG4gICAqL1xuICByZWFkb25seSBpc0RlcHJlY2F0ZWQ/OiBib29sZWFuO1xuICAvKipcbiAgICogQW4gb3B0aW9uYWwgZGF0ZSB3aGVuIHRoZSBwcm9qZWN0IHNob3VsZCBiZSBjb25zaWRlcmVkIGRlcHJlY2F0ZWQsIHRvIGJlIHVzZWQgaW4gdGhlIFJFQURNRSB0ZXh0LlxuICAgKiBJZiBubyBkYXRlIGlzIHByb3ZpZGVkLCB0aGVuIHRoZSBkYXRlIG9mIHRoZSBidWlsZCB3aWxsIGJlIHVzZWQgYnkgZGVmYXVsdC5cbiAgICovXG4gIHJlYWRvbmx5IGRlcHJlY2F0aW9uRGF0ZT86IHN0cmluZztcbiAgLyoqXG4gICAqIGRlZmF1bHRzIHRvIFwiSGFzaGlDb3JwLCBJbmMuXCJcbiAgICovXG4gIHJlYWRvbmx5IGxpY2Vuc2VlPzogc3RyaW5nO1xuICAvKipcbiAgICogVXNlIHRydXN0ZWQgcHVibGlzaGluZyBmb3IgcHVibGlzaGluZyB0byBweXBpLm9yZ1xuICAgKiBOZWVkcyB0byBiZSBwcmUtY29uZmlndXJlZCBvbiBQeVBJIHRvIHdvcmsuXG4gICAqXG4gICAqIFRoZSBgcmVsZWFzZV9weXBpYCBqb2Iga2VlcHMgd2hhdGV2ZXIgcnVubmVyIHRoZSBwcm9qZWN0IGlzIGNvbmZpZ3VyZWQgZm9yLlxuICAgKiBQeVBJLCB1bmxpa2UgbnBtLCBkb2VzIG5vdCByZXN0cmljdCB0cnVzdGVkIHB1Ymxpc2hpbmcgdG8gR2l0SHViLWhvc3RlZFxuICAgKiBydW5uZXJzIC0tIHRydXN0IGlzIGJvdW5kIHRvIHRoZSB3b3JrZmxvdyByZWYsIGFuZCB0aGUgT0lEQyB0b2tlbiBpcyBtaW50ZWRcbiAgICogZnJvbSBBQ1RJT05TX0lEX1RPS0VOX1JFUVVFU1RfVVJMLCB3aGljaCBpcyBhdmFpbGFibGUgb24gYW55IHJ1bm5lciB3aXRoXG4gICAqIGBpZC10b2tlbjogd3JpdGVgLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5weXBpLm9yZy90cnVzdGVkLXB1Ymxpc2hlcnMvXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHB5cGlUcnVzdGVkUHVibGlzaGluZz86IGJvb2xlYW47XG59XG5cbmNvbnN0IGdldE1hdmVuTmFtZSA9IChwcm92aWRlck5hbWU6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gIHJldHVybiBbXCJudWxsXCIsIFwicmFuZG9tXCJdLmluY2x1ZGVzKHByb3ZpZGVyTmFtZSlcbiAgICA/IGAke3Byb3ZpZGVyTmFtZX1fcHJvdmlkZXJgXG4gICAgOiBwcm92aWRlck5hbWUucmVwbGFjZSgvLS9naSwgXCJfXCIpO1xufTtcblxuY29uc3QgZ2l0aHViQWN0aW9uUGlubmVkVmVyc2lvbnMgPSB7XG4gIFwiYWN0aW9ucy9jaGVja291dFwiOiBcImRlMGZhYzJlNDUwMGRhYmUwMDA5ZTY3MjE0ZmY1ZjU0NDdjZTgzZGRcIiwgLy8gdjYuMC4yXG4gIFwiYWN0aW9ucy9kb3dubG9hZC1hcnRpZmFjdFwiOiBcIjNlNWY0NWIyY2ZiOTE3MjA1NGI0MDg3YTQwZThlMGI1YTU0NjFlN2NcIiwgLy8gdjguMC4xXG4gIFwiYWN0aW9ucy9naXRodWItc2NyaXB0XCI6IFwiZWQ1OTc0MTFkOGY5MjQwNzNmOThkZmM1YzY1YTIzYTIzMjVmMzRjZFwiLCAvLyB2OC4wLjBcbiAgXCJhY3Rpb25zL3NldHVwLWRvdG5ldFwiOiBcImMyZmEwOWY0YmRlNWViYjlkMTc3N2NmMjgyNjJhM2ViM2RiM2NlZDdcIiwgLy8gdjUuMi4wXG4gIFwiYWN0aW9ucy9zZXR1cC1nb1wiOiBcIjRhMzYwMTEyMWRkMDFkMTYyNmExZTIzZTM3MjExZTMyNTRjMWMwNmNcIiwgLy8gdjYuNC4wXG4gIFwiYWN0aW9ucy9zZXR1cC1qYXZhXCI6IFwiYmU2NjZjMmZjZDI3ZWM4MDk3MDNkZWM1MGU1MDhjMmZkYzdmNjY1NFwiLCAvLyB2NS4yLjBcbiAgXCJhY3Rpb25zL3NldHVwLW5vZGVcIjogXCI0OGI1NWEwMTFiZGE5ZjVkNmFlYjRjMmQ5YzczNjJlOGRhZTQwNDFlXCIsIC8vIHY2LjQuMFxuICBcImFjdGlvbnMvc2V0dXAtcHl0aG9uXCI6IFwiYTMwOWZmOGI0MjZiNThlYzBlMmE0NWYwZjg2OWQ0Njg4OWQwMjQwNVwiLCAvLyB2Ni4yLjBcbiAgXCJhY3Rpb25zL3N0YWxlXCI6IFwiYjVkNDFkNGUxZDVkY2VlYTEwZTcxMDQ3ODZiNzM2MjRjMThhMTkwZlwiLCAvLyB2MTAuMi4wXG4gIFwiYWN0aW9ucy91cGxvYWQtYXJ0aWZhY3RcIjogXCIwNDNmYjQ2ZDFhOTNjNzdhYWU2NTZlN2MxYzY0YTg3NWQxZmM2YTBhXCIsIC8vIHY3LjAuMVxuICBcImFtYW5ubi9hY3Rpb24tc2VtYW50aWMtcHVsbC1yZXF1ZXN0XCI6XG4gICAgXCI0OGYyNTYyODRiZDQ2Y2RhYWIxMDQ4YzM3MjEzNjBlODA4MzM1ZDUwXCIsIC8vIHY2LjEuMVxuICBcImRlc3NhbnQvbG9jay10aHJlYWRzXCI6IFwiNzI2NmE3Y2U1YzFkZjAxYjFjNmRiODViZjhjZDg2YzczN2RhZGJlN1wiLCAvLyB2Ni4wLjBcbiAgXCJoYXNoaWNvcnAvc2V0dXAtY29weXdyaXRlXCI6IFwiMzI2MzhkYTJkNGU4MWQ1NmEwNzY0YWExNTQ3ODgyZmM0ZDIwOTYzNlwiLCAvLyB2MS4xLjNcbiAgXCJoYXNoaWNvcnAvc2V0dXAtdGVycmFmb3JtXCI6IFwiNWU4ZGJmM2M2ZDlkZWFmNDE5M2NhN2E4ZmIyM2YyYWM4M2JiNmM4NVwiLCAvLyB2NC4wLjBcbiAgXCJpbWpvaG5iby9pc3N1ZS1ib3RcIjogXCIzMTg4YzZjZTA2MjQ5MjA2NzA5ZDNiMWYyNzRkMGQ0YzVhNTIxNjAxXCIsIC8vIHYzLjQuNVxuICBcInBldGVyLWV2YW5zL2NyZWF0ZS1wdWxsLXJlcXVlc3RcIjogXCI1ZjY5NzhmYWYwODlkNGQyMGIwMGM3NzY2OTg5ZDA3NmJiMmZjN2YxXCIsIC8vIHY4LjEuMVxuICBcInNsYWNrYXBpL3NsYWNrLWdpdGh1Yi1hY3Rpb25cIjogXCI0NWE4OGI5NTgxYmZhYjI1NjZkYzg4MWUyY2Q2NmQzMzRlNjIxZTJjXCIsIC8vIHYzLjAuM1xuICBcImFjdGlvbnMvY3JlYXRlLWdpdGh1Yi1hcHAtdG9rZW5cIjogXCIyOTgyNGU2OWY1NDYxMjEzM2U3NmY3ZWFhYzcyNmVlZjZjODc1YmFmXCIsIC8vIHYyLjIuMVxuICAvLyBwcm9qZW4gZW1pdHMgdGhpcyB1bnBpbm5lZCBhcyBgcG5wbS9hY3Rpb24tc2V0dXBAdjVgIG9uY2UgcGFja2FnZU1hbmFnZXIgaXMgcG5wbVxuICBcInBucG0vYWN0aW9uLXNldHVwXCI6IFwiZmMwNmJjMTI1N2YzMzlkMWQ1ZDhiM2ExOWE4Y2FlNTM4OGI1NTMyMFwiLCAvLyB2NVxufTtcblxuZXhwb3J0IGNsYXNzIENka3RuUHJvdmlkZXJQcm9qZWN0IGV4dGVuZHMgY2RrLkpzaWlQcm9qZWN0IHtcbiAgY29uc3RydWN0b3Iob3B0aW9uczogQ2RrdG5Qcm92aWRlclByb2plY3RPcHRpb25zKSB7XG4gICAgY29uc3QgY2RrdG5WZXJzaW9uID0gb3B0aW9ucy5jZGt0blZlcnNpb24gPz8gb3B0aW9ucy5jZGt0ZlZlcnNpb247XG4gICAgYXNzZXJ0KFxuICAgICAgY2RrdG5WZXJzaW9uLFxuICAgICAgXCJFaXRoZXIgY2RrdG5WZXJzaW9uIG9yIGNka3RmVmVyc2lvbiBtdXN0IGJlIHByb3ZpZGVkXCJcbiAgICApO1xuXG4gICAgY29uc3Qge1xuICAgICAgdGVycmFmb3JtUHJvdmlkZXIsXG4gICAgICB3b3JrZmxvd0NvbnRhaW5lckltYWdlLFxuICAgICAgY29uc3RydWN0c1ZlcnNpb24sXG4gICAgICBtaW5Ob2RlVmVyc2lvbixcbiAgICAgIGpzaWlWZXJzaW9uLFxuICAgICAgdHlwZXNjcmlwdFZlcnNpb24sXG4gICAgICBpc0RlcHJlY2F0ZWQsXG4gICAgICBkZXByZWNhdGlvbkRhdGUsXG4gICAgICAvLyBUT0RPOiBDb25maXJtIGRlZmF1bHQgQXV0aG9yIE5hbWVcbiAgICAgIGF1dGhvck5hbWUgPSBcIkNESyBUZXJyYWluIE1haW50YWluZXJzXCIsXG4gICAgICBhdXRob3JBZGRyZXNzID0gXCJodHRwczovL2Nka3RuLmlvXCIsXG4gICAgICBuYW1lc3BhY2UgPSBcImNka3RuXCIsXG4gICAgICBnaXRodWJOYW1lc3BhY2UgPSBcImNka3RuLWlvXCIsXG4gICAgICBudWdldE9yZyA9IFwiSW8uQ2RrdG5cIixcbiAgICAgIG1hdmVuT3JnID0gXCJjZGt0blwiLFxuICAgICAgbnBtVHJ1c3RlZFB1Ymxpc2hpbmcsXG4gICAgICBweXBpVHJ1c3RlZFB1Ymxpc2hpbmcsXG4gICAgfSA9IG9wdGlvbnM7XG5cbiAgICBjb25zdCBbZnFwcm92aWRlck5hbWUsIHByb3ZpZGVyVmVyc2lvbl0gPSB0ZXJyYWZvcm1Qcm92aWRlci5zcGxpdChcIkBcIik7XG4gICAgY29uc3QgcHJvdmlkZXJOYW1lID0gZnFwcm92aWRlck5hbWUuc3BsaXQoXCIvXCIpLnBvcCgpO1xuICAgIGFzc2VydChwcm92aWRlck5hbWUsIGAke3RlcnJhZm9ybVByb3ZpZGVyfSBkb2Vzbid0IHNlZW0gdG8gYmUgdmFsaWRgKTtcbiAgICBhc3NlcnQoXG4gICAgICAhcHJvdmlkZXJOYW1lLmVuZHNXaXRoKFwiLWdvXCIpLFxuICAgICAgXCJwcm92aWRlck5hbWUgbWF5IG5vdCBlbmQgd2l0aCAnLWdvJyBhcyB0aGlzIGNhbiBjb25mbGljdCB3aXRoIHJlcG9zIGZvciBnbyBwYWNrYWdlc1wiXG4gICAgKTtcblxuICAgIGNvbnN0IG51Z2V0TmFtZSA9IGAke251Z2V0T3JnfS5Qcm92aWRlcnMuJHtwYXNjYWxDYXNlKHByb3ZpZGVyTmFtZSl9YDtcbiAgICBjb25zdCBtYXZlbkdyb3VwSWQgPSBvcHRpb25zLm1hdmVuR3JvdXBJZCA/PyBgaW8uJHttYXZlbk9yZ31gO1xuICAgIGNvbnN0IG1hdmVuTmFtZSA9IGAke21hdmVuR3JvdXBJZH0ucHJvdmlkZXJzLiR7Z2V0TWF2ZW5OYW1lKHByb3ZpZGVyTmFtZSl9YDtcbiAgICBjb25zdCByZXBvc2l0b3J5ID0gYCR7Z2l0aHViTmFtZXNwYWNlfS8ke25hbWVzcGFjZX0tcHJvdmlkZXItJHtwcm92aWRlck5hbWUucmVwbGFjZShcbiAgICAgIC8tL2csXG4gICAgICBcIlwiXG4gICAgKX1gO1xuICAgIGNvbnN0IHJlcG9zaXRvcnlVcmwgPSBgZ2l0aHViLmNvbS8ke3JlcG9zaXRvcnl9YDtcblxuICAgIGNvbnN0IHBhY2thZ2VJbmZvOiBQYWNrYWdlSW5mbyA9IHtcbiAgICAgIG5wbToge1xuICAgICAgICBuYW1lOiBgQCR7bmFtZXNwYWNlfS9wcm92aWRlci0ke3Byb3ZpZGVyTmFtZX1gLFxuICAgICAgfSxcbiAgICAgIHB5dGhvbjoge1xuICAgICAgICAvLyBkaXN0TmFtZTogYCR7Z2l0aHViTmFtZXNwYWNlfS0ke25hbWVzcGFjZX0tcHJvdmlkZXItJHtwcm92aWRlck5hbWUucmVwbGFjZShcbiAgICAgICAgZGlzdE5hbWU6IGAke25hbWVzcGFjZX0tcHJvdmlkZXItJHtwcm92aWRlck5hbWUucmVwbGFjZSgvLS9naSwgXCJfXCIpfWAsXG4gICAgICAgIC8vIG1vZHVsZTogYCR7Z2l0aHViTmFtZXNwYWNlfV8ke25hbWVzcGFjZX1fcHJvdmlkZXJfJHtwcm92aWRlck5hbWUucmVwbGFjZShcbiAgICAgICAgbW9kdWxlOiBgJHtuYW1lc3BhY2V9X3Byb3ZpZGVyXyR7cHJvdmlkZXJOYW1lLnJlcGxhY2UoLy0vZ2ksIFwiX1wiKX1gLFxuICAgICAgICB0cnVzdGVkUHVibGlzaGluZzogcHlwaVRydXN0ZWRQdWJsaXNoaW5nID8/IGZhbHNlLFxuICAgICAgfSxcbiAgICAgIHB1Ymxpc2hUb051Z2V0OiB7XG4gICAgICAgIGRvdE5ldE5hbWVzcGFjZTogbnVnZXROYW1lLFxuICAgICAgICBwYWNrYWdlSWQ6IG51Z2V0TmFtZSxcbiAgICAgIH0sXG4gICAgICBwdWJsaXNoVG9NYXZlbjoge1xuICAgICAgICBqYXZhUGFja2FnZTogbWF2ZW5OYW1lLFxuICAgICAgICBtYXZlbkdyb3VwSWQ6IG1hdmVuR3JvdXBJZCxcbiAgICAgICAgbWF2ZW5BcnRpZmFjdElkOiBgJHtuYW1lc3BhY2V9LXByb3ZpZGVyLSR7cHJvdmlkZXJOYW1lfWAsXG4gICAgICB9LFxuICAgICAgcHVibGlzaFRvR286IHtcbiAgICAgICAgbW9kdWxlTmFtZTogYCR7cmVwb3NpdG9yeVVybH0tZ29gLFxuICAgICAgICBnaXRVc2VyRW1haWw6IFwiZ2l0aHViLXRlYW0tY2RrLXRlcnJhaW5AY2RrdG4uaW9cIixcbiAgICAgICAgZ2l0VXNlck5hbWU6IFwidGVhbS1jZGstdGVycmFpblwiLFxuICAgICAgICBwYWNrYWdlTmFtZTogcHJvdmlkZXJOYW1lLnJlcGxhY2UoLy0vZywgXCJcIiksXG4gICAgICAgIC8vIEluIG9yZGVyIHRvIHVzZSB0aGUgY29weXdyaXRlIGFjdGlvbiwgd2UgbmVlZCB0byByZWJ1aWxkIHRoZSBmdWxsIHByZS1wdWJsaXNoIHN0ZXBzIHdvcmtmbG93IHVuZm9ydHVuYXRlbHlcbiAgICAgICAgLy8gSWYgc29tZW9uZSBrbm93cyBhIGJldHRlciB3YXkgdG8gZG8gdGhpcyBtdXRhdGlvbiB3aXRoIG1pbmltYWwgY3VzdG9tIGNvZGUsIHBsZWFzZSBkbyBzb1xuICAgICAgICBwcmVQdWJsaXNoU3RlcHM6IFtcbiAgICAgICAgICAvLyBOT1RFOiB0aGUgXCJTZXR1cCBwbnBtXCIgc3RlcCB0aGlzIGpvYiBuZWVkcyBpcyBpbnNlcnRlZCBieVxuICAgICAgICAgIC8vIEdvUHVibGlzaEpvYlBhdGNoIGF0IHN5bnRoIHRpbWUsIG5vdCBoZXJlIC0tIGl0IGhhcyB0byByZWFkXG4gICAgICAgICAgLy8gYHRoaXMucGFja2FnZS5wbnBtVmVyc2lvbmAsIHdoaWNoIGRvZXMgbm90IGV4aXN0IHlldCBhdCBzdXBlcigpLlxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiQ2hlY2tvdXRcIixcbiAgICAgICAgICAgIHVzZXM6IFwiYWN0aW9ucy9jaGVja291dFwiLFxuICAgICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgICBwYXRoOiBcIi5yZXBvXCIsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJJbnN0YWxsIERlcGVuZGVuY2llc1wiLFxuICAgICAgICAgICAgcnVuOiBcImNkIC5yZXBvICYmIHBucG0gaW5zdGFsbCAtLWZyb3plbi1sb2NrZmlsZVwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJFeHRyYWN0IGJ1aWxkIGFydGlmYWN0XCIsXG4gICAgICAgICAgICBydW46IFwidGFyIC0tc3RyaXAtY29tcG9uZW50cz0xIC14enZmIGRpc3QvanMvKi50Z3ogLUMgLnJlcG9cIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiTW92ZSBidWlsZCBhcnRpZmFjdCBvdXQgb2YgdGhlIHdheVwiLFxuICAgICAgICAgICAgcnVuOiBcIm12IGRpc3QgZGlzdC5vbGRcIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiQ3JlYXRlIGdvIGFydGlmYWN0XCIsXG4gICAgICAgICAgICBydW46IFwiY2QgLnJlcG8gJiYgbnB4IHByb2plbiBwYWNrYWdlOmdvXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIlNldHVwIENvcHl3cml0ZSB0b29sXCIsXG4gICAgICAgICAgICB1c2VzOiBcImhhc2hpY29ycC9zZXR1cC1jb3B5d3JpdGVcIixcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiQ29weSBjb3B5d3JpdGUgaGNsIGZpbGVcIixcbiAgICAgICAgICAgIHJ1bjogXCJjcCAucmVwby8uY29weXdyaXRlLmhjbCAucmVwby9kaXN0L2dvLy5jb3B5d3JpdGUuaGNsXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIkFkZCBoZWFkZXJzIHVzaW5nIENvcHl3cml0ZSB0b29sXCIsXG4gICAgICAgICAgICBydW46IFwiY2QgLnJlcG8vZGlzdC9nbyAmJiBjb3B5d3JpdGUgaGVhZGVyc1wiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJSZW1vdmUgY29weXdyaXRlIGhjbCBmaWxlXCIsXG4gICAgICAgICAgICBydW46IFwicm0gLWYgLnJlcG8vZGlzdC9nby8uY29weXdyaXRlLmhjbFwiLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJSZW1vdmUgc29tZSB0ZXh0IGZyb20gdGhlIFJFQURNRSB0aGF0IGRvZXNuJ3QgYXBwbHkgdG8gR29cIixcbiAgICAgICAgICAgIHJ1bjogW1xuICAgICAgICAgICAgICBcInNlZCAtaSAncy8jIENES1ROIHByZWJ1aWx0IGJpbmRpbmdzIGZvci8jIENES1ROIEdvIGJpbmRpbmdzIGZvci8nIC5yZXBvL2Rpc3QvZ28vKi9SRUFETUUubWRcIixcbiAgICAgICAgICAgICAgLy8gQHNlZSBodHRwczovL3N0YWNrb3ZlcmZsb3cuY29tL2EvNDk1MTE5NDlcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZXR0aWVyL3ByZXR0aWVyXG4gICAgICAgICAgICAgIC8vIHByZXR0aWVyLWlnbm9yZVxuICAgICAgICAgICAgICBgc2VkIC1pIC1lICcvIyMgJHtpc0RlcHJlY2F0ZWQgPyBcIkRlcHJlY2F0ZWRcIiA6IFwiQXZhaWxhYmxlXCJ9IFBhY2thZ2VzLywvIyMjIEdvLyFiJyAtZSAnLyMjIyBHby8hZDtwOyBzLyMjIyBHby8jIyBHbyBQYWNrYWdlLycgLWUgJ2QnIC5yZXBvL2Rpc3QvZ28vKi9SRUFETUUubWRgLFxuICAgICAgICAgICAgICAvLyBzZWQgLWUgaXMgYmxhY2sgbWFnaWMgYW5kIGZvciB3aGF0ZXZlciByZWFzb24gdGhlIHN0cmluZyByZXBsYWNlIGRvZXNuJ3Qgd29yayBzbyBsZXQncyB0cnkgaXQgYWdhaW46XG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBwcmV0dGllci9wcmV0dGllclxuICAgICAgICAgICAgICAvLyBwcmV0dGllci1pZ25vcmVcbiAgICAgICAgICAgICAgYHNlZCAtaSAncy8jIyMgR28vIyMgJHtpc0RlcHJlY2F0ZWQgPyBcIkRlcHJlY2F0ZWRcIiA6IFwiR29cIn0gUGFja2FnZS8nIC5yZXBvL2Rpc3QvZ28vKi9SRUFETUUubWRgLFxuICAgICAgICAgICAgICAvLyBKdXN0IHN0cmFpZ2h0IHVwIGRlbGV0ZSB0aGVzZSBmdWxsIGxpbmVzIGFuZCBldmVyeXRoaW5nIGluIGJldHdlZW4gdGhlbTpcbiAgICAgICAgICAgICAgXCJzZWQgLWkgLWUgJy9BUEkudHlwZXNjcmlwdC5tZC8sL1lvdSBjYW4gYWxzbyB2aXNpdCBhIGhvc3RlZCB2ZXJzaW9uLyFiJyAtZSAnZCcgLnJlcG8vZGlzdC9nby8qL1JFQURNRS5tZFwiLFxuICAgICAgICAgICAgICBgc2VkIC1pICdzfEZpbmQgYXV0by1nZW5lcmF0ZWQgZG9jcyBmb3IgdGhpcyBwcm92aWRlciBoZXJlOnxGaW5kIGF1dG8tZ2VuZXJhdGVkIGRvY3MgZm9yIHRoaXMgcHJvdmlkZXIgW2hlcmVdKGh0dHBzOi8vJHtyZXBvc2l0b3J5VXJsfS9ibG9iL21haW4vZG9jcy9BUEkuZ28ubWQpLnwnIC5yZXBvL2Rpc3QvZ28vKi9SRUFETUUubWRgLFxuICAgICAgICAgICAgICAvLyBKdXN0IHN0cmFpZ2h0IHVwIGRlbGV0ZSB0aGVzZSBmdWxsIGxpbmVzIGFuZCBldmVyeXRoaW5nIGluIGJldHdlZW4gdGhlbTpcbiAgICAgICAgICAgICAgXCJzZWQgLWkgLWUgJy8jIyMgUHJvdmlkZXIgVmVyc2lvbi8sL1RoZSBwcm92aWRlciB2ZXJzaW9uIGNhbiBiZSBhZGp1c3RlZC8hYicgLWUgJ2QnIC5yZXBvL2Rpc3QvZ28vKi9SRUFETUUubWRcIixcbiAgICAgICAgICAgIF0uam9pbihcIlxcblwiKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6IFwiQ29weSB0aGUgUkVBRE1FIGZpbGUgdG8gdGhlIHBhcmVudCBkaXJlY3RvcnlcIixcbiAgICAgICAgICAgIHJ1bjogXCJjcCAucmVwby9kaXN0L2dvLyovUkVBRE1FLm1kIC5yZXBvL2Rpc3QvZ28vUkVBRE1FLm1kXCIsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiBcIkNvbGxlY3QgZ28gQXJ0aWZhY3RcIixcbiAgICAgICAgICAgIHJ1bjogXCJtdiAucmVwby9kaXN0IGRpc3RcIixcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29uc3Qgd29ya2Zsb3dSdW5zT24gPSBvcHRpb25zLnVzZUN1c3RvbUdpdGh1YlJ1bm5lclxuICAgICAgPyBbXCJkZXBvdC11YnVudHUtMjQuMDQtOFwiXSAvLyA4IGNvcmUsIDMyIEdCXG4gICAgICA6IFtcInVidW50dS1sYXRlc3RcIl07IC8vIDcgR0JcblxuICAgIHN1cGVyKHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBhdXRob3JBZGRyZXNzLFxuICAgICAgYXV0aG9yTmFtZSxcbiAgICAgIG1pbk5vZGVWZXJzaW9uLFxuICAgICAgd29ya2Zsb3dDb250YWluZXJJbWFnZSxcbiAgICAgIHdvcmtmbG93UnVuc09uLFxuICAgICAgbGljZW5zZWQ6IGZhbHNlLCAvLyB3ZSBkbyBzdXBwbHkgb3VyIG93biBsaWNlbnNlIGZpbGUgd2l0aCBhIGN1c3RvbSBoZWFkZXJcbiAgICAgIHJlbGVhc2VUb05wbTogdHJ1ZSxcbiAgICAgIG5wbVRydXN0ZWRQdWJsaXNoaW5nOiBucG1UcnVzdGVkUHVibGlzaGluZyA/PyBmYWxzZSxcbiAgICAgIG5hbWU6IHBhY2thZ2VJbmZvLm5wbS5uYW1lLFxuICAgICAgZGVzY3JpcHRpb246IGBQcmVidWlsdCAke3Byb3ZpZGVyTmFtZX0gUHJvdmlkZXIgZm9yIENESyBUZXJyYWluIChjZGt0bilgLFxuICAgICAga2V5d29yZHM6IFtcbiAgICAgICAgXCJjZGt0blwiLFxuICAgICAgICBcImNkay10ZXJyYWluXCIsXG4gICAgICAgIFwiY2RrdGZcIixcbiAgICAgICAgXCJ0ZXJyYWZvcm1cIixcbiAgICAgICAgXCJvcGVudG9mdVwiLFxuICAgICAgICBcImNka1wiLFxuICAgICAgICBcInByb3ZpZGVyXCIsXG4gICAgICAgIHByb3ZpZGVyTmFtZSxcbiAgICAgIF0sXG4gICAgICBzYW1wbGVDb2RlOiBmYWxzZSxcbiAgICAgIGplc3Q6IGZhbHNlLFxuICAgICAgYXV0aG9yT3JnYW5pemF0aW9uOiB0cnVlLFxuICAgICAgZGVmYXVsdFJlbGVhc2VCcmFuY2g6IFwibWFpblwiLFxuICAgICAgcmVwb3NpdG9yeTogYGh0dHBzOi8vZ2l0aHViLmNvbS8ke3JlcG9zaXRvcnl9LmdpdGAsXG4gICAgICBlc2xpbnQ6IGZhbHNlLFxuICAgICAgcGFja2FnZU1hbmFnZXI6IE5vZGVQYWNrYWdlTWFuYWdlci5QTlBNLFxuICAgICAgLy8gUHJvdmlkZXIgcmVwb3MgcnVuIGpzaWktcGFjbWFrIG92ZXIgYnVuZGxlZCBkZXBzIGV4YWN0bHkgYXMgdGhpcyBwcm9qZWN0XG4gICAgICAvLyBkb2VzLCBzbyB0aGV5IG5lZWQgdGhlIGhvaXN0ZWQgbGlua2VyIHRvbyAtLSBzZWUgdGhlIG5vdGUgaW4gLnByb2plbnJjLnRzLlxuICAgICAgLy8gSXQgbXVzdCBiZSBpbiBwbnBtLXdvcmtzcGFjZS55YW1sLCBub3QgLm5wbXJjLCBvciBwbnBtIDExIGlnbm9yZXMgaXQuXG4gICAgICBwbnBtT3B0aW9uczoge1xuICAgICAgICB3b3Jrc3BhY2VZYW1sT3B0aW9uczoge1xuICAgICAgICAgIG5vZGVMaW5rZXI6IFBucG1Xb3Jrc3BhY2VZYW1sU2NoZW1hTm9kZUxpbmtlci5IT0lTVEVELFxuICAgICAgICAgIGF1ZGl0Q29uZmlnOiB7XG4gICAgICAgICAgICAvLyBHSFNBLXZmajctOGNqdy1wNnhtIChicmFjZXMgc3RhY2sgZXhoYXVzdGlvbikgaGFzIG5vIHBhdGNoZWQgdmVyc2lvblxuICAgICAgICAgICAgLy8gYXQgYWxsIC0tIGFmZmVjdGVkIGlzIFwiPD0zLjAuM1wiIGFuZCAzLjAuMyBpcyB0aGUgbmV3ZXN0IHJlbGVhc2UuIFJlYWNoZWRcbiAgICAgICAgICAgIC8vIHZpYSBqc2lpLWRvY2dlbiA+IGZhc3QtZ2xvYiA+IG1pY3JvbWF0Y2g7IGRldiB0b29saW5nLCBuZXZlciBzaGlwcGVkLlxuICAgICAgICAgICAgaWdub3JlR2hzYXM6IFtcIkdIU0EtdmZqNy04Y2p3LXA2eG1cIl0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICAvLyBMZXQgZmlyc3QtcGFydHkgcmVsZWFzZXMgc2tpcCB0aGUgYGNvb2xkb3duYCBiZWxvdyAtLSBzZWUgdGhlIG5vdGUgb25cbiAgICAgICAgICAvLyB0aGUgY29uc3RhbnQuIFRoaXJkLXBhcnR5IGRlcHMgYXJlIHVuYWZmZWN0ZWQuXG4gICAgICAgICAgbWluaW11bVJlbGVhc2VBZ2VFeGNsdWRlOiBNSU5JTVVNX1JFTEVBU0VfQUdFX0VYQ0xVREUsXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgICAgZGVwc1VwZ3JhZGU6ICFpc0RlcHJlY2F0ZWQsXG4gICAgICBkZXBzVXBncmFkZU9wdGlvbnM6IHtcbiAgICAgICAgY29vbGRvd246IENPT0xET1dOX0RBWVMsXG4gICAgICAgIHdvcmtmbG93T3B0aW9uczoge1xuICAgICAgICAgIGxhYmVsczogW1wiYXV0b21lcmdlXCIsIFwiYXV0by1hcHByb3ZlXCIsIFwiZGVwZW5kZW5jaWVzXCJdLFxuICAgICAgICAgIHNjaGVkdWxlOiBVcGdyYWRlRGVwZW5kZW5jaWVzU2NoZWR1bGUuV0VFS0xZLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIGF1ZGl0RGVwczogIWlzRGVwcmVjYXRlZCxcbiAgICAgIGF1ZGl0RGVwc09wdGlvbnM6IHtcbiAgICAgICAgbGV2ZWw6IEFVRElUX0xFVkVMLFxuICAgICAgICBydW5PbjogXCJidWlsZFwiLFxuICAgICAgfSxcbiAgICAgIHB1Ymxpc2hUb1B5cGk6IHBhY2thZ2VJbmZvLnB5dGhvbixcbiAgICAgIHB1Ymxpc2hUb051Z2V0OiBwYWNrYWdlSW5mby5wdWJsaXNoVG9OdWdldCxcbiAgICAgIHB1Ymxpc2hUb01hdmVuOiBwYWNrYWdlSW5mby5wdWJsaXNoVG9NYXZlbixcbiAgICAgIHB1Ymxpc2hUb0dvOiBwYWNrYWdlSW5mby5wdWJsaXNoVG9HbyxcbiAgICAgIHJlbGVhc2VGYWlsdXJlSXNzdWU6IHRydWUsXG4gICAgICBwZWVyRGVwZW5kZW5jeU9wdGlvbnM6IHtcbiAgICAgICAgcGlubmVkRGV2RGVwZW5kZW5jeTogZmFsc2UsXG4gICAgICB9LFxuICAgICAgd29ya2Zsb3dHaXRJZGVudGl0eToge1xuICAgICAgICBuYW1lOiBcInRlYW0tY2RrLXRlcnJhaW5cIixcbiAgICAgICAgZW1haWw6IFwiZ2l0aHViLXRlYW0tY2RrLXRlcnJhaW5AY2RrdG4uaW9cIixcbiAgICAgIH0sXG4gICAgICBtaW5NYWpvclZlcnNpb246IE1JTl9NQUpPUl9WRVJTSU9OLFxuICAgICAgc3RhbGU6IHRydWUsXG4gICAgICBzdGFsZU9wdGlvbnM6IHtcbiAgICAgICAgaXNzdWVzOiB7XG4gICAgICAgICAgc3RhbGVMYWJlbDogXCJzdGFsZVwiLFxuICAgICAgICAgIGRheXNCZWZvcmVTdGFsZTogNDUsXG4gICAgICAgICAgc3RhbGVNZXNzYWdlOlxuICAgICAgICAgICAgXCI0NSBkYXlzIGhhdmUgcGFzc2VkIHNpbmNlIHRoaXMgaXNzdWUgd2FzIG9wZW5lZCwgYW5kIEkgYXNzdW1lIG90aGVyIHB1Ymxpc2hlcyBoYXZlIHN1Y2NlZWRlZCBpbiB0aGUgbWVhbnRpbWUuIFwiICtcbiAgICAgICAgICAgIFwiSWYgbm8gb25lIHJlbW92ZXMgdGhlIGBzdGFsZWAgbGFiZWwgb3IgY29tbWVudHMsIEknbSBnb2luZyB0byBhdXRvLWNsb3NlIHRoaXMgaXNzdWUgaW4gMTQgZGF5cy5cIixcbiAgICAgICAgICBkYXlzQmVmb3JlQ2xvc2U6IDE0LFxuICAgICAgICAgIGNsb3NlTWVzc2FnZTpcbiAgICAgICAgICAgIFwiMiBtb250aHMgaGF2ZSBwYXNzZWQsIHNvIEknbSBjbG9zaW5nIHRoaXMgaXNzdWUgd2l0aCB0aGUgYXNzdW1wdGlvbiB0aGF0IG90aGVyIHB1Ymxpc2hlcyBoYXZlIHN1Y2NlZWRlZCBpbiB0aGUgbWVhbnRpbWUuXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHB1bGxSZXF1ZXN0OiB7XG4gICAgICAgICAgc3RhbGVMYWJlbDogXCJzdGFsZVwiLFxuICAgICAgICAgIGRheXNCZWZvcmVTdGFsZTogMSxcbiAgICAgICAgICBzdGFsZU1lc3NhZ2U6IGBDbG9zaW5nIHRoaXMgUFIsIGlmIGl0IGhhcyBub3QgbWVyZ2VkIHRoZXJlIGlzIG1vc3QgbGlrZWx5IGEgQ0kgb3IgQ0RLVE4gaXNzdWUgcHJldmVudGluZyBpdCBmcm9tIG1lcmdpbmcuIElmIHRoaXMgaGFzIGJlZW4gYSBtYW51YWwgUFIsIHBsZWFzZSByZW9wZW4gaXQgYW5kIGFkZCB0aGUgXFxgbm8tYXV0by1jbG9zZVxcYCBsYWJlbCB0byBwcmV2ZW50IHRoaXMgZnJvbSBoYXBwZW5pbmcgYWdhaW4uYCxcbiAgICAgICAgICBkYXlzQmVmb3JlQ2xvc2U6IDAsXG4gICAgICAgICAgZXhlbXB0TGFiZWxzOiBbXCJuby1hdXRvLWNsb3NlXCJdLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHB1bGxSZXF1ZXN0VGVtcGxhdGU6IGZhbHNlLFxuICAgICAgZG9jZ2VuOiBmYWxzZSxcbiAgICAgIGdpdGh1Yk9wdGlvbnM6IHtcbiAgICAgICAgcHJvamVuQ3JlZGVudGlhbHM6IGdpdGh1Yi5HaXRodWJDcmVkZW50aWFscy5mcm9tQXBwKCksXG4gICAgICAgIC8vIHByb2plbiA+PTAuMTAwIG1vdmVkIHRoZSBgbWVyZ2lmeWAgcHJvamVjdCBvcHRpb24gdW5kZXIgZ2l0aHViT3B0aW9uc1xuICAgICAgICBtZXJnaWZ5OiBmYWxzZSxcbiAgICAgIH0sXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZERldkRlcHMoXG4gICAgICBcImRvdC1wcm9wQF41LjIuMFwiLFxuICAgICAgLy8gXjEuMS4wIGNvdWxkIG5ldmVyIGxlYXZlIHRoZSAxLnggbGluZSwgd2hpY2ggZHJhZ3MgaW4gYW4gb2xkXG4gICAgICAvLyBAYWN0aW9ucy9odHRwLWNsaWVudCBhbmQgd2l0aCBpdCB1bmRpY2kgPDYuMjQuMCAtLSB0aHJlZSBoaWdoIGFkdmlzb3JpZXNcbiAgICAgIC8vIChHSFNBLXZybTYtOHZwdi1xdjhxLCBHSFNBLXY5cDktaGZqMi1oY3c4LCBhbmQgdGhlIDw2LjI3LjAgZnJhZ21lbnQtY291bnRcbiAgICAgIC8vIERvUykuIDMueCBkZXBlbmRzIG9uIEBhY3Rpb25zL2h0dHAtY2xpZW50IF40IC0+IHVuZGljaSBeNi4yMy4wLCByZXNvbHZpbmdcbiAgICAgIC8vIHRvIDYuMjguMC4gTk9URTogMy54IGlzIEVTTS1vbmx5LCBzbyBjaGVjay1mb3ItdXBncmFkZXMuanMgbG9hZHMgaXQgd2l0aCBhXG4gICAgICAvLyBkeW5hbWljIGltcG9ydCByYXRoZXIgdGhhbiBgcmVxdWlyZWAuXG4gICAgICBcIkBhY3Rpb25zL2NvcmVAXjMuMC4wXCIsXG4gICAgICBcIkBhY3Rpb24tdmFsaWRhdG9yL2NvcmVcIixcbiAgICAgIFwiQGFjdGlvbi12YWxpZGF0b3IvY2xpXCJcbiAgICApO1xuXG4gICAgLy8gRGVmYXVsdCBtZW1vcnkgaXMgN0dCOiBodHRwczovL2RvY3MuZ2l0aHViLmNvbS9lbi9hY3Rpb25zL3VzaW5nLWdpdGh1Yi1ob3N0ZWQtcnVubmVycy9hYm91dC1naXRodWItaG9zdGVkLXJ1bm5lcnMjc3VwcG9ydGVkLXJ1bm5lcnMtYW5kLWhhcmR3YXJlLXJlc291cmNlc1xuICAgIC8vIEN1c3RvbSBSdW5uZXJzIHdlIHVzZSBoYXZlIDMyR0Igb2YgbWVtb3J5LlxuICAgIC8vXG4gICAgLy8gVGhlIGN1c3RvbS1ydW5uZXIgY2VpbGluZyBoYXMgdG8gc2l0IGJlbG93IHRoZSBtZW1vcnkgYSBqb2IgY2FuIEFDVFVBTExZXG4gICAgLy8gZ2V0LCBvciBWOCBuZXZlciBmZWVscyBwcmVzc3VyZSB0byBjb2xsZWN0IGFuZCB0aGUga2VybmVsIE9PTS1raWxscyB0aGVcbiAgICAvLyBwcm9jZXNzIGZpcnN0LiBUaGUgc2lnbmF0dXJlIGlzIGRpc3RpbmN0aXZlOiB0aGUgc3RlcCBzaXRzIGluX3Byb2dyZXNzIHdpdGhcbiAgICAvLyBhIG51bGwgY29tcGxldGVkQXQgKGtpbGxlZCBwcm9jZXNzLCBub3QgYSBub24temVybyBleGl0KSBhbmQgdGhlIGpvYiBidXJuc1xuICAgIC8vIH4xMi0xM20gaW5zdGVhZCBvZiB0aGUgfjRtIGEgaGVhbHRoeSBydW4gdGFrZXMuIFNlZSAjMzQuXG4gICAgLy9cbiAgICAvLyBcIkJlbG93IGF2YWlsYWJsZSBSQU1cIiBpcyBub3QgdGhlIHNhbWUgYXMgXCJiZWxvdyB0aGUgYWR2ZXJ0aXNlZCBSQU1cIiwgd2hpY2hcbiAgICAvLyBpcyB3aGF0IHRoZSBmaXJzdCB0d28gYXR0ZW1wdHMgYXQgdGhpcyBudW1iZXIgZ290IHdyb25nLiBkZXBvdC11YnVudHUtMjQuMDQtOFxuICAgIC8vIGFkdmVydGlzZXMgMzJHQiwgYnV0IERlcG90IHJlc2VydmVzIDhHQiBvZiBpdCBmb3IgdGhlIGluLW1lbW9yeSBkaXNrXG4gICAgLy8gYWNjZWxlcmF0b3IgKFwiYSBwb3J0aW9uIG9mIHRoZSBtZW1vcnkgb24gdGhlIHJ1bm5lciBob3N0IGZvciBhIGRpc2tcbiAgICAvLyBhY2NlbGVyYXRvciwgYmFja2VkIGJ5IGEgUkFNIGRpc2tcIiksIGxlYXZpbmcgfjI0R0IgdXNhYmxlIC0tIGFuZCB0aGVcbiAgICAvLyB3b3Jrc3BhY2UgbGl2ZXMgb24gdGhhdCBSQU0gZGlzaywgc28gdGhlIGdlbmVyYXRlZCBiaW5kaW5ncyBzcXVlZXplIHRoZSBzYW1lXG4gICAgLy8gcG9vbCBwYWNtYWsgaXMgZ3Jvd2luZyBpbnRvLiAzMTc0NCAofjk3JSBvZiAzMkdCKSBhbmQgdGhlbiAyODY3MiAofjkwJSkgYm90aFxuICAgIC8vIHNhdCBBQk9WRSB0aGF0IHJlYWwgY2VpbGluZywgc28gbG93ZXJpbmcgaXQgdGhlIGZpcnN0IHRpbWUgY2hhbmdlZCBub3RoaW5nOlxuICAgIC8vIGNka3RuLXByb3ZpZGVyLWRhdGFkb2cgZGllZCBhdCAxMm0yMXMgb24gMzE3NDQgYW5kIGFnYWluIGF0IDEybTIzcy8xMm00MHMgb25cbiAgICAvLyAyODY3Miwgc2FtZSBzaWxlbnQga2lsbC5cbiAgICAvL1xuICAgIC8vIEVtcGlyaWNhbGx5OiBkYXRhZG9nJ3MgcGFja2FnZTpnbywgd2hpY2ggaGFkIG5ldmVyIG9uY2UgY29tcGxldGVkLCBmaW5pc2hlZFxuICAgIC8vIGl0cyBgQ3JlYXRlIGdvIGFydGlmYWN0YCBzdGVwIGluIDNtMDFzIGF0IDE2Mzg0IChydW4gMzA4MjQ3ODcyOTEpLiAyMDQ4MFxuICAgIC8vIGtlZXBzIH40R0IgYmVsb3cgdGhlIH4yNEdCIHVzYWJsZSBsaW5lIHdoaWxlIGdpdmluZyBwYWNtYWsgbW9yZSByb29tIHRoYW4gdGhlXG4gICAgLy8gdmVyaWZpZWQtZ29vZCB2YWx1ZS4gVGhpcyBpcyBhIGNlaWxpbmcsIG5vdCBhIHJlc2VydmF0aW9uIC0tIHByb3ZpZGVycyB0aGF0XG4gICAgLy8gbmV2ZXIgYXBwcm9hY2ggaXQgYXJlIHVuYWZmZWN0ZWQsIHNvIGl0IGNvc3RzIG5vdGhpbmcgdG8gbGVhdmUgaGVhZHJvb20gaGVyZS5cbiAgICBjb25zdCBERUZBVUxUX0hFQVBfTUJfQ1VTVE9NX1JVTk5FUiA9IDIwNDgwO1xuICAgIGNvbnN0IERFRkFVTFRfSEVBUF9NQl9IT1NURURfUlVOTkVSID0gNjY1NjsgLy8gNi41R0Igb2YgN0dCXG5cbiAgICAvLyBgbm9kZUhlYXBTaXplTWJgIGlzIHB1YmxpYyBBUEkgYW5kLCB2aWEganNpaSwgcmVhY2hhYmxlIGZyb20gUHl0aG9uLCBHbyxcbiAgICAvLyBKYXZhIGFuZCAuTkVUIHdoZXJlIGBudW1iZXJgIGlzIGV2ZW4gbG9vc2VyIHRoYW4gVHlwZVNjcmlwdCdzLiBOb2RlXG4gICAgLy8gcmVmdXNlcyB0byBzdGFydCBvbiBhIG1hbGZvcm1lZCBjZWlsaW5nIC0tIGAtLW1heC1vbGQtc3BhY2Utc2l6ZT0xLjVgXG4gICAgLy8gYW5kIGA9TmFOYCBhcmUgYm90aCByZWplY3RlZCBiZWZvcmUgYW55IHNjcmlwdCBydW5zIC0tIGFuZCBgMGAgc2lsZW50bHlcbiAgICAvLyByZXN0b3JlcyBWOCdzIGRlZmF1bHQgaW5zdGVhZCBvZiBhcHBseWluZyBhIGxpbWl0LiBJbnRlcnBvbGF0aW5nIGFuXG4gICAgLy8gdW5jaGVja2VkIHZhbHVlIHdvdWxkIHRoZXJlZm9yZSBicmVhayBldmVyeSB0YXNrIGluIHRoZSBnZW5lcmF0ZWQgcmVwbyxcbiAgICAvLyBzdXJmYWNpbmcgYXMgYW4gaW5zY3J1dGFibGUgc3RhcnR1cCBmYWlsdXJlIGluIENJIHJhdGhlciB0aGFuIGhlcmUuXG4gICAgYXNzZXJ0KFxuICAgICAgb3B0aW9ucy5ub2RlSGVhcFNpemVNYiA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgIChOdW1iZXIuaXNTYWZlSW50ZWdlcihvcHRpb25zLm5vZGVIZWFwU2l6ZU1iKSAmJlxuICAgICAgICAgIG9wdGlvbnMubm9kZUhlYXBTaXplTWIgPiAwKSxcbiAgICAgIGBub2RlSGVhcFNpemVNYiBtdXN0IGJlIGEgcG9zaXRpdmUgc2FmZSBpbnRlZ2VyIChNaUIpLCBnb3QgJHtvcHRpb25zLm5vZGVIZWFwU2l6ZU1ifWBcbiAgICApO1xuXG4gICAgY29uc3QgbWF4T2xkU3BhY2VTaXplID0gU3RyaW5nKFxuICAgICAgb3B0aW9ucy5ub2RlSGVhcFNpemVNYiA/P1xuICAgICAgICAob3B0aW9ucy51c2VDdXN0b21HaXRodWJSdW5uZXJcbiAgICAgICAgICA/IERFRkFVTFRfSEVBUF9NQl9DVVNUT01fUlVOTkVSXG4gICAgICAgICAgOiBERUZBVUxUX0hFQVBfTUJfSE9TVEVEX1JVTk5FUilcbiAgICApO1xuXG4gICAgLy8gR29sYW5nIG5lZWRzIG1vcmUgbWVtb3J5IHRvIGJ1aWxkXG4gICAgdGhpcy50YXNrcy5hZGRFbnZpcm9ubWVudChcbiAgICAgIFwiTk9ERV9PUFRJT05TXCIsXG4gICAgICBgLS1tYXgtb2xkLXNwYWNlLXNpemU9JHttYXhPbGRTcGFjZVNpemV9YFxuICAgICk7XG5cbiAgICB0aGlzLnRhc2tzLmFkZEVudmlyb25tZW50KFwiQ0hFQ0tQT0lOVF9ESVNBQkxFXCIsIFwiMVwiKTtcblxuICAgIGNvbnN0IHZhbGlkYXRlVGFzayA9IHRoaXMuYWRkVGFzayhcInZhbGlkYXRlLXdvcmtmbG93c1wiLCB7XG4gICAgICBleGVjOiBgZmluZCAuLy5naXRodWIvd29ya2Zsb3dzIC10eXBlIGYgLW5hbWUgXCIqLnltbFwiIC1wcmludDAgfCB4YXJncyAtMCAtbiAxIG5weCBhY3Rpb24tdmFsaWRhdG9yYCxcbiAgICB9KTtcbiAgICB2YWxpZGF0ZVRhc2suZGVzY3JpcHRpb24gPVxuICAgICAgXCJMaW50IHRoZSBZQU1MIGZpbGVzIGdlbmVyYXRlZCBieSBQcm9qZW4gdG8gZGVmaW5lIEdpdEh1YiBBY3Rpb25zIGFuZCBXb3JrZmxvd3MsIGNoZWNraW5nIHRoZW0gYWdhaW5zdCBwdWJsaXNoZWQgSlNPTiBzY2hlbWFzXCI7XG4gICAgdGhpcy5wb3N0Q29tcGlsZVRhc2suc3Bhd24odmFsaWRhdGVUYXNrKTtcblxuICAgIHRoaXMucGFja2FnZS5hZGRQYWNrYWdlUmVzb2x1dGlvbnMoXCJAdHlwZXMveWFyZ3NAMTcuMC4xM1wiKTtcblxuICAgIGNvbnN0IHNldFNhZmVEaXJlY3RvcnkgPSB7XG4gICAgICBuYW1lOiBcIlNldCBnaXQgY29uZmlnIHNhZmUuZGlyZWN0b3J5XCIsXG4gICAgICBydW46IFwiZ2l0IGNvbmZpZyAtLWdsb2JhbCAtLWFkZCBzYWZlLmRpcmVjdG9yeSAkKHB3ZClcIixcbiAgICB9O1xuXG4gICAgKCh0aGlzLmJ1aWxkV29ya2Zsb3cgYXMgYW55KS5wcmVCdWlsZFN0ZXBzIGFzIEpvYlN0ZXBbXSkucHVzaChcbiAgICAgIHNldFNhZmVEaXJlY3RvcnlcbiAgICApO1xuICAgICh0aGlzLnJlbGVhc2UgYXMgYW55KS5kZWZhdWx0QnJhbmNoLndvcmtmbG93LmpvYnMucmVsZWFzZS5zdGVwcy5zcGxpY2UoXG4gICAgICAxLFxuICAgICAgMCxcbiAgICAgIHNldFNhZmVEaXJlY3RvcnlcbiAgICApO1xuXG4gICAgLy8gYWx3YXlzIHB1Ymxpc2ggYSBuZXcgR2l0SHViIHJlbGVhc2UsIGV2ZW4gd2hlbiBwdWJsaXNoaW5nIHRvIGEgcGFydGljdWxhciBwYWNrYWdlIG1hbmFnZXIgZmFpbHNcbiAgICBjb25zdCByZWxlYXNlV29ya2Zsb3cgPSB0aGlzLnRyeUZpbmRPYmplY3RGaWxlKFxuICAgICAgXCIuZ2l0aHViL3dvcmtmbG93cy9yZWxlYXNlLnltbFwiXG4gICAgKTtcbiAgICByZWxlYXNlV29ya2Zsb3c/LmFkZE92ZXJyaWRlKFwiam9icy5yZWxlYXNlX2dpdGh1Yi5uZWVkc1wiLCBcInJlbGVhc2VcIik7XG5cbiAgICAvLyBUcnVzdGVkIHB1Ymxpc2hpbmcgcmVxdWlyZXMgbnBtID49MTEuNS4xIHdoaWNoIHNoaXBzIHdpdGggTm9kZSAyNFxuICAgIGlmIChucG1UcnVzdGVkUHVibGlzaGluZykge1xuICAgICAgdGhpcy5naXRodWJcbiAgICAgICAgPy50cnlGaW5kV29ya2Zsb3coXCJyZWxlYXNlXCIpXG4gICAgICAgID8uZmlsZT8ucGF0Y2goXG4gICAgICAgICAgSnNvblBhdGNoLnJlcGxhY2UoXG4gICAgICAgICAgICBcIi9qb2JzL3JlbGVhc2VfbnBtL3N0ZXBzLzAvd2l0aC9ub2RlLXZlcnNpb25cIixcbiAgICAgICAgICAgIFwiMjQueFwiXG4gICAgICAgICAgKVxuICAgICAgICApO1xuXG4gICAgICAvLyBOUE0gT0lEQyBkb2Vzbid0IHN1cHBvcnQgc2VsZi1ob3N0ZWQgcnVubmVycyB5ZXRcbiAgICAgIHRoaXMuZ2l0aHViXG4gICAgICAgID8udHJ5RmluZFdvcmtmbG93KFwicmVsZWFzZVwiKVxuICAgICAgICA/LmZpbGU/LnBhdGNoKFxuICAgICAgICAgIEpzb25QYXRjaC5yZXBsYWNlKFwiL2pvYnMvcmVsZWFzZV9ucG0vcnVucy1vblwiLCBcInVidW50dS1sYXRlc3RcIilcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBOT1RFOiByZWxlYXNlX3B5cGkgZGVsaWJlcmF0ZWx5IHN0YXlzIG9uIHdoYXRldmVyIHJ1bm5lciB0aGUgcHJvamVjdCBpc1xuICAgIC8vIGNvbmZpZ3VyZWQgZm9yLiBVbmxpa2UgbnBtLCBQeVBJIHBsYWNlcyBubyByZXN0cmljdGlvbiBvbiB0aGUgcnVubmVyXG4gICAgLy8gZW52aXJvbm1lbnQ6IHB1YmxpYi1weXBpIG1pbnRzIGl0cyB0b2tlbiB3aXRoIGBweXRob24zIC1tIGlkIHB5cGlgIGFnYWluc3RcbiAgICAvLyBBQ1RJT05TX0lEX1RPS0VOX1JFUVVFU1RfVVJMLCB3aGljaCBHaXRIdWIgaW5qZWN0cyBvbiBhbnkgcnVubmVyIGdpdmVuXG4gICAgLy8gYGlkLXRva2VuOiB3cml0ZWAsIGFuZCBQeVBJJ3MgdHJ1c3QgaXMgYm91bmQgdG8gdGhlIHdvcmtmbG93IHJlZiwgbm90IHRoZVxuICAgIC8vIHJ1bm5lci4gRm9yY2luZyB0aGlzIGpvYiBvbnRvIGEgaG9zdGVkIHJ1bm5lciB3b3VsZCBhbHNvIHN0cmFuZCBpdCB3aXRoIHRoZVxuICAgIC8vIDIwR0IgTk9ERV9PUFRJT05TIGhlYXAgY2VpbGluZyB0aGF0IHVzZUN1c3RvbUdpdGh1YlJ1bm5lciB3cml0ZXMgaW50b1xuICAgIC8vIC5wcm9qZW4vdGFza3MuanNvbiwgb24gYSBib3ggd2l0aCBmYXIgbGVzcyBSQU0gdGhhbiB0aGF0IC0tIGFuZCB1bmxpa2VcbiAgICAvLyBwYWNrYWdlOmpzLCBwYWNrYWdlOnB5dGhvbiBpcyBhIHJlYWwganNpaS1wYWNtYWsgdHJhbnNwaWxlLlxuXG4gICAgLy8gZW5zdXJlIHdlIGRvbid0IGZhaWwgaWYgdGhlIHJlbGVhc2UgZmlsZSBpcyBub3QgcHJlc2VudFxuICAgIGNvbnN0IGNoZWNrRXhpc3RpbmdUYWdTdGVwID0gKFxuICAgICAgdGhpcy5yZWxlYXNlIGFzIGFueVxuICAgICkuZGVmYXVsdEJyYW5jaC53b3JrZmxvdy5qb2JzLnJlbGVhc2Uuc3RlcHMuZmluZChcbiAgICAgIChzOiBvYmplY3QpID0+IFwiaWRcIiBpbiBzICYmIHMuaWQgPT09IFwiY2hlY2tfdGFnX2V4aXN0c1wiXG4gICAgKTtcbiAgICBjb25zdCBvbGRFeGlzdGluZ1RhZ1J1bjogc3RyaW5nID0gY2hlY2tFeGlzdGluZ1RhZ1N0ZXAucnVuO1xuICAgIHByZXR0eUFzc2VydEVxdWFsKFxuICAgICAgb2xkRXhpc3RpbmdUYWdSdW4uc3BsaXQoXCJcXG5cIilbMF0sXG4gICAgICBcIlRBRz0kKGNhdCBkaXN0L3JlbGVhc2V0YWcudHh0KVwiLFxuICAgICAgXCJyZWxlYXNlIHN0ZXAgY2hhbmdlZCwgcGxlYXNlIGNoZWNrIGlmIHRoZSB3b3JrYXJvdW5kIHN0aWxsIHdvcmtzIVwiXG4gICAgKTtcbiAgICBjaGVja0V4aXN0aW5nVGFnU3RlcC5ydW4gPSBgaWYgWyAhIC1mIGRpc3QvcmVsZWFzZXRhZy50eHQgXTsgdGhlbiAoZWNobyBcImV4aXN0cz10cnVlXCIgPj4gJEdJVEhVQl9PVVRQVVQpICYmIGV4aXQgMDsgZmlcXG4ke29sZEV4aXN0aW5nVGFnUnVufWA7XG5cbiAgICBpZiAoIWlzRGVwcmVjYXRlZCkge1xuICAgICAgY29uc3QgeyB1cGdyYWRlLCBwciB9ID0gKHRoaXMudXBncmFkZVdvcmtmbG93IGFzIGFueSkud29ya2Zsb3dzWzBdLmpvYnM7XG4gICAgICB1cGdyYWRlLnN0ZXBzLnNwbGljZSgxLCAwLCBzZXRTYWZlRGlyZWN0b3J5KTtcbiAgICAgIHByLnN0ZXBzLnNwbGljZSgxLCAwLCBzZXRTYWZlRGlyZWN0b3J5KTtcbiAgICB9XG5cbiAgICAvLyByZWxlYXNlOiBHbyDigJQgY29tcGxldGUgdGhlIGhhbmQtYnVpbHQgR28gcHVibGlzaCBqb2IuIERlcHJlY2F0ZWQgcHJvamVjdHNcbiAgICAvLyBzdGlsbCBwdWJsaXNoIEdvLCBzbyB0aGV5IHN0aWxsIG5lZWQgdGhlIHBucG0gc2V0dXA7IG9ubHkgdGhlIEFwcCB0b2tlbiBpc1xuICAgIC8vIGNvbmRpdGlvbmFsLCBzaW5jZSB0aGV5IGRvIG5vdCBwdXNoIG5ldyBtb2R1bGUgdmVyc2lvbnMuXG4gICAgbmV3IEdvUHVibGlzaEpvYlBhdGNoKHRoaXMsIHtcbiAgICAgIGFwcFRva2VuUmVwb3NpdG9yeTogaXNEZXByZWNhdGVkXG4gICAgICAgID8gdW5kZWZpbmVkXG4gICAgICAgIDogcGFja2FnZUluZm8ucHVibGlzaFRvR28/Lm1vZHVsZU5hbWU/LnNwbGl0KFwiL1wiKS5wb3AoKSA/PyBcIlwiLFxuICAgIH0pO1xuXG4gICAgLy8gRml4IG1hdmVuIGlzc3VlIChodHRwczovL2dpdGh1Yi5jb20vY2RrbGFicy9wdWJsaWIvcHVsbC83NzcpXG4gICAgLy9cbiAgICAvLyBUaGUgcHVibGlzaCBqb2JzIGRvbid0IGV4aXN0IHVudGlsIFJlbGVhc2Ugc3ludGhlc2l6ZXMsIGFuZCB0aGUgc3RlcCdzIGluZGV4XG4gICAgLy8gd2l0aGluIHJlbGVhc2VfbWF2ZW4gc2hpZnRzIHdoZW5ldmVyIHRoZSBqb2IgZ2FpbnMgYSBzdGVwIC0tIHN3aXRjaGluZyB0aGVcbiAgICAvLyBwYWNrYWdlIG1hbmFnZXIgdG8gcG5wbSBpbnNlcnRzIGEgXCJTZXR1cCBwbnBtXCIgc3RlcCwgd2hpY2ggc2lsZW50bHkgbW92ZWQgdGhlXG4gICAgLy8gb2xkIGhhcmRjb2RlZCAvc3RlcHMvMTAvIG9udG8gYSBzdGVwIHdpdGggbm8gZW52IGF0IGFsbC4gUmVzb2x2ZSB0aGUgc3RlcCBieVxuICAgIC8vIHdoYXQgaXQgcnVucywgaW4gcHJlU3ludGhlc2l6ZSwgc28gbmVpdGhlciBwcm9ibGVtIGNhbiByZWN1ci5cbiAgICBuZXcgTWF2ZW5PcHRzUGF0Y2godGhpcyk7XG5cbiAgICB0aGlzLnBpbkdpdGh1YkFjdGlvblZlcnNpb25zKGdpdGh1YkFjdGlvblBpbm5lZFZlcnNpb25zKTtcblxuICAgIG5ldyBDZGt0ZkNvbmZpZyh0aGlzLCB7XG4gICAgICB0ZXJyYWZvcm1Qcm92aWRlcixcbiAgICAgIHByb3ZpZGVyTmFtZSxcbiAgICAgIGZxcHJvdmlkZXJOYW1lLFxuICAgICAgcHJvdmlkZXJWZXJzaW9uLFxuICAgICAgY2RrdG5WZXJzaW9uLFxuICAgICAgY29uc3RydWN0c1ZlcnNpb24sXG4gICAgICBqc2lpVmVyc2lvbixcbiAgICAgIHR5cGVzY3JpcHRWZXJzaW9uLFxuICAgICAgcGFja2FnZUluZm8sXG4gICAgICBnaXRodWJOYW1lc3BhY2UsXG4gICAgICBkZXByZWNhdGlvbkRhdGUsXG4gICAgICBpc0RlcHJlY2F0ZWQ6ICEhaXNEZXByZWNhdGVkLFxuICAgIH0pO1xuICAgIG5ldyBDdXN0b21pemVkTGljZW5zZSh0aGlzLCBvcHRpb25zLmNyZWF0aW9uWWVhciwgb3B0aW9ucy5saWNlbnNlZSk7XG4gICAgbmV3IEdpdGh1Yklzc3Vlcyh0aGlzLCB7IHByb3ZpZGVyTmFtZSB9KTtcbiAgICBuZXcgQXV0b0FwcHJvdmUodGhpcyk7XG4gICAgbmV3IEF1dG9DbG9zZUNvbW11bml0eUlzc3Vlcyh0aGlzLCB7IHByb3ZpZGVyTmFtZSB9KTtcbiAgICBuZXcgQXV0b21lcmdlKHRoaXMpO1xuICAgIG5ldyBMb2NrSXNzdWVzKHRoaXMpO1xuXG4gICAgaWYgKCFpc0RlcHJlY2F0ZWQpIHtcbiAgICAgIGNvbnN0IHVwZ3JhZGVTY3JpcHQgPSBuZXcgQ2hlY2tGb3JVcGdyYWRlc1NjcmlwdEZpbGUodGhpcywge1xuICAgICAgICBwcm92aWRlclZlcnNpb24sXG4gICAgICAgIGZxcHJvdmlkZXJOYW1lLFxuICAgICAgfSk7XG4gICAgICBuZXcgUHJvdmlkZXJVcGdyYWRlKHRoaXMsIHtcbiAgICAgICAgY2hlY2tGb3JVcGdyYWRlc1NjcmlwdFBhdGg6IHVwZ3JhZGVTY3JpcHQucGF0aCxcbiAgICAgICAgd29ya2Zsb3dSdW5zT24sXG4gICAgICAgIG5vZGVIZWFwU2l6ZTogbWF4T2xkU3BhY2VTaXplLFxuICAgICAgfSk7XG4gICAgICBuZXcgQWxlcnRPcGVuUHJzKHRoaXMsIHtcbiAgICAgICAgc2xhY2tXZWJob29rVXJsOiBcIiR7eyBzZWNyZXRzLkFMRVJUX1BSU19TTEFDS19XRUJIT09LX1VSTCB9fVwiLFxuICAgICAgICByZXBvc2l0b3J5LFxuICAgICAgfSk7XG4gICAgICBuZXcgRGVwZW5kYWJvdCh0aGlzKTtcblxuICAgICAgLy8gVHJhbnNpdGl2ZSBhZHZpc29yaWVzIG5ldmVyIG1vdmUgb3RoZXJ3aXNlLCBhbmQgYGF1ZGl0RGVwc2AgZmFpbHMgdGhlXG4gICAgICAvLyBidWlsZCBvbiB0aGVtLiBTZWUgdGhlIGNvbXBvbmVudC5cbiAgICAgIGNvbnN0IHRyYW5zaXRpdmVzU2NyaXB0ID0gbmV3IFVwZ3JhZGVWdWxuZXJhYmxlVHJhbnNpdGl2ZXNTY3JpcHRGaWxlKFxuICAgICAgICB0aGlzLFxuICAgICAgICB7XG4gICAgICAgICAgbWluaW11bVJlbGVhc2VBZ2VNaW51dGVzOiBDT09MRE9XTl9EQVlTICogMjQgKiA2MCxcbiAgICAgICAgICBhdWRpdExldmVsOiBBVURJVF9MRVZFTCxcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICAgIC8vIHBvc3QtdXBncmFkZTogcnVucyBhZnRlciBgcG5wbSBleGVjIHByb2plbmAsIGFuZCBvbmx5IG1vdmVzIHRoZSBsb2NrZmlsZS5cbiAgICAgIHRoaXMudGFza3NcbiAgICAgICAgLnRyeUZpbmQoXCJwb3N0LXVwZ3JhZGVcIilcbiAgICAgICAgPy5leGVjKGBub2RlIC4vJHt0cmFuc2l0aXZlc1NjcmlwdC5wYXRofWApO1xuICAgIH1cblxuICAgIG5ldyBUZXh0RmlsZSh0aGlzLCBcIi5naXRodWIvQ09ERU9XTkVSU1wiLCB7XG4gICAgICBsaW5lczogW1xuICAgICAgICBcIiMgVGhlc2Ugb3duZXJzIHdpbGwgYmUgdGhlIGRlZmF1bHQgb3duZXJzIGZvciBldmVyeXRoaW5nIGluIFwiLFxuICAgICAgICBcIiMgdGhlIHJlcG8uIFVubGVzcyBhIGxhdGVyIG1hdGNoIHRha2VzIHByZWNlZGVuY2UsIFwiLFxuICAgICAgICBcIiMgdGhleSB3aWxsIGJlIHJlcXVlc3RlZCBmb3IgcmV2aWV3IHdoZW4gc29tZW9uZSBvcGVucyBhIFwiLFxuICAgICAgICBcIiMgcHVsbCByZXF1ZXN0LlwiLFxuICAgICAgICBcIiogICAgICAgQGNka3RuLWlvL3RlYW0tY2RrLXRlcnJhaW5cIixcbiAgICAgIF0sXG4gICAgfSk7XG5cbiAgICBpZiAoIWlzRGVwcmVjYXRlZCkge1xuICAgICAgbmV3IFNob3VsZFJlbGVhc2VTY3JpcHRGaWxlKHRoaXMsIHt9KTtcblxuICAgICAgY29uc3QgcmVsZWFzZVRhc2sgPSB0aGlzLnRhc2tzLnRyeUZpbmQoXCJyZWxlYXNlXCIpITtcbiAgICAgIHRoaXMucmVtb3ZlVGFzayhcInJlbGVhc2VcIik7XG4gICAgICB0aGlzLmFkZFRhc2soXCJyZWxlYXNlXCIsIHtcbiAgICAgICAgZGVzY3JpcHRpb246IHJlbGVhc2VUYXNrLmRlc2NyaXB0aW9uLFxuICAgICAgICBzdGVwczogcmVsZWFzZVRhc2suc3RlcHMsXG4gICAgICAgIGVudjogKHJlbGVhc2VUYXNrIGFzIGFueSkuX2VudixcbiAgICAgICAgY29uZGl0aW9uOiBcIm5vZGUgLi9zY3JpcHRzL3Nob3VsZC1yZWxlYXNlLmpzXCIsXG4gICAgICB9KTtcbiAgICAgIHRoaXMuYWRkVGFzayhcInVuY29uZGl0aW9uYWwtcmVsZWFzZVwiLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiByZWxlYXNlVGFzay5kZXNjcmlwdGlvbixcbiAgICAgICAgc3RlcHM6IHJlbGVhc2VUYXNrLnN0ZXBzLFxuICAgICAgICBlbnY6IChyZWxlYXNlVGFzayBhcyBhbnkpLl9lbnYsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVsZWFzZUpvYlN0ZXBzOiBhbnlbXSA9IChcbiAgICAgICAgdGhpcy5naXRodWI/LnRyeUZpbmRXb3JrZmxvdyhcInJlbGVhc2VcIikgYXMgYW55XG4gICAgICApLmpvYnMucmVsZWFzZS5zdGVwcztcbiAgICAgIGNvbnN0IGdpdFJlbW90ZUpvYiA9IHJlbGVhc2VKb2JTdGVwcy5maW5kKChpdCkgPT4gaXQuaWQgPT09IFwiZ2l0X3JlbW90ZVwiKTtcbiAgICAgIGFzc2VydChcbiAgICAgICAgZ2l0UmVtb3RlSm9iLFxuICAgICAgICBcImdpdF9yZW1vdGUgc3RlcCBub3QgZm91bmQgaW4gcmVsZWFzZSB3b3JrZmxvdywgcGxlYXNlIGNoZWNrIGlmIHRoZSB3b3JrYXJvdW5kIHN0aWxsIHdvcmtzIVwiXG4gICAgICApO1xuICAgICAgLy8gV2Ugd3JhcCB3aGF0ZXZlciBwcm9qZW4gZ2VuZXJhdGVkIGluIGEgc2hvdWxkLXJlbGVhc2UgZ3VhcmQgcmF0aGVyIHRoYW5cbiAgICAgIC8vIHJld3JpdGluZyBpdCwgc28gYXNzZXJ0IG9ubHkgdGhlIHR3byBwcm9wZXJ0aWVzIHRoZSB3cmFwcGluZyBhY3R1YWxseVxuICAgICAgLy8gZGVwZW5kcyBvbi4gUGlubmluZyB0byBwcm9qZW4ncyBleGFjdCB3b3JkaW5nIGJyb2tlIHRoZSB3aG9sZSBmbGVldFxuICAgICAgLy8gb25jZSBhbHJlYWR5OiBwcm9qZW4gMC4xMDEgY2hhbmdlZCBgJHt7IGdpdGh1Yi5yZWYgfX1gIHRvIGBcIiRHSVRIVUJfUkVGXCJgXG4gICAgICAvLyBhbmQgZXZlcnkgcHJvdmlkZXIgcmVwbydzIHVwZ3JhZGUtbWFpbiBzdGFydGVkIGZhaWxpbmcgYXQgc3ludGguXG4gICAgICBhc3NlcnQoXG4gICAgICAgIHR5cGVvZiBnaXRSZW1vdGVKb2IucnVuID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgICAgZ2l0UmVtb3RlSm9iLnJ1bi5pbmNsdWRlcyhcImdpdCBscy1yZW1vdGVcIikgJiZcbiAgICAgICAgICBnaXRSZW1vdGVKb2IucnVuLmluY2x1ZGVzKFwibGF0ZXN0X2NvbW1pdD1cIiksXG4gICAgICAgIGBnaXRfcmVtb3RlIHN0ZXAgbm8gbG9uZ2VyIHNldHMgbGF0ZXN0X2NvbW1pdCBmcm9tIGdpdCBscy1yZW1vdGUsIHBsZWFzZSBjaGVjayBpZiB0aGUgd29ya2Fyb3VuZCBzdGlsbCB3b3JrcyEgR290OiAke0pTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIGdpdFJlbW90ZUpvYi5ydW5cbiAgICAgICAgKX1gXG4gICAgICApO1xuICAgICAgLy8gRm9sZCAqZXZlcnkqIGxpbmU6IHByb2plbiBlbWl0cyB0d28gdG9kYXksIGJ1dCBTdHJpbmcjcmVwbGFjZSB3aXRoIGFcbiAgICAgIC8vIHN0cmluZyBwYXR0ZXJuIG9ubHkgZm9sZHMgdGhlIGZpcnN0IGlmIHRoYXQgZXZlciBncm93cy5cbiAgICAgIGNvbnN0IHByZXZpb3VzQ29tbWFuZCA9IGdpdFJlbW90ZUpvYi5ydW4uc3BsaXQoXCJcXG5cIikuam9pbihcIiAmJiBcIik7XG5cbiAgICAgIGNvbnN0IGNhbmNlbENvbW1hbmQgPVxuICAgICAgICAnZWNobyBcImxhdGVzdF9jb21taXQ9cmVsZWFzZV9jYW5jZWxsZWRcIiA+PiAkR0lUSFVCX09VVFBVVCc7IC8vIHRoaXMgY2FuY2VscyB0aGUgcmVsZWFzZSB2aWEgYSBub24tbWF0Y2hpbmcgU0hBO1xuICAgICAgZ2l0UmVtb3RlSm9iLnJ1biA9IGBub2RlIC4vc2NyaXB0cy9zaG91bGQtcmVsZWFzZS5qcyAmJiAoJHtwcmV2aW91c0NvbW1hbmR9KSB8fCAke2NhbmNlbENvbW1hbmR9YDtcbiAgICAgIGdpdFJlbW90ZUpvYi5uYW1lICs9XG4gICAgICAgIFwiIG9yIGNhbmNlbCB2aWEgZmFraW5nIGEgU0hBIGlmIHJlbGVhc2Ugd2FzIGNhbmNlbGxlZFwiO1xuICAgIH1cblxuICAgIGNvbnN0IHN0YWxlV29ya2Zsb3cgPSB0aGlzLnRyeUZpbmRPYmplY3RGaWxlKFwiLmdpdGh1Yi93b3JrZmxvd3Mvc3RhbGUueW1sXCIpO1xuICAgIHN0YWxlV29ya2Zsb3c/LmFkZE92ZXJyaWRlKFwib24uc2NoZWR1bGVcIiwgW1xuICAgICAge1xuICAgICAgICBjcm9uOiBnZW5lcmF0ZVJhbmRvbUNyb24oeyBwcm9qZWN0OiB0aGlzLCBtYXhIb3VyOiA0LCBob3VyT2Zmc2V0OiAxIH0pLFxuICAgICAgfSxcbiAgICBdKTtcblxuICAgIGNvbnN0IHVwZ3JhZGVXb3JrZmxvdyA9IHRoaXMudHJ5RmluZE9iamVjdEZpbGUoXG4gICAgICBcIi5naXRodWIvd29ya2Zsb3dzL3VwZ3JhZGUtbWFpbi55bWxcIlxuICAgICk7XG4gICAgdXBncmFkZVdvcmtmbG93Py5hZGRPdmVycmlkZShcIm9uLnNjaGVkdWxlXCIsIFtcbiAgICAgIHtcbiAgICAgICAgY3JvbjogZ2VuZXJhdGVSYW5kb21Dcm9uKHtcbiAgICAgICAgICBwcm9qZWN0OiB0aGlzLFxuICAgICAgICAgIG1heEhvdXI6IDAsXG4gICAgICAgICAgaG91ck9mZnNldDogMSxcbiAgICAgICAgICBzY2hlZHVsZTogU2NoZWR1bGUuV2Vla2x5LFxuICAgICAgICB9KSxcbiAgICAgIH0sXG4gICAgXSk7XG5cbiAgICAvLyBBIGZhaWxlZCB1cGdyYWRlIHJ1biBpcyBvdGhlcndpc2Ugc2lsZW50IC0tIGByZWxlYXNlRmFpbHVyZUlzc3VlYCBjb3ZlcnMgb25seVxuICAgIC8vIHRoZSByZWxlYXNlIHdvcmtmbG93IC0tIGFuZCBvbiBhIHdlZWtseSBjcm9uIGVhY2ggb25lIGNvc3RzIGEgZnVsbCB3ZWVrIG9mXG4gICAgLy8gZGVwZW5kZW5jeSBtb3ZlbWVudC4gTm90aGluZyBmbGFnZ2VkIGNka3RuLXByb3ZpZGVyLWF3c2NjJ3MgYnJlYWsgb25cbiAgICAvLyAyMDI2LTA4LTEwLCBvciB0aGlzIHJlcG8ncyB0aHJlZSBjb25zZWN1dGl2ZSBmYWlsdXJlcyB0aGF0IEp1bHkuXG4gICAgLy9cbiAgICAvLyBJdHMgb3duIGpvYiwgbm90IGEgc3RlcCBvbiBgdXBncmFkZWA6IHBlcm1pc3Npb25zIGFyZSBqb2Itd2lkZSwgc28gYWRkaW5nXG4gICAgLy8gYGlzc3Vlczogd3JpdGVgIHRoZXJlIHdvdWxkIGhhbmQgdGhhdCBzY29wZSB0byB0aGUgcGVyc2lzdGVkIGNoZWNrb3V0XG4gICAgLy8gY3JlZGVudGlhbCB3aGlsZSBkZXBlbmRlbmN5IGxpZmVjeWNsZSBzY3JpcHRzIGFuZCBgcHJvamVuIHVwZ3JhZGVgIHJ1bi4gVGhpc1xuICAgIC8vIGpvYiBjaGVja3Mgbm90aGluZyBvdXQgYW5kIHJ1bnMgbm8gcmVwb3NpdG9yeSBjb2RlLlxuICAgIC8vXG4gICAgLy8gR0hfUkVQTyBpcyByZXF1aXJlZCBiZWNhdXNlIG9mIHRoYXQgLS0gd2l0aCBubyBjaGVja291dCwgYGdoYCBoYXMgbm8gcmVtb3RlXG4gICAgLy8gdG8gaW5mZXIgdGhlIHJlcG9zaXRvcnkgZnJvbSwgYW5kIGEgY2hlY2tvdXQgZmFpbHVyZSBpcyBleGFjdGx5IG9uZSBvZiB0aGVcbiAgICAvLyBmYWlsdXJlcyB0aGlzIG5lZWRzIHRvIHJlcG9ydC5cbiAgICAvL1xuICAgIC8vIERlZHVwbGljYXRlZCBvbiB0aGUgbGFiZWwgc28gYSBwZXJzaXN0ZW50IGZhaWx1cmUgZmlsZXMgb25lIGlzc3VlLCBub3Qgb25lXG4gICAgLy8gcGVyIHJ1bi4gVGhlIGxhYmVsIGlzIGNyZWF0ZWQgaGVyZSBiZWNhdXNlIHJlcG8gbGFiZWxzIGFyZSBwcm92aXNpb25lZFxuICAgIC8vIG91dC1vZi1iYW5kIGJ5IGNka3RuLXJlcG9zaXRvcnktbWFuYWdlciBhbmQgYGdoIGlzc3VlIGNyZWF0ZWAgcmVqZWN0cyBhblxuICAgIC8vIHVua25vd24gb25lLlxuICAgIHVwZ3JhZGVXb3JrZmxvdz8ucGF0Y2goXG4gICAgICBKc29uUGF0Y2guYWRkKFwiL2pvYnMvdXBncmFkZV9mYWlsdXJlX2lzc3VlXCIsIHtcbiAgICAgICAgbmFtZTogXCJSZXBvcnQgYSBmYWlsZWQgdXBncmFkZVwiLFxuICAgICAgICBuZWVkczogXCJ1cGdyYWRlXCIsXG4gICAgICAgIC8vIGFsd2F5cygpLCBvciBhIGZhaWxlZCBgdXBncmFkZWAgd291bGQgc2tpcCB0aGlzIHdpdGggaXQuXG4gICAgICAgIGlmOiBcIiR7eyBhbHdheXMoKSAmJiBuZWVkcy51cGdyYWRlLnJlc3VsdCA9PSAnZmFpbHVyZScgJiYgZ2l0aHViLmV2ZW50X25hbWUgPT0gJ3NjaGVkdWxlJyB9fVwiLFxuICAgICAgICBcInJ1bnMtb25cIjogXCJ1YnVudHUtbGF0ZXN0XCIsXG4gICAgICAgIHBlcm1pc3Npb25zOiB7IGlzc3VlczogXCJ3cml0ZVwiIH0sXG4gICAgICAgIHN0ZXBzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogXCJDcmVhdGUgaXNzdWUgb24gZmFpbHVyZVwiLFxuICAgICAgICAgICAgZW52OiB7XG4gICAgICAgICAgICAgIEdIX1RPS0VOOiBcIiR7eyBzZWNyZXRzLkdJVEhVQl9UT0tFTiB9fVwiLFxuICAgICAgICAgICAgICBHSF9SRVBPOiBcIiR7eyBnaXRodWIucmVwb3NpdG9yeSB9fVwiLFxuICAgICAgICAgICAgICBSVU5fVVJMOlxuICAgICAgICAgICAgICAgIFwiaHR0cHM6Ly9naXRodWIuY29tLyR7eyBnaXRodWIucmVwb3NpdG9yeSB9fS9hY3Rpb25zL3J1bnMvJHt7IGdpdGh1Yi5ydW5faWQgfX1cIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBydW46IFtcbiAgICAgICAgICAgICAgXCJnaCBsYWJlbCBjcmVhdGUgZmFpbGVkLXVwZ3JhZGUgLS1jb2xvciBCNjAyMDUgLS1kZXNjcmlwdGlvbiAnQSBzY2hlZHVsZWQgZGVwZW5kZW5jeSB1cGdyYWRlIHJ1biBmYWlsZWQnIC0tZm9yY2VcIixcbiAgICAgICAgICAgICAgJ2lmIFsgXCIkKGdoIGlzc3VlIGxpc3QgLS1sYWJlbCBmYWlsZWQtdXBncmFkZSAtLXN0YXRlIG9wZW4gLS1saW1pdCAxIC0tanNvbiBudW1iZXIgLS1qcSBsZW5ndGgpXCIgPSBcIjBcIiBdOyB0aGVuJyxcbiAgICAgICAgICAgICAgJyAgZ2ggaXNzdWUgY3JlYXRlIC0tbGFiZWwgZmFpbGVkLXVwZ3JhZGUgLS10aXRsZSBcIkRlcGVuZGVuY3kgdXBncmFkZSBmYWlsZWRcIiAtLWJvZHkgXCJUaGUgc2NoZWR1bGVkIGRlcGVuZGVuY3kgdXBncmFkZSBydW4gZmFpbGVkOiAkUlVOX1VSTFwiJyxcbiAgICAgICAgICAgICAgXCJmaVwiLFxuICAgICAgICAgICAgXS5qb2luKFwiXFxuXCIpLFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KVxuICAgICk7XG5cbiAgICAvLyBTdWJtb2R1bGUgZG9jdW1lbnRhdGlvbiBnZW5lcmF0aW9uXG4gICAgdGhpcy5naXRpZ25vcmUuZXhjbHVkZShcIkFQSS5tZFwiKTsgLy8gaWdub3JlIHRoZSBvbGQgZmlsZSwgd2Ugbm93IGdlbmVyYXRlIGl0IGluIHRoZSBkb2NzIGZvbGRlclxuICAgIHRoaXMuYWRkRGV2RGVwcyhcImpzaWktZG9jZ2VuQF4xMC4yLjNcIik7XG4gICAgaWYgKGpzaWlWZXJzaW9uKSB7XG4gICAgICAvLyBOT1RFOiB0aGUgYmVsb3cgaXMgbWFraW5nIGEgYnJvYWQgYXNzdW1wdGlvbiB0aGF0IHlvdSdyZSBwYXNzaW5nIGEgcmFuZ2UgbGlrZSBcIn41LjMuMFwiIHRvIGpzaWlWZXJzaW9uXG4gICAgICAvLyBJZiB5b3UgdXNlIHRoYXQgZmllbGQgdG8gcGFzcyBhIHZlcnkgc3BlY2lmaWMgdmVyc2lvbiAoZS5nLiBcIjUuMy4xMVwiKSB0aGVuIHRoaXMgbWlnaHQgYnJlYWtcbiAgICAgIHRoaXMuYWRkRGV2RGVwcyhganNpaS1yb3NldHRhQCR7anNpaVZlcnNpb259YCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWRkRGV2RGVwcyhganNpaS1yb3NldHRhYCk7XG4gICAgfVxuXG4gICAgY29uc3QgZG9jZ2VuID0gdGhpcy5hZGRUYXNrKFwiZG9jZ2VuXCIsIHtcbiAgICAgIGRlc2NyaXB0aW9uOiBcIkdlbmVyYXRlIGRvY3VtZW50YXRpb24gZm9yIHRoZSBwcm9qZWN0XCIsXG4gICAgICBzdGVwczogW1xuICAgICAgICB7XG4gICAgICAgICAgZXhlYzogW1xuICAgICAgICAgICAgXCJybSAtcmYgZG9jc1wiLFxuICAgICAgICAgICAgXCJybSAtZiBBUEkubWRcIixcbiAgICAgICAgICAgIFwibWtkaXIgZG9jc1wiLFxuICAgICAgICAgICAgXCJqc2lpLWRvY2dlbiAtLXNwbGl0LWJ5LXN1Ym1vZHVsZSAtbCB0eXBlc2NyaXB0IC1sIHB5dGhvbiAtbCBqYXZhIC1sIGNzaGFycCAtbCBnb1wiLFxuICAgICAgICAgICAgLy8gVGhlcmUgaXMgbm8gbmljZSB3YXkgdG8gdGVsbCBqc2lpLWRvY2dlbiB0byBnZW5lcmF0ZSBkb2NzIGludG8gYSBmb2xkZXIgc28gSSB3ZW50IHRoaXMgcm91dGVcbiAgICAgICAgICAgIFwibXYgKi4qLm1kIGRvY3NcIixcbiAgICAgICAgICAgIC8vIFNvbWUgcGFydCBvZiB0aGUgZG9jdW1lbnRhdGlvbiBhcmUgdG9vIGxvbmcsIHdlIG5lZWQgdG8gdHJ1bmNhdGUgdGhlbSB0byB+MTBNQlxuICAgICAgICAgICAgXCJjZCBkb2NzXCIsXG4gICAgICAgICAgICBcImxzIC4vIHwgeGFyZ3Mgc2VkIC1pICcxNTAwMDAsJCBkJyAkMVwiLFxuICAgICAgICAgIF0uam9pbihcIiAmJiBcIiksXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgIH0pO1xuICAgIHRoaXMucG9zdENvbXBpbGVUYXNrLnNwYXduKGRvY2dlbik7XG4gICAgdGhpcy5naXRpZ25vcmUuaW5jbHVkZShgL2RvY3MvKi5tZGApO1xuICAgIHRoaXMuYW5ub3RhdGVHZW5lcmF0ZWQoYC9kb2NzLyoubWRgKTtcblxuICAgIC8vIFNldHRpbmcgdGhlIHZlcnNpb24gaW4gcGFja2FnZS5qc29uIHNvIHRoZSBnb2xhbmcgZG9jcyBoYXZlIHRoZSBjb3JyZWN0IHZlcnNpb25cbiAgICBjb25zdCB1bmNvbmRpdGlvbmFsQnVtcCA9IHRoaXMuYWRkVGFzayhcInVuY29uZGl0aW9uYWwtYnVtcFwiLCB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJTZXQgdGhlIHZlcnNpb24gaW4gcGFja2FnZS5qc29uIHRvIHRoZSBjdXJyZW50IHZlcnNpb25cIixcbiAgICAgIHN0ZXBzOiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIkNsZWFyIHRoZSBjaGFuZ2Vsb2cgc28gdGhhdCBpdCBkb2Vzbid0IGdldCBwdWJsaXNoZWQgdHdpY2VcIixcbiAgICAgICAgICBleGVjOiBcInJtIC1mICRDSEFOR0VMT0dcIixcbiAgICAgICAgfSxcbiAgICAgICAgLy8gcHJvamVuIDAuMTAxIHJlbW92ZWQgdGhlIGNvbWJpbmVkIGByZWxlYXNlL2J1bXAtdmVyc2lvbmAgYnVpbHRpbiBhbmQgc3BsaXRcbiAgICAgICAgLy8gaXQgaW50byByZXNvbHZlLWxhdGVzdC10YWcgLT4gc3VnZ2VzdC12ZXJzaW9uLWJ1bXAgLT4gYXBwbHktdmVyc2lvbi1idW1wLFxuICAgICAgICAvLyBoYW5kaW5nIHJlc3VsdHMgZm9yd2FyZCB2aWEgc3RlcCBgb3V0cHV0RW52YCBjYXB0dXJlcy4gYXBwbHkgb24gaXRzIG93blxuICAgICAgICAvLyB0aHJvd3MgXCJuZWl0aGVyIEJVTVBfVFlQRSBub3IgU1VHR0VTVEVEX0JVTVAgaXMgc2V0XCIsIHNvIGFsbCB0aHJlZSBhcmVcbiAgICAgICAgLy8gbmVlZGVkLiBNaXJyb3JzIHByb2plbidzIG93biBidW1wIHRhc2sgKGxpYi92ZXJzaW9uLmpzOjEyOC0xNDQpLlxuICAgICAgICB7IGJ1aWx0aW46IFwicmVsZWFzZS9yZXNvbHZlLWxhdGVzdC10YWdcIiwgb3V0cHV0RW52OiBcIkxBVEVTVF9UQUdcIiB9LFxuICAgICAgICAvLyBzdWdnZXN0LXZlcnNpb24tYnVtcCBjb3VudHMgcmVsZWFzYWJsZSBjb21taXRzICpvbmx5KiBmcm9tXG4gICAgICAgIC8vICRSRUxFQVNBQkxFX0NPTU1JVFMuIFdpdGhvdXQgdGhpcyBzcGF3biB0aGUgY291bnQgaXMgMCwgdGhlIHN1Z2dlc3RlZFxuICAgICAgICAvLyBidW1wIGlzIFwibm9uZVwiLCBhbmQgYXBwbHktdmVyc2lvbi1idW1wIHJld3JpdGVzIGRpc3QvcmVsZWFzZXRhZy50eHRcbiAgICAgICAgLy8gd2l0aCB0aGUgKnByZXZpb3VzKiB0YWcgLSB3aGljaCBtYWtlcyB0aGUgcmVsZWFzZSB3b3JrZmxvdyB0aGluayB0aGVcbiAgICAgICAgLy8gdmVyc2lvbiBpcyBhbHJlYWR5IHRhZ2dlZCBhbmQgc2tpcCBldmVyeSBwdWJsaXNoIGpvYi5cbiAgICAgICAge1xuICAgICAgICAgIHNwYXduOiBcImJ1bXA6cmVsZWFzYWJsZS1jb21taXRzXCIsXG4gICAgICAgICAgb3V0cHV0RW52OiBcIlJFTEVBU0FCTEVfQ09NTUlUU1wiLFxuICAgICAgICAgIC8vIE9uIGEgZmlyc3QgcmVsZWFzZSB0aGUgcmVzb2x2ZWQgdGFnIGlzIHN5bnRoZXRpYyBhbmQgZG9lcyBub3QgZXhpc3QsXG4gICAgICAgICAgLy8gc28gdGhlcmUgaXMgbm90aGluZyB0byBkaWZmIGFnYWluc3QuXG4gICAgICAgICAgY29uZGl0aW9uOiAnZ2l0IHJldi1wYXJzZSAtLXZlcmlmeSAtLXF1aWV0IFwicmVmcy90YWdzLyRMQVRFU1RfVEFHXCInLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgYnVpbHRpbjogXCJyZWxlYXNlL3N1Z2dlc3QtdmVyc2lvbi1idW1wXCIsXG4gICAgICAgICAgb3V0cHV0RW52OiBcIlNVR0dFU1RFRF9CVU1QXCIsXG4gICAgICAgIH0sXG4gICAgICAgIHsgYnVpbHRpbjogXCJyZWxlYXNlL2FwcGx5LXZlcnNpb24tYnVtcFwiIH0sXG4gICAgICBdLFxuICAgICAgZW52OiB7XG4gICAgICAgIE9VVEZJTEU6IFwicGFja2FnZS5qc29uXCIsXG4gICAgICAgIENIQU5HRUxPRzogXCJkaXN0L2NoYW5nZWxvZy5tZFwiLFxuICAgICAgICBCVU1QRklMRTogXCJkaXN0L3ZlcnNpb24udHh0XCIsXG4gICAgICAgIFJFTEVBU0VUQUc6IFwiZGlzdC9yZWxlYXNldGFnLnR4dFwiLFxuICAgICAgICBSRUxFQVNFX1RBR19QUkVGSVg6IFwiXCIsXG4gICAgICAgIE1JTl9NQUpPUjogU3RyaW5nKE1JTl9NQUpPUl9WRVJTSU9OKSxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgdGhpcy5wcmVDb21waWxlVGFzay5zcGF3bih1bmNvbmRpdGlvbmFsQnVtcCk7XG4gICAgLy8gVG8gYnVtcCBjb3JyZWN0bHkgd2UgbmVlZCB0byBoYXZlIHRoZSBjb21wbGV0ZWx5IGNsb25lZCByZXBvXG4gICAgKHRoaXMuYnVpbGRXb3JrZmxvdyBhcyBhbnkpLndvcmtmbG93LmZpbGUuYWRkT3ZlcnJpZGUoXG4gICAgICBcImpvYnMuYnVpbGQuc3RlcHMuMC53aXRoLmZldGNoLWRlcHRoXCIsXG4gICAgICAwXG4gICAgKTtcbiAgICAvLyBVbmRvIHRoZSBjaGFuZ2VzIGFmdGVyIGNvbXBpbGF0aW9uXG4gICAgdGhpcy5idWlsZFdvcmtmbG93Py5hZGRQb3N0QnVpbGRTdGVwcyh7XG4gICAgICBuYW1lOiBcIlJldmVydCBwYWNrYWdlLmpzb24gdmVyc2lvbiBidW1wXCIsXG4gICAgICBydW46IFwiZ2l0IGNoZWNrb3V0IHBhY2thZ2UuanNvblwiLFxuICAgIH0pO1xuXG4gICAgbmV3IENvcHlyaWdodEhlYWRlcnModGhpcyk7XG4gICAgbmV3IERlcHJlY2F0ZVBhY2thZ2VzKHRoaXMsIHtcbiAgICAgIHByb3ZpZGVyTmFtZSxcbiAgICAgIHBhY2thZ2VJbmZvLFxuICAgICAgaXNEZXByZWNhdGVkOiAhIWlzRGVwcmVjYXRlZCxcbiAgICB9KTtcbiAgICBpZiAoIWlzRGVwcmVjYXRlZCkge1xuICAgICAgLy8gRm9sZHMgdGhlIG1hbnVhbCBmb3JjZS1yZWxlYXNlIGJlaGF2aW91ciBpbnRvIHJlbGVhc2UueW1sIGJlaGluZCBhXG4gICAgICAvLyB3b3JrZmxvd19kaXNwYXRjaCB0cmlnZ2VyLCBzbyBucG0vUHlQSSBPSURDIHRydXN0cyBhIHNpbmdsZSB3b3JrZmxvdy5cbiAgICAgIG5ldyBGb3JjZVJlbGVhc2UodGhpcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBwaW5HaXRodWJBY3Rpb25WZXJzaW9ucyhwaW5uZWRWZXJzaW9uczogUmVjb3JkPHN0cmluZywgc3RyaW5nPikge1xuICAgIC8vIFVzZSBwaW5uZWQgdmVyc2lvbnMgb2YgZ2l0aHViIGFjdGlvbnNcbiAgICBPYmplY3QuZW50cmllcyhwaW5uZWRWZXJzaW9ucykuZm9yRWFjaCgoW25hbWUsIHNoYV0pID0+IHtcbiAgICAgIHRoaXMuZ2l0aHViPy5hY3Rpb25zLnNldChuYW1lLCBgJHtuYW1lfUAke3NoYX1gKTtcbiAgICB9KTtcbiAgfVxufVxuXG4vKipcbiAqIFNldHMgTUFWRU5fT1BUUyBvbiB0aGUgbWF2ZW4gcHVibGlzaCBzdGVwIGFuZCBkcm9wcyB0aGUgdW51c2VkXG4gKiBNQVZFTl9TVEFHSU5HX1BST0ZJTEVfSUQsIHJlc29sdmluZyB0aGUgc3RlcCBieSB0aGUgY29tbWFuZCBpdCBydW5zLlxuICpcbiAqIFJ1bnMgaW4gcHJlU3ludGhlc2l6ZSBiZWNhdXNlIHRoZSBwdWJsaXNoIGpvYnMgYXJlIGFkZGVkIGJ5IFJlbGVhc2UgZHVyaW5nXG4gKiBzeW50aGVzaXMsIHNvIHRoZSBqb2IgZG9lcyBub3QgZXhpc3QgeWV0IGF0IGNvbnN0cnVjdGlvbiB0aW1lLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2Nka2xhYnMvcHVibGliL3B1bGwvNzc3XG4gKi9cbmNsYXNzIE1hdmVuT3B0c1BhdGNoIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgcHVibGljIHByZVN5bnRoZXNpemUoKSB7XG4gICAgY29uc3Qgd29ya2Zsb3cgPSBnaXRodWIuR2l0SHViLm9mKHRoaXMucHJvamVjdCk/LnRyeUZpbmRXb3JrZmxvdyhcInJlbGVhc2VcIik7XG4gICAgY29uc3Qgc3RlcHM6IEpvYlN0ZXBbXSB8IHVuZGVmaW5lZCA9ICh3b3JrZmxvdyBhcyBhbnkpPy5qb2JzPy5yZWxlYXNlX21hdmVuXG4gICAgICA/LnN0ZXBzO1xuICAgIGFzc2VydChcbiAgICAgIHN0ZXBzLFxuICAgICAgXCJyZWxlYXNlX21hdmVuIGpvYiBub3QgZm91bmQsIHBsZWFzZSBjaGVjayBpZiB0aGUgTUFWRU5fT1BUUyB3b3JrYXJvdW5kIHN0aWxsIHdvcmtzIVwiXG4gICAgKTtcbiAgICBjb25zdCBzdGVwID0gc3RlcHMuZmluZCgocykgPT4gcy5ydW4/LmluY2x1ZGVzKFwicHVibGliLW1hdmVuXCIpKTtcbiAgICBhc3NlcnQoXG4gICAgICBzdGVwPy5lbnYsXG4gICAgICBcIm5vIHB1YmxpYi1tYXZlbiBzdGVwIHdpdGggYW4gZW52IGJsb2NrIGluIHJlbGVhc2VfbWF2ZW4sIHBsZWFzZSBjaGVjayBpZiB0aGUgTUFWRU5fT1BUUyB3b3JrYXJvdW5kIHN0aWxsIHdvcmtzIVwiXG4gICAgKTtcbiAgICAvLyBNdXRhdGUgdGhlIHN0ZXAgZGlyZWN0bHkgcmF0aGVyIHRoYW4gSnNvblBhdGNoLWluZyB0aGUgcmVuZGVyZWQgZmlsZTogdGhlXG4gICAgLy8gcHVibGlzaGVyIHByZXBlbmRzIHRvb2wtc2V0dXAgc3RlcHMgYXQgcmVuZGVyIHRpbWUsIHNvIGluLW1lbW9yeSBpbmRpY2VzIGRvXG4gICAgLy8gbm90IG1hdGNoIHJlbmRlcmVkIG9uZXMsIGFuZCBhIEpTT04gUG9pbnRlciB3b3VsZCBoYXZlIHRvIGVuY29kZSB0aGF0IG9mZnNldC5cbiAgICAvLyBTZWUgaHR0cHM6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvNzAxNTM5NjIvbmV4dXMtc3RhZ2luZy1tYXZlbi1wbHVnaW4tbWF2ZW4tZGVwbG95LWZhaWxlZC1hbi1hcGktaW5jb21wYXRpYmlsaXR5LXdhcy1lbmNvXG4gICAgc3RlcC5lbnYuTUFWRU5fT1BUUyA9XG4gICAgICBcIi0tYWRkLW9wZW5zPWphdmEuYmFzZS9qYXZhLnV0aWw9QUxMLVVOTkFNRUQgLS1hZGQtb3BlbnM9amF2YS5iYXNlL2phdmEubGFuZy5yZWZsZWN0PUFMTC1VTk5BTUVEIC0tYWRkLW9wZW5zPWphdmEuYmFzZS9qYXZhLnRleHQ9QUxMLVVOTkFNRUQgLS1hZGQtb3BlbnM9amF2YS5kZXNrdG9wL2phdmEuYXd0LmZvbnQ9QUxMLVVOTkFNRURcIjtcbiAgICAvLyBUaGlzIGlzIG5vIGxvbmdlciB1c2VkLlxuICAgIGRlbGV0ZSBzdGVwLmVudi5NQVZFTl9TVEFHSU5HX1BST0ZJTEVfSUQ7XG4gIH1cbn1cblxuLyoqXG4gKiBGaXhlcyB1cCB0aGUgaGFuZC1idWlsdCBHbyBwdWJsaXNoIGpvYiwgd2hpY2ggYHB1Ymxpc2hUb0dvLnByZVB1Ymxpc2hTdGVwc2BcbiAqIGhhcyB0byBkZWNsYXJlIGJlZm9yZSBgc3VwZXIoKWAgYW5kIHRoZXJlZm9yZSBjYW5ub3QgYnVpbGQgY29tcGxldGVseTpcbiAqXG4gKiAtIGluc2VydHMgdGhlIFwiU2V0dXAgcG5wbVwiIHN0ZXAgdGhhdCBwcm9qZW4gaW5qZWN0cyBpbnRvIHRoZSB3b3JrZmxvd3MgaXRcbiAqICAgZ2VuZXJhdGVzIGl0c2VsZiBidXQgbm90IGludG8gaGFuZC1idWlsdCBvbmVzLCBhdCB0aGUgcHJvamVjdCdzIG93biBwbnBtXG4gKiAgIHZlcnNpb24gcmF0aGVyIHRoYW4gYSBjb3B5IG9mIGl0LiBBcHBsaWVzIHRvIGRlcHJlY2F0ZWQgcHJvamVjdHMgdG9vOiB0aGV5XG4gKiAgIHN0aWxsIHJ1biB0aGlzIGpvYiwgc28gdGhleSBzdGlsbCBuZWVkIHBucG0gb24gUEFUSDtcbiAqIC0gcHVzaGVzIHRoZSBtb2R1bGUgd2l0aCBhIEdpdEh1YiBBcHAgaW5zdGFsbGF0aW9uIHRva2VuIGluc3RlYWQgb2YgdGhlXG4gKiAgIGRlZmF1bHQgYEdPX0dJVEhVQl9UT0tFTmAgc2VjcmV0LCB3aGVuIGBhcHBUb2tlblJlcG9zaXRvcnlgIGlzIGdpdmVuLlxuICpcbiAqIFJ1bnMgaW4gcHJlU3ludGhlc2l6ZSBmb3IgdHdvIHJlYXNvbnM6IHRoZSBwdWJsaXNoIGpvYnMgYXJlIGFkZGVkIGJ5IFJlbGVhc2VcbiAqIGR1cmluZyBzeW50aGVzaXMsIHNvIHRoZSBqb2IgZG9lcyBub3QgZXhpc3QgYXQgY29uc3RydWN0aW9uIHRpbWUsIGFuZFxuICogYHRoaXMucGFja2FnZS5wbnBtVmVyc2lvbmAgaXMgb25seSByZWFkYWJsZSBhZnRlciBgc3VwZXIoKWAuXG4gKlxuICogQm90aCBzdGVwcyBhcmUgc3BsaWNlZCBpbiBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIHN0ZXAgdGhhdCBuZWVkcyB0aGVtLFxuICogcmVzb2x2ZWQgYnkgd2hhdCB0aGF0IHN0ZXAgcnVucy4gTmV2ZXIgYnkgaW5kZXg6IHJlbGVhc2VfZ29sYW5nJ3MgaW5kaWNlc1xuICogc2hpZnQgd2hlbmV2ZXIgdGhlIGpvYiBnYWlucyBhIHN0ZXAgLS0gYWRkaW5nIFwiU2V0dXAgcG5wbVwiIGlzIGV4YWN0bHkgd2hhdFxuICogbW92ZWQgdGhlIG9sZCBoYXJkY29kZWQgL3N0ZXBzLzE3L2VudiBvbnRvIGEgc3RlcCB3aXRoIG5vIGVudiBhdCBhbGwuXG4gKi9cbmNsYXNzIEdvUHVibGlzaEpvYlBhdGNoIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgcHJpdmF0ZSByZWFkb25seSBhcHBUb2tlblJlcG9zaXRvcnk/OiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBub2RlUHJvamVjdDogY2RrLkpzaWlQcm9qZWN0LFxuICAgIG9wdGlvbnM6IHsgYXBwVG9rZW5SZXBvc2l0b3J5Pzogc3RyaW5nIH1cbiAgKSB7XG4gICAgc3VwZXIobm9kZVByb2plY3QpO1xuICAgIHRoaXMuYXBwVG9rZW5SZXBvc2l0b3J5ID0gb3B0aW9ucy5hcHBUb2tlblJlcG9zaXRvcnk7XG4gIH1cblxuICBwdWJsaWMgcHJlU3ludGhlc2l6ZSgpIHtcbiAgICBjb25zdCB3b3JrZmxvdyA9IGdpdGh1Yi5HaXRIdWIub2YodGhpcy5wcm9qZWN0KT8udHJ5RmluZFdvcmtmbG93KFwicmVsZWFzZVwiKTtcbiAgICBjb25zdCBzdGVwczogSm9iU3RlcFtdIHwgdW5kZWZpbmVkID0gKHdvcmtmbG93IGFzIGFueSk/LmpvYnM/LnJlbGVhc2VfZ29sYW5nXG4gICAgICA/LnN0ZXBzO1xuICAgIGFzc2VydChcbiAgICAgIHN0ZXBzLFxuICAgICAgXCJyZWxlYXNlX2dvbGFuZyBqb2Igbm90IGZvdW5kLCBwbGVhc2UgY2hlY2sgaWYgdGhlIEdvIHB1Ymxpc2ggd29ya2Fyb3VuZHMgc3RpbGwgd29yayFcIlxuICAgICk7XG5cbiAgICAvLyBXaXRob3V0IHBucG0gb24gUEFUSCB0aGUgaW5zdGFsbCBiZWxvdyBleGl0cyAxMjcuIEJlZm9yZSB0aGUgcG5wbVxuICAgIC8vIG1pZ3JhdGlvbiByZWFjaGVkIHRoaXMgam9iIGl0IHJhbiBgeWFybiBpbnN0YWxsYCwgd2hpY2ggZmFpbGVkIG91dHJpZ2h0XG4gICAgLy8gYWdhaW5zdCBhIHBhY2thZ2UuanNvbiBkZWNsYXJpbmcgYHBhY2thZ2VNYW5hZ2VyOiBcInBucG1ALi4uXCJgLlxuICAgIGNvbnN0IGluc3RhbGxJbmRleCA9IHN0ZXBzLmZpbmRJbmRleCgocykgPT5cbiAgICAgIHMucnVuPy5pbmNsdWRlcyhcInBucG0gaW5zdGFsbFwiKVxuICAgICk7XG4gICAgYXNzZXJ0KFxuICAgICAgaW5zdGFsbEluZGV4ID49IDAsXG4gICAgICBcIm5vIHBucG0gaW5zdGFsbCBzdGVwIGluIHJlbGVhc2VfZ29sYW5nLCBwbGVhc2UgY2hlY2sgaWYgdGhlIFNldHVwIHBucG0gd29ya2Fyb3VuZCBzdGlsbCB3b3JrcyFcIlxuICAgICk7XG4gICAgc3RlcHMuc3BsaWNlKGluc3RhbGxJbmRleCwgMCwge1xuICAgICAgbmFtZTogXCJTZXR1cCBwbnBtXCIsXG4gICAgICB1c2VzOiBcInBucG0vYWN0aW9uLXNldHVwXCIsXG4gICAgICB3aXRoOiB7IHZlcnNpb246IHRoaXMubm9kZVByb2plY3QucGFja2FnZS5wbnBtVmVyc2lvbiB9LFxuICAgIH0pO1xuXG4gICAgaWYgKCF0aGlzLmFwcFRva2VuUmVwb3NpdG9yeSkgcmV0dXJuO1xuXG4gICAgY29uc3QgaW5kZXggPSBzdGVwcy5maW5kSW5kZXgoKHMpID0+IHMucnVuPy5pbmNsdWRlcyhcInB1YmxpYi1nb2xhbmdcIikpO1xuICAgIGNvbnN0IHN0ZXAgPSBzdGVwc1tpbmRleF07XG4gICAgYXNzZXJ0KFxuICAgICAgc3RlcD8uZW52LFxuICAgICAgXCJubyBwdWJsaWItZ29sYW5nIHN0ZXAgd2l0aCBhbiBlbnYgYmxvY2sgaW4gcmVsZWFzZV9nb2xhbmcsIHBsZWFzZSBjaGVjayBpZiB0aGUgR28gcHVibGlzaCB0b2tlbiB3b3JrYXJvdW5kIHN0aWxsIHdvcmtzIVwiXG4gICAgKTtcblxuICAgIGNvbnN0IGdvUHVibGlzaFRva2VuID0gZ2l0aHViLkdpdGh1YkNyZWRlbnRpYWxzLmZyb21BcHAoe1xuICAgICAgYXBwSWRTZWNyZXQ6IFwiUFJPSkVOX0FQUF9JRFwiLFxuICAgICAgcHJpdmF0ZUtleVNlY3JldDogXCJQUk9KRU5fQVBQX1BSSVZBVEVfS0VZXCIsXG4gICAgICBvd25lcjogXCIke3sgZ2l0aHViLnJlcG9zaXRvcnlfb3duZXIgfX1cIixcbiAgICAgIHJlcG9zaXRvcmllczogW3RoaXMuYXBwVG9rZW5SZXBvc2l0b3J5XSxcbiAgICAgIHBlcm1pc3Npb25zOiB7IGNvbnRlbnRzOiBnaXRodWIud29ya2Zsb3dzLkFwcFBlcm1pc3Npb24uV1JJVEUgfSxcbiAgICB9KTtcblxuICAgIC8vIE11dGF0ZSB0aGUgc3RlcHMgZGlyZWN0bHkgcmF0aGVyIHRoYW4gSnNvblBhdGNoLWluZyB0aGUgcmVuZGVyZWQgZmlsZSwgc29cbiAgICAvLyB0aGUgdG9rZW4tbWludGluZyBzdGVwIHN0YXlzIGFuY2hvcmVkIHRvIHRoZSBwdWJsaXNoIHN0ZXAgaXQgZmVlZHMuXG4gICAgc3RlcHMuc3BsaWNlKGluZGV4LCAwLCBnb1B1Ymxpc2hUb2tlbi5zZXR1cFN0ZXBzWzBdKTtcbiAgICAvLyBHaXRIdWIgQXBwIGluc3RhbGxhdGlvbiB0b2tlbnMgKGdoc18qKSByZXF1aXJlIHRoZSBgeC1hY2Nlc3MtdG9rZW5gXG4gICAgLy8gdXNlcm5hbWUgd2hlbiB1c2VkIGluIEhUVFBTIGdpdCBVUkxzLiBwdWJsaWIgcmVuZGVycyB0aGlzIGVudiB2YXJcbiAgICAvLyB2ZXJiYXRpbSBpbnRvIGBodHRwczovLyR7R0lUSFVCX1RPS0VOfUBnaXRodWIuY29tLy4uLmAsIHNvIHdpdGhvdXQgdGhlXG4gICAgLy8gcHJlZml4IHRoZSBwdXNoIDQwMXMgYW5kIGZhbGxzIGJhY2sgdG8gYSBUVFkgcGFzc3dvcmQgcHJvbXB0LlxuICAgIHN0ZXAuZW52LkdJVEhVQl9UT0tFTiA9IGB4LWFjY2Vzcy10b2tlbjoke2dvUHVibGlzaFRva2VuLnRva2VuUmVmfWA7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHJldHR5QXNzZXJ0RXF1YWw8VD4oc3ViamVjdDogVCwgZXhwZWN0ZWQ6IFQsIG1lc3NhZ2U/OiBzdHJpbmcpOiB2b2lkIHtcbiAgaWYgKHN1YmplY3QgIT09IGV4cGVjdGVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgYCR7bWVzc2FnZSA/PyBcIkFzc2VydGlvbiBmYWlsZWRcIn06IGV4cGVjdGVkICR7SlNPTi5zdHJpbmdpZnkoXG4gICAgICAgIGV4cGVjdGVkXG4gICAgICApfSBidXQgZ290ICR7SlNPTi5zdHJpbmdpZnkoc3ViamVjdCl9YFxuICAgICk7XG4gIH1cbn1cbiJdfQ==
package/package.json CHANGED
@@ -68,7 +68,7 @@
68
68
  "publishConfig": {
69
69
  "access": "public"
70
70
  },
71
- "version": "0.9.10",
71
+ "version": "0.9.11",
72
72
  "jest": {
73
73
  "coverageProvider": "v8",
74
74
  "testMatch": [