projen 0.88.2 → 0.88.4

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 (177) hide show
  1. package/.jsii +29 -13
  2. package/lib/awscdk/auto-discover.js +5 -5
  3. package/lib/awscdk/awscdk-app-java.js +1 -1
  4. package/lib/awscdk/awscdk-app-py.js +1 -1
  5. package/lib/awscdk/awscdk-app-ts.js +1 -1
  6. package/lib/awscdk/awscdk-construct.js +2 -2
  7. package/lib/awscdk/awscdk-deps-java.js +1 -1
  8. package/lib/awscdk/awscdk-deps-js.js +1 -1
  9. package/lib/awscdk/awscdk-deps-py.js +1 -1
  10. package/lib/awscdk/awscdk-deps.js +1 -1
  11. package/lib/awscdk/cdk-config.js +1 -1
  12. package/lib/awscdk/cdk-tasks.js +1 -1
  13. package/lib/awscdk/integration-test.js +1 -1
  14. package/lib/awscdk/lambda-extension.js +1 -1
  15. package/lib/awscdk/lambda-function.js +2 -2
  16. package/lib/build/build-workflow.js +1 -1
  17. package/lib/cdk/auto-discover-base.js +2 -2
  18. package/lib/cdk/construct-lib.js +1 -1
  19. package/lib/cdk/integration-test-base.js +1 -1
  20. package/lib/cdk/jsii-docgen.js +1 -1
  21. package/lib/cdk/jsii-project.js +1 -1
  22. package/lib/cdk8s/auto-discover.js +2 -2
  23. package/lib/cdk8s/cdk8s-app-py.js +1 -1
  24. package/lib/cdk8s/cdk8s-app-ts.js +1 -1
  25. package/lib/cdk8s/cdk8s-construct.js +1 -1
  26. package/lib/cdk8s/cdk8s-deps-py.js +1 -1
  27. package/lib/cdk8s/cdk8s-deps.js +1 -1
  28. package/lib/cdk8s/integration-test.js +1 -1
  29. package/lib/cdktf/cdktf-construct.js +1 -1
  30. package/lib/circleci/circleci.js +1 -1
  31. package/lib/component.js +1 -1
  32. package/lib/dependencies.js +1 -1
  33. package/lib/dev-env.js +1 -1
  34. package/lib/docker-compose/docker-compose-service.js +1 -1
  35. package/lib/docker-compose/docker-compose.js +1 -1
  36. package/lib/file.js +1 -1
  37. package/lib/gitattributes.js +1 -1
  38. package/lib/github/actions-provider.js +1 -1
  39. package/lib/github/auto-approve.js +1 -1
  40. package/lib/github/auto-merge.js +10 -11
  41. package/lib/github/dependabot.js +1 -1
  42. package/lib/github/github-credentials.js +1 -1
  43. package/lib/github/github-project.js +1 -1
  44. package/lib/github/github.js +1 -1
  45. package/lib/github/mergify.d.ts +4 -0
  46. package/lib/github/mergify.js +2 -2
  47. package/lib/github/pr-template.js +1 -1
  48. package/lib/github/pull-request-backport.js +1 -1
  49. package/lib/github/pull-request-lint.js +1 -1
  50. package/lib/github/stale.js +1 -1
  51. package/lib/github/task-workflow-job.js +1 -1
  52. package/lib/github/task-workflow.js +1 -1
  53. package/lib/github/workflow-actions.js +1 -1
  54. package/lib/github/workflow-jobs.js +1 -1
  55. package/lib/github/workflow-steps.js +1 -1
  56. package/lib/github/workflows.js +1 -1
  57. package/lib/gitlab/configuration.js +1 -1
  58. package/lib/gitlab/gitlab-configuration.js +1 -1
  59. package/lib/gitlab/nested-configuration.js +1 -1
  60. package/lib/gitpod.js +1 -1
  61. package/lib/ignore-file.js +1 -1
  62. package/lib/ini.js +1 -1
  63. package/lib/java/java-project.js +1 -1
  64. package/lib/java/junit.js +1 -1
  65. package/lib/java/maven-compile.js +1 -1
  66. package/lib/java/maven-packaging.js +1 -1
  67. package/lib/java/maven-sample.js +1 -1
  68. package/lib/java/pom.js +2 -2
  69. package/lib/java/projenrc.js +1 -1
  70. package/lib/javascript/bundler.js +1 -1
  71. package/lib/javascript/eslint.js +1 -1
  72. package/lib/javascript/jest.js +4 -4
  73. package/lib/javascript/license-checker.js +1 -1
  74. package/lib/javascript/node-package.js +1 -1
  75. package/lib/javascript/node-project.js +1 -1
  76. package/lib/javascript/npm-config.js +1 -1
  77. package/lib/javascript/prettier.js +1 -1
  78. package/lib/javascript/projenrc.js +1 -1
  79. package/lib/javascript/typescript-config.js +2 -2
  80. package/lib/javascript/upgrade-dependencies.js +2 -2
  81. package/lib/javascript/yarnrc.js +1 -1
  82. package/lib/json-patch.js +1 -1
  83. package/lib/json.js +1 -1
  84. package/lib/license.js +1 -1
  85. package/lib/logger.js +1 -1
  86. package/lib/makefile.js +1 -1
  87. package/lib/object-file.js +1 -1
  88. package/lib/project-build.js +1 -1
  89. package/lib/project-tree.js +1 -1
  90. package/lib/project.js +1 -1
  91. package/lib/projects.js +1 -1
  92. package/lib/projenrc-json.js +2 -2
  93. package/lib/projenrc.js +1 -1
  94. package/lib/python/pip.js +1 -1
  95. package/lib/python/poetry.js +2 -2
  96. package/lib/python/projenrc.js +1 -1
  97. package/lib/python/pytest-sample.js +1 -1
  98. package/lib/python/pytest.js +1 -1
  99. package/lib/python/python-project.js +1 -1
  100. package/lib/python/python-sample.js +1 -1
  101. package/lib/python/requirements-file.js +1 -1
  102. package/lib/python/setuppy.js +1 -1
  103. package/lib/python/setuptools.js +1 -1
  104. package/lib/python/venv.js +1 -1
  105. package/lib/readme.js +1 -1
  106. package/lib/release/publisher.js +1 -1
  107. package/lib/release/release-trigger.js +1 -1
  108. package/lib/release/release.js +1 -1
  109. package/lib/renovatebot.js +1 -1
  110. package/lib/sample-file.js +2 -2
  111. package/lib/semver.js +1 -1
  112. package/lib/source-code.js +1 -1
  113. package/lib/task-runtime.js +1 -1
  114. package/lib/task.js +1 -1
  115. package/lib/tasks.js +1 -1
  116. package/lib/testing.js +1 -1
  117. package/lib/textfile.js +1 -1
  118. package/lib/toml.js +1 -1
  119. package/lib/typescript/projenrc-ts.js +1 -1
  120. package/lib/typescript/projenrc.js +1 -1
  121. package/lib/typescript/typescript-typedoc.js +1 -1
  122. package/lib/typescript/typescript.js +6 -6
  123. package/lib/version.js +2 -2
  124. package/lib/vscode/devcontainer.js +1 -1
  125. package/lib/vscode/extensions.js +1 -1
  126. package/lib/vscode/launch-config.js +1 -1
  127. package/lib/vscode/settings.js +1 -1
  128. package/lib/vscode/vscode.js +1 -1
  129. package/lib/web/next.js +3 -3
  130. package/lib/web/postcss.js +1 -1
  131. package/lib/web/react.js +4 -4
  132. package/lib/web/tailwind.js +1 -1
  133. package/lib/xmlfile.js +1 -1
  134. package/lib/yaml.js +1 -1
  135. package/node_modules/yaml/README.md +17 -3
  136. package/node_modules/yaml/browser/dist/compose/compose-doc.js +1 -0
  137. package/node_modules/yaml/browser/dist/compose/compose-node.js +10 -0
  138. package/node_modules/yaml/browser/dist/compose/compose-scalar.js +14 -8
  139. package/node_modules/yaml/browser/dist/compose/resolve-block-map.js +2 -0
  140. package/node_modules/yaml/browser/dist/compose/resolve-block-seq.js +2 -0
  141. package/node_modules/yaml/browser/dist/compose/resolve-flow-collection.js +4 -0
  142. package/node_modules/yaml/browser/dist/compose/util-map-includes.js +1 -5
  143. package/node_modules/yaml/browser/dist/doc/Document.js +3 -2
  144. package/node_modules/yaml/browser/dist/nodes/addPairToJSMap.js +7 -49
  145. package/node_modules/yaml/browser/dist/public-api.js +3 -0
  146. package/node_modules/yaml/browser/dist/schema/Schema.js +1 -2
  147. package/node_modules/yaml/browser/dist/schema/tags.js +26 -13
  148. package/node_modules/yaml/browser/dist/schema/yaml-1.1/merge.js +64 -0
  149. package/node_modules/yaml/browser/dist/schema/yaml-1.1/schema.js +2 -0
  150. package/node_modules/yaml/browser/dist/stringify/stringify.js +6 -1
  151. package/node_modules/yaml/dist/compose/compose-doc.js +1 -0
  152. package/node_modules/yaml/dist/compose/compose-node.d.ts +1 -0
  153. package/node_modules/yaml/dist/compose/compose-node.js +10 -0
  154. package/node_modules/yaml/dist/compose/compose-scalar.js +13 -7
  155. package/node_modules/yaml/dist/compose/resolve-block-map.js +2 -0
  156. package/node_modules/yaml/dist/compose/resolve-block-seq.js +2 -0
  157. package/node_modules/yaml/dist/compose/resolve-flow-collection.js +4 -0
  158. package/node_modules/yaml/dist/compose/util-map-includes.js +1 -5
  159. package/node_modules/yaml/dist/doc/Document.js +3 -2
  160. package/node_modules/yaml/dist/errors.d.ts +1 -1
  161. package/node_modules/yaml/dist/nodes/Node.d.ts +7 -1
  162. package/node_modules/yaml/dist/nodes/addPairToJSMap.js +6 -48
  163. package/node_modules/yaml/dist/options.d.ts +6 -0
  164. package/node_modules/yaml/dist/parse/lexer.d.ts +1 -1
  165. package/node_modules/yaml/dist/parse/parser.d.ts +3 -3
  166. package/node_modules/yaml/dist/public-api.js +3 -0
  167. package/node_modules/yaml/dist/schema/Schema.d.ts +0 -1
  168. package/node_modules/yaml/dist/schema/Schema.js +1 -2
  169. package/node_modules/yaml/dist/schema/tags.d.ts +9 -1
  170. package/node_modules/yaml/dist/schema/tags.js +26 -13
  171. package/node_modules/yaml/dist/schema/types.d.ts +6 -4
  172. package/node_modules/yaml/dist/schema/yaml-1.1/merge.d.ts +9 -0
  173. package/node_modules/yaml/dist/schema/yaml-1.1/merge.js +68 -0
  174. package/node_modules/yaml/dist/schema/yaml-1.1/schema.js +2 -0
  175. package/node_modules/yaml/dist/stringify/stringify.js +6 -1
  176. package/node_modules/yaml/package.json +1 -1
  177. package/package.json +3 -3
@@ -26,7 +26,7 @@ class Transform {
26
26
  }
27
27
  exports.Transform = Transform;
28
28
  _a = JSII_RTTI_SYMBOL_1;
29
- Transform[_a] = { fqn: "projen.javascript.Transform", version: "0.88.2" };
29
+ Transform[_a] = { fqn: "projen.javascript.Transform", version: "0.88.4" };
30
30
  class WatchPlugin {
31
31
  constructor(name, options) {
32
32
  this.name = name;
@@ -45,7 +45,7 @@ class WatchPlugin {
45
45
  }
46
46
  exports.WatchPlugin = WatchPlugin;
47
47
  _b = JSII_RTTI_SYMBOL_1;
48
- WatchPlugin[_b] = { fqn: "projen.javascript.WatchPlugin", version: "0.88.2" };
48
+ WatchPlugin[_b] = { fqn: "projen.javascript.WatchPlugin", version: "0.88.4" };
49
49
  var UpdateSnapshot;
50
50
  (function (UpdateSnapshot) {
51
51
  /**
@@ -75,7 +75,7 @@ class JestReporter {
75
75
  }
76
76
  exports.JestReporter = JestReporter;
77
77
  _c = JSII_RTTI_SYMBOL_1;
78
- JestReporter[_c] = { fqn: "projen.javascript.JestReporter", version: "0.88.2" };
78
+ JestReporter[_c] = { fqn: "projen.javascript.JestReporter", version: "0.88.4" };
79
79
  /**
80
80
  * Installs the following npm scripts:
81
81
  *
@@ -314,5 +314,5 @@ class Jest extends component_1.Component {
314
314
  }
315
315
  exports.Jest = Jest;
316
316
  _d = JSII_RTTI_SYMBOL_1;
317
- Jest[_d] = { fqn: "projen.javascript.Jest", version: "0.88.2" };
317
+ Jest[_d] = { fqn: "projen.javascript.Jest", version: "0.88.4" };
318
318
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiamVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9qYXZhc2NyaXB0L2plc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2QkFBNkI7QUFDN0IsNENBQXlDO0FBRXpDLGtDQUFtQztBQUVuQyxrQ0FBaUQ7QUFFakQsTUFBTSx3QkFBd0IsR0FBRyxjQUFjLENBQUM7QUEyZWhELE1BQWEsU0FBUztJQUNwQixZQUNtQixJQUFZLEVBQ1osT0FBYTtRQURiLFNBQUksR0FBSixJQUFJLENBQVE7UUFDWixZQUFPLEdBQVAsT0FBTyxDQUFNO0lBQzdCLENBQUM7SUFFSjs7O09BR0c7SUFDSSxNQUFNO1FBQ1gsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO1lBQ3pCLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQyxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDO0lBQ25CLENBQUM7O0FBZkgsOEJBZ0JDOzs7QUFFRCxNQUFhLFdBQVc7SUFDdEIsWUFDbUIsSUFBWSxFQUNaLE9BQWE7UUFEYixTQUFJLEdBQUosSUFBSSxDQUFRO1FBQ1osWUFBTyxHQUFQLE9BQU8sQ0FBTTtJQUM3QixDQUFDO0lBRUo7OztPQUdHO0lBQ0ksTUFBTTtRQUNYLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUN6QixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDbkMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDOztBQWZILGtDQWdCQzs7O0FBcUZELElBQVksY0FVWDtBQVZELFdBQVksY0FBYztJQUN4Qjs7T0FFRztJQUNILG1DQUFpQixDQUFBO0lBRWpCOztPQUVHO0lBQ0gsaUNBQWUsQ0FBQTtBQUNqQixDQUFDLEVB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Q0FBQzs7QUEvVEgsb0JBZ1VDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSBcIi4uL2NvbXBvbmVudFwiO1xuaW1wb3J0IHsgTm9kZVByb2plY3QgfSBmcm9tIFwiLi4vamF2YXNjcmlwdFwiO1xuaW1wb3J0IHsgSnNvbkZpbGUgfSBmcm9tIFwiLi4vanNvblwiO1xuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gXCIuLi9wcm9qZWN0XCI7XG5pbXBvcnQgeyBub3JtYWxpemVQZXJzaXN0ZWRQYXRoIH0gZnJvbSBcIi4uL3V0aWxcIjtcblxuY29uc3QgREVGQVVMVF9URVNUX1JFUE9SVFNfRElSID0gXCJ0ZXN0LXJlcG9ydHNcIjtcblxuLy8gUHVsbGVkIGZyb20gaHR0cHM6Ly9qZXN0anMuaW8vZG9jcy9lbi9jb25maWd1cmF0aW9uXG5leHBvcnQgaW50ZXJmYWNlIEplc3RDb25maWdPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoaXMgb3B0aW9uIHRlbGxzIEplc3QgdGhhdCBhbGwgaW1wb3J0ZWQgbW9kdWxlcyBpbiB5b3VyIHRlc3RzIHNob3VsZCBiZSBtb2NrZWQgYXV0b21hdGljYWxseS5cbiAgICogQWxsIG1vZHVsZXMgdXNlZCBpbiB5b3VyIHRlc3RzIHdpbGwgaGF2ZSBhIHJlcGxhY2VtZW50IGltcGxlbWVudGF0aW9uLCBrZWVwaW5nIHRoZSBBUEkgc3VyZmFjZVxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBhdXRvbW9jaz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQsIEplc3QgcnVucyBhbGwgdGVzdHMgYW5kIHByb2R1Y2VzIGFsbCBlcnJvcnMgaW50byB0aGUgY29uc29sZSB1cG9uIGNvbXBsZXRpb24uXG4gICAqIFRoZSBiYWlsIGNvbmZpZyBvcHRpb24gY2FuIGJlIHVzZWQgaGVyZSB0byBoYXZlIEplc3Qgc3RvcCBydW5uaW5nIHRlc3RzIGFmdGVyIG4gZmFpbHVyZXMuXG4gICAqIFNldHRpbmcgYmFpbCB0byB0cnVlIGlzIHRoZSBzYW1lIGFzIHNldHRpbmcgYmFpbCB0byAxLlxuICAgKiBAZGVmYXVsdCAtIDBcbiAgICovXG4gIHJlYWRvbmx5IGJhaWw/OiBib29sZWFuIHwgbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgZGlyZWN0b3J5IHdoZXJlIEplc3Qgc2hvdWxkIHN0b3JlIGl0cyBjYWNoZWQgZGVwZW5kZW5jeSBpbmZvcm1hdGlvblxuICAgKiBAZGVmYXVsdCAtIFwiL3RtcC88cGF0aD5cIlxuICAgKi9cbiAgcmVhZG9ubHkgY2FjaGVEaXJlY3Rvcnk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEF1dG9tYXRpY2FsbHkgY2xlYXIgbW9jayBjYWxscyBhbmQgaW5zdGFuY2VzIGJlZm9yZSBldmVyeSB0ZXN0LlxuICAgKiBFcXVpdmFsZW50IHRvIGNhbGxpbmcgamVzdC5jbGVhckFsbE1vY2tzKCkgYmVmb3JlIGVhY2ggdGVzdC5cbiAgICogVGhpcyBkb2VzIG5vdCByZW1vdmUgYW55IG1vY2sgaW1wbGVtZW50YXRpb24gdGhhdCBtYXkgaGF2ZSBiZWVuIHByb3ZpZGVkXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGNsZWFyTW9ja3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgY292ZXJhZ2UgaW5mb3JtYXRpb24gc2hvdWxkIGJlIGNvbGxlY3RlZCB3aGlsZSBleGVjdXRpbmcgdGhlIHRlc3QuXG4gICAqIEJlY2F1c2UgdGhpcyByZXRyb2ZpdHMgYWxsIGV4ZWN1dGVkIGZpbGVzIHdpdGggY292ZXJhZ2UgY29sbGVjdGlvbiBzdGF0ZW1lbnRzLFxuICAgKiBpdCBtYXkgc2lnbmlmaWNhbnRseSBzbG93IGRvd24geW91ciB0ZXN0c1xuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBjb2xsZWN0Q292ZXJhZ2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBnbG9iIHBhdHRlcm5zIGluZGljYXRpbmcgYSBzZXQgb2YgZmlsZXMgZm9yIHdoaWNoIGNvdmVyYWdlIGluZm9ybWF0aW9uIHNob3VsZCBiZSBjb2xsZWN0ZWQuXG4gICAqIEBkZWZhdWx0IC0gdW5kZWZpbmVkXG4gICAqL1xuICByZWFkb25seSBjb2xsZWN0Q292ZXJhZ2VGcm9tPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBkaXJlY3Rvcnkgd2hlcmUgSmVzdCBzaG91bGQgb3V0cHV0IGl0cyBjb3ZlcmFnZSBmaWxlcy5cbiAgICogQGRlZmF1bHQgXCJjb3ZlcmFnZVwiXG4gICAqL1xuICByZWFkb25seSBjb3ZlcmFnZURpcmVjdG9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogQW4gYXJyYXkgb2YgcmVnZXhwIHBhdHRlcm4gc3RyaW5ncyB0aGF0IGFyZSBtYXRjaGVkIGFnYWluc3QgYWxsIGZpbGUgcGF0aHMgYmVmb3JlIGV4ZWN1dGluZyB0aGUgdGVzdC5cbiAgICogSWYgdGhlIGZpbGUgcGF0aCBtYXRjaGVzIGFueSBvZiB0aGUgcGF0dGVybnMsIGNvdmVyYWdlIGluZm9ybWF0aW9uIHdpbGwgYmUgc2tpcHBlZFxuICAgKiBAZGVmYXVsdCBcIi9ub2RlX21vZHVsZXMvXCJcbiAgICovXG4gIHJlYWRvbmx5IGNvdmVyYWdlUGF0aElnbm9yZVBhdHRlcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyB3aGljaCBwcm92aWRlciBzaG91bGQgYmUgdXNlZCB0byBpbnN0cnVtZW50IGNvZGUgZm9yIGNvdmVyYWdlLlxuICAgKiBBbGxvd2VkIHZhbHVlcyBhcmUgdjggKGRlZmF1bHQpIG9yIGJhYmVsXG4gICAqIEBkZWZhdWx0IC0gXCJ2OFwiXG4gICAqL1xuICByZWFkb25seSBjb3ZlcmFnZVByb3ZpZGVyPzogXCJiYWJlbFwiIHwgXCJ2OFwiO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgcmVwb3J0ZXIgbmFtZXMgdGhhdCBKZXN0IHVzZXMgd2hlbiB3cml0aW5nIGNvdmVyYWdlIHJlcG9ydHMuIEFueSBpc3RhbmJ1bCByZXBvcnRlciBjYW4gYmUgdXNlZFxuICAgKiBAZGVmYXVsdCAtIFtcImpzb25cIiwgXCJsY292XCIsIFwidGV4dFwiLCBcImNsb3ZlclwiLCBcImNvYmVydHVyYVwiXVxuICAgKi9cbiAgcmVhZG9ubHkgY292ZXJhZ2VSZXBvcnRlcnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogU3BlY2lmeSB0aGUgZ2xvYmFsIGNvdmVyYWdlIHRocmVzaG9sZHMuIFRoaXMgd2lsbCBiZSB1c2VkIHRvIGNvbmZpZ3VyZSBtaW5pbXVtIHRocmVzaG9sZCBlbmZvcmNlbWVudFxuICAgKiBmb3IgY292ZXJhZ2UgcmVzdWx0cy4gVGhyZXNob2xkcyBjYW4gYmUgc3BlY2lmaWVkIGFzIGdsb2JhbCwgYXMgYSBnbG9iLCBhbmQgYXMgYSBkaXJlY3Rvcnkgb3IgZmlsZSBwYXRoLlxuICAgKiBJZiB0aHJlc2hvbGRzIGFyZW4ndCBtZXQsIGplc3Qgd2lsbCBmYWlsLlxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgY292ZXJhZ2VUaHJlc2hvbGQ/OiBDb3ZlcmFnZVRocmVzaG9sZDtcblxuICAvKipcbiAgICogVGhpcyBvcHRpb24gYWxsb3dzIHRoZSB1c2Ugb2YgYSBjdXN0b20gZGVwZW5kZW5jeSBleHRyYWN0b3IuXG4gICAqIEl0IG11c3QgYmUgYSBub2RlIG1vZHVsZSB0aGF0IGV4cG9ydHMgYW4gb2JqZWN0IHdpdGggYW4gZXh0cmFjdCBmdW5jdGlvblxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgZGVwZW5kZW5jeUV4dHJhY3Rvcj86IHN0cmluZztcblxuICAvKipcbiAgICogQWxsb3dzIGZvciBhIGxhYmVsIHRvIGJlIHByaW50ZWQgYWxvbmdzaWRlIGEgdGVzdCB3aGlsZSBpdCBpcyBydW5uaW5nLlxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgZGlzcGxheU5hbWU/OiBzdHJpbmcgfCBhbnk7XG5cbiAgLyoqXG4gICAqIE1ha2UgY2FsbGluZyBkZXByZWNhdGVkIEFQSXMgdGhyb3cgaGVscGZ1bCBlcnJvciBtZXNzYWdlcy4gVXNlZnVsIGZvciBlYXNpbmcgdGhlIHVwZ3JhZGUgcHJvY2Vzcy5cbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZXJyb3JPbkRlcHJlY2F0ZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUZXN0IGZpbGVzIHJ1biBpbnNpZGUgYSB2bSwgd2hpY2ggc2xvd3MgY2FsbHMgdG8gZ2xvYmFsIGNvbnRleHQgcHJvcGVydGllcyAoZS5nLiBNYXRoKS5cbiAgICogV2l0aCB0aGlzIG9wdGlvbiB5b3UgY2FuIHNwZWNpZnkgZXh0cmEgcHJvcGVydGllcyB0byBiZSBkZWZpbmVkIGluc2lkZSB0aGUgdm0gZm9yIGZhc3RlciBsb29rdXBzLlxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgZXh0cmFHbG9iYWxzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRlc3QgZmlsZXMgYXJlIG5vcm1hbGx5IGlnbm9yZWQgZnJvbSBjb2xsZWN0aW5nIGNvZGUgY292ZXJhZ2UuXG4gICAqIFdpdGggdGhpcyBvcHRpb24sIHlvdSBjYW4gb3ZlcndyaXRlIHRoaXMgYmVoYXZpb3IgYW5kIGluY2x1ZGUgb3RoZXJ3aXNlIGlnbm9yZWQgZmlsZXMgaW4gY29kZSBjb3ZlcmFnZS5cbiAgICogQGRlZmF1bHQgLSBbJyddXG4gICAqL1xuICByZWFkb25seSBmb3JjZUNvdmVyYWdlTWF0Y2g/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQSBzZXQgb2YgZ2xvYmFsIHZhcmlhYmxlcyB0aGF0IG5lZWQgdG8gYmUgYXZhaWxhYmxlIGluIGFsbCB0ZXN0IGVudmlyb25tZW50cy5cbiAgICogQGRlZmF1bHQgLSB7fVxuICAgKi9cbiAgcmVhZG9ubHkgZ2xvYmFscz86IGFueTtcblxuICAvKipcbiAgICogVGhpcyBvcHRpb24gYWxsb3dzIHRoZSB1c2Ugb2YgYSBjdXN0b20gZ2xvYmFsIHNldHVwIG1vZHVsZSB3aGljaCBleHBvcnRzIGFuIGFzeW5jIGZ1bmN0aW9uIHRoYXQgaXNcbiAgICogdHJpZ2dlcmVkIG9uY2UgYmVmb3JlIGFsbCB0ZXN0IHN1aXRlcy4gVGhpcyBmdW5jdGlvbiBnZXRzIEplc3QncyBnbG9iYWxDb25maWcgb2JqZWN0IGFzIGEgcGFyYW1ldGVyLlxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgZ2xvYmFsU2V0dXA/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoaXMgb3B0aW9uIGFsbG93cyB0aGUgdXNlIG9mIGEgY3VzdG9tIGdsb2JhbCB0ZWFyZG93biBtb2R1bGUgd2hpY2ggZXhwb3J0cyBhbiBhc3luYyBmdW5jdGlvbiB0aGF0IGlzXG4gICAqIHRyaWdnZXJlZCBvbmNlIGFmdGVyIGFsbCB0ZXN0IHN1aXRlcy4gVGhpcyBmdW5jdGlvbiBnZXRzIEplc3QncyBnbG9iYWxDb25maWcgb2JqZWN0IGFzIGEgcGFyYW1ldGVyLlxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgZ2xvYmFsVGVhcmRvd24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoaXMgd2lsbCBiZSB1c2VkIHRvIGNvbmZpZ3VyZSB0aGUgYmVoYXZpb3Igb2YgamVzdC1oYXN0ZS1tYXAsIEplc3QncyBpbnRlcm5hbCBmaWxlIGNyYXdsZXIvY2FjaGUgc3lzdGVtLlxuICAgKiBAZGVmYXVsdCAtIHt9XG4gICAqL1xuICByZWFkb25seSBoYXN0ZT86IEhhc3RlQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBJbnNlcnQgSmVzdCdzIGdsb2JhbHMgKGV4cGVjdCwgdGVzdCwgZGVzY3JpYmUsIGJlZm9yZUVhY2ggZXRjLikgaW50byB0aGUgZ2xvYmFsIGVudmlyb25tZW50LlxuICAgKiBJZiB5b3Ugc2V0IHRoaXMgdG8gZmFsc2UsIHlvdSBzaG91bGQgaW1wb3J0IGZyb20gQGplc3QvZ2xvYmFsc1xuICAgKiBAZGVmYXVsdCAtIHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGluamVjdEdsb2JhbHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBIG51bWJlciBsaW1pdGluZyB0aGUgbnVtYmVyIG9mIHRlc3RzIHRoYXQgYXJlIGFsbG93ZWQgdG8gcnVuIGF0IHRoZSBzYW1lIHRpbWUgd2hlbiB1c2luZyB0ZXN0LmNvbmN1cnJlbnQuXG4gICAqIEFueSB0ZXN0IGFib3ZlIHRoaXMgbGltaXQgd2lsbCBiZSBxdWV1ZWQgYW5kIGV4ZWN1dGVkIG9uY2UgYSBzbG90IGlzIHJlbGVhc2VkLlxuICAgKiBAZGVmYXVsdCAtIDVcbiAgICovXG4gIHJlYWRvbmx5IG1heENvbmN1cnJlbmN5PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHdvcmtlcnMgdGhlIHdvcmtlci1wb29sIHdpbGwgc3Bhd24gZm9yIHJ1bm5pbmcgdGVzdHMuIEluIHNpbmdsZSBydW4gbW9kZSxcbiAgICogdGhpcyBkZWZhdWx0cyB0byB0aGUgbnVtYmVyIG9mIHRoZSBjb3JlcyBhdmFpbGFibGUgb24geW91ciBtYWNoaW5lIG1pbnVzIG9uZSBmb3IgdGhlIG1haW4gdGhyZWFkXG4gICAqIEluIHdhdGNoIG1vZGUsIHRoaXMgZGVmYXVsdHMgdG8gaGFsZiBvZiB0aGUgYXZhaWxhYmxlIGNvcmVzIG9uIHlvdXIgbWFjaGluZS5cbiAgICogRm9yIGVudmlyb25tZW50cyB3aXRoIHZhcmlhYmxlIENQVXMgYXZhaWxhYmxlLCB5b3UgY2FuIHVzZSBwZXJjZW50YWdlIGJhc2VkIGNvbmZpZ3VyYXRpb246IFwibWF4V29ya2Vyc1wiOiBcIjUwJVwiXG4gICAqIEBkZWZhdWx0IC0gdGhlIG51bWJlciBvZiB0aGUgY29yZXMgYXZhaWxhYmxlIG9uIHlvdXIgbWFjaGluZSBtaW51cyBvbmUgZm9yIHRoZSBtYWluIHRocmVhZFxuICAgKi9cbiAgcmVhZG9ubHkgbWF4V29ya2Vycz86IG51bWJlciB8IHN0cmluZztcblxuICAvKipcbiAgICogQW4gYXJyYXkgb2YgZGlyZWN0b3J5IG5hbWVzIHRvIGJlIHNlYXJjaGVkIHJlY3Vyc2l2ZWx5IHVwIGZyb20gdGhlIHJlcXVpcmluZyBtb2R1bGUncyBsb2NhdGlvbi5cbiAgICogU2V0dGluZyB0aGlzIG9wdGlvbiB3aWxsIG92ZXJyaWRlIHRoZSBkZWZhdWx0LCBpZiB5b3Ugd2lzaCB0byBzdGlsbCBzZWFyY2ggbm9kZV9tb2R1bGVzIGZvciBwYWNrYWdlc1xuICAgKiBpbmNsdWRlIGl0IGFsb25nIHdpdGggYW55IG90aGVyIG9wdGlvbnM6IFtcIm5vZGVfbW9kdWxlc1wiLCBcImJvd2VyX2NvbXBvbmVudHNcIl1cbiAgICogQGRlZmF1bHQgLSBbXCJub2RlX21vZHVsZXNcIl1cbiAgICovXG4gIHJlYWRvbmx5IG1vZHVsZURpcmVjdG9yaWVzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIGZpbGUgZXh0ZW5zaW9ucyB5b3VyIG1vZHVsZXMgdXNlLiBJZiB5b3UgcmVxdWlyZSBtb2R1bGVzIHdpdGhvdXQgc3BlY2lmeWluZyBhIGZpbGUgZXh0ZW5zaW9uLFxuICAgKiB0aGVzZSBhcmUgdGhlIGV4dGVuc2lvbnMgSmVzdCB3aWxsIGxvb2sgZm9yLCBpbiBsZWZ0LXRvLXJpZ2h0IG9yZGVyLlxuICAgKiBAZGVmYXVsdCAtIFtcImpzXCIsIFwianNvblwiLCBcImpzeFwiLCBcInRzXCIsIFwidHN4XCIsIFwibm9kZVwiXVxuICAgKi9cbiAgcmVhZG9ubHkgbW9kdWxlRmlsZUV4dGVuc2lvbnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQSBtYXAgZnJvbSByZWd1bGFyIGV4cHJlc3Npb25zIHRvIG1vZHVsZSBuYW1lcyBvciB0byBhcnJheXMgb2YgbW9kdWxlIG5hbWVzIHRoYXQgYWxsb3cgdG8gc3R1YiBvdXRcbiAgICogcmVzb3VyY2VzLCBsaWtlIGltYWdlcyBvciBzdHlsZXMgd2l0aCBhIHNpbmdsZSBtb2R1bGUuXG4gICAqIEBkZWZhdWx0IC0gbnVsbFxuICAgKi9cbiAgcmVhZG9ubHkgbW9kdWxlTmFtZU1hcHBlcj86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgc3RyaW5nW10gfTtcblxuICAvKipcbiAgICogQW4gYXJyYXkgb2YgcmVnZXhwIHBhdHRlcm4gc3RyaW5ncyB0aGF0IGFyZSBtYXRjaGVkIGFnYWluc3QgYWxsIG1vZHVsZSBwYXRocyBiZWZvcmUgdGhvc2UgcGF0aHMgYXJlXG4gICAqIHRvIGJlIGNvbnNpZGVyZWQgJ3Zpc2libGUnIHRvIHRoZSBtb2R1bGUgbG9hZGVyLiBJZiBhIGdpdmVuIG1vZHVsZSdzIHBhdGggbWF0Y2hlcyBhbnkgb2YgdGhlIHBhdHRlcm5zLFxuICAgKiBpdCB3aWxsIG5vdCBiZSByZXF1aXJlKCktYWJsZSBpbiB0aGUgdGVzdCBlbnZpcm9ubWVudC5cbiAgICogQGRlZmF1bHQgLSBbXVxuICAgKi9cbiAgcmVhZG9ubHkgbW9kdWxlUGF0aElnbm9yZVBhdHRlcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEFuIGFsdGVybmF0aXZlIEFQSSB0byBzZXR0aW5nIHRoZSBOT0RFX1BBVEggZW52IHZhcmlhYmxlLCBtb2R1bGVQYXRocyBpcyBhbiBhcnJheSBvZiBhYnNvbHV0ZSBwYXRoc1xuICAgKiB0byBhZGRpdGlvbmFsIGxvY2F0aW9ucyB0byBzZWFyY2ggd2hlbiByZXNvbHZpbmcgbW9kdWxlcy4gVXNlIHRoZSA8cm9vdERpcj4gc3RyaW5nIHRva2VuIHRvIGluY2x1ZGVcbiAgICogdGhlIHBhdGggdG8geW91ciBwcm9qZWN0J3Mgcm9vdCBkaXJlY3RvcnkuIEV4YW1wbGU6IFtcIjxyb290RGlyPi9hcHAvXCJdLlxuICAgKiBAZGVmYXVsdCAtIFtdXG4gICAqL1xuICByZWFkb25seSBtb2R1bGVQYXRocz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBY3RpdmF0ZXMgbm90aWZpY2F0aW9ucyBmb3IgdGVzdCByZXN1bHRzLlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSBub3RpZnk/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgbm90aWZpY2F0aW9uIG1vZGUuIFJlcXVpcmVzIG5vdGlmeTogdHJ1ZVxuICAgKiBAZGVmYXVsdCAtIGZhaWx1cmUtY2hhbmdlXG4gICAqL1xuICByZWFkb25seSBub3RpZnlNb2RlPzpcbiAgICB8IFwiYWx3YXlzXCJcbiAgICB8IFwiZmFpbHVyZVwiXG4gICAgfCBcInN1Y2Nlc3NcIlxuICAgIHwgXCJjaGFuZ2VcIlxuICAgIHwgXCJzdWNjZXNzLWNoYW5nZVwiXG4gICAgfCBcImZhaWx1cmUtY2hhbmdlXCI7XG5cbiAgLyoqXG4gICAqIEEgcHJlc2V0IHRoYXQgaXMgdXNlZCBhcyBhIGJhc2UgZm9yIEplc3QncyBjb25maWd1cmF0aW9uLiBBIHByZXNldCBzaG91bGQgcG9pbnQgdG8gYW4gbnBtIG1vZHVsZVxuICAgKiB0aGF0IGhhcyBhIGplc3QtcHJlc2V0Lmpzb24gb3IgamVzdC1wcmVzZXQuanMgZmlsZSBhdCB0aGUgcm9vdC5cbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IHByZXNldD86IHN0cmluZztcblxuICAvKipcbiAgICogU2V0cyB0aGUgcGF0aCB0byB0aGUgcHJldHRpZXIgbm9kZSBtb2R1bGUgdXNlZCB0byB1cGRhdGUgaW5saW5lIHNuYXBzaG90cy5cbiAgICogQGRlZmF1bHQgLSBcInByZXR0aWVyXCJcbiAgICovXG4gIHJlYWRvbmx5IHByZXR0aWVyUGF0aD86IHN0cmluZztcblxuICAvKipcbiAgICogV2hlbiB0aGUgcHJvamVjdHMgY29uZmlndXJhdGlvbiBpcyBwcm92aWRlZCB3aXRoIGFuIGFycmF5IG9mIHBhdGhzIG9yIGdsb2IgcGF0dGVybnMsIEplc3Qgd2lsbFxuICAgKiBydW4gdGVzdHMgaW4gYWxsIG9mIHRoZSBzcGVjaWZpZWQgcHJvamVjdHMgYXQgdGhlIHNhbWUgdGltZS4gVGhpcyBpcyBncmVhdCBmb3IgbW9ub3JlcG9zIG9yXG4gICAqIHdoZW4gd29ya2luZyBvbiBtdWx0aXBsZSBwcm9qZWN0cyBhdCB0aGUgc2FtZSB0aW1lLlxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdHM/OiBBcnJheTxzdHJpbmcgfCB7IFtrZXk6IHN0cmluZ106IGFueSB9PjtcblxuICAvKipcbiAgICogVXNlIHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gYWRkIGN1c3RvbSByZXBvcnRlcnMgdG8gSmVzdC4gQSBjdXN0b20gcmVwb3J0ZXIgaXMgYSBjbGFzc1xuICAgKiB0aGF0IGltcGxlbWVudHMgb25SdW5TdGFydCwgb25UZXN0U3RhcnQsIG9uVGVzdFJlc3VsdCwgb25SdW5Db21wbGV0ZSBtZXRob2RzIHRoYXQgd2lsbCBiZVxuICAgKiBjYWxsZWQgd2hlbiBhbnkgb2YgdGhvc2UgZXZlbnRzIG9jY3Vycy5cbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IHJlcG9ydGVycz86IEplc3RSZXBvcnRlcltdO1xuXG4gIC8qKlxuICAgKiBBdXRvbWF0aWNhbGx5IHJlc2V0IG1vY2sgc3RhdGUgYmVmb3JlIGV2ZXJ5IHRlc3QuIEVxdWl2YWxlbnQgdG8gY2FsbGluZyBqZXN0LnJlc2V0QWxsTW9ja3MoKVxuICAgKiBiZWZvcmUgZWFjaCB0ZXN0LiBUaGlzIHdpbGwgbGVhZCB0byBhbnkgbW9ja3MgaGF2aW5nIHRoZWlyIGZha2UgaW1wbGVtZW50YXRpb25zIHJlbW92ZWQgYnV0XG4gICAqIGRvZXMgbm90IHJlc3RvcmUgdGhlaXIgaW5pdGlhbCBpbXBsZW1lbnRhdGlvbi5cbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVzZXRNb2Nrcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEJ5IGRlZmF1bHQsIGVhY2ggdGVzdCBmaWxlIGdldHMgaXRzIG93biBpbmRlcGVuZGVudCBtb2R1bGUgcmVnaXN0cnkuIEVuYWJsaW5nIHJlc2V0TW9kdWxlc1xuICAgKiBnb2VzIGEgc3RlcCBmdXJ0aGVyIGFuZCByZXNldHMgdGhlIG1vZHVsZSByZWdpc3RyeSBiZWZvcmUgcnVubmluZyBlYWNoIGluZGl2aWR1YWwgdGVzdC5cbiAgICogQGRlZmF1bHQgLSBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVzZXRNb2R1bGVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhpcyBvcHRpb24gYWxsb3dzIHRoZSB1c2Ugb2YgYSBjdXN0b20gcmVzb2x2ZXIuXG4gICAqIGh0dHBzOi8vamVzdGpzLmlvL2RvY3MvZW4vY29uZmlndXJhdGlvbiNyZXNvbHZlci1zdHJpbmdcbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IHJlc29sdmVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBdXRvbWF0aWNhbGx5IHJlc3RvcmUgbW9jayBzdGF0ZSBiZWZvcmUgZXZlcnkgdGVzdC4gRXF1aXZhbGVudCB0byBjYWxsaW5nIGplc3QucmVzdG9yZUFsbE1vY2tzKClcbiAgICogYmVmb3JlIGVhY2ggdGVzdC4gVGhpcyB3aWxsIGxlYWQgdG8gYW55IG1vY2tzIGhhdmluZyB0aGVpciBmYWtlIGltcGxlbWVudGF0aW9ucyByZW1vdmVkIGFuZFxuICAgKiByZXN0b3JlcyB0aGVpciBpbml0aWFsIGltcGxlbWVudGF0aW9uLlxuICAgKiBAZGVmYXVsdCAtIGZhbHNlXG4gICAqL1xuICByZWFkb25seSByZXN0b3JlTW9ja3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgcm9vdCBkaXJlY3RvcnkgdGhhdCBKZXN0IHNob3VsZCBzY2FuIGZvciB0ZXN0cyBhbmQgbW9kdWxlcyB3aXRoaW4uIElmIHlvdSBwdXQgeW91ciBKZXN0XG4gICAqIGNvbmZpZyBpbnNpZGUgeW91ciBwYWNrYWdlLmpzb24gYW5kIHdhbnQgdGhlIHJvb3QgZGlyZWN0b3J5IHRvIGJlIHRoZSByb290IG9mIHlvdXIgcmVwbywgdGhlXG4gICAqIHZhbHVlIGZvciB0aGlzIGNvbmZpZyBwYXJhbSB3aWxsIGRlZmF1bHQgdG8gdGhlIGRpcmVjdG9yeSBvZiB0aGUgcGFja2FnZS5qc29uLlxuICAgKiBAZGVmYXVsdCAtIGRpcmVjdG9yeSBvZiB0aGUgcGFja2FnZS5qc29uXG4gICAqL1xuICByZWFkb25seSByb290RGlyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgcGF0aHMgdG8gZGlyZWN0b3JpZXMgdGhhdCBKZXN0IHNob3VsZCB1c2UgdG8gc2VhcmNoIGZvciBmaWxlcyBpbi5cbiAgICogQGRlZmF1bHQgLSBbXCI8cm9vdERpcj5cIl1cbiAgICovXG4gIHJlYWRvbmx5IHJvb3RzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gdXNlIGEgY3VzdG9tIHJ1bm5lciBpbnN0ZWFkIG9mIEplc3QncyBkZWZhdWx0IHRlc3QgcnVubmVyLlxuICAgKiBAZGVmYXVsdCAtIFwiamVzdC1ydW5uZXJcIlxuICAgKi9cbiAgcmVhZG9ubHkgcnVubmVyPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGxpc3Qgb2YgcGF0aHMgdG8gbW9kdWxlcyB0aGF0IHJ1biBzb21lIGNvZGUgdG8gY29uZmlndXJlIG9yIHNldCB1cCB0aGUgdGVzdGluZyBlbnZpcm9ubWVudC5cbiAgICogRWFjaCBzZXR1cEZpbGUgd2lsbCBiZSBydW4gb25jZSBwZXIgdGVzdCBmaWxlLiBTaW5jZSBldmVyeSB0ZXN0IHJ1bnMgaW4gaXRzIG93biBlbnZpcm9ubWVudCxcbiAgICogdGhlc2Ugc2NyaXB0cyB3aWxsIGJlIGV4ZWN1dGVkIGluIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50IGltbWVkaWF0ZWx5IGJlZm9yZSBleGVjdXRpbmcgdGhlXG4gICAqIHRlc3QgY29kZSBpdHNlbGYuXG4gICAqIEBkZWZhdWx0IC0gW11cbiAgICovXG4gIHJlYWRvbmx5IHNldHVwRmlsZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogQSBsaXN0IG9mIHBhdGhzIHRvIG1vZHVsZXMgdGhhdCBydW4gc29tZSBjb2RlIHRvIGNvbmZpZ3VyZSBvciBzZXQgdXAgdGhlIHRlc3RpbmcgZnJhbWV3b3JrXG4gICAqIGJlZm9yZSBlYWNoIHRlc3QgZmlsZSBpbiB0aGUgc3VpdGUgaXMgZXhlY3V0ZWQuIFNpbmNlIHNldHVwRmlsZXMgZXhlY3V0ZXMgYmVmb3JlIHRoZSB0ZXN0XG4gICAqIGZyYW1ld29yayBpcyBpbnN0YWxsZWQgaW4gdGhlIGVudmlyb25tZW50LCB0aGlzIHNjcmlwdCBmaWxlIHByZXNlbnRzIHlvdSB0aGUgb3Bwb3J0dW5pdHkgb2ZcbiAgICogcnVubmluZyBzb21lIGNvZGUgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHRlc3QgZnJhbWV3b3JrIGhhcyBiZWVuIGluc3RhbGxlZCBpbiB0aGUgZW52aXJvbm1lbnQuXG4gICAqIEBkZWZhdWx0IC0gW11cbiAgICovXG4gIHJlYWRvbmx5IHNldHVwRmlsZXNBZnRlckVudj86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIHNlY29uZHMgYWZ0ZXIgd2hpY2ggYSB0ZXN0IGlzIGNvbnNpZGVyZWQgYXMgc2xvdyBhbmQgcmVwb3J0ZWQgYXMgc3VjaCBpbiB0aGUgcmVzdWx0cy5cbiAgICogQGRlZmF1bHQgLSA1XG4gICAqL1xuICByZWFkb25seSBzbG93VGVzdFRocmVzaG9sZD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIHBhdGggdG8gYSBtb2R1bGUgdGhhdCBjYW4gcmVzb2x2ZSB0ZXN0PC0+c25hcHNob3QgcGF0aC4gVGhpcyBjb25maWcgb3B0aW9uIGxldHMgeW91IGN1c3RvbWl6ZVxuICAgKiB3aGVyZSBKZXN0IHN0b3JlcyBzbmFwc2hvdCBmaWxlcyBvbiBkaXNrLlxuICAgKiBAZGVmYXVsdCAtIHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgc25hcHNob3RSZXNvbHZlcj86IHN0cmluZztcblxuICAvKipcbiAgICogQSBsaXN0IG9mIHBhdGhzIHRvIHNuYXBzaG90IHNlcmlhbGl6ZXIgbW9kdWxlcyBKZXN0IHNob3VsZCB1c2UgZm9yIHNuYXBzaG90IHRlc3RpbmcuXG4gICAqIEBkZWZhdWx0ID0gW11cbiAgICovXG4gIHJlYWRvbmx5IHNuYXBzaG90U2VyaWFsaXplcnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHRlc3QgZW52aXJvbm1lbnQgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIHRlc3RpbmcuIFRoZSBkZWZhdWx0IGVudmlyb25tZW50IGluIEplc3QgaXMgYVxuICAgKiBicm93c2VyLWxpa2UgZW52aXJvbm1lbnQgdGhyb3VnaCBqc2RvbS4gSWYgeW91IGFyZSBidWlsZGluZyBhIG5vZGUgc2VydmljZSwgeW91IGNhbiB1c2UgdGhlIG5vZGVcbiAgICogb3B0aW9uIHRvIHVzZSBhIG5vZGUtbGlrZSBlbnZpcm9ubWVudCBpbnN0ZWFkLlxuICAgKiBAZGVmYXVsdCAtIFwianNkb21cIlxuICAgKi9cbiAgcmVhZG9ubHkgdGVzdEVudmlyb25tZW50Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUZXN0IGVudmlyb25tZW50IG9wdGlvbnMgdGhhdCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgdGVzdEVudmlyb25tZW50LlxuICAgKiBUaGUgcmVsZXZhbnQgb3B0aW9ucyBkZXBlbmQgb24gdGhlIGVudmlyb25tZW50LlxuICAgKiBAZGVmYXVsdCAtIHt9XG4gICAqL1xuICByZWFkb25seSB0ZXN0RW52aXJvbm1lbnRPcHRpb25zPzogYW55O1xuXG4gIC8qKlxuICAgKiBUaGUgZXhpdCBjb2RlIEplc3QgcmV0dXJucyBvbiB0ZXN0IGZhaWx1cmUuXG4gICAqIEBkZWZhdWx0IC0gMVxuICAgKi9cbiAgcmVhZG9ubHkgdGVzdEZhaWx1cmVFeGl0Q29kZT86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGdsb2IgcGF0dGVybnMgSmVzdCB1c2VzIHRvIGRldGVjdCB0ZXN0IGZpbGVzLiBCeSBkZWZhdWx0IGl0IGxvb2tzIGZvciAuanMsIC5qc3gsIC50cyBhbmQgLnRzeFxuICAgKiBmaWxlcyBpbnNpZGUgb2YgX190ZXN0c19fIGZvbGRlcnMsIGFzIHdlbGwgYXMgYW55IGZpbGVzIHdpdGggYSBzdWZmaXggb2YgLnRlc3Qgb3IgLnNwZWNcbiAgICogKGUuZy4gQ29tcG9uZW50LnRlc3QuanMgb3IgQ29tcG9uZW50LnNwZWMuanMpLiBJdCB3aWxsIGFsc28gZmluZCBmaWxlcyBjYWxsZWQgdGVzdC5qcyBvciBzcGVjLmpzLlxuICAgKiBAZGVmYXVsdCBbJyoqXFwvX190ZXN0c19fLyoqXFwvKi5banRdcz8oeCknLCAnKipcXC8qKCouKUAoc3BlY3x0ZXN0KS5bdGpdcz8oeCknXVxuICAgKi9cbiAgcmVhZG9ubHkgdGVzdE1hdGNoPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEFuIGFycmF5IG9mIHJlZ2V4cCBwYXR0ZXJuIHN0cmluZ3MgdGhhdCBhcmUgbWF0Y2hlZCBhZ2FpbnN0IGFsbCB0ZXN0IHBhdGhzIGJlZm9yZSBleGVjdXRpbmcgdGhlIHRlc3QuXG4gICAqIElmIHRoZSB0ZXN0IHBhdGggbWF0Y2hlcyBhbnkgb2YgdGhlIHBhdHRlcm5zLCBpdCB3aWxsIGJlIHNraXBwZWQuXG4gICAqIEBkZWZhdWx0IC0gW1wiL25vZGVfbW9kdWxlcy9cIl1cbiAgICovXG4gIHJlYWRvbmx5IHRlc3RQYXRoSWdub3JlUGF0dGVybnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIHBhdHRlcm4gb3IgcGF0dGVybnMgSmVzdCB1c2VzIHRvIGRldGVjdCB0ZXN0IGZpbGVzLiBCeSBkZWZhdWx0IGl0IGxvb2tzIGZvciAuanMsIC5qc3gsIC50cyBhbmQgLnRzeFxuICAgKiBmaWxlcyBpbnNpZGUgb2YgX190ZXN0c19fIGZvbGRlcnMsIGFzIHdlbGwgYXMgYW55IGZpbGVzIHdpdGggYSBzdWZmaXggb2YgLnRlc3Qgb3IgLnNwZWNcbiAgICogKGUuZy4gQ29tcG9uZW50LnRlc3QuanMgb3IgQ29tcG9uZW50LnNwZWMuanMpLiBJdCB3aWxsIGFsc28gZmluZCBmaWxlcyBjYWxsZWQgdGVzdC5qcyBvciBzcGVjLmpzLlxuICAgKiBAZGVmYXVsdCAtICgvX190ZXN0c19fLy4qfChcXFxcLnwvKSh0ZXN0fHNwZWMpKVxcXFwuW2p0XXN4PyRcbiAgICovXG4gIHJlYWRvbmx5IHRlc3RSZWdleD86IHN0cmluZyB8IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGlzIG9wdGlvbiBhbGxvd3MgdGhlIHVzZSBvZiBhIGN1c3RvbSByZXN1bHRzIHByb2Nlc3Nvci5cbiAgICogQGRlZmF1bHQgLSB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IHRlc3RSZXN1bHRzUHJvY2Vzc29yPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGlzIG9wdGlvbiBhbGxvd3MgdGhlIHVzZSBvZiBhIGN1c3RvbSB0ZXN0IHJ1bm5lci4gVGhlIGRlZmF1bHQgaXMgamFzbWluZTIuIEEgY3VzdG9tIHRlc3QgcnVubmVyXG4gICAqIGNhbiBiZSBwcm92aWRlZCBieSBzcGVjaWZ5aW5nIGEgcGF0aCB0byBhIHRlc3QgcnVubmVyIGltcGxlbWVudGF0aW9uLlxuICAgKiBAZGVmYXVsdCAtIFwiamFzbWluZTJcIlxuICAgKi9cbiAgcmVhZG9ubHkgdGVzdFJ1bm5lcj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byB1c2UgYSBjdXN0b20gc2VxdWVuY2VyIGluc3RlYWQgb2YgSmVzdCdzIGRlZmF1bHQuXG4gICAqIFNvcnQgbWF5IG9wdGlvbmFsbHkgcmV0dXJuIGEgUHJvbWlzZS5cbiAgICogQGRlZmF1bHQgLSBcIkBqZXN0L3Rlc3Qtc2VxdWVuY2VyXCJcbiAgICovXG4gIHJlYWRvbmx5IHRlc3RTZXF1ZW5jZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERlZmF1bHQgdGltZW91dCBvZiBhIHRlc3QgaW4gbWlsbGlzZWNvbmRzLlxuICAgKiBAZGVmYXVsdCAtIDUwMDBcbiAgICovXG4gIHJlYWRvbmx5IHRlc3RUaW1lb3V0PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGlzIG9wdGlvbiBzZXRzIHRoZSBVUkwgZm9yIHRoZSBqc2RvbSBlbnZpcm9ubWVudC4gSXQgaXMgcmVmbGVjdGVkIGluIHByb3BlcnRpZXMgc3VjaCBhcyBsb2NhdGlvbi5ocmVmLlxuICAgKiBAZGVmYXVsdCAtIFwiaHR0cDovL2xvY2FsaG9zdFwiXG4gICAqL1xuICByZWFkb25seSB0ZXN0VVJMPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBTZXR0aW5nIHRoaXMgdmFsdWUgdG8gbGVnYWN5IG9yIGZha2UgYWxsb3dzIHRoZSB1c2Ugb2YgZmFrZSB0aW1lcnMgZm9yIGZ1bmN0aW9ucyBzdWNoIGFzIHNldFRpbWVvdXQuXG4gICAqIEZha2UgdGltZXJzIGFyZSB1c2VmdWwgd2hlbiBhIHBpZWNlIG9mIGNvZGUgc2V0cyBhIGxvbmcgdGltZW91dCB0aGF0IHdlIGRvbid0IHdhbnQgdG8gd2FpdCBmb3IgaW4gYSB0ZXN0LlxuICAgKiBAZGVmYXVsdCAtIFwicmVhbFwiXG4gICAqL1xuICByZWFkb25seSB0aW1lcnM/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgbWFwIGZyb20gcmVndWxhciBleHByZXNzaW9ucyB0byBwYXRocyB0byB0cmFuc2Zvcm1lcnMuIEEgdHJhbnNmb3JtZXIgaXMgYSBtb2R1bGUgdGhhdCBwcm92aWRlcyBhXG4gICAqIHN5bmNocm9ub3VzIGZ1bmN0aW9uIGZvciB0cmFuc2Zvcm1pbmcgc291cmNlIGZpbGVzLlxuICAgKiBAZGVmYXVsdCAtIHtcIlxcXFwuW2p0XXN4PyRcIjogXCJiYWJlbC1qZXN0XCJ9XG4gICAqL1xuICByZWFkb25seSB0cmFuc2Zvcm0/OiB7IFtrZXk6IHN0cmluZ106IFRyYW5zZm9ybSB9O1xuXG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiByZWdleHAgcGF0dGVybiBzdHJpbmdzIHRoYXQgYXJlIG1hdGNoZWQgYWdhaW5zdCBhbGwgc291cmNlIGZpbGUgcGF0aHMgYmVmb3JlIHRyYW5zZm9ybWF0aW9uLlxuICAgKiBJZiB0aGUgdGVzdCBwYXRoIG1hdGNoZXMgYW55IG9mIHRoZSBwYXR0ZXJucywgaXQgd2lsbCBub3QgYmUgdHJhbnNmb3JtZWQuXG4gICAqIEBkZWZhdWx0IC0gW1wiL25vZGVfbW9kdWxlcy9cIiwgXCJcXFxcLnBucFxcXFwuW15cXFxcXFwvXSskXCJdXG4gICAqL1xuICByZWFkb25seSB0cmFuc2Zvcm1JZ25vcmVQYXR0ZXJucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiByZWdleHAgcGF0dGVybiBzdHJpbmdzIHRoYXQgYXJlIG1hdGNoZWQgYWdhaW5zdCBhbGwgbW9kdWxlcyBiZWZvcmUgdGhlIG1vZHVsZSBsb2FkZXIgd2lsbFxuICAgKiBhdXRvbWF0aWNhbGx5IHJldHVybiBhIG1vY2sgZm9yIHRoZW0uIElmIGEgbW9kdWxlJ3MgcGF0aCBtYXRjaGVzIGFueSBvZiB0aGUgcGF0dGVybnMgaW4gdGhpcyBsaXN0LCBpdFxuICAgKiB3aWxsIG5vdCBiZSBhdXRvbWF0aWNhbGx5IG1vY2tlZCBieSB0aGUgbW9kdWxlIGxvYWRlci5cbiAgICogQGRlZmF1bHQgLSBbXVxuICAgKi9cbiAgcmVhZG9ubHkgdW5tb2NrZWRNb2R1bGVQYXRoUGF0dGVybnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgZWFjaCBpbmRpdmlkdWFsIHRlc3Qgc2hvdWxkIGJlIHJlcG9ydGVkIGR1cmluZyB0aGUgcnVuLiBBbGwgZXJyb3JzIHdpbGwgYWxzb1xuICAgKiBzdGlsbCBiZSBzaG93biBvbiB0aGUgYm90dG9tIGFmdGVyIGV4ZWN1dGlvbi4gTm90ZSB0aGF0IGlmIHRoZXJlIGlzIG9ubHkgb25lIHRlc3QgZmlsZSBiZWluZyBydW5cbiAgICogaXQgd2lsbCBkZWZhdWx0IHRvIHRydWUuXG4gICAqIEBkZWZhdWx0IC0gZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHZlcmJvc2U/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBSZWdFeHAgcGF0dGVybnMgdGhhdCBhcmUgbWF0Y2hlZCBhZ2FpbnN0IGFsbCBzb3VyY2UgZmlsZSBwYXRocyBiZWZvcmUgcmUtcnVubmluZyB0ZXN0c1xuICAgKiBpbiB3YXRjaCBtb2RlLiBJZiB0aGUgZmlsZSBwYXRoIG1hdGNoZXMgYW55IG9mIHRoZSBwYXR0ZXJucywgd2hlbiBpdCBpcyB1cGRhdGVkLCBpdCB3aWxsIG5vdCB0cmlnZ2VyXG4gICAqIGEgcmUtcnVuIG9mIHRlc3RzLlxuICAgKiBAZGVmYXVsdCAtIFtdXG4gICAqL1xuICByZWFkb25seSB3YXRjaFBhdGhJZ25vcmVQYXR0ZXJucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKlxuICAgKiBAZGVmYXVsdCAtXG4gICAqL1xuICByZWFkb25seSB3YXRjaFBsdWdpbnM/OiBXYXRjaFBsdWdpbltdO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHVzZSB3YXRjaG1hbiBmb3IgZmlsZSBjcmF3bGluZy5cbiAgICogQGRlZmF1bHQgLSB0cnVlXG4gICAqL1xuICByZWFkb25seSB3YXRjaG1hbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVzY2FwZSBoYXRjaCB0byBhbGxvdyBhbnkgdmFsdWVcbiAgICovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxPcHRpb25zPzogeyBbbmFtZTogc3RyaW5nXTogYW55IH07XG5cbiAgLyoqXG4gICAqIEVzY2FwZSBoYXRjaCB0byBhbGxvdyBhbnkgdmFsdWUgKEpTL1RTIG9ubHkpXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBgYWRkaXRpb25hbE9wdGlvbnNgIGluc3RlYWQuXG4gICAqXG4gICAqIEBqc2lpIGlnbm9yZVxuICAgKi9cbiAgcmVhZG9ubHkgW25hbWU6IHN0cmluZ106IGFueTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBkaXNjb3ZlclRlc3RNYXRjaFBhdHRlcm5zRm9yRGlycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKZXN0RGlzY292ZXJUZXN0TWF0Y2hQYXR0ZXJuc0ZvckRpcnNPcHRpb25zIHtcbiAgLyoqIFRoZSBmaWxlIGV4dGVuc2lvbiBwYXR0ZXJuIHRvIHVzZS4gRGVmYXVsdHMgdG8gXCJbanRdcz8oeClcIi4gKi9cbiAgcmVhZG9ubHkgZmlsZUV4dGVuc2lvblBhdHRlcm4/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBUcmFuc2Zvcm0ge1xuICBwdWJsaWMgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBuYW1lOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zPzogYW55XG4gICkge31cblxuICAvKipcbiAgICogQGpzaWkgaWdub3JlXG4gICAqIEBpbnRlcm5hbFxuICAgKi9cbiAgcHVibGljIHRvSlNPTigpIHtcbiAgICBpZiAodGhpcy5vcHRpb25zICE9IG51bGwpIHtcbiAgICAgIHJldHVybiBbdGhpcy5uYW1lLCB0aGlzLm9wdGlvbnNdO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5uYW1lO1xuICB9XG59XG5cbmV4cG9ydCBjbGFzcyBXYXRjaFBsdWdpbiB7XG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IG5hbWU6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IG9wdGlvbnM/OiBhbnlcbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBAanNpaSBpZ25vcmVcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgdG9KU09OKCkge1xuICAgIGlmICh0aGlzLm9wdGlvbnMgIT0gbnVsbCkge1xuICAgICAgcmV0dXJuIFt0aGlzLm5hbWUsIHRoaXMub3B0aW9uc107XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm5hbWU7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBKZXN0T3B0aW9ucyB7XG4gIC8qKlxuICAgKiBDb2xsZWN0IGNvdmVyYWdlLiBEZXByZWNhdGVkXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGplc3RDb25maWcuY29sbGVjdENvdmVyYWdlXG4gICAqL1xuICByZWFkb25seSBjb3ZlcmFnZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEluY2x1ZGUgdGhlIGB0ZXh0YCBjb3ZlcmFnZSByZXBvcnRlciwgd2hpY2ggbWVhbnMgdGhhdCBjb3ZlcmFnZSBzdW1tYXJ5IGlzIHByaW50ZWRcbiAgICogYXQgdGhlIGVuZCBvZiB0aGUgamVzdCBleGVjdXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGNvdmVyYWdlVGV4dD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERlZmluZXMgYHRlc3RQYXRoSWdub3JlUGF0dGVybnNgIGFuZCBgY292ZXJhZ2VQYXRoSWdub3JlUGF0dGVybnNgXG4gICAqIEBkZWZhdWx0IFtcIi9ub2RlX21vZHVsZXMvXCJdXG4gICAqIEBkZXByZWNhdGVkIHVzZSBqZXN0Q29uZmlnLmNvdmVyYWdlUGF0aElnbm9yZVBhdHRlcm5zIG9yIGplc3RDb25maWcudGVzdFBhdGhJZ25vcmVQYXR0ZXJucyByZXNwZWN0aXZlbHlcbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZVBhdHRlcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFJlc3VsdCBwcm9jZXNzaW5nIHdpdGggamVzdC1qdW5pdC5cbiAgICpcbiAgICogT3V0cHV0IGRpcmVjdG9yeSBpcyBgdGVzdC1yZXBvcnRzL2AuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGp1bml0UmVwb3J0aW5nPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUHJlc2VydmUgdGhlIGRlZmF1bHQgSmVzdCByZXBvcnRlciB3aGVuIGFkZGl0aW9uYWwgcmVwb3J0ZXJzIGFyZSBhZGRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcHJlc2VydmVEZWZhdWx0UmVwb3J0ZXJzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hldGhlciB0byB1cGRhdGUgc25hcHNob3RzIGluIHRhc2sgXCJ0ZXN0XCIgKHdoaWNoIGlzIGV4ZWN1dGVkIGluIHRhc2sgXCJidWlsZFwiIGFuZCBidWlsZCB3b3JrZmxvd3MpLFxuICAgKiBvciBjcmVhdGUgYSBzZXBhcmF0ZSB0YXNrIFwidGVzdDp1cGRhdGVcIiBmb3IgdXBkYXRpbmcgc25hcHNob3RzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEFMV0FZU1xuICAgKi9cbiAgcmVhZG9ubHkgdXBkYXRlU25hcHNob3Q/OiBVcGRhdGVTbmFwc2hvdDtcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgamVzdCB0byB1c2UuXG4gICAqXG4gICAqIE5vdGUgdGhhdCBzYW1lIHZlcnNpb24gaXMgdXNlZCBhcyB2ZXJzaW9uIG9mIGBAdHlwZXMvamVzdGAgYW5kIGB0cy1qZXN0YCAoaWYgVHlwZXNjcmlwdCBpbiB1c2UpLCBzbyBnaXZlbiB2ZXJzaW9uIHNob3VsZCB3b3JrIGFsc28gZm9yIHRob3NlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGluc3RhbGxzIHRoZSBsYXRlc3QgamVzdCB2ZXJzaW9uXG4gICAqL1xuICByZWFkb25seSBqZXN0VmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogUGF0aCB0byBKU09OIGNvbmZpZyBmaWxlIGZvciBKZXN0XG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gc2VwYXJhdGUgY29uZmlnIGZpbGUsIGplc3Qgc2V0dGluZ3MgYXJlIHN0b3JlZCBpbiBwYWNrYWdlLmpzb25cbiAgICovXG4gIHJlYWRvbmx5IGNvbmZpZ0ZpbGVQYXRoPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBKZXN0IGNvbmZpZ3VyYXRpb24uXG4gICAqIEBkZWZhdWx0IC0gZGVmYXVsdCBqZXN0IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGplc3RDb25maWc/OiBKZXN0Q29uZmlnT3B0aW9ucztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBvcHRpb25zIHRvIHBhc3MgdG8gdGhlIEplc3QgQ0xJIGludm9jYXRpb25cbiAgICogQGRlZmF1bHQgLSBubyBleHRyYSBvcHRpb25zXG4gICAqL1xuICByZWFkb25seSBleHRyYUNsaU9wdGlvbnM/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb3ZlcmFnZVRocmVzaG9sZCB7XG4gIHJlYWRvbmx5IGJyYW5jaGVzPzogbnVtYmVyO1xuICByZWFkb25seSBmdW5jdGlvbnM/OiBudW1iZXI7XG4gIHJlYWRvbmx5IGxpbmVzPzogbnVtYmVyO1xuICByZWFkb25seSBzdGF0ZW1lbnRzPzogbnVtYmVyO1xufVxuXG5leHBvcnQgZW51bSBVcGRhdGVTbmFwc2hvdCB7XG4gIC8qKlxuICAgKiBBbHdheXMgdXBkYXRlIHNuYXBzaG90cyBpbiBcInRlc3RcIiB0YXNrLlxuICAgKi9cbiAgQUxXQVlTID0gXCJhbHdheXNcIixcblxuICAvKipcbiAgICogTmV2ZXIgdXBkYXRlIHNuYXBzaG90cyBpbiBcInRlc3RcIiB0YXNrIGFuZCBjcmVhdGUgYSBzZXBhcmF0ZSBcInRlc3Q6dXBkYXRlXCIgdGFzay5cbiAgICovXG4gIE5FVkVSID0gXCJuZXZlclwiLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEhhc3RlQ29uZmlnIHtcbiAgcmVhZG9ubHkgY29tcHV0ZVNoYTE/OiBib29sZWFuO1xuICByZWFkb25seSBkZWZhdWx0UGxhdGZvcm0/OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IGhhc3RlSW1wbE1vZHVsZVBhdGg/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHBsYXRmb3Jtcz86IEFycmF5PHN0cmluZz47XG4gIHJlYWRvbmx5IHRocm93T25Nb2R1bGVDb2xsaXNpb24/OiBib29sZWFuO1xufVxuXG5leHBvcnQgY2xhc3MgSmVzdFJlcG9ydGVyIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbmFtZTogc3RyaW5nLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9ucz86IHsgW2tleTogc3RyaW5nXTogYW55IH1cbiAgKSB7fVxuXG4gIC8qKlxuICAgKiBAanNpaSBpZ25vcmVcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgdG9KU09OKCk6IGFueSB7XG4gICAgaWYgKHRoaXMub3B0aW9ucyA9PSBudWxsKSB7XG4gICAgICByZXR1cm4gdGhpcy5uYW1lO1xuICAgIH1cbiAgICByZXR1cm4gW3RoaXMubmFtZSwgdGhpcy5vcHRpb25zXTtcbiAgfVxufVxuXG4vKipcbiAqIEluc3RhbGxzIHRoZSBmb2xsb3dpbmcgbnBtIHNjcmlwdHM6XG4gKlxuICogLSBgdGVzdGAsIGludGVuZGVkIGZvciB0ZXN0aW5nIGxvY2FsbHkgYW5kIGluIENJLiBXaWxsIHVwZGF0ZSBzbmFwc2hvdHMgdW5sZXNzIGB1cGRhdGVTbmFwc2hvdDogVXBkYXRlU25hcHNob3Q6IE5FVkVSYCBpcyBzZXQuXG4gKiAtIGB0ZXN0OndhdGNoYCwgaW50ZW5kZWQgZm9yIGF1dG9tYXRpY2FsbHkgcmVydW5uaW5nIHRlc3RzIHdoZW4gZmlsZXMgY2hhbmdlLlxuICogLSBgdGVzdDp1cGRhdGVgLCBpbnRlbmRlZCBmb3IgdGVzdGluZyBsb2NhbGx5IGFuZCB1cGRhdGluZyBzbmFwc2hvdHMgdG8gbWF0Y2ggdGhlIGxhdGVzdCB1bml0IHVuZGVyIHRlc3QuIE9ubHkgYXZhaWxhYmxlIHdoZW4gYHVwZGF0ZVNuYXBzaG90OiBVcGRhdGVTbmFwc2hvdDogTkVWRVJgLlxuICpcbiAqL1xuZXhwb3J0IGNsYXNzIEplc3QgZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogUmV0dXJucyB0aGUgc2luZ2xldG9uIEplc3QgY29tcG9uZW50IG9mIGEgcHJvamVjdCBvciB1bmRlZmluZWQgaWYgdGhlcmUgaXMgbm9uZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgb2YocHJvamVjdDogUHJvamVjdCk6IEplc3QgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGlzSmVzdCA9IChjOiBDb21wb25lbnQpOiBjIGlzIEplc3QgPT4gYyBpbnN0YW5jZW9mIEplc3Q7XG4gICAgcmV0dXJuIHByb2plY3QuY29tcG9uZW50cy5maW5kKGlzSmVzdCk7XG4gIH1cbiAgLyoqXG4gICAqIEVzY2FwZSBoYXRjaC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbmZpZzogYW55O1xuXG4gIC8qKlxuICAgKiBKZXN0IHZlcnNpb24sIGluY2x1ZGluZyBgQGAgc3ltYm9sLCBsaWtlIGBAXjI5YFxuICAgKi9cbiAgcmVhZG9ubHkgamVzdFZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogSmVzdCBjb25maWcgZmlsZS4gYHVuZGVmaW5lZGAgaWYgc2V0dGluZ3MgYXJlIHdyaXR0ZW4gdG8gYHBhY2thZ2UuanNvbmBcbiAgICovXG4gIHJlYWRvbmx5IGZpbGU/OiBKc29uRmlsZTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHRlc3RNYXRjaCA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgaWdub3JlUGF0dGVybnM6IHN0cmluZ1tdO1xuICBwcml2YXRlIHJlYWRvbmx5IHdhdGNoSWdub3JlUGF0dGVybnM6IHN0cmluZ1tdO1xuICBwcml2YXRlIHJlYWRvbmx5IGNvdmVyYWdlUmVwb3J0ZXJzOiBzdHJpbmdbXTtcbiAgcHJpdmF0ZSByZWFkb25seSByZXBvcnRlcnM6IEplc3RSZXBvcnRlcltdO1xuICBwcml2YXRlIHJlYWRvbmx5IGplc3RDb25maWc/OiBKZXN0Q29uZmlnT3B0aW9ucyAmIHtcbiAgICByZWFkb25seSBhZGRpdGlvbmFsT3B0aW9uczogdW5kZWZpbmVkO1xuICAgIFtrZXk6IHN0cmluZ106IHVua25vd247XG4gIH07XG4gIHByaXZhdGUgcmVhZG9ubHkgZXh0cmFDbGlPcHRpb25zOiBzdHJpbmdbXTtcbiAgcHJpdmF0ZSBfc25hcHNob3RSZXNvbHZlcjogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IE5vZGVQcm9qZWN0LCBvcHRpb25zOiBKZXN0T3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIocHJvamVjdCk7XG5cbiAgICAvLyBoYXJkIGRlcHJlY2F0aW9uXG4gICAgaWYgKChvcHRpb25zIGFzIGFueSkudHlwZXNjcmlwdENvbmZpZykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnXCJqZXN0T3B0aW9ucy50eXBlc2NyaXB0Q29uZmlnXCIgaXMgZGVwcmVjYXRlZC4gVXNlIFwidHlwZXNjcmlwdFByb2plY3QudHNjb25maWdEZXZcIiBpbnN0ZWFkJ1xuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBKZXN0IHNuYXBzaG90IGZpbGVzIGFyZSBnZW5lcmF0ZWQgZmlsZXMhXG4gICAgcHJvamVjdC5yb290LmFubm90YXRlR2VuZXJhdGVkKFwiKi5zbmFwXCIpO1xuICAgIHRoaXMuamVzdFZlcnNpb24gPSBvcHRpb25zLmplc3RWZXJzaW9uID8gYEAke29wdGlvbnMuamVzdFZlcnNpb259YCA6IFwiXCI7XG4gICAgcHJvamVjdC5hZGREZXZEZXBzKGBqZXN0JHt0aGlzLmplc3RWZXJzaW9ufWApO1xuXG4gICAgLy8gdXNlIG5hdGl2ZSB2OCBjb3ZlcmFnZSBjb2xsZWN0aW9uIGFzIGRlZmF1bHRcbiAgICAvLyBodHRwczovL2plc3Rqcy5pby9kb2NzL2VuL2NsaSMtLWNvdmVyYWdlcHJvdmlkZXJwcm92aWRlclxuICAgIGNvbnN0IGNvdmVyYWdlUHJvdmlkZXIgPSB0aGlzLmplc3RDb25maWc/LmNvdmVyYWdlUHJvdmlkZXIgPz8gXCJ2OFwiO1xuXG4gICAgdGhpcy5qZXN0Q29uZmlnID0ge1xuICAgICAgY292ZXJhZ2VQcm92aWRlcixcbiAgICAgIC4uLm9wdGlvbnMuamVzdENvbmZpZyxcbiAgICAgIGFkZGl0aW9uYWxPcHRpb25zOiB1bmRlZmluZWQsXG4gICAgICAuLi5vcHRpb25zLmplc3RDb25maWc/LmFkZGl0aW9uYWxPcHRpb25zLFxuICAgIH07XG4gICAgdGhpcy5leHRyYUNsaU9wdGlvbnMgPSBvcHRpb25zLmV4dHJhQ2xpT3B0aW9ucyA/PyBbXTtcblxuICAgIHRoaXMuaWdub3JlUGF0dGVybnMgPSB0aGlzLmplc3RDb25maWc/LnRlc3RQYXRoSWdub3JlUGF0dGVybnMgPz9cbiAgICAgIG9wdGlvbnMuaWdub3JlUGF0dGVybnMgPz8gW1wiL25vZGVfbW9kdWxlcy9cIl07XG4gICAgdGhpcy53YXRjaElnbm9yZVBhdHRlcm5zID0gdGhpcy5qZXN0Q29uZmlnPy53YXRjaFBhdGhJZ25vcmVQYXR0ZXJucyA/PyBbXG4gICAgICBcIi9ub2RlX21vZHVsZXMvXCIsXG4gICAgXTtcbiAgICB0aGlzLmNvdmVyYWdlUmVwb3J0ZXJzID0gdGhpcy5qZXN0Q29uZmlnPy5jb3ZlcmFnZVJlcG9ydGVycyA/PyBbXG4gICAgICBcImpzb25cIixcbiAgICAgIFwibGNvdlwiLFxuICAgICAgXCJjbG92ZXJcIixcbiAgICAgIFwiY29iZXJ0dXJhXCIsXG4gICAgXTtcblxuICAgIGlmICh0aGlzLmplc3RDb25maWc/LnRlc3RNYXRjaCAmJiB0aGlzLmplc3RDb25maWcudGVzdE1hdGNoLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuamVzdENvbmZpZy50ZXN0TWF0Y2guZm9yRWFjaCgocGF0dGVybikgPT5cbiAgICAgICAgdGhpcy5hZGRUZXN0TWF0Y2gocGF0dGVybilcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgY292ZXJhZ2VEaXJlY3RvcnkgPSB0aGlzLmplc3RDb25maWc/LmNvdmVyYWdlRGlyZWN0b3J5ID8/IFwiY292ZXJhZ2VcIjtcblxuICAgIHRoaXMucmVwb3J0ZXJzID0gW107XG5cbiAgICBpZiAob3B0aW9ucy5wcmVzZXJ2ZURlZmF1bHRSZXBvcnRlcnMgPz8gdHJ1ZSkge1xuICAgICAgdGhpcy5yZXBvcnRlcnMudW5zaGlmdChuZXcgSmVzdFJlcG9ydGVyKFwiZGVmYXVsdFwiKSk7XG4gICAgfVxuXG4gICAgdGhpcy5jb25maWcgPSB7XG4gICAgICAuLi50aGlzLmplc3RDb25maWcsXG4gICAgICBjbGVhck1vY2tzOiB0aGlzLmplc3RDb25maWc/LmNsZWFyTW9ja3MgPz8gdHJ1ZSxcbiAgICAgIGNvbGxlY3RDb3ZlcmFnZTpcbiAgICAgICAgb3B0aW9ucy5jb3ZlcmFnZSA/PyB0aGlzLmplc3RDb25maWc/LmNvbGxlY3RDb3ZlcmFnZSA/PyB0cnVlLFxuICAgICAgY292ZXJhZ2VSZXBvcnRlcnM6IHRoaXMuY292ZXJhZ2VSZXBvcnRlcnMsXG4gICAgICBjb3ZlcmFnZURpcmVjdG9yeTogY292ZXJhZ2VEaXJlY3RvcnksXG4gICAgICBjb3ZlcmFnZVBhdGhJZ25vcmVQYXR0ZXJuczpcbiAgICAgICAgdGhpcy5qZXN0Q29uZmlnPy5jb3ZlcmFnZVBhdGhJZ25vcmVQYXR0ZXJucyA/PyB0aGlzLmlnbm9yZVBhdHRlcm5zLFxuICAgICAgdGVzdFBhdGhJZ25vcmVQYXR0ZXJuczogdGhpcy5pZ25vcmVQYXR0ZXJucyxcbiAgICAgIHdhdGNoUGF0aElnbm9yZVBhdHRlcm5zOiB0aGlzLndhdGNoSWdub3JlUGF0dGVybnMsXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIC0gbGF6aWx5IGxvYWRpbmcgdGhlIHRlc3RNYXRjaCBpbiBvcmRlciB0byBvbmx5IGFwcGx5IGRlZmF1bHRzIGlmIG5vbmUgYXJlIGV2ZXIgYWRkZWRcbiAgICAgIHRlc3RNYXRjaDogKCkgPT5cbiAgICAgICAgdGhpcy50ZXN0TWF0Y2gubGVuZ3RoID4gMFxuICAgICAgICAgID8gdGhpcy50ZXN0TWF0Y2hcbiAgICAgICAgICA6IFtgKiovX190ZXN0c19fLyoqLyouW2p0XXM/KHgpYCwgYCoqLyooKi4pQChzcGVjfHRlc3QpLltqdF1zPyh4KWBdLCAvLyBKZXN0IGRlZmF1bHRzXG4gICAgICByZXBvcnRlcnM6IHRoaXMucmVwb3J0ZXJzLFxuICAgICAgc25hcHNob3RSZXNvbHZlcjogKCgpID0+IHRoaXMuX3NuYXBzaG90UmVzb2x2ZXIpIGFzIGFueSxcbiAgICB9IHNhdGlzZmllcyBKZXN0Q29uZmlnT3B0aW9ucztcblxuICAgIGlmIChvcHRpb25zLmp1bml0UmVwb3J0aW5nID8/IHRydWUpIHtcbiAgICAgIGNvbnN0IHJlcG9ydHNEaXIgPSBERUZBVUxUX1RFU1RfUkVQT1JUU19ESVI7XG5cbiAgICAgIHRoaXMuYWRkUmVwb3J0ZXIoXG4gICAgICAgIG5ldyBKZXN0UmVwb3J0ZXIoXCJqZXN0LWp1bml0XCIsIHsgb3V0cHV0RGlyZWN0b3J5OiByZXBvcnRzRGlyIH0pXG4gICAgICApO1xuXG4gICAgICBwcm9qZWN0LmFkZERldkRlcHMoXCJqZXN0LWp1bml0QF4xNVwiKTtcblxuICAgICAgcHJvamVjdC5naXRpZ25vcmUuZXhjbHVkZShcbiAgICAgICAgXCIjIGplc3QtanVuaXQgYXJ0aWZhY3RzXCIsXG4gICAgICAgIGAvJHtyZXBvcnRzRGlyfS9gLFxuICAgICAgICBcImp1bml0LnhtbFwiXG4gICAgICApO1xuICAgICAgcHJvamVjdC5ucG1pZ25vcmU/LmV4Y2x1ZGUoXG4gICAgICAgIFwiIyBqZXN0LWp1bml0IGFydGlmYWN0c1wiLFxuICAgICAgICBgLyR7cmVwb3J0c0Rpcn0vYCxcbiAgICAgICAgXCJqdW5pdC54bWxcIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5qZXN0Q29uZmlnPy5yZXBvcnRlcnMpIHtcbiAgICAgIGZvciAoY29uc3QgcmVwb3J0ZXIgb2YgdGhpcy5qZXN0Q29uZmlnLnJlcG9ydGVycykge1xuICAgICAgICB0aGlzLmFkZFJlcG9ydGVyKHJlcG9ydGVyKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5qZXN0Q29uZmlnPy5jb3ZlcmFnZVRocmVzaG9sZCkge1xuICAgICAgdGhpcy5jb25maWcuY292ZXJhZ2VUaHJlc2hvbGQgPSB7XG4gICAgICAgIGdsb2JhbDogdGhpcy5qZXN0Q29uZmlnPy5jb3ZlcmFnZVRocmVzaG9sZCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgdGhpcy5jb25maWd1cmVUZXN0Q29tbWFuZChvcHRpb25zLnVwZGF0ZVNuYXBzaG90ID8/IFVwZGF0ZVNuYXBzaG90LkFMV0FZUyk7XG5cbiAgICBpZiAob3B0aW9ucy5jb25maWdGaWxlUGF0aCkge1xuICAgICAgdGhpcy5maWxlID0gbmV3IEpzb25GaWxlKHByb2plY3QsIG9wdGlvbnMuY29uZmlnRmlsZVBhdGgsIHtcbiAgICAgICAgb2JqOiB0aGlzLmNvbmZpZyxcbiAgICAgIH0pO1xuICAgICAgcHJvamVjdC5ucG1pZ25vcmU/LmFkZFBhdHRlcm5zKGAvJHt0aGlzLmZpbGUucGF0aH1gKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcHJvamVjdC5hZGRGaWVsZHMoeyBqZXN0OiB0aGlzLmNvbmZpZyB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBjb3ZlcmFnZURpcmVjdG9yeVBhdGggPSBwYXRoLnBvc2l4LmpvaW4oXCIvXCIsIGNvdmVyYWdlRGlyZWN0b3J5LCBcIi9cIik7XG4gICAgcHJvamVjdC5ucG1pZ25vcmU/LmV4Y2x1ZGUoY292ZXJhZ2VEaXJlY3RvcnlQYXRoKTtcbiAgICBwcm9qZWN0LmdpdGlnbm9yZS5leGNsdWRlKGNvdmVyYWdlRGlyZWN0b3J5UGF0aCk7XG5cbiAgICBpZiAob3B0aW9ucy5jb3ZlcmFnZVRleHQgPz8gdHJ1ZSkge1xuICAgICAgdGhpcy5jb3ZlcmFnZVJlcG9ydGVycy5wdXNoKFwidGV4dFwiKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHRlc3QgbWF0Y2ggcGF0dGVybi5cbiAgICogQHBhcmFtIHBhdHRlcm4gZ2xvYiBwYXR0ZXJuIHRvIG1hdGNoIGZvciB0ZXN0c1xuICAgKi9cbiAgcHVibGljIGFkZFRlc3RNYXRjaChwYXR0ZXJuOiBzdHJpbmcpIHtcbiAgICB0aGlzLnRlc3RNYXRjaC5wdXNoKHBhdHRlcm4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHN0YW5kYXJkIHRlc3QgbWF0Y2ggcGF0dGVybnMgZm9yIGEgZGlyZWN0b3J5LlxuICAgKiBAcGFyYW0gZGlycyBUaGUgZGlyZWN0b3JpZXMgdG8gYWRkIHRlc3QgbWF0Y2hlcyBmb3IuIE1hdGNoZXMgYW55IGZvbGRlciBpZiBub3Qgc3BlY2lmaWVkIG9yIGFuIGVtcHR5IGFycmF5LlxuICAgKiBAcGFyYW0gb3B0aW9ucyBPcHRpb25zIGZvciBidWlsZGluZyB0ZXN0IG1hdGNoIHBhdHRlcm5zLlxuICAgKi9cbiAgcHVibGljIGRpc2NvdmVyVGVzdE1hdGNoUGF0dGVybnNGb3JEaXJzKFxuICAgIGRpcnM6IHN0cmluZ1tdLFxuICAgIG9wdGlvbnM/OiBKZXN0RGlzY292ZXJUZXN0TWF0Y2hQYXR0ZXJuc0ZvckRpcnNPcHRpb25zXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IHRlc3RQYXR0ZXJucyA9IHRoaXMuYnVpbGRUZXN0TWF0Y2hQYXR0ZXJuc0ZvckRpcnMoZGlycywgb3B0aW9ucyk7XG5cbiAgICB0ZXN0UGF0dGVybnMuZm9yRWFjaCgocGF0dGVybikgPT4gdGhpcy5hZGRUZXN0TWF0Y2gocGF0dGVybikpO1xuICB9XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHN0YW5kYXJkIHRlc3QgbWF0Y2ggcGF0dGVybnMgZm9yIGEgZGlyZWN0b3J5LlxuICAgKiBAcGFyYW0gZGlycyBUaGUgZGlyZWN0b3JpZXMgdG8gYWRkIHRlc3QgbWF0Y2hlcyBmb3IuIE1hdGNoZXMgYW55IGZvbGRlciBpZiBub3Qgc3BlY2lmaWVkLlxuICAgKiBAcGFyYW0gZmlsZUV4dGVuc2lvblBhdHRlcm4gVGhlIGZpbGUgZXh0ZW5zaW9uIHBhdHRlcm4gdG8gdXNlLiBEZWZhdWx0cyB0byBcIltqdF1zPyh4KVwiLlxuICAgKiBAcmV0dXJucyBUaGUgdGVzdCBtYXRjaCBwYXR0ZXJucy5cbiAgICovXG4gIHByaXZhdGUgYnVpbGRUZXN0TWF0Y2hQYXR0ZXJuc0ZvckRpcnMoXG4gICAgZGlyczogc3RyaW5nW10sXG4gICAgb3B0aW9ucz86IEplc3REaXNjb3ZlclRlc3RNYXRjaFBhdHRlcm5zRm9yRGlyc09wdGlvbnNcbiAgKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGZpbGVFeHRlbnNpb25QYXR0ZXJuID0gb3B0aW9ucz8uZmlsZUV4dGVuc2lvblBhdHRlcm4gPz8gXCJbanRdcz8oeClcIjtcbiAgICByZXR1cm4gW1xuICAgICAgYDxyb290RGlyPi9AKCR7ZGlycy5qb2luKFxuICAgICAgICBcInxcIlxuICAgICAgKX0pLyoqLyooKi4pQChzcGVjfHRlc3QpLiR7ZmlsZUV4dGVuc2lvblBhdHRlcm59YCxcbiAgICAgIGA8cm9vdERpcj4vQCgke2RpcnMuam9pbihcbiAgICAgICAgXCJ8XCJcbiAgICAgICl9KS8qKi9fX3Rlc3RzX18vKiovKi4ke2ZpbGVFeHRlbnNpb25QYXR0ZXJufWAsXG4gICAgXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgd2F0Y2ggaWdub3JlIHBhdHRlcm4uXG4gICAqIEBwYXJhbSBwYXR0ZXJuIFRoZSBwYXR0ZXJuIChyZWd1bGFyIGV4cHJlc3Npb24pLlxuICAgKi9cbiAgcHVibGljIGFkZFdhdGNoSWdub3JlUGF0dGVybihwYXR0ZXJuOiBzdHJpbmcpIHtcbiAgICB0aGlzLndhdGNoSWdub3JlUGF0dGVybnMucHVzaChwYXR0ZXJuKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRJZ25vcmVQYXR0ZXJuKHBhdHRlcm46IHN0cmluZykge1xuICAgIHRoaXMuaWdub3JlUGF0dGVybnMucHVzaChwYXR0ZXJuKTtcbiAgfVxuXG4gIHB1YmxpYyBhZGRSZXBvcnRlcihyZXBvcnRlcjogSmVzdFJlcG9ydGVyKSB7XG4gICAgdGhpcy5yZXBvcnRlcnMucHVzaChyZXBvcnRlcik7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGEgc2V0dXAgZmlsZSB0byBKZXN0J3Mgc2V0dXBGaWxlcyBjb25maWd1cmF0aW9uLlxuICAgKiBAcGFyYW0gZmlsZSBGaWxlIHBhdGggdG8gc2V0dXAgZmlsZVxuICAgKi9cbiAgcHVibGljIGFkZFNldHVwRmlsZShmaWxlOiBzdHJpbmcpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLnNldHVwRmlsZXMpIHtcbiAgICAgIHRoaXMuY29uZmlnLnNldHVwRmlsZXMgPSBbXTtcbiAgICB9XG4gICAgdGhpcy5jb25maWcuc2V0dXBGaWxlcy5wdXNoKGZpbGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBhIHNldHVwIGZpbGUgdG8gSmVzdCdzIHNldHVwRmlsZXNBZnRlckVudiBjb25maWd1cmF0aW9uLlxuICAgKiBAcGFyYW0gZmlsZSBGaWxlIHBhdGggdG8gc2V0dXAgZmlsZVxuICAgKi9cbiAgcHVibGljIGFkZFNldHVwRmlsZUFmdGVyRW52KGZpbGU6IHN0cmluZykge1xuICAgIGlmICghdGhpcy5jb25maWcuc2V0dXBGaWxlc0FmdGVyRW52KSB7XG4gICAgICB0aGlzLmNvbmZpZy5zZXR1cEZpbGVzQWZ0ZXJFbnYgPSBbXTtcbiAgICB9XG4gICAgdGhpcy5jb25maWcuc2V0dXBGaWxlc0FmdGVyRW52LnB1c2goZmlsZSk7XG4gIH1cblxuICBwdWJsaWMgYWRkU25hcHNob3RSZXNvbHZlcihmaWxlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBub3JtYWxpemVkID0gbm9ybWFsaXplUGVyc2lzdGVkUGF0aChmaWxlKTtcblxuICAgIHRoaXMuX3NuYXBzaG90UmVzb2x2ZXIgPSBub3JtYWxpemVkO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgb25lIG9yIG1vcmUgbW9kdWxlTmFtZU1hcHBlciBlbnRyaWVzIHRvIEplc3QncyBjb25maWd1cmF0aW9uLlxuICAgKiBXaWxsIG92ZXJ3cml0ZSBpZiB0aGUgc2FtZSBrZXkgaXMgdXNlZCBhcyBhIHByZS1leGlzdGluZyBvbmUuXG4gICAqXG4gICAqIEBwYXJhbSBtb2R1bGVOYW1lTWFwcGVyQWRkaXRpb25zIC0gQSBtYXAgZnJvbSByZWd1bGFyIGV4cHJlc3Npb25zIHRvIG1vZHVsZSBuYW1lcyBvciB0byBhcnJheXMgb2YgbW9kdWxlIG5hbWVzIHRoYXQgYWxsb3cgdG8gc3R1YiBvdXQgcmVzb3VyY2VzLCBsaWtlIGltYWdlcyBvciBzdHlsZXMgd2l0aCBhIHNpbmdsZSBtb2R1bGUuXG4gICAqL1xuICBwdWJsaWMgYWRkTW9kdWxlTmFtZU1hcHBlcnMobW9kdWxlTmFtZU1hcHBlckFkZGl0aW9uczoge1xuICAgIFtrZXk6IHN0cmluZ106IHN0cmluZyB8IHN0cmluZ1tdO1xuICB9KTogdm9pZCB7XG4gICAgY29uc3QgZXhpc3RpbmdNb2R1bGVOYW1lTWFwcGVyID0gdGhpcy5jb25maWcubW9kdWxlTmFtZU1hcHBlciA/PyB7fTtcbiAgICB0aGlzLmNvbmZpZy5tb2R1bGVOYW1lTWFwcGVyID0ge1xuICAgICAgLi4uZXhpc3RpbmdNb2R1bGVOYW1lTWFwcGVyLFxuICAgICAgLi4ubW9kdWxlTmFtZU1hcHBlckFkZGl0aW9ucyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgb25lIG9yIG1vcmUgbW9kdWxlUGF0aHMgdG8gSmVzdCdzIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBtb2R1bGVQYXRocyAtIEFuIGFycmF5IG9mIGFic29sdXRlIHBhdGhzIHRvIGFkZGl0aW9uYWwgbG9jYXRpb25zIHRvIHNlYXJjaCB3aGVuIHJlc29sdmluZyBtb2R1bGVzICAgKlxuICAgKi9cbiAgcHVibGljIGFkZE1vZHVsZVBhdGhzKC4uLm1vZHVsZVBhdGhzOiBzdHJpbmdbXSk6IHZvaWQge1xuICAgIGNvbnN0IGV4aXN0aW5nTW9kdWxlUGF0aHMgPSB0aGlzLmNvbmZpZy5tb2R1bGVQYXRocyA/PyBbXTtcbiAgICB0aGlzLmNvbmZpZy5tb2R1bGVQYXRocyA9IFtcbiAgICAgIC4uLm5ldyBTZXQoWy4uLmV4aXN0aW5nTW9kdWxlUGF0aHMsIC4uLm1vZHVsZVBhdGhzXSksXG4gICAgXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIG9uZSBvciBtb3JlIHJvb3RzIHRvIEplc3QncyBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gcm9vdHMgLSBBIGxpc3Qgb2YgcGF0aHMgdG8gZGlyZWN0b3JpZXMgdGhhdCBKZXN0IHNob3VsZCB1c2UgdG8gc2VhcmNoIGZvciBmaWxlcyBpbi5cbiAgICovXG4gIHB1YmxpYyBhZGRSb290cyguLi5yb290czogc3RyaW5nW10pOiB2b2lkIHtcbiAgICBjb25zdCBleGlzdGluZ1Jvb3RzID0gdGhpcy5jb25maWcucm9vdHMgPz8gW107XG4gICAgdGhpcy5jb25maWcucm9vdHMgPSBbLi4ubmV3IFNldChbLi4uZXhpc3RpbmdSb290cywgLi4ucm9vdHNdKV07XG4gIH1cblxuICBwcml2YXRlIGNvbmZpZ3VyZVRlc3RDb21tYW5kKHVwZGF0ZVNuYXBzaG90OiBVcGRhdGVTbmFwc2hvdCkge1xuICAgIGNvbnN0IGplc3RPcHRzID0gW1wiLS1wYXNzV2l0aE5vVGVzdHNcIiwgLi4udGhpcy5leHRyYUNsaU9wdGlvbnNdO1xuICAgIGNvbnN0IGplc3RDb25maWdPcHRzID1cbiAgICAgIHRoaXMuZmlsZSAmJiB0aGlzLmZpbGUucGF0aCAhPSBcImplc3QuY29uZmlnLmpzb25cIlxuICAgICAgICA/IGAgLWMgJHt0aGlzLmZpbGUucGF0aH1gXG4gICAgICAgIDogXCJcIjtcblxuICAgIGlmICh1cGRhdGVTbmFwc2hvdCA9PT0gVXBkYXRlU25hcHNob3QuQUxXQVlTKSB7XG4gICAgICBqZXN0T3B0cy5wdXNoKFwiLS11cGRhdGVTbmFwc2hvdFwiKTtcbiAgICB9IGVsc2Uge1xuICAgICAgamVzdE9wdHMucHVzaChcIi0tY2lcIik7IC8vIHRvIHByZXZlbnQgYWNjZXB0aW5nIG5ldyBzbmFwc2hvdHNcblxuICAgICAgY29uc3QgdGVzdFVwZGF0ZSA9IHRoaXMucHJvamVjdC50YXNrcy50cnlGaW5kKFwidGVzdDp1cGRhdGVcIik7XG4gICAgICBpZiAoIXRlc3RVcGRhdGUpIHtcbiAgICAgICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soXCJ0ZXN0OnVwZGF0ZVwiLCB7XG4gICAgICAgICAgZGVzY3JpcHRpb246IFwiVXBkYXRlIGplc3Qgc25hcHNob3RzXCIsXG4gICAgICAgICAgZXhlYzogYGplc3QgLS11cGRhdGVTbmFwc2hvdCAke2plc3RPcHRzLmpvaW4oXCIgXCIpfSR7amVzdENvbmZpZ09wdHN9YCxcbiAgICAgICAgICByZWNlaXZlQXJnczogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5wcm9qZWN0LnRlc3RUYXNrLmV4ZWMoYGplc3QgJHtqZXN0T3B0cy5qb2luKFwiIFwiKX0ke2plc3RDb25maWdPcHRzfWAsIHtcbiAgICAgIHJlY2VpdmVBcmdzOiB0cnVlLFxuICAgIH0pO1xuXG4gICAgY29uc3QgdGVzdFdhdGNoID0gdGhpcy5wcm9qZWN0LnRhc2tzLnRyeUZpbmQoXCJ0ZXN0OndhdGNoXCIpO1xuICAgIGlmICghdGVzdFdhdGNoKSB7XG4gICAgICB0aGlzLnByb2plY3QuYWRkVGFzayhcInRlc3Q6d2F0Y2hcIiwge1xuICAgICAgICBkZXNjcmlwdGlvbjogXCJSdW4gamVzdCBpbiB3YXRjaCBtb2RlXCIsXG4gICAgICAgIGV4ZWM6IGBqZXN0IC0td2F0Y2gke2plc3RDb25maWdPcHRzfWAsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -47,5 +47,5 @@ class LicenseChecker extends component_1.Component {
47
47
  }
48
48
  exports.LicenseChecker = LicenseChecker;
49
49
  _a = JSII_RTTI_SYMBOL_1;
50
- LicenseChecker[_a] = { fqn: "projen.javascript.LicenseChecker", version: "0.88.2" };
50
+ LicenseChecker[_a] = { fqn: "projen.javascript.LicenseChecker", version: "0.88.4" };
51
51
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGljZW5zZS1jaGVja2VyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2phdmFzY3JpcHQvbGljZW5zZS1jaGVja2VyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsNENBQXlDO0FBQ3pDLGtEQUFpRDtBQTZDakQ7O0dBRUc7QUFDSCxNQUFhLGNBQWUsU0FBUSxxQkFBUztJQUczQyxZQUFtQixLQUFnQixFQUFFLE9BQThCO1FBQ2pFLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLElBQUksZ0JBQWdCLENBQUM7UUFDdEQsS0FBSyxDQUFDLEtBQUssRUFBRSxrQkFBa0IsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUUzQyxNQUFNLEVBQ0osVUFBVSxHQUFHLElBQUksRUFDakIsV0FBVyxHQUFHLEtBQUssRUFDbkIsS0FBSyxFQUFFLGVBQWUsR0FBRyxFQUFFLEVBQzNCLElBQUksRUFBRSxrQkFBa0IsR0FBRyxFQUFFLEdBQzlCLEdBQUcsT0FBTyxDQUFDO1FBRVosSUFBSSxDQUFDLFVBQVUsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ2hDLE1BQU0sSUFBSSxLQUFLLENBQ2IsZ0ZBQWdGLENBQ2pGLENBQUM7UUFDSixDQUFDO1FBQ0QsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMxRCxNQUFNLElBQUksS0FBSyxDQUNiLCtGQUErRixDQUNoRyxDQUFDO1FBQ0osQ0FBQztRQUNELElBQUksZUFBZSxDQUFDLE1BQU0sSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUN4RCxNQUFNLElBQUksS0FBSyxDQUNiLCtGQUErRixDQUNoRyxDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sR0FBRyxHQUFHLENBQUMsaUJBQWlCLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFFN0MsSUFBSSxVQUFVLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUMvQixHQUFHLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQzNCLENBQUM7UUFDRCxJQUFJLFdBQVcsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQy9CLEdBQUcsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDNUIsQ0FBQztRQUNELElBQUksZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzNCLEdBQUcsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7WUFDeEIsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLGVBQWUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFDRCxJQUFJLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQzlCLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDckIsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLGtCQUFrQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEQsQ0FBQztRQUVELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxpQkFBaUIsRUFBRSw2QkFBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFO1lBQ3pDLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUNuQixXQUFXLEVBQUUsSUFBSTtTQUNsQixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9DLENBQUM7O0FBckRILHdDQXNEQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiLi4vY29tcG9uZW50XCI7XG5pbXBvcnQgeyBEZXBlbmRlbmN5VHlwZSB9IGZyb20gXCIuLi9kZXBlbmRlbmNpZXNcIjtcbmltcG9ydCB7IFRhc2sgfSBmcm9tIFwiLi4vdGFza1wiO1xuXG4vKipcbiAqIE9wdGlvbnMgdG8gY29uZmlndXJlIHRoZSBsaWNlbnNlIGNoZWNrZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMaWNlbnNlQ2hlY2tlck9wdGlvbnMge1xuICAvKipcbiAgICogQ2hlY2sgcHJvZHVjdGlvbiBkZXBlbmRlbmNpZXMuXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHByb2R1Y3Rpb24/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDaGVjayBkZXZlbG9wbWVudCBkZXBlbmRlbmNpZXMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBkZXZlbG9wbWVudD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgU1BEWCBsaWNlbnNlIGlkZW50aWZpZXJzIHRoYXQgYXJlIGFsbG93ZWQgdG8gYmUgdXNlZC5cbiAgICpcbiAgICogRm9yIHRoZSBsaWNlbnNlIGNoZWNrIHRvIHBhc3MsIGFsbCBkZXRlY3RlZCBsaWNlbnNlcyBNVVNUIGJlIGluIHRoaXMgbGlzdC5cbiAgICogT25seSBvbmUgb2YgYGFsbG93ZWRMaWNlbnNlc2AgYW5kIGBwcm9oaWJpdGVkTGljZW5zZXNgIGNhbiBiZSBwcm92aWRlZCBhbmQgbXVzdCBub3QgYmUgZW1wdHkuXG4gICAqIEBkZWZhdWx0IC0gbm8gbGljZW5zZXMgYXJlIGFsbG93ZWRcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93Pzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgU1BEWCBsaWNlbnNlIGlkZW50aWZpZXJzIHRoYXQgYXJlIHByb2hpYml0ZWQgdG8gYmUgdXNlZC5cbiAgICpcbiAgICogRm9yIHRoZSBsaWNlbnNlIGNoZWNrIHRvIHBhc3MsIG5vIGRldGVjdGVkIGxpY2Vuc2VzIGNhbiBiZSBpbiB0aGlzIGxpc3QuXG4gICAqIE9ubHkgb25lIG9mIGBhbGxvd2VkTGljZW5zZXNgIGFuZCBgcHJvaGliaXRlZExpY2Vuc2VzYCBjYW4gYmUgcHJvdmlkZWQgYW5kIG11c3Qgbm90IGJlIGVtcHR5LlxuICAgKiBAZGVmYXVsdCAtIG5vIGxpY2Vuc2VzIGFyZSBwcm9oaWJpdGVkXG4gICAqL1xuICByZWFkb25seSBkZW55Pzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSB0YXNrIHRoYXQgaXMgYWRkZWQgdG8gY2hlY2sgbGljZW5zZXNcbiAgICpcbiAgICogQGRlZmF1bHQgXCJjaGVjay1saWNlbnNlc1wiXG4gICAqL1xuICByZWFkb25seSB0YXNrTmFtZT86IHN0cmluZztcbn1cblxuLyoqXG4gKiBFbmZvcmNlcyBhbGxvd2VkIGxpY2Vuc2VzIHVzZWQgYnkgZGVwZW5kZW5jaWVzLlxuICovXG5leHBvcnQgY2xhc3MgTGljZW5zZUNoZWNrZXIgZXh0ZW5kcyBDb21wb25lbnQge1xuICBwdWJsaWMgcmVhZG9ubHkgdGFzazogVGFzaztcblxuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgb3B0aW9uczogTGljZW5zZUNoZWNrZXJPcHRpb25zKSB7XG4gICAgY29uc3QgdGFza05hbWUgPSBvcHRpb25zLnRhc2tOYW1lID8/IFwiY2hlY2stbGljZW5zZXNcIjtcbiAgICBzdXBlcihzY29wZSwgYExpY2Vuc2VDaGVja2VyIyR7dGFza05hbWV9YCk7XG5cbiAgICBjb25zdCB7XG4gICAgICBwcm9kdWN0aW9uID0gdHJ1ZSxcbiAgICAgIGRldmVsb3BtZW50ID0gZmFsc2UsXG4gICAgICBhbGxvdzogYWxsb3dlZExpY2Vuc2VzID0gW10sXG4gICAgICBkZW55OiBwcm9oaWJpdGVkTGljZW5zZXMgPSBbXSxcbiAgICB9ID0gb3B0aW9ucztcblxuICAgIGlmICghcHJvZHVjdGlvbiAmJiAhZGV2ZWxvcG1lbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJMaWNlbnNlQ2hlY2tlcjogQXQgbGVhc3Qgb25lIG9mIGBwcm9kdWN0aW9uYCBvciBgZGV2ZWxvcG1lbnRgIG11c3QgYmUgZW5hYmxlZC5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKCFhbGxvd2VkTGljZW5zZXMubGVuZ3RoICYmICFwcm9oaWJpdGVkTGljZW5zZXMubGVuZ3RoKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiTGljZW5zZUNoZWNrZXI6IE5laXRoZXIgYGFsbG93YCBub3IgYGRlbnlgIGZvdW5kLiBFeGFjdGx5IG9uZSBtdXN0IGJlIHByb3ZpZGVkIGFuZCBub3QgZW1wdHkuXCJcbiAgICAgICk7XG4gICAgfVxuICAgIGlmIChhbGxvd2VkTGljZW5zZXMubGVuZ3RoICYmIHByb2hpYml0ZWRMaWNlbnNlcy5sZW5ndGgpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJMaWNlbnNlQ2hlY2tlcjogYGFsbG93YCBhbmQgYGRlbnlgIGNhbiBub3QgYmUgdXNlZCBhdCB0aGUgc2FtZSB0aW1lLiBDaG9vc2Ugb25lIG9yIHRoZSBvdGhlci5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBjbWQgPSBbXCJsaWNlbnNlLWNoZWNrZXJcIiwgXCItLXN1bW1hcnlcIl07XG5cbiAgICBpZiAocHJvZHVjdGlvbiAmJiAhZGV2ZWxvcG1lbnQpIHtcbiAgICAgIGNtZC5wdXNoKFwiLS1wcm9kdWN0aW9uXCIpO1xuICAgIH1cbiAgICBpZiAoZGV2ZWxvcG1lbnQgJiYgIXByb2R1Y3Rpb24pIHtcbiAgICAgIGNtZC5wdXNoKFwiLS1kZXZlbG9wbWVudFwiKTtcbiAgICB9XG4gICAgaWYgKGFsbG93ZWRMaWNlbnNlcy5sZW5ndGgpIHtcbiAgICAgIGNtZC5wdXNoKFwiLS1vbmx5QWxsb3dcIik7XG4gICAgICBjbWQucHVzaChgXCIke2FsbG93ZWRMaWNlbnNlcy5qb2luKFwiO1wiKX1cImApO1xuICAgIH1cbiAgICBpZiAocHJvaGliaXRlZExpY2Vuc2VzLmxlbmd0aCkge1xuICAgICAgY21kLnB1c2goXCItLWZhaWxPblwiKTtcbiAgICAgIGNtZC5wdXNoKGBcIiR7cHJvaGliaXRlZExpY2Vuc2VzLmpvaW4oXCI7XCIpfVwiYCk7XG4gICAgfVxuXG4gICAgdGhpcy5wcm9qZWN0LmRlcHMuYWRkRGVwZW5kZW5jeShcImxpY2Vuc2UtY2hlY2tlclwiLCBEZXBlbmRlbmN5VHlwZS5CVUlMRCk7XG4gICAgdGhpcy50YXNrID0gdGhpcy5wcm9qZWN0LmFkZFRhc2sodGFza05hbWUsIHtcbiAgICAgIGV4ZWM6IGNtZC5qb2luKFwiIFwiKSxcbiAgICAgIHJlY2VpdmVBcmdzOiB0cnVlLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5wcmVDb21waWxlVGFzay5zcGF3bih0aGlzLnRhc2spO1xuICB9XG59XG4iXX0=
@@ -883,7 +883,7 @@ class NodePackage extends component_1.Component {
883
883
  }
884
884
  exports.NodePackage = NodePackage;
885
885
  _a = JSII_RTTI_SYMBOL_1;
886
- NodePackage[_a] = { fqn: "projen.javascript.NodePackage", version: "0.88.2" };
886
+ NodePackage[_a] = { fqn: "projen.javascript.NodePackage", version: "0.88.4" };
887
887
  /**
888
888
  * The node package manager to use.
889
889
  */
@@ -677,5 +677,5 @@ class NodeProject extends github_1.GitHubProject {
677
677
  }
678
678
  exports.NodeProject = NodeProject;
679
679
  _a = JSII_RTTI_SYMBOL_1;
680
- NodeProject[_a] = { fqn: "projen.javascript.NodeProject", version: "0.88.2" };
680
+ NodeProject[_a] = { fqn: "projen.javascript.NodeProject", version: "0.88.4" };
681
681
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibm9kZS1wcm9qZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2phdmFzY3JpcHQvbm9kZS1wcm9qZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsK0JBQXVDO0FBQ3ZDLHVDQUFvRDtBQUNwRCxpQ0FBMkM7QUFDM0MsdURBQTBFO0FBQzFFLGlEQU13QjtBQUN4Qix5Q0FBdUQ7QUFDdkQsb0NBQXFFO0FBQ3JFLG9EQUFzRTtBQUN0RSxzQ0FBdUM7QUFDdkMsa0RBQWlEO0FBQ2pELHNDQU9tQjtBQUNuQixtREFBa0U7QUFDbEUsaURBQTZFO0FBQzdFLCtEQU1tQztBQUNuQyxnREFBK0Q7QUFDL0QsOENBTXVCO0FBQ3ZCLHdDQUFxQztBQUNyQyxvREFBZ0Q7QUFDaEQsd0NBUW9CO0FBQ3BCLHNEQUEwRDtBQUUxRCxrQ0FBNEQ7QUFDNUQsdUNBQStEO0FBRS9ELE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQztBQTZTL0I7O0dBRUc7QUFDSCxJQUFZLFdBVVg7QUFWRCxXQUFZLFdBQVc7SUFDckI7O09BRUc7SUFDSCw2REFBWSxDQUFBO0lBRVo7O09BRUc7SUFDSCwrQ0FBSyxDQUFBO0FBQ1AsQ0FBQyxFQVZXLFdBQVcsMkJBQVgsV0FBVyxRQVV0QjtBQUVEOzs7O0dBSUc7QUFDSCxNQUFhLFdBQVksU0FBUSxzQkFBYTtJQVc1Qzs7T0FFRztJQUNILElBQVcsS0FBSztRQUNkLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLHNCQUFTLENBQUMsSUFBSSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDekQsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQztJQUNyQixDQUFDO0lBR0Q7O09BRUc7SUFDSCxJQUFXLHdCQUF3QjtRQUNqQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsd0JBQXdCLENBQUM7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ZixnQkFBZ0IsRUFFaEIsb0JBQW9CLEVBQ3BCLGVBQWUsRUFFZix5QkFBeUIsRUFDekIsY0FBYyxFQUVkLHdCQUF3QixFQUN4QixPQUFPLEVBRVAsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUVqQixnREFBZ0QsRUFDaEQsUUFBUSxDQUNULENBQUM7SUFDSixDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSSxjQUFjLENBQUMsSUFBVTtRQUM5QixPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3RELENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsa0JBQWtCO1FBQzNCLE9BQU8sSUFBSSxDQUFDLGFBQWEsRUFBRSxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUMsQ0FBQzs7QUFqNUJILGtDQWs1QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWxhdGl2ZSwgcG9zaXggfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgQnVuZGxlciwgQnVuZGxlck9wdGlvbnMgfSBmcm9tIFwiLi9idW5kbGVyXCI7XG5pbXBvcnQgeyBKZXN0LCBKZXN0T3B0aW9ucyB9IGZyb20gXCIuL2plc3RcIjtcbmltcG9ydCB7IExpY2Vuc2VDaGVja2VyLCBMaWNlbnNlQ2hlY2tlck9wdGlvbnMgfSBmcm9tIFwiLi9saWNlbnNlLWNoZWNrZXJcIjtcbmltcG9ydCB7XG4gIENvZGVBcnRpZmFjdEF1dGhQcm92aWRlciBhcyBOb2RlUGFja2FnZUNvZGVBcnRpZmFjdEF1dGhQcm92aWRlcixcbiAgQ29kZUFydGlmYWN0T3B0aW9ucyxcbiAgTm9kZVBhY2thZ2UsXG4gIE5vZGVQYWNrYWdlTWFuYWdlcixcbiAgTm9kZVBhY2thZ2VPcHRpb25zLFxufSBmcm9tIFwiLi9ub2RlLXBhY2thZ2VcIjtcbmltcG9ydCB7IFByb2plbnJjLCBQcm9qZW5yY09wdGlvbnMgfSBmcm9tIFwiLi9wcm9qZW5yY1wiO1xuaW1wb3J0IHsgQnVpbGRXb3JrZmxvdywgQnVpbGRXb3JrZmxvd0NvbW1vbk9wdGlvbnMgfSBmcm9tIFwiLi4vYnVpbGRcIjtcbmltcG9ydCB7IERFRkFVTFRfQVJUSUZBQ1RTX0RJUkVDVE9SWSB9IGZyb20gXCIuLi9idWlsZC9wcml2YXRlL2NvbnN0c1wiO1xuaW1wb3J0IHsgUFJPSkVOX0RJUiB9IGZyb20gXCIuLi9jb21tb25cIjtcbmltcG9ydCB7IERlcGVuZGVuY3lUeXBlIH0gZnJvbSBcIi4uL2RlcGVuZGVuY2llc1wiO1xuaW1wb3J0IHtcbiAgQXV0b01lcmdlLFxuICBEZXBlbmRhYm90T3B0aW9ucyxcbiAgR2l0SHViLFxuICBHaXRIdWJQcm9qZWN0LFxuICBHaXRIdWJQcm9qZWN0T3B0aW9ucyxcbiAgR2l0SWRlbnRpdHksXG59IGZyb20gXCIuLi9naXRodWJcIjtcbmltcG9ydCB7IERFRkFVTFRfR0lUSFVCX0FDVElPTlNfVVNFUiB9IGZyb20gXCIuLi9naXRodWIvY29uc3RhbnRzXCI7XG5pbXBvcnQgeyBlbnN1cmVOb3RIaWRkZW5QYXRoLCBzZWNyZXRUb1N0cmluZyB9IGZyb20gXCIuLi9naXRodWIvcHJpdmF0ZS91dGlsXCI7XG5pbXBvcnQge1xuICBKb2JQZXJtaXNzaW9uLFxuICBKb2JQZXJtaXNzaW9ucyxcbiAgSm9iU3RlcCxcbiAgSm9iU3RlcENvbmZpZ3VyYXRpb24sXG4gIFRyaWdnZXJzLFxufSBmcm9tIFwiLi4vZ2l0aHViL3dvcmtmbG93cy1tb2RlbFwiO1xuaW1wb3J0IHsgSWdub3JlRmlsZSwgSWdub3JlRmlsZU9wdGlvbnMgfSBmcm9tIFwiLi4vaWdub3JlLWZpbGVcIjtcbmltcG9ydCB7XG4gIE5wbUNvbmZpZyxcbiAgUHJldHRpZXIsXG4gIFByZXR0aWVyT3B0aW9ucyxcbiAgVXBncmFkZURlcGVuZGVuY2llcyxcbiAgVXBncmFkZURlcGVuZGVuY2llc09wdGlvbnMsXG59IGZyb20gXCIuLi9qYXZhc2NyaXB0XCI7XG5pbXBvcnQgeyBMaWNlbnNlIH0gZnJvbSBcIi4uL2xpY2Vuc2VcIjtcbmltcG9ydCB7IFByb2plbnJjSnNvbiB9IGZyb20gXCIuLi9wcm9qZW5yYy1qc29uXCI7XG5pbXBvcnQge1xuICBDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXIgYXMgUmVsZWFzZUNvZGVBcnRpZmFjdEF1dGhQcm92aWRlcixcbiAgQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyLFxuICBpc0F3c0NvZGVBcnRpZmFjdFJlZ2lzdHJ5LFxuICBOcG1QdWJsaXNoT3B0aW9ucyxcbiAgUHVibGlzaGVyLFxuICBSZWxlYXNlLFxuICBSZWxlYXNlUHJvamVjdE9wdGlvbnMsXG59IGZyb20gXCIuLi9yZWxlYXNlXCI7XG5pbXBvcnQgeyBmaWx0ZXJlZFJ1bnNPbk9wdGlvbnMgfSBmcm9tIFwiLi4vcnVubmVyLW9wdGlvbnNcIjtcbmltcG9ydCB7IFRhc2sgfSBmcm9tIFwiLi4vdGFza1wiO1xuaW1wb3J0IHsgZGVlcE1lcmdlLCBub3JtYWxpemVQZXJzaXN0ZWRQYXRoIH0gZnJvbSBcIi4uL3V0aWxcIjtcbmltcG9ydCB7IGVuc3VyZVJlbGF0aXZlUGF0aFN0YXJ0c1dpdGhEb3QgfSBmcm9tIFwiLi4vdXRpbC9wYXRoXCI7XG5cbmNvbnN0IFBST0pFTl9TQ1JJUFQgPSBcInByb2plblwiO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5vZGVQcm9qZWN0T3B0aW9uc1xuICBleHRlbmRzIEdpdEh1YlByb2plY3RPcHRpb25zLFxuICAgIE5vZGVQYWNrYWdlT3B0aW9ucyxcbiAgICBSZWxlYXNlUHJvamVjdE9wdGlvbnMge1xuICAvKipcbiAgICogTGljZW5zZSBjb3B5cmlnaHQgb3duZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVmYXVsdHMgdG8gdGhlIHZhbHVlIG9mIGF1dGhvck5hbWUgb3IgXCJcIiBpZiBgYXV0aG9yTmFtZWAgaXMgdW5kZWZpbmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgY29weXJpZ2h0T3duZXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBjb3B5cmlnaHQgeWVhcnMgdG8gcHV0IGluIHRoZSBMSUNFTlNFIGZpbGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gY3VycmVudCB5ZWFyXG4gICAqL1xuICByZWFkb25seSBjb3B5cmlnaHRQZXJpb2Q/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZlcnNpb24gb2YgcHJvamVuIHRvIGluc3RhbGwuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gRGVmYXVsdHMgdG8gdGhlIGxhdGVzdCB2ZXJzaW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVuVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogSW5kaWNhdGVzIG9mIFwicHJvamVuXCIgc2hvdWxkIGJlIGluc3RhbGxlZCBhcyBhIGRldkRlcGVuZGVuY3kuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZSBpZiBub3QgYSBzdWJwcm9qZWN0XG4gICAqL1xuICByZWFkb25seSBwcm9qZW5EZXZEZXBlbmRlbmN5PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGVmaW5lIGEgR2l0SHViIHdvcmtmbG93IGZvciBidWlsZGluZyBQUnMuXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZSBpZiBub3QgYSBzdWJwcm9qZWN0XG4gICAqL1xuICByZWFkb25seSBidWlsZFdvcmtmbG93PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIFBSIGJ1aWxkIHdvcmtmbG93LlxuICAgKi9cbiAgcmVhZG9ubHkgYnVpbGRXb3JrZmxvd09wdGlvbnM/OiBCdWlsZFdvcmtmbG93T3B0aW9ucztcblxuICAvKipcbiAgICogQXV0b21hdGljYWxseSB1cGRhdGUgZmlsZXMgbW9kaWZpZWQgZHVyaW5nIGJ1aWxkcyB0byBwdWxsLXJlcXVlc3QgYnJhbmNoZXMuIFRoaXMgbWVhbnNcbiAgICogdGhhdCBhbnkgZmlsZXMgc3ludGhlc2l6ZWQgYnkgcHJvamVuIG9yIGUuZy4gdGVzdCBzbmFwc2hvdHMgd2lsbCBhbHdheXMgYmUgdXAtdG8tZGF0ZVxuICAgKiBiZWZvcmUgYSBQUiBpcyBtZXJnZWQuXG4gICAqXG4gICAqIEltcGxpZXMgdGhhdCBQUiBidWlsZHMgZG8gbm90IGhhdmUgYW50aS10YW1wZXIgY2hlY2tzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIC0gVXNlIGBidWlsZFdvcmtmbG93T3B0aW9ucy5tdXRhYmxlQnVpbGRgXG4gICAqL1xuICByZWFkb25seSBtdXRhYmxlQnVpbGQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEZWZpbmUgYSBHaXRIdWIgd29ya2Zsb3cgc3RlcCBmb3Igc2VuZGluZyBjb2RlIGNvdmVyYWdlIG1ldHJpY3MgdG8gaHR0cHM6Ly9jb2RlY292LmlvL1xuICAgKiBVc2VzIGNvZGVjb3YvY29kZWNvdi1hY3Rpb25AdjRcbiAgICogQSBzZWNyZXQgaXMgcmVxdWlyZWQgZm9yIHByaXZhdGUgcmVwb3MuIENvbmZpZ3VyZWQgd2l0aCBgQGNvZGVDb3ZUb2tlblNlY3JldGBcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGNvZGVDb3Y/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEZWZpbmUgdGhlIHNlY3JldCBuYW1lIGZvciBhIHNwZWNpZmllZCBodHRwczovL2NvZGVjb3YuaW8vIHRva2VuXG4gICAqIEEgc2VjcmV0IGlzIHJlcXVpcmVkIHRvIHNlbmQgY292ZXJhZ2UgZm9yIHByaXZhdGUgcmVwb3NpdG9yaWVzXG4gICAqIEBkZWZhdWx0IC0gaWYgdGhpcyBvcHRpb24gaXMgbm90IHNwZWNpZmllZCwgb25seSBwdWJsaWMgcmVwb3NpdG9yaWVzIGFyZSBzdXBwb3J0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGNvZGVDb3ZUb2tlblNlY3JldD86IHN0cmluZztcblxuICAvKipcbiAgICogREVQUkVDQVRFRDogcmVuYW1lZCB0byBgcmVsZWFzZWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZSBpZiBub3QgYSBzdWJwcm9qZWN0XG4gICAqIEBkZXByZWNhdGVkIHNlZSBgcmVsZWFzZWAuXG4gICAqL1xuICByZWFkb25seSByZWxlYXNlV29ya2Zsb3c/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBBZGQgcmVsZWFzZSBtYW5hZ2VtZW50IHRvIHRoaXMgcHJvamVjdC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0cnVlIChmYWxzZSBmb3Igc3VicHJvamVjdHMpXG4gICAqL1xuICByZWFkb25seSByZWxlYXNlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIG1haW4gcmVsZWFzZSBicmFuY2guXG4gICAqXG4gICAqIEBkZWZhdWx0IFwibWFpblwiXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0UmVsZWFzZUJyYW5jaDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXb3JrZmxvdyBzdGVwcyB0byB1c2UgaW4gb3JkZXIgdG8gYm9vdHN0cmFwIHRoaXMgcmVwby5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJ5YXJuIGluc3RhbGwgLS1mcm96ZW4tbG9ja2ZpbGUgJiYgeWFybiBwcm9qZW5cIlxuICAgKi9cbiAgcmVhZG9ubHkgd29ya2Zsb3dCb290c3RyYXBTdGVwcz86IEpvYlN0ZXBbXTtcblxuICAvKipcbiAgICogVGhlIGdpdCBpZGVudGl0eSB0byB1c2UgaW4gd29ya2Zsb3dzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEdpdEh1YiBBY3Rpb25zXG4gICAqL1xuICByZWFkb25seSB3b3JrZmxvd0dpdElkZW50aXR5PzogR2l0SWRlbnRpdHk7XG5cbiAgLyoqXG4gICAqIEF1dG9tYXRpY2FsbHkgcmVsZWFzZSB0byBucG0gd2hlbiBuZXcgdmVyc2lvbnMgYXJlIGludHJvZHVjZWQuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSByZWxlYXNlVG9OcG0/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbm9kZSB2ZXJzaW9uIHVzZWQgaW4gR2l0SHViIEFjdGlvbnMgd29ya2Zsb3dzLlxuICAgKlxuICAgKiBBbHdheXMgdXNlIHRoaXMgb3B0aW9uIGlmIHlvdXIgR2l0SHViIEFjdGlvbnMgd29ya2Zsb3dzIHJlcXVpcmUgYSBzcGVjaWZpYyB0byBydW4uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYG1pbk5vZGVWZXJzaW9uYCBpZiBzZXQsIG90aGVyd2lzZSBgbHRzLypgLlxuICAgKi9cbiAgcmVhZG9ubHkgd29ya2Zsb3dOb2RlVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogRW5hYmxlIE5vZGUuanMgcGFja2FnZSBjYWNoZSBpbiBHaXRIdWIgd29ya2Zsb3dzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgd29ya2Zsb3dQYWNrYWdlQ2FjaGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBVc2UgZGVwZW5kYWJvdCB0byBoYW5kbGUgZGVwZW5kZW5jeSB1cGdyYWRlcy5cbiAgICogQ2Fubm90IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBgZGVwc1VwZ3JhZGVgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVwZW5kYWJvdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIGRlcGVuZGFib3QuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVmYXVsdCBvcHRpb25zXG4gICAqL1xuICByZWFkb25seSBkZXBlbmRhYm90T3B0aW9ucz86IERlcGVuZGFib3RPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBVc2UgdGFza3MgYW5kIGdpdGh1YiB3b3JrZmxvd3MgdG8gaGFuZGxlIGRlcGVuZGVuY3kgdXBncmFkZXMuXG4gICAqIENhbm5vdCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYGRlcGVuZGFib3RgLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBkZXBzVXBncmFkZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9wdGlvbnMgZm9yIGBVcGdyYWRlRGVwZW5kZW5jaWVzYC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IG9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IGRlcHNVcGdyYWRlT3B0aW9ucz86IFVwZ3JhZGVEZXBlbmRlbmNpZXNPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBBdXRvbWF0aWNhbGx5IGFwcHJvdmUgZGVwcyB1cGdyYWRlIFBScywgYWxsb3dpbmcgdGhlbSB0byBiZVxuICAgKiBtZXJnZWQgYnkgbWVyZ2lmeSAoaWYgY29uZmlndWVkKS5cbiAgICpcbiAgICogVGhyb3cgaWYgc2V0IHRvIHRydWUgYnV0IGBhdXRvQXBwcm92ZU9wdGlvbnNgIGFyZSBub3QgZGVmaW5lZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0cnVlXG4gICAqL1xuICByZWFkb25seSBhdXRvQXBwcm92ZVVwZ3JhZGVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRGVmaW5lcyBhbiAubnBtaWdub3JlIGZpbGUuIE5vcm1hbGx5IHRoaXMgaXMgb25seSBuZWVkZWQgZm9yIGxpYnJhcmllcyB0aGF0XG4gICAqIGFyZSBwYWNrYWdlZCBhcyB0YXJiYWxscy5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgbnBtaWdub3JlRW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgLm5wbWlnbm9yZSBmaWxlXG4gICAqL1xuICByZWFkb25seSBucG1JZ25vcmVPcHRpb25zPzogSWdub3JlRmlsZU9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEFkZGl0aW9uYWwgZW50cmllcyB0byAubnBtaWdub3JlLlxuICAgKiBAZGVwcmVjYXRlZCAtIHVzZSBgcHJvamVjdC5hZGRQYWNrYWdlSWdub3JlYFxuICAgKi9cbiAgcmVhZG9ubHkgbnBtaWdub3JlPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEluY2x1ZGUgYSBHaXRIdWIgcHVsbCByZXF1ZXN0IHRlbXBsYXRlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBwdWxsUmVxdWVzdFRlbXBsYXRlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGNvbnRlbnRzIG9mIHRoZSBwdWxsIHJlcXVlc3QgdGVtcGxhdGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVmYXVsdCBjb250ZW50XG4gICAqL1xuICByZWFkb25seSBwdWxsUmVxdWVzdFRlbXBsYXRlQ29udGVudHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogU2V0dXAgcHJldHRpZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBwcmV0dGllcj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFByZXR0aWVyIG9wdGlvbnNcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IG9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IHByZXR0aWVyT3B0aW9ucz86IFByZXR0aWVyT3B0aW9ucztcblxuICAvKipcbiAgICogQWRkaXRpb25hbCBlbnRyaWVzIHRvIC5naXRpZ25vcmVcbiAgICovXG4gIHJlYWRvbmx5IGdpdGlnbm9yZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBTZXR1cCBqZXN0IHVuaXQgdGVzdHNcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgamVzdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEplc3Qgb3B0aW9uc1xuICAgKiBAZGVmYXVsdCAtIGRlZmF1bHQgb3B0aW9uc1xuICAgKi9cbiAgcmVhZG9ubHkgamVzdE9wdGlvbnM/OiBKZXN0T3B0aW9ucztcblxuICAvKipcbiAgICogR2VuZXJhdGUgKG9uY2UpIC5wcm9qZW5yYy5qcyAoaW4gSmF2YVNjcmlwdCkuIFNldCB0byBgZmFsc2VgIGluIG9yZGVyIHRvIGRpc2FibGVcbiAgICogLnByb2plbnJjLmpzIGdlbmVyYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdHJ1ZSBpZiBwcm9qZW5yY0pzb24gaXMgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHByb2plbnJjSnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciAucHJvamVucmMuanNcbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IG9wdGlvbnNcbiAgICovXG4gIHJlYWRvbmx5IHByb2plbnJjSnNPcHRpb25zPzogUHJvamVucmNPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBPcHRpb25zIGZvciBgQnVuZGxlcmAuXG4gICAqL1xuICByZWFkb25seSBidW5kbGVyT3B0aW9ucz86IEJ1bmRsZXJPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBBIGRpcmVjdG9yeSB3aGljaCB3aWxsIGNvbnRhaW4gYnVpbGQgYXJ0aWZhY3RzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcImRpc3RcIlxuICAgKi9cbiAgcmVhZG9ubHkgYXJ0aWZhY3RzRGlyZWN0b3J5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGEgYHBhY2thZ2VgIHRhc2sgdGhhdCB3aWxsIHByb2R1Y2UgYW4gbnBtIHRhcmJhbGwgdW5kZXIgdGhlXG4gICAqIGFydGlmYWN0cyBkaXJlY3RvcnkgKGUuZy4gYGRpc3RgKS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcGFja2FnZT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEJ1aWxkIHdvcmtmbG93IHRyaWdnZXJzXG4gICAqIEBkZWZhdWx0IFwieyBwdWxsUmVxdWVzdDoge30sIHdvcmtmbG93RGlzcGF0Y2g6IHt9IH1cIlxuICAgKlxuICAgKiBAZGVwcmVjYXRlZCAtIFVzZSBgYnVpbGRXb3JrZmxvd09wdGlvbnMud29ya2Zsb3dUcmlnZ2Vyc2BcbiAgICovXG4gIHJlYWRvbmx5IGJ1aWxkV29ya2Zsb3dUcmlnZ2Vycz86IFRyaWdnZXJzO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmUgd2hpY2ggbGljZW5zZXMgc2hvdWxkIGJlIGRlZW1lZCBhY2NlcHRhYmxlIGZvciB1c2UgYnkgZGVwZW5kZW5jaWVzXG4gICAqXG4gICAqIFRoaXMgc2V0dGluZyB3aWxsIGNhdXNlIHRoZSBidWlsZCB0byBmYWlsLCBpZiBhbnkgcHJvaGliaXRlZCBvciBub3QgYWxsb3dlZCBsaWNlbnNlcyBhcmVzIGVuY291bnRlcmVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGxpY2Vuc2UgY2hlY2tzIGFyZSBydW4gZHVyaW5nIHRoZSBidWlsZCBhbmQgYWxsIGxpY2Vuc2VzIHdpbGwgYmUgYWNjZXB0ZWRcbiAgICovXG4gIHJlYWRvbmx5IGNoZWNrTGljZW5zZXM/OiBMaWNlbnNlQ2hlY2tlck9wdGlvbnM7XG59XG5cbi8qKlxuICogQnVpbGQgd29ya2Zsb3cgb3B0aW9ucyBmb3IgTm9kZVByb2plY3RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBCdWlsZFdvcmtmbG93T3B0aW9ucyBleHRlbmRzIEJ1aWxkV29ya2Zsb3dDb21tb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIEF1dG9tYXRpY2FsbHkgdXBkYXRlIGZpbGVzIG1vZGlmaWVkIGR1cmluZyBidWlsZHMgdG8gcHVsbC1yZXF1ZXN0IGJyYW5jaGVzLlxuICAgKiBUaGlzIG1lYW5zIHRoYXQgYW55IGZpbGVzIHN5bnRoZXNpemVkIGJ5IHByb2plbiBvciBlLmcuIHRlc3Qgc25hcHNob3RzIHdpbGxcbiAgICogYWx3YXlzIGJlIHVwLXRvLWRhdGUgYmVmb3JlIGEgUFIgaXMgbWVyZ2VkLlxuICAgKlxuICAgKiBJbXBsaWVzIHRoYXQgUFIgYnVpbGRzIGRvIG5vdCBoYXZlIGFudGktdGFtcGVyIGNoZWNrcy5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgbXV0YWJsZUJ1aWxkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBBdXRvbWF0aWMgYnVtcCBtb2Rlc1xuICovXG5leHBvcnQgZW51bSBBdXRvUmVsZWFzZSB7XG4gIC8qKlxuICAgKiBBdXRvbWF0aWNhbGx5IGJ1bXAgJiByZWxlYXNlIGEgbmV3IHZlcnNpb24gZm9yIGV2ZXJ5IGNvbW1pdCB0byBcIm1haW5cIlxuICAgKi9cbiAgRVZFUllfQ09NTUlULFxuXG4gIC8qKlxuICAgKiBBdXRvbWF0aWNhbGx5IGJ1bXAgJiByZWxlYXNlIGEgbmV3IHZlcnNpb24gb24gYSBkYWlseSBiYXNpcy5cbiAgICovXG4gIERBSUxZLFxufVxuXG4vKipcbiAqIE5vZGUuanMgcHJvamVjdC5cbiAqXG4gKiBAcGppZCBub2RlXG4gKi9cbmV4cG9ydCBjbGFzcyBOb2RlUHJvamVjdCBleHRlbmRzIEdpdEh1YlByb2plY3Qge1xuICAvKipcbiAgICogQVBJIGZvciBtYW5hZ2luZyB0aGUgbm9kZSBwYWNrYWdlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBhY2thZ2U6IE5vZGVQYWNrYWdlO1xuXG4gIC8qKlxuICAgKiBUaGUgLm5wbWlnbm9yZSBmaWxlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5wbWlnbm9yZT86IElnbm9yZUZpbGU7XG5cbiAgLyoqXG4gICAqIFRoZSAubnBtcmMgZmlsZVxuICAgKi9cbiAgcHVibGljIGdldCBucG1yYygpOiBOcG1Db25maWcge1xuICAgIGlmICghdGhpcy5fbnBtcmMpIHtcbiAgICAgIHRoaXMuX25wbXJjID0gbmV3IE5wbUNvbmZpZyh0aGlzLCB7IG9taXRFbXB0eTogdHJ1ZSB9KTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuX25wbXJjO1xuICB9XG4gIHByaXZhdGUgX25wbXJjPzogTnBtQ29uZmlnO1xuXG4gIC8qKlxuICAgKiBAZGVwcmVjYXRlZCB1c2UgYHBhY2thZ2UuYWxsb3dMaWJyYXJ5RGVwZW5kZW5jaWVzYFxuICAgKi9cbiAgcHVibGljIGdldCBhbGxvd0xpYnJhcnlEZXBlbmRlbmNpZXMoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMucGFja2FnZS5hbGxvd0xpYnJhcnlEZXBlbmRlbmNpZXM7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGBwYWNrYWdlLmVudHJ5cG9pbnRgXG4gICAqL1xuICBwdWJsaWMgZ2V0IGVudHJ5cG9pbnQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5wYWNrYWdlLmVudHJ5cG9pbnQ7XG4gIH1cblxuICAvKipcbiAgICogQ29tcG9uZW50IHRoYXQgc2V0cyB1cCBtZXJnaWZ5IGZvciBtZXJnaW5nIGFwcHJvdmVkIHB1bGwgcmVxdWVzdHMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXV0b01lcmdlPzogQXV0b01lcmdlO1xuXG4gIC8qKlxuICAgKiBUaGUgUFIgYnVpbGQgR2l0SHViIHdvcmtmbG93LiBgdW5kZWZpbmVkYCBpZiBgYnVpbGRXb3JrZmxvd2AgaXMgZGlzYWJsZWQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYnVpbGRXb3JrZmxvdz86IEJ1aWxkV29ya2Zsb3c7XG5cbiAgLyoqXG4gICAqIFBhY2thZ2UgcHVibGlzaGVyLiBUaGlzIHdpbGwgYmUgYHVuZGVmaW5lZGAgaWYgdGhlIHByb2plY3QgZG9lcyBub3QgaGF2ZSBhXG4gICAqIHJlbGVhc2Ugd29ya2Zsb3cuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBgcmVsZWFzZS5wdWJsaXNoZXJgLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHB1Ymxpc2hlcj86IFB1Ymxpc2hlcjtcblxuICAvKipcbiAgICogUmVsZWFzZSBtYW5hZ2VtZW50LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJlbGVhc2U/OiBSZWxlYXNlO1xuXG4gIC8qKlxuICAgKiBUaGUgbWluaW11bSBub2RlIHZlcnNpb24gcmVxdWlyZWQgYnkgdGhpcyBwYWNrYWdlIHRvIGZ1bmN0aW9uLlxuICAgKlxuICAgKiBUaGlzIHZhbHVlIGluZGljYXRlcyB0aGUgcGFja2FnZSBpcyBpbmNvbXBhdGlibGUgd2l0aCBvbGRlciB2ZXJzaW9ucy5cbiAgICovXG4gIHB1YmxpYyBnZXQgbWluTm9kZVZlcnNpb24oKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5wYWNrYWdlLm1pbk5vZGVWZXJzaW9uO1xuICB9XG5cbiAgLyoqXG4gICAqIE1heGltdW0gbm9kZSB2ZXJzaW9uIHN1cHBvcnRlZCBieSB0aGlzIHBhY2thZ2UuXG4gICAqXG4gICAqIFRoZSB2YWx1ZSBpbmRpY2F0ZXMgdGhlIHBhY2thZ2UgaXMgaW5jb21wYXRpYmxlIHdpdGggbmV3ZXIgdmVyc2lvbnMuXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1heE5vZGVWZXJzaW9uKCk6IHN0cmluZyB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHRoaXMucGFja2FnZS5tYXhOb2RlVmVyc2lvbjtcbiAgfVxuXG4gIHByb3RlY3RlZCByZWFkb25seSBub2RlVmVyc2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHBhY2thZ2UgbWFuYWdlciB0byB1c2UuXG4gICAqXG4gICAqIEBkZXByZWNhdGVkIHVzZSBgcGFja2FnZS5wYWNrYWdlTWFuYWdlcmBcbiAgICovXG4gIHB1YmxpYyBnZXQgcGFja2FnZU1hbmFnZXIoKTogTm9kZVBhY2thZ2VNYW5hZ2VyIHtcbiAgICByZXR1cm4gdGhpcy5wYWNrYWdlLnBhY2thZ2VNYW5hZ2VyO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjb21tYW5kIHRvIHVzZSB0byBydW4gc2NyaXB0cyAoZS5nLiBgeWFybiBydW5gIG9yIGBucG0gcnVuYCBkZXBlbmRzIG9uIHRoZSBwYWNrYWdlIG1hbmFnZXIpLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHJ1blNjcmlwdENvbW1hbmQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEplc3QgY29uZmlndXJhdGlvbiAoaWYgZW5hYmxlZClcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBqZXN0PzogSmVzdDtcblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGBwYWNrYWdlLmFkZEZpZWxkKHgsIHkpYFxuICAgKi9cbiAgcHVibGljIGdldCBtYW5pZmVzdCgpIHtcbiAgICByZXR1cm4gdGhpcy5wYWNrYWdlLm1hbmlmZXN0O1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGJ1bmRsZXI6IEJ1bmRsZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBidWlsZCBvdXRwdXQgZGlyZWN0b3J5LiBBbiBucG0gdGFyYmFsbCB3aWxsIGJlIGNyZWF0ZWQgdW5kZXIgdGhlIGBqc2BcbiAgICogc3ViZGlyZWN0b3J5LiBGb3IgZXhhbXBsZSwgaWYgdGhpcyBpcyBzZXQgdG8gYGRpc3RgICh0aGUgZGVmYXVsdCksIHRoZSBucG1cbiAgICogdGFyYmFsbCB3aWxsIGJlIHBsYWNlZCB1bmRlciBgZGlzdC9qcy9ib29tLWJvb20tMS4yLjMudGdgLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGFydGlmYWN0c0RpcmVjdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9jYXRpb24gb2YgdGhlIG5wbSB0YXJiYWxsIGFmdGVyIGJ1aWxkIChgJHthcnRpZmFjdHNEaXJlY3Rvcnl9L2pzYCkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXJ0aWZhY3RzSmF2YXNjcmlwdERpcmVjdG9yeTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdXBncmFkZSB3b3JrZmxvdy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB1cGdyYWRlV29ya2Zsb3c/OiBVcGdyYWRlRGVwZW5kZW5jaWVzO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSB3b3JrZmxvd0Jvb3RzdHJhcFN0ZXBzOiBKb2JTdGVwW107XG4gIHByaXZhdGUgcmVhZG9ubHkgd29ya2Zsb3dHaXRJZGVudGl0eTogR2l0SWRlbnRpdHk7XG4gIHByb3RlY3RlZCByZWFkb25seSB3b3JrZmxvd1BhY2thZ2VDYWNoZTogYm9vbGVhbjtcbiAgcHVibGljIHJlYWRvbmx5IHByZXR0aWVyPzogUHJldHRpZXI7XG5cbiAgY29uc3RydWN0b3Iob3B0aW9uczogTm9kZVByb2plY3RPcHRpb25zKSB7XG4gICAgc3VwZXIoe1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIC8vIE5vZGUgcHJvamVjdHMgaGF2ZSB0aGUgc3BlY2lmaWMgcHJvamVuIHZlcnNpb24gbG9ja2VkIHZpYSBsb2NrZmlsZSwgc28gd2UgY2FuIHNraXAgdGhlIEA8VkVSU0lPTj4gcGFydCBvZiB0aGUgdG9wLWxldmVsIHByb2plY3RcbiAgICAgIHByb2plbkNvbW1hbmQ6IG9wdGlvbnMucHJvamVuQ29tbWFuZCA/PyBcIm5weCBwcm9qZW5cIixcbiAgICB9KTtcblxuICAgIHRoaXMucGFja2FnZSA9IG5ldyBOb2RlUGFja2FnZSh0aGlzLCBvcHRpb25zKTtcbiAgICB0aGlzLndvcmtmbG93Qm9vdHN0cmFwU3RlcHMgPSBvcHRpb25zLndvcmtmbG93Qm9vdHN0cmFwU3RlcHMgPz8gW107XG4gICAgdGhpcy53b3JrZmxvd0dpdElkZW50aXR5ID1cbiAgICAgIG9wdGlvbnMud29ya2Zsb3dHaXRJZGVudGl0eSA/PyBERUZBVUxUX0dJVEhVQl9BQ1RJT05TX1VTRVI7XG4gICAgdGhpcy53b3JrZmxvd1BhY2thZ2VDYWNoZSA9IG9wdGlvbnMud29ya2Zsb3dQYWNrYWdlQ2FjaGUgPz8gZmFsc2U7XG4gICAgdGhpcy5hcnRpZmFjdHNEaXJlY3RvcnkgPVxuICAgICAgb3B0aW9ucy5hcnRpZmFjdHNEaXJlY3RvcnkgPz8gREVGQVVMVF9BUlRJRkFDVFNfRElSRUNUT1JZO1xuICAgIGVuc3VyZU5vdEhpZGRlblBhdGgodGhpcy5hcnRpZmFjdHNEaXJlY3RvcnksIFwiYXJ0aWZhY3RzRGlyZWN0b3J5XCIpO1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRBcnRpZmFjdHNEaXJlY3RvcnkgPSBub3JtYWxpemVQZXJzaXN0ZWRQYXRoKFxuICAgICAgdGhpcy5hcnRpZmFjdHNEaXJlY3RvcnlcbiAgICApO1xuICAgIHRoaXMuYXJ0aWZhY3RzSmF2YXNjcmlwdERpcmVjdG9yeSA9IHBvc2l4LmpvaW4oXG4gICAgICBub3JtYWxpemVkQXJ0aWZhY3RzRGlyZWN0b3J5LFxuICAgICAgXCJqc1wiXG4gICAgKTtcblxuICAgIHRoaXMucnVuU2NyaXB0Q29tbWFuZCA9ICgoKSA9PiB7XG4gICAgICBzd2l0Y2ggKHRoaXMucGFja2FnZU1hbmFnZXIpIHtcbiAgICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuTlBNOlxuICAgICAgICAgIHJldHVybiBcIm5wbSBydW5cIjtcbiAgICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuWUFSTjpcbiAgICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuWUFSTjI6XG4gICAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLllBUk5fQ0xBU1NJQzpcbiAgICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuWUFSTl9CRVJSWTpcbiAgICAgICAgICByZXR1cm4gXCJ5YXJuIHJ1blwiO1xuICAgICAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5QTlBNOlxuICAgICAgICAgIHJldHVybiBcInBucG0gcnVuXCI7XG4gICAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLkJVTjpcbiAgICAgICAgICByZXR1cm4gXCJidW4gcnVuXCI7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bmV4cGVjdGVkIHBhY2thZ2UgbWFuYWdlciAke3RoaXMucGFja2FnZU1hbmFnZXJ9YCk7XG4gICAgICB9XG4gICAgfSkoKTtcblxuICAgIGNvbnN0IGVudkNvbW1hbmQgPSAoKCkgPT4ge1xuICAgICAgc3dpdGNoICh0aGlzLnBhY2thZ2VNYW5hZ2VyKSB7XG4gICAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLlBOUE06XG4gICAgICAgICAgcmV0dXJuICckKHBucG0gLWMgZXhlYyBcIm5vZGUgLS1wcmludCBwcm9jZXNzLmVudi5QQVRIXCIpJztcbiAgICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuQlVOOlxuICAgICAgICAgIHJldHVybiAnJChidW4gLS1ldmFsIFwiY29uc29sZS5sb2cocHJvY2Vzcy5lbnYuUEFUSClcIiknO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHJldHVybiAnJChucHggLWMgXCJub2RlIC0tcHJpbnQgcHJvY2Vzcy5lbnYuUEFUSFwiKSc7XG4gICAgICB9XG4gICAgfSkoKTtcblxuICAgIHRoaXMubm9kZVZlcnNpb24gPVxuICAgICAgb3B0aW9ucy53b3JrZmxvd05vZGVWZXJzaW9uID8/IHRoaXMucGFja2FnZS5taW5Ob2RlVmVyc2lvbjtcblxuICAgIC8vIGFkZCBQQVRIIGZvciBhbGwgdGFza3Mgd2hpY2ggaW5jbHVkZXMgdGhlIHByb2plY3QncyBucG0gLmJpbiBsaXN0XG4gICAgdGhpcy50YXNrcy5hZGRFbnZpcm9ubWVudChcIlBBVEhcIiwgZW52Q29tbWFuZCk7XG5cbiAgICB0aGlzLmFkZExpY2Vuc2Uob3B0aW9ucyk7XG5cbiAgICBpZiAob3B0aW9ucy5ucG1pZ25vcmVFbmFibGVkID8/IHRydWUpIHtcbiAgICAgIHRoaXMubnBtaWdub3JlID0gbmV3IElnbm9yZUZpbGUoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIFwiLm5wbWlnbm9yZVwiLFxuICAgICAgICBvcHRpb25zLm5wbUlnbm9yZU9wdGlvbnNcbiAgICAgICk7XG4gICAgfVxuXG4gICAgdGhpcy5hZGREZWZhdWx0R2l0SWdub3JlKCk7XG5cbiAgICBpZiAob3B0aW9ucy5naXRpZ25vcmU/Lmxlbmd0aCkge1xuICAgICAgZm9yIChjb25zdCBpIG9mIG9wdGlvbnMuZ2l0aWdub3JlKSB7XG4gICAgICAgIHRoaXMuZ2l0aWdub3JlLmV4Y2x1ZGUoaSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMubnBtaWdub3JlPy5sZW5ndGgpIHtcbiAgICAgIGlmICghdGhpcy5ucG1pZ25vcmUpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICcubnBtaWdub3JlIGlzIG5vdCBkZWZpbmVkIGZvciBhbiBBUFAgcHJvamVjdCB0eXBlLiBBZGQgXCJucG1JZ25vcmU6IHRydWVcIiB0byBvdmVycmlkZSB0aGlzJ1xuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGkgb2Ygb3B0aW9ucy5ucG1pZ25vcmUpIHtcbiAgICAgICAgdGhpcy5ucG1pZ25vcmUuZXhjbHVkZShpKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIXRoaXMuZWplY3RlZCkge1xuICAgICAgdGhpcy5zZXRTY3JpcHQoUFJPSkVOX1NDUklQVCwgdGhpcy5wYWNrYWdlLnByb2plbkNvbW1hbmQpO1xuICAgIH1cblxuICAgIHRoaXMubnBtaWdub3JlPy5leGNsdWRlKGAvJHtQUk9KRU5fRElSfS9gKTtcblxuICAgIGNvbnN0IHByb2plbiA9IG9wdGlvbnMucHJvamVuRGV2RGVwZW5kZW5jeSA/PyAodGhpcy5wYXJlbnQgPyBmYWxzZSA6IHRydWUpO1xuICAgIGlmIChwcm9qZW4gJiYgIXRoaXMuZWplY3RlZCkge1xuICAgICAgY29uc3QgcG9zdGZpeCA9IG9wdGlvbnMucHJvamVuVmVyc2lvbiA/IGBAJHtvcHRpb25zLnByb2plblZlcnNpb259YCA6IFwiXCI7XG4gICAgICB0aGlzLmFkZERldkRlcHMoYHByb2plbiR7cG9zdGZpeH1gKTtcblxuICAgICAgaWYgKFxuICAgICAgICAhdGhpcy5kZXBzLmlzRGVwZW5kZW5jeVNhdGlzZmllZChcbiAgICAgICAgICBcImNvbnN0cnVjdHNcIixcbiAgICAgICAgICBEZXBlbmRlbmN5VHlwZS5CVUlMRCxcbiAgICAgICAgICBcIl4xMC4wLjBcIlxuICAgICAgICApXG4gICAgICApIHtcbiAgICAgICAgdGhpcy5hZGREZXZEZXBzKGBjb25zdHJ1Y3RzQF4xMC4wLjBgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoIW9wdGlvbnMuZGVmYXVsdFJlbGVhc2VCcmFuY2gpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1wiZGVmYXVsdFJlbGVhc2VCcmFuY2hcIiBpcyB0ZW1wb3JhcmlseSBhIHJlcXVpcmVkIG9wdGlvbiB3aGlsZSB3ZSBtaWdyYXRlIGl0cyBkZWZhdWx0IHZhbHVlIGZyb20gXCJtYXN0ZXJcIiB0byBcIm1haW5cIidcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgYnVpbGRFbmFibGVkID0gb3B0aW9ucy5idWlsZFdvcmtmbG93ID8/ICh0aGlzLnBhcmVudCA/IGZhbHNlIDogdHJ1ZSk7XG5cbiAgICAvLyBjb25maWd1cmUgamVzdCBpZiBlbmFibGVkXG4gICAgLy8gbXVzdCBiZSBiZWZvcmUgdGhlIGJ1aWxkL3JlbGVhc2Ugd29ya2Zsb3dzXG4gICAgaWYgKG9wdGlvbnMuamVzdCA/PyB0cnVlKSB7XG4gICAgICB0aGlzLmplc3QgPSBuZXcgSmVzdCh0aGlzLCBvcHRpb25zLmplc3RPcHRpb25zKTtcbiAgICB9XG5cbiAgICBjb25zdCByZXF1aXJlc0lkVG9rZW5QZXJtaXNzaW9uID1cbiAgICAgIChvcHRpb25zLnNjb3BlZFBhY2thZ2VzT3B0aW9ucyA/PyBbXSkubGVuZ3RoID4gMCAmJlxuICAgICAgb3B0aW9ucy5jb2RlQXJ0aWZhY3RPcHRpb25zPy5hdXRoUHJvdmlkZXIgPT09XG4gICAgICAgIENvZGVBcnRpZmFjdEF1dGhQcm92aWRlci5HSVRIVUJfT0lEQztcblxuICAgIGNvbnN0IHdvcmtmbG93UGVybWlzc2lvbnM6IEpvYlBlcm1pc3Npb25zID0ge1xuICAgICAgaWRUb2tlbjogcmVxdWlyZXNJZFRva2VuUGVybWlzc2lvbiA/IEpvYlBlcm1pc3Npb24uV1JJVEUgOiB1bmRlZmluZWQsXG4gICAgfTtcblxuICAgIGNvbnN0IGJ1aWxkV29ya2Zsb3dPcHRpb25zOiBCdWlsZFdvcmtmbG93T3B0aW9ucyA9XG4gICAgICBvcHRpb25zLmJ1aWxkV29ya2Zsb3dPcHRpb25zID8/IHt9O1xuXG4gICAgaWYgKGJ1aWxkRW5hYmxlZCAmJiAodGhpcy5naXRodWIgfHwgR2l0SHViLm9mKHRoaXMucm9vdCkpKSB7XG4gICAgICB0aGlzLmJ1aWxkV29ya2Zsb3cgPSBuZXcgQnVpbGRXb3JrZmxvdyh0aGlzLCB7XG4gICAgICAgIGJ1aWxkVGFzazogdGhpcy5idWlsZFRhc2ssXG4gICAgICAgIGFydGlmYWN0c0RpcmVjdG9yeTogdGhpcy5hcnRpZmFjdHNEaXJlY3RvcnksXG4gICAgICAgIGNvbnRhaW5lckltYWdlOiBvcHRpb25zLndvcmtmbG93Q29udGFpbmVySW1hZ2UsXG4gICAgICAgIGdpdElkZW50aXR5OiB0aGlzLndvcmtmbG93R2l0SWRlbnRpdHksXG4gICAgICAgIG11dGFibGVCdWlsZDogb3B0aW9ucy5tdXRhYmxlQnVpbGQsXG4gICAgICAgIHdvcmtmbG93VHJpZ2dlcnM6IG9wdGlvbnMuYnVpbGRXb3JrZmxvd1RyaWdnZXJzLFxuICAgICAgICBwZXJtaXNzaW9uczogd29ya2Zsb3dQZXJtaXNzaW9ucyxcbiAgICAgICAgLi4uYnVpbGRXb3JrZmxvd09wdGlvbnMsXG4gICAgICAgIHByZUJ1aWxkU3RlcHM6IHRoaXMucmVuZGVyV29ya2Zsb3dTZXR1cCh7XG4gICAgICAgICAgaW5zdGFsbFN0ZXBDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICB3b3JraW5nRGlyZWN0b3J5OiB0aGlzLmRldGVybWluZUluc3RhbGxXb3JraW5nRGlyZWN0b3J5KCksXG4gICAgICAgICAgfSxcbiAgICAgICAgICBtdXRhYmxlOlxuICAgICAgICAgICAgYnVpbGRXb3JrZmxvd09wdGlvbnMubXV0YWJsZUJ1aWxkID8/IG9wdGlvbnMubXV0YWJsZUJ1aWxkID8/IHRydWUsXG4gICAgICAgIH0pLmNvbmNhdChidWlsZFdvcmtmbG93T3B0aW9ucy5wcmVCdWlsZFN0ZXBzID8/IFtdKSxcbiAgICAgICAgcG9zdEJ1aWxkU3RlcHM6IFsuLi4ob3B0aW9ucy5wb3N0QnVpbGRTdGVwcyA/PyBbXSldLFxuICAgICAgICAuLi5maWx0ZXJlZFJ1bnNPbk9wdGlvbnMoXG4gICAgICAgICAgb3B0aW9ucy53b3JrZmxvd1J1bnNPbixcbiAgICAgICAgICBvcHRpb25zLndvcmtmbG93UnVuc09uR3JvdXBcbiAgICAgICAgKSxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLmJ1aWxkV29ya2Zsb3cuYWRkUG9zdEJ1aWxkU3RlcHMoXG4gICAgICAgIC4uLnRoaXMucmVuZGVyVXBsb2FkQ292ZXJhZ2VKb2JTdGVwKG9wdGlvbnMpXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHJlbGVhc2UgPVxuICAgICAgb3B0aW9ucy5yZWxlYXNlID8/XG4gICAgICBvcHRpb25zLnJlbGVhc2VXb3JrZmxvdyA/P1xuICAgICAgKHRoaXMucGFyZW50ID8gZmFsc2UgOiB0cnVlKTtcbiAgICBpZiAocmVsZWFzZSkge1xuICAgICAgdGhpcy5yZWxlYXNlID0gbmV3IFJlbGVhc2UodGhpcywge1xuICAgICAgICB2ZXJzaW9uRmlsZTogXCJwYWNrYWdlLmpzb25cIiwgLy8gdGhpcyBpcyB3aGVyZSBcInZlcnNpb25cIiBpcyBzZXQgYWZ0ZXIgYnVtcFxuICAgICAgICB0YXNrOiB0aGlzLmJ1aWxkVGFzayxcbiAgICAgICAgYnJhbmNoOiBvcHRpb25zLmRlZmF1bHRSZWxlYXNlQnJhbmNoID8/IFwibWFpblwiLFxuICAgICAgICAuLi5vcHRpb25zLFxuXG4gICAgICAgIGFydGlmYWN0c0RpcmVjdG9yeTogdGhpcy5hcnRpZmFjdHNEaXJlY3RvcnksXG4gICAgICAgIHJlbGVhc2VXb3JrZmxvd1NldHVwU3RlcHM6IFtcbiAgICAgICAgICAuLi50aGlzLnJlbmRlcldvcmtmbG93U2V0dXAoe1xuICAgICAgICAgICAgaW5zdGFsbFN0ZXBDb25maWd1cmF0aW9uOiB7XG4gICAgICAgICAgICAgIHdvcmtpbmdEaXJlY3Rvcnk6IHRoaXMuZGV0ZXJtaW5lSW5zdGFsbFdvcmtpbmdEaXJlY3RvcnkoKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBtdXRhYmxlOiBmYWxzZSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICAuLi4ob3B0aW9ucy5yZWxlYXNlV29ya2Zsb3dTZXR1cFN0ZXBzID8/IFtdKSxcbiAgICAgICAgXSxcbiAgICAgICAgcG9zdEJ1aWxkU3RlcHM6IFtcbiAgICAgICAgICAuLi4ob3B0aW9ucy5wb3N0QnVpbGRTdGVwcyA/PyBbXSksXG4gICAgICAgICAgLi4udGhpcy5yZW5kZXJVcGxvYWRDb3ZlcmFnZUpvYlN0ZXAob3B0aW9ucyksXG4gICAgICAgIF0sXG5cbiAgICAgICAgd29ya2Zsb3dOb2RlVmVyc2lvbjogdGhpcy5ub2RlVmVyc2lvbixcbiAgICAgICAgd29ya2Zsb3dQZXJtaXNzaW9ucyxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnB1Ymxpc2hlciA9IHRoaXMucmVsZWFzZS5wdWJsaXNoZXI7XG5cbiAgICAgIGNvbnN0IG5vZGVQYWNrYWdlVG9SZWxlYXNlQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyTWFwcGluZzogUmVjb3JkPFxuICAgICAgICBOb2RlUGFja2FnZUNvZGVBcnRpZmFjdEF1dGhQcm92aWRlcixcbiAgICAgICAgUmVsZWFzZUNvZGVBcnRpZmFjdEF1dGhQcm92aWRlclxuICAgICAgPiA9IHtcbiAgICAgICAgW05vZGVQYWNrYWdlQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyLkFDQ0VTU19BTkRfU0VDUkVUX0tFWV9QQUlSXTpcbiAgICAgICAgICBSZWxlYXNlQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyLkFDQ0VTU19BTkRfU0VDUkVUX0tFWV9QQUlSLFxuICAgICAgICBbTm9kZVBhY2thZ2VDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXIuR0lUSFVCX09JRENdOlxuICAgICAgICAgIFJlbGVhc2VDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXIuR0lUSFVCX09JREMsXG4gICAgICB9O1xuXG4gICAgICBpZiAob3B0aW9ucy5yZWxlYXNlVG9OcG0gPz8gZmFsc2UpIHtcbiAgICAgICAgY29uc3QgY29kZUFydGlmYWN0T3B0aW9uczogTnBtUHVibGlzaE9wdGlvbnNbXCJjb2RlQXJ0aWZhY3RPcHRpb25zXCJdID1cbiAgICAgICAgICBpc0F3c0NvZGVBcnRpZmFjdFJlZ2lzdHJ5KHRoaXMucGFja2FnZS5ucG1SZWdpc3RyeSlcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICAgIGFjY2Vzc0tleUlkU2VjcmV0OlxuICAgICAgICAgICAgICAgICAgb3B0aW9ucy5jb2RlQXJ0aWZhY3RPcHRpb25zPy5hY2Nlc3NLZXlJZFNlY3JldCxcbiAgICAgICAgICAgICAgICBzZWNyZXRBY2Nlc3NLZXlTZWNyZXQ6XG4gICAgICAgICAgICAgICAgICBvcHRpb25zLmNvZGVBcnRpZmFjdE9wdGlvbnM/LnNlY3JldEFjY2Vzc0tleVNlY3JldCxcbiAgICAgICAgICAgICAgICByb2xlVG9Bc3N1bWU6IG9wdGlvbnMuY29kZUFydGlmYWN0T3B0aW9ucz8ucm9sZVRvQXNzdW1lLFxuICAgICAgICAgICAgICAgIGF1dGhQcm92aWRlcjogb3B0aW9ucy5jb2RlQXJ0aWZhY3RPcHRpb25zPy5hdXRoUHJvdmlkZXJcbiAgICAgICAgICAgICAgICAgID8gbm9kZVBhY2thZ2VUb1JlbGVhc2VDb2RlQXJ0aWZhY3RBdXRoUHJvdmlkZXJNYXBwaW5nW1xuICAgICAgICAgICAgICAgICAgICAgIG9wdGlvbnMuY29kZUFydGlmYWN0T3B0aW9ucy5hdXRoUHJvdmlkZXJcbiAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgOiBSZWxlYXNlQ29kZUFydGlmYWN0QXV0aFByb3ZpZGVyLkFDQ0VTU19BTkRfU0VDUkVUX0tFWV9QQUlSLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHt9O1xuICAgICAgICB0aGlzLnJlbGVhc2UucHVibGlzaGVyLnB1Ymxpc2hUb05wbSh7XG4gICAgICAgICAgcmVnaXN0cnk6IHRoaXMucGFja2FnZS5ucG1SZWdpc3RyeSxcbiAgICAgICAgICBucG1Ub2tlblNlY3JldDogdGhpcy5wYWNrYWdlLm5wbVRva2VuU2VjcmV0LFxuICAgICAgICAgIG5wbVByb3ZlbmFuY2U6IHRoaXMucGFja2FnZS5ucG1Qcm92ZW5hbmNlLFxuICAgICAgICAgIGNvZGVBcnRpZmFjdE9wdGlvbnMsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICAvLyB2YWxpZGF0ZSB0aGF0IG5vIHJlbGVhc2Ugb3B0aW9ucyBhcmUgc2VsZWN0ZWQgaWYgdGhlIHJlbGVhc2Ugd29ya2Zsb3cgaXMgZGlzYWJsZWQuXG4gICAgICBpZiAob3B0aW9ucy5yZWxlYXNlVG9OcG0pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdcInJlbGVhc2VUb05wbVwiIGlzIG5vdCBzdXBwb3J0ZWQgaWYgXCJyZWxlYXNlXCIgaXMgbm90IHNldCdcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgaWYgKG9wdGlvbnMucmVsZWFzZUV2ZXJ5Q29tbWl0KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAnXCJyZWxlYXNlRXZlcnlDb21taXRcIiBpcyBub3Qgc3VwcG9ydGVkIGlmIFwicmVsZWFzZVwiIGlzIG5vdCBzZXQnXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGlmIChvcHRpb25zLnJlbGVhc2VTY2hlZHVsZSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgJ1wicmVsZWFzZVNjaGVkdWxlXCIgaXMgbm90IHN1cHBvcnRlZCBpZiBcInJlbGVhc2VcIiBpcyBub3Qgc2V0J1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChcbiAgICAgIChvcHRpb25zLmF1dG9NZXJnZSA/PyB0cnVlKSAmJlxuICAgICAgdGhpcy5naXRodWI/Lm1lcmdpZnkgJiZcbiAgICAgIHRoaXMuYnVpbGRXb3JrZmxvdz8uYnVpbGRKb2JJZHNcbiAgICApIHtcbiAgICAgIHRoaXMuYXV0b01lcmdlID0gbmV3IEF1dG9NZXJnZSh0aGlzLmdpdGh1Yiwgb3B0aW9ucy5hdXRvTWVyZ2VPcHRpb25zKTtcbiAgICAgIHRoaXMuYXV0b01lcmdlLmFkZENvbmRpdGlvbnNMYXRlcih7XG4gICAgICAgIHJlbmRlcjogKCkgPT5cbiAgICAgICAgICB0aGlzLmJ1aWxkV29ya2Zsb3c/LmJ1aWxkSm9iSWRzLm1hcCgoaWQpID0+IGBzdGF0dXMtc3VjY2Vzcz0ke2lkfWApID8/XG4gICAgICAgICAgW10sXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBjb25zdCBkZXBlbmRhYm90ID0gb3B0aW9ucy5kZXBlbmRhYm90ID8/IGZhbHNlO1xuICAgIGNvbnN0IGRlcHNVcGdyYWRlID0gb3B0aW9ucy5kZXBzVXBncmFkZSA/PyAhZGVwZW5kYWJvdDtcblxuICAgIGlmIChkZXBlbmRhYm90ICYmIGRlcHNVcGdyYWRlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIFwiJ2RlcGVuZGFib3QnIGNhbm5vdCBiZSBjb25maWd1cmVkIHRvZ2V0aGVyIHdpdGggJ2RlcHNVcGdyYWRlJ1wiXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGRlcHNBdXRvQXBwcm92ZSA9IG9wdGlvbnMuYXV0b0FwcHJvdmVVcGdyYWRlcyA/PyBmYWxzZTtcblxuICAgIGlmIChkZXBzQXV0b0FwcHJvdmUgJiYgIXRoaXMuYXV0b0FwcHJvdmUgJiYgdGhpcy5naXRodWIpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgXCJBdXRvbWF0aWMgYXBwcm92YWwgb2YgZGVwZW5kZW5jaWVzIHVwZ3JhZGVzIHJlcXVpcmVzIGNvbmZpZ3VyaW5nIGBhdXRvQXBwcm92ZU9wdGlvbnNgXCJcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgYXV0b0FwcHJvdmVMYWJlbCA9IChjb25kaXRpb246IGJvb2xlYW4pID0+XG4gICAgICBjb25kaXRpb24gJiYgdGhpcy5hdXRvQXBwcm92ZT8ubGFiZWxcbiAgICAgICAgPyBbdGhpcy5hdXRvQXBwcm92ZS5sYWJlbF1cbiAgICAgICAgOiB1bmRlZmluZWQ7XG5cbiAgICBpZiAoZGVwZW5kYWJvdCkge1xuICAgICAgY29uc3QgZGVmYXVsdE9wdGlvbnMgPSB7XG4gICAgICAgIGxhYmVsczogYXV0b0FwcHJvdmVMYWJlbChkZXBzQXV0b0FwcHJvdmUpLFxuICAgICAgfTtcbiAgICAgIHRoaXMuZ2l0aHViPy5hZGREZXBlbmRhYm90KFxuICAgICAgICBkZWVwTWVyZ2UoW2RlZmF1bHRPcHRpb25zLCBvcHRpb25zLmRlcGVuZGFib3RPcHRpb25zID8/IHt9XSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKGRlcHNVcGdyYWRlKSB7XG4gICAgICBjb25zdCBkZWZhdWx0T3B0aW9uczogVXBncmFkZURlcGVuZGVuY2llc09wdGlvbnMgPSB7XG4gICAgICAgIHdvcmtmbG93T3B0aW9uczoge1xuICAgICAgICAgIGNvbnRhaW5lcjogb3B0aW9ucy53b3JrZmxvd0NvbnRhaW5lckltYWdlXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICBpbWFnZTogb3B0aW9ucy53b3JrZmxvd0NvbnRhaW5lckltYWdlLFxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgICBsYWJlbHM6IGF1dG9BcHByb3ZlTGFiZWwoZGVwc0F1dG9BcHByb3ZlKSxcbiAgICAgICAgICBnaXRJZGVudGl0eTogdGhpcy53b3JrZmxvd0dpdElkZW50aXR5LFxuICAgICAgICAgIHBlcm1pc3Npb25zOiB3b3JrZmxvd1Blcm1pc3Npb25zLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICAgIHRoaXMudXBncmFkZVdvcmtmbG93ID0gbmV3IFVwZ3JhZGVEZXBlbmRlbmNpZXMoXG4gICAgICAgIHRoaXMsXG4gICAgICAgIGRlZXBNZXJnZShbZGVmYXVsdE9wdGlvbnMsIG9wdGlvbnMuZGVwc1VwZ3JhZGVPcHRpb25zID8/IHt9XSlcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMucHVsbFJlcXVlc3RUZW1wbGF0ZSA/PyB0cnVlKSB7XG4gICAgICB0aGlzLmdpdGh1Yj8uYWRkUHVsbFJlcXVlc3RUZW1wbGF0ZShcbiAgICAgICAgLi4uKG9wdGlvbnMucHVsbFJlcXVlc3RUZW1wbGF0ZUNvbnRlbnRzID8/IFtdKVxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBwcm9qZW5yY0pzID0gb3B0aW9ucy5wcm9qZW5yY0pzID8/ICFvcHRpb25zLnByb2plbnJjSnNvbjtcbiAgICBpZiAoIXRoaXMucGFyZW50ICYmIHByb2plbnJjSnMpIHtcbiAgICAgIGNvbnN0IHByb2plbnJjSnNGaWxlID0gbmV3IFByb2plbnJjKHRoaXMsIG9wdGlvbnMucHJvamVucmNKc09wdGlvbnMpO1xuXG4gICAgICB0aGlzLm5wbWlnbm9yZT8uZXhjbHVkZShgLyR7cHJvamVucmNKc0ZpbGUuZmlsZVBhdGh9YCk7XG4gICAgfSBlbHNlIGlmIChvcHRpb25zLnByb2plbnJjSnNvbikge1xuICAgICAgY29uc3QgcHJvamVucmNKc29uRmlsZSA9IFByb2plbnJjSnNvbi5vZih0aGlzKTtcbiAgICAgIGlmIChwcm9qZW5yY0pzb25GaWxlKSB7XG4gICAgICAgIHRoaXMubnBtaWdub3JlPy5leGNsdWRlKGAvJHtwcm9qZW5yY0pzb25GaWxlLmZpbGVQYXRofWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGFkZCBhIGJ1bmRsZXIgY29tcG9uZW50IC0gdGhpcyBlbmFibGVzIHRoaW5ncyBsaWtlIExhbWJkYSBidW5kbGluZyBhbmQgaW4gdGhlIGZ1dHVyZSB3ZWIgYnVuZGxpbmcuXG4gICAgdGhpcy5idW5kbGVyID0gbmV3IEJ1bmRsZXIodGhpcywgb3B0aW9ucy5idW5kbGVyT3B0aW9ucyk7XG5cbiAgICBjb25zdCBzaG91bGRQYWNrYWdlID0gb3B0aW9ucy5wYWNrYWdlID8/IHRydWU7XG4gICAgaWYgKHJlbGVhc2UgJiYgIXNob3VsZFBhY2thZ2UpIHtcbiAgICAgIHRoaXMubG9nZ2VyLndhcm4oXG4gICAgICAgIFwiV2hlbiBgcmVsZWFzZWAgaXMgZW5hYmxlZCwgYHBhY2thZ2VgIG11c3QgYWxzbyBiZSBlbmFibGVkIGFzIGl0IGlzIHJlcXVpcmVkIGJ5IHJlbGVhc2UuIEZvcmNlIGVuYWJsaW5nIGBwYWNrYWdlYC5cIlxuICAgICAgKTtcbiAgICB9XG4gICAgaWYgKHJlbGVhc2UgfHwgc2hvdWxkUGFja2FnZSkge1xuICAgICAgdGhpcy5wYWNrYWdlVGFzay5leGVjKGBta2RpciAtcCAke3RoaXMuYXJ0aWZhY3RzSmF2YXNjcmlwdERpcmVjdG9yeX1gKTtcblxuICAgICAgY29uc3QgcGtnTWdyID1cbiAgICAgICAgdGhpcy5wYWNrYWdlLnBhY2thZ2VNYW5hZ2VyID09PSBOb2RlUGFja2FnZU1hbmFnZXIuUE5QTVxuICAgICAgICAgID8gXCJwbnBtXCJcbiAgICAgICAgICA6IFwibnBtXCI7XG4gICAgICB0aGlzLnBhY2thZ2VUYXNrLmV4ZWMoXG4gICAgICAgIGAke3BrZ01ncn0gcGFjayAtLXBhY2stZGVzdGluYXRpb24gJHt0aGlzLmFydGlmYWN0c0phdmFzY3JpcHREaXJlY3Rvcnl9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5wcmV0dGllciA/PyBmYWxzZSkge1xuICAgICAgdGhpcy5wcmV0dGllciA9IG5ldyBQcmV0dGllcih0aGlzLCB7IC4uLm9wdGlvbnMucHJldHRpZXJPcHRpb25zIH0pO1xuICAgIH1cblxuICAgIC8vIEZvciBQTlBNLCB0aGUgZGVmYXVsdCByZXNvbHV0aW9uIG1vZGUgaXMgXCJsb3dlc3RcIiwgd2hpY2ggbGVhZHMgdG8gYW55IG5vbi12ZXJzaW9uZWQgKGllICcqJykgZGVwZW5kZW5jaWVzIGJlaW5nXG4gICAgLy8gcmVzb2x2ZWQgdG8gdGhlIGxvd2VzdCBhdmFpbGFibGUgdmVyc2lvbiwgd2hpY2ggaXMgdW5saWtlbHkgdG8gYmUgZXhwZWN0ZWQgYmVoYXZpb3VyIGZvciB1c2Vycy4gV2Ugc2V0IHJlc29sdXRpb25cbiAgICAvLyBtb2RlIHRvIFwiaGlnaGVzdFwiIHRvIG1hdGNoIHRoZSBiZWhhdmlvdXIgb2YgeWFybiBhbmQgbnBtLlxuICAgIGlmICh0aGlzLnBhY2thZ2UucGFja2FnZU1hbmFnZXIgPT09IE5vZGVQYWNrYWdlTWFuYWdlci5QTlBNKSB7XG4gICAgICB0aGlzLm5wbXJjLmFkZENvbmZpZyhcInJlc29sdXRpb24tbW9kZVwiLCBcImhpZ2hlc3RcIik7XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMuY2hlY2tMaWNlbnNlcykge1xuICAgICAgbmV3IExpY2Vuc2VDaGVja2VyKHRoaXMsIG9wdGlvbnMuY2hlY2tMaWNlbnNlcyk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkZXRlcm1pbmVJbnN0YWxsV29ya2luZ0RpcmVjdG9yeSgpOiBzdHJpbmcgfCB1bmRlZmluZWQge1xuICAgIGlmICh0aGlzLnBhcmVudCkge1xuICAgICAgcmV0dXJuIGVuc3VyZVJlbGF0aXZlUGF0aFN0YXJ0c1dpdGhEb3QocmVsYXRpdmUoXCIuXCIsIHRoaXMucm9vdC5vdXRkaXIpKTtcbiAgICB9XG4gICAgcmV0dXJuO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJVcGxvYWRDb3ZlcmFnZUpvYlN0ZXAob3B0aW9uczogTm9kZVByb2plY3RPcHRpb25zKTogSm9iU3RlcFtdIHtcbiAgICAvLyBydW4gY29kZWNvdiBpZiBlbmFibGVkIG9yIGEgc2VjcmV0IHRva2VuIG5hbWUgaXMgcGFzc2VkIGluXG4gICAgLy8gQU5EIGplc3QgbXVzdCBiZSBjb25maWd1cmVkXG4gICAgaWYgKChvcHRpb25zLmNvZGVDb3YgfHwgb3B0aW9ucy5jb2RlQ292VG9rZW5TZWNyZXQpICYmIHRoaXMuamVzdD8uY29uZmlnKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJVcGxvYWQgY292ZXJhZ2UgdG8gQ29kZWNvdlwiLFxuICAgICAgICAgIHVzZXM6IFwiY29kZWNvdi9jb2RlY292LWFjdGlvbkB2NFwiLFxuICAgICAgICAgIHdpdGg6IG9wdGlvbnMuY29kZUNvdlRva2VuU2VjcmV0XG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgICB0b2tlbjogYFxcJHt7IHNlY3JldHMuJHtvcHRpb25zLmNvZGVDb3ZUb2tlblNlY3JldH0gfX1gLFxuICAgICAgICAgICAgICAgIGRpcmVjdG9yeTogdGhpcy5qZXN0LmNvbmZpZy5jb3ZlcmFnZURpcmVjdG9yeSxcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiB7XG4gICAgICAgICAgICAgICAgZGlyZWN0b3J5OiB0aGlzLmplc3QuY29uZmlnLmNvdmVyYWdlRGlyZWN0b3J5LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgXTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBhZGRCaW5zKGJpbnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pIHtcbiAgICB0aGlzLnBhY2thZ2UuYWRkQmluKGJpbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIHRoZSBjb250ZW50cyBvZiBhbiBucG0gcGFja2FnZS5qc29uIHNjcmlwdC5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgVGhlIHNjcmlwdCBuYW1lXG4gICAqIEBwYXJhbSBjb21tYW5kIFRoZSBjb21tYW5kIHRvIGV4ZWN1dGVcbiAgICovXG4gIHB1YmxpYyBzZXRTY3JpcHQobmFtZTogc3RyaW5nLCBjb21tYW5kOiBzdHJpbmcpIHtcbiAgICB0aGlzLnBhY2thZ2Uuc2V0U2NyaXB0KG5hbWUsIGNvbW1hbmQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlcGxhY2VzIHRoZSBjb250ZW50cyBvZiBtdWx0aXBsZSBucG0gcGFja2FnZS5qc29uIHNjcmlwdHMuXG4gICAqIEBwYXJhbSBzY3JpcHRzIFRoZSBzY3JpcHRzIHRvIHNldFxuICAgKi9cbiAgcHVibGljIGFkZFNjcmlwdHMoc2NyaXB0czogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0pIHtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCBjb21tYW5kXSBvZiBPYmplY3QuZW50cmllcyhzY3JpcHRzKSkge1xuICAgICAgdGhpcy5wYWNrYWdlLnNldFNjcmlwdChuYW1lLCBjb21tYW5kKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyB0aGUgbnBtIHNjcmlwdCAoYWx3YXlzIHN1Y2Nlc3NmdWwpLlxuICAgKiBAcGFyYW0gbmFtZSBUaGUgbmFtZSBvZiB0aGUgc2NyaXB0LlxuICAgKi9cbiAgcHVibGljIHJlbW92ZVNjcmlwdChuYW1lOiBzdHJpbmcpIHtcbiAgICB0aGlzLnBhY2thZ2UucmVtb3ZlU2NyaXB0KG5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEluZGljYXRlcyBpZiBhIHNjcmlwdCBieSB0aGUgbmFtZSBuYW1lIGlzIGRlZmluZWQuXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSBzY3JpcHRcbiAgICogQGRlcHJlY2F0ZWQgVXNlIGBwcm9qZWN0LnRhc2tzLnRyeUZpbmQobmFtZSlgXG4gICAqL1xuICBwdWJsaWMgaGFzU2NyaXB0KG5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLnBhY2thZ2UuaGFzU2NyaXB0KG5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIERFUFJFQ0FURURcbiAgICogQGRlcHJlY2F0ZWQgdXNlIGBwcm9qZWN0LmNvbXBpbGVUYXNrLmV4ZWMoKWBcbiAgICovXG4gIHB1YmxpYyBhZGRDb21waWxlQ29tbWFuZCguLi5jb21tYW5kczogc3RyaW5nW10pIHtcbiAgICBmb3IgKGNvbnN0IGMgb2YgY29tbWFuZHMpIHtcbiAgICAgIHRoaXMuY29tcGlsZVRhc2suZXhlYyhjKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogREVQUkVDQVRFRFxuICAgKiBAZGVwcmVjYXRlZCB1c2UgYHByb2plY3QudGVzdFRhc2suZXhlYygpYFxuICAgKi9cbiAgcHVibGljIGFkZFRlc3RDb21tYW5kKC4uLmNvbW1hbmRzOiBzdHJpbmdbXSkge1xuICAgIGZvciAoY29uc3QgYyBvZiBjb21tYW5kcykge1xuICAgICAgdGhpcy50ZXN0VGFzay5leGVjKGMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEaXJlY3RseSBzZXQgZmllbGRzIGluIGBwYWNrYWdlLmpzb25gLlxuICAgKiBAcGFyYW0gZmllbGRzIFRoZSBmaWVsZHMgdG8gc2V0XG4gICAqL1xuICBwdWJsaWMgYWRkRmllbGRzKGZpZWxkczogeyBbbmFtZTogc3RyaW5nXTogYW55IH0pIHtcbiAgICBmb3IgKGNvbnN0IFtuYW1lLCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZmllbGRzKSkge1xuICAgICAgdGhpcy5wYWNrYWdlLmFkZEZpZWxkKG5hbWUsIHZhbHVlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBrZXl3b3JkcyB0byBwYWNrYWdlLmpzb24gKGRlZHVwbGljYXRlZClcbiAgICogQHBhcmFtIGtleXdvcmRzIFRoZSBrZXl3b3JkcyB0byBhZGRcbiAgICovXG4gIHB1YmxpYyBhZGRLZXl3b3JkcyguLi5rZXl3b3Jkczogc3RyaW5nW10pIHtcbiAgICB0aGlzLnBhY2thZ2UuYWRkS2V5d29yZHMoLi4ua2V5d29yZHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBzdGVwcyBmb3Igc2NvcGVkIHBhY2thZ2UgYWNjZXNzXG4gICAqXG4gICAqIEBwYXJhbSBjb2RlQXJ0aWZhY3RPcHRpb25zIERldGFpbHMgb2YgbG9nZ2luZyBpbiB0byBBV1NcbiAgICogQHJldHVybnMgYXJyYXkgb2Ygam9iIHN0ZXBzIHJlcXVpcmVkIGZvciBlYWNoIHByaXZhdGUgc2NvcGVkIHBhY2thZ2VzXG4gICAqL1xuICBwcml2YXRlIGdldFNjb3BlZFBhY2thZ2VTdGVwcyhcbiAgICBjb2RlQXJ0aWZhY3RPcHRpb25zOiBDb2RlQXJ0aWZhY3RPcHRpb25zIHwgdW5kZWZpbmVkXG4gICk6IEpvYlN0ZXBbXSB7XG4gICAgY29uc3QgcGFyc2VkQ29kZUFydGlmYWN0T3B0aW9ucyA9IHtcbiAgICAgIGFjY2Vzc0tleUlkU2VjcmV0OlxuICAgICAgICBjb2RlQXJ0aWZhY3RPcHRpb25zPy5hY2Nlc3NLZXlJZFNlY3JldCA/PyBcIkFXU19BQ0NFU1NfS0VZX0lEXCIsXG4gICAgICBzZWNyZXRBY2Nlc3NLZXlTZWNyZXQ6XG4gICAgICAgIGNvZGVBcnRpZmFjdE9wdGlvbnM/LnNlY3JldEFjY2Vzc0tleVNlY3JldCA/PyBcIkFXU19TRUNSRVRfQUNDRVNTX0tFWVwiLFxuICAgICAgcm9sZVRvQXNzdW1lOiBjb2RlQXJ0aWZhY3RPcHRpb25zPy5yb2xlVG9Bc3N1bWUsXG4gICAgICBhdXRoUHJvdmlkZXI6IGNvZGVBcnRpZmFjdE9wdGlvbnM/LmF1dGhQcm92aWRlcixcbiAgICB9O1xuXG4gICAgaWYgKFxuICAgICAgcGFyc2VkQ29kZUFydGlmYWN0T3B0aW9ucy5hdXRoUHJvdmlkZXIgPT09XG4gICAgICBOb2RlUGFja2FnZUNvZGVBcnRpZmFjdEF1dGhQcm92aWRlci5HSVRIVUJfT0lEQ1xuICAgICkge1xuICAgICAgcmV0dXJuIFtcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6IFwiQ29uZmlndXJlIEFXUyBDcmVkZW50aWFsc1wiLFxuICAgICAgICAgIHVzZXM6IFwiYXdzLWFjdGlvbnMvY29uZmlndXJlLWF3cy1jcmVkZW50aWFsc0B2NFwiLFxuICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgIFwiYXdzLXJlZ2lvblwiOiBcInVzLWVhc3QtMlwiLFxuICAgICAgICAgICAgXCJyb2xlLXRvLWFzc3VtZVwiOiBwYXJzZWRDb2RlQXJ0aWZhY3RPcHRpb25zLnJvbGVUb0Fzc3VtZSxcbiAgICAgICAgICAgIFwicm9sZS1kdXJhdGlvbi1zZWNvbmRzXCI6IDkwMCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJBV1MgQ29kZUFydGlmYWN0IExvZ2luXCIsXG4gICAgICAgICAgcnVuOiBgJHt0aGlzLnJ1blNjcmlwdENvbW1hbmR9IGNhOmxvZ2luYCxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfVxuXG4gICAgaWYgKHBhcnNlZENvZGVBcnRpZmFjdE9wdGlvbnMucm9sZVRvQXNzdW1lKSB7XG4gICAgICByZXR1cm4gW1xuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJDb25maWd1cmUgQVdTIENyZWRlbnRpYWxzXCIsXG4gICAgICAgICAgdXNlczogXCJhd3MtYWN0aW9ucy9jb25maWd1cmUtYXdzLWNyZWRlbnRpYWxzQHY0XCIsXG4gICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgXCJhd3MtYWNjZXNzLWtleS1pZFwiOiBzZWNyZXRUb1N0cmluZyhcbiAgICAgICAgICAgICAgcGFyc2VkQ29kZUFydGlmYWN0T3B0aW9ucy5hY2Nlc3NLZXlJZFNlY3JldFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIFwiYXdzLXNlY3JldC1hY2Nlc3Mta2V5XCI6IHNlY3JldFRvU3RyaW5nKFxuICAgICAgICAgICAgICBwYXJzZWRDb2RlQXJ0aWZhY3RPcHRpb25zLnNlY3JldEFjY2Vzc0tleVNlY3JldFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIFwiYXdzLXJlZ2lvblwiOiBcInVzLWVhc3QtMlwiLFxuICAgICAgICAgICAgXCJyb2xlLXRvLWFzc3VtZVwiOiBwYXJzZWRDb2RlQXJ0aWZhY3RPcHRpb25zLnJvbGVUb0Fzc3VtZSxcbiAgICAgICAgICAgIFwicm9sZS1kdXJhdGlvbi1zZWNvbmRzXCI6IDkwMCxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgbmFtZTogXCJBV1MgQ29kZUFydGlmYWN0IExvZ2luXCIsXG4gICAgICAgICAgcnVuOiBgJHt0aGlzLnJ1blNjcmlwdENvbW1hbmR9IGNhOmxvZ2luYCxcbiAgICAgICAgfSxcbiAgICAgIF07XG4gICAgfVxuXG4gICAgcmV0dXJuIFtcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJBV1MgQ29kZUFydGlmYWN0IExvZ2luXCIsXG4gICAgICAgIHJ1bjogYCR7dGhpcy5ydW5TY3JpcHRDb21tYW5kfSBjYTpsb2dpbmAsXG4gICAgICAgIGVudjoge1xuICAgICAgICAgIEFXU19BQ0NFU1NfS0VZX0lEOiBzZWNyZXRUb1N0cmluZyhcbiAgICAgICAgICAgIHBhcnNlZENvZGVBcnRpZmFjdE9wdGlvbnMuYWNjZXNzS2V5SWRTZWNyZXRcbiAgICAgICAgICApLFxuICAgICAgICAgIEFXU19TRUNSRVRfQUNDRVNTX0tFWTogc2VjcmV0VG9TdHJpbmcoXG4gICAgICAgICAgICBwYXJzZWRDb2RlQXJ0aWZhY3RPcHRpb25zLnNlY3JldEFjY2Vzc0tleVNlY3JldFxuICAgICAgICAgICksXG4gICAgICAgIH0sXG4gICAgICB9LFxuICAgIF07XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgc2V0IG9mIHdvcmtmbG93IHN0ZXBzIHdoaWNoIHNob3VsZCBiZSBleGVjdXRlZCB0byBib290c3RyYXAgYVxuICAgKiB3b3JrZmxvdy5cbiAgICpcbiAgICogQHBhcmFtIG9wdGlvbnMgT3B0aW9ucy5cbiAgICogQHJldHVybnMgSm9iIHN0ZXBzXG4gICAqL1xuICBwdWJsaWMgcmVuZGVyV29ya2Zsb3dTZXR1cChcbiAgICBvcHRpb25zOiBSZW5kZXJXb3JrZmxvd1NldHVwT3B0aW9ucyA9IHt9XG4gICk6IEpvYlN0ZXBbXSB7XG4gICAgY29uc3QgaW5zdGFsbCA9IG5ldyBBcnJheTxKb2JTdGVwPigpO1xuXG4gICAgLy8gZmlyc3QgcnVuIHRoZSB3b3JrZmxvdyBib290c3RyYXAgc3RlcHNcbiAgICBpbnN0YWxsLnB1c2goLi4udGhpcy53b3JrZmxvd0Jvb3RzdHJhcFN0ZXBzKTtcblxuICAgIGlmICh0aGlzLnBhY2thZ2UucGFja2FnZU1hbmFnZXIgPT09IE5vZGVQYWNrYWdlTWFuYWdlci5QTlBNKSB7XG4gICAgICBpbnN0YWxsLnB1c2goe1xuICAgICAgICBuYW1lOiBcIlNldHVwIHBucG1cIixcbiAgICAgICAgdXNlczogXCJwbnBtL2FjdGlvbi1zZXR1cEB2M1wiLFxuICAgICAgICB3aXRoOiB7IHZlcnNpb246IHRoaXMucGFja2FnZS5wbnBtVmVyc2lvbiB9LFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmICh0aGlzLnBhY2thZ2UucGFja2FnZU1hbmFnZXIgPT09IE5vZGVQYWNrYWdlTWFuYWdlci5CVU4pIHtcbiAgICAgIGluc3RhbGwucHVzaCh7XG4gICAgICAgIG5hbWU6IFwiU2V0dXAgYnVuXCIsXG4gICAgICAgIHVzZXM6IFwib3Zlbi1zaC9zZXR1cC1idW5AdjFcIixcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBhY2thZ2UucGFja2FnZU1hbmFnZXIgIT09IE5vZGVQYWNrYWdlTWFuYWdlci5CVU4pIHtcbiAgICAgIGlmICh0aGlzLm5vZGVWZXJzaW9uIHx8IHRoaXMud29ya2Zsb3dQYWNrYWdlQ2FjaGUpIHtcbiAgICAgICAgY29uc3QgY2FjaGUgPVxuICAgICAgICAgIHRoaXMucGFja2FnZS5wYWNrYWdlTWFuYWdlciA9PT0gTm9kZVBhY2thZ2VNYW5hZ2VyLllBUk5cbiAgICAgICAgICAgID8gXCJ5YXJuXCJcbiAgICAgICAgICAgIDogdGhpcy5wYWNrYWdlLnBhY2thZ2VNYW5hZ2VyID09PSBOb2RlUGFja2FnZU1hbmFnZXIuWUFSTjJcbiAgICAgICAgICAgID8gXCJ5YXJuXCJcbiAgICAgICAgICAgIDogdGhpcy5wYWNrYWdlLnBhY2thZ2VNYW5hZ2VyID09PSBOb2RlUGFja2FnZU1hbmFnZXIuWUFSTl9DTEFTU0lDXG4gICAgICAgICAgICA/IFwieWFyblwiXG4gICAgICAgICAgICA6IHRoaXMucGFja2FnZS5wYWNrYWdlTWFuYWdlciA9PT0gTm9kZVBhY2thZ2VNYW5hZ2VyLllBUk5fQkVSUllcbiAgICAgICAgICAgID8gXCJ5YXJuXCJcbiAgICAgICAgICAgIDogdGhpcy5wYWNrYWdlTWFuYWdlciA9PT0gTm9kZVBhY2thZ2VNYW5hZ2VyLkJVTlxuICAgICAgICAgICAgPyBcImJ1blwiXG4gICAgICAgICAgICA6IHRoaXMucGFja2FnZS5wYWNrYWdlTWFuYWdlciA9PT0gTm9kZVBhY2thZ2VNYW5hZ2VyLlBOUE1cbiAgICAgICAgICAgID8gXCJwbnBtXCJcbiAgICAgICAgICAgIDogXCJucG1cIjtcbiAgICAgICAgaW5zdGFsbC5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBcIlNldHVwIE5vZGUuanNcIixcbiAgICAgICAgICB1c2VzOiBcImFjdGlvbnMvc2V0dXAtbm9kZUB2NFwiLFxuICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgIC4uLih0aGlzLm5vZGVWZXJzaW9uICYmIHtcbiAgICAgICAgICAgICAgXCJub2RlLXZlcnNpb25cIjogdGhpcy5ub2RlVmVyc2lvbixcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgLi4uKHRoaXMud29ya2Zsb3dQYWNrYWdlQ2FjaGUgJiYge1xuICAgICAgICAgICAgICBjYWNoZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IG11dGFibGUgPSBvcHRpb25zLm11dGFibGUgPz8gZmFsc2U7XG5cbiAgICBpZiAodGhpcy5wYWNrYWdlLnNjb3BlZFBhY2thZ2VzT3B0aW9ucykge1xuICAgICAgaW5zdGFsbC5wdXNoKFxuICAgICAgICAuLi50aGlzLmdldFNjb3BlZFBhY2thZ2VTdGVwcyh0aGlzLnBhY2thZ2UuY29kZUFydGlmYWN0T3B0aW9ucylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaW5zdGFsbC5wdXNoKHtcbiAgICAgIG5hbWU6IFwiSW5zdGFsbCBkZXBlbmRlbmNpZXNcIixcbiAgICAgIHJ1bjogbXV0YWJsZVxuICAgICAgICA/IHRoaXMucGFja2FnZS5pbnN0YWxsQW5kVXBkYXRlTG9ja2ZpbGVDb21tYW5kXG4gICAgICAgIDogdGhpcy5wYWNrYWdlLmluc3RhbGxDb21tYW5kLFxuICAgICAgLi4uKG9wdGlvbnMuaW5zdGFsbFN0ZXBDb25maWd1cmF0aW9uID8/IHt9KSxcbiAgICB9KTtcblxuICAgIHJldHVybiBpbnN0YWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgbm9ybWFsIGRlcGVuZGVuY2llcy5cbiAgICpcbiAgICogQHBhcmFtIGRlcHMgTmFtZXMgbW9kdWxlcyB0byBpbnN0YWxsLiBCeSBkZWZhdWx0LCB0aGUgdGhlIGRlcGVuZGVuY3kgd2lsbFxuICAgKiBiZSBpbnN0YWxsZWQgaW4gdGhlIG5leHQgYG5weCBwcm9qZW5gIHJ1biBhbmQgdGhlIHZlcnNpb24gd2lsbCBiZSByZWNvcmRlZFxuICAgKiBpbiB5b3VyIGBwYWNrYWdlLmpzb25gIGZpbGUuIFlvdSBjYW4gdXBncmFkZSBtYW51YWxseSBvciB1c2luZyBgeWFyblxuICAgKiBhZGQvdXBncmFkZWAuIElmIHlvdSB3aXNoIHRvIHNwZWNpZnkgYSB2ZXJzaW9uIHJhbmdlIHVzZSB0aGlzIHN5bnRheDpcbiAgICogYG1vZHVsZUBeN2AuXG4gICAqL1xuICBwdWJsaWMgYWRkRGVwcyguLi5kZXBzOiBzdHJpbmdbXSkge1xuICAgIHJldHVybiB0aGlzLnBhY2thZ2UuYWRkRGVwcyguLi5kZXBzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGRldmVsb3BtZW50L3Rlc3QgZGVwZW5kZW5jaWVzLlxuICAgKlxuICAgKiBAcGFyYW0gZGVwcyBOYW1lcyBtb2R1bGVzIHRvIGluc3RhbGwuIEJ5IGRlZmF1bHQsIHRoZSB0aGUgZGVwZW5kZW5jeSB3aWxsXG4gICAqIGJlIGluc3RhbGxlZCBpbiB0aGUgbmV4dCBgbnB4IHByb2plbmAgcnVuIGFuZCB0aGUgdmVyc2lvbiB3aWxsIGJlIHJlY29yZGVkXG4gICAqIGluIHlvdXIgYHBhY2thZ2UuanNvbmAgZmlsZS4gWW91IGNhbiB1cGdyYWRlIG1hbnVhbGx5IG9yIHVzaW5nIGB5YXJuXG4gICAqIGFkZC91cGdyYWRlYC4gSWYgeW91IHdpc2ggdG8gc3BlY2lmeSBhIHZlcnNpb24gcmFuZ2UgdXNlIHRoaXMgc3ludGF4OlxuICAgKiBgbW9kdWxlQF43YC5cbiAgICovXG4gIHB1YmxpYyBhZGREZXZEZXBzKC4uLmRlcHM6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIHRoaXMucGFja2FnZS5hZGREZXZEZXBzKC4uLmRlcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgcGVlciBkZXBlbmRlbmNpZXMuXG4gICAqXG4gICAqIFdoZW4gYWRkaW5nIHBlZXIgZGVwZW5kZW5jaWVzLCBhIGRldkRlcGVuZGVuY3kgd2lsbCBhbHNvIGJlIGFkZGVkIG9uIHRoZVxuICAgKiBwaW5uZWQgdmVyc2lvbiBvZiB0aGUgZGVjbGFyZWQgcGVlci4gVGhpcyB3aWxsIGVuc3VyZSB0aGF0IHlvdSBhcmUgdGVzdGluZ1xuICAgKiB5b3VyIGNvZGUgYWdhaW5zdCB0aGUgbWluaW11bSB2ZXJzaW9uIHJlcXVpcmVkIGZyb20geW91ciBjb25zdW1lcnMuXG4gICAqXG4gICAqIEBwYXJhbSBkZXBzIE5hbWVzIG1vZHVsZXMgdG8gaW5zdGFsbC4gQnkgZGVmYXVsdCwgdGhlIHRoZSBkZXBlbmRlbmN5IHdpbGxcbiAgICogYmUgaW5zdGFsbGVkIGluIHRoZSBuZXh0IGBucHggcHJvamVuYCBydW4gYW5kIHRoZSB2ZXJzaW9uIHdpbGwgYmUgcmVjb3JkZWRcbiAgICogaW4geW91ciBgcGFja2FnZS5qc29uYCBmaWxlLiBZb3UgY2FuIHVwZ3JhZGUgbWFudWFsbHkgb3IgdXNpbmcgYHlhcm5cbiAgICogYWRkL3VwZ3JhZGVgLiBJZiB5b3Ugd2lzaCB0byBzcGVjaWZ5IGEgdmVyc2lvbiByYW5nZSB1c2UgdGhpcyBzeW50YXg6XG4gICAqIGBtb2R1bGVAXjdgLlxuICAgKi9cbiAgcHVibGljIGFkZFBlZXJEZXBzKC4uLmRlcHM6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIHRoaXMucGFja2FnZS5hZGRQZWVyRGVwcyguLi5kZXBzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZWZpbmVzIGJ1bmRsZWQgZGVwZW5kZW5jaWVzLlxuICAgKlxuICAgKiBCdW5kbGVkIGRlcGVuZGVuY2llcyB3aWxsIGJlIGFkZGVkIGFzIG5vcm1hbCBkZXBlbmRlbmNpZXMgYXMgd2VsbCBhcyB0byB0aGVcbiAgICogYGJ1bmRsZWREZXBlbmRlbmNpZXNgIHNlY3Rpb24gb2YgeW91ciBgcGFja2FnZS5qc29uYC5cbiAgICpcbiAgICogQHBhcmFtIGRlcHMgTmFtZXMgbW9kdWxlcyB0byBpbnN0YWxsLiBCeSBkZWZhdWx0LCB0aGUgdGhlIGRlcGVuZGVuY3kgd2lsbFxuICAgKiBiZSBpbnN0YWxsZWQgaW4gdGhlIG5leHQgYG5weCBwcm9qZW5gIHJ1biBhbmQgdGhlIHZlcnNpb24gd2lsbCBiZSByZWNvcmRlZFxuICAgKiBpbiB5b3VyIGBwYWNrYWdlLmpzb25gIGZpbGUuIFlvdSBjYW4gdXBncmFkZSBtYW51YWxseSBvciB1c2luZyBgeWFyblxuICAgKiBhZGQvdXBncmFkZWAuIElmIHlvdSB3aXNoIHRvIHNwZWNpZnkgYSB2ZXJzaW9uIHJhbmdlIHVzZSB0aGlzIHN5bnRheDpcbiAgICogYG1vZHVsZUBeN2AuXG4gICAqL1xuICBwdWJsaWMgYWRkQnVuZGxlZERlcHMoLi4uZGVwczogc3RyaW5nW10pIHtcbiAgICByZXR1cm4gdGhpcy5wYWNrYWdlLmFkZEJ1bmRsZWREZXBzKC4uLmRlcHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgcGF0dGVybnMgdG8gYmUgaWdub3JlZCBieSBucG0uXG4gICAqXG4gICAqIEBwYXJhbSBwYXR0ZXJuIFRoZSBwYXR0ZXJuIHRvIGlnbm9yZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogSWYgeW91IGFyZSBoYXZpbmcgdHJvdWJsZSBnZXR0aW5nIGFuIGlnbm9yZSB0byBwb3B1bGF0ZSwgdHJ5IHVzaW5nIHlvdXIgY29uc3RydWN0IG9yIGNvbXBvbmVudCdzIHByZVN5bnRoZXNpemUgbWV0aG9kIHRvIHByb3Blcmx5IGRlbGF5IGNhbGxpbmcgdGhpcyBtZXRob2QuXG4gICAqL1xuICBwdWJsaWMgb3ZlcnJpZGUgYWRkUGFja2FnZUlnbm9yZShwYXR0ZXJuOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLm5wbWlnbm9yZT8uYWRkUGF0dGVybnMocGF0dGVybik7XG4gIH1cblxuICBwcml2YXRlIGFkZExpY2Vuc2Uob3B0aW9uczogTm9kZVByb2plY3RPcHRpb25zKSB7XG4gICAgaWYgKHRoaXMucGFja2FnZS5saWNlbnNlKSB7XG4gICAgICBuZXcgTGljZW5zZSh0aGlzLCB7XG4gICAgICAgIHNwZHg6IHRoaXMucGFja2FnZS5saWNlbnNlLFxuICAgICAgICBjb3B5cmlnaHRPd25lcjogb3B0aW9ucy5jb3B5cmlnaHRPd25lciA/PyBvcHRpb25zLmF1dGhvck5hbWUsXG4gICAgICAgIGNvcHlyaWdodFBlcmlvZDogb3B0aW9ucy5jb3B5cmlnaHRQZXJpb2QsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZERlZmF1bHRHaXRJZ25vcmUoKSB7XG4gICAgdGhpcy5naXRpZ25vcmUuZXhjbHVkZShcbiAgICAgIFwiIyBMb2dzXCIsXG4gICAgICBcImxvZ3NcIixcbiAgICAgIFwiKi5sb2dcIixcbiAgICAgIFwibnBtLWRlYnVnLmxvZypcIixcbiAgICAgIFwieWFybi1kZWJ1Zy5sb2cqXCIsXG4gICAgICBcInlhcm4tZXJyb3IubG9nKlwiLFxuICAgICAgXCJsZXJuYS1kZWJ1Zy5sb2cqXCIsXG5cbiAgICAgIFwiIyBEaWFnbm9zdGljIHJlcG9ydHMgKGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvcmVwb3J0Lmh0bWwpXCIsXG4gICAgICBcInJlcG9ydC5bMC05XSouWzAtOV0qLlswLTldKi5bMC05XSouanNvblwiLFxuXG4gICAgICBcIiMgUnVudGltZSBkYXRhXCIsXG4gICAgICBcInBpZHNcIixcbiAgICAgIFwiKi5waWRcIixcbiAgICAgIFwiKi5zZWVkXCIsXG4gICAgICBcIioucGlkLmxvY2tcIixcblxuICAgICAgXCIjIERpcmVjdG9yeSBmb3IgaW5zdHJ1bWVudGVkIGxpYnMgZ2VuZXJhdGVkIGJ5IGpzY292ZXJhZ2UvSlNDb3ZlclwiLFxuICAgICAgXCJsaWItY292XCIsXG5cbiAgICAgIFwiIyBDb3ZlcmFnZSBkaXJlY3RvcnkgdXNlZCBieSB0b29scyBsaWtlIGlzdGFuYnVsXCIsXG4gICAgICBcImNvdmVyYWdlXCIsXG4gICAgICBcIioubGNvdlwiLFxuXG4gICAgICBcIiMgbnljIHRlc3QgY292ZXJhZ2VcIixcbiAgICAgIFwiLm55Y19vdXRwdXRcIixcblxuICAgICAgXCIjIENvbXBpbGVkIGJpbmFyeSBhZGRvbnMgKGh0dHBzOi8vbm9kZWpzLm9yZy9hcGkvYWRkb25zLmh0bWwpXCIsXG4gICAgICBcImJ1aWxkL1JlbGVhc2VcIixcblxuICAgICAgXCIjIERlcGVuZGVuY3kgZGlyZWN0b3JpZXNcIixcbiAgICAgIFwibm9kZV9tb2R1bGVzL1wiLFxuICAgICAgXCJqc3BtX3BhY2thZ2VzL1wiLFxuXG4gICAgICBcIiMgVHlwZVNjcmlwdCBjYWNoZVwiLFxuICAgICAgXCIqLnRzYnVpbGRpbmZvXCIsXG5cbiAgICAgIFwiIyBPcHRpb25hbCBlc2xpbnQgY2FjaGVcIixcbiAgICAgIFwiLmVzbGludGNhY2hlXCIsXG5cbiAgICAgIFwiIyBPdXRwdXQgb2YgJ25wbSBwYWNrJ1wiLFxuICAgICAgXCIqLnRnelwiLFxuXG4gICAgICBcIiMgWWFybiBJbnRlZ3JpdHkgZmlsZVwiLFxuICAgICAgXCIueWFybi1pbnRlZ3JpdHlcIixcblxuICAgICAgXCIjIHBhcmNlbC1idW5kbGVyIGNhY2hlIChodHRwczovL3BhcmNlbGpzLm9yZy8pXCIsXG4gICAgICBcIi5jYWNoZVwiXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBzaGVsbCBjb21tYW5kIHRvIGV4ZWN1dGUgaW4gb3JkZXIgdG8gcnVuIGEgdGFzay4gVGhpcyB3aWxsXG4gICAqIHR5cGljYWxseSBiZSBgbnB4IHByb2plbiBUQVNLYC5cbiAgICpcbiAgICogQHBhcmFtIHRhc2sgVGhlIHRhc2sgZm9yIHdoaWNoIHRoZSBjb21tYW5kIGlzIHJlcXVpcmVkXG4gICAqL1xuICBwdWJsaWMgcnVuVGFza0NvbW1hbmQodGFzazogVGFzaykge1xuICAgIHJldHVybiBgJHt0aGlzLnBhY2thZ2UucHJvamVuQ29tbWFuZH0gJHt0YXNrLm5hbWV9YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgam9iIElEIG9mIHRoZSBidWlsZCB3b3JrZmxvdy5cbiAgICovXG4gIHB1YmxpYyBnZXQgYnVpbGRXb3JrZmxvd0pvYklkKCkge1xuICAgIHJldHVybiB0aGlzLmJ1aWxkV29ya2Zsb3c/LmJ1aWxkSm9iSWRzWzBdO1xuICB9XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYHJlbmRlcldvcmtmbG93U2V0dXAoKWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUmVuZGVyV29ya2Zsb3dTZXR1cE9wdGlvbnMge1xuICAvKipcbiAgICogQ29uZmlndXJlIHRoZSBpbnN0YWxsIHN0ZXAgaW4gdGhlIHdvcmtmbG93IHNldHVwLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGB7IG5hbWU6IFwiSW5zdGFsbCBkZXBlbmRlbmNpZXNcIiB9YFxuICAgKlxuICAgKiBAZXhhbXBsZSAtIHsgd29ya2luZ0RpcmVjdG9yeTogXCJyb290cHJvamVjdC1kaXJcIiB9IGZvciBzdWJwcm9qZWN0cyBpbnN0YWxsaW5nIGZyb20gcm9vdC5cbiAgICogQGV4YW1wbGUgLSB7IGVudjogeyBOUE1fVE9LRU46IFwidG9rZW5cIiB9fSBmb3IgaW5zdGFsbGluZyBmcm9tIHByaXZhdGUgbnBtIHJlZ2lzdHJ5LlxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFsbFN0ZXBDb25maWd1cmF0aW9uPzogSm9iU3RlcENvbmZpZ3VyYXRpb247XG4gIC8qKlxuICAgKiBTaG91bGQgdGhlIHBhY2thZ2UgbG9ja2ZpbGUgYmUgdXBkYXRlZD9cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IG11dGFibGU/OiBib29sZWFuO1xufVxuIl19
@@ -45,5 +45,5 @@ class NpmConfig extends component_1.Component {
45
45
  }
46
46
  exports.NpmConfig = NpmConfig;
47
47
  _a = JSII_RTTI_SYMBOL_1;
48
- NpmConfig[_a] = { fqn: "projen.javascript.NpmConfig", version: "0.88.2" };
48
+ NpmConfig[_a] = { fqn: "projen.javascript.NpmConfig", version: "0.88.4" };
49
49
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBtLWNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9qYXZhc2NyaXB0L25wbS1jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw0Q0FBeUM7QUFDekMsZ0NBQWlDO0FBdUJqQzs7R0FFRztBQUNILE1BQWEsU0FBVSxTQUFRLHFCQUFTO0lBT3RDLFlBQVksT0FBb0IsRUFBRSxVQUE0QixFQUFFO1FBQzlELEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQVBqQjs7O1dBR0c7UUFDYyxXQUFNLEdBQVEsRUFBRSxDQUFDO1FBS2hDLElBQUksYUFBTyxDQUFDLE9BQU8sRUFBRSxRQUFRLEVBQUU7WUFDN0IsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ2hCLFNBQVMsRUFBRSxPQUFPLENBQUMsU0FBUztTQUM3QixDQUFDLENBQUM7UUFFSCxJQUFJLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUNyQixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNyQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksV0FBVyxDQUFDLEdBQVcsRUFBRSxLQUFjO1FBQzVDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssV0FBVyxDQUFDLENBQUMsQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVEOzs7OztPQUtHO0lBQ0ksU0FBUyxDQUFDLElBQVksRUFBRSxLQUFhO1FBQzFDLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQzVCLENBQUM7O0FBdENILDhCQXVDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCIuLi9jb21wb25lbnRcIjtcbmltcG9ydCB7IEluaUZpbGUgfSBmcm9tIFwiLi4vaW5pXCI7XG5pbXBvcnQgeyBOb2RlUHJvamVjdCB9IGZyb20gXCIuLi9qYXZhc2NyaXB0XCI7XG5cbi8qKlxuICogT3B0aW9ucyB0byBjb25maWd1cmUgdGhlIGxvY2FsIE5QTSBjb25maWdcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOcG1Db25maWdPcHRpb25zIHtcbiAgLyoqXG4gICAqIFVSTCBvZiB0aGUgcmVnaXN0cnkgbWlycm9yIHRvIHVzZVxuICAgKlxuICAgKiBZb3UgY2FuIGNoYW5nZSB0aGlzIG9yIGFkZCBzY29wZWQgcmVnaXN0cmllcyB1c2luZyB0aGUgYWRkUmVnaXN0cnkgbWV0aG9kXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdXNlIG5wbWpzIGRlZmF1bHQgcmVnaXN0cnlcbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lzdHJ5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBPbWl0cyBlbXB0eSBvYmplY3RzIGFuZCBhcnJheXMuXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBvbWl0RW1wdHk/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIEZpbGUgcmVwcmVzZW50aW5nIHRoZSBsb2NhbCBOUE0gY29uZmlnIGluIC5ucG1yY1xuICovXG5leHBvcnQgY2xhc3MgTnBtQ29uZmlnIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgLyoqXG4gICAqIFRoZSBjb25maWcgb2JqZWN0LiBUaGlzIG9iamVjdCBjYW4gYmUgbXV0YXRlZCB1bnRpbCB0aGUgcHJvamVjdCBpc1xuICAgKiBzeW50aGVzaXplZC5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBhbnkgPSB7fTtcblxuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBOb2RlUHJvamVjdCwgb3B0aW9uczogTnBtQ29uZmlnT3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIocHJvamVjdCk7XG5cbiAgICBuZXcgSW5pRmlsZShwcm9qZWN0LCBcIi5ucG1yY1wiLCB7XG4gICAgICBvYmo6IHRoaXMuY29uZmlnLFxuICAgICAgb21pdEVtcHR5OiBvcHRpb25zLm9taXRFbXB0eSxcbiAgICB9KTtcblxuICAgIGlmIChvcHRpb25zLnJlZ2lzdHJ5KSB7XG4gICAgICB0aGlzLmFkZFJlZ2lzdHJ5KG9wdGlvbnMucmVnaXN0cnkpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBjb25maWd1cmUgYSBzY29wZWQgcmVnaXN0cnlcbiAgICpcbiAgICogQHBhcmFtIHVybCB0aGUgVVJMIG9mIHRoZSByZWdpc3RyeSB0byB1c2VcbiAgICogQHBhcmFtIHNjb3BlIHRoZSBzY29wZSB0aGUgcmVnaXN0cnkgaXMgdXNlZCBmb3I7IGxlYXZlIGVtcHR5IGZvciB0aGUgZGVmYXVsdCByZWdpc3RyeVxuICAgKi9cbiAgcHVibGljIGFkZFJlZ2lzdHJ5KHVybDogc3RyaW5nLCBzY29wZT86IHN0cmluZykge1xuICAgIHRoaXMuYWRkQ29uZmlnKHNjb3BlID8gYCR7c2NvcGV9OnJlZ2lzdHJ5YCA6IFwicmVnaXN0cnlcIiwgdXJsKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjb25maWd1cmUgYSBnZW5lcmljIHByb3BlcnR5XG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBwcm9wZXJ0eVxuICAgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlIG9mIHRoZSBwcm9wZXJ0eVxuICAgKi9cbiAgcHVibGljIGFkZENvbmZpZyhuYW1lOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmNvbmZpZ1tuYW1lXSA9IHZhbHVlO1xuICB9XG59XG4iXX0=
@@ -177,5 +177,5 @@ class Prettier extends component_1.Component {
177
177
  }
178
178
  exports.Prettier = Prettier;
179
179
  _a = JSII_RTTI_SYMBOL_1;
180
- Prettier[_a] = { fqn: "projen.javascript.Prettier", version: "0.88.2" };
180
+ Prettier[_a] = { fqn: "projen.javascript.Prettier", version: "0.88.4" };
181
181
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJldHRpZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvamF2YXNjcmlwdC9wcmV0dGllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDRDQUF5QztBQUN6QyxnREFBK0Q7QUFFL0Qsa0NBQW1DO0FBRW5DLGdEQUE0QztBQUM1QyxrQ0FBbUM7QUE4TW5DLElBQVksV0FVWDtBQVZELFdBQVksV0FBVztJQUNyQjs7T0FFRztJQUNILGdDQUFpQixDQUFBO0lBRWpCOztPQUVHO0lBQ0gsOEJBQWUsQ0FBQTtBQUNqQixDQUFDLEVBVlcsV0FBVywyQkFBWCxXQUFXLFFBVXRCO0FBRUQsSUFBWSwwQkFVWDtBQVZELFdBQVksMEJBQTBCO0lBQ3BDOztPQUVHO0lBQ0gsMkNBQWEsQ0FBQTtJQUViOztPQUVHO0lBQ0gseUNBQVcsQ0FBQTtBQUNiLENBQUMsRUFWVywwQkFBMEIsMENBQTFCLDBCQUEwQixRQVVyQztBQUVELElBQVksU0FxQlg7QUFyQkQsV0FBWSxTQUFTO0lBQ25COzs7T0FHRztJQUNILDBCQUFhLENBQUE7SUFFYjs7T0FFRztJQUNILHNCQUFTLENBQUE7SUFFVDs7T0FFRztJQUNILDBCQUFhLENBQUE7SUFFYjs7T0FFRztJQUNILHNCQUFTLENBQUE7QUFDWCxDQUFDLEVBckJXLFNBQVMseUJBQVQsU0FBUyxRQXFCcEI7QUFFRCxJQUFZLHlCQWVYO0FBZkQsV0FBWSx5QkFBeUI7SUFDbkM7O09BRUc7SUFDSCx3Q0FBVyxDQUFBO0lBRVg7O09BRUc7SUFDSCw4Q0FBaUIsQ0FBQTtJQUVqQjs7T0FFRztJQUNILDhDQUFpQixDQUFBO0FBQ25CLENBQUMsRUFmVyx5QkFBeUIseUNBQXpCLHlCQUF5QixRQWVwQztBQXdCRCxJQUFZLFNBZVg7QUFmRCxXQUFZLFNBQVM7SUFDbkI7O09BRUc7SUFDSCw4QkFBaUIsQ0FBQTtJQUVqQjs7T0FFRztJQUNILDRCQUFlLENBQUE7SUFFZjs7T0FFRztJQUNILGtDQUFxQixD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YUFBYTtRQUNsQiwwR0FBMEc7UUFDMUcsTUFBTSxZQUFZLEdBQUcsQ0FBQyxDQUFZLEVBQW1CLEVBQUUsQ0FDckQsQ0FBQyxZQUFZLHdCQUFVLENBQUM7UUFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFO1lBQ3pELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDOztBQTNGSCw0QkE0RkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiLi4vY29tcG9uZW50XCI7XG5pbXBvcnQgeyBJZ25vcmVGaWxlLCBJZ25vcmVGaWxlT3B0aW9ucyB9IGZyb20gXCIuLi9pZ25vcmUtZmlsZVwiO1xuaW1wb3J0IHsgTm9kZVByb2plY3QgfSBmcm9tIFwiLi4vamF2YXNjcmlwdFwiO1xuaW1wb3J0IHsgSnNvbkZpbGUgfSBmcm9tIFwiLi4vanNvblwiO1xuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gXCIuLi9wcm9qZWN0XCI7XG5pbXBvcnQgeyBTb3VyY2VDb2RlIH0gZnJvbSBcIi4uL3NvdXJjZS1jb2RlXCI7XG5pbXBvcnQgeyBZYW1sRmlsZSB9IGZyb20gXCIuLi95YW1sXCI7XG4vKipcbiAqIE9wdGlvbnMgZm9yIFByZXR0aWVyXG4gKlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFByZXR0aWVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBEZWZpbmVzIGFuIC5wcmV0dGllcklnbm9yZSBmaWxlXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGlnbm9yZUZpbGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIC5wcmV0dGllcmlnbm9yZSBmaWxlXG4gICAqL1xuICByZWFkb25seSBpZ25vcmVGaWxlT3B0aW9ucz86IElnbm9yZUZpbGVPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBQcmV0dGllciBzZXR0aW5ncy5cbiAgICogQGRlZmF1bHQgLSBkZWZhdWx0IHNldHRpbmdzXG4gICAqL1xuICByZWFkb25seSBzZXR0aW5ncz86IFByZXR0aWVyU2V0dGluZ3M7XG5cbiAgLyoqXG4gICAqIFByb3ZpZGUgYSBsaXN0IG9mIHBhdHRlcm5zIHRvIG92ZXJyaWRlIHByZXR0aWVyIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqIEBzZWUgaHR0cHM6Ly9wcmV0dGllci5pby9kb2NzL2VuL2NvbmZpZ3VyYXRpb24uaHRtbCNjb25maWd1cmF0aW9uLW92ZXJyaWRlc1xuICAgKi9cbiAgcmVhZG9ubHkgb3ZlcnJpZGVzPzogUHJldHRpZXJPdmVycmlkZVtdO1xuXG4gIC8qKlxuICAgKiBXcml0ZSBwcmV0dGllciBjb25maWd1cmF0aW9uIGFzIFlBTUwgaW5zdGVhZCBvZiBKU09OXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSB5YW1sPzogYm9vbGVhbjtcbn1cbi8qKlxuICogT3B0aW9ucyB0byBzZXQgaW4gUHJldHRpZXIgZGlyZWN0bHkgb3IgdGhyb3VnaCBvdmVycmlkZXNcbiAqXG4gKiBAc2VlIGh0dHBzOi8vcHJldHRpZXIuaW8vZG9jcy9lbi9vcHRpb25zLmh0bWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQcmV0dGllclNldHRpbmdzIHtcbiAgLyoqXG4gICAqIEluY2x1ZGUgcGFyZW50aGVzZXMgYXJvdW5kIGEgc29sZSBhcnJvdyBmdW5jdGlvbiBwYXJhbWV0ZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IEFycm93UGFyZW5zLkFMV0FZU1xuICAgKi9cbiAgcmVhZG9ubHkgYXJyb3dQYXJlbnM/OiBBcnJvd1BhcmVucztcbiAgLyoqXG4gICAqIFB1dCA+IG9mIG9wZW5pbmcgdGFncyBvbiB0aGUgbGFzdCBsaW5lIGluc3RlYWQgb2Ygb24gYSBuZXcgbGluZS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGJyYWNrZXRTYW1lTGluZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBQcmludCBzcGFjZXMgYmV0d2VlbiBicmFja2V0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgYnJhY2tldFNwYWNpbmc/OiBib29sZWFuO1xuICAvKipcbiAgICogUHJpbnQgKHRvIHN0ZGVycikgd2hlcmUgYSBjdXJzb3IgYXQgdGhlIGdpdmVuIHBvc2l0aW9uIHdvdWxkIG1vdmUgdG8gYWZ0ZXIgZm9ybWF0dGluZy5cbiAgICogVGhpcyBvcHRpb24gY2Fubm90IGJlIHVzZWQgd2l0aCAtLXJhbmdlLXN0YXJ0IGFuZCAtLXJhbmdlLWVuZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLTFcbiAgICovXG4gIHJlYWRvbmx5IGN1cnNvck9mZnNldD86IG51bWJlcjtcbiAgLyoqXG4gICAqIENvbnRyb2wgaG93IFByZXR0aWVyIGZvcm1hdHMgcXVvdGVkIGNvZGUgZW1iZWRkZWQgaW4gdGhlIGZpbGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IEVtYmVkZGVkTGFuZ3VhZ2VGb3JtYXR0aW5nLkFVVE9cbiAgICovXG4gIHJlYWRvbmx5IGVtYmVkZGVkTGFuZ3VhZ2VGb3JtYXR0aW5nPzogRW1iZWRkZWRMYW5ndWFnZUZvcm1hdHRpbmc7XG4gIC8qKlxuICAgKiBXaGljaCBlbmQgb2YgbGluZSBjaGFyYWN0ZXJzIHRvIGFwcGx5LlxuICAgKlxuICAgKiBAZGVmYXVsdCBFbmRPZkxpbmUuTEZcbiAgICovXG4gIHJlYWRvbmx5IGVuZE9mTGluZT86IEVuZE9mTGluZTtcbiAgLyoqXG4gICAqIFNwZWNpZnkgdGhlIGlucHV0IGZpbGVwYXRoLiBUaGlzIHdpbGwgYmUgdXNlZCB0byBkbyBwYXJzZXIgaW5mZXJlbmNlLlxuICAgKiBAZGVmYXVsdCBub25lXG4gICAqL1xuICByZWFkb25seSBmaWxlcGF0aD86IHN0cmluZztcbiAgLyoqXG4gICAqIEhvdyB0byBoYW5kbGUgd2hpdGVzcGFjZXMgaW4gSFRNTC5cbiAgICpcbiAgICogQGRlZmF1bHQgSFRNTFdoaXRlc3BhY2VTZW5zaXRpdml0eS5DU1NcbiAgICovXG4gIHJlYWRvbmx5IGh0bWxXaGl0ZXNwYWNlU2Vuc2l0aXZpdHk/OiBIVE1MV2hpdGVzcGFjZVNlbnNpdGl2aXR5O1xuICAvKipcbiAgICogSW5zZXJ0IEBmb3JtYXQgcHJhZ21hIGludG8gZmlsZSdzIGZpcnN0IGRvY2Jsb2NrIGNvbW1lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBpbnNlcnRQcmFnbWE/OiBib29sZWFuO1xuICAvKipcbiAgICogVXNlIHNpbmdsZSBxdW90ZXMgaW4gSlNYLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkganN4U2luZ2xlUXVvdGU/OiBib29sZWFuO1xuICAvKipcbiAgICogV2hpY2ggcGFyc2VyIHRvIHVzZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBQcmV0dGllciBhdXRvbWF0aWNhbGx5IGluZmVycyB0aGUgcGFyc2VyIGZyb20gdGhlIGlucHV0IGZpbGUgcGF0aCwgc28geW91IHNob3VsZG7igJl0IGhhdmUgdG8gY2hhbmdlIHRoaXMgc2V0dGluZy5cbiAgICovXG4gIHJlYWRvbmx5IHBhcnNlcj86IHN0cmluZztcbiAgLyoqXG4gICAqIEFkZCBhIHBsdWdpbi4gTXVsdGlwbGUgcGx1Z2lucyBjYW4gYmUgcGFzc2VkIGFzIHNlcGFyYXRlIGAtLXBsdWdpbmBzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBbXVxuICAgKi9cbiAgcmVhZG9ubHkgcGx1Z2lucz86IHN0cmluZ1tdO1xuICAvKipcbiAgICogQ3VzdG9tIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHByZXR0aWVyIHBsdWdpbnMgaW4gbm9kZV9tb2R1bGVzIHN1YmRpcmVjdG9yeS5cbiAgICogT3ZlcnJpZGVzIGRlZmF1bHQgYmVoYXZpb3Igd2hlbiBwbHVnaW5zIGFyZSBzZWFyY2hlZCByZWxhdGl2ZWx5IHRvIHRoZSBsb2NhdGlvbiBvZlxuICAgKiBQcmV0dGllci5cbiAgICogTXVsdGlwbGUgdmFsdWVzIGFyZSBhY2NlcHRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgW11cbiAgICovXG4gIHJlYWRvbmx5IHBsdWdpblNlYXJjaERpcnM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFRoZSBsaW5lIGxlbmd0aCB3aGVyZSBQcmV0dGllciB3aWxsIHRyeSB3cmFwLlxuICAgKlxuICAgKiBAZGVmYXVsdCA4MFxuICAgKi9cbiAgcmVhZG9ubHkgcHJpbnRXaWR0aD86IG51bWJlcjtcbiAgLyoqXG4gICAqIEhvdyB0byB3cmFwIHByb3NlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBQcm9zZVdyYXAuUFJFU0VSVkVcbiAgICovXG4gIHJlYWRvbmx5IHByb3NlV3JhcD86IFByb3NlV3JhcDtcbiAgLyoqXG4gICAqIENoYW5nZSB3aGVuIHByb3BlcnRpZXMgaW4gb2JqZWN0cyBhcmUgcXVvdGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBRdW90ZVByb3BzLkFTTkVFREVEXG4gICAqL1xuICByZWFkb25seSBxdW90ZVByb3BzPzogUXVvdGVQcm9wcztcbiAgLyoqXG4gICAqIEZvcm1hdCBjb2RlIGVuZGluZyBhdCBhIGdpdmVuIGNoYXJhY3RlciBvZmZzZXQgKGV4Y2x1c2l2ZSkuXG4gICAqIFRoZSByYW5nZSB3aWxsIGV4dGVuZCBmb3J3YXJkcyB0byB0aGUgZW5kIG9mIHRoZSBzZWxlY3RlZCBzdGF0ZW1lbnQuXG4gICAqIFRoaXMgb3B0aW9uIGNhbm5vdCBiZSB1c2VkIHdpdGggLS1jdXJzb3Itb2Zmc2V0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBudWxsXG4gICAqL1xuICByZWFkb25seSByYW5nZUVuZD86IG51bWJlcjtcbiAgLyoqXG4gICAqIEZvcm1hdCBjb2RlIHN0YXJ0aW5nIGF0IGEgZ2l2ZW4gY2hhcmFjdGVyIG9mZnNldC5cbiAgICogVGhlIHJhbmdlIHdpbGwgZXh0ZW5kIGJhY2t3YXJkcyB0byB0aGUgc3RhcnQgb2YgdGhlIGZpcnN0IGxpbmUgY29udGFpbmluZyB0aGUgc2VsZWN0ZWRcbiAgICogc3RhdGVtZW50LlxuICAgKiBUaGlzIG9wdGlvbiBjYW5ub3QgYmUgdXNlZCB3aXRoIC0tY3Vyc29yLW9mZnNldC5cbiAgICpcbiAgICogQGRlZmF1bHQgMFxuICAgKi9cbiAgcmVhZG9ubHkgcmFuZ2VTdGFydD86IG51bWJlcjtcbiAgLyoqXG4gICAqIFJlcXVpcmUgZWl0aGVyICdAcHJldHRpZXInIG9yICdAZm9ybWF0JyB0byBiZSBwcmVzZW50IGluIHRoZSBmaWxlJ3MgZmlyc3QgZG9jYmxvY2tcbiAgICogY29tbWVudFxuICAgKiBpbiBvcmRlciBmb3IgaXQgdG8gYmUgZm9ybWF0dGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVxdWlyZVByYWdtYT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBQcmludCBzZW1pY29sb25zLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBzZW1pPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIFVzZSBzaW5nbGUgcXVvdGVzIGluc3RlYWQgb2YgZG91YmxlIHF1b3Rlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHNpbmdsZVF1b3RlPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIE51bWJlciBvZiBzcGFjZXMgcGVyIGluZGVudGF0aW9uIGxldmVsLlxuICAgKlxuICAgKiBAZGVmYXVsdCAyXG4gICAqL1xuICByZWFkb25seSB0YWJXaWR0aD86IG51bWJlcjtcbiAgLyoqXG4gICAqIFByaW50IHRyYWlsaW5nIGNvbW1hcyB3aGVyZXZlciBwb3NzaWJsZSB3aGVuIG11bHRpLWxpbmUuXG4gICAqXG4gICAqIEBkZWZhdWx0IFRyYWlsaW5nQ29tbWEuRVM1XG4gICAqL1xuICByZWFkb25seSB0cmFpbGluZ0NvbW1hPzogVHJhaWxpbmdDb21tYTtcbiAgLyoqXG4gICAqIEluZGVudCB3aXRoIHRhYnMgaW5zdGVhZCBvZiBzcGFjZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSB1c2VUYWJzPzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEluZGVudCBzY3JpcHQgYW5kIHN0eWxlIHRhZ3MgaW4gVnVlIGZpbGVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgdnVlSW5kZW50U2NyaXB0QW5kU3R5bGU/OiBib29sZWFuO1xufVxuXG5leHBvcnQgZW51bSBBcnJvd1BhcmVucyB7XG4gIC8qKlxuICAgKiBBbHdheXMgaW5jbHVkZSBwYXJlbnMuIEV4YW1wbGU6IGAoeCkgPT4geGBcbiAgICovXG4gIEFMV0FZUyA9IFwiYWx3YXlzXCIsXG5cbiAgLyoqXG4gICAqIE9taXQgcGFyZW5zIHdoZW4gcG9zc2libGUuIEV4YW1wbGU6IGB4ID0+IHhgXG4gICAqL1xuICBBVk9JRCA9IFwiYXZvaWRcIixcbn1cblxuZXhwb3J0IGVudW0gRW1iZWRkZWRMYW5ndWFnZUZvcm1hdHRpbmcge1xuICAvKipcbiAgICogRm9ybWF0IGVtYmVkZGVkIGNvZGUgaWYgUHJldHRpZXIgY2FuIGF1dG9tYXRpY2FsbHkgaWRlbnRpZnkgaXQuXG4gICAqL1xuICBBVVRPID0gXCJhdXRvXCIsXG5cbiAgLyoqXG4gICAqIE5ldmVyIGF1dG9tYXRpY2FsbHkgZm9ybWF0IGVtYmVkZGVkIGNvZGUuXG4gICAqL1xuICBPRkYgPSBcIm9mZlwiLFxufVxuXG5leHBvcnQgZW51bSBFbmRPZkxpbmUge1xuICAvKipcbiAgICogTWFpbnRhaW4gZXhpc3RpbmcgKG1peGVkIHZhbHVlcyB3aXRoaW4gb25lIGZpbGUgYXJlIG5vcm1hbGlzZWQgYnkgbG9va2luZ1xuICAgKiBhdCB3aGF0J3MgdXNlZCBhZnRlciB0aGUgZmlyc3QgbGluZSlcbiAgICovXG4gIEFVVE8gPSBcImF1dG9cIixcblxuICAvKipcbiAgICogQ2FycmlhZ2UgUmV0dXJuIGNoYXJhY3RlciBvbmx5IChcXHIpLCB1c2VkIHZlcnkgcmFyZWx5XG4gICAqL1xuICBDUiA9IFwiY3JcIixcblxuICAvKipcbiAgICogQ2FycmlhZ2UgUmV0dXJuICsgTGluZSBGZWVkIGNoYXJhY3RlcnMgKFxcclxcbiksIGNvbW1vbiBvbiBXaW5kb3dzXG4gICAqL1xuICBDUkxGID0gXCJjcmxmXCIsXG5cbiAgLyoqXG4gICAqIExpbmUgRmVlZCBvbmx5IChcXG4pLCBjb21tb24gb24gTGludXggYW5kIG1hY09TIGFzIHdlbGwgYXMgaW5zaWRlIGdpdCByZXBvc1xuICAgKi9cbiAgTEYgPSBcImxmXCIsXG59XG5cbmV4cG9ydCBlbnVtIEhUTUxXaGl0ZXNwYWNlU2Vuc2l0aXZpdHkge1xuICAvKipcbiAgICogUmVzcGVjdCB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBDU1MgZGlzcGxheSBwcm9wZXJ0eS5cbiAgICovXG4gIENTUyA9IFwiY3NzXCIsXG5cbiAgLyoqXG4gICAqIFdoaXRlc3BhY2VzIGFyZSBjb25zaWRlcmVkIGluc2lnbmlmaWNhbnQuXG4gICAqL1xuICBJR05PUkUgPSBcImlnbm9yZVwiLFxuXG4gIC8qKlxuICAgKiBXaGl0ZXNwYWNlcyBhcmUgY29uc2lkZXJlZCBzaWduaWZpY2FudC5cbiAgICovXG4gIFNUUklDVCA9IFwic3RyaWN0XCIsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJldHRpZXJPdmVycmlkZSB7XG4gIC8qKlxuICAgKiBFeGNsdWRlIHRoZXNlIGZpbGVzIGZyb20gdGhpcyBvdmVycmlkZS5cbiAgICovXG4gIHJlYWRvbmx5IGV4Y2x1ZGVGaWxlcz86IEZpbGVzO1xuICAvKipcbiAgICogSW5jbHVkZSB0aGVzZSBmaWxlcyBpbiB0aGlzIG92ZXJyaWRlLlxuICAgKi9cbiAgcmVhZG9ubHkgZmlsZXM6IEZpbGVzO1xuICAvKipcbiAgICogVGhlIG9wdGlvbnMgdG8gYXBwbHkgZm9yIHRoaXMgb3ZlcnJpZGUuXG4gICAqL1xuICByZWFkb25seSBvcHRpb25zOiBQcmV0dGllclNldHRpbmdzO1xufVxuXG4vKipcbiAqIEV4Y2x1ZGUgdGhlc2UgZmlsZXMgZnJvbSB0aGlzIG92ZXJyaWRlLlxuICpcbiAqIEluY2x1ZGUgdGhlc2UgZmlsZXMgaW4gdGhpcyBvdmVycmlkZS5cbiAqL1xuZXhwb3J0IHR5cGUgRmlsZXMgPSBzdHJpbmdbXSB8IHN0cmluZztcblxuZXhwb3J0IGVudW0gUHJvc2VXcmFwIHtcbiAgLyoqXG4gICAqIFdyYXAgcHJvc2UgaWYgaXQgZXhjZWVkcyB0aGUgcHJpbnQgd2lkdGguXG4gICAqL1xuICBBTFdBWVMgPSBcImFsd2F5c1wiLFxuXG4gIC8qKlxuICAgKiBEbyBub3Qgd3JhcCBwcm9zZS5cbiAgICovXG4gIE5FVkVSID0gXCJuZXZlclwiLFxuXG4gIC8qKlxuICAgKiBXcmFwIHByb3NlIGFzLWlzLlxuICAgKi9cbiAgUFJFU0VSVkUgPSBcInByZXNlcnZlXCIsXG59XG5cbmV4cG9ydCBlbnVtIFF1b3RlUHJvcHMge1xuICAvKipcbiAgICogT25seSBhZGQgcXVvdGVzIGFyb3VuZCBvYmplY3QgcHJvcGVydGllcyB3aGVyZSByZXF1aXJlZC5cbiAgICovXG4gIEFTTkVFREVEID0gXCJhcy1uZWVkZWRcIixcblxuICAvKipcbiAgICogSWYgYXQgbGVhc3Qgb25lIHByb3BlcnR5IGluIGFuIG9iamVjdCByZXF1aXJlcyBxdW90ZXMsIHF1b3RlIGFsbCBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgQ09OU0lTVEVOVCA9IFwiY29uc2lzdGVudFwiLFxuXG4gIC8qKlxuICAgKiBSZXNwZWN0IHRoZSBpbnB1dCB1c2Ugb2YgcXVvdGVzIGluIG9iamVjdCBwcm9wZXJ0aWVzLlxuICAgKi9cbiAgUFJFU0VSVkUgPSBcInByZXNlcnZlXCIsXG59XG5cbmV4cG9ydCBlbnVtIFRyYWlsaW5nQ29tbWEge1xuICAvKipcbiAgICogVHJhaWxpbmcgY29tbWFzIHdoZXJldmVyIHBvc3NpYmxlIChpbmNsdWRpbmcgZnVuY3Rpb24gYXJndW1lbnRzKS5cbiAgICovXG4gIEFMTCA9IFwiYWxsXCIsXG5cbiAgLyoqXG4gICAqIFRyYWlsaW5nIGNvbW1hcyB3aGVyZSB2YWxpZCBpbiBFUzUgKG9iamVjdHMsIGFycmF5cywgZXRjLilcbiAgICovXG4gIEVTNSA9IFwiZXM1XCIsXG5cbiAgLyoqXG4gICAqIE5vIHRyYWlsaW5nIGNvbW1hcy5cbiAgICovXG4gIE5PTkUgPSBcIm5vbmVcIixcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHByZXR0aWVyIGNvbmZpZ3VyYXRpb24uXG4gKi9cbmV4cG9ydCBjbGFzcyBQcmV0dGllciBleHRlbmRzIENvbXBvbmVudCB7XG4gIHB1YmxpYyBzdGF0aWMgb2YocHJvamVjdDogUHJvamVjdCk6IFByZXR0aWVyIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBpc1ByZXR0aWVyID0gKGM6IENvbXBvbmVudCk6IGMgaXMgUHJldHRpZXIgPT4gYyBpbnN0YW5jZW9mIFByZXR0aWVyO1xuICAgIHJldHVybiBwcm9qZWN0LmNvbXBvbmVudHMuZmluZChpc1ByZXR0aWVyKTtcbiAgfVxuICAvKipcbiAgICogRGlyZWN0IGFjY2VzcyB0byB0aGUgcHJldHRpZXIgc2V0dGluZ3NcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBzZXR0aW5nczogUHJldHRpZXJTZXR0aW5ncztcblxuICAvKipcbiAgICogVGhlIC5wcmV0dGllcklnbm9yZSBmaWxlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGlnbm9yZUZpbGU/OiBJZ25vcmVGaWxlO1xuXG4gIC8qKlxuICAgKiBEaXJlY3QgYWNjZXNzIHRvIHRoZSBwcmV0dGllciBvdmVycmlkZXNcbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IF9vdmVycmlkZXM6IFByZXR0aWVyT3ZlcnJpZGVbXTtcblxuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBOb2RlUHJvamVjdCwgb3B0aW9uczogUHJldHRpZXJPcHRpb25zKSB7XG4gICAgc3VwZXIocHJvamVjdCk7XG5cbiAgICB0aGlzLl9vdmVycmlkZXMgPSBvcHRpb25zLm92ZXJyaWRlcyA/PyBbXTtcblxuICAgIGlmIChvcHRpb25zLmlnbm9yZUZpbGUgPz8gdHJ1ZSkge1xuICAgICAgdGhpcy5pZ25vcmVGaWxlID0gbmV3IElnbm9yZUZpbGUoXG4gICAgICAgIHByb2plY3QsXG4gICAgICAgIFwiLnByZXR0aWVyaWdub3JlXCIsXG4gICAgICAgIG9wdGlvbnMuaWdub3JlRmlsZU9wdGlvbnNcbiAgICAgICk7XG5cbiAgICAgIHByb2plY3QuYWRkUGFja2FnZUlnbm9yZShcIi8ucHJldHRpZXJpZ25vcmVcIik7XG4gICAgfVxuXG4gICAgcHJvamVjdC5hZGREZXZEZXBzKFwicHJldHRpZXJcIik7XG5cbiAgICB0aGlzLnNldHRpbmdzID0ge1xuICAgICAgLi4ub3B0aW9ucy5zZXR0aW5ncyxcbiAgICB9O1xuXG4gICAgaWYgKG9wdGlvbnMueWFtbCkge1xuICAgICAgbmV3IFlhbWxGaWxlKHByb2plY3QsIFwiLnByZXR0aWVycmMueW1sXCIsIHtcbiAgICAgICAgb2JqOiAoKSA9PiAoeyAuLi50aGlzLnNldHRpbmdzLCBvdmVycmlkZXM6IFsuLi50aGlzLl9vdmVycmlkZXNdIH0pLFxuICAgICAgICBtYXJrZXI6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIHByb2plY3QuYWRkUGFja2FnZUlnbm9yZShcIi8ucHJldHRpZXJyYy55bWxcIik7XG4gICAgfSBlbHNlIHtcbiAgICAgIG5ldyBKc29uRmlsZShwcm9qZWN0LCBcIi5wcmV0dGllcnJjLmpzb25cIiwge1xuICAgICAgICBvYmo6ICgpID0+ICh7IC4uLnRoaXMuc2V0dGluZ3MsIG92ZXJyaWRlczogWy4uLnRoaXMuX292ZXJyaWRlc10gfSksXG4gICAgICAgIG1hcmtlcjogZmFsc2UsXG4gICAgICB9KTtcbiAgICAgIHByb2plY3QuYWRkUGFja2FnZUlnbm9yZShcIi8ucHJldHRpZXJyYy5qc29uXCIpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBBZGQgYSBwcmV0dGllciBvdmVycmlkZVxuICAgKiBAc2VlIGh0dHBzOi8vcHJldHRpZXIuaW8vZG9jcy9lbi9jb25maWd1cmF0aW9uLmh0bWwjY29uZmlndXJhdGlvbi1vdmVycmlkZXNcbiAgICogQHBhcmFtIHtQcmV0dGllck92ZXJyaWRlfSBvdmVycmlkZVxuICAgKi9cbiAgcHVibGljIGFkZE92ZXJyaWRlKG92ZXJyaWRlOiBQcmV0dGllck92ZXJyaWRlKSB7XG4gICAgdGhpcy5fb3ZlcnJpZGVzLnB1c2gob3ZlcnJpZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlZmluZXMgUHJldHRpZXIgaWdub3JlIFBhdHRlcm5zXG4gICAqIHRoZXNlIHBhdHRlcm5zIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGZpbGUgLnByZXR0aWVyaWdub3JlXG4gICAqXG4gICAqIEBwYXJhbSBwYXR0ZXJuIGZpbGVwYXR0ZXJucyBzbyBleGNsdWRlIGZyb20gcHJldHRpZXIgZm9ybWF0dGluZ1xuICAgKi9cbiAgcHVibGljIGFkZElnbm9yZVBhdHRlcm4ocGF0dGVybjogc3RyaW5nKSB7XG4gICAgdGhpcy5pZ25vcmVGaWxlPy5hZGRQYXR0ZXJucyhwYXR0ZXJuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiAgUmV0dXJucyBhbGwgUHJldHRpZXIgb3ZlcnJpZGVzXG4gICAqL1xuICBwdWJsaWMgZ2V0IG92ZXJyaWRlcygpIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuX292ZXJyaWRlc107XG4gIH1cblxuICBwdWJsaWMgcHJlU3ludGhlc2l6ZSgpIHtcbiAgICAvLyBBZGQgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgU291cmNlQ29kZSBmaWxlcyB0byAucHJldHRpZXJpZ25vcmUgYXMgdGhleSBtYXkgbm90IGJlIGZvcm1hdHRlZCBjb3JyZWN0bHkuXG4gICAgY29uc3QgaXNTb3VyY2VDb2RlID0gKGM6IENvbXBvbmVudCk6IGMgaXMgU291cmNlQ29kZSA9PlxuICAgICAgYyBpbnN0YW5jZW9mIFNvdXJjZUNvZGU7XG4gICAgdGhpcy5wcm9qZWN0LmNvbXBvbmVudHMuZmlsdGVyKGlzU291cmNlQ29kZSkuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgdGhpcy5hZGRJZ25vcmVQYXR0ZXJuKGMuZmlsZVBhdGgpO1xuICAgIH0pO1xuICB9XG59XG4iXX0=
@@ -68,5 +68,5 @@ class Projenrc extends projenrc_1.ProjenrcFile {
68
68
  }
69
69
  exports.Projenrc = Projenrc;
70
70
  _a = JSII_RTTI_SYMBOL_1;
71
- Projenrc[_a] = { fqn: "projen.javascript.Projenrc", version: "0.88.2" };
71
+ Projenrc[_a] = { fqn: "projen.javascript.Projenrc", version: "0.88.4" };
72
72
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVucmMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvamF2YXNjcmlwdC9wcm9qZW5yYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDJCQUEwRDtBQUMxRCwrQkFBd0M7QUFDeEMscUNBQWtDO0FBQ2xDLHFEQUEyRDtBQUMzRCxzQ0FBMEQ7QUFFMUQsMENBQTJDO0FBVTNDOzs7OztHQUtHO0FBQ0gsTUFBYSxRQUFTLFNBQVEsdUJBQVk7SUFHeEMsWUFBWSxPQUFnQixFQUFFLFVBQTJCLEVBQUU7UUFDekQsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWYsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxJQUFJLHNDQUE2QixDQUFDO1FBRWxFLHlEQUF5RDtRQUN6RCxPQUFPLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRW5ELElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFZSxhQUFhO1FBQzNCLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUV0QixNQUFNLE1BQU0sR0FBRyxlQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUN2QyxNQUFNLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUN0QyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztRQUM5QyxNQUFNLEVBQUUsV0FBVyxDQUFDO1lBQ2xCLEtBQUssRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFDdEIsS0FBSyxFQUFFO2dCQUNMLHVDQUF1QyxFQUFFLEtBQUs7Z0JBQzlDLG1DQUFtQyxFQUFFLEtBQUs7YUFDM0M7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLE1BQU0sTUFBTSxHQUFHLElBQUEsY0FBTyxFQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzRCxJQUFJLElBQUEsZUFBVSxFQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUM7WUFDdkIsT0FBTyxDQUFDLGlCQUFpQjtRQUMzQixDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUM7UUFDM0MsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2YsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN2QyxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUIsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRTNDLE1BQU0sRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBQSx3Q0FBdUIsRUFBQztZQUMzRCxRQUFRLEVBQUUsU0FBUyxDQUFDLFFBQVE7WUFDNUIsSUFBSSxFQUFFLFNBQVMsQ0FBQyxJQUFJO1lBQ3BCLElBQUksRUFBRSxTQUFTLENBQUMsSUFBSTtTQUNyQixDQUFDLENBQUM7UUFFSCxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUMsQ0FBQztRQUVwQyxNQUFNLEtBQUssR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO1FBQ2xDLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztRQUN0QyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDYixLQUFLLENBQUMsSUFBSSxDQUFDLHVCQUF1QixTQUFTLElBQUksZUFBZSxJQUFJLENBQUMsQ0FBQztRQUNwRSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDYixLQUFLLENBQUMsSUFBSSxDQUFDLGtCQUFrQixDQUFDLENBQUM7UUFFL0IsSUFBQSxjQUFTLEVBQUMsSUFBQSxjQUFPLEVBQUMsTUFBTSxDQUFDLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNoRCxJQUFBLGtCQUFhLEVBQUMsTUFBTSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN4QyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ3RCLDBDQUEwQyxNQUFNLEVBQUUsQ0FDbkQsQ0FBQztJQUNKLENBQUM7O0FBakVILDRCQWtFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGV4aXN0c1N5bmMsIG1rZGlyU3luYywgd3JpdGVGaWxlU3luYyB9IGZyb20gXCJmc1wiO1xuaW1wb3J0IHsgZGlybmFtZSwgcmVzb2x2ZSB9IGZyb20gXCJwYXRoXCI7XG5pbXBvcnQgeyBFc2xpbnQgfSBmcm9tIFwiLi9lc2xpbnRcIjtcbmltcG9ydCB7IHJlbmRlckphdmFTY3JpcHRPcHRpb25zIH0gZnJvbSBcIi4vcmVuZGVyLW9wdGlvbnNcIjtcbmltcG9ydCB7IERFRkFVTFRfUFJPSkVOX1JDX0pTX0ZJTEVOQU1FIH0gZnJvbSBcIi4uL2NvbW1vblwiO1xuaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gXCIuLi9wcm9qZWN0XCI7XG5pbXBvcnQgeyBQcm9qZW5yY0ZpbGUgfSBmcm9tIFwiLi4vcHJvamVucmNcIjtcblxuZXhwb3J0IGludGVyZmFjZSBQcm9qZW5yY09wdGlvbnMge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHByb2plbnJjIGZpbGUuXG4gICAqIEBkZWZhdWx0IFwiLnByb2plbnJjLmpzXCJcbiAgICovXG4gIHJlYWRvbmx5IGZpbGVuYW1lPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEEgcHJvamVucmMgZmlsZSB3cml0dGVuIGluIEphdmFTY3JpcHRcbiAqXG4gKiBUaGlzIGNvbXBvbmVudCBjYW4gYmUgaW5zdGFudGlhdGVkIGluIGFueSB0eXBlIG9mIHByb2plY3RcbiAqIGFuZCBoYXMgbm8gZXhwZWN0YXRpb25zIGFyb3VuZCB0aGUgcHJvamVjdCdzIG1haW4gbGFuZ3VhZ2UuXG4gKi9cbmV4cG9ydCBjbGFzcyBQcm9qZW5yYyBleHRlbmRzIFByb2plbnJjRmlsZSB7XG4gIHB1YmxpYyByZWFkb25seSBmaWxlUGF0aDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIG9wdGlvbnM6IFByb2plbnJjT3B0aW9ucyA9IHt9KSB7XG4gICAgc3VwZXIocHJvamVjdCk7XG5cbiAgICB0aGlzLmZpbGVQYXRoID0gb3B0aW9ucy5maWxlbmFtZSA/PyBERUZBVUxUX1BST0pFTl9SQ19KU19GSUxFTkFNRTtcblxuICAgIC8vIHRoaXMgaXMgdGhlIHRhc2sgcHJvamVuIGV4ZWN1dGVzIHdoZW4gcnVubmluZyBgcHJvamVuYFxuICAgIHByb2plY3QuZGVmYXVsdFRhc2s/LmV4ZWMoYG5vZGUgJHt0aGlzLmZpbGVQYXRofWApO1xuXG4gICAgdGhpcy5nZW5lcmF0ZVByb2plbnJjKCk7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgcHJlU3ludGhlc2l6ZSgpOiB2b2lkIHtcbiAgICBzdXBlci5wcmVTeW50aGVzaXplKCk7XG5cbiAgICBjb25zdCBlc2xpbnQgPSBFc2xpbnQub2YodGhpcy5wcm9qZWN0KTtcbiAgICBlc2xpbnQ/LmFkZExpbnRQYXR0ZXJuKHRoaXMuZmlsZVBhdGgpO1xuICAgIGVzbGludD8uYWRkSWdub3JlUGF0dGVybihgISR7dGhpcy5maWxlUGF0aH1gKTtcbiAgICBlc2xpbnQ/LmFkZE92ZXJyaWRlKHtcbiAgICAgIGZpbGVzOiBbdGhpcy5maWxlUGF0aF0sXG4gICAgICBydWxlczoge1xuICAgICAgICBcIkB0eXBlc2NyaXB0LWVzbGludC9uby1yZXF1aXJlLWltcG9ydHNcIjogXCJvZmZcIixcbiAgICAgICAgXCJpbXBvcnQvbm8tZXh0cmFuZW91cy1kZXBlbmRlbmNpZXNcIjogXCJvZmZcIixcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdlbmVyYXRlUHJvamVucmMoKSB7XG4gICAgY29uc3QgcmNmaWxlID0gcmVzb2x2ZSh0aGlzLnByb2plY3Qub3V0ZGlyLCB0aGlzLmZpbGVQYXRoKTtcbiAgICBpZiAoZXhpc3RzU3luYyhyY2ZpbGUpKSB7XG4gICAgICByZXR1cm47IC8vIGFscmVhZHkgZXhpc3RzXG4gICAgfVxuXG4gICAgY29uc3QgYm9vdHN0cmFwID0gdGhpcy5wcm9qZWN0LmluaXRQcm9qZWN0O1xuICAgIGlmICghYm9vdHN0cmFwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcGFydHMgPSBib290c3RyYXAuZnFuLnNwbGl0KFwiLlwiKTtcbiAgICBjb25zdCBtb2R1bGVOYW1lID0gcGFydHNbMF07XG4gICAgY29uc3QgaW1wb3J0TmFtZSA9IHBhcnRzWzFdO1xuICAgIGNvbnN0IGNsYXNzTmFtZSA9IHBhcnRzLnNsaWNlKDEpLmpvaW4oXCIuXCIpO1xuXG4gICAgY29uc3QgeyByZW5kZXJlZE9wdGlvbnMsIGltcG9ydHMgfSA9IHJlbmRlckphdmFTY3JpcHRPcHRpb25zKHtcbiAgICAgIGNvbW1lbnRzOiBib290c3RyYXAuY29tbWVudHMsXG4gICAgICBhcmdzOiBib290c3RyYXAuYXJncyxcbiAgICAgIHR5cGU6IGJvb3RzdHJhcC50eXBlLFxuICAgIH0pO1xuXG4gICAgaW1wb3J0cy5hZGQobW9kdWxlTmFtZSwgaW1wb3J0TmFtZSk7XG5cbiAgICBjb25zdCBsaW5lcyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgbGluZXMucHVzaCguLi5pbXBvcnRzLmFzQ2pzUmVxdWlyZSgpKTtcbiAgICBsaW5lcy5wdXNoKCk7XG4gICAgbGluZXMucHVzaChgY29uc3QgcHJvamVjdCA9IG5ldyAke2NsYXNzTmFtZX0oJHtyZW5kZXJlZE9wdGlvbnN9KTtgKTtcbiAgICBsaW5lcy5wdXNoKCk7XG4gICAgbGluZXMucHVzaChcInByb2plY3Quc3ludGgoKTtcIik7XG5cbiAgICBta2RpclN5bmMoZGlybmFtZShyY2ZpbGUpLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTtcbiAgICB3cml0ZUZpbGVTeW5jKHJjZmlsZSwgbGluZXMuam9pbihcIlxcblwiKSk7XG4gICAgdGhpcy5wcm9qZWN0LmxvZ2dlci5pbmZvKFxuICAgICAgYFByb2plY3QgZGVmaW5pdGlvbiBmaWxlIHdhcyBjcmVhdGVkIGF0ICR7cmNmaWxlfWBcbiAgICApO1xuICB9XG59XG4iXX0=
@@ -170,7 +170,7 @@ class TypescriptConfigExtends {
170
170
  }
171
171
  exports.TypescriptConfigExtends = TypescriptConfigExtends;
172
172
  _a = JSII_RTTI_SYMBOL_1;
173
- TypescriptConfigExtends[_a] = { fqn: "projen.javascript.TypescriptConfigExtends", version: "0.88.2" };
173
+ TypescriptConfigExtends[_a] = { fqn: "projen.javascript.TypescriptConfigExtends", version: "0.88.4" };
174
174
  class TypescriptConfig extends component_1.Component {
175
175
  constructor(project, options) {
176
176
  super(project);
@@ -333,5 +333,5 @@ class TypescriptConfig extends component_1.Component {
333
333
  }
334
334
  exports.TypescriptConfig = TypescriptConfig;
335
335
  _b = JSII_RTTI_SYMBOL_1;
336
- TypescriptConfig[_b] = { fqn: "projen.javascript.TypescriptConfig", version: "0.88.2" };
336
+ TypescriptConfig[_b] = { fqn: "projen.javascript.TypescriptConfig", version: "0.88.4" };
337
337
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXNjcmlwdC1jb25maWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvamF2YXNjcmlwdC90eXBlc2NyaXB0LWNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZCQUE2QjtBQUM3QixpQ0FBaUM7QUFDakMsd0JBQWdDO0FBQ2hDLDRDQUF5QztBQUN6QyxrQ0FBbUM7QUFFbkMsa0NBQWlEO0FBdUNqRDs7OztHQUlHO0FBQ0gsSUFBWSwwQkE2Q1g7QUE3Q0QsV0FBWSwwQkFBMEI7SUFDcEM7Ozs7T0FJRztJQUNILGlEQUFtQixDQUFBO0lBRW5COzs7O09BSUc7SUFDSCwyQ0FBYSxDQUFBO0lBRWI7Ozs7Ozs7T0FPRztJQUNILCtDQUFpQixDQUFBO0lBRWpCOzs7O09BSUc7SUFDSCwrQ0FBaUIsQ0FBQTtJQUVqQjs7OztPQUlHO0lBQ0gsb0RBQXNCLENBQUE7SUFFdEI7Ozs7T0FJRztJQUNILGlEQUFtQixDQUFBO0FBQ3JCLENBQUMsRUE3Q1csMEJBQTBCLDBDQUExQiwwQkFBMEIsUUE2Q3JDO0FBRUQ7Ozs7R0FJRztBQUNILElBQVkseUJBcUJYO0FBckJELFdBQVkseUJBQXlCO0lBQ25DOzs7O09BSUc7SUFDSCwwQ0FBYSxDQUFBO0lBRWI7Ozs7T0FJRztJQUNILDhDQUFpQixDQUFBO0lBRWpCOzs7O09BSUc7SUFDSCw0Q0FBZSxDQUFBO0FBQ2pCLENBQUMsRUFyQlcseUJBQXlCLHlDQUF6Qix5QkFBeUIsUUFxQnBDO0FBRUQ7Ozs7R0FJRztBQUNILElBQVksZ0NBZ0JYO0FBaEJELFdBQVksZ0NBQWdDO0lBQzFDOztPQUVHO0lBQ0gscURBQWlCLENBQUE7SUFFakI7O09BRUc7SUFDSCx5REFBcUIsQ0FBQTtJQUVyQjs7O09BR0c7SUFDSCxtREFBZSxDQUFBO0FBQ2pCLENBQUMsRUFoQlcsZ0NBQWdDLGdEQUFoQyxnQ0FBZ0MsUUFnQjNDO0FBRUQ7Ozs7R0FJRztBQUNILElBQVksaUJBMkJYO0FBM0JE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QUFLLENBQUMsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRDs7Ozs7OztPQU9HO0lBQ0ksVUFBVSxDQUFDLEtBQXVCO1FBQ3ZDLElBQUksQ0FBQyxRQUFRLEdBQUcsdUJBQXVCLENBQUMsU0FBUyxDQUFDO1lBQ2hELEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUU7WUFDekIsS0FBSyxDQUFDLElBQUksQ0FBQyxZQUFZO1NBQ3hCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxVQUFVLENBQUMsT0FBZTtRQUMvQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0ksVUFBVSxDQUFDLE9BQWU7UUFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVEOzs7Ozs7T0FNRztJQUNJLGFBQWEsQ0FBQyxPQUFlO1FBQ2xDLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFRDs7Ozs7O09BTUc7SUFDSSxhQUFhLENBQUMsT0FBZTtRQUNsQyxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRUQsYUFBYTtRQUNYLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDekIsQ0FBQzs7QUFwTUgsNENBcU1DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0ICogYXMgc2VtdmVyIGZyb20gXCJzZW12ZXJcIjtcbmltcG9ydCB7IE5vZGVQcm9qZWN0IH0gZnJvbSBcIi5cIjtcbmltcG9ydCB7IENvbXBvbmVudCB9IGZyb20gXCIuLi9jb21wb25lbnRcIjtcbmltcG9ydCB7IEpzb25GaWxlIH0gZnJvbSBcIi4uL2pzb25cIjtcbmltcG9ydCB7IFByb2plY3QgfSBmcm9tIFwiLi4vcHJvamVjdFwiO1xuaW1wb3J0IHsgbm9ybWFsaXplUGVyc2lzdGVkUGF0aCB9IGZyb20gXCIuLi91dGlsXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZXNjcmlwdENvbmZpZ09wdGlvbnMge1xuICAvKipcbiAgICogQGRlZmF1bHQgXCJ0c2NvbmZpZy5qc29uXCJcbiAgICovXG4gIHJlYWRvbmx5IGZpbGVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBCYXNlIGB0c2NvbmZpZy5qc29uYCBjb25maWd1cmF0aW9uKHMpIHRvIGluaGVyaXQgZnJvbS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogTXVzdCBwcm92aWRlIGVpdGhlciBgZXh0ZW5kc2Agb3IgYGNvbXBpbGVyT3B0aW9uc2AgKG9yIGJvdGgpLlxuICAgKi9cbiAgcmVhZG9ubHkgZXh0ZW5kcz86IFR5cGVzY3JpcHRDb25maWdFeHRlbmRzO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgYSBsaXN0IG9mIGdsb2IgcGF0dGVybnMgdGhhdCBtYXRjaCBUeXBlU2NyaXB0IGZpbGVzIHRvIGJlIGluY2x1ZGVkIGluIGNvbXBpbGF0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGFsbCAudHMgZmlsZXMgcmVjdXJzaXZlbHlcbiAgICovXG4gIHJlYWRvbmx5IGluY2x1ZGU/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogRmlsdGVycyByZXN1bHRzIGZyb20gdGhlIFwiaW5jbHVkZVwiIG9wdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBub2RlX21vZHVsZXMgaXMgZXhjbHVkZWQgYnkgZGVmYXVsdFxuICAgKi9cbiAgcmVhZG9ubHkgZXhjbHVkZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBDb21waWxlciBvcHRpb25zIHRvIHVzZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogTXVzdCBwcm92aWRlIGVpdGhlciBgZXh0ZW5kc2Agb3IgYGNvbXBpbGVyT3B0aW9uc2AgKG9yIGJvdGgpLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tcGlsZXJPcHRpb25zPzogVHlwZVNjcmlwdENvbXBpbGVyT3B0aW9ucztcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIGhvdyBtb2R1bGVzIGdldCByZXNvbHZlZC5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rL21vZHVsZS1yZXNvbHV0aW9uLmh0bWxcbiAqL1xuZXhwb3J0IGVudW0gVHlwZVNjcmlwdE1vZHVsZVJlc29sdXRpb24ge1xuICAvKipcbiAgICogVHlwZVNjcmlwdCdzIGZvcm1lciBkZWZhdWx0IHJlc29sdXRpb24gc3RyYXRlZ3kuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svbW9kdWxlLXJlc29sdXRpb24uaHRtbCNjbGFzc2ljXG4gICAqL1xuICBDTEFTU0lDID0gXCJjbGFzc2ljXCIsXG5cbiAgLyoqXG4gICAqIFJlc29sdXRpb24gc3RyYXRlZ3kgd2hpY2ggYXR0ZW1wdHMgdG8gbWltaWMgdGhlIE5vZGUuanMgbW9kdWxlIHJlc29sdXRpb24gc3RyYXRlZ3kgYXQgcnVudGltZS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay9tb2R1bGUtcmVzb2x1dGlvbi5odG1sI25vZGVcbiAgICovXG4gIE5PREUgPSBcIm5vZGVcIixcblxuICAvKipcbiAgICogYC0tbW9kdWxlUmVzb2x1dGlvbiBub2RlYCB3YXMgcmVuYW1lZCB0byBgbm9kZTEwYFxuICAgKiAoa2VlcGluZyBgbm9kZWAgYXMgYW4gYWxpYXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkpIGluIFR5cGVTY3JpcHQgNS4wLlxuICAgKiBJdCByZWZsZWN0cyB0aGUgQ29tbW9uSlMgbW9kdWxlIHJlc29sdXRpb24gYWxnb3JpdGhtIGFzIGl0IGV4aXN0ZWQgaW4gTm9kZS5qcyB2ZXJzaW9uc1xuICAgKiBlYXJsaWVyIHRoYW4gdjEyLiBJdCBzaG91bGQgbm8gbG9uZ2VyIGJlIHVzZWQuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svbW9kdWxlcy9yZWZlcmVuY2UuaHRtbCNub2RlMTAtZm9ybWVybHkta25vd24tYXMtbm9kZVxuICAgKi9cbiAgTk9ERTEwID0gXCJub2RlMTBcIixcblxuICAvKipcbiAgICogTm9kZS5qc+KAmSBFQ01BU2NyaXB0IE1vZHVsZSBTdXBwb3J0IGZyb20gVHlwZVNjcmlwdCA0Ljcgb253YXJkc1xuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy90c2NvbmZpZyNtb2R1bGVSZXNvbHV0aW9uXG4gICAqL1xuICBOT0RFMTYgPSBcIm5vZGUxNlwiLFxuXG4gIC8qKlxuICAgKiBOb2RlLmpz4oCZIEVDTUFTY3JpcHQgTW9kdWxlIFN1cHBvcnQgZnJvbSBUeXBlU2NyaXB0IDQuNyBvbndhcmRzXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL3RzY29uZmlnI21vZHVsZVJlc29sdXRpb25cbiAgICovXG4gIE5PREVfTkVYVCA9IFwibm9kZW5leHRcIixcblxuICAvKipcbiAgICogUmVzb2x1dGlvbiBzdHJhdGVneSB3aGljaCBhdHRlbXB0cyB0byBtaW1pYyByZXNvbHV0aW9uIHBhdHRlcm5zIG9mIG1vZGVybiBidW5kbGVyczsgZnJvbSBUeXBlU2NyaXB0IDUuMCBvbndhcmRzLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy90c2NvbmZpZyNtb2R1bGVSZXNvbHV0aW9uXG4gICAqL1xuICBCVU5ETEVSID0gXCJidW5kbGVyXCIsXG59XG5cbi8qKlxuICogVGhpcyBzZXR0aW5nIGNvbnRyb2xzIGhvdyBUeXBlU2NyaXB0IGRldGVybWluZXMgd2hldGhlciBhIGZpbGUgaXMgYSBzY3JpcHQgb3IgYSBtb2R1bGUuXG4gKlxuICogQHNlZSBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay9tb2R1bGVzL3RoZW9yeS5odG1sI3NjcmlwdHMtYW5kLW1vZHVsZXMtaW4tamF2YXNjcmlwdFxuICovXG5leHBvcnQgZW51bSBUeXBlU2NyaXB0TW9kdWxlRGV0ZWN0aW9uIHtcbiAgLyoqXG4gICAqIFR5cGVTY3JpcHQgd2lsbCBub3Qgb25seSBsb29rIGZvciBpbXBvcnQgYW5kIGV4cG9ydCBzdGF0ZW1lbnRzLCBidXQgaXQgd2lsbCBhbHNvIGNoZWNrIHdoZXRoZXIgdGhlIFwidHlwZVwiIGZpZWxkIGluIGEgcGFja2FnZS5qc29uIGlzIHNldCB0byBcIm1vZHVsZVwiIHdoZW4gcnVubmluZyB3aXRoIG1vZHVsZTogbm9kZW5leHQgb3Igbm9kZTE2LCBhbmQgY2hlY2sgd2hldGhlciB0aGUgY3VycmVudCBmaWxlIGlzIGEgSlNYIGZpbGUgd2hlbiBydW5uaW5nIHVuZGVyIGpzeDogcmVhY3QtanN4LlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy90c2NvbmZpZy8jbW9kdWxlRGV0ZWN0aW9uXG4gICAqL1xuICBBVVRPID0gXCJhdXRvXCIsXG5cbiAgLyoqXG4gICAqIFRoZSBzYW1lIGJlaGF2aW9yIGFzIDQuNiBhbmQgcHJpb3IsIHVzaW5ncyBpbXBvcnQgYW5kIGV4cG9ydCBzdGF0ZW1lbnRzIHRvIGRldGVybWluZSB3aGV0aGVyIGEgZmlsZSBpcyBhIG1vZHVsZS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvdHNjb25maWcvI21vZHVsZURldGVjdGlvblxuICAgKi9cbiAgTEVHQUNZID0gXCJsZWdhY3lcIixcblxuICAvKipcbiAgICogRW5zdXJlcyB0aGF0IGV2ZXJ5IG5vbi1kZWNsYXJhdGlvbiBmaWxlIGlzIHRyZWF0ZWQgYXMgYSBtb2R1bGUuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL3RzY29uZmlnLyNtb2R1bGVEZXRlY3Rpb25cbiAgICovXG4gIEZPUkNFID0gXCJmb3JjZVwiLFxufVxuXG4vKipcbiAqIFRoaXMgZmxhZyBjb250cm9scyBob3cgYGltcG9ydGAgd29ya3MsIHRoZXJlIGFyZSAzIGRpZmZlcmVudCBvcHRpb25zLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL3RzY29uZmlnI2ltcG9ydHNOb3RVc2VkQXNWYWx1ZXNcbiAqL1xuZXhwb3J0IGVudW0gVHlwZVNjcmlwdEltcG9ydHNOb3RVc2VkQXNWYWx1ZXMge1xuICAvKipcbiAgICogVGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgZHJvcHBpbmcgYGltcG9ydGAgc3RhdGVtZW50cyB3aGljaCBvbmx5IHJlZmVyZW5jZSB0eXBlcy5cbiAgICovXG4gIFJFTU9WRSA9IFwicmVtb3ZlXCIsXG5cbiAgLyoqXG4gICAqIFByZXNlcnZlcyBhbGwgYGltcG9ydGAgc3RhdGVtZW50cyB3aG9zZSB2YWx1ZXMgb3IgdHlwZXMgYXJlIG5ldmVyIHVzZWQuIFRoaXMgY2FuIGNhdXNlIGltcG9ydHMvc2lkZS1lZmZlY3RzIHRvIGJlIHByZXNlcnZlZC5cbiAgICovXG4gIFBSRVNFUlZFID0gXCJwcmVzZXJ2ZVwiLFxuXG4gIC8qKlxuICAgKiBUaGlzIHByZXNlcnZlcyBhbGwgaW1wb3J0cyAodGhlIHNhbWUgYXMgdGhlIHByZXNlcnZlIG9wdGlvbiksIGJ1dCB3aWxsIGVycm9yIHdoZW4gYSB2YWx1ZSBpbXBvcnQgaXMgb25seSB1c2VkIGFzIGEgdHlwZS5cbiAgICogVGhpcyBtaWdodCBiZSB1c2VmdWwgaWYgeW91IHdhbnQgdG8gZW5zdXJlIG5vIHZhbHVlcyBhcmUgYmVpbmcgYWNjaWRlbnRhbGx5IGltcG9ydGVkLCBidXQgc3RpbGwgbWFrZSBzaWRlLWVmZmVjdCBpbXBvcnRzIGV4cGxpY2l0LlxuICAgKi9cbiAgRVJST1IgPSBcImVycm9yXCIsXG59XG5cbi8qKlxuICogRGV0ZXJtaW5lcyBob3cgSlNYIHNob3VsZCBnZXQgdHJhbnNmb3JtZWQgaW50byB2YWxpZCBKYXZhU2NyaXB0LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svanN4Lmh0bWxcbiAqL1xuZXhwb3J0IGVudW0gVHlwZVNjcmlwdEpzeE1vZGUge1xuICAvKipcbiAgICogS2VlcHMgdGhlIEpTWCBhcyBwYXJ0IG9mIHRoZSBvdXRwdXQgdG8gYmUgZnVydGhlciBjb25zdW1lZCBieSBhbm90aGVyIHRyYW5zZm9ybSBzdGVwIChlLmcuIEJhYmVsKS5cbiAgICovXG4gIFBSRVNFUlZFID0gXCJwcmVzZXJ2ZVwiLFxuXG4gIC8qKlxuICAgKiBDb252ZXJ0cyBKU1ggc3ludGF4IGludG8gUmVhY3QuY3JlYXRlRWxlbWVudCwgZG9lcyBub3QgbmVlZCB0byBnbyB0aHJvdWdoIGEgSlNYIHRyYW5zZm9ybWF0aW9uIGJlZm9yZSB1c2UsIGFuZCB0aGUgb3V0cHV0IHdpbGwgaGF2ZSBhIC5qcyBmaWxlIGV4dGVuc2lvbi5cbiAgICovXG4gIFJFQUNUID0gXCJyZWFjdFwiLFxuXG4gIC8qKlxuICAgKiBLZWVwcyBhbGwgSlNYIGxpa2UgJ3ByZXNlcnZlJyBtb2RlLCBidXQgb3V0cHV0IHdpbGwgaGF2ZSBhIC5qcyBleHRlbnNpb24uXG4gICAqL1xuICBSRUFDVF9OQVRJVkUgPSBcInJlYWN0LW5hdGl2ZVwiLFxuXG4gIC8qKlxuICAgKiBQYXNzZXMgYGtleWAgc2VwYXJhdGVseSBmcm9tIHByb3BzIGFuZCBhbHdheXMgcGFzc2VzIGBjaGlsZHJlbmAgYXMgcHJvcHMgKHNpbmNlIFJlYWN0IDE3KS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay9yZWxlYXNlLW5vdGVzL3R5cGVzY3JpcHQtNC0xLmh0bWwjcmVhY3QtMTctanN4LWZhY3Rvcmllc1xuICAgKi9cbiAgUkVBQ1RfSlNYID0gXCJyZWFjdC1qc3hcIixcblxuICAvKipcbiAgICogU2FtZSBhcyBgUkVBQ1RfSlNYYCB3aXRoIGFkZGl0aW9uYWwgZGVidWcgZGF0YS5cbiAgICovXG4gIFJFQUNUX0pTWERFViA9IFwicmVhY3QtanN4ZGV2XCIsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHlwZVNjcmlwdENvbXBpbGVyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBBbGxvdyBKYXZhU2NyaXB0IGZpbGVzIHRvIGJlIGNvbXBpbGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dKcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFsbG93cyBUeXBlU2NyaXB0IGZpbGVzIHRvIGltcG9ydCBlYWNoIG90aGVyIHdpdGggVHlwZVNjcmlwdC1zcGVjaWZpYyBleHRlbnNpb25zIChgLnRzYCwgYC5tdHNgLCBgLnRzeGApLlxuICAgKiBSZXF1aXJlcyBgbm9FbWl0YCBvciBgZW1pdERlY2xhcmF0aW9uT25seWAuXG4gICAqXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgYWxsb3dJbXBvcnRpbmdUc0V4dGVuc2lvbnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTdXBwcmVzcyBhcmJpdHJhcnkgZXh0ZW5zaW9uIGltcG9ydCBlcnJvcnMgd2l0aCB0aGUgYXNzdW1wdGlvbiB0aGF0IGEgYnVuZGxlciB3aWxsIGJlIGhhbmRsaW5nIGl0LlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy90c2NvbmZpZyNhbGxvd0FyYml0cmFyeUV4dGVuc2lvbnNcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICByZWFkb25seSBhbGxvd0FyYml0cmFyeUV4dGVuc2lvbnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbnN1cmVzIHRoYXQgeW91ciBmaWxlcyBhcmUgcGFyc2VkIGluIHRoZSBFQ01BU2NyaXB0IHN0cmljdCBtb2RlLCBhbmQgZW1pdCDigJx1c2Ugc3RyaWN04oCdXG4gICAqIGZvciBlYWNoIHNvdXJjZSBmaWxlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBhbHdheXNTdHJpY3Q/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBPZmZlcnMgYSB3YXkgdG8gY29uZmlndXJlIHRoZSByb290IGRpcmVjdG9yeSBmb3Igd2hlcmUgZGVjbGFyYXRpb24gZmlsZXMgYXJlIGVtaXR0ZWQuXG4gICAqXG4gICAqL1xuICByZWFkb25seSBkZWNsYXJhdGlvbkRpcj86IHN0cmluZztcblxuICAvKipcbiAgICogVG8gYmUgc3BlY2lmaWVkIGFsb25nIHdpdGggdGhlIGFib3ZlXG4gICAqXG4gICAqL1xuICByZWFkb25seSBkZWNsYXJhdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlcyBhIHNvdXJjZSBtYXAgZm9yIC5kLnRzIGZpbGVzIHdoaWNoIG1hcCBiYWNrIHRvIHRoZSBvcmlnaW5hbCAudHMgc291cmNlIGZpbGUuXG4gICAqIFRoaXMgd2lsbCBhbGxvdyBlZGl0b3JzIHN1Y2ggYXMgVlMgQ29kZSB0byBnbyB0byB0aGUgb3JpZ2luYWwgLnRzIGZpbGUgd2hlbiB1c2luZyBmZWF0dXJlcyBsaWtlIEdvIHRvIERlZmluaXRpb24uXG4gICAqIEBzZWUge0BsaW5rIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy90c2NvbmZpZyNkZWNsYXJhdGlvbk1hcH1cbiAgICovXG4gIHJlYWRvbmx5IGRlY2xhcmF0aW9uTWFwPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRG93bmxldmVsaW5nIGlzIFR5cGVTY3JpcHTigJlzIHRlcm0gZm9yIHRyYW5zcGlsaW5nIHRvIGFuIG9sZGVyIHZlcnNpb24gb2YgSmF2YVNjcmlwdC5cbiAgICogVGhpcyBmbGFnIGlzIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBhIG1vcmUgYWNjdXJhdGUgaW1wbGVtZW50YXRpb24gb2YgaG93IG1vZGVybiBKYXZhU2NyaXB0IGl0ZXJhdGVzIHRocm91Z2ggbmV3IGNvbmNlcHRzIGluIG9sZGVyIEphdmFTY3JpcHQgcnVudGltZXMuXG4gICAqXG4gICAqIEVDTUFTY3JpcHQgNiBhZGRlZCBzZXZlcmFsIG5ldyBpdGVyYXRpb24gcHJpbWl0aXZlczogdGhlIGZvciAvIG9mIGxvb3AgKGZvciAoZWwgb2YgYXJyKSksIEFycmF5IHNwcmVhZCAoW2EsIC4uLmJdKSwgYXJndW1lbnQgc3ByZWFkIChmbiguLi5hcmdzKSksIGFuZCBTeW1ib2wuaXRlcmF0b3IuXG4gICAqIGRvd25sZXZlbEl0ZXJhdGlvbiBhbGxvd3MgZm9yIHRoZXNlIGl0ZXJhdGlvbiBwcmltaXRpdmVzIHRvIGJlIHVzZWQgbW9yZSBhY2N1cmF0ZWx5IGluIEVTNSBlbnZpcm9ubWVudHMgaWYgYSBTeW1ib2wuaXRlcmF0b3IgaW1wbGVtZW50YXRpb24gaXMgcHJlc2VudC5cbiAgICovXG4gIHJlYWRvbmx5IGRvd25sZXZlbEl0ZXJhdGlvbj86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExpc3Qgb2YgYWRkaXRpb25hbCBjb25kaXRpb25zIHRoYXQgc2hvdWxkIHN1Y2NlZWQgd2hlbiBUeXBlU2NyaXB0IHJlc29sdmVzIGZyb20gYW4gYGV4cG9ydHNgIG9yIGBpbXBvcnRzYCBmaWVsZCBvZiBhIGBwYWNrYWdlLmpzb25gLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy90c2NvbmZpZyNjdXN0b21Db25kaXRpb25zXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgY3VzdG9tQ29uZGl0aW9ucz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBFbWl0IF9faW1wb3J0U3RhciBhbmQgX19pbXBvcnREZWZhdWx0IGhlbHBlcnMgZm9yIHJ1bnRpbWUgYmFiZWxcbiAgICogZWNvc3lzdGVtIGNvbXBhdGliaWxpdHkgYW5kIGVuYWJsZSAtLWFsbG93U3ludGhldGljRGVmYXVsdEltcG9ydHMgZm9yXG4gICAqIHR5cGVzeXN0ZW0gY29tcGF0aWJpbGl0eS5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGVzTW9kdWxlSW50ZXJvcD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEVuYWJsZXMgZXhwZXJpbWVudGFsIHN1cHBvcnQgZm9yIGRlY29yYXRvcnMsIHdoaWNoIGlzIGluIHN0YWdlIDIgb2YgdGhlIFRDMzkgc3RhbmRhcmRpemF0aW9uIHByb2Nlc3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGV4cGVyaW1lbnRhbERlY29yYXRvcnM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbmFibGVzIGV4cGVyaW1lbnRhbCBzdXBwb3J0IGZvciBkZWNvcmF0b3JzLCB3aGljaCBpcyBpbiBzdGFnZSAyIG9mIHRoZSBUQzM5IHN0YW5kYXJkaXphdGlvbiBwcm9jZXNzLlxuICAgKiBEZWNvcmF0b3JzIGFyZSBhIGxhbmd1YWdlIGZlYXR1cmUgd2hpY2ggaGFzbuKAmXQgeWV0IGJlZW4gZnVsbHkgcmF0aWZpZWQgaW50byB0aGUgSmF2YVNjcmlwdCBzcGVjaWZpY2F0aW9uLlxuICAgKiBUaGlzIG1lYW5zIHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIHZlcnNpb24gaW4gVHlwZVNjcmlwdCBtYXkgZGlmZmVyIGZyb20gdGhlIGltcGxlbWVudGF0aW9uIGluIEphdmFTY3JpcHQgd2hlbiBpdCBpdCBkZWNpZGVkIGJ5IFRDMzkuXG4gICAqIFlvdSBjYW4gZmluZCBvdXQgbW9yZSBhYm91dCBkZWNvcmF0b3Igc3VwcG9ydCBpbiBUeXBlU2NyaXB0IGluIHRoZSBoYW5kYm9vay5cbiAgICpcbiAgICogQHNlZSBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvZG9jcy9oYW5kYm9vay9kZWNvcmF0b3JzLmh0bWxcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICByZWFkb25seSBlbWl0RGVjb3JhdG9yTWV0YWRhdGE/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBEaXNhbGxvdyBpbmNvbnNpc3RlbnRseS1jYXNlZCByZWZlcmVuY2VzIHRvIHRoZSBzYW1lIGZpbGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBmb3JjZUNvbnNpc3RlbnRDYXNpbmdJbkZpbGVOYW1lcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNpbXBsaWZpZXMgVHlwZVNjcmlwdCdzIGhhbmRsaW5nIG9mIGltcG9ydC9leHBvcnQgYHR5cGVgIG1vZGlmaWVycy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvdHNjb25maWcjdmVyYmF0aW1Nb2R1bGVTeW50YXhcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICByZWFkb25seSB2ZXJiYXRpbU1vZHVsZVN5bnRheD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoaXMgZmxhZyB3b3JrcyBiZWNhdXNlIHlvdSBjYW4gdXNlIGBpbXBvcnQgdHlwZWAgdG8gZXhwbGljaXRseSBjcmVhdGUgYW4gYGltcG9ydGAgc3RhdGVtZW50IHdoaWNoIHNob3VsZCBuZXZlciBiZSBlbWl0dGVkIGludG8gSmF2YVNjcmlwdC5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogRm9yIFR5cGVTY3JpcHQgNS4wKyB1c2UgYHZlcmJhdGltTW9kdWxlU3ludGF4YCBpbnN0ZWFkLlxuICAgKiBQb3NlZCBmb3IgZGVwcmVjYXRpb24gdXBvbiBUeXBlU2NyaXB0IDUuNS5cbiAgICpcbiAgICogQHNlZSBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvdHNjb25maWcjaW1wb3J0c05vdFVzZWRBc1ZhbHVlc1xuICAgKiBAZGVmYXVsdCBcInJlbW92ZVwiXG4gICAqL1xuICByZWFkb25seSBpbXBvcnRzTm90VXNlZEFzVmFsdWVzPzogVHlwZVNjcmlwdEltcG9ydHNOb3RVc2VkQXNWYWx1ZXM7XG5cbiAgLyoqXG4gICAqIFdoZW4gc2V0LCBpbnN0ZWFkIG9mIHdyaXRpbmcgb3V0IGEgLmpzLm1hcCBmaWxlIHRvIHByb3ZpZGUgc291cmNlIG1hcHMsXG4gICAqIFR5cGVTY3JpcHQgd2lsbCBlbWJlZCB0aGUgc291cmNlIG1hcCBjb250ZW50IGluIHRoZSAuanMgZmlsZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGlubGluZVNvdXJjZU1hcD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFdoZW4gc2V0LCBUeXBlU2NyaXB0IHdpbGwgaW5jbHVkZSB0aGUgb3JpZ2luYWwgY29udGVudCBvZiB0aGUgLnRzIGZpbGUgYXMgYW4gZW1iZWRkZWRcbiAgICogc3RyaW5nIGluIHRoZSBzb3VyY2UgbWFwLiBUaGlzIGlzIG9mdGVuIHVzZWZ1bCBpbiB0aGUgc2FtZSBjYXNlcyBhcyBpbmxpbmVTb3VyY2VNYXAuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGlubGluZVNvdXJjZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFbmFibGVzIHRoZSBnZW5lcmF0aW9uIG9mIHNvdXJjZW1hcCBmaWxlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICByZWFkb25seSBzb3VyY2VNYXA/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZ5IHRoZSBsb2NhdGlvbiB3aGVyZSBhIGRlYnVnZ2VyIHNob3VsZCBsb2NhdGUgVHlwZVNjcmlwdCBmaWxlc1xuICAgKiBpbnN0ZWFkIG9mIHJlbGF0aXZlIHNvdXJjZSBsb2NhdGlvbnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgc291cmNlUm9vdD86IHN0cmluZztcblxuICAvKipcbiAgICogUGVyZm9ybSBhZGRpdGlvbmFsIGNoZWNrcyB0byBlbnN1cmUgdGhhdCBzZXBhcmF0ZSBjb21waWxhdGlvbiAoc3VjaCBhc1xuICAgKiB3aXRoIHRyYW5zcGlsZU1vZHVsZSBvciBAYmFiZWwvcGx1Z2luLXRyYW5zZm9ybS10eXBlc2NyaXB0KSB3b3VsZCBiZSBzYWZlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgaXNvbGF0ZWRNb2R1bGVzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU3VwcG9ydCBKU1ggaW4gLnRzeCBmaWxlczogXCJyZWFjdFwiLCBcInByZXNlcnZlXCIsIFwicmVhY3QtbmF0aXZlXCIgZXRjLlxuICAgKlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICovXG4gIHJlYWRvbmx5IGpzeD86IFR5cGVTY3JpcHRKc3hNb2RlO1xuXG4gIC8qKlxuICAgKiBEZWNsYXJlcyB0aGUgbW9kdWxlIHNwZWNpZmllciB0byBiZSB1c2VkIGZvciBpbXBvcnRpbmcgdGhlIGpzeCBhbmQganN4cyBmYWN0b3J5IGZ1bmN0aW9ucyB3aGVuIHVzaW5nIGpzeC5cbiAgICpcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICByZWFkb25seSBqc3hJbXBvcnRTb3VyY2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZSBmb3IgdHlwZSBkZWZpbml0aW9ucyAvIGxpYnJhcmllcyB0byB1c2UgKGVnLiBFUzIwMTYsIEVTNSwgRVMyMDE4KS5cbiAgICpcbiAgICogQGRlZmF1bHQgWyBcImVzMjAxOFwiIF1cbiAgICovXG4gIHJlYWRvbmx5IGxpYj86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGlzIHNldHRpbmcgY29udHJvbHMgaG93IFR5cGVTY3JpcHQgZGV0ZXJtaW5lcyB3aGV0aGVyIGEgZmlsZSBpcyBhIFtzY3JpcHQgb3IgYSBtb2R1bGVdKGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy9kb2NzL2hhbmRib29rL21vZHVsZXMvdGhlb3J5Lmh0bWwjc2NyaXB0cy1hbmQtbW9kdWxlcy1pbi1qYXZhc2NyaXB0KS5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJhdXRvXCJcbiAgICovXG4gIHJlYWRvbmx5IG1vZHVsZURldGVjdGlvbj86IFR5cGVTY3JpcHRNb2R1bGVEZXRlY3Rpb247XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIG1vZHVsZSBzeXN0ZW0gZm9yIHRoZSBwcm9ncmFtLlxuICAgKiBTZWUgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svbW9kdWxlcy5odG1sI2FtYmllbnQtbW9kdWxlcy5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJDb21tb25KU1wiXG4gICAqL1xuICByZWFkb25seSBtb2R1bGU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERldGVybWluZSBob3cgbW9kdWxlcyBnZXQgcmVzb2x2ZWQuIEVpdGhlciBcIk5vZGVcIiBmb3IgTm9kZS5qcy9pby5qcyBzdHlsZSByZXNvbHV0aW9uLCBvciBcIkNsYXNzaWNcIi5cbiAgICpcbiAgICogQGRlZmF1bHQgXCJub2RlXCJcbiAgICovXG4gIHJlYWRvbmx5IG1vZHVsZVJlc29sdXRpb24/OiBUeXBlU2NyaXB0TW9kdWxlUmVzb2x1dGlvbjtcblxuICAvKipcbiAgICogRG8gbm90IGVtaXQgb3V0cHV0cy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IG5vRW1pdD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIE9ubHkgZW1pdCAuZC50cyBmaWxlczsgZG8gbm90IGVtaXQgLmpzIGZpbGVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZW1pdERlY2xhcmF0aW9uT25seT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIERvIG5vdCBlbWl0IGNvbXBpbGVyIG91dHB1dCBmaWxlcyBsaWtlIEphdmFTY3JpcHQgc291cmNlIGNvZGUsIHNvdXJjZS1tYXBzIG9yXG4gICAqIGRlY2xhcmF0aW9ucyBpZiBhbnkgZXJyb3JzIHdlcmUgcmVwb3J0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IG5vRW1pdE9uRXJyb3I/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBSZXBvcnQgZXJyb3JzIGZvciBmYWxsdGhyb3VnaCBjYXNlcyBpbiBzd2l0Y2ggc3RhdGVtZW50cy4gRW5zdXJlcyB0aGF0IGFueSBub24tZW1wdHlcbiAgICogY2FzZSBpbnNpZGUgYSBzd2l0Y2ggc3RhdGVtZW50IGluY2x1ZGVzIGVpdGhlciBicmVhayBvciByZXR1cm4uIFRoaXMgbWVhbnMgeW91IHdvbuKAmXRcbiAgICogYWNjaWRlbnRhbGx5IHNoaXAgYSBjYXNlIGZhbGx0aHJvdWdoIGJ1Zy5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgbm9GYWxsdGhyb3VnaENhc2VzSW5Td2l0Y2g/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBJbiBzb21lIGNhc2VzIHdoZXJlIG5vIHR5cGUgYW5ub3RhdGlvbnMgYXJlIHByZXNlbnQsIFR5cGVTY3JpcHQgd2lsbCBmYWxsIGJhY2sgdG8gYVxuICAgKiB0eXBlIG9mIGFueSBmb3IgYSB2YXJpYWJsZSB3aGVuIGl0IGNhbm5vdCBpbmZlciB0aGUgdHlwZS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgbm9JbXBsaWNpdEFueT86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFVzaW5nIGBub0ltcGxpY2l0T3ZlcnJpZGVgLCB5b3UgY2FuIGVuc3VyZSB0aGF0IHN1Yi1jbGFzc2VzIG5ldmVyIGdvIG91dCBvZiBzeW5jIGFzXG4gICAqIHRoZXkgYXJlIHJlcXVpcmVkIHRvIGV4cGxpY2l0bHkgZGVjbGFyZSB0aGF0IHRoZXkgYXJlIG92ZXJyaWRpbmcgYSBtZW1iZXIgdXNpbmcgdGhlXG4gICAqIGBvdmVycmlkZWAga2V5d29yZC4gVGhpcyBhbHNvIGltcHJvdmVzIHJlYWRhYmlsaXR5IG9mIHRoZSBwcm9ncmFtbWVyJ3MgaW50ZW50LlxuICAgKlxuICAgKiBBdmFpbGFibGUgd2l0aCBUeXBlU2NyaXB0IDQuMyBhbmQgbmV3ZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBub0ltcGxpY2l0T3ZlcnJpZGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBXaGVuIGVuYWJsZWQsIFR5cGVTY3JpcHQgd2lsbCBjaGVjayBhbGwgY29kZSBwYXRocyBpbiBhIGZ1bmN0aW9uIHRvIGVuc3VyZSB0aGV5XG4gICAqIHJldHVybiBhIHZhbHVlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBub0ltcGxpY2l0UmV0dXJucz86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBSYWlzZSBlcnJvciBvbiDigJh0aGlz4oCZIGV4cHJlc3Npb25zIHdpdGggYW4gaW1wbGllZCDigJhhbnnigJkgdHlwZS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgbm9JbXBsaWNpdFRoaXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBSYWlzZSBlcnJvciBvbiB1c2Ugb2YgdGhlIGRvdCBzeW50YXggdG8gYWNjZXNzIGZpZWxkcyB3aGljaCBhcmUgbm90IGRlZmluZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IG5vUHJvcGVydHlBY2Nlc3NGcm9tSW5kZXhTaWduYXR1cmU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBSYWlzZSBlcnJvciB3aGVuIGFjY2Vzc2luZyBpbmRleGVzIG9uIG9iamVjdHMgd2l0aCB1bmtub3duIGtleXMgZGVmaW5lZCBpbiBpbmRleCBzaWduYXR1cmVzLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBub1VuY2hlY2tlZEluZGV4ZWRBY2Nlc3M/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBSZXBvcnQgZXJyb3JzIG9uIHVudXNlZCBsb2NhbCB2YXJpYWJsZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IG5vVW51c2VkTG9jYWxzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogUmVwb3J0IGVycm9ycyBvbiB1bnVzZWQgcGFyYW1ldGVycyBpbiBmdW5jdGlvbnMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IG5vVW51c2VkUGFyYW1ldGVycz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFsbG93cyBpbXBvcnRpbmcgbW9kdWxlcyB3aXRoIGEg4oCYLmpzb27igJkgZXh0ZW5zaW9uLCB3aGljaCBpcyBhIGNvbW1vbiBwcmFjdGljZVxuICAgKiBpbiBub2RlIHByb2plY3RzLiBUaGlzIGluY2x1ZGVzIGdlbmVyYXRpbmcgYSB0eXBlIGZvciB0aGUgaW1wb3J0IGJhc2VkIG9uIHRoZSBzdGF0aWMgSlNPTiBzaGFwZS5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb2x2ZUpzb25Nb2R1bGU/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTa2lwIHR5cGUgY2hlY2tpbmcgb2YgYWxsIGRlY2xhcmF0aW9uIGZpbGVzICgqLmQudHMpLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc2tpcExpYkNoZWNrPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIHN0cmljdCBmbGFnIGVuYWJsZXMgYSB3aWRlIHJhbmdlIG9mIHR5cGUgY2hlY2tpbmcgYmVoYXZpb3IgdGhhdCByZXN1bHRzIGluIHN0cm9uZ2VyIGd1YXJhbnRlZXNcbiAgICogb2YgcHJvZ3JhbSBjb3JyZWN0bmVzcy4gVHVybmluZyB0aGlzIG9uIGlzIGVxdWl2YWxlbnQgdG8gZW5hYmxpbmcgYWxsIG9mIHRoZSBzdHJpY3QgbW9kZSBmYW1pbHlcbiAgICogb3B0aW9ucywgd2hpY2ggYXJlIG91dGxpbmVkIGJlbG93LiBZb3UgY2FuIHRoZW4gdHVybiBvZmYgaW5kaXZpZHVhbCBzdHJpY3QgbW9kZSBmYW1pbHkgY2hlY2tzIGFzXG4gICAqIG5lZWRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RyaWN0PzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hlbiBzdHJpY3ROdWxsQ2hlY2tzIGlzIGZhbHNlLCBudWxsIGFuZCB1bmRlZmluZWQgYXJlIGVmZmVjdGl2ZWx5IGlnbm9yZWQgYnkgdGhlIGxhbmd1YWdlLlxuICAgKiBUaGlzIGNhbiBsZWFkIHRvIHVuZXhwZWN0ZWQgZXJyb3JzIGF0IHJ1bnRpbWUuXG4gICAqIFdoZW4gc3RyaWN0TnVsbENoZWNrcyBpcyB0cnVlLCBudWxsIGFuZCB1bmRlZmluZWQgaGF2ZSB0aGVpciBvd24gZGlzdGluY3QgdHlwZXMgYW5kIHlvdeKAmWxsXG4gICAqIGdldCBhIHR5cGUgZXJyb3IgaWYgeW91IHRyeSB0byB1c2UgdGhlbSB3aGVyZSBhIGNvbmNyZXRlIHZhbHVlIGlzIGV4cGVjdGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBzdHJpY3ROdWxsQ2hlY2tzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogV2hlbiBzZXQgdG8gdHJ1ZSwgVHlwZVNjcmlwdCB3aWxsIHJhaXNlIGFuIGVycm9yIHdoZW4gYSBjbGFzcyBwcm9wZXJ0eSB3YXMgZGVjbGFyZWQgYnV0XG4gICAqIG5vdCBzZXQgaW4gdGhlIGNvbnN0cnVjdG9yLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBzdHJpY3RQcm9wZXJ0eUluaXRpYWxpemF0aW9uPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogRG8gbm90IGVtaXQgZGVjbGFyYXRpb25zIGZvciBjb2RlIHRoYXQgaGFzIGFuIGBAaW50ZXJuYWxgIGFubm90YXRpb24gaW4gaXTigJlzIEpTRG9jIGNvbW1lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRydWVcbiAgICovXG4gIHJlYWRvbmx5IHN0cmlwSW50ZXJuYWw/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBGb3JjZXMgVHlwZVNjcmlwdCB0byBjb25zdWx0IHRoZSBgZXhwb3J0c2AgZmllbGQgb2YgYHBhY2thZ2UuanNvbmAgZmlsZXMgaWYgaXQgZXZlciByZWFkcyBmcm9tIGEgcGFja2FnZSBpbiBgbm9kZV9tb2R1bGVzYC5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcmVzb2x2ZVBhY2thZ2VKc29uRXhwb3J0cz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEZvcmNlcyBUeXBlU2NyaXB0IHRvIGNvbnN1bHQgdGhlIGBpbXBvcnRzYCBmaWVsZCBvZiBgcGFja2FnZS5qc29uYCB3aGVuIHBlcmZvcm1pbmcgYSBsb29rdXAgdGhhdCBiZWdpbnMgd2l0aCBgI2AgZnJvbSBhIGZpbGUgdGhhdCBoYXMgYSBgcGFja2FnZS5qc29uYCBhcyBhbiBhbmNlc3Rvci5cbiAgICpcbiAgICogQGRlZmF1bHQgdW5kZWZpbmVkXG4gICAqL1xuICByZWFkb25seSByZXNvbHZlUGFja2FnZUpzb25JbXBvcnRzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogTW9kZXJuIGJyb3dzZXJzIHN1cHBvcnQgYWxsIEVTNiBmZWF0dXJlcywgc28gRVM2IGlzIGEgZ29vZCBjaG9pY2UuIFlvdSBtaWdodCBjaG9vc2UgdG8gc2V0XG4gICAqIGEgbG93ZXIgdGFyZ2V0IGlmIHlvdXIgY29kZSBpcyBkZXBsb3llZCB0byBvbGRlciBlbnZpcm9ubWVudHMsIG9yIGEgaGlnaGVyIHRhcmdldCBpZiB5b3VyXG4gICAqIGNvZGUgaXMgZ3VhcmFudGVlZCB0byBydW4gaW4gbmV3ZXIgZW52aXJvbm1lbnRzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcIkVTMjAxOFwiXG4gICAqL1xuICByZWFkb25seSB0YXJnZXQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE91dHB1dCBkaXJlY3RvcnkgZm9yIHRoZSBjb21waWxlZCBmaWxlcy5cbiAgICovXG4gIHJlYWRvbmx5IG91dERpcj86IHN0cmluZztcblxuICAvKipcbiAgICogU3BlY2lmaWVzIHRoZSByb290IGRpcmVjdG9yeSBvZiBpbnB1dCBmaWxlcy5cbiAgICpcbiAgICogT25seSB1c2UgdG8gY29udHJvbCB0aGUgb3V0cHV0IGRpcmVjdG9yeSBzdHJ1Y3R1cmUgd2l0aCBgb3V0RGlyYC5cbiAgICovXG4gIHJlYWRvbmx5IHJvb3REaXI/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEFsbG93IGRlZmF1bHQgaW1wb3J0cyBmcm9tIG1vZHVsZXMgd2l0aCBubyBkZWZhdWx0IGV4cG9ydC4gVGhpcyBkb2VzIG5vdCBhZmZlY3QgY29kZSBlbWl0LCBqdXN0IHR5cGVjaGVja2luZy5cbiAgICovXG4gIHJlYWRvbmx5IGFsbG93U3ludGhldGljRGVmYXVsdEltcG9ydHM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBTcGVjaWZpZXMgdGhhdCBvcHRpb25hbCBwcm9wZXJ0eSB0eXBlcyBzaG91bGQgYmUgaW50ZXJwcmV0ZWQgZXhhY3RseSBhcyB3cml0dGVuLCBtZWFuaW5nIHRoYXQgYHwgdW5kZWZpbmVkYCBpcyBub3QgYWRkZWQgdG8gdGhlIHR5cGVcbiAgICogQXZhaWxhYmxlIHdpdGggVHlwZVNjcmlwdCA0LjQgYW5kIG5ld2VyLlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZXhhY3RPcHRpb25hbFByb3BlcnR5VHlwZXM/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIHZhcmlhYmxlIGluIGEgY2F0Y2ggY2xhdXNlIGZyb20gYW55IHRvIHVua25vd25cbiAgICogQXZhaWxhYmxlIHdpdGggVHlwZVNjcmlwdCA0LjQgYW5kIG5ld2VyLlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSB1c2VVbmtub3duSW5DYXRjaFZhcmlhYmxlcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIExldHMgeW91IHNldCBhIGJhc2UgZGlyZWN0b3J5IHRvIHJlc29sdmUgbm9uLWFic29sdXRlIG1vZHVsZSBuYW1lcy5cbiAgICpcbiAgICogWW91IGNhbiBkZWZpbmUgYSByb290IGZvbGRlciB3aGVyZSB5b3UgY2FuIGRvIGFic29sdXRlIGZpbGUgcmVzb2x1dGlvbi5cbiAgICovXG4gIHJlYWRvbmx5IGJhc2VVcmw/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEEgc2VyaWVzIG9mIGVudHJpZXMgd2hpY2ggcmUtbWFwIGltcG9ydHMgdG8gbG9va3VwIGxvY2F0aW9ucyByZWxhdGl2ZSB0byB0aGUgYmFzZVVybCwgdGhlcmUgaXMgYSBsYXJnZXIgY292ZXJhZ2Ugb2YgcGF0aHMgaW4gdGhlIGhhbmRib29rLlxuICAgKlxuICAgKiBwYXRocyBsZXRzIHlvdSBkZWNsYXJlIGhvdyBUeXBlU2NyaXB0IHNob3VsZCByZXNvbHZlIGFuIGltcG9ydCBpbiB5b3VyIHJlcXVpcmUvaW1wb3J0cy5cbiAgICovXG4gIHJlYWRvbmx5IHBhdGhzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB9O1xuXG4gIC8qKlxuICAgKiBJZiB0eXBlUm9vdHMgaXMgc3BlY2lmaWVkLCBvbmx5IHBhY2thZ2VzIHVuZGVyIHR5cGVSb290cyB3aWxsIGJlIGluY2x1ZGVkXG4gICAqIEBzZWUgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL3RzY29uZmlnLyN0eXBlUm9vdHNcbiAgICovXG4gIHJlYWRvbmx5IHR5cGVSb290cz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBJZiB0eXBlcyBpcyBzcGVjaWZpZWQsIG9ubHkgcGFja2FnZXMgbGlzdGVkIHdpbGwgYmUgaW5jbHVkZWQgaW4gdGhlIGdsb2JhbCBzY29wZVxuICAgKiBAc2VlIGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy90c2NvbmZpZyN0eXBlc1xuICAgKi9cbiAgcmVhZG9ubHkgdHlwZXM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGVsbHMgVHlwZVNjcmlwdCB0byBzYXZlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcm9qZWN0IGdyYXBoIGZyb20gdGhlIGxhc3QgY29tcGlsYXRpb24gdG8gZmlsZXMgc3RvcmVkIG9uIGRpc2suXG4gICAqIFRoaXMgY3JlYXRlcyBhIHNlcmllcyBvZiAudHNidWlsZGluZm8gZmlsZXMgaW4gdGhlIHNhbWUgZm9sZGVyIGFzIHlvdXIgY29tcGlsYXRpb24gb3V0cHV0LlxuICAgKiBUaGV5IGFyZSBub3QgdXNlZCBieSB5b3VyIEphdmFTY3JpcHQgYXQgcnVudGltZSBhbmQgY2FuIGJlIHNhZmVseSBkZWxldGVkLlxuICAgKiBZb3UgY2FuIHJlYWQgbW9yZSBhYm91dCB0aGUgZmxhZyBpbiB0aGUgMy40IHJlbGVhc2Ugbm90ZXMuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL2RvY3MvaGFuZGJvb2svcmVsZWFzZS1ub3Rlcy90eXBlc2NyaXB0LTMtNC5odG1sI2Zhc3Rlci1zdWJzZXF1ZW50LWJ1aWxkcy13aXRoLXRoZS0tLWluY3JlbWVudGFsLWZsYWdcbiAgICpcbiAgICogVG8gY29udHJvbCB3aGljaCBmb2xkZXJzIHlvdSB3YW50IHRvIHRoZSBmaWxlcyB0byBiZSBidWlsdCB0bywgdXNlIHRoZSBjb25maWcgb3B0aW9uIHRzQnVpbGRJbmZvRmlsZS5cbiAgICovXG4gIHJlYWRvbmx5IGluY3JlbWVudGFsPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhpcyBzZXR0aW5nIGxldHMgeW91IHNwZWNpZnkgYSBmaWxlIGZvciBzdG9yaW5nIGluY3JlbWVudGFsIGNvbXBpbGF0aW9uIGluZm9ybWF0aW9uIGFzIGEgcGFydCBvZiBjb21wb3NpdGUgcHJvamVjdHMgd2hpY2ggZW5hYmxlcyBmYXN0ZXIgYnVpbGRpbmcgb2YgbGFyZ2VyIFR5cGVTY3JpcHQgY29kZWJhc2VzLlxuICAgKiBZb3UgY2FuIHJlYWQgbW9yZSBhYm91dCBjb21wb3NpdGUgcHJvamVjdHMgaW4gdGhlIGhhbmRib29rLlxuICAgKi9cbiAgcmVhZG9ubHkgdHNCdWlsZEluZm9GaWxlPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBbGxvdyBVbnVzZWQgTGFiZWxzXG4gICAqXG4gICAqIFdoZW46XG4gICAqXG4gICAqIC0gYHVuZGVmaW5lZGAgKGRlZmF1bHQpIHByb3ZpZGUgc3VnZ2VzdGlvbnMgYXMgd2FybmluZ3MgdG8gZWRpdG9yc1xuICAgKiAtIGB0cnVlYCB1bnVzZWQgbGFiZWxzIGFyZSBpZ25vcmVkXG4gICAqIC0gYGZhbHNlYCByYWlzZXMgY29tcGlsZXIgZXJyb3JzIGFib3V0IHVudXNlZCBsYWJlbHNcbiAgICpcbiAgICogTGFiZWxzIGFyZSB2ZXJ5IHJhcmUgaW4gSmF2YVNjcmlwdCBhbmQgdHlwaWNhbGx5IGluZGljYXRlIGFuIGF0dGVtcHQgdG8gd3JpdGUgYW4gb2JqZWN0IGxpdGVyYWw6XG4gICAqXG4gICAqIGBgYHRzXG4gICAqIGZ1bmN0aW9uIHZlcmlmeUFnZShhZ2U6IG51bWJlcikge1xuICAgKiAgIC8vIEZvcmdvdCAncmV0dXJuJyBzdGF0ZW1lbnRcbiAgICogICBpZiAoYWdlID4gMTgpIHtcbiAgICogICAgIHZlcmlmaWVkOiB0cnVlO1xuICAgKiAvLyAgXl5eXl5eXl4gVW51c2VkIGxhYmVsLlxuICAgKiAgIH1cbiAgICogfVxuICAgKiBgYGBcbiAgICpcbiAgICogQHNlZSBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvdHNjb25maWcjYWxsb3dVbnVzZWRMYWJlbHNcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93VW51c2VkTGFiZWxzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQWxsb3cgVW5yZWFjaGFibGUgQ29kZVxuICAgKlxuICAgKiBXaGVuOlxuICAgKlxuICAgKiAtIGB1bmRlZmluZWRgIChkZWZhdWx0KSBwcm92aWRlIHN1Z2dlc3Rpb25zIGFzIHdhcm5pbmdzIHRvIGVkaXRvcnNcbiAgICogLSBgdHJ1ZWAgdW5yZWFjaGFibGUgY29kZSBpcyBpZ25vcmVkXG4gICAqIC0gYGZhbHNlYCByYWlzZXMgY29tcGlsZXIgZXJyb3JzIGFib3V0IHVucmVhY2hhYmxlIGNvZGVcbiAgICpcbiAgICogVGhlc2Ugd2FybmluZ3MgYXJlIG9ubHkgYWJvdXQgY29kZSB3aGljaCBpcyBwcm92YWJseSB1bnJlYWNoYWJsZSBkdWUgdG8gdGhlIHVzZSBvZiBKYXZhU2NyaXB0IHN5bnRheC5cbiAgICpcbiAgICogQHNlZSBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvdHNjb25maWcjYWxsb3dVbnJlYWNoYWJsZUNvZGVcbiAgICovXG4gIHJlYWRvbmx5IGFsbG93VW5yZWFjaGFibGVDb2RlPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogQ2hlY2sgSlNcbiAgICpcbiAgICogV29ya3MgaW4gdGFuZGVtIHdpdGggW2FsbG93SnNdKGh0dHBzOi8vd3d3LnR5cGVzY3JpcHRsYW5nLm9yZy90c2NvbmZpZyNhbGxvd0pzKS4gV2hlbiBjaGVja0pzIGlzIGVuYWJsZWQgdGhlblxuICAgKiBlcnJvcnMgYXJlIHJlcG9ydGVkIGluIEphdmFTY3JpcHQgZmlsZXMuIFRoaXMgaXMgdGhlIGVxdWl2YWxlbnQgb2YgaW5jbHVkaW5nIC8vIEB0cy1jaGVjayBhdCB0aGUgdG9wIG9mIGFsbFxuICAgKiBKYXZhU2NyaXB0IGZpbGVzIHdoaWNoIGFyZSBpbmNsdWRlZCBpbiB5b3VyIHByb2plY3QuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL3RzY29uZmlnI2NoZWNrSnNcbiAgICovXG4gIHJlYWRvbmx5IGNoZWNrSnM/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIENvbnRhaW5lciBmb3IgYFR5cGVzY3JpcHRDb25maWdgIGB0c2NvbmZpZy5qc29uYCBiYXNlIGNvbmZpZ3VyYXRpb24ocykuXG4gKiBFeHRlbmRpbmcgZnJvbSBtb3JlIHRoYW4gb25lIGJhc2UgY29uZmlnIGZpbGUgcmVxdWlyZXMgVHlwZVNjcmlwdCA1LjArLlxuICovXG5leHBvcnQgY2xhc3MgVHlwZXNjcmlwdENvbmZpZ0V4dGVuZHMge1xuICAvKipcbiAgICogRmFjdG9yeSBmb3IgY3JlYXRpb24gZnJvbSBhcnJheSBvZiBmaWxlIHBhdGhzLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUeXBlU2NyaXB0IDUuMCsgaXMgcmVxdWlyZWQgdG8gc3BlY2lmeSBtb3JlIHRoYW4gb25lIHZhbHVlIGluIGBwYXRoc2AuXG4gICAqXG4gICAqIEBwYXJhbSBwYXRocyBBYnNvbHV0ZSBvciByZWxhdGl2ZSBwYXRocyB0byBiYXNlIGB0c2NvbmZpZy5qc29uYCBmaWxlcy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbVBhdGhzKHBhdGhzOiBzdHJpbmdbXSkge1xuICAgIHJldHVybiBuZXcgVHlwZXNjcmlwdENvbmZpZ0V4dGVuZHMocGF0aHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEZhY3RvcnkgZm9yIGNyZWF0aW9uIGZyb20gYXJyYXkgb2Ygb3RoZXIgYFR5cGVzY3JpcHRDb25maWdgIGluc3RhbmNlcy5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVHlwZVNjcmlwdCA1LjArIGlzIHJlcXVpcmVkIHRvIHNwZWNpZnkgbW9yZSB0aGFuIG9uIHZhbHVlIGluIGBjb25maWdzYC5cbiAgICpcbiAgICogQHBhcmFtIGNvbmZpZ3MgQmFzZSBgVHlwZXNjcmlwdENvbmZpZ2AgaW5zdGFuY2VzLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tVHlwZXNjcmlwdENvbmZpZ3MoY29uZmlnczogVHlwZXNjcmlwdENvbmZpZ1tdKSB7XG4gICAgY29uc3QgcGF0aHMgPSBjb25maWdzLm1hcCgoY29uZmlnKSA9PiBjb25maWcuZmlsZS5hYnNvbHV0ZVBhdGgpO1xuICAgIHJldHVybiBUeXBlc2NyaXB0Q29uZmlnRXh0ZW5kcy5mcm9tUGF0aHMocGF0aHMpO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBiYXNlczogc3RyaW5nW107XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihiYXNlczogc3RyaW5nW10pIHtcbiAgICB0aGlzLmJhc2VzID0gYmFzZXM7XG4gIH1cblxuICBwdWJsaWMgdG9KU09OKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5iYXNlcztcbiAgfVxufVxuXG5leHBvcnQgY2xhc3MgVHlwZXNjcmlwdENvbmZpZyBleHRlbmRzIENvbXBvbmVudCB7XG4gIHByaXZhdGUgX2V4dGVuZHM6IFR5cGVzY3JpcHRDb25maWdFeHRlbmRzO1xuICBwdWJsaWMgcmVhZG9ubHkgY29tcGlsZXJPcHRpb25zPzogVHlwZVNjcmlwdENvbXBpbGVyT3B0aW9ucztcbiAgcHJpdmF0ZSByZWFkb25seSBpbmNsdWRlU2V0OiBTZXQ8c3RyaW5nPjtcbiAgcHJpdmF0ZSByZWFkb25seSBleGNsdWRlU2V0OiBTZXQ8c3RyaW5nPjtcbiAgcHVibGljIHJlYWRvbmx5IGZpbGVOYW1lOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBmaWxlOiBKc29uRmlsZTtcblxuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBvcHRpb25zOiBUeXBlc2NyaXB0Q29uZmlnT3B0aW9ucykge1xuICAgIHN1cGVyKHByb2plY3QpO1xuICAgIGNvbnN0IGZpbGVOYW1lID0gb3B0aW9ucy5maWxlTmFtZSA/PyBcInRzY29uZmlnLmpzb25cIjtcblxuICAgIGlmICghb3B0aW9ucy5leHRlbmRzICYmICFvcHRpb25zLmNvbXBpbGVyT3B0aW9ucykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBcIlR5cGVzY3JpcHRDb25maWc6IE11c3QgcHJvdmlkZSBlaXRoZXIgYGV4dGVuZHNgIG9yIGBjb21waWxlck9wdGlvbnNgIChvciBib3RoKS5cIlxuICAgICAgKTtcbiAgICB9XG5cbiAgICB0aGlzLl9leHRlbmRzID0gb3B0aW9ucy5leHRlbmRzID8/IFR5cGVzY3JpcHRDb25maWdFeHRlbmRzLmZyb21QYXRocyhbXSk7XG4gICAgdGhpcy5pbmNsdWRlU2V0ID0gb3B0aW9ucy5pbmNsdWRlXG4gICAgICA/IG5ldyBTZXQob3B0aW9ucy5pbmNsdWRlKVxuICAgICAgOiBuZXcgU2V0KFtcIioqLyoudHNcIl0pO1xuICAgIHRoaXMuZXhjbHVkZVNldCA9IG9wdGlvbnMuZXhjbHVkZVxuICAgICAgPyBuZXcgU2V0KG9wdGlvbnMuZXhjbHVkZSlcbiAgICAgIDogbmV3IFNldChbXCJub2RlX21vZHVsZXNcIl0pO1xuICAgIHRoaXMuZmlsZU5hbWUgPSBmaWxlTmFtZTtcblxuICAgIHRoaXMuY29tcGlsZXJPcHRpb25zID0gb3B0aW9ucy5jb21waWxlck9wdGlvbnM7XG5cbiAgICB0aGlzLmZpbGUgPSBuZXcgSnNvbkZpbGUocHJvamVjdCwgZmlsZU5hbWUsIHtcbiAgICAgIGFsbG93Q29tbWVudHM6IHRydWUsXG4gICAgICBvYmo6IHtcbiAgICAgICAgZXh0ZW5kczogKCkgPT4gdGhpcy5yZW5kZXJFeHRlbmRzKCksXG4gICAgICAgIGNvbXBpbGVyT3B0aW9uczogdGhpcy5jb21waWxlck9wdGlvbnMsXG4gICAgICAgIGluY2x1ZGU6ICgpID0+IHRoaXMuaW5jbHVkZSxcbiAgICAgICAgZXhjbHVkZTogKCkgPT4gdGhpcy5leGNsdWRlLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIGlmIChwcm9qZWN0IGluc3RhbmNlb2YgTm9kZVByb2plY3QpIHtcbiAgICAgIHByb2plY3QubnBtaWdub3JlPy5leGNsdWRlKGAvJHtmaWxlTmFtZX1gKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgZ2V0IGluY2x1ZGUoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBbLi4udGhpcy5pbmNsdWRlU2V0XTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgZXhjbHVkZSgpOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLmV4Y2x1ZGVTZXRdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlciBhcHByb3ByaWF0ZSB2YWx1ZSBmb3IgYGV4dGVuZHNgIGZpZWxkLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJFeHRlbmRzKCk6IHN0cmluZyB8IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAodGhpcy5leHRlbmRzLmxlbmd0aCA8PSAxKSB7XG4gICAgICAvLyByZW5kZXIgc3RyaW5nIHZhbHVlIHdoZW4gb25seSBvbmUgZXh0ZW5zaW9uIChUUzw1LjApO1xuICAgICAgLy8gb21pdCBpZiBubyBleHRlbnNpb25zLlxuICAgICAgcmV0dXJuIHRoaXMuZXh0ZW5kc1swXTtcbiAgICB9XG4gICAgLy8gcmVuZGVyIG1hbnkgZXh0ZW5zaW9ucyBhcyBhcnJheSAoVFM+PTUuMClcbiAgICByZXR1cm4gdGhpcy5leHRlbmRzO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlc29sdmUgdmFsaWQgVHlwZVNjcmlwdCBleHRlbmRzIHBhdGhzIHJlbGF0aXZlIHRvIHRoaXMgY29uZmlnLlxuICAgKlxuICAgKiBAcmVtYXJrc1xuICAgKiBUaGlzIHdpbGwgb25seSByZXNvbHZlIHRoZSByZWxhdGl2ZSBwYXRoIGZyb20gdGhpcyBjb25maWcgdG8gYW5vdGhlciBnaXZlblxuICAgKiBhbiBhYnNvbHV0ZSBwYXRoIGFzIGlucHV0LiBBbnkgbm9uLWFic29sdXRlIHBhdGggb3Igb3RoZXIgc3RyaW5nIHdpbGwgYmUgcmV0dXJuZWQgYXMgaXMuXG4gICAqIFRoaXMgaXMgdG8gcHJlc2VydmUgbWFudWFsbHkgc3BlY2lmaWVkIHJlbGF0aXZlIHBhdGhzIGFzIHdlbGwgYXMgbnBtIGltcG9ydCBwYXRocy5cbiAgICpcbiAgICogQHBhcmFtIGNvbmZpZ1BhdGggUGF0aCB0byByZXNvbHZlIGFnYWluc3QuXG4gICAqL1xuICBwdWJsaWMgcmVzb2x2ZUV4dGVuZHNQYXRoKGNvbmZpZ1BhdGg6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gaWYgbm90IGFic29sdXRlIGFzc3VtZSB1c2VyLWRlZmluZWQgcGF0aCAob3IgbnBtIHBhY2thZ2UpLlxuICAgIGlmICghcGF0aC5pc0Fic29sdXRlKGNvbmZpZ1BhdGgpKSByZXR1cm4gY29uZmlnUGF0aDtcbiAgICBjb25zdCByZWxhdGl2ZUNvbmZpZyA9IHBhdGgucmVsYXRpdmUoXG4gICAgICBwYXRoLmRpcm5hbWUodGhpcy5maWxlLmFic29sdXRlUGF0aCksXG4gICAgICBjb25maWdQYXRoXG4gICAgKTtcbiAgICAvLyBlbnN1cmUgaW1tZWRpYXRlIHNpYmxpbmcgZmlsZXMgYXJlIHByZWZpeGVkIHdpdGggJy4vJ1xuICAgIC8vIHR5cGVzY3JpcHQgZmlndXJlcyB0aGlzIG91dCwgYnV0IHNvbWUgdG9vbHMgc2VlbWluZ2x5IGJyZWFrIHdpdGhvdXQgaXQgKGkuZSwgZXNsaW50KS5cbiAgICBjb25zdCB7IGRpciwgLi4ucGF0aFBhcnRzIH0gPSBwYXRoLnBhcnNlKHJlbGF0aXZlQ29uZmlnKTtcbiAgICBjb25zdCBjb25maWdEaXIgPSBkaXJcbiAgICAgID8gcGF0aC5mb3JtYXQoeyBkaXI6IGRpci5zdGFydHNXaXRoKFwiLi5cIikgPyBcIlwiIDogXCIuXCIsIGJhc2U6IGRpciB9KVxuICAgICAgOiBcIi5cIjtcblxuICAgIGNvbnN0IGV4dGVuZHNQYXRoID0gcGF0aC5mb3JtYXQoeyAuLi5wYXRoUGFydHMsIGRpcjogY29uZmlnRGlyIH0pO1xuXG4gICAgcmV0dXJuIG5vcm1hbGl6ZVBlcnNpc3RlZFBhdGgoZXh0ZW5kc1BhdGgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlIHVzYWdlIG9mIGBleHRlbmRzYCBhZ2FpbnN0IGN1cnJlbnQgVHlwZVNjcmlwdCB2ZXJzaW9uLlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSB2YWxpZGF0ZUV4dGVuZHMoKSB7XG4gICAgY29uc3QgcHJvamVjdCA9IHRoaXMucHJvamVjdDtcbiAgICBjb25zdCBoYXNPbmVPck5vbmVFeHRlbmRzID0gdGhpcy5leHRlbmRzLmxlbmd0aCA8PSAxO1xuICAgIGNvbnN0IGlzTm9kZVByb2plY3QgPSBwcm9qZWN0IGluc3RhbmNlb2YgTm9kZVByb2plY3Q7XG4gICAgaWYgKGhhc09uZU9yTm9uZUV4dGVuZHMgfHwgIWlzTm9kZVByb2plY3QpIHtcbiAgICAgIC8vIGFsd2F5cyBhY2NlcHQgbm8gZXh0ZW5kcyBvciBzaW5ndWxhciBleHRlbmRzLlxuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB0c1ZlcnNpb24gPSBzZW12ZXIuY29lcmNlKFxuICAgICAgcHJvamVjdC5wYWNrYWdlLnRyeVJlc29sdmVEZXBlbmRlbmN5VmVyc2lvbihcInR5cGVzY3JpcHRcIiksXG4gICAgICB7IGxvb3NlOiB0cnVlIH1cbiAgICApO1xuICAgIGlmICh0c1ZlcnNpb24gJiYgdHNWZXJzaW9uLm1ham9yIDwgNSkge1xuICAgICAgdGhpcy5wcm9qZWN0LmxvZ2dlci53YXJuKFxuICAgICAgICBcIlR5cGVTY3JpcHQgPCA1LjAuMCBjYW4gb25seSBleHRlbmQgZnJvbSBhIHNpbmdsZSBiYXNlIGNvbmZpZy5cIixcbiAgICAgICAgYFR5cGVTY3JpcHQgVmVyc2lvbjogJHt0c1ZlcnNpb24uZm9ybWF0KCl9YCxcbiAgICAgICAgYEZpbGU6ICR7dGhpcy5maWxlLmFic29sdXRlUGF0aH1gLFxuICAgICAgICBgRXh0ZW5kczogJHt0aGlzLmV4dGVuZHN9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQXJyYXkgb2YgYmFzZSBgdHNjb25maWcuanNvbmAgcGF0aHMuXG4gICAqIEFueSBhYnNvbHV0ZSBwYXRocyBhcmUgcmVzb2x2ZWQgcmVsYXRpdmUgdG8gdGhpcyBpbnN0YW5jZSxcbiAgICogd2hpbGUgYW55IHJlbGF0aXZlIHBhdGhzIGFyZSB1c2VkIGFzIGlzLlxuICAgKi9cbiAgcHVibGljIGdldCBleHRlbmRzKCk6IHN0cmluZ1tdIHtcbiAgICByZXR1cm4gdGhpcy5fZXh0ZW5kc1xuICAgICAgLnRvSlNPTigpXG4gICAgICAubWFwKCh2YWx1ZSkgPT4gdGhpcy5yZXNvbHZlRXh0ZW5kc1BhdGgodmFsdWUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeHRlbmQgZnJvbSBiYXNlIGBUeXBlc2NyaXB0Q29uZmlnYCBpbnN0YW5jZS5cbiAgICpcbiAgICogQHJlbWFya3NcbiAgICogVHlwZVNjcmlwdCA1LjArIGlzIHJlcXVpcmVkIHRvIGV4dGVuZCBmcm9tIG1vcmUgdGhhbiBvbmUgYmFzZSBgVHlwZXNjcmlwdENvbmZpZ2AuXG4gICAqXG4gICAqIEBwYXJhbSB2YWx1ZSBCYXNlIGBUeXBlc2NyaXB0Q29uZmlnYCBpbnN0YW5jZS5cbiAgICovXG4gIHB1YmxpYyBhZGRFeHRlbmRzKHZhbHVlOiBUeXBlc2NyaXB0Q29uZmlnKSB7XG4gICAgdGhpcy5fZXh0ZW5kcyA9IFR5cGVzY3JpcHRDb25maWdFeHRlbmRzLmZyb21QYXRocyhbXG4gICAgICAuLi50aGlzLl9leHRlbmRzLnRvSlNPTigpLFxuICAgICAgdmFsdWUuZmlsZS5hYnNvbHV0ZVBhdGgsXG4gICAgXSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkIGFuIGluY2x1ZGUgcGF0dGVybiB0byB0aGUgYGluY2x1ZGVgIGFycmF5IG9mIHRoZSBUU0NvbmZpZy5cbiAgICpcbiAgICogQHNlZSBodHRwczovL3d3dy50eXBlc2NyaXB0bGFuZy5vcmcvdHNjb25maWcjaW5jbHVkZVxuICAgKlxuICAgKiBAcGFyYW0gcGF0dGVybiBUaGUgcGF0dGVybiB0byBhZGQuXG4gICAqL1xuICBwdWJsaWMgYWRkSW5jbHVkZShwYXR0ZXJuOiBzdHJpbmcpIHtcbiAgICB0aGlzLmluY2x1ZGUucHVzaChwYXR0ZXJuKTtcbiAgICB0aGlzLmluY2x1ZGVTZXQuYWRkKHBhdHRlcm4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZCBhbiBleGNsdWRlIHBhdHRlcm4gdG8gdGhlIGBleGNsdWRlYCBhcnJheSBvZiB0aGUgVFNDb25maWcuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL3RzY29uZmlnI2V4Y2x1ZGVcbiAgICpcbiAgICogQHBhcmFtIHBhdHRlcm4gVGhlIHBhdHRlcm4gdG8gYWRkLlxuICAgKi9cbiAgcHVibGljIGFkZEV4Y2x1ZGUocGF0dGVybjogc3RyaW5nKSB7XG4gICAgdGhpcy5leGNsdWRlLnB1c2gocGF0dGVybik7XG4gICAgdGhpcy5leGNsdWRlU2V0LmFkZChwYXR0ZXJuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gaW5jbHVkZSBwYXR0ZXJuIGZyb20gdGhlIGBpbmNsdWRlYCBhcnJheSBvZiB0aGUgVFNDb25maWcuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL3RzY29uZmlnI2luY2x1ZGVcbiAgICpcbiAgICogQHBhcmFtIHBhdHRlcm4gVGhlIHBhdHRlcm4gdG8gcmVtb3ZlLlxuICAgKi9cbiAgcHVibGljIHJlbW92ZUluY2x1ZGUocGF0dGVybjogc3RyaW5nKSB7XG4gICAgdGhpcy5pbmNsdWRlU2V0LmRlbGV0ZShwYXR0ZXJuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW1vdmUgYW4gZXhjbHVkZSBwYXR0ZXJuIGZyb20gdGhlIGBleGNsdWRlYCBhcnJheSBvZiB0aGUgVFNDb25maWcuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly93d3cudHlwZXNjcmlwdGxhbmcub3JnL3RzY29uZmlnI2V4Y2x1ZGVcbiAgICpcbiAgICogQHBhcmFtIHBhdHRlcm4gVGhlIHBhdHRlcm4gdG8gcmVtb3ZlLlxuICAgKi9cbiAgcHVibGljIHJlbW92ZUV4Y2x1ZGUocGF0dGVybjogc3RyaW5nKSB7XG4gICAgdGhpcy5leGNsdWRlU2V0LmRlbGV0ZShwYXR0ZXJuKTtcbiAgfVxuXG4gIHByZVN5bnRoZXNpemUoKSB7XG4gICAgc3VwZXIucHJlU3ludGhlc2l6ZSgpO1xuICAgIHRoaXMudmFsaWRhdGVFeHRlbmRzKCk7XG4gIH1cbn1cbiJdfQ==
@@ -308,7 +308,7 @@ class UpgradeDependencies extends component_1.Component {
308
308
  }
309
309
  exports.UpgradeDependencies = UpgradeDependencies;
310
310
  _a = JSII_RTTI_SYMBOL_1;
311
- UpgradeDependencies[_a] = { fqn: "projen.javascript.UpgradeDependencies", version: "0.88.2" };
311
+ UpgradeDependencies[_a] = { fqn: "projen.javascript.UpgradeDependencies", version: "0.88.4" };
312
312
  /**
313
313
  * How often to check for new versions and raise pull requests for version upgrades.
314
314
  */
@@ -325,7 +325,7 @@ class UpgradeDependenciesSchedule {
325
325
  }
326
326
  exports.UpgradeDependenciesSchedule = UpgradeDependenciesSchedule;
327
327
  _b = JSII_RTTI_SYMBOL_1;
328
- UpgradeDependenciesSchedule[_b] = { fqn: "projen.javascript.UpgradeDependenciesSchedule", version: "0.88.2" };
328
+ UpgradeDependenciesSchedule[_b] = { fqn: "projen.javascript.UpgradeDependenciesSchedule", version: "0.88.4" };
329
329
  /**
330
330
  * Disables automatic upgrades.
331
331
  */