@ai-table/grid 0.0.45 → 0.0.46

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 (40) hide show
  1. package/components/drag/drag.component.d.ts +5 -0
  2. package/components/drag/drag.component.d.ts.map +1 -1
  3. package/components/drag/drag.component.scss +1 -1
  4. package/components/field-setting/field-setting.component.d.ts.map +1 -1
  5. package/constants/table.d.ts +1 -0
  6. package/constants/table.d.ts.map +1 -1
  7. package/core/types/core.d.ts +7 -2
  8. package/core/types/core.d.ts.map +1 -1
  9. package/esm2022/components/drag/drag.component.mjs +75 -4
  10. package/esm2022/components/field-setting/field-setting.component.mjs +3 -2
  11. package/esm2022/constants/table.mjs +2 -1
  12. package/esm2022/core/types/core.mjs +1 -1
  13. package/esm2022/core/utils/queries.mjs +2 -2
  14. package/esm2022/dom-grid.component.mjs +3 -3
  15. package/esm2022/grid-base.component.mjs +6 -3
  16. package/esm2022/grid.component.mjs +24 -2
  17. package/esm2022/renderer/components/field-head.component.mjs +18 -2
  18. package/esm2022/services/selection.service.mjs +4 -1
  19. package/esm2022/types/grid.mjs +1 -1
  20. package/esm2022/utils/build.mjs +2 -3
  21. package/esm2022/utils/cell.mjs +3 -2
  22. package/esm2022/utils/clipboard/paste.mjs +1 -7
  23. package/esm2022/utils/field/model/select.mjs +31 -9
  24. package/fesm2022/ai-table-grid.mjs +157 -26
  25. package/fesm2022/ai-table-grid.mjs.map +1 -1
  26. package/grid-base.component.d.ts +5 -3
  27. package/grid-base.component.d.ts.map +1 -1
  28. package/grid.component.d.ts.map +1 -1
  29. package/package.json +1 -1
  30. package/renderer/components/field-head.component.d.ts +8 -0
  31. package/renderer/components/field-head.component.d.ts.map +1 -1
  32. package/services/selection.service.d.ts +2 -1
  33. package/services/selection.service.d.ts.map +1 -1
  34. package/types/grid.d.ts +2 -1
  35. package/types/grid.d.ts.map +1 -1
  36. package/utils/build.d.ts.map +1 -1
  37. package/utils/cell.d.ts.map +1 -1
  38. package/utils/clipboard/paste.d.ts.map +1 -1
  39. package/utils/field/model/select.d.ts +1 -1
  40. package/utils/field/model/select.d.ts.map +1 -1
@@ -1,7 +1,7 @@
1
1
  import { afterNextRender, ChangeDetectionStrategy, Component, computed, effect, inject, signal, untracked, viewChild, ViewContainerRef } from '@angular/core';
2
2
  import { takeUntilDestroyed } from '@angular/core/rxjs-interop';
3
3
  import { filter, fromEvent } from 'rxjs';
4
- import { AI_TABLE_CELL, AI_TABLE_CELL_PADDING, AI_TABLE_FIELD_ADD_BUTTON, AI_TABLE_FIELD_ADD_BUTTON_WIDTH, AI_TABLE_FIELD_HEAD, AI_TABLE_FIELD_HEAD_HEIGHT, AI_TABLE_FIELD_HEAD_MORE, AI_TABLE_FIELD_HEAD_SELECT_CHECKBOX, AI_TABLE_PREVENT_CLEAR_SELECTION_CLASS, AI_TABLE_ROW_ADD_BUTTON, AI_TABLE_ROW_HEAD_WIDTH, AI_TABLE_ROW_SELECT_CHECKBOX, DBL_CLICK_EDIT_TYPE, DEFAULT_POINT_POSITION, DEFAULT_SCROLL_STATE, MOUSEOVER_EDIT_TYPE } from './constants';
4
+ import { AI_TABLE_CELL, AI_TABLE_CELL_PADDING, AI_TABLE_FIELD_ADD_BUTTON, AI_TABLE_FIELD_ADD_BUTTON_WIDTH, AI_TABLE_FIELD_HEAD, AI_TABLE_FIELD_HEAD_HEIGHT, AI_TABLE_FIELD_HEAD_MORE, AI_TABLE_FIELD_HEAD_OPACITY_LINE, AI_TABLE_FIELD_HEAD_SELECT_CHECKBOX, AI_TABLE_PREVENT_CLEAR_SELECTION_CLASS, AI_TABLE_ROW_ADD_BUTTON, AI_TABLE_ROW_HEAD_WIDTH, AI_TABLE_ROW_SELECT_CHECKBOX, DBL_CLICK_EDIT_TYPE, DEFAULT_POINT_POSITION, DEFAULT_SCROLL_STATE, MOUSEOVER_EDIT_TYPE } from './constants';
5
5
  import { Coordinate, RendererContext, DragType, AITable } from './core';
6
6
  import { AITableGridBase } from './grid-base.component';
7
7
  import { AITableRenderer } from './renderer/renderer.component';
@@ -211,6 +211,18 @@ export class AITableGrid extends AITableGridBase {
211
211
  }
212
212
  }
213
213
  }
214
+ const { targetName: _targetName, fieldId } = getDetailByTargetName(targetName);
215
+ if (_targetName === AI_TABLE_FIELD_HEAD_OPACITY_LINE && fieldId) {
216
+ this.aiTableGridSelectionService.drag({
217
+ type: DragType.columnWidth,
218
+ sourceIds: new Set([fieldId]),
219
+ scroll: this.getScrollPosition(),
220
+ coordinate: this.coordinate()
221
+ });
222
+ }
223
+ else if (this.aiTableGridSelectionService.getDragStateType() === DragType.columnWidth) {
224
+ this.aiTableGridSelectionService.clearDrag();
225
+ }
214
226
  });
215
227
  }
216
228
  stageMousedown(e) {
@@ -497,6 +509,9 @@ export class AITableGrid extends AITableGridBase {
497
509
  fromEvent(document, 'keydown')
498
510
  .pipe(filter((event) => (event.ctrlKey || event.metaKey) && (event.key === 'c' || event.key === 'v')), takeUntilDestroyed(this.destroyRef))
499
511
  .subscribe(async (event) => {
512
+ if (this.aiReadonly()) {
513
+ return;
514
+ }
500
515
  const hasSelectedCells = this.aiTable.selection().selectedCells.size > 0;
501
516
  if (!hasSelectedCells) {
502
517
  return;
@@ -570,6 +585,13 @@ export class AITableGrid extends AITableGridBase {
570
585
  }
571
586
  break;
572
587
  case DragType.columnWidth:
588
+ if (data.fieldIds && isNumber(data.width)) {
589
+ const fieldId = data.fieldIds.values().next().value;
590
+ this.aiSetFieldWidth.emit({
591
+ path: [fieldId],
592
+ width: data.width
593
+ });
594
+ }
573
595
  break;
574
596
  case DragType.record:
575
597
  return;
@@ -585,4 +607,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
585
607
  class: 'ai-table-grid'
586
608
  }, imports: [AITableRenderer, AITableDragComponent], providers: [AITableGridEventService, AITableGridFieldService, AITableGridSelectionService], template: "<div #container class=\"ai-table-grid-view\">\n @if (hasContainerRect()) {\n <ai-table-renderer\n [config]=\"rendererConfig()\"\n (koMousemove)=\"stageMousemove($event)\"\n (koMousedown)=\"stageMousedown($event)\"\n (koMouseup)=\"stageMouseup($event)\"\n (koContextmenu)=\"stageContextmenu($event)\"\n (koClick)=\"stageClick($event)\"\n (koDblclick)=\"stageDblclick($event)\"\n >\n <div #horizontalBar class=\"ai-table-horizontal-scroll-bar-wrapper\" [style.width.px]=\"containerRect().width\">\n <div class=\"ai-table-scroll-bar-inner\" [style.width.px]=\"scrollbarWidth()\"></div>\n </div>\n <div\n #verticalBar\n class=\"ai-table-vertical-scroll-bar-wrapper\"\n [style.height.px]=\"containerRect().height - fieldHeadHeight\"\n [style.top.px]=\"fieldHeadHeight\"\n >\n <div class=\"ai-table-scroll-bar-inner\" [style.height.px]=\"scrollTotalHeight()\"></div>\n </div>\n </ai-table-renderer>\n }\n <ai-table-drag (dragEnd)=\"dragEnd($event)\"></ai-table-drag>\n</div>\n" }]
587
609
  }], ctorParameters: () => [] });
588
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3BhY2thZ2VzL2dyaWQvc3JjL2dyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILGVBQWUsRUFDZix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBRU4sTUFBTSxFQUlOLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNULGdCQUFnQixFQUNuQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV6QyxPQUFPLEVBQ0gsYUFBYSxFQUNiLHFCQUFxQixFQUNyQix5QkFBeUIsRUFDekIsK0JBQStCLEVBQy9CLG1CQUFtQixFQUNuQiwwQkFBMEIsRUFDMUIsd0JBQXdCLEVBQ3hCLG1DQUFtQyxFQUNuQyxzQ0FBc0MsRUFDdEMsdUJBQXVCLEVBQ3ZCLHVCQUF1QixFQUN2Qiw0QkFBNEIsRUFDNUIsbUJBQW1CLEVBQ25CLHNCQUFzQixFQUN0QixvQkFBb0IsRUFDcEIsbUJBQW1CLEVBQ3RCLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFJSCxVQUFVLEVBQ1YsZUFBZSxFQUdmLFFBQVEsRUFFUixPQUFPLEVBQ1YsTUFBTSxRQUFRLENBQUM7QUFDaEIsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3hELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSwwQkFBMEIsQ0FB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QVEsQ0FBQyxLQUFLO2dCQUNmLElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7b0JBQ2pELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO3dCQUMvQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQzs0QkFDbEIsSUFBSSxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQzs0QkFDM0IsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7eUJBQ2xDLENBQUMsQ0FBQztvQkFDUCxDQUFDO2dCQUNMLENBQUM7Z0JBQ0QsTUFBTTtZQUNWLEtBQUssUUFBUSxDQUFDLFdBQVc7Z0JBQ3JCLE1BQU07WUFDVixLQUFLLFFBQVEsQ0FBQyxNQUFNO2dCQUNoQixPQUFPO1FBQ2YsQ0FBQztRQUNELElBQUksQ0FBQywyQkFBMkIsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNqRCxDQUFDOytHQTdvQlEsV0FBVzttR0FBWCxXQUFXLHVHQUZULENBQUMsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUsMkJBQTJCLENBQUMsNllDaEY5Rix3c0NBMEJBLDRDRHFEYyxlQUFlLDZMQUFFLG9CQUFvQjs7NEZBR3RDLFdBQVc7a0JBWHZCLFNBQVM7K0JBQ0ksZUFBZSxjQUViLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxRQUN6Qzt3QkFDRixLQUFLLEVBQUUsZUFBZTtxQkFDekIsV0FDUSxDQUFDLGVBQWUsRUFBRSxvQkFBb0IsQ0FBQyxhQUNyQyxDQUFDLHVCQUF1QixFQUFFLHVCQUF1QixFQUFFLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBhZnRlck5leHRSZW5kZXIsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIGNvbXB1dGVkLFxuICAgIGVmZmVjdCxcbiAgICBFbGVtZW50UmVmLFxuICAgIGluamVjdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIFNpZ25hbCxcbiAgICBzaWduYWwsXG4gICAgdW50cmFja2VkLFxuICAgIHZpZXdDaGlsZCxcbiAgICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgZmlsdGVyLCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEtvRXZlbnRPYmplY3QgfSBmcm9tICcuL2FuZ3VsYXIta29udmEnO1xuaW1wb3J0IHtcbiAgICBBSV9UQUJMRV9DRUxMLFxuICAgIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICBBSV9UQUJMRV9GSUVMRF9BRERfQlVUVE9OLFxuICAgIEFJX1RBQkxFX0ZJRUxEX0FERF9CVVRUT05fV0lEVEgsXG4gICAgQUlfVEFCTEVfRklFTERfSEVBRCxcbiAgICBBSV9UQUJMRV9GSUVMRF9IRUFEX0hFSUdIVCxcbiAgICBBSV9UQUJMRV9GSUVMRF9IRUFEX01PUkUsXG4gICAgQUlfVEFCTEVfRklFTERfSEVBRF9TRUxFQ1RfQ0hFQ0tCT1gsXG4gICAgQUlfVEFCTEVfUFJFVkVOVF9DTEVBUl9TRUxFQ1RJT05fQ0xBU1MsXG4gICAgQUlfVEFCTEVfUk9XX0FERF9CVVRUT04sXG4gICAgQUlfVEFCTEVfUk9XX0hFQURfV0lEVEgsXG4gICAgQUlfVEFCTEVfUk9XX1NFTEVDVF9DSEVDS0JPWCxcbiAgICBEQkxfQ0xJQ0tfRURJVF9UWVBFLFxuICAgIERFRkFVTFRfUE9JTlRfUE9TSVRJT04sXG4gICAgREVGQVVMVF9TQ1JPTExfU1RBVEUsXG4gICAgTU9VU0VPVkVSX0VESVRfVFlQRVxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICAgIEFkZEZpZWxkT3B0aW9ucyxcbiAgICBBZGRSZWNvcmRPcHRpb25zLFxuICAgIEFJVGFibGVGaWVsZCxcbiAgICBDb29yZGluYXRlLFxuICAgIFJlbmRlcmVyQ29udGV4dCxcbiAgICBVcGRhdGVGaWVsZFZhbHVlT3B0aW9ucyxcbiAgICBEcmFnRW5kRGF0YSxcbiAgICBEcmFnVHlwZSxcbiAgICBBSVJlY29yZEZpZWxkSWRQYXRoLFxuICAgIEFJVGFibGVcbn0gZnJvbSAnLi9jb3JlJztcbmltcG9ydCB7IEFJVGFibGVHcmlkQmFzZSB9IGZyb20gJy4vZ3JpZC1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBSVRhYmxlUmVuZGVyZXIgfSBmcm9tICcuL3JlbmRlcmVyL3JlbmRlcmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBSVRhYmxlR3JpZEV2ZW50U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZXZlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBBSVRhYmxlR3JpZEZpZWxkU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZmllbGQuc2VydmljZSc7XG5pbXBvcnQgeyBBSVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3NlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEFJVGFibGVDb250ZXh0TWVudUl0ZW0sIEFJVGFibGVNb3VzZURvd25UeXBlLCBBSVRhYmxlUmVuZGVyZXJDb25maWcsIEFJVGFibGVTZWxlY3RBbGxTdGF0ZSwgU2Nyb2xsQWN0aW9uT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgICBBSVRhYmxlR3JpZEkxOG5LZXksXG4gICAgYnVpbGRHcmlkTGluZWFyUm93cyxcbiAgICBnZXRDb2x1bW5JbmRpY2VzU2l6ZU1hcCxcbiAgICBnZXREZXRhaWxCeVRhcmdldE5hbWUsXG4gICAgZ2V0STE4blRleHRCeUtleSxcbiAgICBoYW5kbGVNb3VzZVN0eWxlLFxuICAgIGlzQ2VsbE1hdGNoS2V5d29yZHMsXG4gICAgaXNXaW5kb3dzXG59IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgZ2V0TW91c2VQb3NpdGlvbiB9IGZyb20gJy4vdXRpbHMvcG9zaXRpb24nO1xuaW1wb3J0IHsgQUlUYWJsZURyYWdDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZHJhZy9kcmFnLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBidWlsZENsaXBib2FyZERhdGEsIHdyaXRlVG9DbGlwYm9hcmQsIHdyaXRlVG9BSVRhYmxlLCBBSVRhYmxlQWN0aW9ucyB9IGZyb20gJy4vdXRpbHMvY2xpcGJvYXJkJztcbmltcG9ydCB7IFRoeU5vdGlmeVNlcnZpY2UgfSBmcm9tICduZ3gtdGV0aHlzL25vdGlmeSc7XG5pbXBvcnQgeyBpc051bWJlciB9IGZyb20gJ2xvZGFzaCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWktdGFibGUtZ3JpZCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2dyaWQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2FpLXRhYmxlLWdyaWQnXG4gICAgfSxcbiAgICBpbXBvcnRzOiBbQUlUYWJsZVJlbmRlcmVyLCBBSVRhYmxlRHJhZ0NvbXBvbmVudF0sXG4gICAgcHJvdmlkZXJzOiBbQUlUYWJsZUdyaWRFdmVudFNlcnZpY2UsIEFJVGFibGVHcmlkRmllbGRTZXJ2aWNlLCBBSVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIEFJVGFibGVHcmlkIGV4dGVuZHMgQUlUYWJsZUdyaWRCYXNlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZiA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcblxuICAgIHByaXZhdGUgaXNEcmFnU2VsZWN0aW5nID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIGRyYWdTZWxlY3Rpb25TdGFydDogQUlSZWNvcmRGaWVsZElkUGF0aCB8IG51bGwgPSBudWxsO1xuXG4gICAgcHJpdmF0ZSBub3RpZnlTZXJ2aWNlID0gaW5qZWN0KFRoeU5vdGlmeVNlcnZpY2UpO1xuXG4gICAgdGltZXIhOiBudW1iZXIgfCBudWxsO1xuXG4gICAgcmVzaXplT2JzZXJ2ZXIhOiBSZXNpemVPYnNlcnZlcjtcblxuICAgIGZpZWxkSGVhZEhlaWdodCA9IEFJX1RBQkxFX0ZJRUxEX0hFQURfSEVJR0hUO1xuXG4gICAgY29udGFpbmVyUmVjdCA9IHNpZ25hbCh7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSk7XG5cbiAgICBmcm96ZW5Db2x1bW5Db3VudCA9IHNpZ25hbCgxKTtcblxuICAgIGhhc0NvbnRhaW5lclJlY3QgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lclJlY3QoKS53aWR0aCA+IDAgJiYgdGhpcy5jb250YWluZXJSZWN0KCkuaGVpZ2h0ID4gMDtcbiAgICB9KTtcblxuICAgIGNvbnRhaW5lciA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignY29udGFpbmVyJyk7XG5cbiAgICB2ZXJ0aWNhbEJhclJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPigndmVydGljYWxCYXInKTtcblxuICAgIGhvcml6b250YWxCYXJSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ2hvcml6b250YWxCYXInKTtcblxuICAgIGxpbmVhclJvd3MgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBidWlsZEdyaWRMaW5lYXJSb3dzKHRoaXMuZ3JpZERhdGEoKS5yZWNvcmRzLCAhdGhpcy5haVJlYWRvbmx5KCkpO1xuICAgIH0pO1xuXG4gICAgdmlzaWJsZUNvbHVtbnNJbmRleE1hcCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IEFJVGFibGUuZ2V0VmlzaWJsZUZpZWxkcyh0aGlzLmFpVGFibGUpO1xuICAgICAgICByZXR1cm4gbmV3IE1hcChjb2x1bW5zPy5tYXAoKGl0ZW0sIGluZGV4KSA9PiBbaXRlbS5faWQsIGluZGV4XSkpO1xuICAgIH0pO1xuXG4gICAgdmlzaWJsZVJvd3NJbmRleE1hcCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBNYXAodGhpcy5saW5lYXJSb3dzKCkubWFwKChyb3csIGluZGV4KSA9PiBbcm93Ll9pZCwgaW5kZXhdKSk7XG4gICAgfSk7XG5cbiAgICBjb250YWluZXJFbGVtZW50ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXIoKSEubmF0aXZlRWxlbWVudDtcbiAgICB9KTtcblxuICAgIHJlbmRlcmVyQ29uZmlnOiBTaWduYWw8QUlUYWJsZVJlbmRlcmVyQ29uZmlnPiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgZmllbGRzID0gQUlUYWJsZS5nZXRWaXNpYmxlRmllbGRzKHRoaXMuYWlUYWJsZSk7XG4gICAgICAgIGNvbnN0IGNvb3JkaW5hdGUgPSBuZXcgQ29vcmRpbmF0ZSh7XG4gICAgICAgICAgICBjb250YWluZXI6IHRoaXMuY29udGFpbmVyRWxlbWVudCgpLFxuICAgICAgICAgICAgcm93SGVpZ2h0OiBBSV9UQUJMRV9GSUVMRF9IRUFEX0hFSUdIVCxcbiAgICAgICAgICAgIHJvd0NvdW50OiB0aGlzLmxpbmVhclJvd3MoKS5sZW5ndGgsXG4gICAgICAgICAgICBjb2x1bW5Db3VudDogZmllbGRzLmxlbmd0aCxcbiAgICAgICAgICAgIHJvd0luaXRTaXplOiBBSV9UQUJMRV9GSUVMRF9IRUFEX0hFSUdIVCxcbiAgICAgICAgICAgIGNvbHVtbkluaXRTaXplOiBBSV9UQUJMRV9ST1dfSEVBRF9XSURUSCxcbiAgICAgICAgICAgIHJvd0luZGljZXNTaXplTWFwOiB7fSxcbiAgICAgICAgICAgIGNvbHVtbkluZGljZXNTaXplTWFwOiBnZXRDb2x1bW5JbmRpY2VzU2l6ZU1hcCh0aGlzLmFpVGFibGUsIGZpZWxkcyksXG4gICAgICAgICAgICBmcm96ZW5Db2x1bW5Db3VudDogdGhpcy5mcm96ZW5Db2x1bW5Db3VudCgpXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWlUYWJsZTogdGhpcy5haVRhYmxlLFxuICAgICAgICAgICAgZ3JpZERhdGE6IHRoaXMuZ3JpZERhdGEoKSxcbiAgICAgICAgICAgIGNvbnRhaW5lcjogdGhpcy5jb250YWluZXJFbGVtZW50KCksXG4gICAgICAgICAgICBjb29yZGluYXRlOiBjb29yZGluYXRlLFxuICAgICAgICAgICAgY29udGFpbmVyV2lkdGg6IHRoaXMuY29udGFpbmVyUmVjdCgpLndpZHRoLFxuICAgICAgICAgICAgY29udGFpbmVySGVpZ2h0OiB0aGlzLmNvbnRhaW5lclJlY3QoKS5oZWlnaHQsXG4gICAgICAgICAgICByZWZlcmVuY2VzOiB0aGlzLmFpUmVmZXJlbmNlcygpLFxuICAgICAgICAgICAgcmVhZG9ubHk6IHRoaXMuYWlSZWFkb25seSgpXG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb29yZGluYXRlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJlckNvbmZpZygpLmNvb3JkaW5hdGU7XG4gICAgfSk7XG5cbiAgICBzY3JvbGxUb3RhbEhlaWdodCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMuY29vcmRpbmF0ZSgpLnRvdGFsSGVpZ2h0LCB0aGlzLmNvbnRhaW5lclJlY3QoKS5oZWlnaHQgLSB0aGlzLmZpZWxkSGVhZEhlaWdodCk7XG4gICAgfSk7XG5cbiAgICBzY3JvbGxiYXJXaWR0aCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29vcmRpbmF0ZSgpLnRvdGFsV2lkdGggKyBBSV9UQUJMRV9GSUVMRF9BRERfQlVUVE9OX1dJRFRIO1xuICAgIH0pO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldENvbnRhaW5lclJlY3QoKTtcbiAgICAgICAgICAgIHRoaXMuYmluZEdsb2JhbE1vdXNlZG93bigpO1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXJSZXNpemVMaXN0ZW5lcigpO1xuICAgICAgICAgICAgdGhpcy5iaW5kV2hlZWwoKTtcbiAgICAgICAgICAgIHRoaXMuYmluZENsaXBib2FyZFNob3J0Y3V0cygpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc0NvbnRhaW5lclJlY3QoKSAmJiB0aGlzLmhvcml6b250YWxCYXJSZWYoKSAmJiB0aGlzLnZlcnRpY2FsQmFyUmVmKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJpbmRTY3JvbGxCYXJTY3JvbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuYWlSZWFkb25seSgpICYmIHRoaXMuYWlUYWJsZS5jb250ZXh0Py5wb2ludFBvc2l0aW9uKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUhvdmVyQ2VsbEVkaXRvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZWZmZWN0KFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0S2V5d29yZHNNYXRjaGVkQ2VsbHMoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICAgICAgKTtcblxuICAgICAgICBlZmZlY3QoXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjb3JkSWRTZXQgPSBuZXcgU2V0PHN0cmluZz4odGhpcy5haVRhYmxlLnJlY29yZHMoKS5tYXAoKGl0ZW0pID0+IGl0ZW0uX2lkKSk7XG4gICAgICAgICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRSZWNvcmRzID0gdGhpcy5haVRhYmxlLnNlbGVjdGlvbigpLnNlbGVjdGVkUmVjb3JkcztcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBzZWxlY3RlZFJlY29yZElkIG9mIHNlbGVjdGVkUmVjb3Jkcy52YWx1ZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWNvcmRJZFNldC5oYXMoc2VsZWN0ZWRSZWNvcmRJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFJlY29yZHMuZGVsZXRlKHNlbGVjdGVkUmVjb3JkSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZS5zZWxlY3Rpb24udXBkYXRlKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRSZWNvcmRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEFsbFN0YXRlOiB0aGlzLmFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZS5zZWxlY3RBbGxTdGF0ZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5pbml0Q29udGV4dCgpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0Q29udGV4dCgpIHtcbiAgICAgICAgdGhpcy5haVRhYmxlLmNvbnRleHQgPSBuZXcgUmVuZGVyZXJDb250ZXh0KHtcbiAgICAgICAgICAgIGxpbmVhclJvd3M6IHRoaXMubGluZWFyUm93cyxcbiAgICAgICAgICAgIHZpc2libGVDb2x1bW5zSW5kZXhNYXA6IHRoaXMudmlzaWJsZUNvbHVtbnNJbmRleE1hcCxcbiAgICAgICAgICAgIHZpc2libGVSb3dzSW5kZXhNYXA6IHRoaXMudmlzaWJsZVJvd3NJbmRleE1hcCxcbiAgICAgICAgICAgIHBvaW50UG9zaXRpb246IHNpZ25hbChERUZBVUxUX1BPSU5UX1BPU0lUSU9OKSxcbiAgICAgICAgICAgIHNjcm9sbFN0YXRlOiBzaWduYWwoREVGQVVMVF9TQ1JPTExfU1RBVEUpLFxuICAgICAgICAgICAgZnJvemVuQ29sdW1uQ291bnQ6IHRoaXMuZnJvemVuQ29sdW1uQ291bnQsXG4gICAgICAgICAgICByZWZlcmVuY2VzOiB0aGlzLmFpUmVmZXJlbmNlcyxcbiAgICAgICAgICAgIGFpRmllbGRDb25maWc6IHRoaXMuYWlGaWVsZENvbmZpZyxcbiAgICAgICAgICAgIHNjcm9sbEFjdGlvbjogdGhpcy5zY3JvbGxBY3Rpb25cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRLZXl3b3Jkc01hdGNoZWRDZWxscygpIHtcbiAgICAgICAgY29uc3Qga2V5d29yZHMgPSB0aGlzLmFpS2V5d29yZHMoKTtcbiAgICAgICAgbGV0IG1hdGNoZWRDZWxscyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgICAgIGlmIChrZXl3b3Jkcykge1xuICAgICAgICAgICAgY29uc3QgcmVmZXJlbmNlcyA9IHRoaXMuYWlSZWZlcmVuY2VzKCk7XG4gICAgICAgICAgICB0aGlzLmFpVGFibGUucmVjb3JkcygpLmZvckVhY2goKHJlY29yZCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZS5maWVsZHMoKS5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNDZWxsTWF0Y2hLZXl3b3Jkcyh0aGlzLmFpVGFibGUsIGZpZWxkLCByZWNvcmQuX2lkLCBrZXl3b3JkcywgcmVmZXJlbmNlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWRDZWxscy5hZGQoYCR7cmVjb3JkLl9pZH06JHtmaWVsZC5faWR9YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5haVRhYmxlLmtleXdvcmRzTWF0Y2hlZENlbGxzLnNldChtYXRjaGVkQ2VsbHMpO1xuICAgIH1cblxuICAgIHN0YWdlTW91c2Vtb3ZlKGU6IEtvRXZlbnRPYmplY3Q8TW91c2VFdmVudD4pIHtcbiAgICAgICAgaWYgKHRoaXMudGltZXIpIHtcbiAgICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMudGltZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGltZXIgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0TmFtZSA9IGUuZXZlbnQudGFyZ2V0Lm5hbWUoKTtcbiAgICAgICAgICAgIGNvbnN0IGdyaWRTdGFnZSA9IGUuZXZlbnQuY3VycmVudFRhcmdldC5nZXRTdGFnZSgpO1xuICAgICAgICAgICAgY29uc3QgcG9zID0gZ3JpZFN0YWdlPy5nZXRQb2ludGVyUG9zaXRpb24oKTtcbiAgICAgICAgICAgIGlmIChwb3MgPT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgeyBjb250ZXh0IH0gPSB0aGlzLmFpVGFibGU7XG4gICAgICAgICAgICBjb25zdCB7IHgsIHkgfSA9IHBvcztcbiAgICAgICAgICAgIGNvbnN0IGN1ck1vdXNlUG9zaXRpb24gPSBnZXRNb3VzZVBvc2l0aW9uKFxuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZSxcbiAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgIHksXG4gICAgICAgICAgICAgICAgdGhpcy5jb29yZGluYXRlKCksXG4gICAgICAgICAgICAgICAgQUlUYWJsZS5nZXRWaXNpYmxlRmllbGRzKHRoaXMuYWlUYWJsZSksXG4gICAgICAgICAgICAgICAgY29udGV4dCEsXG4gICAgICAgICAgICAgICAgdGFyZ2V0TmFtZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGhhbmRsZU1vdXNlU3R5bGUoY3VyTW91c2VQb3NpdGlvbi5yZWFsVGFyZ2V0TmFtZSwgY3VyTW91c2VQb3NpdGlvbi5hcmVhVHlwZSwgdGhpcy5jb250YWluZXJFbGVtZW50KCkpO1xuICAgICAgICAgICAgY29udGV4dCEuc2V0UG9pbnRQb3NpdGlvbihjdXJNb3VzZVBvc2l0aW9uKTtcbiAgICAgICAgICAgIHRoaXMudGltZXIgPSBudWxsO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNEcmFnU2VsZWN0aW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBmaWVsZElkLCByZWNvcmRJZCB9ID0gZ2V0RGV0YWlsQnlUYXJnZXROYW1lKGN1ck1vdXNlUG9zaXRpb24ucmVhbFRhcmdldE5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZElkICYmIHJlY29yZElkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IHRoaXMuZHJhZ1NlbGVjdGlvblN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmRDZWxsOiBBSVJlY29yZEZpZWxkSWRQYXRoID0gW3JlY29yZElkLCBmaWVsZElkXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0Q2VsbCAmJiAhIXN0YXJ0Q2VsbC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdENlbGxzKHN0YXJ0Q2VsbCwgZW5kQ2VsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YWdlTW91c2Vkb3duKGU6IEtvRXZlbnRPYmplY3Q8TW91c2VFdmVudD4pIHtcbiAgICAgICAgY29uc3QgbW91c2VFdmVudCA9IGUuZXZlbnQuZXZ0O1xuICAgICAgICBjb25zdCBfdGFyZ2V0TmFtZSA9IGUuZXZlbnQudGFyZ2V0Lm5hbWUoKTtcblxuICAgICAgICBjb25zdCB7IHRhcmdldE5hbWUsIGZpZWxkSWQsIHJlY29yZElkIH0gPSBnZXREZXRhaWxCeVRhcmdldE5hbWUoX3RhcmdldE5hbWUpO1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICBtb3VzZUV2ZW50LmJ1dHRvbiA9PT0gQUlUYWJsZU1vdXNlRG93blR5cGUuUmlnaHQgJiZcbiAgICAgICAgICAgIHJlY29yZElkICYmXG4gICAgICAgICAgICBmaWVsZElkICYmXG4gICAgICAgICAgICAodGhpcy5haVRhYmxlLnNlbGVjdGlvbigpLnNlbGVjdGVkUmVjb3Jkcy5oYXMocmVjb3JkSWQpIHx8IHRoaXMuYWlUYWJsZS5zZWxlY3Rpb24oKS5zZWxlY3RlZENlbGxzLmhhcyhgJHtyZWNvcmRJZH06JHtmaWVsZElkfWApKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHN3aXRjaCAodGFyZ2V0TmFtZSkge1xuICAgICAgICAgICAgY2FzZSBBSV9UQUJMRV9GSUVMRF9IRUFEOlxuICAgICAgICAgICAgICAgIG1vdXNlRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICBpZiAoIWZpZWxkSWQpIHJldHVybjtcbiAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZS5zZWxlY3RGaWVsZChmaWVsZElkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUZpZWxkRHJhZ1N0YXJ0KCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSBBSV9UQUJMRV9DRUxMOlxuICAgICAgICAgICAgICAgIGlmICghcmVjb3JkSWQgfHwgIWZpZWxkSWQpIHJldHVybjtcbiAgICAgICAgICAgICAgICBjb25zdCBkcmFnU2VsZWN0aW9uU3RhcnQ6IEFJUmVjb3JkRmllbGRJZFBhdGggPSBbcmVjb3JkSWQsIGZpZWxkSWRdO1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRHJhZ1NlbGVjdGlvblN0YXRlKHRydWUsIGRyYWdTZWxlY3Rpb25TdGFydCk7XG4gICAgICAgICAgICAgICAgdGhpcy5haVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0Q2VsbHMoZHJhZ1NlbGVjdGlvblN0YXJ0KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBjYXNlIEFJX1RBQkxFX1JPV19BRERfQlVUVE9OOlxuICAgICAgICAgICAgY2FzZSBBSV9UQUJMRV9GSUVMRF9BRERfQlVUVE9OOlxuICAgICAgICAgICAgY2FzZSBBSV9UQUJMRV9ST1dfU0VMRUNUX0NIRUNLQk9YOlxuICAgICAgICAgICAgY2FzZSBBSV9UQUJMRV9GSUVMRF9IRUFEX1NFTEVDVF9DSEVDS0JPWDpcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzdGFnZU1vdXNldXAoZTogS29FdmVudE9iamVjdDxNb3VzZUV2ZW50Pikge1xuICAgICAgICB0aGlzLnVwZGF0ZURyYWdTZWxlY3Rpb25TdGF0ZShmYWxzZSwgbnVsbCk7XG4gICAgfVxuXG4gICAgc3RhZ2VDb250ZXh0bWVudShlOiBLb0V2ZW50T2JqZWN0PE1vdXNlRXZlbnQ+KSB7XG4gICAgICAgIGNvbnN0IG1vdXNlRXZlbnQgPSBlLmV2ZW50LmV2dDtcbiAgICAgICAgbW91c2VFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgIGlmICh0aGlzLmFpUmVhZG9ubHkoKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGFyZ2V0TmFtZSA9IGUuZXZlbnQudGFyZ2V0Lm5hbWUoKTtcbiAgICAgICAgY29uc3QgeyBmaWVsZElkLCByZWNvcmRJZCB9ID0gZ2V0RGV0YWlsQnlUYXJnZXROYW1lKHRhcmdldE5hbWUpO1xuICAgICAgICBpZiAoIXJlY29yZElkIHx8ICFmaWVsZElkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHtcbiAgICAgICAgICAgIHg6IG1vdXNlRXZlbnQueCxcbiAgICAgICAgICAgIHk6IG1vdXNlRXZlbnQueVxuICAgICAgICB9O1xuXG4gICAgICAgIGNvbnN0IG1lbnVJdGVtczogQUlUYWJsZUNvbnRleHRNZW51SXRlbVtdID0gW107XG4gICAgICAgIGlmICh0aGlzLmFpQ29udGV4dE1lbnVJdGVtcygpKSB7XG4gICAgICAgICAgICBtZW51SXRlbXMucHVzaCguLi50aGlzLmFpQ29udGV4dE1lbnVJdGVtcygpISh0aGlzLmFpVGFibGUpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1lbnVJdGVtcy5sZW5ndGggfHwgbWVudUl0ZW1zLmV2ZXJ5KChpdGVtKSA9PiAhIShpdGVtLmhpZGRlbiAmJiBpdGVtLmhpZGRlbih0aGlzLmFpVGFibGUsIHRhcmdldE5hbWUsIHBvc2l0aW9uKSkpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmFpVGFibGVHcmlkRXZlbnRTZXJ2aWNlLm9wZW5Db250ZXh0TWVudSh0aGlzLmFpVGFibGUsIHtcbiAgICAgICAgICAgIG9yaWdpbjogdGhpcy5jb250YWluZXJFbGVtZW50KCksXG4gICAgICAgICAgICBtZW51SXRlbXMsXG4gICAgICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgICAgIHRhcmdldE5hbWUsXG4gICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmOiB0aGlzLnZpZXdDb250YWluZXJSZWZcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc3RhZ2VDbGljayhlOiBLb0V2ZW50T2JqZWN0PE1vdXNlRXZlbnQ+KSB7XG4gICAgICAgIGNvbnN0IG1vdXNlRXZlbnQgPSBlLmV2ZW50LmV2dDtcbiAgICAgICAgbW91c2VFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICB0aGlzLmFpVGFibGVHcmlkRXZlbnRTZXJ2aWNlLmNsb3NlQ2VsbEVkaXRvcigpO1xuICAgICAgICBjb25zdCB7IGNvbnRleHQgfSA9IHRoaXMuYWlUYWJsZTtcbiAgICAgICAgY29uc3QgeyB0YXJnZXROYW1lLCByb3dJbmRleDogcG9pbnRSb3dJbmRleCB9ID0gY29udGV4dCEucG9pbnRQb3NpdGlvbigpO1xuICAgICAgICBpZiAobW91c2VFdmVudC5idXR0b24gIT09IEFJVGFibGVNb3VzZURvd25UeXBlLkxlZnQgfHwgKHRhcmdldE5hbWUgIT09IEFJX1RBQkxFX0ZJRUxEX0hFQURfTU9SRSAmJiB0aGlzLmFpUmVhZG9ubHkoKSkpIHJldHVybjtcbiAgICAgICAgc3dpdGNoICh0YXJnZXROYW1lKSB7XG4gICAgICAgICAgICBjYXNlIEFJX1RBQkxFX1JPV19BRERfQlVUVE9OOiB7XG4gICAgICAgICAgICAgICAgdGhpcy5haVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2UuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFJlY29yZCgpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBSV9UQUJMRV9ST1dfU0VMRUNUX0NIRUNLQk9YOiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9pbnRSZWNvcmRJZCA9IGNvbnRleHQhLmxpbmVhclJvd3MoKVtwb2ludFJvd0luZGV4XT8uX2lkO1xuICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0UmVjb3JkKHBvaW50UmVjb3JkSWQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBSV9UQUJMRV9GSUVMRF9IRUFEX1NFTEVDVF9DSEVDS0JPWDoge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQ2hlY2tlZCA9IHRoaXMuYWlUYWJsZS5zZWxlY3Rpb24oKS5zZWxlY3RBbGxTdGF0ZSA9PT0gQUlUYWJsZVNlbGVjdEFsbFN0YXRlLmFsbDtcbiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZVNlbGVjdEFsbCghaXNDaGVja2VkKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQUlfVEFCTEVfRklFTERfQUREX0JVVFRPTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZmllbGRHcm91cFJlY3QgPSBlLmV2ZW50LnRhcmdldC5nZXRQYXJlbnQoKT8uZ2V0Q2xpZW50UmVjdCgpITtcbiAgICAgICAgICAgICAgICBjb25zdCBjb250YWluZXJSZWN0ID0gdGhpcy5jb250YWluZXJFbGVtZW50KCkuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRGaWVsZCh0aGlzLmNvbnRhaW5lckVsZW1lbnQoKSwge1xuICAgICAgICAgICAgICAgICAgICB4OiBmaWVsZEdyb3VwUmVjdC54ICsgY29udGFpbmVyUmVjdC54LFxuICAgICAgICAgICAgICAgICAgICB5OiBjb250YWluZXJSZWN0LnkgKyBmaWVsZEdyb3VwUmVjdC55ICsgZmllbGRHcm91cFJlY3QuaGVpZ2h0XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFJX1RBQkxFX0ZJRUxEX0hFQURfTU9SRTpcbiAgICAgICAgICAgICAgICBtb3VzZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgX3RhcmdldE5hbWUgPSBlLmV2ZW50LnRhcmdldC5uYW1lKCk7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBmaWVsZElkIH0gPSBnZXREZXRhaWxCeVRhcmdldE5hbWUoX3RhcmdldE5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZElkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG1vcmVSZWN0ID0gZS5ldmVudC50YXJnZXQuZ2V0Q2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmaWVsZEdyb3VwUmVjdCA9IGUuZXZlbnQudGFyZ2V0LmdldFBhcmVudCgpPy5nZXRQYXJlbnQoKT8uZ2V0Q2xpZW50UmVjdCgpITtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyUmVjdCA9IHRoaXMuY29udGFpbmVyRWxlbWVudCgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvc2l0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogY29udGFpbmVyUmVjdC54ICsgbW9yZVJlY3QueCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IGNvbnRhaW5lclJlY3QueSArIG1vcmVSZWN0LnkgKyBtb3JlUmVjdC5oZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZWRpdEZpZWxkUG9zaXRpb24gPSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB4OiBjb250YWluZXJSZWN0LnggKyBmaWVsZEdyb3VwUmVjdC54IC0gQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgICAgICAgICAgICAgeTogY29udGFpbmVyUmVjdC55ICsgZmllbGRHcm91cFJlY3QueSArIGZpZWxkR3JvdXBSZWN0LmhlaWdodFxuICAgICAgICAgICAgICAgICAgICB9O1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVkaXRPcmlnaW4gPSB0aGlzLmNvbnRhaW5lckVsZW1lbnQoKS5xdWVyeVNlbGVjdG9yKCcua29udmFqcy1jb250ZW50JykgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRGaWVsZFNlcnZpY2Uub3BlbkZpZWxkTWVudSh0aGlzLmFpVGFibGUsIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkSWQ6IGZpZWxkSWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZE1lbnVzOiB0aGlzLmZpZWxkTWVudXMoKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbjogdGhpcy5jb250YWluZXJFbGVtZW50KCksXG4gICAgICAgICAgICAgICAgICAgICAgICBwb3NpdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgIGVkaXRPcmlnaW46IGVkaXRPcmlnaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICBlZGl0RmllbGRQb3NpdGlvblxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdGFyZ2V0TmFtZURldGFpbCA9IGdldERldGFpbEJ5VGFyZ2V0TmFtZShlLmV2ZW50LnRhcmdldC5uYW1lKCkpO1xuXG4gICAgICAgIHRoaXMuYWlDbGljay5lbWl0KHtcbiAgICAgICAgICAgIC4uLmUsXG4gICAgICAgICAgICB0YXJnZXROYW1lRGV0YWlsXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgc3RhZ2VEYmxjbGljayhlOiBLb0V2ZW50T2JqZWN0PE1vdXNlRXZlbnQ+KSB7XG4gICAgICAgIGNvbnN0IF90YXJnZXROYW1lID0gZS5ldmVudC50YXJnZXQubmFtZSgpO1xuICAgICAgICBjb25zdCB0YXJnZXROYW1lRGV0YWlsID0gZ2V0RGV0YWlsQnlUYXJnZXROYW1lKF90YXJnZXROYW1lKTtcbiAgICAgICAgaWYgKHRoaXMuYWlSZWFkb25seSgpKSB7XG4gICAgICAgICAgICB0aGlzLmFpRGJDbGljay5lbWl0KHtcbiAgICAgICAgICAgICAgICAuLi5lLFxuICAgICAgICAgICAgICAgIHRhcmdldE5hbWVEZXRhaWxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHsgZmllbGRJZCwgcmVjb3JkSWQgfSA9IHRhcmdldE5hbWVEZXRhaWw7XG4gICAgICAgIGlmICghcmVjb3JkSWQgfHwgIWZpZWxkSWQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuYWlUYWJsZS5maWVsZHNNYXAoKVtmaWVsZElkXTtcbiAgICAgICAgY29uc3QgZmllbGRUeXBlID0gZmllbGQudHlwZTtcbiAgICAgICAgaWYgKERCTF9DTElDS19FRElUX1RZUEUuaW5jbHVkZXMoZmllbGRUeXBlKSkge1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5haVRhYmxlR3JpZEV2ZW50U2VydmljZS5vcGVuQ2VsbEVkaXRvcih0aGlzLmFpVGFibGUsIHtcbiAgICAgICAgICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZjogdGhpcy52aWV3Q29udGFpbmVyUmVmLFxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXI6IHRoaXMuY29udGFpbmVyRWxlbWVudCgpLFxuICAgICAgICAgICAgICAgICAgICBjb29yZGluYXRlOiB0aGlzLmNvb3JkaW5hdGUoKSxcbiAgICAgICAgICAgICAgICAgICAgZmllbGRJZDogZmllbGRJZCEsXG4gICAgICAgICAgICAgICAgICAgIHJlY29yZElkOiByZWNvcmRJZCEsXG4gICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZXM6IHRoaXMuYWlSZWZlcmVuY2VzKCksXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUZpZWxkVmFsdWU6ICh2YWx1ZTogVXBkYXRlRmllbGRWYWx1ZU9wdGlvbnM8YW55PikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5haVVwZGF0ZUZpZWxkVmFsdWUuZW1pdCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sIDApO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5haURiQ2xpY2suZW1pdCh7XG4gICAgICAgICAgICAgICAgLi4uZSxcbiAgICAgICAgICAgICAgICB0YXJnZXROYW1lRGV0YWlsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYmluZFdoZWVsKCkge1xuICAgICAgICBmcm9tRXZlbnQ8V2hlZWxFdmVudD4odGhpcy5jb250YWluZXJFbGVtZW50KCksICd3aGVlbCcsIHsgcGFzc2l2ZTogZmFsc2UgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZTogV2hlZWxFdmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGUucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkRXZlbnRTZXJ2aWNlLmNsb3NlQ2VsbEVkaXRvcigpO1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsQWN0aW9uKHsgZGVsdGFYOiBlLmRlbHRhWCwgZGVsdGFZOiBlLmRlbHRhWSwgc2hpZnRLZXk6IGUuc2hpZnRLZXkgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzY3JvbGxBY3Rpb24gPSAob3B0aW9uczogU2Nyb2xsQWN0aW9uT3B0aW9ucykgPT4ge1xuICAgICAgICBpZiAodGhpcy50aW1lcikge1xuICAgICAgICAgICAgY2FuY2VsQW5pbWF0aW9uRnJhbWUodGhpcy50aW1lcik7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy50aW1lciA9IHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB7IGRlbHRhWCwgZGVsdGFZLCBzaGlmdEtleSB9ID0gb3B0aW9ucztcbiAgICAgICAgICAgIGNvbnN0IGZpeGVkRGVsdGFZID0gc2hpZnRLZXkgJiYgaXNXaW5kb3dzID8gMCA6IGRlbHRhWTtcbiAgICAgICAgICAgIGNvbnN0IGZpeGVkRGVsdGFYID0gc2hpZnRLZXkgJiYgaXNXaW5kb3dzID8gZGVsdGFZIDogZGVsdGFYO1xuICAgICAgICAgICAgY29uc3QgaG9yaXpvbnRhbEJhciA9IHRoaXMuaG9yaXpvbnRhbEJhclJlZigpPy5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgY29uc3QgdmVydGljYWxCYXIgPSB0aGlzLnZlcnRpY2FsQmFyUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgICAgICBpZiAoaG9yaXpvbnRhbEJhcikge1xuICAgICAgICAgICAgICAgIGhvcml6b250YWxCYXIuc2Nyb2xsTGVmdCA9IGhvcml6b250YWxCYXIuc2Nyb2xsTGVmdCArIGZpeGVkRGVsdGFYO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHZlcnRpY2FsQmFyKSB7XG4gICAgICAgICAgICAgICAgdmVydGljYWxCYXIuc2Nyb2xsVG9wID0gdmVydGljYWxCYXIuc2Nyb2xsVG9wICsgZml4ZWREZWx0YVk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBvcHRpb25zLmNhbGxiYWNrICYmIG9wdGlvbnMuY2FsbGJhY2soKTtcbiAgICAgICAgICAgIHRoaXMudGltZXIgPSBudWxsO1xuICAgICAgICB9KTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBiaW5kU2Nyb2xsQmFyU2Nyb2xsKCkge1xuICAgICAgICBmcm9tRXZlbnQ8V2hlZWxFdmVudD4odGhpcy5ob3Jpem9udGFsQmFyUmVmKCkhLm5hdGl2ZUVsZW1lbnQsICdzY3JvbGwnLCB7IHBhc3NpdmU6IHRydWUgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuaG9yaXpvbnRhbFNjcm9sbChlKTtcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgIGZyb21FdmVudDxXaGVlbEV2ZW50Pih0aGlzLnZlcnRpY2FsQmFyUmVmKCkhLm5hdGl2ZUVsZW1lbnQsICdzY3JvbGwnLCB7IHBhc3NpdmU6IHRydWUgfSlcbiAgICAgICAgICAgIC5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoZSkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudmVydGljYWxTY3JvbGwoZSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGJpbmRHbG9iYWxNb3VzZWRvd24oKSB7XG4gICAgICAgIGZyb21FdmVudDxNb3VzZUV2ZW50Pihkb2N1bWVudCwgJ21vdXNlZG93bicsIHsgcGFzc2l2ZTogdHJ1ZSB9KVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAoZSkgPT5cbiAgICAgICAgICAgICAgICAgICAgICAgIGUudGFyZ2V0IGluc3RhbmNlb2YgRWxlbWVudCAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIXRoaXMuY29udGFpbmVyRWxlbWVudCgpLmNvbnRhaW5zKGUudGFyZ2V0KSAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgIWUudGFyZ2V0LmNsb3Nlc3QoQUlfVEFCTEVfUFJFVkVOVF9DTEVBUl9TRUxFQ1RJT05fQ0xBU1MpXG4gICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICB0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKVxuICAgICAgICAgICAgKVxuICAgICAgICAgICAgLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVEcmFnU2VsZWN0aW9uU3RhdGUoZmFsc2UsIG51bGwpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZURyYWdTZWxlY3Rpb25TdGF0ZShpc0RyYWdTZWxlY3Rpbmc6IGJvb2xlYW4sIGRyYWdTZWxlY3Rpb25TdGFydDogQUlSZWNvcmRGaWVsZElkUGF0aCB8IG51bGwpIHtcbiAgICAgICAgdGhpcy5pc0RyYWdTZWxlY3RpbmcgPSBpc0RyYWdTZWxlY3Rpbmc7XG4gICAgICAgIHRoaXMuZHJhZ1NlbGVjdGlvblN0YXJ0ID0gZHJhZ1NlbGVjdGlvblN0YXJ0O1xuICAgIH1cblxuICAgIHByaXZhdGUgcmVzZXRTY3JvbGxpbmcgPSAoKSA9PiB7XG4gICAgICAgIHRoaXMuYWlUYWJsZS5jb250ZXh0IS5zZXRTY3JvbGxTdGF0ZSh7XG4gICAgICAgICAgICBpc1Njcm9sbGluZzogZmFsc2VcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgaG9yaXpvbnRhbFNjcm9sbCA9IChlOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgeyBzY3JvbGxMZWZ0IH0gPSBlLnRhcmdldDtcbiAgICAgICAgdGhpcy5haVRhYmxlLmNvbnRleHQhLnNldFNjcm9sbFN0YXRlKHtcbiAgICAgICAgICAgIHNjcm9sbExlZnQsXG4gICAgICAgICAgICBpc1Njcm9sbGluZzogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZXNldFNjcm9sbGluZygpO1xuICAgIH07XG5cbiAgICBwcml2YXRlIHZlcnRpY2FsU2Nyb2xsKGU6IGFueSkge1xuICAgICAgICBjb25zdCB7IHNjcm9sbFRvcCB9ID0gZS50YXJnZXQ7XG4gICAgICAgIHRoaXMuYWlUYWJsZS5jb250ZXh0IS5zZXRTY3JvbGxTdGF0ZSh7XG4gICAgICAgICAgICBzY3JvbGxUb3AsXG4gICAgICAgICAgICBpc1Njcm9sbGluZzogdHJ1ZVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZXNldFNjcm9sbGluZygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Q29udGFpbmVyUmVjdCgpIHtcbiAgICAgICAgdGhpcy5jb250YWluZXJSZWN0LnNldCh7XG4gICAgICAgICAgICB3aWR0aDogdGhpcy5jb250YWluZXJFbGVtZW50KCkub2Zmc2V0V2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IHRoaXMuY29udGFpbmVyRWxlbWVudCgpLm9mZnNldEhlaWdodFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGNvbnRhaW5lclJlc2l6ZUxpc3RlbmVyKCkge1xuICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gdGhpcy5jb250YWluZXJFbGVtZW50KCkub2Zmc2V0V2lkdGg7XG4gICAgICAgICAgICBjb25zdCB0b3RhbFdpZHRoID0gdGhpcy5jb29yZGluYXRlKCkudG90YWxXaWR0aCArIEFJX1RBQkxFX0ZJRUxEX0FERF9CVVRUT05fV0lEVEg7XG4gICAgICAgICAgICB0aGlzLnNldENvbnRhaW5lclJlY3QoKTtcbiAgICAgICAgICAgIGlmIChjb250YWluZXJXaWR0aCA+PSB0b3RhbFdpZHRoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5haVRhYmxlLmNvbnRleHQhLnNldFNjcm9sbFN0YXRlKHsgc2Nyb2xsTGVmdDogMCB9KTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy5jb250YWluZXJFbGVtZW50KCkpO1xuICAgIH1cblxuICAgIHByaXZhdGUgdG9nZ2xlSG92ZXJDZWxsRWRpdG9yKCkge1xuICAgICAgICBjb25zdCB7IHJlYWxUYXJnZXROYW1lIH0gPSB0aGlzLmFpVGFibGUuY29udGV4dD8ucG9pbnRQb3NpdGlvbigpITtcbiAgICAgICAgY29uc3QgeyB0YXJnZXROYW1lLCBmaWVsZElkLCByZWNvcmRJZCB9ID0gZ2V0RGV0YWlsQnlUYXJnZXROYW1lKHJlYWxUYXJnZXROYW1lISk7XG4gICAgICAgIGNvbnN0IGVkaXRpbmdDZWxsID0gdGhpcy5haVRhYmxlR3JpZEV2ZW50U2VydmljZS5nZXRDdXJyZW50RWRpdENlbGwoKTtcblxuICAgICAgICBpZiAodGFyZ2V0TmFtZSA9PT0gQUlfVEFCTEVfQ0VMTCAmJiByZWNvcmRJZCAmJiBmaWVsZElkKSB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZCA9IHRoaXMuYWlUYWJsZS5maWVsZHNNYXAoKVtmaWVsZElkXTtcblxuICAgICAgICAgICAgaWYgKCFmaWVsZCkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZmllbGRUeXBlID0gZmllbGQudHlwZTtcbiAgICAgICAgICAgIGNvbnN0IGVkaXRpbmdGaWVsZFR5cGUgPSBlZGl0aW5nQ2VsbCA/IHRoaXMuYWlUYWJsZS5maWVsZHNNYXAoKVtlZGl0aW5nQ2VsbC5maWVsZElkXS50eXBlIDogbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IGlzRWRpdGluZ0ZpZWxkVHlwZUhvdmVyZWQgPSBlZGl0aW5nRmllbGRUeXBlID8gTU9VU0VPVkVSX0VESVRfVFlQRS5pbmNsdWRlcyhlZGl0aW5nRmllbGRUeXBlKSA6IGZhbHNlO1xuICAgICAgICAgICAgY29uc3QgaXNGaWVsZFR5cGVIb3ZlcmVkID0gTU9VU0VPVkVSX0VESVRfVFlQRS5pbmNsdWRlcyhmaWVsZFR5cGUpO1xuXG4gICAgICAgICAgICBpZiAoZWRpdGluZ0NlbGwgJiYgaXNFZGl0aW5nRmllbGRUeXBlSG92ZXJlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRFdmVudFNlcnZpY2UuY2xvc2VDZWxsRWRpdG9yKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghZWRpdGluZ0NlbGwgJiYgIWlzRmllbGRUeXBlSG92ZXJlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRFdmVudFNlcnZpY2UuY2xvc2VDZWxsRWRpdG9yKCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZWRpdGluZ0NlbGwgJiYgKCghaXNFZGl0aW5nRmllbGRUeXBlSG92ZXJlZCAmJiBpc0ZpZWxkVHlwZUhvdmVyZWQpIHx8ICFpc0ZpZWxkVHlwZUhvdmVyZWQpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkRXZlbnRTZXJ2aWNlLm9wZW5DZWxsRWRpdG9yKHRoaXMuYWlUYWJsZSwge1xuICAgICAgICAgICAgICAgICAgICB2aWV3Q29udGFpbmVyUmVmOiB0aGlzLnZpZXdDb250YWluZXJSZWYsXG4gICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcjogdGhpcy5jb250YWluZXJFbGVtZW50KCksXG4gICAgICAgICAgICAgICAgICAgIGNvb3JkaW5hdGU6IHRoaXMuY29vcmRpbmF0ZSgpLFxuICAgICAgICAgICAgICAgICAgICBmaWVsZElkOiBmaWVsZElkISxcbiAgICAgICAgICAgICAgICAgICAgcmVjb3JkSWQ6IHJlY29yZElkISxcbiAgICAgICAgICAgICAgICAgICAgcmVmZXJlbmNlczogdGhpcy5haVJlZmVyZW5jZXMoKSxcbiAgICAgICAgICAgICAgICAgICAgaXNIb3ZlckVkaXQ6IHRydWUsXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUZpZWxkVmFsdWU6ICh2YWx1ZTogVXBkYXRlRmllbGRWYWx1ZU9wdGlvbnM8YW55PikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5haVVwZGF0ZUZpZWxkVmFsdWUuZW1pdCh2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgLy8g6byg5qCH5L2N5LqO6Z2e5Y2V5YWD5qC85Yy65Z+f5pe277yM5aaC5p6c5b2T5YmN5pyJIG1vdXNlb3ZlciDnvJbovpHlhYPntKDvvIzliJnnu5PmnZ/nvJbovpFcbiAgICAgICAgICAgIGlmIChlZGl0aW5nQ2VsbCAmJiBNT1VTRU9WRVJfRURJVF9UWVBFLmluY2x1ZGVzKHRoaXMuYWlUYWJsZS5maWVsZHNNYXAoKVtlZGl0aW5nQ2VsbC5maWVsZElkXS50eXBlKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRFdmVudFNlcnZpY2UuY2xvc2VDZWxsRWRpdG9yKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGJpbmRDbGlwYm9hcmRTaG9ydGN1dHMoKSB7XG4gICAgICAgIGZyb21FdmVudDxLZXlib2FyZEV2ZW50Pihkb2N1bWVudCwgJ2tleWRvd24nKVxuICAgICAgICAgICAgLnBpcGUoXG4gICAgICAgICAgICAgICAgZmlsdGVyKChldmVudCkgPT4gKGV2ZW50LmN0cmxLZXkgfHwgZXZlbnQubWV0YUtleSkgJiYgKGV2ZW50LmtleSA9PT0gJ2MnIHx8IGV2ZW50LmtleSA9PT0gJ3YnKSksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoYXN5bmMgKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaGFzU2VsZWN0ZWRDZWxscyA9IHRoaXMuYWlUYWJsZS5zZWxlY3Rpb24oKS5zZWxlY3RlZENlbGxzLnNpemUgPiAwO1xuICAgICAgICAgICAgICAgIGlmICghaGFzU2VsZWN0ZWRDZWxscykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgaGFzRWRpdGluZ0NlbGwgPSAhIXRoaXMuYWlUYWJsZUdyaWRFdmVudFNlcnZpY2UuZ2V0Q3VycmVudEVkaXRDZWxsKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnYycpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xpcGJvYXJkRGF0YSA9IGJ1aWxkQ2xpcGJvYXJkRGF0YSh0aGlzLmFpVGFibGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2xpcGJvYXJkRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVUb0NsaXBib2FyZChjbGlwYm9hcmREYXRhKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb3BpZWRDZWxsc0NvdW50ID0gdGhpcy5haVRhYmxlLnNlbGVjdGlvbigpLnNlbGVjdGVkQ2VsbHMuc2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gZ2V0STE4blRleHRCeUtleSh0aGlzLmFpVGFibGUsIEFJVGFibGVHcmlkSTE4bktleS5jb3BpZWRDZWxscykucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3tjb3VudH0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3BpZWRDZWxsc0NvdW50LnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5U2VydmljZS5zdWNjZXNzKG1lc3NhZ2UsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b21MZWZ0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3YnICYmICFoYXNFZGl0aW5nQ2VsbCkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbnM6IEFJVGFibGVBY3Rpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlRmllbGRWYWx1ZTogKGRhdGE6IFVwZGF0ZUZpZWxkVmFsdWVPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5haVVwZGF0ZUZpZWxkVmFsdWUuZW1pdChkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRGaWVsZDogKGZpZWxkOiBBSVRhYmxlRmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFpU2V0RmllbGQuZW1pdChmaWVsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWRkRmllbGQ6IChkYXRhOiBBZGRGaWVsZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFpQWRkRmllbGQuZW1pdChkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRSZWNvcmQ6IChkYXRhOiBBZGRSZWNvcmRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRSZWNvcmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICB3cml0ZVRvQUlUYWJsZSh0aGlzLmFpVGFibGUsIGFjdGlvbnMpLnRoZW4oKGlzUGFzdGVTdWNjZXNzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzUGFzdGVTdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlLmVycm9yKGdldEkxOG5UZXh0QnlLZXkodGhpcy5haVRhYmxlLCBBSVRhYmxlR3JpZEkxOG5LZXkuaW52YWxpZFBhc3RlQ29udGVudCksIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b21MZWZ0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUZpZWxkRHJhZ1N0YXJ0KCkge1xuICAgICAgICBpZiAoIXRoaXMuYWlSZWFkb25seSgpICYmIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdGVkRmllbGRzLnNpemUgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZS5kcmFnKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBEcmFnVHlwZS5maWVsZCxcbiAgICAgICAgICAgICAgICBzb3VyY2VJZHM6IHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdGVkRmllbGRzLFxuICAgICAgICAgICAgICAgIHNjcm9sbDogdGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLFxuICAgICAgICAgICAgICAgIGNvb3JkaW5hdGU6IHRoaXMuY29vcmRpbmF0ZSgpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2Nyb2xsUG9zaXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGhvcml6b250YWxCYXIgPSB0aGlzLmhvcml6b250YWxCYXJSZWYoKT8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgdmVydGljYWxCYXIgPSB0aGlzLnZlcnRpY2FsQmFyUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGxldCBzY3JvbGxMZWZ0ID0gaG9yaXpvbnRhbEJhcj8uc2Nyb2xsTGVmdCB8fCAwO1xuICAgICAgICBsZXQgc2Nyb2xsVG9wID0gdmVydGljYWxCYXI/LnNjcm9sbFRvcCB8fCAwO1xuICAgICAgICByZXR1cm4geyB4OiBzY3JvbGxMZWZ0LCB5OiBzY3JvbGxUb3AgfTtcbiAgICB9XG5cbiAgICBkcmFnRW5kKGRhdGE6IERyYWdFbmREYXRhKSB7XG4gICAgICAgIHN3aXRjaCAoZGF0YS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIERyYWdUeXBlLmZpZWxkOlxuICAgICAgICAgICAgICAgIGlmIChkYXRhLmZpZWxkc0luZGV4ICYmIGlzTnVtYmVyKGRhdGEudGFyZ2V0SW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5maWVsZHNJbmRleC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5haU1vdmVGaWVsZC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBbZGF0YS5maWVsZHNJbmRleFtpXV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3UGF0aDogW2RhdGEudGFyZ2V0SW5kZXggKyBpXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERyYWdUeXBlLmNvbHVtbldpZHRoOlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEcmFnVHlwZS5yZWNvcmQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLmNsZWFyRHJhZygpO1xuICAgIH1cbn1cbiIsIjxkaXYgI2NvbnRhaW5lciBjbGFzcz1cImFpLXRhYmxlLWdyaWQtdmlld1wiPlxuICAgIEBpZiAoaGFzQ29udGFpbmVyUmVjdCgpKSB7XG4gICAgICAgIDxhaS10YWJsZS1yZW5kZXJlclxuICAgICAgICAgICAgW2NvbmZpZ109XCJyZW5kZXJlckNvbmZpZygpXCJcbiAgICAgICAgICAgIChrb01vdXNlbW92ZSk9XCJzdGFnZU1vdXNlbW92ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChrb01vdXNlZG93bik9XCJzdGFnZU1vdXNlZG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgIChrb01vdXNldXApPVwic3RhZ2VNb3VzZXVwKCRldmVudClcIlxuICAgICAgICAgICAgKGtvQ29udGV4dG1lbnUpPVwic3RhZ2VDb250ZXh0bWVudSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChrb0NsaWNrKT1cInN0YWdlQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAoa29EYmxjbGljayk9XCJzdGFnZURibGNsaWNrKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2ICNob3Jpem9udGFsQmFyIGNsYXNzPVwiYWktdGFibGUtaG9yaXpvbnRhbC1zY3JvbGwtYmFyLXdyYXBwZXJcIiBbc3R5bGUud2lkdGgucHhdPVwiY29udGFpbmVyUmVjdCgpLndpZHRoXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXRhYmxlLXNjcm9sbC1iYXItaW5uZXJcIiBbc3R5bGUud2lkdGgucHhdPVwic2Nyb2xsYmFyV2lkdGgoKVwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgI3ZlcnRpY2FsQmFyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhaS10YWJsZS12ZXJ0aWNhbC1zY3JvbGwtYmFyLXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiY29udGFpbmVyUmVjdCgpLmhlaWdodCAtIGZpZWxkSGVhZEhlaWdodFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLnRvcC5weF09XCJmaWVsZEhlYWRIZWlnaHRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS10YWJsZS1zY3JvbGwtYmFyLWlubmVyXCIgW3N0eWxlLmhlaWdodC5weF09XCJzY3JvbGxUb3RhbEhlaWdodCgpXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9haS10YWJsZS1yZW5kZXJlcj5cbiAgICB9XG4gICAgPGFpLXRhYmxlLWRyYWcgKGRyYWdFbmQpPVwiZHJhZ0VuZCgkZXZlbnQpXCI+PC9haS10YWJsZS1kcmFnPlxuPC9kaXY+XG4iXX0=
610
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9ncmlkLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uL3BhY2thZ2VzL2dyaWQvc3JjL2dyaWQuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILGVBQWUsRUFDZix1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFFBQVEsRUFDUixNQUFNLEVBRU4sTUFBTSxFQUlOLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNULGdCQUFnQixFQUNuQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUV6QyxPQUFPLEVBQ0gsYUFBYSxFQUNiLHFCQUFxQixFQUNyQix5QkFBeUIsRUFDekIsK0JBQStCLEVBQy9CLG1CQUFtQixFQUNuQiwwQkFBMEIsRUFDMUIsd0JBQXdCLEVBQ3hCLGdDQUFnQyxFQUNoQyxtQ0FBbUMsRUFDbkMsc0NBQXNDLEVBQ3RDLHVCQUF1QixFQUN2Qix1QkFBdUIsRUFDdkIsNEJBQTRCLEVBQzVCLG1CQUFtQixFQUNuQixzQkFBc0IsRUFDdEIsb0JBQW9CLEVBQ3BCLG1CQUFtQixFQUN0QixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBSUgsVUFBVSxFQUNWLGVBQWUsRUFHZixRQUFRLEVBRVIsT0FBTyxFQUNWLE1BQU0sUUFBUSxDQUFDO0FBQ2hCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sK0JBQStCLENBQUM7QUFDaEUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDbkUsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1B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b0JBQ1AsQ0FBQztnQkFDTCxDQUFDO2dCQUNELE1BQU07WUFDVixLQUFLLFFBQVEsQ0FBQyxXQUFXO2dCQUNyQixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO29CQUN4QyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQU0sQ0FBQztvQkFDckQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUM7d0JBQ3RCLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQzt3QkFDZixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7cUJBQ3BCLENBQUMsQ0FBQztnQkFDUCxDQUFDO2dCQUNELE1BQU07WUFDVixLQUFLLFFBQVEsQ0FBQyxNQUFNO2dCQUNoQixPQUFPO1FBQ2YsQ0FBQztRQUNELElBQUksQ0FBQywyQkFBMkIsQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNqRCxDQUFDOytHQW5xQlEsV0FBVzttR0FBWCxXQUFXLHVHQUZULENBQUMsdUJBQXVCLEVBQUUsdUJBQXVCLEVBQUUsMkJBQTJCLENBQUMsNllDakY5Rix3c0NBMEJBLDRDRHNEYyxlQUFlLDZMQUFFLG9CQUFvQjs7NEZBR3RDLFdBQVc7a0JBWHZCLFNBQVM7K0JBQ0ksZUFBZSxjQUViLElBQUksbUJBQ0MsdUJBQXVCLENBQUMsTUFBTSxRQUN6Qzt3QkFDRixLQUFLLEVBQUUsZUFBZTtxQkFDekIsV0FDUSxDQUFDLGVBQWUsRUFBRSxvQkFBb0IsQ0FBQyxhQUNyQyxDQUFDLHVCQUF1QixFQUFFLHVCQUF1QixFQUFFLDJCQUEyQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBhZnRlck5leHRSZW5kZXIsXG4gICAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gICAgQ29tcG9uZW50LFxuICAgIGNvbXB1dGVkLFxuICAgIGVmZmVjdCxcbiAgICBFbGVtZW50UmVmLFxuICAgIGluamVjdCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIFNpZ25hbCxcbiAgICBzaWduYWwsXG4gICAgdW50cmFja2VkLFxuICAgIHZpZXdDaGlsZCxcbiAgICBWaWV3Q29udGFpbmVyUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgdGFrZVVudGlsRGVzdHJveWVkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZS9yeGpzLWludGVyb3AnO1xuaW1wb3J0IHsgZmlsdGVyLCBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEtvRXZlbnRPYmplY3QgfSBmcm9tICcuL2FuZ3VsYXIta29udmEnO1xuaW1wb3J0IHtcbiAgICBBSV9UQUJMRV9DRUxMLFxuICAgIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICBBSV9UQUJMRV9GSUVMRF9BRERfQlVUVE9OLFxuICAgIEFJX1RBQkxFX0ZJRUxEX0FERF9CVVRUT05fV0lEVEgsXG4gICAgQUlfVEFCTEVfRklFTERfSEVBRCxcbiAgICBBSV9UQUJMRV9GSUVMRF9IRUFEX0hFSUdIVCxcbiAgICBBSV9UQUJMRV9GSUVMRF9IRUFEX01PUkUsXG4gICAgQUlfVEFCTEVfRklFTERfSEVBRF9PUEFDSVRZX0xJTkUsXG4gICAgQUlfVEFCTEVfRklFTERfSEVBRF9TRUxFQ1RfQ0hFQ0tCT1gsXG4gICAgQUlfVEFCTEVfUFJFVkVOVF9DTEVBUl9TRUxFQ1RJT05fQ0xBU1MsXG4gICAgQUlfVEFCTEVfUk9XX0FERF9CVVRUT04sXG4gICAgQUlfVEFCTEVfUk9XX0hFQURfV0lEVEgsXG4gICAgQUlfVEFCTEVfUk9XX1NFTEVDVF9DSEVDS0JPWCxcbiAgICBEQkxfQ0xJQ0tfRURJVF9UWVBFLFxuICAgIERFRkFVTFRfUE9JTlRfUE9TSVRJT04sXG4gICAgREVGQVVMVF9TQ1JPTExfU1RBVEUsXG4gICAgTU9VU0VPVkVSX0VESVRfVFlQRVxufSBmcm9tICcuL2NvbnN0YW50cyc7XG5pbXBvcnQge1xuICAgIEFkZEZpZWxkT3B0aW9ucyxcbiAgICBBZGRSZWNvcmRPcHRpb25zLFxuICAgIEFJVGFibGVGaWVsZCxcbiAgICBDb29yZGluYXRlLFxuICAgIFJlbmRlcmVyQ29udGV4dCxcbiAgICBVcGRhdGVGaWVsZFZhbHVlT3B0aW9ucyxcbiAgICBEcmFnRW5kRGF0YSxcbiAgICBEcmFnVHlwZSxcbiAgICBBSVJlY29yZEZpZWxkSWRQYXRoLFxuICAgIEFJVGFibGVcbn0gZnJvbSAnLi9jb3JlJztcbmltcG9ydCB7IEFJVGFibGVHcmlkQmFzZSB9IGZyb20gJy4vZ3JpZC1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBSVRhYmxlUmVuZGVyZXIgfSBmcm9tICcuL3JlbmRlcmVyL3JlbmRlcmVyLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBSVRhYmxlR3JpZEV2ZW50U2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZXZlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBBSVRhYmxlR3JpZEZpZWxkU2VydmljZSB9IGZyb20gJy4vc2VydmljZXMvZmllbGQuc2VydmljZSc7XG5pbXBvcnQgeyBBSVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2UgfSBmcm9tICcuL3NlcnZpY2VzL3NlbGVjdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IEFJVGFibGVDb250ZXh0TWVudUl0ZW0sIEFJVGFibGVNb3VzZURvd25UeXBlLCBBSVRhYmxlUmVuZGVyZXJDb25maWcsIEFJVGFibGVTZWxlY3RBbGxTdGF0ZSwgU2Nyb2xsQWN0aW9uT3B0aW9ucyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHtcbiAgICBBSVRhYmxlR3JpZEkxOG5LZXksXG4gICAgYnVpbGRHcmlkTGluZWFyUm93cyxcbiAgICBnZXRDb2x1bW5JbmRpY2VzU2l6ZU1hcCxcbiAgICBnZXREZXRhaWxCeVRhcmdldE5hbWUsXG4gICAgZ2V0STE4blRleHRCeUtleSxcbiAgICBoYW5kbGVNb3VzZVN0eWxlLFxuICAgIGlzQ2VsbE1hdGNoS2V5d29yZHMsXG4gICAgaXNXaW5kb3dzXG59IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgZ2V0TW91c2VQb3NpdGlvbiB9IGZyb20gJy4vdXRpbHMvcG9zaXRpb24nO1xuaW1wb3J0IHsgQUlUYWJsZURyYWdDb21wb25lbnQgfSBmcm9tICcuL2NvbXBvbmVudHMvZHJhZy9kcmFnLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBidWlsZENsaXBib2FyZERhdGEsIHdyaXRlVG9DbGlwYm9hcmQsIHdyaXRlVG9BSVRhYmxlLCBBSVRhYmxlQWN0aW9ucyB9IGZyb20gJy4vdXRpbHMvY2xpcGJvYXJkJztcbmltcG9ydCB7IFRoeU5vdGlmeVNlcnZpY2UgfSBmcm9tICduZ3gtdGV0aHlzL25vdGlmeSc7XG5pbXBvcnQgeyBpc051bWJlciB9IGZyb20gJ2xvZGFzaCc7XG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnYWktdGFibGUtZ3JpZCcsXG4gICAgdGVtcGxhdGVVcmw6ICcuL2dyaWQuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gICAgaG9zdDoge1xuICAgICAgICBjbGFzczogJ2FpLXRhYmxlLWdyaWQnXG4gICAgfSxcbiAgICBpbXBvcnRzOiBbQUlUYWJsZVJlbmRlcmVyLCBBSVRhYmxlRHJhZ0NvbXBvbmVudF0sXG4gICAgcHJvdmlkZXJzOiBbQUlUYWJsZUdyaWRFdmVudFNlcnZpY2UsIEFJVGFibGVHcmlkRmllbGRTZXJ2aWNlLCBBSVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2VdXG59KVxuZXhwb3J0IGNsYXNzIEFJVGFibGVHcmlkIGV4dGVuZHMgQUlUYWJsZUdyaWRCYXNlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgdmlld0NvbnRhaW5lclJlZiA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcblxuICAgIHByaXZhdGUgaXNEcmFnU2VsZWN0aW5nID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIGRyYWdTZWxlY3Rpb25TdGFydDogQUlSZWNvcmRGaWVsZElkUGF0aCB8IG51bGwgPSBudWxsO1xuXG4gICAgcHJpdmF0ZSBub3RpZnlTZXJ2aWNlID0gaW5qZWN0KFRoeU5vdGlmeVNlcnZpY2UpO1xuXG4gICAgdGltZXIhOiBudW1iZXIgfCBudWxsO1xuXG4gICAgcmVzaXplT2JzZXJ2ZXIhOiBSZXNpemVPYnNlcnZlcjtcblxuICAgIGZpZWxkSGVhZEhlaWdodCA9IEFJX1RBQkxFX0ZJRUxEX0hFQURfSEVJR0hUO1xuXG4gICAgY29udGFpbmVyUmVjdCA9IHNpZ25hbCh7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfSk7XG5cbiAgICBmcm96ZW5Db2x1bW5Db3VudCA9IHNpZ25hbCgxKTtcblxuICAgIGhhc0NvbnRhaW5lclJlY3QgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvbnRhaW5lclJlY3QoKS53aWR0aCA+IDAgJiYgdGhpcy5jb250YWluZXJSZWN0KCkuaGVpZ2h0ID4gMDtcbiAgICB9KTtcblxuICAgIGNvbnRhaW5lciA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPignY29udGFpbmVyJyk7XG5cbiAgICB2ZXJ0aWNhbEJhclJlZiA9IHZpZXdDaGlsZDxFbGVtZW50UmVmPigndmVydGljYWxCYXInKTtcblxuICAgIGhvcml6b250YWxCYXJSZWYgPSB2aWV3Q2hpbGQ8RWxlbWVudFJlZj4oJ2hvcml6b250YWxCYXInKTtcblxuICAgIGxpbmVhclJvd3MgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIHJldHVybiBidWlsZEdyaWRMaW5lYXJSb3dzKHRoaXMuZ3JpZERhdGEoKS5yZWNvcmRzLCAhdGhpcy5haVJlYWRvbmx5KCkpO1xuICAgIH0pO1xuXG4gICAgdmlzaWJsZUNvbHVtbnNJbmRleE1hcCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IEFJVGFibGUuZ2V0VmlzaWJsZUZpZWxkcyh0aGlzLmFpVGFibGUpO1xuICAgICAgICByZXR1cm4gbmV3IE1hcChjb2x1bW5zPy5tYXAoKGl0ZW0sIGluZGV4KSA9PiBbaXRlbS5faWQsIGluZGV4XSkpO1xuICAgIH0pO1xuXG4gICAgdmlzaWJsZVJvd3NJbmRleE1hcCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIG5ldyBNYXAodGhpcy5saW5lYXJSb3dzKCkubWFwKChyb3csIGluZGV4KSA9PiBbcm93Ll9pZCwgaW5kZXhdKSk7XG4gICAgfSk7XG5cbiAgICBjb250YWluZXJFbGVtZW50ID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXIoKSEubmF0aXZlRWxlbWVudDtcbiAgICB9KTtcblxuICAgIHJlbmRlcmVyQ29uZmlnOiBTaWduYWw8QUlUYWJsZVJlbmRlcmVyQ29uZmlnPiA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgZmllbGRzID0gQUlUYWJsZS5nZXRWaXNpYmxlRmllbGRzKHRoaXMuYWlUYWJsZSk7XG4gICAgICAgIGNvbnN0IGNvb3JkaW5hdGUgPSBuZXcgQ29vcmRpbmF0ZSh7XG4gICAgICAgICAgICBjb250YWluZXI6IHRoaXMuY29udGFpbmVyRWxlbWVudCgpLFxuICAgICAgICAgICAgcm93SGVpZ2h0OiBBSV9UQUJMRV9GSUVMRF9IRUFEX0hFSUdIVCxcbiAgICAgICAgICAgIHJvd0NvdW50OiB0aGlzLmxpbmVhclJvd3MoKS5sZW5ndGgsXG4gICAgICAgICAgICBjb2x1bW5Db3VudDogZmllbGRzLmxlbmd0aCxcbiAgICAgICAgICAgIHJvd0luaXRTaXplOiBBSV9UQUJMRV9GSUVMRF9IRUFEX0hFSUdIVCxcbiAgICAgICAgICAgIGNvbHVtbkluaXRTaXplOiBBSV9UQUJMRV9ST1dfSEVBRF9XSURUSCxcbiAgICAgICAgICAgIHJvd0luZGljZXNTaXplTWFwOiB7fSxcbiAgICAgICAgICAgIGNvbHVtbkluZGljZXNTaXplTWFwOiBnZXRDb2x1bW5JbmRpY2VzU2l6ZU1hcCh0aGlzLmFpVGFibGUsIGZpZWxkcyksXG4gICAgICAgICAgICBmcm96ZW5Db2x1bW5Db3VudDogdGhpcy5mcm96ZW5Db2x1bW5Db3VudCgpXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgYWlUYWJsZTogdGhpcy5haVRhYmxlLFxuICAgICAgICAgICAgZ3JpZERhdGE6IHRoaXMuZ3JpZERhdGEoKSxcbiAgICAgICAgICAgIGNvbnRhaW5lcjogdGhpcy5jb250YWluZXJFbGVtZW50KCksXG4gICAgICAgICAgICBjb29yZGluYXRlOiBjb29yZGluYXRlLFxuICAgICAgICAgICAgY29udGFpbmVyV2lkdGg6IHRoaXMuY29udGFpbmVyUmVjdCgpLndpZHRoLFxuICAgICAgICAgICAgY29udGFpbmVySGVpZ2h0OiB0aGlzLmNvbnRhaW5lclJlY3QoKS5oZWlnaHQsXG4gICAgICAgICAgICByZWZlcmVuY2VzOiB0aGlzLmFpUmVmZXJlbmNlcygpLFxuICAgICAgICAgICAgcmVhZG9ubHk6IHRoaXMuYWlSZWFkb25seSgpXG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBjb29yZGluYXRlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJlckNvbmZpZygpLmNvb3JkaW5hdGU7XG4gICAgfSk7XG5cbiAgICBzY3JvbGxUb3RhbEhlaWdodCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIE1hdGgubWF4KHRoaXMuY29vcmRpbmF0ZSgpLnRvdGFsSGVpZ2h0LCB0aGlzLmNvbnRhaW5lclJlY3QoKS5oZWlnaHQgLSB0aGlzLmZpZWxkSGVhZEhlaWdodCk7XG4gICAgfSk7XG5cbiAgICBzY3JvbGxiYXJXaWR0aCA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY29vcmRpbmF0ZSgpLnRvdGFsV2lkdGggKyBBSV9UQUJMRV9GSUVMRF9BRERfQlVUVE9OX1dJRFRIO1xuICAgIH0pO1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnNldENvbnRhaW5lclJlY3QoKTtcbiAgICAgICAgICAgIHRoaXMuYmluZEdsb2JhbE1vdXNlZG93bigpO1xuICAgICAgICAgICAgdGhpcy5jb250YWluZXJSZXNpemVMaXN0ZW5lcigpO1xuICAgICAgICAgICAgdGhpcy5iaW5kV2hlZWwoKTtcbiAgICAgICAgICAgIHRoaXMuYmluZENsaXBib2FyZFNob3J0Y3V0cygpO1xuICAgICAgICB9KTtcbiAgICAgICAgZWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLmhhc0NvbnRhaW5lclJlY3QoKSAmJiB0aGlzLmhvcml6b250YWxCYXJSZWYoKSAmJiB0aGlzLnZlcnRpY2FsQmFyUmVmKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmJpbmRTY3JvbGxCYXJTY3JvbGwoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuYWlSZWFkb25seSgpICYmIHRoaXMuYWlUYWJsZS5jb250ZXh0Py5wb2ludFBvc2l0aW9uKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUhvdmVyQ2VsbEVkaXRvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgZWZmZWN0KFxuICAgICAgICAgICAgKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0S2V5d29yZHNNYXRjaGVkQ2VsbHMoKTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICAgICAgKTtcblxuICAgICAgICBlZmZlY3QoXG4gICAgICAgICAgICAoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgcmVjb3JkSWRTZXQgPSBuZXcgU2V0PHN0cmluZz4odGhpcy5haVRhYmxlLnJlY29yZHMoKS5tYXAoKGl0ZW0pID0+IGl0ZW0uX2lkKSk7XG4gICAgICAgICAgICAgICAgdW50cmFja2VkKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2VsZWN0ZWRSZWNvcmRzID0gdGhpcy5haVRhYmxlLnNlbGVjdGlvbigpLnNlbGVjdGVkUmVjb3JkcztcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBzZWxlY3RlZFJlY29yZElkIG9mIHNlbGVjdGVkUmVjb3Jkcy52YWx1ZXMoKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFyZWNvcmRJZFNldC5oYXMoc2VsZWN0ZWRSZWNvcmRJZCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3RlZFJlY29yZHMuZGVsZXRlKHNlbGVjdGVkUmVjb3JkSWQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZS5zZWxlY3Rpb24udXBkYXRlKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLml0ZW0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ZWRSZWNvcmRzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdEFsbFN0YXRlOiB0aGlzLmFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZS5zZWxlY3RBbGxTdGF0ZSgpXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7IGFsbG93U2lnbmFsV3JpdGVzOiB0cnVlIH1cbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc3VwZXIubmdPbkluaXQoKTtcbiAgICAgICAgdGhpcy5pbml0Q29udGV4dCgpO1xuICAgIH1cblxuICAgIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0Q29udGV4dCgpIHtcbiAgICAgICAgdGhpcy5haVRhYmxlLmNvbnRleHQgPSBuZXcgUmVuZGVyZXJDb250ZXh0KHtcbiAgICAgICAgICAgIGxpbmVhclJvd3M6IHRoaXMubGluZWFyUm93cyxcbiAgICAgICAgICAgIHZpc2libGVDb2x1bW5zSW5kZXhNYXA6IHRoaXMudmlzaWJsZUNvbHVtbnNJbmRleE1hcCxcbiAgICAgICAgICAgIHZpc2libGVSb3dzSW5kZXhNYXA6IHRoaXMudmlzaWJsZVJvd3NJbmRleE1hcCxcbiAgICAgICAgICAgIHBvaW50UG9zaXRpb246IHNpZ25hbChERUZBVUxUX1BPSU5UX1BPU0lUSU9OKSxcbiAgICAgICAgICAgIHNjcm9sbFN0YXRlOiBzaWduYWwoREVGQVVMVF9TQ1JPTExfU1RBVEUpLFxuICAgICAgICAgICAgZnJvemVuQ29sdW1uQ291bnQ6IHRoaXMuZnJvemVuQ29sdW1uQ291bnQsXG4gICAgICAgICAgICByZWZlcmVuY2VzOiB0aGlzLmFpUmVmZXJlbmNlcyxcbiAgICAgICAgICAgIGFpRmllbGRDb25maWc6IHRoaXMuYWlGaWVsZENvbmZpZyxcbiAgICAgICAgICAgIHNjcm9sbEFjdGlvbjogdGhpcy5zY3JvbGxBY3Rpb25cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzZXRLZXl3b3Jkc01hdGNoZWRDZWxscygpIHtcbiAgICAgICAgY29uc3Qga2V5d29yZHMgPSB0aGlzLmFpS2V5d29yZHMoKTtcbiAgICAgICAgbGV0IG1hdGNoZWRDZWxscyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuXG4gICAgICAgIGlmIChrZXl3b3Jkcykge1xuICAgICAgICAgICAgY29uc3QgcmVmZXJlbmNlcyA9IHRoaXMuYWlSZWZlcmVuY2VzKCk7XG4gICAgICAgICAgICB0aGlzLmFpVGFibGUucmVjb3JkcygpLmZvckVhY2goKHJlY29yZCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZS5maWVsZHMoKS5mb3JFYWNoKChmaWVsZCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAoaXNDZWxsTWF0Y2hLZXl3b3Jkcyh0aGlzLmFpVGFibGUsIGZpZWxkLCByZWNvcmQuX2lkLCBrZXl3b3JkcywgcmVmZXJlbmNlcykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoZWRDZWxscy5hZGQoYCR7cmVjb3JkLl9pZH06JHtmaWVsZC5faWR9YCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5haVRhYmxlLmtleXdvcmRzTWF0Y2hlZENlbGxzLnNldChtYXRjaGVkQ2VsbHMpO1xuICAgIH1cblxuICAgIHN0YWdlTW91c2Vtb3ZlKGU6IEtvRXZlbnRPYmplY3Q8TW91c2VFdmVudD4pIHtcbiAgICAgICAgaWYgKHRoaXMudGltZXIpIHtcbiAgICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMudGltZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGltZXIgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgdGFyZ2V0TmFtZSA9IGUuZXZlbnQudGFyZ2V0Lm5hbWUoKTtcbiAgICAgICAgICAgIGNvbnN0IGdyaWRTdGFnZSA9IGUuZXZlbnQuY3VycmVudFRhcmdldC5nZXRTdGFnZSgpO1xuICAgICAgICAgICAgY29uc3QgcG9zID0gZ3JpZFN0YWdlPy5nZXRQb2ludGVyUG9zaXRpb24oKTtcbiAgICAgICAgICAgIGlmIChwb3MgPT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgeyBjb250ZXh0IH0gPSB0aGlzLmFpVGFibGU7XG4gICAgICAgICAgICBjb25zdCB7IHgsIHkgfSA9IHBvcztcbiAgICAgICAgICAgIGNvbnN0IGN1ck1vdXNlUG9zaXRpb24gPSBnZXRNb3VzZVBvc2l0aW9uKFxuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZSxcbiAgICAgICAgICAgICAgICB4LFxuICAgICAgICAgICAgICAgIHksXG4gICAgICAgICAgICAgICAgdGhpcy5jb29yZGluYXRlKCksXG4gICAgICAgICAgICAgICAgQUlUYWJsZS5nZXRWaXNpYmxlRmllbGRzKHRoaXMuYWlUYWJsZSksXG4gICAgICAgICAgICAgICAgY29udGV4dCEsXG4gICAgICAgICAgICAgICAgdGFyZ2V0TmFtZVxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGhhbmRsZU1vdXNlU3R5bGUoY3VyTW91c2VQb3NpdGlvbi5yZWFsVGFyZ2V0TmFtZSwgY3VyTW91c2VQb3NpdGlvbi5hcmVhVHlwZSwgdGhpcy5jb250YWluZXJFbGVtZW50KCkpO1xuICAgICAgICAgICAgY29udGV4dCEuc2V0UG9pbnRQb3NpdGlvbihjdXJNb3VzZVBvc2l0aW9uKTtcbiAgICAgICAgICAgIHRoaXMudGltZXIgPSBudWxsO1xuICAgICAgICAgICAgaWYgKHRoaXMuaXNEcmFnU2VsZWN0aW5nKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgeyBmaWVsZElkLCByZWNvcmRJZCB9ID0gZ2V0RGV0YWlsQnlUYXJnZXROYW1lKGN1ck1vdXNlUG9zaXRpb24ucmVhbFRhcmdldE5hbWUpO1xuICAgICAgICAgICAgICAgIGlmIChmaWVsZElkICYmIHJlY29yZElkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YXJ0Q2VsbCA9IHRoaXMuZHJhZ1NlbGVjdGlvblN0YXJ0O1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBlbmRDZWxsOiBBSVJlY29yZEZpZWxkSWRQYXRoID0gW3JlY29yZElkLCBmaWVsZElkXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHN0YXJ0Q2VsbCAmJiAhIXN0YXJ0Q2VsbC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdENlbGxzKHN0YXJ0Q2VsbCwgZW5kQ2VsbCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCB7IHRhcmdldE5hbWU6IF90YXJnZXROYW1lLCBmaWVsZElkIH0gPSBnZXREZXRhaWxCeVRhcmdldE5hbWUodGFyZ2V0TmFtZSk7XG4gICAgICAgICAgICBpZiAoX3RhcmdldE5hbWUgPT09IEFJX1RBQkxFX0ZJRUxEX0hFQURfT1BBQ0lUWV9MSU5FICYmIGZpZWxkSWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZS5kcmFnKHtcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogRHJhZ1R5cGUuY29sdW1uV2lkdGgsXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZUlkczogbmV3IFNldChbZmllbGRJZF0pLFxuICAgICAgICAgICAgICAgICAgICBzY3JvbGw6IHRoaXMuZ2V0U2Nyb2xsUG9zaXRpb24oKSxcbiAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZTogdGhpcy5jb29yZGluYXRlKClcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5haVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2UuZ2V0RHJhZ1N0YXRlVHlwZSgpID09PSBEcmFnVHlwZS5jb2x1bW5XaWR0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLmNsZWFyRHJhZygpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzdGFnZU1vdXNlZG93bihlOiBLb0V2ZW50T2JqZWN0PE1vdXNlRXZlbnQ+KSB7XG4gICAgICAgIGNvbnN0IG1vdXNlRXZlbnQgPSBlLmV2ZW50LmV2dDtcbiAgICAgICAgY29uc3QgX3RhcmdldE5hbWUgPSBlLmV2ZW50LnRhcmdldC5uYW1lKCk7XG5cbiAgICAgICAgY29uc3QgeyB0YXJnZXROYW1lLCBmaWVsZElkLCByZWNvcmRJZCB9ID0gZ2V0RGV0YWlsQnlUYXJnZXROYW1lKF90YXJnZXROYW1lKTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgbW91c2VFdmVudC5idXR0b24gPT09IEFJVGFibGVNb3VzZURvd25UeXBlLlJpZ2h0ICYmXG4gICAgICAgICAgICByZWNvcmRJZCAmJlxuICAgICAgICAgICAgZmllbGRJZCAmJlxuICAgICAgICAgICAgKHRoaXMuYWlUYWJsZS5zZWxlY3Rpb24oKS5zZWxlY3RlZFJlY29yZHMuaGFzKHJlY29yZElkKSB8fCB0aGlzLmFpVGFibGUuc2VsZWN0aW9uKCkuc2VsZWN0ZWRDZWxscy5oYXMoYCR7cmVjb3JkSWR9OiR7ZmllbGRJZH1gKSlcbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBzd2l0Y2ggKHRhcmdldE5hbWUpIHtcbiAgICAgICAgICAgIGNhc2UgQUlfVEFCTEVfRklFTERfSEVBRDpcbiAgICAgICAgICAgICAgICBtb3VzZUV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgaWYgKCFmaWVsZElkKSByZXR1cm47XG4gICAgICAgICAgICAgICAgdGhpcy5haVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2Uuc2VsZWN0RmllbGQoZmllbGRJZCk7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVGaWVsZERyYWdTdGFydCgpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGNhc2UgQUlfVEFCTEVfQ0VMTDpcbiAgICAgICAgICAgICAgICBpZiAoIXJlY29yZElkIHx8ICFmaWVsZElkKSByZXR1cm47XG4gICAgICAgICAgICAgICAgY29uc3QgZHJhZ1NlbGVjdGlvblN0YXJ0OiBBSVJlY29yZEZpZWxkSWRQYXRoID0gW3JlY29yZElkLCBmaWVsZElkXTtcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZURyYWdTZWxlY3Rpb25TdGF0ZSh0cnVlLCBkcmFnU2VsZWN0aW9uU3RhcnQpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdENlbGxzKGRyYWdTZWxlY3Rpb25TdGFydCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY2FzZSBBSV9UQUJMRV9ST1dfQUREX0JVVFRPTjpcbiAgICAgICAgICAgIGNhc2UgQUlfVEFCTEVfRklFTERfQUREX0JVVFRPTjpcbiAgICAgICAgICAgIGNhc2UgQUlfVEFCTEVfUk9XX1NFTEVDVF9DSEVDS0JPWDpcbiAgICAgICAgICAgIGNhc2UgQUlfVEFCTEVfRklFTERfSEVBRF9TRUxFQ1RfQ0hFQ0tCT1g6XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZS5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc3RhZ2VNb3VzZXVwKGU6IEtvRXZlbnRPYmplY3Q8TW91c2VFdmVudD4pIHtcbiAgICAgICAgdGhpcy51cGRhdGVEcmFnU2VsZWN0aW9uU3RhdGUoZmFsc2UsIG51bGwpO1xuICAgIH1cblxuICAgIHN0YWdlQ29udGV4dG1lbnUoZTogS29FdmVudE9iamVjdDxNb3VzZUV2ZW50Pikge1xuICAgICAgICBjb25zdCBtb3VzZUV2ZW50ID0gZS5ldmVudC5ldnQ7XG4gICAgICAgIG1vdXNlRXZlbnQucHJldmVudERlZmF1bHQoKTtcblxuICAgICAgICBpZiAodGhpcy5haVJlYWRvbmx5KCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHRhcmdldE5hbWUgPSBlLmV2ZW50LnRhcmdldC5uYW1lKCk7XG4gICAgICAgIGNvbnN0IHsgZmllbGRJZCwgcmVjb3JkSWQgfSA9IGdldERldGFpbEJ5VGFyZ2V0TmFtZSh0YXJnZXROYW1lKTtcbiAgICAgICAgaWYgKCFyZWNvcmRJZCB8fCAhZmllbGRJZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSB7XG4gICAgICAgICAgICB4OiBtb3VzZUV2ZW50LngsXG4gICAgICAgICAgICB5OiBtb3VzZUV2ZW50LnlcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBtZW51SXRlbXM6IEFJVGFibGVDb250ZXh0TWVudUl0ZW1bXSA9IFtdO1xuICAgICAgICBpZiAodGhpcy5haUNvbnRleHRNZW51SXRlbXMoKSkge1xuICAgICAgICAgICAgbWVudUl0ZW1zLnB1c2goLi4udGhpcy5haUNvbnRleHRNZW51SXRlbXMoKSEodGhpcy5haVRhYmxlKSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFtZW51SXRlbXMubGVuZ3RoIHx8IG1lbnVJdGVtcy5ldmVyeSgoaXRlbSkgPT4gISEoaXRlbS5oaWRkZW4gJiYgaXRlbS5oaWRkZW4odGhpcy5haVRhYmxlLCB0YXJnZXROYW1lLCBwb3NpdGlvbikpKSkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5haVRhYmxlR3JpZEV2ZW50U2VydmljZS5vcGVuQ29udGV4dE1lbnUodGhpcy5haVRhYmxlLCB7XG4gICAgICAgICAgICBvcmlnaW46IHRoaXMuY29udGFpbmVyRWxlbWVudCgpLFxuICAgICAgICAgICAgbWVudUl0ZW1zLFxuICAgICAgICAgICAgcG9zaXRpb24sXG4gICAgICAgICAgICB0YXJnZXROYW1lLFxuICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZjogdGhpcy52aWV3Q29udGFpbmVyUmVmXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHN0YWdlQ2xpY2soZTogS29FdmVudE9iamVjdDxNb3VzZUV2ZW50Pikge1xuICAgICAgICBjb25zdCBtb3VzZUV2ZW50ID0gZS5ldmVudC5ldnQ7XG4gICAgICAgIG1vdXNlRXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy5haVRhYmxlR3JpZEV2ZW50U2VydmljZS5jbG9zZUNlbGxFZGl0b3IoKTtcbiAgICAgICAgY29uc3QgeyBjb250ZXh0IH0gPSB0aGlzLmFpVGFibGU7XG4gICAgICAgIGNvbnN0IHsgdGFyZ2V0TmFtZSwgcm93SW5kZXg6IHBvaW50Um93SW5kZXggfSA9IGNvbnRleHQhLnBvaW50UG9zaXRpb24oKTtcbiAgICAgICAgaWYgKG1vdXNlRXZlbnQuYnV0dG9uICE9PSBBSVRhYmxlTW91c2VEb3duVHlwZS5MZWZ0IHx8ICh0YXJnZXROYW1lICE9PSBBSV9UQUJMRV9GSUVMRF9IRUFEX01PUkUgJiYgdGhpcy5haVJlYWRvbmx5KCkpKSByZXR1cm47XG4gICAgICAgIHN3aXRjaCAodGFyZ2V0TmFtZSkge1xuICAgICAgICAgICAgY2FzZSBBSV9UQUJMRV9ST1dfQUREX0JVVFRPTjoge1xuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgICAgICAgICAgdGhpcy5hZGRSZWNvcmQoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQUlfVEFCTEVfUk9XX1NFTEVDVF9DSEVDS0JPWDoge1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvaW50UmVjb3JkSWQgPSBjb250ZXh0IS5saW5lYXJSb3dzKClbcG9pbnRSb3dJbmRleF0/Ll9pZDtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdFJlY29yZChwb2ludFJlY29yZElkKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhc2UgQUlfVEFCTEVfRklFTERfSEVBRF9TRUxFQ1RfQ0hFQ0tCT1g6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc0NoZWNrZWQgPSB0aGlzLmFpVGFibGUuc2VsZWN0aW9uKCkuc2VsZWN0QWxsU3RhdGUgPT09IEFJVGFibGVTZWxlY3RBbGxTdGF0ZS5hbGw7XG4gICAgICAgICAgICAgICAgdGhpcy50b2dnbGVTZWxlY3RBbGwoIWlzQ2hlY2tlZCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIEFJX1RBQkxFX0ZJRUxEX0FERF9CVVRUT046IHtcbiAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZS5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkR3JvdXBSZWN0ID0gZS5ldmVudC50YXJnZXQuZ2V0UGFyZW50KCk/LmdldENsaWVudFJlY3QoKSE7XG4gICAgICAgICAgICAgICAgY29uc3QgY29udGFpbmVyUmVjdCA9IHRoaXMuY29udGFpbmVyRWxlbWVudCgpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYWRkRmllbGQodGhpcy5jb250YWluZXJFbGVtZW50KCksIHtcbiAgICAgICAgICAgICAgICAgICAgeDogZmllbGRHcm91cFJlY3QueCArIGNvbnRhaW5lclJlY3QueCxcbiAgICAgICAgICAgICAgICAgICAgeTogY29udGFpbmVyUmVjdC55ICsgZmllbGRHcm91cFJlY3QueSArIGZpZWxkR3JvdXBSZWN0LmhlaWdodFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2FzZSBBSV9UQUJMRV9GSUVMRF9IRUFEX01PUkU6XG4gICAgICAgICAgICAgICAgbW91c2VFdmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IF90YXJnZXROYW1lID0gZS5ldmVudC50YXJnZXQubmFtZSgpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgZmllbGRJZCB9ID0gZ2V0RGV0YWlsQnlUYXJnZXROYW1lKF90YXJnZXROYW1lKTtcbiAgICAgICAgICAgICAgICBpZiAoZmllbGRJZCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBtb3JlUmVjdCA9IGUuZXZlbnQudGFyZ2V0LmdldENsaWVudFJlY3QoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmllbGRHcm91cFJlY3QgPSBlLmV2ZW50LnRhcmdldC5nZXRQYXJlbnQoKT8uZ2V0UGFyZW50KCk/LmdldENsaWVudFJlY3QoKSE7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSB0aGlzLmNvbnRhaW5lckVsZW1lbnQoKS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHg6IGNvbnRhaW5lclJlY3QueCArIG1vcmVSZWN0LngsXG4gICAgICAgICAgICAgICAgICAgICAgICB5OiBjb250YWluZXJSZWN0LnkgKyBtb3JlUmVjdC55ICsgbW9yZVJlY3QuaGVpZ2h0XG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGVkaXRGaWVsZFBvc2l0aW9uID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgeDogY29udGFpbmVyUmVjdC54ICsgZmllbGRHcm91cFJlY3QueCAtIEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHk6IGNvbnRhaW5lclJlY3QueSArIGZpZWxkR3JvdXBSZWN0LnkgKyBmaWVsZEdyb3VwUmVjdC5oZWlnaHRcbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICBjb25zdCBlZGl0T3JpZ2luID0gdGhpcy5jb250YWluZXJFbGVtZW50KCkucXVlcnlTZWxlY3RvcignLmtvbnZhanMtY29udGVudCcpIGFzIEhUTUxFbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkRmllbGRTZXJ2aWNlLm9wZW5GaWVsZE1lbnUodGhpcy5haVRhYmxlLCB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmaWVsZElkOiBmaWVsZElkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRNZW51czogdGhpcy5maWVsZE1lbnVzKCksXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW46IHRoaXMuY29udGFpbmVyRWxlbWVudCgpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcG9zaXRpb24sXG4gICAgICAgICAgICAgICAgICAgICAgICBlZGl0T3JpZ2luOiBlZGl0T3JpZ2luLFxuICAgICAgICAgICAgICAgICAgICAgICAgZWRpdEZpZWxkUG9zaXRpb25cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhcmdldE5hbWVEZXRhaWwgPSBnZXREZXRhaWxCeVRhcmdldE5hbWUoZS5ldmVudC50YXJnZXQubmFtZSgpKTtcblxuICAgICAgICB0aGlzLmFpQ2xpY2suZW1pdCh7XG4gICAgICAgICAgICAuLi5lLFxuICAgICAgICAgICAgdGFyZ2V0TmFtZURldGFpbFxuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHN0YWdlRGJsY2xpY2soZTogS29FdmVudE9iamVjdDxNb3VzZUV2ZW50Pikge1xuICAgICAgICBjb25zdCBfdGFyZ2V0TmFtZSA9IGUuZXZlbnQudGFyZ2V0Lm5hbWUoKTtcbiAgICAgICAgY29uc3QgdGFyZ2V0TmFtZURldGFpbCA9IGdldERldGFpbEJ5VGFyZ2V0TmFtZShfdGFyZ2V0TmFtZSk7XG4gICAgICAgIGlmICh0aGlzLmFpUmVhZG9ubHkoKSkge1xuICAgICAgICAgICAgdGhpcy5haURiQ2xpY2suZW1pdCh7XG4gICAgICAgICAgICAgICAgLi4uZSxcbiAgICAgICAgICAgICAgICB0YXJnZXROYW1lRGV0YWlsXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCB7IGZpZWxkSWQsIHJlY29yZElkIH0gPSB0YXJnZXROYW1lRGV0YWlsO1xuICAgICAgICBpZiAoIXJlY29yZElkIHx8ICFmaWVsZElkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmFpVGFibGUuZmllbGRzTWFwKClbZmllbGRJZF07XG4gICAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IGZpZWxkLnR5cGU7XG4gICAgICAgIGlmIChEQkxfQ0xJQ0tfRURJVF9UWVBFLmluY2x1ZGVzKGZpZWxkVHlwZSkpIHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZUdyaWRFdmVudFNlcnZpY2Uub3BlbkNlbGxFZGl0b3IodGhpcy5haVRhYmxlLCB7XG4gICAgICAgICAgICAgICAgICAgIHZpZXdDb250YWluZXJSZWY6IHRoaXMudmlld0NvbnRhaW5lclJlZixcbiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyOiB0aGlzLmNvbnRhaW5lckVsZW1lbnQoKSxcbiAgICAgICAgICAgICAgICAgICAgY29vcmRpbmF0ZTogdGhpcy5jb29yZGluYXRlKCksXG4gICAgICAgICAgICAgICAgICAgIGZpZWxkSWQ6IGZpZWxkSWQhLFxuICAgICAgICAgICAgICAgICAgICByZWNvcmRJZDogcmVjb3JkSWQhLFxuICAgICAgICAgICAgICAgICAgICByZWZlcmVuY2VzOiB0aGlzLmFpUmVmZXJlbmNlcygpLFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVGaWVsZFZhbHVlOiAodmFsdWU6IFVwZGF0ZUZpZWxkVmFsdWVPcHRpb25zPGFueT4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWlVcGRhdGVGaWVsZFZhbHVlLmVtaXQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9LCAwKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuYWlEYkNsaWNrLmVtaXQoe1xuICAgICAgICAgICAgICAgIC4uLmUsXG4gICAgICAgICAgICAgICAgdGFyZ2V0TmFtZURldGFpbFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGJpbmRXaGVlbCgpIHtcbiAgICAgICAgZnJvbUV2ZW50PFdoZWVsRXZlbnQ+KHRoaXMuY29udGFpbmVyRWxlbWVudCgpLCAnd2hlZWwnLCB7IHBhc3NpdmU6IGZhbHNlIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGU6IFdoZWVsRXZlbnQpID0+IHtcbiAgICAgICAgICAgICAgICBlLnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgICAgICAgICAgdGhpcy5haVRhYmxlR3JpZEV2ZW50U2VydmljZS5jbG9zZUNlbGxFZGl0b3IoKTtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbEFjdGlvbih7IGRlbHRhWDogZS5kZWx0YVgsIGRlbHRhWTogZS5kZWx0YVksIHNoaWZ0S2V5OiBlLnNoaWZ0S2V5IH0pO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2Nyb2xsQWN0aW9uID0gKG9wdGlvbnM6IFNjcm9sbEFjdGlvbk9wdGlvbnMpID0+IHtcbiAgICAgICAgaWYgKHRoaXMudGltZXIpIHtcbiAgICAgICAgICAgIGNhbmNlbEFuaW1hdGlvbkZyYW1lKHRoaXMudGltZXIpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMudGltZXIgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgeyBkZWx0YVgsIGRlbHRhWSwgc2hpZnRLZXkgfSA9IG9wdGlvbnM7XG4gICAgICAgICAgICBjb25zdCBmaXhlZERlbHRhWSA9IHNoaWZ0S2V5ICYmIGlzV2luZG93cyA/IDAgOiBkZWx0YVk7XG4gICAgICAgICAgICBjb25zdCBmaXhlZERlbHRhWCA9IHNoaWZ0S2V5ICYmIGlzV2luZG93cyA/IGRlbHRhWSA6IGRlbHRhWDtcbiAgICAgICAgICAgIGNvbnN0IGhvcml6b250YWxCYXIgPSB0aGlzLmhvcml6b250YWxCYXJSZWYoKT8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgICAgIGNvbnN0IHZlcnRpY2FsQmFyID0gdGhpcy52ZXJ0aWNhbEJhclJlZigpPy5uYXRpdmVFbGVtZW50O1xuICAgICAgICAgICAgaWYgKGhvcml6b250YWxCYXIpIHtcbiAgICAgICAgICAgICAgICBob3Jpem9udGFsQmFyLnNjcm9sbExlZnQgPSBob3Jpem9udGFsQmFyLnNjcm9sbExlZnQgKyBmaXhlZERlbHRhWDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh2ZXJ0aWNhbEJhcikge1xuICAgICAgICAgICAgICAgIHZlcnRpY2FsQmFyLnNjcm9sbFRvcCA9IHZlcnRpY2FsQmFyLnNjcm9sbFRvcCArIGZpeGVkRGVsdGFZO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgb3B0aW9ucy5jYWxsYmFjayAmJiBvcHRpb25zLmNhbGxiYWNrKCk7XG4gICAgICAgICAgICB0aGlzLnRpbWVyID0gbnVsbDtcbiAgICAgICAgfSk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgYmluZFNjcm9sbEJhclNjcm9sbCgpIHtcbiAgICAgICAgZnJvbUV2ZW50PFdoZWVsRXZlbnQ+KHRoaXMuaG9yaXpvbnRhbEJhclJlZigpIS5uYXRpdmVFbGVtZW50LCAnc2Nyb2xsJywgeyBwYXNzaXZlOiB0cnVlIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhvcml6b250YWxTY3JvbGwoZSk7XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICBmcm9tRXZlbnQ8V2hlZWxFdmVudD4odGhpcy52ZXJ0aWNhbEJhclJlZigpIS5uYXRpdmVFbGVtZW50LCAnc2Nyb2xsJywgeyBwYXNzaXZlOiB0cnVlIH0pXG4gICAgICAgICAgICAucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKGUpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLnZlcnRpY2FsU2Nyb2xsKGUpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiaW5kR2xvYmFsTW91c2Vkb3duKCkge1xuICAgICAgICBmcm9tRXZlbnQ8TW91c2VFdmVudD4oZG9jdW1lbnQsICdtb3VzZWRvd24nLCB7IHBhc3NpdmU6IHRydWUgfSlcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcihcbiAgICAgICAgICAgICAgICAgICAgKGUpID0+XG4gICAgICAgICAgICAgICAgICAgICAgICBlLnRhcmdldCBpbnN0YW5jZW9mIEVsZW1lbnQgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICF0aGlzLmNvbnRhaW5lckVsZW1lbnQoKS5jb250YWlucyhlLnRhcmdldCkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgICFlLnRhcmdldC5jbG9zZXN0KEFJX1RBQkxFX1BSRVZFTlRfQ0xFQVJfU0VMRUNUSU9OX0NMQVNTKVxuICAgICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICAgdGFrZVVudGlsRGVzdHJveWVkKHRoaXMuZGVzdHJveVJlZilcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlRHJhZ1NlbGVjdGlvblN0YXRlKGZhbHNlLCBudWxsKTtcbiAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZS5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSB1cGRhdGVEcmFnU2VsZWN0aW9uU3RhdGUoaXNEcmFnU2VsZWN0aW5nOiBib29sZWFuLCBkcmFnU2VsZWN0aW9uU3RhcnQ6IEFJUmVjb3JkRmllbGRJZFBhdGggfCBudWxsKSB7XG4gICAgICAgIHRoaXMuaXNEcmFnU2VsZWN0aW5nID0gaXNEcmFnU2VsZWN0aW5nO1xuICAgICAgICB0aGlzLmRyYWdTZWxlY3Rpb25TdGFydCA9IGRyYWdTZWxlY3Rpb25TdGFydDtcbiAgICB9XG5cbiAgICBwcml2YXRlIHJlc2V0U2Nyb2xsaW5nID0gKCkgPT4ge1xuICAgICAgICB0aGlzLmFpVGFibGUuY29udGV4dCEuc2V0U2Nyb2xsU3RhdGUoe1xuICAgICAgICAgICAgaXNTY3JvbGxpbmc6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgIH07XG5cbiAgICBwcml2YXRlIGhvcml6b250YWxTY3JvbGwgPSAoZTogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgc2Nyb2xsTGVmdCB9ID0gZS50YXJnZXQ7XG4gICAgICAgIHRoaXMuYWlUYWJsZS5jb250ZXh0IS5zZXRTY3JvbGxTdGF0ZSh7XG4gICAgICAgICAgICBzY3JvbGxMZWZ0LFxuICAgICAgICAgICAgaXNTY3JvbGxpbmc6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVzZXRTY3JvbGxpbmcoKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSB2ZXJ0aWNhbFNjcm9sbChlOiBhbnkpIHtcbiAgICAgICAgY29uc3QgeyBzY3JvbGxUb3AgfSA9IGUudGFyZ2V0O1xuICAgICAgICB0aGlzLmFpVGFibGUuY29udGV4dCEuc2V0U2Nyb2xsU3RhdGUoe1xuICAgICAgICAgICAgc2Nyb2xsVG9wLFxuICAgICAgICAgICAgaXNTY3JvbGxpbmc6IHRydWVcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVzZXRTY3JvbGxpbmcoKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldENvbnRhaW5lclJlY3QoKSB7XG4gICAgICAgIHRoaXMuY29udGFpbmVyUmVjdC5zZXQoe1xuICAgICAgICAgICAgd2lkdGg6IHRoaXMuY29udGFpbmVyRWxlbWVudCgpLm9mZnNldFdpZHRoLFxuICAgICAgICAgICAgaGVpZ2h0OiB0aGlzLmNvbnRhaW5lckVsZW1lbnQoKS5vZmZzZXRIZWlnaHRcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb250YWluZXJSZXNpemVMaXN0ZW5lcigpIHtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb250YWluZXJXaWR0aCA9IHRoaXMuY29udGFpbmVyRWxlbWVudCgpLm9mZnNldFdpZHRoO1xuICAgICAgICAgICAgY29uc3QgdG90YWxXaWR0aCA9IHRoaXMuY29vcmRpbmF0ZSgpLnRvdGFsV2lkdGggKyBBSV9UQUJMRV9GSUVMRF9BRERfQlVUVE9OX1dJRFRIO1xuICAgICAgICAgICAgdGhpcy5zZXRDb250YWluZXJSZWN0KCk7XG4gICAgICAgICAgICBpZiAoY29udGFpbmVyV2lkdGggPj0gdG90YWxXaWR0aCkge1xuICAgICAgICAgICAgICAgIHRoaXMuYWlUYWJsZS5jb250ZXh0IS5zZXRTY3JvbGxTdGF0ZSh7IHNjcm9sbExlZnQ6IDAgfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMuY29udGFpbmVyRWxlbWVudCgpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHRvZ2dsZUhvdmVyQ2VsbEVkaXRvcigpIHtcbiAgICAgICAgY29uc3QgeyByZWFsVGFyZ2V0TmFtZSB9ID0gdGhpcy5haVRhYmxlLmNvbnRleHQ/LnBvaW50UG9zaXRpb24oKSE7XG4gICAgICAgIGNvbnN0IHsgdGFyZ2V0TmFtZSwgZmllbGRJZCwgcmVjb3JkSWQgfSA9IGdldERldGFpbEJ5VGFyZ2V0TmFtZShyZWFsVGFyZ2V0TmFtZSEpO1xuICAgICAgICBjb25zdCBlZGl0aW5nQ2VsbCA9IHRoaXMuYWlUYWJsZUdyaWRFdmVudFNlcnZpY2UuZ2V0Q3VycmVudEVkaXRDZWxsKCk7XG5cbiAgICAgICAgaWYgKHRhcmdldE5hbWUgPT09IEFJX1RBQkxFX0NFTEwgJiYgcmVjb3JkSWQgJiYgZmllbGRJZCkge1xuICAgICAgICAgICAgY29uc3QgZmllbGQgPSB0aGlzLmFpVGFibGUuZmllbGRzTWFwKClbZmllbGRJZF07XG5cbiAgICAgICAgICAgIGlmICghZmllbGQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGZpZWxkVHlwZSA9IGZpZWxkLnR5cGU7XG4gICAgICAgICAgICBjb25zdCBlZGl0aW5nRmllbGRUeXBlID0gZWRpdGluZ0NlbGwgPyB0aGlzLmFpVGFibGUuZmllbGRzTWFwKClbZWRpdGluZ0NlbGwuZmllbGRJZF0udHlwZSA6IG51bGw7XG4gICAgICAgICAgICBjb25zdCBpc0VkaXRpbmdGaWVsZFR5cGVIb3ZlcmVkID0gZWRpdGluZ0ZpZWxkVHlwZSA/IE1PVVNFT1ZFUl9FRElUX1RZUEUuaW5jbHVkZXMoZWRpdGluZ0ZpZWxkVHlwZSkgOiBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGlzRmllbGRUeXBlSG92ZXJlZCA9IE1PVVNFT1ZFUl9FRElUX1RZUEUuaW5jbHVkZXMoZmllbGRUeXBlKTtcblxuICAgICAgICAgICAgaWYgKGVkaXRpbmdDZWxsICYmIGlzRWRpdGluZ0ZpZWxkVHlwZUhvdmVyZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkRXZlbnRTZXJ2aWNlLmNsb3NlQ2VsbEVkaXRvcigpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIWVkaXRpbmdDZWxsICYmICFpc0ZpZWxkVHlwZUhvdmVyZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkRXZlbnRTZXJ2aWNlLmNsb3NlQ2VsbEVkaXRvcigpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGVkaXRpbmdDZWxsICYmICgoIWlzRWRpdGluZ0ZpZWxkVHlwZUhvdmVyZWQgJiYgaXNGaWVsZFR5cGVIb3ZlcmVkKSB8fCAhaXNGaWVsZFR5cGVIb3ZlcmVkKSkge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5haVRhYmxlR3JpZEV2ZW50U2VydmljZS5vcGVuQ2VsbEVkaXRvcih0aGlzLmFpVGFibGUsIHtcbiAgICAgICAgICAgICAgICAgICAgdmlld0NvbnRhaW5lclJlZjogdGhpcy52aWV3Q29udGFpbmVyUmVmLFxuICAgICAgICAgICAgICAgICAgICBjb250YWluZXI6IHRoaXMuY29udGFpbmVyRWxlbWVudCgpLFxuICAgICAgICAgICAgICAgICAgICBjb29yZGluYXRlOiB0aGlzLmNvb3JkaW5hdGUoKSxcbiAgICAgICAgICAgICAgICAgICAgZmllbGRJZDogZmllbGRJZCEsXG4gICAgICAgICAgICAgICAgICAgIHJlY29yZElkOiByZWNvcmRJZCEsXG4gICAgICAgICAgICAgICAgICAgIHJlZmVyZW5jZXM6IHRoaXMuYWlSZWZlcmVuY2VzKCksXG4gICAgICAgICAgICAgICAgICAgIGlzSG92ZXJFZGl0OiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICB1cGRhdGVGaWVsZFZhbHVlOiAodmFsdWU6IFVwZGF0ZUZpZWxkVmFsdWVPcHRpb25zPGFueT4pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYWlVcGRhdGVGaWVsZFZhbHVlLmVtaXQodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIOm8oOagh+S9jeS6jumdnuWNleWFg+agvOWMuuWfn+aXtu+8jOWmguaenOW9k+WJjeaciSBtb3VzZW92ZXIg57yW6L6R5YWD57Sg77yM5YiZ57uT5p2f57yW6L6RXG4gICAgICAgICAgICBpZiAoZWRpdGluZ0NlbGwgJiYgTU9VU0VPVkVSX0VESVRfVFlQRS5pbmNsdWRlcyh0aGlzLmFpVGFibGUuZmllbGRzTWFwKClbZWRpdGluZ0NlbGwuZmllbGRJZF0udHlwZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkRXZlbnRTZXJ2aWNlLmNsb3NlQ2VsbEVkaXRvcigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBiaW5kQ2xpcGJvYXJkU2hvcnRjdXRzKCkge1xuICAgICAgICBmcm9tRXZlbnQ8S2V5Ym9hcmRFdmVudD4oZG9jdW1lbnQsICdrZXlkb3duJylcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgIGZpbHRlcigoZXZlbnQpID0+IChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkpICYmIChldmVudC5rZXkgPT09ICdjJyB8fCBldmVudC5rZXkgPT09ICd2JykpLFxuICAgICAgICAgICAgICAgIHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKGFzeW5jIChldmVudCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLmFpUmVhZG9ubHkoKSkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgaGFzU2VsZWN0ZWRDZWxscyA9IHRoaXMuYWlUYWJsZS5zZWxlY3Rpb24oKS5zZWxlY3RlZENlbGxzLnNpemUgPiAwO1xuICAgICAgICAgICAgICAgIGlmICghaGFzU2VsZWN0ZWRDZWxscykge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgY29uc3QgaGFzRWRpdGluZ0NlbGwgPSAhIXRoaXMuYWlUYWJsZUdyaWRFdmVudFNlcnZpY2UuZ2V0Q3VycmVudEVkaXRDZWxsKCk7XG5cbiAgICAgICAgICAgICAgICBpZiAoZXZlbnQua2V5ID09PSAnYycpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2xpcGJvYXJkRGF0YSA9IGJ1aWxkQ2xpcGJvYXJkRGF0YSh0aGlzLmFpVGFibGUpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2xpcGJvYXJkRGF0YSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVUb0NsaXBib2FyZChjbGlwYm9hcmREYXRhKS50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb3BpZWRDZWxsc0NvdW50ID0gdGhpcy5haVRhYmxlLnNlbGVjdGlvbigpLnNlbGVjdGVkQ2VsbHMuc2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtZXNzYWdlID0gZ2V0STE4blRleHRCeUtleSh0aGlzLmFpVGFibGUsIEFJVGFibGVHcmlkSTE4bktleS5jb3BpZWRDZWxscykucmVwbGFjZShcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3tjb3VudH0nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3BpZWRDZWxsc0NvdW50LnRvU3RyaW5nKClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubm90aWZ5U2VydmljZS5zdWNjZXNzKG1lc3NhZ2UsIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b21MZWZ0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gJ3YnICYmICFoYXNFZGl0aW5nQ2VsbCkge1xuICAgICAgICAgICAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbnM6IEFJVGFibGVBY3Rpb25zID0ge1xuICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlRmllbGRWYWx1ZTogKGRhdGE6IFVwZGF0ZUZpZWxkVmFsdWVPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5haVVwZGF0ZUZpZWxkVmFsdWUuZW1pdChkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRGaWVsZDogKGZpZWxkOiBBSVRhYmxlRmllbGQpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFpU2V0RmllbGQuZW1pdChmaWVsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgICAgICAgICAgYWRkRmllbGQ6IChkYXRhOiBBZGRGaWVsZE9wdGlvbnMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmFpQWRkRmllbGQuZW1pdChkYXRhKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgICBhZGRSZWNvcmQ6IChkYXRhOiBBZGRSZWNvcmRPcHRpb25zKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5hZGRSZWNvcmQoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgICAgICB3cml0ZVRvQUlUYWJsZSh0aGlzLmFpVGFibGUsIGFjdGlvbnMpLnRoZW4oKGlzUGFzdGVTdWNjZXNzKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWlzUGFzdGVTdWNjZXNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5ub3RpZnlTZXJ2aWNlLmVycm9yKGdldEkxOG5UZXh0QnlLZXkodGhpcy5haVRhYmxlLCBBSVRhYmxlR3JpZEkxOG5LZXkuaW52YWxpZFBhc3RlQ29udGVudCksIHVuZGVmaW5lZCwge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwbGFjZW1lbnQ6ICdib3R0b21MZWZ0J1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhbmRsZUZpZWxkRHJhZ1N0YXJ0KCkge1xuICAgICAgICBpZiAoIXRoaXMuYWlSZWFkb25seSgpICYmIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdGVkRmllbGRzLnNpemUgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLmFpVGFibGVHcmlkU2VsZWN0aW9uU2VydmljZS5kcmFnKHtcbiAgICAgICAgICAgICAgICB0eXBlOiBEcmFnVHlwZS5maWVsZCxcbiAgICAgICAgICAgICAgICBzb3VyY2VJZHM6IHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLnNlbGVjdGVkRmllbGRzLFxuICAgICAgICAgICAgICAgIHNjcm9sbDogdGhpcy5nZXRTY3JvbGxQb3NpdGlvbigpLFxuICAgICAgICAgICAgICAgIGNvb3JkaW5hdGU6IHRoaXMuY29vcmRpbmF0ZSgpXG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0U2Nyb2xsUG9zaXRpb24oKSB7XG4gICAgICAgIGNvbnN0IGhvcml6b250YWxCYXIgPSB0aGlzLmhvcml6b250YWxCYXJSZWYoKT8ubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgdmVydGljYWxCYXIgPSB0aGlzLnZlcnRpY2FsQmFyUmVmKCk/Lm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGxldCBzY3JvbGxMZWZ0ID0gaG9yaXpvbnRhbEJhcj8uc2Nyb2xsTGVmdCB8fCAwO1xuICAgICAgICBsZXQgc2Nyb2xsVG9wID0gdmVydGljYWxCYXI/LnNjcm9sbFRvcCB8fCAwO1xuICAgICAgICByZXR1cm4geyB4OiBzY3JvbGxMZWZ0LCB5OiBzY3JvbGxUb3AgfTtcbiAgICB9XG5cbiAgICBkcmFnRW5kKGRhdGE6IERyYWdFbmREYXRhKSB7XG4gICAgICAgIHN3aXRjaCAoZGF0YS50eXBlKSB7XG4gICAgICAgICAgICBjYXNlIERyYWdUeXBlLmZpZWxkOlxuICAgICAgICAgICAgICAgIGlmIChkYXRhLmZpZWxkc0luZGV4ICYmIGlzTnVtYmVyKGRhdGEudGFyZ2V0SW5kZXgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5maWVsZHNJbmRleC5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5haU1vdmVGaWVsZC5lbWl0KHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBbZGF0YS5maWVsZHNJbmRleFtpXV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3UGF0aDogW2RhdGEudGFyZ2V0SW5kZXggKyBpXVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIERyYWdUeXBlLmNvbHVtbldpZHRoOlxuICAgICAgICAgICAgICAgIGlmIChkYXRhLmZpZWxkSWRzICYmIGlzTnVtYmVyKGRhdGEud2lkdGgpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkSWQgPSBkYXRhLmZpZWxkSWRzLnZhbHVlcygpLm5leHQoKS52YWx1ZSE7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYWlTZXRGaWVsZFdpZHRoLmVtaXQoe1xuICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogW2ZpZWxkSWRdLFxuICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGg6IGRhdGEud2lkdGhcbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBEcmFnVHlwZS5yZWNvcmQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuYWlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlLmNsZWFyRHJhZygpO1xuICAgIH1cbn1cbiIsIjxkaXYgI2NvbnRhaW5lciBjbGFzcz1cImFpLXRhYmxlLWdyaWQtdmlld1wiPlxuICAgIEBpZiAoaGFzQ29udGFpbmVyUmVjdCgpKSB7XG4gICAgICAgIDxhaS10YWJsZS1yZW5kZXJlclxuICAgICAgICAgICAgW2NvbmZpZ109XCJyZW5kZXJlckNvbmZpZygpXCJcbiAgICAgICAgICAgIChrb01vdXNlbW92ZSk9XCJzdGFnZU1vdXNlbW92ZSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChrb01vdXNlZG93bik9XCJzdGFnZU1vdXNlZG93bigkZXZlbnQpXCJcbiAgICAgICAgICAgIChrb01vdXNldXApPVwic3RhZ2VNb3VzZXVwKCRldmVudClcIlxuICAgICAgICAgICAgKGtvQ29udGV4dG1lbnUpPVwic3RhZ2VDb250ZXh0bWVudSgkZXZlbnQpXCJcbiAgICAgICAgICAgIChrb0NsaWNrKT1cInN0YWdlQ2xpY2soJGV2ZW50KVwiXG4gICAgICAgICAgICAoa29EYmxjbGljayk9XCJzdGFnZURibGNsaWNrKCRldmVudClcIlxuICAgICAgICA+XG4gICAgICAgICAgICA8ZGl2ICNob3Jpem9udGFsQmFyIGNsYXNzPVwiYWktdGFibGUtaG9yaXpvbnRhbC1zY3JvbGwtYmFyLXdyYXBwZXJcIiBbc3R5bGUud2lkdGgucHhdPVwiY29udGFpbmVyUmVjdCgpLndpZHRoXCI+XG4gICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImFpLXRhYmxlLXNjcm9sbC1iYXItaW5uZXJcIiBbc3R5bGUud2lkdGgucHhdPVwic2Nyb2xsYmFyV2lkdGgoKVwiPjwvZGl2PlxuICAgICAgICAgICAgPC9kaXY+XG4gICAgICAgICAgICA8ZGl2XG4gICAgICAgICAgICAgICAgI3ZlcnRpY2FsQmFyXG4gICAgICAgICAgICAgICAgY2xhc3M9XCJhaS10YWJsZS12ZXJ0aWNhbC1zY3JvbGwtYmFyLXdyYXBwZXJcIlxuICAgICAgICAgICAgICAgIFtzdHlsZS5oZWlnaHQucHhdPVwiY29udGFpbmVyUmVjdCgpLmhlaWdodCAtIGZpZWxkSGVhZEhlaWdodFwiXG4gICAgICAgICAgICAgICAgW3N0eWxlLnRvcC5weF09XCJmaWVsZEhlYWRIZWlnaHRcIlxuICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJhaS10YWJsZS1zY3JvbGwtYmFyLWlubmVyXCIgW3N0eWxlLmhlaWdodC5weF09XCJzY3JvbGxUb3RhbEhlaWdodCgpXCI+PC9kaXY+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9haS10YWJsZS1yZW5kZXJlcj5cbiAgICB9XG4gICAgPGFpLXRhYmxlLWRyYWcgKGRyYWdFbmQpPVwiZHJhZ0VuZCgkZXZlbnQpXCI+PC9haS10YWJsZS1kcmFnPlxuPC9kaXY+XG4iXX0=
@@ -1,6 +1,6 @@
1
1
  import { ChangeDetectionStrategy, Component, computed, input } from '@angular/core';
2
2
  import { KoContainer, KoShape } from '../../angular-konva';
3
- import { AI_TABLE_ACTION_COMMON_SIZE, AI_TABLE_CELL_PADDING, AI_TABLE_FIELD_HEAD, AI_TABLE_FIELD_HEAD_ICON_GAP_SIZE, AI_TABLE_FIELD_HEAD_MORE, AI_TABLE_FIELD_HEAD_TEXT_MIN_WIDTH, AI_TABLE_ICON_COMMON_SIZE, AI_TABLE_OFFSET, Colors, DEFAULT_FONT_SIZE, MoreStandOutlinedPath } from '../../constants';
3
+ import { AI_TABLE_ACTION_COMMON_SIZE, AI_TABLE_CELL_PADDING, AI_TABLE_FIELD_HEAD, AI_TABLE_FIELD_HEAD_ICON_GAP_SIZE, AI_TABLE_FIELD_HEAD_MORE, AI_TABLE_FIELD_HEAD_OPACITY_LINE, AI_TABLE_FIELD_HEAD_TEXT_MIN_WIDTH, AI_TABLE_ICON_COMMON_SIZE, AI_TABLE_OFFSET, Colors, DEFAULT_FONT_SIZE, MoreStandOutlinedPath } from '../../constants';
4
4
  import { generateTargetName, TextMeasure } from '../../utils';
5
5
  import { AITableFieldIcon } from './field-icon.component';
6
6
  import { AITableIcon } from './icon.component';
@@ -91,6 +91,20 @@ export class AITableFieldHead {
91
91
  cornerRadius: 4
92
92
  };
93
93
  });
94
+ this.fieldOpacityLineConfig = computed(() => {
95
+ const { field, width, height } = this.config();
96
+ return {
97
+ x: AI_TABLE_OFFSET + width,
98
+ y: AI_TABLE_OFFSET,
99
+ name: generateTargetName({
100
+ targetName: AI_TABLE_FIELD_HEAD_OPACITY_LINE,
101
+ fieldId: field._id
102
+ }),
103
+ points: [0, 0, 0, height],
104
+ stroke: Colors.transparent,
105
+ strokeWidth: 6
106
+ };
107
+ });
94
108
  }
95
109
  static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AITableFieldHead, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
96
110
  static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "17.0.0", version: "18.2.13", type: AITableFieldHead, isStandalone: true, selector: "ai-table-field-head", inputs: { config: { classPropertyName: "config", publicName: "config", isSignal: true, isRequired: true, transformFunction: null } }, ngImport: i0, template: `
@@ -103,6 +117,7 @@ export class AITableFieldHead {
103
117
  <ai-table-icon [config]="moreIconConfig()"></ai-table-icon>
104
118
  }
105
119
  </ko-group>
120
+ <ko-line [config]="fieldOpacityLineConfig()"></ko-line>
106
121
  </ko-group>
107
122
  `, isInline: true, dependencies: [{ kind: "component", type: KoContainer, selector: "ko-layer, ko-fastlayer, ko-group" }, { kind: "component", type: KoShape, selector: "ko-shape, ko-circle, ko-label, ko-rect, ko-ellipse, ko-wedge, ko-line, ko-sprite, ko-image, ko-text, ko-text-path, ko-star, ko-ring, ko-arc, ko-tag, ko-path, ko-regular-polygon, ko-arrow, ko-transformer", inputs: ["config"], outputs: ["koMouseover", "koMousemove", "koMouseout", "koMouseenter", "koMouseleave", "koMousedown", "koMouseup", "koWheel", "koContextmenu", "koClick", "koDblclick", "koTouchstart", "koTouchmove", "koTouchend", "koTap", "koDbltap", "koDragstart", "koDragmove", "koDragend"] }, { kind: "component", type: AITableFieldIcon, selector: "ai-table-field-icon", inputs: ["config"] }, { kind: "component", type: AITableText, selector: "ai-table-text", inputs: ["config"], outputs: ["koClick", "koMouseMove"] }, { kind: "component", type: AITableIcon, selector: "ai-table-icon", inputs: ["config"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
108
123
  }
@@ -120,6 +135,7 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
120
135
  <ai-table-icon [config]="moreIconConfig()"></ai-table-icon>
121
136
  }
122
137
  </ko-group>
138
+ <ko-line [config]="fieldOpacityLineConfig()"></ko-line>
123
139
  </ko-group>
124
140
  `,
125
141
  standalone: true,
@@ -127,4 +143,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
127
143
  changeDetection: ChangeDetectionStrategy.OnPush
128
144
  }]
129
145
  }] });
130
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtaGVhZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9yZW5kZXJlci9jb21wb25lbnRzL2ZpZWxkLWhlYWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVwRixPQUFPLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBVyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BFLE9BQU8sRUFDSCwyQkFBMkIsRUFDM0IscUJBQXFCLEVBQ3JCLG1CQUFtQixFQUNuQixpQ0FBaUMsRUFDakMsd0JBQXdCLEVBQ3hCLGtDQUFrQyxFQUNsQyx5QkFBeUIsRUFDekIsZUFBZSxFQUNmLE1BQU0sRUFDTixpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3hCLE1BQU0saUJBQWlCLENBQUM7QUFFekIsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUM5RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDOztBQW9CL0MsTUFBTSxPQUFPLGdCQUFnQjtJQWxCN0I7UUFtQkksV0FBTSxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQTBCLENBQUM7UUFFbEQsZUFBVSxHQUFHLHFCQUFxQixHQUFHLHlCQUF5QixHQUFHLGlDQUFpQyxDQUFDO1FBRW5HLGdCQUFXLEdBQUcsV0FBVyxFQUFFLENBQUM7UUFFNUIsdUJBQWtCLEdBQUcsUUFBUSxDQUFDLEdBQUcsRUFBRTtZQUMvQixNQUFNLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FB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LENBQUM7YUFDbEIsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO0tBQ047K0dBL0ZZLGdCQUFnQjttR0FBaEIsZ0JBQWdCLHFOQWhCZjs7Ozs7Ozs7Ozs7S0FXVCw0REFFUyxXQUFXLDZFQUFFLE9BQU8sK2hCQUFFLGdCQUFnQixvRkFBRSxXQUFXLG1IQUFFLFdBQVc7OzRGQUdqRSxnQkFBZ0I7a0JBbEI1QixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSxxQkFBcUI7b0JBQy9CLFFBQVEsRUFBRTs7Ozs7Ozs7Ozs7S0FXVDtvQkFDRCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDO29CQUMzRSxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDbEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0YWdlQ29uZmlnIH0gZnJvbSAna29udmEvbGliL1N0YWdlJztcbmltcG9ydCB7IEtvQ29udGFpbmVyLCBLb1NoYXBlLCBLb1N0YWdlIH0gZnJvbSAnLi4vLi4vYW5ndWxhci1rb252YSc7XG5pbXBvcnQge1xuICAgIEFJX1RBQkxFX0FDVElPTl9DT01NT05fU0laRSxcbiAgICBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgQUlfVEFCTEVfRklFTERfSEVBRCxcbiAgICBBSV9UQUJMRV9GSUVMRF9IRUFEX0lDT05fR0FQX1NJWkUsXG4gICAgQUlfVEFCTEVfRklFTERfSEVBRF9NT1JFLFxuICAgIEFJX1RBQkxFX0ZJRUxEX0hFQURfVEVYVF9NSU5fV0lEVEgsXG4gICAgQUlfVEFCTEVfSUNPTl9DT01NT05fU0laRSxcbiAgICBBSV9UQUJMRV9PRkZTRVQsXG4gICAgQ29sb3JzLFxuICAgIERFRkFVTFRfRk9OVF9TSVpFLFxuICAgIE1vcmVTdGFuZE91dGxpbmVkUGF0aFxufSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQUlUYWJsZUZpZWxkSGVhZENvbmZpZyB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGdlbmVyYXRlVGFyZ2V0TmFtZSwgVGV4dE1lYXN1cmUgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBBSVRhYmxlRmllbGRJY29uIH0gZnJvbSAnLi9maWVsZC1pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBSVRhYmxlSWNvbiB9IGZyb20gJy4vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQUlUYWJsZVRleHQgfSBmcm9tICcuL3RleHQuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhaS10YWJsZS1maWVsZC1oZWFkJyxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8a28tZ3JvdXAgW2NvbmZpZ109XCJncm91cENvbmZpZygpXCI+XG4gICAgICAgICAgICA8a28tcmVjdCBbY29uZmlnXT1cImJnQ29uZmlnKClcIj48L2tvLXJlY3Q+XG4gICAgICAgICAgICA8a28tZ3JvdXA+XG4gICAgICAgICAgICAgICAgPGFpLXRhYmxlLWZpZWxkLWljb24gW2NvbmZpZ109XCJmaWVsZEljb25Db25maWcoKVwiPjwvYWktdGFibGUtZmllbGQtaWNvbj5cbiAgICAgICAgICAgICAgICA8YWktdGFibGUtdGV4dCBbY29uZmlnXT1cInRleHRDb25maWcoKVwiPjwvYWktdGFibGUtdGV4dD5cbiAgICAgICAgICAgICAgICBAaWYgKGNvbmZpZygpLmljb25WaXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxhaS10YWJsZS1pY29uIFtjb25maWddPVwibW9yZUljb25Db25maWcoKVwiPjwvYWktdGFibGUtaWNvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2tvLWdyb3VwPlxuICAgICAgICA8L2tvLWdyb3VwPlxuICAgIGAsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBpbXBvcnRzOiBbS29Db250YWluZXIsIEtvU2hhcGUsIEFJVGFibGVGaWVsZEljb24sIEFJVGFibGVUZXh0LCBBSVRhYmxlSWNvbl0sXG4gICAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2hcbn0pXG5leHBvcnQgY2xhc3MgQUlUYWJsZUZpZWxkSGVhZCB7XG4gICAgY29uZmlnID0gaW5wdXQucmVxdWlyZWQ8QUlUYWJsZUZpZWxkSGVhZENvbmZpZz4oKTtcblxuICAgIHRleHRPZmZzZXQgPSBBSV9UQUJMRV9DRUxMX1BBRERJTkcgKyBBSV9UQUJMRV9JQ09OX0NPTU1PTl9TSVpFICsgQUlfVEFCTEVfRklFTERfSEVBRF9JQ09OX0dBUF9TSVpFO1xuXG4gICAgdGV4dE1lYXN1cmUgPSBUZXh0TWVhc3VyZSgpO1xuXG4gICAgYXZhaWxhYmxlVGV4dFdpZHRoID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCB7IHdpZHRoLCBpY29uVmlzaWJsZSB9ID0gdGhpcy5jb25maWcoKTtcbiAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgIHdpZHRoIC1cbiAgICAgICAgICAgIChpY29uVmlzaWJsZVxuICAgICAgICAgICAgICAgID8gMiAqIChBSV9UQUJMRV9DRUxMX1BBRERJTkcgKyBBSV9UQUJMRV9JQ09OX0NPTU1PTl9TSVpFICsgQUlfVEFCTEVfRklFTERfSEVBRF9JQ09OX0dBUF9TSVpFKVxuICAgICAgICAgICAgICAgIDogMiAqIEFJX1RBQkxFX0NFTExfUEFERElORyArIEFJX1RBQkxFX0lDT05fQ09NTU9OX1NJWkUgKyBBSV9UQUJMRV9GSUVMRF9IRUFEX0lDT05fR0FQX1NJWkUpXG4gICAgICAgICk7XG4gICAgfSk7XG5cbiAgICB0ZXh0RGF0YSA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgZmllbGROYW1lID0gdGhpcy5jb25maWcoKS5maWVsZC5uYW1lLnJlcGxhY2UoL1xccnxcXG4vZywgJyAnKTtcbiAgICAgICAgdGhpcy50ZXh0TWVhc3VyZS5zZXRGb250KHsgZm9udFNpemU6IERFRkFVTFRfRk9OVF9TSVpFIH0pO1xuICAgICAgICBjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGlzT3ZlcmZsb3cgfSA9IHRoaXMudGV4dE1lYXN1cmUubWVhc3VyZVRleHQoZmllbGROYW1lLCB0aGlzLmF2YWlsYWJsZVRleHRXaWR0aCgpLCAxKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHdpZHRoOiBNYXRoLm1pbih3aWR0aCwgdGhpcy5hdmFpbGFibGVUZXh0V2lkdGgoKSksXG4gICAgICAgICAgICBoZWlnaHQsXG4gICAgICAgICAgICBpc092ZXJmbG93XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBncm91cENvbmZpZyA9IGNvbXB1dGVkPFBhcnRpYWw8U3RhZ2VDb25maWc+PigoKSA9PiB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiB0aGlzLmNvbmZpZygpLngsXG4gICAgICAgICAgICB5OiB0aGlzLmNvbmZpZygpLnlcbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIGJnQ29uZmlnID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCB7IGZpZWxkLCB3aWR0aCwgaGVpZ2h0LCBzdHJva2UsIGlzU2VsZWN0ZWQsIGljb25WaXNpYmxlIH0gPSB0aGlzLmNvbmZpZygpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogQUlfVEFCTEVfT0ZGU0VULFxuICAgICAgICAgICAgeTogQUlfVEFCTEVfT0ZGU0VULFxuICAgICAgICAgICAgbmFtZTogZ2VuZXJhdGVUYXJnZXROYW1lKHtcbiAgICAgICAgICAgICAgICB0YXJnZXROYW1lOiBBSV9UQUJMRV9GSUVMRF9IRUFELFxuICAgICAgICAgICAgICAgIGZpZWxkSWQ6IGZpZWxkLl9pZFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICB3aWR0aDogd2lkdGgsXG4gICAgICAgICAgICBoZWlnaHQ6IGhlaWdodCxcbiAgICAgICAgICAgIGZpbGw6IGlzU2VsZWN0ZWQgPyBDb2xvcnMuaGVhZFNlbGVjdGVkQmdDb2xvciA6IGljb25WaXNpYmxlID8gQ29sb3JzLmdyYXk4MCA6IENvbG9ycy53aGl0ZSxcbiAgICAgICAgICAgIHN0cm9rZTogc3Ryb2tlIHx8IENvbG9ycy5ncmF5MjAwLFxuICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IDEsXG4gICAgICAgICAgICBvcGFjaXR5OiAxXG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBmaWVsZEljb25Db25maWcgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZmllbGQsIGhlaWdodCB9ID0gdGhpcy5jb25maWcoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGZpZWxkOiBmaWVsZCxcbiAgICAgICAgICAgIHg6IEFJX1RBQkxFX0NFTExfUEFERElORyxcbiAgICAgICAgICAgIHk6IChoZWlnaHQgLSBBSV9UQUJMRV9JQ09OX0NPTU1PTl9TSVpFKSAvIDIsXG4gICAgICAgICAgICB3aWR0aDogQUlfVEFCTEVfSUNPTl9DT01NT05fU0laRSxcbiAgICAgICAgICAgIGhlaWdodDogQUlfVEFCTEVfSUNPTl9DT01NT05fU0laRSxcbiAgICAgICAgICAgIGZpbGw6IENvbG9ycy5ncmF5NjAwXG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICB0ZXh0Q29uZmlnID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCB7IGZpZWxkLCBoZWlnaHQgfSA9IHRoaXMuY29uZmlnKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiB0aGlzLnRleHRPZmZzZXQsXG4gICAgICAgICAgICB5OiB1bmRlZmluZWQsXG4gICAgICAgICAgICB3aWR0aDogTWF0aC5tYXgodGhpcy50ZXh0RGF0YSgpLndpZHRoLCBBSV9UQUJMRV9GSUVMRF9IRUFEX1RFWFRfTUlOX1dJRFRIKSxcbiAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0ICsgMixcbiAgICAgICAgICAgIHRleHQ6IGZpZWxkLm5hbWUsXG4gICAgICAgICAgICBsaW5lSGVpZ2h0OiAxLjg0XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBtb3JlSWNvbkNvbmZpZyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgeyBmaWVsZCwgd2lkdGgsIGhlaWdodCwgaXNIb3Zlckljb24sIGlzU2VsZWN0ZWQgfSA9IHRoaXMuY29uZmlnKCk7XG4gICAgICAgIGNvbnN0IGNvbW1vbkljb25PZmZzZXRZID0gKGhlaWdodCAtIEFJX1RBQkxFX0FDVElPTl9DT01NT05fU0laRSkgLyAyO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgbmFtZTogZ2VuZXJhdGVUYXJnZXROYW1lKHtcbiAgICAgICAgICAgICAgICB0YXJnZXROYW1lOiBBSV9UQUJMRV9GSUVMRF9IRUFEX01PUkUsXG4gICAgICAgICAgICAgICAgZmllbGRJZDogZmllbGQuX2lkXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHg6IHdpZHRoIC0gQUlfVEFCTEVfQUNUSU9OX0NPTU1PTl9TSVpFLFxuICAgICAgICAgICAgeTogY29tbW9uSWNvbk9mZnNldFksXG4gICAgICAgICAgICBkYXRhOiBNb3JlU3RhbmRPdXRsaW5lZFBhdGgsXG4gICAgICAgICAgICBmaWxsOiBpc0hvdmVySWNvbiA/IENvbG9ycy5wcmltYXJ5IDogQ29sb3JzLmdyYXk2MDAsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiBDb2xvcnMudHJhbnNwYXJlbnQsXG4gICAgICAgICAgICBiYWNrZ3JvdW5kV2lkdGg6IEFJX1RBQkxFX0FDVElPTl9DT01NT05fU0laRSxcbiAgICAgICAgICAgIGJhY2tncm91bmRIZWlnaHQ6IEFJX1RBQkxFX0FDVElPTl9DT01NT05fU0laRSxcbiAgICAgICAgICAgIGNvcm5lclJhZGl1czogNFxuICAgICAgICB9O1xuICAgIH0pO1xufVxuIl19
146
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmllbGQtaGVhZC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9yZW5kZXJlci9jb21wb25lbnRzL2ZpZWxkLWhlYWQuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxTQUFTLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVwRixPQUFPLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBVyxNQUFNLHFCQUFxQixDQUFDO0FBQ3BFLE9BQU8sRUFDSCwyQkFBMkIsRUFDM0IscUJBQXFCLEVBQ3JCLG1CQUFtQixFQUNuQixpQ0FBaUMsRUFDakMsd0JBQXdCLEVBQ3hCLGdDQUFnQyxFQUNoQyxrQ0FBa0MsRUFDbEMseUJBQXlCLEVBQ3pCLGVBQWUsRUFDZixNQUFNLEVBQ04saUJBQWlCLEVBQ2pCLHFCQUFxQixFQUN4QixNQUFNLGlCQUFpQixDQUFDO0FBRXpCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDOUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDMUQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFxQi9DLE1BQU0sT0FBTyxnQkFBZ0I7SUFuQjdCO1FBb0JJLFdBQU0sR0FBRyxLQUFLLENBQUMsUUFBUSxFQUEwQixDQUFDO1FBRWxELGVBQVUsR0FBRyxxQkFBcUIsR0FBRyx5QkFBeUIsR0FBRyxpQ0FBaUMsQ0FBQztRQUVuRyxnQkFBVyxHQUFHLFdBQVcsRUFBRSxDQUFDO1FBRTVCLHVCQUFrQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDL0IsTUFBTSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUs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QzdDLFlBQVksRUFBRSxDQUFDO2FBQ2xCLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztRQUVILDJCQUFzQixHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDbkMsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQy9DLE9BQU87Z0JBQ0gsQ0FBQyxFQUFFLGVBQWUsR0FBRyxLQUFLO2dCQUMxQixDQUFDLEVBQUUsZUFBZTtnQkFDbEIsSUFBSSxFQUFFLGtCQUFrQixDQUFDO29CQUNyQixVQUFVLEVBQUUsZ0NBQWdDO29CQUM1QyxPQUFPLEVBQUUsS0FBSyxDQUFDLEdBQUc7aUJBQ3JCLENBQUM7Z0JBQ0YsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDO2dCQUN6QixNQUFNLEVBQUUsTUFBTSxDQUFDLFdBQVc7Z0JBQzFCLFdBQVcsRUFBRSxDQUFDO2FBQ2pCLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztLQUNOOytHQTlHWSxnQkFBZ0I7bUdBQWhCLGdCQUFnQixxTkFqQmY7Ozs7Ozs7Ozs7OztLQVlULDREQUVTLFdBQVcsNkVBQUUsT0FBTywraEJBQUUsZ0JBQWdCLG9GQUFFLFdBQVcsbUhBQUUsV0FBVzs7NEZBR2pFLGdCQUFnQjtrQkFuQjVCLFNBQVM7bUJBQUM7b0JBQ1AsUUFBUSxFQUFFLHFCQUFxQjtvQkFDL0IsUUFBUSxFQUFFOzs7Ozs7Ozs7Ozs7S0FZVDtvQkFDRCxVQUFVLEVBQUUsSUFBSTtvQkFDaEIsT0FBTyxFQUFFLENBQUMsV0FBVyxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxXQUFXLEVBQUUsV0FBVyxDQUFDO29CQUMzRSxlQUFlLEVBQUUsdUJBQXVCLENBQUMsTUFBTTtpQkFDbEQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBjb21wdXRlZCwgaW5wdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IFN0YWdlQ29uZmlnIH0gZnJvbSAna29udmEvbGliL1N0YWdlJztcbmltcG9ydCB7IEtvQ29udGFpbmVyLCBLb1NoYXBlLCBLb1N0YWdlIH0gZnJvbSAnLi4vLi4vYW5ndWxhci1rb252YSc7XG5pbXBvcnQge1xuICAgIEFJX1RBQkxFX0FDVElPTl9DT01NT05fU0laRSxcbiAgICBBSV9UQUJMRV9DRUxMX1BBRERJTkcsXG4gICAgQUlfVEFCTEVfRklFTERfSEVBRCxcbiAgICBBSV9UQUJMRV9GSUVMRF9IRUFEX0lDT05fR0FQX1NJWkUsXG4gICAgQUlfVEFCTEVfRklFTERfSEVBRF9NT1JFLFxuICAgIEFJX1RBQkxFX0ZJRUxEX0hFQURfT1BBQ0lUWV9MSU5FLFxuICAgIEFJX1RBQkxFX0ZJRUxEX0hFQURfVEVYVF9NSU5fV0lEVEgsXG4gICAgQUlfVEFCTEVfSUNPTl9DT01NT05fU0laRSxcbiAgICBBSV9UQUJMRV9PRkZTRVQsXG4gICAgQ29sb3JzLFxuICAgIERFRkFVTFRfRk9OVF9TSVpFLFxuICAgIE1vcmVTdGFuZE91dGxpbmVkUGF0aFxufSBmcm9tICcuLi8uLi9jb25zdGFudHMnO1xuaW1wb3J0IHsgQUlUYWJsZUZpZWxkSGVhZENvbmZpZyB9IGZyb20gJy4uLy4uL3R5cGVzJztcbmltcG9ydCB7IGdlbmVyYXRlVGFyZ2V0TmFtZSwgVGV4dE1lYXN1cmUgfSBmcm9tICcuLi8uLi91dGlscyc7XG5pbXBvcnQgeyBBSVRhYmxlRmllbGRJY29uIH0gZnJvbSAnLi9maWVsZC1pY29uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBBSVRhYmxlSWNvbiB9IGZyb20gJy4vaWNvbi5jb21wb25lbnQnO1xuaW1wb3J0IHsgQUlUYWJsZVRleHQgfSBmcm9tICcuL3RleHQuY29tcG9uZW50JztcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdhaS10YWJsZS1maWVsZC1oZWFkJyxcbiAgICB0ZW1wbGF0ZTogYFxuICAgICAgICA8a28tZ3JvdXAgW2NvbmZpZ109XCJncm91cENvbmZpZygpXCI+XG4gICAgICAgICAgICA8a28tcmVjdCBbY29uZmlnXT1cImJnQ29uZmlnKClcIj48L2tvLXJlY3Q+XG4gICAgICAgICAgICA8a28tZ3JvdXA+XG4gICAgICAgICAgICAgICAgPGFpLXRhYmxlLWZpZWxkLWljb24gW2NvbmZpZ109XCJmaWVsZEljb25Db25maWcoKVwiPjwvYWktdGFibGUtZmllbGQtaWNvbj5cbiAgICAgICAgICAgICAgICA8YWktdGFibGUtdGV4dCBbY29uZmlnXT1cInRleHRDb25maWcoKVwiPjwvYWktdGFibGUtdGV4dD5cbiAgICAgICAgICAgICAgICBAaWYgKGNvbmZpZygpLmljb25WaXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgIDxhaS10YWJsZS1pY29uIFtjb25maWddPVwibW9yZUljb25Db25maWcoKVwiPjwvYWktdGFibGUtaWNvbj5cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICA8L2tvLWdyb3VwPlxuICAgICAgICAgICAgPGtvLWxpbmUgW2NvbmZpZ109XCJmaWVsZE9wYWNpdHlMaW5lQ29uZmlnKClcIj48L2tvLWxpbmU+XG4gICAgICAgIDwva28tZ3JvdXA+XG4gICAgYCxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIGltcG9ydHM6IFtLb0NvbnRhaW5lciwgS29TaGFwZSwgQUlUYWJsZUZpZWxkSWNvbiwgQUlUYWJsZVRleHQsIEFJVGFibGVJY29uXSxcbiAgICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaFxufSlcbmV4cG9ydCBjbGFzcyBBSVRhYmxlRmllbGRIZWFkIHtcbiAgICBjb25maWcgPSBpbnB1dC5yZXF1aXJlZDxBSVRhYmxlRmllbGRIZWFkQ29uZmlnPigpO1xuXG4gICAgdGV4dE9mZnNldCA9IEFJX1RBQkxFX0NFTExfUEFERElORyArIEFJX1RBQkxFX0lDT05fQ09NTU9OX1NJWkUgKyBBSV9UQUJMRV9GSUVMRF9IRUFEX0lDT05fR0FQX1NJWkU7XG5cbiAgICB0ZXh0TWVhc3VyZSA9IFRleHRNZWFzdXJlKCk7XG5cbiAgICBhdmFpbGFibGVUZXh0V2lkdGggPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgd2lkdGgsIGljb25WaXNpYmxlIH0gPSB0aGlzLmNvbmZpZygpO1xuICAgICAgICByZXR1cm4gKFxuICAgICAgICAgICAgd2lkdGggLVxuICAgICAgICAgICAgKGljb25WaXNpYmxlXG4gICAgICAgICAgICAgICAgPyAyICogKEFJX1RBQkxFX0NFTExfUEFERElORyArIEFJX1RBQkxFX0lDT05fQ09NTU9OX1NJWkUgKyBBSV9UQUJMRV9GSUVMRF9IRUFEX0lDT05fR0FQX1NJWkUpXG4gICAgICAgICAgICAgICAgOiAyICogQUlfVEFCTEVfQ0VMTF9QQURESU5HICsgQUlfVEFCTEVfSUNPTl9DT01NT05fU0laRSArIEFJX1RBQkxFX0ZJRUxEX0hFQURfSUNPTl9HQVBfU0laRSlcbiAgICAgICAgKTtcbiAgICB9KTtcblxuICAgIHRleHREYXRhID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBmaWVsZE5hbWUgPSB0aGlzLmNvbmZpZygpLmZpZWxkLm5hbWUucmVwbGFjZSgvXFxyfFxcbi9nLCAnICcpO1xuICAgICAgICB0aGlzLnRleHRNZWFzdXJlLnNldEZvbnQoeyBmb250U2l6ZTogREVGQVVMVF9GT05UX1NJWkUgfSk7XG4gICAgICAgIGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgaXNPdmVyZmxvdyB9ID0gdGhpcy50ZXh0TWVhc3VyZS5tZWFzdXJlVGV4dChmaWVsZE5hbWUsIHRoaXMuYXZhaWxhYmxlVGV4dFdpZHRoKCksIDEpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgd2lkdGg6IE1hdGgubWluKHdpZHRoLCB0aGlzLmF2YWlsYWJsZVRleHRXaWR0aCgpKSxcbiAgICAgICAgICAgIGhlaWdodCxcbiAgICAgICAgICAgIGlzT3ZlcmZsb3dcbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIGdyb3VwQ29uZmlnID0gY29tcHV0ZWQ8UGFydGlhbDxTdGFnZUNvbmZpZz4+KCgpID0+IHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IHRoaXMuY29uZmlnKCkueCxcbiAgICAgICAgICAgIHk6IHRoaXMuY29uZmlnKCkueVxuICAgICAgICB9O1xuICAgIH0pO1xuXG4gICAgYmdDb25maWcgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZmllbGQsIHdpZHRoLCBoZWlnaHQsIHN0cm9rZSwgaXNTZWxlY3RlZCwgaWNvblZpc2libGUgfSA9IHRoaXMuY29uZmlnKCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB4OiBBSV9UQUJMRV9PRkZTRVQsXG4gICAgICAgICAgICB5OiBBSV9UQUJMRV9PRkZTRVQsXG4gICAgICAgICAgICBuYW1lOiBnZW5lcmF0ZVRhcmdldE5hbWUoe1xuICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IEFJX1RBQkxFX0ZJRUxEX0hFQUQsXG4gICAgICAgICAgICAgICAgZmllbGRJZDogZmllbGQuX2lkXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIHdpZHRoOiB3aWR0aCxcbiAgICAgICAgICAgIGhlaWdodDogaGVpZ2h0LFxuICAgICAgICAgICAgZmlsbDogaXNTZWxlY3RlZCA/IENvbG9ycy5oZWFkU2VsZWN0ZWRCZ0NvbG9yIDogaWNvblZpc2libGUgPyBDb2xvcnMuZ3JheTgwIDogQ29sb3JzLndoaXRlLFxuICAgICAgICAgICAgc3Ryb2tlOiBzdHJva2UgfHwgQ29sb3JzLmdyYXkyMDAsXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogMSxcbiAgICAgICAgICAgIG9wYWNpdHk6IDFcbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIGZpZWxkSWNvbkNvbmZpZyA9IGNvbXB1dGVkKCgpID0+IHtcbiAgICAgICAgY29uc3QgeyBmaWVsZCwgaGVpZ2h0IH0gPSB0aGlzLmNvbmZpZygpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZmllbGQ6IGZpZWxkLFxuICAgICAgICAgICAgeDogQUlfVEFCTEVfQ0VMTF9QQURESU5HLFxuICAgICAgICAgICAgeTogKGhlaWdodCAtIEFJX1RBQkxFX0lDT05fQ09NTU9OX1NJWkUpIC8gMixcbiAgICAgICAgICAgIHdpZHRoOiBBSV9UQUJMRV9JQ09OX0NPTU1PTl9TSVpFLFxuICAgICAgICAgICAgaGVpZ2h0OiBBSV9UQUJMRV9JQ09OX0NPTU1PTl9TSVpFLFxuICAgICAgICAgICAgZmlsbDogQ29sb3JzLmdyYXk2MDBcbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIHRleHRDb25maWcgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHsgZmllbGQsIGhlaWdodCB9ID0gdGhpcy5jb25maWcoKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHg6IHRoaXMudGV4dE9mZnNldCxcbiAgICAgICAgICAgIHk6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIHdpZHRoOiBNYXRoLm1heCh0aGlzLnRleHREYXRhKCkud2lkdGgsIEFJX1RBQkxFX0ZJRUxEX0hFQURfVEVYVF9NSU5fV0lEVEgpLFxuICAgICAgICAgICAgaGVpZ2h0OiBoZWlnaHQgKyAyLFxuICAgICAgICAgICAgdGV4dDogZmllbGQubmFtZSxcbiAgICAgICAgICAgIGxpbmVIZWlnaHQ6IDEuODRcbiAgICAgICAgfTtcbiAgICB9KTtcblxuICAgIG1vcmVJY29uQ29uZmlnID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCB7IGZpZWxkLCB3aWR0aCwgaGVpZ2h0LCBpc0hvdmVySWNvbiwgaXNTZWxlY3RlZCB9ID0gdGhpcy5jb25maWcoKTtcbiAgICAgICAgY29uc3QgY29tbW9uSWNvbk9mZnNldFkgPSAoaGVpZ2h0IC0gQUlfVEFCTEVfQUNUSU9OX0NPTU1PTl9TSVpFKSAvIDI7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBuYW1lOiBnZW5lcmF0ZVRhcmdldE5hbWUoe1xuICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IEFJX1RBQkxFX0ZJRUxEX0hFQURfTU9SRSxcbiAgICAgICAgICAgICAgICBmaWVsZElkOiBmaWVsZC5faWRcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgeDogd2lkdGggLSBBSV9UQUJMRV9BQ1RJT05fQ09NTU9OX1NJWkUsXG4gICAgICAgICAgICB5OiBjb21tb25JY29uT2Zmc2V0WSxcbiAgICAgICAgICAgIGRhdGE6IE1vcmVTdGFuZE91dGxpbmVkUGF0aCxcbiAgICAgICAgICAgIGZpbGw6IGlzSG92ZXJJY29uID8gQ29sb3JzLnByaW1hcnkgOiBDb2xvcnMuZ3JheTYwMCxcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IENvbG9ycy50cmFuc3BhcmVudCxcbiAgICAgICAgICAgIGJhY2tncm91bmRXaWR0aDogQUlfVEFCTEVfQUNUSU9OX0NPTU1PTl9TSVpFLFxuICAgICAgICAgICAgYmFja2dyb3VuZEhlaWdodDogQUlfVEFCTEVfQUNUSU9OX0NPTU1PTl9TSVpFLFxuICAgICAgICAgICAgY29ybmVyUmFkaXVzOiA0XG4gICAgICAgIH07XG4gICAgfSk7XG5cbiAgICBmaWVsZE9wYWNpdHlMaW5lQ29uZmlnID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCB7IGZpZWxkLCB3aWR0aCwgaGVpZ2h0IH0gPSB0aGlzLmNvbmZpZygpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgeDogQUlfVEFCTEVfT0ZGU0VUICsgd2lkdGgsXG4gICAgICAgICAgICB5OiBBSV9UQUJMRV9PRkZTRVQsXG4gICAgICAgICAgICBuYW1lOiBnZW5lcmF0ZVRhcmdldE5hbWUoe1xuICAgICAgICAgICAgICAgIHRhcmdldE5hbWU6IEFJX1RBQkxFX0ZJRUxEX0hFQURfT1BBQ0lUWV9MSU5FLFxuICAgICAgICAgICAgICAgIGZpZWxkSWQ6IGZpZWxkLl9pZFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgICBwb2ludHM6IFswLCAwLCAwLCBoZWlnaHRdLFxuICAgICAgICAgICAgc3Ryb2tlOiBDb2xvcnMudHJhbnNwYXJlbnQsXG4gICAgICAgICAgICBzdHJva2VXaWR0aDogNlxuICAgICAgICB9O1xuICAgIH0pO1xufVxuIl19
@@ -48,6 +48,9 @@ export class AITableGridSelectionService {
48
48
  drag(config) {
49
49
  this.aiTable.dragState.set(config);
50
50
  }
51
+ getDragStateType() {
52
+ return this.aiTable.dragState?.()?.type;
53
+ }
51
54
  clearDrag() {
52
55
  this.aiTable.dragState.set({
53
56
  type: DragType.none,
@@ -144,4 +147,4 @@ export class AITableGridSelectionService {
144
147
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: AITableGridSelectionService, decorators: [{
145
148
  type: Injectable
146
149
  }], ctorParameters: () => [] });
147
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9zZXJ2aWNlcy9zZWxlY3Rpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUF1QixPQUFPLEVBQW9CLFFBQVEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNuRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBR2pELE1BQU0sT0FBTywyQkFBMkI7SUFZcEM7UUFUQSxtQkFBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDM0IsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxlQUFlLENBQUM7WUFDakUsT0FBTyxlQUFlLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTTtnQkFDekQsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLEdBQUc7Z0JBQzNCLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxLQUFLLENBQUM7b0JBQzFCLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJO29CQUM1QixDQUFDLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO0lBRVksQ0FBQztJQUVoQixVQUFVLENBQUMsT0FBZ0I7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO1lBQzVCLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtZQUNuQixTQUFTLEVBQUUsSUFBSSxHQUFHLEVBQUU7U0FDdkIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGNBQWM7UUFD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eyBjb21wdXRlZCwgSW5qZWN0YWJsZSwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBBSVJlY29yZEZpZWxkSWRQYXRoLCBBSVRhYmxlLCBBSVRhYmxlRHJhZ1N0YXRlLCBEcmFnVHlwZSB9IGZyb20gJy4uL2NvcmUnO1xuaW1wb3J0IHsgQUlUYWJsZVNlbGVjdEFsbFN0YXRlIH0gZnJvbSAnLi4vdHlwZXMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQUlUYWJsZUdyaWRTZWxlY3Rpb25TZXJ2aWNlIHtcbiAgICBhaVRhYmxlITogQUlUYWJsZTtcblxuICAgIHNlbGVjdEFsbFN0YXRlID0gY29tcHV0ZWQoKCkgPT4ge1xuICAgICAgICBjb25zdCBzZWxlY3RlZFJlY29yZHMgPSB0aGlzLmFpVGFibGUuc2VsZWN0aW9uKCkuc2VsZWN0ZWRSZWNvcmRzO1xuICAgICAgICByZXR1cm4gc2VsZWN0ZWRSZWNvcmRzLnNpemUgPT09IHRoaXMuYWlUYWJsZS5yZWNvcmRzKCkubGVuZ3RoXG4gICAgICAgICAgICA/IEFJVGFibGVTZWxlY3RBbGxTdGF0ZS5hbGxcbiAgICAgICAgICAgIDogc2VsZWN0ZWRSZWNvcmRzLnNpemUgPT09IDBcbiAgICAgICAgICAgICAgPyBBSVRhYmxlU2VsZWN0QWxsU3RhdGUubm9uZVxuICAgICAgICAgICAgICA6IEFJVGFibGVTZWxlY3RBbGxTdGF0ZS5wYXJ0aWFsO1xuICAgIH0pO1xuXG4gICAgY29uc3RydWN0b3IoKSB7fVxuXG4gICAgaW5pdGlhbGl6ZShhaVRhYmxlOiBBSVRhYmxlKSB7XG4gICAgICAgIHRoaXMuYWlUYWJsZSA9IGFpVGFibGU7XG4gICAgICAgIHRoaXMuYWlUYWJsZS5kcmFnU3RhdGUgPSBzaWduYWwoe1xuICAgICAgICAgICAgdHlwZTogRHJhZ1R5cGUubm9uZSxcbiAgICAgICAgICAgIHNvdXJjZUlkczogbmV3IFNldCgpXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIGNsZWFyU2VsZWN0aW9uKCkge1xuICAgICAgICB0aGlzLmFpVGFibGUuc2VsZWN0aW9uLnNldCh7XG4gICAgICAgICAgICBzZWxlY3RlZFJlY29yZHM6IG5ldyBTZXQoKSxcbiAgICAgICAgICAgIHNlbGVjdGVkRmllbGRzOiBuZXcgU2V0KCksXG4gICAgICAgICAgICBzZWxlY3RlZENlbGxzOiBuZXcgU2V0KCksXG4gICAgICAgICAgICBhY3RpdmVDZWxsOiBudWxsLFxuICAgICAgICAgICAgc2VsZWN0QWxsU3RhdGU6IEFJVGFibGVTZWxlY3RBbGxTdGF0ZS5ub25lXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNldEFjdGl2ZUNlbGwoYWN0aXZlQ2VsbDogQUlSZWNvcmRGaWVsZElkUGF0aCkge1xuICAgICAgICB0aGlzLmFpVGFibGUuc2VsZWN0aW9uKCkuYWN0aXZlQ2VsbCA9IGFjdGl2ZUNlbGw7XG4gICAgfVxuXG4gICAgc2VsZWN0RmllbGQoZmllbGRJZDogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLmFpVGFibGUuc2VsZWN0aW9uKCkuc2VsZWN0ZWRGaWVsZHMuaGFzKGZpZWxkSWQpKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICB0aGlzLmFpVGFibGUuc2VsZWN0aW9uKCkuc2VsZWN0ZWRGaWVsZHMuYWRkKGZpZWxkSWQpO1xuICAgIH1cblxuICAgIGdldCBzZWxlY3RlZEZpZWxkcygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuYWlUYWJsZS5zZWxlY3Rpb24oKS5zZWxlY3RlZEZpZWxkcztcbiAgICB9XG5cbiAgICBnZXQgc2VsZWN0ZWRSZWNvcmRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5haVRhYmxlLnNlbGVjdGlvbigpLnNlbGVjdGVkUmVjb3JkcztcbiAgICB9XG5cbiAgICBkcmFnKGNvbmZpZzogQUlUYWJsZURyYWdTdGF0ZSkge1xuICAgICAgICB0aGlzLmFpVGFibGUuZHJhZ1N0YXRlIS5zZXQoY29uZmlnKTtcbiAgICB9XG5cbiAgICBjbGVhckRyYWcoKSB7XG4gICAgICAgIHRoaXMuYWlUYWJsZS5kcmFnU3RhdGUhLnNldCh7XG4gICAgICAgICAgICB0eXBlOiBEcmFnVHlwZS5ub25lLFxuICAgICAgICAgICAgc291cmNlSWRzOiBuZXcgU2V0KClcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2VsZWN0UmVjb3JkKHJlY29yZElkOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuYWlUYWJsZS5zZWxlY3Rpb24oKS5zZWxlY3RlZFJlY29yZHMuaGFzKHJlY29yZElkKSkge1xuICAgICAgICAgICAgdGhpcy5haVRhYmxlLnNlbGVjdGlvbigpLnNlbGVjdGVkUmVjb3Jkcy5kZWxldGUocmVjb3JkSWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5haVRhYmxlLnNlbGVjdGlvbigpLnNlbGVjdGVkUmVjb3Jkcy5hZGQocmVjb3JkSWQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUmVjb3JkcyA9IHRoaXMuYWlUYWJsZS5zZWxlY3Rpb24oKS5zZWxlY3RlZFJlY29yZHM7XG4gICAgICAgIHRoaXMuYWlUYWJsZS5zZWxlY3Rpb24uc2V0KHtcbiAgICAgICAgICAgIHNlbGVjdGVkUmVjb3Jkczogc2VsZWN0ZWRSZWNvcmRzLFxuICAgICAgICAgICAgc2VsZWN0ZWRGaWVsZHM6IG5ldyBTZXQoKSxcbiAgICAgICAgICAgIHNlbGVjdGVkQ2VsbHM6IG5ldyBTZXQoKSxcbiAgICAgICAgICAgIGFjdGl2ZUNlbGw6IG51bGwsXG4gICAgICAgICAgICBzZWxlY3RBbGxTdGF0ZTogdGhpcy5zZWxlY3RBbGxTdGF0ZSgpXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRvZ2dsZVNlbGVjdEFsbChjaGVja2VkOiBib29sZWFuKSB7XG4gICAgICAgIGlmIChjaGVja2VkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5haVRhYmxlLnJlY29yZHMoKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGUuc2VsZWN0aW9uLnNldCh7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuYWlUYWJsZS5zZWxlY3Rpb24oKSxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0QWxsU3RhdGU6IEFJVGFibGVTZWxlY3RBbGxTdGF0ZS5hbGxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5haVRhYmxlLnJlY29yZHMoKS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0UmVjb3JkKGl0ZW0uX2lkKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZVNlbGVjdChldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudD8udGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNlbGxEb20gPSB0YXJnZXQuY2xvc2VzdCgnLmdyaWQtY2VsbCcpO1xuICAgICAgICBjb25zdCBjb2xEb20gPSB0YXJnZXQuY2xvc2VzdCgnLmdyaWQtZmllbGQnKTtcbiAgICAgICAgY29uc3QgY2hlY2tib3ggPSB0YXJnZXQudGFnTmFtZSA9PT0gJ0lOUFVUJyAmJiAodGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnR5cGUgPT09ICdjaGVja2JveCcgJiYgdGFyZ2V0LmNsb3Nlc3QoJy5ncmlkLWNoZWNrYm94Jyk7XG4gICAgICAgIGNvbnN0IGZpZWxkQWN0aW9uID0gdGFyZ2V0LmNsb3Nlc3QoJy5ncmlkLWZpZWxkLWFjdGlvbicpO1xuICAgICAgICBpZiAoY2VsbERvbSkge1xuICAgICAgICAgICAgY29uc3QgZmllbGRJZCA9IGNlbGxEb20uZ2V0QXR0cmlidXRlKCdmaWVsZElkJyk7XG4gICAgICAgICAgICBjb25zdCByZWNvcmRJZCA9IGNlbGxEb20uZ2V0QXR0cmlidXRlKCdyZWNvcmRJZCcpO1xuICAgICAgICAgICAgZmllbGRJZCAmJiByZWNvcmRJZCAmJiB0aGlzLnNlbGVjdENlbGxzKFtyZWNvcmRJZCwgZmllbGRJZF0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2xEb20gJiYgIWZpZWxkQWN0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZElkID0gY29sRG9tLmdldEF0dHJpYnV0ZSgnZmllbGRJZCcpO1xuICAgICAgICAgICAgZmllbGRJZCAmJiB0aGlzLnNlbGVjdEZpZWxkKGZpZWxkSWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY2VsbERvbSAmJiAhY29sRG9tICYmICFjaGVja2JveCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VsZWN0Q2VsbHMoc3RhcnRDZWxsOiBBSVJlY29yZEZpZWxkSWRQYXRoLCBlbmRDZWxsPzogQUlSZWNvcmRGaWVsZElkUGF0aCkge1xuICAgICAgICBjb25zdCBbc3RhcnRSZWNvcmRJZCwgc3RhcnRGaWVsZElkXSA9IHN0YXJ0Q2VsbDtcbiAgICAgICAgY29uc3QgcmVjb3JkcyA9IHRoaXMuYWlUYWJsZS5jb250ZXh0IS5saW5lYXJSb3dzKCk7XG4gICAgICAgIGNvbnN0IGZpZWxkcyA9IEFJVGFibGUuZ2V0VmlzaWJsZUZpZWxkcyh0aGlzLmFpVGFibGUpO1xuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAgICAgaWYgKCFlbmRDZWxsKSB7XG4gICAgICAgICAgICBzZWxlY3RlZENlbGxzLmFkZChgJHtzdGFydFJlY29yZElkfToke3N0YXJ0RmllbGRJZH1gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IFtlbmRSZWNvcmRJZCwgZW5kRmllbGRJZF0gPSBlbmRDZWxsO1xuXG4gICAgICAgICAgICBjb25zdCBzdGFydFJvd0luZGV4ID0gdGhpcy5haVRhYmxlLmNvbnRleHQhLnZpc2libGVSb3dzSW5kZXhNYXAoKS5nZXQoc3RhcnRSZWNvcmRJZCkhO1xuICAgICAgICAgICAgY29uc3QgZW5kUm93SW5kZXggPSB0aGlzLmFpVGFibGUuY29udGV4dCEudmlzaWJsZVJvd3NJbmRleE1hcCgpLmdldChlbmRSZWNvcmRJZCkhO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRDb2xJbmRleCA9IHRoaXMuYWlUYWJsZS5jb250ZXh0IS52aXNpYmxlQ29sdW1uc0luZGV4TWFwKCkuZ2V0KHN0YXJ0RmllbGRJZCkhO1xuICAgICAgICAgICAgY29uc3QgZW5kQ29sSW5kZXggPSB0aGlzLmFpVGFibGUuY29udGV4dCEudmlzaWJsZUNvbHVtbnNJbmRleE1hcCgpLmdldChlbmRGaWVsZElkKSE7XG5cbiAgICAgICAgICAgIGNvbnN0IG1pblJvd0luZGV4ID0gTWF0aC5taW4oc3RhcnRSb3dJbmRleCwgZW5kUm93SW5kZXgpO1xuICAgICAgICAgICAgY29uc3QgbWF4Um93SW5kZXggPSBNYXRoLm1heChzdGFydFJvd0luZGV4LCBlbmRSb3dJbmRleCk7XG4gICAgICAgICAgICBjb25zdCBtaW5Db2xJbmRleCA9IE1hdGgubWluKHN0YXJ0Q29sSW5kZXgsIGVuZENvbEluZGV4KTtcbiAgICAgICAgICAgIGNvbnN0IG1heENvbEluZGV4ID0gTWF0aC5tYXgoc3RhcnRDb2xJbmRleCwgZW5kQ29sSW5kZXgpO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gbWluUm93SW5kZXg7IGkgPD0gbWF4Um93SW5kZXg7IGkrKykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSBtaW5Db2xJbmRleDsgaiA8PSBtYXhDb2xJbmRleDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2VsbHMuYWRkKGAke3JlY29yZHNbaV0uX2lkfToke2ZpZWxkc1tqXS5faWR9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICB0aGlzLnNldEFjdGl2ZUNlbGwoc3RhcnRDZWxsKTtcbiAgICAgICAgdGhpcy5haVRhYmxlLnNlbGVjdGlvbigpLnNlbGVjdGVkQ2VsbHMgPSBzZWxlY3RlZENlbGxzO1xuICAgIH1cbn1cbiJdfQ==
150
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZWN0aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9ncmlkL3NyYy9zZXJ2aWNlcy9zZWxlY3Rpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUF1QixPQUFPLEVBQW9CLFFBQVEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNuRixPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxVQUFVLENBQUM7O0FBR2pELE1BQU0sT0FBTywyQkFBMkI7SUFZcEM7UUFUQSxtQkFBYyxHQUFHLFFBQVEsQ0FBQyxHQUFHLEVBQUU7WUFDM0IsTUFBTSxlQUFlLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsQ0FBQyxlQUFlLENBQUM7WUFDakUsT0FBTyxlQUFlLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTTtnQkFDekQsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLEdBQUc7Z0JBQzNCLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxLQUFLLENBQUM7b0JBQzFCLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJO29CQUM1QixDQUFDLENBQUMscUJBQXFCLENBQUMsT0FBTyxDQUFDO1FBQzFDLENBQUMsQ0FBQyxDQUFDO0lBRVksQ0FBQztJQUVoQixVQUFVLENBQUMsT0FBZ0I7UUFDdkIsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDdkIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDO1lBQzVCLElBQUksRUFBRSxRQUFRLENBQUMsSUFBSTtZQUNuQixTQUFTLEVBQUUsSUFBSSxHQUFHLEVBQUU7U0FDdkIsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVELGNBQWM7UUFD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OytHQTFKUSwyQkFBMkI7bUhBQTNCLDJCQUEyQjs7NEZBQTNCLDJCQUEyQjtrQkFEdkMsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXB1dGVkLCBJbmplY3RhYmxlLCBzaWduYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFJUmVjb3JkRmllbGRJZFBhdGgsIEFJVGFibGUsIEFJVGFibGVEcmFnU3RhdGUsIERyYWdUeXBlIH0gZnJvbSAnLi4vY29yZSc7XG5pbXBvcnQgeyBBSVRhYmxlU2VsZWN0QWxsU3RhdGUgfSBmcm9tICcuLi90eXBlcyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBBSVRhYmxlR3JpZFNlbGVjdGlvblNlcnZpY2Uge1xuICAgIGFpVGFibGUhOiBBSVRhYmxlO1xuXG4gICAgc2VsZWN0QWxsU3RhdGUgPSBjb21wdXRlZCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUmVjb3JkcyA9IHRoaXMuYWlUYWJsZS5zZWxlY3Rpb24oKS5zZWxlY3RlZFJlY29yZHM7XG4gICAgICAgIHJldHVybiBzZWxlY3RlZFJlY29yZHMuc2l6ZSA9PT0gdGhpcy5haVRhYmxlLnJlY29yZHMoKS5sZW5ndGhcbiAgICAgICAgICAgID8gQUlUYWJsZVNlbGVjdEFsbFN0YXRlLmFsbFxuICAgICAgICAgICAgOiBzZWxlY3RlZFJlY29yZHMuc2l6ZSA9PT0gMFxuICAgICAgICAgICAgICA/IEFJVGFibGVTZWxlY3RBbGxTdGF0ZS5ub25lXG4gICAgICAgICAgICAgIDogQUlUYWJsZVNlbGVjdEFsbFN0YXRlLnBhcnRpYWw7XG4gICAgfSk7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgICBpbml0aWFsaXplKGFpVGFibGU6IEFJVGFibGUpIHtcbiAgICAgICAgdGhpcy5haVRhYmxlID0gYWlUYWJsZTtcbiAgICAgICAgdGhpcy5haVRhYmxlLmRyYWdTdGF0ZSA9IHNpZ25hbCh7XG4gICAgICAgICAgICB0eXBlOiBEcmFnVHlwZS5ub25lLFxuICAgICAgICAgICAgc291cmNlSWRzOiBuZXcgU2V0KClcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgY2xlYXJTZWxlY3Rpb24oKSB7XG4gICAgICAgIHRoaXMuYWlUYWJsZS5zZWxlY3Rpb24uc2V0KHtcbiAgICAgICAgICAgIHNlbGVjdGVkUmVjb3JkczogbmV3IFNldCgpLFxuICAgICAgICAgICAgc2VsZWN0ZWRGaWVsZHM6IG5ldyBTZXQoKSxcbiAgICAgICAgICAgIHNlbGVjdGVkQ2VsbHM6IG5ldyBTZXQoKSxcbiAgICAgICAgICAgIGFjdGl2ZUNlbGw6IG51bGwsXG4gICAgICAgICAgICBzZWxlY3RBbGxTdGF0ZTogQUlUYWJsZVNlbGVjdEFsbFN0YXRlLm5vbmVcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2V0QWN0aXZlQ2VsbChhY3RpdmVDZWxsOiBBSVJlY29yZEZpZWxkSWRQYXRoKSB7XG4gICAgICAgIHRoaXMuYWlUYWJsZS5zZWxlY3Rpb24oKS5hY3RpdmVDZWxsID0gYWN0aXZlQ2VsbDtcbiAgICB9XG5cbiAgICBzZWxlY3RGaWVsZChmaWVsZElkOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuYWlUYWJsZS5zZWxlY3Rpb24oKS5zZWxlY3RlZEZpZWxkcy5oYXMoZmllbGRJZCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICAgIHRoaXMuYWlUYWJsZS5zZWxlY3Rpb24oKS5zZWxlY3RlZEZpZWxkcy5hZGQoZmllbGRJZCk7XG4gICAgfVxuXG4gICAgZ2V0IHNlbGVjdGVkRmllbGRzKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5haVRhYmxlLnNlbGVjdGlvbigpLnNlbGVjdGVkRmllbGRzO1xuICAgIH1cblxuICAgIGdldCBzZWxlY3RlZFJlY29yZHMoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFpVGFibGUuc2VsZWN0aW9uKCkuc2VsZWN0ZWRSZWNvcmRzO1xuICAgIH1cblxuICAgIGRyYWcoY29uZmlnOiBBSVRhYmxlRHJhZ1N0YXRlKSB7XG4gICAgICAgIHRoaXMuYWlUYWJsZS5kcmFnU3RhdGUhLnNldChjb25maWcpO1xuICAgIH1cblxuICAgIGdldERyYWdTdGF0ZVR5cGUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmFpVGFibGUuZHJhZ1N0YXRlPy4oKT8udHlwZTtcbiAgICB9XG5cbiAgICBjbGVhckRyYWcoKSB7XG4gICAgICAgIHRoaXMuYWlUYWJsZS5kcmFnU3RhdGUhLnNldCh7XG4gICAgICAgICAgICB0eXBlOiBEcmFnVHlwZS5ub25lLFxuICAgICAgICAgICAgc291cmNlSWRzOiBuZXcgU2V0KClcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2VsZWN0UmVjb3JkKHJlY29yZElkOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuYWlUYWJsZS5zZWxlY3Rpb24oKS5zZWxlY3RlZFJlY29yZHMuaGFzKHJlY29yZElkKSkge1xuICAgICAgICAgICAgdGhpcy5haVRhYmxlLnNlbGVjdGlvbigpLnNlbGVjdGVkUmVjb3Jkcy5kZWxldGUocmVjb3JkSWQpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5haVRhYmxlLnNlbGVjdGlvbigpLnNlbGVjdGVkUmVjb3Jkcy5hZGQocmVjb3JkSWQpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNlbGVjdGVkUmVjb3JkcyA9IHRoaXMuYWlUYWJsZS5zZWxlY3Rpb24oKS5zZWxlY3RlZFJlY29yZHM7XG4gICAgICAgIHRoaXMuYWlUYWJsZS5zZWxlY3Rpb24uc2V0KHtcbiAgICAgICAgICAgIHNlbGVjdGVkUmVjb3Jkczogc2VsZWN0ZWRSZWNvcmRzLFxuICAgICAgICAgICAgc2VsZWN0ZWRGaWVsZHM6IG5ldyBTZXQoKSxcbiAgICAgICAgICAgIHNlbGVjdGVkQ2VsbHM6IG5ldyBTZXQoKSxcbiAgICAgICAgICAgIGFjdGl2ZUNlbGw6IG51bGwsXG4gICAgICAgICAgICBzZWxlY3RBbGxTdGF0ZTogdGhpcy5zZWxlY3RBbGxTdGF0ZSgpXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHRvZ2dsZVNlbGVjdEFsbChjaGVja2VkOiBib29sZWFuKSB7XG4gICAgICAgIGlmIChjaGVja2VkKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5haVRhYmxlLnJlY29yZHMoKS5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFpVGFibGUuc2VsZWN0aW9uLnNldCh7XG4gICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuYWlUYWJsZS5zZWxlY3Rpb24oKSxcbiAgICAgICAgICAgICAgICAgICAgc2VsZWN0QWxsU3RhdGU6IEFJVGFibGVTZWxlY3RBbGxTdGF0ZS5hbGxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5haVRhYmxlLnJlY29yZHMoKS5mb3JFYWNoKChpdGVtKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0UmVjb3JkKGl0ZW0uX2lkKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHVwZGF0ZVNlbGVjdChldmVudDogTW91c2VFdmVudCkge1xuICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudD8udGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgICAgICBpZiAoIXRhcmdldCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGNlbGxEb20gPSB0YXJnZXQuY2xvc2VzdCgnLmdyaWQtY2VsbCcpO1xuICAgICAgICBjb25zdCBjb2xEb20gPSB0YXJnZXQuY2xvc2VzdCgnLmdyaWQtZmllbGQnKTtcbiAgICAgICAgY29uc3QgY2hlY2tib3ggPSB0YXJnZXQudGFnTmFtZSA9PT0gJ0lOUFVUJyAmJiAodGFyZ2V0IGFzIEhUTUxJbnB1dEVsZW1lbnQpLnR5cGUgPT09ICdjaGVja2JveCcgJiYgdGFyZ2V0LmNsb3Nlc3QoJy5ncmlkLWNoZWNrYm94Jyk7XG4gICAgICAgIGNvbnN0IGZpZWxkQWN0aW9uID0gdGFyZ2V0LmNsb3Nlc3QoJy5ncmlkLWZpZWxkLWFjdGlvbicpO1xuICAgICAgICBpZiAoY2VsbERvbSkge1xuICAgICAgICAgICAgY29uc3QgZmllbGRJZCA9IGNlbGxEb20uZ2V0QXR0cmlidXRlKCdmaWVsZElkJyk7XG4gICAgICAgICAgICBjb25zdCByZWNvcmRJZCA9IGNlbGxEb20uZ2V0QXR0cmlidXRlKCdyZWNvcmRJZCcpO1xuICAgICAgICAgICAgZmllbGRJZCAmJiByZWNvcmRJZCAmJiB0aGlzLnNlbGVjdENlbGxzKFtyZWNvcmRJZCwgZmllbGRJZF0pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb2xEb20gJiYgIWZpZWxkQWN0aW9uKSB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZElkID0gY29sRG9tLmdldEF0dHJpYnV0ZSgnZmllbGRJZCcpO1xuICAgICAgICAgICAgZmllbGRJZCAmJiB0aGlzLnNlbGVjdEZpZWxkKGZpZWxkSWQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY2VsbERvbSAmJiAhY29sRG9tICYmICFjaGVja2JveCkge1xuICAgICAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2VsZWN0Q2VsbHMoc3RhcnRDZWxsOiBBSVJlY29yZEZpZWxkSWRQYXRoLCBlbmRDZWxsPzogQUlSZWNvcmRGaWVsZElkUGF0aCkge1xuICAgICAgICBjb25zdCBbc3RhcnRSZWNvcmRJZCwgc3RhcnRGaWVsZElkXSA9IHN0YXJ0Q2VsbDtcbiAgICAgICAgY29uc3QgcmVjb3JkcyA9IHRoaXMuYWlUYWJsZS5jb250ZXh0IS5saW5lYXJSb3dzKCk7XG4gICAgICAgIGNvbnN0IGZpZWxkcyA9IEFJVGFibGUuZ2V0VmlzaWJsZUZpZWxkcyh0aGlzLmFpVGFibGUpO1xuICAgICAgICBjb25zdCBzZWxlY3RlZENlbGxzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgICAgICAgaWYgKCFlbmRDZWxsKSB7XG4gICAgICAgICAgICBzZWxlY3RlZENlbGxzLmFkZChgJHtzdGFydFJlY29yZElkfToke3N0YXJ0RmllbGRJZH1gKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IFtlbmRSZWNvcmRJZCwgZW5kRmllbGRJZF0gPSBlbmRDZWxsO1xuXG4gICAgICAgICAgICBjb25zdCBzdGFydFJvd0luZGV4ID0gdGhpcy5haVRhYmxlLmNvbnRleHQhLnZpc2libGVSb3dzSW5kZXhNYXAoKS5nZXQoc3RhcnRSZWNvcmRJZCkhO1xuICAgICAgICAgICAgY29uc3QgZW5kUm93SW5kZXggPSB0aGlzLmFpVGFibGUuY29udGV4dCEudmlzaWJsZVJvd3NJbmRleE1hcCgpLmdldChlbmRSZWNvcmRJZCkhO1xuICAgICAgICAgICAgY29uc3Qgc3RhcnRDb2xJbmRleCA9IHRoaXMuYWlUYWJsZS5jb250ZXh0IS52aXNpYmxlQ29sdW1uc0luZGV4TWFwKCkuZ2V0KHN0YXJ0RmllbGRJZCkhO1xuICAgICAgICAgICAgY29uc3QgZW5kQ29sSW5kZXggPSB0aGlzLmFpVGFibGUuY29udGV4dCEudmlzaWJsZUNvbHVtbnNJbmRleE1hcCgpLmdldChlbmRGaWVsZElkKSE7XG5cbiAgICAgICAgICAgIGNvbnN0IG1pblJvd0luZGV4ID0gTWF0aC5taW4oc3RhcnRSb3dJbmRleCwgZW5kUm93SW5kZXgpO1xuICAgICAgICAgICAgY29uc3QgbWF4Um93SW5kZXggPSBNYXRoLm1heChzdGFydFJvd0luZGV4LCBlbmRSb3dJbmRleCk7XG4gICAgICAgICAgICBjb25zdCBtaW5Db2xJbmRleCA9IE1hdGgubWluKHN0YXJ0Q29sSW5kZXgsIGVuZENvbEluZGV4KTtcbiAgICAgICAgICAgIGNvbnN0IG1heENvbEluZGV4ID0gTWF0aC5tYXgoc3RhcnRDb2xJbmRleCwgZW5kQ29sSW5kZXgpO1xuXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gbWluUm93SW5kZXg7IGkgPD0gbWF4Um93SW5kZXg7IGkrKykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGogPSBtaW5Db2xJbmRleDsgaiA8PSBtYXhDb2xJbmRleDsgaisrKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlbGVjdGVkQ2VsbHMuYWRkKGAke3JlY29yZHNbaV0uX2lkfToke2ZpZWxkc1tqXS5faWR9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5jbGVhclNlbGVjdGlvbigpO1xuICAgICAgICB0aGlzLnNldEFjdGl2ZUNlbGwoc3RhcnRDZWxsKTtcbiAgICAgICAgdGhpcy5haVRhYmxlLnNlbGVjdGlvbigpLnNlbGVjdGVkQ2VsbHMgPSBzZWxlY3RlZENlbGxzO1xuICAgIH1cbn1cbiJdfQ==