@aws-mdaa/dataops-job-l3-construct 1.3.0 → 1.5.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.
Files changed (35) hide show
  1. package/.jsii +114 -389
  2. package/lib/dataops-job-l3-construct.d.ts +30 -240
  3. package/lib/dataops-job-l3-construct.js +25 -25
  4. package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/.npmignore +34 -0
  5. package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/jest.config.js +5 -0
  6. package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/lib/index.js +1 -1
  7. package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/lib/index.ts +241 -0
  8. package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/package.json +16 -18
  9. package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/test/bucketpolicy-helper.test.d.ts +5 -0
  10. package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/test/bucketpolicy-helper.test.js +200 -0
  11. package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/test/bucketpolicy-helper.test.ts +215 -0
  12. package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/tsconfig.json +40 -0
  13. package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/tsconfig.tsbuildinfo +1 -0
  14. package/node_modules/@aws-mdaa/s3-bucketpolicy-helper/typedoc.json +7 -0
  15. package/node_modules/@aws-mdaa/s3-inventory-helper/.npmignore +34 -0
  16. package/node_modules/@aws-mdaa/s3-inventory-helper/jest.config.js +5 -0
  17. package/node_modules/@aws-mdaa/s3-inventory-helper/lib/index.d.ts +2 -20
  18. package/node_modules/@aws-mdaa/s3-inventory-helper/lib/index.js +2 -11
  19. package/node_modules/@aws-mdaa/s3-inventory-helper/lib/index.ts +241 -0
  20. package/node_modules/@aws-mdaa/s3-inventory-helper/package.json +15 -17
  21. package/node_modules/@aws-mdaa/s3-inventory-helper/test/TODO +0 -0
  22. package/node_modules/@aws-mdaa/s3-inventory-helper/tsconfig.json +40 -0
  23. package/node_modules/@aws-mdaa/s3-inventory-helper/tsconfig.tsbuildinfo +1 -0
  24. package/node_modules/@aws-mdaa/s3-inventory-helper/typedoc.json +7 -0
  25. package/node_modules/lodash/README.md +2 -2
  26. package/node_modules/lodash/_baseUnset.js +47 -2
  27. package/node_modules/lodash/core.js +1 -1
  28. package/node_modules/lodash/core.min.js +1 -1
  29. package/node_modules/lodash/lodash.js +43 -4
  30. package/node_modules/lodash/lodash.min.js +57 -57
  31. package/node_modules/lodash/package.json +1 -1
  32. package/package.json +33 -47
  33. package/node_modules/lodash/flake.lock +0 -40
  34. package/node_modules/lodash/flake.nix +0 -20
  35. package/node_modules/lodash/release.md +0 -48
@@ -22,7 +22,7 @@ const aws_cdk_lib_1 = require("aws-cdk-lib");
22
22
  const aws_logs_1 = require("aws-cdk-lib/aws-logs");
23
23
  const cloudwatch_constructs_1 = require("@aws-mdaa/cloudwatch-constructs");
24
24
  const aws_kms_1 = require("aws-cdk-lib/aws-kms");
25
- const utils_1 = require("@aws-mdaa/cloudwatch-constructs/lib/utils");
25
+ const loggroup_utils_1 = require("@aws-mdaa/cloudwatch-constructs/lib/loggroup-utils");
26
26
  class GlueJobL3Construct extends l3_construct_1.MdaaL3Construct {
27
27
  constructor(scope, id, props) {
28
28
  super(scope, id, props);
@@ -31,19 +31,19 @@ class GlueJobL3Construct extends l3_construct_1.MdaaL3Construct {
31
31
  throw new Error('Deployment role ARN is required for job configuration');
32
32
  }
33
33
  const deploymentRole = iam_constructs_1.MdaaRole.fromRoleArn(this.scope, `deployment-role`, this.props.deploymentRoleArn);
34
- if (!this.props.projectBucketName) {
34
+ if (!this.props.bucketName) {
35
35
  throw new Error('Project bucket name is required for job configuration');
36
36
  }
37
- const projectBucket = s3_constructs_1.MdaaBucket.fromBucketName(this.scope, `project-bucket`, this.props.projectBucketName);
38
- if (!this.props.projectKMSArn) {
37
+ const bucket = s3_constructs_1.MdaaBucket.fromBucketName(this.scope, `project-bucket`, this.props.bucketName);
38
+ if (!this.props.kmsArn) {
39
39
  throw new Error('Project KMS Key is required for job configuration');
40
40
  }
41
- this.projectKmsKey = aws_kms_1.Key.fromKeyArn(this, this.props.projectName, this.props.projectKMSArn);
41
+ this.kmsKey = aws_kms_1.Key.fromKeyArn(this, this.props.projectName ?? 'kms-key', this.props.kmsArn);
42
42
  // Build our jobs!
43
43
  const allJobs = this.props.jobConfigs;
44
44
  Object.keys(allJobs).forEach(jobName => {
45
45
  const jobConfig = allJobs[jobName];
46
- this.createJob(jobName, jobConfig, deploymentRole, projectBucket);
46
+ this.createJob(jobName, jobConfig, deploymentRole, bucket);
47
47
  });
48
48
  //CDK S3 Deployment automatically adds inline policy to project deployment role.
49
49
  this.scope.node.children.forEach(child => {
@@ -57,17 +57,17 @@ class GlueJobL3Construct extends l3_construct_1.MdaaL3Construct {
57
57
  }
58
58
  });
59
59
  }
60
- deployAdditionalFiles(additionalFilesSources, projectBucket, deploymentRole, deploymentId, deploymentPath, extract) {
60
+ deployAdditionalFiles(additionalFilesSources, bucket, deploymentRole, deploymentId, deploymentPath, extract) {
61
61
  // Deploy Source asset(s) to /deployment/libs/<job> location.
62
62
  return new aws_s3_deployment_1.BucketDeployment(this.scope, deploymentId, {
63
63
  sources: additionalFilesSources,
64
- destinationBucket: projectBucket,
64
+ destinationBucket: bucket,
65
65
  destinationKeyPrefix: deploymentPath,
66
66
  role: deploymentRole,
67
67
  extract: extract,
68
68
  });
69
69
  }
70
- addAdditionalScripts(jobName, jobConfig, projectBucket, deploymentRole, defaultArguments) {
70
+ addAdditionalScripts(jobName, jobConfig, bucket, deploymentRole, defaultArguments) {
71
71
  if (jobConfig.additionalScripts) {
72
72
  /**
73
73
  * Group all files at parent directory level. This will allow creating zip lib assests at various directory levels
@@ -88,7 +88,7 @@ class GlueJobL3Construct extends l3_construct_1.MdaaL3Construct {
88
88
  return aws_s3_deployment_1.Source.asset(filePath, { exclude: ['**', ...fileNames] });
89
89
  });
90
90
  const deploymentPath = `deployment/libs/${jobName}`;
91
- const additionalFileDeployment = this.deployAdditionalFiles(additionalFilesSources, projectBucket, deploymentRole, deploymentPath, `job-deployment-${jobName}-additional-script`, false);
91
+ const additionalFileDeployment = this.deployAdditionalFiles(additionalFilesSources, bucket, deploymentRole, `job-deployment-${jobName}-additional-script`, deploymentPath, false);
92
92
  // Extract zip name(s) for each source and create comma separated list of s3 locations
93
93
  const libraryZipNames = [];
94
94
  for (let i = 0; i < additionalFilesSources.length; i++) {
@@ -104,7 +104,7 @@ class GlueJobL3Construct extends l3_construct_1.MdaaL3Construct {
104
104
  }
105
105
  }
106
106
  }
107
- addAdditionalJars(jobName, jobConfig, projectBucket, deploymentRole, defaultArguments) {
107
+ addAdditionalJars(jobName, jobConfig, bucket, deploymentRole, defaultArguments) {
108
108
  if (jobConfig.additionalJars) {
109
109
  // Create Source asset for each directory
110
110
  const additionalFilesSources = jobConfig.additionalJars.map(fullFileName => {
@@ -113,7 +113,7 @@ class GlueJobL3Construct extends l3_construct_1.MdaaL3Construct {
113
113
  return aws_s3_deployment_1.Source.asset(filePath, { exclude: ['**', `!${fileName}`] });
114
114
  });
115
115
  const deploymentPath = `deployment/libs/${jobName}`;
116
- const additionalFileDeployment = this.deployAdditionalFiles(additionalFilesSources, projectBucket, deploymentRole, `job-deployment-${jobName}-additional-jar`, deploymentPath, true);
116
+ const additionalFileDeployment = this.deployAdditionalFiles(additionalFilesSources, bucket, deploymentRole, `job-deployment-${jobName}-additional-jar`, deploymentPath, true);
117
117
  const extraJarNames = jobConfig.additionalJars.map(fullFileName => {
118
118
  const fileName = path.basename(fullFileName.trim());
119
119
  return `s3://${additionalFileDeployment.deployedBucket.bucketName}/${deploymentPath}/${fileName}`;
@@ -127,7 +127,7 @@ class GlueJobL3Construct extends l3_construct_1.MdaaL3Construct {
127
127
  }
128
128
  }
129
129
  }
130
- addAdditionalFiles(jobName, jobConfig, projectBucket, deploymentRole, defaultArguments) {
130
+ addAdditionalFiles(jobName, jobConfig, bucket, deploymentRole, defaultArguments) {
131
131
  if (jobConfig.additionalFiles) {
132
132
  // Create Source asset for each directory
133
133
  const additionalFilesSources = jobConfig.additionalFiles.map(fullFileName => {
@@ -136,7 +136,7 @@ class GlueJobL3Construct extends l3_construct_1.MdaaL3Construct {
136
136
  return aws_s3_deployment_1.Source.asset(filePath, { exclude: ['**', `!${fileName}`] });
137
137
  });
138
138
  const deploymentPath = `deployment/files/${jobName}`;
139
- const additionalFileDeployment = this.deployAdditionalFiles(additionalFilesSources, projectBucket, deploymentRole, `job-deployment-${jobName}-additional-file`, deploymentPath, true);
139
+ const additionalFileDeployment = this.deployAdditionalFiles(additionalFilesSources, bucket, deploymentRole, `job-deployment-${jobName}-additional-file`, deploymentPath, true);
140
140
  const extraFileNames = jobConfig.additionalFiles.map(fullFileName => {
141
141
  const fileName = path.basename(fullFileName.trim());
142
142
  return `s3://${additionalFileDeployment.deployedBucket.bucketName}/${deploymentPath}/${fileName}`;
@@ -150,7 +150,7 @@ class GlueJobL3Construct extends l3_construct_1.MdaaL3Construct {
150
150
  }
151
151
  }
152
152
  }
153
- createJob(jobName, jobConfig, deploymentRole, projectBucket) {
153
+ createJob(jobName, jobConfig, deploymentRole, bucket) {
154
154
  const defaultArguments = jobConfig.defaultArguments ? jobConfig.defaultArguments : {};
155
155
  const scriptPath = path.dirname(jobConfig.command.scriptLocation.trim());
156
156
  const scriptName = path.basename(jobConfig.command.scriptLocation.trim());
@@ -158,14 +158,14 @@ class GlueJobL3Construct extends l3_construct_1.MdaaL3Construct {
158
158
  const scriptDeploymentPath = `deployment/jobs/${jobName}`;
159
159
  const scriptDeployment = new aws_s3_deployment_1.BucketDeployment(this.scope, `job-deployment-${jobName}`, {
160
160
  sources: [scriptSource],
161
- destinationBucket: projectBucket,
161
+ destinationBucket: bucket,
162
162
  destinationKeyPrefix: scriptDeploymentPath,
163
163
  role: deploymentRole,
164
164
  extract: true,
165
165
  });
166
- this.addAdditionalScripts(jobName, jobConfig, projectBucket, deploymentRole, defaultArguments);
167
- this.addAdditionalJars(jobName, jobConfig, projectBucket, deploymentRole, defaultArguments);
168
- this.addAdditionalFiles(jobName, jobConfig, projectBucket, deploymentRole, defaultArguments);
166
+ this.addAdditionalScripts(jobName, jobConfig, bucket, deploymentRole, defaultArguments);
167
+ this.addAdditionalJars(jobName, jobConfig, bucket, deploymentRole, defaultArguments);
168
+ this.addAdditionalFiles(jobName, jobConfig, bucket, deploymentRole, defaultArguments);
169
169
  construct_1.MdaaNagSuppressions.addCodeResourceSuppressions(this.scope, [
170
170
  { id: 'AwsSolutions-L1', reason: 'Function is used only as custom resource during CDK deployment.' },
171
171
  {
@@ -212,7 +212,7 @@ class GlueJobL3Construct extends l3_construct_1.MdaaL3Construct {
212
212
  connections: jobConfig.connections,
213
213
  };
214
214
  }
215
- defaultArguments['--TempDir'] = `s3://${this.props.projectBucketName}/temp/jobs/${jobName}`;
215
+ defaultArguments['--TempDir'] = `s3://${this.props.bucketName}/temp/jobs/${jobName}`;
216
216
  // add continuous logging unless explicitly disabled
217
217
  if (jobConfig.continuousLogging) {
218
218
  const logGroupName = jobName;
@@ -252,7 +252,7 @@ class GlueJobL3Construct extends l3_construct_1.MdaaL3Construct {
252
252
  workerType: jobConfig.workerType,
253
253
  naming: this.props.naming,
254
254
  });
255
- if (job.name) {
255
+ if (job.name && this.props.projectName) {
256
256
  dataops_project_l3_construct_1.DataOpsProjectUtils.createProjectSSMParam(this.scope, this.props.naming, this.props.projectName, `job/name/${jobName}`, job.name);
257
257
  const eventRule = this.createJobMonitoringEventRule(`${jobName}-monitor`, [job.name]);
258
258
  if (!this.props.notificationTopicArn) {
@@ -279,15 +279,15 @@ class GlueJobL3Construct extends l3_construct_1.MdaaL3Construct {
279
279
  naming: this.props.naming,
280
280
  logGroupName: logGroupName,
281
281
  logGroupNamePathPrefix: logGroupNamePathPrefix,
282
- encryptionKey: this.projectKmsKey,
282
+ encryptionKey: this.kmsKey,
283
283
  retention: logGroupRetentionDays,
284
284
  };
285
285
  new cloudwatch_constructs_1.MdaaLogGroup(this, logGroupName, logProps);
286
286
  // `updateProps` always returns a prop with a logGroupName
287
- return (0, utils_1.updateProps)(logProps).logGroupName;
287
+ return (0, loggroup_utils_1.updateProps)(logProps).logGroupName;
288
288
  }
289
289
  }
290
290
  exports.GlueJobL3Construct = GlueJobL3Construct;
291
291
  _a = JSII_RTTI_SYMBOL_1;
292
- GlueJobL3Construct[_a] = { fqn: "@aws-mdaa/dataops-job-l3-construct.GlueJobL3Construct", version: "1.3.0" };
293
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YW9wcy1qb2ItbDMtY29uc3RydWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGF0YW9wcy1qb2ItbDMtY29uc3RydWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7OztHQUdHO0FBRUgseUZBQTZFO0FBQzdFLHFFQUFpRTtBQUNqRSwrREFBdUQ7QUFDdkQsNkRBQW9EO0FBQ3BELDJEQUFxRDtBQUNyRCx5REFBK0U7QUFFL0UscUVBQWtGO0FBQ2xGLG1EQUEwRCxDQUFDLFNBQVM7QUFFcEUsNkJBQTZCO0FBQzdCLHVFQUEwRDtBQUMxRCw2REFBd0Q7QUFFeEQsNkNBQWlDO0FBRWpDLG1EQUFxRDtBQUNyRCwyRUFBK0Q7QUFDL0QsaURBQWdEO0FBQ2hELHFFQUF3RTtBQThVeEUsTUFBYSxrQkFBbUIsU0FBUSw4QkFBZTtJQUlyRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQThCO1FBQ3RFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRW5CLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1FBQzNFLENBQUM7UUFDRCxNQUFNLGNBQWMsR0FBRyx5QkFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLGlCQUFpQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN6RyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQ2xDLE1BQU0sSUFBSSxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQztRQUMzRSxDQUFDO1FBQ0QsTUFBTSxhQUFhLEdBQUcsMEJBQVUsQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEtBQUss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LElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUNqQixRQUFRLEVBQ1IsNkJBQTZCLEVBQzdCO1lBQ0UsT0FBTyxFQUFFLFFBQVE7WUFDakIsS0FBSyxFQUFFLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUM7U0FDeEMsQ0FDRixDQUFDO0lBQ0osQ0FBQztJQUVPLGNBQWMsQ0FBQyxzQkFBOEIsRUFBRSxZQUFvQixFQUFFLGFBQTRCO1FBQ3ZHLElBQUkscUJBQW9DLENBQUM7UUFFekMsSUFBSSxhQUFhLENBQUMscUJBQXFCLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDN0MscUJBQXFCLEdBQUcsYUFBYSxDQUFDLHFCQUFxQixDQUFDO1FBQzlELENBQUM7YUFBTSxDQUFDO1lBQ04scUJBQXFCLEdBQUcsd0JBQWEsQ0FBQyxRQUFRLENBQUM7UUFDakQsQ0FBQztRQUVELE1BQU0sUUFBUSxHQUFHO1lBQ2YsTUFBTSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTTtZQUN6QixZQUFZLEVBQUUsWUFBWTtZQUMxQixzQkFBc0IsRUFBRSxzQkFBc0I7WUFDOUMsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhO1lBQ2pDLFNBQVMsRUFBRSxxQkFBcUI7U0FDakMsQ0FBQztRQUNGLElBQUksb0NBQVksQ0FBQyxJQUFJLEVBQUUsWUFBWSxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQy9DLDBEQUEwRDtRQUMxRCxPQUFPLElBQUEsbUJBQVcsRUFBQyxRQUFRLENBQUMsQ0FBQyxZQUFhLENBQUM7SUFDN0MsQ0FBQzs7QUF2V0gsZ0RBd1dDIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKi9cblxuaW1wb3J0IHsgRGF0YU9wc1Byb2plY3RVdGlscyB9IGZyb20gJ0Bhd3MtbWRhYS9kYXRhb3BzLXByb2plY3QtbDMtY29uc3RydWN0JztcbmltcG9ydCB7IEV2ZW50QnJpZGdlSGVscGVyIH0gZnJvbSAnQGF3cy1tZGFhL2V2ZW50YnJpZGdlLWhlbHBlcic7XG5pbXBvcnQgeyBNZGFhQ2ZuSm9iIH0gZnJvbSAnQGF3cy1tZGFhL2dsdWUtY29uc3RydWN0cyc7XG5pbXBvcnQgeyBNZGFhUm9sZSB9IGZyb20gJ0Bhd3MtbWRhYS9pYW0tY29uc3RydWN0cyc7XG5pbXBvcnQgeyBNZGFhQnVja2V0IH0gZnJvbSAnQGF3cy1tZGFhL3MzLWNvbnN0cnVjdHMnO1xuaW1wb3J0IHsgTWRhYUwzQ29uc3RydWN0LCBNZGFhTDNDb25zdHJ1Y3RQcm9wcyB9IGZyb20gJ0Bhd3MtbWRhYS9sMy1jb25zdHJ1Y3QnO1xuaW1wb3J0IHsgQ2ZuSm9iIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWdsdWUnO1xuaW1wb3J0IHsgQnVja2V0RGVwbG95bWVudCwgSVNvdXJjZSwgU291cmNlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzLWRlcGxveW1lbnQnO1xuaW1wb3J0IHsgTWRhYU5hZ1N1cHByZXNzaW9ucyB9IGZyb20gJ0Bhd3MtbWRhYS9jb25zdHJ1Y3QnOyAvL05PU09OQVJcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0ICogYXMgcGF0aCBmcm9tICdwYXRoJztcbmltcG9ydCB7IFNuc1RvcGljIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cy10YXJnZXRzJztcbmltcG9ydCB7IE1kYWFTbnNUb3BpYyB9IGZyb20gJ0Bhd3MtbWRhYS9zbnMtY29uc3RydWN0cyc7XG5pbXBvcnQgeyBSdWxlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWV2ZW50cyc7XG5pbXBvcnQgeyBGbiB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25FbGVtZW50IH0gZnJvbSAnQGF3cy1tZGFhL2NvbmZpZyc7XG5pbXBvcnQgeyBSZXRlbnRpb25EYXlzIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0IHsgTWRhYUxvZ0dyb3VwIH0gZnJvbSAnQGF3cy1tZGFhL2Nsb3Vkd2F0Y2gtY29uc3RydWN0cyc7XG5pbXBvcnQgeyBJS2V5LCBLZXkgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCB7IHVwZGF0ZVByb3BzIH0gZnJvbSAnQGF3cy1tZGFhL2Nsb3Vkd2F0Y2gtY29uc3RydWN0cy9saWIvdXRpbHMnO1xuaW1wb3J0IHsgSUJ1Y2tldCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgeyBJUm9sZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuXG5leHBvcnQgdHlwZSBKb2JDb21tYW5kUHl0aG9uVmVyc2lvbiA9ICcyJyB8ICczJyB8IHVuZGVmaW5lZDtcbmV4cG9ydCB0eXBlIEpvYkNvbW1hbmROYW1lID0gJ2dsdWVldGwnIHwgJ3B5dGhvbnNoZWxsJztcblxuLyoqXG4gKiBRLUVOSEFOQ0VELUlOVEVSRkFDRVxuICogQ29uZmlndXJhdGlvbiBpbnRlcmZhY2UgZm9yIEdsdWUgam9iIGxvZ2dpbmcgd2l0aCBDbG91ZFdhdGNoIGxvZyByZXRlbnRpb24gbWFuYWdlbWVudCBhbmQgY29tcGxpYW5jZSByZXF1aXJlbWVudHMuIERlZmluZXMgbG9nIHJldGVudGlvbiBzZXR0aW5ncyBmb3IgR2x1ZSBqb2IgZXhlY3V0aW9uIGxvZ3MgZW5zdXJpbmcgcHJvcGVyIGxvZyBtYW5hZ2VtZW50LCBjb21wbGlhbmNlLCBhbmQgY29zdCBvcHRpbWl6YXRpb24gZm9yIERhdGFPcHMgam9iIG1vbml0b3JpbmcgYW5kIGF1ZGl0IHRyYWlscy5cbiAqXG4gKiBVc2UgY2FzZXM6IExvZyByZXRlbnRpb24gbWFuYWdlbWVudDsgQ29tcGxpYW5jZSByZXF1aXJlbWVudHM7IENvc3Qgb3B0aW1pemF0aW9uOyBBdWRpdCB0cmFpbCBtYW5hZ2VtZW50XG4gKlxuICogQVdTOiBDbG91ZFdhdGNoIGxvZyBncm91cCByZXRlbnRpb24gZm9yIEdsdWUgam9iIGV4ZWN1dGlvbiBsb2dzIGFuZCBtb25pdG9yaW5nXG4gKlxuICogVmFsaWRhdGlvbjogbG9nR3JvdXBSZXRlbnRpb25EYXlzIGlzIHJlcXVpcmVkIHdpdGggc3BlY2lmaWMgYWxsb3dlZCB2YWx1ZXMgZm9yIHJldGVudGlvbiBwZXJpb2RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dnaW5nQ29uZmlnIHtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogUmVxdWlyZWQgQ2xvdWRXYXRjaCBsb2cgZ3JvdXAgcmV0ZW50aW9uIHBlcmlvZCBpbiBkYXlzIGZvciBHbHVlIGpvYiBsb2cgbWFuYWdlbWVudCBhbmQgY29tcGxpYW5jZSByZXF1aXJlbWVudHMuIERlZmluZXMgaG93IGxvbmcgam9iIGV4ZWN1dGlvbiBsb2dzIGFyZSByZXRhaW5lZCBpbiBDbG91ZFdhdGNoIHdpdGggc3BlY2lmaWMgYWxsb3dlZCB2YWx1ZXMgZm9yIGxvZyByZXRlbnRpb24sIGNvbXBsaWFuY2UgbWFuYWdlbWVudCwgYW5kIHN0b3JhZ2UgY29zdCBvcHRpbWl6YXRpb24uXG4gICAqXG4gICAqIFVzZSBjYXNlczogTG9nIHJldGVudGlvbiBtYW5hZ2VtZW50OyBDb21wbGlhbmNlIHJlcXVpcmVtZW50czsgU3RvcmFnZSBjb3N0IG9wdGltaXphdGlvbjsgQXVkaXQgdHJhaWwgbWFuYWdlbWVudFxuICAgKlxuICAgKiBBV1M6IENsb3VkV2F0Y2ggbG9nIGdyb3VwIHJldGVudGlvbiBmb3IgR2x1ZSBqb2IgZXhlY3V0aW9uIGxvZ3MgYW5kIGF1ZGl0IHRyYWlsIG1hbmFnZW1lbnRcbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSAxLDMsNSw3LDE0LDMwLDYwLDkwLDEyMCwxNTAsMTgwLDM2NSw0MDAsNTQ1LDczMSwxODI3LDM2NTMsIG9yIDA7IHJlcXVpcmVkIGZvciBsb2cgcmV0ZW50aW9uIGNvbmZpZ3VyYXRpb25cbiAgICoqL1xuICByZWFkb25seSBsb2dHcm91cFJldGVudGlvbkRheXM6IG51bWJlcjtcbn1cblxuLyoqXG4gKiBRLUVOSEFOQ0VELUlOVEVSRkFDRVxuICogQ29uZmlndXJhdGlvbiBpbnRlcmZhY2UgZm9yIEdsdWUgam9iIGNvbW1hbmQgc3BlY2lmaWNhdGlvbiB3aXRoIHNjcmlwdCBleGVjdXRpb24gYW5kIHJ1bnRpbWUgZW52aXJvbm1lbnQgc2V0dGluZ3MuIERlZmluZXMgam9iIGNvbW1hbmQgY29uZmlndXJhdGlvbiBpbmNsdWRpbmcgam9iIHR5cGUsIFB5dGhvbiB2ZXJzaW9uLCBhbmQgc2NyaXB0IGxvY2F0aW9uIGZvciBHbHVlIEVUTCBhbmQgUHl0aG9uIHNoZWxsIGpvYiBleGVjdXRpb24gd2l0aGluIERhdGFPcHMgd29ya2Zsb3dzLlxuICpcbiAqIFVzZSBjYXNlczogSm9iIGNvbW1hbmQgY29uZmlndXJhdGlvbjsgU2NyaXB0IGV4ZWN1dGlvbjsgUnVudGltZSBlbnZpcm9ubWVudDsgRVRMIGpvYiBzZXR1cFxuICpcbiAqIEFXUzogR2x1ZSBqb2IgY29tbWFuZCBjb25maWd1cmF0aW9uIGZvciBzY3JpcHQgZXhlY3V0aW9uIGFuZCBydW50aW1lIGVudmlyb25tZW50XG4gKlxuICogVmFsaWRhdGlvbjogbmFtZSBhbmQgc2NyaXB0TG9jYXRpb24gYXJlIHJlcXVpcmVkOyBweXRob25WZXJzaW9uIGlzIG9wdGlvbmFsIHdpdGggc3BlY2lmaWMgY29uc3RyYWludHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKb2JDb21tYW5kIHtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogUmVxdWlyZWQgam9iIGNvbW1hbmQgbmFtZSBzcGVjaWZpY2F0aW9uIGNvbnRyb2xsaW5nIEdsdWUgam9iIGV4ZWN1dGlvbiB0eXBlIGFuZCBydW50aW1lIGVudmlyb25tZW50LiBEZWZpbmVzIHdoZXRoZXIgdG8gdXNlIGdsdWVldGwgZm9yIEVUTCBqb2JzIHdpdGggU3BhcmsgcnVudGltZSBvciBweXRob25zaGVsbCBmb3IgUHl0aG9uIHNjcmlwdCBleGVjdXRpb24gd2l0aCBkaWZmZXJlbnQgcmVzb3VyY2UgYWxsb2NhdGlvbiBhbmQgY2FwYWJpbGl0aWVzLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IEpvYiB0eXBlIHNlbGVjdGlvbjsgUnVudGltZSBlbnZpcm9ubWVudDsgRXhlY3V0aW9uIG1vZGVsOyBSZXNvdXJjZSBhbGxvY2F0aW9uXG4gICAqXG4gICAqIEFXUzogR2x1ZSBqb2IgY29tbWFuZCBuYW1lIGZvciBleGVjdXRpb24gdHlwZSBhbmQgcnVudGltZSBlbnZpcm9ubWVudCBzZWxlY3Rpb25cbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSBnbHVlZXRsIG9yIHB5dGhvbnNoZWxsOyByZXF1aXJlZCBmb3Igam9iIGNvbW1hbmQgdHlwZSBhbmQgZXhlY3V0aW9uIGVudmlyb25tZW50XG4gICAqICAgKiovXG4gIHJlYWRvbmx5IG5hbWU6IEpvYkNvbW1hbmROYW1lO1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBPcHRpb25hbCBQeXRob24gdmVyc2lvbiBzcGVjaWZpY2F0aW9uIGZvciBHbHVlIGpvYiBydW50aW1lIGVudmlyb25tZW50IGVuYWJsaW5nIHZlcnNpb24tc3BlY2lmaWMgc2NyaXB0IGV4ZWN1dGlvbiBhbmQgY29tcGF0aWJpbGl0eS4gV2hlbiBzcGVjaWZpZWQsIGNvbnRyb2xzIHRoZSBQeXRob24gcnVudGltZSB2ZXJzaW9uIGZvciBqb2IgZXhlY3V0aW9uIGVuc3VyaW5nIHNjcmlwdCBjb21wYXRpYmlsaXR5IGFuZCBmZWF0dXJlIGF2YWlsYWJpbGl0eS5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBQeXRob24gdmVyc2lvbiBjb250cm9sOyBSdW50aW1lIGNvbXBhdGliaWxpdHk7IFNjcmlwdCBleGVjdXRpb247IFZlcnNpb24gbWFuYWdlbWVudFxuICAgKlxuICAgKiBBV1M6IEdsdWUgam9iIFB5dGhvbiB2ZXJzaW9uIGZvciBydW50aW1lIGVudmlyb25tZW50IGFuZCBzY3JpcHQgY29tcGF0aWJpbGl0eVxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIDIgb3IgMyBpZiBwcm92aWRlZDsgY29udHJvbHMgUHl0aG9uIHJ1bnRpbWUgdmVyc2lvbiBmb3Igam9iIGV4ZWN1dGlvblxuICAgKiAgICoqL1xuICByZWFkb25seSBweXRob25WZXJzaW9uPzogSm9iQ29tbWFuZFB5dGhvblZlcnNpb247XG4gIC8qKlxuICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAqIFJlcXVpcmVkIHJlbGF0aXZlIHBhdGggdG8gR2x1ZSBzY3JpcHQgZm9yIGpvYiBleGVjdXRpb24gZW5hYmxpbmcgc2NyaXB0IGxvY2F0aW9uIHNwZWNpZmljYXRpb24gYW5kIGNvZGUgZGVwbG95bWVudC4gUHJvdmlkZXMgdGhlIFMzIHBhdGggb3IgcmVsYXRpdmUgbG9jYXRpb24gb2YgdGhlIEdsdWUgc2NyaXB0IHRoYXQgd2lsbCBiZSBleGVjdXRlZCBieSB0aGUgam9iIGZvciBFVEwgcHJvY2Vzc2luZyBhbmQgZGF0YSB0cmFuc2Zvcm1hdGlvbi5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBTY3JpcHQgbG9jYXRpb247IENvZGUgZGVwbG95bWVudDsgSm9iIGV4ZWN1dGlvbjsgRVRMIHByb2Nlc3NpbmdcbiAgICpcbiAgICogQVdTOiBHbHVlIGpvYiBzY3JpcHQgbG9jYXRpb24gZm9yIGNvZGUgZXhlY3V0aW9uIGFuZCBFVEwgcHJvY2Vzc2luZ1xuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIHZhbGlkIHNjcmlwdCBwYXRoOyByZXF1aXJlZCBmb3Igam9iIHNjcmlwdCBsb2NhdGlvbiBhbmQgY29kZSBleGVjdXRpb25cbiAgICoqL1xuICByZWFkb25seSBzY3JpcHRMb2NhdGlvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBKb2JXb3JrZXJUeXBlID0gJ1N0YW5kYXJkJyB8ICdHLjFYJyB8ICdHLjJYJztcblxuLyoqXG4gKiBRLUVOSEFOQ0VELUlOVEVSRkFDRVxuICogQ29uZmlndXJhdGlvbiBpbnRlcmZhY2UgZm9yIEdsdWUgam9iIHByb3BlcnRpZXMgcHJvdmlkaW5nIEVUTCBqb2IgY29uZmlndXJhdGlvbiBhbmQgcmVzb3VyY2UgbWFuYWdlbWVudCBjYXBhYmlsaXRpZXMuIERlZmluZXMgY29tcGxldGUgR2x1ZSBqb2Igc2V0dXAgaW5jbHVkaW5nIGV4ZWN1dGlvbiByb2xlcywgY29tbWFuZHMsIGNhcGFjaXR5IGFsbG9jYXRpb24sIHJldHJ5IHBvbGljaWVzLCBhbmQgbW9uaXRvcmluZyBmb3IgRGF0YU9wcyBFVEwgcHJvY2Vzc2luZyBhbmQgZGF0YSB0cmFuc2Zvcm1hdGlvbiB3b3JrZmxvd3MuXG4gKlxuICogVXNlIGNhc2VzOiBFVEwgam9iIGNvbmZpZ3VyYXRpb247IERhdGEgdHJhbnNmb3JtYXRpb247IEpvYiByZXNvdXJjZSBtYW5hZ2VtZW50OyBEYXRhT3BzIHByb2Nlc3NpbmdcbiAqXG4gKiBBV1M6IEdsdWUgam9iIGNvbmZpZ3VyYXRpb24gZm9yIEVUTCBwcm9jZXNzaW5nIGFuZCBkYXRhIHRyYW5zZm9ybWF0aW9uIHdvcmtmbG93c1xuICpcbiAqIFZhbGlkYXRpb246IGV4ZWN1dGlvblJvbGVBcm4sIGNvbW1hbmQsIGFuZCBkZXNjcmlwdGlvbiBhcmUgcmVxdWlyZWQ7IG90aGVyIHByb3BlcnRpZXMgYXJlIG9wdGlvbmFsIHdpdGggc3BlY2lmaWMgY29uc3RyYWludHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKb2JDb25maWcge1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBSZXF1aXJlZCBleGVjdXRpb24gcm9sZSBBUk4gZm9yIEdsdWUgam9iIHBlcm1pc3Npb25zIGVuYWJsaW5nIHNlY3VyZSBqb2IgZXhlY3V0aW9uIGFuZCBBV1Mgc2VydmljZSBhY2Nlc3MuIFByb3ZpZGVzIHRoZSBJQU0gcm9sZSB0aGF0IHRoZSBHbHVlIGpvYiB3aWxsIGFzc3VtZSBmb3IgZXhlY3V0aW5nIEVUTCBvcGVyYXRpb25zIGFuZCBhY2Nlc3NpbmcgQVdTIHNlcnZpY2VzIGR1cmluZyBkYXRhIHByb2Nlc3Npbmcgd29ya2Zsb3dzLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IEpvYiBwZXJtaXNzaW9uczsgU2VydmljZSBhY2Nlc3M7IFNlY3VyZSBleGVjdXRpb247IElBTSByb2xlIG1hbmFnZW1lbnRcbiAgICpcbiAgICogQVdTOiBJQU0gcm9sZSBBUk4gZm9yIEdsdWUgam9iIGV4ZWN1dGlvbiBwZXJtaXNzaW9ucyBhbmQgc2VydmljZSBhY2Nlc3NcbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSB2YWxpZCBJQU0gcm9sZSBBUk47IHJlcXVpcmVkIGZvciBqb2IgZXhlY3V0aW9uIHBlcm1pc3Npb25zIGFuZCBzZXJ2aWNlIGFjY2Vzc1xuICAgKiovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblJvbGVBcm46IHN0cmluZztcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogUmVxdWlyZWQgam9iIGNvbW1hbmQgY29uZmlndXJhdGlvbiBkZWZpbmluZyBzY3JpcHQgZXhlY3V0aW9uIGFuZCBydW50aW1lIGVudmlyb25tZW50IGZvciBHbHVlIGpvYiBwcm9jZXNzaW5nLiBQcm92aWRlcyB0aGUgY29tbWFuZCBzcGVjaWZpY2F0aW9uIGluY2x1ZGluZyBqb2IgdHlwZSwgUHl0aG9uIHZlcnNpb24sIGFuZCBzY3JpcHQgbG9jYXRpb24gZm9yIEVUTCBqb2IgZXhlY3V0aW9uIGFuZCBkYXRhIHRyYW5zZm9ybWF0aW9uLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IFNjcmlwdCBleGVjdXRpb247IFJ1bnRpbWUgY29uZmlndXJhdGlvbjsgSm9iIGNvbW1hbmQgc2V0dXA7IEVUTCBwcm9jZXNzaW5nXG4gICAqXG4gICAqIEFXUzogR2x1ZSBqb2IgY29tbWFuZCBmb3Igc2NyaXB0IGV4ZWN1dGlvbiBhbmQgcnVudGltZSBlbnZpcm9ubWVudCBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgdmFsaWQgSm9iQ29tbWFuZDsgcmVxdWlyZWQgZm9yIGpvYiBjb21tYW5kIGNvbmZpZ3VyYXRpb24gYW5kIHNjcmlwdCBleGVjdXRpb25cbiAgICogICAqKi9cbiAgcmVhZG9ubHkgY29tbWFuZDogSm9iQ29tbWFuZDtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogT3B0aW9uYWwgdGVtcGxhdGUgcmVmZXJlbmNlIGZvciBqb2IgY29uZmlndXJhdGlvbiBpbmhlcml0YW5jZSBlbmFibGluZyByZXVzYWJsZSBqb2IgY29uZmlndXJhdGlvbnMgYW5kIHN0YW5kYXJkaXplZCBzZXR1cHMuIFdoZW4gc3BlY2lmaWVkLCBpbmhlcml0cyBjb25maWd1cmF0aW9uIGZyb20gYSB0ZW1wbGF0ZSBkZWZpbmVkIGVsc2V3aGVyZSBpbiB0aGUgY29uZmlndXJhdGlvbiBmb3IgY29uc2lzdGVudCBqb2Igc2V0dXAgYW5kIG1hbmFnZW1lbnQuXG4gICAqXG4gICAqIFVzZSBjYXNlczogQ29uZmlndXJhdGlvbiBpbmhlcml0YW5jZTsgVGVtcGxhdGUgcmV1c2U7IFN0YW5kYXJkaXplZCBzZXR1cDsgQ29uZmlndXJhdGlvbiBtYW5hZ2VtZW50XG4gICAqXG4gICAqIEFXUzogSm9iIHRlbXBsYXRlIHJlZmVyZW5jZSBmb3IgY29uZmlndXJhdGlvbiBpbmhlcml0YW5jZSBhbmQgc3RhbmRhcmRpemVkIGpvYiBzZXR1cFxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIHZhbGlkIHRlbXBsYXRlIG5hbWUgaWYgcHJvdmlkZWQ7IGVuYWJsZXMgY29uZmlndXJhdGlvbiBpbmhlcml0YW5jZSBmcm9tIGRlZmluZWQgdGVtcGxhdGVzXG4gICAqKi9cbiAgcmVhZG9ubHkgdGVtcGxhdGU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAqIE9wdGlvbmFsIGFsbG9jYXRlZCBjYXBhY2l0eSBzcGVjaWZpY2F0aW9uIGZvciBHbHVlIGpvYiByZXNvdXJjZSBhbGxvY2F0aW9uIGNvbnRyb2xsaW5nIGpvYiBwZXJmb3JtYW5jZSBhbmQgY29zdCBtYW5hZ2VtZW50LiBEZWZpbmVzIHRoZSBudW1iZXIgb2YgY2FwYWNpdHkgdW5pdHMgYWxsb2NhdGVkIHRvIHRoZSBqb2IgZm9yIHByb2Nlc3NpbmcgcGVyZm9ybWFuY2UgYW5kIHJlc291cmNlIHV0aWxpemF0aW9uIG9wdGltaXphdGlvbi5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBSZXNvdXJjZSBhbGxvY2F0aW9uOyBQZXJmb3JtYW5jZSB0dW5pbmc7IENvc3QgbWFuYWdlbWVudDsgQ2FwYWNpdHkgcGxhbm5pbmdcbiAgICpcbiAgICogQVdTOiBHbHVlIGpvYiBhbGxvY2F0ZWQgY2FwYWNpdHkgZm9yIHJlc291cmNlIGFsbG9jYXRpb24gYW5kIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvblxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIHBvc2l0aXZlIGludGVnZXIgaWYgcHJvdmlkZWQ7IGNvbnRyb2xzIGpvYiByZXNvdXJjZSBhbGxvY2F0aW9uIGFuZCBwZXJmb3JtYW5jZVxuICAgKiovXG4gIHJlYWRvbmx5IGFsbG9jYXRlZENhcGFjaXR5PzogbnVtYmVyO1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBPcHRpb25hbCBhcnJheSBvZiBjb25uZWN0aW9uIG5hbWVzIGZvciBHbHVlIGpvYiBuZXR3b3JrIGNvbm5lY3Rpdml0eSBlbmFibGluZyBkYXRhYmFzZSBhbmQgZXh0ZXJuYWwgc3lzdGVtIGFjY2Vzcy4gUHJvdmlkZXMgbmV0d29yayBjb25uZWN0aW9ucyBmb3IgYWNjZXNzaW5nIGRhdGFiYXNlcywgVlBDIHJlc291cmNlcywgYW5kIGV4dGVybmFsIHN5c3RlbXMgZHVyaW5nIEVUTCBwcm9jZXNzaW5nIGFuZCBkYXRhIGludGVncmF0aW9uLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IERhdGFiYXNlIGNvbm5lY3Rpdml0eTsgVlBDIGFjY2VzczsgRXh0ZXJuYWwgc3lzdGVtIGludGVncmF0aW9uOyBOZXR3b3JrIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQVdTOiBHbHVlIGpvYiBjb25uZWN0aW9ucyBmb3IgZGF0YWJhc2UgYW5kIGV4dGVybmFsIHN5c3RlbSBjb25uZWN0aXZpdHlcbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSBhcnJheSBvZiB2YWxpZCBjb25uZWN0aW9uIG5hbWVzIGlmIHByb3ZpZGVkOyBlbmFibGVzIGRhdGFiYXNlIGFuZCBleHRlcm5hbCBzeXN0ZW0gYWNjZXNzXG4gICAqKi9cbiAgcmVhZG9ubHkgY29ubmVjdGlvbnM/OiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogT3B0aW9uYWwgZGVmYXVsdCBhcmd1bWVudHMgbWFwIGZvciBHbHVlIGpvYiBwYXJhbWV0ZXIgY29uZmlndXJhdGlvbiBlbmFibGluZyBqb2IgY3VzdG9taXphdGlvbiBhbmQgcnVudGltZSBiZWhhdmlvciBjb250cm9sLiBQcm92aWRlcyBkZWZhdWx0IHBhcmFtZXRlcnMgYW5kIGFyZ3VtZW50cyB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBqb2IgZm9yIHJ1bnRpbWUgY29uZmlndXJhdGlvbiBhbmQgYmVoYXZpb3IgY3VzdG9taXphdGlvbi5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBKb2IgcGFyYW1ldGVyczsgUnVudGltZSBjb25maWd1cmF0aW9uOyBCZWhhdmlvciBjdXN0b21pemF0aW9uOyBQYXJhbWV0ZXIgbWFuYWdlbWVudFxuICAgKlxuICAgKiBBV1M6IEdsdWUgam9iIGRlZmF1bHQgYXJndW1lbnRzIGZvciBydW50aW1lIGNvbmZpZ3VyYXRpb24gYW5kIHBhcmFtZXRlciBtYW5hZ2VtZW50XG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgdmFsaWQgQ29uZmlndXJhdGlvbkVsZW1lbnQgaWYgcHJvdmlkZWQ7IGVuYWJsZXMgam9iIHBhcmFtZXRlciBjb25maWd1cmF0aW9uIGFuZCBjdXN0b21pemF0aW9uXG4gICAqKi9cbiAgcmVhZG9ubHkgZGVmYXVsdEFyZ3VtZW50cz86IENvbmZpZ3VyYXRpb25FbGVtZW50O1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBSZXF1aXJlZCBqb2IgZGVzY3JpcHRpb24gZm9yIGRvY3VtZW50YXRpb24gYW5kIG9wZXJhdGlvbmFsIG1hbmFnZW1lbnQgZW5hYmxpbmcgam9iIGlkZW50aWZpY2F0aW9uIGFuZCBwdXJwb3NlIGRvY3VtZW50YXRpb24uIFByb3ZpZGVzIGRlc2NyaXB0aXZlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBqb2IncyBwdXJwb3NlLCBmdW5jdGlvbmFsaXR5LCBhbmQgb3BlcmF0aW9uYWwgY2hhcmFjdGVyaXN0aWNzIGZvciBtYW5hZ2VtZW50IGFuZCBkb2N1bWVudGF0aW9uLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IEpvYiBkb2N1bWVudGF0aW9uOyBPcGVyYXRpb25hbCBtYW5hZ2VtZW50OyBQdXJwb3NlIGlkZW50aWZpY2F0aW9uOyBNYW5hZ2VtZW50IGluZm9ybWF0aW9uXG4gICAqXG4gICAqIEFXUzogR2x1ZSBqb2IgZGVzY3JpcHRpb24gZm9yIGRvY3VtZW50YXRpb24gYW5kIG9wZXJhdGlvbmFsIG1hbmFnZW1lbnRcbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSBkZXNjcmlwdGl2ZSB0ZXh0OyByZXF1aXJlZCBmb3Igam9iIGRvY3VtZW50YXRpb24gYW5kIG9wZXJhdGlvbmFsIG1hbmFnZW1lbnRcbiAgICoqL1xuICByZWFkb25seSBkZXNjcmlwdGlvbjogc3RyaW5nO1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBPcHRpb25hbCBleGVjdXRpb24gcHJvcGVydHkgY29uZmlndXJhdGlvbiBmb3IgR2x1ZSBqb2IgY29uY3VycmVuY3kgY29udHJvbCBlbmFibGluZyBwYXJhbGxlbCBleGVjdXRpb24gbWFuYWdlbWVudCBhbmQgcmVzb3VyY2Ugb3B0aW1pemF0aW9uLiBEZWZpbmVzIGV4ZWN1dGlvbiBwcm9wZXJ0aWVzIGluY2x1ZGluZyBtYXhpbXVtIGNvbmN1cnJlbnQgZXhlY3V0aW9ucyBmb3Igam9iIHNjaGVkdWxpbmcgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQuXG4gICAqXG4gICAqIFVzZSBjYXNlczogQ29uY3VycmVuY3kgY29udHJvbDsgUGFyYWxsZWwgZXhlY3V0aW9uOyBSZXNvdXJjZSBtYW5hZ2VtZW50OyBKb2Igc2NoZWR1bGluZ1xuICAgKlxuICAgKiBBV1M6IEdsdWUgam9iIGV4ZWN1dGlvbiBwcm9wZXJ0aWVzIGZvciBjb25jdXJyZW5jeSBjb250cm9sIGFuZCBwYXJhbGxlbCBleGVjdXRpb24gbWFuYWdlbWVudFxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIHZhbGlkIEV4ZWN1dGlvblByb3BlcnR5UHJvcGVydHkgaWYgcHJvdmlkZWQ7IGNvbnRyb2xzIGpvYiBjb25jdXJyZW5jeSBhbmQgcGFyYWxsZWwgZXhlY3V0aW9uXG4gICAqICAgKiovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblByb3BlcnR5PzogQ2ZuSm9iLkV4ZWN1dGlvblByb3BlcnR5UHJvcGVydHk7XG4gIC8qKlxuICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAqIE9wdGlvbmFsIEdsdWUgdmVyc2lvbiBzcGVjaWZpY2F0aW9uIGZvciBydW50aW1lIGVudmlyb25tZW50IGNvbnRyb2wgZW5hYmxpbmcgdmVyc2lvbi1zcGVjaWZpYyBmZWF0dXJlcyBhbmQgY29tcGF0aWJpbGl0eS4gRGVmaW5lcyB0aGUgR2x1ZSBydW50aW1lIHZlcnNpb24gZm9yIGpvYiBleGVjdXRpb24gZW5zdXJpbmcgZmVhdHVyZSBhdmFpbGFiaWxpdHkgYW5kIGNvbXBhdGliaWxpdHkgd2l0aCBqb2IgcmVxdWlyZW1lbnRzLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IFJ1bnRpbWUgdmVyc2lvbiBjb250cm9sOyBGZWF0dXJlIGF2YWlsYWJpbGl0eTsgQ29tcGF0aWJpbGl0eSBtYW5hZ2VtZW50OyBWZXJzaW9uIHNwZWNpZmljYXRpb25cbiAgICpcbiAgICogQVdTOiBHbHVlIHZlcnNpb24gZm9yIHJ1bnRpbWUgZW52aXJvbm1lbnQgYW5kIGZlYXR1cmUgYXZhaWxhYmlsaXR5XG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgdmFsaWQgR2x1ZSB2ZXJzaW9uIGlmIHByb3ZpZGVkOyBjb250cm9scyBydW50aW1lIGVudmlyb25tZW50IGFuZCBmZWF0dXJlIGF2YWlsYWJpbGl0eVxuICAgKiovXG4gIHJlYWRvbmx5IGdsdWVWZXJzaW9uPzogc3RyaW5nO1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBPcHRpb25hbCBtYXhpbXVtIGNhcGFjaXR5IHNwZWNpZmljYXRpb24gZm9yIEdsdWUgam9iIHJlc291cmNlIGxpbWl0cyBjb250cm9sbGluZyBtYXhpbXVtIHJlc291cmNlIGFsbG9jYXRpb24gYW5kIGNvc3QgbWFuYWdlbWVudC4gRGVmaW5lcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgRFBVcyAoRGF0YSBQcm9jZXNzaW5nIFVuaXRzKSB0aGF0IGNhbiBiZSBhbGxvY2F0ZWQgdG8gdGhlIGpvYiBmb3IgcmVzb3VyY2UgY29udHJvbCBhbmQgY29zdCBvcHRpbWl6YXRpb24uXG4gICAqXG4gICAqIFVzZSBjYXNlczogUmVzb3VyY2UgbGltaXRzOyBDb3N0IGNvbnRyb2w7IE1heGltdW0gYWxsb2NhdGlvbjsgUmVzb3VyY2UgbWFuYWdlbWVudFxuICAgKlxuICAgKiBBV1M6IEdsdWUgam9iIG1heGltdW0gY2FwYWNpdHkgZm9yIHJlc291cmNlIGxpbWl0cyBhbmQgY29zdCBjb250cm9sXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgcG9zaXRpdmUgbnVtYmVyIGlmIHByb3ZpZGVkOyBjb250cm9scyBtYXhpbXVtIERQVSBhbGxvY2F0aW9uIGFuZCByZXNvdXJjZSBsaW1pdHNcbiAgICoqL1xuICByZWFkb25seSBtYXhDYXBhY2l0eT86IG51bWJlcjtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogT3B0aW9uYWwgbWF4aW11bSByZXRyeSBjb3VudCBmb3IgR2x1ZSBqb2IgZmFpbHVyZSBoYW5kbGluZyBlbmFibGluZyBhdXRvbWF0aWMgcmV0cnkgYW5kIGVycm9yIHJlY292ZXJ5LiBEZWZpbmVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiByZXRyaWVzIGJlZm9yZSBqb2IgZmFpbHVyZSBvY2N1cnMgZm9yIGF1dG9tYXRpYyBlcnJvciByZWNvdmVyeSBhbmQgam9iIHJlbGlhYmlsaXR5LlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IEVycm9yIHJlY292ZXJ5OyBBdXRvbWF0aWMgcmV0cnk7IEpvYiByZWxpYWJpbGl0eTsgRmFpbHVyZSBoYW5kbGluZ1xuICAgKlxuICAgKiBBV1M6IEdsdWUgam9iIG1heGltdW0gcmV0cmllcyBmb3IgYXV0b21hdGljIGVycm9yIHJlY292ZXJ5IGFuZCBqb2IgcmVsaWFiaWxpdHlcbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSBub24tbmVnYXRpdmUgaW50ZWdlciBpZiBwcm92aWRlZDsgY29udHJvbHMgYXV0b21hdGljIHJldHJ5IGJlaGF2aW9yIGFuZCBlcnJvciByZWNvdmVyeVxuICAgKiovXG4gIHJlYWRvbmx5IG1heFJldHJpZXM/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAqIE9wdGlvbmFsIG5vdGlmaWNhdGlvbiBwcm9wZXJ0eSBjb25maWd1cmF0aW9uIGZvciBHbHVlIGpvYiBtb25pdG9yaW5nIGFuZCBhbGVydGluZyBlbmFibGluZyBqb2Igc3RhdHVzIG5vdGlmaWNhdGlvbnMgYW5kIG9wZXJhdGlvbmFsIGF3YXJlbmVzcy4gRGVmaW5lcyBub3RpZmljYXRpb24gc2V0dGluZ3MgaW5jbHVkaW5nIG5vdGlmaWNhdGlvbiBkZWxheSBmb3Igam9iIG1vbml0b3JpbmcgYW5kIG9wZXJhdGlvbmFsIGFsZXJ0aW5nLlxuICAgKlxuICAgKiBVc2UgY2FzZXM6IEpvYiBtb25pdG9yaW5nOyBTdGF0dXMgbm90aWZpY2F0aW9uczsgT3BlcmF0aW9uYWwgYWxlcnRpbmc7IE1vbml0b3JpbmcgY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBBV1M6IEdsdWUgam9iIG5vdGlmaWNhdGlvbiBwcm9wZXJ0aWVzIGZvciBtb25pdG9yaW5nIGFuZCBhbGVydGluZyBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgdmFsaWQgTm90aWZpY2F0aW9uUHJvcGVydHlQcm9wZXJ0eSBpZiBwcm92aWRlZDsgZW5hYmxlcyBqb2IgbW9uaXRvcmluZyBhbmQgYWxlcnRpbmdcbiAgICogICAqKi9cbiAgcmVhZG9ubHkgbm90aWZpY2F0aW9uUHJvcGVydHk/OiBDZm5Kb2IuTm90aWZpY2F0aW9uUHJvcGVydHlQcm9wZXJ0eTtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogT3B0aW9uYWwgbnVtYmVyIG9mIHdvcmtlcnMgc3BlY2lmaWNhdGlvbiBmb3IgR2x1ZSBqb2IgcGFyYWxsZWwgcHJvY2Vzc2luZyBlbmFibGluZyBkaXN0cmlidXRlZCBwcm9jZXNzaW5nIGFuZCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24uIERlZmluZXMgdGhlIG51bWJlciBvZiB3b3JrZXJzIGFzc2lnbmVkIHRvIHRoZSBqb2IgZm9yIHBhcmFsbGVsIHByb2Nlc3NpbmcgYW5kIGRpc3RyaWJ1dGVkIGRhdGEgdHJhbnNmb3JtYXRpb24uXG4gICAqXG4gICAqIFVzZSBjYXNlczogUGFyYWxsZWwgcHJvY2Vzc2luZzsgRGlzdHJpYnV0ZWQgcHJvY2Vzc2luZzsgUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uOyBXb3JrZXIgYWxsb2NhdGlvblxuICAgKlxuICAgKiBBV1M6IEdsdWUgam9iIG51bWJlciBvZiB3b3JrZXJzIGZvciBwYXJhbGxlbCBwcm9jZXNzaW5nIGFuZCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25cbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSBwb3NpdGl2ZSBpbnRlZ2VyIGlmIHByb3ZpZGVkOyBjb250cm9scyBwYXJhbGxlbCBwcm9jZXNzaW5nIGFuZCB3b3JrZXIgYWxsb2NhdGlvblxuICAgKiovXG4gIHJlYWRvbmx5IG51bWJlck9mV29ya2Vycz86IG51bWJlcjtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogT3B0aW9uYWwgdGltZW91dCBzcGVjaWZpY2F0aW9uIGZvciBHbHVlIGpvYiBleGVjdXRpb24gbGltaXRzIGVuYWJsaW5nIGpvYiBydW50aW1lIGNvbnRyb2wgYW5kIHJlc291cmNlIG1hbmFnZW1lbnQuIERlZmluZXMgdGhlIG1heGltdW0gZXhlY3V0aW9uIHRpbWUgZm9yIHRoZSBqb2IgaW4gbWludXRlcyBmb3IgcnVudGltZSBjb250cm9sIGFuZCByZXNvdXJjZSBvcHRpbWl6YXRpb24uXG4gICAqXG4gICAqIFVzZSBjYXNlczogUnVudGltZSBjb250cm9sOyBFeGVjdXRpb24gbGltaXRzOyBSZXNvdXJjZSBtYW5hZ2VtZW50OyBUaW1lb3V0IGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQVdTOiBHbHVlIGpvYiB0aW1lb3V0IGZvciBleGVjdXRpb24gdGltZSBsaW1pdHMgYW5kIHJlc291cmNlIG1hbmFnZW1lbnRcbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSBwb3NpdGl2ZSBpbnRlZ2VyIGluIG1pbnV0ZXMgaWYgcHJvdmlkZWQ7IGNvbnRyb2xzIGpvYiBleGVjdXRpb24gdGltZSBsaW1pdHNcbiAgICoqL1xuICByZWFkb25seSB0aW1lb3V0PzogbnVtYmVyO1xuICAvKipcbiAgICogUS1FTkhBTkNFRC1QUk9QRVJUWVxuICAgKiBPcHRpb25hbCB3b3JrZXIgdHlwZSBzcGVjaWZpY2F0aW9uIGZvciBHbHVlIGpvYiBjb21wdXRlIHJlc291cmNlIHNlbGVjdGlvbiBlbmFibGluZyBwZXJmb3JtYW5jZSBhbmQgY29zdCBvcHRpbWl6YXRpb24uIERlZmluZXMgdGhlIHR5cGUgb2Ygd29ya2VycyAoU3RhbmRhcmQsIEcuMVgsIEcuMlgpIGZvciBjb21wdXRlIHJlc291cmNlIGFsbG9jYXRpb24gYW5kIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcy5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBDb21wdXRlIHJlc291cmNlIHNlbGVjdGlvbjsgUGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uOyBDb3N0IG1hbmFnZW1lbnQ7IFdvcmtlciB0eXBlIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQVdTOiBHbHVlIGpvYiB3b3JrZXIgdHlwZSBmb3IgY29tcHV0ZSByZXNvdXJjZSBhbGxvY2F0aW9uIGFuZCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25cbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSBTdGFuZGFyZCwgRy4xWCwgb3IgRy4yWCBpZiBwcm92aWRlZDsgY29udHJvbHMgY29tcHV0ZSByZXNvdXJjZSB0eXBlIGFuZCBwZXJmb3JtYW5jZVxuICAgKiAgICoqL1xuICByZWFkb25seSB3b3JrZXJUeXBlPzogSm9iV29ya2VyVHlwZTtcbiAgLyoqXG4gICAqIFEtRU5IQU5DRUQtUFJPUEVSVFlcbiAgICogT3B0aW9uYWwgYXJyYXkgb2YgYWRkaXRpb25hbCBzY3JpcHQgcGF0aHMgZm9yIEdsdWUgam9iIGRlcGVuZGVuY3kgbWFuYWdlbWVudCBlbmFibGluZyBtb2R1bGFyIEVUTCBkZXZlbG9wbWVudCBhbmQgY29kZSByZXVzZS4gUHJvdmlkZXMgcmVsYXRpdmUgcGF0aHMgdG8gYWRkaXRpb25hbCBHbHVlIHNjcmlwdHMgcmVmZXJlbmNlZCBieSB0aGUgbWFpbiBFVEwgc2NyaXB0IGZvciBtb2R1bGFyIGRldmVsb3BtZW50IGFuZCBjb2RlIG9yZ2FuaXphdGlvbi5cbiAgICpcbiAgICogVXNlIGNhc2VzOiBTY3JpcHQgZGVwZW5kZW5jaWVzOyBNb2R1bGFyIGRldmVsb3BtZW50OyBDb2RlIHJldXNlOyBEZXBlbmRlbmN5IG1hbmFnZW1lbnRcbiAgICpcbiAgICogQVdTOiBBZGRpdGlvbmFsIEdsdWUgc2NyaXB0cyBmb3Igam9iIGRlcGVuZGVuY2llcyBhbmQgbW9kdWxhciBFVEwgZGV2ZWxvcG1lbnRcbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSBhcnJheSBvZiB2YWxpZCBzY3JpcHQgcGF0aHMgaWYgcHJvdmlkZWQ7IGVuYWJsZXMgc2NyaXB0IGRlcGVuZGVuY2llcyBhbmQgbW9kdWxhciBkZXZlbG9wbWVudFxuICAgKiovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxTY3JpcHRzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAqIE9wdGlvbmFsIGFycmF5IG9mIGFkZGl0aW9uYWwgSkFSIGZpbGUgcGF0aHMgZm9yIEdsdWUgam9iIGxpYnJhcnkgZGVwZW5kZW5jaWVzIGVuYWJsaW5nIEphdmEgbGlicmFyeSBpbnRlZ3JhdGlvbiBhbmQgZXh0ZW5kZWQgZnVuY3Rpb25hbGl0eS4gUHJvdmlkZXMgcmVsYXRpdmUgcGF0aHMgdG8gSkFSIGZpbGVzIHJlZmVyZW5jZWQgYnkgdGhlIEVUTCBzY3JpcHQgZm9yIEphdmEgbGlicmFyeSBpbnRlZ3JhdGlvbiBhbmQgZXh0ZW5kZWQgcHJvY2Vzc2luZyBjYXBhYmlsaXRpZXMuXG4gICAqXG4gICAqIFVzZSBjYXNlczogSmF2YSBsaWJyYXJ5IGludGVncmF0aW9uOyBFeHRlbmRlZCBmdW5jdGlvbmFsaXR5OyBMaWJyYXJ5IGRlcGVuZGVuY2llczsgSkFSIGZpbGUgbWFuYWdlbWVudFxuICAgKlxuICAgKiBBV1M6IEFkZGl0aW9uYWwgSkFSIGZpbGVzIGZvciBHbHVlIGpvYiBsaWJyYXJ5IGRlcGVuZGVuY2llcyBhbmQgSmF2YSBpbnRlZ3JhdGlvblxuICAgKlxuICAgKiBWYWxpZGF0aW9uOiBNdXN0IGJlIGFycmF5IG9mIHZhbGlkIEpBUiBmaWxlIHBhdGhzIGlmIHByb3ZpZGVkOyBlbmFibGVzIEphdmEgbGlicmFyeSBpbnRlZ3JhdGlvbiBhbmQgZXh0ZW5kZWQgZnVuY3Rpb25hbGl0eVxuICAgKiovXG4gIHJlYWRvbmx5IGFkZGl0aW9uYWxKYXJzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAqIE9wdGlvbmFsIGFycmF5IG9mIGFkZGl0aW9uYWwgZmlsZSBwYXRocyBmb3IgR2x1ZSBqb2IgcmVzb3VyY2UgZGVwZW5kZW5jaWVzIGVuYWJsaW5nIGV4dGVybmFsIGZpbGUgYWNjZXNzIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50LiBQcm92aWRlcyByZWxhdGl2ZSBwYXRocyB0byBhZGRpdGlvbmFsIGZpbGVzIHJlZmVyZW5jZWQgYnkgdGhlIEVUTCBzY3JpcHQgZm9yIGV4dGVybmFsIHJlc291cmNlIGFjY2VzcyBhbmQgZmlsZSBkZXBlbmRlbmNpZXMuXG4gICAqXG4gICAqIFVzZSBjYXNlczogRmlsZSBkZXBlbmRlbmNpZXM7IEV4dGVybmFsIHJlc291cmNlczsgUmVzb3VyY2UgbWFuYWdlbWVudDsgRmlsZSBhY2Nlc3NcbiAgICpcbiAgICogQVdTOiBBZGRpdGlvbmFsIGZpbGVzIGZvciBHbHVlIGpvYiByZXNvdXJjZSBkZXBlbmRlbmNpZXMgYW5kIGV4dGVybmFsIGZpbGUgYWNjZXNzXG4gICAqXG4gICAqIFZhbGlkYXRpb246IE11c3QgYmUgYXJyYXkgb2YgdmFsaWQgZmlsZSBwYXRocyBpZiBwcm92aWRlZDsgZW5hYmxlcyBleHRlcm5hbCBmaWxlIGFjY2VzcyBhbmQgcmVzb3VyY2UgZGVwZW5kZW5jaWVzXG4gICAqKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbEZpbGVzPzogc3RyaW5nW107XG4gIC8qKlxuICAgKiBRLUVOSEFOQ0VELVBST1BFUlRZXG4gICAqIE9wdGlvbmFsIGNvbnRpbnVvdXMgbG9nZ2luZyBjb25maWd1cmF0aW9uIGZvciBHbHVlIGpvYiByZWFsLXRpbWUgbW9uaXRvcmluZyBlbmFibGluZyBsaXZlIGxvZyBzdHJlYW1pbmcgYW5kIHRyb3VibGVzaG9vdGluZyBzdXBwb3J0LiBXaGVuIGVuYWJsZWQsIHN0cmVhbXMgam9iIGxvZ3MgdG8gQ2xvdWRXYXRjaCBMb2dzIGluIHJlYWwtdGltZSBmb3IgbGl2ZSBtb25pdG9yaW5nIGFuZCB0cm91Ymxlc2hvb3RpbmcgZHVyaW5nIGpvYiBleGVjdXRpb24uXG4gICAqXG4gICAqIFVzZSBjYXNlczogUmVhbC10aW1lIG1vbml0b3Jpbmc7IExpdmUgbG9nIHN0cmVhbWluZzsgVHJvdWJsZXNob290aW5nIHN1cHBvcnQ7IE9wZXJhdGlvbmFsIHZpc2liaWxpdHlcbiAgICpcbiAgICogQVdTOiBHbHVlIGpvYiBjb250aW51b3VzIGxvZ2dpbmcgZm9yIHJlYWwtdGltZSBtb25pdG9yaW5nIGFuZCB0cm91Ymxlc2hvb3RpbmdcbiAgICpcbiAgICogVmFsaWRhdGlvbjogTXVzdCBiZSB2YWxpZCBMb2dnaW5nQ29uZmlnIGlmIHByb3ZpZGVkOyBlbmFibGVzIHJlYWwtdGltZSBsb2cgc3RyZWFtaW5nIGFuZCBtb25pdG9yaW5nXG4gICAqKi9cbiAgcmVhZG9ubHkgY29udGludW91c0xvZ2dpbmc/OiBMb2dnaW5nQ29uZmlnO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEdsdWVKb2JMM0NvbnN0cnVjdFByb3BzIGV4dGVuZHMgTWRhYUwzQ29uc3RydWN0UHJvcHMge1xuICAvKipcbiAgICogUm9sZSB3aGljaCB3aWxsIGJlIHVzZWQgdG8gZGVwbG95IHRoZSBKb2IgY29kZS4gU2hvdWxkIGJlIG9idGFpbmVkIGZyb20gdGhlIERhdGFPcHMgUHJvamVjdFxuICAgKi9cbiAgcmVhZG9ubHkgZGVwbG95bWVudFJvbGVBcm4/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgRGF0YSBPcHMgcHJvamVjdCBidWNrZXQgd2hlcmUgam9iIHJlc291cmNlcyB3aWxsIGJlIGRlcGxveWVkIGFuZCB3aGljaCB3aWxsIGJlIHVzZWQgYXMgYSB0ZW1wb3Jhcnkgam9iIGxvY2F0aW9uXG4gICAqL1xuICByZWFkb25seSBwcm9qZWN0QnVja2V0TmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIE1hcCBvZiBqb2IgbmFtZXMgdG8gam9iIGNvbmZpZ3VyYXRpb25zXG4gICAqL1xuICByZWFkb25seSBqb2JDb25maWdzOiB7IFtrZXk6IHN0cmluZ106IEpvYkNvbmZpZyB9O1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgR2x1ZSBTZWN1cml0eSBjb25maWd1cmF0aW9uIHRvIGJlIHVzZWQgZm9yIGFsbCBqb2JzLiBMaWtlbHkgc3VwcGxpZWQgYnkgdGhlIERhdGFPcHMgUHJvamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5Q29uZmlndXJhdGlvbk5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBkYXRhb3BzIHByb2plY3QgdG8gd2hpY2ggdGhlIGpvYiB3aWxsIGJlIGFzc29jaWF0ZWQuXG4gICAqL1xuICByZWFkb25seSBwcm9qZWN0TmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBOb3RpZmljYXRpb24gdG9waWMgQXJuXG4gICAqL1xuICByZWFkb25seSBub3RpZmljYXRpb25Ub3BpY0Fybj86IHN0cmluZztcblxuICAvKipcbiAgICogRGF0YW9wcyBwcm9qZWN0IEtNUyBrZXkgQVJOLlxuICAgKi9cbiAgcmVhZG9ubHkgcHJvamVjdEtNU0Fybj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEdsdWVKb2JMM0NvbnN0cnVjdCBleHRlbmRzIE1kYWFMM0NvbnN0cnVjdCB7XG4gIHByb3RlY3RlZCByZWFkb25seSBwcm9wczogR2x1ZUpvYkwzQ29uc3RydWN0UHJvcHM7XG4gIHByaXZhdGUgcmVhZG9ubHkgcHJvamVjdEttc0tleTogSUtleTtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogR2x1ZUpvYkwzQ29uc3RydWN0UHJvcHMpIHtcbiAgICBzdXBlcihzY29wZSwgaWQsIHByb3BzKTtcbiAgICB0aGlzLnByb3BzID0gcHJvcHM7XG5cbiAgICBpZiAoIXRoaXMucHJvcHMuZGVwbG95bWVudFJvbGVBcm4pIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignRGVwbG95bWVudCByb2xlIEFSTiBpcyByZXF1aXJlZCBmb3Igam9iIGNvbmZpZ3VyYXRpb24nKTtcbiAgICB9XG4gICAgY29uc3QgZGVwbG95bWVudFJvbGUgPSBNZGFhUm9sZS5mcm9tUm9sZUFybih0aGlzLnNjb3BlLCBgZGVwbG95bWVudC1yb2xlYCwgdGhpcy5wcm9wcy5kZXBsb3ltZW50Um9sZUFybik7XG4gICAgaWYgKCF0aGlzLnByb3BzLnByb2plY3RCdWNrZXROYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb2plY3QgYnVja2V0IG5hbWUgaXMgcmVxdWlyZWQgZm9yIGpvYiBjb25maWd1cmF0aW9uJyk7XG4gICAgfVxuICAgIGNvbnN0IHByb2plY3RCdWNrZXQgPSBNZGFhQnVja2V0LmZyb21CdWNrZXROYW1lKHRoaXMuc2NvcGUsIGBwcm9qZWN0LWJ1Y2tldGAsIHRoaXMucHJvcHMucHJvamVjdEJ1Y2tldE5hbWUpO1xuICAgIGlmICghdGhpcy5wcm9wcy5wcm9qZWN0S01TQXJuKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ1Byb2plY3QgS01TIEtleSBpcyByZXF1aXJlZCBmb3Igam9iIGNvbmZpZ3VyYXRpb24nKTtcbiAgICB9XG4gICAgdGhpcy5wcm9qZWN0S21zS2V5ID0gS2V5LmZyb21LZXlBcm4odGhpcywgdGhpcy5wcm9wcy5wcm9qZWN0TmFtZSwgdGhpcy5wcm9wcy5wcm9qZWN0S01TQXJuKTtcblxuICAgIC8vIEJ1aWxkIG91ciBqb2JzIVxuICAgIGNvbnN0IGFsbEpvYnMgPSB0aGlzLnByb3BzLmpvYkNvbmZpZ3M7XG4gICAgT2JqZWN0LmtleXMoYWxsSm9icykuZm9yRWFjaChqb2JOYW1lID0+IHtcbiAgICAgIGNvbnN0IGpvYkNvbmZpZyA9IGFsbEpvYnNbam9iTmFtZV07XG4gICAgICB0aGlzLmNyZWF0ZUpvYihqb2JOYW1lLCBqb2JDb25maWcsIGRlcGxveW1lbnRSb2xlLCBwcm9qZWN0QnVja2V0KTtcbiAgICB9KTtcbiAgICAvL0NESyBTMyBEZXBsb3ltZW50IGF1dG9tYXRpY2FsbHkgYWRkcyBpbmxpbmUgcG9saWN5IHRvIHByb2plY3QgZGVwbG95bWVudCByb2xlLlxuICAgIHRoaXMuc2NvcGUubm9kZS5jaGlsZHJlbi5mb3JFYWNoKGNoaWxkID0+IHtcbiAgICAgIGlmIChjaGlsZC5ub2RlLmlkLnN0YXJ0c1dpdGgoJ2RlcGxveW1lbnQtcm9sZScpKSB7XG4gICAgICAgIE1kYWFOYWdTdXBwcmVzc2lvbnMuYWRkQ29kZVJlc291cmNlU3VwcHJlc3Npb25zKFxuICAgICAgICAgIGNoaWxkLFxuICAgICAgICAgIFtcbiAgICAgICAgICAgIHsgaWQ6ICdBd3NTb2x1dGlvbnMtSUFNNScsIHJlYXNvbjogJ0lubGluZSBwb2xpY3kgdXNlZCBvbmx5IGZvciBkZXBsb3ltZW50LicgfSxcbiAgICAgICAgICAgIHsgaWQ6ICdOSVNULjgwMC41My5SNS1JQU1Ob0lubGluZVBvbGljeScsIHJlYXNvbjogJ1BvbGljeSB1c2VkIG9ubHkgZm9yIGRlcGxveW1lbnQuJyB9LFxuICAgICAgICAgICAgeyBpZDogJ0hJUEFBLlNlY3VyaXR5LUlBTU5vSW5saW5lUG9saWN5JywgcmVhc29uOiAnUG9saWN5IHVzZWQgb25seSBmb3IgZGVwbG95bWVudC4nIH0sXG4gICAgICAgICAgICB7IGlkOiAnUENJLkRTUy4zMjEtSUFNTm9JbmxpbmVQb2xpY3knLCByZWFzb246ICdQb2xpY3kgdXNlZCBvbmx5IGZvciBkZXBsb3ltZW50LicgfSxcbiAgICAgICAgICBdLFxuICAgICAgICAgIHRydWUsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGRlcGxveUFkZGl0aW9uYWxGaWxlcyhcbiAgICBhZGRpdGlvbmFsRmlsZXNTb3VyY2VzOiBJU291cmNlW10sXG4gICAgcHJvamVjdEJ1Y2tldDogSUJ1Y2tldCxcbiAgICBkZXBsb3ltZW50Um9sZTogSVJvbGUsXG4gICAgZGVwbG95bWVudElkOiBzdHJpbmcsXG4gICAgZGVwbG95bWVudFBhdGg6IHN0cmluZyxcbiAgICBleHRyYWN0OiBib29sZWFuLFxuICApOiBCdWNrZXREZXBsb3ltZW50IHtcbiAgICAvLyBEZXBsb3kgU291cmNlIGFzc2V0KHMpIHRvIC9kZXBsb3ltZW50L2xpYnMvPGpvYj4gbG9jYXRpb24uXG4gICAgcmV0dXJuIG5ldyBCdWNrZXREZXBsb3ltZW50KHRoaXMuc2NvcGUsIGRlcGxveW1lbnRJZCwge1xuICAgICAgc291cmNlczogYWRkaXRpb25hbEZpbGVzU291cmNlcyxcbiAgICAgIGRlc3RpbmF0aW9uQnVja2V0OiBwcm9qZWN0QnVja2V0LFxuICAgICAgZGVzdGluYXRpb25LZXlQcmVmaXg6IGRlcGxveW1lbnRQYXRoLFxuICAgICAgcm9sZTogZGVwbG95bWVudFJvbGUsXG4gICAgICBleHRyYWN0OiBleHRyYWN0LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRBZGRpdGlvbmFsU2NyaXB0cyhcbiAgICBqb2JOYW1lOiBzdHJpbmcsXG4gICAgam9iQ29uZmlnOiBKb2JDb25maWcsXG4gICAgcHJvamVjdEJ1Y2tldDogSUJ1Y2tldCxcbiAgICBkZXBsb3ltZW50Um9sZTogSVJvbGUsXG4gICAgZGVmYXVsdEFyZ3VtZW50czogQ29uZmlndXJhdGlvbkVsZW1lbnQsXG4gICkge1xuICAgIGlmIChqb2JDb25maWcuYWRkaXRpb25hbFNjcmlwdHMpIHtcbiAgICAgIC8qKlxuICAgICAgICogR3JvdXAgYWxsIGZpbGVzIGF0IHBhcmVudCBkaXJlY3RvcnkgbGV2ZWwuIFRoaXMgd2lsbCBhbGxvdyBjcmVhdGluZyB6aXAgbGliIGFzc2VzdHMgYXQgdmFyaW91cyBkaXJlY3RvcnkgbGV2ZWxzXG4gICAgICAgKiBleC4gJy9tYWluL3NjcmlwdDEucHknICwgJy91dGlsL3NjcmlwdDIucHknICwgJy91dGlsL3NjcmlwdDMucHknIHdpbGwgY3JlYXRlIDIgemlwIGZpbGVzIHJlcHJlc2VudGluZyAnbWFpbicgYW5kICd1dGlscydcbiAgICAgICAqICAqL1xuICAgICAgY29uc3QgZGlyZWN0b3J5VG9GaWxlOiB7IFtmaWxlUGF0aDogc3RyaW5nXTogc3RyaW5nW10gfSA9IHt9O1xuICAgICAgam9iQ29uZmlnLmFkZGl0aW9uYWxTY3JpcHRzLmZvckVhY2goZmlsZUxvY2F0aW9uID0+IHtcbiAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmRpcm5hbWUoZmlsZUxvY2F0aW9uLnRyaW0oKSk7XG4gICAgICAgIGlmIChmaWxlUGF0aCBpbiBkaXJlY3RvcnlUb0ZpbGUpIHtcbiAgICAgICAgICBkaXJlY3RvcnlUb0ZpbGVbZmlsZVBhdGhdLnB1c2goYCEke3BhdGguYmFzZW5hbWUoZmlsZUxvY2F0aW9uLnRyaW0oKSl9YCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZGlyZWN0b3J5VG9GaWxlW2ZpbGVQYXRoXSA9IFtgISR7cGF0aC5iYXNlbmFtZShmaWxlTG9jYXRpb24udHJpbSgpKX1gXTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIENyZWF0ZSBTb3VyY2UgYXNzZXQgZm9yIGVhY2ggZGlyZWN0b3J5XG4gICAgICBjb25zdCBhZGRpdGlvbmFsRmlsZXNTb3VyY2VzID0gT2JqZWN0LmVudHJpZXMoZGlyZWN0b3J5VG9GaWxlKS5tYXAoKFtmaWxlUGF0aCwgZmlsZU5hbWVzXSkgPT4ge1xuICAgICAgICByZXR1cm4gU291cmNlLmFzc2V0KGZpbGVQYXRoLCB7IGV4Y2x1ZGU6IFsnKionLCAuLi5maWxlTmFtZXNdIH0pO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBkZXBsb3ltZW50UGF0aCA9IGBkZXBsb3ltZW50L2xpYnMvJHtqb2JOYW1lfWA7XG4gICAgICBjb25zdCBhZGRpdGlvbmFsRmlsZURlcGxveW1lbnQgPSB0aGlzLmRlcGxveUFkZGl0aW9uYWxGaWxlcyhcbiAgICAgICAgYWRkaXRpb25hbEZpbGVzU291cmNlcyxcbiAgICAgICAgcHJvamVjdEJ1Y2tldCxcbiAgICAgICAgZGVwbG95bWVudFJvbGUsXG4gICAgICAgIGRlcGxveW1lbnRQYXRoLFxuICAgICAgICBgam9iLWRlcGxveW1lbnQtJHtqb2JOYW1lfS1hZGRpdGlvbmFsLXNjcmlwdGAsXG4gICAgICAgIGZhbHNlLCAvLyBHbHVlIGV4cGVjdHMgemlwIG9mIGFkZGl0aW9uYWwgc2NyaXB0cywgaGVuY2UgZGlzYWJsaW5nIHRoZSBleHRyYWN0aW9uXG4gICAgICApO1xuXG4gICAgICAvLyBFeHRyYWN0IHppcCBuYW1lKHMpIGZvciBlYWNoIHNvdXJjZSBhbmQgY3JlYXRlIGNvbW1hIHNlcGFyYXRlZCBsaXN0IG9mIHMzIGxvY2F0aW9uc1xuICAgICAgY29uc3QgbGlicmFyeVppcE5hbWVzOiBzdHJpbmdbXSA9IFtdO1xuXG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFkZGl0aW9uYWxGaWxlc1NvdXJjZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29uc3QgbGliTmFtZSA9IEZuLnNlbGVjdChpLCBhZGRpdGlvbmFsRmlsZURlcGxveW1lbnQub2JqZWN0S2V5cyk7IC8vIEV4dHJhY3QgZmlsZSBuYW1lIG9mIHppcCBjb250YWluaW5nIGFkZGl0aW9uYWwgc2NyaXB0c1xuICAgICAgICBsaWJyYXJ5WmlwTmFtZXMucHVzaChgczM6Ly8ke2FkZGl0aW9uYWxGaWxlRGVwbG95bWVudC5kZXBsb3llZEJ1Y2tldC5idWNrZXROYW1lfS8ke2RlcGxveW1lbnRQYXRofS8ke2xpYk5hbWV9YCk7XG4gICAgICB9XG5cbiAgICAgIC8vIEFkZCBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiB6aXAgZmlsZSBuYW1lcyB0byBkZWZhdWx0IGFyZ3VtZW50cy5cbiAgICAgIGlmIChkZWZhdWx0QXJndW1lbnRzWyctLWV4dHJhLXB5LWZpbGVzJ10pIHtcbiAgICAgICAgZGVmYXVsdEFyZ3VtZW50c1snLS1leHRyYS1weS1maWxlcyddICs9ICcsJyArIGxpYnJhcnlaaXBOYW1lcy5qb2luKCcsJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWZhdWx0QXJndW1lbnRzWyctLWV4dHJhLXB5LWZpbGVzJ10gPSBsaWJyYXJ5WmlwTmFtZXMuam9pbignLCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkQWRkaXRpb25hbEphcnMoXG4gICAgam9iTmFtZTogc3RyaW5nLFxuICAgIGpvYkNvbmZpZzogSm9iQ29uZmlnLFxuICAgIHByb2plY3RCdWNrZXQ6IElCdWNrZXQsXG4gICAgZGVwbG95bWVudFJvbGU6IElSb2xlLFxuICAgIGRlZmF1bHRBcmd1bWVudHM6IENvbmZpZ3VyYXRpb25FbGVtZW50LFxuICApIHtcbiAgICBpZiAoam9iQ29uZmlnLmFkZGl0aW9uYWxKYXJzKSB7XG4gICAgICAvLyBDcmVhdGUgU291cmNlIGFzc2V0IGZvciBlYWNoIGRpcmVjdG9yeVxuICAgICAgY29uc3QgYWRkaXRpb25hbEZpbGVzU291cmNlcyA9IGpvYkNvbmZpZy5hZGRpdGlvbmFsSmFycy5tYXAoZnVsbEZpbGVOYW1lID0+IHtcbiAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmRpcm5hbWUoZnVsbEZpbGVOYW1lLnRyaW0oKSk7XG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShmdWxsRmlsZU5hbWUudHJpbSgpKTtcbiAgICAgICAgcmV0dXJuIFNvdXJjZS5hc3NldChmaWxlUGF0aCwgeyBleGNsdWRlOiBbJyoqJywgYCEke2ZpbGVOYW1lfWBdIH0pO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBkZXBsb3ltZW50UGF0aCA9IGBkZXBsb3ltZW50L2xpYnMvJHtqb2JOYW1lfWA7XG5cbiAgICAgIGNvbnN0IGFkZGl0aW9uYWxGaWxlRGVwbG95bWVudCA9IHRoaXMuZGVwbG95QWRkaXRpb25hbEZpbGVzKFxuICAgICAgICBhZGRpdGlvbmFsRmlsZXNTb3VyY2VzLFxuICAgICAgICBwcm9qZWN0QnVja2V0LFxuICAgICAgICBkZXBsb3ltZW50Um9sZSxcbiAgICAgICAgYGpvYi1kZXBsb3ltZW50LSR7am9iTmFtZX0tYWRkaXRpb25hbC1qYXJgLFxuICAgICAgICBkZXBsb3ltZW50UGF0aCxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGV4dHJhSmFyTmFtZXMgPSBqb2JDb25maWcuYWRkaXRpb25hbEphcnMubWFwKGZ1bGxGaWxlTmFtZSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShmdWxsRmlsZU5hbWUudHJpbSgpKTtcbiAgICAgICAgcmV0dXJuIGBzMzovLyR7YWRkaXRpb25hbEZpbGVEZXBsb3ltZW50LmRlcGxveWVkQnVja2V0LmJ1Y2tldE5hbWV9LyR7ZGVwbG95bWVudFBhdGh9LyR7ZmlsZU5hbWV9YDtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBZGQgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgemlwIGZpbGUgbmFtZXMgdG8gZGVmYXVsdCBhcmd1bWVudHMuXG4gICAgICBpZiAoZGVmYXVsdEFyZ3VtZW50c1snLS1leHRyYS1qYXJzJ10pIHtcbiAgICAgICAgZGVmYXVsdEFyZ3VtZW50c1snLS1leHRyYS1qYXJzJ10gKz0gJywnICsgZXh0cmFKYXJOYW1lcy5qb2luKCcsJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWZhdWx0QXJndW1lbnRzWyctLWV4dHJhLWphcnMnXSA9IGV4dHJhSmFyTmFtZXMuam9pbignLCcpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYWRkQWRkaXRpb25hbEZpbGVzKFxuICAgIGpvYk5hbWU6IHN0cmluZyxcbiAgICBqb2JDb25maWc6IEpvYkNvbmZpZyxcbiAgICBwcm9qZWN0QnVja2V0OiBJQnVja2V0LFxuICAgIGRlcGxveW1lbnRSb2xlOiBJUm9sZSxcbiAgICBkZWZhdWx0QXJndW1lbnRzOiBDb25maWd1cmF0aW9uRWxlbWVudCxcbiAgKSB7XG4gICAgaWYgKGpvYkNvbmZpZy5hZGRpdGlvbmFsRmlsZXMpIHtcbiAgICAgIC8vIENyZWF0ZSBTb3VyY2UgYXNzZXQgZm9yIGVhY2ggZGlyZWN0b3J5XG4gICAgICBjb25zdCBhZGRpdGlvbmFsRmlsZXNTb3VyY2VzID0gam9iQ29uZmlnLmFkZGl0aW9uYWxGaWxlcy5tYXAoZnVsbEZpbGVOYW1lID0+IHtcbiAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmRpcm5hbWUoZnVsbEZpbGVOYW1lLnRyaW0oKSk7XG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShmdWxsRmlsZU5hbWUudHJpbSgpKTtcbiAgICAgICAgcmV0dXJuIFNvdXJjZS5hc3NldChmaWxlUGF0aCwgeyBleGNsdWRlOiBbJyoqJywgYCEke2ZpbGVOYW1lfWBdIH0pO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBkZXBsb3ltZW50UGF0aCA9IGBkZXBsb3ltZW50L2ZpbGVzLyR7am9iTmFtZX1gO1xuICAgICAgY29uc3QgYWRkaXRpb25hbEZpbGVEZXBsb3ltZW50ID0gdGhpcy5kZXBsb3lBZGRpdGlvbmFsRmlsZXMoXG4gICAgICAgIGFkZGl0aW9uYWxGaWxlc1NvdXJjZXMsXG4gICAgICAgIHByb2plY3RCdWNrZXQsXG4gICAgICAgIGRlcGxveW1lbnRSb2xlLFxuICAgICAgICBgam9iLWRlcGxveW1lbnQtJHtqb2JOYW1lfS1hZGRpdGlvbmFsLWZpbGVgLFxuICAgICAgICBkZXBsb3ltZW50UGF0aCxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICk7XG4gICAgICBjb25zdCBleHRyYUZpbGVOYW1lcyA9IGpvYkNvbmZpZy5hZGRpdGlvbmFsRmlsZXMubWFwKGZ1bGxGaWxlTmFtZSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShmdWxsRmlsZU5hbWUudHJpbSgpKTtcbiAgICAgICAgcmV0dXJuIGBzMzovLyR7YWRkaXRpb25hbEZpbGVEZXBsb3ltZW50LmRlcGxveWVkQnVja2V0LmJ1Y2tldE5hbWV9LyR7ZGVwbG95bWVudFBhdGh9LyR7ZmlsZU5hbWV9YDtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBZGQgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgemlwIGZpbGUgbmFtZXMgdG8gZGVmYXVsdCBhcmd1bWVudHMuXG4gICAgICBpZiAoZGVmYXVsdEFyZ3VtZW50c1snLS1leHRyYS1maWxlcyddKSB7XG4gICAgICAgIGRlZmF1bHRBcmd1bWVudHNbJy0tZXh0cmEtZmlsZXMnXSArPSAnLCcgKyBleHRyYUZpbGVOYW1lcy5qb2luKCcsJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWZhdWx0QXJndW1lbnRzWyctLWV4dHJhLWZpbGVzJ10gPSBleHRyYUZpbGVOYW1lcy5qb2luKCcsJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVKb2Ioam9iTmFtZTogc3RyaW5nLCBqb2JDb25maWc6IEpvYkNvbmZpZywgZGVwbG95bWVudFJvbGU6IElSb2xlLCBwcm9qZWN0QnVja2V0OiBJQnVja2V0KSB7XG4gICAgY29uc3QgZGVmYXVsdEFyZ3VtZW50cyA9IGpvYkNvbmZpZy5kZWZhdWx0QXJndW1lbnRzID8gam9iQ29uZmlnLmRlZmF1bHRBcmd1bWVudHMgOiB7fTtcbiAgICBjb25zdCBzY3JpcHRQYXRoID0gcGF0aC5kaXJuYW1lKGpvYkNvbmZpZy5jb21tYW5kLnNjcmlwdExvY2F0aW9uLnRyaW0oKSk7XG4gICAgY29uc3Qgc2NyaXB0TmFtZSA9IHBhdGguYmFzZW5hbWUoam9iQ29uZmlnLmNvbW1hbmQuc2NyaXB0TG9jYXRpb24udHJpbSgpKTtcbiAgICBjb25zdCBzY3JpcHRTb3VyY2UgPSBTb3VyY2UuYXNzZXQoc2NyaXB0UGF0aCwgeyBleGNsdWRlOiBbJyoqJywgYCEke3NjcmlwdE5hbWV9YF0gfSk7XG5cbiAgICBjb25zdCBzY3JpcHREZXBsb3ltZW50UGF0aCA9IGBkZXBsb3ltZW50L2pvYnMvJHtqb2JOYW1lfWA7XG4gICAgY29uc3Qgc2NyaXB0RGVwbG95bWVudCA9IG5ldyBCdWNrZXREZXBsb3ltZW50KHRoaXMuc2NvcGUsIGBqb2ItZGVwbG95bWVudC0ke2pvYk5hbWV9YCwge1xuICAgICAgc291cmNlczogW3NjcmlwdFNvdXJjZV0sXG4gICAgICBkZXN0aW5hdGlvbkJ1Y2tldDogcHJvamVjdEJ1Y2tldCxcbiAgICAgIGRlc3RpbmF0aW9uS2V5UHJlZml4OiBzY3JpcHREZXBsb3ltZW50UGF0aCxcbiAgICAgIHJvbGU6IGRlcGxveW1lbnRSb2xlLFxuICAgICAgZXh0cmFjdDogdHJ1ZSxcbiAgICB9KTtcblxuICAgIHRoaXMuYWRkQWRkaXRpb25hbFNjcmlwdHMoam9iTmFtZSwgam9iQ29uZmlnLCBwcm9qZWN0QnVja2V0LCBkZXBsb3ltZW50Um9sZSwgZGVmYXVsdEFyZ3VtZW50cyk7XG4gICAgdGhpcy5hZGRBZGRpdGlvbmFsSmFycyhqb2JOYW1lLCBqb2JDb25maWcsIHByb2plY3RCdWNrZXQsIGRlcGxveW1lbnRSb2xlLCBkZWZhdWx0QXJndW1lbnRzKTtcbiAgICB0aGlzLmFkZEFkZGl0aW9uYWxGaWxlcyhqb2JOYW1lLCBqb2JDb25maWcsIHByb2plY3RCdWNrZXQsIGRlcGxveW1lbnRSb2xlLCBkZWZhdWx0QXJndW1lbnRzKTtcbiAgICBNZGFhTmFnU3VwcHJlc3Npb25zLmFkZENvZGVSZXNvdXJjZVN1cHByZXNzaW9ucyhcbiAgICAgIHRoaXMuc2NvcGUsXG4gICAgICBbXG4gICAgICAgIHsgaWQ6ICdBd3NTb2x1dGlvbnMtTDEnLCByZWFzb246ICdGdW5jdGlvbiBpcyB1c2VkIG9ubHkgYXMgY3VzdG9tIHJlc291cmNlIGR1cmluZyBDREsgZGVwbG95bWVudC4nIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ05JU1QuODAwLjUzLlI1LUxhbWJkYUNvbmN1cnJlbmN5JyxcbiAgICAgICAgICByZWFzb246ICdGdW5jdGlvbiBpcyB1c2VkIG9ubHkgYXMgY3VzdG9tIHJlc291cmNlIGR1cmluZyBDREsgZGVwbG95bWVudC4nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdOSVNULjgwMC41My5SNS1MYW1iZGFJbnNpZGVWUEMnLFxuICAgICAgICAgIHJlYXNvbjogJ0Z1bmN0aW9uIGlzIHVzZWQgb25seSBhcyBjdXN0b20gcmVzb3VyY2UgZHVyaW5nIENESyBkZXBsb3ltZW50IGFuZCBpbnRlcmFjdHMgb25seSB3aXRoIFMzLicsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ05JU1QuODAwLjUzLlI1LUxhbWJkYURMUScsXG4gICAgICAgICAgcmVhc29uOlxuICAgICAgICAgICAgJ0Z1bmN0aW9uIGlzIHVzZWQgb25seSBhcyBjdXN0b20gcmVzb3VyY2UgZHVyaW5nIENESyBkZXBsb3ltZW50LiBFcnJvcnMgd2lsbCBiZSBoYW5kbGVkIGJ5IENsb3VkRm9ybWF0aW9uLicsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0hJUEFBLlNlY3VyaXR5LUxhbWJkYUNvbmN1cnJlbmN5JyxcbiAgICAgICAgICByZWFzb246ICdGdW5jdGlvbiBpcyB1c2VkIG9ubHkgYXMgY3VzdG9tIHJlc291cmNlIGR1cmluZyBDREsgZGVwbG95bWVudC4nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdQQ0kuRFNTLjMyMS1MYW1iZGFDb25jdXJyZW5jeScsXG4gICAgICAgICAgcmVhc29uOiAnRnVuY3Rpb24gaXMgdXNlZCBvbmx5IGFzIGN1c3RvbSByZXNvdXJjZSBkdXJpbmcgQ0RLIGRlcGxveW1lbnQuJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnSElQQUEuU2VjdXJpdHktTGFtYmRhSW5zaWRlVlBDJyxcbiAgICAgICAgICByZWFzb246ICdGdW5jdGlvbiBpcyB1c2VkIG9ubHkgYXMgY3VzdG9tIHJlc291cmNlIGR1cmluZyBDREsgZGVwbG95bWVudCBhbmQgaW50ZXJhY3RzIG9ubHkgd2l0aCBTMy4nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdQQ0kuRFNTLjMyMS1MYW1iZGFJbnNpZGVWUEMnLFxuICAgICAgICAgIHJlYXNvbjogJ0Z1bmN0aW9uIGlzIHVzZWQgb25seSBhcyBjdXN0b20gcmVzb3VyY2UgZHVyaW5nIENESyBkZXBsb3ltZW50IGFuZCBpbnRlcmFjdHMgb25seSB3aXRoIFMzLicsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0hJUEFBLlNlY3VyaXR5LUxhbWJkYURMUScsXG4gICAgICAgICAgcmVhc29uOlxuICAgICAgICAgICAgJ0Z1bmN0aW9uIGlzIHVzZWQgb25seSBhcyBjdXN0b20gcmVzb3VyY2UgZHVyaW5nIENESyBkZXBsb3ltZW50LiBFcnJvcnMgd2lsbCBiZSBoYW5kbGVkIGJ5IENsb3VkRm9ybWF0aW9uLicsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ1BDSS5EU1MuMzIxLUxhbWJkYURMUScsXG4gICAgICAgICAgcmVhc29uOlxuICAgICAgICAgICAgJ0Z1bmN0aW9uIGlzIHVzZWQgb25seSBhcyBjdXN0b20gcmVzb3VyY2UgZHVyaW5nIENESyBkZXBsb3ltZW50LiBFcnJvcnMgd2lsbCBiZSBoYW5kbGVkIGJ5IENsb3VkRm9ybWF0aW9uLicsXG4gICAgICAgIH0sXG4gICAgICBdLFxuICAgICAgdHJ1ZSxcbiAgICApO1xuICAgIC8vIENvbm5lY3Rpb25zIHdpbGwgcmVxdWlyZSBhbiBhcnJheSBvZiByZWZlcmVuY2VzIHdoZXJlIHRoZXkgYXJlIGRlZmluZWRcbiAgICBsZXQgY29ubmVjdGlvbnNDb25maWd1cmVkOiBDb25maWd1cmF0aW9uRWxlbWVudCB8IHVuZGVmaW5lZDtcbiAgICBpZiAoam9iQ29uZmlnLmNvbm5lY3Rpb25zKSB7XG4gICAgICBjb25uZWN0aW9uc0NvbmZpZ3VyZWQgPSB7XG4gICAgICAgIGNvbm5lY3Rpb25zOiBqb2JDb25maWcuY29ubmVjdGlvbnMsXG4gICAgICB9O1xuICAgIH1cblxuICAgIGRlZmF1bHRBcmd1bWVudHNbJy0tVGVtcERpciddID0gYHMzOi8vJHt0aGlzLnByb3BzLnByb2plY3RCdWNrZXROYW1lfS90ZW1wL2pvYnMvJHtqb2JOYW1lfWA7XG5cbiAgICAvLyBhZGQgY29udGludW91cyBsb2dnaW5nIHVubGVzcyBleHBsaWNpdGx5IGRpc2FibGVkXG4gICAgaWYgKGpvYkNvbmZpZy5jb250aW51b3VzTG9nZ2luZykge1xuICAgICAgY29uc3QgbG9nR3JvdXBOYW1lID0gam9iTmFtZTtcbiAgICAgIGNvbnN0IGxvZ0dyb3VwTmFtZVBhdGhQcmVmaXggPSAnL2F3cy9nbHVlJztcbiAgICAgIGRlZmF1bHRBcmd1bWVudHNbJy0tY29udGludW91cy1sb2ctbG9nR3JvdXAnXSA9IHRoaXMuY3JlYXRlTG9nR3JvdXAoXG4gICAgICAgIGxvZ0dyb3VwTmFtZVBhdGhQcmVmaXgsXG4gICAgICAgIGxvZ0dyb3VwTmFtZSxcbiAgICAgICAgam9iQ29uZmlnLmNvbnRpbnVvdXNMb2dnaW5nLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coYENvbnRpbnVvdXMgbG9nZ2luZyBub3QgZW5hYmxlZCBmb3Igam9iOiAke2pvYk5hbWV9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXRQYXJhbXMgPSBkZWZhdWx0QXJndW1lbnRzWyctLWlucHV0X3BhcmFtcyddO1xuICAgIGlmIChpbnB1dFBhcmFtcykge1xuICAgICAgZGVmYXVsdEFyZ3VtZW50c1snLS1pbnB1dF9wYXJhbXMnXSA9IEpTT04uc3RyaW5naWZ5KGlucHV0UGFyYW1zKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnByb3BzLnNlY3VyaXR5Q29uZmlndXJhdGlvbk5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU2VjdXJpdHkgY29uZmlndXJhdGlvbiBuYW1lIGlzIHJlcXVpcmVkIGZvciBqb2IgbW9uaXRvcmluZyBldmVudCBydWxlJyk7XG4gICAgfVxuICAgIGNvbnN0IGpvYiA9IG5ldyBNZGFhQ2ZuSm9iKHRoaXMuc2NvcGUsIGAke2pvYk5hbWV9LWpvYmAsIHtcbiAgICAgIGNvbW1hbmQ6IHtcbiAgICAgICAgbmFtZTogam9iQ29uZmlnLmNvbW1hbmQubmFtZSxcbiAgICAgICAgcHl0aG9uVmVyc2lvbjogam9iQ29uZmlnLmNvbW1hbmQucHl0aG9uVmVyc2lvbixcbiAgICAgICAgc2NyaXB0TG9jYXRpb246IGBzMzovLyR7c2NyaXB0RGVwbG95bWVudC5kZXBsb3llZEJ1Y2tldC5idWNrZXROYW1lfS8ke3NjcmlwdERlcGxveW1lbnRQYXRofS8ke3NjcmlwdE5hbWV9YCxcbiAgICAgIH0sXG4gICAgICByb2xlOiBqb2JDb25maWcuZXhlY3V0aW9uUm9sZUFybixcbiAgICAgIGFsbG9jYXRlZENhcGFjaXR5OiBqb2JDb25maWcuYWxsb2NhdGVkQ2FwYWNpdHksXG4gICAgICBjb25uZWN0aW9uczogY29ubmVjdGlvbnNDb25maWd1cmVkLFxuICAgICAgZGVmYXVsdEFyZ3VtZW50czogZGVmYXVsdEFyZ3VtZW50cyxcbiAgICAgIGRlc2NyaXB0aW9uOiBqb2JDb25maWcuZGVzY3JpcHRpb24sXG4gICAgICBleGVjdXRpb25Qcm9wZXJ0eTogam9iQ29uZmlnLmV4ZWN1dGlvblByb3BlcnR5LFxuICAgICAgZ2x1ZVZlcnNpb246IGpvYkNvbmZpZy5nbHVlVmVyc2lvbixcbiAgICAgIG1heENhcGFjaXR5OiBqb2JDb25maWcubWF4Q2FwYWNpdHksXG4gICAgICBtYXhSZXRyaWVzOiBqb2JDb25maWcubWF4UmV0cmllcyxcbiAgICAgIG5hbWU6IGpvYk5hbWUsXG4gICAgICBub3RpZmljYXRpb25Qcm9wZXJ0eTogam9iQ29uZmlnLm5vdGlmaWNhdGlvblByb3BlcnR5LFxuICAgICAgbnVtYmVyT2ZXb3JrZXJzOiBqb2JDb25maWcubnVtYmVyT2ZXb3JrZXJzLFxuICAgICAgc2VjdXJpdHlDb25maWd1cmF0aW9uOiB0aGlzLnByb3BzLnNlY3VyaXR5Q29uZmlndXJhdGlvbk5hbWUsXG4gICAgICB0aW1lb3V0OiBqb2JDb25maWcudGltZW91dCxcbiAgICAgIHdvcmtlclR5cGU6IGpvYkNvbmZpZy53b3JrZXJUeXBlLFxuICAgICAgbmFtaW5nOiB0aGlzLnByb3BzLm5hbWluZyxcbiAgICB9KTtcbiAgICBpZiAoam9iLm5hbWUpIHtcbiAgICAgIERhdGFPcHNQcm9qZWN0VXRpbHMuY3JlYXRlUHJvamVjdFNTTVBhcmFtKFxuICAgICAgICB0aGlzLnNjb3BlLFxuICAgICAgICB0aGlzLnByb3BzLm5hbWluZyxcbiAgICAgICAgdGhpcy5wcm9wcy5wcm9qZWN0TmFtZSxcbiAgICAgICAgYGpvYi9uYW1lLyR7am9iTmFtZX1gLFxuICAgICAgICBqb2IubmFtZSxcbiAgICAgICk7XG5cbiAgICAgIGNvbnN0IGV2ZW50UnVsZSA9IHRoaXMuY3JlYXRlSm9iTW9uaXRvcmluZ0V2ZW50UnVsZShgJHtqb2JOYW1lfS1tb25pdG9yYCwgW2pvYi5uYW1lXSk7XG4gICAgICBpZiAoIXRoaXMucHJvcHMubm90aWZpY2F0aW9uVG9waWNBcm4pIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdOb3RpZmljYXRpb24gdG9waWMgQVJOIGlzIHJlcXVpcmVkIGZvciBqb2IgbW9uaXRvcmluZyBldmVudCBydWxlJyk7XG4gICAgICB9XG4gICAgICBldmVudFJ1bGUuYWRkVGFyZ2V0KFxuICAgICAgICBuZXcgU25zVG9waWMoTWRhYVNuc1RvcGljLmZyb21Ub3BpY0Fybih0aGlzLnNjb3BlLCBgJHtqb2JOYW1lfS10b3BpY2AsIHRoaXMucHJvcHMubm90aWZpY2F0aW9uVG9waWNBcm4pKSxcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVKb2JNb25pdG9yaW5nRXZlbnRSdWxlKHJ1bGVOYW1lOiBzdHJpbmcsIGpvYk5hbWVzOiBzdHJpbmdbXSk6IFJ1bGUge1xuICAgIHJldHVybiBFdmVudEJyaWRnZUhlbHBlci5jcmVhdGVHbHVlTW9uaXRvcmluZ0V2ZW50UnVsZShcbiAgICAgIHRoaXMuc2NvcGUsXG4gICAgICB0aGlzLnByb3BzLm5hbWluZyxcbiAgICAgIHJ1bGVOYW1lLFxuICAgICAgJ1dvcmtmbG93IEpvYiBmYWlsdXJlIGV2ZW50cycsXG4gICAgICB7XG4gICAgICAgIGpvYk5hbWU6IGpvYk5hbWVzLFxuICAgICAgICBzdGF0ZTogWydGQUlMRUQnLCAnVElNRU9VVCcsICdTVE9QUEVEJ10sXG4gICAgICB9LFxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUxvZ0dyb3VwKGxvZ0dyb3VwTmFtZVBhdGhQcmVmaXg6IHN0cmluZywgbG9nR3JvdXBOYW1lOiBzdHJpbmcsIGxvZ2dpbmdDb25maWc6IExvZ2dpbmdDb25maWcpOiBzdHJpbmcge1xuICAgIGxldCBsb2dHcm91cFJldGVudGlvbkRheXM6IFJldGVudGlvbkRheXM7XG5cbiAgICBpZiAobG9nZ2luZ0NvbmZpZy5sb2dHcm91cFJldGVudGlvbkRheXMgIT0gMCkge1xuICAgICAgbG9nR3JvdXBSZXRlbnRpb25EYXlzID0gbG9nZ2luZ0NvbmZpZy5sb2dHcm91cFJldGVudGlvbkRheXM7XG4gICAgfSBlbHNlIHtcbiAgICAgIGxvZ0dyb3VwUmV0ZW50aW9uRGF5cyA9IFJldGVudGlvbkRheXMuSU5GSU5JVEU7XG4gICAgfVxuXG4gICAgY29uc3QgbG9nUHJvcHMgPSB7XG4gICAgICBuYW1pbmc6IHRoaXMucHJvcHMubmFtaW5nLFxuICAgICAgbG9nR3JvdXBOYW1lOiBsb2dHcm91cE5hbWUsXG4gICAgICBsb2dHcm91cE5hbWVQYXRoUHJlZml4OiBsb2dHcm91cE5hbWVQYXRoUHJlZml4LFxuICAgICAgZW5jcnlwdGlvbktleTogdGhpcy5wcm9qZWN0S21zS2V5LFxuICAgICAgcmV0ZW50aW9uOiBsb2dHcm91cFJldGVudGlvbkRheXMsXG4gICAgfTtcbiAgICBuZXcgTWRhYUxvZ0dyb3VwKHRoaXMsIGxvZ0dyb3VwTmFtZSwgbG9nUHJvcHMpO1xuICAgIC8vIGB1cGRhdGVQcm9wc2AgYWx3YXlzIHJldHVybnMgYSBwcm9wIHdpdGggYSBsb2dHcm91cE5hbWVcbiAgICByZXR1cm4gdXBkYXRlUHJvcHMobG9nUHJvcHMpLmxvZ0dyb3VwTmFtZSE7XG4gIH1cbn1cbiJdfQ==
292
+ GlueJobL3Construct[_a] = { fqn: "@aws-mdaa/dataops-job-l3-construct.GlueJobL3Construct", version: "1.5.0" };
293
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGF0YW9wcy1qb2ItbDMtY29uc3RydWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZGF0YW9wcy1qb2ItbDMtY29uc3RydWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUE7OztHQUdHO0FBRUgseUZBQTZFO0FBQzdFLHFFQUFpRTtBQUNqRSwrREFBdUQ7QUFDdkQsNkRBQW9EO0FBQ3BELDJEQUFxRDtBQUNyRCx5REFBK0U7QUFFL0UscUVBQWtGO0FBQ2xGLG1EQUEwRCxDQUFDLFNBQVM7QUFFcEUsNkJBQTZCO0FBQzdCLHVFQUEwRDtBQUMxRCw2REFBd0Q7QUFFeEQsNkNBQWlDO0FBRWpDLG1EQUFxRDtBQUNyRCwyRUFBK0Q7QUFDL0QsaURBQWdEO0FBQ2hELHVGQUFpRjtBQTRIakYsTUFBYSxrQkFBbUIsU0FBUSw4QkFBZTtJQUlyRCxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEtBQThCO1FBQ3RFLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBRW5CLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDbEMsTUFBTSxJQUFJLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFDO1FBQzNFLENBQUM7UUFDRCxNQUFNLGNBQWMsR0FBRyx5QkFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLGlCQUFpQixFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsQ0FBQztRQUN6RyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMzQixNQUFNLElBQUksS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUM7UUFDM0UsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLDBCQUFVLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLEVB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LENBQ3BELElBQUksQ0FBQyxLQUFLLEVBQ1YsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQ2pCLFFBQVEsRUFDUiw2QkFBNkIsRUFDN0I7WUFDRSxPQUFPLEVBQUUsUUFBUTtZQUNqQixLQUFLLEVBQUUsQ0FBQyxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsQ0FBQztTQUN4QyxDQUNGLENBQUM7SUFDSixDQUFDO0lBRU8sY0FBYyxDQUFDLHNCQUE4QixFQUFFLFlBQW9CLEVBQUUsYUFBNEI7UUFDdkcsSUFBSSxxQkFBb0MsQ0FBQztRQUV6QyxJQUFJLGFBQWEsQ0FBQyxxQkFBcUIsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUM3QyxxQkFBcUIsR0FBRyxhQUFhLENBQUMscUJBQXFCLENBQUM7UUFDOUQsQ0FBQzthQUFNLENBQUM7WUFDTixxQkFBcUIsR0FBRyx3QkFBYSxDQUFDLFFBQVEsQ0FBQztRQUNqRCxDQUFDO1FBRUQsTUFBTSxRQUFRLEdBQUc7WUFDZixNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNO1lBQ3pCLFlBQVksRUFBRSxZQUFZO1lBQzFCLHNCQUFzQixFQUFFLHNCQUFzQjtZQUM5QyxhQUFhLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDMUIsU0FBUyxFQUFFLHFCQUFxQjtTQUNqQyxDQUFDO1FBQ0YsSUFBSSxvQ0FBWSxDQUFDLElBQUksRUFBRSxZQUFZLEVBQUUsUUFBUSxDQUFDLENBQUM7UUFDL0MsMERBQTBEO1FBQzFELE9BQU8sSUFBQSw0QkFBVyxFQUFDLFFBQVEsQ0FBQyxDQUFDLFlBQWEsQ0FBQztJQUM3QyxDQUFDOztBQXZXSCxnREF3V0MiLCJzb3VyY2VzQ29udGVudCI6WyIvKiFcbiAqIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcbiAqL1xuXG5pbXBvcnQgeyBEYXRhT3BzUHJvamVjdFV0aWxzIH0gZnJvbSAnQGF3cy1tZGFhL2RhdGFvcHMtcHJvamVjdC1sMy1jb25zdHJ1Y3QnO1xuaW1wb3J0IHsgRXZlbnRCcmlkZ2VIZWxwZXIgfSBmcm9tICdAYXdzLW1kYWEvZXZlbnRicmlkZ2UtaGVscGVyJztcbmltcG9ydCB7IE1kYWFDZm5Kb2IgfSBmcm9tICdAYXdzLW1kYWEvZ2x1ZS1jb25zdHJ1Y3RzJztcbmltcG9ydCB7IE1kYWFSb2xlIH0gZnJvbSAnQGF3cy1tZGFhL2lhbS1jb25zdHJ1Y3RzJztcbmltcG9ydCB7IE1kYWFCdWNrZXQgfSBmcm9tICdAYXdzLW1kYWEvczMtY29uc3RydWN0cyc7XG5pbXBvcnQgeyBNZGFhTDNDb25zdHJ1Y3QsIE1kYWFMM0NvbnN0cnVjdFByb3BzIH0gZnJvbSAnQGF3cy1tZGFhL2wzLWNvbnN0cnVjdCc7XG5pbXBvcnQgeyBDZm5Kb2IgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZ2x1ZSc7XG5pbXBvcnQgeyBCdWNrZXREZXBsb3ltZW50LCBJU291cmNlLCBTb3VyY2UgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMtZGVwbG95bWVudCc7XG5pbXBvcnQgeyBNZGFhTmFnU3VwcHJlc3Npb25zIH0gZnJvbSAnQGF3cy1tZGFhL2NvbnN0cnVjdCc7IC8vTk9TT05BUlxuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gJ3BhdGgnO1xuaW1wb3J0IHsgU25zVG9waWMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzLXRhcmdldHMnO1xuaW1wb3J0IHsgTWRhYVNuc1RvcGljIH0gZnJvbSAnQGF3cy1tZGFhL3Nucy1jb25zdHJ1Y3RzJztcbmltcG9ydCB7IFJ1bGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzJztcbmltcG9ydCB7IEZuIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ29uZmlndXJhdGlvbkVsZW1lbnQgfSBmcm9tICdAYXdzLW1kYWEvY29uZmlnJztcbmltcG9ydCB7IFJldGVudGlvbkRheXMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgeyBNZGFhTG9nR3JvdXAgfSBmcm9tICdAYXdzLW1kYWEvY2xvdWR3YXRjaC1jb25zdHJ1Y3RzJztcbmltcG9ydCB7IElLZXksIEtleSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1rbXMnO1xuaW1wb3J0IHsgdXBkYXRlUHJvcHMgfSBmcm9tICdAYXdzLW1kYWEvY2xvdWR3YXRjaC1jb25zdHJ1Y3RzL2xpYi9sb2dncm91cC11dGlscyc7XG5pbXBvcnQgeyBJQnVja2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IElSb2xlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5cbmV4cG9ydCB0eXBlIEpvYkNvbW1hbmRQeXRob25WZXJzaW9uID0gJzInIHwgJzMnIHwgdW5kZWZpbmVkO1xuZXhwb3J0IHR5cGUgSm9iQ29tbWFuZE5hbWUgPSAnZ2x1ZWV0bCcgfCAncHl0aG9uc2hlbGwnO1xuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIEdsdWUgam9iIGxvZ2dpbmcgd2l0aCBDbG91ZFdhdGNoIGxvZyByZXRlbnRpb24gbWFuYWdlbWVudC5cbiAqXG4gKiBVc2UgY2FzZXM6IExvZyByZXRlbnRpb24gbWFuYWdlbWVudDsgQ29tcGxpYW5jZSByZXF1aXJlbWVudHM7IENvc3Qgb3B0aW1pemF0aW9uOyBBdWRpdCB0cmFpbCBtYW5hZ2VtZW50XG4gKlxuICogQVdTOiBDbG91ZFdhdGNoIGxvZyBncm91cCByZXRlbnRpb24gZm9yIEdsdWUgam9iIGV4ZWN1dGlvbiBsb2dzIGFuZCBtb25pdG9yaW5nXG4gKlxuICogVmFsaWRhdGlvbjogbG9nR3JvdXBSZXRlbnRpb25EYXlzIGlzIHJlcXVpcmVkIHdpdGggc3BlY2lmaWMgYWxsb3dlZCB2YWx1ZXMgZm9yIHJldGVudGlvbiBwZXJpb2RcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMb2dnaW5nQ29uZmlnIHtcbiAgLyoqIENsb3VkV2F0Y2ggbG9nIGdyb3VwIHJldGVudGlvbiBpbiBkYXlzLiBBbGxvd2VkOiAxLDMsNSw3LDE0LDMwLDYwLDkwLDEyMCwxNTAsMTgwLDM2NSw0MDAsNTQ1LDczMSwxODI3LDM2NTMsIG9yIDAuICovXG4gIHJlYWRvbmx5IGxvZ0dyb3VwUmV0ZW50aW9uRGF5czogbnVtYmVyO1xufVxuXG4vKipcbiAqIENvbmZpZ3VyYXRpb24gZm9yIGEgR2x1ZSBqb2IgY29tbWFuZCBzcGVjaWZ5aW5nIHNjcmlwdCBleGVjdXRpb24gYW5kIHJ1bnRpbWUgZW52aXJvbm1lbnQuXG4gKlxuICogVXNlIGNhc2VzOiBKb2IgY29tbWFuZCBjb25maWd1cmF0aW9uOyBTY3JpcHQgZXhlY3V0aW9uOyBSdW50aW1lIGVudmlyb25tZW50OyBFVEwgam9iIHNldHVwXG4gKlxuICogQVdTOiBHbHVlIGpvYiBjb21tYW5kIGNvbmZpZ3VyYXRpb24gZm9yIHNjcmlwdCBleGVjdXRpb24gYW5kIHJ1bnRpbWUgZW52aXJvbm1lbnRcbiAqXG4gKiBWYWxpZGF0aW9uOiBuYW1lIGFuZCBzY3JpcHRMb2NhdGlvbiBhcmUgcmVxdWlyZWQ7IHB5dGhvblZlcnNpb24gaXMgb3B0aW9uYWwgd2l0aCBzcGVjaWZpYyBjb25zdHJhaW50c1xuICovXG5leHBvcnQgaW50ZXJmYWNlIEpvYkNvbW1hbmQge1xuICAvKiogSm9iIHR5cGU6ICdnbHVlZXRsJyBmb3IgU3BhcmsgRVRMIG9yICdweXRob25zaGVsbCcgZm9yIFB5dGhvbiBzY3JpcHRzLiAqL1xuICByZWFkb25seSBuYW1lOiBKb2JDb21tYW5kTmFtZTtcbiAgLyoqIFB5dGhvbiB2ZXJzaW9uIGZvciBqb2IgcnVudGltZSAoJzInIG9yICczJykuICovXG4gIHJlYWRvbmx5IHB5dGhvblZlcnNpb24/OiBKb2JDb21tYW5kUHl0aG9uVmVyc2lvbjtcbiAgLyoqIFJlbGF0aXZlIHBhdGggdG8gdGhlIEdsdWUgc2NyaXB0IGZvciBqb2IgZXhlY3V0aW9uLiAqL1xuICByZWFkb25seSBzY3JpcHRMb2NhdGlvbjogc3RyaW5nO1xufVxuXG5leHBvcnQgdHlwZSBKb2JXb3JrZXJUeXBlID0gJ1N0YW5kYXJkJyB8ICdHLjFYJyB8ICdHLjJYJztcblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBhIEdsdWUgam9iIGluY2x1ZGluZyBleGVjdXRpb24gcm9sZXMsIGNvbW1hbmRzLCBjYXBhY2l0eSwgYW5kIG1vbml0b3JpbmcuXG4gKlxuICogVXNlIGNhc2VzOiBFVEwgam9iIGNvbmZpZ3VyYXRpb247IERhdGEgdHJhbnNmb3JtYXRpb247IEpvYiByZXNvdXJjZSBtYW5hZ2VtZW50OyBEYXRhT3BzIHByb2Nlc3NpbmdcbiAqXG4gKiBBV1M6IEdsdWUgam9iIGNvbmZpZ3VyYXRpb24gZm9yIEVUTCBwcm9jZXNzaW5nIGFuZCBkYXRhIHRyYW5zZm9ybWF0aW9uIHdvcmtmbG93c1xuICpcbiAqIFZhbGlkYXRpb246IGV4ZWN1dGlvblJvbGVBcm4sIGNvbW1hbmQsIGFuZCBkZXNjcmlwdGlvbiBhcmUgcmVxdWlyZWQ7IG90aGVyIHByb3BlcnRpZXMgYXJlIG9wdGlvbmFsIHdpdGggc3BlY2lmaWMgY29uc3RyYWludHNcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBKb2JDb25maWcge1xuICAvKiogSUFNIHJvbGUgQVJOIGZvciBHbHVlIGpvYiBleGVjdXRpb24gcGVybWlzc2lvbnMuICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblJvbGVBcm46IHN0cmluZztcbiAgLyoqIEpvYiBjb21tYW5kIGNvbmZpZ3VyYXRpb24gZGVmaW5pbmcgc2NyaXB0IGFuZCBydW50aW1lIGVudmlyb25tZW50LiAqL1xuICByZWFkb25seSBjb21tYW5kOiBKb2JDb21tYW5kO1xuICAvKiogVGVtcGxhdGUgbmFtZSBmb3IgY29uZmlndXJhdGlvbiBpbmhlcml0YW5jZS4gKi9cbiAgcmVhZG9ubHkgdGVtcGxhdGU/OiBzdHJpbmc7XG4gIC8qKiBOdW1iZXIgb2YgY2FwYWNpdHkgdW5pdHMgYWxsb2NhdGVkIHRvIHRoZSBqb2IuICovXG4gIHJlYWRvbmx5IGFsbG9jYXRlZENhcGFjaXR5PzogbnVtYmVyO1xuICAvKiogQ29ubmVjdGlvbiBuYW1lcyBmb3IgZGF0YWJhc2UgYW5kIGV4dGVybmFsIHN5c3RlbSBhY2Nlc3MuICovXG4gIHJlYWRvbmx5IGNvbm5lY3Rpb25zPzogc3RyaW5nW107XG4gIC8qKiBEZWZhdWx0IGFyZ3VtZW50cyBwYXNzZWQgdG8gdGhlIGpvYiBhdCBydW50aW1lLiAqL1xuICByZWFkb25seSBkZWZhdWx0QXJndW1lbnRzPzogQ29uZmlndXJhdGlvbkVsZW1lbnQ7XG4gIC8qKiBKb2IgZGVzY3JpcHRpb24gZm9yIGRvY3VtZW50YXRpb24gYW5kIG1hbmFnZW1lbnQuICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIC8qKiBFeGVjdXRpb24gcHJvcGVydGllcyBpbmNsdWRpbmcgbWF4aW11bSBjb25jdXJyZW50IHJ1bnMuICovXG4gIHJlYWRvbmx5IGV4ZWN1dGlvblByb3BlcnR5PzogQ2ZuSm9iLkV4ZWN1dGlvblByb3BlcnR5UHJvcGVydHk7XG4gIC8qKiBHbHVlIHJ1bnRpbWUgdmVyc2lvbiBmb3IgdGhlIGpvYi4gKi9cbiAgcmVhZG9ubHkgZ2x1ZVZlcnNpb24/OiBzdHJpbmc7XG4gIC8qKiBNYXhpbXVtIERQVSBjYXBhY2l0eSBmb3IgdGhlIGpvYi4gKi9cbiAgcmVhZG9ubHkgbWF4Q2FwYWNpdHk/OiBudW1iZXI7XG4gIC8qKiBNYXhpbXVtIHJldHJ5IGNvdW50IGJlZm9yZSBqb2IgZmFpbHVyZS4gKi9cbiAgcmVhZG9ubHkgbWF4UmV0cmllcz86IG51bWJlcjtcbiAgLyoqIE5vdGlmaWNhdGlvbiBzZXR0aW5ncyBmb3Igam9iIG1vbml0b3JpbmcgYW5kIGFsZXJ0aW5nLiAqL1xuICByZWFkb25seSBub3RpZmljYXRpb25Qcm9wZXJ0eT86IENmbkpvYi5Ob3RpZmljYXRpb25Qcm9wZXJ0eVByb3BlcnR5O1xuICAvKiogTnVtYmVyIG9mIHdvcmtlcnMgZm9yIHBhcmFsbGVsIHByb2Nlc3NpbmcuICovXG4gIHJlYWRvbmx5IG51bWJlck9mV29ya2Vycz86IG51bWJlcjtcbiAgLyoqIEpvYiB0aW1lb3V0IGluIG1pbnV0ZXMuICovXG4gIHJlYWRvbmx5IHRpbWVvdXQ/OiBudW1iZXI7XG4gIC8qKiBXb3JrZXIgdHlwZTogJ1N0YW5kYXJkJywgJ0cuMVgnLCBvciAnRy4yWCcuICovXG4gIHJlYWRvbmx5IHdvcmtlclR5cGU/OiBKb2JXb3JrZXJUeXBlO1xuICAvKiogUmVsYXRpdmUgcGF0aHMgdG8gYWRkaXRpb25hbCBQeXRob24gc2NyaXB0cyBmb3IgdGhlIGpvYi4gKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbFNjcmlwdHM/OiBzdHJpbmdbXTtcbiAgLyoqIFJlbGF0aXZlIHBhdGhzIHRvIGFkZGl0aW9uYWwgSkFSIGZpbGVzIGZvciB0aGUgam9iLiAqL1xuICByZWFkb25seSBhZGRpdGlvbmFsSmFycz86IHN0cmluZ1tdO1xuICAvKiogUmVsYXRpdmUgcGF0aHMgdG8gYWRkaXRpb25hbCBmaWxlcyBmb3IgdGhlIGpvYi4gKi9cbiAgcmVhZG9ubHkgYWRkaXRpb25hbEZpbGVzPzogc3RyaW5nW107XG4gIC8qKiBDb250aW51b3VzIGxvZ2dpbmcgY29uZmlndXJhdGlvbiBmb3IgcmVhbC10aW1lIG1vbml0b3JpbmcuICovXG4gIHJlYWRvbmx5IGNvbnRpbnVvdXNMb2dnaW5nPzogTG9nZ2luZ0NvbmZpZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBHbHVlSm9iTDNDb25zdHJ1Y3RQcm9wcyBleHRlbmRzIE1kYWFMM0NvbnN0cnVjdFByb3BzIHtcbiAgLyoqXG4gICAqIFJvbGUgd2hpY2ggd2lsbCBiZSB1c2VkIHRvIGRlcGxveSB0aGUgSm9iIGNvZGUuIFNob3VsZCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBEYXRhT3BzIFByb2plY3RcbiAgICovXG4gIHJlYWRvbmx5IGRlcGxveW1lbnRSb2xlQXJuPzogc3RyaW5nO1xuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIERhdGEgT3BzIHByb2plY3QgYnVja2V0IHdoZXJlIGpvYiByZXNvdXJjZXMgd2lsbCBiZSBkZXBsb3llZCBhbmQgd2hpY2ggd2lsbCBiZSB1c2VkIGFzIGEgdGVtcG9yYXJ5IGpvYiBsb2NhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgYnVja2V0TmFtZT86IHN0cmluZztcbiAgLyoqXG4gICAqIE1hcCBvZiBqb2IgbmFtZXMgdG8gam9iIGNvbmZpZ3VyYXRpb25zXG4gICAqL1xuICByZWFkb25seSBqb2JDb25maWdzOiB7IFtrZXk6IHN0cmluZ106IEpvYkNvbmZpZyB9O1xuICAvKipcbiAgICogTmFtZSBvZiB0aGUgR2x1ZSBTZWN1cml0eSBjb25maWd1cmF0aW9uIHRvIGJlIHVzZWQgZm9yIGFsbCBqb2JzLiBMaWtlbHkgc3VwcGxpZWQgYnkgdGhlIERhdGFPcHMgUHJvamVjdC5cbiAgICovXG4gIHJlYWRvbmx5IHNlY3VyaXR5Q29uZmlndXJhdGlvbk5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBOYW1lIG9mIHRoZSBkYXRhb3BzIHByb2plY3QgdG8gd2hpY2ggdGhlIGpvYiB3aWxsIGJlIGFzc29jaWF0ZWQuXG4gICAqL1xuICByZWFkb25seSBwcm9qZWN0TmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogTm90aWZpY2F0aW9uIHRvcGljIEFyblxuICAgKi9cbiAgcmVhZG9ubHkgbm90aWZpY2F0aW9uVG9waWNBcm4/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIERhdGFvcHMgcHJvamVjdCBLTVMga2V5IEFSTi5cbiAgICovXG4gIHJlYWRvbmx5IGttc0Fybj86IHN0cmluZztcbn1cblxuZXhwb3J0IGNsYXNzIEdsdWVKb2JMM0NvbnN0cnVjdCBleHRlbmRzIE1kYWFMM0NvbnN0cnVjdCB7XG4gIHByb3RlY3RlZCByZWFkb25seSBwcm9wczogR2x1ZUpvYkwzQ29uc3RydWN0UHJvcHM7XG4gIHByaXZhdGUgcmVhZG9ubHkga21zS2V5OiBJS2V5O1xuXG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBHbHVlSm9iTDNDb25zdHJ1Y3RQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuICAgIHRoaXMucHJvcHMgPSBwcm9wcztcblxuICAgIGlmICghdGhpcy5wcm9wcy5kZXBsb3ltZW50Um9sZUFybikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdEZXBsb3ltZW50IHJvbGUgQVJOIGlzIHJlcXVpcmVkIGZvciBqb2IgY29uZmlndXJhdGlvbicpO1xuICAgIH1cbiAgICBjb25zdCBkZXBsb3ltZW50Um9sZSA9IE1kYWFSb2xlLmZyb21Sb2xlQXJuKHRoaXMuc2NvcGUsIGBkZXBsb3ltZW50LXJvbGVgLCB0aGlzLnByb3BzLmRlcGxveW1lbnRSb2xlQXJuKTtcbiAgICBpZiAoIXRoaXMucHJvcHMuYnVja2V0TmFtZSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9qZWN0IGJ1Y2tldCBuYW1lIGlzIHJlcXVpcmVkIGZvciBqb2IgY29uZmlndXJhdGlvbicpO1xuICAgIH1cbiAgICBjb25zdCBidWNrZXQgPSBNZGFhQnVja2V0LmZyb21CdWNrZXROYW1lKHRoaXMuc2NvcGUsIGBwcm9qZWN0LWJ1Y2tldGAsIHRoaXMucHJvcHMuYnVja2V0TmFtZSk7XG4gICAgaWYgKCF0aGlzLnByb3BzLmttc0Fybikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdQcm9qZWN0IEtNUyBLZXkgaXMgcmVxdWlyZWQgZm9yIGpvYiBjb25maWd1cmF0aW9uJyk7XG4gICAgfVxuICAgIHRoaXMua21zS2V5ID0gS2V5LmZyb21LZXlBcm4odGhpcywgdGhpcy5wcm9wcy5wcm9qZWN0TmFtZSA/PyAna21zLWtleScsIHRoaXMucHJvcHMua21zQXJuKTtcblxuICAgIC8vIEJ1aWxkIG91ciBqb2JzIVxuICAgIGNvbnN0IGFsbEpvYnMgPSB0aGlzLnByb3BzLmpvYkNvbmZpZ3M7XG4gICAgT2JqZWN0LmtleXMoYWxsSm9icykuZm9yRWFjaChqb2JOYW1lID0+IHtcbiAgICAgIGNvbnN0IGpvYkNvbmZpZyA9IGFsbEpvYnNbam9iTmFtZV07XG4gICAgICB0aGlzLmNyZWF0ZUpvYihqb2JOYW1lLCBqb2JDb25maWcsIGRlcGxveW1lbnRSb2xlLCBidWNrZXQpO1xuICAgIH0pO1xuICAgIC8vQ0RLIFMzIERlcGxveW1lbnQgYXV0b21hdGljYWxseSBhZGRzIGlubGluZSBwb2xpY3kgdG8gcHJvamVjdCBkZXBsb3ltZW50IHJvbGUuXG4gICAgdGhpcy5zY29wZS5ub2RlLmNoaWxkcmVuLmZvckVhY2goY2hpbGQgPT4ge1xuICAgICAgaWYgKGNoaWxkLm5vZGUuaWQuc3RhcnRzV2l0aCgnZGVwbG95bWVudC1yb2xlJykpIHtcbiAgICAgICAgTWRhYU5hZ1N1cHByZXNzaW9ucy5hZGRDb2RlUmVzb3VyY2VTdXBwcmVzc2lvbnMoXG4gICAgICAgICAgY2hpbGQsXG4gICAgICAgICAgW1xuICAgICAgICAgICAgeyBpZDogJ0F3c1NvbHV0aW9ucy1JQU01JywgcmVhc29uOiAnSW5saW5lIHBvbGljeSB1c2VkIG9ubHkgZm9yIGRlcGxveW1lbnQuJyB9LFxuICAgICAgICAgICAgeyBpZDogJ05JU1QuODAwLjUzLlI1LUlBTU5vSW5saW5lUG9saWN5JywgcmVhc29uOiAnUG9saWN5IHVzZWQgb25seSBmb3IgZGVwbG95bWVudC4nIH0sXG4gICAgICAgICAgICB7IGlkOiAnSElQQUEuU2VjdXJpdHktSUFNTm9JbmxpbmVQb2xpY3knLCByZWFzb246ICdQb2xpY3kgdXNlZCBvbmx5IGZvciBkZXBsb3ltZW50LicgfSxcbiAgICAgICAgICAgIHsgaWQ6ICdQQ0kuRFNTLjMyMS1JQU1Ob0lubGluZVBvbGljeScsIHJlYXNvbjogJ1BvbGljeSB1c2VkIG9ubHkgZm9yIGRlcGxveW1lbnQuJyB9LFxuICAgICAgICAgIF0sXG4gICAgICAgICAgdHJ1ZSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZGVwbG95QWRkaXRpb25hbEZpbGVzKFxuICAgIGFkZGl0aW9uYWxGaWxlc1NvdXJjZXM6IElTb3VyY2VbXSxcbiAgICBidWNrZXQ6IElCdWNrZXQsXG4gICAgZGVwbG95bWVudFJvbGU6IElSb2xlLFxuICAgIGRlcGxveW1lbnRJZDogc3RyaW5nLFxuICAgIGRlcGxveW1lbnRQYXRoOiBzdHJpbmcsXG4gICAgZXh0cmFjdDogYm9vbGVhbixcbiAgKTogQnVja2V0RGVwbG95bWVudCB7XG4gICAgLy8gRGVwbG95IFNvdXJjZSBhc3NldChzKSB0byAvZGVwbG95bWVudC9saWJzLzxqb2I+IGxvY2F0aW9uLlxuICAgIHJldHVybiBuZXcgQnVja2V0RGVwbG95bWVudCh0aGlzLnNjb3BlLCBkZXBsb3ltZW50SWQsIHtcbiAgICAgIHNvdXJjZXM6IGFkZGl0aW9uYWxGaWxlc1NvdXJjZXMsXG4gICAgICBkZXN0aW5hdGlvbkJ1Y2tldDogYnVja2V0LFxuICAgICAgZGVzdGluYXRpb25LZXlQcmVmaXg6IGRlcGxveW1lbnRQYXRoLFxuICAgICAgcm9sZTogZGVwbG95bWVudFJvbGUsXG4gICAgICBleHRyYWN0OiBleHRyYWN0LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBhZGRBZGRpdGlvbmFsU2NyaXB0cyhcbiAgICBqb2JOYW1lOiBzdHJpbmcsXG4gICAgam9iQ29uZmlnOiBKb2JDb25maWcsXG4gICAgYnVja2V0OiBJQnVja2V0LFxuICAgIGRlcGxveW1lbnRSb2xlOiBJUm9sZSxcbiAgICBkZWZhdWx0QXJndW1lbnRzOiBDb25maWd1cmF0aW9uRWxlbWVudCxcbiAgKSB7XG4gICAgaWYgKGpvYkNvbmZpZy5hZGRpdGlvbmFsU2NyaXB0cykge1xuICAgICAgLyoqXG4gICAgICAgKiBHcm91cCBhbGwgZmlsZXMgYXQgcGFyZW50IGRpcmVjdG9yeSBsZXZlbC4gVGhpcyB3aWxsIGFsbG93IGNyZWF0aW5nIHppcCBsaWIgYXNzZXN0cyBhdCB2YXJpb3VzIGRpcmVjdG9yeSBsZXZlbHNcbiAgICAgICAqIGV4LiAnL21haW4vc2NyaXB0MS5weScgLCAnL3V0aWwvc2NyaXB0Mi5weScgLCAnL3V0aWwvc2NyaXB0My5weScgd2lsbCBjcmVhdGUgMiB6aXAgZmlsZXMgcmVwcmVzZW50aW5nICdtYWluJyBhbmQgJ3V0aWxzJ1xuICAgICAgICogICovXG4gICAgICBjb25zdCBkaXJlY3RvcnlUb0ZpbGU6IHsgW2ZpbGVQYXRoOiBzdHJpbmddOiBzdHJpbmdbXSB9ID0ge307XG4gICAgICBqb2JDb25maWcuYWRkaXRpb25hbFNjcmlwdHMuZm9yRWFjaChmaWxlTG9jYXRpb24gPT4ge1xuICAgICAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguZGlybmFtZShmaWxlTG9jYXRpb24udHJpbSgpKTtcbiAgICAgICAgaWYgKGZpbGVQYXRoIGluIGRpcmVjdG9yeVRvRmlsZSkge1xuICAgICAgICAgIGRpcmVjdG9yeVRvRmlsZVtmaWxlUGF0aF0ucHVzaChgISR7cGF0aC5iYXNlbmFtZShmaWxlTG9jYXRpb24udHJpbSgpKX1gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBkaXJlY3RvcnlUb0ZpbGVbZmlsZVBhdGhdID0gW2AhJHtwYXRoLmJhc2VuYW1lKGZpbGVMb2NhdGlvbi50cmltKCkpfWBdO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgLy8gQ3JlYXRlIFNvdXJjZSBhc3NldCBmb3IgZWFjaCBkaXJlY3RvcnlcbiAgICAgIGNvbnN0IGFkZGl0aW9uYWxGaWxlc1NvdXJjZXMgPSBPYmplY3QuZW50cmllcyhkaXJlY3RvcnlUb0ZpbGUpLm1hcCgoW2ZpbGVQYXRoLCBmaWxlTmFtZXNdKSA9PiB7XG4gICAgICAgIHJldHVybiBTb3VyY2UuYXNzZXQoZmlsZVBhdGgsIHsgZXhjbHVkZTogWycqKicsIC4uLmZpbGVOYW1lc10gfSk7XG4gICAgICB9KTtcbiAgICAgIGNvbnN0IGRlcGxveW1lbnRQYXRoID0gYGRlcGxveW1lbnQvbGlicy8ke2pvYk5hbWV9YDtcbiAgICAgIGNvbnN0IGFkZGl0aW9uYWxGaWxlRGVwbG95bWVudCA9IHRoaXMuZGVwbG95QWRkaXRpb25hbEZpbGVzKFxuICAgICAgICBhZGRpdGlvbmFsRmlsZXNTb3VyY2VzLFxuICAgICAgICBidWNrZXQsXG4gICAgICAgIGRlcGxveW1lbnRSb2xlLFxuICAgICAgICBgam9iLWRlcGxveW1lbnQtJHtqb2JOYW1lfS1hZGRpdGlvbmFsLXNjcmlwdGAsXG4gICAgICAgIGRlcGxveW1lbnRQYXRoLFxuICAgICAgICBmYWxzZSwgLy8gR2x1ZSBleHBlY3RzIHppcCBvZiBhZGRpdGlvbmFsIHNjcmlwdHMsIGhlbmNlIGRpc2FibGluZyB0aGUgZXh0cmFjdGlvblxuICAgICAgKTtcblxuICAgICAgLy8gRXh0cmFjdCB6aXAgbmFtZShzKSBmb3IgZWFjaCBzb3VyY2UgYW5kIGNyZWF0ZSBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiBzMyBsb2NhdGlvbnNcbiAgICAgIGNvbnN0IGxpYnJhcnlaaXBOYW1lczogc3RyaW5nW10gPSBbXTtcblxuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhZGRpdGlvbmFsRmlsZXNTb3VyY2VzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIGNvbnN0IGxpYk5hbWUgPSBGbi5zZWxlY3QoaSwgYWRkaXRpb25hbEZpbGVEZXBsb3ltZW50Lm9iamVjdEtleXMpOyAvLyBFeHRyYWN0IGZpbGUgbmFtZSBvZiB6aXAgY29udGFpbmluZyBhZGRpdGlvbmFsIHNjcmlwdHNcbiAgICAgICAgbGlicmFyeVppcE5hbWVzLnB1c2goYHMzOi8vJHthZGRpdGlvbmFsRmlsZURlcGxveW1lbnQuZGVwbG95ZWRCdWNrZXQuYnVja2V0TmFtZX0vJHtkZXBsb3ltZW50UGF0aH0vJHtsaWJOYW1lfWApO1xuICAgICAgfVxuXG4gICAgICAvLyBBZGQgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgemlwIGZpbGUgbmFtZXMgdG8gZGVmYXVsdCBhcmd1bWVudHMuXG4gICAgICBpZiAoZGVmYXVsdEFyZ3VtZW50c1snLS1leHRyYS1weS1maWxlcyddKSB7XG4gICAgICAgIGRlZmF1bHRBcmd1bWVudHNbJy0tZXh0cmEtcHktZmlsZXMnXSArPSAnLCcgKyBsaWJyYXJ5WmlwTmFtZXMuam9pbignLCcpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGVmYXVsdEFyZ3VtZW50c1snLS1leHRyYS1weS1maWxlcyddID0gbGlicmFyeVppcE5hbWVzLmpvaW4oJywnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFkZEFkZGl0aW9uYWxKYXJzKFxuICAgIGpvYk5hbWU6IHN0cmluZyxcbiAgICBqb2JDb25maWc6IEpvYkNvbmZpZyxcbiAgICBidWNrZXQ6IElCdWNrZXQsXG4gICAgZGVwbG95bWVudFJvbGU6IElSb2xlLFxuICAgIGRlZmF1bHRBcmd1bWVudHM6IENvbmZpZ3VyYXRpb25FbGVtZW50LFxuICApIHtcbiAgICBpZiAoam9iQ29uZmlnLmFkZGl0aW9uYWxKYXJzKSB7XG4gICAgICAvLyBDcmVhdGUgU291cmNlIGFzc2V0IGZvciBlYWNoIGRpcmVjdG9yeVxuICAgICAgY29uc3QgYWRkaXRpb25hbEZpbGVzU291cmNlcyA9IGpvYkNvbmZpZy5hZGRpdGlvbmFsSmFycy5tYXAoZnVsbEZpbGVOYW1lID0+IHtcbiAgICAgICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmRpcm5hbWUoZnVsbEZpbGVOYW1lLnRyaW0oKSk7XG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShmdWxsRmlsZU5hbWUudHJpbSgpKTtcbiAgICAgICAgcmV0dXJuIFNvdXJjZS5hc3NldChmaWxlUGF0aCwgeyBleGNsdWRlOiBbJyoqJywgYCEke2ZpbGVOYW1lfWBdIH0pO1xuICAgICAgfSk7XG4gICAgICBjb25zdCBkZXBsb3ltZW50UGF0aCA9IGBkZXBsb3ltZW50L2xpYnMvJHtqb2JOYW1lfWA7XG5cbiAgICAgIGNvbnN0IGFkZGl0aW9uYWxGaWxlRGVwbG95bWVudCA9IHRoaXMuZGVwbG95QWRkaXRpb25hbEZpbGVzKFxuICAgICAgICBhZGRpdGlvbmFsRmlsZXNTb3VyY2VzLFxuICAgICAgICBidWNrZXQsXG4gICAgICAgIGRlcGxveW1lbnRSb2xlLFxuICAgICAgICBgam9iLWRlcGxveW1lbnQtJHtqb2JOYW1lfS1hZGRpdGlvbmFsLWphcmAsXG4gICAgICAgIGRlcGxveW1lbnRQYXRoLFxuICAgICAgICB0cnVlLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgZXh0cmFKYXJOYW1lcyA9IGpvYkNvbmZpZy5hZGRpdGlvbmFsSmFycy5tYXAoZnVsbEZpbGVOYW1lID0+IHtcbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBwYXRoLmJhc2VuYW1lKGZ1bGxGaWxlTmFtZS50cmltKCkpO1xuICAgICAgICByZXR1cm4gYHMzOi8vJHthZGRpdGlvbmFsRmlsZURlcGxveW1lbnQuZGVwbG95ZWRCdWNrZXQuYnVja2V0TmFtZX0vJHtkZXBsb3ltZW50UGF0aH0vJHtmaWxlTmFtZX1gO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIEFkZCBjb21tYSBzZXBhcmF0ZWQgbGlzdCBvZiB6aXAgZmlsZSBuYW1lcyB0byBkZWZhdWx0IGFyZ3VtZW50cy5cbiAgICAgIGlmIChkZWZhdWx0QXJndW1lbnRzWyctLWV4dHJhLWphcnMnXSkge1xuICAgICAgICBkZWZhdWx0QXJndW1lbnRzWyctLWV4dHJhLWphcnMnXSArPSAnLCcgKyBleHRyYUphck5hbWVzLmpvaW4oJywnKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRlZmF1bHRBcmd1bWVudHNbJy0tZXh0cmEtamFycyddID0gZXh0cmFKYXJOYW1lcy5qb2luKCcsJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhZGRBZGRpdGlvbmFsRmlsZXMoXG4gICAgam9iTmFtZTogc3RyaW5nLFxuICAgIGpvYkNvbmZpZzogSm9iQ29uZmlnLFxuICAgIGJ1Y2tldDogSUJ1Y2tldCxcbiAgICBkZXBsb3ltZW50Um9sZTogSVJvbGUsXG4gICAgZGVmYXVsdEFyZ3VtZW50czogQ29uZmlndXJhdGlvbkVsZW1lbnQsXG4gICkge1xuICAgIGlmIChqb2JDb25maWcuYWRkaXRpb25hbEZpbGVzKSB7XG4gICAgICAvLyBDcmVhdGUgU291cmNlIGFzc2V0IGZvciBlYWNoIGRpcmVjdG9yeVxuICAgICAgY29uc3QgYWRkaXRpb25hbEZpbGVzU291cmNlcyA9IGpvYkNvbmZpZy5hZGRpdGlvbmFsRmlsZXMubWFwKGZ1bGxGaWxlTmFtZSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5kaXJuYW1lKGZ1bGxGaWxlTmFtZS50cmltKCkpO1xuICAgICAgICBjb25zdCBmaWxlTmFtZSA9IHBhdGguYmFzZW5hbWUoZnVsbEZpbGVOYW1lLnRyaW0oKSk7XG4gICAgICAgIHJldHVybiBTb3VyY2UuYXNzZXQoZmlsZVBhdGgsIHsgZXhjbHVkZTogWycqKicsIGAhJHtmaWxlTmFtZX1gXSB9KTtcbiAgICAgIH0pO1xuICAgICAgY29uc3QgZGVwbG95bWVudFBhdGggPSBgZGVwbG95bWVudC9maWxlcy8ke2pvYk5hbWV9YDtcbiAgICAgIGNvbnN0IGFkZGl0aW9uYWxGaWxlRGVwbG95bWVudCA9IHRoaXMuZGVwbG95QWRkaXRpb25hbEZpbGVzKFxuICAgICAgICBhZGRpdGlvbmFsRmlsZXNTb3VyY2VzLFxuICAgICAgICBidWNrZXQsXG4gICAgICAgIGRlcGxveW1lbnRSb2xlLFxuICAgICAgICBgam9iLWRlcGxveW1lbnQtJHtqb2JOYW1lfS1hZGRpdGlvbmFsLWZpbGVgLFxuICAgICAgICBkZXBsb3ltZW50UGF0aCxcbiAgICAgICAgdHJ1ZSxcbiAgICAgICk7XG4gICAgICBjb25zdCBleHRyYUZpbGVOYW1lcyA9IGpvYkNvbmZpZy5hZGRpdGlvbmFsRmlsZXMubWFwKGZ1bGxGaWxlTmFtZSA9PiB7XG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gcGF0aC5iYXNlbmFtZShmdWxsRmlsZU5hbWUudHJpbSgpKTtcbiAgICAgICAgcmV0dXJuIGBzMzovLyR7YWRkaXRpb25hbEZpbGVEZXBsb3ltZW50LmRlcGxveWVkQnVja2V0LmJ1Y2tldE5hbWV9LyR7ZGVwbG95bWVudFBhdGh9LyR7ZmlsZU5hbWV9YDtcbiAgICAgIH0pO1xuXG4gICAgICAvLyBBZGQgY29tbWEgc2VwYXJhdGVkIGxpc3Qgb2YgemlwIGZpbGUgbmFtZXMgdG8gZGVmYXVsdCBhcmd1bWVudHMuXG4gICAgICBpZiAoZGVmYXVsdEFyZ3VtZW50c1snLS1leHRyYS1maWxlcyddKSB7XG4gICAgICAgIGRlZmF1bHRBcmd1bWVudHNbJy0tZXh0cmEtZmlsZXMnXSArPSAnLCcgKyBleHRyYUZpbGVOYW1lcy5qb2luKCcsJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBkZWZhdWx0QXJndW1lbnRzWyctLWV4dHJhLWZpbGVzJ10gPSBleHRyYUZpbGVOYW1lcy5qb2luKCcsJyk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVKb2Ioam9iTmFtZTogc3RyaW5nLCBqb2JDb25maWc6IEpvYkNvbmZpZywgZGVwbG95bWVudFJvbGU6IElSb2xlLCBidWNrZXQ6IElCdWNrZXQpIHtcbiAgICBjb25zdCBkZWZhdWx0QXJndW1lbnRzID0gam9iQ29uZmlnLmRlZmF1bHRBcmd1bWVudHMgPyBqb2JDb25maWcuZGVmYXVsdEFyZ3VtZW50cyA6IHt9O1xuICAgIGNvbnN0IHNjcmlwdFBhdGggPSBwYXRoLmRpcm5hbWUoam9iQ29uZmlnLmNvbW1hbmQuc2NyaXB0TG9jYXRpb24udHJpbSgpKTtcbiAgICBjb25zdCBzY3JpcHROYW1lID0gcGF0aC5iYXNlbmFtZShqb2JDb25maWcuY29tbWFuZC5zY3JpcHRMb2NhdGlvbi50cmltKCkpO1xuICAgIGNvbnN0IHNjcmlwdFNvdXJjZSA9IFNvdXJjZS5hc3NldChzY3JpcHRQYXRoLCB7IGV4Y2x1ZGU6IFsnKionLCBgISR7c2NyaXB0TmFtZX1gXSB9KTtcblxuICAgIGNvbnN0IHNjcmlwdERlcGxveW1lbnRQYXRoID0gYGRlcGxveW1lbnQvam9icy8ke2pvYk5hbWV9YDtcbiAgICBjb25zdCBzY3JpcHREZXBsb3ltZW50ID0gbmV3IEJ1Y2tldERlcGxveW1lbnQodGhpcy5zY29wZSwgYGpvYi1kZXBsb3ltZW50LSR7am9iTmFtZX1gLCB7XG4gICAgICBzb3VyY2VzOiBbc2NyaXB0U291cmNlXSxcbiAgICAgIGRlc3RpbmF0aW9uQnVja2V0OiBidWNrZXQsXG4gICAgICBkZXN0aW5hdGlvbktleVByZWZpeDogc2NyaXB0RGVwbG95bWVudFBhdGgsXG4gICAgICByb2xlOiBkZXBsb3ltZW50Um9sZSxcbiAgICAgIGV4dHJhY3Q6IHRydWUsXG4gICAgfSk7XG5cbiAgICB0aGlzLmFkZEFkZGl0aW9uYWxTY3JpcHRzKGpvYk5hbWUsIGpvYkNvbmZpZywgYnVja2V0LCBkZXBsb3ltZW50Um9sZSwgZGVmYXVsdEFyZ3VtZW50cyk7XG4gICAgdGhpcy5hZGRBZGRpdGlvbmFsSmFycyhqb2JOYW1lLCBqb2JDb25maWcsIGJ1Y2tldCwgZGVwbG95bWVudFJvbGUsIGRlZmF1bHRBcmd1bWVudHMpO1xuICAgIHRoaXMuYWRkQWRkaXRpb25hbEZpbGVzKGpvYk5hbWUsIGpvYkNvbmZpZywgYnVja2V0LCBkZXBsb3ltZW50Um9sZSwgZGVmYXVsdEFyZ3VtZW50cyk7XG4gICAgTWRhYU5hZ1N1cHByZXNzaW9ucy5hZGRDb2RlUmVzb3VyY2VTdXBwcmVzc2lvbnMoXG4gICAgICB0aGlzLnNjb3BlLFxuICAgICAgW1xuICAgICAgICB7IGlkOiAnQXdzU29sdXRpb25zLUwxJywgcmVhc29uOiAnRnVuY3Rpb24gaXMgdXNlZCBvbmx5IGFzIGN1c3RvbSByZXNvdXJjZSBkdXJpbmcgQ0RLIGRlcGxveW1lbnQuJyB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdOSVNULjgwMC41My5SNS1MYW1iZGFDb25jdXJyZW5jeScsXG4gICAgICAgICAgcmVhc29uOiAnRnVuY3Rpb24gaXMgdXNlZCBvbmx5IGFzIGN1c3RvbSByZXNvdXJjZSBkdXJpbmcgQ0RLIGRlcGxveW1lbnQuJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnTklTVC44MDAuNTMuUjUtTGFtYmRhSW5zaWRlVlBDJyxcbiAgICAgICAgICByZWFzb246ICdGdW5jdGlvbiBpcyB1c2VkIG9ubHkgYXMgY3VzdG9tIHJlc291cmNlIGR1cmluZyBDREsgZGVwbG95bWVudCBhbmQgaW50ZXJhY3RzIG9ubHkgd2l0aCBTMy4nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdOSVNULjgwMC41My5SNS1MYW1iZGFETFEnLFxuICAgICAgICAgIHJlYXNvbjpcbiAgICAgICAgICAgICdGdW5jdGlvbiBpcyB1c2VkIG9ubHkgYXMgY3VzdG9tIHJlc291cmNlIGR1cmluZyBDREsgZGVwbG95bWVudC4gRXJyb3JzIHdpbGwgYmUgaGFuZGxlZCBieSBDbG91ZEZvcm1hdGlvbi4nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdISVBBQS5TZWN1cml0eS1MYW1iZGFDb25jdXJyZW5jeScsXG4gICAgICAgICAgcmVhc29uOiAnRnVuY3Rpb24gaXMgdXNlZCBvbmx5IGFzIGN1c3RvbSByZXNvdXJjZSBkdXJpbmcgQ0RLIGRlcGxveW1lbnQuJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnUENJLkRTUy4zMjEtTGFtYmRhQ29uY3VycmVuY3knLFxuICAgICAgICAgIHJlYXNvbjogJ0Z1bmN0aW9uIGlzIHVzZWQgb25seSBhcyBjdXN0b20gcmVzb3VyY2UgZHVyaW5nIENESyBkZXBsb3ltZW50LicsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBpZDogJ0hJUEFBLlNlY3VyaXR5LUxhbWJkYUluc2lkZVZQQycsXG4gICAgICAgICAgcmVhc29uOiAnRnVuY3Rpb24gaXMgdXNlZCBvbmx5IGFzIGN1c3RvbSByZXNvdXJjZSBkdXJpbmcgQ0RLIGRlcGxveW1lbnQgYW5kIGludGVyYWN0cyBvbmx5IHdpdGggUzMuJyxcbiAgICAgICAgfSxcbiAgICAgICAge1xuICAgICAgICAgIGlkOiAnUENJLkRTUy4zMjEtTGFtYmRhSW5zaWRlVlBDJyxcbiAgICAgICAgICByZWFzb246ICdGdW5jdGlvbiBpcyB1c2VkIG9ubHkgYXMgY3VzdG9tIHJlc291cmNlIGR1cmluZyBDREsgZGVwbG95bWVudCBhbmQgaW50ZXJhY3RzIG9ubHkgd2l0aCBTMy4nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdISVBBQS5TZWN1cml0eS1MYW1iZGFETFEnLFxuICAgICAgICAgIHJlYXNvbjpcbiAgICAgICAgICAgICdGdW5jdGlvbiBpcyB1c2VkIG9ubHkgYXMgY3VzdG9tIHJlc291cmNlIGR1cmluZyBDREsgZGVwbG95bWVudC4gRXJyb3JzIHdpbGwgYmUgaGFuZGxlZCBieSBDbG91ZEZvcm1hdGlvbi4nLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgaWQ6ICdQQ0kuRFNTLjMyMS1MYW1iZGFETFEnLFxuICAgICAgICAgIHJlYXNvbjpcbiAgICAgICAgICAgICdGdW5jdGlvbiBpcyB1c2VkIG9ubHkgYXMgY3VzdG9tIHJlc291cmNlIGR1cmluZyBDREsgZGVwbG95bWVudC4gRXJyb3JzIHdpbGwgYmUgaGFuZGxlZCBieSBDbG91ZEZvcm1hdGlvbi4nLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICAgIHRydWUsXG4gICAgKTtcbiAgICAvLyBDb25uZWN0aW9ucyB3aWxsIHJlcXVpcmUgYW4gYXJyYXkgb2YgcmVmZXJlbmNlcyB3aGVyZSB0aGV5IGFyZSBkZWZpbmVkXG4gICAgbGV0IGNvbm5lY3Rpb25zQ29uZmlndXJlZDogQ29uZmlndXJhdGlvbkVsZW1lbnQgfCB1bmRlZmluZWQ7XG4gICAgaWYgKGpvYkNvbmZpZy5jb25uZWN0aW9ucykge1xuICAgICAgY29ubmVjdGlvbnNDb25maWd1cmVkID0ge1xuICAgICAgICBjb25uZWN0aW9uczogam9iQ29uZmlnLmNvbm5lY3Rpb25zLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBkZWZhdWx0QXJndW1lbnRzWyctLVRlbXBEaXInXSA9IGBzMzovLyR7dGhpcy5wcm9wcy5idWNrZXROYW1lfS90ZW1wL2pvYnMvJHtqb2JOYW1lfWA7XG5cbiAgICAvLyBhZGQgY29udGludW91cyBsb2dnaW5nIHVubGVzcyBleHBsaWNpdGx5IGRpc2FibGVkXG4gICAgaWYgKGpvYkNvbmZpZy5jb250aW51b3VzTG9nZ2luZykge1xuICAgICAgY29uc3QgbG9nR3JvdXBOYW1lID0gam9iTmFtZTtcbiAgICAgIGNvbnN0IGxvZ0dyb3VwTmFtZVBhdGhQcmVmaXggPSAnL2F3cy9nbHVlJztcbiAgICAgIGRlZmF1bHRBcmd1bWVudHNbJy0tY29udGludW91cy1sb2ctbG9nR3JvdXAnXSA9IHRoaXMuY3JlYXRlTG9nR3JvdXAoXG4gICAgICAgIGxvZ0dyb3VwTmFtZVBhdGhQcmVmaXgsXG4gICAgICAgIGxvZ0dyb3VwTmFtZSxcbiAgICAgICAgam9iQ29uZmlnLmNvbnRpbnVvdXNMb2dnaW5nLFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgY29uc29sZS5sb2coYENvbnRpbnVvdXMgbG9nZ2luZyBub3QgZW5hYmxlZCBmb3Igam9iOiAke2pvYk5hbWV9YCk7XG4gICAgfVxuXG4gICAgY29uc3QgaW5wdXRQYXJhbXMgPSBkZWZhdWx0QXJndW1lbnRzWyctLWlucHV0X3BhcmFtcyddO1xuICAgIGlmIChpbnB1dFBhcmFtcykge1xuICAgICAgZGVmYXVsdEFyZ3VtZW50c1snLS1pbnB1dF9wYXJhbXMnXSA9IEpTT04uc3RyaW5naWZ5KGlucHV0UGFyYW1zKTtcbiAgICB9XG4gICAgaWYgKCF0aGlzLnByb3BzLnNlY3VyaXR5Q29uZmlndXJhdGlvbk5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU2VjdXJpdHkgY29uZmlndXJhdGlvbiBuYW1lIGlzIHJlcXVpcmVkIGZvciBqb2IgbW9uaXRvcmluZyBldmVudCBydWxlJyk7XG4gICAgfVxuICAgIGNvbnN0IGpvYiA9IG5ldyBNZGFhQ2ZuSm9iKHRoaXMuc2NvcGUsIGAke2pvYk5hbWV9LWpvYmAsIHtcbiAgICAgIGNvbW1hbmQ6IHtcbiAgICAgICAgbmFtZTogam9iQ29uZmlnLmNvbW1hbmQubmFtZSxcbiAgICAgICAgcHl0aG9uVmVyc2lvbjogam9iQ29uZmlnLmNvbW1hbmQucHl0aG9uVmVyc2lvbixcbiAgICAgICAgc2NyaXB0TG9jYXRpb246IGBzMzovLyR7c2NyaXB0RGVwbG95bWVudC5kZXBsb3llZEJ1Y2tldC5idWNrZXROYW1lfS8ke3NjcmlwdERlcGxveW1lbnRQYXRofS8ke3NjcmlwdE5hbWV9YCxcbiAgICAgIH0sXG4gICAgICByb2xlOiBqb2JDb25maWcuZXhlY3V0aW9uUm9sZUFybixcbiAgICAgIGFsbG9jYXRlZENhcGFjaXR5OiBqb2JDb25maWcuYWxsb2NhdGVkQ2FwYWNpdHksXG4gICAgICBjb25uZWN0aW9uczogY29ubmVjdGlvbnNDb25maWd1cmVkLFxuICAgICAgZGVmYXVsdEFyZ3VtZW50czogZGVmYXVsdEFyZ3VtZW50cyxcbiAgICAgIGRlc2NyaXB0aW9uOiBqb2JDb25maWcuZGVzY3JpcHRpb24sXG4gICAgICBleGVjdXRpb25Qcm9wZXJ0eTogam9iQ29uZmlnLmV4ZWN1dGlvblByb3BlcnR5LFxuICAgICAgZ2x1ZVZlcnNpb246IGpvYkNvbmZpZy5nbHVlVmVyc2lvbixcbiAgICAgIG1heENhcGFjaXR5OiBqb2JDb25maWcubWF4Q2FwYWNpdHksXG4gICAgICBtYXhSZXRyaWVzOiBqb2JDb25maWcubWF4UmV0cmllcyxcbiAgICAgIG5hbWU6IGpvYk5hbWUsXG4gICAgICBub3RpZmljYXRpb25Qcm9wZXJ0eTogam9iQ29uZmlnLm5vdGlmaWNhdGlvblByb3BlcnR5LFxuICAgICAgbnVtYmVyT2ZXb3JrZXJzOiBqb2JDb25maWcubnVtYmVyT2ZXb3JrZXJzLFxuICAgICAgc2VjdXJpdHlDb25maWd1cmF0aW9uOiB0aGlzLnByb3BzLnNlY3VyaXR5Q29uZmlndXJhdGlvbk5hbWUsXG4gICAgICB0aW1lb3V0OiBqb2JDb25maWcudGltZW91dCxcbiAgICAgIHdvcmtlclR5cGU6IGpvYkNvbmZpZy53b3JrZXJUeXBlLFxuICAgICAgbmFtaW5nOiB0aGlzLnByb3BzLm5hbWluZyxcbiAgICB9KTtcbiAgICBpZiAoam9iLm5hbWUgJiYgdGhpcy5wcm9wcy5wcm9qZWN0TmFtZSkge1xuICAgICAgRGF0YU9wc1Byb2plY3RVdGlscy5jcmVhdGVQcm9qZWN0U1NNUGFyYW0oXG4gICAgICAgIHRoaXMuc2NvcGUsXG4gICAgICAgIHRoaXMucHJvcHMubmFtaW5nLFxuICAgICAgICB0aGlzLnByb3BzLnByb2plY3ROYW1lLFxuICAgICAgICBgam9iL25hbWUvJHtqb2JOYW1lfWAsXG4gICAgICAgIGpvYi5uYW1lLFxuICAgICAgKTtcblxuICAgICAgY29uc3QgZXZlbnRSdWxlID0gdGhpcy5jcmVhdGVKb2JNb25pdG9yaW5nRXZlbnRSdWxlKGAke2pvYk5hbWV9LW1vbml0b3JgLCBbam9iLm5hbWVdKTtcbiAgICAgIGlmICghdGhpcy5wcm9wcy5ub3RpZmljYXRpb25Ub3BpY0Fybikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ05vdGlmaWNhdGlvbiB0b3BpYyBBUk4gaXMgcmVxdWlyZWQgZm9yIGpvYiBtb25pdG9yaW5nIGV2ZW50IHJ1bGUnKTtcbiAgICAgIH1cbiAgICAgIGV2ZW50UnVsZS5hZGRUYXJnZXQoXG4gICAgICAgIG5ldyBTbnNUb3BpYyhNZGFhU25zVG9waWMuZnJvbVRvcGljQXJuKHRoaXMuc2NvcGUsIGAke2pvYk5hbWV9LXRvcGljYCwgdGhpcy5wcm9wcy5ub3RpZmljYXRpb25Ub3BpY0FybikpLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGNyZWF0ZUpvYk1vbml0b3JpbmdFdmVudFJ1bGUocnVsZU5hbWU6IHN0cmluZywgam9iTmFtZXM6IHN0cmluZ1tdKTogUnVsZSB7XG4gICAgcmV0dXJuIEV2ZW50QnJpZGdlSGVscGVyLmNyZWF0ZUdsdWVNb25pdG9yaW5nRXZlbnRSdWxlKFxuICAgICAgdGhpcy5zY29wZSxcbiAgICAgIHRoaXMucHJvcHMubmFtaW5nLFxuICAgICAgcnVsZU5hbWUsXG4gICAgICAnV29ya2Zsb3cgSm9iIGZhaWx1cmUgZXZlbnRzJyxcbiAgICAgIHtcbiAgICAgICAgam9iTmFtZTogam9iTmFtZXMsXG4gICAgICAgIHN0YXRlOiBbJ0ZBSUxFRCcsICdUSU1FT1VUJywgJ1NUT1BQRUQnXSxcbiAgICAgIH0sXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlTG9nR3JvdXAobG9nR3JvdXBOYW1lUGF0aFByZWZpeDogc3RyaW5nLCBsb2dHcm91cE5hbWU6IHN0cmluZywgbG9nZ2luZ0NvbmZpZzogTG9nZ2luZ0NvbmZpZyk6IHN0cmluZyB7XG4gICAgbGV0IGxvZ0dyb3VwUmV0ZW50aW9uRGF5czogUmV0ZW50aW9uRGF5cztcblxuICAgIGlmIChsb2dnaW5nQ29uZmlnLmxvZ0dyb3VwUmV0ZW50aW9uRGF5cyAhPSAwKSB7XG4gICAgICBsb2dHcm91cFJldGVudGlvbkRheXMgPSBsb2dnaW5nQ29uZmlnLmxvZ0dyb3VwUmV0ZW50aW9uRGF5cztcbiAgICB9IGVsc2Uge1xuICAgICAgbG9nR3JvdXBSZXRlbnRpb25EYXlzID0gUmV0ZW50aW9uRGF5cy5JTkZJTklURTtcbiAgICB9XG5cbiAgICBjb25zdCBsb2dQcm9wcyA9IHtcbiAgICAgIG5hbWluZzogdGhpcy5wcm9wcy5uYW1pbmcsXG4gICAgICBsb2dHcm91cE5hbWU6IGxvZ0dyb3VwTmFtZSxcbiAgICAgIGxvZ0dyb3VwTmFtZVBhdGhQcmVmaXg6IGxvZ0dyb3VwTmFtZVBhdGhQcmVmaXgsXG4gICAgICBlbmNyeXB0aW9uS2V5OiB0aGlzLmttc0tleSxcbiAgICAgIHJldGVudGlvbjogbG9nR3JvdXBSZXRlbnRpb25EYXlzLFxuICAgIH07XG4gICAgbmV3IE1kYWFMb2dHcm91cCh0aGlzLCBsb2dHcm91cE5hbWUsIGxvZ1Byb3BzKTtcbiAgICAvLyBgdXBkYXRlUHJvcHNgIGFsd2F5cyByZXR1cm5zIGEgcHJvcCB3aXRoIGEgbG9nR3JvdXBOYW1lXG4gICAgcmV0dXJuIHVwZGF0ZVByb3BzKGxvZ1Byb3BzKS5sb2dHcm91cE5hbWUhO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,34 @@
1
+ # Don't include original .ts files when doing `npm pack`
2
+ *.ts
3
+ *.tsbuildinfo
4
+ .eslintrc.js
5
+ tsconfig.json
6
+ typedoc.json
7
+
8
+ # dev-related files
9
+ coverage
10
+ test/
11
+
12
+ # pack output
13
+ *.tgz
14
+
15
+ dist
16
+
17
+
18
+ #Exclude coverage reports for bundled deps
19
+ node_modules/**/coverage/*
20
+ # Exclude typescript source and config
21
+ #*.ts
22
+ #tsconfig.json
23
+
24
+ # Include javascript files and typescript declarations
25
+ !*.js
26
+ !*.d.ts
27
+
28
+ # Exclude jsii outdir
29
+ jsii-dist
30
+
31
+ # Include .jsii and .jsii.gz
32
+ !.jsii
33
+ !.jsii.gz
34
+ jest.config.js
@@ -0,0 +1,5 @@
1
+ const baseConfig = require("../../../jest.config");
2
+
3
+ module.exports = {
4
+ ...baseConfig,
5
+ };
@@ -195,4 +195,4 @@ class RestrictBucketToRoles {
195
195
  }
196
196
  }
197
197
  exports.RestrictBucketToRoles = RestrictBucketToRoles;
198
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUFFSCxpREFBMEU7QUFzQjFFLDZHQUE2RztBQUM3RyxNQUFhLDJCQUEyQjtJQW9CdEMsWUFBWSxLQUFtQztRQUx2QyxvQkFBZSxHQUFzQixFQUFFLENBQUM7UUFDeEMseUJBQW9CLEdBQXNCLEVBQUUsQ0FBQztRQUM3Qyw4QkFBeUIsR0FBc0IsRUFBRSxDQUFDO1FBSXhELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ3pFLDRFQUE0RTtRQUM1RSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFbkUsbUJBQW1CO1FBQ25CLElBQUksS0FBSyxDQUFDLFdBQVcsSUFBSSxTQUFTLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ2xFLHVDQUF1QztZQUN2QyxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsc0JBQXNCLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDckQsU0FBUyxDQUFDLFlBQVksQ0FBQyxZQUFZLEVBQUUsRUFBRSxZQUFZLEVBQUUsS0FBSyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzdGLFNBQVMsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUM1QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztTQUN0QztRQUNELHdCQUF3QjtRQUN4QixJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsSUFBSSxTQUFTLElBQUksS0FBSyxDQUFD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QUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FDdEcsQ0FBQyxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FDbkIsQ0FBQztTQUNIO1FBRUQseUNBQXlDO1FBQ3pDLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO1lBQzFELElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxDQUFDLGVBQWUsRUFBRSxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQztTQUNqRjthQUFNO1lBQ0wsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsMkJBQTJCLEVBQUUsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUM7U0FDN0Y7SUFDSCxDQUFDO0lBRU8sY0FBYyxDQUFDLE1BQWM7UUFDbkMsSUFBSSxTQUFTLEdBQUcsTUFBTSxDQUFDO1FBRXZCLDJCQUEyQjtRQUMzQixTQUFTLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3pFLDBCQUEwQjtRQUMxQixTQUFTLEdBQUcsU0FBUyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQzNFLE9BQU8sR0FBRyxTQUFTLElBQUksQ0FBQztJQUMxQixDQUFDO0NBQ0Y7QUEvRUQsc0RBK0VDIiwic291cmNlc0NvbnRlbnQiOlsiLyohXG4gKiBDb3B5cmlnaHQgQW1hem9uLmNvbSwgSW5jLiBvciBpdHMgYWZmaWxpYXRlcy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wXG4gKi9cblxuaW1wb3J0IHsgSVByaW5jaXBhbCwgUG9saWN5U3RhdGVtZW50LCBFZmZlY3QgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IElCdWNrZXQgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElSZXN0cmljdE9iamVjdFByZWZpeFRvUm9sZXMge1xuICByZWFkb25seSBzM0J1Y2tldDogSUJ1Y2tldDtcbiAgcmVhZG9ubHkgczNQcmVmaXg6IHN0cmluZztcbiAgcmVhZG9ubHkgcmVhZFJvbGVJZHM/OiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgcmVhZFdyaXRlUm9sZUlkcz86IHN0cmluZ1tdO1xuICByZWFkb25seSByZWFkV3JpdGVTdXBlclJvbGVJZHM/OiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgcmVhZFByaW5jaXBhbHM/OiBJUHJpbmNpcGFsW107XG4gIHJlYWRvbmx5IHJlYWRXcml0ZVByaW5jaXBhbHM/OiBJUHJpbmNpcGFsW107XG4gIHJlYWRvbmx5IHJlYWRXcml0ZVN1cGVyUHJpbmNpcGFscz86IElQcmluY2lwYWxbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBJUmVzdHJpY3RCdWNrZXRUb1JvbGVzIHtcbiAgcmVhZG9ubHkgczNCdWNrZXQ6IElCdWNrZXQ7XG4gIHJlYWRvbmx5IHJvbGVFeGNsdWRlSWRzOiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgcHJpbmNpcGFsRXhjbHVkZXM/OiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgcHJlZml4RXhjbHVkZXM/OiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgcHJlZml4SW5jbHVkZXM/OiBzdHJpbmdbXTtcbn1cblxuLyoqIEhlbHBlciBjbGFzcyBmb3IgZ2VuZXJhdGluZyBTMyBidWNrZXQgcG9saWN5IHN0YXRlbWVudHMgd2hpY2ggZ3JhbnQgYWNjZXNzIHRvIHNwZWNpZmljIG9iamVjdCBwcmVmaXhlcyAqL1xuZXhwb3J0IGNsYXNzIFJlc3RyaWN0T2JqZWN0UHJlZml4VG9Sb2xlcyB7XG4gIHN0YXRpYyByZWFkb25seSBSRUFEX0FDVElPTlMgPSBbJ3MzOkdldE9iamVjdConXTtcbiAgc3RhdGljIHJlYWRvbmx5IFJFQURfV1JJVEVfQUNUSU9OUyA9IFtcbiAgICAuLi5SZXN0cmljdE9iamVjdFByZWZpeFRvUm9sZXMuUkVBRF9BQ1RJT05TLFxuICAgICdzMzpQdXRPYmplY3QnLFxuICAgICdzMzpQdXRPYmplY3RUYWdnaW5nJyxcbiAgICAnczM6RGVsZXRlT2JqZWN0JyxcbiAgXTtcbiAgc3RhdGljIHJlYWRvbmx5IFJFQURfV1JJVEVfU1VQRVJfQUNUSU9OUyA9IFtcbiAgICAuLi5SZXN0cmljdE9iamVjdFByZWZpeFRvUm9sZXMuUkVBRF9XUklURV9BQ1RJT05TLFxuICAgICdzMzpEZWxldGVPYmplY3RWZXJzaW9uJyxcbiAgXTtcbiAgc3RhdGljIHJlYWRvbmx5IEJVQ0tFVF9BTExPV19BQ1RJT05TID0gWydzMzpMaXN0KicsICdzMzpHZXRCdWNrZXQqJ107XG4gIHN0YXRpYyByZWFkb25seSBCVUNLRVRfREVOWV9BQ1RJT05TID0gWydzMzpQdXRPYmplY3QqJywgJ3MzOkdldE9iamVjdConLCAnczM6RGVsZXRlT2JqZWN0KiddO1xuXG4gIHByaXZhdGUgX3JlYWRTdGF0ZW1lbnRzOiBQb2xpY3lTdGF0ZW1lbnRbXSA9IFtdO1xuICBwcml2YXRlIF9yZWFkV3JpdGVTdGF0ZW1lbnRzOiBQb2xpY3lTdGF0ZW1lbnRbXSA9IFtdO1xuICBwcml2YXRlIF9yZWFkV3JpdGVTdXBlclN0YXRlbWVudHM6IFBvbGljeVN0YXRlbWVudFtdID0gW107XG4gIHByaXZhdGUgX2Zvcm1hdHRlZFByZWZpeDogc3RyaW5nO1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJUmVzdHJpY3RPYmplY3RQcmVmaXhUb1JvbGVzKSB7XG4gICAgdGhpcy5fZm9ybWF0dGVkUHJlZml4ID0gJy8nICsgdGhpcy5mb3JtYXRTM1ByZWZpeChwcm9wcy5zM1ByZWZpeCkgKyAnLyonO1xuICAgIC8vIENvdmVycyBvdXIgY2FzZSB3aGVyZSB0d28gLyBnZXQgcmVzb2x2ZWQgYmVjYXVzZSBvdXIgcHJlZml4IGlzIGFjdHVhbGx5IC9cbiAgICB0aGlzLl9mb3JtYXR0ZWRQcmVmaXggPSB0aGlzLl9mb3JtYXR0ZWRQcmVmaXgucmVwbGFjZSgvXFwvXFwvLywgJy8nKTtcblxuICAgIC8vIEZFREVSQVRFRCAvIFJFQURcbiAgICBpZiAocHJvcHMucmVhZFJvbGVJZHMgIT0gdW5kZWZpbmVkICYmIHByb3BzLnJlYWRSb2xlSWRzLmxlbmd0aCA+IDApIHtcbiAgICAgIC8vIENvbnN0cnVjdCBvdXIgVXNlcjpJZCByb2xlcyBmb3IgcmVhZFxuICAgICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5fcmVhZFN0YXRlbWVudFNjYWZmb2xkKHByb3BzKTtcbiAgICAgIHN0YXRlbWVudC5hZGRDb25kaXRpb24oJ1N0cmluZ0xpa2UnLCB7ICdhd3M6dXNlcklkJzogcHJvcHMucmVhZFJvbGVJZHMubWFwKHggPT4gYCR7eH06KmApIH0pO1xuICAgICAgc3RhdGVtZW50LmFkZEFueVByaW5jaXBhbCgpO1xuICAgICAgdGhpcy5fcmVhZFN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgIH1cbiAgICAvLyBGRURFUkFURUQgLyBSRUFEV1JJVEVcbiAgICBpZiAocHJvcHMucmVhZFdyaXRlUm9sZUlkcyAhPSB1bmRlZmluZWQgJiYgcHJvcHMucmVhZFdyaXRlUm9sZUlkcy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLl9yZWFkV3JpdGVTdGF0ZW1lbnRTY2FmZm9sZChwcm9wcyk7XG4gICAgICBzdGF0ZW1lbnQuYWRkQ29uZGl0aW9uKCdTdHJpbmdMaWtlJywgeyAnYXdzOnVzZXJJZCc6IHByb3BzLnJlYWRXcml0ZVJvbGVJZHMubWFwKHggPT4gYCR7eH06KmApIH0pO1xuICAgICAgc3RhdGVtZW50LmFkZEFueVByaW5jaXBhbCgpO1xuICAgICAgdGhpcy5fcmVhZFdyaXRlU3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG4gICAgfVxuXG4gICAgLy8gRkVERVJBVEVEIC8gUkVBRFdSSVRFU1VQRVJcbiAgICBpZiAocHJvcHMucmVhZFdyaXRlU3VwZXJSb2xlSWRzICE9IHVuZGVmaW5lZCAmJiBwcm9wcy5yZWFkV3JpdGVTdXBlclJvbGVJZHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5fcmVhZFdyaXRlU3VwZXJTdGF0ZW1lbnRTY2FmZm9sZChwcm9wcyk7XG4gICAgICBzdGF0ZW1lbnQuYWRkQ29uZGl0aW9uKCdTdHJpbmdMaWtlJywgeyAnYXdzOnVzZXJJZCc6IHByb3BzLnJlYWRXcml0ZVN1cGVyUm9sZUlkcy5tYXAoeCA9PiBgJHt4fToqYCkgfSk7XG4gICAgICBzdGF0ZW1lbnQuYWRkQW55UHJpbmNpcGFsKCk7XG4gICAgICB0aGlzLl9yZWFkV3JpdGVTdXBlclN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgIH1cblxuICAgIC8vIE5PTkZFREVSQVRFRCAvIFJFQURcbiAgICBpZiAocHJvcHMucmVhZFByaW5jaXBhbHMgIT0gdW5kZWZpbmVkICYmIHByb3BzLnJlYWRQcmluY2lwYWxzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudCA9IHRoaXMuX3JlYWRTdGF0ZW1lbnRTY2FmZm9sZChwcm9wcyk7XG4gICAgICBwcm9wcy5yZWFkUHJpbmNpcGFscy5mb3JFYWNoKHByaW5jaXBhbCA9PiB7XG4gICAgICAgIHN0YXRlbWVudC5hZGRQcmluY2lwYWxzKHByaW5jaXBhbCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX3JlYWRTdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50KTtcbiAgICB9XG4gICAgLy8gTk9ORkVERVJBVEVEIC8gUkVBRFdSSVRFXG4gICAgaWYgKHByb3BzLnJlYWRXcml0ZVByaW5jaXBhbHMgIT0gdW5kZWZpbmVkICYmIHByb3BzLnJlYWRXcml0ZVByaW5jaXBhbHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5fcmVhZFdyaXRlU3RhdGVtZW50U2NhZmZvbGQocHJvcHMpO1xuICAgICAgcHJvcHMucmVhZFdyaXRlUHJpbmNpcGFscy5mb3JFYWNoKHByaW5jaXBhbCA9PiB7XG4gICAgICAgIHN0YXRlbWVudC5hZGRQcmluY2lwYWxzKHByaW5jaXBhbCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX3JlYWRXcml0ZVN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgIH1cbiAgICAvLyBOT05GRURFUkFURUQgLyBSRUFEV1JJVEVTVVBFUlxuICAgIGlmIChwcm9wcy5yZWFkV3JpdGVTdXBlclByaW5jaXBhbHMgIT0gdW5kZWZpbmVkICYmIHByb3BzLnJlYWRXcml0ZVN1cGVyUHJpbmNpcGFscy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLl9yZWFkV3JpdGVTdXBlclN0YXRlbWVudFNjYWZmb2xkKHByb3BzKTtcbiAgICAgIHByb3BzLnJlYWRXcml0ZVN1cGVyUHJpbmNpcGFscy5mb3JFYWNoKHByaW5jaXBhbCA9PiB7XG4gICAgICAgIHN0YXRlbWVudC5hZGRQcmluY2lwYWxzKHByaW5jaXBhbCk7XG4gICAgICB9KTtcbiAgICAgIHRoaXMuX3JlYWRXcml0ZVN1cGVyU3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfcmVhZFN0YXRlbWVudFNjYWZmb2xkKHByb3BzOiBJUmVzdHJpY3RPYmplY3RQcmVmaXhUb1JvbGVzKTogUG9saWN5U3RhdGVtZW50IHtcbiAgICByZXR1cm4gbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6IGAke3Byb3BzLnMzUHJlZml4LnJlcGxhY2UoL1xcXFxXL2csICcnKX1fUmVhZGAsXG4gICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgIHJlc291cmNlczogW3Byb3BzLnMzQnVja2V0LmJ1Y2tldEFybiArIHRoaXMuX2Zvcm1hdHRlZFByZWZpeF0sXG4gICAgICBhY3Rpb25zOiBSZXN0cmljdE9iamVjdFByZWZpeFRvUm9sZXMuUkVBRF9BQ1RJT05TLFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBfcmVhZFdyaXRlU3RhdGVtZW50U2NhZmZvbGQocHJvcHM6IElSZXN0cmljdE9iamVjdFByZWZpeFRvUm9sZXMpOiBQb2xpY3lTdGF0ZW1lbnQge1xuICAgIHJldHVybiBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIHNpZDogYCR7cHJvcHMuczNQcmVmaXgucmVwbGFjZSgvXFxcXFcvZywgJycpfV9SZWFkV3JpdGVgLFxuICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICByZXNvdXJjZXM6IFtwcm9wcy5zM0J1Y2tldC5idWNrZXRBcm4gKyB0aGlzLl9mb3JtYXR0ZWRQcmVmaXhdLFxuICAgICAgYWN0aW9uczogUmVzdHJpY3RPYmplY3RQcmVmaXhUb1JvbGVzLlJFQURfV1JJVEVfQUNUSU9OUyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlYWRXcml0ZVN1cGVyU3RhdGVtZW50U2NhZmZvbGQocHJvcHM6IElSZXN0cmljdE9iamVjdFByZWZpeFRvUm9sZXMpOiBQb2xpY3lTdGF0ZW1lbnQge1xuICAgIHJldHVybiBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgIHNpZDogYCR7cHJvcHMuczNQcmVmaXgucmVwbGFjZSgvXFxcXFcvZywgJycpfV9SZWFkV3JpdGVTdXBlcmAsXG4gICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgIHJlc291cmNlczogW3Byb3BzLnMzQnVja2V0LmJ1Y2tldEFybiArIHRoaXMuX2Zvcm1hdHRlZFByZWZpeF0sXG4gICAgICBhY3Rpb25zOiBSZXN0cmljdE9iamVjdFByZWZpeFRvUm9sZXMuUkVBRF9XUklURV9TVVBFUl9BQ1RJT05TLFxuICAgIH0pO1xuICB9XG5cbiAgcHVibGljIHJlYWRTdGF0ZW1lbnRzKCk6IFBvbGljeVN0YXRlbWVudFtdIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZFN0YXRlbWVudHM7XG4gIH1cblxuICBwdWJsaWMgcmVhZFdyaXRlU3RhdGVtZW50cygpOiBQb2xpY3lTdGF0ZW1lbnRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRXcml0ZVN0YXRlbWVudHM7XG4gIH1cblxuICBwdWJsaWMgcmVhZFdyaXRlU3VwZXJTdGF0ZW1lbnRzKCk6IFBvbGljeVN0YXRlbWVudFtdIHtcbiAgICByZXR1cm4gdGhpcy5fcmVhZFdyaXRlU3VwZXJTdGF0ZW1lbnRzO1xuICB9XG5cbiAgcHVibGljIHN0YXRlbWVudHMoKTogUG9saWN5U3RhdGVtZW50W10ge1xuICAgIHJldHVybiBbLi4udGhpcy5fcmVhZFN0YXRlbWVudHMsIC4uLnRoaXMuX3JlYWRXcml0ZVN0YXRlbWVudHMsIC4uLnRoaXMuX3JlYWRXcml0ZVN1cGVyU3RhdGVtZW50c107XG4gIH1cblxuICBwdWJsaWMgZm9ybWF0UzNQcmVmaXgocHJlZml4OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCByYXdQcmVmaXggPSBwcmVmaXg7XG5cbiAgICAvLyBSZW1vdmVzIHRyYWlsaW5nIHNsYXNoZXNcbiAgICByYXdQcmVmaXggPSByYXdQcmVmaXguZW5kc1dpdGgoJy8nKSA/IHJhd1ByZWZpeC5zbGljZSgwLCAtMSkgOiByYXdQcmVmaXg7XG4gICAgLy8gUmVtb3ZlcyBsZWFkaW5nIHNsYXNoZXNcbiAgICByYXdQcmVmaXggPSByYXdQcmVmaXguc3RhcnRzV2l0aCgnLycpID8gcmF3UHJlZml4LnN1YnN0cmluZygxKSA6IHJhd1ByZWZpeDtcbiAgICByZXR1cm4gcmF3UHJlZml4O1xuICB9XG59XG5cbi8qKiBIZWxwZXIgY2xhc3MgZm9yIGdlbmVyYXRpbmcgYnVja2V0IHBvbGljeSBzdGF0ZW1lbnRzXG4gKiB3aGljaCBhbGxvdyBvciBkZW55IGFjY2VzcyB0byBhbiBlbnRpcmUgYnVja2V0LiBVc2VkIHRvXG4gKiBjcmVhdGUgYnVja2V0LWxldmVsIGRlZmF1bHQgZGVueSBzdGF0ZW1lbnRzIHRvIGJsb2NrIGFjY2Vzc2VzXG4gKiBub3QgZ3JhbnRlZCBpbiB0aGUgYnVja2V0IHBvbGljeS4gKi9cbmV4cG9ydCBjbGFzcyBSZXN0cmljdEJ1Y2tldFRvUm9sZXMge1xuICBwdWJsaWMgcmVhZG9ubHkgZGVueVN0YXRlbWVudDogUG9saWN5U3RhdGVtZW50O1xuICBwdWJsaWMgcmVhZG9ubHkgYWxsb3dTdGF0ZW1lbnQ6IFBvbGljeVN0YXRlbWVudDtcbiAgcHJpdmF0ZSByZXNvdXJjZTogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBub3RSZXNvdXJjZTogc3RyaW5nW10gPSBbXTtcbiAgcHJpdmF0ZSBkZW55Q29uZGl0aW9uYWxOb3RFcXVhbHM6IHtcbiAgICAnYXdzOnVzZXJJZCc/OiBzdHJpbmdbXTtcbiAgICAnYXdzOlByaW5jaXBhbEFybic/OiBzdHJpbmdbXTtcbiAgfSA9IHt9O1xuXG4gIGNvbnN0cnVjdG9yKHByb3BzOiBJUmVzdHJpY3RCdWNrZXRUb1JvbGVzKSB7XG4gICAgLy8gU3RhdGVtZW50IGFsbG93aW5nIGFjY2VzcyB0byB0aGUgYnVja2V0IGZvciB0aGUgQVJPQXNcbiAgICB0aGlzLmFsbG93U3RhdGVtZW50ID0gbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6IGBCdWNrZXRBbGxvd2AsXG4gICAgICBlZmZlY3Q6IEVmZmVjdC5BTExPVyxcbiAgICAgIHJlc291cmNlczogW3Byb3BzLnMzQnVja2V0LmJ1Y2tldEFybiArICcvKicsIHByb3BzLnMzQnVja2V0LmJ1Y2tldEFybl0sXG4gICAgICBhY3Rpb25zOiBSZXN0cmljdE9iamVjdFByZWZpeFRvUm9sZXMuQlVDS0VUX0FMTE9XX0FDVElPTlMsXG4gICAgfSk7XG4gICAgdGhpcy5hbGxvd1N0YXRlbWVudC5hZGRBbnlQcmluY2lwYWwoKTtcbiAgICB0aGlzLmFsbG93U3RhdGVtZW50LmFkZENvbmRpdGlvbignU3RyaW5nTGlrZScsIHsgJ2F3czp1c2VySWQnOiBwcm9wcy5yb2xlRXhjbHVkZUlkcy5tYXAoeCA9PiBgJHt4fToqYCkgfSk7XG5cbiAgICAvLyBDb25zdHVjdCBvdXIgZGVueSBzdGF0ZW1lbnQuXG4gICAgLy8gcHJlZml4SW5jbHVkZXMgZGVub3RlcyB3ZSB3YW50IHRvIGluY2x1ZGUgYSBwcmVmaXggaW4gb3VyIGRlbnkgbWVhbmluZyBSZXNvdXJjZVxuICAgIGlmIChwcm9wcy5wcmVmaXhJbmNsdWRlcykge1xuICAgICAgdGhpcy5yZXNvdXJjZSA9IHByb3BzLnByZWZpeEluY2x1ZGVzLm1hcChwcmVmaXggPT4ge1xuICAgICAgICByZXR1cm4gYCR7cHJvcHMuczNCdWNrZXQuYnVja2V0QXJufS8ke3RoaXMuZm9ybWF0UzNQcmVmaXgocHJlZml4KX1gO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMucmVzb3VyY2UgPSBbcHJvcHMuczNCdWNrZXQuYnVja2V0QXJuICsgJy8qJ107XG4gICAgfVxuICAgIC8vIHByZWZpeEV4Y2x1ZGVzIGRlbm90ZSB3ZSB3YW50IHRvIGV4Y2x1ZGUgYSBwcmVmaXggaW4gb3VyIGRlbnkgbWVhbmluZyBub3RSZXNvdXJjZVxuICAgIGlmIChwcm9wcy5wcmVmaXhFeGNsdWRlcykge1xuICAgICAgdGhpcy5ub3RSZXNvdXJjZSA9IHByb3BzLnByZWZpeEV4Y2x1ZGVzLm1hcChwcmVmaXggPT4ge1xuICAgICAgICByZXR1cm4gYCR7cHJvcHMuczNCdWNrZXQuYnVja2V0QXJufS8ke3RoaXMuZm9ybWF0UzNQcmVmaXgocHJlZml4KX1gO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMubm90UmVzb3VyY2UubGVuZ3RoID4gMCkge1xuICAgICAgdGhpcy5kZW55U3RhdGVtZW50ID0gbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICAgIHNpZDogYEJ1Y2tldERlbnlgLFxuICAgICAgICBlZmZlY3Q6IEVmZmVjdC5ERU5ZLFxuICAgICAgICBub3RSZXNvdXJjZXM6IHRoaXMubm90UmVzb3VyY2UsXG4gICAgICAgIGFjdGlvbnM6IFJlc3RyaWN0T2JqZWN0UHJlZml4VG9Sb2xlcy5CVUNLRVRfREVOWV9BQ1RJT05TLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuZGVueVN0YXRlbWVudCA9IG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBzaWQ6IGBCdWNrZXREZW55YCxcbiAgICAgICAgZWZmZWN0OiBFZmZlY3QuREVOWSxcbiAgICAgICAgcmVzb3VyY2VzOiB0aGlzLnJlc291cmNlLFxuICAgICAgICBhY3Rpb25zOiBSZXN0cmljdE9iamVjdFByZWZpeFRvUm9sZXMuQlVDS0VUX0RFTllfQUNUSU9OUyxcbiAgICAgIH0pO1xuICAgIH1cbiAgICB0aGlzLmRlbnlTdGF0ZW1lbnQuYWRkQW55UHJpbmNpcGFsKCk7XG5cbiAgICAvLyBCdWlsZCBvdXIgY29uZGl0aW9uYWxzLlxuICAgIHRoaXMuZGVueUNvbmRpdGlvbmFsTm90RXF1YWxzWydhd3M6dXNlcklkJ10gPSBwcm9wcy5yb2xlRXhjbHVkZUlkcy5tYXAoeCA9PiBgJHt4fToqYCk7XG4gICAgaWYgKHByb3BzLnByaW5jaXBhbEV4Y2x1ZGVzICYmIHByb3BzLnByaW5jaXBhbEV4Y2x1ZGVzLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZGVueUNvbmRpdGlvbmFsTm90RXF1YWxzWydhd3M6UHJpbmNpcGFsQXJuJ10gPSBbLi4ubmV3IFNldChwcm9wcy5wcmluY2lwYWxFeGNsdWRlcyldLnNvcnQoKGEsIGIpID0+XG4gICAgICAgIGEubG9jYWxlQ29tcGFyZShiKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gQ29uc3RydWN0IG91ciBjb25kaXRpb25hbCBmb3Igb3VyIGRlbnlcbiAgICBpZiAoT2JqZWN0LmtleXModGhpcy5kZW55Q29uZGl0aW9uYWxOb3RFcXVhbHMpLmxlbmd0aCA9PSAxKSB7XG4gICAgICB0aGlzLmRlbnlTdGF0ZW1lbnQuYWRkQ29uZGl0aW9uKCdTdHJpbmdOb3RMaWtlJywgdGhpcy5kZW55Q29uZGl0aW9uYWxOb3RFcXVhbHMpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlbnlTdGF0ZW1lbnQuYWRkQ29uZGl0aW9uKCdGb3JBbnlWYWx1ZTpTdHJpbmdOb3RMaWtlJywgdGhpcy5kZW55Q29uZGl0aW9uYWxOb3RFcXVhbHMpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZm9ybWF0UzNQcmVmaXgocHJlZml4OiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCByYXdQcmVmaXggPSBwcmVmaXg7XG5cbiAgICAvLyBSZW1vdmVzIHRyYWlsaW5nIHNsYXNoZXNcbiAgICByYXdQcmVmaXggPSByYXdQcmVmaXguZW5kc1dpdGgoJy8nKSA/IHJhd1ByZWZpeC5zbGljZSgwLCAtMSkgOiByYXdQcmVmaXg7XG4gICAgLy8gUmVtb3ZlcyBsZWFkaW5nIHNsYXNoZXNcbiAgICByYXdQcmVmaXggPSByYXdQcmVmaXguc3RhcnRzV2l0aCgnLycpID8gcmF3UHJlZml4LnN1YnN0cmluZygxKSA6IHJhd1ByZWZpeDtcbiAgICByZXR1cm4gYCR7cmF3UHJlZml4fS8qYDtcbiAgfVxufVxuIl19
198
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7OztHQUdHOzs7QUFFSCxpREFBMEU7QUFzQjFFLDZHQUE2RztBQUM3RyxNQUFhLDJCQUEyQjtJQW9CdEMsWUFBWSxLQUFtQztRQUx2QyxvQkFBZSxHQUFzQixFQUFFLENBQUM7UUFDeEMseUJBQW9CLEdBQXNCLEVBQUUsQ0FBQztRQUM3Qyw4QkFBeUIsR0FBc0IsRUFBRSxDQUFDO1FBSXhELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ3pFLDRFQUE0RTtRQUM1RSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7UUFFbkUsbUJBQW1CO1FBQ25CLElBQUksS0FBSyxDQUFDLFdBQVcsSUFBSSxTQUFTLElBQUksS0FBSyxDQUFDLFdBQVcsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDbkUsdUNBQXVDO1lBQ3ZDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNyRCxTQUFTLENBQUMsWUFBWSxDQUFDLFlBQVksRUFBRSxFQUFFLFlBQVksRUFBRSxLQUFLLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDN0YsU0FBUyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQzVCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7UUFDRCx3QkFBd0I7UUFDeEIsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLElBQUksU0FBUyxJQUFJ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UyxJQUFJLENBQUM7SUFDMUIsQ0FBQztDQUNGO0FBL0VELHNEQStFQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIVxuICogQ29weXJpZ2h0IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMFxuICovXG5cbmltcG9ydCB7IElQcmluY2lwYWwsIFBvbGljeVN0YXRlbWVudCwgRWZmZWN0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBJQnVja2V0IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcblxuZXhwb3J0IGludGVyZmFjZSBJUmVzdHJpY3RPYmplY3RQcmVmaXhUb1JvbGVzIHtcbiAgcmVhZG9ubHkgczNCdWNrZXQ6IElCdWNrZXQ7XG4gIHJlYWRvbmx5IHMzUHJlZml4OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHJlYWRSb2xlSWRzPzogc3RyaW5nW107XG4gIHJlYWRvbmx5IHJlYWRXcml0ZVJvbGVJZHM/OiBzdHJpbmdbXTtcbiAgcmVhZG9ubHkgcmVhZFdyaXRlU3VwZXJSb2xlSWRzPzogc3RyaW5nW107XG4gIHJlYWRvbmx5IHJlYWRQcmluY2lwYWxzPzogSVByaW5jaXBhbFtdO1xuICByZWFkb25seSByZWFkV3JpdGVQcmluY2lwYWxzPzogSVByaW5jaXBhbFtdO1xuICByZWFkb25seSByZWFkV3JpdGVTdXBlclByaW5jaXBhbHM/OiBJUHJpbmNpcGFsW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSVJlc3RyaWN0QnVja2V0VG9Sb2xlcyB7XG4gIHJlYWRvbmx5IHMzQnVja2V0OiBJQnVja2V0O1xuICByZWFkb25seSByb2xlRXhjbHVkZUlkczogc3RyaW5nW107XG4gIHJlYWRvbmx5IHByaW5jaXBhbEV4Y2x1ZGVzPzogc3RyaW5nW107XG4gIHJlYWRvbmx5IHByZWZpeEV4Y2x1ZGVzPzogc3RyaW5nW107XG4gIHJlYWRvbmx5IHByZWZpeEluY2x1ZGVzPzogc3RyaW5nW107XG59XG5cbi8qKiBIZWxwZXIgY2xhc3MgZm9yIGdlbmVyYXRpbmcgUzMgYnVja2V0IHBvbGljeSBzdGF0ZW1lbnRzIHdoaWNoIGdyYW50IGFjY2VzcyB0byBzcGVjaWZpYyBvYmplY3QgcHJlZml4ZXMgKi9cbmV4cG9ydCBjbGFzcyBSZXN0cmljdE9iamVjdFByZWZpeFRvUm9sZXMge1xuICBzdGF0aWMgcmVhZG9ubHkgUkVBRF9BQ1RJT05TID0gWydzMzpHZXRPYmplY3QqJ107XG4gIHN0YXRpYyByZWFkb25seSBSRUFEX1dSSVRFX0FDVElPTlMgPSBbXG4gICAgLi4uUmVzdHJpY3RPYmplY3RQcmVmaXhUb1JvbGVzLlJFQURfQUNUSU9OUyxcbiAgICAnczM6UHV0T2JqZWN0JyxcbiAgICAnczM6UHV0T2JqZWN0VGFnZ2luZycsXG4gICAgJ3MzOkRlbGV0ZU9iamVjdCcsXG4gIF07XG4gIHN0YXRpYyByZWFkb25seSBSRUFEX1dSSVRFX1NVUEVSX0FDVElPTlMgPSBbXG4gICAgLi4uUmVzdHJpY3RPYmplY3RQcmVmaXhUb1JvbGVzLlJFQURfV1JJVEVfQUNUSU9OUyxcbiAgICAnczM6RGVsZXRlT2JqZWN0VmVyc2lvbicsXG4gIF07XG4gIHN0YXRpYyByZWFkb25seSBCVUNLRVRfQUxMT1dfQUNUSU9OUyA9IFsnczM6TGlzdConLCAnczM6R2V0QnVja2V0KiddO1xuICBzdGF0aWMgcmVhZG9ubHkgQlVDS0VUX0RFTllfQUNUSU9OUyA9IFsnczM6UHV0T2JqZWN0KicsICdzMzpHZXRPYmplY3QqJywgJ3MzOkRlbGV0ZU9iamVjdConXTtcblxuICBwcml2YXRlIF9yZWFkU3RhdGVtZW50czogUG9saWN5U3RhdGVtZW50W10gPSBbXTtcbiAgcHJpdmF0ZSBfcmVhZFdyaXRlU3RhdGVtZW50czogUG9saWN5U3RhdGVtZW50W10gPSBbXTtcbiAgcHJpdmF0ZSBfcmVhZFdyaXRlU3VwZXJTdGF0ZW1lbnRzOiBQb2xpY3lTdGF0ZW1lbnRbXSA9IFtdO1xuICBwcml2YXRlIF9mb3JtYXR0ZWRQcmVmaXg6IHN0cmluZztcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogSVJlc3RyaWN0T2JqZWN0UHJlZml4VG9Sb2xlcykge1xuICAgIHRoaXMuX2Zvcm1hdHRlZFByZWZpeCA9ICcvJyArIHRoaXMuZm9ybWF0UzNQcmVmaXgocHJvcHMuczNQcmVmaXgpICsgJy8qJztcbiAgICAvLyBDb3ZlcnMgb3VyIGNhc2Ugd2hlcmUgdHdvIC8gZ2V0IHJlc29sdmVkIGJlY2F1c2Ugb3VyIHByZWZpeCBpcyBhY3R1YWxseSAvXG4gICAgdGhpcy5fZm9ybWF0dGVkUHJlZml4ID0gdGhpcy5fZm9ybWF0dGVkUHJlZml4LnJlcGxhY2UoL1xcL1xcLy8sICcvJyk7XG5cbiAgICAvLyBGRURFUkFURUQgLyBSRUFEXG4gICAgaWYgKHByb3BzLnJlYWRSb2xlSWRzICE9IHVuZGVmaW5lZCAmJiBwcm9wcy5yZWFkUm9sZUlkcy5sZW5ndGggPiAwKSB7XG4gICAgICAvLyBDb25zdHJ1Y3Qgb3VyIFVzZXI6SWQgcm9sZXMgZm9yIHJlYWRcbiAgICAgIGNvbnN0IHN0YXRlbWVudCA9IHRoaXMuX3JlYWRTdGF0ZW1lbnRTY2FmZm9sZChwcm9wcyk7XG4gICAgICBzdGF0ZW1lbnQuYWRkQ29uZGl0aW9uKCdTdHJpbmdMaWtlJywgeyAnYXdzOnVzZXJJZCc6IHByb3BzLnJlYWRSb2xlSWRzLm1hcCh4ID0+IGAke3h9OipgKSB9KTtcbiAgICAgIHN0YXRlbWVudC5hZGRBbnlQcmluY2lwYWwoKTtcbiAgICAgIHRoaXMuX3JlYWRTdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50KTtcbiAgICB9XG4gICAgLy8gRkVERVJBVEVEIC8gUkVBRFdSSVRFXG4gICAgaWYgKHByb3BzLnJlYWRXcml0ZVJvbGVJZHMgIT0gdW5kZWZpbmVkICYmIHByb3BzLnJlYWRXcml0ZVJvbGVJZHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5fcmVhZFdyaXRlU3RhdGVtZW50U2NhZmZvbGQocHJvcHMpO1xuICAgICAgc3RhdGVtZW50LmFkZENvbmRpdGlvbignU3RyaW5nTGlrZScsIHsgJ2F3czp1c2VySWQnOiBwcm9wcy5yZWFkV3JpdGVSb2xlSWRzLm1hcCh4ID0+IGAke3h9OipgKSB9KTtcbiAgICAgIHN0YXRlbWVudC5hZGRBbnlQcmluY2lwYWwoKTtcbiAgICAgIHRoaXMuX3JlYWRXcml0ZVN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgIH1cblxuICAgIC8vIEZFREVSQVRFRCAvIFJFQURXUklURVNVUEVSXG4gICAgaWYgKHByb3BzLnJlYWRXcml0ZVN1cGVyUm9sZUlkcyAhPSB1bmRlZmluZWQgJiYgcHJvcHMucmVhZFdyaXRlU3VwZXJSb2xlSWRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudCA9IHRoaXMuX3JlYWRXcml0ZVN1cGVyU3RhdGVtZW50U2NhZmZvbGQocHJvcHMpO1xuICAgICAgc3RhdGVtZW50LmFkZENvbmRpdGlvbignU3RyaW5nTGlrZScsIHsgJ2F3czp1c2VySWQnOiBwcm9wcy5yZWFkV3JpdGVTdXBlclJvbGVJZHMubWFwKHggPT4gYCR7eH06KmApIH0pO1xuICAgICAgc3RhdGVtZW50LmFkZEFueVByaW5jaXBhbCgpO1xuICAgICAgdGhpcy5fcmVhZFdyaXRlU3VwZXJTdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50KTtcbiAgICB9XG5cbiAgICAvLyBOT05GRURFUkFURUQgLyBSRUFEXG4gICAgaWYgKHByb3BzLnJlYWRQcmluY2lwYWxzICE9IHVuZGVmaW5lZCAmJiBwcm9wcy5yZWFkUHJpbmNpcGFscy5sZW5ndGggPiAwKSB7XG4gICAgICBjb25zdCBzdGF0ZW1lbnQgPSB0aGlzLl9yZWFkU3RhdGVtZW50U2NhZmZvbGQocHJvcHMpO1xuICAgICAgcHJvcHMucmVhZFByaW5jaXBhbHMuZm9yRWFjaChwcmluY2lwYWwgPT4ge1xuICAgICAgICBzdGF0ZW1lbnQuYWRkUHJpbmNpcGFscyhwcmluY2lwYWwpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLl9yZWFkU3RhdGVtZW50cy5wdXNoKHN0YXRlbWVudCk7XG4gICAgfVxuICAgIC8vIE5PTkZFREVSQVRFRCAvIFJFQURXUklURVxuICAgIGlmIChwcm9wcy5yZWFkV3JpdGVQcmluY2lwYWxzICE9IHVuZGVmaW5lZCAmJiBwcm9wcy5yZWFkV3JpdGVQcmluY2lwYWxzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IHN0YXRlbWVudCA9IHRoaXMuX3JlYWRXcml0ZVN0YXRlbWVudFNjYWZmb2xkKHByb3BzKTtcbiAgICAgIHByb3BzLnJlYWRXcml0ZVByaW5jaXBhbHMuZm9yRWFjaChwcmluY2lwYWwgPT4ge1xuICAgICAgICBzdGF0ZW1lbnQuYWRkUHJpbmNpcGFscyhwcmluY2lwYWwpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLl9yZWFkV3JpdGVTdGF0ZW1lbnRzLnB1c2goc3RhdGVtZW50KTtcbiAgICB9XG4gICAgLy8gTk9ORkVERVJBVEVEIC8gUkVBRFdSSVRFU1VQRVJcbiAgICBpZiAocHJvcHMucmVhZFdyaXRlU3VwZXJQcmluY2lwYWxzICE9IHVuZGVmaW5lZCAmJiBwcm9wcy5yZWFkV3JpdGVTdXBlclByaW5jaXBhbHMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3Qgc3RhdGVtZW50ID0gdGhpcy5fcmVhZFdyaXRlU3VwZXJTdGF0ZW1lbnRTY2FmZm9sZChwcm9wcyk7XG4gICAgICBwcm9wcy5yZWFkV3JpdGVTdXBlclByaW5jaXBhbHMuZm9yRWFjaChwcmluY2lwYWwgPT4ge1xuICAgICAgICBzdGF0ZW1lbnQuYWRkUHJpbmNpcGFscyhwcmluY2lwYWwpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLl9yZWFkV3JpdGVTdXBlclN0YXRlbWVudHMucHVzaChzdGF0ZW1lbnQpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgX3JlYWRTdGF0ZW1lbnRTY2FmZm9sZChwcm9wczogSVJlc3RyaWN0T2JqZWN0UHJlZml4VG9Sb2xlcyk6IFBvbGljeVN0YXRlbWVudCB7XG4gICAgcmV0dXJuIG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgc2lkOiBgJHtwcm9wcy5zM1ByZWZpeC5yZXBsYWNlKC9cXFxcVy9nLCAnJyl9X1JlYWRgLFxuICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICByZXNvdXJjZXM6IFtwcm9wcy5zM0J1Y2tldC5idWNrZXRBcm4gKyB0aGlzLl9mb3JtYXR0ZWRQcmVmaXhdLFxuICAgICAgYWN0aW9uczogUmVzdHJpY3RPYmplY3RQcmVmaXhUb1JvbGVzLlJFQURfQUNUSU9OUyxcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgX3JlYWRXcml0ZVN0YXRlbWVudFNjYWZmb2xkKHByb3BzOiBJUmVzdHJpY3RPYmplY3RQcmVmaXhUb1JvbGVzKTogUG9saWN5U3RhdGVtZW50IHtcbiAgICByZXR1cm4gbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6IGAke3Byb3BzLnMzUHJlZml4LnJlcGxhY2UoL1xcXFxXL2csICcnKX1fUmVhZFdyaXRlYCxcbiAgICAgIGVmZmVjdDogRWZmZWN0LkFMTE9XLFxuICAgICAgcmVzb3VyY2VzOiBbcHJvcHMuczNCdWNrZXQuYnVja2V0QXJuICsgdGhpcy5fZm9ybWF0dGVkUHJlZml4XSxcbiAgICAgIGFjdGlvbnM6IFJlc3RyaWN0T2JqZWN0UHJlZml4VG9Sb2xlcy5SRUFEX1dSSVRFX0FDVElPTlMsXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIF9yZWFkV3JpdGVTdXBlclN0YXRlbWVudFNjYWZmb2xkKHByb3BzOiBJUmVzdHJpY3RPYmplY3RQcmVmaXhUb1JvbGVzKTogUG9saWN5U3RhdGVtZW50IHtcbiAgICByZXR1cm4gbmV3IFBvbGljeVN0YXRlbWVudCh7XG4gICAgICBzaWQ6IGAke3Byb3BzLnMzUHJlZml4LnJlcGxhY2UoL1xcXFxXL2csICcnKX1fUmVhZFdyaXRlU3VwZXJgLFxuICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICByZXNvdXJjZXM6IFtwcm9wcy5zM0J1Y2tldC5idWNrZXRBcm4gKyB0aGlzLl9mb3JtYXR0ZWRQcmVmaXhdLFxuICAgICAgYWN0aW9uczogUmVzdHJpY3RPYmplY3RQcmVmaXhUb1JvbGVzLlJFQURfV1JJVEVfU1VQRVJfQUNUSU9OUyxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZWFkU3RhdGVtZW50cygpOiBQb2xpY3lTdGF0ZW1lbnRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRTdGF0ZW1lbnRzO1xuICB9XG5cbiAgcHVibGljIHJlYWRXcml0ZVN0YXRlbWVudHMoKTogUG9saWN5U3RhdGVtZW50W10ge1xuICAgIHJldHVybiB0aGlzLl9yZWFkV3JpdGVTdGF0ZW1lbnRzO1xuICB9XG5cbiAgcHVibGljIHJlYWRXcml0ZVN1cGVyU3RhdGVtZW50cygpOiBQb2xpY3lTdGF0ZW1lbnRbXSB7XG4gICAgcmV0dXJuIHRoaXMuX3JlYWRXcml0ZVN1cGVyU3RhdGVtZW50cztcbiAgfVxuXG4gIHB1YmxpYyBzdGF0ZW1lbnRzKCk6IFBvbGljeVN0YXRlbWVudFtdIHtcbiAgICByZXR1cm4gWy4uLnRoaXMuX3JlYWRTdGF0ZW1lbnRzLCAuLi50aGlzLl9yZWFkV3JpdGVTdGF0ZW1lbnRzLCAuLi50aGlzLl9yZWFkV3JpdGVTdXBlclN0YXRlbWVudHNdO1xuICB9XG5cbiAgcHVibGljIGZvcm1hdFMzUHJlZml4KHByZWZpeDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgcmF3UHJlZml4ID0gcHJlZml4O1xuXG4gICAgLy8gUmVtb3ZlcyB0cmFpbGluZyBzbGFzaGVzXG4gICAgcmF3UHJlZml4ID0gcmF3UHJlZml4LmVuZHNXaXRoKCcvJykgPyByYXdQcmVmaXguc2xpY2UoMCwgLTEpIDogcmF3UHJlZml4O1xuICAgIC8vIFJlbW92ZXMgbGVhZGluZyBzbGFzaGVzXG4gICAgcmF3UHJlZml4ID0gcmF3UHJlZml4LnN0YXJ0c1dpdGgoJy8nKSA/IHJhd1ByZWZpeC5zdWJzdHJpbmcoMSkgOiByYXdQcmVmaXg7XG4gICAgcmV0dXJuIHJhd1ByZWZpeDtcbiAgfVxufVxuXG4vKiogSGVscGVyIGNsYXNzIGZvciBnZW5lcmF0aW5nIGJ1Y2tldCBwb2xpY3kgc3RhdGVtZW50c1xuICogd2hpY2ggYWxsb3cgb3IgZGVueSBhY2Nlc3MgdG8gYW4gZW50aXJlIGJ1Y2tldC4gVXNlZCB0b1xuICogY3JlYXRlIGJ1Y2tldC1sZXZlbCBkZWZhdWx0IGRlbnkgc3RhdGVtZW50cyB0byBibG9jayBhY2Nlc3Nlc1xuICogbm90IGdyYW50ZWQgaW4gdGhlIGJ1Y2tldCBwb2xpY3kuICovXG5leHBvcnQgY2xhc3MgUmVzdHJpY3RCdWNrZXRUb1JvbGVzIHtcbiAgcHVibGljIHJlYWRvbmx5IGRlbnlTdGF0ZW1lbnQ6IFBvbGljeVN0YXRlbWVudDtcbiAgcHVibGljIHJlYWRvbmx5IGFsbG93U3RhdGVtZW50OiBQb2xpY3lTdGF0ZW1lbnQ7XG4gIHByaXZhdGUgcmVzb3VyY2U6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgbm90UmVzb3VyY2U6IHN0cmluZ1tdID0gW107XG4gIHByaXZhdGUgZGVueUNvbmRpdGlvbmFsTm90RXF1YWxzOiB7XG4gICAgJ2F3czp1c2VySWQnPzogc3RyaW5nW107XG4gICAgJ2F3czpQcmluY2lwYWxBcm4nPzogc3RyaW5nW107XG4gIH0gPSB7fTtcblxuICBjb25zdHJ1Y3Rvcihwcm9wczogSVJlc3RyaWN0QnVja2V0VG9Sb2xlcykge1xuICAgIC8vIFN0YXRlbWVudCBhbGxvd2luZyBhY2Nlc3MgdG8gdGhlIGJ1Y2tldCBmb3IgdGhlIEFST0FzXG4gICAgdGhpcy5hbGxvd1N0YXRlbWVudCA9IG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgc2lkOiBgQnVja2V0QWxsb3dgLFxuICAgICAgZWZmZWN0OiBFZmZlY3QuQUxMT1csXG4gICAgICByZXNvdXJjZXM6IFtwcm9wcy5zM0J1Y2tldC5idWNrZXRBcm4gKyAnLyonLCBwcm9wcy5zM0J1Y2tldC5idWNrZXRBcm5dLFxuICAgICAgYWN0aW9uczogUmVzdHJpY3RPYmplY3RQcmVmaXhUb1JvbGVzLkJVQ0tFVF9BTExPV19BQ1RJT05TLFxuICAgIH0pO1xuICAgIHRoaXMuYWxsb3dTdGF0ZW1lbnQuYWRkQW55UHJpbmNpcGFsKCk7XG4gICAgdGhpcy5hbGxvd1N0YXRlbWVudC5hZGRDb25kaXRpb24oJ1N0cmluZ0xpa2UnLCB7ICdhd3M6dXNlcklkJzogcHJvcHMucm9sZUV4Y2x1ZGVJZHMubWFwKHggPT4gYCR7eH06KmApIH0pO1xuXG4gICAgLy8gQ29uc3R1Y3Qgb3VyIGRlbnkgc3RhdGVtZW50LlxuICAgIC8vIHByZWZpeEluY2x1ZGVzIGRlbm90ZXMgd2Ugd2FudCB0byBpbmNsdWRlIGEgcHJlZml4IGluIG91ciBkZW55IG1lYW5pbmcgUmVzb3VyY2VcbiAgICBpZiAocHJvcHMucHJlZml4SW5jbHVkZXMpIHtcbiAgICAgIHRoaXMucmVzb3VyY2UgPSBwcm9wcy5wcmVmaXhJbmNsdWRlcy5tYXAocHJlZml4ID0+IHtcbiAgICAgICAgcmV0dXJuIGAke3Byb3BzLnMzQnVja2V0LmJ1Y2tldEFybn0vJHt0aGlzLmZvcm1hdFMzUHJlZml4KHByZWZpeCl9YDtcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJlc291cmNlID0gW3Byb3BzLnMzQnVja2V0LmJ1Y2tldEFybiArICcvKiddO1xuICAgIH1cbiAgICAvLyBwcmVmaXhFeGNsdWRlcyBkZW5vdGUgd2Ugd2FudCB0byBleGNsdWRlIGEgcHJlZml4IGluIG91ciBkZW55IG1lYW5pbmcgbm90UmVzb3VyY2VcbiAgICBpZiAocHJvcHMucHJlZml4RXhjbHVkZXMpIHtcbiAgICAgIHRoaXMubm90UmVzb3VyY2UgPSBwcm9wcy5wcmVmaXhFeGNsdWRlcy5tYXAocHJlZml4ID0+IHtcbiAgICAgICAgcmV0dXJuIGAke3Byb3BzLnMzQnVja2V0LmJ1Y2tldEFybn0vJHt0aGlzLmZvcm1hdFMzUHJlZml4KHByZWZpeCl9YDtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmICh0aGlzLm5vdFJlc291cmNlLmxlbmd0aCA+IDApIHtcbiAgICAgIHRoaXMuZGVueVN0YXRlbWVudCA9IG5ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBzaWQ6IGBCdWNrZXREZW55YCxcbiAgICAgICAgZWZmZWN0OiBFZmZlY3QuREVOWSxcbiAgICAgICAgbm90UmVzb3VyY2VzOiB0aGlzLm5vdFJlc291cmNlLFxuICAgICAgICBhY3Rpb25zOiBSZXN0cmljdE9iamVjdFByZWZpeFRvUm9sZXMuQlVDS0VUX0RFTllfQUNUSU9OUyxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRlbnlTdGF0ZW1lbnQgPSBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgc2lkOiBgQnVja2V0RGVueWAsXG4gICAgICAgIGVmZmVjdDogRWZmZWN0LkRFTlksXG4gICAgICAgIHJlc291cmNlczogdGhpcy5yZXNvdXJjZSxcbiAgICAgICAgYWN0aW9uczogUmVzdHJpY3RPYmplY3RQcmVmaXhUb1JvbGVzLkJVQ0tFVF9ERU5ZX0FDVElPTlMsXG4gICAgICB9KTtcbiAgICB9XG4gICAgdGhpcy5kZW55U3RhdGVtZW50LmFkZEFueVByaW5jaXBhbCgpO1xuXG4gICAgLy8gQnVpbGQgb3VyIGNvbmRpdGlvbmFscy5cbiAgICB0aGlzLmRlbnlDb25kaXRpb25hbE5vdEVxdWFsc1snYXdzOnVzZXJJZCddID0gcHJvcHMucm9sZUV4Y2x1ZGVJZHMubWFwKHggPT4gYCR7eH06KmApO1xuICAgIGlmIChwcm9wcy5wcmluY2lwYWxFeGNsdWRlcyAmJiBwcm9wcy5wcmluY2lwYWxFeGNsdWRlcy5sZW5ndGggPiAwKSB7XG4gICAgICB0aGlzLmRlbnlDb25kaXRpb25hbE5vdEVxdWFsc1snYXdzOlByaW5jaXBhbEFybiddID0gWy4uLm5ldyBTZXQocHJvcHMucHJpbmNpcGFsRXhjbHVkZXMpXS5zb3J0KChhLCBiKSA9PlxuICAgICAgICBhLmxvY2FsZUNvbXBhcmUoYiksXG4gICAgICApO1xuICAgIH1cblxuICAgIC8vIENvbnN0cnVjdCBvdXIgY29uZGl0aW9uYWwgZm9yIG91ciBkZW55XG4gICAgaWYgKE9iamVjdC5rZXlzKHRoaXMuZGVueUNvbmRpdGlvbmFsTm90RXF1YWxzKS5sZW5ndGggPT0gMSkge1xuICAgICAgdGhpcy5kZW55U3RhdGVtZW50LmFkZENvbmRpdGlvbignU3RyaW5nTm90TGlrZScsIHRoaXMuZGVueUNvbmRpdGlvbmFsTm90RXF1YWxzKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5kZW55U3RhdGVtZW50LmFkZENvbmRpdGlvbignRm9yQW55VmFsdWU6U3RyaW5nTm90TGlrZScsIHRoaXMuZGVueUNvbmRpdGlvbmFsTm90RXF1YWxzKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZvcm1hdFMzUHJlZml4KHByZWZpeDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQgcmF3UHJlZml4ID0gcHJlZml4O1xuXG4gICAgLy8gUmVtb3ZlcyB0cmFpbGluZyBzbGFzaGVzXG4gICAgcmF3UHJlZml4ID0gcmF3UHJlZml4LmVuZHNXaXRoKCcvJykgPyByYXdQcmVmaXguc2xpY2UoMCwgLTEpIDogcmF3UHJlZml4O1xuICAgIC8vIFJlbW92ZXMgbGVhZGluZyBzbGFzaGVzXG4gICAgcmF3UHJlZml4ID0gcmF3UHJlZml4LnN0YXJ0c1dpdGgoJy8nKSA/IHJhd1ByZWZpeC5zdWJzdHJpbmcoMSkgOiByYXdQcmVmaXg7XG4gICAgcmV0dXJuIGAke3Jhd1ByZWZpeH0vKmA7XG4gIH1cbn1cbiJdfQ==