@aws-cdk/aws-imagebuilder-alpha 2.234.0-alpha.0 → 2.235.0-alpha.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.
@@ -72,7 +72,7 @@ var ContainerType;
72
72
  * Helper class for referencing and uploading dockerfile data for the container recipe
73
73
  */
74
74
  class DockerfileData {
75
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.DockerfileData", version: "2.234.0-alpha.0" };
75
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.DockerfileData", version: "2.235.0-alpha.0" };
76
76
  /**
77
77
  * Uploads dockerfile data from a local file to S3 to use as the dockerfile data
78
78
  *
@@ -108,7 +108,7 @@ exports.DockerfileData = DockerfileData;
108
108
  * Helper class for S3-based dockerfile data references, containing additional permission grant methods on the S3 object
109
109
  */
110
110
  class S3DockerfileData extends DockerfileData {
111
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.S3DockerfileData", version: "2.234.0-alpha.0" };
111
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.S3DockerfileData", version: "2.235.0-alpha.0" };
112
112
  bucket;
113
113
  key;
114
114
  constructor(bucket, key) {
@@ -124,6 +124,7 @@ class S3DockerfileData extends DockerfileData {
124
124
  }
125
125
  /**
126
126
  * Grant put permissions to the given grantee for the dockerfile data in S3
127
+ * [disable-awslint:no-grants]
127
128
  *
128
129
  * @param grantee The principal
129
130
  */
@@ -132,6 +133,7 @@ class S3DockerfileData extends DockerfileData {
132
133
  }
133
134
  /**
134
135
  * Grant read permissions to the given grantee for the dockerfile data in S3
136
+ * [disable-awslint:no-grants]
135
137
  *
136
138
  * @param grantee The principal
137
139
  */
@@ -167,9 +169,10 @@ class S3DockerfileDataFromAsset extends S3DockerfileData {
167
169
  * A new or imported Container Recipe
168
170
  */
169
171
  class ContainerRecipeBase extends cdk.Resource {
170
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ContainerRecipeBase", version: "2.234.0-alpha.0" };
172
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ContainerRecipeBase", version: "2.235.0-alpha.0" };
171
173
  /**
172
174
  * Grant custom actions to the given grantee for the container recipe
175
+ * [disable-awslint:no-grants]
173
176
  *
174
177
  * @param grantee The principal
175
178
  * @param actions The list of actions
@@ -184,6 +187,7 @@ class ContainerRecipeBase extends cdk.Resource {
184
187
  }
185
188
  /**
186
189
  * Grant read permissions to the given grantee for the container recipe
190
+ * [disable-awslint:no-grants]
187
191
  *
188
192
  * @param grantee The principal
189
193
  */
@@ -231,7 +235,7 @@ let ContainerRecipe = (() => {
231
235
  ContainerRecipe = _classThis = _classDescriptor.value;
232
236
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
233
237
  }
234
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ContainerRecipe", version: "2.234.0-alpha.0" };
238
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.ContainerRecipe", version: "2.235.0-alpha.0" };
235
239
  /** Uniquely identifies this class. */
236
240
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-imagebuilder-alpha.ContainerRecipe';
237
241
  /**
@@ -448,4 +452,4 @@ let ContainerRecipe = (() => {
448
452
  return ContainerRecipe = _classThis;
449
453
  })();
450
454
  exports.ContainerRecipe = ContainerRecipe;
451
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFpbmVyLXJlY2lwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbnRhaW5lci1yZWNpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbUNBQW1DO0FBRW5DLDJDQUEyQztBQUMzQyxtRUFBa0U7QUFHbEUsc0RBQXNEO0FBQ3RELDhFQUE4RjtBQUM5RiwwRUFBMEU7QUFRMUUsTUFBTSx1QkFBdUIsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7QUFFOUY7Ozs7O0dBS0c7QUFDSCxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUM7QUFFL0I7Ozs7O0dBS0c7QUFDSCxNQUFNLHNCQUFzQixHQUFHLE9BQU8sQ0FBQztBQTJIdkM7O0dBRUc7QUFDSCxJQUFZLGFBS1g7QUFMRCxXQUFZLGFBQWE7SUFDdkI7O09BRUc7SUFDSCxrQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBTFcsYUFBYSw2QkFBYixhQUFhLFFBS3hCO0FBdUJEOztHQUVHO0FBQ0gsTUFBc0IsY0FBYzs7SUFDbEM7Ozs7Ozs7T0FPRztJQUNJLE1BQU0sQ0FBQyxTQUFTLENBQ3JCLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixJQUFZLEVBQ1osVUFBaUMsRUFBRTtRQUVuQyxNQUFNLEtBQUssR0FBRyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbEUsT0FBTyxJQUFJLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQzdDO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQWtCLEVBQUUsR0FBVztRQUNsRCxPQUFPLElBQUksNkJBQTZCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQ3ZEO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0s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SUFBSSxDQUNMLENBQUM7WUFDSixDQUFDO1lBRUQsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQztnQkFDMUQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxlQUFlLENBQUMsb0RBQW9ELElBQUksQ0FBQyxZQUFZLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNoSCxDQUFDO1NBQ0Y7O1lBaFFVLHVEQUFlOzs7OztBQUFmLDBDQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IENmbkNvbnRhaW5lclJlY2lwZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1pbWFnZWJ1aWxkZXInO1xuaW1wb3J0ICogYXMga21zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1rbXMnO1xuaW1wb3J0ICogYXMgczMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCAqIGFzIHMzYXNzZXRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMy1hc3NldHMnO1xuaW1wb3J0IHsgYWRkQ29uc3RydWN0TWV0YWRhdGEsIE1ldGhvZE1ldGFkYXRhIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvbWV0YWRhdGEtcmVzb3VyY2UnO1xuaW1wb3J0IHsgcHJvcGVydHlJbmplY3RhYmxlIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvcHJvcC1pbmplY3RhYmxlJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQmFzZUNvbnRhaW5lckltYWdlLCBDb250YWluZXJJbnN0YW5jZUltYWdlIH0gZnJvbSAnLi9iYXNlLWltYWdlJztcbmltcG9ydCB7IFJlcG9zaXRvcnkgfSBmcm9tICcuL2Rpc3RyaWJ1dGlvbi1jb25maWd1cmF0aW9uJztcbmltcG9ydCB7IElJbWFnZVJlY2lwZSB9IGZyb20gJy4vaW1hZ2UtcmVjaXBlJztcbmltcG9ydCB7IE9TVmVyc2lvbiB9IGZyb20gJy4vb3MtdmVyc2lvbic7XG5pbXBvcnQgeyBDb21wb25lbnRDb25maWd1cmF0aW9uLCBJUmVjaXBlQmFzZSB9IGZyb20gJy4vcmVjaXBlLWJhc2UnO1xuXG5jb25zdCBDT05UQUlORVJfUkVDSVBFX1NZTUJPTCA9IFN5bWJvbC5mb3IoJ0Bhd3MtY2RrL2F3cy1pbWFnZWJ1aWxkZXItYWxwaGEuQ29udGFpbmVyUmVjaXBlJyk7XG5cbi8qKlxuICogUmVwcmVzZW50cyB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgYSBjb250YWluZXIgcmVjaXBlLiBXaGVuIHVzaW5nIHRoZSByZWNpcGUgaW4gYSBwaXBlbGluZSwgdGhlIHBpcGVsaW5lIHdpbGwgdXNlIHRoZVxuICogbGF0ZXN0IHJlY2lwZSBhdCB0aGUgdGltZSBvZiBleGVjdXRpb24uXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaW1hZ2VidWlsZGVyL2xhdGVzdC91c2VyZ3VpZGUvaWJob3ctc2VtYW50aWMtdmVyc2lvbmluZy5odG1sXG4gKi9cbmNvbnN0IExBVEVTVF9WRVJTSU9OID0gJ3gueC54JztcblxuLyoqXG4gKiBUaGUgZGVmYXVsdCB2ZXJzaW9uIHRvIHVzZSBpbiB0aGUgY29udGFpbmVyIHJlY2lwZS4gV2hlbiB0aGUgcmVjaXBlIGlzIHVwZGF0ZWQsIHRoZSBgeGAgd2lsbCBiZSBpbmNyZW1lbnRlZCBvZmYgZnJvbVxuICogdGhlIGxhdGVzdCByZWNpcGUgdmVyc2lvbiB0aGF0IGV4aXN0cy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbWFnZWJ1aWxkZXIvbGF0ZXN0L3VzZXJndWlkZS9jcmVhdGUtaW1hZ2UtcmVjaXBlcy5odG1sXG4gKi9cbmNvbnN0IERFRkFVTFRfUkVDSVBFX1ZFUlNJT04gPSAnMS4wLngnO1xuXG4vKipcbiAqIEFuIEVDMiBJbWFnZSBCdWlsZGVyIENvbnRhaW5lciBSZWNpcGUuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNvbnRhaW5lclJlY2lwZSBleHRlbmRzIElSZWNpcGVCYXNlIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGNvbnRhaW5lciByZWNpcGVcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgY29udGFpbmVyUmVjaXBlQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBjb250YWluZXIgcmVjaXBlXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRhaW5lclJlY2lwZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIGNvbnRhaW5lciByZWNpcGVcbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgY29udGFpbmVyUmVjaXBlVmVyc2lvbjogc3RyaW5nO1xufVxuXG4vKipcbiAqIFByb3BlcnRpZXMgZm9yIGNyZWF0aW5nIGEgQ29udGFpbmVyIFJlY2lwZSByZXNvdXJjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIENvbnRhaW5lclJlY2lwZVByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBiYXNlIGltYWdlIGZvciBjdXN0b21pemF0aW9ucyBzcGVjaWZpZWQgaW4gdGhlIGNvbnRhaW5lciByZWNpcGUuXG4gICAqL1xuICByZWFkb25seSBiYXNlSW1hZ2U6IEJhc2VDb250YWluZXJJbWFnZTtcblxuICAvKipcbiAgICogVGhlIGNvbnRhaW5lciByZXBvc2l0b3J5IHdoZXJlIHRoZSBvdXRwdXQgY29udGFpbmVyIGltYWdlIGlzIHN0b3JlZC5cbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldFJlcG9zaXRvcnk6IFJlcG9zaXRvcnk7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBjb250YWluZXIgcmVjaXBlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBhIG5hbWUgaXMgZ2VuZXJhdGVkXG4gICAqL1xuICByZWFkb25seSBjb250YWluZXJSZWNpcGVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgY29udGFpbmVyIHJlY2lwZS5cbiAgICpcbiAgICogQGRlZmF1bHQgMS4wLnhcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRhaW5lclJlY2lwZVZlcnNpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgY29udGFpbmVyIHJlY2lwZS5cbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkb2NrZXJmaWxlIHRlbXBsYXRlIHVzZWQgdG8gYnVpbGQgdGhlIGNvbnRhaW5lciBpbWFnZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhIHN0YW5kYXJkIGRvY2tlcmZpbGUgdGVtcGxhdGUgd2lsbCBiZSBnZW5lcmF0ZWQgdG8gcHVsbCB0aGUgYmFzZSBpbWFnZSwgcGVyZm9ybSBlbnZpcm9ubWVudCBzZXR1cCwgYW5kXG4gICAqIHJ1biBhbGwgY29tcG9uZW50cyBpbiB0aGUgcmVjaXBlXG4gICAqL1xuICByZWFkb25seSBkb2NrZXJmaWxlPzogRG9ja2VyZmlsZURhdGE7XG5cbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIGNvbXBvbmVudCBjb25maWd1cmF0aW9ucyB0byBhcHBseSBpbiB0aGUgaW1hZ2UgYnVpbGQuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGNvbXBvbmVudHM/OiBDb21wb25lbnRDb25maWd1cmF0aW9uW107XG5cbiAgLyoqXG4gICAqIFRoZSBLTVMga2V5IHVzZWQgdG8gZW5jcnlwdCB0aGUgZG9ja2VyZmlsZSB0ZW1wbGF0ZS5cbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkga21zS2V5Pzoga21zLklLZXk7XG5cbiAgLyoqXG4gICAqIFRoZSB3b3JraW5nIGRpcmVjdG9yeSBmb3IgdXNlIGR1cmluZyBidWlsZCBhbmQgdGVzdCB3b3JrZmxvd3MuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gdGhlIEltYWdlIEJ1aWxkZXIgZGVmYXVsdCB3b3JraW5nIGRpcmVjdG9yeSBpcyB1c2VkLiBGb3IgTGludXggYW5kIG1hY09TIGJ1aWxkcywgdGhpcyB3b3VsZCBiZSAvdG1wLiBGb3JcbiAgICogV2luZG93cyBidWlsZHMsIHRoaXMgd291bGQgYmUgQzovXG4gICAqL1xuICByZWFkb25seSB3b3JraW5nRGlyZWN0b3J5Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgb3BlcmF0aW5nIHN5c3RlbSAoT1MpIHZlcnNpb24gb2YgdGhlIGJhc2UgaW1hZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gSW1hZ2UgQnVpbGRlciB3aWxsIGRldGVybWluZSB0aGUgT1MgdmVyc2lvbiBvZiB0aGUgYmFzZSBpbWFnZSwgaWYgc291cmNlZCBmcm9tIGEgdGhpcmQtcGFydHkgY29udGFpbmVyXG4gICAqIHJlZ2lzdHJ5LiBPdGhlcndpc2UsIHRoZSBPUyB2ZXJzaW9uIG9mIHRoZSBiYXNlIGltYWdlIGlzIHJlcXVpcmVkLlxuICAgKi9cbiAgcmVhZG9ubHkgb3NWZXJzaW9uPzogT1NWZXJzaW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgYmxvY2sgZGV2aWNlcyB0byBhdHRhY2ggdG8gdGhlIGluc3RhbmNlIHVzZWQgZm9yIGJ1aWxkaW5nLCB0ZXN0aW5nLCBhbmQgZGlzdHJpYnV0aW5nIHRoZSBjb250YWluZXIgaW1hZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IHRoZSBibG9jayBkZXZpY2VzIG9mIHRoZSBpbnN0YW5jZSBpbWFnZSB3aWxsIGJlIHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbmNlQmxvY2tEZXZpY2VzPzogZWMyLkJsb2NrRGV2aWNlW107XG5cbiAgLyoqXG4gICAqIFRoZSBpbWFnZSB0byB1c2UgdG8gbGF1bmNoIHRoZSBpbnN0YW5jZSB1c2VkIGZvciBidWlsZGluZywgdGVzdGluZywgYW5kIGRpc3RyaWJ1dGluZyB0aGUgY29udGFpbmVyIGltYWdlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBJbWFnZSBCdWlsZGVyIHdpbGwgdXNlIHRoZSBhcHByb3ByaWF0ZSBFQ1Mtb3B0aW1pemVkIEFNSVxuICAgKi9cbiAgcmVhZG9ubHkgaW5zdGFuY2VJbWFnZT86IENvbnRhaW5lckluc3RhbmNlSW1hZ2U7XG5cbiAgLyoqXG4gICAqIFRoZSB0YWdzIHRvIGFwcGx5IHRvIHRoZSBjb250YWluZXIgcmVjaXBlXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IHRhZ3M/OiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9O1xufVxuXG4vKipcbiAqIFRoZSB0eXBlIG9mIHRoZSBjb250YWluZXIgYmVpbmcgdXNlZCBpbiB0aGUgY29udGFpbmVyIHJlY2lwZVxuICovXG5leHBvcnQgZW51bSBDb250YWluZXJUeXBlIHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgY29udGFpbmVyIHJlY2lwZSB1c2VzIGEgRG9ja2VyIGNvbnRhaW5lclxuICAgKi9cbiAgRE9DS0VSID0gJ0RPQ0tFUicsXG59XG5cbi8qKlxuICogVGhlIHJlbmRlcmVkIERvY2tlcmZpbGUgdmFsdWUsIGZvciB1c2UgaW4gQ2xvdWRGb3JtYXRpb24uXG4gKiAtIEZvciBpbmxpbmUgZG9ja2VyZmlsZXMsIGRvY2tlcmZpbGVUZW1wbGF0ZURhdGEgaXMgdGhlIERvY2tlcmZpbGUgdGVtcGxhdGUgdGV4dFxuICogLSBGb3IgUzMtYmFja2VkIGRvY2tlcmZpbGVzLCBkb2NrZXJmaWxlVGVtcGxhdGVVcmkgaXMgdGhlIFMzIFVSTFxuICovXG5leHBvcnQgaW50ZXJmYWNlIERvY2tlcmZpbGVUZW1wbGF0ZUNvbmZpZyB7XG4gIC8qKlxuICAgKiBUaGUgcmVuZGVyZWQgRG9ja2VyZmlsZSBkYXRhLCBmb3IgdXNlIGluIENsb3VkRm9ybWF0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm9uZSBpZiBkb2NrZXJmaWxlVGVtcGxhdGVVcmkgaXMgc2V0XG4gICAqL1xuICByZWFkb25seSBkb2NrZXJmaWxlVGVtcGxhdGVEYXRhPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgcmVuZGVyZWQgRG9ja2VyZmlsZSBVUkksIGZvciB1c2UgaW4gQ2xvdWRGb3JtYXRpb25cbiAgICpcbiAgICogQGRlZmF1bHQgLSBub25lIGlmIGRvY2tlcmZpbGVUZW1wbGF0ZURhdGEgaXMgc2V0XG4gICAqL1xuICByZWFkb25seSBkb2NrZXJmaWxlVGVtcGxhdGVVcmk/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogSGVscGVyIGNsYXNzIGZvciByZWZlcmVuY2luZyBhbmQgdXBsb2FkaW5nIGRvY2tlcmZpbGUgZGF0YSBmb3IgdGhlIGNvbnRhaW5lciByZWNpcGVcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERvY2tlcmZpbGVEYXRhIHtcbiAgLyoqXG4gICAqIFVwbG9hZHMgZG9ja2VyZmlsZSBkYXRhIGZyb20gYSBsb2NhbCBmaWxlIHRvIFMzIHRvIHVzZSBhcyB0aGUgZG9ja2VyZmlsZSBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSBzY29wZSBUaGUgY29uc3RydWN0IHNjb3BlXG4gICAqIEBwYXJhbSBpZCBJZGVudGlmaWVyIG9mIHRoZSBjb25zdHJ1Y3RcbiAgICogQHBhcmFtIHBhdGggVGhlIGxvY2FsIHBhdGggdG8gdGhlIGRvY2tlcmZpbGUgZGF0YSBmaWxlXG4gICAqIEBwYXJhbSBvcHRpb25zIFMzIGFzc2V0IHVwbG9hZCBvcHRpb25zXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Bc3NldChcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgcGF0aDogc3RyaW5nLFxuICAgIG9wdGlvbnM6IHMzYXNzZXRzLkFzc2V0T3B0aW9ucyA9IHt9LFxuICApOiBTM0RvY2tlcmZpbGVEYXRhIHtcbiAgICBjb25zdCBhc3NldCA9IG5ldyBzM2Fzc2V0cy5Bc3NldChzY29wZSwgaWQsIHsgLi4ub3B0aW9ucywgcGF0aCB9KTtcbiAgICByZXR1cm4gbmV3IFMzRG9ja2VyZmlsZURhdGFGcm9tQXNzZXQoYXNzZXQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJlZmVyZW5jZXMgZG9ja2VyZmlsZSBkYXRhIGZyb20gYSBwcmUtZXhpc3RpbmcgUzMgb2JqZWN0XG4gICAqXG4gICAqIEBwYXJhbSBidWNrZXQgVGhlIFMzIGJ1Y2tldCB3aGVyZSB0aGUgZG9ja2VyZmlsZSBkYXRhIGlzIHN0b3JlZFxuICAgKiBAcGFyYW0ga2V5IFRoZSBTMyBrZXkgb2YgdGhlIGRvY2tlcmZpbGUgZGF0YSBmaWxlXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21TMyhidWNrZXQ6IHMzLklCdWNrZXQsIGtleTogc3RyaW5nKTogUzNEb2NrZXJmaWxlRGF0YSB7XG4gICAgcmV0dXJuIG5ldyBTM0RvY2tlcmZpbGVEYXRhRnJvbUJ1Y2tldEtleShidWNrZXQsIGtleSk7XG4gIH1cblxuICAvKipcbiAgICogVXNlcyBhbiBpbmxpbmUgc3RyaW5nIGFzIHRoZSBkb2NrZXJmaWxlIGRhdGFcbiAgICpcbiAgICogQHBhcmFtIGRhdGEgQW4gaW5saW5lIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGRvY2tlcmZpbGUgZGF0YVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tSW5saW5lKGRhdGE6IHN0cmluZyk6IERvY2tlcmZpbGVEYXRhIHtcbiAgICByZXR1cm4gbmV3IElubGluZURvY2tlcmZpbGVEYXRhKGRhdGEpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZW5kZXJlZCBEb2NrZXJmaWxlIHZhbHVlLCBmb3IgdXNlIGluIENsb3VkRm9ybWF0aW9uLlxuICAgKiAtIEZvciBpbmxpbmUgZG9ja2VyZmlsZXMsIGRvY2tlcmZpbGVUZW1wbGF0ZURhdGEgaXMgdGhlIERvY2tlcmZpbGUgdGVtcGxhdGUgdGV4dFxuICAgKiAtIEZvciBTMy1iYWNrZWQgZG9ja2VyZmlsZXMsIGRvY2tlcmZpbGVUZW1wbGF0ZVVyaSBpcyB0aGUgUzMgVVJMXG4gICAqL1xuICBhYnN0cmFjdCByZW5kZXIoKTogRG9ja2VyZmlsZVRlbXBsYXRlQ29uZmlnO1xufVxuXG4vKipcbiAqIEhlbHBlciBjbGFzcyBmb3IgUzMtYmFzZWQgZG9ja2VyZmlsZSBkYXRhIHJlZmVyZW5jZXMsIGNvbnRhaW5pbmcgYWRkaXRpb25hbCBwZXJtaXNzaW9uIGdyYW50IG1ldGhvZHMgb24gdGhlIFMzIG9iamVjdFxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUzNEb2NrZXJmaWxlRGF0YSBleHRlbmRzIERvY2tlcmZpbGVEYXRhIHtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGJ1Y2tldDogczMuSUJ1Y2tldDtcbiAgcHJvdGVjdGVkIHJlYWRvbmx5IGtleTogc3RyaW5nO1xuXG4gIHByb3RlY3RlZCBjb25zdHJ1Y3RvcihidWNrZXQ6IHMzLklCdWNrZXQsIGtleTogc3RyaW5nKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIHRoaXMuYnVja2V0ID0gYnVja2V0O1xuICAgIHRoaXMua2V5ID0ga2V5O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSByZW5kZXJlZCBEb2NrZXJmaWxlIFMzIFVSTCwgZm9yIHVzZSBpbiBDbG91ZEZvcm1hdGlvblxuICAgKi9cbiAgcHVibGljIHJlbmRlcigpOiBEb2NrZXJmaWxlVGVtcGxhdGVDb25maWcge1xuICAgIHJldHVybiB7IGRvY2tlcmZpbGVUZW1wbGF0ZVVyaTogdGhpcy5idWNrZXQuczNVcmxGb3JPYmplY3QodGhpcy5rZXkpIH07XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgcHV0IHBlcm1pc3Npb25zIHRvIHRoZSBnaXZlbiBncmFudGVlIGZvciB0aGUgZG9ja2VyZmlsZSBkYXRhIGluIFMzXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWxcbiAgICovXG4gIHB1YmxpYyBncmFudFB1dChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuYnVja2V0LmdyYW50UHV0KGdyYW50ZWUsIHRoaXMua2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCByZWFkIHBlcm1pc3Npb25zIHRvIHRoZSBnaXZlbiBncmFudGVlIGZvciB0aGUgZG9ja2VyZmlsZSBkYXRhIGluIFMzXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWxcbiAgICovXG4gIHB1YmxpYyBncmFudFJlYWQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmJ1Y2tldC5ncmFudFJlYWQoZ3JhbnRlZSwgdGhpcy5rZXkpO1xuICB9XG59XG5cbmNsYXNzIElubGluZURvY2tlcmZpbGVEYXRhIGV4dGVuZHMgRG9ja2VyZmlsZURhdGEge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGF0YTogc3RyaW5nO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihkYXRhOiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVuZGVyZWQgRG9ja2VyZmlsZSB0ZXh0LCBmb3IgdXNlIGluIENsb3VkRm9ybWF0aW9uXG4gICAqL1xuICBwdWJsaWMgcmVuZGVyKCk6IERvY2tlcmZpbGVUZW1wbGF0ZUNvbmZpZyB7XG4gICAgcmV0dXJuIHsgZG9ja2VyZmlsZVRlbXBsYXRlRGF0YTogdGhpcy5kYXRhIH07XG4gIH1cbn1cblxuY2xhc3MgUzNEb2NrZXJmaWxlRGF0YUZyb21CdWNrZXRLZXkgZXh0ZW5kcyBTM0RvY2tlcmZpbGVEYXRhIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKGJ1Y2tldDogczMuSUJ1Y2tldCwga2V5OiBzdHJpbmcpIHtcbiAgICBzdXBlcihidWNrZXQsIGtleSk7XG4gIH1cbn1cblxuY2xhc3MgUzNEb2NrZXJmaWxlRGF0YUZyb21Bc3NldCBleHRlbmRzIFMzRG9ja2VyZmlsZURhdGEge1xuICBwdWJsaWMgY29uc3RydWN0b3IoYXNzZXQ6IHMzYXNzZXRzLkFzc2V0KSB7XG4gICAgc3VwZXIoYXNzZXQuYnVja2V0LCBhc3NldC5zM09iamVjdEtleSk7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhbiBFQzIgSW1hZ2UgQnVpbGRlciBjb250YWluZXIgcmVjaXBlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGFpbmVyUmVjaXBlQXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBjb250YWluZXIgcmVjaXBlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVyaXZlZCBmcm9tIGNvbnRhaW5lclJlY2lwZU5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRhaW5lclJlY2lwZUFybj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5lciByZWNpcGVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZXJpdmVkIGZyb20gY29udGFpbmVyUmVjaXBlQXJuXG4gICAqL1xuICByZWFkb25seSBjb250YWluZXJSZWNpcGVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgY29udGFpbmVyIHJlY2lwZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRlcml2ZWQgZnJvbSBjb250YWluZXJSZWNpcGVBcm4uIGlmIGEgY29udGFpbmVyUmVjaXBlTmFtZSBpcyBwcm92aWRlZCwgdGhlIGxhdGVzdCB2ZXJzaW9uLCB4LngueCwgd2lsbFxuICAgKiBiZSB1c2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGFpbmVyUmVjaXBlVmVyc2lvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIG5ldyBvciBpbXBvcnRlZCBDb250YWluZXIgUmVjaXBlXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb250YWluZXJSZWNpcGVCYXNlIGV4dGVuZHMgY2RrLlJlc291cmNlIGltcGxlbWVudHMgSUNvbnRhaW5lclJlY2lwZSB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBjb250YWluZXIgcmVjaXBlXG4gICAqL1xuICBhYnN0cmFjdCByZWFkb25seSBjb250YWluZXJSZWNpcGVBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5lciByZWNpcGVcbiAgICovXG4gIGFic3RyYWN0IHJlYWRvbmx5IGNvbnRhaW5lclJlY2lwZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIGNvbnRhaW5lciByZWNpcGVcbiAgICovXG4gIGFic3RyYWN0IHJlYWRvbmx5IGNvbnRhaW5lclJlY2lwZVZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogR3JhbnQgY3VzdG9tIGFjdGlvbnMgdG8gdGhlIGdpdmVuIGdyYW50ZWUgZm9yIHRoZSBjb250YWluZXIgcmVjaXBlXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWxcbiAgICogQHBhcmFtIGFjdGlvbnMgVGhlIGxpc3Qgb2YgYWN0aW9uc1xuICAgKi9cbiAgcHVibGljIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIGlhbS5HcmFudC5hZGRUb1ByaW5jaXBhbCh7XG4gICAgICBncmFudGVlLFxuICAgICAgYWN0aW9ucyxcbiAgICAgIHJlc291cmNlQXJuczogW3RoaXMuY29udGFpbmVyUmVjaXBlQXJuXSxcbiAgICAgIHNjb3BlOiB0aGlzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHJlYWQgcGVybWlzc2lvbnMgdG8gdGhlIGdpdmVuIGdyYW50ZWUgZm9yIHRoZSBjb250YWluZXIgcmVjaXBlXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWxcbiAgICovXG4gIHB1YmxpYyBncmFudFJlYWQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmdyYW50KGdyYW50ZWUsICdpbWFnZWJ1aWxkZXI6R2V0Q29udGFpbmVyUmVjaXBlJyk7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJlY2lwZSBpcyBhIENvbnRhaW5lciBSZWNpcGVcbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX2lzQ29udGFpbmVyUmVjaXBlKCk6IHRoaXMgaXMgSUNvbnRhaW5lclJlY2lwZSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICAvKipcbiAgICogSW5kaWNhdGVzIHdoZXRoZXIgdGhlIHJlY2lwZSBpcyBhbiBJbWFnZSBSZWNpcGVcbiAgICpcbiAgICogQGludGVybmFsXG4gICAqL1xuICBwdWJsaWMgX2lzSW1hZ2VSZWNpcGUoKTogdGhpcyBpcyBJSW1hZ2VSZWNpcGUge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gRUMyIEltYWdlIEJ1aWxkZXIgQ29udGFpbmVyIFJlY2lwZS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbWFnZWJ1aWxkZXIvbGF0ZXN0L3VzZXJndWlkZS9tYW5hZ2UtcmVjaXBlcy5odG1sXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBDb250YWluZXJSZWNpcGUgZXh0ZW5kcyBDb250YWluZXJSZWNpcGVCYXNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtaW1hZ2VidWlsZGVyLWFscGhhLkNvbnRhaW5lclJlY2lwZSc7XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBjb250YWluZXIgcmVjaXBlIGdpdmVuIGl0cyBBUk4uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Db250YWluZXJSZWNpcGVBcm4oc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgY29udGFpbmVyUmVjaXBlQXJuOiBzdHJpbmcpOiBJQ29udGFpbmVyUmVjaXBlIHtcbiAgICByZXR1cm4gdGhpcy5mcm9tQ29udGFpbmVyUmVjaXBlQXR0cmlidXRlcyhzY29wZSwgaWQsIHsgY29udGFpbmVyUmVjaXBlQXJuIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgYW4gZXhpc3RpbmcgY29udGFpbmVyIHJlY2lwZSBnaXZlbiBpdHMgbmFtZS4gVGhlIHByb3ZpZGVkIG5hbWUgbXVzdCBiZSBub3JtYWxpemVkIGJ5XG4gICAqIGNvbnZlcnRpbmcgYWxsIGFscGhhYmV0aWNhbCBjaGFyYWN0ZXJzIHRvIGxvd2VyY2FzZSwgYW5kIHJlcGxhY2luZyBhbGwgc3BhY2VzIGFuZCB1bmRlcnNjb3JlcyB3aXRoIGh5cGhlbnMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Db250YWluZXJSZWNpcGVOYW1lKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIGNvbnRhaW5lclJlY2lwZU5hbWU6IHN0cmluZyk6IElDb250YWluZXJSZWNpcGUge1xuICAgIHJldHVybiB0aGlzLmZyb21Db250YWluZXJSZWNpcGVBdHRyaWJ1dGVzKHNjb3BlLCBpZCwgeyBjb250YWluZXJSZWNpcGVOYW1lIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBjb250YWluZXIgcmVjaXBlIGJ5IHByb3ZpZGluZyBpdHMgYXR0cmlidXRlcy4gSWYgdGhlIGNvbnRhaW5lciByZWNpcGUgbmFtZSBpcyBwcm92aWRlZCBhcyBhblxuICAgKiBhdHRyaWJ1dGUsIGl0IG11c3QgYmUgbm9ybWFsaXplZCBieSBjb252ZXJ0aW5nIGFsbCBhbHBoYWJldGljYWwgY2hhcmFjdGVycyB0byBsb3dlcmNhc2UsIGFuZCByZXBsYWNpbmcgYWxsIHNwYWNlc1xuICAgKiBhbmQgdW5kZXJzY29yZXMgd2l0aCBoeXBoZW5zLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQ29udGFpbmVyUmVjaXBlQXR0cmlidXRlcyhcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgYXR0cnM6IENvbnRhaW5lclJlY2lwZUF0dHJpYnV0ZXMsXG4gICk6IElDb250YWluZXJSZWNpcGUge1xuICAgIGlmICghYXR0cnMuY29udGFpbmVyUmVjaXBlQXJuICYmICFhdHRycy5jb250YWluZXJSZWNpcGVOYW1lKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgJ2VpdGhlciBlaXRoZXIgY29udGFpbmVyUmVjaXBlQXJuIG9yIGNvbnRhaW5lclJlY2lwZU5hbWUgbXVzdCBiZSBwcm92aWRlZCB0byBpbXBvcnQgYSBjb250YWluZXIgcmVjaXBlJyxcbiAgICAgICAgc2NvcGUsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IGNvbnRhaW5lclJlY2lwZUFybiA9XG4gICAgICBhdHRycy5jb250YWluZXJSZWNpcGVBcm4gPz9cbiAgICAgIGNkay5TdGFjay5vZihzY29wZSkuZm9ybWF0QXJuKHtcbiAgICAgICAgc2VydmljZTogJ2ltYWdlYnVpbGRlcicsXG4gICAgICAgIHJlc291cmNlOiAnY29udGFpbmVyLXJlY2lwZScsXG4gICAgICAgIHJlc291cmNlTmFtZTogYCR7YXR0cnMuY29udGFpbmVyUmVjaXBlTmFtZX0vJHthdHRycy5jb250YWluZXJSZWNpcGVWZXJzaW9uID8/IExBVEVTVF9WRVJTSU9OfWAsXG4gICAgICB9KTtcblxuICAgIGNvbnN0IFtjb250YWluZXJSZWNpcGVOYW1lLCBjb250YWluZXJSZWNpcGVWZXJzaW9uXSA9ICgoKSA9PiB7XG4gICAgICBpZiAoYXR0cnMuY29udGFpbmVyUmVjaXBlTmFtZSkge1xuICAgICAgICByZXR1cm4gW2F0dHJzLmNvbnRhaW5lclJlY2lwZU5hbWUsIGF0dHJzLmNvbnRhaW5lclJlY2lwZVZlcnNpb24gPz8gTEFURVNUX1ZFUlNJT05dO1xuICAgICAgfVxuXG4gICAgICBjb25zdCBjb250YWluZXJSZWNpcGVOYW1lVmVyc2lvbiA9IGNkay5TdGFjay5vZihzY29wZSkuc3BsaXRBcm4oXG4gICAgICAgIGNvbnRhaW5lclJlY2lwZUFybixcbiAgICAgICAgY2RrLkFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FLFxuICAgICAgKS5yZXNvdXJjZU5hbWUhO1xuXG4gICAgICBjb25zdCBjb250YWluZXJSZWNpcGVOYW1lVmVyc2lvblNwbGl0ID0gY2RrLkZuLnNwbGl0KCcvJywgY29udGFpbmVyUmVjaXBlTmFtZVZlcnNpb24pO1xuICAgICAgcmV0dXJuIFtjZGsuRm4uc2VsZWN0KDAsIGNvbnRhaW5lclJlY2lwZU5hbWVWZXJzaW9uU3BsaXQpLCBjZGsuRm4uc2VsZWN0KDEsIGNvbnRhaW5lclJlY2lwZU5hbWVWZXJzaW9uU3BsaXQpXTtcbiAgICB9KSgpO1xuXG4gICAgY2xhc3MgSW1wb3J0IGV4dGVuZHMgQ29udGFpbmVyUmVjaXBlQmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY29udGFpbmVyUmVjaXBlQXJuID0gY29udGFpbmVyUmVjaXBlQXJuO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNvbnRhaW5lclJlY2lwZU5hbWUgPSBjb250YWluZXJSZWNpcGVOYW1lO1xuICAgICAgcHVibGljIHJlYWRvbmx5IGNvbnRhaW5lclJlY2lwZVZlcnNpb24gPSBjb250YWluZXJSZWNpcGVWZXJzaW9uO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJuIHdoZXRoZXIgdGhlIGdpdmVuIG9iamVjdCBpcyBhIENvbnRhaW5lclJlY2lwZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaXNDb250YWluZXJSZWNpcGUoeDogYW55KTogeCBpcyBDb250YWluZXJSZWNpcGUge1xuICAgIHJldHVybiB4ICE9PSBudWxsICYmIHR5cGVvZiB4ID09PSAnb2JqZWN0JyAmJiBDT05UQUlORVJfUkVDSVBFX1NZTUJPTCBpbiB4O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGNvbnRhaW5lciByZWNpcGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb250YWluZXJSZWNpcGVBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5lciByZWNpcGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb250YWluZXJSZWNpcGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBjb250YWluZXIgcmVjaXBlXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY29udGFpbmVyUmVjaXBlVmVyc2lvbjogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgaW5zdGFuY2VCbG9ja0RldmljZXM6IGVjMi5CbG9ja0RldmljZVtdID0gW107XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBDb250YWluZXJSZWNpcGVQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgcGh5c2ljYWxOYW1lOlxuICAgICAgICBwcm9wcy5jb250YWluZXJSZWNpcGVOYW1lID8/XG4gICAgICAgIGNkay5MYXp5LnN0cmluZyh7XG4gICAgICAgICAgcHJvZHVjZTogKCkgPT5cbiAgICAgICAgICAgIGNkay5OYW1lcy51bmlxdWVSZXNvdXJjZU5hbWUodGhpcywge1xuICAgICAgICAgICAgICBtYXhMZW5ndGg6IDEyOCxcbiAgICAgICAgICAgICAgc2VwYXJhdG9yOiAnLScsXG4gICAgICAgICAgICAgIGFsbG93ZWRTcGVjaWFsQ2hhcmFjdGVyczogJy0nLFxuICAgICAgICAgICAgfSkudG9Mb3dlckNhc2UoKSwgLy8gRW5mb3JjZSBsb3dlcmNhc2UgZm9yIHRoZSBhdXRvLWdlbmVyYXRlZCBmYWxsYmFja1xuICAgICAgICB9KSxcbiAgICB9KTtcbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBDT05UQUlORVJfUkVDSVBFX1NZTUJPTCwgeyB2YWx1ZTogdHJ1ZSB9KTtcblxuICAgIHRoaXMudmFsaWRhdGVDb250YWluZXJSZWNpcGVOYW1lKCk7XG5cbiAgICB0aGlzLmFkZEluc3RhbmNlQmxvY2tEZXZpY2UoLi4uKHByb3BzLmluc3RhbmNlQmxvY2tEZXZpY2VzID8/IFtdKSk7XG5cbiAgICBjb25zdCBjb21wb25lbnRzOiBDZm5Db250YWluZXJSZWNpcGUuQ29tcG9uZW50Q29uZmlndXJhdGlvblByb3BlcnR5W10gfCB1bmRlZmluZWQgPSBwcm9wcy5jb21wb25lbnRzPy5tYXAoXG4gICAgICAoY29tcG9uZW50KSA9PiAoe1xuICAgICAgICBjb21wb25lbnRBcm46IGNvbXBvbmVudC5jb21wb25lbnQuY29tcG9uZW50QXJuLFxuICAgICAgICAuLi4oY29tcG9uZW50LnBhcmFtZXRlcnMgJiYge1xuICAgICAgICAgIHBhcmFtZXRlcnM6IE9iamVjdC5lbnRyaWVzKGNvbXBvbmVudC5wYXJhbWV0ZXJzKS5tYXAoXG4gICAgICAgICAgICAoW25hbWUsIHBhcmFtXSk6IENmbkNvbnRhaW5lclJlY2lwZS5Db21wb25lbnRQYXJhbWV0ZXJQcm9wZXJ0eSA9PiAoe1xuICAgICAgICAgICAgICBuYW1lLFxuICAgICAgICAgICAgICB2YWx1ZTogcGFyYW0udmFsdWUsXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICApLFxuICAgICAgICB9KSxcbiAgICAgIH0pLFxuICAgICk7XG5cbiAgICBjb25zdCBkb2NrZXJmaWxlID1cbiAgICAgIHByb3BzLmRvY2tlcmZpbGUgPz9cbiAgICAgIERvY2tlcmZpbGVEYXRhLmZyb21JbmxpbmUoXG4gICAgICAgICdGUk9NIHt7eyBpbWFnZWJ1aWxkZXI6cGFyZW50SW1hZ2UgfX19XFxue3t7IGltYWdlYnVpbGRlcjplbnZpcm9ubWVudHMgfX19XFxue3t7IGltYWdlYnVpbGRlcjpjb21wb25lbnRzIH19fScsXG4gICAgICApO1xuXG4gICAgY29uc3QgY29udGFpbmVyUmVjaXBlVmVyc2lvbiA9IHByb3BzLmNvbnRhaW5lclJlY2lwZVZlcnNpb24gPz8gREVGQVVMVF9SRUNJUEVfVkVSU0lPTjtcbiAgICBjb25zdCBjb250YWluZXJSZWNpcGUgPSBuZXcgQ2ZuQ29udGFpbmVyUmVjaXBlKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIG5hbWU6IHRoaXMucGh5c2ljYWxOYW1lLFxuICAgICAgdmVyc2lvbjogY29udGFpbmVyUmVjaXBlVmVyc2lvbixcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIHBhcmVudEltYWdlOiBwcm9wcy5iYXNlSW1hZ2UuaW1hZ2UsXG4gICAgICBjb250YWluZXJUeXBlOiBDb250YWluZXJUeXBlLkRPQ0tFUixcbiAgICAgIHRhcmdldFJlcG9zaXRvcnk6IHtcbiAgICAgICAgcmVwb3NpdG9yeU5hbWU6IHByb3BzLnRhcmdldFJlcG9zaXRvcnkucmVwb3NpdG9yeU5hbWUsXG4gICAgICAgIHNlcnZpY2U6IHByb3BzLnRhcmdldFJlcG9zaXRvcnkuc2VydmljZSxcbiAgICAgIH0sXG4gICAgICBwbGF0Zm9ybU92ZXJyaWRlOiBwcm9wcy5vc1ZlcnNpb24/LnBsYXRmb3JtLFxuICAgICAgaW1hZ2VPc1ZlcnNpb25PdmVycmlkZTogcHJvcHMub3NWZXJzaW9uPy5vc1ZlcnNpb24sXG4gICAgICBrbXNLZXlJZDogcHJvcHMua21zS2V5Py5rZXlBcm4sXG4gICAgICBpbnN0YW5jZUNvbmZpZ3VyYXRpb246IGNkay5MYXp5LmFueSh7IHByb2R1Y2U6ICgpID0+IHRoaXMuYnVpbGRJbnN0YW5jZUNvbmZpZ3VyYXRpb24ocHJvcHMpIH0pLFxuICAgICAgd29ya2luZ0RpcmVjdG9yeTogcHJvcHMud29ya2luZ0RpcmVjdG9yeSxcbiAgICAgIHRhZ3M6IHByb3BzLnRhZ3MsXG4gICAgICAuLi5kb2NrZXJmaWxlLnJlbmRlcigpLFxuICAgICAgLi4uKGNvbXBvbmVudHM/Lmxlbmd0aCAmJiB7IGNvbXBvbmVudHMgfSksXG4gICAgfSk7XG5cbiAgICB0aGlzLmNvbnRhaW5lclJlY2lwZU5hbWUgPSB0aGlzLmdldFJlc291cmNlTmFtZUF0dHJpYnV0ZShjb250YWluZXJSZWNpcGUuYXR0ck5hbWUpO1xuICAgIHRoaXMuY29udGFpbmVyUmVjaXBlQXJuID0gdGhpcy5nZXRSZXNvdXJjZUFybkF0dHJpYnV0ZShjb250YWluZXJSZWNpcGUuYXR0ckFybiwge1xuICAgICAgc2VydmljZTogJ2ltYWdlYnVpbGRlcicsXG4gICAgICByZXNvdXJjZTogJ2NvbnRhaW5lci1yZWNpcGUnLFxuICAgICAgcmVzb3VyY2VOYW1lOiBgJHt0aGlzLnBoeXNpY2FsTmFtZX0vJHtjb250YWluZXJSZWNpcGVWZXJzaW9ufWAsXG4gICAgfSk7XG4gICAgdGhpcy5jb250YWluZXJSZWNpcGVWZXJzaW9uID0gY29udGFpbmVyUmVjaXBlLmdldEF0dCgnVmVyc2lvbicpLnRvU3RyaW5nKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBibG9jayBkZXZpY2VzIHRvIGF0dGFjaCB0byB0aGUgaW5zdGFuY2UgdXNlZCBmb3IgYnVpbGRpbmcsIHRlc3RpbmcsIGFuZCBkaXN0cmlidXRpbmcgdGhlIGNvbnRhaW5lciBpbWFnZS5cbiAgICpcbiAgICogQHBhcmFtIGluc3RhbmNlQmxvY2tEZXZpY2VzIC0gVGhlIGxpc3Qgb2YgYmxvY2sgZGV2aWNlcyB0byBhdHRhY2hcbiAgICovXG4gIEBNZXRob2RNZXRhZGF0YSgpXG4gIHB1YmxpYyBhZGRJbnN0YW5jZUJsb2NrRGV2aWNlKC4uLmluc3RhbmNlQmxvY2tEZXZpY2VzOiBlYzIuQmxvY2tEZXZpY2VbXSk6IHZvaWQge1xuICAgIHRoaXMuaW5zdGFuY2VCbG9ja0RldmljZXMucHVzaCguLi5pbnN0YW5jZUJsb2NrRGV2aWNlcyk7XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgYmxvY2sgZGV2aWNlcyBwcm92aWRlZCBhcyBpbnB1dCB0byB0aGUgY29uc3RydWN0LCBpbnRvIHRoZSBibG9jayBkZXZpY2UgbWFwcGluZyBzdHJ1Y3R1cmUgdGhhdFxuICAgKiBDZm5Db250YWluZXJSZWNpcGUgZXhwZWN0cyB0byByZWNlaXZlLlxuICAgKlxuICAgKiBUaGlzIGlzIHJlbmRlcmVkIGF0IHN5bnRoZXNpcyB0aW1lLCBhcyB1c2VycyBjYW4gYWRkIGFkZGl0aW9uYWwgYmxvY2sgZGV2aWNlcyB3aXRoIGBhZGRJbnN0YW5jZUJsb2NrRGV2aWNlYCwgYWZ0ZXJcbiAgICogdGhlIGNvbnN0cnVjdCBoYXMgYmVlbiBpbnN0YW50aWF0ZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHJlbmRlckJsb2NrRGV2aWNlcygpOiBDZm5Db250YWluZXJSZWNpcGUuSW5zdGFuY2VCbG9ja0RldmljZU1hcHBpbmdQcm9wZXJ0eVtdIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBibG9ja0RldmljZXMgPSB0aGlzLmluc3RhbmNlQmxvY2tEZXZpY2VzLm1hcChcbiAgICAgIChibG9ja0RldmljZSk6IENmbkNvbnRhaW5lclJlY2lwZS5JbnN0YW5jZUJsb2NrRGV2aWNlTWFwcGluZ1Byb3BlcnR5ID0+IHtcbiAgICAgICAgY29uc3QgZWJzRGV2aWNlID0gYmxvY2tEZXZpY2Uudm9sdW1lLmVic0RldmljZTtcbiAgICAgICAgY29uc3QgZWJzOiBDZm5Db250YWluZXJSZWNpcGUuRWJzSW5zdGFuY2VCbG9ja0RldmljZVNwZWNpZmljYXRpb25Qcm9wZXJ0eSA9IHtcbiAgICAgICAgICAuLi4oZWJzRGV2aWNlPy5kZWxldGVPblRlcm1pbmF0aW9uICE9PSB1bmRlZmluZWQgJiYgeyBkZWxldGVPblRlcm1pbmF0aW9uOiBlYnNEZXZpY2UuZGVsZXRlT25UZXJtaW5hdGlvbiB9KSxcbiAgICAgICAgICAuLi4oZWJzRGV2aWNlPy5lbmNyeXB0ZWQgIT09IHVuZGVmaW5lZCAmJiB7IGVuY3J5cHRlZDogZWJzRGV2aWNlLmVuY3J5cHRlZCB9KSxcbiAgICAgICAgICAuLi4oZWJzRGV2aWNlPy5pb3BzICE9PSB1bmRlZmluZWQgJiYgeyBpb3BzOiBlYnNEZXZpY2UuaW9wcyB9KSxcbiAgICAgICAgICAuLi4oZWJzRGV2aWNlPy5rbXNLZXkgIT09IHVuZGVmaW5lZCAmJiB7IGttc0tleUlkOiBlYnNEZXZpY2Uua21zS2V5LmtleUFybiB9KSxcbiAgICAgICAgICAuLi4oZWJzRGV2aWNlPy5zbmFwc2hvdElkICE9PSB1bmRlZmluZWQgJiYgeyBzbmFwc2hvdElkOiBlYnNEZXZpY2Uuc25hcHNob3RJZCB9KSxcbiAgICAgICAgICAuLi4oZWJzRGV2aWNlPy50aHJvdWdocHV0ICE9PSB1bmRlZmluZWQgJiYgeyB0aHJvdWdocHV0OiBlYnNEZXZpY2UudGhyb3VnaHB1dCB9KSxcbiAgICAgICAgICAuLi4oZWJzRGV2aWNlPy52b2x1bWVTaXplICE9PSB1bmRlZmluZWQgJiYgeyB2b2x1bWVTaXplOiBlYnNEZXZpY2Uudm9sdW1lU2l6ZSB9KSxcbiAgICAgICAgICAuLi4oZWJzRGV2aWNlPy52b2x1bWVUeXBlICE9PSB1bmRlZmluZWQgJiYgeyB2b2x1bWVUeXBlOiBlYnNEZXZpY2Uudm9sdW1lVHlwZSB9KSxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBtYXBwaW5nRW5hYmxlZCA9IGJsb2NrRGV2aWNlLm1hcHBpbmdFbmFibGVkID8/IHRydWU7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgZGV2aWNlTmFtZTogYmxvY2tEZXZpY2UuZGV2aWNlTmFtZSxcbiAgICAgICAgICB2aXJ0dWFsTmFtZTogYmxvY2tEZXZpY2Uudm9sdW1lLnZpcnR1YWxOYW1lLFxuICAgICAgICAgIC4uLighbWFwcGluZ0VuYWJsZWQgJiYgeyBub0RldmljZTogJycgfSksXG4gICAgICAgICAgLi4uKE9iamVjdC5rZXlzKGVicykubGVuZ3RoICYmIHsgZWJzIH0pLFxuICAgICAgICB9O1xuICAgICAgfSxcbiAgICApO1xuXG4gICAgcmV0dXJuIGJsb2NrRGV2aWNlcy5sZW5ndGggPyBibG9ja0RldmljZXMgOiB1bmRlZmluZWQ7XG4gIH1cblxuICAvKipcbiAgICogR2VuZXJhdGVzIHRoZSBpbnN0YW5jZSBjb25maWd1cmF0aW9uIHByb3BlcnR5IGludG8gdGhlIGBJbnN0YW5jZUNvbmZpZ3VyYXRpb25gIHR5cGUgaW4gdGhlICBDbG91ZEZvcm1hdGlvbiBMMVxuICAgKiBkZWZpbml0aW9uLlxuICAgKlxuICAgKiBAcGFyYW0gcHJvcHMgVGhlIHByb3BzIHBhc3NlZCBhcyBpbnB1dCB0byB0aGUgY29uc3RydWN0XG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIGJ1aWxkSW5zdGFuY2VDb25maWd1cmF0aW9uKFxuICAgIHByb3BzOiBDb250YWluZXJSZWNpcGVQcm9wcyxcbiAgKTogQ2ZuQ29udGFpbmVyUmVjaXBlLkluc3RhbmNlQ29uZmlndXJhdGlvblByb3BlcnR5IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBibG9ja0RldmljZXMgPSB0aGlzLnJlbmRlckJsb2NrRGV2aWNlcygpO1xuXG4gICAgY29uc3QgaW5zdGFuY2VDb25maWd1cmF0aW9uOiBDZm5Db250YWluZXJSZWNpcGUuSW5zdGFuY2VDb25maWd1cmF0aW9uUHJvcGVydHkgPSB7XG4gICAgICAuLi4oYmxvY2tEZXZpY2VzPy5sZW5ndGggJiYgeyBibG9ja0RldmljZU1hcHBpbmdzOiBibG9ja0RldmljZXMgfSksXG4gICAgICAuLi4ocHJvcHMuaW5zdGFuY2VJbWFnZSAhPT0gdW5kZWZpbmVkICYmIHsgaW1hZ2U6IHByb3BzLmluc3RhbmNlSW1hZ2UuaW1hZ2UgfSksXG4gICAgfTtcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhpbnN0YW5jZUNvbmZpZ3VyYXRpb24pLmxlbmd0aCA/IGluc3RhbmNlQ29uZmlndXJhdGlvbiA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgdmFsaWRhdGVDb250YWluZXJSZWNpcGVOYW1lKCkge1xuICAgIGlmIChjZGsuVG9rZW4uaXNVbnJlc29sdmVkKHRoaXMucGh5c2ljYWxOYW1lKSkge1xuICAgICAgcmV0dXJuOyAvLyBDYW5ub3QgdmFsaWRhdGUgdW5yZXNvbHZlZCB0b2tlbnMsIGdpdmVuIHRoZWlyIGFjdHVhbCB2YWx1ZSBpcyByZW5kZXJlZCBhdCBkZXBsb3ltZW50IHRpbWVcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waHlzaWNhbE5hbWUubGVuZ3RoID4gMTI4KSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgYHRoZSBjb250YWluZXJSZWNpcGVOYW1lIGNhbm5vdCBiZSBsb25nZXIgdGhhbiAxMjggY2hhcmFjdGVycywgZ290OiAnJHt0aGlzLnBoeXNpY2FsTmFtZX0nYCxcbiAgICAgICAgdGhpcyxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGh5c2ljYWxOYW1lLmluY2x1ZGVzKCcgJykpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKGB0aGUgY29udGFpbmVyUmVjaXBlTmFtZSBjYW5ub3QgY29udGFpbiBzcGFjZXMsIGdvdDogJyR7dGhpcy5waHlzaWNhbE5hbWV9J2AsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZS5pbmNsdWRlcygnXycpKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgYHRoZSBjb250YWluZXJSZWNpcGVOYW1lIGNhbm5vdCBjb250YWluIHVuZGVyc2NvcmVzLCBnb3Q6ICcke3RoaXMucGh5c2ljYWxOYW1lfSdgLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waHlzaWNhbE5hbWUgIT09IHRoaXMucGh5c2ljYWxOYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKGB0aGUgY29udGFpbmVyUmVjaXBlTmFtZSBtdXN0IGJlIGxvd2VyY2FzZSwgZ290OiAnJHt0aGlzLnBoeXNpY2FsTmFtZX0nYCwgdGhpcyk7XG4gICAgfVxuICB9XG59XG4iXX0=
455
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGFpbmVyLXJlY2lwZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvbnRhaW5lci1yZWNpcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsbUNBQW1DO0FBRW5DLDJDQUEyQztBQUMzQyxtRUFBa0U7QUFHbEUsc0RBQXNEO0FBQ3RELDhFQUE4RjtBQUM5RiwwRUFBMEU7QUFRMUUsTUFBTSx1QkFBdUIsR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLGlEQUFpRCxDQUFDLENBQUM7QUFFOUY7Ozs7O0dBS0c7QUFDSCxNQUFNLGNBQWMsR0FBRyxPQUFPLENBQUM7QUFFL0I7Ozs7O0dBS0c7QUFDSCxNQUFNLHNCQUFzQixHQUFHLE9BQU8sQ0FBQztBQTJIdkM7O0dBRUc7QUFDSCxJQUFZLGFBS1g7QUFMRCxXQUFZLGFBQWE7SUFDdkI7O09BRUc7SUFDSCxrQ0FBaUIsQ0FBQTtBQUNuQixDQUFDLEVBTFcsYUFBYSw2QkFBYixhQUFhLFFBS3hCO0FBdUJEOztHQUVHO0FBQ0gsTUFBc0IsY0FBYzs7SUFDbEM7Ozs7Ozs7T0FPRztJQUNJLE1BQU0sQ0FBQyxTQUFTLENBQ3JCLEtBQWdCLEVBQ2hCLEVBQVUsRUFDVixJQUFZLEVBQ1osVUFBaUMsRUFBRTtRQUVuQyxNQUFNLEtBQUssR0FBRyxJQUFJLFFBQVEsQ0FBQyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFDbEUsT0FBTyxJQUFJLHlCQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQzdDO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQWtCLEVBQUUsR0FBVztRQUNsRCxPQUFPLElBQUksNkJBQTZCLENBQUMsTUFBTSxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQ3ZEO0lBRUQ7Ozs7T0FJRztJQUNJLE1BQU0s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Q2pGLElBQUksQ0FDTCxDQUFDO1lBQ0osQ0FBQztZQUVELElBQUksSUFBSSxDQUFDLFlBQVksS0FBSyxJQUFJLENBQUMsWUFBWSxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7Z0JBQzFELE1BQU0sSUFBSSxHQUFHLENBQUMsZUFBZSxDQUFDLG9EQUFvRCxJQUFJLENBQUMsWUFBWSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDaEgsQ0FBQztTQUNGOztZQWhRVSx1REFBZTs7Ozs7QUFBZiwwQ0FBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBlYzIgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBDZm5Db250YWluZXJSZWNpcGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaW1hZ2VidWlsZGVyJztcbmltcG9ydCAqIGFzIGttcyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCAqIGFzIHMzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgKiBhcyBzM2Fzc2V0cyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMtYXNzZXRzJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhLCBNZXRob2RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IEJhc2VDb250YWluZXJJbWFnZSwgQ29udGFpbmVySW5zdGFuY2VJbWFnZSB9IGZyb20gJy4vYmFzZS1pbWFnZSc7XG5pbXBvcnQgeyBSZXBvc2l0b3J5IH0gZnJvbSAnLi9kaXN0cmlidXRpb24tY29uZmlndXJhdGlvbic7XG5pbXBvcnQgeyBJSW1hZ2VSZWNpcGUgfSBmcm9tICcuL2ltYWdlLXJlY2lwZSc7XG5pbXBvcnQgeyBPU1ZlcnNpb24gfSBmcm9tICcuL29zLXZlcnNpb24nO1xuaW1wb3J0IHsgQ29tcG9uZW50Q29uZmlndXJhdGlvbiwgSVJlY2lwZUJhc2UgfSBmcm9tICcuL3JlY2lwZS1iYXNlJztcblxuY29uc3QgQ09OVEFJTkVSX1JFQ0lQRV9TWU1CT0wgPSBTeW1ib2wuZm9yKCdAYXdzLWNkay9hd3MtaW1hZ2VidWlsZGVyLWFscGhhLkNvbnRhaW5lclJlY2lwZScpO1xuXG4vKipcbiAqIFJlcHJlc2VudHMgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIGEgY29udGFpbmVyIHJlY2lwZS4gV2hlbiB1c2luZyB0aGUgcmVjaXBlIGluIGEgcGlwZWxpbmUsIHRoZSBwaXBlbGluZSB3aWxsIHVzZSB0aGVcbiAqIGxhdGVzdCByZWNpcGUgYXQgdGhlIHRpbWUgb2YgZXhlY3V0aW9uLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ltYWdlYnVpbGRlci9sYXRlc3QvdXNlcmd1aWRlL2liaG93LXNlbWFudGljLXZlcnNpb25pbmcuaHRtbFxuICovXG5jb25zdCBMQVRFU1RfVkVSU0lPTiA9ICd4LngueCc7XG5cbi8qKlxuICogVGhlIGRlZmF1bHQgdmVyc2lvbiB0byB1c2UgaW4gdGhlIGNvbnRhaW5lciByZWNpcGUuIFdoZW4gdGhlIHJlY2lwZSBpcyB1cGRhdGVkLCB0aGUgYHhgIHdpbGwgYmUgaW5jcmVtZW50ZWQgb2ZmIGZyb21cbiAqIHRoZSBsYXRlc3QgcmVjaXBlIHZlcnNpb24gdGhhdCBleGlzdHMuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaW1hZ2VidWlsZGVyL2xhdGVzdC91c2VyZ3VpZGUvY3JlYXRlLWltYWdlLXJlY2lwZXMuaHRtbFxuICovXG5jb25zdCBERUZBVUxUX1JFQ0lQRV9WRVJTSU9OID0gJzEuMC54JztcblxuLyoqXG4gKiBBbiBFQzIgSW1hZ2UgQnVpbGRlciBDb250YWluZXIgUmVjaXBlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElDb250YWluZXJSZWNpcGUgZXh0ZW5kcyBJUmVjaXBlQmFzZSB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBjb250YWluZXIgcmVjaXBlXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRhaW5lclJlY2lwZUFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgY29udGFpbmVyIHJlY2lwZVxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBjb250YWluZXJSZWNpcGVOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB2ZXJzaW9uIG9mIHRoZSBjb250YWluZXIgcmVjaXBlXG4gICAqXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRhaW5lclJlY2lwZVZlcnNpb246IHN0cmluZztcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhIENvbnRhaW5lciBSZWNpcGUgcmVzb3VyY2VcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb250YWluZXJSZWNpcGVQcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgYmFzZSBpbWFnZSBmb3IgY3VzdG9taXphdGlvbnMgc3BlY2lmaWVkIGluIHRoZSBjb250YWluZXIgcmVjaXBlLlxuICAgKi9cbiAgcmVhZG9ubHkgYmFzZUltYWdlOiBCYXNlQ29udGFpbmVySW1hZ2U7XG5cbiAgLyoqXG4gICAqIFRoZSBjb250YWluZXIgcmVwb3NpdG9yeSB3aGVyZSB0aGUgb3V0cHV0IGNvbnRhaW5lciBpbWFnZSBpcyBzdG9yZWQuXG4gICAqL1xuICByZWFkb25seSB0YXJnZXRSZXBvc2l0b3J5OiBSZXBvc2l0b3J5O1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgY29udGFpbmVyIHJlY2lwZS5cbiAgICpcbiAgICogQGRlZmF1bHQgYSBuYW1lIGlzIGdlbmVyYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgY29udGFpbmVyUmVjaXBlTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIGNvbnRhaW5lciByZWNpcGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IDEuMC54XG4gICAqL1xuICByZWFkb25seSBjb250YWluZXJSZWNpcGVWZXJzaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGNvbnRhaW5lciByZWNpcGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZG9ja2VyZmlsZSB0ZW1wbGF0ZSB1c2VkIHRvIGJ1aWxkIHRoZSBjb250YWluZXIgaW1hZ2UuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYSBzdGFuZGFyZCBkb2NrZXJmaWxlIHRlbXBsYXRlIHdpbGwgYmUgZ2VuZXJhdGVkIHRvIHB1bGwgdGhlIGJhc2UgaW1hZ2UsIHBlcmZvcm0gZW52aXJvbm1lbnQgc2V0dXAsIGFuZFxuICAgKiBydW4gYWxsIGNvbXBvbmVudHMgaW4gdGhlIHJlY2lwZVxuICAgKi9cbiAgcmVhZG9ubHkgZG9ja2VyZmlsZT86IERvY2tlcmZpbGVEYXRhO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiBjb21wb25lbnQgY29uZmlndXJhdGlvbnMgdG8gYXBwbHkgaW4gdGhlIGltYWdlIGJ1aWxkLlxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBjb21wb25lbnRzPzogQ29tcG9uZW50Q29uZmlndXJhdGlvbltdO1xuXG4gIC8qKlxuICAgKiBUaGUgS01TIGtleSB1c2VkIHRvIGVuY3J5cHQgdGhlIGRvY2tlcmZpbGUgdGVtcGxhdGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGttc0tleT86IGttcy5JS2V5O1xuXG4gIC8qKlxuICAgKiBUaGUgd29ya2luZyBkaXJlY3RvcnkgZm9yIHVzZSBkdXJpbmcgYnVpbGQgYW5kIHRlc3Qgd29ya2Zsb3dzLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIHRoZSBJbWFnZSBCdWlsZGVyIGRlZmF1bHQgd29ya2luZyBkaXJlY3RvcnkgaXMgdXNlZC4gRm9yIExpbnV4IGFuZCBtYWNPUyBidWlsZHMsIHRoaXMgd291bGQgYmUgL3RtcC4gRm9yXG4gICAqIFdpbmRvd3MgYnVpbGRzLCB0aGlzIHdvdWxkIGJlIEM6L1xuICAgKi9cbiAgcmVhZG9ubHkgd29ya2luZ0RpcmVjdG9yeT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG9wZXJhdGluZyBzeXN0ZW0gKE9TKSB2ZXJzaW9uIG9mIHRoZSBiYXNlIGltYWdlLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIEltYWdlIEJ1aWxkZXIgd2lsbCBkZXRlcm1pbmUgdGhlIE9TIHZlcnNpb24gb2YgdGhlIGJhc2UgaW1hZ2UsIGlmIHNvdXJjZWQgZnJvbSBhIHRoaXJkLXBhcnR5IGNvbnRhaW5lclxuICAgKiByZWdpc3RyeS4gT3RoZXJ3aXNlLCB0aGUgT1MgdmVyc2lvbiBvZiB0aGUgYmFzZSBpbWFnZSBpcyByZXF1aXJlZC5cbiAgICovXG4gIHJlYWRvbmx5IG9zVmVyc2lvbj86IE9TVmVyc2lvbjtcblxuICAvKipcbiAgICogVGhlIGJsb2NrIGRldmljZXMgdG8gYXR0YWNoIHRvIHRoZSBpbnN0YW5jZSB1c2VkIGZvciBidWlsZGluZywgdGVzdGluZywgYW5kIGRpc3RyaWJ1dGluZyB0aGUgY29udGFpbmVyIGltYWdlLlxuICAgKlxuICAgKiBAZGVmYXVsdCB0aGUgYmxvY2sgZGV2aWNlcyBvZiB0aGUgaW5zdGFuY2UgaW1hZ2Ugd2lsbCBiZSB1c2VkXG4gICAqL1xuICByZWFkb25seSBpbnN0YW5jZUJsb2NrRGV2aWNlcz86IGVjMi5CbG9ja0RldmljZVtdO1xuXG4gIC8qKlxuICAgKiBUaGUgaW1hZ2UgdG8gdXNlIHRvIGxhdW5jaCB0aGUgaW5zdGFuY2UgdXNlZCBmb3IgYnVpbGRpbmcsIHRlc3RpbmcsIGFuZCBkaXN0cmlidXRpbmcgdGhlIGNvbnRhaW5lciBpbWFnZS5cbiAgICpcbiAgICogQGRlZmF1bHQgSW1hZ2UgQnVpbGRlciB3aWxsIHVzZSB0aGUgYXBwcm9wcmlhdGUgRUNTLW9wdGltaXplZCBBTUlcbiAgICovXG4gIHJlYWRvbmx5IGluc3RhbmNlSW1hZ2U/OiBDb250YWluZXJJbnN0YW5jZUltYWdlO1xuXG4gIC8qKlxuICAgKiBUaGUgdGFncyB0byBhcHBseSB0byB0aGUgY29udGFpbmVyIHJlY2lwZVxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuLyoqXG4gKiBUaGUgdHlwZSBvZiB0aGUgY29udGFpbmVyIGJlaW5nIHVzZWQgaW4gdGhlIGNvbnRhaW5lciByZWNpcGVcbiAqL1xuZXhwb3J0IGVudW0gQ29udGFpbmVyVHlwZSB7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhlIGNvbnRhaW5lciByZWNpcGUgdXNlcyBhIERvY2tlciBjb250YWluZXJcbiAgICovXG4gIERPQ0tFUiA9ICdET0NLRVInLFxufVxuXG4vKipcbiAqIFRoZSByZW5kZXJlZCBEb2NrZXJmaWxlIHZhbHVlLCBmb3IgdXNlIGluIENsb3VkRm9ybWF0aW9uLlxuICogLSBGb3IgaW5saW5lIGRvY2tlcmZpbGVzLCBkb2NrZXJmaWxlVGVtcGxhdGVEYXRhIGlzIHRoZSBEb2NrZXJmaWxlIHRlbXBsYXRlIHRleHRcbiAqIC0gRm9yIFMzLWJhY2tlZCBkb2NrZXJmaWxlcywgZG9ja2VyZmlsZVRlbXBsYXRlVXJpIGlzIHRoZSBTMyBVUkxcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBEb2NrZXJmaWxlVGVtcGxhdGVDb25maWcge1xuICAvKipcbiAgICogVGhlIHJlbmRlcmVkIERvY2tlcmZpbGUgZGF0YSwgZm9yIHVzZSBpbiBDbG91ZEZvcm1hdGlvblxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vbmUgaWYgZG9ja2VyZmlsZVRlbXBsYXRlVXJpIGlzIHNldFxuICAgKi9cbiAgcmVhZG9ubHkgZG9ja2VyZmlsZVRlbXBsYXRlRGF0YT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHJlbmRlcmVkIERvY2tlcmZpbGUgVVJJLCBmb3IgdXNlIGluIENsb3VkRm9ybWF0aW9uXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gbm9uZSBpZiBkb2NrZXJmaWxlVGVtcGxhdGVEYXRhIGlzIHNldFxuICAgKi9cbiAgcmVhZG9ubHkgZG9ja2VyZmlsZVRlbXBsYXRlVXJpPzogc3RyaW5nO1xufVxuXG4vKipcbiAqIEhlbHBlciBjbGFzcyBmb3IgcmVmZXJlbmNpbmcgYW5kIHVwbG9hZGluZyBkb2NrZXJmaWxlIGRhdGEgZm9yIHRoZSBjb250YWluZXIgcmVjaXBlXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBEb2NrZXJmaWxlRGF0YSB7XG4gIC8qKlxuICAgKiBVcGxvYWRzIGRvY2tlcmZpbGUgZGF0YSBmcm9tIGEgbG9jYWwgZmlsZSB0byBTMyB0byB1c2UgYXMgdGhlIGRvY2tlcmZpbGUgZGF0YVxuICAgKlxuICAgKiBAcGFyYW0gc2NvcGUgVGhlIGNvbnN0cnVjdCBzY29wZVxuICAgKiBAcGFyYW0gaWQgSWRlbnRpZmllciBvZiB0aGUgY29uc3RydWN0XG4gICAqIEBwYXJhbSBwYXRoIFRoZSBsb2NhbCBwYXRoIHRvIHRoZSBkb2NrZXJmaWxlIGRhdGEgZmlsZVxuICAgKiBAcGFyYW0gb3B0aW9ucyBTMyBhc3NldCB1cGxvYWQgb3B0aW9uc1xuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQXNzZXQoXG4gICAgc2NvcGU6IENvbnN0cnVjdCxcbiAgICBpZDogc3RyaW5nLFxuICAgIHBhdGg6IHN0cmluZyxcbiAgICBvcHRpb25zOiBzM2Fzc2V0cy5Bc3NldE9wdGlvbnMgPSB7fSxcbiAgKTogUzNEb2NrZXJmaWxlRGF0YSB7XG4gICAgY29uc3QgYXNzZXQgPSBuZXcgczNhc3NldHMuQXNzZXQoc2NvcGUsIGlkLCB7IC4uLm9wdGlvbnMsIHBhdGggfSk7XG4gICAgcmV0dXJuIG5ldyBTM0RvY2tlcmZpbGVEYXRhRnJvbUFzc2V0KGFzc2V0KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZWZlcmVuY2VzIGRvY2tlcmZpbGUgZGF0YSBmcm9tIGEgcHJlLWV4aXN0aW5nIFMzIG9iamVjdFxuICAgKlxuICAgKiBAcGFyYW0gYnVja2V0IFRoZSBTMyBidWNrZXQgd2hlcmUgdGhlIGRvY2tlcmZpbGUgZGF0YSBpcyBzdG9yZWRcbiAgICogQHBhcmFtIGtleSBUaGUgUzMga2V5IG9mIHRoZSBkb2NrZXJmaWxlIGRhdGEgZmlsZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tUzMoYnVja2V0OiBzMy5JQnVja2V0LCBrZXk6IHN0cmluZyk6IFMzRG9ja2VyZmlsZURhdGEge1xuICAgIHJldHVybiBuZXcgUzNEb2NrZXJmaWxlRGF0YUZyb21CdWNrZXRLZXkoYnVja2V0LCBrZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFVzZXMgYW4gaW5saW5lIHN0cmluZyBhcyB0aGUgZG9ja2VyZmlsZSBkYXRhXG4gICAqXG4gICAqIEBwYXJhbSBkYXRhIEFuIGlubGluZSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBkb2NrZXJmaWxlIGRhdGFcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUlubGluZShkYXRhOiBzdHJpbmcpOiBEb2NrZXJmaWxlRGF0YSB7XG4gICAgcmV0dXJuIG5ldyBJbmxpbmVEb2NrZXJmaWxlRGF0YShkYXRhKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVuZGVyZWQgRG9ja2VyZmlsZSB2YWx1ZSwgZm9yIHVzZSBpbiBDbG91ZEZvcm1hdGlvbi5cbiAgICogLSBGb3IgaW5saW5lIGRvY2tlcmZpbGVzLCBkb2NrZXJmaWxlVGVtcGxhdGVEYXRhIGlzIHRoZSBEb2NrZXJmaWxlIHRlbXBsYXRlIHRleHRcbiAgICogLSBGb3IgUzMtYmFja2VkIGRvY2tlcmZpbGVzLCBkb2NrZXJmaWxlVGVtcGxhdGVVcmkgaXMgdGhlIFMzIFVSTFxuICAgKi9cbiAgYWJzdHJhY3QgcmVuZGVyKCk6IERvY2tlcmZpbGVUZW1wbGF0ZUNvbmZpZztcbn1cblxuLyoqXG4gKiBIZWxwZXIgY2xhc3MgZm9yIFMzLWJhc2VkIGRvY2tlcmZpbGUgZGF0YSByZWZlcmVuY2VzLCBjb250YWluaW5nIGFkZGl0aW9uYWwgcGVybWlzc2lvbiBncmFudCBtZXRob2RzIG9uIHRoZSBTMyBvYmplY3RcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFMzRG9ja2VyZmlsZURhdGEgZXh0ZW5kcyBEb2NrZXJmaWxlRGF0YSB7XG4gIHByb3RlY3RlZCByZWFkb25seSBidWNrZXQ6IHMzLklCdWNrZXQ7XG4gIHByb3RlY3RlZCByZWFkb25seSBrZXk6IHN0cmluZztcblxuICBwcm90ZWN0ZWQgY29uc3RydWN0b3IoYnVja2V0OiBzMy5JQnVja2V0LCBrZXk6IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG5cbiAgICB0aGlzLmJ1Y2tldCA9IGJ1Y2tldDtcbiAgICB0aGlzLmtleSA9IGtleTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVuZGVyZWQgRG9ja2VyZmlsZSBTMyBVUkwsIGZvciB1c2UgaW4gQ2xvdWRGb3JtYXRpb25cbiAgICovXG4gIHB1YmxpYyByZW5kZXIoKTogRG9ja2VyZmlsZVRlbXBsYXRlQ29uZmlnIHtcbiAgICByZXR1cm4geyBkb2NrZXJmaWxlVGVtcGxhdGVVcmk6IHRoaXMuYnVja2V0LnMzVXJsRm9yT2JqZWN0KHRoaXMua2V5KSB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHB1dCBwZXJtaXNzaW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGRvY2tlcmZpbGUgZGF0YSBpbiBTM1xuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKi9cbiAgcHVibGljIGdyYW50UHV0KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5idWNrZXQuZ3JhbnRQdXQoZ3JhbnRlZSwgdGhpcy5rZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHJlYWQgcGVybWlzc2lvbnMgdG8gdGhlIGdpdmVuIGdyYW50ZWUgZm9yIHRoZSBkb2NrZXJmaWxlIGRhdGEgaW4gUzNcbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWxcbiAgICovXG4gIHB1YmxpYyBncmFudFJlYWQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiB0aGlzLmJ1Y2tldC5ncmFudFJlYWQoZ3JhbnRlZSwgdGhpcy5rZXkpO1xuICB9XG59XG5cbmNsYXNzIElubGluZURvY2tlcmZpbGVEYXRhIGV4dGVuZHMgRG9ja2VyZmlsZURhdGEge1xuICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGF0YTogc3RyaW5nO1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcihkYXRhOiBzdHJpbmcpIHtcbiAgICBzdXBlcigpO1xuXG4gICAgdGhpcy5kYXRhID0gZGF0YTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgcmVuZGVyZWQgRG9ja2VyZmlsZSB0ZXh0LCBmb3IgdXNlIGluIENsb3VkRm9ybWF0aW9uXG4gICAqL1xuICBwdWJsaWMgcmVuZGVyKCk6IERvY2tlcmZpbGVUZW1wbGF0ZUNvbmZpZyB7XG4gICAgcmV0dXJuIHsgZG9ja2VyZmlsZVRlbXBsYXRlRGF0YTogdGhpcy5kYXRhIH07XG4gIH1cbn1cblxuY2xhc3MgUzNEb2NrZXJmaWxlRGF0YUZyb21CdWNrZXRLZXkgZXh0ZW5kcyBTM0RvY2tlcmZpbGVEYXRhIHtcbiAgcHVibGljIGNvbnN0cnVjdG9yKGJ1Y2tldDogczMuSUJ1Y2tldCwga2V5OiBzdHJpbmcpIHtcbiAgICBzdXBlcihidWNrZXQsIGtleSk7XG4gIH1cbn1cblxuY2xhc3MgUzNEb2NrZXJmaWxlRGF0YUZyb21Bc3NldCBleHRlbmRzIFMzRG9ja2VyZmlsZURhdGEge1xuICBwdWJsaWMgY29uc3RydWN0b3IoYXNzZXQ6IHMzYXNzZXRzLkFzc2V0KSB7XG4gICAgc3VwZXIoYXNzZXQuYnVja2V0LCBhc3NldC5zM09iamVjdEtleSk7XG4gIH1cbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBhbiBFQzIgSW1hZ2UgQnVpbGRlciBjb250YWluZXIgcmVjaXBlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGFpbmVyUmVjaXBlQXR0cmlidXRlcyB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBjb250YWluZXIgcmVjaXBlXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gZGVyaXZlZCBmcm9tIGNvbnRhaW5lclJlY2lwZU5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRhaW5lclJlY2lwZUFybj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5lciByZWNpcGVcbiAgICpcbiAgICogQGRlZmF1bHQgLSBkZXJpdmVkIGZyb20gY29udGFpbmVyUmVjaXBlQXJuXG4gICAqL1xuICByZWFkb25seSBjb250YWluZXJSZWNpcGVOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdmVyc2lvbiBvZiB0aGUgY29udGFpbmVyIHJlY2lwZVxuICAgKlxuICAgKiBAZGVmYXVsdCAtIGRlcml2ZWQgZnJvbSBjb250YWluZXJSZWNpcGVBcm4uIGlmIGEgY29udGFpbmVyUmVjaXBlTmFtZSBpcyBwcm92aWRlZCwgdGhlIGxhdGVzdCB2ZXJzaW9uLCB4LngueCwgd2lsbFxuICAgKiBiZSB1c2VkLlxuICAgKi9cbiAgcmVhZG9ubHkgY29udGFpbmVyUmVjaXBlVmVyc2lvbj86IHN0cmluZztcbn1cblxuLyoqXG4gKiBBIG5ldyBvciBpbXBvcnRlZCBDb250YWluZXIgUmVjaXBlXG4gKi9cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb250YWluZXJSZWNpcGVCYXNlIGV4dGVuZHMgY2RrLlJlc291cmNlIGltcGxlbWVudHMgSUNvbnRhaW5lclJlY2lwZSB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBjb250YWluZXIgcmVjaXBlXG4gICAqL1xuICBhYnN0cmFjdCByZWFkb25seSBjb250YWluZXJSZWNpcGVBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5lciByZWNpcGVcbiAgICovXG4gIGFic3RyYWN0IHJlYWRvbmx5IGNvbnRhaW5lclJlY2lwZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIGNvbnRhaW5lciByZWNpcGVcbiAgICovXG4gIGFic3RyYWN0IHJlYWRvbmx5IGNvbnRhaW5lclJlY2lwZVZlcnNpb246IHN0cmluZztcblxuICAvKipcbiAgICogR3JhbnQgY3VzdG9tIGFjdGlvbnMgdG8gdGhlIGdpdmVuIGdyYW50ZWUgZm9yIHRoZSBjb250YWluZXIgcmVjaXBlXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqIEBwYXJhbSBhY3Rpb25zIFRoZSBsaXN0IG9mIGFjdGlvbnNcbiAgICovXG4gIHB1YmxpYyBncmFudChncmFudGVlOiBpYW0uSUdyYW50YWJsZSwgLi4uYWN0aW9uczogc3RyaW5nW10pOiBpYW0uR3JhbnQge1xuICAgIHJldHVybiBpYW0uR3JhbnQuYWRkVG9QcmluY2lwYWwoe1xuICAgICAgZ3JhbnRlZSxcbiAgICAgIGFjdGlvbnMsXG4gICAgICByZXNvdXJjZUFybnM6IFt0aGlzLmNvbnRhaW5lclJlY2lwZUFybl0sXG4gICAgICBzY29wZTogdGhpcyxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCByZWFkIHBlcm1pc3Npb25zIHRvIHRoZSBnaXZlbiBncmFudGVlIGZvciB0aGUgY29udGFpbmVyIHJlY2lwZVxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKi9cbiAgcHVibGljIGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhbnQoZ3JhbnRlZSwgJ2ltYWdlYnVpbGRlcjpHZXRDb250YWluZXJSZWNpcGUnKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcmVjaXBlIGlzIGEgQ29udGFpbmVyIFJlY2lwZVxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBfaXNDb250YWluZXJSZWNpcGUoKTogdGhpcyBpcyBJQ29udGFpbmVyUmVjaXBlIHtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgcmVjaXBlIGlzIGFuIEltYWdlIFJlY2lwZVxuICAgKlxuICAgKiBAaW50ZXJuYWxcbiAgICovXG4gIHB1YmxpYyBfaXNJbWFnZVJlY2lwZSgpOiB0aGlzIGlzIElJbWFnZVJlY2lwZSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBFQzIgSW1hZ2UgQnVpbGRlciBDb250YWluZXIgUmVjaXBlLlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2ltYWdlYnVpbGRlci9sYXRlc3QvdXNlcmd1aWRlL21hbmFnZS1yZWNpcGVzLmh0bWxcbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIENvbnRhaW5lclJlY2lwZSBleHRlbmRzIENvbnRhaW5lclJlY2lwZUJhc2Uge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1pbWFnZWJ1aWxkZXItYWxwaGEuQ29udGFpbmVyUmVjaXBlJztcblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIGNvbnRhaW5lciByZWNpcGUgZ2l2ZW4gaXRzIEFSTi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUNvbnRhaW5lclJlY2lwZUFybihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBjb250YWluZXJSZWNpcGVBcm46IHN0cmluZyk6IElDb250YWluZXJSZWNpcGUge1xuICAgIHJldHVybiB0aGlzLmZyb21Db250YWluZXJSZWNpcGVBdHRyaWJ1dGVzKHNjb3BlLCBpZCwgeyBjb250YWluZXJSZWNpcGVBcm4gfSk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiBhbiBleGlzdGluZyBjb250YWluZXIgcmVjaXBlIGdpdmVuIGl0cyBuYW1lLiBUaGUgcHJvdmlkZWQgbmFtZSBtdXN0IGJlIG5vcm1hbGl6ZWQgYnlcbiAgICogY29udmVydGluZyBhbGwgYWxwaGFiZXRpY2FsIGNoYXJhY3RlcnMgdG8gbG93ZXJjYXNlLCBhbmQgcmVwbGFjaW5nIGFsbCBzcGFjZXMgYW5kIHVuZGVyc2NvcmVzIHdpdGggaHlwaGVucy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUNvbnRhaW5lclJlY2lwZU5hbWUoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgY29udGFpbmVyUmVjaXBlTmFtZTogc3RyaW5nKTogSUNvbnRhaW5lclJlY2lwZSB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbUNvbnRhaW5lclJlY2lwZUF0dHJpYnV0ZXMoc2NvcGUsIGlkLCB7IGNvbnRhaW5lclJlY2lwZU5hbWUgfSk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIGNvbnRhaW5lciByZWNpcGUgYnkgcHJvdmlkaW5nIGl0cyBhdHRyaWJ1dGVzLiBJZiB0aGUgY29udGFpbmVyIHJlY2lwZSBuYW1lIGlzIHByb3ZpZGVkIGFzIGFuXG4gICAqIGF0dHJpYnV0ZSwgaXQgbXVzdCBiZSBub3JtYWxpemVkIGJ5IGNvbnZlcnRpbmcgYWxsIGFscGhhYmV0aWNhbCBjaGFyYWN0ZXJzIHRvIGxvd2VyY2FzZSwgYW5kIHJlcGxhY2luZyBhbGwgc3BhY2VzXG4gICAqIGFuZCB1bmRlcnNjb3JlcyB3aXRoIGh5cGhlbnMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Db250YWluZXJSZWNpcGVBdHRyaWJ1dGVzKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBhdHRyczogQ29udGFpbmVyUmVjaXBlQXR0cmlidXRlcyxcbiAgKTogSUNvbnRhaW5lclJlY2lwZSB7XG4gICAgaWYgKCFhdHRycy5jb250YWluZXJSZWNpcGVBcm4gJiYgIWF0dHJzLmNvbnRhaW5lclJlY2lwZU5hbWUpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAnZWl0aGVyIGVpdGhlciBjb250YWluZXJSZWNpcGVBcm4gb3IgY29udGFpbmVyUmVjaXBlTmFtZSBtdXN0IGJlIHByb3ZpZGVkIHRvIGltcG9ydCBhIGNvbnRhaW5lciByZWNpcGUnLFxuICAgICAgICBzY29wZSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgY29udGFpbmVyUmVjaXBlQXJuID1cbiAgICAgIGF0dHJzLmNvbnRhaW5lclJlY2lwZUFybiA/P1xuICAgICAgY2RrLlN0YWNrLm9mKHNjb3BlKS5mb3JtYXRBcm4oe1xuICAgICAgICBzZXJ2aWNlOiAnaW1hZ2VidWlsZGVyJyxcbiAgICAgICAgcmVzb3VyY2U6ICdjb250YWluZXItcmVjaXBlJyxcbiAgICAgICAgcmVzb3VyY2VOYW1lOiBgJHthdHRycy5jb250YWluZXJSZWNpcGVOYW1lfS8ke2F0dHJzLmNvbnRhaW5lclJlY2lwZVZlcnNpb24gPz8gTEFURVNUX1ZFUlNJT059YCxcbiAgICAgIH0pO1xuXG4gICAgY29uc3QgW2NvbnRhaW5lclJlY2lwZU5hbWUsIGNvbnRhaW5lclJlY2lwZVZlcnNpb25dID0gKCgpID0+IHtcbiAgICAgIGlmIChhdHRycy5jb250YWluZXJSZWNpcGVOYW1lKSB7XG4gICAgICAgIHJldHVybiBbYXR0cnMuY29udGFpbmVyUmVjaXBlTmFtZSwgYXR0cnMuY29udGFpbmVyUmVjaXBlVmVyc2lvbiA/PyBMQVRFU1RfVkVSU0lPTl07XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGNvbnRhaW5lclJlY2lwZU5hbWVWZXJzaW9uID0gY2RrLlN0YWNrLm9mKHNjb3BlKS5zcGxpdEFybihcbiAgICAgICAgY29udGFpbmVyUmVjaXBlQXJuLFxuICAgICAgICBjZGsuQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUsXG4gICAgICApLnJlc291cmNlTmFtZSE7XG5cbiAgICAgIGNvbnN0IGNvbnRhaW5lclJlY2lwZU5hbWVWZXJzaW9uU3BsaXQgPSBjZGsuRm4uc3BsaXQoJy8nLCBjb250YWluZXJSZWNpcGVOYW1lVmVyc2lvbik7XG4gICAgICByZXR1cm4gW2Nkay5Gbi5zZWxlY3QoMCwgY29udGFpbmVyUmVjaXBlTmFtZVZlcnNpb25TcGxpdCksIGNkay5Gbi5zZWxlY3QoMSwgY29udGFpbmVyUmVjaXBlTmFtZVZlcnNpb25TcGxpdCldO1xuICAgIH0pKCk7XG5cbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBDb250YWluZXJSZWNpcGVCYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBjb250YWluZXJSZWNpcGVBcm4gPSBjb250YWluZXJSZWNpcGVBcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY29udGFpbmVyUmVjaXBlTmFtZSA9IGNvbnRhaW5lclJlY2lwZU5hbWU7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgY29udGFpbmVyUmVjaXBlVmVyc2lvbiA9IGNvbnRhaW5lclJlY2lwZVZlcnNpb247XG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBJbXBvcnQoc2NvcGUsIGlkKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gb2JqZWN0IGlzIGEgQ29udGFpbmVyUmVjaXBlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpc0NvbnRhaW5lclJlY2lwZSh4OiBhbnkpOiB4IGlzIENvbnRhaW5lclJlY2lwZSB7XG4gICAgcmV0dXJuIHggIT09IG51bGwgJiYgdHlwZW9mIHggPT09ICdvYmplY3QnICYmIENPTlRBSU5FUl9SRUNJUEVfU1lNQk9MIGluIHg7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgY29udGFpbmVyIHJlY2lwZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvbnRhaW5lclJlY2lwZUFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgY29udGFpbmVyIHJlY2lwZVxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGNvbnRhaW5lclJlY2lwZU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHZlcnNpb24gb2YgdGhlIGNvbnRhaW5lciByZWNpcGVcbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBjb250YWluZXJSZWNpcGVWZXJzaW9uOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBpbnN0YW5jZUJsb2NrRGV2aWNlczogZWMyLkJsb2NrRGV2aWNlW10gPSBbXTtcblxuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IENvbnRhaW5lclJlY2lwZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBwaHlzaWNhbE5hbWU6XG4gICAgICAgIHByb3BzLmNvbnRhaW5lclJlY2lwZU5hbWUgPz9cbiAgICAgICAgY2RrLkxhenkuc3RyaW5nKHtcbiAgICAgICAgICBwcm9kdWNlOiAoKSA9PlxuICAgICAgICAgICAgY2RrLk5hbWVzLnVuaXF1ZVJlc291cmNlTmFtZSh0aGlzLCB7XG4gICAgICAgICAgICAgIG1heExlbmd0aDogMTI4LFxuICAgICAgICAgICAgICBzZXBhcmF0b3I6ICctJyxcbiAgICAgICAgICAgICAgYWxsb3dlZFNwZWNpYWxDaGFyYWN0ZXJzOiAnLScsXG4gICAgICAgICAgICB9KS50b0xvd2VyQ2FzZSgpLCAvLyBFbmZvcmNlIGxvd2VyY2FzZSBmb3IgdGhlIGF1dG8tZ2VuZXJhdGVkIGZhbGxiYWNrXG4gICAgICAgIH0pLFxuICAgIH0pO1xuICAgIC8vIEVuaGFuY2VkIENESyBBbmFseXRpY3MgVGVsZW1ldHJ5XG4gICAgYWRkQ29uc3RydWN0TWV0YWRhdGEodGhpcywgcHJvcHMpO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsIENPTlRBSU5FUl9SRUNJUEVfU1lNQk9MLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG4gICAgdGhpcy52YWxpZGF0ZUNvbnRhaW5lclJlY2lwZU5hbWUoKTtcblxuICAgIHRoaXMuYWRkSW5zdGFuY2VCbG9ja0RldmljZSguLi4ocHJvcHMuaW5zdGFuY2VCbG9ja0RldmljZXMgPz8gW10pKTtcblxuICAgIGNvbnN0IGNvbXBvbmVudHM6IENmbkNvbnRhaW5lclJlY2lwZS5Db21wb25lbnRDb25maWd1cmF0aW9uUHJvcGVydHlbXSB8IHVuZGVmaW5lZCA9IHByb3BzLmNvbXBvbmVudHM/Lm1hcChcbiAgICAgIChjb21wb25lbnQpID0+ICh7XG4gICAgICAgIGNvbXBvbmVudEFybjogY29tcG9uZW50LmNvbXBvbmVudC5jb21wb25lbnRBcm4sXG4gICAgICAgIC4uLihjb21wb25lbnQucGFyYW1ldGVycyAmJiB7XG4gICAgICAgICAgcGFyYW1ldGVyczogT2JqZWN0LmVudHJpZXMoY29tcG9uZW50LnBhcmFtZXRlcnMpLm1hcChcbiAgICAgICAgICAgIChbbmFtZSwgcGFyYW1dKTogQ2ZuQ29udGFpbmVyUmVjaXBlLkNvbXBvbmVudFBhcmFtZXRlclByb3BlcnR5ID0+ICh7XG4gICAgICAgICAgICAgIG5hbWUsXG4gICAgICAgICAgICAgIHZhbHVlOiBwYXJhbS52YWx1ZSxcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICksXG4gICAgICAgIH0pLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIGNvbnN0IGRvY2tlcmZpbGUgPVxuICAgICAgcHJvcHMuZG9ja2VyZmlsZSA/P1xuICAgICAgRG9ja2VyZmlsZURhdGEuZnJvbUlubGluZShcbiAgICAgICAgJ0ZST00ge3t7IGltYWdlYnVpbGRlcjpwYXJlbnRJbWFnZSB9fX1cXG57e3sgaW1hZ2VidWlsZGVyOmVudmlyb25tZW50cyB9fX1cXG57e3sgaW1hZ2VidWlsZGVyOmNvbXBvbmVudHMgfX19JyxcbiAgICAgICk7XG5cbiAgICBjb25zdCBjb250YWluZXJSZWNpcGVWZXJzaW9uID0gcHJvcHMuY29udGFpbmVyUmVjaXBlVmVyc2lvbiA/PyBERUZBVUxUX1JFQ0lQRV9WRVJTSU9OO1xuICAgIGNvbnN0IGNvbnRhaW5lclJlY2lwZSA9IG5ldyBDZm5Db250YWluZXJSZWNpcGUodGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgbmFtZTogdGhpcy5waHlzaWNhbE5hbWUsXG4gICAgICB2ZXJzaW9uOiBjb250YWluZXJSZWNpcGVWZXJzaW9uLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgcGFyZW50SW1hZ2U6IHByb3BzLmJhc2VJbWFnZS5pbWFnZSxcbiAgICAgIGNvbnRhaW5lclR5cGU6IENvbnRhaW5lclR5cGUuRE9DS0VSLFxuICAgICAgdGFyZ2V0UmVwb3NpdG9yeToge1xuICAgICAgICByZXBvc2l0b3J5TmFtZTogcHJvcHMudGFyZ2V0UmVwb3NpdG9yeS5yZXBvc2l0b3J5TmFtZSxcbiAgICAgICAgc2VydmljZTogcHJvcHMudGFyZ2V0UmVwb3NpdG9yeS5zZXJ2aWNlLFxuICAgICAgfSxcbiAgICAgIHBsYXRmb3JtT3ZlcnJpZGU6IHByb3BzLm9zVmVyc2lvbj8ucGxhdGZvcm0sXG4gICAgICBpbWFnZU9zVmVyc2lvbk92ZXJyaWRlOiBwcm9wcy5vc1ZlcnNpb24/Lm9zVmVyc2lvbixcbiAgICAgIGttc0tleUlkOiBwcm9wcy5rbXNLZXk/LmtleUFybixcbiAgICAgIGluc3RhbmNlQ29uZmlndXJhdGlvbjogY2RrLkxhenkuYW55KHsgcHJvZHVjZTogKCkgPT4gdGhpcy5idWlsZEluc3RhbmNlQ29uZmlndXJhdGlvbihwcm9wcykgfSksXG4gICAgICB3b3JraW5nRGlyZWN0b3J5OiBwcm9wcy53b3JraW5nRGlyZWN0b3J5LFxuICAgICAgdGFnczogcHJvcHMudGFncyxcbiAgICAgIC4uLmRvY2tlcmZpbGUucmVuZGVyKCksXG4gICAgICAuLi4oY29tcG9uZW50cz8ubGVuZ3RoICYmIHsgY29tcG9uZW50cyB9KSxcbiAgICB9KTtcblxuICAgIHRoaXMuY29udGFpbmVyUmVjaXBlTmFtZSA9IHRoaXMuZ2V0UmVzb3VyY2VOYW1lQXR0cmlidXRlKGNvbnRhaW5lclJlY2lwZS5hdHRyTmFtZSk7XG4gICAgdGhpcy5jb250YWluZXJSZWNpcGVBcm4gPSB0aGlzLmdldFJlc291cmNlQXJuQXR0cmlidXRlKGNvbnRhaW5lclJlY2lwZS5hdHRyQXJuLCB7XG4gICAgICBzZXJ2aWNlOiAnaW1hZ2VidWlsZGVyJyxcbiAgICAgIHJlc291cmNlOiAnY29udGFpbmVyLXJlY2lwZScsXG4gICAgICByZXNvdXJjZU5hbWU6IGAke3RoaXMucGh5c2ljYWxOYW1lfS8ke2NvbnRhaW5lclJlY2lwZVZlcnNpb259YCxcbiAgICB9KTtcbiAgICB0aGlzLmNvbnRhaW5lclJlY2lwZVZlcnNpb24gPSBjb250YWluZXJSZWNpcGUuZ2V0QXR0KCdWZXJzaW9uJykudG9TdHJpbmcoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGJsb2NrIGRldmljZXMgdG8gYXR0YWNoIHRvIHRoZSBpbnN0YW5jZSB1c2VkIGZvciBidWlsZGluZywgdGVzdGluZywgYW5kIGRpc3RyaWJ1dGluZyB0aGUgY29udGFpbmVyIGltYWdlLlxuICAgKlxuICAgKiBAcGFyYW0gaW5zdGFuY2VCbG9ja0RldmljZXMgLSBUaGUgbGlzdCBvZiBibG9jayBkZXZpY2VzIHRvIGF0dGFjaFxuICAgKi9cbiAgQE1ldGhvZE1ldGFkYXRhKClcbiAgcHVibGljIGFkZEluc3RhbmNlQmxvY2tEZXZpY2UoLi4uaW5zdGFuY2VCbG9ja0RldmljZXM6IGVjMi5CbG9ja0RldmljZVtdKTogdm9pZCB7XG4gICAgdGhpcy5pbnN0YW5jZUJsb2NrRGV2aWNlcy5wdXNoKC4uLmluc3RhbmNlQmxvY2tEZXZpY2VzKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZW5kZXJzIHRoZSBibG9jayBkZXZpY2VzIHByb3ZpZGVkIGFzIGlucHV0IHRvIHRoZSBjb25zdHJ1Y3QsIGludG8gdGhlIGJsb2NrIGRldmljZSBtYXBwaW5nIHN0cnVjdHVyZSB0aGF0XG4gICAqIENmbkNvbnRhaW5lclJlY2lwZSBleHBlY3RzIHRvIHJlY2VpdmUuXG4gICAqXG4gICAqIFRoaXMgaXMgcmVuZGVyZWQgYXQgc3ludGhlc2lzIHRpbWUsIGFzIHVzZXJzIGNhbiBhZGQgYWRkaXRpb25hbCBibG9jayBkZXZpY2VzIHdpdGggYGFkZEluc3RhbmNlQmxvY2tEZXZpY2VgLCBhZnRlclxuICAgKiB0aGUgY29uc3RydWN0IGhhcyBiZWVuIGluc3RhbnRpYXRlZC5cbiAgICpcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgcmVuZGVyQmxvY2tEZXZpY2VzKCk6IENmbkNvbnRhaW5lclJlY2lwZS5JbnN0YW5jZUJsb2NrRGV2aWNlTWFwcGluZ1Byb3BlcnR5W10gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGJsb2NrRGV2aWNlcyA9IHRoaXMuaW5zdGFuY2VCbG9ja0RldmljZXMubWFwKFxuICAgICAgKGJsb2NrRGV2aWNlKTogQ2ZuQ29udGFpbmVyUmVjaXBlLkluc3RhbmNlQmxvY2tEZXZpY2VNYXBwaW5nUHJvcGVydHkgPT4ge1xuICAgICAgICBjb25zdCBlYnNEZXZpY2UgPSBibG9ja0RldmljZS52b2x1bWUuZWJzRGV2aWNlO1xuICAgICAgICBjb25zdCBlYnM6IENmbkNvbnRhaW5lclJlY2lwZS5FYnNJbnN0YW5jZUJsb2NrRGV2aWNlU3BlY2lmaWNhdGlvblByb3BlcnR5ID0ge1xuICAgICAgICAgIC4uLihlYnNEZXZpY2U/LmRlbGV0ZU9uVGVybWluYXRpb24gIT09IHVuZGVmaW5lZCAmJiB7IGRlbGV0ZU9uVGVybWluYXRpb246IGVic0RldmljZS5kZWxldGVPblRlcm1pbmF0aW9uIH0pLFxuICAgICAgICAgIC4uLihlYnNEZXZpY2U/LmVuY3J5cHRlZCAhPT0gdW5kZWZpbmVkICYmIHsgZW5jcnlwdGVkOiBlYnNEZXZpY2UuZW5jcnlwdGVkIH0pLFxuICAgICAgICAgIC4uLihlYnNEZXZpY2U/LmlvcHMgIT09IHVuZGVmaW5lZCAmJiB7IGlvcHM6IGVic0RldmljZS5pb3BzIH0pLFxuICAgICAgICAgIC4uLihlYnNEZXZpY2U/Lmttc0tleSAhPT0gdW5kZWZpbmVkICYmIHsga21zS2V5SWQ6IGVic0RldmljZS5rbXNLZXkua2V5QXJuIH0pLFxuICAgICAgICAgIC4uLihlYnNEZXZpY2U/LnNuYXBzaG90SWQgIT09IHVuZGVmaW5lZCAmJiB7IHNuYXBzaG90SWQ6IGVic0RldmljZS5zbmFwc2hvdElkIH0pLFxuICAgICAgICAgIC4uLihlYnNEZXZpY2U/LnRocm91Z2hwdXQgIT09IHVuZGVmaW5lZCAmJiB7IHRocm91Z2hwdXQ6IGVic0RldmljZS50aHJvdWdocHV0IH0pLFxuICAgICAgICAgIC4uLihlYnNEZXZpY2U/LnZvbHVtZVNpemUgIT09IHVuZGVmaW5lZCAmJiB7IHZvbHVtZVNpemU6IGVic0RldmljZS52b2x1bWVTaXplIH0pLFxuICAgICAgICAgIC4uLihlYnNEZXZpY2U/LnZvbHVtZVR5cGUgIT09IHVuZGVmaW5lZCAmJiB7IHZvbHVtZVR5cGU6IGVic0RldmljZS52b2x1bWVUeXBlIH0pLFxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IG1hcHBpbmdFbmFibGVkID0gYmxvY2tEZXZpY2UubWFwcGluZ0VuYWJsZWQgPz8gdHJ1ZTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBkZXZpY2VOYW1lOiBibG9ja0RldmljZS5kZXZpY2VOYW1lLFxuICAgICAgICAgIHZpcnR1YWxOYW1lOiBibG9ja0RldmljZS52b2x1bWUudmlydHVhbE5hbWUsXG4gICAgICAgICAgLi4uKCFtYXBwaW5nRW5hYmxlZCAmJiB7IG5vRGV2aWNlOiAnJyB9KSxcbiAgICAgICAgICAuLi4oT2JqZWN0LmtleXMoZWJzKS5sZW5ndGggJiYgeyBlYnMgfSksXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICk7XG5cbiAgICByZXR1cm4gYmxvY2tEZXZpY2VzLmxlbmd0aCA/IGJsb2NrRGV2aWNlcyA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZXMgdGhlIGluc3RhbmNlIGNvbmZpZ3VyYXRpb24gcHJvcGVydHkgaW50byB0aGUgYEluc3RhbmNlQ29uZmlndXJhdGlvbmAgdHlwZSBpbiB0aGUgIENsb3VkRm9ybWF0aW9uIEwxXG4gICAqIGRlZmluaXRpb24uXG4gICAqXG4gICAqIEBwYXJhbSBwcm9wcyBUaGUgcHJvcHMgcGFzc2VkIGFzIGlucHV0IHRvIHRoZSBjb25zdHJ1Y3RcbiAgICogQHByaXZhdGVcbiAgICovXG4gIHByaXZhdGUgYnVpbGRJbnN0YW5jZUNvbmZpZ3VyYXRpb24oXG4gICAgcHJvcHM6IENvbnRhaW5lclJlY2lwZVByb3BzLFxuICApOiBDZm5Db250YWluZXJSZWNpcGUuSW5zdGFuY2VDb25maWd1cmF0aW9uUHJvcGVydHkgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGJsb2NrRGV2aWNlcyA9IHRoaXMucmVuZGVyQmxvY2tEZXZpY2VzKCk7XG5cbiAgICBjb25zdCBpbnN0YW5jZUNvbmZpZ3VyYXRpb246IENmbkNvbnRhaW5lclJlY2lwZS5JbnN0YW5jZUNvbmZpZ3VyYXRpb25Qcm9wZXJ0eSA9IHtcbiAgICAgIC4uLihibG9ja0RldmljZXM/Lmxlbmd0aCAmJiB7IGJsb2NrRGV2aWNlTWFwcGluZ3M6IGJsb2NrRGV2aWNlcyB9KSxcbiAgICAgIC4uLihwcm9wcy5pbnN0YW5jZUltYWdlICE9PSB1bmRlZmluZWQgJiYgeyBpbWFnZTogcHJvcHMuaW5zdGFuY2VJbWFnZS5pbWFnZSB9KSxcbiAgICB9O1xuXG4gICAgcmV0dXJuIE9iamVjdC5rZXlzKGluc3RhbmNlQ29uZmlndXJhdGlvbikubGVuZ3RoID8gaW5zdGFuY2VDb25maWd1cmF0aW9uIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZUNvbnRhaW5lclJlY2lwZU5hbWUoKSB7XG4gICAgaWYgKGNkay5Ub2tlbi5pc1VucmVzb2x2ZWQodGhpcy5waHlzaWNhbE5hbWUpKSB7XG4gICAgICByZXR1cm47IC8vIENhbm5vdCB2YWxpZGF0ZSB1bnJlc29sdmVkIHRva2VucywgZ2l2ZW4gdGhlaXIgYWN0dWFsIHZhbHVlIGlzIHJlbmRlcmVkIGF0IGRlcGxveW1lbnQgdGltZVxuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZS5sZW5ndGggPiAxMjgpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBgdGhlIGNvbnRhaW5lclJlY2lwZU5hbWUgY2Fubm90IGJlIGxvbmdlciB0aGFuIDEyOCBjaGFyYWN0ZXJzLCBnb3Q6ICcke3RoaXMucGh5c2ljYWxOYW1lfSdgLFxuICAgICAgICB0aGlzLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waHlzaWNhbE5hbWUuaW5jbHVkZXMoJyAnKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoYHRoZSBjb250YWluZXJSZWNpcGVOYW1lIGNhbm5vdCBjb250YWluIHNwYWNlcywgZ290OiAnJHt0aGlzLnBoeXNpY2FsTmFtZX0nYCwgdGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGh5c2ljYWxOYW1lLmluY2x1ZGVzKCdfJykpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICBgdGhlIGNvbnRhaW5lclJlY2lwZU5hbWUgY2Fubm90IGNvbnRhaW4gdW5kZXJzY29yZXMsIGdvdDogJyR7dGhpcy5waHlzaWNhbE5hbWV9J2AsXG4gICAgICAgIHRoaXMsXG4gICAgICApO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZSAhPT0gdGhpcy5waHlzaWNhbE5hbWUudG9Mb3dlckNhc2UoKSkge1xuICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoYHRoZSBjb250YWluZXJSZWNpcGVOYW1lIG11c3QgYmUgbG93ZXJjYXNlLCBnb3Q6ICcke3RoaXMucGh5c2ljYWxOYW1lfSdgLCB0aGlzKTtcbiAgICB9XG4gIH1cbn1cbiJdfQ==
@@ -313,6 +313,7 @@ declare abstract class DistributionConfigurationBase extends cdk.Resource implem
313
313
  abstract readonly distributionConfigurationName: string;
314
314
  /**
315
315
  * Grant custom actions to the given grantee for the distribution configuration
316
+ * [disable-awslint:no-grants]
316
317
  *
317
318
  * @param grantee The principal
318
319
  * @param actions The list of actions
@@ -320,6 +321,7 @@ declare abstract class DistributionConfigurationBase extends cdk.Resource implem
320
321
  grant(grantee: iam.IGrantable, ...actions: string[]): iam.Grant;
321
322
  /**
322
323
  * Grant read permissions to the given grantee for the distribution configuration
324
+ * [disable-awslint:no-grants]
323
325
  *
324
326
  * @param grantee The principal
325
327
  */
@@ -51,6 +51,7 @@ const MIN_PARALLEL_LAUNCHES = 6;
51
51
  class DistributionConfigurationBase extends cdk.Resource {
52
52
  /**
53
53
  * Grant custom actions to the given grantee for the distribution configuration
54
+ * [disable-awslint:no-grants]
54
55
  *
55
56
  * @param grantee The principal
56
57
  * @param actions The list of actions
@@ -65,6 +66,7 @@ class DistributionConfigurationBase extends cdk.Resource {
65
66
  }
66
67
  /**
67
68
  * Grant read permissions to the given grantee for the distribution configuration
69
+ * [disable-awslint:no-grants]
68
70
  *
69
71
  * @param grantee The principal
70
72
  */
@@ -86,7 +88,7 @@ var RepositoryService;
86
88
  * A container repository used to distribute container images in EC2 Image Builder
87
89
  */
88
90
  class Repository {
89
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.Repository", version: "2.234.0-alpha.0" };
91
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.Repository", version: "2.235.0-alpha.0" };
90
92
  /**
91
93
  * The ECR repository to use as the target container repository
92
94
  *
@@ -127,7 +129,7 @@ let DistributionConfiguration = (() => {
127
129
  DistributionConfiguration = _classThis = _classDescriptor.value;
128
130
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
129
131
  }
130
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.DistributionConfiguration", version: "2.234.0-alpha.0" };
132
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-imagebuilder-alpha.DistributionConfiguration", version: "2.235.0-alpha.0" };
131
133
  /** Uniquely identifies this class. */
132
134
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-imagebuilder-alpha.DistributionConfiguration';
133
135
  /**
@@ -421,4 +423,4 @@ let DistributionConfiguration = (() => {
421
423
  return DistributionConfiguration = _classThis;
422
424
  })();
423
425
  exports.DistributionConfiguration = DistributionConfiguration;
424
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzdHJpYnV0aW9uLWNvbmZpZ3VyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkaXN0cmlidXRpb24tY29uZmlndXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQ0FBbUM7QUFHbkMsMkNBQTJDO0FBQzNDLG1FQUE0RTtBQUc1RSw4RUFBOEY7QUFDOUYsMEVBQTBFO0FBRzFFLE1BQU0saUNBQWlDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQywyREFBMkQsQ0FBQyxDQUFDO0FBRWxILHFEQUFxRDtBQUNyRCxNQUFNLHFCQUFxQixHQUFHLENBQUMsQ0FBQztBQTBVaEM7O0dBRUc7QUFDSCxNQUFlLDZCQUE4QixTQUFRLEdBQUcsQ0FBQyxRQUFRO0lBVy9EOzs7OztPQUtHO0lBQ0ksS0FBSyxDQUFDLE9BQXVCLEVBQUUsR0FBRyxPQUFpQjtRQUN4RCxPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDO1lBQzlCLE9BQU87WUFDUCxPQUFPO1lBQ1AsWUFBWSxFQUFFLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDO1lBQ2pELEtBQUssRUFBRSxJQUFJO1NBQ1osQ0FBQyxDQUFDO0tBQ0o7SUFFRDs7OztPQUlHO0lBQ0ksU0FBUyxDQUFDLE9BQXVCO1FBQ3RDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsMkNBQTJDLENBQUMsQ0FBQztLQUN6RTtDQUNGO0FBRUQ7O0dBRUc7QUFDSCxJQUFZLGlCQUtYO0FBTEQsV0FBWSxpQkFBaUI7SUFDM0I7O09BRUc7SUFDSCxnQ0FBVyxDQUFBO0FBQ2IsQ0FBQyxFQUxXLGlCQUFpQixpQ0FBakIsaUJBQWlCLFFBSzVCO0FBRUQ7O0dBRUc7QUFDSCxNQUFzQixVQUFVOztJQUM5Qjs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLE9BQU8sQ0FBQyxVQUEyQjtRQUMvQyxNQUFNLE1BQU8sU0FB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QStCLENBQ3JDLGVBQWdDO1lBRWhDLE1BQU0sMEJBQTBCLEdBQUcsZUFBZSxDQUFDLGFBQWEsRUFBRSxHQUFHLENBQ25FLENBQUMseUJBQXlCLEVBQWtFLEVBQUUsQ0FBQyxDQUFDO2dCQUM5RixZQUFZLEVBQUUseUJBQXlCLENBQUMsVUFBVTtnQkFDbEQsUUFBUSxFQUFFLHlCQUF5QixDQUFDLFFBQVE7Z0JBQzVDLGFBQWEsRUFBRSx5QkFBeUIsQ0FBQyxTQUFTLENBQUMsYUFBYTthQUNqRSxDQUFDLENBQ0gsQ0FBQztZQUVGLE9BQU8sMEJBQTBCLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1NBQ3BGOztZQXZXVSx1REFBeUI7Ozs7O0FBQXpCLDhEQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgKiBhcyBlYzIgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjMic7XG5pbXBvcnQgKiBhcyBlY3IgZnJvbSAnYXdzLWNkay1saWIvYXdzLWVjcic7XG5pbXBvcnQgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBDZm5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWltYWdlYnVpbGRlcic7XG5pbXBvcnQgKiBhcyBrbXMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWttcyc7XG5pbXBvcnQgKiBhcyBzc20gZnJvbSAnYXdzLWNkay1saWIvYXdzLXNzbSc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSwgTWV0aG9kTWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5cbmNvbnN0IERJU1RSSUJVVElPTl9DT05GSUdVUkFUSU9OX1NZTUJPTCA9IFN5bWJvbC5mb3IoJ0Bhd3MtY2RrL2F3cy1pbWFnZWJ1aWxkZXItYWxwaGEuRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbicpO1xuXG4vLyBGYXN0IExhdW5jaCByZXF1aXJlcyBhdCBsZWFzdCA2IHBhcmFsbGVsIGxhdW5jaGVzLlxuY29uc3QgTUlOX1BBUkFMTEVMX0xBVU5DSEVTID0gNjtcblxuLyoqXG4gKiBBbiBFQzIgSW1hZ2UgQnVpbGRlciBEaXN0cmlidXRpb24gQ29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbiBleHRlbmRzIGNkay5JUmVzb3VyY2Uge1xuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbkFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbk5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogR3JhbnQgY3VzdG9tIGFjdGlvbnMgdG8gdGhlIGdpdmVuIGdyYW50ZWUgZm9yIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqIEBwYXJhbSBhY3Rpb25zIFRoZSBsaXN0IG9mIGFjdGlvbnNcbiAgICovXG4gIGdyYW50KGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlLCAuLi5hY3Rpb25zOiBzdHJpbmdbXSk6IGlhbS5HcmFudDtcblxuICAvKipcbiAgICogR3JhbnQgcmVhZCBwZXJtaXNzaW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWxcbiAgICovXG4gIGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudDtcbn1cblxuLyoqXG4gKiBUaGUgbGF1bmNoIHBlcm1pc3Npb25zIGZvciB0aGUgQU1JLCBkZWZpbmluZyB3aGljaCBwcmluY2lwYWxzIGFyZSBhbGxvd2VkIHRvIGFjY2VzcyB0aGUgQU1JXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQW1pTGF1bmNoUGVybWlzc2lvbiB7XG4gIC8qKlxuICAgKiBUaGUgQVJOcyBmb3IgdGhlIEFXUyBPcmdhbml6YXRpb25zIG9yZ2FuaXphdGlvbmFsIHVuaXRzIHRvIHNoYXJlIHRoZSBBTUkgd2l0aFxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBvcmdhbml6YXRpb25hbFVuaXRBcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBBUk5zIGZvciB0aGUgQVdTIE9yZ2FuaXphdGlvbiB0aGF0IHlvdSB3YW50IHRvIHNoYXJlIHRoZSBBTUkgd2l0aFxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBvcmdhbml6YXRpb25Bcm5zPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gbWFrZSB0aGUgQU1JIHB1YmxpYy4gQmxvY2sgcHVibGljIGFjY2VzcyBmb3IgQU1JcyBtdXN0IGJlIGRpc2FibGVkIHRvIG1ha2UgdGhlIEFNSSBwdWJsaWMuXG4gICAqXG4gICAqIFdBUk5JTkc6IE1ha2luZyBhbiBBTUkgcHVibGljIGV4cG9zZXMgaXQgdG8gYW55IEFXUyBhY2NvdW50IGdsb2JhbGx5LlxuICAgKiAgRW5zdXJlIHRoZSBBTUkgZG9lcyBub3QgY29udGFpbjpcbiAgICogIC0gU2Vuc2l0aXZlIGRhdGEgb3IgY3JlZGVudGlhbHNcbiAgICogIC0gUHJvcHJpZXRhcnkgc29mdHdhcmUgb3IgY29uZmlndXJhdGlvbnNcbiAgICogIC0gSW50ZXJuYWwgbmV0d29yayBpbmZvcm1hdGlvbiBvciBzZWN1cml0eSBzZXR0aW5nc1xuICAgKlxuICAgKiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBibG9ja2luZyBwdWJsaWMgYWNjZXNzIGZvciBBTUlzLCBzZWU6IFtVbmRlcnN0YW5kIGJsb2NrIHB1YmxpYyBhY2Nlc3MgZm9yIEFNSXNdKGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BV1NFQzIvbGF0ZXN0L1VzZXJHdWlkZS9ibG9jay1wdWJsaWMtYWNjZXNzLXRvLWFtaXMuaHRtbClcbiAgICpcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGlzUHVibGljVXNlckdyb3VwPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIEFXUyBhY2NvdW50IElEcyB0byBzaGFyZSB0aGUgQU1JIHdpdGhcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgYWNjb3VudElkcz86IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSBTU00gcGFyYW1ldGVycyB0byBjcmVhdGUgb3IgdXBkYXRlIGZvciB0aGUgZGlzdHJpYnV0ZWQgQU1Jc1xuICovXG5leHBvcnQgaW50ZXJmYWNlIFNTTVBhcmFtZXRlckNvbmZpZ3VyYXRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBBV1MgYWNjb3VudCBJRCB0aGF0IHdpbGwgb3duIHRoZSBTU00gcGFyYW1ldGVyIGluIHRoZSBnaXZlbiByZWdpb24uIFRoaXMgbXVzdCBiZSBvbmUgb2YgdGhlIHRhcmdldCBhY2NvdW50c1xuICAgKiB0aGF0IHdhcyBpbmNsdWRlZCBpbiB0aGUgbGlzdCBvZiBBTUkgZGlzdHJpYnV0aW9uIHRhcmdldCBhY2NvdW50c1xuICAgKlxuICAgKiBAZGVmYXVsdCBUaGUgY3VycmVudCBhY2NvdW50IGlzIHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IGFtaUFjY291bnQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkYXRhIHR5cGUgb2YgdGhlIFNTTSBwYXJhbWV0ZXJcbiAgICpcbiAgICogQGRlZmF1bHQgc3NtLlBhcmFtZXRlckRhdGFUeXBlLkFXU19FQzJfSU1BR0VcbiAgICovXG4gIHJlYWRvbmx5IGRhdGFUeXBlPzogc3NtLlBhcmFtZXRlckRhdGFUeXBlO1xuXG4gIC8qKlxuICAgKiBUaGUgU1NNIHBhcmFtZXRlciB0byBjcmVhdGUgb3IgdXBkYXRlXG4gICAqL1xuICByZWFkb25seSBwYXJhbWV0ZXI6IHNzbS5JU3RyaW5nUGFyYW1ldGVyO1xufVxuXG4vKipcbiAqIFRoZSBsYXVuY2ggdGVtcGxhdGUgdG8gYXBwbHkgdGhlIGRpc3RyaWJ1dGVkIEFNSSB0b1xuICovXG5leHBvcnQgaW50ZXJmYWNlIExhdW5jaFRlbXBsYXRlQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgbGF1bmNoIHRlbXBsYXRlIHRvIGFwcGx5IHRoZSBkaXN0cmlidXRlZCBBTUkgdG8uIEEgbmV3IGxhdW5jaCB0ZW1wbGF0ZSB2ZXJzaW9uIHdpbGwgYmUgY3JlYXRlZCBmb3IgdGhlXG4gICAqIHByb3ZpZGVkIGxhdW5jaCB0ZW1wbGF0ZSB3aXRoIHRoZSBkaXN0cmlidXRlZCBBTUkgYXBwbGllZC5cbiAgICpcbiAgICogKk5vdGU6KiBUaGUgbGF1bmNoIHRlbXBsYXRlIHNob3VsZCBleHBvc2UgYSBgbGF1bmNoVGVtcGxhdGVJZGAuIFRlbXBsYXRlc1xuICAgKiBpbXBvcnRlZCBieSBuYW1lIG9ubHkgYXJlIG5vdCBzdXBwb3J0ZWQuXG4gICAqXG4gICAqL1xuICByZWFkb25seSBsYXVuY2hUZW1wbGF0ZTogZWMyLklMYXVuY2hUZW1wbGF0ZTtcblxuICAvKipcbiAgICogVGhlIEFXUyBhY2NvdW50IElEIHRoYXQgb3ducyB0aGUgbGF1bmNoIHRlbXBsYXRlXG4gICAqXG4gICAqIEBkZWZhdWx0IFRoZSBjdXJyZW50IGFjY291bnQgaXMgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgYWNjb3VudElkPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBXaGV0aGVyIHRvIHNldCB0aGUgbmV3IGxhdW5jaCB0ZW1wbGF0ZSB2ZXJzaW9uIHRoYXQgaXMgY3JlYXRlZCBhcyB0aGUgZGVmYXVsdCBsYXVuY2ggdGVtcGxhdGUgdmVyc2lvbi4gQWZ0ZXJcbiAgICogY3JlYXRpb24gb2YgdGhlIGxhdW5jaCB0ZW1wbGF0ZSB2ZXJzaW9uIGNvbnRhaW5pbmcgdGhlIGRpc3RyaWJ1dGVkIEFNSSwgaXQgd2lsbCBiZSBhdXRvbWF0aWNhbGx5IHNldCBhcyB0aGVcbiAgICogZGVmYXVsdCB2ZXJzaW9uIGZvciB0aGUgbGF1bmNoIHRlbXBsYXRlLlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgc2V0RGVmYXVsdFZlcnNpb24/OiBib29sZWFuO1xufVxuXG4vKipcbiAqIFRoZSBFQzIgRmFzdCBMYXVuY2ggY29uZmlndXJhdGlvbiB0byB1c2UgZm9yIHRoZSBXaW5kb3dzIEFNSVxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZhc3RMYXVuY2hDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gZW5hYmxlIGZhc3QgbGF1bmNoIGZvciB0aGUgQU1JXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBlbmFibGVkPzogYm9vbGVhbjtcblxuICAvKipcbiAgICogVGhlIGxhdW5jaCB0ZW1wbGF0ZSB0aGF0IHRoZSBmYXN0LWxhdW5jaCBlbmFibGVkIFdpbmRvd3MgQU1JIHVzZXMgd2hlbiBpdCBsYXVuY2hlcyBXaW5kb3dzIGluc3RhbmNlcyB0byBjcmVhdGVcbiAgICogcHJlLXByb3Zpc2lvbmVkIHNuYXBzaG90c1xuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBsYXVuY2hUZW1wbGF0ZT86IGVjMi5JTGF1bmNoVGVtcGxhdGU7XG5cbiAgLyoqXG4gICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBwYXJhbGxlbCBpbnN0YW5jZXMgdGhhdCBhcmUgbGF1bmNoZWQgZm9yIGNyZWF0aW5nIHJlc291cmNlc1xuICAgKlxuICAgKiBAZGVmYXVsdCBBIG1heGltdW0gb2YgNiBpbnN0YW5jZXMgYXJlIGxhdW5jaGVkIGluIHBhcmFsbGVsXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9FbmFibGVGYXN0TGF1bmNoLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IG1heFBhcmFsbGVsTGF1bmNoZXM/OiBudW1iZXI7XG5cbiAgLyoqXG4gICAqIFRoZSBudW1iZXIgb2YgcHJlLXByb3Zpc2lvbmVkIHNuYXBzaG90cyB0byBrZWVwIG9uIGhhbmQgZm9yIGEgZmFzdC1sYXVuY2ggZW5hYmxlZCBXaW5kb3dzIEFNSVxuICAgKlxuICAgKiBAZGVmYXVsdCAxMCBzbmFwc2hvdHMgYXJlIGtlcHQgcHJlLXByb3Zpc2lvbmVkXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9FbmFibGVGYXN0TGF1bmNoLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IHRhcmdldFNuYXBzaG90Q291bnQ/OiBudW1iZXI7XG59XG5cbi8qKlxuICogVGhlIHJlZ2lvbmFsIGRpc3RyaWJ1dGlvbiBzZXR0aW5ncyB0byB1c2UgZm9yIGFuIEFNSSBidWlsZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEFtaURpc3RyaWJ1dGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgdGFyZ2V0IHJlZ2lvbiB0byBkaXN0cmlidXRlIEFNSXMgdG9cbiAgICpcbiAgICogQGRlZmF1bHQgVGhlIGN1cnJlbnQgcmVnaW9uIGlzIHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IHJlZ2lvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHRhZ3MgdG8gYXBwbHkgdG8gdGhlIGRpc3RyaWJ1dGVkIEFNSXNcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgYW1pVGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgQU1JXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGFtaURlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgS01TIGtleSB0byBlbmNyeXB0IHRoZSBkaXN0cmlidXRlZCBBTUkgd2l0aFxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBhbWlLbXNLZXk/OiBrbXMuSUtleTtcblxuICAvKipcbiAgICogVGhlIGxhdW5jaCBwZXJtaXNzaW9ucyBmb3IgdGhlIEFNSSwgZGVmaW5pbmcgd2hpY2ggcHJpbmNpcGFscyBhcmUgYWxsb3dlZCB0byBhY2Nlc3MgdGhlIEFNSVxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBhbWlMYXVuY2hQZXJtaXNzaW9uPzogQW1pTGF1bmNoUGVybWlzc2lvbjtcblxuICAvKipcbiAgICogVGhlIG5hbWUgdG8gdXNlIGZvciB0aGUgZGlzdHJpYnV0ZWQgQU1Jc1xuICAgKlxuICAgKiBAZGVmYXVsdCBBIG5hbWUgaXMgZ2VuZXJhdGVkIGZyb20gdGhlIGltYWdlIHJlY2lwZSBuYW1lXG4gICAqL1xuICByZWFkb25seSBhbWlOYW1lPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYWNjb3VudCBJRHMgdG8gY29weSB0aGUgb3V0cHV0IEFNSSB0b1xuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBhbWlUYXJnZXRBY2NvdW50SWRzPzogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIFRoZSBTU00gcGFyYW1ldGVycyB0byBjcmVhdGUgb3IgdXBkYXRlIGZvciB0aGUgZGlzdHJpYnV0ZWQgQU1Jc1xuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBzc21QYXJhbWV0ZXJzPzogU1NNUGFyYW1ldGVyQ29uZmlndXJhdGlvbnNbXTtcblxuICAvKipcbiAgICogVGhlIGxhdW5jaCB0ZW1wbGF0ZXMgdG8gYXBwbHkgdGhlIGRpc3RyaWJ1dGVkIEFNSSB0b1xuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBsYXVuY2hUZW1wbGF0ZXM/OiBMYXVuY2hUZW1wbGF0ZUNvbmZpZ3VyYXRpb25bXTtcblxuICAvKipcbiAgICogVGhlIGZhc3QgbGF1bmNoIGNvbmZpZ3VyYXRpb25zIHRvIHVzZSBmb3IgZW5hYmxpbmcgRUMyIEZhc3QgTGF1bmNoIG9uIHRoZSBkaXN0cmlidXRlZCBXaW5kb3dzIEFNSVxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvQVBJUmVmZXJlbmNlL0FQSV9FbmFibGVGYXN0TGF1bmNoLmh0bWxcbiAgICovXG4gIHJlYWRvbmx5IGZhc3RMYXVuY2hDb25maWd1cmF0aW9ucz86IEZhc3RMYXVuY2hDb25maWd1cmF0aW9uW107XG5cbiAgLyoqXG4gICAqIFRoZSBMaWNlbnNlIE1hbmFnZXIgbGljZW5zZSBjb25maWd1cmF0aW9uIEFSTnMgdG8gYXBwbHkgdG8gdGhlIGRpc3RyaWJ1dGVkIEFNSXNcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgbGljZW5zZUNvbmZpZ3VyYXRpb25Bcm5zPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogVGhlIHJlZ2lvbmFsIGRpc3RyaWJ1dGlvbiBzZXR0aW5ncyB0byB1c2UgZm9yIGEgY29udGFpbmVyIGJ1aWxkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29udGFpbmVyRGlzdHJpYnV0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSB0YXJnZXQgcmVnaW9uIHRvIGRpc3RyaWJ1dGUgY29udGFpbmVycyB0b1xuICAgKlxuICAgKiBAZGVmYXVsdCBUaGUgY3VycmVudCByZWdpb24gaXMgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzdGluYXRpb24gcmVwb3NpdG9yeSB0byBkaXN0cmlidXRlIHRoZSBvdXRwdXQgY29udGFpbmVyIHRvXG4gICAqXG4gICAqIEBkZWZhdWx0IFRoZSB0YXJnZXQgcmVwb3NpdG9yeSBpbiB0aGUgY29udGFpbmVyIHJlY2lwZSBpcyB1c2VkXG4gICAqL1xuICByZWFkb25seSBjb250YWluZXJSZXBvc2l0b3J5OiBSZXBvc2l0b3J5O1xuXG4gIC8qKlxuICAgKiBUaGUgZGVzY3JpcHRpb24gb2YgdGhlIGNvbnRhaW5lciBpbWFnZVxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBjb250YWluZXJEZXNjcmlwdGlvbj86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGFkZGl0aW9uYWwgdGFncyB0byBhcHBseSB0byB0aGUgZGlzdHJpYnV0ZWQgY29udGFpbmVyIGltYWdlc1xuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBjb250YWluZXJUYWdzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogUHJvcGVydGllcyBmb3IgY3JlYXRpbmcgYSBEaXN0cmlidXRpb24gQ29uZmlndXJhdGlvbiByZXNvdXJjZVxuICovXG5leHBvcnQgaW50ZXJmYWNlIERpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25Qcm9wcyB7XG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiB0YXJnZXQgcmVnaW9ucyBhbmQgYXNzb2NpYXRlZCBBTUkgZGlzdHJpYnV0aW9uIHNldHRpbmdzIHdoZXJlIHRoZSBidWlsdCBBTUkgd2lsbCBiZSBkaXN0cmlidXRlZC4gQU1JXG4gICAqIGRpc3RyaWJ1dGlvbnMgbWF5IGFsc28gYmUgYWRkZWQgd2l0aCB0aGUgYGFkZEFtaURpc3RyaWJ1dGlvbnNgIG1ldGhvZC5cbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZSBpZiBjb250YWluZXIgZGlzdHJpYnV0aW9ucyBhcmUgcHJvdmlkZWQuIE90aGVyd2lzZSwgYXQgbGVhc3Qgb25lIEFNSSBvciBjb250YWluZXIgZGlzdHJpYnV0aW9uIG11c3RcbiAgICogICAgICAgICAgYmUgcHJvdmlkZWRcbiAgICovXG4gIHJlYWRvbmx5IGFtaURpc3RyaWJ1dGlvbnM/OiBBbWlEaXN0cmlidXRpb25bXTtcblxuICAvKipcbiAgICogVGhlIGxpc3Qgb2YgdGFyZ2V0IHJlZ2lvbnMgYW5kIGFzc29jaWF0ZWQgY29udGFpbmVyIGRpc3RyaWJ1dGlvbiBzZXR0aW5ncyB3aGVyZSB0aGUgYnVpbHQgY29udGFpbmVyIHdpbGwgYmVcbiAgICogZGlzdHJpYnV0ZWQuIENvbnRhaW5lciBkaXN0cmlidXRpb25zIG1heSBhbHNvIGJlIGFkZGVkIHdpdGggdGhlIGBhZGRDb250YWluZXJEaXN0cmlidXRpb25zYCBtZXRob2QuXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmUgaWYgQU1JIGRpc3RyaWJ1dGlvbnMgYXJlIHByb3ZpZGVkLiBPdGhlcndpc2UsIGF0IGxlYXN0IG9uZSBBTUkgb3IgY29udGFpbmVyIGRpc3RyaWJ1dGlvbiBtdXN0IGJlXG4gICAqICAgICAgICAgIHByb3ZpZGVkXG4gICAqL1xuICByZWFkb25seSBjb250YWluZXJEaXN0cmlidXRpb25zPzogQ29udGFpbmVyRGlzdHJpYnV0aW9uW107XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgQSBuYW1lIGlzIGdlbmVyYXRlZFxuICAgKi9cbiAgcmVhZG9ubHkgZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbk5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb24uXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGFncyB0byBhcHBseSB0byB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgdGFncz86IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH07XG59XG5cbi8qKlxuICogQSBuZXcgb3IgaW1wb3J0ZWQgRGlzdHJpYnV0aW9uIENvbmZpZ3VyYXRpb25cbiAqL1xuYWJzdHJhY3QgY2xhc3MgRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbkJhc2UgZXh0ZW5kcyBjZGsuUmVzb3VyY2UgaW1wbGVtZW50cyBJRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvblxuICAgKi9cbiAgYWJzdHJhY3QgcmVhZG9ubHkgZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbkFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIGFic3RyYWN0IHJlYWRvbmx5IGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25OYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdyYW50IGN1c3RvbSBhY3Rpb25zIHRvIHRoZSBnaXZlbiBncmFudGVlIGZvciB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKiBAcGFyYW0gYWN0aW9ucyBUaGUgbGlzdCBvZiBhY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgZ3JhbnQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUsIC4uLmFjdGlvbnM6IHN0cmluZ1tdKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gaWFtLkdyYW50LmFkZFRvUHJpbmNpcGFsKHtcbiAgICAgIGdyYW50ZWUsXG4gICAgICBhY3Rpb25zLFxuICAgICAgcmVzb3VyY2VBcm5zOiBbdGhpcy5kaXN0cmlidXRpb25Db25maWd1cmF0aW9uQXJuXSxcbiAgICAgIHNjb3BlOiB0aGlzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHJlYWQgcGVybWlzc2lvbnMgdG8gdGhlIGdpdmVuIGdyYW50ZWUgZm9yIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSBUaGUgcHJpbmNpcGFsXG4gICAqL1xuICBwdWJsaWMgZ3JhbnRSZWFkKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gdGhpcy5ncmFudChncmFudGVlLCAnaW1hZ2VidWlsZGVyOkdldERpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24nKTtcbiAgfVxufVxuXG4vKipcbiAqIFRoZSBzZXJ2aWNlIGluIHdoaWNoIGEgY29udGFpbmVyIHNob3VsZCBiZSByZWdpc3RlcmVkXG4gKi9cbmV4cG9ydCBlbnVtIFJlcG9zaXRvcnlTZXJ2aWNlIHtcbiAgLyoqXG4gICAqIEluZGljYXRlcyB0aGUgY29udGFpbmVyIHNob3VsZCBiZSByZWdpc3RlcmVkIGluIEVDUlxuICAgKi9cbiAgRUNSID0gJ0VDUicsXG59XG5cbi8qKlxuICogQSBjb250YWluZXIgcmVwb3NpdG9yeSB1c2VkIHRvIGRpc3RyaWJ1dGUgY29udGFpbmVyIGltYWdlcyBpbiBFQzIgSW1hZ2UgQnVpbGRlclxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgUmVwb3NpdG9yeSB7XG4gIC8qKlxuICAgKiBUaGUgRUNSIHJlcG9zaXRvcnkgdG8gdXNlIGFzIHRoZSB0YXJnZXQgY29udGFpbmVyIHJlcG9zaXRvcnlcbiAgICpcbiAgICogQHBhcmFtIHJlcG9zaXRvcnkgVGhlIEVDUiByZXBvc2l0b3J5IHRvIHVzZVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tRWNyKHJlcG9zaXRvcnk6IGVjci5JUmVwb3NpdG9yeSk6IFJlcG9zaXRvcnkge1xuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIFJlcG9zaXRvcnkge1xuICAgICAgcHVibGljIHJlYWRvbmx5IHJlcG9zaXRvcnlOYW1lOiBzdHJpbmcgPSByZXBvc2l0b3J5LnJlcG9zaXRvcnlOYW1lO1xuICAgICAgcHVibGljIHJlYWRvbmx5IHNlcnZpY2U6IFJlcG9zaXRvcnlTZXJ2aWNlID0gUmVwb3NpdG9yeVNlcnZpY2UuRUNSO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KCk7XG4gIH1cblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGNvbnRhaW5lciByZXBvc2l0b3J5IHdoZXJlIHRoZSBvdXRwdXQgY29udGFpbmVyIGltYWdlIGlzIHN0b3JlZFxuICAgKi9cbiAgYWJzdHJhY3QgcmVhZG9ubHkgcmVwb3NpdG9yeU5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIHNlcnZpY2UgaW4gd2hpY2ggdGhlIGNvbnRhaW5lciByZXBvc2l0b3J5IGlzIGhvc3RlZFxuICAgKi9cbiAgYWJzdHJhY3QgcmVhZG9ubHkgc2VydmljZTogUmVwb3NpdG9yeVNlcnZpY2U7XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhbiBFQzIgSW1hZ2UgQnVpbGRlciBEaXN0cmlidXRpb24gQ29uZmlndXJhdGlvbi5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9pbWFnZWJ1aWxkZXIvbGF0ZXN0L3VzZXJndWlkZS9tYW5hZ2UtZGlzdHJpYnV0aW9uLXNldHRpbmdzLmh0bWxcbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuZXhwb3J0IGNsYXNzIERpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24gZXh0ZW5kcyBEaXN0cmlidXRpb25Db25maWd1cmF0aW9uQmFzZSB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWltYWdlYnVpbGRlci1hbHBoYS5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uJztcblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGdpdmVuIGl0cyBBUk4uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21EaXN0cmlidXRpb25Db25maWd1cmF0aW9uQXJuKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uQXJuOiBzdHJpbmcsXG4gICk6IElEaXN0cmlidXRpb25Db25maWd1cmF0aW9uIHtcbiAgICBjb25zdCBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZSA9IGNkay5TdGFjay5vZihzY29wZSkuc3BsaXRBcm4oXG4gICAgICBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uQXJuLFxuICAgICAgY2RrLkFybkZvcm1hdC5TTEFTSF9SRVNPVVJDRV9OQU1FLFxuICAgICkucmVzb3VyY2VOYW1lITtcblxuICAgIGNsYXNzIEltcG9ydCBleHRlbmRzIERpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25CYXNlIHtcbiAgICAgIHB1YmxpYyByZWFkb25seSBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uQXJuID0gZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbkFybjtcbiAgICAgIHB1YmxpYyByZWFkb25seSBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZSA9IGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25OYW1lO1xuICAgIH1cblxuICAgIHJldHVybiBuZXcgSW1wb3J0KHNjb3BlLCBpZCk7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uIGdpdmVuIGl0cyBuYW1lLiBUaGUgcHJvdmlkZWQgbmFtZSBtdXN0IGJlIG5vcm1hbGl6ZWQgYnkgY29udmVydGluZ1xuICAgKiBhbGwgYWxwaGFiZXRpY2FsIGNoYXJhY3RlcnMgdG8gbG93ZXJjYXNlLCBhbmQgcmVwbGFjaW5nIGFsbCBzcGFjZXMgYW5kIHVuZGVyc2NvcmVzIHdpdGggaHlwaGVucy5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbURpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25OYW1lKFxuICAgIHNjb3BlOiBDb25zdHJ1Y3QsXG4gICAgaWQ6IHN0cmluZyxcbiAgICBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZTogc3RyaW5nLFxuICApOiBJRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHRoaXMuZnJvbURpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25Bcm4oXG4gICAgICBzY29wZSxcbiAgICAgIGlkLFxuICAgICAgY2RrLlN0YWNrLm9mKHNjb3BlKS5mb3JtYXRBcm4oe1xuICAgICAgICBzZXJ2aWNlOiAnaW1hZ2VidWlsZGVyJyxcbiAgICAgICAgcmVzb3VyY2U6ICdkaXN0cmlidXRpb24tY29uZmlndXJhdGlvbicsXG4gICAgICAgIHJlc291cmNlTmFtZTogZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbk5hbWUsXG4gICAgICB9KSxcbiAgICApO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybiB3aGV0aGVyIHRoZSBnaXZlbiBvYmplY3QgaXMgYSBEaXN0cmlidXRpb25Db25maWd1cmF0aW9uLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBpc0Rpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24oeDogYW55KTogeCBpcyBEaXN0cmlidXRpb25Db25maWd1cmF0aW9uIHtcbiAgICByZXR1cm4geCAhPT0gbnVsbCAmJiB0eXBlb2YgeCA9PT0gJ29iamVjdCcgJiYgRElTVFJJQlVUSU9OX0NPTkZJR1VSQVRJT05fU1lNQk9MIGluIHg7XG4gIH1cblxuICAvKipcbiAgICogVGhlIEFSTiBvZiB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvblxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25OYW1lOiBzdHJpbmc7XG5cbiAgcHJpdmF0ZSByZWFkb25seSBhbWlEaXN0cmlidXRpb25zQnlSZWdpb246IHsgW3JlZ2lvbjogc3RyaW5nXTogQW1pRGlzdHJpYnV0aW9uIH0gPSB7fTtcbiAgcHJpdmF0ZSByZWFkb25seSBjb250YWluZXJEaXN0cmlidXRpb25zQnlSZWdpb246IHtcbiAgICBbcmVnaW9uOiBzdHJpbmddOiBDb250YWluZXJEaXN0cmlidXRpb247XG4gIH0gPSB7fTtcblxuICBwdWJsaWMgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IERpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25Qcm9wcyA9IHt9KSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCB7XG4gICAgICBwaHlzaWNhbE5hbWU6XG4gICAgICAgIHByb3BzLmRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25OYW1lID8/XG4gICAgICAgIGNkay5MYXp5LnN0cmluZyh7XG4gICAgICAgICAgcHJvZHVjZTogKCkgPT5cbiAgICAgICAgICAgIGNkay5OYW1lcy51bmlxdWVSZXNvdXJjZU5hbWUodGhpcywge1xuICAgICAgICAgICAgICBtYXhMZW5ndGg6IDEyOCxcbiAgICAgICAgICAgICAgc2VwYXJhdG9yOiAnLScsXG4gICAgICAgICAgICAgIGFsbG93ZWRTcGVjaWFsQ2hhcmFjdGVyczogJy0nLFxuICAgICAgICAgICAgfSkudG9Mb3dlckNhc2UoKSwgLy8gRW5mb3JjZSBsb3dlcmNhc2UgZm9yIHRoZSBhdXRvLWdlbmVyYXRlZCBmYWxsYmFja1xuICAgICAgICB9KSxcbiAgICB9KTtcbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIHByb3BzKTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBESVNUUklCVVRJT05fQ09ORklHVVJBVElPTl9TWU1CT0wsIHsgdmFsdWU6IHRydWUgfSk7XG5cbiAgICB0aGlzLnZhbGlkYXRlRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbk5hbWUoKTtcblxuICAgIHRoaXMuYWRkQW1pRGlzdHJpYnV0aW9ucyguLi4ocHJvcHMuYW1pRGlzdHJpYnV0aW9ucyA/PyBbXSkpO1xuICAgIHRoaXMuYWRkQ29udGFpbmVyRGlzdHJpYnV0aW9ucyguLi4ocHJvcHMuY29udGFpbmVyRGlzdHJpYnV0aW9ucyA/PyBbXSkpO1xuXG4gICAgY29uc3QgZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbiA9IG5ldyBDZm5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uKHRoaXMsICdSZXNvdXJjZScsIHtcbiAgICAgIG5hbWU6IHRoaXMucGh5c2ljYWxOYW1lLFxuICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uLFxuICAgICAgZGlzdHJpYnV0aW9uczogY2RrLkxhenkuYW55KHsgcHJvZHVjZTogKCkgPT4gdGhpcy5yZW5kZXJEaXN0cmlidXRpb25zKCkgfSksXG4gICAgICB0YWdzOiBwcm9wcy50YWdzLFxuICAgIH0pO1xuXG4gICAgdGhpcy5kaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZSA9IHRoaXMuZ2V0UmVzb3VyY2VOYW1lQXR0cmlidXRlKGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24uYXR0ck5hbWUpO1xuICAgIHRoaXMuZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbkFybiA9IHRoaXMuZ2V0UmVzb3VyY2VBcm5BdHRyaWJ1dGUoZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbi5hdHRyQXJuLCB7XG4gICAgICBzZXJ2aWNlOiAnaW1hZ2VidWlsZGVyJyxcbiAgICAgIHJlc291cmNlOiAnZGlzdHJpYnV0aW9uLWNvbmZpZ3VyYXRpb24nLFxuICAgICAgcmVzb3VyY2VOYW1lOiB0aGlzLnBoeXNpY2FsTmFtZSxcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIEFNSSBkaXN0cmlidXRpb24gc2V0dGluZ3MgdG8gdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBhbWlEaXN0cmlidXRpb25zIFRoZSBsaXN0IG9mIEFNSSBkaXN0cmlidXRpb24gc2V0dGluZ3MgdG8gYXBwbHlcbiAgICovXG4gIEBNZXRob2RNZXRhZGF0YSgpXG4gIHB1YmxpYyBhZGRBbWlEaXN0cmlidXRpb25zKC4uLmFtaURpc3RyaWJ1dGlvbnM6IEFtaURpc3RyaWJ1dGlvbltdKTogdm9pZCB7XG4gICAgYW1pRGlzdHJpYnV0aW9ucy5mb3JFYWNoKChhbWlEaXN0cmlidXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHJlZ2lvbiA9IGFtaURpc3RyaWJ1dGlvbi5yZWdpb24gPz8gY2RrLlN0YWNrLm9mKHRoaXMpLnJlZ2lvbjtcbiAgICAgIGlmICh0aGlzLmFtaURpc3RyaWJ1dGlvbnNCeVJlZ2lvbltyZWdpb25dKSB7XG4gICAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIGBkdXBsaWNhdGUgQU1JIGRpc3RyaWJ1dGlvbiBmb3VuZCBmb3IgcmVnaW9uIFwiJHtyZWdpb259XCI7IG9ubHkgb25lIEFNSSBkaXN0cmlidXRpb24gcGVyIHJlZ2lvbiBpcyBhbGxvd2VkYCxcbiAgICAgICAgICB0aGlzLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmFtaURpc3RyaWJ1dGlvbnNCeVJlZ2lvbltyZWdpb25dID0gYW1pRGlzdHJpYnV0aW9uO1xuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgY29udGFpbmVyIGRpc3RyaWJ1dGlvbiBzZXR0aW5ncyB0byB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQHBhcmFtIGNvbnRhaW5lckRpc3RyaWJ1dGlvbnMgVGhlIGxpc3Qgb2YgY29udGFpbmVyIGRpc3RyaWJ1dGlvbiBzZXR0aW5ncyB0byBhcHBseVxuICAgKi9cbiAgQE1ldGhvZE1ldGFkYXRhKClcbiAgcHVibGljIGFkZENvbnRhaW5lckRpc3RyaWJ1dGlvbnMoLi4uY29udGFpbmVyRGlzdHJpYnV0aW9uczogQ29udGFpbmVyRGlzdHJpYnV0aW9uW10pOiB2b2lkIHtcbiAgICBjb250YWluZXJEaXN0cmlidXRpb25zLmZvckVhY2goKGNvbnRhaW5lckRpc3RyaWJ1dGlvbikgPT4ge1xuICAgICAgY29uc3QgcmVnaW9uID0gY29udGFpbmVyRGlzdHJpYnV0aW9uLnJlZ2lvbiA/PyBjZGsuU3RhY2sub2YodGhpcykucmVnaW9uO1xuICAgICAgaWYgKHRoaXMuY29udGFpbmVyRGlzdHJpYnV0aW9uc0J5UmVnaW9uW3JlZ2lvbl0pIHtcbiAgICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgYGR1cGxpY2F0ZSBDb250YWluZXIgZGlzdHJpYnV0aW9uIGZvdW5kIGZvciByZWdpb24gXCIke3JlZ2lvbn1cIjsgb25seSBvbmUgQ29udGFpbmVyIGRpc3RyaWJ1dGlvbiBwZXIgcmVnaW9uIGlzIGFsbG93ZWRgLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29udGFpbmVyRGlzdHJpYnV0aW9uc0J5UmVnaW9uW3JlZ2lvbl0gPSBjb250YWluZXJEaXN0cmlidXRpb247XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIHZhbGlkYXRlRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbk5hbWUoKSB7XG4gICAgaWYgKGNkay5Ub2tlbi5pc1VucmVzb2x2ZWQodGhpcy5waHlzaWNhbE5hbWUpKSB7XG4gICAgICByZXR1cm47IC8vIENhbm5vdCB2YWxpZGF0ZSB1bnJlc29sdmVkIHRva2VucywgZ2l2ZW4gdGhlaXIgYWN0dWFsIHZhbHVlIGlzIHJlbmRlcmVkIGF0IGRlcGxveW1lbnQgdGltZVxuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZS5sZW5ndGggPiAxMjgpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKCdUaGUgZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbk5hbWUgY2Fubm90IGJlIGxvbmdlciB0aGFuIDEyOCBjaGFyYWN0ZXJzJywgdGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGh5c2ljYWxOYW1lLmluY2x1ZGVzKCcgJykpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKCdUaGUgZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbk5hbWUgY2Fubm90IGNvbnRhaW4gc3BhY2VzJywgdGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGh5c2ljYWxOYW1lLmluY2x1ZGVzKCdfJykpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKCdUaGUgZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbk5hbWUgY2Fubm90IGNvbnRhaW4gdW5kZXJzY29yZXMnLCB0aGlzKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waHlzaWNhbE5hbWUgIT09IHRoaXMucGh5c2ljYWxOYW1lLnRvTG93ZXJDYXNlKCkpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKCdUaGUgZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbk5hbWUgbXVzdCBiZSBsb3dlcmNhc2UnLCB0aGlzKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVuZGVycyB0aGUgQU1JIGFuZCBjb250YWluZXIgZGlzdHJpYnV0aW9ucyBwcm92aWRlZCBhcyBpbnB1dCB0byB0aGUgY29uc3RydWN0LCBpbnRvIHRoZSBgRGlzdHJpYnV0aW9uW11gIHN0cnVjdHVyZVxuICAgKiB0aGF0IENmbkRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24gZXhwZWN0cyB0byByZWNlaXZlLiBEaXN0cmlidXRpb25zIHByb3ZpZGVkIHRvIENmbkRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24gbXVzdFxuICAgKiBtYXAgdG8gYSB1bmlxdWUgcmVnaW9uIHBlciBlbnRyeSBpbiB0aGUgbGlzdCAtIHRoaXMgcmVuZGVyIGZ1bmN0aW9uIGFsc28gaGFuZGxlcyBjb21iaW5pbmcgQU1JIGFuZCBjb250YWluZXJcbiAgICogZGlzdHJpYnV0aW9ucyBpbiB0aGUgc2FtZSByZWdpb24gaW50byBhIHNpbmdsZSBlbnRyeS5cbiAgICpcbiAgICogVGhpcyBpcyByZW5kZXJlZCBhdCBzeW50aGVzaXMgdGltZSwgYXMgdXNlcnMgY2FuIGFkZCBhZGRpdGlvbmFsIEFNSSBhbmQgY29udGFpbmVyIGRpc3RyaWJ1dGlvbnMgd2l0aFxuICAgKiBgYWRkQW1pRGlzdHJpYnV0aW9uc2AgYW5kIGBhZGRDb250YWluZXJEaXN0cmlidXRpb25zYCwgYWZ0ZXIgdGhlIGNvbnN0cnVjdCBoYXMgYmVlbiBpbnN0YW50aWF0ZWQuXG4gICAqXG4gICAqIEBwcml2YXRlXG4gICAqL1xuICBwcml2YXRlIHJlbmRlckRpc3RyaWJ1dGlvbnMoKTogQ2ZuRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbi5EaXN0cmlidXRpb25Qcm9wZXJ0eVtdIHtcbiAgICBpZiAoXG4gICAgICAhT2JqZWN0LmtleXModGhpcy5hbWlEaXN0cmlidXRpb25zQnlSZWdpb24pLmxlbmd0aCAmJlxuICAgICAgIU9iamVjdC5rZXlzKHRoaXMuY29udGFpbmVyRGlzdHJpYnV0aW9uc0J5UmVnaW9uKS5sZW5ndGhcbiAgICApIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKCdZb3UgbXVzdCBzcGVjaWZ5IGF0IGxlYXN0IG9uZSBBTUkgb3IgY29udGFpbmVyIGRpc3RyaWJ1dGlvbicsIHRoaXMpO1xuICAgIH1cblxuICAgIGNvbnN0IGRpc3RyaWJ1dGlvbkJ5UmVnaW9uOiB7IFtyZWdpb246IHN0cmluZ106IENmbkRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24uRGlzdHJpYnV0aW9uUHJvcGVydHkgfSA9IHt9O1xuXG4gICAgZm9yIChjb25zdCBbcmVnaW9uLCBkaXN0cmlidXRpb25dIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuYW1pRGlzdHJpYnV0aW9uc0J5UmVnaW9uKSkge1xuICAgICAgZGlzdHJpYnV0aW9uQnlSZWdpb25bcmVnaW9uXSA9IHtcbiAgICAgICAgcmVnaW9uLFxuICAgICAgICBhbWlEaXN0cmlidXRpb25Db25maWd1cmF0aW9uOiB0aGlzLmJ1aWxkQW1pRGlzdHJpYnV0aW9uKGRpc3RyaWJ1dGlvbiksXG4gICAgICAgIGZhc3RMYXVuY2hDb25maWd1cmF0aW9uczogdGhpcy5idWlsZEZhc3RMYXVuY2hDb25maWd1cmF0aW9ucyhkaXN0cmlidXRpb24pLFxuICAgICAgICBsYXVuY2hUZW1wbGF0ZUNvbmZpZ3VyYXRpb25zOiB0aGlzLmJ1aWxkTGF1bmNoVGVtcGxhdGVDb25maWd1cmF0aW9ucyhkaXN0cmlidXRpb24pLFxuICAgICAgICBzc21QYXJhbWV0ZXJDb25maWd1cmF0aW9uczogdGhpcy5idWlsZFNzbVBhcmFtZXRlckNvbmZpZ3VyYXRpb25zKGRpc3RyaWJ1dGlvbiksXG4gICAgICAgIGxpY2Vuc2VDb25maWd1cmF0aW9uQXJuczogdGhpcy5idWlsZExpY2Vuc2VDb25maWd1cmF0aW9uQXJucyhkaXN0cmlidXRpb24pLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBmb3IgKGNvbnN0IFtyZWdpb24sIGNvbnRhaW5lckRpc3RyaWJ1dGlvbl0gb2YgT2JqZWN0LmVudHJpZXModGhpcy5jb250YWluZXJEaXN0cmlidXRpb25zQnlSZWdpb24pKSB7XG4gICAgICBkaXN0cmlidXRpb25CeVJlZ2lvbltyZWdpb25dID0ge1xuICAgICAgICAuLi4oZGlzdHJpYnV0aW9uQnlSZWdpb25bcmVnaW9uXSA/PyB7fSksXG4gICAgICAgIHJlZ2lvbixcbiAgICAgICAgY29udGFpbmVyRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbjogdGhpcy5idWlsZENvbnRhaW5lckRpc3RyaWJ1dGlvbihjb250YWluZXJEaXN0cmlidXRpb24pLFxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25zdCBkaXN0cmlidXRpb25zID0gT2JqZWN0LnZhbHVlcyhkaXN0cmlidXRpb25CeVJlZ2lvbik7XG5cbiAgICBkaXN0cmlidXRpb25zLmZvckVhY2goKGRpc3RyaWJ1dGlvbikgPT4ge1xuICAgICAgY29uc3QgeyByZWdpb246IF8sIC4uLmRpc3RyaWJ1dGlvbldpdGhvdXRSZWdpb24gfSA9IGRpc3RyaWJ1dGlvbjtcbiAgICAgIGlmICghT2JqZWN0LmVudHJpZXMoZGlzdHJpYnV0aW9uV2l0aG91dFJlZ2lvbikuc29tZSgoW19fLCB2YWx1ZV0pID0+IHZhbHVlICE9PSB1bmRlZmluZWQpKSB7XG4gICAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIGBhdCBsZWFzdCBvbmUgZGlzdHJpYnV0aW9uIHByb3BlcnR5IG11c3QgYmUgc2V0IGZvciByZWdpb24gXCIke2Rpc3RyaWJ1dGlvbi5yZWdpb259XCJgLFxuICAgICAgICAgIHRoaXMsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICByZXR1cm4gZGlzdHJpYnV0aW9ucztcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRBbWlEaXN0cmlidXRpb24oYW1pRGlzdHJpYnV0aW9uOiBBbWlEaXN0cmlidXRpb24pOiBvYmplY3QgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGxhdW5jaFBlcm1pc3Npb25zID0gdGhpcy5idWlsZEFtaUxhdW5jaFBlcm1pc3Npb25zKGFtaURpc3RyaWJ1dGlvbik7XG4gICAgY29uc3QgYW1pRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbiA9IHtcbiAgICAgIC4uLihPYmplY3Qua2V5cyhhbWlEaXN0cmlidXRpb24uYW1pVGFncyA/PyB7fSkubGVuZ3RoICYmIHsgQW1pVGFnczogYW1pRGlzdHJpYnV0aW9uLmFtaVRhZ3MgfSksXG4gICAgICAuLi4oYW1pRGlzdHJpYnV0aW9uLmFtaURlc2NyaXB0aW9uICE9PSB1bmRlZmluZWQgJiYgeyBEZXNjcmlwdGlvbjogYW1pRGlzdHJpYnV0aW9uLmFtaURlc2NyaXB0aW9uIH0pLFxuICAgICAgLi4uKGFtaURpc3RyaWJ1dGlvbi5hbWlLbXNLZXkgIT09IHVuZGVmaW5lZCAmJiB7IEttc0tleUlkOiBhbWlEaXN0cmlidXRpb24uYW1pS21zS2V5LmtleUFybiB9KSxcbiAgICAgIC4uLihsYXVuY2hQZXJtaXNzaW9ucyAmJiB7IExhdW5jaFBlcm1pc3Npb25Db25maWd1cmF0aW9uOiBsYXVuY2hQZXJtaXNzaW9ucyB9KSxcbiAgICAgIC4uLihhbWlEaXN0cmlidXRpb24uYW1pTmFtZSAhPT0gdW5kZWZpbmVkICYmIHsgTmFtZTogYW1pRGlzdHJpYnV0aW9uLmFtaU5hbWUgfSksXG4gICAgICAuLi4oYW1pRGlzdHJpYnV0aW9uLmFtaVRhcmdldEFjY291bnRJZHMgIT09IHVuZGVmaW5lZCAmJiB7XG4gICAgICAgIFRhcmdldEFjY291bnRJZHM6IGFtaURpc3RyaWJ1dGlvbi5hbWlUYXJnZXRBY2NvdW50SWRzLFxuICAgICAgfSksXG4gICAgfTtcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhhbWlEaXN0cmlidXRpb25Db25maWd1cmF0aW9uKS5sZW5ndGggPyBhbWlEaXN0cmlidXRpb25Db25maWd1cmF0aW9uIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZENvbnRhaW5lckRpc3RyaWJ1dGlvbihjb250YWluZXJEaXN0cmlidXRpb246IENvbnRhaW5lckRpc3RyaWJ1dGlvbik6IG9iamVjdCB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIHtcbiAgICAgIENvbnRhaW5lclRhZ3M6IGNvbnRhaW5lckRpc3RyaWJ1dGlvbi5jb250YWluZXJUYWdzLFxuICAgICAgRGVzY3JpcHRpb246IGNvbnRhaW5lckRpc3RyaWJ1dGlvbi5jb250YWluZXJEZXNjcmlwdGlvbixcbiAgICAgIFRhcmdldFJlcG9zaXRvcnk6IHtcbiAgICAgICAgUmVwb3NpdG9yeU5hbWU6IGNvbnRhaW5lckRpc3RyaWJ1dGlvbi5jb250YWluZXJSZXBvc2l0b3J5LnJlcG9zaXRvcnlOYW1lLFxuICAgICAgICBTZXJ2aWNlOiBjb250YWluZXJEaXN0cmlidXRpb24uY29udGFpbmVyUmVwb3NpdG9yeS5zZXJ2aWNlLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEFtaUxhdW5jaFBlcm1pc3Npb25zKGFtaURpc3RyaWJ1dGlvbjogQW1pRGlzdHJpYnV0aW9uKTogb2JqZWN0IHwgdW5kZWZpbmVkIHtcbiAgICBpZiAoYW1pRGlzdHJpYnV0aW9uLmFtaUxhdW5jaFBlcm1pc3Npb24/LmlzUHVibGljVXNlckdyb3VwKSB7XG4gICAgICBjZGsuQW5ub3RhdGlvbnMub2YodGhpcykuYWRkV2FybmluZyhcbiAgICAgICAgJ0FNSSBpcyBjb25maWd1cmVkIGZvciBwdWJsaWMgYWNjZXNzLCBtYWtpbmcgaXQgYXZhaWxhYmxlIHRvIGFueSBBV1MgYWNjb3VudCBnbG9iYWxseS4gJyArXG4gICAgICAgICAgJ0Vuc3VyZSBubyBzZW5zaXRpdmUgZGF0YSwgY3JlZGVudGlhbHMsIG9yIHByb3ByaWV0YXJ5IGNvbmZpZ3VyYXRpb25zIGFyZSBpbmNsdWRlZC4gJyArXG4gICAgICAgICAgXCJSZXZpZXcgeW91ciBvcmdhbml6YXRpb24ncyBzZWN1cml0eSBwb2xpY2llcyBiZWZvcmUgZGVwbG95aW5nIHB1YmxpYyBBTUlzLlwiLFxuICAgICAgKTtcbiAgICB9XG5cbiAgICBjb25zdCBsYXVuY2hQZXJtaXNzaW9ucyA9IHtcbiAgICAgIC4uLihhbWlEaXN0cmlidXRpb24uYW1pTGF1bmNoUGVybWlzc2lvbj8ub3JnYW5pemF0aW9uYWxVbml0QXJucyAhPT0gdW5kZWZpbmVkICYmIHtcbiAgICAgICAgT3JnYW5pemF0aW9uYWxVbml0QXJuczogYW1pRGlzdHJpYnV0aW9uLmFtaUxhdW5jaFBlcm1pc3Npb24/Lm9yZ2FuaXphdGlvbmFsVW5pdEFybnMsXG4gICAgICB9KSxcbiAgICAgIC4uLihhbWlEaXN0cmlidXRpb24uYW1pTGF1bmNoUGVybWlzc2lvbj8ub3JnYW5pemF0aW9uQXJucyAhPT0gdW5kZWZpbmVkICYmIHtcbiAgICAgICAgT3JnYW5pemF0aW9uQXJuczogYW1pRGlzdHJpYnV0aW9uLmFtaUxhdW5jaFBlcm1pc3Npb24/Lm9yZ2FuaXphdGlvbkFybnMsXG4gICAgICB9KSxcbiAgICAgIC4uLihhbWlEaXN0cmlidXRpb24uYW1pTGF1bmNoUGVybWlzc2lvbj8uaXNQdWJsaWNVc2VyR3JvdXAgJiYge1xuICAgICAgICBVc2VyR3JvdXBzOiBbJ2FsbCddLFxuICAgICAgfSksXG4gICAgICAuLi4oYW1pRGlzdHJpYnV0aW9uLmFtaUxhdW5jaFBlcm1pc3Npb24/LmFjY291bnRJZHMgIT09IHVuZGVmaW5lZCAmJiB7XG4gICAgICAgIFVzZXJJZHM6IGFtaURpc3RyaWJ1dGlvbi5hbWlMYXVuY2hQZXJtaXNzaW9uPy5hY2NvdW50SWRzLFxuICAgICAgfSksXG4gICAgfTtcblxuICAgIHJldHVybiBPYmplY3Qua2V5cyhsYXVuY2hQZXJtaXNzaW9ucykubGVuZ3RoID8gbGF1bmNoUGVybWlzc2lvbnMgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkRmFzdExhdW5jaENvbmZpZ3VyYXRpb25zKFxuICAgIGFtaURpc3RyaWJ1dGlvbjogQW1pRGlzdHJpYnV0aW9uLFxuICApOiBDZm5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uLkZhc3RMYXVuY2hDb25maWd1cmF0aW9uUHJvcGVydHlbXSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3QgZmFzdExhdW5jaENvbmZpZ3VyYXRpb25zID0gYW1pRGlzdHJpYnV0aW9uLmZhc3RMYXVuY2hDb25maWd1cmF0aW9ucz8ubWFwKFxuICAgICAgKGZhc3RMYXVuY2hDb25maWd1cmF0aW9uKTogQ2ZuRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbi5GYXN0TGF1bmNoQ29uZmlndXJhdGlvblByb3BlcnR5ID0+IHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgIGZhc3RMYXVuY2hDb25maWd1cmF0aW9uLm1heFBhcmFsbGVsTGF1bmNoZXMgIT09IHVuZGVmaW5lZCAmJlxuICAgICAgICAgICFjZGsuVG9rZW4uaXNVbnJlc29sdmVkKGZhc3RMYXVuY2hDb25maWd1cmF0aW9uLm1heFBhcmFsbGVsTGF1bmNoZXMpICYmXG4gICAgICAgICAgZmFzdExhdW5jaENvbmZpZ3VyYXRpb24ubWF4UGFyYWxsZWxMYXVuY2hlcyA8IE1JTl9QQVJBTExFTF9MQVVOQ0hFU1xuICAgICAgICApIHtcbiAgICAgICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICAgIGB5b3UgbXVzdCBzcGVjaWZ5IGEgbWF4aW11bSBwYXJhbGxlbCBsYXVuY2ggY291bnQgb2YgYXQgbGVhc3QgJHtNSU5fUEFSQUxMRUxfTEFVTkNIRVN9YCxcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxhdW5jaFRlbXBsYXRlID0gZmFzdExhdW5jaENvbmZpZ3VyYXRpb24ubGF1bmNoVGVtcGxhdGU7XG4gICAgICAgIGNvbnN0IHVzZUZhc3RMYXVuY2hMYXVuY2hUZW1wbGF0ZUlkID0gbGF1bmNoVGVtcGxhdGU/LmxhdW5jaFRlbXBsYXRlSWQgIT09IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgZmFzdExhdW5jaExhdW5jaFRlbXBsYXRlOiBDZm5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uLkZhc3RMYXVuY2hMYXVuY2hUZW1wbGF0ZVNwZWNpZmljYXRpb25Qcm9wZXJ0eSA9IHtcbiAgICAgICAgICAuLi4odXNlRmFzdExhdW5jaExhdW5jaFRlbXBsYXRlSWQgJiYge1xuICAgICAgICAgICAgbGF1bmNoVGVtcGxhdGVJZDogbGF1bmNoVGVtcGxhdGU/LmxhdW5jaFRlbXBsYXRlSWQsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgLi4uKCF1c2VGYXN0TGF1bmNoTGF1bmNoVGVtcGxhdGVJZCAmJiB7XG4gICAgICAgICAgICBsYXVuY2hUZW1wbGF0ZU5hbWU6IGxhdW5jaFRlbXBsYXRlPy5sYXVuY2hUZW1wbGF0ZU5hbWUsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgLi4uKGxhdW5jaFRlbXBsYXRlPy52ZXJzaW9uTnVtYmVyICE9PSB1bmRlZmluZWQgJiYge1xuICAgICAgICAgICAgbGF1bmNoVGVtcGxhdGVWZXJzaW9uOiBsYXVuY2hUZW1wbGF0ZT8udmVyc2lvbk51bWJlcixcbiAgICAgICAgICB9KSxcbiAgICAgICAgfTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIGVuYWJsZWQ6IGZhc3RMYXVuY2hDb25maWd1cmF0aW9uLmVuYWJsZWQsXG4gICAgICAgICAgbWF4UGFyYWxsZWxMYXVuY2hlczogZmFzdExhdW5jaENvbmZpZ3VyYXRpb24ubWF4UGFyYWxsZWxMYXVuY2hlcyxcbiAgICAgICAgICAuLi4oT2JqZWN0LmtleXMoZmFzdExhdW5jaExhdW5jaFRlbXBsYXRlKS5sZW5ndGggJiYgeyBsYXVuY2hUZW1wbGF0ZTogZmFzdExhdW5jaExhdW5jaFRlbXBsYXRlIH0pLFxuICAgICAgICAgIC4uLihmYXN0TGF1bmNoQ29uZmlndXJhdGlvbi50YXJnZXRTbmFwc2hvdENvdW50ICE9PSB1bmRlZmluZWQgJiYge1xuICAgICAgICAgICAgc25hcHNob3RDb25maWd1cmF0aW9uOiB7IHRhcmdldFJlc291cmNlQ291bnQ6IGZhc3RMYXVuY2hDb25maWd1cmF0aW9uLnRhcmdldFNuYXBzaG90Q291bnQgfSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHJldHVybiBmYXN0TGF1bmNoQ29uZmlndXJhdGlvbnM/Lmxlbmd0aCA/IGZhc3RMYXVuY2hDb25maWd1cmF0aW9ucyA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRMYXVuY2hUZW1wbGF0ZUNvbmZpZ3VyYXRpb25zKFxuICAgIGFtaURpc3RyaWJ1dGlvbjogQW1pRGlzdHJpYnV0aW9uLFxuICApOiBDZm5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uLkxhdW5jaFRlbXBsYXRlQ29uZmlndXJhdGlvblByb3BlcnR5W10gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGxhdW5jaFRlbXBsYXRlQ29uZmlndXJhdGlvbnMgPSBhbWlEaXN0cmlidXRpb24ubGF1bmNoVGVtcGxhdGVzPy5tYXAoXG4gICAgICAobGF1bmNoVGVtcGxhdGVDb25maWd1cmF0aW9uKTogQ2ZuRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbi5MYXVuY2hUZW1wbGF0ZUNvbmZpZ3VyYXRpb25Qcm9wZXJ0eSA9PiB7XG4gICAgICAgIGlmICghbGF1bmNoVGVtcGxhdGVDb25maWd1cmF0aW9uLmxhdW5jaFRlbXBsYXRlLmxhdW5jaFRlbXBsYXRlSWQpIHtcbiAgICAgICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICAgICdZb3UgbXVzdCByZWZlcmVuY2UgbGF1bmNoIHRlbXBsYXRlcyBieSBJRCBpbiBsYXVuY2ggdGVtcGxhdGUgY29uZmlndXJhdGlvbnMnLFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBhY2NvdW50SWQ6IGxhdW5jaFRlbXBsYXRlQ29uZmlndXJhdGlvbi5hY2NvdW50SWQsXG4gICAgICAgICAgbGF1bmNoVGVtcGxhdGVJZDogbGF1bmNoVGVtcGxhdGVDb25maWd1cmF0aW9uLmxhdW5jaFRlbXBsYXRlLmxhdW5jaFRlbXBsYXRlSWQsXG4gICAgICAgICAgc2V0RGVmYXVsdFZlcnNpb246IGxhdW5jaFRlbXBsYXRlQ29uZmlndXJhdGlvbi5zZXREZWZhdWx0VmVyc2lvbixcbiAgICAgICAgfTtcbiAgICAgIH0sXG4gICAgKTtcblxuICAgIHJldHVybiBsYXVuY2hUZW1wbGF0ZUNvbmZpZ3VyYXRpb25zPy5sZW5ndGggPyBsYXVuY2hUZW1wbGF0ZUNvbmZpZ3VyYXRpb25zIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZExpY2Vuc2VDb25maWd1cmF0aW9uQXJucyhhbWlEaXN0cmlidXRpb246IEFtaURpc3RyaWJ1dGlvbik6IHN0cmluZ1tdIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gYW1pRGlzdHJpYnV0aW9uLmxpY2Vuc2VDb25maWd1cmF0aW9uQXJucz8ubGVuZ3RoID8gYW1pRGlzdHJpYnV0aW9uLmxpY2Vuc2VDb25maWd1cmF0aW9uQXJucyA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRTc21QYXJhbWV0ZXJDb25maWd1cmF0aW9ucyhcbiAgICBhbWlEaXN0cmlidXRpb246IEFtaURpc3RyaWJ1dGlvbixcbiAgKTogQ2ZuRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbi5Tc21QYXJhbWV0ZXJDb25maWd1cmF0aW9uUHJvcGVydHlbXSB8IHVuZGVmaW5lZCB7XG4gICAgY29uc3Qgc3NtUGFyYW1ldGVyQ29uZmlndXJhdGlvbnMgPSBhbWlEaXN0cmlidXRpb24uc3NtUGFyYW1ldGVycz8ubWFwKFxuICAgICAgKHNzbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24pOiBDZm5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uLlNzbVBhcmFtZXRlckNvbmZpZ3VyYXRpb25Qcm9wZXJ0eSA9PiAoe1xuICAgICAgICBhbWlBY2NvdW50SWQ6IHNzbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24uYW1pQWNjb3VudCxcbiAgICAgICAgZGF0YVR5cGU6IHNzbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24uZGF0YVR5cGUsXG4gICAgICAgIHBhcmFtZXRlck5hbWU6IHNzbVBhcmFtZXRlckNvbmZpZ3VyYXRpb24ucGFyYW1ldGVyLnBhcmFtZXRlck5hbWUsXG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHNzbVBhcmFtZXRlckNvbmZpZ3VyYXRpb25zPy5sZW5ndGggPyBzc21QYXJhbWV0ZXJDb25maWd1cmF0aW9ucyA6IHVuZGVmaW5lZDtcbiAgfVxufVxuIl19
426
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGlzdHJpYnV0aW9uLWNvbmZpZ3VyYXRpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJkaXN0cmlidXRpb24tY29uZmlndXJhdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtQ0FBbUM7QUFHbkMsMkNBQTJDO0FBQzNDLG1FQUE0RTtBQUc1RSw4RUFBOEY7QUFDOUYsMEVBQTBFO0FBRzFFLE1BQU0saUNBQWlDLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQywyREFBMkQsQ0FBQyxDQUFDO0FBRWxILHFEQUFxRDtBQUNyRCxNQUFNLHFCQUFxQixHQUFHLENBQUMsQ0FBQztBQTBVaEM7O0dBRUc7QUFDSCxNQUFlLDZCQUE4QixTQUFRLEdBQUcsQ0FBQyxRQUFRO0lBVy9EOzs7Ozs7T0FNRztJQUNJLEtBQUssQ0FBQyxPQUF1QixFQUFFLEdBQUcsT0FBaUI7UUFDeEQsT0FBTyxHQUFHLENBQUMsS0FBSyxDQUFDLGNBQWMsQ0FBQztZQUM5QixPQUFPO1lBQ1AsT0FBTztZQUNQLFlBQVksRUFBRSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQztZQUNqRCxLQUFLLEVBQUUsSUFBSTtTQUNaLENBQUMsQ0FBQztLQUNKO0lBRUQ7Ozs7O09BS0c7SUFDSSxTQUFTLENBQUMsT0FBdUI7UUFDdEMsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSwyQ0FBMkMsQ0FBQyxDQUFDO0tBQ3pFO0NBQ0Y7QUFFRDs7R0FFRztBQUNILElBQVksaUJBS1g7QUFMRCxXQUFZLGlCQUFpQjtJQUMzQjs7T0FFRztJQUNILGdDQUFXLENBQUE7QUFDYixDQUFDLEVBTFcsaUJBQWlCLGlDQUFqQixpQkFBaUIsUUFLNUI7QUFFRDs7R0FFRztBQUNILE1BQXNCLFVBQVU7O0lBQzlCOzs7O09BSUc7SUFDSSxNQUFNLENBQUMsT0FBTyxDQUFDLFVBQTJCO1FBQy9DLE1BQU0sTUFBTyxT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QkFBK0IsQ0FDckMsZUFBZ0M7WUFFaEMsTUFBTSwwQkFBMEIsR0FBRyxlQUFlLENBQUMsYUFBYSxFQUFFLEdBQUcsQ0FDbkUsQ0FBQyx5QkFBeUIsRUFBa0UsRUFBRSxDQUFDLENBQUM7Z0JBQzlGLFlBQVksRUFBRSx5QkFBeUIsQ0FBQyxVQUFVO2dCQUNsRCxRQUFRLEVBQUUseUJBQXlCLENBQUMsUUFBUTtnQkFDNUMsYUFBYSxFQUFFLHlCQUF5QixDQUFDLFNBQVMsQ0FBQyxhQUFhO2FBQ2pFLENBQUMsQ0FDSCxDQUFDO1lBRUYsT0FBTywwQkFBMEIsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLDBCQUEwQixDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7U0FDcEY7O1lBdldVLHVEQUF5Qjs7Ozs7QUFBekIsOERBQXlCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCAqIGFzIGVjMiBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWMyJztcbmltcG9ydCAqIGFzIGVjciBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZWNyJztcbmltcG9ydCAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IENmbkRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24gfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaW1hZ2VidWlsZGVyJztcbmltcG9ydCAqIGFzIGttcyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCAqIGFzIHNzbSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mtc3NtJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhLCBNZXRob2RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcblxuY29uc3QgRElTVFJJQlVUSU9OX0NPTkZJR1VSQVRJT05fU1lNQk9MID0gU3ltYm9sLmZvcignQGF3cy1jZGsvYXdzLWltYWdlYnVpbGRlci1hbHBoYS5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uJyk7XG5cbi8vIEZhc3QgTGF1bmNoIHJlcXVpcmVzIGF0IGxlYXN0IDYgcGFyYWxsZWwgbGF1bmNoZXMuXG5jb25zdCBNSU5fUEFSQUxMRUxfTEFVTkNIRVMgPSA2O1xuXG4vKipcbiAqIEFuIEVDMiBJbWFnZSBCdWlsZGVyIERpc3RyaWJ1dGlvbiBDb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIElEaXN0cmlidXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgY2RrLklSZXNvdXJjZSB7XG4gIC8qKlxuICAgKiBUaGUgQVJOIG9mIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBAYXR0cmlidXRlXG4gICAqL1xuICByZWFkb25seSBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHcmFudCBjdXN0b20gYWN0aW9ucyB0byB0aGUgZ2l2ZW4gZ3JhbnRlZSBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIFRoZSBwcmluY2lwYWxcbiAgICogQHBhcmFtIGFjdGlvbnMgVGhlIGxpc3Qgb2YgYWN0aW9uc1xuICAgKi9cbiAgZ3JhbnQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUsIC4uLmFjdGlvbnM6IHN0cmluZ1tdKTogaWFtLkdyYW50O1xuXG4gIC8qKlxuICAgKiBHcmFudCByZWFkIHBlcm1pc3Npb25zIHRvIHRoZSBnaXZlbiBncmFudGVlIGZvciB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKi9cbiAgZ3JhbnRSZWFkKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50O1xufVxuXG4vKipcbiAqIFRoZSBsYXVuY2ggcGVybWlzc2lvbnMgZm9yIHRoZSBBTUksIGRlZmluaW5nIHdoaWNoIHByaW5jaXBhbHMgYXJlIGFsbG93ZWQgdG8gYWNjZXNzIHRoZSBBTUlcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBBbWlMYXVuY2hQZXJtaXNzaW9uIHtcbiAgLyoqXG4gICAqIFRoZSBBUk5zIGZvciB0aGUgQVdTIE9yZ2FuaXphdGlvbnMgb3JnYW5pemF0aW9uYWwgdW5pdHMgdG8gc2hhcmUgdGhlIEFNSSB3aXRoXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbmFsVW5pdEFybnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIEFSTnMgZm9yIHRoZSBBV1MgT3JnYW5pemF0aW9uIHRoYXQgeW91IHdhbnQgdG8gc2hhcmUgdGhlIEFNSSB3aXRoXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IG9yZ2FuaXphdGlvbkFybnM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogV2hldGhlciB0byBtYWtlIHRoZSBBTUkgcHVibGljLiBCbG9jayBwdWJsaWMgYWNjZXNzIGZvciBBTUlzIG11c3QgYmUgZGlzYWJsZWQgdG8gbWFrZSB0aGUgQU1JIHB1YmxpYy5cbiAgICpcbiAgICogV0FSTklORzogTWFraW5nIGFuIEFNSSBwdWJsaWMgZXhwb3NlcyBpdCB0byBhbnkgQVdTIGFjY291bnQgZ2xvYmFsbHkuXG4gICAqICBFbnN1cmUgdGhlIEFNSSBkb2VzIG5vdCBjb250YWluOlxuICAgKiAgLSBTZW5zaXRpdmUgZGF0YSBvciBjcmVkZW50aWFsc1xuICAgKiAgLSBQcm9wcmlldGFyeSBzb2Z0d2FyZSBvciBjb25maWd1cmF0aW9uc1xuICAgKiAgLSBJbnRlcm5hbCBuZXR3b3JrIGluZm9ybWF0aW9uIG9yIHNlY3VyaXR5IHNldHRpbmdzXG4gICAqXG4gICAqIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGJsb2NraW5nIHB1YmxpYyBhY2Nlc3MgZm9yIEFNSXMsIHNlZTogW1VuZGVyc3RhbmQgYmxvY2sgcHVibGljIGFjY2VzcyBmb3IgQU1Jc10oaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FXU0VDMi9sYXRlc3QvVXNlckd1aWRlL2Jsb2NrLXB1YmxpYy1hY2Nlc3MtdG8tYW1pcy5odG1sKVxuICAgKlxuICAgKlxuICAgKiBAZGVmYXVsdCBmYWxzZVxuICAgKi9cbiAgcmVhZG9ubHkgaXNQdWJsaWNVc2VyR3JvdXA/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIGFjY291bnQgSURzIHRvIHNoYXJlIHRoZSBBTUkgd2l0aFxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBhY2NvdW50SWRzPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogVGhlIFNTTSBwYXJhbWV0ZXJzIHRvIGNyZWF0ZSBvciB1cGRhdGUgZm9yIHRoZSBkaXN0cmlidXRlZCBBTUlzXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU1NNUGFyYW1ldGVyQ29uZmlndXJhdGlvbnMge1xuICAvKipcbiAgICogVGhlIEFXUyBhY2NvdW50IElEIHRoYXQgd2lsbCBvd24gdGhlIFNTTSBwYXJhbWV0ZXIgaW4gdGhlIGdpdmVuIHJlZ2lvbi4gVGhpcyBtdXN0IGJlIG9uZSBvZiB0aGUgdGFyZ2V0IGFjY291bnRzXG4gICAqIHRoYXQgd2FzIGluY2x1ZGVkIGluIHRoZSBsaXN0IG9mIEFNSSBkaXN0cmlidXRpb24gdGFyZ2V0IGFjY291bnRzXG4gICAqXG4gICAqIEBkZWZhdWx0IFRoZSBjdXJyZW50IGFjY291bnQgaXMgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgYW1pQWNjb3VudD86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRhdGEgdHlwZSBvZiB0aGUgU1NNIHBhcmFtZXRlclxuICAgKlxuICAgKiBAZGVmYXVsdCBzc20uUGFyYW1ldGVyRGF0YVR5cGUuQVdTX0VDMl9JTUFHRVxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YVR5cGU/OiBzc20uUGFyYW1ldGVyRGF0YVR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBTU00gcGFyYW1ldGVyIHRvIGNyZWF0ZSBvciB1cGRhdGVcbiAgICovXG4gIHJlYWRvbmx5IHBhcmFtZXRlcjogc3NtLklTdHJpbmdQYXJhbWV0ZXI7XG59XG5cbi8qKlxuICogVGhlIGxhdW5jaCB0ZW1wbGF0ZSB0byBhcHBseSB0aGUgZGlzdHJpYnV0ZWQgQU1JIHRvXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTGF1bmNoVGVtcGxhdGVDb25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBsYXVuY2ggdGVtcGxhdGUgdG8gYXBwbHkgdGhlIGRpc3RyaWJ1dGVkIEFNSSB0by4gQSBuZXcgbGF1bmNoIHRlbXBsYXRlIHZlcnNpb24gd2lsbCBiZSBjcmVhdGVkIGZvciB0aGVcbiAgICogcHJvdmlkZWQgbGF1bmNoIHRlbXBsYXRlIHdpdGggdGhlIGRpc3RyaWJ1dGVkIEFNSSBhcHBsaWVkLlxuICAgKlxuICAgKiAqTm90ZToqIFRoZSBsYXVuY2ggdGVtcGxhdGUgc2hvdWxkIGV4cG9zZSBhIGBsYXVuY2hUZW1wbGF0ZUlkYC4gVGVtcGxhdGVzXG4gICAqIGltcG9ydGVkIGJ5IG5hbWUgb25seSBhcmUgbm90IHN1cHBvcnRlZC5cbiAgICpcbiAgICovXG4gIHJlYWRvbmx5IGxhdW5jaFRlbXBsYXRlOiBlYzIuSUxhdW5jaFRlbXBsYXRlO1xuXG4gIC8qKlxuICAgKiBUaGUgQVdTIGFjY291bnQgSUQgdGhhdCBvd25zIHRoZSBsYXVuY2ggdGVtcGxhdGVcbiAgICpcbiAgICogQGRlZmF1bHQgVGhlIGN1cnJlbnQgYWNjb3VudCBpcyB1c2VkXG4gICAqL1xuICByZWFkb25seSBhY2NvdW50SWQ/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFdoZXRoZXIgdG8gc2V0IHRoZSBuZXcgbGF1bmNoIHRlbXBsYXRlIHZlcnNpb24gdGhhdCBpcyBjcmVhdGVkIGFzIHRoZSBkZWZhdWx0IGxhdW5jaCB0ZW1wbGF0ZSB2ZXJzaW9uLiBBZnRlclxuICAgKiBjcmVhdGlvbiBvZiB0aGUgbGF1bmNoIHRlbXBsYXRlIHZlcnNpb24gY29udGFpbmluZyB0aGUgZGlzdHJpYnV0ZWQgQU1JLCBpdCB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgc2V0IGFzIHRoZVxuICAgKiBkZWZhdWx0IHZlcnNpb24gZm9yIHRoZSBsYXVuY2ggdGVtcGxhdGUuXG4gICAqXG4gICAqIEBkZWZhdWx0IGZhbHNlXG4gICAqL1xuICByZWFkb25seSBzZXREZWZhdWx0VmVyc2lvbj86IGJvb2xlYW47XG59XG5cbi8qKlxuICogVGhlIEVDMiBGYXN0IExhdW5jaCBjb25maWd1cmF0aW9uIHRvIHVzZSBmb3IgdGhlIFdpbmRvd3MgQU1JXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRmFzdExhdW5jaENvbmZpZ3VyYXRpb24ge1xuICAvKipcbiAgICogV2hldGhlciB0byBlbmFibGUgZmFzdCBsYXVuY2ggZm9yIHRoZSBBTUlcbiAgICpcbiAgICogQGRlZmF1bHQgZmFsc2VcbiAgICovXG4gIHJlYWRvbmx5IGVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBUaGUgbGF1bmNoIHRlbXBsYXRlIHRoYXQgdGhlIGZhc3QtbGF1bmNoIGVuYWJsZWQgV2luZG93cyBBTUkgdXNlcyB3aGVuIGl0IGxhdW5jaGVzIFdpbmRvd3MgaW5zdGFuY2VzIHRvIGNyZWF0ZVxuICAgKiBwcmUtcHJvdmlzaW9uZWQgc25hcHNob3RzXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGxhdW5jaFRlbXBsYXRlPzogZWMyLklMYXVuY2hUZW1wbGF0ZTtcblxuICAvKipcbiAgICogVGhlIG1heGltdW0gbnVtYmVyIG9mIHBhcmFsbGVsIGluc3RhbmNlcyB0aGF0IGFyZSBsYXVuY2hlZCBmb3IgY3JlYXRpbmcgcmVzb3VyY2VzXG4gICAqXG4gICAqIEBkZWZhdWx0IEEgbWF4aW11bSBvZiA2IGluc3RhbmNlcyBhcmUgbGF1bmNoZWQgaW4gcGFyYWxsZWxcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0VuYWJsZUZhc3RMYXVuY2guaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgbWF4UGFyYWxsZWxMYXVuY2hlcz86IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIG51bWJlciBvZiBwcmUtcHJvdmlzaW9uZWQgc25hcHNob3RzIHRvIGtlZXAgb24gaGFuZCBmb3IgYSBmYXN0LWxhdW5jaCBlbmFibGVkIFdpbmRvd3MgQU1JXG4gICAqXG4gICAqIEBkZWZhdWx0IDEwIHNuYXBzaG90cyBhcmUga2VwdCBwcmUtcHJvdmlzaW9uZWRcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0VuYWJsZUZhc3RMYXVuY2guaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgdGFyZ2V0U25hcHNob3RDb3VudD86IG51bWJlcjtcbn1cblxuLyoqXG4gKiBUaGUgcmVnaW9uYWwgZGlzdHJpYnV0aW9uIHNldHRpbmdzIHRvIHVzZSBmb3IgYW4gQU1JIGJ1aWxkXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQW1pRGlzdHJpYnV0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSB0YXJnZXQgcmVnaW9uIHRvIGRpc3RyaWJ1dGUgQU1JcyB0b1xuICAgKlxuICAgKiBAZGVmYXVsdCBUaGUgY3VycmVudCByZWdpb24gaXMgdXNlZFxuICAgKi9cbiAgcmVhZG9ubHkgcmVnaW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgdGFncyB0byBhcHBseSB0byB0aGUgZGlzdHJpYnV0ZWQgQU1Jc1xuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBhbWlUYWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcblxuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBBTUlcbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgYW1pRGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBLTVMga2V5IHRvIGVuY3J5cHQgdGhlIGRpc3RyaWJ1dGVkIEFNSSB3aXRoXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGFtaUttc0tleT86IGttcy5JS2V5O1xuXG4gIC8qKlxuICAgKiBUaGUgbGF1bmNoIHBlcm1pc3Npb25zIGZvciB0aGUgQU1JLCBkZWZpbmluZyB3aGljaCBwcmluY2lwYWxzIGFyZSBhbGxvd2VkIHRvIGFjY2VzcyB0aGUgQU1JXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGFtaUxhdW5jaFBlcm1pc3Npb24/OiBBbWlMYXVuY2hQZXJtaXNzaW9uO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSB0byB1c2UgZm9yIHRoZSBkaXN0cmlidXRlZCBBTUlzXG4gICAqXG4gICAqIEBkZWZhdWx0IEEgbmFtZSBpcyBnZW5lcmF0ZWQgZnJvbSB0aGUgaW1hZ2UgcmVjaXBlIG5hbWVcbiAgICovXG4gIHJlYWRvbmx5IGFtaU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBhY2NvdW50IElEcyB0byBjb3B5IHRoZSBvdXRwdXQgQU1JIHRvXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGFtaVRhcmdldEFjY291bnRJZHM/OiBzdHJpbmdbXTtcblxuICAvKipcbiAgICogVGhlIFNTTSBwYXJhbWV0ZXJzIHRvIGNyZWF0ZSBvciB1cGRhdGUgZm9yIHRoZSBkaXN0cmlidXRlZCBBTUlzXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IHNzbVBhcmFtZXRlcnM/OiBTU01QYXJhbWV0ZXJDb25maWd1cmF0aW9uc1tdO1xuXG4gIC8qKlxuICAgKiBUaGUgbGF1bmNoIHRlbXBsYXRlcyB0byBhcHBseSB0aGUgZGlzdHJpYnV0ZWQgQU1JIHRvXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGxhdW5jaFRlbXBsYXRlcz86IExhdW5jaFRlbXBsYXRlQ29uZmlndXJhdGlvbltdO1xuXG4gIC8qKlxuICAgKiBUaGUgZmFzdCBsYXVuY2ggY29uZmlndXJhdGlvbnMgdG8gdXNlIGZvciBlbmFibGluZyBFQzIgRmFzdCBMYXVuY2ggb24gdGhlIGRpc3RyaWJ1dGVkIFdpbmRvd3MgQU1JXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vQVdTRUMyL2xhdGVzdC9BUElSZWZlcmVuY2UvQVBJX0VuYWJsZUZhc3RMYXVuY2guaHRtbFxuICAgKi9cbiAgcmVhZG9ubHkgZmFzdExhdW5jaENvbmZpZ3VyYXRpb25zPzogRmFzdExhdW5jaENvbmZpZ3VyYXRpb25bXTtcblxuICAvKipcbiAgICogVGhlIExpY2Vuc2UgTWFuYWdlciBsaWNlbnNlIGNvbmZpZ3VyYXRpb24gQVJOcyB0byBhcHBseSB0byB0aGUgZGlzdHJpYnV0ZWQgQU1Jc1xuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSBsaWNlbnNlQ29uZmlndXJhdGlvbkFybnM/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBUaGUgcmVnaW9uYWwgZGlzdHJpYnV0aW9uIHNldHRpbmdzIHRvIHVzZSBmb3IgYSBjb250YWluZXIgYnVpbGRcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb250YWluZXJEaXN0cmlidXRpb24ge1xuICAvKipcbiAgICogVGhlIHRhcmdldCByZWdpb24gdG8gZGlzdHJpYnV0ZSBjb250YWluZXJzIHRvXG4gICAqXG4gICAqIEBkZWZhdWx0IFRoZSBjdXJyZW50IHJlZ2lvbiBpcyB1c2VkXG4gICAqL1xuICByZWFkb25seSByZWdpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXN0aW5hdGlvbiByZXBvc2l0b3J5IHRvIGRpc3RyaWJ1dGUgdGhlIG91dHB1dCBjb250YWluZXIgdG9cbiAgICpcbiAgICogQGRlZmF1bHQgVGhlIHRhcmdldCByZXBvc2l0b3J5IGluIHRoZSBjb250YWluZXIgcmVjaXBlIGlzIHVzZWRcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRhaW5lclJlcG9zaXRvcnk6IFJlcG9zaXRvcnk7XG5cbiAgLyoqXG4gICAqIFRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgY29udGFpbmVyIGltYWdlXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRhaW5lckRlc2NyaXB0aW9uPzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgYWRkaXRpb25hbCB0YWdzIHRvIGFwcGx5IHRvIHRoZSBkaXN0cmlidXRlZCBjb250YWluZXIgaW1hZ2VzXG4gICAqXG4gICAqIEBkZWZhdWx0IE5vbmVcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRhaW5lclRhZ3M/OiBzdHJpbmdbXTtcbn1cblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBjcmVhdGluZyBhIERpc3RyaWJ1dGlvbiBDb25maWd1cmF0aW9uIHJlc291cmNlXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvblByb3BzIHtcbiAgLyoqXG4gICAqIFRoZSBsaXN0IG9mIHRhcmdldCByZWdpb25zIGFuZCBhc3NvY2lhdGVkIEFNSSBkaXN0cmlidXRpb24gc2V0dGluZ3Mgd2hlcmUgdGhlIGJ1aWx0IEFNSSB3aWxsIGJlIGRpc3RyaWJ1dGVkLiBBTUlcbiAgICogZGlzdHJpYnV0aW9ucyBtYXkgYWxzbyBiZSBhZGRlZCB3aXRoIHRoZSBgYWRkQW1pRGlzdHJpYnV0aW9uc2AgbWV0aG9kLlxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lIGlmIGNvbnRhaW5lciBkaXN0cmlidXRpb25zIGFyZSBwcm92aWRlZC4gT3RoZXJ3aXNlLCBhdCBsZWFzdCBvbmUgQU1JIG9yIGNvbnRhaW5lciBkaXN0cmlidXRpb24gbXVzdFxuICAgKiAgICAgICAgICBiZSBwcm92aWRlZFxuICAgKi9cbiAgcmVhZG9ubHkgYW1pRGlzdHJpYnV0aW9ucz86IEFtaURpc3RyaWJ1dGlvbltdO1xuXG4gIC8qKlxuICAgKiBUaGUgbGlzdCBvZiB0YXJnZXQgcmVnaW9ucyBhbmQgYXNzb2NpYXRlZCBjb250YWluZXIgZGlzdHJpYnV0aW9uIHNldHRpbmdzIHdoZXJlIHRoZSBidWlsdCBjb250YWluZXIgd2lsbCBiZVxuICAgKiBkaXN0cmlidXRlZC4gQ29udGFpbmVyIGRpc3RyaWJ1dGlvbnMgbWF5IGFsc28gYmUgYWRkZWQgd2l0aCB0aGUgYGFkZENvbnRhaW5lckRpc3RyaWJ1dGlvbnNgIG1ldGhvZC5cbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZSBpZiBBTUkgZGlzdHJpYnV0aW9ucyBhcmUgcHJvdmlkZWQuIE90aGVyd2lzZSwgYXQgbGVhc3Qgb25lIEFNSSBvciBjb250YWluZXIgZGlzdHJpYnV0aW9uIG11c3QgYmVcbiAgICogICAgICAgICAgcHJvdmlkZWRcbiAgICovXG4gIHJlYWRvbmx5IGNvbnRhaW5lckRpc3RyaWJ1dGlvbnM/OiBDb250YWluZXJEaXN0cmlidXRpb25bXTtcblxuICAvKipcbiAgICogVGhlIG5hbWUgb2YgdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uLlxuICAgKlxuICAgKiBAZGVmYXVsdCBBIG5hbWUgaXMgZ2VuZXJhdGVkXG4gICAqL1xuICByZWFkb25seSBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZT86IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgTm9uZVxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0YWdzIHRvIGFwcGx5IHRvIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBAZGVmYXVsdCBOb25lXG4gICAqL1xuICByZWFkb25seSB0YWdzPzogeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfTtcbn1cblxuLyoqXG4gKiBBIG5ldyBvciBpbXBvcnRlZCBEaXN0cmlidXRpb24gQ29uZmlndXJhdGlvblxuICovXG5hYnN0cmFjdCBjbGFzcyBEaXN0cmlidXRpb25Db25maWd1cmF0aW9uQmFzZSBleHRlbmRzIGNkay5SZXNvdXJjZSBpbXBsZW1lbnRzIElEaXN0cmlidXRpb25Db25maWd1cmF0aW9uIHtcbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uXG4gICAqL1xuICBhYnN0cmFjdCByZWFkb25seSBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uQXJuOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvblxuICAgKi9cbiAgYWJzdHJhY3QgcmVhZG9ubHkgZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbk5hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogR3JhbnQgY3VzdG9tIGFjdGlvbnMgdG8gdGhlIGdpdmVuIGdyYW50ZWUgZm9yIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvblxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKiBAcGFyYW0gYWN0aW9ucyBUaGUgbGlzdCBvZiBhY3Rpb25zXG4gICAqL1xuICBwdWJsaWMgZ3JhbnQoZ3JhbnRlZTogaWFtLklHcmFudGFibGUsIC4uLmFjdGlvbnM6IHN0cmluZ1tdKTogaWFtLkdyYW50IHtcbiAgICByZXR1cm4gaWFtLkdyYW50LmFkZFRvUHJpbmNpcGFsKHtcbiAgICAgIGdyYW50ZWUsXG4gICAgICBhY3Rpb25zLFxuICAgICAgcmVzb3VyY2VBcm5zOiBbdGhpcy5kaXN0cmlidXRpb25Db25maWd1cmF0aW9uQXJuXSxcbiAgICAgIHNjb3BlOiB0aGlzLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHJlYWQgcGVybWlzc2lvbnMgdG8gdGhlIGdpdmVuIGdyYW50ZWUgZm9yIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvblxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgVGhlIHByaW5jaXBhbFxuICAgKi9cbiAgcHVibGljIGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgcmV0dXJuIHRoaXMuZ3JhbnQoZ3JhbnRlZSwgJ2ltYWdlYnVpbGRlcjpHZXREaXN0cmlidXRpb25Db25maWd1cmF0aW9uJyk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgc2VydmljZSBpbiB3aGljaCBhIGNvbnRhaW5lciBzaG91bGQgYmUgcmVnaXN0ZXJlZFxuICovXG5leHBvcnQgZW51bSBSZXBvc2l0b3J5U2VydmljZSB7XG4gIC8qKlxuICAgKiBJbmRpY2F0ZXMgdGhlIGNvbnRhaW5lciBzaG91bGQgYmUgcmVnaXN0ZXJlZCBpbiBFQ1JcbiAgICovXG4gIEVDUiA9ICdFQ1InLFxufVxuXG4vKipcbiAqIEEgY29udGFpbmVyIHJlcG9zaXRvcnkgdXNlZCB0byBkaXN0cmlidXRlIGNvbnRhaW5lciBpbWFnZXMgaW4gRUMyIEltYWdlIEJ1aWxkZXJcbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIFJlcG9zaXRvcnkge1xuICAvKipcbiAgICogVGhlIEVDUiByZXBvc2l0b3J5IHRvIHVzZSBhcyB0aGUgdGFyZ2V0IGNvbnRhaW5lciByZXBvc2l0b3J5XG4gICAqXG4gICAqIEBwYXJhbSByZXBvc2l0b3J5IFRoZSBFQ1IgcmVwb3NpdG9yeSB0byB1c2VcbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUVjcihyZXBvc2l0b3J5OiBlY3IuSVJlcG9zaXRvcnkpOiBSZXBvc2l0b3J5IHtcbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBSZXBvc2l0b3J5IHtcbiAgICAgIHB1YmxpYyByZWFkb25seSByZXBvc2l0b3J5TmFtZTogc3RyaW5nID0gcmVwb3NpdG9yeS5yZXBvc2l0b3J5TmFtZTtcbiAgICAgIHB1YmxpYyByZWFkb25seSBzZXJ2aWNlOiBSZXBvc2l0b3J5U2VydmljZSA9IFJlcG9zaXRvcnlTZXJ2aWNlLkVDUjtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBjb250YWluZXIgcmVwb3NpdG9yeSB3aGVyZSB0aGUgb3V0cHV0IGNvbnRhaW5lciBpbWFnZSBpcyBzdG9yZWRcbiAgICovXG4gIGFic3RyYWN0IHJlYWRvbmx5IHJlcG9zaXRvcnlOYW1lOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBzZXJ2aWNlIGluIHdoaWNoIHRoZSBjb250YWluZXIgcmVwb3NpdG9yeSBpcyBob3N0ZWRcbiAgICovXG4gIGFic3RyYWN0IHJlYWRvbmx5IHNlcnZpY2U6IFJlcG9zaXRvcnlTZXJ2aWNlO1xufVxuXG4vKipcbiAqIFJlcHJlc2VudHMgYW4gRUMyIEltYWdlIEJ1aWxkZXIgRGlzdHJpYnV0aW9uIENvbmZpZ3VyYXRpb24uXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vaW1hZ2VidWlsZGVyL2xhdGVzdC91c2VyZ3VpZGUvbWFuYWdlLWRpc3RyaWJ1dGlvbi1zZXR0aW5ncy5odG1sXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBEaXN0cmlidXRpb25Db25maWd1cmF0aW9uIGV4dGVuZHMgRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbkJhc2Uge1xuICAvKiogVW5pcXVlbHkgaWRlbnRpZmllcyB0aGlzIGNsYXNzLiAqL1xuICBwdWJsaWMgc3RhdGljIHJlYWRvbmx5IFBST1BFUlRZX0lOSkVDVElPTl9JRDogc3RyaW5nID0gJ0Bhd3MtY2RrLmF3cy1pbWFnZWJ1aWxkZXItYWxwaGEuRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbic7XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBnaXZlbiBpdHMgQVJOLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbkFybihcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbkFybjogc3RyaW5nLFxuICApOiBJRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbiB7XG4gICAgY29uc3QgZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbk5hbWUgPSBjZGsuU3RhY2sub2Yoc2NvcGUpLnNwbGl0QXJuKFxuICAgICAgZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbkFybixcbiAgICAgIGNkay5Bcm5Gb3JtYXQuU0xBU0hfUkVTT1VSQ0VfTkFNRSxcbiAgICApLnJlc291cmNlTmFtZSE7XG5cbiAgICBjbGFzcyBJbXBvcnQgZXh0ZW5kcyBEaXN0cmlidXRpb25Db25maWd1cmF0aW9uQmFzZSB7XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbkFybiA9IGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25Bcm47XG4gICAgICBwdWJsaWMgcmVhZG9ubHkgZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbk5hbWUgPSBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZTtcbiAgICB9XG5cbiAgICByZXR1cm4gbmV3IEltcG9ydChzY29wZSwgaWQpO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvbiBnaXZlbiBpdHMgbmFtZS4gVGhlIHByb3ZpZGVkIG5hbWUgbXVzdCBiZSBub3JtYWxpemVkIGJ5IGNvbnZlcnRpbmdcbiAgICogYWxsIGFscGhhYmV0aWNhbCBjaGFyYWN0ZXJzIHRvIGxvd2VyY2FzZSwgYW5kIHJlcGxhY2luZyBhbGwgc3BhY2VzIGFuZCB1bmRlcnNjb3JlcyB3aXRoIGh5cGhlbnMuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21EaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZShcbiAgICBzY29wZTogQ29uc3RydWN0LFxuICAgIGlkOiBzdHJpbmcsXG4gICAgZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbk5hbWU6IHN0cmluZyxcbiAgKTogSURpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24ge1xuICAgIHJldHVybiB0aGlzLmZyb21EaXN0cmlidXRpb25Db25maWd1cmF0aW9uQXJuKFxuICAgICAgc2NvcGUsXG4gICAgICBpZCxcbiAgICAgIGNkay5TdGFjay5vZihzY29wZSkuZm9ybWF0QXJuKHtcbiAgICAgICAgc2VydmljZTogJ2ltYWdlYnVpbGRlcicsXG4gICAgICAgIHJlc291cmNlOiAnZGlzdHJpYnV0aW9uLWNvbmZpZ3VyYXRpb24nLFxuICAgICAgICByZXNvdXJjZU5hbWU6IGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25OYW1lLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm4gd2hldGhlciB0aGUgZ2l2ZW4gb2JqZWN0IGlzIGEgRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbi5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgaXNEaXN0cmlidXRpb25Db25maWd1cmF0aW9uKHg6IGFueSk6IHggaXMgRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbiB7XG4gICAgcmV0dXJuIHggIT09IG51bGwgJiYgdHlwZW9mIHggPT09ICdvYmplY3QnICYmIERJU1RSSUJVVElPTl9DT05GSUdVUkFUSU9OX1NZTUJPTCBpbiB4O1xuICB9XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbkFybjogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUgbmFtZSBvZiB0aGUgZGlzdHJpYnV0aW9uIGNvbmZpZ3VyYXRpb25cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBkaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZTogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgYW1pRGlzdHJpYnV0aW9uc0J5UmVnaW9uOiB7IFtyZWdpb246IHN0cmluZ106IEFtaURpc3RyaWJ1dGlvbiB9ID0ge307XG4gIHByaXZhdGUgcmVhZG9ubHkgY29udGFpbmVyRGlzdHJpYnV0aW9uc0J5UmVnaW9uOiB7XG4gICAgW3JlZ2lvbjogc3RyaW5nXTogQ29udGFpbmVyRGlzdHJpYnV0aW9uO1xuICB9ID0ge307XG5cbiAgcHVibGljIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBEaXN0cmlidXRpb25Db25maWd1cmF0aW9uUHJvcHMgPSB7fSkge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwge1xuICAgICAgcGh5c2ljYWxOYW1lOlxuICAgICAgICBwcm9wcy5kaXN0cmlidXRpb25Db25maWd1cmF0aW9uTmFtZSA/P1xuICAgICAgICBjZGsuTGF6eS5zdHJpbmcoe1xuICAgICAgICAgIHByb2R1Y2U6ICgpID0+XG4gICAgICAgICAgICBjZGsuTmFtZXMudW5pcXVlUmVzb3VyY2VOYW1lKHRoaXMsIHtcbiAgICAgICAgICAgICAgbWF4TGVuZ3RoOiAxMjgsXG4gICAgICAgICAgICAgIHNlcGFyYXRvcjogJy0nLFxuICAgICAgICAgICAgICBhbGxvd2VkU3BlY2lhbENoYXJhY3RlcnM6ICctJyxcbiAgICAgICAgICAgIH0pLnRvTG93ZXJDYXNlKCksIC8vIEVuZm9yY2UgbG93ZXJjYXNlIGZvciB0aGUgYXV0by1nZW5lcmF0ZWQgZmFsbGJhY2tcbiAgICAgICAgfSksXG4gICAgfSk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgRElTVFJJQlVUSU9OX0NPTkZJR1VSQVRJT05fU1lNQk9MLCB7IHZhbHVlOiB0cnVlIH0pO1xuXG4gICAgdGhpcy52YWxpZGF0ZURpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25OYW1lKCk7XG5cbiAgICB0aGlzLmFkZEFtaURpc3RyaWJ1dGlvbnMoLi4uKHByb3BzLmFtaURpc3RyaWJ1dGlvbnMgPz8gW10pKTtcbiAgICB0aGlzLmFkZENvbnRhaW5lckRpc3RyaWJ1dGlvbnMoLi4uKHByb3BzLmNvbnRhaW5lckRpc3RyaWJ1dGlvbnMgPz8gW10pKTtcblxuICAgIGNvbnN0IGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24gPSBuZXcgQ2ZuRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbih0aGlzLCAnUmVzb3VyY2UnLCB7XG4gICAgICBuYW1lOiB0aGlzLnBoeXNpY2FsTmFtZSxcbiAgICAgIGRlc2NyaXB0aW9uOiBwcm9wcy5kZXNjcmlwdGlvbixcbiAgICAgIGRpc3RyaWJ1dGlvbnM6IGNkay5MYXp5LmFueSh7IHByb2R1Y2U6ICgpID0+IHRoaXMucmVuZGVyRGlzdHJpYnV0aW9ucygpIH0pLFxuICAgICAgdGFnczogcHJvcHMudGFncyxcbiAgICB9KTtcblxuICAgIHRoaXMuZGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbk5hbWUgPSB0aGlzLmdldFJlc291cmNlTmFtZUF0dHJpYnV0ZShkaXN0cmlidXRpb25Db25maWd1cmF0aW9uLmF0dHJOYW1lKTtcbiAgICB0aGlzLmRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25Bcm4gPSB0aGlzLmdldFJlc291cmNlQXJuQXR0cmlidXRlKGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24uYXR0ckFybiwge1xuICAgICAgc2VydmljZTogJ2ltYWdlYnVpbGRlcicsXG4gICAgICByZXNvdXJjZTogJ2Rpc3RyaWJ1dGlvbi1jb25maWd1cmF0aW9uJyxcbiAgICAgIHJlc291cmNlTmFtZTogdGhpcy5waHlzaWNhbE5hbWUsXG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBBTUkgZGlzdHJpYnV0aW9uIHNldHRpbmdzIHRvIHRoZSBkaXN0cmlidXRpb24gY29uZmlndXJhdGlvblxuICAgKlxuICAgKiBAcGFyYW0gYW1pRGlzdHJpYnV0aW9ucyBUaGUgbGlzdCBvZiBBTUkgZGlzdHJpYnV0aW9uIHNldHRpbmdzIHRvIGFwcGx5XG4gICAqL1xuICBATWV0aG9kTWV0YWRhdGEoKVxuICBwdWJsaWMgYWRkQW1pRGlzdHJpYnV0aW9ucyguLi5hbWlEaXN0cmlidXRpb25zOiBBbWlEaXN0cmlidXRpb25bXSk6IHZvaWQge1xuICAgIGFtaURpc3RyaWJ1dGlvbnMuZm9yRWFjaCgoYW1pRGlzdHJpYnV0aW9uKSA9PiB7XG4gICAgICBjb25zdCByZWdpb24gPSBhbWlEaXN0cmlidXRpb24ucmVnaW9uID8/IGNkay5TdGFjay5vZih0aGlzKS5yZWdpb247XG4gICAgICBpZiAodGhpcy5hbWlEaXN0cmlidXRpb25zQnlSZWdpb25bcmVnaW9uXSkge1xuICAgICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBgZHVwbGljYXRlIEFNSSBkaXN0cmlidXRpb24gZm91bmQgZm9yIHJlZ2lvbiBcIiR7cmVnaW9ufVwiOyBvbmx5IG9uZSBBTUkgZGlzdHJpYnV0aW9uIHBlciByZWdpb24gaXMgYWxsb3dlZGAsXG4gICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5hbWlEaXN0cmlidXRpb25zQnlSZWdpb25bcmVnaW9uXSA9IGFtaURpc3RyaWJ1dGlvbjtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBZGRzIGNvbnRhaW5lciBkaXN0cmlidXRpb24gc2V0dGluZ3MgdG8gdGhlIGRpc3RyaWJ1dGlvbiBjb25maWd1cmF0aW9uXG4gICAqXG4gICAqIEBwYXJhbSBjb250YWluZXJEaXN0cmlidXRpb25zIFRoZSBsaXN0IG9mIGNvbnRhaW5lciBkaXN0cmlidXRpb24gc2V0dGluZ3MgdG8gYXBwbHlcbiAgICovXG4gIEBNZXRob2RNZXRhZGF0YSgpXG4gIHB1YmxpYyBhZGRDb250YWluZXJEaXN0cmlidXRpb25zKC4uLmNvbnRhaW5lckRpc3RyaWJ1dGlvbnM6IENvbnRhaW5lckRpc3RyaWJ1dGlvbltdKTogdm9pZCB7XG4gICAgY29udGFpbmVyRGlzdHJpYnV0aW9ucy5mb3JFYWNoKChjb250YWluZXJEaXN0cmlidXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHJlZ2lvbiA9IGNvbnRhaW5lckRpc3RyaWJ1dGlvbi5yZWdpb24gPz8gY2RrLlN0YWNrLm9mKHRoaXMpLnJlZ2lvbjtcbiAgICAgIGlmICh0aGlzLmNvbnRhaW5lckRpc3RyaWJ1dGlvbnNCeVJlZ2lvbltyZWdpb25dKSB7XG4gICAgICAgIHRocm93IG5ldyBjZGsuVmFsaWRhdGlvbkVycm9yKFxuICAgICAgICAgIGBkdXBsaWNhdGUgQ29udGFpbmVyIGRpc3RyaWJ1dGlvbiBmb3VuZCBmb3IgcmVnaW9uIFwiJHtyZWdpb259XCI7IG9ubHkgb25lIENvbnRhaW5lciBkaXN0cmlidXRpb24gcGVyIHJlZ2lvbiBpcyBhbGxvd2VkYCxcbiAgICAgICAgICB0aGlzLFxuICAgICAgICApO1xuICAgICAgfVxuXG4gICAgICB0aGlzLmNvbnRhaW5lckRpc3RyaWJ1dGlvbnNCeVJlZ2lvbltyZWdpb25dID0gY29udGFpbmVyRGlzdHJpYnV0aW9uO1xuICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSB2YWxpZGF0ZURpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25OYW1lKCkge1xuICAgIGlmIChjZGsuVG9rZW4uaXNVbnJlc29sdmVkKHRoaXMucGh5c2ljYWxOYW1lKSkge1xuICAgICAgcmV0dXJuOyAvLyBDYW5ub3QgdmFsaWRhdGUgdW5yZXNvbHZlZCB0b2tlbnMsIGdpdmVuIHRoZWlyIGFjdHVhbCB2YWx1ZSBpcyByZW5kZXJlZCBhdCBkZXBsb3ltZW50IHRpbWVcbiAgICB9XG5cbiAgICBpZiAodGhpcy5waHlzaWNhbE5hbWUubGVuZ3RoID4gMTI4KSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcignVGhlIGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25OYW1lIGNhbm5vdCBiZSBsb25nZXIgdGhhbiAxMjggY2hhcmFjdGVycycsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZS5pbmNsdWRlcygnICcpKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcignVGhlIGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25OYW1lIGNhbm5vdCBjb250YWluIHNwYWNlcycsIHRoaXMpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnBoeXNpY2FsTmFtZS5pbmNsdWRlcygnXycpKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcignVGhlIGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25OYW1lIGNhbm5vdCBjb250YWluIHVuZGVyc2NvcmVzJywgdGhpcyk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMucGh5c2ljYWxOYW1lICE9PSB0aGlzLnBoeXNpY2FsTmFtZS50b0xvd2VyQ2FzZSgpKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcignVGhlIGRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb25OYW1lIG11c3QgYmUgbG93ZXJjYXNlJywgdGhpcyk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlbmRlcnMgdGhlIEFNSSBhbmQgY29udGFpbmVyIGRpc3RyaWJ1dGlvbnMgcHJvdmlkZWQgYXMgaW5wdXQgdG8gdGhlIGNvbnN0cnVjdCwgaW50byB0aGUgYERpc3RyaWJ1dGlvbltdYCBzdHJ1Y3R1cmVcbiAgICogdGhhdCBDZm5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uIGV4cGVjdHMgdG8gcmVjZWl2ZS4gRGlzdHJpYnV0aW9ucyBwcm92aWRlZCB0byBDZm5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uIG11c3RcbiAgICogbWFwIHRvIGEgdW5pcXVlIHJlZ2lvbiBwZXIgZW50cnkgaW4gdGhlIGxpc3QgLSB0aGlzIHJlbmRlciBmdW5jdGlvbiBhbHNvIGhhbmRsZXMgY29tYmluaW5nIEFNSSBhbmQgY29udGFpbmVyXG4gICAqIGRpc3RyaWJ1dGlvbnMgaW4gdGhlIHNhbWUgcmVnaW9uIGludG8gYSBzaW5nbGUgZW50cnkuXG4gICAqXG4gICAqIFRoaXMgaXMgcmVuZGVyZWQgYXQgc3ludGhlc2lzIHRpbWUsIGFzIHVzZXJzIGNhbiBhZGQgYWRkaXRpb25hbCBBTUkgYW5kIGNvbnRhaW5lciBkaXN0cmlidXRpb25zIHdpdGhcbiAgICogYGFkZEFtaURpc3RyaWJ1dGlvbnNgIGFuZCBgYWRkQ29udGFpbmVyRGlzdHJpYnV0aW9uc2AsIGFmdGVyIHRoZSBjb25zdHJ1Y3QgaGFzIGJlZW4gaW5zdGFudGlhdGVkLlxuICAgKlxuICAgKiBAcHJpdmF0ZVxuICAgKi9cbiAgcHJpdmF0ZSByZW5kZXJEaXN0cmlidXRpb25zKCk6IENmbkRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24uRGlzdHJpYnV0aW9uUHJvcGVydHlbXSB7XG4gICAgaWYgKFxuICAgICAgIU9iamVjdC5rZXlzKHRoaXMuYW1pRGlzdHJpYnV0aW9uc0J5UmVnaW9uKS5sZW5ndGggJiZcbiAgICAgICFPYmplY3Qua2V5cyh0aGlzLmNvbnRhaW5lckRpc3RyaWJ1dGlvbnNCeVJlZ2lvbikubGVuZ3RoXG4gICAgKSB7XG4gICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcignWW91IG11c3Qgc3BlY2lmeSBhdCBsZWFzdCBvbmUgQU1JIG9yIGNvbnRhaW5lciBkaXN0cmlidXRpb24nLCB0aGlzKTtcbiAgICB9XG5cbiAgICBjb25zdCBkaXN0cmlidXRpb25CeVJlZ2lvbjogeyBbcmVnaW9uOiBzdHJpbmddOiBDZm5EaXN0cmlidXRpb25Db25maWd1cmF0aW9uLkRpc3RyaWJ1dGlvblByb3BlcnR5IH0gPSB7fTtcblxuICAgIGZvciAoY29uc3QgW3JlZ2lvbiwgZGlzdHJpYnV0aW9uXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmFtaURpc3RyaWJ1dGlvbnNCeVJlZ2lvbikpIHtcbiAgICAgIGRpc3RyaWJ1dGlvbkJ5UmVnaW9uW3JlZ2lvbl0gPSB7XG4gICAgICAgIHJlZ2lvbixcbiAgICAgICAgYW1pRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbjogdGhpcy5idWlsZEFtaURpc3RyaWJ1dGlvbihkaXN0cmlidXRpb24pLFxuICAgICAgICBmYXN0TGF1bmNoQ29uZmlndXJhdGlvbnM6IHRoaXMuYnVpbGRGYXN0TGF1bmNoQ29uZmlndXJhdGlvbnMoZGlzdHJpYnV0aW9uKSxcbiAgICAgICAgbGF1bmNoVGVtcGxhdGVDb25maWd1cmF0aW9uczogdGhpcy5idWlsZExhdW5jaFRlbXBsYXRlQ29uZmlndXJhdGlvbnMoZGlzdHJpYnV0aW9uKSxcbiAgICAgICAgc3NtUGFyYW1ldGVyQ29uZmlndXJhdGlvbnM6IHRoaXMuYnVpbGRTc21QYXJhbWV0ZXJDb25maWd1cmF0aW9ucyhkaXN0cmlidXRpb24pLFxuICAgICAgICBsaWNlbnNlQ29uZmlndXJhdGlvbkFybnM6IHRoaXMuYnVpbGRMaWNlbnNlQ29uZmlndXJhdGlvbkFybnMoZGlzdHJpYnV0aW9uKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgZm9yIChjb25zdCBbcmVnaW9uLCBjb250YWluZXJEaXN0cmlidXRpb25dIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuY29udGFpbmVyRGlzdHJpYnV0aW9uc0J5UmVnaW9uKSkge1xuICAgICAgZGlzdHJpYnV0aW9uQnlSZWdpb25bcmVnaW9uXSA9IHtcbiAgICAgICAgLi4uKGRpc3RyaWJ1dGlvbkJ5UmVnaW9uW3JlZ2lvbl0gPz8ge30pLFxuICAgICAgICByZWdpb24sXG4gICAgICAgIGNvbnRhaW5lckRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb246IHRoaXMuYnVpbGRDb250YWluZXJEaXN0cmlidXRpb24oY29udGFpbmVyRGlzdHJpYnV0aW9uKSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgY29uc3QgZGlzdHJpYnV0aW9ucyA9IE9iamVjdC52YWx1ZXMoZGlzdHJpYnV0aW9uQnlSZWdpb24pO1xuXG4gICAgZGlzdHJpYnV0aW9ucy5mb3JFYWNoKChkaXN0cmlidXRpb24pID0+IHtcbiAgICAgIGNvbnN0IHsgcmVnaW9uOiBfLCAuLi5kaXN0cmlidXRpb25XaXRob3V0UmVnaW9uIH0gPSBkaXN0cmlidXRpb247XG4gICAgICBpZiAoIU9iamVjdC5lbnRyaWVzKGRpc3RyaWJ1dGlvbldpdGhvdXRSZWdpb24pLnNvbWUoKFtfXywgdmFsdWVdKSA9PiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSkge1xuICAgICAgICB0aHJvdyBuZXcgY2RrLlZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgICBgYXQgbGVhc3Qgb25lIGRpc3RyaWJ1dGlvbiBwcm9wZXJ0eSBtdXN0IGJlIHNldCBmb3IgcmVnaW9uIFwiJHtkaXN0cmlidXRpb24ucmVnaW9ufVwiYCxcbiAgICAgICAgICB0aGlzLFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGRpc3RyaWJ1dGlvbnM7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkQW1pRGlzdHJpYnV0aW9uKGFtaURpc3RyaWJ1dGlvbjogQW1pRGlzdHJpYnV0aW9uKTogb2JqZWN0IHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBsYXVuY2hQZXJtaXNzaW9ucyA9IHRoaXMuYnVpbGRBbWlMYXVuY2hQZXJtaXNzaW9ucyhhbWlEaXN0cmlidXRpb24pO1xuICAgIGNvbnN0IGFtaURpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24gPSB7XG4gICAgICAuLi4oT2JqZWN0LmtleXMoYW1pRGlzdHJpYnV0aW9uLmFtaVRhZ3MgPz8ge30pLmxlbmd0aCAmJiB7IEFtaVRhZ3M6IGFtaURpc3RyaWJ1dGlvbi5hbWlUYWdzIH0pLFxuICAgICAgLi4uKGFtaURpc3RyaWJ1dGlvbi5hbWlEZXNjcmlwdGlvbiAhPT0gdW5kZWZpbmVkICYmIHsgRGVzY3JpcHRpb246IGFtaURpc3RyaWJ1dGlvbi5hbWlEZXNjcmlwdGlvbiB9KSxcbiAgICAgIC4uLihhbWlEaXN0cmlidXRpb24uYW1pS21zS2V5ICE9PSB1bmRlZmluZWQgJiYgeyBLbXNLZXlJZDogYW1pRGlzdHJpYnV0aW9uLmFtaUttc0tleS5rZXlBcm4gfSksXG4gICAgICAuLi4obGF1bmNoUGVybWlzc2lvbnMgJiYgeyBMYXVuY2hQZXJtaXNzaW9uQ29uZmlndXJhdGlvbjogbGF1bmNoUGVybWlzc2lvbnMgfSksXG4gICAgICAuLi4oYW1pRGlzdHJpYnV0aW9uLmFtaU5hbWUgIT09IHVuZGVmaW5lZCAmJiB7IE5hbWU6IGFtaURpc3RyaWJ1dGlvbi5hbWlOYW1lIH0pLFxuICAgICAgLi4uKGFtaURpc3RyaWJ1dGlvbi5hbWlUYXJnZXRBY2NvdW50SWRzICE9PSB1bmRlZmluZWQgJiYge1xuICAgICAgICBUYXJnZXRBY2NvdW50SWRzOiBhbWlEaXN0cmlidXRpb24uYW1pVGFyZ2V0QWNjb3VudElkcyxcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMoYW1pRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbikubGVuZ3RoID8gYW1pRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbiA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRDb250YWluZXJEaXN0cmlidXRpb24oY29udGFpbmVyRGlzdHJpYnV0aW9uOiBDb250YWluZXJEaXN0cmlidXRpb24pOiBvYmplY3QgfCB1bmRlZmluZWQge1xuICAgIHJldHVybiB7XG4gICAgICBDb250YWluZXJUYWdzOiBjb250YWluZXJEaXN0cmlidXRpb24uY29udGFpbmVyVGFncyxcbiAgICAgIERlc2NyaXB0aW9uOiBjb250YWluZXJEaXN0cmlidXRpb24uY29udGFpbmVyRGVzY3JpcHRpb24sXG4gICAgICBUYXJnZXRSZXBvc2l0b3J5OiB7XG4gICAgICAgIFJlcG9zaXRvcnlOYW1lOiBjb250YWluZXJEaXN0cmlidXRpb24uY29udGFpbmVyUmVwb3NpdG9yeS5yZXBvc2l0b3J5TmFtZSxcbiAgICAgICAgU2VydmljZTogY29udGFpbmVyRGlzdHJpYnV0aW9uLmNvbnRhaW5lclJlcG9zaXRvcnkuc2VydmljZSxcbiAgICAgIH0sXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRBbWlMYXVuY2hQZXJtaXNzaW9ucyhhbWlEaXN0cmlidXRpb246IEFtaURpc3RyaWJ1dGlvbik6IG9iamVjdCB8IHVuZGVmaW5lZCB7XG4gICAgaWYgKGFtaURpc3RyaWJ1dGlvbi5hbWlMYXVuY2hQZXJtaXNzaW9uPy5pc1B1YmxpY1VzZXJHcm91cCkge1xuICAgICAgY2RrLkFubm90YXRpb25zLm9mKHRoaXMpLmFkZFdhcm5pbmcoXG4gICAgICAgICdBTUkgaXMgY29uZmlndXJlZCBmb3IgcHVibGljIGFjY2VzcywgbWFraW5nIGl0IGF2YWlsYWJsZSB0byBhbnkgQVdTIGFjY291bnQgZ2xvYmFsbHkuICcgK1xuICAgICAgICAgICdFbnN1cmUgbm8gc2Vuc2l0aXZlIGRhdGEsIGNyZWRlbnRpYWxzLCBvciBwcm9wcmlldGFyeSBjb25maWd1cmF0aW9ucyBhcmUgaW5jbHVkZWQuICcgK1xuICAgICAgICAgIFwiUmV2aWV3IHlvdXIgb3JnYW5pemF0aW9uJ3Mgc2VjdXJpdHkgcG9saWNpZXMgYmVmb3JlIGRlcGxveWluZyBwdWJsaWMgQU1Jcy5cIixcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgbGF1bmNoUGVybWlzc2lvbnMgPSB7XG4gICAgICAuLi4oYW1pRGlzdHJpYnV0aW9uLmFtaUxhdW5jaFBlcm1pc3Npb24/Lm9yZ2FuaXphdGlvbmFsVW5pdEFybnMgIT09IHVuZGVmaW5lZCAmJiB7XG4gICAgICAgIE9yZ2FuaXphdGlvbmFsVW5pdEFybnM6IGFtaURpc3RyaWJ1dGlvbi5hbWlMYXVuY2hQZXJtaXNzaW9uPy5vcmdhbml6YXRpb25hbFVuaXRBcm5zLFxuICAgICAgfSksXG4gICAgICAuLi4oYW1pRGlzdHJpYnV0aW9uLmFtaUxhdW5jaFBlcm1pc3Npb24/Lm9yZ2FuaXphdGlvbkFybnMgIT09IHVuZGVmaW5lZCAmJiB7XG4gICAgICAgIE9yZ2FuaXphdGlvbkFybnM6IGFtaURpc3RyaWJ1dGlvbi5hbWlMYXVuY2hQZXJtaXNzaW9uPy5vcmdhbml6YXRpb25Bcm5zLFxuICAgICAgfSksXG4gICAgICAuLi4oYW1pRGlzdHJpYnV0aW9uLmFtaUxhdW5jaFBlcm1pc3Npb24/LmlzUHVibGljVXNlckdyb3VwICYmIHtcbiAgICAgICAgVXNlckdyb3VwczogWydhbGwnXSxcbiAgICAgIH0pLFxuICAgICAgLi4uKGFtaURpc3RyaWJ1dGlvbi5hbWlMYXVuY2hQZXJtaXNzaW9uPy5hY2NvdW50SWRzICE9PSB1bmRlZmluZWQgJiYge1xuICAgICAgICBVc2VySWRzOiBhbWlEaXN0cmlidXRpb24uYW1pTGF1bmNoUGVybWlzc2lvbj8uYWNjb3VudElkcyxcbiAgICAgIH0pLFxuICAgIH07XG5cbiAgICByZXR1cm4gT2JqZWN0LmtleXMobGF1bmNoUGVybWlzc2lvbnMpLmxlbmd0aCA/IGxhdW5jaFBlcm1pc3Npb25zIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZhc3RMYXVuY2hDb25maWd1cmF0aW9ucyhcbiAgICBhbWlEaXN0cmlidXRpb246IEFtaURpc3RyaWJ1dGlvbixcbiAgKTogQ2ZuRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbi5GYXN0TGF1bmNoQ29uZmlndXJhdGlvblByb3BlcnR5W10gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGZhc3RMYXVuY2hDb25maWd1cmF0aW9ucyA9IGFtaURpc3RyaWJ1dGlvbi5mYXN0TGF1bmNoQ29uZmlndXJhdGlvbnM/Lm1hcChcbiAgICAgIChmYXN0TGF1bmNoQ29uZmlndXJhdGlvbik6IENmbkRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24uRmFzdExhdW5jaENvbmZpZ3VyYXRpb25Qcm9wZXJ0eSA9PiB7XG4gICAgICAgIGlmIChcbiAgICAgICAgICBmYXN0TGF1bmNoQ29uZmlndXJhdGlvbi5tYXhQYXJhbGxlbExhdW5jaGVzICE9PSB1bmRlZmluZWQgJiZcbiAgICAgICAgICAhY2RrLlRva2VuLmlzVW5yZXNvbHZlZChmYXN0TGF1bmNoQ29uZmlndXJhdGlvbi5tYXhQYXJhbGxlbExhdW5jaGVzKSAmJlxuICAgICAgICAgIGZhc3RMYXVuY2hDb25maWd1cmF0aW9uLm1heFBhcmFsbGVsTGF1bmNoZXMgPCBNSU5fUEFSQUxMRUxfTEFVTkNIRVNcbiAgICAgICAgKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgICBgeW91IG11c3Qgc3BlY2lmeSBhIG1heGltdW0gcGFyYWxsZWwgbGF1bmNoIGNvdW50IG9mIGF0IGxlYXN0ICR7TUlOX1BBUkFMTEVMX0xBVU5DSEVTfWAsXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBsYXVuY2hUZW1wbGF0ZSA9IGZhc3RMYXVuY2hDb25maWd1cmF0aW9uLmxhdW5jaFRlbXBsYXRlO1xuICAgICAgICBjb25zdCB1c2VGYXN0TGF1bmNoTGF1bmNoVGVtcGxhdGVJZCA9IGxhdW5jaFRlbXBsYXRlPy5sYXVuY2hUZW1wbGF0ZUlkICE9PSB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IGZhc3RMYXVuY2hMYXVuY2hUZW1wbGF0ZTogQ2ZuRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbi5GYXN0TGF1bmNoTGF1bmNoVGVtcGxhdGVTcGVjaWZpY2F0aW9uUHJvcGVydHkgPSB7XG4gICAgICAgICAgLi4uKHVzZUZhc3RMYXVuY2hMYXVuY2hUZW1wbGF0ZUlkICYmIHtcbiAgICAgICAgICAgIGxhdW5jaFRlbXBsYXRlSWQ6IGxhdW5jaFRlbXBsYXRlPy5sYXVuY2hUZW1wbGF0ZUlkLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIC4uLighdXNlRmFzdExhdW5jaExhdW5jaFRlbXBsYXRlSWQgJiYge1xuICAgICAgICAgICAgbGF1bmNoVGVtcGxhdGVOYW1lOiBsYXVuY2hUZW1wbGF0ZT8ubGF1bmNoVGVtcGxhdGVOYW1lLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIC4uLihsYXVuY2hUZW1wbGF0ZT8udmVyc2lvbk51bWJlciAhPT0gdW5kZWZpbmVkICYmIHtcbiAgICAgICAgICAgIGxhdW5jaFRlbXBsYXRlVmVyc2lvbjogbGF1bmNoVGVtcGxhdGU/LnZlcnNpb25OdW1iZXIsXG4gICAgICAgICAgfSksXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBlbmFibGVkOiBmYXN0TGF1bmNoQ29uZmlndXJhdGlvbi5lbmFibGVkLFxuICAgICAgICAgIG1heFBhcmFsbGVsTGF1bmNoZXM6IGZhc3RMYXVuY2hDb25maWd1cmF0aW9uLm1heFBhcmFsbGVsTGF1bmNoZXMsXG4gICAgICAgICAgLi4uKE9iamVjdC5rZXlzKGZhc3RMYXVuY2hMYXVuY2hUZW1wbGF0ZSkubGVuZ3RoICYmIHsgbGF1bmNoVGVtcGxhdGU6IGZhc3RMYXVuY2hMYXVuY2hUZW1wbGF0ZSB9KSxcbiAgICAgICAgICAuLi4oZmFzdExhdW5jaENvbmZpZ3VyYXRpb24udGFyZ2V0U25hcHNob3RDb3VudCAhPT0gdW5kZWZpbmVkICYmIHtcbiAgICAgICAgICAgIHNuYXBzaG90Q29uZmlndXJhdGlvbjogeyB0YXJnZXRSZXNvdXJjZUNvdW50OiBmYXN0TGF1bmNoQ29uZmlndXJhdGlvbi50YXJnZXRTbmFwc2hvdENvdW50IH0sXG4gICAgICAgICAgfSksXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICk7XG5cbiAgICByZXR1cm4gZmFzdExhdW5jaENvbmZpZ3VyYXRpb25zPy5sZW5ndGggPyBmYXN0TGF1bmNoQ29uZmlndXJhdGlvbnMgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkTGF1bmNoVGVtcGxhdGVDb25maWd1cmF0aW9ucyhcbiAgICBhbWlEaXN0cmlidXRpb246IEFtaURpc3RyaWJ1dGlvbixcbiAgKTogQ2ZuRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbi5MYXVuY2hUZW1wbGF0ZUNvbmZpZ3VyYXRpb25Qcm9wZXJ0eVtdIHwgdW5kZWZpbmVkIHtcbiAgICBjb25zdCBsYXVuY2hUZW1wbGF0ZUNvbmZpZ3VyYXRpb25zID0gYW1pRGlzdHJpYnV0aW9uLmxhdW5jaFRlbXBsYXRlcz8ubWFwKFxuICAgICAgKGxhdW5jaFRlbXBsYXRlQ29uZmlndXJhdGlvbik6IENmbkRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24uTGF1bmNoVGVtcGxhdGVDb25maWd1cmF0aW9uUHJvcGVydHkgPT4ge1xuICAgICAgICBpZiAoIWxhdW5jaFRlbXBsYXRlQ29uZmlndXJhdGlvbi5sYXVuY2hUZW1wbGF0ZS5sYXVuY2hUZW1wbGF0ZUlkKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IGNkay5WYWxpZGF0aW9uRXJyb3IoXG4gICAgICAgICAgICAnWW91IG11c3QgcmVmZXJlbmNlIGxhdW5jaCB0ZW1wbGF0ZXMgYnkgSUQgaW4gbGF1bmNoIHRlbXBsYXRlIGNvbmZpZ3VyYXRpb25zJyxcbiAgICAgICAgICAgIHRoaXMsXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgYWNjb3VudElkOiBsYXVuY2hUZW1wbGF0ZUNvbmZpZ3VyYXRpb24uYWNjb3VudElkLFxuICAgICAgICAgIGxhdW5jaFRlbXBsYXRlSWQ6IGxhdW5jaFRlbXBsYXRlQ29uZmlndXJhdGlvbi5sYXVuY2hUZW1wbGF0ZS5sYXVuY2hUZW1wbGF0ZUlkLFxuICAgICAgICAgIHNldERlZmF1bHRWZXJzaW9uOiBsYXVuY2hUZW1wbGF0ZUNvbmZpZ3VyYXRpb24uc2V0RGVmYXVsdFZlcnNpb24sXG4gICAgICAgIH07XG4gICAgICB9LFxuICAgICk7XG5cbiAgICByZXR1cm4gbGF1bmNoVGVtcGxhdGVDb25maWd1cmF0aW9ucz8ubGVuZ3RoID8gbGF1bmNoVGVtcGxhdGVDb25maWd1cmF0aW9ucyA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRMaWNlbnNlQ29uZmlndXJhdGlvbkFybnMoYW1pRGlzdHJpYnV0aW9uOiBBbWlEaXN0cmlidXRpb24pOiBzdHJpbmdbXSB8IHVuZGVmaW5lZCB7XG4gICAgcmV0dXJuIGFtaURpc3RyaWJ1dGlvbi5saWNlbnNlQ29uZmlndXJhdGlvbkFybnM/Lmxlbmd0aCA/IGFtaURpc3RyaWJ1dGlvbi5saWNlbnNlQ29uZmlndXJhdGlvbkFybnMgOiB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGJ1aWxkU3NtUGFyYW1ldGVyQ29uZmlndXJhdGlvbnMoXG4gICAgYW1pRGlzdHJpYnV0aW9uOiBBbWlEaXN0cmlidXRpb24sXG4gICk6IENmbkRpc3RyaWJ1dGlvbkNvbmZpZ3VyYXRpb24uU3NtUGFyYW1ldGVyQ29uZmlndXJhdGlvblByb3BlcnR5W10gfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IHNzbVBhcmFtZXRlckNvbmZpZ3VyYXRpb25zID0gYW1pRGlzdHJpYnV0aW9uLnNzbVBhcmFtZXRlcnM/Lm1hcChcbiAgICAgIChzc21QYXJhbWV0ZXJDb25maWd1cmF0aW9uKTogQ2ZuRGlzdHJpYnV0aW9uQ29uZmlndXJhdGlvbi5Tc21QYXJhbWV0ZXJDb25maWd1cmF0aW9uUHJvcGVydHkgPT4gKHtcbiAgICAgICAgYW1pQWNjb3VudElkOiBzc21QYXJhbWV0ZXJDb25maWd1cmF0aW9uLmFtaUFjY291bnQsXG4gICAgICAgIGRhdGFUeXBlOiBzc21QYXJhbWV0ZXJDb25maWd1cmF0aW9uLmRhdGFUeXBlLFxuICAgICAgICBwYXJhbWV0ZXJOYW1lOiBzc21QYXJhbWV0ZXJDb25maWd1cmF0aW9uLnBhcmFtZXRlci5wYXJhbWV0ZXJOYW1lLFxuICAgICAgfSksXG4gICAgKTtcblxuICAgIHJldHVybiBzc21QYXJhbWV0ZXJDb25maWd1cmF0aW9ucz8ubGVuZ3RoID8gc3NtUGFyYW1ldGVyQ29uZmlndXJhdGlvbnMgOiB1bmRlZmluZWQ7XG4gIH1cbn1cbiJdfQ==
@@ -310,6 +310,7 @@ declare abstract class ImagePipelineBase extends cdk.Resource implements IImageP
310
310
  abstract readonly imagePipelineName: string;
311
311
  /**
312
312
  * Grant custom actions to the given grantee for the image pipeline
313
+ * [disable-awslint:no-grants]
313
314
  *
314
315
  * @param grantee The principal
315
316
  * @param actions The list of actions
@@ -317,18 +318,21 @@ declare abstract class ImagePipelineBase extends cdk.Resource implements IImageP
317
318
  grant(grantee: iam.IGrantable, ...actions: string[]): iam.Grant;
318
319
  /**
319
320
  * Grants the default permissions for building an image to the provided execution role.
321
+ * [disable-awslint:no-grants]
320
322
  *
321
323
  * @param grantee The execution role used for the image build.
322
324
  */
323
325
  grantDefaultExecutionRolePermissions(grantee: iam.IGrantable): iam.Grant[];
324
326
  /**
325
327
  * Grant read permissions to the given grantee for the image pipeline
328
+ * [disable-awslint:no-grants]
326
329
  *
327
330
  * @param grantee The principal
328
331
  */
329
332
  grantRead(grantee: iam.IGrantable): iam.Grant;
330
333
  /**
331
334
  * Grant permissions to the given grantee to start an execution of the image pipeline
335
+ * [disable-awslint:no-grants]
332
336
  *
333
337
  * @param grantee The principal
334
338
  */
@@ -448,6 +452,7 @@ export declare class ImagePipeline extends ImagePipelineBase {
448
452
  constructor(scope: Construct, id: string, props: ImagePipelineProps);
449
453
  /**
450
454
  * Grants the default permissions for building an image to the provided execution role.
455
+ * [disable-awslint:no-grants]
451
456
  *
452
457
  * @param grantee The execution role used for the image build.
453
458
  */