@orcabus/platform-cdk-constructs 0.0.62 → 0.0.63

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 CHANGED
@@ -6888,6 +6888,6 @@
6888
6888
  "symbolId": "shared-config/slack:SlackAlerts"
6889
6889
  }
6890
6890
  },
6891
- "version": "0.0.62",
6892
- "fingerprint": "c+SfLN7njMfNL9JdXr0dzNPmAjCcN6srQn+wE6LUGJg="
6891
+ "version": "0.0.63",
6892
+ "fingerprint": "oboQ1x70mZUaDFK3SRkThlxubnIkafWxHhzzyt0a+AU="
6893
6893
  }
@@ -15,7 +15,7 @@ const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
15
15
  const aws_route53_targets_1 = require("aws-cdk-lib/aws-route53-targets");
16
16
  const config_1 = require("./config");
17
17
  class OrcaBusApiGateway extends constructs_1.Construct {
18
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.apigateway.OrcaBusApiGateway", version: "0.0.62" };
18
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.apigateway.OrcaBusApiGateway", version: "0.0.63" };
19
19
  /**
20
20
  * The AWS region where the API Gateway is deployed.
21
21
  */
@@ -13,7 +13,7 @@ exports.CROSS_DEPLOYMENT_ARTIFACT_BUCKET_NAME = "orcabus-cross-deployment-codepi
13
13
  exports.CROSS_DEPLOYMENT_ARTIFACT_KMS_ALIAS = "orcabus-cross-deployment-codepipeline-artifact";
14
14
  exports.CROSS_DEPLOYMENT_ARTIFACT_KMS_ARN_SSM_PARAMETER_NAME = "/orcabus/deployment-stack-pipeline/artifact-bucket/kms-key-arn";
15
15
  class CrossDeploymentArtifactBucket extends constructs_1.Construct {
16
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.CrossDeploymentArtifactBucket", version: "0.0.62" };
16
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.CrossDeploymentArtifactBucket", version: "0.0.63" };
17
17
  /**
18
18
  * The S3 bucket used to store artifacts for cross-deployment pipelines.
19
19
  */
@@ -32,7 +32,7 @@ exports.DEFAULT_SYNTH_STEP_PARTIAL_BUILD_SPEC = {
32
32
  * before using this construct.
33
33
  */
34
34
  class DeploymentStackPipeline extends constructs_1.Construct {
35
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.DeploymentStackPipeline", version: "0.0.62" };
35
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.deploymentPipeline.DeploymentStackPipeline", version: "0.0.63" };
36
36
  /**
37
37
  * The code pipeline construct that is created.
38
38
  */
package/dynamodb/index.js CHANGED
@@ -40,7 +40,7 @@ const dynamodb = __importStar(require("aws-cdk-lib/aws-dynamodb"));
40
40
  const aws_cdk_lib_1 = require("aws-cdk-lib");
41
41
  const config_1 = require("./config");
42
42
  class DynamoDbPartitionedConstruct extends constructs_1.Construct {
43
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbPartitionedConstruct", version: "0.0.62" };
43
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbPartitionedConstruct", version: "0.0.63" };
44
44
  table;
45
45
  constructor(scope, id, props) {
46
46
  super(scope, id);
@@ -75,7 +75,7 @@ class DynamoDbPartitionedConstruct extends constructs_1.Construct {
75
75
  }
76
76
  exports.DynamoDbPartitionedConstruct = DynamoDbPartitionedConstruct;
77
77
  class DynamoDbNonPartitionedConstruct extends constructs_1.Construct {
78
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbNonPartitionedConstruct", version: "0.0.62" };
78
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.dynamodb.DynamoDbNonPartitionedConstruct", version: "0.0.63" };
79
79
  table;
80
80
  constructor(scope, id, props) {
81
81
  super(scope, id);
package/ecs/index.js CHANGED
@@ -55,7 +55,7 @@ exports.LAMBDA_ARCHITECTURE_MAP = {
55
55
  ['ARM64']: lambda.Architecture.ARM_64
56
56
  };
57
57
  class EcsFargateTaskConstruct extends constructs_1.Construct {
58
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.ecs.EcsFargateTaskConstruct", version: "0.0.62" };
58
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.ecs.EcsFargateTaskConstruct", version: "0.0.63" };
59
59
  cluster;
60
60
  taskDefinition;
61
61
  taskExecutionRole;
package/lambda/index.js CHANGED
@@ -56,7 +56,7 @@ function getPythonUvDockerImage() {
56
56
  return aws_cdk_lib_1.DockerImage.fromBuild(path_1.default.join(__dirname, 'build_python'));
57
57
  }
58
58
  class PythonUvFunction extends aws_lambda_python_alpha_1.PythonFunction {
59
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.lambda.PythonUvFunction", version: "0.0.62" };
59
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.lambda.PythonUvFunction", version: "0.0.63" };
60
60
  // Class constructs, to be used for caching the layers
61
61
  // This means that if there are multiple lambdas throughout the stack
62
62
  // They will all use the same layer
@@ -361,11 +361,12 @@ class PythonUvFunction extends aws_lambda_python_alpha_1.PythonFunction {
361
361
  const icav2StorageCredentialsSsmParameterPathPrefix = (props.icav2StorageCredentialsSsmParameterPathPrefix ?? icav2_1.ICAV2_STORAGE_CREDENTIALS_SSM_PARAMETER_PATH_PREFIX);
362
362
  // Provide access to the ssm parameter paths
363
363
  this.currentVersion.addToRolePolicy(new iam.PolicyStatement({
364
- actions: ['ssm:GetParametersByPath'],
364
+ // We may need to get the parameters individually or by path
365
+ actions: ['ssm:GetParametersByPath', 'ssm:GetParameter'],
365
366
  resources: [
366
- `arn:aws:ssm:${accounts_1.REGION}:${accounts_1.ACCOUNT_ID_ALIAS[stageName]}:${path_1.default.join("parameter", icav2StorageConfigurationSsmParameterPathPrefix)}/*`,
367
- `arn:aws:ssm:${accounts_1.REGION}:${accounts_1.ACCOUNT_ID_ALIAS[stageName]}:${path_1.default.join("parameter", icav2ProjectToStorageConfigurationsSsmParameterPathPrefix)}/*`,
368
- `arn:aws:ssm:${accounts_1.REGION}:${accounts_1.ACCOUNT_ID_ALIAS[stageName]}:${path_1.default.join("parameter", icav2StorageCredentialsSsmParameterPathPrefix)}/*`,
367
+ `arn:aws:ssm:${accounts_1.REGION}:${accounts_1.ACCOUNT_ID_ALIAS[stageName]}:parameter${icav2StorageConfigurationSsmParameterPathPrefix.replace(/\/$/, "")}/*`,
368
+ `arn:aws:ssm:${accounts_1.REGION}:${accounts_1.ACCOUNT_ID_ALIAS[stageName]}:parameter${icav2ProjectToStorageConfigurationsSsmParameterPathPrefix.replace(/\/$/, "")}/*`,
369
+ `arn:aws:ssm:${accounts_1.REGION}:${accounts_1.ACCOUNT_ID_ALIAS[stageName]}:parameter${icav2StorageCredentialsSsmParameterPathPrefix.replace(/\/$/, "")}/*`,
369
370
  ],
370
371
  }));
371
372
  // Add environment variables
@@ -374,4 +375,4 @@ class PythonUvFunction extends aws_lambda_python_alpha_1.PythonFunction {
374
375
  }
375
376
  }
376
377
  exports.PythonUvFunction = PythonUvFunction;
377
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQ0Esd0RBRUM7O0FBbkNELDhFQUF5RztBQUV6RywrREFBaUQ7QUFDakQsK0VBQWlFO0FBQ2pFLHlEQUEyQztBQUMzQyx5REFBMkM7QUFDM0MsdURBQXlDO0FBQ3pDLDZDQUF3QztBQUV4QyxnREFBd0I7QUFFeEIsdURBSWdDO0FBQ2hDLHFDQU9rQjtBQUNsQixvQ0FBMEM7QUFDMUMsd0RBQW1FO0FBQ25FLGtEQUlnQztBQUdoQyxTQUFnQixzQkFBc0I7SUFDbEMsT0FBTyx5QkFBVyxDQUFDLFNBQVMsQ0FBQyxjQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUF3RkQsTUFBYSxnQkFBaUIsU0FBUSx3Q0FBYzs7SUFDaEQsc0RBQXNEO0lBQ3RELHFFQUFxRTtJQUNyRSxtQ0FBbUM7SUFDM0IsTUFBTSxDQUFDLG9CQUFvQixHQUF5QyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQzlFLE1BQU0sQ0FBQyxTQUFTLEdBQXlDLElBQUksR0FBRyxFQUFFLENBQUM7SUFDbkUsTUFBTSxDQUFDLFVBQVUsR0FBeUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNwRSxNQUFNLENBQUMsWUFBWSxHQUF5QyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRTlFLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNEI7UUFDbEUsTUFBTSxPQUFPLEdBQUc7WUFDWixHQUFHLEtBQUs7WUFDUixRQUFRLEVBQUU7Z0JBQ04sR0FBRyxLQUFLLENBQUMsUUFBUTtnQkFDakIsU0FBUyxFQUFFO29CQUNQLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxTQUFTO29CQUM1QiwyREFBMkQ7b0JBQzNELGNBQWMsRUFDVixLQUFLLENBQUMsUUFBUSxF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QUksQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLCtDQUErQyxDQUFDLElBQUk7Z0JBQ25JLGVBQWUsaUJBQU0sSUFBSSwyQkFBZ0IsQ0FBQyxTQUFTLENBQUMsSUFBSSxjQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSx5REFBeUQsQ0FBQyxJQUFJO2dCQUM3SSxlQUFlLGlCQUFNLElBQUksMkJBQWdCLENBQUMsU0FBUyxDQUFDLElBQUksY0FBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsNkNBQTZDLENBQUMsSUFBSTthQUNwSTtTQUNKLENBQUMsQ0FDTCxDQUFDO1FBRUYsNEJBQTRCO1FBQzVCLElBQUksQ0FBQyxjQUFjLENBQ2YsOEJBQThCLEVBQUUsOEJBQThCLENBQUMsVUFBVSxDQUM1RSxDQUFBO1FBQ0QsSUFBSSxDQUFDLGNBQWMsQ0FDZixnQkFBZ0IsRUFBRSxzQkFBYyxDQUNuQyxDQUFBO0lBRUwsQ0FBQzs7QUF6WUwsNENBMllDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtQeXRob25GdW5jdGlvbiwgUHl0aG9uRnVuY3Rpb25Qcm9wcywgUHl0aG9uTGF5ZXJWZXJzaW9ufSBmcm9tIFwiQGF3cy1jZGsvYXdzLWxhbWJkYS1weXRob24tYWxwaGFcIjtcbmltcG9ydCB7Q29uc3RydWN0fSBmcm9tIFwiY29uc3RydWN0c1wiO1xuaW1wb3J0ICogYXMgbGFtYmRhIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtbGFtYmRhXCI7XG5pbXBvcnQgKiBhcyBzZWNyZXRzTWFuYWdlciBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyXCI7XG5pbXBvcnQgKiBhcyBzc20gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zc21cIjtcbmltcG9ydCAqIGFzIGlhbSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWlhbVwiO1xuaW1wb3J0ICogYXMgczMgZnJvbSBcImF3cy1jZGstbGliL2F3cy1zM1wiO1xuaW1wb3J0IHtEb2NrZXJJbWFnZX0gZnJvbSAnYXdzLWNkay1saWInO1xuXG5pbXBvcnQgcGF0aCBmcm9tIFwicGF0aFwiO1xuXG5pbXBvcnQge1xuICAgIFBhcmFtc0FuZFNlY3JldHNMYXllclZlcnNpb24sXG4gICAgUGFyYW1zQW5kU2VjcmV0c0xvZ0xldmVsLFxuICAgIFBhcmFtc0FuZFNlY3JldHNWZXJzaW9ucyxcbn0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxhbWJkYSc7XG5pbXBvcnQge1xuICAgIC8vIE9yY2FidXMgZGVmYXVsdHNcbiAgICBERUZBVUxUX0hPU1ROQU1FX1NTTV9QQVJBTUVURVIsIERFRkFVTFRfT1JDQUJVU19UT0tFTl9TRUNSRVRfSUQsXG4gICAgLy8gTWFydCBkZWZhdWx0c1xuICAgIE1BUlRfRU5WX1ZBUlMsIE1BUlRfTEFNQkRBX0ZVTkNUSU9OX05BTUUsXG4gICAgTUFSVF9TM19CVUNLRVQsXG4gICAgTUFSVF9TM19QUkVGSVgsXG59IGZyb20gXCIuL2NvbmZpZ1wiO1xuaW1wb3J0IHtyZXNvbHZlU3RhZ2VOYW1lfSBmcm9tIFwiLi4vdXRpbHNcIjtcbmltcG9ydCB7QUNDT1VOVF9JRF9BTElBUywgUkVHSU9OfSBmcm9tIFwiLi4vc2hhcmVkLWNvbmZpZy9hY2NvdW50c1wiO1xuaW1wb3J0IHtcbiAgSUNBVjJfQUNDRVNTX1RPS0VOX1NFQ1JFVF9JRCxcbiAgSUNBVjJfQkFTRV9VUkwsIElDQVYyX1BST0pFQ1RfVE9fU1RPUkFHRV9DT05GSUdVUkFUSU9OU19TU01fUEFSQU1FVEVSX1BBVEhfUFJFRklYLFxuICBJQ0FWMl9TVE9SQUdFX0NPTkZJR1VSQVRJT05fU1NNX1BBUkFNRVRFUl9QQVRIX1BSRUZJWCwgSUNBVjJfU1RPUkFHRV9DUkVERU5USUFMU19TU01fUEFSQU1FVEVSX1BBVEhfUFJFRklYXG59IGZyb20gXCIuLi9zaGFyZWQtY29uZmlnL2ljYXYyXCI7XG5cblxuZXhwb3J0IGZ1bmN0aW9uIGdldFB5dGhvblV2RG9ja2VySW1hZ2UoKTogRG9ja2VySW1hZ2Uge1xuICAgIHJldHVybiBEb2NrZXJJbWFnZS5mcm9tQnVpbGQocGF0aC5qb2luKF9fZGlybmFtZSwgJ2J1aWxkX3B5dGhvbicpKTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBPcmNhYnVzUmVzb3VyY2VzUHJvcHMge1xuICAgIC8qKlxuICAgICAqIFByb3ZpZGUgdGhlIG9yY2FidXNUb2tlblNlY3JldElkLCBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvIEBERUZBVUxUX09SQ0FCVVNfVE9LRU5fU0VDUkVUX0lEXG4gICAgICovXG4gICAgcmVhZG9ubHkgb3JjYWJ1c1Rva2VuU2VjcmV0SWQ/OiBzdHJpbmdcblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGUgdGhlIGhvc3RuYW1lU3NtUGFyYW1ldGVyTmFtZSwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0byBAREVGQVVMVF9IT1NUTkFNRV9TU01fUEFSQU1FVEVSXG4gICAgICovXG4gICAgcmVhZG9ubHkgaG9zdG5hbWVTc21QYXJhbWV0ZXJOYW1lPzogc3RyaW5nXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTWFydEVudmlyb25tZW50VmFyaWFibGVzIHtcbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBhdGhlbmFXb3JrZ3JvdXBOYW1lLCBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvIEBNQVJUX0VOVl9WQVJTLkFUSEVOQV9XT1JLR1JPVVBfTkFNRVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGF0aGVuYVdvcmtncm91cE5hbWU/OiBzdHJpbmdcblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGUgdGhlIGF0aGVuYURhdGFzb3VyY2VOYW1lLCBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvIEBNQVJUX0VOVl9WQVJTLmF0aGVuYURhdGFzb3VyY2VOYW1lXG4gICAgICovXG4gICAgcmVhZG9ubHkgYXRoZW5hRGF0YXNvdXJjZU5hbWU/OiBzdHJpbmdcblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGUgdGhlIGF0aGVuYURhdGFiYXNlTmFtZSwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0byBATUFSVF9FTlZfVkFSUy5BVEhFTkFfREFUQUJBU0VfTkFNRVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGF0aGVuYURhdGFiYXNlTmFtZT86IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEljYXYyUmVzb3VyY2VzUHJvcHMge1xuICAgIC8qKlxuICAgICAqIFRoZSBpZCBvZiB0aGUgc2VjcmV0IHRoYXQgY29udGFpbnMgdGhlIGljYXYyIGFjY2VzcyB0b2tlblxuICAgICAqIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG8gQElDQVYyX0FDQ0VTU19UT0tFTl9TRUNSRVRfSURcbiAgICAgKi9cbiAgICByZWFkb25seSBpY2F2MkFjY2Vzc1Rva2VuU2VjcmV0SWQ/OiBzdHJpbmdcbiAgICByZWFkb25seSBpY2F2MlN0b3JhZ2VDb25maWd1cmF0aW9uU3NtUGFyYW1ldGVyUGF0aFByZWZpeD86IHN0cmluZ1xuICAgIHJlYWRvbmx5IGljYXYyUHJvamVjdFRvU3RvcmFnZUNvbmZpZ3VyYXRpb25zU3NtUGFyYW1ldGVyUGF0aFByZWZpeD86IHN0cmluZ1xuICAgIHJlYWRvbmx5IGljYXYyU3RvcmFnZUNyZWRlbnRpYWxzU3NtUGFyYW1ldGVyUGF0aFByZWZpeD86IHN0cmluZ1xufVxuXG5cbmV4cG9ydCBpbnRlcmZhY2UgUHl0aG9uVXZGdW5jdGlvblByb3BzIGV4dGVuZHMgUHl0aG9uRnVuY3Rpb25Qcm9wcyB7XG4gICAgLyoqXG4gICAgICogV2hldGhlciBvciBub3QgdG8gaW5jbHVkZSB0aGUgb3JjYWJ1cyBhcGkgdG9vbHMgbGF5ZXIgaW4gdGhlIGxhbWJkYSBmdW5jdGlvbiBidWlsZFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGluY2x1ZGVPcmNhYnVzQXBpVG9vbHNMYXllcj86IGJvb2xlYW5cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgdGhlIG1hcnQgbGF5ZXIgaW4gdGhlIGxhbWJkYSBmdW5jdGlvbiBidWlsZFxuICAgICAqIE5vdGUgdGhhdCB0aGUgbWFydCBsYXllciBpcyBhIGxpdHRsZSBoZWF2aWVyIHRoYW4gdGhlIG9yY2FidXMgYXBpIHRvb2xzIGxheWVyXG4gICAgICogU2luY2Ugd2UgcmVxdWlyZSBwYW5kYXMgdG8gYmUgaW5zdGFsbGVkXG4gICAgICovXG4gICAgcmVhZG9ubHkgaW5jbHVkZU1hcnRMYXllcj86IGJvb2xlYW5cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgdGhlIGljYXYyIGxheWVyIGluIHRoZSBsYW1iZGEgZnVuY3Rpb24gYnVpbGRcbiAgICAgKi9cbiAgICByZWFkb25seSBpbmNsdWRlSWNhdjJMYXllcj86IGJvb2xlYW5cblxuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgdGhlIGZhc3RhcGkgbGF5ZXIgaW4gdGhlIGxhbWJkYSBmdW5jdGlvbiBidWlsZFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGluY2x1ZGVGYXN0QXBpTGF5ZXI/OiBib29sZWFuXG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBvcmNhYnVzVG9rZW5SZXNvdXJjZXMsIG9wdGlvbmFsLCBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvXG4gICAgICogQERFRkFVTFRfT1JDQUJVU19UT0tFTl9TRUNSRVRfSUQgYW5kIEBERUZBVUxUX0hPU1ROQU1FX1NTTV9QQVJBTUVURVJcbiAgICAgKiBmb3IgdGhlIHNlY3JldCBhbmQgU1NNIHBhcmFtZXRlciByZXNwZWN0aXZlbHlcbiAgICAgKi9cbiAgICByZWFkb25seSBvcmNhYnVzVG9rZW5SZXNvdXJjZXM/OiBPcmNhYnVzUmVzb3VyY2VzUHJvcHNcblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGUgdGhlIG1hcnRFbnZpcm9ubWVudFZhcmlhYmxlcywgb3B0aW9uYWwsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG9cbiAgICAgKiBATUFSVF9FTlZfVkFSUy5BVEhFTkFfV09SS0dST1VQX05BTUUsIEBNQVJUX0VOVl9WQVJTLkFUSEVOQV9EQVRBU09VUkNFX05BTUVcbiAgICAgKiBhbmQgQE1BUlRfRU5WX1ZBUlMuQVRIRU5BX0RBVEFCQVNFX05BTUUgZm9yIHRoZSBhdGhlbmEgd29ya2dyb3VwLCBkYXRhc291cmNlIGFuZCBkYXRhYmFzZSByZXNwZWN0aXZlbHlcbiAgICAgKi9cbiAgICByZWFkb25seSBtYXJ0RW52aXJvbm1lbnRWYXJpYWJsZXM/OiBNYXJ0RW52aXJvbm1lbnRWYXJpYWJsZXNcblxuICAgIC8qKlxuICAgICAqIFByb3ZpZGUgdGhlIGljYXYyUmVzb3VyY2VzLCBvcHRpb25hbCwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0b1xuICAgICAqIEBERUZBVUxUX0lDQVYyX0FDQ0VTU19UT0tFTl9TRUNSRVRfSUQgZm9yIHRoZSBzZWNyZXRcbiAgICAgKi9cbiAgICByZWFkb25seSBpY2F2MlJlc291cmNlcz86IEljYXYyUmVzb3VyY2VzUHJvcHNcbn1cblxuXG5leHBvcnQgY2xhc3MgUHl0aG9uVXZGdW5jdGlvbiBleHRlbmRzIFB5dGhvbkZ1bmN0aW9uIHtcbiAgICAvLyBDbGFzcyBjb25zdHJ1Y3RzLCB0byBiZSB1c2VkIGZvciBjYWNoaW5nIHRoZSBsYXllcnNcbiAgICAvLyBUaGlzIG1lYW5zIHRoYXQgaWYgdGhlcmUgYXJlIG11bHRpcGxlIGxhbWJkYXMgdGhyb3VnaG91dCB0aGUgc3RhY2tcbiAgICAvLyBUaGV5IHdpbGwgYWxsIHVzZSB0aGUgc2FtZSBsYXllclxuICAgIHByaXZhdGUgc3RhdGljIG9yY2FidXNBcGlUb29sc0xheWVyOiBNYXA8Q29uc3RydWN0LCBsYW1iZGEuSUxheWVyVmVyc2lvbj4gPSBuZXcgTWFwKCk7XG4gICAgcHJpdmF0ZSBzdGF0aWMgbWFydExheWVyOiBNYXA8Q29uc3RydWN0LCBsYW1iZGEuSUxheWVyVmVyc2lvbj4gPSBuZXcgTWFwKCk7XG4gICAgcHJpdmF0ZSBzdGF0aWMgaWNhdjJMYXllcjogTWFwPENvbnN0cnVjdCwgbGFtYmRhLklMYXllclZlcnNpb24+ID0gbmV3IE1hcCgpO1xuICAgIHByaXZhdGUgc3RhdGljIGZhc3RBcGlMYXllcjogTWFwPENvbnN0cnVjdCwgbGFtYmRhLklMYXllclZlcnNpb24+ID0gbmV3IE1hcCgpO1xuXG4gICAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFB5dGhvblV2RnVuY3Rpb25Qcm9wcykge1xuICAgICAgICBjb25zdCB1dlByb3BzID0ge1xuICAgICAgICAgICAgLi4ucHJvcHMsXG4gICAgICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgICAgICAgIC4uLnByb3BzLmJ1bmRsaW5nLFxuICAgICAgICAgICAgICAgIGJ1aWxkQXJnczoge1xuICAgICAgICAgICAgICAgICAgICAuLi5wcm9wcy5idW5kbGluZz8uYnVpbGRBcmdzLFxuICAgICAgICAgICAgICAgICAgICAvLyBBZGQgVEFSR0VUUExBVEZPUk0gdG8gYnVpbGQgYXJncyBpZiBpdCdzIG5vdCBhbHJlYWR5IHNldFxuICAgICAgICAgICAgICAgICAgICBUQVJHRVRQTEFURk9STTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzLmJ1bmRsaW5nPy5idWlsZEFyZ3M/LlRBUkdFVFBMQVRGT1JNID8/IGxhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0LmRvY2tlclBsYXRmb3JtLFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgaW1hZ2U6IGdldFB5dGhvblV2RG9ja2VySW1hZ2UoKSxcbiAgICAgICAgICAgICAgICBjb21tYW5kSG9va3M6IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgICBiZWZvcmVCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwcm9wcy5idW5kbGluZz8uY29tbWFuZEhvb2tzPy5iZWZvcmVCdW5kbGluZyBhcyB1bmtub3duIGFzIHN0cmluZ1tdID8/IFtdO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgICAgICAgICAgICAgIGFmdGVyQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKHByb3BzLmJ1bmRsaW5nPy5jb21tYW5kSG9va3M/LmFmdGVyQnVuZGxpbmcgYXMgdW5rbm93biBhcyBzdHJpbmdbXSA/PyBbXSkuY29uY2F0KFxuICAgICAgICAgICAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSB0ZXN0cyBkaXJlY3RvcnkgZnJvbSBwYW5kYXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcm0gLXJmICR7b3V0cHV0RGlyfS9wYW5kYXMvdGVzdHNgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgKnB5YyBmaWxlcyBhbmQgX19weWNhY2hlX18gZGlyZWN0b3JpZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZmluZCAke291dHB1dERpcn0gLXR5cGUgZiAtbmFtZSAnKi5weWMnIC1kZWxldGVgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgX19weWNhY2hlX18gZGlyZWN0b3JpZXMgY29udGVudHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZmluZCAke291dHB1dERpcn0gLXR5cGUgZCAtbmFtZSAnX19weWNhY2hlX18nIC1leGVjIHJtIC1yZiB7fS8qIFxcXFw7YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxldGUgdGhlIF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzIHRoZW1zZWx2ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZmluZCAke291dHB1dERpcn0gLXR5cGUgZCAtbmFtZSAnX19weWNhY2hlX18nIC1kZWxldGVgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgcGFyYW1zQW5kU2VjcmV0czpcbiAgICAgICAgICAgICAgICBwcm9wcy5wYXJhbXNBbmRTZWNyZXRzID8/XG4gICAgICAgICAgICAgICAgUGFyYW1zQW5kU2VjcmV0c0xheWVyVmVyc2lvbi5mcm9tVmVyc2lvbihQYXJhbXNBbmRTZWNyZXRzVmVyc2lvbnMuVjFfMF8xMDMsIHtcbiAgICAgICAgICAgICAgICAgICAgY2FjaGVFbmFibGVkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICBjYWNoZVNpemU6IDMwMCxcbiAgICAgICAgICAgICAgICAgICAgbG9nTGV2ZWw6IFBhcmFtc0FuZFNlY3JldHNMb2dMZXZlbC5ERUJVRyxcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICAgICAgc3VwZXIoc2NvcGUsIGlkLCB1dlByb3BzKTtcblxuICAgICAgICBpZiAocHJvcHMuaW5jbHVkZU9yY2FidXNBcGlUb29sc0xheWVyKSB7XG4gICAgICAgICAgICAvKiBTZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIE9yY2FidXMgcmVzb3VyY2VzICovXG4gICAgICAgICAgICB0aGlzLnNldE9yY2FidXNSZXNvdXJjZXMocHJvcHMub3JjYWJ1c1Rva2VuUmVzb3VyY2VzID8/IHt9KVxuXG4gICAgICAgICAgICAvKiBCdWlsZCB0aGUgb3JjYWJ1cyBBcGkgdG9vbHMgbGF5ZXIgKi9cbiAgICAgICAgICAgIHRoaXMuYnVpbGRPcmNhYnVzQXBpVG9vbHNMYXllcihzY29wZSlcbiAgICAgICAgICAgIHRoaXMuYWRkTGF5ZXJzKDxQeXRob25MYXllclZlcnNpb24+UHl0aG9uVXZGdW5jdGlvbi5vcmNhYnVzQXBpVG9vbHNMYXllci5nZXQoc2NvcGUpKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BzLmluY2x1ZGVNYXJ0TGF5ZXIpIHtcbiAgICAgICAgICAgIC8qIFNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgbWFydCByZXNvdXJjZXMgKi9cbiAgICAgICAgICAgIHRoaXMuc2V0QXRoZW5hUmVzb3VyY2VzKHByb3BzLm1hcnRFbnZpcm9ubWVudFZhcmlhYmxlcyA/PyB7fSlcblxuICAgICAgICAgICAgLyogQnVpbGQgdGhlIG1hcnQgbGF5ZXIgKi9cbiAgICAgICAgICAgIHRoaXMuYnVpbGRNYXJ0VG9vbHNMYXllcihzY29wZSlcbiAgICAgICAgICAgIHRoaXMuYWRkTGF5ZXJzKDxQeXRob25MYXllclZlcnNpb24+UHl0aG9uVXZGdW5jdGlvbi5tYXJ0TGF5ZXIuZ2V0KHNjb3BlKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wcy5pbmNsdWRlSWNhdjJMYXllcikge1xuICAgICAgICAgICAgLyogU2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBpY2F2MiByZXNvdXJjZXMgKi9cbiAgICAgICAgICAgIHRoaXMuc2V0SWNhdjJSZXNvdXJjZXMocHJvcHMuaWNhdjJSZXNvdXJjZXMgPz8ge30pXG5cbiAgICAgICAgICAgIC8qIEJ1aWxkIHRoZSBpY2F2MiBsYXllciAqL1xuICAgICAgICAgICAgdGhpcy5idWlsZEljYXYyTGF5ZXIoc2NvcGUpXG4gICAgICAgICAgICB0aGlzLmFkZExheWVycyg8UHl0aG9uTGF5ZXJWZXJzaW9uPlB5dGhvblV2RnVuY3Rpb24uaWNhdjJMYXllci5nZXQoc2NvcGUpKVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BzLmluY2x1ZGVGYXN0QXBpTGF5ZXIpIHtcbiAgICAgICAgICAgIC8qIEJ1aWxkIHRoZSBmYXN0YXBpIGxheWVyICovXG4gICAgICAgICAgICB0aGlzLmJ1aWxkRmFzdEFwaUxheWVyKHNjb3BlKVxuICAgICAgICAgICAgdGhpcy5hZGRMYXllcnMoPFB5dGhvbkxheWVyVmVyc2lvbj5QeXRob25VdkZ1bmN0aW9uLmZhc3RBcGlMYXllci5nZXQoc2NvcGUpKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZE9yY2FidXNBcGlUb29sc0xheWVyKHNjb3BlOiBDb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gT25seSBidWlsZCBvcmNhYnVzIGFwaSBsYXllciBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIGlmICghUHl0aG9uVXZGdW5jdGlvbi5vcmNhYnVzQXBpVG9vbHNMYXllci5oYXMoc2NvcGUpKSB7XG4gICAgICAgICAgICBjb25zdCBsYXllciA9IG5ldyBQeXRob25MYXllclZlcnNpb24oc2NvcGUsICdvcmNhYnVzQXBpVG9vbHNMYXllcicsIHtcbiAgICAgICAgICAgICAgICBlbnRyeTogcGF0aC5qb2luKF9fZGlybmFtZSwgJ2xheWVycy9vcmNhYnVzX2FwaV90b29scycpLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVSdW50aW1lczogW2xhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzEyXSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlQXJjaGl0ZWN0dXJlczogW2xhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0XSxcbiAgICAgICAgICAgICAgICBsaWNlbnNlOiAnR1BMMycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdvcmNhYnVzQXBpVG9vbHNMYXllcicsXG4gICAgICAgICAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IGdldFB5dGhvblV2RG9ja2VySW1hZ2UoKSxcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEhvb2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcGlwIGluc3RhbGwgJHtpbnB1dERpcn0gLS10YXJnZXQgJHtvdXRwdXREaXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSB0ZXN0cyBkaXJlY3RvcnkgZnJvbSBwYW5kYXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHJtIC1yZiAke291dHB1dERpcn0vcGFuZGFzL3Rlc3RzYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSAqcHljIGZpbGVzIGFuZCBfX3B5Y2FjaGVfXyBkaXJlY3Rvcmllc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZmluZCAke291dHB1dERpcn0gLXR5cGUgZiAtbmFtZSAnKi5weWMnIC1kZWxldGVgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxldGUgdGhlIF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzIGNvbnRlbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmaW5kICR7b3V0cHV0RGlyfSAtdHlwZSBkIC1uYW1lICdfX3B5Y2FjaGVfXycgLWV4ZWMgcm0gLXJmIHt9LyogXFxcXDtgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxldGUgdGhlIF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzIHRoZW1zZWx2ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC10eXBlIGQgLW5hbWUgJ19fcHljYWNoZV9fJyAtZGVsZXRlYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIFB5dGhvblV2RnVuY3Rpb24ub3JjYWJ1c0FwaVRvb2xzTGF5ZXIuc2V0KHNjb3BlLCBsYXllcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkTWFydFRvb2xzTGF5ZXIoc2NvcGU6IENvbnN0cnVjdCkge1xuICAgICAgICAvLyBPbmx5IGJ1aWxkIHRoZSBsYXllciBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIGlmICghUHl0aG9uVXZGdW5jdGlvbi5tYXJ0TGF5ZXIuaGFzKHNjb3BlKSkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBuZXcgUHl0aG9uTGF5ZXJWZXJzaW9uKHNjb3BlLCAnbWFydFRvb2xzTGF5ZXInLCB7XG4gICAgICAgICAgICAgICAgZW50cnk6IHBhdGguam9pbihfX2Rpcm5hbWUsICdsYXllcnMvbWFydF90b29scycpLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVSdW50aW1lczogW2xhbWJkYS5SdW50aW1lLlBZVEhPTl8zXzEyXSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlQXJjaGl0ZWN0dXJlczogW2xhbWJkYS5BcmNoaXRlY3R1cmUuQVJNXzY0XSxcbiAgICAgICAgICAgICAgICBsaWNlbnNlOiAnR1BMMycsXG4gICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICdtYXJ0VG9vbHNMYXllcicsXG4gICAgICAgICAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IGdldFB5dGhvblV2RG9ja2VySW1hZ2UoKSxcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEhvb2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcGlwIGluc3RhbGwgJHtpbnB1dERpcn0gLS10YXJnZXQgJHtvdXRwdXREaXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSB0ZXN0cyBkaXJlY3RvcnkgZnJvbSBwYW5kYXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHJtIC1yZiAke291dHB1dERpcn0vcGFuZGFzL3Rlc3RzYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSAqcHljIGZpbGVzIGFuZCBfX3B5Y2FjaGVfXyBkaXJlY3Rvcmllc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZmluZCAke291dHB1dERpcn0gLXR5cGUgZiAtbmFtZSAnKi5weWMnIC1kZWxldGVgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxldGUgdGhlIF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzIGNvbnRlbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmaW5kICR7b3V0cHV0RGlyfSAtdHlwZSBkIC1uYW1lICdfX3B5Y2FjaGVfXycgLWV4ZWMgcm0gLXJmIHt9LyogXFxcXDtgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxldGUgdGhlIF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzIHRoZW1zZWx2ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC10eXBlIGQgLW5hbWUgJ19fcHljYWNoZV9fJyAtZGVsZXRlYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBQeXRob25VdkZ1bmN0aW9uLm1hcnRMYXllci5zZXQoc2NvcGUsIGxheWVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRJY2F2MkxheWVyKHNjb3BlOiBDb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gT25seSBidWlsZCB0aGUgbGF5ZXIgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICBpZiAoIVB5dGhvblV2RnVuY3Rpb24uaWNhdjJMYXllci5oYXMoc2NvcGUpKSB7XG4gICAgICAgICAgICBjb25zdCBsYXllciA9IG5ldyBQeXRob25MYXllclZlcnNpb24oc2NvcGUsICdpY2F2MlRvb2xzTGF5ZXInLCB7XG4gICAgICAgICAgICAgICAgZW50cnk6IHBhdGguam9pbihfX2Rpcm5hbWUsICdsYXllcnMvaWNhdjJfdG9vbHMnKSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlUnVudGltZXM6IFtsYW1iZGEuUnVudGltZS5QWVRIT05fM18xMl0sXG4gICAgICAgICAgICAgICAgY29tcGF0aWJsZUFyY2hpdGVjdHVyZXM6IFtsYW1iZGEuQXJjaGl0ZWN0dXJlLkFSTV82NF0sXG4gICAgICAgICAgICAgICAgbGljZW5zZTogJ0dQTDMnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnaWNhdjJUb29sc0xheWVyJyxcbiAgICAgICAgICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgICAgICAgICAgICBpbWFnZTogZ2V0UHl0aG9uVXZEb2NrZXJJbWFnZSgpLFxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kSG9va3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZUJ1bmRsaW5nKGlucHV0RGlyOiBzdHJpbmcsIG91dHB1dERpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhZnRlckJ1bmRsaW5nKGlucHV0RGlyOiBzdHJpbmcsIG91dHB1dERpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBwaXAgaW5zdGFsbCAke2lucHV0RGlyfSAtLXRhcmdldCAke291dHB1dERpcn1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxldGUgdGhlIHRlc3RzIGRpcmVjdG9yeSBmcm9tIHBhbmRhc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcm0gLXJmICR7b3V0cHV0RGlyfS9wYW5kYXMvdGVzdHNgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxldGUgdGhlICpweWMgZmlsZXMgYW5kIF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmaW5kICR7b3V0cHV0RGlyfSAtdHlwZSBmIC1uYW1lICcqLnB5YycgLWRlbGV0ZWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgX19weWNhY2hlX18gZGlyZWN0b3JpZXMgY29udGVudHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC10eXBlIGQgLW5hbWUgJ19fcHljYWNoZV9fJyAtZXhlYyBybSAtcmYge30vKiBcXFxcO2AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgX19weWNhY2hlX18gZGlyZWN0b3JpZXMgdGhlbXNlbHZlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZmluZCAke291dHB1dERpcn0gLXR5cGUgZCAtbmFtZSAnX19weWNhY2hlX18nIC1kZWxldGVgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFB5dGhvblV2RnVuY3Rpb24uaWNhdjJMYXllci5zZXQoc2NvcGUsIGxheWVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRGYXN0QXBpTGF5ZXIoc2NvcGU6IENvbnN0cnVjdCkge1xuICAgICAgICAvLyBPbmx5IGJ1aWxkIHRoZSBsYXllciBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgICAgIGlmICghUHl0aG9uVXZGdW5jdGlvbi5mYXN0QXBpTGF5ZXIuaGFzKHNjb3BlKSkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBuZXcgUHl0aG9uTGF5ZXJWZXJzaW9uKHNjb3BlLCAnZmFzdEFwaUxheWVyJywge1xuICAgICAgICAgICAgICAgIGVudHJ5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnbGF5ZXJzL2Zhc3RhcGlfdG9vbHMnKSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlUnVudGltZXM6IFtsYW1iZGEuUnVudGltZS5QWVRIT05fM18xMl0sXG4gICAgICAgICAgICAgICAgY29tcGF0aWJsZUFyY2hpdGVjdHVyZXM6IFtsYW1iZGEuQXJjaGl0ZWN0dXJlLkFSTV82NF0sXG4gICAgICAgICAgICAgICAgbGljZW5zZTogJ0dQTDMnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnZmFzdEFwaUxheWVyJyxcbiAgICAgICAgICAgICAgICBidW5kbGluZzoge1xuICAgICAgICAgICAgICAgICAgICBpbWFnZTogZ2V0UHl0aG9uVXZEb2NrZXJJbWFnZSgpLFxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kSG9va3M6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAgICAgICAgICAgICAgICAgICAgIGJlZm9yZUJ1bmRsaW5nKGlucHV0RGlyOiBzdHJpbmcsIG91dHB1dERpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhZnRlckJ1bmRsaW5nKGlucHV0RGlyOiBzdHJpbmcsIG91dHB1dERpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBwaXAgaW5zdGFsbCAke2lucHV0RGlyfSAtLXRhcmdldCAke291dHB1dERpcn1gLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxldGUgdGhlIHRlc3RzIGRpcmVjdG9yeSBmcm9tIHBhbmRhc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcm0gLXJmICR7b3V0cHV0RGlyfS9wYW5kYXMvdGVzdHNgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxldGUgdGhlICpweWMgZmlsZXMgYW5kIF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmaW5kICR7b3V0cHV0RGlyfSAtdHlwZSBmIC1uYW1lICcqLnB5YycgLWRlbGV0ZWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgX19weWNhY2hlX18gZGlyZWN0b3JpZXMgY29udGVudHNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC10eXBlIGQgLW5hbWUgJ19fcHljYWNoZV9fJyAtZXhlYyBybSAtcmYge30vKiBcXFxcO2AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgX19weWNhY2hlX18gZGlyZWN0b3JpZXMgdGhlbXNlbHZlc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZmluZCAke291dHB1dERpcn0gLXR5cGUgZCAtbmFtZSAnX19weWNhY2hlX18nIC1kZWxldGVgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF07XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIFB5dGhvblV2RnVuY3Rpb24uZmFzdEFwaUxheWVyLnNldChzY29wZSwgbGF5ZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRPcmNhYnVzUmVzb3VyY2VzKFxuICAgICAgICBwcm9wczogT3JjYWJ1c1Jlc291cmNlc1Byb3BzXG4gICAgKSB7XG4gICAgICAgIC8vIFNldCBzZWNyZXQgb2JqZWN0XG4gICAgICAgIGNvbnN0IG9yY2FidXNUb2tlblNlY3JldElkID0gc2VjcmV0c01hbmFnZXIuU2VjcmV0LmZyb21TZWNyZXROYW1lVjIoXG4gICAgICAgICAgICB0aGlzLCAnb3JjYWJ1c1Rva2VuU2VjcmV0SWQnLFxuICAgICAgICAgICAgcHJvcHMub3JjYWJ1c1Rva2VuU2VjcmV0SWQgPz8gREVGQVVMVF9PUkNBQlVTX1RPS0VOX1NFQ1JFVF9JRFxuICAgICAgICApO1xuICAgICAgICBjb25zdCBob3N0bmFtZVNzbVBhcmFtZXRlck5hbWUgPSBzc20uU3RyaW5nUGFyYW1ldGVyLmZyb21TdHJpbmdQYXJhbWV0ZXJOYW1lKFxuICAgICAgICAgICAgdGhpcywgJ2hvc3RuYW1lU3NtUGFyYW1ldGVyTmFtZScsXG4gICAgICAgICAgICBwcm9wcy5ob3N0bmFtZVNzbVBhcmFtZXRlck5hbWUgPz8gREVGQVVMVF9IT1NUTkFNRV9TU01fUEFSQU1FVEVSLFxuICAgICAgICApXG5cbiAgICAgICAgLy8gQWRkIHBlcm1pc3Npb25zIGZvciB0aGUgc2VjcmV0IGFuZCBTU00gcGFyYW1ldGVyXG4gICAgICAgIC8vIFRvIHRoZSBjdXJyZW50IHZlcnNpb25cbiAgICAgICAgb3JjYWJ1c1Rva2VuU2VjcmV0SWQuZ3JhbnRSZWFkKHRoaXMuY3VycmVudFZlcnNpb24pO1xuICAgICAgICBob3N0bmFtZVNzbVBhcmFtZXRlck5hbWUuZ3JhbnRSZWFkKHRoaXMuY3VycmVudFZlcnNpb24pXG5cbiAgICAgICAgLy8gQWRkIGVudmlyb25tZW50IHZhcmlhYmxlc1xuICAgICAgICB0aGlzLmFkZEVudmlyb25tZW50KFxuICAgICAgICAgICAgJ09SQ0FCVVNfVE9LRU5fU0VDUkVUX0lEJywgb3JjYWJ1c1Rva2VuU2VjcmV0SWQuc2VjcmV0TmFtZSxcbiAgICAgICAgKVxuICAgICAgICB0aGlzLmFkZEVudmlyb25tZW50KFxuICAgICAgICAgICAgJ0hPU1ROQU1FX1NTTV9QQVJBTUVURVJfTkFNRScsIGhvc3RuYW1lU3NtUGFyYW1ldGVyTmFtZS5wYXJhbWV0ZXJOYW1lLFxuICAgICAgICApXG4gICAgfVxuXG5cbiAgICBwcml2YXRlIHNldEF0aGVuYVJlc291cmNlcyhcbiAgICAgICAgcHJvcHM6IE1hcnRFbnZpcm9ubWVudFZhcmlhYmxlc1xuICAgICkge1xuICAgICAgICAvLyBSZXNvbHZlIHRoZSBzdGFnZSBuYW1lIGJ5IHBlcmZvcm1pbmcgYSByZXZlcnNlIGxvb2t1cCB1c2luZyBjZGsuQXdzLkFDQ09VTlRfSUQgb24gQUNDT1VOVF9JRF9BTElBU1xuICAgICAgICBjb25zdCBzdGFnZU5hbWUgPSByZXNvbHZlU3RhZ2VOYW1lKHRoaXMpXG5cbiAgICAgICAgY29uc3QgYXRoZW5hUzNCdWNrZXQgPSBzMy5CdWNrZXQuZnJvbUJ1Y2tldE5hbWUoXG4gICAgICAgICAgICB0aGlzLCAnYXRoZW5hUzNCdWNrZXQnLFxuICAgICAgICAgICAgTUFSVF9TM19CVUNLRVRbc3RhZ2VOYW1lXVxuICAgICAgICApXG5cbiAgICAgICAgY29uc3QgYXRoZW5hRnVuY3Rpb25OYW1lID0gbGFtYmRhLkZ1bmN0aW9uLmZyb21GdW5jdGlvbk5hbWUoXG4gICAgICAgICAgICB0aGlzLCAnbGFtYmRhRnVuY3Rpb25OYW1lJywgTUFSVF9MQU1CREFfRlVOQ1RJT05fTkFNRVxuICAgICAgICApXG5cbiAgICAgICAgLy8gQWRkIGVudiB2YXJzXG4gICAgICAgIC8vIEl0ZXJhdGUgb3ZlciBrdiBwYWlycyBvZiBNQVJUX0VOVl9WQVJTXG4gICAgICAgIGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKE1BUlRfRU5WX1ZBUlMpKSB7XG4gICAgICAgICAgICAvLyBBZnRlclxuICAgICAgICAgICAgaWYgKHByb3BzW2tleSBhcyBrZXlvZiBNYXJ0RW52aXJvbm1lbnRWYXJpYWJsZXNdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZEVudmlyb25tZW50KGtleSwgcHJvcHNba2V5IGFzIGtleW9mIE1hcnRFbnZpcm9ubWVudFZhcmlhYmxlc10hKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChrZXksIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFBlcm1pc3Npb25zXG4gICAgICAgIHRoaXMuY3VycmVudFZlcnNpb24uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgICAgICAgLy8gRnJvbSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXRoZW5hL2xhdGVzdC91Zy9leGFtcGxlLXBvbGljaWVzLXdvcmtncm91cC5odG1sXG4gICAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICAvLyBXb3JrZ3JvdXAgbGlzdHNcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpMaXN0RW5naW5lVmVyc2lvbnMnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3RXb3JrR3JvdXBzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpMaXN0RGF0YUNhdGFsb2dzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpMaXN0RGF0YWJhc2VzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpHZXREYXRhYmFzZScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6TGlzdFRhYmxlTWV0YWRhdGEnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldFRhYmxlTWV0YWRhdGEnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldERhdGFDYXRhbG9nJyxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHJlc291cmNlczogW2Bhcm46YXdzOmF0aGVuYToke1JFR0lPTn06JHtBQ0NPVU5UX0lEX0FMSUFTW3N0YWdlTmFtZV19OipgXSxcbiAgICAgICAgICAgIH0pXG4gICAgICAgICk7XG5cbiAgICAgICAgdGhpcy5jdXJyZW50VmVyc2lvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgICAgICAvLyBGcm9tIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9hdGhlbmEvbGF0ZXN0L3VnL2V4YW1wbGUtcG9saWNpZXMtd29ya2dyb3VwLmh0bWxcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgICAgIC8vIFdvcmtncm91cCBleGVjdXRpb25zXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6QmF0Y2hHZXRRdWVyeUV4ZWN1dGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0UXVlcnlFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3RRdWVyeUV4ZWN1dGlvbnMnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOlN0YXJ0UXVlcnlFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOlN0b3BRdWVyeUV4ZWN1dGlvbicsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0UXVlcnlSZXN1bHRzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpHZXRRdWVyeVJlc3VsdHNTdHJlYW0nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkNyZWF0ZU5hbWVkUXVlcnknLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldE5hbWVkUXVlcnknLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkJhdGNoR2V0TmFtZWRRdWVyeScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6TGlzdE5hbWVkUXVlcmllcycsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6RGVsZXRlTmFtZWRRdWVyeScsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6Q3JlYXRlUHJlcGFyZWRTdGF0ZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldFByZXBhcmVkU3RhdGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpMaXN0UHJlcGFyZWRTdGF0ZW1lbnRzJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpVcGRhdGVQcmVwYXJlZFN0YXRlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6RGVsZXRlUHJlcGFyZWRTdGF0ZW1lbnQnLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgICAgIGBhcm46YXdzOmF0aGVuYToke1JFR0lPTn06JHtBQ0NPVU5UX0lEX0FMSUFTW3N0YWdlTmFtZV19Ondvcmtncm91cC8ke01BUlRfRU5WX1ZBUlMuYXRoZW5hV29ya2dyb3VwTmFtZX1gLFxuICAgICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIC8vIEFkZCByZWFkIGFjY2VzcyB0byB0aGUgUzMgYnVja2V0XG4gICAgICAgIGF0aGVuYVMzQnVja2V0LmdyYW50UmVhZFdyaXRlKFxuICAgICAgICAgICAgdGhpcy5jdXJyZW50VmVyc2lvbixcbiAgICAgICAgICAgIGAke01BUlRfUzNfUFJFRklYfSpgXG4gICAgICAgIClcblxuICAgICAgICAvLyBBZGQgaW52b2tlIGFjY2VzcyB0byB0aGUgbGFtYmRhIGZ1bmN0aW9uXG4gICAgICAgIGF0aGVuYUZ1bmN0aW9uTmFtZS5ncmFudEludm9rZShcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFZlcnNpb25cbiAgICAgICAgKVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0SWNhdjJSZXNvdXJjZXMoXG4gICAgICAgIHByb3BzOiBJY2F2MlJlc291cmNlc1Byb3BzXG4gICAgKSB7XG4gICAgICAgIC8vIFJlc29sdmUgdGhlIHN0YWdlIG5hbWUgYnkgcGVyZm9ybWluZyBhIHJldmVyc2UgbG9va3VwIHVzaW5nIGNkay5Bd3MuQUNDT1VOVF9JRCBvbiBBQ0NPVU5UX0lEX0FMSUFTXG4gICAgICAgIGNvbnN0IHN0YWdlTmFtZSA9IHJlc29sdmVTdGFnZU5hbWUodGhpcylcblxuICAgICAgICAvLyBTZXQgc2VjcmV0IG9iamVjdFxuICAgICAgICBjb25zdCBpY2F2MkFjY2Vzc1Rva2VuU2VjcmV0SWRPYmplY3QgPSBzZWNyZXRzTWFuYWdlci5TZWNyZXQuZnJvbVNlY3JldE5hbWVWMihcbiAgICAgICAgICAgIHRoaXMsICdJQ0FWMl9BQ0NFU1NfVE9LRU5fU0VDUkVUX0lEJyxcbiAgICAgICAgICAgIHByb3BzLmljYXYyQWNjZXNzVG9rZW5TZWNyZXRJZCA/PyBJQ0FWMl9BQ0NFU1NfVE9LRU5fU0VDUkVUX0lEW3N0YWdlTmFtZV1cbiAgICAgICAgKTtcblxuICAgICAgICAvLyBBZGQgcGVybWlzc2lvbnMgZm9yIHRoZSBzZWNyZXQgYW5kIFNTTSBwYXJhbWV0ZXJcbiAgICAgICAgLy8gVG8gdGhlIGN1cnJlbnQgdmVyc2lvblxuICAgICAgICBpY2F2MkFjY2Vzc1Rva2VuU2VjcmV0SWRPYmplY3QuZ3JhbnRSZWFkKHRoaXMuY3VycmVudFZlcnNpb24pO1xuXG4gICAgICAgIC8vIEFkZCBjb25maWd1cmF0aW9uIHBhdGhzXG4gICAgICAgIGNvbnN0IGljYXYyU3RvcmFnZUNvbmZpZ3VyYXRpb25Tc21QYXJhbWV0ZXJQYXRoUHJlZml4ID0gKFxuICAgICAgICAgIHByb3BzLmljYXYyU3RvcmFnZUNvbmZpZ3VyYXRpb25Tc21QYXJhbWV0ZXJQYXRoUHJlZml4ID8/IElDQVYyX1NUT1JBR0VfQ09ORklHVVJBVElPTl9TU01fUEFSQU1FVEVSX1BBVEhfUFJFRklYXG4gICAgICAgIClcbiAgICAgICAgY29uc3QgaWNhdjJQcm9qZWN0VG9TdG9yYWdlQ29uZmlndXJhdGlvbnNTc21QYXJhbWV0ZXJQYXRoUHJlZml4ID0gKFxuICAgICAgICAgIHByb3BzLmljYXYyUHJvamVjdFRvU3RvcmFnZUNvbmZpZ3VyYXRpb25zU3NtUGFyYW1ldGVyUGF0aFByZWZpeCA/PyBJQ0FWMl9QUk9KRUNUX1RPX1NUT1JBR0VfQ09ORklHVVJBVElPTlNfU1NNX1BBUkFNRVRFUl9QQVRIX1BSRUZJWFxuICAgICAgICApXG4gICAgICAgIGNvbnN0IGljYXYyU3RvcmFnZUNyZWRlbnRpYWxzU3NtUGFyYW1ldGVyUGF0aFByZWZpeCA9IChcbiAgICAgICAgICBwcm9wcy5pY2F2MlN0b3JhZ2VDcmVkZW50aWFsc1NzbVBhcmFtZXRlclBhdGhQcmVmaXggPz8gSUNBVjJfU1RPUkFHRV9DUkVERU5USUFMU19TU01fUEFSQU1FVEVSX1BBVEhfUFJFRklYXG4gICAgICAgIClcblxuICAgICAgICAvLyBQcm92aWRlIGFjY2VzcyB0byB0aGUgc3NtIHBhcmFtZXRlciBwYXRoc1xuICAgICAgICB0aGlzLmN1cnJlbnRWZXJzaW9uLmFkZFRvUm9sZVBvbGljeShcbiAgICAgICAgICAgIG5ldyBpYW0uUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgICBhY3Rpb25zOiBbJ3NzbTpHZXRQYXJhbWV0ZXJzQnlQYXRoJ10sXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgICAgIGBhcm46YXdzOnNzbToke1JFR0lPTn06JHtBQ0NPVU5UX0lEX0FMSUFTW3N0YWdlTmFtZV19OiR7cGF0aC5qb2luKFwicGFyYW1ldGVyXCIsIGljYXYyU3RvcmFnZUNvbmZpZ3VyYXRpb25Tc21QYXJhbWV0ZXJQYXRoUHJlZml4KX0vKmAsXG4gICAgICAgICAgICAgICAgICAgIGBhcm46YXdzOnNzbToke1JFR0lPTn06JHtBQ0NPVU5UX0lEX0FMSUFTW3N0YWdlTmFtZV19OiR7cGF0aC5qb2luKFwicGFyYW1ldGVyXCIsIGljYXYyUHJvamVjdFRvU3RvcmFnZUNvbmZpZ3VyYXRpb25zU3NtUGFyYW1ldGVyUGF0aFByZWZpeCl9LypgLFxuICAgICAgICAgICAgICAgICAgICBgYXJuOmF3czpzc206JHtSRUdJT059OiR7QUNDT1VOVF9JRF9BTElBU1tzdGFnZU5hbWVdfToke3BhdGguam9pbihcInBhcmFtZXRlclwiLCBpY2F2MlN0b3JhZ2VDcmVkZW50aWFsc1NzbVBhcmFtZXRlclBhdGhQcmVmaXgpfS8qYCxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBBZGQgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAgICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoXG4gICAgICAgICAgICAnSUNBVjJfQUNDRVNTX1RPS0VOX1NFQ1JFVF9JRCcsIGljYXYyQWNjZXNzVG9rZW5TZWNyZXRJZE9iamVjdC5zZWNyZXROYW1lLFxuICAgICAgICApXG4gICAgICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoXG4gICAgICAgICAgICAnSUNBVjJfQkFTRV9VUkwnLCBJQ0FWMl9CQVNFX1VSTCxcbiAgICAgICAgKVxuXG4gICAgfVxuXG59XG5cblxuXG5cbiJdfQ==
378
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFpQ0Esd0RBRUM7O0FBbkNELDhFQUF5RztBQUV6RywrREFBaUQ7QUFDakQsK0VBQWlFO0FBQ2pFLHlEQUEyQztBQUMzQyx5REFBMkM7QUFDM0MsdURBQXlDO0FBQ3pDLDZDQUF3QztBQUV4QyxnREFBd0I7QUFFeEIsdURBSWdDO0FBQ2hDLHFDQU9rQjtBQUNsQixvQ0FBMEM7QUFDMUMsd0RBQW1FO0FBQ25FLGtEQUlnQztBQUdoQyxTQUFnQixzQkFBc0I7SUFDbEMsT0FBTyx5QkFBVyxDQUFDLFNBQVMsQ0FBQyxjQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxjQUFjLENBQUMsQ0FBQyxDQUFDO0FBQ3ZFLENBQUM7QUF3RkQsTUFBYSxnQkFBaUIsU0FBUSx3Q0FBYzs7SUFDaEQsc0RBQXNEO0lBQ3RELHFFQUFxRTtJQUNyRSxtQ0FBbUM7SUFDM0IsTUFBTSxDQUFDLG9CQUFvQixHQUF5QyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBQzlFLE1BQU0sQ0FBQyxTQUFTLEdBQXlDLElBQUksR0FBRyxFQUFFLENBQUM7SUFDbkUsTUFBTSxDQUFDLFVBQVUsR0FBeUMsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNwRSxNQUFNLENBQUMsWUFBWSxHQUF5QyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRTlFLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBNEI7UUFDbEUsTUFBTSxPQUFPLEdBQUc7WUFDWixHQUFHLEtBQUs7WUFDUixRQUFRLEVBQUU7Z0JBQ04sR0FBRyxLQUFLLENBQUMsUUFBUTtnQkFDakIsU0FBUyxFQUFFO29CQUNQLEdBQUcsS0FBSyxDQUFDLFFBQVEsRUFBRSxTQUFTO29CQUM1QiwyREFBMkQ7b0JBQzNELGNBQWMsRUFDVixLQUFLLENBQUMsUUFBUSxF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Z0IsQ0FBQyxTQUFTLENBQUMsYUFBYSwrQ0FBK0MsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJO2dCQUN2SSxlQUFlLGlCQUFNLElBQUksMkJBQWdCLENBQUMsU0FBUyxDQUFDLGFBQWEseURBQXlELENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSTtnQkFDakosZUFBZSxpQkFBTSxJQUFJLDJCQUFnQixDQUFDLFNBQVMsQ0FBQyxhQUFhLDZDQUE2QyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUk7YUFDeEk7U0FDSixDQUFDLENBQ0wsQ0FBQztRQUVGLDRCQUE0QjtRQUM1QixJQUFJLENBQUMsY0FBYyxDQUNmLDhCQUE4QixFQUFFLDhCQUE4QixDQUFDLFVBQVUsQ0FDNUUsQ0FBQTtRQUNELElBQUksQ0FBQyxjQUFjLENBQ2YsZ0JBQWdCLEVBQUUsc0JBQWMsQ0FDbkMsQ0FBQTtJQUVMLENBQUM7O0FBMVlMLDRDQTRZQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7UHl0aG9uRnVuY3Rpb24sIFB5dGhvbkZ1bmN0aW9uUHJvcHMsIFB5dGhvbkxheWVyVmVyc2lvbn0gZnJvbSBcIkBhd3MtY2RrL2F3cy1sYW1iZGEtcHl0aG9uLWFscGhhXCI7XG5pbXBvcnQge0NvbnN0cnVjdH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCAqIGFzIGxhbWJkYSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWxhbWJkYVwiO1xuaW1wb3J0ICogYXMgc2VjcmV0c01hbmFnZXIgZnJvbSBcImF3cy1jZGstbGliL2F3cy1zZWNyZXRzbWFuYWdlclwiO1xuaW1wb3J0ICogYXMgc3NtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3Mtc3NtXCI7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcbmltcG9ydCAqIGFzIHMzIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtczNcIjtcbmltcG9ydCB7RG9ja2VySW1hZ2V9IGZyb20gJ2F3cy1jZGstbGliJztcblxuaW1wb3J0IHBhdGggZnJvbSBcInBhdGhcIjtcblxuaW1wb3J0IHtcbiAgICBQYXJhbXNBbmRTZWNyZXRzTGF5ZXJWZXJzaW9uLFxuICAgIFBhcmFtc0FuZFNlY3JldHNMb2dMZXZlbCxcbiAgICBQYXJhbXNBbmRTZWNyZXRzVmVyc2lvbnMsXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHtcbiAgICAvLyBPcmNhYnVzIGRlZmF1bHRzXG4gICAgREVGQVVMVF9IT1NUTkFNRV9TU01fUEFSQU1FVEVSLCBERUZBVUxUX09SQ0FCVVNfVE9LRU5fU0VDUkVUX0lELFxuICAgIC8vIE1hcnQgZGVmYXVsdHNcbiAgICBNQVJUX0VOVl9WQVJTLCBNQVJUX0xBTUJEQV9GVU5DVElPTl9OQU1FLFxuICAgIE1BUlRfUzNfQlVDS0VULFxuICAgIE1BUlRfUzNfUFJFRklYLFxufSBmcm9tIFwiLi9jb25maWdcIjtcbmltcG9ydCB7cmVzb2x2ZVN0YWdlTmFtZX0gZnJvbSBcIi4uL3V0aWxzXCI7XG5pbXBvcnQge0FDQ09VTlRfSURfQUxJQVMsIFJFR0lPTn0gZnJvbSBcIi4uL3NoYXJlZC1jb25maWcvYWNjb3VudHNcIjtcbmltcG9ydCB7XG4gIElDQVYyX0FDQ0VTU19UT0tFTl9TRUNSRVRfSUQsXG4gIElDQVYyX0JBU0VfVVJMLCBJQ0FWMl9QUk9KRUNUX1RPX1NUT1JBR0VfQ09ORklHVVJBVElPTlNfU1NNX1BBUkFNRVRFUl9QQVRIX1BSRUZJWCxcbiAgSUNBVjJfU1RPUkFHRV9DT05GSUdVUkFUSU9OX1NTTV9QQVJBTUVURVJfUEFUSF9QUkVGSVgsIElDQVYyX1NUT1JBR0VfQ1JFREVOVElBTFNfU1NNX1BBUkFNRVRFUl9QQVRIX1BSRUZJWFxufSBmcm9tIFwiLi4vc2hhcmVkLWNvbmZpZy9pY2F2MlwiO1xuXG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQeXRob25VdkRvY2tlckltYWdlKCk6IERvY2tlckltYWdlIHtcbiAgICByZXR1cm4gRG9ja2VySW1hZ2UuZnJvbUJ1aWxkKHBhdGguam9pbihfX2Rpcm5hbWUsICdidWlsZF9weXRob24nKSk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgT3JjYWJ1c1Jlc291cmNlc1Byb3BzIHtcbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBvcmNhYnVzVG9rZW5TZWNyZXRJZCwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0byBAREVGQVVMVF9PUkNBQlVTX1RPS0VOX1NFQ1JFVF9JRFxuICAgICAqL1xuICAgIHJlYWRvbmx5IG9yY2FidXNUb2tlblNlY3JldElkPzogc3RyaW5nXG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBob3N0bmFtZVNzbVBhcmFtZXRlck5hbWUsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG8gQERFRkFVTFRfSE9TVE5BTUVfU1NNX1BBUkFNRVRFUlxuICAgICAqL1xuICAgIHJlYWRvbmx5IGhvc3RuYW1lU3NtUGFyYW1ldGVyTmFtZT86IHN0cmluZ1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE1hcnRFbnZpcm9ubWVudFZhcmlhYmxlcyB7XG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgYXRoZW5hV29ya2dyb3VwTmFtZSwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0byBATUFSVF9FTlZfVkFSUy5BVEhFTkFfV09SS0dST1VQX05BTUVcbiAgICAgKi9cbiAgICByZWFkb25seSBhdGhlbmFXb3JrZ3JvdXBOYW1lPzogc3RyaW5nXG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBhdGhlbmFEYXRhc291cmNlTmFtZSwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0byBATUFSVF9FTlZfVkFSUy5hdGhlbmFEYXRhc291cmNlTmFtZVxuICAgICAqL1xuICAgIHJlYWRvbmx5IGF0aGVuYURhdGFzb3VyY2VOYW1lPzogc3RyaW5nXG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBhdGhlbmFEYXRhYmFzZU5hbWUsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG8gQE1BUlRfRU5WX1ZBUlMuQVRIRU5BX0RBVEFCQVNFX05BTUVcbiAgICAgKi9cbiAgICByZWFkb25seSBhdGhlbmFEYXRhYmFzZU5hbWU/OiBzdHJpbmdcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJY2F2MlJlc291cmNlc1Byb3BzIHtcbiAgICAvKipcbiAgICAgKiBUaGUgaWQgb2YgdGhlIHNlY3JldCB0aGF0IGNvbnRhaW5zIHRoZSBpY2F2MiBhY2Nlc3MgdG9rZW5cbiAgICAgKiBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvIEBJQ0FWMl9BQ0NFU1NfVE9LRU5fU0VDUkVUX0lEXG4gICAgICovXG4gICAgcmVhZG9ubHkgaWNhdjJBY2Nlc3NUb2tlblNlY3JldElkPzogc3RyaW5nXG4gICAgcmVhZG9ubHkgaWNhdjJTdG9yYWdlQ29uZmlndXJhdGlvblNzbVBhcmFtZXRlclBhdGhQcmVmaXg/OiBzdHJpbmdcbiAgICByZWFkb25seSBpY2F2MlByb2plY3RUb1N0b3JhZ2VDb25maWd1cmF0aW9uc1NzbVBhcmFtZXRlclBhdGhQcmVmaXg/OiBzdHJpbmdcbiAgICByZWFkb25seSBpY2F2MlN0b3JhZ2VDcmVkZW50aWFsc1NzbVBhcmFtZXRlclBhdGhQcmVmaXg/OiBzdHJpbmdcbn1cblxuXG5leHBvcnQgaW50ZXJmYWNlIFB5dGhvblV2RnVuY3Rpb25Qcm9wcyBleHRlbmRzIFB5dGhvbkZ1bmN0aW9uUHJvcHMge1xuICAgIC8qKlxuICAgICAqIFdoZXRoZXIgb3Igbm90IHRvIGluY2x1ZGUgdGhlIG9yY2FidXMgYXBpIHRvb2xzIGxheWVyIGluIHRoZSBsYW1iZGEgZnVuY3Rpb24gYnVpbGRcbiAgICAgKi9cbiAgICByZWFkb25seSBpbmNsdWRlT3JjYWJ1c0FwaVRvb2xzTGF5ZXI/OiBib29sZWFuXG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIHRoZSBtYXJ0IGxheWVyIGluIHRoZSBsYW1iZGEgZnVuY3Rpb24gYnVpbGRcbiAgICAgKiBOb3RlIHRoYXQgdGhlIG1hcnQgbGF5ZXIgaXMgYSBsaXR0bGUgaGVhdmllciB0aGFuIHRoZSBvcmNhYnVzIGFwaSB0b29scyBsYXllclxuICAgICAqIFNpbmNlIHdlIHJlcXVpcmUgcGFuZGFzIHRvIGJlIGluc3RhbGxlZFxuICAgICAqL1xuICAgIHJlYWRvbmx5IGluY2x1ZGVNYXJ0TGF5ZXI/OiBib29sZWFuXG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIHRoZSBpY2F2MiBsYXllciBpbiB0aGUgbGFtYmRhIGZ1bmN0aW9uIGJ1aWxkXG4gICAgICovXG4gICAgcmVhZG9ubHkgaW5jbHVkZUljYXYyTGF5ZXI/OiBib29sZWFuXG5cbiAgICAvKipcbiAgICAgKiBXaGV0aGVyIG9yIG5vdCB0byBpbmNsdWRlIHRoZSBmYXN0YXBpIGxheWVyIGluIHRoZSBsYW1iZGEgZnVuY3Rpb24gYnVpbGRcbiAgICAgKi9cbiAgICByZWFkb25seSBpbmNsdWRlRmFzdEFwaUxheWVyPzogYm9vbGVhblxuXG4gICAgLyoqXG4gICAgICogUHJvdmlkZSB0aGUgb3JjYWJ1c1Rva2VuUmVzb3VyY2VzLCBvcHRpb25hbCwgb3RoZXJ3aXNlIGl0IHdpbGwgZGVmYXVsdCB0b1xuICAgICAqIEBERUZBVUxUX09SQ0FCVVNfVE9LRU5fU0VDUkVUX0lEIGFuZCBAREVGQVVMVF9IT1NUTkFNRV9TU01fUEFSQU1FVEVSXG4gICAgICogZm9yIHRoZSBzZWNyZXQgYW5kIFNTTSBwYXJhbWV0ZXIgcmVzcGVjdGl2ZWx5XG4gICAgICovXG4gICAgcmVhZG9ubHkgb3JjYWJ1c1Rva2VuUmVzb3VyY2VzPzogT3JjYWJ1c1Jlc291cmNlc1Byb3BzXG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBtYXJ0RW52aXJvbm1lbnRWYXJpYWJsZXMsIG9wdGlvbmFsLCBvdGhlcndpc2UgaXQgd2lsbCBkZWZhdWx0IHRvXG4gICAgICogQE1BUlRfRU5WX1ZBUlMuQVRIRU5BX1dPUktHUk9VUF9OQU1FLCBATUFSVF9FTlZfVkFSUy5BVEhFTkFfREFUQVNPVVJDRV9OQU1FXG4gICAgICogYW5kIEBNQVJUX0VOVl9WQVJTLkFUSEVOQV9EQVRBQkFTRV9OQU1FIGZvciB0aGUgYXRoZW5hIHdvcmtncm91cCwgZGF0YXNvdXJjZSBhbmQgZGF0YWJhc2UgcmVzcGVjdGl2ZWx5XG4gICAgICovXG4gICAgcmVhZG9ubHkgbWFydEVudmlyb25tZW50VmFyaWFibGVzPzogTWFydEVudmlyb25tZW50VmFyaWFibGVzXG5cbiAgICAvKipcbiAgICAgKiBQcm92aWRlIHRoZSBpY2F2MlJlc291cmNlcywgb3B0aW9uYWwsIG90aGVyd2lzZSBpdCB3aWxsIGRlZmF1bHQgdG9cbiAgICAgKiBAREVGQVVMVF9JQ0FWMl9BQ0NFU1NfVE9LRU5fU0VDUkVUX0lEIGZvciB0aGUgc2VjcmV0XG4gICAgICovXG4gICAgcmVhZG9ubHkgaWNhdjJSZXNvdXJjZXM/OiBJY2F2MlJlc291cmNlc1Byb3BzXG59XG5cblxuZXhwb3J0IGNsYXNzIFB5dGhvblV2RnVuY3Rpb24gZXh0ZW5kcyBQeXRob25GdW5jdGlvbiB7XG4gICAgLy8gQ2xhc3MgY29uc3RydWN0cywgdG8gYmUgdXNlZCBmb3IgY2FjaGluZyB0aGUgbGF5ZXJzXG4gICAgLy8gVGhpcyBtZWFucyB0aGF0IGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBsYW1iZGFzIHRocm91Z2hvdXQgdGhlIHN0YWNrXG4gICAgLy8gVGhleSB3aWxsIGFsbCB1c2UgdGhlIHNhbWUgbGF5ZXJcbiAgICBwcml2YXRlIHN0YXRpYyBvcmNhYnVzQXBpVG9vbHNMYXllcjogTWFwPENvbnN0cnVjdCwgbGFtYmRhLklMYXllclZlcnNpb24+ID0gbmV3IE1hcCgpO1xuICAgIHByaXZhdGUgc3RhdGljIG1hcnRMYXllcjogTWFwPENvbnN0cnVjdCwgbGFtYmRhLklMYXllclZlcnNpb24+ID0gbmV3IE1hcCgpO1xuICAgIHByaXZhdGUgc3RhdGljIGljYXYyTGF5ZXI6IE1hcDxDb25zdHJ1Y3QsIGxhbWJkYS5JTGF5ZXJWZXJzaW9uPiA9IG5ldyBNYXAoKTtcbiAgICBwcml2YXRlIHN0YXRpYyBmYXN0QXBpTGF5ZXI6IE1hcDxDb25zdHJ1Y3QsIGxhbWJkYS5JTGF5ZXJWZXJzaW9uPiA9IG5ldyBNYXAoKTtcblxuICAgIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBQeXRob25VdkZ1bmN0aW9uUHJvcHMpIHtcbiAgICAgICAgY29uc3QgdXZQcm9wcyA9IHtcbiAgICAgICAgICAgIC4uLnByb3BzLFxuICAgICAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAgICAgICAuLi5wcm9wcy5idW5kbGluZyxcbiAgICAgICAgICAgICAgICBidWlsZEFyZ3M6IHtcbiAgICAgICAgICAgICAgICAgICAgLi4ucHJvcHMuYnVuZGxpbmc/LmJ1aWxkQXJncyxcbiAgICAgICAgICAgICAgICAgICAgLy8gQWRkIFRBUkdFVFBMQVRGT1JNIHRvIGJ1aWxkIGFyZ3MgaWYgaXQncyBub3QgYWxyZWFkeSBzZXRcbiAgICAgICAgICAgICAgICAgICAgVEFSR0VUUExBVEZPUk06XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wcy5idW5kbGluZz8uYnVpbGRBcmdzPy5UQVJHRVRQTEFURk9STSA/PyBsYW1iZGEuQXJjaGl0ZWN0dXJlLkFSTV82NC5kb2NrZXJQbGF0Zm9ybSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIGltYWdlOiBnZXRQeXRob25VdkRvY2tlckltYWdlKCksXG4gICAgICAgICAgICAgICAgY29tbWFuZEhvb2tzOiB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgICAgICAgICAgICAgYmVmb3JlQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcHJvcHMuYnVuZGxpbmc/LmNvbW1hbmRIb29rcz8uYmVmb3JlQnVuZGxpbmcgYXMgdW5rbm93biBhcyBzdHJpbmdbXSA/PyBbXTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgLy8gQHRzLWlnbm9yZVxuICAgICAgICAgICAgICAgICAgICBhZnRlckJ1bmRsaW5nKGlucHV0RGlyOiBzdHJpbmcsIG91dHB1dERpcjogc3RyaW5nKTogc3RyaW5nW10ge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChwcm9wcy5idW5kbGluZz8uY29tbWFuZEhvb2tzPy5hZnRlckJ1bmRsaW5nIGFzIHVua25vd24gYXMgc3RyaW5nW10gPz8gW10pLmNvbmNhdChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgdGVzdHMgZGlyZWN0b3J5IGZyb20gcGFuZGFzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYHJtIC1yZiAke291dHB1dERpcn0vcGFuZGFzL3Rlc3RzYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxldGUgdGhlICpweWMgZmlsZXMgYW5kIF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC10eXBlIGYgLW5hbWUgJyoucHljJyAtZGVsZXRlYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxldGUgdGhlIF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzIGNvbnRlbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC10eXBlIGQgLW5hbWUgJ19fcHljYWNoZV9fJyAtZXhlYyBybSAtcmYge30vKiBcXFxcO2AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSBfX3B5Y2FjaGVfXyBkaXJlY3RvcmllcyB0aGVtc2VsdmVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC10eXBlIGQgLW5hbWUgJ19fcHljYWNoZV9fJyAtZGVsZXRlYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgXVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHBhcmFtc0FuZFNlY3JldHM6XG4gICAgICAgICAgICAgICAgcHJvcHMucGFyYW1zQW5kU2VjcmV0cyA/P1xuICAgICAgICAgICAgICAgIFBhcmFtc0FuZFNlY3JldHNMYXllclZlcnNpb24uZnJvbVZlcnNpb24oUGFyYW1zQW5kU2VjcmV0c1ZlcnNpb25zLlYxXzBfMTAzLCB7XG4gICAgICAgICAgICAgICAgICAgIGNhY2hlRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgY2FjaGVTaXplOiAzMDAsXG4gICAgICAgICAgICAgICAgICAgIGxvZ0xldmVsOiBQYXJhbXNBbmRTZWNyZXRzTG9nTGV2ZWwuREVCVUcsXG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgICAgIHN1cGVyKHNjb3BlLCBpZCwgdXZQcm9wcyk7XG5cbiAgICAgICAgaWYgKHByb3BzLmluY2x1ZGVPcmNhYnVzQXBpVG9vbHNMYXllcikge1xuICAgICAgICAgICAgLyogU2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgZm9yIHRoZSBPcmNhYnVzIHJlc291cmNlcyAqL1xuICAgICAgICAgICAgdGhpcy5zZXRPcmNhYnVzUmVzb3VyY2VzKHByb3BzLm9yY2FidXNUb2tlblJlc291cmNlcyA/PyB7fSlcblxuICAgICAgICAgICAgLyogQnVpbGQgdGhlIG9yY2FidXMgQXBpIHRvb2xzIGxheWVyICovXG4gICAgICAgICAgICB0aGlzLmJ1aWxkT3JjYWJ1c0FwaVRvb2xzTGF5ZXIoc2NvcGUpXG4gICAgICAgICAgICB0aGlzLmFkZExheWVycyg8UHl0aG9uTGF5ZXJWZXJzaW9uPlB5dGhvblV2RnVuY3Rpb24ub3JjYWJ1c0FwaVRvb2xzTGF5ZXIuZ2V0KHNjb3BlKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wcy5pbmNsdWRlTWFydExheWVyKSB7XG4gICAgICAgICAgICAvKiBTZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgdGhlIG1hcnQgcmVzb3VyY2VzICovXG4gICAgICAgICAgICB0aGlzLnNldEF0aGVuYVJlc291cmNlcyhwcm9wcy5tYXJ0RW52aXJvbm1lbnRWYXJpYWJsZXMgPz8ge30pXG5cbiAgICAgICAgICAgIC8qIEJ1aWxkIHRoZSBtYXJ0IGxheWVyICovXG4gICAgICAgICAgICB0aGlzLmJ1aWxkTWFydFRvb2xzTGF5ZXIoc2NvcGUpXG4gICAgICAgICAgICB0aGlzLmFkZExheWVycyg8UHl0aG9uTGF5ZXJWZXJzaW9uPlB5dGhvblV2RnVuY3Rpb24ubWFydExheWVyLmdldChzY29wZSkpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcHMuaW5jbHVkZUljYXYyTGF5ZXIpIHtcbiAgICAgICAgICAgIC8qIFNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIGZvciB0aGUgaWNhdjIgcmVzb3VyY2VzICovXG4gICAgICAgICAgICB0aGlzLnNldEljYXYyUmVzb3VyY2VzKHByb3BzLmljYXYyUmVzb3VyY2VzID8/IHt9KVxuXG4gICAgICAgICAgICAvKiBCdWlsZCB0aGUgaWNhdjIgbGF5ZXIgKi9cbiAgICAgICAgICAgIHRoaXMuYnVpbGRJY2F2MkxheWVyKHNjb3BlKVxuICAgICAgICAgICAgdGhpcy5hZGRMYXllcnMoPFB5dGhvbkxheWVyVmVyc2lvbj5QeXRob25VdkZ1bmN0aW9uLmljYXYyTGF5ZXIuZ2V0KHNjb3BlKSlcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChwcm9wcy5pbmNsdWRlRmFzdEFwaUxheWVyKSB7XG4gICAgICAgICAgICAvKiBCdWlsZCB0aGUgZmFzdGFwaSBsYXllciAqL1xuICAgICAgICAgICAgdGhpcy5idWlsZEZhc3RBcGlMYXllcihzY29wZSlcbiAgICAgICAgICAgIHRoaXMuYWRkTGF5ZXJzKDxQeXRob25MYXllclZlcnNpb24+UHl0aG9uVXZGdW5jdGlvbi5mYXN0QXBpTGF5ZXIuZ2V0KHNjb3BlKSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYnVpbGRPcmNhYnVzQXBpVG9vbHNMYXllcihzY29wZTogQ29uc3RydWN0KSB7XG4gICAgICAgIC8vIE9ubHkgYnVpbGQgb3JjYWJ1cyBhcGkgbGF5ZXIgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICBpZiAoIVB5dGhvblV2RnVuY3Rpb24ub3JjYWJ1c0FwaVRvb2xzTGF5ZXIuaGFzKHNjb3BlKSkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBuZXcgUHl0aG9uTGF5ZXJWZXJzaW9uKHNjb3BlLCAnb3JjYWJ1c0FwaVRvb2xzTGF5ZXInLCB7XG4gICAgICAgICAgICAgICAgZW50cnk6IHBhdGguam9pbihfX2Rpcm5hbWUsICdsYXllcnMvb3JjYWJ1c19hcGlfdG9vbHMnKSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlUnVudGltZXM6IFtsYW1iZGEuUnVudGltZS5QWVRIT05fM18xMl0sXG4gICAgICAgICAgICAgICAgY29tcGF0aWJsZUFyY2hpdGVjdHVyZXM6IFtsYW1iZGEuQXJjaGl0ZWN0dXJlLkFSTV82NF0sXG4gICAgICAgICAgICAgICAgbGljZW5zZTogJ0dQTDMnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnb3JjYWJ1c0FwaVRvb2xzTGF5ZXInLFxuICAgICAgICAgICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIGltYWdlOiBnZXRQeXRob25VdkRvY2tlckltYWdlKCksXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRIb29rczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHBpcCBpbnN0YWxsICR7aW5wdXREaXJ9IC0tdGFyZ2V0ICR7b3V0cHV0RGlyfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgdGVzdHMgZGlyZWN0b3J5IGZyb20gcGFuZGFzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBybSAtcmYgJHtvdXRwdXREaXJ9L3BhbmRhcy90ZXN0c2AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgKnB5YyBmaWxlcyBhbmQgX19weWNhY2hlX18gZGlyZWN0b3JpZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC10eXBlIGYgLW5hbWUgJyoucHljJyAtZGVsZXRlYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSBfX3B5Y2FjaGVfXyBkaXJlY3RvcmllcyBjb250ZW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZmluZCAke291dHB1dERpcn0gLXR5cGUgZCAtbmFtZSAnX19weWNhY2hlX18nIC1leGVjIHJtIC1yZiB7fS8qIFxcXFw7YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSBfX3B5Y2FjaGVfXyBkaXJlY3RvcmllcyB0aGVtc2VsdmVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmaW5kICR7b3V0cHV0RGlyfSAtdHlwZSBkIC1uYW1lICdfX3B5Y2FjaGVfXycgLWRlbGV0ZWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBQeXRob25VdkZ1bmN0aW9uLm9yY2FidXNBcGlUb29sc0xheWVyLnNldChzY29wZSwgbGF5ZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZE1hcnRUb29sc0xheWVyKHNjb3BlOiBDb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gT25seSBidWlsZCB0aGUgbGF5ZXIgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICBpZiAoIVB5dGhvblV2RnVuY3Rpb24ubWFydExheWVyLmhhcyhzY29wZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gbmV3IFB5dGhvbkxheWVyVmVyc2lvbihzY29wZSwgJ21hcnRUb29sc0xheWVyJywge1xuICAgICAgICAgICAgICAgIGVudHJ5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnbGF5ZXJzL21hcnRfdG9vbHMnKSxcbiAgICAgICAgICAgICAgICBjb21wYXRpYmxlUnVudGltZXM6IFtsYW1iZGEuUnVudGltZS5QWVRIT05fM18xMl0sXG4gICAgICAgICAgICAgICAgY29tcGF0aWJsZUFyY2hpdGVjdHVyZXM6IFtsYW1iZGEuQXJjaGl0ZWN0dXJlLkFSTV82NF0sXG4gICAgICAgICAgICAgICAgbGljZW5zZTogJ0dQTDMnLFxuICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAnbWFydFRvb2xzTGF5ZXInLFxuICAgICAgICAgICAgICAgIGJ1bmRsaW5nOiB7XG4gICAgICAgICAgICAgICAgICAgIGltYWdlOiBnZXRQeXRob25VdkRvY2tlckltYWdlKCksXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmRIb29rczoge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnVzZWQtdmFyc1xuICAgICAgICAgICAgICAgICAgICAgICAgYmVmb3JlQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFmdGVyQnVuZGxpbmcoaW5wdXREaXI6IHN0cmluZywgb3V0cHV0RGlyOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHBpcCBpbnN0YWxsICR7aW5wdXREaXJ9IC0tdGFyZ2V0ICR7b3V0cHV0RGlyfWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgdGVzdHMgZGlyZWN0b3J5IGZyb20gcGFuZGFzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBybSAtcmYgJHtvdXRwdXREaXJ9L3BhbmRhcy90ZXN0c2AsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIERlbGV0ZSB0aGUgKnB5YyBmaWxlcyBhbmQgX19weWNhY2hlX18gZGlyZWN0b3JpZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC10eXBlIGYgLW5hbWUgJyoucHljJyAtZGVsZXRlYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSBfX3B5Y2FjaGVfXyBkaXJlY3RvcmllcyBjb250ZW50c1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZmluZCAke291dHB1dERpcn0gLXR5cGUgZCAtbmFtZSAnX19weWNhY2hlX18nIC1leGVjIHJtIC1yZiB7fS8qIFxcXFw7YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSBfX3B5Y2FjaGVfXyBkaXJlY3RvcmllcyB0aGVtc2VsdmVzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmaW5kICR7b3V0cHV0RGlyfSAtdHlwZSBkIC1uYW1lICdfX3B5Y2FjaGVfXycgLWRlbGV0ZWAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgUHl0aG9uVXZGdW5jdGlvbi5tYXJ0TGF5ZXIuc2V0KHNjb3BlLCBsYXllcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkSWNhdjJMYXllcihzY29wZTogQ29uc3RydWN0KSB7XG4gICAgICAgIC8vIE9ubHkgYnVpbGQgdGhlIGxheWVyIGlmIGl0IGRvZXNuJ3QgZXhpc3RcbiAgICAgICAgaWYgKCFQeXRob25VdkZ1bmN0aW9uLmljYXYyTGF5ZXIuaGFzKHNjb3BlKSkge1xuICAgICAgICAgICAgY29uc3QgbGF5ZXIgPSBuZXcgUHl0aG9uTGF5ZXJWZXJzaW9uKHNjb3BlLCAnaWNhdjJUb29sc0xheWVyJywge1xuICAgICAgICAgICAgICAgIGVudHJ5OiBwYXRoLmpvaW4oX19kaXJuYW1lLCAnbGF5ZXJzL2ljYXYyX3Rvb2xzJyksXG4gICAgICAgICAgICAgICAgY29tcGF0aWJsZVJ1bnRpbWVzOiBbbGFtYmRhLlJ1bnRpbWUuUFlUSE9OXzNfMTJdLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVBcmNoaXRlY3R1cmVzOiBbbGFtYmRhLkFyY2hpdGVjdHVyZS5BUk1fNjRdLFxuICAgICAgICAgICAgICAgIGxpY2Vuc2U6ICdHUEwzJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ2ljYXYyVG9vbHNMYXllcicsXG4gICAgICAgICAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IGdldFB5dGhvblV2RG9ja2VySW1hZ2UoKSxcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEhvb2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcGlwIGluc3RhbGwgJHtpbnB1dERpcn0gLS10YXJnZXQgJHtvdXRwdXREaXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSB0ZXN0cyBkaXJlY3RvcnkgZnJvbSBwYW5kYXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHJtIC1yZiAke291dHB1dERpcn0vcGFuZGFzL3Rlc3RzYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSAqcHljIGZpbGVzIGFuZCBfX3B5Y2FjaGVfXyBkaXJlY3Rvcmllc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZmluZCAke291dHB1dERpcn0gLXR5cGUgZiAtbmFtZSAnKi5weWMnIC1kZWxldGVgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxldGUgdGhlIF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzIGNvbnRlbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmaW5kICR7b3V0cHV0RGlyfSAtdHlwZSBkIC1uYW1lICdfX3B5Y2FjaGVfXycgLWV4ZWMgcm0gLXJmIHt9LyogXFxcXDtgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxldGUgdGhlIF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzIHRoZW1zZWx2ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC10eXBlIGQgLW5hbWUgJ19fcHljYWNoZV9fJyAtZGVsZXRlYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBQeXRob25VdkZ1bmN0aW9uLmljYXYyTGF5ZXIuc2V0KHNjb3BlLCBsYXllcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGJ1aWxkRmFzdEFwaUxheWVyKHNjb3BlOiBDb25zdHJ1Y3QpIHtcbiAgICAgICAgLy8gT25seSBidWlsZCB0aGUgbGF5ZXIgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgICAgICBpZiAoIVB5dGhvblV2RnVuY3Rpb24uZmFzdEFwaUxheWVyLmhhcyhzY29wZSkpIHtcbiAgICAgICAgICAgIGNvbnN0IGxheWVyID0gbmV3IFB5dGhvbkxheWVyVmVyc2lvbihzY29wZSwgJ2Zhc3RBcGlMYXllcicsIHtcbiAgICAgICAgICAgICAgICBlbnRyeTogcGF0aC5qb2luKF9fZGlybmFtZSwgJ2xheWVycy9mYXN0YXBpX3Rvb2xzJyksXG4gICAgICAgICAgICAgICAgY29tcGF0aWJsZVJ1bnRpbWVzOiBbbGFtYmRhLlJ1bnRpbWUuUFlUSE9OXzNfMTJdLFxuICAgICAgICAgICAgICAgIGNvbXBhdGlibGVBcmNoaXRlY3R1cmVzOiBbbGFtYmRhLkFyY2hpdGVjdHVyZS5BUk1fNjRdLFxuICAgICAgICAgICAgICAgIGxpY2Vuc2U6ICdHUEwzJyxcbiAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ2Zhc3RBcGlMYXllcicsXG4gICAgICAgICAgICAgICAgYnVuZGxpbmc6IHtcbiAgICAgICAgICAgICAgICAgICAgaW1hZ2U6IGdldFB5dGhvblV2RG9ja2VySW1hZ2UoKSxcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZEhvb2tzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVudXNlZC12YXJzXG4gICAgICAgICAgICAgICAgICAgICAgICBiZWZvcmVCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWZ0ZXJCdW5kbGluZyhpbnB1dERpcjogc3RyaW5nLCBvdXRwdXREaXI6IHN0cmluZyk6IHN0cmluZ1tdIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gW1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgcGlwIGluc3RhbGwgJHtpbnB1dERpcn0gLS10YXJnZXQgJHtvdXRwdXREaXJ9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSB0ZXN0cyBkaXJlY3RvcnkgZnJvbSBwYW5kYXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYHJtIC1yZiAke291dHB1dERpcn0vcGFuZGFzL3Rlc3RzYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gRGVsZXRlIHRoZSAqcHljIGZpbGVzIGFuZCBfX3B5Y2FjaGVfXyBkaXJlY3Rvcmllc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgZmluZCAke291dHB1dERpcn0gLXR5cGUgZiAtbmFtZSAnKi5weWMnIC1kZWxldGVgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxldGUgdGhlIF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzIGNvbnRlbnRzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBmaW5kICR7b3V0cHV0RGlyfSAtdHlwZSBkIC1uYW1lICdfX3B5Y2FjaGVfXycgLWV4ZWMgcm0gLXJmIHt9LyogXFxcXDtgLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBEZWxldGUgdGhlIF9fcHljYWNoZV9fIGRpcmVjdG9yaWVzIHRoZW1zZWx2ZXNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYGZpbmQgJHtvdXRwdXREaXJ9IC10eXBlIGQgLW5hbWUgJ19fcHljYWNoZV9fJyAtZGVsZXRlYCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBQeXRob25VdkZ1bmN0aW9uLmZhc3RBcGlMYXllci5zZXQoc2NvcGUsIGxheWVyKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0T3JjYWJ1c1Jlc291cmNlcyhcbiAgICAgICAgcHJvcHM6IE9yY2FidXNSZXNvdXJjZXNQcm9wc1xuICAgICkge1xuICAgICAgICAvLyBTZXQgc2VjcmV0IG9iamVjdFxuICAgICAgICBjb25zdCBvcmNhYnVzVG9rZW5TZWNyZXRJZCA9IHNlY3JldHNNYW5hZ2VyLlNlY3JldC5mcm9tU2VjcmV0TmFtZVYyKFxuICAgICAgICAgICAgdGhpcywgJ29yY2FidXNUb2tlblNlY3JldElkJyxcbiAgICAgICAgICAgIHByb3BzLm9yY2FidXNUb2tlblNlY3JldElkID8/IERFRkFVTFRfT1JDQUJVU19UT0tFTl9TRUNSRVRfSURcbiAgICAgICAgKTtcbiAgICAgICAgY29uc3QgaG9zdG5hbWVTc21QYXJhbWV0ZXJOYW1lID0gc3NtLlN0cmluZ1BhcmFtZXRlci5mcm9tU3RyaW5nUGFyYW1ldGVyTmFtZShcbiAgICAgICAgICAgIHRoaXMsICdob3N0bmFtZVNzbVBhcmFtZXRlck5hbWUnLFxuICAgICAgICAgICAgcHJvcHMuaG9zdG5hbWVTc21QYXJhbWV0ZXJOYW1lID8/IERFRkFVTFRfSE9TVE5BTUVfU1NNX1BBUkFNRVRFUixcbiAgICAgICAgKVxuXG4gICAgICAgIC8vIEFkZCBwZXJtaXNzaW9ucyBmb3IgdGhlIHNlY3JldCBhbmQgU1NNIHBhcmFtZXRlclxuICAgICAgICAvLyBUbyB0aGUgY3VycmVudCB2ZXJzaW9uXG4gICAgICAgIG9yY2FidXNUb2tlblNlY3JldElkLmdyYW50UmVhZCh0aGlzLmN1cnJlbnRWZXJzaW9uKTtcbiAgICAgICAgaG9zdG5hbWVTc21QYXJhbWV0ZXJOYW1lLmdyYW50UmVhZCh0aGlzLmN1cnJlbnRWZXJzaW9uKVxuXG4gICAgICAgIC8vIEFkZCBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiAgICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChcbiAgICAgICAgICAgICdPUkNBQlVTX1RPS0VOX1NFQ1JFVF9JRCcsIG9yY2FidXNUb2tlblNlY3JldElkLnNlY3JldE5hbWUsXG4gICAgICAgIClcbiAgICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChcbiAgICAgICAgICAgICdIT1NUTkFNRV9TU01fUEFSQU1FVEVSX05BTUUnLCBob3N0bmFtZVNzbVBhcmFtZXRlck5hbWUucGFyYW1ldGVyTmFtZSxcbiAgICAgICAgKVxuICAgIH1cblxuXG4gICAgcHJpdmF0ZSBzZXRBdGhlbmFSZXNvdXJjZXMoXG4gICAgICAgIHByb3BzOiBNYXJ0RW52aXJvbm1lbnRWYXJpYWJsZXNcbiAgICApIHtcbiAgICAgICAgLy8gUmVzb2x2ZSB0aGUgc3RhZ2UgbmFtZSBieSBwZXJmb3JtaW5nIGEgcmV2ZXJzZSBsb29rdXAgdXNpbmcgY2RrLkF3cy5BQ0NPVU5UX0lEIG9uIEFDQ09VTlRfSURfQUxJQVNcbiAgICAgICAgY29uc3Qgc3RhZ2VOYW1lID0gcmVzb2x2ZVN0YWdlTmFtZSh0aGlzKVxuXG4gICAgICAgIGNvbnN0IGF0aGVuYVMzQnVja2V0ID0gczMuQnVja2V0LmZyb21CdWNrZXROYW1lKFxuICAgICAgICAgICAgdGhpcywgJ2F0aGVuYVMzQnVja2V0JyxcbiAgICAgICAgICAgIE1BUlRfUzNfQlVDS0VUW3N0YWdlTmFtZV1cbiAgICAgICAgKVxuXG4gICAgICAgIGNvbnN0IGF0aGVuYUZ1bmN0aW9uTmFtZSA9IGxhbWJkYS5GdW5jdGlvbi5mcm9tRnVuY3Rpb25OYW1lKFxuICAgICAgICAgICAgdGhpcywgJ2xhbWJkYUZ1bmN0aW9uTmFtZScsIE1BUlRfTEFNQkRBX0ZVTkNUSU9OX05BTUVcbiAgICAgICAgKVxuXG4gICAgICAgIC8vIEFkZCBlbnYgdmFyc1xuICAgICAgICAvLyBJdGVyYXRlIG92ZXIga3YgcGFpcnMgb2YgTUFSVF9FTlZfVkFSU1xuICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhNQVJUX0VOVl9WQVJTKSkge1xuICAgICAgICAgICAgLy8gQWZ0ZXJcbiAgICAgICAgICAgIGlmIChwcm9wc1trZXkgYXMga2V5b2YgTWFydEVudmlyb25tZW50VmFyaWFibGVzXSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRFbnZpcm9ubWVudChrZXksIHByb3BzW2tleSBhcyBrZXlvZiBNYXJ0RW52aXJvbm1lbnRWYXJpYWJsZXNdISk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoa2V5LCB2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBQZXJtaXNzaW9uc1xuICAgICAgICB0aGlzLmN1cnJlbnRWZXJzaW9uLmFkZFRvUm9sZVBvbGljeShcbiAgICAgICAgICAgIC8vIEZyb20gaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2F0aGVuYS9sYXRlc3QvdWcvZXhhbXBsZS1wb2xpY2llcy13b3JrZ3JvdXAuaHRtbFxuICAgICAgICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICAgICAgICAgICAgLy8gV29ya2dyb3VwIGxpc3RzXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6TGlzdEVuZ2luZVZlcnNpb25zJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpMaXN0V29ya0dyb3VwcycsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6TGlzdERhdGFDYXRhbG9ncycsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6TGlzdERhdGFiYXNlcycsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0RGF0YWJhc2UnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3RUYWJsZU1ldGFkYXRhJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpHZXRUYWJsZU1ldGFkYXRhJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpHZXREYXRhQ2F0YWxvZycsXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICByZXNvdXJjZXM6IFtgYXJuOmF3czphdGhlbmE6JHtSRUdJT059OiR7QUNDT1VOVF9JRF9BTElBU1tzdGFnZU5hbWVdfToqYF0sXG4gICAgICAgICAgICB9KVxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuY3VycmVudFZlcnNpb24uYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgICAgICAgLy8gRnJvbSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXRoZW5hL2xhdGVzdC91Zy9leGFtcGxlLXBvbGljaWVzLXdvcmtncm91cC5odG1sXG4gICAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICAgICAvLyBXb3JrZ3JvdXAgZXhlY3V0aW9uc1xuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkJhdGNoR2V0UXVlcnlFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldFF1ZXJ5RXhlY3V0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpMaXN0UXVlcnlFeGVjdXRpb25zJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpTdGFydFF1ZXJ5RXhlY3V0aW9uJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpTdG9wUXVlcnlFeGVjdXRpb24nLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkdldFF1ZXJ5UmVzdWx0cycsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6R2V0UXVlcnlSZXN1bHRzU3RyZWFtJyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpDcmVhdGVOYW1lZFF1ZXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpHZXROYW1lZFF1ZXJ5JyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpCYXRjaEdldE5hbWVkUXVlcnknLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkxpc3ROYW1lZFF1ZXJpZXMnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkRlbGV0ZU5hbWVkUXVlcnknLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkNyZWF0ZVByZXBhcmVkU3RhdGVtZW50JyxcbiAgICAgICAgICAgICAgICAgICAgJ2F0aGVuYTpHZXRQcmVwYXJlZFN0YXRlbWVudCcsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6TGlzdFByZXBhcmVkU3RhdGVtZW50cycsXG4gICAgICAgICAgICAgICAgICAgICdhdGhlbmE6VXBkYXRlUHJlcGFyZWRTdGF0ZW1lbnQnLFxuICAgICAgICAgICAgICAgICAgICAnYXRoZW5hOkRlbGV0ZVByZXBhcmVkU3RhdGVtZW50JyxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICAgIHJlc291cmNlczogW1xuICAgICAgICAgICAgICAgICAgICBgYXJuOmF3czphdGhlbmE6JHtSRUdJT059OiR7QUNDT1VOVF9JRF9BTElBU1tzdGFnZU5hbWVdfTp3b3JrZ3JvdXAvJHtNQVJUX0VOVl9WQVJTLmF0aGVuYVdvcmtncm91cE5hbWV9YCxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBBZGQgcmVhZCBhY2Nlc3MgdG8gdGhlIFMzIGJ1Y2tldFxuICAgICAgICBhdGhlbmFTM0J1Y2tldC5ncmFudFJlYWRXcml0ZShcbiAgICAgICAgICAgIHRoaXMuY3VycmVudFZlcnNpb24sXG4gICAgICAgICAgICBgJHtNQVJUX1MzX1BSRUZJWH0qYFxuICAgICAgICApXG5cbiAgICAgICAgLy8gQWRkIGludm9rZSBhY2Nlc3MgdG8gdGhlIGxhbWJkYSBmdW5jdGlvblxuICAgICAgICBhdGhlbmFGdW5jdGlvbk5hbWUuZ3JhbnRJbnZva2UoXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRWZXJzaW9uXG4gICAgICAgIClcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEljYXYyUmVzb3VyY2VzKFxuICAgICAgICBwcm9wczogSWNhdjJSZXNvdXJjZXNQcm9wc1xuICAgICkge1xuICAgICAgICAvLyBSZXNvbHZlIHRoZSBzdGFnZSBuYW1lIGJ5IHBlcmZvcm1pbmcgYSByZXZlcnNlIGxvb2t1cCB1c2luZyBjZGsuQXdzLkFDQ09VTlRfSUQgb24gQUNDT1VOVF9JRF9BTElBU1xuICAgICAgICBjb25zdCBzdGFnZU5hbWUgPSByZXNvbHZlU3RhZ2VOYW1lKHRoaXMpXG5cbiAgICAgICAgLy8gU2V0IHNlY3JldCBvYmplY3RcbiAgICAgICAgY29uc3QgaWNhdjJBY2Nlc3NUb2tlblNlY3JldElkT2JqZWN0ID0gc2VjcmV0c01hbmFnZXIuU2VjcmV0LmZyb21TZWNyZXROYW1lVjIoXG4gICAgICAgICAgICB0aGlzLCAnSUNBVjJfQUNDRVNTX1RPS0VOX1NFQ1JFVF9JRCcsXG4gICAgICAgICAgICBwcm9wcy5pY2F2MkFjY2Vzc1Rva2VuU2VjcmV0SWQgPz8gSUNBVjJfQUNDRVNTX1RPS0VOX1NFQ1JFVF9JRFtzdGFnZU5hbWVdXG4gICAgICAgICk7XG5cbiAgICAgICAgLy8gQWRkIHBlcm1pc3Npb25zIGZvciB0aGUgc2VjcmV0IGFuZCBTU00gcGFyYW1ldGVyXG4gICAgICAgIC8vIFRvIHRoZSBjdXJyZW50IHZlcnNpb25cbiAgICAgICAgaWNhdjJBY2Nlc3NUb2tlblNlY3JldElkT2JqZWN0LmdyYW50UmVhZCh0aGlzLmN1cnJlbnRWZXJzaW9uKTtcblxuICAgICAgICAvLyBBZGQgY29uZmlndXJhdGlvbiBwYXRoc1xuICAgICAgICBjb25zdCBpY2F2MlN0b3JhZ2VDb25maWd1cmF0aW9uU3NtUGFyYW1ldGVyUGF0aFByZWZpeCA9IChcbiAgICAgICAgICBwcm9wcy5pY2F2MlN0b3JhZ2VDb25maWd1cmF0aW9uU3NtUGFyYW1ldGVyUGF0aFByZWZpeCA/PyBJQ0FWMl9TVE9SQUdFX0NPTkZJR1VSQVRJT05fU1NNX1BBUkFNRVRFUl9QQVRIX1BSRUZJWFxuICAgICAgICApXG4gICAgICAgIGNvbnN0IGljYXYyUHJvamVjdFRvU3RvcmFnZUNvbmZpZ3VyYXRpb25zU3NtUGFyYW1ldGVyUGF0aFByZWZpeCA9IChcbiAgICAgICAgICBwcm9wcy5pY2F2MlByb2plY3RUb1N0b3JhZ2VDb25maWd1cmF0aW9uc1NzbVBhcmFtZXRlclBhdGhQcmVmaXggPz8gSUNBVjJfUFJPSkVDVF9UT19TVE9SQUdFX0NPTkZJR1VSQVRJT05TX1NTTV9QQVJBTUVURVJfUEFUSF9QUkVGSVhcbiAgICAgICAgKVxuICAgICAgICBjb25zdCBpY2F2MlN0b3JhZ2VDcmVkZW50aWFsc1NzbVBhcmFtZXRlclBhdGhQcmVmaXggPSAoXG4gICAgICAgICAgcHJvcHMuaWNhdjJTdG9yYWdlQ3JlZGVudGlhbHNTc21QYXJhbWV0ZXJQYXRoUHJlZml4ID8/IElDQVYyX1NUT1JBR0VfQ1JFREVOVElBTFNfU1NNX1BBUkFNRVRFUl9QQVRIX1BSRUZJWFxuICAgICAgICApXG5cbiAgICAgICAgLy8gUHJvdmlkZSBhY2Nlc3MgdG8gdGhlIHNzbSBwYXJhbWV0ZXIgcGF0aHNcbiAgICAgICAgdGhpcy5jdXJyZW50VmVyc2lvbi5hZGRUb1JvbGVQb2xpY3koXG4gICAgICAgICAgICBuZXcgaWFtLlBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgICAgICAgICAgLy8gV2UgbWF5IG5lZWQgdG8gZ2V0IHRoZSBwYXJhbWV0ZXJzIGluZGl2aWR1YWxseSBvciBieSBwYXRoXG4gICAgICAgICAgICAgICAgYWN0aW9uczogWydzc206R2V0UGFyYW1ldGVyc0J5UGF0aCcsICdzc206R2V0UGFyYW1ldGVyJ10sXG4gICAgICAgICAgICAgICAgcmVzb3VyY2VzOiBbXG4gICAgICAgICAgICAgICAgICAgIGBhcm46YXdzOnNzbToke1JFR0lPTn06JHtBQ0NPVU5UX0lEX0FMSUFTW3N0YWdlTmFtZV19OnBhcmFtZXRlciR7aWNhdjJTdG9yYWdlQ29uZmlndXJhdGlvblNzbVBhcmFtZXRlclBhdGhQcmVmaXgucmVwbGFjZSgvXFwvJC8sIFwiXCIpfS8qYCxcbiAgICAgICAgICAgICAgICAgICAgYGFybjphd3M6c3NtOiR7UkVHSU9OfToke0FDQ09VTlRfSURfQUxJQVNbc3RhZ2VOYW1lXX06cGFyYW1ldGVyJHtpY2F2MlByb2plY3RUb1N0b3JhZ2VDb25maWd1cmF0aW9uc1NzbVBhcmFtZXRlclBhdGhQcmVmaXgucmVwbGFjZSgvXFwvJC8sIFwiXCIpfS8qYCxcbiAgICAgICAgICAgICAgICAgICAgYGFybjphd3M6c3NtOiR7UkVHSU9OfToke0FDQ09VTlRfSURfQUxJQVNbc3RhZ2VOYW1lXX06cGFyYW1ldGVyJHtpY2F2MlN0b3JhZ2VDcmVkZW50aWFsc1NzbVBhcmFtZXRlclBhdGhQcmVmaXgucmVwbGFjZSgvXFwvJC8sIFwiXCIpfS8qYCxcbiAgICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgfSlcbiAgICAgICAgKTtcblxuICAgICAgICAvLyBBZGQgZW52aXJvbm1lbnQgdmFyaWFibGVzXG4gICAgICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoXG4gICAgICAgICAgICAnSUNBVjJfQUNDRVNTX1RPS0VOX1NFQ1JFVF9JRCcsIGljYXYyQWNjZXNzVG9rZW5TZWNyZXRJZE9iamVjdC5zZWNyZXROYW1lLFxuICAgICAgICApXG4gICAgICAgIHRoaXMuYWRkRW52aXJvbm1lbnQoXG4gICAgICAgICAgICAnSUNBVjJfQkFTRV9VUkwnLCBJQ0FWMl9CQVNFX1VSTCxcbiAgICAgICAgKVxuXG4gICAgfVxuXG59XG5cblxuXG5cbiJdfQ==
@@ -13,7 +13,7 @@ const aws_cloudwatch_actions_1 = require("aws-cdk-lib/aws-cloudwatch-actions");
13
13
  * SNS topic.
14
14
  */
15
15
  class MonitoredQueue extends constructs_1.Construct {
16
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.monitoredQueue.MonitoredQueue", version: "0.0.62" };
16
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.monitoredQueue.MonitoredQueue", version: "0.0.63" };
17
17
  queue;
18
18
  deadLetterQueue;
19
19
  alarm;
@@ -7,7 +7,7 @@ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
7
7
  * A construct which represents a named role that a Lambda function can assume.
8
8
  */
9
9
  class NamedLambdaRole extends aws_iam_1.Role {
10
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.namedLambdaRole.NamedLambdaRole", version: "0.0.62" };
10
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.namedLambdaRole.NamedLambdaRole", version: "0.0.63" };
11
11
  constructor(scope, id, props) {
12
12
  super(scope, id, {
13
13
  assumedBy: new aws_iam_1.ServicePrincipal("lambda.amazonaws.com"),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orcabus/platform-cdk-constructs",
3
- "version": "0.0.62",
3
+ "version": "0.0.63",
4
4
  "description": "CDK Package for OrcaBus infrastructure.",
5
5
  "main": "index.ts",
6
6
  "types": "index.d.ts",
@@ -15,7 +15,7 @@ const aws_cdk_lib_1 = require("aws-cdk-lib");
15
15
  * to the provider framework.
16
16
  */
17
17
  class ProviderFunction extends constructs_1.Construct {
18
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.provider.ProviderFunction", version: "0.0.62" };
18
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.provider.ProviderFunction", version: "0.0.63" };
19
19
  _function;
20
20
  _response;
21
21
  constructor(scope, id, props) {
@@ -23,7 +23,7 @@ exports.VPC_LOOKUP_PROPS = {
23
23
  * Helper for looking up the shared OrcaBus VPC.
24
24
  */
25
25
  class OrcaBusVpc {
26
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusVpc", version: "0.0.62" };
26
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusVpc", version: "0.0.63" };
27
27
  /**
28
28
  * The shared VPC that is used by OrcaBus.
29
29
  * @param scope
@@ -42,7 +42,7 @@ exports.SHARED_SECURITY_GROUP_NAME = "OrcaBusSharedComputeSecurityGroup";
42
42
  * Helper for looking up the shared compute security group by name.
43
43
  */
44
44
  class OrcaBusSharedComputeSecurityGroup {
45
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusSharedComputeSecurityGroup", version: "0.0.62" };
45
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.networking.OrcaBusSharedComputeSecurityGroup", version: "0.0.63" };
46
46
  /**
47
47
  * The shared security group that is used by compute resources to access the database.
48
48
  * @param scope
@@ -11,7 +11,7 @@ exports.SLACK_ALERTS_SNS_TOPIC = "AwsChatBotTopic-alerts";
11
11
  * A helper class to construct the arn for the slack SNS topic.
12
12
  */
13
13
  class SlackAlerts {
14
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.slack.SlackAlerts", version: "0.0.62" };
14
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@orcabus/platform-cdk-constructs.sharedConfig.slack.SlackAlerts", version: "0.0.63" };
15
15
  /**
16
16
  * Format the ARN for the slack alerts SNS topic for the current stack.
17
17
  * @param stack