projen 0.100.0 → 0.100.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.
- package/.jsii +44 -25
- package/lib/ai-instructions.js +2 -2
- package/lib/awscdk/auto-discover.js +6 -6
- package/lib/awscdk/awscdk-app-java.js +1 -1
- package/lib/awscdk/awscdk-app-py.js +1 -1
- package/lib/awscdk/awscdk-app-ts.js +1 -1
- package/lib/awscdk/awscdk-construct.js +1 -1
- package/lib/awscdk/awscdk-deps-java.js +1 -1
- package/lib/awscdk/awscdk-deps-js.js +1 -1
- package/lib/awscdk/awscdk-deps-py.js +1 -1
- package/lib/awscdk/awscdk-deps.js +1 -1
- package/lib/awscdk/cdk-config.js +3 -3
- package/lib/awscdk/cdk-tasks.js +1 -1
- package/lib/awscdk/integration-test.js +1 -1
- package/lib/awscdk/lambda-extension.js +1 -1
- package/lib/awscdk/lambda-function.js +2 -2
- package/lib/build/build-workflow.js +1 -1
- package/lib/cdk/auto-discover-base.js +2 -2
- package/lib/cdk/construct-lib.js +1 -1
- package/lib/cdk/integration-test-base.js +1 -1
- package/lib/cdk/jsii-build.js +1 -1
- package/lib/cdk/jsii-docgen.js +1 -1
- package/lib/cdk/jsii-project.js +1 -1
- package/lib/cdk8s/auto-discover.js +2 -2
- package/lib/cdk8s/cdk8s-app-py.js +1 -1
- package/lib/cdk8s/cdk8s-app-ts.js +1 -1
- package/lib/cdk8s/cdk8s-construct.js +1 -1
- package/lib/cdk8s/cdk8s-deps-py.js +1 -1
- package/lib/cdk8s/cdk8s-deps.js +1 -1
- package/lib/cdk8s/integration-test.js +1 -1
- package/lib/cdktf/cdktf-construct.js +1 -1
- package/lib/circleci/circleci.js +1 -1
- package/lib/cli/task-runtime.d.ts +31 -1
- package/lib/cli/task-runtime.js +77 -6
- package/lib/common.d.ts +9 -0
- package/lib/common.js +11 -2
- package/lib/component.js +1 -1
- package/lib/dependencies.js +1 -1
- package/lib/dev-env.js +1 -1
- package/lib/docker-compose/docker-compose-service.js +1 -1
- package/lib/docker-compose/docker-compose.js +1 -1
- package/lib/file.js +1 -1
- package/lib/gitattributes.js +1 -1
- package/lib/github/actions-provider.js +1 -1
- package/lib/github/auto-approve.js +1 -1
- package/lib/github/auto-merge.js +1 -1
- package/lib/github/auto-queue.js +1 -1
- package/lib/github/dependabot.js +1 -1
- package/lib/github/dependency-review.js +1 -1
- package/lib/github/github-credentials.js +1 -1
- package/lib/github/github-project.js +1 -1
- package/lib/github/github.js +1 -1
- package/lib/github/merge-queue.js +1 -1
- package/lib/github/mergify.js +1 -1
- package/lib/github/pr-template.js +1 -1
- package/lib/github/pull-request-backport.js +1 -1
- package/lib/github/pull-request-lint.js +1 -1
- package/lib/github/stale.js +1 -1
- package/lib/github/task-workflow-job.js +1 -1
- package/lib/github/task-workflow.js +1 -1
- package/lib/github/workflow-actions.js +1 -1
- package/lib/github/workflow-jobs.js +1 -1
- package/lib/github/workflow-steps.js +1 -1
- package/lib/github/workflows.js +1 -1
- package/lib/gitlab/configuration.js +1 -1
- package/lib/gitlab/gitlab-configuration.js +1 -1
- package/lib/gitlab/nested-configuration.js +1 -1
- package/lib/gitpod.js +1 -1
- package/lib/ignore-file.js +1 -1
- package/lib/ini.js +1 -1
- package/lib/java/java-project.js +1 -1
- package/lib/java/junit.js +1 -1
- package/lib/java/maven-compile.js +1 -1
- package/lib/java/maven-packaging.js +1 -1
- package/lib/java/maven-sample.js +1 -1
- package/lib/java/pom.js +2 -2
- package/lib/java/projenrc.js +1 -1
- package/lib/javascript/biome/biome.js +1 -1
- package/lib/javascript/bundler.js +1 -1
- package/lib/javascript/eslint.js +1 -1
- package/lib/javascript/jest.js +4 -4
- package/lib/javascript/license-checker.js +1 -1
- package/lib/javascript/node-package.js +1 -1
- package/lib/javascript/node-project.js +1 -1
- package/lib/javascript/npm-config.js +1 -1
- package/lib/javascript/prettier.js +1 -1
- package/lib/javascript/projenrc.js +1 -1
- package/lib/javascript/typescript-config.js +2 -2
- package/lib/javascript/upgrade-dependencies.js +2 -2
- package/lib/javascript/yarnrc.js +1 -1
- package/lib/json-patch.js +1 -1
- package/lib/json.js +1 -1
- package/lib/license.js +1 -1
- package/lib/logger.js +1 -1
- package/lib/makefile.js +1 -1
- package/lib/object-file.js +1 -1
- package/lib/project-build.js +1 -1
- package/lib/project-tree.js +1 -1
- package/lib/project.js +1 -1
- package/lib/projects.js +1 -1
- package/lib/projenrc-json.js +1 -1
- package/lib/projenrc.js +1 -1
- package/lib/python/pip.js +1 -1
- package/lib/python/poetry.js +2 -2
- package/lib/python/projenrc.js +1 -1
- package/lib/python/pyproject-toml-file.js +1 -1
- package/lib/python/pytest-sample.js +1 -1
- package/lib/python/pytest.js +1 -1
- package/lib/python/python-project.js +1 -1
- package/lib/python/python-sample.js +1 -1
- package/lib/python/requirements-file.js +1 -1
- package/lib/python/setuppy.js +1 -1
- package/lib/python/setuptools.js +1 -1
- package/lib/python/uv.js +1 -1
- package/lib/python/venv.js +1 -1
- package/lib/readme.js +1 -1
- package/lib/release/publisher.js +1 -1
- package/lib/release/release-trigger.js +1 -1
- package/lib/release/release.js +1 -1
- package/lib/renovatebot.js +1 -1
- package/lib/run-task.cjs +71 -11
- package/lib/sample-file.js +2 -2
- package/lib/source-code.js +1 -1
- package/lib/task-model.d.ts +10 -0
- package/lib/task-model.js +1 -1
- package/lib/task-runner.js +10 -2
- package/lib/task.js +1 -1
- package/lib/tasks.js +3 -3
- package/lib/testing.js +1 -1
- package/lib/textfile.js +1 -1
- package/lib/toml.js +1 -1
- package/lib/typescript/projenrc-ts.js +1 -1
- package/lib/typescript/projenrc.js +1 -1
- package/lib/typescript/typescript-typedoc.js +1 -1
- package/lib/typescript/typescript.js +5 -5
- package/lib/version.js +2 -2
- package/lib/vscode/devcontainer.js +1 -1
- package/lib/vscode/extensions.js +1 -1
- package/lib/vscode/launch-config.js +1 -1
- package/lib/vscode/settings.js +1 -1
- package/lib/vscode/vscode.js +1 -1
- package/lib/web/next.js +3 -3
- package/lib/web/postcss.js +1 -1
- package/lib/web/react.js +3 -3
- package/lib/web/tailwind.js +1 -1
- package/lib/xmlfile.js +1 -1
- package/lib/yaml.js +1 -1
- package/package.json +4 -4
|
@@ -21,12 +21,25 @@ export declare class TaskRuntime {
|
|
|
21
21
|
/**
|
|
22
22
|
* The contents of tasks.json
|
|
23
23
|
*/
|
|
24
|
-
|
|
24
|
+
private _manifest;
|
|
25
|
+
/**
|
|
26
|
+
* The raw contents of the currently loaded manifest, used to detect changes
|
|
27
|
+
* on disk so the runtime can reload a regenerated manifest mid-run.
|
|
28
|
+
*/
|
|
29
|
+
private _identity?;
|
|
25
30
|
/**
|
|
26
31
|
* The root directory of the project and the cwd for executing tasks.
|
|
27
32
|
*/
|
|
28
33
|
readonly workdir: string;
|
|
29
34
|
constructor(workdir: string);
|
|
35
|
+
/**
|
|
36
|
+
* The contents of tasks.json
|
|
37
|
+
*/
|
|
38
|
+
get manifest(): TasksManifest;
|
|
39
|
+
/**
|
|
40
|
+
* The absolute path of the tasks manifest file.
|
|
41
|
+
*/
|
|
42
|
+
private get manifestPath();
|
|
30
43
|
/**
|
|
31
44
|
* The tasks in this project.
|
|
32
45
|
*/
|
|
@@ -42,4 +55,21 @@ export declare class TaskRuntime {
|
|
|
42
55
|
runTask(name: string, parents?: string[], args?: Array<string | number>, env?: {
|
|
43
56
|
[name: string]: string;
|
|
44
57
|
}): Promise<void>;
|
|
58
|
+
/**
|
|
59
|
+
* Re-reads the tasks manifest from disk if its contents changed since it was
|
|
60
|
+
* last loaded, verifying its schema version along the way.
|
|
61
|
+
*
|
|
62
|
+
* Change detection compares the raw file contents, so an unchanged manifest
|
|
63
|
+
* is not re-verified or re-adopted.
|
|
64
|
+
*/
|
|
65
|
+
private reloadManifestIfChanged;
|
|
66
|
+
/**
|
|
67
|
+
* Validates a freshly read manifest:
|
|
68
|
+
*
|
|
69
|
+
* - Legacy manifests (no `manifestVersion`) are accepted as-is for backwards
|
|
70
|
+
* compatibility.
|
|
71
|
+
* - Manifests from a newer projen (a higher `manifestVersion`) are accepted
|
|
72
|
+
* with a warning, since this runtime may not understand the schema.
|
|
73
|
+
*/
|
|
74
|
+
private verifyManifest;
|
|
45
75
|
}
|
package/lib/cli/task-runtime.js
CHANGED
|
@@ -84,17 +84,33 @@ class TaskRuntime {
|
|
|
84
84
|
/**
|
|
85
85
|
* The contents of tasks.json
|
|
86
86
|
*/
|
|
87
|
-
|
|
87
|
+
_manifest = { tasks: {} };
|
|
88
|
+
/**
|
|
89
|
+
* The raw contents of the currently loaded manifest, used to detect changes
|
|
90
|
+
* on disk so the runtime can reload a regenerated manifest mid-run.
|
|
91
|
+
*/
|
|
92
|
+
_identity;
|
|
88
93
|
/**
|
|
89
94
|
* The root directory of the project and the cwd for executing tasks.
|
|
90
95
|
*/
|
|
91
96
|
workdir;
|
|
92
97
|
constructor(workdir) {
|
|
93
98
|
this.workdir = (0, path_1.resolve)(workdir);
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
99
|
+
// Perform the initial load. This also verifies the manifest's schema
|
|
100
|
+
// version.
|
|
101
|
+
this.reloadManifestIfChanged();
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* The contents of tasks.json
|
|
105
|
+
*/
|
|
106
|
+
get manifest() {
|
|
107
|
+
return this._manifest;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* The absolute path of the tasks manifest file.
|
|
111
|
+
*/
|
|
112
|
+
get manifestPath() {
|
|
113
|
+
return (0, path_1.join)(this.workdir, TaskRuntime.MANIFEST_FILE);
|
|
98
114
|
}
|
|
99
115
|
/**
|
|
100
116
|
* The tasks in this project.
|
|
@@ -116,12 +132,67 @@ class TaskRuntime {
|
|
|
116
132
|
* @param name The task name.
|
|
117
133
|
*/
|
|
118
134
|
async runTask(name, parents = [], args = [], env = {}) {
|
|
135
|
+
// A previously executed task (most importantly the "default"/synth task,
|
|
136
|
+
// which `build` spawns first) may have regenerated `.projen/tasks.json`.
|
|
137
|
+
// Pick up any such changes before resolving and running this task so we
|
|
138
|
+
// never execute a stale, in-memory definition.
|
|
139
|
+
this.reloadManifestIfChanged();
|
|
119
140
|
const task = this.tryFindTask(name);
|
|
120
141
|
if (!task) {
|
|
121
142
|
throw new Error(`cannot find command ${name}`);
|
|
122
143
|
}
|
|
123
144
|
await new RunTask(this, task, parents, args, env).run();
|
|
124
145
|
}
|
|
146
|
+
/**
|
|
147
|
+
* Re-reads the tasks manifest from disk if its contents changed since it was
|
|
148
|
+
* last loaded, verifying its schema version along the way.
|
|
149
|
+
*
|
|
150
|
+
* Change detection compares the raw file contents, so an unchanged manifest
|
|
151
|
+
* is not re-verified or re-adopted.
|
|
152
|
+
*/
|
|
153
|
+
reloadManifestIfChanged() {
|
|
154
|
+
if (!(0, fs_1.existsSync)(this.manifestPath)) {
|
|
155
|
+
// No manifest on disk: treat as an empty project (legacy behavior).
|
|
156
|
+
this._manifest = { tasks: {} };
|
|
157
|
+
this._identity = undefined;
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
const raw = (0, fs_1.readFileSync)(this.manifestPath, "utf-8");
|
|
161
|
+
if (raw === this._identity) {
|
|
162
|
+
return; // unchanged since the last load
|
|
163
|
+
}
|
|
164
|
+
const manifest = parseConflictJSON(raw, undefined, "theirs");
|
|
165
|
+
// A previously loaded manifest means this is a *reload* (e.g. the
|
|
166
|
+
// "default"/synth task regenerated the file mid-run), as opposed to the
|
|
167
|
+
// initial load performed by the constructor.
|
|
168
|
+
const isReload = this._identity !== undefined;
|
|
169
|
+
this.verifyManifest(manifest);
|
|
170
|
+
this._manifest = manifest;
|
|
171
|
+
this._identity = raw;
|
|
172
|
+
if (isReload) {
|
|
173
|
+
logging.debug(`${TaskRuntime.MANIFEST_FILE} changed on disk; successfully loaded the new tasks manifest.`);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Validates a freshly read manifest:
|
|
178
|
+
*
|
|
179
|
+
* - Legacy manifests (no `manifestVersion`) are accepted as-is for backwards
|
|
180
|
+
* compatibility.
|
|
181
|
+
* - Manifests from a newer projen (a higher `manifestVersion`) are accepted
|
|
182
|
+
* with a warning, since this runtime may not understand the schema.
|
|
183
|
+
*/
|
|
184
|
+
verifyManifest(manifest) {
|
|
185
|
+
// Backwards compatibility: manifests generated before versioning carry no
|
|
186
|
+
// version.
|
|
187
|
+
if (manifest.manifestVersion === undefined) {
|
|
188
|
+
return;
|
|
189
|
+
}
|
|
190
|
+
if (manifest.manifestVersion > common_1.TASKS_MANIFEST_VERSION) {
|
|
191
|
+
logging.warn(`${TaskRuntime.MANIFEST_FILE} was generated by a newer version of projen ` +
|
|
192
|
+
`(manifest version ${manifest.manifestVersion}, this projen supports up to ${common_1.TASKS_MANIFEST_VERSION}). ` +
|
|
193
|
+
`Some tasks may not behave as expected; consider upgrading projen.`);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
125
196
|
}
|
|
126
197
|
exports.TaskRuntime = TaskRuntime;
|
|
127
198
|
class RunTask {
|
|
@@ -408,4 +479,4 @@ class RunTask {
|
|
|
408
479
|
return `"${process.execPath}" "${program}"`;
|
|
409
480
|
}
|
|
410
481
|
}
|
|
411
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1ydW50aW1lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS90YXNrLXJ1bnRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsaURBQTBDO0FBQzFDLDJCQUF3RDtBQUN4RCwrQkFBOEM7QUFDOUMsMkNBQTZCO0FBQzdCLCtCQUE4QjtBQUM5QixpQ0FBd0M7QUFDeEMsNkJBQXdCO0FBQ3hCLHNDQUF1QztBQUN2QyxvREFBc0M7QUFHdEMscUVBQXFFO0FBQ3JFLGdGQUFnRjtBQUNoRixnRkFBZ0Y7QUFDaEYsMkVBQTJFO0FBQzNFLG1FQUFtRTtBQUNuRSxpRUFBaUU7QUFDakUsTUFBTSx1QkFBdUIsR0FBRyxPQUFPLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUMvRCxNQUFNLGlCQUFpQixHQUNyQix1QkFBdUIsRUFBRSxPQUFPLElBQUksdUJBQXVCLENBQUM7QUFFOUQsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO0FBQ3hCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQztBQUN6QixNQUFNLGtCQUFrQixHQUFHLElBQUksV0FBVyxHQUFHLENBQUM7QUFrQzlDOztHQUVHO0FBQ0gsTUFBYSxXQUFXO0lBQ3RCOztPQUVHO0lBQ0ksTUFBTSxDQUFVLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDcEQsbUJBQVUsRUFDVixZQUFZLENBQ2IsQ0FBQztJQUVGOzs7Ozs7Ozs7T0FTRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQWUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDaEIsT0FB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SUFBSTtZQUNYLEdBQUcsT0FBTztZQUNWLFlBQVksRUFBRTtnQkFDWixLQUFLLEVBQUUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQzthQUNuQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxhQUFhLENBQUMsT0FBZTtRQUNuQywwRUFBMEU7UUFDMUUsMEVBQTBFO1FBQzFFLDJFQUEyRTtRQUMzRSx1RUFBdUU7UUFDdkUsd0VBQXdFO1FBQ3hFLElBQUksVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUMzQixPQUFPLENBQUMsSUFBQSxlQUFVLEVBQUMsSUFBQSxXQUFJLEVBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNyRCxNQUFNLE1BQU0sR0FBRyxJQUFBLGNBQU8sRUFBQyxVQUFVLENBQUMsQ0FBQztZQUNuQyxJQUFJLE1BQU0sS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1lBQzlELENBQUM7WUFDRCxVQUFVLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUM3QixJQUFBLFdBQUksRUFBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLEdBQUcsT0FBTyxVQUFVLENBQUMsQ0FDOUMsQ0FBQztRQUNGLE9BQU8sSUFBSSxPQUFPLENBQUMsUUFBUSxNQUFNLE9BQU8sR0FBRyxDQUFDO0lBQzlDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU3Bhd25PcHRpb25zIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IHNwYXduU3luYyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMsIHN0YXRTeW5jIH0gZnJvbSBcImZzXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luLCByZXNvbHZlIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGZvcm1hdCB9IGZyb20gXCJ1dGlsXCI7XG5pbXBvcnQgeyBncmF5LCB1bmRlcmxpbmUgfSBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCB7ICQgfSBmcm9tIFwiZGF4XCI7XG5pbXBvcnQgeyBQUk9KRU5fRElSIH0gZnJvbSBcIi4uL2NvbW1vblwiO1xuaW1wb3J0ICogYXMgbG9nZ2luZyBmcm9tIFwiLi4vbG9nZ2luZ1wiO1xuaW1wb3J0IHR5cGUgeyBUYXNrc01hbmlmZXN0LCBUYXNrU3BlYywgVGFza1N0ZXAgfSBmcm9tIFwiLi4vdGFzay1tb2RlbFwiO1xuXG4vLyBhdm9pZHMgYSAoZmFsc2UgcG9zaXRpdmUpIGVzYnVpbGQgd2FybmluZyBhYm91dCBpbmNvcnJlY3QgaW1wb3J0cy5cbi8vIGA/LmRlZmF1bHQgPz8gbW9kdWxlYCBrZWVwcyB0aGlzIHdvcmtpbmcgYm90aCBhcyBhIHBsYWluIENvbW1vbkpTIHJlcXVpcmUgYW5kXG4vLyB3aGVuIHRoZSBkZXBlbmRlbmN5IGlzIGludGVyb3Atd3JhcHBlZCBpbnNpZGUgdGhlIGJ1bmRsZWQgcnVuLXRhc2suY2pzICh3aGVyZVxuLy8gYHJlcXVpcmUoLi4uKWAgbWF5IHlpZWxkIGB7IGRlZmF1bHQ6IGZuIH1gIGluc3RlYWQgb2YgdGhlIGZ1bmN0aW9uKS4gU2VlXG4vLyBwcm9qZW4jNDQwNyAoXCJwYXJzZUNvbmZsaWN0SlNPTiBpcyBub3QgYSBmdW5jdGlvblwiIGFmdGVyIGVqZWN0KS5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG5jb25zdCBwYXJzZUNvbmZsaWN0SlNPTk1vZHVsZSA9IHJlcXVpcmUoXCJwYXJzZS1jb25mbGljdC1qc29uXCIpO1xuY29uc3QgcGFyc2VDb25mbGljdEpTT04gPVxuICBwYXJzZUNvbmZsaWN0SlNPTk1vZHVsZT8uZGVmYXVsdCA/PyBwYXJzZUNvbmZsaWN0SlNPTk1vZHVsZTtcblxuY29uc3QgRU5WX1RSSU1fTEVOID0gMjA7XG5jb25zdCBBUkdTX01BUktFUiA9IFwiJEBcIjtcbmNvbnN0IFFVT1RFRF9BUkdTX01BUktFUiA9IGBcIiR7QVJHU19NQVJLRVJ9XCJgO1xuXG4vKipcbiAqIFRoZSByZXN1bHQgb2YgZXhlY3V0aW5nIGEgc2hlbGwgY29tbWFuZC5cbiAqXG4gKiBUaGlzIGlzIGEgbm9ybWFsaXplZCBzdWJzZXQgb2Ygbm9kZSdzIGBTcGF3blN5bmNSZXR1cm5zYCBzbyB0aGF0IHRoZVxuICogc3luY2hyb25vdXMgKGBzcGF3blN5bmNgKSBhbmQgYXN5bmNocm9ub3VzIChgZGF4YCkgZXhlY3V0aW9uIHBhdGhzIGNhbiByZXR1cm5cbiAqIGEgY29tcGF0aWJsZSBzaGFwZS5cbiAqL1xuaW50ZXJmYWNlIFNoZWxsUmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSBleGl0IGNvZGUgb2YgdGhlIGNvbW1hbmQsIG9yIGBudWxsYCBpZiB0aGUgcHJvY2VzcyB3YXMgdGVybWluYXRlZCBieSBhXG4gICAqIHNpZ25hbCBvciBuZXZlciBzcGF3bmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzOiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBDYXB0dXJlZCBzdGRvdXQuIE9ubHkgcG9wdWxhdGVkIHdoZW4gc3Rkb3V0IGlzIHBpcGVkIChlLmcuIHdoZW4gZXZhbHVhdGluZ1xuICAgKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMpOyBgbnVsbGAvYHVuZGVmaW5lZGAgd2hlbiBzdGRpbyBpcyBpbmhlcml0ZWQuXG4gICAqL1xuICByZWFkb25seSBzdGRvdXQ/OiBCdWZmZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBDYXB0dXJlZCBzdGRlcnIuIFNlZSBgc3Rkb3V0YC5cbiAgICovXG4gIHJlYWRvbmx5IHN0ZGVycj86IEJ1ZmZlciB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEFuIGVycm9yIHJhaXNlZCB3aGlsZSBhdHRlbXB0aW5nIHRvIHNwYXduIHRoZSBjb21tYW5kIChub3QgYSBub24temVybyBleGl0XG4gICAqIGNvZGUsIHdoaWNoIGlzIHJlcG9ydGVkIHZpYSBgc3RhdHVzYCkuXG4gICAqL1xuICByZWFkb25seSBlcnJvcj86IEVycm9yO1xufVxuXG4vKipcbiAqIFRoZSBydW50aW1lIGNvbXBvbmVudCBvZiB0aGUgdGFza3MgZW5naW5lLlxuICovXG5leHBvcnQgY2xhc3MgVGFza1J1bnRpbWUge1xuICAvKipcbiAgICogVGhlIHByb2plY3QtcmVsYXRpdmUgcGF0aCBvZiB0aGUgdGFza3MgbWFuaWZlc3QgZmlsZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTUFOSUZFU1RfRklMRSA9IHBhdGgucG9zaXguam9pbihcbiAgICBQUk9KRU5fRElSLFxuICAgIFwidGFza3MuanNvblwiLFxuICApO1xuXG4gIC8qKlxuICAgKiBPbmUtc2hvdCBlbnRyeXBvaW50IGZvciB0aGUgc3RhbmRhbG9uZSB0YXNrIHJ1bm5lci5cbiAgICpcbiAgICogQ3JlYXRlcyBhIHJ1bnRpbWUgcm9vdGVkIGF0IHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LCBydW5zIHRoZSBuYW1lZFxuICAgKiB0YXNrLCBhbmQgY29udmVydHMgYW55IGZhaWx1cmUgaW50byBhIG5vbi16ZXJvIHByb2Nlc3MgZXhpdCBjb2RlLiBUaGlzIGlzXG4gICAqIHRoZSBzaW5nbGUgbGluZSBpbnZva2VkIGJ5IHRoZSBidW5kbGVkIGBzY3JpcHRzL3J1bi10YXNrLmNqc2AgdGhhdFxuICAgKiBcInByb2plbiBlamVjdFwiIGVtaXRzLCB3aGljaCBrZWVwcyB0aGUgZ2VuZXJhdGVkIGJ1bmRsZSBmb290ZXIgdHJpdmlhbC5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHRhc2sgdG8gcnVuLiBEZWZhdWx0cyB0byBgcHJvY2Vzcy5hcmd2WzJdYC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgbWFpbihuYW1lOiBzdHJpbmcgPSBwcm9jZXNzLmFyZ3ZbMl0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgbmV3IFRhc2tSdW50aW1lKFwiLlwiKS5ydW5UYXNrKG5hbWUpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihlPy5zdGFjayA/PyBTdHJpbmcoZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudHMgb2YgdGFza3MuanNvblxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1hbmlmZXN0OiBUYXNrc01hbmlmZXN0O1xuXG4gIC8qKlxuICAgKiBUaGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhlIHByb2plY3QgYW5kIHRoZSBjd2QgZm9yIGV4ZWN1dGluZyB0YXNrcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSB3b3JrZGlyOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Iod29ya2Rpcjogc3RyaW5nKSB7XG4gICAgdGhpcy53b3JrZGlyID0gcmVzb2x2ZSh3b3JrZGlyKTtcbiAgICBjb25zdCBtYW5pZmVzdFBhdGggPSBqb2luKHRoaXMud29ya2RpciwgVGFza1J1bnRpbWUuTUFOSUZFU1RfRklMRSk7XG4gICAgdGhpcy5tYW5pZmVzdCA9IGV4aXN0c1N5bmMobWFuaWZlc3RQYXRoKVxuICAgICAgPyBwYXJzZUNvbmZsaWN0SlNPTihcbiAgICAgICAgICByZWFkRmlsZVN5bmMobWFuaWZlc3RQYXRoLCBcInV0Zi04XCIpLFxuICAgICAgICAgIHVuZGVmaW5lZCxcbiAgICAgICAgICBcInRoZWlyc1wiLFxuICAgICAgICApXG4gICAgICA6IHsgdGFza3M6IHt9IH07XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRhc2tzIGluIHRoaXMgcHJvamVjdC5cbiAgICovXG4gIHB1YmxpYyBnZXQgdGFza3MoKTogVGFza1NwZWNbXSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5tYW5pZmVzdC50YXNrcyA/PyB7fSk7XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhIHRhc2sgYnkgbmFtZSwgb3IgYHVuZGVmaW5lZGAgaWYgbm90IGZvdW5kLlxuICAgKi9cbiAgcHVibGljIHRyeUZpbmRUYXNrKG5hbWU6IHN0cmluZyk6IFRhc2tTcGVjIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMubWFuaWZlc3QudGFza3MpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm1hbmlmZXN0LnRhc2tzW25hbWVdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgdGhlIHRhc2suXG4gICAqIEBwYXJhbSBuYW1lIFRoZSB0YXNrIG5hbWUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcnVuVGFzayhcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcGFyZW50czogc3RyaW5nW10gPSBbXSxcbiAgICBhcmdzOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+ID0gW10sXG4gICAgZW52OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB0YXNrID0gdGhpcy50cnlGaW5kVGFzayhuYW1lKTtcbiAgICBpZiAoIXRhc2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgY2Fubm90IGZpbmQgY29tbWFuZCAke25hbWV9YCk7XG4gICAgfVxuXG4gICAgYXdhaXQgbmV3IFJ1blRhc2sodGhpcywgdGFzaywgcGFyZW50cywgYXJncywgZW52KS5ydW4oKTtcbiAgfVxufVxuXG5jbGFzcyBSdW5UYXNrIHtcbiAgcHJpdmF0ZSBlbnY6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9ID0ge307XG4gIHByaXZhdGUgcmVhZG9ubHkgcGFyZW50czogc3RyaW5nW107XG5cbiAgcHJpdmF0ZSByZWFkb25seSB3b3JrZGlyOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBydW50aW1lOiBUYXNrUnVudGltZSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IHRhc2s6IFRhc2tTcGVjLFxuICAgIHBhcmVudHM6IHN0cmluZ1tdID0gW10sXG4gICAgcHJpdmF0ZSByZWFkb25seSBhcmdzOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+ID0gW10sXG4gICAgcHJpdmF0ZSByZWFkb25seSBlbnZQYXJhbTogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fSxcbiAgKSB7XG4gICAgdGhpcy53b3JrZGlyID0gdGFzay5jd2QgPz8gdGhpcy5ydW50aW1lLndvcmtkaXI7XG4gICAgdGhpcy5wYXJlbnRzID0gcGFyZW50cztcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGVjdXRlcyB0aGUgdGFzay4gVGhpcyB3YXMgcHJldmlvdXNseSBkb25lIGluIHRoZSBjb25zdHJ1Y3RvciwgYnV0IGlzIG5vd1xuICAgKiBhbiBhc3luYyBtZXRob2Qgc2luY2Ugc2hlbGwgZXhlY3V0aW9uIGlzIGFzeW5jaHJvbm91cyAoZS5nLiBkYXggb25cbiAgICogV2luZG93cykuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IHsgdGFzaywgYXJncywgcGFyZW50cyB9ID0gdGhpcztcblxuICAgIGlmICghdGFzay5zdGVwcyB8fCB0YXNrLnN0ZXBzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgdGhpcy5sb2dEZWJ1ZyhncmF5KFwiTm8gYWN0aW9ucyBoYXZlIGJlZW4gc3BlY2lmaWVkIGZvciB0aGlzIHRhc2suXCIpKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICB0aGlzLmVudiA9IGF3YWl0IHRoaXMucmVzb2x2ZUVudmlyb25tZW50KHRoaXMuZW52UGFyYW0sIHBhcmVudHMpO1xuXG4gICAgY29uc3QgZW52bG9ncyA9IFtdO1xuICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuZW52KSkge1xuICAgICAgY29uc3QgdnYgPSB2ID8/IFwiXCI7XG4gICAgICBjb25zdCB0cmltbWVkID1cbiAgICAgICAgdnYubGVuZ3RoID4gRU5WX1RSSU1fTEVOID8gdnYuc3Vic3RyaW5nKDAsIEVOVl9UUklNX0xFTikgKyBcIi4uLlwiIDogdnY7XG4gICAgICBlbnZsb2dzLnB1c2goYCR7a309JHt0cmltbWVkfWApO1xuICAgIH1cblxuICAgIGlmIChlbnZsb2dzLmxlbmd0aCkge1xuICAgICAgdGhpcy5sb2dEZWJ1ZyhncmF5KGAke3VuZGVybGluZShcImVudlwiKX06ICR7ZW52bG9ncy5qb2luKFwiIFwiKX1gKSk7XG4gICAgfVxuXG4gICAgLy8gZXZhbHVhdGUgY29uZGl0aW9uXG4gICAgaWYgKCEoYXdhaXQgdGhpcy5ldmFsQ29uZGl0aW9uKHRhc2spKSkge1xuICAgICAgdGhpcy5sb2coXCJjb25kaXRpb24gZXhpdGVkIHdpdGggbm9uLXplcm8gLSBza2lwcGluZ1wiKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyB2ZXJpZnkgd2UgcmVxdWlyZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBkZWZpbmVkXG4gICAgY29uc3QgbWVyZ2VkID0geyAuLi5wcm9jZXNzLmVudiwgLi4udGhpcy5lbnYgfTtcbiAgICBjb25zdCBtaXNzaW5nID0gbmV3IEFycmF5PHN0cmluZz4oKTtcbiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgdGFzay5yZXF1aXJlZEVudiA/PyBbXSkge1xuICAgICAgaWYgKCEobmFtZSBpbiBtZXJnZWQpKSB7XG4gICAgICAgIG1pc3NpbmcucHVzaChuYW1lKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAobWlzc2luZy5sZW5ndGggPiAwKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBtaXNzaW5nIHJlcXVpcmVkIGVudmlyb25tZW50IHZhcmlhYmxlczogJHttaXNzaW5nLmpvaW4oXCIsXCIpfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc3RlcCBvZiB0YXNrLnN0ZXBzKSB7XG4gICAgICAvLyBldmFsdWF0ZSBzdGVwIGNvbmRpdGlvblxuICAgICAgaWYgKCEoYXdhaXQgdGhpcy5ldmFsQ29uZGl0aW9uKHN0ZXApKSkge1xuICAgICAgICB0aGlzLmxvZyhcImNvbmRpdGlvbiBleGl0ZWQgd2l0aCBub24temVybyAtIHNraXBwaW5nXCIpO1xuICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgYXJnc0xpc3Q6IHN0cmluZ1tdID0gW1xuICAgICAgICAuLi4oc3RlcC5hcmdzIHx8IFtdKSxcbiAgICAgICAgLi4uKHN0ZXAucmVjZWl2ZUFyZ3MgPyBhcmdzIDogW10pLFxuICAgICAgXS5tYXAoKGEpID0+IGEudG9TdHJpbmcoKSk7XG5cbiAgICAgIGlmIChzdGVwLnNheSkge1xuICAgICAgICBsb2dnaW5nLmluZm8odGhpcy5mbXRMb2coc3RlcC5zYXkpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKHN0ZXAuc3Bhd24pIHtcbiAgICAgICAgYXdhaXQgdGhpcy5ydW50aW1lLnJ1blRhc2soXG4gICAgICAgICAgc3RlcC5zcGF3bixcbiAgICAgICAgICBbLi4udGhpcy5wYXJlbnRzLCB0aGlzLnRhc2submFtZV0sXG4gICAgICAgICAgYXJnc0xpc3QsXG4gICAgICAgICAgc3RlcC5lbnYsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGV4ZWNzID0gc3RlcC5leGVjID8gW3N0ZXAuZXhlY10gOiBbXTtcblxuICAgICAgLy8gUGFyc2Ugc3RlcC1zcGVjaWZpYyBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICAgIGNvbnN0IGVudiA9IGF3YWl0IHRoaXMuZXZhbEVudmlyb25tZW50KHN0ZXAuZW52ID8/IHt9KTtcblxuICAgICAgaWYgKHN0ZXAuYnVpbHRpbikge1xuICAgICAgICBleGVjcy5wdXNoKHRoaXMucmVuZGVyQnVpbHRpbihzdGVwLmJ1aWx0aW4pKTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBleGVjIG9mIGV4ZWNzKSB7XG4gICAgICAgIGxldCBoYXNFcnJvciA9IGZhbHNlO1xuXG4gICAgICAgIGxldCBjb21tYW5kID0gZXhlYztcblxuICAgICAgICBpZiAoY29tbWFuZC5pbmNsdWRlcyhRVU9URURfQVJHU19NQVJLRVIpKSB7XG4gICAgICAgICAgLy8gUG9vcmx5IGltaXRhdGUgYmFzaCBxdW90ZWQgdmFyaWFibGUgZXhwYW5zaW9uLiBJZiBcIiRAXCIgaXMgZW5jb3VudGVyZWQgaW4gYmFzaCwgZWxlbWVudHMgb2YgdGhlIGFyZyBhcnJheVxuICAgICAgICAgIC8vIHRoYXQgY29udGFpbiB3aGl0ZXNwYWNlIHdpbGwgYmUgc2luZ2xlIHF1b3RlZCAoJ2FyZycpLiBUaGlzIHByZXNlcnZlcyB3aGl0ZXNwYWNlIGluIHRoaW5ncyBsaWtlIGZpbGVuYW1lcy5cbiAgICAgICAgICAvLyBJbWl0YXRlIHRoYXQgYmVoYXZpb3IgaGVyZSBieSBzaW5nbGUgcXVvdGluZyBldmVyeSBlbGVtZW50IG9mIHRoZSBhcmcgYXJyYXkgd2hlbiBhIHF1b3RlZCBhcmcgbWFya2VyIChcIiRAXCIpXG4gICAgICAgICAgLy8gaXMgZW5jb3VudGVyZWQuXG4gICAgICAgICAgY29tbWFuZCA9IGNvbW1hbmQucmVwbGFjZShcbiAgICAgICAgICAgIFFVT1RFRF9BUkdTX01BUktFUixcbiAgICAgICAgICAgIGFyZ3NMaXN0Lm1hcCgoYXJnKSA9PiBgJyR7YXJnfSdgKS5qb2luKFwiIFwiKSxcbiAgICAgICAgICApO1xuICAgICAgICB9IGVsc2UgaWYgKGNvbW1hbmQuaW5jbHVkZXMoQVJHU19NQVJLRVIpKSB7XG4gICAgICAgICAgY29tbWFuZCA9IGNvbW1hbmQucmVwbGFjZShBUkdTX01BUktFUiwgYXJnc0xpc3Quam9pbihcIiBcIikpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGNvbW1hbmQgPSBbY29tbWFuZCwgLi4uYXJnc0xpc3RdLmpvaW4oXCIgXCIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY3dkID0gc3RlcC5jd2Q7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zaGVsbCh7XG4gICAgICAgICAgICBjb21tYW5kLFxuICAgICAgICAgICAgY3dkLFxuICAgICAgICAgICAgZXh0cmFFbnY6IGVudixcbiAgICAgICAgICB9KTtcbiAgICAgICAgICBoYXNFcnJvciA9IHJlc3VsdC5zdGF0dXMgIT09IDA7XG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgICAvLyBhIG5vbi16ZXJvIGV4aXQgY29kZSBpcyByZXBvcnRlZCB2aWEgYHJlc3VsdC5zdGF0dXNgIGFib3ZlOyB0aGlzXG4gICAgICAgICAgLy8gY2F0Y2ggaGFuZGxlcyBlcnJvcnMgdGhyb3duIHdoaWxlIGF0dGVtcHRpbmcgdG8gc3Bhd24gdGhlIGNvbW1hbmQuXG4gICAgICAgICAgaWYgKChlIGFzIGFueSk/Lm1lc3NhZ2U/LnN0YXJ0c1dpdGgoXCJub24temVybyBleGl0IGNvZGU6XCIpKSB7XG4gICAgICAgICAgICBoYXNFcnJvciA9IHRydWU7XG4gICAgICAgICAgfVxuICAgICAgICAgIHRocm93IGU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGhhc0Vycm9yKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICAgYFRhc2sgXCIke1xuICAgICAgICAgICAgICB0aGlzLmZ1bGxuYW1lXG4gICAgICAgICAgICB9XCIgZmFpbGVkIHdoZW4gZXhlY3V0aW5nIFwiJHtjb21tYW5kfVwiIChjd2Q6ICR7cmVzb2x2ZShcbiAgICAgICAgICAgICAgY3dkID8/IHRoaXMud29ya2RpcixcbiAgICAgICAgICAgICl9KWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIGEgdGFzayBzaG91bGQgYmUgZXhlY3V0ZWQgYmFzZWQgb24gXCJjb25kaXRpb25cIi5cbiAgICpcbiAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgdGFzayBzaG91bGQgYmUgZXhlY3V0ZWQgb3IgZmFsc2UgaWYgdGhlIGNvbmRpdGlvblxuICAgKiBldmFsdWF0ZXMgdG8gZmFsc2UgKGV4aXRzIHdpdGggbm9uLXplcm8pLCBpbmRpY2F0aW5nIHRoYXQgdGhlIHRhc2sgc2hvdWxkXG4gICAqIGJlIHNraXBwZWQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGV2YWxDb25kaXRpb24odGFza09yU3RlcDogVGFza1NwZWMgfCBUYXNrU3RlcCkge1xuICAgIC8vIG5vIGNvbmRpdGlvbiwgY2Fycnkgb25cbiAgICBpZiAoIXRhc2tPclN0ZXAuY29uZGl0aW9uKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhncmF5KGAke3VuZGVybGluZShcImNvbmRpdGlvblwiKX06ICR7dGFza09yU3RlcC5jb25kaXRpb259YCkpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc2hlbGwoe1xuICAgICAgY29tbWFuZDogdGFza09yU3RlcC5jb25kaXRpb24sXG4gICAgICBsb2dwcmVmaXg6IFwiY29uZGl0aW9uOiBcIixcbiAgICAgIHF1aWV0OiB0cnVlLFxuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZXMgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZyb20gc2hlbGwgY29tbWFuZHMgKGUuZy4gYCQoeHgpYClcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZXZhbEVudmlyb25tZW50KGVudjogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0pIHtcbiAgICBjb25zdCBvdXRwdXQ6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhlbnYgPz8ge30pKSB7XG4gICAgICBpZiAoU3RyaW5nKHZhbHVlKS5zdGFydHNXaXRoKFwiJChcIikgJiYgU3RyaW5nKHZhbHVlKS5lbmRzV2l0aChcIilcIikpIHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSB2YWx1ZS5zdWJzdHJpbmcoMiwgdmFsdWUubGVuZ3RoIC0gMSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc2hlbGxFdmFsKHsgY29tbWFuZDogcXVlcnkgfSk7XG4gICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAwKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSByZXN1bHQuZXJyb3JcbiAgICAgICAgICAgID8gcmVzdWx0LmVycm9yLnN0YWNrXG4gICAgICAgICAgICA6IHJlc3VsdC5zdGRlcnI/LnRvU3RyaW5nKCkudHJpbSgpIHx8XG4gICAgICAgICAgICAgIHJlc3VsdC5zdGRvdXQ/LnRvU3RyaW5nKCkudHJpbSgpIHx8XG4gICAgICAgICAgICAgIGBjb21tYW5kIGV4aXRlZCB3aXRoIGNvZGUgJHtyZXN1bHQuc3RhdHVzfWA7XG5cbiAgICAgICAgICBsb2dnaW5nLndhcm4oXG4gICAgICAgICAgICB0aGlzLmZtdExvZyhcbiAgICAgICAgICAgICAgYCR7dW5kZXJsaW5lKGtleSl9OiB1bmFibGUgdG8gZXZhbHVhdGUgXCIke3F1ZXJ5fVwiLiBFbnZpcm9ubWVudCB2YXJpYWJsZSB3aWxsIGJlIHNraXBwZWQuIENoZWNrIHRoYXQgdGhlIGNvbW1hbmQgZXhpc3RzIGFuZCBydW5zIHN1Y2Nlc3NmdWxseS5gLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGxvZ2dpbmcud2Fybih0aGlzLmZtdExvZyhgJHt1bmRlcmxpbmUoa2V5KX06ICR7ZXJyb3J9YCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dHB1dFtrZXldID0gcmVzdWx0LnN0ZG91dD8udG9TdHJpbmcoXCJ1dGYtOFwiKS50cmltKCkgPz8gXCJcIjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0cHV0W2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBydW50aW1lIGVudmlyb25tZW50IGZvciBhIHRhc2suIE5hbWVseSwgaXQgc3VwcG9ydHMgdGhpcyBzeW50YXhcbiAgICogYCQoeHgpYCBmb3IgYWxsb3dpbmcgZW52aXJvbm1lbnQgdG8gYmUgZXZhbHVhdGVkIGJ5IGV4ZWN1dGluZyBhIHNoZWxsXG4gICAqIGNvbW1hbmQgYW5kIG9idGFpbmluZyBpdHMgcmVzdWx0LlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZXNvbHZlRW52aXJvbm1lbnQoXG4gICAgZW52UGFyYW06IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9LFxuICAgIHBhcmVudHM6IHN0cmluZ1tdLFxuICApIHtcbiAgICBsZXQgZW52ID0gdGhpcy5ydW50aW1lLm1hbmlmZXN0LmVudiA/PyB7fTtcblxuICAgIC8vIGFkZCBlbnYgZnJvbSBhbGwgcGFyZW50IHRhc2tzIG9uZSBieSBvbmVcbiAgICBmb3IgKGNvbnN0IHBhcmVudCBvZiBwYXJlbnRzKSB7XG4gICAgICBlbnYgPSB7XG4gICAgICAgIC4uLmVudixcbiAgICAgICAgLi4uKHRoaXMucnVudGltZS50cnlGaW5kVGFzayhwYXJlbnQpPy5lbnYgPz8ge30pLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBhcHBseSB0YXNrIGVudmlyb25tZW50LCB0aGVuIHRoZSBzcGVjaWZpYyBlbnYgbGFzdFxuICAgIGVudiA9IHtcbiAgICAgIC4uLmVudixcbiAgICAgIC4uLih0aGlzLnRhc2suZW52ID8/IHt9KSxcbiAgICAgIC4uLmVudlBhcmFtLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5ldmFsRW52aXJvbm1lbnQoZW52ID8/IHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBcImZ1bGwgbmFtZVwiIG9mIHRoZSB0YXNrIHdoaWNoIGluY2x1ZGVzIGFsbCBpdCdzIHBhcmVudCB0YXNrIG5hbWVzIGNvbmNhdGVuYXRlZCBieSBjaGV2cm9ucy5cbiAgICovXG4gIHByaXZhdGUgZ2V0IGZ1bGxuYW1lKCkge1xuICAgIHJldHVybiBbLi4udGhpcy5wYXJlbnRzLCB0aGlzLnRhc2submFtZV0uam9pbihcIiDCuyBcIik7XG4gIH1cblxuICBwcml2YXRlIGxvZyguLi5hcmdzOiBhbnlbXSkge1xuICAgIGxvZ2dpbmcudmVyYm9zZSh0aGlzLmZtdExvZyguLi5hcmdzKSk7XG4gIH1cblxuICBwcml2YXRlIGxvZ0RlYnVnKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgbG9nZ2luZy5kZWJ1Zyh0aGlzLmZtdExvZyguLi5hcmdzKSk7XG4gIH1cblxuICBwcml2YXRlIGZtdExvZyguLi5hcmdzOiBhbnlbXSkge1xuICAgIHJldHVybiBmb3JtYXQoYCR7dW5kZXJsaW5lKHRoaXMuZnVsbG5hbWUpfSB8YCwgLi4uYXJncyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNoZWxsKG9wdGlvbnM6IFNoZWxsT3B0aW9ucyk6IFByb21pc2U8U2hlbGxSZXN1bHQ+IHtcbiAgICBjb25zdCBxdWlldCA9IG9wdGlvbnMucXVpZXQgPz8gZmFsc2U7XG4gICAgaWYgKCFxdWlldCkge1xuICAgICAgY29uc3QgbG9nID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICAgICAgaWYgKG9wdGlvbnMubG9ncHJlZml4KSB7XG4gICAgICAgIGxvZy5wdXNoKG9wdGlvbnMubG9ncHJlZml4KTtcbiAgICAgIH1cblxuICAgICAgbG9nLnB1c2gob3B0aW9ucy5jb21tYW5kKTtcblxuICAgICAgaWYgKG9wdGlvbnMuY3dkKSB7XG4gICAgICAgIGxvZy5wdXNoKGAoY3dkOiAke29wdGlvbnMuY3dkfSlgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5sb2cobG9nLmpvaW4oXCIgXCIpKTtcbiAgICB9XG5cbiAgICBjb25zdCBjd2QgPSBvcHRpb25zLmN3ZCA/PyB0aGlzLndvcmtkaXI7XG4gICAgaWYgKCFleGlzdHNTeW5jKGN3ZCkgfHwgIXN0YXRTeW5jKGN3ZCkuaXNEaXJlY3RvcnkoKSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgaW52YWxpZCB3b3JrZGlyIChjd2QpOiAke2N3ZH0gbXVzdCBiZSBhbiBleGlzdGluZyBkaXJlY3RvcnlgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBlbnYgPSB7XG4gICAgICAuLi5wcm9jZXNzLmVudixcbiAgICAgIC4uLnRoaXMuZW52LFxuICAgICAgLi4ub3B0aW9ucy5leHRyYUVudixcbiAgICB9O1xuXG4gICAgLy8gT24gV2luZG93cyB0aGUgZGVmYXVsdCBzaGVsbCAoY21kLmV4ZSkgZG9lcyBub3QgdW5kZXJzdGFuZCB0aGUgUE9TSVgtc3R5bGVcbiAgICAvLyBjb21tYW5kcyBwcm9qZW4gdGFza3MgYXJlIHdyaXR0ZW4gaW4gKGBjYXRgLCBgY3BgLCBgbWtkaXIgLXBgLCBgcm0gLXJmYCxcbiAgICAvLyBgJiZgIGNoYWlucywgYCRWQVJgLCAuLi4pLiBSdW4gdGhlIGNvbW1hbmQgdGhyb3VnaCBkYXgncyBjcm9zcy1wbGF0Zm9ybVxuICAgIC8vIHNoZWxsIGluc3RlYWQsIHdoaWNoIHNoaXBzIGJ1aWx0LWluIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgY29tbW9uXG4gICAgLy8gY29tbWFuZHMuIE5vdyB0aGF0IHRoZSB0YXNrIHJ1bnRpbWUgaXMgYXN5bmNocm9ub3VzIHdlIGNhbiBkcml2ZSBkYXgnc1xuICAgIC8vIGAkYCBBUEkgZGlyZWN0bHkgaW5zdGVhZCBvZiBzcGF3bmluZyBhIHN5bmNocm9ub3VzIGNoaWxkIG5vZGUgcHJvY2Vzcy5cbiAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiKSB7XG4gICAgICAvLyBzdGRvdXQvc3RkZXJyIGFyZSBvbmx5IGNhcHR1cmVkIHdoZW4gYSBjYWxsZXIgcGlwZXMgdGhlbSAoZS5nLlxuICAgICAgLy8gYHNoZWxsRXZhbGApOyBvdGhlcndpc2UgaW5oZXJpdCBzbyBvdXRwdXQgaXMgc3RyZWFtZWQgdG8gdGhlIHRlcm1pbmFsLlxuICAgICAgY29uc3QgY2FwdHVyZSA9IEFycmF5LmlzQXJyYXkob3B0aW9ucy5zcGF3bk9wdGlvbnM/LnN0ZGlvKTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgJC5yYXdgJHtvcHRpb25zLmNvbW1hbmR9YFxuICAgICAgICAuY3dkKGN3ZClcbiAgICAgICAgLmVudihlbnYpXG4gICAgICAgIC5zdGRvdXQoY2FwdHVyZSA/IFwicGlwZWRcIiA6IFwiaW5oZXJpdFwiKVxuICAgICAgICAuc3RkZXJyKGNhcHR1cmUgPyBcInBpcGVkXCIgOiBcImluaGVyaXRcIilcbiAgICAgICAgLm5vVGhyb3coKTtcblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgc3RhdHVzOiByZXN1bHQuY29kZSxcbiAgICAgICAgc3Rkb3V0OiBjYXB0dXJlID8gQnVmZmVyLmZyb20ocmVzdWx0LnN0ZG91dEJ5dGVzKSA6IG51bGwsXG4gICAgICAgIHN0ZGVycjogY2FwdHVyZSA/IEJ1ZmZlci5mcm9tKHJlc3VsdC5zdGRlcnJCeXRlcykgOiBudWxsLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4gc3Bhd25TeW5jKG9wdGlvbnMuY29tbWFuZCwge1xuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIGN3ZCxcbiAgICAgIHNoZWxsOiB0cnVlLFxuICAgICAgc3RkaW86IFwiaW5oZXJpdFwiLFxuICAgICAgZW52LFxuICAgICAgLi4ub3B0aW9ucy5zcGF3bk9wdGlvbnMsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNoZWxsRXZhbChvcHRpb25zOiBTaGVsbE9wdGlvbnMpOiBQcm9taXNlPFNoZWxsUmVzdWx0PiB7XG4gICAgcmV0dXJuIHRoaXMuc2hlbGwoe1xuICAgICAgcXVpZXQ6IHRydWUsXG4gICAgICAuLi5vcHRpb25zLFxuICAgICAgc3Bhd25PcHRpb25zOiB7XG4gICAgICAgIHN0ZGlvOiBbXCJpbmhlcml0XCIsIFwicGlwZVwiLCBcInBpcGVcIl0sXG4gICAgICB9LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJCdWlsdGluKGJ1aWx0aW46IHN0cmluZykge1xuICAgIC8vIExvY2F0ZSBwcm9qZW4ncyBwYWNrYWdlIHJvb3QgYnkgd2Fsa2luZyB1cCBmcm9tIHRoaXMgbW9kdWxlJ3MgZGlyZWN0b3J5XG4gICAgLy8gdW50aWwgd2UgZmluZCBhIHBhY2thZ2UuanNvbi4gVGhpcyB3b3JrcyB3aGV0aGVyIHRoZSBjb2RlIHJ1bnMgZnJvbSB0aGVcbiAgICAvLyBjb21waWxlZCBmaWxlIChsaWIvY2xpL3Rhc2stcnVudGltZS5qcykgb3IgZnJvbSB0aGUgYnVuZGxlZCBydW4tdGFzay5janNcbiAgICAvLyAobGliL3J1bi10YXNrLmNqcyksIHdoaWNoIGxpdmUgYXQgZGlmZmVyZW50IGRlcHRocyAtIHNvIGEgaGFyZC1jb2RlZFxuICAgIC8vIHJlbGF0aXZlIHBhdGggdG8gcGFja2FnZS5qc29uIHdvdWxkIGJlIHdyb25nIGluIG9uZSBvZiB0aGUgdHdvIGNhc2VzLlxuICAgIGxldCBtb2R1bGVSb290ID0gX19kaXJuYW1lO1xuICAgIHdoaWxlICghZXhpc3RzU3luYyhqb2luKG1vZHVsZVJvb3QsIFwicGFja2FnZS5qc29uXCIpKSkge1xuICAgICAgY29uc3QgcGFyZW50ID0gZGlybmFtZShtb2R1bGVSb290KTtcbiAgICAgIGlmIChwYXJlbnQgPT09IG1vZHVsZVJvb3QpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwidW5hYmxlIHRvIGxvY2F0ZSB0aGUgcHJvamVuIHBhY2thZ2Ugcm9vdFwiKTtcbiAgICAgIH1cbiAgICAgIG1vZHVsZVJvb3QgPSBwYXJlbnQ7XG4gICAgfVxuICAgIGNvbnN0IHByb2dyYW0gPSByZXF1aXJlLnJlc29sdmUoXG4gICAgICBqb2luKG1vZHVsZVJvb3QsIFwibGliXCIsIGAke2J1aWx0aW59LnRhc2suanNgKSxcbiAgICApO1xuICAgIHJldHVybiBgXCIke3Byb2Nlc3MuZXhlY1BhdGh9XCIgXCIke3Byb2dyYW19XCJgO1xuICB9XG59XG5cbmludGVyZmFjZSBTaGVsbE9wdGlvbnMge1xuICByZWFkb25seSBjb21tYW5kOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBAZGVmYXVsdCAtIHByb2plY3QgZGlyXG4gICAqL1xuICByZWFkb25seSBjd2Q/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IGxvZ3ByZWZpeD86IHN0cmluZztcbiAgcmVhZG9ubHkgc3Bhd25PcHRpb25zPzogU3Bhd25PcHRpb25zO1xuICAvKiogQGRlZmF1bHQgZmFsc2UgKi9cbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xuICByZWFkb25seSBleHRyYUVudj86IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9O1xufVxuIl19
|
|
482
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1ydW50aW1lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS90YXNrLXJ1bnRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsaURBQTBDO0FBQzFDLDJCQUF3RDtBQUN4RCwrQkFBOEM7QUFDOUMsMkNBQTZCO0FBQzdCLCtCQUE4QjtBQUM5QixpQ0FBd0M7QUFDeEMsNkJBQXdCO0FBQ3hCLHNDQUErRDtBQUMvRCxvREFBc0M7QUFHdEMscUVBQXFFO0FBQ3JFLGdGQUFnRjtBQUNoRixnRkFBZ0Y7QUFDaEYsMkVBQTJFO0FBQzNFLG1FQUFtRTtBQUNuRSxpRUFBaUU7QUFDakUsTUFBTSx1QkFBdUIsR0FBRyxPQUFPLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUMvRCxNQUFNLGlCQUFpQixHQUNyQix1QkFBdUIsRUFBRSxPQUFPLElBQUksdUJBQXVCLENBQUM7QUFFOUQsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO0FBQ3hCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQztBQUN6QixNQUFNLGtCQUFrQixHQUFHLElBQUksV0FBVyxHQUFHLENBQUM7QUFrQzlDOztHQUVHO0FBQ0gsTUFBYSxXQUFXO0lBQ3RCOztPQUVHO0lBQ0ksTUFBTSxDQUFVLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDcEQsbUJBQVUsRUFDVixZQUFZLENBQ2IsQ0FBQztJQUVGOzs7Ozs7Ozs7T0FTRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQWUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDaEIsT0FB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USxNQUFNLE9BQU8sR0FBRyxDQUFDO0lBQzlDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU3Bhd25PcHRpb25zIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IHNwYXduU3luYyB9IGZyb20gXCJjaGlsZF9wcm9jZXNzXCI7XG5pbXBvcnQgeyBleGlzdHNTeW5jLCByZWFkRmlsZVN5bmMsIHN0YXRTeW5jIH0gZnJvbSBcImZzXCI7XG5pbXBvcnQgeyBkaXJuYW1lLCBqb2luLCByZXNvbHZlIH0gZnJvbSBcInBhdGhcIjtcbmltcG9ydCAqIGFzIHBhdGggZnJvbSBcInBhdGhcIjtcbmltcG9ydCB7IGZvcm1hdCB9IGZyb20gXCJ1dGlsXCI7XG5pbXBvcnQgeyBncmF5LCB1bmRlcmxpbmUgfSBmcm9tIFwiY2hhbGtcIjtcbmltcG9ydCB7ICQgfSBmcm9tIFwiZGF4XCI7XG5pbXBvcnQgeyBQUk9KRU5fRElSLCBUQVNLU19NQU5JRkVTVF9WRVJTSU9OIH0gZnJvbSBcIi4uL2NvbW1vblwiO1xuaW1wb3J0ICogYXMgbG9nZ2luZyBmcm9tIFwiLi4vbG9nZ2luZ1wiO1xuaW1wb3J0IHR5cGUgeyBUYXNrc01hbmlmZXN0LCBUYXNrU3BlYywgVGFza1N0ZXAgfSBmcm9tIFwiLi4vdGFzay1tb2RlbFwiO1xuXG4vLyBhdm9pZHMgYSAoZmFsc2UgcG9zaXRpdmUpIGVzYnVpbGQgd2FybmluZyBhYm91dCBpbmNvcnJlY3QgaW1wb3J0cy5cbi8vIGA/LmRlZmF1bHQgPz8gbW9kdWxlYCBrZWVwcyB0aGlzIHdvcmtpbmcgYm90aCBhcyBhIHBsYWluIENvbW1vbkpTIHJlcXVpcmUgYW5kXG4vLyB3aGVuIHRoZSBkZXBlbmRlbmN5IGlzIGludGVyb3Atd3JhcHBlZCBpbnNpZGUgdGhlIGJ1bmRsZWQgcnVuLXRhc2suY2pzICh3aGVyZVxuLy8gYHJlcXVpcmUoLi4uKWAgbWF5IHlpZWxkIGB7IGRlZmF1bHQ6IGZuIH1gIGluc3RlYWQgb2YgdGhlIGZ1bmN0aW9uKS4gU2VlXG4vLyBwcm9qZW4jNDQwNyAoXCJwYXJzZUNvbmZsaWN0SlNPTiBpcyBub3QgYSBmdW5jdGlvblwiIGFmdGVyIGVqZWN0KS5cbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tcmVxdWlyZS1pbXBvcnRzXG5jb25zdCBwYXJzZUNvbmZsaWN0SlNPTk1vZHVsZSA9IHJlcXVpcmUoXCJwYXJzZS1jb25mbGljdC1qc29uXCIpO1xuY29uc3QgcGFyc2VDb25mbGljdEpTT04gPVxuICBwYXJzZUNvbmZsaWN0SlNPTk1vZHVsZT8uZGVmYXVsdCA/PyBwYXJzZUNvbmZsaWN0SlNPTk1vZHVsZTtcblxuY29uc3QgRU5WX1RSSU1fTEVOID0gMjA7XG5jb25zdCBBUkdTX01BUktFUiA9IFwiJEBcIjtcbmNvbnN0IFFVT1RFRF9BUkdTX01BUktFUiA9IGBcIiR7QVJHU19NQVJLRVJ9XCJgO1xuXG4vKipcbiAqIFRoZSByZXN1bHQgb2YgZXhlY3V0aW5nIGEgc2hlbGwgY29tbWFuZC5cbiAqXG4gKiBUaGlzIGlzIGEgbm9ybWFsaXplZCBzdWJzZXQgb2Ygbm9kZSdzIGBTcGF3blN5bmNSZXR1cm5zYCBzbyB0aGF0IHRoZVxuICogc3luY2hyb25vdXMgKGBzcGF3blN5bmNgKSBhbmQgYXN5bmNocm9ub3VzIChgZGF4YCkgZXhlY3V0aW9uIHBhdGhzIGNhbiByZXR1cm5cbiAqIGEgY29tcGF0aWJsZSBzaGFwZS5cbiAqL1xuaW50ZXJmYWNlIFNoZWxsUmVzdWx0IHtcbiAgLyoqXG4gICAqIFRoZSBleGl0IGNvZGUgb2YgdGhlIGNvbW1hbmQsIG9yIGBudWxsYCBpZiB0aGUgcHJvY2VzcyB3YXMgdGVybWluYXRlZCBieSBhXG4gICAqIHNpZ25hbCBvciBuZXZlciBzcGF3bmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhdHVzOiBudW1iZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBDYXB0dXJlZCBzdGRvdXQuIE9ubHkgcG9wdWxhdGVkIHdoZW4gc3Rkb3V0IGlzIHBpcGVkIChlLmcuIHdoZW4gZXZhbHVhdGluZ1xuICAgKiBlbnZpcm9ubWVudCB2YXJpYWJsZXMpOyBgbnVsbGAvYHVuZGVmaW5lZGAgd2hlbiBzdGRpbyBpcyBpbmhlcml0ZWQuXG4gICAqL1xuICByZWFkb25seSBzdGRvdXQ/OiBCdWZmZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBDYXB0dXJlZCBzdGRlcnIuIFNlZSBgc3Rkb3V0YC5cbiAgICovXG4gIHJlYWRvbmx5IHN0ZGVycj86IEJ1ZmZlciB8IG51bGw7XG5cbiAgLyoqXG4gICAqIEFuIGVycm9yIHJhaXNlZCB3aGlsZSBhdHRlbXB0aW5nIHRvIHNwYXduIHRoZSBjb21tYW5kIChub3QgYSBub24temVybyBleGl0XG4gICAqIGNvZGUsIHdoaWNoIGlzIHJlcG9ydGVkIHZpYSBgc3RhdHVzYCkuXG4gICAqL1xuICByZWFkb25seSBlcnJvcj86IEVycm9yO1xufVxuXG4vKipcbiAqIFRoZSBydW50aW1lIGNvbXBvbmVudCBvZiB0aGUgdGFza3MgZW5naW5lLlxuICovXG5leHBvcnQgY2xhc3MgVGFza1J1bnRpbWUge1xuICAvKipcbiAgICogVGhlIHByb2plY3QtcmVsYXRpdmUgcGF0aCBvZiB0aGUgdGFza3MgbWFuaWZlc3QgZmlsZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgTUFOSUZFU1RfRklMRSA9IHBhdGgucG9zaXguam9pbihcbiAgICBQUk9KRU5fRElSLFxuICAgIFwidGFza3MuanNvblwiLFxuICApO1xuXG4gIC8qKlxuICAgKiBPbmUtc2hvdCBlbnRyeXBvaW50IGZvciB0aGUgc3RhbmRhbG9uZSB0YXNrIHJ1bm5lci5cbiAgICpcbiAgICogQ3JlYXRlcyBhIHJ1bnRpbWUgcm9vdGVkIGF0IHRoZSBjdXJyZW50IHdvcmtpbmcgZGlyZWN0b3J5LCBydW5zIHRoZSBuYW1lZFxuICAgKiB0YXNrLCBhbmQgY29udmVydHMgYW55IGZhaWx1cmUgaW50byBhIG5vbi16ZXJvIHByb2Nlc3MgZXhpdCBjb2RlLiBUaGlzIGlzXG4gICAqIHRoZSBzaW5nbGUgbGluZSBpbnZva2VkIGJ5IHRoZSBidW5kbGVkIGBzY3JpcHRzL3J1bi10YXNrLmNqc2AgdGhhdFxuICAgKiBcInByb2plbiBlamVjdFwiIGVtaXRzLCB3aGljaCBrZWVwcyB0aGUgZ2VuZXJhdGVkIGJ1bmRsZSBmb290ZXIgdHJpdmlhbC5cbiAgICpcbiAgICogQHBhcmFtIG5hbWUgVGhlIG5hbWUgb2YgdGhlIHRhc2sgdG8gcnVuLiBEZWZhdWx0cyB0byBgcHJvY2Vzcy5hcmd2WzJdYC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgYXN5bmMgbWFpbihuYW1lOiBzdHJpbmcgPSBwcm9jZXNzLmFyZ3ZbMl0pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgbmV3IFRhc2tSdW50aW1lKFwiLlwiKS5ydW5UYXNrKG5hbWUpO1xuICAgIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgICAgY29uc29sZS5lcnJvcihlPy5zdGFjayA/PyBTdHJpbmcoZSkpO1xuICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgY29udGVudHMgb2YgdGFza3MuanNvblxuICAgKi9cbiAgcHJpdmF0ZSBfbWFuaWZlc3Q6IFRhc2tzTWFuaWZlc3QgPSB7IHRhc2tzOiB7fSB9O1xuXG4gIC8qKlxuICAgKiBUaGUgcmF3IGNvbnRlbnRzIG9mIHRoZSBjdXJyZW50bHkgbG9hZGVkIG1hbmlmZXN0LCB1c2VkIHRvIGRldGVjdCBjaGFuZ2VzXG4gICAqIG9uIGRpc2sgc28gdGhlIHJ1bnRpbWUgY2FuIHJlbG9hZCBhIHJlZ2VuZXJhdGVkIG1hbmlmZXN0IG1pZC1ydW4uXG4gICAqL1xuICBwcml2YXRlIF9pZGVudGl0eT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoZSBwcm9qZWN0IGFuZCB0aGUgY3dkIGZvciBleGVjdXRpbmcgdGFza3MuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgd29ya2Rpcjogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHdvcmtkaXI6IHN0cmluZykge1xuICAgIHRoaXMud29ya2RpciA9IHJlc29sdmUod29ya2Rpcik7XG4gICAgLy8gUGVyZm9ybSB0aGUgaW5pdGlhbCBsb2FkLiBUaGlzIGFsc28gdmVyaWZpZXMgdGhlIG1hbmlmZXN0J3Mgc2NoZW1hXG4gICAgLy8gdmVyc2lvbi5cbiAgICB0aGlzLnJlbG9hZE1hbmlmZXN0SWZDaGFuZ2VkKCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNvbnRlbnRzIG9mIHRhc2tzLmpzb25cbiAgICovXG4gIHB1YmxpYyBnZXQgbWFuaWZlc3QoKTogVGFza3NNYW5pZmVzdCB7XG4gICAgcmV0dXJuIHRoaXMuX21hbmlmZXN0O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBhYnNvbHV0ZSBwYXRoIG9mIHRoZSB0YXNrcyBtYW5pZmVzdCBmaWxlLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXQgbWFuaWZlc3RQYXRoKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGpvaW4odGhpcy53b3JrZGlyLCBUYXNrUnVudGltZS5NQU5JRkVTVF9GSUxFKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgdGFza3MgaW4gdGhpcyBwcm9qZWN0LlxuICAgKi9cbiAgcHVibGljIGdldCB0YXNrcygpOiBUYXNrU3BlY1tdIHtcbiAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLm1hbmlmZXN0LnRhc2tzID8/IHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGaW5kIGEgdGFzayBieSBuYW1lLCBvciBgdW5kZWZpbmVkYCBpZiBub3QgZm91bmQuXG4gICAqL1xuICBwdWJsaWMgdHJ5RmluZFRhc2sobmFtZTogc3RyaW5nKTogVGFza1NwZWMgfCB1bmRlZmluZWQge1xuICAgIGlmICghdGhpcy5tYW5pZmVzdC50YXNrcykge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMubWFuaWZlc3QudGFza3NbbmFtZV07XG4gIH1cblxuICAvKipcbiAgICogUnVucyB0aGUgdGFzay5cbiAgICogQHBhcmFtIG5hbWUgVGhlIHRhc2sgbmFtZS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBydW5UYXNrKFxuICAgIG5hbWU6IHN0cmluZyxcbiAgICBwYXJlbnRzOiBzdHJpbmdbXSA9IFtdLFxuICAgIGFyZ3M6IEFycmF5PHN0cmluZyB8IG51bWJlcj4gPSBbXSxcbiAgICBlbnY6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9ID0ge30sXG4gICk6IFByb21pc2U8dm9pZD4ge1xuICAgIC8vIEEgcHJldmlvdXNseSBleGVjdXRlZCB0YXNrIChtb3N0IGltcG9ydGFudGx5IHRoZSBcImRlZmF1bHRcIi9zeW50aCB0YXNrLFxuICAgIC8vIHdoaWNoIGBidWlsZGAgc3Bhd25zIGZpcnN0KSBtYXkgaGF2ZSByZWdlbmVyYXRlZCBgLnByb2plbi90YXNrcy5qc29uYC5cbiAgICAvLyBQaWNrIHVwIGFueSBzdWNoIGNoYW5nZXMgYmVmb3JlIHJlc29sdmluZyBhbmQgcnVubmluZyB0aGlzIHRhc2sgc28gd2VcbiAgICAvLyBuZXZlciBleGVjdXRlIGEgc3RhbGUsIGluLW1lbW9yeSBkZWZpbml0aW9uLlxuICAgIHRoaXMucmVsb2FkTWFuaWZlc3RJZkNoYW5nZWQoKTtcblxuICAgIGNvbnN0IHRhc2sgPSB0aGlzLnRyeUZpbmRUYXNrKG5hbWUpO1xuICAgIGlmICghdGFzaykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBjYW5ub3QgZmluZCBjb21tYW5kICR7bmFtZX1gKTtcbiAgICB9XG5cbiAgICBhd2FpdCBuZXcgUnVuVGFzayh0aGlzLCB0YXNrLCBwYXJlbnRzLCBhcmdzLCBlbnYpLnJ1bigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlLXJlYWRzIHRoZSB0YXNrcyBtYW5pZmVzdCBmcm9tIGRpc2sgaWYgaXRzIGNvbnRlbnRzIGNoYW5nZWQgc2luY2UgaXQgd2FzXG4gICAqIGxhc3QgbG9hZGVkLCB2ZXJpZnlpbmcgaXRzIHNjaGVtYSB2ZXJzaW9uIGFsb25nIHRoZSB3YXkuXG4gICAqXG4gICAqIENoYW5nZSBkZXRlY3Rpb24gY29tcGFyZXMgdGhlIHJhdyBmaWxlIGNvbnRlbnRzLCBzbyBhbiB1bmNoYW5nZWQgbWFuaWZlc3RcbiAgICogaXMgbm90IHJlLXZlcmlmaWVkIG9yIHJlLWFkb3B0ZWQuXG4gICAqL1xuICBwcml2YXRlIHJlbG9hZE1hbmlmZXN0SWZDaGFuZ2VkKCk6IHZvaWQge1xuICAgIGlmICghZXhpc3RzU3luYyh0aGlzLm1hbmlmZXN0UGF0aCkpIHtcbiAgICAgIC8vIE5vIG1hbmlmZXN0IG9uIGRpc2s6IHRyZWF0IGFzIGFuIGVtcHR5IHByb2plY3QgKGxlZ2FjeSBiZWhhdmlvcikuXG4gICAgICB0aGlzLl9tYW5pZmVzdCA9IHsgdGFza3M6IHt9IH07XG4gICAgICB0aGlzLl9pZGVudGl0eSA9IHVuZGVmaW5lZDtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCByYXcgPSByZWFkRmlsZVN5bmModGhpcy5tYW5pZmVzdFBhdGgsIFwidXRmLThcIik7XG4gICAgaWYgKHJhdyA9PT0gdGhpcy5faWRlbnRpdHkpIHtcbiAgICAgIHJldHVybjsgLy8gdW5jaGFuZ2VkIHNpbmNlIHRoZSBsYXN0IGxvYWRcbiAgICB9XG5cbiAgICBjb25zdCBtYW5pZmVzdDogVGFza3NNYW5pZmVzdCA9IHBhcnNlQ29uZmxpY3RKU09OKHJhdywgdW5kZWZpbmVkLCBcInRoZWlyc1wiKTtcblxuICAgIC8vIEEgcHJldmlvdXNseSBsb2FkZWQgbWFuaWZlc3QgbWVhbnMgdGhpcyBpcyBhICpyZWxvYWQqIChlLmcuIHRoZVxuICAgIC8vIFwiZGVmYXVsdFwiL3N5bnRoIHRhc2sgcmVnZW5lcmF0ZWQgdGhlIGZpbGUgbWlkLXJ1biksIGFzIG9wcG9zZWQgdG8gdGhlXG4gICAgLy8gaW5pdGlhbCBsb2FkIHBlcmZvcm1lZCBieSB0aGUgY29uc3RydWN0b3IuXG4gICAgY29uc3QgaXNSZWxvYWQgPSB0aGlzLl9pZGVudGl0eSAhPT0gdW5kZWZpbmVkO1xuXG4gICAgdGhpcy52ZXJpZnlNYW5pZmVzdChtYW5pZmVzdCk7XG4gICAgdGhpcy5fbWFuaWZlc3QgPSBtYW5pZmVzdDtcbiAgICB0aGlzLl9pZGVudGl0eSA9IHJhdztcblxuICAgIGlmIChpc1JlbG9hZCkge1xuICAgICAgbG9nZ2luZy5kZWJ1ZyhcbiAgICAgICAgYCR7VGFza1J1bnRpbWUuTUFOSUZFU1RfRklMRX0gY2hhbmdlZCBvbiBkaXNrOyBzdWNjZXNzZnVsbHkgbG9hZGVkIHRoZSBuZXcgdGFza3MgbWFuaWZlc3QuYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyBhIGZyZXNobHkgcmVhZCBtYW5pZmVzdDpcbiAgICpcbiAgICogLSBMZWdhY3kgbWFuaWZlc3RzIChubyBgbWFuaWZlc3RWZXJzaW9uYCkgYXJlIGFjY2VwdGVkIGFzLWlzIGZvciBiYWNrd2FyZHNcbiAgICogICBjb21wYXRpYmlsaXR5LlxuICAgKiAtIE1hbmlmZXN0cyBmcm9tIGEgbmV3ZXIgcHJvamVuIChhIGhpZ2hlciBgbWFuaWZlc3RWZXJzaW9uYCkgYXJlIGFjY2VwdGVkXG4gICAqICAgd2l0aCBhIHdhcm5pbmcsIHNpbmNlIHRoaXMgcnVudGltZSBtYXkgbm90IHVuZGVyc3RhbmQgdGhlIHNjaGVtYS5cbiAgICovXG4gIHByaXZhdGUgdmVyaWZ5TWFuaWZlc3QobWFuaWZlc3Q6IFRhc2tzTWFuaWZlc3QpOiB2b2lkIHtcbiAgICAvLyBCYWNrd2FyZHMgY29tcGF0aWJpbGl0eTogbWFuaWZlc3RzIGdlbmVyYXRlZCBiZWZvcmUgdmVyc2lvbmluZyBjYXJyeSBub1xuICAgIC8vIHZlcnNpb24uXG4gICAgaWYgKG1hbmlmZXN0Lm1hbmlmZXN0VmVyc2lvbiA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKG1hbmlmZXN0Lm1hbmlmZXN0VmVyc2lvbiA+IFRBU0tTX01BTklGRVNUX1ZFUlNJT04pIHtcbiAgICAgIGxvZ2dpbmcud2FybihcbiAgICAgICAgYCR7VGFza1J1bnRpbWUuTUFOSUZFU1RfRklMRX0gd2FzIGdlbmVyYXRlZCBieSBhIG5ld2VyIHZlcnNpb24gb2YgcHJvamVuIGAgK1xuICAgICAgICAgIGAobWFuaWZlc3QgdmVyc2lvbiAke21hbmlmZXN0Lm1hbmlmZXN0VmVyc2lvbn0sIHRoaXMgcHJvamVuIHN1cHBvcnRzIHVwIHRvICR7VEFTS1NfTUFOSUZFU1RfVkVSU0lPTn0pLiBgICtcbiAgICAgICAgICBgU29tZSB0YXNrcyBtYXkgbm90IGJlaGF2ZSBhcyBleHBlY3RlZDsgY29uc2lkZXIgdXBncmFkaW5nIHByb2plbi5gLFxuICAgICAgKTtcbiAgICB9XG4gIH1cbn1cblxuY2xhc3MgUnVuVGFzayB7XG4gIHByaXZhdGUgZW52OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSA9IHt9O1xuICBwcml2YXRlIHJlYWRvbmx5IHBhcmVudHM6IHN0cmluZ1tdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgd29ya2Rpcjogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgcnVudGltZTogVGFza1J1bnRpbWUsXG4gICAgcHJpdmF0ZSByZWFkb25seSB0YXNrOiBUYXNrU3BlYyxcbiAgICBwYXJlbnRzOiBzdHJpbmdbXSA9IFtdLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgYXJnczogQXJyYXk8c3RyaW5nIHwgbnVtYmVyPiA9IFtdLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgZW52UGFyYW06IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9ID0ge30sXG4gICkge1xuICAgIHRoaXMud29ya2RpciA9IHRhc2suY3dkID8/IHRoaXMucnVudGltZS53b3JrZGlyO1xuICAgIHRoaXMucGFyZW50cyA9IHBhcmVudHM7XG4gIH1cblxuICAvKipcbiAgICogRXhlY3V0ZXMgdGhlIHRhc2suIFRoaXMgd2FzIHByZXZpb3VzbHkgZG9uZSBpbiB0aGUgY29uc3RydWN0b3IsIGJ1dCBpcyBub3dcbiAgICogYW4gYXN5bmMgbWV0aG9kIHNpbmNlIHNoZWxsIGV4ZWN1dGlvbiBpcyBhc3luY2hyb25vdXMgKGUuZy4gZGF4IG9uXG4gICAqIFdpbmRvd3MpLlxuICAgKi9cbiAgcHVibGljIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCB7IHRhc2ssIGFyZ3MsIHBhcmVudHMgfSA9IHRoaXM7XG5cbiAgICBpZiAoIXRhc2suc3RlcHMgfHwgdGFzay5zdGVwcy5sZW5ndGggPT09IDApIHtcbiAgICAgIHRoaXMubG9nRGVidWcoZ3JheShcIk5vIGFjdGlvbnMgaGF2ZSBiZWVuIHNwZWNpZmllZCBmb3IgdGhpcyB0YXNrLlwiKSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgdGhpcy5lbnYgPSBhd2FpdCB0aGlzLnJlc29sdmVFbnZpcm9ubWVudCh0aGlzLmVudlBhcmFtLCBwYXJlbnRzKTtcblxuICAgIGNvbnN0IGVudmxvZ3MgPSBbXTtcbiAgICBmb3IgKGNvbnN0IFtrLCB2XSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmVudikpIHtcbiAgICAgIGNvbnN0IHZ2ID0gdiA/PyBcIlwiO1xuICAgICAgY29uc3QgdHJpbW1lZCA9XG4gICAgICAgIHZ2Lmxlbmd0aCA+IEVOVl9UUklNX0xFTiA/IHZ2LnN1YnN0cmluZygwLCBFTlZfVFJJTV9MRU4pICsgXCIuLi5cIiA6IHZ2O1xuICAgICAgZW52bG9ncy5wdXNoKGAke2t9PSR7dHJpbW1lZH1gKTtcbiAgICB9XG5cbiAgICBpZiAoZW52bG9ncy5sZW5ndGgpIHtcbiAgICAgIHRoaXMubG9nRGVidWcoZ3JheShgJHt1bmRlcmxpbmUoXCJlbnZcIil9OiAke2VudmxvZ3Muam9pbihcIiBcIil9YCkpO1xuICAgIH1cblxuICAgIC8vIGV2YWx1YXRlIGNvbmRpdGlvblxuICAgIGlmICghKGF3YWl0IHRoaXMuZXZhbENvbmRpdGlvbih0YXNrKSkpIHtcbiAgICAgIHRoaXMubG9nKFwiY29uZGl0aW9uIGV4aXRlZCB3aXRoIG5vbi16ZXJvIC0gc2tpcHBpbmdcIik7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gdmVyaWZ5IHdlIHJlcXVpcmVkIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgZGVmaW5lZFxuICAgIGNvbnN0IG1lcmdlZCA9IHsgLi4ucHJvY2Vzcy5lbnYsIC4uLnRoaXMuZW52IH07XG4gICAgY29uc3QgbWlzc2luZyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIHRhc2sucmVxdWlyZWRFbnYgPz8gW10pIHtcbiAgICAgIGlmICghKG5hbWUgaW4gbWVyZ2VkKSkge1xuICAgICAgICBtaXNzaW5nLnB1c2gobmFtZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG1pc3NpbmcubGVuZ3RoID4gMCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgbWlzc2luZyByZXF1aXJlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXM6ICR7bWlzc2luZy5qb2luKFwiLFwiKX1gLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHN0ZXAgb2YgdGFzay5zdGVwcykge1xuICAgICAgLy8gZXZhbHVhdGUgc3RlcCBjb25kaXRpb25cbiAgICAgIGlmICghKGF3YWl0IHRoaXMuZXZhbENvbmRpdGlvbihzdGVwKSkpIHtcbiAgICAgICAgdGhpcy5sb2coXCJjb25kaXRpb24gZXhpdGVkIHdpdGggbm9uLXplcm8gLSBza2lwcGluZ1wiKTtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGFyZ3NMaXN0OiBzdHJpbmdbXSA9IFtcbiAgICAgICAgLi4uKHN0ZXAuYXJncyB8fCBbXSksXG4gICAgICAgIC4uLihzdGVwLnJlY2VpdmVBcmdzID8gYXJncyA6IFtdKSxcbiAgICAgIF0ubWFwKChhKSA9PiBhLnRvU3RyaW5nKCkpO1xuXG4gICAgICBpZiAoc3RlcC5zYXkpIHtcbiAgICAgICAgbG9nZ2luZy5pbmZvKHRoaXMuZm10TG9nKHN0ZXAuc2F5KSk7XG4gICAgICB9XG5cbiAgICAgIGlmIChzdGVwLnNwYXduKSB7XG4gICAgICAgIGF3YWl0IHRoaXMucnVudGltZS5ydW5UYXNrKFxuICAgICAgICAgIHN0ZXAuc3Bhd24sXG4gICAgICAgICAgWy4uLnRoaXMucGFyZW50cywgdGhpcy50YXNrLm5hbWVdLFxuICAgICAgICAgIGFyZ3NMaXN0LFxuICAgICAgICAgIHN0ZXAuZW52LFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBleGVjcyA9IHN0ZXAuZXhlYyA/IFtzdGVwLmV4ZWNdIDogW107XG5cbiAgICAgIC8vIFBhcnNlIHN0ZXAtc3BlY2lmaWMgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAgICBjb25zdCBlbnYgPSBhd2FpdCB0aGlzLmV2YWxFbnZpcm9ubWVudChzdGVwLmVudiA/PyB7fSk7XG5cbiAgICAgIGlmIChzdGVwLmJ1aWx0aW4pIHtcbiAgICAgICAgZXhlY3MucHVzaCh0aGlzLnJlbmRlckJ1aWx0aW4oc3RlcC5idWlsdGluKSk7XG4gICAgICB9XG5cbiAgICAgIGZvciAoY29uc3QgZXhlYyBvZiBleGVjcykge1xuICAgICAgICBsZXQgaGFzRXJyb3IgPSBmYWxzZTtcblxuICAgICAgICBsZXQgY29tbWFuZCA9IGV4ZWM7XG5cbiAgICAgICAgaWYgKGNvbW1hbmQuaW5jbHVkZXMoUVVPVEVEX0FSR1NfTUFSS0VSKSkge1xuICAgICAgICAgIC8vIFBvb3JseSBpbWl0YXRlIGJhc2ggcXVvdGVkIHZhcmlhYmxlIGV4cGFuc2lvbi4gSWYgXCIkQFwiIGlzIGVuY291bnRlcmVkIGluIGJhc2gsIGVsZW1lbnRzIG9mIHRoZSBhcmcgYXJyYXlcbiAgICAgICAgICAvLyB0aGF0IGNvbnRhaW4gd2hpdGVzcGFjZSB3aWxsIGJlIHNpbmdsZSBxdW90ZWQgKCdhcmcnKS4gVGhpcyBwcmVzZXJ2ZXMgd2hpdGVzcGFjZSBpbiB0aGluZ3MgbGlrZSBmaWxlbmFtZXMuXG4gICAgICAgICAgLy8gSW1pdGF0ZSB0aGF0IGJlaGF2aW9yIGhlcmUgYnkgc2luZ2xlIHF1b3RpbmcgZXZlcnkgZWxlbWVudCBvZiB0aGUgYXJnIGFycmF5IHdoZW4gYSBxdW90ZWQgYXJnIG1hcmtlciAoXCIkQFwiKVxuICAgICAgICAgIC8vIGlzIGVuY291bnRlcmVkLlxuICAgICAgICAgIGNvbW1hbmQgPSBjb21tYW5kLnJlcGxhY2UoXG4gICAgICAgICAgICBRVU9URURfQVJHU19NQVJLRVIsXG4gICAgICAgICAgICBhcmdzTGlzdC5tYXAoKGFyZykgPT4gYCcke2FyZ30nYCkuam9pbihcIiBcIiksXG4gICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIGlmIChjb21tYW5kLmluY2x1ZGVzKEFSR1NfTUFSS0VSKSkge1xuICAgICAgICAgIGNvbW1hbmQgPSBjb21tYW5kLnJlcGxhY2UoQVJHU19NQVJLRVIsIGFyZ3NMaXN0LmpvaW4oXCIgXCIpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBjb21tYW5kID0gW2NvbW1hbmQsIC4uLmFyZ3NMaXN0XS5qb2luKFwiIFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGN3ZCA9IHN0ZXAuY3dkO1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc2hlbGwoe1xuICAgICAgICAgICAgY29tbWFuZCxcbiAgICAgICAgICAgIGN3ZCxcbiAgICAgICAgICAgIGV4dHJhRW52OiBlbnYsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaGFzRXJyb3IgPSByZXN1bHQuc3RhdHVzICE9PSAwO1xuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgLy8gYSBub24temVybyBleGl0IGNvZGUgaXMgcmVwb3J0ZWQgdmlhIGByZXN1bHQuc3RhdHVzYCBhYm92ZTsgdGhpc1xuICAgICAgICAgIC8vIGNhdGNoIGhhbmRsZXMgZXJyb3JzIHRocm93biB3aGlsZSBhdHRlbXB0aW5nIHRvIHNwYXduIHRoZSBjb21tYW5kLlxuICAgICAgICAgIGlmICgoZSBhcyBhbnkpPy5tZXNzYWdlPy5zdGFydHNXaXRoKFwibm9uLXplcm8gZXhpdCBjb2RlOlwiKSkge1xuICAgICAgICAgICAgaGFzRXJyb3IgPSB0cnVlO1xuICAgICAgICAgIH1cbiAgICAgICAgICB0aHJvdyBlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChoYXNFcnJvcikge1xuICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgIGBUYXNrIFwiJHtcbiAgICAgICAgICAgICAgdGhpcy5mdWxsbmFtZVxuICAgICAgICAgICAgfVwiIGZhaWxlZCB3aGVuIGV4ZWN1dGluZyBcIiR7Y29tbWFuZH1cIiAoY3dkOiAke3Jlc29sdmUoXG4gICAgICAgICAgICAgIGN3ZCA/PyB0aGlzLndvcmtkaXIsXG4gICAgICAgICAgICApfSlgLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRGV0ZXJtaW5lcyBpZiBhIHRhc2sgc2hvdWxkIGJlIGV4ZWN1dGVkIGJhc2VkIG9uIFwiY29uZGl0aW9uXCIuXG4gICAqXG4gICAqIEByZXR1cm5zIHRydWUgaWYgdGhlIHRhc2sgc2hvdWxkIGJlIGV4ZWN1dGVkIG9yIGZhbHNlIGlmIHRoZSBjb25kaXRpb25cbiAgICogZXZhbHVhdGVzIHRvIGZhbHNlIChleGl0cyB3aXRoIG5vbi16ZXJvKSwgaW5kaWNhdGluZyB0aGF0IHRoZSB0YXNrIHNob3VsZFxuICAgKiBiZSBza2lwcGVkLlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBldmFsQ29uZGl0aW9uKHRhc2tPclN0ZXA6IFRhc2tTcGVjIHwgVGFza1N0ZXApIHtcbiAgICAvLyBubyBjb25kaXRpb24sIGNhcnJ5IG9uXG4gICAgaWYgKCF0YXNrT3JTdGVwLmNvbmRpdGlvbikge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgdGhpcy5sb2coZ3JheShgJHt1bmRlcmxpbmUoXCJjb25kaXRpb25cIil9OiAke3Rhc2tPclN0ZXAuY29uZGl0aW9ufWApKTtcbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNoZWxsKHtcbiAgICAgIGNvbW1hbmQ6IHRhc2tPclN0ZXAuY29uZGl0aW9uLFxuICAgICAgbG9ncHJlZml4OiBcImNvbmRpdGlvbjogXCIsXG4gICAgICBxdWlldDogdHJ1ZSxcbiAgICB9KTtcbiAgICBpZiAocmVzdWx0LnN0YXR1cyA9PT0gMCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRXZhbHVhdGVzIGVudmlyb25tZW50IHZhcmlhYmxlcyBmcm9tIHNoZWxsIGNvbW1hbmRzIChlLmcuIGAkKHh4KWApXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGV2YWxFbnZpcm9ubWVudChlbnY6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9KSB7XG4gICAgY29uc3Qgb3V0cHV0OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfSA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoZW52ID8/IHt9KSkge1xuICAgICAgaWYgKFN0cmluZyh2YWx1ZSkuc3RhcnRzV2l0aChcIiQoXCIpICYmIFN0cmluZyh2YWx1ZSkuZW5kc1dpdGgoXCIpXCIpKSB7XG4gICAgICAgIGNvbnN0IHF1ZXJ5ID0gdmFsdWUuc3Vic3RyaW5nKDIsIHZhbHVlLmxlbmd0aCAtIDEpO1xuICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNoZWxsRXZhbCh7IGNvbW1hbmQ6IHF1ZXJ5IH0pO1xuICAgICAgICBpZiAocmVzdWx0LnN0YXR1cyAhPT0gMCkge1xuICAgICAgICAgIGNvbnN0IGVycm9yID0gcmVzdWx0LmVycm9yXG4gICAgICAgICAgICA/IHJlc3VsdC5lcnJvci5zdGFja1xuICAgICAgICAgICAgOiByZXN1bHQuc3RkZXJyPy50b1N0cmluZygpLnRyaW0oKSB8fFxuICAgICAgICAgICAgICByZXN1bHQuc3Rkb3V0Py50b1N0cmluZygpLnRyaW0oKSB8fFxuICAgICAgICAgICAgICBgY29tbWFuZCBleGl0ZWQgd2l0aCBjb2RlICR7cmVzdWx0LnN0YXR1c31gO1xuXG4gICAgICAgICAgbG9nZ2luZy53YXJuKFxuICAgICAgICAgICAgdGhpcy5mbXRMb2coXG4gICAgICAgICAgICAgIGAke3VuZGVybGluZShrZXkpfTogdW5hYmxlIHRvIGV2YWx1YXRlIFwiJHtxdWVyeX1cIi4gRW52aXJvbm1lbnQgdmFyaWFibGUgd2lsbCBiZSBza2lwcGVkLiBDaGVjayB0aGF0IHRoZSBjb21tYW5kIGV4aXN0cyBhbmQgcnVucyBzdWNjZXNzZnVsbHkuYCxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgKTtcbiAgICAgICAgICBsb2dnaW5nLndhcm4odGhpcy5mbXRMb2coYCR7dW5kZXJsaW5lKGtleSl9OiAke2Vycm9yfWApKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBvdXRwdXRba2V5XSA9IHJlc3VsdC5zdGRvdXQ/LnRvU3RyaW5nKFwidXRmLThcIikudHJpbSgpID8/IFwiXCI7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIG91dHB1dFtrZXldID0gdmFsdWU7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgcnVudGltZSBlbnZpcm9ubWVudCBmb3IgYSB0YXNrLiBOYW1lbHksIGl0IHN1cHBvcnRzIHRoaXMgc3ludGF4XG4gICAqIGAkKHh4KWAgZm9yIGFsbG93aW5nIGVudmlyb25tZW50IHRvIGJlIGV2YWx1YXRlZCBieSBleGVjdXRpbmcgYSBzaGVsbFxuICAgKiBjb21tYW5kIGFuZCBvYnRhaW5pbmcgaXRzIHJlc3VsdC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgcmVzb2x2ZUVudmlyb25tZW50KFxuICAgIGVudlBhcmFtOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSxcbiAgICBwYXJlbnRzOiBzdHJpbmdbXSxcbiAgKSB7XG4gICAgbGV0IGVudiA9IHRoaXMucnVudGltZS5tYW5pZmVzdC5lbnYgPz8ge307XG5cbiAgICAvLyBhZGQgZW52IGZyb20gYWxsIHBhcmVudCB0YXNrcyBvbmUgYnkgb25lXG4gICAgZm9yIChjb25zdCBwYXJlbnQgb2YgcGFyZW50cykge1xuICAgICAgZW52ID0ge1xuICAgICAgICAuLi5lbnYsXG4gICAgICAgIC4uLih0aGlzLnJ1bnRpbWUudHJ5RmluZFRhc2socGFyZW50KT8uZW52ID8/IHt9KSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgLy8gYXBwbHkgdGFzayBlbnZpcm9ubWVudCwgdGhlbiB0aGUgc3BlY2lmaWMgZW52IGxhc3RcbiAgICBlbnYgPSB7XG4gICAgICAuLi5lbnYsXG4gICAgICAuLi4odGhpcy50YXNrLmVudiA/PyB7fSksXG4gICAgICAuLi5lbnZQYXJhbSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIHRoaXMuZXZhbEVudmlyb25tZW50KGVudiA/PyB7fSk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgXCJmdWxsIG5hbWVcIiBvZiB0aGUgdGFzayB3aGljaCBpbmNsdWRlcyBhbGwgaXQncyBwYXJlbnQgdGFzayBuYW1lcyBjb25jYXRlbmF0ZWQgYnkgY2hldnJvbnMuXG4gICAqL1xuICBwcml2YXRlIGdldCBmdWxsbmFtZSgpIHtcbiAgICByZXR1cm4gWy4uLnRoaXMucGFyZW50cywgdGhpcy50YXNrLm5hbWVdLmpvaW4oXCIgwrsgXCIpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2coLi4uYXJnczogYW55W10pIHtcbiAgICBsb2dnaW5nLnZlcmJvc2UodGhpcy5mbXRMb2coLi4uYXJncykpO1xuICB9XG5cbiAgcHJpdmF0ZSBsb2dEZWJ1ZyguLi5hcmdzOiBhbnlbXSkge1xuICAgIGxvZ2dpbmcuZGVidWcodGhpcy5mbXRMb2coLi4uYXJncykpO1xuICB9XG5cbiAgcHJpdmF0ZSBmbXRMb2coLi4uYXJnczogYW55W10pIHtcbiAgICByZXR1cm4gZm9ybWF0KGAke3VuZGVybGluZSh0aGlzLmZ1bGxuYW1lKX0gfGAsIC4uLmFyZ3MpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzaGVsbChvcHRpb25zOiBTaGVsbE9wdGlvbnMpOiBQcm9taXNlPFNoZWxsUmVzdWx0PiB7XG4gICAgY29uc3QgcXVpZXQgPSBvcHRpb25zLnF1aWV0ID8/IGZhbHNlO1xuICAgIGlmICghcXVpZXQpIHtcbiAgICAgIGNvbnN0IGxvZyA9IG5ldyBBcnJheTxzdHJpbmc+KCk7XG5cbiAgICAgIGlmIChvcHRpb25zLmxvZ3ByZWZpeCkge1xuICAgICAgICBsb2cucHVzaChvcHRpb25zLmxvZ3ByZWZpeCk7XG4gICAgICB9XG5cbiAgICAgIGxvZy5wdXNoKG9wdGlvbnMuY29tbWFuZCk7XG5cbiAgICAgIGlmIChvcHRpb25zLmN3ZCkge1xuICAgICAgICBsb2cucHVzaChgKGN3ZDogJHtvcHRpb25zLmN3ZH0pYCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMubG9nKGxvZy5qb2luKFwiIFwiKSk7XG4gICAgfVxuXG4gICAgY29uc3QgY3dkID0gb3B0aW9ucy5jd2QgPz8gdGhpcy53b3JrZGlyO1xuICAgIGlmICghZXhpc3RzU3luYyhjd2QpIHx8ICFzdGF0U3luYyhjd2QpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYGludmFsaWQgd29ya2RpciAoY3dkKTogJHtjd2R9IG11c3QgYmUgYW4gZXhpc3RpbmcgZGlyZWN0b3J5YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgZW52ID0ge1xuICAgICAgLi4ucHJvY2Vzcy5lbnYsXG4gICAgICAuLi50aGlzLmVudixcbiAgICAgIC4uLm9wdGlvbnMuZXh0cmFFbnYsXG4gICAgfTtcblxuICAgIC8vIE9uIFdpbmRvd3MgdGhlIGRlZmF1bHQgc2hlbGwgKGNtZC5leGUpIGRvZXMgbm90IHVuZGVyc3RhbmQgdGhlIFBPU0lYLXN0eWxlXG4gICAgLy8gY29tbWFuZHMgcHJvamVuIHRhc2tzIGFyZSB3cml0dGVuIGluIChgY2F0YCwgYGNwYCwgYG1rZGlyIC1wYCwgYHJtIC1yZmAsXG4gICAgLy8gYCYmYCBjaGFpbnMsIGAkVkFSYCwgLi4uKS4gUnVuIHRoZSBjb21tYW5kIHRocm91Z2ggZGF4J3MgY3Jvc3MtcGxhdGZvcm1cbiAgICAvLyBzaGVsbCBpbnN0ZWFkLCB3aGljaCBzaGlwcyBidWlsdC1pbiBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGNvbW1vblxuICAgIC8vIGNvbW1hbmRzLiBOb3cgdGhhdCB0aGUgdGFzayBydW50aW1lIGlzIGFzeW5jaHJvbm91cyB3ZSBjYW4gZHJpdmUgZGF4J3NcbiAgICAvLyBgJGAgQVBJIGRpcmVjdGx5IGluc3RlYWQgb2Ygc3Bhd25pbmcgYSBzeW5jaHJvbm91cyBjaGlsZCBub2RlIHByb2Nlc3MuXG4gICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09IFwid2luMzJcIikge1xuICAgICAgLy8gc3Rkb3V0L3N0ZGVyciBhcmUgb25seSBjYXB0dXJlZCB3aGVuIGEgY2FsbGVyIHBpcGVzIHRoZW0gKGUuZy5cbiAgICAgIC8vIGBzaGVsbEV2YWxgKTsgb3RoZXJ3aXNlIGluaGVyaXQgc28gb3V0cHV0IGlzIHN0cmVhbWVkIHRvIHRoZSB0ZXJtaW5hbC5cbiAgICAgIGNvbnN0IGNhcHR1cmUgPSBBcnJheS5pc0FycmF5KG9wdGlvbnMuc3Bhd25PcHRpb25zPy5zdGRpbyk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0ICQucmF3YCR7b3B0aW9ucy5jb21tYW5kfWBcbiAgICAgICAgLmN3ZChjd2QpXG4gICAgICAgIC5lbnYoZW52KVxuICAgICAgICAuc3Rkb3V0KGNhcHR1cmUgPyBcInBpcGVkXCIgOiBcImluaGVyaXRcIilcbiAgICAgICAgLnN0ZGVycihjYXB0dXJlID8gXCJwaXBlZFwiIDogXCJpbmhlcml0XCIpXG4gICAgICAgIC5ub1Rocm93KCk7XG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIHN0YXR1czogcmVzdWx0LmNvZGUsXG4gICAgICAgIHN0ZG91dDogY2FwdHVyZSA/IEJ1ZmZlci5mcm9tKHJlc3VsdC5zdGRvdXRCeXRlcykgOiBudWxsLFxuICAgICAgICBzdGRlcnI6IGNhcHR1cmUgPyBCdWZmZXIuZnJvbShyZXN1bHQuc3RkZXJyQnl0ZXMpIDogbnVsbCxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHNwYXduU3luYyhvcHRpb25zLmNvbW1hbmQsIHtcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgICBjd2QsXG4gICAgICBzaGVsbDogdHJ1ZSxcbiAgICAgIHN0ZGlvOiBcImluaGVyaXRcIixcbiAgICAgIGVudixcbiAgICAgIC4uLm9wdGlvbnMuc3Bhd25PcHRpb25zLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzaGVsbEV2YWwob3B0aW9uczogU2hlbGxPcHRpb25zKTogUHJvbWlzZTxTaGVsbFJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnNoZWxsKHtcbiAgICAgIHF1aWV0OiB0cnVlLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHNwYXduT3B0aW9uczoge1xuICAgICAgICBzdGRpbzogW1wiaW5oZXJpdFwiLCBcInBpcGVcIiwgXCJwaXBlXCJdLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQnVpbHRpbihidWlsdGluOiBzdHJpbmcpIHtcbiAgICAvLyBMb2NhdGUgcHJvamVuJ3MgcGFja2FnZSByb290IGJ5IHdhbGtpbmcgdXAgZnJvbSB0aGlzIG1vZHVsZSdzIGRpcmVjdG9yeVxuICAgIC8vIHVudGlsIHdlIGZpbmQgYSBwYWNrYWdlLmpzb24uIFRoaXMgd29ya3Mgd2hldGhlciB0aGUgY29kZSBydW5zIGZyb20gdGhlXG4gICAgLy8gY29tcGlsZWQgZmlsZSAobGliL2NsaS90YXNrLXJ1bnRpbWUuanMpIG9yIGZyb20gdGhlIGJ1bmRsZWQgcnVuLXRhc2suY2pzXG4gICAgLy8gKGxpYi9ydW4tdGFzay5janMpLCB3aGljaCBsaXZlIGF0IGRpZmZlcmVudCBkZXB0aHMgLSBzbyBhIGhhcmQtY29kZWRcbiAgICAvLyByZWxhdGl2ZSBwYXRoIHRvIHBhY2thZ2UuanNvbiB3b3VsZCBiZSB3cm9uZyBpbiBvbmUgb2YgdGhlIHR3byBjYXNlcy5cbiAgICBsZXQgbW9kdWxlUm9vdCA9IF9fZGlybmFtZTtcbiAgICB3aGlsZSAoIWV4aXN0c1N5bmMoam9pbihtb2R1bGVSb290LCBcInBhY2thZ2UuanNvblwiKSkpIHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGRpcm5hbWUobW9kdWxlUm9vdCk7XG4gICAgICBpZiAocGFyZW50ID09PSBtb2R1bGVSb290KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInVuYWJsZSB0byBsb2NhdGUgdGhlIHByb2plbiBwYWNrYWdlIHJvb3RcIik7XG4gICAgICB9XG4gICAgICBtb2R1bGVSb290ID0gcGFyZW50O1xuICAgIH1cbiAgICBjb25zdCBwcm9ncmFtID0gcmVxdWlyZS5yZXNvbHZlKFxuICAgICAgam9pbihtb2R1bGVSb290LCBcImxpYlwiLCBgJHtidWlsdGlufS50YXNrLmpzYCksXG4gICAgKTtcbiAgICByZXR1cm4gYFwiJHtwcm9jZXNzLmV4ZWNQYXRofVwiIFwiJHtwcm9ncmFtfVwiYDtcbiAgfVxufVxuXG5pbnRlcmZhY2UgU2hlbGxPcHRpb25zIHtcbiAgcmVhZG9ubHkgY29tbWFuZDogc3RyaW5nO1xuICAvKipcbiAgICogQGRlZmF1bHQgLSBwcm9qZWN0IGRpclxuICAgKi9cbiAgcmVhZG9ubHkgY3dkPzogc3RyaW5nO1xuICByZWFkb25seSBsb2dwcmVmaXg/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNwYXduT3B0aW9ucz86IFNwYXduT3B0aW9ucztcbiAgLyoqIEBkZWZhdWx0IGZhbHNlICovXG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZXh0cmFFbnY/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfTtcbn1cbiJdfQ==
|
package/lib/common.d.ts
CHANGED
|
@@ -1,5 +1,14 @@
|
|
|
1
1
|
export declare const DEFAULT_PROJEN_RC_JS_FILENAME = ".projenrc.js";
|
|
2
2
|
export declare const PROJEN_DIR = ".projen";
|
|
3
3
|
export declare const PROJEN_MARKER: string;
|
|
4
|
+
/**
|
|
5
|
+
* The current version of the `.projen/tasks.json` manifest schema.
|
|
6
|
+
*
|
|
7
|
+
* Bump this whenever the manifest structure changes in a way the task runtime
|
|
8
|
+
* needs to be aware of. The runtime uses it to detect manifests produced by a
|
|
9
|
+
* newer (potentially incompatible) version of projen. Manifests generated by
|
|
10
|
+
* older versions of projen omit it and are treated as "legacy".
|
|
11
|
+
*/
|
|
12
|
+
export declare const TASKS_MANIFEST_VERSION = 1;
|
|
4
13
|
export declare const IS_TEST_RUN: boolean;
|
|
5
14
|
export declare const PROJEN_VERSION: any;
|
package/lib/common.js
CHANGED
|
@@ -1,12 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PROJEN_VERSION = exports.IS_TEST_RUN = exports.PROJEN_MARKER = exports.PROJEN_DIR = exports.DEFAULT_PROJEN_RC_JS_FILENAME = void 0;
|
|
3
|
+
exports.PROJEN_VERSION = exports.IS_TEST_RUN = exports.TASKS_MANIFEST_VERSION = exports.PROJEN_MARKER = exports.PROJEN_DIR = exports.DEFAULT_PROJEN_RC_JS_FILENAME = void 0;
|
|
4
4
|
exports.DEFAULT_PROJEN_RC_JS_FILENAME = ".projenrc.js";
|
|
5
5
|
exports.PROJEN_DIR = ".projen";
|
|
6
6
|
exports.PROJEN_MARKER = "~~ Generated by " + "projen"; // we split into two so /this/ file does not match the marker
|
|
7
|
+
/**
|
|
8
|
+
* The current version of the `.projen/tasks.json` manifest schema.
|
|
9
|
+
*
|
|
10
|
+
* Bump this whenever the manifest structure changes in a way the task runtime
|
|
11
|
+
* needs to be aware of. The runtime uses it to detect manifests produced by a
|
|
12
|
+
* newer (potentially incompatible) version of projen. Manifests generated by
|
|
13
|
+
* older versions of projen omit it and are treated as "legacy".
|
|
14
|
+
*/
|
|
15
|
+
exports.TASKS_MANIFEST_VERSION = 1;
|
|
7
16
|
exports.IS_TEST_RUN = process.env.NODE_ENV === "test";
|
|
8
17
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
9
18
|
const packageVersion = require("../package.json").version;
|
|
10
19
|
// if we are running with a test, report a fake stable version
|
|
11
20
|
exports.PROJEN_VERSION = exports.IS_TEST_RUN ? "99.99.99" : packageVersion;
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbW1vbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBYSxRQUFBLDZCQUE2QixHQUFHLGNBQWMsQ0FBQztBQUMvQyxRQUFBLFVBQVUsR0FBRyxTQUFTLENBQUM7QUFDdkIsUUFBQSxhQUFhLEdBQUcsa0JBQWtCLEdBQUcsUUFBUSxDQUFDLENBQUMsNkRBQTZEO0FBRXpIOzs7Ozs7O0dBT0c7QUFDVSxRQUFBLHNCQUFzQixHQUFHLENBQUMsQ0FBQztBQUUzQixRQUFBLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxNQUFNLENBQUM7QUFFM0QsaUVBQWlFO0FBQ2pFLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUUxRCw4REFBOEQ7QUFDakQsUUFBQSxjQUFjLEdBQUcsbUJBQVcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgREVGQVVMVF9QUk9KRU5fUkNfSlNfRklMRU5BTUUgPSBcIi5wcm9qZW5yYy5qc1wiO1xuZXhwb3J0IGNvbnN0IFBST0pFTl9ESVIgPSBcIi5wcm9qZW5cIjtcbmV4cG9ydCBjb25zdCBQUk9KRU5fTUFSS0VSID0gXCJ+fiBHZW5lcmF0ZWQgYnkgXCIgKyBcInByb2plblwiOyAvLyB3ZSBzcGxpdCBpbnRvIHR3byBzbyAvdGhpcy8gZmlsZSBkb2VzIG5vdCBtYXRjaCB0aGUgbWFya2VyXG5cbi8qKlxuICogVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgYC5wcm9qZW4vdGFza3MuanNvbmAgbWFuaWZlc3Qgc2NoZW1hLlxuICpcbiAqIEJ1bXAgdGhpcyB3aGVuZXZlciB0aGUgbWFuaWZlc3Qgc3RydWN0dXJlIGNoYW5nZXMgaW4gYSB3YXkgdGhlIHRhc2sgcnVudGltZVxuICogbmVlZHMgdG8gYmUgYXdhcmUgb2YuIFRoZSBydW50aW1lIHVzZXMgaXQgdG8gZGV0ZWN0IG1hbmlmZXN0cyBwcm9kdWNlZCBieSBhXG4gKiBuZXdlciAocG90ZW50aWFsbHkgaW5jb21wYXRpYmxlKSB2ZXJzaW9uIG9mIHByb2plbi4gTWFuaWZlc3RzIGdlbmVyYXRlZCBieVxuICogb2xkZXIgdmVyc2lvbnMgb2YgcHJvamVuIG9taXQgaXQgYW5kIGFyZSB0cmVhdGVkIGFzIFwibGVnYWN5XCIuXG4gKi9cbmV4cG9ydCBjb25zdCBUQVNLU19NQU5JRkVTVF9WRVJTSU9OID0gMTtcblxuZXhwb3J0IGNvbnN0IElTX1RFU1RfUlVOID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwidGVzdFwiO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuY29uc3QgcGFja2FnZVZlcnNpb24gPSByZXF1aXJlKFwiLi4vcGFja2FnZS5qc29uXCIpLnZlcnNpb247XG5cbi8vIGlmIHdlIGFyZSBydW5uaW5nIHdpdGggYSB0ZXN0LCByZXBvcnQgYSBmYWtlIHN0YWJsZSB2ZXJzaW9uXG5leHBvcnQgY29uc3QgUFJPSkVOX1ZFUlNJT04gPSBJU19URVNUX1JVTiA/IFwiOTkuOTkuOTlcIiA6IHBhY2thZ2VWZXJzaW9uO1xuIl19
|
package/lib/component.js
CHANGED
|
@@ -16,7 +16,7 @@ const componentId = (scope) => {
|
|
|
16
16
|
* @param id Unique id of the component. If not provided, an unstable AutoId is generated.
|
|
17
17
|
*/
|
|
18
18
|
class Component extends constructs_1.Construct {
|
|
19
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.Component", version: "0.100.
|
|
19
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.Component", version: "0.100.1" };
|
|
20
20
|
/**
|
|
21
21
|
* Test whether the given construct is a component.
|
|
22
22
|
*/
|
package/lib/dependencies.js
CHANGED
|
@@ -51,7 +51,7 @@ const json_1 = require("./json");
|
|
|
51
51
|
* `nodeProject.addDeps()` or use the generic API of `project.deps`:
|
|
52
52
|
*/
|
|
53
53
|
class Dependencies extends component_1.Component {
|
|
54
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.Dependencies", version: "0.100.
|
|
54
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.Dependencies", version: "0.100.1" };
|
|
55
55
|
/**
|
|
56
56
|
* The project-relative path of the deps manifest file.
|
|
57
57
|
*/
|
package/lib/dev-env.js
CHANGED
|
@@ -6,7 +6,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
|
6
6
|
* Options for specifying the Docker image of the container.
|
|
7
7
|
*/
|
|
8
8
|
class DevEnvironmentDockerImage {
|
|
9
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.DevEnvironmentDockerImage", version: "0.100.
|
|
9
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.DevEnvironmentDockerImage", version: "0.100.1" };
|
|
10
10
|
/**
|
|
11
11
|
* A publicly available Docker image.
|
|
12
12
|
* @example 'ubuntu:latest'
|
|
@@ -7,7 +7,7 @@ const docker_compose_1 = require("./docker-compose");
|
|
|
7
7
|
* A docker-compose service.
|
|
8
8
|
*/
|
|
9
9
|
class DockerComposeService {
|
|
10
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.DockerComposeService", version: "0.100.
|
|
10
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.DockerComposeService", version: "0.100.1" };
|
|
11
11
|
/**
|
|
12
12
|
* Name of the service.
|
|
13
13
|
*/
|
|
@@ -11,7 +11,7 @@ const yaml_1 = require("../yaml");
|
|
|
11
11
|
* Create a docker-compose YAML file.
|
|
12
12
|
*/
|
|
13
13
|
class DockerCompose extends component_1.Component {
|
|
14
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.DockerCompose", version: "0.100.
|
|
14
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.DockerCompose", version: "0.100.1" };
|
|
15
15
|
/**
|
|
16
16
|
* Depends on a service name.
|
|
17
17
|
*/
|
package/lib/file.js
CHANGED
|
@@ -45,7 +45,7 @@ const util_1 = require("./util");
|
|
|
45
45
|
const constructs_1 = require("./util/constructs");
|
|
46
46
|
const diff_1 = require("./util/diff");
|
|
47
47
|
class FileBase extends component_1.Component {
|
|
48
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.FileBase", version: "0.100.
|
|
48
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.FileBase", version: "0.100.1" };
|
|
49
49
|
/**
|
|
50
50
|
* The file path, relative to the project's outdir.
|
|
51
51
|
*/
|
package/lib/gitattributes.js
CHANGED
|
@@ -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.100.
|
|
35
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.GitAttributesFile", version: "0.100.1" };
|
|
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.100.
|
|
9
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.GitHubActionsProvider", version: "0.100.1" };
|
|
10
10
|
actions = new Map();
|
|
11
11
|
/**
|
|
12
12
|
* Define an override for a given action.
|
|
@@ -9,7 +9,7 @@ const runner_options_1 = require("../runner-options");
|
|
|
9
9
|
* Auto approve pull requests that meet a criteria
|
|
10
10
|
*/
|
|
11
11
|
class AutoApprove extends component_1.Component {
|
|
12
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.AutoApprove", version: "0.100.
|
|
12
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.AutoApprove", version: "0.100.1" };
|
|
13
13
|
label;
|
|
14
14
|
constructor(github, options = {}) {
|
|
15
15
|
super(github.project);
|
package/lib/github/auto-merge.js
CHANGED
|
@@ -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.100.
|
|
22
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.AutoMerge", version: "0.100.1" };
|
|
23
23
|
lazyConditions = new Array();
|
|
24
24
|
constructor(github, options = {}) {
|
|
25
25
|
super(github.project);
|
package/lib/github/auto-queue.js
CHANGED
|
@@ -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.100.
|
|
57
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.AutoQueue", version: "0.100.1" };
|
|
58
58
|
constructor(scope, options = {}) {
|
|
59
59
|
super(scope);
|
|
60
60
|
const workflowEngine = github_1.GitHub.of(this.project);
|
package/lib/github/dependabot.js
CHANGED
|
@@ -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.100.
|
|
169
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.Dependabot", version: "0.100.1" };
|
|
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 runner_options_1 = require("../runner-options");
|
|
|
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.100.
|
|
18
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.DependencyReview", version: "0.100.1" };
|
|
19
19
|
constructor(github, options = {}) {
|
|
20
20
|
super(github.project);
|
|
21
21
|
const commentSummary = options.commentSummaryInPr ?? "always";
|
|
@@ -41,7 +41,7 @@ const Case = __importStar(require("case"));
|
|
|
41
41
|
*/
|
|
42
42
|
class GithubCredentials {
|
|
43
43
|
options;
|
|
44
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.GithubCredentials", version: "0.100.
|
|
44
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.GithubCredentials", version: "0.100.1" };
|
|
45
45
|
/**
|
|
46
46
|
* Provide API access through a GitHub personal access token.
|
|
47
47
|
*
|
|
@@ -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.100.
|
|
24
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.GitHubProject", version: "0.100.1" };
|
|
25
25
|
/**
|
|
26
26
|
* Access all github components.
|
|
27
27
|
*
|
package/lib/github/github.js
CHANGED
|
@@ -15,7 +15,7 @@ const workflow_steps_1 = require("./workflow-steps");
|
|
|
15
15
|
const workflows_1 = require("./workflows");
|
|
16
16
|
const component_1 = require("../component");
|
|
17
17
|
class GitHub extends component_1.Component {
|
|
18
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.GitHub", version: "0.100.
|
|
18
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.GitHub", version: "0.100.1" };
|
|
19
19
|
/**
|
|
20
20
|
* Returns the `GitHub` component of a project or `undefined` if the project
|
|
21
21
|
* 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.100.
|
|
13
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.MergeQueue", version: "0.100.1" };
|
|
14
14
|
constructor(scope, options = {}) {
|
|
15
15
|
super(scope);
|
|
16
16
|
this.options = options;
|
package/lib/github/mergify.js
CHANGED
|
@@ -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.100.
|
|
9
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.Mergify", version: "0.100.1" };
|
|
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.100.
|
|
10
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.PullRequestTemplate", version: "0.100.1" };
|
|
11
11
|
/**
|
|
12
12
|
* Returns the `PullRequestTemplate` instance associated with a project or `undefined` if
|
|
13
13
|
* there is no PullRequestTemplate.
|
|
@@ -9,7 +9,7 @@ const component_1 = require("../component");
|
|
|
9
9
|
const json_1 = require("../json");
|
|
10
10
|
const release_1 = require("../release");
|
|
11
11
|
class PullRequestBackport extends component_1.Component {
|
|
12
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.PullRequestBackport", version: "0.100.
|
|
12
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.PullRequestBackport", version: "0.100.1" };
|
|
13
13
|
file;
|
|
14
14
|
workflow;
|
|
15
15
|
constructor(scope, options = {}) {
|
|
@@ -13,7 +13,7 @@ const runner_options_1 = require("../runner-options");
|
|
|
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.100.
|
|
16
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.PullRequestLint", version: "0.100.1" };
|
|
17
17
|
constructor(github, options = {}) {
|
|
18
18
|
super(github.project);
|
|
19
19
|
this.github = github;
|
package/lib/github/stale.js
CHANGED
|
@@ -18,7 +18,7 @@ const runner_options_1 = require("../runner-options");
|
|
|
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.100.
|
|
21
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.Stale", version: "0.100.1" };
|
|
22
22
|
constructor(github, options = {}) {
|
|
23
23
|
super(github.project);
|
|
24
24
|
const stale = github.addWorkflow("stale");
|
|
@@ -13,7 +13,7 @@ const util_1 = require("./private/util");
|
|
|
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.100.
|
|
16
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen.github.TaskWorkflowJob", version: "0.100.1" };
|
|
17
17
|
runsOn;
|
|
18
18
|
runsOnGroup;
|
|
19
19
|
steps;
|