tnx-shared 5.2.11 → 5.2.12
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/bundles/tnx-shared.umd.js +464 -163
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/classes/base/component-base.d.ts +3 -0
- package/classes/base/component-base.d.ts.map +1 -1
- package/classes/base/list-base.d.ts +2 -0
- package/classes/base/list-base.d.ts.map +1 -1
- package/classes/environment-schema.d.ts +11 -4
- package/classes/environment-schema.d.ts.map +1 -1
- package/classes/form-schema.d.ts +4 -0
- package/classes/form-schema.d.ts.map +1 -1
- package/components/common-app-component/app-topbar-v1/app-topbar-v1.component.d.ts +4 -2
- package/components/common-app-component/app-topbar-v1/app-topbar-v1.component.d.ts.map +1 -1
- package/components/common-app-component/default-setting-form/default-data-settings.component.d.ts +20 -0
- package/components/common-app-component/default-setting-form/default-data-settings.component.d.ts.map +1 -0
- package/components/common-app-component/default-setting-form/default-data-settings.component.ngfactory.d.ts.map +1 -0
- package/components/common-app-component/default-setting-form/default-data-settings.component.scss.shim.ngstyle.d.ts.map +1 -0
- package/components/crud/advance-search/advance-search.component.d.ts +2 -2
- package/components/crud/advance-search/advance-search.component.d.ts.map +1 -1
- package/components/crud/crud-form/crud-form.component.d.ts.map +1 -1
- package/components/datetime-picker/datetime-picker.component.d.ts.map +1 -1
- package/components/workflow/services/workflow-settings.service.d.ts +2 -0
- package/components/workflow/services/workflow-settings.service.d.ts.map +1 -1
- package/esm2015/classes/base/component-base.js +26 -10
- package/esm2015/classes/base/list-base.js +31 -2
- package/esm2015/classes/environment-schema.js +4 -4
- package/esm2015/classes/form-schema.js +2 -1
- package/esm2015/components/common-app-component/app-root-menu/app-root-menu.component.js +2 -2
- package/esm2015/components/common-app-component/app-topbar-v1/app-topbar-v1.component.js +24 -18
- package/esm2015/components/common-app-component/default-setting-form/default-data-settings.component.js +209 -0
- package/esm2015/components/crud/advance-search/advance-search.component.js +24 -21
- package/esm2015/components/crud/crud-form/crud-form.component.js +4 -2
- package/esm2015/components/datetime-picker/datetime-picker.component.js +7 -4
- package/esm2015/components/workflow/services/workflow-settings.service.js +6 -1
- package/esm2015/services/environment.service.js +19 -6
- package/esm2015/tnx-shared.js +89 -88
- package/esm2015/tnx-shared.module.js +3 -1
- package/fesm2015/tnx-shared.js +341 -61
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +2 -2
- package/services/environment.service.d.ts +17 -4
- package/services/environment.service.d.ts.map +1 -1
- package/tnx-shared.d.ts +88 -87
- package/tnx-shared.d.ts.map +1 -1
- package/tnx-shared.metadata.json +1 -1
- package/tnx-shared.module.d.ts +2 -1
- package/tnx-shared.module.d.ts.map +1 -1
- package/tnx-shared.module.ngfactory.d.ts.map +1 -1
|
@@ -122,8 +122,9 @@ export class ComponentBase {
|
|
|
122
122
|
callBackError(res);
|
|
123
123
|
return;
|
|
124
124
|
}
|
|
125
|
-
if (message)
|
|
125
|
+
if (message) {
|
|
126
126
|
this._injector.get(NotifierService).showSuccess(message);
|
|
127
|
+
}
|
|
127
128
|
if (callBack)
|
|
128
129
|
callBack(res);
|
|
129
130
|
}
|
|
@@ -255,8 +256,9 @@ export class ComponentBase {
|
|
|
255
256
|
_getValueFromDatasource(itemSelected, isMultiple, funcGetLabel) {
|
|
256
257
|
let value = null;
|
|
257
258
|
if (isMultiple) {
|
|
258
|
-
if (itemSelected && itemSelected.length > 0)
|
|
259
|
+
if (itemSelected && itemSelected.length > 0) {
|
|
259
260
|
value = itemSelected.map(q => funcGetLabel(q.value)).join(', ');
|
|
261
|
+
}
|
|
260
262
|
}
|
|
261
263
|
else {
|
|
262
264
|
if (itemSelected) {
|
|
@@ -320,17 +322,20 @@ export class ComponentBase {
|
|
|
320
322
|
const itemSelected = yield schema._component.controlPicker._component.getDataSelectedValue(value);
|
|
321
323
|
const tmpSchema = schema;
|
|
322
324
|
let funcGetLabel = tmpSchema.funcGetLabel;
|
|
323
|
-
if (!funcGetLabel)
|
|
325
|
+
if (!funcGetLabel) {
|
|
324
326
|
funcGetLabel = item => {
|
|
325
327
|
return item.value[tmpSchema.displayField];
|
|
326
328
|
};
|
|
329
|
+
}
|
|
327
330
|
value = this._getValueFromDatasource(itemSelected, schema.multiple, item => item.ten);
|
|
328
331
|
if (schema.multiple) {
|
|
329
332
|
if (itemSelected.length > 0) {
|
|
330
|
-
if (schema.funcGetLabel)
|
|
333
|
+
if (schema.funcGetLabel) {
|
|
331
334
|
value = itemSelected.map(q => tmpSchema.funcGetLabel(q.value)).join(', ');
|
|
332
|
-
|
|
335
|
+
}
|
|
336
|
+
else {
|
|
333
337
|
value = itemSelected.map(q => q.value[tmpSchema.displayField]).join(', ');
|
|
338
|
+
}
|
|
334
339
|
}
|
|
335
340
|
else {
|
|
336
341
|
value = null;
|
|
@@ -338,10 +343,12 @@ export class ComponentBase {
|
|
|
338
343
|
}
|
|
339
344
|
else {
|
|
340
345
|
if (itemSelected) {
|
|
341
|
-
if (schema.funcGetLabel)
|
|
346
|
+
if (schema.funcGetLabel) {
|
|
342
347
|
value = schema.funcGetLabel(itemSelected.value);
|
|
343
|
-
|
|
348
|
+
}
|
|
349
|
+
else {
|
|
344
350
|
value = itemSelected.value[schema.displayField];
|
|
351
|
+
}
|
|
345
352
|
}
|
|
346
353
|
}
|
|
347
354
|
}
|
|
@@ -349,7 +356,7 @@ export class ComponentBase {
|
|
|
349
356
|
const itemSelected = yield schema._component.getDataSelectedValue(value);
|
|
350
357
|
const tmpSchema = schema;
|
|
351
358
|
let funcGetLabel = tmpSchema.funcGetLabel;
|
|
352
|
-
if (!funcGetLabel)
|
|
359
|
+
if (!funcGetLabel) {
|
|
353
360
|
funcGetLabel = item => {
|
|
354
361
|
if (item) {
|
|
355
362
|
return item[tmpSchema.displayField];
|
|
@@ -358,6 +365,7 @@ export class ComponentBase {
|
|
|
358
365
|
return null;
|
|
359
366
|
}
|
|
360
367
|
};
|
|
368
|
+
}
|
|
361
369
|
value = this._getValueFromDatasource(itemSelected, schema.multiple, funcGetLabel);
|
|
362
370
|
}
|
|
363
371
|
else if (schema instanceof CoCauToChucControlSchema) {
|
|
@@ -374,10 +382,11 @@ export class ComponentBase {
|
|
|
374
382
|
else {
|
|
375
383
|
dataSource = tmpSchema._component.dropdown._options;
|
|
376
384
|
itemSelected = dataSource.find(q => q.value == value);
|
|
377
|
-
if (itemSelected)
|
|
385
|
+
if (itemSelected) {
|
|
378
386
|
itemSelected = {
|
|
379
387
|
value: itemSelected
|
|
380
388
|
};
|
|
389
|
+
}
|
|
381
390
|
}
|
|
382
391
|
value = this._getValueFromDatasource(itemSelected, schema.multiple, funcGetLabel);
|
|
383
392
|
}
|
|
@@ -500,6 +509,13 @@ export class ComponentBase {
|
|
|
500
509
|
return '';
|
|
501
510
|
});
|
|
502
511
|
}
|
|
512
|
+
getDefaultSettings() {
|
|
513
|
+
const localData = localStorage.getItem(ComCtxConstants.LOCALSTORAGE_KEY.DEFAULT_DATA);
|
|
514
|
+
if (localData != null && localData != '') {
|
|
515
|
+
return JSON.parse(localData);
|
|
516
|
+
}
|
|
517
|
+
return {};
|
|
518
|
+
}
|
|
503
519
|
}
|
|
504
520
|
ComponentBase.decorators = [
|
|
505
521
|
{ type: Directive }
|
|
@@ -512,4 +528,4 @@ ComponentBase.propDecorators = {
|
|
|
512
528
|
parentModel: [{ type: Input }],
|
|
513
529
|
parentContext: [{ type: Input }]
|
|
514
530
|
};
|
|
515
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LWJhc2UuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkL3NyYy9saWIvIiwic291cmNlcyI6WyJjbGFzc2VzL2Jhc2UvY29tcG9uZW50LWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDMUYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMkVBQTJFLENBQUM7QUFDdkgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHM0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUs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QUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7Z0JBQ3hCLE1BQU0sRUFBRSxPQUFPLENBQUMsRUFBRTtnQkFDbEIsVUFBVTtnQkFDVixLQUFLLEVBQUUsa0JBQWtCLENBQUMsS0FBSyxDQUFDO2FBQ25DLENBQUMsQ0FBQztZQUNILE1BQU0sZUFBZSxHQUFHLENBQUMsTUFBTSxPQUFPLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNsRixJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUNsQixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQyxXQUFXLENBQUMsb0NBQW9DLENBQUMsQ0FBQzthQUN6RjtZQUNELElBQUksSUFBSSxHQUFHLEVBQUUsQ0FBQztZQUNkLFVBQVUsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFO2dCQUN0QyxJQUFJLElBQUksR0FBRyxlQUFlLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7WUFDcEQsQ0FBQyxDQUFDLENBQUM7WUFDSCxPQUFPLElBQUksQ0FBQztRQUNoQixDQUFDO0tBQUE7SUFDSyxZQUFZLENBQUMsT0FBWTs7WUFDM0IsT0FBTyxFQUFFLENBQUM7UUFDZCxDQUFDO0tBQUE7OztZQXRnQkosU0FBUzs7O1lBOUJVLFFBQVE7Ozs7MEJBZ0N2QixLQUFLOzRCQUNMLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBEaXJlY3RpdmUsIEluamVjdG9yLCBJbnB1dCwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBY3RpdmF0ZWRSb3V0ZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvYXBwbGljYXRpb24tY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IENvbXBvbmVudENvbnRleHRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vYXBwLWNvbnRleHQvY29tcG9uZW50LWNvbnRleHQuc2VydmljZSc7XG5pbXBvcnQgeyBNb2RlbFNoYXJlTGlua0J5UGVybWlzc2lvbiB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvc2hhcmUtbGluay1ieS1wZXJtaXNzaW9uL21vZGVscy9zaGFyZS1saW5rLWJ5LXBlcm1pc3Npb24nO1xuaW1wb3J0IHsgVmFsaWRhdGlvbiB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRhbnRzJztcbmltcG9ydCB7IENvbUN0eENvbnN0YW50cyB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xuaW1wb3J0IHsgUGVybWlzc2lvbkJhc2UgfSBmcm9tICcuLi8uLi9lbnVtcy9jb21tb24nO1xuaW1wb3J0IHsgRXhwb3J0SXRlbSB9IGZyb20gJy4uLy4uL21vZGVscy9leHBvcnQtaXRlbSc7XG5pbXBvcnQgeyBGaWx0ZXIsIFNvcnQsIFN0cmluZ0NvbXBhcmVPcHRpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JpZC1pbmZvJztcbmltcG9ydCB7IFJlc3BvbnNlUmVzdWx0IH0gZnJvbSAnLi4vLi4vbW9kZWxzL3Jlc3BvbnNlLXJlc3VsdCc7XG5pbXBvcnQgeyBCYXNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2Jhc2Uuc2VydmljZSc7XG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29tbW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ3J1ZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jcnVkLnNlcnZpY2UnO1xuaW1wb3J0IHsgTm90aWZpZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbm90aWZpZXIuc2VydmljZSc7XG5pbXBvcnQgeyBUZW1wbGF0ZVY0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RlbXBsYXRlLXY0LnNlcnZpY2UnO1xuaW1wb3J0IHsgVGVtcGxhdGVJbnN0YW5jZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90ZW1wbGF0ZWluc3RhbmNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgZ2V0U3RyaW5nRGF0ZVZOIH0gZnJvbSAnLi4vLi4vdXRpbHMvZGF0ZSc7XG5pbXBvcnQgeyBFeHBvcnRJdGVtVHlwZSB9IGZyb20gJy4uL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICAgIEFkZHJlc3NDb250cm9sU2NoZW1hLCBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hLFxuICAgIENoZWNrYm94Q29udHJvbFNjaGVtYSwgQ29DYXVUb0NodWNDb250cm9sU2NoZW1hLCBDb0NhdVRvQ2h1Y1BpY2tlckNvbnRyb2xTY2hlbWEsXG4gICAgQ3J1ZExpc3RTZXR0aW5nLFxuICAgIERhdGVUaW1lQ29udHJvbFNjaGVtYSwgRHJvcGRvd25Db250cm9sU2NoZW1hLCBGaWxlTWFuYWdlckNvbnRyb2xTY2hlbWEsIEZpbGVVcGxvYWRDb250cm9sU2NoZW1hLFxuICAgIEZvcm1TY2hlbWFCYXNlLCBNb2RlbFNjaGVtYSwgT3BlcmF0b3IsIFN3aXRjaENvbnRyb2xTY2hlbWEsIFRhYmxlU2NoZW1hXG59IGZyb20gJy4uL2Zvcm0tc2NoZW1hJztcblxuZXhwb3J0IGNvbnN0IEVYUE9SVF9WRVJTSU9OX1Y0ID0gNDtcbmV4cG9ydCBjb25zdCBFWFBPUlRfVkVSU0lPTl9WNSA9IDU7XG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBDb21wb25lbnRCYXNlIGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgICBASW5wdXQoKSBwYXJlbnRNb2RlbDogYW55O1xuICAgIEBJbnB1dCgpIHNldCBwYXJlbnRDb250ZXh0KHZhbHVlOiBDb21wb25lbnRDb250ZXh0U2VydmljZSkge1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dC5wYXJlbnQgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH07XG4gICAgZ2V0IHBhcmVudENvbnRleHQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRleHQucGFyZW50O1xuICAgIH1cblxuICAgIG1vZGVsOiBhbnk7XG4gICAgbW9kZWxTY2hlbWE6IE1vZGVsU2NoZW1hW10gPSBbXTtcbiAgICBjb250ZXh0OiBDb21wb25lbnRDb250ZXh0U2VydmljZTtcbiAgICByb290TW9kZWw6IGFueTtcbiAgICByb290Q29udGV4dDogQ29tcG9uZW50Q29udGV4dFNlcnZpY2U7XG4gICAgZ3VpZEVtcHR5ID0gJzAwMDAwMDAwLTAwMDAtMDAwMC0wMDAwLTAwMDAwMDAwMDAwMCc7XG5cbiAgICBwdWJsaWMgX3Vuc3Vic2NyaWJlQWxsOiBTdWJqZWN0PGFueT47XG4gICAgcHJvdGVjdGVkIF9jb21tb25TZXJ2aWNlOiBDb21tb25TZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfYXBwQ29udGV4dDogQXBwbGljYXRpb25Db250ZXh0U2VydmljZTtcbiAgICBwcm90ZWN0ZWQgX2NvbXBvbmVudENvbnRleHQ6IENvbXBvbmVudENvbnRleHRTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfaW5qZWN0b3I6IEluamVjdG9yO1xuICAgIHByb3RlY3RlZCBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlO1xuICAgIHByb3RlY3RlZCBfY3J1ZFNlcnZpY2U6IENydWRTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfZGF0ZVBpcGU6IERhdGVQaXBlO1xuXG4gICAgY29uc3RydWN0b3IoaW5qZWN0b3I6IEluamVjdG9yLCBjb21wb25lbnROYW1lPzogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWxsID0gbmV3IFN1YmplY3QoKTtcbiAgICAgICAgdGhpcy5faW5qZWN0b3IgPSBpbmplY3RvcjtcbiAgICAgICAgdGhpcy5fYXBwQ29udGV4dCA9IGluamVjdG9yLmdldChBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dCA9IGluamVjdG9yLmdldChDb21wb25lbnRDb250ZXh0U2VydmljZSk7XG4gICAgICAgIHRoaXMuX2FjdGl2YXRlZFJvdXRlID0gaW5qZWN0b3IuZ2V0KEFjdGl2YXRlZFJvdXRlKTtcbiAgICAgICAgdGhpcy5fY3J1ZFNlcnZpY2UgPSBpbmplY3Rvci5nZXQoQ3J1ZFNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlID0gaW5qZWN0b3IuZ2V0KENvbW1vblNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9kYXRlUGlwZSA9IGluamVjdG9yLmdldChEYXRlUGlwZSk7XG5cbiAgICAgICAgdGhpcy5fY29tcG9uZW50Q29udGV4dCA9IHRoaXMuX2FwcENvbnRleHQuYWRkQ29tcG9uZW50Q29udGV4dCh0aGlzLl9jb21wb25lbnRDb250ZXh0LCB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSwgdGhpcy5nZXRDb21wb25lbnRJZCgpKTtcbiAgICAgICAgaWYgKHRoaXMuX2NvbXBvbmVudENvbnRleHQpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwgPSB0aGlzLl9jb21wb25lbnRDb250ZXh0LmRhdGE7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQgPSB0aGlzLl9jb21wb25lbnRDb250ZXh0O1xuICAgICAgICAgICAgdGhpcy5yb290Q29udGV4dCA9IHRoaXMuX2NvbXBvbmVudENvbnRleHQucm9vdDtcblxuICAgICAgICAgICAgdGhpcy5yb290TW9kZWwgPSB0aGlzLnJvb3RDb250ZXh0LmRhdGE7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLmNvbXBvbmVudFN1YnMgPSBbXTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICogT24gZGVzdHJveVxuICAgICovXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIC8vIFVuc3Vic2NyaWJlIGZyb20gYWxsIHN1YnNjcmlwdGlvbnNcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVBbGwubmV4dCgpO1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5jb21wbGV0ZSgpO1xuXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmNvbXBvbmVudFN1YnMpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qgc3ViIG9mIHRoaXMubW9kZWwuY29tcG9uZW50U3Vicykge1xuICAgICAgICAgICAgICAgIGlmIChzdWIpXG4gICAgICAgICAgICAgICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHRoaXMuY29udGV4dCkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LmRlc3Ryb3lDb250ZXh0KCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRDb21wb25lbnRJZCgpOiBzdHJpbmcge1xuICAgICAgICByZXR1cm4gdGhpcy5fY29tbW9uU2VydmljZS5yYW5kb21TdHJpbmcoKTtcbiAgICB9XG5cbiAgICBzdWJzY3JpYmVSb290KG5hbWU6IHN0cmluZywgY2FsbEJhY2s6IGFueSkge1xuICAgICAgICB0aGlzLm1vZGVsLmNvbXBvbmVudFN1YnMucHVzaCh0aGlzLnJvb3RDb250ZXh0LnN1YnNjcmliZShuYW1lLCBjYWxsQmFjaykpO1xuICAgIH1cblxuICAgIHN1YnNjcmliZShuYW1lOiBzdHJpbmcsIGNhbGxCYWNrOiBhbnkpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5jb21wb25lbnRTdWJzLnB1c2godGhpcy5jb250ZXh0LnN1YnNjcmliZShuYW1lLCBjYWxsQmFjaykpO1xuICAgIH1cblxuICAgIHN1YnNjcmliZU9uY2UobmFtZTogc3RyaW5nLCBjYWxsQmFjazogYW55KSB7XG4gICAgICAgIHRoaXMubW9kZWwuY29tcG9uZW50U3Vicy5wdXNoKHRoaXMuY29udGV4dC5zdWJzY3JpYmVPbmNlKG5hbWUsIGNhbGxCYWNrKSk7XG4gICAgfVxuXG4gICAgcmVwbGF5U3Vic2NyaWJlKG5hbWU6IHN0cmluZywgY2FsbEJhY2s6IGFueSkge1xuICAgICAgICB0aGlzLm1vZGVsLmNvbXBvbmVudFN1YnMucHVzaCh0aGlzLmNvbnRleHQucmVwbGF5U3Vic2NyaWJlKG5hbWUsIGNhbGxCYWNrKSk7XG4gICAgfVxuXG4gICAgdHJhY2tCeUZ1bmNEZWZhdWx0KGluZGV4LCBpdGVtKSB7XG4gICAgICAgIHJldHVybiBpbmRleDtcbiAgICB9XG5cbiAgICB0cmFja0J5RnVuY0lkKGluZGV4LCBpdGVtKSB7XG4gICAgICAgIHJldHVybiBpdGVtLmlkO1xuICAgIH1cblxuICAgIGhhbmRsZVJlc3BvbnNlKHJlczogUmVzcG9uc2VSZXN1bHQsIG1lc3NhZ2U/OiBzdHJpbmcsIGNhbGxCYWNrPzogRnVuY3Rpb24sIGNhbGxCYWNrRXJyb3I/OiBGdW5jdGlvbikge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3J1ZFNlcnZpY2UuaGFuZGxlUmVzcG9uc2UocmVzLCBtZXNzYWdlLCBjYWxsQmFjaywgY2FsbEJhY2tFcnJvcik7XG4gICAgfVxuXG4gICAgaGFuZGxlUmVzcG9uc2VXaXRoV2FpdEJveChyZXM6IFJlc3BvbnNlUmVzdWx0LCBtZXNzYWdlPzogc3RyaW5nLCBjYWxsQmFjaz86IEZ1bmN0aW9uLCBjYWxsQmFja0Vycm9yPzogRnVuY3Rpb24pIHtcbiAgICAgICAgdGhpcy5oaWRlV2FpdEJveCgpO1xuICAgICAgICBpZiAoIXJlcy5zdWNjZXNzKSB7XG4gICAgICAgICAgICBpZiAocmVzLmVycm9yID09IFZhbGlkYXRpb24uRVJSX1NZU19ERVYpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKHJlcy5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKS5zaG93V2FybmluZygnQ8OzIGzhu5dpIHjhuqN5IHJhLiBMacOqbiBo4buHIHF14bqjbiB0cuG7iyB2acOqbiDEkeG7gyBiaeG6v3QgdGjDqm0gY2hpIHRp4bq/dC4nKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmIChyZXMubWVzc2FnZSAhPSBudWxsICYmIHJlcy5tZXNzYWdlICE9ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dXYXJuaW5nKHJlcy5tZXNzYWdlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dXYXJuaW5nKHJlcy5lcnJvcik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGNhbGxCYWNrRXJyb3IpXG4gICAgICAgICAgICAgICAgY2FsbEJhY2tFcnJvcihyZXMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXNzYWdlKVxuICAgICAgICAgICAgdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkuc2hvd1N1Y2Nlc3MobWVzc2FnZSk7XG4gICAgICAgIGlmIChjYWxsQmFjaylcbiAgICAgICAgICAgIGNhbGxCYWNrKHJlcyk7XG4gICAgfVxuXG4gICAgaXNOb3ROdWxsQXJyYXkoYXJyKSB7XG4gICAgICAgIHJldHVybiBhcnIgIT0gbnVsbCAmJiBhcnIubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBmdW5jU29ydERlZmF1bHQoYSwgYikge1xuICAgICAgICBpZiAoYSA+IGIpXG4gICAgICAgICAgICByZXR1cm4gMTtcbiAgICAgICAgaWYgKGEgPT0gYilcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICByZXR1cm4gLTE7XG4gICAgfVxuXG4gICAgLy8gYWRkRXhwb3J0Sm9iKGpvYjogRXhwb3J0Sm9iKSB7XG4gICAgLy8gICAgIHRoaXMuY29udGV4dC5hZGRFeHBvcnRKb2Ioam9iKTtcbiAgICAvLyB9XG5cbiAgICBleHBvcnQoZGF0YTogRXhwb3J0SXRlbSwgdmVyc2lvbiA9IEVYUE9SVF9WRVJTSU9OX1Y0KTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zb2xlLmxvZygnZXhwb3J0IHZlcnNpb246ICcgKyB2ZXJzaW9uKTtcbiAgICAgICAgc3dpdGNoICh2ZXJzaW9uKSB7XG4gICAgICAgICAgICBjYXNlIEVYUE9SVF9WRVJTSU9OX1Y0OlxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmV4cG9ydFY0KGRhdGEpO1xuICAgICAgICAgICAgY2FzZSBFWFBPUlRfVkVSU0lPTl9WNTpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5leHBvcnRWNShkYXRhKTtcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRXhwb3J0IHZlcnNpb246ICR7dmVyc2lvbn0gaXMgbm90IHN1cHBvcnRlZCFgKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBleHBvcnRFeGNlbFY1KGRhdGE6IGFueSwgdGVtcGxhdGVDb2RlOiBzdHJpbmcsIGZpbGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHNoZWV0ID0gbmV3IEV4cG9ydEl0ZW0oe1xuICAgICAgICAgICAgdHlwZTogRXhwb3J0SXRlbVR5cGUuRXhjZWxTaGVldCxcbiAgICAgICAgICAgIHRlbXBsYXRlQ29kZSxcbiAgICAgICAgICAgIGRhdGE6IEpTT04uc3RyaW5naWZ5KGRhdGEpLFxuICAgICAgICAgICAgbmFtZTogJ1NoZWV0MSdcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgZmlsZSA9IG5ldyBFeHBvcnRJdGVtKHtcbiAgICAgICAgICAgIHR5cGU6IEV4cG9ydEl0ZW1UeXBlLkV4Y2VsRmlsZSxcbiAgICAgICAgICAgIG5hbWU6IGZpbGVOYW1lXG4gICAgICAgIH0pO1xuICAgICAgICBmaWxlLmNoaWxkcmVuID0gW3NoZWV0XTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhwb3J0KGZpbGUsIEVYUE9SVF9WRVJTSU9OX1Y1KTtcbiAgICB9XG5cbiAgICBleHBvcnRWNChkYXRhOiBFeHBvcnRJdGVtKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZVY0U2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChUZW1wbGF0ZVY0U2VydmljZSk7XG4gICAgICAgIHJldHVybiB0ZW1wbGF0ZVY0U2VydmljZS5leHBvcnROb3JtYWwoZGF0YSk7XG4gICAgfVxuXG4gICAgZXhwb3J0VjUoZGF0YTogRXhwb3J0SXRlbSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgdGVtcGxhdGVJbnN0YW5jZVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoVGVtcGxhdGVJbnN0YW5jZVNlcnZpY2UpO1xuICAgICAgICByZXR1cm4gdGVtcGxhdGVJbnN0YW5jZVNlcnZpY2UuZXhwb3J0Tm9ybWFsKGRhdGEpO1xuICAgIH1cblxuICAgIG5ld0ZpbHRlckNvbnRhaW5lcihsb2dpYzogJ2FuZCcgfCAnb3InLCAuLi5maWx0ZXJzOiBGaWx0ZXJbXSkge1xuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7XG4gICAgICAgICAgICBsb2dpYyxcbiAgICAgICAgICAgIGZpbHRlcnM6IFsuLi5maWx0ZXJzXVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZXdGaWx0ZXIoZmllbGQ6IHN0cmluZywgb3BlcmF0b3I6IE9wZXJhdG9yLCB2YWx1ZTogYW55LCB2YWx1ZUlzRmllbGQ6IGJvb2xlYW4gPSBmYWxzZSwgc3RyaW5nQ29tcGFyZU9wdGlvbjogU3RyaW5nQ29tcGFyZU9wdGlvbiA9IFN0cmluZ0NvbXBhcmVPcHRpb24uTm9ybWFsKSB7XG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgIGZpZWxkLCBvcGVyYXRvcixcbiAgICAgICAgICAgIHZhbHVlOiBKU09OLnN0cmluZ2lmeSh2YWx1ZSksXG4gICAgICAgICAgICB2YWx1ZUlzRmllbGQsXG4gICAgICAgICAgICBzdHJpbmdDb21wYXJlT3B0aW9uLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZXdGaWx0ZXJWNChmaWVsZDogc3RyaW5nLCBvcGVyYXRvcjogT3BlcmF0b3IsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgZmllbGQsIG9wZXJhdG9yLFxuICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmV3QmluZGluZ0ZpbHRlcihjb2x1bW46IHN0cmluZywgb3BlcmF0b3I6IE9wZXJhdG9yLCBzb3VyY2VGaWVsZDogc3RyaW5nLCBzdWJGaWVsZD86IHN0cmluZykge1xuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7XG4gICAgICAgICAgICBmaWVsZDogY29sdW1uLFxuICAgICAgICAgICAgb3BlcmF0b3IsXG4gICAgICAgICAgICBzb3VyY2VGaWVsZCxcbiAgICAgICAgICAgIHN1YkZpZWxkXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5ld1NvcnQoZmllbGQ6IHN0cmluZywgZGlyOiAxIHwgLTEgPSAxKSB7XG4gICAgICAgIHJldHVybiBuZXcgU29ydCh7IGZpZWxkLCBkaXIgfSk7XG4gICAgfVxuXG4gICAgc2hvd1dhaXRCb3gobWVzc2FnZT86IHN0cmluZykge1xuICAgICAgICB0aGlzLnJvb3RDb250ZXh0LmZpcmVFdmVudChDb21DdHhDb25zdGFudHMuUk9PVC5TSE9XX1dBSVRfQk9YLCB7XG4gICAgICAgICAgICBzaG93OiB0cnVlLFxuICAgICAgICAgICAgbWVzc2FnZVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBoaWRlV2FpdEJveCgpIHtcbiAgICAgICAgdGhpcy5yb290Q29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuU0hPV19XQUlUX0JPWCwge1xuICAgICAgICAgICAgc2hvdzogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY29weVRvQ2xpcGJvYXJkID0gc3RyID0+IHtcbiAgICAgICAgY29uc3QgZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO1xuICAgICAgICBlbC52YWx1ZSA9IHN0cjtcbiAgICAgICAgZWwuc2V0QXR0cmlidXRlKCdyZWFkb25seScsICcnKTtcbiAgICAgICAgZWwuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgICAgICBlbC5zdHlsZS5sZWZ0ID0gJy05OTk5cHgnO1xuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVsKTtcbiAgICAgICAgZWwuc2VsZWN0KCk7XG4gICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCdjb3B5Jyk7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZWwpO1xuICAgIH1cblxuICAgIGFzeW5jIF9wcmludFBkZihiYXNlU2VydmljZTogQmFzZVNlcnZpY2UsIGlkOiBzdHJpbmcsIHJvd0RhdGE6IGFueSkge1xuICAgICAgICBjb25zdCBpdGVtRGV0YWlsID0gKGF3YWl0IGJhc2VTZXJ2aWNlLmdldERldGFpbChpZCkpLmRhdGE7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCBiYXNlU2VydmljZS5nZXREYXRhVHJpbmhLeShpdGVtRGV0YWlsLCByb3dEYXRhKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3ByaW50UGRmQmFzZShiYXNlU2VydmljZSwgaWQsIGRhdGEpO1xuICAgIH1cblxuICAgIGFzeW5jIF9wcmludFBkZkJ5U2NoZW1hKGJhc2VTZXJ2aWNlOiBCYXNlU2VydmljZSwgbW9kZWw6IGFueSwgc2NoZW1hczogRm9ybVNjaGVtYUJhc2VbXSkge1xuICAgICAgICBjb25zdCB0bXBNb2RlbCA9IHsgLi4ubW9kZWwgfTtcbiAgICAgICAgZGVsZXRlIHRtcE1vZGVsLnByaW50RmlsZUlkO1xuICAgICAgICBjb25zdCBkYXRhID0gW107XG4gICAgICAgIGF3YWl0IHRoaXMuX2dldEtleVZhbHVlKGRhdGEsICcnLCBzY2hlbWFzLCB0bXBNb2RlbCk7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcmludFBkZkJhc2UoYmFzZVNlcnZpY2UsIG1vZGVsLmlkLCBkYXRhKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9wcmludFBkZkJhc2UoYmFzZVNlcnZpY2U6IEJhc2VTZXJ2aWNlLCBpZDogc3RyaW5nLCBkYXRhOiBhbnlbXSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmV0dXJuIGJhc2VTZXJ2aWNlLmV4cG9ydFRvUGRmKGlkLCBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgICAgdGlldURlOiBiYXNlU2VydmljZS5vYmplY3ROYW1lLFxuICAgICAgICAgICAgICAgIGRhdGFcbiAgICAgICAgICAgIH0pKTtcbiAgICAgICAgfVxuICAgICAgICBjYXRjaCAoZXJyKSB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICByZXR1cm4gPFJlc3BvbnNlUmVzdWx0PntcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgICAgICBtZXNzYWdlOiAnQ8OzIGzhu5dpIHjhuqN5IHJhJ1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRMYWJlbChwcmVmaXg6IHN0cmluZywgbGFiZWw6IHN0cmluZykge1xuICAgICAgICByZXR1cm4gYCR7cHJlZml4fSR7bGFiZWx9YDtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9nZXRWYWx1ZUZyb21EYXRhc291cmNlKGl0ZW1TZWxlY3RlZDogYW55LCBpc011bHRpcGxlOiBib29sZWFuLCBmdW5jR2V0TGFiZWw6IChpdGVtKSA9PiBzdHJpbmcpIHtcbiAgICAgICAgbGV0IHZhbHVlID0gbnVsbDtcbiAgICAgICAgaWYgKGlzTXVsdGlwbGUpIHtcbiAgICAgICAgICAgIGlmIChpdGVtU2VsZWN0ZWQgJiYgaXRlbVNlbGVjdGVkLmxlbmd0aCA+IDApXG4gICAgICAgICAgICAgICAgdmFsdWUgPSBpdGVtU2VsZWN0ZWQubWFwKHEgPT4gZnVuY0dldExhYmVsKHEudmFsdWUpKS5qb2luKCcsICcpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgaWYgKGl0ZW1TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gZnVuY0dldExhYmVsKGl0ZW1TZWxlY3RlZC52YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHZhbHVlO1xuICAgIH1cblxuICAgIGFzeW5jIF9nZXRLZXlWYWx1ZShyZXN1bHQ6IGFueVtdLCBwcmVmaXg6IHN0cmluZywgc2NoZW1hczogRm9ybVNjaGVtYUJhc2VbXSwgbW9kZWw6IGFueSkge1xuICAgICAgICBmb3IgKGNvbnN0IHNjaGVtYSBvZiBzY2hlbWFzKSB7XG4gICAgICAgICAgICBpZiAoIXNjaGVtYS5oaWRkZW5cbiAgICAgICAgICAgICAgICAmJiBzY2hlbWEuZmllbGQgIT0gJ3ByaW50RmlsZUlkJ1xuICAgICAgICAgICAgICAgICYmIHNjaGVtYS5sYWJlbFxuICAgICAgICAgICAgICAgICYmICEoc2NoZW1hIGluc3RhbmNlb2YgRmlsZVVwbG9hZENvbnRyb2xTY2hlbWEpXG4gICAgICAgICAgICAgICAgJiYgIShzY2hlbWEgaW5zdGFuY2VvZiBGaWxlTWFuYWdlckNvbnRyb2xTY2hlbWEpXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBtb2RlbFtzY2hlbWEuZmllbGRdO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZ2V0TGFiZWwocHJlZml4LCBzY2hlbWEubGFiZWwpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIFRhYmxlU2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRtcFNjaGVtYSA9IDxUYWJsZVNjaGVtYT5zY2hlbWE7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZ2V0TGFiZWwocHJlZml4LCBzY2hlbWEubGFiZWwpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHJvd0RhdGEgb2YgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9nZXRLZXlWYWx1ZShyZXN1bHQsIGAke3ByZWZpeH1cXHRgLCB0bXBTY2hlbWEucm93VGVtcGxhdGUsIHJvd0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNwbGljZShyZXN1bHQubGVuZ3RoIC0gMSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgQWRkcmVzc0NvbnRyb2xTY2hlbWEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG1wU2NoZW1hID0gPEFkZHJlc3NDb250cm9sU2NoZW1hPnNjaGVtYTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZ2V0TGFiZWwocHJlZml4LCBzY2hlbWEubGFiZWwpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2dldEtleVZhbHVlKHJlc3VsdCwgYCR7cHJlZml4fVxcdGAsIHRtcFNjaGVtYS5fY29tcG9uZW50LnNldHRpbmcuc2NoZW1hLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hIGluc3RhbmNlb2YgRGF0ZVRpbWVDb250cm9sU2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldFN0cmluZ0RhdGVWTih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgQ29DYXVUb0NodWNQaWNrZXJDb250cm9sU2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtU2VsZWN0ZWQgPSBhd2FpdCBzY2hlbWEuX2NvbXBvbmVudC5jb250cm9sUGlja2VyLl9jb21wb25lbnQuZ2V0RGF0YVNlbGVjdGVkVmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG1wU2NoZW1hID0gPENvQ2F1VG9DaHVjUGlja2VyQ29udHJvbFNjaGVtYT5zY2hlbWE7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZnVuY0dldExhYmVsID0gdG1wU2NoZW1hLmZ1bmNHZXRMYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZnVuY0dldExhYmVsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNHZXRMYWJlbCA9IGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbS52YWx1ZVt0bXBTY2hlbWEuZGlzcGxheUZpZWxkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl9nZXRWYWx1ZUZyb21EYXRhc291cmNlKGl0ZW1TZWxlY3RlZCwgc2NoZW1hLm11bHRpcGxlLCBpdGVtID0+IGl0ZW0udGVuKTtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5tdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtU2VsZWN0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmZ1bmNHZXRMYWJlbClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaXRlbVNlbGVjdGVkLm1hcChxID0+IHRtcFNjaGVtYS5mdW5jR2V0TGFiZWwocS52YWx1ZSkpLmpvaW4oJywgJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaXRlbVNlbGVjdGVkLm1hcChxID0+IHEudmFsdWVbdG1wU2NoZW1hLmRpc3BsYXlGaWVsZF0pLmpvaW4oJywgJyk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbVNlbGVjdGVkKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuZnVuY0dldExhYmVsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzY2hlbWEuZnVuY0dldExhYmVsKGl0ZW1TZWxlY3RlZC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gaXRlbVNlbGVjdGVkLnZhbHVlW3NjaGVtYS5kaXNwbGF5RmllbGRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtU2VsZWN0ZWQgPSBhd2FpdCBzY2hlbWEuX2NvbXBvbmVudC5nZXREYXRhU2VsZWN0ZWRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0bXBTY2hlbWEgPSA8QXV0b0NvbXBsZXRlUGlja2VyQ29udHJvbFNjaGVtYT5zY2hlbWE7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZnVuY0dldExhYmVsID0gdG1wU2NoZW1hLmZ1bmNHZXRMYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZnVuY0dldExhYmVsKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmNHZXRMYWJlbCA9IGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXRlbSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0ZW1bdG1wU2NoZW1hLmRpc3BsYXlGaWVsZF07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fZ2V0VmFsdWVGcm9tRGF0YXNvdXJjZShpdGVtU2VsZWN0ZWQsIHNjaGVtYS5tdWx0aXBsZSwgZnVuY0dldExhYmVsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBDb0NhdVRvQ2h1Y0NvbnRyb2xTY2hlbWEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRtcFNjaGVtYSA9IDxDb0NhdVRvQ2h1Y0NvbnRyb2xTY2hlbWE+c2NoZW1hO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZnVuY0dldExhYmVsID0gaXRlbSA9PiBpdGVtLmxhYmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFTb3VyY2UgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGl0ZW1TZWxlY3RlZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wU2NoZW1hLl9jb21wb25lbnQubXVsdGlTZWxlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlID0gdG1wU2NoZW1hLl9jb21wb25lbnQubXVsdGlTZWxlY3QuX29wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVNlbGVjdGVkID0gZGF0YVNvdXJjZS5maWx0ZXIocSA9PiB2YWx1ZS5pbmRleE9mKHggPT4geCA9PSBxLnZhbHVlKSkubWFwKHEgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlID0gdG1wU2NoZW1hLl9jb21wb25lbnQuZHJvcGRvd24uX29wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVNlbGVjdGVkID0gZGF0YVNvdXJjZS5maW5kKHEgPT4gcS52YWx1ZSA9PSB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1TZWxlY3RlZClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVNlbGVjdGVkID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1TZWxlY3RlZFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2dldFZhbHVlRnJvbURhdGFzb3VyY2UoaXRlbVNlbGVjdGVkLCBzY2hlbWEubXVsdGlwbGUsIGZ1bmNHZXRMYWJlbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgRHJvcGRvd25Db250cm9sU2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0bXBTY2hlbWEgPSA8RHJvcGRvd25Db250cm9sU2NoZW1hPnNjaGVtYTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpdGVtU2VsZWN0ZWQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjaGVtYS5tdWx0aXBsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW1TZWxlY3RlZCA9IHNjaGVtYS5fY29tcG9uZW50LmRhdGFTb3VyY2VJbnRlcm5hbC5maWx0ZXIocSA9PiB2YWx1ZS5pbmRleE9mKHggPT4geCA9PSBxLnZhbHVlW3EudmFsdWUuX2Ryb3Bkb3dudmFsdWVdKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtU2VsZWN0ZWQgPSBzY2hlbWEuX2NvbXBvbmVudC5kYXRhU291cmNlSW50ZXJuYWwuZmluZChxID0+IHEudmFsdWVbcS52YWx1ZS5fZHJvcGRvd252YWx1ZV0gPT0gdmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl9nZXRWYWx1ZUZyb21EYXRhc291cmNlKGl0ZW1TZWxlY3RlZCwgc2NoZW1hLm11bHRpcGxlLCB0bXBTY2hlbWEuZnVuY0dldExhYmVsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBDaGVja2JveENvbnRyb2xTY2hlbWEgfHwgc2NoZW1hIGluc3RhbmNlb2YgU3dpdGNoQ29udHJvbFNjaGVtYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICdLaMO0bmcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gJ0PDsyc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gVmFsdWUgPSB1bmRlZmluZWQgdGjDrCBraGkgc2VyaWFsaXplIHPhur0gYuG7iyBt4bqldCBwcm9wXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICByZXN1bHQucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogdGhpcy5nZXRMYWJlbChwcmVmaXgsIHNjaGVtYS5sYWJlbCksXG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBnZXRTdHJpbmdEYXRlKHZhbHVlKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuICcnO1xuICAgICAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBEYXRlKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fZGF0ZVBpcGUudHJhbnNmb3JtKHZhbHVlLCAnZGQvTU0veXl5eScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9kYXRlUGlwZS50cmFuc2Zvcm0oZGF0ZSwgJ2RkL01NL3l5eXknKTtcbiAgICB9XG4gICAgLy8gaHR0cDovL2xvY2FsaG9zdDoyNzIzMC91bml2ZXJzYWwtbGluaz9zZXJ2aWNlQ29kZT1jb25ndmllYyZlbnRpdHk9RE1fUHJpb3JpdHkmZW50aXR5S2V5PTA5MTFmM2U3LTNkYjAtNGI2OC04N2NkLTA3ZDQyNTc0MWU5ZSZzdGF0ZT0mc291cmNlUGF0aD1odHRwOi8vbG9jYWxob3N0OjI3MjMwL2RtLXByaW9yaXR5XG4gICAgcGFyc2VBdHRhY2hMaW5rKGNvbnRlbnQpIHtcbiAgICAgICAgY29uc3QgbGlua3MgPSBjb250ZW50LnNwbGl0KCdcXHJcXG4nKTtcbiAgICAgICAgY29uc3Qgb3AgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBsaW5rIG9mIGxpbmtzKSB7XG4gICAgICAgICAgICBjb25zdCBhcnIgPSBsaW5rLnNwbGl0KCc/Jyk7XG4gICAgICAgICAgICBpZiAoYXJyLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ZW1wID0gYXJyWzFdO1xuICAgICAgICAgICAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5wYXJzZVF1ZXJ5U3RyaW5nKHRlbXApO1xuICAgICAgICAgICAgICAgIGlmIChxdWVyeSAmJiBxdWVyeS5zZXJ2aWNlQ29kZSAmJiBxdWVyeS5lbnRpdHkgJiYgcXVlcnkuZW50aXR5S2V5KSB7XG4gICAgICAgICAgICAgICAgICAgIHF1ZXJ5LnJhd0xpbmsgPSBsaW5rO1xuICAgICAgICAgICAgICAgICAgICBvcC5wdXNoKHF1ZXJ5KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgbGluayAke2xpbmt9IGludmFsaWQgdG8gcGFyc2VgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9wO1xuICAgIH1cbiAgICBwcml2YXRlIHBhcnNlUXVlcnlTdHJpbmcocXVlcnk6IHN0cmluZyk6IGFueSB7XG4gICAgICAgIGlmICghcXVlcnkpIHJldHVybiBudWxsO1xuICAgICAgICBpZiAocXVlcnkuc3RhcnRzV2l0aCgnPycpKSBxdWVyeSA9IHF1ZXJ5LnN1YnN0cmluZygxKTtcbiAgICAgICAgY29uc3QgYXJyID0gcXVlcnkuc3BsaXQoJyYnKTtcbiAgICAgICAgY29uc3Qgb2JqID0ge307XG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBhcnIpIHtcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBpdGVtLnNwbGl0KCc9Jyk7XG4gICAgICAgICAgICBpZiAodGVtcFsxXSkge1xuICAgICAgICAgICAgICAgIG9ialt0ZW1wWzBdXSA9IGRlY29kZVVSSUNvbXBvbmVudCh0ZW1wWzFdKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIG9ialt0ZW1wWzBdXSA9IG51bGw7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG4gICAgYXN5bmMgZ2V0Q29weVBhdGgoc2V0dGluZzogQ3J1ZExpc3RTZXR0aW5nLCByb3dEYXRhOiBhbnksIHBlcm1pc3Npb246IFBlcm1pc3Npb25CYXNlID0gUGVybWlzc2lvbkJhc2UuUkVBRCkge1xuICAgICAgICBjb25zdCBpdGVtU2hhcmVzOiBNb2RlbFNoYXJlTGlua0J5UGVybWlzc2lvbiA9IG5ldyBNb2RlbFNoYXJlTGlua0J5UGVybWlzc2lvbigpO1xuICAgICAgICBpdGVtU2hhcmVzLmxpbmtUb01lbnUgPSBgJHt0b3AubG9jYXRpb24ub3JpZ2lufSR7dG9wLmxvY2F0aW9uLnBhdGhuYW1lfWA7XG4gICAgICAgIGl0ZW1TaGFyZXMuc291cmNlUGF0aCA9IGAke2VuY29kZVVSSUNvbXBvbmVudCh0b3AubG9jYXRpb24uaHJlZil9YDtcbiAgICAgICAgaXRlbVNoYXJlcy50YXJnZXRQYXRoID0gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KHNldHRpbmcudGFyZ2V0UGF0aCl9YDtcbiAgICAgICAgaXRlbVNoYXJlcy5vYmplY3REaXNwbGF5TmFtZSA9IGAke2VuY29kZVVSSUNvbXBvbmVudChzZXR0aW5nLm9iamVjdE5hbWUpfWA7XG4gICAgICAgIGxldCBkaXNwbGF5RmllbGQgPSAnJztcbiAgICAgICAgaWYgKHNldHRpbmcuZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgICBkaXNwbGF5RmllbGQgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmlzU3RyaW5nKHNldHRpbmcuZGlzcGxheUZpZWxkKSA/IHNldHRpbmcuZGlzcGxheUZpZWxkIDogKHNldHRpbmcuZGlzcGxheUZpZWxkIGFzIGFueSkoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgICAgY29uc3QgbGlua0NvbHVtbiA9IHNldHRpbmcuY29scy5maW5kKHggPT4geC5zaG93RWRpdExpbmspO1xuICAgICAgICAgICAgZGlzcGxheUZpZWxkID0gbGlua0NvbHVtbj8uZmllbGQ7XG4gICAgICAgICAgICBpZiAoIWRpc3BsYXlGaWVsZCkge1xuICAgICAgICAgICAgICAgIGRpc3BsYXlGaWVsZCA9ICdpZCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaXRlbVNoYXJlcy5kaXNwbGF5RmllbGQgPSBkaXNwbGF5RmllbGQ7XG4gICAgICAgIGl0ZW1TaGFyZXMubHN0SXRlbURhdGEgPSBbXTtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBhd2FpdCB0aGlzLmdldExpbmtTdGF0ZShyb3dEYXRhKTtcbiAgICAgICAgaXRlbVNoYXJlcy5sc3RJdGVtRGF0YS5wdXNoKHtcbiAgICAgICAgICAgIGl0ZW1JZDogcm93RGF0YS5pZCxcbiAgICAgICAgICAgIHBlcm1pc3Npb24sXG4gICAgICAgICAgICBzdGF0ZTogZW5jb2RlVVJJQ29tcG9uZW50KHN0YXRlKVxuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgZGljUGVybWlzc2lvbklkID0gKGF3YWl0IHNldHRpbmcuYmFzZVNlcnZpY2UuZ2V0U2hhcmVkS2V5KGl0ZW1TaGFyZXMpKS5kYXRhO1xuICAgICAgICBpZiAoIWRpY1Blcm1pc3Npb25JZCkge1xuICAgICAgICAgICAgdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkuc2hvd1dhcm5pbmcoJ0LhuqFuIGtow7RuZyBjw7MgcXV54buBbiBjaGlhIHPhursgYuG6o24gZ2hpJyk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHBhdGggPSAnJztcbiAgICAgICAgaXRlbVNoYXJlcy5sc3RJdGVtRGF0YS5mb3JFYWNoKGl0ZW1EYXRhID0+IHtcbiAgICAgICAgICAgIHBhdGggKz0gYCR7ZGljUGVybWlzc2lvbklkW2l0ZW1EYXRhLml0ZW1JZF19XFxuYDtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXRoO1xuICAgIH1cbiAgICBhc3luYyBnZXRMaW5rU3RhdGUocm93RGF0YTogYW55KSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG59XG4iXX0=
|
|
531
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9uZW50LWJhc2UuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vLi4vcHJvamVjdHMvc2hhcmVkL3NyYy9saWIvIiwic291cmNlcyI6WyJjbGFzc2VzL2Jhc2UvY29tcG9uZW50LWJhc2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDdEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDMUYsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sNkNBQTZDLENBQUM7QUFDdEYsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMkVBQTJFLENBQUM7QUFDdkgsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtDQUFrQyxDQUFDO0FBQzlELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUMzRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDcEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQ3RELE9BQU8sRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHM0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDdkUs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O1lBL2dCSixTQUFTOzs7WUE5QlUsUUFBUTs7OzswQkFnQ3ZCLEtBQUs7NEJBQ0wsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IERpcmVjdGl2ZSwgSW5qZWN0b3IsIElucHV0LCBPbkRlc3Ryb3kgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFwcGxpY2F0aW9uQ29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcHAtY29udGV4dC9hcHBsaWNhdGlvbi1jb250ZXh0LnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29tcG9uZW50Q29udGV4dFNlcnZpY2UgfSBmcm9tICcuLi8uLi9hcHAtY29udGV4dC9jb21wb25lbnQtY29udGV4dC5zZXJ2aWNlJztcbmltcG9ydCB7IE1vZGVsU2hhcmVMaW5rQnlQZXJtaXNzaW9uIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9zaGFyZS1saW5rLWJ5LXBlcm1pc3Npb24vbW9kZWxzL3NoYXJlLWxpbmstYnktcGVybWlzc2lvbic7XG5pbXBvcnQgeyBWYWxpZGF0aW9uIH0gZnJvbSAnLi4vLi4vY29uZmlncy9jb21wb25lbnQtY29udGFudHMnO1xuaW1wb3J0IHsgQ29tQ3R4Q29uc3RhbnRzIH0gZnJvbSAnLi4vLi4vY29uZmlncy9jb21wb25lbnQtY29udGV4dC5jb25zdGFudCc7XG5pbXBvcnQgeyBQZXJtaXNzaW9uQmFzZSB9IGZyb20gJy4uLy4uL2VudW1zL2NvbW1vbic7XG5pbXBvcnQgeyBFeHBvcnRJdGVtIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2V4cG9ydC1pdGVtJztcbmltcG9ydCB7IEZpbHRlciwgU29ydCwgU3RyaW5nQ29tcGFyZU9wdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9ncmlkLWluZm8nO1xuaW1wb3J0IHsgUmVzcG9uc2VSZXN1bHQgfSBmcm9tICcuLi8uLi9tb2RlbHMvcmVzcG9uc2UtcmVzdWx0JztcbmltcG9ydCB7IEJhc2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvYmFzZS5zZXJ2aWNlJztcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb21tb24uc2VydmljZSc7XG5pbXBvcnQgeyBDcnVkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NydWQuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmllci5zZXJ2aWNlJztcbmltcG9ydCB7IFRlbXBsYXRlVjRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdGVtcGxhdGUtdjQuc2VydmljZSc7XG5pbXBvcnQgeyBUZW1wbGF0ZUluc3RhbmNlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3RlbXBsYXRlaW5zdGFuY2Uuc2VydmljZSc7XG5pbXBvcnQgeyBnZXRTdHJpbmdEYXRlVk4gfSBmcm9tICcuLi8uLi91dGlscy9kYXRlJztcbmltcG9ydCB7IEV4cG9ydEl0ZW1UeXBlIH0gZnJvbSAnLi4vY29uc3RhbnRzJztcbmltcG9ydCB7XG4gICAgQWRkcmVzc0NvbnRyb2xTY2hlbWEsIEF1dG9Db21wbGV0ZVBpY2tlckNvbnRyb2xTY2hlbWEsXG4gICAgQ2hlY2tib3hDb250cm9sU2NoZW1hLCBDb0NhdVRvQ2h1Y0NvbnRyb2xTY2hlbWEsIENvQ2F1VG9DaHVjUGlja2VyQ29udHJvbFNjaGVtYSxcbiAgICBDcnVkTGlzdFNldHRpbmcsXG4gICAgRGF0ZVRpbWVDb250cm9sU2NoZW1hLCBEcm9wZG93bkNvbnRyb2xTY2hlbWEsIEZpbGVNYW5hZ2VyQ29udHJvbFNjaGVtYSwgRmlsZVVwbG9hZENvbnRyb2xTY2hlbWEsXG4gICAgRm9ybVNjaGVtYUJhc2UsIE1vZGVsU2NoZW1hLCBPcGVyYXRvciwgU3dpdGNoQ29udHJvbFNjaGVtYSwgVGFibGVTY2hlbWFcbn0gZnJvbSAnLi4vZm9ybS1zY2hlbWEnO1xuXG5leHBvcnQgY29uc3QgRVhQT1JUX1ZFUlNJT05fVjQgPSA0O1xuZXhwb3J0IGNvbnN0IEVYUE9SVF9WRVJTSU9OX1Y1ID0gNTtcbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbXBvbmVudEJhc2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAgIEBJbnB1dCgpIHBhcmVudE1vZGVsOiBhbnk7XG4gICAgQElucHV0KCkgc2V0IHBhcmVudENvbnRleHQodmFsdWU6IENvbXBvbmVudENvbnRleHRTZXJ2aWNlKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0LnBhcmVudCA9IHZhbHVlO1xuICAgICAgICB9XG4gICAgfTtcbiAgICBnZXQgcGFyZW50Q29udGV4dCgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udGV4dC5wYXJlbnQ7XG4gICAgfVxuXG4gICAgbW9kZWw6IGFueTtcbiAgICBtb2RlbFNjaGVtYTogTW9kZWxTY2hlbWFbXSA9IFtdO1xuICAgIGNvbnRleHQ6IENvbXBvbmVudENvbnRleHRTZXJ2aWNlO1xuICAgIHJvb3RNb2RlbDogYW55O1xuICAgIHJvb3RDb250ZXh0OiBDb21wb25lbnRDb250ZXh0U2VydmljZTtcbiAgICBndWlkRW1wdHkgPSAnMDAwMDAwMDAtMDAwMC0wMDAwLTAwMDAtMDAwMDAwMDAwMDAwJztcblxuICAgIHB1YmxpYyBfdW5zdWJzY3JpYmVBbGw6IFN1YmplY3Q8YW55PjtcbiAgICBwcm90ZWN0ZWQgX2NvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2U7XG4gICAgcHJvdGVjdGVkIF9hcHBDb250ZXh0OiBBcHBsaWNhdGlvbkNvbnRleHRTZXJ2aWNlO1xuICAgIHByb3RlY3RlZCBfY29tcG9uZW50Q29udGV4dDogQ29tcG9uZW50Q29udGV4dFNlcnZpY2U7XG4gICAgcHJvdGVjdGVkIF9pbmplY3RvcjogSW5qZWN0b3I7XG4gICAgcHJvdGVjdGVkIF9hY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGU7XG4gICAgcHJvdGVjdGVkIF9jcnVkU2VydmljZTogQ3J1ZFNlcnZpY2U7XG4gICAgcHJvdGVjdGVkIF9kYXRlUGlwZTogRGF0ZVBpcGU7XG5cbiAgICBjb25zdHJ1Y3RvcihpbmplY3RvcjogSW5qZWN0b3IsIGNvbXBvbmVudE5hbWU/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fdW5zdWJzY3JpYmVBbGwgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgICB0aGlzLl9pbmplY3RvciA9IGluamVjdG9yO1xuICAgICAgICB0aGlzLl9hcHBDb250ZXh0ID0gaW5qZWN0b3IuZ2V0KEFwcGxpY2F0aW9uQ29udGV4dFNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0ID0gaW5qZWN0b3IuZ2V0KENvbXBvbmVudENvbnRleHRTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fYWN0aXZhdGVkUm91dGUgPSBpbmplY3Rvci5nZXQoQWN0aXZhdGVkUm91dGUpO1xuICAgICAgICB0aGlzLl9jcnVkU2VydmljZSA9IGluamVjdG9yLmdldChDcnVkU2VydmljZSk7XG4gICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UgPSBpbmplY3Rvci5nZXQoQ29tbW9uU2VydmljZSk7XG4gICAgICAgIHRoaXMuX2RhdGVQaXBlID0gaW5qZWN0b3IuZ2V0KERhdGVQaXBlKTtcblxuICAgICAgICB0aGlzLl9jb21wb25lbnRDb250ZXh0ID0gdGhpcy5fYXBwQ29udGV4dC5hZGRDb21wb25lbnRDb250ZXh0KHRoaXMuX2NvbXBvbmVudENvbnRleHQsIHRoaXMuX2FjdGl2YXRlZFJvdXRlLCB0aGlzLmdldENvbXBvbmVudElkKCkpO1xuICAgICAgICBpZiAodGhpcy5fY29tcG9uZW50Q29udGV4dCkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbCA9IHRoaXMuX2NvbXBvbmVudENvbnRleHQuZGF0YTtcbiAgICAgICAgICAgIHRoaXMuY29udGV4dCA9IHRoaXMuX2NvbXBvbmVudENvbnRleHQ7XG4gICAgICAgICAgICB0aGlzLnJvb3RDb250ZXh0ID0gdGhpcy5fY29tcG9uZW50Q29udGV4dC5yb290O1xuXG4gICAgICAgICAgICB0aGlzLnJvb3RNb2RlbCA9IHRoaXMucm9vdENvbnRleHQuZGF0YTtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuY29tcG9uZW50U3VicyA9IFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgKiBPbiBkZXN0cm95XG4gICAgKi9cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgLy8gVW5zdWJzY3JpYmUgZnJvbSBhbGwgc3Vic2NyaXB0aW9uc1xuICAgICAgICB0aGlzLl91bnN1YnNjcmliZUFsbC5uZXh0KCk7XG4gICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlQWxsLmNvbXBsZXRlKCk7XG5cbiAgICAgICAgaWYgKHRoaXMubW9kZWwuY29tcG9uZW50U3Vicykge1xuICAgICAgICAgICAgZm9yIChjb25zdCBzdWIgb2YgdGhpcy5tb2RlbC5jb21wb25lbnRTdWJzKSB7XG4gICAgICAgICAgICAgICAgaWYgKHN1Yikgc3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jb250ZXh0KSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRleHQuZGVzdHJveUNvbnRleHQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldENvbXBvbmVudElkKCk6IHN0cmluZyB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb21tb25TZXJ2aWNlLnJhbmRvbVN0cmluZygpO1xuICAgIH1cblxuICAgIHN1YnNjcmliZVJvb3QobmFtZTogc3RyaW5nLCBjYWxsQmFjazogYW55KSB7XG4gICAgICAgIHRoaXMubW9kZWwuY29tcG9uZW50U3Vicy5wdXNoKHRoaXMucm9vdENvbnRleHQuc3Vic2NyaWJlKG5hbWUsIGNhbGxCYWNrKSk7XG4gICAgfVxuXG4gICAgc3Vic2NyaWJlKG5hbWU6IHN0cmluZywgY2FsbEJhY2s6IGFueSkge1xuICAgICAgICB0aGlzLm1vZGVsLmNvbXBvbmVudFN1YnMucHVzaCh0aGlzLmNvbnRleHQuc3Vic2NyaWJlKG5hbWUsIGNhbGxCYWNrKSk7XG4gICAgfVxuXG4gICAgc3Vic2NyaWJlT25jZShuYW1lOiBzdHJpbmcsIGNhbGxCYWNrOiBhbnkpIHtcbiAgICAgICAgdGhpcy5tb2RlbC5jb21wb25lbnRTdWJzLnB1c2godGhpcy5jb250ZXh0LnN1YnNjcmliZU9uY2UobmFtZSwgY2FsbEJhY2spKTtcbiAgICB9XG5cbiAgICByZXBsYXlTdWJzY3JpYmUobmFtZTogc3RyaW5nLCBjYWxsQmFjazogYW55KSB7XG4gICAgICAgIHRoaXMubW9kZWwuY29tcG9uZW50U3Vicy5wdXNoKHRoaXMuY29udGV4dC5yZXBsYXlTdWJzY3JpYmUobmFtZSwgY2FsbEJhY2spKTtcbiAgICB9XG5cbiAgICB0cmFja0J5RnVuY0RlZmF1bHQoaW5kZXgsIGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGluZGV4O1xuICAgIH1cblxuICAgIHRyYWNrQnlGdW5jSWQoaW5kZXgsIGl0ZW0pIHtcbiAgICAgICAgcmV0dXJuIGl0ZW0uaWQ7XG4gICAgfVxuXG4gICAgaGFuZGxlUmVzcG9uc2UocmVzOiBSZXNwb25zZVJlc3VsdCwgbWVzc2FnZT86IHN0cmluZywgY2FsbEJhY2s/OiBGdW5jdGlvbiwgY2FsbEJhY2tFcnJvcj86IEZ1bmN0aW9uKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jcnVkU2VydmljZS5oYW5kbGVSZXNwb25zZShyZXMsIG1lc3NhZ2UsIGNhbGxCYWNrLCBjYWxsQmFja0Vycm9yKTtcbiAgICB9XG5cbiAgICBoYW5kbGVSZXNwb25zZVdpdGhXYWl0Qm94KHJlczogUmVzcG9uc2VSZXN1bHQsIG1lc3NhZ2U/OiBzdHJpbmcsIGNhbGxCYWNrPzogRnVuY3Rpb24sIGNhbGxCYWNrRXJyb3I/OiBGdW5jdGlvbikge1xuICAgICAgICB0aGlzLmhpZGVXYWl0Qm94KCk7XG4gICAgICAgIGlmICghcmVzLnN1Y2Nlc3MpIHtcbiAgICAgICAgICAgIGlmIChyZXMuZXJyb3IgPT0gVmFsaWRhdGlvbi5FUlJfU1lTX0RFVikge1xuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IocmVzLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpLnNob3dXYXJuaW5nKCdDw7MgbOG7l2kgeOG6o3kgcmEuIExpw6puIGjhu4cgcXXhuqNuIHRy4buLIHZpw6puIMSR4buDIGJp4bq/dCB0aMOqbSBjaGkgdGnhur90LicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlcy5tZXNzYWdlICE9IG51bGwgJiYgcmVzLm1lc3NhZ2UgIT0gJycpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkuc2hvd1dhcm5pbmcocmVzLm1lc3NhZ2UpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5faW5qZWN0b3IuZ2V0KE5vdGlmaWVyU2VydmljZSkuc2hvd1dhcm5pbmcocmVzLmVycm9yKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY2FsbEJhY2tFcnJvcikgY2FsbEJhY2tFcnJvcihyZXMpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChtZXNzYWdlKSB7XG4gICAgICAgICAgICB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKS5zaG93U3VjY2VzcyhtZXNzYWdlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2FsbEJhY2spIGNhbGxCYWNrKHJlcyk7XG4gICAgfVxuXG4gICAgaXNOb3ROdWxsQXJyYXkoYXJyKSB7XG4gICAgICAgIHJldHVybiBhcnIgIT0gbnVsbCAmJiBhcnIubGVuZ3RoID4gMDtcbiAgICB9XG5cbiAgICBmdW5jU29ydERlZmF1bHQoYSwgYikge1xuICAgICAgICBpZiAoYSA+IGIpIHJldHVybiAxO1xuICAgICAgICBpZiAoYSA9PSBiKSByZXR1cm4gMDtcbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cblxuICAgIC8vIGFkZEV4cG9ydEpvYihqb2I6IEV4cG9ydEpvYikge1xuICAgIC8vICAgICB0aGlzLmNvbnRleHQuYWRkRXhwb3J0Sm9iKGpvYik7XG4gICAgLy8gfVxuXG4gICAgZXhwb3J0KGRhdGE6IEV4cG9ydEl0ZW0sIHZlcnNpb24gPSBFWFBPUlRfVkVSU0lPTl9WNCk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc29sZS5sb2coJ2V4cG9ydCB2ZXJzaW9uOiAnICsgdmVyc2lvbik7XG4gICAgICAgIHN3aXRjaCAodmVyc2lvbikge1xuICAgICAgICAgICAgY2FzZSBFWFBPUlRfVkVSU0lPTl9WNDpcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5leHBvcnRWNChkYXRhKTtcbiAgICAgICAgICAgIGNhc2UgRVhQT1JUX1ZFUlNJT05fVjU6XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZXhwb3J0VjUoZGF0YSk7XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEV4cG9ydCB2ZXJzaW9uOiAke3ZlcnNpb259IGlzIG5vdCBzdXBwb3J0ZWQhYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgZXhwb3J0RXhjZWxWNShkYXRhOiBhbnksIHRlbXBsYXRlQ29kZTogc3RyaW5nLCBmaWxlTmFtZTogc3RyaW5nKTogUHJvbWlzZTxSZXNwb25zZVJlc3VsdD4ge1xuICAgICAgICBjb25zdCBzaGVldCA9IG5ldyBFeHBvcnRJdGVtKHtcbiAgICAgICAgICAgIHR5cGU6IEV4cG9ydEl0ZW1UeXBlLkV4Y2VsU2hlZXQsXG4gICAgICAgICAgICB0ZW1wbGF0ZUNvZGUsXG4gICAgICAgICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeShkYXRhKSxcbiAgICAgICAgICAgIG5hbWU6ICdTaGVldDEnXG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IGZpbGUgPSBuZXcgRXhwb3J0SXRlbSh7XG4gICAgICAgICAgICB0eXBlOiBFeHBvcnRJdGVtVHlwZS5FeGNlbEZpbGUsXG4gICAgICAgICAgICBuYW1lOiBmaWxlTmFtZVxuICAgICAgICB9KTtcbiAgICAgICAgZmlsZS5jaGlsZHJlbiA9IFtzaGVldF07XG4gICAgICAgIHJldHVybiB0aGlzLmV4cG9ydChmaWxlLCBFWFBPUlRfVkVSU0lPTl9WNSk7XG4gICAgfVxuXG4gICAgZXhwb3J0VjQoZGF0YTogRXhwb3J0SXRlbSk6IFByb21pc2U8UmVzcG9uc2VSZXN1bHQ+IHtcbiAgICAgICAgY29uc3QgdGVtcGxhdGVWNFNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoVGVtcGxhdGVWNFNlcnZpY2UpO1xuICAgICAgICByZXR1cm4gdGVtcGxhdGVWNFNlcnZpY2UuZXhwb3J0Tm9ybWFsKGRhdGEpO1xuICAgIH1cblxuICAgIGV4cG9ydFY1KGRhdGE6IEV4cG9ydEl0ZW0pOiBQcm9taXNlPFJlc3BvbnNlUmVzdWx0PiB7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlSW5zdGFuY2VTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFRlbXBsYXRlSW5zdGFuY2VTZXJ2aWNlKTtcbiAgICAgICAgcmV0dXJuIHRlbXBsYXRlSW5zdGFuY2VTZXJ2aWNlLmV4cG9ydE5vcm1hbChkYXRhKTtcbiAgICB9XG5cbiAgICBuZXdGaWx0ZXJDb250YWluZXIobG9naWM6ICdhbmQnIHwgJ29yJywgLi4uZmlsdGVyczogRmlsdGVyW10pIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgbG9naWMsXG4gICAgICAgICAgICBmaWx0ZXJzOiBbLi4uZmlsdGVyc11cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmV3RmlsdGVyKGZpZWxkOiBzdHJpbmcsIG9wZXJhdG9yOiBPcGVyYXRvciwgdmFsdWU6IGFueSwgdmFsdWVJc0ZpZWxkOiBib29sZWFuID0gZmFsc2UsIHN0cmluZ0NvbXBhcmVPcHRpb246IFN0cmluZ0NvbXBhcmVPcHRpb24gPSBTdHJpbmdDb21wYXJlT3B0aW9uLk5vcm1hbCkge1xuICAgICAgICByZXR1cm4gbmV3IEZpbHRlcih7XG4gICAgICAgICAgICBmaWVsZCwgb3BlcmF0b3IsXG4gICAgICAgICAgICB2YWx1ZTogSlNPTi5zdHJpbmdpZnkodmFsdWUpLFxuICAgICAgICAgICAgdmFsdWVJc0ZpZWxkLFxuICAgICAgICAgICAgc3RyaW5nQ29tcGFyZU9wdGlvbixcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmV3RmlsdGVyVjQoZmllbGQ6IHN0cmluZywgb3BlcmF0b3I6IE9wZXJhdG9yLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgIGZpZWxkLCBvcGVyYXRvcixcbiAgICAgICAgICAgIHZhbHVlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5ld0JpbmRpbmdGaWx0ZXIoY29sdW1uOiBzdHJpbmcsIG9wZXJhdG9yOiBPcGVyYXRvciwgc291cmNlRmllbGQ6IHN0cmluZywgc3ViRmllbGQ/OiBzdHJpbmcpIHtcbiAgICAgICAgcmV0dXJuIG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgZmllbGQ6IGNvbHVtbixcbiAgICAgICAgICAgIG9wZXJhdG9yLFxuICAgICAgICAgICAgc291cmNlRmllbGQsXG4gICAgICAgICAgICBzdWJGaWVsZFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBuZXdTb3J0KGZpZWxkOiBzdHJpbmcsIGRpcjogMSB8IC0xID0gMSkge1xuICAgICAgICByZXR1cm4gbmV3IFNvcnQoeyBmaWVsZCwgZGlyIH0pO1xuICAgIH1cblxuICAgIHNob3dXYWl0Qm94KG1lc3NhZ2U/OiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5yb290Q29udGV4dC5maXJlRXZlbnQoQ29tQ3R4Q29uc3RhbnRzLlJPT1QuU0hPV19XQUlUX0JPWCwge1xuICAgICAgICAgICAgc2hvdzogdHJ1ZSxcbiAgICAgICAgICAgIG1lc3NhZ2VcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgaGlkZVdhaXRCb3goKSB7XG4gICAgICAgIHRoaXMucm9vdENvbnRleHQuZmlyZUV2ZW50KENvbUN0eENvbnN0YW50cy5ST09ULlNIT1dfV0FJVF9CT1gsIHtcbiAgICAgICAgICAgIHNob3c6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNvcHlUb0NsaXBib2FyZCA9IHN0ciA9PiB7XG4gICAgICAgIGNvbnN0IGVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGV4dGFyZWEnKTtcbiAgICAgICAgZWwudmFsdWUgPSBzdHI7XG4gICAgICAgIGVsLnNldEF0dHJpYnV0ZSgncmVhZG9ubHknLCAnJyk7XG4gICAgICAgIGVsLnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICAgICAgZWwuc3R5bGUubGVmdCA9ICctOTk5OXB4JztcbiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlbCk7XG4gICAgICAgIGVsLnNlbGVjdCgpO1xuICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgnY29weScpO1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGVsKTtcbiAgICB9XG5cbiAgICBhc3luYyBfcHJpbnRQZGYoYmFzZVNlcnZpY2U6IEJhc2VTZXJ2aWNlLCBpZDogc3RyaW5nLCByb3dEYXRhOiBhbnkpIHtcbiAgICAgICAgY29uc3QgaXRlbURldGFpbCA9IChhd2FpdCBiYXNlU2VydmljZS5nZXREZXRhaWwoaWQpKS5kYXRhO1xuICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgYmFzZVNlcnZpY2UuZ2V0RGF0YVRyaW5oS3koaXRlbURldGFpbCwgcm93RGF0YSk7XG4gICAgICAgIHJldHVybiB0aGlzLl9wcmludFBkZkJhc2UoYmFzZVNlcnZpY2UsIGlkLCBkYXRhKTtcbiAgICB9XG5cbiAgICBhc3luYyBfcHJpbnRQZGZCeVNjaGVtYShiYXNlU2VydmljZTogQmFzZVNlcnZpY2UsIG1vZGVsOiBhbnksIHNjaGVtYXM6IEZvcm1TY2hlbWFCYXNlW10pIHtcbiAgICAgICAgY29uc3QgdG1wTW9kZWwgPSB7IC4uLm1vZGVsIH07XG4gICAgICAgIGRlbGV0ZSB0bXBNb2RlbC5wcmludEZpbGVJZDtcbiAgICAgICAgY29uc3QgZGF0YSA9IFtdO1xuICAgICAgICBhd2FpdCB0aGlzLl9nZXRLZXlWYWx1ZShkYXRhLCAnJywgc2NoZW1hcywgdG1wTW9kZWwpO1xuICAgICAgICByZXR1cm4gdGhpcy5fcHJpbnRQZGZCYXNlKGJhc2VTZXJ2aWNlLCBtb2RlbC5pZCwgZGF0YSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBfcHJpbnRQZGZCYXNlKGJhc2VTZXJ2aWNlOiBCYXNlU2VydmljZSwgaWQ6IHN0cmluZywgZGF0YTogYW55W10pIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIHJldHVybiBiYXNlU2VydmljZS5leHBvcnRUb1BkZihpZCwgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgIHRpZXVEZTogYmFzZVNlcnZpY2Uub2JqZWN0TmFtZSxcbiAgICAgICAgICAgICAgICBkYXRhXG4gICAgICAgICAgICB9KSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgcmV0dXJuIDxSZXNwb25zZVJlc3VsdD57XG4gICAgICAgICAgICAgICAgc3VjY2VzczogZmFsc2UsXG4gICAgICAgICAgICAgICAgbWVzc2FnZTogJ0PDsyBs4buXaSB44bqjeSByYSdcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldExhYmVsKHByZWZpeDogc3RyaW5nLCBsYWJlbDogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiBgJHtwcmVmaXh9JHtsYWJlbH1gO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2dldFZhbHVlRnJvbURhdGFzb3VyY2UoaXRlbVNlbGVjdGVkOiBhbnksIGlzTXVsdGlwbGU6IGJvb2xlYW4sIGZ1bmNHZXRMYWJlbDogKGl0ZW0pID0+IHN0cmluZykge1xuICAgICAgICBsZXQgdmFsdWUgPSBudWxsO1xuICAgICAgICBpZiAoaXNNdWx0aXBsZSkge1xuICAgICAgICAgICAgaWYgKGl0ZW1TZWxlY3RlZCAmJiBpdGVtU2VsZWN0ZWQubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gaXRlbVNlbGVjdGVkLm1hcChxID0+IGZ1bmNHZXRMYWJlbChxLnZhbHVlKSkuam9pbignLCAnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpdGVtU2VsZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IGZ1bmNHZXRMYWJlbChpdGVtU2VsZWN0ZWQudmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICBhc3luYyBfZ2V0S2V5VmFsdWUocmVzdWx0OiBhbnlbXSwgcHJlZml4OiBzdHJpbmcsIHNjaGVtYXM6IEZvcm1TY2hlbWFCYXNlW10sIG1vZGVsOiBhbnkpIHtcbiAgICAgICAgZm9yIChjb25zdCBzY2hlbWEgb2Ygc2NoZW1hcykge1xuICAgICAgICAgICAgaWYgKCFzY2hlbWEuaGlkZGVuXG4gICAgICAgICAgICAgICAgJiYgc2NoZW1hLmZpZWxkICE9ICdwcmludEZpbGVJZCdcbiAgICAgICAgICAgICAgICAmJiBzY2hlbWEubGFiZWxcbiAgICAgICAgICAgICAgICAmJiAhKHNjaGVtYSBpbnN0YW5jZW9mIEZpbGVVcGxvYWRDb250cm9sU2NoZW1hKVxuICAgICAgICAgICAgICAgICYmICEoc2NoZW1hIGluc3RhbmNlb2YgRmlsZU1hbmFnZXJDb250cm9sU2NoZW1hKVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gbW9kZWxbc2NoZW1hLmZpZWxkXTtcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkgdmFsdWUgPSBudWxsO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmdldExhYmVsKHByZWZpeCwgc2NoZW1hLmxhYmVsKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBUYWJsZVNjaGVtYSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCB0bXBTY2hlbWEgPSA8VGFibGVTY2hlbWE+c2NoZW1hO1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gbnVsbCkgdmFsdWUgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZ2V0TGFiZWwocHJlZml4LCBzY2hlbWEubGFiZWwpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHJvd0RhdGEgb2YgdmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLl9nZXRLZXlWYWx1ZShyZXN1bHQsIGAke3ByZWZpeH1cXHRgLCB0bXBTY2hlbWEucm93VGVtcGxhdGUsIHJvd0RhdGEpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogbnVsbFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnNwbGljZShyZXN1bHQubGVuZ3RoIC0gMSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgQWRkcmVzc0NvbnRyb2xTY2hlbWEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdG1wU2NoZW1hID0gPEFkZHJlc3NDb250cm9sU2NoZW1hPnNjaGVtYTtcbiAgICAgICAgICAgICAgICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuZ2V0TGFiZWwocHJlZml4LCBzY2hlbWEubGFiZWwpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IG51bGxcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuX2dldEtleVZhbHVlKHJlc3VsdCwgYCR7cHJlZml4fVxcdGAsIHRtcFNjaGVtYS5fY29tcG9uZW50LnNldHRpbmcuc2NoZW1hLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hIGluc3RhbmNlb2YgRGF0ZVRpbWVDb250cm9sU2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGdldFN0cmluZ0RhdGVWTih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgQ29DYXVUb0NodWNQaWNrZXJDb250cm9sU2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtU2VsZWN0ZWQgPSBhd2FpdCBzY2hlbWEuX2NvbXBvbmVudC5jb250cm9sUGlja2VyLl9jb21wb25lbnQuZ2V0RGF0YVNlbGVjdGVkVmFsdWUodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG1wU2NoZW1hID0gPENvQ2F1VG9DaHVjUGlja2VyQ29udHJvbFNjaGVtYT5zY2hlbWE7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZnVuY0dldExhYmVsID0gdG1wU2NoZW1hLmZ1bmNHZXRMYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZnVuY0dldExhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY0dldExhYmVsID0gaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdGVtLnZhbHVlW3RtcFNjaGVtYS5kaXNwbGF5RmllbGRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuX2dldFZhbHVlRnJvbURhdGFzb3VyY2UoaXRlbVNlbGVjdGVkLCBzY2hlbWEubXVsdGlwbGUsIGl0ZW0gPT4gaXRlbS50ZW4pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLm11bHRpcGxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1TZWxlY3RlZC5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEuZnVuY0dldExhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGl0ZW1TZWxlY3RlZC5tYXAocSA9PiB0bXBTY2hlbWEuZnVuY0dldExhYmVsKHEudmFsdWUpKS5qb2luKCcsICcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBpdGVtU2VsZWN0ZWQubWFwKHEgPT4gcS52YWx1ZVt0bXBTY2hlbWEuZGlzcGxheUZpZWxkXSkuam9pbignLCAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2NoZW1hLmZ1bmNHZXRMYWJlbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzY2hlbWEuZnVuY0dldExhYmVsKGl0ZW1TZWxlY3RlZC52YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGl0ZW1TZWxlY3RlZC52YWx1ZVtzY2hlbWEuZGlzcGxheUZpZWxkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBBdXRvQ29tcGxldGVQaWNrZXJDb250cm9sU2NoZW1hKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtU2VsZWN0ZWQgPSBhd2FpdCBzY2hlbWEuX2NvbXBvbmVudC5nZXREYXRhU2VsZWN0ZWRWYWx1ZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0bXBTY2hlbWEgPSA8QXV0b0NvbXBsZXRlUGlja2VyQ29udHJvbFNjaGVtYT5zY2hlbWE7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZnVuY0dldExhYmVsID0gdG1wU2NoZW1hLmZ1bmNHZXRMYWJlbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZnVuY0dldExhYmVsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY0dldExhYmVsID0gaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpdGVtKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbVt0bXBTY2hlbWEuZGlzcGxheUZpZWxkXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fZ2V0VmFsdWVGcm9tRGF0YXNvdXJjZShpdGVtU2VsZWN0ZWQsIHNjaGVtYS5tdWx0aXBsZSwgZnVuY0dldExhYmVsKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChzY2hlbWEgaW5zdGFuY2VvZiBDb0NhdVRvQ2h1Y0NvbnRyb2xTY2hlbWEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHRtcFNjaGVtYSA9IDxDb0NhdVRvQ2h1Y0NvbnRyb2xTY2hlbWE+c2NoZW1hO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZnVuY0dldExhYmVsID0gaXRlbSA9PiBpdGVtLmxhYmVsO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGFTb3VyY2UgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGl0ZW1TZWxlY3RlZCA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodG1wU2NoZW1hLl9jb21wb25lbnQubXVsdGlTZWxlY3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlID0gdG1wU2NoZW1hLl9jb21wb25lbnQubXVsdGlTZWxlY3QuX29wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVNlbGVjdGVkID0gZGF0YVNvdXJjZS5maWx0ZXIocSA9PiB2YWx1ZS5pbmRleE9mKHggPT4geCA9PSBxLnZhbHVlKSkubWFwKHEgPT4gKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlID0gdG1wU2NoZW1hLl9jb21wb25lbnQuZHJvcGRvd24uX29wdGlvbnM7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVNlbGVjdGVkID0gZGF0YVNvdXJjZS5maW5kKHEgPT4gcS52YWx1ZSA9PSB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGl0ZW1TZWxlY3RlZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtU2VsZWN0ZWQgPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbVNlbGVjdGVkXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLl9nZXRWYWx1ZUZyb21EYXRhc291cmNlKGl0ZW1TZWxlY3RlZCwgc2NoZW1hLm11bHRpcGxlLCBmdW5jR2V0TGFiZWwpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHNjaGVtYSBpbnN0YW5jZW9mIERyb3Bkb3duQ29udHJvbFNjaGVtYSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdG1wU2NoZW1hID0gPERyb3Bkb3duQ29udHJvbFNjaGVtYT5zY2hlbWE7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaXRlbVNlbGVjdGVkID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY2hlbWEubXVsdGlwbGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtU2VsZWN0ZWQgPSBzY2hlbWEuX2NvbXBvbmVudC5kYXRhU291cmNlSW50ZXJuYWwuZmlsdGVyKHEgPT4gdmFsdWUuaW5kZXhPZih4ID0+IHggPT0gcS52YWx1ZVtxLnZhbHVlLl9kcm9wZG93bnZhbHVlXSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbVNlbGVjdGVkID0gc2NoZW1hLl9jb21wb25lbnQuZGF0YVNvdXJjZUludGVybmFsLmZpbmQocSA9PiBxLnZhbHVlW3EudmFsdWUuX2Ryb3Bkb3dudmFsdWVdID09IHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5fZ2V0VmFsdWVGcm9tRGF0YXNvdXJjZShpdGVtU2VsZWN0ZWQsIHNjaGVtYS5tdWx0aXBsZSwgdG1wU2NoZW1hLmZ1bmNHZXRMYWJlbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc2NoZW1hIGluc3RhbmNlb2YgQ2hlY2tib3hDb250cm9sU2NoZW1hIHx8IHNjaGVtYSBpbnN0YW5jZW9mIFN3aXRjaENvbnRyb2xTY2hlbWEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUpIHZhbHVlID0gJ0tow7RuZyc7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHZhbHVlID0gJ0PDsyc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gVmFsdWUgPSB1bmRlZmluZWQgdGjDrCBraGkgc2VyaWFsaXplIHPhur0gYuG7iyBt4bqldCBwcm9wXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkKSB2YWx1ZSA9IG51bGw7XG4gICAgICAgICAgICAgICAgICAgIHJlc3VsdC5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmdldExhYmVsKHByZWZpeCwgc2NoZW1hLmxhYmVsKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGdldFN0cmluZ0RhdGUodmFsdWUpOiBzdHJpbmcge1xuICAgICAgICBpZiAoIXZhbHVlKSByZXR1cm4gJyc7XG4gICAgICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIERhdGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kYXRlUGlwZS50cmFuc2Zvcm0odmFsdWUsICdkZC9NTS95eXl5Jyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGVQaXBlLnRyYW5zZm9ybShkYXRlLCAnZGQvTU0veXl5eScpO1xuICAgIH1cbiAgICAvLyBodHRwOi8vbG9jYWxob3N0OjI3MjMwL3VuaXZlcnNhbC1saW5rP3NlcnZpY2VDb2RlPWNvbmd2aWVjJmVudGl0eT1ETV9Qcmlvcml0eSZlbnRpdHlLZXk9MDkxMWYzZTctM2RiMC00YjY4LTg3Y2QtMDdkNDI1NzQxZTllJnN0YXRlPSZzb3VyY2VQYXRoPWh0dHA6Ly9sb2NhbGhvc3Q6MjcyMzAvZG0tcHJpb3JpdHlcbiAgICBwYXJzZUF0dGFjaExpbmsoY29udGVudCkge1xuICAgICAgICBjb25zdCBsaW5rcyA9IGNvbnRlbnQuc3BsaXQoJ1xcclxcbicpO1xuICAgICAgICBjb25zdCBvcCA9IFtdO1xuICAgICAgICBmb3IgKGNvbnN0IGxpbmsgb2YgbGlua3MpIHtcbiAgICAgICAgICAgIGNvbnN0IGFyciA9IGxpbmsuc3BsaXQoJz8nKTtcbiAgICAgICAgICAgIGlmIChhcnIubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXAgPSBhcnJbMV07XG4gICAgICAgICAgICAgICAgY29uc3QgcXVlcnkgPSB0aGlzLnBhcnNlUXVlcnlTdHJpbmcodGVtcCk7XG4gICAgICAgICAgICAgICAgaWYgKHF1ZXJ5ICYmIHF1ZXJ5LnNlcnZpY2VDb2RlICYmIHF1ZXJ5LmVudGl0eSAmJiBxdWVyeS5lbnRpdHlLZXkpIHtcbiAgICAgICAgICAgICAgICAgICAgcXVlcnkucmF3TGluayA9IGxpbms7XG4gICAgICAgICAgICAgICAgICAgIG9wLnB1c2gocXVlcnkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBsaW5rICR7bGlua30gaW52YWxpZCB0byBwYXJzZWApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb3A7XG4gICAgfVxuICAgIHByaXZhdGUgcGFyc2VRdWVyeVN0cmluZyhxdWVyeTogc3RyaW5nKTogYW55IHtcbiAgICAgICAgaWYgKCFxdWVyeSkgcmV0dXJuIG51bGw7XG4gICAgICAgIGlmIChxdWVyeS5zdGFydHNXaXRoKCc/JykpIHF1ZXJ5ID0gcXVlcnkuc3Vic3RyaW5nKDEpO1xuICAgICAgICBjb25zdCBhcnIgPSBxdWVyeS5zcGxpdCgnJicpO1xuICAgICAgICBjb25zdCBvYmogPSB7fTtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGFycikge1xuICAgICAgICAgICAgY29uc3QgdGVtcCA9IGl0ZW0uc3BsaXQoJz0nKTtcbiAgICAgICAgICAgIGlmICh0ZW1wWzFdKSB7XG4gICAgICAgICAgICAgICAgb2JqW3RlbXBbMF1dID0gZGVjb2RlVVJJQ29tcG9uZW50KHRlbXBbMV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgb2JqW3RlbXBbMF1dID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gb2JqO1xuICAgIH1cbiAgICBhc3luYyBnZXRDb3B5UGF0aChzZXR0aW5nOiBDcnVkTGlzdFNldHRpbmcsIHJvd0RhdGE6IGFueSwgcGVybWlzc2lvbjogUGVybWlzc2lvbkJhc2UgPSBQZXJtaXNzaW9uQmFzZS5SRUFEKSB7XG4gICAgICAgIGNvbnN0IGl0ZW1TaGFyZXM6IE1vZGVsU2hhcmVMaW5rQnlQZXJtaXNzaW9uID0gbmV3IE1vZGVsU2hhcmVMaW5rQnlQZXJtaXNzaW9uKCk7XG4gICAgICAgIGl0ZW1TaGFyZXMubGlua1RvTWVudSA9IGAke3RvcC5sb2NhdGlvbi5vcmlnaW59JHt0b3AubG9jYXRpb24ucGF0aG5hbWV9YDtcbiAgICAgICAgaXRlbVNoYXJlcy5zb3VyY2VQYXRoID0gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KHRvcC5sb2NhdGlvbi5ocmVmKX1gO1xuICAgICAgICBpdGVtU2hhcmVzLnRhcmdldFBhdGggPSBgJHtlbmNvZGVVUklDb21wb25lbnQoc2V0dGluZy50YXJnZXRQYXRoKX1gO1xuICAgICAgICBpdGVtU2hhcmVzLm9iamVjdERpc3BsYXlOYW1lID0gYCR7ZW5jb2RlVVJJQ29tcG9uZW50KHNldHRpbmcub2JqZWN0TmFtZSl9YDtcbiAgICAgICAgbGV0IGRpc3BsYXlGaWVsZCA9ICcnO1xuICAgICAgICBpZiAoc2V0dGluZy5kaXNwbGF5RmllbGQpIHtcbiAgICAgICAgICAgIGRpc3BsYXlGaWVsZCA9IHRoaXMuX2NvbW1vblNlcnZpY2UuaXNTdHJpbmcoc2V0dGluZy5kaXNwbGF5RmllbGQpID8gc2V0dGluZy5kaXNwbGF5RmllbGQgOiAoc2V0dGluZy5kaXNwbGF5RmllbGQgYXMgYW55KSgpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgICBjb25zdCBsaW5rQ29sdW1uID0gc2V0dGluZy5jb2xzLmZpbmQoeCA9PiB4LnNob3dFZGl0TGluayk7XG4gICAgICAgICAgICBkaXNwbGF5RmllbGQgPSBsaW5rQ29sdW1uPy5maWVsZDtcbiAgICAgICAgICAgIGlmICghZGlzcGxheUZpZWxkKSB7XG4gICAgICAgICAgICAgICAgZGlzcGxheUZpZWxkID0gJ2lkJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpdGVtU2hhcmVzLmRpc3BsYXlGaWVsZCA9IGRpc3BsYXlGaWVsZDtcbiAgICAgICAgaXRlbVNoYXJlcy5sc3RJdGVtRGF0YSA9IFtdO1xuICAgICAgICBjb25zdCBzdGF0ZSA9IGF3YWl0IHRoaXMuZ2V0TGlua1N0YXRlKHJvd0RhdGEpO1xuICAgICAgICBpdGVtU2hhcmVzLmxzdEl0ZW1EYXRhLnB1c2goe1xuICAgICAgICAgICAgaXRlbUlkOiByb3dEYXRhLmlkLFxuICAgICAgICAgICAgcGVybWlzc2lvbixcbiAgICAgICAgICAgIHN0YXRlOiBlbmNvZGVVUklDb21wb25lbnQoc3RhdGUpXG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBkaWNQZXJtaXNzaW9uSWQgPSAoYXdhaXQgc2V0dGluZy5iYXNlU2VydmljZS5nZXRTaGFyZWRLZXkoaXRlbVNoYXJlcykpLmRhdGE7XG4gICAgICAgIGlmICghZGljUGVybWlzc2lvbklkKSB7XG4gICAgICAgICAgICB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKS5zaG93V2FybmluZygnQuG6oW4ga2jDtG5nIGPDsyBxdXnhu4FuIGNoaWEgc+G6uyBi4bqjbiBnaGknKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgcGF0aCA9ICcnO1xuICAgICAgICBpdGVtU2hhcmVzLmxzdEl0ZW1EYXRhLmZvckVhY2goaXRlbURhdGEgPT4ge1xuICAgICAgICAgICAgcGF0aCArPSBgJHtkaWNQZXJtaXNzaW9uSWRbaXRlbURhdGEuaXRlbUlkXX1cXG5gO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBhdGg7XG4gICAgfVxuXG4gICAgYXN5bmMgZ2V0TGlua1N0YXRlKHJvd0RhdGE6IGFueSkge1xuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgZ2V0RGVmYXVsdFNldHRpbmdzKCk6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0ge1xuICAgICAgICBjb25zdCBsb2NhbERhdGEgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5ERUZBVUxUX0RBVEEpO1xuICAgICAgICBpZiAobG9jYWxEYXRhICE9IG51bGwgJiYgbG9jYWxEYXRhICE9ICcnKSB7XG4gICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShsb2NhbERhdGEpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB7fTtcbiAgICB9XG59XG4iXX0=
|