@snabcentr/client-ui 4.16.10-profstroy → 4.16.12-profstroy

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 (49) hide show
  1. package/esm2022/feedback/feedback-form/sc-feedback-form.component.mjs +11 -21
  2. package/esm2022/order/order-items-list/sc-order-items-list.component.mjs +94 -20
  3. package/esm2022/providers/index.mjs +1 -2
  4. package/esm2022/public-api.mjs +2 -1
  5. package/esm2022/samples/sc-sample.module.mjs +3 -10
  6. package/esm2022/services/index.mjs +2 -1
  7. package/esm2022/services/sc-scripts.service.mjs +106 -0
  8. package/esm2022/smart-captcha/index.mjs +5 -0
  9. package/esm2022/smart-captcha/interfaces/index.mjs +6 -0
  10. package/esm2022/smart-captcha/interfaces/sc-smart-captcha-api.mjs +2 -0
  11. package/esm2022/smart-captcha/interfaces/sc-smart-captcha-event.mjs +2 -0
  12. package/esm2022/smart-captcha/interfaces/sc-smart-captcha-language.mjs +2 -0
  13. package/esm2022/smart-captcha/interfaces/sc-smart-captcha-render-params.mjs +2 -0
  14. package/esm2022/smart-captcha/interfaces/sc-smart-captcha-settings.mjs +2 -0
  15. package/esm2022/smart-captcha/interfaces/sc-smart-captcha-window.mjs +2 -0
  16. package/esm2022/smart-captcha/sc-smart-captcha.component.mjs +167 -0
  17. package/esm2022/smart-captcha/services/index.mjs +2 -0
  18. package/esm2022/smart-captcha/services/sc-smart-captcha-loader.service.mjs +87 -0
  19. package/esm2022/smart-captcha/tokens/index.mjs +3 -0
  20. package/esm2022/smart-captcha/tokens/sc-smart-captcha-load-timeout.token.mjs +8 -0
  21. package/esm2022/smart-captcha/tokens/sc-smart-captcha-settings.token.mjs +6 -0
  22. package/feedback/feedback-form/sc-feedback-form.component.d.ts +1 -1
  23. package/fesm2022/snabcentr-client-ui.mjs +459 -82
  24. package/fesm2022/snabcentr-client-ui.mjs.map +1 -1
  25. package/order/order-items-list/sc-order-items-list.component.d.ts +45 -0
  26. package/package.json +2 -3
  27. package/providers/index.d.ts +0 -1
  28. package/public-api.d.ts +1 -0
  29. package/release_notes.tmp +5 -2
  30. package/samples/sc-sample.module.d.ts +1 -2
  31. package/services/index.d.ts +1 -0
  32. package/services/sc-scripts.service.d.ts +51 -0
  33. package/smart-captcha/index.d.ts +4 -0
  34. package/smart-captcha/interfaces/index.d.ts +5 -0
  35. package/smart-captcha/interfaces/sc-smart-captcha-api.d.ts +36 -0
  36. package/smart-captcha/interfaces/sc-smart-captcha-event.d.ts +4 -0
  37. package/smart-captcha/interfaces/sc-smart-captcha-language.d.ts +4 -0
  38. package/smart-captcha/interfaces/sc-smart-captcha-render-params.d.ts +16 -0
  39. package/smart-captcha/interfaces/sc-smart-captcha-settings.d.ts +16 -0
  40. package/smart-captcha/interfaces/sc-smart-captcha-window.d.ts +14 -0
  41. package/smart-captcha/sc-smart-captcha.component.d.ts +92 -0
  42. package/smart-captcha/services/index.d.ts +1 -0
  43. package/smart-captcha/services/sc-smart-captcha-loader.service.d.ts +50 -0
  44. package/smart-captcha/tokens/index.d.ts +2 -0
  45. package/smart-captcha/tokens/sc-smart-captcha-load-timeout.token.d.ts +5 -0
  46. package/smart-captcha/tokens/sc-smart-captcha-settings.token.d.ts +6 -0
  47. package/styles/tailwind/tailwind.scss +40 -2
  48. package/esm2022/providers/cleanup-recaptcha-artifacts.mjs +0 -30
  49. package/providers/cleanup-recaptcha-artifacts.d.ts +0 -7
@@ -7,7 +7,7 @@ import { SC_ORDER_LOADER, ScNumberHelper, ScOrderItem, ScOrderItemsGroup, ScUnit
7
7
  import { TuiCurrencyPipe } from '@taiga-ui/addon-commerce';
8
8
  import { TuiAlertService, TuiButton, TuiDialogService, TuiFormatNumberPipe, TuiLabel } from '@taiga-ui/core';
9
9
  import { TUI_CONFIRM, TuiButtonLoading, TuiCheckbox } from '@taiga-ui/kit';
10
- import { filter, finalize, map, noop, of, switchMap } from 'rxjs';
10
+ import { EMPTY, filter, finalize, map, noop, of, switchMap } from 'rxjs';
11
11
  import { ScPrintDirective } from '../../directives';
12
12
  import { SC_DIALOG_SERVICE_TOKEN } from '../../providers';
13
13
  import { SC_ORDER_OPTIONS } from '../directives/sc-order-options';
@@ -18,6 +18,25 @@ import * as i1 from "@angular/forms";
18
18
  * Компонент списка товаров корзины, заказа или черновика.
19
19
  */
20
20
  export class ScOrderItemsListComponent {
21
+ /**
22
+ * Возвращает копию набора с добавленными или убранными ключами.
23
+ *
24
+ * @param keys Набор.
25
+ * @param changed Ключи.
26
+ * @param isIncluded Признак добавления.
27
+ */
28
+ static withKeys(keys, changed, isIncluded) {
29
+ const next = new Set(keys);
30
+ changed.forEach((key) => {
31
+ if (isIncluded) {
32
+ next.add(key);
33
+ }
34
+ else {
35
+ next.delete(key);
36
+ }
37
+ });
38
+ return next;
39
+ }
21
40
  /**
22
41
  * Инициализирует экземпляр класса {@link ScOrderItemsListComponent}.
23
42
  * Входы выбора и пометки недоступных позиций могут прийти после списка позиций, поэтому при их изменении выбор синхронизируется заново.
@@ -72,6 +91,19 @@ export class ScOrderItemsListComponent {
72
91
  * Идентификаторы позиций, изменение или удаление которых ждёт очереди или выполняется.
73
92
  */
74
93
  this.pendingItemsIds = signal(new Set());
94
+ /**
95
+ * Названия удаляемых групп.
96
+ */
97
+ this.deletingGroupsNames = signal(new Set());
98
+ /**
99
+ * Названия групп с позициями, ждущими ответа: такие группы удалить нельзя.
100
+ */
101
+ this.pendingGroupsNames = computed(() => {
102
+ const pendingIds = this.pendingItemsIds();
103
+ return new Set(this.groups()
104
+ .filter((group) => group.items.some((item) => pendingIds.has(item.id)))
105
+ .map((group) => group.name));
106
+ });
75
107
  /**
76
108
  * Внутренняя группа формы для выбора позиций.
77
109
  */
@@ -128,6 +160,10 @@ export class ScOrderItemsListComponent {
128
160
  * Признак, что можно редактировать позиции.
129
161
  */
130
162
  this.canEdit = computed(() => this.editable() && 'updateProduct$' in this.orderItemsListLoader);
163
+ /**
164
+ * Признак, что группу можно удалить целиком.
165
+ */
166
+ this.canDeleteGroups = computed(() => this.canEdit() && 'deleteProducts$' in this.orderItemsListLoader);
131
167
  /**
132
168
  * Настройки вывода сумм в рублях.
133
169
  */
@@ -243,6 +279,31 @@ export class ScOrderItemsListComponent {
243
279
  }), takeUntilDestroyed(this.destroyRef))
244
280
  .subscribe({ error: noop });
245
281
  }
282
+ /**
283
+ * Удаляет все позиции группы после подтверждения. Состав берётся на момент подтверждения.
284
+ *
285
+ * @param group Группа позиций.
286
+ */
287
+ deleteGroup(group) {
288
+ if (!this.canDeleteGroups() || this.pendingGroupsNames().has(group.name)) {
289
+ return;
290
+ }
291
+ this.confirmGroupDelete$(group)
292
+ .pipe(switchMap(() => {
293
+ const items = this.groups().find(({ name }) => name === group.name)?.items ?? [];
294
+ const ids = items.map((item) => item.id);
295
+ if (ids.length === 0) {
296
+ return EMPTY;
297
+ }
298
+ this.setItemsPending(ids, true);
299
+ this.deletingGroupsNames.update((names) => ScOrderItemsListComponent.withKeys(names, [group.name], true));
300
+ return this.orderItemsListLoader.deleteProducts$(items, this.orderOptions?.orderId()).pipe(finalize(() => {
301
+ this.setItemsPending(ids, false);
302
+ this.deletingGroupsNames.update((names) => ScOrderItemsListComponent.withKeys(names, [group.name], false));
303
+ }));
304
+ }), takeUntilDestroyed(this.destroyRef))
305
+ .subscribe({ error: noop });
306
+ }
246
307
  /**
247
308
  * Обновляет количество товара. Количество неактивной позиции не меняется. Пустое или нулевое значение возвращается к сохранённому количеству.
248
309
  *
@@ -315,12 +376,25 @@ export class ScOrderItemsListComponent {
315
376
  if (!target) {
316
377
  return of(true);
317
378
  }
318
- return this.dialogService
319
- .open(TUI_CONFIRM, {
320
- label: `Удалить позицию «${item.product.name}» ${target}?`,
321
- data: { yes: 'Да, удалить', no: 'Нет, оставить' },
322
- })
323
- .pipe(filter(Boolean));
379
+ return this.confirmRemoval$(`Удалить позицию «${item.product.name}» ${target}?`);
380
+ }
381
+ /**
382
+ * Возвращает {@link Observable}, который выдаёт значение, когда удаление группы подтверждено.
383
+ *
384
+ * @param group Группа позиций.
385
+ */
386
+ confirmGroupDelete$(group) {
387
+ const target = this.deleteConfirmationTarget();
388
+ const source = target ? ` ${target}` : '';
389
+ return this.confirmRemoval$(`Удалить все позиции группы «${group.name}»${source}?`);
390
+ }
391
+ /**
392
+ * Возвращает {@link Observable}, который выдаёт значение, когда удаление подтверждено.
393
+ *
394
+ * @param label Вопрос.
395
+ */
396
+ confirmRemoval$(label) {
397
+ return this.dialogService.open(TUI_CONFIRM, { label, data: { yes: 'Да, удалить', no: 'Нет, оставить' } }).pipe(filter(Boolean));
324
398
  }
325
399
  /**
326
400
  * Отмечает позицию как ожидающую ответа или снимает отметку.
@@ -329,16 +403,16 @@ export class ScOrderItemsListComponent {
329
403
  * @param isPending Признак ожидания.
330
404
  */
331
405
  setItemPending(id, isPending) {
332
- this.pendingItemsIds.update((ids) => {
333
- const next = new Set(ids);
334
- if (isPending) {
335
- next.add(id);
336
- }
337
- else {
338
- next.delete(id);
339
- }
340
- return next;
341
- });
406
+ this.setItemsPending([id], isPending);
407
+ }
408
+ /**
409
+ * Ставит или снимает отметку ожидания у позиций.
410
+ *
411
+ * @param itemsIds Идентификаторы позиций.
412
+ * @param isPending Признак ожидания.
413
+ */
414
+ setItemsPending(itemsIds, isPending) {
415
+ this.pendingItemsIds.update((ids) => ScOrderItemsListComponent.withKeys(ids, itemsIds, isPending));
342
416
  }
343
417
  /**
344
418
  * Предупреждает, что количество не может быть пустым или нулевым, а убрать позицию можно удалением. Поле возвращается к сохранённому количеству
@@ -351,7 +425,7 @@ export class ScOrderItemsListComponent {
351
425
  }
352
426
  }
353
427
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScOrderItemsListComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
354
- 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 }, grouped: { classPropertyName: "grouped", publicName: "grouped", isSignal: true, isRequired: false, transformFunction: null }, markUnavailable: { classPropertyName: "markUnavailable", publicName: "markUnavailable", isSignal: true, isRequired: false, transformFunction: null }, useLinePrice: { classPropertyName: "useLinePrice", publicName: "useLinePrice", isSignal: true, isRequired: false, transformFunction: null }, measuredInDialog: { classPropertyName: "measuredInDialog", publicName: "measuredInDialog", isSignal: true, isRequired: false, transformFunction: null }, deleteConfirmationTarget: { classPropertyName: "deleteConfirmationTarget", publicName: "deleteConfirmationTarget", isSignal: true, isRequired: false, transformFunction: null }, totalLabel: { classPropertyName: "totalLabel", publicName: "totalLabel", 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 <!-- \u0424\u043B\u0430\u0433 \u0432\u044B\u0431\u043E\u0440\u0430 \u0432\u0441\u0435\u0445 \u043F\u043E\u0437\u0438\u0446\u0438\u0439. -->\n @if (selectable() && itemsSignal().length) {\n <label\n tuiLabel\n scPrint=\"defaultNoPrint\"\n class=\"self-start\"\n >\n <input\n tuiCheckbox\n type=\"checkbox\"\n size=\"m\"\n [ngModel]=\"allItemsSelected()\"\n [ngModelOptions]=\"{ standalone: true }\"\n [disabled]=\"selectionFormGroup.disabled\"\n (change)=\"selectAllChangeHandler($event)\"\n />\n \u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0432\u0441\u0435\n </label>\n }\n\n @for (group of groups(); track group.name) {\n <!-- \u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A \u0433\u0440\u0443\u043F\u043F\u044B \u043F\u043E\u0437\u0438\u0446\u0438\u0439. -->\n @if (group.name) {\n <div class=\"flex flex-wrap items-end justify-between gap-x-4 gap-y-1 border-b border-tui-base-03 pb-2\">\n <div class=\"flex min-w-0 flex-col\">\n <span class=\"break-words text-body-l-bold\">{{ group.name }}</span>\n <span class=\"text-body-s text-tui-text-02\">\u043F\u043E\u0437\u0438\u0446\u0438\u0439: {{ group.items.length }}, \u0432 \u0437\u0430\u043A\u0430\u0437: {{ group.orderableCount }}</span>\n </div>\n <span class=\"whitespace-nowrap text-body-m-bold\">{{ group.orderableSum | tuiFormatNumber: moneyFormat | async }} {{ 'RUB' | tuiCurrency }}</span>\n </div>\n }\n\n @for (item of group.items; 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 || (markUnavailable() && !item.isOrderable);\n @let isPending = pendingItemsIds().has(item.id);\n @let editedInDialog = isEditedInDialog(item);\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 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 && !editedInDialog\"\n [isShowEditControls]=\"canEdit()\"\n [useLinePrice]=\"useLinePrice()\"\n [markUnavailable]=\"markUnavailable()\"\n [isPending]=\"isPending\"\n [settingsAvailable]=\"canEdit() && measuredInDialog() && !item.configurator && !item.isInactive\"\n class=\"w-full duration-200\"\n [class.opacity-60]=\"isItemDimmed(item)\"\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)\"\n [loading]=\"isPending\"\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\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\">{{ totalLabel() }}: {{ totalSum | tuiFormatNumber: moneyFormat | async }} {{ 'RUB' | tuiCurrency }}</div>\n </div>\n</div>\n", dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: TuiFormatNumberPipe, name: "tuiFormatNumber" }, { kind: "component", type: ScOrderItemComponent, selector: "sc-order-item", inputs: ["isShowEditControls", "useLinePrice", "markUnavailable", "isPending", "settingsAvailable"], outputs: ["clickSettings"] }, { kind: "directive", type: ScPrintDirective, selector: "[scPrint]", inputs: ["scPrint"] }, { kind: "ngmodule", type: FormsModule }, { 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.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { 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: TuiLabel, selector: "label[tuiLabel]" }, { 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" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
428
+ 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 }, grouped: { classPropertyName: "grouped", publicName: "grouped", isSignal: true, isRequired: false, transformFunction: null }, markUnavailable: { classPropertyName: "markUnavailable", publicName: "markUnavailable", isSignal: true, isRequired: false, transformFunction: null }, useLinePrice: { classPropertyName: "useLinePrice", publicName: "useLinePrice", isSignal: true, isRequired: false, transformFunction: null }, measuredInDialog: { classPropertyName: "measuredInDialog", publicName: "measuredInDialog", isSignal: true, isRequired: false, transformFunction: null }, deleteConfirmationTarget: { classPropertyName: "deleteConfirmationTarget", publicName: "deleteConfirmationTarget", isSignal: true, isRequired: false, transformFunction: null }, totalLabel: { classPropertyName: "totalLabel", publicName: "totalLabel", 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 <!-- \u0424\u043B\u0430\u0433 \u0432\u044B\u0431\u043E\u0440\u0430 \u0432\u0441\u0435\u0445 \u043F\u043E\u0437\u0438\u0446\u0438\u0439. -->\n @if (selectable() && itemsSignal().length) {\n <label\n tuiLabel\n scPrint=\"defaultNoPrint\"\n class=\"self-start\"\n >\n <input\n tuiCheckbox\n type=\"checkbox\"\n size=\"m\"\n [ngModel]=\"allItemsSelected()\"\n [ngModelOptions]=\"{ standalone: true }\"\n [disabled]=\"selectionFormGroup.disabled\"\n (change)=\"selectAllChangeHandler($event)\"\n />\n \u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0432\u0441\u0435\n </label>\n }\n\n @for (group of groups(); track group.name) {\n <!-- \u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A \u0433\u0440\u0443\u043F\u043F\u044B \u043F\u043E\u0437\u0438\u0446\u0438\u0439. -->\n @if (group.name) {\n <div class=\"flex flex-wrap items-end justify-between gap-x-4 gap-y-1 border-b border-tui-base-03 pb-2\">\n <div class=\"flex min-w-0 flex-col\">\n <span class=\"break-words text-body-l-bold\">{{ group.name }}</span>\n <span class=\"text-body-s text-tui-text-02\">\u043F\u043E\u0437\u0438\u0446\u0438\u0439: {{ group.items.length }}, \u0432 \u0437\u0430\u043A\u0430\u0437: {{ group.orderableCount }}</span>\n </div>\n <div class=\"flex flex-col items-end gap-1\">\n <!-- \u041A\u043D\u043E\u043F\u043A\u0430 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F \u0433\u0440\u0443\u043F\u043F\u044B. -->\n @if (canDeleteGroups()) {\n <button\n tuiButton\n type=\"button\"\n appearance=\"flat\"\n size=\"xs\"\n scPrint=\"defaultNoPrint\"\n [loading]=\"deletingGroupsNames().has(group.name)\"\n [disabled]=\"pendingGroupsNames().has(group.name)\"\n (click)=\"deleteGroup(group)\"\n >\n \u0423\u0434\u0430\u043B\u0438\u0442\u044C\n </button>\n }\n <span class=\"whitespace-nowrap text-body-m-bold\">{{ group.orderableSum | tuiFormatNumber: moneyFormat | async }} {{ 'RUB' | tuiCurrency }}</span>\n </div>\n </div>\n }\n\n @for (item of group.items; 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 || (markUnavailable() && !item.isOrderable);\n @let isPending = pendingItemsIds().has(item.id);\n @let editedInDialog = isEditedInDialog(item);\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 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 && !editedInDialog\"\n [isShowEditControls]=\"canEdit()\"\n [useLinePrice]=\"useLinePrice()\"\n [markUnavailable]=\"markUnavailable()\"\n [isPending]=\"isPending\"\n [settingsAvailable]=\"canEdit() && measuredInDialog() && !item.configurator && !item.isInactive\"\n class=\"w-full duration-200\"\n [class.opacity-60]=\"isItemDimmed(item)\"\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)\"\n [loading]=\"isPending\"\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\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\">{{ totalLabel() }}: {{ totalSum | tuiFormatNumber: moneyFormat | async }} {{ 'RUB' | tuiCurrency }}</div>\n </div>\n</div>\n", dependencies: [{ kind: "pipe", type: AsyncPipe, name: "async" }, { kind: "pipe", type: TuiFormatNumberPipe, name: "tuiFormatNumber" }, { kind: "component", type: ScOrderItemComponent, selector: "sc-order-item", inputs: ["isShowEditControls", "useLinePrice", "markUnavailable", "isPending", "settingsAvailable"], outputs: ["clickSettings"] }, { kind: "directive", type: ScPrintDirective, selector: "[scPrint]", inputs: ["scPrint"] }, { kind: "ngmodule", type: FormsModule }, { 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.NgModel, selector: "[ngModel]:not([formControlName]):not([formControl])", inputs: ["name", "disabled", "ngModel", "ngModelOptions"], outputs: ["ngModelChange"], exportAs: ["ngModel"] }, { kind: "ngmodule", type: ReactiveFormsModule }, { 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: TuiLabel, selector: "label[tuiLabel]" }, { 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" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
355
429
  }
356
430
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScOrderItemsListComponent, decorators: [{
357
431
  type: Component,
@@ -367,9 +441,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
367
441
  TuiButton,
368
442
  TuiButtonLoading,
369
443
  TuiCurrencyPipe,
370
- ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n [formGroup]=\"selectionFormGroup\"\n class=\"flex flex-col gap-5\"\n>\n <!-- \u0424\u043B\u0430\u0433 \u0432\u044B\u0431\u043E\u0440\u0430 \u0432\u0441\u0435\u0445 \u043F\u043E\u0437\u0438\u0446\u0438\u0439. -->\n @if (selectable() && itemsSignal().length) {\n <label\n tuiLabel\n scPrint=\"defaultNoPrint\"\n class=\"self-start\"\n >\n <input\n tuiCheckbox\n type=\"checkbox\"\n size=\"m\"\n [ngModel]=\"allItemsSelected()\"\n [ngModelOptions]=\"{ standalone: true }\"\n [disabled]=\"selectionFormGroup.disabled\"\n (change)=\"selectAllChangeHandler($event)\"\n />\n \u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0432\u0441\u0435\n </label>\n }\n\n @for (group of groups(); track group.name) {\n <!-- \u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A \u0433\u0440\u0443\u043F\u043F\u044B \u043F\u043E\u0437\u0438\u0446\u0438\u0439. -->\n @if (group.name) {\n <div class=\"flex flex-wrap items-end justify-between gap-x-4 gap-y-1 border-b border-tui-base-03 pb-2\">\n <div class=\"flex min-w-0 flex-col\">\n <span class=\"break-words text-body-l-bold\">{{ group.name }}</span>\n <span class=\"text-body-s text-tui-text-02\">\u043F\u043E\u0437\u0438\u0446\u0438\u0439: {{ group.items.length }}, \u0432 \u0437\u0430\u043A\u0430\u0437: {{ group.orderableCount }}</span>\n </div>\n <span class=\"whitespace-nowrap text-body-m-bold\">{{ group.orderableSum | tuiFormatNumber: moneyFormat | async }} {{ 'RUB' | tuiCurrency }}</span>\n </div>\n }\n\n @for (item of group.items; 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 || (markUnavailable() && !item.isOrderable);\n @let isPending = pendingItemsIds().has(item.id);\n @let editedInDialog = isEditedInDialog(item);\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 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 && !editedInDialog\"\n [isShowEditControls]=\"canEdit()\"\n [useLinePrice]=\"useLinePrice()\"\n [markUnavailable]=\"markUnavailable()\"\n [isPending]=\"isPending\"\n [settingsAvailable]=\"canEdit() && measuredInDialog() && !item.configurator && !item.isInactive\"\n class=\"w-full duration-200\"\n [class.opacity-60]=\"isItemDimmed(item)\"\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)\"\n [loading]=\"isPending\"\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\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\">{{ totalLabel() }}: {{ totalSum | tuiFormatNumber: moneyFormat | async }} {{ 'RUB' | tuiCurrency }}</div>\n </div>\n</div>\n" }]
444
+ ], changeDetection: ChangeDetectionStrategy.OnPush, template: "<div\n [formGroup]=\"selectionFormGroup\"\n class=\"flex flex-col gap-5\"\n>\n <!-- \u0424\u043B\u0430\u0433 \u0432\u044B\u0431\u043E\u0440\u0430 \u0432\u0441\u0435\u0445 \u043F\u043E\u0437\u0438\u0446\u0438\u0439. -->\n @if (selectable() && itemsSignal().length) {\n <label\n tuiLabel\n scPrint=\"defaultNoPrint\"\n class=\"self-start\"\n >\n <input\n tuiCheckbox\n type=\"checkbox\"\n size=\"m\"\n [ngModel]=\"allItemsSelected()\"\n [ngModelOptions]=\"{ standalone: true }\"\n [disabled]=\"selectionFormGroup.disabled\"\n (change)=\"selectAllChangeHandler($event)\"\n />\n \u0412\u044B\u0431\u0440\u0430\u0442\u044C \u0432\u0441\u0435\n </label>\n }\n\n @for (group of groups(); track group.name) {\n <!-- \u0417\u0430\u0433\u043E\u043B\u043E\u0432\u043E\u043A \u0433\u0440\u0443\u043F\u043F\u044B \u043F\u043E\u0437\u0438\u0446\u0438\u0439. -->\n @if (group.name) {\n <div class=\"flex flex-wrap items-end justify-between gap-x-4 gap-y-1 border-b border-tui-base-03 pb-2\">\n <div class=\"flex min-w-0 flex-col\">\n <span class=\"break-words text-body-l-bold\">{{ group.name }}</span>\n <span class=\"text-body-s text-tui-text-02\">\u043F\u043E\u0437\u0438\u0446\u0438\u0439: {{ group.items.length }}, \u0432 \u0437\u0430\u043A\u0430\u0437: {{ group.orderableCount }}</span>\n </div>\n <div class=\"flex flex-col items-end gap-1\">\n <!-- \u041A\u043D\u043E\u043F\u043A\u0430 \u0443\u0434\u0430\u043B\u0435\u043D\u0438\u044F \u0433\u0440\u0443\u043F\u043F\u044B. -->\n @if (canDeleteGroups()) {\n <button\n tuiButton\n type=\"button\"\n appearance=\"flat\"\n size=\"xs\"\n scPrint=\"defaultNoPrint\"\n [loading]=\"deletingGroupsNames().has(group.name)\"\n [disabled]=\"pendingGroupsNames().has(group.name)\"\n (click)=\"deleteGroup(group)\"\n >\n \u0423\u0434\u0430\u043B\u0438\u0442\u044C\n </button>\n }\n <span class=\"whitespace-nowrap text-body-m-bold\">{{ group.orderableSum | tuiFormatNumber: moneyFormat | async }} {{ 'RUB' | tuiCurrency }}</span>\n </div>\n </div>\n }\n\n @for (item of group.items; 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 || (markUnavailable() && !item.isOrderable);\n @let isPending = pendingItemsIds().has(item.id);\n @let editedInDialog = isEditedInDialog(item);\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 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 && !editedInDialog\"\n [isShowEditControls]=\"canEdit()\"\n [useLinePrice]=\"useLinePrice()\"\n [markUnavailable]=\"markUnavailable()\"\n [isPending]=\"isPending\"\n [settingsAvailable]=\"canEdit() && measuredInDialog() && !item.configurator && !item.isInactive\"\n class=\"w-full duration-200\"\n [class.opacity-60]=\"isItemDimmed(item)\"\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)\"\n [loading]=\"isPending\"\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\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\">{{ totalLabel() }}: {{ totalSum | tuiFormatNumber: moneyFormat | async }} {{ 'RUB' | tuiCurrency }}</div>\n </div>\n</div>\n" }]
371
445
  }], ctorParameters: () => [], propDecorators: { items: [{
372
446
  type: Input,
373
447
  args: [{ required: true }]
374
448
  }] } });
375
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtb3JkZXItaXRlbXMtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvb3JkZXIvb3JkZXItaXRlbXMtbGlzdC9zYy1vcmRlci1pdGVtcy1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9vcmRlci9vcmRlci1pdGVtcy1saXN0L3NjLW9yZGVyLWl0ZW1zLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUksT0FBTyxFQUFFLG9CQUFvQixFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RyxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsZUFBZSxFQUE0RCxjQUFjLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xMLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RyxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFN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dUNEN0VRLFNBQVMseUNBQ1QsbUJBQW1CLHdEQUNuQixvQkFBb0IsMkxBQ3BCLGdCQUFnQiwwRUFDaEIsV0FBVywycUJBQ1gsbUJBQW1CLGdWQUNuQixXQUFXLG9HQUNYLFFBQVEsNERBQ1IsU0FBUyxvSUFDVCxnQkFBZ0Isa0hBQ2hCLGVBQWU7OzRGQUlWLHlCQUF5QjtrQkFuQnJDLFNBQVM7aUNBQ00sSUFBSSxZQUNOLHFCQUFxQixXQUV0Qjt3QkFDTCxTQUFTO3dCQUNULG1CQUFtQjt3QkFDbkIsb0JBQW9CO3dCQUNwQixnQkFBZ0I7d0JBQ2hCLFdBQVc7d0JBQ1gsbUJBQW1CO3dCQUNuQixXQUFXO3dCQUNYLFFBQVE7d0JBQ1IsU0FBUzt3QkFDVCxnQkFBZ0I7d0JBQ2hCLGVBQWU7cUJBQ2xCLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNO3dEQWlMM0MsS0FBSztzQkFEUixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXBhcmFtLXJlYXNzaWduICovXG5cbmltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgRGVzdHJveVJlZiwgZWZmZWN0LCBpbmplY3QsIElucHV0LCBpbnB1dCwgc2lnbmFsLCB1bnRyYWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG91dHB1dEZyb21PYnNlcnZhYmxlLCB0YWtlVW50aWxEZXN0cm95ZWQsIHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNDX09SREVSX0xPQURFUiwgU2NJT3JkZXJFZGl0b3JMb2FkZXIsIFNjSU9yZGVySXRlbXNHcm91cCwgU2NJT3JkZXJMb2FkZXIsIFNjTnVtYmVySGVscGVyLCBTY09yZGVySXRlbSwgU2NPcmRlckl0ZW1zR3JvdXAsIFNjVW5pdHNIZWxwZXIgfSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IFR1aUN1cnJlbmN5UGlwZSB9IGZyb20gJ0B0YWlnYS11aS9hZGRvbi1jb21tZXJjZSc7XG5pbXBvcnQgeyBUdWlBbGVydFNlcnZpY2UsIFR1aUJ1dHRvbiwgVHVpRGlhbG9nU2VydmljZSwgVHVpRm9ybWF0TnVtYmVyUGlwZSwgVHVpTGFiZWwgfSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQgeyBUVUlfQ09ORklSTSwgVHVpQnV0dG9uTG9hZGluZywgVHVpQ2hlY2tib3ggfSBmcm9tICdAdGFpZ2EtdWkva2l0JztcbmltcG9ydCB7IGZpbHRlciwgZmluYWxpemUsIG1hcCwgbm9vcCwgT2JzZXJ2YWJsZSwgb2YsIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBBYnN0cmFjdFNjUHJpY2VDYXJkLCBTY1ByaW50RGlyZWN0aXZlIH0gZnJvbSAnLi4vLi4vZGlyZWN0aXZlcyc7XG5pbXBvcnQgeyBJU2NEaWFsb2dTZXJ2aWNlLCBTQ19ESUFMT0dfU0VSVklDRV9UT0tFTiB9IGZyb20gJy4uLy4uL3Byb3ZpZGVycyc7XG5pbXBvcnQgeyBTQ19PUkRFUl9PUFRJT05TLCBTY09yZGVyT3B0aW9ucyB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvc2Mtb3JkZXItb3B0aW9ucyc7XG5pbXBvcnQgeyBTY09yZGVySXRlbUNvbXBvbmVudCB9IGZyb20gJy4uL29yZGVyLWl0ZW0vc2Mtb3JkZXItaXRlbS5jb21wb25lbnQnO1xuXG4vKipcbiAqINCa0L7QvNC/0L7QvdC10L3RgiDRgdC/0LjRgdC60LAg0YLQvtCy0LDRgNC+0LIg0LrQvtGA0LfQuNC90YssINC30LDQutCw0LfQsCDQuNC70Lgg0YfQtdGA0L3QvtCy0LjQutCwLlxuICovXG5AQ29tcG9uZW50KHtcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHNlbGVjdG9yOiAnc2Mtb3JkZXItaXRlbXMtbGlzdCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3NjLW9yZGVyLWl0ZW1zLWxpc3QuY29tcG9uZW50Lmh0bWwnLFxuICAgIGltcG9ydHM6IFtcbiAgICAgICAgQXN5bmNQaXBlLFxuICAgICAgICBUdWlGb3JtYXROdW1iZXJQaXBlLFxuICAgICAgICBTY09yZGVySXRlbUNvbXBvbmVudCxcbiAgICAgICAgU2NQcmludERpcmVjdGl2ZSxcbiAgICAgICAgRm9ybXNNb2R1bGUsXG4gICAgICAgIFJlYWN0aXZlRm9ybXNNb2R1bGUsXG4gICAgICAgIFR1aUNoZWNrYm94LFxuICAgICAgICBUdWlMYWJlbCxcbiAgICAgICAgVHVpQnV0dG9uLFxuICAgICAgICBUdWlCdXR0b25Mb2FkaW5nLFxuICAgICAgICBUdWlDdXJyZW5jeVBpcGUsXG4gICAgXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgU2NPcmRlckl0ZW1zTGlzdENvbXBvbmVudCB7XG4gICAgLyoqXG4gICAgICog0JLQvdGD0YLRgNC10L3QvdC40Lkg0YHQuNCz0L3QsNC7INGB0L/QuNGB0LrQsCDRjdC70LXQvNC10L3RgtC+0LIg0LrQvtGA0LfQuNC90YsgKNGC0L7QstCw0YDQvtCyKS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXRlbXNTaWduYWwgPSBzaWduYWw8U2NPcmRlckl0ZW1bXT4oW10pO1xuXG4gICAgLyoqXG4gICAgICog0JLQutC70Y7Rh9C40YLRjCDQstGL0LHQvtGAINC/0L7Qt9C40YbQuNC5INGH0LXQutCx0L7QutGB0LDQvNC4LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBzZWxlY3RhYmxlID0gaW5wdXQ8Ym9vbGVhbj4odHJ1ZSk7XG5cbiAgICAvKipcbiAgICAgKiDQktC60LvRjtGH0LjRgtGMINGA0LXQtNCw0LrRgtC40YDQvtCy0LDQvdC40LUg0L/QvtC30LjRhtC40LkuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGVkaXRhYmxlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0Log0LLRi9Cy0L7QtNCwINC/0L7Qt9C40YbQuNC5INC/0L4g0LPRgNGD0L/Qv9Cw0LwgKNCz0YDRg9C/0L/QsCDQv9C+0LfQuNGG0LjQuCDQuNC70LggwqvQkdC10Lcg0LPRgNGD0L/Qv9GLwrspINGBINC30LDQs9C+0LvQvtCy0LrQsNC80Lgg0Lgg0LjRgtC+0LPQsNC80LguINCR0LXQtyDQv9GA0LjQt9C90LDQutCwINC/0L7Qt9C40YbQuNC4INCy0YvQstC+0LTRj9GC0YHRjyDQvtC00L3QuNC8INGB0L/QuNGB0LrQvtC8INCx0LXQtyDQt9Cw0LPQvtC70L7QstC60L7Qsi5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgZ3JvdXBlZCA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0L/QvtC30LjRhtC40LgsINC60L7RgtC+0YDRi9C1INC90LUg0L/QvtC/0LDQtNGD0YIg0LIg0LfQsNC60LDQtywg0L/QvtC80LXRh9Cw0Y7RgtGB0Y8g0L/RgNC40LzQtdGH0LDQvdC40LXQvCDQuCDQvdC1INCy0YvQsdC40YDQsNGO0YLRgdGPLiDQndC10LDQutGC0LjQstC90YvQtSDQv9C+0LfQuNGG0LjQuCDQv9GA0LjQs9C70YPRiNCw0Y7RgtGB0Y8g0Lgg0LfQsNGH0ZHRgNC60LjQstCw0Y7RgtGB0Y8uXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IG1hcmtVbmF2YWlsYWJsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6LCDRh9GC0L4g0YbQtdC90LAg0LfQsCDQtdC00LjQvdC40YbRgyDQsdC10YDRkdGC0YHRjyDQuNC3INC/0L7Qt9C40YbQuNC4LCDQsCDQvdC1INC40Lcg0YLQtdC60YPRidC10Lkg0YbQtdC90Ysg0YLQvtCy0LDRgNCwLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSB1c2VMaW5lUHJpY2UgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiwg0YfRgtC+INC/0LDRgNCw0LzQtdGC0YDRiyDQv9C+0LfQuNGG0LjQuCDQvNC10L3Rj9GO0YLRgdGPINCyINC00LjQsNC70L7Qs9C1INGC0L7QstCw0YDQsDog0LTQuNCw0LvQvtCzINC00L7RgdGC0YPQv9C10L0g0YMg0LvRjtCx0L7QuSDQsNC60YLQuNCy0L3QvtC5INC/0L7Qt9C40YbQuNC4LCDQsCDQutC+0LvQuNGH0LXRgdGC0LLQviDQuCDQvNC10YLRgNCw0LYg0LjQt9C80LXRgNGP0LXQvNGL0YUg0YLQvtCy0LDRgNC+0LJcbiAgICAgKiDQvNC10L3Rj9GO0YLRgdGPINGC0L7Qu9GM0LrQviDQsiDQvdGR0LwsINC00LDQttC1INC10YHQu9C4INC80LXRgtGA0LDQtiDQtdGJ0ZEg0L3QtSDQt9Cw0LTQsNC9LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBtZWFzdXJlZEluRGlhbG9nID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgLyoqXG4gICAgICog0J7RgtC60YPQtNCwINGD0LTQsNC70Y/QtdGC0YHRjyDQv9C+0LfQuNGG0LjRjyDQtNC70Y8g0YLQtdC60YHRgtCwINC/0L7QtNGC0LLQtdGA0LbQtNC10L3QuNGPLCDQvdCw0L/RgNC40LzQtdGAIMKr0LjQtyDRh9C10YDQvdC+0LLQuNC60LDCuy4g0JXRgdC70Lgg0L3QtSDQt9Cw0LTQsNC90L4sINC/0L7Qt9C40YbQuNGPINGD0LTQsNC70Y/QtdGC0YHRjyDQsdC10Lcg0L/QvtC00YLQstC10YDQttC00LXQvdC40Y8uXG4gICAgICog0KLQvtGCINC20LUg0YLQtdC60YHRgiDQuNGB0L/QvtC70YzQt9GD0LXRgtGB0Y8g0LIg0L/RgNC10LTRg9C/0YDQtdC20LTQtdC90LjQuCDQviDQvdGD0LvQtdCy0L7QvCDQutC+0LvQuNGH0LXRgdGC0LLQtS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgZGVsZXRlQ29uZmlybWF0aW9uVGFyZ2V0ID0gaW5wdXQ8c3RyaW5nIHwgbnVsbD4obnVsbCk7XG5cbiAgICAvKipcbiAgICAgKiDQn9C+0LTQv9C40YHRjCDQuNGC0L7Qs9C+0LLQvtC5INGB0YPQvNC80YsuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHRvdGFsTGFiZWwgPSBpbnB1dDxzdHJpbmc+KCfQmNGC0L7Qs9C+Jyk7XG5cbiAgICAvKipcbiAgICAgKiDQn9C+0LfQuNGG0LjQuCwg0YDQsNC30LHQuNGC0YvQtSDQvdCwINCz0YDRg9C/0L/Riy4g0JHQtdC3INCz0YDRg9C/0L/QuNGA0L7QstC60Lgg0LLRgdC1INC/0L7Qt9C40YbQuNC4INC40LTRg9GCINC+0LTQvdC+0Lkg0LPRgNGD0L/Qv9C+0Lkg0LHQtdC3INC30LDQs9C+0LvQvtCy0LrQsC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZ3JvdXBzID0gY29tcHV0ZWQ8U2NJT3JkZXJJdGVtc0dyb3VwW10+KCgpID0+IHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zU2lnbmFsKCk7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBlZCgpID8gU2NPcmRlckl0ZW1zR3JvdXAuZnJvbUl0ZW1zKGl0ZW1zKSA6IFtuZXcgU2NPcmRlckl0ZW1zR3JvdXAoJycsIGl0ZW1zKV07XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgNGLINC/0L7Qt9C40YbQuNC5LCDQuNC30LzQtdC90LXQvdC40LUg0LjQu9C4INGD0LTQsNC70LXQvdC40LUg0LrQvtGC0L7RgNGL0YUg0LbQtNGR0YIg0L7Rh9C10YDQtdC00Lgg0LjQu9C4INCy0YvQv9C+0LvQvdGP0LXRgtGB0Y8uXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IHBlbmRpbmdJdGVtc0lkcyA9IHNpZ25hbDxSZWFkb25seVNldDxzdHJpbmc+PihuZXcgU2V0PHN0cmluZz4oKSk7XG5cbiAgICAvKipcbiAgICAgKiDQktC90YPRgtGA0LXQvdC90Y/RjyDQs9GA0YPQv9C/0LAg0YTQvtGA0LzRiyDQtNC70Y8g0LLRi9Cx0L7RgNCwINC/0L7Qt9C40YbQuNC5LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBzZWxlY3Rpb25Gb3JtR3JvdXAgPSBuZXcgRm9ybUdyb3VwPFJlY29yZDxzdHJpbmcsIEZvcm1Db250cm9sPGJvb2xlYW4+Pj4oe30pO1xuXG4gICAgLyoqXG4gICAgICog0J7Qv9GG0LjQuCDQt9Cw0LrQsNC30LAgKNGH0LXRgNC90L7QstC40LrQsCkuINCf0YDQtdC00L7RgdGC0LDQstC70Y/QtdGC0YHRjyDQtNC40YDQtdC60YLQuNCy0L7QuSB7QGxpbmsgU2NPcmRlckFjY2Vzc29yRGlyZWN0aXZlfSDQsiDQutC+0L3RgtC10LrRgdGC0LUg0YfQtdGA0L3QvtCy0LjQutCwLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBvcmRlck9wdGlvbnMgPSBpbmplY3Q8U2NPcmRlck9wdGlvbnM+KFNDX09SREVSX09QVElPTlMsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgNGLINCy0YvQsdGA0LDQvdC90YvRhSDQv9C+0LfQuNGG0LjQuS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgaXRlbXNJZHMgPSB0b1NpZ25hbCh0aGlzLnNlbGVjdGlvbkZvcm1Hcm91cC52YWx1ZUNoYW5nZXMucGlwZShtYXAoKHZhbHVlKSA9PiBPYmplY3QuZW50cmllczxib29sZWFuPih2YWx1ZSBhcyBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPikpKSwge1xuICAgICAgICBpbml0aWFsVmFsdWU6IFtdLFxuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICog0KHQvtGB0YLQvtGP0L3QuNC1INGE0LvQsNCz0LAgwqvQktGL0LHRgNCw0YLRjCDQstGB0LXCuzogYHRydWVgLCDQtdGB0LvQuCDQstGL0LHRgNCw0L3RiyDQstGB0LUg0LTQvtGB0YLRg9C/0L3Ri9C1INC00LvRjyDQstGL0LHQvtGA0LAg0L/QvtC30LjRhtC40LgsIGBmYWxzZWAsINC10YHQu9C4INC90Lgg0L7QtNC90L7QuSDQuNC70Lgg0LLRi9Cx0LjRgNCw0YLRjCDQvdC10YfQtdCz0L4sXG4gICAgICog0LggYG51bGxgLCDQtdGB0LvQuCDRgtC+0LvRjNC60L4g0YfQsNGB0YLRjC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgYWxsSXRlbXNTZWxlY3RlZCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgY2hlY2tlZExpc3QgPSB0aGlzLml0ZW1zSWRzKCkubWFwKChbLCBjaGVja2VkXSkgPT4gY2hlY2tlZCk7XG5cbiAgICAgICAgaWYgKGNoZWNrZWRMaXN0Lmxlbmd0aCA+IDAgJiYgY2hlY2tlZExpc3QuZXZlcnkoQm9vbGVhbikpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNoZWNrZWRMaXN0LnNvbWUoQm9vbGVhbikgPyBudWxsIDogZmFsc2U7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC40LPQvdCw0Lsg0LjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDQvtCyINCy0YvQsdGA0LDQvdC90YvRhSDQv9C+0LfQuNGG0LjQuS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0ZWRJdGVtc0lkcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3Qgc2VsZWN0YWJsZSA9IHRoaXMuc2VsZWN0YWJsZSgpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLml0ZW1zSWRzKClcbiAgICAgICAgICAgIC5maWx0ZXIoKFssIGNoZWNrZWRdKSA9PiAhc2VsZWN0YWJsZSB8fCBjaGVja2VkKVxuICAgICAgICAgICAgLm1hcCgoW2tleV0pID0+IGtleSk7XG4gICAgfSk7XG5cbiAgICAvKipcbiAgICAgKiDQktGL0YXQvtC00L3Ri9C1INC00LDQvdC90YvQtSDQv9GA0Lgg0LjQt9C80LXQvdC10L3QuNC4INCy0YvQsdC+0YDQsCDQv9C+0LfQuNGG0LjQuS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0ZWRJdGVtc0lkc0NoYW5nZSA9IG91dHB1dEZyb21PYnNlcnZhYmxlKHRvT2JzZXJ2YWJsZSh0aGlzLnNlbGVjdGVkSXRlbXNJZHMpKTtcblxuICAgIC8qKlxuICAgICAqINCh0YPQvNC80LAg0YHRgtC+0LjQvNC+0YHRgtC4INCy0YvQsdGA0LDQvdC90YvRhSDQv9C+0LfQuNGG0LjQuS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc3VtU2VsZWN0ZWRJdGVtcyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLml0ZW1zU2lnbmFsKCk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkSXRlbXNJZHMgPSB0aGlzLnNlbGVjdGVkSXRlbXNJZHMoKTtcbiAgICAgICAgY29uc3Qgc2VsZWN0YWJsZSA9IHRoaXMuc2VsZWN0YWJsZSgpO1xuXG4gICAgICAgIHJldHVybiBTY09yZGVySXRlbS5nZXRDb3N0U3VtKGl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gIXNlbGVjdGFibGUgfHwgc2VsZWN0ZWRJdGVtc0lkcy5pbmNsdWRlcyhpdGVtLmlkKSkpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINC/0L7Qu9GD0YfQtdC90LjRjyDQuCDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNGPINGB0L/QuNGB0LrQsCDRgtC+0LLQsNGA0L7QsiDQt9Cw0LrQsNC30LAgKNC60L7RgNC30LjQvdCwIC8g0LfQsNC60LDQtyAvINGH0LXRgNC90L7QstC40LogPSDQt9Cw0LrQsNC3KS5cbiAgICAgKiDQn9GA0LXQtNC+0YHRgtCw0LLQu9GP0LXRgtGB0Y8g0YDQvtC00LjRgtC10LvQtdC8INGH0LXRgNC10Lcg0YLQvtC60LXQvSB7QGxpbmsgU0NfT1JERVJfTE9BREVSfSAo0YDQtdCw0LvQuNC30LDRhtC40Y8ge0BsaW5rIFNjSU9yZGVyTG9hZGVyfSkuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IG9yZGVySXRlbXNMaXN0TG9hZGVyID0gaW5qZWN0PFNjSU9yZGVyTG9hZGVyIHwgU2NJT3JkZXJFZGl0b3JMb2FkZXI+KFNDX09SREVSX0xPQURFUik7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiwg0YfRgtC+INC80L7QttC90L4g0YDQtdC00LDQutGC0LjRgNC+0LLQsNGC0Ywg0L/QvtC30LjRhtC40LguXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGNhbkVkaXQgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmVkaXRhYmxlKCkgJiYgJ3VwZGF0ZVByb2R1Y3QkJyBpbiB0aGlzLm9yZGVySXRlbXNMaXN0TG9hZGVyKTtcblxuICAgIC8qKlxuICAgICAqINCd0LDRgdGC0YDQvtC50LrQuCDQstGL0LLQvtC00LAg0YHRg9C80Lwg0LIg0YDRg9Cx0LvRj9GFLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBtb25leUZvcm1hdCA9IFNjTnVtYmVySGVscGVyLmdldE1vbmV5Rm9ybWF0KCk7XG5cbiAgICAvKipcbiAgICAgKiDQodGB0YvQu9C60LAg0LTQu9GPINCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC+0LPQviDRg9C/0YDQsNCy0LvQtdC90LjRjyDRg9C90LjRh9GC0L7QttC10L3QuNC10Lwg0LfQsNCy0LjRgdC40LzQvtGB0YLQtdC5LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDQtNC70Y8g0YDQsNCx0L7RgtGLINGBINC00LjQsNC70L7Qs9C+0LLRi9C80Lgg0L7QutC90LDQvNC4LlxuICAgICAqINCf0YDQtdC00L7RgdGC0LDQstC70Y/QtdGC0YHRjyDRgNC+0LTQuNGC0LXQu9C10Lwg0YfQtdGA0LXQtyDRgtC+0LrQtdC9IHtAbGluayBTQ19ESUFMT0dfU0VSVklDRV9UT0tFTn0uXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBzY0RpYWxvZ1NlcnZpY2UgPSBpbmplY3Q8SVNjRGlhbG9nU2VydmljZT4oU0NfRElBTE9HX1NFUlZJQ0VfVE9LRU4pO1xuXG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINC00LjQsNC70L7Qs9C+0LLRi9GFINC+0LrQvtC9IFRhaWdhINC00LvRjyDQv9C+0LTRgtCy0LXRgNC20LTQtdC90LjQuS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZ1NlcnZpY2UgPSBpbmplY3QoVHVpRGlhbG9nU2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0YPQstC10LTQvtC80LvQtdC90LjQuS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGFsZXJ0cyA9IGluamVjdChUdWlBbGVydFNlcnZpY2UpO1xuXG4gICAgLyoqXG4gICAgICog0JjQvdC40YbQuNCw0LvQuNC30LjRgNGD0LXRgiDRjdC60LfQtdC80L/Qu9GP0YAg0LrQu9Cw0YHRgdCwIHtAbGluayBTY09yZGVySXRlbXNMaXN0Q29tcG9uZW50fS5cbiAgICAgKiDQktGF0L7QtNGLINCy0YvQsdC+0YDQsCDQuCDQv9C+0LzQtdGC0LrQuCDQvdC10LTQvtGB0YLRg9C/0L3Ri9GFINC/0L7Qt9C40YbQuNC5INC80L7Qs9GD0YIg0L/RgNC40LnRgtC4INC/0L7RgdC70LUg0YHQv9C40YHQutCwINC/0L7Qt9C40YbQuNC5LCDQv9C+0Y3RgtC+0LzRgyDQv9GA0Lgg0LjRhSDQuNC30LzQtdC90LXQvdC40Lgg0LLRi9Cx0L7RgCDRgdC40L3RhdGA0L7QvdC40LfQuNGA0YPQtdGC0YHRjyDQt9Cw0L3QvtCy0L4uXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tYXJrVW5hdmFpbGFibGUoKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0YWJsZSgpO1xuICAgICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN5bmNTZWxlY3Rpb25Db250cm9scygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0L/QuNGB0L7QuiDRjdC70LXQvNC10L3RgtC+0LIg0LrQvtGA0LfQuNC90YsgKNGC0L7QstCw0YDQvtCyKS4g0J/RgNC4INGD0YHRgtCw0L3QvtCy0LrQtSDRgdC40L3RhdGA0L7QvdC90L4g0L7QsdC90L7QstC70Y/QtdGCINC60L7QvdGC0YDQvtC70Ysg0LLRi9Cx0L7RgNCwINCyINGE0L7RgNC80LUuXG4gICAgICovXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgICBzZXQgaXRlbXModmFsdWU6IFNjT3JkZXJJdGVtW10pIHtcbiAgICAgICAgdGhpcy5pdGVtc1NpZ25hbC5zZXQodmFsdWUpO1xuICAgICAgICB0aGlzLnN5bmNTZWxlY3Rpb25Db250cm9scygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0LjQvdGF0YDQvtC90LjQt9C40YDRg9C10YIg0LrQvtC90YLRgNC+0LvRiyDRhNC+0YDQvNGLINCy0YvQsdC+0YDQsCDRgSDRgtC10LrRg9GJ0LjQvCDRgdC/0LjRgdC60L7QvCDRgtC+0LLQsNGA0L7Qsjog0YPQtNCw0LvRj9C10YIg0LrQvtC90YLRgNC+0LvRiyDQtNC70Y8g0L7RgtGB0YPRgtGB0YLQstGD0Y7RidC40YUgaWQsINC00L7QsdCw0LLQu9GP0LXRgiDQtNC70Y8g0L3QvtCy0YvRhS5cbiAgICAgKiDQmtC+0L3RgtGA0L7Qu9GLINC80LXQvdGP0Y7RgtGB0Y8g0LHQtdC3INGB0L7QsdGL0YLQuNC5LCDQsCDQt9C90LDRh9C10L3QuNC1INCz0YDRg9C/0L/RiyDQv9C10YDQtdGB0YfQuNGC0YvQstCw0LXRgtGB0Y8g0L7QtNC40L0g0YDQsNC3INCyINC60L7QvdGG0LU6INC90LAg0LfQsNGP0LLQutCw0YUg0LIg0YHQvtGC0L3QuCDQv9C+0LfQuNGG0LjQuSDRjdGC0L4g0LfQsNC80LXRgtC90L4uXG4gICAgICovXG4gICAgcHJpdmF0ZSBzeW5jU2VsZWN0aW9uQ29udHJvbHMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RhYmxlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGN1cnJlbnRJdGVtcyA9IHRoaXMuaXRlbXNTaWduYWwoKTtcbiAgICAgICAgY29uc3QgY3VycmVudElkcyA9IG5ldyBTZXQoY3VycmVudEl0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5pZCkpO1xuXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuc2VsZWN0aW9uRm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWN1cnJlbnRJZHMuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Gb3JtR3JvdXAucmVtb3ZlQ29udHJvbChuYW1lIGFzIG5ldmVyLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGN1cnJlbnRJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5zZWxlY3Rpb25Gb3JtR3JvdXAuZ2V0KGl0ZW0uaWQpO1xuICAgICAgICAgICAgY29uc3QgaXNTZWxlY3RhYmxlID0gIXRoaXMubWFya1VuYXZhaWxhYmxlKCkgfHwgaXRlbS5pc09yZGVyYWJsZTtcblxuICAgICAgICAgICAgaWYgKCFjb250cm9sKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Gb3JtR3JvdXAuYWRkQ29udHJvbChpdGVtLmlkLCBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZTogaXNTZWxlY3RhYmxlLCBkaXNhYmxlZDogIWlzU2VsZWN0YWJsZSB9LCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFpc1NlbGVjdGFibGUgJiYgY29udHJvbC5lbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgY29udHJvbC5zZXRWYWx1ZShmYWxzZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzU2VsZWN0YWJsZSAmJiBjb250cm9sLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgY29udHJvbC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUodHJ1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNlbGVjdGlvbkZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLRi9Cx0LjRgNCw0LXRgiDQstGB0LUg0LTQvtGB0YLRg9C/0L3Ri9C1INC00LvRjyDQstGL0LHQvtGA0LAg0L/QvtC30LjRhtC40Lgg0LjQu9C4INGB0L3QuNC80LDQtdGCINCy0YvQsdC+0YAg0YHQviDQstGB0LXRhS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudCDQodC+0LHRi9GC0LjQtSDQuNC30LzQtdC90LXQvdC40Y8g0YTQu9Cw0LPQsCDQstGL0LHQvtGA0LAg0LLRgdC10YUg0L/QvtC30LjRhtC40LkuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHNlbGVjdEFsbENoYW5nZUhhbmRsZXIoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgY2hlY2tlZCB9ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGVuYWJsZWRJZHMgPSBPYmplY3QuZW50cmllcyh0aGlzLnNlbGVjdGlvbkZvcm1Hcm91cC5jb250cm9scylcbiAgICAgICAgICAgIC5maWx0ZXIoKFssIGNvbnRyb2xdKSA9PiBjb250cm9sLmVuYWJsZWQpXG4gICAgICAgICAgICAubWFwKChbaWRdKSA9PiBpZCk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Gb3JtR3JvdXAucGF0Y2hWYWx1ZShPYmplY3QuZnJvbUVudHJpZXMoZW5hYmxlZElkcy5tYXAoKGlkKSA9PiBbaWQsIGNoZWNrZWRdKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINC/0YDQuNC30L3QsNC6LCDRh9GC0L4g0L/QvtC30LjRhtC40Y8g0L/RgNC40LPQu9GD0YjQtdC90LA6INC+0L3QsCDQvdC10LDQutGC0LjQstC90LAg0LjQu9C4INC90LUg0LLRi9Cx0YDQsNC90LAg0LTQu9GPINC30LDQutCw0LfQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpdGVtINCf0L7Qt9C40YbQuNGPLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBpc0l0ZW1EaW1tZWQoaXRlbTogU2NPcmRlckl0ZW0pOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgaXNVbnNlbGVjdGVkID0gdGhpcy5zZWxlY3RhYmxlKCkgJiYgIXRoaXMuc2VsZWN0aW9uRm9ybUdyb3VwLmdldChpdGVtLmlkKT8udmFsdWU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubWFya1VuYXZhaWxhYmxlKCkgPyBpdGVtLmlzSW5hY3RpdmUgfHwgKGl0ZW0uaXNPcmRlcmFibGUgJiYgaXNVbnNlbGVjdGVkKSA6IGlzVW5zZWxlY3RlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiDQv9GA0LjQt9C90LDQuiwg0YfRgtC+INC60L7Qu9C40YfQtdGB0YLQstC+INC4INC80LXRgtGA0LDQtiDRgtC+0LLQsNGA0LAg0L/QvtC30LjRhtC40Lgg0LzQtdC90Y/RjtGC0YHRjyDQsiDQtNC40LDQu9C+0LPQtSDRgtC+0LLQsNGA0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbSDQn9C+0LfQuNGG0LjRjy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgaXNFZGl0ZWRJbkRpYWxvZyhpdGVtOiBTY09yZGVySXRlbSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tZWFzdXJlZEluRGlhbG9nKCkgJiYgU2NVbml0c0hlbHBlci5wcm9kdWN0SXNNZWFzdXJhYmxlKGl0ZW0ucHJvZHVjdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KPQtNCw0LvRj9C10YIg0L/QvtC30LjRhtC40Y4sINC/0YDQuCDQvdC10L7QsdGF0L7QtNC40LzQvtGB0YLQuCDQv9C+0YHQu9C1INC/0L7QtNGC0LLQtdGA0LbQtNC10L3QuNGPLiDQodC+0L7QsdGJ0LXQvdC40LUg0L7QsSDQvtGI0LjQsdC60LUg0L/QvtC60LDQt9GL0LLQsNC10YIg0L/QtdGA0LXRhdCy0LDRgtGH0LjQuiDQv9GA0LjQu9C+0LbQtdC90LjRjy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpdGVtINCf0L7Qt9C40YbQuNGPINGC0L7QstCw0YDQsCDQtNC70Y8g0YPQtNCw0LvQtdC90LjRjy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZGVsZXRlSXRlbShpdGVtOiBTY09yZGVySXRlbSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuY2FuRWRpdCgpIHx8IHRoaXMucGVuZGluZ0l0ZW1zSWRzKCkuaGFzKGl0ZW0uaWQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpcm1EZWxldGUkKGl0ZW0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEl0ZW1QZW5kaW5nKGl0ZW0uaWQsIHRydWUpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy5vcmRlckl0ZW1zTGlzdExvYWRlciBhcyBTY0lPcmRlckVkaXRvckxvYWRlcikuZGVsZXRlUHJvZHVjdCQoaXRlbSwgdGhpcy5vcmRlck9wdGlvbnM/Lm9yZGVySWQoKSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEl0ZW1QZW5kaW5nKGl0ZW0uaWQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoeyBlcnJvcjogbm9vcCB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntCx0L3QvtCy0LvRj9C10YIg0LrQvtC70LjRh9C10YHRgtCy0L4g0YLQvtCy0LDRgNCwLiDQmtC+0LvQuNGH0LXRgdGC0LLQviDQvdC10LDQutGC0LjQstC90L7QuSDQv9C+0LfQuNGG0LjQuCDQvdC1INC80LXQvdGP0LXRgtGB0Y8uINCf0YPRgdGC0L7QtSDQuNC70Lgg0L3Rg9C70LXQstC+0LUg0LfQvdCw0YfQtdC90LjQtSDQstC+0LfQstGA0LDRidCw0LXRgtGB0Y8g0Log0YHQvtGF0YDQsNC90ZHQvdC90L7QvNGDINC60L7Qu9C40YfQtdGB0YLQstGDLlxuICAgICAqXG4gICAgICogQHBhcmFtIG5ld1F1YW50aXR5INCd0L7QstC+0LUg0LfQvdCw0YfQtdC90LjQtSDQutC+0LvQuNGH0LXRgdGC0LLQsCDRgtC+0LLQsNGA0LAuXG4gICAgICogQHBhcmFtIHByaWNlQ2FyZCDQmtC+0LzQv9C+0L3QtdC90YIg0LrQsNGA0YLQvtGH0LrQuCDRgtC+0LLQsNGA0LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHBhdGNoSXRlbShuZXdRdWFudGl0eTogbnVtYmVyIHwgbnVsbCwgcHJpY2VDYXJkOiBBYnN0cmFjdFNjUHJpY2VDYXJkKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgb3JkZXJJdGVtIH0gPSBwcmljZUNhcmQ7XG5cbiAgICAgICAgaWYgKCF0aGlzLmNhbkVkaXQoKSB8fCAhb3JkZXJJdGVtIHx8ICFwcmljZUNhcmQucHJvZHVjdCB8fCBvcmRlckl0ZW0uaXNJbmFjdGl2ZSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFuZXdRdWFudGl0eSkge1xuICAgICAgICAgICAgcHJpY2VDYXJkLnF1YW50aXR5Q29udHJvbC5wYXRjaFZhbHVlKG9yZGVySXRlbS5xdWFudGl0eSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgdGhpcy53YXJuRW1wdHlRdWFudGl0eSgpO1xuXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldEl0ZW1QZW5kaW5nKG9yZGVySXRlbS5pZCwgdHJ1ZSk7XG5cbiAgICAgICAgKHRoaXMub3JkZXJJdGVtc0xpc3RMb2FkZXIgYXMgU2NJT3JkZXJFZGl0b3JMb2FkZXIpXG4gICAgICAgICAgICAudXBkYXRlUHJvZHVjdCQob3JkZXJJdGVtLmlkLCB7IHF1YW50aXR5OiBuZXdRdWFudGl0eSB9LCB0aGlzLm9yZGVyT3B0aW9ucz8ub3JkZXJJZCgpKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmluYWxpemUoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEl0ZW1QZW5kaW5nKG9yZGVySXRlbS5pZCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKHtcbiAgICAgICAgICAgICAgICBlcnJvcjogKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwcmljZUNhcmQucXVhbnRpdHlDb250cm9sLnBhdGNoVmFsdWUoKHByaWNlQ2FyZC5vcmRlckl0ZW0gPz8gb3JkZXJJdGVtKS5xdWFudGl0eSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntGC0LrRgNGL0LLQsNC10YIg0LzQvtC00LDQu9GM0L3QvtC1INC+0LrQvdC+INC+0L/QuNGB0LDQvdC40Y8g0YLQvtCy0LDRgNCwLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb2R1Y3Qg0KLQvtCy0LDRgC/Rg9GB0LvRg9Cz0LAsINC+0L/QuNGB0LDQvdC40LUg0LrQvtGC0L7RgNC+0Lkg0L3QtdC+0LHRhdC+0LTQuNC80L4g0L7RgtC+0LHRgNCw0LfQuNGC0YwuXG4gICAgICogQHBhcmFtIG9yZGVySXRlbSDQldC00LjQvdC40YfQvdCw0Y8g0L/QvtC30LjRhtC40Y8g0YLQvtCy0LDRgNCwL9GD0YHQu9GD0LPQuCDQsiDQt9Cw0LrQsNC30LUsINC00LvRjyDQutC+0YLQvtGA0L7QuSDQvdC10L7QsdGF0L7QtNC40LzQviDQvtGC0LrRgNGL0YLRjCDQutC+0L3RhNC40LPRg9GA0LDRgtC+0YAuXG4gICAgICogQHBhcmFtIG9yZGVySWQg0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YAg0LfQsNC60LDQt9CwLCDQsiDQutC+0YLQvtGA0L7QvCDQvdC10L7QsdGF0L7QtNC40LzQviDQvtGC0LrRgNGL0YLRjCDQutC+0L3RhNC40LPRg9GA0LDRgtC+0YAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG9wZW5Qcm9kdWN0SW5mb0RpYWxvZyhwcm9kdWN0OiBTY09yZGVySXRlbVsncHJvZHVjdCddLCBvcmRlckl0ZW0/OiBTY09yZGVySXRlbSwgb3JkZXJJZD86IG51bWJlcik6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5zY0RpYWxvZ1NlcnZpY2Uub3BlblByb2R1Y3RJbmZvRGlhbG9nKSB7XG4gICAgICAgICAgICB0aGlzLnNjRGlhbG9nU2VydmljZS5vcGVuUHJvZHVjdEluZm9EaWFsb2cocHJvZHVjdCwgb3JkZXJJdGVtLCBvcmRlcklkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0YLQutGA0YvQstCw0LXRgiDQvNC+0LTQsNC70YzQvdC+0LUg0L7QutC90L4g0LjQt9C80LXQvdC10L3QuNGPINGC0L7QstCw0YDQsCDQuNC70Lgg0LXQs9C+INC60L7QvdGE0LjQs9GD0YDQsNGC0L7RgNCwLiDQldGB0LvQuCDQv9Cw0YDQsNC80LXRgtGA0Ysg0L/QvtC30LjRhtC40Lgg0LzQtdC90Y/RjtGC0YHRjyDQsiDQtNC40LDQu9C+0LPQtSwg0L7QutC90L4g0YLQvtCy0LDRgNCwINC+0YLQutGA0YvQstCw0LXRgtGB0Y8g0Lgg0YMg0YjRgtGD0YfQvdC+0LPQviDRgtC+0LLQsNGA0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbSDQn9C+0LfQuNGG0LjRjyDRgtC+0LLQsNGA0LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIG9wZW5TZXR0aW5nc0RpYWxvZyhpdGVtOiBTY09yZGVySXRlbSk6IHZvaWQge1xuICAgICAgICBjb25zdCBpc0NvbmZpZ3VyYXRvciA9IEJvb2xlYW4oaXRlbS5jb25maWd1cmF0b3IpO1xuXG4gICAgICAgIGlmIChpc0NvbmZpZ3VyYXRvcikge1xuICAgICAgICAgICAgdGhpcy5zY0RpYWxvZ1NlcnZpY2Uub3BlbkNvbmZpZ3VyYXRvckRpYWxvZyhpdGVtLnByb2R1Y3QsIGl0ZW0sIHRoaXMub3JkZXJPcHRpb25zPy5vcmRlcklkKCkpO1xuICAgICAgICB9IGVsc2UgaWYgKHRoaXMubWVhc3VyZWRJbkRpYWxvZygpIHx8IFNjVW5pdHNIZWxwZXIucHJvZHVjdElzTWVhc3VyYWJsZShpdGVtLnByb2R1Y3QpKSB7XG4gICAgICAgICAgICB0aGlzLnNjRGlhbG9nU2VydmljZS5vcGVuQWRkT3JFZGl0aW5nQ2FydEl0ZW1EaWFsb2coaXRlbS5wcm9kdWN0LCBpdGVtLCB0aGlzLm9yZGVyT3B0aW9ucz8ub3JkZXJJZCgpLCB0cnVlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0YLQutGA0YvQstCw0LXRgiDQtNC40LDQu9C+0LPQvtCy0L7QtSDQvtC60L3QviBcItCT0YDQsNGE0LjQuiDQuNC30LzQtdC90LXQvdC40Y8g0YHRgtC+0LjQvNC+0YHRgtC4XCIg0LTQu9GPINGC0L7QstCw0YDQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBwcm9kdWN0INCi0L7QstCw0YAv0YPRgdC70YPQs9CwLCDQtNC70Y8g0LrQvtGC0L7RgNC+0LPQviDQvdC10L7QsdGF0L7QtNC40LzQviDQvtGC0L7QsdGA0LDQt9C40YLRjCDQs9GA0LDRhNC40Log0LjQt9C80LXQvdC10L3QuNGPINGB0YLQvtC40LzQvtGB0YLQuC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb3BlblByaWNlSGlzdG9yeUNoYXJ0RGlhbG9nKHByb2R1Y3Q6IFNjT3JkZXJJdGVtWydwcm9kdWN0J10pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zY0RpYWxvZ1NlcnZpY2Uub3BlblByaWNlSGlzdG9yeUNoYXJ0RGlhbG9nKHByb2R1Y3QpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCIHtAbGluayBPYnNlcnZhYmxlfSwg0LrQvtGC0L7RgNGL0Lkg0LLRi9C00LDRkdGCINC30L3QsNGH0LXQvdC40LUsINC60L7Qs9C00LAg0YPQtNCw0LvQtdC90LjQtSDQv9C+0LfQuNGG0LjQuCDQv9C+0LTRgtCy0LXRgNC20LTQtdC90L4g0LjQu9C4INC/0L7QtNGC0LLQtdGA0LbQtNC10L3QuNC1INC90LUg0YLRgNC10LHRg9C10YLRgdGPLlxuICAgICAqXG4gICAgICogQHBhcmFtIGl0ZW0g0KPQtNCw0LvRj9C10LzQsNGPINC/0L7Qt9C40YbQuNGPLlxuICAgICAqL1xuICAgIHByaXZhdGUgY29uZmlybURlbGV0ZSQoaXRlbTogU2NPcmRlckl0ZW0pOiBPYnNlcnZhYmxlPHVua25vd24+IHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5kZWxldGVDb25maXJtYXRpb25UYXJnZXQoKTtcblxuICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKHRydWUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuZGlhbG9nU2VydmljZVxuICAgICAgICAgICAgLm9wZW48Ym9vbGVhbj4oVFVJX0NPTkZJUk0sIHtcbiAgICAgICAgICAgICAgICBsYWJlbDogYNCj0LTQsNC70LjRgtGMINC/0L7Qt9C40YbQuNGOIMKrJHtpdGVtLnByb2R1Y3QubmFtZX3CuyAke3RhcmdldH0/YCxcbiAgICAgICAgICAgICAgICBkYXRhOiB7IHllczogJ9CU0LAsINGD0LTQsNC70LjRgtGMJywgbm86ICfQndC10YIsINC+0YHRgtCw0LLQuNGC0YwnIH0sXG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgLnBpcGUoZmlsdGVyKEJvb2xlYW4pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntGC0LzQtdGH0LDQtdGCINC/0L7Qt9C40YbQuNGOINC60LDQuiDQvtC20LjQtNCw0Y7RidGD0Y4g0L7RgtCy0LXRgtCwINC40LvQuCDRgdC90LjQvNCw0LXRgiDQvtGC0LzQtdGC0LrRgy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpZCDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQv9C+0LfQuNGG0LjQuC5cbiAgICAgKiBAcGFyYW0gaXNQZW5kaW5nINCf0YDQuNC30L3QsNC6INC+0LbQuNC00LDQvdC40Y8uXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRJdGVtUGVuZGluZyhpZDogc3RyaW5nLCBpc1BlbmRpbmc6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wZW5kaW5nSXRlbXNJZHMudXBkYXRlKChpZHMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IG5leHQgPSBuZXcgU2V0KGlkcyk7XG5cbiAgICAgICAgICAgIGlmIChpc1BlbmRpbmcpIHtcbiAgICAgICAgICAgICAgICBuZXh0LmFkZChpZCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5leHQuZGVsZXRlKGlkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgcmV0dXJuIG5leHQ7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCf0YDQtdC00YPQv9GA0LXQttC00LDQtdGCLCDRh9GC0L4g0LrQvtC70LjRh9C10YHRgtCy0L4g0L3QtSDQvNC+0LbQtdGCINCx0YvRgtGMINC/0YPRgdGC0YvQvCDQuNC70Lgg0L3Rg9C70LXQstGL0LwsINCwINGD0LHRgNCw0YLRjCDQv9C+0LfQuNGG0LjRjiDQvNC+0LbQvdC+INGD0LTQsNC70LXQvdC40LXQvC4g0J/QvtC70LUg0LLQvtC30LLRgNCw0YnQsNC10YLRgdGPINC6INGB0L7RhdGA0LDQvdGR0L3QvdC+0LzRgyDQutC+0LvQuNGH0LXRgdGC0LLRg1xuICAgICAqINCyINC70Y7QsdC+0Lwg0YHQv9C40YHQutC1LCDQv9GA0LXQtNGD0L/RgNC10LbQtNC10L3QuNC1INC/0L7QutCw0LfRi9Cy0LDQtdGC0YHRjyDRgtC+0LvRjNC60L4g0LIg0YHQv9C40YHQutCw0YUg0YEg0L/QvtC00YLQstC10YDQttC00LXQvdC40LXQvCDRg9C00LDQu9C10L3QuNGPLlxuICAgICAqL1xuICAgIHByaXZhdGUgd2FybkVtcHR5UXVhbnRpdHkoKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuZGVsZXRlQ29uZmlybWF0aW9uVGFyZ2V0KCk7XG5cbiAgICAgICAgaWYgKHRhcmdldCkge1xuICAgICAgICAgICAgdGhpcy5hbGVydHMub3Blbihg0JrQvtC70LjRh9C10YHRgtCy0L4g0LTQvtC70LbQvdC+INCx0YvRgtGMINCx0L7Qu9GM0YjQtSDQvdGD0LvRjy4g0KfRgtC+0LHRiyDRg9Cx0YDQsNGC0Ywg0L/QvtC30LjRhtC40Y4gJHt0YXJnZXR9LCDRg9C00LDQu9C40YLQtSDQtdGRLmAsIHsgYXBwZWFyYW5jZTogJ3dhcm5pbmcnIH0pLnN1YnNjcmliZSgpO1xuICAgICAgICB9XG4gICAgfVxufVxuIiwiPGRpdlxuICAgIFtmb3JtR3JvdXBdPVwic2VsZWN0aW9uRm9ybUdyb3VwXCJcbiAgICBjbGFzcz1cImZsZXggZmxleC1jb2wgZ2FwLTVcIlxuPlxuICAgIDwhLS0g0KTQu9Cw0LMg0LLRi9Cx0L7RgNCwINCy0YHQtdGFINC/0L7Qt9C40YbQuNC5LiAtLT5cbiAgICBAaWYgKHNlbGVjdGFibGUoKSAmJiBpdGVtc1NpZ25hbCgpLmxlbmd0aCkge1xuICAgICAgICA8bGFiZWxcbiAgICAgICAgICAgIHR1aUxhYmVsXG4gICAgICAgICAgICBzY1ByaW50PVwiZGVmYXVsdE5vUHJpbnRcIlxuICAgICAgICAgICAgY2xhc3M9XCJzZWxmLXN0YXJ0XCJcbiAgICAgICAgPlxuICAgICAgICAgICAgPGlucHV0XG4gICAgICAgICAgICAgICAgdHVpQ2hlY2tib3hcbiAgICAgICAgICAgICAgICB0eXBlPVwiY2hlY2tib3hcIlxuICAgICAgICAgICAgICAgIHNpemU9XCJtXCJcbiAgICAgICAgICAgICAgICBbbmdNb2RlbF09XCJhbGxJdGVtc1NlbGVjdGVkKClcIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsT3B0aW9uc109XCJ7IHN0YW5kYWxvbmU6IHRydWUgfVwiXG4gICAgICAgICAgICAgICAgW2Rpc2FibGVkXT1cInNlbGVjdGlvbkZvcm1Hcm91cC5kaXNhYmxlZFwiXG4gICAgICAgICAgICAgICAgKGNoYW5nZSk9XCJzZWxlY3RBbGxDaGFuZ2VIYW5kbGVyKCRldmVudClcIlxuICAgICAgICAgICAgLz5cbiAgICAgICAgICAgINCS0YvQsdGA0LDRgtGMINCy0YHQtVxuICAgICAgICA8L2xhYmVsPlxuICAgIH1cblxuICAgIEBmb3IgKGdyb3VwIG9mIGdyb3VwcygpOyB0cmFjayBncm91cC5uYW1lKSB7XG4gICAgICAgIDwhLS0g0JfQsNCz0L7Qu9C+0LLQvtC6INCz0YDRg9C/0L/RiyDQv9C+0LfQuNGG0LjQuS4gLS0+XG4gICAgICAgIEBpZiAoZ3JvdXAubmFtZSkge1xuICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggZmxleC13cmFwIGl0ZW1zLWVuZCBqdXN0aWZ5LWJldHdlZW4gZ2FwLXgtNCBnYXAteS0xIGJvcmRlci1iIGJvcmRlci10dWktYmFzZS0wMyBwYi0yXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImZsZXggbWluLXctMCBmbGV4LWNvbFwiPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJyZWFrLXdvcmRzIHRleHQtYm9keS1sLWJvbGRcIj57eyBncm91cC5uYW1lIH19PC9zcGFuPlxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRleHQtYm9keS1zIHRleHQtdHVpLXRleHQtMDJcIj7Qv9C+0LfQuNGG0LjQuToge3sgZ3JvdXAuaXRlbXMubGVuZ3RoIH19LCDQsiDQt9Cw0LrQsNC3OiB7eyBncm91cC5vcmRlcmFibGVDb3VudCB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIndoaXRlc3BhY2Utbm93cmFwIHRleHQtYm9keS1tLWJvbGRcIj57eyBncm91cC5vcmRlcmFibGVTdW0gfCB0dWlGb3JtYXROdW1iZXI6IG1vbmV5Rm9ybWF0IHwgYXN5bmMgfX0ge3sgJ1JVQicgfCB0dWlDdXJyZW5jeSB9fTwvc3Bhbj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgQGZvciAoaXRlbSBvZiBncm91cC5pdGVtczsgdHJhY2sgaXRlbS5pZCkge1xuICAgICAgICAgICAgQGlmICgkaW5kZXggIT09IDApIHtcbiAgICAgICAgICAgICAgICA8aHIgY2xhc3M9XCJtdC1hdXRvIGgtcHggdy1mdWxsIGJnLXR1aS1jbGVhclwiIC8+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNCByZWxhdGl2ZVwiPlxuICAgICAgICAgICAgICAgIEBsZXQgaXNBY3RpdmUgPSAhc2VsZWN0YWJsZSgpIHx8IHNlbGVjdGlvbkZvcm1Hcm91cC5nZXQoaXRlbS5pZCk/LnZhbHVlIHx8IChtYXJrVW5hdmFpbGFibGUoKSAmJiAhaXRlbS5pc09yZGVyYWJsZSk7XG4gICAgICAgICAgICAgICAgQGxldCBpc1BlbmRpbmcgPSBwZW5kaW5nSXRlbXNJZHMoKS5oYXMoaXRlbS5pZCk7XG4gICAgICAgICAgICAgICAgQGxldCBlZGl0ZWRJbkRpYWxvZyA9IGlzRWRpdGVkSW5EaWFsb2coaXRlbSk7XG5cbiAgICAgICAgICAgICAgICA8IS0tINCn0LXQutCx0L7QutGBINCy0YvQsdC+0YDQsCDRgtC+0LLQsNGA0LAuIC0tPlxuICAgICAgICAgICAgICAgIEBpZiAoc2VsZWN0YWJsZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgdHVpQ2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIml0ZW0uaWRcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDwhLS0g0JrQsNGA0YLQvtGH0LrQsCDRgtC+0LLQsNGA0LAuIC0tPlxuICAgICAgICAgICAgICAgIDxzYy1vcmRlci1pdGVtXG4gICAgICAgICAgICAgICAgICAgICNpdGVtQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgICAgIFtwcm9kdWN0XT1cIml0ZW0ucHJvZHVjdFwiXG4gICAgICAgICAgICAgICAgICAgIFtvcmRlckl0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgIFtzaG93UXVhbnRpdHlDb250cm9sXT1cImNhbkVkaXQoKSAmJiAhaXRlbS5jb25maWd1cmF0b3IgJiYgIWVkaXRlZEluRGlhbG9nXCJcbiAgICAgICAgICAgICAgICAgICAgW2lzU2hvd0VkaXRDb250cm9sc109XCJjYW5FZGl0KClcIlxuICAgICAgICAgICAgICAgICAgICBbdXNlTGluZVByaWNlXT1cInVzZUxpbmVQcmljZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW21hcmtVbmF2YWlsYWJsZV09XCJtYXJrVW5hdmFpbGFibGUoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtpc1BlbmRpbmddPVwiaXNQZW5kaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgW3NldHRpbmdzQXZhaWxhYmxlXT1cImNhbkVkaXQoKSAmJiBtZWFzdXJlZEluRGlhbG9nKCkgJiYgIWl0ZW0uY29uZmlndXJhdG9yICYmICFpdGVtLmlzSW5hY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbCBkdXJhdGlvbi0yMDBcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3Mub3BhY2l0eS02MF09XCJpc0l0ZW1EaW1tZWQoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tDYXJkRXZlbnQpPVwib3BlblByb2R1Y3RJbmZvRGlhbG9nKGl0ZW0ucHJvZHVjdCwgaXRlbSwgb3JkZXJPcHRpb25zPy5vcmRlcklkKCkpXCJcbiAgICAgICAgICAgICAgICAgICAgKHF1YW50aXR5VmFsdWVDaGFuZ2VzKT1cInBhdGNoSXRlbSgkZXZlbnQsIGl0ZW1Db21wb25lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrUHJpY2VIaXN0b3J5RXZlbnQpPVwib3BlblByaWNlSGlzdG9yeUNoYXJ0RGlhbG9nKGl0ZW0ucHJvZHVjdClcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tTZXR0aW5ncyk9XCJvcGVuU2V0dGluZ3NEaWFsb2coaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MucG9pbnRlci1ldmVudHMtbm9uZV09XCIhaXNBY3RpdmVcIlxuICAgICAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgICAgICA8IS0tINCa0L3QvtC/0LrQsCDRg9C00LDQu9C10L3QuNGPINGC0L7QstCw0YDQsC4gLS0+XG4gICAgICAgICAgICAgICAgQGlmIChjYW5FZGl0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHVpSWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvblN0YXJ0PVwiQHR1aS50cmFzaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlSXRlbShpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbG9hZGluZ109XCJpc1BlbmRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIiFhYnNvbHV0ZSBsZWZ0LTEgdG9wLTEgbGc6IXJlbGF0aXZlIGxnOmxlZnQtMCBsZzp0b3AtMCBsZzohc2VsZi1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICA8IS0tINCk0YPRgtC10YAg0YHQv9C40YHQutCwLiAtLT5cbiAgICA8ZGl2XG4gICAgICAgIHNjUHJpbnQ9XCJjb3N0XCJcbiAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWVuZCBnYXAtMi41XCJcbiAgICA+XG4gICAgICAgIEBsZXQgdG90YWxTdW0gPSBzdW1TZWxlY3RlZEl0ZW1zKCk7XG4gICAgICAgIDwhLS0g0JjRgtC+0LPQvtCy0LDRjyDRgdGD0LzQvNCwLiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtYmFzZSBmb250LWJvbGRcIj57eyB0b3RhbExhYmVsKCkgfX06IHt7IHRvdGFsU3VtIHwgdHVpRm9ybWF0TnVtYmVyOiBtb25leUZvcm1hdCB8IGFzeW5jIH19IHt7ICdSVUInIHwgdHVpQ3VycmVuY3kgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
449
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtb3JkZXItaXRlbXMtbGlzdC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvb3JkZXIvb3JkZXItaXRlbXMtbGlzdC9zYy1vcmRlci1pdGVtcy1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9vcmRlci9vcmRlci1pdGVtcy1saXN0L3NjLW9yZGVyLWl0ZW1zLWxpc3QuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsc0NBQXNDO0FBRXRDLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUM1QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDMUksT0FBTyxFQUFFLG9CQUFvQixFQUFFLGtCQUFrQixFQUFFLFlBQVksRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM5RyxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRixPQUFPLEVBQUUsZUFBZSxFQUE0RCxjQUFjLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLGFBQWEsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2xMLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsZUFBZSxFQUFFLFNBQVMsRUFBRSxnQkFBZ0IsRUFBRSxtQkFBbUIsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RyxPQUFPLEVBQUUsV0FBVyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxNQUFN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QUNuQixXQUFXO3dCQUNYLFFBQVE7d0JBQ1IsU0FBUzt3QkFDVCxnQkFBZ0I7d0JBQ2hCLGVBQWU7cUJBQ2xCLG1CQUNnQix1QkFBdUIsQ0FBQyxNQUFNO3dEQTZOM0MsS0FBSztzQkFEUixLQUFLO3VCQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIG5vLXBhcmFtLXJlYXNzaWduICovXG5cbmltcG9ydCB7IEFzeW5jUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgRGVzdHJveVJlZiwgZWZmZWN0LCBpbmplY3QsIElucHV0LCBpbnB1dCwgc2lnbmFsLCB1bnRyYWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IG91dHB1dEZyb21PYnNlcnZhYmxlLCB0YWtlVW50aWxEZXN0cm95ZWQsIHRvT2JzZXJ2YWJsZSwgdG9TaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcCc7XG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBGb3Jtc01vZHVsZSwgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFNDX09SREVSX0xPQURFUiwgU2NJT3JkZXJFZGl0b3JMb2FkZXIsIFNjSU9yZGVySXRlbXNHcm91cCwgU2NJT3JkZXJMb2FkZXIsIFNjTnVtYmVySGVscGVyLCBTY09yZGVySXRlbSwgU2NPcmRlckl0ZW1zR3JvdXAsIFNjVW5pdHNIZWxwZXIgfSBmcm9tICdAc25hYmNlbnRyL2NsaWVudC1jb3JlJztcbmltcG9ydCB7IFR1aUN1cnJlbmN5UGlwZSB9IGZyb20gJ0B0YWlnYS11aS9hZGRvbi1jb21tZXJjZSc7XG5pbXBvcnQgeyBUdWlBbGVydFNlcnZpY2UsIFR1aUJ1dHRvbiwgVHVpRGlhbG9nU2VydmljZSwgVHVpRm9ybWF0TnVtYmVyUGlwZSwgVHVpTGFiZWwgfSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQgeyBUVUlfQ09ORklSTSwgVHVpQnV0dG9uTG9hZGluZywgVHVpQ2hlY2tib3ggfSBmcm9tICdAdGFpZ2EtdWkva2l0JztcbmltcG9ydCB7IEVNUFRZLCBmaWx0ZXIsIGZpbmFsaXplLCBtYXAsIG5vb3AsIE9ic2VydmFibGUsIG9mLCBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzJztcblxuaW1wb3J0IHsgQWJzdHJhY3RTY1ByaWNlQ2FyZCwgU2NQcmludERpcmVjdGl2ZSB9IGZyb20gJy4uLy4uL2RpcmVjdGl2ZXMnO1xuaW1wb3J0IHsgSVNjRGlhbG9nU2VydmljZSwgU0NfRElBTE9HX1NFUlZJQ0VfVE9LRU4gfSBmcm9tICcuLi8uLi9wcm92aWRlcnMnO1xuaW1wb3J0IHsgU0NfT1JERVJfT1BUSU9OUywgU2NPcmRlck9wdGlvbnMgfSBmcm9tICcuLi9kaXJlY3RpdmVzL3NjLW9yZGVyLW9wdGlvbnMnO1xuaW1wb3J0IHsgU2NPcmRlckl0ZW1Db21wb25lbnQgfSBmcm9tICcuLi9vcmRlci1pdGVtL3NjLW9yZGVyLWl0ZW0uY29tcG9uZW50JztcblxuLyoqXG4gKiDQmtC+0LzQv9C+0L3QtdC90YIg0YHQv9C40YHQutCwINGC0L7QstCw0YDQvtCyINC60L7RgNC30LjQvdGLLCDQt9Cw0LrQsNC30LAg0LjQu9C4INGH0LXRgNC90L7QstC40LrQsC5cbiAqL1xuQENvbXBvbmVudCh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogJ3NjLW9yZGVyLWl0ZW1zLWxpc3QnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9zYy1vcmRlci1pdGVtcy1saXN0LmNvbXBvbmVudC5odG1sJyxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIEFzeW5jUGlwZSxcbiAgICAgICAgVHVpRm9ybWF0TnVtYmVyUGlwZSxcbiAgICAgICAgU2NPcmRlckl0ZW1Db21wb25lbnQsXG4gICAgICAgIFNjUHJpbnREaXJlY3RpdmUsXG4gICAgICAgIEZvcm1zTW9kdWxlLFxuICAgICAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgICAgICBUdWlDaGVja2JveCxcbiAgICAgICAgVHVpTGFiZWwsXG4gICAgICAgIFR1aUJ1dHRvbixcbiAgICAgICAgVHVpQnV0dG9uTG9hZGluZyxcbiAgICAgICAgVHVpQ3VycmVuY3lQaXBlLFxuICAgIF0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFNjT3JkZXJJdGVtc0xpc3RDb21wb25lbnQge1xuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINC60L7Qv9C40Y4g0L3QsNCx0L7RgNCwINGBINC00L7QsdCw0LLQu9C10L3QvdGL0LzQuCDQuNC70Lgg0YPQsdGA0LDQvdC90YvQvNC4INC60LvRjtGH0LDQvNC4LlxuICAgICAqXG4gICAgICogQHBhcmFtIGtleXMg0J3QsNCx0L7RgC5cbiAgICAgKiBAcGFyYW0gY2hhbmdlZCDQmtC70Y7Rh9C4LlxuICAgICAqIEBwYXJhbSBpc0luY2x1ZGVkINCf0YDQuNC30L3QsNC6INC00L7QsdCw0LLQu9C10L3QuNGPLlxuICAgICAqL1xuICAgIHByaXZhdGUgc3RhdGljIHdpdGhLZXlzKGtleXM6IFJlYWRvbmx5U2V0PHN0cmluZz4sIGNoYW5nZWQ6IHN0cmluZ1tdLCBpc0luY2x1ZGVkOiBib29sZWFuKTogUmVhZG9ubHlTZXQ8c3RyaW5nPiB7XG4gICAgICAgIGNvbnN0IG5leHQgPSBuZXcgU2V0KGtleXMpO1xuXG4gICAgICAgIGNoYW5nZWQuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNJbmNsdWRlZCkge1xuICAgICAgICAgICAgICAgIG5leHQuYWRkKGtleSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIG5leHQuZGVsZXRlKGtleSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBuZXh0O1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L3Rg9GC0YDQtdC90L3QuNC5INGB0LjQs9C90LDQuyDRgdC/0LjRgdC60LAg0Y3Qu9C10LzQtdC90YLQvtCyINC60L7RgNC30LjQvdGLICjRgtC+0LLQsNGA0L7QsikuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGl0ZW1zU2lnbmFsID0gc2lnbmFsPFNjT3JkZXJJdGVtW10+KFtdKTtcblxuICAgIC8qKlxuICAgICAqINCS0LrQu9GO0YfQuNGC0Ywg0LLRi9Cx0L7RgCDQv9C+0LfQuNGG0LjQuSDRh9C10LrQsdC+0LrRgdCw0LzQuC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgc2VsZWN0YWJsZSA9IGlucHV0PGJvb2xlYW4+KHRydWUpO1xuXG4gICAgLyoqXG4gICAgICog0JLQutC70Y7Rh9C40YLRjCDRgNC10LTQsNC60YLQuNGA0L7QstCw0L3QuNC1INC/0L7Qt9C40YbQuNC5LlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBlZGl0YWJsZSA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqINCf0YDQuNC30L3QsNC6INCy0YvQstC+0LTQsCDQv9C+0LfQuNGG0LjQuSDQv9C+INCz0YDRg9C/0L/QsNC8ICjQs9GA0YPQv9C/0LAg0L/QvtC30LjRhtC40Lgg0LjQu9C4IMKr0JHQtdC3INCz0YDRg9C/0L/Ri8K7KSDRgSDQt9Cw0LPQvtC70L7QstC60LDQvNC4INC4INC40YLQvtCz0LDQvNC4LiDQkdC10Lcg0L/RgNC40LfQvdCw0LrQsCDQv9C+0LfQuNGG0LjQuCDQstGL0LLQvtC00Y/RgtGB0Y8g0L7QtNC90LjQvCDRgdC/0LjRgdC60L7QvCDQsdC10Lcg0LfQsNCz0L7Qu9C+0LLQutC+0LIuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGdyb3VwZWQgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiwg0YfRgtC+INC/0L7Qt9C40YbQuNC4LCDQutC+0YLQvtGA0YvQtSDQvdC1INC/0L7Qv9Cw0LTRg9GCINCyINC30LDQutCw0LcsINC/0L7QvNC10YfQsNGO0YLRgdGPINC/0YDQuNC80LXRh9Cw0L3QuNC10Lwg0Lgg0L3QtSDQstGL0LHQuNGA0LDRjtGC0YHRjy4g0J3QtdCw0LrRgtC40LLQvdGL0LUg0L/QvtC30LjRhtC40Lgg0L/RgNC40LPQu9GD0YjQsNGO0YLRgdGPINC4INC30LDRh9GR0YDQutC40LLQsNGO0YLRgdGPLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSBtYXJrVW5hdmFpbGFibGUgPSBpbnB1dDxib29sZWFuPihmYWxzZSk7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiwg0YfRgtC+INGG0LXQvdCwINC30LAg0LXQtNC40L3QuNGG0YMg0LHQtdGA0ZHRgtGB0Y8g0LjQtyDQv9C+0LfQuNGG0LjQuCwg0LAg0L3QtSDQuNC3INGC0LXQutGD0YnQtdC5INGG0LXQvdGLINGC0L7QstCw0YDQsC5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgdXNlTGluZVByaWNlID0gaW5wdXQ8Ym9vbGVhbj4oZmFsc2UpO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0LosINGH0YLQviDQv9Cw0YDQsNC80LXRgtGA0Ysg0L/QvtC30LjRhtC40Lgg0LzQtdC90Y/RjtGC0YHRjyDQsiDQtNC40LDQu9C+0LPQtSDRgtC+0LLQsNGA0LA6INC00LjQsNC70L7QsyDQtNC+0YHRgtGD0L/QtdC9INGDINC70Y7QsdC+0Lkg0LDQutGC0LjQstC90L7QuSDQv9C+0LfQuNGG0LjQuCwg0LAg0LrQvtC70LjRh9C10YHRgtCy0L4g0Lgg0LzQtdGC0YDQsNC2INC40LfQvNC10YDRj9C10LzRi9GFINGC0L7QstCw0YDQvtCyXG4gICAgICog0LzQtdC90Y/RjtGC0YHRjyDRgtC+0LvRjNC60L4g0LIg0L3RkdC8LCDQtNCw0LbQtSDQtdGB0LvQuCDQvNC10YLRgNCw0LYg0LXRidGRINC90LUg0LfQsNC00LDQvS5cbiAgICAgKi9cbiAgICBwdWJsaWMgcmVhZG9ubHkgbWVhc3VyZWRJbkRpYWxvZyA9IGlucHV0PGJvb2xlYW4+KGZhbHNlKTtcblxuICAgIC8qKlxuICAgICAqINCe0YLQutGD0LTQsCDRg9C00LDQu9GP0LXRgtGB0Y8g0L/QvtC30LjRhtC40Y8g0LTQu9GPINGC0LXQutGB0YLQsCDQv9C+0LTRgtCy0LXRgNC20LTQtdC90LjRjywg0L3QsNC/0YDQuNC80LXRgCDCq9C40Lcg0YfQtdGA0L3QvtCy0LjQutCwwrsuINCV0YHQu9C4INC90LUg0LfQsNC00LDQvdC+LCDQv9C+0LfQuNGG0LjRjyDRg9C00LDQu9GP0LXRgtGB0Y8g0LHQtdC3INC/0L7QtNGC0LLQtdGA0LbQtNC10L3QuNGPLlxuICAgICAqINCi0L7RgiDQttC1INGC0LXQutGB0YIg0LjRgdC/0L7Qu9GM0LfRg9C10YLRgdGPINCyINC/0YDQtdC00YPQv9GA0LXQttC00LXQvdC40Lgg0L4g0L3Rg9C70LXQstC+0Lwg0LrQvtC70LjRh9C10YHRgtCy0LUuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IGRlbGV0ZUNvbmZpcm1hdGlvblRhcmdldCA9IGlucHV0PHN0cmluZyB8IG51bGw+KG51bGwpO1xuXG4gICAgLyoqXG4gICAgICog0J/QvtC00L/QuNGB0Ywg0LjRgtC+0LPQvtCy0L7QuSDRgdGD0LzQvNGLLlxuICAgICAqL1xuICAgIHB1YmxpYyByZWFkb25seSB0b3RhbExhYmVsID0gaW5wdXQ8c3RyaW5nPign0JjRgtC+0LPQvicpO1xuXG4gICAgLyoqXG4gICAgICog0J/QvtC30LjRhtC40LgsINGA0LDQt9Cx0LjRgtGL0LUg0L3QsCDQs9GA0YPQv9C/0YsuINCR0LXQtyDQs9GA0YPQv9C/0LjRgNC+0LLQutC4INCy0YHQtSDQv9C+0LfQuNGG0LjQuCDQuNC00YPRgiDQvtC00L3QvtC5INCz0YDRg9C/0L/QvtC5INCx0LXQtyDQt9Cw0LPQvtC70L7QstC60LAuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGdyb3VwcyA9IGNvbXB1dGVkPFNjSU9yZGVySXRlbXNHcm91cFtdPigoKSA9PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5pdGVtc1NpZ25hbCgpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmdyb3VwZWQoKSA/IFNjT3JkZXJJdGVtc0dyb3VwLmZyb21JdGVtcyhpdGVtcykgOiBbbmV3IFNjT3JkZXJJdGVtc0dyb3VwKCcnLCBpdGVtcyldO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICog0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDRiyDQv9C+0LfQuNGG0LjQuSwg0LjQt9C80LXQvdC10L3QuNC1INC40LvQuCDRg9C00LDQu9C10L3QuNC1INC60L7RgtC+0YDRi9GFINC20LTRkdGCINC+0YfQtdGA0LXQtNC4INC40LvQuCDQstGL0L/QvtC70L3Rj9C10YLRgdGPLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBwZW5kaW5nSXRlbXNJZHMgPSBzaWduYWw8UmVhZG9ubHlTZXQ8c3RyaW5nPj4obmV3IFNldDxzdHJpbmc+KCkpO1xuXG4gICAgLyoqXG4gICAgICog0J3QsNC30LLQsNC90LjRjyDRg9C00LDQu9GP0LXQvNGL0YUg0LPRgNGD0L/Qvy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgZGVsZXRpbmdHcm91cHNOYW1lcyA9IHNpZ25hbDxSZWFkb25seVNldDxzdHJpbmc+PihuZXcgU2V0PHN0cmluZz4oKSk7XG5cbiAgICAvKipcbiAgICAgKiDQndCw0LfQstCw0L3QuNGPINCz0YDRg9C/0L8g0YEg0L/QvtC30LjRhtC40Y/QvNC4LCDQttC00YPRidC40LzQuCDQvtGC0LLQtdGC0LA6INGC0LDQutC40LUg0LPRgNGD0L/Qv9GLINGD0LTQsNC70LjRgtGMINC90LXQu9GM0LfRjy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgcGVuZGluZ0dyb3Vwc05hbWVzID0gY29tcHV0ZWQ8UmVhZG9ubHlTZXQ8c3RyaW5nPj4oKCkgPT4ge1xuICAgICAgICBjb25zdCBwZW5kaW5nSWRzID0gdGhpcy5wZW5kaW5nSXRlbXNJZHMoKTtcblxuICAgICAgICByZXR1cm4gbmV3IFNldChcbiAgICAgICAgICAgIHRoaXMuZ3JvdXBzKClcbiAgICAgICAgICAgICAgICAuZmlsdGVyKChncm91cCkgPT4gZ3JvdXAuaXRlbXMuc29tZSgoaXRlbSkgPT4gcGVuZGluZ0lkcy5oYXMoaXRlbS5pZCkpKVxuICAgICAgICAgICAgICAgIC5tYXAoKGdyb3VwKSA9PiBncm91cC5uYW1lKVxuICAgICAgICApO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICog0JLQvdGD0YLRgNC10L3QvdGP0Y8g0LPRgNGD0L/Qv9CwINGE0L7RgNC80Ysg0LTQu9GPINCy0YvQsdC+0YDQsCDQv9C+0LfQuNGG0LjQuS5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgc2VsZWN0aW9uRm9ybUdyb3VwID0gbmV3IEZvcm1Hcm91cDxSZWNvcmQ8c3RyaW5nLCBGb3JtQ29udHJvbDxib29sZWFuPj4+KHt9KTtcblxuICAgIC8qKlxuICAgICAqINCe0L/RhtC40Lgg0LfQsNC60LDQt9CwICjRh9C10YDQvdC+0LLQuNC60LApLiDQn9GA0LXQtNC+0YHRgtCw0LLQu9GP0LXRgtGB0Y8g0LTQuNGA0LXQutGC0LjQstC+0Lkge0BsaW5rIFNjT3JkZXJBY2Nlc3NvckRpcmVjdGl2ZX0g0LIg0LrQvtC90YLQtdC60YHRgtC1INGH0LXRgNC90L7QstC40LrQsC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcmVhZG9ubHkgb3JkZXJPcHRpb25zID0gaW5qZWN0PFNjT3JkZXJPcHRpb25zPihTQ19PUkRFUl9PUFRJT05TLCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG4gICAgLyoqXG4gICAgICog0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDRiyDQstGL0LHRgNCw0L3QvdGL0YUg0L/QvtC30LjRhtC40LkuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGl0ZW1zSWRzID0gdG9TaWduYWwodGhpcy5zZWxlY3Rpb25Gb3JtR3JvdXAudmFsdWVDaGFuZ2VzLnBpcGUobWFwKCh2YWx1ZSkgPT4gT2JqZWN0LmVudHJpZXM8Ym9vbGVhbj4odmFsdWUgYXMgUmVjb3JkPHN0cmluZywgYm9vbGVhbj4pKSksIHtcbiAgICAgICAgaW5pdGlhbFZhbHVlOiBbXSxcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqINCh0L7RgdGC0L7Rj9C90LjQtSDRhNC70LDQs9CwIMKr0JLRi9Cx0YDQsNGC0Ywg0LLRgdC1wrs6IGB0cnVlYCwg0LXRgdC70Lgg0LLRi9Cx0YDQsNC90Ysg0LLRgdC1INC00L7RgdGC0YPQv9C90YvQtSDQtNC70Y8g0LLRi9Cx0L7RgNCwINC/0L7Qt9C40YbQuNC4LCBgZmFsc2VgLCDQtdGB0LvQuCDQvdC4INC+0LTQvdC+0Lkg0LjQu9C4INCy0YvQsdC40YDQsNGC0Ywg0L3QtdGH0LXQs9C+LFxuICAgICAqINC4IGBudWxsYCwg0LXRgdC70Lgg0YLQvtC70YzQutC+INGH0LDRgdGC0YwuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHJlYWRvbmx5IGFsbEl0ZW1zU2VsZWN0ZWQgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGNoZWNrZWRMaXN0ID0gdGhpcy5pdGVtc0lkcygpLm1hcCgoWywgY2hlY2tlZF0pID0+IGNoZWNrZWQpO1xuXG4gICAgICAgIGlmIChjaGVja2VkTGlzdC5sZW5ndGggPiAwICYmIGNoZWNrZWRMaXN0LmV2ZXJ5KEJvb2xlYW4pKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjaGVja2VkTGlzdC5zb21lKEJvb2xlYW4pID8gbnVsbCA6IGZhbHNlO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICog0KHQuNCz0L3QsNC7INC40LTQtdC90YLQuNGE0LjQutCw0YLQvtGA0L7QsiDQstGL0LHRgNCw0L3QvdGL0YUg0L/QvtC30LjRhtC40LkuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHNlbGVjdGVkSXRlbXNJZHMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGFibGUgPSB0aGlzLnNlbGVjdGFibGUoKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5pdGVtc0lkcygpXG4gICAgICAgICAgICAuZmlsdGVyKChbLCBjaGVja2VkXSkgPT4gIXNlbGVjdGFibGUgfHwgY2hlY2tlZClcbiAgICAgICAgICAgIC5tYXAoKFtrZXldKSA9PiBrZXkpO1xuICAgIH0pO1xuXG4gICAgLyoqXG4gICAgICog0JLRi9GF0L7QtNC90YvQtSDQtNCw0L3QvdGL0LUg0L/RgNC4INC40LfQvNC10L3QtdC90LjQuCDQstGL0LHQvtGA0LAg0L/QvtC30LjRhtC40LkuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHNlbGVjdGVkSXRlbXNJZHNDaGFuZ2UgPSBvdXRwdXRGcm9tT2JzZXJ2YWJsZSh0b09ic2VydmFibGUodGhpcy5zZWxlY3RlZEl0ZW1zSWRzKSk7XG5cbiAgICAvKipcbiAgICAgKiDQodGD0LzQvNCwINGB0YLQvtC40LzQvtGB0YLQuCDQstGL0LHRgNCw0L3QvdGL0YUg0L/QvtC30LjRhtC40LkuXG4gICAgICovXG4gICAgcHVibGljIHJlYWRvbmx5IHN1bVNlbGVjdGVkSXRlbXMgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGl0ZW1zID0gdGhpcy5pdGVtc1NpZ25hbCgpO1xuICAgICAgICBjb25zdCBzZWxlY3RlZEl0ZW1zSWRzID0gdGhpcy5zZWxlY3RlZEl0ZW1zSWRzKCk7XG4gICAgICAgIGNvbnN0IHNlbGVjdGFibGUgPSB0aGlzLnNlbGVjdGFibGUoKTtcblxuICAgICAgICByZXR1cm4gU2NPcmRlckl0ZW0uZ2V0Q29zdFN1bShpdGVtcy5maWx0ZXIoKGl0ZW0pID0+ICFzZWxlY3RhYmxlIHx8IHNlbGVjdGVkSXRlbXNJZHMuaW5jbHVkZXMoaXRlbS5pZCkpKTtcbiAgICB9KTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDQv9C+0LvRg9GH0LXQvdC40Y8g0Lgg0YDQtdC00LDQutGC0LjRgNC+0LLQsNC90LjRjyDRgdC/0LjRgdC60LAg0YLQvtCy0LDRgNC+0LIg0LfQsNC60LDQt9CwICjQutC+0YDQt9C40L3QsCAvINC30LDQutCw0LcgLyDRh9C10YDQvdC+0LLQuNC6ID0g0LfQsNC60LDQtykuXG4gICAgICog0J/RgNC10LTQvtGB0YLQsNCy0LvRj9C10YLRgdGPINGA0L7QtNC40YLQtdC70LXQvCDRh9C10YDQtdC3INGC0L7QutC10L0ge0BsaW5rIFNDX09SREVSX0xPQURFUn0gKNGA0LXQsNC70LjQt9Cw0YbQuNGPIHtAbGluayBTY0lPcmRlckxvYWRlcn0pLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBvcmRlckl0ZW1zTGlzdExvYWRlciA9IGluamVjdDxTY0lPcmRlckxvYWRlciB8IFNjSU9yZGVyRWRpdG9yTG9hZGVyPihTQ19PUkRFUl9MT0FERVIpO1xuXG4gICAgLyoqXG4gICAgICog0J/RgNC40LfQvdCw0LosINGH0YLQviDQvNC+0LbQvdC+INGA0LXQtNCw0LrRgtC40YDQvtCy0LDRgtGMINC/0L7Qt9C40YbQuNC4LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBjYW5FZGl0ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5lZGl0YWJsZSgpICYmICd1cGRhdGVQcm9kdWN0JCcgaW4gdGhpcy5vcmRlckl0ZW1zTGlzdExvYWRlcik7XG5cbiAgICAvKipcbiAgICAgKiDQn9GA0LjQt9C90LDQuiwg0YfRgtC+INCz0YDRg9C/0L/RgyDQvNC+0LbQvdC+INGD0LTQsNC70LjRgtGMINGG0LXQu9C40LrQvtC8LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBjYW5EZWxldGVHcm91cHMgPSBjb21wdXRlZCgoKSA9PiB0aGlzLmNhbkVkaXQoKSAmJiAnZGVsZXRlUHJvZHVjdHMkJyBpbiB0aGlzLm9yZGVySXRlbXNMaXN0TG9hZGVyKTtcblxuICAgIC8qKlxuICAgICAqINCd0LDRgdGC0YDQvtC50LrQuCDQstGL0LLQvtC00LAg0YHRg9C80Lwg0LIg0YDRg9Cx0LvRj9GFLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCByZWFkb25seSBtb25leUZvcm1hdCA9IFNjTnVtYmVySGVscGVyLmdldE1vbmV5Rm9ybWF0KCk7XG5cbiAgICAvKipcbiAgICAgKiDQodGB0YvQu9C60LAg0LTQu9GPINCw0LLRgtC+0LzQsNGC0LjRh9C10YHQutC+0LPQviDRg9C/0YDQsNCy0LvQtdC90LjRjyDRg9C90LjRh9GC0L7QttC10L3QuNC10Lwg0LfQsNCy0LjRgdC40LzQvtGB0YLQtdC5LlxuICAgICAqL1xuICAgIHByaXZhdGUgcmVhZG9ubHkgZGVzdHJveVJlZiA9IGluamVjdChEZXN0cm95UmVmKTtcblxuICAgIC8qKlxuICAgICAqINCh0LXRgNCy0LjRgSDQtNC70Y8g0YDQsNCx0L7RgtGLINGBINC00LjQsNC70L7Qs9C+0LLRi9C80Lgg0L7QutC90LDQvNC4LlxuICAgICAqINCf0YDQtdC00L7RgdGC0LDQstC70Y/QtdGC0YHRjyDRgNC+0LTQuNGC0LXQu9C10Lwg0YfQtdGA0LXQtyDRgtC+0LrQtdC9IHtAbGluayBTQ19ESUFMT0dfU0VSVklDRV9UT0tFTn0uXG4gICAgICovXG4gICAgcHJpdmF0ZSByZWFkb25seSBzY0RpYWxvZ1NlcnZpY2UgPSBpbmplY3Q8SVNjRGlhbG9nU2VydmljZT4oU0NfRElBTE9HX1NFUlZJQ0VfVE9LRU4pO1xuXG4gICAgLyoqXG4gICAgICog0KHQtdGA0LLQuNGBINC00LjQsNC70L7Qs9C+0LLRi9GFINC+0LrQvtC9IFRhaWdhINC00LvRjyDQv9C+0LTRgtCy0LXRgNC20LTQtdC90LjQuS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGRpYWxvZ1NlcnZpY2UgPSBpbmplY3QoVHVpRGlhbG9nU2VydmljZSk7XG5cbiAgICAvKipcbiAgICAgKiDQodC10YDQstC40YEg0YPQstC10LTQvtC80LvQtdC90LjQuS5cbiAgICAgKi9cbiAgICBwcml2YXRlIHJlYWRvbmx5IGFsZXJ0cyA9IGluamVjdChUdWlBbGVydFNlcnZpY2UpO1xuXG4gICAgLyoqXG4gICAgICog0JjQvdC40YbQuNCw0LvQuNC30LjRgNGD0LXRgiDRjdC60LfQtdC80L/Qu9GP0YAg0LrQu9Cw0YHRgdCwIHtAbGluayBTY09yZGVySXRlbXNMaXN0Q29tcG9uZW50fS5cbiAgICAgKiDQktGF0L7QtNGLINCy0YvQsdC+0YDQsCDQuCDQv9C+0LzQtdGC0LrQuCDQvdC10LTQvtGB0YLRg9C/0L3Ri9GFINC/0L7Qt9C40YbQuNC5INC80L7Qs9GD0YIg0L/RgNC40LnRgtC4INC/0L7RgdC70LUg0YHQv9C40YHQutCwINC/0L7Qt9C40YbQuNC5LCDQv9C+0Y3RgtC+0LzRgyDQv9GA0Lgg0LjRhSDQuNC30LzQtdC90LXQvdC40Lgg0LLRi9Cx0L7RgCDRgdC40L3RhdGA0L7QvdC40LfQuNGA0YPQtdGC0YHRjyDQt9Cw0L3QvtCy0L4uXG4gICAgICovXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBlZmZlY3QoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5tYXJrVW5hdmFpbGFibGUoKTtcbiAgICAgICAgICAgIHRoaXMuc2VsZWN0YWJsZSgpO1xuICAgICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnN5bmNTZWxlY3Rpb25Db250cm9scygpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0L/QuNGB0L7QuiDRjdC70LXQvNC10L3RgtC+0LIg0LrQvtGA0LfQuNC90YsgKNGC0L7QstCw0YDQvtCyKS4g0J/RgNC4INGD0YHRgtCw0L3QvtCy0LrQtSDRgdC40L3RhdGA0L7QvdC90L4g0L7QsdC90L7QstC70Y/QtdGCINC60L7QvdGC0YDQvtC70Ysg0LLRi9Cx0L7RgNCwINCyINGE0L7RgNC80LUuXG4gICAgICovXG4gICAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSlcbiAgICBzZXQgaXRlbXModmFsdWU6IFNjT3JkZXJJdGVtW10pIHtcbiAgICAgICAgdGhpcy5pdGVtc1NpZ25hbC5zZXQodmFsdWUpO1xuICAgICAgICB0aGlzLnN5bmNTZWxlY3Rpb25Db250cm9scygpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCh0LjQvdGF0YDQvtC90LjQt9C40YDRg9C10YIg0LrQvtC90YLRgNC+0LvRiyDRhNC+0YDQvNGLINCy0YvQsdC+0YDQsCDRgSDRgtC10LrRg9GJ0LjQvCDRgdC/0LjRgdC60L7QvCDRgtC+0LLQsNGA0L7Qsjog0YPQtNCw0LvRj9C10YIg0LrQvtC90YLRgNC+0LvRiyDQtNC70Y8g0L7RgtGB0YPRgtGB0YLQstGD0Y7RidC40YUgaWQsINC00L7QsdCw0LLQu9GP0LXRgiDQtNC70Y8g0L3QvtCy0YvRhS5cbiAgICAgKiDQmtC+0L3RgtGA0L7Qu9GLINC80LXQvdGP0Y7RgtGB0Y8g0LHQtdC3INGB0L7QsdGL0YLQuNC5LCDQsCDQt9C90LDRh9C10L3QuNC1INCz0YDRg9C/0L/RiyDQv9C10YDQtdGB0YfQuNGC0YvQstCw0LXRgtGB0Y8g0L7QtNC40L0g0YDQsNC3INCyINC60L7QvdGG0LU6INC90LAg0LfQsNGP0LLQutCw0YUg0LIg0YHQvtGC0L3QuCDQv9C+0LfQuNGG0LjQuSDRjdGC0L4g0LfQsNC80LXRgtC90L4uXG4gICAgICovXG4gICAgcHJpdmF0ZSBzeW5jU2VsZWN0aW9uQ29udHJvbHMoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5zZWxlY3RhYmxlKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGN1cnJlbnRJdGVtcyA9IHRoaXMuaXRlbXNTaWduYWwoKTtcbiAgICAgICAgY29uc3QgY3VycmVudElkcyA9IG5ldyBTZXQoY3VycmVudEl0ZW1zLm1hcCgoaXRlbSkgPT4gaXRlbS5pZCkpO1xuXG4gICAgICAgIE9iamVjdC5rZXlzKHRoaXMuc2VsZWN0aW9uRm9ybUdyb3VwLmNvbnRyb2xzKS5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICBpZiAoIWN1cnJlbnRJZHMuaGFzKG5hbWUpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Gb3JtR3JvdXAucmVtb3ZlQ29udHJvbChuYW1lIGFzIG5ldmVyLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuXG4gICAgICAgIGN1cnJlbnRJdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250cm9sID0gdGhpcy5zZWxlY3Rpb25Gb3JtR3JvdXAuZ2V0KGl0ZW0uaWQpO1xuICAgICAgICAgICAgY29uc3QgaXNTZWxlY3RhYmxlID0gIXRoaXMubWFya1VuYXZhaWxhYmxlKCkgfHwgaXRlbS5pc09yZGVyYWJsZTtcblxuICAgICAgICAgICAgaWYgKCFjb250cm9sKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Gb3JtR3JvdXAuYWRkQ29udHJvbChpdGVtLmlkLCBuZXcgRm9ybUNvbnRyb2woeyB2YWx1ZTogaXNTZWxlY3RhYmxlLCBkaXNhYmxlZDogIWlzU2VsZWN0YWJsZSB9LCB7IG5vbk51bGxhYmxlOiB0cnVlIH0pLCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFpc1NlbGVjdGFibGUgJiYgY29udHJvbC5lbmFibGVkKSB7XG4gICAgICAgICAgICAgICAgY29udHJvbC5zZXRWYWx1ZShmYWxzZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuZGlzYWJsZSh7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlzU2VsZWN0YWJsZSAmJiBjb250cm9sLmRpc2FibGVkKSB7XG4gICAgICAgICAgICAgICAgY29udHJvbC5lbmFibGUoeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgICAgIGNvbnRyb2wuc2V0VmFsdWUodHJ1ZSwgeyBlbWl0RXZlbnQ6IGZhbHNlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnNlbGVjdGlvbkZvcm1Hcm91cC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLRi9Cx0LjRgNCw0LXRgiDQstGB0LUg0LTQvtGB0YLRg9C/0L3Ri9C1INC00LvRjyDQstGL0LHQvtGA0LAg0L/QvtC30LjRhtC40Lgg0LjQu9C4INGB0L3QuNC80LDQtdGCINCy0YvQsdC+0YAg0YHQviDQstGB0LXRhS5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBldmVudCDQodC+0LHRi9GC0LjQtSDQuNC30LzQtdC90LXQvdC40Y8g0YTQu9Cw0LPQsCDQstGL0LHQvtGA0LAg0LLRgdC10YUg0L/QvtC30LjRhtC40LkuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIHNlbGVjdEFsbENoYW5nZUhhbmRsZXIoZXZlbnQ6IEV2ZW50KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHsgY2hlY2tlZCB9ID0gZXZlbnQudGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGVuYWJsZWRJZHMgPSBPYmplY3QuZW50cmllcyh0aGlzLnNlbGVjdGlvbkZvcm1Hcm91cC5jb250cm9scylcbiAgICAgICAgICAgIC5maWx0ZXIoKFssIGNvbnRyb2xdKSA9PiBjb250cm9sLmVuYWJsZWQpXG4gICAgICAgICAgICAubWFwKChbaWRdKSA9PiBpZCk7XG5cbiAgICAgICAgdGhpcy5zZWxlY3Rpb25Gb3JtR3JvdXAucGF0Y2hWYWx1ZShPYmplY3QuZnJvbUVudHJpZXMoZW5hYmxlZElkcy5tYXAoKGlkKSA9PiBbaWQsIGNoZWNrZWRdKSkpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCS0L7Qt9Cy0YDQsNGJ0LDQtdGCINC/0YDQuNC30L3QsNC6LCDRh9GC0L4g0L/QvtC30LjRhtC40Y8g0L/RgNC40LPQu9GD0YjQtdC90LA6INC+0L3QsCDQvdC10LDQutGC0LjQstC90LAg0LjQu9C4INC90LUg0LLRi9Cx0YDQsNC90LAg0LTQu9GPINC30LDQutCw0LfQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpdGVtINCf0L7Qt9C40YbQuNGPLlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBpc0l0ZW1EaW1tZWQoaXRlbTogU2NPcmRlckl0ZW0pOiBib29sZWFuIHtcbiAgICAgICAgY29uc3QgaXNVbnNlbGVjdGVkID0gdGhpcy5zZWxlY3RhYmxlKCkgJiYgIXRoaXMuc2VsZWN0aW9uRm9ybUdyb3VwLmdldChpdGVtLmlkKT8udmFsdWU7XG5cbiAgICAgICAgcmV0dXJuIHRoaXMubWFya1VuYXZhaWxhYmxlKCkgPyBpdGVtLmlzSW5hY3RpdmUgfHwgKGl0ZW0uaXNPcmRlcmFibGUgJiYgaXNVbnNlbGVjdGVkKSA6IGlzVW5zZWxlY3RlZDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiDQv9GA0LjQt9C90LDQuiwg0YfRgtC+INC60L7Qu9C40YfQtdGB0YLQstC+INC4INC80LXRgtGA0LDQtiDRgtC+0LLQsNGA0LAg0L/QvtC30LjRhtC40Lgg0LzQtdC90Y/RjtGC0YHRjyDQsiDQtNC40LDQu9C+0LPQtSDRgtC+0LLQsNGA0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbSDQn9C+0LfQuNGG0LjRjy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgaXNFZGl0ZWRJbkRpYWxvZyhpdGVtOiBTY09yZGVySXRlbSk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gdGhpcy5tZWFzdXJlZEluRGlhbG9nKCkgJiYgU2NVbml0c0hlbHBlci5wcm9kdWN0SXNNZWFzdXJhYmxlKGl0ZW0ucHJvZHVjdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0KPQtNCw0LvRj9C10YIg0L/QvtC30LjRhtC40Y4sINC/0YDQuCDQvdC10L7QsdGF0L7QtNC40LzQvtGB0YLQuCDQv9C+0YHQu9C1INC/0L7QtNGC0LLQtdGA0LbQtNC10L3QuNGPLiDQodC+0L7QsdGJ0LXQvdC40LUg0L7QsSDQvtGI0LjQsdC60LUg0L/QvtC60LDQt9GL0LLQsNC10YIg0L/QtdGA0LXRhdCy0LDRgtGH0LjQuiDQv9GA0LjQu9C+0LbQtdC90LjRjy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpdGVtINCf0L7Qt9C40YbQuNGPINGC0L7QstCw0YDQsCDQtNC70Y8g0YPQtNCw0LvQtdC90LjRjy5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgZGVsZXRlSXRlbShpdGVtOiBTY09yZGVySXRlbSk6IHZvaWQge1xuICAgICAgICBpZiAoIXRoaXMuY2FuRWRpdCgpIHx8IHRoaXMucGVuZGluZ0l0ZW1zSWRzKCkuaGFzKGl0ZW0uaWQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpcm1EZWxldGUkKGl0ZW0pXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEl0ZW1QZW5kaW5nKGl0ZW0uaWQsIHRydWUpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy5vcmRlckl0ZW1zTGlzdExvYWRlciBhcyBTY0lPcmRlckVkaXRvckxvYWRlcikuZGVsZXRlUHJvZHVjdCQoaXRlbSwgdGhpcy5vcmRlck9wdGlvbnM/Lm9yZGVySWQoKSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEl0ZW1QZW5kaW5nKGl0ZW0uaWQsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoeyBlcnJvcjogbm9vcCB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQo9C00LDQu9GP0LXRgiDQstGB0LUg0L/QvtC30LjRhtC40Lgg0LPRgNGD0L/Qv9GLINC/0L7RgdC70LUg0L/QvtC00YLQstC10YDQttC00LXQvdC40Y8uINCh0L7RgdGC0LDQsiDQsdC10YDRkdGC0YHRjyDQvdCwINC80L7QvNC10L3RgiDQv9C+0LTRgtCy0LXRgNC20LTQtdC90LjRjy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBncm91cCDQk9GA0YPQv9C/0LAg0L/QvtC30LjRhtC40LkuXG4gICAgICovXG4gICAgcHJvdGVjdGVkIGRlbGV0ZUdyb3VwKGdyb3VwOiBTY0lPcmRlckl0ZW1zR3JvdXApOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmNhbkRlbGV0ZUdyb3VwcygpIHx8IHRoaXMucGVuZGluZ0dyb3Vwc05hbWVzKCkuaGFzKGdyb3VwLm5hbWUpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmNvbmZpcm1Hcm91cERlbGV0ZSQoZ3JvdXApXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpdGVtcyA9IHRoaXMuZ3JvdXBzKCkuZmluZCgoeyBuYW1lIH0pID0+IG5hbWUgPT09IGdyb3VwLm5hbWUpPy5pdGVtcyA/PyBbXTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaWRzID0gaXRlbXMubWFwKChpdGVtKSA9PiBpdGVtLmlkKTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAoaWRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVNUFRZO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRJdGVtc1BlbmRpbmcoaWRzLCB0cnVlKTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5kZWxldGluZ0dyb3Vwc05hbWVzLnVwZGF0ZSgobmFtZXMpID0+IFNjT3JkZXJJdGVtc0xpc3RDb21wb25lbnQud2l0aEtleXMobmFtZXMsIFtncm91cC5uYW1lXSwgdHJ1ZSkpO1xuXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAodGhpcy5vcmRlckl0ZW1zTGlzdExvYWRlciBhcyBSZXF1aXJlZDxTY0lPcmRlckVkaXRvckxvYWRlcj4pLmRlbGV0ZVByb2R1Y3RzJChpdGVtcywgdGhpcy5vcmRlck9wdGlvbnM/Lm9yZGVySWQoKSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsaXplKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldEl0ZW1zUGVuZGluZyhpZHMsIGZhbHNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmRlbGV0aW5nR3JvdXBzTmFtZXMudXBkYXRlKChuYW1lcykgPT4gU2NPcmRlckl0ZW1zTGlzdENvbXBvbmVudC53aXRoS2V5cyhuYW1lcywgW2dyb3VwLm5hbWVdLCBmYWxzZSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSh7IGVycm9yOiBub29wIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0LHQvdC+0LLQu9GP0LXRgiDQutC+0LvQuNGH0LXRgdGC0LLQviDRgtC+0LLQsNGA0LAuINCa0L7Qu9C40YfQtdGB0YLQstC+INC90LXQsNC60YLQuNCy0L3QvtC5INC/0L7Qt9C40YbQuNC4INC90LUg0LzQtdC90Y/QtdGC0YHRjy4g0J/Rg9GB0YLQvtC1INC40LvQuCDQvdGD0LvQtdCy0L7QtSDQt9C90LDRh9C10L3QuNC1INCy0L7Qt9Cy0YDQsNGJ0LDQtdGC0YHRjyDQuiDRgdC+0YXRgNCw0L3RkdC90L3QvtC80YMg0LrQvtC70LjRh9C10YHRgtCy0YMuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gbmV3UXVhbnRpdHkg0J3QvtCy0L7QtSDQt9C90LDRh9C10L3QuNC1INC60L7Qu9C40YfQtdGB0YLQstCwINGC0L7QstCw0YDQsC5cbiAgICAgKiBAcGFyYW0gcHJpY2VDYXJkINCa0L7QvNC/0L7QvdC10L3RgiDQutCw0YDRgtC+0YfQutC4INGC0L7QstCw0YDQsC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgcGF0Y2hJdGVtKG5ld1F1YW50aXR5OiBudW1iZXIgfCBudWxsLCBwcmljZUNhcmQ6IEFic3RyYWN0U2NQcmljZUNhcmQpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgeyBvcmRlckl0ZW0gfSA9IHByaWNlQ2FyZDtcblxuICAgICAgICBpZiAoIXRoaXMuY2FuRWRpdCgpIHx8ICFvcmRlckl0ZW0gfHwgIXByaWNlQ2FyZC5wcm9kdWN0IHx8IG9yZGVySXRlbS5pc0luYWN0aXZlKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIW5ld1F1YW50aXR5KSB7XG4gICAgICAgICAgICBwcmljZUNhcmQucXVhbnRpdHlDb250cm9sLnBhdGNoVmFsdWUob3JkZXJJdGVtLnF1YW50aXR5LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICB0aGlzLndhcm5FbXB0eVF1YW50aXR5KCk7XG5cbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0SXRlbVBlbmRpbmcob3JkZXJJdGVtLmlkLCB0cnVlKTtcblxuICAgICAgICAodGhpcy5vcmRlckl0ZW1zTGlzdExvYWRlciBhcyBTY0lPcmRlckVkaXRvckxvYWRlcilcbiAgICAgICAgICAgIC51cGRhdGVQcm9kdWN0JChvcmRlckl0ZW0uaWQsIHsgcXVhbnRpdHk6IG5ld1F1YW50aXR5IH0sIHRoaXMub3JkZXJPcHRpb25zPy5vcmRlcklkKCkpXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0SXRlbVBlbmRpbmcob3JkZXJJdGVtLmlkLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoe1xuICAgICAgICAgICAgICAgIGVycm9yOiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHByaWNlQ2FyZC5xdWFudGl0eUNvbnRyb2wucGF0Y2hWYWx1ZSgocHJpY2VDYXJkLm9yZGVySXRlbSA/PyBvcmRlckl0ZW0pLnF1YW50aXR5LCB7IGVtaXRFdmVudDogZmFsc2UgfSk7XG4gICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH0pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqINCe0YLQutGA0YvQstCw0LXRgiDQvNC+0LTQsNC70YzQvdC+0LUg0L7QutC90L4g0L7Qv9C40YHQsNC90LjRjyDRgtC+0LLQsNGA0LAuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gcHJvZHVjdCDQotC+0LLQsNGAL9GD0YHQu9GD0LPQsCwg0L7Qv9C40YHQsNC90LjQtSDQutC+0YLQvtGA0L7QuSDQvdC10L7QsdGF0L7QtNC40LzQviDQvtGC0L7QsdGA0LDQt9C40YLRjC5cbiAgICAgKiBAcGFyYW0gb3JkZXJJdGVtINCV0LTQuNC90LjRh9C90LDRjyDQv9C+0LfQuNGG0LjRjyDRgtC+0LLQsNGA0LAv0YPRgdC70YPQs9C4INCyINC30LDQutCw0LfQtSwg0LTQu9GPINC60L7RgtC+0YDQvtC5INC90LXQvtCx0YXQvtC00LjQvNC+INC+0YLQutGA0YvRgtGMINC60L7QvdGE0LjQs9GD0YDQsNGC0L7RgC5cbiAgICAgKiBAcGFyYW0gb3JkZXJJZCDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQt9Cw0LrQsNC30LAsINCyINC60L7RgtC+0YDQvtC8INC90LXQvtCx0YXQvtC00LjQvNC+INC+0YLQutGA0YvRgtGMINC60L7QvdGE0LjQs9GD0YDQsNGC0L7RgC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb3BlblByb2R1Y3RJbmZvRGlhbG9nKHByb2R1Y3Q6IFNjT3JkZXJJdGVtWydwcm9kdWN0J10sIG9yZGVySXRlbT86IFNjT3JkZXJJdGVtLCBvcmRlcklkPzogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnNjRGlhbG9nU2VydmljZS5vcGVuUHJvZHVjdEluZm9EaWFsb2cpIHtcbiAgICAgICAgICAgIHRoaXMuc2NEaWFsb2dTZXJ2aWNlLm9wZW5Qcm9kdWN0SW5mb0RpYWxvZyhwcm9kdWN0LCBvcmRlckl0ZW0sIG9yZGVySWQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J7RgtC60YDRi9Cy0LDQtdGCINC80L7QtNCw0LvRjNC90L7QtSDQvtC60L3QviDQuNC30LzQtdC90LXQvdC40Y8g0YLQvtCy0LDRgNCwINC40LvQuCDQtdCz0L4g0LrQvtC90YTQuNCz0YPRgNCw0YLQvtGA0LAuINCV0YHQu9C4INC/0LDRgNCw0LzQtdGC0YDRiyDQv9C+0LfQuNGG0LjQuCDQvNC10L3Rj9GO0YLRgdGPINCyINC00LjQsNC70L7Qs9C1LCDQvtC60L3QviDRgtC+0LLQsNGA0LAg0L7RgtC60YDRi9Cy0LDQtdGC0YHRjyDQuCDRgyDRiNGC0YPRh9C90L7Qs9C+INGC0L7QstCw0YDQsC5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpdGVtINCf0L7Qt9C40YbQuNGPINGC0L7QstCw0YDQsC5cbiAgICAgKi9cbiAgICBwcm90ZWN0ZWQgb3BlblNldHRpbmdzRGlhbG9nKGl0ZW06IFNjT3JkZXJJdGVtKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGlzQ29uZmlndXJhdG9yID0gQm9vbGVhbihpdGVtLmNvbmZpZ3VyYXRvcik7XG5cbiAgICAgICAgaWYgKGlzQ29uZmlndXJhdG9yKSB7XG4gICAgICAgICAgICB0aGlzLnNjRGlhbG9nU2VydmljZS5vcGVuQ29uZmlndXJhdG9yRGlhbG9nKGl0ZW0ucHJvZHVjdCwgaXRlbSwgdGhpcy5vcmRlck9wdGlvbnM/Lm9yZGVySWQoKSk7XG4gICAgICAgIH0gZWxzZSBpZiAodGhpcy5tZWFzdXJlZEluRGlhbG9nKCkgfHwgU2NVbml0c0hlbHBlci5wcm9kdWN0SXNNZWFzdXJhYmxlKGl0ZW0ucHJvZHVjdCkpIHtcbiAgICAgICAgICAgIHRoaXMuc2NEaWFsb2dTZXJ2aWNlLm9wZW5BZGRPckVkaXRpbmdDYXJ0SXRlbURpYWxvZyhpdGVtLnByb2R1Y3QsIGl0ZW0sIHRoaXMub3JkZXJPcHRpb25zPy5vcmRlcklkKCksIHRydWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J7RgtC60YDRi9Cy0LDQtdGCINC00LjQsNC70L7Qs9C+0LLQvtC1INC+0LrQvdC+IFwi0JPRgNCw0YTQuNC6INC40LfQvNC10L3QtdC90LjRjyDRgdGC0L7QuNC80L7RgdGC0LhcIiDQtNC70Y8g0YLQvtCy0LDRgNCwLlxuICAgICAqXG4gICAgICogQHBhcmFtIHByb2R1Y3Qg0KLQvtCy0LDRgC/Rg9GB0LvRg9Cz0LAsINC00LvRjyDQutC+0YLQvtGA0L7Qs9C+INC90LXQvtCx0YXQvtC00LjQvNC+INC+0YLQvtCx0YDQsNC30LjRgtGMINCz0YDQsNGE0LjQuiDQuNC30LzQtdC90LXQvdC40Y8g0YHRgtC+0LjQvNC+0YHRgtC4LlxuICAgICAqL1xuICAgIHByb3RlY3RlZCBvcGVuUHJpY2VIaXN0b3J5Q2hhcnREaWFsb2cocHJvZHVjdDogU2NPcmRlckl0ZW1bJ3Byb2R1Y3QnXSk6IHZvaWQge1xuICAgICAgICB0aGlzLnNjRGlhbG9nU2VydmljZS5vcGVuUHJpY2VIaXN0b3J5Q2hhcnREaWFsb2cocHJvZHVjdCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIge0BsaW5rIE9ic2VydmFibGV9LCDQutC+0YLQvtGA0YvQuSDQstGL0LTQsNGR0YIg0LfQvdCw0YfQtdC90LjQtSwg0LrQvtCz0LTQsCDRg9C00LDQu9C10L3QuNC1INC/0L7Qt9C40YbQuNC4INC/0L7QtNGC0LLQtdGA0LbQtNC10L3QviDQuNC70Lgg0L/QvtC00YLQstC10YDQttC00LXQvdC40LUg0L3QtSDRgtGA0LXQsdGD0LXRgtGB0Y8uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbSDQo9C00LDQu9GP0LXQvNCw0Y8g0L/QvtC30LjRhtC40Y8uXG4gICAgICovXG4gICAgcHJpdmF0ZSBjb25maXJtRGVsZXRlJChpdGVtOiBTY09yZGVySXRlbSk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLmRlbGV0ZUNvbmZpcm1hdGlvblRhcmdldCgpO1xuXG4gICAgICAgIGlmICghdGFyZ2V0KSB7XG4gICAgICAgICAgICByZXR1cm4gb2YodHJ1ZSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdGhpcy5jb25maXJtUmVtb3ZhbCQoYNCj0LTQsNC70LjRgtGMINC/0L7Qt9C40YbQuNGOIMKrJHtpdGVtLnByb2R1Y3QubmFtZX3CuyAke3RhcmdldH0/YCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0JLQvtC30LLRgNCw0YnQsNC10YIge0BsaW5rIE9ic2VydmFibGV9LCDQutC+0YLQvtGA0YvQuSDQstGL0LTQsNGR0YIg0LfQvdCw0YfQtdC90LjQtSwg0LrQvtCz0LTQsCDRg9C00LDQu9C10L3QuNC1INCz0YDRg9C/0L/RiyDQv9C+0LTRgtCy0LXRgNC20LTQtdC90L4uXG4gICAgICpcbiAgICAgKiBAcGFyYW0gZ3JvdXAg0JPRgNGD0L/Qv9CwINC/0L7Qt9C40YbQuNC5LlxuICAgICAqL1xuICAgIHByaXZhdGUgY29uZmlybUdyb3VwRGVsZXRlJChncm91cDogU2NJT3JkZXJJdGVtc0dyb3VwKTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG4gICAgICAgIGNvbnN0IHRhcmdldCA9IHRoaXMuZGVsZXRlQ29uZmlybWF0aW9uVGFyZ2V0KCk7XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IHRhcmdldCA/IGAgJHt0YXJnZXR9YCA6ICcnO1xuXG4gICAgICAgIHJldHVybiB0aGlzLmNvbmZpcm1SZW1vdmFsJChg0KPQtNCw0LvQuNGC0Ywg0LLRgdC1INC/0L7Qt9C40YbQuNC4INCz0YDRg9C/0L/RiyDCqyR7Z3JvdXAubmFtZX3CuyR7c291cmNlfT9gKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQktC+0LfQstGA0LDRidCw0LXRgiB7QGxpbmsgT2JzZXJ2YWJsZX0sINC60L7RgtC+0YDRi9C5INCy0YvQtNCw0ZHRgiDQt9C90LDRh9C10L3QuNC1LCDQutC+0LPQtNCwINGD0LTQsNC70LXQvdC40LUg0L/QvtC00YLQstC10YDQttC00LXQvdC+LlxuICAgICAqXG4gICAgICogQHBhcmFtIGxhYmVsINCS0L7Qv9GA0L7RgS5cbiAgICAgKi9cbiAgICBwcml2YXRlIGNvbmZpcm1SZW1vdmFsJChsYWJlbDogc3RyaW5nKTogT2JzZXJ2YWJsZTx1bmtub3duPiB7XG4gICAgICAgIHJldHVybiB0aGlzLmRpYWxvZ1NlcnZpY2Uub3Blbjxib29sZWFuPihUVUlfQ09ORklSTSwgeyBsYWJlbCwgZGF0YTogeyB5ZXM6ICfQlNCwLCDRg9C00LDQu9C40YLRjCcsIG5vOiAn0J3QtdGCLCDQvtGB0YLQsNCy0LjRgtGMJyB9IH0pLnBpcGUoZmlsdGVyKEJvb2xlYW4pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQntGC0LzQtdGH0LDQtdGCINC/0L7Qt9C40YbQuNGOINC60LDQuiDQvtC20LjQtNCw0Y7RidGD0Y4g0L7RgtCy0LXRgtCwINC40LvQuCDRgdC90LjQvNCw0LXRgiDQvtGC0LzQtdGC0LrRgy5cbiAgICAgKlxuICAgICAqIEBwYXJhbSBpZCDQmNC00LXQvdGC0LjRhNC40LrQsNGC0L7RgCDQv9C+0LfQuNGG0LjQuC5cbiAgICAgKiBAcGFyYW0gaXNQZW5kaW5nINCf0YDQuNC30L3QsNC6INC+0LbQuNC00LDQvdC40Y8uXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRJdGVtUGVuZGluZyhpZDogc3RyaW5nLCBpc1BlbmRpbmc6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5zZXRJdGVtc1BlbmRpbmcoW2lkXSwgaXNQZW5kaW5nKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiDQodGC0LDQstC40YIg0LjQu9C4INGB0L3QuNC80LDQtdGCINC+0YLQvNC10YLQutGDINC+0LbQuNC00LDQvdC40Y8g0YMg0L/QvtC30LjRhtC40LkuXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaXRlbXNJZHMg0JjQtNC10L3RgtC40YTQuNC60LDRgtC+0YDRiyDQv9C+0LfQuNGG0LjQuS5cbiAgICAgKiBAcGFyYW0gaXNQZW5kaW5nINCf0YDQuNC30L3QsNC6INC+0LbQuNC00LDQvdC40Y8uXG4gICAgICovXG4gICAgcHJpdmF0ZSBzZXRJdGVtc1BlbmRpbmcoaXRlbXNJZHM6IHN0cmluZ1tdLCBpc1BlbmRpbmc6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wZW5kaW5nSXRlbXNJZHMudXBkYXRlKChpZHMpID0+IFNjT3JkZXJJdGVtc0xpc3RDb21wb25lbnQud2l0aEtleXMoaWRzLCBpdGVtc0lkcywgaXNQZW5kaW5nKSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICog0J/RgNC10LTRg9C/0YDQtdC20LTQsNC10YIsINGH0YLQviDQutC+0LvQuNGH0LXRgdGC0LLQviDQvdC1INC80L7QttC10YIg0LHRi9GC0Ywg0L/Rg9GB0YLRi9C8INC40LvQuCDQvdGD0LvQtdCy0YvQvCwg0LAg0YPQsdGA0LDRgtGMINC/0L7Qt9C40YbQuNGOINC80L7QttC90L4g0YPQtNCw0LvQtdC90LjQtdC8LiDQn9C+0LvQtSDQstC+0LfQstGA0LDRidCw0LXRgtGB0Y8g0Log0YHQvtGF0YDQsNC90ZHQvdC90L7QvNGDINC60L7Qu9C40YfQtdGB0YLQstGDXG4gICAgICog0LIg0LvRjtCx0L7QvCDRgdC/0LjRgdC60LUsINC/0YDQtdC00YPQv9GA0LXQttC00LXQvdC40LUg0L/QvtC60LDQt9GL0LLQsNC10YLRgdGPINGC0L7Qu9GM0LrQviDQsiDRgdC/0LjRgdC60LDRhSDRgSDQv9C+0LTRgtCy0LXRgNC20LTQtdC90LjQtdC8INGD0LTQsNC70LXQvdC40Y8uXG4gICAgICovXG4gICAgcHJpdmF0ZSB3YXJuRW1wdHlRdWFudGl0eSgpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy5kZWxldGVDb25maXJtYXRpb25UYXJnZXQoKTtcblxuICAgICAgICBpZiAodGFyZ2V0KSB7XG4gICAgICAgICAgICB0aGlzLmFsZXJ0cy5vcGVuKGDQmtC+0LvQuNGH0LXRgdGC0LLQviDQtNC+0LvQttC90L4g0LHRi9GC0Ywg0LHQvtC70YzRiNC1INC90YPQu9GPLiDQp9GC0L7QsdGLINGD0LHRgNCw0YLRjCDQv9C+0LfQuNGG0LjRjiAke3RhcmdldH0sINGD0LTQsNC70LjRgtC1INC10ZEuYCwgeyBhcHBlYXJhbmNlOiAnd2FybmluZycgfSkuc3Vic2NyaWJlKCk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iLCI8ZGl2XG4gICAgW2Zvcm1Hcm91cF09XCJzZWxlY3Rpb25Gb3JtR3JvdXBcIlxuICAgIGNsYXNzPVwiZmxleCBmbGV4LWNvbCBnYXAtNVwiXG4+XG4gICAgPCEtLSDQpNC70LDQsyDQstGL0LHQvtGA0LAg0LLRgdC10YUg0L/QvtC30LjRhtC40LkuIC0tPlxuICAgIEBpZiAoc2VsZWN0YWJsZSgpICYmIGl0ZW1zU2lnbmFsKCkubGVuZ3RoKSB7XG4gICAgICAgIDxsYWJlbFxuICAgICAgICAgICAgdHVpTGFiZWxcbiAgICAgICAgICAgIHNjUHJpbnQ9XCJkZWZhdWx0Tm9QcmludFwiXG4gICAgICAgICAgICBjbGFzcz1cInNlbGYtc3RhcnRcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8aW5wdXRcbiAgICAgICAgICAgICAgICB0dWlDaGVja2JveFxuICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgc2l6ZT1cIm1cIlxuICAgICAgICAgICAgICAgIFtuZ01vZGVsXT1cImFsbEl0ZW1zU2VsZWN0ZWQoKVwiXG4gICAgICAgICAgICAgICAgW25nTW9kZWxPcHRpb25zXT1cInsgc3RhbmRhbG9uZTogdHJ1ZSB9XCJcbiAgICAgICAgICAgICAgICBbZGlzYWJsZWRdPVwic2VsZWN0aW9uRm9ybUdyb3VwLmRpc2FibGVkXCJcbiAgICAgICAgICAgICAgICAoY2hhbmdlKT1cInNlbGVjdEFsbENoYW5nZUhhbmRsZXIoJGV2ZW50KVwiXG4gICAgICAgICAgICAvPlxuICAgICAgICAgICAg0JLRi9Cx0YDQsNGC0Ywg0LLRgdC1XG4gICAgICAgIDwvbGFiZWw+XG4gICAgfVxuXG4gICAgQGZvciAoZ3JvdXAgb2YgZ3JvdXBzKCk7IHRyYWNrIGdyb3VwLm5hbWUpIHtcbiAgICAgICAgPCEtLSDQl9Cw0LPQvtC70L7QstC+0Log0LPRgNGD0L/Qv9GLINC/0L7Qt9C40YbQuNC5LiAtLT5cbiAgICAgICAgQGlmIChncm91cC5uYW1lKSB7XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBmbGV4LXdyYXAgaXRlbXMtZW5kIGp1c3RpZnktYmV0d2VlbiBnYXAteC00IGdhcC15LTEgYm9yZGVyLWIgYm9yZGVyLXR1aS1iYXNlLTAzIHBiLTJcIj5cbiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiZmxleCBtaW4tdy0wIGZsZXgtY29sXCI+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiYnJlYWstd29yZHMgdGV4dC1ib2R5LWwtYm9sZFwiPnt7IGdyb3VwLm5hbWUgfX08L3NwYW4+XG4gICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1ib2R5LXMgdGV4dC10dWktdGV4dC0wMlwiPtC/0L7Qt9C40YbQuNC5OiB7eyBncm91cC5pdGVtcy5sZW5ndGggfX0sINCyINC30LDQutCw0Lc6IHt7IGdyb3VwLm9yZGVyYWJsZUNvdW50IH19PC9zcGFuPlxuICAgICAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWVuZCBnYXAtMVwiPlxuICAgICAgICAgICAgICAgICAgICA8IS0tINCa0L3QvtC/0LrQsCDRg9C00LDQu9C10L3QuNGPINCz0YDRg9C/0L/Riy4gLS0+XG4gICAgICAgICAgICAgICAgICAgIEBpZiAoY2FuRGVsZXRlR3JvdXBzKCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIDxidXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dWlCdXR0b25cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlPVwiYnV0dG9uXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHBlYXJhbmNlPVwiZmxhdFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInhzXCJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY1ByaW50PVwiZGVmYXVsdE5vUHJpbnRcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cImRlbGV0aW5nR3JvdXBzTmFtZXMoKS5oYXMoZ3JvdXAubmFtZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJwZW5kaW5nR3JvdXBzTmFtZXMoKS5oYXMoZ3JvdXAubmFtZSlcIlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjbGljayk9XCJkZWxldGVHcm91cChncm91cClcIlxuICAgICAgICAgICAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgINCj0LTQsNC70LjRgtGMXG4gICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj5cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cIndoaXRlc3BhY2Utbm93cmFwIHRleHQtYm9keS1tLWJvbGRcIj57eyBncm91cC5vcmRlcmFibGVTdW0gfCB0dWlGb3JtYXROdW1iZXI6IG1vbmV5Rm9ybWF0IHwgYXN5bmMgfX0ge3sgJ1JVQicgfCB0dWlDdXJyZW5jeSB9fTwvc3Bhbj5cbiAgICAgICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICAgIDwvZGl2PlxuICAgICAgICB9XG5cbiAgICAgICAgQGZvciAoaXRlbSBvZiBncm91cC5pdGVtczsgdHJhY2sgaXRlbS5pZCkge1xuICAgICAgICAgICAgQGlmICgkaW5kZXggIT09IDApIHtcbiAgICAgICAgICAgICAgICA8aHIgY2xhc3M9XCJtdC1hdXRvIGgtcHggdy1mdWxsIGJnLXR1aS1jbGVhclwiIC8+XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJmbGV4IGl0ZW1zLWNlbnRlciBnYXAtNCByZWxhdGl2ZVwiPlxuICAgICAgICAgICAgICAgIEBsZXQgaXNBY3RpdmUgPSAhc2VsZWN0YWJsZSgpIHx8IHNlbGVjdGlvbkZvcm1Hcm91cC5nZXQoaXRlbS5pZCk/LnZhbHVlIHx8IChtYXJrVW5hdmFpbGFibGUoKSAmJiAhaXRlbS5pc09yZGVyYWJsZSk7XG4gICAgICAgICAgICAgICAgQGxldCBpc1BlbmRpbmcgPSBwZW5kaW5nSXRlbXNJZHMoKS5oYXMoaXRlbS5pZCk7XG4gICAgICAgICAgICAgICAgQGxldCBlZGl0ZWRJbkRpYWxvZyA9IGlzRWRpdGVkSW5EaWFsb2coaXRlbSk7XG5cbiAgICAgICAgICAgICAgICA8IS0tINCn0LXQutCx0L7QutGBINCy0YvQsdC+0YDQsCDRgtC+0LLQsNGA0LAuIC0tPlxuICAgICAgICAgICAgICAgIEBpZiAoc2VsZWN0YWJsZSgpKSB7XG4gICAgICAgICAgICAgICAgICAgIDxpbnB1dFxuICAgICAgICAgICAgICAgICAgICAgICAgdHVpQ2hlY2tib3hcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU9XCJjaGVja2JveFwiXG4gICAgICAgICAgICAgICAgICAgICAgICBzaXplPVwibVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbZm9ybUNvbnRyb2xOYW1lXT1cIml0ZW0uaWRcIlxuICAgICAgICAgICAgICAgICAgICAvPlxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIDwhLS0g0JrQsNGA0YLQvtGH0LrQsCDRgtC+0LLQsNGA0LAuIC0tPlxuICAgICAgICAgICAgICAgIDxzYy1vcmRlci1pdGVtXG4gICAgICAgICAgICAgICAgICAgICNpdGVtQ29tcG9uZW50XG4gICAgICAgICAgICAgICAgICAgIFtwcm9kdWN0XT1cIml0ZW0ucHJvZHVjdFwiXG4gICAgICAgICAgICAgICAgICAgIFtvcmRlckl0ZW1dPVwiaXRlbVwiXG4gICAgICAgICAgICAgICAgICAgIFtzaG93UXVhbnRpdHlDb250cm9sXT1cImNhbkVkaXQoKSAmJiAhaXRlbS5jb25maWd1cmF0b3IgJiYgIWVkaXRlZEluRGlhbG9nXCJcbiAgICAgICAgICAgICAgICAgICAgW2lzU2hvd0VkaXRDb250cm9sc109XCJjYW5FZGl0KClcIlxuICAgICAgICAgICAgICAgICAgICBbdXNlTGluZVByaWNlXT1cInVzZUxpbmVQcmljZSgpXCJcbiAgICAgICAgICAgICAgICAgICAgW21hcmtVbmF2YWlsYWJsZV09XCJtYXJrVW5hdmFpbGFibGUoKVwiXG4gICAgICAgICAgICAgICAgICAgIFtpc1BlbmRpbmddPVwiaXNQZW5kaW5nXCJcbiAgICAgICAgICAgICAgICAgICAgW3NldHRpbmdzQXZhaWxhYmxlXT1cImNhbkVkaXQoKSAmJiBtZWFzdXJlZEluRGlhbG9nKCkgJiYgIWl0ZW0uY29uZmlndXJhdG9yICYmICFpdGVtLmlzSW5hY3RpdmVcIlxuICAgICAgICAgICAgICAgICAgICBjbGFzcz1cInctZnVsbCBkdXJhdGlvbi0yMDBcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3Mub3BhY2l0eS02MF09XCJpc0l0ZW1EaW1tZWQoaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tDYXJkRXZlbnQpPVwib3BlblByb2R1Y3RJbmZvRGlhbG9nKGl0ZW0ucHJvZHVjdCwgaXRlbSwgb3JkZXJPcHRpb25zPy5vcmRlcklkKCkpXCJcbiAgICAgICAgICAgICAgICAgICAgKHF1YW50aXR5VmFsdWVDaGFuZ2VzKT1cInBhdGNoSXRlbSgkZXZlbnQsIGl0ZW1Db21wb25lbnQpXCJcbiAgICAgICAgICAgICAgICAgICAgKGNsaWNrUHJpY2VIaXN0b3J5RXZlbnQpPVwib3BlblByaWNlSGlzdG9yeUNoYXJ0RGlhbG9nKGl0ZW0ucHJvZHVjdClcIlxuICAgICAgICAgICAgICAgICAgICAoY2xpY2tTZXR0aW5ncyk9XCJvcGVuU2V0dGluZ3NEaWFsb2coaXRlbSlcIlxuICAgICAgICAgICAgICAgICAgICBbY2xhc3MucG9pbnRlci1ldmVudHMtbm9uZV09XCIhaXNBY3RpdmVcIlxuICAgICAgICAgICAgICAgIC8+XG5cbiAgICAgICAgICAgICAgICA8IS0tINCa0L3QvtC/0LrQsCDRg9C00LDQu9C10L3QuNGPINGC0L7QstCw0YDQsC4gLS0+XG4gICAgICAgICAgICAgICAgQGlmIChjYW5FZGl0KCkpIHtcbiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgdHVpSWNvbkJ1dHRvblxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvblN0YXJ0PVwiQHR1aS50cmFzaFwiXG4gICAgICAgICAgICAgICAgICAgICAgICAoY2xpY2spPVwiZGVsZXRlSXRlbShpdGVtKVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBbbG9hZGluZ109XCJpc1BlbmRpbmdcIlxuICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZT1cInNcIlxuICAgICAgICAgICAgICAgICAgICAgICAgYXBwZWFyYW5jZT1cInNlY29uZGFyeVwiXG4gICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz1cIiFhYnNvbHV0ZSBsZWZ0LTEgdG9wLTEgbGc6IXJlbGF0aXZlIGxnOmxlZnQtMCBsZzp0b3AtMCBsZzohc2VsZi1jZW50ZXJcIlxuICAgICAgICAgICAgICAgICAgICA+PC9idXR0b24+XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICA8IS0tINCk0YPRgtC10YAg0YHQv9C40YHQutCwLiAtLT5cbiAgICA8ZGl2XG4gICAgICAgIHNjUHJpbnQ9XCJjb3N0XCJcbiAgICAgICAgY2xhc3M9XCJmbGV4IGZsZXgtY29sIGl0ZW1zLWVuZCBnYXAtMi41XCJcbiAgICA+XG4gICAgICAgIEBsZXQgdG90YWxTdW0gPSBzdW1TZWxlY3RlZEl0ZW1zKCk7XG4gICAgICAgIDwhLS0g0JjRgtC+0LPQvtCy0LDRjyDRgdGD0LzQvNCwLiAtLT5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRleHQtYmFzZSBmb250LWJvbGRcIj57eyB0b3RhbExhYmVsKCkgfX06IHt7IHRvdGFsU3VtIHwgdHVpRm9ybWF0TnVtYmVyOiBtb25leUZvcm1hdCB8IGFzeW5jIH19IHt7ICdSVUInIHwgdHVpQ3VycmVuY3kgfX08L2Rpdj5cbiAgICA8L2Rpdj5cbjwvZGl2PlxuIl19
@@ -14,5 +14,4 @@ export * from './sc-notify-when-in-stock-required-fields';
14
14
  export * from './sc-banner-duration';
15
15
  export * from './sc-debounce-time-default';
16
16
  export * from './sc-hidden-print-elements.token';
17
- export * from './cleanup-recaptcha-artifacts';
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvcHJvdmlkZXJzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsa0NBQWtDLENBQUM7QUFDakQsY0FBYywrQkFBK0IsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vc2MtdmVyaWZpY2F0aW9uLWNvZGUtdGltZW91dCc7XG5leHBvcnQgKiBmcm9tICcuL3NjLWRpYWxvZy1zZXJ2aWNlLnByb3ZpZGVycyc7XG5leHBvcnQgKiBmcm9tICcuL3NjLWFsbG93LXNlbGVjdC10ZXJtaW5hdGVkJztcbmV4cG9ydCAqIGZyb20gJy4vc2MtYmxvY2staW5jb21wbGV0ZS1hZGRyZXNzJztcbmV4cG9ydCAqIGZyb20gJy4vc2MtaGVscC1ub3RpZmljYXRpb24tbGltaXQnO1xuZXhwb3J0ICogZnJvbSAnLi9zYy1oZWxwLW5vdGlmaWNhdGlvbi1jbG9zZSc7XG5leHBvcnQgKiBmcm9tICcuL3NjLW1heC1maWxlcy1pbi1mb3JtLWlucHV0JztcbmV4cG9ydCAqIGZyb20gJy4vc2MtcGFnZS1zaXplLW9wdGlvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9zYy1jb3VudHJ5LWlkcyc7XG5leHBvcnQgKiBmcm9tICcuL3NjLXVzZXItcHJvdmlkZXJzJztcbmV4cG9ydCAqIGZyb20gJy4vc2MtZGF0ZS1mb3JtYXR0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi9zYy1kYXRlLXZhbHVlLXRyYW5zZm9ybWVyJztcbmV4cG9ydCAqIGZyb20gJy4vc2Mtbm90aWZ5LXdoZW4taW4tc3RvY2stcmVxdWlyZWQtZmllbGRzJztcbmV4cG9ydCAqIGZyb20gJy4vc2MtYmFubmVyLWR1cmF0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vc2MtZGVib3VuY2UtdGltZS1kZWZhdWx0JztcbmV4cG9ydCAqIGZyb20gJy4vc2MtaGlkZGVuLXByaW50LWVsZW1lbnRzLnRva2VuJztcbmV4cG9ydCAqIGZyb20gJy4vY2xlYW51cC1yZWNhcHRjaGEtYXJ0aWZhY3RzJztcbiJdfQ==
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvcHJvdmlkZXJzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsZ0NBQWdDLENBQUM7QUFDL0MsY0FBYywrQkFBK0IsQ0FBQztBQUM5QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyw4QkFBOEIsQ0FBQztBQUM3QyxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsOEJBQThCLENBQUM7QUFDN0MsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLGtCQUFrQixDQUFDO0FBQ2pDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxxQkFBcUIsQ0FBQztBQUNwQyxjQUFjLDZCQUE2QixDQUFDO0FBQzVDLGNBQWMsMkNBQTJDLENBQUM7QUFDMUQsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsa0NBQWtDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3NjLXZlcmlmaWNhdGlvbi1jb2RlLXRpbWVvdXQnO1xuZXhwb3J0ICogZnJvbSAnLi9zYy1kaWFsb2ctc2VydmljZS5wcm92aWRlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9zYy1hbGxvdy1zZWxlY3QtdGVybWluYXRlZCc7XG5leHBvcnQgKiBmcm9tICcuL3NjLWJsb2NrLWluY29tcGxldGUtYWRkcmVzcyc7XG5leHBvcnQgKiBmcm9tICcuL3NjLWhlbHAtbm90aWZpY2F0aW9uLWxpbWl0JztcbmV4cG9ydCAqIGZyb20gJy4vc2MtaGVscC1ub3RpZmljYXRpb24tY2xvc2UnO1xuZXhwb3J0ICogZnJvbSAnLi9zYy1tYXgtZmlsZXMtaW4tZm9ybS1pbnB1dCc7XG5leHBvcnQgKiBmcm9tICcuL3NjLXBhZ2Utc2l6ZS1vcHRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vc2MtY291bnRyeS1pZHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zYy11c2VyLXByb3ZpZGVycyc7XG5leHBvcnQgKiBmcm9tICcuL3NjLWRhdGUtZm9ybWF0dGVyJztcbmV4cG9ydCAqIGZyb20gJy4vc2MtZGF0ZS12YWx1ZS10cmFuc2Zvcm1lcic7XG5leHBvcnQgKiBmcm9tICcuL3NjLW5vdGlmeS13aGVuLWluLXN0b2NrLXJlcXVpcmVkLWZpZWxkcyc7XG5leHBvcnQgKiBmcm9tICcuL3NjLWJhbm5lci1kdXJhdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3NjLWRlYm91bmNlLXRpbWUtZGVmYXVsdCc7XG5leHBvcnQgKiBmcm9tICcuL3NjLWhpZGRlbi1wcmludC1lbGVtZW50cy50b2tlbic7XG4iXX0=
@@ -30,8 +30,9 @@ export * from './providers';
30
30
  export * from './feedback';
31
31
  export * from './qrcode';
32
32
  export * from './share';
33
+ export * from './smart-captcha';
33
34
  export * from './user';
34
35
  export * from './validators';
35
36
  export * from './verification';
36
37
  export * from './profile';
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxRQUFRLENBQUM7QUFDdkIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxnQkFBZ0IsQ0FBQztBQUMvQixjQUFjLFdBQVcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbW9kZWxzJztcbmV4cG9ydCAqIGZyb20gJy4vc2VydmljZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9hdXRoJztcbmV4cG9ydCAqIGZyb20gJy4vYWNjb3JkaW9uJztcbmV4cG9ydCAqIGZyb20gJy4vYWxlcnRzJztcbmV4cG9ydCAqIGZyb20gJy4vYmFubmVyJztcbmV4cG9ydCAqIGZyb20gJy4vY2FydCc7XG5leHBvcnQgKiBmcm9tICcuL2NhdGFsb2cnO1xuZXhwb3J0ICogZnJvbSAnLi9jb25maWd1cmF0b3JzJztcbmV4cG9ydCAqIGZyb20gJy4vY29udHJhZ2VudHMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb250YWN0cyc7XG5leHBvcnQgKiBmcm9tICcuL2RlbGl2ZXJ5LWFkZHJlc3MnO1xuZXhwb3J0ICogZnJvbSAnLi9kaWFsb2dzJztcbmV4cG9ydCAqIGZyb20gJy4vZGlyZWN0aXZlcyc7XG5leHBvcnQgKiBmcm9tICcuL2Vycm9yLWhhbmRsZXInO1xuZXhwb3J0ICogZnJvbSAnLi9maWxlcyc7XG5leHBvcnQgKiBmcm9tICcuL2Zvcm0tZmllbGRzJztcbmV4cG9ydCAqIGZyb20gJy4vaWNvbnMnO1xuZXhwb3J0ICogZnJvbSAnLi9sb2FkZXInO1xuZXhwb3J0ICogZnJvbSAnLi9icmFuZHMtbGlzdCc7XG5leHBvcnQgKiBmcm9tICcuL25ld3MnO1xuZXhwb3J0ICogZnJvbSAnLi9ub2luZGV4LXdyYXBwZXInO1xuZXhwb3J0ICogZnJvbSAnLi9vcmRlcic7XG5leHBvcnQgKiBmcm9tICcuL3BhZ2VzJztcbmV4cG9ydCAqIGZyb20gJy4vcGFnaW5hdGlvbic7XG5leHBvcnQgKiBmcm9tICcuL3BpcGVzJztcbmV4cG9ydCAqIGZyb20gJy4vc2FtcGxlcyc7XG5leHBvcnQgKiBmcm9tICcuL21ldGhvZHMnO1xuZXhwb3J0ICogZnJvbSAnLi9wcm92aWRlcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9mZWVkYmFjayc7XG5leHBvcnQgKiBmcm9tICcuL3FyY29kZSc7XG5leHBvcnQgKiBmcm9tICcuL3NoYXJlJztcbmV4cG9ydCAqIGZyb20gJy4vdXNlcic7XG5leHBvcnQgKiBmcm9tICcuL3ZhbGlkYXRvcnMnO1xuZXhwb3J0ICogZnJvbSAnLi92ZXJpZmljYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9wcm9maWxlJztcbiJdfQ==
38
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsWUFBWSxDQUFDO0FBQzNCLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsYUFBYSxDQUFDO0FBQzVCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsV0FBVyxDQUFDO0FBQzFCLGNBQWMsaUJBQWlCLENBQUM7QUFDaEMsY0FBYyxlQUFlLENBQUM7QUFDOUIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxvQkFBb0IsQ0FBQztBQUNuQyxjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsU0FBUyxDQUFDO0FBQ3hCLGNBQWMsVUFBVSxDQUFDO0FBQ3pCLGNBQWMsZUFBZSxDQUFDO0FBQzlCLGNBQWMsUUFBUSxDQUFDO0FBQ3ZCLGNBQWMsbUJBQW1CLENBQUM7QUFDbEMsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxhQUFhLENBQUM7QUFDNUIsY0FBYyxZQUFZLENBQUM7QUFDM0IsY0FBYyxVQUFVLENBQUM7QUFDekIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxpQkFBaUIsQ0FBQztBQUNoQyxjQUFjLFFBQVEsQ0FBQztBQUN2QixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsV0FBVyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9tb2RlbHMnO1xuZXhwb3J0ICogZnJvbSAnLi9zZXJ2aWNlcyc7XG5leHBvcnQgKiBmcm9tICcuL2F1dGgnO1xuZXhwb3J0ICogZnJvbSAnLi9hY2NvcmRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9hbGVydHMnO1xuZXhwb3J0ICogZnJvbSAnLi9iYW5uZXInO1xuZXhwb3J0ICogZnJvbSAnLi9jYXJ0JztcbmV4cG9ydCAqIGZyb20gJy4vY2F0YWxvZyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbmZpZ3VyYXRvcnMnO1xuZXhwb3J0ICogZnJvbSAnLi9jb250cmFnZW50cyc7XG5leHBvcnQgKiBmcm9tICcuL2NvbnRhY3RzJztcbmV4cG9ydCAqIGZyb20gJy4vZGVsaXZlcnktYWRkcmVzcyc7XG5leHBvcnQgKiBmcm9tICcuL2RpYWxvZ3MnO1xuZXhwb3J0ICogZnJvbSAnLi9kaXJlY3RpdmVzJztcbmV4cG9ydCAqIGZyb20gJy4vZXJyb3ItaGFuZGxlcic7XG5leHBvcnQgKiBmcm9tICcuL2ZpbGVzJztcbmV4cG9ydCAqIGZyb20gJy4vZm9ybS1maWVsZHMnO1xuZXhwb3J0ICogZnJvbSAnLi9pY29ucyc7XG5leHBvcnQgKiBmcm9tICcuL2xvYWRlcic7XG5leHBvcnQgKiBmcm9tICcuL2JyYW5kcy1saXN0JztcbmV4cG9ydCAqIGZyb20gJy4vbmV3cyc7XG5leHBvcnQgKiBmcm9tICcuL25vaW5kZXgtd3JhcHBlcic7XG5leHBvcnQgKiBmcm9tICcuL29yZGVyJztcbmV4cG9ydCAqIGZyb20gJy4vcGFnZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9wYWdpbmF0aW9uJztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9zYW1wbGVzJztcbmV4cG9ydCAqIGZyb20gJy4vbWV0aG9kcyc7XG5leHBvcnQgKiBmcm9tICcuL3Byb3ZpZGVycyc7XG5leHBvcnQgKiBmcm9tICcuL2ZlZWRiYWNrJztcbmV4cG9ydCAqIGZyb20gJy4vcXJjb2RlJztcbmV4cG9ydCAqIGZyb20gJy4vc2hhcmUnO1xuZXhwb3J0ICogZnJvbSAnLi9zbWFydC1jYXB0Y2hhJztcbmV4cG9ydCAqIGZyb20gJy4vdXNlcic7XG5leHBvcnQgKiBmcm9tICcuL3ZhbGlkYXRvcnMnO1xuZXhwb3J0ICogZnJvbSAnLi92ZXJpZmljYXRpb24nO1xuZXhwb3J0ICogZnJvbSAnLi9wcm9maWxlJztcbiJdfQ==
@@ -5,7 +5,6 @@ import { TuiHovered } from '@taiga-ui/cdk';
5
5
  import { TuiButton, TuiError, TuiLabel } from '@taiga-ui/core';
6
6
  import { TuiAvatar, TuiButtonLoading, TuiCarousel, TuiFieldErrorPipe } from '@taiga-ui/kit';
7
7
  import { TuiInputModule, TuiInputPhoneModule } from '@taiga-ui/legacy';
8
- import { RecaptchaFormsModule, RecaptchaModule } from 'ng-recaptcha-2';
9
8
  import { ScFormFieldsModule } from '../form-fields';
10
9
  import { ScPreviewSampleComponent } from './preview-sample/sc-preview-sample.component';
11
10
  import * as i0 from "@angular/core";
@@ -26,18 +25,14 @@ export class ScPreviewSampleModule {
26
25
  TuiHovered,
27
26
  TuiButton,
28
27
  TuiButtonLoading,
29
- TuiLabel,
30
- RecaptchaFormsModule,
31
- RecaptchaModule], exports: [ScPreviewSampleComponent] }); }
28
+ TuiLabel], exports: [ScPreviewSampleComponent] }); }
32
29
  static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScPreviewSampleModule, imports: [CommonModule,
33
30
  ReactiveFormsModule,
34
31
  TuiError,
35
32
  ScFormFieldsModule,
36
33
  TuiInputModule,
37
34
  TuiInputPhoneModule, i2.TuiCarouselComponent, TuiAvatar,
38
- TuiButtonLoading,
39
- RecaptchaFormsModule,
40
- RecaptchaModule] }); }
35
+ TuiButtonLoading] }); }
41
36
  }
42
37
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImport: i0, type: ScPreviewSampleModule, decorators: [{
43
38
  type: NgModule,
@@ -57,10 +52,8 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.14", ngImpo
57
52
  TuiButton,
58
53
  TuiButtonLoading,
59
54
  TuiLabel,
60
- RecaptchaFormsModule,
61
- RecaptchaModule,
62
55
  ],
63
56
  exports: [ScPreviewSampleComponent],
64
57
  }]
65
58
  }] });
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtc2FtcGxlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9zYW1wbGVzL3NjLXNhbXBsZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RixPQUFPLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDdkUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLGVBQWUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXZFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3BELE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLDhDQUE4QyxDQUFDOzs7O0FBRXhGOztHQUVHO0FBc0JILE1BQU0sT0FBTyxxQkFBcUI7K0dBQXJCLHFCQUFxQjtnSEFBckIscUJBQXFCLGlCQXBCZix3QkFBd0IsYUFFbkMsWUFBWTtZQUNaLG1CQUFtQjtZQUNuQixRQUFRO1lBQ1IsaUJBQWlCO1lBQ2pCLGtCQUFrQjtZQUNsQixjQUFjO1lBQ2QsbUJBQW1CLHVJQUVuQixTQUFTO1lBQ1QsVUFBVTtZQUNWLFNBQVM7WUFDVCxnQkFBZ0I7WUFDaEIsUUFBUTtZQUNSLG9CQUFvQjtZQUNwQixlQUFlLGFBRVQsd0JBQXdCO2dIQUV6QixxQkFBcUIsWUFsQjFCLFlBQVk7WUFDWixtQkFBbUI7WUFDbkIsUUFBUTtZQUVSLGtCQUFrQjtZQUNsQixjQUFjO1lBQ2QsbUJBQW1CLDJCQUVuQixTQUFTO1lBR1QsZ0JBQWdCO1lBRWhCLG9CQUFvQjtZQUNwQixlQUFlOzs0RkFJVixxQkFBcUI7a0JBckJqQyxRQUFRO21CQUFDO29CQUNOLFlBQVksRUFBRSxDQUFDLHdCQUF3QixDQUFDO29CQUN4QyxPQUFPLEVBQUU7d0JBQ0wsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLFFBQVE7d0JBQ1IsaUJBQWlCO3dCQUNqQixrQkFBa0I7d0JBQ2xCLGNBQWM7d0JBQ2QsbUJBQW1CO3dCQUNuQixHQUFHLFdBQVc7d0JBQ2QsU0FBUzt3QkFDVCxVQUFVO3dCQUNWLFNBQVM7d0JBQ1QsZ0JBQWdCO3dCQUNoQixRQUFRO3dCQUNSLG9CQUFvQjt3QkFDcEIsZUFBZTtxQkFDbEI7b0JBQ0QsT0FBTyxFQUFFLENBQUMsd0JBQXdCLENBQUM7aUJBQ3RDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IE5nTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVHVpSG92ZXJlZCB9IGZyb20gJ0B0YWlnYS11aS9jZGsnO1xuaW1wb3J0IHsgVHVpQnV0dG9uLCBUdWlFcnJvciwgVHVpTGFiZWwgfSBmcm9tICdAdGFpZ2EtdWkvY29yZSc7XG5pbXBvcnQgeyBUdWlBdmF0YXIsIFR1aUJ1dHRvbkxvYWRpbmcsIFR1aUNhcm91c2VsLCBUdWlGaWVsZEVycm9yUGlwZSB9IGZyb20gJ0B0YWlnYS11aS9raXQnO1xuaW1wb3J0IHsgVHVpSW5wdXRNb2R1bGUsIFR1aUlucHV0UGhvbmVNb2R1bGUgfSBmcm9tICdAdGFpZ2EtdWkvbGVnYWN5JztcbmltcG9ydCB7IFJlY2FwdGNoYUZvcm1zTW9kdWxlLCBSZWNhcHRjaGFNb2R1bGUgfSBmcm9tICduZy1yZWNhcHRjaGEtMic7XG5cbmltcG9ydCB7IFNjRm9ybUZpZWxkc01vZHVsZSB9IGZyb20gJy4uL2Zvcm0tZmllbGRzJztcbmltcG9ydCB7IFNjUHJldmlld1NhbXBsZUNvbXBvbmVudCB9IGZyb20gJy4vcHJldmlldy1zYW1wbGUvc2MtcHJldmlldy1zYW1wbGUuY29tcG9uZW50JztcblxuLyoqXG4gKiDQnNC+0LTRg9C70Ywg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Y8g0L7QsdGA0LDQt9GG0L7QsiDRgtC+0LLQsNGA0LAuXG4gKi9cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbU2NQcmV2aWV3U2FtcGxlQ29tcG9uZW50XSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgVHVpRXJyb3IsXG4gICAgICAgIFR1aUZpZWxkRXJyb3JQaXBlLFxuICAgICAgICBTY0Zvcm1GaWVsZHNNb2R1bGUsXG4gICAgICAgIFR1aUlucHV0TW9kdWxlLFxuICAgICAgICBUdWlJbnB1dFBob25lTW9kdWxlLFxuICAgICAgICAuLi5UdWlDYXJvdXNlbCxcbiAgICAgICAgVHVpQXZhdGFyLFxuICAgICAgICBUdWlIb3ZlcmVkLFxuICAgICAgICBUdWlCdXR0b24sXG4gICAgICAgIFR1aUJ1dHRvbkxvYWRpbmcsXG4gICAgICAgIFR1aUxhYmVsLFxuICAgICAgICBSZWNhcHRjaGFGb3Jtc01vZHVsZSxcbiAgICAgICAgUmVjYXB0Y2hhTW9kdWxlLFxuICAgIF0sXG4gICAgZXhwb3J0czogW1NjUHJldmlld1NhbXBsZUNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIFNjUHJldmlld1NhbXBsZU1vZHVsZSB7fVxuIl19
59
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Mtc2FtcGxlLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaWVudC11aS9zYW1wbGVzL3NjLXNhbXBsZS5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDekMsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDckQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMvRCxPQUFPLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixFQUFFLFdBQVcsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUM1RixPQUFPLEVBQUUsY0FBYyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFdkUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sOENBQThDLENBQUM7Ozs7QUFFeEY7O0dBRUc7QUFvQkgsTUFBTSxPQUFPLHFCQUFxQjsrR0FBckIscUJBQXFCO2dIQUFyQixxQkFBcUIsaUJBbEJmLHdCQUF3QixhQUVuQyxZQUFZO1lBQ1osbUJBQW1CO1lBQ25CLFFBQVE7WUFDUixpQkFBaUI7WUFDakIsa0JBQWtCO1lBQ2xCLGNBQWM7WUFDZCxtQkFBbUIsdUlBRW5CLFNBQVM7WUFDVCxVQUFVO1lBQ1YsU0FBUztZQUNULGdCQUFnQjtZQUNoQixRQUFRLGFBRUYsd0JBQXdCO2dIQUV6QixxQkFBcUIsWUFoQjFCLFlBQVk7WUFDWixtQkFBbUI7WUFDbkIsUUFBUTtZQUVSLGtCQUFrQjtZQUNsQixjQUFjO1lBQ2QsbUJBQW1CLDJCQUVuQixTQUFTO1lBR1QsZ0JBQWdCOzs0RkFLWCxxQkFBcUI7a0JBbkJqQyxRQUFRO21CQUFDO29CQUNOLFlBQVksRUFBRSxDQUFDLHdCQUF3QixDQUFDO29CQUN4QyxPQUFPLEVBQUU7d0JBQ0wsWUFBWTt3QkFDWixtQkFBbUI7d0JBQ25CLFFBQVE7d0JBQ1IsaUJBQWlCO3dCQUNqQixrQkFBa0I7d0JBQ2xCLGNBQWM7d0JBQ2QsbUJBQW1CO3dCQUNuQixHQUFHLFdBQVc7d0JBQ2QsU0FBUzt3QkFDVCxVQUFVO3dCQUNWLFNBQVM7d0JBQ1QsZ0JBQWdCO3dCQUNoQixRQUFRO3FCQUNYO29CQUNELE9BQU8sRUFBRSxDQUFDLHdCQUF3QixDQUFDO2lCQUN0QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgUmVhY3RpdmVGb3Jtc01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IFR1aUhvdmVyZWQgfSBmcm9tICdAdGFpZ2EtdWkvY2RrJztcbmltcG9ydCB7IFR1aUJ1dHRvbiwgVHVpRXJyb3IsIFR1aUxhYmVsIH0gZnJvbSAnQHRhaWdhLXVpL2NvcmUnO1xuaW1wb3J0IHsgVHVpQXZhdGFyLCBUdWlCdXR0b25Mb2FkaW5nLCBUdWlDYXJvdXNlbCwgVHVpRmllbGRFcnJvclBpcGUgfSBmcm9tICdAdGFpZ2EtdWkva2l0JztcbmltcG9ydCB7IFR1aUlucHV0TW9kdWxlLCBUdWlJbnB1dFBob25lTW9kdWxlIH0gZnJvbSAnQHRhaWdhLXVpL2xlZ2FjeSc7XG5cbmltcG9ydCB7IFNjRm9ybUZpZWxkc01vZHVsZSB9IGZyb20gJy4uL2Zvcm0tZmllbGRzJztcbmltcG9ydCB7IFNjUHJldmlld1NhbXBsZUNvbXBvbmVudCB9IGZyb20gJy4vcHJldmlldy1zYW1wbGUvc2MtcHJldmlldy1zYW1wbGUuY29tcG9uZW50JztcblxuLyoqXG4gKiDQnNC+0LTRg9C70Ywg0L/RgNC10LTRgdGC0LDQstC70LXQvdC40Y8g0L7QsdGA0LDQt9GG0L7QsiDRgtC+0LLQsNGA0LAuXG4gKi9cbkBOZ01vZHVsZSh7XG4gICAgZGVjbGFyYXRpb25zOiBbU2NQcmV2aWV3U2FtcGxlQ29tcG9uZW50XSxcbiAgICBpbXBvcnRzOiBbXG4gICAgICAgIENvbW1vbk1vZHVsZSxcbiAgICAgICAgUmVhY3RpdmVGb3Jtc01vZHVsZSxcbiAgICAgICAgVHVpRXJyb3IsXG4gICAgICAgIFR1aUZpZWxkRXJyb3JQaXBlLFxuICAgICAgICBTY0Zvcm1GaWVsZHNNb2R1bGUsXG4gICAgICAgIFR1aUlucHV0TW9kdWxlLFxuICAgICAgICBUdWlJbnB1dFBob25lTW9kdWxlLFxuICAgICAgICAuLi5UdWlDYXJvdXNlbCxcbiAgICAgICAgVHVpQXZhdGFyLFxuICAgICAgICBUdWlIb3ZlcmVkLFxuICAgICAgICBUdWlCdXR0b24sXG4gICAgICAgIFR1aUJ1dHRvbkxvYWRpbmcsXG4gICAgICAgIFR1aUxhYmVsLFxuICAgIF0sXG4gICAgZXhwb3J0czogW1NjUHJldmlld1NhbXBsZUNvbXBvbmVudF0sXG59KVxuZXhwb3J0IGNsYXNzIFNjUHJldmlld1NhbXBsZU1vZHVsZSB7fVxuIl19
@@ -1,3 +1,4 @@
1
1
  export * from './sc-help-notification.service';
2
2
  export * from './print.service';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvc2VydmljZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLGlCQUFpQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9zYy1oZWxwLW5vdGlmaWNhdGlvbi5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vcHJpbnQuc2VydmljZSc7XG4iXX0=
3
+ export * from './sc-scripts.service';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jbGllbnQtdWkvc2VydmljZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsc0JBQXNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL3NjLWhlbHAtbm90aWZpY2F0aW9uLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi9wcmludC5zZXJ2aWNlJztcbmV4cG9ydCAqIGZyb20gJy4vc2Mtc2NyaXB0cy5zZXJ2aWNlJztcbiJdfQ==