@aws-cdk/aws-glue-alpha 2.266.0-alpha.0 → 2.268.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.
- package/.jsii +1002 -642
- package/.jsii.tabl.json.gz +0 -0
- package/.warnings.jsii.js +0 -58
- package/README.md +52 -33
- package/awslint.json +4 -0
- package/lib/catalog.d.ts +2 -2
- package/lib/catalog.js +4 -4
- package/lib/code.js +3 -3
- package/lib/connection.d.ts +41 -1
- package/lib/connection.js +48 -9
- package/lib/data-format.js +5 -5
- package/lib/data-quality-ruleset.d.ts +20 -9
- package/lib/data-quality-ruleset.js +33 -6
- package/lib/database.d.ts +3 -1
- package/lib/database.js +8 -2
- package/lib/external-table.js +1 -1
- package/lib/index.d.ts +0 -1
- package/lib/index.js +1 -2
- package/lib/jobs/job.d.ts +1 -1
- package/lib/jobs/job.js +3 -3
- package/lib/jobs/pyspark-etl-job.d.ts +1 -1
- package/lib/jobs/pyspark-etl-job.js +3 -3
- package/lib/jobs/pyspark-flex-etl-job.d.ts +1 -1
- package/lib/jobs/pyspark-flex-etl-job.js +3 -3
- package/lib/jobs/pyspark-streaming-job.d.ts +1 -1
- package/lib/jobs/pyspark-streaming-job.js +3 -3
- package/lib/jobs/python-shell-job.js +1 -1
- package/lib/jobs/ray-job.js +1 -1
- package/lib/jobs/scala-spark-etl-job.d.ts +3 -2
- package/lib/jobs/scala-spark-etl-job.js +5 -4
- package/lib/jobs/scala-spark-flex-etl-job.d.ts +11 -20
- package/lib/jobs/scala-spark-flex-etl-job.js +12 -11
- package/lib/jobs/scala-spark-streaming-job.d.ts +3 -2
- package/lib/jobs/scala-spark-streaming-job.js +5 -4
- package/lib/jobs/spark-job.js +1 -1
- package/lib/partition-projection.d.ts +8 -8
- package/lib/partition-projection.js +49 -2
- package/lib/s3-table.d.ts +86 -40
- package/lib/s3-table.js +136 -85
- package/lib/schema.d.ts +26 -6
- package/lib/schema.js +74 -77
- package/lib/security-configuration.js +4 -4
- package/lib/storage-parameter.d.ts +14 -3
- package/lib/storage-parameter.js +16 -6
- package/lib/table-base.d.ts +1 -1
- package/lib/table-base.js +2 -2
- package/lib/triggers/trigger-options.d.ts +1 -1
- package/lib/triggers/trigger-options.js +2 -2
- package/lib/triggers/workflow.js +2 -2
- package/package.json +7 -7
- package/lib/table-deprecated.d.ts +0 -13
- package/lib/table-deprecated.js +0 -70
package/lib/s3-table.js
CHANGED
|
@@ -67,7 +67,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
67
67
|
};
|
|
68
68
|
})();
|
|
69
69
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
70
|
-
exports.S3Table = exports.
|
|
70
|
+
exports.S3Table = exports.TableClientSideEncryption = exports.S3TableStorage = exports.S3TableEncryption = void 0;
|
|
71
71
|
const jsiiDeprecationWarnings = require("../.warnings.jsii.js");
|
|
72
72
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
73
73
|
const aws_cdk_lib_1 = require("aws-cdk-lib");
|
|
@@ -79,35 +79,125 @@ const metadata_resource_1 = require("aws-cdk-lib/core/lib/metadata-resource");
|
|
|
79
79
|
const prop_injectable_1 = require("aws-cdk-lib/core/lib/prop-injectable");
|
|
80
80
|
const table_base_1 = require("./table-base");
|
|
81
81
|
/**
|
|
82
|
-
*
|
|
82
|
+
* Server-side encryption for the S3 bucket that a managed `S3Table` creates.
|
|
83
83
|
*
|
|
84
|
-
*
|
|
84
|
+
* Applies only when the table manages its own bucket (via
|
|
85
|
+
* `S3TableStorage.managedBucket`). An existing bucket keeps whatever encryption
|
|
86
|
+
* it was created with.
|
|
85
87
|
*/
|
|
86
|
-
|
|
87
|
-
|
|
88
|
+
class S3TableEncryption {
|
|
89
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.S3TableEncryption", version: "2.268.0-alpha.0" };
|
|
88
90
|
/**
|
|
89
|
-
* Server
|
|
91
|
+
* Server-side encryption (SSE-S3) with an Amazon S3-managed key.
|
|
92
|
+
*/
|
|
93
|
+
static s3Managed() {
|
|
94
|
+
return new S3TableEncryption(s3.BucketEncryption.S3_MANAGED);
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Server-side encryption (SSE-KMS) with an AWS KMS key managed by the account owner.
|
|
90
98
|
*
|
|
91
|
-
* @
|
|
99
|
+
* @param key the KMS key used to encrypt the data. A key is created if one is not provided.
|
|
92
100
|
*/
|
|
93
|
-
|
|
101
|
+
static kms(key) {
|
|
102
|
+
return new S3TableEncryption(s3.BucketEncryption.KMS, key);
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Server-side encryption (SSE-KMS) with an AWS KMS key managed by the KMS service.
|
|
106
|
+
*/
|
|
107
|
+
static kmsManaged() {
|
|
108
|
+
return new S3TableEncryption(s3.BucketEncryption.KMS_MANAGED);
|
|
109
|
+
}
|
|
110
|
+
/** @internal */
|
|
111
|
+
_bucketEncryption;
|
|
94
112
|
/**
|
|
95
|
-
*
|
|
113
|
+
* @internal
|
|
114
|
+
* Typed `kms.IKey` (not `IKeyRef`) because it is forwarded to `s3.Bucket`, whose `encryptionKey` prop requires `IKey`.
|
|
115
|
+
*/
|
|
116
|
+
_kmsKey;
|
|
117
|
+
constructor(bucketEncryption, kmsKey) {
|
|
118
|
+
this._bucketEncryption = bucketEncryption;
|
|
119
|
+
this._kmsKey = kmsKey;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
exports.S3TableEncryption = S3TableEncryption;
|
|
123
|
+
/**
|
|
124
|
+
* Where an `S3Table` stores its data.
|
|
125
|
+
*
|
|
126
|
+
* The two paths are mutually exclusive: a managed bucket may specify its
|
|
127
|
+
* server-side encryption, while an existing bucket keeps its own encryption — so
|
|
128
|
+
* an encryption choice can never be paired with a bring-your-own bucket.
|
|
129
|
+
*/
|
|
130
|
+
class S3TableStorage {
|
|
131
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.S3TableStorage", version: "2.268.0-alpha.0" };
|
|
132
|
+
/**
|
|
133
|
+
* Store the table's data in a bucket created and managed by the table.
|
|
96
134
|
*
|
|
97
|
-
* @
|
|
135
|
+
* @param encryption the server-side encryption for the created bucket.
|
|
136
|
+
* @default - S3-managed (SSE-S3) encryption
|
|
98
137
|
*/
|
|
99
|
-
|
|
138
|
+
static managedBucket(encryption) {
|
|
139
|
+
try {
|
|
140
|
+
jsiiDeprecationWarnings._aws_cdk_aws_glue_alpha_S3TableEncryption(encryption);
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
144
|
+
Error.captureStackTrace(error, this.managedBucket);
|
|
145
|
+
}
|
|
146
|
+
throw error;
|
|
147
|
+
}
|
|
148
|
+
return new S3TableStorage(undefined, encryption);
|
|
149
|
+
}
|
|
100
150
|
/**
|
|
101
|
-
*
|
|
151
|
+
* Store the table's data in an existing bucket. CDK does not manage the
|
|
152
|
+
* bucket's encryption.
|
|
153
|
+
*
|
|
154
|
+
* The bucket can be one you don't own, imported with
|
|
155
|
+
* `Bucket.fromBucketArn()` or `Bucket.fromBucketAttributes()`. If that bucket
|
|
156
|
+
* is KMS-encrypted, import it with `Bucket.fromBucketAttributes()` and supply
|
|
157
|
+
* the `encryptionKey` attribute. Otherwise, CDK has no reference to the key,
|
|
158
|
+
* which means that `S3Table.grantRead()`/`grantWrite()` will correctly grant
|
|
159
|
+
* S3 access but silently skip the KMS permissions on the key. As a consequence,
|
|
160
|
+
* at runtime, reads and writes will fail with access denied on the key.
|
|
161
|
+
*
|
|
162
|
+
* @param bucket the bucket that holds the table's data.
|
|
102
163
|
*/
|
|
103
|
-
|
|
164
|
+
static fromBucket(bucket) {
|
|
165
|
+
return new S3TableStorage(bucket, undefined);
|
|
166
|
+
}
|
|
167
|
+
/** @internal */
|
|
168
|
+
_bucket;
|
|
169
|
+
/** @internal */
|
|
170
|
+
_encryption;
|
|
171
|
+
constructor(bucket, encryption) {
|
|
172
|
+
this._bucket = bucket;
|
|
173
|
+
this._encryption = encryption;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
exports.S3TableStorage = S3TableStorage;
|
|
177
|
+
/**
|
|
178
|
+
* Client-side encryption for an `S3Table`'s data.
|
|
179
|
+
*
|
|
180
|
+
* Independent of the bucket's server-side encryption and of who owns the bucket:
|
|
181
|
+
* the data is encrypted by the client before it is written to S3. When set, the
|
|
182
|
+
* `grant*` methods also grant the relevant KMS permissions on the key.
|
|
183
|
+
*/
|
|
184
|
+
class TableClientSideEncryption {
|
|
185
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.TableClientSideEncryption", version: "2.268.0-alpha.0" };
|
|
104
186
|
/**
|
|
105
|
-
* Client-side encryption (CSE) with an AWS KMS key managed by the account owner.
|
|
187
|
+
* Client-side encryption (CSE-KMS) with an AWS KMS key managed by the account owner.
|
|
106
188
|
*
|
|
107
|
-
* @
|
|
189
|
+
* @param key the KMS key used to encrypt the data. A key is created if one is not provided.
|
|
108
190
|
*/
|
|
109
|
-
|
|
110
|
-
|
|
191
|
+
static kms(key) {
|
|
192
|
+
return new TableClientSideEncryption(key);
|
|
193
|
+
}
|
|
194
|
+
/** @internal */
|
|
195
|
+
_kmsKey;
|
|
196
|
+
constructor(kmsKey) {
|
|
197
|
+
this._kmsKey = kmsKey;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
exports.TableClientSideEncryption = TableClientSideEncryption;
|
|
111
201
|
/**
|
|
112
202
|
* A Glue table that targets a S3 dataset.
|
|
113
203
|
* @resource AWS::Glue::Table
|
|
@@ -142,7 +232,7 @@ let S3Table = (() => {
|
|
|
142
232
|
S3Table = _classThis = _classDescriptor.value;
|
|
143
233
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
144
234
|
}
|
|
145
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.S3Table", version: "2.
|
|
235
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.S3Table", version: "2.268.0-alpha.0" };
|
|
146
236
|
/** Uniquely identifies this class. */
|
|
147
237
|
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-glue-alpha.S3Table';
|
|
148
238
|
resource = __runInitializers(this, _instanceExtraInitializers);
|
|
@@ -155,13 +245,12 @@ let S3Table = (() => {
|
|
|
155
245
|
*/
|
|
156
246
|
s3Prefix;
|
|
157
247
|
/**
|
|
158
|
-
* The
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
* The KMS key used to secure the data if `encryption` is set to `CSE-KMS` or `SSE-KMS`. Otherwise, `undefined`.
|
|
248
|
+
* The KMS key used for client-side encryption of the table's data, if
|
|
249
|
+
* `clientSideEncryption` was configured. Otherwise, `undefined`.
|
|
250
|
+
*
|
|
251
|
+
* For server-side (bucket) encryption, read `bucket.encryptionKey` instead.
|
|
163
252
|
*/
|
|
164
|
-
|
|
253
|
+
clientSideEncryptionKey;
|
|
165
254
|
/**
|
|
166
255
|
* This table's partition indexes.
|
|
167
256
|
*/
|
|
@@ -187,11 +276,14 @@ let S3Table = (() => {
|
|
|
187
276
|
// Enhanced CDK Analytics Telemetry
|
|
188
277
|
(0, metadata_resource_1.addConstructMetadata)(this, props);
|
|
189
278
|
this.s3Prefix = props.s3Prefix ?? '';
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
this.bucket =
|
|
193
|
-
|
|
194
|
-
|
|
279
|
+
const storage = props.storage ?? S3TableStorage.managedBucket();
|
|
280
|
+
this.userProvidedBucket = storage._bucket !== undefined;
|
|
281
|
+
this.bucket = storage._bucket ?? this.createManagedBucket(storage._encryption);
|
|
282
|
+
if (props.clientSideEncryption) {
|
|
283
|
+
// CSE-KMS: use the provided key or create one automatically. The bucket's
|
|
284
|
+
// own server-side encryption is independent and comes from `storage`.
|
|
285
|
+
this.clientSideEncryptionKey = props.clientSideEncryption._kmsKey ?? new kms.Key(this, 'Key');
|
|
286
|
+
}
|
|
195
287
|
this.resource = new aws_glue_1.CfnTable(this, 'Table', {
|
|
196
288
|
catalogId: props.database.catalog.catalogId,
|
|
197
289
|
databaseName: props.database.databaseName,
|
|
@@ -261,8 +353,8 @@ let S3Table = (() => {
|
|
|
261
353
|
*/
|
|
262
354
|
grantRead(grantee) {
|
|
263
355
|
const ret = this.grant(grantee, readPermissions);
|
|
264
|
-
if (this.
|
|
265
|
-
this.
|
|
356
|
+
if (this.clientSideEncryptionKey) {
|
|
357
|
+
kms.KeyGrants.fromKey(this.clientSideEncryptionKey).decrypt(grantee);
|
|
266
358
|
}
|
|
267
359
|
this.bucket.grantRead(grantee, this.generateS3PrefixForGrant());
|
|
268
360
|
return ret;
|
|
@@ -275,8 +367,8 @@ let S3Table = (() => {
|
|
|
275
367
|
*/
|
|
276
368
|
grantWrite(grantee) {
|
|
277
369
|
const ret = this.grant(grantee, writePermissions);
|
|
278
|
-
if (this.
|
|
279
|
-
this.
|
|
370
|
+
if (this.clientSideEncryptionKey) {
|
|
371
|
+
kms.KeyGrants.fromKey(this.clientSideEncryptionKey).encrypt(grantee);
|
|
280
372
|
}
|
|
281
373
|
this.bucket.grantWrite(grantee, this.generateS3PrefixForGrant());
|
|
282
374
|
return ret;
|
|
@@ -289,8 +381,8 @@ let S3Table = (() => {
|
|
|
289
381
|
*/
|
|
290
382
|
grantReadWrite(grantee) {
|
|
291
383
|
const ret = this.grant(grantee, [...readPermissions, ...writePermissions]);
|
|
292
|
-
if (this.
|
|
293
|
-
this.
|
|
384
|
+
if (this.clientSideEncryptionKey) {
|
|
385
|
+
kms.KeyGrants.fromKey(this.clientSideEncryptionKey).encryptDecrypt(grantee);
|
|
294
386
|
}
|
|
295
387
|
this.bucket.grantReadWrite(grantee, this.generateS3PrefixForGrant());
|
|
296
388
|
return ret;
|
|
@@ -306,6 +398,14 @@ let S3Table = (() => {
|
|
|
306
398
|
}
|
|
307
399
|
return this.s3Prefix + '*';
|
|
308
400
|
}
|
|
401
|
+
createManagedBucket(encryption) {
|
|
402
|
+
const enc = encryption ?? S3TableEncryption.s3Managed();
|
|
403
|
+
return new s3.Bucket(this, 'Bucket', {
|
|
404
|
+
encryption: enc._bucketEncryption,
|
|
405
|
+
encryptionKey: enc._kmsKey,
|
|
406
|
+
enforceSSL: true,
|
|
407
|
+
});
|
|
408
|
+
}
|
|
309
409
|
static {
|
|
310
410
|
__runInitializers(_classThis, _classExtraInitializers);
|
|
311
411
|
}
|
|
@@ -329,55 +429,6 @@ const writePermissions = [
|
|
|
329
429
|
'glue:DeletePartition',
|
|
330
430
|
'glue:UpdatePartition',
|
|
331
431
|
];
|
|
332
|
-
// map TableEncryption to bucket's SSE configuration (s3.BucketEncryption)
|
|
333
|
-
const encryptionMappings = {
|
|
334
|
-
[TableEncryption.S3_MANAGED]: s3.BucketEncryption.S3_MANAGED,
|
|
335
|
-
[TableEncryption.KMS_MANAGED]: s3.BucketEncryption.KMS_MANAGED,
|
|
336
|
-
[TableEncryption.KMS]: s3.BucketEncryption.KMS,
|
|
337
|
-
[TableEncryption.CLIENT_SIDE_KMS]: s3.BucketEncryption.S3_MANAGED,
|
|
338
|
-
};
|
|
339
|
-
// create the bucket to store a table's data depending on the `encryption` and `encryptionKey` properties.
|
|
340
|
-
function createBucket(table, props) {
|
|
341
|
-
let bucket = props.bucket;
|
|
342
|
-
if (bucket && (props.encryption !== undefined && props.encryption !== TableEncryption.CLIENT_SIDE_KMS)) {
|
|
343
|
-
throw new aws_cdk_lib_1.UnscopedValidationError((0, helpers_internal_1.lit) `EncryptionWithProvidedBucket`, 'you can not specify encryption settings if you also provide a bucket');
|
|
344
|
-
}
|
|
345
|
-
const encryption = props.encryption || TableEncryption.S3_MANAGED;
|
|
346
|
-
let encryptionKey;
|
|
347
|
-
if (encryption === TableEncryption.CLIENT_SIDE_KMS && props.encryptionKey === undefined) {
|
|
348
|
-
// CSE-KMS should behave the same as SSE-KMS - use the provided key or create one automatically
|
|
349
|
-
// Since Bucket only knows about SSE, we repeat the logic for CSE-KMS at the Table level.
|
|
350
|
-
encryptionKey = new kms.Key(table, 'Key');
|
|
351
|
-
}
|
|
352
|
-
else {
|
|
353
|
-
encryptionKey = props.encryptionKey;
|
|
354
|
-
}
|
|
355
|
-
// create the bucket if none was provided
|
|
356
|
-
if (!bucket) {
|
|
357
|
-
if (encryption === TableEncryption.CLIENT_SIDE_KMS) {
|
|
358
|
-
// The `encryptionKey` here is used for client-side encryption (granted to
|
|
359
|
-
// principals via the grant* methods), not for the bucket's SSE. The bucket
|
|
360
|
-
// still gets server-side encryption at rest as defense in depth.
|
|
361
|
-
bucket = new s3.Bucket(table, 'Bucket', {
|
|
362
|
-
encryption: encryptionMappings[encryption],
|
|
363
|
-
enforceSSL: true,
|
|
364
|
-
});
|
|
365
|
-
}
|
|
366
|
-
else {
|
|
367
|
-
bucket = new s3.Bucket(table, 'Bucket', {
|
|
368
|
-
encryption: encryptionMappings[encryption],
|
|
369
|
-
encryptionKey,
|
|
370
|
-
enforceSSL: true,
|
|
371
|
-
});
|
|
372
|
-
encryptionKey = bucket.encryptionKey;
|
|
373
|
-
}
|
|
374
|
-
}
|
|
375
|
-
return {
|
|
376
|
-
bucket,
|
|
377
|
-
encryption,
|
|
378
|
-
encryptionKey,
|
|
379
|
-
};
|
|
380
|
-
}
|
|
381
432
|
function renderColumns(columns) {
|
|
382
433
|
if (columns === undefined) {
|
|
383
434
|
return undefined;
|
|
@@ -390,4 +441,4 @@ function renderColumns(columns) {
|
|
|
390
441
|
};
|
|
391
442
|
});
|
|
392
443
|
}
|
|
393
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiczMtdGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzMy10YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSw2Q0FBb0Y7QUFDcEYsbURBQWdEO0FBRWhELHlEQUEyQztBQUMzQyx1REFBeUM7QUFDekMsNEVBQTRFO0FBQzVFLDhFQUE4RjtBQUM5RiwwRUFBMEU7QUFJMUUsNkNBQXlDO0FBRXpDOzs7O0dBSUc7QUFDSCxJQUFZLGVBMEJYO0FBMUJELFdBQVksZUFBZTtJQUN6Qjs7OztPQUlHO0lBQ0gsd0NBQXFCLENBQUE7SUFFckI7Ozs7T0FJRztJQUNILGtDQUFlLENBQUE7SUFFZjs7T0FFRztJQUNILGtEQUErQixDQUFBO0lBRS9COzs7O09BSUc7SUFDSCw4Q0FBMkIsQ0FBQTtBQUM3QixDQUFDLEVBMUJXLGVBQWUsK0JBQWYsZUFBZSxRQTBCMUI7QUE0Q0Q7OztHQUdHO0lBRVUsT0FBTzs0QkFEbkIsb0NBQWtCOzs7O3NCQUNVLHNCQUFTOzs7Ozs7O3VCQUFqQixTQUFRLFdBQVM7Ozs7eUNBMkduQyxpQ0FBYzt3Q0FRZCxpQ0FBYztxQ0FlZCxJQUFBLGtDQUFjLEdBQUU7c0NBY2hCLElBQUEsa0NBQWMsR0FBRTswQ0FjaEIsSUFBQSxrQ0FBYyxHQUFFO1lBbERqQixrTEFBVyxTQUFTLDZEQUVuQjtZQU1ELCtLQUFXLFFBQVEsNkRBTWxCO1lBU0QsOEtBQU8sU0FBUyw2REFLZjtZQVNELGlMQUFPLFVBQVUsNkRBS2hCO1lBU0QsNkxBQU8sY0FBYyw2REFLcEI7WUFwS0gsNktBb0xDOzs7OztRQW5MQyxzQ0FBc0M7UUFDL0IsTUFBTSxDQUFVLHFCQUFxQixHQUFXLGlDQUFpQyxDQUFDO1FBRWpGLFFBQVEsR0FKTCxtREFBTyxDQUlTO1FBRTNCOztXQUVHO1FBQ2EsTUFBTSxDQUFhO1FBRW5DOztX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QUk7YUFDakIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLEdBQUcsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLEVBQUU7Z0JBQ3RDLFVBQVUsRUFBRSxrQkFBa0IsQ0FBQyxVQUFVLENBQUM7Z0JBQzFDLGFBQWE7Z0JBQ2IsVUFBVSxFQUFFLElBQUk7YUFDakIsQ0FBQyxDQUFDO1lBQ0gsYUFBYSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUM7UUFDdkMsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPO1FBQ0wsTUFBTTtRQUNOLFVBQVU7UUFDVixhQUFhO0tBQ2QsQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLGFBQWEsQ0FBQyxPQUFrQjtJQUN2QyxJQUFJLE9BQU8sS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUMxQixPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBQ0QsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQzFCLE9BQU87WUFDTCxJQUFJLEVBQUUsTUFBTSxDQUFDLElBQUk7WUFDakIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVztZQUM3QixPQUFPLEVBQUUsTUFBTSxDQUFDLE9BQU87U0FDeEIsQ0FBQztJQUNKLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFubm90YXRpb25zLCBVbnNjb3BlZFZhbGlkYXRpb25FcnJvciwgVmFsaWRhdGlvbkVycm9yIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQ2ZuVGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZ2x1ZSc7XG5pbXBvcnQgdHlwZSAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCAqIGFzIGttcyBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCAqIGFzIHMzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMyc7XG5pbXBvcnQgeyBtZW1vaXplZEdldHRlciwgbGl0IH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvaGVscGVycy1pbnRlcm5hbCc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSwgTWV0aG9kTWV0YWRhdGEgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9tZXRhZGF0YS1yZXNvdXJjZSc7XG5pbXBvcnQgeyBwcm9wZXJ0eUluamVjdGFibGUgfSBmcm9tICdhd3MtY2RrLWxpYi9jb3JlL2xpYi9wcm9wLWluamVjdGFibGUnO1xuaW1wb3J0IHR5cGUgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB0eXBlIHsgQ29sdW1uIH0gZnJvbSAnLi9zY2hlbWEnO1xuaW1wb3J0IHR5cGUgeyBQYXJ0aXRpb25JbmRleCwgVGFibGVCYXNlUHJvcHMgfSBmcm9tICcuL3RhYmxlLWJhc2UnO1xuaW1wb3J0IHsgVGFibGVCYXNlIH0gZnJvbSAnLi90YWJsZS1iYXNlJztcblxuLyoqXG4gKiBFbmNyeXB0aW9uIG9wdGlvbnMgZm9yIGEgVGFibGUuXG4gKlxuICogQHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vYXRoZW5hL2xhdGVzdC91Zy9lbmNyeXB0aW9uLmh0bWxcbiAqL1xuZXhwb3J0IGVudW0gVGFibGVFbmNyeXB0aW9uIHtcbiAgLyoqXG4gICAqIFNlcnZlciBzaWRlIGVuY3J5cHRpb24gKFNTRSkgd2l0aCBhbiBBbWF6b24gUzMtbWFuYWdlZCBrZXkuXG4gICAqXG4gICAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL0FtYXpvblMzL2xhdGVzdC9kZXYvVXNpbmdTZXJ2ZXJTaWRlRW5jcnlwdGlvbi5odG1sXG4gICAqL1xuICBTM19NQU5BR0VEID0gJ1NTRS1TMycsXG5cbiAgLyoqXG4gICAqIFNlcnZlci1zaWRlIGVuY3J5cHRpb24gKFNTRSkgd2l0aCBhbiBBV1MgS01TIGtleSBtYW5hZ2VkIGJ5IHRoZSBhY2NvdW50IG93bmVyLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L1VzaW5nS01TRW5jcnlwdGlvbi5odG1sXG4gICAqL1xuICBLTVMgPSAnU1NFLUtNUycsXG5cbiAgLyoqXG4gICAqIFNlcnZlci1zaWRlIGVuY3J5cHRpb24gKFNTRSkgd2l0aCBhbiBBV1MgS01TIGtleSBtYW5hZ2VkIGJ5IHRoZSBLTVMgc2VydmljZS5cbiAgICovXG4gIEtNU19NQU5BR0VEID0gJ1NTRS1LTVMtTUFOQUdFRCcsXG5cbiAgLyoqXG4gICAqIENsaWVudC1zaWRlIGVuY3J5cHRpb24gKENTRSkgd2l0aCBhbiBBV1MgS01TIGtleSBtYW5hZ2VkIGJ5IHRoZSBhY2NvdW50IG93bmVyLlxuICAgKlxuICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9BbWF6b25TMy9sYXRlc3QvZGV2L1VzaW5nQ2xpZW50U2lkZUVuY3J5cHRpb24uaHRtbFxuICAgKi9cbiAgQ0xJRU5UX1NJREVfS01TID0gJ0NTRS1LTVMnLFxufVxuXG5leHBvcnQgaW50ZXJmYWNlIFMzVGFibGVQcm9wcyBleHRlbmRzIFRhYmxlQmFzZVByb3BzIHtcbiAgLyoqXG4gICAqIFMzIGJ1Y2tldCBpbiB3aGljaCB0byBzdG9yZSBkYXRhLlxuICAgKlxuICAgKiBAZGVmYXVsdCBvbmUgaXMgY3JlYXRlZCBmb3IgeW91XG4gICAqL1xuICByZWFkb25seSBidWNrZXQ/OiBzMy5JQnVja2V0O1xuXG4gIC8qKlxuICAgKiBTMyBwcmVmaXggdW5kZXIgd2hpY2ggdGFibGUgb2JqZWN0cyBhcmUgc3RvcmVkLlxuICAgKlxuICAgKiBXaGVuIHRoZSB0YWJsZSBzaGFyZXMgYSBidWNrZXQgd2l0aCBvdGhlciB0YWJsZXMgb3IgY29uc3VtZXJzLCBzZXQgdGhpcyBzb1xuICAgKiB0aGF0IHRoZSBgZ3JhbnQqYCBtZXRob2RzIHNjb3BlIFMzIGFjY2VzcyB0byB0aGlzIHRhYmxlJ3MgZGF0YS4gV2l0aG91dCBhXG4gICAqIHByZWZpeCwgdGhvc2UgZ3JhbnRzIGNvdmVyIHRoZSBlbnRpcmUgYnVja2V0LlxuICAgKlxuICAgKiBAZGVmYXVsdCAtIE5vIHByZWZpeC4gVGhlIGRhdGEgd2lsbCBiZSBzdG9yZWQgdW5kZXIgdGhlIHJvb3Qgb2YgdGhlIGJ1Y2tldC5cbiAgICovXG4gIHJlYWRvbmx5IHMzUHJlZml4Pzogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBUaGUga2luZCBvZiBlbmNyeXB0aW9uIHRvIHNlY3VyZSB0aGUgZGF0YSB3aXRoLlxuICAgKlxuICAgKiBZb3UgY2FuIG9ubHkgcHJvdmlkZSB0aGlzIG9wdGlvbiBpZiB5b3UgYXJlIG5vdCBleHBsaWNpdGx5IHBhc3NpbmcgaW4gYSBidWNrZXQuXG4gICAqXG4gICAqIElmIHlvdSBjaG9vc2UgYFNTRS1LTVNgLCB5b3UgKmNhbiogcHJvdmlkZSBhbiB1bi1tYW5hZ2VkIEtNUyBrZXkgd2l0aCBgZW5jcnlwdGlvbktleWAuXG4gICAqIElmIHlvdSBjaG9vc2UgYENTRS1LTVNgLCB5b3UgKm1heSogcHJvdmlkZSBhbiB1bi1tYW5hZ2VkIEtNUyBrZXkgd2l0aCBgZW5jcnlwdGlvbktleWA7XG4gICAqIG9uZSBpcyBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgaWYgb21pdHRlZC5cbiAgICpcbiAgICogQGRlZmF1bHQgQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VEXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uPzogVGFibGVFbmNyeXB0aW9uO1xuXG4gIC8qKlxuICAgKiBFeHRlcm5hbCBLTVMga2V5IHRvIHVzZSBmb3IgYnVja2V0IGVuY3J5cHRpb24uXG4gICAqXG4gICAqIFRoZSBgZW5jcnlwdGlvbmAgcHJvcGVydHkgbXVzdCBiZSBgU1NFLUtNU2Agb3IgYENTRS1LTVNgLlxuICAgKlxuICAgKiBAZGVmYXVsdCBrZXkgaXMgbWFuYWdlZCBieSBLTVMuXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uS2V5Pzoga21zLklLZXk7XG59XG5cbi8qKlxuICogQSBHbHVlIHRhYmxlIHRoYXQgdGFyZ2V0cyBhIFMzIGRhdGFzZXQuXG4gKiBAcmVzb3VyY2UgQVdTOjpHbHVlOjpUYWJsZVxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgUzNUYWJsZSBleHRlbmRzIFRhYmxlQmFzZSB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWdsdWUtYWxwaGEuUzNUYWJsZSc7XG5cbiAgcHJpdmF0ZSByZXNvdXJjZTogQ2ZuVGFibGU7XG5cbiAgLyoqXG4gICAqIFMzIGJ1Y2tldCBpbiB3aGljaCB0aGUgdGFibGUncyBkYXRhIHJlc2lkZXMuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgYnVja2V0OiBzMy5JQnVja2V0O1xuXG4gIC8qKlxuICAgKiBTMyBLZXkgUHJlZml4IHVuZGVyIHdoaWNoIHRoaXMgdGFibGUncyBmaWxlcyBhcmUgc3RvcmVkIGluIFMzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHMzUHJlZml4OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSB0eXBlIG9mIGVuY3J5cHRpb24gZW5hYmxlZCBmb3IgdGhlIHRhYmxlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVuY3J5cHRpb246IFRhYmxlRW5jcnlwdGlvbjtcblxuICAvKipcbiAgICogVGhlIEtNUyBrZXkgdXNlZCB0byBzZWN1cmUgdGhlIGRhdGEgaWYgYGVuY3J5cHRpb25gIGlzIHNldCB0byBgQ1NFLUtNU2Agb3IgYFNTRS1LTVNgLiBPdGhlcndpc2UsIGB1bmRlZmluZWRgLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IGVuY3J5cHRpb25LZXk/OiBrbXMuSUtleTtcblxuICAvKipcbiAgICogVGhpcyB0YWJsZSdzIHBhcnRpdGlvbiBpbmRleGVzLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IHBhcnRpdGlvbkluZGV4ZXM/OiBQYXJ0aXRpb25JbmRleFtdO1xuXG4gIHByb3RlY3RlZCByZWFkb25seSB0YWJsZVJlc291cmNlOiBDZm5UYWJsZTtcblxuICAvKipcbiAgICogV2hldGhlciB0aGUgZGF0YSBidWNrZXQgd2FzIHN1cHBsaWVkIGJ5IHRoZSB1c2VyIChhcyBvcHBvc2VkIHRvIGNyZWF0ZWQgYnlcbiAgICogdGhpcyBjb25zdHJ1Y3QpLiBBIHVzZXItc3VwcGxpZWQgYnVja2V0IG1heSBob2xkIGRhdGEgZm9yIG90aGVyIHRhYmxlcywgc29cbiAgICogZ3JhbnRpbmcgYWNjZXNzIHRvIHRoZSB3aG9sZSBidWNrZXQgY2FuIG92ZXItZ3JhbnQuXG4gICAqL1xuICBwcml2YXRlIHJlYWRvbmx5IHVzZXJQcm92aWRlZEJ1Y2tldDogYm9vbGVhbjtcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUzNUYWJsZVByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG4gICAgdGhpcy5zM1ByZWZpeCA9IHByb3BzLnMzUHJlZml4ID8/ICcnO1xuICAgIHRoaXMudXNlclByb3ZpZGVkQnVja2V0ID0gcHJvcHMuYnVja2V0ICE9PSB1bmRlZmluZWQ7XG4gICAgY29uc3QgeyBidWNrZXQsIGVuY3J5cHRpb24sIGVuY3J5cHRpb25LZXkgfSA9IGNyZWF0ZUJ1Y2tldCh0aGlzLCBwcm9wcyk7XG4gICAgdGhpcy5idWNrZXQgPSBidWNrZXQ7XG4gICAgdGhpcy5lbmNyeXB0aW9uID0gZW5jcnlwdGlvbjtcbiAgICB0aGlzLmVuY3J5cHRpb25LZXkgPSBlbmNyeXB0aW9uS2V5O1xuXG4gICAgdGhpcy5yZXNvdXJjZSA9IG5ldyBDZm5UYWJsZSh0aGlzLCAnVGFibGUnLCB7XG4gICAgICBjYXRhbG9nSWQ6IHByb3BzLmRhdGFiYXNlLmNhdGFsb2cuY2F0YWxvZ0lkLFxuXG4gICAgICBkYXRhYmFzZU5hbWU6IHByb3BzLmRhdGFiYXNlLmRhdGFiYXNlTmFtZSxcblxuICAgICAgdGFibGVJbnB1dDoge1xuICAgICAgICBuYW1lOiB0aGlzLnBoeXNpY2FsTmFtZSxcbiAgICAgICAgZGVzY3JpcHRpb246IHByb3BzLmRlc2NyaXB0aW9uIHx8IGAke3RoaXMucGh5c2ljYWxOYW1lfSBnZW5lcmF0ZWQgYnkgQ0RLYCxcblxuICAgICAgICBwYXJ0aXRpb25LZXlzOiByZW5kZXJDb2x1bW5zKHByb3BzLnBhcnRpdGlvbktleXMpLFxuXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAnY2xhc3NpZmljYXRpb24nOiBwcm9wcy5kYXRhRm9ybWF0LmNsYXNzaWZpY2F0aW9uU3RyaW5nPy52YWx1ZSxcbiAgICAgICAgICAncGFydGl0aW9uX2ZpbHRlcmluZy5lbmFibGVkJzogcHJvcHMuZW5hYmxlUGFydGl0aW9uRmlsdGVyaW5nLFxuICAgICAgICAgIC4uLnRoaXMucGFyYW1ldGVycyxcbiAgICAgICAgICAvLyBNYW5hZ2VkIGtleXMgYXJlIGVtaXR0ZWQgbGFzdCBzbyBmcmVlLWZvcm0gYHBhcmFtZXRlcnNgIGNhbm5vdFxuICAgICAgICAgIC8vIHNpbGVudGx5IG92ZXJyaWRlIHRoZW0uIENvbmZsaWN0cyBhcmUgcmVqZWN0ZWQgaW4gYFRhYmxlQmFzZWAuXG4gICAgICAgICAgJ2hhc19lbmNyeXB0ZWRfZGF0YSc6IHRoaXMuaGFzRW5jcnlwdGVkRGF0YSxcbiAgICAgICAgfSxcbiAgICAgICAgc3RvcmFnZURlc2NyaXB0b3I6IHtcbiAgICAgICAgICBsb2NhdGlvbjogYHMzOi8vJHt0aGlzLmJ1Y2tldC5idWNrZXROYW1lfS8ke3RoaXMuczNQcmVmaXh9YCxcbiAgICAgICAgICBjb21wcmVzc2VkOiB0aGlzLmNvbXByZXNzZWQsXG4gICAgICAgICAgc3RvcmVkQXNTdWJEaXJlY3RvcmllczogcHJvcHMuc3RvcmVkQXNTdWJEaXJlY3RvcmllcyA/PyBmYWxzZSxcbiAgICAgICAgICBjb2x1bW5zOiByZW5kZXJDb2x1bW5zKHByb3BzLmNvbHVtbnMpLFxuICAgICAgICAgIGlucHV0Rm9ybWF0OiBwcm9wcy5kYXRhRm9ybWF0LmlucHV0Rm9ybWF0LmNsYXNzTmFtZSxcbiAgICAgICAgICBvdXRwdXRGb3JtYXQ6IHByb3BzLmRhdGFGb3JtYXQub3V0cHV0Rm9ybWF0LmNsYXNzTmFtZSxcbiAgICAgICAgICBzZXJkZUluZm86IHtcbiAgICAgICAgICAgIHNlcmlhbGl6YXRpb25MaWJyYXJ5OiBwcm9wcy5kYXRhRm9ybWF0LnNlcmlhbGl6YXRpb25MaWJyYXJ5LmNsYXNzTmFtZSxcbiAgICAgICAgICB9LFxuICAgICAgICAgIHBhcmFtZXRlcnM6IHByb3BzLnN0b3JhZ2VQYXJhbWV0ZXJzID8gcHJvcHMuc3RvcmFnZVBhcmFtZXRlcnMucmVkdWNlKChhY2MsIHBhcmFtKSA9PiB7XG4gICAgICAgICAgICBpZiAocGFyYW0ua2V5IGluIGFjYykge1xuICAgICAgICAgICAgICB0aHJvdyBuZXcgVmFsaWRhdGlvbkVycm9yKGxpdGBEdXBsaWNhdGVTdG9yYWdlUGFyYW1ldGVyS2V5YCwgYER1cGxpY2F0ZSBzdG9yYWdlIHBhcmFtZXRlciBrZXk6ICR7cGFyYW0ua2V5fWAsIHRoaXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qga2V5ID0gcGFyYW0ua2V5O1xuICAgICAgICAgICAgYWNjW2tleV0gPSBwYXJhbS52YWx1ZTtcbiAgICAgICAgICAgIHJldHVybiBhY2M7XG4gICAgICAgICAgfSwge30gYXMgeyBba2V5OiBzdHJpbmddOiBzdHJpbmcgfSkgOiB1bmRlZmluZWQsXG4gICAgICAgIH0sXG5cbiAgICAgICAgdGFibGVUeXBlOiAnRVhURVJOQUxfVEFCTEUnLFxuICAgICAgfSxcbiAgICB9KTtcblxuICAgIHRoaXMudGFibGVSZXNvdXJjZSA9IHRoaXMucmVzb3VyY2U7XG4gICAgdGhpcy5ub2RlLmRlZmF1bHRDaGlsZCA9IHRoaXMucmVzb3VyY2U7XG5cbiAgICAvLyBQYXJ0aXRpb24gaW5kZXggY3JlYXRpb24gcmVsaWVzIG9uIGNyZWF0ZWQgdGFibGUuXG4gICAgaWYgKHByb3BzLnBhcnRpdGlvbkluZGV4ZXMpIHtcbiAgICAgIHRoaXMucGFydGl0aW9uSW5kZXhlcyA9IHByb3BzLnBhcnRpdGlvbkluZGV4ZXM7XG4gICAgICB0aGlzLnBhcnRpdGlvbkluZGV4ZXMuZm9yRWFjaCgoaW5kZXgpID0+IHRoaXMuYWRkUGFydGl0aW9uSW5kZXgoaW5kZXgpKTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogTmFtZSBvZiB0aGlzIHRhYmxlLlxuICAgKi9cbiAgQG1lbW9pemVkR2V0dGVyXG4gIHB1YmxpYyBnZXQgdGFibGVOYW1lKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0UmVzb3VyY2VOYW1lQXR0cmlidXRlKHRoaXMucmVzb3VyY2UucmVmKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBBUk4gb2YgdGhpcyB0YWJsZS5cbiAgICovXG4gIEBtZW1vaXplZEdldHRlclxuICBwdWJsaWMgZ2V0IHRhYmxlQXJuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIHRoaXMuc3RhY2suZm9ybWF0QXJuKHtcbiAgICAgIHNlcnZpY2U6ICdnbHVlJyxcbiAgICAgIHJlc291cmNlOiAndGFibGUnLFxuICAgICAgcmVzb3VyY2VOYW1lOiBgJHt0aGlzLmRhdGFiYXNlLmRhdGFiYXNlTmFtZX0vJHt0aGlzLnRhYmxlTmFtZX1gLFxuICAgIH0pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHJlYWQgcGVybWlzc2lvbnMgdG8gdGhlIHRhYmxlIGFuZCB0aGUgdW5kZXJseWluZyBkYXRhIHN0b3JlZCBpbiBTMyB0byBhbiBJQU0gcHJpbmNpcGFsLlxuICAgKiBbZGlzYWJsZS1hd3NsaW50Om5vLWdyYW50c11cbiAgICpcbiAgICogQHBhcmFtIGdyYW50ZWUgdGhlIHByaW5jaXBhbFxuICAgKi9cbiAgQE1ldGhvZE1ldGFkYXRhKClcbiAgcHVibGljIGdyYW50UmVhZChncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgY29uc3QgcmV0ID0gdGhpcy5ncmFudChncmFudGVlLCByZWFkUGVybWlzc2lvbnMpO1xuICAgIGlmICh0aGlzLmVuY3J5cHRpb25LZXkgJiYgdGhpcy5lbmNyeXB0aW9uID09PSBUYWJsZUVuY3J5cHRpb24uQ0xJRU5UX1NJREVfS01TKSB7IHRoaXMuZW5jcnlwdGlvbktleS5ncmFudERlY3J5cHQoZ3JhbnRlZSk7IH1cbiAgICB0aGlzLmJ1Y2tldC5ncmFudFJlYWQoZ3JhbnRlZSwgdGhpcy5nZW5lcmF0ZVMzUHJlZml4Rm9yR3JhbnQoKSk7XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIC8qKlxuICAgKiBHcmFudCB3cml0ZSBwZXJtaXNzaW9ucyB0byB0aGUgdGFibGUgYW5kIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RvcmVkIGluIFMzIHRvIGFuIElBTSBwcmluY2lwYWwuXG4gICAqIFtkaXNhYmxlLWF3c2xpbnQ6bm8tZ3JhbnRzXVxuICAgKlxuICAgKiBAcGFyYW0gZ3JhbnRlZSB0aGUgcHJpbmNpcGFsXG4gICAqL1xuICBATWV0aG9kTWV0YWRhdGEoKVxuICBwdWJsaWMgZ3JhbnRXcml0ZShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgY29uc3QgcmV0ID0gdGhpcy5ncmFudChncmFudGVlLCB3cml0ZVBlcm1pc3Npb25zKTtcbiAgICBpZiAodGhpcy5lbmNyeXB0aW9uS2V5ICYmIHRoaXMuZW5jcnlwdGlvbiA9PT0gVGFibGVFbmNyeXB0aW9uLkNMSUVOVF9TSURFX0tNUykgeyB0aGlzLmVuY3J5cHRpb25LZXkuZ3JhbnRFbmNyeXB0KGdyYW50ZWUpOyB9XG4gICAgdGhpcy5idWNrZXQuZ3JhbnRXcml0ZShncmFudGVlLCB0aGlzLmdlbmVyYXRlUzNQcmVmaXhGb3JHcmFudCgpKTtcbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgLyoqXG4gICAqIEdyYW50IHJlYWQgYW5kIHdyaXRlIHBlcm1pc3Npb25zIHRvIHRoZSB0YWJsZSBhbmQgdGhlIHVuZGVybHlpbmcgZGF0YSBzdG9yZWQgaW4gUzMgdG8gYW4gSUFNIHByaW5jaXBhbC5cbiAgICogW2Rpc2FibGUtYXdzbGludDpuby1ncmFudHNdXG4gICAqXG4gICAqIEBwYXJhbSBncmFudGVlIHRoZSBwcmluY2lwYWxcbiAgICovXG4gIEBNZXRob2RNZXRhZGF0YSgpXG4gIHB1YmxpYyBncmFudFJlYWRXcml0ZShncmFudGVlOiBpYW0uSUdyYW50YWJsZSk6IGlhbS5HcmFudCB7XG4gICAgY29uc3QgcmV0ID0gdGhpcy5ncmFudChncmFudGVlLCBbLi4ucmVhZFBlcm1pc3Npb25zLCAuLi53cml0ZVBlcm1pc3Npb25zXSk7XG4gICAgaWYgKHRoaXMuZW5jcnlwdGlvbktleSAmJiB0aGlzLmVuY3J5cHRpb24gPT09IFRhYmxlRW5jcnlwdGlvbi5DTElFTlRfU0lERV9LTVMpIHsgdGhpcy5lbmNyeXB0aW9uS2V5LmdyYW50RW5jcnlwdERlY3J5cHQoZ3JhbnRlZSk7IH1cbiAgICB0aGlzLmJ1Y2tldC5ncmFudFJlYWRXcml0ZShncmFudGVlLCB0aGlzLmdlbmVyYXRlUzNQcmVmaXhGb3JHcmFudCgpKTtcbiAgICByZXR1cm4gcmV0O1xuICB9XG5cbiAgcHJvdGVjdGVkIGdlbmVyYXRlUzNQcmVmaXhGb3JHcmFudCgpIHtcbiAgICAvLyBXaGVuIHRoZSB1c2VyIHN1cHBsaWVkIHRoZWlyIG93biBidWNrZXQgYW5kIGRpZCBub3Qgc2NvcGUgdGhlIHRhYmxlIHRvIGFcbiAgICAvLyBwcmVmaXgsIHRoZSBncmFudCBjb3ZlcnMgZXZlcnkgb2JqZWN0IGluIHRoZSBidWNrZXQgLSB3aGljaCBtYXkgaW5jbHVkZVxuICAgIC8vIGRhdGEgb3duZWQgYnkgb3RoZXIgdGFibGVzIG9yIGNvbnN1bWVycyBzaGFyaW5nIHRoYXQgYnVja2V0LiBXYXJuIHNvIHRoZVxuICAgIC8vIG92ZXItZ3JhbnQgaXMgYSBkZWxpYmVyYXRlIGNob2ljZSByYXRoZXIgdGhhbiBhIHNpbGVudCBzdXJwcmlzZS5cbiAgICBpZiAodGhpcy51c2VyUHJvdmlkZWRCdWNrZXQgJiYgdGhpcy5zM1ByZWZpeCA9PT0gJycpIHtcbiAgICAgIEFubm90YXRpb25zLm9mKHRoaXMpLmFkZFdhcm5pbmdWMihcbiAgICAgICAgJ0Bhd3MtY2RrL2F3cy1nbHVlLWFscGhhOmdyYW50U2NvcGVkVG9XaG9sZUJ1Y2tldCcsXG4gICAgICAgICdncmFudGluZyBhY2Nlc3MgdG8gdGhlIGVudGlyZSBkYXRhIGJ1Y2tldCBiZWNhdXNlIGBzM1ByZWZpeGAgaXMgZW1wdHkgYW5kIGEgc2hhcmVkIGJ1Y2tldCB3YXMgcHJvdmlkZWQ7ICcgK1xuICAgICAgICAgICdzZXQgYHMzUHJlZml4YCB0byBzY29wZSBncmFudHMgdG8gdGhpcyB0YWJsZVxcJ3MgZGF0YSBhbmQgYXZvaWQgZ3JhbnRpbmcgYWNjZXNzIHRvIG90aGVyIHRhYmxlcyBzaGFyaW5nIHRoZSBidWNrZXQuJyxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLnMzUHJlZml4ICsgJyonO1xuICB9XG59XG5cbmNvbnN0IHJlYWRQZXJtaXNzaW9ucyA9IFtcbiAgJ2dsdWU6QmF0Y2hHZXRQYXJ0aXRpb24nLFxuICAnZ2x1ZTpHZXRQYXJ0aXRpb24nLFxuICAnZ2x1ZTpHZXRQYXJ0aXRpb25zJyxcbiAgJ2dsdWU6R2V0VGFibGUnLFxuICAnZ2x1ZTpHZXRUYWJsZXMnLFxuICAnZ2x1ZTpHZXRUYWJsZVZlcnNpb24nLFxuICAnZ2x1ZTpHZXRUYWJsZVZlcnNpb25zJyxcbl07XG5cbmNvbnN0IHdyaXRlUGVybWlzc2lvbnMgPSBbXG4gICdnbHVlOkJhdGNoQ3JlYXRlUGFydGl0aW9uJyxcbiAgJ2dsdWU6QmF0Y2hEZWxldGVQYXJ0aXRpb24nLFxuICAnZ2x1ZTpDcmVhdGVQYXJ0aXRpb24nLFxuICAnZ2x1ZTpEZWxldGVQYXJ0aXRpb24nLFxuICAnZ2x1ZTpVcGRhdGVQYXJ0aXRpb24nLFxuXTtcblxuLy8gbWFwIFRhYmxlRW5jcnlwdGlvbiB0byBidWNrZXQncyBTU0UgY29uZmlndXJhdGlvbiAoczMuQnVja2V0RW5jcnlwdGlvbilcbmNvbnN0IGVuY3J5cHRpb25NYXBwaW5ncyA9IHtcbiAgW1RhYmxlRW5jcnlwdGlvbi5TM19NQU5BR0VEXTogczMuQnVja2V0RW5jcnlwdGlvbi5TM19NQU5BR0VELFxuICBbVGFibGVFbmNyeXB0aW9uLktNU19NQU5BR0VEXTogczMuQnVja2V0RW5jcnlwdGlvbi5LTVNfTUFOQUdFRCxcbiAgW1RhYmxlRW5jcnlwdGlvbi5LTVNdOiBzMy5CdWNrZXRFbmNyeXB0aW9uLktNUyxcbiAgW1RhYmxlRW5jcnlwdGlvbi5DTElFTlRfU0lERV9LTVNdOiBzMy5CdWNrZXRFbmNyeXB0aW9uLlMzX01BTkFHRUQsXG59O1xuXG4vLyBjcmVhdGUgdGhlIGJ1Y2tldCB0byBzdG9yZSBhIHRhYmxlJ3MgZGF0YSBkZXBlbmRpbmcgb24gdGhlIGBlbmNyeXB0aW9uYCBhbmQgYGVuY3J5cHRpb25LZXlgIHByb3BlcnRpZXMuXG5mdW5jdGlvbiBjcmVhdGVCdWNrZXQodGFibGU6IFMzVGFibGUsIHByb3BzOiBTM1RhYmxlUHJvcHMpIHtcbiAgbGV0IGJ1Y2tldCA9IHByb3BzLmJ1Y2tldDtcblxuICBpZiAoYnVja2V0ICYmIChwcm9wcy5lbmNyeXB0aW9uICE9PSB1bmRlZmluZWQgJiYgcHJvcHMuZW5jcnlwdGlvbiAhPT0gVGFibGVFbmNyeXB0aW9uLkNMSUVOVF9TSURFX0tNUykpIHtcbiAgICB0aHJvdyBuZXcgVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YEVuY3J5cHRpb25XaXRoUHJvdmlkZWRCdWNrZXRgLCAneW91IGNhbiBub3Qgc3BlY2lmeSBlbmNyeXB0aW9uIHNldHRpbmdzIGlmIHlvdSBhbHNvIHByb3ZpZGUgYSBidWNrZXQnKTtcbiAgfVxuXG4gIGNvbnN0IGVuY3J5cHRpb24gPSBwcm9wcy5lbmNyeXB0aW9uIHx8IFRhYmxlRW5jcnlwdGlvbi5TM19NQU5BR0VEO1xuXG4gIGxldCBlbmNyeXB0aW9uS2V5OiBrbXMuSUtleSB8IHVuZGVmaW5lZDtcbiAgaWYgKGVuY3J5cHRpb24gPT09IFRhYmxlRW5jcnlwdGlvbi5DTElFTlRfU0lERV9LTVMgJiYgcHJvcHMuZW5jcnlwdGlvbktleSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgLy8gQ1NFLUtNUyBzaG91bGQgYmVoYXZlIHRoZSBzYW1lIGFzIFNTRS1LTVMgLSB1c2UgdGhlIHByb3ZpZGVkIGtleSBvciBjcmVhdGUgb25lIGF1dG9tYXRpY2FsbHlcbiAgICAvLyBTaW5jZSBCdWNrZXQgb25seSBrbm93cyBhYm91dCBTU0UsIHdlIHJlcGVhdCB0aGUgbG9naWMgZm9yIENTRS1LTVMgYXQgdGhlIFRhYmxlIGxldmVsLlxuICAgIGVuY3J5cHRpb25LZXkgPSBuZXcga21zLktleSh0YWJsZSwgJ0tleScpO1xuICB9IGVsc2Uge1xuICAgIGVuY3J5cHRpb25LZXkgPSBwcm9wcy5lbmNyeXB0aW9uS2V5O1xuICB9XG5cbiAgLy8gY3JlYXRlIHRoZSBidWNrZXQgaWYgbm9uZSB3YXMgcHJvdmlkZWRcbiAgaWYgKCFidWNrZXQpIHtcbiAgICBpZiAoZW5jcnlwdGlvbiA9PT0gVGFibGVFbmNyeXB0aW9uLkNMSUVOVF9TSURFX0tNUykge1xuICAgICAgLy8gVGhlIGBlbmNyeXB0aW9uS2V5YCBoZXJlIGlzIHVzZWQgZm9yIGNsaWVudC1zaWRlIGVuY3J5cHRpb24gKGdyYW50ZWQgdG9cbiAgICAgIC8vIHByaW5jaXBhbHMgdmlhIHRoZSBncmFudCogbWV0aG9kcyksIG5vdCBmb3IgdGhlIGJ1Y2tldCdzIFNTRS4gVGhlIGJ1Y2tldFxuICAgICAgLy8gc3RpbGwgZ2V0cyBzZXJ2ZXItc2lkZSBlbmNyeXB0aW9uIGF0IHJlc3QgYXMgZGVmZW5zZSBpbiBkZXB0aC5cbiAgICAgIGJ1Y2tldCA9IG5ldyBzMy5CdWNrZXQodGFibGUsICdCdWNrZXQnLCB7XG4gICAgICAgIGVuY3J5cHRpb246IGVuY3J5cHRpb25NYXBwaW5nc1tlbmNyeXB0aW9uXSxcbiAgICAgICAgZW5mb3JjZVNTTDogdHJ1ZSxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBidWNrZXQgPSBuZXcgczMuQnVja2V0KHRhYmxlLCAnQnVja2V0Jywge1xuICAgICAgICBlbmNyeXB0aW9uOiBlbmNyeXB0aW9uTWFwcGluZ3NbZW5jcnlwdGlvbl0sXG4gICAgICAgIGVuY3J5cHRpb25LZXksXG4gICAgICAgIGVuZm9yY2VTU0w6IHRydWUsXG4gICAgICB9KTtcbiAgICAgIGVuY3J5cHRpb25LZXkgPSBidWNrZXQuZW5jcnlwdGlvbktleTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4ge1xuICAgIGJ1Y2tldCxcbiAgICBlbmNyeXB0aW9uLFxuICAgIGVuY3J5cHRpb25LZXksXG4gIH07XG59XG5cbmZ1bmN0aW9uIHJlbmRlckNvbHVtbnMoY29sdW1ucz86IENvbHVtbltdKSB7XG4gIGlmIChjb2x1bW5zID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICB9XG4gIHJldHVybiBjb2x1bW5zLm1hcChjb2x1bW4gPT4ge1xuICAgIHJldHVybiB7XG4gICAgICBuYW1lOiBjb2x1bW4ubmFtZSxcbiAgICAgIHR5cGU6IGNvbHVtbi50eXBlLmlucHV0U3RyaW5nLFxuICAgICAgY29tbWVudDogY29sdW1uLmNvbW1lbnQsXG4gICAgfTtcbiAgfSk7XG59XG4iXX0=
|
|
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.d.ts
CHANGED
|
@@ -18,9 +18,19 @@ export interface Column {
|
|
|
18
18
|
readonly comment?: string;
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
|
-
*
|
|
21
|
+
* The type of a column in a table schema.
|
|
22
|
+
*
|
|
23
|
+
* Instances are opaque: obtain one from a `Schema` factory (for example
|
|
24
|
+
* `Schema.STRING`, `Schema.decimal(...)`, `Schema.array(...)`) or, for a type the
|
|
25
|
+
* `Schema` factories don't model, from `Schema.custom(...)`.
|
|
22
26
|
*/
|
|
23
|
-
export
|
|
27
|
+
export declare class Type {
|
|
28
|
+
/**
|
|
29
|
+
* Create a `Type` from its parts.
|
|
30
|
+
*
|
|
31
|
+
* @internal
|
|
32
|
+
*/
|
|
33
|
+
static _of(inputString: string, isPrimitive: boolean): Type;
|
|
24
34
|
/**
|
|
25
35
|
* Indicates whether this type is a primitive data type.
|
|
26
36
|
*/
|
|
@@ -29,6 +39,7 @@ export interface Type {
|
|
|
29
39
|
* Glue InputString for this type.
|
|
30
40
|
*/
|
|
31
41
|
readonly inputString: string;
|
|
42
|
+
private constructor();
|
|
32
43
|
}
|
|
33
44
|
/**
|
|
34
45
|
* @see https://docs.aws.amazon.com/athena/latest/ug/data-types.html
|
|
@@ -69,10 +80,9 @@ export declare class Schema {
|
|
|
69
80
|
/**
|
|
70
81
|
* Creates a decimal type.
|
|
71
82
|
*
|
|
72
|
-
*
|
|
73
|
-
*
|
|
74
|
-
* @
|
|
75
|
-
* @param scale the number of digits in fractional part, the default is 0
|
|
83
|
+
* @param precision the total number of digits, between 1 and 38
|
|
84
|
+
* @param scale the number of digits in the fractional part, between 0 and 38; the default is 0
|
|
85
|
+
* @see https://docs.aws.amazon.com/athena/latest/ug/data-types.html
|
|
76
86
|
*/
|
|
77
87
|
static decimal(precision: number, scale?: number): Type;
|
|
78
88
|
/**
|
|
@@ -106,4 +116,14 @@ export declare class Schema {
|
|
|
106
116
|
* @param columns the columns of the structure.
|
|
107
117
|
*/
|
|
108
118
|
static struct(columns: Column[]): Type;
|
|
119
|
+
/**
|
|
120
|
+
* Creates a custom type from a raw Glue input string.
|
|
121
|
+
*
|
|
122
|
+
* Escape hatch for column types the other `Schema` factories don't model. The
|
|
123
|
+
* `inputString` is emitted verbatim and is not validated.
|
|
124
|
+
*
|
|
125
|
+
* @param inputString the Glue input string for the type (for example `interval_day_to_second`).
|
|
126
|
+
* @param isPrimitive whether the type is a primitive (non-nested) data type. Defaults to true.
|
|
127
|
+
*/
|
|
128
|
+
static custom(inputString: string, isPrimitive?: boolean): Type;
|
|
109
129
|
}
|