projen 0.42.0 → 0.42.1

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 (106) hide show
  1. package/.jsii +182 -372
  2. package/API.md +32 -165
  3. package/lib/awscdk/auto-discover.d.ts +0 -7
  4. package/lib/awscdk/auto-discover.js +4 -5
  5. package/lib/awscdk/awscdk-app-ts.d.ts +28 -7
  6. package/lib/awscdk/awscdk-app-ts.js +37 -30
  7. package/lib/awscdk/awscdk-construct.d.ts +93 -13
  8. package/lib/awscdk/awscdk-construct.js +87 -49
  9. package/lib/awscdk/cdk-config.js +1 -1
  10. package/lib/awscdk/cdk-tasks.js +1 -1
  11. package/lib/awscdk/index.d.ts +0 -1
  12. package/lib/awscdk/index.js +1 -2
  13. package/lib/awscdk/integration-test.js +1 -1
  14. package/lib/awscdk/java-app.js +1 -1
  15. package/lib/awscdk/lambda-function.d.ts +1 -8
  16. package/lib/awscdk/lambda-function.js +5 -14
  17. package/lib/cdk/construct-lib.js +1 -1
  18. package/lib/cdk/jsii-docgen.js +1 -1
  19. package/lib/cdk/jsii-project.js +1 -1
  20. package/lib/cdk8s/cdk8s-app-ts.js +1 -1
  21. package/lib/cdk8s/cdk8s-construct.js +1 -1
  22. package/lib/cdktf/cdktf-construct.js +1 -1
  23. package/lib/component.js +1 -1
  24. package/lib/dependencies.js +1 -1
  25. package/lib/dev-env.js +1 -1
  26. package/lib/docker-compose.js +2 -2
  27. package/lib/file.js +1 -1
  28. package/lib/gitattributes.js +1 -1
  29. package/lib/github/auto-approve.js +1 -1
  30. package/lib/github/auto-merge.js +1 -1
  31. package/lib/github/dependabot.js +1 -1
  32. package/lib/github/github-project.js +1 -1
  33. package/lib/github/github.js +1 -1
  34. package/lib/github/mergify.js +1 -1
  35. package/lib/github/pr-template.js +1 -1
  36. package/lib/github/pull-request-lint.js +1 -1
  37. package/lib/github/stale.js +1 -1
  38. package/lib/github/task-workflow.js +1 -1
  39. package/lib/github/workflows.js +1 -1
  40. package/lib/gitpod.js +1 -1
  41. package/lib/ignore-file.js +1 -1
  42. package/lib/ini.js +1 -1
  43. package/lib/java/java-project.js +1 -1
  44. package/lib/java/junit.js +1 -1
  45. package/lib/java/maven-compile.js +1 -1
  46. package/lib/java/maven-packaging.js +1 -1
  47. package/lib/java/maven-sample.js +1 -1
  48. package/lib/java/pom.js +1 -1
  49. package/lib/java/projenrc.js +1 -1
  50. package/lib/javascript/bundler.js +1 -1
  51. package/lib/javascript/eslint.js +1 -1
  52. package/lib/javascript/jest.js +1 -1
  53. package/lib/javascript/node-package.js +1 -1
  54. package/lib/javascript/node-project.js +1 -1
  55. package/lib/javascript/npm-config.js +1 -1
  56. package/lib/javascript/projenrc.js +1 -1
  57. package/lib/javascript/typescript-config.js +1 -1
  58. package/lib/javascript/upgrade-dependencies.js +2 -2
  59. package/lib/json.js +1 -1
  60. package/lib/license.js +1 -1
  61. package/lib/logger.js +1 -1
  62. package/lib/makefile.js +1 -1
  63. package/lib/object-file.js +1 -1
  64. package/lib/project-build.js +1 -1
  65. package/lib/project.js +1 -1
  66. package/lib/projects.js +1 -1
  67. package/lib/projenrc-json.js +1 -1
  68. package/lib/python/pip.js +1 -1
  69. package/lib/python/poetry.js +2 -2
  70. package/lib/python/projenrc.js +1 -1
  71. package/lib/python/pytest.js +1 -1
  72. package/lib/python/python-project.js +1 -1
  73. package/lib/python/python-sample.js +1 -1
  74. package/lib/python/requirements-file.js +1 -1
  75. package/lib/python/setuppy.js +1 -1
  76. package/lib/python/setuptools.js +1 -1
  77. package/lib/python/venv.js +1 -1
  78. package/lib/readme.js +1 -1
  79. package/lib/release/publisher.js +1 -1
  80. package/lib/release/release-trigger.js +1 -1
  81. package/lib/release/release.js +1 -1
  82. package/lib/sample-file.js +2 -2
  83. package/lib/semver.js +1 -1
  84. package/lib/source-code.js +1 -1
  85. package/lib/task-runtime.js +1 -1
  86. package/lib/task.js +1 -1
  87. package/lib/tasks.js +1 -1
  88. package/lib/testing.js +1 -1
  89. package/lib/textfile.js +1 -1
  90. package/lib/toml.js +1 -1
  91. package/lib/typescript/projenrc.js +1 -1
  92. package/lib/typescript/typescript-typedoc.js +1 -1
  93. package/lib/typescript/typescript.js +3 -3
  94. package/lib/version.js +1 -1
  95. package/lib/vscode/devcontainer.js +1 -1
  96. package/lib/vscode/launch-config.js +1 -1
  97. package/lib/vscode/vscode.js +1 -1
  98. package/lib/web/next.js +3 -3
  99. package/lib/web/postcss.js +1 -1
  100. package/lib/web/react.js +4 -4
  101. package/lib/web/tailwind.js +1 -1
  102. package/lib/xmlfile.js +1 -1
  103. package/lib/yaml.js +1 -1
  104. package/package.json +1 -1
  105. package/lib/awscdk/awscdk-deps.d.ts +0 -157
  106. package/lib/awscdk/awscdk-deps.js +0 -163
@@ -1,157 +0,0 @@
1
- import { DependencyType } from '..';
2
- import { Component } from '../component';
3
- import { Project } from '../project';
4
- /**
5
- * (experimental) Options for `AwsCdkDeps`.
6
- *
7
- * @experimental
8
- */
9
- export interface AwsCdkDepsCommonOptions {
10
- /**
11
- * (experimental) Semantic version requirement for the the AWS CDK libraries.
12
- *
13
- * @default "^2"
14
- * @experimental
15
- */
16
- readonly cdkVersion: string;
17
- /**
18
- * (experimental) Semantic version requirement for the `constructs` library.
19
- *
20
- * @default - for CDK 1.x the default is "^3.2.27", for CDK 2.x the default
21
- * is "^10.0.5".
22
- * @experimental
23
- */
24
- readonly constructsVersion?: string;
25
- /**
26
- * (deprecated) Use pinned version instead of caret version for CDK.
27
- *
28
- * You can use this to prevent yarn to mix versions for your CDK dependencies and to prevent auto-updates.
29
- * If you use experimental features this will let you define the moment you include breaking changes.
30
- *
31
- * @deprecated Not supported: to pin your CDK version just set `cdkVersion` to a pinned version.
32
- */
33
- readonly cdkVersionPinning?: boolean;
34
- /**
35
- * (deprecated) Which AWS CDK modules (those that start with "@aws-cdk/") does this library require when consumed?
36
- *
37
- * @deprecated For CDK 2.x use 'peerDeps' instead
38
- */
39
- readonly cdkDependencies?: string[];
40
- /**
41
- * (deprecated) If this is enabled (default), all modules declared in `cdkDependencies` will be also added as normal `dependencies` (as well as `peerDependencies`).
42
- *
43
- * This is to ensure that downstream consumers actually have your CDK dependencies installed
44
- * when using npm < 7 or yarn, where peer dependencies are not automatically installed.
45
- * If this is disabled, `cdkDependencies` will be added to `devDependencies` to ensure
46
- * they are present during development.
47
- *
48
- * @default true
49
- * @deprecated Not supported in CDK v2.
50
- */
51
- readonly cdkDependenciesAsDeps?: boolean;
52
- /**
53
- * (deprecated) Install the @aws-cdk/assert library?
54
- *
55
- * @default false
56
- * @deprecated Use `cdkAssertions` instead
57
- */
58
- readonly cdkAssert?: boolean;
59
- /**
60
- * (experimental) Install the @aws-cdk/assertions library?
61
- *
62
- * Only needed for CDK 1.x. If using CDK 2.x then
63
- * assertions is already included in 'aws-cdk-lib'
64
- *
65
- * @default true
66
- * @experimental
67
- */
68
- readonly cdkAssertions?: boolean;
69
- /**
70
- * (deprecated) AWS CDK modules required for testing.
71
- *
72
- * @deprecated For CDK 2.x use 'devDeps' instead
73
- */
74
- readonly cdkTestDependencies?: string[];
75
- }
76
- /**
77
- * @experimental
78
- */
79
- export interface AwsCdkDepsOptions extends AwsCdkDepsCommonOptions {
80
- /**
81
- * (experimental) The type of dependency to use for runtime AWS CDK and `constructs` modules.
82
- *
83
- * For libraries, use peer dependencies and for apps use runtime dependencies.
84
- *
85
- * @experimental
86
- */
87
- readonly dependencyType: DependencyType;
88
- }
89
- /**
90
- * (experimental) Manages dependencies on the AWS CDK.
91
- *
92
- * @experimental
93
- */
94
- export declare class AwsCdkDeps extends Component {
95
- /**
96
- * (experimental) The dependency requirement for AWS CDK (e.g. `^2.0.0`).
97
- *
98
- * @experimental
99
- */
100
- readonly cdkVersion: string;
101
- /**
102
- * (experimental) The semantic version requirement of `constructs`.
103
- *
104
- * @experimental
105
- */
106
- readonly constructsVersion: string;
107
- /**
108
- * (deprecated) Whether CDK dependencies are added as normal dependencies (and peer dependencies).
109
- *
110
- * @deprecated Not used for CDK 2.x
111
- */
112
- readonly cdkDependenciesAsDeps: boolean;
113
- /**
114
- * (experimental) The major version of the AWX CDK (e.g. 1, 2, ...).
115
- *
116
- * @experimental
117
- */
118
- readonly cdkMajorVersion: number;
119
- private readonly dependencyType;
120
- /**
121
- * @experimental
122
- */
123
- constructor(project: Project, options: AwsCdkDepsOptions);
124
- /**
125
- * (experimental) Adds dependencies to AWS CDK modules.
126
- *
127
- * The type of dependency is determined by the `dependencyType` option.
128
- *
129
- * This method is not supported in CDK v2. Use `project.addPeerDeps()` or
130
- * `project.addDeps()` as appropriate.
131
- *
132
- * @param deps names of cdk modules (e.g. `@aws-cdk/aws-lambda`).
133
- * @experimental
134
- */
135
- addV1Dependencies(...deps: string[]): void;
136
- /**
137
- * (experimental) Adds AWS CDK modules as dev dependencies.
138
- *
139
- * This method is not supported in CDK v2. Use `project.addPeerDeps()` or
140
- * `project.addDeps()` as appropriate.
141
- *
142
- * @param deps names of cdk modules (e.g. `@aws-cdk/aws-lambda`).
143
- * @experimental
144
- */
145
- addV1DevDependencies(...deps: string[]): void;
146
- private addConstructsDependency;
147
- /**
148
- * Addsa depdenencies on the AWS CDK framework (e.g. `@aws-cdk/core` for V1 or `aws-cdk-lib` for V1).
149
- */
150
- private addFrameworkDependency;
151
- private addV1AssertionLibraryDependency;
152
- /**
153
- * Adds a set of dependencies with the user-specified dependency type.
154
- * @param deps The set of dependency specifications
155
- */
156
- private addV1DependenciesByType;
157
- }
@@ -1,163 +0,0 @@
1
- "use strict";
2
- var _a;
3
- Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.AwsCdkDeps = void 0;
5
- const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
- const semver = require("semver");
7
- const __1 = require("..");
8
- const component_1 = require("../component");
9
- /**
10
- * (experimental) Manages dependencies on the AWS CDK.
11
- *
12
- * @experimental
13
- */
14
- class AwsCdkDeps extends component_1.Component {
15
- /**
16
- * @experimental
17
- */
18
- constructor(project, options) {
19
- var _b, _c, _d, _e;
20
- super(project);
21
- if (options.cdkVersionPinning) {
22
- throw new Error('"cdkVersionPinning" is deprecated, set "cdkVersion" to a pinned version');
23
- }
24
- if (semver.valid(options.cdkVersion)) {
25
- this.project.logger.warn(`NOTICE: "cdkVersion" is now a version range and is currently pinned to ${options.cdkVersion}. We recommend setting it to "^${options.cdkVersion}".`);
26
- }
27
- if (semver.valid(options.constructsVersion)) {
28
- this.project.logger.warn(`NOTICE: "constructsVersion" is now a version range and is currently pinned to ${options.constructsVersion}. We recommend setting it to "^${options.constructsVersion}".`);
29
- }
30
- this.cdkDependenciesAsDeps = (_b = options.cdkDependenciesAsDeps) !== null && _b !== void 0 ? _b : true;
31
- this.cdkVersion = options.cdkVersion;
32
- this.dependencyType = options.dependencyType;
33
- const mv = (_c = semver.minVersion(this.cdkVersion)) === null || _c === void 0 ? void 0 : _c.major;
34
- if (!mv) {
35
- throw new Error(`Unable to determine CDK major version for ${mv}`);
36
- }
37
- this.cdkMajorVersion = mv;
38
- this.addFrameworkDependency(options);
39
- this.addV1AssertionLibraryDependency(options);
40
- // add a dependency on `constructs`
41
- this.constructsVersion = this.addConstructsDependency(options.constructsVersion);
42
- this.addV1Dependencies(...(_d = options.cdkDependencies) !== null && _d !== void 0 ? _d : []);
43
- this.addV1DevDependencies(...(_e = options.cdkTestDependencies) !== null && _e !== void 0 ? _e : []);
44
- }
45
- /**
46
- * (experimental) Adds dependencies to AWS CDK modules.
47
- *
48
- * The type of dependency is determined by the `dependencyType` option.
49
- *
50
- * This method is not supported in CDK v2. Use `project.addPeerDeps()` or
51
- * `project.addDeps()` as appropriate.
52
- *
53
- * @param deps names of cdk modules (e.g. `@aws-cdk/aws-lambda`).
54
- * @experimental
55
- */
56
- addV1Dependencies(...deps) {
57
- if (deps.length > 0 && this.cdkMajorVersion !== 1) {
58
- throw new Error('addV1Dependencies() is not supported for CDK 2.x and above, use addDeps() or addPeerDeps() instead');
59
- }
60
- // this will add dependencies based on the type requested by the user
61
- // for libraries, this will be "peer" and for apps it will be "runtime"
62
- this.addV1DependenciesByType(this.dependencyType, ...deps);
63
- // add deps as runtime deps if `cdkDepsAsDeps` is true
64
- if (this.cdkDependenciesAsDeps) {
65
- this.addV1DependenciesByType(__1.DependencyType.RUNTIME, ...deps);
66
- }
67
- }
68
- /**
69
- * (experimental) Adds AWS CDK modules as dev dependencies.
70
- *
71
- * This method is not supported in CDK v2. Use `project.addPeerDeps()` or
72
- * `project.addDeps()` as appropriate.
73
- *
74
- * @param deps names of cdk modules (e.g. `@aws-cdk/aws-lambda`).
75
- * @experimental
76
- */
77
- addV1DevDependencies(...deps) {
78
- if (deps.length > 0 && this.cdkMajorVersion !== 1) {
79
- throw new Error('addV1DevDependencies() is not supported for CDK 2.x and above, use addDevDeps() instead');
80
- }
81
- this.addV1DependenciesByType(__1.DependencyType.BUILD, ...deps);
82
- }
83
- addConstructsDependency(requestedVersion) {
84
- var _b;
85
- const defaultConstructsVersion = this.cdkMajorVersion === 1 ? '^3.2.27' : '^10.0.5';
86
- const constructsVersion = requestedVersion !== null && requestedVersion !== void 0 ? requestedVersion : defaultConstructsVersion;
87
- const constructsMajorVersion = (_b = semver.minVersion(constructsVersion)) === null || _b === void 0 ? void 0 : _b.major;
88
- if (!constructsMajorVersion) {
89
- throw new Error(`Cannot determine major version of constructs version '${constructsVersion}'`);
90
- }
91
- switch (this.cdkMajorVersion) {
92
- case 1:
93
- if (constructsMajorVersion !== 3) {
94
- throw new Error('AWS CDK 1.x requires constructs 3.x');
95
- }
96
- break;
97
- case 2:
98
- if (constructsMajorVersion !== 10) {
99
- throw new Error('AWS CDK 2.x requires constructs 10.x');
100
- }
101
- break;
102
- }
103
- this.project.deps.addDependency(`constructs@${constructsVersion}`, this.dependencyType);
104
- return constructsVersion;
105
- }
106
- /**
107
- * Addsa depdenencies on the AWS CDK framework (e.g. `@aws-cdk/core` for V1 or `aws-cdk-lib` for V1).
108
- */
109
- addFrameworkDependency(options) {
110
- switch (this.cdkMajorVersion) {
111
- case 1:
112
- this.addV1Dependencies('@aws-cdk/core');
113
- break;
114
- case 2:
115
- if (options.cdkDependencies !== undefined) {
116
- throw new Error('cdkDependencies is not used for CDK 2.x. Use "peerDeps" instead');
117
- }
118
- if (options.cdkDependenciesAsDeps !== undefined) {
119
- throw new Error('cdkDependenciesAsDeps is not used for CDK 2.x');
120
- }
121
- if (options.cdkTestDependencies !== undefined) {
122
- throw new Error('cdkTestDependencies is not used for CDK 2.x. Use "devDeps" instead');
123
- }
124
- this.project.deps.addDependency(`aws-cdk-lib@${this.cdkVersion}`, this.dependencyType);
125
- break;
126
- default:
127
- throw new Error(`Unsupported AWS CDK major version ${this.cdkMajorVersion}.x`);
128
- }
129
- }
130
- addV1AssertionLibraryDependency(options) {
131
- var _b;
132
- if (this.cdkMajorVersion !== 1) {
133
- if (options.cdkAssert !== undefined) {
134
- throw new Error('cdkAssert is not used for CDK 2.x. Use the assertions library that is provided in aws-cdk-lib');
135
- }
136
- if (options.cdkAssertions !== undefined) {
137
- throw new Error('cdkAssertion is not used for CDK 2.x. Use the assertions library that is provided in aws-cdk-lib');
138
- }
139
- return;
140
- }
141
- const testDeps = new Array();
142
- if (options.cdkAssert) {
143
- testDeps.push('@aws-cdk/assert');
144
- }
145
- if ((_b = options.cdkAssertions) !== null && _b !== void 0 ? _b : true) {
146
- testDeps.push('@aws-cdk/assertions');
147
- }
148
- this.addV1DependenciesByType(__1.DependencyType.TEST, ...testDeps);
149
- }
150
- /**
151
- * Adds a set of dependencies with the user-specified dependency type.
152
- * @param deps The set of dependency specifications
153
- */
154
- addV1DependenciesByType(type, ...modules) {
155
- for (const module of modules) {
156
- this.project.deps.addDependency(`${module}@${this.cdkVersion}`, type);
157
- }
158
- }
159
- }
160
- exports.AwsCdkDeps = AwsCdkDeps;
161
- _a = JSII_RTTI_SYMBOL_1;
162
- AwsCdkDeps[_a] = { fqn: "projen.awscdk.AwsCdkDeps", version: "0.42.0" };
163
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzY2RrLWRlcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYXdzY2RrL2F3c2Nkay1kZXBzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsaUNBQWlDO0FBQ2pDLDBCQUFvQztBQUNwQyw0Q0FBeUM7Ozs7OztBQW9DekMsTUFBYSxVQUFXLFNBQVEscUJBQVM7Ozs7SUFldkMsWUFBWSxPQUFnQixFQUFFLE9BQTBCOztRQUN0RCxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFZixJQUFJLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRTtZQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLHlFQUF5RSxDQUFDLENBQUM7U0FDNUY7UUFFRCxJQUFJLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQywwRUFBMEUsT0FBTyxDQUFDLFVBQVUsa0NBQWtDLE9BQU8sQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDO1NBQ2hMO1FBRUQsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxFQUFFO1lBQzNDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxpRkFBaUYsT0FBTyxDQUFDLGlCQUFpQixrQ0FBa0MsT0FBTyxDQUFDLGlCQUFpQixJQUFJLENBQUMsQ0FBQztTQUNyTTtRQUVELElBQUksQ0FBQyxxQkFBcUIsU0FBRyxPQUFPLENBQUMscUJBQXFCLG1DQUFJLElBQUksQ0FBQztRQUNuRSxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDckMsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDO1FBRTdDLE1BQU0sRUFBRSxTQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQywwQ0FBRSxL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QUFNLFFBQVEsR0FBRyxJQUFJLEtBQUssRUFBVSxDQUFDO1FBQ3JDLElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRTtZQUNyQixRQUFRLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUM7U0FDbEM7UUFFRCxVQUFJLE9BQU8sQ0FBQyxhQUFhLG1DQUFJLElBQUksRUFBRTtZQUNqQyxRQUFRLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUM7U0FDdEM7UUFFRCxJQUFJLENBQUMsdUJBQXVCLENBQUMsa0JBQWMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQ7OztPQUdHO0lBQ0ssdUJBQXVCLENBQUMsSUFBb0IsRUFBRSxHQUFHLE9BQWlCO1FBQ3hFLEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFO1lBQzVCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxHQUFHLE1BQU0sSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDdkU7SUFDSCxDQUFDOztBQW5LSCxnQ0FvS0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBzZW12ZXIgZnJvbSAnc2VtdmVyJztcbmltcG9ydCB7IERlcGVuZGVuY3lUeXBlIH0gZnJvbSAnLi4nO1xuaW1wb3J0IHsgQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50JztcbmltcG9ydCB7IFByb2plY3QgfSBmcm9tICcuLi9wcm9qZWN0JztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbmV4cG9ydCBpbnRlcmZhY2UgQXdzQ2RrRGVwc0NvbW1vbk9wdGlvbnMge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBjZGtWZXJzaW9uOiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBjb25zdHJ1Y3RzVmVyc2lvbj86IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBjZGtWZXJzaW9uUGlubmluZz86IGJvb2xlYW47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGNka0RlcGVuZGVuY2llcz86IHN0cmluZ1tdO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICByZWFkb25seSBjZGtEZXBlbmRlbmNpZXNBc0RlcHM/OiBib29sZWFuO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgY2RrQXNzZXJ0PzogYm9vbGVhbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgY2RrQXNzZXJ0aW9ucz86IGJvb2xlYW47XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHJlYWRvbmx5IGNka1Rlc3REZXBlbmRlbmNpZXM/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBBd3NDZGtEZXBzT3B0aW9ucyBleHRlbmRzIEF3c0Nka0RlcHNDb21tb25PcHRpb25zIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcmVhZG9ubHkgZGVwZW5kZW5jeVR5cGU6IERlcGVuZGVuY3lUeXBlO1xufVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuZXhwb3J0IGNsYXNzIEF3c0Nka0RlcHMgZXh0ZW5kcyBDb21wb25lbnQge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyByZWFkb25seSBjZGtWZXJzaW9uOiBzdHJpbmc7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgcmVhZG9ubHkgY29uc3RydWN0c1ZlcnNpb246IHN0cmluZztcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgcHVibGljIHJlYWRvbmx5IGNka0RlcGVuZGVuY2llc0FzRGVwczogYm9vbGVhbjtcblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gIHB1YmxpYyByZWFkb25seSBjZGtNYWpvclZlcnNpb246IG51bWJlcjtcblxuICBwcml2YXRlIHJlYWRvbmx5IGRlcGVuZGVuY3lUeXBlOiBEZXBlbmRlbmN5VHlwZTtcblxuICBjb25zdHJ1Y3Rvcihwcm9qZWN0OiBQcm9qZWN0LCBvcHRpb25zOiBBd3NDZGtEZXBzT3B0aW9ucykge1xuICAgIHN1cGVyKHByb2plY3QpO1xuXG4gICAgaWYgKG9wdGlvbnMuY2RrVmVyc2lvblBpbm5pbmcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignXCJjZGtWZXJzaW9uUGlubmluZ1wiIGlzIGRlcHJlY2F0ZWQsIHNldCBcImNka1ZlcnNpb25cIiB0byBhIHBpbm5lZCB2ZXJzaW9uJyk7XG4gICAgfVxuXG4gICAgaWYgKHNlbXZlci52YWxpZChvcHRpb25zLmNka1ZlcnNpb24pKSB7XG4gICAgICB0aGlzLnByb2plY3QubG9nZ2VyLndhcm4oYE5PVElDRTogXCJjZGtWZXJzaW9uXCIgaXMgbm93IGEgdmVyc2lvbiByYW5nZSBhbmQgaXMgY3VycmVudGx5IHBpbm5lZCB0byAke29wdGlvbnMuY2RrVmVyc2lvbn0uIFdlIHJlY29tbWVuZCBzZXR0aW5nIGl0IHRvIFwiXiR7b3B0aW9ucy5jZGtWZXJzaW9ufVwiLmApO1xuICAgIH1cblxuICAgIGlmIChzZW12ZXIudmFsaWQob3B0aW9ucy5jb25zdHJ1Y3RzVmVyc2lvbikpIHtcbiAgICAgIHRoaXMucHJvamVjdC5sb2dnZXIud2FybihgTk9USUNFOiBcImNvbnN0cnVjdHNWZXJzaW9uXCIgaXMgbm93IGEgdmVyc2lvbiByYW5nZSBhbmQgaXMgY3VycmVudGx5IHBpbm5lZCB0byAke29wdGlvbnMuY29uc3RydWN0c1ZlcnNpb259LiBXZSByZWNvbW1lbmQgc2V0dGluZyBpdCB0byBcIl4ke29wdGlvbnMuY29uc3RydWN0c1ZlcnNpb259XCIuYCk7XG4gICAgfVxuXG4gICAgdGhpcy5jZGtEZXBlbmRlbmNpZXNBc0RlcHMgPSBvcHRpb25zLmNka0RlcGVuZGVuY2llc0FzRGVwcyA/PyB0cnVlO1xuICAgIHRoaXMuY2RrVmVyc2lvbiA9IG9wdGlvbnMuY2RrVmVyc2lvbjtcbiAgICB0aGlzLmRlcGVuZGVuY3lUeXBlID0gb3B0aW9ucy5kZXBlbmRlbmN5VHlwZTtcblxuICAgIGNvbnN0IG12ID0gc2VtdmVyLm1pblZlcnNpb24odGhpcy5jZGtWZXJzaW9uKT8ubWFqb3I7XG4gICAgaWYgKCFtdikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZGV0ZXJtaW5lIENESyBtYWpvciB2ZXJzaW9uIGZvciAke212fWApO1xuICAgIH1cbiAgICB0aGlzLmNka01ham9yVmVyc2lvbiA9IG12O1xuXG4gICAgdGhpcy5hZGRGcmFtZXdvcmtEZXBlbmRlbmN5KG9wdGlvbnMpO1xuICAgIHRoaXMuYWRkVjFBc3NlcnRpb25MaWJyYXJ5RGVwZW5kZW5jeShvcHRpb25zKTtcblxuICAgIC8vIGFkZCBhIGRlcGVuZGVuY3kgb24gYGNvbnN0cnVjdHNgXG4gICAgdGhpcy5jb25zdHJ1Y3RzVmVyc2lvbiA9IHRoaXMuYWRkQ29uc3RydWN0c0RlcGVuZGVuY3kob3B0aW9ucy5jb25zdHJ1Y3RzVmVyc2lvbik7XG5cbiAgICB0aGlzLmFkZFYxRGVwZW5kZW5jaWVzKC4uLm9wdGlvbnMuY2RrRGVwZW5kZW5jaWVzID8/IFtdKTtcbiAgICB0aGlzLmFkZFYxRGV2RGVwZW5kZW5jaWVzKC4uLm9wdGlvbnMuY2RrVGVzdERlcGVuZGVuY2llcyA/PyBbXSk7XG4gIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgYWRkVjFEZXBlbmRlbmNpZXMoLi4uZGVwczogc3RyaW5nW10pIHtcbiAgICBpZiAoZGVwcy5sZW5ndGggPiAwICYmIHRoaXMuY2RrTWFqb3JWZXJzaW9uICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FkZFYxRGVwZW5kZW5jaWVzKCkgaXMgbm90IHN1cHBvcnRlZCBmb3IgQ0RLIDIueCBhbmQgYWJvdmUsIHVzZSBhZGREZXBzKCkgb3IgYWRkUGVlckRlcHMoKSBpbnN0ZWFkJyk7XG4gICAgfVxuXG4gICAgLy8gdGhpcyB3aWxsIGFkZCBkZXBlbmRlbmNpZXMgYmFzZWQgb24gdGhlIHR5cGUgcmVxdWVzdGVkIGJ5IHRoZSB1c2VyXG4gICAgLy8gZm9yIGxpYnJhcmllcywgdGhpcyB3aWxsIGJlIFwicGVlclwiIGFuZCBmb3IgYXBwcyBpdCB3aWxsIGJlIFwicnVudGltZVwiXG4gICAgdGhpcy5hZGRWMURlcGVuZGVuY2llc0J5VHlwZSh0aGlzLmRlcGVuZGVuY3lUeXBlLCAuLi5kZXBzKTtcblxuICAgIC8vIGFkZCBkZXBzIGFzIHJ1bnRpbWUgZGVwcyBpZiBgY2RrRGVwc0FzRGVwc2AgaXMgdHJ1ZVxuICAgIGlmICh0aGlzLmNka0RlcGVuZGVuY2llc0FzRGVwcykge1xuICAgICAgdGhpcy5hZGRWMURlcGVuZGVuY2llc0J5VHlwZShEZXBlbmRlbmN5VHlwZS5SVU5USU1FLCAuLi5kZXBzKTtcbiAgICB9XG4gIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICBwdWJsaWMgYWRkVjFEZXZEZXBlbmRlbmNpZXMoLi4uZGVwczogc3RyaW5nW10pIHtcbiAgICBpZiAoZGVwcy5sZW5ndGggPiAwICYmIHRoaXMuY2RrTWFqb3JWZXJzaW9uICE9PSAxKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ2FkZFYxRGV2RGVwZW5kZW5jaWVzKCkgaXMgbm90IHN1cHBvcnRlZCBmb3IgQ0RLIDIueCBhbmQgYWJvdmUsIHVzZSBhZGREZXZEZXBzKCkgaW5zdGVhZCcpO1xuICAgIH1cblxuICAgIHRoaXMuYWRkVjFEZXBlbmRlbmNpZXNCeVR5cGUoRGVwZW5kZW5jeVR5cGUuQlVJTEQsIC4uLmRlcHMpO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRDb25zdHJ1Y3RzRGVwZW5kZW5jeShyZXF1ZXN0ZWRWZXJzaW9uOiBzdHJpbmcgfCB1bmRlZmluZWQpIHtcbiAgICBjb25zdCBkZWZhdWx0Q29uc3RydWN0c1ZlcnNpb24gPSB0aGlzLmNka01ham9yVmVyc2lvbiA9PT0gMSA/ICdeMy4yLjI3JyA6ICdeMTAuMC41JztcbiAgICBjb25zdCBjb25zdHJ1Y3RzVmVyc2lvbiA9IHJlcXVlc3RlZFZlcnNpb24gPz8gZGVmYXVsdENvbnN0cnVjdHNWZXJzaW9uO1xuXG4gICAgY29uc3QgY29uc3RydWN0c01ham9yVmVyc2lvbiA9IHNlbXZlci5taW5WZXJzaW9uKGNvbnN0cnVjdHNWZXJzaW9uKT8ubWFqb3I7XG4gICAgaWYgKCFjb25zdHJ1Y3RzTWFqb3JWZXJzaW9uKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBkZXRlcm1pbmUgbWFqb3IgdmVyc2lvbiBvZiBjb25zdHJ1Y3RzIHZlcnNpb24gJyR7Y29uc3RydWN0c1ZlcnNpb259J2ApO1xuICAgIH1cblxuICAgIHN3aXRjaCAodGhpcy5jZGtNYWpvclZlcnNpb24pIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgaWYgKGNvbnN0cnVjdHNNYWpvclZlcnNpb24gIT09IDMpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0FXUyBDREsgMS54IHJlcXVpcmVzIGNvbnN0cnVjdHMgMy54Jyk7XG4gICAgICAgIH1cbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIGNhc2UgMjpcbiAgICAgICAgaWYgKGNvbnN0cnVjdHNNYWpvclZlcnNpb24gIT09IDEwKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBV1MgQ0RLIDIueCByZXF1aXJlcyBjb25zdHJ1Y3RzIDEwLngnKTtcbiAgICAgICAgfVxuICAgICAgICBicmVhaztcbiAgICB9XG5cbiAgICB0aGlzLnByb2plY3QuZGVwcy5hZGREZXBlbmRlbmN5KGBjb25zdHJ1Y3RzQCR7Y29uc3RydWN0c1ZlcnNpb259YCwgdGhpcy5kZXBlbmRlbmN5VHlwZSk7XG5cbiAgICByZXR1cm4gY29uc3RydWN0c1ZlcnNpb247XG4gIH1cblxuICAvKipcbiAgICogQWRkc2EgZGVwZGVuZW5jaWVzIG9uIHRoZSBBV1MgQ0RLIGZyYW1ld29yayAoZS5nLiBgQGF3cy1jZGsvY29yZWAgZm9yIFYxIG9yIGBhd3MtY2RrLWxpYmAgZm9yIFYxKS5cbiAgICovXG4gIHByaXZhdGUgYWRkRnJhbWV3b3JrRGVwZW5kZW5jeShvcHRpb25zOiBBd3NDZGtEZXBzT3B0aW9ucykge1xuICAgIHN3aXRjaCAodGhpcy5jZGtNYWpvclZlcnNpb24pIHtcbiAgICAgIGNhc2UgMTpcbiAgICAgICAgdGhpcy5hZGRWMURlcGVuZGVuY2llcygnQGF3cy1jZGsvY29yZScpO1xuICAgICAgICBicmVhaztcblxuICAgICAgY2FzZSAyOlxuICAgICAgICBpZiAob3B0aW9ucy5jZGtEZXBlbmRlbmNpZXMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY2RrRGVwZW5kZW5jaWVzIGlzIG5vdCB1c2VkIGZvciBDREsgMi54LiBVc2UgXCJwZWVyRGVwc1wiIGluc3RlYWQnKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAob3B0aW9ucy5jZGtEZXBlbmRlbmNpZXNBc0RlcHMgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY2RrRGVwZW5kZW5jaWVzQXNEZXBzIGlzIG5vdCB1c2VkIGZvciBDREsgMi54Jyk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMuY2RrVGVzdERlcGVuZGVuY2llcyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjZGtUZXN0RGVwZW5kZW5jaWVzIGlzIG5vdCB1c2VkIGZvciBDREsgMi54LiBVc2UgXCJkZXZEZXBzXCIgaW5zdGVhZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5wcm9qZWN0LmRlcHMuYWRkRGVwZW5kZW5jeShgYXdzLWNkay1saWJAJHt0aGlzLmNka1ZlcnNpb259YCwgdGhpcy5kZXBlbmRlbmN5VHlwZSk7XG4gICAgICAgIGJyZWFrO1xuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFVuc3VwcG9ydGVkIEFXUyBDREsgbWFqb3IgdmVyc2lvbiAke3RoaXMuY2RrTWFqb3JWZXJzaW9ufS54YCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRWMUFzc2VydGlvbkxpYnJhcnlEZXBlbmRlbmN5KG9wdGlvbnM6IEF3c0Nka0RlcHNPcHRpb25zKSB7XG4gICAgaWYgKHRoaXMuY2RrTWFqb3JWZXJzaW9uICE9PSAxKSB7XG4gICAgICBpZiAob3B0aW9ucy5jZGtBc3NlcnQgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2Nka0Fzc2VydCBpcyBub3QgdXNlZCBmb3IgQ0RLIDIueC4gVXNlIHRoZSBhc3NlcnRpb25zIGxpYnJhcnkgdGhhdCBpcyBwcm92aWRlZCBpbiBhd3MtY2RrLWxpYicpO1xuICAgICAgfVxuICAgICAgaWYgKG9wdGlvbnMuY2RrQXNzZXJ0aW9ucyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY2RrQXNzZXJ0aW9uIGlzIG5vdCB1c2VkIGZvciBDREsgMi54LiBVc2UgdGhlIGFzc2VydGlvbnMgbGlicmFyeSB0aGF0IGlzIHByb3ZpZGVkIGluIGF3cy1jZGstbGliJyk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCB0ZXN0RGVwcyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgaWYgKG9wdGlvbnMuY2RrQXNzZXJ0KSB7XG4gICAgICB0ZXN0RGVwcy5wdXNoKCdAYXdzLWNkay9hc3NlcnQnKTtcbiAgICB9XG5cbiAgICBpZiAob3B0aW9ucy5jZGtBc3NlcnRpb25zID8/IHRydWUpIHtcbiAgICAgIHRlc3REZXBzLnB1c2goJ0Bhd3MtY2RrL2Fzc2VydGlvbnMnKTtcbiAgICB9XG5cbiAgICB0aGlzLmFkZFYxRGVwZW5kZW5jaWVzQnlUeXBlKERlcGVuZGVuY3lUeXBlLlRFU1QsIC4uLnRlc3REZXBzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGEgc2V0IG9mIGRlcGVuZGVuY2llcyB3aXRoIHRoZSB1c2VyLXNwZWNpZmllZCBkZXBlbmRlbmN5IHR5cGUuXG4gICAqIEBwYXJhbSBkZXBzIFRoZSBzZXQgb2YgZGVwZW5kZW5jeSBzcGVjaWZpY2F0aW9uc1xuICAgKi9cbiAgcHJpdmF0ZSBhZGRWMURlcGVuZGVuY2llc0J5VHlwZSh0eXBlOiBEZXBlbmRlbmN5VHlwZSwgLi4ubW9kdWxlczogc3RyaW5nW10pIHtcbiAgICBmb3IgKGNvbnN0IG1vZHVsZSBvZiBtb2R1bGVzKSB7XG4gICAgICB0aGlzLnByb2plY3QuZGVwcy5hZGREZXBlbmRlbmN5KGAke21vZHVsZX1AJHt0aGlzLmNka1ZlcnNpb259YCwgdHlwZSk7XG4gICAgfVxuICB9XG59Il19