@rio-cloud/cdk-v2-constructs 9.0.0-alpha.8 → 9.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.jsii +883 -183
- package/README.md +65 -0
- package/docs/AGENTS_DOCUMENTATION.md +20 -203
- package/lib/fargate/datadog.d.ts +4 -1
- package/lib/fargate/datadog.js +6 -3
- package/lib/fargate/rio-fargate-service-blue-green-alpha.js +6 -1
- package/lib/fargate/rio-fargate-service.d.ts +22 -1
- package/lib/fargate/rio-fargate-service.js +11 -2
- package/lib/fargate/trace-sampling.d.ts +87 -0
- package/lib/fargate/trace-sampling.js +123 -0
- package/lib/sbom-catalog/lambda/handler.cjs +38 -1
- package/node_modules/zod/package.json +1 -1
- package/node_modules/zod/src/v4/classic/tests/array.test.ts +27 -0
- package/node_modules/zod/src/v4/classic/tests/map.test.ts +7 -0
- package/node_modules/zod/src/v4/classic/tests/set.test.ts +6 -0
- package/node_modules/zod/src/v4/core/compile.ts +9 -0
- package/node_modules/zod/src/v4/core/schemas.ts +35 -1
- package/node_modules/zod/src/v4/core/util.ts +13 -0
- package/node_modules/zod/src/v4/core/versions.ts +1 -1
- package/node_modules/zod/v4/core/compile.cjs +8 -0
- package/node_modules/zod/v4/core/compile.js +8 -0
- package/node_modules/zod/v4/core/schemas.cjs +30 -0
- package/node_modules/zod/v4/core/schemas.d.cts +3 -1
- package/node_modules/zod/v4/core/schemas.d.ts +3 -1
- package/node_modules/zod/v4/core/schemas.js +30 -0
- package/node_modules/zod/v4/core/util.cjs +15 -0
- package/node_modules/zod/v4/core/util.d.cts +2 -0
- package/node_modules/zod/v4/core/util.d.ts +2 -0
- package/node_modules/zod/v4/core/util.js +14 -0
- package/node_modules/zod/v4/core/versions.cjs +1 -1
- package/node_modules/zod/v4/core/versions.js +1 -1
- package/package.json +1 -1
- package/version.json +1 -1
|
@@ -20,6 +20,7 @@ const datadogv2_1 = require("../datadogv2");
|
|
|
20
20
|
const datadog = require("./datadog");
|
|
21
21
|
const rio_fargate_service_1 = require("./rio-fargate-service");
|
|
22
22
|
const spring_1 = require("./spring");
|
|
23
|
+
const trace_sampling_1 = require("./trace-sampling");
|
|
23
24
|
class RioFargateServiceBlueGreenAlpha extends constructs.Construct {
|
|
24
25
|
constructor(scope, id, props) {
|
|
25
26
|
super(scope, id);
|
|
@@ -40,6 +41,8 @@ class RioFargateServiceBlueGreenAlpha extends constructs.Construct {
|
|
|
40
41
|
this.node.addValidation(new DenyListedKeyValidator(RioFargateServiceBlueGreenAlpha.DD_ENV_DENY_LIST, props.containerDefinitionOption.environment, it => `Environment ${it} is not allowed to be set. This value will be inferred from the account or other properties.`));
|
|
41
42
|
this.node.addValidation(new DenyListedKeyValidator(RioFargateServiceBlueGreenAlpha.DD_TAG_DENY_LIST, props.datadogOptions?.additionalTags, it => `Tag ${it} is not allowed to be set. This value will be inferred from the account or other properties.`));
|
|
42
43
|
this.node.addValidation(new ClusterVpcValidator(props.vpc, props.cluster));
|
|
44
|
+
this.node.addValidation(new trace_sampling_1.TraceSamplingValidator(props.datadogOptions?.traceSampling));
|
|
45
|
+
(0, trace_sampling_1.addTraceSamplingEnvironmentWarning)(this, props.containerDefinitionOption.environment);
|
|
43
46
|
const fargateCluster = cluster ??
|
|
44
47
|
new ecs.Cluster(this, 'Cluster', {
|
|
45
48
|
vpc: vpc,
|
|
@@ -94,6 +97,7 @@ class RioFargateServiceBlueGreenAlpha extends constructs.Construct {
|
|
|
94
97
|
teamName,
|
|
95
98
|
teamIdentifier,
|
|
96
99
|
additionalTags: datadogOptions?.additionalTags,
|
|
100
|
+
traceSampling: datadogOptions?.traceSampling,
|
|
97
101
|
}),
|
|
98
102
|
...containerDefinitionOption.environment,
|
|
99
103
|
},
|
|
@@ -151,6 +155,7 @@ class RioFargateServiceBlueGreenAlpha extends constructs.Construct {
|
|
|
151
155
|
restartIgnoredExitCodes: [0],
|
|
152
156
|
containerTag: props.datadogOptions?.datadogSidecarTag ?? this.DEFAULT_DATADOG_SIDECAR_TAG, // These are positional parameters,
|
|
153
157
|
additionalTags: datadogOptions?.additionalTags,
|
|
158
|
+
traceSampling: datadogOptions?.traceSampling,
|
|
154
159
|
});
|
|
155
160
|
if (this.taskDefinition.executionRole) {
|
|
156
161
|
datadogSecret.grantRead(this.taskDefinition.executionRole);
|
|
@@ -370,4 +375,4 @@ class ClusterVpcValidator {
|
|
|
370
375
|
return result;
|
|
371
376
|
}
|
|
372
377
|
}
|
|
373
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmlvLWZhcmdhdGUtc2VydmljZS1ibHVlLWdyZWVuLWFscGhhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZhcmdhdGUvcmlvLWZhcmdhdGUtc2VydmljZS1ibHVlLWdyZWVuLWFscGhhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEseUNBQWlDO0FBQ2pDLG1DQUFtQztBQUNuQyx5REFBeUQ7QUFDekQsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyxnRUFBZ0U7QUFDaEUsMkNBQTJDO0FBQzNDLGlEQUFpRDtBQUVqRCw2Q0FBNkM7QUFDN0MsMkNBQTJDO0FBQzNDLG1EQUFtRDtBQUNuRCx5Q0FBeUM7QUFDekMsNENBQW9EO0FBQ3BELDRDQUFtRDtBQUNuRCxxQ0FBcUM7QUFDckMsK0RBTytCO0FBQy9CLHFDQUFrQztBQWdGbEMsTUFBYSwrQkFBZ0MsU0FBUSxVQUFVLENBQUMsU0FBUztJQXdDdkUsWUFBWSxLQUEyQixFQUFFLEVBQVUsRUFBRSxLQUEyQztRQUM5RixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBM0JGLHdDQUFtQyxHQUFhLEVBQUUsQ0FBQztRQUNuRCxnQ0FBMkIsR0FBRyxFQUFFLENBQUM7UUFDakMsNkNBQXdDLEdBQUcsR0FBRyxDQUFDO1FBQy9DLHNDQUFpQyxHQUFHLElBQUksQ0FBQztRQUN6QyxxQ0FBZ0MsR0FBRyx3Q0FBa0IsQ0FBQyxnQkFBZ0IsQ0FBQztRQUN2RSw2Q0FBd0MsR0FBRyx3Q0FBa0IsQ0FBQyxJQUFJLENBQUM7UUFDbkUsaUNBQTRCLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkQsdUJBQWtCLEdBQUcsU0FBUyxDQUFDO1FBQy9CLGdDQUEyQixHQUFHLFFBQVEsQ0FBQztRQUV2QyxtQkFBYyxHQUFHLEVBQUUsQ0FBQztRQUNwQixnQ0FBMkIsR0FBRyxFQUFFLENBQUM7UUFFakMsK0JBQTBCLEdB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SUFBSSxDQUMvSCxDQUFDO1FBQ0osQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpvaW4gfSBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGNvZGVkZXBsb3kgZnJvbSAnYXdzLWNkay1saWIvYXdzLWNvZGVkZXBsb3knO1xuaW1wb3J0ICogYXMgZWMyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lYzInO1xuaW1wb3J0ICogYXMgZWNzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lY3MnO1xuaW1wb3J0ICogYXMgZWxidjIgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVsYXN0aWNsb2FkYmFsYW5jaW5ndjInO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHR5cGUgKiBhcyBub2RlanNsYW1iZGEgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYS1ub2RlanMnO1xuaW1wb3J0ICogYXMgbG9ncyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgKiBhcyBzc20gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNzbSc7XG5pbXBvcnQgKiBhcyBjciBmcm9tICdhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzJztcbmltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBERUZBVUxUX05PREVfUlVOVElNRSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQgeyBEYXRhZG9nU2hhcmVkU2VjcmV0IH0gZnJvbSAnLi4vZGF0YWRvZ3YyJztcbmltcG9ydCAqIGFzIGRhdGFkb2cgZnJvbSAnLi9kYXRhZG9nJztcbmltcG9ydCB7XG4gIHR5cGUgQ29udGFpbmVyRGVmaW5pdGlvbk9wdGlvbnMsXG4gIERhdGFEb2dMb2dnaW5nTW9kZSxcbiAgdHlwZSBEYXRhZG9nSW50ZWdyYXRpb25Qcm9wcyxcbiAgdHlwZSBGYXJnYXRlVGFza0RlZmluaXRpb25Qcm9wcyxcbiAgRnJhbWV3b3JrLFxuICB0eXBlIExvYWRCYWxhbmNlck9wdGlvbnMsXG59IGZyb20gJy4vcmlvLWZhcmdhdGUtc2VydmljZSc7XG5pbXBvcnQgeyBTcHJpbmcgfSBmcm9tICcuL3NwcmluZyc7XG5cbi8qKlxuICogRmFyZ2F0ZSBUYXNrIERlZmluaXRpb24gUHJvcGVydGllcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSaW9GYXJnYXRlU2VydmljZUJsdWVHcmVlbkFscGhhUHJvcHMge1xuICAvKipcbiAgICogVGhlIHN0YWdlIG9mIHRoZSBzZXJ2aWNlLCBlLmcuICdwcm9kJy5cbiAgICovXG4gIHJlYWRvbmx5IHN0YWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBOYW1lIG9mIHRoZSBzZXJ2aWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIHNlcnZpY2UsIGUuZy4gdGhlIGdpdCBoYXNoIG9mIHRoZSBjb3JyZXNwb25kaW5nIGNvbW1pdC5cbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZyYW1ld29ya3MgaW4gdXNlcy5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSAtIE5vIGZyYW1ld29ya3MuXG4gICAqL1xuICByZWFkb25seSBmcmFtZXdvcmtzPzogRnJhbWV3b3JrW107XG5cbiAgLyoqXG4gICAqIFRoZSBWUEMgb2YgdGhlIHNlcnZpY2UncyBlY3MuQ2x1c3RlciBpZiBubyBjbHVzdGVyIGlzIGV4cGxpY2l0bHkgcGFzc2VkIGFzIHByb3AuXG4gICAqL1xuICByZWFkb25seSB2cGM6IGVjMi5JVnBjO1xuXG4gIC8qKlxuICAgKiBUaGUgRmFyZ2F0ZSBjbHVzdGVyIHRvIHJ1biB0aGUgc2VydmljZSBpbi5cbiAgICogSWYgbm90IG51bGwsIHRoZSBjbHVzdGVyLnZwYyBNVVNUIG1hdGNoIHRoZSB2cGMgcHJvdmlkZWQgYXMgZGlyZWN0IGFyZ3VtZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIC0gQ3JlYXRlIGEgbmV3IEZhcmdhdGUgY2x1c3RlciB3aXRoIGRlZmF1bHQgcHJvcGVydGllc1xuICAgKi9cbiAgcmVhZG9ubHkgY2x1c3Rlcj86IGVjcy5JQ2x1c3RlcjtcblxuICAvKipcbiAgICogQ29udGFpbmVyIGRlZmluaXRpb24gb3B0aW9ucyBsaWtlIGltYWdlLCBjcHUsIG1lbW9yeS5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRhaW5lckRlZmluaXRpb25PcHRpb246IENvbnRhaW5lckRlZmluaXRpb25PcHRpb25zO1xuXG4gIC8qKlxuICAgKiBGYXJnYXRlIFRhc2sgRGVmaW5pdGlvbiBQcm9wZXJ0aWVzLlxuICAgKi9cbiAgcmVhZG9ubHkgZmFyZ2F0ZU9wdGlvbnM6IEZhcmdhdGVUYXNrRGVmaW5pdGlvblByb3BzO1xuXG4gIC8qKlxuICAgKiBMb2FkYmFsYW5jZXIgb3B0aW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IGxvYWRCYWxhbmNlck9wdGlvbnM/OiBMb2FkQmFsYW5jZXJPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBEYXRhZG9nIGludGVncmF0aW9uIHByb3BlcnRpZXNcbiAgICovXG4gIHJlYWRvbmx5IGRhdGFkb2dPcHRpb25zPzogRGF0YWRvZ0ludGVncmF0aW9uUHJvcHM7XG5cbiAgLyoqXG4gICAqIEJsdWUgZ3JlZW4gZGVwbG95bWVudCBjb25maWd1cmF0aW9uXG4gICAqL1xuICByZWFkb25seSBibHVlR3JlZW5EZXBsb3ltZW50Q29uZmlnPzogQmx1ZUdyZWVuRGVwbG95bWVudENvbmZpZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBCbHVlR3JlZW5EZXBsb3ltZW50Q29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSB0YXJnZXQgZ3JvdXAgdG8gYXNzb2NpYXRlIHdpdGggdGhlIHJlcGxhY2VtZW50IHRhc2sgc2V0IGZvciB0ZXN0aW5nIGJlZm9yZSBwcm9tb3RpbmcgdHJhZmZpYyB0byBwcm9kdWN0aW9uLlxuICAgKiBAZGVmYXVsdCAtIE5vIHRhcmdldCBncm91cC5cbiAgICovXG4gIHJlYWRvbmx5IHRlc3RMaXN0ZW5lcj86IGVsYnYyLklBcHBsaWNhdGlvbkxpc3RlbmVyO1xuXG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBjYXBhYmlsaXRpZXMgdG8gcnVuIHdpdGggdGhlIG1vbml0b3JpbmcgdGVzdCBzdWl0ZSBydW5uZXIgdGVzdGluZ1xuICAgKi9cbiAgcmVhZG9ubHkgY2FwYWJpbGl0eU5hbWVzPzogc3RyaW5nW107XG59XG5cbmV4cG9ydCBjbGFzcyBSaW9GYXJnYXRlU2VydmljZUJsdWVHcmVlbkFscGhhIGV4dGVuZHMgY29uc3RydWN0cy5Db25zdHJ1Y3QgaW1wbGVtZW50cyBlYzIuSUNvbm5lY3RhYmxlIHtcbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgRERfRU5WX0RFTllfTElTVCA9IFsnRERfRU5WJywgJ0REX1RBR1MnLCAnRERfU0VSVklDRScsICdERF9WRVJTSU9OJywgJ0REX0xPR1NfSU5KRUNUSU9OJ107XG5cbiAgcHJpdmF0ZSBzdGF0aWMgcmVhZG9ubHkgRERfVEFHX0RFTllfTElTVCA9IFtcbiAgICAnZW52JyxcbiAgICAnc2VydmljZScsXG4gICAgJ3ZlcnNpb24nLFxuICAgICdhY2NvdW50X2lkJyxcbiAgICAnYWNjb3VudF9uYW1lJyxcbiAgICAncmVnaW9uJyxcbiAgICAndGVhbScsXG4gICAgJ3RlYW1faWRlbnRpZmllcicsXG4gIF07XG5cbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX0FQTV9HRVRfRU5EUE9JTlRTX1RPX0lHTk9SRTogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX0RBVEFET0dfU0lERUNBUl9DUFUgPSA2NDtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX0RBVEFET0dfU0lERUNBUl9NRU1PUllfTElNSVRfTUlCID0gMTI4O1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfREFUQURPR19TSURFQ0FSX0VTU0VOVElBTCA9IHRydWU7XG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9MT0dHSU5HX01PREVfRk9SX1NFUlZJQ0UgPSBEYXRhRG9nTG9nZ2luZ01vZGUuRk9SV0FSREVSX0xBTUJEQTtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX0xPR0dJTkdfTU9ERV9GT1JfREFUQURPR19TSURFQ0FSID0gRGF0YURvZ0xvZ2dpbmdNb2RlLk5PTkU7XG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9ERVJFR0lTVFJBVElPTl9ERUxBWSA9IGNkay5EdXJhdGlvbi5zZWNvbmRzKDUpO1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfU0xPV19TVEFSVCA9IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX0RBVEFET0dfU0lERUNBUl9UQUcgPSAnbGF0ZXN0JztcblxuICBwcml2YXRlIHJlYWRvbmx5IExPR19ST1VURVJfQ1BVID0gNjQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgTE9HX1JPVVRFUl9NRU1PUllfTElNSVRfTUlCID0gNjQ7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBGSVJFTEVOU19DT05GSUdfQlVDS0VUX0FSTiA9ICdhcm46YXdzOnMzOjo6NTc3MTQ2ODk3Nzg1LWV1LXdlc3QtMS1maXJlbGVucy1jb25maWd1cmF0aW9uLWJ1Y2tldCc7XG4gIHByaXZhdGUgcmVhZG9ubHkgRklSRUxFTlNfQ09ORklHX0ZJTEVfUEFUSCA9ICcvcGFyc2UtanNvbi5jb25mJztcblxuICByZWFkb25seSBzZXJ2aWNlQ29udGFpbmVyRGVmaW5pdGlvbjogZWNzLkNvbnRhaW5lckRlZmluaXRpb247XG4gIHJlYWRvbmx5IGRhdGFkb2dTaWRlQ2FyQ29udGFpbmVyRGVmaW5pdGlvbjogZWNzLkNvbnRhaW5lckRlZmluaXRpb247XG4gIHJlYWRvbmx5IGxvZ1JvdXRlckNvbnRhaW5lckRlZmluaXRpb24/OiBlY3MuQ29udGFpbmVyRGVmaW5pdGlvbjtcbiAgcmVhZG9ubHkgdGFza0RlZmluaXRpb246IGVjcy5GYXJnYXRlVGFza0RlZmluaXRpb247XG5cbiAgcmVhZG9ubHkgY29ubmVjdGlvbnM6IGVjMi5Db25uZWN0aW9ucztcbiAgcmVhZG9ubHkgc2VydmljZTogZWNzLkZhcmdhdGVTZXJ2aWNlO1xuICByZWFkb25seSBibHVlVGFyZ2V0R3JvdXA6IGVsYnYyLkFwcGxpY2F0aW9uVGFyZ2V0R3JvdXAgfCB1bmRlZmluZWQ7XG4gIHJlYWRvbmx5IGdyZWVuVGFyZ2V0R3JvdXA6IGVsYnYyLkFwcGxpY2F0aW9uVGFyZ2V0R3JvdXAgfCB1bmRlZmluZWQ7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUmlvRmFyZ2F0ZVNlcnZpY2VCbHVlR3JlZW5BbHBoYVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IHtcbiAgICAgIGxvYWRCYWxhbmNlck9wdGlvbnMsXG4gICAgICB2cGMsXG4gICAgICBjbHVzdGVyLFxuICAgICAgZmFyZ2F0ZU9wdGlvbnMsXG4gICAgICBkYXRhZG9nT3B0aW9ucyxcbiAgICAgIHNlcnZpY2VOYW1lLFxuICAgICAgY29udGFpbmVyRGVmaW5pdGlvbk9wdGlvbixcbiAgICAgIHN0YWdlLFxuICAgICAgdmVyc2lvbixcbiAgICAgIGZyYW1ld29ya3MsXG4gICAgICBibHVlR3JlZW5EZXBsb3ltZW50Q29uZmlnLFxuICAgIH0gPSBwcm9wcztcblxuICAgIHRoaXMubm9kZS5hZGRWYWxpZGF0aW9uKFxuICAgICAgbmV3IERlbnlMaXN0ZWRLZXlWYWxpZGF0b3IoXG4gICAgICAgIFJpb0ZhcmdhdGVTZXJ2aWNlQmx1ZUdyZWVuQWxwaGEuRERfRU5WX0RFTllfTElTVCxcbiAgICAgICAgcHJvcHMuY29udGFpbmVyRGVmaW5pdGlvbk9wdGlvbi5lbnZpcm9ubWVudCxcbiAgICAgICAgaXQgPT5cbiAgICAgICAgICBgRW52aXJvbm1lbnQgJHtpdH0gaXMgbm90IGFsbG93ZWQgdG8gYmUgc2V0LiBUaGlzIHZhbHVlIHdpbGwgYmUgaW5mZXJyZWQgZnJvbSB0aGUgYWNjb3VudCBvciBvdGhlciBwcm9wZXJ0aWVzLmBcbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMubm9kZS5hZGRWYWxpZGF0aW9uKFxuICAgICAgbmV3IERlbnlMaXN0ZWRLZXlWYWxpZGF0b3IoXG4gICAgICAgIFJpb0ZhcmdhdGVTZXJ2aWNlQmx1ZUdyZWVuQWxwaGEuRERfVEFHX0RFTllfTElTVCxcbiAgICAgICAgcHJvcHMuZGF0YWRvZ09wdGlvbnM/LmFkZGl0aW9uYWxUYWdzLFxuICAgICAgICBpdCA9PiBgVGFnICR7aXR9IGlzIG5vdCBhbGxvd2VkIHRvIGJlIHNldC4gVGhpcyB2YWx1ZSB3aWxsIGJlIGluZmVycmVkIGZyb20gdGhlIGFjY291bnQgb3Igb3RoZXIgcHJvcGVydGllcy5gXG4gICAgICApXG4gICAgKTtcblxuICAgIHRoaXMubm9kZS5hZGRWYWxpZGF0aW9uKG5ldyBDbHVzdGVyVnBjVmFsaWRhdG9yKHByb3BzLnZwYywgcHJvcHMuY2x1c3RlcikpO1xuXG4gICAgY29uc3QgZmFyZ2F0ZUNsdXN0ZXIgPVxuICAgICAgY2x1c3RlciA/P1xuICAgICAgbmV3IGVjcy5DbHVzdGVyKHRoaXMsICdDbHVzdGVyJywge1xuICAgICAgICB2cGM6IHZwYyxcbiAgICAgIH0pO1xuICAgIHRoaXMudGFza0RlZmluaXRpb24gPSBuZXcgZWNzLkZhcmdhdGVUYXNrRGVmaW5pdGlvbih0aGlzLCAnVGFza0RlZmluaXRpb24nLCB7XG4gICAgICBjcHU6IGZhcmdhdGVPcHRpb25zLmNwdSxcbiAgICAgIG1lbW9yeUxpbWl0TWlCOiBmYXJnYXRlT3B0aW9ucy5tZW1vcnlMaW1pdE1pQixcbiAgICAgIHJ1bnRpbWVQbGF0Zm9ybToge1xuICAgICAgICBjcHVBcmNoaXRlY3R1cmU6IGZhcmdhdGVPcHRpb25zLnJ1bnRpbWVQbGF0Zm9ybT8uY3B1QXJjaGl0ZWN0dXJlID8/IGVjcy5DcHVBcmNoaXRlY3R1cmUuWDg2XzY0LFxuICAgICAgICBvcGVyYXRpbmdTeXN0ZW1GYW1pbHk6IGZhcmdhdGVPcHRpb25zLnJ1bnRpbWVQbGF0Zm9ybT8ub3BlcmF0aW5nU3lzdGVtRmFtaWx5ID8/IGVjcy5PcGVyYXRpbmdTeXN0ZW1GYW1pbHkuTElOVVgsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IGFjY291bnROYW1lID0gc3NtLlN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyTmFtZShcbiAgICAgIHRoaXMsXG4gICAgICAnQWNjb3VudE5hbWUnLFxuICAgICAgJy9jb25maWcvYWNjb3VudC9uYW1lJ1xuICAgICkuc3RyaW5nVmFsdWU7XG4gICAgY29uc3QgdGVhbU5hbWUgPSBzc20uU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJOYW1lKHRoaXMsICdUZWFtTmFtZScsICcvY29uZmlnL3RlYW0vbmFtZScpLnN0cmluZ1ZhbHVlO1xuICAgIGNvbnN0IHRlYW1JZGVudGlmaWVyID0gc3NtLlN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyTmFtZShcbiAgICAgIHRoaXMsXG4gICAgICAnVGVhbUlkZW50aWZpZXInLFxuICAgICAgJy9jb25maWcvdGVhbS9pZGVudGlmaWVyJ1xuICAgICkuc3RyaW5nVmFsdWU7XG5cbiAgICBjb25zdCBkYXRhZG9nU2VjcmV0ID0gRGF0YWRvZ1NoYXJlZFNlY3JldC5jcmVkZW50aWFsc1NlY3JldCh0aGlzKTtcbiAgICBjb25zdCBkYXRhZG9nU2l0ZSA9IGRhdGFkb2dTZWNyZXQuZ2V0U2VjcmV0VmFsdWUoJ1NpdGUnKS51bnNhZmVVbndyYXAoKTtcbiAgICBjb25zdCBkYXRhZG9nQXBpS2V5ID0gZGF0YWRvZ1NlY3JldC5nZXRTZWNyZXQoJ0FwaUtleScpO1xuXG4gICAgY29uc3QgZGF0YWRvZ1NpZGVjYXJDcHUgPSBkYXRhZG9nT3B0aW9ucz8uY3B1ID8/IHRoaXMuREVGQVVMVF9EQVRBRE9HX1NJREVDQVJfQ1BVO1xuICAgIGNvbnN0IGRhdGFkb2dTaWRlY2FyTWVtb3J5TWlCID0gZGF0YWRvZ09wdGlvbnM/Lm1lbW9yeUxpbWl0TWlCID8/IHRoaXMuREVGQVVMVF9EQVRBRE9HX1NJREVDQVJfTUVNT1JZX0xJTUlUX01JQjtcbiAgICBjb25zdCBkYXRhZG9nU2lkZWNhckVzc2VudGlhbCA9IGRhdGFkb2dPcHRpb25zPy5kYXRhZG9nU2lkZWNhckVzc2VudGlhbCA/PyB0aGlzLkRFRkFVTFRfREFUQURPR19TSURFQ0FSX0VTU0VOVElBTDtcblxuICAgIGNvbnN0IGxvZ2dpbmdNb2RlRm9yU2VydmljZSA9IGRhdGFkb2dPcHRpb25zPy5sb2dnaW5nTW9kZUZvclNlcnZpY2UgPz8gdGhpcy5ERUZBVUxUX0xPR0dJTkdfTU9ERV9GT1JfU0VSVklDRTtcbiAgICBjb25zdCBsb2dnaW5nTW9kZUZvckRhdGFkb2dBZ2VudCA9XG4gICAgICBkYXRhZG9nT3B0aW9ucz8ubG9nZ2luZ01vZGVGb3JEYXRhZG9nQWdlbnQgPz8gdGhpcy5ERUZBVUxUX0xPR0dJTkdfTU9ERV9GT1JfREFUQURPR19TSURFQ0FSO1xuICAgIGNvbnN0IGZpcmVMZW5zTG9nUm91dGVyUmVxdWlyZWQgPVxuICAgICAgbG9nZ2luZ01vZGVGb3JTZXJ2aWNlID09PSBEYXRhRG9nTG9nZ2luZ01vZGUuQVdTX0ZJUkVfTEVOUyB8fFxuICAgICAgbG9nZ2luZ01vZGVGb3JEYXRhZG9nQWdlbnQgPT09IERhdGFEb2dMb2dnaW5nTW9kZS5BV1NfRklSRV9MRU5TO1xuXG4gICAgbGV0IHNlcnZpY2VDb250YWluZXJDcHVVbml0czogbnVtYmVyO1xuICAgIGxldCBzZXJ2aWNlQ29udGFpbmVyTWVtb3J5TGltaXRNaUI6IG51bWJlcjtcblxuICAgIGlmIChmaXJlTGVuc0xvZ1JvdXRlclJlcXVpcmVkKSB7XG4gICAgICBzZXJ2aWNlQ29udGFpbmVyQ3B1VW5pdHMgPSBmYXJnYXRlT3B0aW9ucy5jcHUgLSBkYXRhZG9nU2lkZWNhckNwdSAtIHRoaXMuTE9HX1JPVVRFUl9DUFU7XG4gICAgICBzZXJ2aWNlQ29udGFpbmVyTWVtb3J5TGltaXRNaUIgPVxuICAgICAgICBmYXJnYXRlT3B0aW9ucy5tZW1vcnlMaW1pdE1pQiAtIGRhdGFkb2dTaWRlY2FyTWVtb3J5TWlCIC0gdGhpcy5MT0dfUk9VVEVSX01FTU9SWV9MSU1JVF9NSUI7XG4gICAgICBkYXRhZG9nLmFkZEZpcmVsZW5zQ29uZmlnVXBsb2FkRnJvbVMzUGVybWlzc2lvbnMoe1xuICAgICAgICB0YXNrRGVmaW5pdGlvbjogdGhpcy50YXNrRGVmaW5pdGlvbixcbiAgICAgICAgZmlyZWxlbnNDb25maWdCdWNrZXRBcm46IHRoaXMuRklSRUxFTlNfQ09ORklHX0JVQ0tFVF9BUk4sXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VydmljZUNvbnRhaW5lckNwdVVuaXRzID0gZmFyZ2F0ZU9wdGlvbnMuY3B1IC0gZGF0YWRvZ1NpZGVjYXJDcHU7XG4gICAgICBzZXJ2aWNlQ29udGFpbmVyTWVtb3J5TGltaXRNaUIgPSBmYXJnYXRlT3B0aW9ucy5tZW1vcnlMaW1pdE1pQiAtIGRhdGFkb2dTaWRlY2FyTWVtb3J5TWlCO1xuICAgIH1cbiAgICB0aGlzLnNlcnZpY2VDb250YWluZXJEZWZpbml0aW9uID0gdGhpcy50YXNrRGVmaW5pdGlvbi5hZGRDb250YWluZXIoc2VydmljZU5hbWUsIHtcbiAgICAgIGltYWdlOiBjb250YWluZXJEZWZpbml0aW9uT3B0aW9uLmltYWdlLFxuICAgICAgY3B1OiBzZXJ2aWNlQ29udGFpbmVyQ3B1VW5pdHMsXG4gICAgICBtZW1vcnlMaW1pdE1pQjogc2VydmljZUNvbnRhaW5lck1lbW9yeUxpbWl0TWlCLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgLi4uZGF0YWRvZy5nZXRGYXJnYXRlQ29udGFpbmVyRW52aXJvbm1lbnRWYXJpYWJsZXMoe1xuICAgICAgICAgIHNjb3BlOiB0aGlzLFxuICAgICAgICAgIHN0YWdlLFxuICAgICAgICAgIHNlcnZpY2VOYW1lLFxuICAgICAgICAgIHZlcnNpb24sXG4gICAgICAgICAgYWNjb3VudE5hbWUsXG4gICAgICAgICAgdGVhbU5hbWUsXG4gICAgICAgICAgdGVhbUlkZW50aWZpZXIsXG4gICAgICAgICAgYWRkaXRpb25hbFRhZ3M6IGRhdGFkb2dPcHRpb25zPy5hZGRpdGlvbmFsVGFncyxcbiAgICAgICAgfSksXG4gICAgICAgIC4uLmNvbnRhaW5lckRlZmluaXRpb25PcHRpb24uZW52aXJvbm1lbnQsXG4gICAgICB9LFxuICAgICAgZG9ja2VyTGFiZWxzOiB7XG4gICAgICAgIC4uLmRhdGFkb2cuZ2V0RmFyZ2F0ZURvY2tlckxhYmVscyh7IHN0YWdlLCBzZXJ2aWNlTmFtZSwgdmVyc2lvbiB9KSxcbiAgICAgIH0sXG4gICAgICBoZWFsdGhDaGVjazogY29udGFpbmVyRGVmaW5pdGlvbk9wdGlvbi5oZWFsdGhDaGVjayxcbiAgICAgIGxvZ2dpbmc6IGRhdGFkb2cuc2V0dXBMb2dnaW5nKHtcbiAgICAgICAgc2NvcGUsXG4gICAgICAgIGFjY291bnROYW1lLFxuICAgICAgICB0ZWFtTmFtZSxcbiAgICAgICAgdGVhbUlkZW50aWZpZXIsXG4gICAgICAgIHN0YWdlLFxuICAgICAgICBzZXJ2aWNlTmFtZSxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgZGF0YWRvZ0FwaUtleSxcbiAgICAgICAgZGF0YWRvZ0xvZ2dpbmdNb2RlOiBsb2dnaW5nTW9kZUZvclNlcnZpY2UsXG4gICAgICAgIGRhdGFkb2dTaXRlLFxuICAgICAgICBjb250YWluZXJUeXBlOiAnc2VydmljZScsXG4gICAgICAgIGFkZGl0aW9uYWxUYWdzOiBkYXRhZG9nT3B0aW9ucz8uYWRkaXRpb25hbFRhZ3MsXG4gICAgICB9KSxcbiAgICAgIHNlY3JldHM6IGNvbnRhaW5lckRlZmluaXRpb25PcHRpb24uc2VjcmV0cyxcbiAgICB9KTtcblxuICAgIGlmIChmcmFtZXdvcmtzPy5pbmNsdWRlcyhGcmFtZXdvcmsuU1BSSU5HKSkge1xuICAgICAgU3ByaW5nLmFsbG93UGFyYW1ldGVyU3RvcmVBY2Nlc3NGb3JTcHJpbmdDbG91ZEF3cyh0aGlzLCBzZXJ2aWNlTmFtZSwgdGhpcy50YXNrRGVmaW5pdGlvbi50YXNrUm9sZSk7XG4gICAgICBTcHJpbmcuYWxsb3dTZWNyZXRzTWFuYWdlckFjY2Vzc0ZvclNwcmluZ0Nsb3VkQXdzKHRoaXMsIHNlcnZpY2VOYW1lLCB0aGlzLnRhc2tEZWZpbml0aW9uLnRhc2tSb2xlKTtcbiAgICB9XG5cbiAgICBpZiAoZmlyZUxlbnNMb2dSb3V0ZXJSZXF1aXJlZCkge1xuICAgICAgdGhpcy5sb2dSb3V0ZXJDb250YWluZXJEZWZpbml0aW9uID0gZGF0YWRvZy5hZGRGaXJlTGVuc0xvZ1JvdXRlcih7XG4gICAgICAgIHRhc2tEZWZpbml0aW9uOiB0aGlzLnRhc2tEZWZpbml0aW9uLFxuICAgICAgICBjcHU6IHRoaXMuTE9HX1JPVVRFUl9DUFUsXG4gICAgICAgIG1lbW9yeUxpbWl0TWlCOiB0aGlzLkxPR19ST1VURVJfTUVNT1JZX0xJTUlUX01JQixcbiAgICAgICAgZmlyZWxlbnNDb25maWdCdWNrZXRBcm46IHRoaXMuRklSRUxFTlNfQ09ORklHX0JVQ0tFVF9BUk4sXG4gICAgICAgIGZpcmVsZW5zQ29uZmlnRmlsZVBhdGg6IHRoaXMuRklSRUxFTlNfQ09ORklHX0ZJTEVfUEFUSCxcbiAgICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuZGF0YWRvZ1NpZGVDYXJDb250YWluZXJEZWZpbml0aW9uID0gZGF0YWRvZy5hZGREYXRhZG9nU2lkZWNhcih7XG4gICAgICBzY29wZSxcbiAgICAgIHRhc2tEZWZpbml0aW9uOiB0aGlzLnRhc2tEZWZpbml0aW9uLFxuICAgICAgYWNjb3VudE5hbWUsXG4gICAgICB0ZWFtTmFtZSxcbiAgICAgIHRlYW1JZGVudGlmaWVyLFxuICAgICAgc3RhZ2UsXG4gICAgICBzZXJ2aWNlTmFtZSxcbiAgICAgIHZlcnNpb24sXG4gICAgICBkYXRhZG9nQXBpS2V5LFxuICAgICAgZGF0YWRvZ1NpdGUsXG4gICAgICBkYXRhZG9nTG9nZ2luZ01vZGU6IGxvZ2dpbmdNb2RlRm9yRGF0YWRvZ0FnZW50LFxuICAgICAgYXBtR2V0UmVzb3VyY2VzVG9JZ25vcmU6IGRhdGFkb2dPcHRpb25zPy5hcG1HZXRFbmRwb2ludHNUb0lnbm9yZSA/PyB0aGlzLkRFRkFVTFRfQVBNX0dFVF9FTkRQT0lOVFNfVE9fSUdOT1JFLFxuICAgICAgY3B1OiBkYXRhZG9nU2lkZWNhckNwdSxcbiAgICAgIG1lbW9yeUxpbWl0TWlCOiBkYXRhZG9nU2lkZWNhck1lbW9yeU1pQixcbiAgICAgIGVzc2VudGlhbDogZGF0YWRvZ1NpZGVjYXJFc3NlbnRpYWwsXG4gICAgICBlbmFibGVSZXN0YXJ0UG9saWN5OiB0cnVlLFxuICAgICAgcmVzdGFydElnbm9yZWRFeGl0Q29kZXM6IFswXSxcbiAgICAgIGNvbnRhaW5lclRhZzogcHJvcHMuZGF0YWRvZ09wdGlvbnM/LmRhdGFkb2dTaWRlY2FyVGFnID8/IHRoaXMuREVGQVVMVF9EQVRBRE9HX1NJREVDQVJfVEFHLCAvLyBUaGVzZSBhcmUgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLFxuICAgICAgYWRkaXRpb25hbFRhZ3M6IGRhdGFkb2dPcHRpb25zPy5hZGRpdGlvbmFsVGFncyxcbiAgICB9KTtcblxuICAgIGlmICh0aGlzLnRhc2tEZWZpbml0aW9uLmV4ZWN1dGlvblJvbGUpIHtcbiAgICAgIGRhdGFkb2dTZWNyZXQuZ3JhbnRSZWFkKHRoaXMudGFza0RlZmluaXRpb24uZXhlY3V0aW9uUm9sZSk7XG4gICAgfVxuICAgIGRhdGFkb2cuZW5zdXJlTG9nZ2luZ0FuZE1vbml0b3JpbmdBcmVSZWFkeUJlZm9yZVNlcnZpY2VTdGFydHModGhpcyk7XG5cbiAgICBjb25zdCBsb2FkQmFsYW5jZXJPcHRpb25zRm9yRmFyZ2F0ZVNlcnZpY2UgPSBsb2FkQmFsYW5jZXJPcHRpb25zXG4gICAgICA/IHsgaGVhbHRoQ2hlY2tHcmFjZVBlcmlvZDogbG9hZEJhbGFuY2VyT3B0aW9ucy5oZWFsdGhDaGVja0dyYWNlUGVyaW9kIH1cbiAgICAgIDoge307XG5cbiAgICB0aGlzLnNlcnZpY2UgPSBuZXcgZWNzLkZhcmdhdGVTZXJ2aWNlKHRoaXMsICdTZXJ2aWNlJywge1xuICAgICAgY2x1c3RlcjogZmFyZ2F0ZUNsdXN0ZXIsXG4gICAgICB0YXNrRGVmaW5pdGlvbjogdGhpcy50YXNrRGVmaW5pdGlvbixcbiAgICAgIG1heEhlYWx0aHlQZXJjZW50OiAyMDAsXG4gICAgICBtaW5IZWFsdGh5UGVyY2VudDogMTAwLFxuICAgICAgZGVzaXJlZENvdW50OiBmYXJnYXRlT3B0aW9ucz8uZGVzaXJlZENvdW50LFxuICAgICAgZGVwbG95bWVudENvbnRyb2xsZXI6IHsgdHlwZTogZWNzLkRlcGxveW1lbnRDb250cm9sbGVyVHlwZS5DT0RFX0RFUExPWSB9LFxuICAgICAgLi4ubG9hZEJhbGFuY2VyT3B0aW9uc0ZvckZhcmdhdGVTZXJ2aWNlLFxuICAgICAgcHJvcGFnYXRlVGFnczogZWNzLlByb3BhZ2F0ZWRUYWdTb3VyY2UuU0VSVklDRSxcbiAgICB9KTtcblxuICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLnNlcnZpY2UuY29ubmVjdGlvbnM7XG5cbiAgICBpZiAobG9hZEJhbGFuY2VyT3B0aW9ucyAhPSBudWxsKSB7XG4gICAgICBjb25zdCBjb250YWluZXJQb3J0ID0gNDQzO1xuICAgICAgdGhpcy5zZXJ2aWNlQ29udGFpbmVyRGVmaW5pdGlvbi5hZGRQb3J0TWFwcGluZ3Moe1xuICAgICAgICBjb250YWluZXJQb3J0OiBjb250YWluZXJQb3J0LFxuICAgICAgICBwcm90b2NvbDogZWNzLlByb3RvY29sLlRDUCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy5ibHVlVGFyZ2V0R3JvdXAgPSBuZXcgZWxidjIuQXBwbGljYXRpb25UYXJnZXRHcm91cCh0aGlzLCAnQmx1ZVRhcmdldEdyb3VwJywge1xuICAgICAgICB2cGM6IHZwYyxcbiAgICAgICAgcG9ydDogY29udGFpbmVyUG9ydCxcbiAgICAgICAgcHJvdG9jb2w6IGVsYnYyLkFwcGxpY2F0aW9uUHJvdG9jb2wuSFRUUFMsXG4gICAgICAgIHRhcmdldFR5cGU6IGVsYnYyLlRhcmdldFR5cGUuSVAsXG4gICAgICAgIHRhcmdldHM6IFt0aGlzLnNlcnZpY2VdLFxuICAgICAgICBoZWFsdGhDaGVjazogbG9hZEJhbGFuY2VyT3B0aW9ucy5oZWFsdGhDaGVjayxcbiAgICAgICAgc2xvd1N0YXJ0OiBwcm9wcy5sb2FkQmFsYW5jZXJPcHRpb25zPy5zbG93U3RhcnQgPz8gdGhpcy5ERUZBVUxUX1NMT1dfU1RBUlQsXG4gICAgICAgIGRlcmVnaXN0cmF0aW9uRGVsYXk6IHByb3BzLmxvYWRCYWxhbmNlck9wdGlvbnM/LmRlcmVnaXN0cmF0aW9uRGVsYXkgPz8gdGhpcy5ERUZBVUxUX0RFUkVHSVNUUkFUSU9OX0RFTEFZLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmdyZWVuVGFyZ2V0R3JvdXAgPSBuZXcgZWxidjIuQXBwbGljYXRpb25UYXJnZXRHcm91cCh0aGlzLCAnR3JlZW5UYXJnZXRHcm91cCcsIHtcbiAgICAgICAgdnBjOiB2cGMsXG4gICAgICAgIHBvcnQ6IGNvbnRhaW5lclBvcnQsXG4gICAgICAgIHByb3RvY29sOiBlbGJ2Mi5BcHBsaWNhdGlvblByb3RvY29sLkhUVFBTLFxuICAgICAgICB0YXJnZXRUeXBlOiBlbGJ2Mi5UYXJnZXRUeXBlLklQLFxuICAgICAgICB0YXJnZXRzOiBbdGhpcy5zZXJ2aWNlXSxcbiAgICAgICAgaGVhbHRoQ2hlY2s6IGxvYWRCYWxhbmNlck9wdGlvbnMuaGVhbHRoQ2hlY2ssXG4gICAgICAgIHNsb3dTdGFydDogcHJvcHMubG9hZEJhbGFuY2VyT3B0aW9ucz8uc2xvd1N0YXJ0ID8/IHRoaXMuREVGQVVMVF9TTE9XX1NUQVJULFxuICAgICAgICBkZXJlZ2lzdHJhdGlvbkRlbGF5OiBwcm9wcy5sb2FkQmFsYW5jZXJPcHRpb25zPy5kZXJlZ2lzdHJhdGlvbkRlbGF5ID8/IHRoaXMuREVGQVVMVF9ERVJFR0lTVFJBVElPTl9ERUxBWSxcbiAgICAgIH0pO1xuXG4gICAgICBsb2FkQmFsYW5jZXJPcHRpb25zLmxpc3RlbmVyUnVsZXMuZm9yRWFjaCgoeyBwcmlvcml0eSwgY29uZGl0aW9ucyB9KSA9PiB7XG4gICAgICAgIGxvYWRCYWxhbmNlck9wdGlvbnMubGlzdGVuZXIuYWRkVGFyZ2V0R3JvdXBzKGBQcmlvcml0eSR7cHJpb3JpdHl9TGlzdGVuZXJSdWxlYCwge1xuICAgICAgICAgIHRhcmdldEdyb3VwczogW3RoaXMuYmx1ZVRhcmdldEdyb3VwIGFzIGVsYnYyLkFwcGxpY2F0aW9uVGFyZ2V0R3JvdXBdLFxuICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICBjb25kaXRpb25zOiBjb25kaXRpb25zLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgICAgaWYgKGJsdWVHcmVlbkRlcGxveW1lbnRDb25maWc/LnRlc3RMaXN0ZW5lcikge1xuICAgICAgICBsb2FkQmFsYW5jZXJPcHRpb25zLmxpc3RlbmVyUnVsZXMuZm9yRWFjaCgoeyBwcmlvcml0eSwgY29uZGl0aW9ucyB9KSA9PiB7XG4gICAgICAgICAgYmx1ZUdyZWVuRGVwbG95bWVudENvbmZpZy50ZXN0TGlzdGVuZXI/LmFkZFRhcmdldEdyb3VwcyhgUHJpb3JpdHkke3ByaW9yaXR5fUxpc3RlbmVyUnVsZWAsIHtcbiAgICAgICAgICAgIHRhcmdldEdyb3VwczogW3RoaXMuZ3JlZW5UYXJnZXRHcm91cCBhcyBlbGJ2Mi5BcHBsaWNhdGlvblRhcmdldEdyb3VwXSxcbiAgICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICAgIGNvbmRpdGlvbnM6IGNvbmRpdGlvbnMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBlY3NEZXBsb3ltZW50R3JvdXAgPSBuZXcgY29kZWRlcGxveS5FY3NEZXBsb3ltZW50R3JvdXAodGhpcywgJ0RlcGxveW1lbnRHcm91cCcsIHtcbiAgICAgICAgc2VydmljZTogdGhpcy5zZXJ2aWNlLFxuICAgICAgICBibHVlR3JlZW5EZXBsb3ltZW50Q29uZmlnOiB7XG4gICAgICAgICAgYmx1ZVRhcmdldEdyb3VwOiB0aGlzLmJsdWVUYXJnZXRHcm91cCxcbiAgICAgICAgICBncmVlblRhcmdldEdyb3VwOiB0aGlzLmdyZWVuVGFyZ2V0R3JvdXAsXG4gICAgICAgICAgbGlzdGVuZXI6IGxvYWRCYWxhbmNlck9wdGlvbnMubGlzdGVuZXIsXG4gICAgICAgICAgdGVzdExpc3RlbmVyOiBibHVlR3JlZW5EZXBsb3ltZW50Q29uZmlnPy50ZXN0TGlzdGVuZXIsXG4gICAgICAgIH0sXG4gICAgICAgIGRlcGxveW1lbnRDb25maWc6IGNvZGVkZXBsb3kuRWNzRGVwbG95bWVudENvbmZpZy5DQU5BUllfMTBQRVJDRU5UXzVNSU5VVEVTLFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGNyZWF0ZURlcGxveW1lbnRMYW1iZGEgPSBuZXcgbGFtYmRhLkZ1bmN0aW9uKHRoaXMsICdDcmVhdGVEZXBsb3ltZW50TGFtYmRhJywge1xuICAgICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQoam9pbihfX2Rpcm5hbWUsICdjb2RlZGVwbG95LWN1c3RvbS1yZXNvdXJjZXMnKSwge1xuICAgICAgICAgIGV4Y2x1ZGU6IFsnKi5qcycsICcqLmQudHMnXSxcbiAgICAgICAgfSksXG4gICAgICAgIGhhbmRsZXI6ICdjcmVhdGUtZGVwbG95bWVudC1vbi1jcmVhdGUuaGFuZGxlcicsXG4gICAgICAgIHJ1bnRpbWU6IERFRkFVTFRfTk9ERV9SVU5USU1FLFxuICAgICAgICBhcmNoaXRlY3R1cmU6IGxhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgICB0aW1lb3V0OiBjZGsuRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgICAgbG9nR3JvdXA6IG5ldyBsb2dzLkxvZ0dyb3VwKHRoaXMsICdDcmVhdGVEZXBsb3ltZW50TGFtYmRhTG9nR3JvdXAnLCB7XG4gICAgICAgICAgcmV0ZW50aW9uOiBsb2dzLlJldGVudGlvbkRheXMuT05FX1dFRUssXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG4gICAgICBjcmVhdGVEZXBsb3ltZW50TGFtYmRhLmFkZFRvUm9sZVBvbGljeShcbiAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFsnY29kZWRlcGxveTpHZXRBcHBsaWNhdGlvblJldmlzaW9uJywgJ2NvZGVkZXBsb3k6UmVnaXN0ZXJBcHBsaWNhdGlvblJldmlzaW9uJ10sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbZWNzRGVwbG95bWVudEdyb3VwLmFwcGxpY2F0aW9uLmFwcGxpY2F0aW9uQXJuXSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICBjcmVhdGVEZXBsb3ltZW50TGFtYmRhLmFkZFRvUm9sZVBvbGljeShcbiAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFsnY29kZWRlcGxveTpDcmVhdGVEZXBsb3ltZW50JywgJ2NvZGVkZXBsb3k6U3RvcERlcGxveW1lbnQnLCAnY29kZWRlcGxveTpHZXREZXBsb3ltZW50J10sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbZWNzRGVwbG95bWVudEdyb3VwLmRlcGxveW1lbnRHcm91cEFybl0sXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgY3JlYXRlRGVwbG95bWVudExhbWJkYS5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBhY3Rpb25zOiBbJ2NvZGVkZXBsb3k6R2V0RGVwbG95bWVudENvbmZpZyddLFxuICAgICAgICAgIHJlc291cmNlczogW2Vjc0RlcGxveW1lbnRHcm91cC5kZXBsb3ltZW50Q29uZmlnLmRlcGxveW1lbnRDb25maWdBcm5dLFxuICAgICAgICB9KVxuICAgICAgKTtcblxuICAgICAgY29uc3QgaXNDb21wbGV0ZURlcGxveW1lbnRMYW1iZGEgPSBuZXcgbGFtYmRhLkZ1bmN0aW9uKHRoaXMsICdJc0NvbXBsZXRlRGVwbG95bWVudExhbWJkYScsIHtcbiAgICAgICAgY29kZTogbGFtYmRhLkNvZGUuZnJvbUFzc2V0KGpvaW4oX19kaXJuYW1lLCAnY29kZWRlcGxveS1jdXN0b20tcmVzb3VyY2VzJyksIHtcbiAgICAgICAgICBleGNsdWRlOiBbJyouanMnLCAnKi5kLnRzJ10sXG4gICAgICAgIH0pLFxuICAgICAgICBoYW5kbGVyOiAnY3JlYXRlLWRlcGxveW1lbnQtaXMtY29tcGxldGUuaGFuZGxlcicsXG4gICAgICAgIHJ1bnRpbWU6IERFRkFVTFRfTk9ERV9SVU5USU1FLFxuICAgICAgICBhcmNoaXRlY3R1cmU6IGxhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgICB0aW1lb3V0OiBjZGsuRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgICAgbG9nR3JvdXA6IG5ldyBsb2dzLkxvZ0dyb3VwKHRoaXMsICdJc0NvbXBsZXRlRGVwbG95bWVudExhbWJkYUxvZ0dyb3VwJywge1xuICAgICAgICAgIHJldGVudGlvbjogbG9ncy5SZXRlbnRpb25EYXlzLk9ORV9XRUVLLFxuICAgICAgICB9KSxcbiAgICAgIH0pO1xuICAgICAgaXNDb21wbGV0ZURlcGxveW1lbnRMYW1iZGEuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgYWN0aW9uczogWydjb2RlZGVwbG95OkdldERlcGxveW1lbnQnXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtlY3NEZXBsb3ltZW50R3JvdXAuZGVwbG95bWVudEdyb3VwQXJuXSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICBjb25zdCBjcmVhdGVEZXBsb3ltZW50TGFtYmRhUHJvdmlkZXIgPSBuZXcgY3IuUHJvdmlkZXIodGhpcywgJ0NyZWF0ZURlcGxveW1lbnRQcm92aWRlcicsIHtcbiAgICAgICAgb25FdmVudEhhbmRsZXI6IGNyZWF0ZURlcGxveW1lbnRMYW1iZGEsXG4gICAgICAgIGlzQ29tcGxldGVIYW5kbGVyOiBpc0NvbXBsZXRlRGVwbG95bWVudExhbWJkYSxcbiAgICAgICAgdG90YWxUaW1lb3V0OiBjZGsuRHVyYXRpb24ubWludXRlcyg2MCksXG4gICAgICB9KTtcbiAgICAgIGxldCBydW5Nb25pdG9yaW5nVGVzdFN1aXRlUnVubmVyTGFtYmRhOiBub2RlanNsYW1iZGEuTm9kZWpzRnVuY3Rpb24gfCB1bmRlZmluZWQ7XG4gICAgICBpZiAoYmx1ZUdyZWVuRGVwbG95bWVudENvbmZpZz8uY2FwYWJpbGl0eU5hbWVzKSB7XG4gICAgICAgIC8vIHJ1bk1vbml0b3JpbmdUZXN0U3VpdGVSdW5uZXJMYW1iZGEgPSBuZXcgbm9kZWpzbGFtYmRhLk5vZGVqc0Z1bmN0aW9uKHRoaXMsICdSdW5Nb25pdG9yaW5nVGVzdFN1aXRlUnVubmVyTGFtYmRhJywge1xuICAgICAgICAvLyAgIGVudHJ5OiAnLi9zcmMvZmFyZ2F0ZS9jb2RlZGVwbG95LWN1c3RvbS1yZXNvdXJjZXMvcnVuLW1vbml0b3JpbmctdGVzdC1zdWl0ZS1ydW5uZXIudHMnLFxuICAgICAgICAvLyAgIGhhbmRsZXI6ICdoYW5kbGVyJyxcbiAgICAgICAgLy8gICB0aW1lb3V0OiBjZGsuRHVyYXRpb24ubWludXRlcyg1KSxcbiAgICAgICAgLy8gICBydW50aW1lOiBERUZBVUxUX05PREVfUlVOVElNRSxcbiAgICAgICAgLy8gICBlbnZpcm9ubWVudDoge1xuICAgICAgICAvLyAgICAgQ0FQQUJJTElUSUVTX05BTUU6IGJsdWVHcmVlbkRlcGxveW1lbnRDb25maWcuY2FwYWJpbGl0eU5hbWVzLmpvaW4oJywnKSxcbiAgICAgICAgLy8gICAgIFNVQk5FVFM6IHZwYy5zZWxlY3RTdWJuZXRzKHsgc3VibmV0VHlwZTogZWMyLlN1Ym5ldFR5cGUuUFJJVkFURV9XSVRIX0VHUkVTUyB9KS5zdWJuZXRJZHMuam9pbignLCcpLFxuICAgICAgICAvLyAgIH0sXG4gICAgICAgIC8vIH0pO1xuICAgICAgICBydW5Nb25pdG9yaW5nVGVzdFN1aXRlUnVubmVyTGFtYmRhID0gbmV3IGxhbWJkYS5GdW5jdGlvbih0aGlzLCAnUnVuTW9uaXRvcmluZ1Rlc3RTdWl0ZVJ1bm5lckxhbWJkYScsIHtcbiAgICAgICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQoam9pbihfX2Rpcm5hbWUsICdjb2RlZGVwbG95LWN1c3RvbS1yZXNvdXJjZXMnKSwge1xuICAgICAgICAgICAgZXhjbHVkZTogWycqLmpzJywgJyouZC50cyddLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGhhbmRsZXI6ICdydW4tbW9uaXRvcmluZy10ZXN0LXN1aXRlLXJ1bm5lci5oYW5kbGVyJyxcbiAgICAgICAgICBydW50aW1lOiBERUZBVUxUX05PREVfUlVOVElNRSxcbiAgICAgICAgICBhcmNoaXRlY3R1cmU6IGxhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0LFxuICAgICAgICAgIHRpbWVvdXQ6IGNkay5EdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgICAgIGxvZ0dyb3VwOiBuZXcgbG9ncy5Mb2dHcm91cCh0aGlzLCAnUnVuTW9uaXRvcmluZ1Rlc3RTdWl0ZVJ1bm5lckxhbWJkYXJMb2dHcm91cCcsIHtcbiAgICAgICAgICAgIHJldGVudGlvbjogbG9ncy5SZXRlbnRpb25EYXlzLk9ORV9XRUVLLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgICAgICBDQVBBQklMSVRJRVNfTkFNRTogYmx1ZUdyZWVuRGVwbG95bWVudENvbmZpZy5jYXBhYmlsaXR5TmFtZXMuam9pbignLCcpLFxuICAgICAgICAgICAgU1VCTkVUUzogdnBjLnNlbGVjdFN1Ym5ldHMoeyBzdWJuZXRUeXBlOiBlYzIuU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTIH0pLnN1Ym5ldElkcy5qb2luKCcsJyksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHJlZ2lvbiA9IGNkay5TdGFjay5vZihzY29wZSkucmVnaW9uO1xuICAgICAgICBjb25zdCBhY2NvdW50ID0gY2RrLlN0YWNrLm9mKHNjb3BlKS5hY2NvdW50O1xuICAgICAgICBydW5Nb25pdG9yaW5nVGVzdFN1aXRlUnVubmVyTGFtYmRhLmFkZFRvUm9sZVBvbGljeShcbiAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICBhY3Rpb25zOiBbJ2VjczpSdW5UYXNrJ10sXG4gICAgICAgICAgICByZXNvdXJjZXM6IFtgYXJuOmF3czplY3M6JHtyZWdpb259OiR7YWNjb3VudH06dGFzay1kZWZpbml0aW9uL21vbml0b3JpbmctdGVzdHN1aXRlLXJ1bm5lcipgXSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICBydW5Nb25pdG9yaW5nVGVzdFN1aXRlUnVubmVyTGFtYmRhLmFkZFRvUm9sZVBvbGljeShcbiAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICBhY3Rpb25zOiBbJ2VjczpMaXN0Q0x1c3RlcnMnLCAnZWNzOkxpc3RUYXNrRGVmaW5pdGlvbnMnXSxcbiAgICAgICAgICAgIHJlc291cmNlczogWycqJ10sXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgICAgcnVuTW9uaXRvcmluZ1Rlc3RTdWl0ZVJ1bm5lckxhbWJkYS5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgYWN0aW9uczogWydpYW06UGFzc1JvbGUnXSxcbiAgICAgICAgICAgIHJlc291cmNlczogW2Bhcm46YXdzOmlhbTo6JHthY2NvdW50fTpyb2xlL21vbml0b3JpbmctdGVzdHN1aXRlKmBdLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIG5ldyBjZGsuQ3VzdG9tUmVzb3VyY2UodGhpcywgJ0NyZWF0ZURlcGxveW1lbnQnLCB7XG4gICAgICAgIHNlcnZpY2VUb2tlbjogY3JlYXRlRGVwbG95bWVudExhbWJkYVByb3ZpZGVyLnNlcnZpY2VUb2tlbixcbiAgICAgICAgcHJvcGVydGllczoge1xuICAgICAgICAgIEFwcGxpY2F0aW9uTmFtZTogZWNzRGVwbG95bWVudEdyb3VwLmFwcGxpY2F0aW9uLmFwcGxpY2F0aW9uTmFtZSxcbiAgICAgICAgICBEZXBsb3ltZW50R3JvdXBOYW1lOiBlY3NEZXBsb3ltZW50R3JvdXAuZGVwbG95bWVudEdyb3VwTmFtZSxcbiAgICAgICAgICBUYXNrRGVmaW5pdGlvbkFybjogdGhpcy50YXNrRGVmaW5pdGlvbi50YXNrRGVmaW5pdGlvbkFybixcbiAgICAgICAgICBDb250YWluZXJOYW1lOiBzZXJ2aWNlTmFtZSxcbiAgICAgICAgICBDb250YWluZXJQb3J0OiBjb250YWluZXJQb3J0LFxuICAgICAgICAgIEFmdGVyQWxsb3dUZXN0VHJhZmZpY0hvb2s6IHJ1bk1vbml0b3JpbmdUZXN0U3VpdGVSdW5uZXJMYW1iZGE/LmZ1bmN0aW9uQXJuLFxuICAgICAgICB9LFxuICAgICAgfSk7XG4gICAgfVxuICB9XG59XG5cbmNsYXNzIERlbnlMaXN0ZWRLZXlWYWxpZGF0b3IgaW1wbGVtZW50cyBjb25zdHJ1Y3RzLklWYWxpZGF0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZW55TGlzdDogc3RyaW5nW10sXG4gICAgcHJpdmF0ZSByZWFkb25seSBkaWN0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgdW5kZWZpbmVkLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZUdlbmVyYXRvcjogKGtleU5hbWU6IHN0cmluZykgPT4gc3RyaW5nXG4gICkge31cblxuICB2YWxpZGF0ZSgpOiBzdHJpbmdbXSB7XG4gICAgaWYgKCF0aGlzLmRpY3QpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW107XG4gICAgdGhpcy5kZW55TGlzdC5mb3JFYWNoKGtleU5hbWUgPT4ge1xuICAgICAgaWYgKHRoaXMuZGljdCAmJiBrZXlOYW1lIGluIHRoaXMuZGljdCkge1xuICAgICAgICByZXN1bHQucHVzaCh0aGlzLm1lc3NhZ2VHZW5lcmF0b3Ioa2V5TmFtZSkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG5jbGFzcyBDbHVzdGVyVnBjVmFsaWRhdG9yIGltcGxlbWVudHMgY29uc3RydWN0cy5JVmFsaWRhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgdnBjOiBlYzIuSVZwYyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNsdXN0ZXI/OiBlY3MuSUNsdXN0ZXJcbiAgKSB7fVxuXG4gIHZhbGlkYXRlKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBpZiAodGhpcy5jbHVzdGVyICYmIHRoaXMuY2x1c3Rlci52cGMudnBjSWQgIT09IHRoaXMudnBjLnZwY0lkKSB7XG4gICAgICByZXN1bHQucHVzaChcbiAgICAgICAgYFRoZSBWUEMgcHJvdmlkZWQgaW4gdGhlIGNsdXN0ZXIgKCR7dGhpcy5jbHVzdGVyLnZwYy5ub2RlLmlkfSkgTVVTVCBtYXRjaCB0aGUgVlBDIHByb3ZpZGVkIGFzIGFyZ3VtZW50ICgke3RoaXMudnBjLm5vZGUuaWR9KS5gXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG4iXX0=
|
|
378
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmlvLWZhcmdhdGUtc2VydmljZS1ibHVlLWdyZWVuLWFscGhhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZhcmdhdGUvcmlvLWZhcmdhdGUtc2VydmljZS1ibHVlLWdyZWVuLWFscGhhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEseUNBQWlDO0FBQ2pDLG1DQUFtQztBQUNuQyx5REFBeUQ7QUFDekQsMkNBQTJDO0FBQzNDLDJDQUEyQztBQUMzQyxnRUFBZ0U7QUFDaEUsMkNBQTJDO0FBQzNDLGlEQUFpRDtBQUVqRCw2Q0FBNkM7QUFDN0MsMkNBQTJDO0FBQzNDLG1EQUFtRDtBQUNuRCx5Q0FBeUM7QUFDekMsNENBQW9EO0FBQ3BELDRDQUFtRDtBQUNuRCxxQ0FBcUM7QUFDckMsK0RBTytCO0FBQy9CLHFDQUFrQztBQUNsQyxxREFBOEY7QUFnRjlGLE1BQWEsK0JBQWdDLFNBQVEsVUFBVSxDQUFDLFNBQVM7SUF3Q3ZFLFlBQVksS0FBMkIsRUFBRSxFQUFVLEVBQUUsS0FBMkM7UUFDOUYsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQTNCRix3Q0FBbUMsR0FBYSxFQUFFLENBQUM7UUFDbkQsZ0NBQTJCLEdBQUcsRUFBRSxDQUFDO1FBQ2pDLDZDQUF3QyxHQUFHLEdBQUcsQ0FBQztRQUMvQyxzQ0FBaUMsR0FBRyxJQUFJLENBQUM7UUFDekMscUNBQWdDLEdBQUcsd0NBQWtCLENBQUMsZ0JBQWdCLENBQUM7UUFDdkUsNkNBQXdDLEdBQUcsd0NBQWtCLENBQUMsSUFBSSxDQUFDO1FBQ25FLGlDQUE0QixHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELHVCQUFrQixHQUFHLFNBQVMsQ0FBQztRQUMvQixnQ0FBMkIsR0FBRyxRQUFRLENBQUM7UUFFdkMsbUJBQWMsR0FBRyxFQUFFLENBQUM7UUFDcEIsZ0NBQTJCLEdBQUcsRUFBRSxDQUFDO1FB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QUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUM5RCxNQUFNLENBQUMsSUFBSSxDQUNULG9DQUFvQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSw4Q0FBOEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQy9ILENBQUM7UUFDSixDQUFDO1FBQ0QsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgam9pbiB9IGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0ICogYXMgY29kZWRlcGxveSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtY29kZWRlcGxveSc7XG5pbXBvcnQgKiBhcyBlYzIgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgKiBhcyBlY3MgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjcyc7XG5pbXBvcnQgKiBhcyBlbGJ2MiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWxhc3RpY2xvYWRiYWxhbmNpbmd2Mic7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBsYW1iZGEgZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQgdHlwZSAqIGFzIG5vZGVqc2xhbWJkYSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhLW5vZGVqcyc7XG5pbXBvcnQgKiBhcyBsb2dzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1sb2dzJztcbmltcG9ydCAqIGFzIHNzbSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3NtJztcbmltcG9ydCAqIGFzIGNyIGZyb20gJ2F3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXMnO1xuaW1wb3J0ICogYXMgY29uc3RydWN0cyBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IERFRkFVTFRfTk9ERV9SVU5USU1FIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7IERhdGFkb2dTaGFyZWRTZWNyZXQgfSBmcm9tICcuLi9kYXRhZG9ndjInO1xuaW1wb3J0ICogYXMgZGF0YWRvZyBmcm9tICcuL2RhdGFkb2cnO1xuaW1wb3J0IHtcbiAgdHlwZSBDb250YWluZXJEZWZpbml0aW9uT3B0aW9ucyxcbiAgRGF0YURvZ0xvZ2dpbmdNb2RlLFxuICB0eXBlIERhdGFkb2dJbnRlZ3JhdGlvblByb3BzLFxuICB0eXBlIEZhcmdhdGVUYXNrRGVmaW5pdGlvblByb3BzLFxuICBGcmFtZXdvcmssXG4gIHR5cGUgTG9hZEJhbGFuY2VyT3B0aW9ucyxcbn0gZnJvbSAnLi9yaW8tZmFyZ2F0ZS1zZXJ2aWNlJztcbmltcG9ydCB7IFNwcmluZyB9IGZyb20gJy4vc3ByaW5nJztcbmltcG9ydCB7IGFkZFRyYWNlU2FtcGxpbmdFbnZpcm9ubWVudFdhcm5pbmcsIFRyYWNlU2FtcGxpbmdWYWxpZGF0b3IgfSBmcm9tICcuL3RyYWNlLXNhbXBsaW5nJztcblxuLyoqXG4gKiBGYXJnYXRlIFRhc2sgRGVmaW5pdGlvbiBQcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJpb0ZhcmdhdGVTZXJ2aWNlQmx1ZUdyZWVuQWxwaGFQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgc3RhZ2Ugb2YgdGhlIHNlcnZpY2UsIGUuZy4gJ3Byb2QnLlxuICAgKi9cbiAgcmVhZG9ubHkgc3RhZ2U6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIE5hbWUgb2YgdGhlIHNlcnZpY2UuXG4gICAqL1xuICByZWFkb25seSBzZXJ2aWNlTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgc2VydmljZSwgZS5nLiB0aGUgZ2l0IGhhc2ggb2YgdGhlIGNvcnJlc3BvbmRpbmcgY29tbWl0LlxuICAgKi9cbiAgcmVhZG9ubHkgdmVyc2lvbjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZnJhbWV3b3JrcyBpbiB1c2VzLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIC0gTm8gZnJhbWV3b3Jrcy5cbiAgICovXG4gIHJlYWRvbmx5IGZyYW1ld29ya3M/OiBGcmFtZXdvcmtbXTtcblxuICAvKipcbiAgICogVGhlIFZQQyBvZiB0aGUgc2VydmljZSdzIGVjcy5DbHVzdGVyIGlmIG5vIGNsdXN0ZXIgaXMgZXhwbGljaXRseSBwYXNzZWQgYXMgcHJvcC5cbiAgICovXG4gIHJlYWRvbmx5IHZwYzogZWMyLklWcGM7XG5cbiAgLyoqXG4gICAqIFRoZSBGYXJnYXRlIGNsdXN0ZXIgdG8gcnVuIHRoZSBzZXJ2aWNlIGluLlxuICAgKiBJZiBub3QgbnVsbCwgdGhlIGNsdXN0ZXIudnBjIE1VU1QgbWF0Y2ggdGhlIHZwYyBwcm92aWRlZCBhcyBkaXJlY3QgYXJndW1lbnQuXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgLSBDcmVhdGUgYSBuZXcgRmFyZ2F0ZSBjbHVzdGVyIHdpdGggZGVmYXVsdCBwcm9wZXJ0aWVzXG4gICAqL1xuICByZWFkb25seSBjbHVzdGVyPzogZWNzLklDbHVzdGVyO1xuXG4gIC8qKlxuICAgKiBDb250YWluZXIgZGVmaW5pdGlvbiBvcHRpb25zIGxpa2UgaW1hZ2UsIGNwdSwgbWVtb3J5LlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGFpbmVyRGVmaW5pdGlvbk9wdGlvbjogQ29udGFpbmVyRGVmaW5pdGlvbk9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIEZhcmdhdGUgVGFzayBEZWZpbml0aW9uIFByb3BlcnRpZXMuXG4gICAqL1xuICByZWFkb25seSBmYXJnYXRlT3B0aW9uczogRmFyZ2F0ZVRhc2tEZWZpbml0aW9uUHJvcHM7XG5cbiAgLyoqXG4gICAqIExvYWRiYWxhbmNlciBvcHRpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9hZEJhbGFuY2VyT3B0aW9ucz86IExvYWRCYWxhbmNlck9wdGlvbnM7XG5cbiAgLyoqXG4gICAqIERhdGFkb2cgaW50ZWdyYXRpb24gcHJvcGVydGllc1xuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWRvZ09wdGlvbnM/OiBEYXRhZG9nSW50ZWdyYXRpb25Qcm9wcztcblxuICAvKipcbiAgICogQmx1ZSBncmVlbiBkZXBsb3ltZW50IGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHJlYWRvbmx5IGJsdWVHcmVlbkRlcGxveW1lbnRDb25maWc/OiBCbHVlR3JlZW5EZXBsb3ltZW50Q29uZmlnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEJsdWVHcmVlbkRlcGxveW1lbnRDb25maWcge1xuICAvKipcbiAgICogVGhlIHRhcmdldCBncm91cCB0byBhc3NvY2lhdGUgd2l0aCB0aGUgcmVwbGFjZW1lbnQgdGFzayBzZXQgZm9yIHRlc3RpbmcgYmVmb3JlIHByb21vdGluZyB0cmFmZmljIHRvIHByb2R1Y3Rpb24uXG4gICAqIEBkZWZhdWx0IC0gTm8gdGFyZ2V0IGdyb3VwLlxuICAgKi9cbiAgcmVhZG9ubHkgdGVzdExpc3RlbmVyPzogZWxidjIuSUFwcGxpY2F0aW9uTGlzdGVuZXI7XG5cbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIGNhcGFiaWxpdGllcyB0byBydW4gd2l0aCB0aGUgbW9uaXRvcmluZyB0ZXN0IHN1aXRlIHJ1bm5lciB0ZXN0aW5nXG4gICAqL1xuICByZWFkb25seSBjYXBhYmlsaXR5TmFtZXM/OiBzdHJpbmdbXTtcbn1cblxuZXhwb3J0IGNsYXNzIFJpb0ZhcmdhdGVTZXJ2aWNlQmx1ZUdyZWVuQWxwaGEgZXh0ZW5kcyBjb25zdHJ1Y3RzLkNvbnN0cnVjdCBpbXBsZW1lbnRzIGVjMi5JQ29ubmVjdGFibGUge1xuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERF9FTlZfREVOWV9MSVNUID0gWydERF9FTlYnLCAnRERfVEFHUycsICdERF9TRVJWSUNFJywgJ0REX1ZFUlNJT04nLCAnRERfTE9HU19JTkpFQ1RJT04nXTtcblxuICBwcml2YXRlIHN0YXRpYyByZWFkb25seSBERF9UQUdfREVOWV9MSVNUID0gW1xuICAgICdlbnYnLFxuICAgICdzZXJ2aWNlJyxcbiAgICAndmVyc2lvbicsXG4gICAgJ2FjY291bnRfaWQnLFxuICAgICdhY2NvdW50X25hbWUnLFxuICAgICdyZWdpb24nLFxuICAgICd0ZWFtJyxcbiAgICAndGVhbV9pZGVudGlmaWVyJyxcbiAgXTtcblxuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfQVBNX0dFVF9FTkRQT0lOVFNfVE9fSUdOT1JFOiBzdHJpbmdbXSA9IFtdO1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfREFUQURPR19TSURFQ0FSX0NQVSA9IDY0O1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfREFUQURPR19TSURFQ0FSX01FTU9SWV9MSU1JVF9NSUIgPSAxMjg7XG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9EQVRBRE9HX1NJREVDQVJfRVNTRU5USUFMID0gdHJ1ZTtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX0xPR0dJTkdfTU9ERV9GT1JfU0VSVklDRSA9IERhdGFEb2dMb2dnaW5nTW9kZS5GT1JXQVJERVJfTEFNQkRBO1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfTE9HR0lOR19NT0RFX0ZPUl9EQVRBRE9HX1NJREVDQVIgPSBEYXRhRG9nTG9nZ2luZ01vZGUuTk9ORTtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX0RFUkVHSVNUUkFUSU9OX0RFTEFZID0gY2RrLkR1cmF0aW9uLnNlY29uZHMoNSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9TTE9XX1NUQVJUID0gdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfREFUQURPR19TSURFQ0FSX1RBRyA9ICdsYXRlc3QnO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgTE9HX1JPVVRFUl9DUFUgPSA2NDtcbiAgcHJpdmF0ZSByZWFkb25seSBMT0dfUk9VVEVSX01FTU9SWV9MSU1JVF9NSUIgPSA2NDtcblxuICBwcml2YXRlIHJlYWRvbmx5IEZJUkVMRU5TX0NPTkZJR19CVUNLRVRfQVJOID0gJ2Fybjphd3M6czM6Ojo1NzcxNDY4OTc3ODUtZXUtd2VzdC0xLWZpcmVsZW5zLWNvbmZpZ3VyYXRpb24tYnVja2V0JztcbiAgcHJpdmF0ZSByZWFkb25seSBGSVJFTEVOU19DT05GSUdfRklMRV9QQVRIID0gJy9wYXJzZS1qc29uLmNvbmYnO1xuXG4gIHJlYWRvbmx5IHNlcnZpY2VDb250YWluZXJEZWZpbml0aW9uOiBlY3MuQ29udGFpbmVyRGVmaW5pdGlvbjtcbiAgcmVhZG9ubHkgZGF0YWRvZ1NpZGVDYXJDb250YWluZXJEZWZpbml0aW9uOiBlY3MuQ29udGFpbmVyRGVmaW5pdGlvbjtcbiAgcmVhZG9ubHkgbG9nUm91dGVyQ29udGFpbmVyRGVmaW5pdGlvbj86IGVjcy5Db250YWluZXJEZWZpbml0aW9uO1xuICByZWFkb25seSB0YXNrRGVmaW5pdGlvbjogZWNzLkZhcmdhdGVUYXNrRGVmaW5pdGlvbjtcblxuICByZWFkb25seSBjb25uZWN0aW9uczogZWMyLkNvbm5lY3Rpb25zO1xuICByZWFkb25seSBzZXJ2aWNlOiBlY3MuRmFyZ2F0ZVNlcnZpY2U7XG4gIHJlYWRvbmx5IGJsdWVUYXJnZXRHcm91cDogZWxidjIuQXBwbGljYXRpb25UYXJnZXRHcm91cCB8IHVuZGVmaW5lZDtcbiAgcmVhZG9ubHkgZ3JlZW5UYXJnZXRHcm91cDogZWxidjIuQXBwbGljYXRpb25UYXJnZXRHcm91cCB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSaW9GYXJnYXRlU2VydmljZUJsdWVHcmVlbkFscGhhUHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgY29uc3Qge1xuICAgICAgbG9hZEJhbGFuY2VyT3B0aW9ucyxcbiAgICAgIHZwYyxcbiAgICAgIGNsdXN0ZXIsXG4gICAgICBmYXJnYXRlT3B0aW9ucyxcbiAgICAgIGRhdGFkb2dPcHRpb25zLFxuICAgICAgc2VydmljZU5hbWUsXG4gICAgICBjb250YWluZXJEZWZpbml0aW9uT3B0aW9uLFxuICAgICAgc3RhZ2UsXG4gICAgICB2ZXJzaW9uLFxuICAgICAgZnJhbWV3b3JrcyxcbiAgICAgIGJsdWVHcmVlbkRlcGxveW1lbnRDb25maWcsXG4gICAgfSA9IHByb3BzO1xuXG4gICAgdGhpcy5ub2RlLmFkZFZhbGlkYXRpb24oXG4gICAgICBuZXcgRGVueUxpc3RlZEtleVZhbGlkYXRvcihcbiAgICAgICAgUmlvRmFyZ2F0ZVNlcnZpY2VCbHVlR3JlZW5BbHBoYS5ERF9FTlZfREVOWV9MSVNULFxuICAgICAgICBwcm9wcy5jb250YWluZXJEZWZpbml0aW9uT3B0aW9uLmVudmlyb25tZW50LFxuICAgICAgICBpdCA9PlxuICAgICAgICAgIGBFbnZpcm9ubWVudCAke2l0fSBpcyBub3QgYWxsb3dlZCB0byBiZSBzZXQuIFRoaXMgdmFsdWUgd2lsbCBiZSBpbmZlcnJlZCBmcm9tIHRoZSBhY2NvdW50IG9yIG90aGVyIHByb3BlcnRpZXMuYFxuICAgICAgKVxuICAgICk7XG4gICAgdGhpcy5ub2RlLmFkZFZhbGlkYXRpb24oXG4gICAgICBuZXcgRGVueUxpc3RlZEtleVZhbGlkYXRvcihcbiAgICAgICAgUmlvRmFyZ2F0ZVNlcnZpY2VCbHVlR3JlZW5BbHBoYS5ERF9UQUdfREVOWV9MSVNULFxuICAgICAgICBwcm9wcy5kYXRhZG9nT3B0aW9ucz8uYWRkaXRpb25hbFRhZ3MsXG4gICAgICAgIGl0ID0+IGBUYWcgJHtpdH0gaXMgbm90IGFsbG93ZWQgdG8gYmUgc2V0LiBUaGlzIHZhbHVlIHdpbGwgYmUgaW5mZXJyZWQgZnJvbSB0aGUgYWNjb3VudCBvciBvdGhlciBwcm9wZXJ0aWVzLmBcbiAgICAgIClcbiAgICApO1xuXG4gICAgdGhpcy5ub2RlLmFkZFZhbGlkYXRpb24obmV3IENsdXN0ZXJWcGNWYWxpZGF0b3IocHJvcHMudnBjLCBwcm9wcy5jbHVzdGVyKSk7XG4gICAgdGhpcy5ub2RlLmFkZFZhbGlkYXRpb24obmV3IFRyYWNlU2FtcGxpbmdWYWxpZGF0b3IocHJvcHMuZGF0YWRvZ09wdGlvbnM/LnRyYWNlU2FtcGxpbmcpKTtcbiAgICBhZGRUcmFjZVNhbXBsaW5nRW52aXJvbm1lbnRXYXJuaW5nKHRoaXMsIHByb3BzLmNvbnRhaW5lckRlZmluaXRpb25PcHRpb24uZW52aXJvbm1lbnQpO1xuXG4gICAgY29uc3QgZmFyZ2F0ZUNsdXN0ZXIgPVxuICAgICAgY2x1c3RlciA/P1xuICAgICAgbmV3IGVjcy5DbHVzdGVyKHRoaXMsICdDbHVzdGVyJywge1xuICAgICAgICB2cGM6IHZwYyxcbiAgICAgIH0pO1xuICAgIHRoaXMudGFza0RlZmluaXRpb24gPSBuZXcgZWNzLkZhcmdhdGVUYXNrRGVmaW5pdGlvbih0aGlzLCAnVGFza0RlZmluaXRpb24nLCB7XG4gICAgICBjcHU6IGZhcmdhdGVPcHRpb25zLmNwdSxcbiAgICAgIG1lbW9yeUxpbWl0TWlCOiBmYXJnYXRlT3B0aW9ucy5tZW1vcnlMaW1pdE1pQixcbiAgICAgIHJ1bnRpbWVQbGF0Zm9ybToge1xuICAgICAgICBjcHVBcmNoaXRlY3R1cmU6IGZhcmdhdGVPcHRpb25zLnJ1bnRpbWVQbGF0Zm9ybT8uY3B1QXJjaGl0ZWN0dXJlID8/IGVjcy5DcHVBcmNoaXRlY3R1cmUuWDg2XzY0LFxuICAgICAgICBvcGVyYXRpbmdTeXN0ZW1GYW1pbHk6IGZhcmdhdGVPcHRpb25zLnJ1bnRpbWVQbGF0Zm9ybT8ub3BlcmF0aW5nU3lzdGVtRmFtaWx5ID8/IGVjcy5PcGVyYXRpbmdTeXN0ZW1GYW1pbHkuTElOVVgsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IGFjY291bnROYW1lID0gc3NtLlN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyTmFtZShcbiAgICAgIHRoaXMsXG4gICAgICAnQWNjb3VudE5hbWUnLFxuICAgICAgJy9jb25maWcvYWNjb3VudC9uYW1lJ1xuICAgICkuc3RyaW5nVmFsdWU7XG4gICAgY29uc3QgdGVhbU5hbWUgPSBzc20uU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJOYW1lKHRoaXMsICdUZWFtTmFtZScsICcvY29uZmlnL3RlYW0vbmFtZScpLnN0cmluZ1ZhbHVlO1xuICAgIGNvbnN0IHRlYW1JZGVudGlmaWVyID0gc3NtLlN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyTmFtZShcbiAgICAgIHRoaXMsXG4gICAgICAnVGVhbUlkZW50aWZpZXInLFxuICAgICAgJy9jb25maWcvdGVhbS9pZGVudGlmaWVyJ1xuICAgICkuc3RyaW5nVmFsdWU7XG5cbiAgICBjb25zdCBkYXRhZG9nU2VjcmV0ID0gRGF0YWRvZ1NoYXJlZFNlY3JldC5jcmVkZW50aWFsc1NlY3JldCh0aGlzKTtcbiAgICBjb25zdCBkYXRhZG9nU2l0ZSA9IGRhdGFkb2dTZWNyZXQuZ2V0U2VjcmV0VmFsdWUoJ1NpdGUnKS51bnNhZmVVbndyYXAoKTtcbiAgICBjb25zdCBkYXRhZG9nQXBpS2V5ID0gZGF0YWRvZ1NlY3JldC5nZXRTZWNyZXQoJ0FwaUtleScpO1xuXG4gICAgY29uc3QgZGF0YWRvZ1NpZGVjYXJDcHUgPSBkYXRhZG9nT3B0aW9ucz8uY3B1ID8/IHRoaXMuREVGQVVMVF9EQVRBRE9HX1NJREVDQVJfQ1BVO1xuICAgIGNvbnN0IGRhdGFkb2dTaWRlY2FyTWVtb3J5TWlCID0gZGF0YWRvZ09wdGlvbnM/Lm1lbW9yeUxpbWl0TWlCID8/IHRoaXMuREVGQVVMVF9EQVRBRE9HX1NJREVDQVJfTUVNT1JZX0xJTUlUX01JQjtcbiAgICBjb25zdCBkYXRhZG9nU2lkZWNhckVzc2VudGlhbCA9IGRhdGFkb2dPcHRpb25zPy5kYXRhZG9nU2lkZWNhckVzc2VudGlhbCA/PyB0aGlzLkRFRkFVTFRfREFUQURPR19TSURFQ0FSX0VTU0VOVElBTDtcblxuICAgIGNvbnN0IGxvZ2dpbmdNb2RlRm9yU2VydmljZSA9IGRhdGFkb2dPcHRpb25zPy5sb2dnaW5nTW9kZUZvclNlcnZpY2UgPz8gdGhpcy5ERUZBVUxUX0xPR0dJTkdfTU9ERV9GT1JfU0VSVklDRTtcbiAgICBjb25zdCBsb2dnaW5nTW9kZUZvckRhdGFkb2dBZ2VudCA9XG4gICAgICBkYXRhZG9nT3B0aW9ucz8ubG9nZ2luZ01vZGVGb3JEYXRhZG9nQWdlbnQgPz8gdGhpcy5ERUZBVUxUX0xPR0dJTkdfTU9ERV9GT1JfREFUQURPR19TSURFQ0FSO1xuICAgIGNvbnN0IGZpcmVMZW5zTG9nUm91dGVyUmVxdWlyZWQgPVxuICAgICAgbG9nZ2luZ01vZGVGb3JTZXJ2aWNlID09PSBEYXRhRG9nTG9nZ2luZ01vZGUuQVdTX0ZJUkVfTEVOUyB8fFxuICAgICAgbG9nZ2luZ01vZGVGb3JEYXRhZG9nQWdlbnQgPT09IERhdGFEb2dMb2dnaW5nTW9kZS5BV1NfRklSRV9MRU5TO1xuXG4gICAgbGV0IHNlcnZpY2VDb250YWluZXJDcHVVbml0czogbnVtYmVyO1xuICAgIGxldCBzZXJ2aWNlQ29udGFpbmVyTWVtb3J5TGltaXRNaUI6IG51bWJlcjtcblxuICAgIGlmIChmaXJlTGVuc0xvZ1JvdXRlclJlcXVpcmVkKSB7XG4gICAgICBzZXJ2aWNlQ29udGFpbmVyQ3B1VW5pdHMgPSBmYXJnYXRlT3B0aW9ucy5jcHUgLSBkYXRhZG9nU2lkZWNhckNwdSAtIHRoaXMuTE9HX1JPVVRFUl9DUFU7XG4gICAgICBzZXJ2aWNlQ29udGFpbmVyTWVtb3J5TGltaXRNaUIgPVxuICAgICAgICBmYXJnYXRlT3B0aW9ucy5tZW1vcnlMaW1pdE1pQiAtIGRhdGFkb2dTaWRlY2FyTWVtb3J5TWlCIC0gdGhpcy5MT0dfUk9VVEVSX01FTU9SWV9MSU1JVF9NSUI7XG4gICAgICBkYXRhZG9nLmFkZEZpcmVsZW5zQ29uZmlnVXBsb2FkRnJvbVMzUGVybWlzc2lvbnMoe1xuICAgICAgICB0YXNrRGVmaW5pdGlvbjogdGhpcy50YXNrRGVmaW5pdGlvbixcbiAgICAgICAgZmlyZWxlbnNDb25maWdCdWNrZXRBcm46IHRoaXMuRklSRUxFTlNfQ09ORklHX0JVQ0tFVF9BUk4sXG4gICAgICB9KTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2VydmljZUNvbnRhaW5lckNwdVVuaXRzID0gZmFyZ2F0ZU9wdGlvbnMuY3B1IC0gZGF0YWRvZ1NpZGVjYXJDcHU7XG4gICAgICBzZXJ2aWNlQ29udGFpbmVyTWVtb3J5TGltaXRNaUIgPSBmYXJnYXRlT3B0aW9ucy5tZW1vcnlMaW1pdE1pQiAtIGRhdGFkb2dTaWRlY2FyTWVtb3J5TWlCO1xuICAgIH1cbiAgICB0aGlzLnNlcnZpY2VDb250YWluZXJEZWZpbml0aW9uID0gdGhpcy50YXNrRGVmaW5pdGlvbi5hZGRDb250YWluZXIoc2VydmljZU5hbWUsIHtcbiAgICAgIGltYWdlOiBjb250YWluZXJEZWZpbml0aW9uT3B0aW9uLmltYWdlLFxuICAgICAgY3B1OiBzZXJ2aWNlQ29udGFpbmVyQ3B1VW5pdHMsXG4gICAgICBtZW1vcnlMaW1pdE1pQjogc2VydmljZUNvbnRhaW5lck1lbW9yeUxpbWl0TWlCLFxuICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgLi4uZGF0YWRvZy5nZXRGYXJnYXRlQ29udGFpbmVyRW52aXJvbm1lbnRWYXJpYWJsZXMoe1xuICAgICAgICAgIHNjb3BlOiB0aGlzLFxuICAgICAgICAgIHN0YWdlLFxuICAgICAgICAgIHNlcnZpY2VOYW1lLFxuICAgICAgICAgIHZlcnNpb24sXG4gICAgICAgICAgYWNjb3VudE5hbWUsXG4gICAgICAgICAgdGVhbU5hbWUsXG4gICAgICAgICAgdGVhbUlkZW50aWZpZXIsXG4gICAgICAgICAgYWRkaXRpb25hbFRhZ3M6IGRhdGFkb2dPcHRpb25zPy5hZGRpdGlvbmFsVGFncyxcbiAgICAgICAgICB0cmFjZVNhbXBsaW5nOiBkYXRhZG9nT3B0aW9ucz8udHJhY2VTYW1wbGluZyxcbiAgICAgICAgfSksXG4gICAgICAgIC4uLmNvbnRhaW5lckRlZmluaXRpb25PcHRpb24uZW52aXJvbm1lbnQsXG4gICAgICB9LFxuICAgICAgZG9ja2VyTGFiZWxzOiB7XG4gICAgICAgIC4uLmRhdGFkb2cuZ2V0RmFyZ2F0ZURvY2tlckxhYmVscyh7IHN0YWdlLCBzZXJ2aWNlTmFtZSwgdmVyc2lvbiB9KSxcbiAgICAgIH0sXG4gICAgICBoZWFsdGhDaGVjazogY29udGFpbmVyRGVmaW5pdGlvbk9wdGlvbi5oZWFsdGhDaGVjayxcbiAgICAgIGxvZ2dpbmc6IGRhdGFkb2cuc2V0dXBMb2dnaW5nKHtcbiAgICAgICAgc2NvcGUsXG4gICAgICAgIGFjY291bnROYW1lLFxuICAgICAgICB0ZWFtTmFtZSxcbiAgICAgICAgdGVhbUlkZW50aWZpZXIsXG4gICAgICAgIHN0YWdlLFxuICAgICAgICBzZXJ2aWNlTmFtZSxcbiAgICAgICAgdmVyc2lvbixcbiAgICAgICAgZGF0YWRvZ0FwaUtleSxcbiAgICAgICAgZGF0YWRvZ0xvZ2dpbmdNb2RlOiBsb2dnaW5nTW9kZUZvclNlcnZpY2UsXG4gICAgICAgIGRhdGFkb2dTaXRlLFxuICAgICAgICBjb250YWluZXJUeXBlOiAnc2VydmljZScsXG4gICAgICAgIGFkZGl0aW9uYWxUYWdzOiBkYXRhZG9nT3B0aW9ucz8uYWRkaXRpb25hbFRhZ3MsXG4gICAgICB9KSxcbiAgICAgIHNlY3JldHM6IGNvbnRhaW5lckRlZmluaXRpb25PcHRpb24uc2VjcmV0cyxcbiAgICB9KTtcblxuICAgIGlmIChmcmFtZXdvcmtzPy5pbmNsdWRlcyhGcmFtZXdvcmsuU1BSSU5HKSkge1xuICAgICAgU3ByaW5nLmFsbG93UGFyYW1ldGVyU3RvcmVBY2Nlc3NGb3JTcHJpbmdDbG91ZEF3cyh0aGlzLCBzZXJ2aWNlTmFtZSwgdGhpcy50YXNrRGVmaW5pdGlvbi50YXNrUm9sZSk7XG4gICAgICBTcHJpbmcuYWxsb3dTZWNyZXRzTWFuYWdlckFjY2Vzc0ZvclNwcmluZ0Nsb3VkQXdzKHRoaXMsIHNlcnZpY2VOYW1lLCB0aGlzLnRhc2tEZWZpbml0aW9uLnRhc2tSb2xlKTtcbiAgICB9XG5cbiAgICBpZiAoZmlyZUxlbnNMb2dSb3V0ZXJSZXF1aXJlZCkge1xuICAgICAgdGhpcy5sb2dSb3V0ZXJDb250YWluZXJEZWZpbml0aW9uID0gZGF0YWRvZy5hZGRGaXJlTGVuc0xvZ1JvdXRlcih7XG4gICAgICAgIHRhc2tEZWZpbml0aW9uOiB0aGlzLnRhc2tEZWZpbml0aW9uLFxuICAgICAgICBjcHU6IHRoaXMuTE9HX1JPVVRFUl9DUFUsXG4gICAgICAgIG1lbW9yeUxpbWl0TWlCOiB0aGlzLkxPR19ST1VURVJfTUVNT1JZX0xJTUlUX01JQixcbiAgICAgICAgZmlyZWxlbnNDb25maWdCdWNrZXRBcm46IHRoaXMuRklSRUxFTlNfQ09ORklHX0JVQ0tFVF9BUk4sXG4gICAgICAgIGZpcmVsZW5zQ29uZmlnRmlsZVBhdGg6IHRoaXMuRklSRUxFTlNfQ09ORklHX0ZJTEVfUEFUSCxcbiAgICAgICAgc2VydmljZU5hbWU6IHByb3BzLnNlcnZpY2VOYW1lLFxuICAgICAgfSk7XG4gICAgfVxuICAgIHRoaXMuZGF0YWRvZ1NpZGVDYXJDb250YWluZXJEZWZpbml0aW9uID0gZGF0YWRvZy5hZGREYXRhZG9nU2lkZWNhcih7XG4gICAgICBzY29wZSxcbiAgICAgIHRhc2tEZWZpbml0aW9uOiB0aGlzLnRhc2tEZWZpbml0aW9uLFxuICAgICAgYWNjb3VudE5hbWUsXG4gICAgICB0ZWFtTmFtZSxcbiAgICAgIHRlYW1JZGVudGlmaWVyLFxuICAgICAgc3RhZ2UsXG4gICAgICBzZXJ2aWNlTmFtZSxcbiAgICAgIHZlcnNpb24sXG4gICAgICBkYXRhZG9nQXBpS2V5LFxuICAgICAgZGF0YWRvZ1NpdGUsXG4gICAgICBkYXRhZG9nTG9nZ2luZ01vZGU6IGxvZ2dpbmdNb2RlRm9yRGF0YWRvZ0FnZW50LFxuICAgICAgYXBtR2V0UmVzb3VyY2VzVG9JZ25vcmU6IGRhdGFkb2dPcHRpb25zPy5hcG1HZXRFbmRwb2ludHNUb0lnbm9yZSA/PyB0aGlzLkRFRkFVTFRfQVBNX0dFVF9FTkRQT0lOVFNfVE9fSUdOT1JFLFxuICAgICAgY3B1OiBkYXRhZG9nU2lkZWNhckNwdSxcbiAgICAgIG1lbW9yeUxpbWl0TWlCOiBkYXRhZG9nU2lkZWNhck1lbW9yeU1pQixcbiAgICAgIGVzc2VudGlhbDogZGF0YWRvZ1NpZGVjYXJFc3NlbnRpYWwsXG4gICAgICBlbmFibGVSZXN0YXJ0UG9saWN5OiB0cnVlLFxuICAgICAgcmVzdGFydElnbm9yZWRFeGl0Q29kZXM6IFswXSxcbiAgICAgIGNvbnRhaW5lclRhZzogcHJvcHMuZGF0YWRvZ09wdGlvbnM/LmRhdGFkb2dTaWRlY2FyVGFnID8/IHRoaXMuREVGQVVMVF9EQVRBRE9HX1NJREVDQVJfVEFHLCAvLyBUaGVzZSBhcmUgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLFxuICAgICAgYWRkaXRpb25hbFRhZ3M6IGRhdGFkb2dPcHRpb25zPy5hZGRpdGlvbmFsVGFncyxcbiAgICAgIHRyYWNlU2FtcGxpbmc6IGRhdGFkb2dPcHRpb25zPy50cmFjZVNhbXBsaW5nLFxuICAgIH0pO1xuXG4gICAgaWYgKHRoaXMudGFza0RlZmluaXRpb24uZXhlY3V0aW9uUm9sZSkge1xuICAgICAgZGF0YWRvZ1NlY3JldC5ncmFudFJlYWQodGhpcy50YXNrRGVmaW5pdGlvbi5leGVjdXRpb25Sb2xlKTtcbiAgICB9XG4gICAgZGF0YWRvZy5lbnN1cmVMb2dnaW5nQW5kTW9uaXRvcmluZ0FyZVJlYWR5QmVmb3JlU2VydmljZVN0YXJ0cyh0aGlzKTtcblxuICAgIGNvbnN0IGxvYWRCYWxhbmNlck9wdGlvbnNGb3JGYXJnYXRlU2VydmljZSA9IGxvYWRCYWxhbmNlck9wdGlvbnNcbiAgICAgID8geyBoZWFsdGhDaGVja0dyYWNlUGVyaW9kOiBsb2FkQmFsYW5jZXJPcHRpb25zLmhlYWx0aENoZWNrR3JhY2VQZXJpb2QgfVxuICAgICAgOiB7fTtcblxuICAgIHRoaXMuc2VydmljZSA9IG5ldyBlY3MuRmFyZ2F0ZVNlcnZpY2UodGhpcywgJ1NlcnZpY2UnLCB7XG4gICAgICBjbHVzdGVyOiBmYXJnYXRlQ2x1c3RlcixcbiAgICAgIHRhc2tEZWZpbml0aW9uOiB0aGlzLnRhc2tEZWZpbml0aW9uLFxuICAgICAgbWF4SGVhbHRoeVBlcmNlbnQ6IDIwMCxcbiAgICAgIG1pbkhlYWx0aHlQZXJjZW50OiAxMDAsXG4gICAgICBkZXNpcmVkQ291bnQ6IGZhcmdhdGVPcHRpb25zPy5kZXNpcmVkQ291bnQsXG4gICAgICBkZXBsb3ltZW50Q29udHJvbGxlcjogeyB0eXBlOiBlY3MuRGVwbG95bWVudENvbnRyb2xsZXJUeXBlLkNPREVfREVQTE9ZIH0sXG4gICAgICAuLi5sb2FkQmFsYW5jZXJPcHRpb25zRm9yRmFyZ2F0ZVNlcnZpY2UsXG4gICAgICBwcm9wYWdhdGVUYWdzOiBlY3MuUHJvcGFnYXRlZFRhZ1NvdXJjZS5TRVJWSUNFLFxuICAgIH0pO1xuXG4gICAgdGhpcy5jb25uZWN0aW9ucyA9IHRoaXMuc2VydmljZS5jb25uZWN0aW9ucztcblxuICAgIGlmIChsb2FkQmFsYW5jZXJPcHRpb25zICE9IG51bGwpIHtcbiAgICAgIGNvbnN0IGNvbnRhaW5lclBvcnQgPSA0NDM7XG4gICAgICB0aGlzLnNlcnZpY2VDb250YWluZXJEZWZpbml0aW9uLmFkZFBvcnRNYXBwaW5ncyh7XG4gICAgICAgIGNvbnRhaW5lclBvcnQ6IGNvbnRhaW5lclBvcnQsXG4gICAgICAgIHByb3RvY29sOiBlY3MuUHJvdG9jb2wuVENQLFxuICAgICAgfSk7XG4gICAgICB0aGlzLmJsdWVUYXJnZXRHcm91cCA9IG5ldyBlbGJ2Mi5BcHBsaWNhdGlvblRhcmdldEdyb3VwKHRoaXMsICdCbHVlVGFyZ2V0R3JvdXAnLCB7XG4gICAgICAgIHZwYzogdnBjLFxuICAgICAgICBwb3J0OiBjb250YWluZXJQb3J0LFxuICAgICAgICBwcm90b2NvbDogZWxidjIuQXBwbGljYXRpb25Qcm90b2NvbC5IVFRQUyxcbiAgICAgICAgdGFyZ2V0VHlwZTogZWxidjIuVGFyZ2V0VHlwZS5JUCxcbiAgICAgICAgdGFyZ2V0czogW3RoaXMuc2VydmljZV0sXG4gICAgICAgIGhlYWx0aENoZWNrOiBsb2FkQmFsYW5jZXJPcHRpb25zLmhlYWx0aENoZWNrLFxuICAgICAgICBzbG93U3RhcnQ6IHByb3BzLmxvYWRCYWxhbmNlck9wdGlvbnM/LnNsb3dTdGFydCA/PyB0aGlzLkRFRkFVTFRfU0xPV19TVEFSVCxcbiAgICAgICAgZGVyZWdpc3RyYXRpb25EZWxheTogcHJvcHMubG9hZEJhbGFuY2VyT3B0aW9ucz8uZGVyZWdpc3RyYXRpb25EZWxheSA/PyB0aGlzLkRFRkFVTFRfREVSRUdJU1RSQVRJT05fREVMQVksXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZ3JlZW5UYXJnZXRHcm91cCA9IG5ldyBlbGJ2Mi5BcHBsaWNhdGlvblRhcmdldEdyb3VwKHRoaXMsICdHcmVlblRhcmdldEdyb3VwJywge1xuICAgICAgICB2cGM6IHZwYyxcbiAgICAgICAgcG9ydDogY29udGFpbmVyUG9ydCxcbiAgICAgICAgcHJvdG9jb2w6IGVsYnYyLkFwcGxpY2F0aW9uUHJvdG9jb2wuSFRUUFMsXG4gICAgICAgIHRhcmdldFR5cGU6IGVsYnYyLlRhcmdldFR5cGUuSVAsXG4gICAgICAgIHRhcmdldHM6IFt0aGlzLnNlcnZpY2VdLFxuICAgICAgICBoZWFsdGhDaGVjazogbG9hZEJhbGFuY2VyT3B0aW9ucy5oZWFsdGhDaGVjayxcbiAgICAgICAgc2xvd1N0YXJ0OiBwcm9wcy5sb2FkQmFsYW5jZXJPcHRpb25zPy5zbG93U3RhcnQgPz8gdGhpcy5ERUZBVUxUX1NMT1dfU1RBUlQsXG4gICAgICAgIGRlcmVnaXN0cmF0aW9uRGVsYXk6IHByb3BzLmxvYWRCYWxhbmNlck9wdGlvbnM/LmRlcmVnaXN0cmF0aW9uRGVsYXkgPz8gdGhpcy5ERUZBVUxUX0RFUkVHSVNUUkFUSU9OX0RFTEFZLFxuICAgICAgfSk7XG5cbiAgICAgIGxvYWRCYWxhbmNlck9wdGlvbnMubGlzdGVuZXJSdWxlcy5mb3JFYWNoKCh7IHByaW9yaXR5LCBjb25kaXRpb25zIH0pID0+IHtcbiAgICAgICAgbG9hZEJhbGFuY2VyT3B0aW9ucy5saXN0ZW5lci5hZGRUYXJnZXRHcm91cHMoYFByaW9yaXR5JHtwcmlvcml0eX1MaXN0ZW5lclJ1bGVgLCB7XG4gICAgICAgICAgdGFyZ2V0R3JvdXBzOiBbdGhpcy5ibHVlVGFyZ2V0R3JvdXAgYXMgZWxidjIuQXBwbGljYXRpb25UYXJnZXRHcm91cF0sXG4gICAgICAgICAgcHJpb3JpdHk6IHByaW9yaXR5LFxuICAgICAgICAgIGNvbmRpdGlvbnM6IGNvbmRpdGlvbnMsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgICBpZiAoYmx1ZUdyZWVuRGVwbG95bWVudENvbmZpZz8udGVzdExpc3RlbmVyKSB7XG4gICAgICAgIGxvYWRCYWxhbmNlck9wdGlvbnMubGlzdGVuZXJSdWxlcy5mb3JFYWNoKCh7IHByaW9yaXR5LCBjb25kaXRpb25zIH0pID0+IHtcbiAgICAgICAgICBibHVlR3JlZW5EZXBsb3ltZW50Q29uZmlnLnRlc3RMaXN0ZW5lcj8uYWRkVGFyZ2V0R3JvdXBzKGBQcmlvcml0eSR7cHJpb3JpdHl9TGlzdGVuZXJSdWxlYCwge1xuICAgICAgICAgICAgdGFyZ2V0R3JvdXBzOiBbdGhpcy5ncmVlblRhcmdldEdyb3VwIGFzIGVsYnYyLkFwcGxpY2F0aW9uVGFyZ2V0R3JvdXBdLFxuICAgICAgICAgICAgcHJpb3JpdHk6IHByaW9yaXR5LFxuICAgICAgICAgICAgY29uZGl0aW9uczogY29uZGl0aW9ucyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGVjc0RlcGxveW1lbnRHcm91cCA9IG5ldyBjb2RlZGVwbG95LkVjc0RlcGxveW1lbnRHcm91cCh0aGlzLCAnRGVwbG95bWVudEdyb3VwJywge1xuICAgICAgICBzZXJ2aWNlOiB0aGlzLnNlcnZpY2UsXG4gICAgICAgIGJsdWVHcmVlbkRlcGxveW1lbnRDb25maWc6IHtcbiAgICAgICAgICBibHVlVGFyZ2V0R3JvdXA6IHRoaXMuYmx1ZVRhcmdldEdyb3VwLFxuICAgICAgICAgIGdyZWVuVGFyZ2V0R3JvdXA6IHRoaXMuZ3JlZW5UYXJnZXRHcm91cCxcbiAgICAgICAgICBsaXN0ZW5lcjogbG9hZEJhbGFuY2VyT3B0aW9ucy5saXN0ZW5lcixcbiAgICAgICAgICB0ZXN0TGlzdGVuZXI6IGJsdWVHcmVlbkRlcGxveW1lbnRDb25maWc/LnRlc3RMaXN0ZW5lcixcbiAgICAgICAgfSxcbiAgICAgICAgZGVwbG95bWVudENvbmZpZzogY29kZWRlcGxveS5FY3NEZXBsb3ltZW50Q29uZmlnLkNBTkFSWV8xMFBFUkNFTlRfNU1JTlVURVMsXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgY3JlYXRlRGVwbG95bWVudExhbWJkYSA9IG5ldyBsYW1iZGEuRnVuY3Rpb24odGhpcywgJ0NyZWF0ZURlcGxveW1lbnRMYW1iZGEnLCB7XG4gICAgICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChqb2luKF9fZGlybmFtZSwgJ2NvZGVkZXBsb3ktY3VzdG9tLXJlc291cmNlcycpLCB7XG4gICAgICAgICAgZXhjbHVkZTogWycqLmpzJywgJyouZC50cyddLFxuICAgICAgICB9KSxcbiAgICAgICAgaGFuZGxlcjogJ2NyZWF0ZS1kZXBsb3ltZW50LW9uLWNyZWF0ZS5oYW5kbGVyJyxcbiAgICAgICAgcnVudGltZTogREVGQVVMVF9OT0RFX1JVTlRJTUUsXG4gICAgICAgIGFyY2hpdGVjdHVyZTogbGFtYmRhLkFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICAgIHRpbWVvdXQ6IGNkay5EdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgICBsb2dHcm91cDogbmV3IGxvZ3MuTG9nR3JvdXAodGhpcywgJ0NyZWF0ZURlcGxveW1lbnRMYW1iZGFMb2dHcm91cCcsIHtcbiAgICAgICAgICByZXRlbnRpb246IGxvZ3MuUmV0ZW50aW9uRGF5cy5PTkVfV0VFSyxcbiAgICAgICAgfSksXG4gICAgICB9KTtcbiAgICAgIGNyZWF0ZURlcGxveW1lbnRMYW1iZGEuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgYWN0aW9uczogWydjb2RlZGVwbG95OkdldEFwcGxpY2F0aW9uUmV2aXNpb24nLCAnY29kZWRlcGxveTpSZWdpc3RlckFwcGxpY2F0aW9uUmV2aXNpb24nXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtlY3NEZXBsb3ltZW50R3JvdXAuYXBwbGljYXRpb24uYXBwbGljYXRpb25Bcm5dLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIGNyZWF0ZURlcGxveW1lbnRMYW1iZGEuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgYWN0aW9uczogWydjb2RlZGVwbG95OkNyZWF0ZURlcGxveW1lbnQnLCAnY29kZWRlcGxveTpTdG9wRGVwbG95bWVudCcsICdjb2RlZGVwbG95OkdldERlcGxveW1lbnQnXSxcbiAgICAgICAgICByZXNvdXJjZXM6IFtlY3NEZXBsb3ltZW50R3JvdXAuZGVwbG95bWVudEdyb3VwQXJuXSxcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICBjcmVhdGVEZXBsb3ltZW50TGFtYmRhLmFkZFRvUm9sZVBvbGljeShcbiAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgIGFjdGlvbnM6IFsnY29kZWRlcGxveTpHZXREZXBsb3ltZW50Q29uZmlnJ10sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbZWNzRGVwbG95bWVudEdyb3VwLmRlcGxveW1lbnRDb25maWcuZGVwbG95bWVudENvbmZpZ0Fybl0sXG4gICAgICAgIH0pXG4gICAgICApO1xuXG4gICAgICBjb25zdCBpc0NvbXBsZXRlRGVwbG95bWVudExhbWJkYSA9IG5ldyBsYW1iZGEuRnVuY3Rpb24odGhpcywgJ0lzQ29tcGxldGVEZXBsb3ltZW50TGFtYmRhJywge1xuICAgICAgICBjb2RlOiBsYW1iZGEuQ29kZS5mcm9tQXNzZXQoam9pbihfX2Rpcm5hbWUsICdjb2RlZGVwbG95LWN1c3RvbS1yZXNvdXJjZXMnKSwge1xuICAgICAgICAgIGV4Y2x1ZGU6IFsnKi5qcycsICcqLmQudHMnXSxcbiAgICAgICAgfSksXG4gICAgICAgIGhhbmRsZXI6ICdjcmVhdGUtZGVwbG95bWVudC1pcy1jb21wbGV0ZS5oYW5kbGVyJyxcbiAgICAgICAgcnVudGltZTogREVGQVVMVF9OT0RFX1JVTlRJTUUsXG4gICAgICAgIGFyY2hpdGVjdHVyZTogbGFtYmRhLkFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICAgIHRpbWVvdXQ6IGNkay5EdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgICBsb2dHcm91cDogbmV3IGxvZ3MuTG9nR3JvdXAodGhpcywgJ0lzQ29tcGxldGVEZXBsb3ltZW50TGFtYmRhTG9nR3JvdXAnLCB7XG4gICAgICAgICAgcmV0ZW50aW9uOiBsb2dzLlJldGVudGlvbkRheXMuT05FX1dFRUssXG4gICAgICAgIH0pLFxuICAgICAgfSk7XG4gICAgICBpc0NvbXBsZXRlRGVwbG95bWVudExhbWJkYS5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBhY3Rpb25zOiBbJ2NvZGVkZXBsb3k6R2V0RGVwbG95bWVudCddLFxuICAgICAgICAgIHJlc291cmNlczogW2Vjc0RlcGxveW1lbnRHcm91cC5kZXBsb3ltZW50R3JvdXBBcm5dLFxuICAgICAgICB9KVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGNyZWF0ZURlcGxveW1lbnRMYW1iZGFQcm92aWRlciA9IG5ldyBjci5Qcm92aWRlcih0aGlzLCAnQ3JlYXRlRGVwbG95bWVudFByb3ZpZGVyJywge1xuICAgICAgICBvbkV2ZW50SGFuZGxlcjogY3JlYXRlRGVwbG95bWVudExhbWJkYSxcbiAgICAgICAgaXNDb21wbGV0ZUhhbmRsZXI6IGlzQ29tcGxldGVEZXBsb3ltZW50TGFtYmRhLFxuICAgICAgICB0b3RhbFRpbWVvdXQ6IGNkay5EdXJhdGlvbi5taW51dGVzKDYwKSxcbiAgICAgIH0pO1xuICAgICAgbGV0IHJ1bk1vbml0b3JpbmdUZXN0U3VpdGVSdW5uZXJMYW1iZGE6IG5vZGVqc2xhbWJkYS5Ob2RlanNGdW5jdGlvbiB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChibHVlR3JlZW5EZXBsb3ltZW50Q29uZmlnPy5jYXBhYmlsaXR5TmFtZXMpIHtcbiAgICAgICAgLy8gcnVuTW9uaXRvcmluZ1Rlc3RTdWl0ZVJ1bm5lckxhbWJkYSA9IG5ldyBub2RlanNsYW1iZGEuTm9kZWpzRnVuY3Rpb24odGhpcywgJ1J1bk1vbml0b3JpbmdUZXN0U3VpdGVSdW5uZXJMYW1iZGEnLCB7XG4gICAgICAgIC8vICAgZW50cnk6ICcuL3NyYy9mYXJnYXRlL2NvZGVkZXBsb3ktY3VzdG9tLXJlc291cmNlcy9ydW4tbW9uaXRvcmluZy10ZXN0LXN1aXRlLXJ1bm5lci50cycsXG4gICAgICAgIC8vICAgaGFuZGxlcjogJ2hhbmRsZXInLFxuICAgICAgICAvLyAgIHRpbWVvdXQ6IGNkay5EdXJhdGlvbi5taW51dGVzKDUpLFxuICAgICAgICAvLyAgIHJ1bnRpbWU6IERFRkFVTFRfTk9ERV9SVU5USU1FLFxuICAgICAgICAvLyAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIC8vICAgICBDQVBBQklMSVRJRVNfTkFNRTogYmx1ZUdyZWVuRGVwbG95bWVudENvbmZpZy5jYXBhYmlsaXR5TmFtZXMuam9pbignLCcpLFxuICAgICAgICAvLyAgICAgU1VCTkVUUzogdnBjLnNlbGVjdFN1Ym5ldHMoeyBzdWJuZXRUeXBlOiBlYzIuU3VibmV0VHlwZS5QUklWQVRFX1dJVEhfRUdSRVNTIH0pLnN1Ym5ldElkcy5qb2luKCcsJyksXG4gICAgICAgIC8vICAgfSxcbiAgICAgICAgLy8gfSk7XG4gICAgICAgIHJ1bk1vbml0b3JpbmdUZXN0U3VpdGVSdW5uZXJMYW1iZGEgPSBuZXcgbGFtYmRhLkZ1bmN0aW9uKHRoaXMsICdSdW5Nb25pdG9yaW5nVGVzdFN1aXRlUnVubmVyTGFtYmRhJywge1xuICAgICAgICAgIGNvZGU6IGxhbWJkYS5Db2RlLmZyb21Bc3NldChqb2luKF9fZGlybmFtZSwgJ2NvZGVkZXBsb3ktY3VzdG9tLXJlc291cmNlcycpLCB7XG4gICAgICAgICAgICBleGNsdWRlOiBbJyouanMnLCAnKi5kLnRzJ10sXG4gICAgICAgICAgfSksXG4gICAgICAgICAgaGFuZGxlcjogJ3J1bi1tb25pdG9yaW5nLXRlc3Qtc3VpdGUtcnVubmVyLmhhbmRsZXInLFxuICAgICAgICAgIHJ1bnRpbWU6IERFRkFVTFRfTk9ERV9SVU5USU1FLFxuICAgICAgICAgIGFyY2hpdGVjdHVyZTogbGFtYmRhLkFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICAgICAgdGltZW91dDogY2RrLkR1cmF0aW9uLm1pbnV0ZXMoNSksXG4gICAgICAgICAgbG9nR3JvdXA6IG5ldyBsb2dzLkxvZ0dyb3VwKHRoaXMsICdSdW5Nb25pdG9yaW5nVGVzdFN1aXRlUnVubmVyTGFtYmRhckxvZ0dyb3VwJywge1xuICAgICAgICAgICAgcmV0ZW50aW9uOiBsb2dzLlJldGVudGlvbkRheXMuT05FX1dFRUssXG4gICAgICAgICAgfSksXG4gICAgICAgICAgZW52aXJvbm1lbnQ6IHtcbiAgICAgICAgICAgIENBUEFCSUxJVElFU19OQU1FOiBibHVlR3JlZW5EZXBsb3ltZW50Q29uZmlnLmNhcGFiaWxpdHlOYW1lcy5qb2luKCcsJyksXG4gICAgICAgICAgICBTVUJORVRTOiB2cGMuc2VsZWN0U3VibmV0cyh7IHN1Ym5ldFR5cGU6IGVjMi5TdWJuZXRUeXBlLlBSSVZBVEVfV0lUSF9FR1JFU1MgfSkuc3VibmV0SWRzLmpvaW4oJywnKSxcbiAgICAgICAgICB9LFxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgcmVnaW9uID0gY2RrLlN0YWNrLm9mKHNjb3BlKS5yZWdpb247XG4gICAgICAgIGNvbnN0IGFjY291bnQgPSBjZGsuU3RhY2sub2Yoc2NvcGUpLmFjY291bnQ7XG4gICAgICAgIHJ1bk1vbml0b3JpbmdUZXN0U3VpdGVSdW5uZXJMYW1iZGEuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgIGFjdGlvbnM6IFsnZWNzOlJ1blRhc2snXSxcbiAgICAgICAgICAgIHJlc291cmNlczogW2Bhcm46YXdzOmVjczoke3JlZ2lvbn06JHthY2NvdW50fTp0YXNrLWRlZmluaXRpb24vbW9uaXRvcmluZy10ZXN0c3VpdGUtcnVubmVyKmBdLFxuICAgICAgICAgIH0pXG4gICAgICAgICk7XG4gICAgICAgIHJ1bk1vbml0b3JpbmdUZXN0U3VpdGVSdW5uZXJMYW1iZGEuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgIGFjdGlvbnM6IFsnZWNzOkxpc3RDTHVzdGVycycsICdlY3M6TGlzdFRhc2tEZWZpbml0aW9ucyddLFxuICAgICAgICAgICAgcmVzb3VyY2VzOiBbJyonXSxcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgICBydW5Nb25pdG9yaW5nVGVzdFN1aXRlUnVubmVyTGFtYmRhLmFkZFRvUm9sZVBvbGljeShcbiAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICBhY3Rpb25zOiBbJ2lhbTpQYXNzUm9sZSddLFxuICAgICAgICAgICAgcmVzb3VyY2VzOiBbYGFybjphd3M6aWFtOjoke2FjY291bnR9OnJvbGUvbW9uaXRvcmluZy10ZXN0c3VpdGUqYF0sXG4gICAgICAgICAgfSlcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgbmV3IGNkay5DdXN0b21SZXNvdXJjZSh0aGlzLCAnQ3JlYXRlRGVwbG95bWVudCcsIHtcbiAgICAgICAgc2VydmljZVRva2VuOiBjcmVhdGVEZXBsb3ltZW50TGFtYmRhUHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgICAgICBwcm9wZXJ0aWVzOiB7XG4gICAgICAgICAgQXBwbGljYXRpb25OYW1lOiBlY3NEZXBsb3ltZW50R3JvdXAuYXBwbGljYXRpb24uYXBwbGljYXRpb25OYW1lLFxuICAgICAgICAgIERlcGxveW1lbnRHcm91cE5hbWU6IGVjc0RlcGxveW1lbnRHcm91cC5kZXBsb3ltZW50R3JvdXBOYW1lLFxuICAgICAgICAgIFRhc2tEZWZpbml0aW9uQXJuOiB0aGlzLnRhc2tEZWZpbml0aW9uLnRhc2tEZWZpbml0aW9uQXJuLFxuICAgICAgICAgIENvbnRhaW5lck5hbWU6IHNlcnZpY2VOYW1lLFxuICAgICAgICAgIENvbnRhaW5lclBvcnQ6IGNvbnRhaW5lclBvcnQsXG4gICAgICAgICAgQWZ0ZXJBbGxvd1Rlc3RUcmFmZmljSG9vazogcnVuTW9uaXRvcmluZ1Rlc3RTdWl0ZVJ1bm5lckxhbWJkYT8uZnVuY3Rpb25Bcm4sXG4gICAgICAgIH0sXG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn1cblxuY2xhc3MgRGVueUxpc3RlZEtleVZhbGlkYXRvciBpbXBsZW1lbnRzIGNvbnN0cnVjdHMuSVZhbGlkYXRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlbnlMaXN0OiBzdHJpbmdbXSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRpY3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCB1bmRlZmluZWQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBtZXNzYWdlR2VuZXJhdG9yOiAoa2V5TmFtZTogc3RyaW5nKSA9PiBzdHJpbmdcbiAgKSB7fVxuXG4gIHZhbGlkYXRlKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIXRoaXMuZGljdCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcbiAgICB0aGlzLmRlbnlMaXN0LmZvckVhY2goa2V5TmFtZSA9PiB7XG4gICAgICBpZiAodGhpcy5kaWN0ICYmIGtleU5hbWUgaW4gdGhpcy5kaWN0KSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHRoaXMubWVzc2FnZUdlbmVyYXRvcihrZXlOYW1lKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cbmNsYXNzIENsdXN0ZXJWcGNWYWxpZGF0b3IgaW1wbGVtZW50cyBjb25zdHJ1Y3RzLklWYWxpZGF0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB2cGM6IGVjMi5JVnBjLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2x1c3Rlcj86IGVjcy5JQ2x1c3RlclxuICApIHt9XG5cbiAgdmFsaWRhdGUoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGlmICh0aGlzLmNsdXN0ZXIgJiYgdGhpcy5jbHVzdGVyLnZwYy52cGNJZCAhPT0gdGhpcy52cGMudnBjSWQpIHtcbiAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICBgVGhlIFZQQyBwcm92aWRlZCBpbiB0aGUgY2x1c3RlciAoJHt0aGlzLmNsdXN0ZXIudnBjLm5vZGUuaWR9KSBNVVNUIG1hdGNoIHRoZSBWUEMgcHJvdmlkZWQgYXMgYXJndW1lbnQgKCR7dGhpcy52cGMubm9kZS5pZH0pLmBcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cbiJdfQ==
|
|
@@ -3,6 +3,8 @@ import type * as ec2 from 'aws-cdk-lib/aws-ec2';
|
|
|
3
3
|
import * as ecs from 'aws-cdk-lib/aws-ecs';
|
|
4
4
|
import * as elbv2 from 'aws-cdk-lib/aws-elasticloadbalancingv2';
|
|
5
5
|
import * as constructs from 'constructs';
|
|
6
|
+
import { type TraceSamplingOptions } from './trace-sampling';
|
|
7
|
+
export { addTraceSamplingEnvironmentWarning, DatadogDefaultTraceSamplingOptions, FixedRateTraceSamplingOptions, RioDefaultTraceSamplingOptions, TargetPerSecondTraceSamplingOptions, TraceSamplingMode, type TraceSamplingOptions, TraceSamplingValidator, } from './trace-sampling';
|
|
6
8
|
/**
|
|
7
9
|
* Fargate Task Definition Properties.
|
|
8
10
|
*/
|
|
@@ -84,7 +86,12 @@ export interface ContainerDefinitionOptions {
|
|
|
84
86
|
* Other Environment variables set by default are overwritten if passed.
|
|
85
87
|
* These are:
|
|
86
88
|
* * DD_SERVICE_MAPPING: database:fargate-web-app-aurora,java-aws-sdk:fargate-web-app-aws-sdk,kafka:fargate-web-app-kafka,mysql:fargate-web-app-aurora
|
|
87
|
-
*
|
|
89
|
+
* Sampling variables (`DD_TRACE_SAMPLING_RULES`, `DD_TRACE_SAMPLE_RATE`,
|
|
90
|
+
* `DD_APM_TARGET_TPS`, and `DD_APM_ERROR_TPS`) should be configured through
|
|
91
|
+
* `DatadogIntegrationProps.traceSampling`. Supplying them here is preserved
|
|
92
|
+
* for backwards compatibility, but produces a synthesis warning. In
|
|
93
|
+
* particular, `DD_APM_*` values on this application container do not
|
|
94
|
+
* configure the Datadog Agent sidecar.
|
|
88
95
|
*
|
|
89
96
|
* @defaultValue - No environment variables.
|
|
90
97
|
*/
|
|
@@ -200,6 +207,20 @@ export interface LoadBalancerOptions {
|
|
|
200
207
|
readonly deregistrationDelay?: cdk.Duration;
|
|
201
208
|
}
|
|
202
209
|
export interface DatadogIntegrationProps {
|
|
210
|
+
/**
|
|
211
|
+
* Configure Datadog APM trace sampling for the application and Agent sidecar.
|
|
212
|
+
*
|
|
213
|
+
* @defaultValue - `TraceSamplingMode.DEFAULT`, which configures each
|
|
214
|
+
* Agent sidecar with an average head-sampling target of 5 traces per second
|
|
215
|
+
* and an additional error-sampling budget of 10 local error trace chunks per
|
|
216
|
+
* second. Each Fargate task has its own sidecar. Therefore, the target traces
|
|
217
|
+
* per second apply per Fargate task. Traffic spikes can exceed the
|
|
218
|
+
* head-sampling target; these settings do not cap total ingestion.
|
|
219
|
+
* Target-per-second sampling is suitable for both low- and high-traffic
|
|
220
|
+
* services: low-traffic services can retain all traces while high-traffic
|
|
221
|
+
* services are sampled toward the target.
|
|
222
|
+
*/
|
|
223
|
+
readonly traceSampling?: TraceSamplingOptions;
|
|
203
224
|
/**
|
|
204
225
|
* The minimum number of CPU units to reserve for the container.
|
|
205
226
|
*
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var _a;
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.RioFargateService = exports.DataDogLoggingMode = exports.Framework = void 0;
|
|
4
|
+
exports.RioFargateService = exports.DataDogLoggingMode = exports.Framework = exports.TraceSamplingValidator = exports.TraceSamplingMode = exports.addTraceSamplingEnvironmentWarning = void 0;
|
|
5
5
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
6
6
|
const cdk = require("aws-cdk-lib");
|
|
7
7
|
const ecs = require("aws-cdk-lib/aws-ecs");
|
|
@@ -12,6 +12,11 @@ const constructs = require("constructs");
|
|
|
12
12
|
const datadogv2_1 = require("../datadogv2");
|
|
13
13
|
const datadog = require("./datadog");
|
|
14
14
|
const spring_1 = require("./spring");
|
|
15
|
+
const trace_sampling_1 = require("./trace-sampling");
|
|
16
|
+
var trace_sampling_2 = require("./trace-sampling");
|
|
17
|
+
Object.defineProperty(exports, "addTraceSamplingEnvironmentWarning", { enumerable: true, get: function () { return trace_sampling_2.addTraceSamplingEnvironmentWarning; } });
|
|
18
|
+
Object.defineProperty(exports, "TraceSamplingMode", { enumerable: true, get: function () { return trace_sampling_2.TraceSamplingMode; } });
|
|
19
|
+
Object.defineProperty(exports, "TraceSamplingValidator", { enumerable: true, get: function () { return trace_sampling_2.TraceSamplingValidator; } });
|
|
15
20
|
var Framework;
|
|
16
21
|
(function (Framework) {
|
|
17
22
|
/**
|
|
@@ -112,6 +117,8 @@ class RioFargateService extends constructs.Construct {
|
|
|
112
117
|
this.node.addValidation(new DenyListedKeyValidator(RioFargateService.DD_TAG_DENY_LIST, props.datadogOptions?.additionalTags, it => `Tag ${it} is not allowed to be set. This value will be inferred from the account or other properties.`));
|
|
113
118
|
this.node.addValidation(new ClusterVpcValidator(props.vpc, props.cluster));
|
|
114
119
|
this.node.addValidation(new DatadogSideCarValidator(props.datadogOptions));
|
|
120
|
+
this.node.addValidation(new trace_sampling_1.TraceSamplingValidator(props.datadogOptions?.traceSampling));
|
|
121
|
+
(0, trace_sampling_1.addTraceSamplingEnvironmentWarning)(this, props.containerDefinitionOption.environment);
|
|
115
122
|
this.node.addValidation(new FirelensSideCarValidator(props.datadogOptions));
|
|
116
123
|
const fargateCluster = cluster ??
|
|
117
124
|
new ecs.Cluster(this, 'Cluster', {
|
|
@@ -182,6 +189,7 @@ class RioFargateService extends constructs.Construct {
|
|
|
182
189
|
teamName,
|
|
183
190
|
teamIdentifier,
|
|
184
191
|
additionalTags: datadogOptions?.additionalTags,
|
|
192
|
+
traceSampling: datadogOptions?.traceSampling,
|
|
185
193
|
}),
|
|
186
194
|
...containerDefinitionOption.environment,
|
|
187
195
|
},
|
|
@@ -243,6 +251,7 @@ class RioFargateService extends constructs.Construct {
|
|
|
243
251
|
restartIgnoredExitCodes: dataDogrestartIgnoredExitCodes,
|
|
244
252
|
containerTag: props.datadogOptions?.datadogSidecarTag ?? this.DEFAULT_DATADOG_SIDECAR_TAG, // These are positional parameters,
|
|
245
253
|
additionalTags: datadogOptions?.additionalTags,
|
|
254
|
+
traceSampling: datadogOptions?.traceSampling,
|
|
246
255
|
});
|
|
247
256
|
datadog.ensureLoggingAndMonitoringAreReadyBeforeServiceStarts(this);
|
|
248
257
|
const loadBalancerOptionsForFargateService = loadBalancerOptions
|
|
@@ -367,4 +376,4 @@ class FirelensSideCarValidator {
|
|
|
367
376
|
return result;
|
|
368
377
|
}
|
|
369
378
|
}
|
|
370
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmlvLWZhcmdhdGUtc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mYXJnYXRlL3Jpby1mYXJnYXRlLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FBbUM7QUFFbkMsMkNBQTJDO0FBQzNDLGdFQUFnRTtBQUNoRSwyQ0FBMkM7QUFDM0MsMkNBQTJDO0FBQzNDLHlDQUF5QztBQUN6Qyw0Q0FBK0U7QUFDL0UscUNBQXFDO0FBQ3JDLHFDQUFrQztBQThEbEMsSUFBWSxTQUtYO0FBTEQsV0FBWSxTQUFTO0lBQ25COztPQUVHO0lBQ0gsNkNBQU0sQ0FBQTtBQUNSLENBQUMsRUFMVyxTQUFTLHlCQUFULFNBQVMsUUFLcEI7QUFvUUQsSUFBWSxrQkEwQlg7QUExQkQsV0FBWSxrQkFBa0I7SUFDNUI7OztPQUdHO0lBQ0gsNkVBQWEsQ0FBQTtJQUViOzs7Ozs7T0FNRztJQUNILG1GQUFnQixDQUFBO0lBRWhCOzs7T0FHRztJQUNILG1HQUF3QixDQUFBO0lBRXhCOztPQUVHO0lBQ0gsMkRBQUksQ0FBQTtBQUNOLENBQUMsRUExQlcsa0JBQWtCLGtDQUFsQixrQkFBa0IsUUEwQjdCO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBNENHO0FBQ0gsTUFBYSxpQkFBa0IsU0FBUSxVQUFVLENBQUMsU0FBUztJQXlDekQsWUFBWSxLQUEyQixFQUFFLEVBQVUsRUFBRSxLQUE2QjtRQUNoRixLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBNUJGLHdDQUFtQyxHQUFhLEVBQUUsQ0FBQztRQUNuRCxnQ0FBMkIsR0FBRyxFQUFFLENBQUM7UUFDakMsNkNBQXdDLEdBQUcsR0FBRyxDQUFDO1FBQy9DLHNDQUFpQyxHQUFHLElBQUksQ0FBQztRQUN6QywwQ0FBcUMsR0FBRyxJQUFJLENBQUM7UUFDN0MsK0NBQTBDLEdBQUcsQ0FBQyxDQUFDLENBQUMs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IjpbImltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgdHlwZSAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGVjcyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWNzJztcbmltcG9ydCAqIGFzIGVsYnYyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIHNzbSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3NtJztcbmltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBEYXRhZG9nU2VydmljZUNhdGFsb2dFbnRyeSwgRGF0YWRvZ1NoYXJlZFNlY3JldCB9IGZyb20gJy4uL2RhdGFkb2d2Mic7XG5pbXBvcnQgKiBhcyBkYXRhZG9nIGZyb20gJy4vZGF0YWRvZyc7XG5pbXBvcnQgeyBTcHJpbmcgfSBmcm9tICcuL3NwcmluZyc7XG5cbi8qKlxuICogRmFyZ2F0ZSBUYXNrIERlZmluaXRpb24gUHJvcGVydGllcy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBSaW9GYXJnYXRlU2VydmljZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBzdGFnZSBvZiB0aGUgc2VydmljZSwgZS5nLiAncHJvZCcuXG4gICAqL1xuICByZWFkb25seSBzdGFnZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgTmFtZSBvZiB0aGUgc2VydmljZS5cbiAgICovXG4gIHJlYWRvbmx5IHNlcnZpY2VOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBzZXJ2aWNlLCBlLmcuIHRoZSBnaXQgaGFzaCBvZiB0aGUgY29ycmVzcG9uZGluZyBjb21taXQuXG4gICAqL1xuICByZWFkb25seSB2ZXJzaW9uOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBmcmFtZXdvcmtzIGluIHVzZXMuXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgLSBObyBmcmFtZXdvcmtzLlxuICAgKi9cbiAgcmVhZG9ubHkgZnJhbWV3b3Jrcz86IEZyYW1ld29ya1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgVlBDIG9mIHRoZSBzZXJ2aWNlJ3MgZWNzLkNsdXN0ZXIgaWYgbm8gY2x1c3RlciBpcyBleHBsaWNpdGx5IHBhc3NlZCBhcyBwcm9wLlxuICAgKi9cbiAgcmVhZG9ubHkgdnBjOiBlYzIuSVZwYztcblxuICAvKipcbiAgICogVGhlIEZhcmdhdGUgY2x1c3RlciB0byBydW4gdGhlIHNlcnZpY2UgaW4uXG4gICAqIElmIG5vdCBudWxsLCB0aGUgY2x1c3Rlci52cGMgTVVTVCBtYXRjaCB0aGUgdnBjIHByb3ZpZGVkIGFzIGRpcmVjdCBhcmd1bWVudC5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSAtIENyZWF0ZSBhIG5ldyBGYXJnYXRlIGNsdXN0ZXIgd2l0aCBkZWZhdWx0IHByb3BlcnRpZXNcbiAgICovXG4gIHJlYWRvbmx5IGNsdXN0ZXI/OiBlY3MuSUNsdXN0ZXI7XG5cbiAgLyoqXG4gICAqIENvbnRhaW5lciBkZWZpbml0aW9uIG9wdGlvbnMgbGlrZSBpbWFnZSwgY3B1LCBtZW1vcnkuXG4gICAqL1xuICByZWFkb25seSBjb250YWluZXJEZWZpbml0aW9uT3B0aW9uOiBDb250YWluZXJEZWZpbml0aW9uT3B0aW9ucztcblxuICAvKipcbiAgICogRmFyZ2F0ZSBUYXNrIERlZmluaXRpb24gUHJvcGVydGllcy5cbiAgICovXG4gIHJlYWRvbmx5IGZhcmdhdGVPcHRpb25zOiBGYXJnYXRlVGFza0RlZmluaXRpb25Qcm9wcztcblxuICAvKipcbiAgICogTG9hZGJhbGFuY2VyIG9wdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBsb2FkQmFsYW5jZXJPcHRpb25zPzogTG9hZEJhbGFuY2VyT3B0aW9ucztcblxuICAvKipcbiAgICogRGF0YWRvZyBpbnRlZ3JhdGlvbiBwcm9wZXJ0aWVzXG4gICAqL1xuICByZWFkb25seSBkYXRhZG9nT3B0aW9ucz86IERhdGFkb2dJbnRlZ3JhdGlvblByb3BzO1xufVxuXG5leHBvcnQgZW51bSBGcmFtZXdvcmsge1xuICAvKipcbiAgICogU3ByaW5nIEZyYW1ld29yaywgU3ByaW5nIEJvb3QsIGFuZCBTcHJpbmcgQ2xvdWQgQVdTLlxuICAgKi9cbiAgU1BSSU5HLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRhaW5lckRlZmluaXRpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBpbWFnZSB1c2VkIHRvIHN0YXJ0IGEgY29udGFpbmVyLlxuICAgKlxuICAgKiBUaGlzIHN0cmluZyBpcyBwYXNzZWQgZGlyZWN0bHkgdG8gdGhlIERvY2tlciBkYWVtb24uXG4gICAqIEltYWdlcyBpbiB0aGUgRG9ja2VyIEh1YiByZWdpc3RyeSBhcmUgYXZhaWxhYmxlIGJ5IGRlZmF1bHQuXG4gICAqIE90aGVyIHJlcG9zaXRvcmllcyBhcmUgc3BlY2lmaWVkIHdpdGggZWl0aGVyIHJlcG9zaXRvcnktdXJsL2ltYWdlOnRhZyBvciByZXBvc2l0b3J5LXVybC9pbWFnZVxcQGRpZ2VzdC5cbiAgICovXG4gIHJlYWRvbmx5IGltYWdlOiBlY3MuQ29udGFpbmVySW1hZ2U7XG5cbiAgLyoqXG4gICAqIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gcGFzcyB0byB0aGUgY29udGFpbmVyLlxuICAgKlxuICAgKiBTb21lIERhdGFkb2cgc3BlY2lmaWMgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBub3QgYWxsb3dlZCB0byBiZSBzZXQsXG4gICAqIGJlY2F1c2UgdGhleSBhcmUgc2V0IGF1dG9tYXRpY2FsbHkgb3IgY29tcHV0ZWQgZnJvbSBvdGhlciBhdHRyaWJ1dGVzLlxuICAgKiBUaGVzZSBhcmU6XG4gICAqICogRERfRU5WOiBTZXQgc2FtZSBhcyBwcm9wIHN0YWdlXG4gICAqICogRERfU0VSVklDRTogU2V0IHNhbWUgYXMgcHJvcCBzZXJ2aWNlTmFtZVxuICAgKiAqIEREX1ZFUlNJT046IFNldCBzYW1lIGFzIHByb3AgdmVyc2lvblxuICAgKiAqIEREX1RBR1M6IFNldCBzYW1lIGFzIERhdGFkb2dJbnRlZ3JhdGlvblByb3BzI2FkZGl0aW9uYWxUYWdzXG4gICAqICogRERfTE9HU19JTkpFQ1RJT046IHRydWVcbiAgICogT3RoZXIgRERfLXByZWZpeGVkIHZhaWFibGUgbWF5IGJlIGFkZGVkIHRvIHRoaXMgbGlzdC5cbiAgICpcbiAgICogT3RoZXIgRW52aXJvbm1lbnQgdmFyaWFibGVzIHNldCBieSBkZWZhdWx0IGFyZSBvdmVyd3JpdHRlbiBpZiBwYXNzZWQuXG4gICAqIFRoZXNlIGFyZTpcbiAgICogKiBERF9TRVJWSUNFX01BUFBJTkc6IGRhdGFiYXNlOmZhcmdhdGUtd2ViLWFwcC1hdXJvcmEsamF2YS1hd3Mtc2RrOmZhcmdhdGUtd2ViLWFwcC1hd3Mtc2RrLGthZmthOmZhcmdhdGUtd2ViLWFwcC1rYWZrYSxteXNxbDpmYXJnYXRlLXdlYi1hcHAtYXVyb3JhXG4gICAqICogRERfVFJBQ0VfU0FNUExFX1JBVEU6IDEuMFxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIC0gTm8gZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgZW52aXJvbm1lbnQ/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xuXG4gIC8qKlxuICAgKiBUaGUgc2VjcmV0IGVudmlyb25tZW50IHZhcmlhYmxlcyB0byBwYXNzIHRvIHRoZSBjb250YWluZXIuXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgLSBObyBzZWNyZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VjcmV0cz86IHsgW2tleTogc3RyaW5nXTogZWNzLlNlY3JldCB9O1xuXG4gIC8qKlxuICAgKiBUaGUgaGVhbHRoIGNoZWNrIGNvbW1hbmQgYW5kIGFzc29jaWF0ZWQgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvciB0aGUgY29udGFpbmVyLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIC0gSGVhbHRoIGNoZWNrIGNvbmZpZ3VyYXRpb24gZnJvbSBjb250YWluZXIuXG4gICAqL1xuICByZWFkb25seSBoZWFsdGhDaGVjaz86IGVjcy5IZWFsdGhDaGVjaztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGYXJnYXRlVGFza0RlZmluaXRpb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGNwdSB1bml0cyB1c2VkIGJ5IHRoZSB0YXNrLiBGb3IgdGFza3MgdXNpbmcgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUsXG4gICAqIHRoaXMgZmllbGQgaXMgcmVxdWlyZWQgYW5kIHlvdSBtdXN0IHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXMsXG4gICAqIHdoaWNoIGRldGVybWluZXMgeW91ciByYW5nZSBvZiB2YWxpZCB2YWx1ZXMgZm9yIHRoZSBtZW1vcnkgcGFyYW1ldGVyOlxuICAgKlxuICAgKiAyNTYgKC4yNSB2Q1BVKSAtIEF2YWlsYWJsZSBtZW1vcnkgdmFsdWVzOiA1MTIgKDAuNSBHQiksIDEwMjQgKDEgR0IpLCAyMDQ4ICgyIEdCKVxuICAgKlxuICAgKiA1MTIgKC41IHZDUFUpIC0gQXZhaWxhYmxlIG1lbW9yeSB2YWx1ZXM6IDEwMjQgKDEgR0IpLCAyMDQ4ICgyIEdCKSwgMzA3MiAoMyBHQiksIDQwOTYgKDQgR0IpXG4gICAqXG4gICAqIDEwMjQgKDEgdkNQVSkgLSBBdmFpbGFibGUgbWVtb3J5IHZhbHVlczogMjA0OCAoMiBHQiksIDMwNzIgKDMgR0IpLCA0MDk2ICg0IEdCKSwgNTEyMCAoNSBHQiksIDYxNDQgKDYgR0IpLCA3MTY4ICg3IEdCKSwgODE5MiAoOCBHQilcbiAgICpcbiAgICogMjA0OCAoMiB2Q1BVKSAtIEF2YWlsYWJsZSBtZW1vcnkgdmFsdWVzOiBCZXR3ZWVuIDQwOTYgKDQgR0IpIGFuZCAxNjM4NCAoMTYgR0IpIGluIGluY3JlbWVudHMgb2YgMTAyNCAoMSBHQilcbiAgICpcbiAgICogNDA5NiAoNCB2Q1BVKSAtIEF2YWlsYWJsZSBtZW1vcnkgdmFsdWVzOiBCZXR3ZWVuIDgxOTIgKDggR0IpIGFuZCAzMDcyMCAoMzAgR0IpIGluIGluY3JlbWVudHMgb2YgMTAyNCAoMSBHQilcbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSA1MTJcbiAgICovXG4gIHJlYWRvbmx5IGNwdTogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgYW1vdW50IChpbiBNaUIpIG9mIG1lbW9yeSB1c2VkIGJ5IHRoZSB0YXNrLiBGb3IgdGFza3MgdXNpbmcgdGhlIEZhcmdhdGUgbGF1bmNoIHR5cGUsXG4gICAqIHRoaXMgZmllbGQgaXMgcmVxdWlyZWQgYW5kIHlvdSBtdXN0IHVzZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXMsIHdoaWNoIGRldGVybWluZXMgeW91ciByYW5nZSBvZiB2YWxpZCB2YWx1ZXMgZm9yIHRoZSBjcHUgcGFyYW1ldGVyOlxuICAgKlxuICAgKiA1MTIgKDAuNSBHQiksIDEwMjQgKDEgR0IpLCAyMDQ4ICgyIEdCKSAtIEF2YWlsYWJsZSBjcHUgdmFsdWVzOiAyNTYgKC4yNSB2Q1BVKVxuICAgKlxuICAgKiAxMDI0ICgxIEdCKSwgMjA0OCAoMiBHQiksIDMwNzIgKDMgR0IpLCA0MDk2ICg0IEdCKSAtIEF2YWlsYWJsZSBjcHUgdmFsdWVzOiA1MTIgKC41IHZDUFUpXG4gICAqXG4gICAqIDIwNDggKDIgR0IpLCAzMDcyICgzIEdCKSwgNDA5NiAoNCBHQiksIDUxMjAgKDUgR0IpLCA2MTQ0ICg2IEdCKSwgNzE2OCAoNyBHQiksIDgxOTIgKDggR0IpIC0gQXZhaWxhYmxlIGNwdSB2YWx1ZXM6IDEwMjQgKDEgdkNQVSlcbiAgICpcbiAgICogQmV0d2VlbiA0MDk2ICg0IEdCKSBhbmQgMTYzODQgKDE2IEdCKSBpbiBpbmNyZW1lbnRzIG9mIDEwMjQgKDEgR0IpIC0gQXZhaWxhYmxlIGNwdSB2YWx1ZXM6IDIwNDggKDIgdkNQVSlcbiAgICpcbiAgICogQmV0d2VlbiA4MTkyICg4IEdCKSBhbmQgMzA3MjAgKDMwIEdCKSBpbiBpbmNyZW1lbnRzIG9mIDEwMjQgKDEgR0IpIC0gQXZhaWxhYmxlIGNwdSB2YWx1ZXM6IDQwOTYgKDQgdkNQVSlcbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSAxMDI0XG4gICAqL1xuICByZWFkb25seSBtZW1vcnlMaW1pdE1pQjogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBEZXNpcmVkIGNvdW50IG9mIHJ1bm5pbmcgdGFza3NcbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSAtIFdoZW4gY3JlYXRpbmcgdGhlIHNlcnZpY2UsIGRlZmF1bHQgaXMgMTsgd2hlbiB1cGRhdGluZyB0aGUgc2VydmljZSwgZGVmYXVsdCB1c2VzXG4gICAqIHRoZSBjdXJyZW50IHRhc2sgbnVtYmVyLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVzaXJlZENvdW50PzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgb3BlcmF0aW5nIHN5c3RlbSB0aGF0IHlvdXIgdGFzayBkZWZpbml0aW9ucyBhcmUgcnVubmluZyBvbi5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSAtIFVzaW5nIGVjcy5PcGVyYXRpbmdTeXN0ZW1GYW1pbHkuTElOVVggYW5kIGVjcy5DcHVBcmNoaXRlY3R1cmUuWDg2XzY0XG4gICAqL1xuICByZWFkb25seSBydW50aW1lUGxhdGZvcm0/OiBlY3MuUnVudGltZVBsYXRmb3JtO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIExpc3RlbmVyUnVsZSB7XG4gIHJlYWRvbmx5IHByaW9yaXR5OiBudW1iZXI7XG5cbiAgcmVhZG9ubHkgY29uZGl0aW9uczogZWxidjIuTGlzdGVuZXJDb25kaXRpb25bXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMb2FkQmFsYW5jZXJPcHRpb25zIHtcbiAgLyoqXG4gICAqIExpc3RlbmVyIGZvciBhbiBBcHBsaWNhdGlvbiBMb2FkIEJhbGFuY2VyXG4gICAqL1xuICByZWFkb25seSBsaXN0ZW5lcjogZWxidjIuSUFwcGxpY2F0aW9uTGlzdGVuZXI7XG5cbiAgLyoqXG4gICAqIE9uZSBvciBtb3JlIHBhdGggcGF0dGVybnMgdG8gY29tcGFyZSBhZ2FpbnN0IHRoZSByZXF1ZXN0IFVSTC5cbiAgICogVGhlIG1heGltdW0gc2l6ZSBvZiBlYWNoIHN0cmluZyBpcyAxMjggY2hhcmFjdGVycy5cbiAgICogVGhlIGNvbXBhcmlzb24gaXMgY2FzZSBzZW5zaXRpdmUuXG4gICAqIFRoZSBmb2xsb3dpbmcgd2lsZGNhcmQgY2hhcmFjdGVycyBhcmUgc3VwcG9ydGVkOiAqIChtYXRjaGVzIDAgb3IgbW9yZSBjaGFyYWN0ZXJzKSBhbmQgPyAobWF0Y2hlcyBleGFjdGx5IDEgY2hhcmFjdGVyKS5cbiAgICpcbiAgICogVXBkYXRlIHJlcXVpcmVzOiBObyBpbnRlcnJ1cHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGxpc3RlbmVyUnVsZXM6IExpc3RlbmVyUnVsZVtdO1xuXG4gIC8qKlxuICAgKiAgSGVhbHRoIGNoZWNrIG9wdGlvbnMuXG4gICAqL1xuICByZWFkb25seSBoZWFsdGhDaGVjazogZWxidjIuSGVhbHRoQ2hlY2s7XG5cbiAgLyoqXG4gICAqICBIZWFsdGggY2hlY2sgZ3JhY2UgcGVyaW9kLlxuICAgKi9cbiAgcmVhZG9ubHkgaGVhbHRoQ2hlY2tHcmFjZVBlcmlvZDogY2RrLkR1cmF0aW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgdGltZSBwZXJpb2QgZHVyaW5nIHdoaWNoIHRoZSBsb2FkIGJhbGFuY2VyIHNlbmRzIGEgbmV3bHkgcmVnaXN0ZXJlZCB0YXJnZXQgYSBsaW5lYXJseSBpbmNyZWFzaW5nIHNoYXJlIG9mIHRoZSB0cmFmZmljIHRvIHRoZSB0YXJnZXQgZ3JvdXAuXG5cbiAgICpUaGUgcmFuZ2UgaXMgMzAtOTAwIHNlY29uZHMgKDE1IG1pbnV0ZXMpLlxuXG4gICAqIEBkZWZhdWx0VmFsdWUgdW5kZWZpbmVkXG4gICovXG4gIHJlYWRvbmx5IHNsb3dTdGFydD86IGNkay5EdXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIGFtb3VudCBvZiB0aW1lIGZvciBFbGFzdGljIExvYWQgQmFsYW5jaW5nIHRvIHdhaXQgYmVmb3JlIGRlcmVnaXN0ZXJpbmcgYSB0YXJnZXQuXG5cbiAgICogVGhlIHJhbmdlIGlzIDAtMzYwMCBzZWNvbmRzLlxuXG4gICAqIEBkZWZhdWx0VmFsdWUgNVxuICAqL1xuICByZWFkb25seSBkZXJlZ2lzdHJhdGlvbkRlbGF5PzogY2RrLkR1cmF0aW9uO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFkb2dJbnRlZ3JhdGlvblByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIG51bWJlciBvZiBDUFUgdW5pdHMgdG8gcmVzZXJ2ZSBmb3IgdGhlIGNvbnRhaW5lci5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSAtIDY0XG4gICAqL1xuICByZWFkb25seSBjcHU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBhbW91bnQgKGluIE1pQikgb2YgbWVtb3J5IHRvIHByZXNlbnQgdG8gdGhlIGNvbnRhaW5lci5cbiAgICpcbiAgICogSWYgeW91ciBjb250YWluZXIgYXR0ZW1wdHMgdG8gZXhjZWVkIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LCB0aGUgY29udGFpbmVyXG4gICAqIGlzIHRlcm1pbmF0ZWQuXG4gICAqXG4gICAqIEF0IGxlYXN0IG9uZSBvZiBtZW1vcnlMaW1pdE1pQiBhbmQgbWVtb3J5UmVzZXJ2YXRpb25NaUIgaXMgcmVxdWlyZWQgZm9yIG5vbi1GYXJnYXRlIHNlcnZpY2VzLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIC0gMTI4XG4gICAqL1xuICByZWFkb25seSBtZW1vcnlMaW1pdE1pQj86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGFtb3VudCBvZiB2aXJ0dWFsIENQVSB1bml0cyB0byBiZSByZXNlcnZlZCBmb3IgdGhlIGZpcmVsZW5zIGxvZy1yb3V0ZXIgY29udGFpbmVyIChpLmUuIGF3cy1mb3ItZmx1ZW50LWJpdCkuXG4gICAqXG4gICAqIFRoaXMgb25seSBhcHBsaWVzIGZvciB0aGUgQVdTX0ZJUkVfTEVOUyBsb2dnaW5nIG1vZGUuXG4gICAqIFNldHRpbmcgaXQgZm9yIGFueSBvdGhlciBsb2dnaW5nIG1vZGUgd2lsbCBjYXVzZSBhbiBleGNlcHRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgLSA2NFxuICAgKi9cbiAgcmVhZG9ubHkgYXdzRmlyZUxlbnNDcHU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBhbW91bnQgb2YgbWVtb3J5IChpbiBNaUIpIHJlc2VydmVkIGZvciB0aGUgZmlyZWxlbnMgbG9nLXJvdXRlciBjb250YWluZXIgKGkuZS4gYXdzLWZvci1mbHVlbnQtYml0KS5cbiAgICpcbiAgICogVGhpcyBvbmx5IGFwcGxpZXMgZm9yIHRoZSBBV1NfRklSRV9MRU5TIGxvZ2dpbmcgbW9kZS5cbiAgICogU2V0dGluZyBpdCBmb3IgYW55IG90aGVyIGxvZ2dpbmcgbW9kZSB3aWxsIGNhdXNlIGFuIGV4Y2VwdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSAtIDY0XG4gICAqL1xuICByZWFkb25seSBhd3NGaXJlTGVuc01lbW9yeUxpbWl0TWlCPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9nZ2luZyBtb2RlIGZvciB0aGUgc2VydmljZS5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSAtIFVzaW5nIHRoZSBEYXRhZG9nIGxvZyBmb3J3YXJkZXIgbGFtYmRhIHByb3ZpZGVkIGJ5IHRoZSBkYXRhZG9nLWludGVncmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9nZ2luZ01vZGVGb3JTZXJ2aWNlPzogRGF0YURvZ0xvZ2dpbmdNb2RlO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9nZ2luZyBtb2RlIGZvciB0aGUgRGF0YWRvZyBhZ2VudCBzaWRlY2FyLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIC0gTm8gbG9ncyBpbiBEYXRhZG9nLCBDbG91ZHdhdGNoIG9ubHkuXG4gICAqL1xuICByZWFkb25seSBsb2dnaW5nTW9kZUZvckRhdGFkb2dBZ2VudD86IERhdGFEb2dMb2dnaW5nTW9kZTtcblxuICAvKipcbiAgICogR0VUIGVuZHBvaW50cyB0byBpZ25vcmUgaW4gRGF0YWRvZydzIEFQTSBvdmVydmlldy4gVGhpcyBpcyB1c2VmdWwgdG8gZmlsdGVyIG91dCBhbGwgaGVhbHRoIGNoZWNrIGNhbGxzLlxuXG4gICAgKiBAZGVmYXVsdFZhbHVlIC0gTm8gZW5kcG9pbnRzIGFyZSBpZ25vcmVkLlxuICAgICovXG4gIHJlYWRvbmx5IGFwbUdldEVuZHBvaW50c1RvSWdub3JlPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZSBpZiB0aGUgRGF0YWRvZyBhZ2VudCBzaWRlY2FyIGlzIG1hcmtlZCBhcyBlc3NlbnRpYWwuXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgLSB0cnVlLlxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWRvZ1NpZGVjYXJFc3NlbnRpYWw/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmVzIHRoZSBkb2NrZXIgaW1hZ2UgdGFnIGZvciBkYXRhZG9nIHNpZGVjYXJcbiAgICogQGRlZmF1bHRWYWx1ZSAtICdsYXRlc3QnXG4gICAqL1xuICByZWFkb25seSBkYXRhZG9nU2lkZWNhclRhZz86IHN0cmluZztcblxuICAvKipcbiAgICogV2hlbiB5b3Ugc2V0IHVwIGEgcmVzdGFydCBwb2xpY3kgZm9yIGEgY29udGFpbmVyLCBBbWF6b24gRUNTIGNhbiByZXN0YXJ0IHRoZSBjb250YWluZXIgd2l0aG91dCBuZWVkaW5nIHRvIHJlcGxhY2UgdGhlIHRhc2tcbiAgICogQGRlZmF1bHRWYWx1ZSAtIHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZVJlc3RhcnRQb2xpY3k/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgZXhpdCBjb2RlcyB0byBiZSBpZ25vcmVkIGJ5IHRoZSByZXN0YXJ0IHBvbGljeVxuICAgKiBAZGVmYXVsdFZhbHVlIC0gWzBdXG4gICAqL1xuICByZWFkb25seSByZXN0YXJ0SWdub3JlZEV4aXRDb2Rlcz86IG51bWJlcltdO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmUgYWRkaXRpb25hbCB0YWdzLCB3aGljaCBhcmUgYXBwZW5kZWQgdG8gdGhlIGRlZmF1bHRzLFxuICAgKiBXaGVuIHlvdSBkZWZpbmUgY3VzdG9tIHRhZ3Mgd2Ugd291bGQgYmUgZ2xhZCBpZiB5b3UgY29udGFjdCB1cy5cbiAgICogV2Ugd291bGQgbGlrZSB0byBsZWFybiBhYm91dCB5b3VyIHVzZSBjYXNlcy5cbiAgICpcbiAgICogRGVmYXVsdCB0YWdzIGFyZSBub3QgYWxsb3dlZCB0byBiZSBvdmVycmlkZGVuIVxuICAgKlxuICAgKiBEZWZhdWx0cyBhcmU6XG4gICAqICogZW52OiBTZXQgdG8gUmlvRmFyZ2F0ZVNlcnZpY2VQcm9wcyNzdGFnZSBwcm9wXG4gICAqICogc2VydmljZTogU2V0IHRvIFJpb0ZhcmdhdGVTZXJ2aWNlUHJvcHMjc2VydmljZU5hbWUgcHJvcFxuICAgKiAqIHZlcnNpb246IFNldCB0byBSaW9GYXJnYXRlU2VydmljZVByb3BzI3ZlcnNpb24gcHJvcFxuICAgKiAqIGFjY291bnRfaWQ6JFxce2FjY291bnRJRFxcfVxuICAgKiAqIGFjY291bnRfbmFtZTokXFx7YWNjb3VudE5hbWVcXH1cbiAgICogKiByZWdpb246JFxce0FXU1JlZ2lvblxcfVxuICAgKiAqIHRlYW06JFxce3RlYW1OYW1lIGZyb20gc3NtIHBhcmFtIC9jb25maWcvdGVhbS9uYW1lXFx9XG4gICAqICogdGVhbV9pZGVudGlmaWVyOiRcXHt0ZWFtSWRlbnRpZmllciBmcm9tIHNzbSBwYXJhbSAvY29uZmlnL3RlYW0vaWRlbnRpZmllclxcfVxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbFRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG5leHBvcnQgZW51bSBEYXRhRG9nTG9nZ2luZ01vZGUge1xuICAvKipcbiAgICogRm9yd2FyZCBsb2dzIGRpcmVjdGx5IHRvIERhdGFkb2cgdXNpbmcgQVdTIEZpcmVMZW5zIGFzIGxvZyByb3V0ZXIsXG4gICAqIHNlZSBodHRwczovL2RvY3MuZGF0YWRvZ2hxLmNvbS9pbnRlZ3JhdGlvbnMvZWNzX2ZhcmdhdGUvP3RhYj1mbHVlbnRiaXRhbmRmaXJlbGVucyNsb2ctY29sbGVjdGlvbi5cbiAgICovXG4gIEFXU19GSVJFX0xFTlMsXG5cbiAgLyoqXG4gICAqIFN0b3JlIGxvZ3MgaW4gQVdTIENsb3Vkd2F0Y2ggYW5kIHVzZSB0aGUgUklPIGN1c3RvbWl6ZWQgRGF0YWRvZyBsb2cgZm9yd2FyZGVyIGxhbWJkYSBmcm9tIHRoZSBsZWdhY3lcbiAgICogZGF0YWRvZy1pbnRlZ3JhdGlvbiwgdG8gZm9yd2FyZCB0aGUgbG9ncyB0byBEYXRhZG9nLFxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vYml0YnVja2V0LmNvbGxhYm9yYXRpb24tbWFuLmNvbS9wcm9qZWN0cy9SSU9ERVYvcmVwb3MvZGF0YWRvZy1pbnRlZ3JhdGlvbi9icm93c2VcbiAgICogQGRlcHJlY2F0ZWQgdXNlIERBVEFET0dfRk9SV0FSREVSX0xBTUJEQVxuICAgKi9cbiAgRk9SV0FSREVSX0xBTUJEQSxcblxuICAvKipcbiAgICogU3RvcmUgbG9ncyBpbiBBV1MgQ2xvdWR3YXRjaCBhbmQgdXNlIHRoZSBEYXRhZG9nIGxvZyBmb3J3YXJkZXIgbGFtYmRhIHRvIGZvcndhcmQgdGhlIGxvZ3MgdG8gRGF0YWRvZyxcbiAgICogc2VlIGh0dHBzOi8vZG9jcy5kYXRhZG9naHEuY29tL2ludGVncmF0aW9ucy9lY3NfZmFyZ2F0ZS8/dGFiPWxvZ2RyaXZlciNsb2ctY29sbGVjdGlvbi5cbiAgICovXG4gIERBVEFET0dfRk9SV0FSREVSX0xBTUJEQSxcblxuICAvKipcbiAgICogT25seSBsb2cgdG8gQVdTIENsb3Vkd2F0Y2ggd2l0aG91dCBmb3J3YXJkaW5nIHRoZSBsb2dzIHRvIERhdGFkb2cuXG4gICAqL1xuICBOT05FLFxufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gb3BpbmlvbmF0ZWQgRUNTIEZhcmdhdGUgc2VydmljZSBmb3IgUklPIGFwcGxpY2F0aW9ucy5cbiAqXG4gKiBUaGlzIGNvbnN0cnVjdCBidW5kbGVzIHRoZSBwaWVjZXMgdGhhdCBtb3N0IFJJTyBiYWNrZW5kIHNlcnZpY2VzIG5lZWQ6XG4gKiBhbiBFQ1MgdGFzayBkZWZpbml0aW9uLCB0aGUgYXBwbGljYXRpb24gY29udGFpbmVyLCBhIERhdGFkb2cgc2lkZWNhcixcbiAqIG9wdGlvbmFsIEZpcmVMZW5zIGxvZyByb3V0aW5nLCBvcHRpb25hbCBBTEIgdGFyZ2V0IGdyb3VwIHdpcmluZywgYW5kIHRoZVxuICogRUNTIEZhcmdhdGUgc2VydmljZSBpdHNlbGYuXG4gKlxuICogSXQgYWxzbyBkZXJpdmVzIERhdGFkb2cgdGFncyBhbmQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZyb20gYHN0YWdlYCxcbiAqIGBzZXJ2aWNlTmFtZWAsIGB2ZXJzaW9uYCwgdGhlIEFXUyBhY2NvdW50LCBhbmQgdGhlIHN0YW5kYXJkIFJJTyBsYW5kaW5nLXpvbmVcbiAqIFNTTSBwYXJhbWV0ZXJzLiBEbyBub3Qgc2V0IGBERF9FTlZgLCBgRERfU0VSVklDRWAsIGBERF9WRVJTSU9OYCwgYEREX1RBR1NgLFxuICogb3IgYEREX0xPR1NfSU5KRUNUSU9OYCBtYW51YWxseSBpbiB0aGUgYXBwbGljYXRpb24gY29udGFpbmVyIGVudmlyb25tZW50LlxuICpcbiAqIFVzZSB0aGlzIGNvbnN0cnVjdCB3aGVuIHlvdSB3YW50IHRoZSBSSU8gcGF2ZWQgcm9hZCBmb3IgYSB3ZWItZmFjaW5nIG9yXG4gKiBzZXJ2aWNlLXN0eWxlIEZhcmdhdGUgd29ya2xvYWQgYW5kIHlvdSB3YW50IHRoZSBkZWZhdWx0cyBmb3Igb2JzZXJ2YWJpbGl0eSxcbiAqIERhdGFkb2cgc2VydmljZSBjYXRhbG9nIHJlZ2lzdHJhdGlvbiwgYW5kIGNvbW1vbiBBV1Mgd2lyaW5nIHRvIGJlIGhhbmRsZWRcbiAqIGZvciB5b3UuXG4gKiBJZiB5b3UgbmVlZCBhIGZ1bGx5IGN1c3RvbSBFQ1Mgc2V0dXAsIG9yIGEgZGlmZmVyZW50IGRlcGxveW1lbnQgc3RyYXRlZ3lcbiAqIHN1Y2ggYXMgYmx1ZS9ncmVlbiwgdXNlIGEgbG93ZXItbGV2ZWwgY29uc3RydWN0IG9yIHRoZSBibHVlL2dyZWVuIHZhcmlhbnRcbiAqIGluc3RlYWQuXG4gKlxuICogVG8gdXNlIGl0LCBwcm92aWRlOlxuICogLSBgc3RhZ2VgLCBgc2VydmljZU5hbWVgLCBhbmQgYHZlcnNpb25gIGZvciBzZXJ2aWNlIGlkZW50aXR5XG4gKiAtIGB2cGNgIGFuZCBvcHRpb25hbGx5IGFuIGV4aXN0aW5nIGBjbHVzdGVyYFxuICogLSBgY29udGFpbmVyRGVmaW5pdGlvbk9wdGlvbi5pbWFnZWAgZm9yIHRoZSBhcHBsaWNhdGlvbiBpbWFnZVxuICogLSBgZmFyZ2F0ZU9wdGlvbnMuY3B1YCBhbmQgYGZhcmdhdGVPcHRpb25zLm1lbW9yeUxpbWl0TWlCYCBmb3IgdGFzayBzaXppbmdcbiAqIC0gb3B0aW9uYWwgYGRhdGFkb2dPcHRpb25zYCwgYGZyYW1ld29ya3NgLCBhbmQgYGxvYWRCYWxhbmNlck9wdGlvbnNgXG4gKlxuICogRXhhbXBsZTpcbiAqIGBgYHRzXG4gKiBjb25zdCBzZXJ2aWNlID0gbmV3IFJpb0ZhcmdhdGVTZXJ2aWNlKHRoaXMsICdTZXJ2aWNlJywge1xuICogICBzdGFnZTogJ3Byb2QnLFxuICogICBzZXJ2aWNlTmFtZTogJ2JpbGxpbmctdmlldycsXG4gKiAgIHZlcnNpb246IHByb2Nlc3MuZW52LkdJVF9WRVJTSU9OID8/ICdsb2NhbCcsXG4gKiAgIHZwYzogUmlvTGFuZGluZ1pvbmUuZ2V0RGVmYXVsdFZwYyh0aGlzKSxcbiAqICAgY29udGFpbmVyRGVmaW5pdGlvbk9wdGlvbjoge1xuICogICAgIGltYWdlOiBlY3MuQ29udGFpbmVySW1hZ2UuZnJvbVJlZ2lzdHJ5KCdleGFtcGxlL2JpbGxpbmctdmlldzpsYXRlc3QnKSxcbiAqICAgfSxcbiAqICAgZmFyZ2F0ZU9wdGlvbnM6IHtcbiAqICAgICBjcHU6IDUxMixcbiAqICAgICBtZW1vcnlMaW1pdE1pQjogMTAyNCxcbiAqICAgfSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBSaW9GYXJnYXRlU2VydmljZSBleHRlbmRzIGNvbnN0cnVjdHMuQ29uc3RydWN0IGltcGxlbWVudHMgZWMyLklDb25uZWN0YWJsZSB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEREX0VOVl9ERU5ZX0xJU1QgPSBbJ0REX0VOVicsICdERF9UQUdTJywgJ0REX1NFUlZJQ0UnLCAnRERfVkVSU0lPTicsICdERF9MT0dTX0lOSkVDVElPTiddO1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEREX1RBR19ERU5ZX0xJU1QgPSBbXG4gICAgJ2VudicsXG4gICAgJ3NlcnZpY2UnLFxuICAgICd2ZXJzaW9uJyxcbiAgICAnYWNjb3VudF9pZCcsXG4gICAgJ2FjY291bnRfbmFtZScsXG4gICAgJ3JlZ2lvbicsXG4gICAgJ3RlYW0nLFxuICAgICd0ZWFtX2lkZW50aWZpZXInLFxuICBdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9BUE1fR0VUX0VORFBPSU5UU19UT19JR05PUkU6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9EQVRBRE9HX1NJREVDQVJfQ1BVID0gNjQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9EQVRBRE9HX1NJREVDQVJfTUVNT1JZX0xJTUlUX01JQiA9IDEyODtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX0RBVEFET0dfU0lERUNBUl9FU1NFTlRJQUwgPSB0cnVlO1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfREFUQURPR19FTkFCTEVfUkVTVEFSVF9QT0xJQ1kgPSB0cnVlO1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfREFUQURPR19SRVNUQVJUX0lHTk9SRURfRVhJVF9DT0RFUyA9IFswXTtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX0xPR0dJTkdfTU9ERV9GT1JfU0VSVklDRSA9IERhdGFEb2dMb2dnaW5nTW9kZS5GT1JXQVJERVJfTEFNQkRBO1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfTE9HR0lOR19NT0RFX0ZPUl9EQVRBRE9HX1NJREVDQVIgPSBEYXRhRG9nTG9nZ2luZ01vZGUuTk9ORTtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX0RFUkVHSVNUUkFUSU9OX0RFTEFZID0gY2RrLkR1cmF0aW9uLnNlY29uZHMoNSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9TTE9XX1NUQVJUID0gdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfREFUQURPR19TSURFQ0FSX1RBRyA9ICdsYXRlc3QnO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9MT0dfUk9VVEVSX0NQVSA9IDY0O1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfTE9HX1JPVVRFUl9NRU1PUllfTElNSVRfTUlCID0gNjQ7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBGSVJFTEVOU19DT05GSUdfQlVDS0VUX0FSTiA9ICdhcm46YXdzOnMzOjo6NTc3MTQ2ODk3Nzg1LWV1LXdlc3QtMS1maXJlbGVucy1jb25maWd1cmF0aW9uLWJ1Y2tldCc7XG4gIHByaXZhdGUgcmVhZG9ubHkgRklSRUxFTlNfQ09ORklHX0ZJTEVfUEFUSCA9ICcvcGFyc2UtanNvbi5jb25mJztcblxuICByZWFkb25seSBzZXJ2aWNlQ29udGFpbmVyRGVmaW5pdGlvbjogZWNzLkNvbnRhaW5lckRlZmluaXRpb247XG4gIHJlYWRvbmx5IGRhdGFkb2dTaWRlQ2FyQ29udGFpbmVyRGVmaW5pdGlvbjogZWNzLkNvbnRhaW5lckRlZmluaXRpb247XG4gIHJlYWRvbmx5IGxvZ1JvdXRlckNvbnRhaW5lckRlZmluaXRpb24/OiBlY3MuQ29udGFpbmVyRGVmaW5pdGlvbjtcbiAgcmVhZG9ubHkgdGFza0RlZmluaXRpb246IGVjcy5GYXJnYXRlVGFza0RlZmluaXRpb247XG5cbiAgcmVhZG9ubHkgY29ubmVjdGlvbnM6IGVjMi5Db25uZWN0aW9ucztcbiAgcmVhZG9ubHkgc2VydmljZTogZWNzLkZhcmdhdGVTZXJ2aWNlO1xuICByZWFkb25seSB0YXJnZXRHcm91cDogZWxidjIuQXBwbGljYXRpb25UYXJnZXRHcm91cCB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSaW9GYXJnYXRlU2VydmljZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IHtcbiAgICAgIGxvYWRCYWxhbmNlck9wdGlvbnMsXG4gICAgICB2cGMsXG4gICAgICBjbHVzdGVyLFxuICAgICAgZmFyZ2F0ZU9wdGlvbnMsXG4gICAgICBkYXRhZG9nT3B0aW9ucyxcbiAgICAgIHNlcnZpY2VOYW1lLFxuICAgICAgY29udGFpbmVyRGVmaW5pdGlvbk9wdGlvbixcbiAgICAgIHN0YWdlLFxuICAgICAgdmVyc2lvbixcbiAgICAgIGZyYW1ld29ya3MsXG4gICAgfSA9IHByb3BzO1xuXG4gICAgdGhpcy5ub2RlLmFkZFZhbGlkYXRpb24oXG4gICAgICBuZXcgRGVueUxpc3RlZEtleVZhbGlkYXRvcihcbiAgICAgICAgUmlvRmFyZ2F0ZVNlcnZpY2UuRERfRU5WX0RFTllfTElTVCxcbiAgICAgICAgcHJvcHMuY29udGFpbmVyRGVmaW5pdGlvbk9wdGlvbi5lbnZpcm9ubWVudCxcbiAgICAgICAgaXQgPT5cbiAgICAgICAgICBgRW52aXJvbm1lbnQgJHtpdH0gaXMgbm90IGFsbG93ZWQgdG8gYmUgc2V0LiBUaGlzIHZhbHVlIHdpbGwgYmUgaW5mZXJyZWQgZnJvbSB0aGUgYWNjb3VudCBvciBvdGhlciBwcm9wZXJ0aWVzLmBcbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMubm9kZS5hZGRWYWxpZGF0aW9uKFxuICAgICAgbmV3IERlbnlMaXN0ZWRLZXlWYWxpZGF0b3IoXG4gICAgICAgIFJpb0ZhcmdhdGVTZXJ2aWNlLkREX1RBR19ERU5ZX0xJU1QsXG4gICAgICAgIHByb3BzLmRhdGFkb2dPcHRpb25zPy5hZGRpdGlvbmFsVGFncyxcbiAgICAgICAgaXQgPT4gYFRhZyAke2l0fSBpcyBub3QgYWxsb3dlZCB0byBiZSBzZXQuIFRoaXMgdmFsdWUgd2lsbCBiZSBpbmZlcnJlZCBmcm9tIHRoZSBhY2NvdW50IG9yIG90aGVyIHByb3BlcnRpZXMuYFxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLm5vZGUuYWRkVmFsaWRhdGlvbihuZXcgQ2x1c3RlclZwY1ZhbGlkYXRvcihwcm9wcy52cGMsIHByb3BzLmNsdXN0ZXIpKTtcblxuICAgIHRoaXMubm9kZS5hZGRWYWxpZGF0aW9uKG5ldyBEYXRhZG9nU2lkZUNhclZhbGlkYXRvcihwcm9wcy5kYXRhZG9nT3B0aW9ucykpO1xuXG4gICAgdGhpcy5ub2RlLmFkZFZhbGlkYXRpb24obmV3IEZpcmVsZW5zU2lkZUNhclZhbGlkYXRvcihwcm9wcy5kYXRhZG9nT3B0aW9ucykpO1xuXG4gICAgY29uc3QgZmFyZ2F0ZUNsdXN0ZXIgPVxuICAgICAgY2x1c3RlciA/P1xuICAgICAgbmV3IGVjcy5DbHVzdGVyKHRoaXMsICdDbHVzdGVyJywge1xuICAgICAgICB2cGM6IHZwYyxcbiAgICAgIH0pO1xuICAgIHRoaXMudGFza0RlZmluaXRpb24gPSBuZXcgZWNzLkZhcmdhdGVUYXNrRGVmaW5pdGlvbih0aGlzLCAnVGFza0RlZmluaXRpb24nLCB7XG4gICAgICBjcHU6IGZhcmdhdGVPcHRpb25zLmNwdSxcbiAgICAgIG1lbW9yeUxpbWl0TWlCOiBmYXJnYXRlT3B0aW9ucy5tZW1vcnlMaW1pdE1pQixcbiAgICAgIHJ1bnRpbWVQbGF0Zm9ybToge1xuICAgICAgICBjcHVBcmNoaXRlY3R1cmU6IGZhcmdhdGVPcHRpb25zLnJ1bnRpbWVQbGF0Zm9ybT8uY3B1QXJjaGl0ZWN0dXJlID8/IGVjcy5DcHVBcmNoaXRlY3R1cmUuWDg2XzY0LFxuICAgICAgICBvcGVyYXRpbmdTeXN0ZW1GYW1pbHk6IGZhcmdhdGVPcHRpb25zLnJ1bnRpbWVQbGF0Zm9ybT8ub3BlcmF0aW5nU3lzdGVtRmFtaWx5ID8/IGVjcy5PcGVyYXRpbmdTeXN0ZW1GYW1pbHkuTElOVVgsXG4gICAgICB9LFxuICAgIH0pO1xuICAgIGNvbnN0IGFjY291bnROYW1lID0gc3NtLlN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyTmFtZShcbiAgICAgIHRoaXMsXG4gICAgICAnQWNjb3VudE5hbWUnLFxuICAgICAgJy9jb25maWcvYWNjb3VudC9uYW1lJ1xuICAgICkuc3RyaW5nVmFsdWU7XG4gICAgY29uc3QgdGVhbU5hbWUgPSBzc20uU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJOYW1lKHRoaXMsICdUZWFtTmFtZScsICcvY29uZmlnL3RlYW0vbmFtZScpLnN0cmluZ1ZhbHVlO1xuICAgIGNvbnN0IHRlYW1JZGVudGlmaWVyID0gc3NtLlN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyTmFtZShcbiAgICAgIHRoaXMsXG4gICAgICAnVGVhbUlkZW50aWZpZXInLFxuICAgICAgJy9jb25maWcvdGVhbS9pZGVudGlmaWVyJ1xuICAgICkuc3RyaW5nVmFsdWU7XG5cbiAgICBjb25zdCBkYXRhZG9nU2VjcmV0ID0gRGF0YWRvZ1NoYXJlZFNlY3JldC5jcmVkZW50aWFsc1NlY3JldCh0aGlzKTtcbiAgICBjb25zdCBkYXRhZG9nU2l0ZSA9IGRhdGFkb2dTZWNyZXQuZ2V0U2VjcmV0VmFsdWUoJ1NpdGUnKS51bnNhZmVVbndyYXAoKTtcbiAgICBjb25zdCBkYXRhZG9nQXBpS2V5ID0gZGF0YWRvZ1NlY3JldC5nZXRTZWNyZXQoJ0FwaUtleScpO1xuXG4gICAgY29uc3QgZGF0YWRvZ1NpZGVjYXJDcHUgPSBkYXRhZG9nT3B0aW9ucz8uY3B1ID8/IHRoaXMuREVGQVVMVF9EQVRBRE9HX1NJREVDQVJfQ1BVO1xuICAgIGNvbnN0IGRhdGFkb2dTaWRlY2FyTWVtb3J5TWlCID0gZGF0YWRvZ09wdGlvbnM/Lm1lbW9yeUxpbWl0TWlCID8/IHRoaXMuREVGQVVMVF9EQVRBRE9HX1NJREVDQVJfTUVNT1JZX0xJTUlUX01JQjtcblxuICAgIGNvbnN0IGxvZ2dpbmdNb2RlRm9yU2VydmljZSA9IGRhdGFkb2dPcHRpb25zPy5sb2dnaW5nTW9kZUZvclNlcnZpY2UgPz8gdGhpcy5ERUZBVUxUX0xPR0dJTkdfTU9ERV9GT1JfU0VSVklDRTtcbiAgICBjb25zdCBsb2dnaW5nTW9kZUZvckRhdGFkb2dBZ2VudCA9XG4gICAgICBkYXRhZG9nT3B0aW9ucz8ubG9nZ2luZ01vZGVGb3JEYXRhZG9nQWdlbnQgPz8gdGhpcy5ERUZBVUxUX0xPR0dJTkdfTU9ERV9GT1JfREFUQURPR19TSURFQ0FSO1xuICAgIGNvbnN0IGZpcmVMZW5zTG9nUm91dGVyUmVxdWlyZWQgPVxuICAgICAgbG9nZ2luZ01vZGVGb3JTZXJ2aWNlID09PSBEYXRhRG9nTG9nZ2luZ01vZGUuQVdTX0ZJUkVfTEVOUyB8fFxuICAgICAgbG9nZ2luZ01vZGVGb3JEYXRhZG9nQWdlbnQgPT09IERhdGFEb2dMb2dnaW5nTW9kZS5BV1NfRklSRV9MRU5TO1xuXG4gICAgY29uc3QgZmlyZUxlbnNTaWRlY2FyQ3B1ID0gZGF0YWRvZ09wdGlvbnM/LmF3c0ZpcmVMZW5zQ3B1ID8/IHRoaXMuREVGQVVMVF9MT0dfUk9VVEVSX0NQVTtcbiAgICBjb25zdCBmaXJlTGVuc1NpZGVjYXJNZW1vcnlNaUIgPVxuICAgICAgZGF0YWRvZ09wdGlvbnM/LmF3c0ZpcmVMZW5zTWVtb3J5TGltaXRNaUIgPz8gdGhpcy5ERUZBVUxUX0xPR19ST1VURVJfTUVNT1JZX0xJTUlUX01JQjtcbiAgICBjb25zdCBkYXRhZG9nU2lkZWNhckVzc2VudGlhbCA9IGRhdGFkb2dPcHRpb25zPy5kYXRhZG9nU2lkZWNhckVzc2VudGlhbCA/PyB0aGlzLkRFRkFVTFRfREFUQURPR19TSURFQ0FSX0VTU0VOVElBTDtcbiAgICBjb25zdCBkYXRhRG9nRW5hYmxlUmVzdGFydFBvbGljeSA9XG4gICAgICBkYXRhZG9nT3B0aW9ucz8uZW5hYmxlUmVzdGFydFBvbGljeSA/PyB0aGlzLkRFRkFVTFRfREFUQURPR19FTkFCTEVfUkVTVEFSVF9QT0xJQ1k7XG5cbiAgICBmdW5jdGlvbiBnZXRSZXN0YXJ0SWdub3JlZEV4aXRDb2RlcyhcbiAgICAgIGVuYWJsZVJlc3RhcnRQb2xpY3k6IGJvb2xlYW4gfCB1bmRlZmluZWQsXG4gICAgICByZXN0YXJ0SWdub3JlZEV4aXRDb2RlczogbnVtYmVyW10gfCB1bmRlZmluZWQsXG4gICAgICBkZWZhdWx0SWdub3JlZEV4aXRDb2RlczogbnVtYmVyW11cbiAgICApOiBudW1iZXJbXSB8IHVuZGVmaW5lZCB7XG4gICAgICBpZiAoZW5hYmxlUmVzdGFydFBvbGljeSA9PT0gZmFsc2UpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH0gZWxzZSBpZiAoZW5hYmxlUmVzdGFydFBvbGljeSA9PT0gdHJ1ZSkge1xuICAgICAgICByZXR1cm4gcmVzdGFydElnbm9yZWRFeGl0Q29kZXMgPz8gWzBdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGRlZmF1bHRJZ25vcmVkRXhpdENvZGVzO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGRhdGFEb2dyZXN0YXJ0SWdub3JlZEV4aXRDb2RlcyA9IGdldFJlc3RhcnRJZ25vcmVkRXhpdENvZGVzKFxuICAgICAgZGF0YURvZ0VuYWJsZVJlc3RhcnRQb2xpY3ksXG4gICAgICBkYXRhZG9nT3B0aW9ucz8ucmVzdGFydElnbm9yZWRFeGl0Q29kZXMsXG4gICAgICB0aGlzLkRFRkFVTFRfREFUQURPR19SRVNUQVJUX0lHTk9SRURfRVhJVF9DT0RFU1xuICAgICk7XG5cbiAgICBsZXQgc2VydmljZUNvbnRhaW5lckNwdVVuaXRzOiBudW1iZXI7XG4gICAgbGV0IHNlcnZpY2VDb250YWluZXJNZW1vcnlMaW1pdE1pQjogbnVtYmVyO1xuXG4gICAgaWYgKGZpcmVMZW5zTG9nUm91dGVyUmVxdWlyZWQpIHtcbiAgICAgIHNlcnZpY2VDb250YWluZXJDcHVVbml0cyA9IGZhcmdhdGVPcHRpb25zLmNwdSAtIGRhdGFkb2dTaWRlY2FyQ3B1IC0gZmlyZUxlbnNTaWRlY2FyQ3B1O1xuICAgICAgc2VydmljZUNvbnRhaW5lck1lbW9yeUxpbWl0TWlCID1cbiAgICAgICAgZmFyZ2F0ZU9wdGlvbnMubWVtb3J5TGltaXRNaUIgLSBkYXRhZG9nU2lkZWNhck1lbW9yeU1pQiAtIGZpcmVMZW5zU2lkZWNhck1lbW9yeU1pQjtcbiAgICAgIGRhdGFkb2cuYWRkRmlyZWxlbnNDb25maWdVcGxvYWRGcm9tUzNQZXJtaXNzaW9ucyh7XG4gICAgICAgIHRhc2tEZWZpbml0aW9uOiB0aGlzLnRhc2tEZWZpbml0aW9uLFxuICAgICAgICBmaXJlbGVuc0NvbmZpZ0J1Y2tldEFybjogdGhpcy5GSVJFTEVOU19DT05GSUdfQlVDS0VUX0FSTixcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBzZXJ2aWNlQ29udGFpbmVyQ3B1VW5pdHMgPSBmYXJnYXRlT3B0aW9ucy5jcHUgLSBkYXRhZG9nU2lkZWNhckNwdTtcbiAgICAgIHNlcnZpY2VDb250YWluZXJNZW1vcnlMaW1pdE1pQiA9IGZhcmdhdGVPcHRpb25zLm1lbW9yeUxpbWl0TWlCIC0gZGF0YWRvZ1NpZGVjYXJNZW1vcnlNaUI7XG4gICAgfVxuICAgIHRoaXMuc2VydmljZUNvbnRhaW5lckRlZmluaXRpb24gPSB0aGlzLnRhc2tEZWZpbml0aW9uLmFkZENvbnRhaW5lcihzZXJ2aWNlTmFtZSwge1xuICAgICAgaW1hZ2U6IGNvbnRhaW5lckRlZmluaXRpb25PcHRpb24uaW1hZ2UsXG4gICAgICBjcHU6IHNlcnZpY2VDb250YWluZXJDcHVVbml0cyxcbiAgICAgIG1lbW9yeUxpbWl0TWlCOiBzZXJ2aWNlQ29udGFpbmVyTWVtb3J5TGltaXRNaUIsXG4gICAgICBlbnZpcm9ubWVudDoge1xuICAgICAgICAuLi5kYXRhZG9nLmdldEZhcmdhdGVDb250YWluZXJFbnZpcm9ubWVudFZhcmlhYmxlcyh7XG4gICAgICAgICAgc2NvcGU6IHRoaXMsXG4gICAgICAgICAgc3RhZ2UsXG4gICAgICAgICAgc2VydmljZU5hbWUsXG4gICAgICAgICAgdmVyc2lvbixcbiAgICAgICAgICBhY2NvdW50TmFtZSxcbiAgICAgICAgICB0ZWFtTmFtZSxcbiAgICAgICAgICB0ZWFtSWRlbnRpZmllcixcbiAgICAgICAgICBhZGRpdGlvbmFsVGFnczogZGF0YWRvZ09wdGlvbnM/LmFkZGl0aW9uYWxUYWdzLFxuICAgICAgICB9KSxcbiAgICAgICAgLi4uY29udGFpbmVyRGVmaW5pdGlvbk9wdGlvbi5lbnZpcm9ubWVudCxcbiAgICAgIH0sXG4gICAgICBkb2NrZXJMYWJlbHM6IHtcbiAgICAgICAgLi4uZGF0YWRvZy5nZXRGYXJnYXRlRG9ja2VyTGFiZWxzKHsgc3RhZ2UsIHNlcnZpY2VOYW1lLCB2ZXJzaW9uIH0pLFxuICAgICAgfSxcbiAgICAgIGhlYWx0aENoZWNrOiBjb250YWluZXJEZWZpbml0aW9uT3B0aW9uLmhlYWx0aENoZWNrLFxuICAgICAgbG9nZ2luZzogZGF0YWRvZy5zZXR1cExvZ2dpbmcoe1xuICAgICAgICBzY29wZSxcbiAgICAgICAgYWNjb3VudE5hbWUsXG4gICAgICAgIHRlYW1OYW1lLFxuICAgICAgICB0ZWFtSWRlbnRpZmllcixcbiAgICAgICAgc3RhZ2UsXG4gICAgICAgIHNlcnZpY2VOYW1lLFxuICAgICAgICB2ZXJzaW9uLFxuICAgICAgICBkYXRhZG9nQXBpS2V5LFxuICAgICAgICBkYXRhZG9nTG9nZ2luZ01vZGU6IGxvZ2dpbmdNb2RlRm9yU2VydmljZSxcbiAgICAgICAgZGF0YWRvZ1NpdGUsXG4gICAgICAgIGNvbnRhaW5lclR5cGU6ICdzZXJ2aWNlJyxcbiAgICAgICAgYWRkaXRpb25hbFRhZ3M6IGRhdGFkb2dPcHRpb25zPy5hZGRpdGlvbmFsVGFncyxcbiAgICAgIH0pLFxuICAgICAgc2VjcmV0czogY29udGFpbmVyRGVmaW5pdGlvbk9wdGlvbi5zZWNyZXRzLFxuICAgIH0pO1xuXG4gICAgaWYgKGZyYW1ld29ya3M/LmluY2x1ZGVzKEZyYW1ld29yay5TUFJJTkcpKSB7XG4gICAgICBTcHJpbmcuYWxsb3dQYXJhbWV0ZXJTdG9yZUFjY2Vzc0ZvclNwcmluZ0Nsb3VkQXdzKHRoaXMsIHNlcnZpY2VOYW1lLCB0aGlzLnRhc2tEZWZpbml0aW9uLnRhc2tSb2xlKTtcbiAgICAgIFNwcmluZy5hbGxvd1NlY3JldHNNYW5hZ2VyQWNjZXNzRm9yU3ByaW5nQ2xvdWRBd3ModGhpcywgc2VydmljZU5hbWUsIHRoaXMudGFza0RlZmluaXRpb24udGFza1JvbGUpO1xuICAgIH1cblxuICAgIGlmIChmaXJlTGVuc0xvZ1JvdXRlclJlcXVpcmVkKSB7XG4gICAgICB0aGlzLmxvZ1JvdXRlckNvbnRhaW5lckRlZmluaXRpb24gPSBkYXRhZG9nLmFkZEZpcmVMZW5zTG9nUm91dGVyKHtcbiAgICAgICAgdGFza0RlZmluaXRpb246IHRoaXMudGFza0RlZmluaXRpb24sXG4gICAgICAgIGNwdTogZmlyZUxlbnNTaWRlY2FyQ3B1LFxuICAgICAgICBtZW1vcnlMaW1pdE1pQjogZmlyZUxlbnNTaWRlY2FyTWVtb3J5TWlCLFxuICAgICAgICBmaXJlbGVuc0NvbmZpZ0J1Y2tldEFybjogdGhpcy5GSVJFTEVOU19DT05GSUdfQlVDS0VUX0FSTixcbiAgICAgICAgZmlyZWxlbnNDb25maWdGaWxlUGF0aDogdGhpcy5GSVJFTEVOU19DT05GSUdfRklMRV9QQVRILFxuICAgICAgICBzZXJ2aWNlTmFtZTogcHJvcHMuc2VydmljZU5hbWUsXG4gICAgICB9KTtcblxuICAgICAgdGhpcy50YXNrRGVmaW5pdGlvbi5leGVjdXRpb25Sb2xlPy5hZGRNYW5hZ2VkUG9saWN5KFxuICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ3NlcnZpY2Utcm9sZS9BbWF6b25FQ1NUYXNrRXhlY3V0aW9uUm9sZVBvbGljeScpXG4gICAgICApO1xuICAgIH1cbiAgICBpZiAodGhpcy50YXNrRGVmaW5pdGlvbi5leGVjdXRpb25Sb2xlKSB7XG4gICAgICBkYXRhZG9nU2VjcmV0LmdyYW50UmVhZCh0aGlzLnRhc2tEZWZpbml0aW9uLmV4ZWN1dGlvblJvbGUpO1xuICAgIH1cbiAgICB0aGlzLmRhdGFkb2dTaWRlQ2FyQ29udGFpbmVyRGVmaW5pdGlvbiA9IGRhdGFkb2cuYWRkRGF0YWRvZ1NpZGVjYXIoe1xuICAgICAgc2NvcGUsXG4gICAgICB0YXNrRGVmaW5pdGlvbjogdGhpcy50YXNrRGVmaW5pdGlvbixcbiAgICAgIGFjY291bnROYW1lLFxuICAgICAgdGVhbU5hbWUsXG4gICAgICB0ZWFtSWRlbnRpZmllcixcbiAgICAgIHN0YWdlLFxuICAgICAgc2VydmljZU5hbWUsXG4gICAgICB2ZXJzaW9uLFxuICAgICAgZGF0YWRvZ0FwaUtleSxcbiAgICAgIGRhdGFkb2dTaXRlLFxuICAgICAgZGF0YWRvZ0xvZ2dpbmdNb2RlOiBsb2dnaW5nTW9kZUZvckRhdGFkb2dBZ2VudCxcbiAgICAgIGFwbUdldFJlc291cmNlc1RvSWdub3JlOiBkYXRhZG9nT3B0aW9ucz8uYXBtR2V0RW5kcG9pbnRzVG9JZ25vcmUgPz8gdGhpcy5ERUZBVUxUX0FQTV9HRVRfRU5EUE9JTlRTX1RPX0lHTk9SRSxcbiAgICAgIGNwdTogZGF0YWRvZ1NpZGVjYXJDcHUsXG4gICAgICBtZW1vcnlMaW1pdE1pQjogZGF0YWRvZ1NpZGVjYXJNZW1vcnlNaUIsXG4gICAgICBlc3NlbnRpYWw6IGRhdGFkb2dTaWRlY2FyRXNzZW50aWFsLFxuICAgICAgZW5hYmxlUmVzdGFydFBvbGljeTogZGF0YURvZ0VuYWJsZVJlc3RhcnRQb2xpY3ksXG4gICAgICByZXN0YXJ0SWdub3JlZEV4aXRDb2RlczogZGF0YURvZ3Jlc3RhcnRJZ25vcmVkRXhpdENvZGVzLFxuICAgICAgY29udGFpbmVyVGFnOiBwcm9wcy5kYXRhZG9nT3B0aW9ucz8uZGF0YWRvZ1NpZGVjYXJUYWcgPz8gdGhpcy5ERUZBVUxUX0RBVEFET0dfU0lERUNBUl9UQUcsIC8vIFRoZXNlIGFyZSBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsXG4gICAgICBhZGRpdGlvbmFsVGFnczogZGF0YWRvZ09wdGlvbnM/LmFkZGl0aW9uYWxUYWdzLFxuICAgIH0pO1xuXG4gICAgZGF0YWRvZy5lbnN1cmVMb2dnaW5nQW5kTW9uaXRvcmluZ0FyZVJlYWR5QmVmb3JlU2VydmljZVN0YXJ0cyh0aGlzKTtcblxuICAgIGNvbnN0IGxvYWRCYWxhbmNlck9wdGlvbnNGb3JGYXJnYXRlU2VydmljZSA9IGxvYWRCYWxhbmNlck9wdGlvbnNcbiAgICAgID8geyBoZWFsdGhDaGVja0dyYWNlUGVyaW9kOiBsb2FkQmFsYW5jZXJPcHRpb25zLmhlYWx0aENoZWNrR3JhY2VQZXJpb2QgfVxuICAgICAgOiB7fTtcblxuICAgIHRoaXMuc2VydmljZSA9IG5ldyBlY3MuRmFyZ2F0ZVNlcnZpY2UodGhpcywgJ1NlcnZpY2UnLCB7XG4gICAgICBjbHVzdGVyOiBmYXJnYXRlQ2x1c3RlcixcbiAgICAgIHRhc2tEZWZpbml0aW9uOiB0aGlzLnRhc2tEZWZpbml0aW9uLFxuICAgICAgY2lyY3VpdEJyZWFrZXI6IHsgcm9sbGJhY2s6IHRydWUgfSxcbiAgICAgIG1heEhlYWx0aHlQZXJjZW50OiAyMDAsXG4gICAgICBtaW5IZWFsdGh5UGVyY2VudDogMTAwLFxuICAgICAgZGVzaXJlZENvdW50OiBmYXJnYXRlT3B0aW9ucz8uZGVzaXJlZENvdW50LFxuICAgICAgLi4ubG9hZEJhbGFuY2VyT3B0aW9uc0ZvckZhcmdhdGVTZXJ2aWNlLFxuICAgICAgcHJvcGFnYXRlVGFnczogZWNzLlByb3BhZ2F0ZWRUYWdTb3VyY2UuU0VSVklDRSxcbiAgICB9KTtcblxuICAgIHRoaXMuY29ubmVjdGlvbnMgPSB0aGlzLnNlcnZpY2UuY29ubmVjdGlvbnM7XG5cbiAgICBpZiAobG9hZEJhbGFuY2VyT3B0aW9ucyAhPSBudWxsKSB7XG4gICAgICBjb25zdCBjb250YWluZXJQb3J0ID0gNDQzO1xuICAgICAgdGhpcy5zZXJ2aWNlQ29udGFpbmVyRGVmaW5pdGlvbi5hZGRQb3J0TWFwcGluZ3Moe1xuICAgICAgICBjb250YWluZXJQb3J0OiBjb250YWluZXJQb3J0LFxuICAgICAgICBwcm90b2NvbDogZWNzLlByb3RvY29sLlRDUCxcbiAgICAgIH0pO1xuICAgICAgdGhpcy50YXJnZXRHcm91cCA9IG5ldyBlbGJ2Mi5BcHBsaWNhdGlvblRhcmdldEdyb3VwKHRoaXMsICdUYXJnZXRHcm91cCcsIHtcbiAgICAgICAgdnBjOiB2cGMsXG4gICAgICAgIHBvcnQ6IGNvbnRhaW5lclBvcnQsXG4gICAgICAgIHByb3RvY29sOiBlbGJ2Mi5BcHBsaWNhdGlvblByb3RvY29sLkhUVFBTLFxuICAgICAgICB0YXJnZXRUeXBlOiBlbGJ2Mi5UYXJnZXRUeXBlLklQLFxuICAgICAgICB0YXJnZXRzOiBbdGhpcy5zZXJ2aWNlXSxcbiAgICAgICAgaGVhbHRoQ2hlY2s6IGxvYWRCYWxhbmNlck9wdGlvbnMuaGVhbHRoQ2hlY2ssXG4gICAgICAgIHNsb3dTdGFydDogcHJvcHMubG9hZEJhbGFuY2VyT3B0aW9ucz8uc2xvd1N0YXJ0ID8/IHRoaXMuREVGQVVMVF9TTE9XX1NUQVJULFxuICAgICAgICBkZXJlZ2lzdHJhdGlvbkRlbGF5OiBwcm9wcy5sb2FkQmFsYW5jZXJPcHRpb25zPy5kZXJlZ2lzdHJhdGlvbkRlbGF5ID8/IHRoaXMuREVGQVVMVF9ERVJFR0lTVFJBVElPTl9ERUxBWSxcbiAgICAgIH0pO1xuXG4gICAgICBsb2FkQmFsYW5jZXJPcHRpb25zLmxpc3RlbmVyUnVsZXMuZm9yRWFjaCgoeyBwcmlvcml0eSwgY29uZGl0aW9ucyB9KSA9PiB7XG4gICAgICAgIGxvYWRCYWxhbmNlck9wdGlvbnMubGlzdGVuZXIuYWRkVGFyZ2V0R3JvdXBzKGBQcmlvcml0eSR7cHJpb3JpdHl9TGlzdGVuZXJSdWxlYCwge1xuICAgICAgICAgIHRhcmdldEdyb3VwczogW3RoaXMudGFyZ2V0R3JvdXAgYXMgZWxidjIuQXBwbGljYXRpb25UYXJnZXRHcm91cF0sXG4gICAgICAgICAgcHJpb3JpdHk6IHByaW9yaXR5LFxuICAgICAgICAgIGNvbmRpdGlvbnM6IGNvbmRpdGlvbnMsXG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmV3IERhdGFkb2dTZXJ2aWNlQ2F0YWxvZ0VudHJ5KHRoaXMsICdEYXRhZG9nU2VydmljZUNhdGFsb2dFbnRyeScsIHtcbiAgICAgIHNlcnZpY2VOYW1lOiBzZXJ2aWNlTmFtZSxcbiAgICAgIGxhbmd1YWdlczogWydqYXZhJ10sXG4gICAgICBzZXJ2aWNlVHlwZTogJ3dlYicsXG4gICAgfSk7XG4gIH1cbn1cblxuY2xhc3MgRGVueUxpc3RlZEtleVZhbGlkYXRvciBpbXBsZW1lbnRzIGNvbnN0cnVjdHMuSVZhbGlkYXRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlbnlMaXN0OiBzdHJpbmdbXSxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRpY3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCB1bmRlZmluZWQsXG4gICAgcHJpdmF0ZSByZWFkb25seSBtZXNzYWdlR2VuZXJhdG9yOiAoa2V5TmFtZTogc3RyaW5nKSA9PiBzdHJpbmdcbiAgKSB7fVxuXG4gIHZhbGlkYXRlKCk6IHN0cmluZ1tdIHtcbiAgICBpZiAoIXRoaXMuZGljdCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cblxuICAgIGNvbnN0IHJlc3VsdDogc3RyaW5nW10gPSBbXTtcbiAgICB0aGlzLmRlbnlMaXN0LmZvckVhY2goa2V5TmFtZSA9PiB7XG4gICAgICBpZiAodGhpcy5kaWN0ICYmIGtleU5hbWUgaW4gdGhpcy5kaWN0KSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKHRoaXMubWVzc2FnZUdlbmVyYXRvcihrZXlOYW1lKSk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cbmNsYXNzIENsdXN0ZXJWcGNWYWxpZGF0b3IgaW1wbGVtZW50cyBjb25zdHJ1Y3RzLklWYWxpZGF0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSB2cGM6IGVjMi5JVnBjLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2x1c3Rlcj86IGVjcy5JQ2x1c3RlclxuICApIHt9XG5cbiAgdmFsaWRhdGUoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGlmICh0aGlzLmNsdXN0ZXIgJiYgdGhpcy5jbHVzdGVyLnZwYy52cGNJZCAhPT0gdGhpcy52cGMudnBjSWQpIHtcbiAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICBgVGhlIFZQQyBwcm92aWRlZCBpbiB0aGUgY2x1c3RlciAoJHt0aGlzLmNsdXN0ZXIudnBjLm5vZGUuaWR9KSBNVVNUIG1hdGNoIHRoZSBWUEMgcHJvdmlkZWQgYXMgYXJndW1lbnQgKCR7dGhpcy52cGMubm9kZS5pZH0pLmBcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cblxuY2xhc3MgRGF0YWRvZ1NpZGVDYXJWYWxpZGF0b3IgaW1wbGVtZW50cyBjb25zdHJ1Y3RzLklWYWxpZGF0aW9uIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSBkYXRhZG9nT3B0aW9ucz86IERhdGFkb2dJbnRlZ3JhdGlvblByb3BzKSB7fVxuICB2YWxpZGF0ZSgpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgaWYgKFxuICAgICAgdGhpcy5kYXRhZG9nT3B0aW9ucyAmJlxuICAgICAgdGhpcy5kYXRhZG9nT3B0aW9ucy5lbmFibGVSZXN0YXJ0UG9saWN5ID09PSBmYWxzZSAmJlxuICAgICAgdGhpcy5kYXRhZG9nT3B0aW9ucy5yZXN0YXJ0SWdub3JlZEV4aXRDb2Rlc1xuICAgICkge1xuICAgICAgcmVzdWx0LnB1c2goJ1Jlc3RhcnRJZ25vcmVkRXhpdENvZGVzIGNhbm5vdCBiZSBzcGVjaWZpZWQgaWYgZW5hYmxlUmVzdGFydFBvbGljeSBpcyBmYWxzZScpO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG5cbmNsYXNzIEZpcmVsZW5zU2lkZUNhclZhbGlkYXRvciBpbXBsZW1lbnRzIGNvbnN0cnVjdHMuSVZhbGlkYXRpb24ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGRhdGFkb2dPcHRpb25zPzogRGF0YWRvZ0ludGVncmF0aW9uUHJvcHMpIHt9XG5cbiAgdmFsaWRhdGUoKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xuICAgIGlmICh0aGlzLmRhdGFkb2dPcHRpb25zKSB7XG4gICAgICBjb25zdCBpc0ZpcmVsZW5zVXNlZCA9XG4gICAgICAgIHRoaXMuZGF0YWRvZ09wdGlvbnMubG9nZ2luZ01vZGVGb3JTZXJ2aWNlID09IERhdGFEb2dMb2dnaW5nTW9kZS5BV1NfRklSRV9MRU5TIHx8XG4gICAgICAgIHRoaXMuZGF0YWRvZ09wdGlvbnMubG9nZ2luZ01vZGVGb3JEYXRhZG9nQWdlbnQgPT0gRGF0YURvZ0xvZ2dpbmdNb2RlLkFXU19GSVJFX0xFTlM7XG4gICAgICBjb25zdCBpc0ZpcmVsZW5zQ29uZmlndXJlZCA9IHRoaXMuZGF0YWRvZ09wdGlvbnMuYXdzRmlyZUxlbnNDcHUgfHwgdGhpcy5kYXRhZG9nT3B0aW9ucy5hd3NGaXJlTGVuc01lbW9yeUxpbWl0TWlCO1xuXG4gICAgICBpZiAoIWlzRmlyZWxlbnNVc2VkICYmIGlzRmlyZWxlbnNDb25maWd1cmVkKSB7XG4gICAgICAgIHJlc3VsdC5wdXNoKFxuICAgICAgICAgICdZb3UgY2Fubm90IG92ZXJyaWRlIHRoZSBjb250YWluZXIgcmVzb3VyY2UgYWxsb2NhdGlvbiBmb3IgZmlyZWxlbnMgaWYgaXQgaXMgbm90IHVzZWQgYXMgbG9nZ2luZyBtb2RlIGZvciBhbnkgY29udGFpbmVyJ1xuICAgICAgICApO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG59XG4iXX0=
|
|
379
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmlvLWZhcmdhdGUtc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9mYXJnYXRlL3Jpby1mYXJnYXRlLXNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtQ0FBbUM7QUFFbkMsMkNBQTJDO0FBQzNDLGdFQUFnRTtBQUNoRSwyQ0FBMkM7QUFDM0MsMkNBQTJDO0FBQzNDLHlDQUF5QztBQUN6Qyw0Q0FBK0U7QUFDL0UscUNBQXFDO0FBQ3JDLHFDQUFrQztBQUNsQyxxREFJMEI7QUFFMUIsbURBUzBCO0FBUnhCLG9JQUFBLGtDQUFrQyxPQUFBO0FBS2xDLG1IQUFBLGlCQUFpQixPQUFBO0FBRWpCLHdIQUFBLHNCQUFzQixPQUFBO0FBOER4QixJQUFZLFNBS1g7QUFMRCxXQUFZLFNBQVM7SUFDbkI7O09BRUc7SUFDSCw2Q0FBTSxDQUFBO0FBQ1IsQ0FBQyxFQUxXLFNBQVMseUJBQVQsU0FBUyxRQUtwQjtBQXdSRCxJQUFZLGtCQTBCWDtBQTFCRCxXQUFZLGtCQUFrQjtJQUM1Qjs7O09BR0c7SUFDSCw2RUFBYSxDQUFBO0lBRWI7Ozs7OztPQU1HO0lBQ0gsbUZBQWdCLENBQUE7SUFFaEI7OztPQUdHO0lBQ0gsbUdBQXdCLENBQUE7SUFFeEI7O09BRUc7SUFDSCwyREFBSSxDQUFBO0FBQ04sQ0FBQyxFQTFCVyxrQkFBa0Isa0NBQWxCLGtCQUFrQixRQTBCN0I7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0Q0c7QUFDSCxNQUFhLGlCQUFrQixTQUFRLFVBQVUsQ0FBQyxTQUFTO0lBeUN6RCxZQUFZLEtBQTJCLEVBQUUsRUFBVSxFQUFFLEtBQTZCO1FBQ2hGLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUE1QkYsd0NBQW1DLEdBQWEsRUFBRSxDQUFDO1FBQ25ELGdDQUEyQixHQUFHLEVBQUUsQ0FBQztRQUNqQyw2Q0FBd0MsR0FBRyxH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LGtCQUFrQixDQUFDLGFBQWE7Z0JBQzdFLElBQUksQ0FBQyxjQUFjLENBQUMsMEJBQTBCLElBQUksa0JBQWtCLENBQUMsYUFBYSxDQUFDO1lBQ3JGLE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxjQUFjLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyx5QkFBeUIsQ0FBQztZQUVqSCxJQUFJLENBQUMsY0FBYyxJQUFJLG9CQUFvQixFQUFFLENBQUM7Z0JBQzVDLE1BQU0sQ0FBQyxJQUFJLENBQ1Qsd0hBQXdILENBQ3pILENBQUM7WUFDSixDQUFDO1FBQ0gsQ0FBQztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2hCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgdHlwZSAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGVjcyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWNzJztcbmltcG9ydCAqIGFzIGVsYnYyIGZyb20gJ2F3cy1jZGstbGliL2F3cy1lbGFzdGljbG9hZGJhbGFuY2luZ3YyJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIHNzbSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3NtJztcbmltcG9ydCAqIGFzIGNvbnN0cnVjdHMgZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgeyBEYXRhZG9nU2VydmljZUNhdGFsb2dFbnRyeSwgRGF0YWRvZ1NoYXJlZFNlY3JldCB9IGZyb20gJy4uL2RhdGFkb2d2Mic7XG5pbXBvcnQgKiBhcyBkYXRhZG9nIGZyb20gJy4vZGF0YWRvZyc7XG5pbXBvcnQgeyBTcHJpbmcgfSBmcm9tICcuL3NwcmluZyc7XG5pbXBvcnQge1xuICBhZGRUcmFjZVNhbXBsaW5nRW52aXJvbm1lbnRXYXJuaW5nLFxuICB0eXBlIFRyYWNlU2FtcGxpbmdPcHRpb25zLFxuICBUcmFjZVNhbXBsaW5nVmFsaWRhdG9yLFxufSBmcm9tICcuL3RyYWNlLXNhbXBsaW5nJztcblxuZXhwb3J0IHtcbiAgYWRkVHJhY2VTYW1wbGluZ0Vudmlyb25tZW50V2FybmluZyxcbiAgRGF0YWRvZ0RlZmF1bHRUcmFjZVNhbXBsaW5nT3B0aW9ucyxcbiAgRml4ZWRSYXRlVHJhY2VTYW1wbGluZ09wdGlvbnMsXG4gIFJpb0RlZmF1bHRUcmFjZVNhbXBsaW5nT3B0aW9ucyxcbiAgVGFyZ2V0UGVyU2Vjb25kVHJhY2VTYW1wbGluZ09wdGlvbnMsXG4gIFRyYWNlU2FtcGxpbmdNb2RlLFxuICB0eXBlIFRyYWNlU2FtcGxpbmdPcHRpb25zLFxuICBUcmFjZVNhbXBsaW5nVmFsaWRhdG9yLFxufSBmcm9tICcuL3RyYWNlLXNhbXBsaW5nJztcblxuLyoqXG4gKiBGYXJnYXRlIFRhc2sgRGVmaW5pdGlvbiBQcm9wZXJ0aWVzLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJpb0ZhcmdhdGVTZXJ2aWNlUHJvcHMge1xuICAvKipcbiAgICogVGhlIHN0YWdlIG9mIHRoZSBzZXJ2aWNlLCBlLmcuICdwcm9kJy5cbiAgICovXG4gIHJlYWRvbmx5IHN0YWdlOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBOYW1lIG9mIHRoZSBzZXJ2aWNlLlxuICAgKi9cbiAgcmVhZG9ubHkgc2VydmljZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIHNlcnZpY2UsIGUuZy4gdGhlIGdpdCBoYXNoIG9mIHRoZSBjb3JyZXNwb25kaW5nIGNvbW1pdC5cbiAgICovXG4gIHJlYWRvbmx5IHZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGZyYW1ld29ya3MgaW4gdXNlcy5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSAtIE5vIGZyYW1ld29ya3MuXG4gICAqL1xuICByZWFkb25seSBmcmFtZXdvcmtzPzogRnJhbWV3b3JrW107XG5cbiAgLyoqXG4gICAqIFRoZSBWUEMgb2YgdGhlIHNlcnZpY2UncyBlY3MuQ2x1c3RlciBpZiBubyBjbHVzdGVyIGlzIGV4cGxpY2l0bHkgcGFzc2VkIGFzIHByb3AuXG4gICAqL1xuICByZWFkb25seSB2cGM6IGVjMi5JVnBjO1xuXG4gIC8qKlxuICAgKiBUaGUgRmFyZ2F0ZSBjbHVzdGVyIHRvIHJ1biB0aGUgc2VydmljZSBpbi5cbiAgICogSWYgbm90IG51bGwsIHRoZSBjbHVzdGVyLnZwYyBNVVNUIG1hdGNoIHRoZSB2cGMgcHJvdmlkZWQgYXMgZGlyZWN0IGFyZ3VtZW50LlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIC0gQ3JlYXRlIGEgbmV3IEZhcmdhdGUgY2x1c3RlciB3aXRoIGRlZmF1bHQgcHJvcGVydGllc1xuICAgKi9cbiAgcmVhZG9ubHkgY2x1c3Rlcj86IGVjcy5JQ2x1c3RlcjtcblxuICAvKipcbiAgICogQ29udGFpbmVyIGRlZmluaXRpb24gb3B0aW9ucyBsaWtlIGltYWdlLCBjcHUsIG1lbW9yeS5cbiAgICovXG4gIHJlYWRvbmx5IGNvbnRhaW5lckRlZmluaXRpb25PcHRpb246IENvbnRhaW5lckRlZmluaXRpb25PcHRpb25zO1xuXG4gIC8qKlxuICAgKiBGYXJnYXRlIFRhc2sgRGVmaW5pdGlvbiBQcm9wZXJ0aWVzLlxuICAgKi9cbiAgcmVhZG9ubHkgZmFyZ2F0ZU9wdGlvbnM6IEZhcmdhdGVUYXNrRGVmaW5pdGlvblByb3BzO1xuXG4gIC8qKlxuICAgKiBMb2FkYmFsYW5jZXIgb3B0aW9ucy5cbiAgICovXG4gIHJlYWRvbmx5IGxvYWRCYWxhbmNlck9wdGlvbnM/OiBMb2FkQmFsYW5jZXJPcHRpb25zO1xuXG4gIC8qKlxuICAgKiBEYXRhZG9nIGludGVncmF0aW9uIHByb3BlcnRpZXNcbiAgICovXG4gIHJlYWRvbmx5IGRhdGFkb2dPcHRpb25zPzogRGF0YWRvZ0ludGVncmF0aW9uUHJvcHM7XG59XG5leHBvcnQgZW51bSBGcmFtZXdvcmsge1xuICAvKipcbiAgICogU3ByaW5nIEZyYW1ld29yaywgU3ByaW5nIEJvb3QsIGFuZCBTcHJpbmcgQ2xvdWQgQVdTLlxuICAgKi9cbiAgU1BSSU5HLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbnRhaW5lckRlZmluaXRpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBpbWFnZSB1c2VkIHRvIHN0YXJ0IGEgY29udGFpbmVyLlxuICAgKlxuICAgKiBUaGlzIHN0cmluZyBpcyBwYXNzZWQgZGlyZWN0bHkgdG8gdGhlIERvY2tlciBkYWVtb24uXG4gICAqIEltYWdlcyBpbiB0aGUgRG9ja2VyIEh1YiByZWdpc3RyeSBhcmUgYXZhaWxhYmxlIGJ5IGRlZmF1bHQuXG4gICAqIE90aGVyIHJlcG9zaXRvcmllcyBhcmUgc3BlY2lmaWVkIHdpdGggZWl0aGVyIHJlcG9zaXRvcnktdXJsL2ltYWdlOnRhZyBvciByZXBvc2l0b3J5LXVybC9pbWFnZVxcQGRpZ2VzdC5cbiAgICovXG4gIHJlYWRvbmx5IGltYWdlOiBlY3MuQ29udGFpbmVySW1hZ2U7XG5cbiAgLyoqXG4gICAqIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gcGFzcyB0byB0aGUgY29udGFpbmVyLlxuICAgKlxuICAgKiBTb21lIERhdGFkb2cgc3BlY2lmaWMgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBub3QgYWxsb3dlZCB0byBiZSBzZXQsXG4gICAqIGJlY2F1c2UgdGhleSBhcmUgc2V0IGF1dG9tYXRpY2FsbHkgb3IgY29tcHV0ZWQgZnJvbSBvdGhlciBhdHRyaWJ1dGVzLlxuICAgKiBUaGVzZSBhcmU6XG4gICAqICogRERfRU5WOiBTZXQgc2FtZSBhcyBwcm9wIHN0YWdlXG4gICAqICogRERfU0VSVklDRTogU2V0IHNhbWUgYXMgcHJvcCBzZXJ2aWNlTmFtZVxuICAgKiAqIEREX1ZFUlNJT046IFNldCBzYW1lIGFzIHByb3AgdmVyc2lvblxuICAgKiAqIEREX1RBR1M6IFNldCBzYW1lIGFzIERhdGFkb2dJbnRlZ3JhdGlvblByb3BzI2FkZGl0aW9uYWxUYWdzXG4gICAqICogRERfTE9HU19JTkpFQ1RJT046IHRydWVcbiAgICogT3RoZXIgRERfLXByZWZpeGVkIHZhaWFibGUgbWF5IGJlIGFkZGVkIHRvIHRoaXMgbGlzdC5cbiAgICpcbiAgICogT3RoZXIgRW52aXJvbm1lbnQgdmFyaWFibGVzIHNldCBieSBkZWZhdWx0IGFyZSBvdmVyd3JpdHRlbiBpZiBwYXNzZWQuXG4gICAqIFRoZXNlIGFyZTpcbiAgICogKiBERF9TRVJWSUNFX01BUFBJTkc6IGRhdGFiYXNlOmZhcmdhdGUtd2ViLWFwcC1hdXJvcmEsamF2YS1hd3Mtc2RrOmZhcmdhdGUtd2ViLWFwcC1hd3Mtc2RrLGthZmthOmZhcmdhdGUtd2ViLWFwcC1rYWZrYSxteXNxbDpmYXJnYXRlLXdlYi1hcHAtYXVyb3JhXG4gICAqIFNhbXBsaW5nIHZhcmlhYmxlcyAoYEREX1RSQUNFX1NBTVBMSU5HX1JVTEVTYCwgYEREX1RSQUNFX1NBTVBMRV9SQVRFYCxcbiAgICogYEREX0FQTV9UQVJHRVRfVFBTYCwgYW5kIGBERF9BUE1fRVJST1JfVFBTYCkgc2hvdWxkIGJlIGNvbmZpZ3VyZWQgdGhyb3VnaFxuICAgKiBgRGF0YWRvZ0ludGVncmF0aW9uUHJvcHMudHJhY2VTYW1wbGluZ2AuIFN1cHBseWluZyB0aGVtIGhlcmUgaXMgcHJlc2VydmVkXG4gICAqIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgYnV0IHByb2R1Y2VzIGEgc3ludGhlc2lzIHdhcm5pbmcuIEluXG4gICAqIHBhcnRpY3VsYXIsIGBERF9BUE1fKmAgdmFsdWVzIG9uIHRoaXMgYXBwbGljYXRpb24gY29udGFpbmVyIGRvIG5vdFxuICAgKiBjb25maWd1cmUgdGhlIERhdGFkb2cgQWdlbnQgc2lkZWNhci5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSAtIE5vIGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAgICovXG4gIHJlYWRvbmx5IGVudmlyb25tZW50PzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogVGhlIHNlY3JldCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgdG8gcGFzcyB0byB0aGUgY29udGFpbmVyLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIC0gTm8gc2VjcmV0IGVudmlyb25tZW50IHZhcmlhYmxlcy5cbiAgICovXG4gIHJlYWRvbmx5IHNlY3JldHM/OiB7IFtrZXk6IHN0cmluZ106IGVjcy5TZWNyZXQgfTtcblxuICAvKipcbiAgICogVGhlIGhlYWx0aCBjaGVjayBjb21tYW5kIGFuZCBhc3NvY2lhdGVkIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycyBmb3IgdGhlIGNvbnRhaW5lci5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSAtIEhlYWx0aCBjaGVjayBjb25maWd1cmF0aW9uIGZyb20gY29udGFpbmVyLlxuICAgKi9cbiAgcmVhZG9ubHkgaGVhbHRoQ2hlY2s/OiBlY3MuSGVhbHRoQ2hlY2s7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRmFyZ2F0ZVRhc2tEZWZpbml0aW9uUHJvcHMge1xuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBjcHUgdW5pdHMgdXNlZCBieSB0aGUgdGFzay4gRm9yIHRhc2tzIHVzaW5nIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLFxuICAgKiB0aGlzIGZpZWxkIGlzIHJlcXVpcmVkIGFuZCB5b3UgbXVzdCB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzLFxuICAgKiB3aGljaCBkZXRlcm1pbmVzIHlvdXIgcmFuZ2Ugb2YgdmFsaWQgdmFsdWVzIGZvciB0aGUgbWVtb3J5IHBhcmFtZXRlcjpcbiAgICpcbiAgICogMjU2ICguMjUgdkNQVSkgLSBBdmFpbGFibGUgbWVtb3J5IHZhbHVlczogNTEyICgwLjUgR0IpLCAxMDI0ICgxIEdCKSwgMjA0OCAoMiBHQilcbiAgICpcbiAgICogNTEyICguNSB2Q1BVKSAtIEF2YWlsYWJsZSBtZW1vcnkgdmFsdWVzOiAxMDI0ICgxIEdCKSwgMjA0OCAoMiBHQiksIDMwNzIgKDMgR0IpLCA0MDk2ICg0IEdCKVxuICAgKlxuICAgKiAxMDI0ICgxIHZDUFUpIC0gQXZhaWxhYmxlIG1lbW9yeSB2YWx1ZXM6IDIwNDggKDIgR0IpLCAzMDcyICgzIEdCKSwgNDA5NiAoNCBHQiksIDUxMjAgKDUgR0IpLCA2MTQ0ICg2IEdCKSwgNzE2OCAoNyBHQiksIDgxOTIgKDggR0IpXG4gICAqXG4gICAqIDIwNDggKDIgdkNQVSkgLSBBdmFpbGFibGUgbWVtb3J5IHZhbHVlczogQmV0d2VlbiA0MDk2ICg0IEdCKSBhbmQgMTYzODQgKDE2IEdCKSBpbiBpbmNyZW1lbnRzIG9mIDEwMjQgKDEgR0IpXG4gICAqXG4gICAqIDQwOTYgKDQgdkNQVSkgLSBBdmFpbGFibGUgbWVtb3J5IHZhbHVlczogQmV0d2VlbiA4MTkyICg4IEdCKSBhbmQgMzA3MjAgKDMwIEdCKSBpbiBpbmNyZW1lbnRzIG9mIDEwMjQgKDEgR0IpXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgNTEyXG4gICAqL1xuICByZWFkb25seSBjcHU6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGFtb3VudCAoaW4gTWlCKSBvZiBtZW1vcnkgdXNlZCBieSB0aGUgdGFzay4gRm9yIHRhc2tzIHVzaW5nIHRoZSBGYXJnYXRlIGxhdW5jaCB0eXBlLFxuICAgKiB0aGlzIGZpZWxkIGlzIHJlcXVpcmVkIGFuZCB5b3UgbXVzdCB1c2Ugb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzLCB3aGljaCBkZXRlcm1pbmVzIHlvdXIgcmFuZ2Ugb2YgdmFsaWQgdmFsdWVzIGZvciB0aGUgY3B1IHBhcmFtZXRlcjpcbiAgICpcbiAgICogNTEyICgwLjUgR0IpLCAxMDI0ICgxIEdCKSwgMjA0OCAoMiBHQikgLSBBdmFpbGFibGUgY3B1IHZhbHVlczogMjU2ICguMjUgdkNQVSlcbiAgICpcbiAgICogMTAyNCAoMSBHQiksIDIwNDggKDIgR0IpLCAzMDcyICgzIEdCKSwgNDA5NiAoNCBHQikgLSBBdmFpbGFibGUgY3B1IHZhbHVlczogNTEyICguNSB2Q1BVKVxuICAgKlxuICAgKiAyMDQ4ICgyIEdCKSwgMzA3MiAoMyBHQiksIDQwOTYgKDQgR0IpLCA1MTIwICg1IEdCKSwgNjE0NCAoNiBHQiksIDcxNjggKDcgR0IpLCA4MTkyICg4IEdCKSAtIEF2YWlsYWJsZSBjcHUgdmFsdWVzOiAxMDI0ICgxIHZDUFUpXG4gICAqXG4gICAqIEJldHdlZW4gNDA5NiAoNCBHQikgYW5kIDE2Mzg0ICgxNiBHQikgaW4gaW5jcmVtZW50cyBvZiAxMDI0ICgxIEdCKSAtIEF2YWlsYWJsZSBjcHUgdmFsdWVzOiAyMDQ4ICgyIHZDUFUpXG4gICAqXG4gICAqIEJldHdlZW4gODE5MiAoOCBHQikgYW5kIDMwNzIwICgzMCBHQikgaW4gaW5jcmVtZW50cyBvZiAxMDI0ICgxIEdCKSAtIEF2YWlsYWJsZSBjcHUgdmFsdWVzOiA0MDk2ICg0IHZDUFUpXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgMTAyNFxuICAgKi9cbiAgcmVhZG9ubHkgbWVtb3J5TGltaXRNaUI6IG51bWJlcjtcblxuICAvKipcbiAgICogRGVzaXJlZCBjb3VudCBvZiBydW5uaW5nIHRhc2tzXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgLSBXaGVuIGNyZWF0aW5nIHRoZSBzZXJ2aWNlLCBkZWZhdWx0IGlzIDE7IHdoZW4gdXBkYXRpbmcgdGhlIHNlcnZpY2UsIGRlZmF1bHQgdXNlc1xuICAgKiB0aGUgY3VycmVudCB0YXNrIG51bWJlci5cbiAgICovXG4gIHJlYWRvbmx5IGRlc2lyZWRDb3VudD86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG9wZXJhdGluZyBzeXN0ZW0gdGhhdCB5b3VyIHRhc2sgZGVmaW5pdGlvbnMgYXJlIHJ1bm5pbmcgb24uXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgLSBVc2luZyBlY3MuT3BlcmF0aW5nU3lzdGVtRmFtaWx5LkxJTlVYIGFuZCBlY3MuQ3B1QXJjaGl0ZWN0dXJlLlg4Nl82NFxuICAgKi9cbiAgcmVhZG9ubHkgcnVudGltZVBsYXRmb3JtPzogZWNzLlJ1bnRpbWVQbGF0Zm9ybTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBMaXN0ZW5lclJ1bGUge1xuICByZWFkb25seSBwcmlvcml0eTogbnVtYmVyO1xuXG4gIHJlYWRvbmx5IGNvbmRpdGlvbnM6IGVsYnYyLkxpc3RlbmVyQ29uZGl0aW9uW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTG9hZEJhbGFuY2VyT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBMaXN0ZW5lciBmb3IgYW4gQXBwbGljYXRpb24gTG9hZCBCYWxhbmNlclxuICAgKi9cbiAgcmVhZG9ubHkgbGlzdGVuZXI6IGVsYnYyLklBcHBsaWNhdGlvbkxpc3RlbmVyO1xuXG4gIC8qKlxuICAgKiBPbmUgb3IgbW9yZSBwYXRoIHBhdHRlcm5zIHRvIGNvbXBhcmUgYWdhaW5zdCB0aGUgcmVxdWVzdCBVUkwuXG4gICAqIFRoZSBtYXhpbXVtIHNpemUgb2YgZWFjaCBzdHJpbmcgaXMgMTI4IGNoYXJhY3RlcnMuXG4gICAqIFRoZSBjb21wYXJpc29uIGlzIGNhc2Ugc2Vuc2l0aXZlLlxuICAgKiBUaGUgZm9sbG93aW5nIHdpbGRjYXJkIGNoYXJhY3RlcnMgYXJlIHN1cHBvcnRlZDogKiAobWF0Y2hlcyAwIG9yIG1vcmUgY2hhcmFjdGVycykgYW5kID8gKG1hdGNoZXMgZXhhY3RseSAxIGNoYXJhY3RlcikuXG4gICAqXG4gICAqIFVwZGF0ZSByZXF1aXJlczogTm8gaW50ZXJydXB0aW9uXG4gICAqL1xuICByZWFkb25seSBsaXN0ZW5lclJ1bGVzOiBMaXN0ZW5lclJ1bGVbXTtcblxuICAvKipcbiAgICogIEhlYWx0aCBjaGVjayBvcHRpb25zLlxuICAgKi9cbiAgcmVhZG9ubHkgaGVhbHRoQ2hlY2s6IGVsYnYyLkhlYWx0aENoZWNrO1xuXG4gIC8qKlxuICAgKiAgSGVhbHRoIGNoZWNrIGdyYWNlIHBlcmlvZC5cbiAgICovXG4gIHJlYWRvbmx5IGhlYWx0aENoZWNrR3JhY2VQZXJpb2Q6IGNkay5EdXJhdGlvbjtcblxuICAvKipcbiAgICogVGhlIHRpbWUgcGVyaW9kIGR1cmluZyB3aGljaCB0aGUgbG9hZCBiYWxhbmNlciBzZW5kcyBhIG5ld2x5IHJlZ2lzdGVyZWQgdGFyZ2V0IGEgbGluZWFybHkgaW5jcmVhc2luZyBzaGFyZSBvZiB0aGUgdHJhZmZpYyB0byB0aGUgdGFyZ2V0IGdyb3VwLlxuXG4gICAqVGhlIHJhbmdlIGlzIDMwLTkwMCBzZWNvbmRzICgxNSBtaW51dGVzKS5cblxuICAgKiBAZGVmYXVsdFZhbHVlIHVuZGVmaW5lZFxuICAqL1xuICByZWFkb25seSBzbG93U3RhcnQ/OiBjZGsuRHVyYXRpb247XG5cbiAgLyoqXG4gICAqIFRoZSBhbW91bnQgb2YgdGltZSBmb3IgRWxhc3RpYyBMb2FkIEJhbGFuY2luZyB0byB3YWl0IGJlZm9yZSBkZXJlZ2lzdGVyaW5nIGEgdGFyZ2V0LlxuXG4gICAqIFRoZSByYW5nZSBpcyAwLTM2MDAgc2Vjb25kcy5cblxuICAgKiBAZGVmYXVsdFZhbHVlIDVcbiAgKi9cbiAgcmVhZG9ubHkgZGVyZWdpc3RyYXRpb25EZWxheT86IGNkay5EdXJhdGlvbjtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBEYXRhZG9nSW50ZWdyYXRpb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBDb25maWd1cmUgRGF0YWRvZyBBUE0gdHJhY2Ugc2FtcGxpbmcgZm9yIHRoZSBhcHBsaWNhdGlvbiBhbmQgQWdlbnQgc2lkZWNhci5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSAtIGBUcmFjZVNhbXBsaW5nTW9kZS5ERUZBVUxUYCwgd2hpY2ggY29uZmlndXJlcyBlYWNoXG4gICAqIEFnZW50IHNpZGVjYXIgd2l0aCBhbiBhdmVyYWdlIGhlYWQtc2FtcGxpbmcgdGFyZ2V0IG9mIDUgdHJhY2VzIHBlciBzZWNvbmRcbiAgICogYW5kIGFuIGFkZGl0aW9uYWwgZXJyb3Itc2FtcGxpbmcgYnVkZ2V0IG9mIDEwIGxvY2FsIGVycm9yIHRyYWNlIGNodW5rcyBwZXJcbiAgICogc2Vjb25kLiBFYWNoIEZhcmdhdGUgdGFzayBoYXMgaXRzIG93biBzaWRlY2FyLiBUaGVyZWZvcmUsIHRoZSB0YXJnZXQgdHJhY2VzXG4gICAqIHBlciBzZWNvbmQgYXBwbHkgcGVyIEZhcmdhdGUgdGFzay4gVHJhZmZpYyBzcGlrZXMgY2FuIGV4Y2VlZCB0aGVcbiAgICogaGVhZC1zYW1wbGluZyB0YXJnZXQ7IHRoZXNlIHNldHRpbmdzIGRvIG5vdCBjYXAgdG90YWwgaW5nZXN0aW9uLlxuICAgKiBUYXJnZXQtcGVyLXNlY29uZCBzYW1wbGluZyBpcyBzdWl0YWJsZSBmb3IgYm90aCBsb3ctIGFuZCBoaWdoLXRyYWZmaWNcbiAgICogc2VydmljZXM6IGxvdy10cmFmZmljIHNlcnZpY2VzIGNhbiByZXRhaW4gYWxsIHRyYWNlcyB3aGlsZSBoaWdoLXRyYWZmaWNcbiAgICogc2VydmljZXMgYXJlIHNhbXBsZWQgdG93YXJkIHRoZSB0YXJnZXQuXG4gICAqL1xuICByZWFkb25seSB0cmFjZVNhbXBsaW5nPzogVHJhY2VTYW1wbGluZ09wdGlvbnM7XG5cbiAgLyoqXG4gICAqIFRoZSBtaW5pbXVtIG51bWJlciBvZiBDUFUgdW5pdHMgdG8gcmVzZXJ2ZSBmb3IgdGhlIGNvbnRhaW5lci5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSAtIDY0XG4gICAqL1xuICByZWFkb25seSBjcHU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBhbW91bnQgKGluIE1pQikgb2YgbWVtb3J5IHRvIHByZXNlbnQgdG8gdGhlIGNvbnRhaW5lci5cbiAgICpcbiAgICogSWYgeW91ciBjb250YWluZXIgYXR0ZW1wdHMgdG8gZXhjZWVkIHRoZSBhbGxvY2F0ZWQgbWVtb3J5LCB0aGUgY29udGFpbmVyXG4gICAqIGlzIHRlcm1pbmF0ZWQuXG4gICAqXG4gICAqIEF0IGxlYXN0IG9uZSBvZiBtZW1vcnlMaW1pdE1pQiBhbmQgbWVtb3J5UmVzZXJ2YXRpb25NaUIgaXMgcmVxdWlyZWQgZm9yIG5vbi1GYXJnYXRlIHNlcnZpY2VzLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIC0gMTI4XG4gICAqL1xuICByZWFkb25seSBtZW1vcnlMaW1pdE1pQj86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGFtb3VudCBvZiB2aXJ0dWFsIENQVSB1bml0cyB0byBiZSByZXNlcnZlZCBmb3IgdGhlIGZpcmVsZW5zIGxvZy1yb3V0ZXIgY29udGFpbmVyIChpLmUuIGF3cy1mb3ItZmx1ZW50LWJpdCkuXG4gICAqXG4gICAqIFRoaXMgb25seSBhcHBsaWVzIGZvciB0aGUgQVdTX0ZJUkVfTEVOUyBsb2dnaW5nIG1vZGUuXG4gICAqIFNldHRpbmcgaXQgZm9yIGFueSBvdGhlciBsb2dnaW5nIG1vZGUgd2lsbCBjYXVzZSBhbiBleGNlcHRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgLSA2NFxuICAgKi9cbiAgcmVhZG9ubHkgYXdzRmlyZUxlbnNDcHU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBhbW91bnQgb2YgbWVtb3J5IChpbiBNaUIpIHJlc2VydmVkIGZvciB0aGUgZmlyZWxlbnMgbG9nLXJvdXRlciBjb250YWluZXIgKGkuZS4gYXdzLWZvci1mbHVlbnQtYml0KS5cbiAgICpcbiAgICogVGhpcyBvbmx5IGFwcGxpZXMgZm9yIHRoZSBBV1NfRklSRV9MRU5TIGxvZ2dpbmcgbW9kZS5cbiAgICogU2V0dGluZyBpdCBmb3IgYW55IG90aGVyIGxvZ2dpbmcgbW9kZSB3aWxsIGNhdXNlIGFuIGV4Y2VwdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSAtIDY0XG4gICAqL1xuICByZWFkb25seSBhd3NGaXJlTGVuc01lbW9yeUxpbWl0TWlCPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9nZ2luZyBtb2RlIGZvciB0aGUgc2VydmljZS5cbiAgICpcbiAgICogQGRlZmF1bHRWYWx1ZSAtIFVzaW5nIHRoZSBEYXRhZG9nIGxvZyBmb3J3YXJkZXIgbGFtYmRhIHByb3ZpZGVkIGJ5IHRoZSBkYXRhZG9nLWludGVncmF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9nZ2luZ01vZGVGb3JTZXJ2aWNlPzogRGF0YURvZ0xvZ2dpbmdNb2RlO1xuXG4gIC8qKlxuICAgKiBUaGUgbG9nZ2luZyBtb2RlIGZvciB0aGUgRGF0YWRvZyBhZ2VudCBzaWRlY2FyLlxuICAgKlxuICAgKiBAZGVmYXVsdFZhbHVlIC0gTm8gbG9ncyBpbiBEYXRhZG9nLCBDbG91ZHdhdGNoIG9ubHkuXG4gICAqL1xuICByZWFkb25seSBsb2dnaW5nTW9kZUZvckRhdGFkb2dBZ2VudD86IERhdGFEb2dMb2dnaW5nTW9kZTtcblxuICAvKipcbiAgICogR0VUIGVuZHBvaW50cyB0byBpZ25vcmUgaW4gRGF0YWRvZydzIEFQTSBvdmVydmlldy4gVGhpcyBpcyB1c2VmdWwgdG8gZmlsdGVyIG91dCBhbGwgaGVhbHRoIGNoZWNrIGNhbGxzLlxuXG4gICAgKiBAZGVmYXVsdFZhbHVlIC0gTm8gZW5kcG9pbnRzIGFyZSBpZ25vcmVkLlxuICAgICovXG4gIHJlYWRvbmx5IGFwbUdldEVuZHBvaW50c1RvSWdub3JlPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyZSBpZiB0aGUgRGF0YWRvZyBhZ2VudCBzaWRlY2FyIGlzIG1hcmtlZCBhcyBlc3NlbnRpYWwuXG4gICAqXG4gICAqIEBkZWZhdWx0VmFsdWUgLSB0cnVlLlxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWRvZ1NpZGVjYXJFc3NlbnRpYWw/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmVzIHRoZSBkb2NrZXIgaW1hZ2UgdGFnIGZvciBkYXRhZG9nIHNpZGVjYXJcbiAgICogQGRlZmF1bHRWYWx1ZSAtICdsYXRlc3QnXG4gICAqL1xuICByZWFkb25seSBkYXRhZG9nU2lkZWNhclRhZz86IHN0cmluZztcblxuICAvKipcbiAgICogV2hlbiB5b3Ugc2V0IHVwIGEgcmVzdGFydCBwb2xpY3kgZm9yIGEgY29udGFpbmVyLCBBbWF6b24gRUNTIGNhbiByZXN0YXJ0IHRoZSBjb250YWluZXIgd2l0aG91dCBuZWVkaW5nIHRvIHJlcGxhY2UgdGhlIHRhc2tcbiAgICogQGRlZmF1bHRWYWx1ZSAtIHRydWVcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZVJlc3RhcnRQb2xpY3k/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgZXhpdCBjb2RlcyB0byBiZSBpZ25vcmVkIGJ5IHRoZSByZXN0YXJ0IHBvbGljeVxuICAgKiBAZGVmYXVsdFZhbHVlIC0gWzBdXG4gICAqL1xuICByZWFkb25seSByZXN0YXJ0SWdub3JlZEV4aXRDb2Rlcz86IG51bWJlcltdO1xuXG4gIC8qKlxuICAgKiBDb25maWd1cmUgYWRkaXRpb25hbCB0YWdzLCB3aGljaCBhcmUgYXBwZW5kZWQgdG8gdGhlIGRlZmF1bHRzLFxuICAgKiBXaGVuIHlvdSBkZWZpbmUgY3VzdG9tIHRhZ3Mgd2Ugd291bGQgYmUgZ2xhZCBpZiB5b3UgY29udGFjdCB1cy5cbiAgICogV2Ugd291bGQgbGlrZSB0byBsZWFybiBhYm91dCB5b3VyIHVzZSBjYXNlcy5cbiAgICpcbiAgICogRGVmYXVsdCB0YWdzIGFyZSBub3QgYWxsb3dlZCB0byBiZSBvdmVycmlkZGVuIVxuICAgKlxuICAgKiBEZWZhdWx0cyBhcmU6XG4gICAqICogZW52OiBTZXQgdG8gUmlvRmFyZ2F0ZVNlcnZpY2VQcm9wcyNzdGFnZSBwcm9wXG4gICAqICogc2VydmljZTogU2V0IHRvIFJpb0ZhcmdhdGVTZXJ2aWNlUHJvcHMjc2VydmljZU5hbWUgcHJvcFxuICAgKiAqIHZlcnNpb246IFNldCB0byBSaW9GYXJnYXRlU2VydmljZVByb3BzI3ZlcnNpb24gcHJvcFxuICAgKiAqIGFjY291bnRfaWQ6JFxce2FjY291bnRJRFxcfVxuICAgKiAqIGFjY291bnRfbmFtZTokXFx7YWNjb3VudE5hbWVcXH1cbiAgICogKiByZWdpb246JFxce0FXU1JlZ2lvblxcfVxuICAgKiAqIHRlYW06JFxce3RlYW1OYW1lIGZyb20gc3NtIHBhcmFtIC9jb25maWcvdGVhbS9uYW1lXFx9XG4gICAqICogdGVhbV9pZGVudGlmaWVyOiRcXHt0ZWFtSWRlbnRpZmllciBmcm9tIHNzbSBwYXJhbSAvY29uZmlnL3RlYW0vaWRlbnRpZmllclxcfVxuICAgKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbFRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG5leHBvcnQgZW51bSBEYXRhRG9nTG9nZ2luZ01vZGUge1xuICAvKipcbiAgICogRm9yd2FyZCBsb2dzIGRpcmVjdGx5IHRvIERhdGFkb2cgdXNpbmcgQVdTIEZpcmVMZW5zIGFzIGxvZyByb3V0ZXIsXG4gICAqIHNlZSBodHRwczovL2RvY3MuZGF0YWRvZ2hxLmNvbS9pbnRlZ3JhdGlvbnMvZWNzX2ZhcmdhdGUvP3RhYj1mbHVlbnRiaXRhbmRmaXJlbGVucyNsb2ctY29sbGVjdGlvbi5cbiAgICovXG4gIEFXU19GSVJFX0xFTlMsXG5cbiAgLyoqXG4gICAqIFN0b3JlIGxvZ3MgaW4gQVdTIENsb3Vkd2F0Y2ggYW5kIHVzZSB0aGUgUklPIGN1c3RvbWl6ZWQgRGF0YWRvZyBsb2cgZm9yd2FyZGVyIGxhbWJkYSBmcm9tIHRoZSBsZWdhY3lcbiAgICogZGF0YWRvZy1pbnRlZ3JhdGlvbiwgdG8gZm9yd2FyZCB0aGUgbG9ncyB0byBEYXRhZG9nLFxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vYml0YnVja2V0LmNvbGxhYm9yYXRpb24tbWFuLmNvbS9wcm9qZWN0cy9SSU9ERVYvcmVwb3MvZGF0YWRvZy1pbnRlZ3JhdGlvbi9icm93c2VcbiAgICogQGRlcHJlY2F0ZWQgdXNlIERBVEFET0dfRk9SV0FSREVSX0xBTUJEQVxuICAgKi9cbiAgRk9SV0FSREVSX0xBTUJEQSxcblxuICAvKipcbiAgICogU3RvcmUgbG9ncyBpbiBBV1MgQ2xvdWR3YXRjaCBhbmQgdXNlIHRoZSBEYXRhZG9nIGxvZyBmb3J3YXJkZXIgbGFtYmRhIHRvIGZvcndhcmQgdGhlIGxvZ3MgdG8gRGF0YWRvZyxcbiAgICogc2VlIGh0dHBzOi8vZG9jcy5kYXRhZG9naHEuY29tL2ludGVncmF0aW9ucy9lY3NfZmFyZ2F0ZS8/dGFiPWxvZ2RyaXZlciNsb2ctY29sbGVjdGlvbi5cbiAgICovXG4gIERBVEFET0dfRk9SV0FSREVSX0xBTUJEQSxcblxuICAvKipcbiAgICogT25seSBsb2cgdG8gQVdTIENsb3Vkd2F0Y2ggd2l0aG91dCBmb3J3YXJkaW5nIHRoZSBsb2dzIHRvIERhdGFkb2cuXG4gICAqL1xuICBOT05FLFxufVxuXG4vKipcbiAqIENyZWF0ZXMgYW4gb3BpbmlvbmF0ZWQgRUNTIEZhcmdhdGUgc2VydmljZSBmb3IgUklPIGFwcGxpY2F0aW9ucy5cbiAqXG4gKiBUaGlzIGNvbnN0cnVjdCBidW5kbGVzIHRoZSBwaWVjZXMgdGhhdCBtb3N0IFJJTyBiYWNrZW5kIHNlcnZpY2VzIG5lZWQ6XG4gKiBhbiBFQ1MgdGFzayBkZWZpbml0aW9uLCB0aGUgYXBwbGljYXRpb24gY29udGFpbmVyLCBhIERhdGFkb2cgc2lkZWNhcixcbiAqIG9wdGlvbmFsIEZpcmVMZW5zIGxvZyByb3V0aW5nLCBvcHRpb25hbCBBTEIgdGFyZ2V0IGdyb3VwIHdpcmluZywgYW5kIHRoZVxuICogRUNTIEZhcmdhdGUgc2VydmljZSBpdHNlbGYuXG4gKlxuICogSXQgYWxzbyBkZXJpdmVzIERhdGFkb2cgdGFncyBhbmQgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZyb20gYHN0YWdlYCxcbiAqIGBzZXJ2aWNlTmFtZWAsIGB2ZXJzaW9uYCwgdGhlIEFXUyBhY2NvdW50LCBhbmQgdGhlIHN0YW5kYXJkIFJJTyBsYW5kaW5nLXpvbmVcbiAqIFNTTSBwYXJhbWV0ZXJzLiBEbyBub3Qgc2V0IGBERF9FTlZgLCBgRERfU0VSVklDRWAsIGBERF9WRVJTSU9OYCwgYEREX1RBR1NgLFxuICogb3IgYEREX0xPR1NfSU5KRUNUSU9OYCBtYW51YWxseSBpbiB0aGUgYXBwbGljYXRpb24gY29udGFpbmVyIGVudmlyb25tZW50LlxuICpcbiAqIFVzZSB0aGlzIGNvbnN0cnVjdCB3aGVuIHlvdSB3YW50IHRoZSBSSU8gcGF2ZWQgcm9hZCBmb3IgYSB3ZWItZmFjaW5nIG9yXG4gKiBzZXJ2aWNlLXN0eWxlIEZhcmdhdGUgd29ya2xvYWQgYW5kIHlvdSB3YW50IHRoZSBkZWZhdWx0cyBmb3Igb2JzZXJ2YWJpbGl0eSxcbiAqIERhdGFkb2cgc2VydmljZSBjYXRhbG9nIHJlZ2lzdHJhdGlvbiwgYW5kIGNvbW1vbiBBV1Mgd2lyaW5nIHRvIGJlIGhhbmRsZWRcbiAqIGZvciB5b3UuXG4gKiBJZiB5b3UgbmVlZCBhIGZ1bGx5IGN1c3RvbSBFQ1Mgc2V0dXAsIG9yIGEgZGlmZmVyZW50IGRlcGxveW1lbnQgc3RyYXRlZ3lcbiAqIHN1Y2ggYXMgYmx1ZS9ncmVlbiwgdXNlIGEgbG93ZXItbGV2ZWwgY29uc3RydWN0IG9yIHRoZSBibHVlL2dyZWVuIHZhcmlhbnRcbiAqIGluc3RlYWQuXG4gKlxuICogVG8gdXNlIGl0LCBwcm92aWRlOlxuICogLSBgc3RhZ2VgLCBgc2VydmljZU5hbWVgLCBhbmQgYHZlcnNpb25gIGZvciBzZXJ2aWNlIGlkZW50aXR5XG4gKiAtIGB2cGNgIGFuZCBvcHRpb25hbGx5IGFuIGV4aXN0aW5nIGBjbHVzdGVyYFxuICogLSBgY29udGFpbmVyRGVmaW5pdGlvbk9wdGlvbi5pbWFnZWAgZm9yIHRoZSBhcHBsaWNhdGlvbiBpbWFnZVxuICogLSBgZmFyZ2F0ZU9wdGlvbnMuY3B1YCBhbmQgYGZhcmdhdGVPcHRpb25zLm1lbW9yeUxpbWl0TWlCYCBmb3IgdGFzayBzaXppbmdcbiAqIC0gb3B0aW9uYWwgYGRhdGFkb2dPcHRpb25zYCwgYGZyYW1ld29ya3NgLCBhbmQgYGxvYWRCYWxhbmNlck9wdGlvbnNgXG4gKlxuICogRXhhbXBsZTpcbiAqIGBgYHRzXG4gKiBjb25zdCBzZXJ2aWNlID0gbmV3IFJpb0ZhcmdhdGVTZXJ2aWNlKHRoaXMsICdTZXJ2aWNlJywge1xuICogICBzdGFnZTogJ3Byb2QnLFxuICogICBzZXJ2aWNlTmFtZTogJ2JpbGxpbmctdmlldycsXG4gKiAgIHZlcnNpb246IHByb2Nlc3MuZW52LkdJVF9WRVJTSU9OID8/ICdsb2NhbCcsXG4gKiAgIHZwYzogUmlvTGFuZGluZ1pvbmUuZ2V0RGVmYXVsdFZwYyh0aGlzKSxcbiAqICAgY29udGFpbmVyRGVmaW5pdGlvbk9wdGlvbjoge1xuICogICAgIGltYWdlOiBlY3MuQ29udGFpbmVySW1hZ2UuZnJvbVJlZ2lzdHJ5KCdleGFtcGxlL2JpbGxpbmctdmlldzpsYXRlc3QnKSxcbiAqICAgfSxcbiAqICAgZmFyZ2F0ZU9wdGlvbnM6IHtcbiAqICAgICBjcHU6IDUxMixcbiAqICAgICBtZW1vcnlMaW1pdE1pQjogMTAyNCxcbiAqICAgfSxcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBjbGFzcyBSaW9GYXJnYXRlU2VydmljZSBleHRlbmRzIGNvbnN0cnVjdHMuQ29uc3RydWN0IGltcGxlbWVudHMgZWMyLklDb25uZWN0YWJsZSB7XG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEREX0VOVl9ERU5ZX0xJU1QgPSBbJ0REX0VOVicsICdERF9UQUdTJywgJ0REX1NFUlZJQ0UnLCAnRERfVkVSU0lPTicsICdERF9MT0dTX0lOSkVDVElPTiddO1xuXG4gIHByaXZhdGUgc3RhdGljIHJlYWRvbmx5IEREX1RBR19ERU5ZX0xJU1QgPSBbXG4gICAgJ2VudicsXG4gICAgJ3NlcnZpY2UnLFxuICAgICd2ZXJzaW9uJyxcbiAgICAnYWNjb3VudF9pZCcsXG4gICAgJ2FjY291bnRfbmFtZScsXG4gICAgJ3JlZ2lvbicsXG4gICAgJ3RlYW0nLFxuICAgICd0ZWFtX2lkZW50aWZpZXInLFxuICBdO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9BUE1fR0VUX0VORFBPSU5UU19UT19JR05PUkU6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9EQVRBRE9HX1NJREVDQVJfQ1BVID0gNjQ7XG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9EQVRBRE9HX1NJREVDQVJfTUVNT1JZX0xJTUlUX01JQiA9IDEyODtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX0RBVEFET0dfU0lERUNBUl9FU1NFTlRJQUwgPSB0cnVlO1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfREFUQURPR19FTkFCTEVfUkVTVEFSVF9QT0xJQ1kgPSB0cnVlO1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfREFUQURPR19SRVNUQVJUX0lHTk9SRURfRVhJVF9DT0RFUyA9IFswXTtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX0xPR0dJTkdfTU9ERV9GT1JfU0VSVklDRSA9IERhdGFEb2dMb2dnaW5nTW9kZS5GT1JXQVJERVJfTEFNQkRBO1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfTE9HR0lOR19NT0RFX0ZPUl9EQVRBRE9HX1NJREVDQVIgPSBEYXRhRG9nTG9nZ2luZ01vZGUuTk9ORTtcbiAgcHJpdmF0ZSByZWFkb25seSBERUZBVUxUX0RFUkVHSVNUUkFUSU9OX0RFTEFZID0gY2RrLkR1cmF0aW9uLnNlY29uZHMoNSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9TTE9XX1NUQVJUID0gdW5kZWZpbmVkO1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfREFUQURPR19TSURFQ0FSX1RBRyA9ICdsYXRlc3QnO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgREVGQVVMVF9MT0dfUk9VVEVSX0NQVSA9IDY0O1xuICBwcml2YXRlIHJlYWRvbmx5IERFRkFVTFRfTE9HX1JPVVRFUl9NRU1PUllfTElNSVRfTUlCID0gNjQ7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBGSVJFTEVOU19DT05GSUdfQlVDS0VUX0FSTiA9ICdhcm46YXdzOnMzOjo6NTc3MTQ2ODk3Nzg1LWV1LXdlc3QtMS1maXJlbGVucy1jb25maWd1cmF0aW9uLWJ1Y2tldCc7XG4gIHByaXZhdGUgcmVhZG9ubHkgRklSRUxFTlNfQ09ORklHX0ZJTEVfUEFUSCA9ICcvcGFyc2UtanNvbi5jb25mJztcblxuICByZWFkb25seSBzZXJ2aWNlQ29udGFpbmVyRGVmaW5pdGlvbjogZWNzLkNvbnRhaW5lckRlZmluaXRpb247XG4gIHJlYWRvbmx5IGRhdGFkb2dTaWRlQ2FyQ29udGFpbmVyRGVmaW5pdGlvbjogZWNzLkNvbnRhaW5lckRlZmluaXRpb247XG4gIHJlYWRvbmx5IGxvZ1JvdXRlckNvbnRhaW5lckRlZmluaXRpb24/OiBlY3MuQ29udGFpbmVyRGVmaW5pdGlvbjtcbiAgcmVhZG9ubHkgdGFza0RlZmluaXRpb246IGVjcy5GYXJnYXRlVGFza0RlZmluaXRpb247XG5cbiAgcmVhZG9ubHkgY29ubmVjdGlvbnM6IGVjMi5Db25uZWN0aW9ucztcbiAgcmVhZG9ubHkgc2VydmljZTogZWNzLkZhcmdhdGVTZXJ2aWNlO1xuICByZWFkb25seSB0YXJnZXRHcm91cDogZWxidjIuQXBwbGljYXRpb25UYXJnZXRHcm91cCB8IHVuZGVmaW5lZDtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogY29uc3RydWN0cy5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBSaW9GYXJnYXRlU2VydmljZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IHtcbiAgICAgIGxvYWRCYWxhbmNlck9wdGlvbnMsXG4gICAgICB2cGMsXG4gICAgICBjbHVzdGVyLFxuICAgICAgZmFyZ2F0ZU9wdGlvbnMsXG4gICAgICBkYXRhZG9nT3B0aW9ucyxcbiAgICAgIHNlcnZpY2VOYW1lLFxuICAgICAgY29udGFpbmVyRGVmaW5pdGlvbk9wdGlvbixcbiAgICAgIHN0YWdlLFxuICAgICAgdmVyc2lvbixcbiAgICAgIGZyYW1ld29ya3MsXG4gICAgfSA9IHByb3BzO1xuXG4gICAgdGhpcy5ub2RlLmFkZFZhbGlkYXRpb24oXG4gICAgICBuZXcgRGVueUxpc3RlZEtleVZhbGlkYXRvcihcbiAgICAgICAgUmlvRmFyZ2F0ZVNlcnZpY2UuRERfRU5WX0RFTllfTElTVCxcbiAgICAgICAgcHJvcHMuY29udGFpbmVyRGVmaW5pdGlvbk9wdGlvbi5lbnZpcm9ubWVudCxcbiAgICAgICAgaXQgPT5cbiAgICAgICAgICBgRW52aXJvbm1lbnQgJHtpdH0gaXMgbm90IGFsbG93ZWQgdG8gYmUgc2V0LiBUaGlzIHZhbHVlIHdpbGwgYmUgaW5mZXJyZWQgZnJvbSB0aGUgYWNjb3VudCBvciBvdGhlciBwcm9wZXJ0aWVzLmBcbiAgICAgIClcbiAgICApO1xuICAgIHRoaXMubm9kZS5hZGRWYWxpZGF0aW9uKFxuICAgICAgbmV3IERlbnlMaXN0ZWRLZXlWYWxpZGF0b3IoXG4gICAgICAgIFJpb0ZhcmdhdGVTZXJ2aWNlLkREX1RBR19ERU5ZX0xJU1QsXG4gICAgICAgIHByb3BzLmRhdGFkb2dPcHRpb25zPy5hZGRpdGlvbmFsVGFncyxcbiAgICAgICAgaXQgPT4gYFRhZyAke2l0fSBpcyBub3QgYWxsb3dlZCB0byBiZSBzZXQuIFRoaXMgdmFsdWUgd2lsbCBiZSBpbmZlcnJlZCBmcm9tIHRoZSBhY2NvdW50IG9yIG90aGVyIHByb3BlcnRpZXMuYFxuICAgICAgKVxuICAgICk7XG5cbiAgICB0aGlzLm5vZGUuYWRkVmFsaWRhdGlvbihuZXcgQ2x1c3RlclZwY1ZhbGlkYXRvcihwcm9wcy52cGMsIHByb3BzLmNsdXN0ZXIpKTtcblxuICAgIHRoaXMubm9kZS5hZGRWYWxpZGF0aW9uKG5ldyBEYXRhZG9nU2lkZUNhclZhbGlkYXRvcihwcm9wcy5kYXRhZG9nT3B0aW9ucykpO1xuXG4gICAgdGhpcy5ub2RlLmFkZFZhbGlkYXRpb24obmV3IFRyYWNlU2FtcGxpbmdWYWxpZGF0b3IocHJvcHMuZGF0YWRvZ09wdGlvbnM/LnRyYWNlU2FtcGxpbmcpKTtcblxuICAgIGFkZFRyYWNlU2FtcGxpbmdFbnZpcm9ubWVudFdhcm5pbmcodGhpcywgcHJvcHMuY29udGFpbmVyRGVmaW5pdGlvbk9wdGlvbi5lbnZpcm9ubWVudCk7XG5cbiAgICB0aGlzLm5vZGUuYWRkVmFsaWRhdGlvbihuZXcgRmlyZWxlbnNTaWRlQ2FyVmFsaWRhdG9yKHByb3BzLmRhdGFkb2dPcHRpb25zKSk7XG5cbiAgICBjb25zdCBmYXJnYXRlQ2x1c3RlciA9XG4gICAgICBjbHVzdGVyID8/XG4gICAgICBuZXcgZWNzLkNsdXN0ZXIodGhpcywgJ0NsdXN0ZXInLCB7XG4gICAgICAgIHZwYzogdnBjLFxuICAgICAgfSk7XG4gICAgdGhpcy50YXNrRGVmaW5pdGlvbiA9IG5ldyBlY3MuRmFyZ2F0ZVRhc2tEZWZpbml0aW9uKHRoaXMsICdUYXNrRGVmaW5pdGlvbicsIHtcbiAgICAgIGNwdTogZmFyZ2F0ZU9wdGlvbnMuY3B1LFxuICAgICAgbWVtb3J5TGltaXRNaUI6IGZhcmdhdGVPcHRpb25zLm1lbW9yeUxpbWl0TWlCLFxuICAgICAgcnVudGltZVBsYXRmb3JtOiB7XG4gICAgICAgIGNwdUFyY2hpdGVjdHVyZTogZmFyZ2F0ZU9wdGlvbnMucnVudGltZVBsYXRmb3JtPy5jcHVBcmNoaXRlY3R1cmUgPz8gZWNzLkNwdUFyY2hpdGVjdHVyZS5YODZfNjQsXG4gICAgICAgIG9wZXJhdGluZ1N5c3RlbUZhbWlseTogZmFyZ2F0ZU9wdGlvbnMucnVudGltZVBsYXRmb3JtPy5vcGVyYXRpbmdTeXN0ZW1GYW1pbHkgPz8gZWNzLk9wZXJhdGluZ1N5c3RlbUZhbWlseS5MSU5VWCxcbiAgICAgIH0sXG4gICAgfSk7XG4gICAgY29uc3QgYWNjb3VudE5hbWUgPSBzc20uU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJOYW1lKFxuICAgICAgdGhpcyxcbiAgICAgICdBY2NvdW50TmFtZScsXG4gICAgICAnL2NvbmZpZy9hY2NvdW50L25hbWUnXG4gICAgKS5zdHJpbmdWYWx1ZTtcbiAgICBjb25zdCB0ZWFtTmFtZSA9IHNzbS5TdHJpbmdQYXJhbWV0ZXIuZnJvbVN0cmluZ1BhcmFtZXRlck5hbWUodGhpcywgJ1RlYW1OYW1lJywgJy9jb25maWcvdGVhbS9uYW1lJykuc3RyaW5nVmFsdWU7XG4gICAgY29uc3QgdGVhbUlkZW50aWZpZXIgPSBzc20uU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJOYW1lKFxuICAgICAgdGhpcyxcbiAgICAgICdUZWFtSWRlbnRpZmllcicsXG4gICAgICAnL2NvbmZpZy90ZWFtL2lkZW50aWZpZXInXG4gICAgKS5zdHJpbmdWYWx1ZTtcblxuICAgIGNvbnN0IGRhdGFkb2dTZWNyZXQgPSBEYXRhZG9nU2hhcmVkU2VjcmV0LmNyZWRlbnRpYWxzU2VjcmV0KHRoaXMpO1xuICAgIGNvbnN0IGRhdGFkb2dTaXRlID0gZGF0YWRvZ1NlY3JldC5nZXRTZWNyZXRWYWx1ZSgnU2l0ZScpLnVuc2FmZVVud3JhcCgpO1xuICAgIGNvbnN0IGRhdGFkb2dBcGlLZXkgPSBkYXRhZG9nU2VjcmV0LmdldFNlY3JldCgnQXBpS2V5Jyk7XG5cbiAgICBjb25zdCBkYXRhZG9nU2lkZWNhckNwdSA9IGRhdGFkb2dPcHRpb25zPy5jcHUgPz8gdGhpcy5ERUZBVUxUX0RBVEFET0dfU0lERUNBUl9DUFU7XG4gICAgY29uc3QgZGF0YWRvZ1NpZGVjYXJNZW1vcnlNaUIgPSBkYXRhZG9nT3B0aW9ucz8ubWVtb3J5TGltaXRNaUIgPz8gdGhpcy5ERUZBVUxUX0RBVEFET0dfU0lERUNBUl9NRU1PUllfTElNSVRfTUlCO1xuXG4gICAgY29uc3QgbG9nZ2luZ01vZGVGb3JTZXJ2aWNlID0gZGF0YWRvZ09wdGlvbnM/LmxvZ2dpbmdNb2RlRm9yU2VydmljZSA/PyB0aGlzLkRFRkFVTFRfTE9HR0lOR19NT0RFX0ZPUl9TRVJWSUNFO1xuICAgIGNvbnN0IGxvZ2dpbmdNb2RlRm9yRGF0YWRvZ0FnZW50ID1cbiAgICAgIGRhdGFkb2dPcHRpb25zPy5sb2dnaW5nTW9kZUZvckRhdGFkb2dBZ2VudCA/PyB0aGlzLkRFRkFVTFRfTE9HR0lOR19NT0RFX0ZPUl9EQVRBRE9HX1NJREVDQVI7XG4gICAgY29uc3QgZmlyZUxlbnNMb2dSb3V0ZXJSZXF1aXJlZCA9XG4gICAgICBsb2dnaW5nTW9kZUZvclNlcnZpY2UgPT09IERhdGFEb2dMb2dnaW5nTW9kZS5BV1NfRklSRV9MRU5TIHx8XG4gICAgICBsb2dnaW5nTW9kZUZvckRhdGFkb2dBZ2VudCA9PT0gRGF0YURvZ0xvZ2dpbmdNb2RlLkFXU19GSVJFX0xFTlM7XG5cbiAgICBjb25zdCBmaXJlTGVuc1NpZGVjYXJDcHUgPSBkYXRhZG9nT3B0aW9ucz8uYXdzRmlyZUxlbnNDcHUgPz8gdGhpcy5ERUZBVUxUX0xPR19ST1VURVJfQ1BVO1xuICAgIGNvbnN0IGZpcmVMZW5zU2lkZWNhck1lbW9yeU1pQiA9XG4gICAgICBkYXRhZG9nT3B0aW9ucz8uYXdzRmlyZUxlbnNNZW1vcnlMaW1pdE1pQiA/PyB0aGlzLkRFRkFVTFRfTE9HX1JPVVRFUl9NRU1PUllfTElNSVRfTUlCO1xuICAgIGNvbnN0IGRhdGFkb2dTaWRlY2FyRXNzZW50aWFsID0gZGF0YWRvZ09wdGlvbnM/LmRhdGFkb2dTaWRlY2FyRXNzZW50aWFsID8/IHRoaXMuREVGQVVMVF9EQVRBRE9HX1NJREVDQVJfRVNTRU5USUFMO1xuICAgIGNvbnN0IGRhdGFEb2dFbmFibGVSZXN0YXJ0UG9saWN5ID1cbiAgICAgIGRhdGFkb2dPcHRpb25zPy5lbmFibGVSZXN0YXJ0UG9saWN5ID8/IHRoaXMuREVGQVVMVF9EQVRBRE9HX0VOQUJMRV9SRVNUQVJUX1BPTElDWTtcblxuICAgIGZ1bmN0aW9uIGdldFJlc3RhcnRJZ25vcmVkRXhpdENvZGVzKFxuICAgICAgZW5hYmxlUmVzdGFydFBvbGljeTogYm9vbGVhbiB8IHVuZGVmaW5lZCxcbiAgICAgIHJlc3RhcnRJZ25vcmVkRXhpdENvZGVzOiBudW1iZXJbXSB8IHVuZGVmaW5lZCxcbiAgICAgIGRlZmF1bHRJZ25vcmVkRXhpdENvZGVzOiBudW1iZXJbXVxuICAgICk6IG51bWJlcltdIHwgdW5kZWZpbmVkIHtcbiAgICAgIGlmIChlbmFibGVSZXN0YXJ0UG9saWN5ID09PSBmYWxzZSkge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfSBlbHNlIGlmIChlbmFibGVSZXN0YXJ0UG9saWN5ID09PSB0cnVlKSB7XG4gICAgICAgIHJldHVybiByZXN0YXJ0SWdub3JlZEV4aXRDb2RlcyA/PyBbMF07XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gZGVmYXVsdElnbm9yZWRFeGl0Q29kZXM7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgZGF0YURvZ3Jlc3RhcnRJZ25vcmVkRXhpdENvZGVzID0gZ2V0UmVzdGFydElnbm9yZWRFeGl0Q29kZXMoXG4gICAgICBkYXRhRG9nRW5hYmxlUmVzdGFydFBvbGljeSxcbiAgICAgIGRhdGFkb2dPcHRpb25zPy5yZXN0YXJ0SWdub3JlZEV4aXRDb2RlcyxcbiAgICAgIHRoaXMuREVGQVVMVF9EQVRBRE9HX1JFU1RBUlRfSUdOT1JFRF9FWElUX0NPREVTXG4gICAgKTtcblxuICAgIGxldCBzZXJ2aWNlQ29udGFpbmVyQ3B1VW5pdHM6IG51bWJlcjtcbiAgICBsZXQgc2VydmljZUNvbnRhaW5lck1lbW9yeUxpbWl0TWlCOiBudW1iZXI7XG5cbiAgICBpZiAoZmlyZUxlbnNMb2dSb3V0ZXJSZXF1aXJlZCkge1xuICAgICAgc2VydmljZUNvbnRhaW5lckNwdVVuaXRzID0gZmFyZ2F0ZU9wdGlvbnMuY3B1IC0gZGF0YWRvZ1NpZGVjYXJDcHUgLSBmaXJlTGVuc1NpZGVjYXJDcHU7XG4gICAgICBzZXJ2aWNlQ29udGFpbmVyTWVtb3J5TGltaXRNaUIgPVxuICAgICAgICBmYXJnYXRlT3B0aW9ucy5tZW1vcnlMaW1pdE1pQiAtIGRhdGFkb2dTaWRlY2FyTWVtb3J5TWlCIC0gZmlyZUxlbnNTaWRlY2FyTWVtb3J5TWlCO1xuICAgICAgZGF0YWRvZy5hZGRGaXJlbGVuc0NvbmZpZ1VwbG9hZEZyb21TM1Blcm1pc3Npb25zKHtcbiAgICAgICAgdGFza0RlZmluaXRpb246IHRoaXMudGFza0RlZmluaXRpb24sXG4gICAgICAgIGZpcmVsZW5zQ29uZmlnQnVja2V0QXJuOiB0aGlzLkZJUkVMRU5TX0NPTkZJR19CVUNLRVRfQVJOLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNlcnZpY2VDb250YWluZXJDcHVVbml0cyA9IGZhcmdhdGVPcHRpb25zLmNwdSAtIGRhdGFkb2dTaWRlY2FyQ3B1O1xuICAgICAgc2VydmljZUNvbnRhaW5lck1lbW9yeUxpbWl0TWlCID0gZmFyZ2F0ZU9wdGlvbnMubWVtb3J5TGltaXRNaUIgLSBkYXRhZG9nU2lkZWNhck1lbW9yeU1pQjtcbiAgICB9XG4gICAgdGhpcy5zZXJ2aWNlQ29udGFpbmVyRGVmaW5pdGlvbiA9IHRoaXMudGFza0RlZmluaXRpb24uYWRkQ29udGFpbmVyKHNlcnZpY2VOYW1lLCB7XG4gICAgICBpbWFnZTogY29udGFpbmVyRGVmaW5pdGlvbk9wdGlvbi5pbWFnZSxcbiAgICAgIGNwdTogc2VydmljZUNvbnRhaW5lckNwdVVuaXRzLFxuICAgICAgbWVtb3J5TGltaXRNaUI6IHNlcnZpY2VDb250YWluZXJNZW1vcnlMaW1pdE1pQixcbiAgICAgIGVudmlyb25tZW50OiB7XG4gICAgICAgIC4uLmRhdGFkb2cuZ2V0RmFyZ2F0ZUNvbnRhaW5lckVudmlyb25tZW50VmFyaWFibGVzKHtcbiAgICAgICAgICBzY29wZTogdGhpcyxcbiAgICAgICAgICBzdGFnZSxcbiAgICAgICAgICBzZXJ2aWNlTmFtZSxcbiAgICAgICAgICB2ZXJzaW9uLFxuICAgICAgICAgIGFjY291bnROYW1lLFxuICAgICAgICAgIHRlYW1OYW1lLFxuICAgICAgICAgIHRlYW1JZGVudGlmaWVyLFxuICAgICAgICAgIGFkZGl0aW9uYWxUYWdzOiBkYXRhZG9nT3B0aW9ucz8uYWRkaXRpb25hbFRhZ3MsXG4gICAgICAgICAgdHJhY2VTYW1wbGluZzogZGF0YWRvZ09wdGlvbnM/LnRyYWNlU2FtcGxpbmcsXG4gICAgICAgIH0pLFxuICAgICAgICAuLi5jb250YWluZXJEZWZpbml0aW9uT3B0aW9uLmVudmlyb25tZW50LFxuICAgICAgfSxcbiAgICAgIGRvY2tlckxhYmVsczoge1xuICAgICAgICAuLi5kYXRhZG9nLmdldEZhcmdhdGVEb2NrZXJMYWJlbHMoeyBzdGFnZSwgc2VydmljZU5hbWUsIHZlcnNpb24gfSksXG4gICAgICB9LFxuICAgICAgaGVhbHRoQ2hlY2s6IGNvbnRhaW5lckRlZmluaXRpb25PcHRpb24uaGVhbHRoQ2hlY2ssXG4gICAgICBsb2dnaW5nOiBkYXRhZG9nLnNldHVwTG9nZ2luZyh7XG4gICAgICAgIHNjb3BlLFxuICAgICAgICBhY2NvdW50TmFtZSxcbiAgICAgICAgdGVhbU5hbWUsXG4gICAgICAgIHRlYW1JZGVudGlmaWVyLFxuICAgICAgICBzdGFnZSxcbiAgICAgICAgc2VydmljZU5hbWUsXG4gICAgICAgIHZlcnNpb24sXG4gICAgICAgIGRhdGFkb2dBcGlLZXksXG4gICAgICAgIGRhdGFkb2dMb2dnaW5nTW9kZTogbG9nZ2luZ01vZGVGb3JTZXJ2aWNlLFxuICAgICAgICBkYXRhZG9nU2l0ZSxcbiAgICAgICAgY29udGFpbmVyVHlwZTogJ3NlcnZpY2UnLFxuICAgICAgICBhZGRpdGlvbmFsVGFnczogZGF0YWRvZ09wdGlvbnM/LmFkZGl0aW9uYWxUYWdzLFxuICAgICAgfSksXG4gICAgICBzZWNyZXRzOiBjb250YWluZXJEZWZpbml0aW9uT3B0aW9uLnNlY3JldHMsXG4gICAgfSk7XG5cbiAgICBpZiAoZnJhbWV3b3Jrcz8uaW5jbHVkZXMoRnJhbWV3b3JrLlNQUklORykpIHtcbiAgICAgIFNwcmluZy5hbGxvd1BhcmFtZXRlclN0b3JlQWNjZXNzRm9yU3ByaW5nQ2xvdWRBd3ModGhpcywgc2VydmljZU5hbWUsIHRoaXMudGFza0RlZmluaXRpb24udGFza1JvbGUpO1xuICAgICAgU3ByaW5nLmFsbG93U2VjcmV0c01hbmFnZXJBY2Nlc3NGb3JTcHJpbmdDbG91ZEF3cyh0aGlzLCBzZXJ2aWNlTmFtZSwgdGhpcy50YXNrRGVmaW5pdGlvbi50YXNrUm9sZSk7XG4gICAgfVxuXG4gICAgaWYgKGZpcmVMZW5zTG9nUm91dGVyUmVxdWlyZWQpIHtcbiAgICAgIHRoaXMubG9nUm91dGVyQ29udGFpbmVyRGVmaW5pdGlvbiA9IGRhdGFkb2cuYWRkRmlyZUxlbnNMb2dSb3V0ZXIoe1xuICAgICAgICB0YXNrRGVmaW5pdGlvbjogdGhpcy50YXNrRGVmaW5pdGlvbixcbiAgICAgICAgY3B1OiBmaXJlTGVuc1NpZGVjYXJDcHUsXG4gICAgICAgIG1lbW9yeUxpbWl0TWlCOiBmaXJlTGVuc1NpZGVjYXJNZW1vcnlNaUIsXG4gICAgICAgIGZpcmVsZW5zQ29uZmlnQnVja2V0QXJuOiB0aGlzLkZJUkVMRU5TX0NPTkZJR19CVUNLRVRfQVJOLFxuICAgICAgICBmaXJlbGVuc0NvbmZpZ0ZpbGVQYXRoOiB0aGlzLkZJUkVMRU5TX0NPTkZJR19GSUxFX1BBVEgsXG4gICAgICAgIHNlcnZpY2VOYW1lOiBwcm9wcy5zZXJ2aWNlTmFtZSxcbiAgICAgIH0pO1xuXG4gICAgICB0aGlzLnRhc2tEZWZpbml0aW9uLmV4ZWN1dGlvblJvbGU/LmFkZE1hbmFnZWRQb2xpY3koXG4gICAgICAgIGlhbS5NYW5hZ2VkUG9saWN5LmZyb21Bd3NNYW5hZ2VkUG9saWN5TmFtZSgnc2VydmljZS1yb2xlL0FtYXpvbkVDU1Rhc2tFeGVjdXRpb25Sb2xlUG9saWN5JylcbiAgICAgICk7XG4gICAgfVxuICAgIGlmICh0aGlzLnRhc2tEZWZpbml0aW9uLmV4ZWN1dGlvblJvbGUpIHtcbiAgICAgIGRhdGFkb2dTZWNyZXQuZ3JhbnRSZWFkKHRoaXMudGFza0RlZmluaXRpb24uZXhlY3V0aW9uUm9sZSk7XG4gICAgfVxuICAgIHRoaXMuZGF0YWRvZ1NpZGVDYXJDb250YWluZXJEZWZpbml0aW9uID0gZGF0YWRvZy5hZGREYXRhZG9nU2lkZWNhcih7XG4gICAgICBzY29wZSxcbiAgICAgIHRhc2tEZWZpbml0aW9uOiB0aGlzLnRhc2tEZWZpbml0aW9uLFxuICAgICAgYWNjb3VudE5hbWUsXG4gICAgICB0ZWFtTmFtZSxcbiAgICAgIHRlYW1JZGVudGlmaWVyLFxuICAgICAgc3RhZ2UsXG4gICAgICBzZXJ2aWNlTmFtZSxcbiAgICAgIHZlcnNpb24sXG4gICAgICBkYXRhZG9nQXBpS2V5LFxuICAgICAgZGF0YWRvZ1NpdGUsXG4gICAgICBkYXRhZG9nTG9nZ2luZ01vZGU6IGxvZ2dpbmdNb2RlRm9yRGF0YWRvZ0FnZW50LFxuICAgICAgYXBtR2V0UmVzb3VyY2VzVG9JZ25vcmU6IGRhdGFkb2dPcHRpb25zPy5hcG1HZXRFbmRwb2ludHNUb0lnbm9yZSA/PyB0aGlzLkRFRkFVTFRfQVBNX0dFVF9FTkRQT0lOVFNfVE9fSUdOT1JFLFxuICAgICAgY3B1OiBkYXRhZG9nU2lkZWNhckNwdSxcbiAgICAgIG1lbW9yeUxpbWl0TWlCOiBkYXRhZG9nU2lkZWNhck1lbW9yeU1pQixcbiAgICAgIGVzc2VudGlhbDogZGF0YWRvZ1NpZGVjYXJFc3NlbnRpYWwsXG4gICAgICBlbmFibGVSZXN0YXJ0UG9saWN5OiBkYXRhRG9nRW5hYmxlUmVzdGFydFBvbGljeSxcbiAgICAgIHJlc3RhcnRJZ25vcmVkRXhpdENvZGVzOiBkYXRhRG9ncmVzdGFydElnbm9yZWRFeGl0Q29kZXMsXG4gICAgICBjb250YWluZXJUYWc6IHByb3BzLmRhdGFkb2dPcHRpb25zPy5kYXRhZG9nU2lkZWNhclRhZyA/PyB0aGlzLkRFRkFVTFRfREFUQURPR19TSURFQ0FSX1RBRywgLy8gVGhlc2UgYXJlIHBvc2l0aW9uYWwgcGFyYW1ldGVycyxcbiAgICAgIGFkZGl0aW9uYWxUYWdzOiBkYXRhZG9nT3B0aW9ucz8uYWRkaXRpb25hbFRhZ3MsXG4gICAgICB0cmFjZVNhbXBsaW5nOiBkYXRhZG9nT3B0aW9ucz8udHJhY2VTYW1wbGluZyxcbiAgICB9KTtcblxuICAgIGRhdGFkb2cuZW5zdXJlTG9nZ2luZ0FuZE1vbml0b3JpbmdBcmVSZWFkeUJlZm9yZVNlcnZpY2VTdGFydHModGhpcyk7XG5cbiAgICBjb25zdCBsb2FkQmFsYW5jZXJPcHRpb25zRm9yRmFyZ2F0ZVNlcnZpY2UgPSBsb2FkQmFsYW5jZXJPcHRpb25zXG4gICAgICA/IHsgaGVhbHRoQ2hlY2tHcmFjZVBlcmlvZDogbG9hZEJhbGFuY2VyT3B0aW9ucy5oZWFsdGhDaGVja0dyYWNlUGVyaW9kIH1cbiAgICAgIDoge307XG5cbiAgICB0aGlzLnNlcnZpY2UgPSBuZXcgZWNzLkZhcmdhdGVTZXJ2aWNlKHRoaXMsICdTZXJ2aWNlJywge1xuICAgICAgY2x1c3RlcjogZmFyZ2F0ZUNsdXN0ZXIsXG4gICAgICB0YXNrRGVmaW5pdGlvbjogdGhpcy50YXNrRGVmaW5pdGlvbixcbiAgICAgIGNpcmN1aXRCcmVha2VyOiB7IHJvbGxiYWNrOiB0cnVlIH0sXG4gICAgICBtYXhIZWFsdGh5UGVyY2VudDogMjAwLFxuICAgICAgbWluSGVhbHRoeVBlcmNlbnQ6IDEwMCxcbiAgICAgIGRlc2lyZWRDb3VudDogZmFyZ2F0ZU9wdGlvbnM/LmRlc2lyZWRDb3VudCxcbiAgICAgIC4uLmxvYWRCYWxhbmNlck9wdGlvbnNGb3JGYXJnYXRlU2VydmljZSxcbiAgICAgIHByb3BhZ2F0ZVRhZ3M6IGVjcy5Qcm9wYWdhdGVkVGFnU291cmNlLlNFUlZJQ0UsXG4gICAgfSk7XG5cbiAgICB0aGlzLmNvbm5lY3Rpb25zID0gdGhpcy5zZXJ2aWNlLmNvbm5lY3Rpb25zO1xuXG4gICAgaWYgKGxvYWRCYWxhbmNlck9wdGlvbnMgIT0gbnVsbCkge1xuICAgICAgY29uc3QgY29udGFpbmVyUG9ydCA9IDQ0MztcbiAgICAgIHRoaXMuc2VydmljZUNvbnRhaW5lckRlZmluaXRpb24uYWRkUG9ydE1hcHBpbmdzKHtcbiAgICAgICAgY29udGFpbmVyUG9ydDogY29udGFpbmVyUG9ydCxcbiAgICAgICAgcHJvdG9jb2w6IGVjcy5Qcm90b2NvbC5UQ1AsXG4gICAgICB9KTtcbiAgICAgIHRoaXMudGFyZ2V0R3JvdXAgPSBuZXcgZWxidjIuQXBwbGljYXRpb25UYXJnZXRHcm91cCh0aGlzLCAnVGFyZ2V0R3JvdXAnLCB7XG4gICAgICAgIHZwYzogdnBjLFxuICAgICAgICBwb3J0OiBjb250YWluZXJQb3J0LFxuICAgICAgICBwcm90b2NvbDogZWxidjIuQXBwbGljYXRpb25Qcm90b2NvbC5IVFRQUyxcbiAgICAgICAgdGFyZ2V0VHlwZTogZWxidjIuVGFyZ2V0VHlwZS5JUCxcbiAgICAgICAgdGFyZ2V0czogW3RoaXMuc2VydmljZV0sXG4gICAgICAgIGhlYWx0aENoZWNrOiBsb2FkQmFsYW5jZXJPcHRpb25zLmhlYWx0aENoZWNrLFxuICAgICAgICBzbG93U3RhcnQ6IHByb3BzLmxvYWRCYWxhbmNlck9wdGlvbnM/LnNsb3dTdGFydCA/PyB0aGlzLkRFRkFVTFRfU0xPV19TVEFSVCxcbiAgICAgICAgZGVyZWdpc3RyYXRpb25EZWxheTogcHJvcHMubG9hZEJhbGFuY2VyT3B0aW9ucz8uZGVyZWdpc3RyYXRpb25EZWxheSA/PyB0aGlzLkRFRkFVTFRfREVSRUdJU1RSQVRJT05fREVMQVksXG4gICAgICB9KTtcblxuICAgICAgbG9hZEJhbGFuY2VyT3B0aW9ucy5saXN0ZW5lclJ1bGVzLmZvckVhY2goKHsgcHJpb3JpdHksIGNvbmRpdGlvbnMgfSkgPT4ge1xuICAgICAgICBsb2FkQmFsYW5jZXJPcHRpb25zLmxpc3RlbmVyLmFkZFRhcmdldEdyb3VwcyhgUHJpb3JpdHkke3ByaW9yaXR5fUxpc3RlbmVyUnVsZWAsIHtcbiAgICAgICAgICB0YXJnZXRHcm91cHM6IFt0aGlzLnRhcmdldEdyb3VwIGFzIGVsYnYyLkFwcGxpY2F0aW9uVGFyZ2V0R3JvdXBdLFxuICAgICAgICAgIHByaW9yaXR5OiBwcmlvcml0eSxcbiAgICAgICAgICBjb25kaXRpb25zOiBjb25kaXRpb25zLFxuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIG5ldyBEYXRhZG9nU2VydmljZUNhdGFsb2dFbnRyeSh0aGlzLCAnRGF0YWRvZ1NlcnZpY2VDYXRhbG9nRW50cnknLCB7XG4gICAgICBzZXJ2aWNlTmFtZTogc2VydmljZU5hbWUsXG4gICAgICBsYW5ndWFnZXM6IFsnamF2YSddLFxuICAgICAgc2VydmljZVR5cGU6ICd3ZWInLFxuICAgIH0pO1xuICB9XG59XG5cbmNsYXNzIERlbnlMaXN0ZWRLZXlWYWxpZGF0b3IgaW1wbGVtZW50cyBjb25zdHJ1Y3RzLklWYWxpZGF0aW9uIHtcbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSByZWFkb25seSBkZW55TGlzdDogc3RyaW5nW10sXG4gICAgcHJpdmF0ZSByZWFkb25seSBkaWN0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgdW5kZWZpbmVkLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgbWVzc2FnZUdlbmVyYXRvcjogKGtleU5hbWU6IHN0cmluZykgPT4gc3RyaW5nXG4gICkge31cblxuICB2YWxpZGF0ZSgpOiBzdHJpbmdbXSB7XG4gICAgaWYgKCF0aGlzLmRpY3QpIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQ6IHN0cmluZ1tdID0gW107XG4gICAgdGhpcy5kZW55TGlzdC5mb3JFYWNoKGtleU5hbWUgPT4ge1xuICAgICAgaWYgKHRoaXMuZGljdCAmJiBrZXlOYW1lIGluIHRoaXMuZGljdCkge1xuICAgICAgICByZXN1bHQucHVzaCh0aGlzLm1lc3NhZ2VHZW5lcmF0b3Ioa2V5TmFtZSkpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuY2xhc3MgQ2x1c3RlclZwY1ZhbGlkYXRvciBpbXBsZW1lbnRzIGNvbnN0cnVjdHMuSVZhbGlkYXRpb24ge1xuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IHZwYzogZWMyLklWcGMsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjbHVzdGVyPzogZWNzLklDbHVzdGVyXG4gICkge31cblxuICB2YWxpZGF0ZSgpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgaWYgKHRoaXMuY2x1c3RlciAmJiB0aGlzLmNsdXN0ZXIudnBjLnZwY0lkICE9PSB0aGlzLnZwYy52cGNJZCkge1xuICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgIGBUaGUgVlBDIHByb3ZpZGVkIGluIHRoZSBjbHVzdGVyICgke3RoaXMuY2x1c3Rlci52cGMubm9kZS5pZH0pIE1VU1QgbWF0Y2ggdGhlIFZQQyBwcm92aWRlZCBhcyBhcmd1bWVudCAoJHt0aGlzLnZwYy5ub2RlLmlkfSkuYFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIHJlc3VsdDtcbiAgfVxufVxuXG5jbGFzcyBEYXRhZG9nU2lkZUNhclZhbGlkYXRvciBpbXBsZW1lbnRzIGNvbnN0cnVjdHMuSVZhbGlkYXRpb24ge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGRhdGFkb2dPcHRpb25zPzogRGF0YWRvZ0ludGVncmF0aW9uUHJvcHMpIHt9XG4gIHZhbGlkYXRlKCk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICBpZiAoXG4gICAgICB0aGlzLmRhdGFkb2dPcHRpb25zICYmXG4gICAgICB0aGlzLmRhdGFkb2dPcHRpb25zLmVuYWJsZVJlc3RhcnRQb2xpY3kgPT09IGZhbHNlICYmXG4gICAgICB0aGlzLmRhdGFkb2dPcHRpb25zLnJlc3RhcnRJZ25vcmVkRXhpdENvZGVzXG4gICAgKSB7XG4gICAgICByZXN1bHQucHVzaCgnUmVzdGFydElnbm9yZWRFeGl0Q29kZXMgY2Fubm90IGJlIHNwZWNpZmllZCBpZiBlbmFibGVSZXN0YXJ0UG9saWN5IGlzIGZhbHNlJyk7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cblxuY2xhc3MgRmlyZWxlbnNTaWRlQ2FyVmFsaWRhdG9yIGltcGxlbWVudHMgY29uc3RydWN0cy5JVmFsaWRhdGlvbiB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgZGF0YWRvZ09wdGlvbnM/OiBEYXRhZG9nSW50ZWdyYXRpb25Qcm9wcykge31cblxuICB2YWxpZGF0ZSgpOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcmVzdWx0ID0gW107XG4gICAgaWYgKHRoaXMuZGF0YWRvZ09wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGlzRmlyZWxlbnNVc2VkID1cbiAgICAgICAgdGhpcy5kYXRhZG9nT3B0aW9ucy5sb2dnaW5nTW9kZUZvclNlcnZpY2UgPT0gRGF0YURvZ0xvZ2dpbmdNb2RlLkFXU19GSVJFX0xFTlMgfHxcbiAgICAgICAgdGhpcy5kYXRhZG9nT3B0aW9ucy5sb2dnaW5nTW9kZUZvckRhdGFkb2dBZ2VudCA9PSBEYXRhRG9nTG9nZ2luZ01vZGUuQVdTX0ZJUkVfTEVOUztcbiAgICAgIGNvbnN0IGlzRmlyZWxlbnNDb25maWd1cmVkID0gdGhpcy5kYXRhZG9nT3B0aW9ucy5hd3NGaXJlTGVuc0NwdSB8fCB0aGlzLmRhdGFkb2dPcHRpb25zLmF3c0ZpcmVMZW5zTWVtb3J5TGltaXRNaUI7XG5cbiAgICAgIGlmICghaXNGaXJlbGVuc1VzZWQgJiYgaXNGaXJlbGVuc0NvbmZpZ3VyZWQpIHtcbiAgICAgICAgcmVzdWx0LnB1c2goXG4gICAgICAgICAgJ1lvdSBjYW5ub3Qgb3ZlcnJpZGUgdGhlIGNvbnRhaW5lciByZXNvdXJjZSBhbGxvY2F0aW9uIGZvciBmaXJlbGVucyBpZiBpdCBpcyBub3QgdXNlZCBhcyBsb2dnaW5nIG1vZGUgZm9yIGFueSBjb250YWluZXInXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cbn1cbiJdfQ==
|