@guiexpert/table 1.0.11 → 1.0.13

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 (145) hide show
  1. package/README.md +3 -3
  2. package/index.cjs +314 -0
  3. package/index.js +3721 -0
  4. package/lib/table/data/tablemodel/areamodel/async-area-model-object-array.d.ts +28 -0
  5. package/package.json +14 -13
  6. package/esm2022/guiexpert-table.mjs +0 -5
  7. package/esm2022/index.mjs +0 -140
  8. package/esm2022/lib/table/action/action-id.type.mjs +0 -20
  9. package/esm2022/lib/table/action/on-action-triggered.if.mjs +0 -2
  10. package/esm2022/lib/table/action/osx-shortcut-actionId-mapping.mjs +0 -21
  11. package/esm2022/lib/table/action/shortcut-actionid-mapping.type.mjs +0 -2
  12. package/esm2022/lib/table/action/shortcut.service.mjs +0 -114
  13. package/esm2022/lib/table/action/windows-shortcut-actionId-mapping.mjs +0 -19
  14. package/esm2022/lib/table/checkbox/checkbox-model.if.mjs +0 -2
  15. package/esm2022/lib/table/checkbox/checkbox-model.mjs +0 -50
  16. package/esm2022/lib/table/checkbox/tree-checkbox-model.mjs +0 -107
  17. package/esm2022/lib/table/color/color-rgb.if.mjs +0 -2
  18. package/esm2022/lib/table/color/color-rgb.mjs +0 -11
  19. package/esm2022/lib/table/color/ge-css-color-util.mjs +0 -26
  20. package/esm2022/lib/table/color/three-color-gradient-arg.if.mjs +0 -2
  21. package/esm2022/lib/table/color/three-color-gradient-arg.mjs +0 -17
  22. package/esm2022/lib/table/color/two-color-gradient-arg.if.mjs +0 -2
  23. package/esm2022/lib/table/color/two-color-gradient-arg.mjs +0 -13
  24. package/esm2022/lib/table/css-vars.mjs +0 -238
  25. package/esm2022/lib/table/data/chunk/chunk.data-event.if.mjs +0 -2
  26. package/esm2022/lib/table/data/chunk/chunk.data-event.mjs +0 -12
  27. package/esm2022/lib/table/data/chunk/request-chunk.if.mjs +0 -2
  28. package/esm2022/lib/table/data/chunk/request-chunk.mjs +0 -22
  29. package/esm2022/lib/table/data/common/aligns.mjs +0 -19
  30. package/esm2022/lib/table/data/common/area-map-factory.mjs +0 -7
  31. package/esm2022/lib/table/data/common/area-map.mjs +0 -11
  32. package/esm2022/lib/table/data/common/area-map.type.mjs +0 -2
  33. package/esm2022/lib/table/data/common/args-adjust-columns-to-row-parent-params.mjs +0 -2
  34. package/esm2022/lib/table/data/common/args-render-cell-div.mjs +0 -2
  35. package/esm2022/lib/table/data/common/boolean-function.mjs +0 -3
  36. package/esm2022/lib/table/data/common/cell-range.mjs +0 -36
  37. package/esm2022/lib/table/data/common/checkbox-column-def.mjs +0 -13
  38. package/esm2022/lib/table/data/common/checked-type.mjs +0 -2
  39. package/esm2022/lib/table/data/common/event/ge-cell-indices.mjs +0 -9
  40. package/esm2022/lib/table/data/common/event/ge-key-event.mjs +0 -9
  41. package/esm2022/lib/table/data/common/event/ge-model-change-event.mjs +0 -11
  42. package/esm2022/lib/table/data/common/event/ge-mouse-event.mjs +0 -30
  43. package/esm2022/lib/table/data/common/event/input/table-cell-update-event.if.mjs +0 -2
  44. package/esm2022/lib/table/data/common/event/input/table-cell-update-event.mjs +0 -13
  45. package/esm2022/lib/table/data/common/filter-function.mjs +0 -2
  46. package/esm2022/lib/table/data/common/get-t.mjs +0 -2
  47. package/esm2022/lib/table/data/common/index-and-px.mjs +0 -9
  48. package/esm2022/lib/table/data/common/size.if.mjs +0 -2
  49. package/esm2022/lib/table/data/common/size.mjs +0 -9
  50. package/esm2022/lib/table/data/common/sizes.mjs +0 -33
  51. package/esm2022/lib/table/data/common/sort-item.mjs +0 -9
  52. package/esm2022/lib/table/data/common/sort-state.type.mjs +0 -2
  53. package/esm2022/lib/table/data/common/tree-arrow.type.mjs +0 -2
  54. package/esm2022/lib/table/data/common/tree-row-if.mjs +0 -2
  55. package/esm2022/lib/table/data/common/tree-row.mjs +0 -19
  56. package/esm2022/lib/table/data/common/value-label.if.mjs +0 -2
  57. package/esm2022/lib/table/data/common/value-label.mjs +0 -9
  58. package/esm2022/lib/table/data/div-scope.type.mjs +0 -2
  59. package/esm2022/lib/table/data/event/mouse-target-data.mjs +0 -36
  60. package/esm2022/lib/table/data/geo-data.mjs +0 -15
  61. package/esm2022/lib/table/data/options/auto-restore-options.if.mjs +0 -2
  62. package/esm2022/lib/table/data/options/auto-restore-options.mjs +0 -40
  63. package/esm2022/lib/table/data/options/default-row-heights.if.mjs +0 -2
  64. package/esm2022/lib/table/data/options/default-row-heights.mjs +0 -11
  65. package/esm2022/lib/table/data/options/icon.if.mjs +0 -2
  66. package/esm2022/lib/table/data/options/icon.mjs +0 -11
  67. package/esm2022/lib/table/data/options/sorted-options.if.mjs +0 -2
  68. package/esm2022/lib/table/data/options/sorted-options.mjs +0 -12
  69. package/esm2022/lib/table/data/options/table-options.if.mjs +0 -2
  70. package/esm2022/lib/table/data/options/table-options.mjs +0 -44
  71. package/esm2022/lib/table/data/options/tree-options.if.mjs +0 -2
  72. package/esm2022/lib/table/data/options/tree-options.mjs +0 -14
  73. package/esm2022/lib/table/data/side-ident.type.mjs +0 -2
  74. package/esm2022/lib/table/data/table-model-and-options.if.mjs +0 -2
  75. package/esm2022/lib/table/data/table-model-and-options.mjs +0 -9
  76. package/esm2022/lib/table/data/tablemodel/area-ident.type.mjs +0 -14
  77. package/esm2022/lib/table/data/tablemodel/areamodel/abstract-area-model.mjs +0 -137
  78. package/esm2022/lib/table/data/tablemodel/areamodel/area-model-array-of-arrays.mjs +0 -47
  79. package/esm2022/lib/table/data/tablemodel/areamodel/area-model-cell-groups.mjs +0 -163
  80. package/esm2022/lib/table/data/tablemodel/areamodel/area-model-hidden.mjs +0 -84
  81. package/esm2022/lib/table/data/tablemodel/areamodel/area-model-object-array-with-columndefs.mjs +0 -15
  82. package/esm2022/lib/table/data/tablemodel/areamodel/area-model-object-array.mjs +0 -88
  83. package/esm2022/lib/table/data/tablemodel/areamodel/area-model-tree.mjs +0 -181
  84. package/esm2022/lib/table/data/tablemodel/areamodel/area-model.if.mjs +0 -2
  85. package/esm2022/lib/table/data/tablemodel/areamodel/area-model.mjs +0 -76
  86. package/esm2022/lib/table/data/tablemodel/areamodel/col-and-rowspan-model.mjs +0 -51
  87. package/esm2022/lib/table/data/tablemodel/areamodel/has-default-row-height-if.mjs +0 -2
  88. package/esm2022/lib/table/data/tablemodel/cellgroup/cell-group-ext.mjs +0 -133
  89. package/esm2022/lib/table/data/tablemodel/cellgroup/cell-group.if.mjs +0 -2
  90. package/esm2022/lib/table/data/tablemodel/cellgroup/cell-group.mjs +0 -18
  91. package/esm2022/lib/table/data/tablemodel/cellgroup/cellgroup-factory.mjs +0 -110
  92. package/esm2022/lib/table/data/tablemodel/column/column-def.if.mjs +0 -2
  93. package/esm2022/lib/table/data/tablemodel/column/column-def.mjs +0 -52
  94. package/esm2022/lib/table/data/tablemodel/padding.mjs +0 -13
  95. package/esm2022/lib/table/data/tablemodel/table-model.if.mjs +0 -2
  96. package/esm2022/lib/table/data/tablemodel/table-model.mjs +0 -308
  97. package/esm2022/lib/table/ele-scope.mjs +0 -199
  98. package/esm2022/lib/table/event-adapter.mjs +0 -17
  99. package/esm2022/lib/table/event-listener.if.mjs +0 -2
  100. package/esm2022/lib/table/factory/table-factory.mjs +0 -186
  101. package/esm2022/lib/table/factory/tree-factory.mjs +0 -32
  102. package/esm2022/lib/table/focus/focus-model.if.mjs +0 -2
  103. package/esm2022/lib/table/focus/focus-model.mjs +0 -33
  104. package/esm2022/lib/table/focus/focus.type.mjs +0 -2
  105. package/esm2022/lib/table/input-handler.mjs +0 -25
  106. package/esm2022/lib/table/mouse-handler.mjs +0 -196
  107. package/esm2022/lib/table/render-scope.mjs +0 -719
  108. package/esm2022/lib/table/renderer/cell-group-ext-cell-renderer.mjs +0 -8
  109. package/esm2022/lib/table/renderer/cell-render.if.mjs +0 -2
  110. package/esm2022/lib/table/renderer/checkbox-boolean-property-cell-renderer.mjs +0 -47
  111. package/esm2022/lib/table/renderer/checkbox-cell-renderer.mjs +0 -22
  112. package/esm2022/lib/table/renderer/date-to-int-date-cell-renderer.mjs +0 -24
  113. package/esm2022/lib/table/renderer/date-to-iso-cell-renderer.mjs +0 -9
  114. package/esm2022/lib/table/renderer/date-to-locale-date-cell-renderer.mjs +0 -9
  115. package/esm2022/lib/table/renderer/date-to-tec-cell-renderer.mjs +0 -12
  116. package/esm2022/lib/table/renderer/edit/edit-cell-renderer.type.mjs +0 -2
  117. package/esm2022/lib/table/renderer/edit/edit-input-pipe-for-number.mjs +0 -4
  118. package/esm2022/lib/table/renderer/edit/edit-input-pipe.if.mjs +0 -2
  119. package/esm2022/lib/table/renderer/edit/input-cell-renderer.mjs +0 -23
  120. package/esm2022/lib/table/renderer/edit/select-cell-renderer.mjs +0 -36
  121. package/esm2022/lib/table/renderer/male-female-to-icon-cell-renderer.mjs +0 -12
  122. package/esm2022/lib/table/renderer/number-cell-renderer.mjs +0 -21
  123. package/esm2022/lib/table/renderer/progress-bar-cell-renderer.mjs +0 -44
  124. package/esm2022/lib/table/renderer/renderer-cleanup-fn.type.mjs +0 -2
  125. package/esm2022/lib/table/renderer/renderer.mjs +0 -7
  126. package/esm2022/lib/table/renderer/star-rating-cell-renderer.mjs +0 -27
  127. package/esm2022/lib/table/renderer/true-false-cell-renderer.mjs +0 -15
  128. package/esm2022/lib/table/selection/selection-model.if.mjs +0 -2
  129. package/esm2022/lib/table/selection/selection-model.mjs +0 -99
  130. package/esm2022/lib/table/selection/selection-service.mjs +0 -101
  131. package/esm2022/lib/table/selection/selection.type.mjs +0 -2
  132. package/esm2022/lib/table/service/abstract-store-state.service.mjs +0 -50
  133. package/esm2022/lib/table/service/convenience-dom.service.mjs +0 -405
  134. package/esm2022/lib/table/service/data/collapsed-expanded.data.mjs +0 -13
  135. package/esm2022/lib/table/service/data/html-style.type.mjs +0 -2
  136. package/esm2022/lib/table/service/dom-service.if.mjs +0 -2
  137. package/esm2022/lib/table/service/ge-filter.service.mjs +0 -98
  138. package/esm2022/lib/table/service/simple-dom-service.mjs +0 -34
  139. package/esm2022/lib/table/service/sorter.service.mjs +0 -27
  140. package/esm2022/lib/table/service/store-state-collapsed-expand.service.mjs +0 -57
  141. package/esm2022/lib/table/service/store-state-scroll-pos.service.mjs +0 -29
  142. package/esm2022/lib/table/service/store-state-sorting.service.mjs +0 -29
  143. package/esm2022/lib/table/service/tree-row.service.mjs +0 -23
  144. package/esm2022/lib/table/table-api.mjs +0 -42
  145. package/esm2022/lib/table/table-scope.mjs +0 -364
@@ -1,364 +0,0 @@
1
- import { GeMouseEvent } from "./data/common/event/ge-mouse-event";
2
- import { ConvenienceDomService } from "./service/convenience-dom.service";
3
- import { MouseHandler } from "./mouse-handler";
4
- import { TableApi } from "./table-api";
5
- import { AreaModelTree } from "./data/tablemodel/areamodel/area-model-tree";
6
- import { StoreStateScrollPosService } from "./service/store-state-scroll-pos.service";
7
- import { StoreStateCollapsedExpandService } from "./service/store-state-collapsed-expand.service";
8
- import { StoreStateSortingService } from "./service/store-state-sorting.service";
9
- import { RenderScope } from "./render-scope";
10
- import { SortItem } from "./data/common/sort-item";
11
- import { InputHandler } from "./input-handler";
12
- import { GeModelChangeEvent } from "./data/common/event/ge-model-change-event";
13
- import { SelectionService } from "./selection/selection-service";
14
- import { ShortcutService } from "./action/shortcut.service";
15
- import { EventAdapter } from "./event-adapter";
16
- export class TableScope extends RenderScope {
17
- eventListener;
18
- mouseHandler;
19
- inputHandler;
20
- shortcutService;
21
- storeStateCollapsedExpandService;
22
- storeSortingService;
23
- selectionService = new SelectionService(this);
24
- keyEvent;
25
- api = new TableApi(this);
26
- mouseStartAction = "";
27
- mouseStartWidth = -1;
28
- mouseStartColumnIndex = -1;
29
- dragFrom = -1;
30
- dragTo = -1;
31
- constructor(hostElement, tableModel, domService, tableOptions, eventListener) {
32
- super(hostElement, tableModel, new ConvenienceDomService(domService), tableOptions);
33
- this.eventListener = eventListener;
34
- if (!eventListener) {
35
- this.eventListener = new EventAdapter();
36
- }
37
- if (this.tableOptions?.autoRestoreOptions) {
38
- const autoRestoreOptions = this.tableOptions.autoRestoreOptions;
39
- const keyFn = autoRestoreOptions.getStorageKeyFn;
40
- if (keyFn) {
41
- if (autoRestoreOptions.autoRestoreScrollPosition) {
42
- this.storeScrollPosStateService = new StoreStateScrollPosService(keyFn);
43
- }
44
- if (autoRestoreOptions.autoRestoreCollapsedExpandedState) {
45
- this.storeStateCollapsedExpandService = new StoreStateCollapsedExpandService(keyFn);
46
- }
47
- if (autoRestoreOptions.autoRestoreSortingState) {
48
- this.storeSortingService = new StoreStateSortingService(keyFn);
49
- }
50
- }
51
- }
52
- this.mouseHandler = new MouseHandler(this);
53
- this.inputHandler = new InputHandler(this);
54
- this.shortcutService = new ShortcutService(this);
55
- this.shortcutService.addListener(this.selectionService);
56
- }
57
- onActionTriggered(actionId) {
58
- if (actionId === "NAVIGATE_DOWN") {
59
- if (this.changeFocusCell(0, 1)) {
60
- return true;
61
- }
62
- }
63
- if (actionId === "NAVIGATE_UP") {
64
- if (this.changeFocusCell(0, -1)) {
65
- return true;
66
- }
67
- }
68
- if (actionId === "NAVIGATE_LEFT") {
69
- if (this.changeFocusCell(-1, 0)) {
70
- return true;
71
- }
72
- }
73
- if (actionId === "NAVIGATE_RIGHT") {
74
- if (this.changeFocusCell(1, 0)) {
75
- return true;
76
- }
77
- }
78
- if (actionId === "START_EDITING") {
79
- if (this.getFocusModel) {
80
- const fm = this.getFocusModel();
81
- if (fm) {
82
- const [rowIdx, colIdx] = fm.getFocus();
83
- if (this.tableModel.getBodyModel().isEditable(rowIdx, colIdx)) {
84
- this.clearSelection();
85
- this.initRenderEditor(rowIdx, colIdx);
86
- }
87
- }
88
- return true;
89
- }
90
- }
91
- return false;
92
- }
93
- updateModelValueAfterEdit(areaIdent, rowIndex, columnIndex, value) {
94
- if (areaIdent === "body") {
95
- const bodyAreaModel = this.tableModel.getAreaModel(areaIdent);
96
- const ok = bodyAreaModel.setValue(rowIndex, columnIndex, value);
97
- if (ok) {
98
- this.resetEditorRenderer();
99
- this.repaint();
100
- this.eventListener.onModelChanged(GeModelChangeEvent.createSingle(rowIndex, columnIndex));
101
- this.hostElement.focus();
102
- }
103
- }
104
- }
105
- getApi() {
106
- return this.api;
107
- }
108
- /*
109
- * Called by the table component
110
- */
111
- firstInit() {
112
- this.tableModel.init();
113
- if (this.tableOptions?.externalFilterFunction) {
114
- this.externalFilterChanged(false);
115
- }
116
- this.autoRestoreCollapsedExpandedState();
117
- this.autoRestoreSortingState();
118
- this.resetSizeOfWrapperDiv();
119
- this.adjustContainersAndRows();
120
- this.autoRestoreScrollPosition();
121
- }
122
- createGeMouseEvent(mouseEvent) {
123
- const ret = new GeMouseEvent();
124
- ret.originalEvent = mouseEvent;
125
- if (mouseEvent) {
126
- const target = mouseEvent.target;
127
- [ret.areaIdent, ret.sideIdent] = this.getAreaAndSideIdentByAttr(target);
128
- ret.rowIndex = this.getNumberByAttr(target, "data-row-index");
129
- ret.columnIndex = this.getNumberByAttr(target, "data-col-index");
130
- ret.action = this.getStringByAttr(target, "data-ge-action");
131
- // const bodyY = mouseEvent.clientY - this.hostElement.offsetTop - this.areaHeaderCenter.parent.clientHeight;
132
- // const bodyX = mouseEvent.clientX - this.hostElement.offsetLeft - this.areaBodyWestGeo.width;
133
- if (ret.areaIdent) {
134
- const am = this.tableModel.getAreaModel(ret.areaIdent);
135
- ret.rowTop = am.getYPosByRowIndex(ret.rowIndex);
136
- }
137
- ret.columnLeft = this.tableModel.getXPosByColumnIndex(ret.columnIndex);
138
- if (mouseEvent.ctrlKey && mouseEvent.altKey) {
139
- const bodyY = mouseEvent.clientY - this.hostElement.offsetTop - this.areaHeaderCenter.parent.clientHeight;
140
- const bodyX = mouseEvent.clientX - this.hostElement.offsetLeft - this.areaBodyWestGeo.width;
141
- this.debugOnce(bodyX, bodyY);
142
- }
143
- }
144
- return ret;
145
- }
146
- onMouseDown(mouseEvent) {
147
- if (mouseEvent.columnIndex > -1
148
- && mouseEvent.action
149
- && ["resize-column", "drag-column"].includes(mouseEvent.action)) {
150
- this.mouseStartWidth = this.tableModel.getColumnWidth(mouseEvent.columnIndex);
151
- this.mouseStartAction = mouseEvent.action;
152
- this.mouseStartColumnIndex = mouseEvent.columnIndex;
153
- if (this.mouseStartAction === "drag-column") {
154
- this.dragFrom = this.mouseStartColumnIndex;
155
- }
156
- }
157
- }
158
- mouseDraggingOnFrame(mouseEvent) {
159
- this.eventListener.onMouseDragging(mouseEvent);
160
- this.mouseEvent = mouseEvent;
161
- if (this.mouseStartColumnIndex > -1
162
- && this.mouseStartAction === "resize-column"
163
- && this.tableOptions.columnsResizable) {
164
- this.resizeColumn(mouseEvent);
165
- }
166
- else if (this.mouseStartAction === "drag-column"
167
- && mouseEvent.columnIndex > -1
168
- && this.tableOptions.columnsDraggable) {
169
- this.draggingTargetColumnIndex = mouseEvent.columnIndex;
170
- this.dragTo = this.draggingTargetColumnIndex;
171
- if (this.dragFrom > -1 && this.dragTo > -1 && this.dragFrom !== this.dragTo) {
172
- this.tableModel.changeColumnOrder(this.dragFrom, this.dragTo);
173
- this.dragFrom = this.dragTo;
174
- this.resetSizeOfWrapperDiv();
175
- this.adjustContainersAndRows();
176
- }
177
- this.repaint();
178
- }
179
- }
180
- mouseDraggingEndOnFrame(mouseEvent) {
181
- this.eventListener.onMouseDraggingEnd(mouseEvent);
182
- this.draggingTargetColumnIndex = -1;
183
- if (this.mouseStartAction === "resize-column") {
184
- this.resizeColumn(mouseEvent);
185
- }
186
- else if (this.mouseStartAction === "drag-column") {
187
- this.repaint();
188
- }
189
- this.mouseStartWidth = -1;
190
- this.mouseStartColumnIndex = -1;
191
- this.dragFrom = -1;
192
- this.dragTo = -1;
193
- this.mouseStartAction = "";
194
- }
195
- mouseMove(mouseMoveEvent) {
196
- this.eventListener.onMouseMoved(mouseMoveEvent);
197
- this.adjustHoverRows(mouseMoveEvent);
198
- this.adjustHoverColumns(mouseMoveEvent);
199
- }
200
- contextmenu(mouseMoveEvent) {
201
- this.eventListener.onContextmenu(mouseMoveEvent);
202
- }
203
- toggleExpandCollapseAll(expand = true) {
204
- const bodyAreaModel = this.tableModel.getBodyModel();
205
- if (bodyAreaModel instanceof AreaModelTree) {
206
- const amt = bodyAreaModel;
207
- amt.toggleExpandCollapseAll(expand);
208
- this.repaint();
209
- this.storeStateCollapsedExpandService?.collapsedStateAll(expand);
210
- }
211
- }
212
- toggleRowCheckbox(rowIdx, _colIdx, areaIdent) {
213
- const areaModel = this.tableModel.getAreaModel(areaIdent);
214
- const state = areaModel.isRowChecked(rowIdx);
215
- const unsel = (state === undefined || state === "semi" || state === "none");
216
- areaModel.setRowChecked(rowIdx, unsel);
217
- this.repaint(); // TODO repaint cell only
218
- const selectedRows = areaModel.rowSelectionModel?.getCheckedRows();
219
- this.eventListener.onCheckboxChanged(selectedRows ? selectedRows : []);
220
- }
221
- onMouseClicked(evt, previousEvt) {
222
- let dirty = this.selectionService.onMouseClicked(evt, previousEvt);
223
- if (!dirty && this.getFocusModel) {
224
- const fm = this.getFocusModel();
225
- if (fm) {
226
- dirty = fm.hasChanged();
227
- fm.clearChanged();
228
- if (dirty) {
229
- this.resetEditorRenderer();
230
- }
231
- }
232
- }
233
- this.eventListener.onMouseClicked(evt);
234
- if (dirty) {
235
- this.debounce(this.repaint.bind(this), 10);
236
- }
237
- }
238
- externalFilterChanged(clearSelection = true) {
239
- const predictFn = this.tableOptions.externalFilterFunction;
240
- if (predictFn) {
241
- if (clearSelection) {
242
- this.clearSelectionModel();
243
- }
244
- this.tableModel.externalFilterChanged(predictFn);
245
- this.scrollViewport.scrollTo(0, 0);
246
- this.tableModel.recalcHeightAndPadding();
247
- this.resetSizeOfWrapperDiv();
248
- this.repaint();
249
- }
250
- }
251
- onHeaderDblClicked(event, _rowIdx, colIdx) {
252
- const colDef = this.tableModel.getColumnDef(colIdx);
253
- if (colDef?.sortable && colDef.sortable()) {
254
- event.preventDefault();
255
- event.stopPropagation();
256
- const states = colDef.sortStatesOrder ? colDef.sortStatesOrder : this.tableOptions.sortOrder;
257
- const currentState = colDef.sortState ?? "";
258
- const newState = states[(states.indexOf(currentState) + 1) % states.length];
259
- const sortItem = new SortItem(colIdx, newState);
260
- const done = this.tableModel.doSort([sortItem]);
261
- if (done) {
262
- this.tableModel.getColumnDefs()?.forEach(cd => cd.sortState = "");
263
- colDef.sortState = newState;
264
- }
265
- this.repaint();
266
- this.storeSortingService?.setSortItems([sortItem]);
267
- }
268
- }
269
- changeFocusCell(dx, dy) {
270
- if (!this.isEditing() && this.getFocusModel) {
271
- const fm = this.getFocusModel();
272
- if (fm) {
273
- const [rowIdx, colIdx] = fm.getFocus();
274
- fm.setFocus(rowIdx + dy, colIdx + dx);
275
- this.repaint();
276
- return true;
277
- }
278
- }
279
- return false;
280
- }
281
- resizeColumn(mouseEvent) {
282
- this.tableModel.setColumnWidth(this.mouseStartColumnIndex, this.mouseStartWidth + mouseEvent.draggingX);
283
- this.tableModel.recalcPadding();
284
- this.resetSizeOfWrapperDiv();
285
- this.adjustContainersAndRows();
286
- }
287
- clearSelectionModel() {
288
- if (this.getSelectionModel) {
289
- this.getSelectionModel()?.clear();
290
- }
291
- }
292
- debugOnce(bodyX, bodyY) {
293
- console.clear();
294
- console.info("this.hostElement.offsetTop", this.hostElement.offsetTop); // pageY of table tag
295
- console.info("this.hostElement.scrollHeight", this.hostElement.scrollHeight); // height of visible scroll area
296
- console.info("this.scrollViewportTop", this.scrollTop); // amount of px scrolled to top (initial : 0)
297
- console.info("this.areaHeaderCenter.parent.clientHeight", this.areaHeaderCenter.parent.clientHeight);
298
- console.info("bodyY", bodyY);
299
- console.info("bodyX", bodyX);
300
- console.info("rows", this.firstVisibleRowIndex);
301
- console.info("");
302
- console.info("this.tableModel", this.tableModel);
303
- console.info("");
304
- console.info("this.mouseMoveEvent.clientX", this.mouseHandler.mouseEvent?.clientX);
305
- console.info("this.hostElement.offsetLeft", this.hostElement.offsetLeft);
306
- console.info("this.areaBodyWestGeo.width", this.areaBodyWestGeo.width);
307
- }
308
- autoRestoreScrollPosition() {
309
- if (this.tableOptions?.autoRestoreOptions && this.storeScrollPosStateService) {
310
- const autoRestoreOptions = this.tableOptions.autoRestoreOptions;
311
- if (autoRestoreOptions.autoRestoreScrollPosition) {
312
- const scrollOffset = this.storeScrollPosStateService.getScrollOffset();
313
- if (scrollOffset) {
314
- this.scrollViewport.scrollTo(...scrollOffset);
315
- }
316
- }
317
- }
318
- }
319
- autoRestoreSortingState() {
320
- if (this.tableOptions?.autoRestoreOptions?.autoRestoreSortingState && this.storeSortingService) {
321
- const sortItems = this.storeSortingService.getSortItems();
322
- if (sortItems?.length) {
323
- const areaModel = this.tableModel.getBodyModel();
324
- areaModel.doSort(sortItems);
325
- }
326
- }
327
- }
328
- autoRestoreCollapsedExpandedState() {
329
- if (this.tableOptions?.autoRestoreOptions?.getRowId && this.storeStateCollapsedExpandService) {
330
- const autoRestoreOptions = this.tableOptions.autoRestoreOptions;
331
- const getRowId = autoRestoreOptions.getRowId;
332
- if (autoRestoreOptions.autoRestoreCollapsedExpandedState && getRowId) {
333
- const state = this.storeStateCollapsedExpandService.collapsedExpandedStateGet();
334
- const areaModel = this.tableModel.getAreaModel("body");
335
- if (areaModel instanceof AreaModelTree) {
336
- const amtr = areaModel;
337
- const rowCount = areaModel.getRowCount();
338
- for (let i = 0; i < rowCount; i++) {
339
- const row = areaModel.getRowByIndex(i);
340
- if (row) {
341
- if (state.allExpanded) {
342
- row.expanded = true;
343
- }
344
- else if (state.allCollapsed) {
345
- row.expanded = false;
346
- }
347
- else {
348
- const rowId = getRowId(row.data);
349
- if (state.mode === "expanded") {
350
- row.expanded = (this.storeStateCollapsedExpandService.collapsedExpandedStateIncludes(rowId));
351
- }
352
- else if (state.mode === "collapsed") {
353
- row.expanded = (!this.storeStateCollapsedExpandService.collapsedExpandedStateIncludes(rowId));
354
- }
355
- }
356
- }
357
- }
358
- amtr.recalcVisibleTreeRows();
359
- }
360
- }
361
- }
362
- }
363
- }
364
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtc2NvcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL3RhYmxlL3NyYy9saWIvdGFibGUvdGFibGUtc2NvcGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG9DQUFvQyxDQUFDO0FBRWxFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRzFFLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRXZDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSw2Q0FBNkMsQ0FBQztBQUM1RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUN0RixPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsTUFBTSxnREFBZ0QsQ0FBQztBQUNsRyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSx1Q0FBdUMsQ0FBQztBQUNqRixPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDN0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ25ELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSwyQ0FBMkMsQ0FBQztBQUMvRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUlqRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDNUQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRy9DLE1BQU0sT0FBTyxVQUFXLFNBQVEsV0FBVztJQXdCcEI7SUF0QmQsWUFBWSxDQUFlO0lBQzNCLFlBQVksQ0FBZTtJQUMzQixlQUFlLENBQWtCO0lBRWpDLGdDQUFn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Q0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsQ0FBQyxFQUFFLEVBQUU7d0JBQ2pDLE1BQU0sR0FBRyxHQUE2QixTQUFTLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDO3dCQUNqRSxJQUFJLEdBQUcsRUFBRTs0QkFDUCxJQUFJLEtBQUssQ0FBQyxXQUFXLEVBQUU7Z0NBQ3JCLEdBQUcsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDOzZCQUVyQjtpQ0FBTSxJQUFJLEtBQUssQ0FBQyxZQUFZLEVBQUU7Z0NBQzdCLEdBQUcsQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDOzZCQUV0QjtpQ0FBTTtnQ0FDTCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO2dDQUNqQyxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssVUFBVSxFQUFFO29DQUM3QixHQUFHLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxDQUFDLDhCQUE4QixDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7aUNBRTlGO3FDQUFNLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxXQUFXLEVBQUU7b0NBQ3JDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyw4QkFBOEIsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO2lDQUMvRjs2QkFDRjt5QkFDRjtxQkFDRjtvQkFDRCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztpQkFDOUI7YUFDRjtTQUNGO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVGFibGVNb2RlbElmIH0gZnJvbSBcIi4vZGF0YS90YWJsZW1vZGVsL3RhYmxlLW1vZGVsLmlmXCI7XG5pbXBvcnQgeyBBcmVhSWRlbnQgfSBmcm9tIFwiLi9kYXRhL3RhYmxlbW9kZWwvYXJlYS1pZGVudC50eXBlXCI7XG5pbXBvcnQgeyBHZU1vdXNlRXZlbnQgfSBmcm9tIFwiLi9kYXRhL2NvbW1vbi9ldmVudC9nZS1tb3VzZS1ldmVudFwiO1xuaW1wb3J0IHsgRG9tU2VydmljZUlmIH0gZnJvbSBcIi4vc2VydmljZS9kb20tc2VydmljZS5pZlwiO1xuaW1wb3J0IHsgQ29udmVuaWVuY2VEb21TZXJ2aWNlIH0gZnJvbSBcIi4vc2VydmljZS9jb252ZW5pZW5jZS1kb20uc2VydmljZVwiO1xuaW1wb3J0IHsgVGFibGVPcHRpb25zSWYgfSBmcm9tIFwiLi9kYXRhL29wdGlvbnMvdGFibGUtb3B0aW9ucy5pZlwiO1xuaW1wb3J0IHsgVHJlZVJvdyB9IGZyb20gXCIuL2RhdGEvY29tbW9uL3RyZWUtcm93XCI7XG5pbXBvcnQgeyBNb3VzZUhhbmRsZXIgfSBmcm9tIFwiLi9tb3VzZS1oYW5kbGVyXCI7XG5pbXBvcnQgeyBFdmVudExpc3RlbmVySWYgfSBmcm9tIFwiLi9ldmVudC1saXN0ZW5lci5pZlwiO1xuaW1wb3J0IHsgVGFibGVBcGkgfSBmcm9tIFwiLi90YWJsZS1hcGlcIjtcbmltcG9ydCB7IFNvcnRTdGF0ZSB9IGZyb20gXCIuL2RhdGEvY29tbW9uL3NvcnQtc3RhdGUudHlwZVwiO1xuaW1wb3J0IHsgQXJlYU1vZGVsVHJlZSB9IGZyb20gXCIuL2RhdGEvdGFibGVtb2RlbC9hcmVhbW9kZWwvYXJlYS1tb2RlbC10cmVlXCI7XG5pbXBvcnQgeyBTdG9yZVN0YXRlU2Nyb2xsUG9zU2VydmljZSB9IGZyb20gXCIuL3NlcnZpY2Uvc3RvcmUtc3RhdGUtc2Nyb2xsLXBvcy5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBTdG9yZVN0YXRlQ29sbGFwc2VkRXhwYW5kU2VydmljZSB9IGZyb20gXCIuL3NlcnZpY2Uvc3RvcmUtc3RhdGUtY29sbGFwc2VkLWV4cGFuZC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBTdG9yZVN0YXRlU29ydGluZ1NlcnZpY2UgfSBmcm9tIFwiLi9zZXJ2aWNlL3N0b3JlLXN0YXRlLXNvcnRpbmcuc2VydmljZVwiO1xuaW1wb3J0IHsgUmVuZGVyU2NvcGUgfSBmcm9tIFwiLi9yZW5kZXItc2NvcGVcIjtcbmltcG9ydCB7IFNvcnRJdGVtIH0gZnJvbSBcIi4vZGF0YS9jb21tb24vc29ydC1pdGVtXCI7XG5pbXBvcnQgeyBJbnB1dEhhbmRsZXIgfSBmcm9tIFwiLi9pbnB1dC1oYW5kbGVyXCI7XG5pbXBvcnQgeyBHZU1vZGVsQ2hhbmdlRXZlbnQgfSBmcm9tIFwiLi9kYXRhL2NvbW1vbi9ldmVudC9nZS1tb2RlbC1jaGFuZ2UtZXZlbnRcIjtcbmltcG9ydCB7IFNlbGVjdGlvblNlcnZpY2UgfSBmcm9tIFwiLi9zZWxlY3Rpb24vc2VsZWN0aW9uLXNlcnZpY2VcIjtcbmltcG9ydCB7IEdlS2V5RXZlbnQgfSBmcm9tIFwiLi9kYXRhL2NvbW1vbi9ldmVudC9nZS1rZXktZXZlbnRcIjtcbmltcG9ydCB7IE9uQWN0aW9uVHJpZ2dlcmVkSWYgfSBmcm9tIFwiLi9hY3Rpb24vb24tYWN0aW9uLXRyaWdnZXJlZC5pZlwiO1xuaW1wb3J0IHsgQWN0aW9uSWQgfSBmcm9tIFwiLi9hY3Rpb24vYWN0aW9uLWlkLnR5cGVcIjtcbmltcG9ydCB7IFNob3J0Y3V0U2VydmljZSB9IGZyb20gXCIuL2FjdGlvbi9zaG9ydGN1dC5zZXJ2aWNlXCI7XG5pbXBvcnQgeyBFdmVudEFkYXB0ZXIgfSBmcm9tIFwiLi9ldmVudC1hZGFwdGVyXCI7XG5cblxuZXhwb3J0IGNsYXNzIFRhYmxlU2NvcGUgZXh0ZW5kcyBSZW5kZXJTY29wZSBpbXBsZW1lbnRzIE9uQWN0aW9uVHJpZ2dlcmVkSWYge1xuXG4gIHB1YmxpYyBtb3VzZUhhbmRsZXI6IE1vdXNlSGFuZGxlcjtcbiAgcHVibGljIGlucHV0SGFuZGxlcjogSW5wdXRIYW5kbGVyO1xuICBwdWJsaWMgc2hvcnRjdXRTZXJ2aWNlOiBTaG9ydGN1dFNlcnZpY2U7XG5cbiAgcHVibGljIHN0b3JlU3RhdGVDb2xsYXBzZWRFeHBhbmRTZXJ2aWNlPzogU3RvcmVTdGF0ZUNvbGxhcHNlZEV4cGFuZFNlcnZpY2U7XG4gIHB1YmxpYyBzdG9yZVNvcnRpbmdTZXJ2aWNlPzogU3RvcmVTdGF0ZVNvcnRpbmdTZXJ2aWNlO1xuXG4gIHByb3RlY3RlZCBzZWxlY3Rpb25TZXJ2aWNlOiBTZWxlY3Rpb25TZXJ2aWNlID0gbmV3IFNlbGVjdGlvblNlcnZpY2UodGhpcyk7XG4gIHByb3RlY3RlZCBrZXlFdmVudD86IEdlS2V5RXZlbnQ7XG4gIHByaXZhdGUgYXBpID0gbmV3IFRhYmxlQXBpKHRoaXMpO1xuXG4gIHByaXZhdGUgbW91c2VTdGFydEFjdGlvbiA9IFwiXCI7XG4gIHByaXZhdGUgbW91c2VTdGFydFdpZHRoID0gLTE7XG4gIHByaXZhdGUgbW91c2VTdGFydENvbHVtbkluZGV4ID0gLTE7XG4gIHByaXZhdGUgZHJhZ0Zyb20gPSAtMTtcbiAgcHJpdmF0ZSBkcmFnVG8gPSAtMTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBob3N0RWxlbWVudDogSFRNTERpdkVsZW1lbnQsXG4gICAgdGFibGVNb2RlbDogVGFibGVNb2RlbElmLFxuICAgIGRvbVNlcnZpY2U6IERvbVNlcnZpY2VJZixcbiAgICB0YWJsZU9wdGlvbnM6IFRhYmxlT3B0aW9uc0lmLFxuICAgIHByb3RlY3RlZCByZWFkb25seSBldmVudExpc3RlbmVyOiBFdmVudExpc3RlbmVySWZcbiAgKSB7XG4gICAgc3VwZXIoXG4gICAgICBob3N0RWxlbWVudCxcbiAgICAgIHRhYmxlTW9kZWwsXG4gICAgICBuZXcgQ29udmVuaWVuY2VEb21TZXJ2aWNlKGRvbVNlcnZpY2UpLFxuICAgICAgdGFibGVPcHRpb25zXG4gICAgKTtcbiAgICBpZiAoIWV2ZW50TGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuZXZlbnRMaXN0ZW5lciA9IG5ldyBFdmVudEFkYXB0ZXIoKTtcbiAgICB9XG4gICAgaWYgKHRoaXMudGFibGVPcHRpb25zPy5hdXRvUmVzdG9yZU9wdGlvbnMpIHtcbiAgICAgIGNvbnN0IGF1dG9SZXN0b3JlT3B0aW9ucyA9IHRoaXMudGFibGVPcHRpb25zLmF1dG9SZXN0b3JlT3B0aW9ucztcbiAgICAgIGNvbnN0IGtleUZuID0gYXV0b1Jlc3RvcmVPcHRpb25zLmdldFN0b3JhZ2VLZXlGbjtcbiAgICAgIGlmIChrZXlGbikge1xuICAgICAgICBpZiAoYXV0b1Jlc3RvcmVPcHRpb25zLmF1dG9SZXN0b3JlU2Nyb2xsUG9zaXRpb24pIHtcbiAgICAgICAgICB0aGlzLnN0b3JlU2Nyb2xsUG9zU3RhdGVTZXJ2aWNlID0gbmV3IFN0b3JlU3RhdGVTY3JvbGxQb3NTZXJ2aWNlKGtleUZuKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoYXV0b1Jlc3RvcmVPcHRpb25zLmF1dG9SZXN0b3JlQ29sbGFwc2VkRXhwYW5kZWRTdGF0ZSkge1xuICAgICAgICAgIHRoaXMuc3RvcmVTdGF0ZUNvbGxhcHNlZEV4cGFuZFNlcnZpY2UgPSBuZXcgU3RvcmVTdGF0ZUNvbGxhcHNlZEV4cGFuZFNlcnZpY2Uoa2V5Rm4pO1xuICAgICAgICB9XG4gICAgICAgIGlmIChhdXRvUmVzdG9yZU9wdGlvbnMuYXV0b1Jlc3RvcmVTb3J0aW5nU3RhdGUpIHtcbiAgICAgICAgICB0aGlzLnN0b3JlU29ydGluZ1NlcnZpY2UgPSBuZXcgU3RvcmVTdGF0ZVNvcnRpbmdTZXJ2aWNlKGtleUZuKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICB0aGlzLm1vdXNlSGFuZGxlciA9IG5ldyBNb3VzZUhhbmRsZXIodGhpcyk7XG4gICAgdGhpcy5pbnB1dEhhbmRsZXIgPSBuZXcgSW5wdXRIYW5kbGVyKHRoaXMpO1xuXG4gICAgdGhpcy5zaG9ydGN1dFNlcnZpY2UgPSBuZXcgU2hvcnRjdXRTZXJ2aWNlKHRoaXMpO1xuICAgIHRoaXMuc2hvcnRjdXRTZXJ2aWNlLmFkZExpc3RlbmVyKHRoaXMuc2VsZWN0aW9uU2VydmljZSk7XG4gIH1cblxuICBvbkFjdGlvblRyaWdnZXJlZChhY3Rpb25JZDogQWN0aW9uSWQpOiBib29sZWFuIHtcbiAgICBpZiAoYWN0aW9uSWQgPT09IFwiTkFWSUdBVEVfRE9XTlwiKSB7XG4gICAgICBpZiAodGhpcy5jaGFuZ2VGb2N1c0NlbGwoMCwgMSkpIHtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhY3Rpb25JZCA9PT0gXCJOQVZJR0FURV9VUFwiKSB7XG4gICAgICBpZiAodGhpcy5jaGFuZ2VGb2N1c0NlbGwoMCwgLTEpKXtcbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChhY3Rpb25JZCA9PT0gXCJOQVZJR0FURV9MRUZUXCIpIHtcbiAgICAgIGlmICh0aGlzLmNoYW5nZUZvY3VzQ2VsbCgtMSwgMCkpe1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGFjdGlvbklkID09PSBcIk5BVklHQVRFX1JJR0hUXCIpIHtcbiAgICAgIGlmICh0aGlzLmNoYW5nZUZvY3VzQ2VsbCgxLCAwKSl7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoYWN0aW9uSWQgPT09IFwiU1RBUlRfRURJVElOR1wiKSB7XG4gICAgICBpZiAodGhpcy5nZXRGb2N1c01vZGVsKSB7XG4gICAgICAgIGNvbnN0IGZtID0gdGhpcy5nZXRGb2N1c01vZGVsKCk7XG4gICAgICAgIGlmIChmbSkge1xuICAgICAgICAgIGNvbnN0IFtyb3dJZHgsIGNvbElkeF0gPSBmbS5nZXRGb2N1cygpO1xuICAgICAgICAgIGlmICh0aGlzLnRhYmxlTW9kZWwuZ2V0Qm9keU1vZGVsKCkuaXNFZGl0YWJsZShyb3dJZHgsIGNvbElkeCkpIHtcbiAgICAgICAgICAgIHRoaXMuY2xlYXJTZWxlY3Rpb24oKTtcbiAgICAgICAgICAgIHRoaXMuaW5pdFJlbmRlckVkaXRvcihyb3dJZHgsIGNvbElkeCk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICB1cGRhdGVNb2RlbFZhbHVlQWZ0ZXJFZGl0KGFyZWFJZGVudDogQXJlYUlkZW50LCByb3dJbmRleDogbnVtYmVyLCBjb2x1bW5JbmRleDogbnVtYmVyLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgaWYgKGFyZWFJZGVudCA9PT0gXCJib2R5XCIpIHtcbiAgICAgIGNvbnN0IGJvZHlBcmVhTW9kZWwgPSB0aGlzLnRhYmxlTW9kZWwuZ2V0QXJlYU1vZGVsKGFyZWFJZGVudCk7XG4gICAgICBjb25zdCBvazogYm9vbGVhbiA9IGJvZHlBcmVhTW9kZWwuc2V0VmFsdWUocm93SW5kZXgsIGNvbHVtbkluZGV4LCB2YWx1ZSk7XG4gICAgICBpZiAob2spIHtcbiAgICAgICAgdGhpcy5yZXNldEVkaXRvclJlbmRlcmVyKCk7XG4gICAgICAgIHRoaXMucmVwYWludCgpO1xuICAgICAgICB0aGlzLmV2ZW50TGlzdGVuZXIub25Nb2RlbENoYW5nZWQoR2VNb2RlbENoYW5nZUV2ZW50LmNyZWF0ZVNpbmdsZShyb3dJbmRleCwgY29sdW1uSW5kZXgpKTtcbiAgICAgICAgdGhpcy5ob3N0RWxlbWVudC5mb2N1cygpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGdldEFwaSgpOiBUYWJsZUFwaSB7XG4gICAgcmV0dXJuIHRoaXMuYXBpO1xuICB9XG5cbiAgLypcbiAgICogQ2FsbGVkIGJ5IHRoZSB0YWJsZSBjb21wb25lbnRcbiAgICovXG4gIGZpcnN0SW5pdCgpIHtcbiAgICB0aGlzLnRhYmxlTW9kZWwuaW5pdCgpO1xuICAgIGlmICh0aGlzLnRhYmxlT3B0aW9ucz8uZXh0ZXJuYWxGaWx0ZXJGdW5jdGlvbikge1xuICAgICAgdGhpcy5leHRlcm5hbEZpbHRlckNoYW5nZWQoZmFsc2UpO1xuICAgIH1cbiAgICB0aGlzLmF1dG9SZXN0b3JlQ29sbGFwc2VkRXhwYW5kZWRTdGF0ZSgpO1xuICAgIHRoaXMuYXV0b1Jlc3RvcmVTb3J0aW5nU3RhdGUoKTtcbiAgICB0aGlzLnJlc2V0U2l6ZU9mV3JhcHBlckRpdigpO1xuICAgIHRoaXMuYWRqdXN0Q29udGFpbmVyc0FuZFJvd3MoKTtcbiAgICB0aGlzLmF1dG9SZXN0b3JlU2Nyb2xsUG9zaXRpb24oKTtcbiAgfVxuXG4gIGNyZWF0ZUdlTW91c2VFdmVudChtb3VzZUV2ZW50OiBNb3VzZUV2ZW50KTogR2VNb3VzZUV2ZW50IHtcbiAgICBjb25zdCByZXQ6IEdlTW91c2VFdmVudCA9IG5ldyBHZU1vdXNlRXZlbnQoKTtcbiAgICByZXQub3JpZ2luYWxFdmVudCA9IG1vdXNlRXZlbnQ7XG5cbiAgICBpZiAobW91c2VFdmVudCkge1xuICAgICAgY29uc3QgdGFyZ2V0ID0gbW91c2VFdmVudC50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gICAgICBbcmV0LmFyZWFJZGVudCwgcmV0LnNpZGVJZGVudF0gPSB0aGlzLmdldEFyZWFBbmRTaWRlSWRlbnRCeUF0dHIodGFyZ2V0KTtcbiAgICAgIHJldC5yb3dJbmRleCA9IHRoaXMuZ2V0TnVtYmVyQnlBdHRyKHRhcmdldCwgXCJkYXRhLXJvdy1pbmRleFwiKTtcbiAgICAgIHJldC5jb2x1bW5JbmRleCA9IHRoaXMuZ2V0TnVtYmVyQnlBdHRyKHRhcmdldCwgXCJkYXRhLWNvbC1pbmRleFwiKTtcbiAgICAgIHJldC5hY3Rpb24gPSB0aGlzLmdldFN0cmluZ0J5QXR0cih0YXJnZXQsIFwiZGF0YS1nZS1hY3Rpb25cIik7XG5cbiAgICAgIC8vIGNvbnN0IGJvZHlZID0gbW91c2VFdmVudC5jbGllbnRZIC0gdGhpcy5ob3N0RWxlbWVudC5vZmZzZXRUb3AgLSB0aGlzLmFyZWFIZWFkZXJDZW50ZXIucGFyZW50LmNsaWVudEhlaWdodDtcbiAgICAgIC8vIGNvbnN0IGJvZHlYID0gbW91c2VFdmVudC5jbGllbnRYIC0gdGhpcy5ob3N0RWxlbWVudC5vZmZzZXRMZWZ0IC0gdGhpcy5hcmVhQm9keVdlc3RHZW8ud2lkdGg7XG5cbiAgICAgIGlmIChyZXQuYXJlYUlkZW50KSB7XG4gICAgICAgIGNvbnN0IGFtID0gdGhpcy50YWJsZU1vZGVsLmdldEFyZWFNb2RlbChyZXQuYXJlYUlkZW50KTtcbiAgICAgICAgcmV0LnJvd1RvcCA9IGFtLmdldFlQb3NCeVJvd0luZGV4KHJldC5yb3dJbmRleCk7XG4gICAgICB9XG4gICAgICByZXQuY29sdW1uTGVmdCA9IHRoaXMudGFibGVNb2RlbC5nZXRYUG9zQnlDb2x1bW5JbmRleChyZXQuY29sdW1uSW5kZXgpO1xuXG4gICAgICBpZiAobW91c2VFdmVudC5jdHJsS2V5ICYmIG1vdXNlRXZlbnQuYWx0S2V5KSB7XG4gICAgICAgIGNvbnN0IGJvZHlZID0gbW91c2VFdmVudC5jbGllbnRZIC0gdGhpcy5ob3N0RWxlbWVudC5vZmZzZXRUb3AgLSB0aGlzLmFyZWFIZWFkZXJDZW50ZXIucGFyZW50LmNsaWVudEhlaWdodDtcbiAgICAgICAgY29uc3QgYm9keVggPSBtb3VzZUV2ZW50LmNsaWVudFggLSB0aGlzLmhvc3RFbGVtZW50Lm9mZnNldExlZnQgLSB0aGlzLmFyZWFCb2R5V2VzdEdlby53aWR0aDtcbiAgICAgICAgdGhpcy5kZWJ1Z09uY2UoYm9keVgsIGJvZHlZKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldDtcbiAgfVxuXG4gIG9uTW91c2VEb3duKG1vdXNlRXZlbnQ6IEdlTW91c2VFdmVudCkge1xuICAgIGlmIChtb3VzZUV2ZW50LmNvbHVtbkluZGV4ID4gLTFcbiAgICAgICYmIG1vdXNlRXZlbnQuYWN0aW9uXG4gICAgICAmJiBbXCJyZXNpemUtY29sdW1uXCIsIFwiZHJhZy1jb2x1bW5cIl0uaW5jbHVkZXMobW91c2VFdmVudC5hY3Rpb24pKSB7XG5cbiAgICAgIHRoaXMubW91c2VTdGFydFdpZHRoID0gdGhpcy50YWJsZU1vZGVsLmdldENvbHVtbldpZHRoKG1vdXNlRXZlbnQuY29sdW1uSW5kZXgpO1xuICAgICAgdGhpcy5tb3VzZVN0YXJ0QWN0aW9uID0gbW91c2VFdmVudC5hY3Rpb247XG4gICAgICB0aGlzLm1vdXNlU3RhcnRDb2x1bW5JbmRleCA9IG1vdXNlRXZlbnQuY29sdW1uSW5kZXg7XG5cbiAgICAgIGlmICh0aGlzLm1vdXNlU3RhcnRBY3Rpb24gPT09IFwiZHJhZy1jb2x1bW5cIikge1xuICAgICAgICB0aGlzLmRyYWdGcm9tID0gdGhpcy5tb3VzZVN0YXJ0Q29sdW1uSW5kZXg7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgbW91c2VEcmFnZ2luZ09uRnJhbWUobW91c2VFdmVudDogR2VNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5ldmVudExpc3RlbmVyLm9uTW91c2VEcmFnZ2luZyhtb3VzZUV2ZW50KTtcbiAgICB0aGlzLm1vdXNlRXZlbnQgPSBtb3VzZUV2ZW50O1xuXG4gICAgaWYgKFxuICAgICAgdGhpcy5tb3VzZVN0YXJ0Q29sdW1uSW5kZXggPiAtMVxuICAgICAgJiYgdGhpcy5tb3VzZVN0YXJ0QWN0aW9uID09PSBcInJlc2l6ZS1jb2x1bW5cIlxuICAgICAgJiYgdGhpcy50YWJsZU9wdGlvbnMuY29sdW1uc1Jlc2l6YWJsZSkge1xuICAgICAgdGhpcy5yZXNpemVDb2x1bW4obW91c2VFdmVudCk7XG5cbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdGhpcy5tb3VzZVN0YXJ0QWN0aW9uID09PSBcImRyYWctY29sdW1uXCJcbiAgICAgICYmIG1vdXNlRXZlbnQuY29sdW1uSW5kZXggPiAtMVxuICAgICAgJiYgdGhpcy50YWJsZU9wdGlvbnMuY29sdW1uc0RyYWdnYWJsZSkge1xuXG4gICAgICB0aGlzLmRyYWdnaW5nVGFyZ2V0Q29sdW1uSW5kZXggPSBtb3VzZUV2ZW50LmNvbHVtbkluZGV4O1xuICAgICAgdGhpcy5kcmFnVG8gPSB0aGlzLmRyYWdnaW5nVGFyZ2V0Q29sdW1uSW5kZXg7XG5cbiAgICAgIGlmICh0aGlzLmRyYWdGcm9tID4gLTEgJiYgdGhpcy5kcmFnVG8gPiAtMSAmJiB0aGlzLmRyYWdGcm9tICE9PSB0aGlzLmRyYWdUbykge1xuICAgICAgICB0aGlzLnRhYmxlTW9kZWwuY2hhbmdlQ29sdW1uT3JkZXIodGhpcy5kcmFnRnJvbSwgdGhpcy5kcmFnVG8pO1xuICAgICAgICB0aGlzLmRyYWdGcm9tID0gdGhpcy5kcmFnVG87XG4gICAgICAgIHRoaXMucmVzZXRTaXplT2ZXcmFwcGVyRGl2KCk7XG4gICAgICAgIHRoaXMuYWRqdXN0Q29udGFpbmVyc0FuZFJvd3MoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucmVwYWludCgpO1xuICAgIH1cbiAgfVxuXG4gIG1vdXNlRHJhZ2dpbmdFbmRPbkZyYW1lKG1vdXNlRXZlbnQ6IEdlTW91c2VFdmVudCkge1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lci5vbk1vdXNlRHJhZ2dpbmdFbmQobW91c2VFdmVudCk7XG4gICAgdGhpcy5kcmFnZ2luZ1RhcmdldENvbHVtbkluZGV4ID0gLTE7XG5cbiAgICBpZiAodGhpcy5tb3VzZVN0YXJ0QWN0aW9uID09PSBcInJlc2l6ZS1jb2x1bW5cIikge1xuICAgICAgdGhpcy5yZXNpemVDb2x1bW4obW91c2VFdmVudCk7XG5cbiAgICB9IGVsc2UgaWYgKHRoaXMubW91c2VTdGFydEFjdGlvbiA9PT0gXCJkcmFnLWNvbHVtblwiKSB7XG4gICAgICB0aGlzLnJlcGFpbnQoKTtcbiAgICB9XG4gICAgdGhpcy5tb3VzZVN0YXJ0V2lkdGggPSAtMTtcbiAgICB0aGlzLm1vdXNlU3RhcnRDb2x1bW5JbmRleCA9IC0xO1xuICAgIHRoaXMuZHJhZ0Zyb20gPSAtMTtcbiAgICB0aGlzLmRyYWdUbyA9IC0xO1xuICAgIHRoaXMubW91c2VTdGFydEFjdGlvbiA9IFwiXCI7XG4gIH1cblxuICBtb3VzZU1vdmUobW91c2VNb3ZlRXZlbnQ6IEdlTW91c2VFdmVudCkge1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lci5vbk1vdXNlTW92ZWQobW91c2VNb3ZlRXZlbnQpO1xuICAgIHRoaXMuYWRqdXN0SG92ZXJSb3dzKG1vdXNlTW92ZUV2ZW50KTtcbiAgICB0aGlzLmFkanVzdEhvdmVyQ29sdW1ucyhtb3VzZU1vdmVFdmVudCk7XG4gIH1cblxuICBjb250ZXh0bWVudShtb3VzZU1vdmVFdmVudDogR2VNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy5ldmVudExpc3RlbmVyLm9uQ29udGV4dG1lbnUobW91c2VNb3ZlRXZlbnQpO1xuICB9XG5cbiAgdG9nZ2xlRXhwYW5kQ29sbGFwc2VBbGwoZXhwYW5kOiBib29sZWFuID0gdHJ1ZSkge1xuICAgIGNvbnN0IGJvZHlBcmVhTW9kZWwgPSB0aGlzLnRhYmxlTW9kZWwuZ2V0Qm9keU1vZGVsKCk7XG4gICAgaWYgKGJvZHlBcmVhTW9kZWwgaW5zdGFuY2VvZiBBcmVhTW9kZWxUcmVlKSB7XG4gICAgICBjb25zdCBhbXQ6IEFyZWFNb2RlbFRyZWU8YW55PiA9IGJvZHlBcmVhTW9kZWw7XG4gICAgICBhbXQudG9nZ2xlRXhwYW5kQ29sbGFwc2VBbGwoZXhwYW5kKTtcbiAgICAgIHRoaXMucmVwYWludCgpO1xuICAgICAgdGhpcy5zdG9yZVN0YXRlQ29sbGFwc2VkRXhwYW5kU2VydmljZT8uY29sbGFwc2VkU3RhdGVBbGwoZXhwYW5kKTtcbiAgICB9XG4gIH1cblxuICB0b2dnbGVSb3dDaGVja2JveChyb3dJZHg6IG51bWJlciwgX2NvbElkeDogbnVtYmVyLCBhcmVhSWRlbnQ6IEFyZWFJZGVudCkge1xuICAgIGNvbnN0IGFyZWFNb2RlbCA9IHRoaXMudGFibGVNb2RlbC5nZXRBcmVhTW9kZWwoYXJlYUlkZW50KTtcbiAgICBjb25zdCBzdGF0ZSA9IGFyZWFNb2RlbC5pc1Jvd0NoZWNrZWQocm93SWR4KTtcbiAgICBjb25zdCB1bnNlbCA9IChzdGF0ZSA9PT0gdW5kZWZpbmVkIHx8IHN0YXRlID09PSBcInNlbWlcIiB8fCBzdGF0ZSA9PT0gXCJub25lXCIpO1xuICAgIGFyZWFNb2RlbC5zZXRSb3dDaGVja2VkKHJvd0lkeCwgdW5zZWwpO1xuICAgIHRoaXMucmVwYWludCgpOyAvLyBUT0RPIHJlcGFpbnQgY2VsbCBvbmx5XG4gICAgY29uc3Qgc2VsZWN0ZWRSb3dzID0gYXJlYU1vZGVsLnJvd1NlbGVjdGlvbk1vZGVsPy5nZXRDaGVja2VkUm93cygpO1xuICAgIHRoaXMuZXZlbnRMaXN0ZW5lci5vbkNoZWNrYm94Q2hhbmdlZChzZWxlY3RlZFJvd3MgPyBzZWxlY3RlZFJvd3MgOiBbXSk7XG4gIH1cblxuICBvbk1vdXNlQ2xpY2tlZChldnQ6IEdlTW91c2VFdmVudCwgcHJldmlvdXNFdnQ6IEdlTW91c2VFdmVudCB8IHVuZGVmaW5lZCkge1xuICAgIGxldCBkaXJ0eSA9IHRoaXMuc2VsZWN0aW9uU2VydmljZS5vbk1vdXNlQ2xpY2tlZChldnQsIHByZXZpb3VzRXZ0KTtcbiAgICBpZiAoIWRpcnR5ICYmIHRoaXMuZ2V0Rm9jdXNNb2RlbCkge1xuICAgICAgY29uc3QgZm0gPSB0aGlzLmdldEZvY3VzTW9kZWwoKTtcbiAgICAgIGlmIChmbSkge1xuICAgICAgICBkaXJ0eSA9IGZtLmhhc0NoYW5nZWQoKTtcbiAgICAgICAgZm0uY2xlYXJDaGFuZ2VkKCk7XG4gICAgICAgIGlmIChkaXJ0eSkge1xuICAgICAgICAgIHRoaXMucmVzZXRFZGl0b3JSZW5kZXJlcigpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuZXZlbnRMaXN0ZW5lci5vbk1vdXNlQ2xpY2tlZChldnQpO1xuICAgIGlmIChkaXJ0eSkge1xuICAgICAgdGhpcy5kZWJvdW5jZSh0aGlzLnJlcGFpbnQuYmluZCh0aGlzKSwgMTApO1xuICAgIH1cbiAgfVxuXG4gIGV4dGVybmFsRmlsdGVyQ2hhbmdlZChjbGVhclNlbGVjdGlvbjogYm9vbGVhbiA9IHRydWUpIHtcbiAgICBjb25zdCBwcmVkaWN0Rm4gPSB0aGlzLnRhYmxlT3B0aW9ucy5leHRlcm5hbEZpbHRlckZ1bmN0aW9uO1xuICAgIGlmIChwcmVkaWN0Rm4pIHtcbiAgICAgIGlmIChjbGVhclNlbGVjdGlvbikge1xuICAgICAgICB0aGlzLmNsZWFyU2VsZWN0aW9uTW9kZWwoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMudGFibGVNb2RlbC5leHRlcm5hbEZpbHRlckNoYW5nZWQocHJlZGljdEZuKTtcbiAgICAgIHRoaXMuc2Nyb2xsVmlld3BvcnQuc2Nyb2xsVG8oMCwgMCk7XG4gICAgICB0aGlzLnRhYmxlTW9kZWwucmVjYWxjSGVpZ2h0QW5kUGFkZGluZygpO1xuICAgICAgdGhpcy5yZXNldFNpemVPZldyYXBwZXJEaXYoKTtcbiAgICAgIHRoaXMucmVwYWludCgpO1xuICAgIH1cbiAgfVxuXG4gIG9uSGVhZGVyRGJsQ2xpY2tlZChldmVudDogTW91c2VFdmVudCwgX3Jvd0lkeDogbnVtYmVyLCBjb2xJZHg6IG51bWJlcikge1xuICAgIGNvbnN0IGNvbERlZiA9IHRoaXMudGFibGVNb2RlbC5nZXRDb2x1bW5EZWYoY29sSWR4KTtcbiAgICBpZiAoY29sRGVmPy5zb3J0YWJsZSAmJiBjb2xEZWYuc29ydGFibGUoKSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgICAgY29uc3Qgc3RhdGVzOiBTb3J0U3RhdGVbXSA9IGNvbERlZi5zb3J0U3RhdGVzT3JkZXIgPyBjb2xEZWYuc29ydFN0YXRlc09yZGVyIDogdGhpcy50YWJsZU9wdGlvbnMuc29ydE9yZGVyO1xuICAgICAgY29uc3QgY3VycmVudFN0YXRlOiBTb3J0U3RhdGUgPSBjb2xEZWYuc29ydFN0YXRlID8/IFwiXCI7XG4gICAgICBjb25zdCBuZXdTdGF0ZSA9IHN0YXRlc1soc3RhdGVzLmluZGV4T2YoY3VycmVudFN0YXRlKSArIDEpICUgc3RhdGVzLmxlbmd0aF07XG5cbiAgICAgIGNvbnN0IHNvcnRJdGVtID0gbmV3IFNvcnRJdGVtKGNvbElkeCwgbmV3U3RhdGUpO1xuICAgICAgY29uc3QgZG9uZSA9IHRoaXMudGFibGVNb2RlbC5kb1NvcnQoW3NvcnRJdGVtXSk7XG4gICAgICBpZiAoZG9uZSkge1xuICAgICAgICB0aGlzLnRhYmxlTW9kZWwuZ2V0Q29sdW1uRGVmcygpPy5mb3JFYWNoKGNkID0+IGNkLnNvcnRTdGF0ZSA9IFwiXCIpO1xuICAgICAgICBjb2xEZWYuc29ydFN0YXRlID0gbmV3U3RhdGU7XG4gICAgICB9XG4gICAgICB0aGlzLnJlcGFpbnQoKTtcbiAgICAgIHRoaXMuc3RvcmVTb3J0aW5nU2VydmljZT8uc2V0U29ydEl0ZW1zKFtzb3J0SXRlbV0pO1xuICAgIH1cbiAgfVxuXG5cbiAgcHJpdmF0ZSBjaGFuZ2VGb2N1c0NlbGwoZHg6IG51bWJlciwgZHk6IG51bWJlcikgOiBib29sZWFue1xuICAgIGlmICghdGhpcy5pc0VkaXRpbmcoKSAmJiB0aGlzLmdldEZvY3VzTW9kZWwpIHtcbiAgICAgIGNvbnN0IGZtID0gdGhpcy5nZXRGb2N1c01vZGVsKCk7XG4gICAgICBpZiAoZm0pIHtcbiAgICAgICAgY29uc3QgW3Jvd0lkeCwgY29sSWR4XSA9IGZtLmdldEZvY3VzKCk7XG4gICAgICAgIGZtLnNldEZvY3VzKHJvd0lkeCArIGR5LCBjb2xJZHggKyBkeCk7XG4gICAgICAgIHRoaXMucmVwYWludCgpO1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSByZXNpemVDb2x1bW4obW91c2VFdmVudDogR2VNb3VzZUV2ZW50KSB7XG4gICAgdGhpcy50YWJsZU1vZGVsLnNldENvbHVtbldpZHRoKHRoaXMubW91c2VTdGFydENvbHVtbkluZGV4LCB0aGlzLm1vdXNlU3RhcnRXaWR0aCArIG1vdXNlRXZlbnQuZHJhZ2dpbmdYKTtcbiAgICB0aGlzLnRhYmxlTW9kZWwucmVjYWxjUGFkZGluZygpO1xuICAgIHRoaXMucmVzZXRTaXplT2ZXcmFwcGVyRGl2KCk7XG4gICAgdGhpcy5hZGp1c3RDb250YWluZXJzQW5kUm93cygpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhclNlbGVjdGlvbk1vZGVsKCkge1xuICAgIGlmICh0aGlzLmdldFNlbGVjdGlvbk1vZGVsKSB7XG4gICAgICB0aGlzLmdldFNlbGVjdGlvbk1vZGVsKCk/LmNsZWFyKCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBkZWJ1Z09uY2UoXG4gICAgYm9keVg6IG51bWJlcixcbiAgICBib2R5WTogbnVtYmVyXG4gICkge1xuICAgIGNvbnNvbGUuY2xlYXIoKTtcbiAgICBjb25zb2xlLmluZm8oXCJ0aGlzLmhvc3RFbGVtZW50Lm9mZnNldFRvcFwiLCB0aGlzLmhvc3RFbGVtZW50Lm9mZnNldFRvcCk7IC8vIHBhZ2VZIG9mIHRhYmxlIHRhZ1xuICAgIGNvbnNvbGUuaW5mbyhcInRoaXMuaG9zdEVsZW1lbnQuc2Nyb2xsSGVpZ2h0XCIsIHRoaXMuaG9zdEVsZW1lbnQuc2Nyb2xsSGVpZ2h0KTsgLy8gaGVpZ2h0IG9mIHZpc2libGUgc2Nyb2xsIGFyZWFcbiAgICBjb25zb2xlLmluZm8oXCJ0aGlzLnNjcm9sbFZpZXdwb3J0VG9wXCIsIHRoaXMuc2Nyb2xsVG9wKTsgLy8gYW1vdW50IG9mIHB4IHNjcm9sbGVkIHRvIHRvcCAoaW5pdGlhbCA6IDApXG4gICAgY29uc29sZS5pbmZvKFwidGhpcy5hcmVhSGVhZGVyQ2VudGVyLnBhcmVudC5jbGllbnRIZWlnaHRcIiwgdGhpcy5hcmVhSGVhZGVyQ2VudGVyLnBhcmVudC5jbGllbnRIZWlnaHQpO1xuICAgIGNvbnNvbGUuaW5mbyhcImJvZHlZXCIsIGJvZHlZKTtcbiAgICBjb25zb2xlLmluZm8oXCJib2R5WFwiLCBib2R5WCk7XG4gICAgY29uc29sZS5pbmZvKFwicm93c1wiLCB0aGlzLmZpcnN0VmlzaWJsZVJvd0luZGV4KTtcbiAgICBjb25zb2xlLmluZm8oXCJcIik7XG4gICAgY29uc29sZS5pbmZvKFwidGhpcy50YWJsZU1vZGVsXCIsIHRoaXMudGFibGVNb2RlbCk7XG4gICAgY29uc29sZS5pbmZvKFwiXCIpO1xuICAgIGNvbnNvbGUuaW5mbyhcInRoaXMubW91c2VNb3ZlRXZlbnQuY2xpZW50WFwiLCB0aGlzLm1vdXNlSGFuZGxlci5tb3VzZUV2ZW50Py5jbGllbnRYKTtcbiAgICBjb25zb2xlLmluZm8oXCJ0aGlzLmhvc3RFbGVtZW50Lm9mZnNldExlZnRcIiwgdGhpcy5ob3N0RWxlbWVudC5vZmZzZXRMZWZ0KTtcbiAgICBjb25zb2xlLmluZm8oXCJ0aGlzLmFyZWFCb2R5V2VzdEdlby53aWR0aFwiLCB0aGlzLmFyZWFCb2R5V2VzdEdlby53aWR0aCk7XG4gIH1cblxuICBwcml2YXRlIGF1dG9SZXN0b3JlU2Nyb2xsUG9zaXRpb24oKSB7XG4gICAgaWYgKHRoaXMudGFibGVPcHRpb25zPy5hdXRvUmVzdG9yZU9wdGlvbnMgJiYgdGhpcy5zdG9yZVNjcm9sbFBvc1N0YXRlU2VydmljZSkge1xuICAgICAgY29uc3QgYXV0b1Jlc3RvcmVPcHRpb25zID0gdGhpcy50YWJsZU9wdGlvbnMuYXV0b1Jlc3RvcmVPcHRpb25zO1xuICAgICAgaWYgKGF1dG9SZXN0b3JlT3B0aW9ucy5hdXRvUmVzdG9yZVNjcm9sbFBvc2l0aW9uKSB7XG4gICAgICAgIGNvbnN0IHNjcm9sbE9mZnNldCA9IHRoaXMuc3RvcmVTY3JvbGxQb3NTdGF0ZVNlcnZpY2UuZ2V0U2Nyb2xsT2Zmc2V0KCk7XG4gICAgICAgIGlmIChzY3JvbGxPZmZzZXQpIHtcbiAgICAgICAgICB0aGlzLnNjcm9sbFZpZXdwb3J0LnNjcm9sbFRvKC4uLnNjcm9sbE9mZnNldCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGF1dG9SZXN0b3JlU29ydGluZ1N0YXRlKCkge1xuICAgIGlmICh0aGlzLnRhYmxlT3B0aW9ucz8uYXV0b1Jlc3RvcmVPcHRpb25zPy5hdXRvUmVzdG9yZVNvcnRpbmdTdGF0ZSAmJiB0aGlzLnN0b3JlU29ydGluZ1NlcnZpY2UpIHtcbiAgICAgIGNvbnN0IHNvcnRJdGVtcyA9IHRoaXMuc3RvcmVTb3J0aW5nU2VydmljZS5nZXRTb3J0SXRlbXMoKTtcbiAgICAgIGlmIChzb3J0SXRlbXM/Lmxlbmd0aCkge1xuICAgICAgICBjb25zdCBhcmVhTW9kZWwgPSB0aGlzLnRhYmxlTW9kZWwuZ2V0Qm9keU1vZGVsKCk7XG4gICAgICAgIGFyZWFNb2RlbC5kb1NvcnQoc29ydEl0ZW1zKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGF1dG9SZXN0b3JlQ29sbGFwc2VkRXhwYW5kZWRTdGF0ZSgpIHtcbiAgICBpZiAodGhpcy50YWJsZU9wdGlvbnM/LmF1dG9SZXN0b3JlT3B0aW9ucz8uZ2V0Um93SWQgJiYgdGhpcy5zdG9yZVN0YXRlQ29sbGFwc2VkRXhwYW5kU2VydmljZSkge1xuICAgICAgY29uc3QgYXV0b1Jlc3RvcmVPcHRpb25zID0gdGhpcy50YWJsZU9wdGlvbnMuYXV0b1Jlc3RvcmVPcHRpb25zO1xuICAgICAgY29uc3QgZ2V0Um93SWQgPSBhdXRvUmVzdG9yZU9wdGlvbnMuZ2V0Um93SWQ7XG4gICAgICBpZiAoYXV0b1Jlc3RvcmVPcHRpb25zLmF1dG9SZXN0b3JlQ29sbGFwc2VkRXhwYW5kZWRTdGF0ZSAmJiBnZXRSb3dJZCkge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RvcmVTdGF0ZUNvbGxhcHNlZEV4cGFuZFNlcnZpY2UuY29sbGFwc2VkRXhwYW5kZWRTdGF0ZUdldCgpO1xuICAgICAgICBjb25zdCBhcmVhTW9kZWwgPSB0aGlzLnRhYmxlTW9kZWwuZ2V0QXJlYU1vZGVsKFwiYm9keVwiKTtcbiAgICAgICAgaWYgKGFyZWFNb2RlbCBpbnN0YW5jZW9mIEFyZWFNb2RlbFRyZWUpIHtcbiAgICAgICAgICBjb25zdCBhbXRyOiBBcmVhTW9kZWxUcmVlPGFueT4gPSBhcmVhTW9kZWw7XG4gICAgICAgICAgY29uc3Qgcm93Q291bnQgPSBhcmVhTW9kZWwuZ2V0Um93Q291bnQoKTtcblxuXG4gICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dDb3VudDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByb3c6IFRyZWVSb3c8YW55PiB8IHVuZGVmaW5lZCA9IGFyZWFNb2RlbC5nZXRSb3dCeUluZGV4KGkpO1xuICAgICAgICAgICAgaWYgKHJvdykge1xuICAgICAgICAgICAgICBpZiAoc3RhdGUuYWxsRXhwYW5kZWQpIHtcbiAgICAgICAgICAgICAgICByb3cuZXhwYW5kZWQgPSB0cnVlO1xuXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUuYWxsQ29sbGFwc2VkKSB7XG4gICAgICAgICAgICAgICAgcm93LmV4cGFuZGVkID0gZmFsc2U7XG5cbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCByb3dJZCA9IGdldFJvd0lkKHJvdy5kYXRhKTtcbiAgICAgICAgICAgICAgICBpZiAoc3RhdGUubW9kZSA9PT0gXCJleHBhbmRlZFwiKSB7XG4gICAgICAgICAgICAgICAgICByb3cuZXhwYW5kZWQgPSAodGhpcy5zdG9yZVN0YXRlQ29sbGFwc2VkRXhwYW5kU2VydmljZS5jb2xsYXBzZWRFeHBhbmRlZFN0YXRlSW5jbHVkZXMocm93SWQpKTtcblxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUubW9kZSA9PT0gXCJjb2xsYXBzZWRcIikge1xuICAgICAgICAgICAgICAgICAgcm93LmV4cGFuZGVkID0gKCF0aGlzLnN0b3JlU3RhdGVDb2xsYXBzZWRFeHBhbmRTZXJ2aWNlLmNvbGxhcHNlZEV4cGFuZGVkU3RhdGVJbmNsdWRlcyhyb3dJZCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBhbXRyLnJlY2FsY1Zpc2libGVUcmVlUm93cygpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cblxuIl19