projen-pipelines 0.3.23 → 0.3.24
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 +2 -2
- package/lib/assign-approver/base.js +1 -1
- package/lib/assign-approver/github.js +1 -1
- package/lib/awscdk/base.js +4 -4
- package/lib/awscdk/bash.js +1 -1
- package/lib/awscdk/github.js +1 -1
- package/lib/awscdk/gitlab.js +1 -1
- package/lib/drift/base.js +1 -1
- package/lib/drift/bash.js +1 -1
- package/lib/drift/detect-drift.js +8 -8
- package/lib/drift/github.js +3 -3
- package/lib/drift/gitlab.js +1 -1
- package/lib/drift/step.js +1 -1
- package/lib/release.js +9 -9
- package/lib/steps/amplify-deploy.step.js +1 -1
- package/lib/steps/artifact-steps.js +2 -2
- package/lib/steps/aws-assume-role.step.js +1 -1
- package/lib/steps/github-summary.step.js +1 -1
- package/lib/steps/package-manager-setup.step.js +2 -2
- package/lib/steps/registries.js +3 -3
- package/lib/steps/step.js +4 -4
- package/lib/versioning/computation.js +3 -3
- package/lib/versioning/config.js +2 -2
- package/lib/versioning/outputs.js +5 -5
- package/lib/versioning/setup.js +4 -4
- package/lib/versioning/strategy.js +1 -1
- package/lib/versioning/version-info.js +2 -2
- package/package.json +1 -1
package/.jsii
CHANGED
|
@@ -9000,6 +9000,6 @@
|
|
|
9000
9000
|
"symbolId": "src/versioning/types:VersioningStrategyComponents"
|
|
9001
9001
|
}
|
|
9002
9002
|
},
|
|
9003
|
-
"version": "0.3.
|
|
9004
|
-
"fingerprint": "
|
|
9003
|
+
"version": "0.3.24",
|
|
9004
|
+
"fingerprint": "ZorgTQB4h3gF6vzrrmgjL4sZ2EQwM4bvT0wvpg/EBFQ="
|
|
9005
9005
|
}
|
|
@@ -5,7 +5,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
|
5
5
|
const projen_1 = require("projen");
|
|
6
6
|
class AssignApprover extends projen_1.Component {
|
|
7
7
|
baseOptions;
|
|
8
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.AssignApprover", version: "0.3.
|
|
8
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.AssignApprover", version: "0.3.24" };
|
|
9
9
|
constructor(scope, baseOptions) {
|
|
10
10
|
super(scope);
|
|
11
11
|
this.baseOptions = baseOptions;
|
|
@@ -5,7 +5,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
|
5
5
|
const workflows_model_1 = require("projen/lib/github/workflows-model");
|
|
6
6
|
const base_1 = require("./base");
|
|
7
7
|
class GitHubAssignApprover extends base_1.AssignApprover {
|
|
8
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.GitHubAssignApprover", version: "0.3.
|
|
8
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.GitHubAssignApprover", version: "0.3.24" };
|
|
9
9
|
workflow;
|
|
10
10
|
options;
|
|
11
11
|
constructor(scope, options) {
|
package/lib/awscdk/base.js
CHANGED
|
@@ -35,7 +35,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.CDKPipeline = exports.CdkDiffType = void 0;
|
|
37
37
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
38
|
-
const path = __importStar(require("path"));
|
|
38
|
+
const path = __importStar(require("node:path"));
|
|
39
39
|
const projen_1 = require("projen");
|
|
40
40
|
const common_1 = require("projen/lib/common");
|
|
41
41
|
const javascript_1 = require("projen/lib/javascript");
|
|
@@ -67,7 +67,7 @@ var CdkDiffType;
|
|
|
67
67
|
class CDKPipeline extends projen_1.Component {
|
|
68
68
|
app;
|
|
69
69
|
baseOptions;
|
|
70
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.CDKPipeline", version: "0.3.
|
|
70
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.CDKPipeline", version: "0.3.24" };
|
|
71
71
|
stackPrefix;
|
|
72
72
|
branchName;
|
|
73
73
|
/** Prefix for workflow files, concurrency groups, and artifact names to prevent collisions in monorepos. */
|
|
@@ -601,7 +601,7 @@ ${appCode}
|
|
|
601
601
|
const imports = [];
|
|
602
602
|
imports.push("import { CfnOutput } from 'aws-cdk-lib';");
|
|
603
603
|
imports.push("import { StringParameter } from 'aws-cdk-lib/aws-ssm';");
|
|
604
|
-
imports.push("import * as fs from 'fs';");
|
|
604
|
+
imports.push("import * as fs from 'node:fs';");
|
|
605
605
|
return imports.join('\n');
|
|
606
606
|
}
|
|
607
607
|
/**
|
|
@@ -763,4 +763,4 @@ function addVersioningToStack(stack: Stack, stageName: string, stageOverrides?:
|
|
|
763
763
|
}
|
|
764
764
|
}
|
|
765
765
|
exports.CDKPipeline = CDKPipeline;
|
|
766
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hd3NjZGsvYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsMkNBQTZCO0FBQzdCLG1DQUFxRDtBQUNyRCw4Q0FBa0Q7QUFDbEQsc0RBQTJEO0FBQzNELHNDQUEyQztBQUMzQyxvQ0FBZ0o7QUFDaEosOENBQWtFO0FBdUJsRSxNQUFNO0FBQ04seURBQXlEO0FBQ3pELE1BQU07QUFDTiwrQkFBK0I7QUFDL0IsNkVBQTZFO0FBQzdFLDJCQUEyQjtBQUMzQiw0RUFBNEU7QUFDNUUseUJBQXlCO0FBQ3pCLElBQUk7QUFFSixJQUFZLFdBT1g7QUFQRCxXQUFZLFdBQVc7SUFDckIsNEJBQTRCO0lBQzVCLDZDQUFJLENBQUE7SUFDSixvREFBb0Q7SUFDcEQsNkNBQUksQ0FBQTtJQUNKLHVEQUF1RDtJQUN2RCw2Q0FBSSxDQUFBO0FBQ04sQ0FBQyxFQVBXLFdBQVcsMkJBQVgsV0FBVyxRQU90QjtBQXNNRDs7O0dBR0c7QUFDSCxNQUFzQixXQUFZLFNBQVEsa0JBQVM7SUFhM0I7SUFBMkM7O0lBWmpELFdBQVcsQ0FBUztJQUNwQixVQUFVLENBQVM7SUFFbkMsNEdBQTRHO0lBQ3pGLFVBQVUsQ0FBUztJQUV0Qzs7O09BR0c7SUFDZ0IsZ0JBQWdCLENBQXFCO0lBRXhELFlBQXNCLEdBQStCLEVBQVksV0FBK0I7UUFDOUYsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRFMsUUFBRyxHQUFILEdBQUcsQ0FBNEI7UUFBWSxnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFHOUYsaURBQWlEO1FBQ2pELElBQUksV0FBVyxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQztRQUN2RCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxHQUFHLENBQUMsQ0FBQztZQUNyRixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsR0FBRyxJQUFJLFNBQVMsQ0FBQztRQUMzQyxDQUFDO1FBRUQsK0JBQStCO1FBQy9CLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUNqQix3QkFBd0IsRUFDeEIsWUFBWSxDQUNiLENBQUM7UUFDRixvQkFBb0I7UUFDcEIsS0FBSztRQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO1FBRXRELE1BQU0sWUFBWSxHQUFHLFdBQVcsQ0FBQyxZQUFZLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNyRixJQUFJLENBQUMsVUFBVSxHQUFHLFlBQVksQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ3pELElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUMsSUFBSSxDQUFDO1FBQ3ZELElBQUksQ0FBQyxVQUFVLEdBQUcsV0FBVyxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsQ0FBQywrQ0FBK0M7UUFFbkcsd0RBQXdEO1FBQ3hELElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxXQUFXLENBQUMsVUFBVSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3hGLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsRUFBRSxXQUFXLENBQUMsVUFBVSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBRS9GLDZEQUE2RDtRQUM3RCxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNoQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUVqQyw4QkFBOEI7UUFDOUIsSUFBSSxXQUFXLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ3BDLElBQUksNEJBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFdBQVcsQ0FBQyxVQUFVLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNwRSxDQUFDO1FBRUQsc0NBQXNDO1FBQ3RDLElBQUksV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQzlCLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxDQUFDO1FBQzdCLENBQUM7UUFDRCxJQUFJLFdBQVcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM5QixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUM1QixDQUFDO1FBQ0QsS0FBSyxNQUFNLEtBQUssSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDdkMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xDLENBQUM7UUFDRCxLQUFLLE1BQU0sS0FBSyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDMUQsSUFBSSxDQUFDLHNCQUFzQixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3JDLENBQUM7UUFFRCw4Q0FBOEM7UUFDOUMsSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFFMUIsc0NBQXNDO1FBQ3RDLElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO0lBRXJDLENBQUM7SUFJUyxrQkFBa0I7UUFDMUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxvQkFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLElBQUksRUFBRSxDQUFDLENBQUM7UUFFbkYsb0RBQW9EO1FBQ3BELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsY0FBYyxLQUFLLCtCQUFrQixDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLEtBQUssdUJBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUMvRyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUkscUJBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUMzQyxPQUFPLEVBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFlLENBQUMsV0FBVzthQUMvQyxDQUFDLENBQUMsQ0FBQztRQUNOLENBQUM7UUFFRCxnREFBZ0Q7UUFDaEQsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEtBQUssK0JBQWtCLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDdEUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLHlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO1FBQ3BELENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUN4QyxHQUFHLENBQUMsUUFBUSxDQUFDLElBQUkseUJBQWlCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQztRQUN6RixDQUFDO1FBQ0QsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLHlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDckYsT0FBTyxHQUFHLENBQUM7SUFDYixDQUFDO0lBRVMsZ0JBQWdCO1FBQ3hCLE1BQU0sR0FBRyxHQUFHLElBQUksb0JBQVksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRS9DLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxFQUFFLENBQUM7WUFDeEMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLHlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQy9DLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxLQUFLO2dCQUMzQyxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLEtBQUs7YUFDdEQsQ0FBQyxDQUFDLENBQUM7UUFDTixDQUFDO1FBRUQsR0FBRyxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3RELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ3RDLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSx5QkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDO1FBQ3ZGLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDckMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLHlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNyRixDQUFDO1FBRUQsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLHdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUUxRCxHQUFHLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLElBQUksRUFBRSxDQUFDLENBQUM7UUFDdkQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDdkMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxJQUFJLHlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7UUFDeEYsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxzQkFBc0I7UUFDNUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFnQixDQUFDO1FBQzlDLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUMzQixPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUM7UUFDRCxRQUFRLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxDQUFDO1lBQzFCLEtBQUssdUJBQWMsQ0FBQyxNQUFNO2dCQUN4QixPQUFPLDJCQUEyQixHQUFHLEVBQUUsQ0FBQztZQUMxQyxLQUFLLHVCQUFjLENBQUMsTUFBTTtnQkFDeEIsT0FBTywwQkFBMEIsR0FBRyxHQUFHLENBQUM7WUFDMUMsS0FBSyx1QkFBYyxDQUFDLElBQUk7Z0JBQ3RCLE9BQU8sNkNBQTZDLEdBQUcsR0FBRyxDQUFDO1lBQzdEO2dCQUNFLE9BQU8sR0FBRyxDQUFDO1FBQ2YsQ0FBQztJQUNILENBQUM7SUFFUyxzQkFBc0IsQ0FBQyxTQUFrQjtRQUNqRCxNQUFNLEdBQUcsR0FBRyxJQUFJLG9CQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUUvQyxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxPQUFRLENBQUM7UUFDaEgsSUFBSSxTQUFTLEVBQUUsQ0FBQztZQUNkLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSx5QkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUMvQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsdUJBQXVCLENBQUMsQ0FBQztvQkFDN0QsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsSUFBSSxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7b0JBQ3hGLGlCQUFpQjtnQkFDbkIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQzthQUM1RCxDQUFDLENBQUMsQ0FBQztZQUNKLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSx3QkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGtCQUFrQixTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbEYsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLHVCQUF1QixFQUFFLENBQUM7Z0JBQ3pELE1BQU0sTUFBTSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ3pGLEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxFQUFFLENBQUM7b0JBQzNCLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSx5QkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO3dCQUMvQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsdUJBQXVCLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLGlCQUFpQjt3QkFDOUYsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUM7cUJBQzdELENBQUMsQ0FBQyxDQUFDO29CQUNKLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSx3QkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGtCQUFrQixLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNuRixDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSx5QkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO29CQUMvQyxPQUFPLEVBQUUsaUJBQWlCO29CQUMxQixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLGVBQWU7aUJBQ2hFLENBQUMsQ0FBQyxDQUFDO2dCQUNKLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSx3QkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztZQUNyRSxDQUFDO1FBQ0gsQ0FBQztRQUVELE9BQU8sR0FBRyxDQUFDO0lBQ2IsQ0FBQztJQUVTLHlCQUF5QjtRQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLGlGQUFpRixDQUFDLENBQUM7UUFDckcsQ0FBQztRQUNELE9BQU8sSUFBSSxvQkFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDcEMsSUFBSSx3QkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQztZQUMxQyxJQUFJLHdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsdUJBQXVCLENBQUM7U0FDNUQsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVTLGlCQUFpQixDQUFDLEtBQXdCO1FBQ2xELE9BQU8sSUFBSSxvQkFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDcEMsSUFBSSx5QkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNsQyxPQUFPLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsVUFBVSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLE9BQVE7Z0JBQ3pHLE1BQU0sRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU07Z0JBQ3hCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO2FBQzdELENBQUM7WUFDRixJQUFJLHdCQUFnQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDMUQsR0FBRyxLQUFLLENBQUMsZUFBZSxJQUFJLEVBQUU7U0FDL0IsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVTLGVBQWUsQ0FBQyxLQUF3QixFQUFFLElBQWM7UUFDaEUsT0FBTyxJQUFJLG9CQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNwQyxJQUFJLHlCQUFpQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUU7Z0JBQ2xDLE9BQU8sRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO29CQUN2RCxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxVQUFVLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDO29CQUN0RCxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxPQUFRO2dCQUN4QyxNQUFNLEVBQUUsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNO2dCQUN4QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQzthQUM3RCxDQUFDO1lBQ0YsSUFBSSx3QkFBZ0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsWUFBWSxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDO1lBQzFGLEdBQUcsS0FBSyxDQUFDLGFBQWEsSUFBSSxFQUFFO1NBQzdCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFUyw0QkFBNEIsQ0FBQyxXQUFtQixFQUFFLHdCQUFpQyxLQUFLO1FBQ2hHLE1BQU0sUUFBUSxHQUFHLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRXhGLFFBQVEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEMsS0FBSywrQkFBa0IsQ0FBQyxJQUFJLENBQUM7WUFDN0IsS0FBSywrQkFBa0IsQ0FBQyxLQUFLLENBQUM7WUFDOUIsS0FBSywrQkFBa0IsQ0FBQyxVQUFVLENBQUM7WUFDbkMsS0FBSywrQkFBa0IsQ0FBQyxZQUFZO2dCQUNsQyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQVksV0FBVyxFQUFFLENBQUMsQ0FBQztnQkFDekMsTUFBTTtZQUNSLEtBQUssK0JBQWtCLENBQUMsR0FBRztnQkFDekIsUUFBUSxDQUFDLElBQUksQ0FBQyxlQUFlLFdBQVcsRUFBRSxDQUFDLENBQUM7Z0JBQzVDLE1BQU07WUFDUixLQUFLLCtCQUFrQixDQUFDLElBQUk7Z0JBQzFCLFFBQVEsQ0FBQyxJQUFJLENBQUMsWUFBWSxXQUFXLEVBQUUsQ0FBQyxDQUFDO2dCQUN6QyxNQUFNO1lBQ1I7Z0JBQ0UsTUFBTSxJQUFJLEtBQUssQ0FBQyx5Q0FBeUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNqRyxDQUFDO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztJQUVTLG1CQUFtQixDQUFDLElBQVk7UUFDeEMsMERBQTBEO1FBQzFELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRXRFLHlEQUF5RDtRQUN6RCxPQUFPLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN4QixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUNwRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDZCxDQUFDO0lBRUQ7OztPQUdHO0lBQ08sMkJBQTJCO1FBQ25DLElBQUksU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLE9BQU8sR0FBRyxFQUFFLENBQUM7UUFDakIsSUFBSSxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2QsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQzVCLEdBQUcsR0FBRyxFQUFFLENBQUM7UUFDWCxDQUFDO1FBR0QsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25DLFNBQVMsSUFBSTs7Q0FFbEIsQ0FBQztZQUNJLE9BQU8sSUFBSTs7OzBDQUd5QixJQUFJLENBQUMsV0FBVyxHQUFHLEdBQUcsaUNBQWlDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxPQUFPLGVBQWUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE1BQU0scUJBQXFCLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRzs7Q0FFN08sQ0FBQztRQUNFLENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDbkMsU0FBUyxJQUFJOztDQUVsQixDQUFDO1lBQ0ksT0FBTyxJQUFJOzs7eUNBR3dCLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxnQ0FBZ0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLE9BQU8sZUFBZSxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsTUFBTSxxQkFBcUIsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHOztDQUUzTyxDQUFDO1FBQ0UsQ0FBQztRQUVELEtBQUssTUFBTSxLQUFLLElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM1QyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBRTVELFNBQVMsSUFBSSxrREFBa0QsS0FBSyxDQUFDLElBQUk7V0FDcEUsY0FBYztDQUN4QixDQUFDO1lBQ0ksT0FBTyxJQUFJLG1EQUFtRCxLQUFLLENBQUMsSUFBSTt1QkFDdkQsY0FBYztxQkFDaEIsY0FBYyxnQkFBZ0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUkseUJBQXlCLEtBQUssQ0FBQyxHQUFHLENBQUMsT0FBTyxlQUFlLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSxvQkFBb0IsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLElBQUksa0JBQWtCLEtBQUssQ0FBQyxJQUFJOztDQUVqUCxDQUFDO1FBQ0UsQ0FBQztRQUVELEtBQUssTUFBTSxLQUFLLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxFQUFFLENBQUM7WUFDL0QsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUU1RCxTQUFTLElBQUksa0RBQWtELEtBQUssQ0FBQyxJQUFJO1dBQ3BFLGNBQWM7Q0FDeEIsQ0FBQztZQUNJLE9BQU8sSUFBSSxtREFBbUQsS0FBSyxDQUFDLElBQUk7dUJBQ3ZELGNBQWM7cUJBQ2hCLGNBQWMsZ0JBQWdCLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLHlCQUF5QixLQUFLLENBQUMsR0FBRyxDQUFDLE9BQU8sZUFBZSxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sb0JBQW9CLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLGtCQUFrQixLQUFLLENBQUMsSUFBSTs7Q0FFalAsQ0FBQztRQUNFLENBQUM7UUFFRCw4Q0FBOEM7UUFDOUMsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUN6QyxPQUFPLElBQUksSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDekUsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLElBQUksaUJBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLFNBQVMsQ0FBQyxDQUFDO1FBRXhFLGtEQUFrRDtRQUNsRCxNQUFNLGlCQUFpQixHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLE9BQU87WUFDNUQsQ0FBQyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsRUFBRTtZQUNsQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRVAsTUFBTSxtQkFBbUIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxPQUFPO1lBQzlELENBQUMsQ0FBQyxJQUFJLENBQUMsMkJBQTJCLEVBQUU7WUFDcEMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVQLE1BQU0sMkJBQTJCLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsT0FBTztZQUN0RSxDQUFDLENBQUM7MkJBQ21CLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztDQUM5RTtZQUNLLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFFUCxPQUFPLENBQUMsT0FBTyxDQUFDLE1BQU0sc0JBQWE7OztFQUdyQyxpQkFBaUI7RUFDakIsMkJBQTJCO0VBQzNCLG1CQUFtQjs7Ozs7Ozs7OztFQVVuQixTQUFTOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztFQW9CVCxPQUFPOzs7O0NBSVIsQ0FBQyxDQUFDO0lBQ0QsQ0FBQztJQUdEOzs7T0FHRztJQUNPLGtCQUFrQjtRQUMxQixNQUFNLE1BQU0sR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGlCQUFpQixJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3pGLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNkLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUM1QixHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ1gsQ0FBQztRQUNELGlEQUFpRDtRQUNqRCxLQUFLLE1BQU0sS0FBSyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGtCQUFrQixLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUU7Z0JBQ25ELEtBQUssRUFBRSxDQUFDO3dCQUNOLElBQUksRUFBRSxxQkFBcUIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxHQUFHLEtBQUssQ0FBQyxJQUFJLHNCQUFzQjtxQkFDbEgsQ0FBQzthQUNILENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRTtZQUNyQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQzFCLEtBQUssRUFBRSxrQkFBa0IsS0FBSyxDQUFDLElBQUksRUFBRTthQUN0QyxDQUFDLENBQUM7U0FDSixDQUFDLENBQUM7UUFFSCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFO2dCQUMzQixXQUFXLEVBQUUsdUNBQXVDO2dCQUNwRCxLQUFLLEVBQUU7b0JBQ0w7d0JBQ0UsSUFBSSxFQUFFLHdCQUF3QjtxQkFDL0I7b0JBQ0Q7d0JBQ0UsSUFBSSxFQUFFLGlCQUFpQjtxQkFDeEI7aUJBQ0Y7YUFDRixDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsRUFBRTtnQkFDNUMsS0FBSyxFQUFFO29CQUNMO3dCQUNFLElBQUksRUFBRSxzQ0FBc0MsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxHQUFHO3FCQUM3RztvQkFDRDt3QkFDRSxHQUFHLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTTt3QkFDOUIsSUFBSSxFQUFFLDJDQUEyQztxQkFDbEQ7b0JBQ0Q7d0JBQ0UsR0FBRyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU07d0JBQzlCLElBQUksRUFBRSxhQUFhO3FCQUNwQjtpQkFDRjthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7SUFFSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ08sbUJBQW1CO1FBQzNCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRTtZQUN0QyxJQUFJLEVBQUUsdURBQXVELE9BQU8sRUFBRTtTQUN2RSxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRTtZQUNyQyxJQUFJLEVBQUUseUVBQXlFLE9BQU8sRUFBRTtTQUN6RixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUU7WUFDcEMsSUFBSSxFQUFFLFlBQVksT0FBTyxFQUFFO1NBQzVCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFO1lBQ3hDLElBQUksRUFBRSwyQkFBMkIsT0FBTyxFQUFFO1NBQzNDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFO1lBQ3ZDLElBQUksRUFBRSxlQUFlLE9BQU8sRUFBRTtTQUMvQixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ08sa0JBQWtCO1FBQzFCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNuRCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsRUFBRTtZQUNyQyxJQUFJLEVBQUUsaUdBQWlHLE9BQU8sRUFBRTtTQUNqSCxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUU7WUFDbkMsSUFBSSxFQUFFLFlBQVksT0FBTyxFQUFFO1NBQzVCLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGtCQUFrQixFQUFFO1lBQ3ZDLElBQUksRUFBRSwyQkFBMkIsT0FBTyxFQUFFO1NBQzNDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGlCQUFpQixFQUFFO1lBQ3RDLElBQUksRUFBRSx1QkFBdUIsT0FBTyxFQUFFO1NBQ3ZDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRTtZQUNwQyxJQUFJLEVBQUUsd0VBQXdFLE9BQU8sRUFBRTtTQUN4RixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7OztPQUdHO0lBQ08sbUJBQW1CLENBQUMsS0FBc0I7UUFDbEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUMzQyxJQUFJLEVBQUUsYUFBYSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLCtCQUErQixLQUFLLENBQUMsSUFBSSwyREFBMkQsT0FBTyxFQUFFO1NBQzFKLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQ3pDLElBQUksRUFBRSxhQUFhLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sU0FBUyxPQUFPLEVBQUU7U0FDL0QsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDN0MsSUFBSSxFQUFFLGFBQWEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSx3QkFBd0IsT0FBTyxFQUFFO1NBQzlFLENBQUMsQ0FBQztRQUNILElBQUksS0FBSyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ3BCLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFNBQVMsS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFO2dCQUMxQyxJQUFJLEVBQUUseUNBQXlDLEtBQUssQ0FBQyxJQUFJLDJCQUEyQixPQUFPLEVBQUU7YUFDOUYsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUNELGtEQUFrRDtRQUNsRCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ3pDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNyQyxDQUFDO0lBQ0gsQ0FBQztJQUVEOzs7T0FHRztJQUNPLHNCQUFzQixDQUFDLEtBQXVCO1FBQ3RELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDM0MsSUFBSSxFQUFFLGFBQWEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSwrQkFBK0IsS0FBSyxDQUFDLElBQUksMkRBQTJELE9BQU8sRUFBRTtTQUMxSixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUN6QyxJQUFJLEVBQUUsYUFBYSxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxNQUFNLFNBQVMsT0FBTyxFQUFFO1NBQy9ELENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksS0FBSyxDQUFDLElBQUksRUFBRSxFQUFFO1lBQzdDLElBQUksRUFBRSxhQUFhLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLE1BQU0sd0JBQXdCLE9BQU8sRUFBRTtTQUM5RSxDQUFDLENBQUM7UUFDSCxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDMUMsSUFBSSxFQUFFLHlDQUF5QyxLQUFLLENBQUMsSUFBSSwyQkFBMkIsT0FBTyxFQUFFO2FBQzlGLENBQUMsQ0FBQztRQUNMLENBQUM7UUFDRCxrREFBa0Q7UUFDbEQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsRUFBRSxPQUFPLEVBQUUsQ0FBQztZQUN6QyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDckMsQ0FBQztJQUNILENBQUM7SUFFUyxrQkFBa0IsQ0FBQyxLQUFhO1FBQ3hDLElBQUksR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNkLElBQUksSUFBSSxDQUFDLFdBQVcsS0FBSyxFQUFFLEVBQUUsQ0FBQztZQUM1QixHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ1gsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFHLEdBQUcsS0FBSyxJQUFJLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsR0FBRyxHQUFHLEtBQUssRUFBRSxDQUFDO0lBQzFKLENBQUM7SUFFRDs7T0FFRztJQUNPLHNCQUFzQixDQUFDLEtBQXdCO1FBQ3ZELE1BQU0sU0FBUyxHQUFHLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkYsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEVBQUUsY0FBYyxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxDQUFDO1FBRTdHLElBQUksQ0FBQyxXQUFXLEVBQUUsT0FBTztZQUFFLE9BQU87UUFFbEMsTUFBTSxRQUFRLEdBQWEsRUFBRSxDQUFDO1FBRTlCLG9DQUFvQztRQUNwQyxJQUFJLFdBQVcsQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLE9BQU8sRUFBRSxDQUFDO1lBQ2hELFFBQVEsQ0FBQyxJQUFJLENBQ1gsK0RBQStELEtBQUssQ0FBQyxJQUFJLE1BQU0sRUFDL0UsbURBQW1ELFNBQVMsYUFBYSxLQUFLLENBQUMsR0FBRyxDQUFDLE1BQU0sc0hBQXNILENBQ2hOLENBQUM7UUFDSixDQUFDO1FBRUQsaUNBQWlDO1FBQ2pDLElBQUksV0FBVyxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUUsT0FBTyxFQUFFLENBQUM7WUFDaEQsTUFBTSxhQUFhLEdBQUcsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxhQUFhLElBQUksc0JBQXNCLENBQUM7aUJBQy9GLE9BQU8sQ0FBQyxhQUFhLEVBQUUsU0FBUyxDQUFDO2lCQUNqQyxPQUFPLENBQUMsYUFBYSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUV0QyxJQUFLLFdBQVcsQ0FBQyxPQUFPLENBQUMsY0FBc0IsRUFBRSxZQUFZLEVBQUUsQ0FBQztnQkFDOUQsUUFBUSxDQUFDLElBQUksQ0FDWCwyRUFBMkUsS0FBSyxDQUFDLElBQUksTUFBTSxFQUMzRiwwQ0FBMEMsYUFBYSxjQUFjLEtBQUssQ0FBQyxHQUFHLENBQUMsTUFBTSw0RUFBNEUsQ0FDbEssQ0FBQztZQUNKLENBQUM7aUJBQU0sQ0FBQztnQkFDTixRQUFRLENBQUMsSUFBSSxDQUNYLDREQUE0RCxLQUFLLENBQUMsSUFBSSxNQUFNLEVBQzVFLGlDQUFpQyxhQUFhLGNBQWMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxNQUFNLDZEQUE2RCxDQUMxSSxDQUFDO1lBQ0osQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRTtnQkFDbEQsV0FBVyxFQUFFLG9DQUFvQyxLQUFLLENBQUMsSUFBSSxRQUFRO2dCQUNuRSxJQUFJLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUM7YUFDNUIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztJQUNILENBQUM7SUFFRDs7T0FFRztJQUNJLHlCQUF5QixDQUFDLE1BQXdCO1FBQ3ZELE9BQU87Ozs7O2lEQUtzQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFDLENBQUMsV0FBVzs7UUFFaEgsQ0FBQztJQUNQLENBQUM7SUFFRDs7T0FFRztJQUNJLHlCQUF5QjtRQUM5QixNQUFNLE9BQU8sR0FBYSxFQUFFLENBQUM7UUFFN0IsT0FBTyxDQUFDLElBQUksQ0FBQywwQ0FBMEMsQ0FBQyxDQUFDO1FBQ3pELE9BQU8sQ0FBQyxJQUFJLENBQUMsd0RBQXdELENBQUMsQ0FBQztRQUN2RSxPQUFPLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUM7UUFFMUMsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNJLDJCQUEyQjtRQUNoQyxPQUFPOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBdUpULENBQUM7SUFDRCxDQUFDOztBQWp3Qkgsa0NBa3dCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAncGF0aCc7XG5pbXBvcnQgeyBDb21wb25lbnQsIFRleHRGaWxlLCBhd3NjZGsgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgUFJPSkVOX01BUktFUiB9IGZyb20gJ3Byb2plbi9saWIvY29tbW9uJztcbmltcG9ydCB7IE5vZGVQYWNrYWdlTWFuYWdlciB9IGZyb20gJ3Byb2plbi9saWIvamF2YXNjcmlwdCc7XG5pbXBvcnQgeyBQaXBlbGluZUVuZ2luZSB9IGZyb20gJy4uL2VuZ2luZSc7XG5pbXBvcnQgeyBBd3NBc3N1bWVSb2xlU3RlcCwgUGlwZWxpbmVTdGVwLCBQcm9qZW5TY3JpcHRTdGVwLCBTaW1wbGVDb21tYW5kU3RlcCwgU3RlcFNlcXVlbmNlLCBQbnBtU2V0dXBTdGVwLCBDb3JlcGFja1NldHVwU3RlcCB9IGZyb20gJy4uL3N0ZXBzJztcbmltcG9ydCB7IFZlcnNpb25pbmdDb25maWcsIFZlcnNpb25pbmdTZXR1cCB9IGZyb20gJy4uL3ZlcnNpb25pbmcnO1xuXG4vKipcbiAqIFRoZSBFbnZpcm9ubWVudCBpbnRlcmZhY2UgaXMgZGVzaWduZWQgdG8gaG9sZCBBV1MgcmVsYXRlZCBpbmZvcm1hdGlvblxuICogZm9yIGEgc3BlY2lmaWMgZGVwbG95bWVudCBlbnZpcm9ubWVudCB3aXRoaW4geW91ciBpbmZyYXN0cnVjdHVyZS5cbiAqIEVhY2ggZW52aXJvbm1lbnQgcmVxdWlyZXMgYSBzcGVjaWZpYyBhY2NvdW50IGFuZCByZWdpb24gZm9yIGl0cyByZXNvdXJjZXMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRW52aXJvbm1lbnQge1xuICAvKipcbiAgICogVGhlIEFXUyBBY2NvdW50IElEIGFzc29jaWF0ZWQgd2l0aCB0aGUgZW52aXJvbm1lbnQuIEl0J3MgaW1wb3J0YW50IGJlY2F1c2VcbiAgICogZGlmZmVyZW50IHNlcnZpY2VzIG9yIGZlYXR1cmVzIGNvdWxkIGhhdmUgZGlzdGluY3QgcGVybWlzc2lvbnMgYW5kIHNldHRpbmdzXG4gICAqIGluIGRpZmZlcmVudCBhY2NvdW50cy5cbiAgICovXG4gIHJlYWRvbmx5IGFjY291bnQ6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEFXUyBSZWdpb24gZm9yIHRoZSBlbnZpcm9ubWVudC4gVGhpcyBkZXRlcm1pbmVzIHdoZXJlIHlvdXIgcmVzb3VyY2VzXG4gICAqIGFyZSBjcmVhdGVkIGFuZCB3aGVyZSB5b3VyIGFwcGxpY2F0aW9uIHdpbGwgcnVuLiBJdCBjYW4gYWZmZWN0IGxhdGVuY3ksXG4gICAqIGF2YWlsYWJpbGl0eSwgYW5kIHByaWNpbmcuXG4gICAqL1xuICByZWFkb25seSByZWdpb246IHN0cmluZztcbn1cblxuLy8gLyoqXG4vLyAgKiBEZXNjcmliZXMgdGhlIHR5cGUgb2YgcGlwZWxpbmUgdGhhdCB3aWxsIGJlIGNyZWF0ZWRcbi8vICAqL1xuLy8gZXhwb3J0IGVudW0gRGVwbG95bWVudFR5cGUge1xuLy8gICAvKiogRGVwbG95IGV2ZXJ5IGNvbW1pdCBhcyBmYXIgYXMgcG9zc2libGU7IGhvcGVmdWxseSBpbnRvIHByb2R1Y3Rpb24gKi9cbi8vICAgQ09OVElOVU9VU19ERVBMT1lNRU5ULFxuLy8gICAvKiogQnVpbGQgZXZlcnkgY29tbWl0IGFuZCBwcmVwYXJlIGFsbCBhc3NldHMgZm9yIGEgbGF0ZXIgZGVwbG95bWVudCAqL1xuLy8gICBDT05USU5VT1VTX0RFTElWRVJZLFxuLy8gfVxuXG5leHBvcnQgZW51bSBDZGtEaWZmVHlwZSB7XG4gIC8qKiBEbyBub3QgcGVyZm9ybSBhIGRpZmYgKi9cbiAgTk9ORSxcbiAgLyoqIFBlcmZvcm0gYSBmYXN0IHRlbXBsYXRlIGRpZmYgKC0tbm8tY2hhbmdlc2V0KSAqL1xuICBGQVNULFxuICAvKiogUGVyZm9ybSBhIGZ1bGwgQ2xvdWRGb3JtYXRpb24gZGlmZiAoLS1jaGFuZ2VzZXQpICovXG4gIEZVTEwsXG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Igc3RhZ2VzIHRoYXQgYXJlIHBhcnQgb2YgdGhlIHBpcGVsaW5lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVwbG95bWVudFN0YWdlIGV4dGVuZHMgTmFtZWRTdGFnZU9wdGlvbnMge1xuICByZWFkb25seSBtYW51YWxBcHByb3ZhbD86IGJvb2xlYW47XG59XG5cbi8qKlxuICogT3B0aW9ucyBmb3Igc3RhZ2VzIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSBwaXBlbGluZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEluZGVwZW5kZW50U3RhZ2UgZXh0ZW5kcyBOYW1lZFN0YWdlT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGlzIHNwZWNpZmllcyB3aGV0aGVyIHRoZSBzdGFnZSBzaG91bGQgYmUgZGVwbG95ZWQgb24gcHVzaFxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVwbG95T25QdXNoPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBhIENESyBzdGFnZSB3aXRoIGEgbmFtZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIE5hbWVkU3RhZ2VPcHRpb25zIGV4dGVuZHMgU3RhZ2VPcHRpb25zIHtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgR2l0SHViIGVudmlyb25tZW50IHRvIHVzZSBmb3IgdGhpcyBzdGFnZS5cbiAgICogSWYgbm90IHNwZWNpZmllZCwgdGhlIHN0YWdlIG5hbWUgd2lsbCBiZSB1c2VkIGFzIHRoZSBHaXRIdWIgZW52aXJvbm1lbnQgbmFtZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSB0aGUgc3RhZ2UgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgZ2l0aHViRW52aXJvbm1lbnQ/OiBzdHJpbmc7XG5cbiAgcmVhZG9ubHkgd2F0Y2hhYmxlPzogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZGlmZlR5cGU/OiBDZGtEaWZmVHlwZTtcbiAgcmVhZG9ubHkgcG9zdERpZmZTdGVwcz86IFBpcGVsaW5lU3RlcFtdO1xuICByZWFkb25seSBwb3N0RGVwbG95U3RlcHM/OiBQaXBlbGluZVN0ZXBbXTtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBhIENESyBzdGFnZSBsaWtlIHRoZSB0YXJnZXQgZW52aXJvbm1lbnRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTdGFnZU9wdGlvbnMge1xuICByZWFkb25seSBlbnY6IEVudmlyb25tZW50O1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gaW50ZXJmYWNlIGZvciBJQU0gcm9sZXMgdXNlZCBpbiB0aGUgQ0RLIHBpcGVsaW5lLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElhbVJvbGVDb25maWcge1xuICAvKiogRGVmYXVsdCBJQU0gcm9sZSBBUk4gdXNlZCBpZiBubyBzcGVjaWZpYyByb2xlIGlzIHByb3ZpZGVkLiAqL1xuICByZWFkb25seSBkZWZhdWx0Pzogc3RyaW5nO1xuICAvKiogSUFNIHJvbGUgQVJOIGZvciB0aGUgc3ludGhlc2lzIHN0ZXAuICovXG4gIHJlYWRvbmx5IHN5bnRoPzogc3RyaW5nO1xuICAvKiogSUFNIHJvbGUgQVJOIGZvciB0aGUgYXNzZXQgcHVibGlzaGluZyBzdGVwLiAqL1xuICByZWFkb25seSBhc3NldFB1Ymxpc2hpbmc/OiBzdHJpbmc7XG4gIC8qKiBJQU0gcm9sZSBBUk4gZm9yIHRoZSBhc3NldCBwdWJsaXNoaW5nIHN0ZXAgZm9yIGEgc3BlY2lmaWMgc3RhZ2UuICovXG4gIHJlYWRvbmx5IGFzc2V0UHVibGlzaGluZ1BlclN0YWdlPzogeyBbc3RhZ2U6IHN0cmluZ106IHN0cmluZyB9O1xuICAvKiogSUFNIHJvbGUgQVJOcyBmb3IgZGlmZmVyZW50IGRpZmYgc3RhZ2VzLiAqL1xuICByZWFkb25seSBkaWZmPzogeyBbc3RhZ2U6IHN0cmluZ106IHN0cmluZyB9O1xuICAvKiogSUFNIHJvbGUgQVJOcyBmb3IgZGlmZmVyZW50IGRlcGxveW1lbnQgc3RhZ2VzLiAqL1xuICByZWFkb25seSBkZXBsb3ltZW50PzogeyBbc3RhZ2U6IHN0cmluZ106IHN0cmluZyB9O1xuICAvKipcbiAgICogSUFNIHJvbGUgQVJOcyBmb3IgdXNpbmcgYSBcImp1bXBcIiByb2xlIHRvIGFzc3VtZSB0aGUgZGVwbG95IHJvbGUgaW4gYSBkaWZmZXJlbnQgQVdTIGFjY291bnQgdXNpbmcgUm9sZSBDaGFpbmluZy5cbiAgICogaHR0cHM6Ly9naXRodWIuY29tL2F3cy1hY3Rpb25zL2NvbmZpZ3VyZS1hd3MtY3JlZGVudGlhbHM/dGFiPXJlYWRtZS1vdi1maWxlI2Fzc3VtZXJvbGUtd2l0aC1yb2xlLXByZXZpb3VzbHktYXNzdW1lZC1ieS1hY3Rpb24taW4tc2FtZS13b3JrZmxvd1xuICAgKiAqL1xuICByZWFkb25seSBqdW1wPzogeyBbc3RhZ2U6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG4vKipcbiAqIFRoZSBDREtQaXBlbGluZU9wdGlvbnMgaW50ZXJmYWNlIGlzIGRlc2lnbmVkIHRvIHByb3ZpZGUgY29uZmlndXJhdGlvblxuICogb3B0aW9ucyBmb3IgYSBDREsgKENsb3VkIERldmVsb3BtZW50IEtpdCkgcGlwZWxpbmUuIEl0IGFsbG93cyB0aGUgZGVmaW5pdGlvblxuICogb2Ygc2V0dGluZ3Mgc3VjaCBhcyB0aGUgc3RhY2sgcHJlZml4IGFuZCBwYWNrYWdlIG5hbWVzcGFjZSB0byBiZSB1c2VkIGluIHRoZVxuICogQVdTIHN0YWNrLCBhbG9uZyB3aXRoIHRoZSBlbnZpcm9ubWVudHMgY29uZmlndXJhdGlvbiB0byBiZSB1c2VkLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENES1BpcGVsaW5lT3B0aW9ucyB7XG5cbiAgLyoqXG4gICAqIEEgdW5pcXVlIG5hbWUgZm9yIHRoaXMgcGlwZWxpbmUsIHVzZWQgYXMgYSBwcmVmaXggZm9yIHdvcmtmbG93IGZpbGVzLFxuICAgKiBjb25jdXJyZW5jeSBncm91cHMsIGFuZCBhcnRpZmFjdCBuYW1lcyB0byBwcmV2ZW50IGNvbGxpc2lvbnMgaW4gbW9ub3JlcG9zLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBwcm9qZWN0IG5hbWUgaWYgdGhlIHByb2plY3QgaGFzIGEgcGFyZW50IChtb25vcmVwbyBzdWJwcm9qZWN0KSwgb3RoZXJ3aXNlIG5vIHByZWZpeFxuICAgKi9cbiAgcmVhZG9ubHkgcGlwZWxpbmVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiB0aGUgbmFtZSBvZiB0aGUgYnJhbmNoIHRvIGRlcGxveSBmcm9tXG4gICAqIEBkZWZhdWx0IG1haW5cbiAgICovXG4gIHJlYWRvbmx5IGJyYW5jaE5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEZpbGUgcGF0aCBwYXR0ZXJucyB0aGF0IHNob3VsZCB0cmlnZ2VyIHRoZSBwaXBlbGluZSB3aGVuIGNoYW5nZWQuXG4gICAqIFRoaXMgaXMgdXNlZnVsIGZvciBtb25vcmVwb3Mgd2hlcmUgeW91IG9ubHkgd2FudCB0byBydW4gdGhlIHBpcGVsaW5lXG4gICAqIHdoZW4gZmlsZXMgaW4gYSBzcGVjaWZpYyBzdWJwcm9qZWN0IGFyZSBtb2RpZmllZC5cbiAgICpcbiAgICogRm9yIEdpdEh1YiwgdGhlc2UgYXJlIHVzZWQgYXMgYG9uLnB1c2gucGF0aHNgIGFuZCBgb24ucHVsbF9yZXF1ZXN0LnBhdGhzYCBmaWx0ZXJzLlxuICAgKiBGb3IgR2l0TGFiLCB0aGVzZSBhcmUgdXNlZCBhcyBgb25seS5jaGFuZ2VzYCBmaWx0ZXJzLlxuICAgKlxuICAgKiBAZXhhbXBsZSBbJ3BhY2thZ2VzL215LWFwcC8qKicsICdzaGFyZWQtbGlicy8qKiddXG4gICAqIEBkZWZhdWx0IC0gYWxsIHBhdGhzIHRyaWdnZXIgdGhlIHBpcGVsaW5lXG4gICAqL1xuICByZWFkb25seSBwYXRocz86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBUaGlzIGZpZWxkIGlzIHVzZWQgdG8gZGVmaW5lIGEgcHJlZml4IGZvciB0aGUgQVdTIFN0YWNrIHJlc291cmNlcyBjcmVhdGVkXG4gICAqIGR1cmluZyB0aGUgcGlwZWxpbmUncyBvcGVyYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IHByb2plY3QgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tQcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIElmIHNldCB0byB0cnVlIGFsbCBDREsgYWN0aW9ucyB3aWxsIGFsc28gaW5jbHVkZSA8c3RhY2tOYW1lPi8qIHRvIGRlcGxveS9kaWZmL2Rlc3Ryb3kgc3ViIHN0YWNrcyBvZiB0aGUgbWFpbiBzdGFjay5cbiAgICogWW91IGNhbiB1c2UgdGhpcyB0byBkZXBsb3kgQ0RrIGFwcGxpY2F0aW9ucyBjb250YWluaW5nIG11bHRpcGxlIHN0YWNrcy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGRlcGxveVN1YlN0YWNrcz86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoaXMgZmllbGQgZGV0ZXJtaW5lcyB0aGUgTlBNIG5hbWVzcGFjZSB0byBiZSB1c2VkIHdoZW4gcGFja2FnaW5nIENESyBjbG91ZFxuICAgKiBhc3NlbWJsaWVzLiBBIG5hbWVzcGFjZSBoZWxwcyBncm91cCByZWxhdGVkIHJlc291cmNlcyB0b2dldGhlciwgcHJvdmlkaW5nXG4gICAqIGJldHRlciBvcmdhbml6YXRpb24gYW5kIGVhc2Ugb2YgbWFuYWdlbWVudC5cbiAgICpcbiAgICogVGhpcyBpcyBvbmx5IG5lZWRlZCBpZiB5b3UgbmVlZCB0byB2ZXJzaW9uIGFuZCB1cGxvYWQgdGhlIGNsb3VkIGFzc2VtYmx5IHRvIGEgcGFja2FnZSByZXBvc2l0b3J5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtXG4gICAqL1xuICByZWFkb25seSBwa2dOYW1lc3BhY2U/OiBzdHJpbmc7XG5cbiAgLyoqIElBTSBjb25maWcgKi9cbiAgcmVhZG9ubHkgaWFtUm9sZUFybnM6IElhbVJvbGVDb25maWc7XG5cbiAgLyoqXG4gICAqIFRoaXMgZmllbGQgc3BlY2lmaWVzIGEgbGlzdCBvZiBzdGFnZXMgdGhhdCBzaG91bGQgYmUgZGVwbG95ZWQgdXNpbmcgYSBDSS9DRCBwaXBlbGluZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2VzOiBEZXBsb3ltZW50U3RhZ2VbXTtcblxuICAvKiogVGhpcyBzcGVjaWZpZXMgZGV0YWlscyBmb3IgaW5kZXBlbmRlbnQgc3RhZ2VzICovXG4gIHJlYWRvbmx5IGluZGVwZW5kZW50U3RhZ2VzPzogSW5kZXBlbmRlbnRTdGFnZVtdO1xuXG4gIC8qKiBUaGlzIHNwZWNpZmllcyBkZXRhaWxzIGZvciBhIHBlcnNvbmFsIHN0YWdlICovXG4gIHJlYWRvbmx5IHBlcnNvbmFsU3RhZ2U/OiBTdGFnZU9wdGlvbnM7XG5cbiAgLyoqIFRoaXMgc3BlY2lmaWVzIGRldGFpbHMgZm9yIGZlYXR1cmUgc3RhZ2VzICovXG4gIHJlYWRvbmx5IGZlYXR1cmVTdGFnZXM/OiBTdGFnZU9wdGlvbnM7XG5cbiAgLy8gLyoqXG4gIC8vICAqIFRoaXMgZmllbGQgc3BlY2lmaWVzIHRoZSB0eXBlIG9mIHBpcGVsaW5lIHRvIGNyZWF0ZS4gSWYgc2V0IHRvIENPTlRJTlVPVVNfREVQTE9ZTUVOVCxcbiAgLy8gICogZXZlcnkgY29tbWl0IGlzIGRlcGxveWVkIGFzIGZhciBhcyBwb3NzaWJsZSwgaG9wZWZ1bGx5IGludG8gcHJvZHVjdGlvbi4gSWYgc2V0IHRvXG4gIC8vICAqIENPTlRJTlVPVVNfREVMSVZFUlksIGV2ZXJ5IGNvbW1pdCBpcyBidWlsdCBhbmQgYWxsIGFzc2V0cyBhcmUgcHJlcGFyZWQgZm9yIGEgbGF0ZXIgZGVwbG95bWVudC5cbiAgLy8gICpcbiAgLy8gICogQGRlZmF1bHQgQ09OVElOVU9VU19ERUxJVkVSWVxuICAvLyAgKi9cbiAgLy8gcmVhZG9ubHkgZGVwbG95bWVudFR5cGU/OiBEZXBsb3ltZW50VHlwZTtcblxuICByZWFkb25seSBwcmVJbnN0YWxsQ29tbWFuZHM/OiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgcHJlU3ludGhDb21tYW5kcz86IHN0cmluZ1tdO1xuICByZWFkb25seSBwb3N0U3ludGhDb21tYW5kcz86IHN0cmluZ1tdO1xuXG4gIHJlYWRvbmx5IHByZUluc3RhbGxTdGVwcz86IFBpcGVsaW5lU3RlcFtdO1xuICByZWFkb25seSBwcmVTeW50aFN0ZXBzPzogUGlwZWxpbmVTdGVwW107XG4gIHJlYWRvbmx5IHBvc3RTeW50aFN0ZXBzPzogUGlwZWxpbmVTdGVwW107XG5cbiAgLyoqXG4gICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBmb3IgdGhlIHBpcGVsaW5lIHJlbGF0aXZlIHRvIHRoZSByZXBvc2l0b3J5IHJvb3QuXG4gICAqIFRoaXMgaXMgYXV0b21hdGljYWxseSBjb21wdXRlZCBmb3Igc3VicHJvamVjdHMgYnV0IGNhbiBiZSBleHBsaWNpdGx5IHNldC5cbiAgICpcbiAgICogV2hlbiBzZXQsIENJIGpvYnMgd2lsbCBydW4gY29tbWFuZHMgaW4gdGhpcyBkaXJlY3RvcnksIGFuZCBhcnRpZmFjdCBwYXRoc1xuICAgKiB3aWxsIGJlIHByZWZpeGVkIGFjY29yZGluZ2x5LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGF1dG9tYXRpY2FsbHkgY29tcHV0ZWQgZnJvbSB0aGUgcHJvamVjdCdzIHBvc2l0aW9uIGluIHRoZSBtb25vcmVwbyAoZW1wdHkgc3RyaW5nIGZvciByb290IHByb2plY3RzKVxuICAgKi9cbiAgcmVhZG9ubHkgd29ya2luZ0RpcmVjdG9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogQSBjb21tYW5kIHRvIHJ1biBiZWZvcmUgdGhlIGJ1aWxkIHN0ZXAsIGV4ZWN1dGVkIGZyb20gdGhlIHJlcG9zaXRvcnkgcm9vdC5cbiAgICogV2hlbiBhIHdvcmtpbmdEaXJlY3RvcnkgaXMgc2V0IChtb25vcmVwbyBzdWJwcm9qZWN0KSwgdGhlIGNvbW1hbmQgaXNcbiAgICogYXV0b21hdGljYWxseSB3cmFwcGVkIHRvIGV4ZWN1dGUgZnJvbSB0aGUgcmVwb3NpdG9yeSByb290IHJlZ2FyZGxlc3Mgb2ZcbiAgICogdGhlIGpvYidzIHdvcmtpbmcgZGlyZWN0b3J5IHNldHRpbmcuXG4gICAqXG4gICAqIEZvciBwbnBtIHdvcmtzcGFjZXM6IGBwbnBtIC1yIC0tZmlsdGVyIDxhcHBuYW1lPl4uLi4gcnVuIGJ1aWxkYFxuICAgKiBGb3IgbnBtIHdvcmtzcGFjZXM6IGBucG0gcnVuIGJ1aWxkIC0td29ya3NwYWNlcyAtLWlmLXByZXNlbnRgXG4gICAqIEZvciB5YXJuIHdvcmtzcGFjZXM6IGB5YXJuIHdvcmtzcGFjZXMgZm9yZWFjaCAtUnQgcnVuIGJ1aWxkYFxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIHByZS1idWlsZCBjb21tYW5kXG4gICAqL1xuICByZWFkb25seSBwcmVCdWlsZENvbW1hbmQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFZlcnNpb25pbmcgY29uZmlndXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbmluZz86IFZlcnNpb25pbmdDb25maWc7XG59XG5cbi8qKlxuICogVGhlIENES1BpcGVsaW5lIGNsYXNzIGV4dGVuZHMgdGhlIENvbXBvbmVudCBjbGFzcyBhbmQgc2V0cyB1cCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gZm9yIGRlcGxveWluZyBBV1MgQ0RLIChDbG91ZCBEZXZlbG9wbWVudCBLaXQpIGFwcGxpY2F0aW9ucyBhY3Jvc3MgbXVsdGlwbGUgc3RhZ2VzLlxuICogSXQgYWxzbyBtYW5hZ2VzIHRhc2tzIHN1Y2ggYXMgcHVibGlzaGluZyBDREsgYXNzZXRzLCBidW1waW5nIHZlcnNpb24gYmFzZWQgb24gZ2l0IHRhZ3MsIGFuZCBjbGVhbmluZyB1cCBjb25mbGljdGluZyB0YXNrcy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENES1BpcGVsaW5lIGV4dGVuZHMgQ29tcG9uZW50IHtcbiAgcHVibGljIHJlYWRvbmx5IHN0YWNrUHJlZml4OiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBicmFuY2hOYW1lOiBzdHJpbmc7XG5cbiAgLyoqIFByZWZpeCBmb3Igd29ya2Zsb3cgZmlsZXMsIGNvbmN1cnJlbmN5IGdyb3VwcywgYW5kIGFydGlmYWN0IG5hbWVzIHRvIHByZXZlbnQgY29sbGlzaW9ucyBpbiBtb25vcmVwb3MuICovXG4gIHByb3RlY3RlZCByZWFkb25seSBuYW1lUHJlZml4OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSByZWxhdGl2ZSB0byB0aGUgcmVwb3NpdG9yeSByb290IGZvciB0aGlzIHBpcGVsaW5lLlxuICAgKiBVbmRlZmluZWQgd2hlbiB0aGUgcGlwZWxpbmUgaXMgYXQgdGhlIHJlcG9zaXRvcnkgcm9vdC5cbiAgICovXG4gIHByb3RlY3RlZCByZWFkb25seSB3b3JraW5nRGlyZWN0b3J5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIGFwcDogYXdzY2RrLkF3c0Nka1R5cGVTY3JpcHRBcHAsIHByb3RlY3RlZCBiYXNlT3B0aW9uczogQ0RLUGlwZWxpbmVPcHRpb25zKSB7XG4gICAgc3VwZXIoYXBwKTtcblxuICAgIC8vIENvbXB1dGUgd29ya2luZyBkaXJlY3RvcnkgZm9yIG1vbm9yZXBvIHN1cHBvcnRcbiAgICBpZiAoYmFzZU9wdGlvbnMud29ya2luZ0RpcmVjdG9yeSkge1xuICAgICAgdGhpcy53b3JraW5nRGlyZWN0b3J5ID0gYmFzZU9wdGlvbnMud29ya2luZ0RpcmVjdG9yeTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcmVsID0gcGF0aC5yZWxhdGl2ZSh0aGlzLmFwcC5yb290Lm91dGRpciwgdGhpcy5hcHAub3V0ZGlyKS5yZXBsYWNlKC9cXFxcL2csICcvJyk7XG4gICAgICB0aGlzLndvcmtpbmdEaXJlY3RvcnkgPSByZWwgfHwgdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIC8vIEFkZCBkZXZlbG9wbWVudCBkZXBlbmRlbmNpZXNcbiAgICB0aGlzLmFwcC5hZGREZXZEZXBzKFxuICAgICAgJ2NvbW1pdC1hbmQtdGFnLXZlcnNpb24nLFxuICAgICAgJ2Nkay1hc3NldHMnLFxuICAgICk7XG4gICAgLy8gdGhpcy5hcHAuYWRkRGVwcyhcbiAgICAvLyApO1xuICAgIHRoaXMucHJvamVjdC5naXRpZ25vcmUuZXhjbHVkZSgnL2Nkay1vdXRwdXRzLSouanNvbicpO1xuXG4gICAgY29uc3QgcGlwZWxpbmVOYW1lID0gYmFzZU9wdGlvbnMucGlwZWxpbmVOYW1lID8/IChhcHAucGFyZW50ID8gYXBwLm5hbWUgOiB1bmRlZmluZWQpO1xuICAgIHRoaXMubmFtZVByZWZpeCA9IHBpcGVsaW5lTmFtZSA/IGAke3BpcGVsaW5lTmFtZX0tYCA6ICcnO1xuICAgIHRoaXMuc3RhY2tQcmVmaXggPSBiYXNlT3B0aW9ucy5zdGFja1ByZWZpeCA/PyBhcHAubmFtZTtcbiAgICB0aGlzLmJyYW5jaE5hbWUgPSBiYXNlT3B0aW9ucy5icmFuY2hOYW1lID8/ICdtYWluJzsgLy8gVE9ETyB1c2UgZGVmYXVsdFJlbGVhc2VCcmFuY2ggb2YgTm9kZVByb2plY3RcblxuICAgIC8vIFJlbW92ZXMgdGhlIGNvbXBpbGVkIGNsb3VkIGFzc2VtYmx5IGJlZm9yZSBlYWNoIHN5bnRoXG4gICAgdGhpcy5wcm9qZWN0LnRhc2tzLnRyeUZpbmQoJ3N5bnRoJyk/LnByZXBlbmRFeGVjKGBybSAtcmYgJHt0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0fWApO1xuICAgIHRoaXMucHJvamVjdC50YXNrcy50cnlGaW5kKCdzeW50aDpzaWxlbnQnKT8ucHJlcGVuZEV4ZWMoYHJtIC1yZiAke3RoaXMuYXBwLmNka0NvbmZpZy5jZGtvdXR9YCk7XG5cbiAgICAvLyBSZW1vdmUgdGFza3MgdGhhdCBtaWdodCBjb25mbGljdCB3aXRoIHRoZSBwaXBlbGluZSBwcm9jZXNzXG4gICAgdGhpcy5wcm9qZWN0LnJlbW92ZVRhc2soJ2RlcGxveScpO1xuICAgIHRoaXMucHJvamVjdC5yZW1vdmVUYXNrKCdkaWZmJyk7XG4gICAgdGhpcy5wcm9qZWN0LnJlbW92ZVRhc2soJ2Rlc3Ryb3knKTtcbiAgICB0aGlzLnByb2plY3QucmVtb3ZlVGFzaygnd2F0Y2gnKTtcblxuICAgIC8vIFNldHVwIHZlcnNpb25pbmcgaWYgZW5hYmxlZFxuICAgIGlmIChiYXNlT3B0aW9ucy52ZXJzaW9uaW5nPy5lbmFibGVkKSB7XG4gICAgICBuZXcgVmVyc2lvbmluZ1NldHVwKHRoaXMucHJvamVjdCwgYmFzZU9wdGlvbnMudmVyc2lvbmluZykuc2V0dXAoKTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGVzIGRpZmZlcmVudCBkZXBsb3ltZW50IHN0YWdlc1xuICAgIGlmIChiYXNlT3B0aW9ucy5wZXJzb25hbFN0YWdlKSB7XG4gICAgICB0aGlzLmNyZWF0ZVBlcnNvbmFsU3RhZ2UoKTtcbiAgICB9XG4gICAgaWYgKGJhc2VPcHRpb25zLmZlYXR1cmVTdGFnZXMpIHtcbiAgICAgIHRoaXMuY3JlYXRlRmVhdHVyZVN0YWdlKCk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc3RhZ2Ugb2YgYmFzZU9wdGlvbnMuc3RhZ2VzKSB7XG4gICAgICB0aGlzLmNyZWF0ZVBpcGVsaW5lU3RhZ2Uoc3RhZ2UpO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IHN0YWdlIG9mIChiYXNlT3B0aW9ucy5pbmRlcGVuZGVudFN0YWdlcyA/PyBbXSkpIHtcbiAgICAgIHRoaXMuY3JlYXRlSW5kZXBlbmRlbnRTdGFnZShzdGFnZSk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlcyB0YXNrcyB0byBoYW5kbGUgdGhlIHJlbGVhc2UgcHJvY2Vzc1xuICAgIHRoaXMuY3JlYXRlUmVsZWFzZVRhc2tzKCk7XG5cbiAgICAvLyBDcmVhdGVzIGEgc3BlY2lhbGl6ZWQgQ0RLIEFwcCBjbGFzc1xuICAgIHRoaXMuY3JlYXRlQXBwbGljYXRpb25FbnRyeXBvaW50KCk7XG5cbiAgfVxuXG4gIHB1YmxpYyBhYnN0cmFjdCBlbmdpbmVUeXBlKCk6IFBpcGVsaW5lRW5naW5lO1xuXG4gIHByb3RlY3RlZCBwcm92aWRlSW5zdGFsbFN0ZXAoKTogUGlwZWxpbmVTdGVwIHtcbiAgICBjb25zdCBzZXEgPSBuZXcgU3RlcFNlcXVlbmNlKHRoaXMucHJvamVjdCwgdGhpcy5iYXNlT3B0aW9ucy5wcmVJbnN0YWxsU3RlcHMgPz8gW10pO1xuXG4gICAgLy8gRGV0ZWN0IGFuZCBhZGQgcG5wbSBzZXR1cCBpZiBuZWVkZWQgKEdpdEh1YiBvbmx5KVxuICAgIGlmICh0aGlzLmFwcC5wYWNrYWdlLnBhY2thZ2VNYW5hZ2VyID09PSBOb2RlUGFja2FnZU1hbmFnZXIuUE5QTSAmJiB0aGlzLmVuZ2luZVR5cGUoKSA9PT0gUGlwZWxpbmVFbmdpbmUuR0lUSFVCKSB7XG4gICAgICBzZXEuYWRkU3RlcHMobmV3IFBucG1TZXR1cFN0ZXAodGhpcy5wcm9qZWN0LCB7XG4gICAgICAgIHZlcnNpb246ICh0aGlzLmFwcC5wYWNrYWdlIGFzIGFueSkucG5wbVZlcnNpb24sXG4gICAgICB9KSk7XG4gICAgfVxuXG4gICAgLy8gRGV0ZWN0IGFuZCBhZGQgY29yZXBhY2sgZW5hYmxlIGZvciBZYXJuIEJlcnJ5XG4gICAgaWYgKHRoaXMuYXBwLnBhY2thZ2UucGFja2FnZU1hbmFnZXIgPT09IE5vZGVQYWNrYWdlTWFuYWdlci5ZQVJOX0JFUlJZKSB7XG4gICAgICBzZXEuYWRkU3RlcHMobmV3IENvcmVwYWNrU2V0dXBTdGVwKHRoaXMucHJvamVjdCkpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmJhc2VPcHRpb25zLnByZUluc3RhbGxDb21tYW5kcykge1xuICAgICAgc2VxLmFkZFN0ZXBzKG5ldyBTaW1wbGVDb21tYW5kU3RlcCh0aGlzLnByb2plY3QsIHRoaXMuYmFzZU9wdGlvbnMucHJlSW5zdGFsbENvbW1hbmRzKSk7XG4gICAgfVxuICAgIHNlcS5hZGRTdGVwcyhuZXcgU2ltcGxlQ29tbWFuZFN0ZXAodGhpcy5wcm9qZWN0LCBbdGhpcy5hcHAucGFja2FnZS5pbnN0YWxsQ29tbWFuZF0pKTtcbiAgICByZXR1cm4gc2VxO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb3ZpZGVTeW50aFN0ZXAoKTogUGlwZWxpbmVTdGVwIHtcbiAgICBjb25zdCBzZXEgPSBuZXcgU3RlcFNlcXVlbmNlKHRoaXMucHJvamVjdCwgW10pO1xuXG4gICAgaWYgKHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnM/LnN5bnRoKSB7XG4gICAgICBzZXEuYWRkU3RlcHMobmV3IEF3c0Fzc3VtZVJvbGVTdGVwKHRoaXMucHJvamVjdCwge1xuICAgICAgICByb2xlQXJuOiB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zLnN5bnRoLFxuICAgICAgICBqdW1wUm9sZUFybjogdGhpcy5iYXNlT3B0aW9ucy5pYW1Sb2xlQXJucy5qdW1wPy5zeW50aCxcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBzZXEuYWRkU3RlcHMoLi4udGhpcy5iYXNlT3B0aW9ucy5wcmVTeW50aFN0ZXBzID8/IFtdKTtcbiAgICBpZiAodGhpcy5iYXNlT3B0aW9ucy5wcmVTeW50aENvbW1hbmRzKSB7XG4gICAgICBzZXEuYWRkU3RlcHMobmV3IFNpbXBsZUNvbW1hbmRTdGVwKHRoaXMucHJvamVjdCwgdGhpcy5iYXNlT3B0aW9ucy5wcmVTeW50aENvbW1hbmRzKSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYmFzZU9wdGlvbnMucHJlQnVpbGRDb21tYW5kKSB7XG4gICAgICBzZXEuYWRkU3RlcHMobmV3IFNpbXBsZUNvbW1hbmRTdGVwKHRoaXMucHJvamVjdCwgW3RoaXMucHJlQnVpbGRDb21tYW5kV3JhcHBlZCgpXSkpO1xuICAgIH1cblxuICAgIHNlcS5hZGRTdGVwcyhuZXcgUHJvamVuU2NyaXB0U3RlcCh0aGlzLnByb2plY3QsICdidWlsZCcpKTtcblxuICAgIHNlcS5hZGRTdGVwcyguLi50aGlzLmJhc2VPcHRpb25zLnBvc3RTeW50aFN0ZXBzID8/IFtdKTtcbiAgICBpZiAodGhpcy5iYXNlT3B0aW9ucy5wb3N0U3ludGhDb21tYW5kcykge1xuICAgICAgc2VxLmFkZFN0ZXBzKG5ldyBTaW1wbGVDb21tYW5kU3RlcCh0aGlzLnByb2plY3QsIHRoaXMuYmFzZU9wdGlvbnMucG9zdFN5bnRoQ29tbWFuZHMpKTtcbiAgICB9XG4gICAgcmV0dXJuIHNlcTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBwcmVCdWlsZENvbW1hbmQgd3JhcHBlZCB0byBleGVjdXRlIGZyb20gdGhlIHJlcG9zaXRvcnkgcm9vdC5cbiAgICogV2hlbiB3b3JraW5nRGlyZWN0b3J5IGlzIHNldCwgdGhlIGNvbW1hbmQgaXMgcHJlZml4ZWQgd2l0aCBhIGNkIHRvIHRoZVxuICAgKiByZXBvIHJvb3QgdXNpbmcgZW5naW5lLWFwcHJvcHJpYXRlIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAgICovXG4gIHByaXZhdGUgcHJlQnVpbGRDb21tYW5kV3JhcHBlZCgpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNtZCA9IHRoaXMuYmFzZU9wdGlvbnMucHJlQnVpbGRDb21tYW5kITtcbiAgICBpZiAoIXRoaXMud29ya2luZ0RpcmVjdG9yeSkge1xuICAgICAgcmV0dXJuIGNtZDtcbiAgICB9XG4gICAgc3dpdGNoICh0aGlzLmVuZ2luZVR5cGUoKSkge1xuICAgICAgY2FzZSBQaXBlbGluZUVuZ2luZS5HSVRIVUI6XG4gICAgICAgIHJldHVybiBgY2QgJEdJVEhVQl9XT1JLU1BBQ0UgJiYgJHtjbWR9YDtcbiAgICAgIGNhc2UgUGlwZWxpbmVFbmdpbmUuR0lUTEFCOlxuICAgICAgICByZXR1cm4gYChjZCAkQ0lfUFJPSkVDVF9ESVIgJiYgJHtjbWR9KWA7XG4gICAgICBjYXNlIFBpcGVsaW5lRW5naW5lLkJBU0g6XG4gICAgICAgIHJldHVybiBgKGNkIFwiJChnaXQgcmV2LXBhcnNlIC0tc2hvdy10b3BsZXZlbClcIiAmJiAke2NtZH0pYDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiBjbWQ7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIHByb3ZpZGVBc3NldFVwbG9hZFN0ZXAoc3RhZ2VOYW1lPzogc3RyaW5nKTogUGlwZWxpbmVTdGVwIHtcbiAgICBjb25zdCBzZXEgPSBuZXcgU3RlcFNlcXVlbmNlKHRoaXMucHJvamVjdCwgW10pO1xuXG4gICAgY29uc3QgZ2xvYmFsUHVibGlzaFJvbGUgPSB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zLmFzc2V0UHVibGlzaGluZyA/PyB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zLmRlZmF1bHQhO1xuICAgIGlmIChzdGFnZU5hbWUpIHtcbiAgICAgIHNlcS5hZGRTdGVwcyhuZXcgQXdzQXNzdW1lUm9sZVN0ZXAodGhpcy5wcm9qZWN0LCB7XG4gICAgICAgIHJvbGVBcm46IHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnMuYXNzZXRQdWJsaXNoaW5nUGVyU3RhZ2UgP1xuICAgICAgICAgICh0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zLmFzc2V0UHVibGlzaGluZ1BlclN0YWdlW3N0YWdlTmFtZV0gPz8gZ2xvYmFsUHVibGlzaFJvbGUpIDpcbiAgICAgICAgICBnbG9iYWxQdWJsaXNoUm9sZSxcbiAgICAgICAganVtcFJvbGVBcm46IHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnMuanVtcD8uW3N0YWdlTmFtZV0sXG4gICAgICB9KSk7XG4gICAgICBzZXEuYWRkU3RlcHMobmV3IFByb2plblNjcmlwdFN0ZXAodGhpcy5wcm9qZWN0LCBgcHVibGlzaDphc3NldHM6JHtzdGFnZU5hbWV9YCkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5iYXNlT3B0aW9ucy5pYW1Sb2xlQXJucy5hc3NldFB1Ymxpc2hpbmdQZXJTdGFnZSkge1xuICAgICAgICBjb25zdCBzdGFnZXMgPSBbLi4udGhpcy5iYXNlT3B0aW9ucy5zdGFnZXMsIC4uLnRoaXMuYmFzZU9wdGlvbnMuaW5kZXBlbmRlbnRTdGFnZXMgPz8gW11dO1xuICAgICAgICBmb3IgKGNvbnN0IHN0YWdlIG9mIHN0YWdlcykge1xuICAgICAgICAgIHNlcS5hZGRTdGVwcyhuZXcgQXdzQXNzdW1lUm9sZVN0ZXAodGhpcy5wcm9qZWN0LCB7XG4gICAgICAgICAgICByb2xlQXJuOiB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zLmFzc2V0UHVibGlzaGluZ1BlclN0YWdlW3N0YWdlLm5hbWVdID8/IGdsb2JhbFB1Ymxpc2hSb2xlLFxuICAgICAgICAgICAganVtcFJvbGVBcm46IHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnMuanVtcD8uW3N0YWdlLm5hbWVdLFxuICAgICAgICAgIH0pKTtcbiAgICAgICAgICBzZXEuYWRkU3RlcHMobmV3IFByb2plblNjcmlwdFN0ZXAodGhpcy5wcm9qZWN0LCBgcHVibGlzaDphc3NldHM6JHtzdGFnZS5uYW1lfWApKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgc2VxLmFkZFN0ZXBzKG5ldyBBd3NBc3N1bWVSb2xlU3RlcCh0aGlzLnByb2plY3QsIHtcbiAgICAgICAgICByb2xlQXJuOiBnbG9iYWxQdWJsaXNoUm9sZSxcbiAgICAgICAgICBqdW1wUm9sZUFybjogdGhpcy5iYXNlT3B0aW9ucy5pYW1Sb2xlQXJucy5qdW1wPy5hc3NldFB1Ymxpc2hpbmcsXG4gICAgICAgIH0pKTtcbiAgICAgICAgc2VxLmFkZFN0ZXBzKG5ldyBQcm9qZW5TY3JpcHRTdGVwKHRoaXMucHJvamVjdCwgJ3B1Ymxpc2g6YXNzZXRzJykpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBzZXE7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvdmlkZUFzc2VtYmx5VXBsb2FkU3RlcCgpOiBQaXBlbGluZVN0ZXAge1xuICAgIGlmICghdGhpcy5iYXNlT3B0aW9ucy5wa2dOYW1lc3BhY2UpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncGtnTmFtZXNwYWNlIGlzIHJlcXVpcmVkIHdoZW4gdXNpbmcgdmVyc2lvbmVkIGFydGlmYWN0cyAoZS5nLiBtYW51YWwgYXBwcm92YWxzKScpO1xuICAgIH1cbiAgICByZXR1cm4gbmV3IFN0ZXBTZXF1ZW5jZSh0aGlzLnByb2plY3QsIFtcbiAgICAgIG5ldyBQcm9qZW5TY3JpcHRTdGVwKHRoaXMucHJvamVjdCwgJ2J1bXAnKSxcbiAgICAgIG5ldyBQcm9qZW5TY3JpcHRTdGVwKHRoaXMucHJvamVjdCwgJ3JlbGVhc2U6cHVzaC1hc3NlbWJseScpLFxuICAgIF0pO1xuICB9XG5cbiAgcHJvdGVjdGVkIHByb3ZpZGVEZXBsb3lTdGVwKHN0YWdlOiBOYW1lZFN0YWdlT3B0aW9ucyk6IFBpcGVsaW5lU3RlcCB7XG4gICAgcmV0dXJuIG5ldyBTdGVwU2VxdWVuY2UodGhpcy5wcm9qZWN0LCBbXG4gICAgICBuZXcgQXdzQXNzdW1lUm9sZVN0ZXAodGhpcy5wcm9qZWN0LCB7XG4gICAgICAgIHJvbGVBcm46IHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnM/LmRlcGxveW1lbnQ/LltzdGFnZS5uYW1lXSA/PyB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zPy5kZWZhdWx0ISxcbiAgICAgICAgcmVnaW9uOiBzdGFnZS5lbnYucmVnaW9uLFxuICAgICAgICBqdW1wUm9sZUFybjogdGhpcy5iYXNlT3B0aW9ucy5pYW1Sb2xlQXJucy5qdW1wPy5bc3RhZ2UubmFtZV0sXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9qZW5TY3JpcHRTdGVwKHRoaXMucHJvamVjdCwgYGRlcGxveToke3N0YWdlLm5hbWV9YCksXG4gICAgICAuLi5zdGFnZS5wb3N0RGVwbG95U3RlcHMgPz8gW10sXG4gICAgXSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvdmlkZURpZmZTdGVwKHN0YWdlOiBOYW1lZFN0YWdlT3B0aW9ucywgZmFzdD86IGJvb2xlYW4pOiBQaXBlbGluZVN0ZXAge1xuICAgIHJldHVybiBuZXcgU3RlcFNlcXVlbmNlKHRoaXMucHJvamVjdCwgW1xuICAgICAgbmV3IEF3c0Fzc3VtZVJvbGVTdGVwKHRoaXMucHJvamVjdCwge1xuICAgICAgICByb2xlQXJuOiB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zPy5kaWZmPy5bc3RhZ2UubmFtZV0gPz9cbiAgICAgICAgICB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zPy5kZXBsb3ltZW50Py5bc3RhZ2UubmFtZV0gPz9cbiAgICAgICAgICB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zPy5kZWZhdWx0ISxcbiAgICAgICAgcmVnaW9uOiBzdGFnZS5lbnYucmVnaW9uLFxuICAgICAgICBqdW1wUm9sZUFybjogdGhpcy5iYXNlT3B0aW9ucy5pYW1Sb2xlQXJucy5qdW1wPy5bc3RhZ2UubmFtZV0sXG4gICAgICB9KSxcbiAgICAgIG5ldyBQcm9qZW5TY3JpcHRTdGVwKHRoaXMucHJvamVjdCwgZmFzdCA/IGBmYXN0ZGlmZjoke3N0YWdlLm5hbWV9YCA6IGBkaWZmOiR7c3RhZ2UubmFtZX1gKSxcbiAgICAgIC4uLnN0YWdlLnBvc3REaWZmU3RlcHMgPz8gW10sXG4gICAgXSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcmVuZGVySW5zdGFsbFBhY2thZ2VDb21tYW5kcyhwYWNrYWdlTmFtZTogc3RyaW5nLCBydW5QcmVJbnN0YWxsQ29tbWFuZHM6IGJvb2xlYW4gPSBmYWxzZSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBjb21tYW5kcyA9IHJ1blByZUluc3RhbGxDb21tYW5kcyA/IHRoaXMuYmFzZU9wdGlvbnMucHJlSW5zdGFsbENvbW1hbmRzID8/IFtdIDogW107XG5cbiAgICBzd2l0Y2ggKHRoaXMuYXBwLnBhY2thZ2UucGFja2FnZU1hbmFnZXIpIHtcbiAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLllBUk46XG4gICAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5ZQVJOMjpcbiAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLllBUk5fQkVSUlk6XG4gICAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5ZQVJOX0NMQVNTSUM6XG4gICAgICAgIGNvbW1hbmRzLnB1c2goYHlhcm4gYWRkICR7cGFja2FnZU5hbWV9YCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuTlBNOlxuICAgICAgICBjb21tYW5kcy5wdXNoKGBucG0gaW5zdGFsbCAke3BhY2thZ2VOYW1lfWApO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLlBOUE06XG4gICAgICAgIGNvbW1hbmRzLnB1c2goYHBucG0gYWRkICR7cGFja2FnZU5hbWV9YCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdObyBpbnN0YWxsIHNjcmlwdHMgZm9yIHBhY2thZ2VNYW5hZ2VyOiAnICsgdGhpcy5hcHAucGFja2FnZS5wYWNrYWdlTWFuYWdlcik7XG4gICAgfVxuICAgIHJldHVybiBjb21tYW5kcztcbiAgfVxuXG4gIHByb3RlY3RlZCBjcmVhdGVTYWZlU3RhZ2VOYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gUmVtb3ZlIG5vbi1hbHBoYW51bWVyaWMgY2hhcmFjdGVycyBhbmQgc3BsaXQgaW50byB3b3Jkc1xuICAgIGNvbnN0IHdvcmRzID0gbmFtZS5yZXBsYWNlKC9bXmEtekEtWjAtOV0rL2csICcgJykudHJpbSgpLnNwbGl0KC9cXHMrLyk7XG5cbiAgICAvLyBDYXBpdGFsaXplIHRoZSBmaXJzdCBsZXR0ZXIgb2YgZWFjaCB3b3JkIGFuZCBqb2luIHRoZW1cbiAgICByZXR1cm4gd29yZHMubWFwKCh3b3JkKSA9PiB7XG4gICAgICByZXR1cm4gd29yZC5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHdvcmQuc2xpY2UoMSkudG9Mb3dlckNhc2UoKTtcbiAgICB9KS5qb2luKCcnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBnZW5lcmF0ZXMgdGhlIGVudHJ5IHBvaW50IGZvciB0aGUgYXBwbGljYXRpb24sIGluY2x1ZGluZyBpbnRlcmZhY2VzIGFuZCBjbGFzc2VzXG4gICAqIG5lY2Vzc2FyeSB0byBzZXQgdXAgdGhlIHBpcGVsaW5lIGFuZCBkZWZpbmUgdGhlIEFXUyBDREsgc3RhY2tzIGZvciBkaWZmZXJlbnQgZW52aXJvbm1lbnRzLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZUFwcGxpY2F0aW9uRW50cnlwb2ludCgpIHtcbiAgICBsZXQgcHJvcHNDb2RlID0gJyc7XG4gICAgbGV0IGFwcENvZGUgPSAnJztcbiAgICBsZXQgc2VwID0gJy0nO1xuICAgIGlmICh0aGlzLnN0YWNrUHJlZml4ID09PSAnJykge1xuICAgICAgc2VwID0gJyc7XG4gICAgfVxuXG5cbiAgICBpZiAodGhpcy5iYXNlT3B0aW9ucy5wZXJzb25hbFN0YWdlKSB7XG4gICAgICBwcm9wc0NvZGUgKz0gYCAgLyoqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSB1c2VkIHRvIGdlbmVyYXRlIGEgcGVyc29uYWwgc3RhY2suICovXG4gIHByb3ZpZGVQZXJzb25hbFN0YWNrOiAoYXBwOiBBcHAsIHN0YWNrSWQ6IHN0cmluZywgcHJvcHM6IFBpcGVsaW5lQXBwU3RhY2tQcm9wcykgPT4gU3RhY2s7XG5gO1xuICAgICAgYXBwQ29kZSArPSBgICAgIC8vIElmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBVU0VSIGlzIHNldCBhbmQgYSBmdW5jdGlvbiBpcyBwcm92aWRlZCBmb3IgY3JlYXRpbmcgYSBwZXJzb25hbCBzdGFjaywgaXQgaXMgY2FsbGVkIHdpdGggbmVjZXNzYXJ5IGFyZ3VtZW50cy5cbiAgICBpZiAocHJvcHMucHJvdmlkZVBlcnNvbmFsU3RhY2sgJiYgcHJvY2Vzcy5lbnYuVVNFUikge1xuICAgICAgY29uc3Qgc3RhZ2VOYW1lID0gJ3BlcnNvbmFsLScgKyBwcm9jZXNzLmVudi5VU0VSLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxcXFxcLy9nLCAnLScpO1xuICAgICAgcHJvcHMucHJvdmlkZVBlcnNvbmFsU3RhY2sodGhpcywgJyR7dGhpcy5zdGFja1ByZWZpeH0ke3NlcH1wZXJzb25hbCcsIHsgZW52OiB7IGFjY291bnQ6ICcke3RoaXMuYmFzZU9wdGlvbnMucGVyc29uYWxTdGFnZS5lbnYuYWNjb3VudH0nLCByZWdpb246ICcke3RoaXMuYmFzZU9wdGlvbnMucGVyc29uYWxTdGFnZS5lbnYucmVnaW9ufScgfSwgc3RhY2tOYW1lOiBcXGAke3RoaXMuc3RhY2tQcmVmaXh9JHtzZXB9XFwke3N0YWdlTmFtZX1cXGAsIHN0YWdlTmFtZSB9KTtcbiAgICB9XG5gO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmJhc2VPcHRpb25zLmZlYXR1cmVTdGFnZXMpIHtcbiAgICAgIHByb3BzQ29kZSArPSBgICAvKiogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgdG8gZ2VuZXJhdGUgYSBmZWF0dXJlIHN0YWNrLiAqL1xuICBwcm92aWRlRmVhdHVyZVN0YWNrOiAoYXBwOiBBcHAsIHN0YWNrSWQ6IHN0cmluZywgcHJvcHM6IFBpcGVsaW5lQXBwU3RhY2tQcm9wcykgPT4gU3RhY2s7XG5gO1xuICAgICAgYXBwQ29kZSArPSBgICAgIC8vIElmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBCUkFOQ0ggaXMgc2V0IGFuZCBhIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIGZvciBjcmVhdGluZyBhIGZlYXR1cmUgc3RhY2ssIGl0IGlzIGNhbGxlZCB3aXRoIG5lY2Vzc2FyeSBhcmd1bWVudHMuXG4gICAgaWYgKHByb3BzLnByb3ZpZGVGZWF0dXJlU3RhY2sgJiYgcHJvY2Vzcy5lbnYuQlJBTkNIKSB7XG4gICAgICBjb25zdCBzdGFnZU5hbWUgPSAnZmVhdHVyZS0nICsgcHJvY2Vzcy5lbnYuQlJBTkNILnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvXFxcXFxcLy9nLCAnLScpO1xuICAgICAgcHJvcHMucHJvdmlkZUZlYXR1cmVTdGFjayh0aGlzLCAnJHt0aGlzLnN0YWNrUHJlZml4fSR7c2VwfWZlYXR1cmUnLCB7IGVudjogeyBhY2NvdW50OiAnJHt0aGlzLmJhc2VPcHRpb25zLmZlYXR1cmVTdGFnZXMuZW52LmFjY291bnR9JywgcmVnaW9uOiAnJHt0aGlzLmJhc2VPcHRpb25zLmZlYXR1cmVTdGFnZXMuZW52LnJlZ2lvbn0nIH0sIHN0YWNrTmFtZTogXFxgJHt0aGlzLnN0YWNrUHJlZml4fSR7c2VwfVxcJHtzdGFnZU5hbWV9XFxgLCBzdGFnZU5hbWUgfSk7XG4gICAgfVxuYDtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHN0YWdlIG9mIHRoaXMuYmFzZU9wdGlvbnMuc3RhZ2VzKSB7XG4gICAgICBjb25zdCBuYW1lVXBwZXJGaXJzdCA9IHRoaXMuY3JlYXRlU2FmZVN0YWdlTmFtZShzdGFnZS5uYW1lKTtcblxuICAgICAgcHJvcHNDb2RlICs9IGAgIC8qKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgdXNlZCB0byBnZW5lcmF0ZSBhICR7c3RhZ2UubmFtZX0gc3RhY2suICovXG4gIHByb3ZpZGUke25hbWVVcHBlckZpcnN0fVN0YWNrOiAoYXBwOiBBcHAsIHN0YWNrSWQ6IHN0cmluZywgcHJvcHM6IFBpcGVsaW5lQXBwU3RhY2tQcm9wcykgPT4gU3RhY2s7XG5gO1xuICAgICAgYXBwQ29kZSArPSBgICAgIC8vIElmIGEgZnVuY3Rpb24gaXMgcHJvdmlkZWQgZm9yIGNyZWF0aW5nIGEgJHtzdGFnZS5uYW1lfSBzdGFjaywgaXQgaXMgY2FsbGVkIHdpdGggbmVjZXNzYXJ5IGFyZ3VtZW50cy5cbiAgICBpZiAocHJvcHMucHJvdmlkZSR7bmFtZVVwcGVyRmlyc3R9U3RhY2spIHtcbiAgICAgIHByb3BzLnByb3ZpZGUke25hbWVVcHBlckZpcnN0fVN0YWNrKHRoaXMsICcke3RoaXMuc3RhY2tQcmVmaXh9JHtzZXB9JHtzdGFnZS5uYW1lfScsIHsgZW52OiB7IGFjY291bnQ6ICcke3N0YWdlLmVudi5hY2NvdW50fScsIHJlZ2lvbjogJyR7c3RhZ2UuZW52LnJlZ2lvbn0nIH0sIHN0YWNrTmFtZTogJyR7dGhpcy5zdGFja1ByZWZpeH0ke3NlcH0ke3N0YWdlLm5hbWV9Jywgc3RhZ2VOYW1lOiAnJHtzdGFnZS5uYW1lfScgfSk7XG4gICAgfVxuYDtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IHN0YWdlIG9mICh0aGlzLmJhc2VPcHRpb25zLmluZGVwZW5kZW50U3RhZ2VzID8/IFtdKSkge1xuICAgICAgY29uc3QgbmFtZVVwcGVyRmlyc3QgPSB0aGlzLmNyZWF0ZVNhZmVTdGFnZU5hbWUoc3RhZ2UubmFtZSk7XG5cbiAgICAgIHByb3BzQ29kZSArPSBgICAvKiogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgdG8gZ2VuZXJhdGUgYSAke3N0YWdlLm5hbWV9IHN0YWNrLiAqL1xuICBwcm92aWRlJHtuYW1lVXBwZXJGaXJzdH1TdGFjazogKGFwcDogQXBwLCBzdGFja0lkOiBzdHJpbmcsIHByb3BzOiBQaXBlbGluZUFwcFN0YWNrUHJvcHMpID0+IFN0YWNrO1xuYDtcbiAgICAgIGFwcENvZGUgKz0gYCAgICAvLyBJZiBhIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIGZvciBjcmVhdGluZyBhICR7c3RhZ2UubmFtZX0gc3RhY2ssIGl0IGlzIGNhbGxlZCB3aXRoIG5lY2Vzc2FyeSBhcmd1bWVudHMuXG4gICAgaWYgKHByb3BzLnByb3ZpZGUke25hbWVVcHBlckZpcnN0fVN0YWNrKSB7XG4gICAgICBwcm9wcy5wcm92aWRlJHtuYW1lVXBwZXJGaXJzdH1TdGFjayh0aGlzLCAnJHt0aGlzLnN0YWNrUHJlZml4fSR7c2VwfSR7c3RhZ2UubmFtZX0nLCB7IGVudjogeyBhY2NvdW50OiAnJHtzdGFnZS5lbnYuYWNjb3VudH0nLCByZWdpb246ICcke3N0YWdlLmVudi5yZWdpb259JyB9LCBzdGFja05hbWU6ICcke3RoaXMuc3RhY2tQcmVmaXh9JHtzZXB9JHtzdGFnZS5uYW1lfScsIHN0YWdlTmFtZTogJyR7c3RhZ2UubmFtZX0nIH0pO1xuICAgIH1cbmA7XG4gICAgfVxuXG4gICAgLy8gQWRkIHZlcnNpb25pbmcgbG9naWMgdG8gYXBwbHkgdG8gYWxsIHN0YWNrc1xuICAgIGlmICh0aGlzLmJhc2VPcHRpb25zLnZlcnNpb25pbmc/LmVuYWJsZWQpIHtcbiAgICAgIGFwcENvZGUgKz0gdGhpcy5nZW5lcmF0ZVZlcnNpb25pbmdBcHBDb2RlKHRoaXMuYmFzZU9wdGlvbnMudmVyc2lvbmluZyk7XG4gICAgfVxuXG4gICAgY29uc3QgYXBwRmlsZSA9IG5ldyBUZXh0RmlsZSh0aGlzLnByb2plY3QsIGAke3RoaXMuYXBwLnNyY2Rpcn0vYXBwLnRzYCk7XG5cbiAgICAvLyBHZW5lcmF0ZSB2ZXJzaW9uaW5nLWF3YXJlIGltcG9ydHMgYW5kIHV0aWxpdGllc1xuICAgIGNvbnN0IHZlcnNpb25pbmdJbXBvcnRzID0gdGhpcy5iYXNlT3B0aW9ucy52ZXJzaW9uaW5nPy5lbmFibGVkXG4gICAgICA/IHRoaXMuZ2VuZXJhdGVWZXJzaW9uaW5nSW1wb3J0cygpXG4gICAgICA6ICcnO1xuXG4gICAgY29uc3QgdmVyc2lvbmluZ1V0aWxpdGllcyA9IHRoaXMuYmFzZU9wdGlvbnMudmVyc2lvbmluZz8uZW5hYmxlZFxuICAgICAgPyB0aGlzLmdlbmVyYXRlVmVyc2lvbmluZ1V0aWxpdGllcygpXG4gICAgICA6ICcnO1xuXG4gICAgY29uc3QgdmVyc2lvbmluZ0NvbmZpZ0RlY2xhcmF0aW9uID0gdGhpcy5iYXNlT3B0aW9ucy52ZXJzaW9uaW5nPy5lbmFibGVkXG4gICAgICA/IGBcbmNvbnN0IHZlcnNpb25pbmdDb25maWcgPSAke0pTT04uc3RyaW5naWZ5KHRoaXMuYmFzZU9wdGlvbnMudmVyc2lvbmluZywgbnVsbCwgMil9O1xuYFxuICAgICAgOiAnJztcblxuICAgIGFwcEZpbGUuYWRkTGluZShgLy8gJHtQUk9KRU5fTUFSS0VSfVxuLyogZXNsaW50LWRpc2FibGUgKi9cbmltcG9ydCB7IEFwcCwgQXBwUHJvcHMsIFN0YWNrLCBTdGFja1Byb3BzIH0gZnJvbSAnYXdzLWNkay1saWInO1xuJHt2ZXJzaW9uaW5nSW1wb3J0c31cbiR7dmVyc2lvbmluZ0NvbmZpZ0RlY2xhcmF0aW9ufVxuJHt2ZXJzaW9uaW5nVXRpbGl0aWVzfVxuXG4vKipcbiAqIFBpcGVsaW5lQXBwUHJvcHMgaXMgYW4gZXh0ZW5zaW9uIG9mIEFwcFByb3BzLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBBV1MgQ0RLIGNvcmUuXG4gKiBJdCBpbmNsdWRlcyBvcHRpb25hbCBmdW5jdGlvbnMgdG8gcHJvdmlkZSBBV1MgU3RhY2tzIGZvciBkaWZmZXJlbnQgc3RhZ2VzLlxuICpcbiAqIFVzZSB0aGVzZSBmdW5jdGlvbnMgdG8gaW5zdGFudGlhdGUgeW91ciBhcHBsaWNhdGlvbiBzdGFja3Mgd2l0aCB0aGUgcGFyYW1ldGVycyBmb3JcbiAqIGVhY2ggc3RhZ2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZUFwcFByb3BzIGV4dGVuZHMgQXBwUHJvcHMge1xuJHtwcm9wc0NvZGV9XG59XG5cbi8qKlxuICogUGlwZWxpbmVBcHBTdGFja1Byb3BzIGlzIGFuIGV4dGVuc2lvbiBvZiBTdGFja1Byb3BzLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBBV1MgQ0RLIGNvcmUuXG4gKiBJdCBpbmNsdWRlcyBhbiBhZGRpdGlvbmFsIHByb3BlcnR5IHRvIHNwZWNpZnkgdGhlIHN0YWdlIG5hbWUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgUGlwZWxpbmVBcHBTdGFja1Byb3BzIGV4dGVuZHMgU3RhY2tQcm9wcyB7XG4gIHN0YWdlTmFtZTogc3RyaW5nO1xufVxuXG4vKipcbiAqIFRoZSBQaXBlbGluZUFwcCBjbGFzcyBleHRlbmRzIHRoZSBBcHAgY2xhc3MgZnJvbSBBV1MgQ0RLIGFuZCBvdmVycmlkZXMgdGhlIGNvbnN0cnVjdG9yIHRvIHN1cHBvcnRcbiAqIGRpZmZlcmVudCBzdGFnZXMgb2YgdGhlIGFwcGxpY2F0aW9uIChkZXZlbG9wbWVudCwgcHJvZHVjdGlvbiwgcGVyc29uYWwsIGZlYXR1cmUpIGJ5IGludm9raW5nIHRoZSBwcm92aWRlZFxuICogc3RhY2stcHJvdmlkaW5nIGZ1bmN0aW9ucyBmcm9tIHRoZSBwcm9wcy5cbiAqL1xuZXhwb3J0IGNsYXNzIFBpcGVsaW5lQXBwIGV4dGVuZHMgQXBwIHtcbiAgY29uc3RydWN0b3IocHJvcHM6IFBpcGVsaW5lQXBwUHJvcHMpIHtcbiAgICBzdXBlcihwcm9wcyk7XG5cbiR7YXBwQ29kZX1cblxuICB9XG59XG5gKTtcbiAgfVxuXG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHNldHMgdXAgdGFza3MgdG8gcHVibGlzaCBDREsgYXNzZXRzIHRvIGFsbCBhY2NvdW50cyBhbmQgaGFuZGxlIHZlcnNpb25pbmcsIGluY2x1ZGluZyBidW1waW5nIHRoZSB2ZXJzaW9uXG4gICAqIGJhc2VkIG9uIHRoZSBsYXRlc3QgZ2l0IHRhZyBhbmQgcHVzaGluZyB0aGUgQ0RLIGFzc2VtYmx5IHRvIHRoZSBwYWNrYWdlIHJlcG9zaXRvcnkuXG4gICAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlUmVsZWFzZVRhc2tzKCkge1xuICAgIGNvbnN0IHN0YWdlcyA9IFsuLi50aGlzLmJhc2VPcHRpb25zLnN0YWdlcywgLi4udGhpcy5iYXNlT3B0aW9ucy5pbmRlcGVuZGVudFN0YWdlcyA/PyBbXV07XG4gICAgbGV0IHNlcCA9ICctJztcbiAgICBpZiAodGhpcy5zdGFja1ByZWZpeCA9PT0gJycpIHtcbiAgICAgIHNlcCA9ICcnO1xuICAgIH1cbiAgICAvLyBUYXNrIHRvIHB1Ymxpc2ggdGhlIENESyBhc3NldHMgdG8gYWxsIGFjY291bnRzXG4gICAgZm9yIChjb25zdCBzdGFnZSBvZiBzdGFnZXMpIHtcbiAgICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKGBwdWJsaXNoOmFzc2V0czoke3N0YWdlLm5hbWV9YCwge1xuICAgICAgICBzdGVwczogW3tcbiAgICAgICAgICBleGVjOiBgbnB4IGNkay1hc3NldHMgLXAgJHt0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0fS8ke3RoaXMuc3RhY2tQcmVmaXh9JHtzZXB9JHtzdGFnZS5uYW1lfS5hc3NldHMuanNvbiBwdWJsaXNoYCxcbiAgICAgICAgfV0sXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soJ3B1Ymxpc2g6YXNzZXRzJywge1xuICAgICAgc3RlcHM6IHN0YWdlcy5tYXAoc3RhZ2UgPT4gKHtcbiAgICAgICAgc3Bhd246IGBwdWJsaXNoOmFzc2V0czoke3N0YWdlLm5hbWV9YCxcbiAgICAgIH0pKSxcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLmJhc2VPcHRpb25zLnBrZ05hbWVzcGFjZSkge1xuICAgICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soJ2J1bXAnLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQnVtcHMgdmVyc2lvbiBiYXNlZCBvbiBsYXRlc3QgZ2l0IHRhZycsXG4gICAgICAgIHN0ZXBzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgZXhlYzogJ3BpcGVsaW5lcy1yZWxlYXNlIGJ1bXAnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgZXhlYzogJ2dpdCBwdXNoIC0tdGFncycsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soJ3JlbGVhc2U6cHVzaC1hc3NlbWJseScsIHtcbiAgICAgICAgc3RlcHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBleGVjOiBgcGlwZWxpbmVzLXJlbGVhc2UgY3JlYXRlLW1hbmlmZXN0IFwiJHt0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0fVwiICBcIiR7dGhpcy5iYXNlT3B0aW9ucy5wa2dOYW1lc3BhY2V9XCJgLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY3dkOiB0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0LFxuICAgICAgICAgICAgZXhlYzogJ25wbSB2ZXJzaW9uIC0tbm8tZ2l0LXRhZy12ZXJzaW9uIGZyb20tZ2l0JyxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIGN3ZDogdGhpcy5hcHAuY2RrQ29uZmlnLmNka291dCxcbiAgICAgICAgICAgIGV4ZWM6ICducG0gcHVibGlzaCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuICAgIH1cblxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHNldHMgdXAgdGFza3MgZm9yIHRoZSBwZXJzb25hbCBkZXBsb3ltZW50IHN0YWdlLCBpbmNsdWRpbmcgZGVwbG95bWVudCwgd2F0Y2hpbmcgZm9yIGNoYW5nZXMsXG4gICAqIGNvbXBhcmluZyBjaGFuZ2VzIChkaWZmKSwgYW5kIGRlc3Ryb3lpbmcgdGhlIHN0YWNrIHdoZW4gbm8gbG9uZ2VyIG5lZWRlZC5cbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVQZXJzb25hbFN0YWdlKCkge1xuICAgIGNvbnN0IHN0YWNrSWQgPSB0aGlzLmdldENsaVN0YWNrUGF0dGVybigncGVyc29uYWwnKTtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzaygnZGVwbG95OnBlcnNvbmFsJywge1xuICAgICAgZXhlYzogYGNkayBkZXBsb3kgLS1vdXRwdXRzLWZpbGUgY2RrLW91dHB1dHMtcGVyc29uYWwuanNvbiAke3N0YWNrSWR9YCxcbiAgICB9KTtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzaygnd2F0Y2g6cGVyc29uYWwnLCB7XG4gICAgICBleGVjOiBgY2RrIGRlcGxveSAtLW91dHB1dHMtZmlsZSBjZGstb3V0cHV0cy1wZXJzb25hbC5qc29uIC0td2F0Y2ggLS1ob3Rzd2FwICR7c3RhY2tJZH1gLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKCdkaWZmOnBlcnNvbmFsJywge1xuICAgICAgZXhlYzogYGNkayBkaWZmICR7c3RhY2tJZH1gLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKCdmYXN0ZGlmZjpwZXJzb25hbCcsIHtcbiAgICAgIGV4ZWM6IGBjZGsgZGlmZiAtLW5vLWNoYW5nZXNldCAke3N0YWNrSWR9YCxcbiAgICB9KTtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzaygnZGVzdHJveTpwZXJzb25hbCcsIHtcbiAgICAgIGV4ZWM6IGBjZGsgZGVzdHJveSAke3N0YWNrSWR9YCxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGlzIG1ldGhvZCBzZXRzIHVwIHRhc2tzIGZvciB0aGUgZmVhdHVyZSBkZXBsb3ltZW50IHN0YWdlLCBpbmNsdWRpbmcgZGVwbG95bWVudCwgY29tcGFyaW5nIGNoYW5nZXMgKGRpZmYpLFxuICAgKiBhbmQgZGVzdHJveWluZyB0aGUgc3RhY2sgd2hlbiBubyBsb25nZXIgbmVlZGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZUZlYXR1cmVTdGFnZSgpIHtcbiAgICBjb25zdCBzdGFja0lkID0gdGhpcy5nZXRDbGlTdGFja1BhdHRlcm4oJ2ZlYXR1cmUnKTtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzaygnZGVwbG95OmZlYXR1cmUnLCB7XG4gICAgICBleGVjOiBgY2RrIC0tb3V0cHV0cy1maWxlIGNkay1vdXRwdXRzLWZlYXR1cmUuanNvbiAtLXByb2dyZXNzIGV2ZW50cyAtLXJlcXVpcmUtYXBwcm92YWwgbmV2ZXIgZGVwbG95ICR7c3RhY2tJZH1gLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKCdkaWZmOmZlYXR1cmUnLCB7XG4gICAgICBleGVjOiBgY2RrIGRpZmYgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soJ2Zhc3RkaWZmOmZlYXR1cmUnLCB7XG4gICAgICBleGVjOiBgY2RrIGRpZmYgLS1uby1jaGFuZ2VzZXQgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soJ2Rlc3Ryb3k6ZmVhdHVyZScsIHtcbiAgICAgIGV4ZWM6IGBjZGsgZGVzdHJveSAtLWZvcmNlICR7c3RhY2tJZH1gLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKCd3YXRjaDpmZWF0dXJlJywge1xuICAgICAgZXhlYzogYGNkayBkZXBsb3kgLS1vdXRwdXRzLWZpbGUgY2RrLW91dHB1dHMtZmVhdHVyZS5qc29uIC0td2F0Y2ggLS1ob3Rzd2FwICR7c3RhY2tJZH1gLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHNldHMgdXAgdGFza3MgZm9yIHRoZSBnZW5lcmFsIHBpcGVsaW5lIHN0YWdlcyAoZGV2LCBwcm9kKSwgaW5jbHVkaW5nIGRlcGxveW1lbnQgYW5kIGNvbXBhcmluZyBjaGFuZ2VzIChkaWZmKS5cbiAgICogQHBhcmFtIHtEZXBsb3lTdGFnZU9wdGlvbnN9IHN0YWdlIC0gVGhlIHN0YWdlIHRvIGNyZWF0ZVxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZVBpcGVsaW5lU3RhZ2Uoc3RhZ2U6IERlcGxveW1lbnRTdGFnZSkge1xuICAgIGNvbnN0IHN0YWNrSWQgPSB0aGlzLmdldENsaVN0YWNrUGF0dGVybihzdGFnZS5uYW1lKTtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzayhgZGVwbG95OiR7c3RhZ2UubmFtZX1gLCB7XG4gICAgICBleGVjOiBgY2RrIC0tYXBwICR7dGhpcy5hcHAuY2RrQ29uZmlnLmNka291dH0gLS1vdXRwdXRzLWZpbGUgY2RrLW91dHB1dHMtJHtzdGFnZS5uYW1lfS5qc29uIC0tcHJvZ3Jlc3MgZXZlbnRzIC0tcmVxdWlyZS1hcHByb3ZhbCBuZXZlciBkZXBsb3kgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soYGRpZmY6JHtzdGFnZS5uYW1lfWAsIHtcbiAgICAgIGV4ZWM6IGBjZGsgLS1hcHAgJHt0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0fSBkaWZmICR7c3RhY2tJZH1gLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKGBmYXN0ZGlmZjoke3N0YWdlLm5hbWV9YCwge1xuICAgICAgZXhlYzogYGNkayAtLWFwcCAke3RoaXMuYXBwLmNka0NvbmZpZy5jZGtvdXR9IGRpZmYgLS1uby1jaGFuZ2VzZXQgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gICAgaWYgKHN0YWdlLndhdGNoYWJsZSkge1xuICAgICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soYHdhdGNoOiR7c3RhZ2UubmFtZX1gLCB7XG4gICAgICAgIGV4ZWM6IGBjZGsgZGVwbG95IC0tb3V0cHV0cy1maWxlIGNkay1vdXRwdXRzLSR7c3RhZ2UubmFtZX0uanNvbiAtLXdhdGNoIC0taG90c3dhcCAke3N0YWNrSWR9YCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBBZGQgdmVyc2lvbiBmZXRjaCB0YXNrIGlmIHZlcnNpb25pbmcgaXMgZW5hYmxlZFxuICAgIGlmICh0aGlzLmJhc2VPcHRpb25zLnZlcnNpb25pbmc/LmVuYWJsZWQpIHtcbiAgICAgIHRoaXMuY3JlYXRlVmVyc2lvbkZldGNoVGFzayhzdGFnZSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHNldHMgdXAgdGFza3MgZm9yIHRoZSBpbmRlcGVuZGVudCBzdGFnZXMgaW5jbHVkaW5nIGRlcGxveW1lbnQgYW5kIGNvbXBhcmluZyBjaGFuZ2VzIChkaWZmKS5cbiAgICogQHBhcmFtIHtOYW1lZFN0YWdlT3B0aW9uc30gc3RhZ2UgLSBUaGUgc3RhZ2UgdG8gY3JlYXRlXG4gICAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlSW5kZXBlbmRlbnRTdGFnZShzdGFnZTogSW5kZXBlbmRlbnRTdGFnZSkge1xuICAgIGNvbnN0IHN0YWNrSWQgPSB0aGlzLmdldENsaVN0YWNrUGF0dGVybihzdGFnZS5uYW1lKTtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzayhgZGVwbG95OiR7c3RhZ2UubmFtZX1gLCB7XG4gICAgICBleGVjOiBgY2RrIC0tYXBwICR7dGhpcy5hcHAuY2RrQ29uZmlnLmNka291dH0gLS1vdXRwdXRzLWZpbGUgY2RrLW91dHB1dHMtJHtzdGFnZS5uYW1lfS5qc29uIC0tcHJvZ3Jlc3MgZXZlbnRzIC0tcmVxdWlyZS1hcHByb3ZhbCBuZXZlciBkZXBsb3kgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soYGRpZmY6JHtzdGFnZS5uYW1lfWAsIHtcbiAgICAgIGV4ZWM6IGBjZGsgLS1hcHAgJHt0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0fSBkaWZmICR7c3RhY2tJZH1gLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKGBmYXN0ZGlmZjoke3N0YWdlLm5hbWV9YCwge1xuICAgICAgZXhlYzogYGNkayAtLWFwcCAke3RoaXMuYXBwLmNka0NvbmZpZy5jZGtvdXR9IGRpZmYgLS1uby1jaGFuZ2VzZXQgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gICAgaWYgKHN0YWdlLndhdGNoYWJsZSkge1xuICAgICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soYHdhdGNoOiR7c3RhZ2UubmFtZX1gLCB7XG4gICAgICAgIGV4ZWM6IGBjZGsgZGVwbG95IC0tb3V0cHV0cy1maWxlIGNkay1vdXRwdXRzLSR7c3RhZ2UubmFtZX0uanNvbiAtLXdhdGNoIC0taG90c3dhcCAke3N0YWNrSWR9YCxcbiAgICAgIH0pO1xuICAgIH1cbiAgICAvLyBBZGQgdmVyc2lvbiBmZXRjaCB0YXNrIGlmIHZlcnNpb25pbmcgaXMgZW5hYmxlZFxuICAgIGlmICh0aGlzLmJhc2VPcHRpb25zLnZlcnNpb25pbmc/LmVuYWJsZWQpIHtcbiAgICAgIHRoaXMuY3JlYXRlVmVyc2lvbkZldGNoVGFzayhzdGFnZSk7XG4gICAgfVxuICB9XG5cbiAgcHJvdGVjdGVkIGdldENsaVN0YWNrUGF0dGVybihzdGFnZTogc3RyaW5nKSB7XG4gICAgbGV0IHNlcCA9ICctJztcbiAgICBpZiAodGhpcy5zdGFja1ByZWZpeCA9PT0gJycpIHtcbiAgICAgIHNlcCA9ICcnO1xuICAgIH1cbiAgICByZXR1cm4gdGhpcy5iYXNlT3B0aW9ucy5kZXBsb3lTdWJTdGFja3MgPyBgJHt0aGlzLnN0YWNrUHJlZml4fSR7c2VwfSR7c3RhZ2V9ICR7dGhpcy5zdGFja1ByZWZpeH0ke3NlcH0ke3N0YWdlfS8qYCA6IGAke3RoaXMuc3RhY2tQcmVmaXh9JHtzZXB9JHtzdGFnZX1gO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB2ZXJzaW9uOmZldGNoOjxzdGFnZT4gdGFzayB0byBmZXRjaCB2ZXJzaW9uIGRhdGEgZnJvbSBkZXBsb3llZCBzdGFja1xuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZVZlcnNpb25GZXRjaFRhc2soc3RhZ2U6IE5hbWVkU3RhZ2VPcHRpb25zKTogdm9pZCB7XG4gICAgY29uc3Qgc3RhY2tOYW1lID0gYCR7dGhpcy5zdGFja1ByZWZpeH0ke3RoaXMuc3RhY2tQcmVmaXggPyAnLScgOiAnJ30ke3N0YWdlLm5hbWV9YDtcbiAgICBjb25zdCBzdGFnZUNvbmZpZyA9IHRoaXMuYmFzZU9wdGlvbnMudmVyc2lvbmluZz8uc3RhZ2VPdmVycmlkZXM/LltzdGFnZS5uYW1lXSB8fCB0aGlzLmJhc2VPcHRpb25zLnZlcnNpb25pbmc7XG5cbiAgICBpZiAoIXN0YWdlQ29uZmlnPy5vdXRwdXRzKSByZXR1cm47XG5cbiAgICBjb25zdCBjb21tYW5kczogc3RyaW5nW10gPSBbXTtcblxuICAgIC8vIEZldGNoIGZyb20gQ2xvdWRGb3JtYXRpb24gb3V0cHV0c1xuICAgIGlmIChzdGFnZUNvbmZpZy5vdXRwdXRzLmNsb3VkRm9ybWF0aW9uPy5lbmFibGVkKSB7XG4gICAgICBjb21tYW5kcy5wdXNoKFxuICAgICAgICBgZWNobyBcIkZldGNoaW5nIHZlcnNpb24gZGF0YSBmcm9tIENsb3VkRm9ybWF0aW9uIG91dHB1dHMgZm9yICR7c3RhZ2UubmFtZX0uLi5cImAsXG4gICAgICAgIGBhd3MgY2xvdWRmb3JtYXRpb24gZGVzY3JpYmUtc3RhY2tzIC0tc3RhY2stbmFtZSAke3N0YWNrTmFtZX0gLS1yZWdpb24gJHtzdGFnZS5lbnYucmVnaW9ufSAtLXF1ZXJ5IFwiU3RhY2tzWzBdLk91dHB1dHNbP3N0YXJ0c193aXRoKE91dHB1dEtleSwgJ0FwcFZlcnNpb24nKV0ue0tleTpPdXRwdXRLZXksVmFsdWU6T3V0cHV0VmFsdWV9XCIgLS1vdXRwdXQgdGFibGVgLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBGZXRjaCBmcm9tIFNTTSBQYXJhbWV0ZXIgU3RvcmVcbiAgICBpZiAoc3RhZ2VDb25maWcub3V0cHV0cy5wYXJhbWV0ZXJTdG9yZT8uZW5hYmxlZCkge1xuICAgICAgY29uc3QgcGFyYW1ldGVyTmFtZSA9IChzdGFnZUNvbmZpZy5vdXRwdXRzLnBhcmFtZXRlclN0b3JlLnBhcmFtZXRlck5hbWUgfHwgJy97c3RhY2tOYW1lfS92ZXJzaW9uJylcbiAgICAgICAgLnJlcGxhY2UoJ3tzdGFja05hbWV9Jywgc3RhY2tOYW1lKVxuICAgICAgICAucmVwbGFjZSgne3N0YWdlTmFtZX0nLCBzdGFnZS5uYW1lKTtcblxuICAgICAgaWYgKChzdGFnZUNvbmZpZy5vdXRwdXRzLnBhcmFtZXRlclN0b3JlIGFzIGFueSk/LmhpZXJhcmNoaWNhbCkge1xuICAgICAgICBjb21tYW5kcy5wdXNoKFxuICAgICAgICAgIGBlY2hvIFwiRmV0Y2hpbmcgdmVyc2lvbiBkYXRhIGZyb20gU1NNIFBhcmFtZXRlciBTdG9yZSAoaGllcmFyY2hpY2FsKSBmb3IgJHtzdGFnZS5uYW1lfS4uLlwiYCxcbiAgICAgICAgICBgYXdzIHNzbSBnZXQtcGFyYW1ldGVycy1ieS1wYXRoIC0tcGF0aCBcIiR7cGFyYW1ldGVyTmFtZX1cIiAtLXJlZ2lvbiAke3N0YWdlLmVudi5yZWdpb259IC0tcmVjdXJzaXZlIC0tcXVlcnkgXCJQYXJhbWV0ZXJzW10ue05hbWU6TmFtZSxWYWx1ZTpWYWx1ZX1cIiAtLW91dHB1dCB0YWJsZWAsXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBjb21tYW5kcy5wdXNoKFxuICAgICAgICAgIGBlY2hvIFwiRmV0Y2hpbmcgdmVyc2lvbiBkYXRhIGZyb20gU1NNIFBhcmFtZXRlciBTdG9yZSBmb3IgJHtzdGFnZS5uYW1lfS4uLlwiYCxcbiAgICAgICAgICBgYXdzIHNzbSBnZXQtcGFyYW1ldGVyIC0tbmFtZSBcIiR7cGFyYW1ldGVyTmFtZX1cIiAtLXJlZ2lvbiAke3N0YWdlLmVudi5yZWdpb259IC0tcXVlcnkgXCJQYXJhbWV0ZXIue05hbWU6TmFtZSxWYWx1ZTpWYWx1ZX1cIiAtLW91dHB1dCB0YWJsZWAsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvbW1hbmRzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKGB2ZXJzaW9uOmZldGNoOiR7c3RhZ2UubmFtZX1gLCB7XG4gICAgICAgIGRlc2NyaXB0aW9uOiBgRmV0Y2ggdmVyc2lvbiBkYXRhIGZyb20gZGVwbG95ZWQgJHtzdGFnZS5uYW1lfSBzdGFja2AsXG4gICAgICAgIGV4ZWM6IGNvbW1hbmRzLmpvaW4oJyAmJiAnKSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBDREsgYXBwbGljYXRpb24gY29kZSBmb3IgdmVyc2lvbmluZ1xuICAgKi9cbiAgcHVibGljIGdlbmVyYXRlVmVyc2lvbmluZ0FwcENvZGUoY29uZmlnOiBWZXJzaW9uaW5nQ29uZmlnKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFxuICAgIC8vIEFwcGx5IHZlcnNpb25pbmcgdG8gYWxsIHN0YWNrc1xuICAgIHRoaXMubm9kZS5jaGlsZHJlbi5mb3JFYWNoKChjaGlsZCkgPT4ge1xuICAgICAgaWYgKGNoaWxkIGluc3RhbmNlb2YgU3RhY2spIHtcbiAgICAgICAgY29uc3Qgc3RhZ2VOYW1lID0gY2hpbGQuc3RhY2tOYW1lLnNwbGl0KCctJykucG9wKCkgfHwgJ2RlZmF1bHQnO1xuICAgICAgICBhZGRWZXJzaW9uaW5nVG9TdGFjayhjaGlsZCwgc3RhZ2VOYW1lLCAke2NvbmZpZy5zdGFnZU92ZXJyaWRlcyA/ICd2ZXJzaW9uaW5nQ29uZmlnLnN0YWdlT3ZlcnJpZGVzJyA6ICd1bmRlZmluZWQnfSk7XG4gICAgICB9XG4gICAgfSk7YDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB2ZXJzaW9uaW5nIGltcG9ydHMgZm9yIENESyBhcHBsaWNhdGlvblxuICAgKi9cbiAgcHVibGljIGdlbmVyYXRlVmVyc2lvbmluZ0ltcG9ydHMoKTogc3RyaW5nIHtcbiAgICBjb25zdCBpbXBvcnRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgaW1wb3J0cy5wdXNoKFwiaW1wb3J0IHsgQ2ZuT3V0cHV0IH0gZnJvbSAnYXdzLWNkay1saWInO1wiKTtcbiAgICBpbXBvcnRzLnB1c2goXCJpbXBvcnQgeyBTdHJpbmdQYXJhbWV0ZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3NtJztcIik7XG4gICAgaW1wb3J0cy5wdXNoKFwiaW1wb3J0ICogYXMgZnMgZnJvbSAnZnMnO1wiKTtcblxuICAgIHJldHVybiBpbXBvcnRzLmpvaW4oJ1xcbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHZlcnNpb25pbmcgdXRpbGl0eSBmdW5jdGlvbnMgZm9yIENESyBhcHBsaWNhdGlvblxuICAgKi9cbiAgcHVibGljIGdlbmVyYXRlVmVyc2lvbmluZ1V0aWxpdGllcygpOiBzdHJpbmcge1xuICAgIHJldHVybiBgXG4vKipcbiAqIFZlcnNpb24gaW5mb3JtYXRpb24gaW50ZXJmYWNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVmVyc2lvbkluZm8ge1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGNvbW1pdEhhc2g6IHN0cmluZztcbiAgY29tbWl0SGFzaFNob3J0OiBzdHJpbmc7XG4gIGJyYW5jaDogc3RyaW5nO1xuICBjb21taXRDb3VudDogbnVtYmVyO1xuICBwYWNrYWdlVmVyc2lvbjogc3RyaW5nO1xuICBkZXBsb3llZEF0OiBzdHJpbmc7XG4gIGRlcGxveWVkQnk6IHN0cmluZztcbiAgZW52aXJvbm1lbnQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBMb2FkIHZlcnNpb24gaW5mb3JtYXRpb24gZnJvbSBnZW5lcmF0ZWQgZmlsZVxuICovXG5leHBvcnQgZnVuY3Rpb24gbG9hZFZlcnNpb25JbmZvKCk6IFZlcnNpb25JbmZvIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoJy52ZXJzaW9uLnRtcC5qc29uJywgJ3V0ZjgnKSk7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS53YXJuKCdDb3VsZCBub3QgbG9hZCB2ZXJzaW9uIGluZm8sIHVzaW5nIGZhbGxiYWNrJyk7XG4gICAgcmV0dXJuIHtcbiAgICAgIHZlcnNpb246ICcwLjAuMCcsXG4gICAgICBjb21taXRIYXNoOiAndW5rbm93bicsXG4gICAgICBjb21taXRIYXNoU2hvcnQ6ICd1bmtub3duJyxcbiAgICAgIGJyYW5jaDogJ3Vua25vd24nLFxuICAgICAgY29tbWl0Q291bnQ6IDAsXG4gICAgICBwYWNrYWdlVmVyc2lvbjogJzAuMC4wJyxcbiAgICAgIGRlcGxveWVkQXQ6IG5ldyBEYXRlKCkudG9JU09TdHJpbmcoKSxcbiAgICAgIGRlcGxveWVkQnk6ICd1bmtub3duJyxcbiAgICAgIGVudmlyb25tZW50OiAndW5rbm93bidcbiAgICB9O1xuICB9XG59XG5cbi8qKlxuICogR2V0IHZlcnNpb25pbmcgY29uZmlndXJhdGlvbiBmb3IgYSBzcGVjaWZpYyBzdGFnZVxuICovXG5mdW5jdGlvbiBnZXRTdGFnZUNvbmZpZyhzdGFnZU5hbWU6IHN0cmluZywgYmFzZUNvbmZpZzogYW55LCBzdGFnZU92ZXJyaWRlcz86IFJlY29yZDxzdHJpbmcsIGFueT4pOiBhbnkge1xuICBpZiAoIXN0YWdlT3ZlcnJpZGVzIHx8ICFzdGFnZU92ZXJyaWRlc1tzdGFnZU5hbWVdKSB7XG4gICAgcmV0dXJuIGJhc2VDb25maWc7XG4gIH1cbiAgXG4gIC8vIE1lcmdlIHN0YWdlIG92ZXJyaWRlIHdpdGggYmFzZSBjb25maWdcbiAgY29uc3Qgb3ZlcnJpZGUgPSBzdGFnZU92ZXJyaWRlc1tzdGFnZU5hbWVdO1xuICByZXR1cm4ge1xuICAgIC4uLmJhc2VDb25maWcsXG4gICAgb3V0cHV0czoge1xuICAgICAgY2xvdWRGb3JtYXRpb246IG92ZXJyaWRlLm91dHB1dHM/LmNsb3VkRm9ybWF0aW9uIHx8IGJhc2VDb25maWcub3V0cHV0cy5jbG91ZEZvcm1hdGlvbixcbiAgICAgIHBhcmFtZXRlclN0b3JlOiBvdmVycmlkZS5vdXRwdXRzPy5wYXJhbWV0ZXJTdG9yZSB8fCBiYXNlQ29uZmlnLm91dHB1dHMucGFyYW1ldGVyU3RvcmUsXG4gICAgfVxuICB9O1xufVxuXG4vKipcbiAqIEFkZCB2ZXJzaW9uaW5nIG91dHB1dHMgdG8gYSBzdGFja1xuICovXG5mdW5jdGlvbiBhZGRWZXJzaW9uaW5nVG9TdGFjayhzdGFjazogU3RhY2ssIHN0YWdlTmFtZTogc3RyaW5nLCBzdGFnZU92ZXJyaWRlcz86IGFueSk6IHZvaWQge1xuICBjb25zdCB2ZXJzaW9uSW5mbyA9IGxvYWRWZXJzaW9uSW5mbygpO1xuICBjb25zdCBiYXNlQ29uZmlnID0gdmVyc2lvbmluZ0NvbmZpZztcbiAgY29uc3QgY29uZmlnID0gZ2V0U3RhZ2VDb25maWcoc3RhZ2VOYW1lLCBiYXNlQ29uZmlnLCBzdGFnZU92ZXJyaWRlcyk7XG4gIFxuICAvLyBDaGVjayBpZiBmb3JtYXQgaXMgc3BlY2lmaWVkIGluIENsb3VkRm9ybWF0aW9uIG9yIFBhcmFtZXRlclN0b3JlIGNvbmZpZ3NcbiAgY29uc3QgY2ZGb3JtYXQgPSBjb25maWcub3V0cHV0cy5jbG91ZEZvcm1hdGlvbj8uZm9ybWF0IHx8ICdzdHJ1Y3R1cmVkJztcbiAgY29uc3Qgc3NtRm9ybWF0ID0gY29uZmlnLm91dHB1dHMucGFyYW1ldGVyU3RvcmU/LmZvcm1hdCB8fCAnc3RydWN0dXJlZCc7XG4gIFxuICAvLyBBZGQgQ2xvdWRGb3JtYXRpb24gb3V0cHV0c1xuICBpZiAoY29uZmlnLm91dHB1dHMuY2xvdWRGb3JtYXRpb24/LmVuYWJsZWQpIHtcbiAgICBpZiAoY2ZGb3JtYXQgPT09ICdwbGFpbicpIHtcbiAgICAgIC8vIFBsYWluIGZvcm1hdCAtIHNpbmdsZSBvdXRwdXQgd2l0aCB2ZXJzaW9uIHN0cmluZ1xuICAgICAgbmV3IENmbk91dHB1dChzdGFjaywgJ0FwcFZlcnNpb24nLCB7XG4gICAgICAgIHZhbHVlOiB2ZXJzaW9uSW5mby52ZXJzaW9uLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0FwcGxpY2F0aW9uIHZlcnNpb24nLFxuICAgICAgICBleHBvcnROYW1lOiBjb25maWcub3V0cHV0cy5jbG91ZEZvcm1hdGlvbi5leHBvcnROYW1lLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFN0cnVjdHVyZWQgZm9ybWF0IC0gbXVsdGlwbGUgb3V0cHV0c1xuICAgICAgbmV3IENmbk91dHB1dChzdGFjaywgJ0FwcFZlcnNpb24nLCB7XG4gICAgICAgIHZhbHVlOiB2ZXJzaW9uSW5mby52ZXJzaW9uLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0FwcGxpY2F0aW9uIHZlcnNpb24nLFxuICAgICAgICBleHBvcnROYW1lOiBjb25maWcub3V0cHV0cy5jbG91ZEZvcm1hdGlvbi5leHBvcnROYW1lLFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIG5ldyBDZm5PdXRwdXQoc3RhY2ssICdBcHBWZXJzaW9uQ29tbWl0SGFzaCcsIHtcbiAgICAgICAgdmFsdWU6IHZlcnNpb25JbmZvLmNvbW1pdEhhc2gsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR2l0IGNvbW1pdCBoYXNoJyxcbiAgICAgICAgZXhwb3J0TmFtZTogY29uZmlnLm91dHB1dHMuY2xvdWRGb3JtYXRpb24uZXhwb3J0TmFtZSA/IFxcYFxcJHtjb25maWcub3V0cHV0cy5jbG91ZEZvcm1hdGlvbi5leHBvcnROYW1lfUNvbW1pdEhhc2hcXGAgOiB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgbmV3IENmbk91dHB1dChzdGFjaywgJ0FwcFZlcnNpb25CcmFuY2gnLCB7XG4gICAgICAgIHZhbHVlOiB2ZXJzaW9uSW5mby5icmFuY2gsXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnR2l0IGJyYW5jaCcsXG4gICAgICAgIGV4cG9ydE5hbWU6IGNvbmZpZy5vdXRwdXRzLmNsb3VkRm9ybWF0aW9uLmV4cG9ydE5hbWUgPyBcXGBcXCR7Y29uZmlnLm91dHB1dHMuY2xvdWRGb3JtYXRpb24uZXhwb3J0TmFtZX1CcmFuY2hcXGAgOiB1bmRlZmluZWQsXG4gICAgICB9KTtcblxuICAgICAgbmV3IENmbk91dHB1dChzdGFjaywgJ0FwcFZlcnNpb25JbmZvJywge1xuICAgICAgICB2YWx1ZTogSlNPTi5zdHJpbmdpZnkodmVyc2lvbkluZm8pLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0NvbXBsZXRlIHZlcnNpb24gaW5mb3JtYXRpb24nLFxuICAgICAgICBleHBvcnROYW1lOiBjb25maWcub3V0cHV0cy5jbG91ZEZvcm1hdGlvbi5leHBvcnROYW1lID8gXFxgXFwke2NvbmZpZy5vdXRwdXRzLmNsb3VkRm9ybWF0aW9uLmV4cG9ydE5hbWV9SW5mb1xcYCA6IHVuZGVmaW5lZCxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuICBcbiAgLy8gQWRkIFNTTSBQYXJhbWV0ZXIgU3RvcmUgcGFyYW1ldGVyc1xuICBpZiAoY29uZmlnLm91dHB1dHMucGFyYW1ldGVyU3RvcmU/LmVuYWJsZWQpIHtcbiAgICBpZiAoY29uZmlnLm91dHB1dHMucGFyYW1ldGVyU3RvcmUuaGllcmFyY2hpY2FsKSB7XG4gICAgICAvLyBIaWVyYXJjaGljYWwgcGFyYW1ldGVyc1xuICAgICAgY29uc3QgYmFzZVBhcmFtZXRlck5hbWUgPSAoY29uZmlnLm91dHB1dHMucGFyYW1ldGVyU3RvcmUucGFyYW1ldGVyTmFtZSB8fCAnL3tzdGFja05hbWV9L3ZlcnNpb24nKVxuICAgICAgICAucmVwbGFjZSgne3N0YWNrTmFtZX0nLCBzdGFjay5zdGFja05hbWUpXG4gICAgICAgIC5yZXBsYWNlKCd7c3RhZ2VOYW1lfScsIHN0YWdlTmFtZSk7XG4gICAgICAgIFxuICAgICAgLy8gQ3JlYXRlIGhpZXJhcmNoaWNhbCBwYXJhbWV0ZXJzXG4gICAgICBuZXcgU3RyaW5nUGFyYW1ldGVyKHN0YWNrLCAnVmVyc2lvblBhcmFtZXRlclZlcnNpb24nLCB7XG4gICAgICAgIHBhcmFtZXRlck5hbWU6IFxcYFxcJHtiYXNlUGFyYW1ldGVyTmFtZX0vdmVyc2lvblxcYCxcbiAgICAgICAgc3RyaW5nVmFsdWU6IHZlcnNpb25JbmZvLnZlcnNpb24sXG4gICAgICAgIGRlc2NyaXB0aW9uOiAnQXBwbGljYXRpb24gdmVyc2lvbicsXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgbmV3IFN0cmluZ1BhcmFtZXRlcihzdGFjaywgJ1ZlcnNpb25QYXJhbWV0ZXJDb21taXRIYXNoJywge1xuICAgICAgICBwYXJhbWV0ZXJOYW1lOiBcXGBcXCR7YmFzZVBhcmFtZXRlck5hbWV9L2NvbW1pdEhhc2hcXGAsXG4gICAgICAgIHN0cmluZ1ZhbHVlOiB2ZXJzaW9uSW5mby5jb21taXRIYXNoLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0dpdCBjb21taXQgaGFzaCcsXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgbmV3IFN0cmluZ1BhcmFtZXRlcihzdGFjaywgJ1ZlcnNpb25QYXJhbWV0ZXJCcmFuY2gnLCB7XG4gICAgICAgIHBhcmFtZXRlck5hbWU6IFxcYFxcJHtiYXNlUGFyYW1ldGVyTmFtZX0vYnJhbmNoXFxgLFxuICAgICAgICBzdHJpbmdWYWx1ZTogdmVyc2lvbkluZm8uYnJhbmNoLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0dpdCBicmFuY2gnLFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIG5ldyBTdHJpbmdQYXJhbWV0ZXIoc3RhY2ssICdWZXJzaW9uUGFyYW1ldGVySW5mbycsIHtcbiAgICAgICAgcGFyYW1ldGVyTmFtZTogXFxgXFwke2Jhc2VQYXJhbWV0ZXJOYW1lfS9pbmZvXFxgLFxuICAgICAgICBzdHJpbmdWYWx1ZTogSlNPTi5zdHJpbmdpZnkodmVyc2lvbkluZm8pLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0NvbXBsZXRlIHZlcnNpb24gaW5mb3JtYXRpb24nLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIC8vIFNpbmdsZSBwYXJhbWV0ZXJcbiAgICAgIGNvbnN0IHBhcmFtZXRlck5hbWUgPSAoY29uZmlnLm91dHB1dHMucGFyYW1ldGVyU3RvcmUucGFyYW1ldGVyTmFtZSB8fCAnL3tzdGFja05hbWV9L3ZlcnNpb24nKVxuICAgICAgICAucmVwbGFjZSgne3N0YWNrTmFtZX0nLCBzdGFjay5zdGFja05hbWUpXG4gICAgICAgIC5yZXBsYWNlKCd7c3RhZ2VOYW1lfScsIHN0YWdlTmFtZSk7XG4gICAgICAgIFxuICAgICAgbmV3IFN0cmluZ1BhcmFtZXRlcihzdGFjaywgJ1ZlcnNpb25QYXJhbWV0ZXInLCB7XG4gICAgICAgIHBhcmFtZXRlck5hbWUsXG4gICAgICAgIHN0cmluZ1ZhbHVlOiBzc21Gb3JtYXQgPT09ICdwbGFpbicgPyB2ZXJzaW9uSW5mby52ZXJzaW9uIDogSlNPTi5zdHJpbmdpZnkodmVyc2lvbkluZm8pLFxuICAgICAgICBkZXNjcmlwdGlvbjogc3NtRm9ybWF0ID09PSAncGxhaW4nID8gJ0FwcGxpY2F0aW9uIHZlcnNpb24nIDogJ0NvbXBsZXRlIHZlcnNpb24gaW5mb3JtYXRpb24nLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59YDtcbiAgfVxufVxuIl19
|
|
766
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hd3NjZGsvYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsZ0RBQWtDO0FBQ2xDLG1DQUFxRDtBQUNyRCw4Q0FBa0Q7QUFDbEQsc0RBQTJEO0FBQzNELHNDQUEyQztBQUMzQyxvQ0FBZ0o7QUFDaEosOENBQWtFO0FBdUJsRSxNQUFNO0FBQ04seURBQXlEO0FBQ3pELE1BQU07QUFDTiwrQkFBK0I7QUFDL0IsNkVBQTZFO0FBQzdFLDJCQUEyQjtBQUMzQiw0RUFBNEU7QUFDNUUseUJBQXlCO0FBQ3pCLElBQUk7QUFFSixJQUFZLFdBT1g7QUFQRCxXQUFZLFdBQVc7SUFDckIsNEJBQTRCO0lBQzVCLDZDQUFJLENBQUE7SUFDSixvREFBb0Q7SUFDcEQsNkNBQUksQ0FBQTtJQUNKLHVEQUF1RDtJQUN2RCw2Q0FBSSxDQUFBO0FBQ04sQ0FBQyxFQVBXLFdBQVcsMkJBQVgsV0FBVyxRQU90QjtBQXNNRDs7O0dBR0c7QUFDSCxNQUFzQixXQUFZLFNBQVEsa0JBQVM7SUFhM0I7SUFBMkM7O0lBWmpELFdBQVcsQ0FBUztJQUNwQixVQUFVLENBQVM7SUFFbkMsNEdBQTRHO0lBQ3pGLFVBQVUsQ0FBUztJQUV0Qzs7O09BR0c7SUFDZ0IsZ0JBQWdCLENBQXFCO0lBRXhELFlBQXNCLEdBQStCLEVBQVksV0FBK0I7UUFDOUYsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRFMsUUFBRyxHQUFILEdBQUcsQ0FBNEI7UUFBWSxnQkFBVyxHQUFYLFdBQVcsQ0FBb0I7UUFHOUYsaURBQWlEO1FBQ2pELElBQUksV0FBVyxDQUFDLGdCQUFnQixFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQztRQUN2RCxDQUFDO2FBQU0sQ0FBQztZQUNOLE1BQU0sR0FBRyxHQUFH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QUFDO1FBQ3pELE9BQU8sQ0FBQyxJQUFJLENBQUMsd0RBQXdELENBQUMsQ0FBQztRQUN2RSxPQUFPLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLENBQUM7UUFFL0MsT0FBTyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzVCLENBQUM7SUFFRDs7T0FFRztJQUNJLDJCQUEyQjtRQUNoQyxPQUFPOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0VBdUpULENBQUM7SUFDRCxDQUFDOztBQWp3Qkgsa0NBa3dCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IENvbXBvbmVudCwgVGV4dEZpbGUsIGF3c2NkayB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBQUk9KRU5fTUFSS0VSIH0gZnJvbSAncHJvamVuL2xpYi9jb21tb24nO1xuaW1wb3J0IHsgTm9kZVBhY2thZ2VNYW5hZ2VyIH0gZnJvbSAncHJvamVuL2xpYi9qYXZhc2NyaXB0JztcbmltcG9ydCB7IFBpcGVsaW5lRW5naW5lIH0gZnJvbSAnLi4vZW5naW5lJztcbmltcG9ydCB7IEF3c0Fzc3VtZVJvbGVTdGVwLCBQaXBlbGluZVN0ZXAsIFByb2plblNjcmlwdFN0ZXAsIFNpbXBsZUNvbW1hbmRTdGVwLCBTdGVwU2VxdWVuY2UsIFBucG1TZXR1cFN0ZXAsIENvcmVwYWNrU2V0dXBTdGVwIH0gZnJvbSAnLi4vc3RlcHMnO1xuaW1wb3J0IHsgVmVyc2lvbmluZ0NvbmZpZywgVmVyc2lvbmluZ1NldHVwIH0gZnJvbSAnLi4vdmVyc2lvbmluZyc7XG5cbi8qKlxuICogVGhlIEVudmlyb25tZW50IGludGVyZmFjZSBpcyBkZXNpZ25lZCB0byBob2xkIEFXUyByZWxhdGVkIGluZm9ybWF0aW9uXG4gKiBmb3IgYSBzcGVjaWZpYyBkZXBsb3ltZW50IGVudmlyb25tZW50IHdpdGhpbiB5b3VyIGluZnJhc3RydWN0dXJlLlxuICogRWFjaCBlbnZpcm9ubWVudCByZXF1aXJlcyBhIHNwZWNpZmljIGFjY291bnQgYW5kIHJlZ2lvbiBmb3IgaXRzIHJlc291cmNlcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBFbnZpcm9ubWVudCB7XG4gIC8qKlxuICAgKiBUaGUgQVdTIEFjY291bnQgSUQgYXNzb2NpYXRlZCB3aXRoIHRoZSBlbnZpcm9ubWVudC4gSXQncyBpbXBvcnRhbnQgYmVjYXVzZVxuICAgKiBkaWZmZXJlbnQgc2VydmljZXMgb3IgZmVhdHVyZXMgY291bGQgaGF2ZSBkaXN0aW5jdCBwZXJtaXNzaW9ucyBhbmQgc2V0dGluZ3NcbiAgICogaW4gZGlmZmVyZW50IGFjY291bnRzLlxuICAgKi9cbiAgcmVhZG9ubHkgYWNjb3VudDogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIFJlZ2lvbiBmb3IgdGhlIGVudmlyb25tZW50LiBUaGlzIGRldGVybWluZXMgd2hlcmUgeW91ciByZXNvdXJjZXNcbiAgICogYXJlIGNyZWF0ZWQgYW5kIHdoZXJlIHlvdXIgYXBwbGljYXRpb24gd2lsbCBydW4uIEl0IGNhbiBhZmZlY3QgbGF0ZW5jeSxcbiAgICogYXZhaWxhYmlsaXR5LCBhbmQgcHJpY2luZy5cbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbjogc3RyaW5nO1xufVxuXG4vLyAvKipcbi8vICAqIERlc2NyaWJlcyB0aGUgdHlwZSBvZiBwaXBlbGluZSB0aGF0IHdpbGwgYmUgY3JlYXRlZFxuLy8gICovXG4vLyBleHBvcnQgZW51bSBEZXBsb3ltZW50VHlwZSB7XG4vLyAgIC8qKiBEZXBsb3kgZXZlcnkgY29tbWl0IGFzIGZhciBhcyBwb3NzaWJsZTsgaG9wZWZ1bGx5IGludG8gcHJvZHVjdGlvbiAqL1xuLy8gICBDT05USU5VT1VTX0RFUExPWU1FTlQsXG4vLyAgIC8qKiBCdWlsZCBldmVyeSBjb21taXQgYW5kIHByZXBhcmUgYWxsIGFzc2V0cyBmb3IgYSBsYXRlciBkZXBsb3ltZW50ICovXG4vLyAgIENPTlRJTlVPVVNfREVMSVZFUlksXG4vLyB9XG5cbmV4cG9ydCBlbnVtIENka0RpZmZUeXBlIHtcbiAgLyoqIERvIG5vdCBwZXJmb3JtIGEgZGlmZiAqL1xuICBOT05FLFxuICAvKiogUGVyZm9ybSBhIGZhc3QgdGVtcGxhdGUgZGlmZiAoLS1uby1jaGFuZ2VzZXQpICovXG4gIEZBU1QsXG4gIC8qKiBQZXJmb3JtIGEgZnVsbCBDbG91ZEZvcm1hdGlvbiBkaWZmICgtLWNoYW5nZXNldCkgKi9cbiAgRlVMTCxcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBzdGFnZXMgdGhhdCBhcmUgcGFydCBvZiB0aGUgcGlwZWxpbmVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEZXBsb3ltZW50U3RhZ2UgZXh0ZW5kcyBOYW1lZFN0YWdlT3B0aW9ucyB7XG4gIHJlYWRvbmx5IG1hbnVhbEFwcHJvdmFsPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBPcHRpb25zIGZvciBzdGFnZXMgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlIHBpcGVsaW5lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSW5kZXBlbmRlbnRTdGFnZSBleHRlbmRzIE5hbWVkU3RhZ2VPcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoaXMgc3BlY2lmaWVzIHdoZXRoZXIgdGhlIHN0YWdlIHNob3VsZCBiZSBkZXBsb3llZCBvbiBwdXNoXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBkZXBsb3lPblB1c2g/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGEgQ0RLIHN0YWdlIHdpdGggYSBuYW1lXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmFtZWRTdGFnZU9wdGlvbnMgZXh0ZW5kcyBTdGFnZU9wdGlvbnMge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBHaXRIdWIgZW52aXJvbm1lbnQgdG8gdXNlIGZvciB0aGlzIHN0YWdlLlxuICAgKiBJZiBub3Qgc3BlY2lmaWVkLCB0aGUgc3RhZ2UgbmFtZSB3aWxsIGJlIHVzZWQgYXMgdGhlIEdpdEh1YiBlbnZpcm9ubWVudCBuYW1lLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBzdGFnZSBuYW1lXG4gICAqL1xuICByZWFkb25seSBnaXRodWJFbnZpcm9ubWVudD86IHN0cmluZztcblxuICByZWFkb25seSB3YXRjaGFibGU/OiBib29sZWFuO1xuICByZWFkb25seSBkaWZmVHlwZT86IENka0RpZmZUeXBlO1xuICByZWFkb25seSBwb3N0RGlmZlN0ZXBzPzogUGlwZWxpbmVTdGVwW107XG4gIHJlYWRvbmx5IHBvc3REZXBsb3lTdGVwcz86IFBpcGVsaW5lU3RlcFtdO1xufVxuXG4vKipcbiAqIE9wdGlvbnMgZm9yIGEgQ0RLIHN0YWdlIGxpa2UgdGhlIHRhcmdldCBlbnZpcm9ubWVudFxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN0YWdlT3B0aW9ucyB7XG4gIHJlYWRvbmx5IGVudjogRW52aXJvbm1lbnQ7XG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBpbnRlcmZhY2UgZm9yIElBTSByb2xlcyB1c2VkIGluIHRoZSBDREsgcGlwZWxpbmUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSWFtUm9sZUNvbmZpZyB7XG4gIC8qKiBEZWZhdWx0IElBTSByb2xlIEFSTiB1c2VkIGlmIG5vIHNwZWNpZmljIHJvbGUgaXMgcHJvdmlkZWQuICovXG4gIHJlYWRvbmx5IGRlZmF1bHQ/OiBzdHJpbmc7XG4gIC8qKiBJQU0gcm9sZSBBUk4gZm9yIHRoZSBzeW50aGVzaXMgc3RlcC4gKi9cbiAgcmVhZG9ubHkgc3ludGg/OiBzdHJpbmc7XG4gIC8qKiBJQU0gcm9sZSBBUk4gZm9yIHRoZSBhc3NldCBwdWJsaXNoaW5nIHN0ZXAuICovXG4gIHJlYWRvbmx5IGFzc2V0UHVibGlzaGluZz86IHN0cmluZztcbiAgLyoqIElBTSByb2xlIEFSTiBmb3IgdGhlIGFzc2V0IHB1Ymxpc2hpbmcgc3RlcCBmb3IgYSBzcGVjaWZpYyBzdGFnZS4gKi9cbiAgcmVhZG9ubHkgYXNzZXRQdWJsaXNoaW5nUGVyU3RhZ2U/OiB7IFtzdGFnZTogc3RyaW5nXTogc3RyaW5nIH07XG4gIC8qKiBJQU0gcm9sZSBBUk5zIGZvciBkaWZmZXJlbnQgZGlmZiBzdGFnZXMuICovXG4gIHJlYWRvbmx5IGRpZmY/OiB7IFtzdGFnZTogc3RyaW5nXTogc3RyaW5nIH07XG4gIC8qKiBJQU0gcm9sZSBBUk5zIGZvciBkaWZmZXJlbnQgZGVwbG95bWVudCBzdGFnZXMuICovXG4gIHJlYWRvbmx5IGRlcGxveW1lbnQ/OiB7IFtzdGFnZTogc3RyaW5nXTogc3RyaW5nIH07XG4gIC8qKlxuICAgKiBJQU0gcm9sZSBBUk5zIGZvciB1c2luZyBhIFwianVtcFwiIHJvbGUgdG8gYXNzdW1lIHRoZSBkZXBsb3kgcm9sZSBpbiBhIGRpZmZlcmVudCBBV1MgYWNjb3VudCB1c2luZyBSb2xlIENoYWluaW5nLlxuICAgKiBodHRwczovL2dpdGh1Yi5jb20vYXdzLWFjdGlvbnMvY29uZmlndXJlLWF3cy1jcmVkZW50aWFscz90YWI9cmVhZG1lLW92LWZpbGUjYXNzdW1lcm9sZS13aXRoLXJvbGUtcHJldmlvdXNseS1hc3N1bWVkLWJ5LWFjdGlvbi1pbi1zYW1lLXdvcmtmbG93XG4gICAqICovXG4gIHJlYWRvbmx5IGp1bXA/OiB7IFtzdGFnZTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbi8qKlxuICogVGhlIENES1BpcGVsaW5lT3B0aW9ucyBpbnRlcmZhY2UgaXMgZGVzaWduZWQgdG8gcHJvdmlkZSBjb25maWd1cmF0aW9uXG4gKiBvcHRpb25zIGZvciBhIENESyAoQ2xvdWQgRGV2ZWxvcG1lbnQgS2l0KSBwaXBlbGluZS4gSXQgYWxsb3dzIHRoZSBkZWZpbml0aW9uXG4gKiBvZiBzZXR0aW5ncyBzdWNoIGFzIHRoZSBzdGFjayBwcmVmaXggYW5kIHBhY2thZ2UgbmFtZXNwYWNlIHRvIGJlIHVzZWQgaW4gdGhlXG4gKiBBV1Mgc3RhY2ssIGFsb25nIHdpdGggdGhlIGVudmlyb25tZW50cyBjb25maWd1cmF0aW9uIHRvIGJlIHVzZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ0RLUGlwZWxpbmVPcHRpb25zIHtcblxuICAvKipcbiAgICogQSB1bmlxdWUgbmFtZSBmb3IgdGhpcyBwaXBlbGluZSwgdXNlZCBhcyBhIHByZWZpeCBmb3Igd29ya2Zsb3cgZmlsZXMsXG4gICAqIGNvbmN1cnJlbmN5IGdyb3VwcywgYW5kIGFydGlmYWN0IG5hbWVzIHRvIHByZXZlbnQgY29sbGlzaW9ucyBpbiBtb25vcmVwb3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIHByb2plY3QgbmFtZSBpZiB0aGUgcHJvamVjdCBoYXMgYSBwYXJlbnQgKG1vbm9yZXBvIHN1YnByb2plY3QpLCBvdGhlcndpc2Ugbm8gcHJlZml4XG4gICAqL1xuICByZWFkb25seSBwaXBlbGluZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIHRoZSBuYW1lIG9mIHRoZSBicmFuY2ggdG8gZGVwbG95IGZyb21cbiAgICogQGRlZmF1bHQgbWFpblxuICAgKi9cbiAgcmVhZG9ubHkgYnJhbmNoTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogRmlsZSBwYXRoIHBhdHRlcm5zIHRoYXQgc2hvdWxkIHRyaWdnZXIgdGhlIHBpcGVsaW5lIHdoZW4gY2hhbmdlZC5cbiAgICogVGhpcyBpcyB1c2VmdWwgZm9yIG1vbm9yZXBvcyB3aGVyZSB5b3Ugb25seSB3YW50IHRvIHJ1biB0aGUgcGlwZWxpbmVcbiAgICogd2hlbiBmaWxlcyBpbiBhIHNwZWNpZmljIHN1YnByb2plY3QgYXJlIG1vZGlmaWVkLlxuICAgKlxuICAgKiBGb3IgR2l0SHViLCB0aGVzZSBhcmUgdXNlZCBhcyBgb24ucHVzaC5wYXRoc2AgYW5kIGBvbi5wdWxsX3JlcXVlc3QucGF0aHNgIGZpbHRlcnMuXG4gICAqIEZvciBHaXRMYWIsIHRoZXNlIGFyZSB1c2VkIGFzIGBvbmx5LmNoYW5nZXNgIGZpbHRlcnMuXG4gICAqXG4gICAqIEBleGFtcGxlIFsncGFja2FnZXMvbXktYXBwLyoqJywgJ3NoYXJlZC1saWJzLyoqJ11cbiAgICogQGRlZmF1bHQgLSBhbGwgcGF0aHMgdHJpZ2dlciB0aGUgcGlwZWxpbmVcbiAgICovXG4gIHJlYWRvbmx5IHBhdGhzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoaXMgZmllbGQgaXMgdXNlZCB0byBkZWZpbmUgYSBwcmVmaXggZm9yIHRoZSBBV1MgU3RhY2sgcmVzb3VyY2VzIGNyZWF0ZWRcbiAgICogZHVyaW5nIHRoZSBwaXBlbGluZSdzIG9wZXJhdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgcHJvamVjdCBuYW1lXG4gICAqL1xuICByZWFkb25seSBzdGFja1ByZWZpeD86IHN0cmluZztcblxuICAvKipcbiAgICogSWYgc2V0IHRvIHRydWUgYWxsIENESyBhY3Rpb25zIHdpbGwgYWxzbyBpbmNsdWRlIDxzdGFja05hbWU+LyogdG8gZGVwbG95L2RpZmYvZGVzdHJveSBzdWIgc3RhY2tzIG9mIHRoZSBtYWluIHN0YWNrLlxuICAgKiBZb3UgY2FuIHVzZSB0aGlzIHRvIGRlcGxveSBDRGsgYXBwbGljYXRpb25zIGNvbnRhaW5pbmcgbXVsdGlwbGUgc3RhY2tzLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVwbG95U3ViU3RhY2tzPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhpcyBmaWVsZCBkZXRlcm1pbmVzIHRoZSBOUE0gbmFtZXNwYWNlIHRvIGJlIHVzZWQgd2hlbiBwYWNrYWdpbmcgQ0RLIGNsb3VkXG4gICAqIGFzc2VtYmxpZXMuIEEgbmFtZXNwYWNlIGhlbHBzIGdyb3VwIHJlbGF0ZWQgcmVzb3VyY2VzIHRvZ2V0aGVyLCBwcm92aWRpbmdcbiAgICogYmV0dGVyIG9yZ2FuaXphdGlvbiBhbmQgZWFzZSBvZiBtYW5hZ2VtZW50LlxuICAgKlxuICAgKiBUaGlzIGlzIG9ubHkgbmVlZGVkIGlmIHlvdSBuZWVkIHRvIHZlcnNpb24gYW5kIHVwbG9hZCB0aGUgY2xvdWQgYXNzZW1ibHkgdG8gYSBwYWNrYWdlIHJlcG9zaXRvcnkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC1cbiAgICovXG4gIHJlYWRvbmx5IHBrZ05hbWVzcGFjZT86IHN0cmluZztcblxuICAvKiogSUFNIGNvbmZpZyAqL1xuICByZWFkb25seSBpYW1Sb2xlQXJuczogSWFtUm9sZUNvbmZpZztcblxuICAvKipcbiAgICogVGhpcyBmaWVsZCBzcGVjaWZpZXMgYSBsaXN0IG9mIHN0YWdlcyB0aGF0IHNob3VsZCBiZSBkZXBsb3llZCB1c2luZyBhIENJL0NEIHBpcGVsaW5lXG4gICAqL1xuICByZWFkb25seSBzdGFnZXM6IERlcGxveW1lbnRTdGFnZVtdO1xuXG4gIC8qKiBUaGlzIHNwZWNpZmllcyBkZXRhaWxzIGZvciBpbmRlcGVuZGVudCBzdGFnZXMgKi9cbiAgcmVhZG9ubHkgaW5kZXBlbmRlbnRTdGFnZXM/OiBJbmRlcGVuZGVudFN0YWdlW107XG5cbiAgLyoqIFRoaXMgc3BlY2lmaWVzIGRldGFpbHMgZm9yIGEgcGVyc29uYWwgc3RhZ2UgKi9cbiAgcmVhZG9ubHkgcGVyc29uYWxTdGFnZT86IFN0YWdlT3B0aW9ucztcblxuICAvKiogVGhpcyBzcGVjaWZpZXMgZGV0YWlscyBmb3IgZmVhdHVyZSBzdGFnZXMgKi9cbiAgcmVhZG9ubHkgZmVhdHVyZVN0YWdlcz86IFN0YWdlT3B0aW9ucztcblxuICAvLyAvKipcbiAgLy8gICogVGhpcyBmaWVsZCBzcGVjaWZpZXMgdGhlIHR5cGUgb2YgcGlwZWxpbmUgdG8gY3JlYXRlLiBJZiBzZXQgdG8gQ09OVElOVU9VU19ERVBMT1lNRU5ULFxuICAvLyAgKiBldmVyeSBjb21taXQgaXMgZGVwbG95ZWQgYXMgZmFyIGFzIHBvc3NpYmxlLCBob3BlZnVsbHkgaW50byBwcm9kdWN0aW9uLiBJZiBzZXQgdG9cbiAgLy8gICogQ09OVElOVU9VU19ERUxJVkVSWSwgZXZlcnkgY29tbWl0IGlzIGJ1aWx0IGFuZCBhbGwgYXNzZXRzIGFyZSBwcmVwYXJlZCBmb3IgYSBsYXRlciBkZXBsb3ltZW50LlxuICAvLyAgKlxuICAvLyAgKiBAZGVmYXVsdCBDT05USU5VT1VTX0RFTElWRVJZXG4gIC8vICAqL1xuICAvLyByZWFkb25seSBkZXBsb3ltZW50VHlwZT86IERlcGxveW1lbnRUeXBlO1xuXG4gIHJlYWRvbmx5IHByZUluc3RhbGxDb21tYW5kcz86IHN0cmluZ1tdO1xuICByZWFkb25seSBwcmVTeW50aENvbW1hbmRzPzogc3RyaW5nW107XG4gIHJlYWRvbmx5IHBvc3RTeW50aENvbW1hbmRzPzogc3RyaW5nW107XG5cbiAgcmVhZG9ubHkgcHJlSW5zdGFsbFN0ZXBzPzogUGlwZWxpbmVTdGVwW107XG4gIHJlYWRvbmx5IHByZVN5bnRoU3RlcHM/OiBQaXBlbGluZVN0ZXBbXTtcbiAgcmVhZG9ubHkgcG9zdFN5bnRoU3RlcHM/OiBQaXBlbGluZVN0ZXBbXTtcblxuICAvKipcbiAgICogVGhlIHdvcmtpbmcgZGlyZWN0b3J5IGZvciB0aGUgcGlwZWxpbmUgcmVsYXRpdmUgdG8gdGhlIHJlcG9zaXRvcnkgcm9vdC5cbiAgICogVGhpcyBpcyBhdXRvbWF0aWNhbGx5IGNvbXB1dGVkIGZvciBzdWJwcm9qZWN0cyBidXQgY2FuIGJlIGV4cGxpY2l0bHkgc2V0LlxuICAgKlxuICAgKiBXaGVuIHNldCwgQ0kgam9icyB3aWxsIHJ1biBjb21tYW5kcyBpbiB0aGlzIGRpcmVjdG9yeSwgYW5kIGFydGlmYWN0IHBhdGhzXG4gICAqIHdpbGwgYmUgcHJlZml4ZWQgYWNjb3JkaW5nbHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYXV0b21hdGljYWxseSBjb21wdXRlZCBmcm9tIHRoZSBwcm9qZWN0J3MgcG9zaXRpb24gaW4gdGhlIG1vbm9yZXBvIChlbXB0eSBzdHJpbmcgZm9yIHJvb3QgcHJvamVjdHMpXG4gICAqL1xuICByZWFkb25seSB3b3JraW5nRGlyZWN0b3J5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBBIGNvbW1hbmQgdG8gcnVuIGJlZm9yZSB0aGUgYnVpbGQgc3RlcCwgZXhlY3V0ZWQgZnJvbSB0aGUgcmVwb3NpdG9yeSByb290LlxuICAgKiBXaGVuIGEgd29ya2luZ0RpcmVjdG9yeSBpcyBzZXQgKG1vbm9yZXBvIHN1YnByb2plY3QpLCB0aGUgY29tbWFuZCBpc1xuICAgKiBhdXRvbWF0aWNhbGx5IHdyYXBwZWQgdG8gZXhlY3V0ZSBmcm9tIHRoZSByZXBvc2l0b3J5IHJvb3QgcmVnYXJkbGVzcyBvZlxuICAgKiB0aGUgam9iJ3Mgd29ya2luZyBkaXJlY3Rvcnkgc2V0dGluZy5cbiAgICpcbiAgICogRm9yIHBucG0gd29ya3NwYWNlczogYHBucG0gLXIgLS1maWx0ZXIgPGFwcG5hbWU+Xi4uLiBydW4gYnVpbGRgXG4gICAqIEZvciBucG0gd29ya3NwYWNlczogYG5wbSBydW4gYnVpbGQgLS13b3Jrc3BhY2VzIC0taWYtcHJlc2VudGBcbiAgICogRm9yIHlhcm4gd29ya3NwYWNlczogYHlhcm4gd29ya3NwYWNlcyBmb3JlYWNoIC1SdCBydW4gYnVpbGRgXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm8gcHJlLWJ1aWxkIGNvbW1hbmRcbiAgICovXG4gIHJlYWRvbmx5IHByZUJ1aWxkQ29tbWFuZD86IHN0cmluZztcblxuICAvKipcbiAgICogVmVyc2lvbmluZyBjb25maWd1cmF0aW9uXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uaW5nPzogVmVyc2lvbmluZ0NvbmZpZztcbn1cblxuLyoqXG4gKiBUaGUgQ0RLUGlwZWxpbmUgY2xhc3MgZXh0ZW5kcyB0aGUgQ29tcG9uZW50IGNsYXNzIGFuZCBzZXRzIHVwIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBmb3IgZGVwbG95aW5nIEFXUyBDREsgKENsb3VkIERldmVsb3BtZW50IEtpdCkgYXBwbGljYXRpb25zIGFjcm9zcyBtdWx0aXBsZSBzdGFnZXMuXG4gKiBJdCBhbHNvIG1hbmFnZXMgdGFza3Mgc3VjaCBhcyBwdWJsaXNoaW5nIENESyBhc3NldHMsIGJ1bXBpbmcgdmVyc2lvbiBiYXNlZCBvbiBnaXQgdGFncywgYW5kIGNsZWFuaW5nIHVwIGNvbmZsaWN0aW5nIHRhc2tzLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ0RLUGlwZWxpbmUgZXh0ZW5kcyBDb21wb25lbnQge1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhY2tQcmVmaXg6IHN0cmluZztcbiAgcHVibGljIHJlYWRvbmx5IGJyYW5jaE5hbWU6IHN0cmluZztcblxuICAvKiogUHJlZml4IGZvciB3b3JrZmxvdyBmaWxlcywgY29uY3VycmVuY3kgZ3JvdXBzLCBhbmQgYXJ0aWZhY3QgbmFtZXMgdG8gcHJldmVudCBjb2xsaXNpb25zIGluIG1vbm9yZXBvcy4gKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IG5hbWVQcmVmaXg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHdvcmtpbmcgZGlyZWN0b3J5IHJlbGF0aXZlIHRvIHRoZSByZXBvc2l0b3J5IHJvb3QgZm9yIHRoaXMgcGlwZWxpbmUuXG4gICAqIFVuZGVmaW5lZCB3aGVuIHRoZSBwaXBlbGluZSBpcyBhdCB0aGUgcmVwb3NpdG9yeSByb290LlxuICAgKi9cbiAgcHJvdGVjdGVkIHJlYWRvbmx5IHdvcmtpbmdEaXJlY3Rvcnk6IHN0cmluZyB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3Rvcihwcm90ZWN0ZWQgYXBwOiBhd3NjZGsuQXdzQ2RrVHlwZVNjcmlwdEFwcCwgcHJvdGVjdGVkIGJhc2VPcHRpb25zOiBDREtQaXBlbGluZU9wdGlvbnMpIHtcbiAgICBzdXBlcihhcHApO1xuXG4gICAgLy8gQ29tcHV0ZSB3b3JraW5nIGRpcmVjdG9yeSBmb3IgbW9ub3JlcG8gc3VwcG9ydFxuICAgIGlmIChiYXNlT3B0aW9ucy53b3JraW5nRGlyZWN0b3J5KSB7XG4gICAgICB0aGlzLndvcmtpbmdEaXJlY3RvcnkgPSBiYXNlT3B0aW9ucy53b3JraW5nRGlyZWN0b3J5O1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zdCByZWwgPSBwYXRoLnJlbGF0aXZlKHRoaXMuYXBwLnJvb3Qub3V0ZGlyLCB0aGlzLmFwcC5vdXRkaXIpLnJlcGxhY2UoL1xcXFwvZywgJy8nKTtcbiAgICAgIHRoaXMud29ya2luZ0RpcmVjdG9yeSA9IHJlbCB8fCB1bmRlZmluZWQ7XG4gICAgfVxuXG4gICAgLy8gQWRkIGRldmVsb3BtZW50IGRlcGVuZGVuY2llc1xuICAgIHRoaXMuYXBwLmFkZERldkRlcHMoXG4gICAgICAnY29tbWl0LWFuZC10YWctdmVyc2lvbicsXG4gICAgICAnY2RrLWFzc2V0cycsXG4gICAgKTtcbiAgICAvLyB0aGlzLmFwcC5hZGREZXBzKFxuICAgIC8vICk7XG4gICAgdGhpcy5wcm9qZWN0LmdpdGlnbm9yZS5leGNsdWRlKCcvY2RrLW91dHB1dHMtKi5qc29uJyk7XG5cbiAgICBjb25zdCBwaXBlbGluZU5hbWUgPSBiYXNlT3B0aW9ucy5waXBlbGluZU5hbWUgPz8gKGFwcC5wYXJlbnQgPyBhcHAubmFtZSA6IHVuZGVmaW5lZCk7XG4gICAgdGhpcy5uYW1lUHJlZml4ID0gcGlwZWxpbmVOYW1lID8gYCR7cGlwZWxpbmVOYW1lfS1gIDogJyc7XG4gICAgdGhpcy5zdGFja1ByZWZpeCA9IGJhc2VPcHRpb25zLnN0YWNrUHJlZml4ID8/IGFwcC5uYW1lO1xuICAgIHRoaXMuYnJhbmNoTmFtZSA9IGJhc2VPcHRpb25zLmJyYW5jaE5hbWUgPz8gJ21haW4nOyAvLyBUT0RPIHVzZSBkZWZhdWx0UmVsZWFzZUJyYW5jaCBvZiBOb2RlUHJvamVjdFxuXG4gICAgLy8gUmVtb3ZlcyB0aGUgY29tcGlsZWQgY2xvdWQgYXNzZW1ibHkgYmVmb3JlIGVhY2ggc3ludGhcbiAgICB0aGlzLnByb2plY3QudGFza3MudHJ5RmluZCgnc3ludGgnKT8ucHJlcGVuZEV4ZWMoYHJtIC1yZiAke3RoaXMuYXBwLmNka0NvbmZpZy5jZGtvdXR9YCk7XG4gICAgdGhpcy5wcm9qZWN0LnRhc2tzLnRyeUZpbmQoJ3N5bnRoOnNpbGVudCcpPy5wcmVwZW5kRXhlYyhgcm0gLXJmICR7dGhpcy5hcHAuY2RrQ29uZmlnLmNka291dH1gKTtcblxuICAgIC8vIFJlbW92ZSB0YXNrcyB0aGF0IG1pZ2h0IGNvbmZsaWN0IHdpdGggdGhlIHBpcGVsaW5lIHByb2Nlc3NcbiAgICB0aGlzLnByb2plY3QucmVtb3ZlVGFzaygnZGVwbG95Jyk7XG4gICAgdGhpcy5wcm9qZWN0LnJlbW92ZVRhc2soJ2RpZmYnKTtcbiAgICB0aGlzLnByb2plY3QucmVtb3ZlVGFzaygnZGVzdHJveScpO1xuICAgIHRoaXMucHJvamVjdC5yZW1vdmVUYXNrKCd3YXRjaCcpO1xuXG4gICAgLy8gU2V0dXAgdmVyc2lvbmluZyBpZiBlbmFibGVkXG4gICAgaWYgKGJhc2VPcHRpb25zLnZlcnNpb25pbmc/LmVuYWJsZWQpIHtcbiAgICAgIG5ldyBWZXJzaW9uaW5nU2V0dXAodGhpcy5wcm9qZWN0LCBiYXNlT3B0aW9ucy52ZXJzaW9uaW5nKS5zZXR1cCgpO1xuICAgIH1cblxuICAgIC8vIENyZWF0ZXMgZGlmZmVyZW50IGRlcGxveW1lbnQgc3RhZ2VzXG4gICAgaWYgKGJhc2VPcHRpb25zLnBlcnNvbmFsU3RhZ2UpIHtcbiAgICAgIHRoaXMuY3JlYXRlUGVyc29uYWxTdGFnZSgpO1xuICAgIH1cbiAgICBpZiAoYmFzZU9wdGlvbnMuZmVhdHVyZVN0YWdlcykge1xuICAgICAgdGhpcy5jcmVhdGVGZWF0dXJlU3RhZ2UoKTtcbiAgICB9XG4gICAgZm9yIChjb25zdCBzdGFnZSBvZiBiYXNlT3B0aW9ucy5zdGFnZXMpIHtcbiAgICAgIHRoaXMuY3JlYXRlUGlwZWxpbmVTdGFnZShzdGFnZSk7XG4gICAgfVxuICAgIGZvciAoY29uc3Qgc3RhZ2Ugb2YgKGJhc2VPcHRpb25zLmluZGVwZW5kZW50U3RhZ2VzID8/IFtdKSkge1xuICAgICAgdGhpcy5jcmVhdGVJbmRlcGVuZGVudFN0YWdlKHN0YWdlKTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGVzIHRhc2tzIHRvIGhhbmRsZSB0aGUgcmVsZWFzZSBwcm9jZXNzXG4gICAgdGhpcy5jcmVhdGVSZWxlYXNlVGFza3MoKTtcblxuICAgIC8vIENyZWF0ZXMgYSBzcGVjaWFsaXplZCBDREsgQXBwIGNsYXNzXG4gICAgdGhpcy5jcmVhdGVBcHBsaWNhdGlvbkVudHJ5cG9pbnQoKTtcblxuICB9XG5cbiAgcHVibGljIGFic3RyYWN0IGVuZ2luZVR5cGUoKTogUGlwZWxpbmVFbmdpbmU7XG5cbiAgcHJvdGVjdGVkIHByb3ZpZGVJbnN0YWxsU3RlcCgpOiBQaXBlbGluZVN0ZXAge1xuICAgIGNvbnN0IHNlcSA9IG5ldyBTdGVwU2VxdWVuY2UodGhpcy5wcm9qZWN0LCB0aGlzLmJhc2VPcHRpb25zLnByZUluc3RhbGxTdGVwcyA/PyBbXSk7XG5cbiAgICAvLyBEZXRlY3QgYW5kIGFkZCBwbnBtIHNldHVwIGlmIG5lZWRlZCAoR2l0SHViIG9ubHkpXG4gICAgaWYgKHRoaXMuYXBwLnBhY2thZ2UucGFja2FnZU1hbmFnZXIgPT09IE5vZGVQYWNrYWdlTWFuYWdlci5QTlBNICYmIHRoaXMuZW5naW5lVHlwZSgpID09PSBQaXBlbGluZUVuZ2luZS5HSVRIVUIpIHtcbiAgICAgIHNlcS5hZGRTdGVwcyhuZXcgUG5wbVNldHVwU3RlcCh0aGlzLnByb2plY3QsIHtcbiAgICAgICAgdmVyc2lvbjogKHRoaXMuYXBwLnBhY2thZ2UgYXMgYW55KS5wbnBtVmVyc2lvbixcbiAgICAgIH0pKTtcbiAgICB9XG5cbiAgICAvLyBEZXRlY3QgYW5kIGFkZCBjb3JlcGFjayBlbmFibGUgZm9yIFlhcm4gQmVycnlcbiAgICBpZiAodGhpcy5hcHAucGFja2FnZS5wYWNrYWdlTWFuYWdlciA9PT0gTm9kZVBhY2thZ2VNYW5hZ2VyLllBUk5fQkVSUlkpIHtcbiAgICAgIHNlcS5hZGRTdGVwcyhuZXcgQ29yZXBhY2tTZXR1cFN0ZXAodGhpcy5wcm9qZWN0KSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYmFzZU9wdGlvbnMucHJlSW5zdGFsbENvbW1hbmRzKSB7XG4gICAgICBzZXEuYWRkU3RlcHMobmV3IFNpbXBsZUNvbW1hbmRTdGVwKHRoaXMucHJvamVjdCwgdGhpcy5iYXNlT3B0aW9ucy5wcmVJbnN0YWxsQ29tbWFuZHMpKTtcbiAgICB9XG4gICAgc2VxLmFkZFN0ZXBzKG5ldyBTaW1wbGVDb21tYW5kU3RlcCh0aGlzLnByb2plY3QsIFt0aGlzLmFwcC5wYWNrYWdlLmluc3RhbGxDb21tYW5kXSkpO1xuICAgIHJldHVybiBzZXE7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvdmlkZVN5bnRoU3RlcCgpOiBQaXBlbGluZVN0ZXAge1xuICAgIGNvbnN0IHNlcSA9IG5ldyBTdGVwU2VxdWVuY2UodGhpcy5wcm9qZWN0LCBbXSk7XG5cbiAgICBpZiAodGhpcy5iYXNlT3B0aW9ucy5pYW1Sb2xlQXJucz8uc3ludGgpIHtcbiAgICAgIHNlcS5hZGRTdGVwcyhuZXcgQXdzQXNzdW1lUm9sZVN0ZXAodGhpcy5wcm9qZWN0LCB7XG4gICAgICAgIHJvbGVBcm46IHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnMuc3ludGgsXG4gICAgICAgIGp1bXBSb2xlQXJuOiB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zLmp1bXA/LnN5bnRoLFxuICAgICAgfSkpO1xuICAgIH1cblxuICAgIHNlcS5hZGRTdGVwcyguLi50aGlzLmJhc2VPcHRpb25zLnByZVN5bnRoU3RlcHMgPz8gW10pO1xuICAgIGlmICh0aGlzLmJhc2VPcHRpb25zLnByZVN5bnRoQ29tbWFuZHMpIHtcbiAgICAgIHNlcS5hZGRTdGVwcyhuZXcgU2ltcGxlQ29tbWFuZFN0ZXAodGhpcy5wcm9qZWN0LCB0aGlzLmJhc2VPcHRpb25zLnByZVN5bnRoQ29tbWFuZHMpKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5iYXNlT3B0aW9ucy5wcmVCdWlsZENvbW1hbmQpIHtcbiAgICAgIHNlcS5hZGRTdGVwcyhuZXcgU2ltcGxlQ29tbWFuZFN0ZXAodGhpcy5wcm9qZWN0LCBbdGhpcy5wcmVCdWlsZENvbW1hbmRXcmFwcGVkKCldKSk7XG4gICAgfVxuXG4gICAgc2VxLmFkZFN0ZXBzKG5ldyBQcm9qZW5TY3JpcHRTdGVwKHRoaXMucHJvamVjdCwgJ2J1aWxkJykpO1xuXG4gICAgc2VxLmFkZFN0ZXBzKC4uLnRoaXMuYmFzZU9wdGlvbnMucG9zdFN5bnRoU3RlcHMgPz8gW10pO1xuICAgIGlmICh0aGlzLmJhc2VPcHRpb25zLnBvc3RTeW50aENvbW1hbmRzKSB7XG4gICAgICBzZXEuYWRkU3RlcHMobmV3IFNpbXBsZUNvbW1hbmRTdGVwKHRoaXMucHJvamVjdCwgdGhpcy5iYXNlT3B0aW9ucy5wb3N0U3ludGhDb21tYW5kcykpO1xuICAgIH1cbiAgICByZXR1cm4gc2VxO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIHByZUJ1aWxkQ29tbWFuZCB3cmFwcGVkIHRvIGV4ZWN1dGUgZnJvbSB0aGUgcmVwb3NpdG9yeSByb290LlxuICAgKiBXaGVuIHdvcmtpbmdEaXJlY3RvcnkgaXMgc2V0LCB0aGUgY29tbWFuZCBpcyBwcmVmaXhlZCB3aXRoIGEgY2QgdG8gdGhlXG4gICAqIHJlcG8gcm9vdCB1c2luZyBlbmdpbmUtYXBwcm9wcmlhdGUgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICAgKi9cbiAgcHJpdmF0ZSBwcmVCdWlsZENvbW1hbmRXcmFwcGVkKCk6IHN0cmluZyB7XG4gICAgY29uc3QgY21kID0gdGhpcy5iYXNlT3B0aW9ucy5wcmVCdWlsZENvbW1hbmQhO1xuICAgIGlmICghdGhpcy53b3JraW5nRGlyZWN0b3J5KSB7XG4gICAgICByZXR1cm4gY21kO1xuICAgIH1cbiAgICBzd2l0Y2ggKHRoaXMuZW5naW5lVHlwZSgpKSB7XG4gICAgICBjYXNlIFBpcGVsaW5lRW5naW5lLkdJVEhVQjpcbiAgICAgICAgcmV0dXJuIGBjZCAkR0lUSFVCX1dPUktTUEFDRSAmJiAke2NtZH1gO1xuICAgICAgY2FzZSBQaXBlbGluZUVuZ2luZS5HSVRMQUI6XG4gICAgICAgIHJldHVybiBgKGNkICRDSV9QUk9KRUNUX0RJUiAmJiAke2NtZH0pYDtcbiAgICAgIGNhc2UgUGlwZWxpbmVFbmdpbmUuQkFTSDpcbiAgICAgICAgcmV0dXJuIGAoY2QgXCIkKGdpdCByZXYtcGFyc2UgLS1zaG93LXRvcGxldmVsKVwiICYmICR7Y21kfSlgO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIGNtZDtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvdmlkZUFzc2V0VXBsb2FkU3RlcChzdGFnZU5hbWU/OiBzdHJpbmcpOiBQaXBlbGluZVN0ZXAge1xuICAgIGNvbnN0IHNlcSA9IG5ldyBTdGVwU2VxdWVuY2UodGhpcy5wcm9qZWN0LCBbXSk7XG5cbiAgICBjb25zdCBnbG9iYWxQdWJsaXNoUm9sZSA9IHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnMuYXNzZXRQdWJsaXNoaW5nID8/IHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnMuZGVmYXVsdCE7XG4gICAgaWYgKHN0YWdlTmFtZSkge1xuICAgICAgc2VxLmFkZFN0ZXBzKG5ldyBBd3NBc3N1bWVSb2xlU3RlcCh0aGlzLnByb2plY3QsIHtcbiAgICAgICAgcm9sZUFybjogdGhpcy5iYXNlT3B0aW9ucy5pYW1Sb2xlQXJucy5hc3NldFB1Ymxpc2hpbmdQZXJTdGFnZSA/XG4gICAgICAgICAgKHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnMuYXNzZXRQdWJsaXNoaW5nUGVyU3RhZ2Vbc3RhZ2VOYW1lXSA/PyBnbG9iYWxQdWJsaXNoUm9sZSkgOlxuICAgICAgICAgIGdsb2JhbFB1Ymxpc2hSb2xlLFxuICAgICAgICBqdW1wUm9sZUFybjogdGhpcy5iYXNlT3B0aW9ucy5pYW1Sb2xlQXJucy5qdW1wPy5bc3RhZ2VOYW1lXSxcbiAgICAgIH0pKTtcbiAgICAgIHNlcS5hZGRTdGVwcyhuZXcgUHJvamVuU2NyaXB0U3RlcCh0aGlzLnByb2plY3QsIGBwdWJsaXNoOmFzc2V0czoke3N0YWdlTmFtZX1gKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zLmFzc2V0UHVibGlzaGluZ1BlclN0YWdlKSB7XG4gICAgICAgIGNvbnN0IHN0YWdlcyA9IFsuLi50aGlzLmJhc2VPcHRpb25zLnN0YWdlcywgLi4udGhpcy5iYXNlT3B0aW9ucy5pbmRlcGVuZGVudFN0YWdlcyA/PyBbXV07XG4gICAgICAgIGZvciAoY29uc3Qgc3RhZ2Ugb2Ygc3RhZ2VzKSB7XG4gICAgICAgICAgc2VxLmFkZFN0ZXBzKG5ldyBBd3NBc3N1bWVSb2xlU3RlcCh0aGlzLnByb2plY3QsIHtcbiAgICAgICAgICAgIHJvbGVBcm46IHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnMuYXNzZXRQdWJsaXNoaW5nUGVyU3RhZ2Vbc3RhZ2UubmFtZV0gPz8gZ2xvYmFsUHVibGlzaFJvbGUsXG4gICAgICAgICAgICBqdW1wUm9sZUFybjogdGhpcy5iYXNlT3B0aW9ucy5pYW1Sb2xlQXJucy5qdW1wPy5bc3RhZ2UubmFtZV0sXG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIHNlcS5hZGRTdGVwcyhuZXcgUHJvamVuU2NyaXB0U3RlcCh0aGlzLnByb2plY3QsIGBwdWJsaXNoOmFzc2V0czoke3N0YWdlLm5hbWV9YCkpO1xuICAgICAgICB9XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBzZXEuYWRkU3RlcHMobmV3IEF3c0Fzc3VtZVJvbGVTdGVwKHRoaXMucHJvamVjdCwge1xuICAgICAgICAgIHJvbGVBcm46IGdsb2JhbFB1Ymxpc2hSb2xlLFxuICAgICAgICAgIGp1bXBSb2xlQXJuOiB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zLmp1bXA/LmFzc2V0UHVibGlzaGluZyxcbiAgICAgICAgfSkpO1xuICAgICAgICBzZXEuYWRkU3RlcHMobmV3IFByb2plblNjcmlwdFN0ZXAodGhpcy5wcm9qZWN0LCAncHVibGlzaDphc3NldHMnKSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgcmV0dXJuIHNlcTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcm92aWRlQXNzZW1ibHlVcGxvYWRTdGVwKCk6IFBpcGVsaW5lU3RlcCB7XG4gICAgaWYgKCF0aGlzLmJhc2VPcHRpb25zLnBrZ05hbWVzcGFjZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdwa2dOYW1lc3BhY2UgaXMgcmVxdWlyZWQgd2hlbiB1c2luZyB2ZXJzaW9uZWQgYXJ0aWZhY3RzIChlLmcuIG1hbnVhbCBhcHByb3ZhbHMpJyk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgU3RlcFNlcXVlbmNlKHRoaXMucHJvamVjdCwgW1xuICAgICAgbmV3IFByb2plblNjcmlwdFN0ZXAodGhpcy5wcm9qZWN0LCAnYnVtcCcpLFxuICAgICAgbmV3IFByb2plblNjcmlwdFN0ZXAodGhpcy5wcm9qZWN0LCAncmVsZWFzZTpwdXNoLWFzc2VtYmx5JyksXG4gICAgXSk7XG4gIH1cblxuICBwcm90ZWN0ZWQgcHJvdmlkZURlcGxveVN0ZXAoc3RhZ2U6IE5hbWVkU3RhZ2VPcHRpb25zKTogUGlwZWxpbmVTdGVwIHtcbiAgICByZXR1cm4gbmV3IFN0ZXBTZXF1ZW5jZSh0aGlzLnByb2plY3QsIFtcbiAgICAgIG5ldyBBd3NBc3N1bWVSb2xlU3RlcCh0aGlzLnByb2plY3QsIHtcbiAgICAgICAgcm9sZUFybjogdGhpcy5iYXNlT3B0aW9ucy5pYW1Sb2xlQXJucz8uZGVwbG95bWVudD8uW3N0YWdlLm5hbWVdID8/IHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnM/LmRlZmF1bHQhLFxuICAgICAgICByZWdpb246IHN0YWdlLmVudi5yZWdpb24sXG4gICAgICAgIGp1bXBSb2xlQXJuOiB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zLmp1bXA/LltzdGFnZS5uYW1lXSxcbiAgICAgIH0pLFxuICAgICAgbmV3IFByb2plblNjcmlwdFN0ZXAodGhpcy5wcm9qZWN0LCBgZGVwbG95OiR7c3RhZ2UubmFtZX1gKSxcbiAgICAgIC4uLnN0YWdlLnBvc3REZXBsb3lTdGVwcyA/PyBbXSxcbiAgICBdKTtcbiAgfVxuXG4gIHByb3RlY3RlZCBwcm92aWRlRGlmZlN0ZXAoc3RhZ2U6IE5hbWVkU3RhZ2VPcHRpb25zLCBmYXN0PzogYm9vbGVhbik6IFBpcGVsaW5lU3RlcCB7XG4gICAgcmV0dXJuIG5ldyBTdGVwU2VxdWVuY2UodGhpcy5wcm9qZWN0LCBbXG4gICAgICBuZXcgQXdzQXNzdW1lUm9sZVN0ZXAodGhpcy5wcm9qZWN0LCB7XG4gICAgICAgIHJvbGVBcm46IHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnM/LmRpZmY/LltzdGFnZS5uYW1lXSA/P1xuICAgICAgICAgIHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnM/LmRlcGxveW1lbnQ/LltzdGFnZS5uYW1lXSA/P1xuICAgICAgICAgIHRoaXMuYmFzZU9wdGlvbnMuaWFtUm9sZUFybnM/LmRlZmF1bHQhLFxuICAgICAgICByZWdpb246IHN0YWdlLmVudi5yZWdpb24sXG4gICAgICAgIGp1bXBSb2xlQXJuOiB0aGlzLmJhc2VPcHRpb25zLmlhbVJvbGVBcm5zLmp1bXA/LltzdGFnZS5uYW1lXSxcbiAgICAgIH0pLFxuICAgICAgbmV3IFByb2plblNjcmlwdFN0ZXAodGhpcy5wcm9qZWN0LCBmYXN0ID8gYGZhc3RkaWZmOiR7c3RhZ2UubmFtZX1gIDogYGRpZmY6JHtzdGFnZS5uYW1lfWApLFxuICAgICAgLi4uc3RhZ2UucG9zdERpZmZTdGVwcyA/PyBbXSxcbiAgICBdKTtcbiAgfVxuXG4gIHByb3RlY3RlZCByZW5kZXJJbnN0YWxsUGFja2FnZUNvbW1hbmRzKHBhY2thZ2VOYW1lOiBzdHJpbmcsIHJ1blByZUluc3RhbGxDb21tYW5kczogYm9vbGVhbiA9IGZhbHNlKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGNvbW1hbmRzID0gcnVuUHJlSW5zdGFsbENvbW1hbmRzID8gdGhpcy5iYXNlT3B0aW9ucy5wcmVJbnN0YWxsQ29tbWFuZHMgPz8gW10gOiBbXTtcblxuICAgIHN3aXRjaCAodGhpcy5hcHAucGFja2FnZS5wYWNrYWdlTWFuYWdlcikge1xuICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuWUFSTjpcbiAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLllBUk4yOlxuICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuWUFSTl9CRVJSWTpcbiAgICAgIGNhc2UgTm9kZVBhY2thZ2VNYW5hZ2VyLllBUk5fQ0xBU1NJQzpcbiAgICAgICAgY29tbWFuZHMucHVzaChgeWFybiBhZGQgJHtwYWNrYWdlTmFtZX1gKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlIE5vZGVQYWNrYWdlTWFuYWdlci5OUE06XG4gICAgICAgIGNvbW1hbmRzLnB1c2goYG5wbSBpbnN0YWxsICR7cGFja2FnZU5hbWV9YCk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSBOb2RlUGFja2FnZU1hbmFnZXIuUE5QTTpcbiAgICAgICAgY29tbWFuZHMucHVzaChgcG5wbSBhZGQgJHtwYWNrYWdlTmFtZX1gKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vIGluc3RhbGwgc2NyaXB0cyBmb3IgcGFja2FnZU1hbmFnZXI6ICcgKyB0aGlzLmFwcC5wYWNrYWdlLnBhY2thZ2VNYW5hZ2VyKTtcbiAgICB9XG4gICAgcmV0dXJuIGNvbW1hbmRzO1xuICB9XG5cbiAgcHJvdGVjdGVkIGNyZWF0ZVNhZmVTdGFnZU5hbWUobmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICAvLyBSZW1vdmUgbm9uLWFscGhhbnVtZXJpYyBjaGFyYWN0ZXJzIGFuZCBzcGxpdCBpbnRvIHdvcmRzXG4gICAgY29uc3Qgd29yZHMgPSBuYW1lLnJlcGxhY2UoL1teYS16QS1aMC05XSsvZywgJyAnKS50cmltKCkuc3BsaXQoL1xccysvKTtcblxuICAgIC8vIENhcGl0YWxpemUgdGhlIGZpcnN0IGxldHRlciBvZiBlYWNoIHdvcmQgYW5kIGpvaW4gdGhlbVxuICAgIHJldHVybiB3b3Jkcy5tYXAoKHdvcmQpID0+IHtcbiAgICAgIHJldHVybiB3b3JkLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgd29yZC5zbGljZSgxKS50b0xvd2VyQ2FzZSgpO1xuICAgIH0pLmpvaW4oJycpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIGdlbmVyYXRlcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoZSBhcHBsaWNhdGlvbiwgaW5jbHVkaW5nIGludGVyZmFjZXMgYW5kIGNsYXNzZXNcbiAgICogbmVjZXNzYXJ5IHRvIHNldCB1cCB0aGUgcGlwZWxpbmUgYW5kIGRlZmluZSB0aGUgQVdTIENESyBzdGFja3MgZm9yIGRpZmZlcmVudCBlbnZpcm9ubWVudHMuXG4gICAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlQXBwbGljYXRpb25FbnRyeXBvaW50KCkge1xuICAgIGxldCBwcm9wc0NvZGUgPSAnJztcbiAgICBsZXQgYXBwQ29kZSA9ICcnO1xuICAgIGxldCBzZXAgPSAnLSc7XG4gICAgaWYgKHRoaXMuc3RhY2tQcmVmaXggPT09ICcnKSB7XG4gICAgICBzZXAgPSAnJztcbiAgICB9XG5cblxuICAgIGlmICh0aGlzLmJhc2VPcHRpb25zLnBlcnNvbmFsU3RhZ2UpIHtcbiAgICAgIHByb3BzQ29kZSArPSBgICAvKiogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIHVzZWQgdG8gZ2VuZXJhdGUgYSBwZXJzb25hbCBzdGFjay4gKi9cbiAgcHJvdmlkZVBlcnNvbmFsU3RhY2s6IChhcHA6IEFwcCwgc3RhY2tJZDogc3RyaW5nLCBwcm9wczogUGlwZWxpbmVBcHBTdGFja1Byb3BzKSA9PiBTdGFjaztcbmA7XG4gICAgICBhcHBDb2RlICs9IGAgICAgLy8gSWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFVTRVIgaXMgc2V0IGFuZCBhIGZ1bmN0aW9uIGlzIHByb3ZpZGVkIGZvciBjcmVhdGluZyBhIHBlcnNvbmFsIHN0YWNrLCBpdCBpcyBjYWxsZWQgd2l0aCBuZWNlc3NhcnkgYXJndW1lbnRzLlxuICAgIGlmIChwcm9wcy5wcm92aWRlUGVyc29uYWxTdGFjayAmJiBwcm9jZXNzLmVudi5VU0VSKSB7XG4gICAgICBjb25zdCBzdGFnZU5hbWUgPSAncGVyc29uYWwtJyArIHByb2Nlc3MuZW52LlVTRVIudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXFxcXFwvL2csICctJyk7XG4gICAgICBwcm9wcy5wcm92aWRlUGVyc29uYWxTdGFjayh0aGlzLCAnJHt0aGlzLnN0YWNrUHJlZml4fSR7c2VwfXBlcnNvbmFsJywgeyBlbnY6IHsgYWNjb3VudDogJyR7dGhpcy5iYXNlT3B0aW9ucy5wZXJzb25hbFN0YWdlLmVudi5hY2NvdW50fScsIHJlZ2lvbjogJyR7dGhpcy5iYXNlT3B0aW9ucy5wZXJzb25hbFN0YWdlLmVudi5yZWdpb259JyB9LCBzdGFja05hbWU6IFxcYCR7dGhpcy5zdGFja1ByZWZpeH0ke3NlcH1cXCR7c3RhZ2VOYW1lfVxcYCwgc3RhZ2VOYW1lIH0pO1xuICAgIH1cbmA7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuYmFzZU9wdGlvbnMuZmVhdHVyZVN0YWdlcykge1xuICAgICAgcHJvcHNDb2RlICs9IGAgIC8qKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgdXNlZCB0byBnZW5lcmF0ZSBhIGZlYXR1cmUgc3RhY2suICovXG4gIHByb3ZpZGVGZWF0dXJlU3RhY2s6IChhcHA6IEFwcCwgc3RhY2tJZDogc3RyaW5nLCBwcm9wczogUGlwZWxpbmVBcHBTdGFja1Byb3BzKSA9PiBTdGFjaztcbmA7XG4gICAgICBhcHBDb2RlICs9IGAgICAgLy8gSWYgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIEJSQU5DSCBpcyBzZXQgYW5kIGEgZnVuY3Rpb24gaXMgcHJvdmlkZWQgZm9yIGNyZWF0aW5nIGEgZmVhdHVyZSBzdGFjaywgaXQgaXMgY2FsbGVkIHdpdGggbmVjZXNzYXJ5IGFyZ3VtZW50cy5cbiAgICBpZiAocHJvcHMucHJvdmlkZUZlYXR1cmVTdGFjayAmJiBwcm9jZXNzLmVudi5CUkFOQ0gpIHtcbiAgICAgIGNvbnN0IHN0YWdlTmFtZSA9ICdmZWF0dXJlLScgKyBwcm9jZXNzLmVudi5CUkFOQ0gudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9cXFxcXFwvL2csICctJyk7XG4gICAgICBwcm9wcy5wcm92aWRlRmVhdHVyZVN0YWNrKHRoaXMsICcke3RoaXMuc3RhY2tQcmVmaXh9JHtzZXB9ZmVhdHVyZScsIHsgZW52OiB7IGFjY291bnQ6ICcke3RoaXMuYmFzZU9wdGlvbnMuZmVhdHVyZVN0YWdlcy5lbnYuYWNjb3VudH0nLCByZWdpb246ICcke3RoaXMuYmFzZU9wdGlvbnMuZmVhdHVyZVN0YWdlcy5lbnYucmVnaW9ufScgfSwgc3RhY2tOYW1lOiBcXGAke3RoaXMuc3RhY2tQcmVmaXh9JHtzZXB9XFwke3N0YWdlTmFtZX1cXGAsIHN0YWdlTmFtZSB9KTtcbiAgICB9XG5gO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc3RhZ2Ugb2YgdGhpcy5iYXNlT3B0aW9ucy5zdGFnZXMpIHtcbiAgICAgIGNvbnN0IG5hbWVVcHBlckZpcnN0ID0gdGhpcy5jcmVhdGVTYWZlU3RhZ2VOYW1lKHN0YWdlLm5hbWUpO1xuXG4gICAgICBwcm9wc0NvZGUgKz0gYCAgLyoqIFRoaXMgZnVuY3Rpb24gd2lsbCBiZSB1c2VkIHRvIGdlbmVyYXRlIGEgJHtzdGFnZS5uYW1lfSBzdGFjay4gKi9cbiAgcHJvdmlkZSR7bmFtZVVwcGVyRmlyc3R9U3RhY2s6IChhcHA6IEFwcCwgc3RhY2tJZDogc3RyaW5nLCBwcm9wczogUGlwZWxpbmVBcHBTdGFja1Byb3BzKSA9PiBTdGFjaztcbmA7XG4gICAgICBhcHBDb2RlICs9IGAgICAgLy8gSWYgYSBmdW5jdGlvbiBpcyBwcm92aWRlZCBmb3IgY3JlYXRpbmcgYSAke3N0YWdlLm5hbWV9IHN0YWNrLCBpdCBpcyBjYWxsZWQgd2l0aCBuZWNlc3NhcnkgYXJndW1lbnRzLlxuICAgIGlmIChwcm9wcy5wcm92aWRlJHtuYW1lVXBwZXJGaXJzdH1TdGFjaykge1xuICAgICAgcHJvcHMucHJvdmlkZSR7bmFtZVVwcGVyRmlyc3R9U3RhY2sodGhpcywgJyR7dGhpcy5zdGFja1ByZWZpeH0ke3NlcH0ke3N0YWdlLm5hbWV9JywgeyBlbnY6IHsgYWNjb3VudDogJyR7c3RhZ2UuZW52LmFjY291bnR9JywgcmVnaW9uOiAnJHtzdGFnZS5lbnYucmVnaW9ufScgfSwgc3RhY2tOYW1lOiAnJHt0aGlzLnN0YWNrUHJlZml4fSR7c2VwfSR7c3RhZ2UubmFtZX0nLCBzdGFnZU5hbWU6ICcke3N0YWdlLm5hbWV9JyB9KTtcbiAgICB9XG5gO1xuICAgIH1cblxuICAgIGZvciAoY29uc3Qgc3RhZ2Ugb2YgKHRoaXMuYmFzZU9wdGlvbnMuaW5kZXBlbmRlbnRTdGFnZXMgPz8gW10pKSB7XG4gICAgICBjb25zdCBuYW1lVXBwZXJGaXJzdCA9IHRoaXMuY3JlYXRlU2FmZVN0YWdlTmFtZShzdGFnZS5uYW1lKTtcblxuICAgICAgcHJvcHNDb2RlICs9IGAgIC8qKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgdXNlZCB0byBnZW5lcmF0ZSBhICR7c3RhZ2UubmFtZX0gc3RhY2suICovXG4gIHByb3ZpZGUke25hbWVVcHBlckZpcnN0fVN0YWNrOiAoYXBwOiBBcHAsIHN0YWNrSWQ6IHN0cmluZywgcHJvcHM6IFBpcGVsaW5lQXBwU3RhY2tQcm9wcykgPT4gU3RhY2s7XG5gO1xuICAgICAgYXBwQ29kZSArPSBgICAgIC8vIElmIGEgZnVuY3Rpb24gaXMgcHJvdmlkZWQgZm9yIGNyZWF0aW5nIGEgJHtzdGFnZS5uYW1lfSBzdGFjaywgaXQgaXMgY2FsbGVkIHdpdGggbmVjZXNzYXJ5IGFyZ3VtZW50cy5cbiAgICBpZiAocHJvcHMucHJvdmlkZSR7bmFtZVVwcGVyRmlyc3R9U3RhY2spIHtcbiAgICAgIHByb3BzLnByb3ZpZGUke25hbWVVcHBlckZpcnN0fVN0YWNrKHRoaXMsICcke3RoaXMuc3RhY2tQcmVmaXh9JHtzZXB9JHtzdGFnZS5uYW1lfScsIHsgZW52OiB7IGFjY291bnQ6ICcke3N0YWdlLmVudi5hY2NvdW50fScsIHJlZ2lvbjogJyR7c3RhZ2UuZW52LnJlZ2lvbn0nIH0sIHN0YWNrTmFtZTogJyR7dGhpcy5zdGFja1ByZWZpeH0ke3NlcH0ke3N0YWdlLm5hbWV9Jywgc3RhZ2VOYW1lOiAnJHtzdGFnZS5uYW1lfScgfSk7XG4gICAgfVxuYDtcbiAgICB9XG5cbiAgICAvLyBBZGQgdmVyc2lvbmluZyBsb2dpYyB0byBhcHBseSB0byBhbGwgc3RhY2tzXG4gICAgaWYgKHRoaXMuYmFzZU9wdGlvbnMudmVyc2lvbmluZz8uZW5hYmxlZCkge1xuICAgICAgYXBwQ29kZSArPSB0aGlzLmdlbmVyYXRlVmVyc2lvbmluZ0FwcENvZGUodGhpcy5iYXNlT3B0aW9ucy52ZXJzaW9uaW5nKTtcbiAgICB9XG5cbiAgICBjb25zdCBhcHBGaWxlID0gbmV3IFRleHRGaWxlKHRoaXMucHJvamVjdCwgYCR7dGhpcy5hcHAuc3JjZGlyfS9hcHAudHNgKTtcblxuICAgIC8vIEdlbmVyYXRlIHZlcnNpb25pbmctYXdhcmUgaW1wb3J0cyBhbmQgdXRpbGl0aWVzXG4gICAgY29uc3QgdmVyc2lvbmluZ0ltcG9ydHMgPSB0aGlzLmJhc2VPcHRpb25zLnZlcnNpb25pbmc/LmVuYWJsZWRcbiAgICAgID8gdGhpcy5nZW5lcmF0ZVZlcnNpb25pbmdJbXBvcnRzKClcbiAgICAgIDogJyc7XG5cbiAgICBjb25zdCB2ZXJzaW9uaW5nVXRpbGl0aWVzID0gdGhpcy5iYXNlT3B0aW9ucy52ZXJzaW9uaW5nPy5lbmFibGVkXG4gICAgICA/IHRoaXMuZ2VuZXJhdGVWZXJzaW9uaW5nVXRpbGl0aWVzKClcbiAgICAgIDogJyc7XG5cbiAgICBjb25zdCB2ZXJzaW9uaW5nQ29uZmlnRGVjbGFyYXRpb24gPSB0aGlzLmJhc2VPcHRpb25zLnZlcnNpb25pbmc/LmVuYWJsZWRcbiAgICAgID8gYFxuY29uc3QgdmVyc2lvbmluZ0NvbmZpZyA9ICR7SlNPTi5zdHJpbmdpZnkodGhpcy5iYXNlT3B0aW9ucy52ZXJzaW9uaW5nLCBudWxsLCAyKX07XG5gXG4gICAgICA6ICcnO1xuXG4gICAgYXBwRmlsZS5hZGRMaW5lKGAvLyAke1BST0pFTl9NQVJLRVJ9XG4vKiBlc2xpbnQtZGlzYWJsZSAqL1xuaW1wb3J0IHsgQXBwLCBBcHBQcm9wcywgU3RhY2ssIFN0YWNrUHJvcHMgfSBmcm9tICdhd3MtY2RrLWxpYic7XG4ke3ZlcnNpb25pbmdJbXBvcnRzfVxuJHt2ZXJzaW9uaW5nQ29uZmlnRGVjbGFyYXRpb259XG4ke3ZlcnNpb25pbmdVdGlsaXRpZXN9XG5cbi8qKlxuICogUGlwZWxpbmVBcHBQcm9wcyBpcyBhbiBleHRlbnNpb24gb2YgQXBwUHJvcHMsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIEFXUyBDREsgY29yZS5cbiAqIEl0IGluY2x1ZGVzIG9wdGlvbmFsIGZ1bmN0aW9ucyB0byBwcm92aWRlIEFXUyBTdGFja3MgZm9yIGRpZmZlcmVudCBzdGFnZXMuXG4gKlxuICogVXNlIHRoZXNlIGZ1bmN0aW9ucyB0byBpbnN0YW50aWF0ZSB5b3VyIGFwcGxpY2F0aW9uIHN0YWNrcyB3aXRoIHRoZSBwYXJhbWV0ZXJzIGZvclxuICogZWFjaCBzdGFnZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFBpcGVsaW5lQXBwUHJvcHMgZXh0ZW5kcyBBcHBQcm9wcyB7XG4ke3Byb3BzQ29kZX1cbn1cblxuLyoqXG4gKiBQaXBlbGluZUFwcFN0YWNrUHJvcHMgaXMgYW4gZXh0ZW5zaW9uIG9mIFN0YWNrUHJvcHMsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIEFXUyBDREsgY29yZS5cbiAqIEl0IGluY2x1ZGVzIGFuIGFkZGl0aW9uYWwgcHJvcGVydHkgdG8gc3BlY2lmeSB0aGUgc3RhZ2UgbmFtZS5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBQaXBlbGluZUFwcFN0YWNrUHJvcHMgZXh0ZW5kcyBTdGFja1Byb3BzIHtcbiAgc3RhZ2VOYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIFBpcGVsaW5lQXBwIGNsYXNzIGV4dGVuZHMgdGhlIEFwcCBjbGFzcyBmcm9tIEFXUyBDREsgYW5kIG92ZXJyaWRlcyB0aGUgY29uc3RydWN0b3IgdG8gc3VwcG9ydFxuICogZGlmZmVyZW50IHN0YWdlcyBvZiB0aGUgYXBwbGljYXRpb24gKGRldmVsb3BtZW50LCBwcm9kdWN0aW9uLCBwZXJzb25hbCwgZmVhdHVyZSkgYnkgaW52b2tpbmcgdGhlIHByb3ZpZGVkXG4gKiBzdGFjay1wcm92aWRpbmcgZnVuY3Rpb25zIGZyb20gdGhlIHByb3BzLlxuICovXG5leHBvcnQgY2xhc3MgUGlwZWxpbmVBcHAgZXh0ZW5kcyBBcHAge1xuICBjb25zdHJ1Y3Rvcihwcm9wczogUGlwZWxpbmVBcHBQcm9wcykge1xuICAgIHN1cGVyKHByb3BzKTtcblxuJHthcHBDb2RlfVxuXG4gIH1cbn1cbmApO1xuICB9XG5cblxuICAvKipcbiAgICogVGhpcyBtZXRob2Qgc2V0cyB1cCB0YXNrcyB0byBwdWJsaXNoIENESyBhc3NldHMgdG8gYWxsIGFjY291bnRzIGFuZCBoYW5kbGUgdmVyc2lvbmluZywgaW5jbHVkaW5nIGJ1bXBpbmcgdGhlIHZlcnNpb25cbiAgICogYmFzZWQgb24gdGhlIGxhdGVzdCBnaXQgdGFnIGFuZCBwdXNoaW5nIHRoZSBDREsgYXNzZW1ibHkgdG8gdGhlIHBhY2thZ2UgcmVwb3NpdG9yeS5cbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVSZWxlYXNlVGFza3MoKSB7XG4gICAgY29uc3Qgc3RhZ2VzID0gWy4uLnRoaXMuYmFzZU9wdGlvbnMuc3RhZ2VzLCAuLi50aGlzLmJhc2VPcHRpb25zLmluZGVwZW5kZW50U3RhZ2VzID8/IFtdXTtcbiAgICBsZXQgc2VwID0gJy0nO1xuICAgIGlmICh0aGlzLnN0YWNrUHJlZml4ID09PSAnJykge1xuICAgICAgc2VwID0gJyc7XG4gICAgfVxuICAgIC8vIFRhc2sgdG8gcHVibGlzaCB0aGUgQ0RLIGFzc2V0cyB0byBhbGwgYWNjb3VudHNcbiAgICBmb3IgKGNvbnN0IHN0YWdlIG9mIHN0YWdlcykge1xuICAgICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soYHB1Ymxpc2g6YXNzZXRzOiR7c3RhZ2UubmFtZX1gLCB7XG4gICAgICAgIHN0ZXBzOiBbe1xuICAgICAgICAgIGV4ZWM6IGBucHggY2RrLWFzc2V0cyAtcCAke3RoaXMuYXBwLmNka0NvbmZpZy5jZGtvdXR9LyR7dGhpcy5zdGFja1ByZWZpeH0ke3NlcH0ke3N0YWdlLm5hbWV9LmFzc2V0cy5qc29uIHB1Ymxpc2hgLFxuICAgICAgICB9XSxcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLnByb2plY3QuYWRkVGFzaygncHVibGlzaDphc3NldHMnLCB7XG4gICAgICBzdGVwczogc3RhZ2VzLm1hcChzdGFnZSA9PiAoe1xuICAgICAgICBzcGF3bjogYHB1Ymxpc2g6YXNzZXRzOiR7c3RhZ2UubmFtZX1gLFxuICAgICAgfSkpLFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMuYmFzZU9wdGlvbnMucGtnTmFtZXNwYWNlKSB7XG4gICAgICB0aGlzLnByb2plY3QuYWRkVGFzaygnYnVtcCcsIHtcbiAgICAgICAgZGVzY3JpcHRpb246ICdCdW1wcyB2ZXJzaW9uIGJhc2VkIG9uIGxhdGVzdCBnaXQgdGFnJyxcbiAgICAgICAgc3RlcHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBleGVjOiAncGlwZWxpbmVzLXJlbGVhc2UgYnVtcCcsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBleGVjOiAnZ2l0IHB1c2ggLS10YWdzJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG4gICAgICB0aGlzLnByb2plY3QuYWRkVGFzaygncmVsZWFzZTpwdXNoLWFzc2VtYmx5Jywge1xuICAgICAgICBzdGVwczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIGV4ZWM6IGBwaXBlbGluZXMtcmVsZWFzZSBjcmVhdGUtbWFuaWZlc3QgXCIke3RoaXMuYXBwLmNka0NvbmZpZy5jZGtvdXR9XCIgIFwiJHt0aGlzLmJhc2VPcHRpb25zLnBrZ05hbWVzcGFjZX1cImAsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBjd2Q6IHRoaXMuYXBwLmNka0NvbmZpZy5jZGtvdXQsXG4gICAgICAgICAgICBleGVjOiAnbnBtIHZlcnNpb24gLS1uby1naXQtdGFnLXZlcnNpb24gZnJvbS1naXQnLFxuICAgICAgICAgIH0sXG4gICAgICAgICAge1xuICAgICAgICAgICAgY3dkOiB0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0LFxuICAgICAgICAgICAgZXhlYzogJ25wbSBwdWJsaXNoJyxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSk7XG4gICAgfVxuXG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2Qgc2V0cyB1cCB0YXNrcyBmb3IgdGhlIHBlcnNvbmFsIGRlcGxveW1lbnQgc3RhZ2UsIGluY2x1ZGluZyBkZXBsb3ltZW50LCB3YXRjaGluZyBmb3IgY2hhbmdlcyxcbiAgICogY29tcGFyaW5nIGNoYW5nZXMgKGRpZmYpLCBhbmQgZGVzdHJveWluZyB0aGUgc3RhY2sgd2hlbiBubyBsb25nZXIgbmVlZGVkLlxuICAgKi9cbiAgcHJvdGVjdGVkIGNyZWF0ZVBlcnNvbmFsU3RhZ2UoKSB7XG4gICAgY29uc3Qgc3RhY2tJZCA9IHRoaXMuZ2V0Q2xpU3RhY2tQYXR0ZXJuKCdwZXJzb25hbCcpO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKCdkZXBsb3k6cGVyc29uYWwnLCB7XG4gICAgICBleGVjOiBgY2RrIGRlcGxveSAtLW91dHB1dHMtZmlsZSBjZGstb3V0cHV0cy1wZXJzb25hbC5qc29uICR7c3RhY2tJZH1gLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKCd3YXRjaDpwZXJzb25hbCcsIHtcbiAgICAgIGV4ZWM6IGBjZGsgZGVwbG95IC0tb3V0cHV0cy1maWxlIGNkay1vdXRwdXRzLXBlcnNvbmFsLmpzb24gLS13YXRjaCAtLWhvdHN3YXAgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soJ2RpZmY6cGVyc29uYWwnLCB7XG4gICAgICBleGVjOiBgY2RrIGRpZmYgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soJ2Zhc3RkaWZmOnBlcnNvbmFsJywge1xuICAgICAgZXhlYzogYGNkayBkaWZmIC0tbm8tY2hhbmdlc2V0ICR7c3RhY2tJZH1gLFxuICAgIH0pO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKCdkZXN0cm95OnBlcnNvbmFsJywge1xuICAgICAgZXhlYzogYGNkayBkZXN0cm95ICR7c3RhY2tJZH1gLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoaXMgbWV0aG9kIHNldHMgdXAgdGFza3MgZm9yIHRoZSBmZWF0dXJlIGRlcGxveW1lbnQgc3RhZ2UsIGluY2x1ZGluZyBkZXBsb3ltZW50LCBjb21wYXJpbmcgY2hhbmdlcyAoZGlmZiksXG4gICAqIGFuZCBkZXN0cm95aW5nIHRoZSBzdGFjayB3aGVuIG5vIGxvbmdlciBuZWVkZWQuXG4gICAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlRmVhdHVyZVN0YWdlKCkge1xuICAgIGNvbnN0IHN0YWNrSWQgPSB0aGlzLmdldENsaVN0YWNrUGF0dGVybignZmVhdHVyZScpO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKCdkZXBsb3k6ZmVhdHVyZScsIHtcbiAgICAgIGV4ZWM6IGBjZGsgLS1vdXRwdXRzLWZpbGUgY2RrLW91dHB1dHMtZmVhdHVyZS5qc29uIC0tcHJvZ3Jlc3MgZXZlbnRzIC0tcmVxdWlyZS1hcHByb3ZhbCBuZXZlciBkZXBsb3kgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soJ2RpZmY6ZmVhdHVyZScsIHtcbiAgICAgIGV4ZWM6IGBjZGsgZGlmZiAke3N0YWNrSWR9YCxcbiAgICB9KTtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzaygnZmFzdGRpZmY6ZmVhdHVyZScsIHtcbiAgICAgIGV4ZWM6IGBjZGsgZGlmZiAtLW5vLWNoYW5nZXNldCAke3N0YWNrSWR9YCxcbiAgICB9KTtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzaygnZGVzdHJveTpmZWF0dXJlJywge1xuICAgICAgZXhlYzogYGNkayBkZXN0cm95IC0tZm9yY2UgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soJ3dhdGNoOmZlYXR1cmUnLCB7XG4gICAgICBleGVjOiBgY2RrIGRlcGxveSAtLW91dHB1dHMtZmlsZSBjZGstb3V0cHV0cy1mZWF0dXJlLmpzb24gLS13YXRjaCAtLWhvdHN3YXAgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2Qgc2V0cyB1cCB0YXNrcyBmb3IgdGhlIGdlbmVyYWwgcGlwZWxpbmUgc3RhZ2VzIChkZXYsIHByb2QpLCBpbmNsdWRpbmcgZGVwbG95bWVudCBhbmQgY29tcGFyaW5nIGNoYW5nZXMgKGRpZmYpLlxuICAgKiBAcGFyYW0ge0RlcGxveVN0YWdlT3B0aW9uc30gc3RhZ2UgLSBUaGUgc3RhZ2UgdG8gY3JlYXRlXG4gICAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlUGlwZWxpbmVTdGFnZShzdGFnZTogRGVwbG95bWVudFN0YWdlKSB7XG4gICAgY29uc3Qgc3RhY2tJZCA9IHRoaXMuZ2V0Q2xpU3RhY2tQYXR0ZXJuKHN0YWdlLm5hbWUpO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKGBkZXBsb3k6JHtzdGFnZS5uYW1lfWAsIHtcbiAgICAgIGV4ZWM6IGBjZGsgLS1hcHAgJHt0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0fSAtLW91dHB1dHMtZmlsZSBjZGstb3V0cHV0cy0ke3N0YWdlLm5hbWV9Lmpzb24gLS1wcm9ncmVzcyBldmVudHMgLS1yZXF1aXJlLWFwcHJvdmFsIG5ldmVyIGRlcGxveSAke3N0YWNrSWR9YCxcbiAgICB9KTtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzayhgZGlmZjoke3N0YWdlLm5hbWV9YCwge1xuICAgICAgZXhlYzogYGNkayAtLWFwcCAke3RoaXMuYXBwLmNka0NvbmZpZy5jZGtvdXR9IGRpZmYgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soYGZhc3RkaWZmOiR7c3RhZ2UubmFtZX1gLCB7XG4gICAgICBleGVjOiBgY2RrIC0tYXBwICR7dGhpcy5hcHAuY2RrQ29uZmlnLmNka291dH0gZGlmZiAtLW5vLWNoYW5nZXNldCAke3N0YWNrSWR9YCxcbiAgICB9KTtcbiAgICBpZiAoc3RhZ2Uud2F0Y2hhYmxlKSB7XG4gICAgICB0aGlzLnByb2plY3QuYWRkVGFzayhgd2F0Y2g6JHtzdGFnZS5uYW1lfWAsIHtcbiAgICAgICAgZXhlYzogYGNkayBkZXBsb3kgLS1vdXRwdXRzLWZpbGUgY2RrLW91dHB1dHMtJHtzdGFnZS5uYW1lfS5qc29uIC0td2F0Y2ggLS1ob3Rzd2FwICR7c3RhY2tJZH1gLFxuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIEFkZCB2ZXJzaW9uIGZldGNoIHRhc2sgaWYgdmVyc2lvbmluZyBpcyBlbmFibGVkXG4gICAgaWYgKHRoaXMuYmFzZU9wdGlvbnMudmVyc2lvbmluZz8uZW5hYmxlZCkge1xuICAgICAgdGhpcy5jcmVhdGVWZXJzaW9uRmV0Y2hUYXNrKHN0YWdlKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogVGhpcyBtZXRob2Qgc2V0cyB1cCB0YXNrcyBmb3IgdGhlIGluZGVwZW5kZW50IHN0YWdlcyBpbmNsdWRpbmcgZGVwbG95bWVudCBhbmQgY29tcGFyaW5nIGNoYW5nZXMgKGRpZmYpLlxuICAgKiBAcGFyYW0ge05hbWVkU3RhZ2VPcHRpb25zfSBzdGFnZSAtIFRoZSBzdGFnZSB0byBjcmVhdGVcbiAgICovXG4gIHByb3RlY3RlZCBjcmVhdGVJbmRlcGVuZGVudFN0YWdlKHN0YWdlOiBJbmRlcGVuZGVudFN0YWdlKSB7XG4gICAgY29uc3Qgc3RhY2tJZCA9IHRoaXMuZ2V0Q2xpU3RhY2tQYXR0ZXJuKHN0YWdlLm5hbWUpO1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKGBkZXBsb3k6JHtzdGFnZS5uYW1lfWAsIHtcbiAgICAgIGV4ZWM6IGBjZGsgLS1hcHAgJHt0aGlzLmFwcC5jZGtDb25maWcuY2Rrb3V0fSAtLW91dHB1dHMtZmlsZSBjZGstb3V0cHV0cy0ke3N0YWdlLm5hbWV9Lmpzb24gLS1wcm9ncmVzcyBldmVudHMgLS1yZXF1aXJlLWFwcHJvdmFsIG5ldmVyIGRlcGxveSAke3N0YWNrSWR9YCxcbiAgICB9KTtcbiAgICB0aGlzLnByb2plY3QuYWRkVGFzayhgZGlmZjoke3N0YWdlLm5hbWV9YCwge1xuICAgICAgZXhlYzogYGNkayAtLWFwcCAke3RoaXMuYXBwLmNka0NvbmZpZy5jZGtvdXR9IGRpZmYgJHtzdGFja0lkfWAsXG4gICAgfSk7XG4gICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soYGZhc3RkaWZmOiR7c3RhZ2UubmFtZX1gLCB7XG4gICAgICBleGVjOiBgY2RrIC0tYXBwICR7dGhpcy5hcHAuY2RrQ29uZmlnLmNka291dH0gZGlmZiAtLW5vLWNoYW5nZXNldCAke3N0YWNrSWR9YCxcbiAgICB9KTtcbiAgICBpZiAoc3RhZ2Uud2F0Y2hhYmxlKSB7XG4gICAgICB0aGlzLnByb2plY3QuYWRkVGFzayhgd2F0Y2g6JHtzdGFnZS5uYW1lfWAsIHtcbiAgICAgICAgZXhlYzogYGNkayBkZXBsb3kgLS1vdXRwdXRzLWZpbGUgY2RrLW91dHB1dHMtJHtzdGFnZS5uYW1lfS5qc29uIC0td2F0Y2ggLS1ob3Rzd2FwICR7c3RhY2tJZH1gLFxuICAgICAgfSk7XG4gICAgfVxuICAgIC8vIEFkZCB2ZXJzaW9uIGZldGNoIHRhc2sgaWYgdmVyc2lvbmluZyBpcyBlbmFibGVkXG4gICAgaWYgKHRoaXMuYmFzZU9wdGlvbnMudmVyc2lvbmluZz8uZW5hYmxlZCkge1xuICAgICAgdGhpcy5jcmVhdGVWZXJzaW9uRmV0Y2hUYXNrKHN0YWdlKTtcbiAgICB9XG4gIH1cblxuICBwcm90ZWN0ZWQgZ2V0Q2xpU3RhY2tQYXR0ZXJuKHN0YWdlOiBzdHJpbmcpIHtcbiAgICBsZXQgc2VwID0gJy0nO1xuICAgIGlmICh0aGlzLnN0YWNrUHJlZml4ID09PSAnJykge1xuICAgICAgc2VwID0gJyc7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmJhc2VPcHRpb25zLmRlcGxveVN1YlN0YWNrcyA/IGAke3RoaXMuc3RhY2tQcmVmaXh9JHtzZXB9JHtzdGFnZX0gJHt0aGlzLnN0YWNrUHJlZml4fSR7c2VwfSR7c3RhZ2V9LypgIDogYCR7dGhpcy5zdGFja1ByZWZpeH0ke3NlcH0ke3N0YWdlfWA7XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlIHZlcnNpb246ZmV0Y2g6PHN0YWdlPiB0YXNrIHRvIGZldGNoIHZlcnNpb24gZGF0YSBmcm9tIGRlcGxveWVkIHN0YWNrXG4gICAqL1xuICBwcm90ZWN0ZWQgY3JlYXRlVmVyc2lvbkZldGNoVGFzayhzdGFnZTogTmFtZWRTdGFnZU9wdGlvbnMpOiB2b2lkIHtcbiAgICBjb25zdCBzdGFja05hbWUgPSBgJHt0aGlzLnN0YWNrUHJlZml4fSR7dGhpcy5zdGFja1ByZWZpeCA/ICctJyA6ICcnfSR7c3RhZ2UubmFtZX1gO1xuICAgIGNvbnN0IHN0YWdlQ29uZmlnID0gdGhpcy5iYXNlT3B0aW9ucy52ZXJzaW9uaW5nPy5zdGFnZU92ZXJyaWRlcz8uW3N0YWdlLm5hbWVdIHx8IHRoaXMuYmFzZU9wdGlvbnMudmVyc2lvbmluZztcblxuICAgIGlmICghc3RhZ2VDb25maWc/Lm91dHB1dHMpIHJldHVybjtcblxuICAgIGNvbnN0IGNvbW1hbmRzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgLy8gRmV0Y2ggZnJvbSBDbG91ZEZvcm1hdGlvbiBvdXRwdXRzXG4gICAgaWYgKHN0YWdlQ29uZmlnLm91dHB1dHMuY2xvdWRGb3JtYXRpb24/LmVuYWJsZWQpIHtcbiAgICAgIGNvbW1hbmRzLnB1c2goXG4gICAgICAgIGBlY2hvIFwiRmV0Y2hpbmcgdmVyc2lvbiBkYXRhIGZyb20gQ2xvdWRGb3JtYXRpb24gb3V0cHV0cyBmb3IgJHtzdGFnZS5uYW1lfS4uLlwiYCxcbiAgICAgICAgYGF3cyBjbG91ZGZvcm1hdGlvbiBkZXNjcmliZS1zdGFja3MgLS1zdGFjay1uYW1lICR7c3RhY2tOYW1lfSAtLXJlZ2lvbiAke3N0YWdlLmVudi5yZWdpb259IC0tcXVlcnkgXCJTdGFja3NbMF0uT3V0cHV0c1s/c3RhcnRzX3dpdGgoT3V0cHV0S2V5LCAnQXBwVmVyc2lvbicpXS57S2V5Ok91dHB1dEtleSxWYWx1ZTpPdXRwdXRWYWx1ZX1cIiAtLW91dHB1dCB0YWJsZWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIEZldGNoIGZyb20gU1NNIFBhcmFtZXRlciBTdG9yZVxuICAgIGlmIChzdGFnZUNvbmZpZy5vdXRwdXRzLnBhcmFtZXRlclN0b3JlPy5lbmFibGVkKSB7XG4gICAgICBjb25zdCBwYXJhbWV0ZXJOYW1lID0gKHN0YWdlQ29uZmlnLm91dHB1dHMucGFyYW1ldGVyU3RvcmUucGFyYW1ldGVyTmFtZSB8fCAnL3tzdGFja05hbWV9L3ZlcnNpb24nKVxuICAgICAgICAucmVwbGFjZSgne3N0YWNrTmFtZX0nLCBzdGFja05hbWUpXG4gICAgICAgIC5yZXBsYWNlKCd7c3RhZ2VOYW1lfScsIHN0YWdlLm5hbWUpO1xuXG4gICAgICBpZiAoKHN0YWdlQ29uZmlnLm91dHB1dHMucGFyYW1ldGVyU3RvcmUgYXMgYW55KT8uaGllcmFyY2hpY2FsKSB7XG4gICAgICAgIGNvbW1hbmRzLnB1c2goXG4gICAgICAgICAgYGVjaG8gXCJGZXRjaGluZyB2ZXJzaW9uIGRhdGEgZnJvbSBTU00gUGFyYW1ldGVyIFN0b3JlIChoaWVyYXJjaGljYWwpIGZvciAke3N0YWdlLm5hbWV9Li4uXCJgLFxuICAgICAgICAgIGBhd3Mgc3NtIGdldC1wYXJhbWV0ZXJzLWJ5LXBhdGggLS1wYXRoIFwiJHtwYXJhbWV0ZXJOYW1lfVwiIC0tcmVnaW9uICR7c3RhZ2UuZW52LnJlZ2lvbn0gLS1yZWN1cnNpdmUgLS1xdWVyeSBcIlBhcmFtZXRlcnNbXS57TmFtZTpOYW1lLFZhbHVlOlZhbHVlfVwiIC0tb3V0cHV0IHRhYmxlYCxcbiAgICAgICAgKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGNvbW1hbmRzLnB1c2goXG4gICAgICAgICAgYGVjaG8gXCJGZXRjaGluZyB2ZXJzaW9uIGRhdGEgZnJvbSBTU00gUGFyYW1ldGVyIFN0b3JlIGZvciAke3N0YWdlLm5hbWV9Li4uXCJgLFxuICAgICAgICAgIGBhd3Mgc3NtIGdldC1wYXJhbWV0ZXIgLS1uYW1lIFwiJHtwYXJhbWV0ZXJOYW1lfVwiIC0tcmVnaW9uICR7c3RhZ2UuZW52LnJlZ2lvbn0gLS1xdWVyeSBcIlBhcmFtZXRlci57TmFtZTpOYW1lLFZhbHVlOlZhbHVlfVwiIC0tb3V0cHV0IHRhYmxlYCxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29tbWFuZHMubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5wcm9qZWN0LmFkZFRhc2soYHZlcnNpb246ZmV0Y2g6JHtzdGFnZS5uYW1lfWAsIHtcbiAgICAgICAgZGVzY3JpcHRpb246IGBGZXRjaCB2ZXJzaW9uIGRhdGEgZnJvbSBkZXBsb3llZCAke3N0YWdlLm5hbWV9IHN0YWNrYCxcbiAgICAgICAgZXhlYzogY29tbWFuZHMuam9pbignICYmICcpLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIENESyBhcHBsaWNhdGlvbiBjb2RlIGZvciB2ZXJzaW9uaW5nXG4gICAqL1xuICBwdWJsaWMgZ2VuZXJhdGVWZXJzaW9uaW5nQXBwQ29kZShjb25maWc6IFZlcnNpb25pbmdDb25maWcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgXG4gICAgLy8gQXBwbHkgdmVyc2lvbmluZyB0byBhbGwgc3RhY2tzXG4gICAgdGhpcy5ub2RlLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XG4gICAgICBpZiAoY2hpbGQgaW5zdGFuY2VvZiBTdGFjaykge1xuICAgICAgICBjb25zdCBzdGFnZU5hbWUgPSBjaGlsZC5zdGFja05hbWUuc3BsaXQoJy0nKS5wb3AoKSB8fCAnZGVmYXVsdCc7XG4gICAgICAgIGFkZFZlcnNpb25pbmdUb1N0YWNrKGNoaWxkLCBzdGFnZU5hbWUsICR7Y29uZmlnLnN0YWdlT3ZlcnJpZGVzID8gJ3ZlcnNpb25pbmdDb25maWcuc3RhZ2VPdmVycmlkZXMnIDogJ3VuZGVmaW5lZCd9KTtcbiAgICAgIH1cbiAgICB9KTtgO1xuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHZlcnNpb25pbmcgaW1wb3J0cyBmb3IgQ0RLIGFwcGxpY2F0aW9uXG4gICAqL1xuICBwdWJsaWMgZ2VuZXJhdGVWZXJzaW9uaW5nSW1wb3J0cygpOiBzdHJpbmcge1xuICAgIGNvbnN0IGltcG9ydHM6IHN0cmluZ1tdID0gW107XG5cbiAgICBpbXBvcnRzLnB1c2goXCJpbXBvcnQgeyBDZm5PdXRwdXQgfSBmcm9tICdhd3MtY2RrLWxpYic7XCIpO1xuICAgIGltcG9ydHMucHVzaChcImltcG9ydCB7IFN0cmluZ1BhcmFtZXRlciB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zc20nO1wiKTtcbiAgICBpbXBvcnRzLnB1c2goXCJpbXBvcnQgKiBhcyBmcyBmcm9tICdub2RlOmZzJztcIik7XG5cbiAgICByZXR1cm4gaW1wb3J0cy5qb2luKCdcXG4nKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSB2ZXJzaW9uaW5nIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBDREsgYXBwbGljYXRpb25cbiAgICovXG4gIHB1YmxpYyBnZW5lcmF0ZVZlcnNpb25pbmdVdGlsaXRpZXMoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFxuLyoqXG4gKiBWZXJzaW9uIGluZm9ybWF0aW9uIGludGVyZmFjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIFZlcnNpb25JbmZvIHtcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBjb21taXRIYXNoOiBzdHJpbmc7XG4gIGNvbW1pdEhhc2hTaG9ydDogc3RyaW5nO1xuICBicmFuY2g6IHN0cmluZztcbiAgY29tbWl0Q291bnQ6IG51bWJlcjtcbiAgcGFja2FnZVZlcnNpb246IHN0cmluZztcbiAgZGVwbG95ZWRBdDogc3RyaW5nO1xuICBkZXBsb3llZEJ5OiBzdHJpbmc7XG4gIGVudmlyb25tZW50OiBzdHJpbmc7XG59XG5cbi8qKlxuICogTG9hZCB2ZXJzaW9uIGluZm9ybWF0aW9uIGZyb20gZ2VuZXJhdGVkIGZpbGVcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxvYWRWZXJzaW9uSW5mbygpOiBWZXJzaW9uSW5mbyB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKCcudmVyc2lvbi50bXAuanNvbicsICd1dGY4JykpO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIGNvbnNvbGUud2FybignQ291bGQgbm90IGxvYWQgdmVyc2lvbiBpbmZvLCB1c2luZyBmYWxsYmFjaycpO1xuICAgIHJldHVybiB7XG4gICAgICB2ZXJzaW9uOiAnMC4wLjAnLFxuICAgICAgY29tbWl0SGFzaDogJ3Vua25vd24nLFxuICAgICAgY29tbWl0SGFzaFNob3J0OiAndW5rbm93bicsXG4gICAgICBicmFuY2g6ICd1bmtub3duJyxcbiAgICAgIGNvbW1pdENvdW50OiAwLFxuICAgICAgcGFja2FnZVZlcnNpb246ICcwLjAuMCcsXG4gICAgICBkZXBsb3llZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgICBkZXBsb3llZEJ5OiAndW5rbm93bicsXG4gICAgICBlbnZpcm9ubWVudDogJ3Vua25vd24nXG4gICAgfTtcbiAgfVxufVxuXG4vKipcbiAqIEdldCB2ZXJzaW9uaW5nIGNvbmZpZ3VyYXRpb24gZm9yIGEgc3BlY2lmaWMgc3RhZ2VcbiAqL1xuZnVuY3Rpb24gZ2V0U3RhZ2VDb25maWcoc3RhZ2VOYW1lOiBzdHJpbmcsIGJhc2VDb25maWc6IGFueSwgc3RhZ2VPdmVycmlkZXM/OiBSZWNvcmQ8c3RyaW5nLCBhbnk+KTogYW55IHtcbiAgaWYgKCFzdGFnZU92ZXJyaWRlcyB8fCAhc3RhZ2VPdmVycmlkZXNbc3RhZ2VOYW1lXSkge1xuICAgIHJldHVybiBiYXNlQ29uZmlnO1xuICB9XG4gIFxuICAvLyBNZXJnZSBzdGFnZSBvdmVycmlkZSB3aXRoIGJhc2UgY29uZmlnXG4gIGNvbnN0IG92ZXJyaWRlID0gc3RhZ2VPdmVycmlkZXNbc3RhZ2VOYW1lXTtcbiAgcmV0dXJuIHtcbiAgICAuLi5iYXNlQ29uZmlnLFxuICAgIG91dHB1dHM6IHtcbiAgICAgIGNsb3VkRm9ybWF0aW9uOiBvdmVycmlkZS5vdXRwdXRzPy5jbG91ZEZvcm1hdGlvbiB8fCBiYXNlQ29uZmlnLm91dHB1dHMuY2xvdWRGb3JtYXRpb24sXG4gICAgICBwYXJhbWV0ZXJTdG9yZTogb3ZlcnJpZGUub3V0cHV0cz8ucGFyYW1ldGVyU3RvcmUgfHwgYmFzZUNvbmZpZy5vdXRwdXRzLnBhcmFtZXRlclN0b3JlLFxuICAgIH1cbiAgfTtcbn1cblxuLyoqXG4gKiBBZGQgdmVyc2lvbmluZyBvdXRwdXRzIHRvIGEgc3RhY2tcbiAqL1xuZnVuY3Rpb24gYWRkVmVyc2lvbmluZ1RvU3RhY2soc3RhY2s6IFN0YWNrLCBzdGFnZU5hbWU6IHN0cmluZywgc3RhZ2VPdmVycmlkZXM/OiBhbnkpOiB2b2lkIHtcbiAgY29uc3QgdmVyc2lvbkluZm8gPSBsb2FkVmVyc2lvbkluZm8oKTtcbiAgY29uc3QgYmFzZUNvbmZpZyA9IHZlcnNpb25pbmdDb25maWc7XG4gIGNvbnN0IGNvbmZpZyA9IGdldFN0YWdlQ29uZmlnKHN0YWdlTmFtZSwgYmFzZUNvbmZpZywgc3RhZ2VPdmVycmlkZXMpO1xuICBcbiAgLy8gQ2hlY2sgaWYgZm9ybWF0IGlzIHNwZWNpZmllZCBpbiBDbG91ZEZvcm1hdGlvbiBvciBQYXJhbWV0ZXJTdG9yZSBjb25maWdzXG4gIGNvbnN0IGNmRm9ybWF0ID0gY29uZmlnLm91dHB1dHMuY2xvdWRGb3JtYXRpb24/LmZvcm1hdCB8fCAnc3RydWN0dXJlZCc7XG4gIGNvbnN0IHNzbUZvcm1hdCA9IGNvbmZpZy5vdXRwdXRzLnBhcmFtZXRlclN0b3JlPy5mb3JtYXQgfHwgJ3N0cnVjdHVyZWQnO1xuICBcbiAgLy8gQWRkIENsb3VkRm9ybWF0aW9uIG91dHB1dHNcbiAgaWYgKGNvbmZpZy5vdXRwdXRzLmNsb3VkRm9ybWF0aW9uPy5lbmFibGVkKSB7XG4gICAgaWYgKGNmRm9ybWF0ID09PSAncGxhaW4nKSB7XG4gICAgICAvLyBQbGFpbiBmb3JtYXQgLSBzaW5nbGUgb3V0cHV0IHdpdGggdmVyc2lvbiBzdHJpbmdcbiAgICAgIG5ldyBDZm5PdXRwdXQoc3RhY2ssICdBcHBWZXJzaW9uJywge1xuICAgICAgICB2YWx1ZTogdmVyc2lvbkluZm8udmVyc2lvbixcbiAgICAgICAgZGVzY3JpcHRpb246ICdBcHBsaWNhdGlvbiB2ZXJzaW9uJyxcbiAgICAgICAgZXhwb3J0TmFtZTogY29uZmlnLm91dHB1dHMuY2xvdWRGb3JtYXRpb24uZXhwb3J0TmFtZSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTdHJ1Y3R1cmVkIGZvcm1hdCAtIG11bHRpcGxlIG91dHB1dHNcbiAgICAgIG5ldyBDZm5PdXRwdXQoc3RhY2ssICdBcHBWZXJzaW9uJywge1xuICAgICAgICB2YWx1ZTogdmVyc2lvbkluZm8udmVyc2lvbixcbiAgICAgICAgZGVzY3JpcHRpb246ICdBcHBsaWNhdGlvbiB2ZXJzaW9uJyxcbiAgICAgICAgZXhwb3J0TmFtZTogY29uZmlnLm91dHB1dHMuY2xvdWRGb3JtYXRpb24uZXhwb3J0TmFtZSxcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBuZXcgQ2ZuT3V0cHV0KHN0YWNrLCAnQXBwVmVyc2lvbkNvbW1pdEhhc2gnLCB7XG4gICAgICAgIHZhbHVlOiB2ZXJzaW9uSW5mby5jb21taXRIYXNoLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0dpdCBjb21taXQgaGFzaCcsXG4gICAgICAgIGV4cG9ydE5hbWU6IGNvbmZpZy5vdXRwdXRzLmNsb3VkRm9ybWF0aW9uLmV4cG9ydE5hbWUgPyBcXGBcXCR7Y29uZmlnLm91dHB1dHMuY2xvdWRGb3JtYXRpb24uZXhwb3J0TmFtZX1Db21taXRIYXNoXFxgIDogdW5kZWZpbmVkLFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIG5ldyBDZm5PdXRwdXQoc3RhY2ssICdBcHBWZXJzaW9uQnJhbmNoJywge1xuICAgICAgICB2YWx1ZTogdmVyc2lvbkluZm8uYnJhbmNoLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0dpdCBicmFuY2gnLFxuICAgICAgICBleHBvcnROYW1lOiBjb25maWcub3V0cHV0cy5jbG91ZEZvcm1hdGlvbi5leHBvcnROYW1lID8gXFxgXFwke2NvbmZpZy5vdXRwdXRzLmNsb3VkRm9ybWF0aW9uLmV4cG9ydE5hbWV9QnJhbmNoXFxgIDogdW5kZWZpbmVkLFxuICAgICAgfSk7XG5cbiAgICAgIG5ldyBDZm5PdXRwdXQoc3RhY2ssICdBcHBWZXJzaW9uSW5mbycsIHtcbiAgICAgICAgdmFsdWU6IEpTT04uc3RyaW5naWZ5KHZlcnNpb25JbmZvKSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdDb21wbGV0ZSB2ZXJzaW9uIGluZm9ybWF0aW9uJyxcbiAgICAgICAgZXhwb3J0TmFtZTogY29uZmlnLm91dHB1dHMuY2xvdWRGb3JtYXRpb24uZXhwb3J0TmFtZSA/IFxcYFxcJHtjb25maWcub3V0cHV0cy5jbG91ZEZvcm1hdGlvbi5leHBvcnROYW1lfUluZm9cXGAgOiB1bmRlZmluZWQsXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbiAgXG4gIC8vIEFkZCBTU00gUGFyYW1ldGVyIFN0b3JlIHBhcmFtZXRlcnNcbiAgaWYgKGNvbmZpZy5vdXRwdXRzLnBhcmFtZXRlclN0b3JlPy5lbmFibGVkKSB7XG4gICAgaWYgKGNvbmZpZy5vdXRwdXRzLnBhcmFtZXRlclN0b3JlLmhpZXJhcmNoaWNhbCkge1xuICAgICAgLy8gSGllcmFyY2hpY2FsIHBhcmFtZXRlcnNcbiAgICAgIGNvbnN0IGJhc2VQYXJhbWV0ZXJOYW1lID0gKGNvbmZpZy5vdXRwdXRzLnBhcmFtZXRlclN0b3JlLnBhcmFtZXRlck5hbWUgfHwgJy97c3RhY2tOYW1lfS92ZXJzaW9uJylcbiAgICAgICAgLnJlcGxhY2UoJ3tzdGFja05hbWV9Jywgc3RhY2suc3RhY2tOYW1lKVxuICAgICAgICAucmVwbGFjZSgne3N0YWdlTmFtZX0nLCBzdGFnZU5hbWUpO1xuICAgICAgICBcbiAgICAgIC8vIENyZWF0ZSBoaWVyYXJjaGljYWwgcGFyYW1ldGVyc1xuICAgICAgbmV3IFN0cmluZ1BhcmFtZXRlcihzdGFjaywgJ1ZlcnNpb25QYXJhbWV0ZXJWZXJzaW9uJywge1xuICAgICAgICBwYXJhbWV0ZXJOYW1lOiBcXGBcXCR7YmFzZVBhcmFtZXRlck5hbWV9L3ZlcnNpb25cXGAsXG4gICAgICAgIHN0cmluZ1ZhbHVlOiB2ZXJzaW9uSW5mby52ZXJzaW9uLFxuICAgICAgICBkZXNjcmlwdGlvbjogJ0FwcGxpY2F0aW9uIHZlcnNpb24nLFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIG5ldyBTdHJpbmdQYXJhbWV0ZXIoc3RhY2ssICdWZXJzaW9uUGFyYW1ldGVyQ29tbWl0SGFzaCcsIHtcbiAgICAgICAgcGFyYW1ldGVyTmFtZTogXFxgXFwke2Jhc2VQYXJhbWV0ZXJOYW1lfS9jb21taXRIYXNoXFxgLFxuICAgICAgICBzdHJpbmdWYWx1ZTogdmVyc2lvbkluZm8uY29tbWl0SGFzaCxcbiAgICAgICAgZGVzY3JpcHRpb246ICdHaXQgY29tbWl0IGhhc2gnLFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIG5ldyBTdHJpbmdQYXJhbWV0ZXIoc3RhY2ssICdWZXJzaW9uUGFyYW1ldGVyQnJhbmNoJywge1xuICAgICAgICBwYXJhbWV0ZXJOYW1lOiBcXGBcXCR7YmFzZVBhcmFtZXRlck5hbWV9L2JyYW5jaFxcYCxcbiAgICAgICAgc3RyaW5nVmFsdWU6IHZlcnNpb25JbmZvLmJyYW5jaCxcbiAgICAgICAgZGVzY3JpcHRpb246ICdHaXQgYnJhbmNoJyxcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBuZXcgU3RyaW5nUGFyYW1ldGVyKHN0YWNrLCAnVmVyc2lvblBhcmFtZXRlckluZm8nLCB7XG4gICAgICAgIHBhcmFtZXRlck5hbWU6IFxcYFxcJHtiYXNlUGFyYW1ldGVyTmFtZX0vaW5mb1xcYCxcbiAgICAgICAgc3RyaW5nVmFsdWU6IEpTT04uc3RyaW5naWZ5KHZlcnNpb25JbmZvKSxcbiAgICAgICAgZGVzY3JpcHRpb246ICdDb21wbGV0ZSB2ZXJzaW9uIGluZm9ybWF0aW9uJyxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBTaW5nbGUgcGFyYW1ldGVyXG4gICAgICBjb25zdCBwYXJhbWV0ZXJOYW1lID0gKGNvbmZpZy5vdXRwdXRzLnBhcmFtZXRlclN0b3JlLnBhcmFtZXRlck5hbWUgfHwgJy97c3RhY2tOYW1lfS92ZXJzaW9uJylcbiAgICAgICAgLnJlcGxhY2UoJ3tzdGFja05hbWV9Jywgc3RhY2suc3RhY2tOYW1lKVxuICAgICAgICAucmVwbGFjZSgne3N0YWdlTmFtZX0nLCBzdGFnZU5hbWUpO1xuICAgICAgICBcbiAgICAgIG5ldyBTdHJpbmdQYXJhbWV0ZXIoc3RhY2ssICdWZXJzaW9uUGFyYW1ldGVyJywge1xuICAgICAgICBwYXJhbWV0ZXJOYW1lLFxuICAgICAgICBzdHJpbmdWYWx1ZTogc3NtRm9ybWF0ID09PSAncGxhaW4nID8gdmVyc2lvbkluZm8udmVyc2lvbiA6IEpTT04uc3RyaW5naWZ5KHZlcnNpb25JbmZvKSxcbiAgICAgICAgZGVzY3JpcHRpb246IHNzbUZvcm1hdCA9PT0gJ3BsYWluJyA/ICdBcHBsaWNhdGlvbiB2ZXJzaW9uJyA6ICdDb21wbGV0ZSB2ZXJzaW9uIGluZm9ybWF0aW9uJyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufWA7XG4gIH1cbn1cbiJdfQ==
|
package/lib/awscdk/bash.js
CHANGED
|
@@ -6,7 +6,7 @@ const projen_1 = require("projen");
|
|
|
6
6
|
const base_1 = require("./base");
|
|
7
7
|
const engine_1 = require("../engine");
|
|
8
8
|
class BashCDKPipeline extends base_1.CDKPipeline {
|
|
9
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.BashCDKPipeline", version: "0.3.
|
|
9
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.BashCDKPipeline", version: "0.3.24" };
|
|
10
10
|
constructor(app, options) {
|
|
11
11
|
super(app, options);
|
|
12
12
|
const readme = new projen_1.TextFile(this, 'pipeline.md', { lines: [] });
|
package/lib/awscdk/github.js
CHANGED
|
@@ -18,7 +18,7 @@ const WORKFLOW_DIR = '.github/workflows';
|
|
|
18
18
|
*/
|
|
19
19
|
class GithubCDKPipeline extends base_1.CDKPipeline {
|
|
20
20
|
options;
|
|
21
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.GithubCDKPipeline", version: "0.3.
|
|
21
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.GithubCDKPipeline", version: "0.3.24" };
|
|
22
22
|
/** Indicates if versioned artifacts are needed based on manual approval requirements. */
|
|
23
23
|
needsVersionedArtifacts;
|
|
24
24
|
/** The GitHub workflow associated with the pipeline. */
|
package/lib/awscdk/gitlab.js
CHANGED
|
@@ -13,7 +13,7 @@ const github_summary_step_1 = require("../steps/github-summary.step");
|
|
|
13
13
|
*/
|
|
14
14
|
class GitlabCDKPipeline extends base_1.CDKPipeline {
|
|
15
15
|
options;
|
|
16
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.GitlabCDKPipeline", version: "0.3.
|
|
16
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.GitlabCDKPipeline", version: "0.3.24" };
|
|
17
17
|
/** Indicates if versioned artifacts are required. Currently set to false */
|
|
18
18
|
needsVersionedArtifacts;
|
|
19
19
|
/** The Docker image used for pipeline jobs. Defaults to a specified image or a default value. */
|
package/lib/drift/base.js
CHANGED
|
@@ -6,7 +6,7 @@ const projen_1 = require("projen");
|
|
|
6
6
|
const javascript_1 = require("projen/lib/javascript");
|
|
7
7
|
const steps_1 = require("../steps");
|
|
8
8
|
class DriftDetectionWorkflow extends projen_1.Component {
|
|
9
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.DriftDetectionWorkflow", version: "0.3.
|
|
9
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.DriftDetectionWorkflow", version: "0.3.24" };
|
|
10
10
|
name;
|
|
11
11
|
schedule;
|
|
12
12
|
stages;
|
package/lib/drift/bash.js
CHANGED
|
@@ -6,7 +6,7 @@ const projen_1 = require("projen");
|
|
|
6
6
|
const base_1 = require("./base");
|
|
7
7
|
const step_1 = require("./step");
|
|
8
8
|
class BashDriftDetectionWorkflow extends base_1.DriftDetectionWorkflow {
|
|
9
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.BashDriftDetectionWorkflow", version: "0.3.
|
|
9
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.BashDriftDetectionWorkflow", version: "0.3.24" };
|
|
10
10
|
scriptPath;
|
|
11
11
|
constructor(project, options) {
|
|
12
12
|
super(project, options);
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.DriftDetector = void 0;
|
|
5
|
-
const
|
|
6
|
-
const
|
|
5
|
+
const node_child_process_1 = require("node:child_process");
|
|
6
|
+
const node_fs_1 = require("node:fs");
|
|
7
7
|
class DriftDetector {
|
|
8
8
|
options;
|
|
9
9
|
results = [];
|
|
@@ -37,7 +37,7 @@ class DriftDetector {
|
|
|
37
37
|
return this.options.stackNames;
|
|
38
38
|
}
|
|
39
39
|
console.log('Getting all stacks in the region...');
|
|
40
|
-
const output = (0,
|
|
40
|
+
const output = (0, node_child_process_1.execSync)(`aws cloudformation list-stacks --region ${this.options.region} --stack-status-filter CREATE_COMPLETE UPDATE_COMPLETE --query 'StackSummaries[].StackName' --output json`, { encoding: 'utf8' });
|
|
41
41
|
return JSON.parse(output);
|
|
42
42
|
}
|
|
43
43
|
async checkStackDrift(stackName) {
|
|
@@ -72,7 +72,7 @@ class DriftDetector {
|
|
|
72
72
|
this.results.push(result);
|
|
73
73
|
}
|
|
74
74
|
async startDriftDetection(stackName) {
|
|
75
|
-
const output = (0,
|
|
75
|
+
const output = (0, node_child_process_1.execSync)(`aws cloudformation detect-stack-drift --stack-name ${stackName} --region ${this.options.region} --query 'StackDriftDetectionId' --output text`, { encoding: 'utf8' });
|
|
76
76
|
return output.trim();
|
|
77
77
|
}
|
|
78
78
|
async waitForDriftDetection(driftId) {
|
|
@@ -83,7 +83,7 @@ class DriftDetector {
|
|
|
83
83
|
if (elapsed > timeout) {
|
|
84
84
|
throw new Error(`Drift detection timed out after ${this.options.timeout} minutes`);
|
|
85
85
|
}
|
|
86
|
-
const output = (0,
|
|
86
|
+
const output = (0, node_child_process_1.execSync)(`aws cloudformation describe-stack-drift-detection-status --stack-drift-detection-id ${driftId} --region ${this.options.region} --output json`, { encoding: 'utf8' });
|
|
87
87
|
const status = JSON.parse(output);
|
|
88
88
|
console.log(`Drift detection status: ${status.DetectionStatus} (${elapsed}s elapsed)`);
|
|
89
89
|
if (status.DetectionStatus === 'DETECTION_COMPLETE') {
|
|
@@ -97,7 +97,7 @@ class DriftDetector {
|
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
async getDriftedResources(stackName) {
|
|
100
|
-
const output = (0,
|
|
100
|
+
const output = (0, node_child_process_1.execSync)(`aws cloudformation describe-stack-resource-drifts --stack-name ${stackName} --region ${this.options.region} --stack-resource-drift-status-filters MODIFIED DELETED --output json`, { encoding: 'utf8' });
|
|
101
101
|
const response = JSON.parse(output);
|
|
102
102
|
return response.StackResourceDrifts.map((drift) => ({
|
|
103
103
|
logicalResourceId: drift.LogicalResourceId,
|
|
@@ -197,7 +197,7 @@ class DriftDetector {
|
|
|
197
197
|
}
|
|
198
198
|
saveResults() {
|
|
199
199
|
const outputFile = process.env.DRIFT_DETECTION_OUTPUT || 'drift-detection-results.json';
|
|
200
|
-
(0,
|
|
200
|
+
(0, node_fs_1.writeFileSync)(outputFile, JSON.stringify(this.results, null, 2));
|
|
201
201
|
console.log(`\nResults saved to: ${outputFile}`);
|
|
202
202
|
}
|
|
203
203
|
shouldFail() {
|
|
@@ -257,4 +257,4 @@ if (require.main === module) {
|
|
|
257
257
|
const detector = new DriftDetector(options);
|
|
258
258
|
detector.run().catch(console.error);
|
|
259
259
|
}
|
|
260
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0ZWN0LWRyaWZ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RyaWZ0L2RldGVjdC1kcmlmdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBRUEsaURBQXlDO0FBQ3pDLDJCQUFtQztBQXVDbkMsTUFBTSxhQUFhO0lBQ0EsT0FBTyxDQUF3QjtJQUMvQixPQUFPLEdBQWtCLEVBQUUsQ0FBQztJQUU3QyxZQUFZLE9BQThCO1FBQ3hDLElBQUksQ0FBQyxPQUFPLEdBQUc7WUFDYixPQUFPLEVBQUUsRUFBRTtZQUNYLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLEdBQUcsT0FBTztTQUNYLENBQUM7SUFDSixDQUFDO0lBRU0sS0FBSyxDQUFDLEdBQUc7UUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLHNDQUFzQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFekUsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUU3QyxLQUFLLE1BQU0sU0FBUyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUMvQixNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDeEMsQ0FBQztZQUVELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFFbkIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztnQkFDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQixDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzVELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEIsQ0FBQztJQUNILENBQUM7SUFFTyxL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Q0FZYixDQUFDLENBQUM7QUFDSCxDQUFDO0FBRUQsbUJBQW1CO0FBQ25CLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztJQUM1QixNQUFNLE9BQU8sR0FBRyxTQUFTLEVBQUUsQ0FBQztJQUM1QixNQUFNLFFBQVEsR0FBRyxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gJ2NoaWxkX3Byb2Nlc3MnO1xuaW1wb3J0IHsgd3JpdGVGaWxlU3luYyB9IGZyb20gJ2ZzJztcblxuaW50ZXJmYWNlIERyaWZ0RGV0ZWN0aW9uT3B0aW9ucyB7XG4gIHJlZ2lvbjogc3RyaW5nO1xuICBzdGFja05hbWVzPzogc3RyaW5nW107XG4gIHRpbWVvdXQ/OiBudW1iZXI7XG4gIGZhaWxPbkRyaWZ0PzogYm9vbGVhbjtcbn1cblxuaW50ZXJmYWNlIERyaWZ0UmVzdWx0IHtcbiAgc3RhY2tOYW1lOiBzdHJpbmc7XG4gIGRyaWZ0U3RhdHVzOiAnSU5fU1lOQycgfCAnRFJJRlRFRCcgfCAnVU5LTk9XTicgfCAnTk9UX0NIRUNLRUQnO1xuICBkcmlmdGVkUmVzb3VyY2VzPzogRHJpZnRlZFJlc291cmNlW107XG4gIGVycm9yPzogc3RyaW5nO1xuICBrbm93bkVycm9yc0hhbmRsZWQ/OiBLbm93bkVycm9yUmVzdWx0W107XG59XG5cbmludGVyZmFjZSBLbm93bkVycm9yUmVzdWx0IHtcbiAgcmVhZG9ubHkgcmVzb3VyY2VJZDogc3RyaW5nO1xuICByZWFkb25seSBlcnJvclR5cGU6IHN0cmluZztcbiAgcmVhZG9ubHkgb3JpZ2luYWxFcnJvcjogYW55O1xuICByZWFkb25seSBoYW5kbGVkOiBib29sZWFuO1xuICByZWFkb25seSBtZXNzYWdlPzogc3RyaW5nO1xufVxuXG5pbnRlcmZhY2UgRHJpZnRlZFJlc291cmNlIHtcbiAgcmVhZG9ubHkgbG9naWNhbFJlc291cmNlSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgcmVzb3VyY2VUeXBlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1czogc3RyaW5nO1xuICByZWFkb25seSBwcm9wZXJ0eURpZmZlcmVuY2VzPzogUHJvcGVydHlEaWZmZXJlbmNlW107XG59XG5cbmludGVyZmFjZSBQcm9wZXJ0eURpZmZlcmVuY2Uge1xuICByZWFkb25seSBwcm9wZXJ0eVBhdGg6IHN0cmluZztcbiAgcmVhZG9ubHkgZXhwZWN0ZWRWYWx1ZTogc3RyaW5nO1xuICByZWFkb25seSBhY3R1YWxWYWx1ZTogc3RyaW5nO1xuICByZWFkb25seSBkaWZmZXJlbmNlVHlwZTogc3RyaW5nO1xufVxuXG5jbGFzcyBEcmlmdERldGVjdG9yIHtcbiAgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBEcmlmdERldGVjdGlvbk9wdGlvbnM7XG4gIHByaXZhdGUgcmVhZG9ubHkgcmVzdWx0czogRHJpZnRSZXN1bHRbXSA9IFtdO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IERyaWZ0RGV0ZWN0aW9uT3B0aW9ucykge1xuICAgIHRoaXMub3B0aW9ucyA9IHtcbiAgICAgIHRpbWVvdXQ6IDMwLFxuICAgICAgZmFpbE9uRHJpZnQ6IHRydWUsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgcnVuKCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUubG9nKGBTdGFydGluZyBkcmlmdCBkZXRlY3Rpb24gaW4gcmVnaW9uICR7dGhpcy5vcHRpb25zLnJlZ2lvbn1gKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCBzdGFja3MgPSBhd2FpdCB0aGlzLmdldFN0YWNrc1RvQ2hlY2soKTtcblxuICAgICAgZm9yIChjb25zdCBzdGFja05hbWUgb2Ygc3RhY2tzKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuY2hlY2tTdGFja0RyaWZ0KHN0YWNrTmFtZSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMucHJpbnRTdW1tYXJ5KCk7XG4gICAgICB0aGlzLnNhdmVSZXN1bHRzKCk7XG5cbiAgICAgIGlmICh0aGlzLnNob3VsZEZhaWwoKSkge1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ0ZhdGFsIGVycm9yIGR1cmluZyBkcmlmdCBkZXRlY3Rpb246JywgZXJyb3IpO1xuICAgICAgcHJvY2Vzcy5leGl0KDIpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0U3RhY2tzVG9DaGVjaygpOiBQcm9taXNlPHN0cmluZ1tdPiB7XG4gICAgaWYgKHRoaXMub3B0aW9ucy5zdGFja05hbWVzICYmIHRoaXMub3B0aW9ucy5zdGFja05hbWVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMuc3RhY2tOYW1lcztcbiAgICB9XG5cbiAgICBjb25zb2xlLmxvZygnR2V0dGluZyBhbGwgc3RhY2tzIGluIHRoZSByZWdpb24uLi4nKTtcbiAgICBjb25zdCBvdXRwdXQgPSBleGVjU3luYyhcbiAgICAgIGBhd3MgY2xvdWRmb3JtYXRpb24gbGlzdC1zdGFja3MgLS1yZWdpb24gJHt0aGlzLm9wdGlvbnMucmVnaW9ufSAtLXN0YWNrLXN0YXR1cy1maWx0ZXIgQ1JFQVRFX0NPTVBMRVRFIFVQREFURV9DT01QTEVURSAtLXF1ZXJ5ICdTdGFja1N1bW1hcmllc1tdLlN0YWNrTmFtZScgLS1vdXRwdXQganNvbmAsXG4gICAgICB7IGVuY29kaW5nOiAndXRmOCcgfSxcbiAgICApO1xuXG4gICAgcmV0dXJuIEpTT04ucGFyc2Uob3V0cHV0KTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgY2hlY2tTdGFja0RyaWZ0KHN0YWNrTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc29sZS5sb2coYFxcbkNoZWNraW5nIGRyaWZ0IGZvciBzdGFjazogJHtzdGFja05hbWV9YCk7XG5cbiAgICBjb25zdCByZXN1bHQ6IERyaWZ0UmVzdWx0ID0ge1xuICAgICAgc3RhY2tOYW1lLFxuICAgICAgZHJpZnRTdGF0dXM6ICdOT1RfQ0hFQ0tFRCcsXG4gICAgfTtcblxuICAgIHRyeSB7XG4gICAgICAvLyBTdGFydCBkcmlmdCBkZXRlY3Rpb25cbiAgICAgIGNvbnN0IGRyaWZ0SWQgPSBhd2FpdCB0aGlzLnN0YXJ0RHJpZnREZXRlY3Rpb24oc3RhY2tOYW1lKTtcbiAgICAgIGNvbnNvbGUubG9nKGBTdGFydGVkIGRyaWZ0IGRldGVjdGlvbiB3aXRoIElEOiAke2RyaWZ0SWR9YCk7XG5cbiAgICAgIC8vIFdhaXQgZm9yIGNvbXBsZXRpb25cbiAgICAgIGNvbnN0IGRyaWZ0U3RhdHVzID0gYXdhaXQgdGhpcy53YWl0Rm9yRHJpZnREZXRlY3Rpb24oZHJpZnRJZCk7XG4gICAgICByZXN1bHQuZHJpZnRTdGF0dXMgPSBkcmlmdFN0YXR1cztcblxuICAgICAgaWYgKGRyaWZ0U3RhdHVzID09PSAnRFJJRlRFRCcpIHtcbiAgICAgICAgcmVzdWx0LmRyaWZ0ZWRSZXNvdXJjZXMgPSBhd2FpdCB0aGlzLmdldERyaWZ0ZWRSZXNvdXJjZXMoc3RhY2tOYW1lKTtcbiAgICAgICAgY29uc29sZS5sb2coYERSSUZUIERFVEVDVEVEIGluIHN0YWNrICR7c3RhY2tOYW1lfSFgKTtcblxuICAgICAgICAvLyBIYW5kbGUga25vd24gZHJpZnQgZXJyb3JzXG4gICAgICAgIHJlc3VsdC5rbm93bkVycm9yc0hhbmRsZWQgPSBhd2FpdCB0aGlzLmhhbmRsZUtub3duRHJpZnRFcnJvcnMocmVzdWx0LmRyaWZ0ZWRSZXNvdXJjZXMpO1xuXG4gICAgICAgIC8vIFByaW50IGRyaWZ0IGRldGFpbHNcbiAgICAgICAgdGhpcy5wcmludERyaWZ0RGV0YWlscyhyZXN1bHQpO1xuICAgICAgfSBlbHNlIGlmIChkcmlmdFN0YXR1cyA9PT0gJ0lOX1NZTkMnKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBTdGFjayAke3N0YWNrTmFtZX0gaXMgaW4gc3luY2ApO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIGNoZWNraW5nIGRyaWZ0IGZvciBzdGFjayAke3N0YWNrTmFtZX06YCwgZXJyb3IubWVzc2FnZSk7XG4gICAgICByZXN1bHQuZXJyb3IgPSBlcnJvci5tZXNzYWdlO1xuICAgIH1cblxuICAgIHRoaXMucmVzdWx0cy5wdXNoKHJlc3VsdCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHN0YXJ0RHJpZnREZXRlY3Rpb24oc3RhY2tOYW1lOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGNvbnN0IG91dHB1dCA9IGV4ZWNTeW5jKFxuICAgICAgYGF3cyBjbG91ZGZvcm1hdGlvbiBkZXRlY3Qtc3RhY2stZHJpZnQgLS1zdGFjay1uYW1lICR7c3RhY2tOYW1lfSAtLXJlZ2lvbiAke3RoaXMub3B0aW9ucy5yZWdpb259IC0tcXVlcnkgJ1N0YWNrRHJpZnREZXRlY3Rpb25JZCcgLS1vdXRwdXQgdGV4dGAsXG4gICAgICB7IGVuY29kaW5nOiAndXRmOCcgfSxcbiAgICApO1xuXG4gICAgcmV0dXJuIG91dHB1dC50cmltKCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHdhaXRGb3JEcmlmdERldGVjdGlvbihkcmlmdElkOiBzdHJpbmcpOiBQcm9taXNlPCdJTl9TWU5DJyB8ICdEUklGVEVEJyB8ICdVTktOT1dOJyB8ICdOT1RfQ0hFQ0tFRCc+IHtcbiAgICBjb25zdCB0aW1lb3V0ID0gdGhpcy5vcHRpb25zLnRpbWVvdXQhICogNjA7IC8vIENvbnZlcnQgdG8gc2Vjb25kc1xuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG5cbiAgICB3aGlsZSAodHJ1ZSkge1xuICAgICAgY29uc3QgZWxhcHNlZCA9IE1hdGguZmxvb3IoKERhdGUubm93KCkgLSBzdGFydFRpbWUpIC8gMTAwMCk7XG5cbiAgICAgIGlmIChlbGFwc2VkID4gdGltZW91dCkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYERyaWZ0IGRldGVjdGlvbiB0aW1lZCBvdXQgYWZ0ZXIgJHt0aGlzLm9wdGlvbnMudGltZW91dH0gbWludXRlc2ApO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBvdXRwdXQgPSBleGVjU3luYyhcbiAgICAgICAgYGF3cyBjbG91ZGZvcm1hdGlvbiBkZXNjcmliZS1zdGFjay1kcmlmdC1kZXRlY3Rpb24tc3RhdHVzIC0tc3RhY2stZHJpZnQtZGV0ZWN0aW9uLWlkICR7ZHJpZnRJZH0gLS1yZWdpb24gJHt0aGlzLm9wdGlvbnMucmVnaW9ufSAtLW91dHB1dCBqc29uYCxcbiAgICAgICAgeyBlbmNvZGluZzogJ3V0ZjgnIH0sXG4gICAgICApO1xuXG4gICAgICBjb25zdCBzdGF0dXMgPSBKU09OLnBhcnNlKG91dHB1dCk7XG4gICAgICBjb25zb2xlLmxvZyhgRHJpZnQgZGV0ZWN0aW9uIHN0YXR1czogJHtzdGF0dXMuRGV0ZWN0aW9uU3RhdHVzfSAoJHtlbGFwc2VkfXMgZWxhcHNlZClgKTtcblxuICAgICAgaWYgKHN0YXR1cy5EZXRlY3Rpb25TdGF0dXMgPT09ICdERVRFQ1RJT05fQ09NUExFVEUnKSB7XG4gICAgICAgIHJldHVybiBzdGF0dXMuU3RhY2tEcmlmdFN0YXR1cyBhcyAnSU5fU1lOQycgfCAnRFJJRlRFRCcgfCAnVU5LTk9XTicgfCAnTk9UX0NIRUNLRUQnO1xuICAgICAgfSBlbHNlIGlmIChzdGF0dXMuRGV0ZWN0aW9uU3RhdHVzID09PSAnREVURUNUSU9OX0ZBSUxFRCcpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEcmlmdCBkZXRlY3Rpb24gZmFpbGVkOiAke3N0YXR1cy5EZXRlY3Rpb25TdGF0dXNSZWFzb259YCk7XG4gICAgICB9XG5cbiAgICAgIC8vIFdhaXQgMTAgc2Vjb25kcyBiZWZvcmUgY2hlY2tpbmcgYWdhaW5cbiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKHJlc29sdmUgPT4gc2V0VGltZW91dChyZXNvbHZlLCAxMDAwMCkpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0RHJpZnRlZFJlc291cmNlcyhzdGFja05hbWU6IHN0cmluZyk6IFByb21pc2U8RHJpZnRlZFJlc291cmNlW10+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBleGVjU3luYyhcbiAgICAgIGBhd3MgY2xvdWRmb3JtYXRpb24gZGVzY3JpYmUtc3RhY2stcmVzb3VyY2UtZHJpZnRzIC0tc3RhY2stbmFtZSAke3N0YWNrTmFtZX0gLS1yZWdpb24gJHt0aGlzLm9wdGlvbnMucmVnaW9ufSAtLXN0YWNrLXJlc291cmNlLWRyaWZ0LXN0YXR1cy1maWx0ZXJzIE1PRElGSUVEIERFTEVURUQgLS1vdXRwdXQganNvbmAsXG4gICAgICB7IGVuY29kaW5nOiAndXRmOCcgfSxcbiAgICApO1xuXG4gICAgY29uc3QgcmVzcG9uc2UgPSBKU09OLnBhcnNlKG91dHB1dCk7XG4gICAgcmV0dXJuIHJlc3BvbnNlLlN0YWNrUmVzb3VyY2VEcmlmdHMubWFwKChkcmlmdDogYW55KSA9PiAoe1xuICAgICAgbG9naWNhbFJlc291cmNlSWQ6IGRyaWZ0LkxvZ2ljYWxSZXNvdXJjZUlkLFxuICAgICAgcmVzb3VyY2VUeXBlOiBkcmlmdC5SZXNvdXJjZVR5cGUsXG4gICAgICBzdGFja1Jlc291cmNlRHJpZnRTdGF0dXM6IGRyaWZ0LlN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1cyxcbiAgICAgIHByb3BlcnR5RGlmZmVyZW5jZXM6IGRyaWZ0LlByb3BlcnR5RGlmZmVyZW5jZXM/Lm1hcCgoZGlmZjogYW55KSA9PiAoe1xuICAgICAgICBwcm9wZXJ0eVBhdGg6IGRpZmYuUHJvcGVydHlQYXRoLFxuICAgICAgICBleHBlY3RlZFZhbHVlOiBkaWZmLkV4cGVjdGVkVmFsdWUsXG4gICAgICAgIGFjdHVhbFZhbHVlOiBkaWZmLkFjdHVhbFZhbHVlLFxuICAgICAgICBkaWZmZXJlbmNlVHlwZTogZGlmZi5EaWZmZXJlbmNlVHlwZSxcbiAgICAgIH0pKSxcbiAgICB9KSk7XG4gIH1cblxuICAvKipcbiAgICogSGFuZGxlIGtub3duIGRyaWZ0IGVycm9ycyBmb3Igc3BlY2lmaWMgcmVzb3VyY2VzXG4gICAqIFRoaXMgbWV0aG9kIGNhbiBiZSBleHRlbmRlZCBsYXRlciB0byBpbXBsZW1lbnQgY3VzdG9tIGxvZ2ljIGZvciBrbm93biBpc3N1ZXNcbiAgICovXG4gIHByaXZhdGUgYXN5bmMgaGFuZGxlS25vd25EcmlmdEVycm9ycyhkcmlmdGVkUmVzb3VyY2VzPzogRHJpZnRlZFJlc291cmNlW10pOiBQcm9taXNlPEtub3duRXJyb3JSZXN1bHRbXT4ge1xuICAgIGNvbnN0IGtub3duRXJyb3JzOiBLbm93bkVycm9yUmVzdWx0W10gPSBbXTtcblxuICAgIGlmICghZHJpZnRlZFJlc291cmNlcykge1xuICAgICAgcmV0dXJuIGtub3duRXJyb3JzO1xuICAgIH1cblxuICAgIGZvciAoY29uc3QgX3Jlc291cmNlIG9mIGRyaWZ0ZWRSZXNvdXJjZXMpIHtcblxuICAgICAgLy8gVE9ETzogSW1wbGVtZW50IGN1c3RvbSBsb2dpYyBoZXJlIGZvciBrbm93biBkcmlmdCBlcnJvcnNcbiAgICAgIC8vIEV4YW1wbGUgc3RydWN0dXJlIGZvciBoYW5kbGluZyBrbm93biBlcnJvcnM6XG5cbiAgICAgIC8vIENoZWNrIGZvciBMYW1iZGEgcnVudGltZSBkcmlmdCAoY29tbW9uIGlzc3VlKVxuICAgICAgLy8gaWYgKHJlc291cmNlLnJlc291cmNlVHlwZSA9PT0gJ0FXUzo6TGFtYmRhOjpGdW5jdGlvbicgJiYgcmVzb3VyY2UucHJvcGVydHlEaWZmZXJlbmNlcykge1xuICAgICAgLy8gICBjb25zdCBydW50aW1lRHJpZnQgPSByZXNvdXJjZS5wcm9wZXJ0eURpZmZlcmVuY2VzLmZpbmQoZGlmZiA9PlxuICAgICAgLy8gICAgIGRpZmYucHJvcGVydHlQYXRoID09PSAnL1J1bnRpbWUnIHx8IGRpZmYucHJvcGVydHlQYXRoID09PSAnUnVudGltZScsXG4gICAgICAvLyAgICk7XG5cbiAgICAgIC8vICAgaWYgKHJ1bnRpbWVEcmlmdCkge1xuICAgICAgLy8gICAgIGtub3duRXJyb3JzLnB1c2goe1xuICAgICAgLy8gICAgICAgcmVzb3VyY2VJZDogcmVzb3VyY2UubG9naWNhbFJlc291cmNlSWQsXG4gICAgICAvLyAgICAgICBlcnJvclR5cGU6ICdsYW1iZGEtcnVudGltZS1kcmlmdCcsXG4gICAgICAvLyAgICAgICBvcmlnaW5hbEVycm9yOiBydW50aW1lRHJpZnQsXG4gICAgICAvLyAgICAgICBoYW5kbGVkOiBmYWxzZSwgLy8gV2lsbCBiZSBpbXBsZW1lbnRlZCBsYXRlclxuICAgICAgLy8gICAgICAgbWVzc2FnZTogJ0xhbWJkYSBydW50aW1lIGRyaWZ0IGRldGVjdGVkIC0gbWFudWFsIGltcGxlbWVudGF0aW9uIG5lZWRlZCcsXG4gICAgICAvLyAgICAgfSk7XG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH1cblxuICAgICAgLy8gLy8gQ2hlY2sgZm9yIGF1dG8tc2NhbGluZyByZWxhdGVkIGRyaWZ0XG4gICAgICAvLyBpZiAocmVzb3VyY2UucmVzb3VyY2VUeXBlLmluY2x1ZGVzKCdBdXRvU2NhbGluZycpICYmIHJlc291cmNlLnByb3BlcnR5RGlmZmVyZW5jZXMpIHtcbiAgICAgIC8vICAga25vd25FcnJvcnMucHVzaCh7XG4gICAgICAvLyAgICAgcmVzb3VyY2VJZDogcmVzb3VyY2UubG9naWNhbFJlc291cmNlSWQsXG4gICAgICAvLyAgICAgZXJyb3JUeXBlOiAnYXV0b3NjYWxpbmctZHJpZnQnLFxuICAgICAgLy8gICAgIG9yaWdpbmFsRXJyb3I6IHJlc291cmNlLnByb3BlcnR5RGlmZmVyZW5jZXMsXG4gICAgICAvLyAgICAgaGFuZGxlZDogZmFsc2UsIC8vIFdpbGwgYmUgaW1wbGVtZW50ZWQgbGF0ZXJcbiAgICAgIC8vICAgICBtZXNzYWdlOiAnQXV0by1zY2FsaW5nIGRyaWZ0IGRldGVjdGVkIC0gbWFudWFsIGltcGxlbWVudGF0aW9uIG5lZWRlZCcsXG4gICAgICAvLyAgIH0pO1xuICAgICAgLy8gfVxuXG4gICAgICAvLyBBZGQgbW9yZSBwYXR0ZXJucyBoZXJlIGFzIG5lZWRlZFxuICAgIH1cblxuICAgIHJldHVybiBrbm93bkVycm9ycztcbiAgfVxuXG4gIHByaXZhdGUgcHJpbnREcmlmdERldGFpbHMocmVzdWx0OiBEcmlmdFJlc3VsdCk6IHZvaWQge1xuICAgIGlmICghcmVzdWx0LmRyaWZ0ZWRSZXNvdXJjZXMgfHwgcmVzdWx0LmRyaWZ0ZWRSZXNvdXJjZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJ1xcbkRyaWZ0ZWQgcmVzb3VyY2VzOicpO1xuICAgIGNvbnNvbGUubG9nKCc9PT09PT09PT09PT09PT09PScpO1xuXG4gICAgZm9yIChjb25zdCByZXNvdXJjZSBvZiByZXN1bHQuZHJpZnRlZFJlc291cmNlcykge1xuICAgICAgY29uc29sZS5sb2coYFxcbi0gJHtyZXNvdXJjZS5sb2dpY2FsUmVzb3VyY2VJZH0gKCR7cmVzb3VyY2UucmVzb3VyY2VUeXBlfSlgKTtcbiAgICAgIGNvbnNvbGUubG9nKGAgIFN0YXR1czogJHtyZXNvdXJjZS5zdGFja1Jlc291cmNlRHJpZnRTdGF0dXN9YCk7XG5cbiAgICAgIGlmIChyZXNvdXJjZS5wcm9wZXJ0eURpZmZlcmVuY2VzKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCcgIFByb3BlcnR5IGRpZmZlcmVuY2VzOicpO1xuICAgICAgICBmb3IgKGNvbnN0IGRpZmYgb2YgcmVzb3VyY2UucHJvcGVydHlEaWZmZXJlbmNlcykge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgICAgJHtkaWZmLnByb3BlcnR5UGF0aH06YCk7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgICAgIEV4cGVjdGVkOiAke2RpZmYuZXhwZWN0ZWRWYWx1ZX1gKTtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICAgICAgQWN0dWFsOiAke2RpZmYuYWN0dWFsVmFsdWV9YCk7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgICAgIFR5cGU6ICR7ZGlmZi5kaWZmZXJlbmNlVHlwZX1gKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgcHJpbnRTdW1tYXJ5KCk6IHZvaWQge1xuICAgIGNvbnNvbGUubG9nKCdcXG49PT09PT09PT09IERSSUZUIERFVEVDVElPTiBTVU1NQVJZID09PT09PT09PT0nKTtcblxuICAgIGNvbnN0IGRyaWZ0ZWRTdGFja3MgPSB0aGlzLnJlc3VsdHMuZmlsdGVyKHIgPT4gci5kcmlmdFN0YXR1cyA9PT0gJ0RSSUZURUQnKTtcbiAgICBjb25zdCBzeW5jZWRTdGFja3MgPSB0aGlzLnJlc3VsdHMuZmlsdGVyKHIgPT4gci5kcmlmdFN0YXR1cyA9PT0gJ0lOX1NZTkMnKTtcbiAgICBjb25zdCBlcnJvclN0YWNrcyA9IHRoaXMucmVzdWx0cy5maWx0ZXIociA9PiByLmVycm9yKTtcblxuICAgIGNvbnNvbGUubG9nKGBUb3RhbCBzdGFja3MgY2hlY2tlZDogJHt0aGlzLnJlc3VsdHMubGVuZ3RofWApO1xuICAgIGNvbnNvbGUubG9nKGBJbiBzeW5jOiAke3N5bmNlZFN0YWNrcy5sZW5ndGh9YCk7XG4gICAgY29uc29sZS5sb2coYERyaWZ0ZWQ6ICR7ZHJpZnRlZFN0YWNrcy5sZW5ndGh9YCk7XG4gICAgY29uc29sZS5sb2coYEVycm9yczogJHtlcnJvclN0YWNrcy5sZW5ndGh9YCk7XG5cbiAgICBpZiAoZHJpZnRlZFN0YWNrcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zb2xlLmxvZygnXFxuRHJpZnRlZCBzdGFja3M6Jyk7XG4gICAgICBmb3IgKGNvbnN0IHN0YWNrIG9mIGRyaWZ0ZWRTdGFja3MpIHtcbiAgICAgICAgY29uc3QgcmVzb3VyY2VDb3VudCA9IHN0YWNrLmRyaWZ0ZWRSZXNvdXJjZXM/Lmxlbmd0aCB8fCAwO1xuICAgICAgICBjb25zb2xlLmxvZyhgICAtICR7c3RhY2suc3RhY2tOYW1lfSAoJHtyZXNvdXJjZUNvdW50fSByZXNvdXJjZXMpYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGVycm9yU3RhY2tzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnNvbGUubG9nKCdcXG5TdGFja3Mgd2l0aCBlcnJvcnM6Jyk7XG4gICAgICBmb3IgKGNvbnN0IHN0YWNrIG9mIGVycm9yU3RhY2tzKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGAgIC0gJHtzdGFjay5zdGFja05hbWV9OiAke3N0YWNrLmVycm9yfWApO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgc2F2ZVJlc3VsdHMoKTogdm9pZCB7XG4gICAgY29uc3Qgb3V0cHV0RmlsZSA9IHByb2Nlc3MuZW52LkRSSUZUX0RFVEVDVElPTl9PVVRQVVQgfHwgJ2RyaWZ0LWRldGVjdGlvbi1yZXN1bHRzLmpzb24nO1xuICAgIHdyaXRlRmlsZVN5bmMob3V0cHV0RmlsZSwgSlNPTi5zdHJpbmdpZnkodGhpcy5yZXN1bHRzLCBudWxsLCAyKSk7XG4gICAgY29uc29sZS5sb2coYFxcblJlc3VsdHMgc2F2ZWQgdG86ICR7b3V0cHV0RmlsZX1gKTtcbiAgfVxuXG4gIHByaXZhdGUgc2hvdWxkRmFpbCgpOiBib29sZWFuIHtcbiAgICBpZiAoIXRoaXMub3B0aW9ucy5mYWlsT25EcmlmdCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnJlc3VsdHMuc29tZShyID0+IHIuZHJpZnRTdGF0dXMgPT09ICdEUklGVEVEJyk7XG4gIH1cbn1cblxuLy8gUGFyc2UgY29tbWFuZCBsaW5lIGFyZ3VtZW50c1xuZnVuY3Rpb24gcGFyc2VBcmdzKCk6IERyaWZ0RGV0ZWN0aW9uT3B0aW9ucyB7XG4gIGNvbnN0IGFyZ3MgPSBwcm9jZXNzLmFyZ3Yuc2xpY2UoMik7XG4gIGNvbnN0IG9wdGlvbnM6IERyaWZ0RGV0ZWN0aW9uT3B0aW9ucyA9IHtcbiAgICByZWdpb246IHByb2Nlc3MuZW52LkFXU19SRUdJT04gfHwgJ3VzLWVhc3QtMScsXG4gIH07XG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgc3dpdGNoIChhcmdzW2ldKSB7XG4gICAgICBjYXNlICctLXJlZ2lvbic6XG4gICAgICAgIG9wdGlvbnMucmVnaW9uID0gYXJnc1srK2ldO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJy0tc3RhY2tzJzpcbiAgICAgICAgb3B0aW9ucy5zdGFja05hbWVzID0gYXJnc1srK2ldLnNwbGl0KCcsJyk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnLS10aW1lb3V0JzpcbiAgICAgICAgb3B0aW9ucy50aW1lb3V0ID0gcGFyc2VJbnQoYXJnc1srK2ldKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICctLW5vLWZhaWwtb24tZHJpZnQnOlxuICAgICAgICBvcHRpb25zLmZhaWxPbkRyaWZ0ID0gZmFsc2U7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS5lcnJvcihgVW5rbm93biBhcmd1bWVudDogJHthcmdzW2ldfWApO1xuICAgICAgICBwcmludFVzYWdlKCk7XG4gICAgICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gb3B0aW9ucztcbn1cblxuZnVuY3Rpb24gcHJpbnRVc2FnZSgpOiB2b2lkIHtcbiAgY29uc29sZS5sb2coYFxuVXNhZ2U6IGRldGVjdC1kcmlmdC50cyBbb3B0aW9uc11cblxuT3B0aW9uczpcbiAgLS1yZWdpb24gPHJlZ2lvbj4gICAgICAgICAgIEFXUyByZWdpb24gKGRlZmF1bHQ6IHVzLWVhc3QtMSBvciBBV1NfUkVHSU9OIGVudiB2YXIpXG4gIC0tc3RhY2tzIDxzdGFjazEsc3RhY2syPiAgICBDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBzdGFjayBuYW1lcyAoZGVmYXVsdDogYWxsIHN0YWNrcylcbiAgLS10aW1lb3V0IDxtaW51dGVzPiAgICAgICAgIFRpbWVvdXQgaW4gbWludXRlcyAoZGVmYXVsdDogMzApXG4gIC0tbm8tZmFpbC1vbi1kcmlmdCAgICAgICAgIERvbid0IGV4aXQgd2l0aCBlcnJvciBjb2RlIGlmIGRyaWZ0IGlzIGRldGVjdGVkXG5cbkVudmlyb25tZW50IHZhcmlhYmxlczpcbiAgQVdTX1JFR0lPTiAgICAgICAgICAgICAgICAgIERlZmF1bHQgQVdTIHJlZ2lvblxuICBEUklGVF9ERVRFQ1RJT05fT1VUUFVUICAgICAgT3V0cHV0IGZpbGUgcGF0aCAoZGVmYXVsdDogZHJpZnQtZGV0ZWN0aW9uLXJlc3VsdHMuanNvbilcbmApO1xufVxuXG4vLyBNYWluIGVudHJ5IHBvaW50XG5pZiAocmVxdWlyZS5tYWluID09PSBtb2R1bGUpIHtcbiAgY29uc3Qgb3B0aW9ucyA9IHBhcnNlQXJncygpO1xuICBjb25zdCBkZXRlY3RvciA9IG5ldyBEcmlmdERldGVjdG9yKG9wdGlvbnMpO1xuICBkZXRlY3Rvci5ydW4oKS5jYXRjaChjb25zb2xlLmVycm9yKTtcbn1cblxuZXhwb3J0IHsgRHJpZnREZXRlY3RvciwgRHJpZnREZXRlY3Rpb25PcHRpb25zLCBEcmlmdFJlc3VsdCwgS25vd25FcnJvclJlc3VsdCwgRHJpZnRlZFJlc291cmNlIH07Il19
|
|
260
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0ZWN0LWRyaWZ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RyaWZ0L2RldGVjdC1kcmlmdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBRUEsMkRBQThDO0FBQzlDLHFDQUF3QztBQXVDeEMsTUFBTSxhQUFhO0lBQ0EsT0FBTyxDQUF3QjtJQUMvQixPQUFPLEdBQWtCLEVBQUUsQ0FBQztJQUU3QyxZQUFZLE9BQThCO1FBQ3hDLElBQUksQ0FBQyxPQUFPLEdBQUc7WUFDYixPQUFPLEVBQUUsRUFBRTtZQUNYLFdBQVcsRUFBRSxJQUFJO1lBQ2pCLEdBQUcsT0FBTztTQUNYLENBQUM7SUFDSixDQUFDO0lBRU0sS0FBSyxDQUFDLEdBQUc7UUFDZCxPQUFPLENBQUMsR0FBRyxDQUFDLHNDQUFzQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFekUsSUFBSSxDQUFDO1lBQ0gsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUU3QyxLQUFLLE1BQU0sU0FBUyxJQUFJLE1BQU0sRUFBRSxDQUFDO2dCQUMvQixNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUM7WUFDeEMsQ0FBQztZQUVELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7WUFFbkIsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQztnQkFDdEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUNsQixDQUFDO1FBQ0gsQ0FBQztRQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1lBQzVELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDbEIsQ0FBQztJQUNILENBQUM7SUFFTyxL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Q0FZYixDQUFDLENBQUM7QUFDSCxDQUFDO0FBRUQsbUJBQW1CO0FBQ25CLElBQUksT0FBTyxDQUFDLElBQUksS0FBSyxNQUFNLEVBQUUsQ0FBQztJQUM1QixNQUFNLE9BQU8sR0FBRyxTQUFTLEVBQUUsQ0FBQztJQUM1QixNQUFNLFFBQVEsR0FBRyxJQUFJLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN0QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG5pbXBvcnQgeyBleGVjU3luYyB9IGZyb20gJ25vZGU6Y2hpbGRfcHJvY2Vzcyc7XG5pbXBvcnQgeyB3cml0ZUZpbGVTeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5cbmludGVyZmFjZSBEcmlmdERldGVjdGlvbk9wdGlvbnMge1xuICByZWdpb246IHN0cmluZztcbiAgc3RhY2tOYW1lcz86IHN0cmluZ1tdO1xuICB0aW1lb3V0PzogbnVtYmVyO1xuICBmYWlsT25EcmlmdD86IGJvb2xlYW47XG59XG5cbmludGVyZmFjZSBEcmlmdFJlc3VsdCB7XG4gIHN0YWNrTmFtZTogc3RyaW5nO1xuICBkcmlmdFN0YXR1czogJ0lOX1NZTkMnIHwgJ0RSSUZURUQnIHwgJ1VOS05PV04nIHwgJ05PVF9DSEVDS0VEJztcbiAgZHJpZnRlZFJlc291cmNlcz86IERyaWZ0ZWRSZXNvdXJjZVtdO1xuICBlcnJvcj86IHN0cmluZztcbiAga25vd25FcnJvcnNIYW5kbGVkPzogS25vd25FcnJvclJlc3VsdFtdO1xufVxuXG5pbnRlcmZhY2UgS25vd25FcnJvclJlc3VsdCB7XG4gIHJlYWRvbmx5IHJlc291cmNlSWQ6IHN0cmluZztcbiAgcmVhZG9ubHkgZXJyb3JUeXBlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG9yaWdpbmFsRXJyb3I6IGFueTtcbiAgcmVhZG9ubHkgaGFuZGxlZDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgbWVzc2FnZT86IHN0cmluZztcbn1cblxuaW50ZXJmYWNlIERyaWZ0ZWRSZXNvdXJjZSB7XG4gIHJlYWRvbmx5IGxvZ2ljYWxSZXNvdXJjZUlkOiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlc291cmNlVHlwZTogc3RyaW5nO1xuICByZWFkb25seSBzdGFja1Jlc291cmNlRHJpZnRTdGF0dXM6IHN0cmluZztcbiAgcmVhZG9ubHkgcHJvcGVydHlEaWZmZXJlbmNlcz86IFByb3BlcnR5RGlmZmVyZW5jZVtdO1xufVxuXG5pbnRlcmZhY2UgUHJvcGVydHlEaWZmZXJlbmNlIHtcbiAgcmVhZG9ubHkgcHJvcGVydHlQYXRoOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGV4cGVjdGVkVmFsdWU6IHN0cmluZztcbiAgcmVhZG9ubHkgYWN0dWFsVmFsdWU6IHN0cmluZztcbiAgcmVhZG9ubHkgZGlmZmVyZW5jZVR5cGU6IHN0cmluZztcbn1cblxuY2xhc3MgRHJpZnREZXRlY3RvciB7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogRHJpZnREZXRlY3Rpb25PcHRpb25zO1xuICBwcml2YXRlIHJlYWRvbmx5IHJlc3VsdHM6IERyaWZ0UmVzdWx0W10gPSBbXTtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBEcmlmdERldGVjdGlvbk9wdGlvbnMpIHtcbiAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICB0aW1lb3V0OiAzMCxcbiAgICAgIGZhaWxPbkRyaWZ0OiB0cnVlLFxuICAgICAgLi4ub3B0aW9ucyxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIGFzeW5jIHJ1bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zb2xlLmxvZyhgU3RhcnRpbmcgZHJpZnQgZGV0ZWN0aW9uIGluIHJlZ2lvbiAke3RoaXMub3B0aW9ucy5yZWdpb259YCk7XG5cbiAgICB0cnkge1xuICAgICAgY29uc3Qgc3RhY2tzID0gYXdhaXQgdGhpcy5nZXRTdGFja3NUb0NoZWNrKCk7XG5cbiAgICAgIGZvciAoY29uc3Qgc3RhY2tOYW1lIG9mIHN0YWNrcykge1xuICAgICAgICBhd2FpdCB0aGlzLmNoZWNrU3RhY2tEcmlmdChzdGFja05hbWUpO1xuICAgICAgfVxuXG4gICAgICB0aGlzLnByaW50U3VtbWFyeSgpO1xuICAgICAgdGhpcy5zYXZlUmVzdWx0cygpO1xuXG4gICAgICBpZiAodGhpcy5zaG91bGRGYWlsKCkpIHtcbiAgICAgICAgcHJvY2Vzcy5leGl0KDEpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYXRhbCBlcnJvciBkdXJpbmcgZHJpZnQgZGV0ZWN0aW9uOicsIGVycm9yKTtcbiAgICAgIHByb2Nlc3MuZXhpdCgyKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFN0YWNrc1RvQ2hlY2soKTogUHJvbWlzZTxzdHJpbmdbXT4ge1xuICAgIGlmICh0aGlzLm9wdGlvbnMuc3RhY2tOYW1lcyAmJiB0aGlzLm9wdGlvbnMuc3RhY2tOYW1lcy5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gdGhpcy5vcHRpb25zLnN0YWNrTmFtZXM7XG4gICAgfVxuXG4gICAgY29uc29sZS5sb2coJ0dldHRpbmcgYWxsIHN0YWNrcyBpbiB0aGUgcmVnaW9uLi4uJyk7XG4gICAgY29uc3Qgb3V0cHV0ID0gZXhlY1N5bmMoXG4gICAgICBgYXdzIGNsb3VkZm9ybWF0aW9uIGxpc3Qtc3RhY2tzIC0tcmVnaW9uICR7dGhpcy5vcHRpb25zLnJlZ2lvbn0gLS1zdGFjay1zdGF0dXMtZmlsdGVyIENSRUFURV9DT01QTEVURSBVUERBVEVfQ09NUExFVEUgLS1xdWVyeSAnU3RhY2tTdW1tYXJpZXNbXS5TdGFja05hbWUnIC0tb3V0cHV0IGpzb25gLFxuICAgICAgeyBlbmNvZGluZzogJ3V0ZjgnIH0sXG4gICAgKTtcblxuICAgIHJldHVybiBKU09OLnBhcnNlKG91dHB1dCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNoZWNrU3RhY2tEcmlmdChzdGFja05hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnNvbGUubG9nKGBcXG5DaGVja2luZyBkcmlmdCBmb3Igc3RhY2s6ICR7c3RhY2tOYW1lfWApO1xuXG4gICAgY29uc3QgcmVzdWx0OiBEcmlmdFJlc3VsdCA9IHtcbiAgICAgIHN0YWNrTmFtZSxcbiAgICAgIGRyaWZ0U3RhdHVzOiAnTk9UX0NIRUNLRUQnLFxuICAgIH07XG5cbiAgICB0cnkge1xuICAgICAgLy8gU3RhcnQgZHJpZnQgZGV0ZWN0aW9uXG4gICAgICBjb25zdCBkcmlmdElkID0gYXdhaXQgdGhpcy5zdGFydERyaWZ0RGV0ZWN0aW9uKHN0YWNrTmFtZSk7XG4gICAgICBjb25zb2xlLmxvZyhgU3RhcnRlZCBkcmlmdCBkZXRlY3Rpb24gd2l0aCBJRDogJHtkcmlmdElkfWApO1xuXG4gICAgICAvLyBXYWl0IGZvciBjb21wbGV0aW9uXG4gICAgICBjb25zdCBkcmlmdFN0YXR1cyA9IGF3YWl0IHRoaXMud2FpdEZvckRyaWZ0RGV0ZWN0aW9uKGRyaWZ0SWQpO1xuICAgICAgcmVzdWx0LmRyaWZ0U3RhdHVzID0gZHJpZnRTdGF0dXM7XG5cbiAgICAgIGlmIChkcmlmdFN0YXR1cyA9PT0gJ0RSSUZURUQnKSB7XG4gICAgICAgIHJlc3VsdC5kcmlmdGVkUmVzb3VyY2VzID0gYXdhaXQgdGhpcy5nZXREcmlmdGVkUmVzb3VyY2VzKHN0YWNrTmFtZSk7XG4gICAgICAgIGNvbnNvbGUubG9nKGBEUklGVCBERVRFQ1RFRCBpbiBzdGFjayAke3N0YWNrTmFtZX0hYCk7XG5cbiAgICAgICAgLy8gSGFuZGxlIGtub3duIGRyaWZ0IGVycm9yc1xuICAgICAgICByZXN1bHQua25vd25FcnJvcnNIYW5kbGVkID0gYXdhaXQgdGhpcy5oYW5kbGVLbm93bkRyaWZ0RXJyb3JzKHJlc3VsdC5kcmlmdGVkUmVzb3VyY2VzKTtcblxuICAgICAgICAvLyBQcmludCBkcmlmdCBkZXRhaWxzXG4gICAgICAgIHRoaXMucHJpbnREcmlmdERldGFpbHMocmVzdWx0KTtcbiAgICAgIH0gZWxzZSBpZiAoZHJpZnRTdGF0dXMgPT09ICdJTl9TWU5DJykge1xuICAgICAgICBjb25zb2xlLmxvZyhgU3RhY2sgJHtzdGFja05hbWV9IGlzIGluIHN5bmNgKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmVycm9yKGBFcnJvciBjaGVja2luZyBkcmlmdCBmb3Igc3RhY2sgJHtzdGFja05hbWV9OmAsIGVycm9yLm1lc3NhZ2UpO1xuICAgICAgcmVzdWx0LmVycm9yID0gZXJyb3IubWVzc2FnZTtcbiAgICB9XG5cbiAgICB0aGlzLnJlc3VsdHMucHVzaChyZXN1bHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzdGFydERyaWZ0RGV0ZWN0aW9uKHN0YWNrTmFtZTogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBvdXRwdXQgPSBleGVjU3luYyhcbiAgICAgIGBhd3MgY2xvdWRmb3JtYXRpb24gZGV0ZWN0LXN0YWNrLWRyaWZ0IC0tc3RhY2stbmFtZSAke3N0YWNrTmFtZX0gLS1yZWdpb24gJHt0aGlzLm9wdGlvbnMucmVnaW9ufSAtLXF1ZXJ5ICdTdGFja0RyaWZ0RGV0ZWN0aW9uSWQnIC0tb3V0cHV0IHRleHRgLFxuICAgICAgeyBlbmNvZGluZzogJ3V0ZjgnIH0sXG4gICAgKTtcblxuICAgIHJldHVybiBvdXRwdXQudHJpbSgpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyB3YWl0Rm9yRHJpZnREZXRlY3Rpb24oZHJpZnRJZDogc3RyaW5nKTogUHJvbWlzZTwnSU5fU1lOQycgfCAnRFJJRlRFRCcgfCAnVU5LTk9XTicgfCAnTk9UX0NIRUNLRUQnPiB7XG4gICAgY29uc3QgdGltZW91dCA9IHRoaXMub3B0aW9ucy50aW1lb3V0ISAqIDYwOyAvLyBDb252ZXJ0IHRvIHNlY29uZHNcbiAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpO1xuXG4gICAgd2hpbGUgKHRydWUpIHtcbiAgICAgIGNvbnN0IGVsYXBzZWQgPSBNYXRoLmZsb29yKChEYXRlLm5vdygpIC0gc3RhcnRUaW1lKSAvIDEwMDApO1xuXG4gICAgICBpZiAoZWxhcHNlZCA+IHRpbWVvdXQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBEcmlmdCBkZXRlY3Rpb24gdGltZWQgb3V0IGFmdGVyICR7dGhpcy5vcHRpb25zLnRpbWVvdXR9IG1pbnV0ZXNgKTtcbiAgICAgIH1cblxuICAgICAgY29uc3Qgb3V0cHV0ID0gZXhlY1N5bmMoXG4gICAgICAgIGBhd3MgY2xvdWRmb3JtYXRpb24gZGVzY3JpYmUtc3RhY2stZHJpZnQtZGV0ZWN0aW9uLXN0YXR1cyAtLXN0YWNrLWRyaWZ0LWRldGVjdGlvbi1pZCAke2RyaWZ0SWR9IC0tcmVnaW9uICR7dGhpcy5vcHRpb25zLnJlZ2lvbn0gLS1vdXRwdXQganNvbmAsXG4gICAgICAgIHsgZW5jb2Rpbmc6ICd1dGY4JyB9LFxuICAgICAgKTtcblxuICAgICAgY29uc3Qgc3RhdHVzID0gSlNPTi5wYXJzZShvdXRwdXQpO1xuICAgICAgY29uc29sZS5sb2coYERyaWZ0IGRldGVjdGlvbiBzdGF0dXM6ICR7c3RhdHVzLkRldGVjdGlvblN0YXR1c30gKCR7ZWxhcHNlZH1zIGVsYXBzZWQpYCk7XG5cbiAgICAgIGlmIChzdGF0dXMuRGV0ZWN0aW9uU3RhdHVzID09PSAnREVURUNUSU9OX0NPTVBMRVRFJykge1xuICAgICAgICByZXR1cm4gc3RhdHVzLlN0YWNrRHJpZnRTdGF0dXMgYXMgJ0lOX1NZTkMnIHwgJ0RSSUZURUQnIHwgJ1VOS05PV04nIHwgJ05PVF9DSEVDS0VEJztcbiAgICAgIH0gZWxzZSBpZiAoc3RhdHVzLkRldGVjdGlvblN0YXR1cyA9PT0gJ0RFVEVDVElPTl9GQUlMRUQnKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgRHJpZnQgZGV0ZWN0aW9uIGZhaWxlZDogJHtzdGF0dXMuRGV0ZWN0aW9uU3RhdHVzUmVhc29ufWApO1xuICAgICAgfVxuXG4gICAgICAvLyBXYWl0IDEwIHNlY29uZHMgYmVmb3JlIGNoZWNraW5nIGFnYWluXG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZShyZXNvbHZlID0+IHNldFRpbWVvdXQocmVzb2x2ZSwgMTAwMDApKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldERyaWZ0ZWRSZXNvdXJjZXMoc3RhY2tOYW1lOiBzdHJpbmcpOiBQcm9taXNlPERyaWZ0ZWRSZXNvdXJjZVtdPiB7XG4gICAgY29uc3Qgb3V0cHV0ID0gZXhlY1N5bmMoXG4gICAgICBgYXdzIGNsb3VkZm9ybWF0aW9uIGRlc2NyaWJlLXN0YWNrLXJlc291cmNlLWRyaWZ0cyAtLXN0YWNrLW5hbWUgJHtzdGFja05hbWV9IC0tcmVnaW9uICR7dGhpcy5vcHRpb25zLnJlZ2lvbn0gLS1zdGFjay1yZXNvdXJjZS1kcmlmdC1zdGF0dXMtZmlsdGVycyBNT0RJRklFRCBERUxFVEVEIC0tb3V0cHV0IGpzb25gLFxuICAgICAgeyBlbmNvZGluZzogJ3V0ZjgnIH0sXG4gICAgKTtcblxuICAgIGNvbnN0IHJlc3BvbnNlID0gSlNPTi5wYXJzZShvdXRwdXQpO1xuICAgIHJldHVybiByZXNwb25zZS5TdGFja1Jlc291cmNlRHJpZnRzLm1hcCgoZHJpZnQ6IGFueSkgPT4gKHtcbiAgICAgIGxvZ2ljYWxSZXNvdXJjZUlkOiBkcmlmdC5Mb2dpY2FsUmVzb3VyY2VJZCxcbiAgICAgIHJlc291cmNlVHlwZTogZHJpZnQuUmVzb3VyY2VUeXBlLFxuICAgICAgc3RhY2tSZXNvdXJjZURyaWZ0U3RhdHVzOiBkcmlmdC5TdGFja1Jlc291cmNlRHJpZnRTdGF0dXMsXG4gICAgICBwcm9wZXJ0eURpZmZlcmVuY2VzOiBkcmlmdC5Qcm9wZXJ0eURpZmZlcmVuY2VzPy5tYXAoKGRpZmY6IGFueSkgPT4gKHtcbiAgICAgICAgcHJvcGVydHlQYXRoOiBkaWZmLlByb3BlcnR5UGF0aCxcbiAgICAgICAgZXhwZWN0ZWRWYWx1ZTogZGlmZi5FeHBlY3RlZFZhbHVlLFxuICAgICAgICBhY3R1YWxWYWx1ZTogZGlmZi5BY3R1YWxWYWx1ZSxcbiAgICAgICAgZGlmZmVyZW5jZVR5cGU6IGRpZmYuRGlmZmVyZW5jZVR5cGUsXG4gICAgICB9KSksXG4gICAgfSkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEhhbmRsZSBrbm93biBkcmlmdCBlcnJvcnMgZm9yIHNwZWNpZmljIHJlc291cmNlc1xuICAgKiBUaGlzIG1ldGhvZCBjYW4gYmUgZXh0ZW5kZWQgbGF0ZXIgdG8gaW1wbGVtZW50IGN1c3RvbSBsb2dpYyBmb3Iga25vd24gaXNzdWVzXG4gICAqL1xuICBwcml2YXRlIGFzeW5jIGhhbmRsZUtub3duRHJpZnRFcnJvcnMoZHJpZnRlZFJlc291cmNlcz86IERyaWZ0ZWRSZXNvdXJjZVtdKTogUHJvbWlzZTxLbm93bkVycm9yUmVzdWx0W10+IHtcbiAgICBjb25zdCBrbm93bkVycm9yczogS25vd25FcnJvclJlc3VsdFtdID0gW107XG5cbiAgICBpZiAoIWRyaWZ0ZWRSZXNvdXJjZXMpIHtcbiAgICAgIHJldHVybiBrbm93bkVycm9ycztcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IF9yZXNvdXJjZSBvZiBkcmlmdGVkUmVzb3VyY2VzKSB7XG5cbiAgICAgIC8vIFRPRE86IEltcGxlbWVudCBjdXN0b20gbG9naWMgaGVyZSBmb3Iga25vd24gZHJpZnQgZXJyb3JzXG4gICAgICAvLyBFeGFtcGxlIHN0cnVjdHVyZSBmb3IgaGFuZGxpbmcga25vd24gZXJyb3JzOlxuXG4gICAgICAvLyBDaGVjayBmb3IgTGFtYmRhIHJ1bnRpbWUgZHJpZnQgKGNvbW1vbiBpc3N1ZSlcbiAgICAgIC8vIGlmIChyZXNvdXJjZS5yZXNvdXJjZVR5cGUgPT09ICdBV1M6OkxhbWJkYTo6RnVuY3Rpb24nICYmIHJlc291cmNlLnByb3BlcnR5RGlmZmVyZW5jZXMpIHtcbiAgICAgIC8vICAgY29uc3QgcnVudGltZURyaWZ0ID0gcmVzb3VyY2UucHJvcGVydHlEaWZmZXJlbmNlcy5maW5kKGRpZmYgPT5cbiAgICAgIC8vICAgICBkaWZmLnByb3BlcnR5UGF0aCA9PT0gJy9SdW50aW1lJyB8fCBkaWZmLnByb3BlcnR5UGF0aCA9PT0gJ1J1bnRpbWUnLFxuICAgICAgLy8gICApO1xuXG4gICAgICAvLyAgIGlmIChydW50aW1lRHJpZnQpIHtcbiAgICAgIC8vICAgICBrbm93bkVycm9ycy5wdXNoKHtcbiAgICAgIC8vICAgICAgIHJlc291cmNlSWQ6IHJlc291cmNlLmxvZ2ljYWxSZXNvdXJjZUlkLFxuICAgICAgLy8gICAgICAgZXJyb3JUeXBlOiAnbGFtYmRhLXJ1bnRpbWUtZHJpZnQnLFxuICAgICAgLy8gICAgICAgb3JpZ2luYWxFcnJvcjogcnVudGltZURyaWZ0LFxuICAgICAgLy8gICAgICAgaGFuZGxlZDogZmFsc2UsIC8vIFdpbGwgYmUgaW1wbGVtZW50ZWQgbGF0ZXJcbiAgICAgIC8vICAgICAgIG1lc3NhZ2U6ICdMYW1iZGEgcnVudGltZSBkcmlmdCBkZXRlY3RlZCAtIG1hbnVhbCBpbXBsZW1lbnRhdGlvbiBuZWVkZWQnLFxuICAgICAgLy8gICAgIH0pO1xuICAgICAgLy8gICB9XG4gICAgICAvLyB9XG5cbiAgICAgIC8vIC8vIENoZWNrIGZvciBhdXRvLXNjYWxpbmcgcmVsYXRlZCBkcmlmdFxuICAgICAgLy8gaWYgKHJlc291cmNlLnJlc291cmNlVHlwZS5pbmNsdWRlcygnQXV0b1NjYWxpbmcnKSAmJiByZXNvdXJjZS5wcm9wZXJ0eURpZmZlcmVuY2VzKSB7XG4gICAgICAvLyAgIGtub3duRXJyb3JzLnB1c2goe1xuICAgICAgLy8gICAgIHJlc291cmNlSWQ6IHJlc291cmNlLmxvZ2ljYWxSZXNvdXJjZUlkLFxuICAgICAgLy8gICAgIGVycm9yVHlwZTogJ2F1dG9zY2FsaW5nLWRyaWZ0JyxcbiAgICAgIC8vICAgICBvcmlnaW5hbEVycm9yOiByZXNvdXJjZS5wcm9wZXJ0eURpZmZlcmVuY2VzLFxuICAgICAgLy8gICAgIGhhbmRsZWQ6IGZhbHNlLCAvLyBXaWxsIGJlIGltcGxlbWVudGVkIGxhdGVyXG4gICAgICAvLyAgICAgbWVzc2FnZTogJ0F1dG8tc2NhbGluZyBkcmlmdCBkZXRlY3RlZCAtIG1hbnVhbCBpbXBsZW1lbnRhdGlvbiBuZWVkZWQnLFxuICAgICAgLy8gICB9KTtcbiAgICAgIC8vIH1cblxuICAgICAgLy8gQWRkIG1vcmUgcGF0dGVybnMgaGVyZSBhcyBuZWVkZWRcbiAgICB9XG5cbiAgICByZXR1cm4ga25vd25FcnJvcnM7XG4gIH1cblxuICBwcml2YXRlIHByaW50RHJpZnREZXRhaWxzKHJlc3VsdDogRHJpZnRSZXN1bHQpOiB2b2lkIHtcbiAgICBpZiAoIXJlc3VsdC5kcmlmdGVkUmVzb3VyY2VzIHx8IHJlc3VsdC5kcmlmdGVkUmVzb3VyY2VzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGNvbnNvbGUubG9nKCdcXG5EcmlmdGVkIHJlc291cmNlczonKTtcbiAgICBjb25zb2xlLmxvZygnPT09PT09PT09PT09PT09PT0nKTtcblxuICAgIGZvciAoY29uc3QgcmVzb3VyY2Ugb2YgcmVzdWx0LmRyaWZ0ZWRSZXNvdXJjZXMpIHtcbiAgICAgIGNvbnNvbGUubG9nKGBcXG4tICR7cmVzb3VyY2UubG9naWNhbFJlc291cmNlSWR9ICgke3Jlc291cmNlLnJlc291cmNlVHlwZX0pYCk7XG4gICAgICBjb25zb2xlLmxvZyhgICBTdGF0dXM6ICR7cmVzb3VyY2Uuc3RhY2tSZXNvdXJjZURyaWZ0U3RhdHVzfWApO1xuXG4gICAgICBpZiAocmVzb3VyY2UucHJvcGVydHlEaWZmZXJlbmNlcykge1xuICAgICAgICBjb25zb2xlLmxvZygnICBQcm9wZXJ0eSBkaWZmZXJlbmNlczonKTtcbiAgICAgICAgZm9yIChjb25zdCBkaWZmIG9mIHJlc291cmNlLnByb3BlcnR5RGlmZmVyZW5jZXMpIHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhgICAgICR7ZGlmZi5wcm9wZXJ0eVBhdGh9OmApO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgICAgICBFeHBlY3RlZDogJHtkaWZmLmV4cGVjdGVkVmFsdWV9YCk7XG4gICAgICAgICAgY29uc29sZS5sb2coYCAgICAgIEFjdHVhbDogJHtkaWZmLmFjdHVhbFZhbHVlfWApO1xuICAgICAgICAgIGNvbnNvbGUubG9nKGAgICAgICBUeXBlOiAke2RpZmYuZGlmZmVyZW5jZVR5cGV9YCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHByaW50U3VtbWFyeSgpOiB2b2lkIHtcbiAgICBjb25zb2xlLmxvZygnXFxuPT09PT09PT09PSBEUklGVCBERVRFQ1RJT04gU1VNTUFSWSA9PT09PT09PT09Jyk7XG5cbiAgICBjb25zdCBkcmlmdGVkU3RhY2tzID0gdGhpcy5yZXN1bHRzLmZpbHRlcihyID0+IHIuZHJpZnRTdGF0dXMgPT09ICdEUklGVEVEJyk7XG4gICAgY29uc3Qgc3luY2VkU3RhY2tzID0gdGhpcy5yZXN1bHRzLmZpbHRlcihyID0+IHIuZHJpZnRTdGF0dXMgPT09ICdJTl9TWU5DJyk7XG4gICAgY29uc3QgZXJyb3JTdGFja3MgPSB0aGlzLnJlc3VsdHMuZmlsdGVyKHIgPT4gci5lcnJvcik7XG5cbiAgICBjb25zb2xlLmxvZyhgVG90YWwgc3RhY2tzIGNoZWNrZWQ6ICR7dGhpcy5yZXN1bHRzLmxlbmd0aH1gKTtcbiAgICBjb25zb2xlLmxvZyhgSW4gc3luYzogJHtzeW5jZWRTdGFja3MubGVuZ3RofWApO1xuICAgIGNvbnNvbGUubG9nKGBEcmlmdGVkOiAke2RyaWZ0ZWRTdGFja3MubGVuZ3RofWApO1xuICAgIGNvbnNvbGUubG9nKGBFcnJvcnM6ICR7ZXJyb3JTdGFja3MubGVuZ3RofWApO1xuXG4gICAgaWYgKGRyaWZ0ZWRTdGFja3MubGVuZ3RoID4gMCkge1xuICAgICAgY29uc29sZS5sb2coJ1xcbkRyaWZ0ZWQgc3RhY2tzOicpO1xuICAgICAgZm9yIChjb25zdCBzdGFjayBvZiBkcmlmdGVkU3RhY2tzKSB7XG4gICAgICAgIGNvbnN0IHJlc291cmNlQ291bnQgPSBzdGFjay5kcmlmdGVkUmVzb3VyY2VzPy5sZW5ndGggfHwgMDtcbiAgICAgICAgY29uc29sZS5sb2coYCAgLSAke3N0YWNrLnN0YWNrTmFtZX0gKCR7cmVzb3VyY2VDb3VudH0gcmVzb3VyY2VzKWApO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlcnJvclN0YWNrcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zb2xlLmxvZygnXFxuU3RhY2tzIHdpdGggZXJyb3JzOicpO1xuICAgICAgZm9yIChjb25zdCBzdGFjayBvZiBlcnJvclN0YWNrcykge1xuICAgICAgICBjb25zb2xlLmxvZyhgICAtICR7c3RhY2suc3RhY2tOYW1lfTogJHtzdGFjay5lcnJvcn1gKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNhdmVSZXN1bHRzKCk6IHZvaWQge1xuICAgIGNvbnN0IG91dHB1dEZpbGUgPSBwcm9jZXNzLmVudi5EUklGVF9ERVRFQ1RJT05fT1VUUFVUIHx8ICdkcmlmdC1kZXRlY3Rpb24tcmVzdWx0cy5qc29uJztcbiAgICB3cml0ZUZpbGVTeW5jKG91dHB1dEZpbGUsIEpTT04uc3RyaW5naWZ5KHRoaXMucmVzdWx0cywgbnVsbCwgMikpO1xuICAgIGNvbnNvbGUubG9nKGBcXG5SZXN1bHRzIHNhdmVkIHRvOiAke291dHB1dEZpbGV9YCk7XG4gIH1cblxuICBwcml2YXRlIHNob3VsZEZhaWwoKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLm9wdGlvbnMuZmFpbE9uRHJpZnQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5yZXN1bHRzLnNvbWUociA9PiByLmRyaWZ0U3RhdHVzID09PSAnRFJJRlRFRCcpO1xuICB9XG59XG5cbi8vIFBhcnNlIGNvbW1hbmQgbGluZSBhcmd1bWVudHNcbmZ1bmN0aW9uIHBhcnNlQXJncygpOiBEcmlmdERldGVjdGlvbk9wdGlvbnMge1xuICBjb25zdCBhcmdzID0gcHJvY2Vzcy5hcmd2LnNsaWNlKDIpO1xuICBjb25zdCBvcHRpb25zOiBEcmlmdERldGVjdGlvbk9wdGlvbnMgPSB7XG4gICAgcmVnaW9uOiBwcm9jZXNzLmVudi5BV1NfUkVHSU9OIHx8ICd1cy1lYXN0LTEnLFxuICB9O1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgIHN3aXRjaCAoYXJnc1tpXSkge1xuICAgICAgY2FzZSAnLS1yZWdpb24nOlxuICAgICAgICBvcHRpb25zLnJlZ2lvbiA9IGFyZ3NbKytpXTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICctLXN0YWNrcyc6XG4gICAgICAgIG9wdGlvbnMuc3RhY2tOYW1lcyA9IGFyZ3NbKytpXS5zcGxpdCgnLCcpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJy0tdGltZW91dCc6XG4gICAgICAgIG9wdGlvbnMudGltZW91dCA9IHBhcnNlSW50KGFyZ3NbKytpXSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnLS1uby1mYWlsLW9uLWRyaWZ0JzpcbiAgICAgICAgb3B0aW9ucy5mYWlsT25EcmlmdCA9IGZhbHNlO1xuICAgICAgICBicmVhaztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYFVua25vd24gYXJndW1lbnQ6ICR7YXJnc1tpXX1gKTtcbiAgICAgICAgcHJpbnRVc2FnZSgpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG9wdGlvbnM7XG59XG5cbmZ1bmN0aW9uIHByaW50VXNhZ2UoKTogdm9pZCB7XG4gIGNvbnNvbGUubG9nKGBcblVzYWdlOiBkZXRlY3QtZHJpZnQudHMgW29wdGlvbnNdXG5cbk9wdGlvbnM6XG4gIC0tcmVnaW9uIDxyZWdpb24+ICAgICAgICAgICBBV1MgcmVnaW9uIChkZWZhdWx0OiB1cy1lYXN0LTEgb3IgQVdTX1JFR0lPTiBlbnYgdmFyKVxuICAtLXN0YWNrcyA8c3RhY2sxLHN0YWNrMj4gICAgQ29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygc3RhY2sgbmFtZXMgKGRlZmF1bHQ6IGFsbCBzdGFja3MpXG4gIC0tdGltZW91dCA8bWludXRlcz4gICAgICAgICBUaW1lb3V0IGluIG1pbnV0ZXMgKGRlZmF1bHQ6IDMwKVxuICAtLW5vLWZhaWwtb24tZHJpZnQgICAgICAgICBEb24ndCBleGl0IHdpdGggZXJyb3IgY29kZSBpZiBkcmlmdCBpcyBkZXRlY3RlZFxuXG5FbnZpcm9ubWVudCB2YXJpYWJsZXM6XG4gIEFXU19SRUdJT04gICAgICAgICAgICAgICAgICBEZWZhdWx0IEFXUyByZWdpb25cbiAgRFJJRlRfREVURUNUSU9OX09VVFBVVCAgICAgIE91dHB1dCBmaWxlIHBhdGggKGRlZmF1bHQ6IGRyaWZ0LWRldGVjdGlvbi1yZXN1bHRzLmpzb24pXG5gKTtcbn1cblxuLy8gTWFpbiBlbnRyeSBwb2ludFxuaWYgKHJlcXVpcmUubWFpbiA9PT0gbW9kdWxlKSB7XG4gIGNvbnN0IG9wdGlvbnMgPSBwYXJzZUFyZ3MoKTtcbiAgY29uc3QgZGV0ZWN0b3IgPSBuZXcgRHJpZnREZXRlY3RvcihvcHRpb25zKTtcbiAgZGV0ZWN0b3IucnVuKCkuY2F0Y2goY29uc29sZS5lcnJvcik7XG59XG5cbmV4cG9ydCB7IERyaWZ0RGV0ZWN0b3IsIERyaWZ0RGV0ZWN0aW9uT3B0aW9ucywgRHJpZnRSZXN1bHQsIEtub3duRXJyb3JSZXN1bHQsIERyaWZ0ZWRSZXNvdXJjZSB9OyJdfQ==
|
package/lib/drift/github.js
CHANGED
|
@@ -6,7 +6,7 @@ const workflows_model_1 = require("projen/lib/github/workflows-model");
|
|
|
6
6
|
const base_1 = require("./base");
|
|
7
7
|
const step_1 = require("./step");
|
|
8
8
|
class GitHubDriftDetectionWorkflow extends base_1.DriftDetectionWorkflow {
|
|
9
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.GitHubDriftDetectionWorkflow", version: "0.3.
|
|
9
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.GitHubDriftDetectionWorkflow", version: "0.3.24" };
|
|
10
10
|
permissions;
|
|
11
11
|
createIssues;
|
|
12
12
|
workflow;
|
|
@@ -109,7 +109,7 @@ class GitHubDriftDetectionWorkflow extends base_1.DriftDetectionWorkflow {
|
|
|
109
109
|
}
|
|
110
110
|
generateIssueCreationScript(stage) {
|
|
111
111
|
return `
|
|
112
|
-
const fs = require('fs');
|
|
112
|
+
const fs = require('node:fs');
|
|
113
113
|
const resultsFile = '${this.namePrefix}drift-results-${stage.name}.json';
|
|
114
114
|
|
|
115
115
|
if (!fs.existsSync(resultsFile)) {
|
|
@@ -231,4 +231,4 @@ fi
|
|
|
231
231
|
}
|
|
232
232
|
}
|
|
233
233
|
exports.GitHubDriftDetectionWorkflow = GitHubDriftDetectionWorkflow;
|
|
234
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0aHViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RyaWZ0L2dpdGh1Yi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBRUEsdUVBQWtFO0FBQ2xFLGlDQUEyRztBQUMzRyxpQ0FBNEM7QUFlNUMsTUFBYSw0QkFBNkIsU0FBUSw2QkFBc0I7O0lBQ3JELFdBQVcsQ0FBMEI7SUFDckMsWUFBWSxDQUFVO0lBQ3RCLFFBQVEsQ0FBaUI7SUFFMUMsWUFBWSxPQUFnQixFQUFFLE9BQTRDO1FBQ3hFLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksSUFBSSxLQUFLLENBQUM7UUFFbEQsSUFBSSxDQUFDLFFBQVEsR0FBSSxJQUFJLENBQUMsT0FBeUIsQ0FBQyxNQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsaUJBQWlCLENBQUMsQ0FBQztRQUN6RyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNmLFFBQVEsRUFBRSxDQUFDO29CQUNULElBQUksRUFBRSxJQUFJLENBQUMsUUFBUTtpQkFDcEIsQ0FBQztZQUNGLGdCQUFnQixFQUFFO2dCQUNoQixNQUFNLEVBQUU7b0JBQ04sS0FBSyxFQUFFO3dCQUNMLFdBQVcsRUFBRSxnREFBZ0Q7d0JBQzdELFFBQVEsRUFBRSxLQUFLO3dCQUNmLElBQUksRUFBRSxRQUFRO3dCQUNkLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7cUJBQ3RDO2lCQUNGO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFFSCx5QkFBeUI7UUFDekIsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFF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QUksRUFBRSxDQUFDO2dCQUN0RCxLQUFLLEVBQUU7b0JBQ0w7d0JBQ0UsSUFBSSxFQUFFLHdCQUF3Qjt3QkFDOUIsSUFBSSxFQUFFLDhCQUE4Qjt3QkFDcEMsSUFBSSxFQUFFOzRCQUNKLElBQUksRUFBRSxlQUFlO3lCQUN0QjtxQkFDRjtvQkFDRDt3QkFDRSxJQUFJLEVBQUUsa0JBQWtCO3dCQUN4QixHQUFHLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixFQUFFO3FCQUNsQztpQkFDRjthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRU8sMkJBQTJCLENBQUMsS0FBaUM7UUFDbkUsT0FBTzs7dUJBRVksSUFBSSxDQUFDLFVBQVUsaUJBQWlCLEtBQUssQ0FBQyxJQUFJOzs7Ozs7Ozs7Ozs7Ozs7bUNBZTlCLEtBQUssQ0FBQyxJQUFJOzs7YUFHaEMsS0FBSyxDQUFDLElBQUk7Y0FDVCxLQUFLLENBQUMsTUFBTTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7aUNBNkJPLEtBQUssQ0FBQyxJQUFJOzs7Ozs7Ozs7bUNBU1IsS0FBSyxDQUFDLElBQUk7Ozs7Ozs7Ozs7OztDQVk1QyxDQUFDO0lBQ0EsQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixPQUFPOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0E2Q1YsQ0FBQztJQUNBLENBQUM7O0FBdE9ILG9FQXdPQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb2plY3QgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgR2l0SHViUHJvamVjdCwgR2l0aHViV29ya2Zsb3cgfSBmcm9tICdwcm9qZW4vbGliL2dpdGh1Yic7XG5pbXBvcnQgeyBKb2JQZXJtaXNzaW9uIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWIvd29ya2Zsb3dzLW1vZGVsJztcbmltcG9ydCB7IERyaWZ0RGV0ZWN0aW9uV29ya2Zsb3csIERyaWZ0RGV0ZWN0aW9uV29ya2Zsb3dPcHRpb25zLCBEcmlmdERldGVjdGlvblN0YWdlT3B0aW9ucyB9IGZyb20gJy4vYmFzZSc7XG5pbXBvcnQgeyBEcmlmdERldGVjdGlvblN0ZXAgfSBmcm9tICcuL3N0ZXAnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdpdEh1YkRyaWZ0RGV0ZWN0aW9uV29ya2Zsb3dPcHRpb25zIGV4dGVuZHMgRHJpZnREZXRlY3Rpb25Xb3JrZmxvd09wdGlvbnMge1xuICAvKipcbiAgICogQWRkaXRpb25hbCBwZXJtaXNzaW9ucyBmb3IgR2l0SHViIHdvcmtmbG93XG4gICAqL1xuICByZWFkb25seSBwZXJtaXNzaW9ucz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY3JlYXRlIGlzc3VlcyBvbiBkcmlmdCBkZXRlY3Rpb25cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZUlzc3Vlcz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBHaXRIdWJEcmlmdERldGVjdGlvbldvcmtmbG93IGV4dGVuZHMgRHJpZnREZXRlY3Rpb25Xb3JrZmxvdyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGVybWlzc2lvbnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBwcml2YXRlIHJlYWRvbmx5IGNyZWF0ZUlzc3VlczogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSB3b3JrZmxvdzogR2l0aHViV29ya2Zsb3c7XG5cbiAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCwgb3B0aW9uczogR2l0SHViRHJpZnREZXRlY3Rpb25Xb3JrZmxvd09wdGlvbnMpIHtcbiAgICBzdXBlcihwcm9qZWN0LCBvcHRpb25zKTtcbiAgICB0aGlzLnBlcm1pc3Npb25zID0gb3B0aW9ucy5wZXJtaXNzaW9ucztcbiAgICB0aGlzLmNyZWF0ZUlzc3VlcyA9IG9wdGlvbnMuY3JlYXRlSXNzdWVzID8/IGZhbHNlO1xuXG4gICAgdGhpcy53b3JrZmxvdyA9ICh0aGlzLnByb2plY3QgYXMgR2l0SHViUHJvamVjdCkuZ2l0aHViIS5hZGRXb3JrZmxvdyhgJHt0aGlzLm5hbWVQcmVmaXh9ZHJpZnQtZGV0ZWN0aW9uYCk7XG4gICAgdGhpcy53b3JrZmxvdy5vbih7XG4gICAgICBzY2hlZHVsZTogW3tcbiAgICAgICAgY3JvbjogdGhpcy5zY2hlZHVsZSxcbiAgICAgIH1dLFxuICAgICAgd29ya2Zsb3dEaXNwYXRjaDoge1xuICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICBzdGFnZToge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdTdGFnZSB0byBjaGVjayBmb3IgZHJpZnQgKGxlYXZlIGVtcHR5IGZvciBhbGwpJyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIHR5cGU6ICdjaG9pY2UnLFxuICAgICAgICAgICAgb3B0aW9uczogdGhpcy5zdGFnZXMubWFwKHMgPT4gcy5uYW1lKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIEFkZCBqb2IgZm9yIGVhY2ggc3RhZ2VcbiAgICBmb3IgKGNvbnN0IHN0YWdlIG9mIHRoaXMuc3RhZ2VzKSB7XG4gICAgICBjb25zdCBqb2JJZCA9IGBkcmlmdC0ke3N0YWdlLm5hbWV9YC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16MC05LV0vZywgJy0nKTtcblxuICAgICAgY29uc3QgZHJpZnRTdGVwID0gbmV3IERyaWZ0RGV0ZWN0aW9uU3RlcCh0aGlzLnByb2plY3QsIHN0YWdlKS50b0dpdGh1YigpO1xuXG4gICAgICB0aGlzLndvcmtmbG93LmFkZEpvYihqb2JJZCwge1xuICAgICAgICBuYW1lOiBgRHJpZnQgRGV0ZWN0aW9uIC0gJHtzdGFnZS5uYW1lfWAsXG4gICAgICAgIHJ1bnNPbjogWyd1YnVudHUtbGF0ZXN0J10sXG4gICAgICAgIGlmOiBgXFwke3sgZ2l0aHViLmV2ZW50X25hbWUgPT0gJ3NjaGVkdWxlJyB8fCBnaXRodWIuZXZlbnQuaW5wdXRzLnN0YWdlID09ICcnIHx8IGdpdGh1Yi5ldmVudC5pbnB1dHMuc3RhZ2UgPT0gJyR7c3RhZ2UubmFtZX0nIH19YCxcbiAgICAgICAgZW52OiBkcmlmdFN0ZXAuZW52LFxuICAgICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICAgIGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQsXG4gICAgICAgICAgLi4uKGRyaWZ0U3RlcC5wZXJtaXNzaW9ucyA/PyB7fSksXG4gICAgICAgICAgLi4uKHRoaXMuY3JlYXRlSXNzdWVzID8geyBpc3N1ZXM6IEpvYlBlcm1pc3Npb24uV1JJVEUgfSA6IHt9KSxcbiAgICAgICAgICAuLi50aGlzLnBlcm1pc3Npb25zLFxuICAgICAgICB9LFxuICAgICAgICBzdGVwczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdDaGVja291dCcsXG4gICAgICAgICAgICB1c2VzOiAnYWN0aW9ucy9jaGVja291dEB2NicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnU2V0dXAgTm9kZS5qcycsXG4gICAgICAgICAgICB1c2VzOiAnYWN0aW9ucy9zZXR1cC1ub2RlQHY2JyxcbiAgICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgICAgJ25vZGUtdmVyc2lvbic6ICcyMCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4udGhpcy5wcmVJbnN0YWxsU3RlcHMuZmxhdE1hcChzdGVwID0+IHN0ZXAudG9HaXRodWIoKS5zdGVwcyksXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ0luc3RhbGwgZGVwZW5kZW5jaWVzJyxcbiAgICAgICAgICAgIHJ1bjogYCR7dGhpcy5wcm9qZWN0LnByb2plbkNvbW1hbmR9IGluc3RhbGw6Y2lgLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4uZHJpZnRTdGVwLnN0ZXBzLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdVcGxvYWQgcmVzdWx0cycsXG4gICAgICAgICAgICB1c2VzOiAnYWN0aW9ucy91cGxvYWQtYXJ0aWZhY3RAdjcnLFxuICAgICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgICBuYW1lOiBgJHt0aGlzLm5hbWVQcmVmaXh9ZHJpZnQtcmVzdWx0cy0ke3N0YWdlLm5hbWV9YCxcbiAgICAgICAgICAgICAgcGF0aDogYCR7dGhpcy5uYW1lUHJlZml4fWRyaWZ0LXJlc3VsdHMtJHtzdGFnZS5uYW1lfS5qc29uYCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICAuLi4odGhpcy5jcmVhdGVJc3N1ZXMgPyBbe1xuICAgICAgICAgICAgbmFtZTogJ0NyZWF0ZSBJc3N1ZSBvbiBEcmlmdCcsXG4gICAgICAgICAgICBpZjogJ3N0ZXBzLmRyaWZ0Lm91dGNvbWUgPT0gXFwnZmFpbHVyZVxcJyAmJiBnaXRodWIuZXZlbnRfbmFtZSA9PSBcXCdzY2hlZHVsZVxcJycsXG4gICAgICAgICAgICB1c2VzOiAnYWN0aW9ucy9naXRodWItc2NyaXB0QHY4JyxcbiAgICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgICAgc2NyaXB0OiB0aGlzLmdlbmVyYXRlSXNzdWVDcmVhdGlvblNjcmlwdChzdGFnZSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1dIDogW10pLFxuICAgICAgICBdLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHN1bW1hcnkgam9iXG4gICAgaWYgKHRoaXMuc3RhZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMud29ya2Zsb3cuYWRkSm9iKCdkcmlmdC1zdW1tYXJ5Jywge1xuICAgICAgICBuYW1lOiAnRHJpZnQgRGV0ZWN0aW9uIFN1bW1hcnknLFxuICAgICAgICBydW5zT246IFsndWJ1bnR1LWxhdGVzdCddLFxuICAgICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICAgIGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQsXG4gICAgICAgIH0sXG4gICAgICAgIG5lZWRzOiB0aGlzLnN0YWdlcy5tYXAoc3RhZ2UgPT4gYGRyaWZ0LSR7c3RhZ2UubmFtZX1gKSxcbiAgICAgICAgc3RlcHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnRG93bmxvYWQgYWxsIGFydGlmYWN0cycsXG4gICAgICAgICAgICB1c2VzOiAnYWN0aW9ucy9kb3dubG9hZC1hcnRpZmFjdEB2OCcsXG4gICAgICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgICAgIHBhdGg6ICdkcmlmdC1yZXN1bHRzJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnR2VuZXJhdGUgc3VtbWFyeScsXG4gICAgICAgICAgICBydW46IHRoaXMuZ2VuZXJhdGVTdW1tYXJ5U2NyaXB0KCksXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVJc3N1ZUNyZWF0aW9uU2NyaXB0KHN0YWdlOiBEcmlmdERldGVjdGlvblN0YWdlT3B0aW9ucyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBcbmNvbnN0IGZzID0gcmVxdWlyZSgnZnMnKTtcbmNvbnN0IHJlc3VsdHNGaWxlID0gJyR7dGhpcy5uYW1lUHJlZml4fWRyaWZ0LXJlc3VsdHMtJHtzdGFnZS5uYW1lfS5qc29uJztcblxuaWYgKCFmcy5leGlzdHNTeW5jKHJlc3VsdHNGaWxlKSkge1xuICBjb25zb2xlLmxvZygnTm8gcmVzdWx0cyBmaWxlIGZvdW5kJyk7XG4gIHJldHVybjtcbn1cblxuY29uc3QgcmVzdWx0cyA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHJlc3VsdHNGaWxlLCAndXRmOCcpKTtcbmNvbnN0IGRyaWZ0ZWRTdGFja3MgPSByZXN1bHRzLmZpbHRlcihyID0+IHIuZHJpZnRTdGF0dXMgPT09ICdEUklGVEVEJyk7XG5cbmlmIChkcmlmdGVkU3RhY2tzLmxlbmd0aCA9PT0gMCkge1xuICBjb25zb2xlLmxvZygnTm8gZHJpZnQgZGV0ZWN0ZWQnKTtcbiAgcmV0dXJuO1xufVxuXG5jb25zdCB0aXRsZSA9ICdEcmlmdCBEZXRlY3RlZCBpbiAke3N0YWdlLm5hbWV9JztcbmNvbnN0IGJvZHkgPSBcXGAjIyBEcmlmdCBEZXRlY3Rpb24gUmVwb3J0XG5cbioqU3RhZ2U6KiogJHtzdGFnZS5uYW1lfVxuKipSZWdpb246KiogJHtzdGFnZS5yZWdpb259XG4qKlRpbWU6KiogXFwke25ldyBEYXRlKCkudG9JU09TdHJpbmcoKX1cblxuIyMjIFN1bW1hcnlcbi0gVG90YWwgc3RhY2tzIGNoZWNrZWQ6IFxcJHtyZXN1bHRzLmxlbmd0aH1cbi0gRHJpZnRlZCBzdGFja3M6IFxcJHtkcmlmdGVkU3RhY2tzLmxlbmd0aH1cblxuIyMjIERyaWZ0ZWQgU3RhY2tzXG5cXCR7ZHJpZnRlZFN0YWNrcy5tYXAoc3RhY2sgPT4ge1xuICBjb25zdCByZXNvdXJjZXMgPSBzdGFjay5kcmlmdGVkUmVzb3VyY2VzIHx8IFtdO1xuICByZXR1cm4gXFxgIyMjIyBcXCR7c3RhY2suc3RhY2tOYW1lfVxuLSBEcmlmdGVkIHJlc291cmNlczogXFwke3Jlc291cmNlcy5sZW5ndGh9XG5cXCR7cmVzb3VyY2VzLm1hcChyID0+IFxcYCAgLSBcXCR7ci5sb2dpY2FsUmVzb3VyY2VJZH0gKFxcJHtyLnJlc291cmNlVHlwZX0pXFxgKS5qb2luKCdcXFxcbicpfVxuXFxgO1xufSkuam9pbignXFxcXG4nKX1cblxuIyMjIEFjdGlvbiBSZXF1aXJlZFxuUGxlYXNlIHJldmlldyB0aGUgZHJpZnRlZCByZXNvdXJjZXMgYW5kIGVpdGhlcjpcbjEuIFVwZGF0ZSB0aGUgaW5mcmFzdHJ1Y3R1cmUgY29kZSB0byBtYXRjaCB0aGUgYWN0dWFsIHN0YXRlXG4yLiBSZXN0b3JlIHRoZSByZXNvdXJjZXMgdG8gbWF0Y2ggdGhlIGV4cGVjdGVkIHN0YXRlXG5cbltWaWV3IHdvcmtmbG93IHJ1bl0oXFwke2NvbnRleHQuc2VydmVyVXJsfS9cXCR7Y29udGV4dC5yZXBvLm93bmVyfS9cXCR7Y29udGV4dC5yZXBvLnJlcG99L2FjdGlvbnMvcnVucy9cXCR7Y29udGV4dC5ydW5JZH0pXG5cXGA7XG5cbi8vIENoZWNrIGlmIGlzc3VlIGFscmVhZHkgZXhpc3RzXG5jb25zdCBpc3N1ZXMgPSBhd2FpdCBnaXRodWIucmVzdC5pc3N1ZXMubGlzdEZvclJlcG8oe1xuICBvd25lcjogY29udGV4dC5yZXBvLm93bmVyLFxuICByZXBvOiBjb250ZXh0LnJlcG8ucmVwbyxcbiAgc3RhdGU6ICdvcGVuJyxcbiAgbGFiZWxzOiBbJ2RyaWZ0LWRldGVjdGlvbicsICcke3N0YWdlLm5hbWV9J10sXG59KTtcblxuaWYgKGlzc3Vlcy5kYXRhLmxlbmd0aCA9PT0gMCkge1xuICBhd2FpdCBnaXRodWIucmVzdC5pc3N1ZXMuY3JlYXRlKHtcbiAgICBvd25lcjogY29udGV4dC5yZXBvLm93bmVyLFxuICAgIHJlcG86IGNvbnRleHQucmVwby5yZXBvLFxuICAgIHRpdGxlLFxuICAgIGJvZHksXG4gICAgbGFiZWxzOiBbJ2RyaWZ0LWRldGVjdGlvbicsICcke3N0YWdlLm5hbWV9J10sXG4gIH0pO1xufSBlbHNlIHtcbiAgLy8gVXBkYXRlIGV4aXN0aW5nIGlzc3VlXG4gIGNvbnN0IGlzc3VlID0gaXNzdWVzLmRhdGFbMF07XG4gIGF3YWl0IGdpdGh1Yi5yZXN0Lmlzc3Vlcy5jcmVhdGVDb21tZW50KHtcbiAgICBvd25lcjogY29udGV4dC5yZXBvLm93bmVyLFxuICAgIHJlcG86IGNvbnRleHQucmVwby5yZXBvLFxuICAgIGlzc3VlX251bWJlcjogaXNzdWUubnVtYmVyLFxuICAgIGJvZHk6IGJvZHksXG4gIH0pO1xufVxuYDtcbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVTdW1tYXJ5U2NyaXB0KCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBcbiMhL2Jpbi9iYXNoXG5lY2hvIFwiIyMgRHJpZnQgRGV0ZWN0aW9uIFN1bW1hcnlcIiA+PiAkR0lUSFVCX1NURVBfU1VNTUFSWVxuZWNobyBcIlwiID4+ICRHSVRIVUJfU1RFUF9TVU1NQVJZXG5cbnRvdGFsX3N0YWNrcz0wXG50b3RhbF9kcmlmdGVkPTBcbnRvdGFsX2Vycm9ycz0wXG5cbmZvciBmaWxlIGluIGRyaWZ0LXJlc3VsdHMtKi5qc29uOyBkb1xuICBpZiBbWyAtZiBcIiRmaWxlXCIgXV07IHRoZW5cbiAgICBzdGFnZT0kKGJhc2VuYW1lICQoZGlybmFtZSBcIiRmaWxlXCIpKVxuICAgIGVjaG8gXCIjIyMgU3RhZ2U6ICRzdGFnZVwiID4+ICRHSVRIVUJfU1RFUF9TVU1NQVJZXG4gICAgXG4gICAgIyBQYXJzZSBKU09OIGFuZCBnZW5lcmF0ZSBzdW1tYXJ5XG4gICAganEgLXIgJ1xuICAgICAgLiBhcyAkcmVzdWx0cyB8XG4gICAgICBcIi0gVG90YWwgc3RhY2tzOiBcIiArICgkcmVzdWx0cyB8IGxlbmd0aCB8IHRvc3RyaW5nKSArIFwiXFxcXG5cIiArXG4gICAgICBcIi0gRHJpZnRlZDogXCIgKyAoWyRyZXN1bHRzW10gfCBzZWxlY3QoLmRyaWZ0U3RhdHVzID09IFwiRFJJRlRFRFwiKV0gfCBsZW5ndGggfCB0b3N0cmluZykgKyBcIlxcXFxuXCIgK1xuICAgICAgXCItIEVycm9yczogXCIgKyAoWyRyZXN1bHRzW10gfCBzZWxlY3QoLmVycm9yKV0gfCBsZW5ndGggfCB0b3N0cmluZykgKyBcIlxcXFxuXCIgK1xuICAgICAgKFskcmVzdWx0c1tdIHwgc2VsZWN0KC5kcmlmdFN0YXR1cyA9PSBcIkRSSUZURURcIildIHwgXG4gICAgICAgIGlmIGxlbmd0aCA+IDAgdGhlblxuICAgICAgICAgIFwiXFxcXG4qKkRyaWZ0ZWQgc3RhY2tzOioqXFxcXG5cIiArIFxuICAgICAgICAgIChtYXAoXCIgIC0gXCIgKyAuc3RhY2tOYW1lICsgXCIgKFwiICsgKCguZHJpZnRlZFJlc291cmNlcyAvLyBbXSkgfCBsZW5ndGggfCB0b3N0cmluZykgKyBcIiByZXNvdXJjZXMpXCIpIHwgam9pbihcIlxcXFxuXCIpKVxuICAgICAgICBlbHNlIFwiXCIgZW5kKVxuICAgICcgXCIkZmlsZVwiID4+ICRHSVRIVUJfU1RFUF9TVU1NQVJZXG4gICAgXG4gICAgZWNobyBcIlwiID4+ICRHSVRIVUJfU1RFUF9TVU1NQVJZXG4gICAgXG4gICAgIyBDb3VudCB0b3RhbHNcbiAgICB0b3RhbF9zdGFja3M9JCgodG90YWxfc3RhY2tzICsgJChqcSAnbGVuZ3RoJyBcIiRmaWxlXCIpKSlcbiAgICB0b3RhbF9kcmlmdGVkPSQoKHRvdGFsX2RyaWZ0ZWQgKyAkKGpxICdbLltdIHwgc2VsZWN0KC5kcmlmdFN0YXR1cyA9PSBcIkRSSUZURURcIildIHwgbGVuZ3RoJyBcIiRmaWxlXCIpKSlcbiAgICB0b3RhbF9lcnJvcnM9JCgodG90YWxfZXJyb3JzICsgJChqcSAnWy5bXSB8IHNlbGVjdCguZXJyb3IpXSB8IGxlbmd0aCcgXCIkZmlsZVwiKSkpXG4gIGZpXG5kb25lXG5cbmVjaG8gXCIjIyMgT3ZlcmFsbCBTdW1tYXJ5XCIgPj4gJEdJVEhVQl9TVEVQX1NVTU1BUllcbmVjaG8gXCItIFRvdGFsIHN0YWNrcyBjaGVja2VkOiAkdG90YWxfc3RhY2tzXCIgPj4gJEdJVEhVQl9TVEVQX1NVTU1BUllcbmVjaG8gXCItIFRvdGFsIGRyaWZ0ZWQgc3RhY2tzOiAkdG90YWxfZHJpZnRlZFwiID4+ICRHSVRIVUJfU1RFUF9TVU1NQVJZXG5lY2hvIFwiLSBUb3RhbCBlcnJvcnM6ICR0b3RhbF9lcnJvcnNcIiA+PiAkR0lUSFVCX1NURVBfU1VNTUFSWVxuXG5pZiBbWyAkdG90YWxfZHJpZnRlZCAtZ3QgMCBdXTsgdGhlblxuICBlY2hvIFwiXCIgPj4gJEdJVEhVQl9TVEVQX1NVTU1BUllcbiAgZWNobyBcIuKaoO+4jyAqKkFjdGlvbiByZXF1aXJlZDoqKiBEcmlmdCBkZXRlY3RlZCBpbiAkdG90YWxfZHJpZnRlZCBzdGFja3NcIiA+PiAkR0lUSFVCX1NURVBfU1VNTUFSWVxuZmlcbmA7XG4gIH1cblxufSJdfQ==
|
|
234
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2l0aHViLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RyaWZ0L2dpdGh1Yi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBRUEsdUVBQWtFO0FBQ2xFLGlDQUEyRztBQUMzRyxpQ0FBNEM7QUFlNUMsTUFBYSw0QkFBNkIsU0FBUSw2QkFBc0I7O0lBQ3JELFdBQVcsQ0FBMEI7SUFDckMsWUFBWSxDQUFVO0lBQ3RCLFFBQVEsQ0FBaUI7SUFFMUMsWUFBWSxPQUFnQixFQUFFLE9BQTRDO1FBQ3hFLEtBQUssQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUMsV0FBVyxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksSUFBSSxLQUFLLENBQUM7UUFFbEQsSUFBSSxDQUFDLFFBQVEsR0FBSSxJQUFJLENBQUMsT0FBeUIsQ0FBQyxNQUFPLENBQUMsV0FBVyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsaUJBQWlCLENBQUMsQ0FBQztRQUN6RyxJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUNmLFFBQVEsRUFBRSxDQUFDO29CQUNULElBQUksRUFBRSxJQUFJLENBQUMsUUFBUTtpQkFDcEIsQ0FBQztZQUNGLGdCQUFnQixFQUFFO2dCQUNoQixNQUFNLEVBQUU7b0JBQ04sS0FBSyxFQUFFO3dCQUNMLFdBQVcsRUFBRSxnREFBZ0Q7d0JBQzdELFFBQVEsRUFBRSxLQUFLO3dCQUNmLElBQUksRUFBRSxRQUFRO3dCQUNkLE9BQU8sRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7cUJBQ3RDO2lCQUNGO2FBQ0Y7U0FDRixDQUFDLENBQUM7UUFFSCx5QkFBeUI7UUFDekIsS0FBSyxNQUFNLEtBQUssSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFF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QUksRUFBRSxDQUFDO2dCQUN0RCxLQUFLLEVBQUU7b0JBQ0w7d0JBQ0UsSUFBSSxFQUFFLHdCQUF3Qjt3QkFDOUIsSUFBSSxFQUFFLDhCQUE4Qjt3QkFDcEMsSUFBSSxFQUFFOzRCQUNKLElBQUksRUFBRSxlQUFlO3lCQUN0QjtxQkFDRjtvQkFDRDt3QkFDRSxJQUFJLEVBQUUsa0JBQWtCO3dCQUN4QixHQUFHLEVBQUUsSUFBSSxDQUFDLHFCQUFxQixFQUFFO3FCQUNsQztpQkFDRjthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7SUFDSCxDQUFDO0lBRU8sMkJBQTJCLENBQUMsS0FBaUM7UUFDbkUsT0FBTzs7dUJBRVksSUFBSSxDQUFDLFVBQVUsaUJBQWlCLEtBQUssQ0FBQyxJQUFJOzs7Ozs7Ozs7Ozs7Ozs7bUNBZTlCLEtBQUssQ0FBQyxJQUFJOzs7YUFHaEMsS0FBSyxDQUFDLElBQUk7Y0FDVCxLQUFLLENBQUMsTUFBTTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7aUNBNkJPLEtBQUssQ0FBQyxJQUFJOzs7Ozs7Ozs7bUNBU1IsS0FBSyxDQUFDLElBQUk7Ozs7Ozs7Ozs7OztDQVk1QyxDQUFDO0lBQ0EsQ0FBQztJQUVPLHFCQUFxQjtRQUMzQixPQUFPOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Q0E2Q1YsQ0FBQztJQUNBLENBQUM7O0FBdE9ILG9FQXdPQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByb2plY3QgfSBmcm9tICdwcm9qZW4nO1xuaW1wb3J0IHsgR2l0SHViUHJvamVjdCwgR2l0aHViV29ya2Zsb3cgfSBmcm9tICdwcm9qZW4vbGliL2dpdGh1Yic7XG5pbXBvcnQgeyBKb2JQZXJtaXNzaW9uIH0gZnJvbSAncHJvamVuL2xpYi9naXRodWIvd29ya2Zsb3dzLW1vZGVsJztcbmltcG9ydCB7IERyaWZ0RGV0ZWN0aW9uV29ya2Zsb3csIERyaWZ0RGV0ZWN0aW9uV29ya2Zsb3dPcHRpb25zLCBEcmlmdERldGVjdGlvblN0YWdlT3B0aW9ucyB9IGZyb20gJy4vYmFzZSc7XG5pbXBvcnQgeyBEcmlmdERldGVjdGlvblN0ZXAgfSBmcm9tICcuL3N0ZXAnO1xuXG5leHBvcnQgaW50ZXJmYWNlIEdpdEh1YkRyaWZ0RGV0ZWN0aW9uV29ya2Zsb3dPcHRpb25zIGV4dGVuZHMgRHJpZnREZXRlY3Rpb25Xb3JrZmxvd09wdGlvbnMge1xuICAvKipcbiAgICogQWRkaXRpb25hbCBwZXJtaXNzaW9ucyBmb3IgR2l0SHViIHdvcmtmbG93XG4gICAqL1xuICByZWFkb25seSBwZXJtaXNzaW9ucz86IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gY3JlYXRlIGlzc3VlcyBvbiBkcmlmdCBkZXRlY3Rpb25cbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGNyZWF0ZUlzc3Vlcz86IGJvb2xlYW47XG59XG5cbmV4cG9ydCBjbGFzcyBHaXRIdWJEcmlmdERldGVjdGlvbldvcmtmbG93IGV4dGVuZHMgRHJpZnREZXRlY3Rpb25Xb3JrZmxvdyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgcGVybWlzc2lvbnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBwcml2YXRlIHJlYWRvbmx5IGNyZWF0ZUlzc3VlczogYm9vbGVhbjtcbiAgcHJpdmF0ZSByZWFkb25seSB3b3JrZmxvdzogR2l0aHViV29ya2Zsb3c7XG5cbiAgY29uc3RydWN0b3IocHJvamVjdDogUHJvamVjdCwgb3B0aW9uczogR2l0SHViRHJpZnREZXRlY3Rpb25Xb3JrZmxvd09wdGlvbnMpIHtcbiAgICBzdXBlcihwcm9qZWN0LCBvcHRpb25zKTtcbiAgICB0aGlzLnBlcm1pc3Npb25zID0gb3B0aW9ucy5wZXJtaXNzaW9ucztcbiAgICB0aGlzLmNyZWF0ZUlzc3VlcyA9IG9wdGlvbnMuY3JlYXRlSXNzdWVzID8/IGZhbHNlO1xuXG4gICAgdGhpcy53b3JrZmxvdyA9ICh0aGlzLnByb2plY3QgYXMgR2l0SHViUHJvamVjdCkuZ2l0aHViIS5hZGRXb3JrZmxvdyhgJHt0aGlzLm5hbWVQcmVmaXh9ZHJpZnQtZGV0ZWN0aW9uYCk7XG4gICAgdGhpcy53b3JrZmxvdy5vbih7XG4gICAgICBzY2hlZHVsZTogW3tcbiAgICAgICAgY3JvbjogdGhpcy5zY2hlZHVsZSxcbiAgICAgIH1dLFxuICAgICAgd29ya2Zsb3dEaXNwYXRjaDoge1xuICAgICAgICBpbnB1dHM6IHtcbiAgICAgICAgICBzdGFnZToge1xuICAgICAgICAgICAgZGVzY3JpcHRpb246ICdTdGFnZSB0byBjaGVjayBmb3IgZHJpZnQgKGxlYXZlIGVtcHR5IGZvciBhbGwpJyxcbiAgICAgICAgICAgIHJlcXVpcmVkOiBmYWxzZSxcbiAgICAgICAgICAgIHR5cGU6ICdjaG9pY2UnLFxuICAgICAgICAgICAgb3B0aW9uczogdGhpcy5zdGFnZXMubWFwKHMgPT4gcy5uYW1lKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9LFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIC8vIEFkZCBqb2IgZm9yIGVhY2ggc3RhZ2VcbiAgICBmb3IgKGNvbnN0IHN0YWdlIG9mIHRoaXMuc3RhZ2VzKSB7XG4gICAgICBjb25zdCBqb2JJZCA9IGBkcmlmdC0ke3N0YWdlLm5hbWV9YC50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1teYS16MC05LV0vZywgJy0nKTtcblxuICAgICAgY29uc3QgZHJpZnRTdGVwID0gbmV3IERyaWZ0RGV0ZWN0aW9uU3RlcCh0aGlzLnByb2plY3QsIHN0YWdlKS50b0dpdGh1YigpO1xuXG4gICAgICB0aGlzLndvcmtmbG93LmFkZEpvYihqb2JJZCwge1xuICAgICAgICBuYW1lOiBgRHJpZnQgRGV0ZWN0aW9uIC0gJHtzdGFnZS5uYW1lfWAsXG4gICAgICAgIHJ1bnNPbjogWyd1YnVudHUtbGF0ZXN0J10sXG4gICAgICAgIGlmOiBgXFwke3sgZ2l0aHViLmV2ZW50X25hbWUgPT0gJ3NjaGVkdWxlJyB8fCBnaXRodWIuZXZlbnQuaW5wdXRzLnN0YWdlID09ICcnIHx8IGdpdGh1Yi5ldmVudC5pbnB1dHMuc3RhZ2UgPT0gJyR7c3RhZ2UubmFtZX0nIH19YCxcbiAgICAgICAgZW52OiBkcmlmdFN0ZXAuZW52LFxuICAgICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICAgIGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQsXG4gICAgICAgICAgLi4uKGRyaWZ0U3RlcC5wZXJtaXNzaW9ucyA/PyB7fSksXG4gICAgICAgICAgLi4uKHRoaXMuY3JlYXRlSXNzdWVzID8geyBpc3N1ZXM6IEpvYlBlcm1pc3Npb24uV1JJVEUgfSA6IHt9KSxcbiAgICAgICAgICAuLi50aGlzLnBlcm1pc3Npb25zLFxuICAgICAgICB9LFxuICAgICAgICBzdGVwczogW1xuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdDaGVja291dCcsXG4gICAgICAgICAgICB1c2VzOiAnYWN0aW9ucy9jaGVja291dEB2NicsXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnU2V0dXAgTm9kZS5qcycsXG4gICAgICAgICAgICB1c2VzOiAnYWN0aW9ucy9zZXR1cC1ub2RlQHY2JyxcbiAgICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgICAgJ25vZGUtdmVyc2lvbic6ICcyMCcsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4udGhpcy5wcmVJbnN0YWxsU3RlcHMuZmxhdE1hcChzdGVwID0+IHN0ZXAudG9HaXRodWIoKS5zdGVwcyksXG4gICAgICAgICAge1xuICAgICAgICAgICAgbmFtZTogJ0luc3RhbGwgZGVwZW5kZW5jaWVzJyxcbiAgICAgICAgICAgIHJ1bjogYCR7dGhpcy5wcm9qZWN0LnByb2plbkNvbW1hbmR9IGluc3RhbGw6Y2lgLFxuICAgICAgICAgIH0sXG4gICAgICAgICAgLi4uZHJpZnRTdGVwLnN0ZXBzLFxuICAgICAgICAgIHtcbiAgICAgICAgICAgIG5hbWU6ICdVcGxvYWQgcmVzdWx0cycsXG4gICAgICAgICAgICB1c2VzOiAnYWN0aW9ucy91cGxvYWQtYXJ0aWZhY3RAdjcnLFxuICAgICAgICAgICAgd2l0aDoge1xuICAgICAgICAgICAgICBuYW1lOiBgJHt0aGlzLm5hbWVQcmVmaXh9ZHJpZnQtcmVzdWx0cy0ke3N0YWdlLm5hbWV9YCxcbiAgICAgICAgICAgICAgcGF0aDogYCR7dGhpcy5uYW1lUHJlZml4fWRyaWZ0LXJlc3VsdHMtJHtzdGFnZS5uYW1lfS5qc29uYCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICAuLi4odGhpcy5jcmVhdGVJc3N1ZXMgPyBbe1xuICAgICAgICAgICAgbmFtZTogJ0NyZWF0ZSBJc3N1ZSBvbiBEcmlmdCcsXG4gICAgICAgICAgICBpZjogJ3N0ZXBzLmRyaWZ0Lm91dGNvbWUgPT0gXFwnZmFpbHVyZVxcJyAmJiBnaXRodWIuZXZlbnRfbmFtZSA9PSBcXCdzY2hlZHVsZVxcJycsXG4gICAgICAgICAgICB1c2VzOiAnYWN0aW9ucy9naXRodWItc2NyaXB0QHY4JyxcbiAgICAgICAgICAgIHdpdGg6IHtcbiAgICAgICAgICAgICAgc2NyaXB0OiB0aGlzLmdlbmVyYXRlSXNzdWVDcmVhdGlvblNjcmlwdChzdGFnZSksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH1dIDogW10pLFxuICAgICAgICBdLFxuICAgICAgfSk7XG4gICAgfVxuXG4gICAgLy8gQWRkIHN1bW1hcnkgam9iXG4gICAgaWYgKHRoaXMuc3RhZ2VzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMud29ya2Zsb3cuYWRkSm9iKCdkcmlmdC1zdW1tYXJ5Jywge1xuICAgICAgICBuYW1lOiAnRHJpZnQgRGV0ZWN0aW9uIFN1bW1hcnknLFxuICAgICAgICBydW5zT246IFsndWJ1bnR1LWxhdGVzdCddLFxuICAgICAgICBwZXJtaXNzaW9uczoge1xuICAgICAgICAgIGNvbnRlbnRzOiBKb2JQZXJtaXNzaW9uLlJFQUQsXG4gICAgICAgIH0sXG4gICAgICAgIG5lZWRzOiB0aGlzLnN0YWdlcy5tYXAoc3RhZ2UgPT4gYGRyaWZ0LSR7c3RhZ2UubmFtZX1gKSxcbiAgICAgICAgc3RlcHM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnRG93bmxvYWQgYWxsIGFydGlmYWN0cycsXG4gICAgICAgICAgICB1c2VzOiAnYWN0aW9ucy9kb3dubG9hZC1hcnRpZmFjdEB2OCcsXG4gICAgICAgICAgICB3aXRoOiB7XG4gICAgICAgICAgICAgIHBhdGg6ICdkcmlmdC1yZXN1bHRzJyxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgfSxcbiAgICAgICAgICB7XG4gICAgICAgICAgICBuYW1lOiAnR2VuZXJhdGUgc3VtbWFyeScsXG4gICAgICAgICAgICBydW46IHRoaXMuZ2VuZXJhdGVTdW1tYXJ5U2NyaXB0KCksXG4gICAgICAgICAgfSxcbiAgICAgICAgXSxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2VuZXJhdGVJc3N1ZUNyZWF0aW9uU2NyaXB0KHN0YWdlOiBEcmlmdERldGVjdGlvblN0YWdlT3B0aW9ucyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGBcbmNvbnN0IGZzID0gcmVxdWlyZSgnbm9kZTpmcycpO1xuY29uc3QgcmVzdWx0c0ZpbGUgPSAnJHt0aGlzLm5hbWVQcmVmaXh9ZHJpZnQtcmVzdWx0cy0ke3N0YWdlLm5hbWV9Lmpzb24nO1xuXG5pZiAoIWZzLmV4aXN0c1N5bmMocmVzdWx0c0ZpbGUpKSB7XG4gIGNvbnNvbGUubG9nKCdObyByZXN1bHRzIGZpbGUgZm91bmQnKTtcbiAgcmV0dXJuO1xufVxuXG5jb25zdCByZXN1bHRzID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMocmVzdWx0c0ZpbGUsICd1dGY4JykpO1xuY29uc3QgZHJpZnRlZFN0YWNrcyA9IHJlc3VsdHMuZmlsdGVyKHIgPT4gci5kcmlmdFN0YXR1cyA9PT0gJ0RSSUZURUQnKTtcblxuaWYgKGRyaWZ0ZWRTdGFja3MubGVuZ3RoID09PSAwKSB7XG4gIGNvbnNvbGUubG9nKCdObyBkcmlmdCBkZXRlY3RlZCcpO1xuICByZXR1cm47XG59XG5cbmNvbnN0IHRpdGxlID0gJ0RyaWZ0IERldGVjdGVkIGluICR7c3RhZ2UubmFtZX0nO1xuY29uc3QgYm9keSA9IFxcYCMjIERyaWZ0IERldGVjdGlvbiBSZXBvcnRcblxuKipTdGFnZToqKiAke3N0YWdlLm5hbWV9XG4qKlJlZ2lvbjoqKiAke3N0YWdlLnJlZ2lvbn1cbioqVGltZToqKiBcXCR7bmV3IERhdGUoKS50b0lTT1N0cmluZygpfVxuXG4jIyMgU3VtbWFyeVxuLSBUb3RhbCBzdGFja3MgY2hlY2tlZDogXFwke3Jlc3VsdHMubGVuZ3RofVxuLSBEcmlmdGVkIHN0YWNrczogXFwke2RyaWZ0ZWRTdGFja3MubGVuZ3RofVxuXG4jIyMgRHJpZnRlZCBTdGFja3NcblxcJHtkcmlmdGVkU3RhY2tzLm1hcChzdGFjayA9PiB7XG4gIGNvbnN0IHJlc291cmNlcyA9IHN0YWNrLmRyaWZ0ZWRSZXNvdXJjZXMgfHwgW107XG4gIHJldHVybiBcXGAjIyMjIFxcJHtzdGFjay5zdGFja05hbWV9XG4tIERyaWZ0ZWQgcmVzb3VyY2VzOiBcXCR7cmVzb3VyY2VzLmxlbmd0aH1cblxcJHtyZXNvdXJjZXMubWFwKHIgPT4gXFxgICAtIFxcJHtyLmxvZ2ljYWxSZXNvdXJjZUlkfSAoXFwke3IucmVzb3VyY2VUeXBlfSlcXGApLmpvaW4oJ1xcXFxuJyl9XG5cXGA7XG59KS5qb2luKCdcXFxcbicpfVxuXG4jIyMgQWN0aW9uIFJlcXVpcmVkXG5QbGVhc2UgcmV2aWV3IHRoZSBkcmlmdGVkIHJlc291cmNlcyBhbmQgZWl0aGVyOlxuMS4gVXBkYXRlIHRoZSBpbmZyYXN0cnVjdHVyZSBjb2RlIHRvIG1hdGNoIHRoZSBhY3R1YWwgc3RhdGVcbjIuIFJlc3RvcmUgdGhlIHJlc291cmNlcyB0byBtYXRjaCB0aGUgZXhwZWN0ZWQgc3RhdGVcblxuW1ZpZXcgd29ya2Zsb3cgcnVuXShcXCR7Y29udGV4dC5zZXJ2ZXJVcmx9L1xcJHtjb250ZXh0LnJlcG8ub3duZXJ9L1xcJHtjb250ZXh0LnJlcG8ucmVwb30vYWN0aW9ucy9ydW5zL1xcJHtjb250ZXh0LnJ1bklkfSlcblxcYDtcblxuLy8gQ2hlY2sgaWYgaXNzdWUgYWxyZWFkeSBleGlzdHNcbmNvbnN0IGlzc3VlcyA9IGF3YWl0IGdpdGh1Yi5yZXN0Lmlzc3Vlcy5saXN0Rm9yUmVwbyh7XG4gIG93bmVyOiBjb250ZXh0LnJlcG8ub3duZXIsXG4gIHJlcG86IGNvbnRleHQucmVwby5yZXBvLFxuICBzdGF0ZTogJ29wZW4nLFxuICBsYWJlbHM6IFsnZHJpZnQtZGV0ZWN0aW9uJywgJyR7c3RhZ2UubmFtZX0nXSxcbn0pO1xuXG5pZiAoaXNzdWVzLmRhdGEubGVuZ3RoID09PSAwKSB7XG4gIGF3YWl0IGdpdGh1Yi5yZXN0Lmlzc3Vlcy5jcmVhdGUoe1xuICAgIG93bmVyOiBjb250ZXh0LnJlcG8ub3duZXIsXG4gICAgcmVwbzogY29udGV4dC5yZXBvLnJlcG8sXG4gICAgdGl0bGUsXG4gICAgYm9keSxcbiAgICBsYWJlbHM6IFsnZHJpZnQtZGV0ZWN0aW9uJywgJyR7c3RhZ2UubmFtZX0nXSxcbiAgfSk7XG59IGVsc2Uge1xuICAvLyBVcGRhdGUgZXhpc3RpbmcgaXNzdWVcbiAgY29uc3QgaXNzdWUgPSBpc3N1ZXMuZGF0YVswXTtcbiAgYXdhaXQgZ2l0aHViLnJlc3QuaXNzdWVzLmNyZWF0ZUNvbW1lbnQoe1xuICAgIG93bmVyOiBjb250ZXh0LnJlcG8ub3duZXIsXG4gICAgcmVwbzogY29udGV4dC5yZXBvLnJlcG8sXG4gICAgaXNzdWVfbnVtYmVyOiBpc3N1ZS5udW1iZXIsXG4gICAgYm9keTogYm9keSxcbiAgfSk7XG59XG5gO1xuICB9XG5cbiAgcHJpdmF0ZSBnZW5lcmF0ZVN1bW1hcnlTY3JpcHQoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gYFxuIyEvYmluL2Jhc2hcbmVjaG8gXCIjIyBEcmlmdCBEZXRlY3Rpb24gU3VtbWFyeVwiID4+ICRHSVRIVUJfU1RFUF9TVU1NQVJZXG5lY2hvIFwiXCIgPj4gJEdJVEhVQl9TVEVQX1NVTU1BUllcblxudG90YWxfc3RhY2tzPTBcbnRvdGFsX2RyaWZ0ZWQ9MFxudG90YWxfZXJyb3JzPTBcblxuZm9yIGZpbGUgaW4gZHJpZnQtcmVzdWx0cy0qLmpzb247IGRvXG4gIGlmIFtbIC1mIFwiJGZpbGVcIiBdXTsgdGhlblxuICAgIHN0YWdlPSQoYmFzZW5hbWUgJChkaXJuYW1lIFwiJGZpbGVcIikpXG4gICAgZWNobyBcIiMjIyBTdGFnZTogJHN0YWdlXCIgPj4gJEdJVEhVQl9TVEVQX1NVTU1BUllcbiAgICBcbiAgICAjIFBhcnNlIEpTT04gYW5kIGdlbmVyYXRlIHN1bW1hcnlcbiAgICBqcSAtciAnXG4gICAgICAuIGFzICRyZXN1bHRzIHxcbiAgICAgIFwiLSBUb3RhbCBzdGFja3M6IFwiICsgKCRyZXN1bHRzIHwgbGVuZ3RoIHwgdG9zdHJpbmcpICsgXCJcXFxcblwiICtcbiAgICAgIFwiLSBEcmlmdGVkOiBcIiArIChbJHJlc3VsdHNbXSB8IHNlbGVjdCguZHJpZnRTdGF0dXMgPT0gXCJEUklGVEVEXCIpXSB8IGxlbmd0aCB8IHRvc3RyaW5nKSArIFwiXFxcXG5cIiArXG4gICAgICBcIi0gRXJyb3JzOiBcIiArIChbJHJlc3VsdHNbXSB8IHNlbGVjdCguZXJyb3IpXSB8IGxlbmd0aCB8IHRvc3RyaW5nKSArIFwiXFxcXG5cIiArXG4gICAgICAoWyRyZXN1bHRzW10gfCBzZWxlY3QoLmRyaWZ0U3RhdHVzID09IFwiRFJJRlRFRFwiKV0gfCBcbiAgICAgICAgaWYgbGVuZ3RoID4gMCB0aGVuXG4gICAgICAgICAgXCJcXFxcbioqRHJpZnRlZCBzdGFja3M6KipcXFxcblwiICsgXG4gICAgICAgICAgKG1hcChcIiAgLSBcIiArIC5zdGFja05hbWUgKyBcIiAoXCIgKyAoKC5kcmlmdGVkUmVzb3VyY2VzIC8vIFtdKSB8IGxlbmd0aCB8IHRvc3RyaW5nKSArIFwiIHJlc291cmNlcylcIikgfCBqb2luKFwiXFxcXG5cIikpXG4gICAgICAgIGVsc2UgXCJcIiBlbmQpXG4gICAgJyBcIiRmaWxlXCIgPj4gJEdJVEhVQl9TVEVQX1NVTU1BUllcbiAgICBcbiAgICBlY2hvIFwiXCIgPj4gJEdJVEhVQl9TVEVQX1NVTU1BUllcbiAgICBcbiAgICAjIENvdW50IHRvdGFsc1xuICAgIHRvdGFsX3N0YWNrcz0kKCh0b3RhbF9zdGFja3MgKyAkKGpxICdsZW5ndGgnIFwiJGZpbGVcIikpKVxuICAgIHRvdGFsX2RyaWZ0ZWQ9JCgodG90YWxfZHJpZnRlZCArICQoanEgJ1suW10gfCBzZWxlY3QoLmRyaWZ0U3RhdHVzID09IFwiRFJJRlRFRFwiKV0gfCBsZW5ndGgnIFwiJGZpbGVcIikpKVxuICAgIHRvdGFsX2Vycm9ycz0kKCh0b3RhbF9lcnJvcnMgKyAkKGpxICdbLltdIHwgc2VsZWN0KC5lcnJvcildIHwgbGVuZ3RoJyBcIiRmaWxlXCIpKSlcbiAgZmlcbmRvbmVcblxuZWNobyBcIiMjIyBPdmVyYWxsIFN1bW1hcnlcIiA+PiAkR0lUSFVCX1NURVBfU1VNTUFSWVxuZWNobyBcIi0gVG90YWwgc3RhY2tzIGNoZWNrZWQ6ICR0b3RhbF9zdGFja3NcIiA+PiAkR0lUSFVCX1NURVBfU1VNTUFSWVxuZWNobyBcIi0gVG90YWwgZHJpZnRlZCBzdGFja3M6ICR0b3RhbF9kcmlmdGVkXCIgPj4gJEdJVEhVQl9TVEVQX1NVTU1BUllcbmVjaG8gXCItIFRvdGFsIGVycm9yczogJHRvdGFsX2Vycm9yc1wiID4+ICRHSVRIVUJfU1RFUF9TVU1NQVJZXG5cbmlmIFtbICR0b3RhbF9kcmlmdGVkIC1ndCAwIF1dOyB0aGVuXG4gIGVjaG8gXCJcIiA+PiAkR0lUSFVCX1NURVBfU1VNTUFSWVxuICBlY2hvIFwi4pqg77iPICoqQWN0aW9uIHJlcXVpcmVkOioqIERyaWZ0IGRldGVjdGVkIGluICR0b3RhbF9kcmlmdGVkIHN0YWNrc1wiID4+ICRHSVRIVUJfU1RFUF9TVU1NQVJZXG5maVxuYDtcbiAgfVxuXG59Il19
|
package/lib/drift/gitlab.js
CHANGED
|
@@ -6,7 +6,7 @@ const projen_1 = require("projen");
|
|
|
6
6
|
const base_1 = require("./base");
|
|
7
7
|
const step_1 = require("./step");
|
|
8
8
|
class GitLabDriftDetectionWorkflow extends base_1.DriftDetectionWorkflow {
|
|
9
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.GitLabDriftDetectionWorkflow", version: "0.3.
|
|
9
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.GitLabDriftDetectionWorkflow", version: "0.3.24" };
|
|
10
10
|
runnerTags;
|
|
11
11
|
image;
|
|
12
12
|
config;
|
package/lib/drift/step.js
CHANGED
|
@@ -4,7 +4,7 @@ exports.DriftDetectionStep = void 0;
|
|
|
4
4
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
5
5
|
const steps_1 = require("../steps");
|
|
6
6
|
class DriftDetectionStep extends steps_1.StepSequence {
|
|
7
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.DriftDetectionStep", version: "0.3.
|
|
7
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.DriftDetectionStep", version: "0.3.24" };
|
|
8
8
|
static generateCommand(props) {
|
|
9
9
|
const args = [
|
|
10
10
|
'detect-drift',
|
package/lib/release.js
CHANGED
|
@@ -4,24 +4,24 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
5
|
};
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
const
|
|
8
|
-
const
|
|
7
|
+
const node_fs_1 = require("node:fs");
|
|
8
|
+
const node_path_1 = require("node:path");
|
|
9
9
|
// @ts-ignore
|
|
10
10
|
const commit_and_tag_version_1 = __importDefault(require("commit-and-tag-version"));
|
|
11
11
|
function createManifest(outDir, namespace) {
|
|
12
|
-
const projectInfo = JSON.parse((0,
|
|
12
|
+
const projectInfo = JSON.parse((0, node_fs_1.readFileSync)((0, node_path_1.join)('package.json')).toString('utf-8'));
|
|
13
13
|
const assemblyManifest = JSON.stringify({
|
|
14
14
|
name: `${namespace}/${projectInfo.name}`,
|
|
15
15
|
author: projectInfo.author,
|
|
16
16
|
license: projectInfo.license,
|
|
17
17
|
version: '0.0.0',
|
|
18
18
|
}, null, 2);
|
|
19
|
-
(0,
|
|
20
|
-
const rcFile = (0,
|
|
21
|
-
if ((0,
|
|
22
|
-
(0,
|
|
19
|
+
(0, node_fs_1.writeFileSync)((0, node_path_1.join)(outDir, 'package.json'), assemblyManifest, { encoding: 'utf-8' });
|
|
20
|
+
const rcFile = (0, node_path_1.join)(outDir, '.npmrc');
|
|
21
|
+
if ((0, node_fs_1.existsSync)(rcFile)) {
|
|
22
|
+
(0, node_fs_1.rmSync)(rcFile, { force: true });
|
|
23
23
|
}
|
|
24
|
-
(0,
|
|
24
|
+
(0, node_fs_1.copyFileSync)('.npmrc', rcFile);
|
|
25
25
|
}
|
|
26
26
|
function bumpVersion() {
|
|
27
27
|
void (0, commit_and_tag_version_1.default)({
|
|
@@ -47,4 +47,4 @@ switch (process.argv[2]) {
|
|
|
47
47
|
console.log('Cannot find command: ' + process.argv[2]);
|
|
48
48
|
break;
|
|
49
49
|
}
|
|
50
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVsZWFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9yZWxlYXNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUVBLHFDQUF3RjtBQUN4Rix5Q0FBaUM7QUFDakMsYUFBYTtBQUNiLG9GQUF5QztBQUV6QyxTQUFTLGNBQWMsQ0FBQyxNQUFjLEVBQUUsU0FBaUI7SUFDdkQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFBLHNCQUFZLEVBQUMsSUFBQSxnQkFBSSxFQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7SUFDckYsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDO1FBQ3RDLElBQUksRUFBRSxHQUFHLFNBQVMsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFO1FBQ3hDLE1BQU0sRUFBRSxXQUFXLENBQUMsTUFBTTtRQUMxQixPQUFPLEVBQUUsV0FBVyxDQUFDLE9BQU87UUFDNUIsT0FBTyxFQUFFLE9BQU87S0FDakIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDWixJQUFBLHVCQUFhLEVBQUMsSUFBQSxnQkFBSSxFQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsRUFBRSxnQkFBZ0IsRUFBRSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBRXJGLE1BQU0sTUFBTSxHQUFHLElBQUEsZ0JBQUksRUFBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDdEMsSUFBSSxJQUFBLG9CQUFVLEVBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQztRQUN2QixJQUFBLGdCQUFNLEVBQUMsTUFBTSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUNELElBQUEsc0JBQVksRUFBQyxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDakMsQ0FBQztBQUVELFNBQVMsV0FBVztJQUNsQixLQUFLLElBQUEsZ0NBQUcsRUFBQztRQUNQLFlBQVksRUFBRSxFQUFFO1FBQ2hCLFNBQVMsRUFBRSxFQUFFO1FBQ2IsSUFBSSxFQUFFO1lBQ0osTUFBTSxFQUFFLElBQUk7WUFDWixTQUFTLEVBQUUsSUFBSTtTQUNoQjtRQUNELFlBQVksRUFBRSxLQUFLO1FBQ25CLGNBQWMsRUFBRSxJQUFJO1FBQ3BCLFNBQVMsRUFBRSxFQUFFO0tBQ2QsQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBRUQsUUFBUSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7SUFDeEIsS0FBSyxpQkFBaUI7UUFDcEIsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ2pELE1BQU07SUFDUixLQUFLLE1BQU07UUFDVCxXQUFXLEVBQUUsQ0FBQztRQUNkLE1BQU07SUFDUjtRQUNFLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELE1BQU07QUFDVixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG5pbXBvcnQgeyBjb3B5RmlsZVN5bmMsIGV4aXN0c1N5bmMsIHJlYWRGaWxlU3luYywgd3JpdGVGaWxlU3luYywgcm1TeW5jIH0gZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBqb2luIH0gZnJvbSAnbm9kZTpwYXRoJztcbi8vIEB0cy1pZ25vcmVcbmltcG9ydCBjdHYgZnJvbSAnY29tbWl0LWFuZC10YWctdmVyc2lvbic7XG5cbmZ1bmN0aW9uIGNyZWF0ZU1hbmlmZXN0KG91dERpcjogc3RyaW5nLCBuYW1lc3BhY2U6IHN0cmluZykge1xuICBjb25zdCBwcm9qZWN0SW5mbyA9IEpTT04ucGFyc2UocmVhZEZpbGVTeW5jKGpvaW4oJ3BhY2thZ2UuanNvbicpKS50b1N0cmluZygndXRmLTgnKSk7XG4gIGNvbnN0IGFzc2VtYmx5TWFuaWZlc3QgPSBKU09OLnN0cmluZ2lmeSh7XG4gICAgbmFtZTogYCR7bmFtZXNwYWNlfS8ke3Byb2plY3RJbmZvLm5hbWV9YCxcbiAgICBhdXRob3I6IHByb2plY3RJbmZvLmF1dGhvcixcbiAgICBsaWNlbnNlOiBwcm9qZWN0SW5mby5saWNlbnNlLFxuICAgIHZlcnNpb246ICcwLjAuMCcsXG4gIH0sIG51bGwsIDIpO1xuICB3cml0ZUZpbGVTeW5jKGpvaW4ob3V0RGlyLCAncGFja2FnZS5qc29uJyksIGFzc2VtYmx5TWFuaWZlc3QsIHsgZW5jb2Rpbmc6ICd1dGYtOCcgfSk7XG5cbiAgY29uc3QgcmNGaWxlID0gam9pbihvdXREaXIsICcubnBtcmMnKTtcbiAgaWYgKGV4aXN0c1N5bmMocmNGaWxlKSkge1xuICAgIHJtU3luYyhyY0ZpbGUsIHsgZm9yY2U6IHRydWUgfSk7XG4gIH1cbiAgY29weUZpbGVTeW5jKCcubnBtcmMnLCByY0ZpbGUpO1xufVxuXG5mdW5jdGlvbiBidW1wVmVyc2lvbigpIHtcbiAgdm9pZCBjdHYoe1xuICAgIHBhY2thZ2VGaWxlczogW10sXG4gICAgYnVtcEZpbGVzOiBbXSxcbiAgICBza2lwOiB7XG4gICAgICBjb21taXQ6IHRydWUsXG4gICAgICBjaGFuZ2Vsb2c6IHRydWUsXG4gICAgfSxcbiAgICBmaXJzdFJlbGVhc2U6IGZhbHNlLFxuICAgIGdpdFRhZ0ZhbGxiYWNrOiB0cnVlLFxuICAgIHRhZ1ByZWZpeDogJycsXG4gIH0pLnRoZW4oY29uc29sZS5sb2cpLmNhdGNoKGNvbnNvbGUuZXJyb3IpO1xufVxuXG5zd2l0Y2ggKHByb2Nlc3MuYXJndlsyXSkge1xuICBjYXNlICdjcmVhdGUtbWFuaWZlc3QnOlxuICAgIGNyZWF0ZU1hbmlmZXN0KHByb2Nlc3MuYXJndlszXSwgcHJvY2Vzcy5hcmd2WzRdKTtcbiAgICBicmVhaztcbiAgY2FzZSAnYnVtcCc6XG4gICAgYnVtcFZlcnNpb24oKTtcbiAgICBicmVhaztcbiAgZGVmYXVsdDpcbiAgICBjb25zb2xlLmxvZygnQ2Fubm90IGZpbmQgY29tbWFuZDogJyArIHByb2Nlc3MuYXJndlsyXSk7XG4gICAgYnJlYWs7XG59XG4iXX0=
|
|
@@ -8,7 +8,7 @@ const step_1 = require("./step");
|
|
|
8
8
|
*/
|
|
9
9
|
class AmplifyDeployStep extends step_1.PipelineStep {
|
|
10
10
|
config;
|
|
11
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.AmplifyDeployStep", version: "0.3.
|
|
11
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.AmplifyDeployStep", version: "0.3.24" };
|
|
12
12
|
branchName;
|
|
13
13
|
region;
|
|
14
14
|
constructor(project, config) {
|
|
@@ -5,7 +5,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
|
5
5
|
const step_1 = require("./step");
|
|
6
6
|
class DownloadArtifactStep extends step_1.PipelineStep {
|
|
7
7
|
config;
|
|
8
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.DownloadArtifactStep", version: "0.3.
|
|
8
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.DownloadArtifactStep", version: "0.3.24" };
|
|
9
9
|
constructor(project, config) {
|
|
10
10
|
super(project);
|
|
11
11
|
this.config = config;
|
|
@@ -37,7 +37,7 @@ class DownloadArtifactStep extends step_1.PipelineStep {
|
|
|
37
37
|
exports.DownloadArtifactStep = DownloadArtifactStep;
|
|
38
38
|
class UploadArtifactStep extends step_1.PipelineStep {
|
|
39
39
|
config;
|
|
40
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.UploadArtifactStep", version: "0.3.
|
|
40
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.UploadArtifactStep", version: "0.3.24" };
|
|
41
41
|
constructor(project, config) {
|
|
42
42
|
super(project);
|
|
43
43
|
this.config = config;
|
|
@@ -9,7 +9,7 @@ const step_1 = require("./step");
|
|
|
9
9
|
*/
|
|
10
10
|
class AwsAssumeRoleStep extends step_1.PipelineStep {
|
|
11
11
|
config;
|
|
12
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.AwsAssumeRoleStep", version: "0.3.
|
|
12
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.AwsAssumeRoleStep", version: "0.3.24" };
|
|
13
13
|
constructor(project, config) {
|
|
14
14
|
super(project);
|
|
15
15
|
this.config = config;
|
|
@@ -14,7 +14,7 @@ const step_1 = require("./step");
|
|
|
14
14
|
*/
|
|
15
15
|
class CdkOutputsSummaryStep extends step_1.PipelineStep {
|
|
16
16
|
options;
|
|
17
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.CdkOutputsSummaryStep", version: "0.3.
|
|
17
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.CdkOutputsSummaryStep", version: "0.3.24" };
|
|
18
18
|
constructor(project, options) {
|
|
19
19
|
super(project);
|
|
20
20
|
this.options = options;
|
|
@@ -12,7 +12,7 @@ const step_1 = require("./step");
|
|
|
12
12
|
*/
|
|
13
13
|
class PnpmSetupStep extends step_1.PipelineStep {
|
|
14
14
|
options;
|
|
15
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.PnpmSetupStep", version: "0.3.
|
|
15
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.PnpmSetupStep", version: "0.3.24" };
|
|
16
16
|
constructor(project, options = {}) {
|
|
17
17
|
super(project);
|
|
18
18
|
this.options = options;
|
|
@@ -53,7 +53,7 @@ exports.PnpmSetupStep = PnpmSetupStep;
|
|
|
53
53
|
* which is required for Yarn Berry (v2+) to work correctly.
|
|
54
54
|
*/
|
|
55
55
|
class CorepackSetupStep extends step_1.PipelineStep {
|
|
56
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.CorepackSetupStep", version: "0.3.
|
|
56
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.CorepackSetupStep", version: "0.3.24" };
|
|
57
57
|
constructor(project) {
|
|
58
58
|
super(project);
|
|
59
59
|
}
|
package/lib/steps/registries.js
CHANGED
|
@@ -13,7 +13,7 @@ const step_1 = require("./step");
|
|
|
13
13
|
*/
|
|
14
14
|
class GithubPackagesLoginStep extends step_1.PipelineStep {
|
|
15
15
|
options;
|
|
16
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.GithubPackagesLoginStep", version: "0.3.
|
|
16
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.GithubPackagesLoginStep", version: "0.3.24" };
|
|
17
17
|
constructor(project, options) {
|
|
18
18
|
super(project);
|
|
19
19
|
this.options = options;
|
|
@@ -38,7 +38,7 @@ exports.GithubPackagesLoginStep = GithubPackagesLoginStep;
|
|
|
38
38
|
*/
|
|
39
39
|
class NpmSecretStep extends step_1.PipelineStep {
|
|
40
40
|
options;
|
|
41
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.NpmSecretStep", version: "0.3.
|
|
41
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.NpmSecretStep", version: "0.3.24" };
|
|
42
42
|
constructor(project, options) {
|
|
43
43
|
super(project);
|
|
44
44
|
this.options = options;
|
|
@@ -63,7 +63,7 @@ exports.NpmSecretStep = NpmSecretStep;
|
|
|
63
63
|
*/
|
|
64
64
|
class CodeArtifactLoginStep extends step_1.StepSequence {
|
|
65
65
|
options;
|
|
66
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.CodeArtifactLoginStep", version: "0.3.
|
|
66
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.CodeArtifactLoginStep", version: "0.3.24" };
|
|
67
67
|
constructor(project, options) {
|
|
68
68
|
super(project, [
|
|
69
69
|
new aws_assume_role_step_1.AwsAssumeRoleStep(project, { roleArn: options.role, sessionName: 'CodeArtifact' }),
|
package/lib/steps/step.js
CHANGED
|
@@ -8,7 +8,7 @@ const engines_1 = require("../engines");
|
|
|
8
8
|
*/
|
|
9
9
|
class PipelineStep {
|
|
10
10
|
project;
|
|
11
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.PipelineStep", version: "0.3.
|
|
11
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.PipelineStep", version: "0.3.24" };
|
|
12
12
|
/**
|
|
13
13
|
* Initializes a new instance of a PipelineStep with a reference to a projen project.
|
|
14
14
|
* @param project - The projen project reference.
|
|
@@ -41,7 +41,7 @@ exports.PipelineStep = PipelineStep;
|
|
|
41
41
|
* Concrete implementation of PipelineStep that executes simple commands.
|
|
42
42
|
*/
|
|
43
43
|
class SimpleCommandStep extends PipelineStep {
|
|
44
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.SimpleCommandStep", version: "0.3.
|
|
44
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.SimpleCommandStep", version: "0.3.24" };
|
|
45
45
|
commands;
|
|
46
46
|
env;
|
|
47
47
|
/**
|
|
@@ -89,7 +89,7 @@ class SimpleCommandStep extends PipelineStep {
|
|
|
89
89
|
}
|
|
90
90
|
exports.SimpleCommandStep = SimpleCommandStep;
|
|
91
91
|
class ProjenScriptStep extends SimpleCommandStep {
|
|
92
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.ProjenScriptStep", version: "0.3.
|
|
92
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.ProjenScriptStep", version: "0.3.24" };
|
|
93
93
|
constructor(project, scriptName, args) {
|
|
94
94
|
super(project, [`${project.projenCommand} ${scriptName}${args ? ` ${args}` : ''}`]);
|
|
95
95
|
}
|
|
@@ -97,7 +97,7 @@ class ProjenScriptStep extends SimpleCommandStep {
|
|
|
97
97
|
exports.ProjenScriptStep = ProjenScriptStep;
|
|
98
98
|
// Add class that is a sequence of pipleine steps but is a pipeline step in itself
|
|
99
99
|
class StepSequence extends PipelineStep {
|
|
100
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.StepSequence", version: "0.3.
|
|
100
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.StepSequence", version: "0.3.24" };
|
|
101
101
|
steps;
|
|
102
102
|
/**
|
|
103
103
|
* Constructs a sequence of pipeline steps.
|
|
@@ -8,7 +8,7 @@ const version_info_1 = require("./version-info");
|
|
|
8
8
|
*/
|
|
9
9
|
class VersionComputationStrategy {
|
|
10
10
|
strategy;
|
|
11
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.VersionComputationStrategy", version: "0.3.
|
|
11
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.VersionComputationStrategy", version: "0.3.24" };
|
|
12
12
|
constructor(strategy) {
|
|
13
13
|
this.strategy = strategy;
|
|
14
14
|
}
|
|
@@ -40,7 +40,7 @@ exports.VersionComputationStrategy = VersionComputationStrategy;
|
|
|
40
40
|
* Composite version computation that combines multiple strategies
|
|
41
41
|
*/
|
|
42
42
|
class CompositeComputation extends VersionComputationStrategy {
|
|
43
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.CompositeComputation", version: "0.3.
|
|
43
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.CompositeComputation", version: "0.3.24" };
|
|
44
44
|
constructor(strategy) {
|
|
45
45
|
super(strategy);
|
|
46
46
|
}
|
|
@@ -92,7 +92,7 @@ exports.CompositeComputation = CompositeComputation;
|
|
|
92
92
|
* Main version computer that handles strategy selection
|
|
93
93
|
*/
|
|
94
94
|
class VersionComputer {
|
|
95
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.VersionComputer", version: "0.3.
|
|
95
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.VersionComputer", version: "0.3.24" };
|
|
96
96
|
strategy;
|
|
97
97
|
constructor(strategy) {
|
|
98
98
|
this.strategy = this.createStrategy(strategy);
|
package/lib/versioning/config.js
CHANGED
|
@@ -8,7 +8,7 @@ const strategy_1 = require("./strategy");
|
|
|
8
8
|
* Main versioning configuration class with factory methods
|
|
9
9
|
*/
|
|
10
10
|
class VersioningConfigurations {
|
|
11
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.VersioningConfigurations", version: "0.3.
|
|
11
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.VersioningConfigurations", version: "0.3.24" };
|
|
12
12
|
/**
|
|
13
13
|
* Standard configuration with commit count strategy
|
|
14
14
|
*/
|
|
@@ -49,7 +49,7 @@ exports.VersioningConfigurations = VersioningConfigurations;
|
|
|
49
49
|
* Utility functions for versioning configuration
|
|
50
50
|
*/
|
|
51
51
|
class VersioningConfigUtils {
|
|
52
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.VersioningConfigUtils", version: "0.3.
|
|
52
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.VersioningConfigUtils", version: "0.3.24" };
|
|
53
53
|
/**
|
|
54
54
|
* Resolve configuration for a specific stage
|
|
55
55
|
*/
|
|
@@ -7,7 +7,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
|
7
7
|
*/
|
|
8
8
|
class OutputConfigBase {
|
|
9
9
|
type;
|
|
10
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.OutputConfigBase", version: "0.3.
|
|
10
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.OutputConfigBase", version: "0.3.24" };
|
|
11
11
|
constructor(type) {
|
|
12
12
|
this.type = type;
|
|
13
13
|
}
|
|
@@ -18,7 +18,7 @@ exports.OutputConfigBase = OutputConfigBase;
|
|
|
18
18
|
*/
|
|
19
19
|
class CloudFormationOutput extends OutputConfigBase {
|
|
20
20
|
config;
|
|
21
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.CloudFormationOutput", version: "0.3.
|
|
21
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.CloudFormationOutput", version: "0.3.24" };
|
|
22
22
|
static TYPE = 'cloudformation';
|
|
23
23
|
/**
|
|
24
24
|
* Enable CloudFormation outputs with default configuration
|
|
@@ -55,7 +55,7 @@ exports.CloudFormationOutput = CloudFormationOutput;
|
|
|
55
55
|
*/
|
|
56
56
|
class ParameterStoreOutput extends OutputConfigBase {
|
|
57
57
|
config;
|
|
58
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.ParameterStoreOutput", version: "0.3.
|
|
58
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.ParameterStoreOutput", version: "0.3.24" };
|
|
59
59
|
static TYPE = 'parameterStore';
|
|
60
60
|
/**
|
|
61
61
|
* Enable Parameter Store outputs with parameter name
|
|
@@ -103,7 +103,7 @@ exports.ParameterStoreOutput = ParameterStoreOutput;
|
|
|
103
103
|
* Output format types
|
|
104
104
|
*/
|
|
105
105
|
class OutputFormat {
|
|
106
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.OutputFormat", version: "0.3.
|
|
106
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.OutputFormat", version: "0.3.24" };
|
|
107
107
|
static PLAIN = 'plain';
|
|
108
108
|
static STRUCTURED = 'structured';
|
|
109
109
|
constructor() { }
|
|
@@ -113,7 +113,7 @@ exports.OutputFormat = OutputFormat;
|
|
|
113
113
|
* Factory class for output configurations
|
|
114
114
|
*/
|
|
115
115
|
class VersioningOutputs {
|
|
116
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.VersioningOutputs", version: "0.3.
|
|
116
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.VersioningOutputs", version: "0.3.24" };
|
|
117
117
|
/**
|
|
118
118
|
* Create output configuration with CloudFormation and SSM Parameter Store
|
|
119
119
|
*/
|
package/lib/versioning/setup.js
CHANGED
|
@@ -8,7 +8,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
|
8
8
|
class VersioningSetup {
|
|
9
9
|
project;
|
|
10
10
|
config;
|
|
11
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.VersioningSetup", version: "0.3.
|
|
11
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.VersioningSetup", version: "0.3.24" };
|
|
12
12
|
constructor(project, config) {
|
|
13
13
|
this.project = project;
|
|
14
14
|
this.config = config;
|
|
@@ -69,8 +69,8 @@ class VersioningSetup {
|
|
|
69
69
|
generateVersionComputeScript() {
|
|
70
70
|
const strategyJson = JSON.stringify(this.config.strategy).replace(/"/g, '\\"');
|
|
71
71
|
return `node -e "
|
|
72
|
-
const fs = require('fs');
|
|
73
|
-
const cp = require('child_process');
|
|
72
|
+
const fs = require('node:fs');
|
|
73
|
+
const cp = require('node:child_process');
|
|
74
74
|
|
|
75
75
|
// Import versioning modules
|
|
76
76
|
const { VersionComputer, VersioningStrategy } = require('projen-pipelines');
|
|
@@ -162,4 +162,4 @@ try {
|
|
|
162
162
|
}
|
|
163
163
|
}
|
|
164
164
|
exports.VersioningSetup = VersioningSetup;
|
|
165
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
165
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdmVyc2lvbmluZy9zZXR1cC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBR0E7O0dBRUc7QUFDSCxNQUFhLGVBQWU7SUFFRztJQUFtQzs7SUFBaEUsWUFBNkIsT0FBZ0IsRUFBbUIsTUFBd0I7UUFBM0QsWUFBTyxHQUFQLE9BQU8sQ0FBUztRQUFtQixXQUFNLEdBQU4sTUFBTSxDQUFrQjtJQUN4RixDQUFDO0lBRUQ7O09BRUc7SUFDSSxLQUFLO1FBQ1Ysa0NBQWtDO1FBQ2xDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDO1FBRWhDLDRCQUE0QjtRQUM1QixJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztRQUU5QiwyQ0FBMkM7UUFDM0MsSUFBSSxDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFFakMsZ0NBQWdDO1FBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFFRDs7T0FFRztJQUNLLHdCQUF3QjtRQUM5QixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsRUFBRTtZQUN0QyxXQUFXLEVBQUUsc0NBQXNDO1lBQ25ELEtBQUssRUFBRTtnQkFDTCxFQUFFLElBQUksRUFBRSx5Q0FBeUMsRUFBRTtnQkFDbkQ7b0JBQ0UsSUFBSSxFQUFFLElBQUksQ0FBQyw0QkFBNEIsRUFBRTtpQkFDMUM7YUFDRjtTQUNGLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNLLHNCQUFzQjtRQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxlQUFlLEVBQUU7WUFDcEMsV0FBVyxFQUFFLDJCQUEyQjtZQUN4QyxLQUFLLEVBQUU7Z0JBQ0wsRUFBRSxJQUFJLEVBQUUseUJBQXlCLEVBQUU7YUFDcEM7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSyx5QkFBeUI7UUFDL0IsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQzFELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2xFLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUU5RCxJQUFJLFdBQVcsSUFBSSxXQUFXLElBQUksU0FBUyxFQUFFLENBQUM7WUFDNUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNwQyxXQUFXLENBQUMsWUFBWSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ3hDLENBQUM7SUFDSCxDQUFDO0lBRUQ7O09BRUc7SUFDSyw0QkFBNEI7UUFDbEMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFL0UsT0FBTzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7MkJBcURnQixZQUFZOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBcUNwQyxDQUFDO0lBQ0YsQ0FBQzs7QUFoS0gsMENBaUtDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUHJvamVjdCB9IGZyb20gJ3Byb2plbic7XG5pbXBvcnQgeyBWZXJzaW9uaW5nQ29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogU2V0cyB1cCB2ZXJzaW9uaW5nIHRhc2tzIGFuZCBpbnRlZ3JhdGlvbiBmb3IgYSBwcm9qZWN0XG4gKi9cbmV4cG9ydCBjbGFzcyBWZXJzaW9uaW5nU2V0dXAge1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgcHJvamVjdDogUHJvamVjdCwgcHJpdmF0ZSByZWFkb25seSBjb25maWc6IFZlcnNpb25pbmdDb25maWcpIHtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXQgdXAgYWxsIHZlcnNpb25pbmctcmVsYXRlZCB0YXNrcyBhbmQgY29uZmlndXJhdGlvbnNcbiAgICovXG4gIHB1YmxpYyBzZXR1cCgpOiB2b2lkIHtcbiAgICAvLyBDcmVhdGUgdmVyc2lvbiBjb21wdXRhdGlvbiB0YXNrXG4gICAgdGhpcy5jcmVhdGVWZXJzaW9uQ29tcHV0ZVRhc2soKTtcblxuICAgIC8vIENyZWF0ZSB2ZXJzaW9uIHByaW50IHRhc2tcbiAgICB0aGlzLmNyZWF0ZVZlcnNpb25QcmludFRhc2soKTtcblxuICAgIC8vIEFkZCB2ZXJzaW9uIGNvbXB1dGF0aW9uIHRvIGJ1aWxkIHByb2Nlc3NcbiAgICB0aGlzLmludGVncmF0ZVdpdGhCdWlsZFByb2Nlc3MoKTtcblxuICAgIC8vIEFkZCB2ZXJzaW9uIGZpbGUgdG8gZ2l0aWdub3JlXG4gICAgdGhpcy5wcm9qZWN0LmdpdGlnbm9yZS5leGNsdWRlKCcudmVyc2lvbi50bXAuanNvbicpO1xuICB9XG5cbiAgLyoqXG4gICAqIENyZWF0ZSB0aGUgdmVyc2lvbjpjb21wdXRlIHRhc2tcbiAgICovXG4gIHByaXZhdGUgY3JlYXRlVmVyc2lvbkNvbXB1dGVUYXNrKCk6IHZvaWQge1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKCd2ZXJzaW9uOmNvbXB1dGUnLCB7XG4gICAgICBkZXNjcmlwdGlvbjogJ0NvbXB1dGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBmcm9tIGdpdCcsXG4gICAgICBzdGVwczogW1xuICAgICAgICB7IGV4ZWM6ICdlY2hvIFwiQ29tcHV0aW5nIHZlcnNpb24gaW5mb3JtYXRpb24uLi5cIicgfSxcbiAgICAgICAge1xuICAgICAgICAgIGV4ZWM6IHRoaXMuZ2VuZXJhdGVWZXJzaW9uQ29tcHV0ZVNjcmlwdCgpLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGUgdGhlIHZlcnNpb246cHJpbnQgdGFza1xuICAgKi9cbiAgcHJpdmF0ZSBjcmVhdGVWZXJzaW9uUHJpbnRUYXNrKCk6IHZvaWQge1xuICAgIHRoaXMucHJvamVjdC5hZGRUYXNrKCd2ZXJzaW9uOnByaW50Jywge1xuICAgICAgZGVzY3JpcHRpb246ICdQcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uJyxcbiAgICAgIHN0ZXBzOiBbXG4gICAgICAgIHsgZXhlYzogJ2NhdCAuLy52ZXJzaW9uLnRtcC5qc29uJyB9LFxuICAgICAgXSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbnRlZ3JhdGUgdmVyc2lvbiBjb21wdXRhdGlvbiB3aXRoIHRoZSBidWlsZCBwcm9jZXNzXG4gICAqL1xuICBwcml2YXRlIGludGVncmF0ZVdpdGhCdWlsZFByb2Nlc3MoKTogdm9pZCB7XG4gICAgY29uc3QgY29tcGlsZVRhc2sgPSB0aGlzLnByb2plY3QudGFza3MudHJ5RmluZCgnY29tcGlsZScpO1xuICAgIGNvbnN0IGNvbXB1dGVUYXNrID0gdGhpcy5wcm9qZWN0LnRhc2tzLnRyeUZpbmQoJ3ZlcnNpb246Y29tcHV0ZScpO1xuICAgIGNvbnN0IHByaW50VGFzayA9IHRoaXMucHJvamVjdC50YXNrcy50cnlGaW5kKCd2ZXJzaW9uOnByaW50Jyk7XG5cbiAgICBpZiAoY29tcGlsZVRhc2sgJiYgY29tcHV0ZVRhc2sgJiYgcHJpbnRUYXNrKSB7XG4gICAgICBjb21waWxlVGFzay5wcmVwZW5kU3Bhd24ocHJpbnRUYXNrKTtcbiAgICAgIGNvbXBpbGVUYXNrLnByZXBlbmRTcGF3bihjb21wdXRlVGFzayk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHRoZSBOb2RlLmpzIHNjcmlwdCBmb3IgdmVyc2lvbiBjb21wdXRhdGlvblxuICAgKi9cbiAgcHJpdmF0ZSBnZW5lcmF0ZVZlcnNpb25Db21wdXRlU2NyaXB0KCk6IHN0cmluZyB7XG4gICAgY29uc3Qgc3RyYXRlZ3lKc29uID0gSlNPTi5zdHJpbmdpZnkodGhpcy5jb25maWcuc3RyYXRlZ3kpLnJlcGxhY2UoL1wiL2csICdcXFxcXCInKTtcblxuICAgIHJldHVybiBgbm9kZSAtZSBcIlxuY29uc3QgZnMgPSByZXF1aXJlKCdub2RlOmZzJyk7XG5jb25zdCBjcCA9IHJlcXVpcmUoJ25vZGU6Y2hpbGRfcHJvY2VzcycpO1xuXG4vLyBJbXBvcnQgdmVyc2lvbmluZyBtb2R1bGVzXG5jb25zdCB7IFZlcnNpb25Db21wdXRlciwgVmVyc2lvbmluZ1N0cmF0ZWd5IH0gPSByZXF1aXJlKCdwcm9qZW4tcGlwZWxpbmVzJyk7XG5cbnRyeSB7XG4gIC8vIEdhdGhlciBnaXQgaW5mb3JtYXRpb25cbiAgY29uc3QgY29tbWl0SGFzaCA9IGNwLmV4ZWNTeW5jKCdnaXQgcmV2LXBhcnNlIEhFQUQnLCB7ZW5jb2Rpbmc6ICd1dGY4J30pLnRyaW0oKTtcbiAgY29uc3QgY29tbWl0SGFzaFNob3J0ID0gY29tbWl0SGFzaC5zdWJzdHJpbmcoMCwgOCk7XG4gIGNvbnN0IGNvbW1pdENvdW50ID0gcGFyc2VJbnQoY3AuZXhlY1N5bmMoJ2dpdCByZXYtbGlzdCAtLWNvdW50IEhFQUQnLCB7ZW5jb2Rpbmc6ICd1dGY4J30pLnRyaW0oKSk7XG4gIGNvbnN0IGJyYW5jaCA9IGNwLmV4ZWNTeW5jKCdnaXQgcmV2LXBhcnNlIC0tYWJicmV2LXJlZiBIRUFEJywge2VuY29kaW5nOiAndXRmOCd9KS50cmltKCk7XG4gIFxuICBsZXQgdGFnID0gJyc7XG4gIGxldCBjb21taXRzU2luY2VUYWcgPSAwO1xuICB0cnkgeyBcbiAgICB0YWcgPSBjcC5leGVjU3luYygnZ2l0IGRlc2NyaWJlIC0tdGFncyAtLWV4YWN0LW1hdGNoIC0tYWxsJywge2VuY29kaW5nOiAndXRmOCd9KS50cmltKCk7XG4gIH0gY2F0Y2gge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBkZXNjcmliZU91dHB1dCA9IGNwLmV4ZWNTeW5jKCdnaXQgZGVzY3JpYmUgLS10YWdzIC0tbG9uZyAtLWFsbCcsIHtlbmNvZGluZzogJ3V0ZjgnfSkudHJpbSgpO1xuICAgICAgY29uc3QgbWF0Y2ggPSBkZXNjcmliZU91dHB1dC5tYXRjaCgvXiguKyktKFxcXFxcXFxcZCspLWdbMC05YS1mXSskLyk7XG4gICAgICBpZiAobWF0Y2gpIHtcbiAgICAgICAgdGFnID0gbWF0Y2hbMV07XG4gICAgICAgIGNvbW1pdHNTaW5jZVRhZyA9IHBhcnNlSW50KG1hdGNoWzJdKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHt9XG4gIH1cbiAgXG4gIGxldCBwYWNrYWdlVmVyc2lvbiA9ICcwLjAuMCc7XG4gIHRyeSB7XG4gICAgcGFja2FnZVZlcnNpb24gPSBKU09OLnBhcnNlKGZzLnJlYWRGaWxlU3luYygncGFja2FnZS5qc29uJywgJ3V0ZjgnKSkudmVyc2lvbjtcbiAgfSBjYXRjaCB7fVxuICBcbiAgLy8gQ3JlYXRlIGNvbXB1dGF0aW9uIGNvbnRleHRcbiAgY29uc3QgY29udGV4dCA9IHtcbiAgICBnaXRJbmZvOiB7XG4gICAgICBjb21taXRIYXNoLFxuICAgICAgY29tbWl0SGFzaFNob3J0LFxuICAgICAgYnJhbmNoLFxuICAgICAgdGFnLFxuICAgICAgY29tbWl0c1NpbmNlVGFnLFxuICAgICAgY29tbWl0Q291bnQsXG4gICAgICBwYWNrYWdlVmVyc2lvblxuICAgIH0sXG4gICAgZW52aXJvbm1lbnQ6IHByb2Nlc3MuZW52LlNUQUdFIHx8IHByb2Nlc3MuZW52LkVOVklST05NRU5UIHx8ICd1bmtub3duJyxcbiAgICBkZXBsb3llZEJ5OiBwcm9jZXNzLmVudi5HSVRIVUJfQUNUT1IgfHwgcHJvY2Vzcy5lbnYuR0lUTEFCX1VTRVJfTE9HSU4gfHwgcHJvY2Vzcy5lbnYuVVNFUiB8fCAndW5rbm93bicsXG4gICAgYnVpbGROdW1iZXI6IHByb2Nlc3MuZW52LkJVSUxEX05VTUJFUiB8fCBwcm9jZXNzLmVudi5HSVRIVUJfUlVOX05VTUJFUixcbiAgICByZXBvc2l0b3J5OiBwcm9jZXNzLmVudi5HSVRIVUJfUkVQT1NJVE9SWSB8fCBwcm9jZXNzLmVudi5DSV9QUk9KRUNUX1BBVEgsXG4gICAgcGlwZWxpbmVWZXJzaW9uOiBwcm9jZXNzLmVudi5QSVBFTElORV9WRVJTSU9OXG4gIH07XG4gIFxuICAvLyBDcmVhdGUgc3RyYXRlZ3kgZnJvbSBjb25maWd1cmF0aW9uXG4gIGNvbnN0IHN0cmF0ZWd5Q29uZmlnID0gJHtzdHJhdGVneUpzb259O1xuICBjb25zdCBzdHJhdGVneSA9IG5ldyBWZXJzaW9uaW5nU3RyYXRlZ3koc3RyYXRlZ3lDb25maWcuZm9ybWF0LCBzdHJhdGVneUNvbmZpZy5jb21wb25lbnRzKTtcbiAgXG4gIC8vIENvbXB1dGUgdmVyc2lvblxuICBjb25zdCBjb21wdXRlciA9IG5ldyBWZXJzaW9uQ29tcHV0ZXIoc3RyYXRlZ3kpO1xuICBjb21wdXRlci5jb21wdXRlVmVyc2lvbkluZm8oY29udGV4dCkudGhlbih2ZXJzaW9uSW5mbyA9PiB7XG4gICAgZnMud3JpdGVGaWxlU3luYygnLnZlcnNpb24udG1wLmpzb24nLCB2ZXJzaW9uSW5mby50b0pzb24oKSk7XG4gICAgY29uc29sZS5sb2coJ1ZlcnNpb24gY29tcHV0ZWQ6JywgdmVyc2lvbkluZm8udmVyc2lvbiwgJyhjb21taXQ6JywgdmVyc2lvbkluZm8uY29tbWl0SGFzaFNob3J0ICsgJyknKTtcbiAgfSkuY2F0Y2goZXJyb3IgPT4ge1xuICAgIGNvbnNvbGUuZXJyb3IoJ0Vycm9yIGNvbXB1dGluZyB2ZXJzaW9uOicsIGVycm9yLm1lc3NhZ2UpO1xuICAgIGNvbnN0IGZhbGxiYWNrID0ge1xuICAgICAgdmVyc2lvbjogJzAuMC4wJyxcbiAgICAgIGNvbW1pdEhhc2g6ICd1bmtub3duJyxcbiAgICAgIGNvbW1pdEhhc2hTaG9ydDogJ3Vua25vd24nLFxuICAgICAgYnJhbmNoOiAndW5rbm93bicsXG4gICAgICBjb21taXRDb3VudDogMCxcbiAgICAgIHBhY2thZ2VWZXJzaW9uOiAnMC4wLjAnLFxuICAgICAgZGVwbG95ZWRBdDogbmV3IERhdGUoKS50b0lTT1N0cmluZygpLFxuICAgICAgZGVwbG95ZWRCeTogJ3Vua25vd24nLFxuICAgICAgZW52aXJvbm1lbnQ6ICd1bmtub3duJ1xuICAgIH07XG4gICAgZnMud3JpdGVGaWxlU3luYygnLnZlcnNpb24udG1wLmpzb24nLCBKU09OLnN0cmluZ2lmeShmYWxsYmFjaywgbnVsbCwgMikpO1xuICB9KTtcbn0gY2F0Y2ggKGUpIHtcbiAgY29uc29sZS5lcnJvcignRXJyb3IgaW4gdmVyc2lvbiBjb21wdXRhdGlvbjonLCBlLm1lc3NhZ2UpO1xuICBjb25zdCBmYWxsYmFjayA9IHtcbiAgICB2ZXJzaW9uOiAnMC4wLjAnLFxuICAgIGNvbW1pdEhhc2g6ICd1bmtub3duJyxcbiAgICBjb21taXRIYXNoU2hvcnQ6ICd1bmtub3duJyxcbiAgICBicmFuY2g6ICd1bmtub3duJyxcbiAgICBjb21taXRDb3VudDogMCxcbiAgICBwYWNrYWdlVmVyc2lvbjogJzAuMC4wJyxcbiAgICBkZXBsb3llZEF0OiBuZXcgRGF0ZSgpLnRvSVNPU3RyaW5nKCksXG4gICAgZGVwbG95ZWRCeTogJ3Vua25vd24nLFxuICAgIGVudmlyb25tZW50OiAndW5rbm93bidcbiAgfTtcbiAgZnMud3JpdGVGaWxlU3luYygnLnZlcnNpb24udG1wLmpzb24nLCBKU09OLnN0cmluZ2lmeShmYWxsYmFjaywgbnVsbCwgMikpO1xufVwiYDtcbiAgfVxufVxuIl19
|
|
@@ -8,7 +8,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
|
8
8
|
class VersioningStrategy {
|
|
9
9
|
format;
|
|
10
10
|
components;
|
|
11
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.VersioningStrategy", version: "0.3.
|
|
11
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.VersioningStrategy", version: "0.3.24" };
|
|
12
12
|
/**
|
|
13
13
|
* Create a composite strategy with custom format and components
|
|
14
14
|
*/
|
|
@@ -6,7 +6,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
|
6
6
|
* Represents complete version information for a deployment
|
|
7
7
|
*/
|
|
8
8
|
class VersionInfo {
|
|
9
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.VersionInfo", version: "0.3.
|
|
9
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.VersionInfo", version: "0.3.24" };
|
|
10
10
|
/**
|
|
11
11
|
* Create a VersionInfo instance from raw data
|
|
12
12
|
*/
|
|
@@ -185,7 +185,7 @@ exports.VersionInfo = VersionInfo;
|
|
|
185
185
|
* Builder class for creating VersionInfo instances
|
|
186
186
|
*/
|
|
187
187
|
class VersionInfoBuilder {
|
|
188
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.VersionInfoBuilder", version: "0.3.
|
|
188
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "projen-pipelines.VersionInfoBuilder", version: "0.3.24" };
|
|
189
189
|
props = {};
|
|
190
190
|
/**
|
|
191
191
|
* Set the version string
|