@seniorsistemas/angular-components 19.1.0 → 19.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bignumber-input/lib/bignumber-input/bignumber-input.directive.d.ts +58 -25
- package/dynamic-form/dynamic-form/components/lookup/lookup.component.d.ts +8 -8
- package/esm2022/bignumber-input/lib/bignumber-input/bignumber-input.directive.mjs +140 -99
- package/esm2022/dynamic-form/dynamic-form/components/lookup/lookup.component.mjs +12 -12
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/bignumber/bignumber-field.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/currency/currency-field.component.mjs +3 -3
- package/esm2022/dynamic-form/dynamic-form/form-field/fields/number/number-field.component.mjs +3 -3
- package/esm2022/inline-edit/lib/inline-edit/components/fields/inline-edit-number/inline-edit-number.component.mjs +1 -1
- package/esm2022/inline-edit/lib/inline-edit/fields/inline-edit-number-field.mjs +2 -3
- package/esm2022/locale/lib/locale/apply-localized-mask.mjs +19 -0
- package/esm2022/locale/lib/locale/pipes/localized-bignumber-impure.pipe.mjs +1 -1
- package/esm2022/locale/lib/locale/pipes/localized-bignumber.pipe.mjs +5 -4
- package/esm2022/locale/public-api.mjs +2 -1
- package/esm2022/number-input/lib/number-input/number-input.directive.mjs +12 -148
- package/esm2022/number-input/lib/number-input/number-input.module.mjs +5 -5
- package/esm2022/numeric-mask/lib/numeric-mask/numeric-mask.directive.mjs +32 -35
- package/esm2022/table/lib/table/table-column/table-columns.component.mjs +20 -4
- package/esm2022/table/public-api.mjs +2 -1
- package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs +139 -98
- package/fesm2022/seniorsistemas-angular-components-bignumber-input.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs +19 -19
- package/fesm2022/seniorsistemas-angular-components-dynamic-form.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs +2 -3
- package/fesm2022/seniorsistemas-angular-components-inline-edit.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-locale.mjs +22 -4
- package/fesm2022/seniorsistemas-angular-components-locale.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-number-input.mjs +14 -151
- package/fesm2022/seniorsistemas-angular-components-number-input.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs +31 -34
- package/fesm2022/seniorsistemas-angular-components-numeric-mask.mjs.map +1 -1
- package/fesm2022/seniorsistemas-angular-components-table.mjs +21 -6
- package/fesm2022/seniorsistemas-angular-components-table.mjs.map +1 -1
- package/inline-edit/lib/inline-edit/fields/inline-edit-number-field.d.ts +2 -3
- package/locale/lib/locale/apply-localized-mask.d.ts +9 -0
- package/locale/lib/locale/pipes/localized-bignumber-impure.pipe.d.ts +2 -3
- package/locale/lib/locale/pipes/localized-bignumber.pipe.d.ts +3 -2
- package/locale/public-api.d.ts +1 -0
- package/number-input/lib/number-input/number-input.directive.d.ts +7 -47
- package/number-input/lib/number-input/number-input.module.d.ts +2 -2
- package/numeric-mask/lib/numeric-mask/numeric-mask.directive.d.ts +8 -9
- package/package.json +1 -1
- package/table/public-api.d.ts +1 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Component, Inject, Input, ViewChild, } from '@angular/core';
|
|
2
2
|
import { HostProjectConfigsInjectionToken } from '@seniorsistemas/angular-components/common';
|
|
3
|
+
import { applyLocalizedMask, } from '@seniorsistemas/angular-components/locale';
|
|
3
4
|
import { deepClone, isNullOrUndefined } from '@seniorsistemas/angular-components/utils';
|
|
4
|
-
import { applyMask } from '@seniorsistemas/ng2-currency-mask';
|
|
5
5
|
import BigNumber from 'bignumber.js';
|
|
6
6
|
import moment from 'moment';
|
|
7
7
|
import { convertToMomentDateFormat } from '../../locale-utils';
|
|
@@ -187,7 +187,15 @@ export class TableColumnsComponent {
|
|
|
187
187
|
? this.numericService.instant(attributeValue, {
|
|
188
188
|
numberFormatOptions,
|
|
189
189
|
})
|
|
190
|
-
:
|
|
190
|
+
: applyLocalizedMask(attributeValue, {
|
|
191
|
+
decimalSeparator: '.',
|
|
192
|
+
thousandsSeparator: ',',
|
|
193
|
+
scale: 2,
|
|
194
|
+
prefix: '',
|
|
195
|
+
suffix: '',
|
|
196
|
+
allowNegative: true,
|
|
197
|
+
...numberConfigs,
|
|
198
|
+
}, this.isNumber(attributeValue));
|
|
191
199
|
}
|
|
192
200
|
case EnumColumnFieldType.DATE:
|
|
193
201
|
const dateFormat = this.getDateFormat(column, locale);
|
|
@@ -208,7 +216,15 @@ export class TableColumnsComponent {
|
|
|
208
216
|
? this.numericService.instant(attributeValue, {
|
|
209
217
|
numberFormatOptions,
|
|
210
218
|
})
|
|
211
|
-
:
|
|
219
|
+
: applyLocalizedMask(attributeValue, {
|
|
220
|
+
decimalSeparator: '.',
|
|
221
|
+
thousandsSeparator: ',',
|
|
222
|
+
scale: 2,
|
|
223
|
+
prefix: '',
|
|
224
|
+
suffix: '',
|
|
225
|
+
allowNegative: true,
|
|
226
|
+
...numberConfigs,
|
|
227
|
+
}, this.isNumber(attributeValue));
|
|
212
228
|
}
|
|
213
229
|
case EnumColumnFieldType.TOKENS:
|
|
214
230
|
return this.getTokens(attributeValue);
|
|
@@ -311,4 +327,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
311
327
|
}], locale: [{
|
|
312
328
|
type: Input
|
|
313
329
|
}] } });
|
|
314
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29sdW1ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvdGFibGUvc3JjL2xpYi90YWJsZS90YWJsZS1jb2x1bW4vdGFibGUtY29sdW1ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvdGFibGUvc3JjL2xpYi90YWJsZS90YWJsZS1jb2x1bW4vdGFibGUtY29sdW1ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULE1BQU0sRUFDTixLQUFLLEVBSUwsU0FBUyxHQUVaLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBc0IsZ0NBQWdDLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUlqSCxPQUFPLEVBQUUsU0FBUyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDeEYsT0FBTyxFQUFjLFNBQVMsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBQzFFLE9BQU8sU0FBUyxNQUFNLGNBQWMsQ0FBQztBQUNyQyxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFDNUIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0QsT0FBTyxFQUF3QixtQkFBbUIsRUFBNEIsTUFBTSxVQUFVLENBQUM7Ozs7Ozs7Ozs7QUFFL0Y7Ozs7Ozs7Ozs7O0dBV0c7QUFNSCxNQUFNLE9BQU8scUJBQXFCO0lBcUJUO0lBQ0E7SUFDQTtJQUNBO0lBQzBDO0lBdkJ4RCxlQUFlLEdBQTRCLElBQUksQ0FBQztJQUV2RCx3RkFBd0Y7SUFFakYsT0FBTyxHQUFhLEVBQUUsQ0FBQztJQUU5QixtR0FBbUc7SUFFNUYsUUFBUSxDQUFPO0lBRXRCLHFHQUFxRztJQUU5RixNQUFNLEdBQW9DLElBQUksQ0FBQztJ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SztnQkFLQyxRQUFRO3NCQURkLEtBQUs7Z0JBS0MsTUFBTTtzQkFEWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgSG9zdFByb2plY3RDb25maWdzLCBIb3N0UHJvamVjdENvbmZpZ3NJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvY29tbW9uJztcbmltcG9ydCB7IExvY2FsZVNlcnZpY2UgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL2xvY2FsZSc7XG5pbXBvcnQgeyBOdW1lcmljU2VydmljZSB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvbnVtZXJpYyc7XG5pbXBvcnQgeyBJVG9rZW4gfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL3Rva2VuLWxpc3QnO1xuaW1wb3J0IHsgZGVlcENsb25lLCBpc051bGxPclVuZGVmaW5lZCB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvdXRpbHMnO1xuaW1wb3J0IHsgTWFza0NvbmZpZywgYXBwbHlNYXNrIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL25nMi1jdXJyZW5jeS1tYXNrJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcbmltcG9ydCB7IGNvbnZlcnRUb01vbWVudERhdGVGb3JtYXQgfSBmcm9tICcuLi8uLi9sb2NhbGUtdXRpbHMnO1xuaW1wb3J0IHsgQ29sdW1uLCBDb2x1bW5WYWx1ZXMsIEVudW1Db2x1bW5GaWVsZFR5cGUsIFRhYmxlQ29sdW1uTG9jYWxlT3B0aW9ucyB9IGZyb20gJy4vbW9kZWxzJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb24gQ29tcG9uZW50ZSBpbnRlcm5vIHF1ZSByZW5kZXJpemEgdW1hIGxpbmhhIGRlIGNvbHVuYXMgZGEgdGFiZWxhLFxuICogYXBsaWNhbmRvIGZvcm1hdGHDp8OjbyBsb2NhbGl6YWRhIChkYXRhLCBuw7ptZXJvLCBtb2VkYSwgdG9rZW4sIGV0Yy4pIHBhcmEgY2FkYSBjb2x1bmEuXG4gKiBOb3JtYWxtZW50ZSB1c2FkbyBkZW50cm8gZG8gY29udGV4dG8gZGUgdW1hIHRhYmVsYSBQcmltZU5HLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGBodG1sXG4gKiA8cy10YWJsZS1jb2x1bW5zIFtjb2x1bW5zXT1cImNvbHVuYXNcIiBbcm93VmFsdWVdPVwibGluaGFcIiAvPlxuICogYGBgXG4gKlxuICogQGNhdGVnb3J5IERhdGFcbiAqL1xuQENvbXBvbmVudCh7XG4gICAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLWNvbHVtbnMuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL3RhYmxlLWNvbHVtbnMuY29tcG9uZW50LnNjc3MnXSxcbiAgICBzZWxlY3RvcjogJ3MtdGFibGUtY29sdW1ucycsXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29sdW1uc0NvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gICAgQFZpZXdDaGlsZCgnY29sdW1uc1RlbXBsYXRlJywgeyBzdGF0aWM6IHRydWUgfSlcbiAgICBwdWJsaWMgY29sdW1uc1RlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+IHwgbnVsbCA9IG51bGw7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIExpc3RhIGRlIGNvbmZpZ3VyYcOnw7VlcyBkYXMgY29sdW5hcyBhIHNlcmVtIHJlbmRlcml6YWRhcy4gQGRlZmF1bHQgW10gKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBjb2x1bW5zOiBDb2x1bW5bXSA9IFtdO1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBPYmpldG8gZGEgbGluaGEgY29tIG9zIHZhbG9yZXMgYSBzZXJlbSBleGliaWRvcyBuYXMgY29sdW5hcy4gQ2FtcG8gb2JyaWdhdMOzcmlvLiAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIHJvd1ZhbHVlITogYW55O1xuXG4gICAgLyoqIEBkZXNjcmlwdGlvbiBPcMOnw7VlcyBkZSBsb2NhbGl6YcOnw6NvIChjYWxlbmTDoXJpbyBlIG7Dum1lcm8pIHVzYWRhcyBwYXJhIGZvcm1hdGHDp8Ojby4gQGRlZmF1bHQgbnVsbCAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGxvY2FsZTogVGFibGVDb2x1bW5Mb2NhbGVPcHRpb25zIHwgbnVsbCA9IG51bGw7XG5cbiAgICBjZWxsc0RhdGE6IChDZWxsRGF0YSB8IG51bGwpW10gPSBbXTtcblxuICAgIGZvcm1hdHRlZENvbHVtbnM6IENvbHVtblZhbHVlc1tdID0gW107XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBsb2NhbGVTZXJ2aWNlOiBMb2NhbGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHZpZXdDb250YWluZXJSZWY6IFZpZXdDb250YWluZXJSZWYsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IG51bWVyaWNTZXJ2aWNlOiBOdW1lcmljU2VydmljZSxcbiAgICAgICAgQEluamVjdChIb3N0UHJvamVjdENvbmZpZ3NJbmplY3Rpb25Ub2tlbikgcHJpdmF0ZSByZWFkb25seSBob3N0UHJvamVjdENvbmZpZ3M6IEhvc3RQcm9qZWN0Q29uZmlncyxcbiAgICApIHtcbiAgICAgICAgdGhpcy5sb2NhbGUgPSB7XG4gICAgICAgICAgICBjYWxlbmRhcjoge1xuICAgICAgICAgICAgICAgIC4uLnRoaXMubG9jYWxlU2VydmljZS5nZXRMb2NhbGVPcHRpb25zKCk/LmNhbGVuZGFyLFxuICAgICAgICAgICAgICAgIGRhdGVGb3JtYXQ6IGNvbnZlcnRUb01vbWVudERhdGVGb3JtYXQodGhpcy5sb2NhbGVTZXJ2aWNlLmdldExvY2FsZU9wdGlvbnMoKT8uY2FsZW5kYXIuZGF0ZUZvcm1hdCA/PyAnJyksXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgbnVtYmVyOiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5sb2NhbGVTZXJ2aWNlLmdldExvY2FsZU9wdGlvbnMoKT8ubnVtYmVyLFxuICAgICAgICAgICAgICAgIHNjYWxlOiAwLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmFsaWRhdGVDb21wb25lbnRBdHRyaWJ1dGVzKGNoYW5nZXMpO1xuXG4gICAgICAgIGlmIChjaGFuZ2VzWydjb2x1bW5zJ10gJiYgY2hhbmdlc1snY29sdW1ucyddLmN1cnJlbnRWYWx1ZSAhPT0gY2hhbmdlc1snY29sdW1ucyddLnByZXZpb3VzVmFsdWUpIHtcbiAgICAgICAgICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuc29ydENvbHVtbnNCeVNlcXVlbmNlKGNoYW5nZXNbJ2NvbHVtbnMnXS5jdXJyZW50VmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuY3JlYXRlQ29sdW1uc1RlbXBsYXRlKGNoYW5nZXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0FycmF5KHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodmFsdWUpO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRUb2tlbnNCeUNvbHVtbihjb2x1bW46IENvbHVtblZhbHVlcykge1xuICAgICAgICByZXR1cm4gY29sdW1uLmNvbHVtblZhbHVlIGFzIElUb2tlbltdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q2VsbERhdGEoY29sdW1uOiBDb2x1bW5WYWx1ZXMpOiBDZWxsRGF0YSB8IG51bGwge1xuICAgICAgICBjb25zdCB7IGNvbHVtblZhbHVlLCBzZXBhcmF0b3IsIHVuaW5mb3JtZWQgfSA9IGNvbHVtbjtcblxuICAgICAgICBpZiAodHlwZW9mIGNvbHVtblZhbHVlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgY29uc3Qgc3BsaXR0ZWRTdHJpbmcgPSBjb2x1bW5WYWx1ZS5zcGxpdChzZXBhcmF0b3IpO1xuXG4gICAgICAgICAgICByZXR1cm4gc3BsaXR0ZWRTdHJpbmcubWFwKChzdHJpbmcsIGluZGV4KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXNMYXN0SW5kZXggPSBzcGxpdHRlZFN0cmluZy5sZW5ndGggLSAxID09PSBpbmRleDtcblxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBzdHJpbmcsXG4gICAgICAgICAgICAgICAgICAgIGlzVW5pbmZvcm1lZDogc3RyaW5nID09PSB1bmluZm9ybWVkLFxuICAgICAgICAgICAgICAgICAgICBzZXBhcmF0b3I6ICFpc0xhc3RJbmRleCA/IHNlcGFyYXRvciA6IG51bGwsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB2YWxpZGF0ZUNvbXBvbmVudEF0dHJpYnV0ZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuY29sdW1ucyAmJiAhY2hhbmdlc1snY29sdW1ucyddPy5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSAnY29sdW1ucycgYXR0cmlidXRlIG11c3QgYmUgaW5mb3JtZWQhXCIpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghdGhpcy5yb3dWYWx1ZSAmJiAhY2hhbmdlc1sncm93VmFsdWUnXT8uY3VycmVudFZhbHVlKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJUaGUgJ3Jvd1ZhbHVlJyBhdHRyaWJ1dGUgbXVzdCBiZSBpbmZvcm1lZCFcIik7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNyZWF0ZUNvbHVtbnNUZW1wbGF0ZShjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIHRoaXMudmlld0NvbnRhaW5lclJlZi5jbGVhcigpO1xuXG4gICAgICAgIGNvbnN0IGNvbHVtbnM6IENvbHVtbltdID0gY2hhbmdlc1snY29sdW1ucyddPy5jdXJyZW50VmFsdWUgfHwgdGhpcy5jb2x1bW5zO1xuXG4gICAgICAgIGNvbnN0IHJvd1ZhbHVlOiBvYmplY3QgPSBkZWVwQ2xvbmUoY2hhbmdlc1sncm93VmFsdWUnXT8uY3VycmVudFZhbHVlID8/IHRoaXMucm93VmFsdWUpO1xuXG4gICAgICAgIGNvbnN0IGxvY2FsZTogVGFibGVDb2x1bW5Mb2NhbGVPcHRpb25zID0gY2hhbmdlc1snbG9jYWxlJ10/LmN1cnJlbnRWYWx1ZSB8fCB0aGlzLmxvY2FsZTtcblxuICAgICAgICB0aGlzLmZvcm1hdHRlZENvbHVtbnMgPSBjb2x1bW5zLm1hcCgoY29sdW1uKSA9PiB0aGlzLmdldENvbHVtblZhbHVlKGNvbHVtbiwgcm93VmFsdWUsIGxvY2FsZSkpO1xuXG4gICAgICAgIHRoaXMuY2VsbHNEYXRhID0gdGhpcy5mb3JtYXR0ZWRDb2x1bW5zLm1hcCgoY29sdW1uKSA9PiB0aGlzLmdldENlbGxEYXRhKGNvbHVtbikpO1xuXG4gICAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQodGhpcy5jb2x1bW5zVGVtcGxhdGUpKSB7XG4gICAgICAgICAgICB0aGlzLnZpZXdDb250YWluZXJSZWYuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMuY29sdW1uc1RlbXBsYXRlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29sdW1uU2VwYXJhdG9yKGNvbHVtbjogQ29sdW1uKSB7XG4gICAgICAgIHJldHVybiBjb2x1bW4uc2VwYXJhdG9yID8gY29sdW1uLnNlcGFyYXRvciA6ICcgLSAnO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VHJhbnNsYXRpb25QcmVmaXgoY29sdW1uOiBDb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbi5wcmVmaXggPyBjb2x1bW4ucHJlZml4IDogYCR7dGhpcy5ob3N0UHJvamVjdENvbmZpZ3MuZG9tYWlufS4ke3RoaXMuaG9zdFByb2plY3RDb25maWdzLnNlcnZpY2V9LmA7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0F0dHJpYnV0ZVZhbHVlSW52YWxpZChhdHRyaWJ1dGVWYWx1ZTogYW55KSB7XG4gICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZSA9PT0gbnVsbCB8fFxuICAgICAgICAgICAgYXR0cmlidXRlVmFsdWUgPT09IHVuZGVmaW5lZCB8fFxuICAgICAgICAgICAgKGF0dHJpYnV0ZVZhbHVlPy5vcHRpb25zPy5udW1iZXJGb3JtYXRPcHRpb25zICYmIGlzTnVsbE9yVW5kZWZpbmVkKGF0dHJpYnV0ZVZhbHVlPy52YWx1ZSkpIHx8XG4gICAgICAgICAgICAodGhpcy5pc0FycmF5KGF0dHJpYnV0ZVZhbHVlKSAmJiAhYXR0cmlidXRlVmFsdWUubGVuZ3RoKSB8fFxuICAgICAgICAgICAgKHR5cGVvZiBhdHRyaWJ1dGVWYWx1ZSA9PT0gJ3N0cmluZycgJiYgYXR0cmlidXRlVmFsdWUudHJpbSgpID09PSAnJylcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZvcm1hdHRlZENvbHVtblZhbHVlKFxuICAgICAgICBjb2x1bW46IENvbHVtbixcbiAgICAgICAgY29sdW1uVmFsdWU6IGFueVtdLFxuICAgICAgICB1bmlmaWVkQ29sdW1uVmFsdWVzOiBzdHJpbmcsXG4gICAgICAgIHVuaW5mb3JtZWRUZXh0OiBzdHJpbmcsXG4gICAgICAgIHVuaW5mb3JtZWROdW1iZXI6IG51bWJlcixcbiAgICApIHtcbiAgICAgICAgaWYgKHVuaW5mb3JtZWROdW1iZXIgPT09IGNvbHVtbi5hdHRyaWJ1dGVzLmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIHVuaW5mb3JtZWRUZXh0O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKGNvbHVtbi50eXBlID09PSBFbnVtQ29sdW1uRmllbGRUeXBlLlRPS0VOUykge1xuICAgICAgICAgICAgcmV0dXJuIFtdLmNvbmNhdC5hcHBseShcbiAgICAgICAgICAgICAgICBbXSxcbiAgICAgICAgICAgICAgICBjb2x1bW5WYWx1ZS5maWx0ZXIoKHZhbHVlcykgPT4gdmFsdWVzICE9PSB1bmluZm9ybWVkVGV4dCksXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHVuaWZpZWRDb2x1bW5WYWx1ZXM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRBdHRyaWJ1dGVWYWx1ZShhdHRyaWJ1dGU6IHN0cmluZywgcm93VmFsdWU6IGFueSkge1xuICAgICAgICBsZXQgYXR0cmlidXRlVmFsdWUhOiBhbnk7XG5cbiAgICAgICAgYXR0cmlidXRlLnNwbGl0KCcvJykuZm9yRWFjaCgodmFsdWU6IHN0cmluZykgPT4ge1xuICAgICAgICAgICAgaWYgKCFhdHRyaWJ1dGVWYWx1ZSkge1xuICAgICAgICAgICAgICAgIHZhbHVlLnNwbGl0KCcuJykuZm9yRWFjaCgodmFsOiBzdHJpbmcsIGkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFyb3dWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlID0gcm93VmFsdWVbdmFsXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChhdHRyaWJ1dGVWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlID0gYXR0cmlidXRlVmFsdWVbdmFsXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICByZXR1cm4gYXR0cmlidXRlVmFsdWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXROdW1iZXJDb25maWdzKGNvbHVtbjogQ29sdW1uKTogTWFza0NvbmZpZyB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAuLi50aGlzLmxvY2FsZT8ubnVtYmVyLFxuICAgICAgICAgICAgc2NhbGU6XG4gICAgICAgICAgICAgICAgY29sdW1uLnNjYWxlICE9PSBudWxsICYmIGNvbHVtbi5zY2FsZSAhPT0gdW5kZWZpbmVkXG4gICAgICAgICAgICAgICAgICAgID8gdGhpcy5nZXRDb2x1bW5TY2FsZShjb2x1bW4uc2NhbGUpXG4gICAgICAgICAgICAgICAgICAgIDogdGhpcy5sb2NhbGU/Lm51bWJlci5zY2FsZSxcbiAgICAgICAgICAgIHByZWZpeDogYCR7dGhpcy5sb2NhbGU/Lm51bWJlci5jdXJyZW5jeVN5bWJvbH0gYCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERhdGVGb3JtYXQoY29sdW1uOiBDb2x1bW4sIGxvY2FsZTogVGFibGVDb2x1bW5Mb2NhbGVPcHRpb25zKSB7XG4gICAgICAgIHJldHVybiBjb2x1bW4uZGF0ZUZvcm1hdCA/IGNvbHVtbi5kYXRlRm9ybWF0IDogbG9jYWxlLmNhbGVuZGFyLmRhdGVGb3JtYXQ7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb2x1bW5WYWx1ZShjb2x1bW46IENvbHVtbiwgcm93VmFsdWU6IGFueSwgbG9jYWxlOiBUYWJsZUNvbHVtbkxvY2FsZU9wdGlvbnMpOiBDb2x1bW5WYWx1ZXMge1xuICAgICAgICBjb25zdCBwcmVmaXggPSB0aGlzLmdldFRyYW5zbGF0aW9uUHJlZml4KGNvbHVtbik7XG4gICAgICAgIGNvbnN0IHNlcGFyYXRvciA9IHRoaXMuZ2V0Q29sdW1uU2VwYXJhdG9yKGNvbHVtbik7XG4gICAgICAgIGNvbnN0IHVuaW5mb3JtZWQgPSB0aGlzLnRyYW5zbGF0ZS5pbnN0YW50KHByZWZpeCArICdlbXB0eV9sYWJlbCcpO1xuICAgICAgICBjb25zdCBzdHlsZSA9IGNvbHVtbi5zdHlsZTtcblxuICAgICAgICBjb25zdCBjb2x1bW5WYWx1ZSA9IGNvbHVtbi5hdHRyaWJ1dGVzLm1hcCgoYXR0cmlidXRlOiBzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2wpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZVZhbHVlID0gdGhpcy5nZXRBdHRyaWJ1dGVWYWx1ZShhdHRyaWJ1dGUgYXMgc3RyaW5nLCByb3dWYWx1ZSk7XG5cbiAgICAgICAgICAgIGlmICh0aGlzLmlzQXR0cmlidXRlVmFsdWVJbnZhbGlkKGF0dHJpYnV0ZVZhbHVlKSkge1xuICAgICAgICAgICAgICAgIHJldHVybiB1bmluZm9ybWVkO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBudW1iZXJDb25maWdzID0gdGhpcy5nZXROdW1iZXJDb25maWdzKGNvbHVtbik7XG5cbiAgICAgICAgICAgIHN3aXRjaCAoY29sdW1uLnR5cGUpIHtcbiAgICAgICAgICAgICAgICBjYXNlIEVudW1Db2x1bW5GaWVsZFR5cGUuRU5VTTpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmluc3RhbnQoY29sdW1uLmVudW1QcmVmaXggKyBhdHRyaWJ1dGVWYWx1ZS50b1N0cmluZygpLnRvTG93ZXJDYXNlKCkpO1xuXG4gICAgICAgICAgICAgICAgY2FzZSBFbnVtQ29sdW1uRmllbGRUeXBlLkNVUlJFTkNZOiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG51bWJlckZvcm1hdE9wdGlvbnMgPSBhdHRyaWJ1dGVWYWx1ZT8ub3B0aW9ucz8ubnVtYmVyRm9ybWF0T3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBhdHRyaWJ1dGVWYWx1ZS5vcHRpb25zLm51bWJlckZvcm1hdE9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdHlwZW9mIGNvbHVtbi5udW1iZXJGb3JtYXRPcHRpb25zID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gY29sdW1uLm51bWJlckZvcm1hdE9wdGlvbnMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dEYXRhOiByb3dWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNvbHVtbi5udW1iZXJGb3JtYXRPcHRpb25zO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJGb3JtYXRPcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMubnVtZXJpY1NlcnZpY2UuaW5zdGFudChhdHRyaWJ1dGVWYWx1ZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyRm9ybWF0T3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYXBwbHlNYXNrKGF0dHJpYnV0ZVZhbHVlLCBudW1iZXJDb25maWdzLCB0aGlzLmlzTnVtYmVyKGF0dHJpYnV0ZVZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY2FzZSBFbnVtQ29sdW1uRmllbGRUeXBlLkRBVEU6XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGRhdGVGb3JtYXQgPSB0aGlzLmdldERhdGVGb3JtYXQoY29sdW1uLCBsb2NhbGUpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW9tZW50KGF0dHJpYnV0ZVZhbHVlKS5mb3JtYXQoZGF0ZUZvcm1hdCk7XG5cbiAgICAgICAgICAgICAgICBjYXNlIEVudW1Db2x1bW5GaWVsZFR5cGUuQk9PTEVBTjpcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBhdHRyaWJ1dGVWYWx1ZSA/ICd5ZXMnIDogJ25vJztcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudHJhbnNsYXRlLmluc3RhbnQocHJlZml4ICsgdmFsdWUpO1xuXG4gICAgICAgICAgICAgICAgY2FzZSBFbnVtQ29sdW1uRmllbGRUeXBlLk5VTUJFUjoge1xuICAgICAgICAgICAgICAgICAgICBudW1iZXJDb25maWdzLnByZWZpeCA9ICcnO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG51bWJlckZvcm1hdE9wdGlvbnMgPSBhdHRyaWJ1dGVWYWx1ZT8ub3B0aW9ucz8ubnVtYmVyRm9ybWF0T3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgPyBhdHRyaWJ1dGVWYWx1ZS5vcHRpb25zLm51bWJlckZvcm1hdE9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgIDogdHlwZW9mIGNvbHVtbi5udW1iZXJGb3JtYXRPcHRpb25zID09PSAnZnVuY3Rpb24nXG4gICAgICAgICAgICAgICAgICAgICAgICAgID8gY29sdW1uLm51bWJlckZvcm1hdE9wdGlvbnMoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dEYXRhOiByb3dWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICA6IGNvbHVtbi5udW1iZXJGb3JtYXRPcHRpb25zO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudW1iZXJGb3JtYXRPcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICA/IHRoaXMubnVtZXJpY1NlcnZpY2UuaW5zdGFudChhdHRyaWJ1dGVWYWx1ZSwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyRm9ybWF0T3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgIDogYXBwbHlNYXNrKGF0dHJpYnV0ZVZhbHVlLCBudW1iZXJDb25maWdzLCB0aGlzLmlzTnVtYmVyKGF0dHJpYnV0ZVZhbHVlKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhc2UgRW51bUNvbHVtbkZpZWxkVHlwZS5UT0tFTlM6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFRva2VucyhhdHRyaWJ1dGVWYWx1ZSk7XG5cbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRlVmFsdWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGNvbnN0IHVuaWZpZWRDb2x1bW5WYWx1ZXMgPSBjb2x1bW5WYWx1ZS5qb2luKHNlcGFyYXRvcik7XG4gICAgICAgIGNvbnN0IHVuaW5mb3JtZWROdW1iZXIgPSB1bmlmaWVkQ29sdW1uVmFsdWVzLnNwbGl0KHNlcGFyYXRvcikuZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUgPT09IHVuaW5mb3JtZWQpLmxlbmd0aDtcbiAgICAgICAgY29uc3QgZm9ybWF0dGVkQ29sdW1uVmFsdWUgPSB0aGlzLmdldEZvcm1hdHRlZENvbHVtblZhbHVlKFxuICAgICAgICAgICAgY29sdW1uLFxuICAgICAgICAgICAgY29sdW1uVmFsdWUsXG4gICAgICAgICAgICB1bmlmaWVkQ29sdW1uVmFsdWVzLFxuICAgICAgICAgICAgdW5pbmZvcm1lZCxcbiAgICAgICAgICAgIHVuaW5mb3JtZWROdW1iZXIsXG4gICAgICAgICk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHN0eWxlLFxuICAgICAgICAgICAgY29sdW1uVmFsdWU6IGZvcm1hdHRlZENvbHVtblZhbHVlLFxuICAgICAgICAgICAgc2VwYXJhdG9yLFxuICAgICAgICAgICAgdW5pbmZvcm1lZCxcbiAgICAgICAgICAgIGJhZGdlQ29uZmlnczogY29sdW1uPy5iYWRnZUNvbmZpZ3M/LmZpbmQoXG4gICAgICAgICAgICAgICAgKGJhZGdlQ29uZmlnKSA9PiBiYWRnZUNvbmZpZy5lbnVtVmFsdWUgPT09IHJvd1ZhbHVlW2NvbHVtbi5hdHRyaWJ1dGVzWzBdID8/IGNvbHVtbi5maWVsZF0sXG4gICAgICAgICAgICApLFxuICAgICAgICAgICAgY29sb3I6IGNvbHVtbi5jb2xvcj8uKHJvd1ZhbHVlKSxcbiAgICAgICAgICAgIHR5cGU6IGNvbHVtbi50eXBlLFxuICAgICAgICAgICAgdG9vbHRpcDogdGhpcy5nZXRDb2x1bW5Ub29sdGlwKGNvbHVtbi50b29sdGlwKSxcbiAgICAgICAgICAgIGluZm9TaWduOiB0aGlzLmdldENvbHVtbkluZm9TaWduKGNvbHVtbi5pbmZvU2lnbiksXG4gICAgICAgICAgICBvbkxpbmtDbGljazogY29sdW1uLm9uTGlua0NsaWNrLFxuICAgICAgICAgICAgb25Db2x1bW5DbGljazogY29sdW1uLm9uQ29sdW1uQ2xpY2ssXG4gICAgICAgICAgICBjb21wYWN0OiBjb2x1bW4uY29tcGFjdCxcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbHVtblNjYWxlKHNjYWxlOiBudW1iZXIgfCAoKHJvd1ZhbHVlOiBhbnkpID0+IG51bWJlcikpOiBudW1iZXIge1xuICAgICAgICBpZiAodHlwZW9mIHNjYWxlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICByZXR1cm4gc2NhbGUoZGVlcENsb25lKHRoaXMucm93VmFsdWUpKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc2NhbGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb2x1bW5JbmZvU2lnbihpbmZvU2lnbj86IHN0cmluZyB8ICgocm93VmFsdWU6IGFueSkgPT4gc3RyaW5nIHwgbnVsbCkpOiBzdHJpbmcgfCBudWxsIHtcbiAgICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZChpbmZvU2lnbikpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgaW5mb1NpZ24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gaW5mb1NpZ24oZGVlcENsb25lKHRoaXMucm93VmFsdWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBpbmZvU2lnbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbHVtblRvb2x0aXAodG9vbHRpcD86IHN0cmluZyB8ICgocm93VmFsdWU6IGFueSkgPT4gc3RyaW5nKSk6IHN0cmluZyB7XG4gICAgICAgIGlmICghaXNOdWxsT3JVbmRlZmluZWQodG9vbHRpcCkpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdG9vbHRpcCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiB0b29sdGlwKGRlZXBDbG9uZSh0aGlzLnJvd1ZhbHVlKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdG9vbHRpcDtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJyc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc051bWJlcih2YWx1ZTogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhbmV3IEJpZ051bWJlcih2YWx1ZSkuaXNOYU4oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFRva2Vucyh2YWx1ZXM6IGFueSk6IElUb2tlbltdIHtcbiAgICAgICAgaWYgKCF0aGlzLmlzQXJyYXkodmFsdWVzKSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUbyB1c2UgdG9rZW5zIGFuIGFycmF5IG11c3QgYmUgaW5mb3JtZWQnKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5pc1ZhbGlkVG9rZW5BcnJheSh2YWx1ZXMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICAgICAgICAgJ05vdCBhIHZhbGlkIHRva2VuIGFycmF5LiBNdXN0IGJlIGEgcHJpbWl0aXZlIHZhbHVlcyBhcnJheSBvciBhbiBvYmplY3RzIHdpdGggbGFiZWwgYXR0cmlidXRlIGFycmF5JyxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5pc0xhYmVsT2JqZWN0QXJyYXkodmFsdWVzKSkge1xuICAgICAgICAgICAgcmV0dXJuIHZhbHVlcztcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB2YWx1ZXNcbiAgICAgICAgICAgIC5maWx0ZXIoKHZhbHVlOiBhbnkpID0+IHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGwpXG4gICAgICAgICAgICAubWFwKCh2YWx1ZTogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgbGFiZWwgPSB0eXBlb2YgdmFsdWUgPT09ICdzeW1ib2wnID8gdmFsdWUudG9TdHJpbmcoKSA6IGAke3ZhbHVlfWA7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWwsXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNWYWxpZFRva2VuQXJyYXkodmFsdWVzOiBhbnlbXSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5pc1ByaW1pdGl2ZVZhbHVlc0FycmF5KHZhbHVlcykgfHwgdGhpcy5pc0xhYmVsT2JqZWN0QXJyYXkodmFsdWVzKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzUHJpbWl0aXZlVmFsdWVzQXJyYXkodmFsdWVzOiBhbnlbXSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdmFsdWVzLmZpbHRlcigodmFsdWUpID0+IHZhbHVlICE9PSBPYmplY3QodmFsdWUpKS5sZW5ndGggPT09IHZhbHVlcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc0xhYmVsT2JqZWN0QXJyYXkodmFsdWVzOiBhbnlbXSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdmFsdWVzLmZpbHRlcigodmFsdWUpID0+IHZhbHVlPy5sYWJlbCAhPT0gbnVsbCAmJiB2YWx1ZT8ubGFiZWwgIT09IHVuZGVmaW5lZCkubGVuZ3RoID09PSB2YWx1ZXMubGVuZ3RoO1xuICAgIH1cblxuICAgIHByaXZhdGUgc29ydENvbHVtbnNCeVNlcXVlbmNlKGNvbHVtbnM6IENvbHVtbltdKTogQ29sdW1uW10ge1xuICAgICAgICByZXR1cm4gY29sdW1ucy5zb3J0KChhLCBiKSA9PiAoYS5zZXF1ZW5jZSA/PyAwKSAtIChiLnNlcXVlbmNlID8/IDApKTtcbiAgICB9XG59XG5cbnR5cGUgQ2VsbERhdGEgPSB7IHZhbHVlOiBzdHJpbmc7IGlzVW5pbmZvcm1lZDogYm9vbGVhbjsgc2VwYXJhdG9yOiBzdHJpbmcgfCBudWxsIH1bXTtcblxuIiwiPG5nLXRlbXBsYXRlICNjb2x1bW5zVGVtcGxhdGU+XG4gICAgQGZvciAoY29sdW1uIG9mIGZvcm1hdHRlZENvbHVtbnM7IHRyYWNrICRpbmRleDsgbGV0IGkgPSAkaW5kZXgpIHtcbiAgICAgICAgPHRkXG4gICAgICAgICAgICBbbmdTdHlsZV09XCJjb2x1bW4uc3R5bGVcIlxuICAgICAgICAgICAgKGNsaWNrKT1cImNvbHVtbi5vbkNvbHVtbkNsaWNrID8gY29sdW1uLm9uQ29sdW1uQ2xpY2socm93VmFsdWUpIDogbnVsbFwiXG4gICAgICAgID5cbiAgICAgICAgICAgIEBpZiAoY29sdW1uLnR5cGUgIT09ICdUT0tFTlMnIHx8ICFpc0FycmF5KGNvbHVtbi5jb2x1bW5WYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICA8ZGl2IFtuZ0NsYXNzXT1cInsgJ2NvbXBhY3QtY29sdW1uJzogY29sdW1uLmNvbXBhY3QgfVwiPlxuICAgICAgICAgICAgICAgICAgICBAaWYgKGNvbHVtbi50eXBlICE9PSAnTElOSycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NUb29sdGlwXT1cImNvbHVtbi50b29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZXNjYXBlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29sdW1uVmFsdWVUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgQGlmIChjb2x1bW4udHlwZSA9PT0gJ0xJTksnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNlbGxzRGF0YVtpXT8uWzBdPy5pc1VuaW5mb3JtZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNkcy1lbXB0eS12YWx1ZVwiPnt7IGNlbGxzRGF0YVtpXT8uWzBdPy52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjYW5jaG9yVGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxhXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc1Rvb2x0aXBdPVwiY29sdW1uLnRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2VzY2FwZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiY29sdW1uLm9uTGlua0NsaWNrID8gY29sdW1uLm9uTGlua0NsaWNrKHJvd1ZhbHVlKSA6IG51bGxcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiY29sdW1uVmFsdWVUZW1wbGF0ZVwiPjwvbmctY29udGFpbmVyPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2E+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9uZy10ZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIDxuZy10ZW1wbGF0ZSAjY29sdW1uVmFsdWVUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBmb3IgKGNlbGxEYXRhIG9mIGNlbGxzRGF0YVtpXTsgdHJhY2sgJGluZGV4KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChjZWxsRGF0YS5pc1VuaW5mb3JtZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJzZHMtZW1wdHktdmFsdWVcIj57eyBjZWxsRGF0YS52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChjb2x1bW4uYmFkZ2VDb25maWdzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cy1iYWRnZVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzVG9vbHRpcF09XCJjb2x1bW4udG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2NvbG9yXT1cImNvbHVtbi5iYWRnZUNvbmZpZ3MuY29sb3JcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFt0ZXh0XT1cImNlbGxEYXRhLnZhbHVlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID48L3MtYmFkZ2U+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4gW25nQ2xhc3NdPVwie1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2x1bW4tY2VsbC1yZWQnOiBjb2x1bW4uY29sb3IgPT09ICdSZWQnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2x1bW4tY2VsbC1vcmFuZ2UnOiBjb2x1bW4uY29sb3IgPT09ICdPcmFuZ2UnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2x1bW4tY2VsbC15ZWxsb3cnOiBjb2x1bW4uY29sb3IgPT09ICdZZWxsb3cnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2x1bW4tY2VsbC1ncmVlbic6IGNvbHVtbi5jb2xvciA9PT0gJ0dyZWVuJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sdW1uLWNlbGwtYmx1ZSc6IGNvbHVtbi5jb2xvciA9PT0gJ0JsdWUnXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID57eyBjZWxsRGF0YS52YWx1ZSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoY2VsbERhdGEuc2VwYXJhdG9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuPnt7IGNlbGxEYXRhLnNlcGFyYXRvciB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoISFjb2x1bW4uaW5mb1NpZ24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiAqc0luZm9TaWduPVwiY29sdW1uLmluZm9TaWduXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgPHMtdG9rZW4tbGlzdFxuICAgICAgICAgICAgICAgICAgICBbdG9rZW5zXT1cImdldFRva2Vuc0J5Q29sdW1uKGNvbHVtbilcIlxuICAgICAgICAgICAgICAgICAgICBbaGlkZVBvaW50ZXJFdmVudHNdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgPjwvcy10b2tlbi1saXN0PlxuXG4gICAgICAgICAgICAgICAgQGlmICghIWNvbHVtbi5pbmZvU2lnbikge1xuICAgICAgICAgICAgICAgICAgICA8c3BhbiAqc0luZm9TaWduPVwiY29sdW1uLmluZm9TaWduXCI+PC9zcGFuPlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC90ZD5cbiAgICB9XG48L25nLXRlbXBsYXRlPlxuIl19
|
|
330
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY29sdW1ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvdGFibGUvc3JjL2xpYi90YWJsZS90YWJsZS1jb2x1bW4vdGFibGUtY29sdW1ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9hbmd1bGFyLWNvbXBvbmVudHMvdGFibGUvc3JjL2xpYi90YWJsZS90YWJsZS1jb2x1bW4vdGFibGUtY29sdW1ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsU0FBUyxFQUNULE1BQU0sRUFDTixLQUFLLEVBSUwsU0FBUyxHQUVaLE1BQU0sZUFBZSxDQUFDO0FBR3ZCLE9BQU8sRUFBc0IsZ0NBQWdDLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUNqSCxPQUFPLEVBQ0gsa0JBQWtCLEdBR3JCLE1BQU0sMkNBQTJDLENBQUM7QUFHbkQsT0FBTyxFQUFFLFNBQVMsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDBDQUEwQyxDQUFDO0FBQ3hGLE9BQU8sU0FBUyxNQUFNLGNBQWMsQ0FBQztBQUNyQyxPQUFPLE1BQU0sTUFBTSxRQUFRLENBQUM7QUFFNUIsT0FBTyxFQUFFLHlCQUF5QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDL0QsT0FBTyxFQUF3QixtQkFBbUIsRUFBNEIsTUFBTSxVQUFVLENBQUM7Ozs7Ozs7Ozs7QUFFL0Y7Ozs7Ozs7Ozs7O0dBV0c7QUFNSCxNQUFNLE9BQU8scUJBQXFCO0lBcUJUO0lBQ0E7SUFDQTtJQUNBO0lBQzBDO0lBdkJ4RCxlQUFlLEdBQTRCLElBQUksQ0FBQztJQUV2RCx3RkFBd0Y7SUFFakYsT0FBTyxHQUFhLEVBQUUsQ0FBQztJQUU5QixtR0FBbUc7SUFFNUYsUUFBUSxDQUFPO0lBRXRCLHFHQUFxRztJQUU5RixNQUFNLEdBQW9DLElBQUksQ0FB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QyxDQUFDLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pFLENBQUM7d0dBblhRLHFCQUFxQiw2SUF5QmxCLGdDQUFnQzs0RkF6Qm5DLHFCQUFxQixzUkM1Q2xDLDZ1SEErRUE7OzRGRG5DYSxxQkFBcUI7a0JBTGpDLFNBQVM7K0JBR0ksaUJBQWlCOzswQkEyQnRCLE1BQU07MkJBQUMsZ0NBQWdDO3lDQXZCckMsZUFBZTtzQkFEckIsU0FBUzt1QkFBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7Z0JBS3ZDLE9BQU87c0JBRGIsS0FBSztnQkFLQyxRQUFRO3NCQURkLEtBQUs7Z0JBS0MsTUFBTTtzQkFEWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBDb21wb25lbnQsXG4gICAgSW5qZWN0LFxuICAgIElucHV0LFxuICAgIE9uQ2hhbmdlcyxcbiAgICBTaW1wbGVDaGFuZ2VzLFxuICAgIFRlbXBsYXRlUmVmLFxuICAgIFZpZXdDaGlsZCxcbiAgICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgSG9zdFByb2plY3RDb25maWdzLCBIb3N0UHJvamVjdENvbmZpZ3NJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0BzZW5pb3JzaXN0ZW1hcy9hbmd1bGFyLWNvbXBvbmVudHMvY29tbW9uJztcbmltcG9ydCB7XG4gICAgYXBwbHlMb2NhbGl6ZWRNYXNrLFxuICAgIExvY2FsZVNlcnZpY2UsXG4gICAgTG9jYWxpemVkQmlnbnVtYmVyT3B0aW9ucyxcbn0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy9sb2NhbGUnO1xuaW1wb3J0IHsgTnVtZXJpY1NlcnZpY2UgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL251bWVyaWMnO1xuaW1wb3J0IHsgSVRva2VuIH0gZnJvbSAnQHNlbmlvcnNpc3RlbWFzL2FuZ3VsYXItY29tcG9uZW50cy90b2tlbi1saXN0JztcbmltcG9ydCB7IGRlZXBDbG9uZSwgaXNOdWxsT3JVbmRlZmluZWQgfSBmcm9tICdAc2VuaW9yc2lzdGVtYXMvYW5ndWxhci1jb21wb25lbnRzL3V0aWxzJztcbmltcG9ydCBCaWdOdW1iZXIgZnJvbSAnYmlnbnVtYmVyLmpzJztcbmltcG9ydCBtb21lbnQgZnJvbSAnbW9tZW50JztcblxuaW1wb3J0IHsgY29udmVydFRvTW9tZW50RGF0ZUZvcm1hdCB9IGZyb20gJy4uLy4uL2xvY2FsZS11dGlscyc7XG5pbXBvcnQgeyBDb2x1bW4sIENvbHVtblZhbHVlcywgRW51bUNvbHVtbkZpZWxkVHlwZSwgVGFibGVDb2x1bW5Mb2NhbGVPcHRpb25zIH0gZnJvbSAnLi9tb2RlbHMnO1xuXG4vKipcbiAqIEBkZXNjcmlwdGlvbiBDb21wb25lbnRlIGludGVybm8gcXVlIHJlbmRlcml6YSB1bWEgbGluaGEgZGUgY29sdW5hcyBkYSB0YWJlbGEsXG4gKiBhcGxpY2FuZG8gZm9ybWF0YcOnw6NvIGxvY2FsaXphZGEgKGRhdGEsIG7Dum1lcm8sIG1vZWRhLCB0b2tlbiwgZXRjLikgcGFyYSBjYWRhIGNvbHVuYS5cbiAqIE5vcm1hbG1lbnRlIHVzYWRvIGRlbnRybyBkbyBjb250ZXh0byBkZSB1bWEgdGFiZWxhIFByaW1lTkcuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYGh0bWxcbiAqIDxzLXRhYmxlLWNvbHVtbnMgW2NvbHVtbnNdPVwiY29sdW5hc1wiIFtyb3dWYWx1ZV09XCJsaW5oYVwiIC8+XG4gKiBgYGBcbiAqXG4gKiBAY2F0ZWdvcnkgRGF0YVxuICovXG5AQ29tcG9uZW50KHtcbiAgICB0ZW1wbGF0ZVVybDogJy4vdGFibGUtY29sdW1ucy5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdGFibGUtY29sdW1ucy5jb21wb25lbnQuc2NzcyddLFxuICAgIHNlbGVjdG9yOiAncy10YWJsZS1jb2x1bW5zJyxcbn0pXG5leHBvcnQgY2xhc3MgVGFibGVDb2x1bW5zQ29tcG9uZW50IGltcGxlbWVudHMgT25DaGFuZ2VzIHtcbiAgICBAVmlld0NoaWxkKCdjb2x1bW5zVGVtcGxhdGUnLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICAgIHB1YmxpYyBjb2x1bW5zVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4gfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBAZGVzY3JpcHRpb24gTGlzdGEgZGUgY29uZmlndXJhw6fDtWVzIGRhcyBjb2x1bmFzIGEgc2VyZW0gcmVuZGVyaXphZGFzLiBAZGVmYXVsdCBbXSAqL1xuICAgIEBJbnB1dCgpXG4gICAgcHVibGljIGNvbHVtbnM6IENvbHVtbltdID0gW107XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIE9iamV0byBkYSBsaW5oYSBjb20gb3MgdmFsb3JlcyBhIHNlcmVtIGV4aWJpZG9zIG5hcyBjb2x1bmFzLiBDYW1wbyBvYnJpZ2F0w7NyaW8uICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgcm93VmFsdWUhOiBhbnk7XG5cbiAgICAvKiogQGRlc2NyaXB0aW9uIE9ww6fDtWVzIGRlIGxvY2FsaXphw6fDo28gKGNhbGVuZMOhcmlvIGUgbsO6bWVybykgdXNhZGFzIHBhcmEgZm9ybWF0YcOnw6NvLiBAZGVmYXVsdCBudWxsICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgbG9jYWxlOiBUYWJsZUNvbHVtbkxvY2FsZU9wdGlvbnMgfCBudWxsID0gbnVsbDtcblxuICAgIGNlbGxzRGF0YTogKENlbGxEYXRhIHwgbnVsbClbXSA9IFtdO1xuXG4gICAgZm9ybWF0dGVkQ29sdW1uczogQ29sdW1uVmFsdWVzW10gPSBbXTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGxvY2FsZVNlcnZpY2U6IExvY2FsZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgdmlld0NvbnRhaW5lclJlZjogVmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgICAgIHByaXZhdGUgcmVhZG9ubHkgbnVtZXJpY1NlcnZpY2U6IE51bWVyaWNTZXJ2aWNlLFxuICAgICAgICBASW5qZWN0KEhvc3RQcm9qZWN0Q29uZmlnc0luamVjdGlvblRva2VuKSBwcml2YXRlIHJlYWRvbmx5IGhvc3RQcm9qZWN0Q29uZmlnczogSG9zdFByb2plY3RDb25maWdzLFxuICAgICkge1xuICAgICAgICB0aGlzLmxvY2FsZSA9IHtcbiAgICAgICAgICAgIGNhbGVuZGFyOiB7XG4gICAgICAgICAgICAgICAgLi4udGhpcy5sb2NhbGVTZXJ2aWNlLmdldExvY2FsZU9wdGlvbnMoKT8uY2FsZW5kYXIsXG4gICAgICAgICAgICAgICAgZGF0ZUZvcm1hdDogY29udmVydFRvTW9tZW50RGF0ZUZvcm1hdCh0aGlzLmxvY2FsZVNlcnZpY2UuZ2V0TG9jYWxlT3B0aW9ucygpPy5jYWxlbmRhci5kYXRlRm9ybWF0ID8/ICcnKSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBudW1iZXI6IHtcbiAgICAgICAgICAgICAgICAuLi50aGlzLmxvY2FsZVNlcnZpY2UuZ2V0TG9jYWxlT3B0aW9ucygpPy5udW1iZXIsXG4gICAgICAgICAgICAgICAgc2NhbGU6IDAsXG4gICAgICAgICAgICB9LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52YWxpZGF0ZUNvbXBvbmVudEF0dHJpYnV0ZXMoY2hhbmdlcyk7XG5cbiAgICAgICAgaWYgKGNoYW5nZXNbJ2NvbHVtbnMnXSAmJiBjaGFuZ2VzWydjb2x1bW5zJ10uY3VycmVudFZhbHVlICE9PSBjaGFuZ2VzWydjb2x1bW5zJ10ucHJldmlvdXNWYWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5zb3J0Q29sdW1uc0J5U2VxdWVuY2UoY2hhbmdlc1snY29sdW1ucyddLmN1cnJlbnRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jcmVhdGVDb2x1bW5zVGVtcGxhdGUoY2hhbmdlcyk7XG4gICAgfVxuXG4gICAgcHVibGljIGlzQXJyYXkodmFsdWU6IGFueSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gQXJyYXkuaXNBcnJheSh2YWx1ZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGdldFRva2Vuc0J5Q29sdW1uKGNvbHVtbjogQ29sdW1uVmFsdWVzKSB7XG4gICAgICAgIHJldHVybiBjb2x1bW4uY29sdW1uVmFsdWUgYXMgSVRva2VuW107XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDZWxsRGF0YShjb2x1bW46IENvbHVtblZhbHVlcyk6IENlbGxEYXRhIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHsgY29sdW1uVmFsdWUsIHNlcGFyYXRvciwgdW5pbmZvcm1lZCB9ID0gY29sdW1uO1xuXG4gICAgICAgIGlmICh0eXBlb2YgY29sdW1uVmFsdWUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICBjb25zdCBzcGxpdHRlZFN0cmluZyA9IGNvbHVtblZhbHVlLnNwbGl0KHNlcGFyYXRvcik7XG5cbiAgICAgICAgICAgIHJldHVybiBzcGxpdHRlZFN0cmluZy5tYXAoKHN0cmluZywgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0xhc3RJbmRleCA9IHNwbGl0dGVkU3RyaW5nLmxlbmd0aCAtIDEgPT09IGluZGV4O1xuXG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgaXNVbmluZm9ybWVkOiBzdHJpbmcgPT09IHVuaW5mb3JtZWQsXG4gICAgICAgICAgICAgICAgICAgIHNlcGFyYXRvcjogIWlzTGFzdEluZGV4ID8gc2VwYXJhdG9yIDogbnVsbCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHZhbGlkYXRlQ29tcG9uZW50QXR0cmlidXRlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jb2x1bW5zICYmICFjaGFuZ2VzWydjb2x1bW5zJ10/LmN1cnJlbnRWYWx1ZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiVGhlICdjb2x1bW5zJyBhdHRyaWJ1dGUgbXVzdCBiZSBpbmZvcm1lZCFcIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCF0aGlzLnJvd1ZhbHVlICYmICFjaGFuZ2VzWydyb3dWYWx1ZSddPy5jdXJyZW50VmFsdWUpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIlRoZSAncm93VmFsdWUnIGF0dHJpYnV0ZSBtdXN0IGJlIGluZm9ybWVkIVwiKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlQ29sdW1uc1RlbXBsYXRlKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgdGhpcy52aWV3Q29udGFpbmVyUmVmLmNsZWFyKCk7XG5cbiAgICAgICAgY29uc3QgY29sdW1uczogQ29sdW1uW10gPSBjaGFuZ2VzWydjb2x1bW5zJ10/LmN1cnJlbnRWYWx1ZSB8fCB0aGlzLmNvbHVtbnM7XG5cbiAgICAgICAgY29uc3Qgcm93VmFsdWU6IG9iamVjdCA9IGRlZXBDbG9uZShjaGFuZ2VzWydyb3dWYWx1ZSddPy5jdXJyZW50VmFsdWUgPz8gdGhpcy5yb3dWYWx1ZSk7XG5cbiAgICAgICAgY29uc3QgbG9jYWxlOiBUYWJsZUNvbHVtbkxvY2FsZU9wdGlvbnMgPSBjaGFuZ2VzWydsb2NhbGUnXT8uY3VycmVudFZhbHVlIHx8IHRoaXMubG9jYWxlO1xuXG4gICAgICAgIHRoaXMuZm9ybWF0dGVkQ29sdW1ucyA9IGNvbHVtbnMubWFwKChjb2x1bW4pID0+IHRoaXMuZ2V0Q29sdW1uVmFsdWUoY29sdW1uLCByb3dWYWx1ZSwgbG9jYWxlKSk7XG5cbiAgICAgICAgdGhpcy5jZWxsc0RhdGEgPSB0aGlzLmZvcm1hdHRlZENvbHVtbnMubWFwKChjb2x1bW4pID0+IHRoaXMuZ2V0Q2VsbERhdGEoY29sdW1uKSk7XG5cbiAgICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZCh0aGlzLmNvbHVtbnNUZW1wbGF0ZSkpIHtcbiAgICAgICAgICAgIHRoaXMudmlld0NvbnRhaW5lclJlZi5jcmVhdGVFbWJlZGRlZFZpZXcodGhpcy5jb2x1bW5zVGVtcGxhdGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDb2x1bW5TZXBhcmF0b3IoY29sdW1uOiBDb2x1bW4pIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbi5zZXBhcmF0b3IgPyBjb2x1bW4uc2VwYXJhdG9yIDogJyAtICc7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUcmFuc2xhdGlvblByZWZpeChjb2x1bW46IENvbHVtbikge1xuICAgICAgICByZXR1cm4gY29sdW1uLnByZWZpeCA/IGNvbHVtbi5wcmVmaXggOiBgJHt0aGlzLmhvc3RQcm9qZWN0Q29uZmlncy5kb21haW59LiR7dGhpcy5ob3N0UHJvamVjdENvbmZpZ3Muc2VydmljZX0uYDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzQXR0cmlidXRlVmFsdWVJbnZhbGlkKGF0dHJpYnV0ZVZhbHVlOiBhbnkpIHtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIGF0dHJpYnV0ZVZhbHVlID09PSBudWxsIHx8XG4gICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZSA9PT0gdW5kZWZpbmVkIHx8XG4gICAgICAgICAgICAoYXR0cmlidXRlVmFsdWU/Lm9wdGlvbnM/Lm51bWJlckZvcm1hdE9wdGlvbnMgJiYgaXNOdWxsT3JVbmRlZmluZWQoYXR0cmlidXRlVmFsdWU/LnZhbHVlKSkgfHxcbiAgICAgICAgICAgICh0aGlzLmlzQXJyYXkoYXR0cmlidXRlVmFsdWUpICYmICFhdHRyaWJ1dGVWYWx1ZS5sZW5ndGgpIHx8XG4gICAgICAgICAgICAodHlwZW9mIGF0dHJpYnV0ZVZhbHVlID09PSAnc3RyaW5nJyAmJiBhdHRyaWJ1dGVWYWx1ZS50cmltKCkgPT09ICcnKVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Rm9ybWF0dGVkQ29sdW1uVmFsdWUoXG4gICAgICAgIGNvbHVtbjogQ29sdW1uLFxuICAgICAgICBjb2x1bW5WYWx1ZTogYW55W10sXG4gICAgICAgIHVuaWZpZWRDb2x1bW5WYWx1ZXM6IHN0cmluZyxcbiAgICAgICAgdW5pbmZvcm1lZFRleHQ6IHN0cmluZyxcbiAgICAgICAgdW5pbmZvcm1lZE51bWJlcjogbnVtYmVyLFxuICAgICkge1xuICAgICAgICBpZiAodW5pbmZvcm1lZE51bWJlciA9PT0gY29sdW1uLmF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICByZXR1cm4gdW5pbmZvcm1lZFRleHQ7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29sdW1uLnR5cGUgPT09IEVudW1Db2x1bW5GaWVsZFR5cGUuVE9LRU5TKSB7XG4gICAgICAgICAgICByZXR1cm4gW10uY29uY2F0LmFwcGx5KFxuICAgICAgICAgICAgICAgIFtdLFxuICAgICAgICAgICAgICAgIGNvbHVtblZhbHVlLmZpbHRlcigodmFsdWVzKSA9PiB2YWx1ZXMgIT09IHVuaW5mb3JtZWRUZXh0KSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5pZmllZENvbHVtblZhbHVlcztcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEF0dHJpYnV0ZVZhbHVlKGF0dHJpYnV0ZTogc3RyaW5nLCByb3dWYWx1ZTogYW55KSB7XG4gICAgICAgIGxldCBhdHRyaWJ1dGVWYWx1ZSE6IGFueTtcblxuICAgICAgICBhdHRyaWJ1dGUuc3BsaXQoJy8nKS5mb3JFYWNoKCh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWF0dHJpYnV0ZVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUuc3BsaXQoJy4nKS5mb3JFYWNoKCh2YWw6IHN0cmluZywgaSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXJvd1ZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVmFsdWUgPSByb3dWYWx1ZVt2YWxdO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVmFsdWUgPSBhdHRyaWJ1dGVWYWx1ZVt2YWxdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBhdHRyaWJ1dGVWYWx1ZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldE51bWJlckNvbmZpZ3MoY29sdW1uOiBDb2x1bW4pOiBMb2NhbGl6ZWRCaWdudW1iZXJPcHRpb25zIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIC4uLnRoaXMubG9jYWxlPy5udW1iZXIsXG4gICAgICAgICAgICBzY2FsZTpcbiAgICAgICAgICAgICAgICBjb2x1bW4uc2NhbGUgIT09IG51bGwgJiYgY29sdW1uLnNjYWxlICE9PSB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICAgICAgPyB0aGlzLmdldENvbHVtblNjYWxlKGNvbHVtbi5zY2FsZSlcbiAgICAgICAgICAgICAgICAgICAgOiB0aGlzLmxvY2FsZT8ubnVtYmVyLnNjYWxlLFxuICAgICAgICAgICAgcHJlZml4OiBgJHt0aGlzLmxvY2FsZT8ubnVtYmVyLmN1cnJlbmN5U3ltYm9sfSBgLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RGF0ZUZvcm1hdChjb2x1bW46IENvbHVtbiwgbG9jYWxlOiBUYWJsZUNvbHVtbkxvY2FsZU9wdGlvbnMpIHtcbiAgICAgICAgcmV0dXJuIGNvbHVtbi5kYXRlRm9ybWF0ID8gY29sdW1uLmRhdGVGb3JtYXQgOiBsb2NhbGUuY2FsZW5kYXIuZGF0ZUZvcm1hdDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbHVtblZhbHVlKGNvbHVtbjogQ29sdW1uLCByb3dWYWx1ZTogYW55LCBsb2NhbGU6IFRhYmxlQ29sdW1uTG9jYWxlT3B0aW9ucyk6IENvbHVtblZhbHVlcyB7XG4gICAgICAgIGNvbnN0IHByZWZpeCA9IHRoaXMuZ2V0VHJhbnNsYXRpb25QcmVmaXgoY29sdW1uKTtcbiAgICAgICAgY29uc3Qgc2VwYXJhdG9yID0gdGhpcy5nZXRDb2x1bW5TZXBhcmF0b3IoY29sdW1uKTtcbiAgICAgICAgY29uc3QgdW5pbmZvcm1lZCA9IHRoaXMudHJhbnNsYXRlLmluc3RhbnQocHJlZml4ICsgJ2VtcHR5X2xhYmVsJyk7XG4gICAgICAgIGNvbnN0IHN0eWxlID0gY29sdW1uLnN0eWxlO1xuXG4gICAgICAgIGNvbnN0IGNvbHVtblZhbHVlID0gY29sdW1uLmF0dHJpYnV0ZXMubWFwKChhdHRyaWJ1dGU6IHN0cmluZyB8IG51bWJlciB8IHN5bWJvbCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlVmFsdWUgPSB0aGlzLmdldEF0dHJpYnV0ZVZhbHVlKGF0dHJpYnV0ZSBhcyBzdHJpbmcsIHJvd1ZhbHVlKTtcblxuICAgICAgICAgICAgaWYgKHRoaXMuaXNBdHRyaWJ1dGVWYWx1ZUludmFsaWQoYXR0cmlidXRlVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuaW5mb3JtZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IG51bWJlckNvbmZpZ3MgPSB0aGlzLmdldE51bWJlckNvbmZpZ3MoY29sdW1uKTtcblxuICAgICAgICAgICAgc3dpdGNoIChjb2x1bW4udHlwZSkge1xuICAgICAgICAgICAgICAgIGNhc2UgRW51bUNvbHVtbkZpZWxkVHlwZS5FTlVNOlxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuaW5zdGFudChjb2x1bW4uZW51bVByZWZpeCArIGF0dHJpYnV0ZVZhbHVlLnRvU3RyaW5nKCkudG9Mb3dlckNhc2UoKSk7XG5cbiAgICAgICAgICAgICAgICBjYXNlIEVudW1Db2x1bW5GaWVsZFR5cGUuQ1VSUkVOQ1k6IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbnVtYmVyRm9ybWF0T3B0aW9ucyA9IGF0dHJpYnV0ZVZhbHVlPy5vcHRpb25zPy5udW1iZXJGb3JtYXRPcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGF0dHJpYnV0ZVZhbHVlLm9wdGlvbnMubnVtYmVyRm9ybWF0T3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgOiB0eXBlb2YgY29sdW1uLm51bWJlckZvcm1hdE9wdGlvbnMgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjb2x1bW4ubnVtYmVyRm9ybWF0T3B0aW9ucyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd0RhdGE6IHJvd1ZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogY29sdW1uLm51bWJlckZvcm1hdE9wdGlvbnM7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlckZvcm1hdE9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5udW1lcmljU2VydmljZS5pbnN0YW50KGF0dHJpYnV0ZVZhbHVlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJGb3JtYXRPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBhcHBseUxvY2FsaXplZE1hc2soXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNpbWFsU2VwYXJhdG9yOiAnLicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhvdXNhbmRzU2VwYXJhdG9yOiAnLCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGU6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWZmaXg6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93TmVnYXRpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ubnVtYmVyQ29uZmlncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTnVtYmVyKGF0dHJpYnV0ZVZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBjYXNlIEVudW1Db2x1bW5GaWVsZFR5cGUuREFURTpcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGF0ZUZvcm1hdCA9IHRoaXMuZ2V0RGF0ZUZvcm1hdChjb2x1bW4sIGxvY2FsZSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBtb21lbnQoYXR0cmlidXRlVmFsdWUpLmZvcm1hdChkYXRlRm9ybWF0KTtcblxuICAgICAgICAgICAgICAgIGNhc2UgRW51bUNvbHVtbkZpZWxkVHlwZS5CT09MRUFOOlxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGF0dHJpYnV0ZVZhbHVlID8gJ3llcycgOiAnbm8nO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGUuaW5zdGFudChwcmVmaXggKyB2YWx1ZSk7XG5cbiAgICAgICAgICAgICAgICBjYXNlIEVudW1Db2x1bW5GaWVsZFR5cGUuTlVNQkVSOiB7XG4gICAgICAgICAgICAgICAgICAgIG51bWJlckNvbmZpZ3MucHJlZml4ID0gJyc7XG5cbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbnVtYmVyRm9ybWF0T3B0aW9ucyA9IGF0dHJpYnV0ZVZhbHVlPy5vcHRpb25zPy5udW1iZXJGb3JtYXRPcHRpb25zXG4gICAgICAgICAgICAgICAgICAgICAgICA/IGF0dHJpYnV0ZVZhbHVlLm9wdGlvbnMubnVtYmVyRm9ybWF0T3B0aW9uc1xuICAgICAgICAgICAgICAgICAgICAgICAgOiB0eXBlb2YgY29sdW1uLm51bWJlckZvcm1hdE9wdGlvbnMgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgICAgICAgICAgICAgICAgPyBjb2x1bW4ubnVtYmVyRm9ybWF0T3B0aW9ucyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd0RhdGE6IHJvd1ZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgIDogY29sdW1uLm51bWJlckZvcm1hdE9wdGlvbnM7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bWJlckZvcm1hdE9wdGlvbnNcbiAgICAgICAgICAgICAgICAgICAgICAgID8gdGhpcy5udW1lcmljU2VydmljZS5pbnN0YW50KGF0dHJpYnV0ZVZhbHVlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXJGb3JtYXRPcHRpb25zLFxuICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgOiBhcHBseUxvY2FsaXplZE1hc2soXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVWYWx1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNpbWFsU2VwYXJhdG9yOiAnLicsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhvdXNhbmRzU2VwYXJhdG9yOiAnLCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGU6IDIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4OiAnJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWZmaXg6ICcnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93TmVnYXRpdmU6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4ubnVtYmVyQ29uZmlncyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTnVtYmVyKGF0dHJpYnV0ZVZhbHVlKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2FzZSBFbnVtQ29sdW1uRmllbGRUeXBlLlRPS0VOUzpcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VG9rZW5zKGF0dHJpYnV0ZVZhbHVlKTtcblxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVWYWx1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgdW5pZmllZENvbHVtblZhbHVlcyA9IGNvbHVtblZhbHVlLmpvaW4oc2VwYXJhdG9yKTtcbiAgICAgICAgY29uc3QgdW5pbmZvcm1lZE51bWJlciA9IHVuaWZpZWRDb2x1bW5WYWx1ZXMuc3BsaXQoc2VwYXJhdG9yKS5maWx0ZXIoKHZhbHVlKSA9PiB2YWx1ZSA9PT0gdW5pbmZvcm1lZCkubGVuZ3RoO1xuICAgICAgICBjb25zdCBmb3JtYXR0ZWRDb2x1bW5WYWx1ZSA9IHRoaXMuZ2V0Rm9ybWF0dGVkQ29sdW1uVmFsdWUoXG4gICAgICAgICAgICBjb2x1bW4sXG4gICAgICAgICAgICBjb2x1bW5WYWx1ZSxcbiAgICAgICAgICAgIHVuaWZpZWRDb2x1bW5WYWx1ZXMsXG4gICAgICAgICAgICB1bmluZm9ybWVkLFxuICAgICAgICAgICAgdW5pbmZvcm1lZE51bWJlcixcbiAgICAgICAgKTtcblxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc3R5bGUsXG4gICAgICAgICAgICBjb2x1bW5WYWx1ZTogZm9ybWF0dGVkQ29sdW1uVmFsdWUsXG4gICAgICAgICAgICBzZXBhcmF0b3IsXG4gICAgICAgICAgICB1bmluZm9ybWVkLFxuICAgICAgICAgICAgYmFkZ2VDb25maWdzOiBjb2x1bW4/LmJhZGdlQ29uZmlncz8uZmluZChcbiAgICAgICAgICAgICAgICAoYmFkZ2VDb25maWcpID0+IGJhZGdlQ29uZmlnLmVudW1WYWx1ZSA9PT0gcm93VmFsdWVbY29sdW1uLmF0dHJpYnV0ZXNbMF0gPz8gY29sdW1uLmZpZWxkXSxcbiAgICAgICAgICAgICksXG4gICAgICAgICAgICBjb2xvcjogY29sdW1uLmNvbG9yPy4ocm93VmFsdWUpLFxuICAgICAgICAgICAgdHlwZTogY29sdW1uLnR5cGUsXG4gICAgICAgICAgICB0b29sdGlwOiB0aGlzLmdldENvbHVtblRvb2x0aXAoY29sdW1uLnRvb2x0aXApLFxuICAgICAgICAgICAgaW5mb1NpZ246IHRoaXMuZ2V0Q29sdW1uSW5mb1NpZ24oY29sdW1uLmluZm9TaWduKSxcbiAgICAgICAgICAgIG9uTGlua0NsaWNrOiBjb2x1bW4ub25MaW5rQ2xpY2ssXG4gICAgICAgICAgICBvbkNvbHVtbkNsaWNrOiBjb2x1bW4ub25Db2x1bW5DbGljayxcbiAgICAgICAgICAgIGNvbXBhY3Q6IGNvbHVtbi5jb21wYWN0LFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29sdW1uU2NhbGUoc2NhbGU6IG51bWJlciB8ICgocm93VmFsdWU6IGFueSkgPT4gbnVtYmVyKSk6IG51bWJlciB7XG4gICAgICAgIGlmICh0eXBlb2Ygc2NhbGUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHJldHVybiBzY2FsZShkZWVwQ2xvbmUodGhpcy5yb3dWYWx1ZSkpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzY2FsZTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldENvbHVtbkluZm9TaWduKGluZm9TaWduPzogc3RyaW5nIHwgKChyb3dWYWx1ZTogYW55KSA9PiBzdHJpbmcgfCBudWxsKSk6IHN0cmluZyB8IG51bGwge1xuICAgICAgICBpZiAoIWlzTnVsbE9yVW5kZWZpbmVkKGluZm9TaWduKSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBpbmZvU2lnbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBpbmZvU2lnbihkZWVwQ2xvbmUodGhpcy5yb3dWYWx1ZSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGluZm9TaWduO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29sdW1uVG9vbHRpcCh0b29sdGlwPzogc3RyaW5nIHwgKChyb3dWYWx1ZTogYW55KSA9PiBzdHJpbmcpKTogc3RyaW5nIHtcbiAgICAgICAgaWYgKCFpc051bGxPclVuZGVmaW5lZCh0b29sdGlwKSkge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiB0b29sdGlwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvb2x0aXAoZGVlcENsb25lKHRoaXMucm93VmFsdWUpKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiB0b29sdGlwO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTnVtYmVyKHZhbHVlOiBhbnkpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICFuZXcgQmlnTnVtYmVyKHZhbHVlKS5pc05hTigpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0VG9rZW5zKHZhbHVlczogYW55KTogSVRva2VuW10ge1xuICAgICAgICBpZiAoIXRoaXMuaXNBcnJheSh2YWx1ZXMpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1RvIHVzZSB0b2tlbnMgYW4gYXJyYXkgbXVzdCBiZSBpbmZvcm1lZCcpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzVmFsaWRUb2tlbkFycmF5KHZhbHVlcykpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgICAgICAgICAnTm90IGEgdmFsaWQgdG9rZW4gYXJyYXkuIE11c3QgYmUgYSBwcmltaXRpdmUgdmFsdWVzIGFycmF5IG9yIGFuIG9iamVjdHMgd2l0aCBsYWJlbCBhdHRyaWJ1dGUgYXJyYXknLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmlzTGFiZWxPYmplY3RBcnJheSh2YWx1ZXMpKSB7XG4gICAgICAgICAgICByZXR1cm4gdmFsdWVzO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHZhbHVlc1xuICAgICAgICAgICAgLmZpbHRlcigodmFsdWU6IGFueSkgPT4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbClcbiAgICAgICAgICAgIC5tYXAoKHZhbHVlOiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IHR5cGVvZiB2YWx1ZSA9PT0gJ3N5bWJvbCcgPyB2YWx1ZS50b1N0cmluZygpIDogYCR7dmFsdWV9YDtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBsYWJlbCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1ZhbGlkVG9rZW5BcnJheSh2YWx1ZXM6IGFueVtdKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLmlzUHJpbWl0aXZlVmFsdWVzQXJyYXkodmFsdWVzKSB8fCB0aGlzLmlzTGFiZWxPYmplY3RBcnJheSh2YWx1ZXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaXNQcmltaXRpdmVWYWx1ZXNBcnJheSh2YWx1ZXM6IGFueVtdKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB2YWx1ZXMuZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWUgIT09IE9iamVjdCh2YWx1ZSkpLmxlbmd0aCA9PT0gdmFsdWVzLmxlbmd0aDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGlzTGFiZWxPYmplY3RBcnJheSh2YWx1ZXM6IGFueVtdKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB2YWx1ZXMuZmlsdGVyKCh2YWx1ZSkgPT4gdmFsdWU/LmxhYmVsICE9PSBudWxsICYmIHZhbHVlPy5sYWJlbCAhPT0gdW5kZWZpbmVkKS5sZW5ndGggPT09IHZhbHVlcy5sZW5ndGg7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzb3J0Q29sdW1uc0J5U2VxdWVuY2UoY29sdW1uczogQ29sdW1uW10pOiBDb2x1bW5bXSB7XG4gICAgICAgIHJldHVybiBjb2x1bW5zLnNvcnQoKGEsIGIpID0+IChhLnNlcXVlbmNlID8/IDApIC0gKGIuc2VxdWVuY2UgPz8gMCkpO1xuICAgIH1cbn1cblxudHlwZSBDZWxsRGF0YSA9IHsgdmFsdWU6IHN0cmluZzsgaXNVbmluZm9ybWVkOiBib29sZWFuOyBzZXBhcmF0b3I6IHN0cmluZyB8IG51bGwgfVtdO1xuXG4iLCI8bmctdGVtcGxhdGUgI2NvbHVtbnNUZW1wbGF0ZT5cbiAgICBAZm9yIChjb2x1bW4gb2YgZm9ybWF0dGVkQ29sdW1uczsgdHJhY2sgJGluZGV4OyBsZXQgaSA9ICRpbmRleCkge1xuICAgICAgICA8dGRcbiAgICAgICAgICAgIFtuZ1N0eWxlXT1cImNvbHVtbi5zdHlsZVwiXG4gICAgICAgICAgICAoY2xpY2spPVwiY29sdW1uLm9uQ29sdW1uQ2xpY2sgPyBjb2x1bW4ub25Db2x1bW5DbGljayhyb3dWYWx1ZSkgOiBudWxsXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgQGlmIChjb2x1bW4udHlwZSAhPT0gJ1RPS0VOUycgfHwgIWlzQXJyYXkoY29sdW1uLmNvbHVtblZhbHVlKSkge1xuICAgICAgICAgICAgICAgIDxkaXYgW25nQ2xhc3NdPVwieyAnY29tcGFjdC1jb2x1bW4nOiBjb2x1bW4uY29tcGFjdCB9XCI+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoY29sdW1uLnR5cGUgIT09ICdMSU5LJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbc1Rvb2x0aXBdPVwiY29sdW1uLnRvb2x0aXBcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtlc2NhcGVdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2x1bW5WYWx1ZVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBAaWYgKGNvbHVtbi50eXBlID09PSAnTElOSycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIEBpZiAoY2VsbHNEYXRhW2ldPy5bMF0/LmlzVW5pbmZvcm1lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwic2RzLWVtcHR5LXZhbHVlXCI+e3sgY2VsbHNEYXRhW2ldPy5bMF0/LnZhbHVlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNhbmNob3JUZW1wbGF0ZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGFcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtzVG9vbHRpcF09XCJjb2x1bW4udG9vbHRpcFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbZXNjYXBlXT1cImZhbHNlXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJjb2x1bW4ub25MaW5rQ2xpY2sgPyBjb2x1bW4ub25MaW5rQ2xpY2socm93VmFsdWUpIDogbnVsbFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJjb2x1bW5WYWx1ZVRlbXBsYXRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvYT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L25nLXRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgPG5nLXRlbXBsYXRlICNjb2x1bW5WYWx1ZVRlbXBsYXRlPlxuICAgICAgICAgICAgICAgICAgICAgICAgQGZvciAoY2VsbERhdGEgb2YgY2VsbHNEYXRhW2ldOyB0cmFjayAkaW5kZXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNlbGxEYXRhLmlzVW5pbmZvcm1lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInNkcy1lbXB0eS12YWx1ZVwiPnt7IGNlbGxEYXRhLnZhbHVlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gQGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaWYgKGNvbHVtbi5iYWRnZUNvbmZpZ3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzLWJhZGdlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3NUb29sdGlwXT1cImNvbHVtbi50b29sdGlwXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbY29sb3JdPVwiY29sdW1uLmJhZGdlQ29uZmlncy5jb2xvclwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW3RleHRdPVwiY2VsbERhdGEudmFsdWVcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvcy1iYWRnZT5cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBAZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBbbmdDbGFzc109XCJ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbHVtbi1jZWxsLXJlZCc6IGNvbHVtbi5jb2xvciA9PT0gJ1JlZCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbHVtbi1jZWxsLW9yYW5nZSc6IGNvbHVtbi5jb2xvciA9PT0gJ09yYW5nZScsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbHVtbi1jZWxsLXllbGxvdyc6IGNvbHVtbi5jb2xvciA9PT0gJ1llbGxvdycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbHVtbi1jZWxsLWdyZWVuJzogY29sdW1uLmNvbG9yID09PSAnR3JlZW4nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2x1bW4tY2VsbC1ibHVlJzogY29sdW1uLmNvbG9yID09PSAnQmx1ZSdcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPnt7IGNlbGxEYXRhLnZhbHVlIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgQGlmIChjZWxsRGF0YS5zZXBhcmF0b3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHNwYW4+e3sgY2VsbERhdGEuc2VwYXJhdG9yIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgQGlmICghIWNvbHVtbi5pbmZvU2lnbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuICpzSW5mb1NpZ249XCJjb2x1bW4uaW5mb1NpZ25cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIDwvbmctdGVtcGxhdGU+XG4gICAgICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICB9IEBlbHNlIHtcbiAgICAgICAgICAgICAgICA8cy10b2tlbi1saXN0XG4gICAgICAgICAgICAgICAgICAgIFt0b2tlbnNdPVwiZ2V0VG9rZW5zQnlDb2x1bW4oY29sdW1uKVwiXG4gICAgICAgICAgICAgICAgICAgIFtoaWRlUG9pbnRlckV2ZW50c109XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICA+PC9zLXRva2VuLWxpc3Q+XG5cbiAgICAgICAgICAgICAgICBAaWYgKCEhY29sdW1uLmluZm9TaWduKSB7XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuICpzSW5mb1NpZ249XCJjb2x1bW4uaW5mb1NpZ25cIj48L3NwYW4+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICA8L3RkPlxuICAgIH1cbjwvbmctdGVtcGxhdGU+XG4iXX0=
|
|
@@ -3,4 +3,5 @@ export * from './lib/table/row-toggler/row-toggler.directive';
|
|
|
3
3
|
export * from './lib/table/table-column/index';
|
|
4
4
|
export * from './lib/table/table-paging/index';
|
|
5
5
|
export * from './lib/table/table.module';
|
|
6
|
-
|
|
6
|
+
export { ExportUtils } from './lib/table/export-utils';
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2FuZ3VsYXItY29tcG9uZW50cy90YWJsZS9zcmMvcHVibGljLWFwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLDZDQUE2QyxDQUFDO0FBQzVELGNBQWMsK0NBQStDLENBQUM7QUFDOUQsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLGdDQUFnQyxDQUFDO0FBQy9DLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDBCQUEwQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWIvdGFibGUvbmF2aWdhdGlvbi9uYXZpZ2F0aW9uLmRpcmVjdGl2ZSc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWJsZS9yb3ctdG9nZ2xlci9yb3ctdG9nZ2xlci5kaXJlY3RpdmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdGFibGUvdGFibGUtY29sdW1uL2luZGV4JztcbmV4cG9ydCAqIGZyb20gJy4vbGliL3RhYmxlL3RhYmxlLXBhZ2luZy9pbmRleCc7XG5leHBvcnQgKiBmcm9tICcuL2xpYi90YWJsZS90YWJsZS5tb2R1bGUnO1xuZXhwb3J0IHsgRXhwb3J0VXRpbHMgfSBmcm9tICcuL2xpYi90YWJsZS9leHBvcnQtdXRpbHMnO1xuIl19
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
import * as i0 from '@angular/core';
|
|
2
|
-
import {
|
|
2
|
+
import { input, model, output, forwardRef, Directive, NgModule } from '@angular/core';
|
|
3
3
|
import { NG_VALUE_ACCESSOR } from '@angular/forms';
|
|
4
|
-
import {
|
|
5
|
-
import { first } from 'rxjs/operators';
|
|
6
|
-
import * as i1 from '@seniorsistemas/angular-components/locale';
|
|
4
|
+
import { NumericMaskDirective } from '@seniorsistemas/angular-components/numeric-mask';
|
|
7
5
|
import { CommonModule } from '@angular/common';
|
|
8
6
|
|
|
9
7
|
/**
|
|
10
|
-
* @deprecated
|
|
8
|
+
* @deprecated Este enum não tem mais efeito. O alinhamento do campo é sempre `'right'`.
|
|
11
9
|
*/
|
|
12
10
|
var BignumberAlignmentOption;
|
|
13
11
|
(function (BignumberAlignmentOption) {
|
|
@@ -27,134 +25,198 @@ var BignumberAlignmentOption;
|
|
|
27
25
|
*
|
|
28
26
|
* @category Inputs
|
|
29
27
|
*/
|
|
30
|
-
class BignumberInputDirective extends
|
|
31
|
-
localeService;
|
|
28
|
+
class BignumberInputDirective extends NumericMaskDirective {
|
|
32
29
|
/**
|
|
33
|
-
* @description Número total de dígitos significativos aceitos pelo campo.
|
|
30
|
+
* @description Número total de dígitos significativos aceitos pelo campo (parte inteira + parte decimal).
|
|
31
|
+
*
|
|
32
|
+
* Durante a digitação, o campo limita fisicamente o número de caracteres via `maxLength`.
|
|
33
|
+
* Ao colar um valor que ultrapasse o limite, o evento `pasteRejected` é emitido e a colagem é cancelada.
|
|
34
|
+
* Após sair do campo (blur) ou ao submeter o formulário, se o valor ultrapassar `precision`,
|
|
35
|
+
* o campo ficará inválido com o erro `exceedsPrecision: { precision, actual }`.
|
|
34
36
|
*
|
|
35
37
|
* @default 15
|
|
36
38
|
*/
|
|
37
|
-
precision = 15;
|
|
39
|
+
precision = input(15);
|
|
38
40
|
/**
|
|
41
|
+
* @deprecated Use `minDecimalPlaces` e `maxDecimalPlaces` ao invés deste.
|
|
39
42
|
* @description Número de casas decimais exibidas e aceitas pelo campo.
|
|
43
|
+
* Quando informado, repassa o valor para `minDecimalPlaces` e `maxDecimalPlaces`.
|
|
40
44
|
*
|
|
41
45
|
* @default 0
|
|
42
46
|
*/
|
|
43
|
-
scale = 0;
|
|
47
|
+
scale = input(0);
|
|
48
|
+
/**
|
|
49
|
+
* @description Número mínimo de casas decimais exibidas.
|
|
50
|
+
*
|
|
51
|
+
* @default 0
|
|
52
|
+
*/
|
|
53
|
+
minDecimalPlaces = model(0);
|
|
54
|
+
/**
|
|
55
|
+
* @description Número máximo de casas decimais aceitas.
|
|
56
|
+
*
|
|
57
|
+
* @default 0
|
|
58
|
+
*/
|
|
59
|
+
maxDecimalPlaces = model(0);
|
|
44
60
|
/**
|
|
45
61
|
* @description Separador decimal personalizado. Quando não informado,
|
|
46
62
|
* utiliza o separador definido pelo locale ativo da aplicação.
|
|
47
63
|
*/
|
|
48
|
-
decimalSeparator;
|
|
64
|
+
decimalSeparator = model(',');
|
|
65
|
+
/**
|
|
66
|
+
* @deprecated Use `thousandSeparator` ao invés deste.
|
|
67
|
+
* @description Separador de milhar personalizado. Recomenda-se migrar para `thousandSeparator`.
|
|
68
|
+
*/
|
|
69
|
+
thousandsSeparator = input(undefined);
|
|
49
70
|
/**
|
|
50
71
|
* @description Separador de milhar personalizado. Quando não informado,
|
|
51
72
|
* utiliza o separador definido pelo locale ativo da aplicação.
|
|
52
73
|
*/
|
|
53
|
-
|
|
74
|
+
thousandSeparator = model('.');
|
|
54
75
|
/**
|
|
55
|
-
* @
|
|
56
|
-
*
|
|
57
|
-
* @default 'left'
|
|
76
|
+
* @deprecated Este input não tem mais efeito e pode ser removido.
|
|
77
|
+
* O alinhamento do campo é sempre `'right'`, conforme o comportamento padrão da máscara numérica.
|
|
58
78
|
*/
|
|
59
|
-
alignTo = '
|
|
79
|
+
alignTo = input('right');
|
|
60
80
|
/**
|
|
61
81
|
* @description Permite a entrada de valores negativos.
|
|
62
82
|
*
|
|
63
83
|
* @default true
|
|
64
84
|
*/
|
|
65
|
-
allowNegative = true;
|
|
85
|
+
allowNegative = input(true);
|
|
66
86
|
/**
|
|
67
87
|
* @description Texto de placeholder exibido quando o campo está vazio.
|
|
68
88
|
*/
|
|
69
|
-
placeholder;
|
|
89
|
+
placeholder = model(undefined);
|
|
70
90
|
maxLength;
|
|
71
91
|
/**
|
|
72
|
-
* @description Emitido quando uma
|
|
92
|
+
* @description Emitido quando uma colagem (paste) é rejeitada pela validação do campo.
|
|
73
93
|
* Emite a string colada que foi recusada.
|
|
74
94
|
*/
|
|
75
|
-
pasteRejected =
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
// super(injector);
|
|
81
|
-
// this._angularComponentsLocaleService = injector.get(LocaleService);
|
|
82
|
-
// this.onLocaleService();
|
|
83
|
-
// }
|
|
84
|
-
//TODO: Remover esse constructor
|
|
85
|
-
constructor(_elementRef, _keyValueDiffers, localeService) {
|
|
86
|
-
super({ align: '', allowNegative: true, decimal: '', precision: 0, prefix: '', suffix: '', thousands: '' }, _elementRef, _keyValueDiffers);
|
|
87
|
-
this.localeService = localeService;
|
|
88
|
-
this.onLocaleService();
|
|
95
|
+
pasteRejected = output();
|
|
96
|
+
_decimalSeparatorExplicit = false;
|
|
97
|
+
_thousandSeparatorExplicit = false;
|
|
98
|
+
constructor() {
|
|
99
|
+
super();
|
|
89
100
|
}
|
|
90
101
|
ngOnInit() {
|
|
91
|
-
this.updateVariables();
|
|
92
102
|
super.ngOnInit();
|
|
103
|
+
this.updatePlaceholder();
|
|
93
104
|
}
|
|
105
|
+
// ngOnChanges handles all signal writes reactively, avoiding the need for
|
|
106
|
+
// effect() with allowSignalWrites. The decimalSeparator/thousandSeparator inputs
|
|
107
|
+
// have truthy defaults, so ngOnChanges is necessary to distinguish "parent bound this"
|
|
108
|
+
// from "it's just the default value".
|
|
94
109
|
ngOnChanges(changes) {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
110
|
+
if (changes['decimalSeparator'] && this.decimalSeparator()) {
|
|
111
|
+
this._decimalSeparatorExplicit = true;
|
|
112
|
+
}
|
|
113
|
+
if (changes['thousandSeparator'] && this.thousandSeparator()) {
|
|
114
|
+
this._thousandSeparatorExplicit = true;
|
|
98
115
|
}
|
|
99
|
-
|
|
116
|
+
if (changes['thousandsSeparator']) {
|
|
117
|
+
const val = this.thousandsSeparator();
|
|
118
|
+
if (val !== undefined) {
|
|
119
|
+
this._thousandSeparatorExplicit = true;
|
|
120
|
+
this.thousandSeparator.set(val);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
if (changes['scale']) {
|
|
124
|
+
this.minDecimalPlaces.set(this.scale());
|
|
125
|
+
this.maxDecimalPlaces.set(this.scale());
|
|
126
|
+
}
|
|
127
|
+
if (changes['scale'] ||
|
|
100
128
|
changes['decimalSeparator'] ||
|
|
129
|
+
changes['thousandSeparator'] ||
|
|
101
130
|
changes['thousandsSeparator'] ||
|
|
102
|
-
changes['
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
if (
|
|
106
|
-
this.
|
|
131
|
+
changes['precision']) {
|
|
132
|
+
this.calculateMaxLength();
|
|
133
|
+
}
|
|
134
|
+
if (changes['scale'] || changes['decimalSeparator']) {
|
|
135
|
+
this.updatePlaceholder();
|
|
107
136
|
}
|
|
108
137
|
}
|
|
138
|
+
/**
|
|
139
|
+
* Overrides base paste handler to add precision validation.
|
|
140
|
+
* If the pasted value exceeds `precision` digits, the paste is rejected.
|
|
141
|
+
*/
|
|
109
142
|
onPaste(event) {
|
|
110
143
|
const pastedText = event.clipboardData?.getData('text') ?? '';
|
|
144
|
+
const effectiveThousandSep = this.thousandsSeparator() ?? this.thousandSeparator();
|
|
111
145
|
const numericText = pastedText
|
|
112
|
-
.replace(new RegExp(`\\${
|
|
113
|
-
.replace(this.decimalSeparator, '.');
|
|
146
|
+
.replace(new RegExp(`\\${effectiveThousandSep}`, 'g'), '')
|
|
147
|
+
.replace(this.decimalSeparator(), '.');
|
|
114
148
|
const [intPart, decimalPart = ''] = numericText.split('.');
|
|
115
|
-
const totalDigits = intPart.replace(/\D/g, '').length + decimalPart.slice(0, this.scale).length;
|
|
116
|
-
if (totalDigits > this.precision) {
|
|
149
|
+
const totalDigits = intPart.replace(/\D/g, '').length + decimalPart.slice(0, this.scale()).length;
|
|
150
|
+
if (totalDigits > this.precision()) {
|
|
117
151
|
event.preventDefault();
|
|
118
152
|
this.pasteRejected.emit(pastedText);
|
|
153
|
+
return;
|
|
119
154
|
}
|
|
155
|
+
super.onPaste(event);
|
|
120
156
|
}
|
|
121
157
|
/**
|
|
122
|
-
*
|
|
158
|
+
* Overrides locale-derived separators with explicitly set inputs, if provided.
|
|
159
|
+
* If no explicit separator is set, the locale-derived value is used.
|
|
123
160
|
*/
|
|
124
|
-
|
|
125
|
-
this.
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
161
|
+
updateSeparators() {
|
|
162
|
+
const explicitDecimal = this._decimalSeparatorExplicit ? this.decimalSeparator() : undefined;
|
|
163
|
+
const explicitThousand = this._thousandSeparatorExplicit
|
|
164
|
+
? (this.thousandsSeparator() ?? this.thousandSeparator())
|
|
165
|
+
: undefined;
|
|
166
|
+
super.updateSeparators();
|
|
167
|
+
if (explicitDecimal !== undefined) {
|
|
168
|
+
this.decimalSeparator.set(explicitDecimal);
|
|
169
|
+
}
|
|
170
|
+
if (explicitThousand !== undefined) {
|
|
171
|
+
this.thousandSeparator.set(explicitThousand);
|
|
172
|
+
}
|
|
134
173
|
this.calculateMaxLength();
|
|
174
|
+
this.updatePlaceholder();
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Overrides base validator to add precision validation.
|
|
178
|
+
* If the total number of significant digits exceeds `precision`, returns an `exceedsPrecision` error.
|
|
179
|
+
*/
|
|
180
|
+
validate(control) {
|
|
181
|
+
const baseErrors = super.validate(control);
|
|
182
|
+
if (!control.value || !this.precision()) {
|
|
183
|
+
return baseErrors ?? null;
|
|
184
|
+
}
|
|
185
|
+
const numericStr = String(control.value).replace('-', '');
|
|
186
|
+
const [intPart, decimalPart = ''] = numericStr.split('.');
|
|
187
|
+
const totalDigits = intPart.length + decimalPart.length;
|
|
188
|
+
if (totalDigits > this.precision()) {
|
|
189
|
+
return {
|
|
190
|
+
...baseErrors,
|
|
191
|
+
exceedsPrecision: {
|
|
192
|
+
precision: this.precision(),
|
|
193
|
+
actual: totalDigits,
|
|
194
|
+
},
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
return baseErrors ?? null;
|
|
135
198
|
}
|
|
136
199
|
/**
|
|
137
200
|
* Responsible to calculate the field maximum length considering the separators.
|
|
138
201
|
*/
|
|
139
202
|
calculateMaxLength() {
|
|
140
|
-
const decSepLength = this.decimalSeparator?.length ?? 0;
|
|
141
|
-
const
|
|
203
|
+
const decSepLength = this.decimalSeparator()?.length ?? 0;
|
|
204
|
+
const effectiveThousandSep = this.thousandsSeparator() ?? this.thousandSeparator();
|
|
205
|
+
const thoSepLength = effectiveThousandSep?.length ?? 0;
|
|
142
206
|
const DIGITS_GROUP_SIZE = 3;
|
|
143
|
-
let maxLength = this.precision + (this.scale ? decSepLength : 0);
|
|
144
|
-
maxLength +=
|
|
207
|
+
let maxLength = this.precision() + (this.scale() ? decSepLength : 0);
|
|
208
|
+
maxLength +=
|
|
209
|
+
Math.ceil((this.precision() - (this.scale() ? this.scale() : 0)) / DIGITS_GROUP_SIZE - 1) * thoSepLength;
|
|
145
210
|
this.maxLength = maxLength;
|
|
146
211
|
}
|
|
147
|
-
|
|
148
|
-
this.
|
|
149
|
-
|
|
150
|
-
.
|
|
151
|
-
|
|
152
|
-
this.decimalSeparator = this.decimalSeparator ?? this.localeService.getDecimalSeparator();
|
|
153
|
-
this.thousandsSeparator = this.thousandsSeparator ?? this.localeService.getGroupingSeparator();
|
|
154
|
-
});
|
|
212
|
+
updatePlaceholder() {
|
|
213
|
+
const scale = this.scale();
|
|
214
|
+
if (!this.placeholder() && scale) {
|
|
215
|
+
this.placeholder.set(`0${this.decimalSeparator()}${''.padEnd(scale, '0')}`);
|
|
216
|
+
}
|
|
155
217
|
}
|
|
156
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BignumberInputDirective, deps: [
|
|
157
|
-
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "
|
|
218
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BignumberInputDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
219
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "18.2.14", type: BignumberInputDirective, selector: "input[sBignumberInput]", inputs: { precision: { classPropertyName: "precision", publicName: "precision", isSignal: true, isRequired: false, transformFunction: null }, scale: { classPropertyName: "scale", publicName: "scale", isSignal: true, isRequired: false, transformFunction: null }, minDecimalPlaces: { classPropertyName: "minDecimalPlaces", publicName: "minDecimalPlaces", isSignal: true, isRequired: false, transformFunction: null }, maxDecimalPlaces: { classPropertyName: "maxDecimalPlaces", publicName: "maxDecimalPlaces", isSignal: true, isRequired: false, transformFunction: null }, decimalSeparator: { classPropertyName: "decimalSeparator", publicName: "decimalSeparator", isSignal: true, isRequired: false, transformFunction: null }, thousandsSeparator: { classPropertyName: "thousandsSeparator", publicName: "thousandsSeparator", isSignal: true, isRequired: false, transformFunction: null }, thousandSeparator: { classPropertyName: "thousandSeparator", publicName: "thousandSeparator", isSignal: true, isRequired: false, transformFunction: null }, alignTo: { classPropertyName: "alignTo", publicName: "alignTo", isSignal: true, isRequired: false, transformFunction: null }, allowNegative: { classPropertyName: "allowNegative", publicName: "allowNegative", isSignal: true, isRequired: false, transformFunction: null }, placeholder: { classPropertyName: "placeholder", publicName: "placeholder", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { minDecimalPlaces: "minDecimalPlacesChange", maxDecimalPlaces: "maxDecimalPlacesChange", decimalSeparator: "decimalSeparatorChange", thousandSeparator: "thousandSeparatorChange", placeholder: "placeholderChange", pasteRejected: "pasteRejected" }, host: { properties: { "attr.placeholder": "placeholder()", "attr.maxLength": "maxLength" } }, providers: [
|
|
158
220
|
{
|
|
159
221
|
provide: NG_VALUE_ACCESSOR,
|
|
160
222
|
// NOSONAR - 'BignumberInputDirective' is deprecated.
|
|
@@ -167,6 +229,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
167
229
|
type: Directive,
|
|
168
230
|
args: [{
|
|
169
231
|
selector: 'input[sBignumberInput]',
|
|
232
|
+
host: {
|
|
233
|
+
'[attr.placeholder]': 'placeholder()',
|
|
234
|
+
'[attr.maxLength]': 'maxLength',
|
|
235
|
+
},
|
|
170
236
|
providers: [
|
|
171
237
|
{
|
|
172
238
|
provide: NG_VALUE_ACCESSOR,
|
|
@@ -176,32 +242,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
|
|
|
176
242
|
},
|
|
177
243
|
],
|
|
178
244
|
}]
|
|
179
|
-
}], ctorParameters: () => [
|
|
180
|
-
type: Input
|
|
181
|
-
}], scale: [{
|
|
182
|
-
type: Input
|
|
183
|
-
}], decimalSeparator: [{
|
|
184
|
-
type: Input
|
|
185
|
-
}], thousandsSeparator: [{
|
|
186
|
-
type: Input
|
|
187
|
-
}], alignTo: [{
|
|
188
|
-
type: Input
|
|
189
|
-
}], allowNegative: [{
|
|
190
|
-
type: Input
|
|
191
|
-
}], placeholder: [{
|
|
192
|
-
type: Input
|
|
193
|
-
}, {
|
|
194
|
-
type: HostBinding,
|
|
195
|
-
args: ['attr.placeholder']
|
|
196
|
-
}], maxLength: [{
|
|
197
|
-
type: HostBinding,
|
|
198
|
-
args: ['attr.maxLength']
|
|
199
|
-
}], pasteRejected: [{
|
|
200
|
-
type: Output
|
|
201
|
-
}], onPaste: [{
|
|
202
|
-
type: HostListener,
|
|
203
|
-
args: ['paste', ['$event']]
|
|
204
|
-
}] } });
|
|
245
|
+
}], ctorParameters: () => [] });
|
|
205
246
|
|
|
206
247
|
class BignumberInputModule {
|
|
207
248
|
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: BignumberInputModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|