@aws-cdk/aws-glue-alpha 2.267.0-alpha.0 → 2.269.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.
Files changed (50) hide show
  1. package/.jsii +1691 -1261
  2. package/.jsii.tabl.json.gz +0 -0
  3. package/.warnings.jsii.js +1 -79
  4. package/README.md +106 -33
  5. package/adr/job-arguments.md +212 -0
  6. package/lib/catalog.d.ts +2 -2
  7. package/lib/catalog.js +4 -4
  8. package/lib/code.js +3 -3
  9. package/lib/connection.d.ts +44 -29
  10. package/lib/connection.js +66 -32
  11. package/lib/constants.d.ts +17 -0
  12. package/lib/constants.js +20 -2
  13. package/lib/data-format.js +5 -5
  14. package/lib/data-quality-ruleset.d.ts +20 -9
  15. package/lib/data-quality-ruleset.js +33 -6
  16. package/lib/database.d.ts +3 -1
  17. package/lib/database.js +8 -2
  18. package/lib/external-table.js +1 -1
  19. package/lib/jobs/job.d.ts +91 -10
  20. package/lib/jobs/job.js +115 -38
  21. package/lib/jobs/pyspark-etl-job.d.ts +2 -4
  22. package/lib/jobs/pyspark-etl-job.js +10 -15
  23. package/lib/jobs/pyspark-flex-etl-job.d.ts +2 -4
  24. package/lib/jobs/pyspark-flex-etl-job.js +10 -15
  25. package/lib/jobs/pyspark-streaming-job.d.ts +2 -4
  26. package/lib/jobs/pyspark-streaming-job.js +10 -15
  27. package/lib/jobs/python-shell-job.d.ts +20 -7
  28. package/lib/jobs/python-shell-job.js +30 -33
  29. package/lib/jobs/ray-job.js +8 -13
  30. package/lib/jobs/scala-spark-etl-job.d.ts +4 -5
  31. package/lib/jobs/scala-spark-etl-job.js +13 -16
  32. package/lib/jobs/scala-spark-flex-etl-job.d.ts +12 -23
  33. package/lib/jobs/scala-spark-flex-etl-job.js +20 -23
  34. package/lib/jobs/scala-spark-streaming-job.d.ts +4 -5
  35. package/lib/jobs/scala-spark-streaming-job.js +13 -16
  36. package/lib/jobs/spark-job.d.ts +9 -7
  37. package/lib/jobs/spark-job.js +23 -32
  38. package/lib/partition-projection.d.ts +36 -47
  39. package/lib/partition-projection.js +22 -40
  40. package/lib/s3-table.d.ts +7 -4
  41. package/lib/s3-table.js +12 -9
  42. package/lib/schema.js +2 -2
  43. package/lib/security-configuration.js +4 -4
  44. package/lib/storage-parameter.js +1 -1
  45. package/lib/table-base.js +1 -1
  46. package/lib/triggers/trigger-options.d.ts +103 -43
  47. package/lib/triggers/trigger-options.js +202 -3
  48. package/lib/triggers/workflow.d.ts +31 -47
  49. package/lib/triggers/workflow.js +27 -142
  50. package/package.json +7 -7
package/lib/s3-table.js CHANGED
@@ -86,7 +86,7 @@ const table_base_1 = require("./table-base");
86
86
  * it was created with.
87
87
  */
88
88
  class S3TableEncryption {
89
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.S3TableEncryption", version: "2.267.0-alpha.0" };
89
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.S3TableEncryption", version: "2.269.0-alpha.0" };
90
90
  /**
91
91
  * Server-side encryption (SSE-S3) with an Amazon S3-managed key.
92
92
  */
@@ -109,7 +109,10 @@ class S3TableEncryption {
109
109
  }
110
110
  /** @internal */
111
111
  _bucketEncryption;
112
- /** @internal */
112
+ /**
113
+ * @internal
114
+ * Typed `kms.IKey` (not `IKeyRef`) because it is forwarded to `s3.Bucket`, whose `encryptionKey` prop requires `IKey`.
115
+ */
113
116
  _kmsKey;
114
117
  constructor(bucketEncryption, kmsKey) {
115
118
  this._bucketEncryption = bucketEncryption;
@@ -125,7 +128,7 @@ exports.S3TableEncryption = S3TableEncryption;
125
128
  * an encryption choice can never be paired with a bring-your-own bucket.
126
129
  */
127
130
  class S3TableStorage {
128
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.S3TableStorage", version: "2.267.0-alpha.0" };
131
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.S3TableStorage", version: "2.269.0-alpha.0" };
129
132
  /**
130
133
  * Store the table's data in a bucket created and managed by the table.
131
134
  *
@@ -179,7 +182,7 @@ exports.S3TableStorage = S3TableStorage;
179
182
  * `grant*` methods also grant the relevant KMS permissions on the key.
180
183
  */
181
184
  class TableClientSideEncryption {
182
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.TableClientSideEncryption", version: "2.267.0-alpha.0" };
185
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.TableClientSideEncryption", version: "2.269.0-alpha.0" };
183
186
  /**
184
187
  * Client-side encryption (CSE-KMS) with an AWS KMS key managed by the account owner.
185
188
  *
@@ -229,7 +232,7 @@ let S3Table = (() => {
229
232
  S3Table = _classThis = _classDescriptor.value;
230
233
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
231
234
  }
232
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.S3Table", version: "2.267.0-alpha.0" };
235
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.S3Table", version: "2.269.0-alpha.0" };
233
236
  /** Uniquely identifies this class. */
234
237
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-glue-alpha.S3Table';
235
238
  resource = __runInitializers(this, _instanceExtraInitializers);
@@ -351,7 +354,7 @@ let S3Table = (() => {
351
354
  grantRead(grantee) {
352
355
  const ret = this.grant(grantee, readPermissions);
353
356
  if (this.clientSideEncryptionKey) {
354
- this.clientSideEncryptionKey.grantDecrypt(grantee);
357
+ kms.KeyGrants.fromKey(this.clientSideEncryptionKey).decrypt(grantee);
355
358
  }
356
359
  this.bucket.grantRead(grantee, this.generateS3PrefixForGrant());
357
360
  return ret;
@@ -365,7 +368,7 @@ let S3Table = (() => {
365
368
  grantWrite(grantee) {
366
369
  const ret = this.grant(grantee, writePermissions);
367
370
  if (this.clientSideEncryptionKey) {
368
- this.clientSideEncryptionKey.grantEncrypt(grantee);
371
+ kms.KeyGrants.fromKey(this.clientSideEncryptionKey).encrypt(grantee);
369
372
  }
370
373
  this.bucket.grantWrite(grantee, this.generateS3PrefixForGrant());
371
374
  return ret;
@@ -379,7 +382,7 @@ let S3Table = (() => {
379
382
  grantReadWrite(grantee) {
380
383
  const ret = this.grant(grantee, [...readPermissions, ...writePermissions]);
381
384
  if (this.clientSideEncryptionKey) {
382
- this.clientSideEncryptionKey.grantEncryptDecrypt(grantee);
385
+ kms.KeyGrants.fromKey(this.clientSideEncryptionKey).encryptDecrypt(grantee);
383
386
  }
384
387
  this.bucket.grantReadWrite(grantee, this.generateS3PrefixForGrant());
385
388
  return ret;
@@ -438,4 +441,4 @@ function renderColumns(columns) {
438
441
  };
439
442
  });
440
443
  }
441
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiczMtdGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzMy10YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBMkQ7QUFDM0QsbURBQWdEO0FBRWhELHlEQUEyQztBQUMzQyx1REFBeUM7QUFDekMsNEVBQTRFO0FBQzVFLDhFQUE4RjtBQUM5RiwwRUFBMEU7QUFJMUUsNkNBQXlDO0FBRXpDOzs7Ozs7R0FNRztBQUNILE1BQWEsaUJBQWlCOztJQUM1Qjs7T0FFRztJQUNJLE1BQU0sQ0FBQyxTQUFTO1FBQ3JCLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7S0FDOUQ7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFjO1FBQzlCLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQzVEO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsVUFBVTtRQUN0QixPQUFPLElBQUksaUJBQWlCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0tBQy9EO0lBRUQsZ0JBQWdCO0lBQ0EsaUJBQWlCLENBQXNCO0lBRXZELGdCQUFnQjtJQUNBLE9BQU8sQ0FBWTtJQUVuQyxZQUFvQixnQkFBcUMsRUFBRSxNQUFpQjtRQUMxRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7UUFDMUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7S0FDdkI7O0FBakNILDhDQWtDQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQWEsY0FBYzs7SUFDekI7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsYUFBYSxDQUFDLFVBQThCOzs7Ozs7Ozs7O1FBQ3hELE9BQU8sSUFBSSxjQUFjLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0tBQ2xEO0lBRUQ7Ozs7Ozs7Ozs7Ozs7T0FhRztJQUNJLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBa0I7UUFDekMsT0FBTyxJQUFJLGNBQWMsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUM7S0FDOUM7SUFFRCxnQkFBZ0I7SUFDQSxPQUFPLENBQWM7SUFFckMsZ0JBQWdCO0lBQ0EsV0FBVyxDQUFxQjtJQUVoRCxZQUFvQixNQUFtQixFQUFFLFVBQThCO1FBQ3JFLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO0tBQy9COztBQXRDSCx3Q0F1Q0M7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFhLHlCQUF5Qjs7SUFDcEM7Ozs7T0FJRztJQUNJLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBYztRQUM5QixPQUFPLElBQUkseUJBQXlCLENBQUMsR0FBRyxDQUFDLENBQUM7S0FDM0M7SUFFRCxnQkFBZ0I7SUFDQSxPQUFPLENBQVk7SUFFbkMsWUFBb0IsTUFBaUI7UUFDbkMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7S0FDdkI7O0FBZkgsOERBZ0JDO0FBaUNEOzs7R0FHRztJQUVVLE9BQU87NEJBRG5CLG9DQUFrQjs7OztzQkFDVSxzQkFBUzs7Ozs7Ozt1QkFBakIsU0FBUSxXQUFTOzs7O3lDQTRHbkMsaUNBQWM7d0NBUWQsaUNBQWM7cUNBZWQsSUFBQSxrQ0FBYyxHQUFFO3NDQWNoQixJQUFBLGtDQUFjLEdBQUU7MENBY2hCLElBQUEsa0NBQWMsR0FBRTtZQWxEakIsa0xBQVcsU0FBUyw2REFFbkI7WUFNRCwrS0FBVyxRQUFRLDZEQU1sQjtZQVNELDhLQUFPLFNBQVMsNkRBS2Y7WUFTRCxpTEFBTyxVQUFVLDZEQUtoQjtZQVNELDZMQUFPLGNBQWMsNkRBS3BCO1lBcktILDZLQThMQzs7Ozs7UUE3TEMsc0NBQXNDO1FBQy9CLE1BQU0sQ0FBVSxxQkFBcUIsR0FBVyxpQ0FBaUMsQ0FBQztRQUVqRixRQUFRLEdBSkwsbURBQU8sQ0FJUztRQUUzQjs7V0FFRztRQUNhLE1BQU0sQ0FBYTtRQUVuQzs7V0FFRztRQUNhLFFBQVEsQ0FBUztRQUVqQzs7Ozs7V0FLRztRQUNhLHVCQUF1QixDQUFZO1FBRW5EOztXQUVHO1FBQ2EsZ0JBQWdCLENBQW9CO1FBRWpDLGFBQWEsQ0FBVztRQUUzQzs7OztXQUlHO1FBQ2Msa0JBQWtCLENBQVU7UUFFN0MsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFtQjtZQUMzRCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQzs7Ozs7O21EQXZDZixPQUFPOzs7O1lBd0NoQixtQ0FBbUM7WUFDbkMsSUFBQSx3Q0FBb0IsRUFBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDbEMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztZQUNyQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxJQUFJLGNBQWMsQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNoRSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsT0FBTyxDQUFDLE9BQU8sS0FBSyxTQUFTLENBQUM7WUFDeEQsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDL0UsSUFBSSxLQUFLLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztnQkFDL0IsMEVBQTBFO2dCQUMxRSxzRUFBc0U7Z0JBQ3RFLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxLQUFLLENBQUMsb0JBQW9CLENBQUMsT0FBTyxJQUFJLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7WUFDaEcsQ0FBQztZQUVELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxtQkFBUSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUU7Z0JBQzFDLFNBQVMsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxTQUFTO2dCQUUzQyxZQUFZLEVBQUUsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZO2dCQUV6QyxVQUFVLEVBQUU7b0JBQ1YsSUFBSSxFQUFFLElBQUksQ0FBQyxZQUFZO29CQUN2QixXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVcsSUFBSSxHQUFHLElBQUksQ0FBQyxZQUFZLG1CQUFtQjtvQkFFekUsYUFBYSxFQUFFLGFBQWEsQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDO29CQUVqRCxVQUFVLEVBQUU7d0JBQ1YsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsRUFBRSxLQUFLO3dCQUM5RCw2QkFBNkIsRUFBRSxLQUFLLENBQUMsd0JBQXdCO3dCQUM3RCxHQUFHLElBQUksQ0FBQyxVQUFVO3dCQUNsQixpRUFBaUU7d0JBQ2pFLGlFQUFpRTt3QkFDakUsb0JBQW9CLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjtxQkFDNUM7b0JBQ0QsaUJBQWlCLEVBQUU7d0JBQ2pCLFFBQVEsRUFBRSxRQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUU7d0JBQzNELFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTt3QkFDM0Isc0JBQXNCLEVBQUUsS0FBSyxDQUFDLHNCQUFzQixJQUFJLEtBQUs7d0JBQzdELE9BQU8sRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQzt3QkFDckMsV0FBVyxFQUFFLEtBQUssQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLFNBQVM7d0JBQ25ELFlBQVksRUFBRSxLQUFLLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxTQUFTO3dCQUNyRCxTQUFTLEVBQUU7NEJBQ1Qsb0JBQW9CLEVBQUUsS0FBSyxDQUFDLFVBQVUsQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTO3lCQUN0RTt3QkFDRCxVQUFVLEVBQUUsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsaUJBQWlCLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFOzRCQUNsRixJQUFJLEtBQUssQ0FBQyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7Z0NBQ3JCLE1BQU0sSUFBSSw2QkFBZSxDQUFDLElBQUEsc0JBQUcsRUFBQSw4QkFBOEIsRUFBRSxvQ0FBb0MsS0FBSyxDQUFDLEdBQUcsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDOzRCQUN0SCxDQUFDOzRCQUNELE1BQU0sR0FBRyxHQUFHLEtBQUssQ0FBQyxHQUFHLENBQUM7NEJBQ3RCLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDOzRCQUN2QixPQUFPLEdBQUcsQ0FBQzt3QkFDYixDQUFDLEVBQUUsRUFBK0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTO3FCQUNoRDtvQkFFRCxTQUFTLEVBQUUsZ0JBQWdCO2lCQUM1QjthQUNGLENBQUMsQ0FBQztZQUVILElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBRXZDLG9EQUFvRDtZQUNwRCxJQUFJLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDLGdCQUFnQixDQUFDO2dCQUMvQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztZQUMxRSxDQUFDO1NBQ0Y7UUFFRDs7V0FFRztRQUVILElBQVcsU0FBUztZQUNsQixPQUFPLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3pEO1FBRUQ7O1dBRUc7UUFFSCxJQUFXLFFBQVE7WUFDakIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQztnQkFDMUIsT0FBTyxFQUFFLE1BQU07Z0JBQ2YsUUFBUSxFQUFFLE9BQU87Z0JBQ2pCLFlBQVksRUFBRSxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7YUFDaEUsQ0FBQyxDQUFDO1NBQ0o7UUFFRDs7Ozs7V0FLRztRQUVJLFNBQVMsQ0FBQyxPQUF1QjtZQUN0QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxlQUFlLENBQUMsQ0FBQztZQUNqRCxJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO2dCQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7WUFBQyxDQUFDO1lBQ3pGLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO1lBQ2hFLE9BQU8sR0FBRyxDQUFDO1NBQ1o7UUFFRDs7Ozs7V0FLRztRQUVJLFVBQVUsQ0FBQyxPQUF1QjtZQUN2QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ2xELElBQUksSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7Z0JBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUFDLENBQUM7WUFDekYsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLENBQUM7WUFDakUsT0FBTyxHQUFHLENBQUM7U0FDWjtRQUVEOzs7OztXQUtHO1FBRUksY0FBYyxDQUFDLE9BQXVCO1lBQzNDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsR0FBRyxlQUFlLEVBQUUsR0FBRyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7WUFDM0UsSUFBSSxJQUFJLENBQUMsdUJBQXVCLEVBQUUsQ0FBQztnQkFBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7WUFBQyxDQUFDO1lBQ2hHLElBQUksQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsd0JBQXdCLEVBQUUsQ0FBQyxDQUFDO1lBQ3JFLE9BQU8sR0FBRyxDQUFDO1NBQ1o7UUFFUyx3QkFBd0I7WUFDaEMsMkVBQTJFO1lBQzNFLDBFQUEwRTtZQUMxRSwyRUFBMkU7WUFDM0UsbUVBQW1FO1lBQ25FLElBQUksSUFBSSxDQUFDLGtCQUFrQixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssRUFBRSxFQUFFLENBQUM7Z0JBQ3BELHlCQUFXLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLFlBQVksQ0FDL0Isa0RBQWtELEVBQ2xELDBHQUEwRztvQkFDeEcsb0hBQW9ILENBQ3ZILENBQUM7WUFDSixDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQztTQUM1QjtRQUVPLG1CQUFtQixDQUFDLFVBQThCO1lBQ3hELE1BQU0sR0FBRyxHQUFHLFVBQVUsSUFBSSxpQkFBaUIsQ0FBQyxTQUFTLEVBQUUsQ0FBQztZQUN4RCxPQUFPLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO2dCQUNuQyxVQUFVLEVBQUUsR0FBRyxDQUFDLGlCQUFpQjtnQkFDakMsYUFBYSxFQUFFLEdBQUcsQ0FBQyxPQUFPO2dCQUMxQixVQUFVLEVBQUUsSUFBSTthQUNqQixDQUFDLENBQUM7U0FDSjs7WUE3TFUsdURBQU87Ozs7O0FBQVAsMEJBQU87QUFnTXBCLE1BQU0sZUFBZSxHQUFHO0lBQ3RCLHdCQUF3QjtJQUN4QixtQkFBbUI7SUFDbkIsb0JBQW9CO0lBQ3BCLGVBQWU7SUFDZixnQkFBZ0I7SUFDaEIsc0JBQXNCO0lBQ3RCLHVCQUF1QjtDQUN4QixDQUFDO0FBRUYsTUFBTSxnQkFBZ0IsR0FBRztJQUN2QiwyQkFBMkI7SUFDM0IsMkJBQTJCO0lBQzNCLHNCQUFzQjtJQUN0QixzQkFBc0I7SUFDdEIsc0JBQXNCO0NBQ3ZCLENBQUM7QUFFRixTQUFTLGFBQWEsQ0FBQyxPQUFrQjtJQUN2QyxJQUFJLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUMxQixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQzFCLE9BQU87WUFDTCxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7WUFDakIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVztZQUM3QixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87U0FDeEIsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFubm90YXRpb25zLCBWYWxpZGF0aW9uRXJyb3IgfSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDZm5UYWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1nbHVlJztcbmltcG9ydCB0eXBlICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0ICogYXMga21zIGZyb20gJ2F3cy1jZGstbGliL2F3cy1rbXMnO1xuaW1wb3J0ICogYXMgczMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCB7IG1lbW9pemVkR2V0dGVyLCBsaXQgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9oZWxwZXJzLWludGVybmFsJztcbmltcG9ydCB7IGFkZENvbnN0cnVjdE1ldGFkYXRhLCBNZXRob2RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHR5cGUgeyBDb2x1bW4gfSBmcm9tICcuL3NjaGVtYSc7XG5pbXBvcnQgdHlwZSB7IFBhcnRpdGlvbkluZGV4LCBUYWJsZUJhc2VQcm9wcyB9IGZyb20gJy4vdGFibGUtYmFzZSc7XG5pbXBvcnQgeyBUYWJsZUJhc2UgfSBmcm9tICcuL3RhYmxlLWJhc2UnO1xuXG4vKipcbiAqIFNlcnZlci1zaWRlIGVuY3J5cHRpb24gZm9yIHRoZSBTMyBidWNrZXQgdGhhdCBhIG1hbmFnZWQgYFMzVGFibGVgIGNyZWF0ZXMuXG4gKlxuICogQXBwbGllcyBvbmx5IHdoZW4gdGhlIHRhYmxlIG1hbmFnZXMgaXRzIG93biBidWNrZXQgKHZpYVxuICogYFMzVGFibGVTdG9yYWdlLm1hbmFnZWRCdWNrZXRgKS4gQW4gZXhpc3RpbmcgYnVja2V0IGtlZXBzIHdoYXRldmVyIGVuY3J5cHRpb25cbiAqIGl0IHdhcyBjcmVhdGVkIHdpdGguXG4gKi9cbmV4cG9ydCBjbGFzcyBTM1RhYmxlRW5jcnlwdGlvbiB7XG4gIC8qKlxuICAgKiBTZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIChTU0UtUzMpIHdpdGggYW4gQW1hem9uIFMzLW1hbmFnZWQga2V5LlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBzM01hbmFnZWQoKTogUzNUYWJsZUVuY3J5cHRpb24ge1xuICAgIHJldHVybiBuZXcgUzNUYWJsZUVuY3J5cHRpb24oczMuQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VEKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIChTU0UtS01TKSB3aXRoIGFuIEFXUyBLTVMga2V5IG1hbmFnZWQgYnkgdGhlIGFjY291bnQgb3duZXIuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgdGhlIEtNUyBrZXkgdXNlZCB0byBlbmNyeXB0IHRoZSBkYXRhLiBBIGtleSBpcyBjcmVhdGVkIGlmIG9uZSBpcyBub3QgcHJvdmlkZWQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGttcyhrZXk/OiBrbXMuSUtleSk6IFMzVGFibGVFbmNyeXB0aW9uIHtcbiAgICByZXR1cm4gbmV3IFMzVGFibGVFbmNyeXB0aW9uKHMzLkJ1Y2tldEVuY3J5cHRpb24uS01TLCBrZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcnZlci1zaWRlIGVuY3J5cHRpb24gKFNTRS1LTVMpIHdpdGggYW4gQVdTIEtNUyBrZXkgbWFuYWdlZCBieSB0aGUgS01TIHNlcnZpY2UuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGttc01hbmFnZWQoKTogUzNUYWJsZUVuY3J5cHRpb24ge1xuICAgIHJldHVybiBuZXcgUzNUYWJsZUVuY3J5cHRpb24oczMuQnVja2V0RW5jcnlwdGlvbi5LTVNfTUFOQUdFRCk7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyByZWFkb25seSBfYnVja2V0RW5jcnlwdGlvbjogczMuQnVja2V0RW5jcnlwdGlvbjtcblxuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyByZWFkb25seSBfa21zS2V5Pzoga21zLklLZXk7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihidWNrZXRFbmNyeXB0aW9uOiBzMy5CdWNrZXRFbmNyeXB0aW9uLCBrbXNLZXk/OiBrbXMuSUtleSkge1xuICAgIHRoaXMuX2J1Y2tldEVuY3J5cHRpb24gPSBidWNrZXRFbmNyeXB0aW9uO1xuICAgIHRoaXMuX2ttc0tleSA9IGttc0tleTtcbiAgfVxufVxuXG4vKipcbiAqIFdoZXJlIGFuIGBTM1RhYmxlYCBzdG9yZXMgaXRzIGRhdGEuXG4gKlxuICogVGhlIHR3byBwYXRocyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlOiBhIG1hbmFnZWQgYnVja2V0IG1heSBzcGVjaWZ5IGl0c1xuICogc2VydmVyLXNpZGUgZW5jcnlwdGlvbiwgd2hpbGUgYW4gZXhpc3RpbmcgYnVja2V0IGtlZXBzIGl0cyBvd24gZW5jcnlwdGlvbiDigJQgc29cbiAqIGFuIGVuY3J5cHRpb24gY2hvaWNlIGNhbiBuZXZlciBiZSBwYWlyZWQgd2l0aCBhIGJyaW5nLXlvdXItb3duIGJ1Y2tldC5cbiAqL1xuZXhwb3J0IGNsYXNzIFMzVGFibGVTdG9yYWdlIHtcbiAgLyoqXG4gICAqIFN0b3JlIHRoZSB0YWJsZSdzIGRhdGEgaW4gYSBidWNrZXQgY3JlYXRlZCBhbmQgbWFuYWdlZCBieSB0aGUgdGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSBlbmNyeXB0aW9uIHRoZSBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIGZvciB0aGUgY3JlYXRlZCBidWNrZXQuXG4gICAqIEBkZWZhdWx0IC0gUzMtbWFuYWdlZCAoU1NFLVMzKSBlbmNyeXB0aW9uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmFnZWRCdWNrZXQoZW5jcnlwdGlvbj86IFMzVGFibGVFbmNyeXB0aW9uKTogUzNUYWJsZVN0b3JhZ2Uge1xuICAgIHJldHVybiBuZXcgUzNUYWJsZVN0b3JhZ2UodW5kZWZpbmVkLCBlbmNyeXB0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZSB0aGUgdGFibGUncyBkYXRhIGluIGFuIGV4aXN0aW5nIGJ1Y2tldC4gQ0RLIGRvZXMgbm90IG1hbmFnZSB0aGVcbiAgICogYnVja2V0J3MgZW5jcnlwdGlvbi5cbiAgICpcbiAgICogVGhlIGJ1Y2tldCBjYW4gYmUgb25lIHlvdSBkb24ndCBvd24sIGltcG9ydGVkIHdpdGhcbiAgICogYEJ1Y2tldC5mcm9tQnVja2V0QXJuKClgIG9yIGBCdWNrZXQuZnJvbUJ1Y2tldEF0dHJpYnV0ZXMoKWAuIElmIHRoYXQgYnVja2V0XG4gICAqIGlzIEtNUy1lbmNyeXB0ZWQsIGltcG9ydCBpdCB3aXRoIGBCdWNrZXQuZnJvbUJ1Y2tldEF0dHJpYnV0ZXMoKWAgYW5kIHN1cHBseVxuICAgKiB0aGUgYGVuY3J5cHRpb25LZXlgIGF0dHJpYnV0ZS4gT3RoZXJ3aXNlLCBDREsgaGFzIG5vIHJlZmVyZW5jZSB0byB0aGUga2V5LFxuICAgKiB3aGljaCBtZWFucyB0aGF0IGBTM1RhYmxlLmdyYW50UmVhZCgpYC9gZ3JhbnRXcml0ZSgpYCB3aWxsIGNvcnJlY3RseSBncmFudFxuICAgKiBTMyBhY2Nlc3MgYnV0IHNpbGVudGx5IHNraXAgdGhlIEtNUyBwZXJtaXNzaW9ucyBvbiB0aGUga2V5LiBBcyBhIGNvbnNlcXVlbmNlLFxuICAgKiBhdCBydW50aW1lLCByZWFkcyBhbmQgd3JpdGVzIHdpbGwgZmFpbCB3aXRoIGFjY2VzcyBkZW5pZWQgb24gdGhlIGtleS5cbiAgICpcbiAgICogQHBhcmFtIGJ1Y2tldCB0aGUgYnVja2V0IHRoYXQgaG9sZHMgdGhlIHRhYmxlJ3MgZGF0YS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUJ1Y2tldChidWNrZXQ6IHMzLklCdWNrZXQpOiBTM1RhYmxlU3RvcmFnZSB7XG4gICAgcmV0dXJuIG5ldyBTM1RhYmxlU3RvcmFnZShidWNrZXQsIHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyByZWFkb25seSBfYnVja2V0PzogczMuSUJ1Y2tldDtcblxuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyByZWFkb25seSBfZW5jcnlwdGlvbj86IFMzVGFibGVFbmNyeXB0aW9uO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoYnVja2V0PzogczMuSUJ1Y2tldCwgZW5jcnlwdGlvbj86IFMzVGFibGVFbmNyeXB0aW9uKSB7XG4gICAgdGhpcy5fYnVja2V0ID0gYnVja2V0O1xuICAgIHRoaXMuX2VuY3J5cHRpb24gPSBlbmNyeXB0aW9uO1xuICB9XG59XG5cbi8qKlxuICogQ2xpZW50LXNpZGUgZW5jcnlwdGlvbiBmb3IgYW4gYFMzVGFibGVgJ3MgZGF0YS5cbiAqXG4gKiBJbmRlcGVuZGVudCBvZiB0aGUgYnVja2V0J3Mgc2VydmVyLXNpZGUgZW5jcnlwdGlvbiBhbmQgb2Ygd2hvIG93bnMgdGhlIGJ1Y2tldDpcbiAqIHRoZSBkYXRhIGlzIGVuY3J5cHRlZCBieSB0aGUgY2xpZW50IGJlZm9yZSBpdCBpcyB3cml0dGVuIHRvIFMzLiBXaGVuIHNldCwgdGhlXG4gKiBgZ3JhbnQqYCBtZXRob2RzIGFsc28gZ3JhbnQgdGhlIHJlbGV2YW50IEtNUyBwZXJtaXNzaW9ucyBvbiB0aGUga2V5LlxuICovXG5leHBvcnQgY2xhc3MgVGFibGVDbGllbnRTaWRlRW5jcnlwdGlvbiB7XG4gIC8qKlxuICAgKiBDbGllbnQtc2lkZSBlbmNyeXB0aW9uIChDU0UtS01TKSB3aXRoIGFuIEFXUyBLTVMga2V5IG1hbmFnZWQgYnkgdGhlIGFjY291bnQgb3duZXIuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgdGhlIEtNUyBrZXkgdXNlZCB0byBlbmNyeXB0IHRoZSBkYXRhLiBBIGtleSBpcyBjcmVhdGVkIGlmIG9uZSBpcyBub3QgcHJvdmlkZWQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGttcyhrZXk/OiBrbXMuSUtleSk6IFRhYmxlQ2xpZW50U2lkZUVuY3J5cHRpb24ge1xuICAgIHJldHVybiBuZXcgVGFibGVDbGllbnRTaWRlRW5jcnlwdGlvbihrZXkpO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgcmVhZG9ubHkgX2ttc0tleT86IGttcy5JS2V5O1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3Ioa21zS2V5Pzoga21zLklLZXkpIHtcbiAgICB0aGlzLl9rbXNLZXkgPSBrbXNLZXk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBTM1RhYmxlUHJvcHMgZXh0ZW5kcyBUYWJsZUJhc2VQcm9wcyB7XG4gIC8qKlxuICAgKiBXaGVyZSB0aGUgdGFibGUncyBkYXRhIGlzIHN0b3JlZDogYSBidWNrZXQgY3JlYXRlZCBhbmQgbWFuYWdlZCBieSB0aGUgdGFibGUsXG4gICAqIG9yIGFuIGV4aXN0aW5nIGJ1Y2tldCB5b3UgcHJvdmlkZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhIG1hbmFnZWQgYnVja2V0IHdpdGggUzMtbWFuYWdlZCAoU1NFLVMzKSBlbmNyeXB0aW9uXG4gICAqL1xuICByZWFkb25seSBzdG9yYWdlPzogUzNUYWJsZVN0b3JhZ2U7XG5cbiAgLyoqXG4gICAqIFMzIHByZWZpeCB1bmRlciB3aGljaCB0YWJsZSBvYmplY3RzIGFyZSBzdG9yZWQuXG4gICAqXG4gICAqIFdoZW4gdGhlIHRhYmxlIHNoYXJlcyBhIGJ1Y2tldCB3aXRoIG90aGVyIHRhYmxlcyBvciBjb25zdW1lcnMsIHNldCB0aGlzIHNvXG4gICAqIHRoYXQgdGhlIGBncmFudCpgIG1ldGhvZHMgc2NvcGUgUzMgYWNjZXNzIHRvIHRoaXMgdGFibGUncyBkYXRhLiBXaXRob3V0IGFcbiAgICogcHJlZml4LCB0aG9zZSBncmFudHMgY292ZXIgdGhlIGVudGlyZSBidWNrZXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gcHJlZml4LiBUaGUgZGF0YSB3aWxsIGJlIHN0b3JlZCB1bmRlciB0aGUgcm9vdCBvZiB0aGUgYnVja2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgczNQcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENsaWVudC1zaWRlIGVuY3J5cHRpb24gKENTRS1LTVMpIGZvciB0aGUgdGFibGUncyBkYXRhLlxuICAgKlxuICAgKiBJbmRlcGVuZGVudCBvZiB0aGUgYnVja2V0J3Mgc2VydmVyLXNpZGUgZW5jcnlwdGlvbiwgYW5kIHZhbGlkIHdoZXRoZXIgdGhlXG4gICAqIGJ1Y2tldCBpcyBtYW5hZ2VkIG9yIHByb3ZpZGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGNsaWVudC1zaWRlIGVuY3J5cHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGNsaWVudFNpZGVFbmNyeXB0aW9uPzogVGFibGVDbGllbnRTaWRlRW5jcnlwdGlvbjtcbn1cblxuLyoqXG4gKiBBIEdsdWUgdGFibGUgdGhhdCB0YXJnZXRzIGEgUzMgZGF0YXNldC5cbiAqIEByZXNvdXJjZSBBV1M6OkdsdWU6OlRhYmxlXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBTM1RhYmxlIGV4dGVuZHMgVGFibGVCYXNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtZ2x1ZS1hbHBoYS5TM1RhYmxlJztcblxuICBwcml2YXRlIHJlc291cmNlOiBDZm5UYWJsZTtcblxuICAvKipcbiAgICogUzMgYnVja2V0IGluIHdoaWNoIHRoZSB0YWJsZSdzIGRhdGEgcmVzaWRlcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBidWNrZXQ6IHMzLklCdWNrZXQ7XG5cbiAgLyoqXG4gICAqIFMzIEtleSBQcmVmaXggdW5kZXIgd2hpY2ggdGhpcyB0YWJsZSdzIGZpbGVzIGFyZSBzdG9yZWQgaW4gUzMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgczNQcmVmaXg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEtNUyBrZXkgdXNlZCBmb3IgY2xpZW50LXNpZGUgZW5jcnlwdGlvbiBvZiB0aGUgdGFibGUncyBkYXRhLCBpZlxuICAgKiBgY2xpZW50U2lkZUVuY3J5cHRpb25gIHdhcyBjb25maWd1cmVkLiBPdGhlcndpc2UsIGB1bmRlZmluZWRgLlxuICAgKlxuICAgKiBGb3Igc2VydmVyLXNpZGUgKGJ1Y2tldCkgZW5jcnlwdGlvbiwgcmVhZCBgYnVja2V0LmVuY3J5cHRpb25LZXlgIGluc3RlYWQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY2xpZW50U2lkZUVuY3J5cHRpb25LZXk/OiBrbXMuSUtleTtcblxuICAvKipcbiAgICogVGhpcyB0YWJsZSdzIHBhcnRpdGlvbiBpbmRleGVzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBhcnRpdGlvbkluZGV4ZXM/OiBQYXJ0aXRpb25JbmRleFtdO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSB0YWJsZVJlc291cmNlOiBDZm5UYWJsZTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZGF0YSBidWNrZXQgd2FzIHN1cHBsaWVkIGJ5IHRoZSB1c2VyIChhcyBvcHBvc2VkIHRvIGNyZWF0ZWQgYnlcbiAgICogdGhpcyBjb25zdHJ1Y3QpLiBBIHVzZXItc3VwcGxpZWQgYnVja2V0IG1heSBob2xkIGRhdGEgZm9yIG90aGVyIHRhYmxlcywgc29cbiAgICogZ3JhbnRpbmcgYWNjZXNzIHRvIHRoZSB3aG9sZSBidWNrZXQgY2FuIG92ZXItZ3JhbnQuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHVzZXJQcm92aWRlZEJ1Y2tldDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUzNUYWJsZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG4gICAgdGhpcy5zM1ByZWZpeCA9IHByb3BzLnMzUHJlZml4ID8/ICcnO1xuICAgIGNvbnN0IHN0b3JhZ2UgPSBwcm9wcy5zdG9yYWdlID8/IFMzVGFibGVTdG9yYWdlLm1hbmFnZWRCdWNrZXQoKTtcbiAgICB0aGlzLnVzZXJQcm92aWRlZEJ1Y2tldCA9IHN0b3JhZ2UuX2J1Y2tldCAhPT0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYnVja2V0ID0gc3RvcmFnZS5fYnVja2V0ID8/IHRoaXMuY3JlYXRlTWFuYWdlZEJ1Y2tldChzdG9yYWdlLl9lbmNyeXB0aW9uKTtcbiAgICBpZiAocHJvcHMuY2xpZW50U2lkZUVuY3J5cHRpb24pIHtcbiAgICAgIC8vIENTRS1LTVM6IHVzZSB0aGUgcHJvdmlkZWQga2V5IG9yIGNyZWF0ZSBvbmUgYXV0b21hdGljYWxseS4gVGhlIGJ1Y2tldCdzXG4gICAgICAvLyBvd24gc2VydmVyLXNpZGUgZW5jcnlwdGlvbiBpcyBpbmRlcGVuZGVudCBhbmQgY29tZXMgZnJvbSBgc3RvcmFnZWAuXG4gICAgICB0aGlzLmNsaWVudFNpZGVFbmNyeXB0aW9uS2V5ID0gcHJvcHMuY2xpZW50U2lkZUVuY3J5cHRpb24uX2ttc0tleSA/PyBuZXcga21zLktleSh0aGlzLCAnS2V5Jyk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBDZm5UYWJsZSh0aGlzLCAnVGFibGUnLCB7XG4gICAgICBjYXRhbG9nSWQ6IHByb3BzLmRhdGFiYXNlLmNhdGFsb2cuY2F0YWxvZ0lkLFxuXG4gICAgICBkYXRhYmFzZU5hbWU6IHByb3BzLmRhdGFiYXNlLmRhdGFiYXNlTmFtZSxcblxuICAgICAgdGFibGVJbnB1dDoge1xuICAgICAgICBuYW1lOiB0aGlzLnBoeXNpY2FsTmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uIHx8IGAke3RoaXMucGh5c2ljYWxOYW1lfSBnZW5lcmF0ZWQgYnkgQ0RLYCxcblxuICAgICAgICBwYXJ0aXRpb25LZXlzOiByZW5kZXJDb2x1bW5zKHByb3BzLnBhcnRpdGlvbktleXMpLFxuXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAnY2xhc3NpZmljYXRpb24nOiBwcm9wcy5kYXRhRm9ybWF0LmNsYXNzaWZpY2F0aW9uU3RyaW5nPy52YWx1ZSxcbiAgICAgICAgICAncGFydGl0aW9uX2ZpbHRlcmluZy5lbmFibGVkJzogcHJvcHMuZW5hYmxlUGFydGl0aW9uRmlsdGVyaW5nLFxuICAgICAgICAgIC4uLnRoaXMucGFyYW1ldGVycyxcbiAgICAgICAgICAvLyBNYW5hZ2VkIGtleXMgYXJlIGVtaXR0ZWQgbGFzdCBzbyBmcmVlLWZvcm0gYHBhcmFtZXRlcnNgIGNhbm5vdFxuICAgICAgICAgIC8vIHNpbGVudGx5IG92ZXJyaWRlIHRoZW0uIENvbmZsaWN0cyBhcmUgcmVqZWN0ZWQgaW4gYFRhYmxlQmFzZWAuXG4gICAgICAgICAgJ2hhc19lbmNyeXB0ZWRfZGF0YSc6IHRoaXMuaGFzRW5jcnlwdGVkRGF0YSxcbiAgICAgICAgfSxcbiAgICAgICAgc3RvcmFnZURlc2NyaXB0b3I6IHtcbiAgICAgICAgICBsb2NhdGlvbjogYHMzOi8vJHt0aGlzLmJ1Y2tldC5idWNrZXROYW1lfS8ke3RoaXMuczNQcmVmaXh9YCxcbiAgICAgICAgICBjb21wcmVzc2VkOiB0aGlzLmNvbXByZXNzZWQsXG4gICAgICAgICAgc3RvcmVkQXNTdWJEaXJlY3RvcmllczogcHJvcHMuc3RvcmVkQXNTdWJEaXJlY3RvcmllcyA/PyBmYWxzZSxcbiAgICAgICAgICBjb2x1bW5zOiByZW5kZXJDb2x1bW5zKHByb3BzLmNvbHVtbnMpLFxuICAgICAgICAgIGlucHV0Rm9ybWF0OiBwcm9wcy5kYXRhRm9ybWF0LmlucHV0Rm9ybWF0LmNsYXNzTmFtZSxcbiAgICAgICAgICBvdXRwdXRGb3JtYXQ6IHByb3BzLmRhdGFGb3JtYXQub3V0cHV0Rm9ybWF0LmNsYXNzTmFtZSxcbiAgICAgICAgICBzZXJkZUluZm86IHtcbiAgICAgICAgICAgIHNlcmlhbGl6YXRpb25MaWJyYXJ5OiBwcm9wcy5kYXRhRm9ybWF0LnNlcmlhbGl6YXRpb25MaWJyYXJ5LmNsYXNzTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHByb3BzLnN0b3JhZ2VQYXJhbWV0ZXJzID8gcHJvcHMuc3RvcmFnZVBhcmFtZXRlcnMucmVkdWNlKChhY2MsIHBhcmFtKSA9PiB7XG4gICAgICAgICAgICBpZiAocGFyYW0ua2V5IGluIGFjYykge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBEdXBsaWNhdGVTdG9yYWdlUGFyYW1ldGVyS2V5YCwgYER1cGxpY2F0ZSBzdG9yYWdlIHBhcmFtZXRlciBrZXk6ICR7cGFyYW0ua2V5fWAsIHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qga2V5ID0gcGFyYW0ua2V5O1xuICAgICAgICAgICAgYWNjW2tleV0gPSBwYXJhbS52YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgfSwge30gYXMgeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSkgOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG5cbiAgICAgICAgdGFibGVUeXBlOiAnRVhURVJOQUxfVEFCTEUnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMudGFibGVSZXNvdXJjZSA9IHRoaXMucmVzb3VyY2U7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG5cbiAgICAvLyBQYXJ0aXRpb24gaW5kZXggY3JlYXRpb24gcmVsaWVzIG9uIGNyZWF0ZWQgdGFibGUuXG4gICAgaWYgKHByb3BzLnBhcnRpdGlvbkluZGV4ZXMpIHtcbiAgICAgIHRoaXMucGFydGl0aW9uSW5kZXhlcyA9IHByb3BzLnBhcnRpdGlvbkluZGV4ZXM7XG4gICAgICB0aGlzLnBhcnRpdGlvbkluZGV4ZXMuZm9yRWFjaCgoaW5kZXgpID0+IHRoaXMuYWRkUGFydGl0aW9uSW5kZXgoaW5kZXgpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTmFtZSBvZiB0aGlzIHRhYmxlLlxuICAgKi9cbiAgQG1lbW9pemVkR2V0dGVyXG4gIHB1YmxpYyBnZXQgdGFibGVOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2VOYW1lQXR0cmlidXRlKHRoaXMucmVzb3VyY2UucmVmKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBUk4gb2YgdGhpcyB0YWJsZS5cbiAgICovXG4gIEBtZW1vaXplZEdldHRlclxuICBwdWJsaWMgZ2V0IHRhYmxlQXJuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2suZm9ybWF0QXJuKHtcbiAgICAgIHNlcnZpY2U6ICdnbHVlJyxcbiAgICAgIHJlc291cmNlOiAndGFibGUnLFxuICAgICAgcmVzb3VyY2VOYW1lOiBgJHt0aGlzLmRhdGFiYXNlLmRhdGFiYXNlTmFtZX0vJHt0aGlzLnRhYmxlTmFtZX1gLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHJlYWQgcGVybWlzc2lvbnMgdG8gdGhlIHRhYmxlIGFuZCB0aGUgdW5kZXJseWluZyBkYXRhIHN0b3JlZCBpbiBTMyB0byBhbiBJQU0gcHJpbmNpcGFsLlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgdGhlIHByaW5jaXBhbFxuICAgKi9cbiAgQE1ldGhvZE1ldGFkYXRhKClcbiAgcHVibGljIGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgY29uc3QgcmV0ID0gdGhpcy5ncmFudChncmFudGVlLCByZWFkUGVybWlzc2lvbnMpO1xuICAgIGlmICh0aGlzLmNsaWVudFNpZGVFbmNyeXB0aW9uS2V5KSB7IHRoaXMuY2xpZW50U2lkZUVuY3J5cHRpb25LZXkuZ3JhbnREZWNyeXB0KGdyYW50ZWUpOyB9XG4gICAgdGhpcy5idWNrZXQuZ3JhbnRSZWFkKGdyYW50ZWUsIHRoaXMuZ2VuZXJhdGVTM1ByZWZpeEZvckdyYW50KCkpO1xuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgd3JpdGUgcGVybWlzc2lvbnMgdG8gdGhlIHRhYmxlIGFuZCB0aGUgdW5kZXJseWluZyBkYXRhIHN0b3JlZCBpbiBTMyB0byBhbiBJQU0gcHJpbmNpcGFsLlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgdGhlIHByaW5jaXBhbFxuICAgKi9cbiAgQE1ldGhvZE1ldGFkYXRhKClcbiAgcHVibGljIGdyYW50V3JpdGUoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIGNvbnN0IHJldCA9IHRoaXMuZ3JhbnQoZ3JhbnRlZSwgd3JpdGVQZXJtaXNzaW9ucyk7XG4gICAgaWYgKHRoaXMuY2xpZW50U2lkZUVuY3J5cHRpb25LZXkpIHsgdGhpcy5jbGllbnRTaWRlRW5jcnlwdGlvbktleS5ncmFudEVuY3J5cHQoZ3JhbnRlZSk7IH1cbiAgICB0aGlzLmJ1Y2tldC5ncmFudFdyaXRlKGdyYW50ZWUsIHRoaXMuZ2VuZXJhdGVTM1ByZWZpeEZvckdyYW50KCkpO1xuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgcmVhZCBhbmQgd3JpdGUgcGVybWlzc2lvbnMgdG8gdGhlIHRhYmxlIGFuZCB0aGUgdW5kZXJseWluZyBkYXRhIHN0b3JlZCBpbiBTMyB0byBhbiBJQU0gcHJpbmNpcGFsLlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgdGhlIHByaW5jaXBhbFxuICAgKi9cbiAgQE1ldGhvZE1ldGFkYXRhKClcbiAgcHVibGljIGdyYW50UmVhZFdyaXRlKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICBjb25zdCByZXQgPSB0aGlzLmdyYW50KGdyYW50ZWUsIFsuLi5yZWFkUGVybWlzc2lvbnMsIC4uLndyaXRlUGVybWlzc2lvbnNdKTtcbiAgICBpZiAodGhpcy5jbGllbnRTaWRlRW5jcnlwdGlvbktleSkgeyB0aGlzLmNsaWVudFNpZGVFbmNyeXB0aW9uS2V5LmdyYW50RW5jcnlwdERlY3J5cHQoZ3JhbnRlZSk7IH1cbiAgICB0aGlzLmJ1Y2tldC5ncmFudFJlYWRXcml0ZShncmFudGVlLCB0aGlzLmdlbmVyYXRlUzNQcmVmaXhGb3JHcmFudCgpKTtcbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdlbmVyYXRlUzNQcmVmaXhGb3JHcmFudCgpIHtcbiAgICAvLyBXaGVuIHRoZSB1c2VyIHN1cHBsaWVkIHRoZWlyIG93biBidWNrZXQgYW5kIGRpZCBub3Qgc2NvcGUgdGhlIHRhYmxlIHRvIGFcbiAgICAvLyBwcmVmaXgsIHRoZSBncmFudCBjb3ZlcnMgZXZlcnkgb2JqZWN0IGluIHRoZSBidWNrZXQgLSB3aGljaCBtYXkgaW5jbHVkZVxuICAgIC8vIGRhdGEgb3duZWQgYnkgb3RoZXIgdGFibGVzIG9yIGNvbnN1bWVycyBzaGFyaW5nIHRoYXQgYnVja2V0LiBXYXJuIHNvIHRoZVxuICAgIC8vIG92ZXItZ3JhbnQgaXMgYSBkZWxpYmVyYXRlIGNob2ljZSByYXRoZXIgdGhhbiBhIHNpbGVudCBzdXJwcmlzZS5cbiAgICBpZiAodGhpcy51c2VyUHJvdmlkZWRCdWNrZXQgJiYgdGhpcy5zM1ByZWZpeCA9PT0gJycpIHtcbiAgICAgIEFubm90YXRpb25zLm9mKHRoaXMpLmFkZFdhcm5pbmdWMihcbiAgICAgICAgJ0Bhd3MtY2RrL2F3cy1nbHVlLWFscGhhOmdyYW50U2NvcGVkVG9XaG9sZUJ1Y2tldCcsXG4gICAgICAgICdncmFudGluZyBhY2Nlc3MgdG8gdGhlIGVudGlyZSBkYXRhIGJ1Y2tldCBiZWNhdXNlIGBzM1ByZWZpeGAgaXMgZW1wdHkgYW5kIGEgc2hhcmVkIGJ1Y2tldCB3YXMgcHJvdmlkZWQ7ICcgK1xuICAgICAgICAgICdzZXQgYHMzUHJlZml4YCB0byBzY29wZSBncmFudHMgdG8gdGhpcyB0YWJsZVxcJ3MgZGF0YSBhbmQgYXZvaWQgZ3JhbnRpbmcgYWNjZXNzIHRvIG90aGVyIHRhYmxlcyBzaGFyaW5nIHRoZSBidWNrZXQuJyxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnMzUHJlZml4ICsgJyonO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVNYW5hZ2VkQnVja2V0KGVuY3J5cHRpb24/OiBTM1RhYmxlRW5jcnlwdGlvbik6IHMzLkJ1Y2tldCB7XG4gICAgY29uc3QgZW5jID0gZW5jcnlwdGlvbiA/PyBTM1RhYmxlRW5jcnlwdGlvbi5zM01hbmFnZWQoKTtcbiAgICByZXR1cm4gbmV3IHMzLkJ1Y2tldCh0aGlzLCAnQnVja2V0Jywge1xuICAgICAgZW5jcnlwdGlvbjogZW5jLl9idWNrZXRFbmNyeXB0aW9uLFxuICAgICAgZW5jcnlwdGlvbktleTogZW5jLl9rbXNLZXksXG4gICAgICBlbmZvcmNlU1NMOiB0cnVlLFxuICAgIH0pO1xuICB9XG59XG5cbmNvbnN0IHJlYWRQZXJtaXNzaW9ucyA9IFtcbiAgJ2dsdWU6QmF0Y2hHZXRQYXJ0aXRpb24nLFxuICAnZ2x1ZTpHZXRQYXJ0aXRpb24nLFxuICAnZ2x1ZTpHZXRQYXJ0aXRpb25zJyxcbiAgJ2dsdWU6R2V0VGFibGUnLFxuICAnZ2x1ZTpHZXRUYWJsZXMnLFxuICAnZ2x1ZTpHZXRUYWJsZVZlcnNpb24nLFxuICAnZ2x1ZTpHZXRUYWJsZVZlcnNpb25zJyxcbl07XG5cbmNvbnN0IHdyaXRlUGVybWlzc2lvbnMgPSBbXG4gICdnbHVlOkJhdGNoQ3JlYXRlUGFydGl0aW9uJyxcbiAgJ2dsdWU6QmF0Y2hEZWxldGVQYXJ0aXRpb24nLFxuICAnZ2x1ZTpDcmVhdGVQYXJ0aXRpb24nLFxuICAnZ2x1ZTpEZWxldGVQYXJ0aXRpb24nLFxuICAnZ2x1ZTpVcGRhdGVQYXJ0aXRpb24nLFxuXTtcblxuZnVuY3Rpb24gcmVuZGVyQ29sdW1ucyhjb2x1bW5zPzogQ29sdW1uW10pIHtcbiAgaWYgKGNvbHVtbnMgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGNvbHVtbnMubWFwKGNvbHVtbiA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IGNvbHVtbi5uYW1lLFxuICAgICAgdHlwZTogY29sdW1uLnR5cGUuaW5wdXRTdHJpbmcsXG4gICAgICBjb21tZW50OiBjb2x1bW4uY29tbWVudCxcbiAgICB9O1xuICB9KTtcbn1cbiJdfQ==
444
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiczMtdGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzMy10YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBMkQ7QUFDM0QsbURBQWdEO0FBRWhELHlEQUEyQztBQUMzQyx1REFBeUM7QUFDekMsNEVBQTRFO0FBQzVFLDhFQUE4RjtBQUM5RiwwRUFBMEU7QUFJMUUsNkNBQXlDO0FBRXpDOzs7Ozs7R0FNRztBQUNILE1BQWEsaUJBQWlCOztJQUM1Qjs7T0FFRztJQUNJLE1BQU0sQ0FBQyxTQUFTO1FBQ3JCLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUM7S0FDOUQ7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFjO1FBQzlCLE9BQU8sSUFBSSxpQkFBaUIsQ0FBQyxFQUFFLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0tBQzVEO0lBRUQ7O09BRUc7SUFDSSxNQUFNLENBQUMsVUFBVTtRQUN0QixPQUFPLElBQUksaUJBQWlCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxDQUFDO0tBQy9EO0lBRUQsZ0JBQWdCO0lBQ0EsaUJBQWlCLENBQXNCO0lBRXZEOzs7T0FHRztJQUNhLE9BQU8sQ0FBWTtJQUVuQyxZQUFvQixnQkFBcUMsRUFBRSxNQUFpQjtRQUMxRSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsZ0JBQWdCLENBQUM7UUFDMUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxNQUFNLENBQUM7S0FDdkI7O0FBcENILDhDQXFDQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQWEsY0FBYzs7SUFDekI7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsYUFBYSxDQUFDLFVBQThCOzs7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UCwwQkFBTztBQWdNcEIsTUFBTSxlQUFlLEdBQUc7SUFDdEIsd0JBQXdCO0lBQ3hCLG1CQUFtQjtJQUNuQixvQkFBb0I7SUFDcEIsZUFBZTtJQUNmLGdCQUFnQjtJQUNoQixzQkFBc0I7SUFDdEIsdUJBQXVCO0NBQ3hCLENBQUM7QUFFRixNQUFNLGdCQUFnQixHQUFHO0lBQ3ZCLDJCQUEyQjtJQUMzQiwyQkFBMkI7SUFDM0Isc0JBQXNCO0lBQ3RCLHNCQUFzQjtJQUN0QixzQkFBc0I7Q0FDdkIsQ0FBQztBQUVGLFNBQVMsYUFBYSxDQUFDLE9BQWtCO0lBQ3ZDLElBQUksT0FBTyxLQUFLLFNBQVMsRUFBRSxDQUFDO1FBQzFCLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDMUIsT0FBTztZQUNMLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtZQUNqQixJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXO1lBQzdCLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztTQUN4QixDQUFDO0lBQ0osQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQW5ub3RhdGlvbnMsIFZhbGlkYXRpb25FcnJvciB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IENmblRhYmxlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWdsdWUnO1xuaW1wb3J0IHR5cGUgKiBhcyBpYW0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgKiBhcyBrbXMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWttcyc7XG5pbXBvcnQgKiBhcyBzMyBmcm9tICdhd3MtY2RrLWxpYi9hd3MtczMnO1xuaW1wb3J0IHsgbWVtb2l6ZWRHZXR0ZXIsIGxpdCB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL2hlbHBlcnMtaW50ZXJuYWwnO1xuaW1wb3J0IHsgYWRkQ29uc3RydWN0TWV0YWRhdGEsIE1ldGhvZE1ldGFkYXRhIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvbWV0YWRhdGEtcmVzb3VyY2UnO1xuaW1wb3J0IHsgcHJvcGVydHlJbmplY3RhYmxlIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvcHJvcC1pbmplY3RhYmxlJztcbmltcG9ydCB0eXBlIHsgQ29uc3RydWN0IH0gZnJvbSAnY29uc3RydWN0cyc7XG5pbXBvcnQgdHlwZSB7IENvbHVtbiB9IGZyb20gJy4vc2NoZW1hJztcbmltcG9ydCB0eXBlIHsgUGFydGl0aW9uSW5kZXgsIFRhYmxlQmFzZVByb3BzIH0gZnJvbSAnLi90YWJsZS1iYXNlJztcbmltcG9ydCB7IFRhYmxlQmFzZSB9IGZyb20gJy4vdGFibGUtYmFzZSc7XG5cbi8qKlxuICogU2VydmVyLXNpZGUgZW5jcnlwdGlvbiBmb3IgdGhlIFMzIGJ1Y2tldCB0aGF0IGEgbWFuYWdlZCBgUzNUYWJsZWAgY3JlYXRlcy5cbiAqXG4gKiBBcHBsaWVzIG9ubHkgd2hlbiB0aGUgdGFibGUgbWFuYWdlcyBpdHMgb3duIGJ1Y2tldCAodmlhXG4gKiBgUzNUYWJsZVN0b3JhZ2UubWFuYWdlZEJ1Y2tldGApLiBBbiBleGlzdGluZyBidWNrZXQga2VlcHMgd2hhdGV2ZXIgZW5jcnlwdGlvblxuICogaXQgd2FzIGNyZWF0ZWQgd2l0aC5cbiAqL1xuZXhwb3J0IGNsYXNzIFMzVGFibGVFbmNyeXB0aW9uIHtcbiAgLyoqXG4gICAqIFNlcnZlci1zaWRlIGVuY3J5cHRpb24gKFNTRS1TMykgd2l0aCBhbiBBbWF6b24gUzMtbWFuYWdlZCBrZXkuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIHMzTWFuYWdlZCgpOiBTM1RhYmxlRW5jcnlwdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBTM1RhYmxlRW5jcnlwdGlvbihzMy5CdWNrZXRFbmNyeXB0aW9uLlMzX01BTkFHRUQpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNlcnZlci1zaWRlIGVuY3J5cHRpb24gKFNTRS1LTVMpIHdpdGggYW4gQVdTIEtNUyBrZXkgbWFuYWdlZCBieSB0aGUgYWNjb3VudCBvd25lci5cbiAgICpcbiAgICogQHBhcmFtIGtleSB0aGUgS01TIGtleSB1c2VkIHRvIGVuY3J5cHQgdGhlIGRhdGEuIEEga2V5IGlzIGNyZWF0ZWQgaWYgb25lIGlzIG5vdCBwcm92aWRlZC5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMga21zKGtleT86IGttcy5JS2V5KTogUzNUYWJsZUVuY3J5cHRpb24ge1xuICAgIHJldHVybiBuZXcgUzNUYWJsZUVuY3J5cHRpb24oczMuQnVja2V0RW5jcnlwdGlvbi5LTVMsIGtleSk7XG4gIH1cblxuICAvKipcbiAgICogU2VydmVyLXNpZGUgZW5jcnlwdGlvbiAoU1NFLUtNUykgd2l0aCBhbiBBV1MgS01TIGtleSBtYW5hZ2VkIGJ5IHRoZSBLTVMgc2VydmljZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMga21zTWFuYWdlZCgpOiBTM1RhYmxlRW5jcnlwdGlvbiB7XG4gICAgcmV0dXJuIG5ldyBTM1RhYmxlRW5jcnlwdGlvbihzMy5CdWNrZXRFbmNyeXB0aW9uLktNU19NQU5BR0VEKTtcbiAgfVxuXG4gIC8qKiBAaW50ZXJuYWwgKi9cbiAgcHVibGljIHJlYWRvbmx5IF9idWNrZXRFbmNyeXB0aW9uOiBzMy5CdWNrZXRFbmNyeXB0aW9uO1xuXG4gIC8qKlxuICAgKiBAaW50ZXJuYWxcbiAgICogVHlwZWQgYGttcy5JS2V5YCAobm90IGBJS2V5UmVmYCkgYmVjYXVzZSBpdCBpcyBmb3J3YXJkZWQgdG8gYHMzLkJ1Y2tldGAsIHdob3NlIGBlbmNyeXB0aW9uS2V5YCBwcm9wIHJlcXVpcmVzIGBJS2V5YC5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBfa21zS2V5Pzoga21zLklLZXk7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3RvcihidWNrZXRFbmNyeXB0aW9uOiBzMy5CdWNrZXRFbmNyeXB0aW9uLCBrbXNLZXk/OiBrbXMuSUtleSkge1xuICAgIHRoaXMuX2J1Y2tldEVuY3J5cHRpb24gPSBidWNrZXRFbmNyeXB0aW9uO1xuICAgIHRoaXMuX2ttc0tleSA9IGttc0tleTtcbiAgfVxufVxuXG4vKipcbiAqIFdoZXJlIGFuIGBTM1RhYmxlYCBzdG9yZXMgaXRzIGRhdGEuXG4gKlxuICogVGhlIHR3byBwYXRocyBhcmUgbXV0dWFsbHkgZXhjbHVzaXZlOiBhIG1hbmFnZWQgYnVja2V0IG1heSBzcGVjaWZ5IGl0c1xuICogc2VydmVyLXNpZGUgZW5jcnlwdGlvbiwgd2hpbGUgYW4gZXhpc3RpbmcgYnVja2V0IGtlZXBzIGl0cyBvd24gZW5jcnlwdGlvbiDigJQgc29cbiAqIGFuIGVuY3J5cHRpb24gY2hvaWNlIGNhbiBuZXZlciBiZSBwYWlyZWQgd2l0aCBhIGJyaW5nLXlvdXItb3duIGJ1Y2tldC5cbiAqL1xuZXhwb3J0IGNsYXNzIFMzVGFibGVTdG9yYWdlIHtcbiAgLyoqXG4gICAqIFN0b3JlIHRoZSB0YWJsZSdzIGRhdGEgaW4gYSBidWNrZXQgY3JlYXRlZCBhbmQgbWFuYWdlZCBieSB0aGUgdGFibGUuXG4gICAqXG4gICAqIEBwYXJhbSBlbmNyeXB0aW9uIHRoZSBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIGZvciB0aGUgY3JlYXRlZCBidWNrZXQuXG4gICAqIEBkZWZhdWx0IC0gUzMtbWFuYWdlZCAoU1NFLVMzKSBlbmNyeXB0aW9uXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIG1hbmFnZWRCdWNrZXQoZW5jcnlwdGlvbj86IFMzVGFibGVFbmNyeXB0aW9uKTogUzNUYWJsZVN0b3JhZ2Uge1xuICAgIHJldHVybiBuZXcgUzNUYWJsZVN0b3JhZ2UodW5kZWZpbmVkLCBlbmNyeXB0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTdG9yZSB0aGUgdGFibGUncyBkYXRhIGluIGFuIGV4aXN0aW5nIGJ1Y2tldC4gQ0RLIGRvZXMgbm90IG1hbmFnZSB0aGVcbiAgICogYnVja2V0J3MgZW5jcnlwdGlvbi5cbiAgICpcbiAgICogVGhlIGJ1Y2tldCBjYW4gYmUgb25lIHlvdSBkb24ndCBvd24sIGltcG9ydGVkIHdpdGhcbiAgICogYEJ1Y2tldC5mcm9tQnVja2V0QXJuKClgIG9yIGBCdWNrZXQuZnJvbUJ1Y2tldEF0dHJpYnV0ZXMoKWAuIElmIHRoYXQgYnVja2V0XG4gICAqIGlzIEtNUy1lbmNyeXB0ZWQsIGltcG9ydCBpdCB3aXRoIGBCdWNrZXQuZnJvbUJ1Y2tldEF0dHJpYnV0ZXMoKWAgYW5kIHN1cHBseVxuICAgKiB0aGUgYGVuY3J5cHRpb25LZXlgIGF0dHJpYnV0ZS4gT3RoZXJ3aXNlLCBDREsgaGFzIG5vIHJlZmVyZW5jZSB0byB0aGUga2V5LFxuICAgKiB3aGljaCBtZWFucyB0aGF0IGBTM1RhYmxlLmdyYW50UmVhZCgpYC9gZ3JhbnRXcml0ZSgpYCB3aWxsIGNvcnJlY3RseSBncmFudFxuICAgKiBTMyBhY2Nlc3MgYnV0IHNpbGVudGx5IHNraXAgdGhlIEtNUyBwZXJtaXNzaW9ucyBvbiB0aGUga2V5LiBBcyBhIGNvbnNlcXVlbmNlLFxuICAgKiBhdCBydW50aW1lLCByZWFkcyBhbmQgd3JpdGVzIHdpbGwgZmFpbCB3aXRoIGFjY2VzcyBkZW5pZWQgb24gdGhlIGtleS5cbiAgICpcbiAgICogQHBhcmFtIGJ1Y2tldCB0aGUgYnVja2V0IHRoYXQgaG9sZHMgdGhlIHRhYmxlJ3MgZGF0YS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZnJvbUJ1Y2tldChidWNrZXQ6IHMzLklCdWNrZXQpOiBTM1RhYmxlU3RvcmFnZSB7XG4gICAgcmV0dXJuIG5ldyBTM1RhYmxlU3RvcmFnZShidWNrZXQsIHVuZGVmaW5lZCk7XG4gIH1cblxuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyByZWFkb25seSBfYnVja2V0PzogczMuSUJ1Y2tldDtcblxuICAvKiogQGludGVybmFsICovXG4gIHB1YmxpYyByZWFkb25seSBfZW5jcnlwdGlvbj86IFMzVGFibGVFbmNyeXB0aW9uO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoYnVja2V0PzogczMuSUJ1Y2tldCwgZW5jcnlwdGlvbj86IFMzVGFibGVFbmNyeXB0aW9uKSB7XG4gICAgdGhpcy5fYnVja2V0ID0gYnVja2V0O1xuICAgIHRoaXMuX2VuY3J5cHRpb24gPSBlbmNyeXB0aW9uO1xuICB9XG59XG5cbi8qKlxuICogQ2xpZW50LXNpZGUgZW5jcnlwdGlvbiBmb3IgYW4gYFMzVGFibGVgJ3MgZGF0YS5cbiAqXG4gKiBJbmRlcGVuZGVudCBvZiB0aGUgYnVja2V0J3Mgc2VydmVyLXNpZGUgZW5jcnlwdGlvbiBhbmQgb2Ygd2hvIG93bnMgdGhlIGJ1Y2tldDpcbiAqIHRoZSBkYXRhIGlzIGVuY3J5cHRlZCBieSB0aGUgY2xpZW50IGJlZm9yZSBpdCBpcyB3cml0dGVuIHRvIFMzLiBXaGVuIHNldCwgdGhlXG4gKiBgZ3JhbnQqYCBtZXRob2RzIGFsc28gZ3JhbnQgdGhlIHJlbGV2YW50IEtNUyBwZXJtaXNzaW9ucyBvbiB0aGUga2V5LlxuICovXG5leHBvcnQgY2xhc3MgVGFibGVDbGllbnRTaWRlRW5jcnlwdGlvbiB7XG4gIC8qKlxuICAgKiBDbGllbnQtc2lkZSBlbmNyeXB0aW9uIChDU0UtS01TKSB3aXRoIGFuIEFXUyBLTVMga2V5IG1hbmFnZWQgYnkgdGhlIGFjY291bnQgb3duZXIuXG4gICAqXG4gICAqIEBwYXJhbSBrZXkgdGhlIEtNUyBrZXkgdXNlZCB0byBlbmNyeXB0IHRoZSBkYXRhLiBBIGtleSBpcyBjcmVhdGVkIGlmIG9uZSBpcyBub3QgcHJvdmlkZWQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGttcyhrZXk/OiBrbXMuSUtleVJlZik6IFRhYmxlQ2xpZW50U2lkZUVuY3J5cHRpb24ge1xuICAgIHJldHVybiBuZXcgVGFibGVDbGllbnRTaWRlRW5jcnlwdGlvbihrZXkpO1xuICB9XG5cbiAgLyoqIEBpbnRlcm5hbCAqL1xuICBwdWJsaWMgcmVhZG9ubHkgX2ttc0tleT86IGttcy5JS2V5UmVmO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3Ioa21zS2V5Pzoga21zLklLZXlSZWYpIHtcbiAgICB0aGlzLl9rbXNLZXkgPSBrbXNLZXk7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBTM1RhYmxlUHJvcHMgZXh0ZW5kcyBUYWJsZUJhc2VQcm9wcyB7XG4gIC8qKlxuICAgKiBXaGVyZSB0aGUgdGFibGUncyBkYXRhIGlzIHN0b3JlZDogYSBidWNrZXQgY3JlYXRlZCBhbmQgbWFuYWdlZCBieSB0aGUgdGFibGUsXG4gICAqIG9yIGFuIGV4aXN0aW5nIGJ1Y2tldCB5b3UgcHJvdmlkZS5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBhIG1hbmFnZWQgYnVja2V0IHdpdGggUzMtbWFuYWdlZCAoU1NFLVMzKSBlbmNyeXB0aW9uXG4gICAqL1xuICByZWFkb25seSBzdG9yYWdlPzogUzNUYWJsZVN0b3JhZ2U7XG5cbiAgLyoqXG4gICAqIFMzIHByZWZpeCB1bmRlciB3aGljaCB0YWJsZSBvYmplY3RzIGFyZSBzdG9yZWQuXG4gICAqXG4gICAqIFdoZW4gdGhlIHRhYmxlIHNoYXJlcyBhIGJ1Y2tldCB3aXRoIG90aGVyIHRhYmxlcyBvciBjb25zdW1lcnMsIHNldCB0aGlzIHNvXG4gICAqIHRoYXQgdGhlIGBncmFudCpgIG1ldGhvZHMgc2NvcGUgUzMgYWNjZXNzIHRvIHRoaXMgdGFibGUncyBkYXRhLiBXaXRob3V0IGFcbiAgICogcHJlZml4LCB0aG9zZSBncmFudHMgY292ZXIgdGhlIGVudGlyZSBidWNrZXQuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gTm8gcHJlZml4LiBUaGUgZGF0YSB3aWxsIGJlIHN0b3JlZCB1bmRlciB0aGUgcm9vdCBvZiB0aGUgYnVja2V0LlxuICAgKi9cbiAgcmVhZG9ubHkgczNQcmVmaXg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENsaWVudC1zaWRlIGVuY3J5cHRpb24gKENTRS1LTVMpIGZvciB0aGUgdGFibGUncyBkYXRhLlxuICAgKlxuICAgKiBJbmRlcGVuZGVudCBvZiB0aGUgYnVja2V0J3Mgc2VydmVyLXNpZGUgZW5jcnlwdGlvbiwgYW5kIHZhbGlkIHdoZXRoZXIgdGhlXG4gICAqIGJ1Y2tldCBpcyBtYW5hZ2VkIG9yIHByb3ZpZGVkLlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIG5vIGNsaWVudC1zaWRlIGVuY3J5cHRpb25cbiAgICovXG4gIHJlYWRvbmx5IGNsaWVudFNpZGVFbmNyeXB0aW9uPzogVGFibGVDbGllbnRTaWRlRW5jcnlwdGlvbjtcbn1cblxuLyoqXG4gKiBBIEdsdWUgdGFibGUgdGhhdCB0YXJnZXRzIGEgUzMgZGF0YXNldC5cbiAqIEByZXNvdXJjZSBBV1M6OkdsdWU6OlRhYmxlXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmV4cG9ydCBjbGFzcyBTM1RhYmxlIGV4dGVuZHMgVGFibGVCYXNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtZ2x1ZS1hbHBoYS5TM1RhYmxlJztcblxuICBwcml2YXRlIHJlc291cmNlOiBDZm5UYWJsZTtcblxuICAvKipcbiAgICogUzMgYnVja2V0IGluIHdoaWNoIHRoZSB0YWJsZSdzIGRhdGEgcmVzaWRlcy5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBidWNrZXQ6IHMzLklCdWNrZXQ7XG5cbiAgLyoqXG4gICAqIFMzIEtleSBQcmVmaXggdW5kZXIgd2hpY2ggdGhpcyB0YWJsZSdzIGZpbGVzIGFyZSBzdG9yZWQgaW4gUzMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgczNQcmVmaXg6IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIEtNUyBrZXkgdXNlZCBmb3IgY2xpZW50LXNpZGUgZW5jcnlwdGlvbiBvZiB0aGUgdGFibGUncyBkYXRhLCBpZlxuICAgKiBgY2xpZW50U2lkZUVuY3J5cHRpb25gIHdhcyBjb25maWd1cmVkLiBPdGhlcndpc2UsIGB1bmRlZmluZWRgLlxuICAgKlxuICAgKiBGb3Igc2VydmVyLXNpZGUgKGJ1Y2tldCkgZW5jcnlwdGlvbiwgcmVhZCBgYnVja2V0LmVuY3J5cHRpb25LZXlgIGluc3RlYWQuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgY2xpZW50U2lkZUVuY3J5cHRpb25LZXk/OiBrbXMuSUtleVJlZjtcblxuICAvKipcbiAgICogVGhpcyB0YWJsZSdzIHBhcnRpdGlvbiBpbmRleGVzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBhcnRpdGlvbkluZGV4ZXM/OiBQYXJ0aXRpb25JbmRleFtdO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSB0YWJsZVJlc291cmNlOiBDZm5UYWJsZTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZGF0YSBidWNrZXQgd2FzIHN1cHBsaWVkIGJ5IHRoZSB1c2VyIChhcyBvcHBvc2VkIHRvIGNyZWF0ZWQgYnlcbiAgICogdGhpcyBjb25zdHJ1Y3QpLiBBIHVzZXItc3VwcGxpZWQgYnVja2V0IG1heSBob2xkIGRhdGEgZm9yIG90aGVyIHRhYmxlcywgc29cbiAgICogZ3JhbnRpbmcgYWNjZXNzIHRvIHRoZSB3aG9sZSBidWNrZXQgY2FuIG92ZXItZ3JhbnQuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHVzZXJQcm92aWRlZEJ1Y2tldDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUzNUYWJsZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG4gICAgdGhpcy5zM1ByZWZpeCA9IHByb3BzLnMzUHJlZml4ID8/ICcnO1xuICAgIGNvbnN0IHN0b3JhZ2UgPSBwcm9wcy5zdG9yYWdlID8/IFMzVGFibGVTdG9yYWdlLm1hbmFnZWRCdWNrZXQoKTtcbiAgICB0aGlzLnVzZXJQcm92aWRlZEJ1Y2tldCA9IHN0b3JhZ2UuX2J1Y2tldCAhPT0gdW5kZWZpbmVkO1xuICAgIHRoaXMuYnVja2V0ID0gc3RvcmFnZS5fYnVja2V0ID8/IHRoaXMuY3JlYXRlTWFuYWdlZEJ1Y2tldChzdG9yYWdlLl9lbmNyeXB0aW9uKTtcbiAgICBpZiAocHJvcHMuY2xpZW50U2lkZUVuY3J5cHRpb24pIHtcbiAgICAgIC8vIENTRS1LTVM6IHVzZSB0aGUgcHJvdmlkZWQga2V5IG9yIGNyZWF0ZSBvbmUgYXV0b21hdGljYWxseS4gVGhlIGJ1Y2tldCdzXG4gICAgICAvLyBvd24gc2VydmVyLXNpZGUgZW5jcnlwdGlvbiBpcyBpbmRlcGVuZGVudCBhbmQgY29tZXMgZnJvbSBgc3RvcmFnZWAuXG4gICAgICB0aGlzLmNsaWVudFNpZGVFbmNyeXB0aW9uS2V5ID0gcHJvcHMuY2xpZW50U2lkZUVuY3J5cHRpb24uX2ttc0tleSA/PyBuZXcga21zLktleSh0aGlzLCAnS2V5Jyk7XG4gICAgfVxuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBDZm5UYWJsZSh0aGlzLCAnVGFibGUnLCB7XG4gICAgICBjYXRhbG9nSWQ6IHByb3BzLmRhdGFiYXNlLmNhdGFsb2cuY2F0YWxvZ0lkLFxuXG4gICAgICBkYXRhYmFzZU5hbWU6IHByb3BzLmRhdGFiYXNlLmRhdGFiYXNlTmFtZSxcblxuICAgICAgdGFibGVJbnB1dDoge1xuICAgICAgICBuYW1lOiB0aGlzLnBoeXNpY2FsTmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uIHx8IGAke3RoaXMucGh5c2ljYWxOYW1lfSBnZW5lcmF0ZWQgYnkgQ0RLYCxcblxuICAgICAgICBwYXJ0aXRpb25LZXlzOiByZW5kZXJDb2x1bW5zKHByb3BzLnBhcnRpdGlvbktleXMpLFxuXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAnY2xhc3NpZmljYXRpb24nOiBwcm9wcy5kYXRhRm9ybWF0LmNsYXNzaWZpY2F0aW9uU3RyaW5nPy52YWx1ZSxcbiAgICAgICAgICAncGFydGl0aW9uX2ZpbHRlcmluZy5lbmFibGVkJzogcHJvcHMuZW5hYmxlUGFydGl0aW9uRmlsdGVyaW5nLFxuICAgICAgICAgIC4uLnRoaXMucGFyYW1ldGVycyxcbiAgICAgICAgICAvLyBNYW5hZ2VkIGtleXMgYXJlIGVtaXR0ZWQgbGFzdCBzbyBmcmVlLWZvcm0gYHBhcmFtZXRlcnNgIGNhbm5vdFxuICAgICAgICAgIC8vIHNpbGVudGx5IG92ZXJyaWRlIHRoZW0uIENvbmZsaWN0cyBhcmUgcmVqZWN0ZWQgaW4gYFRhYmxlQmFzZWAuXG4gICAgICAgICAgJ2hhc19lbmNyeXB0ZWRfZGF0YSc6IHRoaXMuaGFzRW5jcnlwdGVkRGF0YSxcbiAgICAgICAgfSxcbiAgICAgICAgc3RvcmFnZURlc2NyaXB0b3I6IHtcbiAgICAgICAgICBsb2NhdGlvbjogYHMzOi8vJHt0aGlzLmJ1Y2tldC5idWNrZXROYW1lfS8ke3RoaXMuczNQcmVmaXh9YCxcbiAgICAgICAgICBjb21wcmVzc2VkOiB0aGlzLmNvbXByZXNzZWQsXG4gICAgICAgICAgc3RvcmVkQXNTdWJEaXJlY3RvcmllczogcHJvcHMuc3RvcmVkQXNTdWJEaXJlY3RvcmllcyA/PyBmYWxzZSxcbiAgICAgICAgICBjb2x1bW5zOiByZW5kZXJDb2x1bW5zKHByb3BzLmNvbHVtbnMpLFxuICAgICAgICAgIGlucHV0Rm9ybWF0OiBwcm9wcy5kYXRhRm9ybWF0LmlucHV0Rm9ybWF0LmNsYXNzTmFtZSxcbiAgICAgICAgICBvdXRwdXRGb3JtYXQ6IHByb3BzLmRhdGFGb3JtYXQub3V0cHV0Rm9ybWF0LmNsYXNzTmFtZSxcbiAgICAgICAgICBzZXJkZUluZm86IHtcbiAgICAgICAgICAgIHNlcmlhbGl6YXRpb25MaWJyYXJ5OiBwcm9wcy5kYXRhRm9ybWF0LnNlcmlhbGl6YXRpb25MaWJyYXJ5LmNsYXNzTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHByb3BzLnN0b3JhZ2VQYXJhbWV0ZXJzID8gcHJvcHMuc3RvcmFnZVBhcmFtZXRlcnMucmVkdWNlKChhY2MsIHBhcmFtKSA9PiB7XG4gICAgICAgICAgICBpZiAocGFyYW0ua2V5IGluIGFjYykge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBEdXBsaWNhdGVTdG9yYWdlUGFyYW1ldGVyS2V5YCwgYER1cGxpY2F0ZSBzdG9yYWdlIHBhcmFtZXRlciBrZXk6ICR7cGFyYW0ua2V5fWAsIHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qga2V5ID0gcGFyYW0ua2V5O1xuICAgICAgICAgICAgYWNjW2tleV0gPSBwYXJhbS52YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgfSwge30gYXMgeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSkgOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG5cbiAgICAgICAgdGFibGVUeXBlOiAnRVhURVJOQUxfVEFCTEUnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMudGFibGVSZXNvdXJjZSA9IHRoaXMucmVzb3VyY2U7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG5cbiAgICAvLyBQYXJ0aXRpb24gaW5kZXggY3JlYXRpb24gcmVsaWVzIG9uIGNyZWF0ZWQgdGFibGUuXG4gICAgaWYgKHByb3BzLnBhcnRpdGlvbkluZGV4ZXMpIHtcbiAgICAgIHRoaXMucGFydGl0aW9uSW5kZXhlcyA9IHByb3BzLnBhcnRpdGlvbkluZGV4ZXM7XG4gICAgICB0aGlzLnBhcnRpdGlvbkluZGV4ZXMuZm9yRWFjaCgoaW5kZXgpID0+IHRoaXMuYWRkUGFydGl0aW9uSW5kZXgoaW5kZXgpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTmFtZSBvZiB0aGlzIHRhYmxlLlxuICAgKi9cbiAgQG1lbW9pemVkR2V0dGVyXG4gIHB1YmxpYyBnZXQgdGFibGVOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2VOYW1lQXR0cmlidXRlKHRoaXMucmVzb3VyY2UucmVmKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBUk4gb2YgdGhpcyB0YWJsZS5cbiAgICovXG4gIEBtZW1vaXplZEdldHRlclxuICBwdWJsaWMgZ2V0IHRhYmxlQXJuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2suZm9ybWF0QXJuKHtcbiAgICAgIHNlcnZpY2U6ICdnbHVlJyxcbiAgICAgIHJlc291cmNlOiAndGFibGUnLFxuICAgICAgcmVzb3VyY2VOYW1lOiBgJHt0aGlzLmRhdGFiYXNlLmRhdGFiYXNlTmFtZX0vJHt0aGlzLnRhYmxlTmFtZX1gLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHJlYWQgcGVybWlzc2lvbnMgdG8gdGhlIHRhYmxlIGFuZCB0aGUgdW5kZXJseWluZyBkYXRhIHN0b3JlZCBpbiBTMyB0byBhbiBJQU0gcHJpbmNpcGFsLlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgdGhlIHByaW5jaXBhbFxuICAgKi9cbiAgQE1ldGhvZE1ldGFkYXRhKClcbiAgcHVibGljIGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgY29uc3QgcmV0ID0gdGhpcy5ncmFudChncmFudGVlLCByZWFkUGVybWlzc2lvbnMpO1xuICAgIGlmICh0aGlzLmNsaWVudFNpZGVFbmNyeXB0aW9uS2V5KSB7IGttcy5LZXlHcmFudHMuZnJvbUtleSh0aGlzLmNsaWVudFNpZGVFbmNyeXB0aW9uS2V5KS5kZWNyeXB0KGdyYW50ZWUpOyB9XG4gICAgdGhpcy5idWNrZXQuZ3JhbnRSZWFkKGdyYW50ZWUsIHRoaXMuZ2VuZXJhdGVTM1ByZWZpeEZvckdyYW50KCkpO1xuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgd3JpdGUgcGVybWlzc2lvbnMgdG8gdGhlIHRhYmxlIGFuZCB0aGUgdW5kZXJseWluZyBkYXRhIHN0b3JlZCBpbiBTMyB0byBhbiBJQU0gcHJpbmNpcGFsLlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgdGhlIHByaW5jaXBhbFxuICAgKi9cbiAgQE1ldGhvZE1ldGFkYXRhKClcbiAgcHVibGljIGdyYW50V3JpdGUoZ3JhbnRlZTogaWFtLklHcmFudGFibGUpOiBpYW0uR3JhbnQge1xuICAgIGNvbnN0IHJldCA9IHRoaXMuZ3JhbnQoZ3JhbnRlZSwgd3JpdGVQZXJtaXNzaW9ucyk7XG4gICAgaWYgKHRoaXMuY2xpZW50U2lkZUVuY3J5cHRpb25LZXkpIHsga21zLktleUdyYW50cy5mcm9tS2V5KHRoaXMuY2xpZW50U2lkZUVuY3J5cHRpb25LZXkpLmVuY3J5cHQoZ3JhbnRlZSk7IH1cbiAgICB0aGlzLmJ1Y2tldC5ncmFudFdyaXRlKGdyYW50ZWUsIHRoaXMuZ2VuZXJhdGVTM1ByZWZpeEZvckdyYW50KCkpO1xuICAgIHJldHVybiByZXQ7XG4gIH1cblxuICAvKipcbiAgICogR3JhbnQgcmVhZCBhbmQgd3JpdGUgcGVybWlzc2lvbnMgdG8gdGhlIHRhYmxlIGFuZCB0aGUgdW5kZXJseWluZyBkYXRhIHN0b3JlZCBpbiBTMyB0byBhbiBJQU0gcHJpbmNpcGFsLlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgdGhlIHByaW5jaXBhbFxuICAgKi9cbiAgQE1ldGhvZE1ldGFkYXRhKClcbiAgcHVibGljIGdyYW50UmVhZFdyaXRlKGdyYW50ZWU6IGlhbS5JR3JhbnRhYmxlKTogaWFtLkdyYW50IHtcbiAgICBjb25zdCByZXQgPSB0aGlzLmdyYW50KGdyYW50ZWUsIFsuLi5yZWFkUGVybWlzc2lvbnMsIC4uLndyaXRlUGVybWlzc2lvbnNdKTtcbiAgICBpZiAodGhpcy5jbGllbnRTaWRlRW5jcnlwdGlvbktleSkgeyBrbXMuS2V5R3JhbnRzLmZyb21LZXkodGhpcy5jbGllbnRTaWRlRW5jcnlwdGlvbktleSkuZW5jcnlwdERlY3J5cHQoZ3JhbnRlZSk7IH1cbiAgICB0aGlzLmJ1Y2tldC5ncmFudFJlYWRXcml0ZShncmFudGVlLCB0aGlzLmdlbmVyYXRlUzNQcmVmaXhGb3JHcmFudCgpKTtcbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdlbmVyYXRlUzNQcmVmaXhGb3JHcmFudCgpIHtcbiAgICAvLyBXaGVuIHRoZSB1c2VyIHN1cHBsaWVkIHRoZWlyIG93biBidWNrZXQgYW5kIGRpZCBub3Qgc2NvcGUgdGhlIHRhYmxlIHRvIGFcbiAgICAvLyBwcmVmaXgsIHRoZSBncmFudCBjb3ZlcnMgZXZlcnkgb2JqZWN0IGluIHRoZSBidWNrZXQgLSB3aGljaCBtYXkgaW5jbHVkZVxuICAgIC8vIGRhdGEgb3duZWQgYnkgb3RoZXIgdGFibGVzIG9yIGNvbnN1bWVycyBzaGFyaW5nIHRoYXQgYnVja2V0LiBXYXJuIHNvIHRoZVxuICAgIC8vIG92ZXItZ3JhbnQgaXMgYSBkZWxpYmVyYXRlIGNob2ljZSByYXRoZXIgdGhhbiBhIHNpbGVudCBzdXJwcmlzZS5cbiAgICBpZiAodGhpcy51c2VyUHJvdmlkZWRCdWNrZXQgJiYgdGhpcy5zM1ByZWZpeCA9PT0gJycpIHtcbiAgICAgIEFubm90YXRpb25zLm9mKHRoaXMpLmFkZFdhcm5pbmdWMihcbiAgICAgICAgJ0Bhd3MtY2RrL2F3cy1nbHVlLWFscGhhOmdyYW50U2NvcGVkVG9XaG9sZUJ1Y2tldCcsXG4gICAgICAgICdncmFudGluZyBhY2Nlc3MgdG8gdGhlIGVudGlyZSBkYXRhIGJ1Y2tldCBiZWNhdXNlIGBzM1ByZWZpeGAgaXMgZW1wdHkgYW5kIGEgc2hhcmVkIGJ1Y2tldCB3YXMgcHJvdmlkZWQ7ICcgK1xuICAgICAgICAgICdzZXQgYHMzUHJlZml4YCB0byBzY29wZSBncmFudHMgdG8gdGhpcyB0YWJsZVxcJ3MgZGF0YSBhbmQgYXZvaWQgZ3JhbnRpbmcgYWNjZXNzIHRvIG90aGVyIHRhYmxlcyBzaGFyaW5nIHRoZSBidWNrZXQuJyxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnMzUHJlZml4ICsgJyonO1xuICB9XG5cbiAgcHJpdmF0ZSBjcmVhdGVNYW5hZ2VkQnVja2V0KGVuY3J5cHRpb24/OiBTM1RhYmxlRW5jcnlwdGlvbik6IHMzLkJ1Y2tldCB7XG4gICAgY29uc3QgZW5jID0gZW5jcnlwdGlvbiA/PyBTM1RhYmxlRW5jcnlwdGlvbi5zM01hbmFnZWQoKTtcbiAgICByZXR1cm4gbmV3IHMzLkJ1Y2tldCh0aGlzLCAnQnVja2V0Jywge1xuICAgICAgZW5jcnlwdGlvbjogZW5jLl9idWNrZXRFbmNyeXB0aW9uLFxuICAgICAgZW5jcnlwdGlvbktleTogZW5jLl9rbXNLZXksXG4gICAgICBlbmZvcmNlU1NMOiB0cnVlLFxuICAgIH0pO1xuICB9XG59XG5cbmNvbnN0IHJlYWRQZXJtaXNzaW9ucyA9IFtcbiAgJ2dsdWU6QmF0Y2hHZXRQYXJ0aXRpb24nLFxuICAnZ2x1ZTpHZXRQYXJ0aXRpb24nLFxuICAnZ2x1ZTpHZXRQYXJ0aXRpb25zJyxcbiAgJ2dsdWU6R2V0VGFibGUnLFxuICAnZ2x1ZTpHZXRUYWJsZXMnLFxuICAnZ2x1ZTpHZXRUYWJsZVZlcnNpb24nLFxuICAnZ2x1ZTpHZXRUYWJsZVZlcnNpb25zJyxcbl07XG5cbmNvbnN0IHdyaXRlUGVybWlzc2lvbnMgPSBbXG4gICdnbHVlOkJhdGNoQ3JlYXRlUGFydGl0aW9uJyxcbiAgJ2dsdWU6QmF0Y2hEZWxldGVQYXJ0aXRpb24nLFxuICAnZ2x1ZTpDcmVhdGVQYXJ0aXRpb24nLFxuICAnZ2x1ZTpEZWxldGVQYXJ0aXRpb24nLFxuICAnZ2x1ZTpVcGRhdGVQYXJ0aXRpb24nLFxuXTtcblxuZnVuY3Rpb24gcmVuZGVyQ29sdW1ucyhjb2x1bW5zPzogQ29sdW1uW10pIHtcbiAgaWYgKGNvbHVtbnMgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbiAgcmV0dXJuIGNvbHVtbnMubWFwKGNvbHVtbiA9PiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5hbWU6IGNvbHVtbi5uYW1lLFxuICAgICAgdHlwZTogY29sdW1uLnR5cGUuaW5wdXRTdHJpbmcsXG4gICAgICBjb21tZW50OiBjb2x1bW4uY29tbWVudCxcbiAgICB9O1xuICB9KTtcbn1cbiJdfQ==
package/lib/schema.js CHANGED
@@ -13,7 +13,7 @@ const helpers_internal_1 = require("aws-cdk-lib/core/lib/helpers-internal");
13
13
  * `Schema` factories don't model, from `Schema.custom(...)`.
14
14
  */
15
15
  class Type {
16
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.Type", version: "2.267.0-alpha.0" };
16
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.Type", version: "2.269.0-alpha.0" };
17
17
  /**
18
18
  * Create a `Type` from its parts.
19
19
  *
@@ -40,7 +40,7 @@ exports.Type = Type;
40
40
  * @see https://docs.aws.amazon.com/athena/latest/ug/data-types.html
41
41
  */
42
42
  class Schema {
43
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.Schema", version: "2.267.0-alpha.0" };
43
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.Schema", version: "2.269.0-alpha.0" };
44
44
  static BOOLEAN = Type._of('boolean', true);
45
45
  static BINARY = Type._of('binary', true);
46
46
  /**
@@ -107,7 +107,7 @@ const JOB_BOOKMARKS_ENCRYPTION_MODE = 'CSE-KMS';
107
107
  * with S3-managed encryption.
108
108
  */
109
109
  class S3Encryption {
110
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.S3Encryption", version: "2.267.0-alpha.0" };
110
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.S3Encryption", version: "2.269.0-alpha.0" };
111
111
  /**
112
112
  * Server-side encryption (SSE) with an Amazon S3-managed key.
113
113
  *
@@ -141,7 +141,7 @@ exports.S3Encryption = S3Encryption;
141
141
  * CloudWatch Logs support only server-side encryption with a KMS key.
142
142
  */
143
143
  class CloudWatchEncryption {
144
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.CloudWatchEncryption", version: "2.267.0-alpha.0" };
144
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.CloudWatchEncryption", version: "2.269.0-alpha.0" };
145
145
  /**
146
146
  * Server-side encryption (SSE) with an AWS KMS key managed by the account owner.
147
147
  *
@@ -163,7 +163,7 @@ exports.CloudWatchEncryption = CloudWatchEncryption;
163
163
  * Job bookmarks support only client-side encryption with a KMS key.
164
164
  */
165
165
  class JobBookmarksEncryption {
166
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.JobBookmarksEncryption", version: "2.267.0-alpha.0" };
166
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.JobBookmarksEncryption", version: "2.269.0-alpha.0" };
167
167
  /**
168
168
  * Client-side encryption (CSE) with an AWS KMS key managed by the account owner.
169
169
  *
@@ -207,7 +207,7 @@ let SecurityConfiguration = (() => {
207
207
  SecurityConfiguration = _classThis = _classDescriptor.value;
208
208
  if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
209
209
  }
210
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.SecurityConfiguration", version: "2.267.0-alpha.0" };
210
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.SecurityConfiguration", version: "2.269.0-alpha.0" };
211
211
  /** Uniquely identifies this class. */
212
212
  static PROPERTY_INJECTION_ID = '@aws-cdk.aws-glue-alpha.SecurityConfiguration';
213
213
  /**
@@ -271,7 +271,7 @@ var StorageParameters;
271
271
  class StorageParameter {
272
272
  key;
273
273
  value;
274
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.StorageParameter", version: "2.267.0-alpha.0" };
274
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.StorageParameter", version: "2.269.0-alpha.0" };
275
275
  /**
276
276
  * The number of rows to skip at the top of a CSV file when the table is being created.
277
277
  */
package/lib/table-base.js CHANGED
@@ -48,7 +48,7 @@ const partition_index_provider_generated_1 = require("../custom-resource-handler
48
48
  * A Glue table.
49
49
  */
50
50
  class TableBase extends core_1.Resource {
51
- static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.TableBase", version: "2.267.0-alpha.0" };
51
+ static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.TableBase", version: "2.269.0-alpha.0" };
52
52
  static fromTableArn(scope, id, tableArn) {
53
53
  const tableName = core_1.Fn.select(1, core_1.Fn.split('/', core_1.Stack.of(scope).splitArn(tableArn, core_1.ArnFormat.SLASH_RESOURCE_NAME).resourceName));
54
54
  return TableBase.fromTableAttributes(scope, id, {
@@ -1,21 +1,40 @@
1
1
  import * as events from 'aws-cdk-lib/aws-events';
2
- import type { CfnCrawler } from 'aws-cdk-lib/aws-glue';
2
+ import type { CfnTrigger, ICrawlerRef, IJobRef } from 'aws-cdk-lib/aws-glue';
3
3
  import type * as cdk from 'aws-cdk-lib/core';
4
- import type { JobState, CrawlerState, ConditionLogicalOperator, PredicateLogical } from '../constants';
5
- import type { IJob } from '../jobs/job';
4
+ import { ConditionLogicalOperator } from '../constants';
5
+ import type { JobState, CrawlerState, PredicateLogical } from '../constants';
6
6
  import type { ISecurityConfiguration } from '../security-configuration';
7
7
  /**
8
- * Represents a trigger action.
8
+ * Options for the execution of a crawler.
9
9
  */
10
- export interface Action {
10
+ export interface CrawlerActionOptions {
11
11
  /**
12
- * The job to be executed.
12
+ * The arguments used when this trigger fires.
13
13
  *
14
- * @default - no job is executed
14
+ * @default - no arguments are passed to the job
15
+ */
16
+ readonly arguments?: {
17
+ [key: string]: string;
18
+ };
19
+ /**
20
+ * The run timeout. This is the maximum time that a run can consume resources before it is terminated and enters TIMEOUT status.
21
+ *
22
+ * @default - the default timeout value set in the job definition
15
23
  */
16
- readonly job?: IJob;
24
+ readonly timeout?: cdk.Duration;
17
25
  /**
18
- * The job arguments used when this trigger fires.
26
+ * The `SecurityConfiguration` to be used with this action.
27
+ *
28
+ * @default - no security configuration is used
29
+ */
30
+ readonly securityConfiguration?: ISecurityConfiguration;
31
+ }
32
+ /**
33
+ * Options for the execution of a job.
34
+ */
35
+ export interface JobActionOptions {
36
+ /**
37
+ * The arguments used when this trigger fires.
19
38
  *
20
39
  * @default - no arguments are passed to the job
21
40
  */
@@ -23,7 +42,7 @@ export interface Action {
23
42
  [key: string]: string;
24
43
  };
25
44
  /**
26
- * The job run timeout. This is the maximum time that a job run can consume resources before it is terminated and enters TIMEOUT status.
45
+ * The run timeout. This is the maximum time that a run can consume resources before it is terminated and enters TIMEOUT status.
27
46
  *
28
47
  * @default - the default timeout value set in the job definition
29
48
  */
@@ -34,12 +53,35 @@ export interface Action {
34
53
  * @default - no security configuration is used
35
54
  */
36
55
  readonly securityConfiguration?: ISecurityConfiguration;
56
+ }
57
+ /**
58
+ * An action initiated by a trigger.
59
+ *
60
+ * An action runs exactly one target: use {@link Action.job} to run a job or
61
+ * {@link Action.crawler} to run a crawler. Because these are separate factory
62
+ * methods, an action can never target both or neither.
63
+ */
64
+ export declare abstract class Action {
37
65
  /**
38
- * The name of the crawler to be used with this action.
66
+ * Create an action that runs a job.
39
67
  *
40
- * @default - no crawler is used
68
+ * @param job the job to run when the trigger fires.
69
+ * @param options additional options for the action.
41
70
  */
42
- readonly crawler?: CfnCrawler;
71
+ static job(job: IJobRef, options?: JobActionOptions): Action;
72
+ /**
73
+ * Create an action that runs a crawler.
74
+ *
75
+ * @param crawler the crawler to run when the trigger fires.
76
+ * @param options additional options for the action.
77
+ */
78
+ static crawler(crawler: ICrawlerRef, options?: CrawlerActionOptions): Action;
79
+ /**
80
+ * Render this action to its CloudFormation representation.
81
+ *
82
+ * @internal
83
+ */
84
+ abstract _render(): CfnTrigger.ActionProperty;
43
85
  }
44
86
  /**
45
87
  * Represents a trigger schedule.
@@ -60,6 +102,18 @@ export declare class TriggerSchedule {
60
102
  * @returns A new TriggerSchedule instance.
61
103
  */
62
104
  static expression(expression: string): TriggerSchedule;
105
+ /**
106
+ * Creates a schedule that fires once a day, at midnight UTC.
107
+ *
108
+ * @returns A new TriggerSchedule instance.
109
+ */
110
+ static daily(): TriggerSchedule;
111
+ /**
112
+ * Creates a schedule that fires once a week, at midnight UTC on Sunday.
113
+ *
114
+ * @returns A new TriggerSchedule instance.
115
+ */
116
+ static weekly(): TriggerSchedule;
63
117
  /**
64
118
  * @param expressionString The expression string for the schedule.
65
119
  */
@@ -72,7 +126,7 @@ export interface Predicate {
72
126
  /**
73
127
  * The logical operator to be applied to the conditions.
74
128
  *
75
- * @default - ConditionLogical.AND if multiple conditions are provided, no logical operator if only one condition
129
+ * @default - PredicateLogical.AND if multiple conditions are provided, no logical operator if only one condition
76
130
  */
77
131
  readonly logical?: PredicateLogical;
78
132
  /**
@@ -83,39 +137,47 @@ export interface Predicate {
83
137
  readonly conditions?: Condition[];
84
138
  }
85
139
  /**
86
- * Represents a trigger condition.
140
+ * Options shared by all trigger conditions.
87
141
  */
88
- export interface Condition {
142
+ export interface ConditionOptions {
89
143
  /**
90
144
  * The logical operator for the condition.
91
145
  *
92
146
  * @default ConditionLogicalOperator.EQUALS
93
147
  */
94
148
  readonly logicalOperator?: ConditionLogicalOperator;
149
+ }
150
+ /**
151
+ * A condition that determines when a conditional trigger fires.
152
+ *
153
+ * A condition watches exactly one target in exactly one state: use
154
+ * {@link Condition.job} to watch a job or {@link Condition.crawler} to watch a
155
+ * crawler. Because the state is a required argument of each factory, a condition
156
+ * can never reference a target without its state, or both a job and a crawler.
157
+ */
158
+ export declare abstract class Condition {
95
159
  /**
96
- * The job to which this condition applies.
97
- *
98
- * @default - no job is specified
99
- */
100
- readonly job?: IJob;
101
- /**
102
- * The condition job state.
160
+ * Create a condition on the state of a job.
103
161
  *
104
- * @default - no job state is specified
162
+ * @param job the job to watch.
163
+ * @param state the job state that satisfies the condition.
164
+ * @param options additional options for the condition.
105
165
  */
106
- readonly state?: JobState;
166
+ static job(job: IJobRef, state: JobState, options?: ConditionOptions): Condition;
107
167
  /**
108
- * The name of the crawler to which this condition applies.
168
+ * Create a condition on the state of a crawler.
109
169
  *
110
- * @default - no crawler is specified
170
+ * @param crawler the crawler to watch.
171
+ * @param crawlState the crawler state that satisfies the condition.
172
+ * @param options additional options for the condition.
111
173
  */
112
- readonly crawlerName?: string;
174
+ static crawler(crawler: ICrawlerRef, crawlState: CrawlerState, options?: ConditionOptions): Condition;
113
175
  /**
114
- * The condition crawler state.
176
+ * Render this condition to its CloudFormation representation.
115
177
  *
116
- * @default - no crawler state is specified
178
+ * @internal
117
179
  */
118
- readonly crawlState?: CrawlerState;
180
+ abstract _render(): CfnTrigger.ConditionProperty;
119
181
  }
120
182
  /**
121
183
  * Represents event trigger batch condition.
@@ -159,9 +221,9 @@ export interface TriggerOptions {
159
221
  export interface OnDemandTriggerOptions extends TriggerOptions {
160
222
  }
161
223
  /**
162
- * Properties for configuring a daily-scheduled Glue Trigger.
224
+ * Base options for triggers that can be started when they are created.
163
225
  */
164
- export interface DailyScheduleTriggerOptions extends TriggerOptions {
226
+ export interface StartableTriggerOptions extends TriggerOptions {
165
227
  /**
166
228
  * Whether to start the trigger on creation or not.
167
229
  *
@@ -170,23 +232,21 @@ export interface DailyScheduleTriggerOptions extends TriggerOptions {
170
232
  readonly startOnCreation?: boolean;
171
233
  }
172
234
  /**
173
- * Properties for configuring a weekly-scheduled Glue Trigger.
235
+ * Properties for configuring a scheduled Glue Trigger.
174
236
  */
175
- export interface WeeklyScheduleTriggerOptions extends DailyScheduleTriggerOptions {
176
- }
177
- /**
178
- * Properties for configuring a custom-scheduled Glue Trigger.
179
- */
180
- export interface CustomScheduledTriggerOptions extends WeeklyScheduleTriggerOptions {
237
+ export interface ScheduledTriggerOptions extends StartableTriggerOptions {
181
238
  /**
182
- * The custom schedule for the trigger.
239
+ * The schedule on which this trigger fires.
240
+ *
241
+ * Build one with {@link TriggerSchedule.daily}, {@link TriggerSchedule.weekly},
242
+ * {@link TriggerSchedule.cron}, or {@link TriggerSchedule.expression}.
183
243
  */
184
244
  readonly schedule: TriggerSchedule;
185
245
  }
186
246
  /**
187
247
  * Properties for configuring an Event Bridge based Glue Trigger.
188
248
  */
189
- export interface NotifyEventTriggerOptions extends TriggerOptions {
249
+ export interface EventTriggerOptions extends TriggerOptions {
190
250
  /**
191
251
  * Batch condition for the trigger.
192
252
  *
@@ -197,7 +257,7 @@ export interface NotifyEventTriggerOptions extends TriggerOptions {
197
257
  /**
198
258
  * Properties for configuring a Condition (Predicate) based Glue Trigger.
199
259
  */
200
- export interface ConditionalTriggerOptions extends DailyScheduleTriggerOptions {
260
+ export interface ConditionalTriggerOptions extends StartableTriggerOptions {
201
261
  /**
202
262
  * The predicate for the trigger.
203
263
  */