@snabcentr/client-ui 4.14.6-profstroy → 4.15.1

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.
Files changed (58) hide show
  1. package/cart/sc-cart-add-products-from-csv-dialog/sc-cart-add-products-from-csv-dialog.component.d.ts +3 -3
  2. package/catalog/input-quantity/sc-input-quantity.component.d.ts +1 -17
  3. package/esm2022/cart/sc-cart-add-products-from-csv-dialog/sc-cart-add-products-from-csv-dialog.component.mjs +16 -5
  4. package/esm2022/catalog/input-quantity/sc-input-quantity.component.mjs +6 -29
  5. package/esm2022/order/draft/sc-draft.component.mjs +17 -183
  6. package/esm2022/order/index.mjs +3 -8
  7. package/esm2022/order/new-order-items/sc-new-order-items.component.mjs +39 -0
  8. package/esm2022/order/order-form/sc-order-form.component.mjs +6 -18
  9. package/esm2022/order/order-item/sc-order-item.component.mjs +5 -14
  10. package/esm2022/order/order-items-list/sc-order-items-list.component.mjs +7 -61
  11. package/esm2022/order/order-items-list-by-stock/sc-order-items-list-by-stock.component.mjs +1 -1
  12. package/esm2022/order/order-items-list-with-actions/sc-order-items-list-with-actions.component.mjs +53 -0
  13. package/esm2022/pipes/sc-format-date.mjs +1 -1
  14. package/esm2022/providers/sc-date-formatter.mjs +1 -1
  15. package/fesm2022/snabcentr-client-ui.mjs +78 -764
  16. package/fesm2022/snabcentr-client-ui.mjs.map +1 -1
  17. package/order/draft/sc-draft.component.d.ts +6 -96
  18. package/order/index.d.ts +2 -7
  19. package/order/new-order-items/sc-new-order-items.component.d.ts +29 -0
  20. package/order/order-form/sc-order-form.component.d.ts +2 -11
  21. package/order/order-item/sc-order-item.component.d.ts +1 -9
  22. package/order/order-items-list/sc-order-items-list.component.d.ts +1 -24
  23. package/order/order-items-list-with-actions/sc-order-items-list-with-actions.component.d.ts +37 -0
  24. package/package.json +2 -2
  25. package/pipes/sc-format-date.d.ts +1 -1
  26. package/providers/sc-date-formatter.d.ts +1 -1
  27. package/release_notes.tmp +1 -1
  28. package/styles/tailwind/tailwind.scss +4 -16
  29. package/esm2022/helpers/sc-file-helper.mjs +0 -29
  30. package/esm2022/order/draft/helpers/sc-draft-list-helper.mjs +0 -42
  31. package/esm2022/order/draft/models/sc-i-draft-list-item.mjs +0 -2
  32. package/esm2022/order/draft/profstroy/actualization-panel/sc-profstroy-actualization-panel.component.mjs +0 -68
  33. package/esm2022/order/draft/profstroy/badge/sc-profstroy-badge.component.mjs +0 -21
  34. package/esm2022/order/draft/profstroy/badges/sc-profstroy-draft-badges.component.mjs +0 -31
  35. package/esm2022/order/draft/profstroy/create-dialog/sc-profstroy-draft-create-dialog.component.mjs +0 -132
  36. package/esm2022/order/draft/profstroy/enums/sc-profstroy-draft-state.mjs +0 -32
  37. package/esm2022/order/draft/profstroy/helpers/sc-profstroy-draft-helper.mjs +0 -72
  38. package/esm2022/order/draft/profstroy/index.mjs +0 -8
  39. package/esm2022/order/draft/profstroy/models/sc-i-profstroy-draft-state-view.mjs +0 -2
  40. package/esm2022/order/models/sc-i-cart-items-by-direction.mjs +0 -22
  41. package/esm2022/order/models/sc-i-order-items-group.mjs +0 -2
  42. package/esm2022/order/order-direction-items/sc-order-direction-items.component.mjs +0 -43
  43. package/esm2022/order/order-items-list-by-directions/sc-order-items-list-by-directions.component.mjs +0 -79
  44. package/helpers/sc-file-helper.d.ts +0 -13
  45. package/order/draft/helpers/sc-draft-list-helper.d.ts +0 -22
  46. package/order/draft/models/sc-i-draft-list-item.d.ts +0 -14
  47. package/order/draft/profstroy/actualization-panel/sc-profstroy-actualization-panel.component.d.ts +0 -54
  48. package/order/draft/profstroy/badge/sc-profstroy-badge.component.d.ts +0 -12
  49. package/order/draft/profstroy/badges/sc-profstroy-draft-badges.component.d.ts +0 -21
  50. package/order/draft/profstroy/create-dialog/sc-profstroy-draft-create-dialog.component.d.ts +0 -58
  51. package/order/draft/profstroy/enums/sc-profstroy-draft-state.d.ts +0 -29
  52. package/order/draft/profstroy/helpers/sc-profstroy-draft-helper.d.ts +0 -26
  53. package/order/draft/profstroy/index.d.ts +0 -7
  54. package/order/draft/profstroy/models/sc-i-profstroy-draft-state-view.d.ts +0 -17
  55. package/order/models/sc-i-cart-items-by-direction.d.ts +0 -25
  56. package/order/models/sc-i-order-items-group.d.ts +0 -22
  57. package/order/order-direction-items/sc-order-direction-items.component.d.ts +0 -33
  58. package/order/order-items-list-by-directions/sc-order-items-list-by-directions.component.d.ts +0 -62
@@ -1,7 +1,7 @@
1
1
  import { Signal } from '@angular/core';
2
2
  import { FormControl } from '@angular/forms';
3
3
  import { TuiDialogContext } from '@taiga-ui/core';
4
- import { Subject } from 'rxjs';
4
+ import { Observable, Subject } from 'rxjs';
5
5
  import * as i0 from "@angular/core";
6
6
  /**
7
7
  * Компонент диалога для добавления товаров в корзину из CSV файла.
@@ -26,7 +26,7 @@ export declare class ScCartAddProductsFromCsvDialogComponent {
26
26
  /**
27
27
  * {@link Observable} запроса на скачивание цен каталога.
28
28
  */
29
- protected readonly downloadRequest$: import("rxjs").Observable<Blob | null | undefined>;
29
+ protected readonly downloadRequest$: Observable<Blob | null | undefined>;
30
30
  /**
31
31
  * Признак того, что запрос выполняется.
32
32
  */
@@ -38,7 +38,7 @@ export declare class ScCartAddProductsFromCsvDialogComponent {
38
38
  /**
39
39
  * {@link Observable} запроса на добавление товаров из CSV файла.
40
40
  */
41
- protected readonly submitRequest$: import("rxjs").Observable<import("@snabcentr/client-core").ScCart | null>;
41
+ protected readonly submitRequest$: Observable<import("@snabcentr/client-core").ScCart | null>;
42
42
  /**
43
43
  * Признак того, что запрос на добавление товаров выполняется.
44
44
  */
@@ -1,6 +1,6 @@
1
1
  import { EventEmitter, OnInit } from '@angular/core';
2
2
  import { FormControl } from '@angular/forms';
3
- import { TuiNumberFormatSettings, TuiSizeL, TuiSizeS } from '@taiga-ui/core';
3
+ import { TuiSizeL, TuiSizeS } from '@taiga-ui/core';
4
4
  import { AbstractTuiNullableControl } from '@taiga-ui/legacy';
5
5
  import * as i0 from "@angular/core";
6
6
  /**
@@ -10,14 +10,6 @@ export declare class ScInputQuantityComponent extends AbstractTuiNullableControl
10
10
  /**
11
11
  * Компонент поля ввода.
12
12
  */
13
- /**
14
- * Минимальное количество знаков после запятой.
15
- */
16
- private readonly minPrecision;
17
- /**
18
- * Настройки формата числа для текущего шага. Хранятся, чтобы поле получало тот же объект при каждой проверке изменений.
19
- */
20
- private numberFormatCache?;
21
13
  private readonly numberInput?;
22
14
  /**
23
15
  * Шаг увеличения количества. Отвечает за проверку кратности ввода.
@@ -60,14 +52,6 @@ export declare class ScInputQuantityComponent extends AbstractTuiNullableControl
60
52
  /**
61
53
  * Элемент формы ввода количества.
62
54
  */
63
- /**
64
- * Количество знаков после запятой: по шагу, но не меньше двух.
65
- */
66
- get precision(): number;
67
- /**
68
- * Настройки формата числа поля. Точность задаётся только для шага с тремя и более знаками после запятой, иначе действует общая настройка.
69
- */
70
- get numberFormat(): Partial<TuiNumberFormatSettings>;
71
55
  get formControl(): FormControl | null;
72
56
  /** @inheritDoc */
73
57
  ngOnInit(): void;
@@ -3,13 +3,12 @@ import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
3
3
  import { toSignal } from '@angular/core/rxjs-interop';
4
4
  import { FormControl, ReactiveFormsModule } from '@angular/forms';
5
5
  import { WA_WINDOW } from '@ng-web-apis/common';
6
- import { ScCartService } from '@snabcentr/client-core';
6
+ import { ScCartService, ScUploadedFile } from '@snabcentr/client-core';
7
7
  import { tuiIsPresent } from '@taiga-ui/cdk';
8
8
  import { TuiButton, TuiLink, TuiLoader } from '@taiga-ui/core';
9
9
  import { TuiButtonLoading, TuiFiles } from '@taiga-ui/kit';
10
10
  import { POLYMORPHEUS_CONTEXT } from '@taiga-ui/polymorpheus';
11
- import { filter, map, share, startWith, Subject, switchMap, tap } from 'rxjs';
12
- import { ScFileHelper } from '../../helpers/sc-file-helper';
11
+ import { filter, map, Observable, share, startWith, Subject, switchMap, tap } from 'rxjs';
13
12
  import * as i0 from "@angular/core";
14
13
  import * as i1 from "@taiga-ui/kit";
15
14
  import * as i2 from "@angular/forms";
@@ -55,7 +54,19 @@ export class ScCartAddProductsFromCsvDialogComponent {
55
54
  /**
56
55
  * {@link Observable} запроса на добавление товаров из CSV файла.
57
56
  */
58
- this.submitRequest$ = this.onSubmit$.pipe(map(() => this.control.value), filter(tuiIsPresent), switchMap((file) => ScFileHelper.readAsUploadedFile$(file)), switchMap((file) => this.cartService.addProductsFromCsv$(file).pipe(tap(() => {
57
+ this.submitRequest$ = this.onSubmit$.pipe(map(() => this.control.value), filter(tuiIsPresent), switchMap((file) => new Observable((observer) => {
58
+ const reader = new FileReader();
59
+ reader.addEventListener('load', () => {
60
+ observer.next(new ScUploadedFile(file.name, reader.result));
61
+ });
62
+ reader.addEventListener('error', (e) => {
63
+ observer.error(e);
64
+ });
65
+ reader.readAsDataURL(file);
66
+ return () => {
67
+ reader.abort();
68
+ };
69
+ })), switchMap((file) => this.cartService.addProductsFromCsv$(file).pipe(tap(() => {
59
70
  this.context.$implicit.complete();
60
71
  }), startWith(null))));
61
72
  /**
@@ -96,4 +107,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
96
107
  type: Component,
97
108
  args: [{ standalone: true, selector: 'sc-cart-add-products-from-csv-dialog', imports: [TuiLink, TuiLoader, TuiFiles, ReactiveFormsModule, NgIf, TuiButton, TuiButtonLoading], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col items-center gap-8\">\n <tui-loader\n [overlay]=\"true\"\n [showLoader]=\"isDownloadLoading()\"\n size=\"s\"\n class=\"mt-8\"\n >\n <button\n tuiLink\n [pseudo]=\"true\"\n type=\"button\"\n (click)=\"onDownloadClick.next()\"\n >\n \u041F\u0440\u0438\u043C\u0435\u0440 .csv \u0444\u0430\u0439\u043B\u0430\n </button>\n </tui-loader>\n\n <div class=\"flex w-full flex-col gap-1\">\n <label\n tuiInputFiles\n class=\"w-full\"\n >\n <input\n accept=\"text/csv\"\n tuiInputFiles\n [formControl]=\"control\"\n />\n </label>\n\n <tui-files class=\"tui-space_top-1\">\n <tui-file\n *ngIf=\"control.value as file\"\n [file]=\"file\"\n (remove)=\"removeFile()\"\n />\n </tui-files>\n </div>\n <div class=\"flex gap-2\">\n <button\n tuiButton\n [disabled]=\"!control.value\"\n [loading]=\"isSubmitLoading()\"\n iconStart=\"@tui.sc.send\"\n class=\"self-center\"\n (click)=\"onSubmit$.next()\"\n >\n \u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044C\n </button>\n <button\n tuiButton\n (click)=\"context.$implicit.complete()\"\n type=\"button\"\n appearance=\"secondary\"\n >\n \u041E\u0442\u043C\u0435\u043D\u0430\n </button>\n </div>\n</div>\n" }]
98
109
  }] });
99
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2FydC1hZGQtcHJvZHVjdHMtZnJvbS1jc3YtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9jYXJ0L3NjLWNhcnQtYWRkLXByb2R1Y3RzLWZyb20tY3N2LWRpYWxvZy9zYy1jYXJ0LWFkZC1wcm9kdWN0cy1mcm9tLWNzdi1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhcnQvc2MtY2FydC1hZGQtcHJvZHVjdHMtZnJvbS1jc3YtZGlhbG9nL3NjLWNhcnQtYWRkLXByb2R1Y3RzLWZyb20tY3N2LWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbkYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0MsT0FBTyxFQUFFLFNBQVMsRUFBb0IsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0QsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDOUQsT0FBTyxFQUFFLE1BQU0sRUFBRSxH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QUNsRCw4REFBOEQ7UUFDOUQsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWxELENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLFFBQVEsR0FBRywrQ0FBK0MsQ0FBQztRQUM3RCxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDVixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekMsQ0FBQzsrR0FwR1EsdUNBQXVDO21HQUF2Qyx1Q0FBdUMsZ0dDeEJwRCx5bkRBMERBLDRDRHJDYyxPQUFPLDRGQUFFLFNBQVMsK25CQUFZLG1CQUFtQiwwa0JBQUUsSUFBSSw2RkFBRSxTQUFTLG9JQUFFLGdCQUFnQjs7NEZBR3JGLHVDQUF1QztrQkFQbkQsU0FBUztpQ0FDTSxJQUFJLFlBQ04sc0NBQXNDLFdBRXZDLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxtQkFDOUUsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5qZWN0LCBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBXQV9XSU5ET1cgfSBmcm9tICdAbmctd2ViLWFwaXMvY29tbW9uJztcbmltcG9ydCB7IFNjQ2FydFNlcnZpY2UgfSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IHR1aUlzUHJlc2VudCB9IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHsgVHVpQnV0dG9uLCBUdWlEaWFsb2dDb250ZXh0LCBUdWlMaW5rLCBUdWlMb2FkZXIgfSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQgeyBUdWlCdXR0b25Mb2FkaW5nLCBUdWlGaWxlcyB9IGZyb20gJ0B0YWlnYS11aS9raXQnO1xuaW1wb3J0IHsgUE9MWU1PUlBIRVVTX0NPTlRFWFQgfSBmcm9tICdAdGFpZ2EtdWkvcG9seW1vcnBoZXVzJztcbmltcG9ydCB7IGZpbHRlciwgbWFwLCBzaGFyZSwgc3RhcnRXaXRoLCBTdWJqZWN0LCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBTY0ZpbGVIZWxwZXIgfSBmcm9tICcuLi8uLi9oZWxwZXJzL3NjLWZpbGUtaGVscGVyJztcblxuLyoqXG4gKiDQmtC+0LzQv9C+0L3QtdC90YIg0LTQuNCw0LvQvtCz0LAg0LTQu9GPINC00L7QsdCw0LLQu9C10L3QuNGPINGC0L7QstCw0YDQvtCyINCyINC60L7RgNC30LjQvdGDINC40LcgQ1NWINGE0LDQudC70LAuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdzYy1jYXJ0LWFkZC1wcm9kdWN0cy1mcm9tLWNzdi1kaWFsb2cnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zYy1jYXJ0LWFkZC1wcm9kdWN0cy1mcm9tLWNzdi1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICAgIGltcG9ydHM6IFtUdWlMaW5rLCBUdWlMb2FkZXIsIFR1aUZpbGVzLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBOZ0lmLCBUdWlCdXR0b24sIFR1aUJ1dHRvbkxvYWRpbmddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY0NhcnRBZGRQcm9kdWN0c0Zyb21Dc3ZEaWFsb2dDb21wb25lbnQge1xuICAgIC8qKlxuICAgICAqINCa0L7QvdGC0LXQutGB0YIg0LTQuNCw0LvQvtCz0L7QstC+0LPQviDQvtC60L3QsCwg0LIg0LrQvtGC0L7RgNC+0Lwg0L7RgtC60YDRi9GCINC60L7QvNC/0L7QvdC10L3Rgi5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29udGV4dDogVHVpRGlhbG9nQ29udGV4dCA9IGluamVjdDxUdWlEaWFsb2dDb250ZXh0PihQT0xZTU9SUEhFVVNfQ09OVEVYVCk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0LTQu9GPINGA0LDQsdC+0YLRiyDRgSDQutC+0YDQt9C40L3QvtC5LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FydFNlcnZpY2U6IFNjQ2FydFNlcnZpY2UgPSBpbmplY3QoU2NDYXJ0U2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiDQntCx0YrQtdC60YIg0L7QutC90LAuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSB3aW5kb3c6IFdpbmRvdyAmIHR5cGVvZiBnbG9iYWxUaGlzID0gaW5qZWN0PFdpbmRvdyAmIHR5cGVvZiBnbG9iYWxUaGlzPihXQV9XSU5ET1cpO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIFN1YmplY3R9INGB0L7QsdGL0YLQuNGPINGB0LrQsNGH0LjQstCw0L3QuNGPINGG0LXQvSDQutCw0YLQsNC70L7Qs9CwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBvbkRvd25sb2FkQ2xpY2s6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INC30LDQv9GA0L7RgdCwINC90LAg0YHQutCw0YfQuNCy0LDQvdC40LUg0YbQtdC9INC60LDRgtCw0LvQvtCz0LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGRvd25sb2FkUmVxdWVzdCQgPSB0aGlzLm9uRG93bmxvYWRDbGljay5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UuZ2V0Q2FydENzdkV4YW1wbGUkKCkucGlwZShcbiAgICAgICAgICAgICAgICB0YXAoKGJsb2I6IEJsb2IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb3dubG9hZEV4YW1wbGVGaWxlKGJsb2IpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChudWxsKVxuICAgICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICBzaGFyZSgpLFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby11c2VsZXNzLXVuZGVmaW5lZFxuICAgICAgICBzdGFydFdpdGgodW5kZWZpbmVkKVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiDRgtC+0LPQviwg0YfRgtC+INC30LDQv9GA0L7RgSDQstGL0L/QvtC70L3Rj9C10YLRgdGPLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpc0Rvd25sb2FkTG9hZGluZzogU2lnbmFsPGJvb2xlYW4+ID0gdG9TaWduYWwodGhpcy5kb3dubG9hZFJlcXVlc3QkLnBpcGUobWFwKCh2YWx1ZSkgPT4gdmFsdWUgPT09IG51bGwpKSwge1xuICAgICAgICBpbml0aWFsVmFsdWU6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIFN1YmplY3R9INGB0L7QsdGL0YLQuNGPINC+0YLQv9GA0LDQstC60Lgg0YTQvtGA0LzRiy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgb25TdWJtaXQkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQt9Cw0L/RgNC+0YHQsCDQvdCwINC00L7QsdCw0LLQu9C10L3QuNC1INGC0L7QstCw0YDQvtCyINC40LcgQ1NWINGE0LDQudC70LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHN1Ym1pdFJlcXVlc3QkID0gdGhpcy5vblN1Ym1pdCQucGlwZShcbiAgICAgICAgbWFwKCgpID0+IHRoaXMuY29udHJvbC52YWx1ZSksXG4gICAgICAgIGZpbHRlcih0dWlJc1ByZXNlbnQpLFxuICAgICAgICBzd2l0Y2hNYXAoKGZpbGU6IEZpbGUpID0+IFNjRmlsZUhlbHBlci5yZWFkQXNVcGxvYWRlZEZpbGUkKGZpbGUpKSxcbiAgICAgICAgc3dpdGNoTWFwKChmaWxlKSA9PlxuICAgICAgICAgICAgdGhpcy5jYXJ0U2VydmljZS5hZGRQcm9kdWN0c0Zyb21Dc3YkKGZpbGUpLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5jb250ZXh0LiRpbXBsaWNpdC5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChudWxsKVxuICAgICAgICAgICAgKVxuICAgICAgICApXG4gICAgKTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6INGC0L7Qs9C+LCDRh9GC0L4g0LfQsNC/0YDQvtGBINC90LAg0LTQvtCx0LDQstC70LXQvdC40LUg0YLQvtCy0LDRgNC+0LIg0LLRi9C/0L7Qu9C90Y/QtdGC0YHRjy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXNTdWJtaXRMb2FkaW5nOiBTaWduYWw8Ym9vbGVhbj4gPSB0b1NpZ25hbCh0aGlzLnN1Ym1pdFJlcXVlc3QkLnBpcGUobWFwKCh2YWx1ZSkgPT4gdmFsdWUgPT09IG51bGwpKSwge1xuICAgICAgICBpbml0aWFsVmFsdWU6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICog0J/QvtC70LUg0LTQu9GPINC30LDQs9GA0YPQt9C60Lgg0YTQsNC50LvQsC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29udHJvbDogRm9ybUNvbnRyb2w8RmlsZSB8IG51bGw+ID0gbmV3IEZvcm1Db250cm9sPEZpbGUgfCBudWxsPihudWxsKTtcblxuICAgIC8qKlxuICAgICAqINCc0LXRgtC+0LQg0LTQu9GPINGD0LTQsNC70LXQvdC40Y8g0LfQsNCz0YDRg9C20LXQvdC90L7Qs9C+INGE0LDQudC70LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlbW92ZUZpbGUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuY29udHJvbC5zZXRWYWx1ZShudWxsKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQnNC10YLQvtC0INC00LvRjyDRgdC60LDRh9C40LLQsNC90LjRjyDQv9GA0LjQvNC10YDQsCDRhNCw0LnQu9CwLlxuICAgICAqXG4gICAgICogQHBhcmFtIGJsb2Ig0JHQuNC90LDRgNC90YvQuSDQvtCx0YrQtdC60YIuXG4gICAgICovXG4gICAgcHJpdmF0ZSBkb3dubG9hZEV4YW1wbGVGaWxlKGJsb2I6IEJsb2IpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdXJsID0gdGhpcy53aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcbiAgICAgICAgLy8g0LjRgdC/0L7Qu9GM0LfRg9C10Lwg0YHRgdGL0LvQutGDINC4IGRvd25sb2FkLCDRh9GC0L7QsdGLINGD0LrQsNC30LDRgtGMINC90LDQt9Cy0LDQvdC40LUg0YTQsNC50LvQsC5cbiAgICAgICAgY29uc3QgYSA9IHRoaXMud2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcblxuICAgICAgICBhLmhyZWYgPSB1cmw7XG4gICAgICAgIGEuZG93bmxvYWQgPSAn0J/RgNC40LzQtdGAINGE0LDQudC70LAg0LTQvtCx0LDQstC70LXQvdC40Y8g0YLQvtCy0LDRgNC+0LIg0LIg0LrQvtGA0LfQuNC90YMuY3N2JztcbiAgICAgICAgYS5jbGljaygpO1xuICAgICAgICB0aGlzLndpbmRvdy5VUkwucmV2b2tlT2JqZWN0VVJMKHVybCk7XG4gICAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIGdhcC04XCI+XG4gICAgPHR1aS1sb2FkZXJcbiAgICAgICAgW292ZXJsYXldPVwidHJ1ZVwiXG4gICAgICAgIFtzaG93TG9hZGVyXT1cImlzRG93bmxvYWRMb2FkaW5nKClcIlxuICAgICAgICBzaXplPVwic1wiXG4gICAgICAgIGNsYXNzPVwibXQtOFwiXG4gICAgPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0dWlMaW5rXG4gICAgICAgICAgICBbcHNldWRvXT1cInRydWVcIlxuICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25Eb3dubG9hZENsaWNrLm5leHQoKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgINCf0YDQuNC80LXRgCAuY3N2INGE0LDQudC70LBcbiAgICAgICAgPC9idXR0b24+XG4gICAgPC90dWktbG9hZGVyPlxuXG4gICAgPGRpdiBjbGFzcz1cImZsZXggdy1mdWxsIGZsZXgtY29sIGdhcC0xXCI+XG4gICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgdHVpSW5wdXRGaWxlc1xuICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGxcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICBhY2NlcHQ9XCJ0ZXh0L2NzdlwiXG4gICAgICAgICAgICAgICAgdHVpSW5wdXRGaWxlc1xuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJjb250cm9sXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIDwvbGFiZWw+XG5cbiAgICAgICAgPHR1aS1maWxlcyBjbGFzcz1cInR1aS1zcGFjZV90b3AtMVwiPlxuICAgICAgICAgICAgPHR1aS1maWxlXG4gICAgICAgICAgICAgICAgKm5nSWY9XCJjb250cm9sLnZhbHVlIGFzIGZpbGVcIlxuICAgICAgICAgICAgICAgIFtmaWxlXT1cImZpbGVcIlxuICAgICAgICAgICAgICAgIChyZW1vdmUpPVwicmVtb3ZlRmlsZSgpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIDwvdHVpLWZpbGVzPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IGdhcC0yXCI+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgIHR1aUJ1dHRvblxuICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFjb250cm9sLnZhbHVlXCJcbiAgICAgICAgICAgIFtsb2FkaW5nXT1cImlzU3VibWl0TG9hZGluZygpXCJcbiAgICAgICAgICAgIGljb25TdGFydD1cIkB0dWkuc2Muc2VuZFwiXG4gICAgICAgICAgICBjbGFzcz1cInNlbGYtY2VudGVyXCJcbiAgICAgICAgICAgIChjbGljayk9XCJvblN1Ym1pdCQubmV4dCgpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAg0JfQsNCz0YDRg9C30LjRgtGMXG4gICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0dWlCdXR0b25cbiAgICAgICAgICAgIChjbGljayk9XCJjb250ZXh0LiRpbXBsaWNpdC5jb21wbGV0ZSgpXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgYXBwZWFyYW5jZT1cInNlY29uZGFyeVwiXG4gICAgICAgID5cbiAgICAgICAgICAgINCe0YLQvNC10L3QsFxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
110
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtY2FydC1hZGQtcHJvZHVjdHMtZnJvbS1jc3YtZGlhbG9nLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9jYXJ0L3NjLWNhcnQtYWRkLXByb2R1Y3RzLWZyb20tY3N2LWRpYWxvZy9zYy1jYXJ0LWFkZC1wcm9kdWN0cy1mcm9tLWNzdi1kaWFsb2cuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhcnQvc2MtY2FydC1hZGQtcHJvZHVjdHMtZnJvbS1jc3YtZGlhbG9nL3NjLWNhcnQtYWRkLXByb2R1Y3RzLWZyb20tY3N2LWRpYWxvZy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDbkYsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUN2RSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxTQUFTLEVBQW9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNqRixPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNELE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzlELE9BQU8sRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sTUFBTSxDQUFDOzs7O0FBRTFGOztHQUVHO0FBUUgsTUFBTSxPQUFPLHVDQUF1QztJQVBwRDtRQVFJOztXQUVHO1FBQ2dCLFlBQU8sR0FBcUIsTUFBTSxDQUFtQixvQkFBb0IsQ0FBQyxDQUFDO1FBRTlGOztXQUVHO1FBQ2MsZ0JBQVcsR0FBa0IsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBRXBFOztXQUVHO1FBQ2MsV0FBTSxHQUErQixNQUFNLENBQTZCLFNBQVMsQ0FBQyxDQUFDO1FBRXBHOztXQUVHO1FBQ2dCLG9CQUFlLEdBQWtCLElBQUksT0FBTyxFQUFRLENBQUM7UUFFeEU7O1dBRUc7UUFDZ0IscUJBQWdCLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQzNELFNBQVMsQ0FBQyxHQUFHLEVBQUUsQ0FDWCxJQUFJLENBQUMsV0FBVyxDQUFDLGtCQUFrQixFQUFFLENBQUMsSUFBSSxDQUN0QyxHQUFHLENBQUMsQ0FBQyxJQUFVLEVBQUUsRUFBRTtZQUNmLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQyxDQUFDLENBQUMsRUFDRixTQUFTLENBQUMsSUFBSSxDQUFDLENBQ2xCLENBQ0osRUFDRCxLQUFLLEVBQUU7UUFDUCx3REFBd0Q7UUFDeEQsU0FBUyxDQUFDLFNBQVMsQ0FBQyxDQUN2QixDQUFDO1FBRUY7O1dBRUc7UUFDZ0Isc0JBQWlCLEdBQW9CLFFBQVEsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxDQUFDLEVBQUU7WUFDekgsWUFBWSxFQUFFLEtBQUs7U0FDdEIsQ0FBQyxDQUFDO1FBRUg7O1dBRUc7UUFDZ0IsY0FBUyxHQUFrQixJQUFJLE9BQU8sRUFBUSxDQUFDO1FBRWxFOztXQUVHO1FBQ2dCLG1CQUFjLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQ25ELEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUM3QixNQUFNLENBQUMsWUFBWSxDQUFDLEVBQ3BCLFNBQVMsQ0FDTCxDQUFDLElBQVUsRUFBRSxFQUFFLENBQ1gsSUFBSSxVQUFVLENBQWlCLENBQUMsUUFBUSxFQUFFLEVBQUU7WUFDeEMsTUFBTSxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUVoQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLEdBQUcsRUFBRTtnQkFDakMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFnQixDQUFDLENBQUMsQ0FBQztZQUMxRSxDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDbkMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QixDQUFDLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7WUFFM0IsT0FBTyxHQUFHLEVBQUU7Z0JBQ1IsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ25CLENBQUMsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUNULEVBQ0QsU0FBUyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDZixJQUFJLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FDM0MsR0FBRyxDQUFDLEdBQUcsRUFBRTtZQUNMLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3RDLENBQUMsQ0FBQyxFQUNGLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FDbEIsQ0FDSixDQUNKLENBQUM7UUFFRjs7V0FFRztRQUNnQixvQkFBZSxHQUFvQixRQUFRLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLENBQUMsRUFBRTtZQUNySCxZQUFZLEVBQUUsS0FBSztTQUN0QixDQUFDLENBQUM7UUFFSDs7V0FFRztRQUNnQixZQUFPLEdBQTZCLElBQUksV0FBVyxDQUFjLElBQUksQ0FBQyxDQUFDO0tBd0I3RjtJQXRCRzs7T0FFRztJQUNPLFVBQVU7UUFDaEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEMsQ0FBQztJQUVEOzs7O09BSUc7SUFDSyxtQkFBbUIsQ0FBQyxJQUFVO1FBQ2xDLE1BQU0sR0FBRyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNsRCw4REFBOEQ7UUFDOUQsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRWxELENBQUMsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDO1FBQ2IsQ0FBQyxDQUFDLFFBQVEsR0FBRywrQ0FBK0MsQ0FBQztRQUM3RCxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7UUFDVixJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDekMsQ0FBQzsrR0F2SFEsdUNBQXVDO21HQUF2Qyx1Q0FBdUMsZ0dDdEJwRCx5bkRBMERBLDRDRHZDYyxPQUFPLDRGQUFFLFNBQVMsK25CQUFZLG1CQUFtQiwwa0JBQUUsSUFBSSw2RkFBRSxTQUFTLG9JQUFFLGdCQUFnQjs7NEZBR3JGLHVDQUF1QztrQkFQbkQsU0FBUztpQ0FDTSxJQUFJLFlBQ04sc0NBQXNDLFdBRXZDLENBQUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsQ0FBQyxtQkFDOUUsdUJBQXVCLENBQUMsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5nSWYgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgaW5qZWN0LCBTaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHRvU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBXQV9XSU5ET1cgfSBmcm9tICdAbmctd2ViLWFwaXMvY29tbW9uJztcbmltcG9ydCB7IFNjQ2FydFNlcnZpY2UsIFNjVXBsb2FkZWRGaWxlIH0gZnJvbSAnQHNuYWJjZW50ci9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyB0dWlJc1ByZXNlbnQgfSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7IFR1aUJ1dHRvbiwgVHVpRGlhbG9nQ29udGV4dCwgVHVpTGluaywgVHVpTG9hZGVyIH0gZnJvbSAnQHRhaWdhLXVpL2NvcmUnO1xuaW1wb3J0IHsgVHVpQnV0dG9uTG9hZGluZywgVHVpRmlsZXMgfSBmcm9tICdAdGFpZ2EtdWkva2l0JztcbmltcG9ydCB7IFBPTFlNT1JQSEVVU19DT05URVhUIH0gZnJvbSAnQHRhaWdhLXVpL3BvbHltb3JwaGV1cyc7XG5pbXBvcnQgeyBmaWx0ZXIsIG1hcCwgT2JzZXJ2YWJsZSwgc2hhcmUsIHN0YXJ0V2l0aCwgU3ViamVjdCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzJztcblxuLyoqXG4gKiDQmtC+0LzQv9C+0L3QtdC90YIg0LTQuNCw0LvQvtCz0LAg0LTQu9GPINC00L7QsdCw0LLQu9C10L3QuNGPINGC0L7QstCw0YDQvtCyINCyINC60L7RgNC30LjQvdGDINC40LcgQ1NWINGE0LDQudC70LAuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdzYy1jYXJ0LWFkZC1wcm9kdWN0cy1mcm9tLWNzdi1kaWFsb2cnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zYy1jYXJ0LWFkZC1wcm9kdWN0cy1mcm9tLWNzdi1kaWFsb2cuY29tcG9uZW50Lmh0bWwnLFxuICAgIGltcG9ydHM6IFtUdWlMaW5rLCBUdWlMb2FkZXIsIFR1aUZpbGVzLCBSZWFjdGl2ZUZvcm1zTW9kdWxlLCBOZ0lmLCBUdWlCdXR0b24sIFR1aUJ1dHRvbkxvYWRpbmddLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY0NhcnRBZGRQcm9kdWN0c0Zyb21Dc3ZEaWFsb2dDb21wb25lbnQge1xuICAgIC8qKlxuICAgICAqINCa0L7QvdGC0LXQutGB0YIg0LTQuNCw0LvQvtCz0L7QstC+0LPQviDQvtC60L3QsCwg0LIg0LrQvtGC0L7RgNC+0Lwg0L7RgtC60YDRi9GCINC60L7QvNC/0L7QvdC10L3Rgi5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY29udGV4dDogVHVpRGlhbG9nQ29udGV4dCA9IGluamVjdDxUdWlEaWFsb2dDb250ZXh0PihQT0xZTU9SUEhFVVNfQ09OVEVYVCk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0LTQu9GPINGA0LDQsdC+0YLRiyDRgSDQutC+0YDQt9C40L3QvtC5LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgY2FydFNlcnZpY2U6IFNjQ2FydFNlcnZpY2UgPSBpbmplY3QoU2NDYXJ0U2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiDQntCx0YrQtdC60YIg0L7QutC90LAuXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSB3aW5kb3c6IFdpbmRvdyAmIHR5cGVvZiBnbG9iYWxUaGlzID0gaW5qZWN0PFdpbmRvdyAmIHR5cGVvZiBnbG9iYWxUaGlzPihXQV9XSU5ET1cpO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIFN1YmplY3R9INGB0L7QsdGL0YLQuNGPINGB0LrQsNGH0LjQstCw0L3QuNGPINGG0LXQvSDQutCw0YLQsNC70L7Qs9CwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBvbkRvd25sb2FkQ2xpY2s6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdDx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIE9ic2VydmFibGV9INC30LDQv9GA0L7RgdCwINC90LAg0YHQutCw0YfQuNCy0LDQvdC40LUg0YbQtdC9INC60LDRgtCw0LvQvtCz0LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGRvd25sb2FkUmVxdWVzdCQgPSB0aGlzLm9uRG93bmxvYWRDbGljay5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UuZ2V0Q2FydENzdkV4YW1wbGUkKCkucGlwZShcbiAgICAgICAgICAgICAgICB0YXAoKGJsb2I6IEJsb2IpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kb3dubG9hZEV4YW1wbGVGaWxlKGJsb2IpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHN0YXJ0V2l0aChudWxsKVxuICAgICAgICAgICAgKVxuICAgICAgICApLFxuICAgICAgICBzaGFyZSgpLFxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgdW5pY29ybi9uby11c2VsZXNzLXVuZGVmaW5lZFxuICAgICAgICBzdGFydFdpdGgodW5kZWZpbmVkKVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiDRgtC+0LPQviwg0YfRgtC+INC30LDQv9GA0L7RgSDQstGL0L/QvtC70L3Rj9C10YLRgdGPLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBpc0Rvd25sb2FkTG9hZGluZzogU2lnbmFsPGJvb2xlYW4+ID0gdG9TaWduYWwodGhpcy5kb3dubG9hZFJlcXVlc3QkLnBpcGUobWFwKCh2YWx1ZSkgPT4gdmFsdWUgPT09IG51bGwpKSwge1xuICAgICAgICBpbml0aWFsVmFsdWU6IGZhbHNlLFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICoge0BsaW5rIFN1YmplY3R9INGB0L7QsdGL0YLQuNGPINC+0YLQv9GA0LDQstC60Lgg0YTQvtGA0LzRiy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgb25TdWJtaXQkOiBTdWJqZWN0PHZvaWQ+ID0gbmV3IFN1YmplY3Q8dm9pZD4oKTtcblxuICAgIC8qKlxuICAgICAqIHtAbGluayBPYnNlcnZhYmxlfSDQt9Cw0L/RgNC+0YHQsCDQvdCwINC00L7QsdCw0LLQu9C10L3QuNC1INGC0L7QstCw0YDQvtCyINC40LcgQ1NWINGE0LDQudC70LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHN1Ym1pdFJlcXVlc3QkID0gdGhpcy5vblN1Ym1pdCQucGlwZShcbiAgICAgICAgbWFwKCgpID0+IHRoaXMuY29udHJvbC52YWx1ZSksXG4gICAgICAgIGZpbHRlcih0dWlJc1ByZXNlbnQpLFxuICAgICAgICBzd2l0Y2hNYXAoXG4gICAgICAgICAgICAoZmlsZTogRmlsZSkgPT5cbiAgICAgICAgICAgICAgICBuZXcgT2JzZXJ2YWJsZTxTY1VwbG9hZGVkRmlsZT4oKG9ic2VydmVyKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKCk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5uZXh0KG5ldyBTY1VwbG9hZGVkRmlsZShmaWxlLm5hbWUsIHJlYWRlci5yZXN1bHQgYXMgc3RyaW5nKSk7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgIHJlYWRlci5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsIChlKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvYnNlcnZlci5lcnJvcihlKTtcbiAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7XG5cbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlYWRlci5hYm9ydCgpO1xuICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICksXG4gICAgICAgIHN3aXRjaE1hcCgoZmlsZSkgPT5cbiAgICAgICAgICAgIHRoaXMuY2FydFNlcnZpY2UuYWRkUHJvZHVjdHNGcm9tQ3N2JChmaWxlKS5waXBlKFxuICAgICAgICAgICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29udGV4dC4kaW1wbGljaXQuY29tcGxldGUoKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBzdGFydFdpdGgobnVsbClcbiAgICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICk7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiDRgtC+0LPQviwg0YfRgtC+INC30LDQv9GA0L7RgSDQvdCwINC00L7QsdCw0LLQu9C10L3QuNC1INGC0L7QstCw0YDQvtCyINCy0YvQv9C+0LvQvdGP0LXRgtGB0Y8uXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGlzU3VibWl0TG9hZGluZzogU2lnbmFsPGJvb2xlYW4+ID0gdG9TaWduYWwodGhpcy5zdWJtaXRSZXF1ZXN0JC5waXBlKG1hcCgodmFsdWUpID0+IHZhbHVlID09PSBudWxsKSksIHtcbiAgICAgICAgaW5pdGlhbFZhbHVlOiBmYWxzZSxcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqINCf0L7Qu9C1INC00LvRjyDQt9Cw0LPRgNGD0LfQutC4INGE0LDQudC70LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNvbnRyb2w6IEZvcm1Db250cm9sPEZpbGUgfCBudWxsPiA9IG5ldyBGb3JtQ29udHJvbDxGaWxlIHwgbnVsbD4obnVsbCk7XG5cbiAgICAvKipcbiAgICAgKiDQnNC10YLQvtC0INC00LvRjyDRg9C00LDQu9C10L3QuNGPINC30LDQs9GA0YPQttC10L3QvdC+0LPQviDRhNCw0LnQu9CwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZW1vdmVGaWxlKCk6IHZvaWQge1xuICAgICAgICB0aGlzLmNvbnRyb2wuc2V0VmFsdWUobnVsbCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JzQtdGC0L7QtCDQtNC70Y8g0YHQutCw0YfQuNCy0LDQvdC40Y8g0L/RgNC40LzQtdGA0LAg0YTQsNC50LvQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBibG9iINCR0LjQvdCw0YDQvdGL0Lkg0L7QsdGK0LXQutGCLlxuICAgICAqL1xuICAgIHByaXZhdGUgZG93bmxvYWRFeGFtcGxlRmlsZShibG9iOiBCbG9iKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHVybCA9IHRoaXMud2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XG4gICAgICAgIC8vINC40YHQv9C+0LvRjNC30YPQtdC8INGB0YHRi9C70LrRgyDQuCBkb3dubG9hZCwg0YfRgtC+0LHRiyDRg9C60LDQt9Cw0YLRjCDQvdCw0LfQstCw0L3QuNC1INGE0LDQudC70LAuXG4gICAgICAgIGNvbnN0IGEgPSB0aGlzLndpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XG5cbiAgICAgICAgYS5ocmVmID0gdXJsO1xuICAgICAgICBhLmRvd25sb2FkID0gJ9Cf0YDQuNC80LXRgCDRhNCw0LnQu9CwINC00L7QsdCw0LLQu9C10L3QuNGPINGC0L7QstCw0YDQvtCyINCyINC60L7RgNC30LjQvdGDLmNzdic7XG4gICAgICAgIGEuY2xpY2soKTtcbiAgICAgICAgdGhpcy53aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWNlbnRlciBnYXAtOFwiPlxuICAgIDx0dWktbG9hZGVyXG4gICAgICAgIFtvdmVybGF5XT1cInRydWVcIlxuICAgICAgICBbc2hvd0xvYWRlcl09XCJpc0Rvd25sb2FkTG9hZGluZygpXCJcbiAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICBjbGFzcz1cIm10LThcIlxuICAgID5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHVpTGlua1xuICAgICAgICAgICAgW3BzZXVkb109XCJ0cnVlXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgKGNsaWNrKT1cIm9uRG93bmxvYWRDbGljay5uZXh0KClcIlxuICAgICAgICA+XG4gICAgICAgICAgICDQn9GA0LjQvNC10YAgLmNzdiDRhNCw0LnQu9CwXG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvdHVpLWxvYWRlcj5cblxuICAgIDxkaXYgY2xhc3M9XCJmbGV4IHctZnVsbCBmbGV4LWNvbCBnYXAtMVwiPlxuICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIHR1aUlucHV0RmlsZXNcbiAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgYWNjZXB0PVwidGV4dC9jc3ZcIlxuICAgICAgICAgICAgICAgIHR1aUlucHV0RmlsZXNcbiAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xdPVwiY29udHJvbFwiXG4gICAgICAgICAgICAvPlxuICAgICAgICA8L2xhYmVsPlxuXG4gICAgICAgIDx0dWktZmlsZXMgY2xhc3M9XCJ0dWktc3BhY2VfdG9wLTFcIj5cbiAgICAgICAgICAgIDx0dWktZmlsZVxuICAgICAgICAgICAgICAgICpuZ0lmPVwiY29udHJvbC52YWx1ZSBhcyBmaWxlXCJcbiAgICAgICAgICAgICAgICBbZmlsZV09XCJmaWxlXCJcbiAgICAgICAgICAgICAgICAocmVtb3ZlKT1cInJlbW92ZUZpbGUoKVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICA8L3R1aS1maWxlcz5cbiAgICA8L2Rpdj5cbiAgICA8ZGl2IGNsYXNzPVwiZmxleCBnYXAtMlwiPlxuICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICB0dWlCdXR0b25cbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhY29udHJvbC52YWx1ZVwiXG4gICAgICAgICAgICBbbG9hZGluZ109XCJpc1N1Ym1pdExvYWRpbmcoKVwiXG4gICAgICAgICAgICBpY29uU3RhcnQ9XCJAdHVpLnNjLnNlbmRcIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxmLWNlbnRlclwiXG4gICAgICAgICAgICAoY2xpY2spPVwib25TdWJtaXQkLm5leHQoKVwiXG4gICAgICAgID5cbiAgICAgICAgICAgINCX0LDQs9GA0YPQt9C40YLRjFxuICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgdHVpQnV0dG9uXG4gICAgICAgICAgICAoY2xpY2spPVwiY29udGV4dC4kaW1wbGljaXQuY29tcGxldGUoKVwiXG4gICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJzZWNvbmRhcnlcIlxuICAgICAgICA+XG4gICAgICAgICAgICDQntGC0LzQtdC90LBcbiAgICAgICAgPC9idXR0b24+XG4gICAgPC9kaXY+XG48L2Rpdj5cbiJdfQ==
@@ -3,7 +3,7 @@ import { CommonModule } from '@angular/common';
3
3
  import { ChangeDetectionStrategy, Component, EventEmitter, HostBinding, HostListener, Input, Output, ViewChild } from '@angular/core';
4
4
  import { FormsModule, ReactiveFormsModule } from '@angular/forms';
5
5
  import { RouterModule } from '@angular/router';
6
- import { TuiButton, TuiHint, TuiIcon, TuiLoader, TuiNumberFormat } from '@taiga-ui/core';
6
+ import { TuiButton, TuiHint, TuiIcon, TuiLoader } from '@taiga-ui/core';
7
7
  import { TuiFieldErrorPipe } from '@taiga-ui/kit';
8
8
  import { AbstractTuiNullableControl, TuiInputNumberComponent, TuiInputNumberModule, TuiIslandDirective, TuiTextfieldControllerModule } from '@taiga-ui/legacy';
9
9
  import { stepValidator } from '../../validators';
@@ -18,13 +18,6 @@ import * as i4 from "@taiga-ui/core";
18
18
  export class ScInputQuantityComponent extends AbstractTuiNullableControl {
19
19
  constructor() {
20
20
  super(...arguments);
21
- /**
22
- * Компонент поля ввода.
23
- */
24
- /**
25
- * Минимальное количество знаков после запятой.
26
- */
27
- this.minPrecision = 2;
28
21
  /**
29
22
  * Шаг увеличения количества. Отвечает за проверку кратности ввода.
30
23
  */
@@ -71,21 +64,6 @@ export class ScInputQuantityComponent extends AbstractTuiNullableControl {
71
64
  /**
72
65
  * Элемент формы ввода количества.
73
66
  */
74
- /**
75
- * Количество знаков после запятой: по шагу, но не меньше двух.
76
- */
77
- get precision() {
78
- return Math.max(this.minPrecision, (this.step.toString().split('.')[1] ?? '').length);
79
- }
80
- /**
81
- * Настройки формата числа поля. Точность задаётся только для шага с тремя и более знаками после запятой, иначе действует общая настройка.
82
- */
83
- get numberFormat() {
84
- if (this.numberFormatCache?.step !== this.step) {
85
- this.numberFormatCache = { step: this.step, format: this.precision > this.minPrecision ? { precision: this.precision, decimalMode: 'not-zero' } : {} };
86
- }
87
- return this.numberFormatCache.format;
88
- }
89
67
  get formControl() {
90
68
  return this.control;
91
69
  }
@@ -122,7 +100,7 @@ export class ScInputQuantityComponent extends AbstractTuiNullableControl {
122
100
  }
123
101
  const remainder = (((this.numberInput.value ?? 0) * 1000) % (this.step * 1000)) / 1000; // Умножаем и делим на 1000 чтобы решить ошибку IEEE‑754 при получении остатка от деления.
124
102
  const step = this.step - remainder;
125
- this.numberInput.value = Math.max(Number(((this.numberInput.value ?? 0) + step).toFixed(this.precision)), this.ignoreStepValidators ? 1 : Math.max(step, 0)); // Используем toFixed чтобы решить ошибку IEEE‑754 при сложении.
103
+ this.numberInput.value = Math.max(Number(((this.numberInput.value ?? 0) + step).toFixed(2)), this.ignoreStepValidators ? 1 : Math.max(step, 0)); // Используем toFixed чтобы решить ошибку IEEE‑754 при сложении.
126
104
  this.numberInput['nativeValue'] = this.numberInput['formattedValue'];
127
105
  // eslint-disable-next-line no-underscore-dangle, @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access
128
106
  if (checkUpdateOn && this.formControl?._updateOn === 'blur') {
@@ -140,7 +118,7 @@ export class ScInputQuantityComponent extends AbstractTuiNullableControl {
140
118
  }
141
119
  const remainder = (((this.numberInput.value ?? 0) * 1000) % (this.step * 1000)) / 1000; // Умножаем и делим на 1000 чтобы решить ошибку IEEE‑754 при получении остатка от деления.
142
120
  const step = -remainder || -this.step;
143
- this.numberInput.value = Math.max(Number(((this.numberInput.value ?? 0) + step).toFixed(this.precision)), this.ignoreStepValidators ? 1 : Math.max(step, 0)); // Используем toFixed чтобы решить ошибку IEEE‑754 при сложении.
121
+ this.numberInput.value = Math.max(Number(((this.numberInput.value ?? 0) + step).toFixed(2)), this.ignoreStepValidators ? 1 : Math.max(step, 0)); // Используем toFixed чтобы решить ошибку IEEE‑754 при сложении.
144
122
  this.numberInput['nativeValue'] = this.numberInput['formattedValue'];
145
123
  // eslint-disable-next-line no-underscore-dangle, @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-member-access
146
124
  if (checkUpdateOn && this.formControl?._updateOn === 'blur') {
@@ -155,7 +133,7 @@ export class ScInputQuantityComponent extends AbstractTuiNullableControl {
155
133
  this.clickClearEvent.emit();
156
134
  }
157
135
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScInputQuantityComponent, deps: null, target: i0.ɵɵFactoryTarget.Component }); }
158
- static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ScInputQuantityComponent, isStandalone: true, selector: "sc-input-quantity", inputs: { step: "step", showLoader: "showLoader", showCross: "showCross", ignoreStepValidators: "ignoreStepValidators", appearance: "appearance", isDisabled: "isDisabled", size: "size" }, outputs: { clickClearEvent: "clickClearEvent" }, host: { listeners: { "keydown.arrowDown": "onArrow(-step)", "keydown.arrowUp": "onArrow(step)" }, properties: { "attr.data-appearance": "this.appearance", "attr.data-disabled": "this.isDisabled", "attr.data-size": "this.size" } }, viewQueries: [{ propertyName: "numberInput", first: true, predicate: TuiInputNumberComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<tui-loader\n *ngIf=\"formControl\"\n class=\"w-full\"\n [overlay]=\"true\"\n [showLoader]=\"showLoader\"\n [size]=\"size\"\n>\n <div class=\"flex items-center gap-1 text-center\">\n <div class=\"field-with-button flex grow rounded-xl\">\n <button\n tuiIconButton\n [appearance]=\"appearance\"\n [size]=\"size\"\n [disabled]=\"!numberInput['canDecrement']\"\n (click.prevent)=\"decrement(true)\"\n >\n <tui-icon icon=\"@tui.minus\"></tui-icon>\n </button>\n <tui-input-number\n #numberInput\n [formControl]=\"formControl\"\n [tuiHint]=\"([] | tuiFieldError | async)?.message\"\n [tuiTextfieldLabelOutside]=\"true\"\n [min]=\"ignoreStepValidators ? 1 : step\"\n [tuiNumberFormat]=\"numberFormat\"\n [tuiTextfieldSize]=\"size\"\n [required]=\"true\"\n [style.text-align]=\"'center'\"\n [style.font-weight]=\"700\"\n (focusin)=\"$any($event.target).select()\"\n oncontextmenu=\"return false;\"\n (keydown.arrowDown)=\"(0)\"\n (keydown.arrowUp)=\"(0)\"\n class=\"grow\"\n >\n </tui-input-number>\n <button\n tuiIconButton\n [appearance]=\"appearance\"\n [size]=\"size\"\n [disabled]=\"!numberInput['canIncrement']\"\n (click.prevent)=\"incident(true)\"\n >\n <tui-icon icon=\"@tui.plus\"></tui-icon>\n </button>\n </div>\n <button\n *ngIf=\"showCross\"\n tuiIconButton\n appearance=\"secondary\"\n [size]=\"size\"\n [disabled]=\"!numberInput['canIncrement']\"\n (click.prevent)=\"clear()\"\n >\n <tui-icon icon=\"@tui.x\"></tui-icon>\n </button>\n </div>\n</tui-loader>\n", styles: [":host [data-size=l]{--tui-height-l: var(--tui-height-m);--tui-font-text-m: bold .875rem/1.25rem var(--tui-font-text);--tui-padding-l: 0}:host [data-size=m]{--tui-height-m: var(--tui-height-s);--tui-font-text-s: bold .75rem/1rem var(--tui-font-text);--tui-padding-m: 0}:host [data-size=m] tui-svg{font-size:12px!important}:host [data-size=s]{--tui-height-s: var(--tui-height-xs);--tui-font-text-s: bold .75rem/1rem var(--tui-font-text);--tui-padding-s: 0}:host [data-size=s] tui-svg{font-size:12px!important}:host[data-disabled=true]{pointer-events:none;opacity:var(--tui-disabled-opacity)}:host[data-appearance=secondary] .field-with-button{background-color:var(--tui-background-base);box-shadow:inset 0 0 0 .0625rem var(--tui-background-neutral-1-hover)}:host[data-appearance=primary] .field-with-button{background-color:var(--tui-status-warning-pale)}:host .field-with-button:has(._invalid){background-color:var(--tui-status-negative-pale)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: TuiIcon, selector: "tui-icon", inputs: ["icon", "background"] }, { kind: "ngmodule", type: TuiInputNumberModule }, { kind: "component", type: i2.TuiInputNumberComponent, selector: "tui-input-number", inputs: ["min", "max", "step"] }, { kind: "directive", type: i2.TuiInputNumberDirective, selector: "tui-input-number" }, { kind: "ngmodule", type: TuiTextfieldControllerModule }, { kind: "directive", type: i2.TuiTextfieldLabelOutsideDirective, selector: "[tuiTextfieldLabelOutside]", inputs: ["tuiTextfieldLabelOutside"] }, { kind: "directive", type: i2.TuiTextfieldSizeDirective, selector: "[tuiTextfieldSize]", inputs: ["tuiTextfieldSize"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.TuiHintDirective, selector: "[tuiHint]:not(ng-container):not(ng-template)", inputs: ["tuiHintContext", "tuiHintAppearance", "tuiHint"], outputs: ["tuiHintVisible"] }, { kind: "pipe", type: TuiFieldErrorPipe, name: "tuiFieldError" }, { kind: "component", type: TuiLoader, selector: "tui-loader", inputs: ["size", "inheritColor", "overlay", "textContent", "showLoader"] }, { kind: "directive", type: TuiNumberFormat, selector: "[tuiNumberFormat]", inputs: ["tuiNumberFormat"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
136
+ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.14", type: ScInputQuantityComponent, isStandalone: true, selector: "sc-input-quantity", inputs: { step: "step", showLoader: "showLoader", showCross: "showCross", ignoreStepValidators: "ignoreStepValidators", appearance: "appearance", isDisabled: "isDisabled", size: "size" }, outputs: { clickClearEvent: "clickClearEvent" }, host: { listeners: { "keydown.arrowDown": "onArrow(-step)", "keydown.arrowUp": "onArrow(step)" }, properties: { "attr.data-appearance": "this.appearance", "attr.data-disabled": "this.isDisabled", "attr.data-size": "this.size" } }, viewQueries: [{ propertyName: "numberInput", first: true, predicate: TuiInputNumberComponent, descendants: true }], usesInheritance: true, ngImport: i0, template: "<tui-loader\n *ngIf=\"formControl\"\n class=\"w-full\"\n [overlay]=\"true\"\n [showLoader]=\"showLoader\"\n [size]=\"size\"\n>\n <div class=\"flex items-center gap-1 text-center\">\n <div class=\"field-with-button flex grow rounded-xl\">\n <button\n tuiIconButton\n [appearance]=\"appearance\"\n [size]=\"size\"\n [disabled]=\"!numberInput['canDecrement']\"\n (click.prevent)=\"decrement(true)\"\n >\n <tui-icon icon=\"@tui.minus\"></tui-icon>\n </button>\n <tui-input-number\n #numberInput\n [formControl]=\"formControl\"\n [tuiHint]=\"([] | tuiFieldError | async)?.message\"\n [tuiTextfieldLabelOutside]=\"true\"\n [min]=\"ignoreStepValidators ? 1 : step\"\n [tuiTextfieldSize]=\"size\"\n [required]=\"true\"\n [style.text-align]=\"'center'\"\n [style.font-weight]=\"700\"\n (focusin)=\"$any($event.target).select()\"\n oncontextmenu=\"return false;\"\n (keydown.arrowDown)=\"(0)\"\n (keydown.arrowUp)=\"(0)\"\n class=\"grow\"\n >\n </tui-input-number>\n <button\n tuiIconButton\n [appearance]=\"appearance\"\n [size]=\"size\"\n [disabled]=\"!numberInput['canIncrement']\"\n (click.prevent)=\"incident(true)\"\n >\n <tui-icon icon=\"@tui.plus\"></tui-icon>\n </button>\n </div>\n <button\n *ngIf=\"showCross\"\n tuiIconButton\n appearance=\"secondary\"\n [size]=\"size\"\n [disabled]=\"!numberInput['canIncrement']\"\n (click.prevent)=\"clear()\"\n >\n <tui-icon icon=\"@tui.x\"></tui-icon>\n </button>\n </div>\n</tui-loader>\n", styles: [":host [data-size=l]{--tui-height-l: var(--tui-height-m);--tui-font-text-m: bold .875rem/1.25rem var(--tui-font-text);--tui-padding-l: 0}:host [data-size=m]{--tui-height-m: var(--tui-height-s);--tui-font-text-s: bold .75rem/1rem var(--tui-font-text);--tui-padding-m: 0}:host [data-size=m] tui-svg{font-size:12px!important}:host [data-size=s]{--tui-height-s: var(--tui-height-xs);--tui-font-text-s: bold .75rem/1rem var(--tui-font-text);--tui-padding-s: 0}:host [data-size=s] tui-svg{font-size:12px!important}:host[data-disabled=true]{pointer-events:none;opacity:var(--tui-disabled-opacity)}:host[data-appearance=secondary] .field-with-button{background-color:var(--tui-background-base);box-shadow:inset 0 0 0 .0625rem var(--tui-background-neutral-1-hover)}:host[data-appearance=primary] .field-with-button{background-color:var(--tui-status-warning-pale)}:host .field-with-button:has(._invalid){background-color:var(--tui-status-negative-pale)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "ngmodule", type: RouterModule }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: TuiIcon, selector: "tui-icon", inputs: ["icon", "background"] }, { kind: "ngmodule", type: TuiInputNumberModule }, { kind: "component", type: i2.TuiInputNumberComponent, selector: "tui-input-number", inputs: ["min", "max", "step"] }, { kind: "directive", type: i2.TuiInputNumberDirective, selector: "tui-input-number" }, { kind: "ngmodule", type: TuiTextfieldControllerModule }, { kind: "directive", type: i2.TuiTextfieldLabelOutsideDirective, selector: "[tuiTextfieldLabelOutside]", inputs: ["tuiTextfieldLabelOutside"] }, { kind: "directive", type: i2.TuiTextfieldSizeDirective, selector: "[tuiTextfieldSize]", inputs: ["tuiTextfieldSize"] }, { kind: "ngmodule", type: FormsModule }, { kind: "directive", type: i3.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i3.RequiredValidator, selector: ":not([type=checkbox])[required][formControlName],:not([type=checkbox])[required][formControl],:not([type=checkbox])[required][ngModel]", inputs: ["required"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i3.FormControlDirective, selector: "[formControl]", inputs: ["formControl", "disabled", "ngModel"], outputs: ["ngModelChange"], exportAs: ["ngForm"] }, { kind: "directive", type: i4.TuiHintDirective, selector: "[tuiHint]:not(ng-container):not(ng-template)", inputs: ["tuiHintContext", "tuiHintAppearance", "tuiHint"], outputs: ["tuiHintVisible"] }, { kind: "pipe", type: TuiFieldErrorPipe, name: "tuiFieldError" }, { kind: "component", type: TuiLoader, selector: "tui-loader", inputs: ["size", "inheritColor", "overlay", "textContent", "showLoader"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
159
137
  }
160
138
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScInputQuantityComponent, decorators: [{
161
139
  type: Component,
@@ -172,8 +150,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
172
150
  ...TuiHint,
173
151
  TuiFieldErrorPipe,
174
152
  TuiLoader,
175
- TuiNumberFormat,
176
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<tui-loader\n *ngIf=\"formControl\"\n class=\"w-full\"\n [overlay]=\"true\"\n [showLoader]=\"showLoader\"\n [size]=\"size\"\n>\n <div class=\"flex items-center gap-1 text-center\">\n <div class=\"field-with-button flex grow rounded-xl\">\n <button\n tuiIconButton\n [appearance]=\"appearance\"\n [size]=\"size\"\n [disabled]=\"!numberInput['canDecrement']\"\n (click.prevent)=\"decrement(true)\"\n >\n <tui-icon icon=\"@tui.minus\"></tui-icon>\n </button>\n <tui-input-number\n #numberInput\n [formControl]=\"formControl\"\n [tuiHint]=\"([] | tuiFieldError | async)?.message\"\n [tuiTextfieldLabelOutside]=\"true\"\n [min]=\"ignoreStepValidators ? 1 : step\"\n [tuiNumberFormat]=\"numberFormat\"\n [tuiTextfieldSize]=\"size\"\n [required]=\"true\"\n [style.text-align]=\"'center'\"\n [style.font-weight]=\"700\"\n (focusin)=\"$any($event.target).select()\"\n oncontextmenu=\"return false;\"\n (keydown.arrowDown)=\"(0)\"\n (keydown.arrowUp)=\"(0)\"\n class=\"grow\"\n >\n </tui-input-number>\n <button\n tuiIconButton\n [appearance]=\"appearance\"\n [size]=\"size\"\n [disabled]=\"!numberInput['canIncrement']\"\n (click.prevent)=\"incident(true)\"\n >\n <tui-icon icon=\"@tui.plus\"></tui-icon>\n </button>\n </div>\n <button\n *ngIf=\"showCross\"\n tuiIconButton\n appearance=\"secondary\"\n [size]=\"size\"\n [disabled]=\"!numberInput['canIncrement']\"\n (click.prevent)=\"clear()\"\n >\n <tui-icon icon=\"@tui.x\"></tui-icon>\n </button>\n </div>\n</tui-loader>\n", styles: [":host [data-size=l]{--tui-height-l: var(--tui-height-m);--tui-font-text-m: bold .875rem/1.25rem var(--tui-font-text);--tui-padding-l: 0}:host [data-size=m]{--tui-height-m: var(--tui-height-s);--tui-font-text-s: bold .75rem/1rem var(--tui-font-text);--tui-padding-m: 0}:host [data-size=m] tui-svg{font-size:12px!important}:host [data-size=s]{--tui-height-s: var(--tui-height-xs);--tui-font-text-s: bold .75rem/1rem var(--tui-font-text);--tui-padding-s: 0}:host [data-size=s] tui-svg{font-size:12px!important}:host[data-disabled=true]{pointer-events:none;opacity:var(--tui-disabled-opacity)}:host[data-appearance=secondary] .field-with-button{background-color:var(--tui-background-base);box-shadow:inset 0 0 0 .0625rem var(--tui-background-neutral-1-hover)}:host[data-appearance=primary] .field-with-button{background-color:var(--tui-status-warning-pale)}:host .field-with-button:has(._invalid){background-color:var(--tui-status-negative-pale)}\n"] }]
153
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<tui-loader\n *ngIf=\"formControl\"\n class=\"w-full\"\n [overlay]=\"true\"\n [showLoader]=\"showLoader\"\n [size]=\"size\"\n>\n <div class=\"flex items-center gap-1 text-center\">\n <div class=\"field-with-button flex grow rounded-xl\">\n <button\n tuiIconButton\n [appearance]=\"appearance\"\n [size]=\"size\"\n [disabled]=\"!numberInput['canDecrement']\"\n (click.prevent)=\"decrement(true)\"\n >\n <tui-icon icon=\"@tui.minus\"></tui-icon>\n </button>\n <tui-input-number\n #numberInput\n [formControl]=\"formControl\"\n [tuiHint]=\"([] | tuiFieldError | async)?.message\"\n [tuiTextfieldLabelOutside]=\"true\"\n [min]=\"ignoreStepValidators ? 1 : step\"\n [tuiTextfieldSize]=\"size\"\n [required]=\"true\"\n [style.text-align]=\"'center'\"\n [style.font-weight]=\"700\"\n (focusin)=\"$any($event.target).select()\"\n oncontextmenu=\"return false;\"\n (keydown.arrowDown)=\"(0)\"\n (keydown.arrowUp)=\"(0)\"\n class=\"grow\"\n >\n </tui-input-number>\n <button\n tuiIconButton\n [appearance]=\"appearance\"\n [size]=\"size\"\n [disabled]=\"!numberInput['canIncrement']\"\n (click.prevent)=\"incident(true)\"\n >\n <tui-icon icon=\"@tui.plus\"></tui-icon>\n </button>\n </div>\n <button\n *ngIf=\"showCross\"\n tuiIconButton\n appearance=\"secondary\"\n [size]=\"size\"\n [disabled]=\"!numberInput['canIncrement']\"\n (click.prevent)=\"clear()\"\n >\n <tui-icon icon=\"@tui.x\"></tui-icon>\n </button>\n </div>\n</tui-loader>\n", styles: [":host [data-size=l]{--tui-height-l: var(--tui-height-m);--tui-font-text-m: bold .875rem/1.25rem var(--tui-font-text);--tui-padding-l: 0}:host [data-size=m]{--tui-height-m: var(--tui-height-s);--tui-font-text-s: bold .75rem/1rem var(--tui-font-text);--tui-padding-m: 0}:host [data-size=m] tui-svg{font-size:12px!important}:host [data-size=s]{--tui-height-s: var(--tui-height-xs);--tui-font-text-s: bold .75rem/1rem var(--tui-font-text);--tui-padding-s: 0}:host [data-size=s] tui-svg{font-size:12px!important}:host[data-disabled=true]{pointer-events:none;opacity:var(--tui-disabled-opacity)}:host[data-appearance=secondary] .field-with-button{background-color:var(--tui-background-base);box-shadow:inset 0 0 0 .0625rem var(--tui-background-neutral-1-hover)}:host[data-appearance=primary] .field-with-button{background-color:var(--tui-status-warning-pale)}:host .field-with-button:has(._invalid){background-color:var(--tui-status-negative-pale)}\n"] }]
177
154
  }], propDecorators: { numberInput: [{
178
155
  type: ViewChild,
179
156
  args: [TuiInputNumberComponent]
@@ -209,4 +186,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
209
186
  type: HostListener,
210
187
  args: ['keydown.arrowUp', ['step']]
211
188
  }] } });
212
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtaW5wdXQtcXVhbnRpdHkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhdGFsb2cvaW5wdXQtcXVhbnRpdHkvc2MtaW5wdXQtcXVhbnRpdHkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhdGFsb2cvaW5wdXQtcXVhbnRpdHkvc2MtaW5wdXQtcXVhbnRpdHkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0RBQW9EO0FBRXBELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlJLE9BQU8sRUFBZSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxlQUFlLEVBQStDLE1BQU0sZ0JBQWdCLENBQUM7QUFDdEksT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2xELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSx1QkFBdUIsRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSw0QkFBNEIsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRS9KLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7Ozs7O0FBRWpEOztHQUVHO0FBdUJILE1BQU0sT0FBTyx3QkFBeUIsU0FBUSwwQkFBa0M7SUF0QmhGOztRQXVCSTs7V0FFRztRQUNIOztXQUVHO1FBQ2MsaUJBQVksR0FBRyxDQUFDLENBQUM7UUFVbEM7O1dBRUc7UUFFSSxTQUFJLEdBQVcsQ0FBQyxDQUFDO1FBRXhCOztXQUVHO1FBRUksZUFBVSxHQUFZLEtBQUssQ0FBQztRQUVuQzs7V0FFRztRQUVJLGNBQVMsR0FBWSxJQUFJLENBQUM7UUFFakM7O1dBRUc7UUFFSSx5QkFBb0IsR0FBWSxLQUFLLENBQUM7UUFFN0M7O1dBRUc7UUFHSSxlQUFVLEdBQTRCLFNBQVMsQ0FBQztRQUV2RDs7V0FFRztRQUdJLGVBQVUsR0FBWSxLQUFLLENBQUM7UUFFbkM7O1dBRUc7UUFHSSxTQUFJLEdBQXdCLEdBQUcsQ0FBQztRQUV2Qzs7V0FFRztRQUVJLG9CQUFlLEdBQXVCLElBQUksWUFBWSxFQUFRLENBQUM7S0FrSHpFO0lBaEhHOztPQUVHO0lBQ0gsSUFBVyxzQkFBc0I7UUFDN0IsT0FBTyxJQUFJLENBQUMsV0FBVyxFQUFFLHNCQUFzQixDQUFDO0lBQ3BELENBQUM7SUFFRCxrQkFBa0I7SUFDbEIsSUFBVyxPQUFPO1FBQ2QsT0FBTyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxPQUFPLENBQUM7SUFDdkMsQ0FBQztJQUVEOztPQUVHO0lBQ0g7O09BRUc7SUFDSCxJQUFXLFNBQVM7UUFDaEIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUMxRixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLFlBQVk7UUFDbkIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUUsSUFBSSxLQUFLLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUM3QyxJQUFJLENBQUMsaUJBQWlCLEdBQUcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUyxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDM0osQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sQ0FBQztJQUN6QyxDQUFDO0lBRUQsSUFBVyxXQUFXO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE9BQTZCLENBQUM7SUFDOUMsQ0FBQztJQUVELGtCQUFrQjtJQUNGLFFBQVE7UUFDcEIsSUFBSSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ3pGLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUdJLE9BQU8sQ0FBQyxJQUFtQjtRQUM5QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDUixPQUFPO1FBQ1gsQ0FBQztRQUVELElBQUksSUFBSSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO1FBQ3BCLENBQUM7YUFBTSxDQUFDO1lBQ0osSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO1FBQ3JCLENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFFBQVEsQ0FBQyxhQUFhLEdBQUcsS0FBSztRQUNqQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3BCLE9BQU87UUFDWCxDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsMEZBQTBGO1FBQ2xMLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsU0FBUyxDQUFDO1FBQ25DLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxnRUFBZ0U7UUFDOU4sSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFFckUsZ0lBQWdJO1FBQ2hJLElBQUksYUFBYSxJQUFLLElBQUksQ0FBQyxXQUFtQixFQUFFLFNBQVMsS0FBSyxNQUFNLEVBQUUsQ0FBQztZQUNuRSxJQUFJLENBQUMsT0FBTyxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ25ELENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNJLFNBQVMsQ0FBQyxhQUFhLEdBQUcsS0FBSztRQUNsQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3BCLE9BQU87UUFDWCxDQUFDO1FBRUQsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsMEZBQTBGO1FBQ2xMLE1BQU0sSUFBSSxHQUFHLENBQUMsU0FBUyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQztRQUN0QyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZ0VBQWdFO1FBQzlOLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1FBRXJFLGdJQUFnSTtRQUNoSSxJQUFJLGFBQWEsSUFBSyxJQUFJLENBQUMsV0FBbUIsRUFBRSxTQUFTLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDbkUsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRCxDQUFDO0lBQ0wsQ0FBQztJQUVEOztPQUVHO0lBQ0ksS0FBSztRQUNSLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9CLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDaEMsQ0FBQzsrR0FuTFEsd0JBQXdCO21HQUF4Qix3QkFBd0IsOGtCQWN0Qix1QkFBdUIsdUVDbkR0QywwakVBMERBLHkrQkRyQ1EsWUFBWSx1TEFDWixZQUFZLCtCQUNaLFNBQVMsb0lBQ1QsT0FBTyxvRkFFUCxvQkFBb0IsNE9BQ3BCLDRCQUE0Qix3U0FDNUIsV0FBVyxtV0FDWCxtQkFBbUIsa1pBRW5CLGlCQUFpQixzREFDakIsU0FBUyxpSUFDVCxlQUFlOzs0RkFJVix3QkFBd0I7a0JBdEJwQyxTQUFTO2lDQUNNLElBQUksWUFDTixtQkFBbUIsV0FHcEI7d0JBQ0wsWUFBWTt3QkFDWixZQUFZO3dCQUNaLFNBQVM7d0JBQ1QsT0FBTzt3QkFDUCxrQkFBa0I7d0JBQ2xCLG9CQUFvQjt3QkFDcEIsNEJBQTRCO3dCQUM1QixXQUFXO3dCQUNYLG1CQUFtQjt3QkFDbkIsR0FBRyxPQUFPO3dCQUNWLGlCQUFpQjt3QkFDakIsU0FBUzt3QkFDVCxlQUFlO3FCQUNsQixtQkFDZ0IsdUJBQXVCLENBQUMsTUFBTTs4QkFpQjlCLFdBQVc7c0JBRDNCLFNBQVM7dUJBQUMsdUJBQXVCO2dCQU8zQixJQUFJO3NCQURWLEtBQUs7Z0JBT0MsVUFBVTtzQkFEaEIsS0FBSztnQkFPQyxTQUFTO3NCQURmLEtBQUs7Z0JBT0Msb0JBQW9CO3NCQUQxQixLQUFLO2dCQVFDLFVBQVU7c0JBRmhCLEtBQUs7O3NCQUNMLFdBQVc7dUJBQUMsc0JBQXNCO2dCQVE1QixVQUFVO3NCQUZoQixLQUFLOztzQkFDTCxXQUFXO3VCQUFDLG9CQUFvQjtnQkFRMUIsSUFBSTtzQkFGVixLQUFLOztzQkFDTCxXQUFXO3VCQUFDLGdCQUFnQjtnQkFPdEIsZUFBZTtzQkFEckIsTUFBTTtnQkFzREEsT0FBTztzQkFGYixZQUFZO3VCQUFDLG1CQUFtQixFQUFFLENBQUMsT0FBTyxDQUFDOztzQkFDM0MsWUFBWTt1QkFBQyxpQkFBaUIsRUFBRSxDQUFDLE1BQU0sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIEB0eXBlc2NyaXB0LWVzbGludC9kb3Qtbm90YXRpb24gKi9cblxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IENoYW5nZURldGVjdGlvblN0cmF0ZWd5LCBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgSG9zdEJpbmRpbmcsIEhvc3RMaXN0ZW5lciwgSW5wdXQsIE9uSW5pdCwgT3V0cHV0LCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFJvdXRlck1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5pbXBvcnQgeyBUdWlCdXR0b24sIFR1aUhpbnQsIFR1aUljb24sIFR1aUxvYWRlciwgVHVpTnVtYmVyRm9ybWF0LCBUdWlOdW1iZXJGb3JtYXRTZXR0aW5ncywgVHVpU2l6ZUwsIFR1aVNpemVTIH0gZnJvbSAnQHRhaWdhLXVpL2NvcmUnO1xuaW1wb3J0IHsgVHVpRmllbGRFcnJvclBpcGUgfSBmcm9tICdAdGFpZ2EtdWkva2l0JztcbmltcG9ydCB7IEFic3RyYWN0VHVpTnVsbGFibGVDb250cm9sLCBUdWlJbnB1dE51bWJlckNvbXBvbmVudCwgVHVpSW5wdXROdW1iZXJNb2R1bGUsIFR1aUlzbGFuZERpcmVjdGl2ZSwgVHVpVGV4dGZpZWxkQ29udHJvbGxlck1vZHVsZSB9IGZyb20gJ0B0YWlnYS11aS9sZWdhY3knO1xuXG5pbXBvcnQgeyBzdGVwVmFsaWRhdG9yIH0gZnJvbSAnLi4vLi4vdmFsaWRhdG9ycyc7XG5cbi8qKlxuICog0JrQvtC80L/QvtC90LXQvdGCINC/0L7Qu9GPINCy0LLQvtC00LAg0LrQvtC70LjRh9C10YHRgtCy0LAuXG4gKi9cbkBDb21wb25lbnQoe1xuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgc2VsZWN0b3I6ICdzYy1pbnB1dC1xdWFudGl0eScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NjLWlucHV0LXF1YW50aXR5LmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybDogJy4vc2MtaW5wdXQtcXVhbnRpdHkuY29tcG9uZW50LnNjc3MnLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQ29tbW9uTW9kdWxlLFxuICAgICAgICBSb3V0ZXJNb2R1bGUsXG4gICAgICAgIFR1aUJ1dHRvbixcbiAgICAgICAgVHVpSWNvbixcbiAgICAgICAgVHVpSXNsYW5kRGlyZWN0aXZlLFxuICAgICAgICBUdWlJbnB1dE51bWJlck1vZHVsZSxcbiAgICAgICAgVHVpVGV4dGZpZWxkQ29udHJvbGxlck1vZHVsZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIC4uLlR1aUhpbnQsXG4gICAgICAgIFR1aUZpZWxkRXJyb3JQaXBlLFxuICAgICAgICBUdWlMb2FkZXIsXG4gICAgICAgIFR1aU51bWJlckZvcm1hdCxcbiAgICBdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY0lucHV0UXVhbnRpdHlDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdFR1aU51bGxhYmxlQ29udHJvbDxudW1iZXI+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvKipcbiAgICAgKiDQmtC+0LzQv9C+0L3QtdC90YIg0L/QvtC70Y8g0LLQstC+0LTQsC5cbiAgICAgKi9cbiAgICAvKipcbiAgICAgKiDQnNC40L3QuNC80LDQu9GM0L3QvtC1INC60L7Qu9C40YfQtdGB0YLQstC+INC30L3QsNC60L7QsiDQv9C+0YHQu9C1INC30LDQv9GP0YLQvtC5LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbWluUHJlY2lzaW9uID0gMjtcblxuICAgIC8qKlxuICAgICAqINCd0LDRgdGC0YDQvtC50LrQuCDRhNC+0YDQvNCw0YLQsCDRh9C40YHQu9CwINC00LvRjyDRgtC10LrRg9GJ0LXQs9C+INGI0LDQs9CwLiDQpdGA0LDQvdGP0YLRgdGPLCDRh9GC0L7QsdGLINC/0L7Qu9C1INC/0L7Qu9GD0YfQsNC70L4g0YLQvtGCINC20LUg0L7QsdGK0LXQutGCINC/0YDQuCDQutCw0LbQtNC+0Lkg0L/RgNC+0LLQtdGA0LrQtSDQuNC30LzQtdC90LXQvdC40LkuXG4gICAgICovXG4gICAgcHJpdmF0ZSBudW1iZXJGb3JtYXRDYWNoZT86IHsgc3RlcDogbnVtYmVyOyBmb3JtYXQ6IFBhcnRpYWw8VHVpTnVtYmVyRm9ybWF0U2V0dGluZ3M+IH07XG5cbiAgICBAVmlld0NoaWxkKFR1aUlucHV0TnVtYmVyQ29tcG9uZW50KVxuICAgIHByaXZhdGUgcmVhZG9ubHkgbnVtYmVySW5wdXQ/OiBUdWlJbnB1dE51bWJlckNvbXBvbmVudDtcblxuICAgIC8qKlxuICAgICAqINCo0LDQsyDRg9Cy0LXQu9C40YfQtdC90LjRjyDQutC+0LvQuNGH0LXRgdGC0LLQsC4g0J7RgtCy0LXRh9Cw0LXRgiDQt9CwINC/0YDQvtCy0LXRgNC60YMg0LrRgNCw0YLQvdC+0YHRgtC4INCy0LLQvtC00LAuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc3RlcDogbnVtYmVyID0gMTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0L3QtdC+0LHRhdC+0LTQuNC80L4g0L7RgtC+0LHRgNCw0LfQuNGC0Ywge0BsaW5rIFR1aUxvYWRlckNvbXBvbmVudH0g0L3QsNC0INC60L7QvNC/0L7QvdC10L3RgtC+0LwuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2hvd0xvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0LosINGH0YLQviDQvdC10L7QsdGF0L7QtNC40LzQviDQvtGC0L7QsdGA0LDQt9C40YLRjCDQutC90L7Qv9C60YMg0L7Rh9C40YHRgtC60Lgg0L/QvtC70Y8g0LLQstC+0LTQsC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzaG93Q3Jvc3M6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0LosINGH0YLQviDQvdC10L7QsdGF0L7QtNC40LzQviDQuNCz0L3QvtGA0LjRgNC+0LLQsNGC0Ywg0LLQsNC70LjQtNCw0YbQuNGOINC60YDQsNGC0L3QvtGB0YLQuCDQuCDQvNC40L3QuNC80LDQu9GM0L3QvtCz0L4g0LrQvtC70LjRh9C10YHRgtCy0LAuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaWdub3JlU3RlcFZhbGlkYXRvcnM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqINCk0L7RgNC80LDRgiDQstC90LXRiNC90LXQs9C+INCy0LjQtNCwINC60L7QvNC/0L7QvdC10L3RgtCwLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtYXBwZWFyYW5jZScpXG4gICAgcHVibGljIGFwcGVhcmFuY2U6ICdwcmltYXJ5JyB8ICdzZWNvbmRhcnknID0gJ3ByaW1hcnknO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0LosINGH0YLQviDQutC+0LzQv9C+0L3QtdC90YIg0LTQtdCw0LrRgtC40LLQuNGA0L7QstCw0L0uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1kaXNhYmxlZCcpXG4gICAgcHVibGljIGlzRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqINCg0LDQt9C80LXRgCDQutC+0LzQv9C+0L3QtdC90YLQsC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXNpemUnKVxuICAgIHB1YmxpYyBzaXplOiBUdWlTaXplTCB8IFR1aVNpemVTID0gJ20nO1xuXG4gICAgLyoqXG4gICAgICog0KHQvtCx0YvRgtC40LUg0L3QsNC20LDRgtC40Y8g0L3QsCDQutC90L7Qv9C60YMgXCLQntGH0LjRgdGC0LjRgtGMXCIuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGNsaWNrQ2xlYXJFdmVudDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIg0Y3Qu9C10LzQtdC90YIsINC60L7RgtC+0YDRi9C5INC80L7QttC10YIg0LHRi9GC0Ywg0YHRhNC+0LrRg9GB0LjRgNC+0LLQsNC9LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgbmF0aXZlRm9jdXNhYmxlRWxlbWVudCgpOiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLm51bWJlcklucHV0Py5uYXRpdmVGb2N1c2FibGVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKiBAaW5oZXJpdERvYyAqL1xuICAgIHB1YmxpYyBnZXQgZm9jdXNlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5udW1iZXJJbnB1dD8uZm9jdXNlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQrdC70LXQvNC10L3RgiDRhNC+0YDQvNGLINCy0LLQvtC00LAg0LrQvtC70LjRh9C10YHRgtCy0LAuXG4gICAgICovXG4gICAgLyoqXG4gICAgICog0JrQvtC70LjRh9C10YHRgtCy0L4g0LfQvdCw0LrQvtCyINC/0L7RgdC70LUg0LfQsNC/0Y/RgtC+0Lk6INC/0L4g0YjQsNCz0YMsINC90L4g0L3QtSDQvNC10L3RjNGI0LUg0LTQstGD0YUuXG4gICAgICovXG4gICAgcHVibGljIGdldCBwcmVjaXNpb24oKTogbnVtYmVyIHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMubWluUHJlY2lzaW9uLCAodGhpcy5zdGVwLnRvU3RyaW5nKCkuc3BsaXQoJy4nKVsxXSA/PyAnJykubGVuZ3RoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQndCw0YHRgtGA0L7QudC60Lgg0YTQvtGA0LzQsNGC0LAg0YfQuNGB0LvQsCDQv9C+0LvRjy4g0KLQvtGH0L3QvtGB0YLRjCDQt9Cw0LTQsNGR0YLRgdGPINGC0L7Qu9GM0LrQviDQtNC70Y8g0YjQsNCz0LAg0YEg0YLRgNC10LzRjyDQuCDQsdC+0LvQtdC1INC30L3QsNC60LDQvNC4INC/0L7RgdC70LUg0LfQsNC/0Y/RgtC+0LksINC40L3QsNGH0LUg0LTQtdC50YHRgtCy0YPQtdGCINC+0LHRidCw0Y8g0L3QsNGB0YLRgNC+0LnQutCwLlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgbnVtYmVyRm9ybWF0KCk6IFBhcnRpYWw8VHVpTnVtYmVyRm9ybWF0U2V0dGluZ3M+IHtcbiAgICAgICAgaWYgKHRoaXMubnVtYmVyRm9ybWF0Q2FjaGU/LnN0ZXAgIT09IHRoaXMuc3RlcCkge1xuICAgICAgICAgICAgdGhpcy5udW1iZXJGb3JtYXRDYWNoZSA9IHsgc3RlcDogdGhpcy5zdGVwLCBmb3JtYXQ6IHRoaXMucHJlY2lzaW9uID4gdGhpcy5taW5QcmVjaXNpb24gPyB7IHByZWNpc2lvbjogdGhpcy5wcmVjaXNpb24sIGRlY2ltYWxNb2RlOiAnbm90LXplcm8nIH0gOiB7fSB9O1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubnVtYmVyRm9ybWF0Q2FjaGUuZm9ybWF0O1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXQgZm9ybUNvbnRyb2woKTogRm9ybUNvbnRyb2wgfCBudWxsIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29udHJvbCBhcyBGb3JtQ29udHJvbCB8IG51bGw7XG4gICAgfVxuXG4gICAgLyoqIEBpbmhlcml0RG9jICovXG4gICAgcHVibGljIG92ZXJyaWRlIG5nT25Jbml0KCk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5jb250cm9sKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2wuc2V0VmFsaWRhdG9ycyhzdGVwVmFsaWRhdG9yKHRoaXMuaWdub3JlU3RlcFZhbGlkYXRvcnMgPyAxIDogdGhpcy5zdGVwKSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0YDQsNCx0L7RgtGH0LjQuiDRgdC+0LHRi9GC0LjRjyDQvdCw0LbQsNGC0LjRjyDRgdGC0YDQtdC70L7QuiDQutC70LDQstC40LDRgtGD0YDRiy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBzdGVwINCo0LDQsyDQuNC30LzQtdC90LXQvdC40Y8g0LrQvtC70LjRh9C10YHRgtCy0LAuXG4gICAgICovXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd0Rvd24nLCBbJy1zdGVwJ10pXG4gICAgQEhvc3RMaXN0ZW5lcigna2V5ZG93bi5hcnJvd1VwJywgWydzdGVwJ10pXG4gICAgcHVibGljIG9uQXJyb3coc3RlcDogbnVtYmVyIHwgbnVsbCk6IHZvaWQge1xuICAgICAgICBpZiAoIXN0ZXApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGVwID4gMCkge1xuICAgICAgICAgICAgdGhpcy5pbmNpZGVudCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5kZWNyZW1lbnQoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0LLQtdC70LjRh9C40LLQsNC10YIg0LfQvdCw0YfQtdC90LjQtSDQsiDQv9C+0LvQtSDQstCy0L7QtNCwINC90LAgMSDRiNCw0LMuINCV0YHQu9C4INGH0LjRgdC70L4g0LIg0L/QvtC70LUg0LLQstC+0LTQsCDQvdC1INC60YDQsNGC0L3QviDRiNCw0LPRgywg0YLQviDRg9Cy0LXQu9C40YfQuNGCINC00L4g0LHQu9C40LbQsNC50YjQtdCz0L4g0LrRgNCw0YLQvdC+0LPQviDQt9C90LDRh9C10L3QuNGPLlxuICAgICAqXG4gICAgICogQHBhcmFtIGNoZWNrVXBkYXRlT24g0J/RgNC40LfQvdCw0LosINGH0YLQviDQvdGD0LbQvdC+INC/0YDQvtCy0LXRgNC40YLRjCBgdXBkYXRlT25gINGB0LLQvtC50YHRgtCy0L4gYGZvcm1Db250cm9sYC5cbiAgICAgKi9cbiAgICBwdWJsaWMgaW5jaWRlbnQoY2hlY2tVcGRhdGVPbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5udW1iZXJJbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVtYWluZGVyID0gKCgodGhpcy5udW1iZXJJbnB1dC52YWx1ZSA/PyAwKSAqIDEwMDApICUgKHRoaXMuc3RlcCAqIDEwMDApKSAvIDEwMDA7IC8vINCj0LzQvdC+0LbQsNC10Lwg0Lgg0LTQtdC70LjQvCDQvdCwIDEwMDAg0YfRgtC+0LHRiyDRgNC10YjQuNGC0Ywg0L7RiNC40LHQutGDIElFRUXigJE3NTQg0L/RgNC4INC/0L7Qu9GD0YfQtdC90LjQuCDQvtGB0YLQsNGC0LrQsCDQvtGCINC00LXQu9C10L3QuNGPLlxuICAgICAgICBjb25zdCBzdGVwID0gdGhpcy5zdGVwIC0gcmVtYWluZGVyO1xuICAgICAgICB0aGlzLm51bWJlcklucHV0LnZhbHVlID0gTWF0aC5tYXgoTnVtYmVyKCgodGhpcy5udW1iZXJJbnB1dC52YWx1ZSA/PyAwKSArIHN0ZXApLnRvRml4ZWQodGhpcy5wcmVjaXNpb24pKSwgdGhpcy5pZ25vcmVTdGVwVmFsaWRhdG9ycyA/IDEgOiBNYXRoLm1heChzdGVwLCAwKSk7IC8vINCY0YHQv9C+0LvRjNC30YPQtdC8IHRvRml4ZWQg0YfRgtC+0LHRiyDRgNC10YjQuNGC0Ywg0L7RiNC40LHQutGDIElFRUXigJE3NTQg0L/RgNC4INGB0LvQvtC20LXQvdC40LguXG4gICAgICAgIHRoaXMubnVtYmVySW5wdXRbJ25hdGl2ZVZhbHVlJ10gPSB0aGlzLm51bWJlcklucHV0Wydmb3JtYXR0ZWRWYWx1ZSddO1xuXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bmRlcnNjb3JlLWRhbmdsZSwgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueSwgQHR5cGVzY3JpcHQtZXNsaW50L25vLXVuc2FmZS1tZW1iZXItYWNjZXNzXG4gICAgICAgIGlmIChjaGVja1VwZGF0ZU9uICYmICh0aGlzLmZvcm1Db250cm9sIGFzIGFueSk/Ll91cGRhdGVPbiA9PT0gJ2JsdXInKSB7XG4gICAgICAgICAgICB0aGlzLmNvbnRyb2w/LnNldFZhbHVlKHRoaXMubnVtYmVySW5wdXQudmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KPQvNC10L3RjNGI0LDQtdGCINC30L3QsNGH0LXQvdC40LUg0LIg0L/QvtC70LUg0LLQstC+0LTQsCDQvdCwIDEg0YjQsNCzLiDQldGB0LvQuCDRh9C40YHQu9C+INCyINC/0L7Qu9C1INCy0LLQvtC00LAg0L3QtSDQutGA0LDRgtC90L4g0YjQsNCz0YMsINGC0L4g0YPQvNC10L3RjNGI0LjRgiDQtNC+INCx0LvQuNC20LDQudGI0LXQs9C+INC60YDQsNGC0L3QvtCz0L4g0LfQvdCw0YfQtdC90LjRjy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBjaGVja1VwZGF0ZU9uINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0L3Rg9C20L3QviDQv9GA0L7QstC10YDQuNGC0YwgYHVwZGF0ZU9uYCDRgdCy0L7QudGB0YLQstC+IGBmb3JtQ29udHJvbGAuXG4gICAgICovXG4gICAgcHVibGljIGRlY3JlbWVudChjaGVja1VwZGF0ZU9uID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLm51bWJlcklucHV0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZW1haW5kZXIgPSAoKCh0aGlzLm51bWJlcklucHV0LnZhbHVlID8/IDApICogMTAwMCkgJSAodGhpcy5zdGVwICogMTAwMCkpIC8gMTAwMDsgLy8g0KPQvNC90L7QttCw0LXQvCDQuCDQtNC10LvQuNC8INC90LAgMTAwMCDRh9GC0L7QsdGLINGA0LXRiNC40YLRjCDQvtGI0LjQsdC60YMgSUVFReKAkTc1NCDQv9GA0Lgg0L/QvtC70YPRh9C10L3QuNC4INC+0YHRgtCw0YLQutCwINC+0YIg0LTQtdC70LXQvdC40Y8uXG4gICAgICAgIGNvbnN0IHN0ZXAgPSAtcmVtYWluZGVyIHx8IC10aGlzLnN0ZXA7XG4gICAgICAgIHRoaXMubnVtYmVySW5wdXQudmFsdWUgPSBNYXRoLm1heChOdW1iZXIoKCh0aGlzLm51bWJlcklucHV0LnZhbHVlID8/IDApICsgc3RlcCkudG9GaXhlZCh0aGlzLnByZWNpc2lvbikpLCB0aGlzLmlnbm9yZVN0ZXBWYWxpZGF0b3JzID8gMSA6IE1hdGgubWF4KHN0ZXAsIDApKTsgLy8g0JjRgdC/0L7Qu9GM0LfRg9C10LwgdG9GaXhlZCDRh9GC0L7QsdGLINGA0LXRiNC40YLRjCDQvtGI0LjQsdC60YMgSUVFReKAkTc1NCDQv9GA0Lgg0YHQu9C+0LbQtdC90LjQuC5cbiAgICAgICAgdGhpcy5udW1iZXJJbnB1dFsnbmF0aXZlVmFsdWUnXSA9IHRoaXMubnVtYmVySW5wdXRbJ2Zvcm1hdHRlZFZhbHVlJ107XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVyc2NvcmUtZGFuZ2xlLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgICAgaWYgKGNoZWNrVXBkYXRlT24gJiYgKHRoaXMuZm9ybUNvbnRyb2wgYXMgYW55KT8uX3VwZGF0ZU9uID09PSAnYmx1cicpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbD8uc2V0VmFsdWUodGhpcy5udW1iZXJJbnB1dC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntGH0LjRidCw0LXRgiDQv9C+0LvRjyDQstCy0L7QtNCwLlxuICAgICAqL1xuICAgIHB1YmxpYyBjbGVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb250cm9sPy5wYXRjaFZhbHVlKG51bGwpO1xuICAgICAgICB0aGlzLmNsaWNrQ2xlYXJFdmVudC5lbWl0KCk7XG4gICAgfVxufVxuIiwiPHR1aS1sb2FkZXJcbiAgICAqbmdJZj1cImZvcm1Db250cm9sXCJcbiAgICBjbGFzcz1cInctZnVsbFwiXG4gICAgW292ZXJsYXldPVwidHJ1ZVwiXG4gICAgW3Nob3dMb2FkZXJdPVwic2hvd0xvYWRlclwiXG4gICAgW3NpemVdPVwic2l6ZVwiXG4+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHRleHQtY2VudGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC13aXRoLWJ1dHRvbiBmbGV4IGdyb3cgcm91bmRlZC14bFwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR1aUljb25CdXR0b25cbiAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgICAgICAgICAgICBbc2l6ZV09XCJzaXplXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIW51bWJlcklucHV0WydjYW5EZWNyZW1lbnQnXVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrLnByZXZlbnQpPVwiZGVjcmVtZW50KHRydWUpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8dHVpLWljb24gaWNvbj1cIkB0dWkubWludXNcIj48L3R1aS1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8dHVpLWlucHV0LW51bWJlclxuICAgICAgICAgICAgICAgICNudW1iZXJJbnB1dFxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgW3R1aUhpbnRdPVwiKFtdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jKT8ubWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgW3R1aVRleHRmaWVsZExhYmVsT3V0c2lkZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbbWluXT1cImlnbm9yZVN0ZXBWYWxpZGF0b3JzID8gMSA6IHN0ZXBcIlxuICAgICAgICAgICAgICAgIFt0dWlOdW1iZXJGb3JtYXRdPVwibnVtYmVyRm9ybWF0XCJcbiAgICAgICAgICAgICAgICBbdHVpVGV4dGZpZWxkU2l6ZV09XCJzaXplXCJcbiAgICAgICAgICAgICAgICBbcmVxdWlyZWRdPVwidHJ1ZVwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLnRleHQtYWxpZ25dPVwiJ2NlbnRlcidcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5mb250LXdlaWdodF09XCI3MDBcIlxuICAgICAgICAgICAgICAgIChmb2N1c2luKT1cIiRhbnkoJGV2ZW50LnRhcmdldCkuc2VsZWN0KClcIlxuICAgICAgICAgICAgICAgIG9uY29udGV4dG1lbnU9XCJyZXR1cm4gZmFsc2U7XCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bi5hcnJvd0Rvd24pPVwiKDApXCJcbiAgICAgICAgICAgICAgICAoa2V5ZG93bi5hcnJvd1VwKT1cIigwKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJncm93XCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgIDwvdHVpLWlucHV0LW51bWJlcj5cbiAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICB0dWlJY29uQnV0dG9uXG4gICAgICAgICAgICAgICAgW2FwcGVhcmFuY2VdPVwiYXBwZWFyYW5jZVwiXG4gICAgICAgICAgICAgICAgW3NpemVdPVwic2l6ZVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIiFudW1iZXJJbnB1dFsnY2FuSW5jcmVtZW50J11cIlxuICAgICAgICAgICAgICAgIChjbGljay5wcmV2ZW50KT1cImluY2lkZW50KHRydWUpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8dHVpLWljb24gaWNvbj1cIkB0dWkucGx1c1wiPjwvdHVpLWljb24+XG4gICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgPC9kaXY+XG4gICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICpuZ0lmPVwic2hvd0Nyb3NzXCJcbiAgICAgICAgICAgIHR1aUljb25CdXR0b25cbiAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgW3NpemVdPVwic2l6ZVwiXG4gICAgICAgICAgICBbZGlzYWJsZWRdPVwiIW51bWJlcklucHV0WydjYW5JbmNyZW1lbnQnXVwiXG4gICAgICAgICAgICAoY2xpY2sucHJldmVudCk9XCJjbGVhcigpXCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPHR1aS1pY29uIGljb249XCJAdHVpLnhcIj48L3R1aS1pY29uPlxuICAgICAgICA8L2J1dHRvbj5cbiAgICA8L2Rpdj5cbjwvdHVpLWxvYWRlcj5cbiJdfQ==
189
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2MtaW5wdXQtcXVhbnRpdHkuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhdGFsb2cvaW5wdXQtcXVhbnRpdHkvc2MtaW5wdXQtcXVhbnRpdHkuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL2NhdGFsb2cvaW5wdXQtcXVhbnRpdHkvc2MtaW5wdXQtcXVhbnRpdHkuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsb0RBQW9EO0FBRXBELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBVSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzlJLE9BQU8sRUFBZSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBc0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUM1RixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLHVCQUF1QixFQUFFLG9CQUFvQixFQUFFLGtCQUFrQixFQUFFLDRCQUE0QixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFL0osT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDOzs7Ozs7QUFFakQ7O0dBRUc7QUFzQkgsTUFBTSxPQUFPLHdCQUF5QixTQUFRLDBCQUFrQztJQXJCaEY7O1FBNEJJOztXQUVHO1FBRUksU0FBSSxHQUFXLENBQUMsQ0FB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QUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2RvdC1ub3RhdGlvbiAqL1xuXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBIb3N0QmluZGluZywgSG9zdExpc3RlbmVyLCBJbnB1dCwgT25Jbml0LCBPdXRwdXQsIFZpZXdDaGlsZCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUNvbnRyb2wsIEZvcm1zTW9kdWxlLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IFR1aUJ1dHRvbiwgVHVpSGludCwgVHVpSWNvbiwgVHVpTG9hZGVyLCBUdWlTaXplTCwgVHVpU2l6ZVMgfSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQgeyBUdWlGaWVsZEVycm9yUGlwZSB9IGZyb20gJ0B0YWlnYS11aS9raXQnO1xuaW1wb3J0IHsgQWJzdHJhY3RUdWlOdWxsYWJsZUNvbnRyb2wsIFR1aUlucHV0TnVtYmVyQ29tcG9uZW50LCBUdWlJbnB1dE51bWJlck1vZHVsZSwgVHVpSXNsYW5kRGlyZWN0aXZlLCBUdWlUZXh0ZmllbGRDb250cm9sbGVyTW9kdWxlIH0gZnJvbSAnQHRhaWdhLXVpL2xlZ2FjeSc7XG5cbmltcG9ydCB7IHN0ZXBWYWxpZGF0b3IgfSBmcm9tICcuLi8uLi92YWxpZGF0b3JzJztcblxuLyoqXG4gKiDQmtC+0LzQv9C+0L3QtdC90YIg0L/QvtC70Y8g0LLQstC+0LTQsCDQutC+0LvQuNGH0LXRgdGC0LLQsC5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ3NjLWlucHV0LXF1YW50aXR5JyxcbiAgICB0ZW1wbGF0ZVVybDogJy4vc2MtaW5wdXQtcXVhbnRpdHkuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsOiAnLi9zYy1pbnB1dC1xdWFudGl0eS5jb21wb25lbnQuc2NzcycsXG4gICAgaW1wb3J0czogW1xuICAgICAgICBDb21tb25Nb2R1bGUsXG4gICAgICAgIFJvdXRlck1vZHVsZSxcbiAgICAgICAgVHVpQnV0dG9uLFxuICAgICAgICBUdWlJY29uLFxuICAgICAgICBUdWlJc2xhbmREaXJlY3RpdmUsXG4gICAgICAgIFR1aUlucHV0TnVtYmVyTW9kdWxlLFxuICAgICAgICBUdWlUZXh0ZmllbGRDb250cm9sbGVyTW9kdWxlLFxuICAgICAgICBGb3Jtc01vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgLi4uVHVpSGludCxcbiAgICAgICAgVHVpRmllbGRFcnJvclBpcGUsXG4gICAgICAgIFR1aUxvYWRlcixcbiAgICBdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY0lucHV0UXVhbnRpdHlDb21wb25lbnQgZXh0ZW5kcyBBYnN0cmFjdFR1aU51bGxhYmxlQ29udHJvbDxudW1iZXI+IGltcGxlbWVudHMgT25Jbml0IHtcbiAgICAvKipcbiAgICAgKiDQmtC+0LzQv9C+0L3QtdC90YIg0L/QvtC70Y8g0LLQstC+0LTQsC5cbiAgICAgKi9cbiAgICBAVmlld0NoaWxkKFR1aUlucHV0TnVtYmVyQ29tcG9uZW50KVxuICAgIHByaXZhdGUgcmVhZG9ubHkgbnVtYmVySW5wdXQ/OiBUdWlJbnB1dE51bWJlckNvbXBvbmVudDtcblxuICAgIC8qKlxuICAgICAqINCo0LDQsyDRg9Cy0LXQu9C40YfQtdC90LjRjyDQutC+0LvQuNGH0LXRgdGC0LLQsC4g0J7RgtCy0LXRh9Cw0LXRgiDQt9CwINC/0YDQvtCy0LXRgNC60YMg0LrRgNCw0YLQvdC+0YHRgtC4INCy0LLQvtC00LAuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc3RlcDogbnVtYmVyID0gMTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0L3QtdC+0LHRhdC+0LTQuNC80L4g0L7RgtC+0LHRgNCw0LfQuNGC0Ywge0BsaW5rIFR1aUxvYWRlckNvbXBvbmVudH0g0L3QsNC0INC60L7QvNC/0L7QvdC10L3RgtC+0LwuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgc2hvd0xvYWRlcjogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0LosINGH0YLQviDQvdC10L7QsdGF0L7QtNC40LzQviDQvtGC0L7QsdGA0LDQt9C40YLRjCDQutC90L7Qv9C60YMg0L7Rh9C40YHRgtC60Lgg0L/QvtC70Y8g0LLQstC+0LTQsC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIHB1YmxpYyBzaG93Q3Jvc3M6IGJvb2xlYW4gPSB0cnVlO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0LosINGH0YLQviDQvdC10L7QsdGF0L7QtNC40LzQviDQuNCz0L3QvtGA0LjRgNC+0LLQsNGC0Ywg0LLQsNC70LjQtNCw0YbQuNGOINC60YDQsNGC0L3QvtGB0YLQuCDQuCDQvNC40L3QuNC80LDQu9GM0L3QvtCz0L4g0LrQvtC70LjRh9C10YHRgtCy0LAuXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBwdWJsaWMgaWdub3JlU3RlcFZhbGlkYXRvcnM6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqINCk0L7RgNC80LDRgiDQstC90LXRiNC90LXQs9C+INCy0LjQtNCwINC60L7QvNC/0L7QvdC10L3RgtCwLlxuICAgICAqL1xuICAgIEBJbnB1dCgpXG4gICAgQEhvc3RCaW5kaW5nKCdhdHRyLmRhdGEtYXBwZWFyYW5jZScpXG4gICAgcHVibGljIGFwcGVhcmFuY2U6ICdwcmltYXJ5JyB8ICdzZWNvbmRhcnknID0gJ3ByaW1hcnknO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0LosINGH0YLQviDQutC+0LzQv9C+0L3QtdC90YIg0LTQtdCw0LrRgtC40LLQuNGA0L7QstCw0L0uXG4gICAgICovXG4gICAgQElucHV0KClcbiAgICBASG9zdEJpbmRpbmcoJ2F0dHIuZGF0YS1kaXNhYmxlZCcpXG4gICAgcHVibGljIGlzRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIC8qKlxuICAgICAqINCg0LDQt9C80LXRgCDQutC+0LzQv9C+0L3QtdC90YLQsC5cbiAgICAgKi9cbiAgICBASW5wdXQoKVxuICAgIEBIb3N0QmluZGluZygnYXR0ci5kYXRhLXNpemUnKVxuICAgIHB1YmxpYyBzaXplOiBUdWlTaXplTCB8IFR1aVNpemVTID0gJ20nO1xuXG4gICAgLyoqXG4gICAgICog0KHQvtCx0YvRgtC40LUg0L3QsNC20LDRgtC40Y8g0L3QsCDQutC90L7Qv9C60YMgXCLQntGH0LjRgdGC0LjRgtGMXCIuXG4gICAgICovXG4gICAgQE91dHB1dCgpXG4gICAgcHVibGljIGNsaWNrQ2xlYXJFdmVudDogRXZlbnRFbWl0dGVyPHZvaWQ+ID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIg0Y3Qu9C10LzQtdC90YIsINC60L7RgtC+0YDRi9C5INC80L7QttC10YIg0LHRi9GC0Ywg0YHRhNC+0LrRg9GB0LjRgNC+0LLQsNC9LlxuICAgICAqL1xuICAgIHB1YmxpYyBnZXQgbmF0aXZlRm9jdXNhYmxlRWxlbWVudCgpOiBIVE1MSW5wdXRFbGVtZW50IHwgbnVsbCB8IHVuZGVmaW5lZCB7XG4gICAgICAgIHJldHVybiB0aGlzLm51bWJlcklucHV0Py5uYXRpdmVGb2N1c2FibGVFbGVtZW50O1xuICAgIH1cblxuICAgIC8qKiBAaW5oZXJpdERvYyAqL1xuICAgIHB1YmxpYyBnZXQgZm9jdXNlZCgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5udW1iZXJJbnB1dD8uZm9jdXNlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQrdC70LXQvNC10L3RgiDRhNC+0YDQvNGLINCy0LLQvtC00LAg0LrQvtC70LjRh9C10YHRgtCy0LAuXG4gICAgICovXG4gICAgcHVibGljIGdldCBmb3JtQ29udHJvbCgpOiBGb3JtQ29udHJvbCB8IG51bGwge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250cm9sIGFzIEZvcm1Db250cm9sIHwgbnVsbDtcbiAgICB9XG5cbiAgICAvKiogQGluaGVyaXREb2MgKi9cbiAgICBwdWJsaWMgb3ZlcnJpZGUgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2wpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbC5zZXRWYWxpZGF0b3JzKHN0ZXBWYWxpZGF0b3IodGhpcy5pZ25vcmVTdGVwVmFsaWRhdG9ycyA/IDEgOiB0aGlzLnN0ZXApKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0LHRgNCw0LHQvtGC0YfQuNC6INGB0L7QsdGL0YLQuNGPINC90LDQttCw0YLQuNGPINGB0YLRgNC10LvQvtC6INC60LvQsNCy0LjQsNGC0YPRgNGLLlxuICAgICAqXG4gICAgICogQHBhcmFtIHN0ZXAg0KjQsNCzINC40LfQvNC10L3QtdC90LjRjyDQutC+0LvQuNGH0LXRgdGC0LLQsC5cbiAgICAgKi9cbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmFycm93RG93bicsIFsnLXN0ZXAnXSlcbiAgICBASG9zdExpc3RlbmVyKCdrZXlkb3duLmFycm93VXAnLCBbJ3N0ZXAnXSlcbiAgICBwdWJsaWMgb25BcnJvdyhzdGVwOiBudW1iZXIgfCBudWxsKTogdm9pZCB7XG4gICAgICAgIGlmICghc3RlcCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0ZXAgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmluY2lkZW50KCk7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmRlY3JlbWVudCgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KPQstC10LvQuNGH0LjQstCw0LXRgiDQt9C90LDRh9C10L3QuNC1INCyINC/0L7Qu9C1INCy0LLQvtC00LAg0L3QsCAxINGI0LDQsy4g0JXRgdC70Lgg0YfQuNGB0LvQviDQsiDQv9C+0LvQtSDQstCy0L7QtNCwINC90LUg0LrRgNCw0YLQvdC+INGI0LDQs9GDLCDRgtC+INGD0LLQtdC70LjRh9C40YIg0LTQviDQsdC70LjQttCw0LnRiNC10LPQviDQutGA0LDRgtC90L7Qs9C+INC30L3QsNGH0LXQvdC40Y8uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2hlY2tVcGRhdGVPbiDQn9GA0LjQt9C90LDQuiwg0YfRgtC+INC90YPQttC90L4g0L/RgNC+0LLQtdGA0LjRgtGMIGB1cGRhdGVPbmAg0YHQstC+0LnRgdGC0LLQviBgZm9ybUNvbnRyb2xgLlxuICAgICAqL1xuICAgIHB1YmxpYyBpbmNpZGVudChjaGVja1VwZGF0ZU9uID0gZmFsc2UpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLm51bWJlcklucHV0KSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCByZW1haW5kZXIgPSAoKCh0aGlzLm51bWJlcklucHV0LnZhbHVlID8/IDApICogMTAwMCkgJSAodGhpcy5zdGVwICogMTAwMCkpIC8gMTAwMDsgLy8g0KPQvNC90L7QttCw0LXQvCDQuCDQtNC10LvQuNC8INC90LAgMTAwMCDRh9GC0L7QsdGLINGA0LXRiNC40YLRjCDQvtGI0LjQsdC60YMgSUVFReKAkTc1NCDQv9GA0Lgg0L/QvtC70YPRh9C10L3QuNC4INC+0YHRgtCw0YLQutCwINC+0YIg0LTQtdC70LXQvdC40Y8uXG4gICAgICAgIGNvbnN0IHN0ZXAgPSB0aGlzLnN0ZXAgLSByZW1haW5kZXI7XG4gICAgICAgIHRoaXMubnVtYmVySW5wdXQudmFsdWUgPSBNYXRoLm1heChOdW1iZXIoKCh0aGlzLm51bWJlcklucHV0LnZhbHVlID8/IDApICsgc3RlcCkudG9GaXhlZCgyKSksIHRoaXMuaWdub3JlU3RlcFZhbGlkYXRvcnMgPyAxIDogTWF0aC5tYXgoc3RlcCwgMCkpOyAvLyDQmNGB0L/QvtC70YzQt9GD0LXQvCB0b0ZpeGVkINGH0YLQvtCx0Ysg0YDQtdGI0LjRgtGMINC+0YjQuNCx0LrRgyBJRUVF4oCRNzU0INC/0YDQuCDRgdC70L7QttC10L3QuNC4LlxuICAgICAgICB0aGlzLm51bWJlcklucHV0WyduYXRpdmVWYWx1ZSddID0gdGhpcy5udW1iZXJJbnB1dFsnZm9ybWF0dGVkVmFsdWUnXTtcblxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW5kZXJzY29yZS1kYW5nbGUsIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnksIEB0eXBlc2NyaXB0LWVzbGludC9uby11bnNhZmUtbWVtYmVyLWFjY2Vzc1xuICAgICAgICBpZiAoY2hlY2tVcGRhdGVPbiAmJiAodGhpcy5mb3JtQ29udHJvbCBhcyBhbnkpPy5fdXBkYXRlT24gPT09ICdibHVyJykge1xuICAgICAgICAgICAgdGhpcy5jb250cm9sPy5zZXRWYWx1ZSh0aGlzLm51bWJlcklucHV0LnZhbHVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCj0LzQtdC90YzRiNCw0LXRgiDQt9C90LDRh9C10L3QuNC1INCyINC/0L7Qu9C1INCy0LLQvtC00LAg0L3QsCAxINGI0LDQsy4g0JXRgdC70Lgg0YfQuNGB0LvQviDQsiDQv9C+0LvQtSDQstCy0L7QtNCwINC90LUg0LrRgNCw0YLQvdC+INGI0LDQs9GDLCDRgtC+INGD0LzQtdC90YzRiNC40YIg0LTQviDQsdC70LjQttCw0LnRiNC10LPQviDQutGA0LDRgtC90L7Qs9C+INC30L3QsNGH0LXQvdC40Y8uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gY2hlY2tVcGRhdGVPbiDQn9GA0LjQt9C90LDQuiwg0YfRgtC+INC90YPQttC90L4g0L/RgNC+0LLQtdGA0LjRgtGMIGB1cGRhdGVPbmAg0YHQstC+0LnRgdGC0LLQviBgZm9ybUNvbnRyb2xgLlxuICAgICAqL1xuICAgIHB1YmxpYyBkZWNyZW1lbnQoY2hlY2tVcGRhdGVPbiA9IGZhbHNlKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5udW1iZXJJbnB1dCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcmVtYWluZGVyID0gKCgodGhpcy5udW1iZXJJbnB1dC52YWx1ZSA/PyAwKSAqIDEwMDApICUgKHRoaXMuc3RlcCAqIDEwMDApKSAvIDEwMDA7IC8vINCj0LzQvdC+0LbQsNC10Lwg0Lgg0LTQtdC70LjQvCDQvdCwIDEwMDAg0YfRgtC+0LHRiyDRgNC10YjQuNGC0Ywg0L7RiNC40LHQutGDIElFRUXigJE3NTQg0L/RgNC4INC/0L7Qu9GD0YfQtdC90LjQuCDQvtGB0YLQsNGC0LrQsCDQvtGCINC00LXQu9C10L3QuNGPLlxuICAgICAgICBjb25zdCBzdGVwID0gLXJlbWFpbmRlciB8fCAtdGhpcy5zdGVwO1xuICAgICAgICB0aGlzLm51bWJlcklucHV0LnZhbHVlID0gTWF0aC5tYXgoTnVtYmVyKCgodGhpcy5udW1iZXJJbnB1dC52YWx1ZSA/PyAwKSArIHN0ZXApLnRvRml4ZWQoMikpLCB0aGlzLmlnbm9yZVN0ZXBWYWxpZGF0b3JzID8gMSA6IE1hdGgubWF4KHN0ZXAsIDApKTsgLy8g0JjRgdC/0L7Qu9GM0LfRg9C10LwgdG9GaXhlZCDRh9GC0L7QsdGLINGA0LXRiNC40YLRjCDQvtGI0LjQsdC60YMgSUVFReKAkTc1NCDQv9GA0Lgg0YHQu9C+0LbQtdC90LjQuC5cbiAgICAgICAgdGhpcy5udW1iZXJJbnB1dFsnbmF0aXZlVmFsdWUnXSA9IHRoaXMubnVtYmVySW5wdXRbJ2Zvcm1hdHRlZFZhbHVlJ107XG5cbiAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVuZGVyc2NvcmUtZGFuZ2xlLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55LCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW5zYWZlLW1lbWJlci1hY2Nlc3NcbiAgICAgICAgaWYgKGNoZWNrVXBkYXRlT24gJiYgKHRoaXMuZm9ybUNvbnRyb2wgYXMgYW55KT8uX3VwZGF0ZU9uID09PSAnYmx1cicpIHtcbiAgICAgICAgICAgIHRoaXMuY29udHJvbD8uc2V0VmFsdWUodGhpcy5udW1iZXJJbnB1dC52YWx1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntGH0LjRidCw0LXRgiDQv9C+0LvRjyDQstCy0L7QtNCwLlxuICAgICAqL1xuICAgIHB1YmxpYyBjbGVhcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5jb250cm9sPy5wYXRjaFZhbHVlKG51bGwpO1xuICAgICAgICB0aGlzLmNsaWNrQ2xlYXJFdmVudC5lbWl0KCk7XG4gICAgfVxufVxuIiwiPHR1aS1sb2FkZXJcbiAgICAqbmdJZj1cImZvcm1Db250cm9sXCJcbiAgICBjbGFzcz1cInctZnVsbFwiXG4gICAgW292ZXJsYXldPVwidHJ1ZVwiXG4gICAgW3Nob3dMb2FkZXJdPVwic2hvd0xvYWRlclwiXG4gICAgW3NpemVdPVwic2l6ZVwiXG4+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC0xIHRleHQtY2VudGVyXCI+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJmaWVsZC13aXRoLWJ1dHRvbiBmbGV4IGdyb3cgcm91bmRlZC14bFwiPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR1aUljb25CdXR0b25cbiAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgICAgICAgICAgICBbc2l6ZV09XCJzaXplXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIW51bWJlcklucHV0WydjYW5EZWNyZW1lbnQnXVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrLnByZXZlbnQpPVwiZGVjcmVtZW50KHRydWUpXCJcbiAgICAgICAgICAgID5cbiAgICAgICAgICAgICAgICA8dHVpLWljb24gaWNvbj1cIkB0dWkubWludXNcIj48L3R1aS1pY29uPlxuICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8dHVpLWlucHV0LW51bWJlclxuICAgICAgICAgICAgICAgICNudW1iZXJJbnB1dFxuICAgICAgICAgICAgICAgIFtmb3JtQ29udHJvbF09XCJmb3JtQ29udHJvbFwiXG4gICAgICAgICAgICAgICAgW3R1aUhpbnRdPVwiKFtdIHwgdHVpRmllbGRFcnJvciB8IGFzeW5jKT8ubWVzc2FnZVwiXG4gICAgICAgICAgICAgICAgW3R1aVRleHRmaWVsZExhYmVsT3V0c2lkZV09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbbWluXT1cImlnbm9yZVN0ZXBWYWxpZGF0b3JzID8gMSA6IHN0ZXBcIlxuICAgICAgICAgICAgICAgIFt0dWlUZXh0ZmllbGRTaXplXT1cInNpemVcIlxuICAgICAgICAgICAgICAgIFtyZXF1aXJlZF09XCJ0cnVlXCJcbiAgICAgICAgICAgICAgICBbc3R5bGUudGV4dC1hbGlnbl09XCInY2VudGVyJ1wiXG4gICAgICAgICAgICAgICAgW3N0eWxlLmZvbnQtd2VpZ2h0XT1cIjcwMFwiXG4gICAgICAgICAgICAgICAgKGZvY3VzaW4pPVwiJGFueSgkZXZlbnQudGFyZ2V0KS5zZWxlY3QoKVwiXG4gICAgICAgICAgICAgICAgb25jb250ZXh0bWVudT1cInJldHVybiBmYWxzZTtcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duLmFycm93RG93bik9XCIoMClcIlxuICAgICAgICAgICAgICAgIChrZXlkb3duLmFycm93VXApPVwiKDApXCJcbiAgICAgICAgICAgICAgICBjbGFzcz1cImdyb3dcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgPC90dWktaW5wdXQtbnVtYmVyPlxuICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR1aUljb25CdXR0b25cbiAgICAgICAgICAgICAgICBbYXBwZWFyYW5jZV09XCJhcHBlYXJhbmNlXCJcbiAgICAgICAgICAgICAgICBbc2l6ZV09XCJzaXplXCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwiIW51bWJlcklucHV0WydjYW5JbmNyZW1lbnQnXVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrLnByZXZlbnQpPVwiaW5jaWRlbnQodHJ1ZSlcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDx0dWktaWNvbiBpY29uPVwiQHR1aS5wbHVzXCI+PC90dWktaWNvbj5cbiAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgKm5nSWY9XCJzaG93Q3Jvc3NcIlxuICAgICAgICAgICAgdHVpSWNvbkJ1dHRvblxuICAgICAgICAgICAgYXBwZWFyYW5jZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICBbc2l6ZV09XCJzaXplXCJcbiAgICAgICAgICAgIFtkaXNhYmxlZF09XCIhbnVtYmVySW5wdXRbJ2NhbkluY3JlbWVudCddXCJcbiAgICAgICAgICAgIChjbGljay5wcmV2ZW50KT1cImNsZWFyKClcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8dHVpLWljb24gaWNvbj1cIkB0dWkueFwiPjwvdHVpLWljb24+XG4gICAgICAgIDwvYnV0dG9uPlxuICAgIDwvZGl2PlxuPC90dWktbG9hZGVyPlxuIl19