@wavemaker/app-ng-runtime 11.14.3-rc.6401 → 11.15.0-2.247
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/build-task/bundles/index.umd.js +13 -2
- package/build-task/esm2022/input/default/checkbox/checkbox.build.mjs +9 -2
- package/build-task/esm2022/input/default/radioset/radioset.build.mjs +6 -2
- package/build-task/fesm2022/index.mjs +13 -2
- package/build-task/fesm2022/index.mjs.map +1 -1
- package/components/base/bundles/index.umd.js +271 -128
- package/components/base/esm2022/public_api.mjs +2 -2
- package/components/base/esm2022/utils/autolayout-utils.mjs +252 -0
- package/components/base/esm2022/utils/live-utils.mjs +10 -7
- package/components/base/esm2022/utils/widget-utils.mjs +8 -1
- package/components/base/esm2022/widgets/common/base/base.component.mjs +7 -8
- package/components/base/esm2022/widgets/common/base/partial-container.directive.mjs +4 -1
- package/components/base/esm2022/widgets/common/container/container.directive.mjs +28 -150
- package/components/base/esm2022/widgets/common/container/container.props.mjs +6 -2
- package/components/base/fesm2022/index.mjs +273 -129
- package/components/base/fesm2022/index.mjs.map +1 -1
- package/components/base/public_api.d.ts +1 -1
- package/components/base/utils/autolayout-utils.d.ts +29 -0
- package/components/base/utils/widget-utils.d.ts +1 -0
- package/components/base/widgets/common/container/container.directive.d.ts +7 -9
- package/components/basic/label/bundles/index.umd.js +4 -0
- package/components/basic/label/esm2022/label.directive.mjs +5 -1
- package/components/basic/label/fesm2022/index.mjs +4 -0
- package/components/basic/label/fesm2022/index.mjs.map +1 -1
- package/components/basic/search/bundles/index.umd.js +13 -11
- package/components/basic/search/esm2022/search.component.mjs +14 -12
- package/components/basic/search/fesm2022/index.mjs +13 -11
- package/components/basic/search/fesm2022/index.mjs.map +1 -1
- package/components/chart/bundles/index.umd.js +2 -2
- package/components/chart/esm2022/chart.utils.mjs +3 -3
- package/components/chart/fesm2022/index.mjs +2 -2
- package/components/chart/fesm2022/index.mjs.map +1 -1
- package/components/containers/accordion/accordion-pane/accordion-pane.component.d.ts +2 -0
- package/components/containers/accordion/accordion.directive.d.ts +4 -0
- package/components/containers/accordion/bundles/index.umd.js +34 -0
- package/components/containers/accordion/esm2022/accordion-pane/accordion-pane.component.mjs +6 -2
- package/components/containers/accordion/esm2022/accordion.directive.mjs +32 -2
- package/components/containers/accordion/fesm2022/index.mjs +36 -2
- package/components/containers/accordion/fesm2022/index.mjs.map +1 -1
- package/components/containers/tabs/bundles/index.umd.js +34 -0
- package/components/containers/tabs/esm2022/tab-pane/tab-pane.component.mjs +6 -2
- package/components/containers/tabs/esm2022/tabs.component.mjs +33 -4
- package/components/containers/tabs/fesm2022/index.mjs +36 -2
- package/components/containers/tabs/fesm2022/index.mjs.map +1 -1
- package/components/containers/tabs/tab-pane/tab-pane.component.d.ts +2 -0
- package/components/containers/tabs/tabs.component.d.ts +5 -1
- package/components/containers/wizard/bundles/index.umd.js +46 -2
- package/components/containers/wizard/esm2022/wizard-step/wizard-step.component.mjs +8 -2
- package/components/containers/wizard/esm2022/wizard.component.mjs +42 -4
- package/components/containers/wizard/fesm2022/index.mjs +48 -4
- package/components/containers/wizard/fesm2022/index.mjs.map +1 -1
- package/components/containers/wizard/wizard-step/wizard-step.component.d.ts +4 -0
- package/components/containers/wizard/wizard.component.d.ts +1 -0
- package/components/data/form/bundles/index.umd.js +28 -1
- package/components/data/form/esm2022/form-field/form-field.directive.mjs +4 -1
- package/components/data/form/esm2022/form.component.mjs +24 -2
- package/components/data/form/esm2022/form.props.mjs +3 -2
- package/components/data/form/esm2022/live-filter/live-filter.directive.mjs +2 -1
- package/components/data/form/fesm2022/index.mjs +29 -2
- package/components/data/form/fesm2022/index.mjs.map +1 -1
- package/components/data/form/form.component.d.ts +3 -0
- package/components/data/list/bundles/index.umd.js +0 -9
- package/components/data/list/esm2022/list-item.directive.mjs +1 -10
- package/components/data/list/fesm2022/index.mjs +0 -9
- package/components/data/list/fesm2022/index.mjs.map +1 -1
- package/components/data/pagination/bundles/index.umd.js +6 -2
- package/components/data/pagination/esm2022/pagination.component.mjs +7 -3
- package/components/data/pagination/fesm2022/index.mjs +6 -2
- package/components/data/pagination/fesm2022/index.mjs.map +1 -1
- package/components/data/table/bundles/index.umd.js +22 -5
- package/components/data/table/esm2022/table.component.mjs +23 -6
- package/components/data/table/fesm2022/index.mjs +22 -5
- package/components/data/table/fesm2022/index.mjs.map +1 -1
- package/components/dialogs/alert-dialog/alert-dialog.component.d.ts +6 -2
- package/components/dialogs/alert-dialog/bundles/index.umd.js +18 -8
- package/components/dialogs/alert-dialog/esm2022/alert-dialog.component.mjs +17 -7
- package/components/dialogs/alert-dialog/fesm2022/index.mjs +15 -5
- package/components/dialogs/alert-dialog/fesm2022/index.mjs.map +1 -1
- package/components/input/checkbox/bundles/index.umd.js +12 -3
- package/components/input/checkbox/checkbox.component.d.ts +2 -0
- package/components/input/checkbox/esm2022/checkbox.component.mjs +9 -3
- package/components/input/checkbox/esm2022/checkbox.props.mjs +5 -2
- package/components/input/checkbox/fesm2022/index.mjs +12 -3
- package/components/input/checkbox/fesm2022/index.mjs.map +1 -1
- package/components/input/checkboxset/bundles/index.umd.js +12 -1
- package/components/input/checkboxset/checkboxset.component.d.ts +1 -0
- package/components/input/checkboxset/esm2022/checkboxset.component.mjs +11 -1
- package/components/input/checkboxset/esm2022/checkboxset.props.mjs +3 -2
- package/components/input/checkboxset/fesm2022/index.mjs +12 -1
- package/components/input/checkboxset/fesm2022/index.mjs.map +1 -1
- package/components/input/epoch/base-date-time/base-date-time.component.d.ts +0 -1
- package/components/input/epoch/base-date-time/bundles/index.umd.js +29 -27
- package/components/input/epoch/base-date-time/esm2022/base-date-time.component.mjs +30 -28
- package/components/input/epoch/base-date-time/fesm2022/index.mjs +29 -27
- package/components/input/epoch/base-date-time/fesm2022/index.mjs.map +1 -1
- package/components/input/epoch/date/bundles/index.umd.js +4 -3
- package/components/input/epoch/date/esm2022/date.component.mjs +5 -4
- package/components/input/epoch/date/fesm2022/index.mjs +4 -3
- package/components/input/epoch/date/fesm2022/index.mjs.map +1 -1
- package/components/input/epoch/date-time/bundles/index.umd.js +5 -4
- package/components/input/epoch/date-time/esm2022/date-time.component.mjs +7 -6
- package/components/input/epoch/date-time/fesm2022/index.mjs +6 -5
- package/components/input/epoch/date-time/fesm2022/index.mjs.map +1 -1
- package/components/input/file-upload/bundles/index.umd.js +1 -1
- package/components/input/file-upload/esm2022/file-upload.props.mjs +2 -2
- package/components/input/file-upload/fesm2022/index.mjs +1 -1
- package/components/input/file-upload/fesm2022/index.mjs.map +1 -1
- package/components/input/radioset/bundles/index.umd.js +13 -1
- package/components/input/radioset/esm2022/radioset.component.mjs +11 -1
- package/components/input/radioset/esm2022/radioset.props.mjs +4 -2
- package/components/input/radioset/fesm2022/index.mjs +13 -1
- package/components/input/radioset/fesm2022/index.mjs.map +1 -1
- package/components/input/radioset/radioset.component.d.ts +1 -0
- package/components/input/slider/bundles/index.umd.js +86 -16
- package/components/input/slider/esm2022/slider.component.mjs +76 -9
- package/components/input/slider/esm2022/slider.props.mjs +5 -1
- package/components/input/slider/fesm2022/index.mjs +79 -8
- package/components/input/slider/fesm2022/index.mjs.map +1 -1
- package/components/input/slider/slider.component.d.ts +12 -3
- package/components/input/text/bundles/index.umd.js +28 -3
- package/components/input/text/esm2022/input-text/input-text.component.mjs +10 -3
- package/components/input/text/esm2022/input-text/input-text.props.mjs +5 -2
- package/components/input/text/esm2022/number-locale/number-locale.mjs +16 -1
- package/components/input/text/fesm2022/index.mjs +28 -3
- package/components/input/text/fesm2022/index.mjs.map +1 -1
- package/components/input/text/input-text/input-text.component.d.ts +5 -0
- package/components/input/text/number-locale/number-locale.d.ts +12 -0
- package/components/navigation/breadcrumb/bundles/index.umd.js +2 -2
- package/components/navigation/breadcrumb/esm2022/breadcrumb.component.mjs +3 -3
- package/components/navigation/breadcrumb/fesm2022/index.mjs +2 -2
- package/components/navigation/breadcrumb/fesm2022/index.mjs.map +1 -1
- package/components/navigation/popover/bundles/index.umd.js +12 -0
- package/components/navigation/popover/esm2022/popover.component.mjs +13 -1
- package/components/navigation/popover/fesm2022/index.mjs +12 -0
- package/components/navigation/popover/fesm2022/index.mjs.map +1 -1
- package/components/navigation/popover/popover.component.d.ts +2 -0
- package/components/page/default/bundles/index.umd.js +0 -4
- package/components/page/default/esm2022/router-outlet.directive.mjs +1 -5
- package/components/page/default/fesm2022/index.mjs +0 -4
- package/components/page/default/fesm2022/index.mjs.map +1 -1
- package/components/page/header/bundles/index.umd.js +4 -3
- package/components/page/header/esm2022/header.component.mjs +5 -4
- package/components/page/header/fesm2022/index.mjs +4 -3
- package/components/page/header/fesm2022/index.mjs.map +1 -1
- package/components/page/header/header.component.d.ts +2 -1
- package/core/bundles/index.umd.js +90 -6
- package/core/enums/enums.d.ts +1 -0
- package/core/esm2022/enums/enums.mjs +2 -1
- package/core/esm2022/utils/build-utils.mjs +5 -1
- package/core/esm2022/utils/utils.mjs +5 -2
- package/core/esm2022/utils/watcher.mjs +83 -4
- package/core/fesm2022/index.mjs +91 -4
- package/core/fesm2022/index.mjs.map +1 -1
- package/core/utils/watcher.d.ts +2 -0
- package/npm-shrinkwrap.json +2 -2
- package/oAuth/esm2022/oAuth.service.mjs +1 -1
- package/oAuth/fesm2022/index.mjs.map +1 -1
- package/oAuth/oAuth.service.d.ts +1 -1
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/runtime/base/bundles/index.umd.js +33 -31
- package/runtime/base/components/base-prefab.component.d.ts +6 -4
- package/runtime/base/esm2022/components/app-component/app.component.mjs +1 -1
- package/runtime/base/esm2022/components/base-page.component.mjs +2 -5
- package/runtime/base/esm2022/components/base-partial.component.mjs +2 -2
- package/runtime/base/esm2022/components/base-prefab.component.mjs +20 -12
- package/runtime/base/esm2022/components/base-spa-page.component.mjs +1 -4
- package/runtime/base/esm2022/services/http-interceptor.services.mjs +14 -13
- package/runtime/base/fesm2022/index.mjs +34 -31
- package/runtime/base/fesm2022/index.mjs.map +1 -1
- package/runtime/base/runtime-base.module.d.ts +2 -1
- package/runtime/dynamic/app/app.config.d.ts +1 -1
- package/runtime/dynamic/bundles/index.umd.js +1 -1
- package/runtime/dynamic/esm2022/app/app.config.mjs +7 -7
- package/runtime/dynamic/fesm2022/index.mjs +2 -2
- package/runtime/dynamic/fesm2022/index.mjs.map +1 -1
- package/scripts/datatable/datatable.js +17 -15
|
@@ -12,6 +12,7 @@ let NumberLocale = class NumberLocale extends BaseInput {
|
|
|
12
12
|
this.trailingZeroDecimalPipe = trailingZeroDecimalPipe;
|
|
13
13
|
this.isDefaultQuery = true;
|
|
14
14
|
this.decimalValue = '';
|
|
15
|
+
this.invalidPattern = false;
|
|
15
16
|
this.selectedLocale = i18nService.getSelectedLocale();
|
|
16
17
|
this.DECIMAL = getLocaleNumberSymbol(this.localefilter || this.selectedLocale, NumberSymbol.Decimal);
|
|
17
18
|
this.GROUP = getLocaleNumberSymbol(this.localefilter || this.selectedLocale, NumberSymbol.Group);
|
|
@@ -218,6 +219,10 @@ let NumberLocale = class NumberLocale extends BaseInput {
|
|
|
218
219
|
else {
|
|
219
220
|
this.displayValue = input.value = this.transformNumber(this.proxyModel);
|
|
220
221
|
}
|
|
222
|
+
if (this.trailingzero) {
|
|
223
|
+
const regexObj = new RegExp(this.regexPattern);
|
|
224
|
+
this.invalidPattern = !regexObj.test(this.displayValue);
|
|
225
|
+
}
|
|
221
226
|
// in safari browser, setSelectionRange will focus the input by default, which may invoke the focus event on widget.
|
|
222
227
|
// Hence preventing the setSelectionRange when default value is set i.e. widget is not focused.
|
|
223
228
|
if (this.updateon === 'default' && !this.isDefaultQuery) {
|
|
@@ -418,6 +423,13 @@ let NumberLocale = class NumberLocale extends BaseInput {
|
|
|
418
423
|
},
|
|
419
424
|
};
|
|
420
425
|
}
|
|
426
|
+
if (this.invalidPattern) {
|
|
427
|
+
return {
|
|
428
|
+
pattern: {
|
|
429
|
+
valid: false
|
|
430
|
+
}
|
|
431
|
+
};
|
|
432
|
+
}
|
|
421
433
|
this.validateType = '';
|
|
422
434
|
/* WMS-18269 | Extending the existing validation for 'required' */
|
|
423
435
|
if (this['show'] && this['required']) {
|
|
@@ -514,6 +526,9 @@ let NumberLocale = class NumberLocale extends BaseInput {
|
|
|
514
526
|
this.onInputChange(nv);
|
|
515
527
|
}
|
|
516
528
|
}
|
|
529
|
+
else if (key === 'regexp') {
|
|
530
|
+
this.regexPattern = nv;
|
|
531
|
+
}
|
|
517
532
|
else {
|
|
518
533
|
super.onPropertyChange(key, nv, ov);
|
|
519
534
|
}
|
|
@@ -536,4 +551,4 @@ NumberLocale = __decorate([
|
|
|
536
551
|
TrailingZeroDecimalPipe, Object])
|
|
537
552
|
], NumberLocale);
|
|
538
553
|
export { NumberLocale };
|
|
539
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLWxvY2FsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9pbnB1dC90ZXh0L3NyYy9udW1iZXItbG9jYWxlL251bWJlci1sb2NhbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdEUsT0FBTyxFQUFDLG1CQUFtQixFQUFFLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUN4RCxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXhGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWhHLElBQXNCLFlBQVksR0FBbEMsTUFBc0IsWUFBYSxTQUFRLFNBQVM7SUF5QmhELFlBQ0ksR0FBYSxFQUNiLE1BQXFCLEVBQ2IsV0FBZ0MsRUFDaEMsdUJBQWdELEVBQ2hCLGVBQW9CO1FBRTVELEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBSjVCLGdCQUFXLEdBQVgsV0FBVyxDQUFxQjtRQUNoQyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBdEJwRCxtQkFBYyxHQUFZLElBQUksQ0FBQztRQUMvQixpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQXlCOUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxXQUFXLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztRQUN0RCxJQUFJLENBQUMsT0FB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SSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ3BDLElBQUksSUFBSSxDQUFDLGlCQUFpQixFQUFFLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLEVBQUMsSUFBSSxFQUFFLE1BQU0sRUFBQyxDQUFDLENBQUM7WUFDL0MsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDM0IsQ0FBQztRQUNMLENBQUM7YUFBTSxDQUFDO1lBQ0osS0FBSyxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDeEMsQ0FBQztJQUNMLENBQUM7SUFDTSxPQUFPLENBQUMsTUFBc0I7UUFDakMsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7UUFFeEQsS0FBSyxNQUFNLElBQUksSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUM1QixNQUFNLFNBQVMsR0FBRyxJQUFJLGFBQWEsQ0FBQyxVQUFVLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUMvRCxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsS0FBRyxLQUFLLEVBQUUsQ0FBQztnQkFDN0MsTUFBTSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUN4QixPQUFPO1lBQ1gsQ0FBQztRQUNMLENBQUM7SUFDTCxDQUFDO0NBRUosQ0FBQTtBQWprQnFCLFlBQVk7SUE4QnpCLFdBQUEsTUFBTSxDQUFDLGtCQUFrQixDQUFDLENBQUE7SUFBRSxXQUFBLFFBQVEsRUFBRSxDQUFBO3FDQUpsQyxRQUFRLFVBRVEsbUJBQW1CO1FBQ1AsdUJBQXVCO0dBN0IxQyxZQUFZLENBaWtCakMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0luamVjdCwgSW5qZWN0b3IsIE9wdGlvbmFsfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVmFsaWRhdG9yIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgZ2V0TG9jYWxlTnVtYmVyU3ltYm9sLCBOdW1iZXJTeW1ib2wgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuXG5pbXBvcnQge0Fic3RyYWN0STE4blNlcnZpY2UsIGlzRGVmaW5lZH0gZnJvbSAnQHdtL2NvcmUnO1xuaW1wb3J0IHsgSVdpZGdldENvbmZpZywgVHJhaWxpbmdaZXJvRGVjaW1hbFBpcGUsIElOUFVUTU9ERSB9IGZyb20gJ0B3bS9jb21wb25lbnRzL2Jhc2UnO1xuXG5pbXBvcnQgeyBCYXNlSW5wdXQgfSBmcm9tICcuLi9iYXNlLWlucHV0L2Jhc2UtaW5wdXQnO1xuaW1wb3J0IHtpbmNsdWRlcywgaW50ZXJzZWN0aW9uLCBpc051bGwsIGlzU3RyaW5nLCBpc1VuZGVmaW5lZCwgcm91bmQsIHRvQXJyYXl9IGZyb20gXCJsb2Rhc2gtZXNcIjtcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIE51bWJlckxvY2FsZSBleHRlbmRzIEJhc2VJbnB1dCBpbXBsZW1lbnRzIFZhbGlkYXRvciB7XG4gICAgcHJpdmF0ZSBERUNJTUFMOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBHUk9VUDogc3RyaW5nO1xuICAgIHByaXZhdGUgc2VsZWN0ZWRMb2NhbGU6IHN0cmluZztcbiAgICBwcml2YXRlIHByb3h5TW9kZWw6IG51bWJlcjtcbiAgICBwcml2YXRlIG51bWJlck5vdEluUmFuZ2U6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBpc0ludmFsaWROdW1iZXI6IGJvb2xlYW47XG4gICAgcHJpdmF0ZSBpc0RlZmF1bHRRdWVyeTogYm9vbGVhbiA9IHRydWU7XG4gICAgcHJpdmF0ZSBkZWNpbWFsVmFsdWU6IHN0cmluZyA9ICcnO1xuICAgIHB1YmxpYyBkaXNwbGF5VmFsdWU6IHN0cmluZztcbiAgICBwcml2YXRlIG51bWJlcmZpbHRlcjogc3RyaW5nO1xuICAgIHByaXZhdGUgbG9jYWxlZmlsdGVyOiBzdHJpbmc7XG4gICAgcHVibGljIHJlYWRvbmx5OiBib29sZWFuO1xuXG4gICAgcHVibGljIHBsYWNlaG9sZGVyOiBzdHJpbmc7XG4gICAgcHVibGljIG1pbnZhbHVlOiBudW1iZXI7XG4gICAgcHVibGljIG1heHZhbHVlOiBudW1iZXI7XG4gICAgcHVibGljIHVwZGF0ZW9uOiBzdHJpbmc7XG4gICAgcHVibGljIHN0ZXA6IG51bWJlcjtcbiAgICBwdWJsaWMgdHJhaWxpbmd6ZXJvOiBib29sZWFuO1xuICAgIHByaXZhdGUgdmFsaWRhdGVUeXBlOiBzdHJpbmc7XG4gICAgcHVibGljIGlucHV0bW9kZTogc3RyaW5nO1xuICAgIHB1YmxpYyBkZWNpbWFscGxhY2VzOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBsYXN0VmFsSXNEZWNpbWFsOiBib29sZWFuO1xuXG4gICAgY29uc3RydWN0b3IoXG4gICAgICAgIGluajogSW5qZWN0b3IsXG4gICAgICAgIGNvbmZpZzogSVdpZGdldENvbmZpZyxcbiAgICAgICAgcHJpdmF0ZSBpMThuU2VydmljZTogQWJzdHJhY3RJMThuU2VydmljZSxcbiAgICAgICAgcHJpdmF0ZSB0cmFpbGluZ1plcm9EZWNpbWFsUGlwZTogVHJhaWxpbmdaZXJvRGVjaW1hbFBpcGUsXG4gICAgICAgIEBJbmplY3QoJ0VYUExJQ0lUX0NPTlRFWFQnKSBAT3B0aW9uYWwoKSBleHBsaWNpdENvbnRleHQ6IGFueVxuICAgICkge1xuICAgICAgICBzdXBlcihpbmosIGNvbmZpZywgZXhwbGljaXRDb250ZXh0KTtcbiAgICAgICAgdGhpcy5zZWxlY3RlZExvY2FsZSA9IGkxOG5TZXJ2aWNlLmdldFNlbGVjdGVkTG9jYWxlKCk7XG4gICAgICAgIHRoaXMuREVDSU1BTCA9IGdldExvY2FsZU51bWJlclN5bWJvbCh0aGlzLmxvY2FsZWZpbHRlciB8fCB0aGlzLnNlbGVjdGVkTG9jYWxlLCBOdW1iZXJTeW1ib2wuRGVjaW1hbCk7XG4gICAgICAgIHRoaXMuR1JPVVAgPSBnZXRMb2NhbGVOdW1iZXJTeW1ib2wodGhpcy5sb2NhbGVmaWx0ZXIgfHwgdGhpcy5zZWxlY3RlZExvY2FsZSwgTnVtYmVyU3ltYm9sLkdyb3VwKTtcbiAgICAgICAgdGhpcy5udW1iZXJmaWx0ZXIgPSAnMS4wLTE2JztcbiAgICAgICAgdGhpcy5yZXNldFZhbGlkYXRpb25zKCk7XG4gICAgfVxuXG4gICAgLy8gU2V0dGVyIGZvciB0aGUgZGF0YXZhbHVlLlxuICAgIC8vIEB0cy1pZ25vcmVcbiAgICBzZXQgZGF0YXZhbHVlKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgdGhpcy5sYXN0VmFsSXNEZWNpbWFsID0gZmFsc2U7XG5cbiAgICAgICAgLy8gc2V0IHRleHQgdmFsdWUgdG8gbnVsbCBpZiBkYXRhIHZhbHVlIGlzIGVtcHR5LlxuICAgICAgICAvLyBAdHMtaWdub3JlXG4gICAgICAgIGlmIChpbmNsdWRlcyhbbnVsbCwgdW5kZWZpbmVkLCAnJ10sIHZhbHVlKSkge1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHByZXZEYXRhVmFsdWUgPSAgKHRoaXMgYXMgYW55KS5wcmV2RGF0YXZhbHVlO1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSBpbnB1dC52YWx1ZSA9IHRoaXMucHJveHlNb2RlbCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLnJlc2V0VmFsaWRhdGlvbnMoKTtcbiAgICAgICAgICAgIC8vIEZpeCBmb3IgW1dNUy0yNzY0OF06IFdoZW4gYSBkZWNpbWFsIHZhbHVlIGlzIGVudGVyZWQgKGUuZy4sIFwiMy5cIiksIGRhdGF2YWx1ZSBhbmQgcHJldkRhdGF2YWx1ZSBiZWNvbWUgbnVsbCBhcyBpdCBpcyBhbiBpbnZhbGlkIG51bWJlci5cbiAgICAgICAgICAgIC8vIGhhbmRsZUNoYW5nZSgpIHNob3VsZCBiZSBjYWxsZWQgd2hlbiB0aGUgaW52YWxpZCBkYXRhdmFsdWUgKGUuZy4sIFwiMy5cIikgaXMgcmVtb3ZlZCwgYW5kIHRoZSB2YWx1ZSBiZWNvbWVzIGFuIGVtcHR5IHN0cmluZyAoXCJcIikuXG4gICAgICAgICAgICBpZiAoKHByZXZEYXRhVmFsdWUgfHwgcHJldkRhdGFWYWx1ZSA9PSAwIHx8IHByZXZEYXRhVmFsdWUgPT0gbnVsbCkgJiYgIXRoaXMuaXNEZWZhdWx0UXVlcnkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2UoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBpZiB0aGUgd2lkZ2V0IGhhcyBkZWZhdWx0IHZhbHVlIGFuZCBpZiB3ZSBjaGFuZ2UgdGhlIGxvY2FsZSwgdGhlIHZhbHVlIHNob3VsZCBiZSBpbiBzZWxlY3RlZCBsb2NhbGUgZm9ybWF0LlxuICAgICAgICBpZiAodGhpcy5pc0RlZmF1bHRRdWVyeSkge1xuICAgICAgICAgICAgY29uc3QgaXNMb2NhbGl6ZWROdW1iZXIgPSBpc1N0cmluZyh2YWx1ZSkgJiYgaW5jbHVkZXModmFsdWUsIHRoaXMuREVDSU1BTCk7XG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGlzTG9jYWxpemVkTnVtYmVyID8gKHZhbHVlIGFzIGFueSkuc3BsaXQodGhpcy5ERUNJTUFMKSA6IGlzU3RyaW5nKHZhbHVlKSAmJiAodmFsdWUgYXMgYW55KS5zcGxpdCgnLicpO1xuXG4gICAgICAgICAgICBsZXQgZGVjaW1hbFBsYWNlc0F0dHJWYWwgPSB0aGlzLmdldEF0dHIoJ2RlY2ltYWxwbGFjZXMnKTtcbiAgICAgICAgICAgIGNvbnN0IGRlY2ltYWxwbGFjZXMgPSBkZWNpbWFsUGxhY2VzQXR0clZhbCAhPT0gJycgJiYgZGVjaW1hbFBsYWNlc0F0dHJWYWwgIT09IHVuZGVmaW5lZCA/IE51bWJlcihkZWNpbWFsUGxhY2VzQXR0clZhbCkgOiBOYU47XG4gICAgICAgICAgICBpZih0aGlzLmlucHV0bW9kZSA9PT0gSU5QVVRNT0RFLk5BVFVSQUwgJiYgIWlzTmFOKGRlY2ltYWxwbGFjZXMpKSB7XG4gICAgICAgICAgICAgICAgaWYoZGVjaW1hbHBsYWNlcyA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmRlY2ltYWxWYWx1ZSA9ICcnO1xuICAgICAgICAgICAgICAgICAgICAodmFsdWUgYXMgYW55KSA9IGlzTG9jYWxpemVkTnVtYmVyID8gcGFydHNbMF0gOiB0aGlzLnRyYW5zZm9ybU51bWJlcihwYXJ0c1swXSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmKGRlY2ltYWxwbGFjZXMgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVjaW1hbFZhbHVlID0gcGFydHNbMV0gJiYgcGFydHNbMV0uc3Vic3RyaW5nKDAsIGRlY2ltYWxwbGFjZXMpIHx8ICcnO1xuICAgICAgICAgICAgICAgICAgICBpZihpc0xvY2FsaXplZE51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlIGFzIGFueSkgPSB0aGlzLmRlY2ltYWxWYWx1ZS5sZW5ndGggPyBgJHtwYXJ0c1swXX0ke3RoaXMuREVDSU1BTH0ke3RoaXMuZGVjaW1hbFZhbHVlfWAgOiBwYXJ0c1swXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICh2YWx1ZSBhcyBhbnkpID0gTnVtYmVyLnBhcnNlRmxvYXQoU3RyaW5nKHZhbHVlKSkudG9GaXhlZChkZWNpbWFscGxhY2VzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kZWNpbWFsVmFsdWUgPSBwYXJ0c1sxXSB8fCAnJztcbiAgICAgICAgICAgICAgICAodmFsdWUgYXMgYW55KSA9IGlzTG9jYWxpemVkTnVtYmVyID8gdmFsdWUgOiB0aGlzLnRyYW5zZm9ybU51bWJlcih2YWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBudW1iZXJSZWcgPSAvXFxkLztcbiAgICAgICAgY29uc3Qgc3RyVmFsID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgbGV0IG1vZGVsO1xuICAgICAgICAvLyBXaGVuIHRoZSBpbnB1dCB2YWx1ZSBvbmx5IGNvbnRhaW5zIHNlcGVyYXRvciwgZG8gbm90IGNvbnZlcnQgdGhlIHNlcGVydGFvciBpbnRvIDBcbiAgICAgICAgaWYgKG51bWJlclJlZy50ZXN0KHN0clZhbCkpIHtcbiAgICAgICAgICAgIG1vZGVsID0gdGhpcy5wYXJzZU51bWJlcihzdHJWYWwpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgbW9kZWwgPSBOYU47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBPbiBrZXlwcmVzcywgaWYgdGhlIHVzZXIgdHlwZXMgYSBkZWNpbWFsIGFuZCBpcyBzdGlsbCBhY3RpdmUgb24gdGhlIGlucHV0IGRvIG5vdCB0aHJvdyBlcnJvci5cbiAgICAgICAgaWYgKGlzTmFOKG1vZGVsKSAmJiBzdHJWYWxbc3RyVmFsLmxlbmd0aCAtIDFdID09PSB0aGlzLkRFQ0lNQUwgJiYgdGhpcy5uZ01vZGVsT3B0aW9ucy51cGRhdGVPbiA9PT0gJ2NoYW5nZScgJiYgdGhpcy4kZWxlbWVudC5maW5kKCdpbnB1dDpmb2N1cycpLmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5sYXN0VmFsSXNEZWNpbWFsID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBnZXQgYSB2YWxpZCBudW1iZXIgZm9ybSB0aGUgdGV4dC5cbiAgICAgICAgLy8gaWYgdGhlIG51bWJlciBpcyB2YWxpZCBvciBpZiBudW1iZXIgaXMgbm90IGluIHJhbmdlIHVwZGF0ZSB0aGUgbW9kZWwgdmFsdWUuXG4gICAgICAgIGlmICghdGhpcy5sYXN0VmFsSXNEZWNpbWFsICYmIHRoaXMuaXNWYWxpZChtb2RlbCkpIHtcbiAgICAgICAgICAgIHRoaXMucHJveHlNb2RlbCA9IG1vZGVsO1xuICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBkaXNwbGF5IHZhbHVlIGluIHRoZSB0ZXh0IGJveC5cbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGlzcGxheVRleHQoKTtcbiAgICAgICAgICAgIC8vIERvIG5vdCB0cmlnZ2VyIG9uY2hhbmdlIGV2ZW50IGZvciBkZWZhdWx0IHZhbHVlXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNEZWZhdWx0UXVlcnkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZShtb2RlbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IHZhbHVlLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICB0aGlzLnByb3h5TW9kZWwgPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyByZXR1cm5zIHRoZSBhY3R1YWwgbW9kZWwgdmFsdWUgb2YgdGhlIHdpZGdldC5cbiAgICBnZXQgZGF0YXZhbHVlKCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiB0aGlzLnByb3h5TW9kZWw7XG4gICAgfVxuXG4gICAgLy8gcmVzZXRzIGFsbCB0aGUgZmxhZ3MgcmVsYXRlZCB0byB0aGUgd2lkZ2V0J3MgdmFsaWRhdGlvbi5cbiAgICBwcm90ZWN0ZWQgcmVzZXRWYWxpZGF0aW9ucygpIHtcbiAgICAgICAgdGhpcy5pc0ludmFsaWROdW1iZXIgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5udW1iZXJOb3RJblJhbmdlID0gZmFsc2U7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQWRkcyB2YWxpZGF0aW9ucyBmb3IgdGhlIG51bWJlciBiZWZvcmUgdXBkYXRpbmcgdGhlIHdpZGdldCBtb2RlbC4gbGlrZSB2YWxpZGF0aW5nIG1pbiBhbmQgbWF4IHZhbHVlIGZvciB0aGUgd2lkZ2V0LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWwgbnVtYmVyIHRvIGJlIHZhbGlkYXRlZFxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgcHJpdmF0ZSBpc1ZhbGlkKHZhbDogbnVtYmVyKTogYm9vbGVhbiB7XG4gICAgICAgIC8vIGlkIG51bWJlciBpcyBpbmZpbml0ZSB0aGVuIGNvbnNpZGVyIGl0IGFzIGludmFsaWQgdmFsdWVcbiAgICAgICAgbGV0IGludmFsaWREZWNpbWFsUGxhY2VzID0gZmFsc2U7XG4gICAgICAgIGlmKHRoaXMuaW5wdXRtb2RlID09PSBJTlBVVE1PREUuTkFUVVJBTCAmJiAhaXNOYU4odGhpcy5kZWNpbWFscGxhY2VzKSAmJiB0aGlzLmRlY2ltYWxwbGFjZXMgPj0gMCkge1xuICAgICAgICAgICAgaW52YWxpZERlY2ltYWxQbGFjZXMgPSB0aGlzLmNvdW50RGVjaW1hbHModmFsKSA+IHRoaXMuZGVjaW1hbHBsYWNlcztcbiAgICAgICAgfSBlbHNlIGlmKCFOdW1iZXIuaXNJbnRlZ2VyKHRoaXMuc3RlcCkgJiYgdGhpcy5jb3VudERlY2ltYWxzKHZhbCkgPiB0aGlzLmNvdW50RGVjaW1hbHModGhpcy5zdGVwKSkge1xuICAgICAgICAgICAgaW52YWxpZERlY2ltYWxQbGFjZXMgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc05hTih2YWwpIHx8ICFpc0Zpbml0ZSh2YWwpIHx8IGludmFsaWREZWNpbWFsUGxhY2VzKSB7XG4gICAgICAgICAgICB0aGlzLmlzSW52YWxpZE51bWJlciA9IHRydWU7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHZhbCAhPT0gdGhpcy5nZXRWYWx1ZUluUmFuZ2UodmFsKSkge1xuICAgICAgICAgICAgdGhpcy5udW1iZXJOb3RJblJhbmdlID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMucmVzZXRWYWxpZGF0aW9ucygpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXR1cm5zIGEgdmFsaWQgbnVtYmVyIGJ5IHZhbGlkYXRpbmcgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gdmFsdWVzLlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZVxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgcHJpdmF0ZSBnZXRWYWx1ZUluUmFuZ2UodmFsdWU6IG51bWJlcik6IG51bWJlciB7XG4gICAgICAgIGlmICghaXNOYU4odGhpcy5taW52YWx1ZSkgJiYgdmFsdWUgPCB0aGlzLm1pbnZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlVHlwZSA9ICdtaW52YWx1ZSc7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5taW52YWx1ZTtcblxuICAgICAgICB9XG4gICAgICAgIGlmICghaXNOYU4odGhpcy5tYXh2YWx1ZSkgJiYgdmFsdWUgPiB0aGlzLm1heHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlVHlwZSA9ICdtYXh2YWx1ZSc7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tYXh2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdmFsdWU7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogY29udmVydCBudW1iZXIgdG8gbG9jYWxpemVkIG51bWJlciB1c2luZyBhbmd1bGFyIGRlY2ltYWwgcGlwZS4gZWcgMTAsMDAsMDAwIG9yIDEsMDAwLDAwMFxuICAgICAqIEBwYXJhbSBudW1iZXJcbiAgICAgKiBAcmV0dXJucyB7c3RyaW5nfVxuICAgICAqL1xuICAgIHByaXZhdGUgdHJhbnNmb3JtTnVtYmVyKG51bWJlciwgbnVtYmVyZmlsdGVyPyk6IHN0cmluZyB7XG4gICAgICAgIGNvbnN0IGZpbHRlclZhbCA9IG51bWJlcmZpbHRlciA/IG51bWJlcmZpbHRlciA6IHRoaXMubnVtYmVyZmlsdGVyO1xuICAgICAgICByZXR1cm4gdGhpcy50cmFpbGluZ1plcm9EZWNpbWFsUGlwZS50cmFuc2Zvcm0obnVtYmVyLCB0aGlzLnNlbGVjdGVkTG9jYWxlLCBmaWx0ZXJWYWwsIHRoaXMubG9jYWxlZmlsdGVyLCB0aGlzLnRyYWlsaW5nemVybywgdGhpcy5kZWNpbWFsVmFsdWUsICEhbnVtYmVyZmlsdGVyLCB0aGlzLmkxOG5TZXJ2aWNlPy5nZXR3aWRnZXRMb2NhbGUoKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmVzZXRzIHRoZSBjdXJzb3IgcG9zaXRpb24gaW4gdGhlIHRleHQgYm94LlxuICAgICAqIEBwYXJhbSB7bnVtYmVyfSB2YWx1ZSBjdXJzb3IgcG9zaXRpb24gaW5kZXggZm9ybSBsZWZ0IHRvIHJpZ2h0LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVzZXRDdXJzb3JQb3NpdGlvbih2YWx1ZTogbnVtYmVyKSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIC8vIHBvc2l0aW9uIG9mIHRoZSBjdXJzb3Igc2hvdWxkIGJlIGdpdmVuIGZvcm0gcmlnaHQgdG8gbGVmdC5cbiAgICAgICAgbGV0IHBvc2l0aW9uID0gaW5wdXQudmFsdWUubGVuZ3RoIC0gdmFsdWU7XG4gICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb24gPCAwID8gMCA6IHBvc2l0aW9uO1xuICAgICAgICAvLyBzZXQgdGhlIGN1cnNvciBwb3NpdGlvbiBpbiB0aGUgdGV4dCBib3guXG4gICAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKHBvc2l0aW9uLCBwb3NpdGlvbik7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogTWV0aG9kIHBhcnNlcyB0aGUgTG9jYWxpemVkIG51bWJlcihzdHJpbmcpIHRvIGEgdmFsaWQgbnVtYmVyLlxuICAgICAqIGlmIHRoZSBzdHJpbmcgZG9zZSBub3QgcmVzdWx0IHRvIGEgdmFsaWQgbnVtYmVyIHRoZW4gcmV0dXJucyBOYU4uXG4gICAgICogQHBhcmFtIHtzdHJpbmd9IHZhbCBMb2NhbGl6ZWQgbnVtYmVyLlxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgcHJpdmF0ZSBwYXJzZU51bWJlcih2YWw6IHN0cmluZyk6IG51bWJlciB7XG4gICAgICAgIC8vIFdNUy0yMjE3OTogc3BsaXQgbnVtYmVyIGJhc2VkIG9uIHRoZSBkZWNpbWFsIHNlcGFyYXRvciBpbiB0aGUgdmFsXG4gICAgICAgIC8vIHNwbGl0cyBzdHJpbmcgaW50byB0d28gcGFydHMuIGRlY2ltYWwgYW5kIG51bWJlci5cbiAgICAgICAgY29uc3QgcGFydHMgPSB2YWwuc3BsaXQodGhpcy5pbnB1dG1vZGUgPT09IElOUFVUTU9ERS5GSU5BTkNJQUwgPyAodmFsLmluZGV4T2YodGhpcy5ERUNJTUFMKSA+IC0xID8gdGhpcy5ERUNJTUFMIDogJy4nKSA6IHRoaXMuREVDSU1BTCk7XG4gICAgICAgIGlmICghcGFydHMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuICAgICAgICBpZiAocGFydHMubGVuZ3RoID4gMikge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICAvLyBJZiBudW1iZXIgaGF2ZSBkZWNpbWFsIHBvaW50IGFuZCBub3QgaGF2ZSBhIGRlY2ltYWwgdmFsdWUgdGhlbiByZXR1cm4uXG4gICAgICAgIGlmIChwYXJ0c1sxXSA9PT0gJycpIHtcbiAgICAgICAgICAgIHJldHVybiBOYU47XG4gICAgICAgIH1cbiAgICAgICAgLy8gcmVwbGFjZXMgYWxsIGdyb3VwIHNlcGFyYXRvcnMgZm9ybSB0aGUgbnVtYmVyLlxuICAgICAgICBjb25zdCBudW1iZXIgPSBOdW1iZXIocGFydHNbMF0uc3BsaXQodGhpcy5HUk9VUCkuam9pbignJykpO1xuICAgICAgICBjb25zdCBkZWNpbWFsID0gTnVtYmVyKGAwLiR7cGFydHNbMV0gfHwgMH1gKTtcbiAgICAgICAgaWYgKE51bWJlci5pc05hTihudW1iZXIpIHx8IE51bWJlci5pc05hTihkZWNpbWFsKSkge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdW0gPSBwYXJ0cy5sZW5ndGggPiAxID8gcGFyc2VGbG9hdCgobnVtYmVyICsgZGVjaW1hbCkudG9GaXhlZChwYXJ0c1sxXS5sZW5ndGgpKSA6IG51bWJlciArIGRlY2ltYWw7XG4gICAgICAgIC8vIGlmIHRoZSBudW1iZXIgaXMgbmVnYXRpdmUgdGhlbiBjYWxjdWxhdGUgdGhlIG51bWJlciBhcyBudW1iZXIgLSBkZWNpbWFsXG4gICAgICAgIC8vIEV4OiBudW1iZXIgPSAtMTIzIGFuZCBkZWNpbWFsID0gMC40NSB0aGVuIG51bWJlciAtIGRlY2ltYWwgPSAtMTIzLTA0NSA9IC0xMjMuNDVcbiAgICAgICAgLy8gSWYgZW50ZXJlZCBudW1iZXIgaXMgLTAuMSB0byAtMC45IHRoZW4gdGhlIG51bWJlciBpcyAtMCBhbmQgZGVjaW1hbCBpcyAwLjEgdG8gMC45LiBOb3cgY2FsYWN1bGF0ZSB0aGUgbnVtYmVyIGFzIG51bWJlci1kZWNpbWFsXG4gICAgICAgIC8vIEV4OiBudW1iZXIgPSAtMCBhbmQgZGVjaW1hbCA9IDAuMSB0aGVuIG51bWJlci1kZWNpbWFsID0gLTAtMC4xID0gLTAuMVxuICAgICAgICBpZiAobnVtYmVyID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LmlzKDAsIG51bWJlcikgPyBzdW0gOiBudW1iZXIgLSBkZWNpbWFsO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudW1iZXIgPiAwID8gc3VtIDogbnVtYmVyIC0gZGVjaW1hbDtcbiAgICB9XG5cbiAgICAvLyB1cGRhdGVzIHRoZSB3aWRnZXRzIHRleHQgdmFsdWUuXG4gICAgcHJpdmF0ZSB1cGRhdGVEaXNwbGF5VGV4dCgpIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgcG9zaXRpb246IG51bWJlciA9IGlucHV0LnNlbGVjdGlvblN0YXJ0O1xuICAgICAgICBjb25zdCBwcmVWYWx1ZTogc3RyaW5nID0gaW5wdXQudmFsdWU7XG4gICAgICAgIGlmICghdGhpcy5pc0RlZmF1bHRRdWVyeSkge1xuICAgICAgICAgICAgY29uc3QgcGFydHMgPSBwcmVWYWx1ZS5zcGxpdCh0aGlzLkRFQ0lNQUwpO1xuICAgICAgICAgICAgdGhpcy5kZWNpbWFsVmFsdWUgPSBwYXJ0c1sxXSB8fCAnJztcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzdGVwVmFsID0gdGhpcy5zdGVwTGVuZ3RoKCk7XG4gICAgICAgIGlmICh0aGlzLmlucHV0bW9kZSA9PT0gSU5QVVRNT0RFLkZJTkFOQ0lBTCAmJiBzdGVwVmFsKSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IGlucHV0LnZhbHVlID0gdGhpcy50cmFuc2Zvcm1OdW1iZXIodGhpcy5wcm94eU1vZGVsLCBgMS4ke3N0ZXBWYWx9LSR7c3RlcFZhbH1gKTtcbiAgICAgICAgICAgIHRoaXMuZGVjaW1hbFZhbHVlID0gdGhpcy5kZWNpbWFsVmFsdWUucmVwbGFjZSgvXFxEL2csJycpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSBpbnB1dC52YWx1ZSA9IHRoaXMudHJhbnNmb3JtTnVtYmVyKHRoaXMucHJveHlNb2RlbCk7XG4gICAgICAgIH1cbiAgICAgICAgLy8gaW4gc2FmYXJpIGJyb3dzZXIsIHNldFNlbGVjdGlvblJhbmdlIHdpbGwgZm9jdXMgdGhlIGlucHV0IGJ5IGRlZmF1bHQsIHdoaWNoIG1heSBpbnZva2UgdGhlIGZvY3VzIGV2ZW50IG9uIHdpZGdldC5cbiAgICAgICAgLy8gSGVuY2UgcHJldmVudGluZyB0aGUgc2V0U2VsZWN0aW9uUmFuZ2Ugd2hlbiBkZWZhdWx0IHZhbHVlIGlzIHNldCBpLmUuIHdpZGdldCBpcyBub3QgZm9jdXNlZC5cbiAgICAgICAgaWYgKHRoaXMudXBkYXRlb24gPT09ICdkZWZhdWx0JyAmJiAhdGhpcy5pc0RlZmF1bHRRdWVyeSkge1xuICAgICAgICAgICAgdGhpcy5yZXNldEN1cnNvclBvc2l0aW9uKHByZVZhbHVlLmxlbmd0aCAtIHBvc2l0aW9uKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgc3RlcCBsZW5ndGggc2V0IGluIHRoZSBzdHVkaW9cbiAgICBwcml2YXRlIHN0ZXBMZW5ndGgoKSB7XG4gICAgICAgIGlmKHRoaXMuaW5wdXRtb2RlID09PSAnSU5QVVRNT0RFLk5BVFVSQUwnICYmICFpc05hTih0aGlzLmRlY2ltYWxwbGFjZXMpICYmIHRoaXMuZGVjaW1hbHBsYWNlcyA+PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5kZWNpbWFscGxhY2VzO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0ZXBMZW4gPSB0aGlzLnN0ZXAudG9TdHJpbmcoKS5zcGxpdCgnLicpO1xuICAgICAgICBpZiAoc3RlcExlbi5sZW5ndGggPT09IDEgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gc3RlcExlblsxXS5sZW5ndGg7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgY3VycmVuY3kgd2lkZ2V0IGhhcyBpbnB1dCBtb2RlIGFzIG5hdHVyYWwgYW5kIHRyYWlsaW5nIHplcm8gaXMgZGVmaW5lZCBvciBub3RcbiAgICBwdWJsaWMgaXNOYXR1cmFsQ3VycmVuY3koKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmlucHV0bW9kZSA9PT0gSU5QVVRNT0RFLk5BVFVSQUwgJiYgdGhpcy53aWRnZXRUeXBlID09PSAnd20tY3VycmVuY3knICYmICEhdGhpcy50cmFpbGluZ3plcm87XG4gICAgfVxuXG4gICAgICAgLyoqXG4gICAgICogQHBhcmFtIHZhbHVlIGNvbnRhaW5zIHRoZSB2YWx1ZSBlbnRlcmVkIGluIHRoZSBpbnB1dCBib3hcbiAgICAgKiBUaGlzIGZ1bmN0aW9uIG1vZGlmaWVzIHRoZSB1c2VyIGlucHV0IHZhbHVlLCBpbnRvIGZpbmFuY2lhbCBtb2RlLlxuICAgICAqIE51bWJlciBzdGFydHMgZnJvbSBoaWdoZXN0IHByZWNlc2lvbiBkZWNpbWFsLCBvbiB0eXBpbmcgbnVtYmVyIHNoaWZ0cyB0byB0aGUgbGVmdFxuICAgICAqL1xuICAgIHB1YmxpYyBvbklucHV0Q2hhbmdlKHZhbHVlOiBhbnkpIHtcbiAgICAgICAgY29uc3Qgc3RlcFZhbCA9IHRoaXMuc3RlcExlbmd0aCgpO1xuICAgICAgICBjb25zdCBwcmV2RGF0YVZhbHVlID0gIHRoaXMuZ2V0UHJldkRhdGFWYWx1ZSgpO1xuICAgICAgICAvLyBXTVMtMjIzNTUsIFRyaWdnZXIgY2hhbmdlIGNiIGlmIHZhbHVlIGV4aXN0cyBvciB2YWx1ZSBpcyBlbXB0eSBidXQgZGF0YXZhbHVlIGV4aXN0cyAod2hlbiB2YWx1ZSBpcyBzZWxlY3RlZCBhbmQgZGVsZXRlZCkuXG4gICAgICAgICAgIC8vIEZpeCBmb3IgW1dNUy0yNzA0MV06IEVuc3VyZSB0aGUgY2hhbmdlIGNhbGxiYWNrIGZvciB0aGUgbnVtYmVyIHdpZGdldCB0cmlnZ2VycyBvbmx5IG9uIGZvY3VzIG91dCAod2hlbiB1cGRhdGVvbiBpcyBzZXQgdG8gYmx1ciksXG4gICAgICAgICAgIC8vIG5vdCBkdXJpbmcgaW5pdGlhbCBpbnB1dCB3aGVuIHRoZSBwcmV2aW91cyB2YWx1ZSBpcyB1bmRlZmluZWQgYW5kIHRoZSBjdXJyZW50IHZhbHVlIGlzIG51bGwuXG4gICAgICAgIGlmIChpc0RlZmluZWQodmFsdWUpICYmICh2YWx1ZSAhPT0gJycgfHwgdGhpcy5kYXRhdmFsdWUgfHwgdGhpcy5kYXRhdmFsdWUgPT0gMCkpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLndpZGdldFR5cGUgPT09IFwid20tbnVtYmVyXCIpIHtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5pbnB1dG1vZGUgPT0gSU5QVVRNT0RFLkZJTkFOQ0lBTCkge1xuICAgICAgICAgICAgICAgICAgICAvLyBDYXNlIDE6IHdoZW4gdGhlcmUgaXMgbm8gZGVmYXVsdCB2YWx1ZSwgcHJldkRhdGFWYWx1ZSBpcyB1bmRlZmluZWQgJiYgdGhpcy5kYXRhdmFsdWUgaXMgbnVsbFxuICAgICAgICAgICAgICAgICAgICAvLyBDYXNlIDI6IHdoZW4gdGhlcmUgZGVmYXVsdCB2YWx1ZSwgcHJldkRhdGFWYWx1ZSBpcyBlcXVhbCB0byB0aGlzLmRhdGF2YWx1ZVxuICAgICAgICAgICAgICAgICAgICBpZiAoISgocHJldkRhdGFWYWx1ZSA9PSB1bmRlZmluZWQgJiYgdGhpcy5kYXRhdmFsdWUgPT0gbnVsbCkgfHwgKHByZXZEYXRhVmFsdWUgPT0gdGhpcy5kYXRhdmFsdWUpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEocHJldkRhdGFWYWx1ZSA9PSB1bmRlZmluZWQgJiYgdGhpcy5kYXRhdmFsdWUgPT0gbnVsbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7IC8vIGN1cnJlbmN5IHdpZGdldFxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghc3RlcFZhbCB8fCB0aGlzLmlucHV0bW9kZSAhPT0gSU5QVVRNT0RFLkZJTkFOQ0lBTCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IGZpbmFuY2lhbFZhbDtcblxuICAgICAgICAvKipcbiAgICAgICAgICogSWYgdGhlIHZhbHVlIGlzIGVudGVyZWQgYnkgdGhlIHVzZXIsIGZvcm1hdCB0aGUgaW5wdXRcbiAgICAgICAgICogSWYgdGhlIHZhbHVlIGlzIHByb3ZpZGVkIGFzIGRlZmF1bHQgdmFsdWUsIHNraXAgZm9ybWF0dGluZ1xuICAgICAgICAgKi9cbiAgICAgICAgaWYgKHRoaXMuaXNEZWZhdWx0UXVlcnkpIHtcbiAgICAgICAgICAgIGZpbmFuY2lhbFZhbCA9IHBhcnNlRmxvYXQodmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY29uc3QgdmFsSW5XaG9sZU51bSA9IHBhcnNlSW50KHZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZSgvXFxEL2csJycpKTtcbiAgICAgICAgICAgIGZpbmFuY2lhbFZhbCA9IHZhbEluV2hvbGVOdW0gKiAgdGhpcy5zdGVwO1xuICAgICAgICB9XG5cbiAgICAgICAgICAgaWYgKCFpc05hTihmaW5hbmNpYWxWYWwpKSB7XG4gICAgICAgICAgICAvLyBXaGVuIHVwZGF0ZSBvbiBrZXkgaXMgc2V0IGtleXByZXNzLCB1cGRhdGUgdGhlIGRhdGF2YWx1ZSBlbHNlIHVwZGF0ZSBvbmx5IHRoZSBkaXNwbGF5IHZhbHVlXG4gICAgICAgICAgICBpZiAodGhpcy5uZ01vZGVsT3B0aW9ucy51cGRhdGVPbiA9PT0gJ2NoYW5nZScpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGF2YWx1ZSA9IHBhcnNlRmxvYXQoZmluYW5jaWFsVmFsLnRvRml4ZWQoc3RlcFZhbCkpO1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHRoaXMuZGF0YXZhbHVlKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5kaXNwbGF5VmFsdWUgPSBmaW5hbmNpYWxWYWwudG9GaXhlZChzdGVwVmFsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm5nTW9kZWxPcHRpb25zLnVwZGF0ZU9uICE9PSAnYmx1cicpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YXZhbHVlID0gdW5kZWZpbmVkO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UobnVsbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBJbnB1dCBtb2RlIGlzIGZpbmFuY2lhbCBhbmQgdHJhaWxpbmcgemVybyBpcyBzZXQgdG8gZmFsc2UsIE9uIGZvY3VzIHNldCBkaXNwbGF5IHZhbCB0byBmaXhlZCBwb2ludCBub3RhdGlvbiBhbmQgT24gYmx1ciBzdHJpcCB0cmFpbGluZyB6ZXJvc1xuICAgIC8vIEluIGN1cnJlbmN5LCBpbnB1dG1vZGUgaXMgbmF0dXJhbCBhbmQgdHJhaWxpbmcgemVybyBhbmQgc3RlcCBhcmUgZGVmaW5lZCwgb24gYmx1ciBkaXNwbGF5IHZhbCB0byBmaXhlZCBwb2ludCBub3RhdGlvbiBhbmQgb24gZm9jdXMgc3RyaXAgdGhlIHplcm9zXG4gICAgcHVibGljIGNoZWNrRm9yVHJhaWxpbmdaZXJvcygkZXZlbnQpIHtcbiAgICAgICAgY29uc3Qgc3RlcFZhbCA9IHRoaXMuc3RlcExlbmd0aCgpO1xuICAgICAgICBjb25zdCBmaW5hbmNpYWxNb2RlID0gIXRoaXMudHJhaWxpbmd6ZXJvICYmIHRoaXMuaW5wdXRtb2RlID09PSBJTlBVVE1PREUuRklOQU5DSUFMO1xuXG4gICAgICAgIC8vIElmIHRoZSB1c2VyJ3MgbGFzdCBpbnB1dCBpcyBhIGRlY2ltYWwgYW5kIG5vdCBhY3RpdmUgb24gaW5wdXQgZmllbGQsIHRocm93IGVycm9yXG4gICAgICAgIGlmICh0aGlzLmxhc3RWYWxJc0RlY2ltYWwpIHtcbiAgICAgICAgICAgIHRoaXMub25Nb2RlbENoYW5nZSh0aGlzLmRpc3BsYXlWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmaW5hbmNpYWxNb2RlICYmICF0aGlzLmlzTmF0dXJhbEN1cnJlbmN5KCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoc3RlcFZhbCAmJiB0aGlzLmRhdGF2YWx1ZSkge1xuICAgICAgICAgICAgbGV0IG51bWJlcmZpbHRlcjtcbiAgICAgICAgICAgIGlmICgoZmluYW5jaWFsTW9kZSAmJiAkZXZlbnQudHlwZSA9PT0gJ2ZvY3VzJykgfHwgKHRoaXMuaXNOYXR1cmFsQ3VycmVuY3koKSAmJiAkZXZlbnQudHlwZSA9PT0gJ2JsdXInKSkge1xuICAgICAgICAgICAgICAgIG51bWJlcmZpbHRlciA9IGAxLiR7c3RlcFZhbH0tJHtzdGVwVmFsfWA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IHRoaXMudHJhbnNmb3JtTnVtYmVyKHRoaXMuZGF0YXZhbHVlLCBudW1iZXJmaWx0ZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogcmV0dXJucyB0aGUgbnVtYmVyIG9mIGRlY2ltYWwgcGxhY2VzIGEgbnVtYmVyIGhhdmUuXG4gICAgICogQHBhcmFtIHZhbHVlOiBudW1iZXJcbiAgICAgKiBAcmV0dXJucyB7bnVtYmVyfVxuICAgICAqL1xuICAgIHByaXZhdGUgY291bnREZWNpbWFscyh2YWx1ZSkge1xuICAgICAgICBjb25zdCBudW0gPSBOdW1iZXIodmFsdWUpO1xuICAgICAgICBpZiAobnVtID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIENvbnZlcnQgdG8gbnVtYmVyIGFuZCBoYW5kbGUgc2NpZW50aWZpYyBub3RhdGlvblxuICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKG51bSkpIHJldHVybiAwO1xuXG4gICAgICAgIC8vIEdldCB0aGUgZXhwb25lbnRpYWwgZm9ybSB0byBoYW5kbGUgc2NpZW50aWZpYyBub3RhdGlvbiBwcm9wZXJseVxuICAgICAgICBjb25zdCBleHBvbmVudGlhbFN0ciA9IG51bS50b0V4cG9uZW50aWFsKCk7XG4gICAgICAgIGNvbnN0IG1hdGNoID0gZXhwb25lbnRpYWxTdHIubWF0Y2goL14tP1xcZCpcXC4/KFxcZCspP2UoWystXVxcZCspJC8pO1xuXG4gICAgICAgIGlmIChtYXRjaCkge1xuICAgICAgICAgICAgY29uc3QgZGVjaW1hbHMgPSBtYXRjaFsxXSA/IG1hdGNoWzFdLmxlbmd0aCA6IDA7XG4gICAgICAgICAgICBjb25zdCBleHBvbmVudCA9IHBhcnNlSW50KG1hdGNoWzJdKTtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLm1heCgwLCBkZWNpbWFscyAtIGV4cG9uZW50KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEZhbGxiYWNrIHRvIHJlZ3VsYXIgZGVjaW1hbCBjb3VudGluZ1xuICAgICAgICBjb25zdCBkZWNpbWFsU3RyID0gbnVtLnRvU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IGlzTG9jYWxpemVkTnVtYmVyID0gaW5jbHVkZXMoZGVjaW1hbFN0ciwgdGhpcy5ERUNJTUFMKTtcbiAgICAgICAgY29uc3QgcGFydHMgPSBpc0xvY2FsaXplZE51bWJlciA/IGRlY2ltYWxTdHIuc3BsaXQodGhpcy5ERUNJTUFMKSA6IGRlY2ltYWxTdHIuc3BsaXQoJy4nKTtcbiAgICAgICAgcmV0dXJuIHBhcnRzWzFdID8gcGFydHNbMV0ubGVuZ3RoIDogMDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBoYW5kbGVzIHRoZSBhcnJvdyBwcmVzcyBldmVudC4gSW5jcmVhc2VzIG9yIGRlY3JlYXNlcyB0aGUgbnVtYmVyLiB0cmlnZ2VyZWQgZm9tIHRoZSB0ZW1wbGF0ZVxuICAgICAqIEBwYXJhbSAkZXZlbnQga2V5Ym9hcmQgZXZlbnQuXG4gICAgICogQHBhcmFtIGtleSBpZGVudGlmaWVyIHRvIGluY3JlYXNlIG9yIGRlY3JlYXNlIHRoZSBudW1iZXIuXG4gICAgICovXG4gICAgcHVibGljIG9uQXJyb3dQcmVzcygkZXZlbnQsIGtleSkge1xuICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgaWYgKHRoaXMucmVhZG9ubHkgfHwgdGhpcy5zdGVwID09PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFyZ2V0VmFsID0gJGV2ZW50LnRhcmdldC52YWx1ZS5yZXBsYWNlKC8sL2csICcnKTtcblxuICAgICAgICAvLyBwcm94eU1vZGVsIHRvIGJlIHVwZGF0ZWQgZnJvbSAkZXZlbnQudGFyZ2V0LnZhbHVlIGlmIHByZXNlbnQgdG8gc3VwcG9ydCBhcnJvdyBrZXlzIHdoZW4gaW5wdXQgY2hhbmdlcyBlbHNlIHBpY2sgdXAgZnJvbSB0aGlzLnByb3h5bW9kZWxcbiAgICAgICAgbGV0IHByb3h5TW9kZWw7XG4gICAgICAgIGlmICh0YXJnZXRWYWwgJiYgIWlzTmFOKHBhcnNlRmxvYXQodGFyZ2V0VmFsKSkpIHtcbiAgICAgICAgICAgIHByb3h5TW9kZWwgPSBwYXJzZUZsb2F0KHRhcmdldFZhbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBwcm94eU1vZGVsID0gdGhpcy5wcm94eU1vZGVsO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHZhbHVlO1xuXG4gICAgICAgIC8vIGlmIHRoZSBudW1iZXIgaXMgbm90IGluIHJhbmdlIGFuZCB3aGVuIGFycm93IGJ1dHRvbnMgYXJlIHByZXNzZWQgbmVlZCB0byBnZXQgYXBwcm9wcmlhdGUgbnVtYmVyIHZhbHVlLlxuICAgICAgICBpZiAodGhpcy5udW1iZXJOb3RJblJhbmdlKSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dFZhbHVlID0gdGhpcy5wYXJzZU51bWJlcih0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC52YWx1ZSk7XG4gICAgICAgICAgICAvLyB0YWtlIHRoZSB0ZXh0Ym94IHZhbHVlIGFzIGN1cnJlbnQgbW9kZWwgaWYgdGhlIHZhbHVlIGlzIHZhbGlkLlxuICAgICAgICAgICAgaWYgKCFpc05hTihpbnB1dFZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5nZXRWYWx1ZUluUmFuZ2UoaW5wdXRWYWx1ZSk7XG4gICAgICAgICAgICAgICAgcHJveHlNb2RlbCA9IGlucHV0VmFsdWU7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldFZhbGlkYXRpb25zKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBpZiAoaXNVbmRlZmluZWQocHJveHlNb2RlbCkgfHwgaXNOdWxsKHByb3h5TW9kZWwpKSB7XG4gICAgICAgICAgICAgICAgcHJveHlNb2RlbCA9IHZhbHVlID0gdGhpcy5nZXRWYWx1ZUluUmFuZ2UoKHRoaXMubWludmFsdWUgfHwgMCkpO1xuICAgICAgICAgICAgICAgIHRoaXMucmVzZXRWYWxpZGF0aW9ucygpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB2YWx1ZSA9IHRoaXMuZ2V0VmFsdWVJblJhbmdlKHByb3h5TW9kZWwgKyAoa2V5ID09PSAnVVAnID8gdGhpcy5zdGVwIDogLXRoaXMuc3RlcCkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICgoa2V5ID09PSAnVVAnICYmIHByb3h5TW9kZWwgPD0gdmFsdWUpIHx8IChrZXkgPT09ICdET1dOJyAmJiBwcm94eU1vZGVsID49IHZhbHVlKSkge1xuICAgICAgICAgICAgY29uc3QgZGVjaW1hbFJvdW5kVmFsdWUgPSBNYXRoLm1heCh0aGlzLmNvdW50RGVjaW1hbHMocHJveHlNb2RlbCksIHRoaXMuY291bnREZWNpbWFscyh0aGlzLnN0ZXApKTtcblxuICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBtb2RlbFByb3h5LlxuICAgICAgICAgICAgdGhpcy5wcm94eU1vZGVsID0gcm91bmQodmFsdWUsIGRlY2ltYWxSb3VuZFZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMudXBkYXRlRGlzcGxheVRleHQoKTtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHRoaXMucHJveHlNb2RlbCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBtZXRob2QgaXMgY2FsbGVkIGZyb20gdGhlIGZyb20gd2lkZ2V0LiB0byBjaGVjayB3aGV0aGVyIHRoZSB2YWx1ZSBlbnRlcmVkIGlzIHZhbGlkIG9yIG5vdC5cbiAgICAgKiBAcmV0dXJucyB7b2JqZWN0fVxuICAgICAqL1xuICAgIHB1YmxpYyB2YWxpZGF0ZShjOiBBYnN0cmFjdENvbnRyb2wpIHtcbiAgICAgICAgaWYgKHRoaXMuaXNJbnZhbGlkTnVtYmVyKSB7XG4gICAgICAgICAgICB0aGlzLnZhbGlkYXRlVHlwZSA9ICcnO1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBpbnZhbGlkTnVtYmVyOiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm51bWJlck5vdEluUmFuZ2UpIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgbnVtYmVyTm90SW5SYW5nZToge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnZhbGlkYXRlVHlwZSA9ICcnO1xuICAgICAgICAvKiBXTVMtMTgyNjkgfCBFeHRlbmRpbmcgdGhlIGV4aXN0aW5nIHZhbGlkYXRpb24gZm9yICdyZXF1aXJlZCcgKi9cbiAgICAgICAgaWYgKHRoaXNbJ3Nob3cnXSAmJiB0aGlzWydyZXF1aXJlZCddKSB7XG4gICAgICAgICAgICByZXR1cm4gKCEhYy52YWx1ZSB8fCBjLnZhbHVlID09PSAwKSA/IG51bGwgOiB7IHJlcXVpcmVkOiB0cnVlIH07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHZhbGlkYXRlSW5wdXRFbnRyeSgkZXZlbnQpIHtcblxuICAgICAgICB0aGlzLmlzRGVmYXVsdFF1ZXJ5ID0gZmFsc2U7XG5cbiAgICAgICAgLy8gYWxsb3cgYWN0aW9ucyBpZiBjb250cm9sIGtleSBpcyBwcmVzc2VkIG9yIGlmIGJhY2tzcGFjZSBpcyBwcmVzc2VkLiAoZm9yIE1vemlsbGEpLlxuICAgICAgICBpZiAoJGV2ZW50LmN0cmxLZXkgfHwgaW5jbHVkZXMoWydCYWNrc3BhY2UnLCAnQXJyb3dSaWdodCcsICdBcnJvd0xlZnQnLCAnVGFiJywgJ0VudGVyJywgJ0RlbGV0ZSddLCAkZXZlbnQua2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdmFsaWRpdHkgPSBuZXcgUmVnRXhwKGBeW1xcXFxkXFxcXHMtLC5lKyR7dGhpcy5HUk9VUH0ke3RoaXMuREVDSU1BTH1dJGAsICdpJyk7XG4gICAgICAgIGNvbnN0IGlucHV0VmFsdWUgPSAkZXZlbnQudGFyZ2V0Py52YWx1ZXx8XCJcIjtcblxuICAgICAgICAvLyB3aGVuIGlucHV0IG1vZGUgaXMgZmluYW5jaWFsLCBkbyBub3QgcmVzdHJpY3QgdXNlciBvbiBlbnRlcmluZyB0aGUgdmFsdWUgd2hlbiBzdGVwIHZhbHVlIGxpbWl0IGlzIHJlYWNoZWQuXG4gICAgICAgIGNvbnN0IHNraXBTdGVwVmFsaWRhdGlvbiA9IHRoaXMuaW5wdXRtb2RlID09PSBJTlBVVE1PREUuRklOQU5DSUFMO1xuXG4gICAgICAgIC8vIFZhbGlkYXRlcyBpZiB1c2VyIGVuZXRlcnMgbW9yZSB0aGFuIDE2IGRpZ2l0c1xuICAgICAgICBpZiAoaW5wdXRWYWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgcGFyc2VkVmFsID0gIHBhcnNlSW50KGlucHV0VmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKC9cXEQvZywnJykpO1xuICAgICAgICAgICAgaWYgKHBhcnNlZFZhbC50b1N0cmluZygpLmxlbmd0aCA+IDE1KSB7XG4gICAgICAgICAgICAgICAgLy8gV01TLTIyMzIxOiBJZiB0aGUgbnVtYmVyIGlzIGdyZWF0ZXIgdGhhbiBNQVhfU0FGRV9JTlRFR0VSIChtb3JlIHRoYW4gMTUgbnVtYmVycykuXG4gICAgICAgICAgICAgICAgLy8gdXNlciBzZWxlY3RzIGEgcmFuZ2Ugb2YgZGlnaXRzIGFuZCBwcmVzc2VzIGEga2V5LlxuICAgICAgICAgICAgICAgIC8vIERvIG5vdCB0aHJvdyB2YWxpZGF0aW9uIG9mIGV4Y2VlZGVkIG51bWJlciBhcyBzZWxlY3RlZCByYW5nZSB2YWx1ZSB3aWxsIGJlIGRlbGV0ZWQuXG4gICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRWYWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkVmFsICYmIHNlbGVjdGVkVmFsLnRvU3RyaW5nKCkgJiYgc2VsZWN0ZWRWYWwuZm9jdXNOb2RlID09PSB0aGlzLm5hdGl2ZUVsZW1lbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHZhbGlkYXRlcyBlbnRlcmluZyBvZiBkZWNpbWFsIHZhbHVlcyBvbmx5IHdoZW4gdXNlciBwcm92aWRlcyBkZWNpbWFsIGxpbWl0KGkuZSBzdGVwIGNvbnRhaW5zIGRlY2ltYWwgdmFsdWVzKS5cbiAgICAgICAgLy8gUmVzdHJpY3QgdXNlciBmcm9tIGVudGVyaW5nIG9ubHkgaWYgdGhlIGRlY2ltYWwgbGltaXQgaXMgcmVhY2hlZCBhbmQgdGhlIG5ldyBkaWdpdCBpcyBlbnRlcmVkIGluIGRlY2ltYWwgcGxhY2VcbiAgICAgICAgLy8gaWYgKCFza2lwU3RlcFZhbGlkYXRpb24gJiYgaW5wdXRWYWx1ZSAmJiB0aGlzLmNvdW50RGVjaW1hbHModGhpcy5zdGVwKSAmJiAodGhpcy5jb3VudERlY2ltYWxzKGlucHV0VmFsdWUpID49IHRoaXMuY291bnREZWNpbWFscyh0aGlzLnN0ZXApKSAmJiAkZXZlbnQudGFyZ2V0LnNlbGVjdGlvblN0YXJ0ID49IGlucHV0VmFsdWUubGVuZ3RoIC0gMSkge1xuICAgICAgICAvLyAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAvLyB9XG4gICAgICAgIC8vIHZhbGlkYXRlcyBpZiB1c2VyIGVudGVyZWQgYW4gaW52YWxpZCBjaGFyYWN0ZXIuXG4gICAgICAgIGlmICghdmFsaWRpdHkudGVzdCgkZXZlbnQua2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYodGhpcy5pbnB1dG1vZGUgPT09IElOUFVUTU9ERS5OQVRVUkFMICYmICFpc05hTih0aGlzLmRlY2ltYWxwbGFjZXMpKSB7XG4gICAgICAgICAgICBpZih0aGlzLmRlY2ltYWxwbGFjZXMgPT09IDAgJiYgdGhpcy5ERUNJTUFMID09PSAkZXZlbnQua2V5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGFydHMgPSBpbmNsdWRlcyhpbnB1dFZhbHVlLCB0aGlzLkRFQ0lNQUwpID8gKGlucHV0VmFsdWUgYXMgYW55KS5zcGxpdCh0aGlzLkRFQ0lNQUwpIDogaW5wdXRWYWx1ZS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgY29uc3QgaXNDdXJzb3JQb3NpdGlvbkF0RGVjaW1hbFBsYWNlID0gJGV2ZW50LnRhcmdldC5zZWxlY3Rpb25TdGFydCA+IHBhcnRzWzBdLmxlbmd0aDtcbiAgICAgICAgICAgIGlmKHRoaXMuZGVjaW1hbHBsYWNlcyA+IDAgJiYgdGhpcy5jb3VudERlY2ltYWxzKGlucHV0VmFsdWUpID49IHRoaXMuZGVjaW1hbHBsYWNlcyAmJiBpc0N1cnNvclBvc2l0aW9uQXREZWNpbWFsUGxhY2UpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBjb21tYSBjYW5ub3QgYmUgZW50ZXJlZCBjb25zZWN1dGl2ZWx5XG4gICAgICAgIGlmIChpbmNsdWRlcyhpbnB1dFZhbHVlLCAnLCcpICYmIGlucHV0VmFsdWVbaW5wdXRWYWx1ZS5sZW5ndGggLSAxXSA9PT0gJywnICYmICRldmVudC5rZXkgPT09ICcsJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gYSBkZWNpbWFsIHZhbHVlIGNhbiBiZSBlbnRlcmVkIG9ubHkgb25jZSBpbiB0aGUgaW5wdXQuXG4gICAgICAgIGlmIChpbmNsdWRlcyhpbnB1dFZhbHVlLCB0aGlzLkRFQ0lNQUwpICYmICRldmVudC5rZXkgPT09IHRoaXMuREVDSU1BTCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vICdlJyBjYW4gYmUgZW50ZXJlZCBvbmx5IG9uY2UgaW4gdGhlIGlucHV0LlxuICAgICAgICBpZiAoaW50ZXJzZWN0aW9uKHRvQXJyYXkoaW5wdXRWYWx1ZSksIFsnZScsICdFJ10pLmxlbmd0aCAmJiBpbmNsdWRlcygnZUUnLCAkZXZlbnQua2V5KSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICgoaW5jbHVkZXMoaW5wdXRWYWx1ZSwgJysnKSB8fCBpbmNsdWRlcyhpbnB1dFZhbHVlLCAnLScpKSAmJiAoJGV2ZW50LmtleSA9PT0gJysnIHx8ICRldmVudC5rZXkgPT09ICctJykpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICAvLyBEbyBub3QgYWxsb3cgdXNlciB0byBlbnRlciBvbmx5IHNwYWNlIHdpdGhvdXQgYW55IGlucHV0IHZhbHVlXG4gICAgICAgIGlmICghaW5wdXRWYWx1ZSAmJiAkZXZlbnQuY29kZSA9PT0gJ1NwYWNlJykge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICAgIG9uQmFja3NwYWNlKCRldmVudCkge1xuICAgICAgICB0aGlzLmlzRGVmYXVsdFF1ZXJ5ID0gZmFsc2U7XG4gICAgfVxuICAgIG9uRGVsZXRlKCRldmVudCkge1xuICAgICAgICB0aGlzLmlzRGVmYXVsdFF1ZXJ5ID0gZmFsc2U7XG4gICAgfVxuICAgIG9uRW50ZXIoJGV2ZW50KSB7XG4gICAgICAgIHRoaXMuZGF0YXZhbHVlID0gJGV2ZW50LnRhcmdldC52YWx1ZTtcbiAgICB9XG5cbiAgICBvbk1vZGVsQ2hhbmdlKCRldmVudCkge1xuICAgICAgICBpZiAodGhpcy5pbnB1dG1vZGUgPT09IElOUFVUTU9ERS5OQVRVUkFMIHx8ICh0aGlzLmlucHV0bW9kZSA9PT0gSU5QVVRNT0RFLkZJTkFOQ0lBTCAmJiB0aGlzLm5nTW9kZWxPcHRpb25zLnVwZGF0ZU9uID09PSAnYmx1cicpKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGF2YWx1ZSA9ICRldmVudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG9uUHJvcGVydHlDaGFuZ2Uoa2V5LCBudiwgb3Y/KSB7XG4gICAgICAgIGlmIChrZXkgPT09ICdtaW52YWx1ZScgfHwga2V5ID09PSAnbWF4dmFsdWUnKSB7XG4gICAgICAgICAgICB0aGlzLmlzVmFsaWQobnYpO1xuICAgICAgICB9IGVsc2UgaWYgKGtleSA9PT0gJ2RhdGF2YWx1ZScgJiYgIW92KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5pc05hdHVyYWxDdXJyZW5jeSgpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0ZvclRyYWlsaW5nWmVyb3Moe3R5cGU6ICdibHVyJ30pO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLm9uSW5wdXRDaGFuZ2UobnYpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHVibGljIG9uUGFzdGUoJGV2ZW50OiBDbGlwYm9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBwYXN0ZWREYXRhID0gJGV2ZW50LmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dCcpO1xuXG4gICAgICAgIGZvciAoY29uc3QgY2hhciBvZiBwYXN0ZWREYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBtb2NrRXZlbnQgPSBuZXcgS2V5Ym9hcmRFdmVudCgna2V5cHJlc3MnLCB7IGtleTogY2hhciB9KTtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkYXRlSW5wdXRFbnRyeShtb2NrRXZlbnQpPT09ZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbn1cbiJdfQ==
|
|
554
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnVtYmVyLWxvY2FsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NvbXBvbmVudHMvd2lkZ2V0cy9pbnB1dC90ZXh0L3NyYy9udW1iZXItbG9jYWxlL251bWJlci1sb2NhbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUV6RCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFFdEUsT0FBTyxFQUFDLG1CQUFtQixFQUFFLFNBQVMsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUN4RCxPQUFPLEVBQWlCLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXhGLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNyRCxPQUFPLEVBQUMsUUFBUSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRWhHLElBQXNCLFlBQVksR0FBbEMsTUFBc0IsWUFBYSxTQUFRLFNBQVM7SUEyQmhELFlBQ0ksR0FBYSxFQUNiLE1BQXFCLEVBQ2IsV0FBZ0MsRUFDaEMsdUJBQWdELEVBQ2hCLGVBQW9CO1FBRTVELEtBQUssQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBSjVCLGdCQUFXLEdBQVgsV0FBVyxDQUFxQjtRQUNoQyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQXlCO1FBeEJwRCxtQkFBYyxHQUFZLElBQUksQ0FBQztRQUMvQixpQkFBWSxHQUFXLEVBQUUsQ0FBQztRQWEzQixtQkFBYyxHQUFZLEtBQUssQ0FBQztRQWNuQyxJQUFJLENBQUMsY0FBYyxHQUFHLFdBQVcsQ0FBQyxpQkFBaUIsRUFB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RUFBRSxDQUFDLENBQUM7WUFDL0QsSUFBSSxJQUFJLENBQUMsa0JBQWtCLENBQUMsU0FBUyxDQUFDLEtBQUcsS0FBSyxFQUFFLENBQUM7Z0JBQzdDLE1BQU0sQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDeEIsT0FBTztZQUNYLENBQUM7UUFDTCxDQUFDO0lBQ0wsQ0FBQztDQUVKLENBQUE7QUFqbEJxQixZQUFZO0lBZ0N6QixXQUFBLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO0lBQUUsV0FBQSxRQUFRLEVBQUUsQ0FBQTtxQ0FKbEMsUUFBUSxVQUVRLG1CQUFtQjtRQUNQLHVCQUF1QjtHQS9CMUMsWUFBWSxDQWlsQmpDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtJbmplY3QsIEluamVjdG9yLCBPcHRpb25hbH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIFZhbGlkYXRvciB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGdldExvY2FsZU51bWJlclN5bWJvbCwgTnVtYmVyU3ltYm9sIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcblxuaW1wb3J0IHtBYnN0cmFjdEkxOG5TZXJ2aWNlLCBpc0RlZmluZWR9IGZyb20gJ0B3bS9jb3JlJztcbmltcG9ydCB7IElXaWRnZXRDb25maWcsIFRyYWlsaW5nWmVyb0RlY2ltYWxQaXBlLCBJTlBVVE1PREUgfSBmcm9tICdAd20vY29tcG9uZW50cy9iYXNlJztcblxuaW1wb3J0IHsgQmFzZUlucHV0IH0gZnJvbSAnLi4vYmFzZS1pbnB1dC9iYXNlLWlucHV0JztcbmltcG9ydCB7aW5jbHVkZXMsIGludGVyc2VjdGlvbiwgaXNOdWxsLCBpc1N0cmluZywgaXNVbmRlZmluZWQsIHJvdW5kLCB0b0FycmF5fSBmcm9tIFwibG9kYXNoLWVzXCI7XG5cbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBOdW1iZXJMb2NhbGUgZXh0ZW5kcyBCYXNlSW5wdXQgaW1wbGVtZW50cyBWYWxpZGF0b3Ige1xuICAgIHByaXZhdGUgREVDSU1BTDogc3RyaW5nO1xuICAgIHByaXZhdGUgR1JPVVA6IHN0cmluZztcbiAgICBwcml2YXRlIHNlbGVjdGVkTG9jYWxlOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBwcm94eU1vZGVsOiBudW1iZXI7XG4gICAgcHJpdmF0ZSBudW1iZXJOb3RJblJhbmdlOiBib29sZWFuO1xuICAgIHByaXZhdGUgaXNJbnZhbGlkTnVtYmVyOiBib29sZWFuO1xuICAgIHByaXZhdGUgaXNEZWZhdWx0UXVlcnk6IGJvb2xlYW4gPSB0cnVlO1xuICAgIHByaXZhdGUgZGVjaW1hbFZhbHVlOiBzdHJpbmcgPSAnJztcbiAgICBwdWJsaWMgZGlzcGxheVZhbHVlOiBzdHJpbmc7XG4gICAgcHJpdmF0ZSBudW1iZXJmaWx0ZXI6IHN0cmluZztcbiAgICBwcml2YXRlIGxvY2FsZWZpbHRlcjogc3RyaW5nO1xuICAgIHB1YmxpYyByZWFkb25seTogYm9vbGVhbjtcblxuICAgIHB1YmxpYyBwbGFjZWhvbGRlcjogc3RyaW5nO1xuICAgIHB1YmxpYyBtaW52YWx1ZTogbnVtYmVyO1xuICAgIHB1YmxpYyBtYXh2YWx1ZTogbnVtYmVyO1xuICAgIHB1YmxpYyB1cGRhdGVvbjogc3RyaW5nO1xuICAgIHB1YmxpYyBzdGVwOiBudW1iZXI7XG4gICAgcHVibGljIHRyYWlsaW5nemVybzogYm9vbGVhbjtcbiAgICBwdWJsaWMgcmVnZXhQYXR0ZXJuOiBzdHJpbmc7XG4gICAgcHVibGljIGludmFsaWRQYXR0ZXJuOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHJpdmF0ZSB2YWxpZGF0ZVR5cGU6IHN0cmluZztcbiAgICBwdWJsaWMgaW5wdXRtb2RlOiBzdHJpbmc7XG4gICAgcHVibGljIGRlY2ltYWxwbGFjZXM6IG51bWJlcjtcbiAgICBwcml2YXRlIGxhc3RWYWxJc0RlY2ltYWw6IGJvb2xlYW47XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgaW5qOiBJbmplY3RvcixcbiAgICAgICAgY29uZmlnOiBJV2lkZ2V0Q29uZmlnLFxuICAgICAgICBwcml2YXRlIGkxOG5TZXJ2aWNlOiBBYnN0cmFjdEkxOG5TZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHRyYWlsaW5nWmVyb0RlY2ltYWxQaXBlOiBUcmFpbGluZ1plcm9EZWNpbWFsUGlwZSxcbiAgICAgICAgQEluamVjdCgnRVhQTElDSVRfQ09OVEVYVCcpIEBPcHRpb25hbCgpIGV4cGxpY2l0Q29udGV4dDogYW55XG4gICAgKSB7XG4gICAgICAgIHN1cGVyKGluaiwgY29uZmlnLCBleHBsaWNpdENvbnRleHQpO1xuICAgICAgICB0aGlzLnNlbGVjdGVkTG9jYWxlID0gaTE4blNlcnZpY2UuZ2V0U2VsZWN0ZWRMb2NhbGUoKTtcbiAgICAgICAgdGhpcy5ERUNJTUFMID0gZ2V0TG9jYWxlTnVtYmVyU3ltYm9sKHRoaXMubG9jYWxlZmlsdGVyIHx8IHRoaXMuc2VsZWN0ZWRMb2NhbGUsIE51bWJlclN5bWJvbC5EZWNpbWFsKTtcbiAgICAgICAgdGhpcy5HUk9VUCA9IGdldExvY2FsZU51bWJlclN5bWJvbCh0aGlzLmxvY2FsZWZpbHRlciB8fCB0aGlzLnNlbGVjdGVkTG9jYWxlLCBOdW1iZXJTeW1ib2wuR3JvdXApO1xuICAgICAgICB0aGlzLm51bWJlcmZpbHRlciA9ICcxLjAtMTYnO1xuICAgICAgICB0aGlzLnJlc2V0VmFsaWRhdGlvbnMoKTtcbiAgICB9XG5cbiAgICAvLyBTZXR0ZXIgZm9yIHRoZSBkYXRhdmFsdWUuXG4gICAgLy8gQHRzLWlnbm9yZVxuICAgIHNldCBkYXRhdmFsdWUodmFsdWU6IG51bWJlcikge1xuICAgICAgICB0aGlzLmxhc3RWYWxJc0RlY2ltYWwgPSBmYWxzZTtcblxuICAgICAgICAvLyBzZXQgdGV4dCB2YWx1ZSB0byBudWxsIGlmIGRhdGEgdmFsdWUgaXMgZW1wdHkuXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgaWYgKGluY2x1ZGVzKFtudWxsLCB1bmRlZmluZWQsICcnXSwgdmFsdWUpKSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgcHJldkRhdGFWYWx1ZSA9ICAodGhpcyBhcyBhbnkpLnByZXZEYXRhdmFsdWU7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IGlucHV0LnZhbHVlID0gdGhpcy5wcm94eU1vZGVsID0gbnVsbDtcbiAgICAgICAgICAgIHRoaXMucmVzZXRWYWxpZGF0aW9ucygpO1xuICAgICAgICAgICAgLy8gRml4IGZvciBbV01TLTI3NjQ4XTogV2hlbiBhIGRlY2ltYWwgdmFsdWUgaXMgZW50ZXJlZCAoZS5nLiwgXCIzLlwiKSwgZGF0YXZhbHVlIGFuZCBwcmV2RGF0YXZhbHVlIGJlY29tZSBudWxsIGFzIGl0IGlzIGFuIGludmFsaWQgbnVtYmVyLlxuICAgICAgICAgICAgLy8gaGFuZGxlQ2hhbmdlKCkgc2hvdWxkIGJlIGNhbGxlZCB3aGVuIHRoZSBpbnZhbGlkIGRhdGF2YWx1ZSAoZS5nLiwgXCIzLlwiKSBpcyByZW1vdmVkLCBhbmQgdGhlIHZhbHVlIGJlY29tZXMgYW4gZW1wdHkgc3RyaW5nIChcIlwiKS5cbiAgICAgICAgICAgIGlmICgocHJldkRhdGFWYWx1ZSB8fCBwcmV2RGF0YVZhbHVlID09IDAgfHwgcHJldkRhdGFWYWx1ZSA9PSBudWxsKSAmJiAhdGhpcy5pc0RlZmF1bHRRdWVyeSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICB0aGlzLl9vbkNoYW5nZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIGlmIHRoZSB3aWRnZXQgaGFzIGRlZmF1bHQgdmFsdWUgYW5kIGlmIHdlIGNoYW5nZSB0aGUgbG9jYWxlLCB0aGUgdmFsdWUgc2hvdWxkIGJlIGluIHNlbGVjdGVkIGxvY2FsZSBmb3JtYXQuXG4gICAgICAgIGlmICh0aGlzLmlzRGVmYXVsdFF1ZXJ5KSB7XG4gICAgICAgICAgICBjb25zdCBpc0xvY2FsaXplZE51bWJlciA9IGlzU3RyaW5nKHZhbHVlKSAmJiBpbmNsdWRlcyh2YWx1ZSwgdGhpcy5ERUNJTUFMKTtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gaXNMb2NhbGl6ZWROdW1iZXIgPyAodmFsdWUgYXMgYW55KS5zcGxpdCh0aGlzLkRFQ0lNQUwpIDogaXNTdHJpbmcodmFsdWUpICYmICh2YWx1ZSBhcyBhbnkpLnNwbGl0KCcuJyk7XG5cbiAgICAgICAgICAgIGxldCBkZWNpbWFsUGxhY2VzQXR0clZhbCA9IHRoaXMuZ2V0QXR0cignZGVjaW1hbHBsYWNlcycpO1xuICAgICAgICAgICAgY29uc3QgZGVjaW1hbHBsYWNlcyA9IGRlY2ltYWxQbGFjZXNBdHRyVmFsICE9PSAnJyAmJiBkZWNpbWFsUGxhY2VzQXR0clZhbCAhPT0gdW5kZWZpbmVkID8gTnVtYmVyKGRlY2ltYWxQbGFjZXNBdHRyVmFsKSA6IE5hTjtcbiAgICAgICAgICAgIGlmKHRoaXMuaW5wdXRtb2RlID09PSBJTlBVVE1PREUuTkFUVVJBTCAmJiAhaXNOYU4oZGVjaW1hbHBsYWNlcykpIHtcbiAgICAgICAgICAgICAgICBpZihkZWNpbWFscGxhY2VzID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZGVjaW1hbFZhbHVlID0gJyc7XG4gICAgICAgICAgICAgICAgICAgICh2YWx1ZSBhcyBhbnkpID0gaXNMb2NhbGl6ZWROdW1iZXIgPyBwYXJ0c1swXSA6IHRoaXMudHJhbnNmb3JtTnVtYmVyKHBhcnRzWzBdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYoZGVjaW1hbHBsYWNlcyA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWNpbWFsVmFsdWUgPSBwYXJ0c1sxXSAmJiBwYXJ0c1sxXS5zdWJzdHJpbmcoMCwgZGVjaW1hbHBsYWNlcykgfHwgJyc7XG4gICAgICAgICAgICAgICAgICAgIGlmKGlzTG9jYWxpemVkTnVtYmVyKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAodmFsdWUgYXMgYW55KSA9IHRoaXMuZGVjaW1hbFZhbHVlLmxlbmd0aCA/IGAke3BhcnRzWzBdfSR7dGhpcy5ERUNJTUFMfSR7dGhpcy5kZWNpbWFsVmFsdWV9YCA6IHBhcnRzWzBdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlIGFzIGFueSkgPSBOdW1iZXIucGFyc2VGbG9hdChTdHJpbmcodmFsdWUpKS50b0ZpeGVkKGRlY2ltYWxwbGFjZXMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRlY2ltYWxWYWx1ZSA9IHBhcnRzWzFdIHx8ICcnO1xuICAgICAgICAgICAgICAgICh2YWx1ZSBhcyBhbnkpID0gaXNMb2NhbGl6ZWROdW1iZXIgPyB2YWx1ZSA6IHRoaXMudHJhbnNmb3JtTnVtYmVyKHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG51bWJlclJlZyA9IC9cXGQvO1xuICAgICAgICBjb25zdCBzdHJWYWwgPSB2YWx1ZS50b1N0cmluZygpO1xuICAgICAgICBsZXQgbW9kZWw7XG4gICAgICAgIC8vIFdoZW4gdGhlIGlucHV0IHZhbHVlIG9ubHkgY29udGFpbnMgc2VwZXJhdG9yLCBkbyBub3QgY29udmVydCB0aGUgc2VwZXJ0YW9yIGludG8gMFxuICAgICAgICBpZiAobnVtYmVyUmVnLnRlc3Qoc3RyVmFsKSkge1xuICAgICAgICAgICAgbW9kZWwgPSB0aGlzLnBhcnNlTnVtYmVyKHN0clZhbCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBtb2RlbCA9IE5hTjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIE9uIGtleXByZXNzLCBpZiB0aGUgdXNlciB0eXBlcyBhIGRlY2ltYWwgYW5kIGlzIHN0aWxsIGFjdGl2ZSBvbiB0aGUgaW5wdXQgZG8gbm90IHRocm93IGVycm9yLlxuICAgICAgICBpZiAoaXNOYU4obW9kZWwpICYmIHN0clZhbFtzdHJWYWwubGVuZ3RoIC0gMV0gPT09IHRoaXMuREVDSU1BTCAmJiB0aGlzLm5nTW9kZWxPcHRpb25zLnVwZGF0ZU9uID09PSAnY2hhbmdlJyAmJiB0aGlzLiRlbGVtZW50LmZpbmQoJ2lucHV0OmZvY3VzJykubGVuZ3RoKSB7XG4gICAgICAgICAgICB0aGlzLmxhc3RWYWxJc0RlY2ltYWwgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIC8vIGdldCBhIHZhbGlkIG51bWJlciBmb3JtIHRoZSB0ZXh0LlxuICAgICAgICAvLyBpZiB0aGUgbnVtYmVyIGlzIHZhbGlkIG9yIGlmIG51bWJlciBpcyBub3QgaW4gcmFuZ2UgdXBkYXRlIHRoZSBtb2RlbCB2YWx1ZS5cbiAgICAgICAgaWYgKCF0aGlzLmxhc3RWYWxJc0RlY2ltYWwgJiYgdGhpcy5pc1ZhbGlkKG1vZGVsKSkge1xuICAgICAgICAgICAgdGhpcy5wcm94eU1vZGVsID0gbW9kZWw7XG4gICAgICAgICAgICAvLyB1cGRhdGUgdGhlIGRpc3BsYXkgdmFsdWUgaW4gdGhlIHRleHQgYm94LlxuICAgICAgICAgICAgdGhpcy51cGRhdGVEaXNwbGF5VGV4dCgpO1xuICAgICAgICAgICAgLy8gRG8gbm90IHRyaWdnZXIgb25jaGFuZ2UgZXZlbnQgZm9yIGRlZmF1bHQgdmFsdWVcbiAgICAgICAgICAgIGlmICghdGhpcy5pc0RlZmF1bHRRdWVyeSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hhbmdlKG1vZGVsKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdmFsdWUudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIHRoaXMucHJveHlNb2RlbCA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZShudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIHJldHVybnMgdGhlIGFjdHVhbCBtb2RlbCB2YWx1ZSBvZiB0aGUgd2lkZ2V0LlxuICAgIGdldCBkYXRhdmFsdWUoKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucHJveHlNb2RlbDtcbiAgICB9XG5cbiAgICAvLyByZXNldHMgYWxsIHRoZSBmbGFncyByZWxhdGVkIHRvIHRoZSB3aWRnZXQncyB2YWxpZGF0aW9uLlxuICAgIHByb3RlY3RlZCByZXNldFZhbGlkYXRpb25zKCkge1xuICAgICAgICB0aGlzLmlzSW52YWxpZE51bWJlciA9IGZhbHNlO1xuICAgICAgICB0aGlzLm51bWJlck5vdEluUmFuZ2UgPSBmYWxzZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBBZGRzIHZhbGlkYXRpb25zIGZvciB0aGUgbnVtYmVyIGJlZm9yZSB1cGRhdGluZyB0aGUgd2lkZ2V0IG1vZGVsLiBsaWtlIHZhbGlkYXRpbmcgbWluIGFuZCBtYXggdmFsdWUgZm9yIHRoZSB3aWRnZXQuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbCBudW1iZXIgdG8gYmUgdmFsaWRhdGVkXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBwcml2YXRlIGlzVmFsaWQodmFsOiBudW1iZXIpOiBib29sZWFuIHtcbiAgICAgICAgLy8gaWQgbnVtYmVyIGlzIGluZmluaXRlIHRoZW4gY29uc2lkZXIgaXQgYXMgaW52YWxpZCB2YWx1ZVxuICAgICAgICBsZXQgaW52YWxpZERlY2ltYWxQbGFjZXMgPSBmYWxzZTtcbiAgICAgICAgaWYodGhpcy5pbnB1dG1vZGUgPT09IElOUFVUTU9ERS5OQVRVUkFMICYmICFpc05hTih0aGlzLmRlY2ltYWxwbGFjZXMpICYmIHRoaXMuZGVjaW1hbHBsYWNlcyA+PSAwKSB7XG4gICAgICAgICAgICBpbnZhbGlkRGVjaW1hbFBsYWNlcyA9IHRoaXMuY291bnREZWNpbWFscyh2YWwpID4gdGhpcy5kZWNpbWFscGxhY2VzO1xuICAgICAgICB9IGVsc2UgaWYoIU51bWJlci5pc0ludGVnZXIodGhpcy5zdGVwKSAmJiB0aGlzLmNvdW50RGVjaW1hbHModmFsKSA+IHRoaXMuY291bnREZWNpbWFscyh0aGlzLnN0ZXApKSB7XG4gICAgICAgICAgICBpbnZhbGlkRGVjaW1hbFBsYWNlcyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzTmFOKHZhbCkgfHwgIWlzRmluaXRlKHZhbCkgfHwgaW52YWxpZERlY2ltYWxQbGFjZXMpIHtcbiAgICAgICAgICAgIHRoaXMuaXNJbnZhbGlkTnVtYmVyID0gdHJ1ZTtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodmFsICE9PSB0aGlzLmdldFZhbHVlSW5SYW5nZSh2YWwpKSB7XG4gICAgICAgICAgICB0aGlzLm51bWJlck5vdEluUmFuZ2UgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yZXNldFZhbGlkYXRpb25zKCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHJldHVybnMgYSB2YWxpZCBudW1iZXIgYnkgdmFsaWRhdGluZyB0aGUgbWluaW11bSBhbmQgbWF4aW11bSB2YWx1ZXMuXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBwcml2YXRlIGdldFZhbHVlSW5SYW5nZSh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCFpc05hTih0aGlzLm1pbnZhbHVlKSAmJiB2YWx1ZSA8IHRoaXMubWludmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVUeXBlID0gJ21pbnZhbHVlJztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1pbnZhbHVlO1xuXG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFpc05hTih0aGlzLm1heHZhbHVlKSAmJiB2YWx1ZSA+IHRoaXMubWF4dmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVUeXBlID0gJ21heHZhbHVlJztcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1heHZhbHVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjb252ZXJ0IG51bWJlciB0byBsb2NhbGl6ZWQgbnVtYmVyIHVzaW5nIGFuZ3VsYXIgZGVjaW1hbCBwaXBlLiBlZyAxMCwwMCwwMDAgb3IgMSwwMDAsMDAwXG4gICAgICogQHBhcmFtIG51bWJlclxuICAgICAqIEByZXR1cm5zIHtzdHJpbmd9XG4gICAgICovXG4gICAgcHJpdmF0ZSB0cmFuc2Zvcm1OdW1iZXIobnVtYmVyLCBudW1iZXJmaWx0ZXI/KTogc3RyaW5nIHtcbiAgICAgICAgY29uc3QgZmlsdGVyVmFsID0gbnVtYmVyZmlsdGVyID8gbnVtYmVyZmlsdGVyIDogdGhpcy5udW1iZXJmaWx0ZXI7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYWlsaW5nWmVyb0RlY2ltYWxQaXBlLnRyYW5zZm9ybShudW1iZXIsIHRoaXMuc2VsZWN0ZWRMb2NhbGUsIGZpbHRlclZhbCwgdGhpcy5sb2NhbGVmaWx0ZXIsIHRoaXMudHJhaWxpbmd6ZXJvLCB0aGlzLmRlY2ltYWxWYWx1ZSwgISFudW1iZXJmaWx0ZXIsIHRoaXMuaTE4blNlcnZpY2U/LmdldHdpZGdldExvY2FsZSgpKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXNldHMgdGhlIGN1cnNvciBwb3NpdGlvbiBpbiB0aGUgdGV4dCBib3guXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlIGN1cnNvciBwb3NpdGlvbiBpbmRleCBmb3JtIGxlZnQgdG8gcmlnaHQuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZXNldEN1cnNvclBvc2l0aW9uKHZhbHVlOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudDtcbiAgICAgICAgLy8gcG9zaXRpb24gb2YgdGhlIGN1cnNvciBzaG91bGQgYmUgZ2l2ZW4gZm9ybSByaWdodCB0byBsZWZ0LlxuICAgICAgICBsZXQgcG9zaXRpb24gPSBpbnB1dC52YWx1ZS5sZW5ndGggLSB2YWx1ZTtcbiAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbiA8IDAgPyAwIDogcG9zaXRpb247XG4gICAgICAgIC8vIHNldCB0aGUgY3Vyc29yIHBvc2l0aW9uIGluIHRoZSB0ZXh0IGJveC5cbiAgICAgICAgaW5wdXQuc2V0U2VsZWN0aW9uUmFuZ2UocG9zaXRpb24sIHBvc2l0aW9uKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBNZXRob2QgcGFyc2VzIHRoZSBMb2NhbGl6ZWQgbnVtYmVyKHN0cmluZykgdG8gYSB2YWxpZCBudW1iZXIuXG4gICAgICogaWYgdGhlIHN0cmluZyBkb3NlIG5vdCByZXN1bHQgdG8gYSB2YWxpZCBudW1iZXIgdGhlbiByZXR1cm5zIE5hTi5cbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdmFsIExvY2FsaXplZCBudW1iZXIuXG4gICAgICogQHJldHVybnMge251bWJlcn1cbiAgICAgKi9cbiAgICBwcml2YXRlIHBhcnNlTnVtYmVyKHZhbDogc3RyaW5nKTogbnVtYmVyIHtcbiAgICAgICAgLy8gV01TLTIyMTc5OiBzcGxpdCBudW1iZXIgYmFzZWQgb24gdGhlIGRlY2ltYWwgc2VwYXJhdG9yIGluIHRoZSB2YWxcbiAgICAgICAgLy8gc3BsaXRzIHN0cmluZyBpbnRvIHR3byBwYXJ0cy4gZGVjaW1hbCBhbmQgbnVtYmVyLlxuICAgICAgICBjb25zdCBwYXJ0cyA9IHZhbC5zcGxpdCh0aGlzLmlucHV0bW9kZSA9PT0gSU5QVVRNT0RFLkZJTkFOQ0lBTCA/ICh2YWwuaW5kZXhPZih0aGlzLkRFQ0lNQUwpID4gLTEgPyB0aGlzLkRFQ0lNQUwgOiAnLicpIDogdGhpcy5ERUNJTUFMKTtcbiAgICAgICAgaWYgKCFwYXJ0cy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIC8vIElmIG51bWJlciBoYXZlIGRlY2ltYWwgcG9pbnQgYW5kIG5vdCBoYXZlIGEgZGVjaW1hbCB2YWx1ZSB0aGVuIHJldHVybi5cbiAgICAgICAgaWYgKHBhcnRzWzFdID09PSAnJykge1xuICAgICAgICAgICAgcmV0dXJuIE5hTjtcbiAgICAgICAgfVxuICAgICAgICAvLyByZXBsYWNlcyBhbGwgZ3JvdXAgc2VwYXJhdG9ycyBmb3JtIHRoZSBudW1iZXIuXG4gICAgICAgIGNvbnN0IG51bWJlciA9IE51bWJlcihwYXJ0c1swXS5zcGxpdCh0aGlzLkdST1VQKS5qb2luKCcnKSk7XG4gICAgICAgIGNvbnN0IGRlY2ltYWwgPSBOdW1iZXIoYDAuJHtwYXJ0c1sxXSB8fCAwfWApO1xuICAgICAgICBpZiAoTnVtYmVyLmlzTmFOKG51bWJlcikgfHwgTnVtYmVyLmlzTmFOKGRlY2ltYWwpKSB7XG4gICAgICAgICAgICByZXR1cm4gTmFOO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN1bSA9IHBhcnRzLmxlbmd0aCA+IDEgPyBwYXJzZUZsb2F0KChudW1iZXIgKyBkZWNpbWFsKS50b0ZpeGVkKHBhcnRzWzFdLmxlbmd0aCkpIDogbnVtYmVyICsgZGVjaW1hbDtcbiAgICAgICAgLy8gaWYgdGhlIG51bWJlciBpcyBuZWdhdGl2ZSB0aGVuIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIGFzIG51bWJlciAtIGRlY2ltYWxcbiAgICAgICAgLy8gRXg6IG51bWJlciA9IC0xMjMgYW5kIGRlY2ltYWwgPSAwLjQ1IHRoZW4gbnVtYmVyIC0gZGVjaW1hbCA9IC0xMjMtMDQ1ID0gLTEyMy40NVxuICAgICAgICAvLyBJZiBlbnRlcmVkIG51bWJlciBpcyAtMC4xIHRvIC0wLjkgdGhlbiB0aGUgbnVtYmVyIGlzIC0wIGFuZCBkZWNpbWFsIGlzIDAuMSB0byAwLjkuIE5vdyBjYWxhY3VsYXRlIHRoZSBudW1iZXIgYXMgbnVtYmVyLWRlY2ltYWxcbiAgICAgICAgLy8gRXg6IG51bWJlciA9IC0wIGFuZCBkZWNpbWFsID0gMC4xIHRoZW4gbnVtYmVyLWRlY2ltYWwgPSAtMC0wLjEgPSAtMC4xXG4gICAgICAgIGlmIChudW1iZXIgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiBPYmplY3QuaXMoMCwgbnVtYmVyKSA/IHN1bSA6IG51bWJlciAtIGRlY2ltYWw7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bWJlciA+IDAgPyBzdW0gOiBudW1iZXIgLSBkZWNpbWFsO1xuICAgIH1cblxuICAgIC8vIHVwZGF0ZXMgdGhlIHdpZGdldHMgdGV4dCB2YWx1ZS5cbiAgICBwcml2YXRlIHVwZGF0ZURpc3BsYXlUZXh0KCkge1xuICAgICAgICBjb25zdCBpbnB1dCA9IHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCBwb3NpdGlvbjogbnVtYmVyID0gaW5wdXQuc2VsZWN0aW9uU3RhcnQ7XG4gICAgICAgIGNvbnN0IHByZVZhbHVlOiBzdHJpbmcgPSBpbnB1dC52YWx1ZTtcbiAgICAgICAgaWYgKCF0aGlzLmlzRGVmYXVsdFF1ZXJ5KSB7XG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IHByZVZhbHVlLnNwbGl0KHRoaXMuREVDSU1BTCk7XG4gICAgICAgICAgICB0aGlzLmRlY2ltYWxWYWx1ZSA9IHBhcnRzWzFdIHx8ICcnO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN0ZXBWYWwgPSB0aGlzLnN0ZXBMZW5ndGgoKTtcbiAgICAgICAgaWYgKHRoaXMuaW5wdXRtb2RlID09PSBJTlBVVE1PREUuRklOQU5DSUFMICYmIHN0ZXBWYWwpIHtcbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gaW5wdXQudmFsdWUgPSB0aGlzLnRyYW5zZm9ybU51bWJlcih0aGlzLnByb3h5TW9kZWwsIGAxLiR7c3RlcFZhbH0tJHtzdGVwVmFsfWApO1xuICAgICAgICAgICAgdGhpcy5kZWNpbWFsVmFsdWUgPSB0aGlzLmRlY2ltYWxWYWx1ZS5yZXBsYWNlKC9cXEQvZywnJyk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IGlucHV0LnZhbHVlID0gdGhpcy50cmFuc2Zvcm1OdW1iZXIodGhpcy5wcm94eU1vZGVsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmKHRoaXMudHJhaWxpbmd6ZXJvKSB7XG4gICAgICAgICAgICBjb25zdCByZWdleE9iaiA9IG5ldyBSZWdFeHAodGhpcy5yZWdleFBhdHRlcm4pO1xuICAgICAgICAgICAgdGhpcy5pbnZhbGlkUGF0dGVybiA9ICFyZWdleE9iai50ZXN0KHRoaXMuZGlzcGxheVZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICAvLyBpbiBzYWZhcmkgYnJvd3Nlciwgc2V0U2VsZWN0aW9uUmFuZ2Ugd2lsbCBmb2N1cyB0aGUgaW5wdXQgYnkgZGVmYXVsdCwgd2hpY2ggbWF5IGludm9rZSB0aGUgZm9jdXMgZXZlbnQgb24gd2lkZ2V0LlxuICAgICAgICAvLyBIZW5jZSBwcmV2ZW50aW5nIHRoZSBzZXRTZWxlY3Rpb25SYW5nZSB3aGVuIGRlZmF1bHQgdmFsdWUgaXMgc2V0IGkuZS4gd2lkZ2V0IGlzIG5vdCBmb2N1c2VkLlxuICAgICAgICBpZiAodGhpcy51cGRhdGVvbiA9PT0gJ2RlZmF1bHQnICYmICF0aGlzLmlzRGVmYXVsdFF1ZXJ5KSB7XG4gICAgICAgICAgICB0aGlzLnJlc2V0Q3Vyc29yUG9zaXRpb24ocHJlVmFsdWUubGVuZ3RoIC0gcG9zaXRpb24pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBzdGVwIGxlbmd0aCBzZXQgaW4gdGhlIHN0dWRpb1xuICAgIHByaXZhdGUgc3RlcExlbmd0aCgpIHtcbiAgICAgICAgaWYodGhpcy5pbnB1dG1vZGUgPT09ICdJTlBVVE1PREUuTkFUVVJBTCcgJiYgIWlzTmFOKHRoaXMuZGVjaW1hbHBsYWNlcykgJiYgdGhpcy5kZWNpbWFscGxhY2VzID49IDApIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmRlY2ltYWxwbGFjZXM7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgc3RlcExlbiA9IHRoaXMuc3RlcC50b1N0cmluZygpLnNwbGl0KCcuJyk7XG4gICAgICAgIGlmIChzdGVwTGVuLmxlbmd0aCA9PT0gMSApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBzdGVwTGVuWzFdLmxlbmd0aDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIHRoZSBjdXJyZW5jeSB3aWRnZXQgaGFzIGlucHV0IG1vZGUgYXMgbmF0dXJhbCBhbmQgdHJhaWxpbmcgemVybyBpcyBkZWZpbmVkIG9yIG5vdFxuICAgIHB1YmxpYyBpc05hdHVyYWxDdXJyZW5jeSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5wdXRtb2RlID09PSBJTlBVVE1PREUuTkFUVVJBTCAmJiB0aGlzLndpZGdldFR5cGUgPT09ICd3bS1jdXJyZW5jeScgJiYgISF0aGlzLnRyYWlsaW5nemVybztcbiAgICB9XG5cbiAgICAgICAvKipcbiAgICAgKiBAcGFyYW0gdmFsdWUgY29udGFpbnMgdGhlIHZhbHVlIGVudGVyZWQgaW4gdGhlIGlucHV0IGJveFxuICAgICAqIFRoaXMgZnVuY3Rpb24gbW9kaWZpZXMgdGhlIHVzZXIgaW5wdXQgdmFsdWUsIGludG8gZmluYW5jaWFsIG1vZGUuXG4gICAgICogTnVtYmVyIHN0YXJ0cyBmcm9tIGhpZ2hlc3QgcHJlY2VzaW9uIGRlY2ltYWwsIG9uIHR5cGluZyBudW1iZXIgc2hpZnRzIHRvIHRoZSBsZWZ0XG4gICAgICovXG4gICAgcHVibGljIG9uSW5wdXRDaGFuZ2UodmFsdWU6IGFueSkge1xuICAgICAgICBjb25zdCBzdGVwVmFsID0gdGhpcy5zdGVwTGVuZ3RoKCk7XG4gICAgICAgIGNvbnN0IHByZXZEYXRhVmFsdWUgPSAgdGhpcy5nZXRQcmV2RGF0YVZhbHVlKCk7XG4gICAgICAgIC8vIFdNUy0yMjM1NSwgVHJpZ2dlciBjaGFuZ2UgY2IgaWYgdmFsdWUgZXhpc3RzIG9yIHZhbHVlIGlzIGVtcHR5IGJ1dCBkYXRhdmFsdWUgZXhpc3RzICh3aGVuIHZhbHVlIGlzIHNlbGVjdGVkIGFuZCBkZWxldGVkKS5cbiAgICAgICAgICAgLy8gRml4IGZvciBbV01TLTI3MDQxXTogRW5zdXJlIHRoZSBjaGFuZ2UgY2FsbGJhY2sgZm9yIHRoZSBudW1iZXIgd2lkZ2V0IHRyaWdnZXJzIG9ubHkgb24gZm9jdXMgb3V0ICh3aGVuIHVwZGF0ZW9uIGlzIHNldCB0byBibHVyKSxcbiAgICAgICAgICAgLy8gbm90IGR1cmluZyBpbml0aWFsIGlucHV0IHdoZW4gdGhlIHByZXZpb3VzIHZhbHVlIGlzIHVuZGVmaW5lZCBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgaXMgbnVsbC5cbiAgICAgICAgaWYgKGlzRGVmaW5lZCh2YWx1ZSkgJiYgKHZhbHVlICE9PSAnJyB8fCB0aGlzLmRhdGF2YWx1ZSB8fCB0aGlzLmRhdGF2YWx1ZSA9PSAwKSkge1xuICAgICAgICAgICAgaWYgKHRoaXMud2lkZ2V0VHlwZSA9PT0gXCJ3bS1udW1iZXJcIikge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmlucHV0bW9kZSA9PSBJTlBVVE1PREUuRklOQU5DSUFMKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIENhc2UgMTogd2hlbiB0aGVyZSBpcyBubyBkZWZhdWx0IHZhbHVlLCBwcmV2RGF0YVZhbHVlIGlzIHVuZGVmaW5lZCAmJiB0aGlzLmRhdGF2YWx1ZSBpcyBudWxsXG4gICAgICAgICAgICAgICAgICAgIC8vIENhc2UgMjogd2hlbiB0aGVyZSBkZWZhdWx0IHZhbHVlLCBwcmV2RGF0YVZhbHVlIGlzIGVxdWFsIHRvIHRoaXMuZGF0YXZhbHVlXG4gICAgICAgICAgICAgICAgICAgIGlmICghKChwcmV2RGF0YVZhbHVlID09IHVuZGVmaW5lZCAmJiB0aGlzLmRhdGF2YWx1ZSA9PSBudWxsKSB8fCAocHJldkRhdGFWYWx1ZSA9PSB0aGlzLmRhdGF2YWx1ZSkpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZSh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIShwcmV2RGF0YVZhbHVlID09IHVuZGVmaW5lZCAmJiB0aGlzLmRhdGF2YWx1ZSA9PSBudWxsKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHsgLy8gY3VycmVuY3kgd2lkZ2V0XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UodmFsdWUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFzdGVwVmFsIHx8IHRoaXMuaW5wdXRtb2RlICE9PSBJTlBVVE1PREUuRklOQU5DSUFMKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZmluYW5jaWFsVmFsO1xuXG4gICAgICAgIC8qKlxuICAgICAgICAgKiBJZiB0aGUgdmFsdWUgaXMgZW50ZXJlZCBieSB0aGUgdXNlciwgZm9ybWF0IHRoZSBpbnB1dFxuICAgICAgICAgKiBJZiB0aGUgdmFsdWUgaXMgcHJvdmlkZWQgYXMgZGVmYXVsdCB2YWx1ZSwgc2tpcCBmb3JtYXR0aW5nXG4gICAgICAgICAqL1xuICAgICAgICBpZiAodGhpcy5pc0RlZmF1bHRRdWVyeSkge1xuICAgICAgICAgICAgZmluYW5jaWFsVmFsID0gcGFyc2VGbG9hdCh2YWx1ZSk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjb25zdCB2YWxJbldob2xlTnVtID0gcGFyc2VJbnQodmFsdWUudG9TdHJpbmcoKS5yZXBsYWNlKC9cXEQvZywnJykpO1xuICAgICAgICAgICAgZmluYW5jaWFsVmFsID0gdmFsSW5XaG9sZU51bSAqICB0aGlzLnN0ZXA7XG4gICAgICAgIH1cblxuICAgICAgICAgICBpZiAoIWlzTmFOKGZpbmFuY2lhbFZhbCkpIHtcbiAgICAgICAgICAgIC8vIFdoZW4gdXBkYXRlIG9uIGtleSBpcyBzZXQga2V5cHJlc3MsIHVwZGF0ZSB0aGUgZGF0YXZhbHVlIGVsc2UgdXBkYXRlIG9ubHkgdGhlIGRpc3BsYXkgdmFsdWVcbiAgICAgICAgICAgIGlmICh0aGlzLm5nTW9kZWxPcHRpb25zLnVwZGF0ZU9uID09PSAnY2hhbmdlJykge1xuICAgICAgICAgICAgICAgIHRoaXMuZGF0YXZhbHVlID0gcGFyc2VGbG9hdChmaW5hbmNpYWxWYWwudG9GaXhlZChzdGVwVmFsKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UodGhpcy5kYXRhdmFsdWUpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlWYWx1ZSA9IGZpbmFuY2lhbFZhbC50b0ZpeGVkKHN0ZXBWYWwpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubmdNb2RlbE9wdGlvbnMudXBkYXRlT24gIT09ICdibHVyJykge1xuICAgICAgICAgICAgdGhpcy5kYXRhdmFsdWUgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgICB0aGlzLmhhbmRsZUNoYW5nZShudWxsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIElucHV0IG1vZGUgaXMgZmluYW5jaWFsIGFuZCB0cmFpbGluZyB6ZXJvIGlzIHNldCB0byBmYWxzZSwgT24gZm9jdXMgc2V0IGRpc3BsYXkgdmFsIHRvIGZpeGVkIHBvaW50IG5vdGF0aW9uIGFuZCBPbiBibHVyIHN0cmlwIHRyYWlsaW5nIHplcm9zXG4gICAgLy8gSW4gY3VycmVuY3ksIGlucHV0bW9kZSBpcyBuYXR1cmFsIGFuZCB0cmFpbGluZyB6ZXJvIGFuZCBzdGVwIGFyZSBkZWZpbmVkLCBvbiBibHVyIGRpc3BsYXkgdmFsIHRvIGZpeGVkIHBvaW50IG5vdGF0aW9uIGFuZCBvbiBmb2N1cyBzdHJpcCB0aGUgemVyb3NcbiAgICBwdWJsaWMgY2hlY2tGb3JUcmFpbGluZ1plcm9zKCRldmVudCkge1xuICAgICAgICBjb25zdCBzdGVwVmFsID0gdGhpcy5zdGVwTGVuZ3RoKCk7XG4gICAgICAgIGNvbnN0IGZpbmFuY2lhbE1vZGUgPSAhdGhpcy50cmFpbGluZ3plcm8gJiYgdGhpcy5pbnB1dG1vZGUgPT09IElOUFVUTU9ERS5GSU5BTkNJQUw7XG5cbiAgICAgICAgLy8gSWYgdGhlIHVzZXIncyBsYXN0IGlucHV0IGlzIGEgZGVjaW1hbCBhbmQgbm90IGFjdGl2ZSBvbiBpbnB1dCBmaWVsZCwgdGhyb3cgZXJyb3JcbiAgICAgICAgaWYgKHRoaXMubGFzdFZhbElzRGVjaW1hbCkge1xuICAgICAgICAgICAgdGhpcy5vbk1vZGVsQ2hhbmdlKHRoaXMuZGlzcGxheVZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWZpbmFuY2lhbE1vZGUgJiYgIXRoaXMuaXNOYXR1cmFsQ3VycmVuY3koKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmIChzdGVwVmFsICYmIHRoaXMuZGF0YXZhbHVlKSB7XG4gICAgICAgICAgICBsZXQgbnVtYmVyZmlsdGVyO1xuICAgICAgICAgICAgaWYgKChmaW5hbmNpYWxNb2RlICYmICRldmVudC50eXBlID09PSAnZm9jdXMnKSB8fCAodGhpcy5pc05hdHVyYWxDdXJyZW5jeSgpICYmICRldmVudC50eXBlID09PSAnYmx1cicpKSB7XG4gICAgICAgICAgICAgICAgbnVtYmVyZmlsdGVyID0gYDEuJHtzdGVwVmFsfS0ke3N0ZXBWYWx9YDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuZGlzcGxheVZhbHVlID0gdGhpcy50cmFuc2Zvcm1OdW1iZXIodGhpcy5kYXRhdmFsdWUsIG51bWJlcmZpbHRlcik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiByZXR1cm5zIHRoZSBudW1iZXIgb2YgZGVjaW1hbCBwbGFjZXMgYSBudW1iZXIgaGF2ZS5cbiAgICAgKiBAcGFyYW0gdmFsdWU6IG51bWJlclxuICAgICAqIEByZXR1cm5zIHtudW1iZXJ9XG4gICAgICovXG4gICAgcHJpdmF0ZSBjb3VudERlY2ltYWxzKHZhbHVlKSB7XG4gICAgICAgIGNvbnN0IG51bSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICAgIGlmIChudW0gPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ29udmVydCB0byBudW1iZXIgYW5kIGhhbmRsZSBzY2llbnRpZmljIG5vdGF0aW9uXG4gICAgICAgIGlmIChOdW1iZXIuaXNOYU4obnVtKSkgcmV0dXJuIDA7XG5cbiAgICAgICAgLy8gR2V0IHRoZSBleHBvbmVudGlhbCBmb3JtIHRvIGhhbmRsZSBzY2llbnRpZmljIG5vdGF0aW9uIHByb3Blcmx5XG4gICAgICAgIGNvbnN0IGV4cG9uZW50aWFsU3RyID0gbnVtLnRvRXhwb25lbnRpYWwoKTtcbiAgICAgICAgY29uc3QgbWF0Y2ggPSBleHBvbmVudGlhbFN0ci5tYXRjaCgvXi0/XFxkKlxcLj8oXFxkKyk/ZShbKy1dXFxkKykkLyk7XG5cbiAgICAgICAgaWYgKG1hdGNoKSB7XG4gICAgICAgICAgICBjb25zdCBkZWNpbWFscyA9IG1hdGNoWzFdID8gbWF0Y2hbMV0ubGVuZ3RoIDogMDtcbiAgICAgICAgICAgIGNvbnN0IGV4cG9uZW50ID0gcGFyc2VJbnQobWF0Y2hbMl0pO1xuICAgICAgICAgICAgcmV0dXJuIE1hdGgubWF4KDAsIGRlY2ltYWxzIC0gZXhwb25lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gRmFsbGJhY2sgdG8gcmVndWxhciBkZWNpbWFsIGNvdW50aW5nXG4gICAgICAgIGNvbnN0IGRlY2ltYWxTdHIgPSBudW0udG9TdHJpbmcoKTtcbiAgICAgICAgY29uc3QgaXNMb2NhbGl6ZWROdW1iZXIgPSBpbmNsdWRlcyhkZWNpbWFsU3RyLCB0aGlzLkRFQ0lNQUwpO1xuICAgICAgICBjb25zdCBwYXJ0cyA9IGlzTG9jYWxpemVkTnVtYmVyID8gZGVjaW1hbFN0ci5zcGxpdCh0aGlzLkRFQ0lNQUwpIDogZGVjaW1hbFN0ci5zcGxpdCgnLicpO1xuICAgICAgICByZXR1cm4gcGFydHNbMV0gPyBwYXJ0c1sxXS5sZW5ndGggOiAwO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGhhbmRsZXMgdGhlIGFycm93IHByZXNzIGV2ZW50LiBJbmNyZWFzZXMgb3IgZGVjcmVhc2VzIHRoZSBudW1iZXIuIHRyaWdnZXJlZCBmb20gdGhlIHRlbXBsYXRlXG4gICAgICogQHBhcmFtICRldmVudCBrZXlib2FyZCBldmVudC5cbiAgICAgKiBAcGFyYW0ga2V5IGlkZW50aWZpZXIgdG8gaW5jcmVhc2Ugb3IgZGVjcmVhc2UgdGhlIG51bWJlci5cbiAgICAgKi9cbiAgICBwdWJsaWMgb25BcnJvd1ByZXNzKCRldmVudCwga2V5KSB7XG4gICAgICAgICRldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICBpZiAodGhpcy5yZWFkb25seSB8fCB0aGlzLnN0ZXAgPT09IDApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB0YXJnZXRWYWwgPSAkZXZlbnQudGFyZ2V0LnZhbHVlLnJlcGxhY2UoLywvZywgJycpO1xuXG4gICAgICAgIC8vIHByb3h5TW9kZWwgdG8gYmUgdXBkYXRlZCBmcm9tICRldmVudC50YXJnZXQudmFsdWUgaWYgcHJlc2VudCB0byBzdXBwb3J0IGFycm93IGtleXMgd2hlbiBpbnB1dCBjaGFuZ2VzIGVsc2UgcGljayB1cCBmcm9tIHRoaXMucHJveHltb2RlbFxuICAgICAgICBsZXQgcHJveHlNb2RlbDtcbiAgICAgICAgaWYgKHRhcmdldFZhbCAmJiAhaXNOYU4ocGFyc2VGbG9hdCh0YXJnZXRWYWwpKSkge1xuICAgICAgICAgICAgcHJveHlNb2RlbCA9IHBhcnNlRmxvYXQodGFyZ2V0VmFsKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHByb3h5TW9kZWwgPSB0aGlzLnByb3h5TW9kZWw7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgdmFsdWU7XG5cbiAgICAgICAgLy8gaWYgdGhlIG51bWJlciBpcyBub3QgaW4gcmFuZ2UgYW5kIHdoZW4gYXJyb3cgYnV0dG9ucyBhcmUgcHJlc3NlZCBuZWVkIHRvIGdldCBhcHByb3ByaWF0ZSBudW1iZXIgdmFsdWUuXG4gICAgICAgIGlmICh0aGlzLm51bWJlck5vdEluUmFuZ2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGlucHV0VmFsdWUgPSB0aGlzLnBhcnNlTnVtYmVyKHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LnZhbHVlKTtcbiAgICAgICAgICAgIC8vIHRha2UgdGhlIHRleHRib3ggdmFsdWUgYXMgY3VycmVudCBtb2RlbCBpZiB0aGUgdmFsdWUgaXMgdmFsaWQuXG4gICAgICAgICAgICBpZiAoIWlzTmFOKGlucHV0VmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmdldFZhbHVlSW5SYW5nZShpbnB1dFZhbHVlKTtcbiAgICAgICAgICAgICAgICBwcm94eU1vZGVsID0gaW5wdXRWYWx1ZTtcbiAgICAgICAgICAgICAgICB0aGlzLnJlc2V0VmFsaWRhdGlvbnMoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGlmIChpc1VuZGVmaW5lZChwcm94eU1vZGVsKSB8fCBpc051bGwocHJveHlNb2RlbCkpIHtcbiAgICAgICAgICAgICAgICBwcm94eU1vZGVsID0gdmFsdWUgPSB0aGlzLmdldFZhbHVlSW5SYW5nZSgodGhpcy5taW52YWx1ZSB8fCAwKSk7XG4gICAgICAgICAgICAgICAgdGhpcy5yZXNldFZhbGlkYXRpb25zKCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5nZXRWYWx1ZUluUmFuZ2UocHJveHlNb2RlbCArIChrZXkgPT09ICdVUCcgPyB0aGlzLnN0ZXAgOiAtdGhpcy5zdGVwKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChrZXkgPT09ICdVUCcgJiYgcHJveHlNb2RlbCA8PSB2YWx1ZSkgfHwgKGtleSA9PT0gJ0RPV04nICYmIHByb3h5TW9kZWwgPj0gdmFsdWUpKSB7XG4gICAgICAgICAgICBjb25zdCBkZWNpbWFsUm91bmRWYWx1ZSA9IE1hdGgubWF4KHRoaXMuY291bnREZWNpbWFscyhwcm94eU1vZGVsKSwgdGhpcy5jb3VudERlY2ltYWxzKHRoaXMuc3RlcCkpO1xuXG4gICAgICAgICAgICAvLyB1cGRhdGUgdGhlIG1vZGVsUHJveHkuXG4gICAgICAgICAgICB0aGlzLnByb3h5TW9kZWwgPSByb3VuZCh2YWx1ZSwgZGVjaW1hbFJvdW5kVmFsdWUpO1xuICAgICAgICAgICAgdGhpcy51cGRhdGVEaXNwbGF5VGV4dCgpO1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGFuZ2UodGhpcy5wcm94eU1vZGVsKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIG1ldGhvZCBpcyBjYWxsZWQgZnJvbSB0aGUgZnJvbSB3aWRnZXQuIHRvIGNoZWNrIHdoZXRoZXIgdGhlIHZhbHVlIGVudGVyZWQgaXMgdmFsaWQgb3Igbm90LlxuICAgICAqIEByZXR1cm5zIHtvYmplY3R9XG4gICAgICovXG4gICAgcHVibGljIHZhbGlkYXRlKGM6IEFic3RyYWN0Q29udHJvbCkge1xuICAgICAgICBpZiAodGhpcy5pc0ludmFsaWROdW1iZXIpIHtcbiAgICAgICAgICAgIHRoaXMudmFsaWRhdGVUeXBlID0gJyc7XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGludmFsaWROdW1iZXI6IHtcbiAgICAgICAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlXG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMubnVtYmVyTm90SW5SYW5nZSkge1xuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBudW1iZXJOb3RJblJhbmdlOiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbGlkOiBmYWxzZVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIGlmKHRoaXMuaW52YWxpZFBhdHRlcm4pIHtcbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgcGF0dGVybjoge1xuICAgICAgICAgICAgICAgICAgICB2YWxpZDogZmFsc2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudmFsaWRhdGVUeXBlID0gJyc7XG4gICAgICAgIC8qIFdNUy0xODI2OSB8IEV4dGVuZGluZyB0aGUgZXhpc3RpbmcgdmFsaWRhdGlvbiBmb3IgJ3JlcXVpcmVkJyAqL1xuICAgICAgICBpZiAodGhpc1snc2hvdyddICYmIHRoaXNbJ3JlcXVpcmVkJ10pIHtcbiAgICAgICAgICAgIHJldHVybiAoISFjLnZhbHVlIHx8IGMudmFsdWUgPT09IDApID8gbnVsbCA6IHsgcmVxdWlyZWQ6IHRydWUgfTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwdWJsaWMgdmFsaWRhdGVJbnB1dEVudHJ5KCRldmVudCkge1xuXG4gICAgICAgIHRoaXMuaXNEZWZhdWx0UXVlcnkgPSBmYWxzZTtcblxuICAgICAgICAvLyBhbGxvdyBhY3Rpb25zIGlmIGNvbnRyb2wga2V5IGlzIHByZXNzZWQgb3IgaWYgYmFja3NwYWNlIGlzIHByZXNzZWQuIChmb3IgTW96aWxsYSkuXG4gICAgICAgIGlmICgkZXZlbnQuY3RybEtleSB8fCBpbmNsdWRlcyhbJ0JhY2tzcGFjZScsICdBcnJvd1JpZ2h0JywgJ0Fycm93TGVmdCcsICdUYWInLCAnRW50ZXInLCAnRGVsZXRlJ10sICRldmVudC5rZXkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB2YWxpZGl0eSA9IG5ldyBSZWdFeHAoYF5bXFxcXGRcXFxccy0sLmUrJHt0aGlzLkdST1VQfSR7dGhpcy5ERUNJTUFMfV0kYCwgJ2knKTtcbiAgICAgICAgY29uc3QgaW5wdXRWYWx1ZSA9ICRldmVudC50YXJnZXQ/LnZhbHVlfHxcIlwiO1xuXG4gICAgICAgIC8vIHdoZW4gaW5wdXQgbW9kZSBpcyBmaW5hbmNpYWwsIGRvIG5vdCByZXN0cmljdCB1c2VyIG9uIGVudGVyaW5nIHRoZSB2YWx1ZSB3aGVuIHN0ZXAgdmFsdWUgbGltaXQgaXMgcmVhY2hlZC5cbiAgICAgICAgY29uc3Qgc2tpcFN0ZXBWYWxpZGF0aW9uID0gdGhpcy5pbnB1dG1vZGUgPT09IElOUFVUTU9ERS5GSU5BTkNJQUw7XG5cbiAgICAgICAgLy8gVmFsaWRhdGVzIGlmIHVzZXIgZW5ldGVycyBtb3JlIHRoYW4gMTYgZGlnaXRzXG4gICAgICAgIGlmIChpbnB1dFZhbHVlKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJzZWRWYWwgPSAgcGFyc2VJbnQoaW5wdXRWYWx1ZS50b1N0cmluZygpLnJlcGxhY2UoL1xcRC9nLCcnKSk7XG4gICAgICAgICAgICBpZiAocGFyc2VkVmFsLnRvU3RyaW5nKCkubGVuZ3RoID4gMTUpIHtcbiAgICAgICAgICAgICAgICAvLyBXTVMtMjIzMjE6IElmIHRoZSBudW1iZXIgaXMgZ3JlYXRlciB0aGFuIE1BWF9TQUZFX0lOVEVHRVIgKG1vcmUgdGhhbiAxNSBudW1iZXJzKS5cbiAgICAgICAgICAgICAgICAvLyB1c2VyIHNlbGVjdHMgYSByYW5nZSBvZiBkaWdpdHMgYW5kIHByZXNzZXMgYSBrZXkuXG4gICAgICAgICAgICAgICAgLy8gRG8gbm90IHRocm93IHZhbGlkYXRpb24gb2YgZXhjZWVkZWQgbnVtYmVyIGFzIHNlbGVjdGVkIHJhbmdlIHZhbHVlIHdpbGwgYmUgZGVsZXRlZC5cbiAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3RlZFZhbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWRWYWwgJiYgc2VsZWN0ZWRWYWwudG9TdHJpbmcoKSAmJiBzZWxlY3RlZFZhbC5mb2N1c05vZGUgPT09IHRoaXMubmF0aXZlRWxlbWVudCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdmFsaWRhdGVzIGVudGVyaW5nIG9mIGRlY2ltYWwgdmFsdWVzIG9ubHkgd2hlbiB1c2VyIHByb3ZpZGVzIGRlY2ltYWwgbGltaXQoaS5lIHN0ZXAgY29udGFpbnMgZGVjaW1hbCB2YWx1ZXMpLlxuICAgICAgICAvLyBSZXN0cmljdCB1c2VyIGZyb20gZW50ZXJpbmcgb25seSBpZiB0aGUgZGVjaW1hbCBsaW1pdCBpcyByZWFjaGVkIGFuZCB0aGUgbmV3IGRpZ2l0IGlzIGVudGVyZWQgaW4gZGVjaW1hbCBwbGFjZVxuICAgICAgICAvLyBpZiAoIXNraXBTdGVwVmFsaWRhdGlvbiAmJiBpbnB1dFZhbHVlICYmIHRoaXMuY291bnREZWNpbWFscyh0aGlzLnN0ZXApICYmICh0aGlzLmNvdW50RGVjaW1hbHMoaW5wdXRWYWx1ZSkgPj0gdGhpcy5jb3VudERlY2ltYWxzKHRoaXMuc3RlcCkpICYmICRldmVudC50YXJnZXQuc2VsZWN0aW9uU3RhcnQgPj0gaW5wdXRWYWx1ZS5sZW5ndGggLSAxKSB7XG4gICAgICAgIC8vICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIC8vIH1cbiAgICAgICAgLy8gdmFsaWRhdGVzIGlmIHVzZXIgZW50ZXJlZCBhbiBpbnZhbGlkIGNoYXJhY3Rlci5cbiAgICAgICAgaWYgKCF2YWxpZGl0eS50ZXN0KCRldmVudC5rZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICBpZih0aGlzLmlucHV0bW9kZSA9PT0gSU5QVVRNT0RFLk5BVFVSQUwgJiYgIWlzTmFOKHRoaXMuZGVjaW1hbHBsYWNlcykpIHtcbiAgICAgICAgICAgIGlmKHRoaXMuZGVjaW1hbHBsYWNlcyA9PT0gMCAmJiB0aGlzLkRFQ0lNQUwgPT09ICRldmVudC5rZXkpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IGluY2x1ZGVzKGlucHV0VmFsdWUsIHRoaXMuREVDSU1BTCkgPyAoaW5wdXRWYWx1ZSBhcyBhbnkpLnNwbGl0KHRoaXMuREVDSU1BTCkgOiBpbnB1dFZhbHVlLnNwbGl0KCcuJyk7XG4gICAgICAgICAgICBjb25zdCBpc0N1cnNvclBvc2l0aW9uQXREZWNpbWFsUGxhY2UgPSAkZXZlbnQudGFyZ2V0LnNlbGVjdGlvblN0YXJ0ID4gcGFydHNbMF0ubGVuZ3RoO1xuICAgICAgICAgICAgaWYodGhpcy5kZWNpbWFscGxhY2VzID4gMCAmJiB0aGlzLmNvdW50RGVjaW1hbHMoaW5wdXRWYWx1ZSkgPj0gdGhpcy5kZWNpbWFscGxhY2VzICYmIGlzQ3Vyc29yUG9zaXRpb25BdERlY2ltYWxQbGFjZSkge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGNvbW1hIGNhbm5vdCBiZSBlbnRlcmVkIGNvbnNlY3V0aXZlbHlcbiAgICAgICAgaWYgKGluY2x1ZGVzKGlucHV0VmFsdWUsICcsJykgJiYgaW5wdXRWYWx1ZVtpbnB1dFZhbHVlLmxlbmd0aCAtIDFdID09PSAnLCcgJiYgJGV2ZW50LmtleSA9PT0gJywnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhIGRlY2ltYWwgdmFsdWUgY2FuIGJlIGVudGVyZWQgb25seSBvbmNlIGluIHRoZSBpbnB1dC5cbiAgICAgICAgaWYgKGluY2x1ZGVzKGlucHV0VmFsdWUsIHRoaXMuREVDSU1BTCkgJiYgJGV2ZW50LmtleSA9PT0gdGhpcy5ERUNJTUFMKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgLy8gJ2UnIGNhbiBiZSBlbnRlcmVkIG9ubHkgb25jZSBpbiB0aGUgaW5wdXQuXG4gICAgICAgIGlmIChpbnRlcnNlY3Rpb24odG9BcnJheShpbnB1dFZhbHVlKSwgWydlJywgJ0UnXSkubGVuZ3RoICYmIGluY2x1ZGVzKCdlRScsICRldmVudC5rZXkpKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKChpbmNsdWRlcyhpbnB1dFZhbHVlLCAnKycpIHx8IGluY2x1ZGVzKGlucHV0VmFsdWUsICctJykpICYmICgkZXZlbnQua2V5ID09PSAnKycgfHwgJGV2ZW50LmtleSA9PT0gJy0nKSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIERvIG5vdCBhbGxvdyB1c2VyIHRvIGVudGVyIG9ubHkgc3BhY2Ugd2l0aG91dCBhbnkgaW5wdXQgdmFsdWVcbiAgICAgICAgaWYgKCFpbnB1dFZhbHVlICYmICRldmVudC5jb2RlID09PSAnU3BhY2UnKSB7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG4gICAgb25CYWNrc3BhY2UoJGV2ZW50KSB7XG4gICAgICAgIHRoaXMuaXNEZWZhdWx0UXVlcnkgPSBmYWxzZTtcbiAgICB9XG4gICAgb25EZWxldGUoJGV2ZW50KSB7XG4gICAgICAgIHRoaXMuaXNEZWZhdWx0UXVlcnkgPSBmYWxzZTtcbiAgICB9XG4gICAgb25FbnRlcigkZXZlbnQpIHtcbiAgICAgICAgdGhpcy5kYXRhdmFsdWUgPSAkZXZlbnQudGFyZ2V0LnZhbHVlO1xuICAgIH1cblxuICAgIG9uTW9kZWxDaGFuZ2UoJGV2ZW50KSB7XG4gICAgICAgIGlmICh0aGlzLmlucHV0bW9kZSA9PT0gSU5QVVRNT0RFLk5BVFVSQUwgfHwgKHRoaXMuaW5wdXRtb2RlID09PSBJTlBVVE1PREUuRklOQU5DSUFMICYmIHRoaXMubmdNb2RlbE9wdGlvbnMudXBkYXRlT24gPT09ICdibHVyJykpIHtcbiAgICAgICAgICAgIHRoaXMuZGF0YXZhbHVlID0gJGV2ZW50O1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdj8pIHtcbiAgICAgICAgaWYgKGtleSA9PT0gJ21pbnZhbHVlJyB8fCBrZXkgPT09ICdtYXh2YWx1ZScpIHtcbiAgICAgICAgICAgIHRoaXMuaXNWYWxpZChudik7XG4gICAgICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnZGF0YXZhbHVlJyAmJiAhb3YpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmlzTmF0dXJhbEN1cnJlbmN5KCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrRm9yVHJhaWxpbmdaZXJvcyh7dHlwZTogJ2JsdXInfSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMub25JbnB1dENoYW5nZShudik7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0gZWxzZSBpZihrZXkgPT09ICdyZWdleHAnKSB7XG4gICAgICAgICAgICB0aGlzLnJlZ2V4UGF0dGVybiA9IG52O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgc3VwZXIub25Qcm9wZXJ0eUNoYW5nZShrZXksIG52LCBvdik7XG4gICAgICAgIH1cbiAgICB9XG4gICAgcHVibGljIG9uUGFzdGUoJGV2ZW50OiBDbGlwYm9hcmRFdmVudCkge1xuICAgICAgICBjb25zdCBwYXN0ZWREYXRhID0gJGV2ZW50LmNsaXBib2FyZERhdGEuZ2V0RGF0YSgndGV4dCcpO1xuXG4gICAgICAgIGZvciAoY29uc3QgY2hhciBvZiBwYXN0ZWREYXRhKSB7XG4gICAgICAgICAgICBjb25zdCBtb2NrRXZlbnQgPSBuZXcgS2V5Ym9hcmRFdmVudCgna2V5cHJlc3MnLCB7IGtleTogY2hhciB9KTtcbiAgICAgICAgICAgIGlmICh0aGlzLnZhbGlkYXRlSW5wdXRFbnRyeShtb2NrRXZlbnQpPT09ZmFsc2UpIHtcbiAgICAgICAgICAgICAgICAkZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbn1cbiJdfQ==
|
|
@@ -106,6 +106,7 @@ let NumberLocale = class NumberLocale extends BaseInput {
|
|
|
106
106
|
this.trailingZeroDecimalPipe = trailingZeroDecimalPipe;
|
|
107
107
|
this.isDefaultQuery = true;
|
|
108
108
|
this.decimalValue = '';
|
|
109
|
+
this.invalidPattern = false;
|
|
109
110
|
this.selectedLocale = i18nService.getSelectedLocale();
|
|
110
111
|
this.DECIMAL = getLocaleNumberSymbol(this.localefilter || this.selectedLocale, NumberSymbol.Decimal);
|
|
111
112
|
this.GROUP = getLocaleNumberSymbol(this.localefilter || this.selectedLocale, NumberSymbol.Group);
|
|
@@ -312,6 +313,10 @@ let NumberLocale = class NumberLocale extends BaseInput {
|
|
|
312
313
|
else {
|
|
313
314
|
this.displayValue = input.value = this.transformNumber(this.proxyModel);
|
|
314
315
|
}
|
|
316
|
+
if (this.trailingzero) {
|
|
317
|
+
const regexObj = new RegExp(this.regexPattern);
|
|
318
|
+
this.invalidPattern = !regexObj.test(this.displayValue);
|
|
319
|
+
}
|
|
315
320
|
// in safari browser, setSelectionRange will focus the input by default, which may invoke the focus event on widget.
|
|
316
321
|
// Hence preventing the setSelectionRange when default value is set i.e. widget is not focused.
|
|
317
322
|
if (this.updateon === 'default' && !this.isDefaultQuery) {
|
|
@@ -512,6 +517,13 @@ let NumberLocale = class NumberLocale extends BaseInput {
|
|
|
512
517
|
},
|
|
513
518
|
};
|
|
514
519
|
}
|
|
520
|
+
if (this.invalidPattern) {
|
|
521
|
+
return {
|
|
522
|
+
pattern: {
|
|
523
|
+
valid: false
|
|
524
|
+
}
|
|
525
|
+
};
|
|
526
|
+
}
|
|
515
527
|
this.validateType = '';
|
|
516
528
|
/* WMS-18269 | Extending the existing validation for 'required' */
|
|
517
529
|
if (this['show'] && this['required']) {
|
|
@@ -608,6 +620,9 @@ let NumberLocale = class NumberLocale extends BaseInput {
|
|
|
608
620
|
this.onInputChange(nv);
|
|
609
621
|
}
|
|
610
622
|
}
|
|
623
|
+
else if (key === 'regexp') {
|
|
624
|
+
this.regexPattern = nv;
|
|
625
|
+
}
|
|
611
626
|
else {
|
|
612
627
|
super.onPropertyChange(key, nv, ov);
|
|
613
628
|
}
|
|
@@ -897,7 +912,10 @@ const inputTextTypeProps = new Map([
|
|
|
897
912
|
['type', { value: 'text', ...PROP_STRING }],
|
|
898
913
|
['updateon', PROP_STRING],
|
|
899
914
|
['conditionalclass', PROP_ANY],
|
|
900
|
-
['conditionalstyle', PROP_ANY]
|
|
915
|
+
['conditionalstyle', PROP_ANY],
|
|
916
|
+
['trailingiconclass', PROP_STRING],
|
|
917
|
+
['leadingiconclass', PROP_STRING],
|
|
918
|
+
['supportingtext', PROP_STRING]
|
|
901
919
|
]);
|
|
902
920
|
const registerProps = () => {
|
|
903
921
|
register('wm-input-text', inputTextTypeProps);
|
|
@@ -938,6 +956,10 @@ class InputTextComponent extends BaseInput {
|
|
|
938
956
|
super.onPropertyChange(key, nv, ov);
|
|
939
957
|
}
|
|
940
958
|
}
|
|
959
|
+
get computedClasses() {
|
|
960
|
+
return { 'with-leading-icon': this.leadingiconclass, 'with-trailing-icon': this.trailingiconclass,
|
|
961
|
+
...(typeof this.conditionalclass === 'string' ? { [this.conditionalclass]: true } : this.conditionalclass || {}) };
|
|
962
|
+
}
|
|
941
963
|
get mask() {
|
|
942
964
|
if (this.displayformat && (!this.placeholder || (this.placeholder && this.isFocused))) {
|
|
943
965
|
return {
|
|
@@ -991,6 +1013,9 @@ class InputTextComponent extends BaseInput {
|
|
|
991
1013
|
super.ngOnInit();
|
|
992
1014
|
this.isFocused = !!this.datavalue;
|
|
993
1015
|
}
|
|
1016
|
+
iconClickEvent($event, type) {
|
|
1017
|
+
this.invokeEventCallback(type, { $event });
|
|
1018
|
+
}
|
|
994
1019
|
ngOnDestroy() {
|
|
995
1020
|
// MEMORY LEAK FIX: Clear all ViewChild references
|
|
996
1021
|
this.inputEl = null;
|
|
@@ -1004,7 +1029,7 @@ class InputTextComponent extends BaseInput {
|
|
|
1004
1029
|
provideAs(InputTextComponent, NG_VALUE_ACCESSOR, true),
|
|
1005
1030
|
provideAs(InputTextComponent, NG_VALIDATORS, true),
|
|
1006
1031
|
provideAsWidgetRef(InputTextComponent)
|
|
1007
|
-
], viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["input"], descendants: true, static: true }, { propertyName: "ngModel", first: true, predicate: NgModel, descendants: true }, { propertyName: "imask", first: true, predicate: ["input"], descendants: true, read: IMaskDirective }], usesInheritance: true, ngImport: i0, template: "<input class=\"form-control app-textbox\"\n focus-target\n [type]=\"type\"\n [attr.name]=\"name\"\n [attr.aria-label]=\"arialabel\"\n [(ngModel)]=\"datavalue\"\n [imask]=\"mask\"\n [unmask]=\"true\"\n [ngModelOptions]=\"ngModelOptions\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [maxlength]=\"maxchars\"\n [pattern]=\"regexp\"\n [attr.tabindex]=\"tabindex\"\n [attr.placeholder]=\"placeholder\"\n [attr.accesskey]=\"shortcutkey\"\n [autofocus]=\"autofocus\"\n [ngClass]=\"
|
|
1032
|
+
], viewQueries: [{ propertyName: "inputEl", first: true, predicate: ["input"], descendants: true, static: true }, { propertyName: "ngModel", first: true, predicate: NgModel, descendants: true }, { propertyName: "imask", first: true, predicate: ["input"], descendants: true, read: IMaskDirective }], usesInheritance: true, ngImport: i0, template: "<button class=\"btn-leading-icon\" type=\"button\" name=\"leadingIcon\" *ngIf=\"leadingiconclass\" (click)=\"iconClickEvent($event, 'leadingiconclick')\">\n <i aria-hidden=\"true\" [ngClass]=\"leadingiconclass\"></i>\n</button>\n<input class=\"form-control app-textbox\"\n focus-target\n [type]=\"type\"\n [attr.name]=\"name\"\n [attr.aria-label]=\"arialabel\"\n [(ngModel)]=\"datavalue\"\n [imask]=\"mask\"\n [unmask]=\"true\"\n [ngModelOptions]=\"ngModelOptions\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [maxlength]=\"maxchars\"\n [pattern]=\"regexp\"\n [attr.tabindex]=\"tabindex\"\n [attr.placeholder]=\"placeholder\"\n [attr.accesskey]=\"shortcutkey\"\n [autofocus]=\"autofocus\"\n [ngClass]=\"computedClasses\"\n [ngStyle]=\"conditionalstyle\"\n (ngModelChange)=\"handleChange($event)\"\n (blur)=\"handleBlur($event); checkForDisplayFormat($event)\"\n (focus)=\"checkForDisplayFormat($event)\"\n [autocomplete]=\"autocomplete ? 'on' : 'off'\"\n (keyup.enter)=\"flushViewChanges(input.value)\"\n #input>\n<button class=\"btn-trailing-icon\" type=\"button\" name=\"trailingIcon\" *ngIf=\"trailingiconclass\" (click)=\"iconClickEvent($event, 'trailingiconclick')\">\n <i aria-hidden=\"true\" [ngClass]=\"trailingiconclass\"></i>\n</button>\n<p class=\"app-label help-block supporting-text\" *ngIf=\"supportingtext\" name=\"supportingText\">{{supportingtext}}</p>\n\n", dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i2.DefaultValueAccessor, selector: "input:not([type=checkbox])[formControlName],textarea[formControlName],input:not([type=checkbox])[formControl],textarea[formControl],input:not([type=checkbox])[ngModel],textarea[ngModel],[ngDefaultControl]" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "directive", type: i2.MaxLengthValidator, selector: "[maxlength][formControlName],[maxlength][formControl],[maxlength][ngModel]", inputs: ["maxlength"] }, { kind: "directive", type: i2.PatternValidator, selector: "[pattern][formControlName],[pattern][formControl],[pattern][ngModel]", inputs: ["pattern"] }, { kind: "directive", type: i2.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: IMaskModule }, { kind: "directive", type: i3.IMaskDirective, selector: "[imask]", inputs: ["imask", "unmask", "imaskElement"], outputs: ["accept", "complete"], exportAs: ["imask"] }] }); }
|
|
1008
1033
|
}
|
|
1009
1034
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InputTextComponent, decorators: [{
|
|
1010
1035
|
type: Component,
|
|
@@ -1012,7 +1037,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
1012
1037
|
provideAs(InputTextComponent, NG_VALUE_ACCESSOR, true),
|
|
1013
1038
|
provideAs(InputTextComponent, NG_VALIDATORS, true),
|
|
1014
1039
|
provideAsWidgetRef(InputTextComponent)
|
|
1015
|
-
], template: "<input class=\"form-control app-textbox\"\n focus-target\n [type]=\"type\"\n [attr.name]=\"name\"\n [attr.aria-label]=\"arialabel\"\n [(ngModel)]=\"datavalue\"\n [imask]=\"mask\"\n [unmask]=\"true\"\n [ngModelOptions]=\"ngModelOptions\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [maxlength]=\"maxchars\"\n [pattern]=\"regexp\"\n [attr.tabindex]=\"tabindex\"\n [attr.placeholder]=\"placeholder\"\n [attr.accesskey]=\"shortcutkey\"\n [autofocus]=\"autofocus\"\n [ngClass]=\"
|
|
1040
|
+
], template: "<button class=\"btn-leading-icon\" type=\"button\" name=\"leadingIcon\" *ngIf=\"leadingiconclass\" (click)=\"iconClickEvent($event, 'leadingiconclick')\">\n <i aria-hidden=\"true\" [ngClass]=\"leadingiconclass\"></i>\n</button>\n<input class=\"form-control app-textbox\"\n focus-target\n [type]=\"type\"\n [attr.name]=\"name\"\n [attr.aria-label]=\"arialabel\"\n [(ngModel)]=\"datavalue\"\n [imask]=\"mask\"\n [unmask]=\"true\"\n [ngModelOptions]=\"ngModelOptions\"\n [readonly]=\"readonly\"\n [required]=\"required\"\n [disabled]=\"disabled\"\n [maxlength]=\"maxchars\"\n [pattern]=\"regexp\"\n [attr.tabindex]=\"tabindex\"\n [attr.placeholder]=\"placeholder\"\n [attr.accesskey]=\"shortcutkey\"\n [autofocus]=\"autofocus\"\n [ngClass]=\"computedClasses\"\n [ngStyle]=\"conditionalstyle\"\n (ngModelChange)=\"handleChange($event)\"\n (blur)=\"handleBlur($event); checkForDisplayFormat($event)\"\n (focus)=\"checkForDisplayFormat($event)\"\n [autocomplete]=\"autocomplete ? 'on' : 'off'\"\n (keyup.enter)=\"flushViewChanges(input.value)\"\n #input>\n<button class=\"btn-trailing-icon\" type=\"button\" name=\"trailingIcon\" *ngIf=\"trailingiconclass\" (click)=\"iconClickEvent($event, 'trailingiconclick')\">\n <i aria-hidden=\"true\" [ngClass]=\"trailingiconclass\"></i>\n</button>\n<p class=\"app-label help-block supporting-text\" *ngIf=\"supportingtext\" name=\"supportingText\">{{supportingtext}}</p>\n\n" }]
|
|
1016
1041
|
}], ctorParameters: () => [{ type: i0.Injector }, { type: undefined, decorators: [{
|
|
1017
1042
|
type: Inject,
|
|
1018
1043
|
args: ['EXPLICIT_CONTEXT']
|