projen 0.100.6 → 0.100.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +149 -58
- 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 +9 -9
- package/lib/awscdk/integ-runner.js +9 -3
- package/lib/awscdk/integration-test.js +12 -6
- 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 +5 -5
- package/lib/cdk/jsii-docgen.js +3 -3
- package/lib/cdk/jsii-project.js +1 -1
- package/lib/cdk8s/auto-discover.js +2 -2
- package/lib/cdk8s/cdk8s-app-py.js +3 -3
- package/lib/cdk8s/cdk8s-app-ts.js +4 -4
- 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 +17 -10
- package/lib/cdktf/cdktf-construct.js +1 -1
- package/lib/circleci/circleci.js +1 -1
- package/lib/cli/cmds/run-task.js +4 -1
- package/lib/cli/task-runtime.js +82 -19
- package/lib/common.d.ts +1 -1
- package/lib/common.js +2 -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 +3 -3
- package/lib/java/maven-compile.js +3 -3
- package/lib/java/maven-packaging.js +3 -3
- package/lib/java/maven-sample.js +1 -1
- package/lib/java/pom.js +2 -2
- package/lib/java/projenrc.js +3 -3
- package/lib/javascript/biome/biome.js +1 -1
- package/lib/javascript/bundler.js +3 -3
- package/lib/javascript/eslint.js +1 -1
- package/lib/javascript/jest.js +4 -4
- package/lib/javascript/license-checker.js +5 -5
- package/lib/javascript/node-package.js +1 -1
- package/lib/javascript/node-project.js +13 -4
- package/lib/javascript/npm-config.js +1 -1
- package/lib/javascript/prettier.js +1 -1
- package/lib/javascript/projenrc.js +3 -3
- package/lib/javascript/typescript-config.js +2 -2
- package/lib/javascript/upgrade-dependencies.js +4 -4
- 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 +17 -5
- package/lib/python/poetry.js +7 -7
- package/lib/python/projenrc.js +3 -3
- 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 +8 -3
- package/lib/python/uv.js +6 -6
- 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 +56 -20
- package/lib/sample-file.js +2 -2
- package/lib/source-code.js +1 -1
- package/lib/task-model.d.ts +25 -1
- package/lib/task-model.js +1 -1
- package/lib/task.d.ts +33 -0
- package/lib/task.js +28 -2
- package/lib/tasks.js +1 -1
- 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 +9 -3
- package/lib/typescript/typescript.js +8 -10
- package/lib/util/exec.d.ts +1 -1
- package/lib/util/exec.js +1 -1
- 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 +9 -9
- package/lib/web/postcss.js +1 -1
- package/lib/web/react.js +7 -7
- package/lib/web/tailwind.js +1 -1
- package/lib/xmlfile.js +1 -1
- package/lib/yaml.js +1 -1
- package/package.json +4 -4
package/lib/cli/task-runtime.js
CHANGED
|
@@ -270,21 +270,49 @@ class RunTask {
|
|
|
270
270
|
if (step.builtin) {
|
|
271
271
|
execs.push(this.renderBuiltin(step.builtin));
|
|
272
272
|
}
|
|
273
|
+
// `execArgs` is an explicit argv (the program followed by its arguments).
|
|
274
|
+
// It is handed to `shell()` as an array rather than a rendered string, so
|
|
275
|
+
// it runs without a shell and every element is passed through verbatim -
|
|
276
|
+
// which is what lets callers avoid thinking about quoting. Fixed/received
|
|
277
|
+
// args are spliced in wherever a `$@` marker element appears (mirroring
|
|
278
|
+
// the string `exec` behavior), or appended at the end if there is none.
|
|
279
|
+
if (step.execArgs) {
|
|
280
|
+
const argv = [];
|
|
281
|
+
let placed = false;
|
|
282
|
+
for (const element of step.execArgs) {
|
|
283
|
+
if (element === ARGS_MARKER) {
|
|
284
|
+
argv.push(...argsList);
|
|
285
|
+
placed = true;
|
|
286
|
+
}
|
|
287
|
+
else {
|
|
288
|
+
argv.push(element);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
if (!placed) {
|
|
292
|
+
argv.push(...argsList);
|
|
293
|
+
}
|
|
294
|
+
execs.push(argv);
|
|
295
|
+
}
|
|
273
296
|
for (const exec of execs) {
|
|
274
297
|
let hasError = false;
|
|
275
298
|
let command = exec;
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
299
|
+
// String commands (`exec`/`builtin`) are shell command lines, so the
|
|
300
|
+
// task args are spliced in following the `$@` marker rules. Array
|
|
301
|
+
// commands (`execArgs`) already carry their args and are left untouched.
|
|
302
|
+
if (typeof command === "string") {
|
|
303
|
+
if (command.includes(QUOTED_ARGS_MARKER)) {
|
|
304
|
+
// Poorly imitate bash quoted variable expansion. If "$@" is encountered in bash, elements of the arg array
|
|
305
|
+
// that contain whitespace will be single quoted ('arg'). This preserves whitespace in things like filenames.
|
|
306
|
+
// Imitate that behavior here by single quoting every element of the arg array when a quoted arg marker ("$@")
|
|
307
|
+
// is encountered.
|
|
308
|
+
command = command.replace(QUOTED_ARGS_MARKER, argsList.map((arg) => `'${arg}'`).join(" "));
|
|
309
|
+
}
|
|
310
|
+
else if (command.includes(ARGS_MARKER)) {
|
|
311
|
+
command = command.replace(ARGS_MARKER, argsList.join(" "));
|
|
312
|
+
}
|
|
313
|
+
else {
|
|
314
|
+
command = [command, ...argsList].join(" ");
|
|
315
|
+
}
|
|
288
316
|
}
|
|
289
317
|
const cwd = step.cwd;
|
|
290
318
|
try {
|
|
@@ -304,7 +332,7 @@ class RunTask {
|
|
|
304
332
|
throw e;
|
|
305
333
|
}
|
|
306
334
|
if (hasError) {
|
|
307
|
-
throw new Error(`Task "${this.fullname}" failed when executing "${command}" (cwd: ${(0, path_1.resolve)(cwd ?? this.workdir)})`);
|
|
335
|
+
throw new Error(`Task "${this.fullname}" failed when executing "${Array.isArray(command) ? command.join(" ") : command}" (cwd: ${(0, path_1.resolve)(cwd ?? this.workdir)})`);
|
|
308
336
|
}
|
|
309
337
|
}
|
|
310
338
|
}
|
|
@@ -406,7 +434,9 @@ class RunTask {
|
|
|
406
434
|
if (options.logprefix) {
|
|
407
435
|
log.push(options.logprefix);
|
|
408
436
|
}
|
|
409
|
-
log.push(options.command)
|
|
437
|
+
log.push(Array.isArray(options.command)
|
|
438
|
+
? options.command.join(" ")
|
|
439
|
+
: options.command);
|
|
410
440
|
if (options.cwd) {
|
|
411
441
|
log.push(`(cwd: ${options.cwd})`);
|
|
412
442
|
}
|
|
@@ -424,6 +454,7 @@ class RunTask {
|
|
|
424
454
|
// stdout/stderr are only captured when a caller pipes them (e.g.
|
|
425
455
|
// `shellEval`); otherwise inherit so output is streamed to the terminal.
|
|
426
456
|
const capture = Array.isArray(options.spawnOptions?.stdio);
|
|
457
|
+
const command = options.command;
|
|
427
458
|
// On Windows the default shell (cmd.exe) does not understand the POSIX-style
|
|
428
459
|
// commands projen tasks are written in (`cat`, `cp`, `mkdir -p`, `rm -rf`,
|
|
429
460
|
// `&&` chains, `$VAR`, ...). Run the command through dax's cross-platform
|
|
@@ -431,7 +462,14 @@ class RunTask {
|
|
|
431
462
|
// commands. Now that the task runtime is asynchronous we can drive dax's
|
|
432
463
|
// `$` API directly instead of spawning a synchronous child node process.
|
|
433
464
|
if (process.platform === "win32") {
|
|
434
|
-
|
|
465
|
+
// An array command is an explicit argv: interpolate it through dax (NOT
|
|
466
|
+
// `$.raw`) so each element is passed as a single argument with no
|
|
467
|
+
// quoting/expansion. A string command is a shell line, run verbatim via
|
|
468
|
+
// `$.raw`.
|
|
469
|
+
const cmd = Array.isArray(command)
|
|
470
|
+
? (0, dax_1.$) `${command[0]} ${command.slice(1)}`
|
|
471
|
+
: dax_1.$.raw `${command}`;
|
|
472
|
+
const result = await cmd
|
|
435
473
|
.cwd(cwd)
|
|
436
474
|
.env(env)
|
|
437
475
|
.stdout(capture ? "piped" : "inherit")
|
|
@@ -443,9 +481,34 @@ class RunTask {
|
|
|
443
481
|
stderr: capture ? Buffer.from(result.stderrBytes) : null,
|
|
444
482
|
};
|
|
445
483
|
}
|
|
446
|
-
// On other platforms
|
|
447
|
-
//
|
|
448
|
-
|
|
484
|
+
// On other platforms a string command is a shell line, run through the
|
|
485
|
+
// system shell via `rawShell`.
|
|
486
|
+
if (!Array.isArray(command)) {
|
|
487
|
+
return exec_1.rawShell.exec(command, { cwd, env, capture });
|
|
488
|
+
}
|
|
489
|
+
// An array command is an explicit argv: run the program directly, without
|
|
490
|
+
// a shell, via the structured `tool` helper - so each element is passed
|
|
491
|
+
// verbatim and there is no quoting to get right. `tool.run` throws on a
|
|
492
|
+
// non-zero exit (with a numeric `status`) and on a spawn failure (without
|
|
493
|
+
// one); translate the former into a normalized result and re-throw the
|
|
494
|
+
// latter, matching `rawShell.exec`'s non-throwing contract. Array commands
|
|
495
|
+
// are always run with inherited stdio - the capturing callers (condition
|
|
496
|
+
// and env evaluation) only ever pass string commands.
|
|
497
|
+
const [file, ...args] = command;
|
|
498
|
+
try {
|
|
499
|
+
(0, exec_1.tool)(file).run(args, {
|
|
500
|
+
cwd,
|
|
501
|
+
env,
|
|
502
|
+
inheritStdio: true,
|
|
503
|
+
});
|
|
504
|
+
return { status: 0 };
|
|
505
|
+
}
|
|
506
|
+
catch (e) {
|
|
507
|
+
if (typeof e?.status === "number") {
|
|
508
|
+
return { status: e.status };
|
|
509
|
+
}
|
|
510
|
+
throw e;
|
|
511
|
+
}
|
|
449
512
|
}
|
|
450
513
|
async shellEval(options) {
|
|
451
514
|
return this.shell({
|
|
@@ -474,4 +537,4 @@ class RunTask {
|
|
|
474
537
|
return `"${process.execPath}" "${program}"`;
|
|
475
538
|
}
|
|
476
539
|
}
|
|
477
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1ydW50aW1lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS90YXNrLXJ1bnRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsMkJBQXdEO0FBQ3hELCtCQUE4QztBQUM5QywyQ0FBNkI7QUFDN0IsK0JBQThCO0FBQzlCLGlDQUF3QztBQUN4Qyw2QkFBd0I7QUFDeEIsc0NBQStEO0FBQy9ELG9EQUFzQztBQUV0Qyx1Q0FBd0M7QUFFeEMscUVBQXFFO0FBQ3JFLGdGQUFnRjtBQUNoRixnRkFBZ0Y7QUFDaEYsMkVBQTJFO0FBQzNFLG1FQUFtRTtBQUNuRSxpRUFBaUU7QUFDakUsTUFBTSx1QkFBdUIsR0FBRyxPQUFPLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUMvRCxNQUFNLGlCQUFpQixHQUNyQix1QkFBdUIsRUFBRSxPQUFPLElBQUksdUJBQXVCLENBQUM7QUFFOUQsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO0FBQ3hCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQztBQUN6QixNQUFNLGtCQUFrQixHQUFHLElBQUksV0FBVyxHQUFHLENBQUM7QUFrQzlDOztHQUVHO0FBQ0gsTUFBYSxXQUFXO0lBQ3RCOztPQUVHO0lBQ0ksTUFBTSxDQUFVLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDcEQsbUJBQVUsRUFDVixZQUFZLENBQ2IsQ0FBQztJQUVGOzs7Ozs7Ozs7T0FTRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQWUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDaEIsT0FB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dXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU3Bhd25PcHRpb25zIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IGV4aXN0c1N5bmMsIHJlYWRGaWxlU3luYywgc3RhdFN5bmMgfSBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4sIHJlc29sdmUgfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSBcInV0aWxcIjtcbmltcG9ydCB7IGdyYXksIHVuZGVybGluZSB9IGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0IHsgJCB9IGZyb20gXCJkYXhcIjtcbmltcG9ydCB7IFBST0pFTl9ESVIsIFRBU0tTX01BTklGRVNUX1ZFUlNJT04gfSBmcm9tIFwiLi4vY29tbW9uXCI7XG5pbXBvcnQgKiBhcyBsb2dnaW5nIGZyb20gXCIuLi9sb2dnaW5nXCI7XG5pbXBvcnQgdHlwZSB7IFRhc2tzTWFuaWZlc3QsIFRhc2tTcGVjLCBUYXNrU3RlcCB9IGZyb20gXCIuLi90YXNrLW1vZGVsXCI7XG5pbXBvcnQgeyByYXdTaGVsbCB9IGZyb20gXCIuLi91dGlsL2V4ZWNcIjtcblxuLy8gYXZvaWRzIGEgKGZhbHNlIHBvc2l0aXZlKSBlc2J1aWxkIHdhcm5pbmcgYWJvdXQgaW5jb3JyZWN0IGltcG9ydHMuXG4vLyBgPy5kZWZhdWx0ID8/IG1vZHVsZWAga2VlcHMgdGhpcyB3b3JraW5nIGJvdGggYXMgYSBwbGFpbiBDb21tb25KUyByZXF1aXJlIGFuZFxuLy8gd2hlbiB0aGUgZGVwZW5kZW5jeSBpcyBpbnRlcm9wLXdyYXBwZWQgaW5zaWRlIHRoZSBidW5kbGVkIHJ1bi10YXNrLmNqcyAod2hlcmVcbi8vIGByZXF1aXJlKC4uLilgIG1heSB5aWVsZCBgeyBkZWZhdWx0OiBmbiB9YCBpbnN0ZWFkIG9mIHRoZSBmdW5jdGlvbikuIFNlZVxuLy8gcHJvamVuIzQ0MDcgKFwicGFyc2VDb25mbGljdEpTT04gaXMgbm90IGEgZnVuY3Rpb25cIiBhZnRlciBlamVjdCkuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuY29uc3QgcGFyc2VDb25mbGljdEpTT05Nb2R1bGUgPSByZXF1aXJlKFwicGFyc2UtY29uZmxpY3QtanNvblwiKTtcbmNvbnN0IHBhcnNlQ29uZmxpY3RKU09OID1cbiAgcGFyc2VDb25mbGljdEpTT05Nb2R1bGU/LmRlZmF1bHQgPz8gcGFyc2VDb25mbGljdEpTT05Nb2R1bGU7XG5cbmNvbnN0IEVOVl9UUklNX0xFTiA9IDIwO1xuY29uc3QgQVJHU19NQVJLRVIgPSBcIiRAXCI7XG5jb25zdCBRVU9URURfQVJHU19NQVJLRVIgPSBgXCIke0FSR1NfTUFSS0VSfVwiYDtcblxuLyoqXG4gKiBUaGUgcmVzdWx0IG9mIGV4ZWN1dGluZyBhIHNoZWxsIGNvbW1hbmQuXG4gKlxuICogVGhpcyBpcyBhIG5vcm1hbGl6ZWQgc3Vic2V0IG9mIG5vZGUncyBgU3Bhd25TeW5jUmV0dXJuc2Agc28gdGhhdCB0aGVcbiAqIHN5bmNocm9ub3VzIChgc3Bhd25TeW5jYCkgYW5kIGFzeW5jaHJvbm91cyAoYGRheGApIGV4ZWN1dGlvbiBwYXRocyBjYW4gcmV0dXJuXG4gKiBhIGNvbXBhdGlibGUgc2hhcGUuXG4gKi9cbmludGVyZmFjZSBTaGVsbFJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgZXhpdCBjb2RlIG9mIHRoZSBjb21tYW5kLCBvciBgbnVsbGAgaWYgdGhlIHByb2Nlc3Mgd2FzIHRlcm1pbmF0ZWQgYnkgYVxuICAgKiBzaWduYWwgb3IgbmV2ZXIgc3Bhd25lZC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1czogbnVtYmVyIHwgbnVsbDtcblxuICAvKipcbiAgICogQ2FwdHVyZWQgc3Rkb3V0LiBPbmx5IHBvcHVsYXRlZCB3aGVuIHN0ZG91dCBpcyBwaXBlZCAoZS5nLiB3aGVuIGV2YWx1YXRpbmdcbiAgICogZW52aXJvbm1lbnQgdmFyaWFibGVzKTsgYG51bGxgL2B1bmRlZmluZWRgIHdoZW4gc3RkaW8gaXMgaW5oZXJpdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc3Rkb3V0PzogQnVmZmVyIHwgbnVsbDtcblxuICAvKipcbiAgICogQ2FwdHVyZWQgc3RkZXJyLiBTZWUgYHN0ZG91dGAuXG4gICAqL1xuICByZWFkb25seSBzdGRlcnI/OiBCdWZmZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBBbiBlcnJvciByYWlzZWQgd2hpbGUgYXR0ZW1wdGluZyB0byBzcGF3biB0aGUgY29tbWFuZCAobm90IGEgbm9uLXplcm8gZXhpdFxuICAgKiBjb2RlLCB3aGljaCBpcyByZXBvcnRlZCB2aWEgYHN0YXR1c2ApLlxuICAgKi9cbiAgcmVhZG9ubHkgZXJyb3I/OiBFcnJvcjtcbn1cblxuLyoqXG4gKiBUaGUgcnVudGltZSBjb21wb25lbnQgb2YgdGhlIHRhc2tzIGVuZ2luZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFRhc2tSdW50aW1lIHtcbiAgLyoqXG4gICAqIFRoZSBwcm9qZWN0LXJlbGF0aXZlIHBhdGggb2YgdGhlIHRhc2tzIG1hbmlmZXN0IGZpbGUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1BTklGRVNUX0ZJTEUgPSBwYXRoLnBvc2l4LmpvaW4oXG4gICAgUFJPSkVOX0RJUixcbiAgICBcInRhc2tzLmpzb25cIixcbiAgKTtcblxuICAvKipcbiAgICogT25lLXNob3QgZW50cnlwb2ludCBmb3IgdGhlIHN0YW5kYWxvbmUgdGFzayBydW5uZXIuXG4gICAqXG4gICAqIENyZWF0ZXMgYSBydW50aW1lIHJvb3RlZCBhdCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSwgcnVucyB0aGUgbmFtZWRcbiAgICogdGFzaywgYW5kIGNvbnZlcnRzIGFueSBmYWlsdXJlIGludG8gYSBub24temVybyBwcm9jZXNzIGV4aXQgY29kZS4gVGhpcyBpc1xuICAgKiB0aGUgc2luZ2xlIGxpbmUgaW52b2tlZCBieSB0aGUgYnVuZGxlZCBgc2NyaXB0cy9ydW4tdGFzay5janNgIHRoYXRcbiAgICogXCJwcm9qZW4gZWplY3RcIiBlbWl0cywgd2hpY2gga2VlcHMgdGhlIGdlbmVyYXRlZCBidW5kbGUgZm9vdGVyIHRyaXZpYWwuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSB0YXNrIHRvIHJ1bi4gRGVmYXVsdHMgdG8gYHByb2Nlc3MuYXJndlsyXWAuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGFzeW5jIG1haW4obmFtZTogc3RyaW5nID0gcHJvY2Vzcy5hcmd2WzJdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG5ldyBUYXNrUnVudGltZShcIi5cIikucnVuVGFzayhuYW1lKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZT8uc3RhY2sgPz8gU3RyaW5nKGUpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNvbnRlbnRzIG9mIHRhc2tzLmpzb25cbiAgICovXG4gIHByaXZhdGUgX21hbmlmZXN0OiBUYXNrc01hbmlmZXN0ID0geyB0YXNrczoge30gfTtcblxuICAvKipcbiAgICogVGhlIHJhdyBjb250ZW50cyBvZiB0aGUgY3VycmVudGx5IGxvYWRlZCBtYW5pZmVzdCwgdXNlZCB0byBkZXRlY3QgY2hhbmdlc1xuICAgKiBvbiBkaXNrIHNvIHRoZSBydW50aW1lIGNhbiByZWxvYWQgYSByZWdlbmVyYXRlZCBtYW5pZmVzdCBtaWQtcnVuLlxuICAgKi9cbiAgcHJpdmF0ZSBfaWRlbnRpdHk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgcHJvamVjdCBhbmQgdGhlIGN3ZCBmb3IgZXhlY3V0aW5nIHRhc2tzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHdvcmtkaXI6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcih3b3JrZGlyOiBzdHJpbmcpIHtcbiAgICB0aGlzLndvcmtkaXIgPSByZXNvbHZlKHdvcmtkaXIpO1xuICAgIC8vIFBlcmZvcm0gdGhlIGluaXRpYWwgbG9hZC4gVGhpcyBhbHNvIHZlcmlmaWVzIHRoZSBtYW5pZmVzdCdzIHNjaGVtYVxuICAgIC8vIHZlcnNpb24uXG4gICAgdGhpcy5yZWxvYWRNYW5pZmVzdElmQ2hhbmdlZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50cyBvZiB0YXNrcy5qc29uXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1hbmlmZXN0KCk6IFRhc2tzTWFuaWZlc3Qge1xuICAgIHJldHVybiB0aGlzLl9tYW5pZmVzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgdGFza3MgbWFuaWZlc3QgZmlsZS5cbiAgICovXG4gIHByaXZhdGUgZ2V0IG1hbmlmZXN0UGF0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBqb2luKHRoaXMud29ya2RpciwgVGFza1J1bnRpbWUuTUFOSUZFU1RfRklMRSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRhc2tzIGluIHRoaXMgcHJvamVjdC5cbiAgICovXG4gIHB1YmxpYyBnZXQgdGFza3MoKTogVGFza1NwZWNbXSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5tYW5pZmVzdC50YXNrcyA/PyB7fSk7XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhIHRhc2sgYnkgbmFtZSwgb3IgYHVuZGVmaW5lZGAgaWYgbm90IGZvdW5kLlxuICAgKi9cbiAgcHVibGljIHRyeUZpbmRUYXNrKG5hbWU6IHN0cmluZyk6IFRhc2tTcGVjIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMubWFuaWZlc3QudGFza3MpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm1hbmlmZXN0LnRhc2tzW25hbWVdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgdGhlIHRhc2suXG4gICAqIEBwYXJhbSBuYW1lIFRoZSB0YXNrIG5hbWUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcnVuVGFzayhcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcGFyZW50czogc3RyaW5nW10gPSBbXSxcbiAgICBhcmdzOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+ID0gW10sXG4gICAgZW52OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBBIHByZXZpb3VzbHkgZXhlY3V0ZWQgdGFzayAobW9zdCBpbXBvcnRhbnRseSB0aGUgXCJkZWZhdWx0XCIvc3ludGggdGFzayxcbiAgICAvLyB3aGljaCBgYnVpbGRgIHNwYXducyBmaXJzdCkgbWF5IGhhdmUgcmVnZW5lcmF0ZWQgYC5wcm9qZW4vdGFza3MuanNvbmAuXG4gICAgLy8gUGljayB1cCBhbnkgc3VjaCBjaGFuZ2VzIGJlZm9yZSByZXNvbHZpbmcgYW5kIHJ1bm5pbmcgdGhpcyB0YXNrIHNvIHdlXG4gICAgLy8gbmV2ZXIgZXhlY3V0ZSBhIHN0YWxlLCBpbi1tZW1vcnkgZGVmaW5pdGlvbi5cbiAgICB0aGlzLnJlbG9hZE1hbmlmZXN0SWZDaGFuZ2VkKCk7XG5cbiAgICBjb25zdCB0YXNrID0gdGhpcy50cnlGaW5kVGFzayhuYW1lKTtcbiAgICBpZiAoIXRhc2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgY2Fubm90IGZpbmQgY29tbWFuZCAke25hbWV9YCk7XG4gICAgfVxuXG4gICAgYXdhaXQgbmV3IFJ1blRhc2sodGhpcywgdGFzaywgcGFyZW50cywgYXJncywgZW52KS5ydW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZS1yZWFkcyB0aGUgdGFza3MgbWFuaWZlc3QgZnJvbSBkaXNrIGlmIGl0cyBjb250ZW50cyBjaGFuZ2VkIHNpbmNlIGl0IHdhc1xuICAgKiBsYXN0IGxvYWRlZCwgdmVyaWZ5aW5nIGl0cyBzY2hlbWEgdmVyc2lvbiBhbG9uZyB0aGUgd2F5LlxuICAgKlxuICAgKiBDaGFuZ2UgZGV0ZWN0aW9uIGNvbXBhcmVzIHRoZSByYXcgZmlsZSBjb250ZW50cywgc28gYW4gdW5jaGFuZ2VkIG1hbmlmZXN0XG4gICAqIGlzIG5vdCByZS12ZXJpZmllZCBvciByZS1hZG9wdGVkLlxuICAgKi9cbiAgcHJpdmF0ZSByZWxvYWRNYW5pZmVzdElmQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICBpZiAoIWV4aXN0c1N5bmModGhpcy5tYW5pZmVzdFBhdGgpKSB7XG4gICAgICAvLyBObyBtYW5pZmVzdCBvbiBkaXNrOiB0cmVhdCBhcyBhbiBlbXB0eSBwcm9qZWN0IChsZWdhY3kgYmVoYXZpb3IpLlxuICAgICAgdGhpcy5fbWFuaWZlc3QgPSB7IHRhc2tzOiB7fSB9O1xuICAgICAgdGhpcy5faWRlbnRpdHkgPSB1bmRlZmluZWQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmF3ID0gcmVhZEZpbGVTeW5jKHRoaXMubWFuaWZlc3RQYXRoLCBcInV0Zi04XCIpO1xuICAgIGlmIChyYXcgPT09IHRoaXMuX2lkZW50aXR5KSB7XG4gICAgICByZXR1cm47IC8vIHVuY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBsb2FkXG4gICAgfVxuXG4gICAgY29uc3QgbWFuaWZlc3Q6IFRhc2tzTWFuaWZlc3QgPSBwYXJzZUNvbmZsaWN0SlNPTihyYXcsIHVuZGVmaW5lZCwgXCJ0aGVpcnNcIik7XG5cbiAgICAvLyBBIHByZXZpb3VzbHkgbG9hZGVkIG1hbmlmZXN0IG1lYW5zIHRoaXMgaXMgYSAqcmVsb2FkKiAoZS5nLiB0aGVcbiAgICAvLyBcImRlZmF1bHRcIi9zeW50aCB0YXNrIHJlZ2VuZXJhdGVkIHRoZSBmaWxlIG1pZC1ydW4pLCBhcyBvcHBvc2VkIHRvIHRoZVxuICAgIC8vIGluaXRpYWwgbG9hZCBwZXJmb3JtZWQgYnkgdGhlIGNvbnN0cnVjdG9yLlxuICAgIGNvbnN0IGlzUmVsb2FkID0gdGhpcy5faWRlbnRpdHkgIT09IHVuZGVmaW5lZDtcblxuICAgIHRoaXMudmVyaWZ5TWFuaWZlc3QobWFuaWZlc3QpO1xuICAgIHRoaXMuX21hbmlmZXN0ID0gbWFuaWZlc3Q7XG4gICAgdGhpcy5faWRlbnRpdHkgPSByYXc7XG5cbiAgICBpZiAoaXNSZWxvYWQpIHtcbiAgICAgIGxvZ2dpbmcuZGVidWcoXG4gICAgICAgIGAke1Rhc2tSdW50aW1lLk1BTklGRVNUX0ZJTEV9IGNoYW5nZWQgb24gZGlzazsgc3VjY2Vzc2Z1bGx5IGxvYWRlZCB0aGUgbmV3IHRhc2tzIG1hbmlmZXN0LmAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYSBmcmVzaGx5IHJlYWQgbWFuaWZlc3Q6XG4gICAqXG4gICAqIC0gTGVnYWN5IG1hbmlmZXN0cyAobm8gYG1hbmlmZXN0VmVyc2lvbmApIGFyZSBhY2NlcHRlZCBhcy1pcyBmb3IgYmFja3dhcmRzXG4gICAqICAgY29tcGF0aWJpbGl0eS5cbiAgICogLSBNYW5pZmVzdHMgZnJvbSBhIG5ld2VyIHByb2plbiAoYSBoaWdoZXIgYG1hbmlmZXN0VmVyc2lvbmApIGFyZSBhY2NlcHRlZFxuICAgKiAgIHdpdGggYSB3YXJuaW5nLCBzaW5jZSB0aGlzIHJ1bnRpbWUgbWF5IG5vdCB1bmRlcnN0YW5kIHRoZSBzY2hlbWEuXG4gICAqL1xuICBwcml2YXRlIHZlcmlmeU1hbmlmZXN0KG1hbmlmZXN0OiBUYXNrc01hbmlmZXN0KTogdm9pZCB7XG4gICAgLy8gQmFja3dhcmRzIGNvbXBhdGliaWxpdHk6IG1hbmlmZXN0cyBnZW5lcmF0ZWQgYmVmb3JlIHZlcnNpb25pbmcgY2Fycnkgbm9cbiAgICAvLyB2ZXJzaW9uLlxuICAgIGlmIChtYW5pZmVzdC5tYW5pZmVzdFZlcnNpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChtYW5pZmVzdC5tYW5pZmVzdFZlcnNpb24gPiBUQVNLU19NQU5JRkVTVF9WRVJTSU9OKSB7XG4gICAgICBsb2dnaW5nLndhcm4oXG4gICAgICAgIGAke1Rhc2tSdW50aW1lLk1BTklGRVNUX0ZJTEV9IHdhcyBnZW5lcmF0ZWQgYnkgYSBuZXdlciB2ZXJzaW9uIG9mIHByb2plbiBgICtcbiAgICAgICAgICBgKG1hbmlmZXN0IHZlcnNpb24gJHttYW5pZmVzdC5tYW5pZmVzdFZlcnNpb259LCB0aGlzIHByb2plbiBzdXBwb3J0cyB1cCB0byAke1RBU0tTX01BTklGRVNUX1ZFUlNJT059KS4gYCArXG4gICAgICAgICAgYFNvbWUgdGFza3MgbWF5IG5vdCBiZWhhdmUgYXMgZXhwZWN0ZWQ7IGNvbnNpZGVyIHVwZ3JhZGluZyBwcm9qZW4uYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmNsYXNzIFJ1blRhc2sge1xuICBwcml2YXRlIGVudjogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH0gPSB7fTtcbiAgcHJpdmF0ZSByZWFkb25seSBwYXJlbnRzOiBzdHJpbmdbXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHdvcmtkaXI6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJ1bnRpbWU6IFRhc2tSdW50aW1lLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGFzazogVGFza1NwZWMsXG4gICAgcGFyZW50czogc3RyaW5nW10gPSBbXSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFyZ3M6IEFycmF5PHN0cmluZyB8IG51bWJlcj4gPSBbXSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVudlBhcmFtOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9LFxuICApIHtcbiAgICB0aGlzLndvcmtkaXIgPSB0YXNrLmN3ZCA/PyB0aGlzLnJ1bnRpbWUud29ya2RpcjtcbiAgICB0aGlzLnBhcmVudHMgPSBwYXJlbnRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSB0YXNrLiBUaGlzIHdhcyBwcmV2aW91c2x5IGRvbmUgaW4gdGhlIGNvbnN0cnVjdG9yLCBidXQgaXMgbm93XG4gICAqIGFuIGFzeW5jIG1ldGhvZCBzaW5jZSBzaGVsbCBleGVjdXRpb24gaXMgYXN5bmNocm9ub3VzIChlLmcuIGRheCBvblxuICAgKiBXaW5kb3dzKS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyB0YXNrLCBhcmdzLCBwYXJlbnRzIH0gPSB0aGlzO1xuXG4gICAgaWYgKCF0YXNrLnN0ZXBzIHx8IHRhc2suc3RlcHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmxvZ0RlYnVnKGdyYXkoXCJObyBhY3Rpb25zIGhhdmUgYmVlbiBzcGVjaWZpZWQgZm9yIHRoaXMgdGFzay5cIikpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZW52ID0gYXdhaXQgdGhpcy5yZXNvbHZlRW52aXJvbm1lbnQodGhpcy5lbnZQYXJhbSwgcGFyZW50cyk7XG5cbiAgICBjb25zdCBlbnZsb2dzID0gW107XG4gICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5lbnYpKSB7XG4gICAgICBjb25zdCB2diA9IHYgPz8gXCJcIjtcbiAgICAgIGNvbnN0IHRyaW1tZWQgPVxuICAgICAgICB2di5sZW5ndGggPiBFTlZfVFJJTV9MRU4gPyB2di5zdWJzdHJpbmcoMCwgRU5WX1RSSU1fTEVOKSArIFwiLi4uXCIgOiB2djtcbiAgICAgIGVudmxvZ3MucHVzaChgJHtrfT0ke3RyaW1tZWR9YCk7XG4gICAgfVxuXG4gICAgaWYgKGVudmxvZ3MubGVuZ3RoKSB7XG4gICAgICB0aGlzLmxvZ0RlYnVnKGdyYXkoYCR7dW5kZXJsaW5lKFwiZW52XCIpfTogJHtlbnZsb2dzLmpvaW4oXCIgXCIpfWApKTtcbiAgICB9XG5cbiAgICAvLyBldmFsdWF0ZSBjb25kaXRpb25cbiAgICBpZiAoIShhd2FpdCB0aGlzLmV2YWxDb25kaXRpb24odGFzaykpKSB7XG4gICAgICB0aGlzLmxvZyhcImNvbmRpdGlvbiBleGl0ZWQgd2l0aCBub24temVybyAtIHNraXBwaW5nXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHZlcmlmeSB3ZSByZXF1aXJlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGRlZmluZWRcbiAgICBjb25zdCBtZXJnZWQgPSB7IC4uLnByb2Nlc3MuZW52LCAuLi50aGlzLmVudiB9O1xuICAgIGNvbnN0IG1pc3NpbmcgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiB0YXNrLnJlcXVpcmVkRW52ID8/IFtdKSB7XG4gICAgICBpZiAoIShuYW1lIGluIG1lcmdlZCkpIHtcbiAgICAgICAgbWlzc2luZy5wdXNoKG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtaXNzaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYG1pc3NpbmcgcmVxdWlyZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzOiAke21pc3Npbmcuam9pbihcIixcIil9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzdGVwIG9mIHRhc2suc3RlcHMpIHtcbiAgICAgIC8vIGV2YWx1YXRlIHN0ZXAgY29uZGl0aW9uXG4gICAgICBpZiAoIShhd2FpdCB0aGlzLmV2YWxDb25kaXRpb24oc3RlcCkpKSB7XG4gICAgICAgIHRoaXMubG9nKFwiY29uZGl0aW9uIGV4aXRlZCB3aXRoIG5vbi16ZXJvIC0gc2tpcHBpbmdcIik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhcmdzTGlzdDogc3RyaW5nW10gPSBbXG4gICAgICAgIC4uLihzdGVwLmFyZ3MgfHwgW10pLFxuICAgICAgICAuLi4oc3RlcC5yZWNlaXZlQXJncyA/IGFyZ3MgOiBbXSksXG4gICAgICBdLm1hcCgoYSkgPT4gYS50b1N0cmluZygpKTtcblxuICAgICAgaWYgKHN0ZXAuc2F5KSB7XG4gICAgICAgIGxvZ2dpbmcuaW5mbyh0aGlzLmZtdExvZyhzdGVwLnNheSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RlcC5zcGF3bikge1xuICAgICAgICBhd2FpdCB0aGlzLnJ1bnRpbWUucnVuVGFzayhcbiAgICAgICAgICBzdGVwLnNwYXduLFxuICAgICAgICAgIFsuLi50aGlzLnBhcmVudHMsIHRoaXMudGFzay5uYW1lXSxcbiAgICAgICAgICBhcmdzTGlzdCxcbiAgICAgICAgICBzdGVwLmVudixcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXhlY3MgPSBzdGVwLmV4ZWMgPyBbc3RlcC5leGVjXSA6IFtdO1xuXG4gICAgICAvLyBQYXJzZSBzdGVwLXNwZWNpZmljIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgICAgY29uc3QgZW52ID0gYXdhaXQgdGhpcy5ldmFsRW52aXJvbm1lbnQoc3RlcC5lbnYgPz8ge30pO1xuXG4gICAgICBpZiAoc3RlcC5idWlsdGluKSB7XG4gICAgICAgIGV4ZWNzLnB1c2godGhpcy5yZW5kZXJCdWlsdGluKHN0ZXAuYnVpbHRpbikpO1xuICAgICAgfVxuXG4gICAgICBmb3IgKGNvbnN0IGV4ZWMgb2YgZXhlY3MpIHtcbiAgICAgICAgbGV0IGhhc0Vycm9yID0gZmFsc2U7XG5cbiAgICAgICAgbGV0IGNvbW1hbmQgPSBleGVjO1xuXG4gICAgICAgIGlmIChjb21tYW5kLmluY2x1ZGVzKFFVT1RFRF9BUkdTX01BUktFUikpIHtcbiAgICAgICAgICAvLyBQb29ybHkgaW1pdGF0ZSBiYXNoIHF1b3RlZCB2YXJpYWJsZSBleHBhbnNpb24uIElmIFwiJEBcIiBpcyBlbmNvdW50ZXJlZCBpbiBiYXNoLCBlbGVtZW50cyBvZiB0aGUgYXJnIGFycmF5XG4gICAgICAgICAgLy8gdGhhdCBjb250YWluIHdoaXRlc3BhY2Ugd2lsbCBiZSBzaW5nbGUgcXVvdGVkICgnYXJnJykuIFRoaXMgcHJlc2VydmVzIHdoaXRlc3BhY2UgaW4gdGhpbmdzIGxpa2UgZmlsZW5hbWVzLlxuICAgICAgICAgIC8vIEltaXRhdGUgdGhhdCBiZWhhdmlvciBoZXJlIGJ5IHNpbmdsZSBxdW90aW5nIGV2ZXJ5IGVsZW1lbnQgb2YgdGhlIGFyZyBhcnJheSB3aGVuIGEgcXVvdGVkIGFyZyBtYXJrZXIgKFwiJEBcIilcbiAgICAgICAgICAvLyBpcyBlbmNvdW50ZXJlZC5cbiAgICAgICAgICBjb21tYW5kID0gY29tbWFuZC5yZXBsYWNlKFxuICAgICAgICAgICAgUVVPVEVEX0FSR1NfTUFSS0VSLFxuICAgICAgICAgICAgYXJnc0xpc3QubWFwKChhcmcpID0+IGAnJHthcmd9J2ApLmpvaW4oXCIgXCIpLFxuICAgICAgICAgICk7XG4gICAgICAgIH0gZWxzZSBpZiAoY29tbWFuZC5pbmNsdWRlcyhBUkdTX01BUktFUikpIHtcbiAgICAgICAgICBjb21tYW5kID0gY29tbWFuZC5yZXBsYWNlKEFSR1NfTUFSS0VSLCBhcmdzTGlzdC5qb2luKFwiIFwiKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgY29tbWFuZCA9IFtjb21tYW5kLCAuLi5hcmdzTGlzdF0uam9pbihcIiBcIik7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjd2QgPSBzdGVwLmN3ZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNoZWxsKHtcbiAgICAgICAgICAgIGNvbW1hbmQsXG4gICAgICAgICAgICBjd2QsXG4gICAgICAgICAgICBleHRyYUVudjogZW52LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGhhc0Vycm9yID0gcmVzdWx0LnN0YXR1cyAhPT0gMDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIGEgbm9uLXplcm8gZXhpdCBjb2RlIGlzIHJlcG9ydGVkIHZpYSBgcmVzdWx0LnN0YXR1c2AgYWJvdmU7IHRoaXNcbiAgICAgICAgICAvLyBjYXRjaCBoYW5kbGVzIGVycm9ycyB0aHJvd24gd2hpbGUgYXR0ZW1wdGluZyB0byBzcGF3biB0aGUgY29tbWFuZC5cbiAgICAgICAgICBpZiAoKGUgYXMgYW55KT8ubWVzc2FnZT8uc3RhcnRzV2l0aChcIm5vbi16ZXJvIGV4aXQgY29kZTpcIikpIHtcbiAgICAgICAgICAgIGhhc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzRXJyb3IpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgVGFzayBcIiR7XG4gICAgICAgICAgICAgIHRoaXMuZnVsbG5hbWVcbiAgICAgICAgICAgIH1cIiBmYWlsZWQgd2hlbiBleGVjdXRpbmcgXCIke2NvbW1hbmR9XCIgKGN3ZDogJHtyZXNvbHZlKFxuICAgICAgICAgICAgICBjd2QgPz8gdGhpcy53b3JrZGlyLFxuICAgICAgICAgICAgKX0pYCxcbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIERldGVybWluZXMgaWYgYSB0YXNrIHNob3VsZCBiZSBleGVjdXRlZCBiYXNlZCBvbiBcImNvbmRpdGlvblwiLlxuICAgKlxuICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSB0YXNrIHNob3VsZCBiZSBleGVjdXRlZCBvciBmYWxzZSBpZiB0aGUgY29uZGl0aW9uXG4gICAqIGV2YWx1YXRlcyB0byBmYWxzZSAoZXhpdHMgd2l0aCBub24temVybyksIGluZGljYXRpbmcgdGhhdCB0aGUgdGFzayBzaG91bGRcbiAgICogYmUgc2tpcHBlZC5cbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZXZhbENvbmRpdGlvbih0YXNrT3JTdGVwOiBUYXNrU3BlYyB8IFRhc2tTdGVwKSB7XG4gICAgLy8gbm8gY29uZGl0aW9uLCBjYXJyeSBvblxuICAgIGlmICghdGFza09yU3RlcC5jb25kaXRpb24pIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHRoaXMubG9nKGdyYXkoYCR7dW5kZXJsaW5lKFwiY29uZGl0aW9uXCIpfTogJHt0YXNrT3JTdGVwLmNvbmRpdGlvbn1gKSk7XG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zaGVsbCh7XG4gICAgICBjb21tYW5kOiB0YXNrT3JTdGVwLmNvbmRpdGlvbixcbiAgICAgIGxvZ3ByZWZpeDogXCJjb25kaXRpb246IFwiLFxuICAgICAgcXVpZXQ6IHRydWUsXG4gICAgfSk7XG4gICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IDApIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEV2YWx1YXRlcyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZnJvbSBzaGVsbCBjb21tYW5kcyAoZS5nLiBgJCh4eClgKVxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyBldmFsRW52aXJvbm1lbnQoZW52OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSkge1xuICAgIGNvbnN0IG91dHB1dDogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH0gPSB7fTtcblxuICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGVudiA/PyB7fSkpIHtcbiAgICAgIGlmIChTdHJpbmcodmFsdWUpLnN0YXJ0c1dpdGgoXCIkKFwiKSAmJiBTdHJpbmcodmFsdWUpLmVuZHNXaXRoKFwiKVwiKSkge1xuICAgICAgICBjb25zdCBxdWVyeSA9IHZhbHVlLnN1YnN0cmluZygyLCB2YWx1ZS5sZW5ndGggLSAxKTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zaGVsbEV2YWwoeyBjb21tYW5kOiBxdWVyeSB9KTtcbiAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgIT09IDApIHtcbiAgICAgICAgICBjb25zdCBlcnJvciA9IHJlc3VsdC5lcnJvclxuICAgICAgICAgICAgPyByZXN1bHQuZXJyb3Iuc3RhY2tcbiAgICAgICAgICAgIDogcmVzdWx0LnN0ZGVycj8udG9TdHJpbmcoKS50cmltKCkgfHxcbiAgICAgICAgICAgICAgcmVzdWx0LnN0ZG91dD8udG9TdHJpbmcoKS50cmltKCkgfHxcbiAgICAgICAgICAgICAgYGNvbW1hbmQgZXhpdGVkIHdpdGggY29kZSAke3Jlc3VsdC5zdGF0dXN9YDtcblxuICAgICAgICAgIGxvZ2dpbmcud2FybihcbiAgICAgICAgICAgIHRoaXMuZm10TG9nKFxuICAgICAgICAgICAgICBgJHt1bmRlcmxpbmUoa2V5KX06IHVuYWJsZSB0byBldmFsdWF0ZSBcIiR7cXVlcnl9XCIuIEVudmlyb25tZW50IHZhcmlhYmxlIHdpbGwgYmUgc2tpcHBlZC4gQ2hlY2sgdGhhdCB0aGUgY29tbWFuZCBleGlzdHMgYW5kIHJ1bnMgc3VjY2Vzc2Z1bGx5LmAsXG4gICAgICAgICAgICApLFxuICAgICAgICAgICk7XG4gICAgICAgICAgbG9nZ2luZy53YXJuKHRoaXMuZm10TG9nKGAke3VuZGVybGluZShrZXkpfTogJHtlcnJvcn1gKSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgb3V0cHV0W2tleV0gPSByZXN1bHQuc3Rkb3V0Py50b1N0cmluZyhcInV0Zi04XCIpLnRyaW0oKSA/PyBcIlwiO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBvdXRwdXRba2V5XSA9IHZhbHVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gb3V0cHV0O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIHJ1bnRpbWUgZW52aXJvbm1lbnQgZm9yIGEgdGFzay4gTmFtZWx5LCBpdCBzdXBwb3J0cyB0aGlzIHN5bnRheFxuICAgKiBgJCh4eClgIGZvciBhbGxvd2luZyBlbnZpcm9ubWVudCB0byBiZSBldmFsdWF0ZWQgYnkgZXhlY3V0aW5nIGEgc2hlbGxcbiAgICogY29tbWFuZCBhbmQgb2J0YWluaW5nIGl0cyByZXN1bHQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIHJlc29sdmVFbnZpcm9ubWVudChcbiAgICBlbnZQYXJhbTogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0sXG4gICAgcGFyZW50czogc3RyaW5nW10sXG4gICkge1xuICAgIGxldCBlbnYgPSB0aGlzLnJ1bnRpbWUubWFuaWZlc3QuZW52ID8/IHt9O1xuXG4gICAgLy8gYWRkIGVudiBmcm9tIGFsbCBwYXJlbnQgdGFza3Mgb25lIGJ5IG9uZVxuICAgIGZvciAoY29uc3QgcGFyZW50IG9mIHBhcmVudHMpIHtcbiAgICAgIGVudiA9IHtcbiAgICAgICAgLi4uZW52LFxuICAgICAgICAuLi4odGhpcy5ydW50aW1lLnRyeUZpbmRUYXNrKHBhcmVudCk/LmVudiA/PyB7fSksXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIGFwcGx5IHRhc2sgZW52aXJvbm1lbnQsIHRoZW4gdGhlIHNwZWNpZmljIGVudiBsYXN0XG4gICAgZW52ID0ge1xuICAgICAgLi4uZW52LFxuICAgICAgLi4uKHRoaXMudGFzay5lbnYgPz8ge30pLFxuICAgICAgLi4uZW52UGFyYW0sXG4gICAgfTtcblxuICAgIHJldHVybiB0aGlzLmV2YWxFbnZpcm9ubWVudChlbnYgPz8ge30pO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIFwiZnVsbCBuYW1lXCIgb2YgdGhlIHRhc2sgd2hpY2ggaW5jbHVkZXMgYWxsIGl0J3MgcGFyZW50IHRhc2sgbmFtZXMgY29uY2F0ZW5hdGVkIGJ5IGNoZXZyb25zLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXQgZnVsbG5hbWUoKSB7XG4gICAgcmV0dXJuIFsuLi50aGlzLnBhcmVudHMsIHRoaXMudGFzay5uYW1lXS5qb2luKFwiIMK7IFwiKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9nKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgbG9nZ2luZy52ZXJib3NlKHRoaXMuZm10TG9nKC4uLmFyZ3MpKTtcbiAgfVxuXG4gIHByaXZhdGUgbG9nRGVidWcoLi4uYXJnczogYW55W10pIHtcbiAgICBsb2dnaW5nLmRlYnVnKHRoaXMuZm10TG9nKC4uLmFyZ3MpKTtcbiAgfVxuXG4gIHByaXZhdGUgZm10TG9nKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgcmV0dXJuIGZvcm1hdChgJHt1bmRlcmxpbmUodGhpcy5mdWxsbmFtZSl9IHxgLCAuLi5hcmdzKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2hlbGwob3B0aW9uczogU2hlbGxPcHRpb25zKTogUHJvbWlzZTxTaGVsbFJlc3VsdD4ge1xuICAgIGNvbnN0IHF1aWV0ID0gb3B0aW9ucy5xdWlldCA/PyBmYWxzZTtcbiAgICBpZiAoIXF1aWV0KSB7XG4gICAgICBjb25zdCBsb2cgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuXG4gICAgICBpZiAob3B0aW9ucy5sb2dwcmVmaXgpIHtcbiAgICAgICAgbG9nLnB1c2gob3B0aW9ucy5sb2dwcmVmaXgpO1xuICAgICAgfVxuXG4gICAgICBsb2cucHVzaChvcHRpb25zLmNvbW1hbmQpO1xuXG4gICAgICBpZiAob3B0aW9ucy5jd2QpIHtcbiAgICAgICAgbG9nLnB1c2goYChjd2Q6ICR7b3B0aW9ucy5jd2R9KWApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxvZyhsb2cuam9pbihcIiBcIikpO1xuICAgIH1cblxuICAgIGNvbnN0IGN3ZCA9IG9wdGlvbnMuY3dkID8/IHRoaXMud29ya2RpcjtcbiAgICBpZiAoIWV4aXN0c1N5bmMoY3dkKSB8fCAhc3RhdFN5bmMoY3dkKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBpbnZhbGlkIHdvcmtkaXIgKGN3ZCk6ICR7Y3dkfSBtdXN0IGJlIGFuIGV4aXN0aW5nIGRpcmVjdG9yeWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGVudiA9IHtcbiAgICAgIC4uLnByb2Nlc3MuZW52LFxuICAgICAgLi4udGhpcy5lbnYsXG4gICAgICAuLi5vcHRpb25zLmV4dHJhRW52LFxuICAgIH07XG5cbiAgICAvLyBzdGRvdXQvc3RkZXJyIGFyZSBvbmx5IGNhcHR1cmVkIHdoZW4gYSBjYWxsZXIgcGlwZXMgdGhlbSAoZS5nLlxuICAgIC8vIGBzaGVsbEV2YWxgKTsgb3RoZXJ3aXNlIGluaGVyaXQgc28gb3V0cHV0IGlzIHN0cmVhbWVkIHRvIHRoZSB0ZXJtaW5hbC5cbiAgICBjb25zdCBjYXB0dXJlID0gQXJyYXkuaXNBcnJheShvcHRpb25zLnNwYXduT3B0aW9ucz8uc3RkaW8pO1xuXG4gICAgLy8gT24gV2luZG93cyB0aGUgZGVmYXVsdCBzaGVsbCAoY21kLmV4ZSkgZG9lcyBub3QgdW5kZXJzdGFuZCB0aGUgUE9TSVgtc3R5bGVcbiAgICAvLyBjb21tYW5kcyBwcm9qZW4gdGFza3MgYXJlIHdyaXR0ZW4gaW4gKGBjYXRgLCBgY3BgLCBgbWtkaXIgLXBgLCBgcm0gLXJmYCxcbiAgICAvLyBgJiZgIGNoYWlucywgYCRWQVJgLCAuLi4pLiBSdW4gdGhlIGNvbW1hbmQgdGhyb3VnaCBkYXgncyBjcm9zcy1wbGF0Zm9ybVxuICAgIC8vIHNoZWxsIGluc3RlYWQsIHdoaWNoIHNoaXBzIGJ1aWx0LWluIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgY29tbW9uXG4gICAgLy8gY29tbWFuZHMuIE5vdyB0aGF0IHRoZSB0YXNrIHJ1bnRpbWUgaXMgYXN5bmNocm9ub3VzIHdlIGNhbiBkcml2ZSBkYXgnc1xuICAgIC8vIGAkYCBBUEkgZGlyZWN0bHkgaW5zdGVhZCBvZiBzcGF3bmluZyBhIHN5bmNocm9ub3VzIGNoaWxkIG5vZGUgcHJvY2Vzcy5cbiAgICBpZiAocHJvY2Vzcy5wbGF0Zm9ybSA9PT0gXCJ3aW4zMlwiKSB7XG4gICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCAkLnJhd2Ake29wdGlvbnMuY29tbWFuZH1gXG4gICAgICAgIC5jd2QoY3dkKVxuICAgICAgICAuZW52KGVudilcbiAgICAgICAgLnN0ZG91dChjYXB0dXJlID8gXCJwaXBlZFwiIDogXCJpbmhlcml0XCIpXG4gICAgICAgIC5zdGRlcnIoY2FwdHVyZSA/IFwicGlwZWRcIiA6IFwiaW5oZXJpdFwiKVxuICAgICAgICAubm9UaHJvdygpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6IHJlc3VsdC5jb2RlLFxuICAgICAgICBzdGRvdXQ6IGNhcHR1cmUgPyBCdWZmZXIuZnJvbShyZXN1bHQuc3Rkb3V0Qnl0ZXMpIDogbnVsbCxcbiAgICAgICAgc3RkZXJyOiBjYXB0dXJlID8gQnVmZmVyLmZyb20ocmVzdWx0LnN0ZGVyckJ5dGVzKSA6IG51bGwsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIE9uIG90aGVyIHBsYXRmb3JtcywgcnVuIHRoZSBjb21tYW5kIHRocm91Z2ggdGhlIHN5c3RlbSBzaGVsbCB2aWEgdGhlXG4gICAgLy8gY2VudHJhbGl6ZWQgYHJhd1NoZWxsYCBoZWxwZXIuXG4gICAgcmV0dXJuIHJhd1NoZWxsLmV4ZWMob3B0aW9ucy5jb21tYW5kLCB7IGN3ZCwgZW52LCBjYXB0dXJlIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzaGVsbEV2YWwob3B0aW9uczogU2hlbGxPcHRpb25zKTogUHJvbWlzZTxTaGVsbFJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnNoZWxsKHtcbiAgICAgIHF1aWV0OiB0cnVlLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHNwYXduT3B0aW9uczoge1xuICAgICAgICBzdGRpbzogW1wiaW5oZXJpdFwiLCBcInBpcGVcIiwgXCJwaXBlXCJdLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQnVpbHRpbihidWlsdGluOiBzdHJpbmcpIHtcbiAgICAvLyBMb2NhdGUgcHJvamVuJ3MgcGFja2FnZSByb290IGJ5IHdhbGtpbmcgdXAgZnJvbSB0aGlzIG1vZHVsZSdzIGRpcmVjdG9yeVxuICAgIC8vIHVudGlsIHdlIGZpbmQgYSBwYWNrYWdlLmpzb24uIFRoaXMgd29ya3Mgd2hldGhlciB0aGUgY29kZSBydW5zIGZyb20gdGhlXG4gICAgLy8gY29tcGlsZWQgZmlsZSAobGliL2NsaS90YXNrLXJ1bnRpbWUuanMpIG9yIGZyb20gdGhlIGJ1bmRsZWQgcnVuLXRhc2suY2pzXG4gICAgLy8gKGxpYi9ydW4tdGFzay5janMpLCB3aGljaCBsaXZlIGF0IGRpZmZlcmVudCBkZXB0aHMgLSBzbyBhIGhhcmQtY29kZWRcbiAgICAvLyByZWxhdGl2ZSBwYXRoIHRvIHBhY2thZ2UuanNvbiB3b3VsZCBiZSB3cm9uZyBpbiBvbmUgb2YgdGhlIHR3byBjYXNlcy5cbiAgICBsZXQgbW9kdWxlUm9vdCA9IF9fZGlybmFtZTtcbiAgICB3aGlsZSAoIWV4aXN0c1N5bmMoam9pbihtb2R1bGVSb290LCBcInBhY2thZ2UuanNvblwiKSkpIHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGRpcm5hbWUobW9kdWxlUm9vdCk7XG4gICAgICBpZiAocGFyZW50ID09PSBtb2R1bGVSb290KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInVuYWJsZSB0byBsb2NhdGUgdGhlIHByb2plbiBwYWNrYWdlIHJvb3RcIik7XG4gICAgICB9XG4gICAgICBtb2R1bGVSb290ID0gcGFyZW50O1xuICAgIH1cbiAgICBjb25zdCBwcm9ncmFtID0gcmVxdWlyZS5yZXNvbHZlKFxuICAgICAgam9pbihtb2R1bGVSb290LCBcImxpYlwiLCBgJHtidWlsdGlufS50YXNrLmpzYCksXG4gICAgKTtcbiAgICByZXR1cm4gYFwiJHtwcm9jZXNzLmV4ZWNQYXRofVwiIFwiJHtwcm9ncmFtfVwiYDtcbiAgfVxufVxuXG5pbnRlcmZhY2UgU2hlbGxPcHRpb25zIHtcbiAgcmVhZG9ubHkgY29tbWFuZDogc3RyaW5nO1xuICAvKipcbiAgICogQGRlZmF1bHQgLSBwcm9qZWN0IGRpclxuICAgKi9cbiAgcmVhZG9ubHkgY3dkPzogc3RyaW5nO1xuICByZWFkb25seSBsb2dwcmVmaXg/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNwYXduT3B0aW9ucz86IFNwYXduT3B0aW9ucztcbiAgLyoqIEBkZWZhdWx0IGZhbHNlICovXG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZXh0cmFFbnY/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfTtcbn1cbiJdfQ==
|
|
540
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFzay1ydW50aW1lLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaS90YXNrLXJ1bnRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsMkJBQXdEO0FBQ3hELCtCQUE4QztBQUM5QywyQ0FBNkI7QUFDN0IsK0JBQThCO0FBQzlCLGlDQUF3QztBQUN4Qyw2QkFBd0I7QUFDeEIsc0NBQStEO0FBQy9ELG9EQUFzQztBQUV0Qyx1Q0FBOEM7QUFFOUMscUVBQXFFO0FBQ3JFLGdGQUFnRjtBQUNoRixnRkFBZ0Y7QUFDaEYsMkVBQTJFO0FBQzNFLG1FQUFtRTtBQUNuRSxpRUFBaUU7QUFDakUsTUFBTSx1QkFBdUIsR0FBRyxPQUFPLENBQUMscUJBQXFCLENBQUMsQ0FBQztBQUMvRCxNQUFNLGlCQUFpQixHQUNyQix1QkFBdUIsRUFBRSxPQUFPLElBQUksdUJBQXVCLENBQUM7QUFFOUQsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO0FBQ3hCLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQztBQUN6QixNQUFNLGtCQUFrQixHQUFHLElBQUksV0FBVyxHQUFHLENBQUM7QUFrQzlDOztHQUVHO0FBQ0gsTUFBYSxXQUFXO0lBQ3RCOztPQUVHO0lBQ0ksTUFBTSxDQUFVLGFBQWEsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FDcEQsbUJBQVUsRUFDVixZQUFZLENBQ2IsQ0FBQztJQUVGOzs7Ozs7Ozs7T0FTRztJQUNJLE1BQU0sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE9BQWUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDO1lBQ0gsTUFBTSxJQUFJLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDM0MsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDaEIsT0FB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QztZQUNELE1BQU0sQ0FBQyxDQUFDO1FBQ1YsQ0FBQztJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsU0FBUyxDQUFDLE9BQXFCO1FBQzNDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztZQUNoQixLQUFLLEVBQUUsSUFBSTtZQUNYLEdBQUcsT0FBTztZQUNWLFlBQVksRUFBRTtnQkFDWixLQUFLLEVBQUUsQ0FBQyxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBQzthQUNuQztTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFTyxhQUFhLENBQUMsT0FBZTtRQUNuQywwRUFBMEU7UUFDMUUsMEVBQTBFO1FBQzFFLDJFQUEyRTtRQUMzRSx1RUFBdUU7UUFDdkUsd0VBQXdFO1FBQ3hFLElBQUksVUFBVSxHQUFHLFNBQVMsQ0FBQztRQUMzQixPQUFPLENBQUMsSUFBQSxlQUFVLEVBQUMsSUFBQSxXQUFJLEVBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUNyRCxNQUFNLE1BQU0sR0FBRyxJQUFBLGNBQU8sRUFBQyxVQUFVLENBQUMsQ0FBQztZQUNuQyxJQUFJLE1BQU0sS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDMUIsTUFBTSxJQUFJLEtBQUssQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1lBQzlELENBQUM7WUFDRCxVQUFVLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLENBQUM7UUFDRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsT0FBTyxDQUM3QixJQUFBLFdBQUksRUFBQyxVQUFVLEVBQUUsS0FBSyxFQUFFLEdBQUcsT0FBTyxVQUFVLENBQUMsQ0FDOUMsQ0FBQztRQUNGLE9BQU8sSUFBSSxPQUFPLENBQUMsUUFBUSxNQUFNLE9BQU8sR0FBRyxDQUFDO0lBQzlDLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgU3Bhd25PcHRpb25zIH0gZnJvbSBcImNoaWxkX3Byb2Nlc3NcIjtcbmltcG9ydCB7IGV4aXN0c1N5bmMsIHJlYWRGaWxlU3luYywgc3RhdFN5bmMgfSBmcm9tIFwiZnNcIjtcbmltcG9ydCB7IGRpcm5hbWUsIGpvaW4sIHJlc29sdmUgfSBmcm9tIFwicGF0aFwiO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tIFwicGF0aFwiO1xuaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSBcInV0aWxcIjtcbmltcG9ydCB7IGdyYXksIHVuZGVybGluZSB9IGZyb20gXCJjaGFsa1wiO1xuaW1wb3J0IHsgJCB9IGZyb20gXCJkYXhcIjtcbmltcG9ydCB7IFBST0pFTl9ESVIsIFRBU0tTX01BTklGRVNUX1ZFUlNJT04gfSBmcm9tIFwiLi4vY29tbW9uXCI7XG5pbXBvcnQgKiBhcyBsb2dnaW5nIGZyb20gXCIuLi9sb2dnaW5nXCI7XG5pbXBvcnQgdHlwZSB7IFRhc2tzTWFuaWZlc3QsIFRhc2tTcGVjLCBUYXNrU3RlcCB9IGZyb20gXCIuLi90YXNrLW1vZGVsXCI7XG5pbXBvcnQgeyByYXdTaGVsbCwgdG9vbCB9IGZyb20gXCIuLi91dGlsL2V4ZWNcIjtcblxuLy8gYXZvaWRzIGEgKGZhbHNlIHBvc2l0aXZlKSBlc2J1aWxkIHdhcm5pbmcgYWJvdXQgaW5jb3JyZWN0IGltcG9ydHMuXG4vLyBgPy5kZWZhdWx0ID8/IG1vZHVsZWAga2VlcHMgdGhpcyB3b3JraW5nIGJvdGggYXMgYSBwbGFpbiBDb21tb25KUyByZXF1aXJlIGFuZFxuLy8gd2hlbiB0aGUgZGVwZW5kZW5jeSBpcyBpbnRlcm9wLXdyYXBwZWQgaW5zaWRlIHRoZSBidW5kbGVkIHJ1bi10YXNrLmNqcyAod2hlcmVcbi8vIGByZXF1aXJlKC4uLilgIG1heSB5aWVsZCBgeyBkZWZhdWx0OiBmbiB9YCBpbnN0ZWFkIG9mIHRoZSBmdW5jdGlvbikuIFNlZVxuLy8gcHJvamVuIzQ0MDcgKFwicGFyc2VDb25mbGljdEpTT04gaXMgbm90IGEgZnVuY3Rpb25cIiBhZnRlciBlamVjdCkuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuY29uc3QgcGFyc2VDb25mbGljdEpTT05Nb2R1bGUgPSByZXF1aXJlKFwicGFyc2UtY29uZmxpY3QtanNvblwiKTtcbmNvbnN0IHBhcnNlQ29uZmxpY3RKU09OID1cbiAgcGFyc2VDb25mbGljdEpTT05Nb2R1bGU/LmRlZmF1bHQgPz8gcGFyc2VDb25mbGljdEpTT05Nb2R1bGU7XG5cbmNvbnN0IEVOVl9UUklNX0xFTiA9IDIwO1xuY29uc3QgQVJHU19NQVJLRVIgPSBcIiRAXCI7XG5jb25zdCBRVU9URURfQVJHU19NQVJLRVIgPSBgXCIke0FSR1NfTUFSS0VSfVwiYDtcblxuLyoqXG4gKiBUaGUgcmVzdWx0IG9mIGV4ZWN1dGluZyBhIHNoZWxsIGNvbW1hbmQuXG4gKlxuICogVGhpcyBpcyBhIG5vcm1hbGl6ZWQgc3Vic2V0IG9mIG5vZGUncyBgU3Bhd25TeW5jUmV0dXJuc2Agc28gdGhhdCB0aGVcbiAqIHN5bmNocm9ub3VzIChgc3Bhd25TeW5jYCkgYW5kIGFzeW5jaHJvbm91cyAoYGRheGApIGV4ZWN1dGlvbiBwYXRocyBjYW4gcmV0dXJuXG4gKiBhIGNvbXBhdGlibGUgc2hhcGUuXG4gKi9cbmludGVyZmFjZSBTaGVsbFJlc3VsdCB7XG4gIC8qKlxuICAgKiBUaGUgZXhpdCBjb2RlIG9mIHRoZSBjb21tYW5kLCBvciBgbnVsbGAgaWYgdGhlIHByb2Nlc3Mgd2FzIHRlcm1pbmF0ZWQgYnkgYVxuICAgKiBzaWduYWwgb3IgbmV2ZXIgc3Bhd25lZC5cbiAgICovXG4gIHJlYWRvbmx5IHN0YXR1czogbnVtYmVyIHwgbnVsbDtcblxuICAvKipcbiAgICogQ2FwdHVyZWQgc3Rkb3V0LiBPbmx5IHBvcHVsYXRlZCB3aGVuIHN0ZG91dCBpcyBwaXBlZCAoZS5nLiB3aGVuIGV2YWx1YXRpbmdcbiAgICogZW52aXJvbm1lbnQgdmFyaWFibGVzKTsgYG51bGxgL2B1bmRlZmluZWRgIHdoZW4gc3RkaW8gaXMgaW5oZXJpdGVkLlxuICAgKi9cbiAgcmVhZG9ubHkgc3Rkb3V0PzogQnVmZmVyIHwgbnVsbDtcblxuICAvKipcbiAgICogQ2FwdHVyZWQgc3RkZXJyLiBTZWUgYHN0ZG91dGAuXG4gICAqL1xuICByZWFkb25seSBzdGRlcnI/OiBCdWZmZXIgfCBudWxsO1xuXG4gIC8qKlxuICAgKiBBbiBlcnJvciByYWlzZWQgd2hpbGUgYXR0ZW1wdGluZyB0byBzcGF3biB0aGUgY29tbWFuZCAobm90IGEgbm9uLXplcm8gZXhpdFxuICAgKiBjb2RlLCB3aGljaCBpcyByZXBvcnRlZCB2aWEgYHN0YXR1c2ApLlxuICAgKi9cbiAgcmVhZG9ubHkgZXJyb3I/OiBFcnJvcjtcbn1cblxuLyoqXG4gKiBUaGUgcnVudGltZSBjb21wb25lbnQgb2YgdGhlIHRhc2tzIGVuZ2luZS5cbiAqL1xuZXhwb3J0IGNsYXNzIFRhc2tSdW50aW1lIHtcbiAgLyoqXG4gICAqIFRoZSBwcm9qZWN0LXJlbGF0aXZlIHBhdGggb2YgdGhlIHRhc2tzIG1hbmlmZXN0IGZpbGUuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IE1BTklGRVNUX0ZJTEUgPSBwYXRoLnBvc2l4LmpvaW4oXG4gICAgUFJPSkVOX0RJUixcbiAgICBcInRhc2tzLmpzb25cIixcbiAgKTtcblxuICAvKipcbiAgICogT25lLXNob3QgZW50cnlwb2ludCBmb3IgdGhlIHN0YW5kYWxvbmUgdGFzayBydW5uZXIuXG4gICAqXG4gICAqIENyZWF0ZXMgYSBydW50aW1lIHJvb3RlZCBhdCB0aGUgY3VycmVudCB3b3JraW5nIGRpcmVjdG9yeSwgcnVucyB0aGUgbmFtZWRcbiAgICogdGFzaywgYW5kIGNvbnZlcnRzIGFueSBmYWlsdXJlIGludG8gYSBub24temVybyBwcm9jZXNzIGV4aXQgY29kZS4gVGhpcyBpc1xuICAgKiB0aGUgc2luZ2xlIGxpbmUgaW52b2tlZCBieSB0aGUgYnVuZGxlZCBgc2NyaXB0cy9ydW4tdGFzay5janNgIHRoYXRcbiAgICogXCJwcm9qZW4gZWplY3RcIiBlbWl0cywgd2hpY2gga2VlcHMgdGhlIGdlbmVyYXRlZCBidW5kbGUgZm9vdGVyIHRyaXZpYWwuXG4gICAqXG4gICAqIEBwYXJhbSBuYW1lIFRoZSBuYW1lIG9mIHRoZSB0YXNrIHRvIHJ1bi4gRGVmYXVsdHMgdG8gYHByb2Nlc3MuYXJndlsyXWAuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGFzeW5jIG1haW4obmFtZTogc3RyaW5nID0gcHJvY2Vzcy5hcmd2WzJdKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG5ldyBUYXNrUnVudGltZShcIi5cIikucnVuVGFzayhuYW1lKTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoZT8uc3RhY2sgPz8gU3RyaW5nKGUpKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhlIGNvbnRlbnRzIG9mIHRhc2tzLmpzb25cbiAgICovXG4gIHByaXZhdGUgX21hbmlmZXN0OiBUYXNrc01hbmlmZXN0ID0geyB0YXNrczoge30gfTtcblxuICAvKipcbiAgICogVGhlIHJhdyBjb250ZW50cyBvZiB0aGUgY3VycmVudGx5IGxvYWRlZCBtYW5pZmVzdCwgdXNlZCB0byBkZXRlY3QgY2hhbmdlc1xuICAgKiBvbiBkaXNrIHNvIHRoZSBydW50aW1lIGNhbiByZWxvYWQgYSByZWdlbmVyYXRlZCBtYW5pZmVzdCBtaWQtcnVuLlxuICAgKi9cbiAgcHJpdmF0ZSBfaWRlbnRpdHk/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSByb290IGRpcmVjdG9yeSBvZiB0aGUgcHJvamVjdCBhbmQgdGhlIGN3ZCBmb3IgZXhlY3V0aW5nIHRhc2tzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHdvcmtkaXI6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcih3b3JrZGlyOiBzdHJpbmcpIHtcbiAgICB0aGlzLndvcmtkaXIgPSByZXNvbHZlKHdvcmtkaXIpO1xuICAgIC8vIFBlcmZvcm0gdGhlIGluaXRpYWwgbG9hZC4gVGhpcyBhbHNvIHZlcmlmaWVzIHRoZSBtYW5pZmVzdCdzIHNjaGVtYVxuICAgIC8vIHZlcnNpb24uXG4gICAgdGhpcy5yZWxvYWRNYW5pZmVzdElmQ2hhbmdlZCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBjb250ZW50cyBvZiB0YXNrcy5qc29uXG4gICAqL1xuICBwdWJsaWMgZ2V0IG1hbmlmZXN0KCk6IFRhc2tzTWFuaWZlc3Qge1xuICAgIHJldHVybiB0aGlzLl9tYW5pZmVzdDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgYWJzb2x1dGUgcGF0aCBvZiB0aGUgdGFza3MgbWFuaWZlc3QgZmlsZS5cbiAgICovXG4gIHByaXZhdGUgZ2V0IG1hbmlmZXN0UGF0aCgpOiBzdHJpbmcge1xuICAgIHJldHVybiBqb2luKHRoaXMud29ya2RpciwgVGFza1J1bnRpbWUuTUFOSUZFU1RfRklMRSk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIHRhc2tzIGluIHRoaXMgcHJvamVjdC5cbiAgICovXG4gIHB1YmxpYyBnZXQgdGFza3MoKTogVGFza1NwZWNbXSB7XG4gICAgcmV0dXJuIE9iamVjdC52YWx1ZXModGhpcy5tYW5pZmVzdC50YXNrcyA/PyB7fSk7XG4gIH1cblxuICAvKipcbiAgICogRmluZCBhIHRhc2sgYnkgbmFtZSwgb3IgYHVuZGVmaW5lZGAgaWYgbm90IGZvdW5kLlxuICAgKi9cbiAgcHVibGljIHRyeUZpbmRUYXNrKG5hbWU6IHN0cmluZyk6IFRhc2tTcGVjIHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoIXRoaXMubWFuaWZlc3QudGFza3MpIHtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLm1hbmlmZXN0LnRhc2tzW25hbWVdO1xuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgdGhlIHRhc2suXG4gICAqIEBwYXJhbSBuYW1lIFRoZSB0YXNrIG5hbWUuXG4gICAqL1xuICBwdWJsaWMgYXN5bmMgcnVuVGFzayhcbiAgICBuYW1lOiBzdHJpbmcsXG4gICAgcGFyZW50czogc3RyaW5nW10gPSBbXSxcbiAgICBhcmdzOiBBcnJheTxzdHJpbmcgfCBudW1iZXI+ID0gW10sXG4gICAgZW52OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9LFxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAvLyBBIHByZXZpb3VzbHkgZXhlY3V0ZWQgdGFzayAobW9zdCBpbXBvcnRhbnRseSB0aGUgXCJkZWZhdWx0XCIvc3ludGggdGFzayxcbiAgICAvLyB3aGljaCBgYnVpbGRgIHNwYXducyBmaXJzdCkgbWF5IGhhdmUgcmVnZW5lcmF0ZWQgYC5wcm9qZW4vdGFza3MuanNvbmAuXG4gICAgLy8gUGljayB1cCBhbnkgc3VjaCBjaGFuZ2VzIGJlZm9yZSByZXNvbHZpbmcgYW5kIHJ1bm5pbmcgdGhpcyB0YXNrIHNvIHdlXG4gICAgLy8gbmV2ZXIgZXhlY3V0ZSBhIHN0YWxlLCBpbi1tZW1vcnkgZGVmaW5pdGlvbi5cbiAgICB0aGlzLnJlbG9hZE1hbmlmZXN0SWZDaGFuZ2VkKCk7XG5cbiAgICBjb25zdCB0YXNrID0gdGhpcy50cnlGaW5kVGFzayhuYW1lKTtcbiAgICBpZiAoIXRhc2spIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihgY2Fubm90IGZpbmQgY29tbWFuZCAke25hbWV9YCk7XG4gICAgfVxuXG4gICAgYXdhaXQgbmV3IFJ1blRhc2sodGhpcywgdGFzaywgcGFyZW50cywgYXJncywgZW52KS5ydW4oKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZS1yZWFkcyB0aGUgdGFza3MgbWFuaWZlc3QgZnJvbSBkaXNrIGlmIGl0cyBjb250ZW50cyBjaGFuZ2VkIHNpbmNlIGl0IHdhc1xuICAgKiBsYXN0IGxvYWRlZCwgdmVyaWZ5aW5nIGl0cyBzY2hlbWEgdmVyc2lvbiBhbG9uZyB0aGUgd2F5LlxuICAgKlxuICAgKiBDaGFuZ2UgZGV0ZWN0aW9uIGNvbXBhcmVzIHRoZSByYXcgZmlsZSBjb250ZW50cywgc28gYW4gdW5jaGFuZ2VkIG1hbmlmZXN0XG4gICAqIGlzIG5vdCByZS12ZXJpZmllZCBvciByZS1hZG9wdGVkLlxuICAgKi9cbiAgcHJpdmF0ZSByZWxvYWRNYW5pZmVzdElmQ2hhbmdlZCgpOiB2b2lkIHtcbiAgICBpZiAoIWV4aXN0c1N5bmModGhpcy5tYW5pZmVzdFBhdGgpKSB7XG4gICAgICAvLyBObyBtYW5pZmVzdCBvbiBkaXNrOiB0cmVhdCBhcyBhbiBlbXB0eSBwcm9qZWN0IChsZWdhY3kgYmVoYXZpb3IpLlxuICAgICAgdGhpcy5fbWFuaWZlc3QgPSB7IHRhc2tzOiB7fSB9O1xuICAgICAgdGhpcy5faWRlbnRpdHkgPSB1bmRlZmluZWQ7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgcmF3ID0gcmVhZEZpbGVTeW5jKHRoaXMubWFuaWZlc3RQYXRoLCBcInV0Zi04XCIpO1xuICAgIGlmIChyYXcgPT09IHRoaXMuX2lkZW50aXR5KSB7XG4gICAgICByZXR1cm47IC8vIHVuY2hhbmdlZCBzaW5jZSB0aGUgbGFzdCBsb2FkXG4gICAgfVxuXG4gICAgY29uc3QgbWFuaWZlc3Q6IFRhc2tzTWFuaWZlc3QgPSBwYXJzZUNvbmZsaWN0SlNPTihyYXcsIHVuZGVmaW5lZCwgXCJ0aGVpcnNcIik7XG5cbiAgICAvLyBBIHByZXZpb3VzbHkgbG9hZGVkIG1hbmlmZXN0IG1lYW5zIHRoaXMgaXMgYSAqcmVsb2FkKiAoZS5nLiB0aGVcbiAgICAvLyBcImRlZmF1bHRcIi9zeW50aCB0YXNrIHJlZ2VuZXJhdGVkIHRoZSBmaWxlIG1pZC1ydW4pLCBhcyBvcHBvc2VkIHRvIHRoZVxuICAgIC8vIGluaXRpYWwgbG9hZCBwZXJmb3JtZWQgYnkgdGhlIGNvbnN0cnVjdG9yLlxuICAgIGNvbnN0IGlzUmVsb2FkID0gdGhpcy5faWRlbnRpdHkgIT09IHVuZGVmaW5lZDtcblxuICAgIHRoaXMudmVyaWZ5TWFuaWZlc3QobWFuaWZlc3QpO1xuICAgIHRoaXMuX21hbmlmZXN0ID0gbWFuaWZlc3Q7XG4gICAgdGhpcy5faWRlbnRpdHkgPSByYXc7XG5cbiAgICBpZiAoaXNSZWxvYWQpIHtcbiAgICAgIGxvZ2dpbmcuZGVidWcoXG4gICAgICAgIGAke1Rhc2tSdW50aW1lLk1BTklGRVNUX0ZJTEV9IGNoYW5nZWQgb24gZGlzazsgc3VjY2Vzc2Z1bGx5IGxvYWRlZCB0aGUgbmV3IHRhc2tzIG1hbmlmZXN0LmAsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBWYWxpZGF0ZXMgYSBmcmVzaGx5IHJlYWQgbWFuaWZlc3Q6XG4gICAqXG4gICAqIC0gTGVnYWN5IG1hbmlmZXN0cyAobm8gYG1hbmlmZXN0VmVyc2lvbmApIGFyZSBhY2NlcHRlZCBhcy1pcyBmb3IgYmFja3dhcmRzXG4gICAqICAgY29tcGF0aWJpbGl0eS5cbiAgICogLSBNYW5pZmVzdHMgZnJvbSBhIG5ld2VyIHByb2plbiAoYSBoaWdoZXIgYG1hbmlmZXN0VmVyc2lvbmApIGFyZSBhY2NlcHRlZFxuICAgKiAgIHdpdGggYSB3YXJuaW5nLCBzaW5jZSB0aGlzIHJ1bnRpbWUgbWF5IG5vdCB1bmRlcnN0YW5kIHRoZSBzY2hlbWEuXG4gICAqL1xuICBwcml2YXRlIHZlcmlmeU1hbmlmZXN0KG1hbmlmZXN0OiBUYXNrc01hbmlmZXN0KTogdm9pZCB7XG4gICAgLy8gQmFja3dhcmRzIGNvbXBhdGliaWxpdHk6IG1hbmlmZXN0cyBnZW5lcmF0ZWQgYmVmb3JlIHZlcnNpb25pbmcgY2Fycnkgbm9cbiAgICAvLyB2ZXJzaW9uLlxuICAgIGlmIChtYW5pZmVzdC5tYW5pZmVzdFZlcnNpb24gPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChtYW5pZmVzdC5tYW5pZmVzdFZlcnNpb24gPiBUQVNLU19NQU5JRkVTVF9WRVJTSU9OKSB7XG4gICAgICBsb2dnaW5nLndhcm4oXG4gICAgICAgIGAke1Rhc2tSdW50aW1lLk1BTklGRVNUX0ZJTEV9IHdhcyBnZW5lcmF0ZWQgYnkgYSBuZXdlciB2ZXJzaW9uIG9mIHByb2plbiBgICtcbiAgICAgICAgICBgKG1hbmlmZXN0IHZlcnNpb24gJHttYW5pZmVzdC5tYW5pZmVzdFZlcnNpb259LCB0aGlzIHByb2plbiBzdXBwb3J0cyB1cCB0byAke1RBU0tTX01BTklGRVNUX1ZFUlNJT059KS4gYCArXG4gICAgICAgICAgYFNvbWUgdGFza3MgbWF5IG5vdCBiZWhhdmUgYXMgZXhwZWN0ZWQ7IGNvbnNpZGVyIHVwZ3JhZGluZyBwcm9qZW4uYCxcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG5cbmNsYXNzIFJ1blRhc2sge1xuICBwcml2YXRlIGVudjogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIHwgdW5kZWZpbmVkIH0gPSB7fTtcbiAgcHJpdmF0ZSByZWFkb25seSBwYXJlbnRzOiBzdHJpbmdbXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IHdvcmtkaXI6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHJ1bnRpbWU6IFRhc2tSdW50aW1lLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdGFzazogVGFza1NwZWMsXG4gICAgcGFyZW50czogc3RyaW5nW10gPSBbXSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGFyZ3M6IEFycmF5PHN0cmluZyB8IG51bWJlcj4gPSBbXSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGVudlBhcmFtOiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9LFxuICApIHtcbiAgICB0aGlzLndvcmtkaXIgPSB0YXNrLmN3ZCA/PyB0aGlzLnJ1bnRpbWUud29ya2RpcjtcbiAgICB0aGlzLnBhcmVudHMgPSBwYXJlbnRzO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGVzIHRoZSB0YXNrLiBUaGlzIHdhcyBwcmV2aW91c2x5IGRvbmUgaW4gdGhlIGNvbnN0cnVjdG9yLCBidXQgaXMgbm93XG4gICAqIGFuIGFzeW5jIG1ldGhvZCBzaW5jZSBzaGVsbCBleGVjdXRpb24gaXMgYXN5bmNocm9ub3VzIChlLmcuIGRheCBvblxuICAgKiBXaW5kb3dzKS5cbiAgICovXG4gIHB1YmxpYyBhc3luYyBydW4oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgeyB0YXNrLCBhcmdzLCBwYXJlbnRzIH0gPSB0aGlzO1xuXG4gICAgaWYgKCF0YXNrLnN0ZXBzIHx8IHRhc2suc3RlcHMubGVuZ3RoID09PSAwKSB7XG4gICAgICB0aGlzLmxvZ0RlYnVnKGdyYXkoXCJObyBhY3Rpb25zIGhhdmUgYmVlbiBzcGVjaWZpZWQgZm9yIHRoaXMgdGFzay5cIikpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuZW52ID0gYXdhaXQgdGhpcy5yZXNvbHZlRW52aXJvbm1lbnQodGhpcy5lbnZQYXJhbSwgcGFyZW50cyk7XG5cbiAgICBjb25zdCBlbnZsb2dzID0gW107XG4gICAgZm9yIChjb25zdCBbaywgdl0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5lbnYpKSB7XG4gICAgICBjb25zdCB2diA9IHYgPz8gXCJcIjtcbiAgICAgIGNvbnN0IHRyaW1tZWQgPVxuICAgICAgICB2di5sZW5ndGggPiBFTlZfVFJJTV9MRU4gPyB2di5zdWJzdHJpbmcoMCwgRU5WX1RSSU1fTEVOKSArIFwiLi4uXCIgOiB2djtcbiAgICAgIGVudmxvZ3MucHVzaChgJHtrfT0ke3RyaW1tZWR9YCk7XG4gICAgfVxuXG4gICAgaWYgKGVudmxvZ3MubGVuZ3RoKSB7XG4gICAgICB0aGlzLmxvZ0RlYnVnKGdyYXkoYCR7dW5kZXJsaW5lKFwiZW52XCIpfTogJHtlbnZsb2dzLmpvaW4oXCIgXCIpfWApKTtcbiAgICB9XG5cbiAgICAvLyBldmFsdWF0ZSBjb25kaXRpb25cbiAgICBpZiAoIShhd2FpdCB0aGlzLmV2YWxDb25kaXRpb24odGFzaykpKSB7XG4gICAgICB0aGlzLmxvZyhcImNvbmRpdGlvbiBleGl0ZWQgd2l0aCBub24temVybyAtIHNraXBwaW5nXCIpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIC8vIHZlcmlmeSB3ZSByZXF1aXJlZCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIGRlZmluZWRcbiAgICBjb25zdCBtZXJnZWQgPSB7IC4uLnByb2Nlc3MuZW52LCAuLi50aGlzLmVudiB9O1xuICAgIGNvbnN0IG1pc3NpbmcgPSBuZXcgQXJyYXk8c3RyaW5nPigpO1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiB0YXNrLnJlcXVpcmVkRW52ID8/IFtdKSB7XG4gICAgICBpZiAoIShuYW1lIGluIG1lcmdlZCkpIHtcbiAgICAgICAgbWlzc2luZy5wdXNoKG5hbWUpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChtaXNzaW5nLmxlbmd0aCA+IDApIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgYG1pc3NpbmcgcmVxdWlyZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzOiAke21pc3Npbmcuam9pbihcIixcIil9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBzdGVwIG9mIHRhc2suc3RlcHMpIHtcbiAgICAgIC8vIGV2YWx1YXRlIHN0ZXAgY29uZGl0aW9uXG4gICAgICBpZiAoIShhd2FpdCB0aGlzLmV2YWxDb25kaXRpb24oc3RlcCkpKSB7XG4gICAgICAgIHRoaXMubG9nKFwiY29uZGl0aW9uIGV4aXRlZCB3aXRoIG5vbi16ZXJvIC0gc2tpcHBpbmdcIik7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBhcmdzTGlzdDogc3RyaW5nW10gPSBbXG4gICAgICAgIC4uLihzdGVwLmFyZ3MgfHwgW10pLFxuICAgICAgICAuLi4oc3RlcC5yZWNlaXZlQXJncyA/IGFyZ3MgOiBbXSksXG4gICAgICBdLm1hcCgoYSkgPT4gYS50b1N0cmluZygpKTtcblxuICAgICAgaWYgKHN0ZXAuc2F5KSB7XG4gICAgICAgIGxvZ2dpbmcuaW5mbyh0aGlzLmZtdExvZyhzdGVwLnNheSkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoc3RlcC5zcGF3bikge1xuICAgICAgICBhd2FpdCB0aGlzLnJ1bnRpbWUucnVuVGFzayhcbiAgICAgICAgICBzdGVwLnNwYXduLFxuICAgICAgICAgIFsuLi50aGlzLnBhcmVudHMsIHRoaXMudGFzay5uYW1lXSxcbiAgICAgICAgICBhcmdzTGlzdCxcbiAgICAgICAgICBzdGVwLmVudixcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3QgZXhlY3M6IEFycmF5PHN0cmluZyB8IHN0cmluZ1tdPiA9IHN0ZXAuZXhlYyA/IFtzdGVwLmV4ZWNdIDogW107XG5cbiAgICAgIC8vIFBhcnNlIHN0ZXAtc3BlY2lmaWMgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAgICBjb25zdCBlbnYgPSBhd2FpdCB0aGlzLmV2YWxFbnZpcm9ubWVudChzdGVwLmVudiA/PyB7fSk7XG5cbiAgICAgIGlmIChzdGVwLmJ1aWx0aW4pIHtcbiAgICAgICAgZXhlY3MucHVzaCh0aGlzLnJlbmRlckJ1aWx0aW4oc3RlcC5idWlsdGluKSk7XG4gICAgICB9XG5cbiAgICAgIC8vIGBleGVjQXJnc2AgaXMgYW4gZXhwbGljaXQgYXJndiAodGhlIHByb2dyYW0gZm9sbG93ZWQgYnkgaXRzIGFyZ3VtZW50cykuXG4gICAgICAvLyBJdCBpcyBoYW5kZWQgdG8gYHNoZWxsKClgIGFzIGFuIGFycmF5IHJhdGhlciB0aGFuIGEgcmVuZGVyZWQgc3RyaW5nLCBzb1xuICAgICAgLy8gaXQgcnVucyB3aXRob3V0IGEgc2hlbGwgYW5kIGV2ZXJ5IGVsZW1lbnQgaXMgcGFzc2VkIHRocm91Z2ggdmVyYmF0aW0gLVxuICAgICAgLy8gd2hpY2ggaXMgd2hhdCBsZXRzIGNhbGxlcnMgYXZvaWQgdGhpbmtpbmcgYWJvdXQgcXVvdGluZy4gRml4ZWQvcmVjZWl2ZWRcbiAgICAgIC8vIGFyZ3MgYXJlIHNwbGljZWQgaW4gd2hlcmV2ZXIgYSBgJEBgIG1hcmtlciBlbGVtZW50IGFwcGVhcnMgKG1pcnJvcmluZ1xuICAgICAgLy8gdGhlIHN0cmluZyBgZXhlY2AgYmVoYXZpb3IpLCBvciBhcHBlbmRlZCBhdCB0aGUgZW5kIGlmIHRoZXJlIGlzIG5vbmUuXG4gICAgICBpZiAoc3RlcC5leGVjQXJncykge1xuICAgICAgICBjb25zdCBhcmd2OiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBsZXQgcGxhY2VkID0gZmFsc2U7XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBzdGVwLmV4ZWNBcmdzKSB7XG4gICAgICAgICAgaWYgKGVsZW1lbnQgPT09IEFSR1NfTUFSS0VSKSB7XG4gICAgICAgICAgICBhcmd2LnB1c2goLi4uYXJnc0xpc3QpO1xuICAgICAgICAgICAgcGxhY2VkID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgYXJndi5wdXNoKGVsZW1lbnQpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoIXBsYWNlZCkge1xuICAgICAgICAgIGFyZ3YucHVzaCguLi5hcmdzTGlzdCk7XG4gICAgICAgIH1cbiAgICAgICAgZXhlY3MucHVzaChhcmd2KTtcbiAgICAgIH1cblxuICAgICAgZm9yIChjb25zdCBleGVjIG9mIGV4ZWNzKSB7XG4gICAgICAgIGxldCBoYXNFcnJvciA9IGZhbHNlO1xuXG4gICAgICAgIGxldCBjb21tYW5kID0gZXhlYztcblxuICAgICAgICAvLyBTdHJpbmcgY29tbWFuZHMgKGBleGVjYC9gYnVpbHRpbmApIGFyZSBzaGVsbCBjb21tYW5kIGxpbmVzLCBzbyB0aGVcbiAgICAgICAgLy8gdGFzayBhcmdzIGFyZSBzcGxpY2VkIGluIGZvbGxvd2luZyB0aGUgYCRAYCBtYXJrZXIgcnVsZXMuIEFycmF5XG4gICAgICAgIC8vIGNvbW1hbmRzIChgZXhlY0FyZ3NgKSBhbHJlYWR5IGNhcnJ5IHRoZWlyIGFyZ3MgYW5kIGFyZSBsZWZ0IHVudG91Y2hlZC5cbiAgICAgICAgaWYgKHR5cGVvZiBjb21tYW5kID09PSBcInN0cmluZ1wiKSB7XG4gICAgICAgICAgaWYgKGNvbW1hbmQuaW5jbHVkZXMoUVVPVEVEX0FSR1NfTUFSS0VSKSkge1xuICAgICAgICAgICAgLy8gUG9vcmx5IGltaXRhdGUgYmFzaCBxdW90ZWQgdmFyaWFibGUgZXhwYW5zaW9uLiBJZiBcIiRAXCIgaXMgZW5jb3VudGVyZWQgaW4gYmFzaCwgZWxlbWVudHMgb2YgdGhlIGFyZyBhcnJheVxuICAgICAgICAgICAgLy8gdGhhdCBjb250YWluIHdoaXRlc3BhY2Ugd2lsbCBiZSBzaW5nbGUgcXVvdGVkICgnYXJnJykuIFRoaXMgcHJlc2VydmVzIHdoaXRlc3BhY2UgaW4gdGhpbmdzIGxpa2UgZmlsZW5hbWVzLlxuICAgICAgICAgICAgLy8gSW1pdGF0ZSB0aGF0IGJlaGF2aW9yIGhlcmUgYnkgc2luZ2xlIHF1b3RpbmcgZXZlcnkgZWxlbWVudCBvZiB0aGUgYXJnIGFycmF5IHdoZW4gYSBxdW90ZWQgYXJnIG1hcmtlciAoXCIkQFwiKVxuICAgICAgICAgICAgLy8gaXMgZW5jb3VudGVyZWQuXG4gICAgICAgICAgICBjb21tYW5kID0gY29tbWFuZC5yZXBsYWNlKFxuICAgICAgICAgICAgICBRVU9URURfQVJHU19NQVJLRVIsXG4gICAgICAgICAgICAgIGFyZ3NMaXN0Lm1hcCgoYXJnKSA9PiBgJyR7YXJnfSdgKS5qb2luKFwiIFwiKSxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIGlmIChjb21tYW5kLmluY2x1ZGVzKEFSR1NfTUFSS0VSKSkge1xuICAgICAgICAgICAgY29tbWFuZCA9IGNvbW1hbmQucmVwbGFjZShBUkdTX01BUktFUiwgYXJnc0xpc3Quam9pbihcIiBcIikpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb21tYW5kID0gW2NvbW1hbmQsIC4uLmFyZ3NMaXN0XS5qb2luKFwiIFwiKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBjd2QgPSBzdGVwLmN3ZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnNoZWxsKHtcbiAgICAgICAgICAgIGNvbW1hbmQsXG4gICAgICAgICAgICBjd2QsXG4gICAgICAgICAgICBleHRyYUVudjogZW52LFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGhhc0Vycm9yID0gcmVzdWx0LnN0YXR1cyAhPT0gMDtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgIC8vIGEgbm9uLXplcm8gZXhpdCBjb2RlIGlzIHJlcG9ydGVkIHZpYSBgcmVzdWx0LnN0YXR1c2AgYWJvdmU7IHRoaXNcbiAgICAgICAgICAvLyBjYXRjaCBoYW5kbGVzIGVycm9ycyB0aHJvd24gd2hpbGUgYXR0ZW1wdGluZyB0byBzcGF3biB0aGUgY29tbWFuZC5cbiAgICAgICAgICBpZiAoKGUgYXMgYW55KT8ubWVzc2FnZT8uc3RhcnRzV2l0aChcIm5vbi16ZXJvIGV4aXQgY29kZTpcIikpIHtcbiAgICAgICAgICAgIGhhc0Vycm9yID0gdHJ1ZTtcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoaGFzRXJyb3IpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICBgVGFzayBcIiR7dGhpcy5mdWxsbmFtZX1cIiBmYWlsZWQgd2hlbiBleGVjdXRpbmcgXCIke1xuICAgICAgICAgICAgICBBcnJheS5pc0FycmF5KGNvbW1hbmQpID8gY29tbWFuZC5qb2luKFwiIFwiKSA6IGNvbW1hbmRcbiAgICAgICAgICAgIH1cIiAoY3dkOiAke3Jlc29sdmUoY3dkID8/IHRoaXMud29ya2Rpcil9KWAsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmVzIGlmIGEgdGFzayBzaG91bGQgYmUgZXhlY3V0ZWQgYmFzZWQgb24gXCJjb25kaXRpb25cIi5cbiAgICpcbiAgICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgdGFzayBzaG91bGQgYmUgZXhlY3V0ZWQgb3IgZmFsc2UgaWYgdGhlIGNvbmRpdGlvblxuICAgKiBldmFsdWF0ZXMgdG8gZmFsc2UgKGV4aXRzIHdpdGggbm9uLXplcm8pLCBpbmRpY2F0aW5nIHRoYXQgdGhlIHRhc2sgc2hvdWxkXG4gICAqIGJlIHNraXBwZWQuXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGV2YWxDb25kaXRpb24odGFza09yU3RlcDogVGFza1NwZWMgfCBUYXNrU3RlcCkge1xuICAgIC8vIG5vIGNvbmRpdGlvbiwgY2Fycnkgb25cbiAgICBpZiAoIXRhc2tPclN0ZXAuY29uZGl0aW9uKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICB0aGlzLmxvZyhncmF5KGAke3VuZGVybGluZShcImNvbmRpdGlvblwiKX06ICR7dGFza09yU3RlcC5jb25kaXRpb259YCkpO1xuICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc2hlbGwoe1xuICAgICAgY29tbWFuZDogdGFza09yU3RlcC5jb25kaXRpb24sXG4gICAgICBsb2dwcmVmaXg6IFwiY29uZGl0aW9uOiBcIixcbiAgICAgIHF1aWV0OiB0cnVlLFxuICAgIH0pO1xuICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSAwKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBFdmFsdWF0ZXMgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZyb20gc2hlbGwgY29tbWFuZHMgKGUuZy4gYCQoeHgpYClcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgZXZhbEVudmlyb25tZW50KGVudjogeyBbbmFtZTogc3RyaW5nXTogc3RyaW5nIH0pIHtcbiAgICBjb25zdCBvdXRwdXQ6IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB8IHVuZGVmaW5lZCB9ID0ge307XG5cbiAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhlbnYgPz8ge30pKSB7XG4gICAgICBpZiAoU3RyaW5nKHZhbHVlKS5zdGFydHNXaXRoKFwiJChcIikgJiYgU3RyaW5nKHZhbHVlKS5lbmRzV2l0aChcIilcIikpIHtcbiAgICAgICAgY29uc3QgcXVlcnkgPSB2YWx1ZS5zdWJzdHJpbmcoMiwgdmFsdWUubGVuZ3RoIC0gMSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuc2hlbGxFdmFsKHsgY29tbWFuZDogcXVlcnkgfSk7XG4gICAgICAgIGlmIChyZXN1bHQuc3RhdHVzICE9PSAwKSB7XG4gICAgICAgICAgY29uc3QgZXJyb3IgPSByZXN1bHQuZXJyb3JcbiAgICAgICAgICAgID8gcmVzdWx0LmVycm9yLnN0YWNrXG4gICAgICAgICAgICA6IHJlc3VsdC5zdGRlcnI/LnRvU3RyaW5nKCkudHJpbSgpIHx8XG4gICAgICAgICAgICAgIHJlc3VsdC5zdGRvdXQ/LnRvU3RyaW5nKCkudHJpbSgpIHx8XG4gICAgICAgICAgICAgIGBjb21tYW5kIGV4aXRlZCB3aXRoIGNvZGUgJHtyZXN1bHQuc3RhdHVzfWA7XG5cbiAgICAgICAgICBsb2dnaW5nLndhcm4oXG4gICAgICAgICAgICB0aGlzLmZtdExvZyhcbiAgICAgICAgICAgICAgYCR7dW5kZXJsaW5lKGtleSl9OiB1bmFibGUgdG8gZXZhbHVhdGUgXCIke3F1ZXJ5fVwiLiBFbnZpcm9ubWVudCB2YXJpYWJsZSB3aWxsIGJlIHNraXBwZWQuIENoZWNrIHRoYXQgdGhlIGNvbW1hbmQgZXhpc3RzIGFuZCBydW5zIHN1Y2Nlc3NmdWxseS5gLFxuICAgICAgICAgICAgKSxcbiAgICAgICAgICApO1xuICAgICAgICAgIGxvZ2dpbmcud2Fybih0aGlzLmZtdExvZyhgJHt1bmRlcmxpbmUoa2V5KX06ICR7ZXJyb3J9YCkpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIG91dHB1dFtrZXldID0gcmVzdWx0LnN0ZG91dD8udG9TdHJpbmcoXCJ1dGYtOFwiKS50cmltKCkgPz8gXCJcIjtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgb3V0cHV0W2tleV0gPSB2YWx1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBydW50aW1lIGVudmlyb25tZW50IGZvciBhIHRhc2suIE5hbWVseSwgaXQgc3VwcG9ydHMgdGhpcyBzeW50YXhcbiAgICogYCQoeHgpYCBmb3IgYWxsb3dpbmcgZW52aXJvbm1lbnQgdG8gYmUgZXZhbHVhdGVkIGJ5IGV4ZWN1dGluZyBhIHNoZWxsXG4gICAqIGNvbW1hbmQgYW5kIG9idGFpbmluZyBpdHMgcmVzdWx0LlxuICAgKi9cbiAgcHJpdmF0ZSBhc3luYyByZXNvbHZlRW52aXJvbm1lbnQoXG4gICAgZW52UGFyYW06IHsgW25hbWU6IHN0cmluZ106IHN0cmluZyB9LFxuICAgIHBhcmVudHM6IHN0cmluZ1tdLFxuICApIHtcbiAgICBsZXQgZW52ID0gdGhpcy5ydW50aW1lLm1hbmlmZXN0LmVudiA/PyB7fTtcblxuICAgIC8vIGFkZCBlbnYgZnJvbSBhbGwgcGFyZW50IHRhc2tzIG9uZSBieSBvbmVcbiAgICBmb3IgKGNvbnN0IHBhcmVudCBvZiBwYXJlbnRzKSB7XG4gICAgICBlbnYgPSB7XG4gICAgICAgIC4uLmVudixcbiAgICAgICAgLi4uKHRoaXMucnVudGltZS50cnlGaW5kVGFzayhwYXJlbnQpPy5lbnYgPz8ge30pLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBhcHBseSB0YXNrIGVudmlyb25tZW50LCB0aGVuIHRoZSBzcGVjaWZpYyBlbnYgbGFzdFxuICAgIGVudiA9IHtcbiAgICAgIC4uLmVudixcbiAgICAgIC4uLih0aGlzLnRhc2suZW52ID8/IHt9KSxcbiAgICAgIC4uLmVudlBhcmFtLFxuICAgIH07XG5cbiAgICByZXR1cm4gdGhpcy5ldmFsRW52aXJvbm1lbnQoZW52ID8/IHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBcImZ1bGwgbmFtZVwiIG9mIHRoZSB0YXNrIHdoaWNoIGluY2x1ZGVzIGFsbCBpdCdzIHBhcmVudCB0YXNrIG5hbWVzIGNvbmNhdGVuYXRlZCBieSBjaGV2cm9ucy5cbiAgICovXG4gIHByaXZhdGUgZ2V0IGZ1bGxuYW1lKCkge1xuICAgIHJldHVybiBbLi4udGhpcy5wYXJlbnRzLCB0aGlzLnRhc2submFtZV0uam9pbihcIiDCuyBcIik7XG4gIH1cblxuICBwcml2YXRlIGxvZyguLi5hcmdzOiBhbnlbXSkge1xuICAgIGxvZ2dpbmcudmVyYm9zZSh0aGlzLmZtdExvZyguLi5hcmdzKSk7XG4gIH1cblxuICBwcml2YXRlIGxvZ0RlYnVnKC4uLmFyZ3M6IGFueVtdKSB7XG4gICAgbG9nZ2luZy5kZWJ1Zyh0aGlzLmZtdExvZyguLi5hcmdzKSk7XG4gIH1cblxuICBwcml2YXRlIGZtdExvZyguLi5hcmdzOiBhbnlbXSkge1xuICAgIHJldHVybiBmb3JtYXQoYCR7dW5kZXJsaW5lKHRoaXMuZnVsbG5hbWUpfSB8YCwgLi4uYXJncyk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNoZWxsKG9wdGlvbnM6IFNoZWxsT3B0aW9ucyk6IFByb21pc2U8U2hlbGxSZXN1bHQ+IHtcbiAgICBjb25zdCBxdWlldCA9IG9wdGlvbnMucXVpZXQgPz8gZmFsc2U7XG4gICAgaWYgKCFxdWlldCkge1xuICAgICAgY29uc3QgbG9nID0gbmV3IEFycmF5PHN0cmluZz4oKTtcblxuICAgICAgaWYgKG9wdGlvbnMubG9ncHJlZml4KSB7XG4gICAgICAgIGxvZy5wdXNoKG9wdGlvbnMubG9ncHJlZml4KTtcbiAgICAgIH1cblxuICAgICAgbG9nLnB1c2goXG4gICAgICAgIEFycmF5LmlzQXJyYXkob3B0aW9ucy5jb21tYW5kKVxuICAgICAgICAgID8gb3B0aW9ucy5jb21tYW5kLmpvaW4oXCIgXCIpXG4gICAgICAgICAgOiBvcHRpb25zLmNvbW1hbmQsXG4gICAgICApO1xuXG4gICAgICBpZiAob3B0aW9ucy5jd2QpIHtcbiAgICAgICAgbG9nLnB1c2goYChjd2Q6ICR7b3B0aW9ucy5jd2R9KWApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmxvZyhsb2cuam9pbihcIiBcIikpO1xuICAgIH1cblxuICAgIGNvbnN0IGN3ZCA9IG9wdGlvbnMuY3dkID8/IHRoaXMud29ya2RpcjtcbiAgICBpZiAoIWV4aXN0c1N5bmMoY3dkKSB8fCAhc3RhdFN5bmMoY3dkKS5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBpbnZhbGlkIHdvcmtkaXIgKGN3ZCk6ICR7Y3dkfSBtdXN0IGJlIGFuIGV4aXN0aW5nIGRpcmVjdG9yeWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGVudiA9IHtcbiAgICAgIC4uLnByb2Nlc3MuZW52LFxuICAgICAgLi4udGhpcy5lbnYsXG4gICAgICAuLi5vcHRpb25zLmV4dHJhRW52LFxuICAgIH07XG5cbiAgICAvLyBzdGRvdXQvc3RkZXJyIGFyZSBvbmx5IGNhcHR1cmVkIHdoZW4gYSBjYWxsZXIgcGlwZXMgdGhlbSAoZS5nLlxuICAgIC8vIGBzaGVsbEV2YWxgKTsgb3RoZXJ3aXNlIGluaGVyaXQgc28gb3V0cHV0IGlzIHN0cmVhbWVkIHRvIHRoZSB0ZXJtaW5hbC5cbiAgICBjb25zdCBjYXB0dXJlID0gQXJyYXkuaXNBcnJheShvcHRpb25zLnNwYXduT3B0aW9ucz8uc3RkaW8pO1xuXG4gICAgY29uc3QgY29tbWFuZCA9IG9wdGlvbnMuY29tbWFuZDtcblxuICAgIC8vIE9uIFdpbmRvd3MgdGhlIGRlZmF1bHQgc2hlbGwgKGNtZC5leGUpIGRvZXMgbm90IHVuZGVyc3RhbmQgdGhlIFBPU0lYLXN0eWxlXG4gICAgLy8gY29tbWFuZHMgcHJvamVuIHRhc2tzIGFyZSB3cml0dGVuIGluIChgY2F0YCwgYGNwYCwgYG1rZGlyIC1wYCwgYHJtIC1yZmAsXG4gICAgLy8gYCYmYCBjaGFpbnMsIGAkVkFSYCwgLi4uKS4gUnVuIHRoZSBjb21tYW5kIHRocm91Z2ggZGF4J3MgY3Jvc3MtcGxhdGZvcm1cbiAgICAvLyBzaGVsbCBpbnN0ZWFkLCB3aGljaCBzaGlwcyBidWlsdC1pbiBpbXBsZW1lbnRhdGlvbnMgb2YgdGhlIGNvbW1vblxuICAgIC8vIGNvbW1hbmRzLiBOb3cgdGhhdCB0aGUgdGFzayBydW50aW1lIGlzIGFzeW5jaHJvbm91cyB3ZSBjYW4gZHJpdmUgZGF4J3NcbiAgICAvLyBgJGAgQVBJIGRpcmVjdGx5IGluc3RlYWQgb2Ygc3Bhd25pbmcgYSBzeW5jaHJvbm91cyBjaGlsZCBub2RlIHByb2Nlc3MuXG4gICAgaWYgKHByb2Nlc3MucGxhdGZvcm0gPT09IFwid2luMzJcIikge1xuICAgICAgLy8gQW4gYXJyYXkgY29tbWFuZCBpcyBhbiBleHBsaWNpdCBhcmd2OiBpbnRlcnBvbGF0ZSBpdCB0aHJvdWdoIGRheCAoTk9UXG4gICAgICAvLyBgJC5yYXdgKSBzbyBlYWNoIGVsZW1lbnQgaXMgcGFzc2VkIGFzIGEgc2luZ2xlIGFyZ3VtZW50IHdpdGggbm9cbiAgICAgIC8vIHF1b3RpbmcvZXhwYW5zaW9uLiBBIHN0cmluZyBjb21tYW5kIGlzIGEgc2hlbGwgbGluZSwgcnVuIHZlcmJhdGltIHZpYVxuICAgICAgLy8gYCQucmF3YC5cbiAgICAgIGNvbnN0IGNtZCA9IEFycmF5LmlzQXJyYXkoY29tbWFuZClcbiAgICAgICAgPyAkYCR7Y29tbWFuZFswXX0gJHtjb21tYW5kLnNsaWNlKDEpfWBcbiAgICAgICAgOiAkLnJhd2Ake2NvbW1hbmR9YDtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgY21kXG4gICAgICAgIC5jd2QoY3dkKVxuICAgICAgICAuZW52KGVudilcbiAgICAgICAgLnN0ZG91dChjYXB0dXJlID8gXCJwaXBlZFwiIDogXCJpbmhlcml0XCIpXG4gICAgICAgIC5zdGRlcnIoY2FwdHVyZSA/IFwicGlwZWRcIiA6IFwiaW5oZXJpdFwiKVxuICAgICAgICAubm9UaHJvdygpO1xuXG4gICAgICByZXR1cm4ge1xuICAgICAgICBzdGF0dXM6IHJlc3VsdC5jb2RlLFxuICAgICAgICBzdGRvdXQ6IGNhcHR1cmUgPyBCdWZmZXIuZnJvbShyZXN1bHQuc3Rkb3V0Qnl0ZXMpIDogbnVsbCxcbiAgICAgICAgc3RkZXJyOiBjYXB0dXJlID8gQnVmZmVyLmZyb20ocmVzdWx0LnN0ZGVyckJ5dGVzKSA6IG51bGwsXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIE9uIG90aGVyIHBsYXRmb3JtcyBhIHN0cmluZyBjb21tYW5kIGlzIGEgc2hlbGwgbGluZSwgcnVuIHRocm91Z2ggdGhlXG4gICAgLy8gc3lzdGVtIHNoZWxsIHZpYSBgcmF3U2hlbGxgLlxuICAgIGlmICghQXJyYXkuaXNBcnJheShjb21tYW5kKSkge1xuICAgICAgcmV0dXJuIHJhd1NoZWxsLmV4ZWMoY29tbWFuZCwgeyBjd2QsIGVudiwgY2FwdHVyZSB9KTtcbiAgICB9XG5cbiAgICAvLyBBbiBhcnJheSBjb21tYW5kIGlzIGFuIGV4cGxpY2l0IGFyZ3Y6IHJ1biB0aGUgcHJvZ3JhbSBkaXJlY3RseSwgd2l0aG91dFxuICAgIC8vIGEgc2hlbGwsIHZpYSB0aGUgc3RydWN0dXJlZCBgdG9vbGAgaGVscGVyIC0gc28gZWFjaCBlbGVtZW50IGlzIHBhc3NlZFxuICAgIC8vIHZlcmJhdGltIGFuZCB0aGVyZSBpcyBubyBxdW90aW5nIHRvIGdldCByaWdodC4gYHRvb2wucnVuYCB0aHJvd3Mgb24gYVxuICAgIC8vIG5vbi16ZXJvIGV4aXQgKHdpdGggYSBudW1lcmljIGBzdGF0dXNgKSBhbmQgb24gYSBzcGF3biBmYWlsdXJlICh3aXRob3V0XG4gICAgLy8gb25lKTsgdHJhbnNsYXRlIHRoZSBmb3JtZXIgaW50byBhIG5vcm1hbGl6ZWQgcmVzdWx0IGFuZCByZS10aHJvdyB0aGVcbiAgICAvLyBsYXR0ZXIsIG1hdGNoaW5nIGByYXdTaGVsbC5leGVjYCdzIG5vbi10aHJvd2luZyBjb250cmFjdC4gQXJyYXkgY29tbWFuZHNcbiAgICAvLyBhcmUgYWx3YXlzIHJ1biB3aXRoIGluaGVyaXRlZCBzdGRpbyAtIHRoZSBjYXB0dXJpbmcgY2FsbGVycyAoY29uZGl0aW9uXG4gICAgLy8gYW5kIGVudiBldmFsdWF0aW9uKSBvbmx5IGV2ZXIgcGFzcyBzdHJpbmcgY29tbWFuZHMuXG4gICAgY29uc3QgW2ZpbGUsIC4uLmFyZ3NdID0gY29tbWFuZDtcbiAgICB0cnkge1xuICAgICAgdG9vbChmaWxlKS5ydW4oYXJncywge1xuICAgICAgICBjd2QsXG4gICAgICAgIGVudixcbiAgICAgICAgaW5oZXJpdFN0ZGlvOiB0cnVlLFxuICAgICAgfSk7XG4gICAgICByZXR1cm4geyBzdGF0dXM6IDAgfTtcbiAgICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICAgIGlmICh0eXBlb2YgZT8uc3RhdHVzID09PSBcIm51bWJlclwiKSB7XG4gICAgICAgIHJldHVybiB7IHN0YXR1czogZS5zdGF0dXMgfTtcbiAgICAgIH1cbiAgICAgIHRocm93IGU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzaGVsbEV2YWwob3B0aW9uczogU2hlbGxPcHRpb25zKTogUHJvbWlzZTxTaGVsbFJlc3VsdD4ge1xuICAgIHJldHVybiB0aGlzLnNoZWxsKHtcbiAgICAgIHF1aWV0OiB0cnVlLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICAgIHNwYXduT3B0aW9uczoge1xuICAgICAgICBzdGRpbzogW1wiaW5oZXJpdFwiLCBcInBpcGVcIiwgXCJwaXBlXCJdLFxuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgcmVuZGVyQnVpbHRpbihidWlsdGluOiBzdHJpbmcpIHtcbiAgICAvLyBMb2NhdGUgcHJvamVuJ3MgcGFja2FnZSByb290IGJ5IHdhbGtpbmcgdXAgZnJvbSB0aGlzIG1vZHVsZSdzIGRpcmVjdG9yeVxuICAgIC8vIHVudGlsIHdlIGZpbmQgYSBwYWNrYWdlLmpzb24uIFRoaXMgd29ya3Mgd2hldGhlciB0aGUgY29kZSBydW5zIGZyb20gdGhlXG4gICAgLy8gY29tcGlsZWQgZmlsZSAobGliL2NsaS90YXNrLXJ1bnRpbWUuanMpIG9yIGZyb20gdGhlIGJ1bmRsZWQgcnVuLXRhc2suY2pzXG4gICAgLy8gKGxpYi9ydW4tdGFzay5janMpLCB3aGljaCBsaXZlIGF0IGRpZmZlcmVudCBkZXB0aHMgLSBzbyBhIGhhcmQtY29kZWRcbiAgICAvLyByZWxhdGl2ZSBwYXRoIHRvIHBhY2thZ2UuanNvbiB3b3VsZCBiZSB3cm9uZyBpbiBvbmUgb2YgdGhlIHR3byBjYXNlcy5cbiAgICBsZXQgbW9kdWxlUm9vdCA9IF9fZGlybmFtZTtcbiAgICB3aGlsZSAoIWV4aXN0c1N5bmMoam9pbihtb2R1bGVSb290LCBcInBhY2thZ2UuanNvblwiKSkpIHtcbiAgICAgIGNvbnN0IHBhcmVudCA9IGRpcm5hbWUobW9kdWxlUm9vdCk7XG4gICAgICBpZiAocGFyZW50ID09PSBtb2R1bGVSb290KSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihcInVuYWJsZSB0byBsb2NhdGUgdGhlIHByb2plbiBwYWNrYWdlIHJvb3RcIik7XG4gICAgICB9XG4gICAgICBtb2R1bGVSb290ID0gcGFyZW50O1xuICAgIH1cbiAgICBjb25zdCBwcm9ncmFtID0gcmVxdWlyZS5yZXNvbHZlKFxuICAgICAgam9pbihtb2R1bGVSb290LCBcImxpYlwiLCBgJHtidWlsdGlufS50YXNrLmpzYCksXG4gICAgKTtcbiAgICByZXR1cm4gYFwiJHtwcm9jZXNzLmV4ZWNQYXRofVwiIFwiJHtwcm9ncmFtfVwiYDtcbiAgfVxufVxuXG5pbnRlcmZhY2UgU2hlbGxPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBjb21tYW5kIHRvIHJ1bi4gQSBzdHJpbmcgaXMgZXhlY3V0ZWQgYXMgYSBzaGVsbCBjb21tYW5kIGxpbmU7IGFcbiAgICogc3RyaW5nIGFycmF5IGlzIGFuIGV4cGxpY2l0IGFyZ3YgKHByb2dyYW0gKyBhcmd1bWVudHMpIGV4ZWN1dGVkIHdpdGhvdXQgYVxuICAgKiBzaGVsbC5cbiAgICovXG4gIHJlYWRvbmx5IGNvbW1hbmQ6IHN0cmluZyB8IHN0cmluZ1tdO1xuICAvKipcbiAgICogQGRlZmF1bHQgLSBwcm9qZWN0IGRpclxuICAgKi9cbiAgcmVhZG9ubHkgY3dkPzogc3RyaW5nO1xuICByZWFkb25seSBsb2dwcmVmaXg/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNwYXduT3B0aW9ucz86IFNwYXduT3B0aW9ucztcbiAgLyoqIEBkZWZhdWx0IGZhbHNlICovXG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZXh0cmFFbnY/OiB7IFtuYW1lOiBzdHJpbmddOiBzdHJpbmcgfCB1bmRlZmluZWQgfTtcbn1cbiJdfQ==
|
package/lib/common.d.ts
CHANGED
|
@@ -9,6 +9,6 @@ export declare const PROJEN_MARKER: string;
|
|
|
9
9
|
* newer (potentially incompatible) version of projen. Manifests generated by
|
|
10
10
|
* older versions of projen omit it and are treated as "legacy".
|
|
11
11
|
*/
|
|
12
|
-
export declare const TASKS_MANIFEST_VERSION =
|
|
12
|
+
export declare const TASKS_MANIFEST_VERSION = 2;
|
|
13
13
|
export declare const IS_TEST_RUN: boolean;
|
|
14
14
|
export declare const PROJEN_VERSION: any;
|
package/lib/common.js
CHANGED
|
@@ -12,10 +12,10 @@ exports.PROJEN_MARKER = "~~ Generated by " + "projen"; // we split into two so /
|
|
|
12
12
|
* newer (potentially incompatible) version of projen. Manifests generated by
|
|
13
13
|
* older versions of projen omit it and are treated as "legacy".
|
|
14
14
|
*/
|
|
15
|
-
exports.TASKS_MANIFEST_VERSION =
|
|
15
|
+
exports.TASKS_MANIFEST_VERSION = 2;
|
|
16
16
|
exports.IS_TEST_RUN = process.env.NODE_ENV === "test";
|
|
17
17
|
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
18
18
|
const packageVersion = require("../package.json").version;
|
|
19
19
|
// if we are running with a test, report a fake stable version
|
|
20
20
|
exports.PROJEN_VERSION = exports.IS_TEST_RUN ? "99.99.99" : packageVersion;
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbW1vbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBYSxRQUFBLDZCQUE2QixHQUFHLGNBQWMsQ0FBQztBQUMvQyxRQUFBLFVBQVUsR0FBRyxTQUFTLENBQUM7QUFDdkIsUUFBQSxhQUFhLEdBQUcsa0JBQWtCLEdBQUcsUUFBUSxDQUFDLENBQUMsNkRBQTZEO0FBRXpIOzs7Ozs7O0dBT0c7QUFDVSxRQUFBLHNCQUFzQixHQUFHLENBQUMsQ0FBQztBQUUzQixRQUFBLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxNQUFNLENBQUM7QUFFM0QsaUVBQWlFO0FBQ2pFLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUUxRCw4REFBOEQ7QUFDakQsUUFBQSxjQUFjLEdBQUcsbUJBQVcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgREVGQVVMVF9QUk9KRU5fUkNfSlNfRklMRU5BTUUgPSBcIi5wcm9qZW5yYy5qc1wiO1xuZXhwb3J0IGNvbnN0IFBST0pFTl9ESVIgPSBcIi5wcm9qZW5cIjtcbmV4cG9ydCBjb25zdCBQUk9KRU5fTUFSS0VSID0gXCJ+
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NvbW1vbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBYSxRQUFBLDZCQUE2QixHQUFHLGNBQWMsQ0FBQztBQUMvQyxRQUFBLFVBQVUsR0FBRyxTQUFTLENBQUM7QUFDdkIsUUFBQSxhQUFhLEdBQUcsa0JBQWtCLEdBQUcsUUFBUSxDQUFDLENBQUMsNkRBQTZEO0FBRXpIOzs7Ozs7O0dBT0c7QUFDVSxRQUFBLHNCQUFzQixHQUFHLENBQUMsQ0FBQztBQUUzQixRQUFBLFdBQVcsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxNQUFNLENBQUM7QUFFM0QsaUVBQWlFO0FBQ2pFLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLE9BQU8sQ0FBQztBQUUxRCw4REFBOEQ7QUFDakQsUUFBQSxjQUFjLEdBQUcsbUJBQVcsQ0FBQyxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgY29uc3QgREVGQVVMVF9QUk9KRU5fUkNfSlNfRklMRU5BTUUgPSBcIi5wcm9qZW5yYy5qc1wiO1xuZXhwb3J0IGNvbnN0IFBST0pFTl9ESVIgPSBcIi5wcm9qZW5cIjtcbmV4cG9ydCBjb25zdCBQUk9KRU5fTUFSS0VSID0gXCJ+fiBHZW5lcmF0ZWQgYnkgXCIgKyBcInByb2plblwiOyAvLyB3ZSBzcGxpdCBpbnRvIHR3byBzbyAvdGhpcy8gZmlsZSBkb2VzIG5vdCBtYXRjaCB0aGUgbWFya2VyXG5cbi8qKlxuICogVGhlIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGUgYC5wcm9qZW4vdGFza3MuanNvbmAgbWFuaWZlc3Qgc2NoZW1hLlxuICpcbiAqIEJ1bXAgdGhpcyB3aGVuZXZlciB0aGUgbWFuaWZlc3Qgc3RydWN0dXJlIGNoYW5nZXMgaW4gYSB3YXkgdGhlIHRhc2sgcnVudGltZVxuICogbmVlZHMgdG8gYmUgYXdhcmUgb2YuIFRoZSBydW50aW1lIHVzZXMgaXQgdG8gZGV0ZWN0IG1hbmlmZXN0cyBwcm9kdWNlZCBieSBhXG4gKiBuZXdlciAocG90ZW50aWFsbHkgaW5jb21wYXRpYmxlKSB2ZXJzaW9uIG9mIHByb2plbi4gTWFuaWZlc3RzIGdlbmVyYXRlZCBieVxuICogb2xkZXIgdmVyc2lvbnMgb2YgcHJvamVuIG9taXQgaXQgYW5kIGFyZSB0cmVhdGVkIGFzIFwibGVnYWN5XCIuXG4gKi9cbmV4cG9ydCBjb25zdCBUQVNLU19NQU5JRkVTVF9WRVJTSU9OID0gMjtcblxuZXhwb3J0IGNvbnN0IElTX1RFU1RfUlVOID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09IFwidGVzdFwiO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXJlcXVpcmUtaW1wb3J0c1xuY29uc3QgcGFja2FnZVZlcnNpb24gPSByZXF1aXJlKFwiLi4vcGFja2FnZS5qc29uXCIpLnZlcnNpb247XG5cbi8vIGlmIHdlIGFyZSBydW5uaW5nIHdpdGggYSB0ZXN0LCByZXBvcnQgYSBmYWtlIHN0YWJsZSB2ZXJzaW9uXG5leHBvcnQgY29uc3QgUFJPSkVOX1ZFUlNJT04gPSBJU19URVNUX1JVTiA/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.7" };
|
|
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.7" };
|
|
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.7" };
|
|
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.7" };
|
|
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.7" };
|
|
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.7" };
|
|
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.7" };
|
|
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.7" };
|
|
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.7" };
|
|
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.7" };
|
|
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.7" };
|
|
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.7" };
|
|
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.7" };
|
|
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.7" };
|
|
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.7" };
|
|
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.7" };
|
|
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.7" };
|
|
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.7" };
|
|
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.7" };
|
|
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.7" };
|
|
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.7" };
|
|
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.7" };
|
|
22
22
|
constructor(github, options = {}) {
|
|
23
23
|
super(github.project);
|
|
24
24
|
const stale = github.addWorkflow("stale");
|