projen 0.100.6 → 0.100.7

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 (151) hide show
  1. package/.jsii +149 -58
  2. package/lib/ai-instructions.js +2 -2
  3. package/lib/awscdk/auto-discover.js +6 -6
  4. package/lib/awscdk/awscdk-app-java.js +1 -1
  5. package/lib/awscdk/awscdk-app-py.js +1 -1
  6. package/lib/awscdk/awscdk-app-ts.js +1 -1
  7. package/lib/awscdk/awscdk-construct.js +1 -1
  8. package/lib/awscdk/awscdk-deps-java.js +1 -1
  9. package/lib/awscdk/awscdk-deps-js.js +1 -1
  10. package/lib/awscdk/awscdk-deps-py.js +1 -1
  11. package/lib/awscdk/awscdk-deps.js +1 -1
  12. package/lib/awscdk/cdk-config.js +3 -3
  13. package/lib/awscdk/cdk-tasks.js +9 -9
  14. package/lib/awscdk/integ-runner.js +9 -3
  15. package/lib/awscdk/integration-test.js +12 -6
  16. package/lib/awscdk/lambda-extension.js +1 -1
  17. package/lib/awscdk/lambda-function.js +2 -2
  18. package/lib/build/build-workflow.js +1 -1
  19. package/lib/cdk/auto-discover-base.js +2 -2
  20. package/lib/cdk/construct-lib.js +1 -1
  21. package/lib/cdk/integration-test-base.js +1 -1
  22. package/lib/cdk/jsii-build.js +5 -5
  23. package/lib/cdk/jsii-docgen.js +3 -3
  24. package/lib/cdk/jsii-project.js +1 -1
  25. package/lib/cdk8s/auto-discover.js +2 -2
  26. package/lib/cdk8s/cdk8s-app-py.js +3 -3
  27. package/lib/cdk8s/cdk8s-app-ts.js +4 -4
  28. package/lib/cdk8s/cdk8s-construct.js +1 -1
  29. package/lib/cdk8s/cdk8s-deps-py.js +1 -1
  30. package/lib/cdk8s/cdk8s-deps.js +1 -1
  31. package/lib/cdk8s/integration-test.js +17 -10
  32. package/lib/cdktf/cdktf-construct.js +1 -1
  33. package/lib/circleci/circleci.js +1 -1
  34. package/lib/cli/cmds/run-task.js +4 -1
  35. package/lib/cli/task-runtime.js +82 -19
  36. package/lib/common.d.ts +1 -1
  37. package/lib/common.js +2 -2
  38. package/lib/component.js +1 -1
  39. package/lib/dependencies.js +1 -1
  40. package/lib/dev-env.js +1 -1
  41. package/lib/docker-compose/docker-compose-service.js +1 -1
  42. package/lib/docker-compose/docker-compose.js +1 -1
  43. package/lib/file.js +1 -1
  44. package/lib/gitattributes.js +1 -1
  45. package/lib/github/actions-provider.js +1 -1
  46. package/lib/github/auto-approve.js +1 -1
  47. package/lib/github/auto-merge.js +1 -1
  48. package/lib/github/auto-queue.js +1 -1
  49. package/lib/github/dependabot.js +1 -1
  50. package/lib/github/dependency-review.js +1 -1
  51. package/lib/github/github-credentials.js +1 -1
  52. package/lib/github/github-project.js +1 -1
  53. package/lib/github/github.js +1 -1
  54. package/lib/github/merge-queue.js +1 -1
  55. package/lib/github/mergify.js +1 -1
  56. package/lib/github/pr-template.js +1 -1
  57. package/lib/github/pull-request-backport.js +1 -1
  58. package/lib/github/pull-request-lint.js +1 -1
  59. package/lib/github/stale.js +1 -1
  60. package/lib/github/task-workflow-job.js +1 -1
  61. package/lib/github/task-workflow.js +1 -1
  62. package/lib/github/workflow-actions.js +1 -1
  63. package/lib/github/workflow-jobs.js +1 -1
  64. package/lib/github/workflow-steps.js +1 -1
  65. package/lib/github/workflows.js +1 -1
  66. package/lib/gitlab/configuration.js +1 -1
  67. package/lib/gitlab/gitlab-configuration.js +1 -1
  68. package/lib/gitlab/nested-configuration.js +1 -1
  69. package/lib/gitpod.js +1 -1
  70. package/lib/ignore-file.js +1 -1
  71. package/lib/ini.js +1 -1
  72. package/lib/java/java-project.js +1 -1
  73. package/lib/java/junit.js +3 -3
  74. package/lib/java/maven-compile.js +3 -3
  75. package/lib/java/maven-packaging.js +3 -3
  76. package/lib/java/maven-sample.js +1 -1
  77. package/lib/java/pom.js +2 -2
  78. package/lib/java/projenrc.js +3 -3
  79. package/lib/javascript/biome/biome.js +1 -1
  80. package/lib/javascript/bundler.js +3 -3
  81. package/lib/javascript/eslint.js +1 -1
  82. package/lib/javascript/jest.js +4 -4
  83. package/lib/javascript/license-checker.js +5 -5
  84. package/lib/javascript/node-package.js +1 -1
  85. package/lib/javascript/node-project.js +13 -4
  86. package/lib/javascript/npm-config.js +1 -1
  87. package/lib/javascript/prettier.js +1 -1
  88. package/lib/javascript/projenrc.js +3 -3
  89. package/lib/javascript/typescript-config.js +2 -2
  90. package/lib/javascript/upgrade-dependencies.js +4 -4
  91. package/lib/javascript/yarnrc.js +1 -1
  92. package/lib/json-patch.js +1 -1
  93. package/lib/json.js +1 -1
  94. package/lib/license.js +1 -1
  95. package/lib/logger.js +1 -1
  96. package/lib/makefile.js +1 -1
  97. package/lib/object-file.js +1 -1
  98. package/lib/project-build.js +1 -1
  99. package/lib/project-tree.js +1 -1
  100. package/lib/project.js +1 -1
  101. package/lib/projects.js +1 -1
  102. package/lib/projenrc-json.js +1 -1
  103. package/lib/projenrc.js +1 -1
  104. package/lib/python/pip.js +17 -5
  105. package/lib/python/poetry.js +7 -7
  106. package/lib/python/projenrc.js +3 -3
  107. package/lib/python/pyproject-toml-file.js +1 -1
  108. package/lib/python/pytest-sample.js +1 -1
  109. package/lib/python/pytest.js +1 -1
  110. package/lib/python/python-project.js +1 -1
  111. package/lib/python/python-sample.js +1 -1
  112. package/lib/python/requirements-file.js +1 -1
  113. package/lib/python/setuppy.js +1 -1
  114. package/lib/python/setuptools.js +8 -3
  115. package/lib/python/uv.js +6 -6
  116. package/lib/python/venv.js +1 -1
  117. package/lib/readme.js +1 -1
  118. package/lib/release/publisher.js +1 -1
  119. package/lib/release/release-trigger.js +1 -1
  120. package/lib/release/release.js +1 -1
  121. package/lib/renovatebot.js +1 -1
  122. package/lib/run-task.cjs +56 -20
  123. package/lib/sample-file.js +2 -2
  124. package/lib/source-code.js +1 -1
  125. package/lib/task-model.d.ts +25 -1
  126. package/lib/task-model.js +1 -1
  127. package/lib/task.d.ts +33 -0
  128. package/lib/task.js +28 -2
  129. package/lib/tasks.js +1 -1
  130. package/lib/testing.js +1 -1
  131. package/lib/textfile.js +1 -1
  132. package/lib/toml.js +1 -1
  133. package/lib/typescript/projenrc-ts.js +1 -1
  134. package/lib/typescript/projenrc.js +1 -1
  135. package/lib/typescript/typescript-typedoc.js +9 -3
  136. package/lib/typescript/typescript.js +8 -10
  137. package/lib/util/exec.d.ts +1 -1
  138. package/lib/util/exec.js +1 -1
  139. package/lib/version.js +2 -2
  140. package/lib/vscode/devcontainer.js +1 -1
  141. package/lib/vscode/extensions.js +1 -1
  142. package/lib/vscode/launch-config.js +1 -1
  143. package/lib/vscode/settings.js +1 -1
  144. package/lib/vscode/vscode.js +1 -1
  145. package/lib/web/next.js +9 -9
  146. package/lib/web/postcss.js +1 -1
  147. package/lib/web/react.js +7 -7
  148. package/lib/web/tailwind.js +1 -1
  149. package/lib/xmlfile.js +1 -1
  150. package/lib/yaml.js +1 -1
  151. package/package.json +4 -4
@@ -45,7 +45,7 @@ const DEFAULT_TEST_REPORTS_DIR = "test-reports";
45
45
  class Transform {
46
46
  name;
47
47
  options;
48
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Transform", version: "0.100.6" };
48
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Transform", version: "0.100.7" };
49
49
  constructor(name, options) {
50
50
  this.name = name;
51
51
  this.options = options;
@@ -65,7 +65,7 @@ exports.Transform = Transform;
65
65
  class WatchPlugin {
66
66
  name;
67
67
  options;
68
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.WatchPlugin", version: "0.100.6" };
68
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.WatchPlugin", version: "0.100.7" };
69
69
  constructor(name, options) {
70
70
  this.name = name;
71
71
  this.options = options;
@@ -96,7 +96,7 @@ var UpdateSnapshot;
96
96
  class JestReporter {
97
97
  name;
98
98
  options;
99
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.JestReporter", version: "0.100.6" };
99
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.JestReporter", version: "0.100.7" };
100
100
  constructor(name, options) {
101
101
  this.name = name;
102
102
  this.options = options;
@@ -122,7 +122,7 @@ exports.JestReporter = JestReporter;
122
122
  *
123
123
  */
124
124
  class Jest extends component_1.Component {
125
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Jest", version: "0.100.6" };
125
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Jest", version: "0.100.7" };
126
126
  /**
127
127
  * Returns the singleton Jest component of a project or undefined if there is none.
128
128
  */
@@ -8,7 +8,7 @@ const dependencies_1 = require("../dependencies");
8
8
  * Enforces allowed licenses used by dependencies.
9
9
  */
10
10
  class LicenseChecker extends component_1.Component {
11
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.LicenseChecker", version: "0.100.6" };
11
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.LicenseChecker", version: "0.100.7" };
12
12
  task;
13
13
  constructor(scope, options) {
14
14
  const taskName = options.taskName ?? "check-licenses";
@@ -32,19 +32,19 @@ class LicenseChecker extends component_1.Component {
32
32
  }
33
33
  if (allowedLicenses.length) {
34
34
  cmd.push("--onlyAllow");
35
- cmd.push(`"${allowedLicenses.join(";")}"`);
35
+ cmd.push(allowedLicenses.join(";"));
36
36
  }
37
37
  if (prohibitedLicenses.length) {
38
38
  cmd.push("--failOn");
39
- cmd.push(`"${prohibitedLicenses.join(";")}"`);
39
+ cmd.push(prohibitedLicenses.join(";"));
40
40
  }
41
41
  this.project.deps.addDependency("license-checker", dependencies_1.DependencyType.BUILD);
42
42
  this.task = this.project.addTask(taskName, {
43
- exec: cmd.join(" "),
43
+ execArgs: cmd,
44
44
  receiveArgs: true,
45
45
  });
46
46
  this.project.preCompileTask.spawn(this.task);
47
47
  }
48
48
  }
49
49
  exports.LicenseChecker = LicenseChecker;
50
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGljZW5zZS1jaGVja2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2phdmFzY3JpcHQvbGljZW5zZS1jaGVja2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSw0Q0FBeUM7QUFDekMsa0RBQWlEO0FBNkNqRDs7R0FFRztBQUNILE1BQWEsY0FBZSxTQUFRLHFCQUFTOztJQUMzQixJQUFJLENBQU87SUFFM0IsWUFBbUIsS0FBZ0IsRUFBRSxPQUE4QjtRQUNqRSxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxJQUFJLGdCQUFnQixDQUFDO1FBQ3RELEtBQUssQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFFM0MsTUFBTSxFQUNKLFVBQVUsR0FBRyxJQUFJLEVBQ2pCLFdBQVcsR0FBRyxLQUFLLEVBQ25CLEtBQUssRUFBRSxlQUFlLEdBQUcsRUFBRSxFQUMzQixJQUFJLEVBQUUsa0JBQWtCLEdBQUcsRUFBRSxHQUM5QixHQUFHLE9BQU8sQ0FBQztRQUVaLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNoQyxNQUFNLElBQUksS0FBSyxDQUNiLGdGQUFnRixDQUNqRixDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDMUQsTUFBTSxJQUFJLEtBQUssQ0FDYiwrRkFBK0YsQ0FDaEcsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLGVBQWUsQ0FBQyxNQUFNLElBQUksa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDeEQsTUFBTSxJQUFJLEtBQUssQ0FDYiwrRkFBK0YsQ0FDaEcsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLEdBQUcsR0FBRyxDQUFDLGlCQUFpQixFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRTdDLElBQUksVUFBVSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDL0IsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMzQixDQUFDO1FBQ0QsSUFBSSxXQUFXLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMvQixHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzVCLENBQUM7UUFDRCxJQUFJLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMzQixHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3hCLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxlQUFlLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUM3QyxDQUFDO1FBQ0QsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM5QixHQUFHLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3JCLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hELENBQUM7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsaUJBQWlCLEVBQUUsNkJBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN6RSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRTtZQUN6QyxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDbkIsV0FBVyxFQUFFLElBQUk7U0FDbEIsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDOztBQXJESCx3Q0FzREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiLi4vY29tcG9uZW50XCI7XG5pbXBvcnQgeyBEZXBlbmRlbmN5VHlwZSB9IGZyb20gXCIuLi9kZXBlbmRlbmNpZXNcIjtcbmltcG9ydCB0eXBlIHsgVGFzayB9IGZyb20gXCIuLi90YXNrXCI7XG5cbi8qKlxuICogT3B0aW9ucyB0byBjb25maWd1cmUgdGhlIGxpY2Vuc2UgY2hlY2tlclxuICovXG5leHBvcnQgaW50ZXJmYWNlIExpY2Vuc2VDaGVja2VyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBDaGVjayBwcm9kdWN0aW9uIGRlcGVuZGVuY2llcy5cbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZHVjdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENoZWNrIGRldmVsb3BtZW50IGRlcGVuZGVuY2llcy5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGRldmVsb3BtZW50PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTGlzdCBvZiBTUERYIGxpY2Vuc2UgaWRlbnRpZmllcnMgdGhhdCBhcmUgYWxsb3dlZCB0byBiZSB1c2VkLlxuICAgKlxuICAgKiBGb3IgdGhlIGxpY2Vuc2UgY2hlY2sgdG8gcGFzcywgYWxsIGRldGVjdGVkIGxpY2Vuc2VzIE1VU1QgYmUgaW4gdGhpcyBsaXN0LlxuICAgKiBPbmx5IG9uZSBvZiBgYWxsb3dlZExpY2Vuc2VzYCBhbmQgYHByb2hpYml0ZWRMaWNlbnNlc2AgY2FuIGJlIHByb3ZpZGVkIGFuZCBtdXN0IG5vdCBiZSBlbXB0eS5cbiAgICogQGRlZmF1bHQgLSBubyBsaWNlbnNlcyBhcmUgYWxsb3dlZFxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3c/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTGlzdCBvZiBTUERYIGxpY2Vuc2UgaWRlbnRpZmllcnMgdGhhdCBhcmUgcHJvaGliaXRlZCB0byBiZSB1c2VkLlxuICAgKlxuICAgKiBGb3IgdGhlIGxpY2Vuc2UgY2hlY2sgdG8gcGFzcywgbm8gZGV0ZWN0ZWQgbGljZW5zZXMgY2FuIGJlIGluIHRoaXMgbGlzdC5cbiAgICogT25seSBvbmUgb2YgYGFsbG93ZWRMaWNlbnNlc2AgYW5kIGBwcm9oaWJpdGVkTGljZW5zZXNgIGNhbiBiZSBwcm92aWRlZCBhbmQgbXVzdCBub3QgYmUgZW1wdHkuXG4gICAqIEBkZWZhdWx0IC0gbm8gbGljZW5zZXMgYXJlIHByb2hpYml0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGRlbnk/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHRhc2sgdGhhdCBpcyBhZGRlZCB0byBjaGVjayBsaWNlbnNlc1xuICAgKlxuICAgKiBAZGVmYXVsdCBcImNoZWNrLWxpY2Vuc2VzXCJcbiAgICovXG4gIHJlYWRvbmx5IHRhc2tOYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEVuZm9yY2VzIGFsbG93ZWQgbGljZW5zZXMgdXNlZCBieSBkZXBlbmRlbmNpZXMuXG4gKi9cbmV4cG9ydCBjbGFzcyBMaWNlbnNlQ2hlY2tlciBleHRlbmRzIENvbXBvbmVudCB7XG4gIHB1YmxpYyByZWFkb25seSB0YXNrOiBUYXNrO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBvcHRpb25zOiBMaWNlbnNlQ2hlY2tlck9wdGlvbnMpIHtcbiAgICBjb25zdCB0YXNrTmFtZSA9IG9wdGlvbnMudGFza05hbWUgPz8gXCJjaGVjay1saWNlbnNlc1wiO1xuICAgIHN1cGVyKHNjb3BlLCBgTGljZW5zZUNoZWNrZXIjJHt0YXNrTmFtZX1gKTtcblxuICAgIGNvbnN0IHtcbiAgICAgIHByb2R1Y3Rpb24gPSB0cnVlLFxuICAgICAgZGV2ZWxvcG1lbnQgPSBmYWxzZSxcbiAgICAgIGFsbG93OiBhbGxvd2VkTGljZW5zZXMgPSBbXSxcbiAgICAgIGRlbnk6IHByb2hpYml0ZWRMaWNlbnNlcyA9IFtdLFxuICAgIH0gPSBvcHRpb25zO1xuXG4gICAgaWYgKCFwcm9kdWN0aW9uICYmICFkZXZlbG9wbWVudCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIkxpY2Vuc2VDaGVja2VyOiBBdCBsZWFzdCBvbmUgb2YgYHByb2R1Y3Rpb25gIG9yIGBkZXZlbG9wbWVudGAgbXVzdCBiZSBlbmFibGVkLlwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCFhbGxvd2VkTGljZW5zZXMubGVuZ3RoICYmICFwcm9oaWJpdGVkTGljZW5zZXMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiTGljZW5zZUNoZWNrZXI6IE5laXRoZXIgYGFsbG93YCBub3IgYGRlbnlgIGZvdW5kLiBFeGFjdGx5IG9uZSBtdXN0IGJlIHByb3ZpZGVkIGFuZCBub3QgZW1wdHkuXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoYWxsb3dlZExpY2Vuc2VzLmxlbmd0aCAmJiBwcm9oaWJpdGVkTGljZW5zZXMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiTGljZW5zZUNoZWNrZXI6IGBhbGxvd2AgYW5kIGBkZW55YCBjYW4gbm90IGJlIHVzZWQgYXQgdGhlIHNhbWUgdGltZS4gQ2hvb3NlIG9uZSBvciB0aGUgb3RoZXIuXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGNtZCA9IFtcImxpY2Vuc2UtY2hlY2tlclwiLCBcIi0tc3VtbWFyeVwiXTtcblxuICAgIGlmIChwcm9kdWN0aW9uICYmICFkZXZlbG9wbWVudCkge1xuICAgICAgY21kLnB1c2goXCItLXByb2R1Y3Rpb25cIik7XG4gICAgfVxuICAgIGlmIChkZXZlbG9wbWVudCAmJiAhcHJvZHVjdGlvbikge1xuICAgICAgY21kLnB1c2goXCItLWRldmVsb3BtZW50XCIpO1xuICAgIH1cbiAgICBpZiAoYWxsb3dlZExpY2Vuc2VzLmxlbmd0aCkge1xuICAgICAgY21kLnB1c2goXCItLW9ubHlBbGxvd1wiKTtcbiAgICAgIGNtZC5wdXNoKGBcIiR7YWxsb3dlZExpY2Vuc2VzLmpvaW4oXCI7XCIpfVwiYCk7XG4gICAgfVxuICAgIGlmIChwcm9oaWJpdGVkTGljZW5zZXMubGVuZ3RoKSB7XG4gICAgICBjbWQucHVzaChcIi0tZmFpbE9uXCIpO1xuICAgICAgY21kLnB1c2goYFwiJHtwcm9oaWJpdGVkTGljZW5zZXMuam9pbihcIjtcIil9XCJgKTtcbiAgICB9XG5cbiAgICB0aGlzLnByb2plY3QuZGVwcy5hZGREZXBlbmRlbmN5KFwibGljZW5zZS1jaGVja2VyXCIsIERlcGVuZGVuY3lUeXBlLkJVSUxEKTtcbiAgICB0aGlzLnRhc2sgPSB0aGlzLnByb2plY3QuYWRkVGFzayh0YXNrTmFtZSwge1xuICAgICAgZXhlYzogY21kLmpvaW4oXCIgXCIpLFxuICAgICAgcmVjZWl2ZUFyZ3M6IHRydWUsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9qZWN0LnByZUNvbXBpbGVUYXNrLnNwYXduKHRoaXMudGFzayk7XG4gIH1cbn1cbiJdfQ==
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGljZW5zZS1jaGVja2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2phdmFzY3JpcHQvbGljZW5zZS1jaGVja2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFDQSw0Q0FBeUM7QUFDekMsa0RBQWlEO0FBNkNqRDs7R0FFRztBQUNILE1BQWEsY0FBZSxTQUFRLHFCQUFTOztJQUMzQixJQUFJLENBQU87SUFFM0IsWUFBbUIsS0FBZ0IsRUFBRSxPQUE4QjtRQUNqRSxNQUFNLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxJQUFJLGdCQUFnQixDQUFDO1FBQ3RELEtBQUssQ0FBQyxLQUFLLEVBQUUsa0JBQWtCLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFFM0MsTUFBTSxFQUNKLFVBQVUsR0FBRyxJQUFJLEVBQ2pCLFdBQVcsR0FBRyxLQUFLLEVBQ25CLEtBQUssRUFBRSxlQUFlLEdBQUcsRUFBRSxFQUMzQixJQUFJLEVBQUUsa0JBQWtCLEdBQUcsRUFBRSxHQUM5QixHQUFHLE9BQU8sQ0FBQztRQUVaLElBQUksQ0FBQyxVQUFVLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNoQyxNQUFNLElBQUksS0FBSyxDQUNiLGdGQUFnRixDQUNqRixDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDMUQsTUFBTSxJQUFJLEtBQUssQ0FDYiwrRkFBK0YsQ0FDaEcsQ0FBQztRQUNKLENBQUM7UUFDRCxJQUFJLGVBQWUsQ0FBQyxNQUFNLElBQUksa0JBQWtCLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDeEQsTUFBTSxJQUFJLEtBQUssQ0FDYiwrRkFBK0YsQ0FDaEcsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLEdBQUcsR0FBRyxDQUFDLGlCQUFpQixFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBRTdDLElBQUksVUFBVSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDL0IsR0FBRyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMzQixDQUFDO1FBQ0QsSUFBSSxXQUFXLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMvQixHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1FBQzVCLENBQUM7UUFDRCxJQUFJLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMzQixHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3hCLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ3RDLENBQUM7UUFDRCxJQUFJLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzlCLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDckIsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUN6QyxDQUFDO1FBRUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLGlCQUFpQixFQUFFLDZCQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDekUsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7WUFDekMsUUFBUSxFQUFFLEdBQUc7WUFDYixXQUFXLEVBQUUsSUFBSTtTQUNsQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9DLENBQUM7O0FBckRILHdDQXNEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCIuLi9jb21wb25lbnRcIjtcbmltcG9ydCB7IERlcGVuZGVuY3lUeXBlIH0gZnJvbSBcIi4uL2RlcGVuZGVuY2llc1wiO1xuaW1wb3J0IHR5cGUgeyBUYXNrIH0gZnJvbSBcIi4uL3Rhc2tcIjtcblxuLyoqXG4gKiBPcHRpb25zIHRvIGNvbmZpZ3VyZSB0aGUgbGljZW5zZSBjaGVja2VyXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGljZW5zZUNoZWNrZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIENoZWNrIHByb2R1Y3Rpb24gZGVwZW5kZW5jaWVzLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBwcm9kdWN0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ2hlY2sgZGV2ZWxvcG1lbnQgZGVwZW5kZW5jaWVzLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGV2ZWxvcG1lbnQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIFNQRFggbGljZW5zZSBpZGVudGlmaWVycyB0aGF0IGFyZSBhbGxvd2VkIHRvIGJlIHVzZWQuXG4gICAqXG4gICAqIEZvciB0aGUgbGljZW5zZSBjaGVjayB0byBwYXNzLCBhbGwgZGV0ZWN0ZWQgbGljZW5zZXMgTVVTVCBiZSBpbiB0aGlzIGxpc3QuXG4gICAqIE9ubHkgb25lIG9mIGBhbGxvd2VkTGljZW5zZXNgIGFuZCBgcHJvaGliaXRlZExpY2Vuc2VzYCBjYW4gYmUgcHJvdmlkZWQgYW5kIG11c3Qgbm90IGJlIGVtcHR5LlxuICAgKiBAZGVmYXVsdCAtIG5vIGxpY2Vuc2VzIGFyZSBhbGxvd2VkXG4gICAqL1xuICByZWFkb25seSBhbGxvdz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBMaXN0IG9mIFNQRFggbGljZW5zZSBpZGVudGlmaWVycyB0aGF0IGFyZSBwcm9oaWJpdGVkIHRvIGJlIHVzZWQuXG4gICAqXG4gICAqIEZvciB0aGUgbGljZW5zZSBjaGVjayB0byBwYXNzLCBubyBkZXRlY3RlZCBsaWNlbnNlcyBjYW4gYmUgaW4gdGhpcyBsaXN0LlxuICAgKiBPbmx5IG9uZSBvZiBgYWxsb3dlZExpY2Vuc2VzYCBhbmQgYHByb2hpYml0ZWRMaWNlbnNlc2AgY2FuIGJlIHByb3ZpZGVkIGFuZCBtdXN0IG5vdCBiZSBlbXB0eS5cbiAgICogQGRlZmF1bHQgLSBubyBsaWNlbnNlcyBhcmUgcHJvaGliaXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgZGVueT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgdGFzayB0aGF0IGlzIGFkZGVkIHRvIGNoZWNrIGxpY2Vuc2VzXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiY2hlY2stbGljZW5zZXNcIlxuICAgKi9cbiAgcmVhZG9ubHkgdGFza05hbWU/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogRW5mb3JjZXMgYWxsb3dlZCBsaWNlbnNlcyB1c2VkIGJ5IGRlcGVuZGVuY2llcy5cbiAqL1xuZXhwb3J0IGNsYXNzIExpY2Vuc2VDaGVja2VyIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgcHVibGljIHJlYWRvbmx5IHRhc2s6IFRhc2s7XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIG9wdGlvbnM6IExpY2Vuc2VDaGVja2VyT3B0aW9ucykge1xuICAgIGNvbnN0IHRhc2tOYW1lID0gb3B0aW9ucy50YXNrTmFtZSA/PyBcImNoZWNrLWxpY2Vuc2VzXCI7XG4gICAgc3VwZXIoc2NvcGUsIGBMaWNlbnNlQ2hlY2tlciMke3Rhc2tOYW1lfWApO1xuXG4gICAgY29uc3Qge1xuICAgICAgcHJvZHVjdGlvbiA9IHRydWUsXG4gICAgICBkZXZlbG9wbWVudCA9IGZhbHNlLFxuICAgICAgYWxsb3c6IGFsbG93ZWRMaWNlbnNlcyA9IFtdLFxuICAgICAgZGVueTogcHJvaGliaXRlZExpY2Vuc2VzID0gW10sXG4gICAgfSA9IG9wdGlvbnM7XG5cbiAgICBpZiAoIXByb2R1Y3Rpb24gJiYgIWRldmVsb3BtZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiTGljZW5zZUNoZWNrZXI6IEF0IGxlYXN0IG9uZSBvZiBgcHJvZHVjdGlvbmAgb3IgYGRldmVsb3BtZW50YCBtdXN0IGJlIGVuYWJsZWQuXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAoIWFsbG93ZWRMaWNlbnNlcy5sZW5ndGggJiYgIXByb2hpYml0ZWRMaWNlbnNlcy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJMaWNlbnNlQ2hlY2tlcjogTmVpdGhlciBgYWxsb3dgIG5vciBgZGVueWAgZm91bmQuIEV4YWN0bHkgb25lIG11c3QgYmUgcHJvdmlkZWQgYW5kIG5vdCBlbXB0eS5cIixcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxvd2VkTGljZW5zZXMubGVuZ3RoICYmIHByb2hpYml0ZWRMaWNlbnNlcy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJMaWNlbnNlQ2hlY2tlcjogYGFsbG93YCBhbmQgYGRlbnlgIGNhbiBub3QgYmUgdXNlZCBhdCB0aGUgc2FtZSB0aW1lLiBDaG9vc2Ugb25lIG9yIHRoZSBvdGhlci5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgY21kID0gW1wibGljZW5zZS1jaGVja2VyXCIsIFwiLS1zdW1tYXJ5XCJdO1xuXG4gICAgaWYgKHByb2R1Y3Rpb24gJiYgIWRldmVsb3BtZW50KSB7XG4gICAgICBjbWQucHVzaChcIi0tcHJvZHVjdGlvblwiKTtcbiAgICB9XG4gICAgaWYgKGRldmVsb3BtZW50ICYmICFwcm9kdWN0aW9uKSB7XG4gICAgICBjbWQucHVzaChcIi0tZGV2ZWxvcG1lbnRcIik7XG4gICAgfVxuICAgIGlmIChhbGxvd2VkTGljZW5zZXMubGVuZ3RoKSB7XG4gICAgICBjbWQucHVzaChcIi0tb25seUFsbG93XCIpO1xuICAgICAgY21kLnB1c2goYWxsb3dlZExpY2Vuc2VzLmpvaW4oXCI7XCIpKTtcbiAgICB9XG4gICAgaWYgKHByb2hpYml0ZWRMaWNlbnNlcy5sZW5ndGgpIHtcbiAgICAgIGNtZC5wdXNoKFwiLS1mYWlsT25cIik7XG4gICAgICBjbWQucHVzaChwcm9oaWJpdGVkTGljZW5zZXMuam9pbihcIjtcIikpO1xuICAgIH1cblxuICAgIHRoaXMucHJvamVjdC5kZXBzLmFkZERlcGVuZGVuY3koXCJsaWNlbnNlLWNoZWNrZXJcIiwgRGVwZW5kZW5jeVR5cGUuQlVJTEQpO1xuICAgIHRoaXMudGFzayA9IHRoaXMucHJvamVjdC5hZGRUYXNrKHRhc2tOYW1lLCB7XG4gICAgICBleGVjQXJnczogY21kLFxuICAgICAgcmVjZWl2ZUFyZ3M6IHRydWUsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9qZWN0LnByZUNvbXBpbGVUYXNrLnNwYXduKHRoaXMudGFzayk7XG4gIH1cbn1cbiJdfQ==
@@ -76,7 +76,7 @@ var CodeArtifactAuthProvider;
76
76
  * Represents the npm `package.json` file.
77
77
  */
78
78
  class NodePackage extends component_1.Component {
79
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.NodePackage", version: "0.100.6" };
79
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.NodePackage", version: "0.100.7" };
80
80
  /**
81
81
  * Returns the `NodePackage` instance associated with a project or `undefined` if
82
82
  * there is no NodePackage.
@@ -81,7 +81,7 @@ var AutoRelease;
81
81
  * @pjid node
82
82
  */
83
83
  class NodeProject extends github_1.GitHubProject {
84
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.NodeProject", version: "0.100.6" };
84
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.NodeProject", version: "0.100.7" };
85
85
  /**
86
86
  * API for managing the node package.
87
87
  */
@@ -410,11 +410,20 @@ class NodeProject extends github_1.GitHubProject {
410
410
  this.logger.warn("When `release` is enabled, `package` must also be enabled as it is required by release. Force enabling `package`.");
411
411
  }
412
412
  if (release || shouldPackage) {
413
- this.packageTask.exec(`mkdir -p ${this.artifactsJavascriptDirectory}`);
413
+ this.packageTask.execArgs([
414
+ "mkdir",
415
+ "-p",
416
+ this.artifactsJavascriptDirectory,
417
+ ]);
414
418
  const pkgMgr = this.package.packageManager === node_package_1.NodePackageManager.PNPM
415
419
  ? "pnpm"
416
420
  : "npm";
417
- this.packageTask.exec(`${pkgMgr} pack --pack-destination ${this.artifactsJavascriptDirectory}`);
421
+ this.packageTask.execArgs([
422
+ pkgMgr,
423
+ "pack",
424
+ "--pack-destination",
425
+ this.artifactsJavascriptDirectory,
426
+ ]);
418
427
  }
419
428
  if ((0, util_3.multipleSelected)([options.biome, options.prettier])) {
420
429
  throw new Error("Only one of biome and prettier can be enabled.");
@@ -855,4 +864,4 @@ class NodeProject extends github_1.GitHubProject {
855
864
  }
856
865
  }
857
866
  exports.NodeProject = NodeProject;
858
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1wcm9qZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2phdmFzY3JpcHQvbm9kZS1wcm9qZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQkFBdUM7QUFDdkMsK0NBQWlDO0FBRWpDLHVDQUFvQztBQUVwQyxpQ0FBOEI7QUFFOUIsdURBQW1EO0FBRW5ELGlEQUl3QjtBQUV4Qix5Q0FBc0M7QUFFdEMsb0NBQXlDO0FBQ3pDLG9EQUFzRTtBQUN0RSxzQ0FBdUM7QUFDdkMsa0RBQWlEO0FBTWpELHNDQUE2RDtBQUU3RCx5Q0FBc0M7QUFDdEMsaUNBS2dCO0FBQ2hCLG1EQUFrRTtBQUNsRSxpREFBNkU7QUFNN0UsK0RBQTBEO0FBRTFELGdEQUE0QztBQUs1Qyw4Q0FBeUU7QUFDekUsd0NBQXFDO0FBQ3JDLG9EQUFnRDtBQUVoRCx3Q0FLb0I7QUFFcEIsc0RBQTBEO0FBRTFELGtDQUE4RTtBQUM5RSx1Q0FBK0Q7QUFFL0QsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDO0FBZ1cvQjs7R0FFRztBQUNILElBQVksV0FVWDtBQVZELFdBQVksV0FBVztJQUNyQjs7T0FFRztJQUNILDZEQUFZLENBQUE7SUFFWjs7T0FFRztJQUNILCtDQUFLLENBQUE7QUFDUCxDQUFDLEVBVlcsV0FBVywyQkFBWCxXQUFXLFFBVXRCO0FBRUQ7Ozs7R0FJRztBQUNILE1BQWEsV0FBWSxTQUFRLHNCQUFhOztJQUM1Qzs7T0FFRztJQUNhLE9BQU8sQ0FBYztJQUVyQzs7T0FFRztJQUNhLFNBQVMsQ0FBYztJQUV2Qzs7T0FFRztJQUNILElBQVcsS0FBSztRQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLHNCQUFTLENBQUMsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENB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QkFDekIsT0FBTyxrQkFBa0IsS0FBSyxFQUFFLENBQUM7WUFDbkM7Z0JBQ0UsT0FBTyxFQUFFLENBQUM7UUFDZCxDQUFDO0lBQ0gsQ0FBQztJQUVEOztPQUVHO0lBQ0ssZ0JBQWdCO1FBQ3RCLFFBQVEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQyxLQUFLLGlDQUFrQixDQUFDLEdBQUc7Z0JBQ3pCLE9BQU8sYUFBYSxDQUFDO1lBQ3ZCLEtBQUssaUNBQWtCLENBQUMsSUFBSSxDQUFDO1lBQzdCLEtBQUssaUNBQWtCLENBQUMsWUFBWTtnQkFDbEMsT0FBTyx3QkFBd0IsQ0FBQztZQUNsQyxLQUFLLGlDQUFrQixDQUFDLEtBQUssQ0FBQztZQUM5QixLQUFLLGlDQUFrQixDQUFDLFVBQVU7Z0JBQ2hDLE9BQU8sMkJBQTJCLENBQUM7WUFDckMsS0FBSyxpQ0FBa0IsQ0FBQyxJQUFJO2dCQUMxQixPQUFPLFNBQVMsQ0FBQztZQUNuQixLQUFLLGlDQUFrQixDQUFDLEdBQUc7Z0JBQ3pCLE9BQU8sZUFBZSxDQUFDO1lBQ3pCO2dCQUNFLE9BQU8sRUFBRSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7O0FBMStCSCxrQ0EyK0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVsYXRpdmUsIHBvc2l4IH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCAqIGFzIHNlbXZlciBmcm9tIFwic2VtdmVyXCI7XG5pbXBvcnQgdHlwZSB7IEJ1bmRsZXJPcHRpb25zIH0gZnJvbSBcIi4vYnVuZGxlclwiO1xuaW1wb3J0IHsgQnVuZGxlciB9IGZyb20gXCIuL2J1bmRsZXJcIjtcbmltcG9ydCB0eXBlIHsgSmVzdE9wdGlvbnMgfSBmcm9tIFwiLi9qZXN0XCI7XG5pbXBvcnQgeyBKZXN0IH0gZnJvbSBcIi4vamVzdFwiO1xuaW1wb3J0IHR5cGUgeyBMaWNlbnNlQ2hlY2tlck9wdGlvbnMgfSBmcm9tIFwiLi9saWNlbnNlLWNoZWNrZXJcIjtcbmltcG9ydCB7IExpY2Vuc2VDaGVja2VyIH0gZnJvbSBcIi4vbGljZW5zZS1jaGVja2VyXCI7XG5pbXBvcnQgdHlwZSB7IENvZGVBcnRpZmFjdE9wdGlvbnMsIE5vZGVQYWNrYWdlT3B0aW9ucyB9IGZyb20gXCIuL25vZGUtcGFja2FnZVwiO1xuaW1wb3J0IHtcbiAgQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyIGFzIE5vZGVQYWNrYWdlQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyLFxuICBOb2RlUGFja2FnZSxcbiAgTm9kZVBhY2thZ2VNYW5hZ2VyLFxufSBmcm9tIFwiLi9ub2RlLXBhY2thZ2VcIjtcbmltcG9ydCB0eXBlIHsgUHJvamVucmNPcHRpb25zIH0gZnJvbSBcIi4vcHJvamVucmNcIjtcbmltcG9ydCB7IFByb2plbnJjIH0gZnJvbSBcIi4vcHJvamVucmNcIjtcbmltcG9ydCB0eXBlIHsgQnVpbGRXb3JrZmxvd0NvbW1vbk9wdGlvbnMgfSBmcm9tIFwiLi4vYnVpbGRcIjtcbmltcG9ydCB7IEJ1aWxkV29ya2Zsb3cgfSBmcm9tIFwiLi4vYnVpbGRcIjtcbmltcG9ydCB7IERFRkFVTFRfQVJUSUZBQ1RTX0RJUkVDVE9SWSB9IGZyb20gXCIuLi9idWlsZC9wcml2YXRlL2NvbnN0c1wiO1xuaW1wb3J0IHsgUFJPSkVOX0RJUiB9IGZyb20gXCIuLi9jb21tb25cIjtcbmltcG9ydCB7IERlcGVuZGVuY3lUeXBlIH0gZnJvbSBcIi4uL2RlcGVuZGVuY2llc1wiO1xuaW1wb3J0IHR5cGUge1xuICBEZXBlbmRhYm90T3B0aW9ucyxcbiAgR2l0SHViUHJvamVjdE9wdGlvbnMsXG4gIEdpdElkZW50aXR5LFxufSBmcm9tIFwiLi4vZ2l0aHViXCI7XG5pbXBvcnQgeyBBdXRvTWVyZ2UsIEdpdEh1YiwgR2l0SHViUHJvamVjdCB9IGZyb20gXCIuLi9naXRodWJcIjtcbmltcG9ydCB0eXBlIHsgQmlvbWVPcHRpb25zIH0gZnJvbSBcIi4vYmlvbWUvYmlvbWVcIjtcbmltcG9ydCB7IEJpb21lIH0gZnJvbSBcIi4vYmlvbWUvYmlvbWVcIjtcbmltcG9ydCB7XG4gIGV4ZWNDb21tYW5kLFxuICBleGVjdXRlQ29tbWFuZFByaW9ySW5zdGFsbGF0aW9uLFxuICBpc1lhcm5CZXJyeSxcbiAgaXNZYXJuQ2xhc3NpYyxcbn0gZnJvbSBcIi4vdXRpbFwiO1xuaW1wb3J0IHsgREVGQVVMVF9HSVRIVUJfQUNUSU9OU19VU0VSIH0gZnJvbSBcIi4uL2dpdGh1Yi9jb25zdGFudHNcIjtcbmltcG9ydCB7IGVuc3VyZU5vdEhpZGRlblBhdGgsIHNlY3JldFRvU3RyaW5nIH0gZnJvbSBcIi4uL2dpdGh1Yi9wcml2YXRlL3V0aWxcIjtcbmltcG9ydCB0eXBlIHtcbiAgSm9iUGVybWlzc2lvbnMsXG4gIEpvYlN0ZXAsXG4gIEpvYlN0ZXBDb25maWd1cmF0aW9uLFxufSBmcm9tIFwiLi4vZ2l0aHViL3dvcmtmbG93cy1tb2RlbFwiO1xuaW1wb3J0IHsgSm9iUGVybWlzc2lvbiB9IGZyb20gXCIuLi9naXRodWIvd29ya2Zsb3dzLW1vZGVsXCI7XG5pbXBvcnQgdHlwZSB7IElnbm9yZUZpbGVPcHRpb25zIH0gZnJvbSBcIi4uL2lnbm9yZS1maWxlXCI7XG5pbXBvcnQgeyBJZ25vcmVGaWxlIH0gZnJvbSBcIi4uL2lnbm9yZS1maWxlXCI7XG5pbXBvcnQgdHlwZSB7XG4gIFByZXR0aWVyT3B0aW9ucyxcbiAgVXBncmFkZURlcGVuZGVuY2llc09wdGlvbnMsXG59IGZyb20gXCIuLi9qYXZhc2NyaXB0XCI7XG5pbXBvcnQgeyBOcG1Db25maWcsIFByZXR0aWVyLCBVcGdyYWRlRGVwZW5kZW5jaWVzIH0gZnJvbSBcIi4uL2phdmFzY3JpcHRcIjtcbmltcG9ydCB7IExpY2Vuc2UgfSBmcm9tIFwiLi4vbGljZW5zZVwiO1xuaW1wb3J0IHsgUHJvamVucmNKc29uIH0gZnJvbSBcIi4uL3Byb2plbnJjLWpzb25cIjtcbmltcG9ydCB0eXBlIHsgTnBtUHVibGlzaE9wdGlvbnMsIFJlbGVhc2VQcm9qZWN0T3B0aW9ucyB9IGZyb20gXCIuLi9yZWxlYXNlXCI7XG5pbXBvcnQge1xuICBDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXIgYXMgUmVsZWFzZUNvZGVBcnRpZmFjdEF1dGhQcm92aWRlcixcbiAgQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyLFxuICBpc0F3c0NvZGVBcnRpZmFjdFJlZ2lzdHJ5LFxuICBSZWxlYXNlLFxufSBmcm9tIFwiLi4vcmVsZWFzZVwiO1xuaW1wb3J0IHR5cGUgeyBHcm91cFJ1bm5lck9wdGlvbnMgfSBmcm9tIFwiLi4vcnVubmVyLW9wdGlvbnNcIjtcbmltcG9ydCB7IGZpbHRlcmVkUnVuc09uT3B0aW9ucyB9IGZyb20gXCIuLi9ydW5uZXItb3B0aW9uc1wiO1xuaW1wb3J0IHR5cGUgeyBUYXNrIH0gZnJvbSBcIi4uL3Rhc2tcIjtcbmltcG9ydCB7IGRlZXBNZXJnZSwgbXVsdGlwbGVTZWxlY3RlZCwgbm9ybWFsaXplUGVyc2lzdGVkUGF0aCB9IGZyb20gXCIuLi91dGlsXCI7XG5pbXBvcnQgeyBlbnN1cmVSZWxhdGl2ZVBhdGhTdGFydHNXaXRoRG90IH0gZnJvbSBcIi4uL3V0aWwvcGF0aFwiO1xuXG5jb25zdCBQUk9KRU5fU0NSSVBUID0gXCJwcm9qZW5cIjtcblxuLyoqXG4gKiBPcHRpb25zIGZvciBzZWN1cml0eSBhdWRpdCBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEF1ZGl0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBNaW5pbXVtIHZ1bG5lcmFiaWxpdHkgbGV2ZWwgdG8gY2hlY2sgZm9yIGR1cmluZyBhdWRpdC5cbiAgICogQGRlZmF1bHQgXCJoaWdoXCJcbiAgICovXG4gIHJlYWRvbmx5IGxldmVsPzogXCJsb3dcIiB8IFwibW9kZXJhdGVcIiB8IFwiaGlnaFwiIHwgXCJjcml0aWNhbFwiO1xuXG4gIC8qKlxuICAgKiBPbmx5IGF1ZGl0IHByb2R1Y3Rpb24gZGVwZW5kZW5jaWVzLlxuICAgKlxuICAgKiBXaGVuIGZhbHNlLCBib3RoIHByb2R1Y3Rpb24gYW5kIGRldmVsb3BtZW50IGRlcGVuZGVuY2llcyBhcmUgYXVkaXRlZC5cbiAgICogVGhpcyBpcyByZWNvbW1lbmRlZCBhcyBidWlsZCBkZXBlbmRlbmNpZXMgY2FuIGFsc28gY29udGFpbiBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBwcm9kT25seT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZW4gdG8gcnVuIHRoZSBhdWRpdCB0YXNrLlxuICAgKlxuICAgKiAtIFwiYnVpbGRcIjogUnVuIGR1cmluZyBldmVyeSBidWlsZCAoZGVmYXVsdClcbiAgICogLSBcInJlbGVhc2VcIjogT25seSBydW4gZHVyaW5nIHJlbGVhc2Ugd29ya2Zsb3dcbiAgICogLSBcIm1hbnVhbFwiOiBDcmVhdGUgdGhlIHRhc2sgYnV0IGRvbid0IHJ1biBpdCBhdXRvbWF0aWNhbGx5XG4gICAqXG4gICAqIEBkZWZhdWx0IFwiYnVpbGRcIlxuICAgKi9cbiAgcmVhZG9ubHkgcnVuT24/OiBcImJ1aWxkXCIgfCBcInJlbGVhc2VcIiB8IFwibWFudWFsXCI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTm9kZVByb2plY3RPcHRpb25zXG4gIGV4dGVuZHMgR2l0SHViUHJvamVjdE9wdGlvbnMsIE5vZGVQYWNrYWdlT3B0aW9ucywgUmVsZWFzZVByb2plY3RPcHRpb25zIHtcbiAgLyoqXG4gICAqIExpY2Vuc2UgY29weXJpZ2h0IG93bmVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZiBhdXRob3JOYW1lIG9yIFwiXCIgaWYgYGF1dGhvck5hbWVgIGlzIHVuZGVmaW5lZC5cbiAgICovXG4gIHJlYWRvbmx5IGNvcHlyaWdodE93bmVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgY29weXJpZ2h0IHllYXJzIHRvIHB1dCBpbiB0aGUgTElDRU5TRSBmaWxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGN1cnJlbnQgeWVhclxuICAgKi9cbiAgcmVhZG9ubHkgY29weXJpZ2h0UGVyaW9kPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBWZXJzaW9uIG9mIHByb2plbiB0byBpbnN0YWxsLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIERlZmF1bHRzIHRvIHRoZSBsYXRlc3QgdmVyc2lvbi5cbiAgICovXG4gIHJlYWRvbmx5IHByb2plblZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBvZiBcInByb2plblwiIHNob3VsZCBiZSBpbnN0YWxsZWQgYXMgYSBkZXZEZXBlbmRlbmN5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRydWUgaWYgbm90IGEgc3VicHJvamVjdFxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVuRGV2RGVwZW5kZW5jeT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERlZmluZSBhIEdpdEh1YiB3b3JrZmxvdyBmb3IgYnVpbGRpbmcgUFJzLlxuICAgKiBAZGVmYXVsdCAtIHRydWUgaWYgbm90IGEgc3VicHJvamVjdFxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRXb3JrZmxvdz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciBQUiBidWlsZCB3b3JrZmxvdy5cbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkV29ya2Zsb3dPcHRpb25zPzogQnVpbGRXb3JrZmxvd09wdGlvbnM7XG5cbiAgLyoqXG4gICAqIERlZmluZSBhIEdpdEh1YiB3b3JrZmxvdyBzdGVwIGZvciBzZW5kaW5nIGNvZGUgY292ZXJhZ2UgbWV0cmljcyB0byBodHRwczovL2NvZGVjb3YuaW8vXG4gICAqIFVzZXMgY29kZWNvdi9jb2RlY292LWFjdGlvbkB2NVxuICAgKiBCeSBkZWZhdWx0LCBPSURDIGF1dGggaXMgdXNlZC4gQWx0ZXJuYXRpdmVseSBhIHRva2VuIGNhbiBiZSBwcm92aWRlZCB2aWEgYGNvZGVDb3ZUb2tlblNlY3JldGAuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBjb2RlQ292PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGVmaW5lIHRoZSBzZWNyZXQgbmFtZSBmb3IgYSBzcGVjaWZpZWQgaHR0cHM6Ly9jb2RlY292LmlvLyB0b2tlblxuXG4gICAqIEBkZWZhdWx0IC0gT0lEQyBhdXRoIGlzIHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IGNvZGVDb3ZUb2tlblNlY3JldD86IHN0cmluZztcblxuICAvKipcbiAgICogQWRkIHJlbGVhc2UgbWFuYWdlbWVudCB0byB0aGlzIHByb2plY3QuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZSAoZmFsc2UgZm9yIHN1YnByb2plY3RzKVxuICAgKi9cbiAgcmVhZG9ubHkgcmVsZWFzZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBtYWluIHJlbGVhc2UgYnJhbmNoLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIm1haW5cIlxuICAgKiBAZmVhdHVyZWRcbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRSZWxlYXNlQnJhbmNoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXb3JrZmxvdyBzdGVwcyB0byB1c2UgaW4gb3JkZXIgdG8gYm9vdHN0cmFwIHRoaXMgcmVwby5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJ5YXJuIGluc3RhbGwgLS1mcm96ZW4tbG9ja2ZpbGUgJiYgeWFybiBwcm9qZW5cIlxuICAgKi9cbiAgcmVhZG9ubHkgd29ya2Zsb3dCb290c3RyYXBTdGVwcz86IEpvYlN0ZXBbXTtcblxuICAvKipcbiAgICogVGhlIGdpdCBpZGVudGl0eSB0byB1c2UgaW4gd29ya2Zsb3dzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRlZmF1bHQgR2l0SHViIEFjdGlvbnMgdXNlclxuICAgKi9cbiAgcmVhZG9ubHkgd29ya2Zsb3dHaXRJZGVudGl0eT86IEdpdElkZW50aXR5O1xuXG4gIC8qKlxuICAgKiBBdXRvbWF0aWNhbGx5IHJlbGVhc2UgdG8gbnBtIHdoZW4gbmV3IHZlcnNpb25zIGFyZSBpbnRyb2R1Y2VkLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVsZWFzZVRvTnBtPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG5vZGUgdmVyc2lvbiB1c2VkIGluIEdpdEh1YiBBY3Rpb25zIHdvcmtmbG93cy5cbiAgICpcbiAgICogQWx3YXlzIHVzZSB0aGlzIG9wdGlvbiBpZiB5b3VyIEdpdEh1YiBBY3Rpb25zIHdvcmtmbG93cyByZXF1aXJlIGEgc3BlY2lmaWMgdG8gcnVuLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGBtaW5Ob2RlVmVyc2lvbmAgaWYgc2V0LCBvdGhlcndpc2UgYGx0cy8qYC5cbiAgICovXG4gIHJlYWRvbmx5IHdvcmtmbG93Tm9kZVZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEVuYWJsZSBOb2RlLmpzIHBhY2thZ2UgY2FjaGUgaW4gR2l0SHViIHdvcmtmbG93cy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHdvcmtmbG93UGFja2FnZUNhY2hlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVXNlIGRlcGVuZGFib3QgdG8gaGFuZGxlIGRlcGVuZGVuY3kgdXBncmFkZXMuXG4gICAqIENhbm5vdCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYGRlcHNVcGdyYWRlYC5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGRlcGVuZGFib3Q/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciBkZXBlbmRhYm90LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRlZmF1bHQgb3B0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgZGVwZW5kYWJvdE9wdGlvbnM/OiBEZXBlbmRhYm90T3B0aW9ucztcblxuICAvKipcbiAgICogVXNlIHRhc2tzIGFuZCBnaXRodWIgd29ya2Zsb3dzIHRvIGhhbmRsZSBkZXBlbmRlbmN5IHVwZ3JhZGVzLlxuICAgKiBDYW5ub3QgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBkZXBlbmRhYm90YC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBgdHJ1ZWAgZm9yIHJvb3QgcHJvamVjdHMsIGBmYWxzZWAgZm9yIHN1YnByb2plY3RzXG4gICAqL1xuICByZWFkb25seSBkZXBzVXBncmFkZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIGBVcGdyYWRlRGVwZW5kZW5jaWVzYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IG9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGRlcHNVcGdyYWRlT3B0aW9ucz86IFVwZ3JhZGVEZXBlbmRlbmNpZXNPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBBdXRvbWF0aWNhbGx5IGFwcHJvdmUgZGVwcyB1cGdyYWRlIFBScywgYWxsb3dpbmcgdGhlbSB0byBiZVxuICAgKiBtZXJnZWQgYnkgbWVyZ2lmeSAoaWYgY29uZmlndXJlZCkuXG4gICAqXG4gICAqIFRocm93IGlmIHNldCB0byB0cnVlIGJ1dCBgYXV0b0FwcHJvdmVPcHRpb25zYCBhcmUgbm90IGRlZmluZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgYXV0b0FwcHJvdmVVcGdyYWRlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYW4gLm5wbWlnbm9yZSBmaWxlLiBOb3JtYWxseSB0aGlzIGlzIG9ubHkgbmVlZGVkIGZvciBsaWJyYXJpZXMgdGhhdFxuICAgKiBhcmUgcGFja2FnZWQgYXMgdGFyYmFsbHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IG5wbWlnbm9yZUVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIC5ucG1pZ25vcmUgZmlsZVxuICAgKi9cbiAgcmVhZG9ubHkgbnBtSWdub3JlT3B0aW9ucz86IElnbm9yZUZpbGVPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBJbmNsdWRlIGEgR2l0SHViIHB1bGwgcmVxdWVzdCB0ZW1wbGF0ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcHVsbFJlcXVlc3RUZW1wbGF0ZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50cyBvZiB0aGUgcHVsbCByZXF1ZXN0IHRlbXBsYXRlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRlZmF1bHQgY29udGVudFxuICAgKi9cbiAgcmVhZG9ubHkgcHVsbFJlcXVlc3RUZW1wbGF0ZUNvbnRlbnRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFNldHVwIHByZXR0aWVyLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJldHRpZXI/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBQcmV0dGllciBvcHRpb25zXG4gICAqIEBkZWZhdWx0IC0gZGVmYXVsdCBvcHRpb25zXG4gICAqL1xuICByZWFkb25seSBwcmV0dGllck9wdGlvbnM/OiBQcmV0dGllck9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgZW50cmllcyB0byAuZ2l0aWdub3JlXG4gICAqL1xuICByZWFkb25seSBnaXRpZ25vcmU/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogU2V0dXAgamVzdCB1bml0IHRlc3RzXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGplc3Q/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBKZXN0IG9wdGlvbnNcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IG9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGplc3RPcHRpb25zPzogSmVzdE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIChvbmNlKSAucHJvamVucmMuanMgKGluIEphdmFTY3JpcHQpLiBTZXQgdG8gYGZhbHNlYCBpbiBvcmRlciB0byBkaXNhYmxlXG4gICAqIC5wcm9qZW5yYy5qcyBnZW5lcmF0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRydWUgaWYgcHJvamVucmNKc29uIGlzIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBwcm9qZW5yY0pzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgLnByb2plbnJjLmpzXG4gICAqIEBkZWZhdWx0IC0gZGVmYXVsdCBvcHRpb25zXG4gICAqL1xuICByZWFkb25seSBwcm9qZW5yY0pzT3B0aW9ucz86IFByb2plbnJjT3B0aW9ucztcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgYEJ1bmRsZXJgLlxuICAgKi9cbiAgcmVhZG9ubHkgYnVuZGxlck9wdGlvbnM/OiBCdW5kbGVyT3B0aW9ucztcblxuICAvKipcbiAgICogQSBkaXJlY3Rvcnkgd2hpY2ggd2lsbCBjb250YWluIGJ1aWxkIGFydGlmYWN0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJkaXN0XCJcbiAgICovXG4gIHJlYWRvbmx5IGFydGlmYWN0c0RpcmVjdG9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogRGVmaW5lcyBhIGBwYWNrYWdlYCB0YXNrIHRoYXQgd2lsbCBwcm9kdWNlIGFuIG5wbSB0YXJiYWxsIHVuZGVyIHRoZVxuICAgKiBhcnRpZmFjdHMgZGlyZWN0b3J5IChlLmcuIGBkaXN0YCkuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHBhY2thZ2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmUgd2hpY2ggbGljZW5zZXMgc2hvdWxkIGJlIGRlZW1lZCBhY2NlcHRhYmxlIGZvciB1c2UgYnkgZGVwZW5kZW5jaWVzXG4gICAqXG4gICAqIFRoaXMgc2V0dGluZyB3aWxsIGNhdXNlIHRoZSBidWlsZCB0byBmYWlsLCBpZiBhbnkgcHJvaGliaXRlZCBvciBub3QgYWxsb3dlZCBsaWNlbnNlcyBhcmVzIGVuY291bnRlcmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGxpY2Vuc2UgY2hlY2tzIGFyZSBydW4gZHVyaW5nIHRoZSBidWlsZCBhbmQgYWxsIGxpY2Vuc2VzIHdpbGwgYmUgYWNjZXB0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGNoZWNrTGljZW5zZXM/OiBMaWNlbnNlQ2hlY2tlck9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFNldHVwIEJpb21lLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgYmlvbWU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBCaW9tZSBvcHRpb25zXG4gICAqIEBkZWZhdWx0IC0gZGVmYXVsdCBvcHRpb25zXG4gICAqL1xuICByZWFkb25seSBiaW9tZU9wdGlvbnM/OiBCaW9tZU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFJ1biBzZWN1cml0eSBhdWRpdCBvbiBkZXBlbmRlbmNpZXMuXG4gICAqXG4gICAqIFdoZW4gZW5hYmxlZCwgY3JlYXRlcyBhbiBcImF1ZGl0XCIgdGFzayB0aGF0IGNoZWNrcyBmb3Iga25vd24gc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzXG4gICAqIGluIGRlcGVuZGVuY2llcy4gQnkgZGVmYXVsdCwgcnVucyBkdXJpbmcgZXZlcnkgYnVpbGQgYW5kIGNoZWNrcyBmb3IgXCJoaWdoXCIgc2V2ZXJpdHlcbiAgICogdnVsbmVyYWJpbGl0aWVzIG9yIGFib3ZlIGluIGFsbCBkZXBlbmRlbmNpZXMgKGluY2x1ZGluZyBkZXYgZGVwZW5kZW5jaWVzKS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGF1ZGl0RGVwcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNlY3VyaXR5IGF1ZGl0IG9wdGlvbnMuXG4gICAqIEBkZWZhdWx0IC0gZGVmYXVsdCBvcHRpb25zXG4gICAqL1xuICByZWFkb25seSBhdWRpdERlcHNPcHRpb25zPzogQXVkaXRPcHRpb25zO1xufVxuXG4vKipcbiAqIEJ1aWxkIHdvcmtmbG93IG9wdGlvbnMgZm9yIE5vZGVQcm9qZWN0XG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQnVpbGRXb3JrZmxvd09wdGlvbnMgZXh0ZW5kcyBCdWlsZFdvcmtmbG93Q29tbW9uT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBdXRvbWF0aWNhbGx5IHVwZGF0ZSBmaWxlcyBtb2RpZmllZCBkdXJpbmcgYnVpbGRzIHRvIHB1bGwtcmVxdWVzdCBicmFuY2hlcy5cbiAgICogVGhpcyBtZWFucyB0aGF0IGFueSBmaWxlcyBzeW50aGVzaXplZCBieSBwcm9qZW4gb3IgZS5nLiB0ZXN0IHNuYXBzaG90cyB3aWxsXG4gICAqIGFsd2F5cyBiZSB1cC10by1kYXRlIGJlZm9yZSBhIFBSIGlzIG1lcmdlZC5cbiAgICpcbiAgICogSW1wbGllcyB0aGF0IFBSIGJ1aWxkcyBkbyBub3QgaGF2ZSBhbnRpLXRhbXBlciBjaGVja3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IG11dGFibGVCdWlsZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFBlcmZvcm0gYSBtdXRhYmxlIChub24tZnJvemVuKSBpbnN0YWxsIGR1cmluZyBidWlsZHMuIFRoaXMgd2lsbCB1cGRhdGUgdGhlXG4gICAqIHBhY2thZ2UgbG9ja2ZpbGUgZHVyaW5nIGluc3RhbGxzLCB3aGljaCBpcyB1c2VmdWwgd2hlbiBidWlsZCBzdGVwcyBtb2RpZnlcbiAgICogZGVwZW5kZW5jaWVzLiBTZXQgdG8gYGZhbHNlYCB0byB1c2UgZnJvemVuIGxvY2tmaWxlIGluc3RhbGxzIGV2ZW4gd2hlblxuICAgKiBgbXV0YWJsZUJ1aWxkYCBpcyBlbmFibGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHZhbHVlIG9mIGBtdXRhYmxlQnVpbGRgXG4gICAqL1xuICByZWFkb25seSBtdXRhYmxlSW5zdGFsbD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEdpdGh1YiBSdW5uZXIgc2VsZWN0aW9uIGxhYmVsc1xuICAgKiBAZGVmYXVsdCBbXCJ1YnVudHUtbGF0ZXN0XCJdXG4gICAqIEBkZXNjcmlwdGlvbiBEZWZpbmVzIGEgdGFyZ2V0IFJ1bm5lciBieSBsYWJlbHNcbiAgICogQHRocm93cyB7RXJyb3J9IGlmIGJvdGggYHJ1bnNPbmAgYW5kIGBydW5zT25Hcm91cGAgYXJlIHNwZWNpZmllZFxuICAgKi9cbiAgcmVhZG9ubHkgcnVuc09uPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEdpdGh1YiBSdW5uZXIgR3JvdXAgc2VsZWN0aW9uIG9wdGlvbnNcbiAgICogQGRlc2NyaXB0aW9uIERlZmluZXMgYSB0YXJnZXQgUnVubmVyIEdyb3VwIGJ5IG5hbWUgYW5kL29yIGxhYmVsc1xuICAgKiBAdGhyb3dzIHtFcnJvcn0gaWYgYm90aCBgcnVuc09uYCBhbmQgYHJ1bnNPbkdyb3VwYCBhcmUgc3BlY2lmaWVkXG4gICAqL1xuICByZWFkb25seSBydW5zT25Hcm91cD86IEdyb3VwUnVubmVyT3B0aW9ucztcbn1cblxuLyoqXG4gKiBBdXRvbWF0aWMgYnVtcCBtb2Rlc1xuICovXG5leHBvcnQgZW51bSBBdXRvUmVsZWFzZSB7XG4gIC8qKlxuICAgKiBBdXRvbWF0aWNhbGx5IGJ1bXAgJiByZWxlYXNlIGEgbmV3IHZlcnNpb24gZm9yIGV2ZXJ5IGNvbW1pdCB0byBcIm1haW5cIlxuICAgKi9cbiAgRVZFUllfQ09NTUlULFxuXG4gIC8qKlxuICAgKiBBdXRvbWF0aWNhbGx5IGJ1bXAgJiByZWxlYXNlIGEgbmV3IHZlcnNpb24gb24gYSBkYWlseSBiYXNpcy5cbiAgICovXG4gIERBSUxZLFxufVxuXG4vKipcbiAqIE5vZGUuanMgcHJvamVjdC5cbiAqXG4gKiBAcGppZCBub2RlXG4gKi9cbmV4cG9ydCBjbGFzcyBOb2RlUHJvamVjdCBleHRlbmRzIEdpdEh1YlByb2plY3Qge1xuICAvKipcbiAgICogQVBJIGZvciBtYW5hZ2luZyB0aGUgbm9kZSBwYWNrYWdlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBhY2thZ2U6IE5vZGVQYWNrYWdlO1xuXG4gIC8qKlxuICAgKiBUaGUgLm5wbWlnbm9yZSBmaWxlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5wbWlnbm9yZT86IElnbm9yZUZpbGU7XG5cbiAgLyoqXG4gICAqIFRoZSAubnBtcmMgZmlsZVxuICAgKi9cbiAgcHVibGljIGdldCBucG1yYygpOiBOcG1Db25maWcge1xuICAgIGlmICghdGhpcy5fbnBtcmMpIHtcbiAgICAgIHRoaXMuX25wbXJjID0gbmV3IE5wbUNvbmZpZyh0aGlzLCB7IG9taXRFbXB0eTogdHJ1ZSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX25wbXJjO1xuICB9XG4gIHByaXZhdGUgX25wbXJjPzogTnBtQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBDb21wb25lbnQgdGhhdCBzZXRzIHVwIG1lcmdpZnkgZm9yIG1lcmdpbmcgYXBwcm92ZWQgcHVsbCByZXF1ZXN0cy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhdXRvTWVyZ2U/OiBBdXRvTWVyZ2U7XG5cbiAgLyoqXG4gICAqIFRoZSBQUiBidWlsZCBHaXRIdWIgd29ya2Zsb3cuIGB1bmRlZmluZWRgIGlmIGBidWlsZFdvcmtmbG93YCBpcyBkaXNhYmxlZC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBidWlsZFdvcmtmbG93PzogQnVpbGRXb3JrZmxvdztcblxuICAvKipcbiAgICogUmVsZWFzZSBtYW5hZ2VtZW50LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlbGVhc2U/OiBSZWxlYXNlO1xuXG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSBub2RlIHZlcnNpb24gcmVxdWlyZWQgYnkgdGhpcyBwYWNrYWdlIHRvIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBUaGlzIHZhbHVlIGluZGljYXRlcyB0aGUgcGFja2FnZSBpcyBpbmNvbXBhdGlibGUgd2l0aCBvbGRlciB2ZXJzaW9ucy5cbiAgICovXG4gIHB1YmxpYyBnZXQgbWluTm9kZVZlcnNpb24oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5wYWNrYWdlLm1pbk5vZGVWZXJzaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIE1heGltdW0gbm9kZSB2ZXJzaW9uIHN1cHBvcnRlZCBieSB0aGlzIHBhY2thZ2UuXG4gICAqXG4gICAqIFRoZSB2YWx1ZSBpbmRpY2F0ZXMgdGhlIHBhY2thZ2UgaXMgaW5jb21wYXRpYmxlIHdpdGggbmV3ZXIgdmVyc2lvbnMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1heE5vZGVWZXJzaW9uKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucGFja2FnZS5tYXhOb2RlVmVyc2lvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWFkb25seSBub2RlVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNvbW1hbmQgdG8gdXNlIHRvIHJ1biBzY3JpcHRzIChlLmcuIGB5YXJuIHJ1bmAgb3IgYG5wbSBydW5gIGRlcGVuZHMgb24gdGhlIHBhY2thZ2UgbWFuYWdlcikuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcnVuU2NyaXB0Q29tbWFuZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgSmVzdCBjb25maWd1cmF0aW9uIChpZiBlbmFibGVkKVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGplc3Q/OiBKZXN0O1xuXG4gIHB1YmxpYyByZWFkb25seSBidW5kbGVyOiBCdW5kbGVyO1xuXG4gIC8qKlxuICAgKiBUaGUgYnVpbGQgb3V0cHV0IGRpcmVjdG9yeS4gQW4gbnBtIHRhcmJhbGwgd2lsbCBiZSBjcmVhdGVkIHVuZGVyIHRoZSBganNgXG4gICAqIHN1YmRpcmVjdG9yeS4gRm9yIGV4YW1wbGUsIGlmIHRoaXMgaXMgc2V0IHRvIGBkaXN0YCAodGhlIGRlZmF1bHQpLCB0aGUgbnBtXG4gICAqIHRhcmJhbGwgd2lsbCBiZSBwbGFjZWQgdW5kZXIgYGRpc3QvanMvYm9vbS1ib29tLTEuMi4zLnRnYC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhcnRpZmFjdHNEaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGxvY2F0aW9uIG9mIHRoZSBucG0gdGFyYmFsbCBhZnRlciBidWlsZCAoYCR7YXJ0aWZhY3RzRGlyZWN0b3J5fS9qc2ApLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFydGlmYWN0c0phdmFzY3JpcHREaXJlY3Rvcnk6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHVwZ3JhZGUgd29ya2Zsb3cuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdXBncmFkZVdvcmtmbG93PzogVXBncmFkZURlcGVuZGVuY2llcztcblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgd29ya2Zsb3dCb290c3RyYXBTdGVwczogSm9iU3RlcFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IHdvcmtmbG93R2l0SWRlbnRpdHk6IEdpdElkZW50aXR5O1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgd29ya2Zsb3dQYWNrYWdlQ2FjaGU6IGJvb2xlYW47XG4gIHB1YmxpYyByZWFkb25seSBwcmV0dGllcj86IFByZXR0aWVyO1xuICBwdWJsaWMgcmVhZG9ubHkgYmlvbWU/OiBCaW9tZTtcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBOb2RlUGFja2FnZU9wdGlvbnM7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogTm9kZVByb2plY3RPcHRpb25zKSB7XG4gICAgc3VwZXIoe1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGdpdGh1Yk9wdGlvbnM6IHtcbiAgICAgICAgLi4ub3B0aW9ucy5naXRodWJPcHRpb25zLFxuICAgICAgICAuLi4ob3B0aW9ucy5naXRodWJPcHRpb25zPy5kZXBlbmRlbmN5UmV2aWV3XG4gICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIGRlcGVuZGVuY3lSZXZpZXdPcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgZmFpbE9uU2V2ZXJpdHk6IG9wdGlvbnMuYXVkaXREZXBzT3B0aW9ucz8ubGV2ZWwsXG4gICAgICAgICAgICAgICAgYWxsb3dMaWNlbnNlczogb3B0aW9ucy5jaGVja0xpY2Vuc2VzPy5hbGxvdyxcbiAgICAgICAgICAgICAgICAuLi5vcHRpb25zLmdpdGh1Yk9wdGlvbnM/LmRlcGVuZGVuY3lSZXZpZXdPcHRpb25zLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgIDoge30pLFxuICAgICAgfSxcbiAgICAgIHByb2plbkNvbW1hbmQ6XG4gICAgICAgIG9wdGlvbnMucHJvamVuQ29tbWFuZCA/PyBleGVjQ29tbWFuZChvcHRpb25zLnBhY2thZ2VNYW5hZ2VyLCBcInByb2plblwiKSxcbiAgICB9KTtcblxuICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7XG4gICAgdGhpcy5wYWNrYWdlID0gbmV3IE5vZGVQYWNrYWdlKHRoaXMsIHRoaXMub3B0aW9ucyk7XG4gICAgdGhpcy53b3JrZmxvd0Jvb3RzdHJhcFN0ZXBzID0gb3B0aW9ucy53b3JrZmxvd0Jvb3RzdHJhcFN0ZXBzID8/IFtdO1xuICAgIHRoaXMud29ya2Zsb3dHaXRJZGVudGl0eSA9XG4gICAgICBvcHRpb25zLndvcmtmbG93R2l0SWRlbnRpdHkgPz8gREVGQVVMVF9HSVRIVUJfQUNUSU9OU19VU0VSO1xuICAgIHRoaXMud29ya2Zsb3dQYWNrYWdlQ2FjaGUgPSBvcHRpb25zLndvcmtmbG93UGFja2FnZUNhY2hlID8/IGZhbHNlO1xuICAgIHRoaXMuYXJ0aWZhY3RzRGlyZWN0b3J5ID1cbiAgICAgIG9wdGlvbnMuYXJ0aWZhY3RzRGlyZWN0b3J5ID8/IERFRkFVTFRfQVJUSUZBQ1RTX0RJUkVDVE9SWTtcbiAgICBlbnN1cmVOb3RIaWRkZW5QYXRoKHRoaXMuYXJ0aWZhY3RzRGlyZWN0b3J5LCBcImFydGlmYWN0c0RpcmVjdG9yeVwiKTtcbiAgICBjb25zdCBub3JtYWxpemVkQXJ0aWZhY3RzRGlyZWN0b3J5ID0gbm9ybWFsaXplUGVyc2lzdGVkUGF0aChcbiAgICAgIHRoaXMuYXJ0aWZhY3RzRGlyZWN0b3J5LFxuICAgICk7XG4gICAgdGhpcy5hcnRpZmFjdHNKYXZhc2NyaXB0RGlyZWN0b3J5ID0gcG9zaXguam9pbihcbiAgICAgIG5vcm1hbGl6ZWRBcnRpZmFjdHNEaXJlY3RvcnksXG4gICAgICBcImpzXCIsXG4gICAgKTtcblxuICAgIHRoaXMucnVuU2NyaXB0Q29tbWFuZCA9ICgoKSA9PiB7XG4gICAgICBzd2l0Y2ggKHRoaXMucGFja2FnZS5wYWNrYWdlTWFuYWdlcikge1xuICAgICAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5OUE06XG4gICAgICAgICAgcmV0dXJuIFwibnBtIHJ1blwiO1xuICAgICAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5ZQVJOOlxuICAgICAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5ZQVJOMjpcbiAgICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuWUFSTl9DTEFTU0lDOlxuICAgICAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5ZQVJOX0JFUlJZOlxuICAgICAgICAgIHJldHVybiBcInlhcm4gcnVuXCI7XG4gICAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLlBOUE06XG4gICAgICAgICAgcmV0dXJuIFwicG5wbSBydW5cIjtcbiAgICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuQlVOOlxuICAgICAgICAgIHJldHVybiBcImJ1biBydW5cIjtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgdW5leHBlY3RlZCBwYWNrYWdlIG1hbmFnZXIgJHt0aGlzLnBhY2thZ2UucGFja2FnZU1hbmFnZXJ9YCxcbiAgICAgICAgICApO1xuICAgICAgfVxuICAgIH0pKCk7XG5cbiAgICBjb25zdCBlbnZDb21tYW5kID0gKCgpID0+IHtcbiAgICAgIHN3aXRjaCAodGhpcy5wYWNrYWdlLnBhY2thZ2VNYW5hZ2VyKSB7XG4gICAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLllBUk5fQkVSUlk6XG4gICAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLllBUk4yOlxuICAgICAgICAgIHJldHVybiBcIiQoeWFybiBleGVjIG5vZGUgLS1wcmludCBwcm9jZXNzLmVudi5QQVRIKVwiO1xuICAgICAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5QTlBNOlxuICAgICAgICAgIHJldHVybiAnJChwbnBtIC1jIGV4ZWMgXCJub2RlIC0tcHJpbnQgcHJvY2Vzcy5lbnYuUEFUSFwiKSc7XG4gICAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLkJVTjpcbiAgICAgICAgICByZXR1cm4gJyQoYnVuIC0tZXZhbCBcImNvbnNvbGUubG9nKHByb2Nlc3MuZW52LlBBVEgpXCIpJztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICByZXR1cm4gJyQobnB4IC1jIFwibm9kZSAtLXByaW50IHByb2Nlc3MuZW52LlBBVEhcIiknO1xuICAgICAgfVxuICAgIH0pKCk7XG5cbiAgICB0aGlzLm5vZGVWZXJzaW9uID1cbiAgICAgIG9wdGlvbnMud29ya2Zsb3dOb2RlVmVyc2lvbiA/PyB0aGlzLnBhY2thZ2UubWluTm9kZVZlcnNpb247XG5cbiAgICAvLyBhZGQgUEFUSCBmb3IgYWxsIHRhc2tzIHdoaWNoIGluY2x1ZGVzIHRoZSBwcm9qZWN0J3MgbnBtIC5iaW4gbGlzdFxuICAgIHRoaXMudGFza3MuYWRkRW52aXJvbm1lbnQoXCJQQVRIXCIsIGVudkNvbW1hbmQpO1xuXG4gICAgdGhpcy5hZGRMaWNlbnNlKG9wdGlvbnMpO1xuXG4gICAgaWYgKG9wdGlvbnMubnBtaWdub3JlRW5hYmxlZCA/PyB0cnVlKSB7XG4gICAgICB0aGlzLm5wbWlnbm9yZSA9IG5ldyBJZ25vcmVGaWxlKFxuICAgICAgICB0aGlzLFxuICAgICAgICBcIi5ucG1pZ25vcmVcIixcbiAgICAgICAgb3B0aW9ucy5ucG1JZ25vcmVPcHRpb25zLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZERlZmF1bHRHaXRJZ25vcmUoKTtcblxuICAgIGlmIChvcHRpb25zLmdpdGlnbm9yZT8ubGVuZ3RoKSB7XG4gICAgICBmb3IgKGNvbnN0IGkgb2Ygb3B0aW9ucy5naXRpZ25vcmUpIHtcbiAgICAgICAgdGhpcy5naXRpZ25vcmUuZXhjbHVkZShpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZWplY3RlZCkge1xuICAgICAgdGhpcy5zZXRTY3JpcHQoUFJPSkVOX1NDUklQVCwgb3B0aW9ucy5wcm9qZW5Db21tYW5kID8/IFwicHJvamVuXCIpO1xuICAgIH1cblxuICAgIHRoaXMubnBtaWdub3JlPy5leGNsdWRlKGAvJHtQUk9KRU5fRElSfS9gKTtcblxuICAgIGNvbnN0IHByb2plbiA9IG9wdGlvbnMucHJvamVuRGV2RGVwZW5kZW5jeSA/PyAodGhpcy5wYXJlbnQgPyBmYWxzZSA6IHRydWUpO1xuICAgIGlmIChwcm9qZW4gJiYgIXRoaXMuZWplY3RlZCkge1xuICAgICAgY29uc3QgcG9zdGZpeCA9IG9wdGlvbnMucHJvamVuVmVyc2lvbiA/IGBAJHtvcHRpb25zLnByb2plblZlcnNpb259YCA6IFwiXCI7XG4gICAgICB0aGlzLmFkZERldkRlcHMoYHByb2plbiR7cG9zdGZpeH1gKTtcblxuICAgICAgdGhpcy5kZXBzLnJlcXVlc3REZXBlbmRlbmN5KHtcbiAgICAgICAgbmFtZTogXCJjb25zdHJ1Y3RzXCIsXG4gICAgICAgIHZlcnNpb246IFwiXjEwLjAuMFwiLFxuICAgICAgICB0eXBlOiBEZXBlbmRlbmN5VHlwZS5CVUlMRCxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGJ1aWxkRW5hYmxlZCA9IG9wdGlvbnMuYnVpbGRXb3JrZmxvdyA/PyAodGhpcy5wYXJlbnQgPyBmYWxzZSA6IHRydWUpO1xuXG4gICAgLy8gY29uZmlndXJlIGplc3QgaWYgZW5hYmxlZFxuICAgIC8vIG11c3QgYmUgYmVmb3JlIHRoZSBidWlsZC9yZWxlYXNlIHdvcmtmbG93c1xuICAgIGlmIChvcHRpb25zLmplc3QgPz8gdHJ1ZSkge1xuICAgICAgdGhpcy5qZXN0ID0gbmV3IEplc3QodGhpcywgb3B0aW9ucy5qZXN0T3B0aW9ucyk7XG4gICAgfVxuXG4gICAgY29uc3Qgd29ya2Zsb3dQZXJtaXNzaW9uczogSm9iUGVybWlzc2lvbnMgPSB7XG4gICAgICBpZFRva2VuOiB0aGlzLmRldGVybWluZUlkVG9rZW5QZXJtaXNzaW9ucyhvcHRpb25zKSxcbiAgICB9O1xuXG4gICAgY29uc3QgYnVpbGRXb3JrZmxvd09wdGlvbnM6IEJ1aWxkV29ya2Zsb3dPcHRpb25zID1cbiAgICAgIG9wdGlvbnMuYnVpbGRXb3JrZmxvd09wdGlvbnMgPz8ge307XG5cbiAgICBpZiAoYnVpbGRFbmFibGVkICYmICh0aGlzLmdpdGh1YiB8fCBHaXRIdWIub2YodGhpcy5yb290KSkpIHtcbiAgICAgIHRoaXMuYnVpbGRXb3JrZmxvdyA9IG5ldyBCdWlsZFdvcmtmbG93KHRoaXMsIHtcbiAgICAgICAgYnVpbGRUYXNrOiB0aGlzLmJ1aWxkVGFzayxcbiAgICAgICAgYXJ0aWZhY3RzRGlyZWN0b3J5OiB0aGlzLmFydGlmYWN0c0RpcmVjdG9yeSxcbiAgICAgICAgY29udGFpbmVySW1hZ2U6IG9wdGlvbnMud29ya2Zsb3dDb250YWluZXJJbWFnZSxcbiAgICAgICAgZ2l0SWRlbnRpdHk6IHRoaXMud29ya2Zsb3dHaXRJZGVudGl0eSxcbiAgICAgICAgcGVybWlzc2lvbnM6IHdvcmtmbG93UGVybWlzc2lvbnMsXG4gICAgICAgIC4uLmJ1aWxkV29ya2Zsb3dPcHRpb25zLFxuICAgICAgICBwcmVCdWlsZFN0ZXBzOiB0aGlzLnJlbmRlcldvcmtmbG93U2V0dXAoe1xuICAgICAgICAgIGluc3RhbGxTdGVwQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgd29ya2luZ0RpcmVjdG9yeTogdGhpcy5kZXRlcm1pbmVJbnN0YWxsV29ya2luZ0RpcmVjdG9yeSgpLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgbXV0YWJsZTpcbiAgICAgICAgICAgIGJ1aWxkV29ya2Zsb3dPcHRpb25zLm11dGFibGVJbnN0YWxsID8/XG4gICAgICAgICAgICBidWlsZFdvcmtmbG93T3B0aW9ucy5tdXRhYmxlQnVpbGQgPz9cbiAgICAgICAgICAgIHRydWUsXG4gICAgICAgIH0pLmNvbmNhdChidWlsZFdvcmtmbG93T3B0aW9ucy5wcmVCdWlsZFN0ZXBzID8/IFtdKSxcbiAgICAgICAgcG9zdEJ1aWxkU3RlcHM6IFsuLi4ob3B0aW9ucy5wb3N0QnVpbGRTdGVwcyA/PyBbXSldLFxuICAgICAgICAuLi5maWx0ZXJlZFJ1bnNPbk9wdGlvbnMoXG4gICAgICAgICAgYnVpbGRXb3JrZmxvd09wdGlvbnMucnVuc09uID8/IG9wdGlvbnMud29ya2Zsb3dSdW5zT24sXG4gICAgICAgICAgYnVpbGRXb3JrZmxvd09wdGlvbnMucnVuc09uR3JvdXAgPz8gb3B0aW9ucy53b3JrZmxvd1J1bnNPbkdyb3VwLFxuICAgICAgICApLFxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuYnVpbGRXb3JrZmxvdy5hZGRQb3N0QnVpbGRTdGVwcyhcbiAgICAgICAgLi4udGhpcy5yZW5kZXJVcGxvYWRDb3ZlcmFnZUpvYlN0ZXAob3B0aW9ucyksXG4gICAgICApO1xuICAgICAgdGhpcy5tYXliZUFkZENvZGVjb3ZJZ25vcmVzKG9wdGlvbnMpO1xuICAgIH1cblxuICAgIC8vIEJ1aWxkIHJlbGVhc2UgdGFza3MgYXJyYXlcbiAgICBjb25zdCByZWxlYXNlVGFza3MgPSBbXTtcblxuICAgIC8vIEFkZCBzZWN1cml0eSBhdWRpdCBiZWZvcmUgcmVsZWFzZSBpZiBlbmFibGVkXG4gICAgaWYgKG9wdGlvbnMuYXVkaXREZXBzKSB7XG4gICAgICBjb25zdCBhdWRpdFRhc2sgPSB0aGlzLmFkZEF1ZGl0VGFzayhvcHRpb25zKTtcbiAgICAgIGNvbnN0IHJ1bk9uID0gb3B0aW9ucy5hdWRpdERlcHNPcHRpb25zPy5ydW5PbiA/PyBcImJ1aWxkXCI7XG5cbiAgICAgIGlmIChydW5PbiA9PT0gXCJyZWxlYXNlXCIpIHtcbiAgICAgICAgcmVsZWFzZVRhc2tzLnB1c2goYXVkaXRUYXNrKTtcbiAgICAgIH0gZWxzZSBpZiAocnVuT24gPT09IFwiYnVpbGRcIikge1xuICAgICAgICB0aGlzLnByZUNvbXBpbGVUYXNrLnNwYXduKGF1ZGl0VGFzayk7XG4gICAgICB9XG4gICAgICAvLyBcIm1hbnVhbFwiIG1vZGUgZG9lc24ndCBhZGQgdG8gYW55IHRhc2tcbiAgICB9XG5cbiAgICBjb25zdCByZWxlYXNlID0gb3B0aW9ucy5yZWxlYXNlID8/ICh0aGlzLnBhcmVudCA/IGZhbHNlIDogdHJ1ZSk7XG4gICAgaWYgKHJlbGVhc2UpIHtcbiAgICAgIC8vIEFkZCBidWlsZCB0YXNrXG4gICAgICByZWxlYXNlVGFza3MucHVzaCh0aGlzLmJ1aWxkVGFzayk7XG5cbiAgICAgIHRoaXMucmVsZWFzZSA9IG5ldyBSZWxlYXNlKHRoaXMsIHtcbiAgICAgICAgdmVyc2lvbkZpbGU6IFwicGFja2FnZS5qc29uXCIsIC8vIHRoaXMgaXMgd2hlcmUgXCJ2ZXJzaW9uXCIgaXMgc2V0IGFmdGVyIGJ1bXBcbiAgICAgICAgdGFza3M6IHJlbGVhc2VUYXNrcyxcbiAgICAgICAgYnJhbmNoOiBvcHRpb25zLmRlZmF1bHRSZWxlYXNlQnJhbmNoID8/IFwibWFpblwiLFxuICAgICAgICAuLi5vcHRpb25zLFxuXG4gICAgICAgIGFydGlmYWN0c0RpcmVjdG9yeTogdGhpcy5hcnRpZmFjdHNEaXJlY3RvcnksXG4gICAgICAgIHJlbGVhc2VXb3JrZmxvd1NldHVwU3RlcHM6IFtcbiAgICAgICAgICAuLi50aGlzLnJlbmRlcldvcmtmbG93U2V0dXAoe1xuICAgICAgICAgICAgaW5zdGFsbFN0ZXBDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgIHdvcmtpbmdEaXJlY3Rvcnk6IHRoaXMuZGV0ZXJtaW5lSW5zdGFsbFdvcmtpbmdEaXJlY3RvcnkoKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtdXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAuLi4ob3B0aW9ucy5yZWxlYXNlV29ya2Zsb3dTZXR1cFN0ZXBzID8/IFtdKSxcbiAgICAgICAgXSxcbiAgICAgICAgcG9zdEJ1aWxkU3RlcHM6IFtcbiAgICAgICAgICAuLi4ob3B0aW9ucy5wb3N0QnVpbGRTdGVwcyA/PyBbXSksXG4gICAgICAgICAgLi4udGhpcy5yZW5kZXJVcGxvYWRDb3ZlcmFnZUpvYlN0ZXAob3B0aW9ucyksXG4gICAgICAgIF0sXG5cbiAgICAgICAgd29ya2Zsb3dOb2RlVmVyc2lvbjogdGhpcy5ub2RlVmVyc2lvbixcbiAgICAgICAgd29ya2Zsb3dQZXJtaXNzaW9ucyxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLm1heWJlQWRkQ29kZWNvdklnbm9yZXMob3B0aW9ucyk7XG5cbiAgICAgIGNvbnN0IG5vZGVQYWNrYWdlVG9SZWxlYXNlQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyTWFwcGluZzogUmVjb3JkPFxuICAgICAgICBOb2RlUGFja2FnZUNvZGVBcnRpZmFjdEF1dGhQcm92aWRlcixcbiAgICAgICAgUmVsZWFzZUNvZGVBcnRpZmFjdEF1dGhQcm92aWRlclxuICAgICAgPiA9IHtcbiAgICAgICAgW05vZGVQYWNrYWdlQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyLkFDQ0VTU19BTkRfU0VDUkVUX0tFWV9QQUlSXTpcbiAgICAgICAgICBSZWxlYXNlQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyLkFDQ0VTU19BTkRfU0VDUkVUX0tFWV9QQUlSLFxuICAgICAgICBbTm9kZVBhY2thZ2VDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXIuR0lUSFVCX09JRENdOlxuICAgICAgICAgIFJlbGVhc2VDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXIuR0lUSFVCX09JREMsXG4gICAgICB9O1xuXG4gICAgICBpZiAob3B0aW9ucy5yZWxlYXNlVG9OcG0gPz8gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgY29kZUFydGlmYWN0T3B0aW9uczogTnBtUHVibGlzaE9wdGlvbnNbXCJjb2RlQXJ0aWZhY3RPcHRpb25zXCJdID1cbiAgICAgICAgICBpc0F3c0NvZGVBcnRpZmFjdFJlZ2lzdHJ5KHRoaXMucGFja2FnZS5ucG1SZWdpc3RyeSlcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIGFjY2Vzc0tleUlkU2VjcmV0OlxuICAgICAgICAgICAgICAgICAgb3B0aW9ucy5jb2RlQXJ0aWZhY3RPcHRpb25zPy5hY2Nlc3NLZXlJZFNlY3JldCxcbiAgICAgICAgICAgICAgICBzZWNyZXRBY2Nlc3NLZXlTZWNyZXQ6XG4gICAgICAgICAgICAgICAgICBvcHRpb25zLmNvZGVBcnRpZmFjdE9wdGlvbnM/LnNlY3JldEFjY2Vzc0tleVNlY3JldCxcbiAgICAgICAgICAgICAgICByb2xlVG9Bc3N1bWU6IG9wdGlvbnMuY29kZUFydGlmYWN0T3B0aW9ucz8ucm9sZVRvQXNzdW1lLFxuICAgICAgICAgICAgICAgIGF1dGhQcm92aWRlcjogb3B0aW9ucy5jb2RlQXJ0aWZhY3RPcHRpb25zPy5hdXRoUHJvdmlkZXJcbiAgICAgICAgICAgICAgICAgID8gbm9kZVBhY2thZ2VUb1JlbGVhc2VDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXJNYXBwaW5nW1xuICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29kZUFydGlmYWN0T3B0aW9ucy5hdXRoUHJvdmlkZXJcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgOiBSZWxlYXNlQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyLkFDQ0VTU19BTkRfU0VDUkVUX0tFWV9QQUlSLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHt9O1xuICAgICAgICB0aGlzLnJlbGVhc2UucHVibGlzaGVyLnB1Ymxpc2hUb05wbSh7XG4gICAgICAgICAgcmVnaXN0cnk6IHRoaXMucGFja2FnZS5ucG1SZWdpc3RyeSxcbiAgICAgICAgICBucG1Ub2tlblNlY3JldDogdGhpcy5wYWNrYWdlLm5wbVRva2VuU2VjcmV0LFxuICAgICAgICAgIG5wbVByb3ZlbmFuY2U6IHRoaXMucGFja2FnZS5ucG1Qcm92ZW5hbmNlLFxuICAgICAgICAgIHRydXN0ZWRQdWJsaXNoaW5nOiBvcHRpb25zLm5wbVRydXN0ZWRQdWJsaXNoaW5nID8/IGZhbHNlLFxuICAgICAgICAgIGNvZGVBcnRpZmFjdE9wdGlvbnMsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyB2YWxpZGF0ZSB0aGF0IG5vIHJlbGVhc2Ugb3B0aW9ucyBhcmUgc2VsZWN0ZWQgaWYgdGhlIHJlbGVhc2Ugd29ya2Zsb3cgaXMgZGlzYWJsZWQuXG4gICAgICBpZiAob3B0aW9ucy5yZWxlYXNlVG9OcG0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdcInJlbGVhc2VUb05wbVwiIGlzIG5vdCBzdXBwb3J0ZWQgaWYgXCJyZWxlYXNlXCIgaXMgbm90IHNldCcsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKFxuICAgICAgKG9wdGlvbnMuYXV0b01lcmdlID8/IHRydWUpICYmXG4gICAgICB0aGlzLmdpdGh1Yj8ubWVyZ2lmeSAmJlxuICAgICAgdGhpcy5idWlsZFdvcmtmbG93Py5idWlsZEpvYklkc1xuICAgICkge1xuICAgICAgdGhpcy5hdXRvTWVyZ2UgPSBuZXcgQXV0b01lcmdlKHRoaXMuZ2l0aHViLCBvcHRpb25zLmF1dG9NZXJnZU9wdGlvbnMpO1xuICAgICAgdGhpcy5hdXRvTWVyZ2UuYWRkQ29uZGl0aW9uc0xhdGVyKHtcbiAgICAgICAgcmVuZGVyOiAoKSA9PlxuICAgICAgICAgIHRoaXMuYnVpbGRXb3JrZmxvdz8uYnVpbGRKb2JJZHMubWFwKChpZCkgPT4gYHN0YXR1cy1zdWNjZXNzPSR7aWR9YCkgPz9cbiAgICAgICAgICBbXSxcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvbnN0IGRlcGVuZGFib3QgPSBvcHRpb25zLmRlcGVuZGFib3QgPz8gZmFsc2U7XG4gICAgY29uc3QgZGVwc1VwZ3JhZGUgPVxuICAgICAgb3B0aW9ucy5kZXBzVXBncmFkZSA/PyAodGhpcy5wYXJlbnQgPyBmYWxzZSA6ICFkZXBlbmRhYm90KTsgLy8gYnkgZGVmYXVsdCBkaXNhYmxlZCBpbiBzdWJwcm9qZWN0c1xuXG4gICAgaWYgKGRlcGVuZGFib3QgJiYgZGVwc1VwZ3JhZGUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCInZGVwZW5kYWJvdCcgY2Fubm90IGJlIGNvbmZpZ3VyZWQgdG9nZXRoZXIgd2l0aCAnZGVwc1VwZ3JhZGUnXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGRlcHNBdXRvQXBwcm92ZSA9IG9wdGlvbnMuYXV0b0FwcHJvdmVVcGdyYWRlcyA/PyBmYWxzZTtcblxuICAgIGlmIChkZXBzQXV0b0FwcHJvdmUgJiYgIXRoaXMuYXV0b0FwcHJvdmUgJiYgdGhpcy5naXRodWIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJBdXRvbWF0aWMgYXBwcm92YWwgb2YgZGVwZW5kZW5jaWVzIHVwZ3JhZGVzIHJlcXVpcmVzIGNvbmZpZ3VyaW5nIGBhdXRvQXBwcm92ZU9wdGlvbnNgXCIsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGF1dG9BcHByb3ZlTGFiZWwgPSAoY29uZGl0aW9uOiBib29sZWFuKSA9PlxuICAgICAgY29uZGl0aW9uICYmIHRoaXMuYXV0b0FwcHJvdmU/LmxhYmVsXG4gICAgICAgID8gW3RoaXMuYXV0b0FwcHJvdmUubGFiZWxdXG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKGRlcGVuZGFib3QpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRPcHRpb25zID0ge1xuICAgICAgICBsYWJlbHM6IGF1dG9BcHByb3ZlTGFiZWwoZGVwc0F1dG9BcHByb3ZlKSxcbiAgICAgIH07XG4gICAgICB0aGlzLmdpdGh1Yj8uYWRkRGVwZW5kYWJvdChcbiAgICAgICAgZGVlcE1lcmdlKFtkZWZhdWx0T3B0aW9ucywgb3B0aW9ucy5kZXBlbmRhYm90T3B0aW9ucyA/PyB7fV0pLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAoZGVwc1VwZ3JhZGUpIHtcbiAgICAgIGNvbnN0IGRlZmF1bHRPcHRpb25zOiBVcGdyYWRlRGVwZW5kZW5jaWVzT3B0aW9ucyA9IHtcbiAgICAgICAgd29ya2Zsb3dPcHRpb25zOiB7XG4gICAgICAgICAgY29udGFpbmVyOiBvcHRpb25zLndvcmtmbG93Q29udGFpbmVySW1hZ2VcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIGltYWdlOiBvcHRpb25zLndvcmtmbG93Q29udGFpbmVySW1hZ2UsXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgICAgIGxhYmVsczogYXV0b0FwcHJvdmVMYWJlbChkZXBzQXV0b0FwcHJvdmUpLFxuICAgICAgICAgIGdpdElkZW50aXR5OiB0aGlzLndvcmtmbG93R2l0SWRlbnRpdHksXG4gICAgICAgICAgcGVybWlzc2lvbnM6IHdvcmtmbG93UGVybWlzc2lvbnMsXG4gICAgICAgIH0sXG4gICAgICB9O1xuICAgICAgdGhpcy51cGdyYWRlV29ya2Zsb3cgPSBuZXcgVXBncmFkZURlcGVuZGVuY2llcyhcbiAgICAgICAgdGhpcyxcbiAgICAgICAgZGVlcE1lcmdlKFtkZWZhdWx0T3B0aW9ucywgb3B0aW9ucy5kZXBzVXBncmFkZU9wdGlvbnMgPz8ge31dKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMucHVsbFJlcXVlc3RUZW1wbGF0ZSA/PyB0cnVlKSB7XG4gICAgICB0aGlzLmdpdGh1Yj8uYWRkUHVsbFJlcXVlc3RUZW1wbGF0ZShcbiAgICAgICAgLi4uKG9wdGlvbnMucHVsbFJlcXVlc3RUZW1wbGF0ZUNvbnRlbnRzID8/IFtdKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgcHJvamVucmNKcyA9IG9wdGlvbnMucHJvamVucmNKcyA/PyAhb3B0aW9ucy5wcm9qZW5yY0pzb247XG4gICAgaWYgKCF0aGlzLnBhcmVudCAmJiBwcm9qZW5yY0pzKSB7XG4gICAgICBjb25zdCBwcm9qZW5yY0pzRmlsZSA9IG5ldyBQcm9qZW5yYyh0aGlzLCBvcHRpb25zLnByb2plbnJjSnNPcHRpb25zKTtcblxuICAgICAgdGhpcy5ucG1pZ25vcmU/LmV4Y2x1ZGUoYC8ke3Byb2plbnJjSnNGaWxlLmZpbGVQYXRofWApO1xuICAgIH0gZWxzZSBpZiAob3B0aW9ucy5wcm9qZW5yY0pzb24pIHtcbiAgICAgIGNvbnN0IHByb2plbnJjSnNvbkZpbGUgPSBQcm9qZW5yY0pzb24ub2YodGhpcyk7XG4gICAgICBpZiAocHJvamVucmNKc29uRmlsZSkge1xuICAgICAgICB0aGlzLm5wbWlnbm9yZT8uZXhjbHVkZShgLyR7cHJvamVucmNKc29uRmlsZS5maWxlUGF0aH1gKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhZGQgYSBidW5kbGVyIGNvbXBvbmVudCAtIHRoaXMgZW5hYmxlcyB0aGluZ3MgbGlrZSBMYW1iZGEgYnVuZGxpbmcgYW5kIGluIHRoZSBmdXR1cmUgd2ViIGJ1bmRsaW5nLlxuICAgIHRoaXMuYnVuZGxlciA9IG5ldyBCdW5kbGVyKHRoaXMsIG9wdGlvbnMuYnVuZGxlck9wdGlvbnMpO1xuXG4gICAgY29uc3Qgc2hvdWxkUGFja2FnZSA9IG9wdGlvbnMucGFja2FnZSA/PyB0cnVlO1xuICAgIGlmIChyZWxlYXNlICYmICFzaG91bGRQYWNrYWdlKSB7XG4gICAgICB0aGlzLmxvZ2dlci53YXJuKFxuICAgICAgICBcIldoZW4gYHJlbGVhc2VgIGlzIGVuYWJsZWQsIGBwYWNrYWdlYCBtdXN0IGFsc28gYmUgZW5hYmxlZCBhcyBpdCBpcyByZXF1aXJlZCBieSByZWxlYXNlLiBGb3JjZSBlbmFibGluZyBgcGFja2FnZWAuXCIsXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAocmVsZWFzZSB8fCBzaG91bGRQYWNrYWdlKSB7XG4gICAgICB0aGlzLnBhY2thZ2VUYXNrLmV4ZWMoYG1rZGlyIC1wICR7dGhpcy5hcnRpZmFjdHNKYXZhc2NyaXB0RGlyZWN0b3J5fWApO1xuXG4gICAgICBjb25zdCBwa2dNZ3IgPVxuICAgICAgICB0aGlzLnBhY2thZ2UucGFja2FnZU1hbmFnZXIgPT09IE5vZGVQYWNrYWdlTWFuYWdlci5QTlBNXG4gICAgICAgICAgPyBcInBucG1cIlxuICAgICAgICAgIDogXCJucG1cIjtcbiAgICAgIHRoaXMucGFja2FnZVRhc2suZXhlYyhcbiAgICAgICAgYCR7cGtnTWdyfSBwYWNrIC0tcGFjay1kZXN0aW5hdGlvbiAke3RoaXMuYXJ0aWZhY3RzSmF2YXNjcmlwdERpcmVjdG9yeX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAobXVsdGlwbGVTZWxlY3RlZChbb3B0aW9ucy5iaW9tZSwgb3B0aW9ucy5wcmV0dGllcl0pKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJPbmx5IG9uZSBvZiBiaW9tZSBhbmQgcHJldHRpZXIgY2FuIGJlIGVuYWJsZWQuXCIpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmJpb21lID8/IGZhbHNlKSB7XG4gICAgICB0aGlzLmJpb21lID0gbmV3IEJpb21lKHRoaXMsIHsgLi4ub3B0aW9ucy5iaW9tZU9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMucHJldHRpZXIgPz8gZmFsc2UpIHtcbiAgICAgIHRoaXMucHJldHRpZXIgPSBuZXcgUHJldHRpZXIodGhpcywgeyAuLi5vcHRpb25zLnByZXR0aWVyT3B0aW9ucyB9KTtcbiAgICB9XG5cbiAgICAvLyBGb3IgUE5QTSA8IDEwLCB0aGUgZGVmYXVsdCByZXNvbHV0aW9uIG1vZGUgaXMgXCJsb3dlc3RcIiwgd2hpY2ggbGVhZHMgdG8gYW55IG5vbi12ZXJzaW9uZWQgKGllICcqJykgZGVwZW5kZW5jaWVzIGJlaW5nXG4gICAgLy8gcmVzb2x2ZWQgdG8gdGhlIGxvd2VzdCBhdmFpbGFibGUgdmVyc2lvbiwgd2hpY2ggaXMgdW5saWtlbHkgdG8gYmUgZXhwZWN0ZWQgYmVoYXZpb3VyIGZvciB1c2Vycy4gV2Ugc2V0IHJlc29sdXRpb25cbiAgICAvLyBtb2RlIHRvIFwiaGlnaGVzdFwiIHRvIG1hdGNoIHRoZSBiZWhhdmlvdXIgb2YgeWFybiBhbmQgbnBtLiBQTlBNIDEwKyBkZWZhdWx0cyB0byBcImhpZ2hlc3RcIiBhbHJlYWR5LlxuICAgIGlmIChcbiAgICAgIHRoaXMucGFja2FnZS5wYWNrYWdlTWFuYWdlciA9PT0gTm9kZVBhY2thZ2VNYW5hZ2VyLlBOUE0gJiZcbiAgICAgIHNlbXZlci5sdChzZW12ZXIuY29lcmNlKHRoaXMucGFja2FnZS5wbnBtVmVyc2lvbikgPz8gXCIwLjAuMFwiLCBcIjEwLjAuMFwiKVxuICAgICkge1xuICAgICAgdGhpcy5ucG1yYy5hZGRDb25maWcoXCJyZXNvbHV0aW9uLW1vZGVcIiwgXCJoaWdoZXN0XCIpO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLmNoZWNrTGljZW5zZXMpIHtcbiAgICAgIG5ldyBMaWNlbnNlQ2hlY2tlcih0aGlzLCBvcHRpb25zLmNoZWNrTGljZW5zZXMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZGV0ZXJtaW5lSW5zdGFsbFdvcmtpbmdEaXJlY3RvcnkoKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5wYXJlbnQpIHtcbiAgICAgIHJldHVybiBlbnN1cmVSZWxhdGl2ZVBhdGhTdGFydHNXaXRoRG90KHJlbGF0aXZlKFwiLlwiLCB0aGlzLnJvb3Qub3V0ZGlyKSk7XG4gICAgfVxuICAgIHJldHVybjtcbiAgfVxuXG4gIHByaXZhdGUgZGV0ZXJtaW5lSWRUb2tlblBlcm1pc3Npb25zKFxuICAgIG9wdGlvbnM6IE5vZGVQcm9qZWN0T3B0aW9ucyxcbiAgKTogSm9iUGVybWlzc2lvbiB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgeyBjb2RlQ292VG9rZW5TZWNyZXQsIHNjb3BlZFBhY2thZ2VzT3B0aW9ucywgY29kZUFydGlmYWN0T3B0aW9ucyB9ID1cbiAgICAgIG9wdGlvbnM7XG5cbiAgICBjb25zdCB1c2VDb2RlQ292ZU9pZGMgPSB0aGlzLnVzZUNvZGVjb3Yob3B0aW9ucykgJiYgIWNvZGVDb3ZUb2tlblNlY3JldDtcbiAgICBjb25zdCBoYXNTY29wZWRQYWNrYWdlcyA9IChzY29wZWRQYWNrYWdlc09wdGlvbnMgPz8gW10pLmxlbmd0aCA+IDA7XG4gICAgY29uc3QgdXNlQ29kZUFydGlmYWN0T2lkYyA9XG4gICAgICBjb2RlQXJ0aWZhY3RPcHRpb25zPy5hdXRoUHJvdmlkZXIgPT09XG4gICAgICBDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXIuR0lUSFVCX09JREM7XG5cbiAgICBpZiAodXNlQ29kZUNvdmVPaWRjIHx8ICh1c2VDb2RlQXJ0aWZhY3RPaWRjICYmIGhhc1Njb3BlZFBhY2thZ2VzKSkge1xuICAgICAgcmV0dXJuIEpvYlBlcm1pc3Npb24uV1JJVEU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgdXNlQ29kZWNvdihvcHRpb25zOiBOb2RlUHJvamVjdE9wdGlvbnMpOiBib29sZWFuIHtcbiAgICAvLyBVc2UgQ29kZWNvdiB3aGVuIGl0IGlzIGVuYWJsZWQgb3IgaWYgb3IgYSBzZWNyZXQgdG9rZW4gbmFtZSBpcyBwYXNzZWQgaW5cbiAgICAvLyBBTkQgamVzdCBtdXN0IGJlIGNvbmZpZ3VyZWRcbiAgICByZXR1cm4gKG9wdGlvbnMuY29kZUNvdiB8fCBvcHRpb25zLmNvZGVDb3ZUb2tlblNlY3JldCkgJiYgdGhpcy5qZXN0Py5jb25maWc7XG4gIH1cblxuICBwcml2YXRlIG1heWJlQWRkQ29kZWNvdklnbm9yZXMob3B0aW9uczogTm9kZVByb2plY3RPcHRpb25zKSB7XG4gICAgaWYgKHRoaXMudXNlQ29kZWNvdihvcHRpb25zKSkge1xuICAgICAgdGhpcy5hZGRHaXRJZ25vcmUoXCJjb2RlY292XCIpO1xuICAgICAgdGhpcy5hZGRHaXRJZ25vcmUoXCJjb2RlY292LipcIik7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJVcGxvYWRDb3ZlcmFnZUpvYlN0ZXAob3B0aW9uczogTm9kZVByb2plY3RPcHRpb25zKTogSm9iU3RlcFtdIHtcbiAgICAvLyBydW4gY29kZWNvdiBpZiBlbmFibGVkIG9yIGEgc2VjcmV0IHRva2VuIG5hbWUgaXMgcGFzc2VkIGluXG4gICAgLy8gQU5EIGplc3QgbXVzdCBiZSBjb25maWd1cmVkXG4gICAgaWYgKHRoaXMudXNlQ29kZWNvdihvcHRpb25zKSkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiVXBsb2FkIGNvdmVyYWdlIHRvIENvZGVjb3ZcIixcbiAgICAgICAgICB1c2VzOiBcImNvZGVjb3YvY29kZWNvdi1hY3Rpb25AdjZcIixcbiAgICAgICAgICB3aXRoOiBvcHRpb25zLmNvZGVDb3ZUb2tlblNlY3JldFxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgICAgdG9rZW46IGBcXCR7eyBzZWNyZXRzLiR7b3B0aW9ucy5jb2RlQ292VG9rZW5TZWNyZXR9IH19YCxcbiAgICAgICAgICAgICAgICBkaXJlY3Rvcnk6IHRoaXMuamVzdD8uY29uZmlnLmNvdmVyYWdlRGlyZWN0b3J5LFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHtcbiAgICAgICAgICAgICAgICBkaXJlY3Rvcnk6IHRoaXMuamVzdD8uY29uZmlnLmNvdmVyYWdlRGlyZWN0b3J5LFxuICAgICAgICAgICAgICAgIHVzZV9vaWRjOiB0cnVlLFxuICAgICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhZGRCaW5zKGJpbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pIHtcbiAgICB0aGlzLnBhY2thZ2UuYWRkQmluKGJpbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIHRoZSBjb250ZW50cyBvZiBhbiBucG0gcGFja2FnZS5qc29uIHNjcmlwdC5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgVGhlIHNjcmlwdCBuYW1lXG4gICAqIEBwYXJhbSBjb21tYW5kIFRoZSBjb21tYW5kIHRvIGV4ZWN1dGVcbiAgICovXG4gIHB1YmxpYyBzZXRTY3JpcHQobmFtZTogc3RyaW5nLCBjb21tYW5kOiBzdHJpbmcpIHtcbiAgICB0aGlzLnBhY2thZ2Uuc2V0U2NyaXB0KG5hbWUsIGNvbW1hbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIHRoZSBjb250ZW50cyBvZiBtdWx0aXBsZSBucG0gcGFja2FnZS5qc29uIHNjcmlwdHMuXG4gICAqIEBwYXJhbSBzY3JpcHRzIFRoZSBzY3JpcHRzIHRvIHNldFxuICAgKi9cbiAgcHVibGljIGFkZFNjcmlwdHMoc2NyaXB0czogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0pIHtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBjb21tYW5kXSBvZiBPYmplY3QuZW50cmllcyhzY3JpcHRzKSkge1xuICAgICAgdGhpcy5wYWNrYWdlLnNldFNjcmlwdChuYW1lLCBjb21tYW5kKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgbnBtIHNjcmlwdCAoYWx3YXlzIHN1Y2Nlc3NmdWwpLlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgc2NyaXB0LlxuICAgKi9cbiAgcHVibGljIHJlbW92ZVNjcmlwdChuYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLnBhY2thZ2UucmVtb3ZlU2NyaXB0KG5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIERpcmVjdGx5IHNldCBmaWVsZHMgaW4gYHBhY2thZ2UuanNvbmAuXG4gICAqIEBwYXJhbSBmaWVsZHMgVGhlIGZpZWxkcyB0byBzZXRcbiAgICovXG4gIHB1YmxpYyBhZGRGaWVsZHMoZmllbGRzOiB7IFtuYW1lOiBzdHJpbmddOiBhbnkgfSkge1xuICAgIGZvciAoY29uc3QgW25hbWUsIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhmaWVsZHMpKSB7XG4gICAgICB0aGlzLnBhY2thZ2UuYWRkRmllbGQobmFtZSwgdmFsdWUpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGtleXdvcmRzIHRvIHBhY2thZ2UuanNvbiAoZGVkdXBsaWNhdGVkKVxuICAgKiBAcGFyYW0ga2V5d29yZHMgVGhlIGtleXdvcmRzIHRvIGFkZFxuICAgKi9cbiAgcHVibGljIGFkZEtleXdvcmRzKC4uLmtleXdvcmRzOiBzdHJpbmdbXSkge1xuICAgIHRoaXMucGFja2FnZS5hZGRLZXl3b3JkcyguLi5rZXl3b3Jkcyk7XG4gIH1cblxuICAvKipcbiAgICogR2V0IHN0ZXBzIGZvciBzY29wZWQgcGFja2FnZSBhY2Nlc3NcbiAgICpcbiAgICogQHBhcmFtIGNvZGVBcnRpZmFjdE9wdGlvbnMgRGV0YWlscyBvZiBsb2dnaW5nIGluIHRvIEFXU1xuICAgKiBAcmV0dXJucyBhcnJheSBvZiBqb2Igc3RlcHMgcmVxdWlyZWQgZm9yIGVhY2ggcHJpdmF0ZSBzY29wZWQgcGFja2FnZXNcbiAgICovXG4gIHByaXZhdGUgZ2V0U2NvcGVkUGFja2FnZVN0ZXBzKFxuICAgIGNvZGVBcnRpZmFjdE9wdGlvbnM6IENvZGVBcnRpZmFjdE9wdGlvbnMgfCB1bmRlZmluZWQsXG4gICk6IEpvYlN0ZXBbXSB7XG4gICAgY29uc3QgcGFyc2VkQ29kZUFydGlmYWN0T3B0aW9ucyA9IHtcbiAgICAgIGFjY2Vzc0tleUlkU2VjcmV0OlxuICAgICAgICBjb2RlQXJ0aWZhY3RPcHRpb25zPy5hY2Nlc3NLZXlJZFNlY3JldCA/PyBcIkFXU19BQ0NFU1NfS0VZX0lEXCIsXG4gICAgICBzZWNyZXRBY2Nlc3NLZXlTZWNyZXQ6XG4gICAgICAgIGNvZGVBcnRpZmFjdE9wdGlvbnM/LnNlY3JldEFjY2Vzc0tleVNlY3JldCA/PyBcIkFXU19TRUNSRVRfQUNDRVNTX0tFWVwiLFxuICAgICAgcm9sZVRvQXNzdW1lOiBjb2RlQXJ0aWZhY3RPcHRpb25zPy5yb2xlVG9Bc3N1bWUsXG4gICAgICBhdXRoUHJvdmlkZXI6IGNvZGVBcnRpZmFjdE9wdGlvbnM/LmF1dGhQcm92aWRlcixcbiAgICB9O1xuXG4gICAgY29uc3QgZXhlY3V0ZVByb2plbkNvbW1hbmQgPSBgJHtleGVjdXRlQ29tbWFuZFByaW9ySW5zdGFsbGF0aW9uKHRoaXMucGFja2FnZS5wYWNrYWdlTWFuYWdlcil9IHByb2plbmA7XG5cbiAgICBpZiAoXG4gICAgICBwYXJzZWRDb2RlQXJ0aWZhY3RPcHRpb25zLmF1dGhQcm92aWRlciA9PT1cbiAgICAgIE5vZGVQYWNrYWdlQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyLkdJVEhVQl9PSURDXG4gICAgKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJDb25maWd1cmUgQVdTIENyZWRlbnRpYWxzXCIsXG4gICAgICAgICAgdXNlczogXCJhd3MtYWN0aW9ucy9jb25maWd1cmUtYXdzLWNyZWRlbnRpYWxzQHY2XCIsXG4gICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgXCJhd3MtcmVnaW9uXCI6IFwidXMtZWFzdC0yXCIsXG4gICAgICAgICAgICBcInJvbGUtdG8tYXNzdW1lXCI6IHBhcnNlZENvZGVBcnRpZmFjdE9wdGlvbnMucm9sZVRvQXNzdW1lLFxuICAgICAgICAgICAgXCJyb2xlLWR1cmF0aW9uLXNlY29uZHNcIjogOTAwLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIkFXUyBDb2RlQXJ0aWZhY3QgTG9naW5cIixcbiAgICAgICAgICBydW46IGAke2V4ZWN1dGVQcm9qZW5Db21tYW5kfSBjYTpsb2dpbmAsXG4gICAgICAgIH0sXG4gICAgICBdO1xuICAgIH1cblxuICAgIGlmIChwYXJzZWRDb2RlQXJ0aWZhY3RPcHRpb25zLnJvbGVUb0Fzc3VtZSkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiQ29uZmlndXJlIEFXUyBDcmVkZW50aWFsc1wiLFxuICAgICAgICAgIHVzZXM6IFwiYXdzLWFjdGlvbnMvY29uZmlndXJlLWF3cy1jcmVkZW50aWFsc0B2NlwiLFxuICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgIFwiYXdzLWFjY2Vzcy1rZXktaWRcIjogc2VjcmV0VG9TdHJpbmcoXG4gICAgICAgICAgICAgIHBhcnNlZENvZGVBcnRpZmFjdE9wdGlvbnMuYWNjZXNzS2V5SWRTZWNyZXQsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgXCJhd3Mtc2VjcmV0LWFjY2Vzcy1rZXlcIjogc2VjcmV0VG9TdHJpbmcoXG4gICAgICAgICAgICAgIHBhcnNlZENvZGVBcnRpZmFjdE9wdGlvbnMuc2VjcmV0QWNjZXNzS2V5U2VjcmV0LFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIFwiYXdzLXJlZ2lvblwiOiBcInVzLWVhc3QtMlwiLFxuICAgICAgICAgICAgXCJyb2xlLXRvLWFzc3VtZVwiOiBwYXJzZWRDb2RlQXJ0aWZhY3RPcHRpb25zLnJvbGVUb0Fzc3VtZSxcbiAgICAgICAgICAgIFwicm9sZS1kdXJhdGlvbi1zZWNvbmRzXCI6IDkwMCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJBV1MgQ29kZUFydGlmYWN0IExvZ2luXCIsXG4gICAgICAgICAgcnVuOiBgJHtleGVjdXRlUHJvamVuQ29tbWFuZH0gY2E6bG9naW5gLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9XG5cbiAgICByZXR1cm4gW1xuICAgICAge1xuICAgICAgICBuYW1lOiBcIkFXUyBDb2RlQXJ0aWZhY3QgTG9naW5cIixcbiAgICAgICAgcnVuOiBgJHtleGVjdXRlUHJvamVuQ29tbWFuZH0gY2E6bG9naW5gLFxuICAgICAgICBlbnY6IHtcbiAgICAgICAgICBBV1NfQUNDRVNTX0tFWV9JRDogc2VjcmV0VG9TdHJpbmcoXG4gICAgICAgICAgICBwYXJzZWRDb2RlQXJ0aWZhY3RPcHRpb25zLmFjY2Vzc0tleUlkU2VjcmV0LFxuICAgICAgICAgICksXG4gICAgICAgICAgQVdTX1NFQ1JFVF9BQ0NFU1NfS0VZOiBzZWNyZXRUb1N0cmluZyhcbiAgICAgICAgICAgIHBhcnNlZENvZGVBcnRpZmFjdE9wdGlvbnMuc2VjcmV0QWNjZXNzS2V5U2VjcmV0LFxuICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc2V0IG9mIHdvcmtmbG93IHN0ZXBzIHdoaWNoIHNob3VsZCBiZSBleGVjdXRlZCB0byBib290c3RyYXAgYVxuICAgKiB3b3JrZmxvdy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucy5cbiAgICogQHJldHVybnMgSm9iIHN0ZXBzXG4gICAqL1xuICBwdWJsaWMgcmVuZGVyV29ya2Zsb3dTZXR1cChcbiAgICBvcHRpb25zOiBSZW5kZXJXb3JrZmxvd1NldHVwT3B0aW9ucyA9IHt9LFxuICApOiBKb2JTdGVwW10ge1xuICAgIGNvbnN0IGluc3RhbGwgPSBuZXcgQXJyYXk8Sm9iU3RlcD4oKTtcblxuICAgIC8vIGZpcnN0IHJ1biB0aGUgd29ya2Zsb3cgYm9vdHN0cmFwIHN0ZXBzXG4gICAgaW5zdGFsbC5wdXNoKC4uLnRoaXMud29ya2Zsb3dCb290c3RyYXBTdGVwcyk7XG5cbiAgICBpZiAoaXNZYXJuQmVycnkodGhpcy5wYWNrYWdlLnBhY2thZ2VNYW5hZ2VyKSkge1xuICAgICAgaW5zdGFsbC5wdXNoKHtcbiAgICAgICAgbmFtZTogXCJFbmFibGUgY29yZXBhY2tcIixcbiAgICAgICAgcnVuOiBcImNvcmVwYWNrIGVuYWJsZVwiLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnBhY2thZ2UucGFja2FnZU1hbmFnZXIgPT09IE5vZGVQYWNrYWdlTWFuYWdlci5QTlBNKSB7XG4gICAgICBpbnN0YWxsLnB1c2goe1xuICAgICAgICBuYW1lOiBcIlNldHVwIHBucG1cIixcbiAgICAgICAgdXNlczogXCJwbnBtL2FjdGlvbi1zZXR1cEB2NVwiLFxuICAgICAgICB3aXRoOiB7IHZlcnNpb246IHRoaXMucGFja2FnZS5wbnBtVmVyc2lvbiB9LFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnBhY2thZ2UucGFja2FnZU1hbmFnZXIgPT09IE5vZGVQYWNrYWdlTWFuYWdlci5CVU4pIHtcbiAgICAgIGluc3RhbGwucHVzaCh7XG4gICAgICAgIG5hbWU6IFwiU2V0dXAgYnVuXCIsXG4gICAgICAgIHVzZXM6IFwib3Zlbi1zaC9zZXR1cC1idW5AdjJcIixcbiAgICAgICAgd2l0aDogeyBcImJ1bi12ZXJzaW9uXCI6IHRoaXMucGFja2FnZS5idW5WZXJzaW9uIH0sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5wYWNrYWdlLnBhY2thZ2VNYW5hZ2VyICE9PSBOb2RlUGFja2FnZU1hbmFnZXIuQlVOKSB7XG4gICAgICBpZiAodGhpcy5ub2RlVmVyc2lvbiB8fCB0aGlzLndvcmtmbG93UGFja2FnZUNhY2hlKSB7XG4gICAgICAgIGNvbnN0IHBtOiBOb2RlUGFja2FnZU1hbmFnZXIgPSB0aGlzLnBhY2thZ2UucGFja2FnZU1hbmFnZXI7XG4gICAgICAgIGNvbnN0IGNhY2hlID1cbiAgICAgICAgICBpc1lhcm5DbGFzc2ljKHBtKSB8fCBpc1lhcm5CZXJyeShwbSlcbiAgICAgICAgICAgID8gXCJ5YXJuXCJcbiAgICAgICAgICAgIDogcG0gPT09IE5vZGVQYWNrYWdlTWFuYWdlci5QTlBNXG4gICAgICAgICAgICAgID8gXCJwbnBtXCJcbiAgICAgICAgICAgICAgOiBcIm5wbVwiO1xuICAgICAgICBpbnN0YWxsLnB1c2goe1xuICAgICAgICAgIG5hbWU6IFwiU2V0dXAgTm9kZS5qc1wiLFxuICAgICAgICAgIHVzZXM6IFwiYWN0aW9ucy9zZXR1cC1ub2RlQHY2XCIsXG4gICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgLi4uKHRoaXMubm9kZVZlcnNpb24gJiYge1xuICAgICAgICAgICAgICBcIm5vZGUtdmVyc2lvblwiOiB0aGlzLm5vZGVWZXJzaW9uLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAuLi4odGhpcy53b3JrZmxvd1BhY2thZ2VDYWNoZSAmJiB7XG4gICAgICAgICAgICAgIGNhY2hlLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBcInBhY2thZ2UtbWFuYWdlci1jYWNoZVwiOiB0aGlzLndvcmtmbG93UGFja2FnZUNhY2hlLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG11dGFibGUgPSBvcHRpb25zLm11dGFibGUgPz8gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5wYWNrYWdlLnNjb3BlZFBhY2thZ2VzT3B0aW9ucykge1xuICAgICAgaW5zdGFsbC5wdXNoKFxuICAgICAgICAuLi50aGlzLmdldFNjb3BlZFBhY2thZ2VTdGVwcyh0aGlzLnBhY2thZ2UuY29kZUFydGlmYWN0T3B0aW9ucyksXG4gICAgICApO1xuICAgIH1cblxuICAgIGluc3RhbGwucHVzaCh7XG4gICAgICBuYW1lOiBcIkluc3RhbGwgZGVwZW5kZW5jaWVzXCIsXG4gICAgICBydW46IG11dGFibGVcbiAgICAgICAgPyB0aGlzLnBhY2thZ2UuaW5zdGFsbEFuZFVwZGF0ZUxvY2tmaWxlQ29tbWFuZFxuICAgICAgICA6IHRoaXMucGFja2FnZS5pbnN0YWxsQ29tbWFuZCxcbiAgICAgIC4uLihvcHRpb25zLmluc3RhbGxTdGVwQ29uZmlndXJhdGlvbiA/PyB7fSksXG4gICAgfSk7XG5cbiAgICByZXR1cm4gaW5zdGFsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIG5vcm1hbCBkZXBlbmRlbmNpZXMuXG4gICAqXG4gICAqIEBwYXJhbSBkZXBzIE5hbWVzIG1vZHVsZXMgdG8gaW5zdGFsbC4gQnkgZGVmYXVsdCwgdGhlIHRoZSBkZXBlbmRlbmN5IHdpbGxcbiAgICogYmUgaW5zdGFsbGVkIGluIHRoZSBuZXh0IGBwbnBtIHByb2plbmAgcnVuIGFuZCB0aGUgdmVyc2lvbiB3aWxsIGJlIHJlY29yZGVkXG4gICAqIGluIHlvdXIgYHBhY2thZ2UuanNvbmAgZmlsZS4gWW91IGNhbiB1cGdyYWRlIG1hbnVhbGx5IG9yIHVzaW5nIGBwbnBtXG4gICAqIGFkZC91cGRhdGVgLiBJZiB5b3Ugd2lzaCB0byBzcGVjaWZ5IGEgdmVyc2lvbiByYW5nZSB1c2UgdGhpcyBzeW50YXg6XG4gICAqIGBtb2R1bGVAXjdgLlxuICAgKi9cbiAgcHVibGljIGFkZERlcHMoLi4uZGVwczogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gdGhpcy5wYWNrYWdlLmFkZERlcHMoLi4uZGVwcyk7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBkZXZlbG9wbWVudC90ZXN0IGRlcGVuZGVuY2llcy5cbiAgICpcbiAgICogQHBhcmFtIGRlcHMgTmFtZXMgbW9kdWxlcyB0byBpbnN0YWxsLiBCeSBkZWZhdWx0LCB0aGUgdGhlIGRlcGVuZGVuY3kgd2lsbFxuICAgKiBiZSBpbnN0YWxsZWQgaW4gdGhlIG5leHQgYHBucG0gcHJvamVuYCBydW4gYW5kIHRoZSB2ZXJzaW9uIHdpbGwgYmUgcmVjb3JkZWRcbiAgICogaW4geW91ciBgcGFja2FnZS5qc29uYCBmaWxlLiBZb3UgY2FuIHVwZ3JhZGUgbWFudWFsbHkgb3IgdXNpbmcgYHBucG1cbiAgICogYWRkL3VwZGF0ZWAuIElmIHlvdSB3aXNoIHRvIHNwZWNpZnkgYSB2ZXJzaW9uIHJhbmdlIHVzZSB0aGlzIHN5bnRheDpcbiAgICogYG1vZHVsZUBeN2AuXG4gICAqL1xuICBwdWJsaWMgYWRkRGV2RGVwcyguLi5kZXBzOiBzdHJpbmdbXSkge1xuICAgIHJldHVybiB0aGlzLnBhY2thZ2UuYWRkRGV2RGVwcyguLi5kZXBzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIHBlZXIgZGVwZW5kZW5jaWVzLlxuICAgKlxuICAgKiBXaGVuIGFkZGluZyBwZWVyIGRlcGVuZGVuY2llcywgYSBkZXZEZXBlbmRlbmN5IHdpbGwgYWxzbyBiZSBhZGRlZCBvbiB0aGVcbiAgICogcGlubmVkIHZlcnNpb24gb2YgdGhlIGRlY2xhcmVkIHBlZXIuIFRoaXMgd2lsbCBlbnN1cmUgdGhhdCB5b3UgYXJlIHRlc3RpbmdcbiAgICogeW91ciBjb2RlIGFnYWluc3QgdGhlIG1pbmltdW0gdmVyc2lvbiByZXF1aXJlZCBmcm9tIHlvdXIgY29uc3VtZXJzLlxuICAgKlxuICAgKiBAcGFyYW0gZGVwcyBOYW1lcyBtb2R1bGVzIHRvIGluc3RhbGwuIEJ5IGRlZmF1bHQsIHRoZSB0aGUgZGVwZW5kZW5jeSB3aWxsXG4gICAqIGJlIGluc3RhbGxlZCBpbiB0aGUgbmV4dCBgcG5wbSBwcm9qZW5gIHJ1biBhbmQgdGhlIHZlcnNpb24gd2lsbCBiZSByZWNvcmRlZFxuICAgKiBpbiB5b3VyIGBwYWNrYWdlLmpzb25gIGZpbGUuIFlvdSBjYW4gdXBncmFkZSBtYW51YWxseSBvciB1c2luZyBgcG5wbVxuICAgKiBhZGQvdXBkYXRlYC4gSWYgeW91IHdpc2ggdG8gc3BlY2lmeSBhIHZlcnNpb24gcmFuZ2UgdXNlIHRoaXMgc3ludGF4OlxuICAgKiBgbW9kdWxlQF43YC5cbiAgICovXG4gIHB1YmxpYyBhZGRQZWVyRGVwcyguLi5kZXBzOiBzdHJpbmdbXSkge1xuICAgIHJldHVybiB0aGlzLnBhY2thZ2UuYWRkUGVlckRlcHMoLi4uZGVwcyk7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBidW5kbGVkIGRlcGVuZGVuY2llcy5cbiAgICpcbiAgICogQnVuZGxlZCBkZXBlbmRlbmNpZXMgd2lsbCBiZSBhZGRlZCBhcyBub3JtYWwgZGVwZW5kZW5jaWVzIGFzIHdlbGwgYXMgdG8gdGhlXG4gICAqIGBidW5kbGVkRGVwZW5kZW5jaWVzYCBzZWN0aW9uIG9mIHlvdXIgYHBhY2thZ2UuanNvbmAuXG4gICAqXG4gICAqIEBwYXJhbSBkZXBzIE5hbWVzIG1vZHVsZXMgdG8gaW5zdGFsbC4gQnkgZGVmYXVsdCwgdGhlIHRoZSBkZXBlbmRlbmN5IHdpbGxcbiAgICogYmUgaW5zdGFsbGVkIGluIHRoZSBuZXh0IGBwbnBtIHByb2plbmAgcnVuIGFuZCB0aGUgdmVyc2lvbiB3aWxsIGJlIHJlY29yZGVkXG4gICAqIGluIHlvdXIgYHBhY2thZ2UuanNvbmAgZmlsZS4gWW91IGNhbiB1cGdyYWRlIG1hbnVhbGx5IG9yIHVzaW5nIGBwbnBtXG4gICAqIGFkZC91cGRhdGVgLiBJZiB5b3Ugd2lzaCB0byBzcGVjaWZ5IGEgdmVyc2lvbiByYW5nZSB1c2UgdGhpcyBzeW50YXg6XG4gICAqIGBtb2R1bGVAXjdgLlxuICAgKi9cbiAgcHVibGljIGFkZEJ1bmRsZWREZXBzKC4uLmRlcHM6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIHRoaXMucGFja2FnZS5hZGRCdW5kbGVkRGVwcyguLi5kZXBzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIHBhdHRlcm5zIHRvIGJlIGlnbm9yZWQgYnkgbnBtLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0dGVybiBUaGUgcGF0dGVybiB0byBpZ25vcmUuXG4gICAqXG4gICAqIEByZW1hcmtzXG4gICAqIElmIHlvdSBhcmUgaGF2aW5nIHRyb3VibGUgZ2V0dGluZyBhbiBpZ25vcmUgdG8gcG9wdWxhdGUsIHRyeSB1c2luZyB5b3VyIGNvbnN0cnVjdCBvciBjb21wb25lbnQncyBwcmVTeW50aGVzaXplIG1ldGhvZCB0byBwcm9wZXJseSBkZWxheSBjYWxsaW5nIHRoaXMgbWV0aG9kLlxuICAgKi9cbiAgcHVibGljIG92ZXJyaWRlIGFkZFBhY2thZ2VJZ25vcmUocGF0dGVybjogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5ucG1pZ25vcmU/LmFkZFBhdHRlcm5zKHBhdHRlcm4pO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRMaWNlbnNlKG9wdGlvbnM6IE5vZGVQcm9qZWN0T3B0aW9ucykge1xuICAgIGlmICh0aGlzLnBhY2thZ2UubGljZW5zZSkge1xuICAgICAgbmV3IExpY2Vuc2UodGhpcywge1xuICAgICAgICBzcGR4OiB0aGlzLnBhY2thZ2UubGljZW5zZSxcbiAgICAgICAgY29weXJpZ2h0T3duZXI6IG9wdGlvbnMuY29weXJpZ2h0T3duZXIgPz8gb3B0aW9ucy5hdXRob3JOYW1lLFxuICAgICAgICBjb3B5cmlnaHRQZXJpb2Q6IG9wdGlvbnMuY29weXJpZ2h0UGVyaW9kLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGREZWZhdWx0R2l0SWdub3JlKCkge1xuICAgIHRoaXMuZ2l0aWdub3JlLmV4Y2x1ZGUoXG4gICAgICBcIiMgTG9nc1wiLFxuICAgICAgXCJsb2dzXCIsXG4gICAgICBcIioubG9nXCIsXG4gICAgICBcIm5wbS1kZWJ1Zy5sb2cqXCIsXG4gICAgICBcInlhcm4tZGVidWcubG9nKlwiLFxuICAgICAgXCJ5YXJuLWVycm9yLmxvZypcIixcbiAgICAgIFwibGVybmEtZGVidWcubG9nKlwiLFxuXG4gICAgICBcIiMgRGlhZ25vc3RpYyByZXBvcnRzIChodHRwczovL25vZGVqcy5vcmcvYXBpL3JlcG9ydC5odG1sKVwiLFxuICAgICAgXCJyZXBvcnQuWzAtOV0qLlswLTldKi5bMC05XSouWzAtOV0qLmpzb25cIixcblxuICAgICAgXCIjIFJ1bnRpbWUgZGF0YVwiLFxuICAgICAgXCJwaWRzXCIsXG4gICAgICBcIioucGlkXCIsXG4gICAgICBcIiouc2VlZFwiLFxuICAgICAgXCIqLnBpZC5sb2NrXCIsXG5cbiAgICAgIFwiIyBEaXJlY3RvcnkgZm9yIGluc3RydW1lbnRlZCBsaWJzIGdlbmVyYXRlZCBieSBqc2NvdmVyYWdlL0pTQ292ZXJcIixcbiAgICAgIFwibGliLWNvdlwiLFxuXG4gICAgICBcIiMgQ292ZXJhZ2UgZGlyZWN0b3J5IHVzZWQgYnkgdG9vbHMgbGlrZSBpc3RhbmJ1bFwiLFxuICAgICAgXCJjb3ZlcmFnZVwiLFxuICAgICAgXCIqLmxjb3ZcIixcblxuICAgICAgXCIjIG55YyB0ZXN0IGNvdmVyYWdlXCIsXG4gICAgICBcIi5ueWNfb3V0cHV0XCIsXG5cbiAgICAgIFwiIyBDb21waWxlZCBiaW5hcnkgYWRkb25zIChodHRwczovL25vZGVqcy5vcmcvYXBpL2FkZG9ucy5odG1sKVwiLFxuICAgICAgXCJidWlsZC9SZWxlYXNlXCIsXG5cbiAgICAgIFwiIyBEZXBlbmRlbmN5IGRpcmVjdG9yaWVzXCIsXG4gICAgICBcIm5vZGVfbW9kdWxlcy9cIixcbiAgICAgIFwianNwbV9wYWNrYWdlcy9cIixcblxuICAgICAgXCIjIFR5cGVTY3JpcHQgY2FjaGVcIixcbiAgICAgIFwiKi50c2J1aWxkaW5mb1wiLFxuXG4gICAgICBcIiMgT3B0aW9uYWwgZXNsaW50IGNhY2hlXCIsXG4gICAgICBcIi5lc2xpbnRjYWNoZVwiLFxuXG4gICAgICBcIiMgT3V0cHV0IG9mICducG0gcGFjaydcIixcbiAgICAgIFwiKi50Z3pcIixcblxuICAgICAgXCIjIFlhcm4gSW50ZWdyaXR5IGZpbGVcIixcbiAgICAgIFwiLnlhcm4taW50ZWdyaXR5XCIsXG5cbiAgICAgIFwiIyBwYXJjZWwtYnVuZGxlciBjYWNoZSAoaHR0cHM6Ly9wYXJjZWxqcy5vcmcvKVwiLFxuICAgICAgXCIuY2FjaGVcIixcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHNoZWxsIGNvbW1hbmQgdG8gZXhlY3V0ZSBpbiBvcmRlciB0byBydW4gYSB0YXNrLiBUaGlzIHdpbGxcbiAgICogdHlwaWNhbGx5IGJlIGBwbnBtIHByb2plbiBUQVNLYC5cbiAgICpcbiAgICogQHBhcmFtIHRhc2sgVGhlIHRhc2sgZm9yIHdoaWNoIHRoZSBjb21tYW5kIGlzIHJlcXVpcmVkXG4gICAqL1xuICBwdWJsaWMgcnVuVGFza0NvbW1hbmQodGFzazogVGFzaykge1xuICAgIHJldHVybiBgJHt0aGlzLnByb2plbkNvbW1hbmR9ICR7dGFzay5uYW1lfWA7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGpvYiBJRCBvZiB0aGUgYnVpbGQgd29ya2Zsb3cuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGJ1aWxkV29ya2Zsb3dKb2JJZCgpIHtcbiAgICByZXR1cm4gdGhpcy5idWlsZFdvcmtmbG93Py5idWlsZEpvYklkc1swXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgc2VjdXJpdHkgYXVkaXQgdGFzay5cbiAgICovXG4gIHByaXZhdGUgYWRkQXVkaXRUYXNrKG9wdGlvbnM6IE5vZGVQcm9qZWN0T3B0aW9ucyk6IFRhc2sge1xuICAgIGNvbnN0IGF1ZGl0TGV2ZWwgPSBvcHRpb25zLmF1ZGl0RGVwc09wdGlvbnM/LmxldmVsID8/IFwiaGlnaFwiO1xuICAgIGNvbnN0IGF1ZGl0UHJvZE9ubHkgPSBvcHRpb25zLmF1ZGl0RGVwc09wdGlvbnM/LnByb2RPbmx5ID8/IGZhbHNlO1xuXG4gICAgLy8gQ3JlYXRlIGF1ZGl0IHRhc2tcbiAgICBjb25zdCBhdWRpdFRhc2sgPSB0aGlzLnRhc2tzLmFkZFRhc2soXCJhdWRpdFwiLCB7XG4gICAgICBkZXNjcmlwdGlvbjogXCJSdW4gc2VjdXJpdHkgYXVkaXRcIixcbiAgICB9KTtcblxuICAgIC8vIEFkZCBwYWNrYWdlIG1hbmFnZXIgc3BlY2lmaWMgYXVkaXQgY29tbWFuZFxuICAgIGNvbnN0IGF1ZGl0Q29tbWFuZCA9IHRoaXMuZ2V0QXVkaXRDb21tYW5kKGF1ZGl0TGV2ZWwsIGF1ZGl0UHJvZE9ubHkpO1xuICAgIGF1ZGl0VGFzay5leGVjKGF1ZGl0Q29tbWFuZCk7XG5cbiAgICByZXR1cm4gYXVkaXRUYXNrO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGFwcHJvcHJpYXRlIGF1ZGl0IGNvbW1hbmQgZm9yIHRoZSBwYWNrYWdlIG1hbmFnZXIuXG4gICAqL1xuICBwcml2YXRlIGdldEF1ZGl0Q29tbWFuZChsZXZlbDogc3RyaW5nLCBwcm9kT25seTogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgY29uc3QgbGV2ZWxGbGFnID0gdGhpcy5nZXRBdWRpdExldmVsRmxhZyhsZXZlbCk7XG4gICAgY29uc3QgcHJvZEZsYWcgPSBwcm9kT25seSA/IHRoaXMuZ2V0QXVkaXRQcm9kRmxhZygpIDogXCJcIjtcblxuICAgIHN3aXRjaCAodGhpcy5wYWNrYWdlLnBhY2thZ2VNYW5hZ2VyKSB7XG4gICAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5OUE06XG4gICAgICAgIHJldHVybiBgbnBtIGF1ZGl0JHtsZXZlbEZsYWd9JHtwcm9kRmxhZ31gO1xuICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuWUFSTjpcbiAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLllBUk5fQ0xBU1NJQzpcbiAgICAgICAgLy8gVXNlIE5vZGUuanMgdG8gY2FsbCB5YXJuIGFuZCBoYW5kbGUgZXhpdCBjb2RlIGNyb3NzLXBsYXRmb3JtXG4gICAgICAgIGNvbnN0IHRocmVzaG9sZCA9IHRoaXMuZ2V0WWFybkNsYXNzaWNUaHJlc2hvbGQobGV2ZWwpO1xuICAgICAgICByZXR1cm4gYG5vZGUgLWUgXCJjb25zdCB7IGV4ZWNTeW5jIH0gPSByZXF1aXJlKCdjaGlsZF9wcm9jZXNzJyk7IHRyeSB7IGV4ZWNTeW5jKCd5YXJuIGF1ZGl0JHtsZXZlbEZsYWd9JHtwcm9kRmxhZ30nLCB7c3RkaW86ICdpbmhlcml0J30pOyB9IGNhdGNoKGUpIHsgcHJvY2Vzcy5leGl0KGUuc3RhdHVzIDwgJHt0aHJlc2hvbGR9ID8gMCA6IDEpOyB9XCJgO1xuICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuWUFSTjI6XG4gICAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5ZQVJOX0JFUlJZOlxuICAgICAgICByZXR1cm4gYHlhcm4gbnBtIGF1ZGl0IC0tcmVjdXJzaXZlJHtsZXZlbEZsYWd9JHtwcm9kRmxhZ31gO1xuICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuUE5QTTpcbiAgICAgICAgcmV0dXJuIGBwbnBtIGF1ZGl0JHtsZXZlbEZsYWd9JHtwcm9kRmxhZ31gO1xuICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuQlVOOlxuICAgICAgICByZXR1cm4gYGJ1biBhdWRpdCR7bGV2ZWxGbGFnfSR7cHJvZEZsYWd9YDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICBgVW5zdXBwb3J0ZWQgcGFja2FnZSBtYW5hZ2VyOiAke3RoaXMucGFja2FnZS5wYWNrYWdlTWFuYWdlcn1gLFxuICAgICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSB0aHJlc2hvbGQgdmFsdWUgZm9yIHlhcm4gY2xhc3NpYyBiYXNlZCBvbiB2dWxuZXJhYmlsaXR5IGxldmVsLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRZYXJuQ2xhc3NpY1RocmVzaG9sZChsZXZlbDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICBzd2l0Y2ggKGxldmVsKSB7XG4gICAgICBjYXNlIFwibG93XCI6XG4gICAgICAgIHJldHVybiAyOyAvLyBQYXNzIGZvciBleGl0IGNvZGUgPCAyLCBmYWlsIGZvciA+PSAyIChMT1cgYW5kIGFib3ZlKVxuICAgICAgY2FzZSBcIm1vZGVyYXRlXCI6XG4gICAgICAgIHJldHVybiA0OyAvLyBQYXNzIGZvciBleGl0IGNvZGUgPCA0LCBmYWlsIGZvciA+PSA0IChNT0RFUkFURSBhbmQgYWJvdmUpXG4gICAgICBjYXNlIFwiaGlnaFwiOlxuICAgICAgICByZXR1cm4gODsgLy8gUGFzcyBmb3IgZXhpdCBjb2RlIDwgOCwgZmFpbCBmb3IgPj0gOCAoSElHSCBhbmQgYWJvdmUpXG4gICAgICBjYXNlIFwiY3JpdGljYWxcIjpcbiAgICAgICAgcmV0dXJuIDE2OyAvLyBQYXNzIGZvciBleGl0IGNvZGUgPCAxNiwgZmFpbCBmb3IgPj0gMTYgKENSSVRJQ0FMKVxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIDI7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIGF1ZGl0IGxldmVsIGZsYWcgZm9yIHRoZSBwYWNrYWdlIG1hbmFnZXIuXG4gICAqL1xuICBwcml2YXRlIGdldEF1ZGl0TGV2ZWxGbGFnKGxldmVsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodGhpcy5wYWNrYWdlLnBhY2thZ2VNYW5hZ2VyKSB7XG4gICAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5OUE06XG4gICAgICAgIHJldHVybiBgIC0tYXVkaXQtbGV2ZWw9JHtsZXZlbH1gO1xuICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuWUFSTjpcbiAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLllBUk5fQ0xBU1NJQzpcbiAgICAgICAgcmV0dXJuIGAgLS1sZXZlbCAke2xldmVsfWA7XG4gICAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5ZQVJOMjpcbiAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLllBUk5fQkVSUlk6XG4gICAgICAgIHJldHVybiBgIC0tc2V2ZXJpdHkgJHtsZXZlbH1gO1xuICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuUE5QTTpcbiAgICAgICAgcmV0dXJuIGAgLS1hdWRpdC1sZXZlbCAke2xldmVsfWA7XG4gICAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5CVU46XG4gICAgICAgIHJldHVybiBgIC0tYXVkaXQtbGV2ZWwgJHtsZXZlbH1gO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgdGhlIHByb2R1Y3Rpb24tb25seSBmbGFnIGZvciB0aGUgcGFja2FnZSBtYW5hZ2VyLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRBdWRpdFByb2RGbGFnKCk6IHN0cmluZyB7XG4gICAgc3dpdGNoICh0aGlzLnBhY2thZ2UucGFja2FnZU1hbmFnZXIpIHtcbiAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLk5QTTpcbiAgICAgICAgcmV0dXJuIFwiIC0tb21pdD1kZXZcIjtcbiAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLllBUk46XG4gICAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5ZQVJOX0NMQVNTSUM6XG4gICAgICAgIHJldHVybiBcIiAtLWdyb3VwcyBkZXBlbmRlbmNpZXNcIjtcbiAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLllBUk4yOlxuICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuWUFSTl9CRVJSWTpcbiAgICAgICAgcmV0dXJuIFwiIC0tZW52aXJvbm1lbnQgcHJvZHVjdGlvblwiO1xuICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuUE5QTTpcbiAgICAgICAgcmV0dXJuIFwiIC0tcHJvZFwiO1xuICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuQlVOOlxuICAgICAgICByZXR1cm4gXCIgLS1wcm9kdWN0aW9uXCI7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gXCJcIjtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBgcmVuZGVyV29ya2Zsb3dTZXR1cCgpYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSZW5kZXJXb3JrZmxvd1NldHVwT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBDb25maWd1cmUgdGhlIGluc3RhbGwgc3RlcCBpbiB0aGUgd29ya2Zsb3cgc2V0dXAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYHsgbmFtZTogXCJJbnN0YWxsIGRlcGVuZGVuY2llc1wiIH1gXG4gICAqXG4gICAqIEBleGFtcGxlIC0geyB3b3JraW5nRGlyZWN0b3J5OiBcInJvb3Rwcm9qZWN0LWRpclwiIH0gZm9yIHN1YnByb2plY3RzIGluc3RhbGxpbmcgZnJvbSByb290LlxuICAgKiBAZXhhbXBsZSAtIHsgZW52OiB7IE5QTV9UT0tFTjogXCJ0b2tlblwiIH19IGZvciBpbnN0YWxsaW5nIGZyb20gcHJpdmF0ZSBucG0gcmVnaXN0cnkuXG4gICAqL1xuICByZWFkb25seSBpbnN0YWxsU3RlcENvbmZpZ3VyYXRpb24/OiBKb2JTdGVwQ29uZmlndXJhdGlvbjtcbiAgLyoqXG4gICAqIFNob3VsZCB0aGUgcGFja2FnZSBsb2NrZmlsZSBiZSB1cGRhdGVkP1xuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgbXV0YWJsZT86IGJvb2xlYW47XG59XG4iXX0=
867
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1wcm9qZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2phdmFzY3JpcHQvbm9kZS1wcm9qZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwrQkFBdUM7QUFDdkMsK0NBQWlDO0FBRWpDLHVDQUFvQztBQUVwQyxpQ0FBOEI7QUFFOUIsdURBQW1EO0FBRW5ELGlEQUl3QjtBQUV4Qix5Q0FBc0M7QUFFdEMsb0NBQXlDO0FBQ3pDLG9EQUFzRTtBQUN0RSxzQ0FBdUM7QUFDdkMsa0RBQWlEO0FBTWpELHNDQUE2RDtBQUU3RCx5Q0FBc0M7QUFDdEMsaUNBS2dCO0FBQ2hCLG1EQUFrRTtBQUNsRSxpREFBNkU7QUFNN0UsK0RBQTBEO0FBRTFELGdEQUE0QztBQUs1Qyw4Q0FBeUU7QUFDekUsd0NBQXFDO0FBQ3JDLG9EQUFnRDtBQUVoRCx3Q0FLb0I7QUFFcEIsc0RBQTBEO0FBRTFELGtDQUE4RTtBQUM5RSx1Q0FBK0Q7QUFFL0QsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFDO0FBZ1cvQjs7R0FFRztBQUNILElBQVksV0FVWDtBQVZELFdBQVksV0FBVztJQUNyQjs7T0FFRztJQUNILDZEQUFZLENBQUE7SUFFWjs7T0FFRztJQUNILCtDQUFLLENBQUE7QUFDUCxDQUFDLEVBVlcsV0FBVywyQkFBWCxXQUFXLFFBVXRCO0FBRUQ7Ozs7R0FJRztBQUNILE1BQWEsV0FBWSxTQUFRLHNCQUFhOztJQUM1Qzs7T0FFRztJQUNhLE9BQU8sQ0FBYztJQUVyQzs7T0FFRztJQUNhLFNBQVMsQ0FBYztJQUV2Qzs7T0FFRztJQUNILElBQVcsS0FBSztRQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLHNCQUFTLENBQUMsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENB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QUFrQixLQUFLLEVBQUUsQ0FBQztZQUNuQyxLQUFLLGlDQUFrQixDQUFDLEdBQUc7Z0JBQ3pCLE9BQU8sa0JBQWtCLEtBQUssRUFBRSxDQUFDO1lBQ25DO2dCQUNFLE9BQU8sRUFBRSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNLLGdCQUFnQjtRQUN0QixRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDcEMsS0FBSyxpQ0FBa0IsQ0FBQyxHQUFHO2dCQUN6QixPQUFPLGFBQWEsQ0FBQztZQUN2QixLQUFLLGlDQUFrQixDQUFDLElBQUksQ0FBQztZQUM3QixLQUFLLGlDQUFrQixDQUFDLFlBQVk7Z0JBQ2xDLE9BQU8sd0JBQXdCLENBQUM7WUFDbEMsS0FBSyxpQ0FBa0IsQ0FBQyxLQUFLLENBQUM7WUFDOUIsS0FBSyxpQ0FBa0IsQ0FBQyxVQUFVO2dCQUNoQyxPQUFPLDJCQUEyQixDQUFDO1lBQ3JDLEtBQUssaUNBQWtCLENBQUMsSUFBSTtnQkFDMUIsT0FBTyxTQUFTLENBQUM7WUFDbkIsS0FBSyxpQ0FBa0IsQ0FBQyxHQUFHO2dCQUN6QixPQUFPLGVBQWUsQ0FBQztZQUN6QjtnQkFDRSxPQUFPLEVBQUUsQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDOztBQWovQkgsa0NBay9CQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlbGF0aXZlLCBwb3NpeCB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgKiBhcyBzZW12ZXIgZnJvbSBcInNlbXZlclwiO1xuaW1wb3J0IHR5cGUgeyBCdW5kbGVyT3B0aW9ucyB9IGZyb20gXCIuL2J1bmRsZXJcIjtcbmltcG9ydCB7IEJ1bmRsZXIgfSBmcm9tIFwiLi9idW5kbGVyXCI7XG5pbXBvcnQgdHlwZSB7IEplc3RPcHRpb25zIH0gZnJvbSBcIi4vamVzdFwiO1xuaW1wb3J0IHsgSmVzdCB9IGZyb20gXCIuL2plc3RcIjtcbmltcG9ydCB0eXBlIHsgTGljZW5zZUNoZWNrZXJPcHRpb25zIH0gZnJvbSBcIi4vbGljZW5zZS1jaGVja2VyXCI7XG5pbXBvcnQgeyBMaWNlbnNlQ2hlY2tlciB9IGZyb20gXCIuL2xpY2Vuc2UtY2hlY2tlclwiO1xuaW1wb3J0IHR5cGUgeyBDb2RlQXJ0aWZhY3RPcHRpb25zLCBOb2RlUGFja2FnZU9wdGlvbnMgfSBmcm9tIFwiLi9ub2RlLXBhY2thZ2VcIjtcbmltcG9ydCB7XG4gIENvZGVBcnRpZmFjdEF1dGhQcm92aWRlciBhcyBOb2RlUGFja2FnZUNvZGVBcnRpZmFjdEF1dGhQcm92aWRlcixcbiAgTm9kZVBhY2thZ2UsXG4gIE5vZGVQYWNrYWdlTWFuYWdlcixcbn0gZnJvbSBcIi4vbm9kZS1wYWNrYWdlXCI7XG5pbXBvcnQgdHlwZSB7IFByb2plbnJjT3B0aW9ucyB9IGZyb20gXCIuL3Byb2plbnJjXCI7XG5pbXBvcnQgeyBQcm9qZW5yYyB9IGZyb20gXCIuL3Byb2plbnJjXCI7XG5pbXBvcnQgdHlwZSB7IEJ1aWxkV29ya2Zsb3dDb21tb25PcHRpb25zIH0gZnJvbSBcIi4uL2J1aWxkXCI7XG5pbXBvcnQgeyBCdWlsZFdvcmtmbG93IH0gZnJvbSBcIi4uL2J1aWxkXCI7XG5pbXBvcnQgeyBERUZBVUxUX0FSVElGQUNUU19ESVJFQ1RPUlkgfSBmcm9tIFwiLi4vYnVpbGQvcHJpdmF0ZS9jb25zdHNcIjtcbmltcG9ydCB7IFBST0pFTl9ESVIgfSBmcm9tIFwiLi4vY29tbW9uXCI7XG5pbXBvcnQgeyBEZXBlbmRlbmN5VHlwZSB9IGZyb20gXCIuLi9kZXBlbmRlbmNpZXNcIjtcbmltcG9ydCB0eXBlIHtcbiAgRGVwZW5kYWJvdE9wdGlvbnMsXG4gIEdpdEh1YlByb2plY3RPcHRpb25zLFxuICBHaXRJZGVudGl0eSxcbn0gZnJvbSBcIi4uL2dpdGh1YlwiO1xuaW1wb3J0IHsgQXV0b01lcmdlLCBHaXRIdWIsIEdpdEh1YlByb2plY3QgfSBmcm9tIFwiLi4vZ2l0aHViXCI7XG5pbXBvcnQgdHlwZSB7IEJpb21lT3B0aW9ucyB9IGZyb20gXCIuL2Jpb21lL2Jpb21lXCI7XG5pbXBvcnQgeyBCaW9tZSB9IGZyb20gXCIuL2Jpb21lL2Jpb21lXCI7XG5pbXBvcnQge1xuICBleGVjQ29tbWFuZCxcbiAgZXhlY3V0ZUNvbW1hbmRQcmlvckluc3RhbGxhdGlvbixcbiAgaXNZYXJuQmVycnksXG4gIGlzWWFybkNsYXNzaWMsXG59IGZyb20gXCIuL3V0aWxcIjtcbmltcG9ydCB7IERFRkFVTFRfR0lUSFVCX0FDVElPTlNfVVNFUiB9IGZyb20gXCIuLi9naXRodWIvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBlbnN1cmVOb3RIaWRkZW5QYXRoLCBzZWNyZXRUb1N0cmluZyB9IGZyb20gXCIuLi9naXRodWIvcHJpdmF0ZS91dGlsXCI7XG5pbXBvcnQgdHlwZSB7XG4gIEpvYlBlcm1pc3Npb25zLFxuICBKb2JTdGVwLFxuICBKb2JTdGVwQ29uZmlndXJhdGlvbixcbn0gZnJvbSBcIi4uL2dpdGh1Yi93b3JrZmxvd3MtbW9kZWxcIjtcbmltcG9ydCB7IEpvYlBlcm1pc3Npb24gfSBmcm9tIFwiLi4vZ2l0aHViL3dvcmtmbG93cy1tb2RlbFwiO1xuaW1wb3J0IHR5cGUgeyBJZ25vcmVGaWxlT3B0aW9ucyB9IGZyb20gXCIuLi9pZ25vcmUtZmlsZVwiO1xuaW1wb3J0IHsgSWdub3JlRmlsZSB9IGZyb20gXCIuLi9pZ25vcmUtZmlsZVwiO1xuaW1wb3J0IHR5cGUge1xuICBQcmV0dGllck9wdGlvbnMsXG4gIFVwZ3JhZGVEZXBlbmRlbmNpZXNPcHRpb25zLFxufSBmcm9tIFwiLi4vamF2YXNjcmlwdFwiO1xuaW1wb3J0IHsgTnBtQ29uZmlnLCBQcmV0dGllciwgVXBncmFkZURlcGVuZGVuY2llcyB9IGZyb20gXCIuLi9qYXZhc2NyaXB0XCI7XG5pbXBvcnQgeyBMaWNlbnNlIH0gZnJvbSBcIi4uL2xpY2Vuc2VcIjtcbmltcG9ydCB7IFByb2plbnJjSnNvbiB9IGZyb20gXCIuLi9wcm9qZW5yYy1qc29uXCI7XG5pbXBvcnQgdHlwZSB7IE5wbVB1Ymxpc2hPcHRpb25zLCBSZWxlYXNlUHJvamVjdE9wdGlvbnMgfSBmcm9tIFwiLi4vcmVsZWFzZVwiO1xuaW1wb3J0IHtcbiAgQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyIGFzIFJlbGVhc2VDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXIsXG4gIENvZGVBcnRpZmFjdEF1dGhQcm92aWRlcixcbiAgaXNBd3NDb2RlQXJ0aWZhY3RSZWdpc3RyeSxcbiAgUmVsZWFzZSxcbn0gZnJvbSBcIi4uL3JlbGVhc2VcIjtcbmltcG9ydCB0eXBlIHsgR3JvdXBSdW5uZXJPcHRpb25zIH0gZnJvbSBcIi4uL3J1bm5lci1vcHRpb25zXCI7XG5pbXBvcnQgeyBmaWx0ZXJlZFJ1bnNPbk9wdGlvbnMgfSBmcm9tIFwiLi4vcnVubmVyLW9wdGlvbnNcIjtcbmltcG9ydCB0eXBlIHsgVGFzayB9IGZyb20gXCIuLi90YXNrXCI7XG5pbXBvcnQgeyBkZWVwTWVyZ2UsIG11bHRpcGxlU2VsZWN0ZWQsIG5vcm1hbGl6ZVBlcnNpc3RlZFBhdGggfSBmcm9tIFwiLi4vdXRpbFwiO1xuaW1wb3J0IHsgZW5zdXJlUmVsYXRpdmVQYXRoU3RhcnRzV2l0aERvdCB9IGZyb20gXCIuLi91dGlsL3BhdGhcIjtcblxuY29uc3QgUFJPSkVOX1NDUklQVCA9IFwicHJvamVuXCI7XG5cbi8qKlxuICogT3B0aW9ucyBmb3Igc2VjdXJpdHkgYXVkaXQgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBdWRpdE9wdGlvbnMge1xuICAvKipcbiAgICogTWluaW11bSB2dWxuZXJhYmlsaXR5IGxldmVsIHRvIGNoZWNrIGZvciBkdXJpbmcgYXVkaXQuXG4gICAqIEBkZWZhdWx0IFwiaGlnaFwiXG4gICAqL1xuICByZWFkb25seSBsZXZlbD86IFwibG93XCIgfCBcIm1vZGVyYXRlXCIgfCBcImhpZ2hcIiB8IFwiY3JpdGljYWxcIjtcblxuICAvKipcbiAgICogT25seSBhdWRpdCBwcm9kdWN0aW9uIGRlcGVuZGVuY2llcy5cbiAgICpcbiAgICogV2hlbiBmYWxzZSwgYm90aCBwcm9kdWN0aW9uIGFuZCBkZXZlbG9wbWVudCBkZXBlbmRlbmNpZXMgYXJlIGF1ZGl0ZWQuXG4gICAqIFRoaXMgaXMgcmVjb21tZW5kZWQgYXMgYnVpbGQgZGVwZW5kZW5jaWVzIGNhbiBhbHNvIGNvbnRhaW4gc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvZE9ubHk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGVuIHRvIHJ1biB0aGUgYXVkaXQgdGFzay5cbiAgICpcbiAgICogLSBcImJ1aWxkXCI6IFJ1biBkdXJpbmcgZXZlcnkgYnVpbGQgKGRlZmF1bHQpXG4gICAqIC0gXCJyZWxlYXNlXCI6IE9ubHkgcnVuIGR1cmluZyByZWxlYXNlIHdvcmtmbG93XG4gICAqIC0gXCJtYW51YWxcIjogQ3JlYXRlIHRoZSB0YXNrIGJ1dCBkb24ndCBydW4gaXQgYXV0b21hdGljYWxseVxuICAgKlxuICAgKiBAZGVmYXVsdCBcImJ1aWxkXCJcbiAgICovXG4gIHJlYWRvbmx5IHJ1bk9uPzogXCJidWlsZFwiIHwgXCJyZWxlYXNlXCIgfCBcIm1hbnVhbFwiO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5vZGVQcm9qZWN0T3B0aW9uc1xuICBleHRlbmRzIEdpdEh1YlByb2plY3RPcHRpb25zLCBOb2RlUGFja2FnZU9wdGlvbnMsIFJlbGVhc2VQcm9qZWN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBMaWNlbnNlIGNvcHlyaWdodCBvd25lci5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0cyB0byB0aGUgdmFsdWUgb2YgYXV0aG9yTmFtZSBvciBcIlwiIGlmIGBhdXRob3JOYW1lYCBpcyB1bmRlZmluZWQuXG4gICAqL1xuICByZWFkb25seSBjb3B5cmlnaHRPd25lcj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGNvcHlyaWdodCB5ZWFycyB0byBwdXQgaW4gdGhlIExJQ0VOU0UgZmlsZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBjdXJyZW50IHllYXJcbiAgICovXG4gIHJlYWRvbmx5IGNvcHlyaWdodFBlcmlvZD86IHN0cmluZztcblxuICAvKipcbiAgICogVmVyc2lvbiBvZiBwcm9qZW4gdG8gaW5zdGFsbC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBEZWZhdWx0cyB0byB0aGUgbGF0ZXN0IHZlcnNpb24uXG4gICAqL1xuICByZWFkb25seSBwcm9qZW5WZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgb2YgXCJwcm9qZW5cIiBzaG91bGQgYmUgaW5zdGFsbGVkIGFzIGEgZGV2RGVwZW5kZW5jeS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0cnVlIGlmIG5vdCBhIHN1YnByb2plY3RcbiAgICovXG4gIHJlYWRvbmx5IHByb2plbkRldkRlcGVuZGVuY3k/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEZWZpbmUgYSBHaXRIdWIgd29ya2Zsb3cgZm9yIGJ1aWxkaW5nIFBScy5cbiAgICogQGRlZmF1bHQgLSB0cnVlIGlmIG5vdCBhIHN1YnByb2plY3RcbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkV29ya2Zsb3c/OiBib29sZWFuO1xuICAvKipcbiAgICogT3B0aW9ucyBmb3IgUFIgYnVpbGQgd29ya2Zsb3cuXG4gICAqL1xuICByZWFkb25seSBidWlsZFdvcmtmbG93T3B0aW9ucz86IEJ1aWxkV29ya2Zsb3dPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBEZWZpbmUgYSBHaXRIdWIgd29ya2Zsb3cgc3RlcCBmb3Igc2VuZGluZyBjb2RlIGNvdmVyYWdlIG1ldHJpY3MgdG8gaHR0cHM6Ly9jb2RlY292LmlvL1xuICAgKiBVc2VzIGNvZGVjb3YvY29kZWNvdi1hY3Rpb25AdjVcbiAgICogQnkgZGVmYXVsdCwgT0lEQyBhdXRoIGlzIHVzZWQuIEFsdGVybmF0aXZlbHkgYSB0b2tlbiBjYW4gYmUgcHJvdmlkZWQgdmlhIGBjb2RlQ292VG9rZW5TZWNyZXRgLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgY29kZUNvdj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERlZmluZSB0aGUgc2VjcmV0IG5hbWUgZm9yIGEgc3BlY2lmaWVkIGh0dHBzOi8vY29kZWNvdi5pby8gdG9rZW5cblxuICAgKiBAZGVmYXVsdCAtIE9JREMgYXV0aCBpcyB1c2VkXG4gICAqL1xuICByZWFkb25seSBjb2RlQ292VG9rZW5TZWNyZXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFkZCByZWxlYXNlIG1hbmFnZW1lbnQgdG8gdGhpcyBwcm9qZWN0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRydWUgKGZhbHNlIGZvciBzdWJwcm9qZWN0cylcbiAgICovXG4gIHJlYWRvbmx5IHJlbGVhc2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgbWFpbiByZWxlYXNlIGJyYW5jaC5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJtYWluXCJcbiAgICogQGZlYXR1cmVkXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0UmVsZWFzZUJyYW5jaD86IHN0cmluZztcblxuICAvKipcbiAgICogV29ya2Zsb3cgc3RlcHMgdG8gdXNlIGluIG9yZGVyIHRvIGJvb3RzdHJhcCB0aGlzIHJlcG8uXG4gICAqXG4gICAqIEBkZWZhdWx0IFwieWFybiBpbnN0YWxsIC0tZnJvemVuLWxvY2tmaWxlICYmIHlhcm4gcHJvamVuXCJcbiAgICovXG4gIHJlYWRvbmx5IHdvcmtmbG93Qm9vdHN0cmFwU3RlcHM/OiBKb2JTdGVwW107XG5cbiAgLyoqXG4gICAqIFRoZSBnaXQgaWRlbnRpdHkgdG8gdXNlIGluIHdvcmtmbG93cy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IEdpdEh1YiBBY3Rpb25zIHVzZXJcbiAgICovXG4gIHJlYWRvbmx5IHdvcmtmbG93R2l0SWRlbnRpdHk/OiBHaXRJZGVudGl0eTtcblxuICAvKipcbiAgICogQXV0b21hdGljYWxseSByZWxlYXNlIHRvIG5wbSB3aGVuIG5ldyB2ZXJzaW9ucyBhcmUgaW50cm9kdWNlZC5cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHJlbGVhc2VUb05wbT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBub2RlIHZlcnNpb24gdXNlZCBpbiBHaXRIdWIgQWN0aW9ucyB3b3JrZmxvd3MuXG4gICAqXG4gICAqIEFsd2F5cyB1c2UgdGhpcyBvcHRpb24gaWYgeW91ciBHaXRIdWIgQWN0aW9ucyB3b3JrZmxvd3MgcmVxdWlyZSBhIHNwZWNpZmljIHRvIHJ1bi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBgbWluTm9kZVZlcnNpb25gIGlmIHNldCwgb3RoZXJ3aXNlIGBsdHMvKmAuXG4gICAqL1xuICByZWFkb25seSB3b3JrZmxvd05vZGVWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBFbmFibGUgTm9kZS5qcyBwYWNrYWdlIGNhY2hlIGluIEdpdEh1YiB3b3JrZmxvd3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSB3b3JrZmxvd1BhY2thZ2VDYWNoZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFVzZSBkZXBlbmRhYm90IHRvIGhhbmRsZSBkZXBlbmRlbmN5IHVwZ3JhZGVzLlxuICAgKiBDYW5ub3QgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIGBkZXBzVXBncmFkZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBkZXBlbmRhYm90PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogT3B0aW9ucyBmb3IgZGVwZW5kYWJvdC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IG9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGRlcGVuZGFib3RPcHRpb25zPzogRGVwZW5kYWJvdE9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFVzZSB0YXNrcyBhbmQgZ2l0aHViIHdvcmtmbG93cyB0byBoYW5kbGUgZGVwZW5kZW5jeSB1cGdyYWRlcy5cbiAgICogQ2Fubm90IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgZGVwZW5kYWJvdGAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYHRydWVgIGZvciByb290IHByb2plY3RzLCBgZmFsc2VgIGZvciBzdWJwcm9qZWN0c1xuICAgKi9cbiAgcmVhZG9ubHkgZGVwc1VwZ3JhZGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciBgVXBncmFkZURlcGVuZGVuY2llc2AuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVmYXVsdCBvcHRpb25zXG4gICAqL1xuICByZWFkb25seSBkZXBzVXBncmFkZU9wdGlvbnM/OiBVcGdyYWRlRGVwZW5kZW5jaWVzT3B0aW9ucztcblxuICAvKipcbiAgICogQXV0b21hdGljYWxseSBhcHByb3ZlIGRlcHMgdXBncmFkZSBQUnMsIGFsbG93aW5nIHRoZW0gdG8gYmVcbiAgICogbWVyZ2VkIGJ5IG1lcmdpZnkgKGlmIGNvbmZpZ3VyZWQpLlxuICAgKlxuICAgKiBUaHJvdyBpZiBzZXQgdG8gdHJ1ZSBidXQgYGF1dG9BcHByb3ZlT3B0aW9uc2AgYXJlIG5vdCBkZWZpbmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGF1dG9BcHByb3ZlVXBncmFkZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGFuIC5ucG1pZ25vcmUgZmlsZS4gTm9ybWFsbHkgdGhpcyBpcyBvbmx5IG5lZWRlZCBmb3IgbGlicmFyaWVzIHRoYXRcbiAgICogYXJlIHBhY2thZ2VkIGFzIHRhcmJhbGxzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBucG1pZ25vcmVFbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBvcHRpb25zIGZvciAubnBtaWdub3JlIGZpbGVcbiAgICovXG4gIHJlYWRvbmx5IG5wbUlnbm9yZU9wdGlvbnM/OiBJZ25vcmVGaWxlT3B0aW9ucztcblxuICAvKipcbiAgICogSW5jbHVkZSBhIEdpdEh1YiBwdWxsIHJlcXVlc3QgdGVtcGxhdGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHB1bGxSZXF1ZXN0VGVtcGxhdGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudHMgb2YgdGhlIHB1bGwgcmVxdWVzdCB0ZW1wbGF0ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IGNvbnRlbnRcbiAgICovXG4gIHJlYWRvbmx5IHB1bGxSZXF1ZXN0VGVtcGxhdGVDb250ZW50cz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBTZXR1cCBwcmV0dGllci5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHByZXR0aWVyPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUHJldHRpZXIgb3B0aW9uc1xuICAgKiBAZGVmYXVsdCAtIGRlZmF1bHQgb3B0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgcHJldHRpZXJPcHRpb25zPzogUHJldHRpZXJPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBBZGRpdGlvbmFsIGVudHJpZXMgdG8gLmdpdGlnbm9yZVxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0aWdub3JlPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFNldHVwIGplc3QgdW5pdCB0ZXN0c1xuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBqZXN0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogSmVzdCBvcHRpb25zXG4gICAqIEBkZWZhdWx0IC0gZGVmYXVsdCBvcHRpb25zXG4gICAqL1xuICByZWFkb25seSBqZXN0T3B0aW9ucz86IEplc3RPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSAob25jZSkgLnByb2plbnJjLmpzIChpbiBKYXZhU2NyaXB0KS4gU2V0IHRvIGBmYWxzZWAgaW4gb3JkZXIgdG8gZGlzYWJsZVxuICAgKiAucHJvamVucmMuanMgZ2VuZXJhdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0cnVlIGlmIHByb2plbnJjSnNvbiBpcyBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVucmNKcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIC5wcm9qZW5yYy5qc1xuICAgKiBAZGVmYXVsdCAtIGRlZmF1bHQgb3B0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVucmNKc09wdGlvbnM/OiBQcm9qZW5yY09wdGlvbnM7XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIGBCdW5kbGVyYC5cbiAgICovXG4gIHJlYWRvbmx5IGJ1bmRsZXJPcHRpb25zPzogQnVuZGxlck9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEEgZGlyZWN0b3J5IHdoaWNoIHdpbGwgY29udGFpbiBidWlsZCBhcnRpZmFjdHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IFwiZGlzdFwiXG4gICAqL1xuICByZWFkb25seSBhcnRpZmFjdHNEaXJlY3Rvcnk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYSBgcGFja2FnZWAgdGFzayB0aGF0IHdpbGwgcHJvZHVjZSBhbiBucG0gdGFyYmFsbCB1bmRlciB0aGVcbiAgICogYXJ0aWZhY3RzIGRpcmVjdG9yeSAoZS5nLiBgZGlzdGApLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ29uZmlndXJlIHdoaWNoIGxpY2Vuc2VzIHNob3VsZCBiZSBkZWVtZWQgYWNjZXB0YWJsZSBmb3IgdXNlIGJ5IGRlcGVuZGVuY2llc1xuICAgKlxuICAgKiBUaGlzIHNldHRpbmcgd2lsbCBjYXVzZSB0aGUgYnVpbGQgdG8gZmFpbCwgaWYgYW55IHByb2hpYml0ZWQgb3Igbm90IGFsbG93ZWQgbGljZW5zZXMgYXJlcyBlbmNvdW50ZXJlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBsaWNlbnNlIGNoZWNrcyBhcmUgcnVuIGR1cmluZyB0aGUgYnVpbGQgYW5kIGFsbCBsaWNlbnNlcyB3aWxsIGJlIGFjY2VwdGVkXG4gICAqL1xuICByZWFkb25seSBjaGVja0xpY2Vuc2VzPzogTGljZW5zZUNoZWNrZXJPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBTZXR1cCBCaW9tZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGJpb21lPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQmlvbWUgb3B0aW9uc1xuICAgKiBAZGVmYXVsdCAtIGRlZmF1bHQgb3B0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgYmlvbWVPcHRpb25zPzogQmlvbWVPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBSdW4gc2VjdXJpdHkgYXVkaXQgb24gZGVwZW5kZW5jaWVzLlxuICAgKlxuICAgKiBXaGVuIGVuYWJsZWQsIGNyZWF0ZXMgYW4gXCJhdWRpdFwiIHRhc2sgdGhhdCBjaGVja3MgZm9yIGtub3duIHNlY3VyaXR5IHZ1bG5lcmFiaWxpdGllc1xuICAgKiBpbiBkZXBlbmRlbmNpZXMuIEJ5IGRlZmF1bHQsIHJ1bnMgZHVyaW5nIGV2ZXJ5IGJ1aWxkIGFuZCBjaGVja3MgZm9yIFwiaGlnaFwiIHNldmVyaXR5XG4gICAqIHZ1bG5lcmFiaWxpdGllcyBvciBhYm92ZSBpbiBhbGwgZGVwZW5kZW5jaWVzIChpbmNsdWRpbmcgZGV2IGRlcGVuZGVuY2llcykuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBhdWRpdERlcHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTZWN1cml0eSBhdWRpdCBvcHRpb25zLlxuICAgKiBAZGVmYXVsdCAtIGRlZmF1bHQgb3B0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgYXVkaXREZXBzT3B0aW9ucz86IEF1ZGl0T3B0aW9ucztcbn1cblxuLyoqXG4gKiBCdWlsZCB3b3JrZmxvdyBvcHRpb25zIGZvciBOb2RlUHJvamVjdFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEJ1aWxkV29ya2Zsb3dPcHRpb25zIGV4dGVuZHMgQnVpbGRXb3JrZmxvd0NvbW1vbk9wdGlvbnMge1xuICAvKipcbiAgICogQXV0b21hdGljYWxseSB1cGRhdGUgZmlsZXMgbW9kaWZpZWQgZHVyaW5nIGJ1aWxkcyB0byBwdWxsLXJlcXVlc3QgYnJhbmNoZXMuXG4gICAqIFRoaXMgbWVhbnMgdGhhdCBhbnkgZmlsZXMgc3ludGhlc2l6ZWQgYnkgcHJvamVuIG9yIGUuZy4gdGVzdCBzbmFwc2hvdHMgd2lsbFxuICAgKiBhbHdheXMgYmUgdXAtdG8tZGF0ZSBiZWZvcmUgYSBQUiBpcyBtZXJnZWQuXG4gICAqXG4gICAqIEltcGxpZXMgdGhhdCBQUiBidWlsZHMgZG8gbm90IGhhdmUgYW50aS10YW1wZXIgY2hlY2tzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBtdXRhYmxlQnVpbGQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBQZXJmb3JtIGEgbXV0YWJsZSAobm9uLWZyb3plbikgaW5zdGFsbCBkdXJpbmcgYnVpbGRzLiBUaGlzIHdpbGwgdXBkYXRlIHRoZVxuICAgKiBwYWNrYWdlIGxvY2tmaWxlIGR1cmluZyBpbnN0YWxscywgd2hpY2ggaXMgdXNlZnVsIHdoZW4gYnVpbGQgc3RlcHMgbW9kaWZ5XG4gICAqIGRlcGVuZGVuY2llcy4gU2V0IHRvIGBmYWxzZWAgdG8gdXNlIGZyb3plbiBsb2NrZmlsZSBpbnN0YWxscyBldmVuIHdoZW5cbiAgICogYG11dGFibGVCdWlsZGAgaXMgZW5hYmxlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB2YWx1ZSBvZiBgbXV0YWJsZUJ1aWxkYFxuICAgKi9cbiAgcmVhZG9ubHkgbXV0YWJsZUluc3RhbGw/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBHaXRodWIgUnVubmVyIHNlbGVjdGlvbiBsYWJlbHNcbiAgICogQGRlZmF1bHQgW1widWJ1bnR1LWxhdGVzdFwiXVxuICAgKiBAZGVzY3JpcHRpb24gRGVmaW5lcyBhIHRhcmdldCBSdW5uZXIgYnkgbGFiZWxzXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBpZiBib3RoIGBydW5zT25gIGFuZCBgcnVuc09uR3JvdXBgIGFyZSBzcGVjaWZpZWRcbiAgICovXG4gIHJlYWRvbmx5IHJ1bnNPbj86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBHaXRodWIgUnVubmVyIEdyb3VwIHNlbGVjdGlvbiBvcHRpb25zXG4gICAqIEBkZXNjcmlwdGlvbiBEZWZpbmVzIGEgdGFyZ2V0IFJ1bm5lciBHcm91cCBieSBuYW1lIGFuZC9vciBsYWJlbHNcbiAgICogQHRocm93cyB7RXJyb3J9IGlmIGJvdGggYHJ1bnNPbmAgYW5kIGBydW5zT25Hcm91cGAgYXJlIHNwZWNpZmllZFxuICAgKi9cbiAgcmVhZG9ubHkgcnVuc09uR3JvdXA/OiBHcm91cFJ1bm5lck9wdGlvbnM7XG59XG5cbi8qKlxuICogQXV0b21hdGljIGJ1bXAgbW9kZXNcbiAqL1xuZXhwb3J0IGVudW0gQXV0b1JlbGVhc2Uge1xuICAvKipcbiAgICogQXV0b21hdGljYWxseSBidW1wICYgcmVsZWFzZSBhIG5ldyB2ZXJzaW9uIGZvciBldmVyeSBjb21taXQgdG8gXCJtYWluXCJcbiAgICovXG4gIEVWRVJZX0NPTU1JVCxcblxuICAvKipcbiAgICogQXV0b21hdGljYWxseSBidW1wICYgcmVsZWFzZSBhIG5ldyB2ZXJzaW9uIG9uIGEgZGFpbHkgYmFzaXMuXG4gICAqL1xuICBEQUlMWSxcbn1cblxuLyoqXG4gKiBOb2RlLmpzIHByb2plY3QuXG4gKlxuICogQHBqaWQgbm9kZVxuICovXG5leHBvcnQgY2xhc3MgTm9kZVByb2plY3QgZXh0ZW5kcyBHaXRIdWJQcm9qZWN0IHtcbiAgLyoqXG4gICAqIEFQSSBmb3IgbWFuYWdpbmcgdGhlIG5vZGUgcGFja2FnZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBwYWNrYWdlOiBOb2RlUGFja2FnZTtcblxuICAvKipcbiAgICogVGhlIC5ucG1pZ25vcmUgZmlsZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBucG1pZ25vcmU/OiBJZ25vcmVGaWxlO1xuXG4gIC8qKlxuICAgKiBUaGUgLm5wbXJjIGZpbGVcbiAgICovXG4gIHB1YmxpYyBnZXQgbnBtcmMoKTogTnBtQ29uZmlnIHtcbiAgICBpZiAoIXRoaXMuX25wbXJjKSB7XG4gICAgICB0aGlzLl9ucG1yYyA9IG5ldyBOcG1Db25maWcodGhpcywgeyBvbWl0RW1wdHk6IHRydWUgfSk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLl9ucG1yYztcbiAgfVxuICBwcml2YXRlIF9ucG1yYz86IE5wbUNvbmZpZztcblxuICAvKipcbiAgICogQ29tcG9uZW50IHRoYXQgc2V0cyB1cCBtZXJnaWZ5IGZvciBtZXJnaW5nIGFwcHJvdmVkIHB1bGwgcmVxdWVzdHMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXV0b01lcmdlPzogQXV0b01lcmdlO1xuXG4gIC8qKlxuICAgKiBUaGUgUFIgYnVpbGQgR2l0SHViIHdvcmtmbG93LiBgdW5kZWZpbmVkYCBpZiBgYnVpbGRXb3JrZmxvd2AgaXMgZGlzYWJsZWQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYnVpbGRXb3JrZmxvdz86IEJ1aWxkV29ya2Zsb3c7XG5cbiAgLyoqXG4gICAqIFJlbGVhc2UgbWFuYWdlbWVudC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSByZWxlYXNlPzogUmVsZWFzZTtcblxuICAvKipcbiAgICogVGhlIG1pbmltdW0gbm9kZSB2ZXJzaW9uIHJlcXVpcmVkIGJ5IHRoaXMgcGFja2FnZSB0byBmdW5jdGlvbi5cbiAgICpcbiAgICogVGhpcyB2YWx1ZSBpbmRpY2F0ZXMgdGhlIHBhY2thZ2UgaXMgaW5jb21wYXRpYmxlIHdpdGggb2xkZXIgdmVyc2lvbnMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1pbk5vZGVWZXJzaW9uKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucGFja2FnZS5taW5Ob2RlVmVyc2lvbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBNYXhpbXVtIG5vZGUgdmVyc2lvbiBzdXBwb3J0ZWQgYnkgdGhpcyBwYWNrYWdlLlxuICAgKlxuICAgKiBUaGUgdmFsdWUgaW5kaWNhdGVzIHRoZSBwYWNrYWdlIGlzIGluY29tcGF0aWJsZSB3aXRoIG5ld2VyIHZlcnNpb25zLlxuICAgKi9cbiAgcHVibGljIGdldCBtYXhOb2RlVmVyc2lvbigpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB0aGlzLnBhY2thZ2UubWF4Tm9kZVZlcnNpb247XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVhZG9ubHkgbm9kZVZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb21tYW5kIHRvIHVzZSB0byBydW4gc2NyaXB0cyAoZS5nLiBgeWFybiBydW5gIG9yIGBucG0gcnVuYCBkZXBlbmRzIG9uIHRoZSBwYWNrYWdlIG1hbmFnZXIpLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJ1blNjcmlwdENvbW1hbmQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEplc3QgY29uZmlndXJhdGlvbiAoaWYgZW5hYmxlZClcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBqZXN0PzogSmVzdDtcblxuICBwdWJsaWMgcmVhZG9ubHkgYnVuZGxlcjogQnVuZGxlcjtcblxuICAvKipcbiAgICogVGhlIGJ1aWxkIG91dHB1dCBkaXJlY3RvcnkuIEFuIG5wbSB0YXJiYWxsIHdpbGwgYmUgY3JlYXRlZCB1bmRlciB0aGUgYGpzYFxuICAgKiBzdWJkaXJlY3RvcnkuIEZvciBleGFtcGxlLCBpZiB0aGlzIGlzIHNldCB0byBgZGlzdGAgKHRoZSBkZWZhdWx0KSwgdGhlIG5wbVxuICAgKiB0YXJiYWxsIHdpbGwgYmUgcGxhY2VkIHVuZGVyIGBkaXN0L2pzL2Jvb20tYm9vbS0xLjIuMy50Z2AuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXJ0aWZhY3RzRGlyZWN0b3J5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBsb2NhdGlvbiBvZiB0aGUgbnBtIHRhcmJhbGwgYWZ0ZXIgYnVpbGQgKGAke2FydGlmYWN0c0RpcmVjdG9yeX0vanNgKS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhcnRpZmFjdHNKYXZhc2NyaXB0RGlyZWN0b3J5OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB1cGdyYWRlIHdvcmtmbG93LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVwZ3JhZGVXb3JrZmxvdz86IFVwZ3JhZGVEZXBlbmRlbmNpZXM7XG5cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHdvcmtmbG93Qm9vdHN0cmFwU3RlcHM6IEpvYlN0ZXBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSB3b3JrZmxvd0dpdElkZW50aXR5OiBHaXRJZGVudGl0eTtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHdvcmtmbG93UGFja2FnZUNhY2hlOiBib29sZWFuO1xuICBwdWJsaWMgcmVhZG9ubHkgcHJldHRpZXI/OiBQcmV0dGllcjtcbiAgcHVibGljIHJlYWRvbmx5IGJpb21lPzogQmlvbWU7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogTm9kZVBhY2thZ2VPcHRpb25zO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IE5vZGVQcm9qZWN0T3B0aW9ucykge1xuICAgIHN1cGVyKHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBnaXRodWJPcHRpb25zOiB7XG4gICAgICAgIC4uLm9wdGlvbnMuZ2l0aHViT3B0aW9ucyxcbiAgICAgICAgLi4uKG9wdGlvbnMuZ2l0aHViT3B0aW9ucz8uZGVwZW5kZW5jeVJldmlld1xuICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBkZXBlbmRlbmN5UmV2aWV3T3B0aW9uczoge1xuICAgICAgICAgICAgICAgIGZhaWxPblNldmVyaXR5OiBvcHRpb25zLmF1ZGl0RGVwc09wdGlvbnM/LmxldmVsLFxuICAgICAgICAgICAgICAgIGFsbG93TGljZW5zZXM6IG9wdGlvbnMuY2hlY2tMaWNlbnNlcz8uYWxsb3csXG4gICAgICAgICAgICAgICAgLi4ub3B0aW9ucy5naXRodWJPcHRpb25zPy5kZXBlbmRlbmN5UmV2aWV3T3B0aW9ucyxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICA6IHt9KSxcbiAgICAgIH0sXG4gICAgICBwcm9qZW5Db21tYW5kOlxuICAgICAgICBvcHRpb25zLnByb2plbkNvbW1hbmQgPz8gZXhlY0NvbW1hbmQob3B0aW9ucy5wYWNrYWdlTWFuYWdlciwgXCJwcm9qZW5cIiksXG4gICAgfSk7XG5cbiAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zO1xuICAgIHRoaXMucGFja2FnZSA9IG5ldyBOb2RlUGFja2FnZSh0aGlzLCB0aGlzLm9wdGlvbnMpO1xuICAgIHRoaXMud29ya2Zsb3dCb290c3RyYXBTdGVwcyA9IG9wdGlvbnMud29ya2Zsb3dCb290c3RyYXBTdGVwcyA/PyBbXTtcbiAgICB0aGlzLndvcmtmbG93R2l0SWRlbnRpdHkgPVxuICAgICAgb3B0aW9ucy53b3JrZmxvd0dpdElkZW50aXR5ID8/IERFRkFVTFRfR0lUSFVCX0FDVElPTlNfVVNFUjtcbiAgICB0aGlzLndvcmtmbG93UGFja2FnZUNhY2hlID0gb3B0aW9ucy53b3JrZmxvd1BhY2thZ2VDYWNoZSA/PyBmYWxzZTtcbiAgICB0aGlzLmFydGlmYWN0c0RpcmVjdG9yeSA9XG4gICAgICBvcHRpb25zLmFydGlmYWN0c0RpcmVjdG9yeSA/PyBERUZBVUxUX0FSVElGQUNUU19ESVJFQ1RPUlk7XG4gICAgZW5zdXJlTm90SGlkZGVuUGF0aCh0aGlzLmFydGlmYWN0c0RpcmVjdG9yeSwgXCJhcnRpZmFjdHNEaXJlY3RvcnlcIik7XG4gICAgY29uc3Qgbm9ybWFsaXplZEFydGlmYWN0c0RpcmVjdG9yeSA9IG5vcm1hbGl6ZVBlcnNpc3RlZFBhdGgoXG4gICAgICB0aGlzLmFydGlmYWN0c0RpcmVjdG9yeSxcbiAgICApO1xuICAgIHRoaXMuYXJ0aWZhY3RzSmF2YXNjcmlwdERpcmVjdG9yeSA9IHBvc2l4LmpvaW4oXG4gICAgICBub3JtYWxpemVkQXJ0aWZhY3RzRGlyZWN0b3J5LFxuICAgICAgXCJqc1wiLFxuICAgICk7XG5cbiAgICB0aGlzLnJ1blNjcmlwdENvbW1hbmQgPSAoKCkgPT4ge1xuICAgICAgc3dpdGNoICh0aGlzLnBhY2thZ2UucGFja2FnZU1hbmFnZXIpIHtcbiAgICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuTlBNOlxuICAgICAgICAgIHJldHVybiBcIm5wbSBydW5cIjtcbiAgICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuWUFSTjpcbiAgICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuWUFSTjI6XG4gICAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLllBUk5fQ0xBU1NJQzpcbiAgICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuWUFSTl9CRVJSWTpcbiAgICAgICAgICByZXR1cm4gXCJ5YXJuIHJ1blwiO1xuICAgICAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5QTlBNOlxuICAgICAgICAgIHJldHVybiBcInBucG0gcnVuXCI7XG4gICAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLkJVTjpcbiAgICAgICAgICByZXR1cm4gXCJidW4gcnVuXCI7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYHVuZXhwZWN0ZWQgcGFja2FnZSBtYW5hZ2VyICR7dGhpcy5wYWNrYWdlLnBhY2thZ2VNYW5hZ2VyfWAsXG4gICAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KSgpO1xuXG4gICAgY29uc3QgZW52Q29tbWFuZCA9ICgoKSA9PiB7XG4gICAgICBzd2l0Y2ggKHRoaXMucGFja2FnZS5wYWNrYWdlTWFuYWdlcikge1xuICAgICAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5ZQVJOX0JFUlJZOlxuICAgICAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5ZQVJOMjpcbiAgICAgICAgICByZXR1cm4gXCIkKHlhcm4gZXhlYyBub2RlIC0tcHJpbnQgcHJvY2Vzcy5lbnYuUEFUSClcIjtcbiAgICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuUE5QTTpcbiAgICAgICAgICByZXR1cm4gJyQocG5wbSAtYyBleGVjIFwibm9kZSAtLXByaW50IHByb2Nlc3MuZW52LlBBVEhcIiknO1xuICAgICAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5CVU46XG4gICAgICAgICAgcmV0dXJuICckKGJ1biAtLWV2YWwgXCJjb25zb2xlLmxvZyhwcm9jZXNzLmVudi5QQVRIKVwiKSc7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgcmV0dXJuICckKG5weCAtYyBcIm5vZGUgLS1wcmludCBwcm9jZXNzLmVudi5QQVRIXCIpJztcbiAgICAgIH1cbiAgICB9KSgpO1xuXG4gICAgdGhpcy5ub2RlVmVyc2lvbiA9XG4gICAgICBvcHRpb25zLndvcmtmbG93Tm9kZVZlcnNpb24gPz8gdGhpcy5wYWNrYWdlLm1pbk5vZGVWZXJzaW9uO1xuXG4gICAgLy8gYWRkIFBBVEggZm9yIGFsbCB0YXNrcyB3aGljaCBpbmNsdWRlcyB0aGUgcHJvamVjdCdzIG5wbSAuYmluIGxpc3RcbiAgICB0aGlzLnRhc2tzLmFkZEVudmlyb25tZW50KFwiUEFUSFwiLCBlbnZDb21tYW5kKTtcblxuICAgIHRoaXMuYWRkTGljZW5zZShvcHRpb25zKTtcblxuICAgIGlmIChvcHRpb25zLm5wbWlnbm9yZUVuYWJsZWQgPz8gdHJ1ZSkge1xuICAgICAgdGhpcy5ucG1pZ25vcmUgPSBuZXcgSWdub3JlRmlsZShcbiAgICAgICAgdGhpcyxcbiAgICAgICAgXCIubnBtaWdub3JlXCIsXG4gICAgICAgIG9wdGlvbnMubnBtSWdub3JlT3B0aW9ucyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREZWZhdWx0R2l0SWdub3JlKCk7XG5cbiAgICBpZiAob3B0aW9ucy5naXRpZ25vcmU/Lmxlbmd0aCkge1xuICAgICAgZm9yIChjb25zdCBpIG9mIG9wdGlvbnMuZ2l0aWdub3JlKSB7XG4gICAgICAgIHRoaXMuZ2l0aWdub3JlLmV4Y2x1ZGUoaSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKCF0aGlzLmVqZWN0ZWQpIHtcbiAgICAgIHRoaXMuc2V0U2NyaXB0KFBST0pFTl9TQ1JJUFQsIG9wdGlvbnMucHJvamVuQ29tbWFuZCA/PyBcInByb2plblwiKTtcbiAgICB9XG5cbiAgICB0aGlzLm5wbWlnbm9yZT8uZXhjbHVkZShgLyR7UFJPSkVOX0RJUn0vYCk7XG5cbiAgICBjb25zdCBwcm9qZW4gPSBvcHRpb25zLnByb2plbkRldkRlcGVuZGVuY3kgPz8gKHRoaXMucGFyZW50ID8gZmFsc2UgOiB0cnVlKTtcbiAgICBpZiAocHJvamVuICYmICF0aGlzLmVqZWN0ZWQpIHtcbiAgICAgIGNvbnN0IHBvc3RmaXggPSBvcHRpb25zLnByb2plblZlcnNpb24gPyBgQCR7b3B0aW9ucy5wcm9qZW5WZXJzaW9ufWAgOiBcIlwiO1xuICAgICAgdGhpcy5hZGREZXZEZXBzKGBwcm9qZW4ke3Bvc3RmaXh9YCk7XG5cbiAgICAgIHRoaXMuZGVwcy5yZXF1ZXN0RGVwZW5kZW5jeSh7XG4gICAgICAgIG5hbWU6IFwiY29uc3RydWN0c1wiLFxuICAgICAgICB2ZXJzaW9uOiBcIl4xMC4wLjBcIixcbiAgICAgICAgdHlwZTogRGVwZW5kZW5jeVR5cGUuQlVJTEQsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBidWlsZEVuYWJsZWQgPSBvcHRpb25zLmJ1aWxkV29ya2Zsb3cgPz8gKHRoaXMucGFyZW50ID8gZmFsc2UgOiB0cnVlKTtcblxuICAgIC8vIGNvbmZpZ3VyZSBqZXN0IGlmIGVuYWJsZWRcbiAgICAvLyBtdXN0IGJlIGJlZm9yZSB0aGUgYnVpbGQvcmVsZWFzZSB3b3JrZmxvd3NcbiAgICBpZiAob3B0aW9ucy5qZXN0ID8/IHRydWUpIHtcbiAgICAgIHRoaXMuamVzdCA9IG5ldyBKZXN0KHRoaXMsIG9wdGlvbnMuamVzdE9wdGlvbnMpO1xuICAgIH1cblxuICAgIGNvbnN0IHdvcmtmbG93UGVybWlzc2lvbnM6IEpvYlBlcm1pc3Npb25zID0ge1xuICAgICAgaWRUb2tlbjogdGhpcy5kZXRlcm1pbmVJZFRva2VuUGVybWlzc2lvbnMob3B0aW9ucyksXG4gICAgfTtcblxuICAgIGNvbnN0IGJ1aWxkV29ya2Zsb3dPcHRpb25zOiBCdWlsZFdvcmtmbG93T3B0aW9ucyA9XG4gICAgICBvcHRpb25zLmJ1aWxkV29ya2Zsb3dPcHRpb25zID8/IHt9O1xuXG4gICAgaWYgKGJ1aWxkRW5hYmxlZCAmJiAodGhpcy5naXRodWIgfHwgR2l0SHViLm9mKHRoaXMucm9vdCkpKSB7XG4gICAgICB0aGlzLmJ1aWxkV29ya2Zsb3cgPSBuZXcgQnVpbGRXb3JrZmxvdyh0aGlzLCB7XG4gICAgICAgIGJ1aWxkVGFzazogdGhpcy5idWlsZFRhc2ssXG4gICAgICAgIGFydGlmYWN0c0RpcmVjdG9yeTogdGhpcy5hcnRpZmFjdHNEaXJlY3RvcnksXG4gICAgICAgIGNvbnRhaW5lckltYWdlOiBvcHRpb25zLndvcmtmbG93Q29udGFpbmVySW1hZ2UsXG4gICAgICAgIGdpdElkZW50aXR5OiB0aGlzLndvcmtmbG93R2l0SWRlbnRpdHksXG4gICAgICAgIHBlcm1pc3Npb25zOiB3b3JrZmxvd1Blcm1pc3Npb25zLFxuICAgICAgICAuLi5idWlsZFdvcmtmbG93T3B0aW9ucyxcbiAgICAgICAgcHJlQnVpbGRTdGVwczogdGhpcy5yZW5kZXJXb3JrZmxvd1NldHVwKHtcbiAgICAgICAgICBpbnN0YWxsU3RlcENvbmZpZ3VyYXRpb246IHtcbiAgICAgICAgICAgIHdvcmtpbmdEaXJlY3Rvcnk6IHRoaXMuZGV0ZXJtaW5lSW5zdGFsbFdvcmtpbmdEaXJlY3RvcnkoKSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIG11dGFibGU6XG4gICAgICAgICAgICBidWlsZFdvcmtmbG93T3B0aW9ucy5tdXRhYmxlSW5zdGFsbCA/P1xuICAgICAgICAgICAgYnVpbGRXb3JrZmxvd09wdGlvbnMubXV0YWJsZUJ1aWxkID8/XG4gICAgICAgICAgICB0cnVlLFxuICAgICAgICB9KS5jb25jYXQoYnVpbGRXb3JrZmxvd09wdGlvbnMucHJlQnVpbGRTdGVwcyA/PyBbXSksXG4gICAgICAgIHBvc3RCdWlsZFN0ZXBzOiBbLi4uKG9wdGlvbnMucG9zdEJ1aWxkU3RlcHMgPz8gW10pXSxcbiAgICAgICAgLi4uZmlsdGVyZWRSdW5zT25PcHRpb25zKFxuICAgICAgICAgIGJ1aWxkV29ya2Zsb3dPcHRpb25zLnJ1bnNPbiA/PyBvcHRpb25zLndvcmtmbG93UnVuc09uLFxuICAgICAgICAgIGJ1aWxkV29ya2Zsb3dPcHRpb25zLnJ1bnNPbkdyb3VwID8/IG9wdGlvbnMud29ya2Zsb3dSdW5zT25Hcm91cCxcbiAgICAgICAgKSxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmJ1aWxkV29ya2Zsb3cuYWRkUG9zdEJ1aWxkU3RlcHMoXG4gICAgICAgIC4uLnRoaXMucmVuZGVyVXBsb2FkQ292ZXJhZ2VKb2JTdGVwKG9wdGlvbnMpLFxuICAgICAgKTtcbiAgICAgIHRoaXMubWF5YmVBZGRDb2RlY292SWdub3JlcyhvcHRpb25zKTtcbiAgICB9XG5cbiAgICAvLyBCdWlsZCByZWxlYXNlIHRhc2tzIGFycmF5XG4gICAgY29uc3QgcmVsZWFzZVRhc2tzID0gW107XG5cbiAgICAvLyBBZGQgc2VjdXJpdHkgYXVkaXQgYmVmb3JlIHJlbGVhc2UgaWYgZW5hYmxlZFxuICAgIGlmIChvcHRpb25zLmF1ZGl0RGVwcykge1xuICAgICAgY29uc3QgYXVkaXRUYXNrID0gdGhpcy5hZGRBdWRpdFRhc2sob3B0aW9ucyk7XG4gICAgICBjb25zdCBydW5PbiA9IG9wdGlvbnMuYXVkaXREZXBzT3B0aW9ucz8ucnVuT24gPz8gXCJidWlsZFwiO1xuXG4gICAgICBpZiAocnVuT24gPT09IFwicmVsZWFzZVwiKSB7XG4gICAgICAgIHJlbGVhc2VUYXNrcy5wdXNoKGF1ZGl0VGFzayk7XG4gICAgICB9IGVsc2UgaWYgKHJ1bk9uID09PSBcImJ1aWxkXCIpIHtcbiAgICAgICAgdGhpcy5wcmVDb21waWxlVGFzay5zcGF3bihhdWRpdFRhc2spO1xuICAgICAgfVxuICAgICAgLy8gXCJtYW51YWxcIiBtb2RlIGRvZXNuJ3QgYWRkIHRvIGFueSB0YXNrXG4gICAgfVxuXG4gICAgY29uc3QgcmVsZWFzZSA9IG9wdGlvbnMucmVsZWFzZSA/PyAodGhpcy5wYXJlbnQgPyBmYWxzZSA6IHRydWUpO1xuICAgIGlmIChyZWxlYXNlKSB7XG4gICAgICAvLyBBZGQgYnVpbGQgdGFza1xuICAgICAgcmVsZWFzZVRhc2tzLnB1c2godGhpcy5idWlsZFRhc2spO1xuXG4gICAgICB0aGlzLnJlbGVhc2UgPSBuZXcgUmVsZWFzZSh0aGlzLCB7XG4gICAgICAgIHZlcnNpb25GaWxlOiBcInBhY2thZ2UuanNvblwiLCAvLyB0aGlzIGlzIHdoZXJlIFwidmVyc2lvblwiIGlzIHNldCBhZnRlciBidW1wXG4gICAgICAgIHRhc2tzOiByZWxlYXNlVGFza3MsXG4gICAgICAgIGJyYW5jaDogb3B0aW9ucy5kZWZhdWx0UmVsZWFzZUJyYW5jaCA/PyBcIm1haW5cIixcbiAgICAgICAgLi4ub3B0aW9ucyxcblxuICAgICAgICBhcnRpZmFjdHNEaXJlY3Rvcnk6IHRoaXMuYXJ0aWZhY3RzRGlyZWN0b3J5LFxuICAgICAgICByZWxlYXNlV29ya2Zsb3dTZXR1cFN0ZXBzOiBbXG4gICAgICAgICAgLi4udGhpcy5yZW5kZXJXb3JrZmxvd1NldHVwKHtcbiAgICAgICAgICAgIGluc3RhbGxTdGVwQ29uZmlndXJhdGlvbjoge1xuICAgICAgICAgICAgICB3b3JraW5nRGlyZWN0b3J5OiB0aGlzLmRldGVybWluZUluc3RhbGxXb3JraW5nRGlyZWN0b3J5KCksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbXV0YWJsZTogZmFsc2UsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgLi4uKG9wdGlvbnMucmVsZWFzZVdvcmtmbG93U2V0dXBTdGVwcyA/PyBbXSksXG4gICAgICAgIF0sXG4gICAgICAgIHBvc3RCdWlsZFN0ZXBzOiBbXG4gICAgICAgICAgLi4uKG9wdGlvbnMucG9zdEJ1aWxkU3RlcHMgPz8gW10pLFxuICAgICAgICAgIC4uLnRoaXMucmVuZGVyVXBsb2FkQ292ZXJhZ2VKb2JTdGVwKG9wdGlvbnMpLFxuICAgICAgICBdLFxuXG4gICAgICAgIHdvcmtmbG93Tm9kZVZlcnNpb246IHRoaXMubm9kZVZlcnNpb24sXG4gICAgICAgIHdvcmtmbG93UGVybWlzc2lvbnMsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy5tYXliZUFkZENvZGVjb3ZJZ25vcmVzKG9wdGlvbnMpO1xuXG4gICAgICBjb25zdCBub2RlUGFja2FnZVRvUmVsZWFzZUNvZGVBcnRpZmFjdEF1dGhQcm92aWRlck1hcHBpbmc6IFJlY29yZDxcbiAgICAgICAgTm9kZVBhY2thZ2VDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXIsXG4gICAgICAgIFJlbGVhc2VDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXJcbiAgICAgID4gPSB7XG4gICAgICAgIFtOb2RlUGFja2FnZUNvZGVBcnRpZmFjdEF1dGhQcm92aWRlci5BQ0NFU1NfQU5EX1NFQ1JFVF9LRVlfUEFJUl06XG4gICAgICAgICAgUmVsZWFzZUNvZGVBcnRpZmFjdEF1dGhQcm92aWRlci5BQ0NFU1NfQU5EX1NFQ1JFVF9LRVlfUEFJUixcbiAgICAgICAgW05vZGVQYWNrYWdlQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyLkdJVEhVQl9PSURDXTpcbiAgICAgICAgICBSZWxlYXNlQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyLkdJVEhVQl9PSURDLFxuICAgICAgfTtcblxuICAgICAgaWYgKG9wdGlvbnMucmVsZWFzZVRvTnBtID8/IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGNvZGVBcnRpZmFjdE9wdGlvbnM6IE5wbVB1Ymxpc2hPcHRpb25zW1wiY29kZUFydGlmYWN0T3B0aW9uc1wiXSA9XG4gICAgICAgICAgaXNBd3NDb2RlQXJ0aWZhY3RSZWdpc3RyeSh0aGlzLnBhY2thZ2UubnBtUmVnaXN0cnkpXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBhY2Nlc3NLZXlJZFNlY3JldDpcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29kZUFydGlmYWN0T3B0aW9ucz8uYWNjZXNzS2V5SWRTZWNyZXQsXG4gICAgICAgICAgICAgICAgc2VjcmV0QWNjZXNzS2V5U2VjcmV0OlxuICAgICAgICAgICAgICAgICAgb3B0aW9ucy5jb2RlQXJ0aWZhY3RPcHRpb25zPy5zZWNyZXRBY2Nlc3NLZXlTZWNyZXQsXG4gICAgICAgICAgICAgICAgcm9sZVRvQXNzdW1lOiBvcHRpb25zLmNvZGVBcnRpZmFjdE9wdGlvbnM/LnJvbGVUb0Fzc3VtZSxcbiAgICAgICAgICAgICAgICBhdXRoUHJvdmlkZXI6IG9wdGlvbnMuY29kZUFydGlmYWN0T3B0aW9ucz8uYXV0aFByb3ZpZGVyXG4gICAgICAgICAgICAgICAgICA/IG5vZGVQYWNrYWdlVG9SZWxlYXNlQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyTWFwcGluZ1tcbiAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmNvZGVBcnRpZmFjdE9wdGlvbnMuYXV0aFByb3ZpZGVyXG4gICAgICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICAgICAgIDogUmVsZWFzZUNvZGVBcnRpZmFjdEF1dGhQcm92aWRlci5BQ0NFU1NfQU5EX1NFQ1JFVF9LRVlfUEFJUixcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7fTtcbiAgICAgICAgdGhpcy5yZWxlYXNlLnB1Ymxpc2hlci5wdWJsaXNoVG9OcG0oe1xuICAgICAgICAgIHJlZ2lzdHJ5OiB0aGlzLnBhY2thZ2UubnBtUmVnaXN0cnksXG4gICAgICAgICAgbnBtVG9rZW5TZWNyZXQ6IHRoaXMucGFja2FnZS5ucG1Ub2tlblNlY3JldCxcbiAgICAgICAgICBucG1Qcm92ZW5hbmNlOiB0aGlzLnBhY2thZ2UubnBtUHJvdmVuYW5jZSxcbiAgICAgICAgICB0cnVzdGVkUHVibGlzaGluZzogb3B0aW9ucy5ucG1UcnVzdGVkUHVibGlzaGluZyA/PyBmYWxzZSxcbiAgICAgICAgICBjb2RlQXJ0aWZhY3RPcHRpb25zLFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgLy8gdmFsaWRhdGUgdGhhdCBubyByZWxlYXNlIG9wdGlvbnMgYXJlIHNlbGVjdGVkIGlmIHRoZSByZWxlYXNlIHdvcmtmbG93IGlzIGRpc2FibGVkLlxuICAgICAgaWYgKG9wdGlvbnMucmVsZWFzZVRvTnBtKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnXCJyZWxlYXNlVG9OcG1cIiBpcyBub3Qgc3VwcG9ydGVkIGlmIFwicmVsZWFzZVwiIGlzIG5vdCBzZXQnLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIChvcHRpb25zLmF1dG9NZXJnZSA/PyB0cnVlKSAmJlxuICAgICAgdGhpcy5naXRodWI/Lm1lcmdpZnkgJiZcbiAgICAgIHRoaXMuYnVpbGRXb3JrZmxvdz8uYnVpbGRKb2JJZHNcbiAgICApIHtcbiAgICAgIHRoaXMuYXV0b01lcmdlID0gbmV3IEF1dG9NZXJnZSh0aGlzLmdpdGh1Yiwgb3B0aW9ucy5hdXRvTWVyZ2VPcHRpb25zKTtcbiAgICAgIHRoaXMuYXV0b01lcmdlLmFkZENvbmRpdGlvbnNMYXRlcih7XG4gICAgICAgIHJlbmRlcjogKCkgPT5cbiAgICAgICAgICB0aGlzLmJ1aWxkV29ya2Zsb3c/LmJ1aWxkSm9iSWRzLm1hcCgoaWQpID0+IGBzdGF0dXMtc3VjY2Vzcz0ke2lkfWApID8/XG4gICAgICAgICAgW10sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBkZXBlbmRhYm90ID0gb3B0aW9ucy5kZXBlbmRhYm90ID8/IGZhbHNlO1xuICAgIGNvbnN0IGRlcHNVcGdyYWRlID1cbiAgICAgIG9wdGlvbnMuZGVwc1VwZ3JhZGUgPz8gKHRoaXMucGFyZW50ID8gZmFsc2UgOiAhZGVwZW5kYWJvdCk7IC8vIGJ5IGRlZmF1bHQgZGlzYWJsZWQgaW4gc3VicHJvamVjdHNcblxuICAgIGlmIChkZXBlbmRhYm90ICYmIGRlcHNVcGdyYWRlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiJ2RlcGVuZGFib3QnIGNhbm5vdCBiZSBjb25maWd1cmVkIHRvZ2V0aGVyIHdpdGggJ2RlcHNVcGdyYWRlJ1wiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBkZXBzQXV0b0FwcHJvdmUgPSBvcHRpb25zLmF1dG9BcHByb3ZlVXBncmFkZXMgPz8gZmFsc2U7XG5cbiAgICBpZiAoZGVwc0F1dG9BcHByb3ZlICYmICF0aGlzLmF1dG9BcHByb3ZlICYmIHRoaXMuZ2l0aHViKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiQXV0b21hdGljIGFwcHJvdmFsIG9mIGRlcGVuZGVuY2llcyB1cGdyYWRlcyByZXF1aXJlcyBjb25maWd1cmluZyBgYXV0b0FwcHJvdmVPcHRpb25zYFwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBhdXRvQXBwcm92ZUxhYmVsID0gKGNvbmRpdGlvbjogYm9vbGVhbikgPT5cbiAgICAgIGNvbmRpdGlvbiAmJiB0aGlzLmF1dG9BcHByb3ZlPy5sYWJlbFxuICAgICAgICA/IFt0aGlzLmF1dG9BcHByb3ZlLmxhYmVsXVxuICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgIGlmIChkZXBlbmRhYm90KSB7XG4gICAgICBjb25zdCBkZWZhdWx0T3B0aW9ucyA9IHtcbiAgICAgICAgbGFiZWxzOiBhdXRvQXBwcm92ZUxhYmVsKGRlcHNBdXRvQXBwcm92ZSksXG4gICAgICB9O1xuICAgICAgdGhpcy5naXRodWI/LmFkZERlcGVuZGFib3QoXG4gICAgICAgIGRlZXBNZXJnZShbZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMuZGVwZW5kYWJvdE9wdGlvbnMgPz8ge31dKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGRlcHNVcGdyYWRlKSB7XG4gICAgICBjb25zdCBkZWZhdWx0T3B0aW9uczogVXBncmFkZURlcGVuZGVuY2llc09wdGlvbnMgPSB7XG4gICAgICAgIHdvcmtmbG93T3B0aW9uczoge1xuICAgICAgICAgIGNvbnRhaW5lcjogb3B0aW9ucy53b3JrZmxvd0NvbnRhaW5lckltYWdlXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBpbWFnZTogb3B0aW9ucy53b3JrZmxvd0NvbnRhaW5lckltYWdlLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBsYWJlbHM6IGF1dG9BcHByb3ZlTGFiZWwoZGVwc0F1dG9BcHByb3ZlKSxcbiAgICAgICAgICBnaXRJZGVudGl0eTogdGhpcy53b3JrZmxvd0dpdElkZW50aXR5LFxuICAgICAgICAgIHBlcm1pc3Npb25zOiB3b3JrZmxvd1Blcm1pc3Npb25zLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIHRoaXMudXBncmFkZVdvcmtmbG93ID0gbmV3IFVwZ3JhZGVEZXBlbmRlbmNpZXMoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIGRlZXBNZXJnZShbZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMuZGVwc1VwZ3JhZGVPcHRpb25zID8/IHt9XSksXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnB1bGxSZXF1ZXN0VGVtcGxhdGUgPz8gdHJ1ZSkge1xuICAgICAgdGhpcy5naXRodWI/LmFkZFB1bGxSZXF1ZXN0VGVtcGxhdGUoXG4gICAgICAgIC4uLihvcHRpb25zLnB1bGxSZXF1ZXN0VGVtcGxhdGVDb250ZW50cyA/PyBbXSksXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHByb2plbnJjSnMgPSBvcHRpb25zLnByb2plbnJjSnMgPz8gIW9wdGlvbnMucHJvamVucmNKc29uO1xuICAgIGlmICghdGhpcy5wYXJlbnQgJiYgcHJvamVucmNKcykge1xuICAgICAgY29uc3QgcHJvamVucmNKc0ZpbGUgPSBuZXcgUHJvamVucmModGhpcywgb3B0aW9ucy5wcm9qZW5yY0pzT3B0aW9ucyk7XG5cbiAgICAgIHRoaXMubnBtaWdub3JlPy5leGNsdWRlKGAvJHtwcm9qZW5yY0pzRmlsZS5maWxlUGF0aH1gKTtcbiAgICB9IGVsc2UgaWYgKG9wdGlvbnMucHJvamVucmNKc29uKSB7XG4gICAgICBjb25zdCBwcm9qZW5yY0pzb25GaWxlID0gUHJvamVucmNKc29uLm9mKHRoaXMpO1xuICAgICAgaWYgKHByb2plbnJjSnNvbkZpbGUpIHtcbiAgICAgICAgdGhpcy5ucG1pZ25vcmU/LmV4Y2x1ZGUoYC8ke3Byb2plbnJjSnNvbkZpbGUuZmlsZVBhdGh9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYWRkIGEgYnVuZGxlciBjb21wb25lbnQgLSB0aGlzIGVuYWJsZXMgdGhpbmdzIGxpa2UgTGFtYmRhIGJ1bmRsaW5nIGFuZCBpbiB0aGUgZnV0dXJlIHdlYiBidW5kbGluZy5cbiAgICB0aGlzLmJ1bmRsZXIgPSBuZXcgQnVuZGxlcih0aGlzLCBvcHRpb25zLmJ1bmRsZXJPcHRpb25zKTtcblxuICAgIGNvbnN0IHNob3VsZFBhY2thZ2UgPSBvcHRpb25zLnBhY2thZ2UgPz8gdHJ1ZTtcbiAgICBpZiAocmVsZWFzZSAmJiAhc2hvdWxkUGFja2FnZSkge1xuICAgICAgdGhpcy5sb2dnZXIud2FybihcbiAgICAgICAgXCJXaGVuIGByZWxlYXNlYCBpcyBlbmFibGVkLCBgcGFja2FnZWAgbXVzdCBhbHNvIGJlIGVuYWJsZWQgYXMgaXQgaXMgcmVxdWlyZWQgYnkgcmVsZWFzZS4gRm9yY2UgZW5hYmxpbmcgYHBhY2thZ2VgLlwiLFxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHJlbGVhc2UgfHwgc2hvdWxkUGFja2FnZSkge1xuICAgICAgdGhpcy5wYWNrYWdlVGFzay5leGVjQXJncyhbXG4gICAgICAgIFwibWtkaXJcIixcbiAgICAgICAgXCItcFwiLFxuICAgICAgICB0aGlzLmFydGlmYWN0c0phdmFzY3JpcHREaXJlY3RvcnksXG4gICAgICBdKTtcblxuICAgICAgY29uc3QgcGtnTWdyID1cbiAgICAgICAgdGhpcy5wYWNrYWdlLnBhY2thZ2VNYW5hZ2VyID09PSBOb2RlUGFja2FnZU1hbmFnZXIuUE5QTVxuICAgICAgICAgID8gXCJwbnBtXCJcbiAgICAgICAgICA6IFwibnBtXCI7XG4gICAgICB0aGlzLnBhY2thZ2VUYXNrLmV4ZWNBcmdzKFtcbiAgICAgICAgcGtnTWdyLFxuICAgICAgICBcInBhY2tcIixcbiAgICAgICAgXCItLXBhY2stZGVzdGluYXRpb25cIixcbiAgICAgICAgdGhpcy5hcnRpZmFjdHNKYXZhc2NyaXB0RGlyZWN0b3J5LFxuICAgICAgXSk7XG4gICAgfVxuXG4gICAgaWYgKG11bHRpcGxlU2VsZWN0ZWQoW29wdGlvbnMuYmlvbWUsIG9wdGlvbnMucHJldHRpZXJdKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiT25seSBvbmUgb2YgYmlvbWUgYW5kIHByZXR0aWVyIGNhbiBiZSBlbmFibGVkLlwiKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5iaW9tZSA/PyBmYWxzZSkge1xuICAgICAgdGhpcy5iaW9tZSA9IG5ldyBCaW9tZSh0aGlzLCB7IC4uLm9wdGlvbnMuYmlvbWVPcHRpb25zIH0pO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnByZXR0aWVyID8/IGZhbHNlKSB7XG4gICAgICB0aGlzLnByZXR0aWVyID0gbmV3IFByZXR0aWVyKHRoaXMsIHsgLi4ub3B0aW9ucy5wcmV0dGllck9wdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgLy8gRm9yIFBOUE0gPCAxMCwgdGhlIGRlZmF1bHQgcmVzb2x1dGlvbiBtb2RlIGlzIFwibG93ZXN0XCIsIHdoaWNoIGxlYWRzIHRvIGFueSBub24tdmVyc2lvbmVkIChpZSAnKicpIGRlcGVuZGVuY2llcyBiZWluZ1xuICAgIC8vIHJlc29sdmVkIHRvIHRoZSBsb3dlc3QgYXZhaWxhYmxlIHZlcnNpb24sIHdoaWNoIGlzIHVubGlrZWx5IHRvIGJlIGV4cGVjdGVkIGJlaGF2aW91ciBmb3IgdXNlcnMuIFdlIHNldCByZXNvbHV0aW9uXG4gICAgLy8gbW9kZSB0byBcImhpZ2hlc3RcIiB0byBtYXRjaCB0aGUgYmVoYXZpb3VyIG9mIHlhcm4gYW5kIG5wbS4gUE5QTSAxMCsgZGVmYXVsdHMgdG8gXCJoaWdoZXN0XCIgYWxyZWFkeS5cbiAgICBpZiAoXG4gICAgICB0aGlzLnBhY2thZ2UucGFja2FnZU1hbmFnZXIgPT09IE5vZGVQYWNrYWdlTWFuYWdlci5QTlBNICYmXG4gICAgICBzZW12ZXIubHQoc2VtdmVyLmNvZXJjZSh0aGlzLnBhY2thZ2UucG5wbVZlcnNpb24pID8/IFwiMC4wLjBcIiwgXCIxMC4wLjBcIilcbiAgICApIHtcbiAgICAgIHRoaXMubnBtcmMuYWRkQ29uZmlnKFwicmVzb2x1dGlvbi1tb2RlXCIsIFwiaGlnaGVzdFwiKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5jaGVja0xpY2Vuc2VzKSB7XG4gICAgICBuZXcgTGljZW5zZUNoZWNrZXIodGhpcywgb3B0aW9ucy5jaGVja0xpY2Vuc2VzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRldGVybWluZUluc3RhbGxXb3JraW5nRGlyZWN0b3J5KCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKHRoaXMucGFyZW50KSB7XG4gICAgICByZXR1cm4gZW5zdXJlUmVsYXRpdmVQYXRoU3RhcnRzV2l0aERvdChyZWxhdGl2ZShcIi5cIiwgdGhpcy5yb290Lm91dGRpcikpO1xuICAgIH1cbiAgICByZXR1cm47XG4gIH1cblxuICBwcml2YXRlIGRldGVybWluZUlkVG9rZW5QZXJtaXNzaW9ucyhcbiAgICBvcHRpb25zOiBOb2RlUHJvamVjdE9wdGlvbnMsXG4gICk6IEpvYlBlcm1pc3Npb24gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHsgY29kZUNvdlRva2VuU2VjcmV0LCBzY29wZWRQYWNrYWdlc09wdGlvbnMsIGNvZGVBcnRpZmFjdE9wdGlvbnMgfSA9XG4gICAgICBvcHRpb25zO1xuXG4gICAgY29uc3QgdXNlQ29kZUNvdmVPaWRjID0gdGhpcy51c2VDb2RlY292KG9wdGlvbnMpICYmICFjb2RlQ292VG9rZW5TZWNyZXQ7XG4gICAgY29uc3QgaGFzU2NvcGVkUGFja2FnZXMgPSAoc2NvcGVkUGFja2FnZXNPcHRpb25zID8/IFtdKS5sZW5ndGggPiAwO1xuICAgIGNvbnN0IHVzZUNvZGVBcnRpZmFjdE9pZGMgPVxuICAgICAgY29kZUFydGlmYWN0T3B0aW9ucz8uYXV0aFByb3ZpZGVyID09PVxuICAgICAgQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyLkdJVEhVQl9PSURDO1xuXG4gICAgaWYgKHVzZUNvZGVDb3ZlT2lkYyB8fCAodXNlQ29kZUFydGlmYWN0T2lkYyAmJiBoYXNTY29wZWRQYWNrYWdlcykpIHtcbiAgICAgIHJldHVybiBKb2JQZXJtaXNzaW9uLldSSVRFO1xuICAgIH1cblxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIHVzZUNvZGVjb3Yob3B0aW9uczogTm9kZVByb2plY3RPcHRpb25zKTogYm9vbGVhbiB7XG4gICAgLy8gVXNlIENvZGVjb3Ygd2hlbiBpdCBpcyBlbmFibGVkIG9yIGlmIG9yIGEgc2VjcmV0IHRva2VuIG5hbWUgaXMgcGFzc2VkIGluXG4gICAgLy8gQU5EIGplc3QgbXVzdCBiZSBjb25maWd1cmVkXG4gICAgcmV0dXJuIChvcHRpb25zLmNvZGVDb3YgfHwgb3B0aW9ucy5jb2RlQ292VG9rZW5TZWNyZXQpICYmIHRoaXMuamVzdD8uY29uZmlnO1xuICB9XG5cbiAgcHJpdmF0ZSBtYXliZUFkZENvZGVjb3ZJZ25vcmVzKG9wdGlvbnM6IE5vZGVQcm9qZWN0T3B0aW9ucykge1xuICAgIGlmICh0aGlzLnVzZUNvZGVjb3Yob3B0aW9ucykpIHtcbiAgICAgIHRoaXMuYWRkR2l0SWdub3JlKFwiY29kZWNvdlwiKTtcbiAgICAgIHRoaXMuYWRkR2l0SWdub3JlKFwiY29kZWNvdi4qXCIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyVXBsb2FkQ292ZXJhZ2VKb2JTdGVwKG9wdGlvbnM6IE5vZGVQcm9qZWN0T3B0aW9ucyk6IEpvYlN0ZXBbXSB7XG4gICAgLy8gcnVuIGNvZGVjb3YgaWYgZW5hYmxlZCBvciBhIHNlY3JldCB0b2tlbiBuYW1lIGlzIHBhc3NlZCBpblxuICAgIC8vIEFORCBqZXN0IG11c3QgYmUgY29uZmlndXJlZFxuICAgIGlmICh0aGlzLnVzZUNvZGVjb3Yob3B0aW9ucykpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIlVwbG9hZCBjb3ZlcmFnZSB0byBDb2RlY292XCIsXG4gICAgICAgICAgdXNlczogXCJjb2RlY292L2NvZGVjb3YtYWN0aW9uQHY2XCIsXG4gICAgICAgICAgd2l0aDogb3B0aW9ucy5jb2RlQ292VG9rZW5TZWNyZXRcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIHRva2VuOiBgXFwke3sgc2VjcmV0cy4ke29wdGlvbnMuY29kZUNvdlRva2VuU2VjcmV0fSB9fWAsXG4gICAgICAgICAgICAgICAgZGlyZWN0b3J5OiB0aGlzLmplc3Q/LmNvbmZpZy5jb3ZlcmFnZURpcmVjdG9yeSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgZGlyZWN0b3J5OiB0aGlzLmplc3Q/LmNvbmZpZy5jb3ZlcmFnZURpcmVjdG9yeSxcbiAgICAgICAgICAgICAgICB1c2Vfb2lkYzogdHJ1ZSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgYWRkQmlucyhiaW5zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KSB7XG4gICAgdGhpcy5wYWNrYWdlLmFkZEJpbihiaW5zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyB0aGUgY29udGVudHMgb2YgYW4gbnBtIHBhY2thZ2UuanNvbiBzY3JpcHQuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBzY3JpcHQgbmFtZVxuICAgKiBAcGFyYW0gY29tbWFuZCBUaGUgY29tbWFuZCB0byBleGVjdXRlXG4gICAqL1xuICBwdWJsaWMgc2V0U2NyaXB0KG5hbWU6IHN0cmluZywgY29tbWFuZDogc3RyaW5nKSB7XG4gICAgdGhpcy5wYWNrYWdlLnNldFNjcmlwdChuYW1lLCBjb21tYW5kKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXBsYWNlcyB0aGUgY29udGVudHMgb2YgbXVsdGlwbGUgbnBtIHBhY2thZ2UuanNvbiBzY3JpcHRzLlxuICAgKiBAcGFyYW0gc2NyaXB0cyBUaGUgc2NyaXB0cyB0byBzZXRcbiAgICovXG4gIHB1YmxpYyBhZGRTY3JpcHRzKHNjcmlwdHM6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9KSB7XG4gICAgZm9yIChjb25zdCBbbmFtZSwgY29tbWFuZF0gb2YgT2JqZWN0LmVudHJpZXMoc2NyaXB0cykpIHtcbiAgICAgIHRoaXMucGFja2FnZS5zZXRTY3JpcHQobmFtZSwgY29tbWFuZCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbW92ZXMgdGhlIG5wbSBzY3JpcHQgKGFsd2F5cyBzdWNjZXNzZnVsKS5cbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHNjcmlwdC5cbiAgICovXG4gIHB1YmxpYyByZW1vdmVTY3JpcHQobmFtZTogc3RyaW5nKSB7XG4gICAgdGhpcy5wYWNrYWdlLnJlbW92ZVNjcmlwdChuYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEaXJlY3RseSBzZXQgZmllbGRzIGluIGBwYWNrYWdlLmpzb25gLlxuICAgKiBAcGFyYW0gZmllbGRzIFRoZSBmaWVsZHMgdG8gc2V0XG4gICAqL1xuICBwdWJsaWMgYWRkRmllbGRzKGZpZWxkczogeyBbbmFtZTogc3RyaW5nXTogYW55IH0pIHtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZmllbGRzKSkge1xuICAgICAgdGhpcy5wYWNrYWdlLmFkZEZpZWxkKG5hbWUsIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBrZXl3b3JkcyB0byBwYWNrYWdlLmpzb24gKGRlZHVwbGljYXRlZClcbiAgICogQHBhcmFtIGtleXdvcmRzIFRoZSBrZXl3b3JkcyB0byBhZGRcbiAgICovXG4gIHB1YmxpYyBhZGRLZXl3b3JkcyguLi5rZXl3b3Jkczogc3RyaW5nW10pIHtcbiAgICB0aGlzLnBhY2thZ2UuYWRkS2V5d29yZHMoLi4ua2V5d29yZHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzdGVwcyBmb3Igc2NvcGVkIHBhY2thZ2UgYWNjZXNzXG4gICAqXG4gICAqIEBwYXJhbSBjb2RlQXJ0aWZhY3RPcHRpb25zIERldGFpbHMgb2YgbG9nZ2luZyBpbiB0byBBV1NcbiAgICogQHJldHVybnMgYXJyYXkgb2Ygam9iIHN0ZXBzIHJlcXVpcmVkIGZvciBlYWNoIHByaXZhdGUgc2NvcGVkIHBhY2thZ2VzXG4gICAqL1xuICBwcml2YXRlIGdldFNjb3BlZFBhY2thZ2VTdGVwcyhcbiAgICBjb2RlQXJ0aWZhY3RPcHRpb25zOiBDb2RlQXJ0aWZhY3RPcHRpb25zIHwgdW5kZWZpbmVkLFxuICApOiBKb2JTdGVwW10ge1xuICAgIGNvbnN0IHBhcnNlZENvZGVBcnRpZmFjdE9wdGlvbnMgPSB7XG4gICAgICBhY2Nlc3NLZXlJZFNlY3JldDpcbiAgICAgICAgY29kZUFydGlmYWN0T3B0aW9ucz8uYWNjZXNzS2V5SWRTZWNyZXQgPz8gXCJBV1NfQUNDRVNTX0tFWV9JRFwiLFxuICAgICAgc2VjcmV0QWNjZXNzS2V5U2VjcmV0OlxuICAgICAgICBjb2RlQXJ0aWZhY3RPcHRpb25zPy5zZWNyZXRBY2Nlc3NLZXlTZWNyZXQgPz8gXCJBV1NfU0VDUkVUX0FDQ0VTU19LRVlcIixcbiAgICAgIHJvbGVUb0Fzc3VtZTogY29kZUFydGlmYWN0T3B0aW9ucz8ucm9sZVRvQXNzdW1lLFxuICAgICAgYXV0aFByb3ZpZGVyOiBjb2RlQXJ0aWZhY3RPcHRpb25zPy5hdXRoUHJvdmlkZXIsXG4gICAgfTtcblxuICAgIGNvbnN0IGV4ZWN1dGVQcm9qZW5Db21tYW5kID0gYCR7ZXhlY3V0ZUNvbW1hbmRQcmlvckluc3RhbGxhdGlvbih0aGlzLnBhY2thZ2UucGFja2FnZU1hbmFnZXIpfSBwcm9qZW5gO1xuXG4gICAgaWYgKFxuICAgICAgcGFyc2VkQ29kZUFydGlmYWN0T3B0aW9ucy5hdXRoUHJvdmlkZXIgPT09XG4gICAgICBOb2RlUGFja2FnZUNvZGVBcnRpZmFjdEF1dGhQcm92aWRlci5HSVRIVUJfT0lEQ1xuICAgICkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiQ29uZmlndXJlIEFXUyBDcmVkZW50aWFsc1wiLFxuICAgICAgICAgIHVzZXM6IFwiYXdzLWFjdGlvbnMvY29uZmlndXJlLWF3cy1jcmVkZW50aWFsc0B2NlwiLFxuICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgIFwiYXdzLXJlZ2lvblwiOiBcInVzLWVhc3QtMlwiLFxuICAgICAgICAgICAgXCJyb2xlLXRvLWFzc3VtZVwiOiBwYXJzZWRDb2RlQXJ0aWZhY3RPcHRpb25zLnJvbGVUb0Fzc3VtZSxcbiAgICAgICAgICAgIFwicm9sZS1kdXJhdGlvbi1zZWNvbmRzXCI6IDkwMCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJBV1MgQ29kZUFydGlmYWN0IExvZ2luXCIsXG4gICAgICAgICAgcnVuOiBgJHtleGVjdXRlUHJvamVuQ29tbWFuZH0gY2E6bG9naW5gLFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9XG5cbiAgICBpZiAocGFyc2VkQ29kZUFydGlmYWN0T3B0aW9ucy5yb2xlVG9Bc3N1bWUpIHtcbiAgICAgIHJldHVybiBbXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiBcIkNvbmZpZ3VyZSBBV1MgQ3JlZGVudGlhbHNcIixcbiAgICAgICAgICB1c2VzOiBcImF3cy1hY3Rpb25zL2NvbmZpZ3VyZS1hd3MtY3JlZGVudGlhbHNAdjZcIixcbiAgICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgICBcImF3cy1hY2Nlc3Mta2V5LWlkXCI6IHNlY3JldFRvU3RyaW5nKFxuICAgICAgICAgICAgICBwYXJzZWRDb2RlQXJ0aWZhY3RPcHRpb25zLmFjY2Vzc0tleUlkU2VjcmV0LFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIFwiYXdzLXNlY3JldC1hY2Nlc3Mta2V5XCI6IHNlY3JldFRvU3RyaW5nKFxuICAgICAgICAgICAgICBwYXJzZWRDb2RlQXJ0aWZhY3RPcHRpb25zLnNlY3JldEFjY2Vzc0tleVNlY3JldCxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBcImF3cy1yZWdpb25cIjogXCJ1cy1lYXN0LTJcIixcbiAgICAgICAgICAgIFwicm9sZS10by1hc3N1bWVcIjogcGFyc2VkQ29kZUFydGlmYWN0T3B0aW9ucy5yb2xlVG9Bc3N1bWUsXG4gICAgICAgICAgICBcInJvbGUtZHVyYXRpb24tc2Vjb25kc1wiOiA5MDAsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiQVdTIENvZGVBcnRpZmFjdCBMb2dpblwiLFxuICAgICAgICAgIHJ1bjogYCR7ZXhlY3V0ZVByb2plbkNvbW1hbmR9IGNhOmxvZ2luYCxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJBV1MgQ29kZUFydGlmYWN0IExvZ2luXCIsXG4gICAgICAgIHJ1bjogYCR7ZXhlY3V0ZVByb2plbkNvbW1hbmR9IGNhOmxvZ2luYCxcbiAgICAgICAgZW52OiB7XG4gICAgICAgICAgQVdTX0FDQ0VTU19LRVlfSUQ6IHNlY3JldFRvU3RyaW5nKFxuICAgICAgICAgICAgcGFyc2VkQ29kZUFydGlmYWN0T3B0aW9ucy5hY2Nlc3NLZXlJZFNlY3JldCxcbiAgICAgICAgICApLFxuICAgICAgICAgIEFXU19TRUNSRVRfQUNDRVNTX0tFWTogc2VjcmV0VG9TdHJpbmcoXG4gICAgICAgICAgICBwYXJzZWRDb2RlQXJ0aWZhY3RPcHRpb25zLnNlY3JldEFjY2Vzc0tleVNlY3JldCxcbiAgICAgICAgICApLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICBdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHNldCBvZiB3b3JrZmxvdyBzdGVwcyB3aGljaCBzaG91bGQgYmUgZXhlY3V0ZWQgdG8gYm9vdHN0cmFwIGFcbiAgICogd29ya2Zsb3cuXG4gICAqXG4gICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMuXG4gICAqIEByZXR1cm5zIEpvYiBzdGVwc1xuICAgKi9cbiAgcHVibGljIHJlbmRlcldvcmtmbG93U2V0dXAoXG4gICAgb3B0aW9uczogUmVuZGVyV29ya2Zsb3dTZXR1cE9wdGlvbnMgPSB7fSxcbiAgKTogSm9iU3RlcFtdIHtcbiAgICBjb25zdCBpbnN0YWxsID0gbmV3IEFycmF5PEpvYlN0ZXA+KCk7XG5cbiAgICAvLyBmaXJzdCBydW4gdGhlIHdvcmtmbG93IGJvb3RzdHJhcCBzdGVwc1xuICAgIGluc3RhbGwucHVzaCguLi50aGlzLndvcmtmbG93Qm9vdHN0cmFwU3RlcHMpO1xuXG4gICAgaWYgKGlzWWFybkJlcnJ5KHRoaXMucGFja2FnZS5wYWNrYWdlTWFuYWdlcikpIHtcbiAgICAgIGluc3RhbGwucHVzaCh7XG4gICAgICAgIG5hbWU6IFwiRW5hYmxlIGNvcmVwYWNrXCIsXG4gICAgICAgIHJ1bjogXCJjb3JlcGFjayBlbmFibGVcIixcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wYWNrYWdlLnBhY2thZ2VNYW5hZ2VyID09PSBOb2RlUGFja2FnZU1hbmFnZXIuUE5QTSkge1xuICAgICAgaW5zdGFsbC5wdXNoKHtcbiAgICAgICAgbmFtZTogXCJTZXR1cCBwbnBtXCIsXG4gICAgICAgIHVzZXM6IFwicG5wbS9hY3Rpb24tc2V0dXBAdjVcIixcbiAgICAgICAgd2l0aDogeyB2ZXJzaW9uOiB0aGlzLnBhY2thZ2UucG5wbVZlcnNpb24gfSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSBpZiAodGhpcy5wYWNrYWdlLnBhY2thZ2VNYW5hZ2VyID09PSBOb2RlUGFja2FnZU1hbmFnZXIuQlVOKSB7XG4gICAgICBpbnN0YWxsLnB1c2goe1xuICAgICAgICBuYW1lOiBcIlNldHVwIGJ1blwiLFxuICAgICAgICB1c2VzOiBcIm92ZW4tc2gvc2V0dXAtYnVuQHYyXCIsXG4gICAgICAgIHdpdGg6IHsgXCJidW4tdmVyc2lvblwiOiB0aGlzLnBhY2thZ2UuYnVuVmVyc2lvbiB9LFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGFja2FnZS5wYWNrYWdlTWFuYWdlciAhPT0gTm9kZVBhY2thZ2VNYW5hZ2VyLkJVTikge1xuICAgICAgaWYgKHRoaXMubm9kZVZlcnNpb24gfHwgdGhpcy53b3JrZmxvd1BhY2thZ2VDYWNoZSkge1xuICAgICAgICBjb25zdCBwbTogTm9kZVBhY2thZ2VNYW5hZ2VyID0gdGhpcy5wYWNrYWdlLnBhY2thZ2VNYW5hZ2VyO1xuICAgICAgICBjb25zdCBjYWNoZSA9XG4gICAgICAgICAgaXNZYXJuQ2xhc3NpYyhwbSkgfHwgaXNZYXJuQmVycnkocG0pXG4gICAgICAgICAgICA/IFwieWFyblwiXG4gICAgICAgICAgICA6IHBtID09PSBOb2RlUGFja2FnZU1hbmFnZXIuUE5QTVxuICAgICAgICAgICAgICA/IFwicG5wbVwiXG4gICAgICAgICAgICAgIDogXCJucG1cIjtcbiAgICAgICAgaW5zdGFsbC5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBcIlNldHVwIE5vZGUuanNcIixcbiAgICAgICAgICB1c2VzOiBcImFjdGlvbnMvc2V0dXAtbm9kZUB2NlwiLFxuICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgIC4uLih0aGlzLm5vZGVWZXJzaW9uICYmIHtcbiAgICAgICAgICAgICAgXCJub2RlLXZlcnNpb25cIjogdGhpcy5ub2RlVmVyc2lvbixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLi4uKHRoaXMud29ya2Zsb3dQYWNrYWdlQ2FjaGUgJiYge1xuICAgICAgICAgICAgICBjYWNoZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgXCJwYWNrYWdlLW1hbmFnZXItY2FjaGVcIjogdGhpcy53b3JrZmxvd1BhY2thZ2VDYWNoZSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjb25zdCBtdXRhYmxlID0gb3B0aW9ucy5tdXRhYmxlID8/IGZhbHNlO1xuXG4gICAgaWYgKHRoaXMucGFja2FnZS5zY29wZWRQYWNrYWdlc09wdGlvbnMpIHtcbiAgICAgIGluc3RhbGwucHVzaChcbiAgICAgICAgLi4udGhpcy5nZXRTY29wZWRQYWNrYWdlU3RlcHModGhpcy5wYWNrYWdlLmNvZGVBcnRpZmFjdE9wdGlvbnMpLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpbnN0YWxsLnB1c2goe1xuICAgICAgbmFtZTogXCJJbnN0YWxsIGRlcGVuZGVuY2llc1wiLFxuICAgICAgcnVuOiBtdXRhYmxlXG4gICAgICAgID8gdGhpcy5wYWNrYWdlLmluc3RhbGxBbmRVcGRhdGVMb2NrZmlsZUNvbW1hbmRcbiAgICAgICAgOiB0aGlzLnBhY2thZ2UuaW5zdGFsbENvbW1hbmQsXG4gICAgICAuLi4ob3B0aW9ucy5pbnN0YWxsU3RlcENvbmZpZ3VyYXRpb24gPz8ge30pLFxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGluc3RhbGw7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBub3JtYWwgZGVwZW5kZW5jaWVzLlxuICAgKlxuICAgKiBAcGFyYW0gZGVwcyBOYW1lcyBtb2R1bGVzIHRvIGluc3RhbGwuIEJ5IGRlZmF1bHQsIHRoZSB0aGUgZGVwZW5kZW5jeSB3aWxsXG4gICAqIGJlIGluc3RhbGxlZCBpbiB0aGUgbmV4dCBgcG5wbSBwcm9qZW5gIHJ1biBhbmQgdGhlIHZlcnNpb24gd2lsbCBiZSByZWNvcmRlZFxuICAgKiBpbiB5b3VyIGBwYWNrYWdlLmpzb25gIGZpbGUuIFlvdSBjYW4gdXBncmFkZSBtYW51YWxseSBvciB1c2luZyBgcG5wbVxuICAgKiBhZGQvdXBkYXRlYC4gSWYgeW91IHdpc2ggdG8gc3BlY2lmeSBhIHZlcnNpb24gcmFuZ2UgdXNlIHRoaXMgc3ludGF4OlxuICAgKiBgbW9kdWxlQF43YC5cbiAgICovXG4gIHB1YmxpYyBhZGREZXBzKC4uLmRlcHM6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIHRoaXMucGFja2FnZS5hZGREZXBzKC4uLmRlcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgZGV2ZWxvcG1lbnQvdGVzdCBkZXBlbmRlbmNpZXMuXG4gICAqXG4gICAqIEBwYXJhbSBkZXBzIE5hbWVzIG1vZHVsZXMgdG8gaW5zdGFsbC4gQnkgZGVmYXVsdCwgdGhlIHRoZSBkZXBlbmRlbmN5IHdpbGxcbiAgICogYmUgaW5zdGFsbGVkIGluIHRoZSBuZXh0IGBwbnBtIHByb2plbmAgcnVuIGFuZCB0aGUgdmVyc2lvbiB3aWxsIGJlIHJlY29yZGVkXG4gICAqIGluIHlvdXIgYHBhY2thZ2UuanNvbmAgZmlsZS4gWW91IGNhbiB1cGdyYWRlIG1hbnVhbGx5IG9yIHVzaW5nIGBwbnBtXG4gICAqIGFkZC91cGRhdGVgLiBJZiB5b3Ugd2lzaCB0byBzcGVjaWZ5IGEgdmVyc2lvbiByYW5nZSB1c2UgdGhpcyBzeW50YXg6XG4gICAqIGBtb2R1bGVAXjdgLlxuICAgKi9cbiAgcHVibGljIGFkZERldkRlcHMoLi4uZGVwczogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gdGhpcy5wYWNrYWdlLmFkZERldkRlcHMoLi4uZGVwcyk7XG4gIH1cblxuICAvKipcbiAgICogRGVmaW5lcyBwZWVyIGRlcGVuZGVuY2llcy5cbiAgICpcbiAgICogV2hlbiBhZGRpbmcgcGVlciBkZXBlbmRlbmNpZXMsIGEgZGV2RGVwZW5kZW5jeSB3aWxsIGFsc28gYmUgYWRkZWQgb24gdGhlXG4gICAqIHBpbm5lZCB2ZXJzaW9uIG9mIHRoZSBkZWNsYXJlZCBwZWVyLiBUaGlzIHdpbGwgZW5zdXJlIHRoYXQgeW91IGFyZSB0ZXN0aW5nXG4gICAqIHlvdXIgY29kZSBhZ2FpbnN0IHRoZSBtaW5pbXVtIHZlcnNpb24gcmVxdWlyZWQgZnJvbSB5b3VyIGNvbnN1bWVycy5cbiAgICpcbiAgICogQHBhcmFtIGRlcHMgTmFtZXMgbW9kdWxlcyB0byBpbnN0YWxsLiBCeSBkZWZhdWx0LCB0aGUgdGhlIGRlcGVuZGVuY3kgd2lsbFxuICAgKiBiZSBpbnN0YWxsZWQgaW4gdGhlIG5leHQgYHBucG0gcHJvamVuYCBydW4gYW5kIHRoZSB2ZXJzaW9uIHdpbGwgYmUgcmVjb3JkZWRcbiAgICogaW4geW91ciBgcGFja2FnZS5qc29uYCBmaWxlLiBZb3UgY2FuIHVwZ3JhZGUgbWFudWFsbHkgb3IgdXNpbmcgYHBucG1cbiAgICogYWRkL3VwZGF0ZWAuIElmIHlvdSB3aXNoIHRvIHNwZWNpZnkgYSB2ZXJzaW9uIHJhbmdlIHVzZSB0aGlzIHN5bnRheDpcbiAgICogYG1vZHVsZUBeN2AuXG4gICAqL1xuICBwdWJsaWMgYWRkUGVlckRlcHMoLi4uZGVwczogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gdGhpcy5wYWNrYWdlLmFkZFBlZXJEZXBzKC4uLmRlcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYnVuZGxlZCBkZXBlbmRlbmNpZXMuXG4gICAqXG4gICAqIEJ1bmRsZWQgZGVwZW5kZW5jaWVzIHdpbGwgYmUgYWRkZWQgYXMgbm9ybWFsIGRlcGVuZGVuY2llcyBhcyB3ZWxsIGFzIHRvIHRoZVxuICAgKiBgYnVuZGxlZERlcGVuZGVuY2llc2Agc2VjdGlvbiBvZiB5b3VyIGBwYWNrYWdlLmpzb25gLlxuICAgKlxuICAgKiBAcGFyYW0gZGVwcyBOYW1lcyBtb2R1bGVzIHRvIGluc3RhbGwuIEJ5IGRlZmF1bHQsIHRoZSB0aGUgZGVwZW5kZW5jeSB3aWxsXG4gICAqIGJlIGluc3RhbGxlZCBpbiB0aGUgbmV4dCBgcG5wbSBwcm9qZW5gIHJ1biBhbmQgdGhlIHZlcnNpb24gd2lsbCBiZSByZWNvcmRlZFxuICAgKiBpbiB5b3VyIGBwYWNrYWdlLmpzb25gIGZpbGUuIFlvdSBjYW4gdXBncmFkZSBtYW51YWxseSBvciB1c2luZyBgcG5wbVxuICAgKiBhZGQvdXBkYXRlYC4gSWYgeW91IHdpc2ggdG8gc3BlY2lmeSBhIHZlcnNpb24gcmFuZ2UgdXNlIHRoaXMgc3ludGF4OlxuICAgKiBgbW9kdWxlQF43YC5cbiAgICovXG4gIHB1YmxpYyBhZGRCdW5kbGVkRGVwcyguLi5kZXBzOiBzdHJpbmdbXSkge1xuICAgIHJldHVybiB0aGlzLnBhY2thZ2UuYWRkQnVuZGxlZERlcHMoLi4uZGVwcyk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBwYXR0ZXJucyB0byBiZSBpZ25vcmVkIGJ5IG5wbS5cbiAgICpcbiAgICogQHBhcmFtIHBhdHRlcm4gVGhlIHBhdHRlcm4gdG8gaWdub3JlLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBJZiB5b3UgYXJlIGhhdmluZyB0cm91YmxlIGdldHRpbmcgYW4gaWdub3JlIHRvIHBvcHVsYXRlLCB0cnkgdXNpbmcgeW91ciBjb25zdHJ1Y3Qgb3IgY29tcG9uZW50J3MgcHJlU3ludGhlc2l6ZSBtZXRob2QgdG8gcHJvcGVybHkgZGVsYXkgY2FsbGluZyB0aGlzIG1ldGhvZC5cbiAgICovXG4gIHB1YmxpYyBvdmVycmlkZSBhZGRQYWNrYWdlSWdub3JlKHBhdHRlcm46IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMubnBtaWdub3JlPy5hZGRQYXR0ZXJucyhwYXR0ZXJuKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkTGljZW5zZShvcHRpb25zOiBOb2RlUHJvamVjdE9wdGlvbnMpIHtcbiAgICBpZiAodGhpcy5wYWNrYWdlLmxpY2Vuc2UpIHtcbiAgICAgIG5ldyBMaWNlbnNlKHRoaXMsIHtcbiAgICAgICAgc3BkeDogdGhpcy5wYWNrYWdlLmxpY2Vuc2UsXG4gICAgICAgIGNvcHlyaWdodE93bmVyOiBvcHRpb25zLmNvcHlyaWdodE93bmVyID8/IG9wdGlvbnMuYXV0aG9yTmFtZSxcbiAgICAgICAgY29weXJpZ2h0UGVyaW9kOiBvcHRpb25zLmNvcHlyaWdodFBlcmlvZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkRGVmYXVsdEdpdElnbm9yZSgpIHtcbiAgICB0aGlzLmdpdGlnbm9yZS5leGNsdWRlKFxuICAgICAgXCIjIExvZ3NcIixcbiAgICAgIFwibG9nc1wiLFxuICAgICAgXCIqLmxvZ1wiLFxuICAgICAgXCJucG0tZGVidWcubG9nKlwiLFxuICAgICAgXCJ5YXJuLWRlYnVnLmxvZypcIixcbiAgICAgIFwieWFybi1lcnJvci5sb2cqXCIsXG4gICAgICBcImxlcm5hLWRlYnVnLmxvZypcIixcblxuICAgICAgXCIjIERpYWdub3N0aWMgcmVwb3J0cyAoaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9yZXBvcnQuaHRtbClcIixcbiAgICAgIFwicmVwb3J0LlswLTldKi5bMC05XSouWzAtOV0qLlswLTldKi5qc29uXCIsXG5cbiAgICAgIFwiIyBSdW50aW1lIGRhdGFcIixcbiAgICAgIFwicGlkc1wiLFxuICAgICAgXCIqLnBpZFwiLFxuICAgICAgXCIqLnNlZWRcIixcbiAgICAgIFwiKi5waWQubG9ja1wiLFxuXG4gICAgICBcIiMgRGlyZWN0b3J5IGZvciBpbnN0cnVtZW50ZWQgbGlicyBnZW5lcmF0ZWQgYnkganNjb3ZlcmFnZS9KU0NvdmVyXCIsXG4gICAgICBcImxpYi1jb3ZcIixcblxuICAgICAgXCIjIENvdmVyYWdlIGRpcmVjdG9yeSB1c2VkIGJ5IHRvb2xzIGxpa2UgaXN0YW5idWxcIixcbiAgICAgIFwiY292ZXJhZ2VcIixcbiAgICAgIFwiKi5sY292XCIsXG5cbiAgICAgIFwiIyBueWMgdGVzdCBjb3ZlcmFnZVwiLFxuICAgICAgXCIubnljX291dHB1dFwiLFxuXG4gICAgICBcIiMgQ29tcGlsZWQgYmluYXJ5IGFkZG9ucyAoaHR0cHM6Ly9ub2RlanMub3JnL2FwaS9hZGRvbnMuaHRtbClcIixcbiAgICAgIFwiYnVpbGQvUmVsZWFzZVwiLFxuXG4gICAgICBcIiMgRGVwZW5kZW5jeSBkaXJlY3Rvcmllc1wiLFxuICAgICAgXCJub2RlX21vZHVsZXMvXCIsXG4gICAgICBcImpzcG1fcGFja2FnZXMvXCIsXG5cbiAgICAgIFwiIyBUeXBlU2NyaXB0IGNhY2hlXCIsXG4gICAgICBcIioudHNidWlsZGluZm9cIixcblxuICAgICAgXCIjIE9wdGlvbmFsIGVzbGludCBjYWNoZVwiLFxuICAgICAgXCIuZXNsaW50Y2FjaGVcIixcblxuICAgICAgXCIjIE91dHB1dCBvZiAnbnBtIHBhY2snXCIsXG4gICAgICBcIioudGd6XCIsXG5cbiAgICAgIFwiIyBZYXJuIEludGVncml0eSBmaWxlXCIsXG4gICAgICBcIi55YXJuLWludGVncml0eVwiLFxuXG4gICAgICBcIiMgcGFyY2VsLWJ1bmRsZXIgY2FjaGUgKGh0dHBzOi8vcGFyY2VsanMub3JnLylcIixcbiAgICAgIFwiLmNhY2hlXCIsXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzaGVsbCBjb21tYW5kIHRvIGV4ZWN1dGUgaW4gb3JkZXIgdG8gcnVuIGEgdGFzay4gVGhpcyB3aWxsXG4gICAqIHR5cGljYWxseSBiZSBgcG5wbSBwcm9qZW4gVEFTS2AuXG4gICAqXG4gICAqIEBwYXJhbSB0YXNrIFRoZSB0YXNrIGZvciB3aGljaCB0aGUgY29tbWFuZCBpcyByZXF1aXJlZFxuICAgKi9cbiAgcHVibGljIHJ1blRhc2tDb21tYW5kKHRhc2s6IFRhc2spIHtcbiAgICByZXR1cm4gYCR7dGhpcy5wcm9qZW5Db21tYW5kfSAke3Rhc2submFtZX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBqb2IgSUQgb2YgdGhlIGJ1aWxkIHdvcmtmbG93LlxuICAgKi9cbiAgcHVibGljIGdldCBidWlsZFdvcmtmbG93Sm9iSWQoKSB7XG4gICAgcmV0dXJuIHRoaXMuYnVpbGRXb3JrZmxvdz8uYnVpbGRKb2JJZHNbMF07XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHNlY3VyaXR5IGF1ZGl0IHRhc2suXG4gICAqL1xuICBwcml2YXRlIGFkZEF1ZGl0VGFzayhvcHRpb25zOiBOb2RlUHJvamVjdE9wdGlvbnMpOiBUYXNrIHtcbiAgICBjb25zdCBhdWRpdExldmVsID0gb3B0aW9ucy5hdWRpdERlcHNPcHRpb25zPy5sZXZlbCA/PyBcImhpZ2hcIjtcbiAgICBjb25zdCBhdWRpdFByb2RPbmx5ID0gb3B0aW9ucy5hdWRpdERlcHNPcHRpb25zPy5wcm9kT25seSA/PyBmYWxzZTtcblxuICAgIC8vIENyZWF0ZSBhdWRpdCB0YXNrXG4gICAgY29uc3QgYXVkaXRUYXNrID0gdGhpcy50YXNrcy5hZGRUYXNrKFwiYXVkaXRcIiwge1xuICAgICAgZGVzY3JpcHRpb246IFwiUnVuIHNlY3VyaXR5IGF1ZGl0XCIsXG4gICAgfSk7XG5cbiAgICAvLyBBZGQgcGFja2FnZSBtYW5hZ2VyIHNwZWNpZmljIGF1ZGl0IGNvbW1hbmRcbiAgICBjb25zdCBhdWRpdENvbW1hbmQgPSB0aGlzLmdldEF1ZGl0Q29tbWFuZChhdWRpdExldmVsLCBhdWRpdFByb2RPbmx5KTtcbiAgICBhdWRpdFRhc2suZXhlYyhhdWRpdENvbW1hbmQpO1xuXG4gICAgcmV0dXJuIGF1ZGl0VGFzaztcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBhcHByb3ByaWF0ZSBhdWRpdCBjb21tYW5kIGZvciB0aGUgcGFja2FnZSBtYW5hZ2VyLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRBdWRpdENvbW1hbmQobGV2ZWw6IHN0cmluZywgcHJvZE9ubHk6IGJvb2xlYW4pOiBzdHJpbmcge1xuICAgIGNvbnN0IGxldmVsRmxhZyA9IHRoaXMuZ2V0QXVkaXRMZXZlbEZsYWcobGV2ZWwpO1xuICAgIGNvbnN0IHByb2RGbGFnID0gcHJvZE9ubHkgPyB0aGlzLmdldEF1ZGl0UHJvZEZsYWcoKSA6IFwiXCI7XG5cbiAgICBzd2l0Y2ggKHRoaXMucGFja2FnZS5wYWNrYWdlTWFuYWdlcikge1xuICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuTlBNOlxuICAgICAgICByZXR1cm4gYG5wbSBhdWRpdCR7bGV2ZWxGbGFnfSR7cHJvZEZsYWd9YDtcbiAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLllBUk46XG4gICAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5ZQVJOX0NMQVNTSUM6XG4gICAgICAgIC8vIFVzZSBOb2RlLmpzIHRvIGNhbGwgeWFybiBhbmQgaGFuZGxlIGV4aXQgY29kZSBjcm9zcy1wbGF0Zm9ybVxuICAgICAgICBjb25zdCB0aHJlc2hvbGQgPSB0aGlzLmdldFlhcm5DbGFzc2ljVGhyZXNob2xkKGxldmVsKTtcbiAgICAgICAgcmV0dXJuIGBub2RlIC1lIFwiY29uc3QgeyBleGVjU3luYyB9ID0gcmVxdWlyZSgnY2hpbGRfcHJvY2VzcycpOyB0cnkgeyBleGVjU3luYygneWFybiBhdWRpdCR7bGV2ZWxGbGFnfSR7cHJvZEZsYWd9Jywge3N0ZGlvOiAnaW5oZXJpdCd9KTsgfSBjYXRjaChlKSB7IHByb2Nlc3MuZXhpdChlLnN0YXR1cyA8ICR7dGhyZXNob2xkfSA/IDAgOiAxKTsgfVwiYDtcbiAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLllBUk4yOlxuICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuWUFSTl9CRVJSWTpcbiAgICAgICAgcmV0dXJuIGB5YXJuIG5wbSBhdWRpdCAtLXJlY3Vyc2l2ZSR7bGV2ZWxGbGFnfSR7cHJvZEZsYWd9YDtcbiAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLlBOUE06XG4gICAgICAgIHJldHVybiBgcG5wbSBhdWRpdCR7bGV2ZWxGbGFnfSR7cHJvZEZsYWd9YDtcbiAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLkJVTjpcbiAgICAgICAgcmV0dXJuIGBidW4gYXVkaXQke2xldmVsRmxhZ30ke3Byb2RGbGFnfWA7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgYFVuc3VwcG9ydGVkIHBhY2thZ2UgbWFuYWdlcjogJHt0aGlzLnBhY2thZ2UucGFja2FnZU1hbmFnZXJ9YCxcbiAgICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgdGhyZXNob2xkIHZhbHVlIGZvciB5YXJuIGNsYXNzaWMgYmFzZWQgb24gdnVsbmVyYWJpbGl0eSBsZXZlbC5cbiAgICovXG4gIHByaXZhdGUgZ2V0WWFybkNsYXNzaWNUaHJlc2hvbGQobGV2ZWw6IHN0cmluZyk6IG51bWJlciB7XG4gICAgc3dpdGNoIChsZXZlbCkge1xuICAgICAgY2FzZSBcImxvd1wiOlxuICAgICAgICByZXR1cm4gMjsgLy8gUGFzcyBmb3IgZXhpdCBjb2RlIDwgMiwgZmFpbCBmb3IgPj0gMiAoTE9XIGFuZCBhYm92ZSlcbiAgICAgIGNhc2UgXCJtb2RlcmF0ZVwiOlxuICAgICAgICByZXR1cm4gNDsgLy8gUGFzcyBmb3IgZXhpdCBjb2RlIDwgNCwgZmFpbCBmb3IgPj0gNCAoTU9ERVJBVEUgYW5kIGFib3ZlKVxuICAgICAgY2FzZSBcImhpZ2hcIjpcbiAgICAgICAgcmV0dXJuIDg7IC8vIFBhc3MgZm9yIGV4aXQgY29kZSA8IDgsIGZhaWwgZm9yID49IDggKEhJR0ggYW5kIGFib3ZlKVxuICAgICAgY2FzZSBcImNyaXRpY2FsXCI6XG4gICAgICAgIHJldHVybiAxNjsgLy8gUGFzcyBmb3IgZXhpdCBjb2RlIDwgMTYsIGZhaWwgZm9yID49IDE2IChDUklUSUNBTClcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAyO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBhdWRpdCBsZXZlbCBmbGFnIGZvciB0aGUgcGFja2FnZSBtYW5hZ2VyLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRBdWRpdExldmVsRmxhZyhsZXZlbDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBzd2l0Y2ggKHRoaXMucGFja2FnZS5wYWNrYWdlTWFuYWdlcikge1xuICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuTlBNOlxuICAgICAgICByZXR1cm4gYCAtLWF1ZGl0LWxldmVsPSR7bGV2ZWx9YDtcbiAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLllBUk46XG4gICAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5ZQVJOX0NMQVNTSUM6XG4gICAgICAgIHJldHVybiBgIC0tbGV2ZWwgJHtsZXZlbH1gO1xuICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuWUFSTjI6XG4gICAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5ZQVJOX0JFUlJZOlxuICAgICAgICByZXR1cm4gYCAtLXNldmVyaXR5ICR7bGV2ZWx9YDtcbiAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLlBOUE06XG4gICAgICAgIHJldHVybiBgIC0tYXVkaXQtbGV2ZWwgJHtsZXZlbH1gO1xuICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuQlVOOlxuICAgICAgICByZXR1cm4gYCAtLWF1ZGl0LWxldmVsICR7bGV2ZWx9YDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBcIlwiO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBwcm9kdWN0aW9uLW9ubHkgZmxhZyBmb3IgdGhlIHBhY2thZ2UgbWFuYWdlci5cbiAgICovXG4gIHByaXZhdGUgZ2V0QXVkaXRQcm9kRmxhZygpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAodGhpcy5wYWNrYWdlLnBhY2thZ2VNYW5hZ2VyKSB7XG4gICAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5OUE06XG4gICAgICAgIHJldHVybiBcIiAtLW9taXQ9ZGV2XCI7XG4gICAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5ZQVJOOlxuICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuWUFSTl9DTEFTU0lDOlxuICAgICAgICByZXR1cm4gXCIgLS1ncm91cHMgZGVwZW5kZW5jaWVzXCI7XG4gICAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5ZQVJOMjpcbiAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLllBUk5fQkVSUlk6XG4gICAgICAgIHJldHVybiBcIiAtLWVudmlyb25tZW50IHByb2R1Y3Rpb25cIjtcbiAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLlBOUE06XG4gICAgICAgIHJldHVybiBcIiAtLXByb2RcIjtcbiAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLkJVTjpcbiAgICAgICAgcmV0dXJuIFwiIC0tcHJvZHVjdGlvblwiO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIFwiXCI7XG4gICAgfVxuICB9XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYHJlbmRlcldvcmtmbG93U2V0dXAoKWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVyV29ya2Zsb3dTZXR1cE9wdGlvbnMge1xuICAvKipcbiAgICogQ29uZmlndXJlIHRoZSBpbnN0YWxsIHN0ZXAgaW4gdGhlIHdvcmtmbG93IHNldHVwLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGB7IG5hbWU6IFwiSW5zdGFsbCBkZXBlbmRlbmNpZXNcIiB9YFxuICAgKlxuICAgKiBAZXhhbXBsZSAtIHsgd29ya2luZ0RpcmVjdG9yeTogXCJyb290cHJvamVjdC1kaXJcIiB9IGZvciBzdWJwcm9qZWN0cyBpbnN0YWxsaW5nIGZyb20gcm9vdC5cbiAgICogQGV4YW1wbGUgLSB7IGVudjogeyBOUE1fVE9LRU46IFwidG9rZW5cIiB9fSBmb3IgaW5zdGFsbGluZyBmcm9tIHByaXZhdGUgbnBtIHJlZ2lzdHJ5LlxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFsbFN0ZXBDb25maWd1cmF0aW9uPzogSm9iU3RlcENvbmZpZ3VyYXRpb247XG4gIC8qKlxuICAgKiBTaG91bGQgdGhlIHBhY2thZ2UgbG9ja2ZpbGUgYmUgdXBkYXRlZD9cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IG11dGFibGU/OiBib29sZWFuO1xufVxuIl19
@@ -8,7 +8,7 @@ const ini_1 = require("../ini");
8
8
  * File representing the local NPM config in .npmrc
9
9
  */
10
10
  class NpmConfig extends component_1.Component {
11
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.NpmConfig", version: "0.100.6" };
11
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.NpmConfig", version: "0.100.7" };
12
12
  /**
13
13
  * The config object. This object can be mutated until the project is
14
14
  * synthesized.
@@ -113,7 +113,7 @@ var TrailingComma;
113
113
  * Represents prettier configuration.
114
114
  */
115
115
  class Prettier extends component_1.Component {
116
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Prettier", version: "0.100.6" };
116
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.javascript.Prettier", version: "0.100.7" };
117
117
  static of(project) {
118
118
  const isPrettier = (c) => c instanceof Prettier;
119
119
  return project.components.find(isPrettier);