@aws-cdk/aws-glue-alpha 2.269.0-alpha.0 → 2.270.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 +780 -780
- package/.jsii.tabl.json.gz +0 -0
- package/.warnings.jsii.js +1741 -24
- package/README.md +4 -6
- package/lib/catalog.js +88 -4
- package/lib/code.js +59 -4
- package/lib/connection.js +86 -4
- package/lib/data-format.js +43 -6
- package/lib/data-quality-ruleset.js +60 -4
- package/lib/database.js +48 -2
- package/lib/external-table.js +48 -2
- package/lib/jobs/job.js +107 -3
- package/lib/jobs/pyspark-etl-job.js +21 -2
- package/lib/jobs/pyspark-flex-etl-job.js +21 -2
- package/lib/jobs/pyspark-streaming-job.js +21 -2
- package/lib/jobs/python-shell-job.js +21 -2
- package/lib/jobs/ray-job.js +1 -1
- package/lib/jobs/scala-spark-etl-job.js +21 -2
- package/lib/jobs/scala-spark-flex-etl-job.js +21 -2
- package/lib/jobs/scala-spark-streaming-job.js +21 -2
- package/lib/jobs/spark-job.js +5 -2
- package/lib/partition-projection.js +14 -2
- package/lib/s3-table.js +106 -5
- package/lib/schema.js +50 -3
- package/lib/security-configuration.js +60 -5
- package/lib/storage-parameter.js +91 -2
- package/lib/table-base.js +32 -2
- package/lib/triggers/trigger-options.js +44 -4
- package/lib/triggers/workflow.js +63 -3
- package/package.json +10 -10
package/README.md
CHANGED
|
@@ -3,18 +3,16 @@
|
|
|
3
3
|
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-

|
|
7
7
|
|
|
8
|
-
>
|
|
9
|
-
> They are subject to non-backward compatible changes or removal in any future version. These are
|
|
10
|
-
> not subject to the [Semantic Versioning](https://semver.org/) model and breaking changes will be
|
|
11
|
-
> announced in the release notes. This means that while you may use them, you may need to update
|
|
12
|
-
> your source code when upgrading to a newer version of this package.
|
|
8
|
+
> This API may emit warnings. Backward compatibility is not guaranteed.
|
|
13
9
|
|
|
14
10
|
---
|
|
15
11
|
|
|
16
12
|
<!--END STABILITY BANNER-->
|
|
17
13
|
|
|
14
|
+
All constructs moved to aws-cdk-lib/aws-glue.
|
|
15
|
+
|
|
18
16
|
This module is part of the [AWS Cloud Development Kit](https://github.com/aws/aws-cdk) project.
|
|
19
17
|
|
|
20
18
|
## README
|
package/lib/catalog.js
CHANGED
|
@@ -74,11 +74,20 @@ var CatalogEncryptionMode;
|
|
|
74
74
|
* @see https://docs.aws.amazon.com/glue/latest/webapi/API_EncryptionAtRest.html
|
|
75
75
|
*/
|
|
76
76
|
class DataCatalogEncryptionAtRest {
|
|
77
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.DataCatalogEncryptionAtRest", version: "2.
|
|
77
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.DataCatalogEncryptionAtRest", version: "2.270.0-alpha.0" };
|
|
78
78
|
/**
|
|
79
79
|
* Disable encryption at rest for the Data Catalog.
|
|
80
80
|
*/
|
|
81
81
|
static disabled() {
|
|
82
|
+
try {
|
|
83
|
+
jsiiDeprecationWarnings.print("@aws-cdk/aws-glue-alpha.DataCatalogEncryptionAtRest#disabled", "");
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
87
|
+
Error.captureStackTrace(error, this.disabled);
|
|
88
|
+
}
|
|
89
|
+
throw error;
|
|
90
|
+
}
|
|
82
91
|
return new DataCatalogEncryptionAtRest(CatalogEncryptionMode.DISABLED);
|
|
83
92
|
}
|
|
84
93
|
/**
|
|
@@ -88,6 +97,15 @@ class DataCatalogEncryptionAtRest {
|
|
|
88
97
|
* the key is not exposed as a grantable resource.
|
|
89
98
|
*/
|
|
90
99
|
static kms(key) {
|
|
100
|
+
try {
|
|
101
|
+
jsiiDeprecationWarnings.print("@aws-cdk/aws-glue-alpha.DataCatalogEncryptionAtRest#kms", "");
|
|
102
|
+
}
|
|
103
|
+
catch (error) {
|
|
104
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
105
|
+
Error.captureStackTrace(error, this.kms);
|
|
106
|
+
}
|
|
107
|
+
throw error;
|
|
108
|
+
}
|
|
91
109
|
return new DataCatalogEncryptionAtRest(CatalogEncryptionMode.SSE_KMS, key);
|
|
92
110
|
}
|
|
93
111
|
/**
|
|
@@ -102,6 +120,15 @@ class DataCatalogEncryptionAtRest {
|
|
|
102
120
|
* the key is not exposed as a grantable resource.
|
|
103
121
|
*/
|
|
104
122
|
static kmsWithServiceRole(role, key) {
|
|
123
|
+
try {
|
|
124
|
+
jsiiDeprecationWarnings.print("@aws-cdk/aws-glue-alpha.DataCatalogEncryptionAtRest#kmsWithServiceRole", "");
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
128
|
+
Error.captureStackTrace(error, this.kmsWithServiceRole);
|
|
129
|
+
}
|
|
130
|
+
throw error;
|
|
131
|
+
}
|
|
105
132
|
return new DataCatalogEncryptionAtRest(CatalogEncryptionMode.SSE_KMS_WITH_SERVICE_ROLE, key, role);
|
|
106
133
|
}
|
|
107
134
|
/**
|
|
@@ -130,16 +157,43 @@ exports.DataCatalogEncryptionAtRest = DataCatalogEncryptionAtRest;
|
|
|
130
157
|
* construction, so a catalog either carries settings or it does not.
|
|
131
158
|
*/
|
|
132
159
|
class CatalogBase extends core_1.Resource {
|
|
133
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.CatalogBase", version: "2.
|
|
160
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.CatalogBase", version: "2.270.0-alpha.0" };
|
|
134
161
|
_encryptionKey;
|
|
135
162
|
_connectionPasswordKey;
|
|
136
163
|
get encryptionKey() {
|
|
164
|
+
try {
|
|
165
|
+
jsiiDeprecationWarnings.print("@aws-cdk/aws-glue-alpha.CatalogBase#encryptionKey", "");
|
|
166
|
+
}
|
|
167
|
+
catch (error) {
|
|
168
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
169
|
+
Error.captureStackTrace(error, jsiiDeprecationWarnings.getPropertyDescriptor(this, "encryptionKey").get);
|
|
170
|
+
}
|
|
171
|
+
throw error;
|
|
172
|
+
}
|
|
137
173
|
return this._encryptionKey;
|
|
138
174
|
}
|
|
139
175
|
get connectionPasswordKey() {
|
|
176
|
+
try {
|
|
177
|
+
jsiiDeprecationWarnings.print("@aws-cdk/aws-glue-alpha.CatalogBase#connectionPasswordKey", "");
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
181
|
+
Error.captureStackTrace(error, jsiiDeprecationWarnings.getPropertyDescriptor(this, "connectionPasswordKey").get);
|
|
182
|
+
}
|
|
183
|
+
throw error;
|
|
184
|
+
}
|
|
140
185
|
return this._connectionPasswordKey;
|
|
141
186
|
}
|
|
142
187
|
get catalogRef() {
|
|
188
|
+
try {
|
|
189
|
+
jsiiDeprecationWarnings.print("@aws-cdk/aws-glue-alpha.CatalogBase#catalogRef", "");
|
|
190
|
+
}
|
|
191
|
+
catch (error) {
|
|
192
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
193
|
+
Error.captureStackTrace(error, jsiiDeprecationWarnings.getPropertyDescriptor(this, "catalogRef").get);
|
|
194
|
+
}
|
|
195
|
+
throw error;
|
|
196
|
+
}
|
|
143
197
|
return {
|
|
144
198
|
resourceArn: this.catalogArn,
|
|
145
199
|
};
|
|
@@ -152,6 +206,7 @@ class CatalogBase extends core_1.Resource {
|
|
|
152
206
|
*/
|
|
153
207
|
configureEncryption(options) {
|
|
154
208
|
try {
|
|
209
|
+
jsiiDeprecationWarnings.print("@aws-cdk/aws-glue-alpha.CatalogBase#configureEncryption", "");
|
|
155
210
|
jsiiDeprecationWarnings._aws_cdk_aws_glue_alpha_CatalogEncryptionOptions(options);
|
|
156
211
|
}
|
|
157
212
|
catch (error) {
|
|
@@ -224,7 +279,7 @@ let Catalog = (() => {
|
|
|
224
279
|
Catalog = _classThis = _classDescriptor.value;
|
|
225
280
|
if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
|
|
226
281
|
}
|
|
227
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.Catalog", version: "2.
|
|
282
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.Catalog", version: "2.270.0-alpha.0" };
|
|
228
283
|
/** Uniquely identifies this class. */
|
|
229
284
|
static PROPERTY_INJECTION_ID = '@aws-cdk.aws-glue-alpha.Catalog';
|
|
230
285
|
/**
|
|
@@ -240,6 +295,15 @@ let Catalog = (() => {
|
|
|
240
295
|
* the account catalog is first used in the stack.
|
|
241
296
|
*/
|
|
242
297
|
static forAccount(scope) {
|
|
298
|
+
try {
|
|
299
|
+
jsiiDeprecationWarnings.print("@aws-cdk/aws-glue-alpha.Catalog#forAccount", "");
|
|
300
|
+
}
|
|
301
|
+
catch (error) {
|
|
302
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
303
|
+
Error.captureStackTrace(error, this.forAccount);
|
|
304
|
+
}
|
|
305
|
+
throw error;
|
|
306
|
+
}
|
|
243
307
|
const stack = core_1.Stack.of(scope);
|
|
244
308
|
const existing = stack.node.tryFindChild(ACCOUNT_CATALOG_UID);
|
|
245
309
|
return existing ?? new AccountCatalog(stack, ACCOUNT_CATALOG_UID, {});
|
|
@@ -263,6 +327,7 @@ let Catalog = (() => {
|
|
|
263
327
|
*/
|
|
264
328
|
static encryptAccount(scope, options) {
|
|
265
329
|
try {
|
|
330
|
+
jsiiDeprecationWarnings.print("@aws-cdk/aws-glue-alpha.Catalog#encryptAccount", "");
|
|
266
331
|
jsiiDeprecationWarnings._aws_cdk_aws_glue_alpha_CatalogEncryptionOptions(options);
|
|
267
332
|
}
|
|
268
333
|
catch (error) {
|
|
@@ -291,6 +356,15 @@ let Catalog = (() => {
|
|
|
291
356
|
* id.
|
|
292
357
|
*/
|
|
293
358
|
static fromCatalogArn(scope, id, catalogArn) {
|
|
359
|
+
try {
|
|
360
|
+
jsiiDeprecationWarnings.print("@aws-cdk/aws-glue-alpha.Catalog#fromCatalogArn", "");
|
|
361
|
+
}
|
|
362
|
+
catch (error) {
|
|
363
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
364
|
+
Error.captureStackTrace(error, this.fromCatalogArn);
|
|
365
|
+
}
|
|
366
|
+
throw error;
|
|
367
|
+
}
|
|
294
368
|
const stack = core_1.Stack.of(scope);
|
|
295
369
|
const arn = stack.splitArn(catalogArn, core_1.ArnFormat.SLASH_RESOURCE_NAME);
|
|
296
370
|
// Only validate the shape of concrete ARNs; a tokenized ARN can't be
|
|
@@ -313,6 +387,15 @@ let Catalog = (() => {
|
|
|
313
387
|
* id.
|
|
314
388
|
*/
|
|
315
389
|
static fromCatalogId(scope, id, catalogId) {
|
|
390
|
+
try {
|
|
391
|
+
jsiiDeprecationWarnings.print("@aws-cdk/aws-glue-alpha.Catalog#fromCatalogId", "");
|
|
392
|
+
}
|
|
393
|
+
catch (error) {
|
|
394
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
395
|
+
Error.captureStackTrace(error, this.fromCatalogId);
|
|
396
|
+
}
|
|
397
|
+
throw error;
|
|
398
|
+
}
|
|
316
399
|
const stack = core_1.Stack.of(scope);
|
|
317
400
|
const catalogArn = stack.formatArn({ service: 'glue', resource: 'catalog', resourceName: catalogId });
|
|
318
401
|
return new ImportedCatalog(scope, id, catalogId, catalogArn);
|
|
@@ -323,6 +406,7 @@ let Catalog = (() => {
|
|
|
323
406
|
constructor(scope, id, props) {
|
|
324
407
|
super(scope, id);
|
|
325
408
|
try {
|
|
409
|
+
jsiiDeprecationWarnings.print("@aws-cdk/aws-glue-alpha.Catalog", "");
|
|
326
410
|
jsiiDeprecationWarnings._aws_cdk_aws_glue_alpha_CatalogProps(props);
|
|
327
411
|
}
|
|
328
412
|
catch (error) {
|
|
@@ -421,4 +505,4 @@ let ImportedCatalog = (() => {
|
|
|
421
505
|
};
|
|
422
506
|
return ImportedCatalog = _classThis;
|
|
423
507
|
})();
|
|
424
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNhdGFsb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsbURBQW9GO0FBR3BGLGlEQUFnRDtBQUVoRCwyQ0FBc0Y7QUFDdEYsNEVBQTREO0FBQzVELDhFQUE4RTtBQUM5RSwwRUFBMEU7QUFHMUU7Ozs7R0FJRztBQUNILElBQVkscUJBZ0JYO0FBaEJELFdBQVkscUJBQXFCO0lBQy9COztPQUVHO0lBQ0gsOENBQXFCLENBQUE7SUFFckI7O09BRUc7SUFDSCw0Q0FBbUIsQ0FBQTtJQUVuQjs7O09BR0c7SUFDSCxnRkFBdUQsQ0FBQTtBQUN6RCxDQUFDLEVBaEJXLHFCQUFxQixxQ0FBckIscUJBQXFCLFFBZ0JoQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBYSwyQkFBMkI7O0lBQ3RDOztPQUVHO0lBQ0ksTUFBTSxDQUFDLFFBQVE7UUFDcEIsT0FBTyxJQUFJLDJCQUEyQixDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ3hFO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQWlCO1FBQ2pDLE9BQU8sSUFBSSwyQkFBMkIsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDNUU7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0ksTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQWUsRUFBRSxHQUFpQjtRQUNqRSxPQUFPLElBQUksMkJBQTJCLENBQUMscUJBQXFCLENBQUMseUJBQXlCLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ3BHO0lBRUQ7O09BRUc7SUFDYSxJQUFJLENBQXdCO0lBRTVDOztPQUVHO0lBQ2EsTUFBTSxDQUFlO0lBRXJDOztPQUVHO0lBQ2EsV0FBVyxDQUFhO0lBRXhDLFlBQW9CLElBQTJCLEVBQUUsTUFBb0IsRUFBRSxX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R0FBVyx5Q0FBeUMsQ0FBQztRQUNqRixTQUFTLENBQVM7UUFDbEIsVUFBVSxDQUFTO1FBRW5DLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsU0FBaUIsRUFBRSxVQUFrQjtZQUM3RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2pCLG1DQUFtQztZQUNuQyxJQUFBLHdDQUFvQixFQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztZQUMzQixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztTQUM5Qjs7WUFaRyx1REFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ2F0YWxvZ1JlZmVyZW5jZSwgSUNhdGFsb2dSZWYgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZ2x1ZSc7XG5pbXBvcnQgeyBDZm5DYXRhbG9nLCBDZm5EYXRhQ2F0YWxvZ0VuY3J5cHRpb25TZXR0aW5ncyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1nbHVlJztcbmltcG9ydCB0eXBlICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHR5cGUgKiBhcyBrbXMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWttcyc7XG5pbXBvcnQgeyBLZXlHcmFudHMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCB0eXBlIHsgSVJlc291cmNlIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZSc7XG5pbXBvcnQgeyBBcm5Gb3JtYXQsIFJlc291cmNlLCBTdGFjaywgVG9rZW4sIFZhbGlkYXRpb25FcnJvciB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUnO1xuaW1wb3J0IHsgbGl0IH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvaGVscGVycy1pbnRlcm5hbCc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIFRoZSBlbmNyeXB0aW9uLWF0LXJlc3QgbW9kZSBmb3IgYSBHbHVlIERhdGEgQ2F0YWxvZy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nbHVlL2xhdGVzdC93ZWJhcGkvQVBJX0VuY3J5cHRpb25BdFJlc3QuaHRtbCNHbHVlLVR5cGUtRW5jcnlwdGlvbkF0UmVzdC1DYXRhbG9nRW5jcnlwdGlvbk1vZGVcbiAqL1xuZXhwb3J0IGVudW0gQ2F0YWxvZ0VuY3J5cHRpb25Nb2RlIHtcbiAgLyoqXG4gICAqIEVuY3J5cHRpb24gYXQgcmVzdCBpcyBkaXNhYmxlZC5cbiAgICovXG4gIERJU0FCTEVEID0gJ0RJU0FCTEVEJyxcblxuICAvKipcbiAgICogU2VydmVyLXNpZGUgZW5jcnlwdGlvbiAoU1NFKSB3aXRoIGFuIEFXUyBLTVMga2V5LlxuICAgKi9cbiAgU1NFX0tNUyA9ICdTU0UtS01TJyxcblxuICAvKipcbiAgICogU2VydmVyLXNpZGUgZW5jcnlwdGlvbiAoU1NFKSB3aXRoIGFuIEFXUyBLTVMga2V5LCB1c2luZyBhIHNlcnZpY2Ugcm9sZSB0aGF0XG4gICAqIEFXUyBHbHVlIGFzc3VtZXMgdG8gYWNjZXNzIHRoZSBrZXkgb24geW91ciBiZWhhbGYuXG4gICAqL1xuICBTU0VfS01TX1dJVEhfU0VSVklDRV9ST0xFID0gJ1NTRS1LTVMtV0lUSC1TRVJWSUNFLVJPTEUnLFxufVxuXG4vKipcbiAqIEVuY3J5cHRpb24tYXQtcmVzdCBjb25maWd1cmF0aW9uIGZvciBhIEdsdWUgRGF0YSBDYXRhbG9nLlxuICpcbiAqIFRoZSBEYXRhIENhdGFsb2cgZW5jcnlwdGlvbiBhdCByZXN0IGFuZCB0aGUgY29ubmVjdGlvbiBwYXNzd29yZCBlbmNyeXB0aW9uXG4gKiBhcmUgaW5kZXBlbmRlbnQ6IGVuYWJsaW5nIG9uZSBkb2VzIG5vdCByZXF1aXJlIHRoZSBvdGhlciwgYW5kIGVhY2ggbWF5IHVzZSBhXG4gKiBkaWZmZXJlbnQgS01TIGtleS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nbHVlL2xhdGVzdC93ZWJhcGkvQVBJX0VuY3J5cHRpb25BdFJlc3QuaHRtbFxuICovXG5leHBvcnQgY2xhc3MgRGF0YUNhdGFsb2dFbmNyeXB0aW9uQXRSZXN0IHtcbiAgLyoqXG4gICAqIERpc2FibGUgZW5jcnlwdGlvbiBhdCByZXN0IGZvciB0aGUgRGF0YSBDYXRhbG9nLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkaXNhYmxlZCgpOiBEYXRhQ2F0YWxvZ0VuY3J5cHRpb25BdFJlc3Qge1xuICAgIHJldHVybiBuZXcgRGF0YUNhdGFsb2dFbmNyeXB0aW9uQXRSZXN0KENhdGFsb2dFbmNyeXB0aW9uTW9kZS5ESVNBQkxFRCk7XG4gIH1cblxuICAvKipcbiAgICogRW5jcnlwdCB0aGUgRGF0YSBDYXRhbG9nIGF0IHJlc3Qgd2l0aCBhbiBBV1MgS01TIGtleS5cbiAgICpcbiAgICogQHBhcmFtIGtleSB0aGUgS01TIGtleSB0byB1c2UuIElmIG9taXR0ZWQsIGFuIEFXUy1tYW5hZ2VkIGtleSBpcyB1c2VkIGFuZFxuICAgKiB0aGUga2V5IGlzIG5vdCBleHBvc2VkIGFzIGEgZ3JhbnRhYmxlIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBrbXMoa2V5Pzoga21zLklLZXlSZWYpOiBEYXRhQ2F0YWxvZ0VuY3J5cHRpb25BdFJlc3Qge1xuICAgIHJldHVybiBuZXcgRGF0YUNhdGFsb2dFbmNyeXB0aW9uQXRSZXN0KENhdGFsb2dFbmNyeXB0aW9uTW9kZS5TU0VfS01TLCBrZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuY3J5cHQgdGhlIERhdGEgQ2F0YWxvZyBhdCByZXN0IHdpdGggYW4gQVdTIEtNUyBrZXksIGFjY2Vzc2VkIHRocm91Z2ggYVxuICAgKiBzZXJ2aWNlIHJvbGUgdGhhdCBBV1MgR2x1ZSBhc3N1bWVzIG9uIHlvdXIgYmVoYWxmLlxuICAgKlxuICAgKiBXaGVuIGEgY3VzdG9tZXItbWFuYWdlZCBga2V5YCBpcyBwcm92aWRlZCwgdGhlIGByb2xlYCBpcyBhdXRvbWF0aWNhbGx5XG4gICAqIGdyYW50ZWQgYGttczpFbmNyeXB0YC9ga21zOkRlY3J5cHRgL2BrbXM6R2VuZXJhdGVEYXRhS2V5KmAgb24gaXQuXG4gICAqXG4gICAqIEBwYXJhbSByb2xlIHRoZSBzZXJ2aWNlIHJvbGUgdGhhdCBBV1MgR2x1ZSBhc3N1bWVzIHRvIGFjY2VzcyB0aGUga2V5LlxuICAgKiBAcGFyYW0ga2V5IHRoZSBLTVMga2V5IHRvIHVzZS4gSWYgb21pdHRlZCwgYW4gQVdTLW1hbmFnZWQga2V5IGlzIHVzZWQgYW5kXG4gICAqIHRoZSBrZXkgaXMgbm90IGV4cG9zZWQgYXMgYSBncmFudGFibGUgcmVzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGttc1dpdGhTZXJ2aWNlUm9sZShyb2xlOiBpYW0uSVJvbGUsIGtleT86IGttcy5JS2V5UmVmKTogRGF0YUNhdGFsb2dFbmNyeXB0aW9uQXRSZXN0IHtcbiAgICByZXR1cm4gbmV3IERhdGFDYXRhbG9nRW5jcnlwdGlvbkF0UmVzdChDYXRhbG9nRW5jcnlwdGlvbk1vZGUuU1NFX0tNU19XSVRIX1NFUlZJQ0VfUk9MRSwga2V5LCByb2xlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZW5jcnlwdGlvbiBtb2RlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1vZGU6IENhdGFsb2dFbmNyeXB0aW9uTW9kZTtcblxuICAvKipcbiAgICogVGhlIGN1c3RvbWVyLW1hbmFnZWQgS01TIGtleSB1c2VkIGZvciBlbmNyeXB0aW9uIGF0IHJlc3QsIGlmIGFueS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleVJlZjtcblxuICAvKipcbiAgICogVGhlIHNlcnZpY2Ugcm9sZSB0aGF0IEFXUyBHbHVlIGFzc3VtZXMgdG8gYWNjZXNzIHRoZSBLTVMga2V5LCBpZiBhbnkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2VydmljZVJvbGU/OiBpYW0uSVJvbGU7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcihtb2RlOiBDYXRhbG9nRW5jcnlwdGlvbk1vZGUsIGttc0tleT86IGttcy5JS2V5UmVmLCBzZXJ2aWNlUm9sZT86IGlhbS5JUm9sZSkge1xuICAgIHRoaXMubW9kZSA9IG1vZGU7XG4gICAgdGhpcy5rbXNLZXkgPSBrbXNLZXk7XG4gICAgdGhpcy5zZXJ2aWNlUm9sZSA9IHNlcnZpY2VSb2xlO1xuICB9XG59XG5cbi8qKlxuICogQ29ubmVjdGlvbi1wYXNzd29yZCBlbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIGEgR2x1ZSBEYXRhIENhdGFsb2cuXG4gKlxuICogV2hlbiBlbmFibGVkLCB0aGUgRGF0YSBDYXRhbG9nIGVuY3J5cHRzIHRoZSBwYXNzd29yZCBhcyBwYXJ0IG9mXG4gKiBgQ3JlYXRlQ29ubmVjdGlvbmAgb3IgYFVwZGF0ZUNvbm5lY3Rpb25gIGFuZCBzdG9yZXMgaXQgaW4gdGhlXG4gKiBgRU5DUllQVEVEX1BBU1NXT1JEYCBmaWVsZCBvZiB0aGUgY29ubmVjdGlvbiBwcm9wZXJ0aWVzLiBUaGlzIGlzIGluZGVwZW5kZW50XG4gKiBmcm9tIGNhdGFsb2cgZW5jcnlwdGlvbiBhdCByZXN0LCBhbmQgbWF5IHVzZSBhIGRpZmZlcmVudCBLTVMga2V5LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2dsdWUvbGF0ZXN0L3dlYmFwaS9BUElfQ29ubmVjdGlvblBhc3N3b3JkRW5jcnlwdGlvbi5odG1sXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdGlvblBhc3N3b3JkRW5jcnlwdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgS01TIGtleSB1c2VkIHRvIGVuY3J5cHQgY29ubmVjdGlvbiBwYXNzd29yZHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYW4gQVdTLW1hbmFnZWQga2V5IGlzIHVzZWQgYW5kIHRoZSBrZXkgaXMgbm90IGV4cG9zZWQgYXMgYSBncmFudGFibGUgcmVzb3VyY2UuXG4gICAqL1xuICByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleVJlZjtcblxuICAvKipcbiAgICogV2hldGhlciBwYXNzd29yZHMgcmVtYWluIGVuY3J5cHRlZCBpbiB0aGUgcmVzcG9uc2VzIG9mIGBHZXRDb25uZWN0aW9uYCBhbmRcbiAgICogYEdldENvbm5lY3Rpb25zYC4gVGhpcyB0YWtlcyBlZmZlY3QgaW5kZXBlbmRlbnRseSBmcm9tIGNhdGFsb2cgZW5jcnlwdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcmV0dXJuQ29ubmVjdGlvblBhc3N3b3JkRW5jcnlwdGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBFbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIGEgR2x1ZSBEYXRhIENhdGFsb2cuXG4gKlxuICogRW5jcnlwdGlvbiBpcyBmaXhlZCBhdCBjb25zdHJ1Y3Rpb246IGEgY2F0YWxvZyBlaXRoZXIgY2FycmllcyBlbmNyeXB0aW9uXG4gKiBzZXR0aW5ncyBvciBpdCBkb2VzIG5vdCwgd2hpY2gga2VlcHMgaXRzIGNvbmZpZ3VyYXRpb24gZWFzeSB0byByZWFzb24gYWJvdXRcbiAqIGFuZCBhdm9pZHMgb3JkZXItZGVwZW5kZW50IG11dGF0aW9uIGFmdGVyIHRoZSBjYXRhbG9nIGlzIGNyZWF0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2F0YWxvZ0VuY3J5cHRpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIEVuY3J5cHRpb24tYXQtcmVzdCBjb25maWd1cmF0aW9uIGZvciB0aGUgY2F0YWxvZy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBlbmNyeXB0aW9uIGF0IHJlc3QgaXMgbm90IG1hbmFnZWQgYnkgQ0RLICh0aGUgY2F0YWxvZyBkZWZhdWx0IGFwcGxpZXMpXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uQXRSZXN0PzogRGF0YUNhdGFsb2dFbmNyeXB0aW9uQXRSZXN0O1xuXG4gIC8qKlxuICAgKiBDb25uZWN0aW9uLXBhc3N3b3JkIGVuY3J5cHRpb24gY29uZmlndXJhdGlvbiBmb3IgdGhlIGNhdGFsb2cuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gY29ubmVjdGlvbi1wYXNzd29yZCBlbmNyeXB0aW9uIGlzIG5vdCBtYW5hZ2VkIGJ5IENES1xuICAgKi9cbiAgcmVhZG9ubHkgY29ubmVjdGlvblBhc3N3b3JkRW5jcnlwdGlvbj86IENvbm5lY3Rpb25QYXNzd29yZEVuY3J5cHRpb247XG59XG5cbi8qKlxuICogQSBHbHVlIERhdGEgQ2F0YWxvZywgZWl0aGVyIHRoZSBpbXBsaWNpdCBhY2NvdW50LXdpZGUgY2F0YWxvZyBvciBvbmUgY3JlYXRlZFxuICogYXMgYW4gYEFXUzo6R2x1ZTo6Q2F0YWxvZ2AgcmVzb3VyY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNhdGFsb2cgZXh0ZW5kcyBJUmVzb3VyY2UsIElDYXRhbG9nUmVmIHtcbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgY2F0YWxvZyAoZm9yIHRoZSBhY2NvdW50LXdpZGUgY2F0YWxvZywgdGhlIEFXUyBhY2NvdW50IGlkKS5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgY2F0YWxvZ0lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGNhdGFsb2cuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNhdGFsb2dBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGN1c3RvbWVyLW1hbmFnZWQgS01TIGtleSB1c2VkIGZvciB0aGUgY2F0YWxvZydzIGVuY3J5cHRpb24gYXQgcmVzdCwgaWZcbiAgICogb25lIHdhcyBjb25maWd1cmVkLlxuICAgKlxuICAgKiBVbmRlZmluZWQgd2hlbiBlbmNyeXB0aW9uIGlzIGRpc2FibGVkIG9yIGFuIEFXUy1tYW5hZ2VkIGtleSBpcyB1c2VkLiBHcmFudFxuICAgKiBhY2Nlc3MgdG8gaXQgdmlhIGBLZXlHcmFudHNgLCBlLmcuXG4gICAqIGBpZiAoY2F0YWxvZy5lbmNyeXB0aW9uS2V5KSB7IEtleUdyYW50cy5mcm9tS2V5KGNhdGFsb2cuZW5jcnlwdGlvbktleSkuZW5jcnlwdChncmFudGVlKTsgfWAuXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uS2V5Pzoga21zLklLZXlSZWY7XG5cbiAgLyoqXG4gICAqIFRoZSBjdXN0b21lci1tYW5hZ2VkIEtNUyBrZXkgdXNlZCB0byBlbmNyeXB0IGNvbm5lY3Rpb24gcGFzc3dvcmRzLCBpZiBvbmVcbiAgICogd2FzIGNvbmZpZ3VyZWQuXG4gICAqXG4gICAqIFVuZGVmaW5lZCB3aGVuIHBhc3N3b3JkIGVuY3J5cHRpb24gdXNlcyBhbiBBV1MtbWFuYWdlZCBrZXkgb3IgaXMgbm90XG4gICAqIGNvbmZpZ3VyZWQuIEdyYW50IGFjY2VzcyB0byBpdCB2aWEgYEtleUdyYW50c2AsIGUuZy5cbiAgICogYGlmIChjYXRhbG9nLmNvbm5lY3Rpb25QYXNzd29yZEtleSkgeyBLZXlHcmFudHMuZnJvbUtleShjYXRhbG9nLmNvbm5lY3Rpb25QYXNzd29yZEtleSkuZW5jcnlwdChncmFudGVlKTsgfWAuXG4gICAqL1xuICByZWFkb25seSBjb25uZWN0aW9uUGFzc3dvcmRLZXk/OiBrbXMuSUtleVJlZjtcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBhbGwgYElDYXRhbG9nYCBpbXBsZW1lbnRhdGlvbnMuIE1hdGVyaWFsaXplcyB0aGUgc2luZ2xlXG4gKiBgQ2ZuRGF0YUNhdGFsb2dFbmNyeXB0aW9uU2V0dGluZ3NgIHJlc291cmNlICh0YXJnZXRpbmcgaXRzIG93biBgY2F0YWxvZ0lkYClcbiAqIGZyb20gdGhlIGVuY3J5cHRpb24gb3B0aW9ucyBzdXBwbGllZCBhdCBjb25zdHJ1Y3Rpb24uIEVuY3J5cHRpb24gaXMgZml4ZWQgYXRcbiAqIGNvbnN0cnVjdGlvbiwgc28gYSBjYXRhbG9nIGVpdGhlciBjYXJyaWVzIHNldHRpbmdzIG9yIGl0IGRvZXMgbm90LlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ2F0YWxvZ0Jhc2UgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElDYXRhbG9nIHtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGNhdGFsb2dJZDogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgY2F0YWxvZ0Fybjogc3RyaW5nO1xuXG4gIHByaXZhdGUgX2VuY3J5cHRpb25LZXk/OiBrbXMuSUtleVJlZjtcbiAgcHJpdmF0ZSBfY29ubmVjdGlvblBhc3N3b3JkS2V5Pzoga21zLklLZXlSZWY7XG5cbiAgcHVibGljIGdldCBlbmNyeXB0aW9uS2V5KCk6IGttcy5JS2V5UmVmIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZW5jcnlwdGlvbktleTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29ubmVjdGlvblBhc3N3b3JkS2V5KCk6IGttcy5JS2V5UmVmIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvblBhc3N3b3JkS2V5O1xuICB9XG5cbiAgcHVibGljIGdldCBjYXRhbG9nUmVmKCk6IENhdGFsb2dSZWZlcmVuY2Uge1xuICAgIHJldHVybiB7XG4gICAgICByZXNvdXJjZUFybjogdGhpcy5jYXRhbG9nQXJuLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRW1pdCB0aGUgY2F0YWxvZydzIGVuY3J5cHRpb24gc2V0dGluZ3MgZnJvbSB0aGUgb3B0aW9ucyBmaXhlZCBhdFxuICAgKiBjb25zdHJ1Y3Rpb24uIFN1YmNsYXNzZXMgY2FsbCB0aGlzIG9uY2UsIGFmdGVyIGBjYXRhbG9nSWRgL2BjYXRhbG9nQXJuYCBhcmVcbiAgICogYXNzaWduZWQuIFdoZW4gbmVpdGhlciBibG9jayBpcyBjb25maWd1cmVkLCBubyByZXNvdXJjZSBpcyBlbWl0dGVkLCBhdm9pZGluZ1xuICAgKiBhbiBlbXB0eSBzZXR0aW5ncyByZXNvdXJjZSB0aGF0IHdvdWxkIHJlc2V0IHRoZSBjYXRhbG9nIG9uIGRlcGxveS5cbiAgICovXG4gIHByb3RlY3RlZCBjb25maWd1cmVFbmNyeXB0aW9uKG9wdGlvbnM6IENhdGFsb2dFbmNyeXB0aW9uT3B0aW9ucyk6IHZvaWQge1xuICAgIGNvbnN0IGF0UmVzdCA9IG9wdGlvbnMuZW5jcnlwdGlvbkF0UmVzdDtcbiAgICBjb25zdCBwYXNzd29yZCA9IG9wdGlvbnMuY29ubmVjdGlvblBhc3N3b3JkRW5jcnlwdGlvbjtcblxuICAgIGlmICghYXRSZXN0ICYmICFwYXNzd29yZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2VuY3J5cHRpb25LZXkgPSBhdFJlc3Q/Lmttc0tleTtcbiAgICB0aGlzLl9jb25uZWN0aW9uUGFzc3dvcmRLZXkgPSBwYXNzd29yZD8ua21zS2V5O1xuXG4gICAgLy8gQXV0by1ncmFudCB0aGUgc2VydmljZSByb2xlIGFjY2VzcyB0byB0aGUgY3VzdG9tZXItbWFuYWdlZCBrZXkgaXQgbmVlZHNcbiAgICAvLyB0byBlbmNyeXB0IGFuZCBkZWNyeXB0IGNhdGFsb2cgZGF0YS4gTm90aGluZyB0byBncmFudCBmb3IgYW4gQVdTLW1hbmFnZWRcbiAgICAvLyBrZXkgKHdlIGRvbid0IG93biBpdHMga2V5IHBvbGljeSkuXG4gICAgaWYgKGF0UmVzdD8uc2VydmljZVJvbGUgJiYgYXRSZXN0Lmttc0tleSkge1xuICAgICAgS2V5R3JhbnRzLmZyb21LZXkoYXRSZXN0Lmttc0tleSkuZW5jcnlwdERlY3J5cHQoYXRSZXN0LnNlcnZpY2VSb2xlKTtcbiAgICB9XG5cbiAgICAvLyBUd28gY2F0YWxvZyBpbnN0YW5jZXMgdGhhdCB0YXJnZXQgdGhlIHNhbWUgY2F0YWxvZyBpZCB3b3VsZCBlYWNoIGVtaXQgYVxuICAgIC8vIHNldHRpbmdzIHJlc291cmNlIGFuZCByYWNlIHRvIG92ZXJ3cml0ZSBvbmUgYW5vdGhlciB2aWFcbiAgICAvLyBgUHV0RGF0YUNhdGFsb2dFbmNyeXB0aW9uU2V0dGluZ3NgLiBXaXRoaW4gb25lIHN0YWNrIHRoaXMgaXMgc3VyZmFjZWQgYnlcbiAgICAvLyBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZSB2YWxpZGF0aW9uIChFMzAxOTogZHVwbGljYXRlIHByaW1hcnkgaWRlbnRpZmllcnMpLFxuICAgIC8vIHNvIHdlIGRvIG5vdCBkdXBsaWNhdGUgdGhhdCBjaGVjayBoZXJlLlxuICAgIG5ldyBDZm5EYXRhQ2F0YWxvZ0VuY3J5cHRpb25TZXR0aW5ncyh0aGlzLCAnRW5jcnlwdGlvblNldHRpbmdzJywge1xuICAgICAgY2F0YWxvZ0lkOiB0aGlzLmNhdGFsb2dJZCxcbiAgICAgIGRhdGFDYXRhbG9nRW5jcnlwdGlvblNldHRpbmdzOiB7XG4gICAgICAgIGVuY3J5cHRpb25BdFJlc3Q6IGF0UmVzdFxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgY2F0YWxvZ0VuY3J5cHRpb25Nb2RlOiBhdFJlc3QubW9kZSxcbiAgICAgICAgICAgIHNzZUF3c0ttc0tleUlkOiBhdFJlc3Qua21zS2V5Py5rZXlSZWYua2V5QXJuLFxuICAgICAgICAgICAgY2F0YWxvZ0VuY3J5cHRpb25TZXJ2aWNlUm9sZTogYXRSZXN0LnNlcnZpY2VSb2xlPy5yb2xlQXJuLFxuICAgICAgICAgIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgY29ubmVjdGlvblBhc3N3b3JkRW5jcnlwdGlvbjogcGFzc3dvcmRcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgIGttc0tleUlkOiBwYXNzd29yZC5rbXNLZXk/LmtleVJlZi5rZXlBcm4sXG4gICAgICAgICAgICByZXR1cm5Db25uZWN0aW9uUGFzc3dvcmRFbmNyeXB0ZWQ6IHBhc3N3b3JkLnJldHVybkNvbm5lY3Rpb25QYXNzd29yZEVuY3J5cHRlZCA/PyB0cnVlLFxuICAgICAgICAgIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3Rpb24gcHJvcGVydGllcyBmb3IgYSBgQ2F0YWxvZ2AuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2F0YWxvZ1Byb3BzIGV4dGVuZHMgQ2F0YWxvZ0VuY3J5cHRpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBjYXRhbG9nLlxuICAgKi9cbiAgcmVhZG9ubHkgY2F0YWxvZ05hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQSBkZXNjcmlwdGlvbiBvZiB0aGUgY2F0YWxvZy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHN0YWNrLXNjb3BlZCBzaW5nbGV0b24gaWQgZm9yIHRoZSBpbXBsaWNpdCBhY2NvdW50LXdpZGUgY2F0YWxvZy5cbiAqL1xuY29uc3QgQUNDT1VOVF9DQVRBTE9HX1VJRCA9ICdAYXdzLWNkay5hd3MtZ2x1ZS1hbHBoYS5BY2NvdW50Q2F0YWxvZyc7XG5cbi8qKlxuICogQSBHbHVlIERhdGEgQ2F0YWxvZy5cbiAqXG4gKiBVc2UgYENhdGFsb2cuZm9yQWNjb3VudChzY29wZSlgIHRvIG9idGFpbiB0aGUgaW1wbGljaXQgYWNjb3VudC13aWRlIGNhdGFsb2csXG4gKiBgQ2F0YWxvZy5lbmNyeXB0QWNjb3VudChzY29wZSwgb3B0aW9ucylgIHRvIGNvbmZpZ3VyZSBpdHMgRGF0YSBDYXRhbG9nXG4gKiBlbmNyeXB0aW9uLCBvciBgbmV3IENhdGFsb2coLi4uKWAgdG8gY3JlYXRlIGFuIGBBV1M6OkdsdWU6OkNhdGFsb2dgIHJlc291cmNlLlxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgQ2F0YWxvZyBleHRlbmRzIENhdGFsb2dCYXNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtZ2x1ZS1hbHBoYS5DYXRhbG9nJztcblxuICAvKipcbiAgICogT2J0YWluIHRoZSBpbXBsaWNpdCwgYWNjb3VudC13aWRlIERhdGEgQ2F0YWxvZy5cbiAgICpcbiAgICogVGhlIGFjY291bnQgY2F0YWxvZyBpcyBub3QgYSBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZTsgaXQgYWx3YXlzIGV4aXN0cy4gVGhpc1xuICAgKiByZXR1cm5zIGEgc3RhY2stc2NvcGVkIHNpbmdsZXRvbiwgc28gcmVwZWF0ZWQgY2FsbHMgd2l0aGluIHRoZSBzYW1lIHN0YWNrXG4gICAqIHJldHVybiB0aGUgc2FtZSBpbnN0YW5jZS5cbiAgICpcbiAgICogVGhpcyByZXR1cm5zIHRoZSBhY2NvdW50IGNhdGFsb2cgd2l0aG91dCBtYW5hZ2luZyBpdHMgZW5jcnlwdGlvbi4gVG9cbiAgICogY29uZmlndXJlIERhdGEgQ2F0YWxvZyBlbmNyeXB0aW9uIGZvciB0aGUgYWNjb3VudCwgdXNlXG4gICAqIGBDYXRhbG9nLmVuY3J5cHRBY2NvdW50KHNjb3BlLCBvcHRpb25zKWAgaW5zdGVhZCAtIGl0IG11c3QgYmUgY2FsbGVkIGJlZm9yZVxuICAgKiB0aGUgYWNjb3VudCBjYXRhbG9nIGlzIGZpcnN0IHVzZWQgaW4gdGhlIHN0YWNrLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmb3JBY2NvdW50KHNjb3BlOiBDb25zdHJ1Y3QpOiBJQ2F0YWxvZyB7XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBzdGFjay5ub2RlLnRyeUZpbmRDaGlsZChBQ0NPVU5UX0NBVEFMT0dfVUlEKTtcbiAgICByZXR1cm4gKGV4aXN0aW5nIGFzIEFjY291bnRDYXRhbG9nKSA/PyBuZXcgQWNjb3VudENhdGFsb2coc3RhY2ssIEFDQ09VTlRfQ0FUQUxPR19VSUQsIHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmUgRGF0YSBDYXRhbG9nIGVuY3J5cHRpb24gZm9yIHRoZSBpbXBsaWNpdCwgYWNjb3VudC13aWRlIGNhdGFsb2cgYW5kXG4gICAqIHJldHVybiBpdC5cbiAgICpcbiAgICogVGhlIGFjY291bnQgY2F0YWxvZydzIGVuY3J5cHRpb24gaXMgYW4gYWNjb3VudC9yZWdpb24td2lkZSBzZXR0aW5nLCBtYW5hZ2VkXG4gICAqIHRocm91Z2ggdGhlIHNpbmdsZXRvbiBgUHV0RGF0YUNhdGFsb2dFbmNyeXB0aW9uU2V0dGluZ3NgIEFQSS4gQmVjYXVzZVxuICAgKiBlbmNyeXB0aW9uIGlzIGZpeGVkIGF0IGNvbnN0cnVjdGlvbiwgaXQgbXVzdCBiZSBjb25maWd1cmVkIGJlZm9yZSB0aGVcbiAgICogYWNjb3VudCBjYXRhbG9nIGlzIGZpcnN0IHVzZWQgaW4gdGhlIHN0YWNrOiBjYWxsaW5nIHRoaXMgYWZ0ZXIgdGhlIGFjY291bnRcbiAgICogY2F0YWxvZyBoYXMgYWxyZWFkeSBiZWVuIG1hdGVyaWFsaXplZCAoZm9yIGV4YW1wbGUgYnkgYENhdGFsb2cuZm9yQWNjb3VudGAsXG4gICAqIG9yIGJ5IGEgYERhdGFiYXNlYCB0aGF0IHVzZXMgdGhlIGFjY291bnQgY2F0YWxvZykgdGhyb3dzLlxuICAgKlxuICAgKiBDb25maWd1cmUgaXQgaW4gZXhhY3RseSBvbmUgc3RhY2suIENvbmZpZ3VyaW5nIGl0IGZyb20gbXVsdGlwbGUgc3RhY2tzIGluIHRoZVxuICAgKiBzYW1lIGFjY291bnQgYW5kIHJlZ2lvbiBtYWtlcyB0aG9zZSBzdGFja3Mgb3ZlcndyaXRlIG9uZSBhbm90aGVyIGF0IGRlcGxveVxuICAgKiB0aW1lLCBhbmQgdGhlIHJlc3VsdCBpcyBvcmRlci1kZXBlbmRlbnQuIFVubGlrZSBkdXBsaWNhdGUgc2V0dGluZ3Mgd2l0aGluIGFcbiAgICogc2luZ2xlIHN0YWNrICh3aGljaCBDbG91ZEZvcm1hdGlvbiByZWplY3RzKSwgdGhpcyBjcm9zcy1zdGFjayBjb25mbGljdCBpcyBub3RcbiAgICogY2F1Z2h0IGF0IHN5bnRoZXNpcyB0aW1lLCBiZWNhdXNlIGVhY2ggc3RhY2sgc3ludGhlc2l6ZXMgdG8gaXRzIG93biB0ZW1wbGF0ZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZW5jcnlwdEFjY291bnQoc2NvcGU6IENvbnN0cnVjdCwgb3B0aW9uczogQ2F0YWxvZ0VuY3J5cHRpb25PcHRpb25zKTogSUNhdGFsb2cge1xuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2Yoc2NvcGUpO1xuICAgIGlmIChzdGFjay5ub2RlLnRyeUZpbmRDaGlsZChBQ0NPVU5UX0NBVEFMT0dfVUlEKSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgbGl0YEFjY291bnRDYXRhbG9nQWxyZWFkeUluVXNlYCxcbiAgICAgICAgJ3RoZSBhY2NvdW50IGNhdGFsb2cgaGFzIGFscmVhZHkgYmVlbiB1c2VkIGluIHRoaXMgc3RhY2s7IGNhbGwgQ2F0YWxvZy5lbmNyeXB0QWNjb3VudCgpIGJlZm9yZSBDYXRhbG9nLmZvckFjY291bnQoKSBvciBhbnkgRGF0YWJhc2UgdGhhdCB1c2VzIHRoZSBhY2NvdW50IGNhdGFsb2cnLFxuICAgICAgICBzY29wZSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQWNjb3VudENhdGFsb2coc3RhY2ssIEFDQ09VTlRfQ0FUQUxPR19VSUQsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBjYXRhbG9nIGJ5IGl0cyBBUk4uXG4gICAqXG4gICAqIFRoZSBBUk4gbXVzdCBiZSBhIEdsdWUgY2F0YWxvZyBBUk4sIGVpdGhlciB0aGUgYWNjb3VudC13aWRlIGNhdGFsb2dcbiAgICogKGBhcm46YXdzOmdsdWU6PHJlZ2lvbj46PGFjY291bnQ+OmNhdGFsb2dgLCB3aG9zZSBpZCBpcyB0aGUgYWNjb3VudCkgb3IgYVxuICAgKiBuYW1lZCBjYXRhbG9nIChgYXJuOmF3czpnbHVlOjxyZWdpb24+OjxhY2NvdW50PjpjYXRhbG9nLzxuYW1lPmAsIHdob3NlIGlkIGlzXG4gICAqIHRoZSBuYW1lKS5cbiAgICpcbiAgICogVGhlIGltcG9ydGVkIGNhdGFsb2cgaXMgYSBwdXJlIGlkZW50aXR5IGhhbmRsZSBhbmQgZG9lcyBub3QgbWFuYWdlIHRoZVxuICAgKiBjYXRhbG9nJ3MgZW5jcnlwdGlvbi4gVG8gbWFuYWdlIGFuIGV4aXN0aW5nIGNhdGFsb2cncyBEYXRhIENhdGFsb2dcbiAgICogZW5jcnlwdGlvbiwgYWRkIGEgYENmbkRhdGFDYXRhbG9nRW5jcnlwdGlvblNldHRpbmdzYCByZXNvdXJjZSB0YXJnZXRpbmcgaXRzXG4gICAqIGlkLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQ2F0YWxvZ0FybihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBjYXRhbG9nQXJuOiBzdHJpbmcpOiBJQ2F0YWxvZyB7XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG4gICAgY29uc3QgYXJuID0gc3RhY2suc3BsaXRBcm4oY2F0YWxvZ0FybiwgQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUpO1xuXG4gICAgLy8gT25seSB2YWxpZGF0ZSB0aGUgc2hhcGUgb2YgY29uY3JldGUgQVJOczsgYSB0b2tlbml6ZWQgQVJOIGNhbid0IGJlXG4gICAgLy8gaW5zcGVjdGVkIGF0IHN5bnRoIHRpbWUsIHNvIHdlIHRydXN0IGl0LlxuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKGNhdGFsb2dBcm4pICYmIChhcm4uc2VydmljZSAhPT0gJ2dsdWUnIHx8IGFybi5yZXNvdXJjZSAhPT0gJ2NhdGFsb2cnKSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgbGl0YEludmFsaWRDYXRhbG9nQXJuYCxcbiAgICAgICAgYGV4cGVjdGVkIGEgR2x1ZSBjYXRhbG9nIEFSTiAoYXJuOjxwYXJ0aXRpb24+OmdsdWU6PHJlZ2lvbj46PGFjY291bnQ+OmNhdGFsb2dbLzxuYW1lPl0pLCBnb3QgJHtKU09OLnN0cmluZ2lmeShjYXRhbG9nQXJuKX1gLFxuICAgICAgICBzY29wZSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gVGhlIGFjY291bnQtd2lkZSBjYXRhbG9nJ3MgQVJOIGhhcyBubyByZXNvdXJjZSBuYW1lOyBpdHMgaWQgaXMgdGhlXG4gICAgLy8gYWNjb3VudCBmcm9tIHRoZSBBUk4gaXRzZWxmIChmYWxsaW5nIGJhY2sgdG8gdGhlIHN0YWNrIGFjY291bnQgZm9yIGFcbiAgICAvLyB0b2tlbml6ZWQgQVJOIHdpdGggbm8gcGFyc2VhYmxlIGFjY291bnQpLlxuICAgIGNvbnN0IGNhdGFsb2dJZCA9IGFybi5yZXNvdXJjZU5hbWUgPz8gYXJuLmFjY291bnQgPz8gc3RhY2suYWNjb3VudDtcbiAgICByZXR1cm4gbmV3IEltcG9ydGVkQ2F0YWxvZyhzY29wZSwgaWQsIGNhdGFsb2dJZCwgY2F0YWxvZ0Fybik7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIGNhdGFsb2cgYnkgaXRzIGlkLlxuICAgKlxuICAgKiBUaGUgaW1wb3J0ZWQgY2F0YWxvZyBpcyBhIHB1cmUgaWRlbnRpdHkgaGFuZGxlIGFuZCBkb2VzIG5vdCBtYW5hZ2UgdGhlXG4gICAqIGNhdGFsb2cncyBlbmNyeXB0aW9uLiBUbyBtYW5hZ2UgYW4gZXhpc3RpbmcgY2F0YWxvZydzIERhdGEgQ2F0YWxvZ1xuICAgKiBlbmNyeXB0aW9uLCBhZGQgYSBgQ2ZuRGF0YUNhdGFsb2dFbmNyeXB0aW9uU2V0dGluZ3NgIHJlc291cmNlIHRhcmdldGluZyBpdHNcbiAgICogaWQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21DYXRhbG9nSWQoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgY2F0YWxvZ0lkOiBzdHJpbmcpOiBJQ2F0YWxvZyB7XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG4gICAgY29uc3QgY2F0YWxvZ0FybiA9IHN0YWNrLmZvcm1hdEFybih7IHNlcnZpY2U6ICdnbHVlJywgcmVzb3VyY2U6ICdjYXRhbG9nJywgcmVzb3VyY2VOYW1lOiBjYXRhbG9nSWQgfSk7XG4gICAgcmV0dXJuIG5ldyBJbXBvcnRlZENhdGFsb2coc2NvcGUsIGlkLCBjYXRhbG9nSWQsIGNhdGFsb2dBcm4pO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGNhdGFsb2dJZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgY2F0YWxvZ0Fybjogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVzb3VyY2U6IENmbkNhdGFsb2c7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IENhdGFsb2dQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IENmbkNhdGFsb2codGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgbmFtZTogcHJvcHMuY2F0YWxvZ05hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgfSk7XG5cbiAgICB0aGlzLmNhdGFsb2dJZCA9IHRoaXMucmVzb3VyY2UuYXR0ckNhdGFsb2dJZDtcbiAgICB0aGlzLmNhdGFsb2dBcm4gPSB0aGlzLnJlc291cmNlLmF0dHJSZXNvdXJjZUFybjtcblxuICAgIHRoaXMuY29uZmlndXJlRW5jcnlwdGlvbihwcm9wcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgaW1wbGljaXQsIGFjY291bnQtd2lkZSBEYXRhIENhdGFsb2cuIE5vdCBhIENsb3VkRm9ybWF0aW9uIHJlc291cmNlOyBvbmx5XG4gKiB0aGUgZW5jcnlwdGlvbiBzZXR0aW5ncyBpdCBjYXJyaWVzIGFyZSBzeW50aGVzaXplZC5cbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuY2xhc3MgQWNjb3VudENhdGFsb2cgZXh0ZW5kcyBDYXRhbG9nQmFzZSB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWdsdWUtYWxwaGEuQWNjb3VudENhdGFsb2cnO1xuICBwdWJsaWMgcmVhZG9ubHkgY2F0YWxvZ0lkOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBjYXRhbG9nQXJuOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgZW5jcnlwdGlvbjogQ2F0YWxvZ0VuY3J5cHRpb25PcHRpb25zKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIGVuY3J5cHRpb24pO1xuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2YodGhpcyk7XG4gICAgdGhpcy5jYXRhbG9nSWQgPSBzdGFjay5hY2NvdW50O1xuICAgIC8vIFRoZSBhY2NvdW50IGNhdGFsb2cncyBpZCBpcyBpbXBsaWNpdGx5IHRoZSBhY2NvdW50IGlkLCBzbyB0aGUgQVJOIGhhcyBubyByZXNvdXJjZSBuYW1lLlxuICAgIHRoaXMuY2F0YWxvZ0FybiA9IHN0YWNrLmZvcm1hdEFybih7IHNlcnZpY2U6ICdnbHVlJywgcmVzb3VyY2U6ICdjYXRhbG9nJyB9KTtcblxuICAgIHRoaXMuY29uZmlndXJlRW5jcnlwdGlvbihlbmNyeXB0aW9uKTtcbiAgfVxufVxuXG4vKipcbiAqIEFuIGltcG9ydGVkIGNhdGFsb2cuIEEgcHVyZSBpZGVudGl0eSBoYW5kbGU6IGl0IGVtaXRzIG5vIHJlc291cmNlcyBhbmQgZG9lc1xuICogbm90IG1hbmFnZSB0aGUgaW1wb3J0ZWQgY2F0YWxvZydzIGVuY3J5cHRpb24uXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmNsYXNzIEltcG9ydGVkQ2F0YWxvZyBleHRlbmRzIENhdGFsb2dCYXNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtZ2x1ZS1hbHBoYS5JbXBvcnRlZENhdGFsb2cnO1xuICBwdWJsaWMgcmVhZG9ubHkgY2F0YWxvZ0lkOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBjYXRhbG9nQXJuOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgY2F0YWxvZ0lkOiBzdHJpbmcsIGNhdGFsb2dBcm46IHN0cmluZykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBjYXRhbG9nSWQpO1xuICAgIHRoaXMuY2F0YWxvZ0lkID0gY2F0YWxvZ0lkO1xuICAgIHRoaXMuY2F0YWxvZ0FybiA9IGNhdGFsb2dBcm47XG4gIH1cbn1cbiJdfQ==
|
|
508
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNhdGFsb2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0EsbURBQW9GO0FBR3BGLGlEQUFnRDtBQUVoRCwyQ0FBc0Y7QUFDdEYsNEVBQTREO0FBQzVELDhFQUE4RTtBQUM5RSwwRUFBMEU7QUFHMUU7Ozs7R0FJRztBQUNILElBQVkscUJBZ0JYO0FBaEJELFdBQVkscUJBQXFCO0lBQy9COztPQUVHO0lBQ0gsOENBQXFCLENBQUE7SUFFckI7O09BRUc7SUFDSCw0Q0FBbUIsQ0FBQTtJQUVuQjs7O09BR0c7SUFDSCxnRkFBdUQsQ0FBQTtBQUN6RCxDQUFDLEVBaEJXLHFCQUFxQixxQ0FBckIscUJBQXFCLFFBZ0JoQztBQUVEOzs7Ozs7OztHQVFHO0FBQ0gsTUFBYSwyQkFBMkI7O0lBQ3RDOztPQUVHO0lBQ0ksTUFBTSxDQUFDLFFBQVE7Ozs7Ozs7Ozs7UUFDcEIsT0FBTyxJQUFJLDJCQUEyQixDQUFDLHFCQUFxQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0tBQ3hFO0lBRUQ7Ozs7O09BS0c7SUFDSSxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQWlCOzs7Ozs7Ozs7O1FBQ2pDLE9BQU8sSUFBSSwyQkFBMkIsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDNUU7SUFFRDs7Ozs7Ozs7OztPQVVHO0lBQ0ksTUFBTSxDQUFDLGtCQUFrQixDQUFDLElBQWUsRUFBRSxHQUFpQjs7Ozs7Ozs7OztRQUNqRSxPQUFPLElBQUksMkJBQTJCLENBQUMscUJBQXFCLENBQUMseUJBQXlCLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0tBQ3BHO0lBRUQ7O09BRUc7SUFDYSxJQUFJLENBQXdCO0lBRTVDOztPQUVHO0lBQ2EsTUFBTSxDQUFlO0lBRXJDOztPQUVHO0lBQ2EsV0FBVyxDQUFhO0lBRXhDLFlB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Ozs7c0JBQ1csV0FBVzsrQkFBbkIsU0FBUSxXQUFXOzs7O1lBQXpDLDZLQWFDOzs7O1FBWkMsc0NBQXNDO1FBQy9CLE1BQU0sQ0FBVSxxQkFBcUIsR0FBVyx5Q0FBeUMsQ0FBQztRQUNqRixTQUFTLENBQVM7UUFDbEIsVUFBVSxDQUFTO1FBRW5DLFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsU0FBaUIsRUFBRSxVQUFrQjtZQUM3RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ2pCLG1DQUFtQztZQUNuQyxJQUFBLHdDQUFvQixFQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztZQUMzQixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztTQUM5Qjs7WUFaRyx1REFBZSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQ2F0YWxvZ1JlZmVyZW5jZSwgSUNhdGFsb2dSZWYgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZ2x1ZSc7XG5pbXBvcnQgeyBDZm5DYXRhbG9nLCBDZm5EYXRhQ2F0YWxvZ0VuY3J5cHRpb25TZXR0aW5ncyB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1nbHVlJztcbmltcG9ydCB0eXBlICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHR5cGUgKiBhcyBrbXMgZnJvbSAnYXdzLWNkay1saWIvYXdzLWttcyc7XG5pbXBvcnQgeyBLZXlHcmFudHMgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3Mta21zJztcbmltcG9ydCB0eXBlIHsgSVJlc291cmNlIH0gZnJvbSAnYXdzLWNkay1saWIvY29yZSc7XG5pbXBvcnQgeyBBcm5Gb3JtYXQsIFJlc291cmNlLCBTdGFjaywgVG9rZW4sIFZhbGlkYXRpb25FcnJvciB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUnO1xuaW1wb3J0IHsgbGl0IH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvaGVscGVycy1pbnRlcm5hbCc7XG5pbXBvcnQgeyBhZGRDb25zdHJ1Y3RNZXRhZGF0YSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL21ldGFkYXRhLXJlc291cmNlJztcbmltcG9ydCB7IHByb3BlcnR5SW5qZWN0YWJsZSB9IGZyb20gJ2F3cy1jZGstbGliL2NvcmUvbGliL3Byb3AtaW5qZWN0YWJsZSc7XG5pbXBvcnQgdHlwZSB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuXG4vKipcbiAqIFRoZSBlbmNyeXB0aW9uLWF0LXJlc3QgbW9kZSBmb3IgYSBHbHVlIERhdGEgQ2F0YWxvZy5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nbHVlL2xhdGVzdC93ZWJhcGkvQVBJX0VuY3J5cHRpb25BdFJlc3QuaHRtbCNHbHVlLVR5cGUtRW5jcnlwdGlvbkF0UmVzdC1DYXRhbG9nRW5jcnlwdGlvbk1vZGVcbiAqL1xuZXhwb3J0IGVudW0gQ2F0YWxvZ0VuY3J5cHRpb25Nb2RlIHtcbiAgLyoqXG4gICAqIEVuY3J5cHRpb24gYXQgcmVzdCBpcyBkaXNhYmxlZC5cbiAgICovXG4gIERJU0FCTEVEID0gJ0RJU0FCTEVEJyxcblxuICAvKipcbiAgICogU2VydmVyLXNpZGUgZW5jcnlwdGlvbiAoU1NFKSB3aXRoIGFuIEFXUyBLTVMga2V5LlxuICAgKi9cbiAgU1NFX0tNUyA9ICdTU0UtS01TJyxcblxuICAvKipcbiAgICogU2VydmVyLXNpZGUgZW5jcnlwdGlvbiAoU1NFKSB3aXRoIGFuIEFXUyBLTVMga2V5LCB1c2luZyBhIHNlcnZpY2Ugcm9sZSB0aGF0XG4gICAqIEFXUyBHbHVlIGFzc3VtZXMgdG8gYWNjZXNzIHRoZSBrZXkgb24geW91ciBiZWhhbGYuXG4gICAqL1xuICBTU0VfS01TX1dJVEhfU0VSVklDRV9ST0xFID0gJ1NTRS1LTVMtV0lUSC1TRVJWSUNFLVJPTEUnLFxufVxuXG4vKipcbiAqIEVuY3J5cHRpb24tYXQtcmVzdCBjb25maWd1cmF0aW9uIGZvciBhIEdsdWUgRGF0YSBDYXRhbG9nLlxuICpcbiAqIFRoZSBEYXRhIENhdGFsb2cgZW5jcnlwdGlvbiBhdCByZXN0IGFuZCB0aGUgY29ubmVjdGlvbiBwYXNzd29yZCBlbmNyeXB0aW9uXG4gKiBhcmUgaW5kZXBlbmRlbnQ6IGVuYWJsaW5nIG9uZSBkb2VzIG5vdCByZXF1aXJlIHRoZSBvdGhlciwgYW5kIGVhY2ggbWF5IHVzZSBhXG4gKiBkaWZmZXJlbnQgS01TIGtleS5cbiAqXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5hd3MuYW1hem9uLmNvbS9nbHVlL2xhdGVzdC93ZWJhcGkvQVBJX0VuY3J5cHRpb25BdFJlc3QuaHRtbFxuICovXG5leHBvcnQgY2xhc3MgRGF0YUNhdGFsb2dFbmNyeXB0aW9uQXRSZXN0IHtcbiAgLyoqXG4gICAqIERpc2FibGUgZW5jcnlwdGlvbiBhdCByZXN0IGZvciB0aGUgRGF0YSBDYXRhbG9nLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBkaXNhYmxlZCgpOiBEYXRhQ2F0YWxvZ0VuY3J5cHRpb25BdFJlc3Qge1xuICAgIHJldHVybiBuZXcgRGF0YUNhdGFsb2dFbmNyeXB0aW9uQXRSZXN0KENhdGFsb2dFbmNyeXB0aW9uTW9kZS5ESVNBQkxFRCk7XG4gIH1cblxuICAvKipcbiAgICogRW5jcnlwdCB0aGUgRGF0YSBDYXRhbG9nIGF0IHJlc3Qgd2l0aCBhbiBBV1MgS01TIGtleS5cbiAgICpcbiAgICogQHBhcmFtIGtleSB0aGUgS01TIGtleSB0byB1c2UuIElmIG9taXR0ZWQsIGFuIEFXUy1tYW5hZ2VkIGtleSBpcyB1c2VkIGFuZFxuICAgKiB0aGUga2V5IGlzIG5vdCBleHBvc2VkIGFzIGEgZ3JhbnRhYmxlIHJlc291cmNlLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBrbXMoa2V5Pzoga21zLklLZXlSZWYpOiBEYXRhQ2F0YWxvZ0VuY3J5cHRpb25BdFJlc3Qge1xuICAgIHJldHVybiBuZXcgRGF0YUNhdGFsb2dFbmNyeXB0aW9uQXRSZXN0KENhdGFsb2dFbmNyeXB0aW9uTW9kZS5TU0VfS01TLCBrZXkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEVuY3J5cHQgdGhlIERhdGEgQ2F0YWxvZyBhdCByZXN0IHdpdGggYW4gQVdTIEtNUyBrZXksIGFjY2Vzc2VkIHRocm91Z2ggYVxuICAgKiBzZXJ2aWNlIHJvbGUgdGhhdCBBV1MgR2x1ZSBhc3N1bWVzIG9uIHlvdXIgYmVoYWxmLlxuICAgKlxuICAgKiBXaGVuIGEgY3VzdG9tZXItbWFuYWdlZCBga2V5YCBpcyBwcm92aWRlZCwgdGhlIGByb2xlYCBpcyBhdXRvbWF0aWNhbGx5XG4gICAqIGdyYW50ZWQgYGttczpFbmNyeXB0YC9ga21zOkRlY3J5cHRgL2BrbXM6R2VuZXJhdGVEYXRhS2V5KmAgb24gaXQuXG4gICAqXG4gICAqIEBwYXJhbSByb2xlIHRoZSBzZXJ2aWNlIHJvbGUgdGhhdCBBV1MgR2x1ZSBhc3N1bWVzIHRvIGFjY2VzcyB0aGUga2V5LlxuICAgKiBAcGFyYW0ga2V5IHRoZSBLTVMga2V5IHRvIHVzZS4gSWYgb21pdHRlZCwgYW4gQVdTLW1hbmFnZWQga2V5IGlzIHVzZWQgYW5kXG4gICAqIHRoZSBrZXkgaXMgbm90IGV4cG9zZWQgYXMgYSBncmFudGFibGUgcmVzb3VyY2UuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGttc1dpdGhTZXJ2aWNlUm9sZShyb2xlOiBpYW0uSVJvbGUsIGtleT86IGttcy5JS2V5UmVmKTogRGF0YUNhdGFsb2dFbmNyeXB0aW9uQXRSZXN0IHtcbiAgICByZXR1cm4gbmV3IERhdGFDYXRhbG9nRW5jcnlwdGlvbkF0UmVzdChDYXRhbG9nRW5jcnlwdGlvbk1vZGUuU1NFX0tNU19XSVRIX1NFUlZJQ0VfUk9MRSwga2V5LCByb2xlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBUaGUgZW5jcnlwdGlvbiBtb2RlLlxuICAgKi9cbiAgcHVibGljIHJlYWRvbmx5IG1vZGU6IENhdGFsb2dFbmNyeXB0aW9uTW9kZTtcblxuICAvKipcbiAgICogVGhlIGN1c3RvbWVyLW1hbmFnZWQgS01TIGtleSB1c2VkIGZvciBlbmNyeXB0aW9uIGF0IHJlc3QsIGlmIGFueS5cbiAgICovXG4gIHB1YmxpYyByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleVJlZjtcblxuICAvKipcbiAgICogVGhlIHNlcnZpY2Ugcm9sZSB0aGF0IEFXUyBHbHVlIGFzc3VtZXMgdG8gYWNjZXNzIHRoZSBLTVMga2V5LCBpZiBhbnkuXG4gICAqL1xuICBwdWJsaWMgcmVhZG9ubHkgc2VydmljZVJvbGU/OiBpYW0uSVJvbGU7XG5cbiAgcHJpdmF0ZSBjb25zdHJ1Y3Rvcihtb2RlOiBDYXRhbG9nRW5jcnlwdGlvbk1vZGUsIGttc0tleT86IGttcy5JS2V5UmVmLCBzZXJ2aWNlUm9sZT86IGlhbS5JUm9sZSkge1xuICAgIHRoaXMubW9kZSA9IG1vZGU7XG4gICAgdGhpcy5rbXNLZXkgPSBrbXNLZXk7XG4gICAgdGhpcy5zZXJ2aWNlUm9sZSA9IHNlcnZpY2VSb2xlO1xuICB9XG59XG5cbi8qKlxuICogQ29ubmVjdGlvbi1wYXNzd29yZCBlbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIGEgR2x1ZSBEYXRhIENhdGFsb2cuXG4gKlxuICogV2hlbiBlbmFibGVkLCB0aGUgRGF0YSBDYXRhbG9nIGVuY3J5cHRzIHRoZSBwYXNzd29yZCBhcyBwYXJ0IG9mXG4gKiBgQ3JlYXRlQ29ubmVjdGlvbmAgb3IgYFVwZGF0ZUNvbm5lY3Rpb25gIGFuZCBzdG9yZXMgaXQgaW4gdGhlXG4gKiBgRU5DUllQVEVEX1BBU1NXT1JEYCBmaWVsZCBvZiB0aGUgY29ubmVjdGlvbiBwcm9wZXJ0aWVzLiBUaGlzIGlzIGluZGVwZW5kZW50XG4gKiBmcm9tIGNhdGFsb2cgZW5jcnlwdGlvbiBhdCByZXN0LCBhbmQgbWF5IHVzZSBhIGRpZmZlcmVudCBLTVMga2V5LlxuICpcbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLmF3cy5hbWF6b24uY29tL2dsdWUvbGF0ZXN0L3dlYmFwaS9BUElfQ29ubmVjdGlvblBhc3N3b3JkRW5jcnlwdGlvbi5odG1sXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdGlvblBhc3N3b3JkRW5jcnlwdGlvbiB7XG4gIC8qKlxuICAgKiBUaGUgS01TIGtleSB1c2VkIHRvIGVuY3J5cHQgY29ubmVjdGlvbiBwYXNzd29yZHMuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gYW4gQVdTLW1hbmFnZWQga2V5IGlzIHVzZWQgYW5kIHRoZSBrZXkgaXMgbm90IGV4cG9zZWQgYXMgYSBncmFudGFibGUgcmVzb3VyY2UuXG4gICAqL1xuICByZWFkb25seSBrbXNLZXk/OiBrbXMuSUtleVJlZjtcblxuICAvKipcbiAgICogV2hldGhlciBwYXNzd29yZHMgcmVtYWluIGVuY3J5cHRlZCBpbiB0aGUgcmVzcG9uc2VzIG9mIGBHZXRDb25uZWN0aW9uYCBhbmRcbiAgICogYEdldENvbm5lY3Rpb25zYC4gVGhpcyB0YWtlcyBlZmZlY3QgaW5kZXBlbmRlbnRseSBmcm9tIGNhdGFsb2cgZW5jcnlwdGlvbi5cbiAgICpcbiAgICogQGRlZmF1bHQgdHJ1ZVxuICAgKi9cbiAgcmVhZG9ubHkgcmV0dXJuQ29ubmVjdGlvblBhc3N3b3JkRW5jcnlwdGVkPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBFbmNyeXB0aW9uIGNvbmZpZ3VyYXRpb24gZm9yIGEgR2x1ZSBEYXRhIENhdGFsb2cuXG4gKlxuICogRW5jcnlwdGlvbiBpcyBmaXhlZCBhdCBjb25zdHJ1Y3Rpb246IGEgY2F0YWxvZyBlaXRoZXIgY2FycmllcyBlbmNyeXB0aW9uXG4gKiBzZXR0aW5ncyBvciBpdCBkb2VzIG5vdCwgd2hpY2gga2VlcHMgaXRzIGNvbmZpZ3VyYXRpb24gZWFzeSB0byByZWFzb24gYWJvdXRcbiAqIGFuZCBhdm9pZHMgb3JkZXItZGVwZW5kZW50IG11dGF0aW9uIGFmdGVyIHRoZSBjYXRhbG9nIGlzIGNyZWF0ZWQuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2F0YWxvZ0VuY3J5cHRpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIEVuY3J5cHRpb24tYXQtcmVzdCBjb25maWd1cmF0aW9uIGZvciB0aGUgY2F0YWxvZy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBlbmNyeXB0aW9uIGF0IHJlc3QgaXMgbm90IG1hbmFnZWQgYnkgQ0RLICh0aGUgY2F0YWxvZyBkZWZhdWx0IGFwcGxpZXMpXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uQXRSZXN0PzogRGF0YUNhdGFsb2dFbmNyeXB0aW9uQXRSZXN0O1xuXG4gIC8qKlxuICAgKiBDb25uZWN0aW9uLXBhc3N3b3JkIGVuY3J5cHRpb24gY29uZmlndXJhdGlvbiBmb3IgdGhlIGNhdGFsb2cuXG4gICAqXG4gICAqIEBkZWZhdWx0IC0gY29ubmVjdGlvbi1wYXNzd29yZCBlbmNyeXB0aW9uIGlzIG5vdCBtYW5hZ2VkIGJ5IENES1xuICAgKi9cbiAgcmVhZG9ubHkgY29ubmVjdGlvblBhc3N3b3JkRW5jcnlwdGlvbj86IENvbm5lY3Rpb25QYXNzd29yZEVuY3J5cHRpb247XG59XG5cbi8qKlxuICogQSBHbHVlIERhdGEgQ2F0YWxvZywgZWl0aGVyIHRoZSBpbXBsaWNpdCBhY2NvdW50LXdpZGUgY2F0YWxvZyBvciBvbmUgY3JlYXRlZFxuICogYXMgYW4gYEFXUzo6R2x1ZTo6Q2F0YWxvZ2AgcmVzb3VyY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgSUNhdGFsb2cgZXh0ZW5kcyBJUmVzb3VyY2UsIElDYXRhbG9nUmVmIHtcbiAgLyoqXG4gICAqIFRoZSBpZCBvZiB0aGUgY2F0YWxvZyAoZm9yIHRoZSBhY2NvdW50LXdpZGUgY2F0YWxvZywgdGhlIEFXUyBhY2NvdW50IGlkKS5cbiAgICogQGF0dHJpYnV0ZVxuICAgKi9cbiAgcmVhZG9ubHkgY2F0YWxvZ0lkOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIFRoZSBBUk4gb2YgdGhlIGNhdGFsb2cuXG4gICAqIEBhdHRyaWJ1dGVcbiAgICovXG4gIHJlYWRvbmx5IGNhdGFsb2dBcm46IHN0cmluZztcblxuICAvKipcbiAgICogVGhlIGN1c3RvbWVyLW1hbmFnZWQgS01TIGtleSB1c2VkIGZvciB0aGUgY2F0YWxvZydzIGVuY3J5cHRpb24gYXQgcmVzdCwgaWZcbiAgICogb25lIHdhcyBjb25maWd1cmVkLlxuICAgKlxuICAgKiBVbmRlZmluZWQgd2hlbiBlbmNyeXB0aW9uIGlzIGRpc2FibGVkIG9yIGFuIEFXUy1tYW5hZ2VkIGtleSBpcyB1c2VkLiBHcmFudFxuICAgKiBhY2Nlc3MgdG8gaXQgdmlhIGBLZXlHcmFudHNgLCBlLmcuXG4gICAqIGBpZiAoY2F0YWxvZy5lbmNyeXB0aW9uS2V5KSB7IEtleUdyYW50cy5mcm9tS2V5KGNhdGFsb2cuZW5jcnlwdGlvbktleSkuZW5jcnlwdChncmFudGVlKTsgfWAuXG4gICAqL1xuICByZWFkb25seSBlbmNyeXB0aW9uS2V5Pzoga21zLklLZXlSZWY7XG5cbiAgLyoqXG4gICAqIFRoZSBjdXN0b21lci1tYW5hZ2VkIEtNUyBrZXkgdXNlZCB0byBlbmNyeXB0IGNvbm5lY3Rpb24gcGFzc3dvcmRzLCBpZiBvbmVcbiAgICogd2FzIGNvbmZpZ3VyZWQuXG4gICAqXG4gICAqIFVuZGVmaW5lZCB3aGVuIHBhc3N3b3JkIGVuY3J5cHRpb24gdXNlcyBhbiBBV1MtbWFuYWdlZCBrZXkgb3IgaXMgbm90XG4gICAqIGNvbmZpZ3VyZWQuIEdyYW50IGFjY2VzcyB0byBpdCB2aWEgYEtleUdyYW50c2AsIGUuZy5cbiAgICogYGlmIChjYXRhbG9nLmNvbm5lY3Rpb25QYXNzd29yZEtleSkgeyBLZXlHcmFudHMuZnJvbUtleShjYXRhbG9nLmNvbm5lY3Rpb25QYXNzd29yZEtleSkuZW5jcnlwdChncmFudGVlKTsgfWAuXG4gICAqL1xuICByZWFkb25seSBjb25uZWN0aW9uUGFzc3dvcmRLZXk/OiBrbXMuSUtleVJlZjtcbn1cblxuLyoqXG4gKiBCYXNlIGNsYXNzIGZvciBhbGwgYElDYXRhbG9nYCBpbXBsZW1lbnRhdGlvbnMuIE1hdGVyaWFsaXplcyB0aGUgc2luZ2xlXG4gKiBgQ2ZuRGF0YUNhdGFsb2dFbmNyeXB0aW9uU2V0dGluZ3NgIHJlc291cmNlICh0YXJnZXRpbmcgaXRzIG93biBgY2F0YWxvZ0lkYClcbiAqIGZyb20gdGhlIGVuY3J5cHRpb24gb3B0aW9ucyBzdXBwbGllZCBhdCBjb25zdHJ1Y3Rpb24uIEVuY3J5cHRpb24gaXMgZml4ZWQgYXRcbiAqIGNvbnN0cnVjdGlvbiwgc28gYSBjYXRhbG9nIGVpdGhlciBjYXJyaWVzIHNldHRpbmdzIG9yIGl0IGRvZXMgbm90LlxuICovXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgQ2F0YWxvZ0Jhc2UgZXh0ZW5kcyBSZXNvdXJjZSBpbXBsZW1lbnRzIElDYXRhbG9nIHtcbiAgcHVibGljIGFic3RyYWN0IHJlYWRvbmx5IGNhdGFsb2dJZDogc3RyaW5nO1xuICBwdWJsaWMgYWJzdHJhY3QgcmVhZG9ubHkgY2F0YWxvZ0Fybjogc3RyaW5nO1xuXG4gIHByaXZhdGUgX2VuY3J5cHRpb25LZXk/OiBrbXMuSUtleVJlZjtcbiAgcHJpdmF0ZSBfY29ubmVjdGlvblBhc3N3b3JkS2V5Pzoga21zLklLZXlSZWY7XG5cbiAgcHVibGljIGdldCBlbmNyeXB0aW9uS2V5KCk6IGttcy5JS2V5UmVmIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fZW5jcnlwdGlvbktleTtcbiAgfVxuXG4gIHB1YmxpYyBnZXQgY29ubmVjdGlvblBhc3N3b3JkS2V5KCk6IGttcy5JS2V5UmVmIHwgdW5kZWZpbmVkIHtcbiAgICByZXR1cm4gdGhpcy5fY29ubmVjdGlvblBhc3N3b3JkS2V5O1xuICB9XG5cbiAgcHVibGljIGdldCBjYXRhbG9nUmVmKCk6IENhdGFsb2dSZWZlcmVuY2Uge1xuICAgIHJldHVybiB7XG4gICAgICByZXNvdXJjZUFybjogdGhpcy5jYXRhbG9nQXJuLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRW1pdCB0aGUgY2F0YWxvZydzIGVuY3J5cHRpb24gc2V0dGluZ3MgZnJvbSB0aGUgb3B0aW9ucyBmaXhlZCBhdFxuICAgKiBjb25zdHJ1Y3Rpb24uIFN1YmNsYXNzZXMgY2FsbCB0aGlzIG9uY2UsIGFmdGVyIGBjYXRhbG9nSWRgL2BjYXRhbG9nQXJuYCBhcmVcbiAgICogYXNzaWduZWQuIFdoZW4gbmVpdGhlciBibG9jayBpcyBjb25maWd1cmVkLCBubyByZXNvdXJjZSBpcyBlbWl0dGVkLCBhdm9pZGluZ1xuICAgKiBhbiBlbXB0eSBzZXR0aW5ncyByZXNvdXJjZSB0aGF0IHdvdWxkIHJlc2V0IHRoZSBjYXRhbG9nIG9uIGRlcGxveS5cbiAgICovXG4gIHByb3RlY3RlZCBjb25maWd1cmVFbmNyeXB0aW9uKG9wdGlvbnM6IENhdGFsb2dFbmNyeXB0aW9uT3B0aW9ucyk6IHZvaWQge1xuICAgIGNvbnN0IGF0UmVzdCA9IG9wdGlvbnMuZW5jcnlwdGlvbkF0UmVzdDtcbiAgICBjb25zdCBwYXNzd29yZCA9IG9wdGlvbnMuY29ubmVjdGlvblBhc3N3b3JkRW5jcnlwdGlvbjtcblxuICAgIGlmICghYXRSZXN0ICYmICFwYXNzd29yZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMuX2VuY3J5cHRpb25LZXkgPSBhdFJlc3Q/Lmttc0tleTtcbiAgICB0aGlzLl9jb25uZWN0aW9uUGFzc3dvcmRLZXkgPSBwYXNzd29yZD8ua21zS2V5O1xuXG4gICAgLy8gQXV0by1ncmFudCB0aGUgc2VydmljZSByb2xlIGFjY2VzcyB0byB0aGUgY3VzdG9tZXItbWFuYWdlZCBrZXkgaXQgbmVlZHNcbiAgICAvLyB0byBlbmNyeXB0IGFuZCBkZWNyeXB0IGNhdGFsb2cgZGF0YS4gTm90aGluZyB0byBncmFudCBmb3IgYW4gQVdTLW1hbmFnZWRcbiAgICAvLyBrZXkgKHdlIGRvbid0IG93biBpdHMga2V5IHBvbGljeSkuXG4gICAgaWYgKGF0UmVzdD8uc2VydmljZVJvbGUgJiYgYXRSZXN0Lmttc0tleSkge1xuICAgICAgS2V5R3JhbnRzLmZyb21LZXkoYXRSZXN0Lmttc0tleSkuZW5jcnlwdERlY3J5cHQoYXRSZXN0LnNlcnZpY2VSb2xlKTtcbiAgICB9XG5cbiAgICAvLyBUd28gY2F0YWxvZyBpbnN0YW5jZXMgdGhhdCB0YXJnZXQgdGhlIHNhbWUgY2F0YWxvZyBpZCB3b3VsZCBlYWNoIGVtaXQgYVxuICAgIC8vIHNldHRpbmdzIHJlc291cmNlIGFuZCByYWNlIHRvIG92ZXJ3cml0ZSBvbmUgYW5vdGhlciB2aWFcbiAgICAvLyBgUHV0RGF0YUNhdGFsb2dFbmNyeXB0aW9uU2V0dGluZ3NgLiBXaXRoaW4gb25lIHN0YWNrIHRoaXMgaXMgc3VyZmFjZWQgYnlcbiAgICAvLyBDbG91ZEZvcm1hdGlvbiB0ZW1wbGF0ZSB2YWxpZGF0aW9uIChFMzAxOTogZHVwbGljYXRlIHByaW1hcnkgaWRlbnRpZmllcnMpLFxuICAgIC8vIHNvIHdlIGRvIG5vdCBkdXBsaWNhdGUgdGhhdCBjaGVjayBoZXJlLlxuICAgIG5ldyBDZm5EYXRhQ2F0YWxvZ0VuY3J5cHRpb25TZXR0aW5ncyh0aGlzLCAnRW5jcnlwdGlvblNldHRpbmdzJywge1xuICAgICAgY2F0YWxvZ0lkOiB0aGlzLmNhdGFsb2dJZCxcbiAgICAgIGRhdGFDYXRhbG9nRW5jcnlwdGlvblNldHRpbmdzOiB7XG4gICAgICAgIGVuY3J5cHRpb25BdFJlc3Q6IGF0UmVzdFxuICAgICAgICAgID8ge1xuICAgICAgICAgICAgY2F0YWxvZ0VuY3J5cHRpb25Nb2RlOiBhdFJlc3QubW9kZSxcbiAgICAgICAgICAgIHNzZUF3c0ttc0tleUlkOiBhdFJlc3Qua21zS2V5Py5rZXlSZWYua2V5QXJuLFxuICAgICAgICAgICAgY2F0YWxvZ0VuY3J5cHRpb25TZXJ2aWNlUm9sZTogYXRSZXN0LnNlcnZpY2VSb2xlPy5yb2xlQXJuLFxuICAgICAgICAgIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgICAgY29ubmVjdGlvblBhc3N3b3JkRW5jcnlwdGlvbjogcGFzc3dvcmRcbiAgICAgICAgICA/IHtcbiAgICAgICAgICAgIGttc0tleUlkOiBwYXNzd29yZC5rbXNLZXk/LmtleVJlZi5rZXlBcm4sXG4gICAgICAgICAgICByZXR1cm5Db25uZWN0aW9uUGFzc3dvcmRFbmNyeXB0ZWQ6IHBhc3N3b3JkLnJldHVybkNvbm5lY3Rpb25QYXNzd29yZEVuY3J5cHRlZCA/PyB0cnVlLFxuICAgICAgICAgIH1cbiAgICAgICAgICA6IHVuZGVmaW5lZCxcbiAgICAgIH0sXG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gKiBDb25zdHJ1Y3Rpb24gcHJvcGVydGllcyBmb3IgYSBgQ2F0YWxvZ2AuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ2F0YWxvZ1Byb3BzIGV4dGVuZHMgQ2F0YWxvZ0VuY3J5cHRpb25PcHRpb25zIHtcbiAgLyoqXG4gICAqIFRoZSBuYW1lIG9mIHRoZSBjYXRhbG9nLlxuICAgKi9cbiAgcmVhZG9ubHkgY2F0YWxvZ05hbWU6IHN0cmluZztcblxuICAvKipcbiAgICogQSBkZXNjcmlwdGlvbiBvZiB0aGUgY2F0YWxvZy5cbiAgICpcbiAgICogQGRlZmF1bHQgLSBubyBkZXNjcmlwdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG59XG5cbi8qKlxuICogVGhlIHN0YWNrLXNjb3BlZCBzaW5nbGV0b24gaWQgZm9yIHRoZSBpbXBsaWNpdCBhY2NvdW50LXdpZGUgY2F0YWxvZy5cbiAqL1xuY29uc3QgQUNDT1VOVF9DQVRBTE9HX1VJRCA9ICdAYXdzLWNkay5hd3MtZ2x1ZS1hbHBoYS5BY2NvdW50Q2F0YWxvZyc7XG5cbi8qKlxuICogQSBHbHVlIERhdGEgQ2F0YWxvZy5cbiAqXG4gKiBVc2UgYENhdGFsb2cuZm9yQWNjb3VudChzY29wZSlgIHRvIG9idGFpbiB0aGUgaW1wbGljaXQgYWNjb3VudC13aWRlIGNhdGFsb2csXG4gKiBgQ2F0YWxvZy5lbmNyeXB0QWNjb3VudChzY29wZSwgb3B0aW9ucylgIHRvIGNvbmZpZ3VyZSBpdHMgRGF0YSBDYXRhbG9nXG4gKiBlbmNyeXB0aW9uLCBvciBgbmV3IENhdGFsb2coLi4uKWAgdG8gY3JlYXRlIGFuIGBBV1M6OkdsdWU6OkNhdGFsb2dgIHJlc291cmNlLlxuICovXG5AcHJvcGVydHlJbmplY3RhYmxlXG5leHBvcnQgY2xhc3MgQ2F0YWxvZyBleHRlbmRzIENhdGFsb2dCYXNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtZ2x1ZS1hbHBoYS5DYXRhbG9nJztcblxuICAvKipcbiAgICogT2J0YWluIHRoZSBpbXBsaWNpdCwgYWNjb3VudC13aWRlIERhdGEgQ2F0YWxvZy5cbiAgICpcbiAgICogVGhlIGFjY291bnQgY2F0YWxvZyBpcyBub3QgYSBDbG91ZEZvcm1hdGlvbiByZXNvdXJjZTsgaXQgYWx3YXlzIGV4aXN0cy4gVGhpc1xuICAgKiByZXR1cm5zIGEgc3RhY2stc2NvcGVkIHNpbmdsZXRvbiwgc28gcmVwZWF0ZWQgY2FsbHMgd2l0aGluIHRoZSBzYW1lIHN0YWNrXG4gICAqIHJldHVybiB0aGUgc2FtZSBpbnN0YW5jZS5cbiAgICpcbiAgICogVGhpcyByZXR1cm5zIHRoZSBhY2NvdW50IGNhdGFsb2cgd2l0aG91dCBtYW5hZ2luZyBpdHMgZW5jcnlwdGlvbi4gVG9cbiAgICogY29uZmlndXJlIERhdGEgQ2F0YWxvZyBlbmNyeXB0aW9uIGZvciB0aGUgYWNjb3VudCwgdXNlXG4gICAqIGBDYXRhbG9nLmVuY3J5cHRBY2NvdW50KHNjb3BlLCBvcHRpb25zKWAgaW5zdGVhZCAtIGl0IG11c3QgYmUgY2FsbGVkIGJlZm9yZVxuICAgKiB0aGUgYWNjb3VudCBjYXRhbG9nIGlzIGZpcnN0IHVzZWQgaW4gdGhlIHN0YWNrLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmb3JBY2NvdW50KHNjb3BlOiBDb25zdHJ1Y3QpOiBJQ2F0YWxvZyB7XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG4gICAgY29uc3QgZXhpc3RpbmcgPSBzdGFjay5ub2RlLnRyeUZpbmRDaGlsZChBQ0NPVU5UX0NBVEFMT0dfVUlEKTtcbiAgICByZXR1cm4gKGV4aXN0aW5nIGFzIEFjY291bnRDYXRhbG9nKSA/PyBuZXcgQWNjb3VudENhdGFsb2coc3RhY2ssIEFDQ09VTlRfQ0FUQUxPR19VSUQsIHt9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb25maWd1cmUgRGF0YSBDYXRhbG9nIGVuY3J5cHRpb24gZm9yIHRoZSBpbXBsaWNpdCwgYWNjb3VudC13aWRlIGNhdGFsb2cgYW5kXG4gICAqIHJldHVybiBpdC5cbiAgICpcbiAgICogVGhlIGFjY291bnQgY2F0YWxvZydzIGVuY3J5cHRpb24gaXMgYW4gYWNjb3VudC9yZWdpb24td2lkZSBzZXR0aW5nLCBtYW5hZ2VkXG4gICAqIHRocm91Z2ggdGhlIHNpbmdsZXRvbiBgUHV0RGF0YUNhdGFsb2dFbmNyeXB0aW9uU2V0dGluZ3NgIEFQSS4gQmVjYXVzZVxuICAgKiBlbmNyeXB0aW9uIGlzIGZpeGVkIGF0IGNvbnN0cnVjdGlvbiwgaXQgbXVzdCBiZSBjb25maWd1cmVkIGJlZm9yZSB0aGVcbiAgICogYWNjb3VudCBjYXRhbG9nIGlzIGZpcnN0IHVzZWQgaW4gdGhlIHN0YWNrOiBjYWxsaW5nIHRoaXMgYWZ0ZXIgdGhlIGFjY291bnRcbiAgICogY2F0YWxvZyBoYXMgYWxyZWFkeSBiZWVuIG1hdGVyaWFsaXplZCAoZm9yIGV4YW1wbGUgYnkgYENhdGFsb2cuZm9yQWNjb3VudGAsXG4gICAqIG9yIGJ5IGEgYERhdGFiYXNlYCB0aGF0IHVzZXMgdGhlIGFjY291bnQgY2F0YWxvZykgdGhyb3dzLlxuICAgKlxuICAgKiBDb25maWd1cmUgaXQgaW4gZXhhY3RseSBvbmUgc3RhY2suIENvbmZpZ3VyaW5nIGl0IGZyb20gbXVsdGlwbGUgc3RhY2tzIGluIHRoZVxuICAgKiBzYW1lIGFjY291bnQgYW5kIHJlZ2lvbiBtYWtlcyB0aG9zZSBzdGFja3Mgb3ZlcndyaXRlIG9uZSBhbm90aGVyIGF0IGRlcGxveVxuICAgKiB0aW1lLCBhbmQgdGhlIHJlc3VsdCBpcyBvcmRlci1kZXBlbmRlbnQuIFVubGlrZSBkdXBsaWNhdGUgc2V0dGluZ3Mgd2l0aGluIGFcbiAgICogc2luZ2xlIHN0YWNrICh3aGljaCBDbG91ZEZvcm1hdGlvbiByZWplY3RzKSwgdGhpcyBjcm9zcy1zdGFjayBjb25mbGljdCBpcyBub3RcbiAgICogY2F1Z2h0IGF0IHN5bnRoZXNpcyB0aW1lLCBiZWNhdXNlIGVhY2ggc3RhY2sgc3ludGhlc2l6ZXMgdG8gaXRzIG93biB0ZW1wbGF0ZS5cbiAgICovXG4gIHB1YmxpYyBzdGF0aWMgZW5jcnlwdEFjY291bnQoc2NvcGU6IENvbnN0cnVjdCwgb3B0aW9uczogQ2F0YWxvZ0VuY3J5cHRpb25PcHRpb25zKTogSUNhdGFsb2cge1xuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2Yoc2NvcGUpO1xuICAgIGlmIChzdGFjay5ub2RlLnRyeUZpbmRDaGlsZChBQ0NPVU5UX0NBVEFMT0dfVUlEKSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgbGl0YEFjY291bnRDYXRhbG9nQWxyZWFkeUluVXNlYCxcbiAgICAgICAgJ3RoZSBhY2NvdW50IGNhdGFsb2cgaGFzIGFscmVhZHkgYmVlbiB1c2VkIGluIHRoaXMgc3RhY2s7IGNhbGwgQ2F0YWxvZy5lbmNyeXB0QWNjb3VudCgpIGJlZm9yZSBDYXRhbG9nLmZvckFjY291bnQoKSBvciBhbnkgRGF0YWJhc2UgdGhhdCB1c2VzIHRoZSBhY2NvdW50IGNhdGFsb2cnLFxuICAgICAgICBzY29wZSxcbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBuZXcgQWNjb3VudENhdGFsb2coc3RhY2ssIEFDQ09VTlRfQ0FUQUxPR19VSUQsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEltcG9ydCBhbiBleGlzdGluZyBjYXRhbG9nIGJ5IGl0cyBBUk4uXG4gICAqXG4gICAqIFRoZSBBUk4gbXVzdCBiZSBhIEdsdWUgY2F0YWxvZyBBUk4sIGVpdGhlciB0aGUgYWNjb3VudC13aWRlIGNhdGFsb2dcbiAgICogKGBhcm46YXdzOmdsdWU6PHJlZ2lvbj46PGFjY291bnQ+OmNhdGFsb2dgLCB3aG9zZSBpZCBpcyB0aGUgYWNjb3VudCkgb3IgYVxuICAgKiBuYW1lZCBjYXRhbG9nIChgYXJuOmF3czpnbHVlOjxyZWdpb24+OjxhY2NvdW50PjpjYXRhbG9nLzxuYW1lPmAsIHdob3NlIGlkIGlzXG4gICAqIHRoZSBuYW1lKS5cbiAgICpcbiAgICogVGhlIGltcG9ydGVkIGNhdGFsb2cgaXMgYSBwdXJlIGlkZW50aXR5IGhhbmRsZSBhbmQgZG9lcyBub3QgbWFuYWdlIHRoZVxuICAgKiBjYXRhbG9nJ3MgZW5jcnlwdGlvbi4gVG8gbWFuYWdlIGFuIGV4aXN0aW5nIGNhdGFsb2cncyBEYXRhIENhdGFsb2dcbiAgICogZW5jcnlwdGlvbiwgYWRkIGEgYENmbkRhdGFDYXRhbG9nRW5jcnlwdGlvblNldHRpbmdzYCByZXNvdXJjZSB0YXJnZXRpbmcgaXRzXG4gICAqIGlkLlxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQ2F0YWxvZ0FybihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBjYXRhbG9nQXJuOiBzdHJpbmcpOiBJQ2F0YWxvZyB7XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG4gICAgY29uc3QgYXJuID0gc3RhY2suc3BsaXRBcm4oY2F0YWxvZ0FybiwgQXJuRm9ybWF0LlNMQVNIX1JFU09VUkNFX05BTUUpO1xuXG4gICAgLy8gT25seSB2YWxpZGF0ZSB0aGUgc2hhcGUgb2YgY29uY3JldGUgQVJOczsgYSB0b2tlbml6ZWQgQVJOIGNhbid0IGJlXG4gICAgLy8gaW5zcGVjdGVkIGF0IHN5bnRoIHRpbWUsIHNvIHdlIHRydXN0IGl0LlxuICAgIGlmICghVG9rZW4uaXNVbnJlc29sdmVkKGNhdGFsb2dBcm4pICYmIChhcm4uc2VydmljZSAhPT0gJ2dsdWUnIHx8IGFybi5yZXNvdXJjZSAhPT0gJ2NhdGFsb2cnKSkge1xuICAgICAgdGhyb3cgbmV3IFZhbGlkYXRpb25FcnJvcihcbiAgICAgICAgbGl0YEludmFsaWRDYXRhbG9nQXJuYCxcbiAgICAgICAgYGV4cGVjdGVkIGEgR2x1ZSBjYXRhbG9nIEFSTiAoYXJuOjxwYXJ0aXRpb24+OmdsdWU6PHJlZ2lvbj46PGFjY291bnQ+OmNhdGFsb2dbLzxuYW1lPl0pLCBnb3QgJHtKU09OLnN0cmluZ2lmeShjYXRhbG9nQXJuKX1gLFxuICAgICAgICBzY29wZSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgLy8gVGhlIGFjY291bnQtd2lkZSBjYXRhbG9nJ3MgQVJOIGhhcyBubyByZXNvdXJjZSBuYW1lOyBpdHMgaWQgaXMgdGhlXG4gICAgLy8gYWNjb3VudCBmcm9tIHRoZSBBUk4gaXRzZWxmIChmYWxsaW5nIGJhY2sgdG8gdGhlIHN0YWNrIGFjY291bnQgZm9yIGFcbiAgICAvLyB0b2tlbml6ZWQgQVJOIHdpdGggbm8gcGFyc2VhYmxlIGFjY291bnQpLlxuICAgIGNvbnN0IGNhdGFsb2dJZCA9IGFybi5yZXNvdXJjZU5hbWUgPz8gYXJuLmFjY291bnQgPz8gc3RhY2suYWNjb3VudDtcbiAgICByZXR1cm4gbmV3IEltcG9ydGVkQ2F0YWxvZyhzY29wZSwgaWQsIGNhdGFsb2dJZCwgY2F0YWxvZ0Fybik7XG4gIH1cblxuICAvKipcbiAgICogSW1wb3J0IGFuIGV4aXN0aW5nIGNhdGFsb2cgYnkgaXRzIGlkLlxuICAgKlxuICAgKiBUaGUgaW1wb3J0ZWQgY2F0YWxvZyBpcyBhIHB1cmUgaWRlbnRpdHkgaGFuZGxlIGFuZCBkb2VzIG5vdCBtYW5hZ2UgdGhlXG4gICAqIGNhdGFsb2cncyBlbmNyeXB0aW9uLiBUbyBtYW5hZ2UgYW4gZXhpc3RpbmcgY2F0YWxvZydzIERhdGEgQ2F0YWxvZ1xuICAgKiBlbmNyeXB0aW9uLCBhZGQgYSBgQ2ZuRGF0YUNhdGFsb2dFbmNyeXB0aW9uU2V0dGluZ3NgIHJlc291cmNlIHRhcmdldGluZyBpdHNcbiAgICogaWQuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21DYXRhbG9nSWQoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgY2F0YWxvZ0lkOiBzdHJpbmcpOiBJQ2F0YWxvZyB7XG4gICAgY29uc3Qgc3RhY2sgPSBTdGFjay5vZihzY29wZSk7XG4gICAgY29uc3QgY2F0YWxvZ0FybiA9IHN0YWNrLmZvcm1hdEFybih7IHNlcnZpY2U6ICdnbHVlJywgcmVzb3VyY2U6ICdjYXRhbG9nJywgcmVzb3VyY2VOYW1lOiBjYXRhbG9nSWQgfSk7XG4gICAgcmV0dXJuIG5ldyBJbXBvcnRlZENhdGFsb2coc2NvcGUsIGlkLCBjYXRhbG9nSWQsIGNhdGFsb2dBcm4pO1xuICB9XG5cbiAgcHVibGljIHJlYWRvbmx5IGNhdGFsb2dJZDogc3RyaW5nO1xuICBwdWJsaWMgcmVhZG9ubHkgY2F0YWxvZ0Fybjogc3RyaW5nO1xuXG4gIHByaXZhdGUgcmVhZG9ubHkgcmVzb3VyY2U6IENmbkNhdGFsb2c7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IENhdGFsb2dQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBwcm9wcyk7XG5cbiAgICB0aGlzLnJlc291cmNlID0gbmV3IENmbkNhdGFsb2codGhpcywgJ1Jlc291cmNlJywge1xuICAgICAgbmFtZTogcHJvcHMuY2F0YWxvZ05hbWUsXG4gICAgICBkZXNjcmlwdGlvbjogcHJvcHMuZGVzY3JpcHRpb24sXG4gICAgfSk7XG5cbiAgICB0aGlzLmNhdGFsb2dJZCA9IHRoaXMucmVzb3VyY2UuYXR0ckNhdGFsb2dJZDtcbiAgICB0aGlzLmNhdGFsb2dBcm4gPSB0aGlzLnJlc291cmNlLmF0dHJSZXNvdXJjZUFybjtcblxuICAgIHRoaXMuY29uZmlndXJlRW5jcnlwdGlvbihwcm9wcyk7XG4gIH1cbn1cblxuLyoqXG4gKiBUaGUgaW1wbGljaXQsIGFjY291bnQtd2lkZSBEYXRhIENhdGFsb2cuIE5vdCBhIENsb3VkRm9ybWF0aW9uIHJlc291cmNlOyBvbmx5XG4gKiB0aGUgZW5jcnlwdGlvbiBzZXR0aW5ncyBpdCBjYXJyaWVzIGFyZSBzeW50aGVzaXplZC5cbiAqL1xuQHByb3BlcnR5SW5qZWN0YWJsZVxuY2xhc3MgQWNjb3VudENhdGFsb2cgZXh0ZW5kcyBDYXRhbG9nQmFzZSB7XG4gIC8qKiBVbmlxdWVseSBpZGVudGlmaWVzIHRoaXMgY2xhc3MuICovXG4gIHB1YmxpYyBzdGF0aWMgcmVhZG9ubHkgUFJPUEVSVFlfSU5KRUNUSU9OX0lEOiBzdHJpbmcgPSAnQGF3cy1jZGsuYXdzLWdsdWUtYWxwaGEuQWNjb3VudENhdGFsb2cnO1xuICBwdWJsaWMgcmVhZG9ubHkgY2F0YWxvZ0lkOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBjYXRhbG9nQXJuOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgZW5jcnlwdGlvbjogQ2F0YWxvZ0VuY3J5cHRpb25PcHRpb25zKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcbiAgICAvLyBFbmhhbmNlZCBDREsgQW5hbHl0aWNzIFRlbGVtZXRyeVxuICAgIGFkZENvbnN0cnVjdE1ldGFkYXRhKHRoaXMsIGVuY3J5cHRpb24pO1xuICAgIGNvbnN0IHN0YWNrID0gU3RhY2sub2YodGhpcyk7XG4gICAgdGhpcy5jYXRhbG9nSWQgPSBzdGFjay5hY2NvdW50O1xuICAgIC8vIFRoZSBhY2NvdW50IGNhdGFsb2cncyBpZCBpcyBpbXBsaWNpdGx5IHRoZSBhY2NvdW50IGlkLCBzbyB0aGUgQVJOIGhhcyBubyByZXNvdXJjZSBuYW1lLlxuICAgIHRoaXMuY2F0YWxvZ0FybiA9IHN0YWNrLmZvcm1hdEFybih7IHNlcnZpY2U6ICdnbHVlJywgcmVzb3VyY2U6ICdjYXRhbG9nJyB9KTtcblxuICAgIHRoaXMuY29uZmlndXJlRW5jcnlwdGlvbihlbmNyeXB0aW9uKTtcbiAgfVxufVxuXG4vKipcbiAqIEFuIGltcG9ydGVkIGNhdGFsb2cuIEEgcHVyZSBpZGVudGl0eSBoYW5kbGU6IGl0IGVtaXRzIG5vIHJlc291cmNlcyBhbmQgZG9lc1xuICogbm90IG1hbmFnZSB0aGUgaW1wb3J0ZWQgY2F0YWxvZydzIGVuY3J5cHRpb24uXG4gKi9cbkBwcm9wZXJ0eUluamVjdGFibGVcbmNsYXNzIEltcG9ydGVkQ2F0YWxvZyBleHRlbmRzIENhdGFsb2dCYXNlIHtcbiAgLyoqIFVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcyBjbGFzcy4gKi9cbiAgcHVibGljIHN0YXRpYyByZWFkb25seSBQUk9QRVJUWV9JTkpFQ1RJT05fSUQ6IHN0cmluZyA9ICdAYXdzLWNkay5hd3MtZ2x1ZS1hbHBoYS5JbXBvcnRlZENhdGFsb2cnO1xuICBwdWJsaWMgcmVhZG9ubHkgY2F0YWxvZ0lkOiBzdHJpbmc7XG4gIHB1YmxpYyByZWFkb25seSBjYXRhbG9nQXJuOiBzdHJpbmc7XG5cbiAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgY2F0YWxvZ0lkOiBzdHJpbmcsIGNhdGFsb2dBcm46IHN0cmluZykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCk7XG4gICAgLy8gRW5oYW5jZWQgQ0RLIEFuYWx5dGljcyBUZWxlbWV0cnlcbiAgICBhZGRDb25zdHJ1Y3RNZXRhZGF0YSh0aGlzLCBjYXRhbG9nSWQpO1xuICAgIHRoaXMuY2F0YWxvZ0lkID0gY2F0YWxvZ0lkO1xuICAgIHRoaXMuY2F0YWxvZ0FybiA9IGNhdGFsb2dBcm47XG4gIH1cbn1cbiJdfQ==
|
package/lib/code.js
CHANGED
|
@@ -34,6 +34,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
34
34
|
})();
|
|
35
35
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
36
|
exports.AssetCode = exports.S3Code = exports.Code = void 0;
|
|
37
|
+
const jsiiDeprecationWarnings = require("../.warnings.jsii.js");
|
|
37
38
|
const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti");
|
|
38
39
|
const fs = __importStar(require("fs"));
|
|
39
40
|
const s3assets = __importStar(require("aws-cdk-lib/aws-s3-assets"));
|
|
@@ -43,13 +44,22 @@ const helpers_internal_1 = require("aws-cdk-lib/core/lib/helpers-internal");
|
|
|
43
44
|
* Represents a Glue Job's Code assets (an asset can be a scripts, a jar, a python file or any other file).
|
|
44
45
|
*/
|
|
45
46
|
class Code {
|
|
46
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.Code", version: "2.
|
|
47
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.Code", version: "2.270.0-alpha.0" };
|
|
47
48
|
/**
|
|
48
49
|
* Job code as an S3 object.
|
|
49
50
|
* @param bucket The S3 bucket
|
|
50
51
|
* @param key The object key
|
|
51
52
|
*/
|
|
52
53
|
static fromBucket(bucket, key) {
|
|
54
|
+
try {
|
|
55
|
+
jsiiDeprecationWarnings.print("@aws-cdk/aws-glue-alpha.Code#fromBucket", "");
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
59
|
+
Error.captureStackTrace(error, this.fromBucket);
|
|
60
|
+
}
|
|
61
|
+
throw error;
|
|
62
|
+
}
|
|
53
63
|
return new S3Code(bucket, key);
|
|
54
64
|
}
|
|
55
65
|
/**
|
|
@@ -58,6 +68,15 @@ class Code {
|
|
|
58
68
|
* @param path code file (not a directory).
|
|
59
69
|
*/
|
|
60
70
|
static fromAsset(path, options) {
|
|
71
|
+
try {
|
|
72
|
+
jsiiDeprecationWarnings.print("@aws-cdk/aws-glue-alpha.Code#fromAsset", "");
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
76
|
+
Error.captureStackTrace(error, this.fromAsset);
|
|
77
|
+
}
|
|
78
|
+
throw error;
|
|
79
|
+
}
|
|
61
80
|
return new AssetCode(path, options);
|
|
62
81
|
}
|
|
63
82
|
}
|
|
@@ -68,13 +87,31 @@ exports.Code = Code;
|
|
|
68
87
|
class S3Code extends Code {
|
|
69
88
|
bucket;
|
|
70
89
|
key;
|
|
71
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.S3Code", version: "2.
|
|
90
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.S3Code", version: "2.270.0-alpha.0" };
|
|
72
91
|
constructor(bucket, key) {
|
|
73
92
|
super();
|
|
74
93
|
this.bucket = bucket;
|
|
75
94
|
this.key = key;
|
|
95
|
+
try {
|
|
96
|
+
jsiiDeprecationWarnings.print("@aws-cdk/aws-glue-alpha.S3Code", "");
|
|
97
|
+
}
|
|
98
|
+
catch (error) {
|
|
99
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
100
|
+
Error.captureStackTrace(error, S3Code);
|
|
101
|
+
}
|
|
102
|
+
throw error;
|
|
103
|
+
}
|
|
76
104
|
}
|
|
77
105
|
bind(_scope, grantable) {
|
|
106
|
+
try {
|
|
107
|
+
jsiiDeprecationWarnings.print("@aws-cdk/aws-glue-alpha.S3Code#bind", "");
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
111
|
+
Error.captureStackTrace(error, this.bind);
|
|
112
|
+
}
|
|
113
|
+
throw error;
|
|
114
|
+
}
|
|
78
115
|
this.bucket.grantRead(grantable, this.key);
|
|
79
116
|
return {
|
|
80
117
|
s3Location: {
|
|
@@ -91,7 +128,7 @@ exports.S3Code = S3Code;
|
|
|
91
128
|
class AssetCode extends Code {
|
|
92
129
|
path;
|
|
93
130
|
options;
|
|
94
|
-
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.AssetCode", version: "2.
|
|
131
|
+
static [JSII_RTTI_SYMBOL_1] = { fqn: "@aws-cdk/aws-glue-alpha.AssetCode", version: "2.270.0-alpha.0" };
|
|
95
132
|
asset;
|
|
96
133
|
/**
|
|
97
134
|
* @param path The path to the Code file.
|
|
@@ -100,11 +137,29 @@ class AssetCode extends Code {
|
|
|
100
137
|
super();
|
|
101
138
|
this.path = path;
|
|
102
139
|
this.options = options;
|
|
140
|
+
try {
|
|
141
|
+
jsiiDeprecationWarnings.print("@aws-cdk/aws-glue-alpha.AssetCode", "");
|
|
142
|
+
}
|
|
143
|
+
catch (error) {
|
|
144
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
145
|
+
Error.captureStackTrace(error, AssetCode);
|
|
146
|
+
}
|
|
147
|
+
throw error;
|
|
148
|
+
}
|
|
103
149
|
if (fs.lstatSync(this.path).isDirectory()) {
|
|
104
150
|
throw new cdk.UnscopedValidationError((0, helpers_internal_1.lit) `CodePathIsDirectory`, `Code path ${this.path} is a directory. Only files are supported`);
|
|
105
151
|
}
|
|
106
152
|
}
|
|
107
153
|
bind(scope, grantable) {
|
|
154
|
+
try {
|
|
155
|
+
jsiiDeprecationWarnings.print("@aws-cdk/aws-glue-alpha.AssetCode#bind", "");
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
if (process.env.JSII_DEBUG !== "1" && error.name === "DeprecationError") {
|
|
159
|
+
Error.captureStackTrace(error, this.bind);
|
|
160
|
+
}
|
|
161
|
+
throw error;
|
|
162
|
+
}
|
|
108
163
|
// If the same AssetCode is used multiple times, retain only the first instantiation.
|
|
109
164
|
if (!this.asset) {
|
|
110
165
|
this.asset = new s3assets.Asset(scope, `Code${this.hashcode(this.path)}`, {
|
|
@@ -132,4 +187,4 @@ class AssetCode extends Code {
|
|
|
132
187
|
}
|
|
133
188
|
}
|
|
134
189
|
exports.AssetCode = AssetCode;
|
|
135
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
190
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImNvZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSx1Q0FBeUI7QUFHekIsb0VBQXNEO0FBQ3RELHNEQUF3QztBQUN4Qyw0RUFBcUU7QUFHckU7O0dBRUc7QUFDSCxNQUFzQixJQUFJOztJQUN4Qjs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFVBQVUsQ0FBQyxNQUFrQixFQUFFLEdBQVc7Ozs7Ozs7Ozs7UUFDdEQsT0FBTyxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUM7S0FDaEM7SUFFRDs7OztPQUlHO0lBQ0ksTUFBTSxDQUFDLFNBQVMsQ0FBQyxJQUFZLEVBQUUsT0FBK0I7Ozs7Ozs7Ozs7UUFDbkUsT0FBTyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDckM7O0FBakJILG9CQXVCQztBQUVEOztHQUVHO0FBQ0gsTUFBYSxNQUFPLFNBQVEsSUFBSTtJQUNEO0lBQXFDOztJQUFsRSxZQUE2QixNQUFrQixFQUFtQixHQUFXO1FBQzNFLEtBQUssRUFBRSxDQUFDO1FBRG1CLFdBQU0sR0FBTixNQUFNLENBQVk7UUFBbUIsUUFBRyxHQUFILEdBQUcsQ0FBUTs7Ozs7OytDQURsRSxNQUFNOzs7O0tBR2hCO0lBRU0sSUFBSSxDQUFDLE1BQTRCLEVBQUUsU0FBeUI7Ozs7Ozs7Ozs7UUFDakUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMzQyxPQUFPO1lBQ0wsVUFBVSxFQUFFO2dCQUNWLFVBQVUsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVU7Z0JBQ2xDLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRzthQUNwQjtTQUNGLENBQUM7S0FDSDs7QUFiSCx3QkFjQztBQUVEOztHQUVHO0FBQ0gsTUFBYSxTQUFVLFNBQVEsSUFBSTtJQU1KO0lBQStCOztJQUxwRCxLQUFLLENBQWtCO0lBRS9COztPQUVHO0lBQ0gsWUFBNkIsSUFBWSxFQUFtQixVQUFpQyxFQUFHO1FBQzlGLEtBQUssRUFBRSxDQUFDO1FBRG1CLFNBQUksR0FBSixJQUFJLENBQVE7UUFBbUIsWUFBTyxHQUFQLE9BQU8sQ0FBNkI7Ozs7OzsrQ0FOckYsU0FBUzs7OztRQVNsQixJQUFJLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFdBQVcsRUFBRSxFQUFFLENBQUM7WUFDMUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFBLHNCQUFHLEVBQUEscUJBQXFCLEVBQUUsYUFBYSxJQUFJLENBQUMsSUFBSSwyQ0FBMkMsQ0FBQyxDQUFDO1FBQ3JJLENBQUM7S0FDRjtJQUVNLElBQUksQ0FBQyxLQUEyQixFQUFFLFNBQXlCOzs7Ozs7Ozs7O1FBQ2hFLHFGQUFxRjtRQUNyRixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxRQUFRLENBQUMsS0FBSyxDQUFDLEtBQUssRUFBRSxPQUFPLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUU7Z0JBQ3hFLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSTtnQkFDZixHQUFHLElBQUksQ0FBQyxPQUFPO2FBQ2hCLENBQUMsQ0FBQztRQUNMLENBQUM7YUFBTSxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzVELE1BQU0sSUFBSSxHQUFHLENBQUMsdUJBQXVCLENBQUMsSUFBQSxzQkFBRyxFQUFBLGlDQUFpQyxFQUFFLG1EQUFtRCxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxLQUFLO2dCQUNwSyw2Q0FBNkMsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoQyxPQUFPO1lBQ0wsVUFBVSxFQUFFO2dCQUNWLFVBQVUsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVk7Z0JBQ25DLFNBQVMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVc7YUFDbEM7U0FDRixDQUFDO0tBQ0g7SUFFRDs7T0FFRztJQUNLLFFBQVEsQ0FBQyxDQUFTO1FBQ3hCLE9BQU8sSUFBQSwwQkFBTyxFQUFDLENBQUMsQ0FBQyxDQUFDO0tBQ25COztBQXZDSCw4QkF3Q0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgKiBhcyBmcyBmcm9tICdmcyc7XG5pbXBvcnQgdHlwZSAqIGFzIGlhbSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB0eXBlICogYXMgczMgZnJvbSAnYXdzLWNkay1saWIvYXdzLXMzJztcbmltcG9ydCAqIGFzIHMzYXNzZXRzIGZyb20gJ2F3cy1jZGstbGliL2F3cy1zMy1hc3NldHMnO1xuaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliL2NvcmUnO1xuaW1wb3J0IHsgbWQ1aGFzaCwgbGl0IH0gZnJvbSAnYXdzLWNkay1saWIvY29yZS9saWIvaGVscGVycy1pbnRlcm5hbCc7XG5pbXBvcnQgdHlwZSAqIGFzIGNvbnN0cnVjdHMgZnJvbSAnY29uc3RydWN0cyc7XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIEdsdWUgSm9iJ3MgQ29kZSBhc3NldHMgKGFuIGFzc2V0IGNhbiBiZSBhIHNjcmlwdHMsIGEgamFyLCBhIHB5dGhvbiBmaWxlIG9yIGFueSBvdGhlciBmaWxlKS5cbiAqL1xuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvZGUge1xuICAvKipcbiAgICogSm9iIGNvZGUgYXMgYW4gUzMgb2JqZWN0LlxuICAgKiBAcGFyYW0gYnVja2V0IFRoZSBTMyBidWNrZXRcbiAgICogQHBhcmFtIGtleSBUaGUgb2JqZWN0IGtleVxuICAgKi9cbiAgcHVibGljIHN0YXRpYyBmcm9tQnVja2V0KGJ1Y2tldDogczMuSUJ1Y2tldCwga2V5OiBzdHJpbmcpOiBTM0NvZGUge1xuICAgIHJldHVybiBuZXcgUzNDb2RlKGJ1Y2tldCwga2V5KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBKb2IgY29kZSBmcm9tIGEgbG9jYWwgZGlzayBwYXRoLlxuICAgKlxuICAgKiBAcGFyYW0gcGF0aCBjb2RlIGZpbGUgKG5vdCBhIGRpcmVjdG9yeSkuXG4gICAqL1xuICBwdWJsaWMgc3RhdGljIGZyb21Bc3NldChwYXRoOiBzdHJpbmcsIG9wdGlvbnM/OiBzM2Fzc2V0cy5Bc3NldE9wdGlvbnMpOiBBc3NldENvZGUge1xuICAgIHJldHVybiBuZXcgQXNzZXRDb2RlKHBhdGgsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIENhbGxlZCB3aGVuIHRoZSBKb2IgaXMgaW5pdGlhbGl6ZWQgdG8gYWxsb3cgdGhpcyBvYmplY3QgdG8gYmluZC5cbiAgICovXG4gIHB1YmxpYyBhYnN0cmFjdCBiaW5kKHNjb3BlOiBjb25zdHJ1Y3RzLkNvbnN0cnVjdCwgZ3JhbnRhYmxlOiBpYW0uSUdyYW50YWJsZSk6IENvZGVDb25maWc7XG59XG5cbi8qKlxuICogR2x1ZSBqb2IgQ29kZSBmcm9tIGFuIFMzIGJ1Y2tldC5cbiAqL1xuZXhwb3J0IGNsYXNzIFMzQ29kZSBleHRlbmRzIENvZGUge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IGJ1Y2tldDogczMuSUJ1Y2tldCwgcHJpdmF0ZSByZWFkb25seSBrZXk6IHN0cmluZykge1xuICAgIHN1cGVyKCk7XG4gIH1cblxuICBwdWJsaWMgYmluZChfc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LCBncmFudGFibGU6IGlhbS5JR3JhbnRhYmxlKTogQ29kZUNvbmZpZyB7XG4gICAgdGhpcy5idWNrZXQuZ3JhbnRSZWFkKGdyYW50YWJsZSwgdGhpcy5rZXkpO1xuICAgIHJldHVybiB7XG4gICAgICBzM0xvY2F0aW9uOiB7XG4gICAgICAgIGJ1Y2tldE5hbWU6IHRoaXMuYnVja2V0LmJ1Y2tldE5hbWUsXG4gICAgICAgIG9iamVjdEtleTogdGhpcy5rZXksXG4gICAgICB9LFxuICAgIH07XG4gIH1cbn1cblxuLyoqXG4gKiBKb2IgQ29kZSBmcm9tIGEgbG9jYWwgZmlsZS5cbiAqL1xuZXhwb3J0IGNsYXNzIEFzc2V0Q29kZSBleHRlbmRzIENvZGUge1xuICBwcml2YXRlIGFzc2V0PzogczNhc3NldHMuQXNzZXQ7XG5cbiAgLyoqXG4gICAqIEBwYXJhbSBwYXRoIFRoZSBwYXRoIHRvIHRoZSBDb2RlIGZpbGUuXG4gICAqL1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHJlYWRvbmx5IHBhdGg6IHN0cmluZywgcHJpdmF0ZSByZWFkb25seSBvcHRpb25zOiBzM2Fzc2V0cy5Bc3NldE9wdGlvbnMgPSB7IH0pIHtcbiAgICBzdXBlcigpO1xuXG4gICAgaWYgKGZzLmxzdGF0U3luYyh0aGlzLnBhdGgpLmlzRGlyZWN0b3J5KCkpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YENvZGVQYXRoSXNEaXJlY3RvcnlgLCBgQ29kZSBwYXRoICR7dGhpcy5wYXRofSBpcyBhIGRpcmVjdG9yeS4gT25seSBmaWxlcyBhcmUgc3VwcG9ydGVkYCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGJpbmQoc2NvcGU6IGNvbnN0cnVjdHMuQ29uc3RydWN0LCBncmFudGFibGU6IGlhbS5JR3JhbnRhYmxlKTogQ29kZUNvbmZpZyB7XG4gICAgLy8gSWYgdGhlIHNhbWUgQXNzZXRDb2RlIGlzIHVzZWQgbXVsdGlwbGUgdGltZXMsIHJldGFpbiBvbmx5IHRoZSBmaXJzdCBpbnN0YW50aWF0aW9uLlxuICAgIGlmICghdGhpcy5hc3NldCkge1xuICAgICAgdGhpcy5hc3NldCA9IG5ldyBzM2Fzc2V0cy5Bc3NldChzY29wZSwgYENvZGUke3RoaXMuaGFzaGNvZGUodGhpcy5wYXRoKX1gLCB7XG4gICAgICAgIHBhdGg6IHRoaXMucGF0aCxcbiAgICAgICAgLi4udGhpcy5vcHRpb25zLFxuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChjZGsuU3RhY2sub2YodGhpcy5hc3NldCkgIT09IGNkay5TdGFjay5vZihzY29wZSkpIHtcbiAgICAgIHRocm93IG5ldyBjZGsuVW5zY29wZWRWYWxpZGF0aW9uRXJyb3IobGl0YEFzc2V0QWxyZWFkeUFzc29jaWF0ZWRXaXRoU3RhY2tgLCBgQXNzZXQgaXMgYWxyZWFkeSBhc3NvY2lhdGVkIHdpdGggYW5vdGhlciBzdGFjayAnJHtjZGsuU3RhY2sub2YodGhpcy5hc3NldCkuc3RhY2tOYW1lfScuIGAgK1xuICAgICAgICAnQ3JlYXRlIGEgbmV3IENvZGUgaW5zdGFuY2UgZm9yIGV2ZXJ5IHN0YWNrLicpO1xuICAgIH1cbiAgICB0aGlzLmFzc2V0LmdyYW50UmVhZChncmFudGFibGUpO1xuICAgIHJldHVybiB7XG4gICAgICBzM0xvY2F0aW9uOiB7XG4gICAgICAgIGJ1Y2tldE5hbWU6IHRoaXMuYXNzZXQuczNCdWNrZXROYW1lLFxuICAgICAgICBvYmplY3RLZXk6IHRoaXMuYXNzZXQuczNPYmplY3RLZXksXG4gICAgICB9LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogSGFzaCBhIHN0cmluZ1xuICAgKi9cbiAgcHJpdmF0ZSBoYXNoY29kZShzOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBtZDVoYXNoKHMpO1xuICB9XG59XG5cbi8qKlxuICogUmVzdWx0IG9mIGJpbmRpbmcgYENvZGVgIGludG8gYSBgSm9iYC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBDb2RlQ29uZmlnIHtcbiAgLyoqXG4gICAqIFRoZSBsb2NhdGlvbiBvZiB0aGUgY29kZSBpbiBTMy5cbiAgICovXG4gIHJlYWRvbmx5IHMzTG9jYXRpb246IHMzLkxvY2F0aW9uO1xufVxuIl19
|