image-scanner-with-trivy 2.1.1 → 2.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/.jsii CHANGED
@@ -4664,6 +4664,6 @@
4664
4664
  "symbolId": "src/image-scanner-with-trivy:Severity"
4665
4665
  }
4666
4666
  },
4667
- "version": "2.1.1",
4668
- "fingerprint": "UxJGqLDdTlaUSu2uNRizQj8PQSz6boH8jdb01Unk+3s="
4667
+ "version": "2.1.3",
4668
+ "fingerprint": "MLezUwjSdnluwvUACLAC3044AM3/IaEvfSIDG2rpLyM="
4669
4669
  }
package/CONTRIBUTION.md CHANGED
@@ -1,12 +1,20 @@
1
- ## Contribution
1
+ # Contribution
2
2
 
3
- ### Build for Code Bundle and API.md
3
+ ## Build for Code Bundle and API.md
4
4
 
5
5
  ```sh
6
6
  yarn build
7
7
  ```
8
8
 
9
- ### Update Snapshots in Integration Tests
9
+ ## Execute Unit Tests, Linting, and Integration Tests
10
+
11
+ ```sh
12
+ yarn tsc -p tsconfig.dev.json
13
+
14
+ yarn test
15
+ ```
16
+
17
+ ## Update Snapshots in Integration Tests
10
18
 
11
19
  ```sh
12
20
  yarn tsc -p tsconfig.dev.json
@@ -1,10 +1,10 @@
1
- "use strict";var g=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var O=Object.prototype.hasOwnProperty;var h=(e,t)=>{for(var n in t)g(e,n,{get:t[n],enumerable:!0})},L=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of C(t))!O.call(e,r)&&r!==n&&g(e,r,{get:()=>t[r],enumerable:!(o=y(t,r))||o.enumerable});return e};var R=e=>L(g({},"__esModule",{value:!0}),e);var b={};h(b,{handler:()=>k});module.exports=R(b);var d=require("child_process"),p=require("fs"),a=require("@aws-sdk/client-cloudwatch-logs"),c=require("@aws-sdk/client-cloudformation");var S="/tmp/.trivyignore",m=new a.CloudWatchLogsClient,w=new c.CloudFormationClient,k=async function(e){let t=e.RequestType,n=e.ResourceProperties;if(!n.addr||!n.imageUri)throw new Error("addr and imageUri are required.");let o={PhysicalResourceId:n.addr,Data:{}};if(t==="Create"||t==="Update"){let r=$(n);n.trivyIgnore.length&&(console.log("trivyignore: "+JSON.stringify(n.trivyIgnore)),x(n.trivyIgnore));let i=`/opt/trivy image --no-progress ${r.join(" ")} ${n.imageUri}`;console.log("command: "+i),console.log("imageUri: "+n.imageUri);let s=(0,d.spawnSync)(i,{shell:!0});if(await E(s,n.imageUri,n.output),s.status===0)return o;let u=`Error: ${s.error}
1
+ "use strict";var g=Object.defineProperty;var y=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var O=Object.prototype.hasOwnProperty;var h=(e,t)=>{for(var n in t)g(e,n,{get:t[n],enumerable:!0})},R=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of C(t))!O.call(e,r)&&r!==n&&g(e,r,{get:()=>t[r],enumerable:!(o=y(t,r))||o.enumerable});return e};var L=e=>R(g({},"__esModule",{value:!0}),e);var b={};h(b,{handler:()=>k});module.exports=L(b);var d=require("child_process"),p=require("fs"),a=require("@aws-sdk/client-cloudwatch-logs"),c=require("@aws-sdk/client-cloudformation");var S="/tmp/.trivyignore",m=new a.CloudWatchLogsClient,w=new c.CloudFormationClient,k=async function(e){let t=e.RequestType,n=e.ResourceProperties;if(!n.addr||!n.imageUri)throw new Error("addr and imageUri are required.");let o={PhysicalResourceId:n.addr,Data:{}};if(t==="Create"||t==="Update"){let r=E(n);n.trivyIgnore.length&&(console.log("trivyignore: "+JSON.stringify(n.trivyIgnore)),$(n.trivyIgnore));let i=`/opt/trivy image --no-progress ${r.join(" ")} ${n.imageUri}`;console.log("command: "+i),console.log("imageUri: "+n.imageUri);let s=(0,d.spawnSync)(i,{shell:!0});if(await x(s,n.imageUri,n.output),s.status===0)return o;let u=`Error: ${s.error}
2
2
  Signal: ${s.signal}
3
3
  Status: ${s.status}
4
4
  Image Scanner returned fatal errors. You may have vulnerabilities. See logs.`;if(n.suppressErrorOnRollback==="true"&&await I(e.StackId))return console.log(`Vulnerabilities may be detected, but suppressing errors during rollback (suppressErrorOnRollback=true).
5
- ${u}`),o;throw new Error(u)}return o},$=e=>{let t=[];return e.ignoreUnfixed==="true"&&t.push("--ignore-unfixed"),e.severity.length&&t.push(`--severity ${e.severity.join(",")}`),e.scanners.length&&t.push(`--scanners ${e.scanners.join(",")}`),e.imageConfigScanners.length&&t.push(`--image-config-scanners ${e.imageConfigScanners.join(",")}`),e.exitCode&&t.push(`--exit-code ${e.exitCode}`),e.exitOnEol&&t.push(`--exit-on-eol ${e.exitOnEol}`),e.trivyIgnore.length&&t.push(`--ignorefile ${S}`),e.platform&&t.push(`--platform ${e.platform}`),t},x=e=>{let t=e.join(`
6
- `);(0,p.writeFileSync)(S,t,"utf-8")},E=async(e,t,n)=>{switch(n?.type){case"cloudWatchLogs":await v(e,n,t);break;default:console.log(`stderr:
5
+ ${u}`),o;throw new Error(u)}return o},E=e=>{let t=[];return e.ignoreUnfixed==="true"&&t.push("--ignore-unfixed"),e.severity.length&&t.push(`--severity ${e.severity.join(",")}`),e.scanners.length&&t.push(`--scanners ${e.scanners.join(",")}`),e.imageConfigScanners.length&&t.push(`--image-config-scanners ${e.imageConfigScanners.join(",")}`),e.exitCode&&t.push(`--exit-code ${e.exitCode}`),e.exitOnEol&&t.push(`--exit-on-eol ${e.exitOnEol}`),e.trivyIgnore.length&&t.push(`--ignorefile ${S}`),e.platform&&t.push(`--platform ${e.platform}`),t},$=e=>{let t=e.join(`
6
+ `);(0,p.writeFileSync)(S,t,"utf-8")},x=async(e,t,n)=>{switch(n?.type){case"cloudWatchLogs":await v(e,n,t);break;default:console.log(`stderr:
7
7
  `+e.stderr.toString()),console.log(`stdout:
8
8
  `+e.stdout.toString())}},v=async(e,t,n)=>{let[o,r]=n.split(":"),i=r?`uri=${o},tag=${r}`:`uri=${o}`;try{await m.send(new a.CreateLogStreamCommand({logGroupName:t.logGroupName,logStreamName:i}))}catch(l){if(l instanceof a.ResourceAlreadyExistsException)console.log(`Log stream ${i} already exists in log group ${t.logGroupName}.`);else throw l}let s=new Date().getTime(),u={logGroupName:t.logGroupName,logStreamName:i,logEvents:[{timestamp:s,message:`stderr:
9
9
  `+e.stderr.toString()},{timestamp:s,message:`stdout:
10
- `+e.stdout.toString()}]},f=new a.PutLogEventsCommand(u);await m.send(f),console.log(`Scan logs output to the log group: ${t.logGroupName}, log stream: ${i}`)},I=async e=>{let t=new c.DescribeStacksCommand({StackName:e}),n=await w.send(t);if(n.Stacks&&n.Stacks.length>0)return n.Stacks[0].StackStatus===c.ResourceStatus.ROLLBACK_IN_PROGRESS;throw new Error(`Stack not found or no stacks returned from DescribeStacks command, stackId: ${e}`)};0&&(module.exports={handler});
10
+ `+e.stdout.toString()}]},f=new a.PutLogEventsCommand(u);await m.send(f),console.log(`Scan logs output to the log group: ${t.logGroupName}, log stream: ${i}`)},I=async e=>{let t=new c.DescribeStacksCommand({StackName:e}),n=await w.send(t);if(n.Stacks&&n.Stacks.length>0){let o=n.Stacks[0].StackStatus;return o===c.ResourceStatus.ROLLBACK_IN_PROGRESS||o===c.ResourceStatus.UPDATE_ROLLBACK_IN_PROGRESS}throw new Error(`Stack not found or no stacks returned from DescribeStacks command, stackId: ${e}`)};0&&(module.exports={handler});
@@ -168,7 +168,10 @@ const isRollbackInProgress = async (stackId: string): Promise<boolean> => {
168
168
 
169
169
  if (response.Stacks && response.Stacks.length > 0) {
170
170
  const stackStatus = response.Stacks[0].StackStatus;
171
- return stackStatus === ResourceStatus.ROLLBACK_IN_PROGRESS;
171
+ return (
172
+ stackStatus === ResourceStatus.ROLLBACK_IN_PROGRESS ||
173
+ stackStatus === ResourceStatus.UPDATE_ROLLBACK_IN_PROGRESS
174
+ );
172
175
  }
173
176
 
174
177
  throw new Error(
@@ -6,6 +6,7 @@ const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
6
6
  const path_1 = require("path");
7
7
  const aws_cdk_lib_1 = require("aws-cdk-lib");
8
8
  const aws_ecr_assets_1 = require("aws-cdk-lib/aws-ecr-assets");
9
+ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
9
10
  const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
10
11
  const aws_logs_1 = require("aws-cdk-lib/aws-logs");
11
12
  const custom_resources_1 = require("aws-cdk-lib/custom-resources");
@@ -59,7 +60,7 @@ class ScanLogsOutput {
59
60
  }
60
61
  exports.ScanLogsOutput = ScanLogsOutput;
61
62
  _a = JSII_RTTI_SYMBOL_1;
62
- ScanLogsOutput[_a] = { fqn: "image-scanner-with-trivy.ScanLogsOutput", version: "2.1.1" };
63
+ ScanLogsOutput[_a] = { fqn: "image-scanner-with-trivy.ScanLogsOutput", version: "2.1.3" };
63
64
  class CloudWatchLogsOutput extends ScanLogsOutput {
64
65
  constructor(options) {
65
66
  super();
@@ -105,6 +106,14 @@ class ImageScannerWithTrivy extends constructs_1.Construct {
105
106
  ephemeralStorageSize: aws_cdk_lib_1.Size.gibibytes(10), // for cases that need to update trivy DB: /tmp/trivy/db/trivy.db
106
107
  });
107
108
  props.repository.grantPull(customResourceLambda);
109
+ // Grant CloudFormation DescribeStacks permission for rollback detection when suppressErrorOnRollback is enabled
110
+ const suppressErrorOnRollback = props.suppressErrorOnRollback ?? true;
111
+ if (suppressErrorOnRollback) {
112
+ customResourceLambda.addToRolePolicy(new aws_iam_1.PolicyStatement({
113
+ actions: ['cloudformation:DescribeStacks'],
114
+ resources: [aws_cdk_lib_1.Stack.of(this).stackId],
115
+ }));
116
+ }
108
117
  const customResourceLambdaLogGroupConstructName = `DefaultLogGroupFor${lambdaPurpose}`;
109
118
  this.validateLambdaDefaultLogGroupOptions(customResourceLambdaLogGroupConstructName, props);
110
119
  if (props.defaultLogGroupRemovalPolicy || props.defaultLogGroupRetentionDays) {
@@ -125,7 +134,7 @@ class ImageScannerWithTrivy extends constructs_1.Construct {
125
134
  trivyIgnore: props.trivyIgnore ?? [],
126
135
  platform: props.platform ?? '',
127
136
  output: props.scanLogsOutput?.bind(customResourceLambda),
128
- suppressErrorOnRollback: String(props.suppressErrorOnRollback ?? true),
137
+ suppressErrorOnRollback: String(suppressErrorOnRollback),
129
138
  };
130
139
  new aws_cdk_lib_1.CustomResource(this, 'Resource', {
131
140
  resourceType: 'Custom::ImageScannerWithTrivy',
@@ -182,5 +191,5 @@ class ImageScannerWithTrivy extends constructs_1.Construct {
182
191
  }
183
192
  exports.ImageScannerWithTrivy = ImageScannerWithTrivy;
184
193
  _b = JSII_RTTI_SYMBOL_1;
185
- ImageScannerWithTrivy[_b] = { fqn: "image-scanner-with-trivy.ImageScannerWithTrivy", version: "2.1.1" };
186
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2Utc2Nhbm5lci13aXRoLXRyaXZ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ltYWdlLXNjYW5uZXItd2l0aC10cml2eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLCtCQUE0QjtBQUM1Qiw2Q0FTcUI7QUFFckIsK0RBQXNEO0FBRXRELHVEQU1nQztBQUNoQyxtREFBdUY7QUFDdkYsbUVBQXdEO0FBQ3hELDJDQUF1QztBQUN2QyxtQ0FLaUI7QUFFakI7Ozs7R0FJRztBQUNILElBQVksUUFNWDtBQU5ELFdBQVksUUFBUTtJQUNsQiwrQkFBbUIsQ0FBQTtJQUNuQix1QkFBVyxDQUFBO0lBQ1gsNkJBQWlCLENBQUE7SUFDakIseUJBQWEsQ0FBQTtJQUNiLGlDQUFxQixDQUFBO0FBQ3ZCLENBQUMsRUFOVyxRQUFRLHdCQUFSLFFBQVEsUUFNbkI7QUFFRDs7OztHQUlHO0FBQ0gsSUFBWSxRQUtYO0FBTEQsV0FBWSxRQUFRO0lBQ2xCLHlCQUFhLENBQUE7SUFDYiw2QkFBaUIsQ0FBQTtJQUNqQiw2QkFBaUIsQ0FBQTtJQUNqQiwrQkFBbUIsQ0FBQTtBQUNyQixDQUFDLEVBTFcsUUFBUSx3QkFBUixRQUFRLFFBS25CO0FBRUQ7Ozs7R0FJRztBQUNILElBQVksbUJBR1g7QUFIRCxXQUFZLG1CQUFtQjtJQUM3Qix3Q0FBaUIsQ0FBQTtJQUNqQix3Q0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBSFcsbUJBQW1CLG1DQUFuQixtQkFBbUIsUUFHOUI7QUFZRDs7R0FFRztBQUNILE1BQXNCLGNBQWM7SUFDbEM7O09BRUc7SUFDSSxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQWtDO1FBQzdELE9BQU8sSUFBSSxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzQyxDQUFDOztBQU5ILHdDQVlDOzs7QUFFRCxNQUFNLG9CQUFxQixTQUFRLGNBQWM7SUFNL0MsWUFBWSxPQUFrQztRQUM1QyxLQUFLLEVBQUUsQ0FBQztRQUVSLElB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LCtCQUFpQixDQUFDLHVCQUF1QixDQUFDO1lBQ3RFLEtBQUssU0FBUztnQkFDWixPQUFPLGNBQWMsS0FBSyxTQUFTLENBQUM7WUFDdEM7Z0JBQ0UsT0FBTyxhQUE2QixDQUFDO1FBQ3pDLENBQUM7SUFDSCxDQUFDOztBQWhKSCxzREFpSkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBqb2luIH0gZnJvbSAncGF0aCc7XG5pbXBvcnQge1xuICBBbm5vdGF0aW9ucyxcbiAgQ2ZuRGVsZXRpb25Qb2xpY3ksXG4gIEN1c3RvbVJlc291cmNlLFxuICBEdXJhdGlvbixcbiAgUmVtb3ZhbFBvbGljeSxcbiAgU2l6ZSxcbiAgU3RhY2ssXG4gIFRva2VuLFxufSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBJUmVwb3NpdG9yeSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lY3InO1xuaW1wb3J0IHsgUGxhdGZvcm0gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWNyLWFzc2V0cyc7XG5pbXBvcnQgeyBJR3JhbnRhYmxlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQge1xuICBBcmNoaXRlY3R1cmUsXG4gIEFzc2V0Q29kZSxcbiAgSGFuZGxlcixcbiAgUnVudGltZSxcbiAgU2luZ2xldG9uRnVuY3Rpb24sXG59IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgQ2ZuTG9nR3JvdXAsIElMb2dHcm91cCwgTG9nR3JvdXAsIFJldGVudGlvbkRheXMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgeyBQcm92aWRlciB9IGZyb20gJ2F3cy1jZGstbGliL2N1c3RvbS1yZXNvdXJjZXMnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQge1xuICBDbG91ZFdhdGNoTG9nc091dHB1dE9wdGlvbnMsXG4gIFNjYW5Mb2dzT3V0cHV0T3B0aW9ucyxcbiAgU2NhbkxvZ3NPdXRwdXRUeXBlLFxuICBTY2FubmVyQ3VzdG9tUmVzb3VyY2VQcm9wcyxcbn0gZnJvbSAnLi90eXBlcyc7XG5cbi8qKlxuICogRW51bSBmb3IgU2V2ZXJpdHkgU2VsZWN0aW9uXG4gKlxuICogQHNlZSBodHRwczovL2FxdWFzZWN1cml0eS5naXRodWIuaW8vdHJpdnkvbGF0ZXN0L2RvY3Mvc2Nhbm5lci92dWxuZXJhYmlsaXR5LyNzZXZlcml0eS1zZWxlY3Rpb25cbiAqL1xuZXhwb3J0IGVudW0gU2V2ZXJpdHkge1xuICBVTktOT1dOID0gJ1VOS05PV04nLFxuICBMT1cgPSAnTE9XJyxcbiAgTUVESVVNID0gJ01FRElVTScsXG4gIEhJR0ggPSAnSElHSCcsXG4gIENSSVRJQ0FMID0gJ0NSSVRJQ0FMJyxcbn1cblxuLyoqXG4gKiBFbnVtIGZvciBTY2FubmVyc1xuICpcbiAqIEBzZWUgaHR0cHM6Ly9hcXVhc2VjdXJpdHkuZ2l0aHViLmlvL3RyaXZ5L2xhdGVzdC9kb2NzL2NvbmZpZ3VyYXRpb24vb3RoZXJzLyNlbmFibGVkaXNhYmxlLXNjYW5uZXJzXG4gKi9cbmV4cG9ydCBlbnVtIFNjYW5uZXJzIHtcbiAgVlVMTiA9ICd2dWxuJyxcbiAgQ09ORklHID0gJ2NvbmZpZycsXG4gIFNFQ1JFVCA9ICdzZWNyZXQnLFxuICBMSUNFTlNFID0gJ2xpY2Vuc2UnLFxufVxuXG4vKipcbiAqIEVudW0gZm9yIEltYWdlQ29uZmlnU2Nhbm5lcnNcbiAqXG4gKiBAc2VlIGh0dHBzOi8vYXF1YXNlY3VyaXR5LmdpdGh1Yi5pby90cml2eS9sYXRlc3QvZG9jcy90YXJnZXQvY29udGFpbmVyX2ltYWdlLyNjb250YWluZXItaW1hZ2UtbWV0YWRhdGFcbiAqL1xuZXhwb3J0IGVudW0gSW1hZ2VDb25maWdTY2FubmVycyB7XG4gIENPTkZJRyA9ICdjb25maWcnLFxuICBTRUNSRVQgPSAnc2VjcmV0Jyxcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIGZvciBzY2FuIGxvZ3Mgb3V0cHV0IHRvIENsb3VkV2F0Y2ggTG9ncyBsb2cgZ3JvdXAuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2xvdWRXYXRjaExvZ3NPdXRwdXRQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbG9nIGdyb3VwIHRvIG91dHB1dCBzY2FuIGxvZ3MuXG4gICAqL1xuICByZWFkb25seSBsb2dHcm91cDogSUxvZ0dyb3VwO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIG91dHB1dCBvZiB0aGUgc2NhbiBsb2dzLlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgU2NhbkxvZ3NPdXRwdXQge1xuICAvKipcbiAgICogU2NhbiBsb2dzIG91dHB1dCB0byBDbG91ZFdhdGNoIExvZ3MgbG9nIGdyb3VwLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBjbG91ZFdhdGNoTG9ncyhvcHRpb25zOiBDbG91ZFdhdGNoTG9nc091dHB1dFByb3BzKTogU2NhbkxvZ3NPdXRwdXQge1xuICAgIHJldHVybiBuZXcgQ2xvdWRXYXRjaExvZ3NPdXRwdXQob3B0aW9ucyk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgb3V0cHV0IGNvbmZpZ3VyYXRpb24gZm9yIHNjYW4gbG9ncy5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBiaW5kKGdyYW50ZWU6IElHcmFudGFibGUpOiBTY2FuTG9nc091dHB1dE9wdGlvbnM7XG59XG5cbmNsYXNzIENsb3VkV2F0Y2hMb2dzT3V0cHV0IGV4dGVuZHMgU2NhbkxvZ3NPdXRwdXQge1xuICAvKipcbiAgICogVGhlIGxvZyBncm91cCB0byBvdXRwdXQgc2NhbiBsb2dzLlxuICAgKi9cbiAgcHJpdmF0ZSByZWFkb25seSBsb2dHcm91cDogSUxvZ0dyb3VwO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IENsb3VkV2F0Y2hMb2dzT3V0cHV0UHJvcHMpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5sb2dHcm91cCA9IG9wdGlvbnMubG9nR3JvdXA7XG4gIH1cblxuICBwdWJsaWMgYmluZChncmFudGVlOiBJR3JhbnRhYmxlKTogQ2xvdWRXYXRjaExvZ3NPdXRwdXRPcHRpb25zIHtcbiAgICAvLyBNb3N0IExhbWJkYXMgYXJlIGdyYW50ZWQgQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlIGFuZCBjYW4gd3JpdGUgdG8gYW55IENsb3VkV2F0Y2ggTG9ncy5cbiAgICAvLyBIb3dldmVyLCBqdXN0IGluIGNhc2UgQVdTTGFtYmRhQmFzaWNFeGVjdXRpb25Sb2xlIGlzIG5vdCBncmFudGVkLCBhbGxvdyB3cml0aW5nIHRvIENsb3VkV2F0Y2ggTG9ncy5cbiAgICB0aGlzLmxvZ0dyb3VwLmdyYW50V3JpdGUoZ3JhbnRlZSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgdHlwZTogU2NhbkxvZ3NPdXRwdXRUeXBlLkNMT1VEV0FUQ0hfTE9HUyxcbiAgICAgIGxvZ0dyb3VwTmFtZTogdGhpcy5sb2dHcm91cC5sb2dHcm91cE5hbWUsXG4gICAgfTtcbiAgfVxufVxuXG5leHBvcnQgaW50ZXJmYWNlIEltYWdlU2Nhbm5lcldpdGhUcml2eVByb3BzIHtcbiAgLyoqXG4gICAqIEltYWdlIFVSSSBmb3Igc2NhbiB0YXJnZXQuXG4gICAqL1xuICByZWFkb25seSBpbWFnZVVyaTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBSZXBvc2l0b3J5IGluY2x1ZGluZyB0aGUgaW1hZ2UgVVJJIGZvciBzY2FuIHRhcmdldC5cbiAgICpcbiAgICogQmVjYXVzZSBvZiBncmFudFB1bGwgdG8gQ3VzdG9tUmVzb3VyY2VMYW1iZGEuXG4gICAqL1xuICByZWFkb25seSByZXBvc2l0b3J5OiBJUmVwb3NpdG9yeTtcblxuICAvKipcbiAgICogVGhlIHVuZml4ZWQvdW5maXhhYmxlIHZ1bG5lcmFiaWxpdGllcyBtZWFuIHRoYXQgdGhlIHBhdGNoIGhhcyBub3QgeWV0IGJlZW4gcHJvdmlkZWQgb24gdGhlaXIgZGlzdHJpYnV0aW9uLlxuICAgKlxuICAgKiBUbyBoaWRlIHVuZml4ZWQvdW5maXhhYmxlIHZ1bG5lcmFiaWxpdGllcywgeW91IGNhbiB1c2UgdGhlIGAtLWlnbm9yZS11bmZpeGVkYCBmbGFnLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vYXF1YXNlY3VyaXR5LmdpdGh1Yi5pby90cml2eS9sYXRlc3QvZG9jcy9zY2FubmVyL3Z1bG5lcmFiaWxpdHkvI3VuZml4ZWQtdnVsbmVyYWJpbGl0aWVzXG4gICAqL1xuICByZWFkb25seSBpZ25vcmVVbmZpeGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogU2V2ZXJpdHkgU2VsZWN0aW9uXG4gICAqXG4gICAqIFRoZSBzZXZlcml0eSBpcyB0YWtlbiBmcm9tIHRoZSBzZWxlY3RlZCBkYXRhIHNvdXJjZSBzaW5jZSB0aGUgc2V2ZXJpdHkgZnJvbSB2ZW5kb3JzIGlzIG1vcmUgYWNjdXJhdGUuXG4gICAqIFVzaW5nIENWRS0yMDIzLTA0NjQgYXMgYW4gZXhhbXBsZSwgd2hpbGUgaXQgaXMgcmF0ZWQgYXMgXCJISUdIXCIgaW4gTlZELCBSZWQgSGF0IGhhcyBtYXJrZWQgaXRzICdJbXBhY3QnIGFzIFwiTG93XCIuIEFzIGEgcmVzdWx0LCBUcml2eSB3aWxsIGRpc3BsYXkgaXQgYXMgXCJMb3dcIi5cbiAgICpcbiAgICogVGhlIHNldmVyaXR5IGRlcGVuZHMgb24gdGhlIGNvbXBpbGUgb3B0aW9uLCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uLCBldGMuIE5WRCBkb2Vzbid0IGtub3cgaG93IHRoZSB2ZW5kb3IgZGlzdHJpYnV0ZXMgdGhlIHNvZnR3YXJlLlxuICAgKiBSZWQgSGF0IGV2YWx1YXRlcyB0aGUgc2V2ZXJpdHkgbW9yZSBhY2N1cmF0ZWx5LiBUaGF0J3Mgd2h5IFRyaXZ5IHByZWZlcnMgdmVuZG9yIHNjb3JlcyBvdmVyIE5WRC5cbiAgICpcbiAgICogSXQgZGVmYXVsdHMgdG8gYENSSVRJQ0FMYCBJTiBUSElTIENPTlNUUlVDVCBmb3Igc2FmZXR5IGluIENJL0NELCBidXQgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBvZiBUcml2eSBpcyBcIkNSSVRJQ0FMLEhJR0gsTUVESVVNLExPVyxVTktOT1dOXCIuXG4gICAqXG4gICAqIEBkZWZhdWx0IFtTZXZlcml0eS5DUklUSUNBTF1cbiAgICpcbiAgICogQHNlZSBodHRwczovL2FxdWFzZWN1cml0eS5naXRodWIuaW8vdHJpdnkvbGF0ZXN0L2RvY3Mvc2Nhbm5lci92dWxuZXJhYmlsaXR5LyNzZXZlcml0eS1zZWxlY3Rpb25cbiAgICovXG4gIHJlYWRvbmx5IHNldmVyaXR5PzogU2V2ZXJpdHlbXTtcblxuICAvKipcbiAgICogRW5hYmxlL0Rpc2FibGUgU2Nhbm5lcnNcbiAgICpcbiAgICogWW91IGNhbiBlbmFibGUvZGlzYWJsZSBzY2FubmVycyB3aXRoIHRoZSBgc2Nhbm5lcnNgLlxuICAgKlxuICAgKiBGb3IgZXhhbXBsZSwgY29udGFpbmVyIGltYWdlIHNjYW5uaW5nIGVuYWJsZXMgdnVsbmVyYWJpbGl0eSAoVlVMTikgYW5kIHNlY3JldCBzY2FubmVycyAoU0VDUkVUKSBieSBkZWZhdWx0LlxuICAgKiBJZiB5b3UgZG9uJ3QgbmVlZCBzZWNyZXQgc2Nhbm5pbmcsIGl0IGNhbiBiZSBkaXNhYmxlZCBieSBzcGVjaWZ5aW5nIFNjYW5uZXJzLlZVTE4gb25seS5cbiAgICpcbiAgICogQGRlZmF1bHQgW1NlY3VyaXR5LlZVTE4sU2Nhbm5lcnMuU0VDUkVUXVxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vYXF1YXNlY3VyaXR5LmdpdGh1Yi5pby90cml2eS9sYXRlc3QvZG9jcy9jb25maWd1cmF0aW9uL290aGVycy8jZW5hYmxlZGlzYWJsZS1zY2FubmVyc1xuICAgKi9cbiAgcmVhZG9ubHkgc2Nhbm5lcnM/OiBTY2FubmVyc1tdO1xuXG4gIC8qKlxuICAgKiBFbnVtIGZvciBJbWFnZUNvbmZpZ1NjYW5uZXJzXG4gICAqXG4gICAqIENvbnRhaW5lciBpbWFnZXMgaGF2ZSBjb25maWd1cmF0aW9uLiBkb2NrZXIgaW5zcGVjdCBhbmQgYGRvY2tlciBoaXN0b3J5YCBzaG93IHRoZSBpbmZvcm1hdGlvbiBhY2NvcmRpbmcgdG8gdGhlIGNvbmZpZ3VyYXRpb24uXG4gICAqIFRyaXZ5IHNjYW5zIHRoZSBjb25maWd1cmF0aW9uIG9mIGNvbnRhaW5lciBpbWFnZXMgZm9yXG4gICAqXG4gICAqIC0gTWlzY29uZmlndXJhdGlvbnNcbiAgICogLSBTZWNyZXRzXG4gICAqXG4gICAqIFRoZXkgYXJlIGRpc2FibGVkIGJ5IGRlZmF1bHQuIFlvdSBjYW4gZW5hYmxlIHRoZW0gd2l0aCBgaW1hZ2VDb25maWdTY2FubmVyc2AuXG4gICAqXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9hcXVhc2VjdXJpdHkuZ2l0aHViLmlvL3RyaXZ5L2xhdGVzdC9kb2NzL3RhcmdldC9jb250YWluZXJfaW1hZ2UvI2NvbnRhaW5lci1pbWFnZS1tZXRhZGF0YVxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VDb25maWdTY2FubmVycz86IEltYWdlQ29uZmlnU2Nhbm5lcnNbXTtcblxuICAvKipcbiAgICogRXhpdCBDb2RlXG4gICAqXG4gICAqIFVzZSB0aGUgYGV4aXRDb2RlYCBvcHRpb24gaWYgeW91IHdhbnQgdG8gZXhpdCB3aXRoIGEgbm9uLXplcm8gZXhpdCBjb2RlLlxuICAgKlxuICAgKiBZb3UgY2FuIHNwZWNpZnkgMCBpZiB5b3UgZG8gbm90IHdhbnQgdG8gZXhpdCBldmVuIHdoZW4gdnVsbmVyYWJpbGl0aWVzIGFyZSBkZXRlY3RlZC5cbiAgICpcbiAgICogSXQgZGVmYXVsdHMgdG8gMSBJTiBUSElTIENPTlNUUlVDVCBmb3Igc2FmZXR5IGluIENJL0NELiBJbiB0aGUgb3JpZ2luYWwgdHJpdnksIGl0IGlzIDAuXG4gICAqXG4gICAqIEBkZWZhdWx0IDFcbiAgICpcbiAgICogQHNlZSBodHRwczovL2FxdWFzZWN1cml0eS5naXRodWIuaW8vdHJpdnkvbGF0ZXN0L2RvY3MvY29uZmlndXJhdGlvbi9vdGhlcnMvI2V4aXQtY29kZVxuICAgKi9cbiAgcmVhZG9ubHkgZXhpdENvZGU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEV4aXQgb24gRU9MXG4gICAqXG4gICAqIFNvbWV0aW1lcyB5b3UgbWF5IHN1cnByaXNpbmdseSBnZXQgMCB2dWxuZXJhYmlsaXRpZXMgaW4gYW4gb2xkIGltYWdlOlxuICAgKiAgLSBFbmFibGluZyAtLWlnbm9yZS11bmZpeGVkIG9wdGlvbiB3aGlsZSBhbGwgcGFja2FnZXMgaGF2ZSBubyBmaXhlZCB2ZXJzaW9ucy5cbiAgICogIC0gU2Nhbm5pbmcgYSByYXRoZXIgb3V0ZGF0ZWQgT1MgKGUuZy4gVWJ1bnR1IDEwLjA0KS5cbiAgICpcbiAgICogQW4gT1MgYXQgdGhlIGVuZCBvZiBzZXJ2aWNlL2xpZmUgKEVPTCkgdXN1YWxseSBnZXRzIGludG8gdGhpcyBzaXR1YXRpb24sIHdoaWNoIGlzIGRlZmluaXRlbHkgZnVsbCBvZiB2dWxuZXJhYmlsaXRpZXMuXG4gICAqIGBleGl0T25Fb2xgIGNhbiBmYWlsIHNjYW5uaW5nIG9uIEVPTCBPUyB3aXRoIGEgbm9uLXplcm8gY29kZS5cbiAgICpcbiAgICogSXQgZGVmYXVsdHMgdG8gMSBJTiBUSElTIENPTlNUUlVDVCBmb3Igc2FmZXR5IGluIENJL0NELiBJbiB0aGUgb3JpZ2luYWwgdHJpdnksIGl0IGlzIDAuXG4gICAqXG4gICAqIEBkZWZhdWx0IDFcbiAgICpcbiAgICogQHNlZSBodHRwczovL2FxdWFzZWN1cml0eS5naXRodWIuaW8vdHJpdnkvbGF0ZXN0L2RvY3MvY29uZmlndXJhdGlvbi9vdGhlcnMvI2V4aXQtb24tZW9sXG4gICAqL1xuICByZWFkb25seSBleGl0T25Fb2w/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIEJ5IEZpbmRpbmcgSURzXG4gICAqXG4gICAqIFRoZSBpZ25vcmUgcnVsZXMgd3JpdHRlbiB0byB0aGUgLnRyaXZ5aWdub3JlIGluIHRyaXZ5LlxuICAgKiBQdXQgZWFjaCBsaW5lIHlvdSB3cml0ZSBpbiB0aGUgZmlsZSBpbnRvIG9uZSBlbGVtZW50IG9mIHRoZSBhcnJheS5cbiAgICpcbiAgICogQGV4YW1wbGVcbiAgICogICAgICQgY2F0IC50cml2eWlnbm9yZVxuICAgKiAgICAgIyBBY2NlcHQgdGhlIHJpc2tcbiAgICogICAgIENWRS0yMDE4LTE0NjE4XG4gICAqXG4gICAqICAgICAjIEFjY2VwdCB0aGUgcmlzayB1bnRpbCAyMDIzLTAxLTAxXG4gICAqICAgICBDVkUtMjAxOS0xNDY5NyBleHA6MjAyMy0wMS0wMVxuICAgKlxuICAgKiAgICAgIyBObyBpbXBhY3QgaW4gb3VyIHNldHRpbmdzXG4gICAqICAgICBDVkUtMjAxOS0xNTQzXG4gICAqXG4gICAqICAgICAjIElnbm9yZSBtaXNjb25maWd1cmF0aW9uc1xuICAgKiAgICAgQVZELURTLTAwMDJcbiAgICpcbiAgICogICAgICMgSWdub3JlIHNlY3JldHNcbiAgICogICAgIGdlbmVyaWMtdW53YW50ZWQtcnVsZVxuICAgKiAgICAgYXdzLWFjY291bnQtaWRcbiAgICpcbiAgICogQGRlZmF1bHQgW11cbiAgICpcbiAgICogQHNlZSBodHRwczovL2FxdWFzZWN1cml0eS5naXRodWIuaW8vdHJpdnkvbGF0ZXN0L2RvY3MvY29uZmlndXJhdGlvbi9maWx0ZXJpbmcvI3RyaXZ5aWdub3JlXG4gICAqL1xuICByZWFkb25seSB0cml2eUlnbm9yZT86IHN0cmluZ1tdO1xuXG4gIC8qKlxuICAgKiBNZW1vcnkgU2l6ZSAoTUIpIGZvciBTY2FubmVyIExhbWJkYVxuICAgKlxuICAgKiBZb3UgY2FuIHNwZWNpZnkgYmV0d2VlbiBgMzAwOGAgYW5kIGAxMDI0MGAuXG4gICAqXG4gICAqIElmIHRoaXMgQ29uc3RydWN0IGV4ZWN1dGlvbiB0ZXJtaW5hdGVzIGFibm9ybWFsbHkgZHVlIHRvIFNJR0tJTEwsIHRyeSBhIGxhcmdlciBzaXplLlxuICAgKlxuICAgKiBEZWZhdWx0IHZhbHVlIChgMzAwOGAgTUIpIGlzIE1heGltdW0gTGFtYmRhIG1lbW9yeSBzaXplIGZvciBkZWZhdWx0IEFXUyBhY2NvdW50IHdpdGhvdXQgcXVvdGEgbGltaXQgaW5jcmVhc2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IDMwMDhcbiAgICovXG4gIHJlYWRvbmx5IG1lbW9yeVNpemU/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFNjYW4gSW1hZ2Ugb24gYSBzcGVjaWZpYyBBcmNoaXRlY3R1cmUgYW5kIE9TXG4gICAqXG4gICAqIEJ5IGRlZmF1bHQsIFRyaXZ5IGxvYWRzIGFuIGltYWdlIG9uIGEgYGxpbnV4L2FtZDY0YCBtYWNoaW5lLlxuICAgKlxuICAgKiBUbyBjdXN0b21pemUgdGhpcywgcGFzcyBhIGBwbGF0Zm9ybWAgYXJndW1lbnQgaW4gdGhlIGZvcm1hdCBPUy9BcmNoaXRlY3R1cmUgZm9yIHRoZSBpbWFnZSwgc3VjaCBhcyBgbGludXgvYXJtNjRgXG4gICAqXG4gICAqIEBkZWZhdWx0IC1cbiAgICovXG4gIHJlYWRvbmx5IHBsYXRmb3JtPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVtb3ZhbCBwb2xpY3kgdG8gYXBwbHkgdG8gU2Nhbm5lciBMYW1iZGEncyBkZWZhdWx0IGxvZyBncm91cFxuICAgKlxuICAgKiBJZiB5b3UgdXNlIEltYWdlU2Nhbm5lcldpdGhUcml2eSBjb25zdHJ1Y3QgbXVsdGlwbGUgdGltZXMgaW4gdGhlIHNhbWUgc3RhY2ssIHlvdSBjYW5ub3Qgc2V0IGRpZmZlcmVudCByZW1vdmFsIHBvbGljaWVzIGZvciB0aGUgZGVmYXVsdCBsb2cgZ3JvdXAuXG4gICAqIFNlZSBgTm90ZXNgIHNlY3Rpb24gaW4gdGhlIFJFQURNRSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFNjYW5uZXIgTGFtYmRhIGNyZWF0ZXMgdGhlIGRlZmF1bHQgbG9nIGdyb3VwKGAvYXdzL2xhbWJkYS8ke2Z1bmN0aW9uTmFtZX1gKS5cbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRMb2dHcm91cFJlbW92YWxQb2xpY3k/OiBSZW1vdmFsUG9saWN5O1xuXG4gIC8qKlxuICAgKiBUaGUgbnVtYmVyIG9mIGRheXMgbG9nIGV2ZW50cyBhcmUga2VwdCBpbiBTY2FubmVyIExhbWJkYSdzIGRlZmF1bHQgbG9nIGdyb3VwXG4gICAqXG4gICAqIElmIHlvdSB1c2UgSW1hZ2VTY2FubmVyV2l0aFRyaXZ5IGNvbnN0cnVjdCBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgc2FtZSBzdGFjaywgeW91IGNhbm5vdCBzZXQgZGlmZmVyZW50IHJldGVudGlvbiBkYXlzIGZvciB0aGUgZGVmYXVsdCBsb2cgZ3JvdXAuXG4gICAqIFNlZSBgTm90ZXNgIHNlY3Rpb24gaW4gdGhlIFJFQURNRSBmb3IgbW9yZSBkZXRhaWxzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIFNjYW5uZXIgTGFtYmRhIGNyZWF0ZXMgdGhlIGRlZmF1bHQgbG9nIGdyb3VwKGAvYXdzL2xhbWJkYS8ke2Z1bmN0aW9uTmFtZX1gKSBhbmQgbG9nIGV2ZW50cyBuZXZlciBleHBpcmUuXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0TG9nR3JvdXBSZXRlbnRpb25EYXlzPzogUmV0ZW50aW9uRGF5cztcblxuICAvKipcbiAgICogQ29uZmlndXJhdGlvbiBmb3Igc2NhbiBsb2dzIG91dHB1dFxuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBzY2FuIGxvZ3MgYXJlIG91dHB1dCB0byBkZWZhdWx0IGxvZyBncm91cCBjcmVhdGVkIGJ5IFNjYW5uZXIgTGFtYmRhLlxuICAgKlxuICAgKiBTcGVjaWZ5IHRoaXMgaWYgeW91IHdhbnQgdG8gc2VuZCBzY2FuIGxvZ3MgdG8gb3RoZXIgdGhhbiB0aGUgZGVmYXVsdCBsb2cgZ3JvdXAuXG4gICAqXG4gICAqIEN1cnJlbnRseSwgb25seSBgY2xvdWRXYXRjaExvZ3NgIGlzIHN1cHBvcnRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBzY2FuIGxvZ3Mgb3V0cHV0IHRvIGRlZmF1bHQgbG9nIGdyb3VwIGNyZWF0ZWQgYnkgU2Nhbm5lciBMYW1iZGEoYC9hd3MvbGFtYmRhLyR7ZnVuY3Rpb25OYW1lfWApXG4gICAqL1xuICByZWFkb25seSBzY2FuTG9nc091dHB1dD86IFNjYW5Mb2dzT3V0cHV0O1xuXG4gIC8qKlxuICAgKiBTdXBwcmVzcyBlcnJvcnMgZHVyaW5nIHJvbGxiYWNrIHNjYW5uZXIgTGFtYmRhIGV4ZWN1dGlvblxuICAgKlxuICAgKiBXaGVuIGltYWdlIHNjYW5uaW5nIGZhaWxzLCBDbG91ZEZvcm1hdGlvbiB0cmlnZ2VycyBhIHJvbGxiYWNrIGFuZCBleGVjdXRlcyB0aGUgcHJldmlvdXNcbiAgICogdmVyc2lvbiBvZiB0aGUgc2Nhbm5lciBMYW1iZGEuIElmIHRoaXMgcHJvcGVydHkgaXMgc2V0IHRvIGB0cnVlYCwgdGhlIHByZXZpb3VzIHZlcnNpb24gb2ZcbiAgICogdGhlIHNjYW5uZXIgTGFtYmRhIHdpbGwgbm90IHRocm93IGFuIGVycm9yLCBldmVuIGlmIHRoZSBpbWFnZSBzY2FubmluZyBmb3IgdGhlIHByZXZpb3VzIHZlcnNpb25cbiAgICogZmFpbHMuXG4gICAqXG4gICAqIFRoaXMgYWxsb3dzIHRoZSByb2xsYmFjayB0byBjb21wbGV0ZSBzdWNjZXNzZnVsbHksIGF2b2lkaW5nIFJPTExCQUNLX0ZBSUxFRCBzdGF0ZVxuICAgKiB3aGVuIGltYWdlIHNjYW5uaW5nIGZhaWx1cmVzIG9jY3VyLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0cnVlXG4gICAqL1xuICByZWFkb25seSBzdXBwcmVzc0Vycm9yT25Sb2xsYmFjaz86IGJvb2xlYW47XG59XG5cbi8vIE1heGltdW0gTGFtYmRhIG1lbW9yeSBzaXplIGZvciBkZWZhdWx0IEFXUyBhY2NvdW50IHdpdGhvdXQgcXVvdGEgbGltaXQgaW5jcmVhc2VcbmNvbnN0IERFRkFVTFRfTUVNT1JZX1NJWkUgPSAzMDA4O1xuXG5leHBvcnQgY2xhc3MgSW1hZ2VTY2FubmVyV2l0aFRyaXZ5IGV4dGVuZHMgQ29uc3RydWN0IHtcbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEltYWdlU2Nhbm5lcldpdGhUcml2eVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGlmIChcbiAgICAgIHByb3BzLm1lbW9yeVNpemUgJiZcbiAgICAgICFUb2tlbi5pc1VucmVzb2x2ZWQocHJvcHMubWVtb3J5U2l6ZSkgJiZcbiAgICAgIChwcm9wcy5tZW1vcnlTaXplIDwgMzAwOCB8fCBwcm9wcy5tZW1vcnlTaXplID4gMTAyNDApXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBZb3UgY2FuIHNwZWNpZnkgYmV0d2VlbiBcXGAzMDA4XFxgIGFuZCBcXGAxMDI0MFxcYCBmb3IgXFxgbWVtb3J5U2l6ZVxcYCwgZ290ICR7cHJvcHMubWVtb3J5U2l6ZX0uYCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgbGFtYmRhUHVycG9zZSA9ICdDdXN0b206OkltYWdlU2Nhbm5lcldpdGhUcml2eUN1c3RvbVJlc291cmNlTGFtYmRhJztcbiAgICBjb25zdCBjdXN0b21SZXNvdXJjZUxhbWJkYSA9IG5ldyBTaW5nbGV0b25GdW5jdGlvbih0aGlzLCAnQ3VzdG9tUmVzb3VyY2VMYW1iZGEnLCB7XG4gICAgICB1dWlkOiAnNDcwYjYzNDMtZDI2Ny1mNzUzLTIyNmMtMWU5OWYwOWYzMTlhJyxcbiAgICAgIGxhbWJkYVB1cnBvc2UsXG4gICAgICBydW50aW1lOiBSdW50aW1lLkZST01fSU1BR0UsXG4gICAgICBoYW5kbGVyOiBIYW5kbGVyLkZST01fSU1BR0UsXG4gICAgICBjb2RlOiBBc3NldENvZGUuZnJvbUFzc2V0SW1hZ2Uoam9pbihfX2Rpcm5hbWUsICcuLi9hc3NldHMvbGFtYmRhJyksIHtcbiAgICAgICAgcGxhdGZvcm06IFBsYXRmb3JtLkxJTlVYX0FSTTY0LFxuICAgICAgICAvLyBleGNsdWRlIG5vZGVfbW9kdWxlc1xuICAgICAgICAvLyBiZWNhdXNlIHRoZSBuYXRpdmUgYmluYXJ5IG9mIHRoZSBpbnN0YWxsZWQgZXNidWlsZCBjaGFuZ2VzIGRlcGVuZGluZyBvbiB0aGUgY3B1IGFyY2hpdGVjdHVyZVxuICAgICAgICAvLyBhbmQgdGhlIGhhc2ggdmFsdWUgb2YgdGhlIGltYWdlIGFzc2V0IGNoYW5nZXMgZGVwZW5kaW5nIG9uIHRoZSBleGVjdXRpb24gZW52aXJvbm1lbnQuXG4gICAgICAgIGV4Y2x1ZGU6IFsnbm9kZV9tb2R1bGVzJ10sXG4gICAgICB9KSxcbiAgICAgIGFyY2hpdGVjdHVyZTogQXJjaGl0ZWN0dXJlLkFSTV82NCxcbiAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoOTAwKSxcbiAgICAgIHJldHJ5QXR0ZW1wdHM6IDAsXG4gICAgICBtZW1vcnlTaXplOiBwcm9wcy5tZW1vcnlTaXplID8/IERFRkFVTFRfTUVNT1JZX1NJWkUsXG4gICAgICBlcGhlbWVyYWxTdG9yYWdlU2l6ZTogU2l6ZS5naWJpYnl0ZXMoMTApLCAvLyBmb3IgY2FzZXMgdGhhdCBuZWVkIHRvIHVwZGF0ZSB0cml2eSBEQjogL3RtcC90cml2eS9kYi90cml2eS5kYlxuICAgIH0pO1xuICAgIHByb3BzLnJlcG9zaXRvcnkuZ3JhbnRQdWxsKGN1c3RvbVJlc291cmNlTGFtYmRhKTtcblxuICAgIGNvbnN0IGN1c3RvbVJlc291cmNlTGFtYmRhTG9nR3JvdXBDb25zdHJ1Y3ROYW1lID0gYERlZmF1bHRMb2dHcm91cEZvciR7bGFtYmRhUHVycG9zZX1gO1xuXG4gICAgdGhpcy52YWxpZGF0ZUxhbWJkYURlZmF1bHRMb2dHcm91cE9wdGlvbnMoY3VzdG9tUmVzb3VyY2VMYW1iZGFMb2dHcm91cENvbnN0cnVjdE5hbWUsIHByb3BzKTtcblxuICAgIGlmIChwcm9wcy5kZWZhdWx0TG9nR3JvdXBSZW1vdmFsUG9saWN5IHx8IHByb3BzLmRlZmF1bHRMb2dHcm91cFJldGVudGlvbkRheXMpIHtcbiAgICAgIHRoaXMuZW5zdXJlTGFtYmRhRGVmYXVsdExvZ0dyb3VwKFxuICAgICAgICBjdXN0b21SZXNvdXJjZUxhbWJkYSxcbiAgICAgICAgY3VzdG9tUmVzb3VyY2VMYW1iZGFMb2dHcm91cENvbnN0cnVjdE5hbWUsXG4gICAgICAgIHByb3BzLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBpbWFnZVNjYW5uZXJQcm92aWRlciA9IG5ldyBQcm92aWRlcih0aGlzLCAnUHJvdmlkZXInLCB7XG4gICAgICBvbkV2ZW50SGFuZGxlcjogY3VzdG9tUmVzb3VyY2VMYW1iZGEsXG4gICAgfSk7XG5cbiAgICBjb25zdCBpbWFnZVNjYW5uZXJQcm9wZXJ0aWVzOiBTY2FubmVyQ3VzdG9tUmVzb3VyY2VQcm9wcyA9IHtcbiAgICAgIGFkZHI6IHRoaXMubm9kZS5hZGRyLFxuICAgICAgaW1hZ2VVcmk6IHByb3BzLmltYWdlVXJpLFxuICAgICAgaWdub3JlVW5maXhlZDogU3RyaW5nKHByb3BzLmlnbm9yZVVuZml4ZWQgPz8gZmFsc2UpLFxuICAgICAgc2V2ZXJpdHk6IHByb3BzLnNldmVyaXR5ID8/IFtTZXZlcml0eS5DUklUSUNBTF0sXG4gICAgICBzY2FubmVyczogcHJvcHMuc2Nhbm5lcnMgPz8gW10sXG4gICAgICBpbWFnZUNvbmZpZ1NjYW5uZXJzOiBwcm9wcy5pbWFnZUNvbmZpZ1NjYW5uZXJzID8/IFtdLFxuICAgICAgZXhpdENvZGU6IHByb3BzLmV4aXRDb2RlID8/IDEsXG4gICAgICBleGl0T25Fb2w6IHByb3BzLmV4aXRPbkVvbCA/PyAxLFxuICAgICAgdHJpdnlJZ25vcmU6IHByb3BzLnRyaXZ5SWdub3JlID8/IFtdLFxuICAgICAgcGxhdGZvcm06IHByb3BzLnBsYXRmb3JtID8/ICcnLFxuICAgICAgb3V0cHV0OiBwcm9wcy5zY2FuTG9nc091dHB1dD8uYmluZChjdXN0b21SZXNvdXJjZUxhbWJkYSksXG4gICAgICBzdXBwcmVzc0Vycm9yT25Sb2xsYmFjazogU3RyaW5nKHByb3BzLnN1cHByZXNzRXJyb3JPblJvbGxiYWNrID8/IHRydWUpLFxuICAgIH07XG5cbiAgICBuZXcgQ3VzdG9tUmVzb3VyY2UodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgcmVzb3VyY2VUeXBlOiAnQ3VzdG9tOjpJbWFnZVNjYW5uZXJXaXRoVHJpdnknLFxuICAgICAgcHJvcGVydGllczogaW1hZ2VTY2FubmVyUHJvcGVydGllcyxcbiAgICAgIHNlcnZpY2VUb2tlbjogaW1hZ2VTY2FubmVyUHJvdmlkZXIuc2VydmljZVRva2VuLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFZhbGlkYXRlcyB0aGF0IHNwZWNpZmllZCBkZWZhdWx0IGxvZyBncm91cCBvcHRpb25zIGFyZSB0aGUgc2FtZSBmb3IgZXhpc3RpbmcgZGVmYXVsdCBsb2cgZ3JvdXAuXG4gICAqL1xuICBwcml2YXRlIHZhbGlkYXRlTGFtYmRhRGVmYXVsdExvZ0dyb3VwT3B0aW9ucyhcbiAgICBsb2dHcm91cENvbnN0cnVjdE5hbWU6IHN0cmluZyxcbiAgICBwcm9wczogSW1hZ2VTY2FubmVyV2l0aFRyaXZ5UHJvcHMsXG4gICk6IHZvaWQge1xuICAgIGNvbnN0IGV4aXN0aW5nID0gU3RhY2sub2YodGhpcykubm9kZS50cnlGaW5kQ2hpbGQobG9nR3JvdXBDb25zdHJ1Y3ROYW1lKSBhc1xuICAgICAgfCBMb2dHcm91cFxuICAgICAgfCB1bmRlZmluZWQ7XG4gICAgaWYgKCFleGlzdGluZykgcmV0dXJuO1xuXG4gICAgY29uc3QgY2ZuTG9nR3JvdXAgPSBleGlzdGluZy5ub2RlLmRlZmF1bHRDaGlsZCBhcyBDZm5Mb2dHcm91cDtcblxuICAgIGlmIChcbiAgICAgICF0aGlzLmlzU2FtZVJlc291cmNlRGVsZXRpb25CZWhhdmlvcihcbiAgICAgICAgcHJvcHMuZGVmYXVsdExvZ0dyb3VwUmVtb3ZhbFBvbGljeSxcbiAgICAgICAgY2ZuTG9nR3JvdXAuY2ZuT3B0aW9ucy5kZWxldGlvblBvbGljeSxcbiAgICAgICkgfHxcbiAgICAgIGNmbkxvZ0dyb3VwLnJldGVudGlvbkluRGF5cyAhPT0gcHJvcHMuZGVmYXVsdExvZ0dyb3VwUmV0ZW50aW9uRGF5c1xuICAgICkge1xuICAgICAgQW5ub3RhdGlvbnMub2YodGhpcykuYWRkV2FybmluZ1YyKFxuICAgICAgICAnQGltYWdlLXNjYW5uZXItd2l0aC10cml2eTpkdXBsaWNhdGVMYW1iZGFEZWZhdWx0TG9nR3JvdXBPcHRpb25zJyxcbiAgICAgICAgXCJZb3UgaGF2ZSB0byBzZXQgdGhlIHNhbWUgdmFsdWVzIGZvciAnZGVmYXVsdExvZ0dyb3VwUmVtb3ZhbFBvbGljeScgYW5kICdkZWZhdWx0TG9nR3JvdXBSZXRlbnRpb25EYXlzJyBmb3IgZWFjaCBJbWFnZVNjYW5uZXJXaXRoVHJpdnkgY29uc3RydWN0IGluIHRoZSBzYW1lIHN0YWNrLlwiLFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogQ3JlYXRlcyB0aGUgZGVmYXVsdCBsb2cgZ3JvdXAgZm9yIFNjYW5uZXIgTGFtYmRhIGlmIGl0IGRvZXMgbm90IGV4aXN0LlxuICAgKlxuICAgKiBUaGlzIG1ldGhvZCBjaGVja3MgaWYgdGhlIGRlZmF1bHQgbG9nIGdyb3VwIGZvciBTY2FubmVyIExhbWJkYSBleGlzdHMgaW4gY2hpbGRyZW4gb2YgdGhlIHN0YWNrIGNvbnN0cnVjdC5cbiAgICogSWYgaXQgZG9lcyBub3QgZXhpc3QsIGl0IGNyZWF0ZXMgdGhlIGRlZmF1bHQgbG9nIGdyb3VwIGZvciBTY2FubmVyIExhbWJkYSBhcyBhIGNoaWxkIG9mIHRoZSBzdGFjayBjb25zdHJ1Y3QuXG4gICAqL1xuICBwcml2YXRlIGVuc3VyZUxhbWJkYURlZmF1bHRMb2dHcm91cChcbiAgICBzaW5nbGV0b25GdW5jdGlvbjogU2luZ2xldG9uRnVuY3Rpb24sXG4gICAgbG9nR3JvdXBDb25zdHJ1Y3ROYW1lOiBzdHJpbmcsXG4gICAgcHJvcHM6IEltYWdlU2Nhbm5lcldpdGhUcml2eVByb3BzLFxuICApOiBMb2dHcm91cCB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBTdGFjay5vZih0aGlzKS5ub2RlLnRyeUZpbmRDaGlsZChsb2dHcm91cENvbnN0cnVjdE5hbWUpIGFzXG4gICAgICB8IExvZ0dyb3VwXG4gICAgICB8IHVuZGVmaW5lZDtcbiAgICBpZiAoZXhpc3RpbmcpIHtcbiAgICAgIHJldHVybiBleGlzdGluZztcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IExvZ0dyb3VwKFN0YWNrLm9mKHRoaXMpLCBsb2dHcm91cENvbnN0cnVjdE5hbWUsIHtcbiAgICAgIGxvZ0dyb3VwTmFtZTogYC9hd3MvbGFtYmRhLyR7c2luZ2xldG9uRnVuY3Rpb24uZnVuY3Rpb25OYW1lfWAsXG4gICAgICByZXRlbnRpb246IHByb3BzLmRlZmF1bHRMb2dHcm91cFJldGVudGlvbkRheXMsXG4gICAgICByZW1vdmFsUG9saWN5OiBwcm9wcy5kZWZhdWx0TG9nR3JvdXBSZW1vdmFsUG9saWN5LFxuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1NhbWVSZXNvdXJjZURlbGV0aW9uQmVoYXZpb3IoXG4gICAgcmVtb3ZhbFBvbGljeT86IFJlbW92YWxQb2xpY3ksXG4gICAgZGVsZXRpb25Qb2xpY3k/OiBDZm5EZWxldGlvblBvbGljeSxcbiAgKTogYm9vbGVhbiB7XG4gICAgc3dpdGNoIChyZW1vdmFsUG9saWN5KSB7XG4gICAgICBjYXNlIFJlbW92YWxQb2xpY3kuREVTVFJPWTpcbiAgICAgICAgcmV0dXJuIGRlbGV0aW9uUG9saWN5ID09PSBDZm5EZWxldGlvblBvbGljeS5ERUxFVEU7XG4gICAgICBjYXNlIFJlbW92YWxQb2xpY3kuUkVUQUlOOlxuICAgICAgICByZXR1cm4gZGVsZXRpb25Qb2xpY3kgPT09IENmbkRlbGV0aW9uUG9saWN5LlJFVEFJTjtcbiAgICAgIGNhc2UgUmVtb3ZhbFBvbGljeS5TTkFQU0hPVDpcbiAgICAgICAgcmV0dXJuIGRlbGV0aW9uUG9saWN5ID09PSBDZm5EZWxldGlvblBvbGljeS5TTkFQU0hPVDtcbiAgICAgIGNhc2UgUmVtb3ZhbFBvbGljeS5SRVRBSU5fT05fVVBEQVRFX09SX0RFTEVURTpcbiAgICAgICAgcmV0dXJuIGRlbGV0aW9uUG9saWN5ID09PSBDZm5EZWxldGlvblBvbGljeS5SRVRBSU5fRVhDRVBUX09OX0NSRUFURTtcbiAgICAgIGNhc2UgdW5kZWZpbmVkOlxuICAgICAgICByZXR1cm4gZGVsZXRpb25Qb2xpY3kgPT09IHVuZGVmaW5lZDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiByZW1vdmFsUG9saWN5IHNhdGlzZmllcyBuZXZlcjtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
194
+ ImageScannerWithTrivy[_b] = { fqn: "image-scanner-with-trivy.ImageScannerWithTrivy", version: "2.1.3" };
195
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1hZ2Utc2Nhbm5lci13aXRoLXRyaXZ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ltYWdlLXNjYW5uZXItd2l0aC10cml2eS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLCtCQUE0QjtBQUM1Qiw2Q0FTcUI7QUFFckIsK0RBQXNEO0FBQ3RELGlEQUFrRTtBQUNsRSx1REFNZ0M7QUFDaEMsbURBQXVGO0FBQ3ZGLG1FQUF3RDtBQUN4RCwyQ0FBdUM7QUFDdkMsbUNBS2lCO0FBRWpCOzs7O0dBSUc7QUFDSCxJQUFZLFFBTVg7QUFORCxXQUFZLFFBQVE7SUFDbEIsK0JBQW1CLENBQUE7SUFDbkIsdUJBQVcsQ0FBQTtJQUNYLDZCQUFpQixDQUFBO0lBQ2pCLHlCQUFhLENBQUE7SUFDYixpQ0FBcUIsQ0FBQTtBQUN2QixDQUFDLEVBTlcsUUFBUSx3QkFBUixRQUFRLFFBTW5CO0FBRUQ7Ozs7R0FJRztBQUNILElBQVksUUFLWDtBQUxELFdBQVksUUFBUTtJQUNsQix5QkFBYSxDQUFBO0lBQ2IsNkJBQWlCLENBQUE7SUFDakIsNkJBQWlCLENBQUE7SUFDakIsK0JBQW1CLENBQUE7QUFDckIsQ0FBQyxFQUxXLFFBQVEsd0JBQVIsUUFBUSxRQUtuQjtBQUVEOzs7O0dBSUc7QUFDSCxJQUFZLG1CQUdYO0FBSEQsV0FBWSxtQkFBbUI7SUFDN0Isd0NBQWlCLENBQUE7SUFDakIsd0NBQWlCLENBQUE7QUFDbkIsQ0FBQyxFQUhXLG1CQUFtQixtQ0FBbkIsbUJBQW1CLFFBRzlCO0FBWUQ7O0dBRUc7QUFDSCxNQUFzQixjQUFjO0lBQ2xDOztPQUVHO0lBQ0ksTUFBTSxDQUFDLGNBQWMsQ0FBQyxPQUFrQztRQUM3RCxPQUFPLElBQUksb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDM0MsQ0FBQzs7QUFOSCx3Q0FZQzs7O0FBRUQsTUFBTSxvQkFBcUIsU0FBUSxjQUFjO0lBTS9DLFlBQVksT0FBa0M7UUFDNUMsS0FBSyxFQUFFLENBQUM7UUFFUixJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUM7SUFDbkMsQ0FBQztJQUVNLElBQUksQ0FBQyxPQUFtQjtRQUM3Qiw2RkFBNkY7UUFDN0Ysc0dBQXNHO1FBQ3RHLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWxDLE9BQU87WUFDTCxJQUFJLEVBQUUsMEJBQWtCLENBQUMsZUFBZTtZQUN4QyxZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZO1NBQ3pDLENBQUM7SUFDSixDQUFDO0NBQ0Y7QUFrTkQsa0ZBQWtGO0FBQ2xGLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxDQUFDO0FBRWpDLE1BQWEscUJBQXNCLFNBQVEsc0JBQVM7SUFDbEQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFpQztRQUN6RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLElBQ0UsS0FBSyxDQUFDLFVBQVU7WUFDaEIsQ0FBQyxtQkFBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO1lBQ3JDLENBQUMsS0FBSyxDQUFDLFVBQVUsR0FBRyxJQUFJLElBQUksS0FBSyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsRUFDckQsQ0FBQztZQUNELE1BQU0sSUFBSSxLQUFLLENBQ2IsMEVBQTBFLEtBQUssQ0FBQyxVQUFVLEdBQUcsQ0FDOUYsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLGFBQWEsR0FBRyxtREFBbUQsQ0FBQztRQUMxRSxNQUFNLG9CQUFvQixHQUFHLElBQUksOEJBQWlCLENBQUMsSUFBSSxFQUFFLHNCQUFzQixFQUFFO1lBQy9FLElBQUksRUFBRSxzQ0FBc0M7WUFDNUMsYUFBYTtZQUNiLE9BQU8sRUFBRSxvQkFBTyxDQUFDLFVBQVU7WUFDM0IsT0FBTyxFQUFFLG9CQUFPLENBQUMsVUFBVTtZQUMzQixJQUFJLEVBQUUsc0JBQVMsQ0FBQyxjQUFjLENBQUMsSUFBQSxXQUFJLEVBQUMsU0FBUyxFQUFFLGtCQUFrQixDQUFDLEVBQUU7Z0JBQ2xFLFFBQVEsRUFBRSx5QkFBUSxDQUFDLFdBQVc7Z0JBQzlCLHVCQUF1QjtnQkFDdkIsK0ZBQStGO2dCQUMvRix3RkFBd0Y7Z0JBQ3hGLE9BQU8sRUFBRSxDQUFDLGNBQWMsQ0FBQzthQUMxQixDQUFDO1lBQ0YsWUFBWSxFQUFFLHlCQUFZLENBQUMsTUFBTTtZQUNqQyxPQUFPLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDO1lBQzlCLGFBQWEsRUFBRSxDQUFDO1lBQ2hCLFVBQVUsRUFBRSxLQUFLLENBQUMsVUFBVSxJQUFJLG1CQUFtQjtZQUNuRCxvQkFBb0IsRUFBRSxrQkFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxpRUFBaUU7U0FDNUcsQ0FBQyxDQUFDO1FBQ0gsS0FBSyxDQUFDLFVBQVUsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLENBQUMsQ0FBQztRQUVqRCxnSEFBZ0g7UUFDaEgsTUFBTSx1QkFBdUIsR0FBRyxLQUFLLENBQUMsdUJBQXVCLElBQUksSUFBSSxDQUFDO1FBQ3RFLElBQUksdUJBQXVCLEVBQUUsQ0FBQztZQUM1QixvQkFBb0IsQ0FBQyxlQUFlLENBQ2xDLElBQUkseUJBQWUsQ0FBQztnQkFDbEIsT0FBTyxFQUFFLENBQUMsK0JBQStCLENBQUM7Z0JBQzFDLFNBQVMsRUFBRSxDQUFDLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQzthQUNwQyxDQUFDLENBQ0gsQ0FBQztRQUNKLENBQUM7UUFFRCxNQUFNLHlDQUF5QyxHQUFHLHFCQUFxQixhQUFhLEVBQUUsQ0FBQztRQUV2RixJQUFJLENBQUMsb0NBQW9DLENBQUMseUNBQXlDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFNUYsSUFBSSxLQUFLLENBQUMsNEJBQTRCLElBQUksS0FBSyxDQUFDLDRCQUE0QixFQUFFLENBQUM7WUFDN0UsSUFBSSxDQUFDLDJCQUEyQixDQUM5QixvQkFBb0IsRUFDcEIseUNBQXlDLEVBQ3pDLEtBQUssQ0FDTixDQUFDO1FBQ0osQ0FBQztRQUVELE1BQU0sb0JBQW9CLEdBQUcsSUFBSSwyQkFBUSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDMUQsY0FBYyxFQUFFLG9CQUFvQjtTQUNyQyxDQUFDLENBQUM7UUFFSCxNQUFNLHNCQUFzQixHQUErQjtZQUN6RCxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJO1lBQ3BCLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUTtZQUN4QixhQUFhLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLElBQUksS0FBSyxDQUFDO1lBQ25ELFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQztZQUMvQyxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsSUFBSSxFQUFFO1lBQzlCLG1CQUFtQixFQUFFLEtBQUssQ0FBQyxtQkFBbUIsSUFBSSxFQUFFO1lBQ3BELFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxJQUFJLENBQUM7WUFDN0IsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLElBQUksQ0FBQztZQUMvQixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVcsSUFBSSxFQUFFO1lBQ3BDLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxJQUFJLEVBQUU7WUFDOUIsTUFBTSxFQUFFLEtBQUssQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDO1lBQ3hELHVCQUF1QixFQUFFLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQztTQUN6RCxDQUFDO1FBRUYsSUFBSSw0QkFBYyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUU7WUFDbkMsWUFBWSxFQUFFLCtCQUErQjtZQUM3QyxVQUFVLEVBQUUsc0JBQXNCO1lBQ2xDLFlBQVksRUFBRSxvQkFBb0IsQ0FBQyxZQUFZO1NBQ2hELENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRDs7T0FFRztJQUNLLG9DQUFvQyxDQUMxQyxxQkFBNkIsRUFDN0IsS0FBaUM7UUFFakMsTUFBTSxRQUFRLEdBQUcsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsQ0FFMUQsQ0FBQztRQUNkLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUV0QixNQUFNLFdBQVcsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFlBQTJCLENBQUM7UUFFOUQsSUFDRSxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FDbEMsS0FBSyxDQUFDLDRCQUE0QixFQUNsQyxXQUFXLENBQUMsVUFBVSxDQUFDLGNBQWMsQ0FDdEM7WUFDRCxXQUFXLENBQUMsZUFBZSxLQUFLLEtBQUssQ0FBQyw0QkFBNEIsRUFDbEUsQ0FBQztZQUNELHlCQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FDL0IsaUVBQWlFLEVBQ2pFLG1LQUFtSyxDQUNwSyxDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7T0FLRztJQUNLLDJCQUEyQixDQUNqQyxpQkFBb0MsRUFDcEMscUJBQTZCLEVBQzdCLEtBQWlDO1FBRWpDLE1BQU0sUUFBUSxHQUFHLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMscUJBQXFCLENBRTFELENBQUM7UUFDZCxJQUFJLFFBQVEsRUFBRSxDQUFDO1lBQ2IsT0FBTyxRQUFRLENBQUM7UUFDbEIsQ0FBQztRQUVELE9BQU8sSUFBSSxtQkFBUSxDQUFDLG1CQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLHFCQUFxQixFQUFFO1lBQ3pELFlBQVksRUFBRSxlQUFlLGlCQUFpQixDQUFDLFlBQVksRUFBRTtZQUM3RCxTQUFTLEVBQUUsS0FBSyxDQUFDLDRCQUE0QjtZQUM3QyxhQUFhLEVBQUUsS0FBSyxDQUFDLDRCQUE0QjtTQUNsRCxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU8sOEJBQThCLENBQ3BDLGFBQTZCLEVBQzdCLGNBQWtDO1FBRWxDLFFBQVEsYUFBYSxFQUFFLENBQUM7WUFDdEIsS0FBSywyQkFBYSxDQUFDLE9BQU87Z0JBQ3hCLE9BQU8sY0FBYyxLQUFLLCtCQUFpQixDQUFDLE1BQU0sQ0FBQztZQUNyRCxLQUFLLDJCQUFhLENBQUMsTUFBTTtnQkFDdkIsT0FBTyxjQUFjLEtBQUssK0JBQWlCLENBQUMsTUFBTSxDQUFDO1lBQ3JELEtBQUssMkJBQWEsQ0FBQyxRQUFRO2dCQUN6QixPQUFPLGNBQWMsS0FBSywrQkFBaUIsQ0FBQyxRQUFRLENBQUM7WUFDdkQsS0FBSywyQkFBYSxDQUFDLDBCQUEwQjtnQkFDM0MsT0FBTyxjQUFjLEtBQUssK0JBQWlCLENBQUMsdUJBQXVCLENBQUM7WUFDdEUsS0FBSyxTQUFTO2dCQUNaLE9BQU8sY0FBYyxLQUFLLFNBQVMsQ0FBQztZQUN0QztnQkFDRSxPQUFPLGFBQTZCLENBQUM7UUFDekMsQ0FBQztJQUNILENBQUM7O0FBM0pILHNEQTRKQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpvaW4gfSBmcm9tICdwYXRoJztcbmltcG9ydCB7XG4gIEFubm90YXRpb25zLFxuICBDZm5EZWxldGlvblBvbGljeSxcbiAgQ3VzdG9tUmVzb3VyY2UsXG4gIER1cmF0aW9uLFxuICBSZW1vdmFsUG9saWN5LFxuICBTaXplLFxuICBTdGFjayxcbiAgVG9rZW4sXG59IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IElSZXBvc2l0b3J5IH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjcic7XG5pbXBvcnQgeyBQbGF0Zm9ybSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1lY3ItYXNzZXRzJztcbmltcG9ydCB7IElHcmFudGFibGUsIFBvbGljeVN0YXRlbWVudCB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHtcbiAgQXJjaGl0ZWN0dXJlLFxuICBBc3NldENvZGUsXG4gIEhhbmRsZXIsXG4gIFJ1bnRpbWUsXG4gIFNpbmdsZXRvbkZ1bmN0aW9uLFxufSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbGFtYmRhJztcbmltcG9ydCB7IENmbkxvZ0dyb3VwLCBJTG9nR3JvdXAsIExvZ0dyb3VwLCBSZXRlbnRpb25EYXlzIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWxvZ3MnO1xuaW1wb3J0IHsgUHJvdmlkZXIgfSBmcm9tICdhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHtcbiAgQ2xvdWRXYXRjaExvZ3NPdXRwdXRPcHRpb25zLFxuICBTY2FuTG9nc091dHB1dE9wdGlvbnMsXG4gIFNjYW5Mb2dzT3V0cHV0VHlwZSxcbiAgU2Nhbm5lckN1c3RvbVJlc291cmNlUHJvcHMsXG59IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIEVudW0gZm9yIFNldmVyaXR5IFNlbGVjdGlvblxuICpcbiAqIEBzZWUgaHR0cHM6Ly9hcXVhc2VjdXJpdHkuZ2l0aHViLmlvL3RyaXZ5L2xhdGVzdC9kb2NzL3NjYW5uZXIvdnVsbmVyYWJpbGl0eS8jc2V2ZXJpdHktc2VsZWN0aW9uXG4gKi9cbmV4cG9ydCBlbnVtIFNldmVyaXR5IHtcbiAgVU5LTk9XTiA9ICdVTktOT1dOJyxcbiAgTE9XID0gJ0xPVycsXG4gIE1FRElVTSA9ICdNRURJVU0nLFxuICBISUdIID0gJ0hJR0gnLFxuICBDUklUSUNBTCA9ICdDUklUSUNBTCcsXG59XG5cbi8qKlxuICogRW51bSBmb3IgU2Nhbm5lcnNcbiAqXG4gKiBAc2VlIGh0dHBzOi8vYXF1YXNlY3VyaXR5LmdpdGh1Yi5pby90cml2eS9sYXRlc3QvZG9jcy9jb25maWd1cmF0aW9uL290aGVycy8jZW5hYmxlZGlzYWJsZS1zY2FubmVyc1xuICovXG5leHBvcnQgZW51bSBTY2FubmVycyB7XG4gIFZVTE4gPSAndnVsbicsXG4gIENPTkZJRyA9ICdjb25maWcnLFxuICBTRUNSRVQgPSAnc2VjcmV0JyxcbiAgTElDRU5TRSA9ICdsaWNlbnNlJyxcbn1cblxuLyoqXG4gKiBFbnVtIGZvciBJbWFnZUNvbmZpZ1NjYW5uZXJzXG4gKlxuICogQHNlZSBodHRwczovL2FxdWFzZWN1cml0eS5naXRodWIuaW8vdHJpdnkvbGF0ZXN0L2RvY3MvdGFyZ2V0L2NvbnRhaW5lcl9pbWFnZS8jY29udGFpbmVyLWltYWdlLW1ldGFkYXRhXG4gKi9cbmV4cG9ydCBlbnVtIEltYWdlQ29uZmlnU2Nhbm5lcnMge1xuICBDT05GSUcgPSAnY29uZmlnJyxcbiAgU0VDUkVUID0gJ3NlY3JldCcsXG59XG5cbi8qKlxuICogQ29uZmlndXJhdGlvbiBmb3Igc2NhbiBsb2dzIG91dHB1dCB0byBDbG91ZFdhdGNoIExvZ3MgbG9nIGdyb3VwLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIENsb3VkV2F0Y2hMb2dzT3V0cHV0UHJvcHMge1xuICAvKipcbiAgICogVGhlIGxvZyBncm91cCB0byBvdXRwdXQgc2NhbiBsb2dzLlxuICAgKi9cbiAgcmVhZG9ubHkgbG9nR3JvdXA6IElMb2dHcm91cDtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIHRoZSBvdXRwdXQgb2YgdGhlIHNjYW4gbG9ncy5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFNjYW5Mb2dzT3V0cHV0IHtcbiAgLyoqXG4gICAqIFNjYW4gbG9ncyBvdXRwdXQgdG8gQ2xvdWRXYXRjaCBMb2dzIGxvZyBncm91cC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgY2xvdWRXYXRjaExvZ3Mob3B0aW9uczogQ2xvdWRXYXRjaExvZ3NPdXRwdXRQcm9wcyk6IFNjYW5Mb2dzT3V0cHV0IHtcbiAgICByZXR1cm4gbmV3IENsb3VkV2F0Y2hMb2dzT3V0cHV0KG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIG91dHB1dCBjb25maWd1cmF0aW9uIGZvciBzY2FuIGxvZ3MuXG4gICAqL1xuICBwdWJsaWMgYWJzdHJhY3QgYmluZChncmFudGVlOiBJR3JhbnRhYmxlKTogU2NhbkxvZ3NPdXRwdXRPcHRpb25zO1xufVxuXG5jbGFzcyBDbG91ZFdhdGNoTG9nc091dHB1dCBleHRlbmRzIFNjYW5Mb2dzT3V0cHV0IHtcbiAgLyoqXG4gICAqIFRoZSBsb2cgZ3JvdXAgdG8gb3V0cHV0IHNjYW4gbG9ncy5cbiAgICovXG4gIHByaXZhdGUgcmVhZG9ubHkgbG9nR3JvdXA6IElMb2dHcm91cDtcblxuICBjb25zdHJ1Y3RvcihvcHRpb25zOiBDbG91ZFdhdGNoTG9nc091dHB1dFByb3BzKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMubG9nR3JvdXAgPSBvcHRpb25zLmxvZ0dyb3VwO1xuICB9XG5cbiAgcHVibGljIGJpbmQoZ3JhbnRlZTogSUdyYW50YWJsZSk6IENsb3VkV2F0Y2hMb2dzT3V0cHV0T3B0aW9ucyB7XG4gICAgLy8gTW9zdCBMYW1iZGFzIGFyZSBncmFudGVkIEFXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZSBhbmQgY2FuIHdyaXRlIHRvIGFueSBDbG91ZFdhdGNoIExvZ3MuXG4gICAgLy8gSG93ZXZlciwganVzdCBpbiBjYXNlIEFXU0xhbWJkYUJhc2ljRXhlY3V0aW9uUm9sZSBpcyBub3QgZ3JhbnRlZCwgYWxsb3cgd3JpdGluZyB0byBDbG91ZFdhdGNoIExvZ3MuXG4gICAgdGhpcy5sb2dHcm91cC5ncmFudFdyaXRlKGdyYW50ZWUpO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHR5cGU6IFNjYW5Mb2dzT3V0cHV0VHlwZS5DTE9VRFdBVENIX0xPR1MsXG4gICAgICBsb2dHcm91cE5hbWU6IHRoaXMubG9nR3JvdXAubG9nR3JvdXBOYW1lLFxuICAgIH07XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBJbWFnZVNjYW5uZXJXaXRoVHJpdnlQcm9wcyB7XG4gIC8qKlxuICAgKiBJbWFnZSBVUkkgZm9yIHNjYW4gdGFyZ2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgaW1hZ2VVcmk6IHN0cmluZztcblxuICAvKipcbiAgICogUmVwb3NpdG9yeSBpbmNsdWRpbmcgdGhlIGltYWdlIFVSSSBmb3Igc2NhbiB0YXJnZXQuXG4gICAqXG4gICAqIEJlY2F1c2Ugb2YgZ3JhbnRQdWxsIHRvIEN1c3RvbVJlc291cmNlTGFtYmRhLlxuICAgKi9cbiAgcmVhZG9ubHkgcmVwb3NpdG9yeTogSVJlcG9zaXRvcnk7XG5cbiAgLyoqXG4gICAqIFRoZSB1bmZpeGVkL3VuZml4YWJsZSB2dWxuZXJhYmlsaXRpZXMgbWVhbiB0aGF0IHRoZSBwYXRjaCBoYXMgbm90IHlldCBiZWVuIHByb3ZpZGVkIG9uIHRoZWlyIGRpc3RyaWJ1dGlvbi5cbiAgICpcbiAgICogVG8gaGlkZSB1bmZpeGVkL3VuZml4YWJsZSB2dWxuZXJhYmlsaXRpZXMsIHlvdSBjYW4gdXNlIHRoZSBgLS1pZ25vcmUtdW5maXhlZGAgZmxhZy5cbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICpcbiAgICogQHNlZSBodHRwczovL2FxdWFzZWN1cml0eS5naXRodWIuaW8vdHJpdnkvbGF0ZXN0L2RvY3Mvc2Nhbm5lci92dWxuZXJhYmlsaXR5LyN1bmZpeGVkLXZ1bG5lcmFiaWxpdGllc1xuICAgKi9cbiAgcmVhZG9ubHkgaWdub3JlVW5maXhlZD86IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFNldmVyaXR5IFNlbGVjdGlvblxuICAgKlxuICAgKiBUaGUgc2V2ZXJpdHkgaXMgdGFrZW4gZnJvbSB0aGUgc2VsZWN0ZWQgZGF0YSBzb3VyY2Ugc2luY2UgdGhlIHNldmVyaXR5IGZyb20gdmVuZG9ycyBpcyBtb3JlIGFjY3VyYXRlLlxuICAgKiBVc2luZyBDVkUtMjAyMy0wNDY0IGFzIGFuIGV4YW1wbGUsIHdoaWxlIGl0IGlzIHJhdGVkIGFzIFwiSElHSFwiIGluIE5WRCwgUmVkIEhhdCBoYXMgbWFya2VkIGl0cyAnSW1wYWN0JyBhcyBcIkxvd1wiLiBBcyBhIHJlc3VsdCwgVHJpdnkgd2lsbCBkaXNwbGF5IGl0IGFzIFwiTG93XCIuXG4gICAqXG4gICAqIFRoZSBzZXZlcml0eSBkZXBlbmRzIG9uIHRoZSBjb21waWxlIG9wdGlvbiwgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiwgZXRjLiBOVkQgZG9lc24ndCBrbm93IGhvdyB0aGUgdmVuZG9yIGRpc3RyaWJ1dGVzIHRoZSBzb2Z0d2FyZS5cbiAgICogUmVkIEhhdCBldmFsdWF0ZXMgdGhlIHNldmVyaXR5IG1vcmUgYWNjdXJhdGVseS4gVGhhdCdzIHdoeSBUcml2eSBwcmVmZXJzIHZlbmRvciBzY29yZXMgb3ZlciBOVkQuXG4gICAqXG4gICAqIEl0IGRlZmF1bHRzIHRvIGBDUklUSUNBTGAgSU4gVEhJUyBDT05TVFJVQ1QgZm9yIHNhZmV0eSBpbiBDSS9DRCwgYnV0IHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gb2YgVHJpdnkgaXMgXCJDUklUSUNBTCxISUdILE1FRElVTSxMT1csVU5LTk9XTlwiLlxuICAgKlxuICAgKiBAZGVmYXVsdCBbU2V2ZXJpdHkuQ1JJVElDQUxdXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9hcXVhc2VjdXJpdHkuZ2l0aHViLmlvL3RyaXZ5L2xhdGVzdC9kb2NzL3NjYW5uZXIvdnVsbmVyYWJpbGl0eS8jc2V2ZXJpdHktc2VsZWN0aW9uXG4gICAqL1xuICByZWFkb25seSBzZXZlcml0eT86IFNldmVyaXR5W107XG5cbiAgLyoqXG4gICAqIEVuYWJsZS9EaXNhYmxlIFNjYW5uZXJzXG4gICAqXG4gICAqIFlvdSBjYW4gZW5hYmxlL2Rpc2FibGUgc2Nhbm5lcnMgd2l0aCB0aGUgYHNjYW5uZXJzYC5cbiAgICpcbiAgICogRm9yIGV4YW1wbGUsIGNvbnRhaW5lciBpbWFnZSBzY2FubmluZyBlbmFibGVzIHZ1bG5lcmFiaWxpdHkgKFZVTE4pIGFuZCBzZWNyZXQgc2Nhbm5lcnMgKFNFQ1JFVCkgYnkgZGVmYXVsdC5cbiAgICogSWYgeW91IGRvbid0IG5lZWQgc2VjcmV0IHNjYW5uaW5nLCBpdCBjYW4gYmUgZGlzYWJsZWQgYnkgc3BlY2lmeWluZyBTY2FubmVycy5WVUxOIG9ubHkuXG4gICAqXG4gICAqIEBkZWZhdWx0IFtTZWN1cml0eS5WVUxOLFNjYW5uZXJzLlNFQ1JFVF1cbiAgICpcbiAgICogQHNlZSBodHRwczovL2FxdWFzZWN1cml0eS5naXRodWIuaW8vdHJpdnkvbGF0ZXN0L2RvY3MvY29uZmlndXJhdGlvbi9vdGhlcnMvI2VuYWJsZWRpc2FibGUtc2Nhbm5lcnNcbiAgICovXG4gIHJlYWRvbmx5IHNjYW5uZXJzPzogU2Nhbm5lcnNbXTtcblxuICAvKipcbiAgICogRW51bSBmb3IgSW1hZ2VDb25maWdTY2FubmVyc1xuICAgKlxuICAgKiBDb250YWluZXIgaW1hZ2VzIGhhdmUgY29uZmlndXJhdGlvbi4gZG9ja2VyIGluc3BlY3QgYW5kIGBkb2NrZXIgaGlzdG9yeWAgc2hvdyB0aGUgaW5mb3JtYXRpb24gYWNjb3JkaW5nIHRvIHRoZSBjb25maWd1cmF0aW9uLlxuICAgKiBUcml2eSBzY2FucyB0aGUgY29uZmlndXJhdGlvbiBvZiBjb250YWluZXIgaW1hZ2VzIGZvclxuICAgKlxuICAgKiAtIE1pc2NvbmZpZ3VyYXRpb25zXG4gICAqIC0gU2VjcmV0c1xuICAgKlxuICAgKiBUaGV5IGFyZSBkaXNhYmxlZCBieSBkZWZhdWx0LiBZb3UgY2FuIGVuYWJsZSB0aGVtIHdpdGggYGltYWdlQ29uZmlnU2Nhbm5lcnNgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBbXVxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vYXF1YXNlY3VyaXR5LmdpdGh1Yi5pby90cml2eS9sYXRlc3QvZG9jcy90YXJnZXQvY29udGFpbmVyX2ltYWdlLyNjb250YWluZXItaW1hZ2UtbWV0YWRhdGFcbiAgICovXG4gIHJlYWRvbmx5IGltYWdlQ29uZmlnU2Nhbm5lcnM/OiBJbWFnZUNvbmZpZ1NjYW5uZXJzW107XG5cbiAgLyoqXG4gICAqIEV4aXQgQ29kZVxuICAgKlxuICAgKiBVc2UgdGhlIGBleGl0Q29kZWAgb3B0aW9uIGlmIHlvdSB3YW50IHRvIGV4aXQgd2l0aCBhIG5vbi16ZXJvIGV4aXQgY29kZS5cbiAgICpcbiAgICogWW91IGNhbiBzcGVjaWZ5IDAgaWYgeW91IGRvIG5vdCB3YW50IHRvIGV4aXQgZXZlbiB3aGVuIHZ1bG5lcmFiaWxpdGllcyBhcmUgZGV0ZWN0ZWQuXG4gICAqXG4gICAqIEl0IGRlZmF1bHRzIHRvIDEgSU4gVEhJUyBDT05TVFJVQ1QgZm9yIHNhZmV0eSBpbiBDSS9DRC4gSW4gdGhlIG9yaWdpbmFsIHRyaXZ5LCBpdCBpcyAwLlxuICAgKlxuICAgKiBAZGVmYXVsdCAxXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9hcXVhc2VjdXJpdHkuZ2l0aHViLmlvL3RyaXZ5L2xhdGVzdC9kb2NzL2NvbmZpZ3VyYXRpb24vb3RoZXJzLyNleGl0LWNvZGVcbiAgICovXG4gIHJlYWRvbmx5IGV4aXRDb2RlPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBFeGl0IG9uIEVPTFxuICAgKlxuICAgKiBTb21ldGltZXMgeW91IG1heSBzdXJwcmlzaW5nbHkgZ2V0IDAgdnVsbmVyYWJpbGl0aWVzIGluIGFuIG9sZCBpbWFnZTpcbiAgICogIC0gRW5hYmxpbmcgLS1pZ25vcmUtdW5maXhlZCBvcHRpb24gd2hpbGUgYWxsIHBhY2thZ2VzIGhhdmUgbm8gZml4ZWQgdmVyc2lvbnMuXG4gICAqICAtIFNjYW5uaW5nIGEgcmF0aGVyIG91dGRhdGVkIE9TIChlLmcuIFVidW50dSAxMC4wNCkuXG4gICAqXG4gICAqIEFuIE9TIGF0IHRoZSBlbmQgb2Ygc2VydmljZS9saWZlIChFT0wpIHVzdWFsbHkgZ2V0cyBpbnRvIHRoaXMgc2l0dWF0aW9uLCB3aGljaCBpcyBkZWZpbml0ZWx5IGZ1bGwgb2YgdnVsbmVyYWJpbGl0aWVzLlxuICAgKiBgZXhpdE9uRW9sYCBjYW4gZmFpbCBzY2FubmluZyBvbiBFT0wgT1Mgd2l0aCBhIG5vbi16ZXJvIGNvZGUuXG4gICAqXG4gICAqIEl0IGRlZmF1bHRzIHRvIDEgSU4gVEhJUyBDT05TVFJVQ1QgZm9yIHNhZmV0eSBpbiBDSS9DRC4gSW4gdGhlIG9yaWdpbmFsIHRyaXZ5LCBpdCBpcyAwLlxuICAgKlxuICAgKiBAZGVmYXVsdCAxXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9hcXVhc2VjdXJpdHkuZ2l0aHViLmlvL3RyaXZ5L2xhdGVzdC9kb2NzL2NvbmZpZ3VyYXRpb24vb3RoZXJzLyNleGl0LW9uLWVvbFxuICAgKi9cbiAgcmVhZG9ubHkgZXhpdE9uRW9sPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBCeSBGaW5kaW5nIElEc1xuICAgKlxuICAgKiBUaGUgaWdub3JlIHJ1bGVzIHdyaXR0ZW4gdG8gdGhlIC50cml2eWlnbm9yZSBpbiB0cml2eS5cbiAgICogUHV0IGVhY2ggbGluZSB5b3Ugd3JpdGUgaW4gdGhlIGZpbGUgaW50byBvbmUgZWxlbWVudCBvZiB0aGUgYXJyYXkuXG4gICAqXG4gICAqIEBleGFtcGxlXG4gICAqICAgICAkIGNhdCAudHJpdnlpZ25vcmVcbiAgICogICAgICMgQWNjZXB0IHRoZSByaXNrXG4gICAqICAgICBDVkUtMjAxOC0xNDYxOFxuICAgKlxuICAgKiAgICAgIyBBY2NlcHQgdGhlIHJpc2sgdW50aWwgMjAyMy0wMS0wMVxuICAgKiAgICAgQ1ZFLTIwMTktMTQ2OTcgZXhwOjIwMjMtMDEtMDFcbiAgICpcbiAgICogICAgICMgTm8gaW1wYWN0IGluIG91ciBzZXR0aW5nc1xuICAgKiAgICAgQ1ZFLTIwMTktMTU0M1xuICAgKlxuICAgKiAgICAgIyBJZ25vcmUgbWlzY29uZmlndXJhdGlvbnNcbiAgICogICAgIEFWRC1EUy0wMDAyXG4gICAqXG4gICAqICAgICAjIElnbm9yZSBzZWNyZXRzXG4gICAqICAgICBnZW5lcmljLXVud2FudGVkLXJ1bGVcbiAgICogICAgIGF3cy1hY2NvdW50LWlkXG4gICAqXG4gICAqIEBkZWZhdWx0IFtdXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9hcXVhc2VjdXJpdHkuZ2l0aHViLmlvL3RyaXZ5L2xhdGVzdC9kb2NzL2NvbmZpZ3VyYXRpb24vZmlsdGVyaW5nLyN0cml2eWlnbm9yZVxuICAgKi9cbiAgcmVhZG9ubHkgdHJpdnlJZ25vcmU/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogTWVtb3J5IFNpemUgKE1CKSBmb3IgU2Nhbm5lciBMYW1iZGFcbiAgICpcbiAgICogWW91IGNhbiBzcGVjaWZ5IGJldHdlZW4gYDMwMDhgIGFuZCBgMTAyNDBgLlxuICAgKlxuICAgKiBJZiB0aGlzIENvbnN0cnVjdCBleGVjdXRpb24gdGVybWluYXRlcyBhYm5vcm1hbGx5IGR1ZSB0byBTSUdLSUxMLCB0cnkgYSBsYXJnZXIgc2l6ZS5cbiAgICpcbiAgICogRGVmYXVsdCB2YWx1ZSAoYDMwMDhgIE1CKSBpcyBNYXhpbXVtIExhbWJkYSBtZW1vcnkgc2l6ZSBmb3IgZGVmYXVsdCBBV1MgYWNjb3VudCB3aXRob3V0IHF1b3RhIGxpbWl0IGluY3JlYXNlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAzMDA4XG4gICAqL1xuICByZWFkb25seSBtZW1vcnlTaXplPzogbnVtYmVyO1xuXG4gIC8qKlxuICAgKiBTY2FuIEltYWdlIG9uIGEgc3BlY2lmaWMgQXJjaGl0ZWN0dXJlIGFuZCBPU1xuICAgKlxuICAgKiBCeSBkZWZhdWx0LCBUcml2eSBsb2FkcyBhbiBpbWFnZSBvbiBhIGBsaW51eC9hbWQ2NGAgbWFjaGluZS5cbiAgICpcbiAgICogVG8gY3VzdG9taXplIHRoaXMsIHBhc3MgYSBgcGxhdGZvcm1gIGFyZ3VtZW50IGluIHRoZSBmb3JtYXQgT1MvQXJjaGl0ZWN0dXJlIGZvciB0aGUgaW1hZ2UsIHN1Y2ggYXMgYGxpbnV4L2FybTY0YFxuICAgKlxuICAgKiBAZGVmYXVsdCAtXG4gICAqL1xuICByZWFkb25seSBwbGF0Zm9ybT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJlbW92YWwgcG9saWN5IHRvIGFwcGx5IHRvIFNjYW5uZXIgTGFtYmRhJ3MgZGVmYXVsdCBsb2cgZ3JvdXBcbiAgICpcbiAgICogSWYgeW91IHVzZSBJbWFnZVNjYW5uZXJXaXRoVHJpdnkgY29uc3RydWN0IG11bHRpcGxlIHRpbWVzIGluIHRoZSBzYW1lIHN0YWNrLCB5b3UgY2Fubm90IHNldCBkaWZmZXJlbnQgcmVtb3ZhbCBwb2xpY2llcyBmb3IgdGhlIGRlZmF1bHQgbG9nIGdyb3VwLlxuICAgKiBTZWUgYE5vdGVzYCBzZWN0aW9uIGluIHRoZSBSRUFETUUgZm9yIG1vcmUgZGV0YWlscy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBTY2FubmVyIExhbWJkYSBjcmVhdGVzIHRoZSBkZWZhdWx0IGxvZyBncm91cChgL2F3cy9sYW1iZGEvJHtmdW5jdGlvbk5hbWV9YCkuXG4gICAqL1xuICByZWFkb25seSBkZWZhdWx0TG9nR3JvdXBSZW1vdmFsUG9saWN5PzogUmVtb3ZhbFBvbGljeTtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBkYXlzIGxvZyBldmVudHMgYXJlIGtlcHQgaW4gU2Nhbm5lciBMYW1iZGEncyBkZWZhdWx0IGxvZyBncm91cFxuICAgKlxuICAgKiBJZiB5b3UgdXNlIEltYWdlU2Nhbm5lcldpdGhUcml2eSBjb25zdHJ1Y3QgbXVsdGlwbGUgdGltZXMgaW4gdGhlIHNhbWUgc3RhY2ssIHlvdSBjYW5ub3Qgc2V0IGRpZmZlcmVudCByZXRlbnRpb24gZGF5cyBmb3IgdGhlIGRlZmF1bHQgbG9nIGdyb3VwLlxuICAgKiBTZWUgYE5vdGVzYCBzZWN0aW9uIGluIHRoZSBSRUFETUUgZm9yIG1vcmUgZGV0YWlscy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBTY2FubmVyIExhbWJkYSBjcmVhdGVzIHRoZSBkZWZhdWx0IGxvZyBncm91cChgL2F3cy9sYW1iZGEvJHtmdW5jdGlvbk5hbWV9YCkgYW5kIGxvZyBldmVudHMgbmV2ZXIgZXhwaXJlLlxuICAgKi9cbiAgcmVhZG9ubHkgZGVmYXVsdExvZ0dyb3VwUmV0ZW50aW9uRGF5cz86IFJldGVudGlvbkRheXM7XG5cbiAgLyoqXG4gICAqIENvbmZpZ3VyYXRpb24gZm9yIHNjYW4gbG9ncyBvdXRwdXRcbiAgICpcbiAgICogQnkgZGVmYXVsdCwgc2NhbiBsb2dzIGFyZSBvdXRwdXQgdG8gZGVmYXVsdCBsb2cgZ3JvdXAgY3JlYXRlZCBieSBTY2FubmVyIExhbWJkYS5cbiAgICpcbiAgICogU3BlY2lmeSB0aGlzIGlmIHlvdSB3YW50IHRvIHNlbmQgc2NhbiBsb2dzIHRvIG90aGVyIHRoYW4gdGhlIGRlZmF1bHQgbG9nIGdyb3VwLlxuICAgKlxuICAgKiBDdXJyZW50bHksIG9ubHkgYGNsb3VkV2F0Y2hMb2dzYCBpcyBzdXBwb3J0ZWQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gc2NhbiBsb2dzIG91dHB1dCB0byBkZWZhdWx0IGxvZyBncm91cCBjcmVhdGVkIGJ5IFNjYW5uZXIgTGFtYmRhKGAvYXdzL2xhbWJkYS8ke2Z1bmN0aW9uTmFtZX1gKVxuICAgKi9cbiAgcmVhZG9ubHkgc2NhbkxvZ3NPdXRwdXQ/OiBTY2FuTG9nc091dHB1dDtcblxuICAvKipcbiAgICogU3VwcHJlc3MgZXJyb3JzIGR1cmluZyByb2xsYmFjayBzY2FubmVyIExhbWJkYSBleGVjdXRpb25cbiAgICpcbiAgICogV2hlbiBpbWFnZSBzY2FubmluZyBmYWlscywgQ2xvdWRGb3JtYXRpb24gdHJpZ2dlcnMgYSByb2xsYmFjayBhbmQgZXhlY3V0ZXMgdGhlIHByZXZpb3VzXG4gICAqIHZlcnNpb24gb2YgdGhlIHNjYW5uZXIgTGFtYmRhLiBJZiB0aGlzIHByb3BlcnR5IGlzIHNldCB0byBgdHJ1ZWAsIHRoZSBwcmV2aW91cyB2ZXJzaW9uIG9mXG4gICAqIHRoZSBzY2FubmVyIExhbWJkYSB3aWxsIG5vdCB0aHJvdyBhbiBlcnJvciwgZXZlbiBpZiB0aGUgaW1hZ2Ugc2Nhbm5pbmcgZm9yIHRoZSBwcmV2aW91cyB2ZXJzaW9uXG4gICAqIGZhaWxzLlxuICAgKlxuICAgKiBUaGlzIGFsbG93cyB0aGUgcm9sbGJhY2sgdG8gY29tcGxldGUgc3VjY2Vzc2Z1bGx5LCBhdm9pZGluZyBST0xMQkFDS19GQUlMRUQgc3RhdGVcbiAgICogd2hlbiBpbWFnZSBzY2FubmluZyBmYWlsdXJlcyBvY2N1ci5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgc3VwcHJlc3NFcnJvck9uUm9sbGJhY2s/OiBib29sZWFuO1xufVxuXG4vLyBNYXhpbXVtIExhbWJkYSBtZW1vcnkgc2l6ZSBmb3IgZGVmYXVsdCBBV1MgYWNjb3VudCB3aXRob3V0IHF1b3RhIGxpbWl0IGluY3JlYXNlXG5jb25zdCBERUZBVUxUX01FTU9SWV9TSVpFID0gMzAwODtcblxuZXhwb3J0IGNsYXNzIEltYWdlU2Nhbm5lcldpdGhUcml2eSBleHRlbmRzIENvbnN0cnVjdCB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJbWFnZVNjYW5uZXJXaXRoVHJpdnlQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG5cbiAgICBpZiAoXG4gICAgICBwcm9wcy5tZW1vcnlTaXplICYmXG4gICAgICAhVG9rZW4uaXNVbnJlc29sdmVkKHByb3BzLm1lbW9yeVNpemUpICYmXG4gICAgICAocHJvcHMubWVtb3J5U2l6ZSA8IDMwMDggfHwgcHJvcHMubWVtb3J5U2l6ZSA+IDEwMjQwKVxuICAgICkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgWW91IGNhbiBzcGVjaWZ5IGJldHdlZW4gXFxgMzAwOFxcYCBhbmQgXFxgMTAyNDBcXGAgZm9yIFxcYG1lbW9yeVNpemVcXGAsIGdvdCAke3Byb3BzLm1lbW9yeVNpemV9LmAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGxhbWJkYVB1cnBvc2UgPSAnQ3VzdG9tOjpJbWFnZVNjYW5uZXJXaXRoVHJpdnlDdXN0b21SZXNvdXJjZUxhbWJkYSc7XG4gICAgY29uc3QgY3VzdG9tUmVzb3VyY2VMYW1iZGEgPSBuZXcgU2luZ2xldG9uRnVuY3Rpb24odGhpcywgJ0N1c3RvbVJlc291cmNlTGFtYmRhJywge1xuICAgICAgdXVpZDogJzQ3MGI2MzQzLWQyNjctZjc1My0yMjZjLTFlOTlmMDlmMzE5YScsXG4gICAgICBsYW1iZGFQdXJwb3NlLFxuICAgICAgcnVudGltZTogUnVudGltZS5GUk9NX0lNQUdFLFxuICAgICAgaGFuZGxlcjogSGFuZGxlci5GUk9NX0lNQUdFLFxuICAgICAgY29kZTogQXNzZXRDb2RlLmZyb21Bc3NldEltYWdlKGpvaW4oX19kaXJuYW1lLCAnLi4vYXNzZXRzL2xhbWJkYScpLCB7XG4gICAgICAgIHBsYXRmb3JtOiBQbGF0Zm9ybS5MSU5VWF9BUk02NCxcbiAgICAgICAgLy8gZXhjbHVkZSBub2RlX21vZHVsZXNcbiAgICAgICAgLy8gYmVjYXVzZSB0aGUgbmF0aXZlIGJpbmFyeSBvZiB0aGUgaW5zdGFsbGVkIGVzYnVpbGQgY2hhbmdlcyBkZXBlbmRpbmcgb24gdGhlIGNwdSBhcmNoaXRlY3R1cmVcbiAgICAgICAgLy8gYW5kIHRoZSBoYXNoIHZhbHVlIG9mIHRoZSBpbWFnZSBhc3NldCBjaGFuZ2VzIGRlcGVuZGluZyBvbiB0aGUgZXhlY3V0aW9uIGVudmlyb25tZW50LlxuICAgICAgICBleGNsdWRlOiBbJ25vZGVfbW9kdWxlcyddLFxuICAgICAgfSksXG4gICAgICBhcmNoaXRlY3R1cmU6IEFyY2hpdGVjdHVyZS5BUk1fNjQsXG4gICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDkwMCksXG4gICAgICByZXRyeUF0dGVtcHRzOiAwLFxuICAgICAgbWVtb3J5U2l6ZTogcHJvcHMubWVtb3J5U2l6ZSA/PyBERUZBVUxUX01FTU9SWV9TSVpFLFxuICAgICAgZXBoZW1lcmFsU3RvcmFnZVNpemU6IFNpemUuZ2liaWJ5dGVzKDEwKSwgLy8gZm9yIGNhc2VzIHRoYXQgbmVlZCB0byB1cGRhdGUgdHJpdnkgREI6IC90bXAvdHJpdnkvZGIvdHJpdnkuZGJcbiAgICB9KTtcbiAgICBwcm9wcy5yZXBvc2l0b3J5LmdyYW50UHVsbChjdXN0b21SZXNvdXJjZUxhbWJkYSk7XG5cbiAgICAvLyBHcmFudCBDbG91ZEZvcm1hdGlvbiBEZXNjcmliZVN0YWNrcyBwZXJtaXNzaW9uIGZvciByb2xsYmFjayBkZXRlY3Rpb24gd2hlbiBzdXBwcmVzc0Vycm9yT25Sb2xsYmFjayBpcyBlbmFibGVkXG4gICAgY29uc3Qgc3VwcHJlc3NFcnJvck9uUm9sbGJhY2sgPSBwcm9wcy5zdXBwcmVzc0Vycm9yT25Sb2xsYmFjayA/PyB0cnVlO1xuICAgIGlmIChzdXBwcmVzc0Vycm9yT25Sb2xsYmFjaykge1xuICAgICAgY3VzdG9tUmVzb3VyY2VMYW1iZGEuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgICBuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICBhY3Rpb25zOiBbJ2Nsb3VkZm9ybWF0aW9uOkRlc2NyaWJlU3RhY2tzJ10sXG4gICAgICAgICAgcmVzb3VyY2VzOiBbU3RhY2sub2YodGhpcykuc3RhY2tJZF0sXG4gICAgICAgIH0pLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBjdXN0b21SZXNvdXJjZUxhbWJkYUxvZ0dyb3VwQ29uc3RydWN0TmFtZSA9IGBEZWZhdWx0TG9nR3JvdXBGb3Ike2xhbWJkYVB1cnBvc2V9YDtcblxuICAgIHRoaXMudmFsaWRhdGVMYW1iZGFEZWZhdWx0TG9nR3JvdXBPcHRpb25zKGN1c3RvbVJlc291cmNlTGFtYmRhTG9nR3JvdXBDb25zdHJ1Y3ROYW1lLCBwcm9wcyk7XG5cbiAgICBpZiAocHJvcHMuZGVmYXVsdExvZ0dyb3VwUmVtb3ZhbFBvbGljeSB8fCBwcm9wcy5kZWZhdWx0TG9nR3JvdXBSZXRlbnRpb25EYXlzKSB7XG4gICAgICB0aGlzLmVuc3VyZUxhbWJkYURlZmF1bHRMb2dHcm91cChcbiAgICAgICAgY3VzdG9tUmVzb3VyY2VMYW1iZGEsXG4gICAgICAgIGN1c3RvbVJlc291cmNlTGFtYmRhTG9nR3JvdXBDb25zdHJ1Y3ROYW1lLFxuICAgICAgICBwcm9wcyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgaW1hZ2VTY2FubmVyUHJvdmlkZXIgPSBuZXcgUHJvdmlkZXIodGhpcywgJ1Byb3ZpZGVyJywge1xuICAgICAgb25FdmVudEhhbmRsZXI6IGN1c3RvbVJlc291cmNlTGFtYmRhLFxuICAgIH0pO1xuXG4gICAgY29uc3QgaW1hZ2VTY2FubmVyUHJvcGVydGllczogU2Nhbm5lckN1c3RvbVJlc291cmNlUHJvcHMgPSB7XG4gICAgICBhZGRyOiB0aGlzLm5vZGUuYWRkcixcbiAgICAgIGltYWdlVXJpOiBwcm9wcy5pbWFnZVVyaSxcbiAgICAgIGlnbm9yZVVuZml4ZWQ6IFN0cmluZyhwcm9wcy5pZ25vcmVVbmZpeGVkID8/IGZhbHNlKSxcbiAgICAgIHNldmVyaXR5OiBwcm9wcy5zZXZlcml0eSA/PyBbU2V2ZXJpdHkuQ1JJVElDQUxdLFxuICAgICAgc2Nhbm5lcnM6IHByb3BzLnNjYW5uZXJzID8/IFtdLFxuICAgICAgaW1hZ2VDb25maWdTY2FubmVyczogcHJvcHMuaW1hZ2VDb25maWdTY2FubmVycyA/PyBbXSxcbiAgICAgIGV4aXRDb2RlOiBwcm9wcy5leGl0Q29kZSA/PyAxLFxuICAgICAgZXhpdE9uRW9sOiBwcm9wcy5leGl0T25Fb2wgPz8gMSxcbiAgICAgIHRyaXZ5SWdub3JlOiBwcm9wcy50cml2eUlnbm9yZSA/PyBbXSxcbiAgICAgIHBsYXRmb3JtOiBwcm9wcy5wbGF0Zm9ybSA/PyAnJyxcbiAgICAgIG91dHB1dDogcHJvcHMuc2NhbkxvZ3NPdXRwdXQ/LmJpbmQoY3VzdG9tUmVzb3VyY2VMYW1iZGEpLFxuICAgICAgc3VwcHJlc3NFcnJvck9uUm9sbGJhY2s6IFN0cmluZyhzdXBwcmVzc0Vycm9yT25Sb2xsYmFjayksXG4gICAgfTtcblxuICAgIG5ldyBDdXN0b21SZXNvdXJjZSh0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICByZXNvdXJjZVR5cGU6ICdDdXN0b206OkltYWdlU2Nhbm5lcldpdGhUcml2eScsXG4gICAgICBwcm9wZXJ0aWVzOiBpbWFnZVNjYW5uZXJQcm9wZXJ0aWVzLFxuICAgICAgc2VydmljZVRva2VuOiBpbWFnZVNjYW5uZXJQcm92aWRlci5zZXJ2aWNlVG9rZW4sXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogVmFsaWRhdGVzIHRoYXQgc3BlY2lmaWVkIGRlZmF1bHQgbG9nIGdyb3VwIG9wdGlvbnMgYXJlIHRoZSBzYW1lIGZvciBleGlzdGluZyBkZWZhdWx0IGxvZyBncm91cC5cbiAgICovXG4gIHByaXZhdGUgdmFsaWRhdGVMYW1iZGFEZWZhdWx0TG9nR3JvdXBPcHRpb25zKFxuICAgIGxvZ0dyb3VwQ29uc3RydWN0TmFtZTogc3RyaW5nLFxuICAgIHByb3BzOiBJbWFnZVNjYW5uZXJXaXRoVHJpdnlQcm9wcyxcbiAgKTogdm9pZCB7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBTdGFjay5vZih0aGlzKS5ub2RlLnRyeUZpbmRDaGlsZChsb2dHcm91cENvbnN0cnVjdE5hbWUpIGFzXG4gICAgICB8IExvZ0dyb3VwXG4gICAgICB8IHVuZGVmaW5lZDtcbiAgICBpZiAoIWV4aXN0aW5nKSByZXR1cm47XG5cbiAgICBjb25zdCBjZm5Mb2dHcm91cCA9IGV4aXN0aW5nLm5vZGUuZGVmYXVsdENoaWxkIGFzIENmbkxvZ0dyb3VwO1xuXG4gICAgaWYgKFxuICAgICAgIXRoaXMuaXNTYW1lUmVzb3VyY2VEZWxldGlvbkJlaGF2aW9yKFxuICAgICAgICBwcm9wcy5kZWZhdWx0TG9nR3JvdXBSZW1vdmFsUG9saWN5LFxuICAgICAgICBjZm5Mb2dHcm91cC5jZm5PcHRpb25zLmRlbGV0aW9uUG9saWN5LFxuICAgICAgKSB8fFxuICAgICAgY2ZuTG9nR3JvdXAucmV0ZW50aW9uSW5EYXlzICE9PSBwcm9wcy5kZWZhdWx0TG9nR3JvdXBSZXRlbnRpb25EYXlzXG4gICAgKSB7XG4gICAgICBBbm5vdGF0aW9ucy5vZih0aGlzKS5hZGRXYXJuaW5nVjIoXG4gICAgICAgICdAaW1hZ2Utc2Nhbm5lci13aXRoLXRyaXZ5OmR1cGxpY2F0ZUxhbWJkYURlZmF1bHRMb2dHcm91cE9wdGlvbnMnLFxuICAgICAgICBcIllvdSBoYXZlIHRvIHNldCB0aGUgc2FtZSB2YWx1ZXMgZm9yICdkZWZhdWx0TG9nR3JvdXBSZW1vdmFsUG9saWN5JyBhbmQgJ2RlZmF1bHRMb2dHcm91cFJldGVudGlvbkRheXMnIGZvciBlYWNoIEltYWdlU2Nhbm5lcldpdGhUcml2eSBjb25zdHJ1Y3QgaW4gdGhlIHNhbWUgc3RhY2suXCIsXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBDcmVhdGVzIHRoZSBkZWZhdWx0IGxvZyBncm91cCBmb3IgU2Nhbm5lciBMYW1iZGEgaWYgaXQgZG9lcyBub3QgZXhpc3QuXG4gICAqXG4gICAqIFRoaXMgbWV0aG9kIGNoZWNrcyBpZiB0aGUgZGVmYXVsdCBsb2cgZ3JvdXAgZm9yIFNjYW5uZXIgTGFtYmRhIGV4aXN0cyBpbiBjaGlsZHJlbiBvZiB0aGUgc3RhY2sgY29uc3RydWN0LlxuICAgKiBJZiBpdCBkb2VzIG5vdCBleGlzdCwgaXQgY3JlYXRlcyB0aGUgZGVmYXVsdCBsb2cgZ3JvdXAgZm9yIFNjYW5uZXIgTGFtYmRhIGFzIGEgY2hpbGQgb2YgdGhlIHN0YWNrIGNvbnN0cnVjdC5cbiAgICovXG4gIHByaXZhdGUgZW5zdXJlTGFtYmRhRGVmYXVsdExvZ0dyb3VwKFxuICAgIHNpbmdsZXRvbkZ1bmN0aW9uOiBTaW5nbGV0b25GdW5jdGlvbixcbiAgICBsb2dHcm91cENvbnN0cnVjdE5hbWU6IHN0cmluZyxcbiAgICBwcm9wczogSW1hZ2VTY2FubmVyV2l0aFRyaXZ5UHJvcHMsXG4gICk6IExvZ0dyb3VwIHtcbiAgICBjb25zdCBleGlzdGluZyA9IFN0YWNrLm9mKHRoaXMpLm5vZGUudHJ5RmluZENoaWxkKGxvZ0dyb3VwQ29uc3RydWN0TmFtZSkgYXNcbiAgICAgIHwgTG9nR3JvdXBcbiAgICAgIHwgdW5kZWZpbmVkO1xuICAgIGlmIChleGlzdGluZykge1xuICAgICAgcmV0dXJuIGV4aXN0aW5nO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgTG9nR3JvdXAoU3RhY2sub2YodGhpcyksIGxvZ0dyb3VwQ29uc3RydWN0TmFtZSwge1xuICAgICAgbG9nR3JvdXBOYW1lOiBgL2F3cy9sYW1iZGEvJHtzaW5nbGV0b25GdW5jdGlvbi5mdW5jdGlvbk5hbWV9YCxcbiAgICAgIHJldGVudGlvbjogcHJvcHMuZGVmYXVsdExvZ0dyb3VwUmV0ZW50aW9uRGF5cyxcbiAgICAgIHJlbW92YWxQb2xpY3k6IHByb3BzLmRlZmF1bHRMb2dHcm91cFJlbW92YWxQb2xpY3ksXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGlzU2FtZVJlc291cmNlRGVsZXRpb25CZWhhdmlvcihcbiAgICByZW1vdmFsUG9saWN5PzogUmVtb3ZhbFBvbGljeSxcbiAgICBkZWxldGlvblBvbGljeT86IENmbkRlbGV0aW9uUG9saWN5LFxuICApOiBib29sZWFuIHtcbiAgICBzd2l0Y2ggKHJlbW92YWxQb2xpY3kpIHtcbiAgICAgIGNhc2UgUmVtb3ZhbFBvbGljeS5ERVNUUk9ZOlxuICAgICAgICByZXR1cm4gZGVsZXRpb25Qb2xpY3kgPT09IENmbkRlbGV0aW9uUG9saWN5LkRFTEVURTtcbiAgICAgIGNhc2UgUmVtb3ZhbFBvbGljeS5SRVRBSU46XG4gICAgICAgIHJldHVybiBkZWxldGlvblBvbGljeSA9PT0gQ2ZuRGVsZXRpb25Qb2xpY3kuUkVUQUlOO1xuICAgICAgY2FzZSBSZW1vdmFsUG9saWN5LlNOQVBTSE9UOlxuICAgICAgICByZXR1cm4gZGVsZXRpb25Qb2xpY3kgPT09IENmbkRlbGV0aW9uUG9saWN5LlNOQVBTSE9UO1xuICAgICAgY2FzZSBSZW1vdmFsUG9saWN5LlJFVEFJTl9PTl9VUERBVEVfT1JfREVMRVRFOlxuICAgICAgICByZXR1cm4gZGVsZXRpb25Qb2xpY3kgPT09IENmbkRlbGV0aW9uUG9saWN5LlJFVEFJTl9FWENFUFRfT05fQ1JFQVRFO1xuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgIHJldHVybiBkZWxldGlvblBvbGljeSA9PT0gdW5kZWZpbmVkO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuIHJlbW92YWxQb2xpY3kgc2F0aXNmaWVzIG5ldmVyO1xuICAgIH1cbiAgfVxufVxuIl19
package/package.json CHANGED
@@ -88,7 +88,7 @@
88
88
  "publishConfig": {
89
89
  "access": "public"
90
90
  },
91
- "version": "2.1.1",
91
+ "version": "2.1.3",
92
92
  "types": "lib/index.d.ts",
93
93
  "stability": "stable",
94
94
  "jsii": {