@snabcentr/client-ui 4.14.6 → 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.
- package/esm2022/order/draft/sc-draft.component.mjs +12 -15
- package/esm2022/order/index.mjs +3 -4
- package/esm2022/order/new-order-items/sc-new-order-items.component.mjs +39 -0
- package/esm2022/order/order-form/sc-order-form.component.mjs +6 -18
- package/esm2022/order/order-items-list/sc-order-items-list.component.mjs +3 -4
- package/esm2022/order/order-items-list-with-actions/sc-order-items-list-with-actions.component.mjs +53 -0
- package/fesm2022/snabcentr-client-ui.mjs +49 -105
- package/fesm2022/snabcentr-client-ui.mjs.map +1 -1
- package/order/draft/sc-draft.component.d.ts +5 -8
- package/order/index.d.ts +2 -3
- package/order/{order-direction-items/sc-order-direction-items.component.d.ts → new-order-items/sc-new-order-items.component.d.ts} +5 -5
- package/order/order-form/sc-order-form.component.d.ts +2 -11
- package/order/order-items-list/sc-order-items-list.component.d.ts +0 -1
- package/order/order-items-list-with-actions/sc-order-items-list-with-actions.component.d.ts +37 -0
- package/package.json +2 -2
- package/release_notes.tmp +2 -4
- package/styles/tailwind/tailwind.scss +4 -0
- package/esm2022/order/models/sc-i-cart-items-by-direction.mjs +0 -22
- package/esm2022/order/order-direction-items/sc-order-direction-items.component.mjs +0 -39
- package/esm2022/order/order-items-list-by-directions/sc-order-items-list-by-directions.component.mjs +0 -75
- package/order/models/sc-i-cart-items-by-direction.d.ts +0 -25
- package/order/order-items-list-by-directions/sc-order-items-list-by-directions.component.d.ts +0 -58
|
@@ -16,7 +16,6 @@ import * as i0 from "@angular/core";
|
|
|
16
16
|
import * as i1 from "@angular/forms";
|
|
17
17
|
/**
|
|
18
18
|
* Компонент списка товаров корзины, заказа или черновика.
|
|
19
|
-
* Позиции разбиты.
|
|
20
19
|
*/
|
|
21
20
|
export class ScOrderItemsListComponent {
|
|
22
21
|
constructor() {
|
|
@@ -196,13 +195,13 @@ export class ScOrderItemsListComponent {
|
|
|
196
195
|
this.scDialogService.openPriceHistoryChartDialog(product);
|
|
197
196
|
}
|
|
198
197
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScOrderItemsListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
199
|
-
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ScOrderItemsListComponent, isStandalone: true, selector: "sc-order-items-list", inputs: { selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: true, isRequired: false, transformFunction: null }, editable: { classPropertyName: "editable", publicName: "editable", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: false, isRequired: true, transformFunction: null } }, outputs: { selectedItemsIdsChange: "selectedItemsIdsChange" }, ngImport: i0, template: "<div\n [formGroup]=\"selectionFormGroup\"\n class=\"flex flex-col gap-5\"\n>\n
|
|
198
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ScOrderItemsListComponent, isStandalone: true, selector: "sc-order-items-list", inputs: { selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: true, isRequired: false, transformFunction: null }, editable: { classPropertyName: "editable", publicName: "editable", isSignal: true, isRequired: false, transformFunction: null }, items: { classPropertyName: "items", publicName: "items", isSignal: false, isRequired: true, transformFunction: null } }, outputs: { selectedItemsIdsChange: "selectedItemsIdsChange" }, ngImport: i0, template: "<div\n [formGroup]=\"selectionFormGroup\"\n class=\"flex flex-col gap-5\"\n>\n @for (item of itemsSignal(); track item.id) {\n @if ($index !== 0) {\n <hr class=\"mt-auto h-px w-full bg-tui-clear\" />\n }\n\n <div class=\"flex items-center gap-4 relative\">\n @let isActive = !selectable() || selectionFormGroup.get(item.id)?.value;\n\n <!-- \u0427\u0435\u043A\u0431\u043E\u043A\u0441 \u0432\u044B\u0431\u043E\u0440\u0430 \u0442\u043E\u0432\u0430\u0440\u0430. -->\n @if (selectable()) {\n <input\n tuiCheckbox\n [disabled]=\"itemComponent.showLoader()\"\n type=\"checkbox\"\n size=\"m\"\n [formControlName]=\"item.id\"\n />\n }\n\n <!-- \u041A\u0430\u0440\u0442\u043E\u0447\u043A\u0430 \u0442\u043E\u0432\u0430\u0440\u0430. -->\n <sc-order-item\n #itemComponent\n [product]=\"item.product\"\n [orderItem]=\"item\"\n [showQuantityControl]=\"canEdit() && !item.configurator\"\n [isShowEditControls]=\"canEdit()\"\n class=\"w-full duration-200\"\n [class.opacity-60]=\"selectable() && !selectionFormGroup.get(item.id)?.value\"\n (clickCardEvent)=\"openProductInfoDialog(item.product, item, orderOptions?.orderId())\"\n (quantityValueChanges)=\"patchItem($event, itemComponent)\"\n (clickPriceHistoryEvent)=\"openPriceHistoryChartDialog(item.product)\"\n (clickSettings)=\"openSettingsDialog(item)\"\n [class.pointer-events-none]=\"!isActive\"\n />\n\n <!-- \u041A\u043D\u043E\u043F\u043A\u0430 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F \u0442\u043E\u0432\u0430\u0440\u0430. -->\n @if (canEdit()) {\n <button\n tuiIconButton\n iconStart=\"@tui.trash\"\n (click)=\"deleteItem(item, itemComponent)\"\n [loading]=\"itemComponent.showLoader()\"\n size=\"s\"\n appearance=\"secondary\"\n class=\"!absolute left-1 top-1 lg:!relative lg:left-0 lg:top-0 lg:!self-center\"\n ></button>\n }\n </div>\n }\n\n <!-- \u0424\u0443\u0442\u0435\u0440 \u0441\u043F\u0438\u0441\u043A\u0430. -->\n <div\n scPrint=\"cost\"\n class=\"flex flex-col items-end gap-2.5\"\n >\n @let totalSum = sumSelectedItems();\n <!-- \u0418\u0442\u043E\u0433\u043E\u0432\u0430\u044F \u0441\u0443\u043C\u043C\u0430. -->\n <div class=\"text-base font-bold\">\u0418\u0442\u043E\u0433\u043E: {{ totalSum | tuiFormatNumber: { precision: 2, decimalSeparator: '.', rounding: 'ceil' } | async }} {{ 'RUB' | tuiCurrency }}</div>\n </div>\n</div>\n", dependencies: [{ kind: "component", type: ScOrderItemComponent, selector: "sc-order-item", inputs: ["isShowEditControls"], outputs: ["clickSettings"] }, { kind: "directive", type: ScPrintDirective, selector: "[scPrint]", inputs: ["scPrint"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i1.CheckboxControlValueAccessor, selector: "input[type=checkbox][formControlName],input[type=checkbox][formControl],input[type=checkbox][ngModel]" }, { kind: "directive", type: i1.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i1.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i1.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i1.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "component", type: TuiCheckbox, selector: "input[type=\"checkbox\"][tuiCheckbox]", inputs: ["size"] }, { kind: "directive", type: TuiButton, selector: "a[tuiButton],button[tuiButton],a[tuiIconButton],button[tuiIconButton]", inputs: ["size"] }, { kind: "component", type: TuiButtonLoading, selector: "[tuiButton][loading],[tuiIconButton][loading]", inputs: ["size", "loading"] }, { kind: "pipe", type: TuiCurrencyPipe, name: "tuiCurrency" }, { kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: TuiFormatNumberPipe, name: "tuiFormatNumber" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
200
199
|
}
|
|
201
200
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScOrderItemsListComponent, decorators: [{
|
|
202
201
|
type: Component,
|
|
203
|
-
args: [{ standalone: true, selector: 'sc-order-items-list', imports: [ScOrderItemComponent, ScPrintDirective, ReactiveFormsModule, TuiCheckbox, TuiButton, TuiButtonLoading, TuiCurrencyPipe, AsyncPipe, TuiFormatNumberPipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n [formGroup]=\"selectionFormGroup\"\n class=\"flex flex-col gap-5\"\n>\n
|
|
202
|
+
args: [{ standalone: true, selector: 'sc-order-items-list', imports: [ScOrderItemComponent, ScPrintDirective, ReactiveFormsModule, TuiCheckbox, TuiButton, TuiButtonLoading, TuiCurrencyPipe, AsyncPipe, TuiFormatNumberPipe], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n [formGroup]=\"selectionFormGroup\"\n class=\"flex flex-col gap-5\"\n>\n @for (item of itemsSignal(); track item.id) {\n @if ($index !== 0) {\n <hr class=\"mt-auto h-px w-full bg-tui-clear\" />\n }\n\n <div class=\"flex items-center gap-4 relative\">\n @let isActive = !selectable() || selectionFormGroup.get(item.id)?.value;\n\n <!-- \u0427\u0435\u043A\u0431\u043E\u043A\u0441 \u0432\u044B\u0431\u043E\u0440\u0430 \u0442\u043E\u0432\u0430\u0440\u0430. -->\n @if (selectable()) {\n <input\n tuiCheckbox\n [disabled]=\"itemComponent.showLoader()\"\n type=\"checkbox\"\n size=\"m\"\n [formControlName]=\"item.id\"\n />\n }\n\n <!-- \u041A\u0430\u0440\u0442\u043E\u0447\u043A\u0430 \u0442\u043E\u0432\u0430\u0440\u0430. -->\n <sc-order-item\n #itemComponent\n [product]=\"item.product\"\n [orderItem]=\"item\"\n [showQuantityControl]=\"canEdit() && !item.configurator\"\n [isShowEditControls]=\"canEdit()\"\n class=\"w-full duration-200\"\n [class.opacity-60]=\"selectable() && !selectionFormGroup.get(item.id)?.value\"\n (clickCardEvent)=\"openProductInfoDialog(item.product, item, orderOptions?.orderId())\"\n (quantityValueChanges)=\"patchItem($event, itemComponent)\"\n (clickPriceHistoryEvent)=\"openPriceHistoryChartDialog(item.product)\"\n (clickSettings)=\"openSettingsDialog(item)\"\n [class.pointer-events-none]=\"!isActive\"\n />\n\n <!-- \u041A\u043D\u043E\u043F\u043A\u0430 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F \u0442\u043E\u0432\u0430\u0440\u0430. -->\n @if (canEdit()) {\n <button\n tuiIconButton\n iconStart=\"@tui.trash\"\n (click)=\"deleteItem(item, itemComponent)\"\n [loading]=\"itemComponent.showLoader()\"\n size=\"s\"\n appearance=\"secondary\"\n class=\"!absolute left-1 top-1 lg:!relative lg:left-0 lg:top-0 lg:!self-center\"\n ></button>\n }\n </div>\n }\n\n <!-- \u0424\u0443\u0442\u0435\u0440 \u0441\u043F\u0438\u0441\u043A\u0430. -->\n <div\n scPrint=\"cost\"\n class=\"flex flex-col items-end gap-2.5\"\n >\n @let totalSum = sumSelectedItems();\n <!-- \u0418\u0442\u043E\u0433\u043E\u0432\u0430\u044F \u0441\u0443\u043C\u043C\u0430. -->\n <div class=\"text-base font-bold\">\u0418\u0442\u043E\u0433\u043E: {{ totalSum | tuiFormatNumber: { precision: 2, decimalSeparator: '.', rounding: 'ceil' } | async }} {{ 'RUB' | tuiCurrency }}</div>\n </div>\n</div>\n" }]
|
|
204
203
|
}], propDecorators: { items: [{
|
|
205
204
|
type: Input,
|
|
206
205
|
args: [{ required: true }]
|
|
207
206
|
}] } });
|
|
208
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtb3JkZXItaXRlbXMtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvb3JkZXIvb3JkZXItaXRlbXMtbGlzdC9zYy1vcmRlci1pdGVtcy1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9vcmRlci9vcmRlci1pdGVtcy1saXN0L3NjLW9yZGVyLWl0ZW1zLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUcsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZUFBZSxFQUFxRCxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVyRCxPQUFPLEVBQXVCLGdCQUFn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QUFDO1lBQ3pELElBQUksQ0FBQyxlQUFlLENBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDLFlBQVksRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNoSCxDQUFDO0lBQ0wsQ0FBQztJQUVEOzs7O09BSUc7SUFDTywyQkFBMkIsQ0FBQyxPQUErQjtRQUNqRSxJQUFJLENBQUMsZUFBZSxDQUFDLDJCQUEyQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlELENBQUM7K0dBck5RLHlCQUF5QjttR0FBekIseUJBQXlCLDBoQkM1QnRDLDBxR0FrRUEsNENEekNjLG9CQUFvQixzSEFBRSxnQkFBZ0IsMEVBQUUsbUJBQW1CLHF3QkFBRSxXQUFXLG9HQUFFLFNBQVMsb0lBQUUsZ0JBQWdCLGtIQUFFLGVBQWUsK0NBQUUsU0FBUyx5Q0FBRSxtQkFBbUI7OzRGQUd2Six5QkFBeUI7a0JBUHJDLFNBQVM7aUNBQ00sSUFBSSxZQUNOLHFCQUFxQixXQUV0QixDQUFDLG9CQUFvQixFQUFFLGdCQUFnQixFQUFFLG1CQUFtQixFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsQ0FBQyxtQkFDaEosdUJBQXVCLENBQUMsTUFBTTs4QkF3RjNDLEtBQUs7c0JBRFIsS0FBSzt1QkFBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1wYXJhbS1yZWFzc2lnbiAqL1xuXG5pbXBvcnQgeyBBc3luY1BpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCwgY29tcHV0ZWQsIERlc3Ryb3lSZWYsIGluamVjdCwgSW5wdXQsIGlucHV0LCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG91dHB1dEZyb21PYnNlcnZhYmxlLCB0YWtlVW50aWxEZXN0cm95ZWQsIHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgU0NfT1JERVJfTE9BREVSLCBTY0lPcmRlckVkaXRvckxvYWRlciwgU2NJT3JkZXJMb2FkZXIsIFNjT3JkZXJJdGVtLCBTY1VuaXRzSGVscGVyIH0gZnJvbSAnQHNuYWJjZW50ci9jbGllbnQtY29yZSc7XG5pbXBvcnQgeyBUdWlDdXJyZW5jeVBpcGUgfSBmcm9tICdAdGFpZ2EtdWkvYWRkb24tY29tbWVyY2UnO1xuaW1wb3J0IHsgVHVpQnV0dG9uLCBUdWlGb3JtYXROdW1iZXJQaXBlIH0gZnJvbSAnQHRhaWdhLXVpL2NvcmUnO1xuaW1wb3J0IHsgVHVpQnV0dG9uTG9hZGluZywgVHVpQ2hlY2tib3ggfSBmcm9tICdAdGFpZ2EtdWkva2l0JztcbmltcG9ydCB7IGNhdGNoRXJyb3IsIGZpbmFsaXplLCBtYXAsIG9mIH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEFic3RyYWN0U2NQcmljZUNhcmQsIFNjUHJpbnREaXJlY3RpdmUgfSBmcm9tICcuLi8uLi9kaXJlY3RpdmVzJztcbmltcG9ydCB7IElTY0RpYWxvZ1NlcnZpY2UsIFNDX0RJQUxPR19TRVJWSUNFX1RPS0VOIH0gZnJvbSAnLi4vLi4vcHJvdmlkZXJzJztcbmltcG9ydCB7IFNDX09SREVSX09QVElPTlMsIFNjT3JkZXJPcHRpb25zIH0gZnJvbSAnLi4vZGlyZWN0aXZlcy9zYy1vcmRlci1vcHRpb25zJztcbmltcG9ydCB7IFNjT3JkZXJJdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vb3JkZXItaXRlbS9zYy1vcmRlci1pdGVtLmNvbXBvbmVudCc7XG5cbi8qKlxuICog0JrQvtC80L/QvtC90LXQvdGCINGB0L/QuNGB0LrQsCDRgtC+0LLQsNGA0L7QsiDQutC+0YDQt9C40L3Riywg0LfQsNC60LDQt9CwINC40LvQuCDRh9C10YDQvdC+0LLQuNC60LAuXG4gKiDQn9C+0LfQuNGG0LjQuCDRgNCw0LfQsdC40YLRiy5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ3NjLW9yZGVyLWl0ZW1zLWxpc3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zYy1vcmRlci1pdGVtcy1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBpbXBvcnRzOiBbU2NPcmRlckl0ZW1Db21wb25lbnQsIFNjUHJpbnREaXJlY3RpdmUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFR1aUNoZWNrYm94LCBUdWlCdXR0b24sIFR1aUJ1dHRvbkxvYWRpbmcsIFR1aUN1cnJlbmN5UGlwZSwgQXN5bmNQaXBlLCBUdWlGb3JtYXROdW1iZXJQaXBlXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2NPcmRlckl0ZW1zTGlzdENvbXBvbmVudCB7XG4gICAgLyoqXG4gICAgICog0JLQvdGD0YLRgNC10L3QvdC40Lkg0YHQuNCz0L3QsNC7INGB0L/QuNGB0LrQsCDRjdC70LXQvNC10L3RgtC+0LIg0LrQvtGA0LfQuNC90YsgKNGC0L7QstCw0YDQvtCyKS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXRlbXNTaWduYWwgPSBzaWduYWw8U2NPcmRlckl0ZW1bXT4oW10pO1xuXG4gICAgLyoqXG4gICAgICog0JLQutC70Y7Rh9C40YLRjCDQstGL0LHQvtGAINC/0L7Qt9C40YbQuNC5INGH0LXQutCx0L7QutGB0LDQvNC4LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBzZWxlY3RhYmxlID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgICAvKipcbiAgICAgKiDQktC60LvRjtGH0LjRgtGMINGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40LUg0L/QvtC30LjRhtC40LkuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGVkaXRhYmxlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgLyoqXG4gICAgICog0JLQvdGD0YLRgNC10L3QvdGP0Y8g0LPRgNGD0L/Qv9CwINGE0L7RgNC80Ysg0LTQu9GPINCy0YvQsdC+0YDQsCDQv9C+0LfQuNGG0LjQuS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0aW9uRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cDxSZWNvcmQ8c3RyaW5nLCBGb3JtQ29udHJvbDxib29sZWFuPj4+KHt9KTtcblxuICAgIC8qKlxuICAgICAqINCe0L/RhtC40Lgg0LfQsNC60LDQt9CwICjRh9C10YDQvdC+0LLQuNC60LApLiDQn9GA0LXQtNC+0YHRgtCw0LLQu9GP0LXRgtGB0Y8g0LTQuNGA0LXQutGC0LjQstC+0Lkge0BsaW5rIFNjT3JkZXJBY2Nlc3NvckRpcmVjdGl2ZX0g0LIg0LrQvtC90YLQtdC60YHRgtC1INGH0LXRgNC90L7QstC40LrQsC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgb3JkZXJPcHRpb25zID0gaW5qZWN0PFNjT3JkZXJPcHRpb25zPihTQ19PUkRFUl9PUFRJT05TLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gICAgLyoqXG4gICAgICog0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDRiyDQstGL0LHRgNCw0L3QvdGL0YUg0L/QvtC30LjRhtC40LkuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGl0ZW1zSWRzID0gdG9TaWduYWwodGhpcy5zZWxlY3Rpb25Gb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUobWFwKCh2YWx1ZSkgPT4gT2JqZWN0LmVudHJpZXM8Ym9vbGVhbj4odmFsdWUgYXMgUmVjb3JkPHN0cmluZywgYm9vbGVhbj4pKSksIHtcbiAgICAgICAgaW5pdGlhbFZhbHVlOiBbXSxcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqINCh0LjQs9C90LDQuyDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgNC+0LIg0LLRi9Cx0YDQsNC90L3Ri9GFINC/0L7Qt9C40YbQuNC5LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBzZWxlY3RlZEl0ZW1zSWRzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBzZWxlY3RhYmxlID0gdGhpcy5zZWxlY3RhYmxlKCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXNJZHMoKVxuICAgICAgICAgICAgLmZpbHRlcigoWywgY2hlY2tlZF0pID0+ICFzZWxlY3RhYmxlIHx8IGNoZWNrZWQpXG4gICAgICAgICAgICAubWFwKChba2V5XSkgPT4ga2V5KTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqINCS0YvRhdC+0LTQvdGL0LUg0LTQsNC90L3Ri9C1INC/0YDQuCDQuNC30LzQtdC90LXQvdC40Lgg0LLRi9Cx0L7RgNCwINC/0L7Qt9C40YbQuNC5LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBzZWxlY3RlZEl0ZW1zSWRzQ2hhbmdlID0gb3V0cHV0RnJvbU9ic2VydmFibGUodG9PYnNlcnZhYmxlKHRoaXMuc2VsZWN0ZWRJdGVtc0lkcykpO1xuXG4gICAgLyoqXG4gICAgICog0KHRg9C80LzQsCDRgdGC0L7QuNC80L7RgdGC0Lgg0LLRi9Cx0YDQsNC90L3Ri9GFINC/0L7Qt9C40YbQuNC5LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBzdW1TZWxlY3RlZEl0ZW1zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuaXRlbXNTaWduYWwoKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtc0lkcyA9IHRoaXMuc2VsZWN0ZWRJdGVtc0lkcygpO1xuICAgICAgICBjb25zdCBzZWxlY3RhYmxlID0gdGhpcy5zZWxlY3RhYmxlKCk7XG5cbiAgICAgICAgcmV0dXJuIGl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gIXNlbGVjdGFibGUgfHwgc2VsZWN0ZWRJdGVtc0lkcy5pbmNsdWRlcyhpdGVtLmlkKSkucmVkdWNlKChzdW06IG51bWJlciwgaXRlbTogU2NPcmRlckl0ZW0pID0+IHN1bSArIGl0ZW0uY29zdFJ1YiwgMCk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0L/QvtC70YPRh9C10L3QuNGPINC4INGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8g0YHQv9C40YHQutCwINGC0L7QstCw0YDQvtCyINC30LDQutCw0LfQsCAo0LrQvtGA0LfQuNC90LAgLyDQt9Cw0LrQsNC3IC8g0YfQtdGA0L3QvtCy0LjQuiA9INC30LDQutCw0LcpLlxuICAgICAqINCf0YDQtdC00L7RgdGC0LDQstC70Y/QtdGC0YHRjyDRgNC+0LTQuNGC0LXQu9C10Lwg0YfQtdGA0LXQtyDRgtC+0LrQtdC9IHtAbGluayBTQ19PUkRFUl9MT0FERVJ9ICjRgNC10LDQu9C40LfQsNGG0LjRjyB7QGxpbmsgU2NJT3JkZXJMb2FkZXJ9KS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgb3JkZXJJdGVtc0xpc3RMb2FkZXIgPSBpbmplY3Q8U2NJT3JkZXJMb2FkZXIgfCBTY0lPcmRlckVkaXRvckxvYWRlcj4oU0NfT1JERVJfTE9BREVSKTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0LzQvtC20L3QviDRgNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCDQv9C+0LfQuNGG0LjQuC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2FuRWRpdCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZWRpdGFibGUoKSAmJiAndXBkYXRlUHJvZHVjdCQnIGluIHRoaXMub3JkZXJJdGVtc0xpc3RMb2FkZXIpO1xuXG4gICAgLyoqXG4gICAgICog0KHRgdGL0LvQutCwINC00LvRjyDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQvtCz0L4g0YPQv9GA0LDQstC70LXQvdC40Y8g0YPQvdC40YfRgtC+0LbQtdC90LjQtdC8INC30LDQstC40YHQuNC80L7RgdGC0LXQuS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0LTQu9GPINGA0LDQsdC+0YLRiyDRgSDQtNC40LDQu9C+0LPQvtCy0YvQvNC4INC+0LrQvdCw0LzQuC5cbiAgICAgKiDQn9GA0LXQtNC+0YHRgtCw0LLQu9GP0LXRgtGB0Y8g0YDQvtC00LjRgtC10LvQtdC8INGH0LXRgNC10Lcg0YLQvtC60LXQvSB7QGxpbmsgU0NfRElBTE9HX1NFUlZJQ0VfVE9LRU59LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc2NEaWFsb2dTZXJ2aWNlID0gaW5qZWN0PElTY0RpYWxvZ1NlcnZpY2U+KFNDX0RJQUxPR19TRVJWSUNFX1RPS0VOKTtcblxuICAgIC8qKlxuICAgICAqINCh0L/QuNGB0L7QuiDRjdC70LXQvNC10L3RgtC+0LIg0LrQvtGA0LfQuNC90YsgKNGC0L7QstCw0YDQvtCyKS4g0J/RgNC4INGD0YHRgtCw0L3QvtCy0LrQtSDRgdC40L3RhdGA0L7QvdC90L4g0L7QsdC90L7QstC70Y/QtdGCINC60L7QvdGC0YDQvtC70Ysg0LLRi9Cx0L7RgNCwINCyINGE0L7RgNC80LUuXG4gICAgICovXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgICBzZXQgaXRlbXModmFsdWU6IFNjT3JkZXJJdGVtW10pIHtcbiAgICAgICAgdGhpcy5pdGVtc1NpZ25hbC5zZXQodmFsdWUpO1xuICAgICAgICB0aGlzLnN5bmNTZWxlY3Rpb25Db250cm9scygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0LjQvdGF0YDQvtC90LjQt9C40YDRg9C10YIg0LrQvtC90YLRgNC+0LvRiyDRhNC+0YDQvNGLINCy0YvQsdC+0YDQsCDRgSDRgtC10LrRg9GJ0LjQvCDRgdC/0LjRgdC60L7QvCDRgtC+0LLQsNGA0L7Qsjog0YPQtNCw0LvRj9C10YIg0LrQvtC90YLRgNC+0LvRiyDQtNC70Y8g0L7RgtGB0YPRgtGB0YLQstGD0Y7RidC40YUgaWQsINC00L7QsdCw0LLQu9GP0LXRgiDQtNC70Y8g0L3QvtCy0YvRhS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHN5bmNTZWxlY3Rpb25Db250cm9scygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGFibGUoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY3VycmVudEl0ZW1zID0gdGhpcy5pdGVtc1NpZ25hbCgpO1xuICAgICAgICBjb25zdCBjdXJyZW50SWRzID0gbmV3IFNldChjdXJyZW50SXRlbXMubWFwKChpdGVtKSA9PiBpdGVtLmlkKSk7XG5cbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5zZWxlY3Rpb25Gb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAgIGlmICghY3VycmVudElkcy5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkZvcm1Hcm91cC5yZW1vdmVDb250cm9sKG5hbWUgYXMgbmV2ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjdXJyZW50SXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbkZvcm1Hcm91cC5jb250YWlucyhpdGVtLmlkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uRm9ybUdyb3VwLmFkZENvbnRyb2woaXRlbS5pZCwgbmV3IEZvcm1Db250cm9sKHRydWUsIHsgbm9uTnVsbGFibGU6IHRydWUgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQo9C00LDQu9GP0LXRgiDQv9C+0LfQuNGG0LjRji5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpdGVtINCf0L7Qt9C40YbQuNGPINGC0L7QstCw0YDQsCDQtNC70Y8g0YPQtNCw0LvQtdC90LjRjy5cbiAgICAgKiBAcGFyYW0gcHJpY2VDYXJkINCa0L7QvNC/0L7QvdC10L3RgiDQutCw0YDRgtC+0YfQutC4INGC0L7QstCw0YDQsC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZGVsZXRlSXRlbShpdGVtOiBTY09yZGVySXRlbSwgcHJpY2VDYXJkOiBBYnN0cmFjdFNjUHJpY2VDYXJkKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jYW5FZGl0KCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHByaWNlQ2FyZC5zaG93TG9hZGVyLnNldCh0cnVlKTtcblxuICAgICAgICAodGhpcy5vcmRlckl0ZW1zTGlzdExvYWRlciBhcyBTY0lPcmRlckVkaXRvckxvYWRlcilcbiAgICAgICAgICAgIC5kZWxldGVQcm9kdWN0JChpdGVtLCB0aGlzLm9yZGVyT3B0aW9ucz8ub3JkZXJJZCgpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHByaWNlQ2FyZC5xdWFudGl0eUNvbnRyb2wucGF0Y2hWYWx1ZShpdGVtLnF1YW50aXR5LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHByaWNlQ2FyZC5zaG93TG9hZGVyLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0L3QvtCy0LvRj9C10YIg0LrQvtC70LjRh9C10YHRgtCy0L4g0YLQvtCy0LDRgNCwLlxuICAgICAqXG4gICAgICogQHBhcmFtIG5ld1F1YW50aXR5INCd0L7QstC+0LUg0LfQvdCw0YfQtdC90LjQtSDQutC+0LvQuNGH0LXRgdGC0LLQsCDRgtC+0LLQsNGA0LAuXG4gICAgICogQHBhcmFtIHByaWNlQ2FyZCDQmtC+0LzQv9C+0L3QtdC90YIg0LrQsNGA0YLQvtGH0LrQuCDRgtC+0LLQsNGA0LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHBhdGNoSXRlbShuZXdRdWFudGl0eTogbnVtYmVyIHwgbnVsbCwgcHJpY2VDYXJkOiBBYnN0cmFjdFNjUHJpY2VDYXJkKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jYW5FZGl0KCkgfHwgIXByaWNlQ2FyZC5vcmRlckl0ZW0gfHwgIXByaWNlQ2FyZC5wcm9kdWN0IHx8ICFuZXdRdWFudGl0eSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJpY2VDYXJkLnNob3dMb2FkZXIuc2V0KHRydWUpO1xuXG4gICAgICAgICh0aGlzLm9yZGVySXRlbXNMaXN0TG9hZGVyIGFzIFNjSU9yZGVyRWRpdG9yTG9hZGVyKVxuICAgICAgICAgICAgLnVwZGF0ZVByb2R1Y3QkKHByaWNlQ2FyZC5vcmRlckl0ZW0uaWQsIHsgcXVhbnRpdHk6IG5ld1F1YW50aXR5IH0sIHRoaXMub3JkZXJPcHRpb25zPy5vcmRlcklkKCkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgICAgICAgICAgcHJpY2VDYXJkLnF1YW50aXR5Q29udHJvbC5wYXRjaFZhbHVlKHByaWNlQ2FyZC5vcmRlckl0ZW0hLnF1YW50aXR5LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHByaWNlQ2FyZC5zaG93TG9hZGVyLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntGC0LrRgNGL0LLQsNC10YIg0LzQvtC00LDQu9GM0L3QvtC1INC+0LrQvdC+INC+0L/QuNGB0LDQvdC40Y8g0YLQvtCy0LDRgNCwLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb2R1Y3Qg0KLQvtCy0LDRgC/Rg9GB0LvRg9Cz0LAsINC+0L/QuNGB0LDQvdC40LUg0LrQvtGC0L7RgNC+0Lkg0L3QtdC+0LHRhdC+0LTQuNC80L4g0L7RgtC+0LHRgNCw0LfQuNGC0YwuXG4gICAgICogQHBhcmFtIG9yZGVySXRlbSDQldC00LjQvdC40YfQvdCw0Y8g0L/QvtC30LjRhtC40Y8g0YLQvtCy0LDRgNCwL9GD0YHQu9GD0LPQuCDQsiDQt9Cw0LrQsNC30LUsINC00LvRjyDQutC+0YLQvtGA0L7QuSDQvdC10L7QsdGF0L7QtNC40LzQviDQvtGC0LrRgNGL0YLRjCDQutC+0L3RhNC40LPRg9GA0LDRgtC+0YAuXG4gICAgICogQHBhcmFtIG9yZGVySWQg0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LfQsNC60LDQt9CwLCDQsiDQutC+0YLQvtGA0L7QvCDQvdC10L7QsdGF0L7QtNC40LzQviDQvtGC0LrRgNGL0YLRjCDQutC+0L3RhNC40LPRg9GA0LDRgtC+0YAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG9wZW5Qcm9kdWN0SW5mb0RpYWxvZyhwcm9kdWN0OiBTY09yZGVySXRlbVsncHJvZHVjdCddLCBvcmRlckl0ZW0/OiBTY09yZGVySXRlbSwgb3JkZXJJZD86IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zY0RpYWxvZ1NlcnZpY2Uub3BlblByb2R1Y3RJbmZvRGlhbG9nKSB7XG4gICAgICAgICAgICB0aGlzLnNjRGlhbG9nU2VydmljZS5vcGVuUHJvZHVjdEluZm9EaWFsb2cocHJvZHVjdCwgb3JkZXJJdGVtLCBvcmRlcklkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0YLQutGA0YvQstCw0LXRgiDQvNC+0LTQsNC70YzQvdC+0LUg0L7QutC90L4g0LjQt9C80LXQvdC10L3QuNGPINGC0L7QstCw0YDQsCDQuNC70Lgg0LXQs9C+INC60L7QvdGE0LjQs9GD0YDQsNGC0L7RgNCwLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0g0J/QvtC30LjRhtC40Y8g0YLQvtCy0LDRgNCwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBvcGVuU2V0dGluZ3NEaWFsb2coaXRlbTogU2NPcmRlckl0ZW0pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaXNDb25maWd1cmF0b3IgPSBCb29sZWFuKGl0ZW0uY29uZmlndXJhdG9yKTtcblxuICAgICAgICBpZiAoaXNDb25maWd1cmF0b3IpIHtcbiAgICAgICAgICAgIHRoaXMuc2NEaWFsb2dTZXJ2aWNlLm9wZW5Db25maWd1cmF0b3JEaWFsb2coaXRlbS5wcm9kdWN0LCBpdGVtLCB0aGlzLm9yZGVyT3B0aW9ucz8ub3JkZXJJZCgpKTtcbiAgICAgICAgfSBlbHNlIGlmIChTY1VuaXRzSGVscGVyLnByb2R1Y3RJc01lYXN1cmFibGUoaXRlbS5wcm9kdWN0KSkge1xuICAgICAgICAgICAgdGhpcy5zY0RpYWxvZ1NlcnZpY2Uub3BlbkFkZE9yRWRpdGluZ0NhcnRJdGVtRGlhbG9nKGl0ZW0ucHJvZHVjdCwgaXRlbSwgdGhpcy5vcmRlck9wdGlvbnM/Lm9yZGVySWQoKSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntGC0LrRgNGL0LLQsNC10YIg0LTQuNCw0LvQvtCz0L7QstC+0LUg0L7QutC90L4gXCLQk9GA0LDRhNC40Log0LjQt9C80LXQvdC10L3QuNGPINGB0YLQvtC40LzQvtGB0YLQuFwiINC00LvRjyDRgtC+0LLQsNGA0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvZHVjdCDQotC+0LLQsNGAL9GD0YHQu9GD0LPQsCwg0LTQu9GPINC60L7RgtC+0YDQvtCz0L4g0L3QtdC+0LHRhdC+0LTQuNC80L4g0L7RgtC+0LHRgNCw0LfQuNGC0Ywg0LPRgNCw0YTQuNC6INC40LfQvNC10L3QtdC90LjRjyDRgdGC0L7QuNC80L7RgdGC0LguXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG9wZW5QcmljZUhpc3RvcnlDaGFydERpYWxvZyhwcm9kdWN0OiBTY09yZGVySXRlbVsncHJvZHVjdCddKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2NEaWFsb2dTZXJ2aWNlLm9wZW5QcmljZUhpc3RvcnlDaGFydERpYWxvZyhwcm9kdWN0KTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgW2Zvcm1Hcm91cF09XCJzZWxlY3Rpb25Gb3JtR3JvdXBcIlxuICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtNVwiXG4+XG4gICAgPCEtLSDQk9GA0YPQv9C/0Ysg0YLQvtCy0LDRgNC+0LIg0L/QviDQvdCw0L/RgNCw0LLQu9C10L3QuNGP0Lwg0L/RgNC+0LTQsNC2LiAtLT5cblxuICAgIEBmb3IgKGl0ZW0gb2YgaXRlbXNTaWduYWwoKTsgdHJhY2sgaXRlbS5pZCkge1xuICAgICAgICBAaWYgKCRpbmRleCAhPT0gMCkge1xuICAgICAgICAgICAgPGhyIGNsYXNzPVwibXQtYXV0byBoLXB4IHctZnVsbCBiZy10dWktY2xlYXJcIiAvPlxuICAgICAgICB9XG5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggaXRlbXMtY2VudGVyIGdhcC00IHJlbGF0aXZlXCI+XG4gICAgICAgICAgICBAbGV0IGlzQWN0aXZlID0gIXNlbGVjdGFibGUoKSB8fCBzZWxlY3Rpb25Gb3JtR3JvdXAuZ2V0KGl0ZW0uaWQpPy52YWx1ZTtcblxuICAgICAgICAgICAgPCEtLSDQp9C10LrQsdC+0LrRgSDQstGL0LHQvtGA0LAg0YLQvtCy0LDRgNCwLiAtLT5cbiAgICAgICAgICAgIEBpZiAoc2VsZWN0YWJsZSgpKSB7XG4gICAgICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgICAgIHR1aUNoZWNrYm94XG4gICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJpdGVtQ29tcG9uZW50LnNob3dMb2FkZXIoKVwiXG4gICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJtXCJcbiAgICAgICAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJpdGVtLmlkXCJcbiAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICA8IS0tINCa0LDRgNGC0L7Rh9C60LAg0YLQvtCy0LDRgNCwLiAtLT5cbiAgICAgICAgICAgIDxzYy1vcmRlci1pdGVtXG4gICAgICAgICAgICAgICAgI2l0ZW1Db21wb25lbnRcbiAgICAgICAgICAgICAgICBbcHJvZHVjdF09XCJpdGVtLnByb2R1Y3RcIlxuICAgICAgICAgICAgICAgIFtvcmRlckl0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgW3Nob3dRdWFudGl0eUNvbnRyb2xdPVwiY2FuRWRpdCgpICYmICFpdGVtLmNvbmZpZ3VyYXRvclwiXG4gICAgICAgICAgICAgICAgW2lzU2hvd0VkaXRDb250cm9sc109XCJjYW5FZGl0KClcIlxuICAgICAgICAgICAgICAgIGNsYXNzPVwidy1mdWxsIGR1cmF0aW9uLTIwMFwiXG4gICAgICAgICAgICAgICAgW2NsYXNzLm9wYWNpdHktNjBdPVwic2VsZWN0YWJsZSgpICYmICFzZWxlY3Rpb25Gb3JtR3JvdXAuZ2V0KGl0ZW0uaWQpPy52YWx1ZVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrQ2FyZEV2ZW50KT1cIm9wZW5Qcm9kdWN0SW5mb0RpYWxvZyhpdGVtLnByb2R1Y3QsIGl0ZW0sIG9yZGVyT3B0aW9ucz8ub3JkZXJJZCgpKVwiXG4gICAgICAgICAgICAgICAgKHF1YW50aXR5VmFsdWVDaGFuZ2VzKT1cInBhdGNoSXRlbSgkZXZlbnQsIGl0ZW1Db21wb25lbnQpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2tQcmljZUhpc3RvcnlFdmVudCk9XCJvcGVuUHJpY2VIaXN0b3J5Q2hhcnREaWFsb2coaXRlbS5wcm9kdWN0KVwiXG4gICAgICAgICAgICAgICAgKGNsaWNrU2V0dGluZ3MpPVwib3BlblNldHRpbmdzRGlhbG9nKGl0ZW0pXCJcbiAgICAgICAgICAgICAgICBbY2xhc3MucG9pbnRlci1ldmVudHMtbm9uZV09XCIhaXNBY3RpdmVcIlxuICAgICAgICAgICAgLz5cblxuICAgICAgICAgICAgPCEtLSDQmtC90L7Qv9C60LAg0YPQtNCw0LvQtdC90LjRjyDRgtC+0LLQsNGA0LAuIC0tPlxuICAgICAgICAgICAgQGlmIChjYW5FZGl0KCkpIHtcbiAgICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgICAgIHR1aUljb25CdXR0b25cbiAgICAgICAgICAgICAgICAgICAgaWNvblN0YXJ0PVwiQHR1aS50cmFzaFwiXG4gICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVJdGVtKGl0ZW0sIGl0ZW1Db21wb25lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgW2xvYWRpbmddPVwiaXRlbUNvbXBvbmVudC5zaG93TG9hZGVyKClcIlxuICAgICAgICAgICAgICAgICAgICBzaXplPVwic1wiXG4gICAgICAgICAgICAgICAgICAgIGFwcGVhcmFuY2U9XCJzZWNvbmRhcnlcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIiFhYnNvbHV0ZSBsZWZ0LTEgdG9wLTEgbGc6IXJlbGF0aXZlIGxnOmxlZnQtMCBsZzp0b3AtMCBsZzohc2VsZi1jZW50ZXJcIlxuICAgICAgICAgICAgICAgID48L2J1dHRvbj5cbiAgICAgICAgICAgIH1cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuXG4gICAgPCEtLSDQpNGD0YLQtdGAINCz0YDRg9C/0L/RiyDRgtC+0LLQsNGA0L7Qsi4gLS0+XG4gICAgPGRpdlxuICAgICAgICBzY1ByaW50PVwiY29zdFwiXG4gICAgICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBpdGVtcy1lbmQgZ2FwLTIuNVwiXG4gICAgPlxuICAgICAgICBAbGV0IHRvdGFsU3VtID0gc3VtU2VsZWN0ZWRJdGVtcygpO1xuICAgICAgICA8IS0tINCY0YLQvtCz0L7QstCw0Y8g0YHRg9C80LzQsC4gLS0+XG4gICAgICAgIDxkaXYgY2xhc3M9XCJ0ZXh0LWJhc2UgZm9udC1ib2xkXCI+0JjRgtC+0LPQvjoge3sgdG90YWxTdW0gfCB0dWlGb3JtYXROdW1iZXI6IHsgcHJlY2lzaW9uOiAyLCBkZWNpbWFsU2VwYXJhdG9yOiAnLicsIHJvdW5kaW5nOiAnY2VpbCcgfSB8IGFzeW5jIH19IHt7ICdSVUInIHwgdHVpQ3VycmVuY3kgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
|
|
207
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtb3JkZXItaXRlbXMtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvb3JkZXIvb3JkZXItaXRlbXMtbGlzdC9zYy1vcmRlci1pdGVtcy1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9vcmRlci9vcmRlci1pdGVtcy1saXN0L3NjLW9yZGVyLWl0ZW1zLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3ZILE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUcsT0FBTyxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsZUFBZSxFQUFxRCxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzSCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFNBQVMsRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUVyRCxPQUFPLEVBQXVCLGdCQUFn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QUM7WUFDekQsSUFBSSxDQUFDLGVBQWUsQ0FBQyw4QkFBOEIsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2hILENBQUM7SUFDTCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNPLDJCQUEyQixDQUFDLE9BQStCO1FBQ2pFLElBQUksQ0FBQyxlQUFlLENBQUMsMkJBQTJCLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUQsQ0FBQzsrR0FyTlEseUJBQXlCO21HQUF6Qix5QkFBeUIsMGhCQzNCdEMsbTZGQWdFQSw0Q0R4Q2Msb0JBQW9CLHNIQUFFLGdCQUFnQiwwRUFBRSxtQkFBbUIscXdCQUFFLFdBQVcsb0dBQUUsU0FBUyxvSUFBRSxnQkFBZ0Isa0hBQUUsZUFBZSwrQ0FBRSxTQUFTLHlDQUFFLG1CQUFtQjs7NEZBR3ZKLHlCQUF5QjtrQkFQckMsU0FBUztpQ0FDTSxJQUFJLFlBQ04scUJBQXFCLFdBRXRCLENBQUMsb0JBQW9CLEVBQUUsZ0JBQWdCLEVBQUUsbUJBQW1CLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsU0FBUyxFQUFFLG1CQUFtQixDQUFDLG1CQUNoSix1QkFBdUIsQ0FBQyxNQUFNOzhCQXdGM0MsS0FBSztzQkFEUixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXBhcmFtLXJlYXNzaWduICovXG5cbmltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgRGVzdHJveVJlZiwgaW5qZWN0LCBJbnB1dCwgaW5wdXQsIHNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgb3V0cHV0RnJvbU9ic2VydmFibGUsIHRha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUvcnhqcy1pbnRlcm9wJztcbmltcG9ydCB7IEZvcm1Db250cm9sLCBGb3JtR3JvdXAsIFJlYWN0aXZlRm9ybXNNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBTQ19PUkRFUl9MT0FERVIsIFNjSU9yZGVyRWRpdG9yTG9hZGVyLCBTY0lPcmRlckxvYWRlciwgU2NPcmRlckl0ZW0sIFNjVW5pdHNIZWxwZXIgfSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IFR1aUN1cnJlbmN5UGlwZSB9IGZyb20gJ0B0YWlnYS11aS9hZGRvbi1jb21tZXJjZSc7XG5pbXBvcnQgeyBUdWlCdXR0b24sIFR1aUZvcm1hdE51bWJlclBpcGUgfSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQgeyBUdWlCdXR0b25Mb2FkaW5nLCBUdWlDaGVja2JveCB9IGZyb20gJ0B0YWlnYS11aS9raXQnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgZmluYWxpemUsIG1hcCwgb2YgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQWJzdHJhY3RTY1ByaWNlQ2FyZCwgU2NQcmludERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgSVNjRGlhbG9nU2VydmljZSwgU0NfRElBTE9HX1NFUlZJQ0VfVE9LRU4gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMnO1xuaW1wb3J0IHsgU0NfT1JERVJfT1BUSU9OUywgU2NPcmRlck9wdGlvbnMgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3NjLW9yZGVyLW9wdGlvbnMnO1xuaW1wb3J0IHsgU2NPcmRlckl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9vcmRlci1pdGVtL3NjLW9yZGVyLWl0ZW0uY29tcG9uZW50JztcblxuLyoqXG4gKiDQmtC+0LzQv9C+0L3QtdC90YIg0YHQv9C40YHQutCwINGC0L7QstCw0YDQvtCyINC60L7RgNC30LjQvdGLLCDQt9Cw0LrQsNC30LAg0LjQu9C4INGH0LXRgNC90L7QstC40LrQsC5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ3NjLW9yZGVyLWl0ZW1zLWxpc3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zYy1vcmRlci1pdGVtcy1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBpbXBvcnRzOiBbU2NPcmRlckl0ZW1Db21wb25lbnQsIFNjUHJpbnREaXJlY3RpdmUsIFJlYWN0aXZlRm9ybXNNb2R1bGUsIFR1aUNoZWNrYm94LCBUdWlCdXR0b24sIFR1aUJ1dHRvbkxvYWRpbmcsIFR1aUN1cnJlbmN5UGlwZSwgQXN5bmNQaXBlLCBUdWlGb3JtYXROdW1iZXJQaXBlXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2NPcmRlckl0ZW1zTGlzdENvbXBvbmVudCB7XG4gICAgLyoqXG4gICAgICog0JLQvdGD0YLRgNC10L3QvdC40Lkg0YHQuNCz0L3QsNC7INGB0L/QuNGB0LrQsCDRjdC70LXQvNC10L3RgtC+0LIg0LrQvtGA0LfQuNC90YsgKNGC0L7QstCw0YDQvtCyKS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXRlbXNTaWduYWwgPSBzaWduYWw8U2NPcmRlckl0ZW1bXT4oW10pO1xuXG4gICAgLyoqXG4gICAgICog0JLQutC70Y7Rh9C40YLRjCDQstGL0LHQvtGAINC/0L7Qt9C40YbQuNC5INGH0LXQutCx0L7QutGB0LDQvNC4LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBzZWxlY3RhYmxlID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgICAvKipcbiAgICAgKiDQktC60LvRjtGH0LjRgtGMINGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40LUg0L/QvtC30LjRhtC40LkuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGVkaXRhYmxlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgLyoqXG4gICAgICog0JLQvdGD0YLRgNC10L3QvdGP0Y8g0LPRgNGD0L/Qv9CwINGE0L7RgNC80Ysg0LTQu9GPINCy0YvQsdC+0YDQsCDQv9C+0LfQuNGG0LjQuS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0aW9uRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cDxSZWNvcmQ8c3RyaW5nLCBGb3JtQ29udHJvbDxib29sZWFuPj4+KHt9KTtcblxuICAgIC8qKlxuICAgICAqINCe0L/RhtC40Lgg0LfQsNC60LDQt9CwICjRh9C10YDQvdC+0LLQuNC60LApLiDQn9GA0LXQtNC+0YHRgtCw0LLQu9GP0LXRgtGB0Y8g0LTQuNGA0LXQutGC0LjQstC+0Lkge0BsaW5rIFNjT3JkZXJBY2Nlc3NvckRpcmVjdGl2ZX0g0LIg0LrQvtC90YLQtdC60YHRgtC1INGH0LXRgNC90L7QstC40LrQsC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgb3JkZXJPcHRpb25zID0gaW5qZWN0PFNjT3JkZXJPcHRpb25zPihTQ19PUkRFUl9PUFRJT05TLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gICAgLyoqXG4gICAgICog0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDRiyDQstGL0LHRgNCw0L3QvdGL0YUg0L/QvtC30LjRhtC40LkuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGl0ZW1zSWRzID0gdG9TaWduYWwodGhpcy5zZWxlY3Rpb25Gb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUobWFwKCh2YWx1ZSkgPT4gT2JqZWN0LmVudHJpZXM8Ym9vbGVhbj4odmFsdWUgYXMgUmVjb3JkPHN0cmluZywgYm9vbGVhbj4pKSksIHtcbiAgICAgICAgaW5pdGlhbFZhbHVlOiBbXSxcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqINCh0LjQs9C90LDQuyDQuNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgNC+0LIg0LLRi9Cx0YDQsNC90L3Ri9GFINC/0L7Qt9C40YbQuNC5LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBzZWxlY3RlZEl0ZW1zSWRzID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBzZWxlY3RhYmxlID0gdGhpcy5zZWxlY3RhYmxlKCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuaXRlbXNJZHMoKVxuICAgICAgICAgICAgLmZpbHRlcigoWywgY2hlY2tlZF0pID0+ICFzZWxlY3RhYmxlIHx8IGNoZWNrZWQpXG4gICAgICAgICAgICAubWFwKChba2V5XSkgPT4ga2V5KTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqINCS0YvRhdC+0LTQvdGL0LUg0LTQsNC90L3Ri9C1INC/0YDQuCDQuNC30LzQtdC90LXQvdC40Lgg0LLRi9Cx0L7RgNCwINC/0L7Qt9C40YbQuNC5LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBzZWxlY3RlZEl0ZW1zSWRzQ2hhbmdlID0gb3V0cHV0RnJvbU9ic2VydmFibGUodG9PYnNlcnZhYmxlKHRoaXMuc2VsZWN0ZWRJdGVtc0lkcykpO1xuXG4gICAgLyoqXG4gICAgICog0KHRg9C80LzQsCDRgdGC0L7QuNC80L7RgdGC0Lgg0LLRi9Cx0YDQsNC90L3Ri9GFINC/0L7Qt9C40YbQuNC5LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBzdW1TZWxlY3RlZEl0ZW1zID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuaXRlbXNTaWduYWwoKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0ZWRJdGVtc0lkcyA9IHRoaXMuc2VsZWN0ZWRJdGVtc0lkcygpO1xuICAgICAgICBjb25zdCBzZWxlY3RhYmxlID0gdGhpcy5zZWxlY3RhYmxlKCk7XG5cbiAgICAgICAgcmV0dXJuIGl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gIXNlbGVjdGFibGUgfHwgc2VsZWN0ZWRJdGVtc0lkcy5pbmNsdWRlcyhpdGVtLmlkKSkucmVkdWNlKChzdW06IG51bWJlciwgaXRlbTogU2NPcmRlckl0ZW0pID0+IHN1bSArIGl0ZW0uY29zdFJ1YiwgMCk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0L/QvtC70YPRh9C10L3QuNGPINC4INGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40Y8g0YHQv9C40YHQutCwINGC0L7QstCw0YDQvtCyINC30LDQutCw0LfQsCAo0LrQvtGA0LfQuNC90LAgLyDQt9Cw0LrQsNC3IC8g0YfQtdGA0L3QvtCy0LjQuiA9INC30LDQutCw0LcpLlxuICAgICAqINCf0YDQtdC00L7RgdGC0LDQstC70Y/QtdGC0YHRjyDRgNC+0LTQuNGC0LXQu9C10Lwg0YfQtdGA0LXQtyDRgtC+0LrQtdC9IHtAbGluayBTQ19PUkRFUl9MT0FERVJ9ICjRgNC10LDQu9C40LfQsNGG0LjRjyB7QGxpbmsgU2NJT3JkZXJMb2FkZXJ9KS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgb3JkZXJJdGVtc0xpc3RMb2FkZXIgPSBpbmplY3Q8U2NJT3JkZXJMb2FkZXIgfCBTY0lPcmRlckVkaXRvckxvYWRlcj4oU0NfT1JERVJfTE9BREVSKTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0LzQvtC20L3QviDRgNC10LTQsNC60YLQuNGA0L7QstCw0YLRjCDQv9C+0LfQuNGG0LjQuC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgY2FuRWRpdCA9IGNvbXB1dGVkKCgpID0+IHRoaXMuZWRpdGFibGUoKSAmJiAndXBkYXRlUHJvZHVjdCQnIGluIHRoaXMub3JkZXJJdGVtc0xpc3RMb2FkZXIpO1xuXG4gICAgLyoqXG4gICAgICog0KHRgdGL0LvQutCwINC00LvRjyDQsNCy0YLQvtC80LDRgtC40YfQtdGB0LrQvtCz0L4g0YPQv9GA0LDQstC70LXQvdC40Y8g0YPQvdC40YfRgtC+0LbQtdC90LjQtdC8INC30LDQstC40YHQuNC80L7RgdGC0LXQuS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRlc3Ryb3lSZWYgPSBpbmplY3QoRGVzdHJveVJlZik7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0LTQu9GPINGA0LDQsdC+0YLRiyDRgSDQtNC40LDQu9C+0LPQvtCy0YvQvNC4INC+0LrQvdCw0LzQuC5cbiAgICAgKiDQn9GA0LXQtNC+0YHRgtCw0LLQu9GP0LXRgtGB0Y8g0YDQvtC00LjRgtC10LvQtdC8INGH0LXRgNC10Lcg0YLQvtC60LXQvSB7QGxpbmsgU0NfRElBTE9HX1NFUlZJQ0VfVE9LRU59LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc2NEaWFsb2dTZXJ2aWNlID0gaW5qZWN0PElTY0RpYWxvZ1NlcnZpY2U+KFNDX0RJQUxPR19TRVJWSUNFX1RPS0VOKTtcblxuICAgIC8qKlxuICAgICAqINCh0L/QuNGB0L7QuiDRjdC70LXQvNC10L3RgtC+0LIg0LrQvtGA0LfQuNC90YsgKNGC0L7QstCw0YDQvtCyKS4g0J/RgNC4INGD0YHRgtCw0L3QvtCy0LrQtSDRgdC40L3RhdGA0L7QvdC90L4g0L7QsdC90L7QstC70Y/QtdGCINC60L7QvdGC0YDQvtC70Ysg0LLRi9Cx0L7RgNCwINCyINGE0L7RgNC80LUuXG4gICAgICovXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgICBzZXQgaXRlbXModmFsdWU6IFNjT3JkZXJJdGVtW10pIHtcbiAgICAgICAgdGhpcy5pdGVtc1NpZ25hbC5zZXQodmFsdWUpO1xuICAgICAgICB0aGlzLnN5bmNTZWxlY3Rpb25Db250cm9scygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0LjQvdGF0YDQvtC90LjQt9C40YDRg9C10YIg0LrQvtC90YLRgNC+0LvRiyDRhNC+0YDQvNGLINCy0YvQsdC+0YDQsCDRgSDRgtC10LrRg9GJ0LjQvCDRgdC/0LjRgdC60L7QvCDRgtC+0LLQsNGA0L7Qsjog0YPQtNCw0LvRj9C10YIg0LrQvtC90YLRgNC+0LvRiyDQtNC70Y8g0L7RgtGB0YPRgtGB0YLQstGD0Y7RidC40YUgaWQsINC00L7QsdCw0LLQu9GP0LXRgiDQtNC70Y8g0L3QvtCy0YvRhS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHN5bmNTZWxlY3Rpb25Db250cm9scygpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGFibGUoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY3VycmVudEl0ZW1zID0gdGhpcy5pdGVtc1NpZ25hbCgpO1xuICAgICAgICBjb25zdCBjdXJyZW50SWRzID0gbmV3IFNldChjdXJyZW50SXRlbXMubWFwKChpdGVtKSA9PiBpdGVtLmlkKSk7XG5cbiAgICAgICAgT2JqZWN0LmtleXModGhpcy5zZWxlY3Rpb25Gb3JtR3JvdXAuY29udHJvbHMpLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAgIGlmICghY3VycmVudElkcy5oYXMobmFtZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkZvcm1Hcm91cC5yZW1vdmVDb250cm9sKG5hbWUgYXMgbmV2ZXIpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICBjdXJyZW50SXRlbXMuZm9yRWFjaCgoaXRlbSkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGlvbkZvcm1Hcm91cC5jb250YWlucyhpdGVtLmlkKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0aW9uRm9ybUdyb3VwLmFkZENvbnRyb2woaXRlbS5pZCwgbmV3IEZvcm1Db250cm9sKHRydWUsIHsgbm9uTnVsbGFibGU6IHRydWUgfSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQo9C00LDQu9GP0LXRgiDQv9C+0LfQuNGG0LjRji5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpdGVtINCf0L7Qt9C40YbQuNGPINGC0L7QstCw0YDQsCDQtNC70Y8g0YPQtNCw0LvQtdC90LjRjy5cbiAgICAgKiBAcGFyYW0gcHJpY2VDYXJkINCa0L7QvNC/0L7QvdC10L3RgiDQutCw0YDRgtC+0YfQutC4INGC0L7QstCw0YDQsC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZGVsZXRlSXRlbShpdGVtOiBTY09yZGVySXRlbSwgcHJpY2VDYXJkOiBBYnN0cmFjdFNjUHJpY2VDYXJkKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jYW5FZGl0KCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHByaWNlQ2FyZC5zaG93TG9hZGVyLnNldCh0cnVlKTtcblxuICAgICAgICAodGhpcy5vcmRlckl0ZW1zTGlzdExvYWRlciBhcyBTY0lPcmRlckVkaXRvckxvYWRlcilcbiAgICAgICAgICAgIC5kZWxldGVQcm9kdWN0JChpdGVtLCB0aGlzLm9yZGVyT3B0aW9ucz8ub3JkZXJJZCgpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgY2F0Y2hFcnJvcigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHByaWNlQ2FyZC5xdWFudGl0eUNvbnRyb2wucGF0Y2hWYWx1ZShpdGVtLnF1YW50aXR5LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHByaWNlQ2FyZC5zaG93TG9hZGVyLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0L3QvtCy0LvRj9C10YIg0LrQvtC70LjRh9C10YHRgtCy0L4g0YLQvtCy0LDRgNCwLlxuICAgICAqXG4gICAgICogQHBhcmFtIG5ld1F1YW50aXR5INCd0L7QstC+0LUg0LfQvdCw0YfQtdC90LjQtSDQutC+0LvQuNGH0LXRgdGC0LLQsCDRgtC+0LLQsNGA0LAuXG4gICAgICogQHBhcmFtIHByaWNlQ2FyZCDQmtC+0LzQv9C+0L3QtdC90YIg0LrQsNGA0YLQvtGH0LrQuCDRgtC+0LLQsNGA0LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHBhdGNoSXRlbShuZXdRdWFudGl0eTogbnVtYmVyIHwgbnVsbCwgcHJpY2VDYXJkOiBBYnN0cmFjdFNjUHJpY2VDYXJkKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5jYW5FZGl0KCkgfHwgIXByaWNlQ2FyZC5vcmRlckl0ZW0gfHwgIXByaWNlQ2FyZC5wcm9kdWN0IHx8ICFuZXdRdWFudGl0eSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgcHJpY2VDYXJkLnNob3dMb2FkZXIuc2V0KHRydWUpO1xuXG4gICAgICAgICh0aGlzLm9yZGVySXRlbXNMaXN0TG9hZGVyIGFzIFNjSU9yZGVyRWRpdG9yTG9hZGVyKVxuICAgICAgICAgICAgLnVwZGF0ZVByb2R1Y3QkKHByaWNlQ2FyZC5vcmRlckl0ZW0uaWQsIHsgcXVhbnRpdHk6IG5ld1F1YW50aXR5IH0sIHRoaXMub3JkZXJPcHRpb25zPy5vcmRlcklkKCkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBjYXRjaEVycm9yKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1ub24tbnVsbC1hc3NlcnRpb25cbiAgICAgICAgICAgICAgICAgICAgcHJpY2VDYXJkLnF1YW50aXR5Q29udHJvbC5wYXRjaFZhbHVlKHByaWNlQ2FyZC5vcmRlckl0ZW0hLnF1YW50aXR5LCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbWl0RXZlbnQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YoKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHByaWNlQ2FyZC5zaG93TG9hZGVyLnNldChmYWxzZSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntGC0LrRgNGL0LLQsNC10YIg0LzQvtC00LDQu9GM0L3QvtC1INC+0LrQvdC+INC+0L/QuNGB0LDQvdC40Y8g0YLQvtCy0LDRgNCwLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb2R1Y3Qg0KLQvtCy0LDRgC/Rg9GB0LvRg9Cz0LAsINC+0L/QuNGB0LDQvdC40LUg0LrQvtGC0L7RgNC+0Lkg0L3QtdC+0LHRhdC+0LTQuNC80L4g0L7RgtC+0LHRgNCw0LfQuNGC0YwuXG4gICAgICogQHBhcmFtIG9yZGVySXRlbSDQldC00LjQvdC40YfQvdCw0Y8g0L/QvtC30LjRhtC40Y8g0YLQvtCy0LDRgNCwL9GD0YHQu9GD0LPQuCDQsiDQt9Cw0LrQsNC30LUsINC00LvRjyDQutC+0YLQvtGA0L7QuSDQvdC10L7QsdGF0L7QtNC40LzQviDQvtGC0LrRgNGL0YLRjCDQutC+0L3RhNC40LPRg9GA0LDRgtC+0YAuXG4gICAgICogQHBhcmFtIG9yZGVySWQg0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LfQsNC60LDQt9CwLCDQsiDQutC+0YLQvtGA0L7QvCDQvdC10L7QsdGF0L7QtNC40LzQviDQvtGC0LrRgNGL0YLRjCDQutC+0L3RhNC40LPRg9GA0LDRgtC+0YAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG9wZW5Qcm9kdWN0SW5mb0RpYWxvZyhwcm9kdWN0OiBTY09yZGVySXRlbVsncHJvZHVjdCddLCBvcmRlckl0ZW0/OiBTY09yZGVySXRlbSwgb3JkZXJJZD86IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zY0RpYWxvZ1NlcnZpY2Uub3BlblByb2R1Y3RJbmZvRGlhbG9nKSB7XG4gICAgICAgICAgICB0aGlzLnNjRGlhbG9nU2VydmljZS5vcGVuUHJvZHVjdEluZm9EaWFsb2cocHJvZHVjdCwgb3JkZXJJdGVtLCBvcmRlcklkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0YLQutGA0YvQstCw0LXRgiDQvNC+0LTQsNC70YzQvdC+0LUg0L7QutC90L4g0LjQt9C80LXQvdC10L3QuNGPINGC0L7QstCw0YDQsCDQuNC70Lgg0LXQs9C+INC60L7QvdGE0LjQs9GD0YDQsNGC0L7RgNCwLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0g0J/QvtC30LjRhtC40Y8g0YLQvtCy0LDRgNCwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBvcGVuU2V0dGluZ3NEaWFsb2coaXRlbTogU2NPcmRlckl0ZW0pOiB2b2lkIHtcbiAgICAgICAgY29uc3QgaXNDb25maWd1cmF0b3IgPSBCb29sZWFuKGl0ZW0uY29uZmlndXJhdG9yKTtcblxuICAgICAgICBpZiAoaXNDb25maWd1cmF0b3IpIHtcbiAgICAgICAgICAgIHRoaXMuc2NEaWFsb2dTZXJ2aWNlLm9wZW5Db25maWd1cmF0b3JEaWFsb2coaXRlbS5wcm9kdWN0LCBpdGVtLCB0aGlzLm9yZGVyT3B0aW9ucz8ub3JkZXJJZCgpKTtcbiAgICAgICAgfSBlbHNlIGlmIChTY1VuaXRzSGVscGVyLnByb2R1Y3RJc01lYXN1cmFibGUoaXRlbS5wcm9kdWN0KSkge1xuICAgICAgICAgICAgdGhpcy5zY0RpYWxvZ1NlcnZpY2Uub3BlbkFkZE9yRWRpdGluZ0NhcnRJdGVtRGlhbG9nKGl0ZW0ucHJvZHVjdCwgaXRlbSwgdGhpcy5vcmRlck9wdGlvbnM/Lm9yZGVySWQoKSwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntGC0LrRgNGL0LLQsNC10YIg0LTQuNCw0LvQvtCz0L7QstC+0LUg0L7QutC90L4gXCLQk9GA0LDRhNC40Log0LjQt9C80LXQvdC10L3QuNGPINGB0YLQvtC40LzQvtGB0YLQuFwiINC00LvRjyDRgtC+0LLQsNGA0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvZHVjdCDQotC+0LLQsNGAL9GD0YHQu9GD0LPQsCwg0LTQu9GPINC60L7RgtC+0YDQvtCz0L4g0L3QtdC+0LHRhdC+0LTQuNC80L4g0L7RgtC+0LHRgNCw0LfQuNGC0Ywg0LPRgNCw0YTQuNC6INC40LfQvNC10L3QtdC90LjRjyDRgdGC0L7QuNC80L7RgdGC0LguXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG9wZW5QcmljZUhpc3RvcnlDaGFydERpYWxvZyhwcm9kdWN0OiBTY09yZGVySXRlbVsncHJvZHVjdCddKTogdm9pZCB7XG4gICAgICAgIHRoaXMuc2NEaWFsb2dTZXJ2aWNlLm9wZW5QcmljZUhpc3RvcnlDaGFydERpYWxvZyhwcm9kdWN0KTtcbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgW2Zvcm1Hcm91cF09XCJzZWxlY3Rpb25Gb3JtR3JvdXBcIlxuICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtNVwiXG4+XG4gICAgQGZvciAoaXRlbSBvZiBpdGVtc1NpZ25hbCgpOyB0cmFjayBpdGVtLmlkKSB7XG4gICAgICAgIEBpZiAoJGluZGV4ICE9PSAwKSB7XG4gICAgICAgICAgICA8aHIgY2xhc3M9XCJtdC1hdXRvIGgtcHggdy1mdWxsIGJnLXR1aS1jbGVhclwiIC8+XG4gICAgICAgIH1cblxuICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBpdGVtcy1jZW50ZXIgZ2FwLTQgcmVsYXRpdmVcIj5cbiAgICAgICAgICAgIEBsZXQgaXNBY3RpdmUgPSAhc2VsZWN0YWJsZSgpIHx8IHNlbGVjdGlvbkZvcm1Hcm91cC5nZXQoaXRlbS5pZCk/LnZhbHVlO1xuXG4gICAgICAgICAgICA8IS0tINCn0LXQutCx0L7QutGBINCy0YvQsdC+0YDQsCDRgtC+0LLQsNGA0LAuIC0tPlxuICAgICAgICAgICAgQGlmIChzZWxlY3RhYmxlKCkpIHtcbiAgICAgICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICAgICAgdHVpQ2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cIml0ZW1Db21wb25lbnQuc2hvd0xvYWRlcigpXCJcbiAgICAgICAgICAgICAgICAgICAgdHlwZT1cImNoZWNrYm94XCJcbiAgICAgICAgICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIml0ZW0uaWRcIlxuICAgICAgICAgICAgICAgIC8+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDwhLS0g0JrQsNGA0YLQvtGH0LrQsCDRgtC+0LLQsNGA0LAuIC0tPlxuICAgICAgICAgICAgPHNjLW9yZGVyLWl0ZW1cbiAgICAgICAgICAgICAgICAjaXRlbUNvbXBvbmVudFxuICAgICAgICAgICAgICAgIFtwcm9kdWN0XT1cIml0ZW0ucHJvZHVjdFwiXG4gICAgICAgICAgICAgICAgW29yZGVySXRlbV09XCJpdGVtXCJcbiAgICAgICAgICAgICAgICBbc2hvd1F1YW50aXR5Q29udHJvbF09XCJjYW5FZGl0KCkgJiYgIWl0ZW0uY29uZmlndXJhdG9yXCJcbiAgICAgICAgICAgICAgICBbaXNTaG93RWRpdENvbnRyb2xzXT1cImNhbkVkaXQoKVwiXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJ3LWZ1bGwgZHVyYXRpb24tMjAwXCJcbiAgICAgICAgICAgICAgICBbY2xhc3Mub3BhY2l0eS02MF09XCJzZWxlY3RhYmxlKCkgJiYgIXNlbGVjdGlvbkZvcm1Hcm91cC5nZXQoaXRlbS5pZCk/LnZhbHVlXCJcbiAgICAgICAgICAgICAgICAoY2xpY2tDYXJkRXZlbnQpPVwib3BlblByb2R1Y3RJbmZvRGlhbG9nKGl0ZW0ucHJvZHVjdCwgaXRlbSwgb3JkZXJPcHRpb25zPy5vcmRlcklkKCkpXCJcbiAgICAgICAgICAgICAgICAocXVhbnRpdHlWYWx1ZUNoYW5nZXMpPVwicGF0Y2hJdGVtKCRldmVudCwgaXRlbUNvbXBvbmVudClcIlxuICAgICAgICAgICAgICAgIChjbGlja1ByaWNlSGlzdG9yeUV2ZW50KT1cIm9wZW5QcmljZUhpc3RvcnlDaGFydERpYWxvZyhpdGVtLnByb2R1Y3QpXCJcbiAgICAgICAgICAgICAgICAoY2xpY2tTZXR0aW5ncyk9XCJvcGVuU2V0dGluZ3NEaWFsb2coaXRlbSlcIlxuICAgICAgICAgICAgICAgIFtjbGFzcy5wb2ludGVyLWV2ZW50cy1ub25lXT1cIiFpc0FjdGl2ZVwiXG4gICAgICAgICAgICAvPlxuXG4gICAgICAgICAgICA8IS0tINCa0L3QvtC/0LrQsCDRg9C00LDQu9C10L3QuNGPINGC0L7QstCw0YDQsC4gLS0+XG4gICAgICAgICAgICBAaWYgKGNhbkVkaXQoKSkge1xuICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgdHVpSWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICBpY29uU3RhcnQ9XCJAdHVpLnRyYXNoXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrKT1cImRlbGV0ZUl0ZW0oaXRlbSwgaXRlbUNvbXBvbmVudClcIlxuICAgICAgICAgICAgICAgICAgICBbbG9hZGluZ109XCJpdGVtQ29tcG9uZW50LnNob3dMb2FkZXIoKVwiXG4gICAgICAgICAgICAgICAgICAgIHNpemU9XCJzXCJcbiAgICAgICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgIGNsYXNzPVwiIWFic29sdXRlIGxlZnQtMSB0b3AtMSBsZzohcmVsYXRpdmUgbGc6bGVmdC0wIGxnOnRvcC0wIGxnOiFzZWxmLWNlbnRlclwiXG4gICAgICAgICAgICAgICAgPjwvYnV0dG9uPlxuICAgICAgICAgICAgfVxuICAgICAgICA8L2Rpdj5cbiAgICB9XG5cbiAgICA8IS0tINCk0YPRgtC10YAg0YHQv9C40YHQutCwLiAtLT5cbiAgICA8ZGl2XG4gICAgICAgIHNjUHJpbnQ9XCJjb3N0XCJcbiAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWVuZCBnYXAtMi41XCJcbiAgICA+XG4gICAgICAgIEBsZXQgdG90YWxTdW0gPSBzdW1TZWxlY3RlZEl0ZW1zKCk7XG4gICAgICAgIDwhLS0g0JjRgtC+0LPQvtCy0LDRjyDRgdGD0LzQvNCwLiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtYmFzZSBmb250LWJvbGRcIj7QmNGC0L7Qs9C+OiB7eyB0b3RhbFN1bSB8IHR1aUZvcm1hdE51bWJlcjogeyBwcmVjaXNpb246IDIsIGRlY2ltYWxTZXBhcmF0b3I6ICcuJywgcm91bmRpbmc6ICdjZWlsJyB9IHwgYXN5bmMgfX0ge3sgJ1JVQicgfCB0dWlDdXJyZW5jeSB9fTwvZGl2PlxuICAgIDwvZGl2PlxuPC9kaXY+XG4iXX0=
|
package/esm2022/order/order-items-list-with-actions/sc-order-items-list-with-actions.component.mjs
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, computed, effect, input, model } from '@angular/core';
|
|
2
|
+
import { ScOrderItemsListComponent } from '../order-items-list/sc-order-items-list.component';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
/**
|
|
5
|
+
* Список позиций заказа с действиями и блоком позиций, которые больше не предоставляются.
|
|
6
|
+
*/
|
|
7
|
+
export class ScOrderItemsListWithActionsComponent {
|
|
8
|
+
/**
|
|
9
|
+
* Инициализирует экземпляр класса {@link ScOrderItemsListWithActionsComponent}.
|
|
10
|
+
*/
|
|
11
|
+
constructor() {
|
|
12
|
+
/**
|
|
13
|
+
* Товары заказа.
|
|
14
|
+
*/
|
|
15
|
+
this.items = input.required();
|
|
16
|
+
/**
|
|
17
|
+
* Включить выбор позиций чекбоксами.
|
|
18
|
+
*/
|
|
19
|
+
this.selectable = input(true);
|
|
20
|
+
/**
|
|
21
|
+
* Включить редактирование позиций.
|
|
22
|
+
*/
|
|
23
|
+
this.editable = input(false);
|
|
24
|
+
/**
|
|
25
|
+
* Позиции, доступные для заказа.
|
|
26
|
+
*/
|
|
27
|
+
this.availableItems = computed(() => this.items().filter((item) => !item.product.isNull && !item.product.isHidden));
|
|
28
|
+
/**
|
|
29
|
+
* Позиции корзины, которые больше не предоставляются.
|
|
30
|
+
*/
|
|
31
|
+
this.nullItems = computed(() => this.items().filter((item) => item.product.isNull || item.product.isHidden));
|
|
32
|
+
/**
|
|
33
|
+
* Идентификаторы выбранных позиций.
|
|
34
|
+
*/
|
|
35
|
+
this.selectedItemsIds = model([]);
|
|
36
|
+
// Оставляет в выборе только доступные позиции: без них список выбора не отрисовывается и выбор не сбрасывает.
|
|
37
|
+
effect(() => {
|
|
38
|
+
const availableIds = new Set(this.availableItems().map((item) => item.id));
|
|
39
|
+
const selectedItemsIds = this.selectedItemsIds();
|
|
40
|
+
const actualIds = selectedItemsIds.filter((id) => availableIds.has(id));
|
|
41
|
+
if (actualIds.length !== selectedItemsIds.length) {
|
|
42
|
+
this.selectedItemsIds.set(actualIds);
|
|
43
|
+
}
|
|
44
|
+
}, { allowSignalWrites: true });
|
|
45
|
+
}
|
|
46
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScOrderItemsListWithActionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
|
|
47
|
+
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.14", type: ScOrderItemsListWithActionsComponent, isStandalone: true, selector: "sc-order-items-list-with-actions", inputs: { items: { classPropertyName: "items", publicName: "items", isSignal: true, isRequired: true, transformFunction: null }, selectable: { classPropertyName: "selectable", publicName: "selectable", isSignal: true, isRequired: false, transformFunction: null }, editable: { classPropertyName: "editable", publicName: "editable", isSignal: true, isRequired: false, transformFunction: null }, selectedItemsIds: { classPropertyName: "selectedItemsIds", publicName: "selectedItemsIds", isSignal: true, isRequired: false, transformFunction: null } }, outputs: { selectedItemsIds: "selectedItemsIdsChange" }, ngImport: i0, template: "<div class=\"flex flex-col gap-5\">\n <div class=\"flex flex-col gap-2.5\">\n @if (availableItems().length) {\n <sc-order-items-list\n [items]=\"availableItems()\"\n [selectable]=\"selectable()\"\n [editable]=\"editable()\"\n (selectedItemsIdsChange)=\"selectedItemsIds.set($event)\"\n />\n }\n\n <!-- \u0424\u0443\u0442\u0435\u0440 \u0441\u043F\u0438\u0441\u043A\u0430 \u0442\u043E\u0432\u0430\u0440\u043E\u0432. -->\n <div class=\"flex flex-col items-center sm:flex-row sm:items-start sm:flex-wrap-reverse grow gap-x-2.5 gap-y-4\">\n <ng-content select=\"[footerActions]\" />\n </div>\n </div>\n\n @if (nullItems().length) {\n <div class=\"flex flex-col gap-2.5\">\n <div class=\"text-base font-bold\">\u0422\u043E\u0432\u0430\u0440\u044B \u0438 \u0443\u0441\u043B\u0443\u0433\u0438, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u043F\u0440\u0435\u0434\u043E\u0441\u0442\u0430\u0432\u043B\u044F\u044E\u0442\u0441\u044F.</div>\n\n <sc-order-items-list\n [items]=\"nullItems()\"\n [selectable]=\"false\"\n [editable]=\"editable()\"\n />\n </div>\n }\n</div>\n", dependencies: [{ kind: "component", type: ScOrderItemsListComponent, selector: "sc-order-items-list", inputs: ["selectable", "editable", "items"], outputs: ["selectedItemsIdsChange"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
48
|
+
}
|
|
49
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScOrderItemsListWithActionsComponent, decorators: [{
|
|
50
|
+
type: Component,
|
|
51
|
+
args: [{ standalone: true, selector: 'sc-order-items-list-with-actions', imports: [ScOrderItemsListComponent], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"flex flex-col gap-5\">\n <div class=\"flex flex-col gap-2.5\">\n @if (availableItems().length) {\n <sc-order-items-list\n [items]=\"availableItems()\"\n [selectable]=\"selectable()\"\n [editable]=\"editable()\"\n (selectedItemsIdsChange)=\"selectedItemsIds.set($event)\"\n />\n }\n\n <!-- \u0424\u0443\u0442\u0435\u0440 \u0441\u043F\u0438\u0441\u043A\u0430 \u0442\u043E\u0432\u0430\u0440\u043E\u0432. -->\n <div class=\"flex flex-col items-center sm:flex-row sm:items-start sm:flex-wrap-reverse grow gap-x-2.5 gap-y-4\">\n <ng-content select=\"[footerActions]\" />\n </div>\n </div>\n\n @if (nullItems().length) {\n <div class=\"flex flex-col gap-2.5\">\n <div class=\"text-base font-bold\">\u0422\u043E\u0432\u0430\u0440\u044B \u0438 \u0443\u0441\u043B\u0443\u0433\u0438, \u043A\u043E\u0442\u043E\u0440\u044B\u0435 \u0431\u043E\u043B\u044C\u0448\u0435 \u043D\u0435 \u043F\u0440\u0435\u0434\u043E\u0441\u0442\u0430\u0432\u043B\u044F\u044E\u0442\u0441\u044F.</div>\n\n <sc-order-items-list\n [items]=\"nullItems()\"\n [selectable]=\"false\"\n [editable]=\"editable()\"\n />\n </div>\n }\n</div>\n" }]
|
|
52
|
+
}], ctorParameters: () => [] });
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtb3JkZXItaXRlbXMtbGlzdC13aXRoLWFjdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpZW50LXVpL29yZGVyL29yZGVyLWl0ZW1zLWxpc3Qtd2l0aC1hY3Rpb25zL3NjLW9yZGVyLWl0ZW1zLWxpc3Qtd2l0aC1hY3Rpb25zLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9vcmRlci9vcmRlci1pdGVtcy1saXN0LXdpdGgtYWN0aW9ucy9zYy1vcmRlci1pdGVtcy1saXN0LXdpdGgtYWN0aW9ucy5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUduRyxPQUFPLEVBQUUseUJBQXlCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQzs7QUFFOUY7O0dBRUc7QUFRSCxNQUFNLE9BQU8sb0NBQW9DO0lBK0I3Qzs7T0FFRztJQUNIO1FBakNBOztXQUVHO1FBQ2EsVUFBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQWlCLENBQUM7UUFFeEQ7O1dBRUc7UUFDYSxlQUFVLEdBQUcsS0FBSyxDQUFVLElBQUksQ0FBQyxDQUFDO1FBRWxEOztXQUVHO1FBQ2EsYUFBUSxHQUFHLEtBQUssQ0FBVSxLQUFLLENBQUMsQ0FBQztRQUVqRDs7V0FFRztRQUNnQixtQkFBYyxHQUFHLFFBQVEsQ0FBZ0IsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUVqSjs7V0FFRztRQUNnQixjQUFTLEdBQUcsUUFBUSxDQUFnQixHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFFMUk7O1dBRUc7UUFDYSxxQkFBZ0IsR0FBRyxLQUFLLENBQVcsRUFBRSxDQUFDLENBQUM7UUFNbkQsOEdBQThHO1FBQzlHLE1BQU0sQ0FDRixHQUFHLEVBQUU7WUFDRCxNQUFNLFlBQVksR0FBRyxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUMzRSxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1lBQ2pELE1BQU0sU0FBUyxHQUFHLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBRXhFLElBQUksU0FBUyxDQUFDLE1BQU0sS0FBSyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsQ0FBQztnQkFDL0MsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUN6QyxDQUFDO1FBQ0wsQ0FBQyxFQUNELEVBQUUsaUJBQWlCLEVBQUUsSUFBSSxFQUFFLENBQzlCLENBQUM7SUFDTixDQUFDOytHQWhEUSxvQ0FBb0M7bUdBQXBDLG9DQUFvQyx5ckJDZmpELDh6Q0E2QkEsNENEakJjLHlCQUF5Qjs7NEZBRzFCLG9DQUFvQztrQkFQaEQsU0FBUztpQ0FDTSxJQUFJLFlBQ04sa0NBQWtDLFdBRW5DLENBQUMseUJBQXlCLENBQUMsbUJBQ25CLHVCQUF1QixDQUFDLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgZWZmZWN0LCBpbnB1dCwgbW9kZWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFNjT3JkZXJJdGVtIH0gZnJvbSAnQHNuYWJjZW50ci9jbGllbnQtY29yZSc7XG5cbmltcG9ydCB7IFNjT3JkZXJJdGVtc0xpc3RDb21wb25lbnQgfSBmcm9tICcuLi9vcmRlci1pdGVtcy1saXN0L3NjLW9yZGVyLWl0ZW1zLWxpc3QuY29tcG9uZW50JztcblxuLyoqXG4gKiDQodC/0LjRgdC+0Log0L/QvtC30LjRhtC40Lkg0LfQsNC60LDQt9CwINGBINC00LXQudGB0YLQstC40Y/QvNC4INC4INCx0LvQvtC60L7QvCDQv9C+0LfQuNGG0LjQuSwg0LrQvtGC0L7RgNGL0LUg0LHQvtC70YzRiNC1INC90LUg0L/RgNC10LTQvtGB0YLQsNCy0LvRj9GO0YLRgdGPLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnc2Mtb3JkZXItaXRlbXMtbGlzdC13aXRoLWFjdGlvbnMnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zYy1vcmRlci1pdGVtcy1saXN0LXdpdGgtYWN0aW9ucy5jb21wb25lbnQuaHRtbCcsXG4gICAgaW1wb3J0czogW1NjT3JkZXJJdGVtc0xpc3RDb21wb25lbnRdLFxuICAgIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxufSlcbmV4cG9ydCBjbGFzcyBTY09yZGVySXRlbXNMaXN0V2l0aEFjdGlvbnNDb21wb25lbnQge1xuICAgIC8qKlxuICAgICAqINCi0L7QstCw0YDRiyDQt9Cw0LrQsNC30LAuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGl0ZW1zID0gaW5wdXQucmVxdWlyZWQ8U2NPcmRlckl0ZW1bXT4oKTtcblxuICAgIC8qKlxuICAgICAqINCS0LrQu9GO0YfQuNGC0Ywg0LLRi9Cx0L7RgCDQv9C+0LfQuNGG0LjQuSDRh9C10LrQsdC+0LrRgdCw0LzQuC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0YWJsZSA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuXG4gICAgLyoqXG4gICAgICog0JLQutC70Y7Rh9C40YLRjCDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNC1INC/0L7Qt9C40YbQuNC5LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBlZGl0YWJsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqINCf0L7Qt9C40YbQuNC4LCDQtNC+0YHRgtGD0L/QvdGL0LUg0LTQu9GPINC30LDQutCw0LfQsC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgYXZhaWxhYmxlSXRlbXMgPSBjb21wdXRlZDxTY09yZGVySXRlbVtdPigoKSA9PiB0aGlzLml0ZW1zKCkuZmlsdGVyKChpdGVtKSA9PiAhaXRlbS5wcm9kdWN0LmlzTnVsbCAmJiAhaXRlbS5wcm9kdWN0LmlzSGlkZGVuKSk7XG5cbiAgICAvKipcbiAgICAgKiDQn9C+0LfQuNGG0LjQuCDQutC+0YDQt9C40L3Riywg0LrQvtGC0L7RgNGL0LUg0LHQvtC70YzRiNC1INC90LUg0L/RgNC10LTQvtGB0YLQsNCy0LvRj9GO0YLRgdGPLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBudWxsSXRlbXMgPSBjb21wdXRlZDxTY09yZGVySXRlbVtdPigoKSA9PiB0aGlzLml0ZW1zKCkuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnByb2R1Y3QuaXNOdWxsIHx8IGl0ZW0ucHJvZHVjdC5pc0hpZGRlbikpO1xuXG4gICAgLyoqXG4gICAgICog0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDRiyDQstGL0LHRgNCw0L3QvdGL0YUg0L/QvtC30LjRhtC40LkuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHNlbGVjdGVkSXRlbXNJZHMgPSBtb2RlbDxzdHJpbmdbXT4oW10pO1xuXG4gICAgLyoqXG4gICAgICog0JjQvdC40YbQuNCw0LvQuNC30LjRgNGD0LXRgiDRjdC60LfQtdC80L/Qu9GP0YAg0LrQu9Cw0YHRgdCwIHtAbGluayBTY09yZGVySXRlbXNMaXN0V2l0aEFjdGlvbnNDb21wb25lbnR9LlxuICAgICAqL1xuICAgIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgLy8g0J7RgdGC0LDQstC70Y/QtdGCINCyINCy0YvQsdC+0YDQtSDRgtC+0LvRjNC60L4g0LTQvtGB0YLRg9C/0L3Ri9C1INC/0L7Qt9C40YbQuNC4OiDQsdC10Lcg0L3QuNGFINGB0L/QuNGB0L7QuiDQstGL0LHQvtGA0LAg0L3QtSDQvtGC0YDQuNGB0L7QstGL0LLQsNC10YLRgdGPINC4INCy0YvQsdC+0YAg0L3QtSDRgdCx0YDQsNGB0YvQstCw0LXRgi5cbiAgICAgICAgZWZmZWN0KFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGF2YWlsYWJsZUlkcyA9IG5ldyBTZXQodGhpcy5hdmFpbGFibGVJdGVtcygpLm1hcCgoaXRlbSkgPT4gaXRlbS5pZCkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbXNJZHMgPSB0aGlzLnNlbGVjdGVkSXRlbXNJZHMoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBhY3R1YWxJZHMgPSBzZWxlY3RlZEl0ZW1zSWRzLmZpbHRlcigoaWQpID0+IGF2YWlsYWJsZUlkcy5oYXMoaWQpKTtcblxuICAgICAgICAgICAgICAgIGlmIChhY3R1YWxJZHMubGVuZ3RoICE9PSBzZWxlY3RlZEl0ZW1zSWRzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbXNJZHMuc2V0KGFjdHVhbElkcyk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfVxuICAgICAgICApO1xuICAgIH1cbn1cbiIsIjxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGdhcC01XCI+XG4gICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTIuNVwiPlxuICAgICAgICBAaWYgKGF2YWlsYWJsZUl0ZW1zKCkubGVuZ3RoKSB7XG4gICAgICAgICAgICA8c2Mtb3JkZXItaXRlbXMtbGlzdFxuICAgICAgICAgICAgICAgIFtpdGVtc109XCJhdmFpbGFibGVJdGVtcygpXCJcbiAgICAgICAgICAgICAgICBbc2VsZWN0YWJsZV09XCJzZWxlY3RhYmxlKClcIlxuICAgICAgICAgICAgICAgIFtlZGl0YWJsZV09XCJlZGl0YWJsZSgpXCJcbiAgICAgICAgICAgICAgICAoc2VsZWN0ZWRJdGVtc0lkc0NoYW5nZSk9XCJzZWxlY3RlZEl0ZW1zSWRzLnNldCgkZXZlbnQpXCJcbiAgICAgICAgICAgIC8+XG4gICAgICAgIH1cblxuICAgICAgICA8IS0tINCk0YPRgtC10YAg0YHQv9C40YHQutCwINGC0L7QstCw0YDQvtCyLiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgaXRlbXMtY2VudGVyIHNtOmZsZXgtcm93IHNtOml0ZW1zLXN0YXJ0IHNtOmZsZXgtd3JhcC1yZXZlcnNlIGdyb3cgZ2FwLXgtMi41IGdhcC15LTRcIj5cbiAgICAgICAgICAgIDxuZy1jb250ZW50IHNlbGVjdD1cIltmb290ZXJBY3Rpb25zXVwiIC8+XG4gICAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuXG4gICAgQGlmIChudWxsSXRlbXMoKS5sZW5ndGgpIHtcbiAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTIuNVwiPlxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtYmFzZSBmb250LWJvbGRcIj7QotC+0LLQsNGA0Ysg0Lgg0YPRgdC70YPQs9C4LCDQutC+0YLQvtGA0YvQtSDQsdC+0LvRjNGI0LUg0L3QtSDQv9GA0LXQtNC+0YHRgtCw0LLQu9GP0Y7RgtGB0Y8uPC9kaXY+XG5cbiAgICAgICAgICAgIDxzYy1vcmRlci1pdGVtcy1saXN0XG4gICAgICAgICAgICAgICAgW2l0ZW1zXT1cIm51bGxJdGVtcygpXCJcbiAgICAgICAgICAgICAgICBbc2VsZWN0YWJsZV09XCJmYWxzZVwiXG4gICAgICAgICAgICAgICAgW2VkaXRhYmxlXT1cImVkaXRhYmxlKClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgPC9kaXY+XG4gICAgfVxuPC9kaXY+XG4iXX0=
|