@aws-cdk/toolkit-lib 1.24.0 → 1.25.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build-info.json +2 -2
- package/db.json.gz +0 -0
- package/lib/actions/deploy/index.d.ts +15 -1
- package/lib/actions/deploy/index.js +1 -1
- package/lib/actions/deploy/private/deployment-method.d.ts +5 -9
- package/lib/actions/deploy/private/deployment-method.js +8 -1
- package/lib/actions/diagnose/index.d.ts +89 -0
- package/lib/actions/diagnose/index.js +3 -0
- package/lib/actions/diff/private/helpers.js +12 -15
- package/lib/actions/index.d.ts +2 -0
- package/lib/actions/index.js +3 -1
- package/lib/actions/orphan/index.d.ts +18 -0
- package/lib/actions/orphan/index.js +3 -0
- package/lib/api/aws-auth/sdk.d.ts +2 -1
- package/lib/api/aws-auth/sdk.js +2 -1
- package/lib/api/bootstrap/bootstrap-environment.js +4 -4
- package/lib/api/bootstrap/bootstrap-template.yaml +5 -16
- package/lib/api/bootstrap/deploy-bootstrap.js +9 -1
- package/lib/api/cloud-assembly/stack-selector.d.ts +1 -1
- package/lib/api/cloud-assembly/stack-selector.js +1 -1
- package/lib/api/cloudformation/index.d.ts +1 -0
- package/lib/api/cloudformation/index.js +2 -1
- package/lib/api/cloudformation/logical-id-map.d.ts +24 -0
- package/lib/api/cloudformation/logical-id-map.js +45 -0
- package/lib/api/cloudformation/stack-helpers.d.ts +6 -0
- package/lib/api/cloudformation/stack-helpers.js +12 -1
- package/lib/api/deployments/cfn-api.d.ts +8 -17
- package/lib/api/deployments/cfn-api.js +60 -71
- package/lib/api/deployments/deploy-stack.d.ts +6 -2
- package/lib/api/deployments/deploy-stack.js +43 -61
- package/lib/api/deployments/deployments.d.ts +3 -2
- package/lib/api/deployments/deployments.js +31 -7
- package/lib/api/diagnosing/changeset-error-fetcher.d.ts +51 -0
- package/lib/api/diagnosing/changeset-error-fetcher.js +83 -0
- package/lib/api/diagnosing/diagnosis-formatting.d.ts +13 -0
- package/lib/api/diagnosing/diagnosis-formatting.js +140 -0
- package/lib/api/diagnosing/stack-diagnoser.d.ts +106 -0
- package/lib/api/diagnosing/stack-diagnoser.js +354 -0
- package/lib/api/diagnosing/tree-builder.d.ts +13 -0
- package/lib/api/diagnosing/tree-builder.js +86 -0
- package/lib/api/diagnosing/tree.d.ts +19 -0
- package/lib/api/diagnosing/tree.js +72 -0
- package/lib/api/diff/diff-formatter.js +8 -12
- package/lib/api/drift/drift-formatter.d.ts +0 -1
- package/lib/api/drift/drift-formatter.js +3 -10
- package/lib/api/hotswap/hotswap-deployments.js +14 -2
- package/lib/api/hotswap/hotswap-template-cache.d.ts +19 -0
- package/lib/api/hotswap/hotswap-template-cache.js +96 -0
- package/lib/api/index.d.ts +1 -0
- package/lib/api/index.js +2 -1
- package/lib/api/io/private/messages.d.ts +5 -0
- package/lib/api/io/private/messages.js +23 -1
- package/lib/api/io/toolkit-action.d.ts +1 -1
- package/lib/api/io/toolkit-action.js +1 -1
- package/lib/api/orphan/orphaner.d.ts +75 -0
- package/lib/api/orphan/orphaner.js +246 -0
- package/lib/api/orphan/private/helpers.d.ts +56 -0
- package/lib/api/orphan/private/helpers.js +219 -0
- package/lib/api/orphan/private/index.d.ts +2 -0
- package/lib/api/orphan/private/index.js +18 -0
- package/lib/api/resource-import/importer.d.ts +5 -1
- package/lib/api/resource-import/importer.js +26 -6
- package/lib/api/settings.d.ts +3 -1
- package/lib/api/settings.js +16 -3
- package/lib/api/source-tracing/index.d.ts +2 -0
- package/lib/api/source-tracing/index.js +18 -0
- package/lib/api/source-tracing/private/source-tracing.d.ts +16 -0
- package/lib/api/source-tracing/private/source-tracing.js +8 -0
- package/lib/api/source-tracing/private/stack-source-tracing.d.ts +32 -0
- package/lib/api/source-tracing/private/stack-source-tracing.js +134 -0
- package/lib/api/source-tracing/types.d.ts +9 -0
- package/lib/api/source-tracing/types.js +3 -0
- package/lib/api/stack-events/resource-errors.d.ts +82 -0
- package/lib/api/stack-events/resource-errors.js +129 -0
- package/lib/api/stack-events/stack-activity-monitor.d.ts +2 -29
- package/lib/api/stack-events/stack-activity-monitor.js +6 -95
- package/lib/api/stack-events/stack-event-poller.d.ts +71 -8
- package/lib/api/stack-events/stack-event-poller.js +107 -13
- package/lib/api/stack-events/stack-progress-monitor.d.ts +2 -2
- package/lib/api/stack-events/stack-progress-monitor.js +8 -2
- package/lib/api/work-graph/work-graph.d.ts +4 -0
- package/lib/api/work-graph/work-graph.js +6 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.js +2 -1
- package/lib/index_bg.wasm +0 -0
- package/lib/toolkit/toolkit.d.ts +17 -1
- package/lib/toolkit/toolkit.js +194 -57
- package/lib/util/arrays.d.ts +1 -0
- package/lib/util/arrays.js +23 -1
- package/lib/util/type-brands.d.ts +1 -1
- package/lib/util/type-brands.js +1 -1
- package/package.json +13 -13
- package/lib/api/deployments/early-validation.d.ts +0 -19
- package/lib/api/deployments/early-validation.js +0 -57
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DiffFormatter = void 0;
|
|
4
4
|
const node_util_1 = require("node:util");
|
|
5
|
-
const cxschema = require("@aws-cdk/cloud-assembly-schema");
|
|
6
5
|
const cloudformation_diff_1 = require("@aws-cdk/cloudformation-diff");
|
|
7
6
|
const chalk = require("chalk");
|
|
8
7
|
const payloads_1 = require("../../payloads");
|
|
8
|
+
const logical_id_map_1 = require("../cloudformation/logical-id-map");
|
|
9
9
|
const streams_1 = require("../streams");
|
|
10
10
|
/**
|
|
11
11
|
* Class for formatting the diff output
|
|
@@ -74,7 +74,7 @@ class DiffFormatter {
|
|
|
74
74
|
nestedStacks: this.templateInfo.nestedStacks,
|
|
75
75
|
changeSet: this.templateInfo.changeSet,
|
|
76
76
|
mappings: this.mappings,
|
|
77
|
-
logicalIdMap: buildLogicalToPathMap(this.templateInfo.newTemplate),
|
|
77
|
+
logicalIdMap: (0, logical_id_map_1.buildLogicalToPathMap)(this.templateInfo.newTemplate).toPath,
|
|
78
78
|
}, options);
|
|
79
79
|
}
|
|
80
80
|
formatStackDiffHelper(params, options = {}) {
|
|
@@ -104,9 +104,11 @@ class DiffFormatter {
|
|
|
104
104
|
}
|
|
105
105
|
// filter out 'AWS::CDK::Metadata' resources from the template
|
|
106
106
|
// filter out 'CheckBootstrapVersion' rules from the template
|
|
107
|
+
const diffWasNonEmpty = !activeDiff.isEmpty;
|
|
107
108
|
if (!options.strict) {
|
|
108
109
|
obscureDiff(activeDiff);
|
|
109
110
|
}
|
|
111
|
+
const metadataWasFiltered = diffWasNonEmpty && activeDiff.isEmpty;
|
|
110
112
|
if (!activeDiff.isEmpty) {
|
|
111
113
|
numStacksWithChanges++;
|
|
112
114
|
(0, cloudformation_diff_1.formatDifferences)(stream, activeDiff, {
|
|
@@ -116,7 +118,8 @@ class DiffFormatter {
|
|
|
116
118
|
}, options.contextLines);
|
|
117
119
|
}
|
|
118
120
|
else if (!options.quiet) {
|
|
119
|
-
|
|
121
|
+
const hint = metadataWasFiltered ? chalk.grey(' (CDK metadata changes were hidden, run cdk diff --strict to show)') : '';
|
|
122
|
+
stream.write(`${chalk.green('There were no differences')}${hint}\n`);
|
|
120
123
|
}
|
|
121
124
|
if (filteredChangesCount > 0) {
|
|
122
125
|
stream.write(chalk.yellow(`Omitted ${filteredChangesCount} changes because they are likely mangled non-ASCII characters. Use --strict to print them.\n`));
|
|
@@ -152,7 +155,7 @@ class DiffFormatter {
|
|
|
152
155
|
stackName: this.stackName,
|
|
153
156
|
nestedStacks: this.templateInfo.nestedStacks,
|
|
154
157
|
changeSet: this.templateInfo.changeSet,
|
|
155
|
-
logicalIdMap: buildLogicalToPathMap(this.templateInfo.newTemplate),
|
|
158
|
+
logicalIdMap: (0, logical_id_map_1.buildLogicalToPathMap)(this.templateInfo.newTemplate).toPath,
|
|
156
159
|
}, options);
|
|
157
160
|
return { formattedDiff, permissionChangeType, numStacksWithChanges };
|
|
158
161
|
}
|
|
@@ -212,13 +215,6 @@ function permissionTypeFromDiff(diff) {
|
|
|
212
215
|
}
|
|
213
216
|
return payloads_1.PermissionChangeType.NONE;
|
|
214
217
|
}
|
|
215
|
-
function buildLogicalToPathMap(stack) {
|
|
216
|
-
const map = {};
|
|
217
|
-
for (const md of stack.findMetadataByType(cxschema.ArtifactMetadataEntryType.LOGICAL_ID)) {
|
|
218
|
-
map[md.data] = md.path;
|
|
219
|
-
}
|
|
220
|
-
return map;
|
|
221
|
-
}
|
|
222
218
|
function logicalIdMapFromTemplate(template) {
|
|
223
219
|
const ret = {};
|
|
224
220
|
for (const [logicalId, resource] of Object.entries((template.Resources ?? {}))) {
|
|
@@ -266,4 +262,4 @@ function obscureDiff(diff) {
|
|
|
266
262
|
});
|
|
267
263
|
}
|
|
268
264
|
}
|
|
269
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlmZi1mb3JtYXR0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkaWZmLWZvcm1hdHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBbUM7QUFFbkMsMkRBQTJEO0FBQzNELHNFQVFzQztBQUN0QywrQkFBK0I7QUFDL0IsNkNBQXNEO0FBRXRELHdDQUErQztBQTBJL0M7O0dBRUc7QUFDSCxNQUFhLGFBQWE7SUFDUCxZQUFZLENBQWU7SUFDM0IsU0FBUyxDQUFTO0lBQ2xCLFFBQVEsQ0FBVTtJQUNsQixRQUFRLENBQXlCO0lBRWxEOztPQUVHO0lBQ2MsS0FBSyxHQUFHLElBQUksR0FBRyxFQUF3QixDQUFDO0lBRXpELFlBQVksS0FBeUI7UUFDbkMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQztRQUN4RyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQztRQUNyRCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBRUQsSUFBVyxLQUFLO1FBQ2QsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSyxXQUFXLENBQ2pCLFNBQWlCLEVBQ2pCLFdBQXFCLEVBQ3JCLFdBQXFCLEVBQ3JCLFNBQThDLEVBQzlDLFFBQWdDO1FBRWhDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQy9CLE1BQU0sWUFBWSxHQUFHLElB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QU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDMUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO2dCQUNaLE9BQU8sSUFBSSxDQUFDO1lBQ2QsQ0FBQztZQUNELElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRSxxQkFBcUIsRUFBRSxDQUFDO2dCQUMzQyxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFDRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUscUJBQXFCLEVBQUUsQ0FBQztnQkFDM0MsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzlDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDWixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFDRCxJQUFJLE1BQU0sQ0FBQyxlQUFlLEtBQUssb0JBQW9CLEVBQUUsQ0FBQztnQkFDcEQsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBQ0QsSUFBSSxNQUFNLENBQUMsZUFBZSxLQUFLLG9CQUFvQixFQUFFLENBQUM7Z0JBQ3BELE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0FBQ0gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGZvcm1hdCB9IGZyb20gJ25vZGU6dXRpbCc7XG5pbXBvcnQgdHlwZSAqIGFzIGN4YXBpIGZyb20gJ0Bhd3MtY2RrL2Nsb3VkLWFzc2VtYmx5LWFwaSc7XG5pbXBvcnQgKiBhcyBjeHNjaGVtYSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1zY2hlbWEnO1xuaW1wb3J0IHtcbiAgZm9ybWF0RGlmZmVyZW5jZXMsXG4gIGZvcm1hdFNlY3VyaXR5Q2hhbmdlcyxcbiAgZnVsbERpZmYsXG4gIG1hbmdsZUxpa2VDbG91ZEZvcm1hdGlvbixcbiAgdHlwZSBEZXNjcmliZUNoYW5nZVNldE91dHB1dCxcbiAgdHlwZSBSZXNvdXJjZURpZmZlcmVuY2UsXG4gIHR5cGUgVGVtcGxhdGVEaWZmLFxufSBmcm9tICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IFBlcm1pc3Npb25DaGFuZ2VUeXBlIH0gZnJvbSAnLi4vLi4vcGF5bG9hZHMnO1xuaW1wb3J0IHR5cGUgeyBOZXN0ZWRTdGFja1RlbXBsYXRlcywgVGVtcGxhdGUgfSBmcm9tICcuLi9jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBTdHJpbmdXcml0ZVN0cmVhbSB9IGZyb20gJy4uL3N0cmVhbXMnO1xuXG4vKipcbiAqIE91dHB1dCBvZiBmb3JtYXRTZWN1cml0eURpZmZcbiAqL1xuaW50ZXJmYWNlIEZvcm1hdFNlY3VyaXR5RGlmZk91dHB1dCB7XG4gIC8qKlxuICAgKiBDb21wbGV0ZSBmb3JtYXR0ZWQgc2VjdXJpdHkgZGlmZlxuICAgKi9cbiAgcmVhZG9ubHkgZm9ybWF0dGVkRGlmZjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBwZXJtaXNzaW9uIGNoYW5nZXMgaW4gdGhlIHNlY3VyaXR5IGRpZmYuXG4gICAqIFRoZSBJb0hvc3Qgd2lsbCB1c2UgdGhpcyB0byBkZWNpZGUgd2hldGhlciBvciBub3QgdG8gcHJpbnQuXG4gICAqL1xuICByZWFkb25seSBwZXJtaXNzaW9uQ2hhbmdlVHlwZTogUGVybWlzc2lvbkNoYW5nZVR5cGU7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiBzdGFja3Mgd2l0aCBzZWN1cml0eSBjaGFuZ2VzXG4gICAqL1xuICByZWFkb25seSBudW1TdGFja3NXaXRoQ2hhbmdlczogbnVtYmVyO1xufVxuXG4vKipcbiAqIE91dHB1dCBvZiBmb3JtYXRTdGFja0RpZmZcbiAqL1xuaW50ZXJmYWNlIEZvcm1hdFN0YWNrRGlmZk91dHB1dCB7XG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygc3RhY2tzIHdpdGggZGlmZiBjaGFuZ2VzXG4gICAqL1xuICByZWFkb25seSBudW1TdGFja3NXaXRoQ2hhbmdlczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDb21wbGV0ZSBmb3JtYXR0ZWQgZGlmZlxuICAgKi9cbiAgcmVhZG9ubHkgZm9ybWF0dGVkRGlmZjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BzIGZvciB0aGUgRGlmZiBGb3JtYXR0ZXJcbiAqL1xuaW50ZXJmYWNlIERpZmZGb3JtYXR0ZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgcmVsZXZhbnQgaW5mb3JtYXRpb24gZm9yIHRoZSBUZW1wbGF0ZSB0aGF0IGlzIGJlaW5nIGRpZmZlZC5cbiAgICogSW5jbHVkZXMgdGhlIG9sZC9jdXJyZW50IHN0YXRlIG9mIHRoZSBzdGFjayBhcyB3ZWxsIGFzIHRoZSBuZXcgc3RhdGUuXG4gICAqL1xuICByZWFkb25seSB0ZW1wbGF0ZUluZm86IFRlbXBsYXRlSW5mbztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHNwZWNpZmljIHRvIGZvcm1hdHRpbmcgdGhlIHN0YWNrIGRpZmZcbiAqL1xuaW50ZXJmYWNlIEZvcm1hdFN0YWNrRGlmZk9wdGlvbnMge1xuICAvKipcbiAgICogZG8gbm90IGZpbHRlciBvdXQgQVdTOjpDREs6Ok1ldGFkYXRhIG9yIFJ1bGVzXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBzdHJpY3Q/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBsaW5lcyBvZiBjb250ZXh0IHRvIHVzZSBpbiBhcmJpdHJhcnkgSlNPTiBkaWZmXG4gICAqXG4gICAqIEBkZWZhdWx0IDNcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHRMaW5lcz86IG51bWJlcjtcblxuICAvKipcbiAgICogc2lsZW5jZXMgXFwnVGhlcmUgd2VyZSBubyBkaWZmZXJlbmNlc1xcJyBtZXNzYWdlc1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgUmV1c2FibGVTdGFja0RpZmZPcHRpb25zIGV4dGVuZHMgRm9ybWF0U3RhY2tEaWZmT3B0aW9ucyB7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBzcGVjaWZpYyB0byBmb3JtYXR0aW5nIHRoZSBzZWN1cml0eSBkaWZmXG4gKi9cbmludGVyZmFjZSBGb3JtYXRTZWN1cml0eURpZmZPcHRpb25zIHtcbiAgLyoqXG4gICAqIHNpbGVuY2VzIHN0YWNrIG5hbWVzIGFuZCAnbm8gY2hhbmdlcycgbWVzc2FnZXMgZm9yIHN0YWNrcyB3aXRob3V0IHNlY3VyaXR5IGNoYW5nZXNcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBJbmZvcm1hdGlvbiBvbiBhIHRlbXBsYXRlJ3Mgb2xkL25ldyBzdGF0ZVxuICogdGhhdCBpcyB1c2VkIGZvciBkaWZmLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlSW5mbyB7XG4gIC8qKlxuICAgKiBUaGUgb2xkL2V4aXN0aW5nIHRlbXBsYXRlXG4gICAqL1xuICByZWFkb25seSBvbGRUZW1wbGF0ZTogVGVtcGxhdGU7XG5cbiAgLyoqXG4gICAqIFRoZSBuZXcgdGVtcGxhdGVcbiAgICovXG4gIHJlYWRvbmx5IG5ld1RlbXBsYXRlOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q7XG5cbiAgLyoqXG4gICAqIEEgQ2xvdWRGb3JtYXRpb24gQ2hhbmdlU2V0IHRvIGhlbHAgdGhlIGRpZmYgb3BlcmF0aW9uLlxuICAgKiBQcm9iYWJseSBjcmVhdGVkIHZpYSBgY3JlYXRlRGlmZkNoYW5nZVNldGAuXG4gICAqXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgY2hhbmdlU2V0PzogRGVzY3JpYmVDaGFuZ2VTZXRPdXRwdXQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRoZXJlIGFyZSBhbnkgaW1wb3J0ZWQgcmVzb3VyY2VzXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBpc0ltcG9ydD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFueSBuZXN0ZWQgc3RhY2tzIGluY2x1ZGVkIGluIHRoZSB0ZW1wbGF0ZVxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgcmVhZG9ubHkgbmVzdGVkU3RhY2tzPzoge1xuICAgIFtuZXN0ZWRTdGFja0xvZ2ljYWxJZDogc3RyaW5nXTogTmVzdGVkU3RhY2tUZW1wbGF0ZXM7XG4gIH07XG5cbiAgLyoqXG4gICAqIE1hcHBpbmdzIG9mIG9sZCBsb2NhdGlvbnMgdG8gbmV3IGxvY2F0aW9ucy4gSWYgdGhlc2UgYXJlIHByb3ZpZGVkLFxuICAgKiBmb3IgYWxsIHJlc291cmNlcyB0aGF0IHdlcmUgbW92ZWQsIHRoZWlyIGNvcnJlc3BvbmRpbmcgYWRkaXRpb25cbiAgICogYW5kIHJlbW92YWwgbGluZXMgd2lsbCBiZSBhdWdtZW50ZWQgd2l0aCB0aGUgbG9jYXRpb24gdGhleSB3ZXJlXG4gICAqIG1vdmVkIGZvbSBhbmQgdG8sIHJlc3BlY3RpdmVseS5cbiAgICovXG4gIHJlYWRvbmx5IG1hcHBpbmdzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuLyoqXG4gKiBDbGFzcyBmb3IgZm9ybWF0dGluZyB0aGUgZGlmZiBvdXRwdXRcbiAqL1xuZXhwb3J0IGNsYXNzIERpZmZGb3JtYXR0ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IHRlbXBsYXRlSW5mbzogVGVtcGxhdGVJbmZvO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YWNrTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGlzSW1wb3J0OiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IG1hcHBpbmdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBDYWNoZSBvZiBjb21wdXRlZCBUZW1wbGF0ZURpZmZzLCBpbmRleGVkIGJ5IHN0YWNrIG5hbWUuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIFRlbXBsYXRlRGlmZj4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogRGlmZkZvcm1hdHRlclByb3BzKSB7XG4gICAgdGhpcy50ZW1wbGF0ZUluZm8gPSBwcm9wcy50ZW1wbGF0ZUluZm87XG4gICAgdGhpcy5zdGFja05hbWUgPSBwcm9wcy50ZW1wbGF0ZUluZm8ubmV3VGVtcGxhdGUuZGlzcGxheU5hbWUgPz8gcHJvcHMudGVtcGxhdGVJbmZvLm5ld1RlbXBsYXRlLnN0YWNrTmFtZTtcbiAgICB0aGlzLmlzSW1wb3J0ID0gcHJvcHMudGVtcGxhdGVJbmZvLmlzSW1wb3J0ID8/IGZhbHNlO1xuICAgIHRoaXMubWFwcGluZ3MgPSBwcm9wcy50ZW1wbGF0ZUluZm8ubWFwcGluZ3MgPz8ge307XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRpZmZzKCkge1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXModGhpcy5jYWNoZSk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgZGlmZiBmb3IgYSBzaW5nbGUgc3RhY2suIFJlc3VsdHMgYXJlIGNhY2hlZCBieSBzdGFjayBuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0gc3RhY2tOYW1lIC0gVGhlIG5hbWUgdG8gY2FjaGUgdGhlIGRpZmYgdW5kZXJcbiAgICogQHBhcmFtIG9sZFRlbXBsYXRlIC0gVGhlIGRlcGxveWVkIHRlbXBsYXRlXG4gICAqIEBwYXJhbSBuZXdUZW1wbGF0ZSAtIFRoZSBuZXcvZ2VuZXJhdGVkIHRlbXBsYXRlIChyZWFkIGZyb20gdGhlIGFydGlmYWN0KVxuICAgKiBAcGFyYW0gY2hhbmdlU2V0IC0gVGhlIENsb3VkRm9ybWF0aW9uIGNoYW5nZXNldCBmb3IgdGhpcyBzcGVjaWZpYyBzdGFjaywgaWYgYXZhaWxhYmxlXG4gICAqIEBwYXJhbSBtYXBwaW5ncyAtIFJlc291cmNlIG1vdmUgbWFwcGluZ3NcbiAgICovXG4gIHByaXZhdGUgY29tcHV0ZURpZmYoXG4gICAgc3RhY2tOYW1lOiBzdHJpbmcsXG4gICAgb2xkVGVtcGxhdGU6IFRlbXBsYXRlLFxuICAgIG5ld1RlbXBsYXRlOiBUZW1wbGF0ZSxcbiAgICBjaGFuZ2VTZXQ6IERlc2NyaWJlQ2hhbmdlU2V0T3V0cHV0IHwgdW5kZWZpbmVkLFxuICAgIG1hcHBpbmdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICApOiBUZW1wbGF0ZURpZmYge1xuICAgIGlmICghdGhpcy5jYWNoZS5oYXMoc3RhY2tOYW1lKSkge1xuICAgICAgY29uc3QgdGVtcGxhdGVEaWZmID0gZnVsbERpZmYob2xkVGVtcGxhdGUsIG5ld1RlbXBsYXRlLCBjaGFuZ2VTZXQsIHRoaXMuaXNJbXBvcnQpO1xuXG4gICAgICBjb25zdCBzZXRNb3ZlID0gKGNoYW5nZTogUmVzb3VyY2VEaWZmZXJlbmNlLCBkaXJlY3Rpb246ICdmcm9tJyB8ICd0bycsIGxvY2F0aW9uPzogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChsb2NhdGlvbiAhPSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgW3NvdXJjZVN0YWNrTmFtZSwgc291cmNlTG9naWNhbElkXSA9IGxvY2F0aW9uLnNwbGl0KCcuJyk7XG4gICAgICAgICAgY2hhbmdlLm1vdmUgPSB7XG4gICAgICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgICAgICBzdGFja05hbWU6IHNvdXJjZVN0YWNrTmFtZSxcbiAgICAgICAgICAgIHJlc291cmNlTG9naWNhbElkOiBzb3VyY2VMb2dpY2FsSWQsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdGVtcGxhdGVEaWZmLnJlc291cmNlcy5mb3JFYWNoRGlmZmVyZW5jZSgoaWQsIGNoYW5nZSkgPT4ge1xuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IGAke3N0YWNrTmFtZX0uJHtpZH1gO1xuICAgICAgICBpZiAoY2hhbmdlLmlzQWRkaXRpb24gJiYgT2JqZWN0LnZhbHVlcyhtYXBwaW5ncykuaW5jbHVkZXMobG9jYXRpb24pKSB7XG4gICAgICAgICAgc2V0TW92ZShjaGFuZ2UsICdmcm9tJywgT2JqZWN0LmtleXMobWFwcGluZ3MpLmZpbmQoayA9PiBtYXBwaW5nc1trXSA9PT0gbG9jYXRpb24pKTtcbiAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2UuaXNSZW1vdmFsICYmIE9iamVjdC5rZXlzKG1hcHBpbmdzKS5pbmNsdWRlcyhsb2NhdGlvbikpIHtcbiAgICAgICAgICBzZXRNb3ZlKGNoYW5nZSwgJ3RvJywgbWFwcGluZ3NbbG9jYXRpb25dKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuY2FjaGUuc2V0KHN0YWNrTmFtZSwgdGVtcGxhdGVEaWZmKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUuZ2V0KHN0YWNrTmFtZSkhO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCB0aGUgc3RhY2sgZGlmZiwgaW5jbHVkaW5nIGFsbCBuZXN0ZWQgc3RhY2tzLlxuICAgKi9cbiAgcHVibGljIGZvcm1hdFN0YWNrRGlmZihvcHRpb25zOiBGb3JtYXRTdGFja0RpZmZPcHRpb25zID0ge30pOiBGb3JtYXRTdGFja0RpZmZPdXRwdXQge1xuICAgIHJldHVybiB0aGlzLmZvcm1hdFN0YWNrRGlmZkhlbHBlcih7XG4gICAgICBvbGRUZW1wbGF0ZTogdGhpcy50ZW1wbGF0ZUluZm8ub2xkVGVtcGxhdGUsXG4gICAgICBuZXdUZW1wbGF0ZTogdGhpcy50ZW1wbGF0ZUluZm8ubmV3VGVtcGxhdGUudGVtcGxhdGUsXG4gICAgICBzdGFja05hbWU6IHRoaXMuc3RhY2tOYW1lLFxuICAgICAgbmVzdGVkU3RhY2tzOiB0aGlzLnRlbXBsYXRlSW5mby5uZXN0ZWRTdGFja3MsXG4gICAgICBjaGFuZ2VTZXQ6IHRoaXMudGVtcGxhdGVJbmZvLmNoYW5nZVNldCxcbiAgICAgIG1hcHBpbmdzOiB0aGlzLm1hcHBpbmdzLFxuICAgICAgbG9naWNhbElkTWFwOiBidWlsZExvZ2ljYWxUb1BhdGhNYXAodGhpcy50ZW1wbGF0ZUluZm8ubmV3VGVtcGxhdGUpLFxuICAgIH0sIG9wdGlvbnMpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRTdGFja0RpZmZIZWxwZXIocGFyYW1zOiB7XG4gICAgb2xkVGVtcGxhdGU6IFRlbXBsYXRlO1xuICAgIG5ld1RlbXBsYXRlOiBUZW1wbGF0ZTtcbiAgICBzdGFja05hbWU6IHN0cmluZztcbiAgICBuZXN0ZWRTdGFja3M6IHsgW25lc3RlZFN0YWNrTG9naWNhbElkOiBzdHJpbmddOiBOZXN0ZWRTdGFja1RlbXBsYXRlcyB9IHwgdW5kZWZpbmVkO1xuICAgIGNoYW5nZVNldDogRGVzY3JpYmVDaGFuZ2VTZXRPdXRwdXQgfCB1bmRlZmluZWQ7XG4gICAgbWFwcGluZ3M6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gICAgbG9naWNhbElkTWFwOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICB9LCBvcHRpb25zOiBSZXVzYWJsZVN0YWNrRGlmZk9wdGlvbnMgPSB7fSk6IEZvcm1hdFN0YWNrRGlmZk91dHB1dCB7XG4gICAgY29uc3QgeyBvbGRUZW1wbGF0ZSwgbmV3VGVtcGxhdGUsIHN0YWNrTmFtZSwgbmVzdGVkU3RhY2tzLCBjaGFuZ2VTZXQsIG1hcHBpbmdzLCBsb2dpY2FsSWRNYXAgfSA9IHBhcmFtcztcblxuICAgIGNvbnN0IGRpZmYgPSB0aGlzLmNvbXB1dGVEaWZmKHN0YWNrTmFtZSwgb2xkVGVtcGxhdGUsIG5ld1RlbXBsYXRlLCBjaGFuZ2VTZXQsIG1hcHBpbmdzKTtcblxuICAgIGNvbnN0IHN0cmVhbSA9IG5ldyBTdHJpbmdXcml0ZVN0cmVhbSgpO1xuICAgIGxldCBudW1TdGFja3NXaXRoQ2hhbmdlcyA9IDA7XG4gICAgbGV0IGZvcm1hdHRlZERpZmYgPSAnJztcbiAgICBsZXQgZmlsdGVyZWRDaGFuZ2VzQ291bnQgPSAwO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIG11c3Qgb3V0cHV0IHRoZSBzdGFjayBuYW1lIGlmIHRoZXJlIGFyZSBkaWZmZXJlbmNlcywgZXZlbiBpZiBxdWlldFxuICAgICAgaWYgKHN0YWNrTmFtZSAmJiAoIW9wdGlvbnMucXVpZXQgfHwgIWRpZmYuaXNFbXB0eSkpIHtcbiAgICAgICAgc3RyZWFtLndyaXRlKGZvcm1hdChgU3RhY2sgJHtjaGFsay5ib2xkKHN0YWNrTmFtZSl9XFxuYCkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoIW9wdGlvbnMucXVpZXQgJiYgdGhpcy5pc0ltcG9ydCkge1xuICAgICAgICBzdHJlYW0ud3JpdGUoJ1BhcmFtZXRlcnMgYW5kIHJ1bGVzIGNyZWF0ZWQgZHVyaW5nIG1pZ3JhdGlvbiBkbyBub3QgYWZmZWN0IHJlc291cmNlIGNvbmZpZ3VyYXRpb24uXFxuJyk7XG4gICAgICB9XG5cbiAgICAgIC8vIGRldGVjdCBhbmQgZmlsdGVyIG91dCBtYW5nbGVkIGNoYXJhY3RlcnMgZnJvbSB0aGUgZGlmZlxuICAgICAgbGV0IGFjdGl2ZURpZmYgPSBkaWZmO1xuICAgICAgaWYgKGRpZmYuZGlmZmVyZW5jZUNvdW50ICYmICFvcHRpb25zLnN0cmljdCkge1xuICAgICAgICBjb25zdCBtYW5nbGVkTmV3VGVtcGxhdGUgPSBKU09OLnBhcnNlKG1hbmdsZUxpa2VDbG91ZEZvcm1hdGlvbihKU09OLnN0cmluZ2lmeShuZXdUZW1wbGF0ZSkpKTtcbiAgICAgICAgY29uc3QgbWFuZ2xlZERpZmYgPSBmdWxsRGlmZihvbGRUZW1wbGF0ZSwgbWFuZ2xlZE5ld1RlbXBsYXRlLCBjaGFuZ2VTZXQpO1xuICAgICAgICBmaWx0ZXJlZENoYW5nZXNDb3VudCA9IE1hdGgubWF4KDAsIGRpZmYuZGlmZmVyZW5jZUNvdW50IC0gbWFuZ2xlZERpZmYuZGlmZmVyZW5jZUNvdW50KTtcbiAgICAgICAgaWYgKGZpbHRlcmVkQ2hhbmdlc0NvdW50ID4gMCkge1xuICAgICAgICAgIGFjdGl2ZURpZmYgPSBtYW5nbGVkRGlmZjtcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICAvLyBmaWx0ZXIgb3V0ICdBV1M6OkNESzo6TWV0YWRhdGEnIHJlc291cmNlcyBmcm9tIHRoZSB0ZW1wbGF0ZVxuICAgICAgLy8gZmlsdGVyIG91dCAnQ2hlY2tCb290c3RyYXBWZXJzaW9uJyBydWxlcyBmcm9tIHRoZSB0ZW1wbGF0ZVxuICAgICAgaWYgKCFvcHRpb25zLnN0cmljdCkge1xuICAgICAgICBvYnNjdXJlRGlmZihhY3RpdmVEaWZmKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFhY3RpdmVEaWZmLmlzRW1wdHkpIHtcbiAgICAgICAgbnVtU3RhY2tzV2l0aENoYW5nZXMrKztcblxuICAgICAgICBmb3JtYXREaWZmZXJlbmNlcyhzdHJlYW0sIGFjdGl2ZURpZmYsIHtcbiAgICAgICAgICAuLi5sb2dpY2FsSWRNYXBGcm9tVGVtcGxhdGUob2xkVGVtcGxhdGUpLFxuICAgICAgICAgIC4uLmxvZ2ljYWxJZE1hcEZyb21UZW1wbGF0ZShuZXdUZW1wbGF0ZSksXG4gICAgICAgICAgLi4ubG9naWNhbElkTWFwLFxuICAgICAgICB9LCBvcHRpb25zLmNvbnRleHRMaW5lcyk7XG4gICAgICB9IGVsc2UgaWYgKCFvcHRpb25zLnF1aWV0KSB7XG4gICAgICAgIHN0cmVhbS53cml0ZShjaGFsay5ncmVlbignVGhlcmUgd2VyZSBubyBkaWZmZXJlbmNlc1xcbicpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpbHRlcmVkQ2hhbmdlc0NvdW50ID4gMCkge1xuICAgICAgICBzdHJlYW0ud3JpdGUoY2hhbGsueWVsbG93KGBPbWl0dGVkICR7ZmlsdGVyZWRDaGFuZ2VzQ291bnR9IGNoYW5nZXMgYmVjYXVzZSB0aGV5IGFyZSBsaWtlbHkgbWFuZ2xlZCBub24tQVNDSUkgY2hhcmFjdGVycy4gVXNlIC0tc3RyaWN0IHRvIHByaW50IHRoZW0uXFxuYCkpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBmb3JtYXR0ZWREaWZmID0gc3RyZWFtLnRvU3RyaW5nKCk7XG4gICAgICBzdHJlYW0uZW5kKCk7XG4gICAgfVxuXG4gICAgLy8gUmVjdXJzZSBpbnRvIG5lc3RlZCBzdGFja3NcbiAgICBmb3IgKGNvbnN0IFtsb2dpY2FsSWQsIG5lc3RlZFN0YWNrXSBvZiBPYmplY3QuZW50cmllcyhuZXN0ZWRTdGFja3MgPz8ge30pKSB7XG4gICAgICBjb25zdCBuZXh0RGlmZiA9IHRoaXMuZm9ybWF0U3RhY2tEaWZmSGVscGVyKHtcbiAgICAgICAgb2xkVGVtcGxhdGU6IG5lc3RlZFN0YWNrLmRlcGxveWVkVGVtcGxhdGUsXG4gICAgICAgIG5ld1RlbXBsYXRlOiBuZXN0ZWRTdGFjay5nZW5lcmF0ZWRUZW1wbGF0ZSxcbiAgICAgICAgc3RhY2tOYW1lOiBuZXN0ZWRTdGFjay5waHlzaWNhbE5hbWUgPz8gbG9naWNhbElkLFxuICAgICAgICBuZXN0ZWRTdGFja3M6IG5lc3RlZFN0YWNrLm5lc3RlZFN0YWNrVGVtcGxhdGVzLFxuICAgICAgICBjaGFuZ2VTZXQ6IG5lc3RlZFN0YWNrLmNoYW5nZVNldCxcbiAgICAgICAgbWFwcGluZ3MsXG4gICAgICAgIGxvZ2ljYWxJZE1hcDoge30sXG4gICAgICB9LCBvcHRpb25zKTtcbiAgICAgIG51bVN0YWNrc1dpdGhDaGFuZ2VzICs9IG5leHREaWZmLm51bVN0YWNrc1dpdGhDaGFuZ2VzO1xuICAgICAgZm9ybWF0dGVkRGlmZiArPSBuZXh0RGlmZi5mb3JtYXR0ZWREaWZmO1xuICAgIH1cblxuICAgIHJldHVybiB7IG51bVN0YWNrc1dpdGhDaGFuZ2VzLCBmb3JtYXR0ZWREaWZmIH07XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IHRoZSBzZWN1cml0eSBkaWZmLCBpbmNsdWRpbmcgYWxsIG5lc3RlZCBzdGFja3MuXG4gICAqL1xuICBwdWJsaWMgZm9ybWF0U2VjdXJpdHlEaWZmKG9wdGlvbnM6IEZvcm1hdFNlY3VyaXR5RGlmZk9wdGlvbnMgPSB7fSk6IEZvcm1hdFNlY3VyaXR5RGlmZk91dHB1dCB7XG4gICAgY29uc3QgeyBmb3JtYXR0ZWREaWZmLCBwZXJtaXNzaW9uQ2hhbmdlVHlwZSwgbnVtU3RhY2tzV2l0aENoYW5nZXMgfSA9IHRoaXMuZm9ybWF0U2VjdXJpdHlEaWZmSGVscGVyKHtcbiAgICAgIG9sZFRlbXBsYXRlOiB0aGlzLnRlbXBsYXRlSW5mby5vbGRUZW1wbGF0ZSxcbiAgICAgIG5ld1RlbXBsYXRlOiB0aGlzLnRlbXBsYXRlSW5mby5uZXdUZW1wbGF0ZS50ZW1wbGF0ZSxcbiAgICAgIHN0YWNrTmFtZTogdGhpcy5zdGFja05hbWUsXG4gICAgICBuZXN0ZWRTdGFja3M6IHRoaXMudGVtcGxhdGVJbmZvLm5lc3RlZFN0YWNrcyxcbiAgICAgIGNoYW5nZVNldDogdGhpcy50ZW1wbGF0ZUluZm8uY2hhbmdlU2V0LFxuICAgICAgbG9naWNhbElkTWFwOiBidWlsZExvZ2ljYWxUb1BhdGhNYXAodGhpcy50ZW1wbGF0ZUluZm8ubmV3VGVtcGxhdGUpLFxuICAgIH0sIG9wdGlvbnMpO1xuXG4gICAgcmV0dXJuIHsgZm9ybWF0dGVkRGlmZiwgcGVybWlzc2lvbkNoYW5nZVR5cGUsIG51bVN0YWNrc1dpdGhDaGFuZ2VzIH07XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFNlY3VyaXR5RGlmZkhlbHBlcihwYXJhbXM6IHtcbiAgICBvbGRUZW1wbGF0ZTogVGVtcGxhdGU7XG4gICAgbmV3VGVtcGxhdGU6IFRlbXBsYXRlO1xuICAgIHN0YWNrTmFtZTogc3RyaW5nO1xuICAgIG5lc3RlZFN0YWNrczogeyBbbmVzdGVkU3RhY2tMb2dpY2FsSWQ6IHN0cmluZ106IE5lc3RlZFN0YWNrVGVtcGxhdGVzIH0gfCB1bmRlZmluZWQ7XG4gICAgY2hhbmdlU2V0OiBEZXNjcmliZUNoYW5nZVNldE91dHB1dCB8IHVuZGVmaW5lZDtcbiAgICBsb2dpY2FsSWRNYXA/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICB9LCBvcHRpb25zOiBGb3JtYXRTZWN1cml0eURpZmZPcHRpb25zID0ge30pOiBGb3JtYXRTZWN1cml0eURpZmZPdXRwdXQge1xuICAgIGNvbnN0IHsgb2xkVGVtcGxhdGUsIG5ld1RlbXBsYXRlLCBzdGFja05hbWUsIG5lc3RlZFN0YWNrcywgY2hhbmdlU2V0LCBsb2dpY2FsSWRNYXAgfSA9IHBhcmFtcztcblxuICAgIGNvbnN0IGRpZmYgPSB0aGlzLmNvbXB1dGVEaWZmKHN0YWNrTmFtZSwgb2xkVGVtcGxhdGUsIG5ld1RlbXBsYXRlLCBjaGFuZ2VTZXQsIHRoaXMubWFwcGluZ3MpO1xuICAgIGNvbnN0IHBlcm1pc3Npb25DaGFuZ2VUeXBlID0gcGVybWlzc2lvblR5cGVGcm9tRGlmZihkaWZmKTtcblxuICAgIGNvbnN0IHN0cmVhbSA9IG5ldyBTdHJpbmdXcml0ZVN0cmVhbSgpO1xuICAgIGlmICghb3B0aW9ucy5xdWlldCB8fCBwZXJtaXNzaW9uQ2hhbmdlVHlwZSAhPT0gUGVybWlzc2lvbkNoYW5nZVR5cGUuTk9ORSkge1xuICAgICAgc3RyZWFtLndyaXRlKGZvcm1hdChgU3RhY2sgJHtjaGFsay5ib2xkKHN0YWNrTmFtZSl9XFxuYCkpO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBmb3JtYXRTZWN1cml0eUNoYW5nZXMoc3RyZWFtLCBkaWZmLCB7XG4gICAgICAgIC4uLmxvZ2ljYWxJZE1hcEZyb21UZW1wbGF0ZShuZXdUZW1wbGF0ZSksXG4gICAgICAgIC4uLmxvZ2ljYWxJZE1hcCxcbiAgICAgIH0pO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBzdHJlYW0uZW5kKCk7XG4gICAgfVxuXG4gICAgbGV0IGZvcm1hdHRlZERpZmYgPSBzdHJlYW0udG9TdHJpbmcoKTtcbiAgICBpZiAoIW9wdGlvbnMucXVpZXQgJiYgcGVybWlzc2lvbkNoYW5nZVR5cGUgPT09IFBlcm1pc3Npb25DaGFuZ2VUeXBlLk5PTkUpIHtcbiAgICAgIGZvcm1hdHRlZERpZmYgKz0gY2hhbGsuZ3JlZW4oJ1RoZXJlIHdlcmUgbm8gc2VjdXJpdHktcmVsYXRlZCBjaGFuZ2VzIChsaW1pdGF0aW9uczogaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy8xMjk5KVxcbicpO1xuICAgIH1cbiAgICBsZXQgbnVtU3RhY2tzV2l0aENoYW5nZXMgPSBwZXJtaXNzaW9uQ2hhbmdlVHlwZSAhPT0gUGVybWlzc2lvbkNoYW5nZVR5cGUuTk9ORSA/IDEgOiAwO1xuICAgIGxldCBlc2NhbGF0ZWRQZXJtaXNzaW9uVHlwZSA9IHBlcm1pc3Npb25DaGFuZ2VUeXBlO1xuXG4gICAgLy8gUmVjdXJzZSBpbnRvIG5lc3RlZCBzdGFja3NcbiAgICBmb3IgKGNvbnN0IFtsb2dpY2FsSWQsIG5lc3RlZFN0YWNrXSBvZiBPYmplY3QuZW50cmllcyhuZXN0ZWRTdGFja3MgPz8ge30pKSB7XG4gICAgICBjb25zdCBuZXN0ZWRSZXN1bHQgPSB0aGlzLmZvcm1hdFNlY3VyaXR5RGlmZkhlbHBlcih7XG4gICAgICAgIG9sZFRlbXBsYXRlOiBuZXN0ZWRTdGFjay5kZXBsb3llZFRlbXBsYXRlLFxuICAgICAgICBuZXdUZW1wbGF0ZTogbmVzdGVkU3RhY2suZ2VuZXJhdGVkVGVtcGxhdGUsXG4gICAgICAgIHN0YWNrTmFtZTogbmVzdGVkU3RhY2sucGh5c2ljYWxOYW1lID8/IGxvZ2ljYWxJZCxcbiAgICAgICAgbmVzdGVkU3RhY2tzOiBuZXN0ZWRTdGFjay5uZXN0ZWRTdGFja1RlbXBsYXRlcyxcbiAgICAgICAgY2hhbmdlU2V0OiBuZXN0ZWRTdGFjay5jaGFuZ2VTZXQsXG4gICAgICB9LCBvcHRpb25zKTtcbiAgICAgIGZvcm1hdHRlZERpZmYgKz0gbmVzdGVkUmVzdWx0LmZvcm1hdHRlZERpZmYgPyAnXFxuJyArIG5lc3RlZFJlc3VsdC5mb3JtYXR0ZWREaWZmIDogJyc7XG4gICAgICBudW1TdGFja3NXaXRoQ2hhbmdlcyArPSBuZXN0ZWRSZXN1bHQubnVtU3RhY2tzV2l0aENoYW5nZXM7XG4gICAgICAvLyBFc2NhbGF0ZTogaWYgYW55IG5lc3RlZCBzdGFjayBicm9hZGVucyBwZXJtaXNzaW9ucywgdGhlIHdob2xlIHRoaW5nIGJyb2FkZW5zXG4gICAgICBpZiAobmVzdGVkUmVzdWx0LnBlcm1pc3Npb25DaGFuZ2VUeXBlID09PSBQZXJtaXNzaW9uQ2hhbmdlVHlwZS5CUk9BREVOSU5HKSB7XG4gICAgICAgIGVzY2FsYXRlZFBlcm1pc3Npb25UeXBlID0gUGVybWlzc2lvbkNoYW5nZVR5cGUuQlJPQURFTklORztcbiAgICAgIH0gZWxzZSBpZiAobmVzdGVkUmVzdWx0LnBlcm1pc3Npb25DaGFuZ2VUeXBlID09PSBQZXJtaXNzaW9uQ2hhbmdlVHlwZS5OT05fQlJPQURFTklOR1xuICAgICAgICAmJiBlc2NhbGF0ZWRQZXJtaXNzaW9uVHlwZSA9PT0gUGVybWlzc2lvbkNoYW5nZVR5cGUuTk9ORSkge1xuICAgICAgICBlc2NhbGF0ZWRQZXJtaXNzaW9uVHlwZSA9IFBlcm1pc3Npb25DaGFuZ2VUeXBlLk5PTl9CUk9BREVOSU5HO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiB7IGZvcm1hdHRlZERpZmYsIHBlcm1pc3Npb25DaGFuZ2VUeXBlOiBlc2NhbGF0ZWRQZXJtaXNzaW9uVHlwZSwgbnVtU3RhY2tzV2l0aENoYW5nZXMgfTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwZXJtaXNzaW9uVHlwZUZyb21EaWZmKGRpZmY6IFRlbXBsYXRlRGlmZik6IFBlcm1pc3Npb25DaGFuZ2VUeXBlIHtcbiAgaWYgKGRpZmYucGVybWlzc2lvbnNCcm9hZGVuZWQpIHtcbiAgICByZXR1cm4gUGVybWlzc2lvbkNoYW5nZVR5cGUuQlJPQURFTklORztcbiAgfSBlbHNlIGlmIChkaWZmLnBlcm1pc3Npb25zQW55Q2hhbmdlcykge1xuICAgIHJldHVybiBQZXJtaXNzaW9uQ2hhbmdlVHlwZS5OT05fQlJPQURFTklORztcbiAgfVxuICByZXR1cm4gUGVybWlzc2lvbkNoYW5nZVR5cGUuTk9ORTtcbn1cblxuZnVuY3Rpb24gYnVpbGRMb2dpY2FsVG9QYXRoTWFwKHN0YWNrOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3QpIHtcbiAgY29uc3QgbWFwOiB7IFtpZDogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgZm9yIChjb25zdCBtZCBvZiBzdGFjay5maW5kTWV0YWRhdGFCeVR5cGUoY3hzY2hlbWEuQXJ0aWZhY3RNZXRhZGF0YUVudHJ5VHlwZS5MT0dJQ0FMX0lEKSkge1xuICAgIG1hcFttZC5kYXRhIGFzIHN0cmluZ10gPSBtZC5wYXRoO1xuICB9XG4gIHJldHVybiBtYXA7XG59XG5cbmZ1bmN0aW9uIGxvZ2ljYWxJZE1hcEZyb21UZW1wbGF0ZSh0ZW1wbGF0ZTogVGVtcGxhdGUpIHtcbiAgY29uc3QgcmV0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgZm9yIChjb25zdCBbbG9naWNhbElkLCByZXNvdXJjZV0gb2YgT2JqZWN0LmVudHJpZXMoKHRlbXBsYXRlLlJlc291cmNlcyA/PyB7fSkgYXMgUmVjb3JkPHN0cmluZywgYW55PikpIHtcbiAgICBjb25zdCBwYXRoID0gcmVzb3VyY2U/Lk1ldGFkYXRhPy5bJ2F3czpjZGs6cGF0aCddO1xuICAgIGlmIChwYXRoKSB7XG4gICAgICByZXRbbG9naWNhbElkXSA9IHBhdGg7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbi8qKlxuICogUmVtb3ZlIGFueSB0ZW1wbGF0ZSBlbGVtZW50cyB0aGF0IHdlIGRvbid0IHdhbnQgdG8gc2hvdyB1c2Vycy5cbiAqIFRoaXMgaXMgY3VycmVudGx5OlxuICogLSBBV1M6OkNESzo6TWV0YWRhdGEgcmVzb3VyY2VcbiAqIC0gQ2hlY2tCb290c3RyYXBWZXJzaW9uIFJ1bGVcbiAqL1xuZnVuY3Rpb24gb2JzY3VyZURpZmYoZGlmZjogVGVtcGxhdGVEaWZmKSB7XG4gIGlmIChkaWZmLnVua25vd24pIHtcbiAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy8xNzk0MlxuICAgIGRpZmYudW5rbm93biA9IGRpZmYudW5rbm93bi5maWx0ZXIoY2hhbmdlID0+IHtcbiAgICAgIGlmICghY2hhbmdlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGNoYW5nZS5uZXdWYWx1ZT8uQ2hlY2tCb290c3RyYXBWZXJzaW9uKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFuZ2Uub2xkVmFsdWU/LkNoZWNrQm9vdHN0cmFwVmVyc2lvbikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChkaWZmLnJlc291cmNlcykge1xuICAgIGRpZmYucmVzb3VyY2VzID0gZGlmZi5yZXNvdXJjZXMuZmlsdGVyKGNoYW5nZSA9PiB7XG4gICAgICBpZiAoIWNoYW5nZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFuZ2UubmV3UmVzb3VyY2VUeXBlID09PSAnQVdTOjpDREs6Ok1ldGFkYXRhJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoY2hhbmdlLm9sZFJlc291cmNlVHlwZSA9PT0gJ0FXUzo6Q0RLOjpNZXRhZGF0YScpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
265
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlmZi1mb3JtYXR0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkaWZmLWZvcm1hdHRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSx5Q0FBbUM7QUFFbkMsc0VBUXNDO0FBQ3RDLCtCQUErQjtBQUMvQiw2Q0FBc0Q7QUFFdEQscUVBQXlFO0FBQ3pFLHdDQUErQztBQTBJL0M7O0dBRUc7QUFDSCxNQUFhLGFBQWE7SUFDUCxZQUFZLENBQWU7SUFDM0IsU0FBUyxDQUFTO0lBQ2xCLFFBQVEsQ0FBVTtJQUNsQixRQUFRLENBQXlCO0lBRWxEOztPQUVHO0lBQ2MsS0FBSyxHQUFHLElBQUksR0FBRyxFQUF3QixDQUFDO0lBRXpELFlBQVksS0FBeUI7UUFDbkMsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFlBQVksQ0FBQyxXQUFXLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxZQUFZLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQztRQUN4RyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQztRQUNyRCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQyxZQUFZLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztJQUNwRCxDQUFDO0lBRUQsSUFBVyxLQUFLO1FBQ2QsT0FBTyxNQUFNLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4QyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSyxXQUFXLENBQ2pCLFNBQWlCLEVBQ2pCLFdBQXFCLEVBQ3JCLFdBQXFCLEVBQ3JCLFNBQThDLEVBQzlDLFFBQWdDO1FBRWhDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1lBQy9CLE1BQU0sWUFBWSxHQUFHLElB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LENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDWixPQUFPLElBQUksQ0FBQztZQUNkLENBQUM7WUFDRCxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUscUJBQXFCLEVBQUUsQ0FBQztnQkFDM0MsT0FBTyxLQUFLLENBQUM7WUFDZixDQUFDO1lBQ0QsSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLHFCQUFxQixFQUFFLENBQUM7Z0JBQzNDLE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUNELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDbkIsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUM5QyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7Z0JBQ1osT0FBTyxJQUFJLENBQUM7WUFDZCxDQUFDO1lBQ0QsSUFBSSxNQUFNLENBQUMsZUFBZSxLQUFLLG9CQUFvQixFQUFFLENBQUM7Z0JBQ3BELE9BQU8sS0FBSyxDQUFDO1lBQ2YsQ0FBQztZQUNELElBQUksTUFBTSxDQUFDLGVBQWUsS0FBSyxvQkFBb0IsRUFBRSxDQUFDO2dCQUNwRCxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JtYXQgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IHR5cGUgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1hcGknO1xuaW1wb3J0IHtcbiAgZm9ybWF0RGlmZmVyZW5jZXMsXG4gIGZvcm1hdFNlY3VyaXR5Q2hhbmdlcyxcbiAgZnVsbERpZmYsXG4gIG1hbmdsZUxpa2VDbG91ZEZvcm1hdGlvbixcbiAgdHlwZSBEZXNjcmliZUNoYW5nZVNldE91dHB1dCxcbiAgdHlwZSBSZXNvdXJjZURpZmZlcmVuY2UsXG4gIHR5cGUgVGVtcGxhdGVEaWZmLFxufSBmcm9tICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJztcbmltcG9ydCAqIGFzIGNoYWxrIGZyb20gJ2NoYWxrJztcbmltcG9ydCB7IFBlcm1pc3Npb25DaGFuZ2VUeXBlIH0gZnJvbSAnLi4vLi4vcGF5bG9hZHMnO1xuaW1wb3J0IHR5cGUgeyBOZXN0ZWRTdGFja1RlbXBsYXRlcywgVGVtcGxhdGUgfSBmcm9tICcuLi9jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgeyBidWlsZExvZ2ljYWxUb1BhdGhNYXAgfSBmcm9tICcuLi9jbG91ZGZvcm1hdGlvbi9sb2dpY2FsLWlkLW1hcCc7XG5pbXBvcnQgeyBTdHJpbmdXcml0ZVN0cmVhbSB9IGZyb20gJy4uL3N0cmVhbXMnO1xuXG4vKipcbiAqIE91dHB1dCBvZiBmb3JtYXRTZWN1cml0eURpZmZcbiAqL1xuaW50ZXJmYWNlIEZvcm1hdFNlY3VyaXR5RGlmZk91dHB1dCB7XG4gIC8qKlxuICAgKiBDb21wbGV0ZSBmb3JtYXR0ZWQgc2VjdXJpdHkgZGlmZlxuICAgKi9cbiAgcmVhZG9ubHkgZm9ybWF0dGVkRGlmZjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdHlwZSBvZiBwZXJtaXNzaW9uIGNoYW5nZXMgaW4gdGhlIHNlY3VyaXR5IGRpZmYuXG4gICAqIFRoZSBJb0hvc3Qgd2lsbCB1c2UgdGhpcyB0byBkZWNpZGUgd2hldGhlciBvciBub3QgdG8gcHJpbnQuXG4gICAqL1xuICByZWFkb25seSBwZXJtaXNzaW9uQ2hhbmdlVHlwZTogUGVybWlzc2lvbkNoYW5nZVR5cGU7XG5cbiAgLyoqXG4gICAqIE51bWJlciBvZiBzdGFja3Mgd2l0aCBzZWN1cml0eSBjaGFuZ2VzXG4gICAqL1xuICByZWFkb25seSBudW1TdGFja3NXaXRoQ2hhbmdlczogbnVtYmVyO1xufVxuXG4vKipcbiAqIE91dHB1dCBvZiBmb3JtYXRTdGFja0RpZmZcbiAqL1xuaW50ZXJmYWNlIEZvcm1hdFN0YWNrRGlmZk91dHB1dCB7XG4gIC8qKlxuICAgKiBOdW1iZXIgb2Ygc3RhY2tzIHdpdGggZGlmZiBjaGFuZ2VzXG4gICAqL1xuICByZWFkb25seSBudW1TdGFja3NXaXRoQ2hhbmdlczogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBDb21wbGV0ZSBmb3JtYXR0ZWQgZGlmZlxuICAgKi9cbiAgcmVhZG9ubHkgZm9ybWF0dGVkRGlmZjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BzIGZvciB0aGUgRGlmZiBGb3JtYXR0ZXJcbiAqL1xuaW50ZXJmYWNlIERpZmZGb3JtYXR0ZXJQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgcmVsZXZhbnQgaW5mb3JtYXRpb24gZm9yIHRoZSBUZW1wbGF0ZSB0aGF0IGlzIGJlaW5nIGRpZmZlZC5cbiAgICogSW5jbHVkZXMgdGhlIG9sZC9jdXJyZW50IHN0YXRlIG9mIHRoZSBzdGFjayBhcyB3ZWxsIGFzIHRoZSBuZXcgc3RhdGUuXG4gICAqL1xuICByZWFkb25seSB0ZW1wbGF0ZUluZm86IFRlbXBsYXRlSW5mbztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIHNwZWNpZmljIHRvIGZvcm1hdHRpbmcgdGhlIHN0YWNrIGRpZmZcbiAqL1xuaW50ZXJmYWNlIEZvcm1hdFN0YWNrRGlmZk9wdGlvbnMge1xuICAvKipcbiAgICogZG8gbm90IGZpbHRlciBvdXQgQVdTOjpDREs6Ok1ldGFkYXRhIG9yIFJ1bGVzXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBzdHJpY3Q/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBsaW5lcyBvZiBjb250ZXh0IHRvIHVzZSBpbiBhcmJpdHJhcnkgSlNPTiBkaWZmXG4gICAqXG4gICAqIEBkZWZhdWx0IDNcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRleHRMaW5lcz86IG51bWJlcjtcblxuICAvKipcbiAgICogc2lsZW5jZXMgXFwnVGhlcmUgd2VyZSBubyBkaWZmZXJlbmNlc1xcJyBtZXNzYWdlc1xuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgcXVpZXQ/OiBib29sZWFuO1xufVxuXG5pbnRlcmZhY2UgUmV1c2FibGVTdGFja0RpZmZPcHRpb25zIGV4dGVuZHMgRm9ybWF0U3RhY2tEaWZmT3B0aW9ucyB7XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBzcGVjaWZpYyB0byBmb3JtYXR0aW5nIHRoZSBzZWN1cml0eSBkaWZmXG4gKi9cbmludGVyZmFjZSBGb3JtYXRTZWN1cml0eURpZmZPcHRpb25zIHtcbiAgLyoqXG4gICAqIHNpbGVuY2VzIHN0YWNrIG5hbWVzIGFuZCAnbm8gY2hhbmdlcycgbWVzc2FnZXMgZm9yIHN0YWNrcyB3aXRob3V0IHNlY3VyaXR5IGNoYW5nZXNcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IHF1aWV0PzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBJbmZvcm1hdGlvbiBvbiBhIHRlbXBsYXRlJ3Mgb2xkL25ldyBzdGF0ZVxuICogdGhhdCBpcyB1c2VkIGZvciBkaWZmLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFRlbXBsYXRlSW5mbyB7XG4gIC8qKlxuICAgKiBUaGUgb2xkL2V4aXN0aW5nIHRlbXBsYXRlXG4gICAqL1xuICByZWFkb25seSBvbGRUZW1wbGF0ZTogVGVtcGxhdGU7XG5cbiAgLyoqXG4gICAqIFRoZSBuZXcgdGVtcGxhdGVcbiAgICovXG4gIHJlYWRvbmx5IG5ld1RlbXBsYXRlOiBjeGFwaS5DbG91ZEZvcm1hdGlvblN0YWNrQXJ0aWZhY3Q7XG5cbiAgLyoqXG4gICAqIEEgQ2xvdWRGb3JtYXRpb24gQ2hhbmdlU2V0IHRvIGhlbHAgdGhlIGRpZmYgb3BlcmF0aW9uLlxuICAgKiBQcm9iYWJseSBjcmVhdGVkIHZpYSBgY3JlYXRlRGlmZkNoYW5nZVNldGAuXG4gICAqXG4gICAqIEBkZWZhdWx0IHVuZGVmaW5lZFxuICAgKi9cbiAgcmVhZG9ubHkgY2hhbmdlU2V0PzogRGVzY3JpYmVDaGFuZ2VTZXRPdXRwdXQ7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgb3Igbm90IHRoZXJlIGFyZSBhbnkgaW1wb3J0ZWQgcmVzb3VyY2VzXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBpc0ltcG9ydD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEFueSBuZXN0ZWQgc3RhY2tzIGluY2x1ZGVkIGluIHRoZSB0ZW1wbGF0ZVxuICAgKlxuICAgKiBAZGVmYXVsdCB7fVxuICAgKi9cbiAgcmVhZG9ubHkgbmVzdGVkU3RhY2tzPzoge1xuICAgIFtuZXN0ZWRTdGFja0xvZ2ljYWxJZDogc3RyaW5nXTogTmVzdGVkU3RhY2tUZW1wbGF0ZXM7XG4gIH07XG5cbiAgLyoqXG4gICAqIE1hcHBpbmdzIG9mIG9sZCBsb2NhdGlvbnMgdG8gbmV3IGxvY2F0aW9ucy4gSWYgdGhlc2UgYXJlIHByb3ZpZGVkLFxuICAgKiBmb3IgYWxsIHJlc291cmNlcyB0aGF0IHdlcmUgbW92ZWQsIHRoZWlyIGNvcnJlc3BvbmRpbmcgYWRkaXRpb25cbiAgICogYW5kIHJlbW92YWwgbGluZXMgd2lsbCBiZSBhdWdtZW50ZWQgd2l0aCB0aGUgbG9jYXRpb24gdGhleSB3ZXJlXG4gICAqIG1vdmVkIGZvbSBhbmQgdG8sIHJlc3BlY3RpdmVseS5cbiAgICovXG4gIHJlYWRvbmx5IG1hcHBpbmdzPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbn1cblxuLyoqXG4gKiBDbGFzcyBmb3IgZm9ybWF0dGluZyB0aGUgZGlmZiBvdXRwdXRcbiAqL1xuZXhwb3J0IGNsYXNzIERpZmZGb3JtYXR0ZXIge1xuICBwcml2YXRlIHJlYWRvbmx5IHRlbXBsYXRlSW5mbzogVGVtcGxhdGVJbmZvO1xuICBwcml2YXRlIHJlYWRvbmx5IHN0YWNrTmFtZTogc3RyaW5nO1xuICBwcml2YXRlIHJlYWRvbmx5IGlzSW1wb3J0OiBib29sZWFuO1xuICBwcml2YXRlIHJlYWRvbmx5IG1hcHBpbmdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuXG4gIC8qKlxuICAgKiBDYWNoZSBvZiBjb21wdXRlZCBUZW1wbGF0ZURpZmZzLCBpbmRleGVkIGJ5IHN0YWNrIG5hbWUuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IGNhY2hlID0gbmV3IE1hcDxzdHJpbmcsIFRlbXBsYXRlRGlmZj4oKTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogRGlmZkZvcm1hdHRlclByb3BzKSB7XG4gICAgdGhpcy50ZW1wbGF0ZUluZm8gPSBwcm9wcy50ZW1wbGF0ZUluZm87XG4gICAgdGhpcy5zdGFja05hbWUgPSBwcm9wcy50ZW1wbGF0ZUluZm8ubmV3VGVtcGxhdGUuZGlzcGxheU5hbWUgPz8gcHJvcHMudGVtcGxhdGVJbmZvLm5ld1RlbXBsYXRlLnN0YWNrTmFtZTtcbiAgICB0aGlzLmlzSW1wb3J0ID0gcHJvcHMudGVtcGxhdGVJbmZvLmlzSW1wb3J0ID8/IGZhbHNlO1xuICAgIHRoaXMubWFwcGluZ3MgPSBwcm9wcy50ZW1wbGF0ZUluZm8ubWFwcGluZ3MgPz8ge307XG4gIH1cblxuICBwdWJsaWMgZ2V0IGRpZmZzKCkge1xuICAgIHJldHVybiBPYmplY3QuZnJvbUVudHJpZXModGhpcy5jYWNoZSk7XG4gIH1cblxuICAvKipcbiAgICogQ29tcHV0ZSB0aGUgZGlmZiBmb3IgYSBzaW5nbGUgc3RhY2suIFJlc3VsdHMgYXJlIGNhY2hlZCBieSBzdGFjayBuYW1lLlxuICAgKlxuICAgKiBAcGFyYW0gc3RhY2tOYW1lIC0gVGhlIG5hbWUgdG8gY2FjaGUgdGhlIGRpZmYgdW5kZXJcbiAgICogQHBhcmFtIG9sZFRlbXBsYXRlIC0gVGhlIGRlcGxveWVkIHRlbXBsYXRlXG4gICAqIEBwYXJhbSBuZXdUZW1wbGF0ZSAtIFRoZSBuZXcvZ2VuZXJhdGVkIHRlbXBsYXRlIChyZWFkIGZyb20gdGhlIGFydGlmYWN0KVxuICAgKiBAcGFyYW0gY2hhbmdlU2V0IC0gVGhlIENsb3VkRm9ybWF0aW9uIGNoYW5nZXNldCBmb3IgdGhpcyBzcGVjaWZpYyBzdGFjaywgaWYgYXZhaWxhYmxlXG4gICAqIEBwYXJhbSBtYXBwaW5ncyAtIFJlc291cmNlIG1vdmUgbWFwcGluZ3NcbiAgICovXG4gIHByaXZhdGUgY29tcHV0ZURpZmYoXG4gICAgc3RhY2tOYW1lOiBzdHJpbmcsXG4gICAgb2xkVGVtcGxhdGU6IFRlbXBsYXRlLFxuICAgIG5ld1RlbXBsYXRlOiBUZW1wbGF0ZSxcbiAgICBjaGFuZ2VTZXQ6IERlc2NyaWJlQ2hhbmdlU2V0T3V0cHV0IHwgdW5kZWZpbmVkLFxuICAgIG1hcHBpbmdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuICApOiBUZW1wbGF0ZURpZmYge1xuICAgIGlmICghdGhpcy5jYWNoZS5oYXMoc3RhY2tOYW1lKSkge1xuICAgICAgY29uc3QgdGVtcGxhdGVEaWZmID0gZnVsbERpZmYob2xkVGVtcGxhdGUsIG5ld1RlbXBsYXRlLCBjaGFuZ2VTZXQsIHRoaXMuaXNJbXBvcnQpO1xuXG4gICAgICBjb25zdCBzZXRNb3ZlID0gKGNoYW5nZTogUmVzb3VyY2VEaWZmZXJlbmNlLCBkaXJlY3Rpb246ICdmcm9tJyB8ICd0bycsIGxvY2F0aW9uPzogc3RyaW5nKSA9PiB7XG4gICAgICAgIGlmIChsb2NhdGlvbiAhPSBudWxsKSB7XG4gICAgICAgICAgY29uc3QgW3NvdXJjZVN0YWNrTmFtZSwgc291cmNlTG9naWNhbElkXSA9IGxvY2F0aW9uLnNwbGl0KCcuJyk7XG4gICAgICAgICAgY2hhbmdlLm1vdmUgPSB7XG4gICAgICAgICAgICBkaXJlY3Rpb24sXG4gICAgICAgICAgICBzdGFja05hbWU6IHNvdXJjZVN0YWNrTmFtZSxcbiAgICAgICAgICAgIHJlc291cmNlTG9naWNhbElkOiBzb3VyY2VMb2dpY2FsSWQsXG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfTtcblxuICAgICAgdGVtcGxhdGVEaWZmLnJlc291cmNlcy5mb3JFYWNoRGlmZmVyZW5jZSgoaWQsIGNoYW5nZSkgPT4ge1xuICAgICAgICBjb25zdCBsb2NhdGlvbiA9IGAke3N0YWNrTmFtZX0uJHtpZH1gO1xuICAgICAgICBpZiAoY2hhbmdlLmlzQWRkaXRpb24gJiYgT2JqZWN0LnZhbHVlcyhtYXBwaW5ncykuaW5jbHVkZXMobG9jYXRpb24pKSB7XG4gICAgICAgICAgc2V0TW92ZShjaGFuZ2UsICdmcm9tJywgT2JqZWN0LmtleXMobWFwcGluZ3MpLmZpbmQoayA9PiBtYXBwaW5nc1trXSA9PT0gbG9jYXRpb24pKTtcbiAgICAgICAgfSBlbHNlIGlmIChjaGFuZ2UuaXNSZW1vdmFsICYmIE9iamVjdC5rZXlzKG1hcHBpbmdzKS5pbmNsdWRlcyhsb2NhdGlvbikpIHtcbiAgICAgICAgICBzZXRNb3ZlKGNoYW5nZSwgJ3RvJywgbWFwcGluZ3NbbG9jYXRpb25dKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIHRoaXMuY2FjaGUuc2V0KHN0YWNrTmFtZSwgdGVtcGxhdGVEaWZmKTtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuY2FjaGUuZ2V0KHN0YWNrTmFtZSkhO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCB0aGUgc3RhY2sgZGlmZiwgaW5jbHVkaW5nIGFsbCBuZXN0ZWQgc3RhY2tzLlxuICAgKi9cbiAgcHVibGljIGZvcm1hdFN0YWNrRGlmZihvcHRpb25zOiBGb3JtYXRTdGFja0RpZmZPcHRpb25zID0ge30pOiBGb3JtYXRTdGFja0RpZmZPdXRwdXQge1xuICAgIHJldHVybiB0aGlzLmZvcm1hdFN0YWNrRGlmZkhlbHBlcih7XG4gICAgICBvbGRUZW1wbGF0ZTogdGhpcy50ZW1wbGF0ZUluZm8ub2xkVGVtcGxhdGUsXG4gICAgICBuZXdUZW1wbGF0ZTogdGhpcy50ZW1wbGF0ZUluZm8ubmV3VGVtcGxhdGUudGVtcGxhdGUsXG4gICAgICBzdGFja05hbWU6IHRoaXMuc3RhY2tOYW1lLFxuICAgICAgbmVzdGVkU3RhY2tzOiB0aGlzLnRlbXBsYXRlSW5mby5uZXN0ZWRTdGFja3MsXG4gICAgICBjaGFuZ2VTZXQ6IHRoaXMudGVtcGxhdGVJbmZvLmNoYW5nZVNldCxcbiAgICAgIG1hcHBpbmdzOiB0aGlzLm1hcHBpbmdzLFxuICAgICAgbG9naWNhbElkTWFwOiBidWlsZExvZ2ljYWxUb1BhdGhNYXAodGhpcy50ZW1wbGF0ZUluZm8ubmV3VGVtcGxhdGUpLnRvUGF0aCxcbiAgICB9LCBvcHRpb25zKTtcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0U3RhY2tEaWZmSGVscGVyKHBhcmFtczoge1xuICAgIG9sZFRlbXBsYXRlOiBUZW1wbGF0ZTtcbiAgICBuZXdUZW1wbGF0ZTogVGVtcGxhdGU7XG4gICAgc3RhY2tOYW1lOiBzdHJpbmc7XG4gICAgbmVzdGVkU3RhY2tzOiB7IFtuZXN0ZWRTdGFja0xvZ2ljYWxJZDogc3RyaW5nXTogTmVzdGVkU3RhY2tUZW1wbGF0ZXMgfSB8IHVuZGVmaW5lZDtcbiAgICBjaGFuZ2VTZXQ6IERlc2NyaWJlQ2hhbmdlU2V0T3V0cHV0IHwgdW5kZWZpbmVkO1xuICAgIG1hcHBpbmdzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIGxvZ2ljYWxJZE1hcDogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgfSwgb3B0aW9uczogUmV1c2FibGVTdGFja0RpZmZPcHRpb25zID0ge30pOiBGb3JtYXRTdGFja0RpZmZPdXRwdXQge1xuICAgIGNvbnN0IHsgb2xkVGVtcGxhdGUsIG5ld1RlbXBsYXRlLCBzdGFja05hbWUsIG5lc3RlZFN0YWNrcywgY2hhbmdlU2V0LCBtYXBwaW5ncywgbG9naWNhbElkTWFwIH0gPSBwYXJhbXM7XG5cbiAgICBjb25zdCBkaWZmID0gdGhpcy5jb21wdXRlRGlmZihzdGFja05hbWUsIG9sZFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSwgY2hhbmdlU2V0LCBtYXBwaW5ncyk7XG5cbiAgICBjb25zdCBzdHJlYW0gPSBuZXcgU3RyaW5nV3JpdGVTdHJlYW0oKTtcbiAgICBsZXQgbnVtU3RhY2tzV2l0aENoYW5nZXMgPSAwO1xuICAgIGxldCBmb3JtYXR0ZWREaWZmID0gJyc7XG4gICAgbGV0IGZpbHRlcmVkQ2hhbmdlc0NvdW50ID0gMDtcblxuICAgIHRyeSB7XG4gICAgICAvLyBtdXN0IG91dHB1dCB0aGUgc3RhY2sgbmFtZSBpZiB0aGVyZSBhcmUgZGlmZmVyZW5jZXMsIGV2ZW4gaWYgcXVpZXRcbiAgICAgIGlmIChzdGFja05hbWUgJiYgKCFvcHRpb25zLnF1aWV0IHx8ICFkaWZmLmlzRW1wdHkpKSB7XG4gICAgICAgIHN0cmVhbS53cml0ZShmb3JtYXQoYFN0YWNrICR7Y2hhbGsuYm9sZChzdGFja05hbWUpfVxcbmApKTtcbiAgICAgIH1cblxuICAgICAgaWYgKCFvcHRpb25zLnF1aWV0ICYmIHRoaXMuaXNJbXBvcnQpIHtcbiAgICAgICAgc3RyZWFtLndyaXRlKCdQYXJhbWV0ZXJzIGFuZCBydWxlcyBjcmVhdGVkIGR1cmluZyBtaWdyYXRpb24gZG8gbm90IGFmZmVjdCByZXNvdXJjZSBjb25maWd1cmF0aW9uLlxcbicpO1xuICAgICAgfVxuXG4gICAgICAvLyBkZXRlY3QgYW5kIGZpbHRlciBvdXQgbWFuZ2xlZCBjaGFyYWN0ZXJzIGZyb20gdGhlIGRpZmZcbiAgICAgIGxldCBhY3RpdmVEaWZmID0gZGlmZjtcbiAgICAgIGlmIChkaWZmLmRpZmZlcmVuY2VDb3VudCAmJiAhb3B0aW9ucy5zdHJpY3QpIHtcbiAgICAgICAgY29uc3QgbWFuZ2xlZE5ld1RlbXBsYXRlID0gSlNPTi5wYXJzZShtYW5nbGVMaWtlQ2xvdWRGb3JtYXRpb24oSlNPTi5zdHJpbmdpZnkobmV3VGVtcGxhdGUpKSk7XG4gICAgICAgIGNvbnN0IG1hbmdsZWREaWZmID0gZnVsbERpZmYob2xkVGVtcGxhdGUsIG1hbmdsZWROZXdUZW1wbGF0ZSwgY2hhbmdlU2V0KTtcbiAgICAgICAgZmlsdGVyZWRDaGFuZ2VzQ291bnQgPSBNYXRoLm1heCgwLCBkaWZmLmRpZmZlcmVuY2VDb3VudCAtIG1hbmdsZWREaWZmLmRpZmZlcmVuY2VDb3VudCk7XG4gICAgICAgIGlmIChmaWx0ZXJlZENoYW5nZXNDb3VudCA+IDApIHtcbiAgICAgICAgICBhY3RpdmVEaWZmID0gbWFuZ2xlZERpZmY7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gZmlsdGVyIG91dCAnQVdTOjpDREs6Ok1ldGFkYXRhJyByZXNvdXJjZXMgZnJvbSB0aGUgdGVtcGxhdGVcbiAgICAgIC8vIGZpbHRlciBvdXQgJ0NoZWNrQm9vdHN0cmFwVmVyc2lvbicgcnVsZXMgZnJvbSB0aGUgdGVtcGxhdGVcbiAgICAgIGNvbnN0IGRpZmZXYXNOb25FbXB0eSA9ICFhY3RpdmVEaWZmLmlzRW1wdHk7XG4gICAgICBpZiAoIW9wdGlvbnMuc3RyaWN0KSB7XG4gICAgICAgIG9ic2N1cmVEaWZmKGFjdGl2ZURpZmYpO1xuICAgICAgfVxuICAgICAgY29uc3QgbWV0YWRhdGFXYXNGaWx0ZXJlZCA9IGRpZmZXYXNOb25FbXB0eSAmJiBhY3RpdmVEaWZmLmlzRW1wdHk7XG5cbiAgICAgIGlmICghYWN0aXZlRGlmZi5pc0VtcHR5KSB7XG4gICAgICAgIG51bVN0YWNrc1dpdGhDaGFuZ2VzKys7XG5cbiAgICAgICAgZm9ybWF0RGlmZmVyZW5jZXMoc3RyZWFtLCBhY3RpdmVEaWZmLCB7XG4gICAgICAgICAgLi4ubG9naWNhbElkTWFwRnJvbVRlbXBsYXRlKG9sZFRlbXBsYXRlKSxcbiAgICAgICAgICAuLi5sb2dpY2FsSWRNYXBGcm9tVGVtcGxhdGUobmV3VGVtcGxhdGUpLFxuICAgICAgICAgIC4uLmxvZ2ljYWxJZE1hcCxcbiAgICAgICAgfSwgb3B0aW9ucy5jb250ZXh0TGluZXMpO1xuICAgICAgfSBlbHNlIGlmICghb3B0aW9ucy5xdWlldCkge1xuICAgICAgICBjb25zdCBoaW50ID0gbWV0YWRhdGFXYXNGaWx0ZXJlZCA/IGNoYWxrLmdyZXkoJyAoQ0RLIG1ldGFkYXRhIGNoYW5nZXMgd2VyZSBoaWRkZW4sIHJ1biBjZGsgZGlmZiAtLXN0cmljdCB0byBzaG93KScpIDogJyc7XG4gICAgICAgIHN0cmVhbS53cml0ZShgJHtjaGFsay5ncmVlbignVGhlcmUgd2VyZSBubyBkaWZmZXJlbmNlcycpfSR7aGludH1cXG5gKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGZpbHRlcmVkQ2hhbmdlc0NvdW50ID4gMCkge1xuICAgICAgICBzdHJlYW0ud3JpdGUoY2hhbGsueWVsbG93KGBPbWl0dGVkICR7ZmlsdGVyZWRDaGFuZ2VzQ291bnR9IGNoYW5nZXMgYmVjYXVzZSB0aGV5IGFyZSBsaWtlbHkgbWFuZ2xlZCBub24tQVNDSUkgY2hhcmFjdGVycy4gVXNlIC0tc3RyaWN0IHRvIHByaW50IHRoZW0uXFxuYCkpO1xuICAgICAgfVxuICAgIH0gZmluYWxseSB7XG4gICAgICBmb3JtYXR0ZWREaWZmID0gc3RyZWFtLnRvU3RyaW5nKCk7XG4gICAgICBzdHJlYW0uZW5kKCk7XG4gICAgfVxuXG4gICAgLy8gUmVjdXJzZSBpbnRvIG5lc3RlZCBzdGFja3NcbiAgICBmb3IgKGNvbnN0IFtsb2dpY2FsSWQsIG5lc3RlZFN0YWNrXSBvZiBPYmplY3QuZW50cmllcyhuZXN0ZWRTdGFja3MgPz8ge30pKSB7XG4gICAgICBjb25zdCBuZXh0RGlmZiA9IHRoaXMuZm9ybWF0U3RhY2tEaWZmSGVscGVyKHtcbiAgICAgICAgb2xkVGVtcGxhdGU6IG5lc3RlZFN0YWNrLmRlcGxveWVkVGVtcGxhdGUsXG4gICAgICAgIG5ld1RlbXBsYXRlOiBuZXN0ZWRTdGFjay5nZW5lcmF0ZWRUZW1wbGF0ZSxcbiAgICAgICAgc3RhY2tOYW1lOiBuZXN0ZWRTdGFjay5waHlzaWNhbE5hbWUgPz8gbG9naWNhbElkLFxuICAgICAgICBuZXN0ZWRTdGFja3M6IG5lc3RlZFN0YWNrLm5lc3RlZFN0YWNrVGVtcGxhdGVzLFxuICAgICAgICBjaGFuZ2VTZXQ6IG5lc3RlZFN0YWNrLmNoYW5nZVNldCxcbiAgICAgICAgbWFwcGluZ3MsXG4gICAgICAgIGxvZ2ljYWxJZE1hcDoge30sXG4gICAgICB9LCBvcHRpb25zKTtcbiAgICAgIG51bVN0YWNrc1dpdGhDaGFuZ2VzICs9IG5leHREaWZmLm51bVN0YWNrc1dpdGhDaGFuZ2VzO1xuICAgICAgZm9ybWF0dGVkRGlmZiArPSBuZXh0RGlmZi5mb3JtYXR0ZWREaWZmO1xuICAgIH1cblxuICAgIHJldHVybiB7IG51bVN0YWNrc1dpdGhDaGFuZ2VzLCBmb3JtYXR0ZWREaWZmIH07XG4gIH1cblxuICAvKipcbiAgICogRm9ybWF0IHRoZSBzZWN1cml0eSBkaWZmLCBpbmNsdWRpbmcgYWxsIG5lc3RlZCBzdGFja3MuXG4gICAqL1xuICBwdWJsaWMgZm9ybWF0U2VjdXJpdHlEaWZmKG9wdGlvbnM6IEZvcm1hdFNlY3VyaXR5RGlmZk9wdGlvbnMgPSB7fSk6IEZvcm1hdFNlY3VyaXR5RGlmZk91dHB1dCB7XG4gICAgY29uc3QgeyBmb3JtYXR0ZWREaWZmLCBwZXJtaXNzaW9uQ2hhbmdlVHlwZSwgbnVtU3RhY2tzV2l0aENoYW5nZXMgfSA9IHRoaXMuZm9ybWF0U2VjdXJpdHlEaWZmSGVscGVyKHtcbiAgICAgIG9sZFRlbXBsYXRlOiB0aGlzLnRlbXBsYXRlSW5mby5vbGRUZW1wbGF0ZSxcbiAgICAgIG5ld1RlbXBsYXRlOiB0aGlzLnRlbXBsYXRlSW5mby5uZXdUZW1wbGF0ZS50ZW1wbGF0ZSxcbiAgICAgIHN0YWNrTmFtZTogdGhpcy5zdGFja05hbWUsXG4gICAgICBuZXN0ZWRTdGFja3M6IHRoaXMudGVtcGxhdGVJbmZvLm5lc3RlZFN0YWNrcyxcbiAgICAgIGNoYW5nZVNldDogdGhpcy50ZW1wbGF0ZUluZm8uY2hhbmdlU2V0LFxuICAgICAgbG9naWNhbElkTWFwOiBidWlsZExvZ2ljYWxUb1BhdGhNYXAodGhpcy50ZW1wbGF0ZUluZm8ubmV3VGVtcGxhdGUpLnRvUGF0aCxcbiAgICB9LCBvcHRpb25zKTtcblxuICAgIHJldHVybiB7IGZvcm1hdHRlZERpZmYsIHBlcm1pc3Npb25DaGFuZ2VUeXBlLCBudW1TdGFja3NXaXRoQ2hhbmdlcyB9O1xuICB9XG5cbiAgcHJpdmF0ZSBmb3JtYXRTZWN1cml0eURpZmZIZWxwZXIocGFyYW1zOiB7XG4gICAgb2xkVGVtcGxhdGU6IFRlbXBsYXRlO1xuICAgIG5ld1RlbXBsYXRlOiBUZW1wbGF0ZTtcbiAgICBzdGFja05hbWU6IHN0cmluZztcbiAgICBuZXN0ZWRTdGFja3M6IHsgW25lc3RlZFN0YWNrTG9naWNhbElkOiBzdHJpbmddOiBOZXN0ZWRTdGFja1RlbXBsYXRlcyB9IHwgdW5kZWZpbmVkO1xuICAgIGNoYW5nZVNldDogRGVzY3JpYmVDaGFuZ2VTZXRPdXRwdXQgfCB1bmRlZmluZWQ7XG4gICAgbG9naWNhbElkTWFwPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPjtcbiAgfSwgb3B0aW9uczogRm9ybWF0U2VjdXJpdHlEaWZmT3B0aW9ucyA9IHt9KTogRm9ybWF0U2VjdXJpdHlEaWZmT3V0cHV0IHtcbiAgICBjb25zdCB7IG9sZFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSwgc3RhY2tOYW1lLCBuZXN0ZWRTdGFja3MsIGNoYW5nZVNldCwgbG9naWNhbElkTWFwIH0gPSBwYXJhbXM7XG5cbiAgICBjb25zdCBkaWZmID0gdGhpcy5jb21wdXRlRGlmZihzdGFja05hbWUsIG9sZFRlbXBsYXRlLCBuZXdUZW1wbGF0ZSwgY2hhbmdlU2V0LCB0aGlzLm1hcHBpbmdzKTtcbiAgICBjb25zdCBwZXJtaXNzaW9uQ2hhbmdlVHlwZSA9IHBlcm1pc3Npb25UeXBlRnJvbURpZmYoZGlmZik7XG5cbiAgICBjb25zdCBzdHJlYW0gPSBuZXcgU3RyaW5nV3JpdGVTdHJlYW0oKTtcbiAgICBpZiAoIW9wdGlvbnMucXVpZXQgfHwgcGVybWlzc2lvbkNoYW5nZVR5cGUgIT09IFBlcm1pc3Npb25DaGFuZ2VUeXBlLk5PTkUpIHtcbiAgICAgIHN0cmVhbS53cml0ZShmb3JtYXQoYFN0YWNrICR7Y2hhbGsuYm9sZChzdGFja05hbWUpfVxcbmApKTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgZm9ybWF0U2VjdXJpdHlDaGFuZ2VzKHN0cmVhbSwgZGlmZiwge1xuICAgICAgICAuLi5sb2dpY2FsSWRNYXBGcm9tVGVtcGxhdGUobmV3VGVtcGxhdGUpLFxuICAgICAgICAuLi5sb2dpY2FsSWRNYXAsXG4gICAgICB9KTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgc3RyZWFtLmVuZCgpO1xuICAgIH1cblxuICAgIGxldCBmb3JtYXR0ZWREaWZmID0gc3RyZWFtLnRvU3RyaW5nKCk7XG4gICAgaWYgKCFvcHRpb25zLnF1aWV0ICYmIHBlcm1pc3Npb25DaGFuZ2VUeXBlID09PSBQZXJtaXNzaW9uQ2hhbmdlVHlwZS5OT05FKSB7XG4gICAgICBmb3JtYXR0ZWREaWZmICs9IGNoYWxrLmdyZWVuKCdUaGVyZSB3ZXJlIG5vIHNlY3VyaXR5LXJlbGF0ZWQgY2hhbmdlcyAobGltaXRhdGlvbnM6IGh0dHBzOi8vZ2l0aHViLmNvbS9hd3MvYXdzLWNkay9pc3N1ZXMvMTI5OSlcXG4nKTtcbiAgICB9XG4gICAgbGV0IG51bVN0YWNrc1dpdGhDaGFuZ2VzID0gcGVybWlzc2lvbkNoYW5nZVR5cGUgIT09IFBlcm1pc3Npb25DaGFuZ2VUeXBlLk5PTkUgPyAxIDogMDtcbiAgICBsZXQgZXNjYWxhdGVkUGVybWlzc2lvblR5cGUgPSBwZXJtaXNzaW9uQ2hhbmdlVHlwZTtcblxuICAgIC8vIFJlY3Vyc2UgaW50byBuZXN0ZWQgc3RhY2tzXG4gICAgZm9yIChjb25zdCBbbG9naWNhbElkLCBuZXN0ZWRTdGFja10gb2YgT2JqZWN0LmVudHJpZXMobmVzdGVkU3RhY2tzID8/IHt9KSkge1xuICAgICAgY29uc3QgbmVzdGVkUmVzdWx0ID0gdGhpcy5mb3JtYXRTZWN1cml0eURpZmZIZWxwZXIoe1xuICAgICAgICBvbGRUZW1wbGF0ZTogbmVzdGVkU3RhY2suZGVwbG95ZWRUZW1wbGF0ZSxcbiAgICAgICAgbmV3VGVtcGxhdGU6IG5lc3RlZFN0YWNrLmdlbmVyYXRlZFRlbXBsYXRlLFxuICAgICAgICBzdGFja05hbWU6IG5lc3RlZFN0YWNrLnBoeXNpY2FsTmFtZSA/PyBsb2dpY2FsSWQsXG4gICAgICAgIG5lc3RlZFN0YWNrczogbmVzdGVkU3RhY2submVzdGVkU3RhY2tUZW1wbGF0ZXMsXG4gICAgICAgIGNoYW5nZVNldDogbmVzdGVkU3RhY2suY2hhbmdlU2V0LFxuICAgICAgfSwgb3B0aW9ucyk7XG4gICAgICBmb3JtYXR0ZWREaWZmICs9IG5lc3RlZFJlc3VsdC5mb3JtYXR0ZWREaWZmID8gJ1xcbicgKyBuZXN0ZWRSZXN1bHQuZm9ybWF0dGVkRGlmZiA6ICcnO1xuICAgICAgbnVtU3RhY2tzV2l0aENoYW5nZXMgKz0gbmVzdGVkUmVzdWx0Lm51bVN0YWNrc1dpdGhDaGFuZ2VzO1xuICAgICAgLy8gRXNjYWxhdGU6IGlmIGFueSBuZXN0ZWQgc3RhY2sgYnJvYWRlbnMgcGVybWlzc2lvbnMsIHRoZSB3aG9sZSB0aGluZyBicm9hZGVuc1xuICAgICAgaWYgKG5lc3RlZFJlc3VsdC5wZXJtaXNzaW9uQ2hhbmdlVHlwZSA9PT0gUGVybWlzc2lvbkNoYW5nZVR5cGUuQlJPQURFTklORykge1xuICAgICAgICBlc2NhbGF0ZWRQZXJtaXNzaW9uVHlwZSA9IFBlcm1pc3Npb25DaGFuZ2VUeXBlLkJST0FERU5JTkc7XG4gICAgICB9IGVsc2UgaWYgKG5lc3RlZFJlc3VsdC5wZXJtaXNzaW9uQ2hhbmdlVHlwZSA9PT0gUGVybWlzc2lvbkNoYW5nZVR5cGUuTk9OX0JST0FERU5JTkdcbiAgICAgICAgJiYgZXNjYWxhdGVkUGVybWlzc2lvblR5cGUgPT09IFBlcm1pc3Npb25DaGFuZ2VUeXBlLk5PTkUpIHtcbiAgICAgICAgZXNjYWxhdGVkUGVybWlzc2lvblR5cGUgPSBQZXJtaXNzaW9uQ2hhbmdlVHlwZS5OT05fQlJPQURFTklORztcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4geyBmb3JtYXR0ZWREaWZmLCBwZXJtaXNzaW9uQ2hhbmdlVHlwZTogZXNjYWxhdGVkUGVybWlzc2lvblR5cGUsIG51bVN0YWNrc1dpdGhDaGFuZ2VzIH07XG4gIH1cbn1cblxuZnVuY3Rpb24gcGVybWlzc2lvblR5cGVGcm9tRGlmZihkaWZmOiBUZW1wbGF0ZURpZmYpOiBQZXJtaXNzaW9uQ2hhbmdlVHlwZSB7XG4gIGlmIChkaWZmLnBlcm1pc3Npb25zQnJvYWRlbmVkKSB7XG4gICAgcmV0dXJuIFBlcm1pc3Npb25DaGFuZ2VUeXBlLkJST0FERU5JTkc7XG4gIH0gZWxzZSBpZiAoZGlmZi5wZXJtaXNzaW9uc0FueUNoYW5nZXMpIHtcbiAgICByZXR1cm4gUGVybWlzc2lvbkNoYW5nZVR5cGUuTk9OX0JST0FERU5JTkc7XG4gIH1cbiAgcmV0dXJuIFBlcm1pc3Npb25DaGFuZ2VUeXBlLk5PTkU7XG59XG5cbmZ1bmN0aW9uIGxvZ2ljYWxJZE1hcEZyb21UZW1wbGF0ZSh0ZW1wbGF0ZTogVGVtcGxhdGUpIHtcbiAgY29uc3QgcmV0OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge307XG5cbiAgZm9yIChjb25zdCBbbG9naWNhbElkLCByZXNvdXJjZV0gb2YgT2JqZWN0LmVudHJpZXMoKHRlbXBsYXRlLlJlc291cmNlcyA/PyB7fSkgYXMgUmVjb3JkPHN0cmluZywgYW55PikpIHtcbiAgICBjb25zdCBwYXRoID0gcmVzb3VyY2U/Lk1ldGFkYXRhPy5bJ2F3czpjZGs6cGF0aCddO1xuICAgIGlmIChwYXRoKSB7XG4gICAgICByZXRbbG9naWNhbElkXSA9IHBhdGg7XG4gICAgfVxuICB9XG4gIHJldHVybiByZXQ7XG59XG5cbi8qKlxuICogUmVtb3ZlIGFueSB0ZW1wbGF0ZSBlbGVtZW50cyB0aGF0IHdlIGRvbid0IHdhbnQgdG8gc2hvdyB1c2Vycy5cbiAqIFRoaXMgaXMgY3VycmVudGx5OlxuICogLSBBV1M6OkNESzo6TWV0YWRhdGEgcmVzb3VyY2VcbiAqIC0gQ2hlY2tCb290c3RyYXBWZXJzaW9uIFJ1bGVcbiAqL1xuZnVuY3Rpb24gb2JzY3VyZURpZmYoZGlmZjogVGVtcGxhdGVEaWZmKSB7XG4gIGlmIChkaWZmLnVua25vd24pIHtcbiAgICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2F3cy9hd3MtY2RrL2lzc3Vlcy8xNzk0MlxuICAgIGRpZmYudW5rbm93biA9IGRpZmYudW5rbm93bi5maWx0ZXIoY2hhbmdlID0+IHtcbiAgICAgIGlmICghY2hhbmdlKSB7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKGNoYW5nZS5uZXdWYWx1ZT8uQ2hlY2tCb290c3RyYXBWZXJzaW9uKSB7XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFuZ2Uub2xkVmFsdWU/LkNoZWNrQm9vdHN0cmFwVmVyc2lvbikge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9KTtcbiAgfVxuXG4gIGlmIChkaWZmLnJlc291cmNlcykge1xuICAgIGRpZmYucmVzb3VyY2VzID0gZGlmZi5yZXNvdXJjZXMuZmlsdGVyKGNoYW5nZSA9PiB7XG4gICAgICBpZiAoIWNoYW5nZSkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGFuZ2UubmV3UmVzb3VyY2VUeXBlID09PSAnQVdTOjpDREs6Ok1ldGFkYXRhJykge1xuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICB9XG4gICAgICBpZiAoY2hhbmdlLm9sZFJlc291cmNlVHlwZSA9PT0gJ0FXUzo6Q0RLOjpNZXRhZGF0YScpIHtcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.DriftFormatter = void 0;
|
|
4
4
|
const node_util_1 = require("node:util");
|
|
5
|
-
const cxschema = require("@aws-cdk/cloud-assembly-schema");
|
|
6
5
|
const cloudformation_diff_1 = require("@aws-cdk/cloudformation-diff");
|
|
7
6
|
const client_cloudformation_1 = require("@aws-sdk/client-cloudformation");
|
|
8
7
|
const chalk = require("chalk");
|
|
8
|
+
const logical_id_map_1 = require("../cloudformation/logical-id-map");
|
|
9
9
|
/**
|
|
10
10
|
* Class for formatting drift detection output
|
|
11
11
|
*/
|
|
@@ -32,7 +32,7 @@ class DriftFormatter {
|
|
|
32
32
|
* Format the stack drift detection results
|
|
33
33
|
*/
|
|
34
34
|
formatStackDrift() {
|
|
35
|
-
const formatterOutput = this.formatStackDriftChanges(
|
|
35
|
+
const formatterOutput = this.formatStackDriftChanges((0, logical_id_map_1.buildLogicalToPathMap)(this.stack).toPath);
|
|
36
36
|
// we are only interested in actual drifts (and ignore the metadata resource)
|
|
37
37
|
const actualDrifts = this.resourceDriftResults.filter(d => (d.StackResourceDriftStatus === 'MODIFIED' || d.StackResourceDriftStatus === 'DELETED')
|
|
38
38
|
&& d.ResourceType !== 'AWS::CDK::Metadata');
|
|
@@ -60,13 +60,6 @@ class DriftFormatter {
|
|
|
60
60
|
summary: finalResult,
|
|
61
61
|
};
|
|
62
62
|
}
|
|
63
|
-
buildLogicalToPathMap() {
|
|
64
|
-
const map = {};
|
|
65
|
-
for (const md of this.stack.findMetadataByType(cxschema.ArtifactMetadataEntryType.LOGICAL_ID)) {
|
|
66
|
-
map[md.data] = md.path;
|
|
67
|
-
}
|
|
68
|
-
return map;
|
|
69
|
-
}
|
|
70
63
|
/**
|
|
71
64
|
* Renders stack drift information
|
|
72
65
|
*
|
|
@@ -185,4 +178,4 @@ const ADDITION = chalk.green('[+]');
|
|
|
185
178
|
const CONTEXT = chalk.grey('[ ]');
|
|
186
179
|
const UPDATE = chalk.yellow('[~]');
|
|
187
180
|
const REMOVAL = chalk.red('[-]');
|
|
188
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJpZnQtZm9ybWF0dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZHJpZnQtZm9ybWF0dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUFtQztBQUVuQywyREFBMkQ7QUFDM0Qsc0VBQTBEO0FBRTFELDBFQUEwRTtBQUMxRSwrQkFBK0I7QUE4RC9COztHQUVHO0FBQ0gsTUFBYSxjQUFjO0lBQ1QsU0FBUyxDQUFTO0lBRWpCLEtBQUssQ0FBb0M7SUFDekMsb0JBQW9CLENBQXVCO0lBQzNDLGlCQUFpQixDQUFzQjtJQUV4RCxZQUFZLEtBQTBCO1FBQ3BDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDO1FBRWpELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUNuRCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDNUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25ELHNDQUFzQztZQUN0QyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssb0JBQW9CLEVBQUUsQ0FBQztnQkFDM0MsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09B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QUFDLENBQUM7QUFDcEMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNsQyxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ25DLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBmb3JtYXQgfSBmcm9tICdub2RlOnV0aWwnO1xuaW1wb3J0IHR5cGUgKiBhcyBjeGFwaSBmcm9tICdAYXdzLWNkay9jbG91ZC1hc3NlbWJseS1hcGknO1xuaW1wb3J0ICogYXMgY3hzY2hlbWEgZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktc2NoZW1hJztcbmltcG9ydCB7IERpZmZlcmVuY2UgfSBmcm9tICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJztcbmltcG9ydCB0eXBlIHsgU3RhY2tSZXNvdXJjZURyaWZ0IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IFN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1cyB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdHRlZERyaWZ0IH0gZnJvbSAnLi4vLi4vYWN0aW9ucy9kcmlmdCc7XG5cbi8qKlxuICogUHJvcHMgZm9yIHRoZSBEcmlmdCBGb3JtYXR0ZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEcmlmdEZvcm1hdHRlclByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBDbG91ZEZvcm1hdGlvbiBzdGFjayBhcnRpZmFjdFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2s6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdDtcblxuICAvKipcbiAgICogVGhlIHJlc3VsdHMgb2Ygc3RhY2sgZHJpZnQgZGV0ZWN0aW9uXG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZURyaWZ0czogU3RhY2tSZXNvdXJjZURyaWZ0W107XG59XG5cbmludGVyZmFjZSBEcmlmdEZvcm1hdHRlck91dHB1dCB7XG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgcmVzb3VyY2VzIHdpdGggZHJpZnQuIElmIHVuZGVmaW5lZCwgdGhlbiBhbiBlcnJvciBvY2N1cnJlZFxuICAgKiBhbmQgcmVzb3VyY2VzIHdlcmUgbm90IHByb3Blcmx5IGNoZWNrZWQgZm9yIGRyaWZ0LlxuICAgKi9cbiAgcmVhZG9ubHkgbnVtUmVzb3VyY2VzV2l0aERyaWZ0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEhvdyBtYW55IHJlc291cmNlcyB3ZXJlIG5vdCBjaGVja2VkIGZvciBkcmlmdC4gSWYgdW5kZWZpbmVkLCB0aGVuIGFuXG4gICAqIGVycm9yIG9jY3VycmVkIGFuZCByZXNvdXJjZXMgd2VyZSBub3QgcHJvcGVybHkgY2hlY2tlZCBmb3IgZHJpZnQuXG4gICAqL1xuICByZWFkb25seSBudW1SZXNvdXJjZXNVbmNoZWNrZWQ6IG51bWJlcjtcblxuICAvKipcbiAgICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBub3QgY2hhbmdlZFxuICAgKi9cbiAgcmVhZG9ubHkgdW5jaGFuZ2VkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZXMgdGhhdCB3ZXJlIG5vdCBjaGVja2VkIGZvciBkcmlmdCBvciBoYXZlIGFuIFVOS05PV04gZHJpZnQgc3RhdHVzXG4gICAqL1xuICByZWFkb25seSB1bmNoZWNrZWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlc291cmNlcyB3aXRoIGRyaWZ0XG4gICAqL1xuICByZWFkb25seSBtb2RpZmllZD86IHN0cmluZztcblxuICAvKipcbiAgICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIGRlbGV0ZWQgKGRyaWZ0KVxuICAgKi9cbiAgcmVhZG9ubHkgZGVsZXRlZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGhlYWRlciwgY29udGFpbmluZyB0aGUgc3RhY2sgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tIZWFkZXI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZpbmFsIHJlc3VsdHMgKHN1bW1hcnkpIG9mIHRoZSBkcmlmdCByZXN1bHRzXG4gICAqL1xuICByZWFkb25seSBzdW1tYXJ5OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ2xhc3MgZm9yIGZvcm1hdHRpbmcgZHJpZnQgZGV0ZWN0aW9uIG91dHB1dFxuICovXG5leHBvcnQgY2xhc3MgRHJpZnRGb3JtYXR0ZXIge1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhY2tOYW1lOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0O1xuICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlRHJpZnRSZXN1bHRzOiBTdGFja1Jlc291cmNlRHJpZnRbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBhbGxTdGFja1Jlc291cmNlczogTWFwPHN0cmluZywgc3RyaW5nPjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogRHJpZnRGb3JtYXR0ZXJQcm9wcykge1xuICAgIHRoaXMuc3RhY2sgPSBwcm9wcy5zdGFjaztcbiAgICB0aGlzLnN0YWNrTmFtZSA9IHByb3BzLnN0YWNrLmRpc3BsYXlOYW1lID8/IHByb3BzLnN0YWNrLnN0YWNrTmFtZTtcbiAgICB0aGlzLnJlc291cmNlRHJpZnRSZXN1bHRzID0gcHJvcHMucmVzb3VyY2VEcmlmdHM7XG5cbiAgICB0aGlzLmFsbFN0YWNrUmVzb3VyY2VzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICBPYmplY3Qua2V5cyh0aGlzLnN0YWNrLnRlbXBsYXRlLlJlc291cmNlcyB8fCB7fSkuZm9yRWFjaChpZCA9PiB7XG4gICAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMuc3RhY2sudGVtcGxhdGUuUmVzb3VyY2VzW2lkXTtcbiAgICAgIC8vIGFsd2F5cyBpZ25vcmUgdGhlIG1ldGFkYXRhIHJlc291cmNlXG4gICAgICBpZiAocmVzb3VyY2UuVHlwZSA9PT0gJ0FXUzo6Q0RLOjpNZXRhZGF0YScpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5hbGxTdGFja1Jlc291cmNlcy5zZXQoaWQsIHJlc291cmNlLlR5cGUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCB0aGUgc3RhY2sgZHJpZnQgZGV0ZWN0aW9uIHJlc3VsdHNcbiAgICovXG4gIHB1YmxpYyBmb3JtYXRTdGFja0RyaWZ0KCk6IERyaWZ0Rm9ybWF0dGVyT3V0cHV0IHtcbiAgICBjb25zdCBmb3JtYXR0ZXJPdXRwdXQgPSB0aGlzLmZvcm1hdFN0YWNrRHJpZnRDaGFuZ2VzKHRoaXMuYnVpbGRMb2dpY2FsVG9QYXRoTWFwKCkpO1xuXG4gICAgLy8gd2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBhY3R1YWwgZHJpZnRzIChhbmQgaWdub3JlIHRoZSBtZXRhZGF0YSByZXNvdXJjZSlcbiAgICBjb25zdCBhY3R1YWxEcmlmdHMgPSB0aGlzLnJlc291cmNlRHJpZnRSZXN1bHRzLmZpbHRlcihkID0+XG4gICAgICAoZC5TdGFja1Jlc291cmNlRHJpZnRTdGF0dXMgPT09ICdNT0RJRklFRCcgfHwgZC5TdGFja1Jlc291cmNlRHJpZnRTdGF0dXMgPT09ICdERUxFVEVEJylcbiAgICAgICYmIGQuUmVzb3VyY2VUeXBlICE9PSAnQVdTOjpDREs6Ok1ldGFkYXRhJyk7XG5cbiAgICAvLyBtdXN0IG91dHB1dCB0aGUgc3RhY2sgbmFtZSBpZiB0aGVyZSBhcmUgZHJpZnRzXG4gICAgY29uc3Qgc3RhY2tIZWFkZXIgPSBmb3JtYXQoYFN0YWNrICR7Y2hhbGsuYm9sZCh0aGlzLnN0YWNrTmFtZSl9XFxuYCk7XG5cbiAgICBpZiAoYWN0dWFsRHJpZnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc3QgZmluYWxSZXN1bHQgPSBjaGFsay5ncmVlbignTm8gZHJpZnQgZGV0ZWN0ZWRcXG4nKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG51bVJlc291cmNlc1dpdGhEcmlmdDogMCxcbiAgICAgICAgbnVtUmVzb3VyY2VzVW5jaGVja2VkOiB0aGlzLmFsbFN0YWNrUmVzb3VyY2VzLnNpemUgLSB0aGlzLnJlc291cmNlRHJpZnRSZXN1bHRzLmxlbmd0aCxcbiAgICAgICAgc3RhY2tIZWFkZXIsXG4gICAgICAgIHVuY2hlY2tlZDogZm9ybWF0dGVyT3V0cHV0LnVuY2hlY2tlZCxcbiAgICAgICAgc3VtbWFyeTogZmluYWxSZXN1bHQsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmFsUmVzdWx0ID0gY2hhbGsueWVsbG93KGBcXG4ke2FjdHVhbERyaWZ0cy5sZW5ndGh9IHJlc291cmNlJHthY3R1YWxEcmlmdHMubGVuZ3RoID09PSAxID8gJycgOiAncyd9ICR7YWN0dWFsRHJpZnRzLmxlbmd0aCA9PT0gMSA/ICdoYXMnIDogJ2hhdmUnfSBkcmlmdGVkIGZyb20gdGhlaXIgZXhwZWN0ZWQgY29uZmlndXJhdGlvblxcbmApO1xuICAgIHJldHVybiB7XG4gICAgICBudW1SZXNvdXJjZXNXaXRoRHJpZnQ6IGFjdHVhbERyaWZ0cy5sZW5ndGgsXG4gICAgICBudW1SZXNvdXJjZXNVbmNoZWNrZWQ6IHRoaXMuYWxsU3RhY2tSZXNvdXJjZXMuc2l6ZSAtIHRoaXMucmVzb3VyY2VEcmlmdFJlc3VsdHMubGVuZ3RoLFxuICAgICAgc3RhY2tIZWFkZXIsXG4gICAgICB1bmNoYW5nZWQ6IGZvcm1hdHRlck91dHB1dC51bmNoYW5nZWQsXG4gICAgICB1bmNoZWNrZWQ6IGZvcm1hdHRlck91dHB1dC51bmNoZWNrZWQsXG4gICAgICBtb2RpZmllZDogZm9ybWF0dGVyT3V0cHV0Lm1vZGlmaWVkLFxuICAgICAgZGVsZXRlZDogZm9ybWF0dGVyT3V0cHV0LmRlbGV0ZWQsXG4gICAgICBzdW1tYXJ5OiBmaW5hbFJlc3VsdCxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZExvZ2ljYWxUb1BhdGhNYXAoKSB7XG4gICAgY29uc3QgbWFwOiB7IFtpZDogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcbiAgICBmb3IgKGNvbnN0IG1kIG9mIHRoaXMuc3RhY2suZmluZE1ldGFkYXRhQnlUeXBlKGN4c2NoZW1hLkFydGlmYWN0TWV0YWRhdGFFbnRyeVR5cGUuTE9HSUNBTF9JRCkpIHtcbiAgICAgIG1hcFttZC5kYXRhIGFzIHN0cmluZ10gPSBtZC5wYXRoO1xuICAgIH1cbiAgICByZXR1cm4gbWFwO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgc3RhY2sgZHJpZnQgaW5mb3JtYXRpb25cbiAgICpcbiAgICogQHBhcmFtIGxvZ2ljYWxUb1BhdGhNYXAgLSBBIG1hcCBmcm9tIGxvZ2ljYWwgSUQgdG8gY29uc3RydWN0IHBhdGhcbiAgICovXG4gIHByaXZhdGUgZm9ybWF0U3RhY2tEcmlmdENoYW5nZXMoXG4gICAgbG9naWNhbFRvUGF0aE1hcDogeyBbbG9naWNhbElkOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9KTogRm9ybWF0dGVkRHJpZnQge1xuICAgIGlmICh0aGlzLnJlc291cmNlRHJpZnRSZXN1bHRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIGxldCB1bmNoYW5nZWQ7XG4gICAgbGV0IHVuY2hlY2tlZDtcbiAgICBsZXQgbW9kaWZpZWQ7XG4gICAgbGV0IGRlbGV0ZWQ7XG5cbiAgICBjb25zdCBkcmlmdHMgPSB0aGlzLnJlc291cmNlRHJpZnRSZXN1bHRzO1xuXG4gICAgLy8gUHJvY2VzcyB1bmNoYW5nZWQgcmVzb3VyY2VzXG4gICAgY29uc3QgdW5jaGFuZ2VkUmVzb3VyY2VzID0gZHJpZnRzLmZpbHRlcihkID0+IGQuU3RhY2tSZXNvdXJjZURyaWZ0U3RhdHVzID09PSBTdGFja1Jlc291cmNlRHJpZnRTdGF0dXMuSU5fU1lOQyk7XG4gICAgaWYgKHVuY2hhbmdlZFJlc291cmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICB1bmNoYW5nZWQgPSB0aGlzLnByaW50U2VjdGlvbkhlYWRlcignUmVzb3VyY2VzIEluIFN5bmMnKTtcblxuICAgICAgZm9yIChjb25zdCBkcmlmdCBvZiB1bmNoYW5nZWRSZXNvdXJjZXMpIHtcbiAgICAgICAgaWYgKCFkcmlmdC5Mb2dpY2FsUmVzb3VyY2VJZCB8fCAhZHJpZnQuUmVzb3VyY2VUeXBlKSBjb250aW51ZTtcbiAgICAgICAgdW5jaGFuZ2VkICs9IGAke0NPTlRFWFR9ICR7Y2hhbGsuY3lhbihkcmlmdC5SZXNvdXJjZVR5cGUpfSAke3RoaXMuZm9ybWF0TG9naWNhbElkKGxvZ2ljYWxUb1BhdGhNYXAsIGRyaWZ0LkxvZ2ljYWxSZXNvdXJjZUlkKX1cXG5gO1xuICAgICAgfVxuICAgICAgdW5jaGFuZ2VkICs9IHRoaXMucHJpbnRTZWN0aW9uRm9vdGVyKCk7XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyBhbGwgdW5jaGVja2VkIGFuZCB1bmtub3duIHJlc291cmNlc1xuICAgIGNvbnN0IHVuY2hlY2tlZFJlc291cmNlcyA9IEFycmF5LmZyb20odGhpcy5hbGxTdGFja1Jlc291cmNlcy5rZXlzKCkpLmZpbHRlcigobG9naWNhbElkKSA9PiB7XG4gICAgICBjb25zdCBkcmlmdCA9IGRyaWZ0cy5maW5kKChkKSA9PiBkLkxvZ2ljYWxSZXNvdXJjZUlkID09PSBsb2dpY2FsSWQpO1xuICAgICAgcmV0dXJuICFkcmlmdCB8fCBkcmlmdC5TdGFja1Jlc291cmNlRHJpZnRTdGF0dXMgPT09IFN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1cy5VTktOT1dOO1xuICAgIH0pO1xuICAgIGlmICh1bmNoZWNrZWRSZXNvdXJjZXMubGVuZ3RoID4gMCkge1xuICAgICAgdW5jaGVja2VkID0gdGhpcy5wcmludFNlY3Rpb25IZWFkZXIoJ1VuY2hlY2tlZCBSZXNvdXJjZXMnKTtcbiAgICAgIGZvciAoY29uc3QgbG9naWNhbElkIG9mIHVuY2hlY2tlZFJlc291cmNlcykge1xuICAgICAgICBjb25zdCByZXNvdXJjZVR5cGUgPSB0aGlzLmFsbFN0YWNrUmVzb3VyY2VzLmdldChsb2dpY2FsSWQpO1xuICAgICAgICB1bmNoZWNrZWQgKz0gYCR7Q09OVEVYVH0gJHtjaGFsay5jeWFuKHJlc291cmNlVHlwZSl9ICR7dGhpcy5mb3JtYXRMb2dpY2FsSWQobG9naWNhbFRvUGF0aE1hcCwgbG9naWNhbElkKX1cXG5gO1xuICAgICAgfVxuICAgICAgdW5jaGVja2VkICs9IHRoaXMucHJpbnRTZWN0aW9uRm9vdGVyKCk7XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyBtb2RpZmllZCByZXNvdXJjZXMgKGV4Y2x1ZGUgQVdTOjpDREs6Ok1ldGFkYXRhKVxuICAgIGNvbnN0IG1vZGlmaWVkUmVzb3VyY2VzID0gZHJpZnRzLmZpbHRlcihkID0+XG4gICAgICBkLlN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1cyA9PT0gU3RhY2tSZXNvdXJjZURyaWZ0U3RhdHVzLk1PRElGSUVEXG4gICAgICAmJiBkLlJlc291cmNlVHlwZSAhPT0gJ0FXUzo6Q0RLOjpNZXRhZGF0YScpO1xuICAgIGlmIChtb2RpZmllZFJlc291cmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICBtb2RpZmllZCA9IHRoaXMucHJpbnRTZWN0aW9uSGVhZGVyKCdNb2RpZmllZCBSZXNvdXJjZXMnKTtcblxuICAgICAgZm9yIChjb25zdCBkcmlmdCBvZiBtb2RpZmllZFJlc291cmNlcykge1xuICAgICAgICBpZiAoIWRyaWZ0LkxvZ2ljYWxSZXNvdXJjZUlkIHx8ICFkcmlmdC5SZXNvdXJjZVR5cGUpIGNvbnRpbnVlO1xuICAgICAgICBtb2RpZmllZCArPSBgJHtVUERBVEV9ICR7Y2hhbGsuY3lhbihkcmlmdC5SZXNvdXJjZVR5cGUpfSAke3RoaXMuZm9ybWF0TG9naWNhbElkKGxvZ2ljYWxUb1BhdGhNYXAsIGRyaWZ0LkxvZ2ljYWxSZXNvdXJjZUlkKX1cXG5gO1xuICAgICAgICBpZiAoZHJpZnQuUHJvcGVydHlEaWZmZXJlbmNlcykge1xuICAgICAgICAgIGNvbnN0IHByb3BEaWZmcyA9IGRyaWZ0LlByb3BlcnR5RGlmZmVyZW5jZXM7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wRGlmZnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBwcm9wRGlmZnNbaV07XG4gICAgICAgICAgICBpZiAoIWRpZmYuUHJvcGVydHlQYXRoKSBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBuZXcgRGlmZmVyZW5jZShkaWZmLkV4cGVjdGVkVmFsdWUsIGRpZmYuQWN0dWFsVmFsdWUpO1xuICAgICAgICAgICAgbW9kaWZpZWQgKz0gdGhpcy5mb3JtYXRUcmVlRGlmZihkaWZmLlByb3BlcnR5UGF0aCwgZGlmZmVyZW5jZSwgaSA9PT0gcHJvcERpZmZzLmxlbmd0aCAtIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbW9kaWZpZWQgKz0gdGhpcy5wcmludFNlY3Rpb25Gb290ZXIoKTtcbiAgICB9XG5cbiAgICAvLyBQcm9jZXNzIGRlbGV0ZWQgcmVzb3VyY2VzIChleGNsdWRlIEFXUzo6Q0RLOjpNZXRhZGF0YSlcbiAgICBjb25zdCBkZWxldGVkUmVzb3VyY2VzID0gZHJpZnRzLmZpbHRlcihkID0+XG4gICAgICBkLlN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1cyA9PT0gU3RhY2tSZXNvdXJjZURyaWZ0U3RhdHVzLkRFTEVURURcbiAgICAgICYmIGQuUmVzb3VyY2VUeXBlICE9PSAnQVdTOjpDREs6Ok1ldGFkYXRhJyk7XG4gICAgaWYgKGRlbGV0ZWRSZXNvdXJjZXMubGVuZ3RoID4gMCkge1xuICAgICAgZGVsZXRlZCA9IHRoaXMucHJpbnRTZWN0aW9uSGVhZGVyKCdEZWxldGVkIFJlc291cmNlcycpO1xuICAgICAgZm9yIChjb25zdCBkcmlmdCBvZiBkZWxldGVkUmVzb3VyY2VzKSB7XG4gICAgICAgIGlmICghZHJpZnQuTG9naWNhbFJlc291cmNlSWQgfHwgIWRyaWZ0LlJlc291cmNlVHlwZSkgY29udGludWU7XG4gICAgICAgIGRlbGV0ZWQgKz0gYCR7UkVNT1ZBTH0gJHtjaGFsay5jeWFuKGRyaWZ0LlJlc291cmNlVHlwZSl9ICR7dGhpcy5mb3JtYXRMb2dpY2FsSWQobG9naWNhbFRvUGF0aE1hcCwgZHJpZnQuTG9naWNhbFJlc291cmNlSWQpfVxcbmA7XG4gICAgICB9XG4gICAgICBkZWxldGVkICs9IHRoaXMucHJpbnRTZWN0aW9uRm9vdGVyKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdW5jaGFuZ2VkLCB1bmNoZWNrZWQsIG1vZGlmaWVkLCBkZWxldGVkIH07XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdExvZ2ljYWxJZChsb2dpY2FsVG9QYXRoTWFwOiB7IFtsb2dpY2FsSWQ6IHN0cmluZ106IHN0cmluZyB9LCBsb2dpY2FsSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcGF0aCA9IGxvZ2ljYWxUb1BhdGhNYXBbbG9naWNhbElkXTtcbiAgICBpZiAoIXBhdGgpIHJldHVybiBsb2dpY2FsSWQ7XG5cbiAgICBsZXQgbm9ybWFsaXplZFBhdGggPSBwYXRoO1xuICAgIGlmIChub3JtYWxpemVkUGF0aC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgIG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplZFBhdGguc2xpY2UoMSk7XG4gICAgfVxuXG4gICAgbGV0IHBhcnRzID0gbm9ybWFsaXplZFBhdGguc3BsaXQoJy8nKTtcbiAgICBpZiAocGFydHMubGVuZ3RoID4gMSkge1xuICAgICAgcGFydHMgPSBwYXJ0cy5zbGljZSgxKTtcblxuICAgICAgLy8gcmVtb3ZlIHRoZSBsYXN0IGNvbXBvbmVudCBpZiBpdCdzIFwiUmVzb3VyY2VcIiBvciBcIkRlZmF1bHRcIiAoaWYgd2UgaGF2ZSBtb3JlIHRoYW4gYSBzaW5nbGUgY29tcG9uZW50KVxuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgY29uc3QgbGFzdCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAobGFzdCA9PT0gJ1Jlc291cmNlJyB8fCBsYXN0ID09PSAnRGVmYXVsdCcpIHtcbiAgICAgICAgICBwYXJ0cyA9IHBhcnRzLnNsaWNlKDAsIHBhcnRzLmxlbmd0aCAtIDEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5vcm1hbGl6ZWRQYXRoID0gcGFydHMuam9pbignLycpO1xuICAgIH1cblxuICAgIHJldHVybiBgJHtub3JtYWxpemVkUGF0aH0gJHtjaGFsay5ncmF5KGxvZ2ljYWxJZCl9YDtcbiAgfVxuXG4gIHByaXZhdGUgcHJpbnRTZWN0aW9uSGVhZGVyKHRpdGxlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtjaGFsay51bmRlcmxpbmUoY2hhbGsuYm9sZCh0aXRsZSkpfVxcbmA7XG4gIH1cblxuICBwcml2YXRlIHByaW50U2VjdGlvbkZvb3RlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiAnXFxuJztcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0VHJlZURpZmYocHJvcGVydHlQYXRoOiBzdHJpbmcsIGRpZmZlcmVuY2U6IERpZmZlcmVuY2U8c3RyaW5nPiwgaXNMYXN0OiBib29sZWFuKTogc3RyaW5nIHtcbiAgICBsZXQgcmVzdWx0ID0gZm9ybWF0KCcgJXPilIAgJXMgJXNcXG4nLCBpc0xhc3QgPyAn4pSUJyA6ICfilJwnLFxuICAgICAgZGlmZmVyZW5jZS5pc0FkZGl0aW9uID8gQURESVRJT04gOlxuICAgICAgICBkaWZmZXJlbmNlLmlzUmVtb3ZhbCA/IFJFTU9WQUwgOlxuICAgICAgICAgIFVQREFURSxcbiAgICAgIHByb3BlcnR5UGF0aCxcbiAgICApO1xuICAgIGlmIChkaWZmZXJlbmNlLmlzVXBkYXRlKSB7XG4gICAgICByZXN1bHQgKz0gZm9ybWF0KCcgICAgIOKUnOKUgCAlcyAlc1xcbicsIFJFTU9WQUwsIGNoYWxrLnJlZChkaWZmZXJlbmNlLm9sZFZhbHVlKSk7XG4gICAgICByZXN1bHQgKz0gZm9ybWF0KCcgICAgIOKUlOKUgCAlcyAlc1xcbicsIEFERElUSU9OLCBjaGFsay5ncmVlbihkaWZmZXJlbmNlLm5ld1ZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cblxuY29uc3QgQURESVRJT04gPSBjaGFsay5ncmVlbignWytdJyk7XG5jb25zdCBDT05URVhUID0gY2hhbGsuZ3JleSgnWyBdJyk7XG5jb25zdCBVUERBVEUgPSBjaGFsay55ZWxsb3coJ1t+XScpO1xuY29uc3QgUkVNT1ZBTCA9IGNoYWxrLnJlZCgnWy1dJyk7XG4iXX0=
|
|
181
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJpZnQtZm9ybWF0dGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZHJpZnQtZm9ybWF0dGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUFtQztBQUVuQyxzRUFBMEQ7QUFFMUQsMEVBQTBFO0FBQzFFLCtCQUErQjtBQUUvQixxRUFBeUU7QUE2RHpFOztHQUVHO0FBQ0gsTUFBYSxjQUFjO0lBQ1QsU0FBUyxDQUFTO0lBRWpCLEtBQUssQ0FBb0M7SUFDekMsb0JBQW9CLENBQXVCO0lBQzNDLGlCQUFpQixDQUFzQjtJQUV4RCxZQUFZLEtBQTBCO1FBQ3BDLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsV0FBVyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDO1FBQ2xFLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxLQUFLLENBQUMsY0FBYyxDQUFDO1FBRWpELElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUNuRCxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7WUFDNUQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQ25ELHNDQUFzQztZQUN0QyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEtBQUssb0JBQW9CLEVBQUUsQ0FBQztnQkFDM0MsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEQsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQ7O09BRUc7SUFDSSxnQkFBZ0I7UUFDckIsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLHVCQUF1QixDQUFDLElBQUEsc0NBQXFCLEVBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRS9GLDZFQUE2RTtRQUM3RSxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ3hELENBQUMsQ0FBQyxDQUFDLHdCQUF3QixLQUFLLFVBQVUsSUFBSSxDQUFDLENBQUMsd0JBQXdCLEtBQUssU0FBUyxDQUFDO2VBQ3BGLENBQUMsQ0FBQyxZQUFZLEtBQUssb0JBQW9CLENBQUMsQ0FBQztRQUU5QyxpREFBaUQ7UUFDakQsTUFBTSxXQUFXLEdBQUcsSUFBQSxrQkFBTSxFQUFDLFNBQVMsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXBFLElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUM5QixNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUM7WUFDdkQsT0FBTztnQkFDTCxxQkFBcUIsRUFBRSxDQUFDO2dCQUN4QixxQkFBcUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNO2dCQUNyRixXQUFXO2dCQUNYLFNBQVMsRUFBRSxlQUFlLENBQUMsU0FBUztnQkFDcEMsT0FBTyxFQUFFLFdBQVc7YUFDckIsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLEtBQUssWUFBWSxDQUFDLE1BQU0sWUFBWSxZQUFZLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSw4Q0FBOEMsQ0FBQyxDQUFDO1FBQ3ZNLE9BQU87WUFDTCxxQkFBcUIsRUFBRSxZQUFZLENBQUMsTUFBTTtZQUMxQyxxQkFBcUIsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNO1lBQ3JGLFdBQVc7WUFDWCxTQUFTLEVBQUUsZUFBZSxDQUFDLFNBQVM7WUFDcEMsU0FBUyxFQUFFLGVBQWUsQ0FBQyxTQUFTO1lBQ3BDLFFBQVEsRUFBRSxlQUFlLENBQUMsUUFBUTtZQUNsQyxPQUFPLEVBQUUsZUFBZSxDQUFDLE9BQU87WUFDaEMsT0FBTyxFQUFFLFdBQVc7U0FDckIsQ0FBQztJQUNKLENBQUM7SUFFRDs7OztPQUlHO0lBQ0ssdUJBQXVCLENBQzdCLG1CQUFvRCxFQUFFO1FBQ3RELElBQUksSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUMzQyxPQUFPLEVBQUUsQ0FBQztRQUNaLENBQUM7UUFFRCxJQUFJLFNBQVMsQ0FBQztRQUNkLElBQUksU0FBUyxDQUFDO1FBQ2QsSUFBSSxRQUFRLENBQUM7UUFDYixJQUFJLE9BQU8sQ0FBQztRQUVaLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztRQUV6Qyw4QkFBOEI7UUFDOUIsTUFBTSxrQkFBa0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLHdCQUF3QixLQUFLLGdEQUF3QixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQy9HLElBQUksa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xDLFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsbUJBQW1CLENBQUMsQ0FBQztZQUV6RCxLQUFLLE1BQU0sS0FBSyxJQUFJLGtCQUFrQixFQUFFLENBQUM7Z0JBQ3ZDLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWTtvQkFBRSxTQUFTO2dCQUM5RCxTQUFTLElBQUksR0FBRyxPQUFPLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDO1lBQ25JLENBQUM7WUFDRCxTQUFTLElBQUksSUFBSSxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDekMsQ0FBQztRQUVELDhDQUE4QztRQUM5QyxNQUFNLGtCQUFrQixHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsU0FBUyxFQUFFLEVBQUU7WUFDeEYsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixLQUFLLFNBQVMsQ0FBQyxDQUFDO1lBQ3BFLE9BQU8sQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLHdCQUF3QixLQUFLLGdEQUF3QixDQUFDLE9BQU8sQ0FBQztRQUN2RixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksa0JBQWtCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2xDLFNBQVMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMscUJBQXFCLENBQUMsQ0FBQztZQUMzRCxLQUFLLE1BQU0sU0FBUyxJQUFJLGtCQUFrQixFQUFFLENBQUM7Z0JBQzNDLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7Z0JBQzNELFNBQVMsSUFBSSxHQUFHLE9BQU8sSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQztZQUMvRyxDQUFDO1lBQ0QsU0FBUyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3pDLENBQUM7UUFFRCwwREFBMEQ7UUFDMUQsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQzFDLENBQUMsQ0FBQyx3QkFBd0IsS0FBSyxnREFBd0IsQ0FBQyxRQUFRO2VBQzdELENBQUMsQ0FBQyxZQUFZLEtBQUssb0JBQW9CLENBQUMsQ0FBQztRQUM5QyxJQUFJLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNqQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLENBQUM7WUFFekQsS0FBSyxNQUFNLEtBQUssSUFBSSxpQkFBaUIsRUFBRSxDQUFDO2dCQUN0QyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVk7b0JBQUUsU0FBUztnQkFDOUQsUUFBUSxJQUFJLEdBQUcsTUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQztnQkFDL0gsSUFBSSxLQUFLLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztvQkFDOUIsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLG1CQUFtQixDQUFDO29CQUM1QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO3dCQUMxQyxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWTs0QkFBRSxTQUFTO3dCQUNqQyxNQUFNLFVBQVUsR0FBRyxJQUFJLGdDQUFVLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7d0JBQ3hFLFFBQVEsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsVUFBVSxFQUFFLENBQUMsS0FBSyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO29CQUM3RixDQUFDO2dCQUNILENBQUM7WUFDSCxDQUFDO1lBQ0QsUUFBUSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3hDLENBQUM7UUFFRCx5REFBeUQ7UUFDekQsTUFBTSxnQkFBZ0IsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ3pDLENBQUMsQ0FBQyx3QkFBd0IsS0FBSyxnREFBd0IsQ0FBQyxPQUFPO2VBQzVELENBQUMsQ0FBQyxZQUFZLEtBQUssb0JBQW9CLENBQUMsQ0FBQztRQUM5QyxJQUFJLGdCQUFnQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNoQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG1CQUFtQixDQUFDLENBQUM7WUFDdkQsS0FBSyxNQUFNLEtBQUssSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO2dCQUNyQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVk7b0JBQUUsU0FBUztnQkFDOUQsT0FBTyxJQUFJLEdBQUcsT0FBTyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQztZQUNqSSxDQUFDO1lBQ0QsT0FBTyxJQUFJLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQ3ZDLENBQUM7UUFFRCxPQUFPLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVPLGVBQWUsQ0FBQyxnQkFBaUQsRUFBRSxTQUFpQjtRQUMxRixNQUFNLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsSUFBSTtZQUFFLE9BQU8sU0FBUyxDQUFDO1FBRTVCLElBQUksY0FBYyxHQUFHLElBQUksQ0FBQztRQUMxQixJQUFJLGNBQWMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNuQyxjQUFjLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMzQyxDQUFDO1FBRUQsSUFBSSxLQUFLLEdBQUcsY0FBYyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUN0QyxJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDckIsS0FBSyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFdkIsc0dBQXNHO1lBQ3RHLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztnQkFDckIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7Z0JBQ3JDLElBQUksSUFBSSxLQUFLLFVBQVUsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7b0JBQzlDLEtBQUssR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUMzQyxDQUFDO1lBQ0gsQ0FBQztZQUVELGNBQWMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ25DLENBQUM7UUFFRCxPQUFPLEdBQUcsY0FBYyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztJQUN0RCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsS0FBYTtRQUN0QyxPQUFPLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQztJQUNuRCxDQUFDO0lBRU8sa0JBQWtCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVPLGNBQWMsQ0FBQyxZQUFvQixFQUFFLFVBQThCLEVBQUUsTUFBZTtRQUMxRixJQUFJLE1BQU0sR0FBRyxJQUFBLGtCQUFNLEVBQUMsY0FBYyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQ3BELFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2hDLFVBQVUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2dCQUM5QixNQUFNLEVBQ1YsWUFBWSxDQUNiLENBQUM7UUFDRixJQUFJLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksSUFBQSxrQkFBTSxFQUFDLGlCQUFpQixFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1lBQzdFLE1BQU0sSUFBSSxJQUFBLGtCQUFNLEVBQUMsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDbEYsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Q0FDRjtBQWhNRCx3Q0FnTUM7QUFFRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQ3BDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDbEMsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZm9ybWF0IH0gZnJvbSAnbm9kZTp1dGlsJztcbmltcG9ydCB0eXBlICogYXMgY3hhcGkgZnJvbSAnQGF3cy1jZGsvY2xvdWQtYXNzZW1ibHktYXBpJztcbmltcG9ydCB7IERpZmZlcmVuY2UgfSBmcm9tICdAYXdzLWNkay9jbG91ZGZvcm1hdGlvbi1kaWZmJztcbmltcG9ydCB0eXBlIHsgU3RhY2tSZXNvdXJjZURyaWZ0IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IFN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1cyB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5pbXBvcnQgKiBhcyBjaGFsayBmcm9tICdjaGFsayc7XG5pbXBvcnQgdHlwZSB7IEZvcm1hdHRlZERyaWZ0IH0gZnJvbSAnLi4vLi4vYWN0aW9ucy9kcmlmdCc7XG5pbXBvcnQgeyBidWlsZExvZ2ljYWxUb1BhdGhNYXAgfSBmcm9tICcuLi9jbG91ZGZvcm1hdGlvbi9sb2dpY2FsLWlkLW1hcCc7XG5cbi8qKlxuICogUHJvcHMgZm9yIHRoZSBEcmlmdCBGb3JtYXR0ZXJcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEcmlmdEZvcm1hdHRlclByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBDbG91ZEZvcm1hdGlvbiBzdGFjayBhcnRpZmFjdFxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2s6IGN4YXBpLkNsb3VkRm9ybWF0aW9uU3RhY2tBcnRpZmFjdDtcblxuICAvKipcbiAgICogVGhlIHJlc3VsdHMgb2Ygc3RhY2sgZHJpZnQgZGV0ZWN0aW9uXG4gICAqL1xuICByZWFkb25seSByZXNvdXJjZURyaWZ0czogU3RhY2tSZXNvdXJjZURyaWZ0W107XG59XG5cbmludGVyZmFjZSBEcmlmdEZvcm1hdHRlck91dHB1dCB7XG4gIC8qKlxuICAgKiBOdW1iZXIgb2YgcmVzb3VyY2VzIHdpdGggZHJpZnQuIElmIHVuZGVmaW5lZCwgdGhlbiBhbiBlcnJvciBvY2N1cnJlZFxuICAgKiBhbmQgcmVzb3VyY2VzIHdlcmUgbm90IHByb3Blcmx5IGNoZWNrZWQgZm9yIGRyaWZ0LlxuICAgKi9cbiAgcmVhZG9ubHkgbnVtUmVzb3VyY2VzV2l0aERyaWZ0OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEhvdyBtYW55IHJlc291cmNlcyB3ZXJlIG5vdCBjaGVja2VkIGZvciBkcmlmdC4gSWYgdW5kZWZpbmVkLCB0aGVuIGFuXG4gICAqIGVycm9yIG9jY3VycmVkIGFuZCByZXNvdXJjZXMgd2VyZSBub3QgcHJvcGVybHkgY2hlY2tlZCBmb3IgZHJpZnQuXG4gICAqL1xuICByZWFkb25seSBudW1SZXNvdXJjZXNVbmNoZWNrZWQ6IG51bWJlcjtcblxuICAvKipcbiAgICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBub3QgY2hhbmdlZFxuICAgKi9cbiAgcmVhZG9ubHkgdW5jaGFuZ2VkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXNvdXJjZXMgdGhhdCB3ZXJlIG5vdCBjaGVja2VkIGZvciBkcmlmdCBvciBoYXZlIGFuIFVOS05PV04gZHJpZnQgc3RhdHVzXG4gICAqL1xuICByZWFkb25seSB1bmNoZWNrZWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFJlc291cmNlcyB3aXRoIGRyaWZ0XG4gICAqL1xuICByZWFkb25seSBtb2RpZmllZD86IHN0cmluZztcblxuICAvKipcbiAgICogUmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIGRlbGV0ZWQgKGRyaWZ0KVxuICAgKi9cbiAgcmVhZG9ubHkgZGVsZXRlZD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGhlYWRlciwgY29udGFpbmluZyB0aGUgc3RhY2sgbmFtZVxuICAgKi9cbiAgcmVhZG9ubHkgc3RhY2tIZWFkZXI6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZpbmFsIHJlc3VsdHMgKHN1bW1hcnkpIG9mIHRoZSBkcmlmdCByZXN1bHRzXG4gICAqL1xuICByZWFkb25seSBzdW1tYXJ5OiBzdHJpbmc7XG59XG5cbi8qKlxuICogQ2xhc3MgZm9yIGZvcm1hdHRpbmcgZHJpZnQgZGV0ZWN0aW9uIG91dHB1dFxuICovXG5leHBvcnQgY2xhc3MgRHJpZnRGb3JtYXR0ZXIge1xuICBwdWJsaWMgcmVhZG9ubHkgc3RhY2tOYW1lOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBzdGFjazogY3hhcGkuQ2xvdWRGb3JtYXRpb25TdGFja0FydGlmYWN0O1xuICBwcml2YXRlIHJlYWRvbmx5IHJlc291cmNlRHJpZnRSZXN1bHRzOiBTdGFja1Jlc291cmNlRHJpZnRbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBhbGxTdGFja1Jlc291cmNlczogTWFwPHN0cmluZywgc3RyaW5nPjtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogRHJpZnRGb3JtYXR0ZXJQcm9wcykge1xuICAgIHRoaXMuc3RhY2sgPSBwcm9wcy5zdGFjaztcbiAgICB0aGlzLnN0YWNrTmFtZSA9IHByb3BzLnN0YWNrLmRpc3BsYXlOYW1lID8/IHByb3BzLnN0YWNrLnN0YWNrTmFtZTtcbiAgICB0aGlzLnJlc291cmNlRHJpZnRSZXN1bHRzID0gcHJvcHMucmVzb3VyY2VEcmlmdHM7XG5cbiAgICB0aGlzLmFsbFN0YWNrUmVzb3VyY2VzID0gbmV3IE1hcDxzdHJpbmcsIHN0cmluZz4oKTtcbiAgICBPYmplY3Qua2V5cyh0aGlzLnN0YWNrLnRlbXBsYXRlLlJlc291cmNlcyB8fCB7fSkuZm9yRWFjaChpZCA9PiB7XG4gICAgICBjb25zdCByZXNvdXJjZSA9IHRoaXMuc3RhY2sudGVtcGxhdGUuUmVzb3VyY2VzW2lkXTtcbiAgICAgIC8vIGFsd2F5cyBpZ25vcmUgdGhlIG1ldGFkYXRhIHJlc291cmNlXG4gICAgICBpZiAocmVzb3VyY2UuVHlwZSA9PT0gJ0FXUzo6Q0RLOjpNZXRhZGF0YScpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5hbGxTdGFja1Jlc291cmNlcy5zZXQoaWQsIHJlc291cmNlLlR5cGUpO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcm1hdCB0aGUgc3RhY2sgZHJpZnQgZGV0ZWN0aW9uIHJlc3VsdHNcbiAgICovXG4gIHB1YmxpYyBmb3JtYXRTdGFja0RyaWZ0KCk6IERyaWZ0Rm9ybWF0dGVyT3V0cHV0IHtcbiAgICBjb25zdCBmb3JtYXR0ZXJPdXRwdXQgPSB0aGlzLmZvcm1hdFN0YWNrRHJpZnRDaGFuZ2VzKGJ1aWxkTG9naWNhbFRvUGF0aE1hcCh0aGlzLnN0YWNrKS50b1BhdGgpO1xuXG4gICAgLy8gd2UgYXJlIG9ubHkgaW50ZXJlc3RlZCBpbiBhY3R1YWwgZHJpZnRzIChhbmQgaWdub3JlIHRoZSBtZXRhZGF0YSByZXNvdXJjZSlcbiAgICBjb25zdCBhY3R1YWxEcmlmdHMgPSB0aGlzLnJlc291cmNlRHJpZnRSZXN1bHRzLmZpbHRlcihkID0+XG4gICAgICAoZC5TdGFja1Jlc291cmNlRHJpZnRTdGF0dXMgPT09ICdNT0RJRklFRCcgfHwgZC5TdGFja1Jlc291cmNlRHJpZnRTdGF0dXMgPT09ICdERUxFVEVEJylcbiAgICAgICYmIGQuUmVzb3VyY2VUeXBlICE9PSAnQVdTOjpDREs6Ok1ldGFkYXRhJyk7XG5cbiAgICAvLyBtdXN0IG91dHB1dCB0aGUgc3RhY2sgbmFtZSBpZiB0aGVyZSBhcmUgZHJpZnRzXG4gICAgY29uc3Qgc3RhY2tIZWFkZXIgPSBmb3JtYXQoYFN0YWNrICR7Y2hhbGsuYm9sZCh0aGlzLnN0YWNrTmFtZSl9XFxuYCk7XG5cbiAgICBpZiAoYWN0dWFsRHJpZnRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgY29uc3QgZmluYWxSZXN1bHQgPSBjaGFsay5ncmVlbignTm8gZHJpZnQgZGV0ZWN0ZWRcXG4nKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIG51bVJlc291cmNlc1dpdGhEcmlmdDogMCxcbiAgICAgICAgbnVtUmVzb3VyY2VzVW5jaGVja2VkOiB0aGlzLmFsbFN0YWNrUmVzb3VyY2VzLnNpemUgLSB0aGlzLnJlc291cmNlRHJpZnRSZXN1bHRzLmxlbmd0aCxcbiAgICAgICAgc3RhY2tIZWFkZXIsXG4gICAgICAgIHVuY2hlY2tlZDogZm9ybWF0dGVyT3V0cHV0LnVuY2hlY2tlZCxcbiAgICAgICAgc3VtbWFyeTogZmluYWxSZXN1bHQsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGNvbnN0IGZpbmFsUmVzdWx0ID0gY2hhbGsueWVsbG93KGBcXG4ke2FjdHVhbERyaWZ0cy5sZW5ndGh9IHJlc291cmNlJHthY3R1YWxEcmlmdHMubGVuZ3RoID09PSAxID8gJycgOiAncyd9ICR7YWN0dWFsRHJpZnRzLmxlbmd0aCA9PT0gMSA/ICdoYXMnIDogJ2hhdmUnfSBkcmlmdGVkIGZyb20gdGhlaXIgZXhwZWN0ZWQgY29uZmlndXJhdGlvblxcbmApO1xuICAgIHJldHVybiB7XG4gICAgICBudW1SZXNvdXJjZXNXaXRoRHJpZnQ6IGFjdHVhbERyaWZ0cy5sZW5ndGgsXG4gICAgICBudW1SZXNvdXJjZXNVbmNoZWNrZWQ6IHRoaXMuYWxsU3RhY2tSZXNvdXJjZXMuc2l6ZSAtIHRoaXMucmVzb3VyY2VEcmlmdFJlc3VsdHMubGVuZ3RoLFxuICAgICAgc3RhY2tIZWFkZXIsXG4gICAgICB1bmNoYW5nZWQ6IGZvcm1hdHRlck91dHB1dC51bmNoYW5nZWQsXG4gICAgICB1bmNoZWNrZWQ6IGZvcm1hdHRlck91dHB1dC51bmNoZWNrZWQsXG4gICAgICBtb2RpZmllZDogZm9ybWF0dGVyT3V0cHV0Lm1vZGlmaWVkLFxuICAgICAgZGVsZXRlZDogZm9ybWF0dGVyT3V0cHV0LmRlbGV0ZWQsXG4gICAgICBzdW1tYXJ5OiBmaW5hbFJlc3VsdCxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgc3RhY2sgZHJpZnQgaW5mb3JtYXRpb25cbiAgICpcbiAgICogQHBhcmFtIGxvZ2ljYWxUb1BhdGhNYXAgLSBBIG1hcCBmcm9tIGxvZ2ljYWwgSUQgdG8gY29uc3RydWN0IHBhdGhcbiAgICovXG4gIHByaXZhdGUgZm9ybWF0U3RhY2tEcmlmdENoYW5nZXMoXG4gICAgbG9naWNhbFRvUGF0aE1hcDogeyBbbG9naWNhbElkOiBzdHJpbmddOiBzdHJpbmcgfSA9IHt9KTogRm9ybWF0dGVkRHJpZnQge1xuICAgIGlmICh0aGlzLnJlc291cmNlRHJpZnRSZXN1bHRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHt9O1xuICAgIH1cblxuICAgIGxldCB1bmNoYW5nZWQ7XG4gICAgbGV0IHVuY2hlY2tlZDtcbiAgICBsZXQgbW9kaWZpZWQ7XG4gICAgbGV0IGRlbGV0ZWQ7XG5cbiAgICBjb25zdCBkcmlmdHMgPSB0aGlzLnJlc291cmNlRHJpZnRSZXN1bHRzO1xuXG4gICAgLy8gUHJvY2VzcyB1bmNoYW5nZWQgcmVzb3VyY2VzXG4gICAgY29uc3QgdW5jaGFuZ2VkUmVzb3VyY2VzID0gZHJpZnRzLmZpbHRlcihkID0+IGQuU3RhY2tSZXNvdXJjZURyaWZ0U3RhdHVzID09PSBTdGFja1Jlc291cmNlRHJpZnRTdGF0dXMuSU5fU1lOQyk7XG4gICAgaWYgKHVuY2hhbmdlZFJlc291cmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICB1bmNoYW5nZWQgPSB0aGlzLnByaW50U2VjdGlvbkhlYWRlcignUmVzb3VyY2VzIEluIFN5bmMnKTtcblxuICAgICAgZm9yIChjb25zdCBkcmlmdCBvZiB1bmNoYW5nZWRSZXNvdXJjZXMpIHtcbiAgICAgICAgaWYgKCFkcmlmdC5Mb2dpY2FsUmVzb3VyY2VJZCB8fCAhZHJpZnQuUmVzb3VyY2VUeXBlKSBjb250aW51ZTtcbiAgICAgICAgdW5jaGFuZ2VkICs9IGAke0NPTlRFWFR9ICR7Y2hhbGsuY3lhbihkcmlmdC5SZXNvdXJjZVR5cGUpfSAke3RoaXMuZm9ybWF0TG9naWNhbElkKGxvZ2ljYWxUb1BhdGhNYXAsIGRyaWZ0LkxvZ2ljYWxSZXNvdXJjZUlkKX1cXG5gO1xuICAgICAgfVxuICAgICAgdW5jaGFuZ2VkICs9IHRoaXMucHJpbnRTZWN0aW9uRm9vdGVyKCk7XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyBhbGwgdW5jaGVja2VkIGFuZCB1bmtub3duIHJlc291cmNlc1xuICAgIGNvbnN0IHVuY2hlY2tlZFJlc291cmNlcyA9IEFycmF5LmZyb20odGhpcy5hbGxTdGFja1Jlc291cmNlcy5rZXlzKCkpLmZpbHRlcigobG9naWNhbElkKSA9PiB7XG4gICAgICBjb25zdCBkcmlmdCA9IGRyaWZ0cy5maW5kKChkKSA9PiBkLkxvZ2ljYWxSZXNvdXJjZUlkID09PSBsb2dpY2FsSWQpO1xuICAgICAgcmV0dXJuICFkcmlmdCB8fCBkcmlmdC5TdGFja1Jlc291cmNlRHJpZnRTdGF0dXMgPT09IFN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1cy5VTktOT1dOO1xuICAgIH0pO1xuICAgIGlmICh1bmNoZWNrZWRSZXNvdXJjZXMubGVuZ3RoID4gMCkge1xuICAgICAgdW5jaGVja2VkID0gdGhpcy5wcmludFNlY3Rpb25IZWFkZXIoJ1VuY2hlY2tlZCBSZXNvdXJjZXMnKTtcbiAgICAgIGZvciAoY29uc3QgbG9naWNhbElkIG9mIHVuY2hlY2tlZFJlc291cmNlcykge1xuICAgICAgICBjb25zdCByZXNvdXJjZVR5cGUgPSB0aGlzLmFsbFN0YWNrUmVzb3VyY2VzLmdldChsb2dpY2FsSWQpO1xuICAgICAgICB1bmNoZWNrZWQgKz0gYCR7Q09OVEVYVH0gJHtjaGFsay5jeWFuKHJlc291cmNlVHlwZSl9ICR7dGhpcy5mb3JtYXRMb2dpY2FsSWQobG9naWNhbFRvUGF0aE1hcCwgbG9naWNhbElkKX1cXG5gO1xuICAgICAgfVxuICAgICAgdW5jaGVja2VkICs9IHRoaXMucHJpbnRTZWN0aW9uRm9vdGVyKCk7XG4gICAgfVxuXG4gICAgLy8gUHJvY2VzcyBtb2RpZmllZCByZXNvdXJjZXMgKGV4Y2x1ZGUgQVdTOjpDREs6Ok1ldGFkYXRhKVxuICAgIGNvbnN0IG1vZGlmaWVkUmVzb3VyY2VzID0gZHJpZnRzLmZpbHRlcihkID0+XG4gICAgICBkLlN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1cyA9PT0gU3RhY2tSZXNvdXJjZURyaWZ0U3RhdHVzLk1PRElGSUVEXG4gICAgICAmJiBkLlJlc291cmNlVHlwZSAhPT0gJ0FXUzo6Q0RLOjpNZXRhZGF0YScpO1xuICAgIGlmIChtb2RpZmllZFJlc291cmNlcy5sZW5ndGggPiAwKSB7XG4gICAgICBtb2RpZmllZCA9IHRoaXMucHJpbnRTZWN0aW9uSGVhZGVyKCdNb2RpZmllZCBSZXNvdXJjZXMnKTtcblxuICAgICAgZm9yIChjb25zdCBkcmlmdCBvZiBtb2RpZmllZFJlc291cmNlcykge1xuICAgICAgICBpZiAoIWRyaWZ0LkxvZ2ljYWxSZXNvdXJjZUlkIHx8ICFkcmlmdC5SZXNvdXJjZVR5cGUpIGNvbnRpbnVlO1xuICAgICAgICBtb2RpZmllZCArPSBgJHtVUERBVEV9ICR7Y2hhbGsuY3lhbihkcmlmdC5SZXNvdXJjZVR5cGUpfSAke3RoaXMuZm9ybWF0TG9naWNhbElkKGxvZ2ljYWxUb1BhdGhNYXAsIGRyaWZ0LkxvZ2ljYWxSZXNvdXJjZUlkKX1cXG5gO1xuICAgICAgICBpZiAoZHJpZnQuUHJvcGVydHlEaWZmZXJlbmNlcykge1xuICAgICAgICAgIGNvbnN0IHByb3BEaWZmcyA9IGRyaWZ0LlByb3BlcnR5RGlmZmVyZW5jZXM7XG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wRGlmZnMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IGRpZmYgPSBwcm9wRGlmZnNbaV07XG4gICAgICAgICAgICBpZiAoIWRpZmYuUHJvcGVydHlQYXRoKSBjb250aW51ZTtcbiAgICAgICAgICAgIGNvbnN0IGRpZmZlcmVuY2UgPSBuZXcgRGlmZmVyZW5jZShkaWZmLkV4cGVjdGVkVmFsdWUsIGRpZmYuQWN0dWFsVmFsdWUpO1xuICAgICAgICAgICAgbW9kaWZpZWQgKz0gdGhpcy5mb3JtYXRUcmVlRGlmZihkaWZmLlByb3BlcnR5UGF0aCwgZGlmZmVyZW5jZSwgaSA9PT0gcHJvcERpZmZzLmxlbmd0aCAtIDEpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbW9kaWZpZWQgKz0gdGhpcy5wcmludFNlY3Rpb25Gb290ZXIoKTtcbiAgICB9XG5cbiAgICAvLyBQcm9jZXNzIGRlbGV0ZWQgcmVzb3VyY2VzIChleGNsdWRlIEFXUzo6Q0RLOjpNZXRhZGF0YSlcbiAgICBjb25zdCBkZWxldGVkUmVzb3VyY2VzID0gZHJpZnRzLmZpbHRlcihkID0+XG4gICAgICBkLlN0YWNrUmVzb3VyY2VEcmlmdFN0YXR1cyA9PT0gU3RhY2tSZXNvdXJjZURyaWZ0U3RhdHVzLkRFTEVURURcbiAgICAgICYmIGQuUmVzb3VyY2VUeXBlICE9PSAnQVdTOjpDREs6Ok1ldGFkYXRhJyk7XG4gICAgaWYgKGRlbGV0ZWRSZXNvdXJjZXMubGVuZ3RoID4gMCkge1xuICAgICAgZGVsZXRlZCA9IHRoaXMucHJpbnRTZWN0aW9uSGVhZGVyKCdEZWxldGVkIFJlc291cmNlcycpO1xuICAgICAgZm9yIChjb25zdCBkcmlmdCBvZiBkZWxldGVkUmVzb3VyY2VzKSB7XG4gICAgICAgIGlmICghZHJpZnQuTG9naWNhbFJlc291cmNlSWQgfHwgIWRyaWZ0LlJlc291cmNlVHlwZSkgY29udGludWU7XG4gICAgICAgIGRlbGV0ZWQgKz0gYCR7UkVNT1ZBTH0gJHtjaGFsay5jeWFuKGRyaWZ0LlJlc291cmNlVHlwZSl9ICR7dGhpcy5mb3JtYXRMb2dpY2FsSWQobG9naWNhbFRvUGF0aE1hcCwgZHJpZnQuTG9naWNhbFJlc291cmNlSWQpfVxcbmA7XG4gICAgICB9XG4gICAgICBkZWxldGVkICs9IHRoaXMucHJpbnRTZWN0aW9uRm9vdGVyKCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgdW5jaGFuZ2VkLCB1bmNoZWNrZWQsIG1vZGlmaWVkLCBkZWxldGVkIH07XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdExvZ2ljYWxJZChsb2dpY2FsVG9QYXRoTWFwOiB7IFtsb2dpY2FsSWQ6IHN0cmluZ106IHN0cmluZyB9LCBsb2dpY2FsSWQ6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgY29uc3QgcGF0aCA9IGxvZ2ljYWxUb1BhdGhNYXBbbG9naWNhbElkXTtcbiAgICBpZiAoIXBhdGgpIHJldHVybiBsb2dpY2FsSWQ7XG5cbiAgICBsZXQgbm9ybWFsaXplZFBhdGggPSBwYXRoO1xuICAgIGlmIChub3JtYWxpemVkUGF0aC5zdGFydHNXaXRoKCcvJykpIHtcbiAgICAgIG5vcm1hbGl6ZWRQYXRoID0gbm9ybWFsaXplZFBhdGguc2xpY2UoMSk7XG4gICAgfVxuXG4gICAgbGV0IHBhcnRzID0gbm9ybWFsaXplZFBhdGguc3BsaXQoJy8nKTtcbiAgICBpZiAocGFydHMubGVuZ3RoID4gMSkge1xuICAgICAgcGFydHMgPSBwYXJ0cy5zbGljZSgxKTtcblxuICAgICAgLy8gcmVtb3ZlIHRoZSBsYXN0IGNvbXBvbmVudCBpZiBpdCdzIFwiUmVzb3VyY2VcIiBvciBcIkRlZmF1bHRcIiAoaWYgd2UgaGF2ZSBtb3JlIHRoYW4gYSBzaW5nbGUgY29tcG9uZW50KVxuICAgICAgaWYgKHBhcnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgY29uc3QgbGFzdCA9IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDFdO1xuICAgICAgICBpZiAobGFzdCA9PT0gJ1Jlc291cmNlJyB8fCBsYXN0ID09PSAnRGVmYXVsdCcpIHtcbiAgICAgICAgICBwYXJ0cyA9IHBhcnRzLnNsaWNlKDAsIHBhcnRzLmxlbmd0aCAtIDEpO1xuICAgICAgICB9XG4gICAgICB9XG5cbiAgICAgIG5vcm1hbGl6ZWRQYXRoID0gcGFydHMuam9pbignLycpO1xuICAgIH1cblxuICAgIHJldHVybiBgJHtub3JtYWxpemVkUGF0aH0gJHtjaGFsay5ncmF5KGxvZ2ljYWxJZCl9YDtcbiAgfVxuXG4gIHByaXZhdGUgcHJpbnRTZWN0aW9uSGVhZGVyKHRpdGxlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBgJHtjaGFsay51bmRlcmxpbmUoY2hhbGsuYm9sZCh0aXRsZSkpfVxcbmA7XG4gIH1cblxuICBwcml2YXRlIHByaW50U2VjdGlvbkZvb3RlcigpOiBzdHJpbmcge1xuICAgIHJldHVybiAnXFxuJztcbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0VHJlZURpZmYocHJvcGVydHlQYXRoOiBzdHJpbmcsIGRpZmZlcmVuY2U6IERpZmZlcmVuY2U8c3RyaW5nPiwgaXNMYXN0OiBib29sZWFuKTogc3RyaW5nIHtcbiAgICBsZXQgcmVzdWx0ID0gZm9ybWF0KCcgJXPilIAgJXMgJXNcXG4nLCBpc0xhc3QgPyAn4pSUJyA6ICfilJwnLFxuICAgICAgZGlmZmVyZW5jZS5pc0FkZGl0aW9uID8gQURESVRJT04gOlxuICAgICAgICBkaWZmZXJlbmNlLmlzUmVtb3ZhbCA/IFJFTU9WQUwgOlxuICAgICAgICAgIFVQREFURSxcbiAgICAgIHByb3BlcnR5UGF0aCxcbiAgICApO1xuICAgIGlmIChkaWZmZXJlbmNlLmlzVXBkYXRlKSB7XG4gICAgICByZXN1bHQgKz0gZm9ybWF0KCcgICAgIOKUnOKUgCAlcyAlc1xcbicsIFJFTU9WQUwsIGNoYWxrLnJlZChkaWZmZXJlbmNlLm9sZFZhbHVlKSk7XG4gICAgICByZXN1bHQgKz0gZm9ybWF0KCcgICAgIOKUlOKUgCAlcyAlc1xcbicsIEFERElUSU9OLCBjaGFsay5ncmVlbihkaWZmZXJlbmNlLm5ld1ZhbHVlKSk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cblxuY29uc3QgQURESVRJT04gPSBjaGFsay5ncmVlbignWytdJyk7XG5jb25zdCBDT05URVhUID0gY2hhbGsuZ3JleSgnWyBdJyk7XG5jb25zdCBVUERBVEUgPSBjaGFsay55ZWxsb3coJ1t+XScpO1xuY29uc3QgUkVNT1ZBTCA9IGNoYWxrLnJlZCgnWy1dJyk7XG4iXX0=
|