@schneideress/dashboardframework 13.0.0 → 17.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/README.md +7 -7
  2. package/esm2022/gridster/index.mjs +12 -0
  3. package/esm2022/gridster/lib/gridster.component.mjs +627 -0
  4. package/esm2022/gridster/lib/gridster.interface.mjs +3 -0
  5. package/esm2022/gridster/lib/gridster.module.mjs +17 -0
  6. package/esm2022/gridster/lib/gridsterCompact.service.mjs +126 -0
  7. package/esm2022/gridster/lib/gridsterConfig.constant.mjs +118 -0
  8. package/esm2022/gridster/lib/gridsterConfig.interface.mjs +37 -0
  9. package/esm2022/gridster/lib/gridsterConfigS.interface.mjs +2 -0
  10. package/esm2022/gridster/lib/gridsterDraggable.service.mjs +405 -0
  11. package/esm2022/gridster/lib/gridsterEmptyCell.service.mjs +255 -0
  12. package/esm2022/gridster/lib/gridsterItem.component.mjs +228 -0
  13. package/esm2022/gridster/lib/gridsterItem.interface.mjs +3 -0
  14. package/esm2022/gridster/lib/gridsterPreview.component.mjs +36 -0
  15. package/esm2022/gridster/lib/gridsterPush.service.mjs +316 -0
  16. package/esm2022/gridster/lib/gridsterPushResize.service.mjs +225 -0
  17. package/esm2022/gridster/lib/gridsterRenderer.interface.mjs +2 -0
  18. package/esm2022/gridster/lib/gridsterRenderer.service.mjs +274 -0
  19. package/esm2022/gridster/lib/gridsterResizable.service.mjs +470 -0
  20. package/esm2022/gridster/lib/gridsterResizeEventType.interface.mjs +2 -0
  21. package/esm2022/gridster/lib/gridsterScroll.service.mjs +134 -0
  22. package/esm2022/gridster/lib/gridsterSwap.service.mjs +87 -0
  23. package/esm2022/gridster/lib/gridsterUtils.service.mjs +92 -0
  24. package/esm2022/lib/custom.notifier.options.mjs +41 -0
  25. package/esm2022/lib/ra-dashboard-area/ra.dashboard.area.mjs +460 -0
  26. package/esm2022/lib/ra-widget-container/lock-tooltip/lock.tooltip.component.mjs +43 -0
  27. package/esm2022/lib/ra-widget-container/ra.widget.container.component.mjs +767 -0
  28. package/esm2022/lib/ra.base.dashboard.filter.mjs +41 -0
  29. package/esm2022/lib/ra.base.dashboard.template.mjs +33 -0
  30. package/esm2022/lib/ra.dashbard.event.bus.mjs +46 -0
  31. package/esm2022/lib/ra.dashboard.module.mjs +55 -0
  32. package/esm2022/lib/ra.dashboard.responsive.service.mjs +139 -0
  33. package/esm2022/lib/ra.dashboard.service.mjs +77 -0
  34. package/esm2022/lib/ra.event.enum.mjs +60 -0
  35. package/esm2022/lib/ra.gridster.config.mjs +56 -0
  36. package/esm2022/public-api.mjs +13 -0
  37. package/esm2022/schneideress-dashboardframework.mjs +5 -0
  38. package/fesm2022/schneideress-dashboardframework.mjs +5198 -0
  39. package/fesm2022/schneideress-dashboardframework.mjs.map +1 -0
  40. package/gridster/index.d.ts +9 -0
  41. package/gridster/lib/gridster.component.d.ts +79 -0
  42. package/gridster/lib/gridster.interface.d.ts +49 -0
  43. package/gridster/lib/gridster.module.d.ts +8 -0
  44. package/gridster/lib/gridsterCompact.service.d.ts +11 -0
  45. package/gridster/lib/gridsterConfig.constant.d.ts +2 -0
  46. package/gridster/lib/gridsterConfig.interface.d.ts +155 -0
  47. package/gridster/lib/gridsterConfigS.interface.d.ts +107 -0
  48. package/gridster/lib/gridsterDraggable.service.d.ts +68 -0
  49. package/gridster/lib/gridsterEmptyCell.service.d.ts +31 -0
  50. package/gridster/lib/gridsterItem.component.d.ts +61 -0
  51. package/gridster/lib/gridsterItem.interface.d.ts +64 -0
  52. package/gridster/lib/gridsterPreview.component.d.ts +17 -0
  53. package/gridster/lib/gridsterPush.service.d.ts +34 -0
  54. package/gridster/lib/gridsterPushResize.service.d.ts +26 -0
  55. package/gridster/lib/gridsterRenderer.interface.d.ts +14 -0
  56. package/gridster/lib/gridsterRenderer.service.d.ts +37 -0
  57. package/gridster/lib/gridsterResizable.service.d.ts +86 -0
  58. package/gridster/lib/gridsterResizeEventType.interface.d.ts +6 -0
  59. package/gridster/lib/gridsterScroll.service.d.ts +7 -0
  60. package/gridster/lib/gridsterSwap.service.d.ts +13 -0
  61. package/gridster/lib/gridsterUtils.service.d.ts +16 -0
  62. package/{schneideress-dashboardframework.d.ts → index.d.ts} +5 -5
  63. package/lib/custom.notifier.options.d.ts +2 -2
  64. package/lib/ra-dashboard-area/ra.dashboard.area.d.ts +88 -88
  65. package/lib/ra-widget-container/lock-tooltip/lock.tooltip.component.d.ts +20 -20
  66. package/lib/ra-widget-container/ra.widget.container.component.d.ts +142 -142
  67. package/lib/ra.base.dashboard.filter.d.ts +17 -17
  68. package/lib/ra.base.dashboard.template.d.ts +18 -18
  69. package/lib/ra.dashbard.event.bus.d.ts +23 -23
  70. package/lib/ra.dashboard.module.d.ts +16 -17
  71. package/lib/ra.dashboard.responsive.service.d.ts +24 -24
  72. package/lib/ra.dashboard.service.d.ts +25 -25
  73. package/lib/ra.event.enum.d.ts +57 -57
  74. package/lib/ra.gridster.config.d.ts +2 -2
  75. package/package.json +11 -17
  76. package/public-api.d.ts +9 -9
  77. package/esm2020/lib/custom.notifier.options.mjs +0 -41
  78. package/esm2020/lib/ra-dashboard-area/ra.dashboard.area.mjs +0 -445
  79. package/esm2020/lib/ra-widget-container/lock-tooltip/lock.tooltip.component.mjs +0 -43
  80. package/esm2020/lib/ra-widget-container/ra.widget.container.component.mjs +0 -767
  81. package/esm2020/lib/ra.base.dashboard.filter.mjs +0 -44
  82. package/esm2020/lib/ra.base.dashboard.template.mjs +0 -36
  83. package/esm2020/lib/ra.dashbard.event.bus.mjs +0 -46
  84. package/esm2020/lib/ra.dashboard.module.mjs +0 -64
  85. package/esm2020/lib/ra.dashboard.responsive.service.mjs +0 -136
  86. package/esm2020/lib/ra.dashboard.service.mjs +0 -77
  87. package/esm2020/lib/ra.event.enum.mjs +0 -60
  88. package/esm2020/lib/ra.gridster.config.mjs +0 -56
  89. package/esm2020/public-api.mjs +0 -15
  90. package/esm2020/schneideress-dashboardframework.mjs +0 -5
  91. package/fesm2015/schneideress-dashboardframework.mjs +0 -1800
  92. package/fesm2015/schneideress-dashboardframework.mjs.map +0 -1
  93. package/fesm2020/schneideress-dashboardframework.mjs +0 -1790
  94. package/fesm2020/schneideress-dashboardframework.mjs.map +0 -1
@@ -0,0 +1,470 @@
1
+ import { DirTypes } from './gridsterConfig.interface';
2
+ import { GridsterPush } from './gridsterPush.service';
3
+ import { GridsterPushResize } from './gridsterPushResize.service';
4
+ import { cancelScroll, scroll } from './gridsterScroll.service';
5
+ import { GridsterUtils } from './gridsterUtils.service';
6
+ export class GridsterResizable {
7
+ constructor(gridsterItem, gridster, zone) {
8
+ this.zone = zone;
9
+ /**
10
+ * The direction function may reference any of the `GridsterResizable` class methods, that are
11
+ * responsible for gridster resize when the `dragmove` event is being handled. E.g. it may reference
12
+ * the `handleNorth` method when the north handle is pressed and moved by a mouse.
13
+ */
14
+ this.directionFunction = null;
15
+ this.dragMove = (e) => {
16
+ if (this.directionFunction === null) {
17
+ throw new Error('The `directionFunction` has not been set before calling `dragMove`.');
18
+ }
19
+ e.stopPropagation();
20
+ e.preventDefault();
21
+ GridsterUtils.checkTouchEvent(e);
22
+ this.offsetTop = this.gridster.el.scrollTop - this.gridster.el.offsetTop;
23
+ this.offsetLeft = this.gridster.el.scrollLeft - this.gridster.el.offsetLeft;
24
+ scroll(this.gridster, this.left, this.top, this.width, this.height, e, this.lastMouse, this.directionFunction, true, this.resizeEventScrollType);
25
+ const scale = this.gridster.options.scale || 1;
26
+ this.directionFunction({
27
+ clientX: this.originalClientX + (e.clientX - this.originalClientX) / scale,
28
+ clientY: this.originalClientY + (e.clientY - this.originalClientY) / scale
29
+ });
30
+ this.lastMouse.clientX = e.clientX;
31
+ this.lastMouse.clientY = e.clientY;
32
+ this.zone.run(() => {
33
+ this.gridster.updateGrid();
34
+ });
35
+ };
36
+ this.dragStop = (e) => {
37
+ e.stopPropagation();
38
+ e.preventDefault();
39
+ cancelScroll();
40
+ this.mousemove();
41
+ this.mouseup();
42
+ this.mouseleave();
43
+ this.cancelOnBlur();
44
+ this.touchmove();
45
+ this.touchend();
46
+ this.touchcancel();
47
+ this.gridster.dragInProgress = false;
48
+ this.gridster.updateGrid();
49
+ if (this.gridster.options.resizable &&
50
+ this.gridster.options.resizable.stop) {
51
+ Promise.resolve(this.gridster.options.resizable.stop(this.gridsterItem.item, this.gridsterItem, e)).then(this.makeResize, this.cancelResize);
52
+ }
53
+ else {
54
+ this.makeResize();
55
+ }
56
+ setTimeout(() => {
57
+ this.gridsterItem.renderer.removeClass(this.gridsterItem.el, 'gridster-item-resizing');
58
+ if (this.gridster) {
59
+ this.gridster.movingItem = null;
60
+ this.gridster.previewStyle();
61
+ }
62
+ });
63
+ };
64
+ this.cancelResize = () => {
65
+ this.gridsterItem.$item.cols = this.gridsterItem.item.cols || 1;
66
+ this.gridsterItem.$item.rows = this.gridsterItem.item.rows || 1;
67
+ this.gridsterItem.$item.x = this.gridsterItem.item.x || 0;
68
+ this.gridsterItem.$item.y = this.gridsterItem.item.y || 0;
69
+ this.gridsterItem.setSize();
70
+ this.push.restoreItems();
71
+ this.pushResize.restoreItems();
72
+ this.push.destroy();
73
+ this.push = null;
74
+ this.pushResize.destroy();
75
+ this.pushResize = null;
76
+ };
77
+ this.makeResize = () => {
78
+ this.gridsterItem.setSize();
79
+ this.gridsterItem.checkItemChanges(this.gridsterItem.$item, this.gridsterItem.item);
80
+ this.push.setPushedItems();
81
+ this.pushResize.setPushedItems();
82
+ this.push.destroy();
83
+ this.push = null;
84
+ this.pushResize.destroy();
85
+ this.pushResize = null;
86
+ };
87
+ this.handleNorth = (e) => {
88
+ this.top = e.clientY + this.offsetTop - this.diffTop;
89
+ this.height = this.bottom - this.top;
90
+ if (this.minHeight > this.height) {
91
+ this.height = this.minHeight;
92
+ this.top = this.bottom - this.minHeight;
93
+ }
94
+ else if (this.gridster.options.enableBoundaryControl) {
95
+ this.top = Math.max(0, this.top);
96
+ this.height = this.bottom - this.top;
97
+ }
98
+ const marginTop = this.gridster.options.pushItems ? this.margin : 0;
99
+ this.newPosition = this.gridster.pixelsToPositionY(this.top + marginTop, Math.floor);
100
+ if (this.gridsterItem.$item.y !== this.newPosition) {
101
+ this.itemBackup[1] = this.gridsterItem.$item.y;
102
+ this.itemBackup[3] = this.gridsterItem.$item.rows;
103
+ this.gridsterItem.$item.rows +=
104
+ this.gridsterItem.$item.y - this.newPosition;
105
+ this.gridsterItem.$item.y = this.newPosition;
106
+ this.pushResize.pushItems(this.pushResize.fromSouth);
107
+ this.push.pushItems(this.push.fromSouth, this.gridster.$options.disablePushOnResize);
108
+ if (this.gridster.checkCollision(this.gridsterItem.$item)) {
109
+ this.gridsterItem.$item.y = this.itemBackup[1];
110
+ this.gridsterItem.$item.rows = this.itemBackup[3];
111
+ this.top = this.gridster.positionYToPixels(this.gridsterItem.$item.y);
112
+ this.setItemTop(this.gridster.positionYToPixels(this.gridsterItem.$item.y));
113
+ this.setItemHeight(this.gridster.positionYToPixels(this.gridsterItem.$item.rows) -
114
+ this.margin);
115
+ return;
116
+ }
117
+ else {
118
+ this.gridster.previewStyle();
119
+ }
120
+ this.pushResize.checkPushBack();
121
+ this.push.checkPushBack();
122
+ }
123
+ this.setItemTop(this.top);
124
+ this.setItemHeight(this.height);
125
+ };
126
+ this.handleWest = (e) => {
127
+ const clientX = this.gridster.$options.dirType === DirTypes.RTL
128
+ ? this.originalClientX + (this.originalClientX - e.clientX)
129
+ : e.clientX;
130
+ this.left = clientX + this.offsetLeft - this.diffLeft;
131
+ this.width = this.right - this.left;
132
+ if (this.minWidth > this.width) {
133
+ this.width = this.minWidth;
134
+ this.left = this.right - this.minWidth;
135
+ }
136
+ else if (this.gridster.options.enableBoundaryControl) {
137
+ this.left = Math.max(0, this.left);
138
+ this.width = this.right - this.left;
139
+ }
140
+ const marginLeft = this.gridster.options.pushItems ? this.margin : 0;
141
+ this.newPosition = this.gridster.pixelsToPositionX(this.left + marginLeft, Math.floor);
142
+ if (this.gridsterItem.$item.x !== this.newPosition) {
143
+ this.itemBackup[0] = this.gridsterItem.$item.x;
144
+ this.itemBackup[2] = this.gridsterItem.$item.cols;
145
+ this.gridsterItem.$item.cols +=
146
+ this.gridsterItem.$item.x - this.newPosition;
147
+ this.gridsterItem.$item.x = this.newPosition;
148
+ this.pushResize.pushItems(this.pushResize.fromEast);
149
+ this.push.pushItems(this.push.fromEast, this.gridster.$options.disablePushOnResize);
150
+ if (this.gridster.checkCollision(this.gridsterItem.$item)) {
151
+ this.gridsterItem.$item.x = this.itemBackup[0];
152
+ this.gridsterItem.$item.cols = this.itemBackup[2];
153
+ this.left = this.gridster.positionXToPixels(this.gridsterItem.$item.x);
154
+ this.setItemLeft(this.gridster.positionXToPixels(this.gridsterItem.$item.x));
155
+ this.setItemWidth(this.gridster.positionXToPixels(this.gridsterItem.$item.cols) -
156
+ this.margin);
157
+ return;
158
+ }
159
+ else {
160
+ this.gridster.previewStyle();
161
+ }
162
+ this.pushResize.checkPushBack();
163
+ this.push.checkPushBack();
164
+ }
165
+ this.setItemLeft(this.left);
166
+ this.setItemWidth(this.width);
167
+ };
168
+ this.handleSouth = (e) => {
169
+ this.height = e.clientY + this.offsetTop - this.diffBottom - this.top;
170
+ if (this.minHeight > this.height) {
171
+ this.height = this.minHeight;
172
+ }
173
+ this.bottom = this.top + this.height;
174
+ if (this.gridster.options.enableBoundaryControl) {
175
+ const margin = this.outerMarginBottom ?? this.margin;
176
+ const box = this.gridster.el.getBoundingClientRect();
177
+ this.bottom = Math.min(this.bottom, box.bottom - box.top - 2 * margin);
178
+ this.height = this.bottom - this.top;
179
+ }
180
+ const marginBottom = this.gridster.options.pushItems ? 0 : this.margin;
181
+ this.newPosition = this.gridster.pixelsToPositionY(this.bottom + marginBottom, Math.ceil);
182
+ if (this.gridsterItem.$item.y + this.gridsterItem.$item.rows !==
183
+ this.newPosition) {
184
+ this.itemBackup[3] = this.gridsterItem.$item.rows;
185
+ this.gridsterItem.$item.rows =
186
+ this.newPosition - this.gridsterItem.$item.y;
187
+ this.pushResize.pushItems(this.pushResize.fromNorth);
188
+ this.push.pushItems(this.push.fromNorth, this.gridster.$options.disablePushOnResize);
189
+ if (this.gridster.checkCollision(this.gridsterItem.$item)) {
190
+ this.gridsterItem.$item.rows = this.itemBackup[3];
191
+ this.setItemHeight(this.gridster.positionYToPixels(this.gridsterItem.$item.rows) -
192
+ this.margin);
193
+ return;
194
+ }
195
+ else {
196
+ this.gridster.previewStyle();
197
+ }
198
+ this.pushResize.checkPushBack();
199
+ this.push.checkPushBack();
200
+ }
201
+ this.setItemHeight(this.height);
202
+ };
203
+ this.handleEast = (e) => {
204
+ const clientX = this.gridster.$options.dirType === DirTypes.RTL
205
+ ? this.originalClientX + (this.originalClientX - e.clientX)
206
+ : e.clientX;
207
+ this.width = clientX + this.offsetLeft - this.diffRight - this.left;
208
+ if (this.minWidth > this.width) {
209
+ this.width = this.minWidth;
210
+ }
211
+ this.right = this.left + this.width;
212
+ if (this.gridster.options.enableBoundaryControl) {
213
+ const margin = this.outerMarginRight ?? this.margin;
214
+ const box = this.gridster.el.getBoundingClientRect();
215
+ this.right = Math.min(this.right, box.right - box.left - 2 * margin);
216
+ this.width = this.right - this.left;
217
+ }
218
+ const marginRight = this.gridster.options.pushItems ? 0 : this.margin;
219
+ this.newPosition = this.gridster.pixelsToPositionX(this.right + marginRight, Math.ceil);
220
+ if (this.gridsterItem.$item.x + this.gridsterItem.$item.cols !==
221
+ this.newPosition) {
222
+ this.itemBackup[2] = this.gridsterItem.$item.cols;
223
+ this.gridsterItem.$item.cols =
224
+ this.newPosition - this.gridsterItem.$item.x;
225
+ this.pushResize.pushItems(this.pushResize.fromWest);
226
+ this.push.pushItems(this.push.fromWest, this.gridster.$options.disablePushOnResize);
227
+ if (this.gridster.checkCollision(this.gridsterItem.$item)) {
228
+ this.gridsterItem.$item.cols = this.itemBackup[2];
229
+ this.setItemWidth(this.gridster.positionXToPixels(this.gridsterItem.$item.cols) -
230
+ this.margin);
231
+ return;
232
+ }
233
+ else {
234
+ this.gridster.previewStyle();
235
+ }
236
+ this.pushResize.checkPushBack();
237
+ this.push.checkPushBack();
238
+ }
239
+ this.setItemWidth(this.width);
240
+ };
241
+ this.handleNorthWest = (e) => {
242
+ this.handleNorth(e);
243
+ this.handleWest(e);
244
+ };
245
+ this.handleNorthEast = (e) => {
246
+ this.handleNorth(e);
247
+ this.handleEast(e);
248
+ };
249
+ this.handleSouthWest = (e) => {
250
+ this.handleSouth(e);
251
+ this.handleWest(e);
252
+ };
253
+ this.handleSouthEast = (e) => {
254
+ this.handleSouth(e);
255
+ this.handleEast(e);
256
+ };
257
+ this.gridsterItem = gridsterItem;
258
+ this.gridster = gridster;
259
+ this.lastMouse = {
260
+ clientX: 0,
261
+ clientY: 0
262
+ };
263
+ this.itemBackup = [0, 0, 0, 0];
264
+ this.resizeEventScrollType = {
265
+ west: false,
266
+ east: false,
267
+ north: false,
268
+ south: false
269
+ };
270
+ }
271
+ destroy() {
272
+ this.gridster?.previewStyle();
273
+ this.gridster = this.gridsterItem = null;
274
+ }
275
+ dragStart(e) {
276
+ if (e.which && e.which !== 1) {
277
+ return;
278
+ }
279
+ if (this.gridster.options.resizable &&
280
+ this.gridster.options.resizable.start) {
281
+ this.gridster.options.resizable.start(this.gridsterItem.item, this.gridsterItem, e);
282
+ }
283
+ e.stopPropagation();
284
+ e.preventDefault();
285
+ this.zone.runOutsideAngular(() => {
286
+ this.mousemove = this.gridsterItem.renderer.listen('document', 'mousemove', this.dragMove);
287
+ this.touchmove = this.gridster.renderer.listen(this.gridster.el, 'touchmove', this.dragMove);
288
+ });
289
+ this.mouseup = this.gridsterItem.renderer.listen('document', 'mouseup', this.dragStop);
290
+ this.mouseleave = this.gridsterItem.renderer.listen('document', 'mouseleave', this.dragStop);
291
+ this.cancelOnBlur = this.gridsterItem.renderer.listen('window', 'blur', this.dragStop);
292
+ this.touchend = this.gridsterItem.renderer.listen('document', 'touchend', this.dragStop);
293
+ this.touchcancel = this.gridsterItem.renderer.listen('document', 'touchcancel', this.dragStop);
294
+ this.gridsterItem.renderer.addClass(this.gridsterItem.el, 'gridster-item-resizing');
295
+ this.lastMouse.clientX = e.clientX;
296
+ this.lastMouse.clientY = e.clientY;
297
+ this.left = this.gridsterItem.left;
298
+ this.top = this.gridsterItem.top;
299
+ this.originalClientX = e.clientX;
300
+ this.originalClientY = e.clientY;
301
+ this.width = this.gridsterItem.width;
302
+ this.height = this.gridsterItem.height;
303
+ this.bottom = this.gridsterItem.top + this.gridsterItem.height;
304
+ this.right = this.gridsterItem.left + this.gridsterItem.width;
305
+ this.margin = this.gridster.$options.margin;
306
+ this.outerMarginTop = this.gridster.$options.outerMarginTop;
307
+ this.outerMarginRight = this.gridster.$options.outerMarginRight;
308
+ this.outerMarginBottom = this.gridster.$options.outerMarginBottom;
309
+ this.outerMarginLeft = this.gridster.$options.outerMarginLeft;
310
+ this.offsetLeft = this.gridster.el.scrollLeft - this.gridster.el.offsetLeft;
311
+ this.offsetTop = this.gridster.el.scrollTop - this.gridster.el.offsetTop;
312
+ this.diffLeft = e.clientX + this.offsetLeft - this.left;
313
+ this.diffRight = e.clientX + this.offsetLeft - this.right;
314
+ this.diffTop = e.clientY + this.offsetTop - this.top;
315
+ this.diffBottom = e.clientY + this.offsetTop - this.bottom;
316
+ this.minHeight =
317
+ this.gridster.positionYToPixels(this.gridsterItem.$item.minItemRows ||
318
+ this.gridster.$options.minItemRows) - this.margin;
319
+ this.minWidth =
320
+ this.gridster.positionXToPixels(this.gridsterItem.$item.minItemCols ||
321
+ this.gridster.$options.minItemCols) - this.margin;
322
+ this.gridster.movingItem = this.gridsterItem.$item;
323
+ this.gridster.previewStyle();
324
+ this.push = new GridsterPush(this.gridsterItem);
325
+ this.pushResize = new GridsterPushResize(this.gridsterItem);
326
+ this.gridster.dragInProgress = true;
327
+ this.gridster.updateGrid();
328
+ const { classList } = e.target;
329
+ if (classList.contains('handle-n')) {
330
+ this.resizeEventScrollType.north = true;
331
+ this.directionFunction = this.handleNorth;
332
+ }
333
+ else if (classList.contains('handle-w')) {
334
+ if (this.gridster.$options.dirType === DirTypes.RTL) {
335
+ this.resizeEventScrollType.east = true;
336
+ this.directionFunction = this.handleEast;
337
+ }
338
+ else {
339
+ this.resizeEventScrollType.west = true;
340
+ this.directionFunction = this.handleWest;
341
+ }
342
+ }
343
+ else if (classList.contains('handle-s')) {
344
+ this.resizeEventScrollType.south = true;
345
+ this.directionFunction = this.handleSouth;
346
+ }
347
+ else if (classList.contains('handle-e')) {
348
+ if (this.gridster.$options.dirType === DirTypes.RTL) {
349
+ this.resizeEventScrollType.west = true;
350
+ this.directionFunction = this.handleWest;
351
+ }
352
+ else {
353
+ this.resizeEventScrollType.east = true;
354
+ this.directionFunction = this.handleEast;
355
+ }
356
+ }
357
+ else if (classList.contains('handle-nw')) {
358
+ if (this.gridster.$options.dirType === DirTypes.RTL) {
359
+ this.resizeEventScrollType.north = true;
360
+ this.resizeEventScrollType.east = true;
361
+ this.directionFunction = this.handleNorthEast;
362
+ }
363
+ else {
364
+ this.resizeEventScrollType.north = true;
365
+ this.resizeEventScrollType.west = true;
366
+ this.directionFunction = this.handleNorthWest;
367
+ }
368
+ }
369
+ else if (classList.contains('handle-ne')) {
370
+ if (this.gridster.$options.dirType === DirTypes.RTL) {
371
+ this.resizeEventScrollType.north = true;
372
+ this.resizeEventScrollType.west = true;
373
+ this.directionFunction = this.handleNorthWest;
374
+ }
375
+ else {
376
+ this.resizeEventScrollType.north = true;
377
+ this.resizeEventScrollType.east = true;
378
+ this.directionFunction = this.handleNorthEast;
379
+ }
380
+ }
381
+ else if (classList.contains('handle-sw')) {
382
+ if (this.gridster.$options.dirType === DirTypes.RTL) {
383
+ this.resizeEventScrollType.south = true;
384
+ this.resizeEventScrollType.east = true;
385
+ this.directionFunction = this.handleSouthEast;
386
+ }
387
+ else {
388
+ this.resizeEventScrollType.south = true;
389
+ this.resizeEventScrollType.west = true;
390
+ this.directionFunction = this.handleSouthWest;
391
+ }
392
+ }
393
+ else if (classList.contains('handle-se')) {
394
+ if (this.gridster.$options.dirType === DirTypes.RTL) {
395
+ this.resizeEventScrollType.south = true;
396
+ this.resizeEventScrollType.west = true;
397
+ this.directionFunction = this.handleSouthWest;
398
+ }
399
+ else {
400
+ this.resizeEventScrollType.south = true;
401
+ this.resizeEventScrollType.east = true;
402
+ this.directionFunction = this.handleSouthEast;
403
+ }
404
+ }
405
+ }
406
+ toggle() {
407
+ this.resizeEnabled = this.gridsterItem.canBeResized();
408
+ this.resizableHandles = this.gridsterItem.getResizableHandles();
409
+ }
410
+ dragStartDelay(e) {
411
+ GridsterUtils.checkTouchEvent(e);
412
+ if (!this.gridster.$options.resizable.delayStart) {
413
+ this.dragStart(e);
414
+ return;
415
+ }
416
+ const timeout = setTimeout(() => {
417
+ this.dragStart(e);
418
+ cancelDrag();
419
+ }, this.gridster.$options.resizable.delayStart);
420
+ const { cancelMouse, cancelMouseLeave, cancelOnBlur, cancelTouchMove, cancelTouchEnd, cancelTouchCancel } = this.zone.runOutsideAngular(() => {
421
+ // Note: all of these events are being added within the `<root>` zone since they all
422
+ // don't do any view updates and don't require Angular running change detection.
423
+ // All event listeners call `cancelDrag` once the event is dispatched, the `cancelDrag`
424
+ // is responsible only for removing event listeners.
425
+ const cancelMouse = this.gridsterItem.renderer.listen('document', 'mouseup', cancelDrag);
426
+ const cancelMouseLeave = this.gridsterItem.renderer.listen('document', 'mouseleave', cancelDrag);
427
+ const cancelOnBlur = this.gridsterItem.renderer.listen('window', 'blur', cancelDrag);
428
+ const cancelTouchMove = this.gridsterItem.renderer.listen('document', 'touchmove', cancelMove);
429
+ const cancelTouchEnd = this.gridsterItem.renderer.listen('document', 'touchend', cancelDrag);
430
+ const cancelTouchCancel = this.gridsterItem.renderer.listen('document', 'touchcancel', cancelDrag);
431
+ return {
432
+ cancelMouse,
433
+ cancelMouseLeave,
434
+ cancelOnBlur,
435
+ cancelTouchMove,
436
+ cancelTouchEnd,
437
+ cancelTouchCancel
438
+ };
439
+ });
440
+ function cancelMove(eventMove) {
441
+ GridsterUtils.checkTouchEvent(eventMove);
442
+ if (Math.abs(eventMove.clientX - e.clientX) > 9 ||
443
+ Math.abs(eventMove.clientY - e.clientY) > 9) {
444
+ cancelDrag();
445
+ }
446
+ }
447
+ function cancelDrag() {
448
+ clearTimeout(timeout);
449
+ cancelOnBlur();
450
+ cancelMouse();
451
+ cancelMouseLeave();
452
+ cancelTouchMove();
453
+ cancelTouchEnd();
454
+ cancelTouchCancel();
455
+ }
456
+ }
457
+ setItemTop(top) {
458
+ this.gridster.gridRenderer.setCellPosition(this.gridsterItem.renderer, this.gridsterItem.el, this.left, top);
459
+ }
460
+ setItemLeft(left) {
461
+ this.gridster.gridRenderer.setCellPosition(this.gridsterItem.renderer, this.gridsterItem.el, left, this.top);
462
+ }
463
+ setItemHeight(height) {
464
+ this.gridsterItem.renderer.setStyle(this.gridsterItem.el, 'height', height + 'px');
465
+ }
466
+ setItemWidth(width) {
467
+ this.gridsterItem.renderer.setStyle(this.gridsterItem.el, 'width', width + 'px');
468
+ }
469
+ }
470
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZHN0ZXJSZXNpemFibGUuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3JhLWRhc2hib2FyZC1mcmFtZXdvcmsvc3JjL2dyaWRzdGVyL2xpYi9ncmlkc3RlclJlc2l6YWJsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFHbEUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUNoRSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFFeEQsTUFBTSxPQUFPLGlCQUFpQjtJQThENUIsWUFDRSxZQUE0QyxFQUM1QyxRQUFvQyxFQUM1QixJQUFZO1FBQVosU0FBSSxHQUFKLElBQUksQ0FBUTtRQXZEdEI7Ozs7V0FJRztRQUNLLHNCQUFpQixHQUVkLElBQUksQ0FBQztRQTBPaEIsYUFBUSxHQUFHLENBQUMsQ0FBYSxFQUFRLEVBQUU7WUFDakMsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ3BDLE1BQU0sSUFBSSxLQUFLLENBQ2IscUVBQXFFLENBQ3RFLENBQUM7WUFDSixDQUFDO1lBRUQsQ0FBQyxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3BCLENBQUMsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNuQixhQUFhLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FB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QUMsWUFBWSxDQUFDLFFBQVEsRUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxFQUFFLEVBQ3BCLElBQUksRUFDSixJQUFJLENBQUMsR0FBRyxDQUNULENBQUM7SUFDSixDQUFDO0lBRUQsYUFBYSxDQUFDLE1BQWM7UUFDMUIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUNqQyxJQUFJLENBQUMsWUFBWSxDQUFDLEVBQUUsRUFDcEIsUUFBUSxFQUNSLE1BQU0sR0FBRyxJQUFJLENBQ2QsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUFZLENBQUMsS0FBYTtRQUN4QixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQ2pDLElBQUksQ0FBQyxZQUFZLENBQUMsRUFBRSxFQUNwQixPQUFPLEVBQ1AsS0FBSyxHQUFHLElBQUksQ0FDYixDQUFDO0lBQ0osQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmdab25lIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBHcmlkc3RlckNvbXBvbmVudEludGVyZmFjZSB9IGZyb20gJy4vZ3JpZHN0ZXIuaW50ZXJmYWNlJztcbmltcG9ydCB7IERpclR5cGVzIH0gZnJvbSAnLi9ncmlkc3RlckNvbmZpZy5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgR3JpZHN0ZXJJdGVtQ29tcG9uZW50SW50ZXJmYWNlIH0gZnJvbSAnLi9ncmlkc3Rlckl0ZW0uaW50ZXJmYWNlJztcbmltcG9ydCB7IEdyaWRzdGVyUHVzaCB9IGZyb20gJy4vZ3JpZHN0ZXJQdXNoLnNlcnZpY2UnO1xuaW1wb3J0IHsgR3JpZHN0ZXJQdXNoUmVzaXplIH0gZnJvbSAnLi9ncmlkc3RlclB1c2hSZXNpemUuc2VydmljZSc7XG5pbXBvcnQgeyBHcmlkc3RlclJlc2l6ZUV2ZW50VHlwZSB9IGZyb20gJy4vZ3JpZHN0ZXJSZXNpemVFdmVudFR5cGUuaW50ZXJmYWNlJztcblxuaW1wb3J0IHsgY2FuY2VsU2Nyb2xsLCBzY3JvbGwgfSBmcm9tICcuL2dyaWRzdGVyU2Nyb2xsLnNlcnZpY2UnO1xuaW1wb3J0IHsgR3JpZHN0ZXJVdGlscyB9IGZyb20gJy4vZ3JpZHN0ZXJVdGlscy5zZXJ2aWNlJztcblxuZXhwb3J0IGNsYXNzIEdyaWRzdGVyUmVzaXphYmxlIHtcbiAgZ3JpZHN0ZXJJdGVtOiBHcmlkc3Rlckl0ZW1Db21wb25lbnRJbnRlcmZhY2U7XG4gIGdyaWRzdGVyOiBHcmlkc3RlckNvbXBvbmVudEludGVyZmFjZTtcbiAgbGFzdE1vdXNlOiB7XG4gICAgY2xpZW50WDogbnVtYmVyO1xuICAgIGNsaWVudFk6IG51bWJlcjtcbiAgfTtcbiAgaXRlbUJhY2t1cDogbnVtYmVyW107XG4gIHJlc2l6ZUV2ZW50U2Nyb2xsVHlwZTogR3JpZHN0ZXJSZXNpemVFdmVudFR5cGU7XG5cbiAgLyoqXG4gICAqIFRoZSBkaXJlY3Rpb24gZnVuY3Rpb24gbWF5IHJlZmVyZW5jZSBhbnkgb2YgdGhlIGBHcmlkc3RlclJlc2l6YWJsZWAgY2xhc3MgbWV0aG9kcywgdGhhdCBhcmVcbiAgICogcmVzcG9uc2libGUgZm9yIGdyaWRzdGVyIHJlc2l6ZSB3aGVuIHRoZSBgZHJhZ21vdmVgIGV2ZW50IGlzIGJlaW5nIGhhbmRsZWQuIEUuZy4gaXQgbWF5IHJlZmVyZW5jZVxuICAgKiB0aGUgYGhhbmRsZU5vcnRoYCBtZXRob2Qgd2hlbiB0aGUgbm9ydGggaGFuZGxlIGlzIHByZXNzZWQgYW5kIG1vdmVkIGJ5IGEgbW91c2UuXG4gICAqL1xuICBwcml2YXRlIGRpcmVjdGlvbkZ1bmN0aW9uOlxuICAgIHwgKChldmVudDogUGljazxNb3VzZUV2ZW50LCAnY2xpZW50WCcgfCAnY2xpZW50WSc+KSA9PiB2b2lkKVxuICAgIHwgbnVsbCA9IG51bGw7XG5cbiAgcmVzaXplRW5hYmxlZCE6IGJvb2xlYW47XG4gIHJlc2l6YWJsZUhhbmRsZXMhOiB7XG4gICAgczogYm9vbGVhbjtcbiAgICBlOiBib29sZWFuO1xuICAgIG46IGJvb2xlYW47XG4gICAgdzogYm9vbGVhbjtcbiAgICBzZTogYm9vbGVhbjtcbiAgICBuZTogYm9vbGVhbjtcbiAgICBzdzogYm9vbGVhbjtcbiAgICBudzogYm9vbGVhbjtcbiAgfTtcbiAgbW91c2Vtb3ZlITogKCkgPT4gdm9pZDtcbiAgbW91c2V1cCE6ICgpID0+IHZvaWQ7XG4gIG1vdXNlbGVhdmUhOiAoKSA9PiB2b2lkO1xuICBjYW5jZWxPbkJsdXIhOiAoKSA9PiB2b2lkO1xuICB0b3VjaG1vdmUhOiAoKSA9PiB2b2lkO1xuICB0b3VjaGVuZCE6ICgpID0+IHZvaWQ7XG4gIHRvdWNoY2FuY2VsITogKCkgPT4gdm9pZDtcbiAgcHVzaCE6IEdyaWRzdGVyUHVzaDtcbiAgcHVzaFJlc2l6ZSE6IEdyaWRzdGVyUHVzaFJlc2l6ZTtcbiAgbWluSGVpZ2h0ITogbnVtYmVyO1xuICBtaW5XaWR0aCE6IG51bWJlcjtcbiAgb2Zmc2V0VG9wITogbnVtYmVyO1xuICBvZmZzZXRMZWZ0ITogbnVtYmVyO1xuICBkaWZmVG9wITogbnVtYmVyO1xuICBkaWZmTGVmdCE6IG51bWJlcjtcbiAgZGlmZlJpZ2h0ITogbnVtYmVyO1xuICBkaWZmQm90dG9tITogbnVtYmVyO1xuICBtYXJnaW4hOiBudW1iZXI7XG4gIG91dGVyTWFyZ2luVG9wITogbnVtYmVyIHwgbnVsbDtcbiAgb3V0ZXJNYXJnaW5SaWdodCE6IG51bWJlciB8IG51bGw7XG4gIG91dGVyTWFyZ2luQm90dG9tITogbnVtYmVyIHwgbnVsbDtcbiAgb3V0ZXJNYXJnaW5MZWZ0ITogbnVtYmVyIHwgbnVsbDtcbiAgb3JpZ2luYWxDbGllbnRYITogbnVtYmVyO1xuICBvcmlnaW5hbENsaWVudFkhOiBudW1iZXI7XG4gIHRvcCE6IG51bWJlcjtcbiAgbGVmdCE6IG51bWJlcjtcbiAgYm90dG9tITogbnVtYmVyO1xuICByaWdodCE6IG51bWJlcjtcbiAgd2lkdGghOiBudW1iZXI7XG4gIGhlaWdodCE6IG51bWJlcjtcbiAgbmV3UG9zaXRpb24hOiBudW1iZXI7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgZ3JpZHN0ZXJJdGVtOiBHcmlkc3Rlckl0ZW1Db21wb25lbnRJbnRlcmZhY2UsXG4gICAgZ3JpZHN0ZXI6IEdyaWRzdGVyQ29tcG9uZW50SW50ZXJmYWNlLFxuICAgIHByaXZhdGUgem9uZTogTmdab25lXG4gICkge1xuICAgIHRoaXMuZ3JpZHN0ZXJJdGVtID0gZ3JpZHN0ZXJJdGVtO1xuICAgIHRoaXMuZ3JpZHN0ZXIgPSBncmlkc3RlcjtcbiAgICB0aGlzLmxhc3RNb3VzZSA9IHtcbiAgICAgIGNsaWVudFg6IDAsXG4gICAgICBjbGllbnRZOiAwXG4gICAgfTtcbiAgICB0aGlzLml0ZW1CYWNrdXAgPSBbMCwgMCwgMCwgMF07XG4gICAgdGhpcy5yZXNpemVFdmVudFNjcm9sbFR5cGUgPSB7XG4gICAgICB3ZXN0OiBmYWxzZSxcbiAgICAgIGVhc3Q6IGZhbHNlLFxuICAgICAgbm9ydGg6IGZhbHNlLFxuICAgICAgc291dGg6IGZhbHNlXG4gICAgfTtcbiAgfVxuXG4gIGRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5ncmlkc3Rlcj8ucHJldmlld1N0eWxlKCk7XG4gICAgdGhpcy5ncmlkc3RlciA9IHRoaXMuZ3JpZHN0ZXJJdGVtID0gbnVsbCE7XG4gIH1cblxuICBkcmFnU3RhcnQoZTogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmIChlLndoaWNoICYmIGUud2hpY2ggIT09IDEpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgaWYgKFxuICAgICAgdGhpcy5ncmlkc3Rlci5vcHRpb25zLnJlc2l6YWJsZSAmJlxuICAgICAgdGhpcy5ncmlkc3Rlci5vcHRpb25zLnJlc2l6YWJsZS5zdGFydFxuICAgICkge1xuICAgICAgdGhpcy5ncmlkc3Rlci5vcHRpb25zLnJlc2l6YWJsZS5zdGFydChcbiAgICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0uaXRlbSxcbiAgICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0sXG4gICAgICAgIGVcbiAgICAgICk7XG4gICAgfVxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuXG4gICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIHRoaXMubW91c2Vtb3ZlID0gdGhpcy5ncmlkc3Rlckl0ZW0ucmVuZGVyZXIubGlzdGVuKFxuICAgICAgICAnZG9jdW1lbnQnLFxuICAgICAgICAnbW91c2Vtb3ZlJyxcbiAgICAgICAgdGhpcy5kcmFnTW92ZVxuICAgICAgKTtcbiAgICAgIHRoaXMudG91Y2htb3ZlID0gdGhpcy5ncmlkc3Rlci5yZW5kZXJlci5saXN0ZW4oXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXIuZWwsXG4gICAgICAgICd0b3VjaG1vdmUnLFxuICAgICAgICB0aGlzLmRyYWdNb3ZlXG4gICAgICApO1xuICAgIH0pO1xuICAgIHRoaXMubW91c2V1cCA9IHRoaXMuZ3JpZHN0ZXJJdGVtLnJlbmRlcmVyLmxpc3RlbihcbiAgICAgICdkb2N1bWVudCcsXG4gICAgICAnbW91c2V1cCcsXG4gICAgICB0aGlzLmRyYWdTdG9wXG4gICAgKTtcbiAgICB0aGlzLm1vdXNlbGVhdmUgPSB0aGlzLmdyaWRzdGVySXRlbS5yZW5kZXJlci5saXN0ZW4oXG4gICAgICAnZG9jdW1lbnQnLFxuICAgICAgJ21vdXNlbGVhdmUnLFxuICAgICAgdGhpcy5kcmFnU3RvcFxuICAgICk7XG4gICAgdGhpcy5jYW5jZWxPbkJsdXIgPSB0aGlzLmdyaWRzdGVySXRlbS5yZW5kZXJlci5saXN0ZW4oXG4gICAgICAnd2luZG93JyxcbiAgICAgICdibHVyJyxcbiAgICAgIHRoaXMuZHJhZ1N0b3BcbiAgICApO1xuICAgIHRoaXMudG91Y2hlbmQgPSB0aGlzLmdyaWRzdGVySXRlbS5yZW5kZXJlci5saXN0ZW4oXG4gICAgICAnZG9jdW1lbnQnLFxuICAgICAgJ3RvdWNoZW5kJyxcbiAgICAgIHRoaXMuZHJhZ1N0b3BcbiAgICApO1xuICAgIHRoaXMudG91Y2hjYW5jZWwgPSB0aGlzLmdyaWRzdGVySXRlbS5yZW5kZXJlci5saXN0ZW4oXG4gICAgICAnZG9jdW1lbnQnLFxuICAgICAgJ3RvdWNoY2FuY2VsJyxcbiAgICAgIHRoaXMuZHJhZ1N0b3BcbiAgICApO1xuXG4gICAgdGhpcy5ncmlkc3Rlckl0ZW0ucmVuZGVyZXIuYWRkQ2xhc3MoXG4gICAgICB0aGlzLmdyaWRzdGVySXRlbS5lbCxcbiAgICAgICdncmlkc3Rlci1pdGVtLXJlc2l6aW5nJ1xuICAgICk7XG4gICAgdGhpcy5sYXN0TW91c2UuY2xpZW50WCA9IGUuY2xpZW50WDtcbiAgICB0aGlzLmxhc3RNb3VzZS5jbGllbnRZID0gZS5jbGllbnRZO1xuICAgIHRoaXMubGVmdCA9IHRoaXMuZ3JpZHN0ZXJJdGVtLmxlZnQ7XG4gICAgdGhpcy50b3AgPSB0aGlzLmdyaWRzdGVySXRlbS50b3A7XG4gICAgdGhpcy5vcmlnaW5hbENsaWVudFggPSBlLmNsaWVudFg7XG4gICAgdGhpcy5vcmlnaW5hbENsaWVudFkgPSBlLmNsaWVudFk7XG4gICAgdGhpcy53aWR0aCA9IHRoaXMuZ3JpZHN0ZXJJdGVtLndpZHRoO1xuICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5ncmlkc3Rlckl0ZW0uaGVpZ2h0O1xuICAgIHRoaXMuYm90dG9tID0gdGhpcy5ncmlkc3Rlckl0ZW0udG9wICsgdGhpcy5ncmlkc3Rlckl0ZW0uaGVpZ2h0O1xuICAgIHRoaXMucmlnaHQgPSB0aGlzLmdyaWRzdGVySXRlbS5sZWZ0ICsgdGhpcy5ncmlkc3Rlckl0ZW0ud2lkdGg7XG4gICAgdGhpcy5tYXJnaW4gPSB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm1hcmdpbjtcbiAgICB0aGlzLm91dGVyTWFyZ2luVG9wID0gdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5vdXRlck1hcmdpblRvcDtcbiAgICB0aGlzLm91dGVyTWFyZ2luUmlnaHQgPSB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm91dGVyTWFyZ2luUmlnaHQ7XG4gICAgdGhpcy5vdXRlck1hcmdpbkJvdHRvbSA9IHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMub3V0ZXJNYXJnaW5Cb3R0b207XG4gICAgdGhpcy5vdXRlck1hcmdpbkxlZnQgPSB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLm91dGVyTWFyZ2luTGVmdDtcbiAgICB0aGlzLm9mZnNldExlZnQgPSB0aGlzLmdyaWRzdGVyLmVsLnNjcm9sbExlZnQgLSB0aGlzLmdyaWRzdGVyLmVsLm9mZnNldExlZnQ7XG4gICAgdGhpcy5vZmZzZXRUb3AgPSB0aGlzLmdyaWRzdGVyLmVsLnNjcm9sbFRvcCAtIHRoaXMuZ3JpZHN0ZXIuZWwub2Zmc2V0VG9wO1xuICAgIHRoaXMuZGlmZkxlZnQgPSBlLmNsaWVudFggKyB0aGlzLm9mZnNldExlZnQgLSB0aGlzLmxlZnQ7XG4gICAgdGhpcy5kaWZmUmlnaHQgPSBlLmNsaWVudFggKyB0aGlzLm9mZnNldExlZnQgLSB0aGlzLnJpZ2h0O1xuICAgIHRoaXMuZGlmZlRvcCA9IGUuY2xpZW50WSArIHRoaXMub2Zmc2V0VG9wIC0gdGhpcy50b3A7XG4gICAgdGhpcy5kaWZmQm90dG9tID0gZS5jbGllbnRZICsgdGhpcy5vZmZzZXRUb3AgLSB0aGlzLmJvdHRvbTtcbiAgICB0aGlzLm1pbkhlaWdodCA9XG4gICAgICB0aGlzLmdyaWRzdGVyLnBvc2l0aW9uWVRvUGl4ZWxzKFxuICAgICAgICB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS5taW5JdGVtUm93cyB8fFxuICAgICAgICAgIHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMubWluSXRlbVJvd3NcbiAgICAgICkgLSB0aGlzLm1hcmdpbjtcbiAgICB0aGlzLm1pbldpZHRoID1cbiAgICAgIHRoaXMuZ3JpZHN0ZXIucG9zaXRpb25YVG9QaXhlbHMoXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLm1pbkl0ZW1Db2xzIHx8XG4gICAgICAgICAgdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5taW5JdGVtQ29sc1xuICAgICAgKSAtIHRoaXMubWFyZ2luO1xuICAgIHRoaXMuZ3JpZHN0ZXIubW92aW5nSXRlbSA9IHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtO1xuICAgIHRoaXMuZ3JpZHN0ZXIucHJldmlld1N0eWxlKCk7XG4gICAgdGhpcy5wdXNoID0gbmV3IEdyaWRzdGVyUHVzaCh0aGlzLmdyaWRzdGVySXRlbSk7XG4gICAgdGhpcy5wdXNoUmVzaXplID0gbmV3IEdyaWRzdGVyUHVzaFJlc2l6ZSh0aGlzLmdyaWRzdGVySXRlbSk7XG4gICAgdGhpcy5ncmlkc3Rlci5kcmFnSW5Qcm9ncmVzcyA9IHRydWU7XG4gICAgdGhpcy5ncmlkc3Rlci51cGRhdGVHcmlkKCk7XG5cbiAgICBjb25zdCB7IGNsYXNzTGlzdCB9ID0gZS50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG5cbiAgICBpZiAoY2xhc3NMaXN0LmNvbnRhaW5zKCdoYW5kbGUtbicpKSB7XG4gICAgICB0aGlzLnJlc2l6ZUV2ZW50U2Nyb2xsVHlwZS5ub3J0aCA9IHRydWU7XG4gICAgICB0aGlzLmRpcmVjdGlvbkZ1bmN0aW9uID0gPGFueT4gdGhpcy5oYW5kbGVOb3J0aDtcbiAgICB9IGVsc2UgaWYgKGNsYXNzTGlzdC5jb250YWlucygnaGFuZGxlLXcnKSkge1xuICAgICAgaWYgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZGlyVHlwZSA9PT0gRGlyVHlwZXMuUlRMKSB7XG4gICAgICAgIHRoaXMucmVzaXplRXZlbnRTY3JvbGxUeXBlLmVhc3QgPSB0cnVlO1xuICAgICAgICB0aGlzLmRpcmVjdGlvbkZ1bmN0aW9uID08YW55PiB0aGlzLmhhbmRsZUVhc3Q7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlc2l6ZUV2ZW50U2Nyb2xsVHlwZS53ZXN0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaXJlY3Rpb25GdW5jdGlvbiA9PGFueT4gdGhpcy5oYW5kbGVXZXN0O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2xhc3NMaXN0LmNvbnRhaW5zKCdoYW5kbGUtcycpKSB7XG4gICAgICB0aGlzLnJlc2l6ZUV2ZW50U2Nyb2xsVHlwZS5zb3V0aCA9IHRydWU7XG4gICAgICB0aGlzLmRpcmVjdGlvbkZ1bmN0aW9uID08YW55PiB0aGlzLmhhbmRsZVNvdXRoO1xuICAgIH0gZWxzZSBpZiAoY2xhc3NMaXN0LmNvbnRhaW5zKCdoYW5kbGUtZScpKSB7XG4gICAgICBpZiAodGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5kaXJUeXBlID09PSBEaXJUeXBlcy5SVEwpIHtcbiAgICAgICAgdGhpcy5yZXNpemVFdmVudFNjcm9sbFR5cGUud2VzdCA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlyZWN0aW9uRnVuY3Rpb24gPTxhbnk+IHRoaXMuaGFuZGxlV2VzdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVzaXplRXZlbnRTY3JvbGxUeXBlLmVhc3QgPSB0cnVlO1xuICAgICAgICB0aGlzLmRpcmVjdGlvbkZ1bmN0aW9uID08YW55PiB0aGlzLmhhbmRsZUVhc3Q7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjbGFzc0xpc3QuY29udGFpbnMoJ2hhbmRsZS1udycpKSB7XG4gICAgICBpZiAodGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5kaXJUeXBlID09PSBEaXJUeXBlcy5SVEwpIHtcbiAgICAgICAgdGhpcy5yZXNpemVFdmVudFNjcm9sbFR5cGUubm9ydGggPSB0cnVlO1xuICAgICAgICB0aGlzLnJlc2l6ZUV2ZW50U2Nyb2xsVHlwZS5lYXN0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaXJlY3Rpb25GdW5jdGlvbiA9PGFueT4gdGhpcy5oYW5kbGVOb3J0aEVhc3Q7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlc2l6ZUV2ZW50U2Nyb2xsVHlwZS5ub3J0aCA9IHRydWU7XG4gICAgICAgIHRoaXMucmVzaXplRXZlbnRTY3JvbGxUeXBlLndlc3QgPSB0cnVlO1xuICAgICAgICB0aGlzLmRpcmVjdGlvbkZ1bmN0aW9uID08YW55PiB0aGlzLmhhbmRsZU5vcnRoV2VzdDtcbiAgICAgIH1cbiAgICB9IGVsc2UgaWYgKGNsYXNzTGlzdC5jb250YWlucygnaGFuZGxlLW5lJykpIHtcbiAgICAgIGlmICh0aGlzLmdyaWRzdGVyLiRvcHRpb25zLmRpclR5cGUgPT09IERpclR5cGVzLlJUTCkge1xuICAgICAgICB0aGlzLnJlc2l6ZUV2ZW50U2Nyb2xsVHlwZS5ub3J0aCA9IHRydWU7XG4gICAgICAgIHRoaXMucmVzaXplRXZlbnRTY3JvbGxUeXBlLndlc3QgPSB0cnVlO1xuICAgICAgICB0aGlzLmRpcmVjdGlvbkZ1bmN0aW9uID08YW55PiB0aGlzLmhhbmRsZU5vcnRoV2VzdDtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucmVzaXplRXZlbnRTY3JvbGxUeXBlLm5vcnRoID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZXNpemVFdmVudFNjcm9sbFR5cGUuZWFzdCA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlyZWN0aW9uRnVuY3Rpb24gPTxhbnk+IHRoaXMuaGFuZGxlTm9ydGhFYXN0O1xuICAgICAgfVxuICAgIH0gZWxzZSBpZiAoY2xhc3NMaXN0LmNvbnRhaW5zKCdoYW5kbGUtc3cnKSkge1xuICAgICAgaWYgKHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZGlyVHlwZSA9PT0gRGlyVHlwZXMuUlRMKSB7XG4gICAgICAgIHRoaXMucmVzaXplRXZlbnRTY3JvbGxUeXBlLnNvdXRoID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5yZXNpemVFdmVudFNjcm9sbFR5cGUuZWFzdCA9IHRydWU7XG4gICAgICAgIHRoaXMuZGlyZWN0aW9uRnVuY3Rpb24gPTxhbnk+IHRoaXMuaGFuZGxlU291dGhFYXN0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5yZXNpemVFdmVudFNjcm9sbFR5cGUuc291dGggPSB0cnVlO1xuICAgICAgICB0aGlzLnJlc2l6ZUV2ZW50U2Nyb2xsVHlwZS53ZXN0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaXJlY3Rpb25GdW5jdGlvbiA9PGFueT4gdGhpcy5oYW5kbGVTb3V0aFdlc3Q7XG4gICAgICB9XG4gICAgfSBlbHNlIGlmIChjbGFzc0xpc3QuY29udGFpbnMoJ2hhbmRsZS1zZScpKSB7XG4gICAgICBpZiAodGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5kaXJUeXBlID09PSBEaXJUeXBlcy5SVEwpIHtcbiAgICAgICAgdGhpcy5yZXNpemVFdmVudFNjcm9sbFR5cGUuc291dGggPSB0cnVlO1xuICAgICAgICB0aGlzLnJlc2l6ZUV2ZW50U2Nyb2xsVHlwZS53ZXN0ID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5kaXJlY3Rpb25GdW5jdGlvbiA9PGFueT4gdGhpcy5oYW5kbGVTb3V0aFdlc3Q7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnJlc2l6ZUV2ZW50U2Nyb2xsVHlwZS5zb3V0aCA9IHRydWU7XG4gICAgICAgIHRoaXMucmVzaXplRXZlbnRTY3JvbGxUeXBlLmVhc3QgPSB0cnVlO1xuICAgICAgICB0aGlzLmRpcmVjdGlvbkZ1bmN0aW9uID08YW55PiB0aGlzLmhhbmRsZVNvdXRoRWFzdDtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBkcmFnTW92ZSA9IChlOiBNb3VzZUV2ZW50KTogdm9pZCA9PiB7XG4gICAgaWYgKHRoaXMuZGlyZWN0aW9uRnVuY3Rpb24gPT09IG51bGwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ1RoZSBgZGlyZWN0aW9uRnVuY3Rpb25gIGhhcyBub3QgYmVlbiBzZXQgYmVmb3JlIGNhbGxpbmcgYGRyYWdNb3ZlYC4nXG4gICAgICApO1xuICAgIH1cblxuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIEdyaWRzdGVyVXRpbHMuY2hlY2tUb3VjaEV2ZW50KGUpO1xuICAgIHRoaXMub2Zmc2V0VG9wID0gdGhpcy5ncmlkc3Rlci5lbC5zY3JvbGxUb3AgLSB0aGlzLmdyaWRzdGVyLmVsLm9mZnNldFRvcDtcbiAgICB0aGlzLm9mZnNldExlZnQgPSB0aGlzLmdyaWRzdGVyLmVsLnNjcm9sbExlZnQgLSB0aGlzLmdyaWRzdGVyLmVsLm9mZnNldExlZnQ7XG4gICAgc2Nyb2xsKFxuICAgICAgdGhpcy5ncmlkc3RlcixcbiAgICAgIHRoaXMubGVmdCxcbiAgICAgIHRoaXMudG9wLFxuICAgICAgdGhpcy53aWR0aCxcbiAgICAgIHRoaXMuaGVpZ2h0LFxuICAgICAgZSxcbiAgICAgIHRoaXMubGFzdE1vdXNlLFxuICAgICAgdGhpcy5kaXJlY3Rpb25GdW5jdGlvbixcbiAgICAgIHRydWUsXG4gICAgICB0aGlzLnJlc2l6ZUV2ZW50U2Nyb2xsVHlwZVxuICAgICk7XG5cbiAgICBjb25zdCBzY2FsZSA9IHRoaXMuZ3JpZHN0ZXIub3B0aW9ucy5zY2FsZSB8fCAxO1xuICAgIHRoaXMuZGlyZWN0aW9uRnVuY3Rpb24oe1xuICAgICAgY2xpZW50WDpcbiAgICAgICAgdGhpcy5vcmlnaW5hbENsaWVudFggKyAoZS5jbGllbnRYIC0gdGhpcy5vcmlnaW5hbENsaWVudFgpIC8gc2NhbGUsXG4gICAgICBjbGllbnRZOiB0aGlzLm9yaWdpbmFsQ2xpZW50WSArIChlLmNsaWVudFkgLSB0aGlzLm9yaWdpbmFsQ2xpZW50WSkgLyBzY2FsZVxuICAgIH0pO1xuXG4gICAgdGhpcy5sYXN0TW91c2UuY2xpZW50WCA9IGUuY2xpZW50WDtcbiAgICB0aGlzLmxhc3RNb3VzZS5jbGllbnRZID0gZS5jbGllbnRZO1xuICAgIHRoaXMuem9uZS5ydW4oKCkgPT4ge1xuICAgICAgdGhpcy5ncmlkc3Rlci51cGRhdGVHcmlkKCk7XG4gICAgfSk7XG4gIH07XG5cbiAgZHJhZ1N0b3AgPSAoZTogTW91c2VFdmVudCk6IHZvaWQgPT4ge1xuICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xuICAgIGNhbmNlbFNjcm9sbCgpO1xuICAgIHRoaXMubW91c2Vtb3ZlKCk7XG4gICAgdGhpcy5tb3VzZXVwKCk7XG4gICAgdGhpcy5tb3VzZWxlYXZlKCk7XG4gICAgdGhpcy5jYW5jZWxPbkJsdXIoKTtcbiAgICB0aGlzLnRvdWNobW92ZSgpO1xuICAgIHRoaXMudG91Y2hlbmQoKTtcbiAgICB0aGlzLnRvdWNoY2FuY2VsKCk7XG4gICAgdGhpcy5ncmlkc3Rlci5kcmFnSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgIHRoaXMuZ3JpZHN0ZXIudXBkYXRlR3JpZCgpO1xuICAgIGlmIChcbiAgICAgIHRoaXMuZ3JpZHN0ZXIub3B0aW9ucy5yZXNpemFibGUgJiZcbiAgICAgIHRoaXMuZ3JpZHN0ZXIub3B0aW9ucy5yZXNpemFibGUuc3RvcFxuICAgICkge1xuICAgICAgUHJvbWlzZS5yZXNvbHZlKFxuICAgICAgICB0aGlzLmdyaWRzdGVyLm9wdGlvbnMucmVzaXphYmxlLnN0b3AoXG4gICAgICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0uaXRlbSxcbiAgICAgICAgICB0aGlzLmdyaWRzdGVySXRlbSxcbiAgICAgICAgICBlXG4gICAgICAgIClcbiAgICAgICkudGhlbih0aGlzLm1ha2VSZXNpemUsIHRoaXMuY2FuY2VsUmVzaXplKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5tYWtlUmVzaXplKCk7XG4gICAgfVxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0ucmVuZGVyZXIucmVtb3ZlQ2xhc3MoXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLmVsLFxuICAgICAgICAnZ3JpZHN0ZXItaXRlbS1yZXNpemluZydcbiAgICAgICk7XG4gICAgICBpZiAodGhpcy5ncmlkc3Rlcikge1xuICAgICAgICB0aGlzLmdyaWRzdGVyLm1vdmluZ0l0ZW0gPSBudWxsO1xuICAgICAgICB0aGlzLmdyaWRzdGVyLnByZXZpZXdTdHlsZSgpO1xuICAgICAgfVxuICAgIH0pO1xuICB9O1xuXG4gIGNhbmNlbFJlc2l6ZSA9ICgpOiB2b2lkID0+IHtcbiAgICB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS5jb2xzID0gdGhpcy5ncmlkc3Rlckl0ZW0uaXRlbS5jb2xzIHx8IDE7XG4gICAgdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ucm93cyA9IHRoaXMuZ3JpZHN0ZXJJdGVtLml0ZW0ucm93cyB8fCAxO1xuICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnggPSB0aGlzLmdyaWRzdGVySXRlbS5pdGVtLnggfHwgMDtcbiAgICB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS55ID0gdGhpcy5ncmlkc3Rlckl0ZW0uaXRlbS55IHx8IDA7XG4gICAgdGhpcy5ncmlkc3Rlckl0ZW0uc2V0U2l6ZSgpO1xuICAgIHRoaXMucHVzaC5yZXN0b3JlSXRlbXMoKTtcbiAgICB0aGlzLnB1c2hSZXNpemUucmVzdG9yZUl0ZW1zKCk7XG4gICAgdGhpcy5wdXNoLmRlc3Ryb3koKTtcbiAgICB0aGlzLnB1c2ggPSBudWxsITtcbiAgICB0aGlzLnB1c2hSZXNpemUuZGVzdHJveSgpO1xuICAgIHRoaXMucHVzaFJlc2l6ZSA9IG51bGwhO1xuICB9O1xuXG4gIG1ha2VSZXNpemUgPSAoKTogdm9pZCA9PiB7XG4gICAgdGhpcy5ncmlkc3Rlckl0ZW0uc2V0U2l6ZSgpO1xuICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLmNoZWNrSXRlbUNoYW5nZXMoXG4gICAgICB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbSxcbiAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLml0ZW1cbiAgICApO1xuICAgIHRoaXMucHVzaC5zZXRQdXNoZWRJdGVtcygpO1xuICAgIHRoaXMucHVzaFJlc2l6ZS5zZXRQdXNoZWRJdGVtcygpO1xuICAgIHRoaXMucHVzaC5kZXN0cm95KCk7XG4gICAgdGhpcy5wdXNoID0gbnVsbCE7XG4gICAgdGhpcy5wdXNoUmVzaXplLmRlc3Ryb3koKTtcbiAgICB0aGlzLnB1c2hSZXNpemUgPSBudWxsITtcbiAgfTtcblxuICBwcml2YXRlIGhhbmRsZU5vcnRoID0gKGU6IE1vdXNlRXZlbnQpOiB2b2lkID0+IHtcbiAgICB0aGlzLnRvcCA9IGUuY2xpZW50WSArIHRoaXMub2Zmc2V0VG9wIC0gdGhpcy5kaWZmVG9wO1xuICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5ib3R0b20gLSB0aGlzLnRvcDtcbiAgICBpZiAodGhpcy5taW5IZWlnaHQgPiB0aGlzLmhlaWdodCkge1xuICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLm1pbkhlaWdodDtcbiAgICAgIHRoaXMudG9wID0gdGhpcy5ib3R0b20gLSB0aGlzLm1pbkhlaWdodDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuZ3JpZHN0ZXIub3B0aW9ucy5lbmFibGVCb3VuZGFyeUNvbnRyb2wpIHtcbiAgICAgIHRoaXMudG9wID0gTWF0aC5tYXgoMCwgdGhpcy50b3ApO1xuICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLmJvdHRvbSAtIHRoaXMudG9wO1xuICAgIH1cbiAgICBjb25zdCBtYXJnaW5Ub3AgPSB0aGlzLmdyaWRzdGVyLm9wdGlvbnMucHVzaEl0ZW1zID8gdGhpcy5tYXJnaW4gOiAwO1xuICAgIHRoaXMubmV3UG9zaXRpb24gPSB0aGlzLmdyaWRzdGVyLnBpeGVsc1RvUG9zaXRpb25ZKFxuICAgICAgdGhpcy50b3AgKyBtYXJnaW5Ub3AsXG4gICAgICBNYXRoLmZsb29yXG4gICAgKTtcbiAgICBpZiAodGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueSAhPT0gdGhpcy5uZXdQb3NpdGlvbikge1xuICAgICAgdGhpcy5pdGVtQmFja3VwWzFdID0gdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueTtcbiAgICAgIHRoaXMuaXRlbUJhY2t1cFszXSA9IHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnJvd3M7XG4gICAgICB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS5yb3dzICs9XG4gICAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnkgLSB0aGlzLm5ld1Bvc2l0aW9uO1xuICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueSA9IHRoaXMubmV3UG9zaXRpb247XG4gICAgICB0aGlzLnB1c2hSZXNpemUucHVzaEl0ZW1zKHRoaXMucHVzaFJlc2l6ZS5mcm9tU291dGgpO1xuICAgICAgdGhpcy5wdXNoLnB1c2hJdGVtcyhcbiAgICAgICAgdGhpcy5wdXNoLmZyb21Tb3V0aCxcbiAgICAgICAgdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5kaXNhYmxlUHVzaE9uUmVzaXplXG4gICAgICApO1xuICAgICAgaWYgKHRoaXMuZ3JpZHN0ZXIuY2hlY2tDb2xsaXNpb24odGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0pKSB7XG4gICAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnkgPSB0aGlzLml0ZW1CYWNrdXBbMV07XG4gICAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnJvd3MgPSB0aGlzLml0ZW1CYWNrdXBbM107XG4gICAgICAgIHRoaXMudG9wID0gdGhpcy5ncmlkc3Rlci5wb3NpdGlvbllUb1BpeGVscyh0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS55KTtcbiAgICAgICAgdGhpcy5zZXRJdGVtVG9wKFxuICAgICAgICAgIHRoaXMuZ3JpZHN0ZXIucG9zaXRpb25ZVG9QaXhlbHModGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueSlcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZXRJdGVtSGVpZ2h0KFxuICAgICAgICAgIHRoaXMuZ3JpZHN0ZXIucG9zaXRpb25ZVG9QaXhlbHModGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ucm93cykgLVxuICAgICAgICAgICAgdGhpcy5tYXJnaW5cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ncmlkc3Rlci5wcmV2aWV3U3R5bGUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucHVzaFJlc2l6ZS5jaGVja1B1c2hCYWNrKCk7XG4gICAgICB0aGlzLnB1c2guY2hlY2tQdXNoQmFjaygpO1xuICAgIH1cbiAgICB0aGlzLnNldEl0ZW1Ub3AodGhpcy50b3ApO1xuICAgIHRoaXMuc2V0SXRlbUhlaWdodCh0aGlzLmhlaWdodCk7XG4gIH07XG5cbiAgcHJpdmF0ZSBoYW5kbGVXZXN0ID0gKGU6IE1vdXNlRXZlbnQpOiB2b2lkID0+IHtcbiAgICBjb25zdCBjbGllbnRYID1cbiAgICAgIHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZGlyVHlwZSA9PT0gRGlyVHlwZXMuUlRMXG4gICAgICAgID8gdGhpcy5vcmlnaW5hbENsaWVudFggKyAodGhpcy5vcmlnaW5hbENsaWVudFggLSBlLmNsaWVudFgpXG4gICAgICAgIDogZS5jbGllbnRYO1xuICAgIHRoaXMubGVmdCA9IGNsaWVudFggKyB0aGlzLm9mZnNldExlZnQgLSB0aGlzLmRpZmZMZWZ0O1xuXG4gICAgdGhpcy53aWR0aCA9IHRoaXMucmlnaHQgLSB0aGlzLmxlZnQ7XG4gICAgaWYgKHRoaXMubWluV2lkdGggPiB0aGlzLndpZHRoKSB7XG4gICAgICB0aGlzLndpZHRoID0gdGhpcy5taW5XaWR0aDtcbiAgICAgIHRoaXMubGVmdCA9IHRoaXMucmlnaHQgLSB0aGlzLm1pbldpZHRoO1xuICAgIH0gZWxzZSBpZiAodGhpcy5ncmlkc3Rlci5vcHRpb25zLmVuYWJsZUJvdW5kYXJ5Q29udHJvbCkge1xuICAgICAgdGhpcy5sZWZ0ID0gTWF0aC5tYXgoMCwgdGhpcy5sZWZ0KTtcbiAgICAgIHRoaXMud2lkdGggPSB0aGlzLnJpZ2h0IC0gdGhpcy5sZWZ0O1xuICAgIH1cbiAgICBjb25zdCBtYXJnaW5MZWZ0ID0gdGhpcy5ncmlkc3Rlci5vcHRpb25zLnB1c2hJdGVtcyA/IHRoaXMubWFyZ2luIDogMDtcbiAgICB0aGlzLm5ld1Bvc2l0aW9uID0gdGhpcy5ncmlkc3Rlci5waXhlbHNUb1Bvc2l0aW9uWChcbiAgICAgIHRoaXMubGVmdCArIG1hcmdpbkxlZnQsXG4gICAgICBNYXRoLmZsb29yXG4gICAgKTtcbiAgICBpZiAodGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueCAhPT0gdGhpcy5uZXdQb3NpdGlvbikge1xuICAgICAgdGhpcy5pdGVtQmFja3VwWzBdID0gdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueDtcbiAgICAgIHRoaXMuaXRlbUJhY2t1cFsyXSA9IHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLmNvbHM7XG4gICAgICB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS5jb2xzICs9XG4gICAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnggLSB0aGlzLm5ld1Bvc2l0aW9uO1xuICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueCA9IHRoaXMubmV3UG9zaXRpb247XG4gICAgICB0aGlzLnB1c2hSZXNpemUucHVzaEl0ZW1zKHRoaXMucHVzaFJlc2l6ZS5mcm9tRWFzdCk7XG4gICAgICB0aGlzLnB1c2gucHVzaEl0ZW1zKFxuICAgICAgICB0aGlzLnB1c2guZnJvbUVhc3QsXG4gICAgICAgIHRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMuZGlzYWJsZVB1c2hPblJlc2l6ZVxuICAgICAgKTtcbiAgICAgIGlmICh0aGlzLmdyaWRzdGVyLmNoZWNrQ29sbGlzaW9uKHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtKSkge1xuICAgICAgICB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS54ID0gdGhpcy5pdGVtQmFja3VwWzBdO1xuICAgICAgICB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS5jb2xzID0gdGhpcy5pdGVtQmFja3VwWzJdO1xuICAgICAgICB0aGlzLmxlZnQgPSB0aGlzLmdyaWRzdGVyLnBvc2l0aW9uWFRvUGl4ZWxzKHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLngpO1xuICAgICAgICB0aGlzLnNldEl0ZW1MZWZ0KFxuICAgICAgICAgIHRoaXMuZ3JpZHN0ZXIucG9zaXRpb25YVG9QaXhlbHModGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueClcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5zZXRJdGVtV2lkdGgoXG4gICAgICAgICAgdGhpcy5ncmlkc3Rlci5wb3NpdGlvblhUb1BpeGVscyh0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS5jb2xzKSAtXG4gICAgICAgICAgICB0aGlzLm1hcmdpblxuICAgICAgICApO1xuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLmdyaWRzdGVyLnByZXZpZXdTdHlsZSgpO1xuICAgICAgfVxuICAgICAgdGhpcy5wdXNoUmVzaXplLmNoZWNrUHVzaEJhY2soKTtcbiAgICAgIHRoaXMucHVzaC5jaGVja1B1c2hCYWNrKCk7XG4gICAgfVxuICAgIHRoaXMuc2V0SXRlbUxlZnQodGhpcy5sZWZ0KTtcbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLndpZHRoKTtcbiAgfTtcblxuICBwcml2YXRlIGhhbmRsZVNvdXRoID0gKGU6IE1vdXNlRXZlbnQpOiB2b2lkID0+IHtcbiAgICB0aGlzLmhlaWdodCA9IGUuY2xpZW50WSArIHRoaXMub2Zmc2V0VG9wIC0gdGhpcy5kaWZmQm90dG9tIC0gdGhpcy50b3A7XG4gICAgaWYgKHRoaXMubWluSGVpZ2h0ID4gdGhpcy5oZWlnaHQpIHtcbiAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy5taW5IZWlnaHQ7XG4gICAgfVxuICAgIHRoaXMuYm90dG9tID0gdGhpcy50b3AgKyB0aGlzLmhlaWdodDtcbiAgICBpZiAodGhpcy5ncmlkc3Rlci5vcHRpb25zLmVuYWJsZUJvdW5kYXJ5Q29udHJvbCkge1xuICAgICAgY29uc3QgbWFyZ2luID0gdGhpcy5vdXRlck1hcmdpbkJvdHRvbSA/PyB0aGlzLm1hcmdpbjtcbiAgICAgIGNvbnN0IGJveCA9IHRoaXMuZ3JpZHN0ZXIuZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB0aGlzLmJvdHRvbSA9IE1hdGgubWluKFxuICAgICAgICB0aGlzLmJvdHRvbSxcbiAgICAgICAgYm94LmJvdHRvbSAtIGJveC50b3AgLSAyICogbWFyZ2luXG4gICAgICApO1xuICAgICAgdGhpcy5oZWlnaHQgPSB0aGlzLmJvdHRvbSAtIHRoaXMudG9wO1xuICAgIH1cbiAgICBjb25zdCBtYXJnaW5Cb3R0b20gPSB0aGlzLmdyaWRzdGVyLm9wdGlvbnMucHVzaEl0ZW1zID8gMCA6IHRoaXMubWFyZ2luO1xuICAgIHRoaXMubmV3UG9zaXRpb24gPSB0aGlzLmdyaWRzdGVyLnBpeGVsc1RvUG9zaXRpb25ZKFxuICAgICAgdGhpcy5ib3R0b20gKyBtYXJnaW5Cb3R0b20sXG4gICAgICBNYXRoLmNlaWxcbiAgICApO1xuICAgIGlmIChcbiAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnkgKyB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS5yb3dzICE9PVxuICAgICAgdGhpcy5uZXdQb3NpdGlvblxuICAgICkge1xuICAgICAgdGhpcy5pdGVtQmFja3VwWzNdID0gdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ucm93cztcbiAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnJvd3MgPVxuICAgICAgICB0aGlzLm5ld1Bvc2l0aW9uIC0gdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueTtcbiAgICAgIHRoaXMucHVzaFJlc2l6ZS5wdXNoSXRlbXModGhpcy5wdXNoUmVzaXplLmZyb21Ob3J0aCk7XG4gICAgICB0aGlzLnB1c2gucHVzaEl0ZW1zKFxuICAgICAgICB0aGlzLnB1c2guZnJvbU5vcnRoLFxuICAgICAgICB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLmRpc2FibGVQdXNoT25SZXNpemVcbiAgICAgICk7XG4gICAgICBpZiAodGhpcy5ncmlkc3Rlci5jaGVja0NvbGxpc2lvbih0aGlzLmdyaWRzdGVySXRlbS4kaXRlbSkpIHtcbiAgICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ucm93cyA9IHRoaXMuaXRlbUJhY2t1cFszXTtcbiAgICAgICAgdGhpcy5zZXRJdGVtSGVpZ2h0KFxuICAgICAgICAgIHRoaXMuZ3JpZHN0ZXIucG9zaXRpb25ZVG9QaXhlbHModGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ucm93cykgLVxuICAgICAgICAgICAgdGhpcy5tYXJnaW5cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ncmlkc3Rlci5wcmV2aWV3U3R5bGUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucHVzaFJlc2l6ZS5jaGVja1B1c2hCYWNrKCk7XG4gICAgICB0aGlzLnB1c2guY2hlY2tQdXNoQmFjaygpO1xuICAgIH1cbiAgICB0aGlzLnNldEl0ZW1IZWlnaHQodGhpcy5oZWlnaHQpO1xuICB9O1xuXG4gIHByaXZhdGUgaGFuZGxlRWFzdCA9IChlOiBNb3VzZUV2ZW50KTogdm9pZCA9PiB7XG4gICAgY29uc3QgY2xpZW50WCA9XG4gICAgICB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLmRpclR5cGUgPT09IERpclR5cGVzLlJUTFxuICAgICAgICA/IHRoaXMub3JpZ2luYWxDbGllbnRYICsgKHRoaXMub3JpZ2luYWxDbGllbnRYIC0gZS5jbGllbnRYKVxuICAgICAgICA6IGUuY2xpZW50WDtcbiAgICB0aGlzLndpZHRoID0gY2xpZW50WCArIHRoaXMub2Zmc2V0TGVmdCAtIHRoaXMuZGlmZlJpZ2h0IC0gdGhpcy5sZWZ0O1xuXG4gICAgaWYgKHRoaXMubWluV2lkdGggPiB0aGlzLndpZHRoKSB7XG4gICAgICB0aGlzLndpZHRoID0gdGhpcy5taW5XaWR0aDtcbiAgICB9XG4gICAgdGhpcy5yaWdodCA9IHRoaXMubGVmdCArIHRoaXMud2lkdGg7XG4gICAgaWYgKHRoaXMuZ3JpZHN0ZXIub3B0aW9ucy5lbmFibGVCb3VuZGFyeUNvbnRyb2wpIHtcbiAgICAgIGNvbnN0IG1hcmdpbiA9IHRoaXMub3V0ZXJNYXJnaW5SaWdodCA/PyB0aGlzLm1hcmdpbjtcbiAgICAgIGNvbnN0IGJveCA9IHRoaXMuZ3JpZHN0ZXIuZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICB0aGlzLnJpZ2h0ID0gTWF0aC5taW4odGhpcy5yaWdodCwgYm94LnJpZ2h0IC0gYm94LmxlZnQgLSAyICogbWFyZ2luKTtcbiAgICAgIHRoaXMud2lkdGggPSB0aGlzLnJpZ2h0IC0gdGhpcy5sZWZ0O1xuICAgIH1cbiAgICBjb25zdCBtYXJnaW5SaWdodCA9IHRoaXMuZ3JpZHN0ZXIub3B0aW9ucy5wdXNoSXRlbXMgPyAwIDogdGhpcy5tYXJnaW47XG4gICAgdGhpcy5uZXdQb3NpdGlvbiA9IHRoaXMuZ3JpZHN0ZXIucGl4ZWxzVG9Qb3NpdGlvblgoXG4gICAgICB0aGlzLnJpZ2h0ICsgbWFyZ2luUmlnaHQsXG4gICAgICBNYXRoLmNlaWxcbiAgICApO1xuICAgIGlmIChcbiAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLnggKyB0aGlzLmdyaWRzdGVySXRlbS4kaXRlbS5jb2xzICE9PVxuICAgICAgdGhpcy5uZXdQb3NpdGlvblxuICAgICkge1xuICAgICAgdGhpcy5pdGVtQmFja3VwWzJdID0gdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0uY29scztcbiAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLmNvbHMgPVxuICAgICAgICB0aGlzLm5ld1Bvc2l0aW9uIC0gdGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0ueDtcbiAgICAgIHRoaXMucHVzaFJlc2l6ZS5wdXNoSXRlbXModGhpcy5wdXNoUmVzaXplLmZyb21XZXN0KTtcbiAgICAgIHRoaXMucHVzaC5wdXNoSXRlbXMoXG4gICAgICAgIHRoaXMucHVzaC5mcm9tV2VzdCxcbiAgICAgICAgdGhpcy5ncmlkc3Rlci4kb3B0aW9ucy5kaXNhYmxlUHVzaE9uUmVzaXplXG4gICAgICApO1xuICAgICAgaWYgKHRoaXMuZ3JpZHN0ZXIuY2hlY2tDb2xsaXNpb24odGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0pKSB7XG4gICAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLiRpdGVtLmNvbHMgPSB0aGlzLml0ZW1CYWNrdXBbMl07XG4gICAgICAgIHRoaXMuc2V0SXRlbVdpZHRoKFxuICAgICAgICAgIHRoaXMuZ3JpZHN0ZXIucG9zaXRpb25YVG9QaXhlbHModGhpcy5ncmlkc3Rlckl0ZW0uJGl0ZW0uY29scykgLVxuICAgICAgICAgICAgdGhpcy5tYXJnaW5cbiAgICAgICAgKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5ncmlkc3Rlci5wcmV2aWV3U3R5bGUoKTtcbiAgICAgIH1cbiAgICAgIHRoaXMucHVzaFJlc2l6ZS5jaGVja1B1c2hCYWNrKCk7XG4gICAgICB0aGlzLnB1c2guY2hlY2tQdXNoQmFjaygpO1xuICAgIH1cbiAgICB0aGlzLnNldEl0ZW1XaWR0aCh0aGlzLndpZHRoKTtcbiAgfTtcblxuICBwcml2YXRlIGhhbmRsZU5vcnRoV2VzdCA9IChlOiBNb3VzZUV2ZW50KTogdm9pZCA9PiB7XG4gICAgdGhpcy5oYW5kbGVOb3J0aChlKTtcbiAgICB0aGlzLmhhbmRsZVdlc3QoZSk7XG4gIH07XG5cbiAgcHJpdmF0ZSBoYW5kbGVOb3J0aEVhc3QgPSAoZTogTW91c2VFdmVudCk6IHZvaWQgPT4ge1xuICAgIHRoaXMuaGFuZGxlTm9ydGgoZSk7XG4gICAgdGhpcy5oYW5kbGVFYXN0KGUpO1xuICB9O1xuXG4gIHByaXZhdGUgaGFuZGxlU291dGhXZXN0ID0gKGU6IE1vdXNlRXZlbnQpOiB2b2lkID0+IHtcbiAgICB0aGlzLmhhbmRsZVNvdXRoKGUpO1xuICAgIHRoaXMuaGFuZGxlV2VzdChlKTtcbiAgfTtcblxuICBwcml2YXRlIGhhbmRsZVNvdXRoRWFzdCA9IChlOiBNb3VzZUV2ZW50KTogdm9pZCA9PiB7XG4gICAgdGhpcy5oYW5kbGVTb3V0aChlKTtcbiAgICB0aGlzLmhhbmRsZUVhc3QoZSk7XG4gIH07XG5cbiAgdG9nZ2xlKCk6IHZvaWQge1xuICAgIHRoaXMucmVzaXplRW5hYmxlZCA9IHRoaXMuZ3JpZHN0ZXJJdGVtLmNhbkJlUmVzaXplZCgpO1xuICAgIHRoaXMucmVzaXphYmxlSGFuZGxlcyA9IHRoaXMuZ3JpZHN0ZXJJdGVtLmdldFJlc2l6YWJsZUhhbmRsZXMoKTtcbiAgfVxuXG4gIGRyYWdTdGFydERlbGF5KGU6IE1vdXNlRXZlbnQgfCBUb3VjaEV2ZW50KTogdm9pZCB7XG4gICAgR3JpZHN0ZXJVdGlscy5jaGVja1RvdWNoRXZlbnQoZSk7XG5cbiAgICBpZiAoIXRoaXMuZ3JpZHN0ZXIuJG9wdGlvbnMucmVzaXphYmxlLmRlbGF5U3RhcnQpIHtcbiAgICAgIHRoaXMuZHJhZ1N0YXJ0KGUgYXMgTW91c2VFdmVudCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgY29uc3QgdGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5kcmFnU3RhcnQoZSBhcyBNb3VzZUV2ZW50KTtcbiAgICAgIGNhbmNlbERyYWcoKTtcbiAgICB9LCB0aGlzLmdyaWRzdGVyLiRvcHRpb25zLnJlc2l6YWJsZS5kZWxheVN0YXJ0KTtcblxuICAgIGNvbnN0IHtcbiAgICAgIGNhbmNlbE1vdXNlLFxuICAgICAgY2FuY2VsTW91c2VMZWF2ZSxcbiAgICAgIGNhbmNlbE9uQmx1cixcbiAgICAgIGNhbmNlbFRvdWNoTW92ZSxcbiAgICAgIGNhbmNlbFRvdWNoRW5kLFxuICAgICAgY2FuY2VsVG91Y2hDYW5jZWxcbiAgICB9ID0gdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgIC8vIE5vdGU6IGFsbCBvZiB0aGVzZSBldmVudHMgYXJlIGJlaW5nIGFkZGVkIHdpdGhpbiB0aGUgYDxyb290PmAgem9uZSBzaW5jZSB0aGV5IGFsbFxuICAgICAgLy8gZG9uJ3QgZG8gYW55IHZpZXcgdXBkYXRlcyBhbmQgZG9uJ3QgcmVxdWlyZSBBbmd1bGFyIHJ1bm5pbmcgY2hhbmdlIGRldGVjdGlvbi5cbiAgICAgIC8vIEFsbCBldmVudCBsaXN0ZW5lcnMgY2FsbCBgY2FuY2VsRHJhZ2Agb25jZSB0aGUgZXZlbnQgaXMgZGlzcGF0Y2hlZCwgdGhlIGBjYW5jZWxEcmFnYFxuICAgICAgLy8gaXMgcmVzcG9uc2libGUgb25seSBmb3IgcmVtb3ZpbmcgZXZlbnQgbGlzdGVuZXJzLlxuXG4gICAgICBjb25zdCBjYW5jZWxNb3VzZSA9IHRoaXMuZ3JpZHN0ZXJJdGVtLnJlbmRlcmVyLmxpc3RlbihcbiAgICAgICAgJ2RvY3VtZW50JyxcbiAgICAgICAgJ21vdXNldXAnLFxuICAgICAgICBjYW5jZWxEcmFnXG4gICAgICApO1xuICAgICAgY29uc3QgY2FuY2VsTW91c2VMZWF2ZSA9IHRoaXMuZ3JpZHN0ZXJJdGVtLnJlbmRlcmVyLmxpc3RlbihcbiAgICAgICAgJ2RvY3VtZW50JyxcbiAgICAgICAgJ21vdXNlbGVhdmUnLFxuICAgICAgICBjYW5jZWxEcmFnXG4gICAgICApO1xuICAgICAgY29uc3QgY2FuY2VsT25CbHVyID0gdGhpcy5ncmlkc3Rlckl0ZW0ucmVuZGVyZXIubGlzdGVuKFxuICAgICAgICAnd2luZG93JyxcbiAgICAgICAgJ2JsdXInLFxuICAgICAgICBjYW5jZWxEcmFnXG4gICAgICApO1xuICAgICAgY29uc3QgY2FuY2VsVG91Y2hNb3ZlID0gdGhpcy5ncmlkc3Rlckl0ZW0ucmVuZGVyZXIubGlzdGVuKFxuICAgICAgICAnZG9jdW1lbnQnLFxuICAgICAgICAndG91Y2htb3ZlJyxcbiAgICAgICAgY2FuY2VsTW92ZVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGNhbmNlbFRvdWNoRW5kID0gdGhpcy5ncmlkc3Rlckl0ZW0ucmVuZGVyZXIubGlzdGVuKFxuICAgICAgICAnZG9jdW1lbnQnLFxuICAgICAgICAndG91Y2hlbmQnLFxuICAgICAgICBjYW5jZWxEcmFnXG4gICAgICApO1xuICAgICAgY29uc3QgY2FuY2VsVG91Y2hDYW5jZWwgPSB0aGlzLmdyaWRzdGVySXRlbS5yZW5kZXJlci5saXN0ZW4oXG4gICAgICAgICdkb2N1bWVudCcsXG4gICAgICAgICd0b3VjaGNhbmNlbCcsXG4gICAgICAgIGNhbmNlbERyYWdcbiAgICAgICk7XG4gICAgICByZXR1cm4ge1xuICAgICAgICBjYW5jZWxNb3VzZSxcbiAgICAgICAgY2FuY2VsTW91c2VMZWF2ZSxcbiAgICAgICAgY2FuY2VsT25CbHVyLFxuICAgICAgICBjYW5jZWxUb3VjaE1vdmUsXG4gICAgICAgIGNhbmNlbFRvdWNoRW5kLFxuICAgICAgICBjYW5jZWxUb3VjaENhbmNlbFxuICAgICAgfTtcbiAgICB9KTtcblxuICAgIGZ1bmN0aW9uIGNhbmNlbE1vdmUoZXZlbnRNb3ZlOiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgICBHcmlkc3RlclV0aWxzLmNoZWNrVG91Y2hFdmVudChldmVudE1vdmUpO1xuICAgICAgaWYgKFxuICAgICAgICBNYXRoLmFicyhldmVudE1vdmUuY2xpZW50WCAtIChlIGFzIE1vdXNlRXZlbnQpLmNsaWVudFgpID4gOSB8fFxuICAgICAgICBNYXRoLmFicyhldmVudE1vdmUuY2xpZW50WSAtIChlIGFzIE1vdXNlRXZlbnQpLmNsaWVudFkpID4gOVxuICAgICAgKSB7XG4gICAgICAgIGNhbmNlbERyYWcoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBjYW5jZWxEcmFnKCk6IHZvaWQge1xuICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xuICAgICAgY2FuY2VsT25CbHVyKCk7XG4gICAgICBjYW5jZWxNb3VzZSgpO1xuICAgICAgY2FuY2VsTW91c2VMZWF2ZSgpO1xuICAgICAgY2FuY2VsVG91Y2hNb3ZlKCk7XG4gICAgICBjYW5jZWxUb3VjaEVuZCgpO1xuICAgICAgY2FuY2VsVG91Y2hDYW5jZWwoKTtcbiAgICB9XG4gIH1cblxuICBzZXRJdGVtVG9wKHRvcDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5ncmlkc3Rlci5ncmlkUmVuZGVyZXIuc2V0Q2VsbFBvc2l0aW9uKFxuICAgICAgdGhpcy5ncmlkc3Rlckl0ZW0ucmVuZGVyZXIsXG4gICAgICB0aGlzLmdyaWRzdGVySXRlbS5lbCxcbiAgICAgIHRoaXMubGVmdCxcbiAgICAgIHRvcFxuICAgICk7XG4gIH1cblxuICBzZXRJdGVtTGVmdChsZWZ0OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmdyaWRzdGVyLmdyaWRSZW5kZXJlci5zZXRDZWxsUG9zaXRpb24oXG4gICAgICB0aGlzLmdyaWRzdGVySXRlbS5yZW5kZXJlcixcbiAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLmVsLFxuICAgICAgbGVmdCxcbiAgICAgIHRoaXMudG9wXG4gICAgKTtcbiAgfVxuXG4gIHNldEl0ZW1IZWlnaHQoaGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcbiAgICB0aGlzLmdyaWRzdGVySXRlbS5yZW5kZXJlci5zZXRTdHlsZShcbiAgICAgIHRoaXMuZ3JpZHN0ZXJJdGVtLmVsLFxuICAgICAgJ2hlaWdodCcsXG4gICAgICBoZWlnaHQgKyAncHgnXG4gICAgKTtcbiAgfVxuXG4gIHNldEl0ZW1XaWR0aCh3aWR0aDogbnVtYmVyKTogdm9pZCB7XG4gICAgdGhpcy5ncmlkc3Rlckl0ZW0ucmVuZGVyZXIuc2V0U3R5bGUoXG4gICAgICB0aGlzLmdyaWRzdGVySXRlbS5lbCxcbiAgICAgICd3aWR0aCcsXG4gICAgICB3aWR0aCArICdweCdcbiAgICApO1xuICB9XG59XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JpZHN0ZXJSZXNpemVFdmVudFR5cGUuaW50ZXJmYWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcmEtZGFzaGJvYXJkLWZyYW1ld29yay9zcmMvZ3JpZHN0ZXIvbGliL2dyaWRzdGVyUmVzaXplRXZlbnRUeXBlLmludGVyZmFjZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBHcmlkc3RlclJlc2l6ZUV2ZW50VHlwZSB7XG4gIG5vcnRoOiBib29sZWFuO1xuICBzb3V0aDogYm9vbGVhbjtcbiAgd2VzdDogYm9vbGVhbjtcbiAgZWFzdDogYm9vbGVhbjtcbn1cbiJdfQ==