projen 0.104.14 → 0.104.16

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 (169) hide show
  1. package/.jsii +1712 -603
  2. package/lib/ai-instructions.js +2 -2
  3. package/lib/awscdk/auto-discover.js +6 -6
  4. package/lib/awscdk/awscdk-app-java.js +1 -1
  5. package/lib/awscdk/awscdk-app-py.js +1 -1
  6. package/lib/awscdk/awscdk-app-ts.js +1 -1
  7. package/lib/awscdk/awscdk-construct.js +1 -1
  8. package/lib/awscdk/awscdk-deps-java.js +1 -1
  9. package/lib/awscdk/awscdk-deps-js.js +1 -1
  10. package/lib/awscdk/awscdk-deps-py.js +1 -1
  11. package/lib/awscdk/awscdk-deps.js +1 -1
  12. package/lib/awscdk/cdk-config.d.ts +7 -0
  13. package/lib/awscdk/cdk-config.js +5 -4
  14. package/lib/awscdk/cdk-tasks.js +1 -1
  15. package/lib/awscdk/integration-test.js +1 -1
  16. package/lib/awscdk/lambda-extension.js +1 -1
  17. package/lib/awscdk/lambda-function.js +2 -2
  18. package/lib/build/build-workflow.js +1 -1
  19. package/lib/cdk/auto-discover-base.js +2 -2
  20. package/lib/cdk/construct-lib.js +1 -1
  21. package/lib/cdk/integration-test-base.js +1 -1
  22. package/lib/cdk/jsii-build.js +1 -1
  23. package/lib/cdk/jsii-docgen.js +1 -1
  24. package/lib/cdk/jsii-project.js +1 -1
  25. package/lib/cdk8s/auto-discover.js +2 -2
  26. package/lib/cdk8s/cdk8s-app-py.js +1 -1
  27. package/lib/cdk8s/cdk8s-app-ts.js +1 -1
  28. package/lib/cdk8s/cdk8s-construct.js +1 -1
  29. package/lib/cdk8s/cdk8s-deps-py.js +1 -1
  30. package/lib/cdk8s/cdk8s-deps.js +1 -1
  31. package/lib/cdk8s/integration-test.js +1 -1
  32. package/lib/cdktf/cdktf-construct.js +1 -1
  33. package/lib/cdktn/cdktn-app-ts.js +1 -1
  34. package/lib/cdktn/cdktn-config.js +1 -1
  35. package/lib/cdktn/cdktn-construct.js +1 -1
  36. package/lib/cdktn/cdktn-deps.js +1 -1
  37. package/lib/cdktn/cdktn-tasks.js +1 -1
  38. package/lib/circleci/circleci.js +1 -1
  39. package/lib/component.js +2 -2
  40. package/lib/dependencies.js +1 -1
  41. package/lib/dev-env.js +1 -1
  42. package/lib/docker-compose/docker-compose-service.js +1 -1
  43. package/lib/docker-compose/docker-compose.js +1 -1
  44. package/lib/file.js +1 -1
  45. package/lib/gitattributes.js +1 -1
  46. package/lib/github/actions-provider.js +1 -1
  47. package/lib/github/actions.const.js +1 -1
  48. package/lib/github/auto-approve.js +1 -1
  49. package/lib/github/auto-merge.js +1 -1
  50. package/lib/github/auto-queue.js +1 -1
  51. package/lib/github/dependabot.js +1 -1
  52. package/lib/github/dependency-review.js +1 -1
  53. package/lib/github/github-credentials.js +1 -1
  54. package/lib/github/github-project.js +1 -1
  55. package/lib/github/github.js +1 -1
  56. package/lib/github/merge-queue.js +1 -1
  57. package/lib/github/mergify.js +1 -1
  58. package/lib/github/pr-template.js +1 -1
  59. package/lib/github/pull-request-backport.js +1 -1
  60. package/lib/github/pull-request-lint.js +1 -1
  61. package/lib/github/pull-request-source.js +1 -1
  62. package/lib/github/stale.js +1 -1
  63. package/lib/github/task-workflow-job.js +1 -1
  64. package/lib/github/task-workflow.js +1 -1
  65. package/lib/github/workflow-actions.js +1 -1
  66. package/lib/github/workflow-jobs.js +1 -1
  67. package/lib/github/workflow-steps.js +1 -1
  68. package/lib/github/workflows.js +1 -1
  69. package/lib/gitlab/configuration.js +1 -1
  70. package/lib/gitlab/gitlab-configuration.js +1 -1
  71. package/lib/gitlab/nested-configuration.js +1 -1
  72. package/lib/gitpod.js +1 -1
  73. package/lib/ignore-file.js +1 -1
  74. package/lib/ini.js +1 -1
  75. package/lib/java/java-project.js +1 -1
  76. package/lib/java/junit.js +1 -1
  77. package/lib/java/maven-compile.js +1 -1
  78. package/lib/java/maven-packaging.js +1 -1
  79. package/lib/java/maven-sample.js +1 -1
  80. package/lib/java/pom.d.ts +12 -0
  81. package/lib/java/pom.js +9 -3
  82. package/lib/java/projenrc.js +1 -1
  83. package/lib/javascript/biome/biome-config.d.ts +826 -224
  84. package/lib/javascript/biome/biome-config.js +207 -31
  85. package/lib/javascript/biome/biome.js +1 -1
  86. package/lib/javascript/bundler.js +1 -1
  87. package/lib/javascript/eslint.js +1 -1
  88. package/lib/javascript/jest.js +4 -4
  89. package/lib/javascript/license-checker.js +1 -1
  90. package/lib/javascript/node-config-file.js +1 -1
  91. package/lib/javascript/node-native-test-runner.js +2 -2
  92. package/lib/javascript/node-package.js +1 -1
  93. package/lib/javascript/node-project.js +1 -1
  94. package/lib/javascript/npm-config.js +1 -1
  95. package/lib/javascript/pnpm-workspace-config.js +2 -2
  96. package/lib/javascript/pnpm-workspace.js +1 -1
  97. package/lib/javascript/prettier.js +1 -1
  98. package/lib/javascript/projenrc.js +1 -1
  99. package/lib/javascript/typescript-config.js +2 -2
  100. package/lib/javascript/upgrade-dependencies.js +2 -2
  101. package/lib/javascript/yarnrc.js +1 -1
  102. package/lib/json-patch.js +1 -1
  103. package/lib/json.js +1 -1
  104. package/lib/license.js +1 -1
  105. package/lib/logger.js +1 -1
  106. package/lib/makefile.js +1 -1
  107. package/lib/object-file.js +1 -1
  108. package/lib/polaris/coverity-go.js +1 -1
  109. package/lib/polaris/coverity-java.js +1 -1
  110. package/lib/polaris/coverity-javascript.js +1 -1
  111. package/lib/polaris/coverity.js +1 -1
  112. package/lib/project-build.js +1 -1
  113. package/lib/project-tree.js +1 -1
  114. package/lib/project.js +1 -1
  115. package/lib/projects.js +1 -1
  116. package/lib/projenrc-json.js +1 -1
  117. package/lib/projenrc.js +1 -1
  118. package/lib/properties-file.js +1 -1
  119. package/lib/python/pip.js +1 -1
  120. package/lib/python/poetry.js +2 -2
  121. package/lib/python/projenrc.js +1 -1
  122. package/lib/python/pyproject-toml-file.js +1 -1
  123. package/lib/python/pytest-sample.js +1 -1
  124. package/lib/python/pytest.js +1 -1
  125. package/lib/python/python-project.js +1 -1
  126. package/lib/python/python-sample.js +1 -1
  127. package/lib/python/requirements-file.js +1 -1
  128. package/lib/python/setuppy.js +1 -1
  129. package/lib/python/setuptools.js +1 -1
  130. package/lib/python/uv-config.js +1 -1
  131. package/lib/python/uv.js +1 -1
  132. package/lib/python/venv.js +1 -1
  133. package/lib/readme.js +1 -1
  134. package/lib/release/publisher.js +1 -1
  135. package/lib/release/release-trigger.js +1 -1
  136. package/lib/release/release.js +1 -1
  137. package/lib/renovatebot.js +1 -1
  138. package/lib/run-task.cjs +1 -1
  139. package/lib/sample-file.js +2 -2
  140. package/lib/script-runner.js +1 -1
  141. package/lib/sonarqube/javascript.js +1 -1
  142. package/lib/sonarqube/rust.js +1 -1
  143. package/lib/sonarqube/sonarqube.js +1 -1
  144. package/lib/sonarqube/typescript.js +1 -1
  145. package/lib/source-code.js +1 -1
  146. package/lib/task-shell.js +1 -1
  147. package/lib/task.js +1 -1
  148. package/lib/tasks.js +1 -1
  149. package/lib/testing.js +1 -1
  150. package/lib/textfile.js +1 -1
  151. package/lib/toml.js +1 -1
  152. package/lib/typescript/projenrc-ts.js +1 -1
  153. package/lib/typescript/projenrc.js +1 -1
  154. package/lib/typescript/typescript-runner.js +1 -1
  155. package/lib/typescript/typescript-typedoc.js +1 -1
  156. package/lib/typescript/typescript.js +5 -5
  157. package/lib/version.js +2 -2
  158. package/lib/vscode/devcontainer.js +1 -1
  159. package/lib/vscode/extensions.js +1 -1
  160. package/lib/vscode/launch-config.js +1 -1
  161. package/lib/vscode/settings.js +1 -1
  162. package/lib/vscode/vscode.js +1 -1
  163. package/lib/web/next.js +3 -3
  164. package/lib/web/postcss.js +1 -1
  165. package/lib/web/react.js +3 -3
  166. package/lib/web/tailwind.js +1 -1
  167. package/lib/xmlfile.js +1 -1
  168. package/lib/yaml.js +1 -1
  169. package/package.json +1 -1
@@ -32,7 +32,7 @@ var EndOfLine;
32
32
  * @see https://git-scm.com/docs/gitattributes
33
33
  */
34
34
  class GitAttributesFile extends file_1.FileBase {
35
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.GitAttributesFile", version: "0.104.14" };
35
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.GitAttributesFile", version: "0.104.16" };
36
36
  attributes = new Map();
37
37
  /**
38
38
  * The default end of line character for text files.
@@ -6,7 +6,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
6
  * Manage the versions used for GitHub Actions used in steps
7
7
  */
8
8
  class GitHubActionsProvider {
9
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.GitHubActionsProvider", version: "0.104.14" };
9
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.GitHubActionsProvider", version: "0.104.16" };
10
10
  actions = new Map();
11
11
  /**
12
12
  * Define an override for a given action.
@@ -10,7 +10,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
10
10
  * reviewed action version.
11
11
  */
12
12
  class ActionRefs {
13
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.ActionRefs", version: "0.104.14" };
13
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.ActionRefs", version: "0.104.16" };
14
14
  /** actions/checkout at v7.0.1 */
15
15
  static ACTIONS_CHECKOUT = "actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1";
16
16
  /** actions/create-github-app-token at v3.2.0 (immutable) */
@@ -12,7 +12,7 @@ const JOB_ID = "approve";
12
12
  * Auto approve pull requests that meet a criteria
13
13
  */
14
14
  class AutoApprove extends component_1.Component {
15
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.AutoApprove", version: "0.104.14" };
15
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.AutoApprove", version: "0.104.16" };
16
16
  label;
17
17
  workflow;
18
18
  sources;
@@ -19,7 +19,7 @@ const component_1 = require("../component");
19
19
  * @see https://mergify.com/
20
20
  */
21
21
  class AutoMerge extends component_1.Component {
22
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.AutoMerge", version: "0.104.14" };
22
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.AutoMerge", version: "0.104.16" };
23
23
  lazyConditions = new Array();
24
24
  constructor(github, options = {}) {
25
25
  super(github.project);
@@ -54,7 +54,7 @@ var MergeMethod;
54
54
  * PRs will be merged once they pass required checks.
55
55
  */
56
56
  class AutoQueue extends component_1.Component {
57
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.AutoQueue", version: "0.104.14" };
57
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.AutoQueue", version: "0.104.16" };
58
58
  constructor(scope, options = {}) {
59
59
  super(scope);
60
60
  const workflowEngine = github_1.GitHub.of(this.project);
@@ -166,7 +166,7 @@ var VersioningStrategy;
166
166
  * on the lockfile itself will be proposed.
167
167
  */
168
168
  class Dependabot extends component_1.Component {
169
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.Dependabot", version: "0.104.14" };
169
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.Dependabot", version: "0.104.16" };
170
170
  /**
171
171
  * The raw dependabot configuration.
172
172
  * @see https://docs.github.com/en/github/administering-a-repository/configuration-options-for-dependency-updates
@@ -15,7 +15,7 @@ const component_1 = require("../component");
15
15
  * @see https://github.com/actions/dependency-review-action
16
16
  */
17
17
  class DependencyReview extends component_1.Component {
18
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.DependencyReview", version: "0.104.14" };
18
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.DependencyReview", version: "0.104.16" };
19
19
  constructor(github, options = {}) {
20
20
  super(github.project);
21
21
  const commentSummary = options.commentSummaryInPr ?? "always";
@@ -42,7 +42,7 @@ const actions_const_1 = require("./actions.const");
42
42
  */
43
43
  class GithubCredentials {
44
44
  options;
45
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.GithubCredentials", version: "0.104.14" };
45
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.GithubCredentials", version: "0.104.16" };
46
46
  /**
47
47
  * Provide API access through a GitHub personal access token.
48
48
  *
@@ -21,7 +21,7 @@ const vscode_1 = require("../vscode");
21
21
  * "engines" can be used to implement our CI/CD solutions.
22
22
  */
23
23
  class GitHubProject extends project_1.Project {
24
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.GitHubProject", version: "0.104.14" };
24
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.GitHubProject", version: "0.104.16" };
25
25
  /**
26
26
  * Access all github components.
27
27
  *
@@ -16,7 +16,7 @@ const workflows_1 = require("./workflows");
16
16
  const component_1 = require("../component");
17
17
  const runner_options_1 = require("../runner-options");
18
18
  class GitHub extends component_1.Component {
19
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.GitHub", version: "0.104.14" };
19
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.GitHub", version: "0.104.16" };
20
20
  /**
21
21
  * Returns the `GitHub` component of a project or `undefined` if the project
22
22
  * does not have a GitHub component.
@@ -10,7 +10,7 @@ const github_1 = require("./github");
10
10
  */
11
11
  class MergeQueue extends component_1.Component {
12
12
  options;
13
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.MergeQueue", version: "0.104.14" };
13
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.MergeQueue", version: "0.104.16" };
14
14
  constructor(scope, options = {}) {
15
15
  super(scope);
16
16
  this.options = options;
@@ -6,7 +6,7 @@ const component_1 = require("../component");
6
6
  const util_1 = require("../util");
7
7
  const yaml_1 = require("../yaml");
8
8
  class Mergify extends component_1.Component {
9
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.Mergify", version: "0.104.14" };
9
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.Mergify", version: "0.104.16" };
10
10
  rules = new Array();
11
11
  queues = new Array();
12
12
  // The actual YAML file will only be created if at least 1 rule is added.
@@ -7,7 +7,7 @@ const textfile_1 = require("../textfile");
7
7
  * Template for GitHub pull requests.
8
8
  */
9
9
  class PullRequestTemplate extends textfile_1.TextFile {
10
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.PullRequestTemplate", version: "0.104.14" };
10
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.PullRequestTemplate", version: "0.104.16" };
11
11
  /**
12
12
  * Returns the `PullRequestTemplate` instance associated with a project or `undefined` if
13
13
  * there is no PullRequestTemplate.
@@ -10,7 +10,7 @@ const component_1 = require("../component");
10
10
  const json_1 = require("../json");
11
11
  const release_1 = require("../release");
12
12
  class PullRequestBackport extends component_1.Component {
13
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.PullRequestBackport", version: "0.104.14" };
13
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.PullRequestBackport", version: "0.104.16" };
14
14
  file;
15
15
  workflow;
16
16
  constructor(scope, options = {}) {
@@ -13,7 +13,7 @@ const component_1 = require("../component");
13
13
  class PullRequestLint extends component_1.Component {
14
14
  github;
15
15
  options;
16
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.PullRequestLint", version: "0.104.14" };
16
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.PullRequestLint", version: "0.104.16" };
17
17
  constructor(github, options = {}) {
18
18
  super(github.project);
19
19
  this.github = github;
@@ -9,7 +9,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
9
9
  */
10
10
  class PullRequestSource {
11
11
  condition;
12
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.PullRequestSource", version: "0.104.14" };
12
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.PullRequestSource", version: "0.104.16" };
13
13
  /**
14
14
  * Pull requests from a head branch in this repository.
15
15
  *
@@ -18,7 +18,7 @@ const component_1 = require("../component");
18
18
  * @see https://github.com/actions/stale
19
19
  */
20
20
  class Stale extends component_1.Component {
21
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.Stale", version: "0.104.14" };
21
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.Stale", version: "0.104.16" };
22
22
  constructor(github, options = {}) {
23
23
  super(github.project);
24
24
  const stale = github.addWorkflow("stale");
@@ -13,7 +13,7 @@ const path_1 = require("../util/path");
13
13
  * @implements {Job}
14
14
  */
15
15
  class TaskWorkflowJob extends component_1.Component {
16
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.TaskWorkflowJob", version: "0.104.14" };
16
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.TaskWorkflowJob", version: "0.104.16" };
17
17
  runsOn;
18
18
  runsOnGroup;
19
19
  steps;
@@ -9,7 +9,7 @@ const DEFAULT_JOB_ID = "build";
9
9
  * A GitHub workflow for common build tasks within a project.
10
10
  */
11
11
  class TaskWorkflow extends workflows_1.GithubWorkflow {
12
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.TaskWorkflow", version: "0.104.14" };
12
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.TaskWorkflow", version: "0.104.16" };
13
13
  jobId;
14
14
  artifactsDirectory;
15
15
  constructor(github, options) {
@@ -17,7 +17,7 @@ const RUNNER_TEMP = "${{ runner.temp }}";
17
17
  * A set of utility functions for creating GitHub actions in workflows.
18
18
  */
19
19
  class WorkflowActions {
20
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.WorkflowActions", version: "0.104.14" };
20
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.WorkflowActions", version: "0.104.16" };
21
21
  /**
22
22
  * Creates a .patch file from the current git diff and uploads it as an
23
23
  * artifact. Use `checkoutWithPatch` to download and apply in another job.
@@ -10,7 +10,7 @@ const runner_options_1 = require("../runner-options");
10
10
  * A set of utility functions for creating jobs in GitHub Workflows.
11
11
  */
12
12
  class WorkflowJobs {
13
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.WorkflowJobs", version: "0.104.14" };
13
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.WorkflowJobs", version: "0.104.16" };
14
14
  /**
15
15
  * Creates a pull request with the changes of a patch file.
16
16
  *
@@ -26,7 +26,7 @@ var CheckoutSubmodules;
26
26
  * A collection of very commonly used, individual, GitHub Workflow Job steps.
27
27
  */
28
28
  class WorkflowSteps {
29
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.WorkflowSteps", version: "0.104.14" };
29
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.WorkflowSteps", version: "0.104.16" };
30
30
  /**
31
31
  * Checks out a repository.
32
32
  *
@@ -18,7 +18,7 @@ const yaml_1 = require("../yaml");
18
18
  * @see https://docs.github.com/en/actions/reference/workflow-syntax-for-github-actions
19
19
  */
20
20
  class GithubWorkflow extends component_1.Component {
21
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.GithubWorkflow", version: "0.104.14" };
21
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.GithubWorkflow", version: "0.104.16" };
22
22
  /**
23
23
  * The name of the workflow. GitHub displays the names of your workflows under your repository's
24
24
  * "Actions" tab.
@@ -45,7 +45,7 @@ const yaml_1 = require("../yaml");
45
45
  * @see https://docs.gitlab.com/ee/ci/yaml/
46
46
  */
47
47
  class CiConfiguration extends component_1.Component {
48
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.gitlab.CiConfiguration", version: "0.104.14" };
48
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.gitlab.CiConfiguration", version: "0.104.16" };
49
49
  /**
50
50
  * The name of the configuration.
51
51
  */
@@ -8,7 +8,7 @@ const nested_configuration_1 = require("./nested-configuration");
8
8
  * A GitLab CI for the main `.gitlab-ci.yml` file.
9
9
  */
10
10
  class GitlabConfiguration extends configuration_1.CiConfiguration {
11
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.gitlab.GitlabConfiguration", version: "0.104.14" };
11
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.gitlab.GitlabConfiguration", version: "0.104.16" };
12
12
  nestedTemplates = {};
13
13
  constructor(project, options) {
14
14
  super(project, "gitlab-ci", options);
@@ -7,7 +7,7 @@ const configuration_1 = require("./configuration");
7
7
  * A GitLab CI for templates that are created and included in the `.gitlab-ci.yml` file.
8
8
  */
9
9
  class NestedConfiguration extends configuration_1.CiConfiguration {
10
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.gitlab.NestedConfiguration", version: "0.104.14" };
10
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.gitlab.NestedConfiguration", version: "0.104.16" };
11
11
  parent;
12
12
  constructor(project, parent, name, options) {
13
13
  super(project, name, options);
package/lib/gitpod.js CHANGED
@@ -106,7 +106,7 @@ var GitpodPortVisibility;
106
106
  * The Gitpod component which emits .gitpod.yml
107
107
  */
108
108
  class Gitpod extends component_1.Component {
109
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.Gitpod", version: "0.104.14" };
109
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.Gitpod", version: "0.104.16" };
110
110
  dockerImage;
111
111
  prebuilds;
112
112
  tasks = new Array();
@@ -5,7 +5,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
5
5
  const file_1 = require("./file");
6
6
  const util_1 = require("./util");
7
7
  class IgnoreFile extends file_1.FileBase {
8
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.IgnoreFile", version: "0.104.14" };
8
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.IgnoreFile", version: "0.104.16" };
9
9
  _patterns;
10
10
  filterCommentLines;
11
11
  filterEmptyLines;
package/lib/ini.js CHANGED
@@ -41,7 +41,7 @@ const object_file_1 = require("./object-file");
41
41
  * Represents an INI file.
42
42
  */
43
43
  class IniFile extends object_file_1.ObjectFile {
44
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.IniFile", version: "0.104.14" };
44
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.IniFile", version: "0.104.16" };
45
45
  constructor(project, filePath, options) {
46
46
  super(project, filePath, options);
47
47
  }
@@ -16,7 +16,7 @@ const util_1 = require("../util");
16
16
  * @pjid java
17
17
  */
18
18
  class JavaProject extends github_1.GitHubProject {
19
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.JavaProject", version: "0.104.14" };
19
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.JavaProject", version: "0.104.16" };
20
20
  /**
21
21
  * API for managing `pom.xml`.
22
22
  */
package/lib/java/junit.js CHANGED
@@ -10,7 +10,7 @@ const TESTDIR = (0, path_1.join)("src", "test", "java");
10
10
  * Implements JUnit-based testing.
11
11
  */
12
12
  class Junit extends component_1.Component {
13
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.Junit", version: "0.104.14" };
13
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.Junit", version: "0.104.16" };
14
14
  constructor(project, options) {
15
15
  super(project);
16
16
  const pom = options.pom;
@@ -7,7 +7,7 @@ const component_1 = require("../component");
7
7
  * Adds the maven-compiler plugin to a POM file and the `compile` task.
8
8
  */
9
9
  class MavenCompile extends component_1.Component {
10
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.MavenCompile", version: "0.104.14" };
10
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.MavenCompile", version: "0.104.16" };
11
11
  constructor(project, pom, options = {}) {
12
12
  super(project);
13
13
  project.gitignore.exclude("target");
@@ -7,7 +7,7 @@ const component_1 = require("../component");
7
7
  * Configures a maven project to produce a .jar archive with sources and javadocs.
8
8
  */
9
9
  class MavenPackaging extends component_1.Component {
10
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.MavenPackaging", version: "0.104.14" };
10
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.MavenPackaging", version: "0.104.16" };
11
11
  /**
12
12
  * The directory containing the package output, relative to the project outdir
13
13
  */
@@ -9,7 +9,7 @@ const sample_file_1 = require("../sample-file");
9
9
  * Java code sample.
10
10
  */
11
11
  class MavenSample extends component_1.Component {
12
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.MavenSample", version: "0.104.14" };
12
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.MavenSample", version: "0.104.16" };
13
13
  constructor(project, options) {
14
14
  super(project);
15
15
  const pkg = options.package.split(".");
package/lib/java/pom.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import type { ICompareString } from "../compare";
1
2
  import { Component } from "../component";
2
3
  import type { Project } from "../project";
3
4
  /**
@@ -79,6 +80,16 @@ export interface PomOptions {
79
80
  * @featured
80
81
  */
81
82
  readonly parentPom?: ParentPom;
83
+ /**
84
+ * Sorts the top-level build plugins in the generated POM.
85
+ *
86
+ * The comparator receives `groupId/artifactId` identifiers without versions.
87
+ * Returning zero preserves the existing relative order.
88
+ * This does not change Maven lifecycle phase bindings.
89
+ *
90
+ * @default - preserve the existing dependency order
91
+ */
92
+ readonly sortPlugins?: ICompareString;
82
93
  }
83
94
  export interface ParentPom {
84
95
  /**
@@ -202,6 +213,7 @@ export declare class Pom extends Component {
202
213
  private readonly properties;
203
214
  private readonly repositories;
204
215
  private readonly pluginRepositories;
216
+ private readonly sortPlugins?;
205
217
  constructor(project: Project, options: PomOptions);
206
218
  /**
207
219
  * Adds a key/value property to the pom.
package/lib/java/pom.js CHANGED
@@ -13,7 +13,7 @@ const POM_XML_ATTRS = {
13
13
  "@xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance",
14
14
  };
15
15
  class UpdatePolicy {
16
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.UpdatePolicy", version: "0.104.14" };
16
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.UpdatePolicy", version: "0.104.16" };
17
17
  static ALWAYS = "always";
18
18
  static DAILY = "daily";
19
19
  static NEVER = "never";
@@ -37,7 +37,7 @@ var ChecksumPolicy;
37
37
  * details used by Maven to build the project.
38
38
  */
39
39
  class Pom extends component_1.Component {
40
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.Pom", version: "0.104.14" };
40
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.Pom", version: "0.104.16" };
41
41
  /**
42
42
  * The name of the pom file.
43
43
  */
@@ -77,6 +77,7 @@ class Pom extends component_1.Component {
77
77
  properties = {};
78
78
  repositories = [];
79
79
  pluginRepositories = [];
80
+ sortPlugins;
80
81
  constructor(project, options) {
81
82
  super(project);
82
83
  this.fileName = "pom.xml";
@@ -88,6 +89,7 @@ class Pom extends component_1.Component {
88
89
  this.description = options.description;
89
90
  this.url = options.url;
90
91
  this.parentPom = options.parentPom;
92
+ this.sortPlugins = options.sortPlugins;
91
93
  new xmlfile_1.XmlFile(project, this.fileName, { obj: () => this.synthPom() });
92
94
  }
93
95
  /**
@@ -192,6 +194,10 @@ class Pom extends component_1.Component {
192
194
  throw new Error(`unsupported dependency type: ${dep.type}`);
193
195
  }
194
196
  }
197
+ const sortPlugins = this.sortPlugins;
198
+ if (sortPlugins) {
199
+ plugins.sort((a, b) => sortPlugins.compare(`${a.groupId}/${a.artifactId}`, `${b.groupId}/${b.artifactId}`));
200
+ }
195
201
  return {
196
202
  build: { plugins: { plugin: plugins } },
197
203
  dependencies: { dependency: dependencies },
@@ -251,4 +257,4 @@ function pluginConfig(options = {}) {
251
257
  },
252
258
  };
253
259
  }
254
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9tLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2phdmEvcG9tLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSwwQ0FBc0M7QUFDdEMsNENBQXlDO0FBRXpDLGtEQUErRDtBQUUvRCwyQ0FBcUQ7QUFDckQsd0NBQXFDO0FBRXJDLE1BQU0sYUFBYSxHQUFHO0lBQ3BCLHFCQUFxQixFQUNuQiwrRUFBK0U7SUFDakYsUUFBUSxFQUFFLG1DQUFtQztJQUM3QyxZQUFZLEVBQUUsMkNBQTJDO0NBQzFELENBQUM7QUF5S0YsTUFBYSxZQUFZOztJQUN2QixNQUFNLENBQVUsTUFBTSxHQUFHLFFBQVEsQ0FBQztJQUNsQyxNQUFNLENBQVUsS0FBSyxHQUFHLE9BQU8sQ0FBQztJQUNoQyxNQUFNLENBQVUsS0FBSyxHQUFHLE9BQU8sQ0FBQztJQUVoQzs7T0FFRztJQUNILE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBZTtRQUM3QixPQUFPLFlBQVksT0FBTyxFQUFFLENBQUM7SUFDL0IsQ0FBQzs7QUFWSCxvQ0FXQztBQUVELElBQVksY0FJWDtBQUpELFdBQVksY0FBYztJQUN4QixtQ0FBaUIsQ0FBQTtJQUNqQiwrQkFBYSxDQUFBO0lBQ2IsK0JBQWEsQ0FBQTtBQUNmLENBQUMsRUFKVyxjQUFjLDhCQUFkLGNBQWMsUUFJekI7QUFFRDs7OztHQUlHO0FBQ0gsTUFBYSxHQUFJLFNBQVEscUJBQVM7O0lBQ2hDOztPQUVHO0lBQ2EsUUFBUSxDQUFTO0lBRWpDOztPQUVHO0lBQ2EsT0FBTyxDQUFTO0lBRWhDOztPQUVHO0lBQ2EsVUFBVSxDQUFTO0lBRW5DOztPQUVHO0lBQ2EsT0FBTyxDQUFTO0lBRWhDOztPQUVHO0lBQ2EsU0FBUyxDQUFTO0lBRWxDOztPQUVHO0lBQ2EsSUFBSSxDQUFVO0lBRTlCOztPQUVHO0lBQ2EsV0FBVyxDQUFVO0lBRXJDOztPQUVHO0lBQ2EsR0FBRyxDQUFVO0lBRTdCOztPQUVHO0lBQ2MsU0FBUyxDQUFhO0lB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eyByZXNvbHZlIH0gZnJvbSBcIi4uL19yZXNvbHZlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiLi4vY29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IERlcGVuZGVuY3lDb29yZGluYXRlcyB9IGZyb20gXCIuLi9kZXBlbmRlbmNpZXNcIjtcbmltcG9ydCB7IERlcGVuZGVuY2llcywgRGVwZW5kZW5jeVR5cGUgfSBmcm9tIFwiLi4vZGVwZW5kZW5jaWVzXCI7XG5pbXBvcnQgdHlwZSB7IFByb2plY3QgfSBmcm9tIFwiLi4vcHJvamVjdFwiO1xuaW1wb3J0IHsgdG9NYXZlblZlcnNpb25SYW5nZSB9IGZyb20gXCIuLi91dGlsL3NlbXZlclwiO1xuaW1wb3J0IHsgWG1sRmlsZSB9IGZyb20gXCIuLi94bWxmaWxlXCI7XG5cbmNvbnN0IFBPTV9YTUxfQVRUUlMgPSB7XG4gIFwiQHhzaTpzY2hlbWFMb2NhdGlvblwiOlxuICAgIFwiaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2RcIixcbiAgXCJAeG1sbnNcIjogXCJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjBcIixcbiAgXCJAeG1sbnM6eHNpXCI6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2VcIixcbn07XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYFBvbWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9tT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGlzIGlzIGdlbmVyYWxseSB1bmlxdWUgYW1vbmdzdCBhbiBvcmdhbml6YXRpb24gb3IgYSBwcm9qZWN0LiBGb3IgZXhhbXBsZSxcbiAgICogYWxsIGNvcmUgTWF2ZW4gYXJ0aWZhY3RzIGRvICh3ZWxsLCBzaG91bGQpIGxpdmUgdW5kZXIgdGhlIGdyb3VwSWRcbiAgICogb3JnLmFwYWNoZS5tYXZlbi4gR3JvdXAgSUQncyBkbyBub3QgbmVjZXNzYXJpbHkgdXNlIHRoZSBkb3Qgbm90YXRpb24sIGZvclxuICAgKiBleGFtcGxlLCB0aGUganVuaXQgcHJvamVjdC4gTm90ZSB0aGF0IHRoZSBkb3Qtbm90YXRlZCBncm91cElkIGRvZXMgbm90IGhhdmVcbiAgICogdG8gY29ycmVzcG9uZCB0byB0aGUgcGFja2FnZSBzdHJ1Y3R1cmUgdGhhdCB0aGUgcHJvamVjdCBjb250YWlucy4gSXQgaXMsXG4gICAqIGhvd2V2ZXIsIGEgZ29vZCBwcmFjdGljZSB0byBmb2xsb3cuIFdoZW4gc3RvcmVkIHdpdGhpbiBhIHJlcG9zaXRvcnksIHRoZVxuICAgKiBncm91cCBhY3RzIG11Y2ggbGlrZSB0aGUgSmF2YSBwYWNrYWdpbmcgc3RydWN0dXJlIGRvZXMgaW4gYW4gb3BlcmF0aW5nXG4gICAqIHN5c3RlbS4gVGhlIGRvdHMgYXJlIHJlcGxhY2VkIGJ5IE9TIHNwZWNpZmljIGRpcmVjdG9yeSBzZXBhcmF0b3JzIChzdWNoIGFzXG4gICAqICcvJyBpbiBVbml4KSB3aGljaCBiZWNvbWVzIGEgcmVsYXRpdmUgZGlyZWN0b3J5IHN0cnVjdHVyZSBmcm9tIHRoZSBiYXNlXG4gICAqIHJlcG9zaXRvcnkuIEluIHRoZSBleGFtcGxlIGdpdmVuLCB0aGUgb3JnLmNvZGVoYXVzLm1vam8gZ3JvdXAgbGl2ZXMgd2l0aGluXG4gICAqIHRoZSBkaXJlY3RvcnkgJE0yX1JFUE8vb3JnL2NvZGVoYXVzL21vam8uXG4gICAqIEBkZWZhdWx0IFwib3JnLmFjbWVcIlxuICAgKiBAZmVhdHVyZWRcbiAgICovXG4gIHJlYWRvbmx5IGdyb3VwSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGFydGlmYWN0SWQgaXMgZ2VuZXJhbGx5IHRoZSBuYW1lIHRoYXQgdGhlIHByb2plY3QgaXMga25vd24gYnkuIEFsdGhvdWdoXG4gICAqIHRoZSBncm91cElkIGlzIGltcG9ydGFudCwgcGVvcGxlIHdpdGhpbiB0aGUgZ3JvdXAgd2lsbCByYXJlbHkgbWVudGlvbiB0aGVcbiAgICogZ3JvdXBJZCBpbiBkaXNjdXNzaW9uICh0aGV5IGFyZSBvZnRlbiBhbGwgYmUgdGhlIHNhbWUgSUQsIHN1Y2ggYXMgdGhlXG4gICAqIE1vam9IYXVzIHByb2plY3QgZ3JvdXBJZDogb3JnLmNvZGVoYXVzLm1vam8pLiBJdCwgYWxvbmcgd2l0aCB0aGUgZ3JvdXBJZCxcbiAgICogY3JlYXRlcyBhIGtleSB0aGF0IHNlcGFyYXRlcyB0aGlzIHByb2plY3QgZnJvbSBldmVyeSBvdGhlciBwcm9qZWN0IGluIHRoZVxuICAgKiB3b3JsZCAoYXQgbGVhc3QsIGl0IHNob3VsZCA6KSApLiBBbG9uZyB3aXRoIHRoZSBncm91cElkLCB0aGUgYXJ0aWZhY3RJZFxuICAgKiBmdWxseSBkZWZpbmVzIHRoZSBhcnRpZmFjdCdzIGxpdmluZyBxdWFydGVycyB3aXRoaW4gdGhlIHJlcG9zaXRvcnkuIEluIHRoZVxuICAgKiBjYXNlIG9mIHRoZSBhYm92ZSBwcm9qZWN0LCBteS1wcm9qZWN0IGxpdmVzIGluXG4gICAqICRNMl9SRVBPL29yZy9jb2RlaGF1cy9tb2pvL215LXByb2plY3QuXG4gICAqIEBkZWZhdWx0IFwibXktYXBwXCJcbiAgICogQGZlYXR1cmVkXG4gICAqL1xuICByZWFkb25seSBhcnRpZmFjdElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgdGhlIGxhc3QgcGllY2Ugb2YgdGhlIG5hbWluZyBwdXp6bGUuIGdyb3VwSWQ6YXJ0aWZhY3RJZCBkZW5vdGVzIGFcbiAgICogc2luZ2xlIHByb2plY3QgYnV0IHRoZXkgY2Fubm90IGRlbGluZWF0ZSB3aGljaCBpbmNhcm5hdGlvbiBvZiB0aGF0IHByb2plY3RcbiAgICogd2UgYXJlIHRhbGtpbmcgYWJvdXQuIERvIHdlIHdhbnQgdGhlIGp1bml0Omp1bml0IG9mIDIwMTggKHZlcnNpb24gNC4xMiksIG9yXG4gICAqIG9mIDIwMDcgKHZlcnNpb24gMy44LjIpPyBJbiBzaG9ydDogY29kZSBjaGFuZ2VzLCB0aG9zZSBjaGFuZ2VzIHNob3VsZCBiZVxuICAgKiB2ZXJzaW9uZWQsIGFuZCB0aGlzIGVsZW1lbnQga2VlcHMgdGhvc2UgdmVyc2lvbnMgaW4gbGluZS4gSXQgaXMgYWxzbyB1c2VkXG4gICAqIHdpdGhpbiBhbiBhcnRpZmFjdCdzIHJlcG9zaXRvcnkgdG8gc2VwYXJhdGUgdmVyc2lvbnMgZnJvbSBlYWNoIG90aGVyLlxuICAgKiBteS1wcm9qZWN0IHZlcnNpb24gMS4wIGZpbGVzIGxpdmUgaW4gdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmVcbiAgICogJE0yX1JFUE8vb3JnL2NvZGVoYXVzL21vam8vbXktcHJvamVjdC8xLjAuXG4gICAqIEBkZWZhdWx0IFwiMC4xLjBcIlxuICAgKiBAZmVhdHVyZWRcbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogUHJvamVjdCBwYWNrYWdpbmcgZm9ybWF0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBcImphclwiXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdpbmc/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERlc2NyaXB0aW9uIG9mIGEgcHJvamVjdCBpcyBhbHdheXMgZ29vZC4gQWx0aG91Z2ggdGhpcyBzaG91bGQgbm90IHJlcGxhY2VcbiAgICogZm9ybWFsIGRvY3VtZW50YXRpb24sIGEgcXVpY2sgY29tbWVudCB0byBhbnkgcmVhZGVycyBvZiB0aGUgUE9NIGlzIGFsd2F5c1xuICAgKiBoZWxwZnVsLlxuICAgKlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICogQGZlYXR1cmVkXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFVSTCwgbGlrZSB0aGUgbmFtZSwgaXMgbm90IHJlcXVpcmVkLiBUaGlzIGlzIGEgbmljZSBnZXN0dXJlIGZvclxuICAgKiBwcm9qZWN0cyB1c2VycywgaG93ZXZlciwgc28gdGhhdCB0aGV5IGtub3cgd2hlcmUgdGhlIHByb2plY3QgbGl2ZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKiBAZmVhdHVyZWRcbiAgICovXG4gIHJlYWRvbmx5IHVybD86IHN0cmluZztcblxuICAvKipcbiAgICogQSBQYXJlbnQgUG9tIGNhbiBiZSB1c2VkIHRvIGhhdmUgYSBjaGlsZCBwcm9qZWN0IGluaGVyaXRcbiAgICogcHJvcGVydGllcy9wbHVnaW5zL2VjdCBpbiBvcmRlciB0byByZWR1Y2UgZHVwbGljYXRpb24gYW5kIGtlZXAgc3RhbmRhcmRzXG4gICAqIGFjcm9zcyBhIGxhcmdlIGFtb3VudCBvZiByZXBvc1xuICAgKlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICogQGZlYXR1cmVkXG4gICAqL1xuICByZWFkb25seSBwYXJlbnRQb20/OiBQYXJlbnRQb207XG59XG5cbi8qXG4gKiBSZXByZXNlbnRzIGEgUGFyZW50IE1hdmVuIFBvbS4gQSBwYXJlbnQgbWF2ZW4gcG9tIGNhbiBwcm92aWRlIHRoaW5ncyBsaWtlIGRlcGVuZGVuY2llcyBhbmQgcGx1Z2luIGxpc3RzL2NvbmZpZ3VyYXRpb24uXG4gKiBUaGF0IGNhbiBiZSBoZWxwZnVsIGZvciB0cnlpbmcgdG8gY29udHJvbCBjb25maWd1cmF0aW9uIGFjcm9zcyBhIGxhcmdlIHN3YXRoIG9mIHByb2dyYW1zIGVzcGVjaWFsbHkgZm9yIHRoaW5ncyBsaWtlXG4gKiBlbnRlcnByaXNlIGNvbmZpZ3VyYXRpb25zIG9mIHBsdWdpbnMuXG4gKiBAc2VlIGh0dHBzOi8vbWF2ZW4uYXBhY2hlLm9yZy9ndWlkZXMvaW50cm9kdWN0aW9uL2ludHJvZHVjdGlvbi10by10aGUtcG9tLmh0bWwjcHJvamVjdC1pbmhlcml0YW5jZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBhcmVudFBvbSB7XG4gIC8qKlxuICAgKiBQYXJlbnQgUG9tIEdyb3VwIElEXG4gICAqL1xuICByZWFkb25seSBncm91cElkPzogc3RyaW5nO1xuICAvKipcbiAgICogUGFyZW50IFBvbSBBcnRpZmFjdCBJRFxuICAgKi9cbiAgcmVhZG9ubHkgYXJ0aWZhY3RJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFBhcmVudCBQb20gVmVyc2lvblxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbj86IHN0cmluZztcbiAgLyoqXG4gICAqIFBhcmVudCBQb20gUmVsYXRpdmUgcGF0aCBmcm9tIHRoZSBjdXJyZW50IHBvbVxuICAgKi9cbiAgcmVhZG9ubHkgcmVsYXRpdmVQYXRoPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYSBNYXZlbiByZXBvc2l0b3J5XG4gKiBAc2VlIGh0dHBzOi8vbWF2ZW4uYXBhY2hlLm9yZy9ndWlkZXMvaW50cm9kdWN0aW9uL2ludHJvZHVjdGlvbi10by1yZXBvc2l0b3JpZXMuaHRtbFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hdmVuUmVwb3NpdG9yeSB7XG4gIC8qKlxuICAgKiBUaGUgaWRlbnRpZmllciBmb3IgdGhlIHJlcG9zaXRvcnlcbiAgICovXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgdXJsIG9mIHRoZSByZXBvc2l0b3J5XG4gICAqL1xuICByZWFkb25seSB1cmw6IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSByZXBvc2l0b3J5XG4gICAqL1xuICByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIGxheW91dCBvZiB0aGUgcmVwb3NpdG9yeVxuICAgKi9cbiAgcmVhZG9ubHkgbGF5b3V0Pzogc3RyaW5nO1xuICAvKipcbiAgICogUmVwb3NpdG9yeSBQb2xpY3kgZm9yIFNuYXBzaG90c1xuICAgKi9cbiAgcmVhZG9ubHkgc25hcHNob3RzPzogTWF2ZW5SZXBvc2l0b3J5UG9saWN5O1xuICAvKipcbiAgICogUmVwb3NpdG9yeSBQb2xpY3kgZm9yIFJlbGVhc2VzXG4gICAqL1xuICByZWFkb25seSByZWxlYXNlcz86IE1hdmVuUmVwb3NpdG9yeVBvbGljeTtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgTWF2ZW4gUmVwb3NpdG9yeSBQb2xpY3lcbiAqIEBzZWUgaHR0cHM6Ly9tYXZlbi5hcGFjaGUub3JnL3NldHRpbmdzLmh0bWwjcmVwb3NpdG9yaWVzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWF2ZW5SZXBvc2l0b3J5UG9saWN5IHtcbiAgLypcbiAgICogV2hldGhlciB0aGlzIHJlcG9zaXRvcnkgaXMgZW5hYmxlZCAgZm9yIHRoZSByZXNwZWN0aXZlIHR5cGUgKGByZWxlYXNlc2Agb3IgYHNuYXBzaG90c2ApLlxuICAgKi9cbiAgcmVhZG9ubHkgZW5hYmxlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFVwZGF0ZSBQb2xpY3lcbiAgICogVGhpcyBlbGVtZW50IHNwZWNpZmllcyBob3cgb2Z0ZW4gdXBkYXRlcyBzaG91bGQgYXR0ZW1wdCB0byBvY2N1ci4gTWF2ZW4gd2lsbCBjb21wYXJlIHRoZSBsb2NhbCBQT00ncyB0aW1lc3RhbXAgKHN0b3JlZCBpbiBhIHJlcG9zaXRvcnkncyBtYXZlbi1tZXRhZGF0YSBmaWxlKSB0byB0aGUgcmVtb3RlLlxuICAgKiBAZGVmYXVsdCBVcGRhdGVQb2xpY3kuREFJTFlcbiAgICovXG4gIHJlYWRvbmx5IHVwZGF0ZVBvbGljeT86IFVwZGF0ZVBvbGljeTtcblxuICAvKipcbiAgICogQ2hlY2tzdW0gUG9saWN5XG4gICAqIFdoZW4gTWF2ZW4gZGVwbG95cyBmaWxlcyB0byB0aGUgcmVwb3NpdG9yeSwgaXQgYWxzbyBkZXBsb3lzIGNvcnJlc3BvbmRpbmcgY2hlY2tzdW0gZmlsZXMuXG4gICAqL1xuICByZWFkb25seSBjaGVja3N1bVBvbGljeT86IENoZWNrc3VtUG9saWN5O1xufVxuXG5leHBvcnQgY2xhc3MgVXBkYXRlUG9saWN5IHtcbiAgc3RhdGljIHJlYWRvbmx5IEFMV0FZUyA9IFwiYWx3YXlzXCI7XG4gIHN0YXRpYyByZWFkb25seSBEQUlMWSA9IFwiZGFpbHlcIjtcbiAgc3RhdGljIHJlYWRvbmx5IE5FVkVSID0gXCJuZXZlclwiO1xuXG4gIC8qKlxuICAgKiBVcGRhdGVzIGF0IGFuIGludGVydmFsIG9mIFggbWludXRlcy5cbiAgICovXG4gIHN0YXRpYyBpbnRlcnZhbChtaW51dGVzOiBudW1iZXIpIHtcbiAgICByZXR1cm4gYGludGVydmFsOiR7bWludXRlc31gO1xuICB9XG59XG5cbmV4cG9ydCBlbnVtIENoZWNrc3VtUG9saWN5IHtcbiAgSUdOT1JFID0gXCJpZ25vcmVcIixcbiAgRkFJTCA9IFwiZmFpbFwiLFxuICBXQVJOID0gXCJ3YXJuXCIsXG59XG5cbi8qKlxuICogQSBQcm9qZWN0IE9iamVjdCBNb2RlbCBvciBQT00gaXMgdGhlIGZ1bmRhbWVudGFsIHVuaXQgb2Ygd29yayBpbiBNYXZlbi4gSXQgaXNcbiAqIGFuIFhNTCBmaWxlIHRoYXQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHByb2plY3QgYW5kIGNvbmZpZ3VyYXRpb25cbiAqIGRldGFpbHMgdXNlZCBieSBNYXZlbiB0byBidWlsZCB0aGUgcHJvamVjdC5cbiAqL1xuZXhwb3J0IGNsYXNzIFBvbSBleHRlbmRzIENvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcG9tIGZpbGUuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZmlsZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogTWF2ZW4gZ3JvdXAgSUQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZ3JvdXBJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNYXZlbiBhcnRpZmFjdCBJRC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBhcnRpZmFjdElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByb2plY3QgdmVyc2lvbi5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1hdmVuIHBhY2thZ2luZyBmb3JtYXQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgcGFja2FnaW5nOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByb2plY3QgZGlzcGxheSBuYW1lLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByb2plY3QgZGVzY3JpcHRpb24uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFByb2plY3QgVVJMLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHVybD86IHN0cmluZztcblxuICAvKlxuICAgKiBQcm9qZWN0IFBhcmVudCBQT01cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgcGFyZW50UG9tPzogUGFyZW50UG9tO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvcGVydGllczogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVwb3NpdG9yaWVzOiBNYXZlblJlcG9zaXRvcnlbXSA9IFtdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcGx1Z2luUmVwb3NpdG9yaWVzOiBNYXZlblJlcG9zaXRvcnlbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKHByb2plY3Q6IFByb2plY3QsIG9wdGlvbnM6IFBvbU9wdGlvbnMpIHtcbiAgICBzdXBlcihwcm9qZWN0KTtcblxuICAgIHRoaXMuZmlsZU5hbWUgPSBcInBvbS54bWxcIjtcbiAgICB0aGlzLmdyb3VwSWQgPSBvcHRpb25zLmdyb3VwSWQ7XG4gICAgdGhpcy5hcnRpZmFjdElkID0gb3B0aW9ucy5hcnRpZmFjdElkO1xuICAgIHRoaXMudmVyc2lvbiA9IG9wdGlvbnMudmVyc2lvbjtcbiAgICB0aGlzLnBhY2thZ2luZyA9IG9wdGlvbnMucGFja2FnaW5nID8/IFwiamFyXCI7XG4gICAgdGhpcy5uYW1lID0gcHJvamVjdC5uYW1lO1xuICAgIHRoaXMuZGVzY3JpcHRpb24gPSBvcHRpb25zLmRlc2NyaXB0aW9uO1xuICAgIHRoaXMudXJsID0gb3B0aW9ucy51cmw7XG4gICAgdGhpcy5wYXJlbnRQb20gPSBvcHRpb25zLnBhcmVudFBvbTtcblxuICAgIG5ldyBYbWxGaWxlKHByb2plY3QsIHRoaXMuZmlsZU5hbWUsIHsgb2JqOiAoKSA9PiB0aGlzLnN5bnRoUG9tKCkgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGtleS92YWx1ZSBwcm9wZXJ0eSB0byB0aGUgcG9tLlxuICAgKiBAcGFyYW0ga2V5IHRoZSBrZXlcbiAgICogQHBhcmFtIHZhbHVlIHRoZSB2YWx1ZVxuICAgKi9cbiAgcHVibGljIGFkZFByb3BlcnR5KGtleTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgdGhpcy5wcm9wZXJ0aWVzW2tleV0gPSB2YWx1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcnVudGltZSBkZXBlbmRlbmN5LlxuICAgKlxuICAgKiBAcGFyYW0gc3BlYyBGb3JtYXQgYDxncm91cElkPi88YXJ0aWZhY3RJZD5APHNlbXZlcj5gXG4gICAqL1xuICBwdWJsaWMgYWRkRGVwZW5kZW5jeShzcGVjOiBzdHJpbmcpIHtcbiAgICB0aGlzLnByb2plY3QuZGVwcy5hZGREZXBlbmRlbmN5KHNwZWMsIERlcGVuZGVuY3lUeXBlLlJVTlRJTUUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSB0ZXN0IGRlcGVuZGVuY3kuXG4gICAqXG4gICAqIEBwYXJhbSBzcGVjIEZvcm1hdCBgPGdyb3VwSWQ+LzxhcnRpZmFjdElkPkA8c2VtdmVyPmBcbiAgICovXG4gIHB1YmxpYyBhZGRUZXN0RGVwZW5kZW5jeShzcGVjOiBzdHJpbmcpIHtcbiAgICB0aGlzLnByb2plY3QuZGVwcy5hZGREZXBlbmRlbmN5KHNwZWMsIERlcGVuZGVuY3lUeXBlLlRFU1QpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBidWlsZCBwbHVnaW4gdG8gdGhlIHBvbS5cbiAgICpcbiAgICogVGhlIHBsdWcgaW4gaXMgYWxzbyBhZGRlZCBhcyBhIEJVSUxEIGRlcCB0byB0aGUgcHJvamVjdC5cbiAgICpcbiAgICogQHBhcmFtIHNwZWMgZGVwZW5kZW5jeSBzcGVjIChgZ3JvdXAvYXJ0aWZhY3RAdmVyc2lvbmApXG4gICAqIEBwYXJhbSBvcHRpb25zIHBsdWdpbiBvcHRpb25zXG4gICAqL1xuICBwdWJsaWMgYWRkUGx1Z2luKHNwZWM6IHN0cmluZywgb3B0aW9uczogUGx1Z2luT3B0aW9ucyA9IHt9KSB7XG4gICAgZm9yIChjb25zdCBkZXAgb2Ygb3B0aW9ucy5kZXBlbmRlbmNpZXMgPz8gW10pIHtcbiAgICAgIHRoaXMucHJvamVjdC5kZXBzLmFkZERlcGVuZGVuY3koZGVwLCBEZXBlbmRlbmN5VHlwZS5CVUlMRCk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnByb2plY3QuZGVwcy5hZGREZXBlbmRlbmN5KHNwZWMsIERlcGVuZGVuY3lUeXBlLkJVSUxELCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgcmVwb3NpdG9yeSB0byB0aGUgcG9tXG4gICAqIEBwYXJhbSByZXBvc2l0b3J5IHRoZSByZXBvc2l0b3J5IHRvIGFkZFxuICAgKi9cbiAgcHVibGljIGFkZFJlcG9zaXRvcnkocmVwb3NpdG9yeTogTWF2ZW5SZXBvc2l0b3J5KSB7XG4gICAgdGhpcy5yZXBvc2l0b3JpZXMucHVzaChyZXBvc2l0b3J5KTtcbiAgfVxuXG4gIC8qXG4gICAqIEFkZHMgYSByZXBvc2l0b3J5IGZvciBwbHVnaW5zIHRvIHRoZSBwb21cbiAgICogQHBhcmFtIHJlcG9zaXRvcnkgdGhlIHJlcG9zaXRvcnkgdG8gYWRkXG4gICAqL1xuICBwdWJsaWMgYWRkUGx1Z2luUmVwb3NpdG9yeShyZXBvc2l0b3J5OiBNYXZlblJlcG9zaXRvcnkpIHtcbiAgICB0aGlzLnBsdWdpblJlcG9zaXRvcmllcy5wdXNoKHJlcG9zaXRvcnkpO1xuICB9XG5cbiAgcHJpdmF0ZSBzeW50aFBvbSgpIHtcbiAgICByZXR1cm4gcmVzb2x2ZShcbiAgICAgIHtcbiAgICAgICAgcHJvamVjdDoge1xuICAgICAgICAgIC4uLlBPTV9YTUxfQVRUUlMsXG4gICAgICAgICAgbW9kZWxWZXJzaW9uOiBcIjQuMC4wXCIsXG4gICAgICAgICAgZ3JvdXBJZDogdGhpcy5ncm91cElkLFxuICAgICAgICAgIGFydGlmYWN0SWQ6IHRoaXMuYXJ0aWZhY3RJZCxcbiAgICAgICAgICB2ZXJzaW9uOiB0aGlzLnZlcnNpb24sXG4gICAgICAgICAgcGFja2FnaW5nOiB0aGlzLnBhY2thZ2luZyxcbiAgICAgICAgICBuYW1lOiB0aGlzLm5hbWUsXG4gICAgICAgICAgZGVzY3JpcHRpb246IHRoaXMuZGVzY3JpcHRpb24sXG4gICAgICAgICAgdXJsOiB0aGlzLnVybCxcbiAgICAgICAgICBwcm9wZXJ0aWVzOiB0aGlzLnByb3BlcnRpZXMsXG4gICAgICAgICAgcGFyZW50OiB0aGlzLnBhcmVudFBvbSxcbiAgICAgICAgICAuLi50aGlzLnN5bnRoUmVwb3NpdG9yaWVzKCksXG4gICAgICAgICAgLi4udGhpcy5zeW50aERlcGVuZGVuY2llcygpLFxuICAgICAgICAgIC4uLnRoaXMuc3ludGhQbHVnaW5SZXBvc2l0b3JpZXMoKSxcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgICB7IG9taXRFbXB0eTogdHJ1ZSB9LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIHN5bnRoRGVwZW5kZW5jaWVzKCkge1xuICAgIGNvbnN0IGRlcHMgPSB0aGlzLnByb2plY3QuZGVwcy5hbGw7XG4gICAgaWYgKGRlcHMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgZGVwZW5kZW5jaWVzOiBhbnlbXSA9IFtdO1xuICAgIGNvbnN0IHBsdWdpbnM6IGFueVtdID0gW107XG5cbiAgICBmb3IgKGNvbnN0IGRlcCBvZiBkZXBzKSB7XG4gICAgICBzd2l0Y2ggKGRlcC50eXBlKSB7XG4gICAgICAgIGNhc2UgRGVwZW5kZW5jeVR5cGUuUEVFUjpcbiAgICAgICAgY2FzZSBEZXBlbmRlbmN5VHlwZS5SVU5USU1FOlxuICAgICAgICAgIGRlcGVuZGVuY2llcy5wdXNoKG1hdmVuQ29vcmRzKGRlcCkpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgRGVwZW5kZW5jeVR5cGUuVEVTVDpcbiAgICAgICAgICBkZXBlbmRlbmNpZXMucHVzaCh7XG4gICAgICAgICAgICAuLi5tYXZlbkNvb3JkcyhkZXApLFxuICAgICAgICAgICAgc2NvcGU6IFwidGVzdFwiLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIC8vIGJ1aWxkIG1hcHMgdG8gcGx1Z2luc1xuICAgICAgICBjYXNlIERlcGVuZGVuY3lUeXBlLkJVSUxEOlxuICAgICAgICAgIHBsdWdpbnMucHVzaCh7XG4gICAgICAgICAgICAuLi5tYXZlbkNvb3JkcyhkZXApLFxuICAgICAgICAgICAgLi4ucGx1Z2luQ29uZmlnKGRlcC5tZXRhZGF0YSBhcyBQbHVnaW5PcHRpb25zKSxcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBicmVhaztcblxuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgdW5zdXBwb3J0ZWQgZGVwZW5kZW5jeSB0eXBlOiAke2RlcC50eXBlfWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBidWlsZDogeyBwbHVnaW5zOiB7IHBsdWdpbjogcGx1Z2lucyB9IH0sXG4gICAgICBkZXBlbmRlbmNpZXM6IHsgZGVwZW5kZW5jeTogZGVwZW5kZW5jaWVzIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3ludGhSZXBvc2l0b3JpZXMoKSB7XG4gICAgaWYgKHRoaXMucmVwb3NpdG9yaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICByZXBvc2l0b3JpZXM6IHsgcmVwb3NpdG9yeTogdGhpcy5yZXBvc2l0b3JpZXMgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzeW50aFBsdWdpblJlcG9zaXRvcmllcygpIHtcbiAgICBpZiAodGhpcy5wbHVnaW5SZXBvc2l0b3JpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBsdWdpblJlcG9zaXRvcmllczogeyBwbHVnaW5SZXBvc2l0b3J5OiB0aGlzLnBsdWdpblJlcG9zaXRvcmllcyB9LFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBNYXZlbiBwbHVnaW5zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbk9wdGlvbnMge1xuICAvKipcbiAgICogUGx1Z2luIGtleS92YWx1ZSBjb25maWd1cmF0aW9uXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICByZWFkb25seSBjb25maWd1cmF0aW9uPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcblxuICAvKipcbiAgICogUGx1Z2luIGV4ZWN1dGlvbnNcbiAgICogQGRlZmF1bHQgW11cbiAgICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvbnM/OiBQbHVnaW5FeGVjdXRpb25bXTtcblxuICAvKipcbiAgICogWW91IGNvdWxkIGNvbmZpZ3VyZSB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGUgcGx1Z2luLlxuICAgKlxuICAgKiBEZXBlbmRlbmNpZXMgYXJlIGluIGA8Z3JvdXBJZD4vPGFydGlmYWN0SWQ+QDxzZW12ZXI+YCBmb3JtYXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqL1xuICByZWFkb25seSBkZXBlbmRlbmNpZXM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBQbHVnaW4gZXhlY3V0aW9uIGRlZmluaXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luRXhlY3V0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBJRC5cbiAgICovXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoaWNoIE1hdmVuIGdvYWxzIHRoaXMgcGx1Z2luIHNob3VsZCBiZSBhc3NvY2lhdGVkIHdpdGguXG4gICAqL1xuICByZWFkb25seSBnb2Fsczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBwaGFzZSBpbiB3aGljaCB0aGUgcGx1Z2luIHNob3VsZCBleGVjdXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGhhc2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGlvbiBrZXkvdmFsdWUgY29uZmlndXJhdGlvblxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgcmVhZG9ubHkgY29uZmlndXJhdGlvbj86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG59XG5cbi8qKlxuICogUGFyc2VzIG1hdmVuIGdyb3VwSWQgYW5kIGFydGlmYWN0SWQgZnJvbSBhIGRlcGVuZGVuY3kgbmFtZS5cbiAqXG4gKiAgICAgbmFtZSAgICA8PT4gPGdyb3VwSWQ+LzxhcnRpZmFjdElkPlxuICogICAgIHZlcnNpb24gPD0+IDx2ZXJzaW9uPlxuICovXG5mdW5jdGlvbiBtYXZlbkNvb3JkcyhkZXA6IERlcGVuZGVuY3lDb29yZGluYXRlcykge1xuICBjb25zdCBuYW1lID0gZGVwLm5hbWU7XG4gIGNvbnN0IHBhcnRzID0gbmFtZS5zcGxpdChcIi9cIik7XG4gIGlmIChwYXJ0cy5sZW5ndGggIT09IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgaW52YWxpZCBtYXZlbiBjb29yZGluYXRlcyBpbiBkZXBlbmRlbmN5IG5hbWVkIFwiJHtuYW1lfVwiLiBmb3JtYXQgaXMgXCI8Z3JvdXBJZD4vPGFydGlmYWN0SWQ+XCIuIEZvciBleGFtcGxlIFwib3JnLmp1bml0Lmp1cGl0ZXIvanVuaXQtanVwaXRlci1lbmdpbmVcImAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZ3JvdXBJZDogcGFydHNbMF0sXG4gICAgYXJ0aWZhY3RJZDogcGFydHNbMV0sXG4gICAgdmVyc2lvbjogZGVwLnZlcnNpb24gPyB0b01hdmVuVmVyc2lvblJhbmdlKGRlcC52ZXJzaW9uKSA6IHVuZGVmaW5lZCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcGx1Z2luQ29uZmlnKG9wdGlvbnM6IFBsdWdpbk9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4ge1xuICAgIGNvbmZpZ3VyYXRpb246IG9wdGlvbnMuY29uZmlndXJhdGlvbixcbiAgICBkZXBlbmRlbmNpZXM6XG4gICAgICBvcHRpb25zLmRlcGVuZGVuY2llcyAmJiBvcHRpb25zLmRlcGVuZGVuY2llcy5sZW5ndGggPiAwXG4gICAgICAgID8ge1xuICAgICAgICAgICAgZGVwZW5kZW5jeTogb3B0aW9ucy5kZXBlbmRlbmNpZXM/Lm1hcCgoZCkgPT5cbiAgICAgICAgICAgICAgbWF2ZW5Db29yZHMoRGVwZW5kZW5jaWVzLnBhcnNlRGVwZW5kZW5jeShkKSksXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgZXhlY3V0aW9uczoge1xuICAgICAgZXhlY3V0aW9uOiBvcHRpb25zLmV4ZWN1dGlvbnM/Lm1hcCgoZSkgPT4gKHtcbiAgICAgICAgaWQ6IGUuaWQsXG4gICAgICAgIGdvYWxzOiBlLmdvYWxzLm1hcCgoZ29hbCkgPT4gKHsgZ29hbCB9KSksXG4gICAgICAgIHBoYXNlOiBlLnBoYXNlLFxuICAgICAgICBjb25maWd1cmF0aW9uOiBlLmNvbmZpZ3VyYXRpb24sXG4gICAgICB9KSksXG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
260
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9tLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2phdmEvcG9tLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSwwQ0FBc0M7QUFFdEMsNENBQXlDO0FBRXpDLGtEQUErRDtBQUUvRCwyQ0FBcUQ7QUFDckQsd0NBQXFDO0FBRXJDLE1BQU0sYUFBYSxHQUFHO0lBQ3BCLHFCQUFxQixFQUNuQiwrRUFBK0U7SUFDakYsUUFBUSxFQUFFLG1DQUFtQztJQUM3QyxZQUFZLEVBQUUsMkNBQTJDO0NBQzFELENBQUM7QUFvTEYsTUFBYSxZQUFZOztJQUN2QixNQUFNLENBQVUsTUFBTSxHQUFHLFFBQVEsQ0FBQztJQUNsQyxNQUFNLENBQVUsS0FBSyxHQUFHLE9BQU8sQ0FBQztJQUNoQyxNQUFNLENBQVUsS0FBSyxHQUFHLE9BQU8sQ0FBQztJQUVoQzs7T0FFRztJQUNILE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBZTtRQUM3QixPQUFPLFlBQVksT0FBTyxFQUFFLENBQUM7SUFDL0IsQ0FBQzs7QUFWSCxvQ0FXQztBQUVELElBQVksY0FJWDtBQUpELFdBQVksY0FBYztJQUN4QixtQ0FBaUIsQ0FBQTtJQUNqQiwrQkFBYSxDQUFBO0lBQ2IsK0JBQWEsQ0FBQTtBQUNmLENBQUMsRUFKVyxjQUFjLDhCQUFkLGNBQWMsUUFJekI7QUFFRDs7OztHQUlHO0FBQ0gsTUFBYSxHQUFJLFNBQVEscUJBQVM7O0lBQ2hDOztPQUVHO0lBQ2EsUUFBUSxDQUFTO0lBRWpDOztPQUVHO0lBQ2EsT0FBTyxDQUFTO0lBRWhDOztPQUVHO0lBQ2EsVUFBVSxDQUFTO0lBRW5DOztPQUVHO0lBQ2EsT0FBTyxDQUFTO0lBRWhDOztPQUVHO0lBQ2EsU0FBUyxDQUFTO0lBRWxDOztPQUVHO0lBQ2EsSUFBSSxDQUFVO0lBRTlCOztPQUVHO0lBQ2EsV0FBVyxDQUFVO0lBRXJDOztPQUVHO0lBQ2EsR0FBRyxDQUFVO0lBRTdCOztPQUVHO0lBQ2MsU0FBUyxDQUFhO0lB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U0FBUyxFQUFFLE9BQU8sQ0FBQyxVQUFVLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUN6QyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUU7Z0JBQ1IsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDeEMsS0FBSyxFQUFFLENBQUMsQ0FBQyxLQUFLO2dCQUNkLGFBQWEsRUFBRSxDQUFDLENBQUMsYUFBYTthQUMvQixDQUFDLENBQUM7U0FDSjtLQUNGLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gXCIuLi9fcmVzb2x2ZVwiO1xuaW1wb3J0IHR5cGUgeyBJQ29tcGFyZVN0cmluZyB9IGZyb20gXCIuLi9jb21wYXJlXCI7XG5pbXBvcnQgeyBDb21wb25lbnQgfSBmcm9tIFwiLi4vY29tcG9uZW50XCI7XG5pbXBvcnQgdHlwZSB7IERlcGVuZGVuY3lDb29yZGluYXRlcyB9IGZyb20gXCIuLi9kZXBlbmRlbmNpZXNcIjtcbmltcG9ydCB7IERlcGVuZGVuY2llcywgRGVwZW5kZW5jeVR5cGUgfSBmcm9tIFwiLi4vZGVwZW5kZW5jaWVzXCI7XG5pbXBvcnQgdHlwZSB7IFByb2plY3QgfSBmcm9tIFwiLi4vcHJvamVjdFwiO1xuaW1wb3J0IHsgdG9NYXZlblZlcnNpb25SYW5nZSB9IGZyb20gXCIuLi91dGlsL3NlbXZlclwiO1xuaW1wb3J0IHsgWG1sRmlsZSB9IGZyb20gXCIuLi94bWxmaWxlXCI7XG5cbmNvbnN0IFBPTV9YTUxfQVRUUlMgPSB7XG4gIFwiQHhzaTpzY2hlbWFMb2NhdGlvblwiOlxuICAgIFwiaHR0cDovL21hdmVuLmFwYWNoZS5vcmcvUE9NLzQuMC4wIGh0dHA6Ly9tYXZlbi5hcGFjaGUub3JnL3hzZC9tYXZlbi00LjAuMC54c2RcIixcbiAgXCJAeG1sbnNcIjogXCJodHRwOi8vbWF2ZW4uYXBhY2hlLm9yZy9QT00vNC4wLjBcIixcbiAgXCJAeG1sbnM6eHNpXCI6IFwiaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2VcIixcbn07XG5cbi8qKlxuICogT3B0aW9ucyBmb3IgYFBvbWAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUG9tT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGlzIGlzIGdlbmVyYWxseSB1bmlxdWUgYW1vbmdzdCBhbiBvcmdhbml6YXRpb24gb3IgYSBwcm9qZWN0LiBGb3IgZXhhbXBsZSxcbiAgICogYWxsIGNvcmUgTWF2ZW4gYXJ0aWZhY3RzIGRvICh3ZWxsLCBzaG91bGQpIGxpdmUgdW5kZXIgdGhlIGdyb3VwSWRcbiAgICogb3JnLmFwYWNoZS5tYXZlbi4gR3JvdXAgSUQncyBkbyBub3QgbmVjZXNzYXJpbHkgdXNlIHRoZSBkb3Qgbm90YXRpb24sIGZvclxuICAgKiBleGFtcGxlLCB0aGUganVuaXQgcHJvamVjdC4gTm90ZSB0aGF0IHRoZSBkb3Qtbm90YXRlZCBncm91cElkIGRvZXMgbm90IGhhdmVcbiAgICogdG8gY29ycmVzcG9uZCB0byB0aGUgcGFja2FnZSBzdHJ1Y3R1cmUgdGhhdCB0aGUgcHJvamVjdCBjb250YWlucy4gSXQgaXMsXG4gICAqIGhvd2V2ZXIsIGEgZ29vZCBwcmFjdGljZSB0byBmb2xsb3cuIFdoZW4gc3RvcmVkIHdpdGhpbiBhIHJlcG9zaXRvcnksIHRoZVxuICAgKiBncm91cCBhY3RzIG11Y2ggbGlrZSB0aGUgSmF2YSBwYWNrYWdpbmcgc3RydWN0dXJlIGRvZXMgaW4gYW4gb3BlcmF0aW5nXG4gICAqIHN5c3RlbS4gVGhlIGRvdHMgYXJlIHJlcGxhY2VkIGJ5IE9TIHNwZWNpZmljIGRpcmVjdG9yeSBzZXBhcmF0b3JzIChzdWNoIGFzXG4gICAqICcvJyBpbiBVbml4KSB3aGljaCBiZWNvbWVzIGEgcmVsYXRpdmUgZGlyZWN0b3J5IHN0cnVjdHVyZSBmcm9tIHRoZSBiYXNlXG4gICAqIHJlcG9zaXRvcnkuIEluIHRoZSBleGFtcGxlIGdpdmVuLCB0aGUgb3JnLmNvZGVoYXVzLm1vam8gZ3JvdXAgbGl2ZXMgd2l0aGluXG4gICAqIHRoZSBkaXJlY3RvcnkgJE0yX1JFUE8vb3JnL2NvZGVoYXVzL21vam8uXG4gICAqIEBkZWZhdWx0IFwib3JnLmFjbWVcIlxuICAgKiBAZmVhdHVyZWRcbiAgICovXG4gIHJlYWRvbmx5IGdyb3VwSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGFydGlmYWN0SWQgaXMgZ2VuZXJhbGx5IHRoZSBuYW1lIHRoYXQgdGhlIHByb2plY3QgaXMga25vd24gYnkuIEFsdGhvdWdoXG4gICAqIHRoZSBncm91cElkIGlzIGltcG9ydGFudCwgcGVvcGxlIHdpdGhpbiB0aGUgZ3JvdXAgd2lsbCByYXJlbHkgbWVudGlvbiB0aGVcbiAgICogZ3JvdXBJZCBpbiBkaXNjdXNzaW9uICh0aGV5IGFyZSBvZnRlbiBhbGwgYmUgdGhlIHNhbWUgSUQsIHN1Y2ggYXMgdGhlXG4gICAqIE1vam9IYXVzIHByb2plY3QgZ3JvdXBJZDogb3JnLmNvZGVoYXVzLm1vam8pLiBJdCwgYWxvbmcgd2l0aCB0aGUgZ3JvdXBJZCxcbiAgICogY3JlYXRlcyBhIGtleSB0aGF0IHNlcGFyYXRlcyB0aGlzIHByb2plY3QgZnJvbSBldmVyeSBvdGhlciBwcm9qZWN0IGluIHRoZVxuICAgKiB3b3JsZCAoYXQgbGVhc3QsIGl0IHNob3VsZCA6KSApLiBBbG9uZyB3aXRoIHRoZSBncm91cElkLCB0aGUgYXJ0aWZhY3RJZFxuICAgKiBmdWxseSBkZWZpbmVzIHRoZSBhcnRpZmFjdCdzIGxpdmluZyBxdWFydGVycyB3aXRoaW4gdGhlIHJlcG9zaXRvcnkuIEluIHRoZVxuICAgKiBjYXNlIG9mIHRoZSBhYm92ZSBwcm9qZWN0LCBteS1wcm9qZWN0IGxpdmVzIGluXG4gICAqICRNMl9SRVBPL29yZy9jb2RlaGF1cy9tb2pvL215LXByb2plY3QuXG4gICAqIEBkZWZhdWx0IFwibXktYXBwXCJcbiAgICogQGZlYXR1cmVkXG4gICAqL1xuICByZWFkb25seSBhcnRpZmFjdElkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoaXMgaXMgdGhlIGxhc3QgcGllY2Ugb2YgdGhlIG5hbWluZyBwdXp6bGUuIGdyb3VwSWQ6YXJ0aWZhY3RJZCBkZW5vdGVzIGFcbiAgICogc2luZ2xlIHByb2plY3QgYnV0IHRoZXkgY2Fubm90IGRlbGluZWF0ZSB3aGljaCBpbmNhcm5hdGlvbiBvZiB0aGF0IHByb2plY3RcbiAgICogd2UgYXJlIHRhbGtpbmcgYWJvdXQuIERvIHdlIHdhbnQgdGhlIGp1bml0Omp1bml0IG9mIDIwMTggKHZlcnNpb24gNC4xMiksIG9yXG4gICAqIG9mIDIwMDcgKHZlcnNpb24gMy44LjIpPyBJbiBzaG9ydDogY29kZSBjaGFuZ2VzLCB0aG9zZSBjaGFuZ2VzIHNob3VsZCBiZVxuICAgKiB2ZXJzaW9uZWQsIGFuZCB0aGlzIGVsZW1lbnQga2VlcHMgdGhvc2UgdmVyc2lvbnMgaW4gbGluZS4gSXQgaXMgYWxzbyB1c2VkXG4gICAqIHdpdGhpbiBhbiBhcnRpZmFjdCdzIHJlcG9zaXRvcnkgdG8gc2VwYXJhdGUgdmVyc2lvbnMgZnJvbSBlYWNoIG90aGVyLlxuICAgKiBteS1wcm9qZWN0IHZlcnNpb24gMS4wIGZpbGVzIGxpdmUgaW4gdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmVcbiAgICogJE0yX1JFUE8vb3JnL2NvZGVoYXVzL21vam8vbXktcHJvamVjdC8xLjAuXG4gICAqIEBkZWZhdWx0IFwiMC4xLjBcIlxuICAgKiBAZmVhdHVyZWRcbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogUHJvamVjdCBwYWNrYWdpbmcgZm9ybWF0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBcImphclwiXG4gICAqL1xuICByZWFkb25seSBwYWNrYWdpbmc/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERlc2NyaXB0aW9uIG9mIGEgcHJvamVjdCBpcyBhbHdheXMgZ29vZC4gQWx0aG91Z2ggdGhpcyBzaG91bGQgbm90IHJlcGxhY2VcbiAgICogZm9ybWFsIGRvY3VtZW50YXRpb24sIGEgcXVpY2sgY29tbWVudCB0byBhbnkgcmVhZGVycyBvZiB0aGUgUE9NIGlzIGFsd2F5c1xuICAgKiBoZWxwZnVsLlxuICAgKlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICogQGZlYXR1cmVkXG4gICAqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIFVSTCwgbGlrZSB0aGUgbmFtZSwgaXMgbm90IHJlcXVpcmVkLiBUaGlzIGlzIGEgbmljZSBnZXN0dXJlIGZvclxuICAgKiBwcm9qZWN0cyB1c2VycywgaG93ZXZlciwgc28gdGhhdCB0aGV5IGtub3cgd2hlcmUgdGhlIHByb2plY3QgbGl2ZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKiBAZmVhdHVyZWRcbiAgICovXG4gIHJlYWRvbmx5IHVybD86IHN0cmluZztcblxuICAvKipcbiAgICogQSBQYXJlbnQgUG9tIGNhbiBiZSB1c2VkIHRvIGhhdmUgYSBjaGlsZCBwcm9qZWN0IGluaGVyaXRcbiAgICogcHJvcGVydGllcy9wbHVnaW5zL2VjdCBpbiBvcmRlciB0byByZWR1Y2UgZHVwbGljYXRpb24gYW5kIGtlZXAgc3RhbmRhcmRzXG4gICAqIGFjcm9zcyBhIGxhcmdlIGFtb3VudCBvZiByZXBvc1xuICAgKlxuICAgKiBAZGVmYXVsdCB1bmRlZmluZWRcbiAgICogQGZlYXR1cmVkXG4gICAqL1xuICByZWFkb25seSBwYXJlbnRQb20/OiBQYXJlbnRQb207XG5cbiAgLyoqXG4gICAqIFNvcnRzIHRoZSB0b3AtbGV2ZWwgYnVpbGQgcGx1Z2lucyBpbiB0aGUgZ2VuZXJhdGVkIFBPTS5cbiAgICpcbiAgICogVGhlIGNvbXBhcmF0b3IgcmVjZWl2ZXMgYGdyb3VwSWQvYXJ0aWZhY3RJZGAgaWRlbnRpZmllcnMgd2l0aG91dCB2ZXJzaW9ucy5cbiAgICogUmV0dXJuaW5nIHplcm8gcHJlc2VydmVzIHRoZSBleGlzdGluZyByZWxhdGl2ZSBvcmRlci5cbiAgICogVGhpcyBkb2VzIG5vdCBjaGFuZ2UgTWF2ZW4gbGlmZWN5Y2xlIHBoYXNlIGJpbmRpbmdzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHByZXNlcnZlIHRoZSBleGlzdGluZyBkZXBlbmRlbmN5IG9yZGVyXG4gICAqL1xuICByZWFkb25seSBzb3J0UGx1Z2lucz86IElDb21wYXJlU3RyaW5nO1xufVxuXG4vKlxuICogUmVwcmVzZW50cyBhIFBhcmVudCBNYXZlbiBQb20uIEEgcGFyZW50IG1hdmVuIHBvbSBjYW4gcHJvdmlkZSB0aGluZ3MgbGlrZSBkZXBlbmRlbmNpZXMgYW5kIHBsdWdpbiBsaXN0cy9jb25maWd1cmF0aW9uLlxuICogVGhhdCBjYW4gYmUgaGVscGZ1bCBmb3IgdHJ5aW5nIHRvIGNvbnRyb2wgY29uZmlndXJhdGlvbiBhY3Jvc3MgYSBsYXJnZSBzd2F0aCBvZiBwcm9ncmFtcyBlc3BlY2lhbGx5IGZvciB0aGluZ3MgbGlrZVxuICogZW50ZXJwcmlzZSBjb25maWd1cmF0aW9ucyBvZiBwbHVnaW5zLlxuICogQHNlZSBodHRwczovL21hdmVuLmFwYWNoZS5vcmcvZ3VpZGVzL2ludHJvZHVjdGlvbi9pbnRyb2R1Y3Rpb24tdG8tdGhlLXBvbS5odG1sI3Byb2plY3QtaW5oZXJpdGFuY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQYXJlbnRQb20ge1xuICAvKipcbiAgICogUGFyZW50IFBvbSBHcm91cCBJRFxuICAgKi9cbiAgcmVhZG9ubHkgZ3JvdXBJZD86IHN0cmluZztcbiAgLyoqXG4gICAqIFBhcmVudCBQb20gQXJ0aWZhY3QgSURcbiAgICovXG4gIHJlYWRvbmx5IGFydGlmYWN0SWQ/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQYXJlbnQgUG9tIFZlcnNpb25cbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb24/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBQYXJlbnQgUG9tIFJlbGF0aXZlIHBhdGggZnJvbSB0aGUgY3VycmVudCBwb21cbiAgICovXG4gIHJlYWRvbmx5IHJlbGF0aXZlUGF0aD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgTWF2ZW4gcmVwb3NpdG9yeVxuICogQHNlZSBodHRwczovL21hdmVuLmFwYWNoZS5vcmcvZ3VpZGVzL2ludHJvZHVjdGlvbi9pbnRyb2R1Y3Rpb24tdG8tcmVwb3NpdG9yaWVzLmh0bWxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNYXZlblJlcG9zaXRvcnkge1xuICAvKipcbiAgICogVGhlIGlkZW50aWZpZXIgZm9yIHRoZSByZXBvc2l0b3J5XG4gICAqL1xuICByZWFkb25seSBpZDogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIHVybCBvZiB0aGUgcmVwb3NpdG9yeVxuICAgKi9cbiAgcmVhZG9ubHkgdXJsOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgcmVwb3NpdG9yeVxuICAgKi9cbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIFRoZSBsYXlvdXQgb2YgdGhlIHJlcG9zaXRvcnlcbiAgICovXG4gIHJlYWRvbmx5IGxheW91dD86IHN0cmluZztcbiAgLyoqXG4gICAqIFJlcG9zaXRvcnkgUG9saWN5IGZvciBTbmFwc2hvdHNcbiAgICovXG4gIHJlYWRvbmx5IHNuYXBzaG90cz86IE1hdmVuUmVwb3NpdG9yeVBvbGljeTtcbiAgLyoqXG4gICAqIFJlcG9zaXRvcnkgUG9saWN5IGZvciBSZWxlYXNlc1xuICAgKi9cbiAgcmVhZG9ubHkgcmVsZWFzZXM/OiBNYXZlblJlcG9zaXRvcnlQb2xpY3k7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIE1hdmVuIFJlcG9zaXRvcnkgUG9saWN5XG4gKiBAc2VlIGh0dHBzOi8vbWF2ZW4uYXBhY2hlLm9yZy9zZXR0aW5ncy5odG1sI3JlcG9zaXRvcmllc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIE1hdmVuUmVwb3NpdG9yeVBvbGljeSB7XG4gIC8qXG4gICAqIFdoZXRoZXIgdGhpcyByZXBvc2l0b3J5IGlzIGVuYWJsZWQgIGZvciB0aGUgcmVzcGVjdGl2ZSB0eXBlIChgcmVsZWFzZXNgIG9yIGBzbmFwc2hvdHNgKS5cbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBVcGRhdGUgUG9saWN5XG4gICAqIFRoaXMgZWxlbWVudCBzcGVjaWZpZXMgaG93IG9mdGVuIHVwZGF0ZXMgc2hvdWxkIGF0dGVtcHQgdG8gb2NjdXIuIE1hdmVuIHdpbGwgY29tcGFyZSB0aGUgbG9jYWwgUE9NJ3MgdGltZXN0YW1wIChzdG9yZWQgaW4gYSByZXBvc2l0b3J5J3MgbWF2ZW4tbWV0YWRhdGEgZmlsZSkgdG8gdGhlIHJlbW90ZS5cbiAgICogQGRlZmF1bHQgVXBkYXRlUG9saWN5LkRBSUxZXG4gICAqL1xuICByZWFkb25seSB1cGRhdGVQb2xpY3k/OiBVcGRhdGVQb2xpY3k7XG5cbiAgLyoqXG4gICAqIENoZWNrc3VtIFBvbGljeVxuICAgKiBXaGVuIE1hdmVuIGRlcGxveXMgZmlsZXMgdG8gdGhlIHJlcG9zaXRvcnksIGl0IGFsc28gZGVwbG95cyBjb3JyZXNwb25kaW5nIGNoZWNrc3VtIGZpbGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgY2hlY2tzdW1Qb2xpY3k/OiBDaGVja3N1bVBvbGljeTtcbn1cblxuZXhwb3J0IGNsYXNzIFVwZGF0ZVBvbGljeSB7XG4gIHN0YXRpYyByZWFkb25seSBBTFdBWVMgPSBcImFsd2F5c1wiO1xuICBzdGF0aWMgcmVhZG9ubHkgREFJTFkgPSBcImRhaWx5XCI7XG4gIHN0YXRpYyByZWFkb25seSBORVZFUiA9IFwibmV2ZXJcIjtcblxuICAvKipcbiAgICogVXBkYXRlcyBhdCBhbiBpbnRlcnZhbCBvZiBYIG1pbnV0ZXMuXG4gICAqL1xuICBzdGF0aWMgaW50ZXJ2YWwobWludXRlczogbnVtYmVyKSB7XG4gICAgcmV0dXJuIGBpbnRlcnZhbDoke21pbnV0ZXN9YDtcbiAgfVxufVxuXG5leHBvcnQgZW51bSBDaGVja3N1bVBvbGljeSB7XG4gIElHTk9SRSA9IFwiaWdub3JlXCIsXG4gIEZBSUwgPSBcImZhaWxcIixcbiAgV0FSTiA9IFwid2FyblwiLFxufVxuXG4vKipcbiAqIEEgUHJvamVjdCBPYmplY3QgTW9kZWwgb3IgUE9NIGlzIHRoZSBmdW5kYW1lbnRhbCB1bml0IG9mIHdvcmsgaW4gTWF2ZW4uIEl0IGlzXG4gKiBhbiBYTUwgZmlsZSB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBwcm9qZWN0IGFuZCBjb25maWd1cmF0aW9uXG4gKiBkZXRhaWxzIHVzZWQgYnkgTWF2ZW4gdG8gYnVpbGQgdGhlIHByb2plY3QuXG4gKi9cbmV4cG9ydCBjbGFzcyBQb20gZXh0ZW5kcyBDb21wb25lbnQge1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIHBvbSBmaWxlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGZpbGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIE1hdmVuIGdyb3VwIElELlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGdyb3VwSWQ6IHN0cmluZztcblxuICAvKipcbiAgICogTWF2ZW4gYXJ0aWZhY3QgSUQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYXJ0aWZhY3RJZDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQcm9qZWN0IHZlcnNpb24uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBNYXZlbiBwYWNrYWdpbmcgZm9ybWF0LlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBhY2thZ2luZzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQcm9qZWN0IGRpc3BsYXkgbmFtZS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBuYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQcm9qZWN0IGRlc2NyaXB0aW9uLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBQcm9qZWN0IFVSTC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB1cmw/OiBzdHJpbmc7XG5cbiAgLypcbiAgICogUHJvamVjdCBQYXJlbnQgUE9NXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHBhcmVudFBvbT86IFBhcmVudFBvbTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT4gPSB7fTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHJlcG9zaXRvcmllczogTWF2ZW5SZXBvc2l0b3J5W10gPSBbXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHBsdWdpblJlcG9zaXRvcmllczogTWF2ZW5SZXBvc2l0b3J5W10gPSBbXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHNvcnRQbHVnaW5zPzogSUNvbXBhcmVTdHJpbmc7XG5cbiAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCwgb3B0aW9uczogUG9tT3B0aW9ucykge1xuICAgIHN1cGVyKHByb2plY3QpO1xuXG4gICAgdGhpcy5maWxlTmFtZSA9IFwicG9tLnhtbFwiO1xuICAgIHRoaXMuZ3JvdXBJZCA9IG9wdGlvbnMuZ3JvdXBJZDtcbiAgICB0aGlzLmFydGlmYWN0SWQgPSBvcHRpb25zLmFydGlmYWN0SWQ7XG4gICAgdGhpcy52ZXJzaW9uID0gb3B0aW9ucy52ZXJzaW9uO1xuICAgIHRoaXMucGFja2FnaW5nID0gb3B0aW9ucy5wYWNrYWdpbmcgPz8gXCJqYXJcIjtcbiAgICB0aGlzLm5hbWUgPSBwcm9qZWN0Lm5hbWU7XG4gICAgdGhpcy5kZXNjcmlwdGlvbiA9IG9wdGlvbnMuZGVzY3JpcHRpb247XG4gICAgdGhpcy51cmwgPSBvcHRpb25zLnVybDtcbiAgICB0aGlzLnBhcmVudFBvbSA9IG9wdGlvbnMucGFyZW50UG9tO1xuICAgIHRoaXMuc29ydFBsdWdpbnMgPSBvcHRpb25zLnNvcnRQbHVnaW5zO1xuXG4gICAgbmV3IFhtbEZpbGUocHJvamVjdCwgdGhpcy5maWxlTmFtZSwgeyBvYmo6ICgpID0+IHRoaXMuc3ludGhQb20oKSB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEga2V5L3ZhbHVlIHByb3BlcnR5IHRvIHRoZSBwb20uXG4gICAqIEBwYXJhbSBrZXkgdGhlIGtleVxuICAgKiBAcGFyYW0gdmFsdWUgdGhlIHZhbHVlXG4gICAqL1xuICBwdWJsaWMgYWRkUHJvcGVydHkoa2V5OiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICB0aGlzLnByb3BlcnRpZXNba2V5XSA9IHZhbHVlO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBydW50aW1lIGRlcGVuZGVuY3kuXG4gICAqXG4gICAqIEBwYXJhbSBzcGVjIEZvcm1hdCBgPGdyb3VwSWQ+LzxhcnRpZmFjdElkPkA8c2VtdmVyPmBcbiAgICovXG4gIHB1YmxpYyBhZGREZXBlbmRlbmN5KHNwZWM6IHN0cmluZykge1xuICAgIHRoaXMucHJvamVjdC5kZXBzLmFkZERlcGVuZGVuY3koc3BlYywgRGVwZW5kZW5jeVR5cGUuUlVOVElNRSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIHRlc3QgZGVwZW5kZW5jeS5cbiAgICpcbiAgICogQHBhcmFtIHNwZWMgRm9ybWF0IGA8Z3JvdXBJZD4vPGFydGlmYWN0SWQ+QDxzZW12ZXI+YFxuICAgKi9cbiAgcHVibGljIGFkZFRlc3REZXBlbmRlbmN5KHNwZWM6IHN0cmluZykge1xuICAgIHRoaXMucHJvamVjdC5kZXBzLmFkZERlcGVuZGVuY3koc3BlYywgRGVwZW5kZW5jeVR5cGUuVEVTVCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIGJ1aWxkIHBsdWdpbiB0byB0aGUgcG9tLlxuICAgKlxuICAgKiBUaGUgcGx1ZyBpbiBpcyBhbHNvIGFkZGVkIGFzIGEgQlVJTEQgZGVwIHRvIHRoZSBwcm9qZWN0LlxuICAgKlxuICAgKiBAcGFyYW0gc3BlYyBkZXBlbmRlbmN5IHNwZWMgKGBncm91cC9hcnRpZmFjdEB2ZXJzaW9uYClcbiAgICogQHBhcmFtIG9wdGlvbnMgcGx1Z2luIG9wdGlvbnNcbiAgICovXG4gIHB1YmxpYyBhZGRQbHVnaW4oc3BlYzogc3RyaW5nLCBvcHRpb25zOiBQbHVnaW5PcHRpb25zID0ge30pIHtcbiAgICBmb3IgKGNvbnN0IGRlcCBvZiBvcHRpb25zLmRlcGVuZGVuY2llcyA/PyBbXSkge1xuICAgICAgdGhpcy5wcm9qZWN0LmRlcHMuYWRkRGVwZW5kZW5jeShkZXAsIERlcGVuZGVuY3lUeXBlLkJVSUxEKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMucHJvamVjdC5kZXBzLmFkZERlcGVuZGVuY3koc3BlYywgRGVwZW5kZW5jeVR5cGUuQlVJTEQsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSByZXBvc2l0b3J5IHRvIHRoZSBwb21cbiAgICogQHBhcmFtIHJlcG9zaXRvcnkgdGhlIHJlcG9zaXRvcnkgdG8gYWRkXG4gICAqL1xuICBwdWJsaWMgYWRkUmVwb3NpdG9yeShyZXBvc2l0b3J5OiBNYXZlblJlcG9zaXRvcnkpIHtcbiAgICB0aGlzLnJlcG9zaXRvcmllcy5wdXNoKHJlcG9zaXRvcnkpO1xuICB9XG5cbiAgLypcbiAgICogQWRkcyBhIHJlcG9zaXRvcnkgZm9yIHBsdWdpbnMgdG8gdGhlIHBvbVxuICAgKiBAcGFyYW0gcmVwb3NpdG9yeSB0aGUgcmVwb3NpdG9yeSB0byBhZGRcbiAgICovXG4gIHB1YmxpYyBhZGRQbHVnaW5SZXBvc2l0b3J5KHJlcG9zaXRvcnk6IE1hdmVuUmVwb3NpdG9yeSkge1xuICAgIHRoaXMucGx1Z2luUmVwb3NpdG9yaWVzLnB1c2gocmVwb3NpdG9yeSk7XG4gIH1cblxuICBwcml2YXRlIHN5bnRoUG9tKCkge1xuICAgIHJldHVybiByZXNvbHZlKFxuICAgICAge1xuICAgICAgICBwcm9qZWN0OiB7XG4gICAgICAgICAgLi4uUE9NX1hNTF9BVFRSUyxcbiAgICAgICAgICBtb2RlbFZlcnNpb246IFwiNC4wLjBcIixcbiAgICAgICAgICBncm91cElkOiB0aGlzLmdyb3VwSWQsXG4gICAgICAgICAgYXJ0aWZhY3RJZDogdGhpcy5hcnRpZmFjdElkLFxuICAgICAgICAgIHZlcnNpb246IHRoaXMudmVyc2lvbixcbiAgICAgICAgICBwYWNrYWdpbmc6IHRoaXMucGFja2FnaW5nLFxuICAgICAgICAgIG5hbWU6IHRoaXMubmFtZSxcbiAgICAgICAgICBkZXNjcmlwdGlvbjogdGhpcy5kZXNjcmlwdGlvbixcbiAgICAgICAgICB1cmw6IHRoaXMudXJsLFxuICAgICAgICAgIHByb3BlcnRpZXM6IHRoaXMucHJvcGVydGllcyxcbiAgICAgICAgICBwYXJlbnQ6IHRoaXMucGFyZW50UG9tLFxuICAgICAgICAgIC4uLnRoaXMuc3ludGhSZXBvc2l0b3JpZXMoKSxcbiAgICAgICAgICAuLi50aGlzLnN5bnRoRGVwZW5kZW5jaWVzKCksXG4gICAgICAgICAgLi4udGhpcy5zeW50aFBsdWdpblJlcG9zaXRvcmllcygpLFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICAgIHsgb21pdEVtcHR5OiB0cnVlIH0sXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgc3ludGhEZXBlbmRlbmNpZXMoKSB7XG4gICAgY29uc3QgZGVwcyA9IHRoaXMucHJvamVjdC5kZXBzLmFsbDtcbiAgICBpZiAoZGVwcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBkZXBlbmRlbmNpZXM6IGFueVtdID0gW107XG4gICAgY29uc3QgcGx1Z2luczogYW55W10gPSBbXTtcblxuICAgIGZvciAoY29uc3QgZGVwIG9mIGRlcHMpIHtcbiAgICAgIHN3aXRjaCAoZGVwLnR5cGUpIHtcbiAgICAgICAgY2FzZSBEZXBlbmRlbmN5VHlwZS5QRUVSOlxuICAgICAgICBjYXNlIERlcGVuZGVuY3lUeXBlLlJVTlRJTUU6XG4gICAgICAgICAgZGVwZW5kZW5jaWVzLnB1c2gobWF2ZW5Db29yZHMoZGVwKSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBEZXBlbmRlbmN5VHlwZS5URVNUOlxuICAgICAgICAgIGRlcGVuZGVuY2llcy5wdXNoKHtcbiAgICAgICAgICAgIC4uLm1hdmVuQ29vcmRzKGRlcCksXG4gICAgICAgICAgICBzY29wZTogXCJ0ZXN0XCIsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gYnVpbGQgbWFwcyB0byBwbHVnaW5zXG4gICAgICAgIGNhc2UgRGVwZW5kZW5jeVR5cGUuQlVJTEQ6XG4gICAgICAgICAgcGx1Z2lucy5wdXNoKHtcbiAgICAgICAgICAgIC4uLm1hdmVuQ29vcmRzKGRlcCksXG4gICAgICAgICAgICAuLi5wbHVnaW5Db25maWcoZGVwLm1ldGFkYXRhIGFzIFBsdWdpbk9wdGlvbnMpLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGB1bnN1cHBvcnRlZCBkZXBlbmRlbmN5IHR5cGU6ICR7ZGVwLnR5cGV9YCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3Qgc29ydFBsdWdpbnMgPSB0aGlzLnNvcnRQbHVnaW5zO1xuICAgIGlmIChzb3J0UGx1Z2lucykge1xuICAgICAgcGx1Z2lucy5zb3J0KChhLCBiKSA9PlxuICAgICAgICBzb3J0UGx1Z2lucy5jb21wYXJlKFxuICAgICAgICAgIGAke2EuZ3JvdXBJZH0vJHthLmFydGlmYWN0SWR9YCxcbiAgICAgICAgICBgJHtiLmdyb3VwSWR9LyR7Yi5hcnRpZmFjdElkfWAsXG4gICAgICAgICksXG4gICAgICApO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBidWlsZDogeyBwbHVnaW5zOiB7IHBsdWdpbjogcGx1Z2lucyB9IH0sXG4gICAgICBkZXBlbmRlbmNpZXM6IHsgZGVwZW5kZW5jeTogZGVwZW5kZW5jaWVzIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgc3ludGhSZXBvc2l0b3JpZXMoKSB7XG4gICAgaWYgKHRoaXMucmVwb3NpdG9yaWVzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICByZXBvc2l0b3JpZXM6IHsgcmVwb3NpdG9yeTogdGhpcy5yZXBvc2l0b3JpZXMgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBzeW50aFBsdWdpblJlcG9zaXRvcmllcygpIHtcbiAgICBpZiAodGhpcy5wbHVnaW5SZXBvc2l0b3JpZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBsdWdpblJlcG9zaXRvcmllczogeyBwbHVnaW5SZXBvc2l0b3J5OiB0aGlzLnBsdWdpblJlcG9zaXRvcmllcyB9LFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBNYXZlbiBwbHVnaW5zLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbk9wdGlvbnMge1xuICAvKipcbiAgICogUGx1Z2luIGtleS92YWx1ZSBjb25maWd1cmF0aW9uXG4gICAqIEBkZWZhdWx0IHt9XG4gICAqL1xuICByZWFkb25seSBjb25maWd1cmF0aW9uPzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcblxuICAvKipcbiAgICogUGx1Z2luIGV4ZWN1dGlvbnNcbiAgICogQGRlZmF1bHQgW11cbiAgICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvbnM/OiBQbHVnaW5FeGVjdXRpb25bXTtcblxuICAvKipcbiAgICogWW91IGNvdWxkIGNvbmZpZ3VyZSB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGUgcGx1Z2luLlxuICAgKlxuICAgKiBEZXBlbmRlbmNpZXMgYXJlIGluIGA8Z3JvdXBJZD4vPGFydGlmYWN0SWQ+QDxzZW12ZXI+YCBmb3JtYXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqL1xuICByZWFkb25seSBkZXBlbmRlbmNpZXM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBQbHVnaW4gZXhlY3V0aW9uIGRlZmluaXRpb24uXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luRXhlY3V0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBJRC5cbiAgICovXG4gIHJlYWRvbmx5IGlkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoaWNoIE1hdmVuIGdvYWxzIHRoaXMgcGx1Z2luIHNob3VsZCBiZSBhc3NvY2lhdGVkIHdpdGguXG4gICAqL1xuICByZWFkb25seSBnb2Fsczogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBwaGFzZSBpbiB3aGljaCB0aGUgcGx1Z2luIHNob3VsZCBleGVjdXRlLlxuICAgKi9cbiAgcmVhZG9ubHkgcGhhc2U/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGlvbiBrZXkvdmFsdWUgY29uZmlndXJhdGlvblxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgcmVhZG9ubHkgY29uZmlndXJhdGlvbj86IHsgW2tleTogc3RyaW5nXTogYW55IH07XG59XG5cbi8qKlxuICogUGFyc2VzIG1hdmVuIGdyb3VwSWQgYW5kIGFydGlmYWN0SWQgZnJvbSBhIGRlcGVuZGVuY3kgbmFtZS5cbiAqXG4gKiAgICAgbmFtZSAgICA8PT4gPGdyb3VwSWQ+LzxhcnRpZmFjdElkPlxuICogICAgIHZlcnNpb24gPD0+IDx2ZXJzaW9uPlxuICovXG5mdW5jdGlvbiBtYXZlbkNvb3JkcyhkZXA6IERlcGVuZGVuY3lDb29yZGluYXRlcykge1xuICBjb25zdCBuYW1lID0gZGVwLm5hbWU7XG4gIGNvbnN0IHBhcnRzID0gbmFtZS5zcGxpdChcIi9cIik7XG4gIGlmIChwYXJ0cy5sZW5ndGggIT09IDIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgaW52YWxpZCBtYXZlbiBjb29yZGluYXRlcyBpbiBkZXBlbmRlbmN5IG5hbWVkIFwiJHtuYW1lfVwiLiBmb3JtYXQgaXMgXCI8Z3JvdXBJZD4vPGFydGlmYWN0SWQ+XCIuIEZvciBleGFtcGxlIFwib3JnLmp1bml0Lmp1cGl0ZXIvanVuaXQtanVwaXRlci1lbmdpbmVcImAsXG4gICAgKTtcbiAgfVxuXG4gIHJldHVybiB7XG4gICAgZ3JvdXBJZDogcGFydHNbMF0sXG4gICAgYXJ0aWZhY3RJZDogcGFydHNbMV0sXG4gICAgdmVyc2lvbjogZGVwLnZlcnNpb24gPyB0b01hdmVuVmVyc2lvblJhbmdlKGRlcC52ZXJzaW9uKSA6IHVuZGVmaW5lZCxcbiAgfTtcbn1cblxuZnVuY3Rpb24gcGx1Z2luQ29uZmlnKG9wdGlvbnM6IFBsdWdpbk9wdGlvbnMgPSB7fSkge1xuICByZXR1cm4ge1xuICAgIGNvbmZpZ3VyYXRpb246IG9wdGlvbnMuY29uZmlndXJhdGlvbixcbiAgICBkZXBlbmRlbmNpZXM6XG4gICAgICBvcHRpb25zLmRlcGVuZGVuY2llcyAmJiBvcHRpb25zLmRlcGVuZGVuY2llcy5sZW5ndGggPiAwXG4gICAgICAgID8ge1xuICAgICAgICAgICAgZGVwZW5kZW5jeTogb3B0aW9ucy5kZXBlbmRlbmNpZXM/Lm1hcCgoZCkgPT5cbiAgICAgICAgICAgICAgbWF2ZW5Db29yZHMoRGVwZW5kZW5jaWVzLnBhcnNlRGVwZW5kZW5jeShkKSksXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH1cbiAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgZXhlY3V0aW9uczoge1xuICAgICAgZXhlY3V0aW9uOiBvcHRpb25zLmV4ZWN1dGlvbnM/Lm1hcCgoZSkgPT4gKHtcbiAgICAgICAgaWQ6IGUuaWQsXG4gICAgICAgIGdvYWxzOiBlLmdvYWxzLm1hcCgoZ29hbCkgPT4gKHsgZ29hbCB9KSksXG4gICAgICAgIHBoYXNlOiBlLnBoYXNlLFxuICAgICAgICBjb25maWd1cmF0aW9uOiBlLmNvbmZpZ3VyYXRpb24sXG4gICAgICB9KSksXG4gICAgfSxcbiAgfTtcbn1cbiJdfQ==
@@ -19,7 +19,7 @@ const util_1 = require("../util");
19
19
  * `src/main/java/projenrc.java`.
20
20
  */
21
21
  class Projenrc extends projenrc_1.ProjenrcFile {
22
- static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.Projenrc", version: "0.104.14" };
22
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.java.Projenrc", version: "0.104.16" };
23
23
  /**
24
24
  * The name of the java class that includes the projen entrypoint.
25
25
  */