@libs-ui/components-inputs-quill 0.2.327-1 → 0.2.327-2

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.
@@ -3,6 +3,10 @@ import Quill2x from 'quill2x';
3
3
  import { fromEvent } from 'rxjs';
4
4
  import { fontSizeWhiteList, iconList } from './quill.define';
5
5
  import { QuillMentionBlot } from '../blots-custom';
6
+ import ResizeModule from '@ssumo/quill-resize-module';
7
+ let startCell = null;
8
+ let endCell = null;
9
+ let isSelecting = false;
6
10
  //region Function Table
7
11
  export const createTableSelector = (quill, anchorEl, translate) => {
8
12
  // Đóng popup cũ nếu còn tồn tại
@@ -45,8 +49,8 @@ export const createTableSelector = (quill, anchorEl, translate) => {
45
49
  gap: '4px',
46
50
  });
47
51
  const max = 8;
48
- for (let r = 1; r <= max; r++) {
49
- for (let c = 1; c <= max; c++) {
52
+ for (let row = 1; row <= max; row++) {
53
+ for (let col = 1; col <= max; col++) {
50
54
  const cell = document.createElement('div');
51
55
  cell.style.width = '18px';
52
56
  cell.style.height = '18px';
@@ -54,12 +58,12 @@ export const createTableSelector = (quill, anchorEl, translate) => {
54
58
  cell.style.background = '#fff';
55
59
  cell.style.cursor = 'pointer';
56
60
  cell.addEventListener('mouseenter', () => {
57
- info.textContent = `${r} × ${c}`;
61
+ info.textContent = `${row} × ${col}`;
58
62
  Array.from(grid.children).forEach((el, idx) => {
59
63
  const rr = Math.floor(idx / max) + 1;
60
64
  const cc = (idx % max) + 1;
61
- el.style.background = rr <= r && cc <= c ? '#dbeafe' : '#fff';
62
- el.style.borderColor = rr <= r && cc <= c ? '#93c5fd' : '#e5e7eb';
65
+ el.style.background = rr <= row && cc <= col ? '#dbeafe' : '#fff';
66
+ el.style.borderColor = rr <= row && cc <= col ? '#93c5fd' : '#e5e7eb';
63
67
  });
64
68
  });
65
69
  cell.addEventListener('click', () => {
@@ -67,7 +71,8 @@ export const createTableSelector = (quill, anchorEl, translate) => {
67
71
  quill.focus();
68
72
  const tableModule = quill.getModule('table');
69
73
  if (tableModule && typeof tableModule.insertTable === 'function') {
70
- tableModule.insertTable(r, c);
74
+ tableModule.insertTable(row, col);
75
+ getAllTablesWithSpan(quill);
71
76
  }
72
77
  }
73
78
  finally {
@@ -150,8 +155,21 @@ export const createContextMenuOptionTable = (quill, translate) => {
150
155
  menu.style.minWidth = '180px';
151
156
  const tableModule = quill.getModule('table');
152
157
  const safeCall = (method, ...args) => {
158
+ if (method === 'mergeCells') {
159
+ const [startCell, endCell] = args;
160
+ mergeCells(startCell, endCell);
161
+ closeAnyMenu();
162
+ return;
163
+ }
164
+ if (method === 'splitCells') {
165
+ const [startCell] = args;
166
+ splitCells(startCell);
167
+ closeAnyMenu();
168
+ return;
169
+ }
153
170
  if (tableModule && typeof tableModule[method] === 'function') {
154
171
  tableModule[method](...args);
172
+ getAllTablesWithSpan(quill);
155
173
  }
156
174
  };
157
175
  menu.appendChild(createMenuItem(translate.instant('i18n_add_new_row_above'), () => safeCall('insertRowAbove')));
@@ -163,12 +181,34 @@ export const createContextMenuOptionTable = (quill, translate) => {
163
181
  divider.style.background = '#eee';
164
182
  divider.style.margin = '4px 0';
165
183
  menu.appendChild(divider);
184
+ if (startCell && endCell) {
185
+ const startCellStore = startCell;
186
+ const endCellStore = endCell;
187
+ const colspan = parseInt(startCellStore.getAttribute('colspan') || '1', 10);
188
+ const rowspan = parseInt(startCellStore.getAttribute('rowspan') || '1', 10);
189
+ let totalMenu = 0;
190
+ if (startCell !== endCell) {
191
+ menu.appendChild(createMenuItem(translate.instant('i18n_merge_cells'), () => safeCall('mergeCells', startCellStore, endCellStore)));
192
+ totalMenu++;
193
+ }
194
+ if (startCell === endCell && (colspan > 1 || rowspan > 1)) {
195
+ menu.appendChild(createMenuItem(translate.instant('i18n_split_cells'), () => safeCall('splitCells', startCellStore)));
196
+ totalMenu++;
197
+ }
198
+ if (totalMenu > 0) {
199
+ const divider2 = document.createElement('div');
200
+ divider2.style.height = '1px';
201
+ divider2.style.background = '#eee';
202
+ divider2.style.margin = '4px 0';
203
+ menu.appendChild(divider2);
204
+ }
205
+ }
166
206
  menu.appendChild(createMenuItem(translate.instant('i18n_delete_row'), () => safeCall('deleteRow')));
167
207
  menu.appendChild(createMenuItem(translate.instant('i18n_delete_column'), () => safeCall('deleteColumn')));
168
208
  menu.appendChild(createMenuItem(translate.instant('i18n_delete_table'), () => safeCall('deleteTable')));
169
209
  document.body.appendChild(menu);
170
210
  const onOutside = (ev) => {
171
- if (!menu.contains(ev.target)) {
211
+ if (!menu.contains(ev.target) || ev.target.getElementsByTagName('table').length < 0) {
172
212
  closeAnyMenu();
173
213
  document.removeEventListener('click', onOutside, true);
174
214
  }
@@ -209,6 +249,149 @@ export const createContextMenuOptionTable = (quill, translate) => {
209
249
  openContextMenu(ev.pageX, ev.pageY);
210
250
  });
211
251
  };
252
+ // ===============================
253
+ // Utils: clear và select cells
254
+ // ===============================
255
+ const clearSelection = () => {
256
+ document.querySelectorAll('.selected-cell').forEach((c) => {
257
+ c.classList.remove('selected-cell');
258
+ });
259
+ };
260
+ const selectRangeCells = (start, end) => {
261
+ clearSelection();
262
+ const table = start.closest('table');
263
+ if (!table || table !== end.closest('table'))
264
+ return;
265
+ const rows = Array.from(table.querySelectorAll('tr'));
266
+ const startRow = rows.indexOf(start.parentElement);
267
+ const endRow = rows.indexOf(end.parentElement);
268
+ const minRow = Math.min(startRow, endRow);
269
+ const maxRow = Math.max(startRow, endRow);
270
+ const startCol = Array.from(start.parentElement.children).indexOf(start);
271
+ const endCol = Array.from(end.parentElement.children).indexOf(end);
272
+ const minCol = Math.min(startCol, endCol);
273
+ const maxCol = Math.max(startCol, endCol);
274
+ for (let r = minRow; r <= maxRow; r++) {
275
+ const row = rows[r];
276
+ const cells = Array.from(row.children);
277
+ for (let c = minCol; c <= maxCol; c++) {
278
+ cells[c].classList.add('selected-cell');
279
+ }
280
+ }
281
+ };
282
+ // ===============================
283
+ // Enable selection trên table
284
+ // ===============================
285
+ export function enableTableSelection(container, quill) {
286
+ container.addEventListener('mousedown', (e) => {
287
+ const target = e.target;
288
+ if ((target.tagName === 'TD' && e.button !== 2) || (e.button === 2 && !target.classList.contains('selected-cell'))) {
289
+ clearSelection();
290
+ isSelecting = true;
291
+ startCell = target;
292
+ endCell = target;
293
+ selectRangeCells(startCell, endCell);
294
+ }
295
+ });
296
+ container.addEventListener('mousemove', (e) => {
297
+ if (!isSelecting)
298
+ return;
299
+ const target = e.target;
300
+ if (target.tagName === 'TD' && startCell) {
301
+ endCell = target;
302
+ selectRangeCells(startCell, endCell);
303
+ }
304
+ });
305
+ container.addEventListener('mouseup', () => {
306
+ isSelecting = false;
307
+ });
308
+ }
309
+ const onOutside = (ev) => {
310
+ const target = ev.target;
311
+ console.log(target.tagName);
312
+ if (target.tagName !== 'TD' && target.tagName !== 'TR' && target.tagName !== 'TBODY' && target.tagName !== 'THEAD' && target.tagName !== 'TABLE') {
313
+ isSelecting = false;
314
+ startCell = null;
315
+ endCell = null;
316
+ clearSelection();
317
+ }
318
+ };
319
+ document.addEventListener('click', onOutside, true);
320
+ // ===============================
321
+ // Merge cells
322
+ // ===============================
323
+ export const mergeCells = (startCell, endCell) => {
324
+ const startCellIndex = startCell.getAttribute('index');
325
+ const endCellIndex = endCell.getAttribute('index');
326
+ const startCellRow = parseInt(startCellIndex?.split('-')[0] || '0', 10);
327
+ const endCellRow = parseInt(endCellIndex?.split('-')[0] || '0', 10);
328
+ const startCellCol = parseInt(startCellIndex?.split('-')[1] || '0', 10);
329
+ const endCellCol = parseInt(endCellIndex?.split('-')[1] || '0', 10);
330
+ const minRow = Math.min(startCellRow, endCellRow);
331
+ const maxRow = Math.max(startCellRow, endCellRow);
332
+ const minCol = Math.min(startCellCol, endCellCol);
333
+ const maxCol = Math.max(startCellCol, endCellCol);
334
+ const rows = startCell.closest('table')?.querySelectorAll('tr');
335
+ rows?.forEach((rowEl, rowIndex) => {
336
+ if (rowIndex < minRow || rowIndex > maxRow)
337
+ return;
338
+ const cells = rowEl.querySelectorAll('td, th');
339
+ cells.forEach((cellEl, colIndex) => {
340
+ if (colIndex < minCol || colIndex > maxCol)
341
+ return;
342
+ if (rowIndex === minRow && colIndex === minCol) {
343
+ cellEl.setAttribute('colspan', String(maxCol - minCol + 1));
344
+ cellEl.setAttribute('rowspan', String(maxRow - minRow + 1));
345
+ return;
346
+ }
347
+ cellEl.classList.add('hidden');
348
+ });
349
+ });
350
+ };
351
+ // ===============================
352
+ // Split cells
353
+ // ===============================
354
+ export function splitCells(cellSplit) {
355
+ const index = cellSplit.getAttribute('index');
356
+ let colSpan = parseInt(cellSplit.getAttribute('colspan') || '1', 10);
357
+ let rowSpan = parseInt(cellSplit.getAttribute('rowspan') || '1', 10);
358
+ const totalCellSplit = rowSpan * colSpan;
359
+ let countCellSplit = 0;
360
+ const rowStart = parseInt(index?.split('-')[0] || '0', 10);
361
+ const colStart = parseInt(index?.split('-')[1] || '0', 10);
362
+ const colIncrement = new Set();
363
+ const rowIncrement = new Set();
364
+ const rows = cellSplit.closest('table')?.querySelectorAll('tr');
365
+ rows?.forEach((rowEl, rowIndex) => {
366
+ if (rowIndex < rowStart)
367
+ return;
368
+ const cells = rowEl.querySelectorAll('td, th');
369
+ cells.forEach((cellEl, colIndex) => {
370
+ if (rowIndex < rowStart || colIndex < colStart || rowStart + rowSpan < rowIndex || colStart + colSpan < colIndex || countCellSplit >= totalCellSplit)
371
+ return;
372
+ if (rowIndex === rowStart && colIndex === colStart) {
373
+ countCellSplit++;
374
+ cellEl.setAttribute('colspan', '1');
375
+ cellEl.setAttribute('rowspan', '1');
376
+ return;
377
+ }
378
+ if (!cellEl.classList.contains('hidden')) {
379
+ if (!rowIncrement.has(rowIndex)) {
380
+ rowSpan++;
381
+ }
382
+ if (!colIncrement.has(colIndex)) {
383
+ colSpan++;
384
+ }
385
+ rowIncrement.add(rowIndex);
386
+ colIncrement.add(colIndex);
387
+ return;
388
+ }
389
+ cellEl.classList.remove('hidden');
390
+ countCellSplit++;
391
+ });
392
+ });
393
+ }
394
+ //-------------------------------------------
212
395
  let register = false;
213
396
  export const registerQuill2x = () => {
214
397
  if (register)
@@ -228,6 +411,26 @@ export const registerQuill2x = () => {
228
411
  Quill.register(size, true);
229
412
  Quill.register(alignStyle, true);
230
413
  Quill.register(QuillMentionBlot, true);
414
+ Quill.register('modules/resize', ResizeModule);
231
415
  [...iconList()].forEach((element) => set(icons, element.key, `<span class="${element.icon} ${element.key === 'unLink' ? 'hover:text-[#ee2d41] ' : 'hover:text-[var(--libs-ui-color-light-1)]'} text-[16px] text-[#6a7383]"></span>`));
232
416
  };
233
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpbGwyeC5kZWZpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW5wdXRzL3F1aWxsL3NyYy91dGlscy9xdWlsbDJ4LmRlZmluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxPQUFPLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBR25ELHVCQUF1QjtBQUN2QixNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUFDLEtBQWMsRUFBRSxRQUE0QixFQUFFLFNBQTJCLEVBQUUsRUFBRTtJQUMvRyxnQ0FBZ0M7SUFDaEMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLHVCQUF1QixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsYUFBYSxFQUFFLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRXRHLE1BQU0sS0FBSyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUMsS0FBSyxDQUFDLFNBQVMsR0FBRyxzQkFBc0IsQ0FBQztJQUN6QywyRUFBMkU7SUFDM0UsS0FBSyxDQUFDLEtBQUssQ0FBQyxRQUFRLEdBQUcsVUFBVSxDQUFDO0lBQ2xDLEtBQUssQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQztJQUNoQyxLQUFLLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxnQkFBZ0IsQ0FBQztJQUN0QyxLQUFLLENBQUMsS0FBSyxD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LENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzdCLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQzNCLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ2pDLEtBQUssQ0FBQyxRQUFRLENBQUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFdkMsQ0FBQyxHQUFHLFFBQVEsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLEVBQUUsZ0JBQWdCLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLHVCQUF1QixDQUFDLENBQUMsQ0FBQywyQ0FBMkMsc0NBQXNDLENBQUMsQ0FBQyxDQUFDO0FBQ3hPLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNldFN0eWxlc0VsZW1lbnQsIHNldCB9IGZyb20gJ0BsaWJzLXVpL3V0aWxzJztcbmltcG9ydCBRdWlsbDJ4IGZyb20gJ3F1aWxsMngnO1xuaW1wb3J0IHsgZnJvbUV2ZW50IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmb250U2l6ZVdoaXRlTGlzdCwgaWNvbkxpc3QgfSBmcm9tICcuL3F1aWxsLmRlZmluZSc7XG5pbXBvcnQgeyBRdWlsbE1lbnRpb25CbG90IH0gZnJvbSAnLi4vYmxvdHMtY3VzdG9tJztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcblxuLy9yZWdpb24gRnVuY3Rpb24gVGFibGVcbmV4cG9ydCBjb25zdCBjcmVhdGVUYWJsZVNlbGVjdG9yID0gKHF1aWxsOiBRdWlsbDJ4LCBhbmNob3JFbDogSFRNTEVsZW1lbnQgfCBudWxsLCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpID0+IHtcbiAgLy8gxJDDs25nIHBvcHVwIGPFqSBu4bq/dSBjw7JuIHThu5NuIHThuqFpXG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5tYW51YWwtdGFibGUtY3JlYXRvcicpLmZvckVhY2goKGVsKSA9PiBlbC5wYXJlbnRFbGVtZW50Py5yZW1vdmVDaGlsZChlbCkpO1xuXG4gIGNvbnN0IHBvcHVwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHBvcHVwLmNsYXNzTmFtZSA9ICdtYW51YWwtdGFibGUtY3JlYXRvcic7XG4gIC8vIElubGluZSBzdHlsZSDEkeG7gyDEkeG6o20gYuG6o28gaGnhu4NuIHRo4buLIG5nYXkgY+G6oyBraGkgQ1NTIGNvbXBvbmVudCBraMO0bmcgw6FwIGThu6VuZ1xuICBwb3B1cC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gIHBvcHVwLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmZic7XG4gIHBvcHVwLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgI2RkZCc7XG4gIHBvcHVwLnN0eWxlLmJvcmRlclJhZGl1cyA9ICc2cHgnO1xuICBwb3B1cC5zdHlsZS5ib3hTaGFkb3cgPSAnMCA2cHggMTZweCByZ2JhKDAsMCwwLDAuMTIpJztcbiAgcG9wdXAuc3R5bGUucGFkZGluZyA9ICcxMnB4JztcbiAgcG9wdXAuc3R5bGUuekluZGV4ID0gJzEwMDAwJztcbiAgcG9wdXAuc3R5bGUubWluV2lkdGggPSAnMjAwcHgnO1xuICBzZXRTdHlsZXNFbGVtZW50KHBvcHVwLCB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgYmFja2dyb3VuZDogJyNmZmYnLFxuICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZGRkJyxcbiAgICBib3JkZXJSYWRpdXM6ICc2cHgnLFxuICAgIGJveFNoYWRvdzogJzAgNnB4IDE2cHggcmdiYSgwLDAsMCwwLjEyKScsXG4gICAgcGFkZGluZzogJzEycHgnLFxuICAgIHpJbmRleDogJzEwMDAwJyxcbiAgICBtaW5XaWR0aDogJzIwMHB4JyxcbiAgfSk7XG5cbiAgY29uc3QgaW5mbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBpbmZvLnRleHRDb250ZW50ID0gdHJhbnNsYXRlLmluc3RhbnQoJ2kxOG5fc2VsZWN0X2NlbGwnKTtcbiAgc2V0U3R5bGVzRWxlbWVudChpbmZvLCB7XG4gICAgZm9udFNpemU6ICcxMnB4JyxcbiAgICBjb2xvcjogJyMzMzMnLFxuICAgIG1hcmdpbkJvdHRvbTogJzEwcHgnLFxuICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgZm9udFdlaWdodDogJzYwMCcsXG4gIH0pO1xuICBwb3B1cC5hcHBlbmRDaGlsZChpbmZvKTtcblxuICBjb25zdCBncmlkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHNldFN0eWxlc0VsZW1lbnQoZ3JpZCwge1xuICAgIGRpc3BsYXk6ICdncmlkJyxcbiAgICBncmlkVGVtcGxhdGVDb2x1bW5zOiAncmVwZWF0KDgsIDE4cHgpJyxcbiAgICBnYXA6ICc0cHgnLFxuICB9KTtcblxuICBjb25zdCBtYXggPSA4O1xuICBmb3IgKGxldCByID0gMTsgciA8PSBtYXg7IHIrKykge1xuICAgIGZvciAobGV0IGMgPSAxOyBjIDw9IG1heDsgYysrKSB7XG4gICAgICBjb25zdCBjZWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBjZWxsLnN0eWxlLndpZHRoID0gJzE4cHgnO1xuICAgICAgY2VsbC5zdHlsZS5oZWlnaHQgPSAnMThweCc7XG4gICAgICBjZWxsLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgI2U1ZTdlYic7XG4gICAgICBjZWxsLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmZic7XG4gICAgICBjZWxsLnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJztcblxuICAgICAgY2VsbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgKCkgPT4ge1xuICAgICAgICBpbmZvLnRleHRDb250ZW50ID0gYCR7cn0gw5cgJHtjfWA7XG4gICAgICAgIEFycmF5LmZyb20oZ3JpZC5jaGlsZHJlbikuZm9yRWFjaCgoZWwsIGlkeCkgPT4ge1xuICAgICAgICAgIGNvbnN0IHJyID0gTWF0aC5mbG9vcihpZHggLyBtYXgpICsgMTtcbiAgICAgICAgICBjb25zdCBjYyA9IChpZHggJSBtYXgpICsgMTtcbiAgICAgICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmJhY2tncm91bmQgPSByciA8PSByICYmIGNjIDw9IGMgPyAnI2RiZWFmZScgOiAnI2ZmZic7XG4gICAgICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5ib3JkZXJDb2xvciA9IHJyIDw9IHIgJiYgY2MgPD0gYyA/ICcjOTNjNWZkJyA6ICcjZTVlN2ViJztcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgY2VsbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBxdWlsbC5mb2N1cygpO1xuICAgICAgICAgIGNvbnN0IHRhYmxlTW9kdWxlID0gcXVpbGwuZ2V0TW9kdWxlKCd0YWJsZScpIGFzIGFueTtcbiAgICAgICAgICBpZiAodGFibGVNb2R1bGUgJiYgdHlwZW9mIHRhYmxlTW9kdWxlLmluc2VydFRhYmxlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0YWJsZU1vZHVsZS5pbnNlcnRUYWJsZShyLCBjKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkuY29udGFpbnMocG9wdXApKSB7XG4gICAgICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHBvcHVwKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBvbk91dHNpZGVDbGljaywgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBncmlkLmFwcGVuZENoaWxkKGNlbGwpO1xuICAgIH1cbiAgfVxuICBwb3B1cC5hcHBlbmRDaGlsZChncmlkKTtcblxuICBjb25zdCBwbGFjZVBvcHVwID0gKCkgPT4ge1xuICAgIGNvbnN0IHJlY3QgPSBhbmNob3JFbD8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgY29uc3QgdG9wID0gcmVjdCA/IHJlY3QuYm90dG9tICsgd2luZG93LnNjcm9sbFkgKyA2IDogMTAwO1xuICAgIGNvbnN0IGxlZnQgPSByZWN0ID8gcmVjdC5sZWZ0ICsgd2luZG93LnNjcm9sbFggOiAxMDA7XG4gICAgcG9wdXAuc3R5bGUudG9wID0gYCR7dG9wfXB4YDtcbiAgICBwb3B1cC5zdHlsZS5sZWZ0ID0gYCR7bGVmdH1weGA7XG4gIH07XG5cbiAgY29uc3Qgb25PdXRzaWRlQ2xpY2sgPSAoZXY6IE1vdXNlRXZlbnQpID0+IHtcbiAgICBpZiAoIXBvcHVwLmNvbnRhaW5zKGV2LnRhcmdldCBhcyBOb2RlKSkge1xuICAgICAgaWYgKGRvY3VtZW50LmJvZHkuY29udGFpbnMocG9wdXApKSB7XG4gICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQocG9wdXApO1xuICAgICAgfVxuICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBvbk91dHNpZGVDbGljaywgdHJ1ZSk7XG4gICAgfVxuICB9O1xuXG4gIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQocG9wdXApO1xuICBwbGFjZVBvcHVwKCk7XG4gIHNldFRpbWVvdXQoKCkgPT4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBvbk91dHNpZGVDbGljaywgdHJ1ZSkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGNyZWF0ZUNvbnRleHRNZW51T3B0aW9uVGFibGUgPSAocXVpbGw6IFF1aWxsMngsIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSkgPT4ge1xuICBsZXQgbGFzdENvbnRleHRJbmRleDogbnVtYmVyIHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3QgY2xvc2VBbnlNZW51ID0gKCkgPT4ge1xuICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5tYW51YWwtdGFibGUtbWVudScpLmZvckVhY2goKGVsKSA9PiBlbC5wYXJlbnRFbGVtZW50Py5yZW1vdmVDaGlsZChlbCkpO1xuICB9O1xuXG4gIGNvbnN0IHJ1bldpdGhTZWxlY3Rpb24gPSAoZm46ICgpID0+IHZvaWQpID0+IHtcbiAgICB0cnkge1xuICAgICAgcXVpbGwuZm9jdXMoKTtcbiAgICAgIGlmICh0eXBlb2YgbGFzdENvbnRleHRJbmRleCA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgcXVpbGwuc2V0U2VsZWN0aW9uKGxhc3RDb250ZXh0SW5kZXgsIDAsICdzaWxlbnQnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIC8qIG5vLW9wOiBnaeG7ryB5w6puIG7hur91IGtow7RuZyB0aOG7gyBzZXQgc2VsZWN0aW9uICovXG4gICAgfVxuICAgIGZuKCk7XG4gIH07XG5cbiAgY29uc3QgY3JlYXRlTWVudUl0ZW0gPSAobGFiZWw6IHN0cmluZywgb25DbGljazogKCkgPT4gdm9pZCkgPT4ge1xuICAgIGNvbnN0IGl0ZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtcbiAgICBpdGVtLnRleHRDb250ZW50ID0gbGFiZWw7XG4gICAgaXRlbS5zdHlsZS5wYWRkaW5nID0gJzZweCAxMnB4JztcbiAgICBpdGVtLnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJztcbiAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgKCkgPT4ge1xuICAgICAgcnVuV2l0aFNlbGVjdGlvbihvbkNsaWNrKTtcbiAgICAgIGNsb3NlQW55TWVudSgpO1xuICAgIH0pO1xuICAgIGl0ZW0uYWRkRXZlbnRMaXN0ZW5lcignbW91c2VlbnRlcicsICgpID0+IHtcbiAgICAgIGl0ZW0uc3R5bGUuYmFja2dyb3VuZCA9ICcjZjVmNWY1JztcbiAgICB9KTtcbiAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCAoKSA9PiB7XG4gICAgICBpdGVtLnN0eWxlLmJhY2tncm91bmQgPSAndHJhbnNwYXJlbnQnO1xuICAgIH0pO1xuICAgIHJldHVybiBpdGVtO1xuICB9O1xuXG4gIGNvbnN0IG9wZW5Db250ZXh0TWVudSA9IChwYWdlWDogbnVtYmVyLCBwYWdlWTogbnVtYmVyKSA9PiB7XG4gICAgY2xvc2VBbnlNZW51KCk7XG5cbiAgICBjb25zdCBtZW51ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgbWVudS5jbGFzc05hbWUgPSAnbWFudWFsLXRhYmxlLW1lbnUnO1xuICAgIG1lbnUuc3R5bGUucG9zaXRpb24gPSAnYWJzb2x1dGUnO1xuICAgIG1lbnUuc3R5bGUudG9wID0gYCR7cGFnZVl9cHhgO1xuICAgIG1lbnUuc3R5bGUubGVmdCA9IGAke3BhZ2VYfXB4YDtcbiAgICBtZW51LnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmZic7XG4gICAgbWVudS5zdHlsZS5ib3JkZXIgPSAnMXB4IHNvbGlkICNjY2MnO1xuICAgIG1lbnUuc3R5bGUuYm9yZGVyUmFkaXVzID0gJzRweCc7XG4gICAgbWVudS5zdHlsZS5ib3hTaGFkb3cgPSAnMCA0cHggMTJweCByZ2JhKDAsMCwwLDAuMiknO1xuICAgIG1lbnUuc3R5bGUuekluZGV4ID0gJzEwMDAxJztcbiAgICBtZW51LnN0eWxlLnBhZGRpbmcgPSAnNHB4JztcbiAgICBtZW51LnN0eWxlLm1pbldpZHRoID0gJzE4MHB4JztcblxuICAgIGNvbnN0IHRhYmxlTW9kdWxlID0gcXVpbGwuZ2V0TW9kdWxlKCd0YWJsZScpIGFzIFJlY29yZDxzdHJpbmcsIGFueT4gfCBudWxsO1xuICAgIGNvbnN0IHNhZmVDYWxsID0gKG1ldGhvZDogc3RyaW5nLCAuLi5hcmdzOiBhbnlbXSkgPT4ge1xuICAgICAgaWYgKHRhYmxlTW9kdWxlICYmIHR5cGVvZiB0YWJsZU1vZHVsZVttZXRob2RdID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIHRhYmxlTW9kdWxlW21ldGhvZF0oLi4uYXJncyk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIG1lbnUuYXBwZW5kQ2hpbGQoY3JlYXRlTWVudUl0ZW0odHJhbnNsYXRlLmluc3RhbnQoJ2kxOG5fYWRkX25ld19yb3dfYWJvdmUnKSwgKCkgPT4gc2FmZUNhbGwoJ2luc2VydFJvd0Fib3ZlJykpKTtcbiAgICBtZW51LmFwcGVuZENoaWxkKGNyZWF0ZU1lbnVJdGVtKHRyYW5zbGF0ZS5pbnN0YW50KCdpMThuX2FkZF9uZXdfcm93X2JlbG93JyksICgpID0+IHNhZmVDYWxsKCdpbnNlcnRSb3dCZWxvdycpKSk7XG4gICAgbWVudS5hcHBlbmRDaGlsZChjcmVhdGVNZW51SXRlbSh0cmFuc2xhdGUuaW5zdGFudCgnaTE4bl9hZGRfbmV3X2NvbHVtbl9sZWZ0JyksICgpID0+IHNhZmVDYWxsKCdpbnNlcnRDb2x1bW5MZWZ0JykpKTtcbiAgICBtZW51LmFwcGVuZENoaWxkKGNyZWF0ZU1lbnVJdGVtKHRyYW5zbGF0ZS5pbnN0YW50KCdpMThuX2FkZF9uZXdfY29sdW1uX3JpZ2h0JyksICgpID0+IHNhZmVDYWxsKCdpbnNlcnRDb2x1bW5SaWdodCcpKSk7XG4gICAgY29uc3QgZGl2aWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGRpdmlkZXIuc3R5bGUuaGVpZ2h0ID0gJzFweCc7XG4gICAgZGl2aWRlci5zdHlsZS5iYWNrZ3JvdW5kID0gJyNlZWUnO1xuICAgIGRpdmlkZXIuc3R5bGUubWFyZ2luID0gJzRweCAwJztcbiAgICBtZW51LmFwcGVuZENoaWxkKGRpdmlkZXIpO1xuICAgIG1lbnUuYXBwZW5kQ2hpbGQoY3JlYXRlTWVudUl0ZW0odHJhbnNsYXRlLmluc3RhbnQoJ2kxOG5fZGVsZXRlX3JvdycpLCAoKSA9PiBzYWZlQ2FsbCgnZGVsZXRlUm93JykpKTtcbiAgICBtZW51LmFwcGVuZENoaWxkKGNyZWF0ZU1lbnVJdGVtKHRyYW5zbGF0ZS5pbnN0YW50KCdpMThuX2RlbGV0ZV9jb2x1bW4nKSwgKCkgPT4gc2FmZUNhbGwoJ2RlbGV0ZUNvbHVtbicpKSk7XG4gICAgbWVudS5hcHBlbmRDaGlsZChjcmVhdGVNZW51SXRlbSh0cmFuc2xhdGUuaW5zdGFudCgnaTE4bl9kZWxldGVfdGFibGUnKSwgKCkgPT4gc2FmZUNhbGwoJ2RlbGV0ZVRhYmxlJykpKTtcblxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobWVudSk7XG5cbiAgICBjb25zdCBvbk91dHNpZGUgPSAoZXY6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGlmICghbWVudS5jb250YWlucyhldi50YXJnZXQgYXMgTm9kZSkpIHtcbiAgICAgICAgY2xvc2VBbnlNZW51KCk7XG4gICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgb25PdXRzaWRlLCB0cnVlKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHNldFRpbWVvdXQoKCkgPT4gZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBvbk91dHNpZGUsIHRydWUpKTtcblxuICAgIGNvbnN0IG9uU2Nyb2xsID0gKCkgPT4ge1xuICAgICAgY2xvc2VBbnlNZW51KCk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgb25TY3JvbGwsIHRydWUpO1xuICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIG9uU2Nyb2xsLCB0cnVlKTtcbiAgICB9O1xuICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBvblNjcm9sbCwgdHJ1ZSk7XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsIG9uU2Nyb2xsLCB0cnVlKTtcbiAgfTtcblxuICBmcm9tRXZlbnQ8TW91c2VFdmVudD4ocXVpbGwucm9vdCwgJ2NvbnRleHRtZW51Jykuc3Vic2NyaWJlKChldjogTW91c2VFdmVudCkgPT4ge1xuICAgIGNvbnN0IHRhcmdldCA9IGV2LnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBjb25zdCBpc0NlbGwgPSAhIXRhcmdldC5jbG9zZXN0KCd0ZCx0aCx0YWJsZSwucWwtdGFibGUnKTtcbiAgICBpZiAoIWlzQ2VsbCkgcmV0dXJuO1xuICAgIGV2LnByZXZlbnREZWZhdWx0KCk7XG4gICAgdHJ5IHtcbiAgICAgIC8vIMavdSB0acOqbiBs4bqleSBpbmRleCB04burIGJsb3QgdMawxqFuZyDhu6luZyBub2RlXG4gICAgICBjb25zdCBRdWlsbEFueSA9IFF1aWxsMnggYXMgYW55O1xuICAgICAgY29uc3QgYmxvdCA9IFF1aWxsQW55Py5maW5kPy4odGFyZ2V0KTtcbiAgICAgIGlmIChibG90ICYmIHR5cGVvZiBibG90Lm9mZnNldCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICBsYXN0Q29udGV4dEluZGV4ID0gYmxvdC5vZmZzZXQocXVpbGwuc2Nyb2xsKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIEZhbGxiYWNrOiDEkeG6t3Qgc2VsZWN0aW9uIGhp4buHbiB04bqhaSBu4bq/dSBraMO0bmcgeMOhYyDEkeG7i25oIMSRxrDhu6NjXG4gICAgICAgIGNvbnN0IHNlbCA9IHF1aWxsLmdldFNlbGVjdGlvbih0cnVlKTtcbiAgICAgICAgbGFzdENvbnRleHRJbmRleCA9IHNlbCA/IHNlbC5pbmRleCA6IDA7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICBjb25zdCBzZWwgPSBxdWlsbC5nZXRTZWxlY3Rpb24odHJ1ZSk7XG4gICAgICBsYXN0Q29udGV4dEluZGV4ID0gc2VsID8gc2VsLmluZGV4IDogMDtcbiAgICB9XG4gICAgcXVpbGwuZm9jdXMoKTtcbiAgICBvcGVuQ29udGV4dE1lbnUoZXYucGFnZVgsIGV2LnBhZ2VZKTtcbiAgfSk7XG59O1xuXG5sZXQgcmVnaXN0ZXIgPSBmYWxzZTtcbmV4cG9ydCBjb25zdCByZWdpc3RlclF1aWxsMnggPSAoKSA9PiB7XG4gIGlmIChyZWdpc3RlcikgcmV0dXJuO1xuICByZWdpc3RlciA9IHRydWU7XG5cbiAgY29uc3QgUXVpbGwgPSBRdWlsbDJ4IGFzIGFueTtcblxuICBjb25zdCBzaXplID0gUXVpbGwuaW1wb3J0KCdhdHRyaWJ1dG9ycy9zdHlsZS9zaXplJyk7XG4gIGNvbnN0IGFsaWduU3R5bGUgPSBRdWlsbC5pbXBvcnQoJ2F0dHJpYnV0b3JzL3N0eWxlL2FsaWduJyk7XG4gIGNvbnN0IGl0YWxpYyA9IFF1aWxsLmltcG9ydCgnZm9ybWF0cy9pdGFsaWMnKTtcbiAgY29uc3QgYm9sZCA9IFF1aWxsLmltcG9ydCgnZm9ybWF0cy9ib2xkJyk7XG4gIGNvbnN0IGljb25zID0gUXVpbGwuaW1wb3J0KCd1aS9pY29ucycpO1xuICBzaXplLndoaXRlbGlzdCA9IGZvbnRTaXplV2hpdGVMaXN0KCk7XG5cbiAgaXRhbGljLnRhZ05hbWUgPSAnaSc7XG4gIGJvbGQudGFnTmFtZSA9ICdiJztcblxuICBRdWlsbC5yZWdpc3Rlcihib2xkLCB0cnVlKTtcbiAgUXVpbGwucmVnaXN0ZXIoaXRhbGljLCB0cnVlKTtcbiAgUXVpbGwucmVnaXN0ZXIoc2l6ZSwgdHJ1ZSk7XG4gIFF1aWxsLnJlZ2lzdGVyKGFsaWduU3R5bGUsIHRydWUpO1xuICBRdWlsbC5yZWdpc3RlcihRdWlsbE1lbnRpb25CbG90LCB0cnVlKTtcblxuICBbLi4uaWNvbkxpc3QoKV0uZm9yRWFjaCgoZWxlbWVudCkgPT4gc2V0KGljb25zLCBlbGVtZW50LmtleSwgYDxzcGFuIGNsYXNzPVwiJHtlbGVtZW50Lmljb259ICR7ZWxlbWVudC5rZXkgPT09ICd1bkxpbmsnID8gJ2hvdmVyOnRleHQtWyNlZTJkNDFdICcgOiAnaG92ZXI6dGV4dC1bdmFyKC0tbGlicy11aS1jb2xvci1saWdodC0xKV0nfSB0ZXh0LVsxNnB4XSB0ZXh0LVsjNmE3MzgzXVwiPjwvc3Bhbj5gKSk7XG59O1xuIl19
417
+ export const getAllTablesWithSpan = (quill) => {
418
+ const root = quill.root;
419
+ // Tìm tất cả table trong quill
420
+ const tableEls = root.querySelectorAll('table');
421
+ tableEls.forEach((tableEl) => {
422
+ const rows = tableEl.querySelectorAll('tr');
423
+ rows.forEach((rowEl, rIndex) => {
424
+ rowEl.setAttribute('index', `${rIndex}`);
425
+ const cells = rowEl.querySelectorAll('td, th');
426
+ cells.forEach((cellEl, cIndex) => {
427
+ cellEl.setAttribute('index', `${rIndex}-${cIndex}`);
428
+ const rowspan = parseInt(cellEl.getAttribute('rowspan') || '1', 10);
429
+ const colspan = parseInt(cellEl.getAttribute('colspan') || '1', 10);
430
+ cellEl.setAttribute('rowspan', String(rowspan));
431
+ cellEl.setAttribute('colspan', String(colspan));
432
+ });
433
+ });
434
+ });
435
+ };
436
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVpbGwyeC5kZWZpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzLXVpL2NvbXBvbmVudHMvaW5wdXRzL3F1aWxsL3NyYy91dGlscy9xdWlsbDJ4LmRlZmluZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDdkQsT0FBTyxPQUFPLE1BQU0sU0FBUyxDQUFDO0FBQzlCLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQzdELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRW5ELE9BQU8sWUFBWSxNQUFNLDRCQUE0QixDQUFDO0FBQ3RELElBQUksU0FBUyxHQUF1QixJQUFJLENBQUM7QUFDekMsSUFBSSxPQUFPLEdBQXVCLElBQUksQ0FBQztBQUN2QyxJQUFJLFdBQVcsR0FBRyxLQUFLLENBQUM7QUFFeEIsdUJBQXVCO0FBQ3ZCLE1BQU0sQ0FBQyxNQUFNLG1CQUFtQixHQUFHLENBQUMsS0FBYyxFQUFFLFFBQTRCLEVBQUUsU0FBMkIsRUFBRSxFQUFFO0lBQy9HLGdDQUFnQztJQUNoQyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxhQUFhLEVBQUUsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFdEcsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUM1QyxLQUFLLENBQUMsU0FBUyxHQUFHLHNCQUFzQixDQUFDO0lBQ3pDLDJFQUEyRTtJQUMzRSxLQUFLLENBQUMsS0FBSyxDQUFDLFFBQVEsR0FB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RUFBRSxDQUFDLENBQUM7Z0JBQ3BELE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDcEUsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUVwRSxNQUFNLENBQUMsWUFBWSxDQUFDLFNBQVMsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztnQkFDaEQsTUFBTSxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDbEQsQ0FBQyxDQUFDLENBQUM7UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgc2V0U3R5bGVzRWxlbWVudCwgc2V0IH0gZnJvbSAnQGxpYnMtdWkvdXRpbHMnO1xuaW1wb3J0IFF1aWxsMnggZnJvbSAncXVpbGwyeCc7XG5pbXBvcnQgeyBmcm9tRXZlbnQgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGZvbnRTaXplV2hpdGVMaXN0LCBpY29uTGlzdCB9IGZyb20gJy4vcXVpbGwuZGVmaW5lJztcbmltcG9ydCB7IFF1aWxsTWVudGlvbkJsb3QgfSBmcm9tICcuLi9ibG90cy1jdXN0b20nO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IFJlc2l6ZU1vZHVsZSBmcm9tICdAc3N1bW8vcXVpbGwtcmVzaXplLW1vZHVsZSc7XG5sZXQgc3RhcnRDZWxsOiBIVE1MRWxlbWVudCB8IG51bGwgPSBudWxsO1xubGV0IGVuZENlbGw6IEhUTUxFbGVtZW50IHwgbnVsbCA9IG51bGw7XG5sZXQgaXNTZWxlY3RpbmcgPSBmYWxzZTtcblxuLy9yZWdpb24gRnVuY3Rpb24gVGFibGVcbmV4cG9ydCBjb25zdCBjcmVhdGVUYWJsZVNlbGVjdG9yID0gKHF1aWxsOiBRdWlsbDJ4LCBhbmNob3JFbDogSFRNTEVsZW1lbnQgfCBudWxsLCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpID0+IHtcbiAgLy8gxJDDs25nIHBvcHVwIGPFqSBu4bq/dSBjw7JuIHThu5NuIHThuqFpXG4gIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5tYW51YWwtdGFibGUtY3JlYXRvcicpLmZvckVhY2goKGVsKSA9PiBlbC5wYXJlbnRFbGVtZW50Py5yZW1vdmVDaGlsZChlbCkpO1xuXG4gIGNvbnN0IHBvcHVwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHBvcHVwLmNsYXNzTmFtZSA9ICdtYW51YWwtdGFibGUtY3JlYXRvcic7XG4gIC8vIElubGluZSBzdHlsZSDEkeG7gyDEkeG6o20gYuG6o28gaGnhu4NuIHRo4buLIG5nYXkgY+G6oyBraGkgQ1NTIGNvbXBvbmVudCBraMO0bmcgw6FwIGThu6VuZ1xuICBwb3B1cC5zdHlsZS5wb3NpdGlvbiA9ICdhYnNvbHV0ZSc7XG4gIHBvcHVwLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmZic7XG4gIHBvcHVwLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgI2RkZCc7XG4gIHBvcHVwLnN0eWxlLmJvcmRlclJhZGl1cyA9ICc2cHgnO1xuICBwb3B1cC5zdHlsZS5ib3hTaGFkb3cgPSAnMCA2cHggMTZweCByZ2JhKDAsMCwwLDAuMTIpJztcbiAgcG9wdXAuc3R5bGUucGFkZGluZyA9ICcxMnB4JztcbiAgcG9wdXAuc3R5bGUuekluZGV4ID0gJzEwMDAwJztcbiAgcG9wdXAuc3R5bGUubWluV2lkdGggPSAnMjAwcHgnO1xuICBzZXRTdHlsZXNFbGVtZW50KHBvcHVwLCB7XG4gICAgcG9zaXRpb246ICdhYnNvbHV0ZScsXG4gICAgYmFja2dyb3VuZDogJyNmZmYnLFxuICAgIGJvcmRlcjogJzFweCBzb2xpZCAjZGRkJyxcbiAgICBib3JkZXJSYWRpdXM6ICc2cHgnLFxuICAgIGJveFNoYWRvdzogJzAgNnB4IDE2cHggcmdiYSgwLDAsMCwwLjEyKScsXG4gICAgcGFkZGluZzogJzEycHgnLFxuICAgIHpJbmRleDogJzEwMDAwJyxcbiAgICBtaW5XaWR0aDogJzIwMHB4JyxcbiAgfSk7XG5cbiAgY29uc3QgaW5mbyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICBpbmZvLnRleHRDb250ZW50ID0gdHJhbnNsYXRlLmluc3RhbnQoJ2kxOG5fc2VsZWN0X2NlbGwnKTtcbiAgc2V0U3R5bGVzRWxlbWVudChpbmZvLCB7XG4gICAgZm9udFNpemU6ICcxMnB4JyxcbiAgICBjb2xvcjogJyMzMzMnLFxuICAgIG1hcmdpbkJvdHRvbTogJzEwcHgnLFxuICAgIHRleHRBbGlnbjogJ2NlbnRlcicsXG4gICAgZm9udFdlaWdodDogJzYwMCcsXG4gIH0pO1xuICBwb3B1cC5hcHBlbmRDaGlsZChpbmZvKTtcblxuICBjb25zdCBncmlkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gIHNldFN0eWxlc0VsZW1lbnQoZ3JpZCwge1xuICAgIGRpc3BsYXk6ICdncmlkJyxcbiAgICBncmlkVGVtcGxhdGVDb2x1bW5zOiAncmVwZWF0KDgsIDE4cHgpJyxcbiAgICBnYXA6ICc0cHgnLFxuICB9KTtcblxuICBjb25zdCBtYXggPSA4O1xuICBmb3IgKGxldCByb3cgPSAxOyByb3cgPD0gbWF4OyByb3crKykge1xuICAgIGZvciAobGV0IGNvbCA9IDE7IGNvbCA8PSBtYXg7IGNvbCsrKSB7XG4gICAgICBjb25zdCBjZWxsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgICBjZWxsLnN0eWxlLndpZHRoID0gJzE4cHgnO1xuICAgICAgY2VsbC5zdHlsZS5oZWlnaHQgPSAnMThweCc7XG4gICAgICBjZWxsLnN0eWxlLmJvcmRlciA9ICcxcHggc29saWQgI2U1ZTdlYic7XG4gICAgICBjZWxsLnN0eWxlLmJhY2tncm91bmQgPSAnI2ZmZic7XG4gICAgICBjZWxsLnN0eWxlLmN1cnNvciA9ICdwb2ludGVyJztcblxuICAgICAgY2VsbC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywgKCkgPT4ge1xuICAgICAgICBpbmZvLnRleHRDb250ZW50ID0gYCR7cm93fSDDlyAke2NvbH1gO1xuICAgICAgICBBcnJheS5mcm9tKGdyaWQuY2hpbGRyZW4pLmZvckVhY2goKGVsLCBpZHgpID0+IHtcbiAgICAgICAgICBjb25zdCByciA9IE1hdGguZmxvb3IoaWR4IC8gbWF4KSArIDE7XG4gICAgICAgICAgY29uc3QgY2MgPSAoaWR4ICUgbWF4KSArIDE7XG4gICAgICAgICAgKGVsIGFzIEhUTUxFbGVtZW50KS5zdHlsZS5iYWNrZ3JvdW5kID0gcnIgPD0gcm93ICYmIGNjIDw9IGNvbCA/ICcjZGJlYWZlJyA6ICcjZmZmJztcbiAgICAgICAgICAoZWwgYXMgSFRNTEVsZW1lbnQpLnN0eWxlLmJvcmRlckNvbG9yID0gcnIgPD0gcm93ICYmIGNjIDw9IGNvbCA/ICcjOTNjNWZkJyA6ICcjZTVlN2ViJztcbiAgICAgICAgfSk7XG4gICAgICB9KTtcblxuICAgICAgY2VsbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBxdWlsbC5mb2N1cygpO1xuICAgICAgICAgIGNvbnN0IHRhYmxlTW9kdWxlID0gcXVpbGwuZ2V0TW9kdWxlKCd0YWJsZScpIGFzIGFueTtcbiAgICAgICAgICBpZiAodGFibGVNb2R1bGUgJiYgdHlwZW9mIHRhYmxlTW9kdWxlLmluc2VydFRhYmxlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICB0YWJsZU1vZHVsZS5pbnNlcnRUYWJsZShyb3csIGNvbCk7XG4gICAgICAgICAgICBnZXRBbGxUYWJsZXNXaXRoU3BhbihxdWlsbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgIGlmIChkb2N1bWVudC5ib2R5LmNvbnRhaW5zKHBvcHVwKSkge1xuICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChwb3B1cCk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgb25PdXRzaWRlQ2xpY2ssIHRydWUpO1xuICAgICAgICB9XG4gICAgICB9KTtcblxuICAgICAgZ3JpZC5hcHBlbmRDaGlsZChjZWxsKTtcbiAgICB9XG4gIH1cbiAgcG9wdXAuYXBwZW5kQ2hpbGQoZ3JpZCk7XG5cbiAgY29uc3QgcGxhY2VQb3B1cCA9ICgpID0+IHtcbiAgICBjb25zdCByZWN0ID0gYW5jaG9yRWw/LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgIGNvbnN0IHRvcCA9IHJlY3QgPyByZWN0LmJvdHRvbSArIHdpbmRvdy5zY3JvbGxZICsgNiA6IDEwMDtcbiAgICBjb25zdCBsZWZ0ID0gcmVjdCA/IHJlY3QubGVmdCArIHdpbmRvdy5zY3JvbGxYIDogMTAwO1xuICAgIHBvcHVwLnN0eWxlLnRvcCA9IGAke3RvcH1weGA7XG4gICAgcG9wdXAuc3R5bGUubGVmdCA9IGAke2xlZnR9cHhgO1xuICB9O1xuXG4gIGNvbnN0IG9uT3V0c2lkZUNsaWNrID0gKGV2OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgaWYgKCFwb3B1cC5jb250YWlucyhldi50YXJnZXQgYXMgTm9kZSkpIHtcbiAgICAgIGlmIChkb2N1bWVudC5ib2R5LmNvbnRhaW5zKHBvcHVwKSkge1xuICAgICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHBvcHVwKTtcbiAgICAgIH1cbiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgb25PdXRzaWRlQ2xpY2ssIHRydWUpO1xuICAgIH1cbiAgfTtcblxuICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHBvcHVwKTtcbiAgcGxhY2VQb3B1cCgpO1xuICBzZXRUaW1lb3V0KCgpID0+IGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgb25PdXRzaWRlQ2xpY2ssIHRydWUpKTtcbn07XG5cbmV4cG9ydCBjb25zdCBjcmVhdGVDb250ZXh0TWVudU9wdGlvblRhYmxlID0gKHF1aWxsOiBRdWlsbDJ4LCB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UpID0+IHtcbiAgbGV0IGxhc3RDb250ZXh0SW5kZXg6IG51bWJlciB8IG51bGwgPSBudWxsO1xuXG4gIGNvbnN0IGNsb3NlQW55TWVudSA9ICgpID0+IHtcbiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubWFudWFsLXRhYmxlLW1lbnUnKS5mb3JFYWNoKChlbCkgPT4gZWwucGFyZW50RWxlbWVudD8ucmVtb3ZlQ2hpbGQoZWwpKTtcbiAgfTtcblxuICBjb25zdCBydW5XaXRoU2VsZWN0aW9uID0gKGZuOiAoKSA9PiB2b2lkKSA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIHF1aWxsLmZvY3VzKCk7XG4gICAgICBpZiAodHlwZW9mIGxhc3RDb250ZXh0SW5kZXggPT09ICdudW1iZXInKSB7XG4gICAgICAgIHF1aWxsLnNldFNlbGVjdGlvbihsYXN0Q29udGV4dEluZGV4LCAwLCAnc2lsZW50Jyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCB7XG4gICAgICAvKiBuby1vcDogZ2nhu68gecOqbiBu4bq/dSBraMO0bmcgdGjhu4Mgc2V0IHNlbGVjdGlvbiAqL1xuICAgIH1cbiAgICBmbigpO1xuICB9O1xuXG4gIGNvbnN0IGNyZWF0ZU1lbnVJdGVtID0gKGxhYmVsOiBzdHJpbmcsIG9uQ2xpY2s6ICgpID0+IHZvaWQpID0+IHtcbiAgICBjb25zdCBpdGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7XG4gICAgaXRlbS50ZXh0Q29udGVudCA9IGxhYmVsO1xuICAgIGl0ZW0uc3R5bGUucGFkZGluZyA9ICc2cHggMTJweCc7XG4gICAgaXRlbS5zdHlsZS5jdXJzb3IgPSAncG9pbnRlcic7XG4gICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsICgpID0+IHtcbiAgICAgIHJ1bldpdGhTZWxlY3Rpb24ob25DbGljayk7XG4gICAgICBjbG9zZUFueU1lbnUoKTtcbiAgICB9KTtcbiAgICBpdGVtLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZW50ZXInLCAoKSA9PiB7XG4gICAgICBpdGVtLnN0eWxlLmJhY2tncm91bmQgPSAnI2Y1ZjVmNSc7XG4gICAgfSk7XG4gICAgaXRlbS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWxlYXZlJywgKCkgPT4ge1xuICAgICAgaXRlbS5zdHlsZS5iYWNrZ3JvdW5kID0gJ3RyYW5zcGFyZW50JztcbiAgICB9KTtcbiAgICByZXR1cm4gaXRlbTtcbiAgfTtcblxuICBjb25zdCBvcGVuQ29udGV4dE1lbnUgPSAocGFnZVg6IG51bWJlciwgcGFnZVk6IG51bWJlcikgPT4ge1xuICAgIGNsb3NlQW55TWVudSgpO1xuXG4gICAgY29uc3QgbWVudSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIG1lbnUuY2xhc3NOYW1lID0gJ21hbnVhbC10YWJsZS1tZW51JztcbiAgICBtZW51LnN0eWxlLnBvc2l0aW9uID0gJ2Fic29sdXRlJztcbiAgICBtZW51LnN0eWxlLnRvcCA9IGAke3BhZ2VZfXB4YDtcbiAgICBtZW51LnN0eWxlLmxlZnQgPSBgJHtwYWdlWH1weGA7XG4gICAgbWVudS5zdHlsZS5iYWNrZ3JvdW5kID0gJyNmZmYnO1xuICAgIG1lbnUuc3R5bGUuYm9yZGVyID0gJzFweCBzb2xpZCAjY2NjJztcbiAgICBtZW51LnN0eWxlLmJvcmRlclJhZGl1cyA9ICc0cHgnO1xuICAgIG1lbnUuc3R5bGUuYm94U2hhZG93ID0gJzAgNHB4IDEycHggcmdiYSgwLDAsMCwwLjIpJztcbiAgICBtZW51LnN0eWxlLnpJbmRleCA9ICcxMDAwMSc7XG4gICAgbWVudS5zdHlsZS5wYWRkaW5nID0gJzRweCc7XG4gICAgbWVudS5zdHlsZS5taW5XaWR0aCA9ICcxODBweCc7XG5cbiAgICBjb25zdCB0YWJsZU1vZHVsZSA9IHF1aWxsLmdldE1vZHVsZSgndGFibGUnKSBhcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHwgbnVsbDtcbiAgICBjb25zdCBzYWZlQ2FsbCA9IChtZXRob2Q6IHN0cmluZywgLi4uYXJnczogYW55W10pID0+IHtcbiAgICAgIGlmIChtZXRob2QgPT09ICdtZXJnZUNlbGxzJykge1xuICAgICAgICBjb25zdCBbc3RhcnRDZWxsLCBlbmRDZWxsXSA9IGFyZ3M7XG4gICAgICAgIG1lcmdlQ2VsbHMoc3RhcnRDZWxsLCBlbmRDZWxsKTtcbiAgICAgICAgY2xvc2VBbnlNZW51KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmIChtZXRob2QgPT09ICdzcGxpdENlbGxzJykge1xuICAgICAgICBjb25zdCBbc3RhcnRDZWxsXSA9IGFyZ3M7XG4gICAgICAgIHNwbGl0Q2VsbHMoc3RhcnRDZWxsKTtcbiAgICAgICAgY2xvc2VBbnlNZW51KCk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICh0YWJsZU1vZHVsZSAmJiB0eXBlb2YgdGFibGVNb2R1bGVbbWV0aG9kXSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB0YWJsZU1vZHVsZVttZXRob2RdKC4uLmFyZ3MpO1xuICAgICAgICBnZXRBbGxUYWJsZXNXaXRoU3BhbihxdWlsbCk7XG4gICAgICB9XG4gICAgfTtcblxuICAgIG1lbnUuYXBwZW5kQ2hpbGQoY3JlYXRlTWVudUl0ZW0odHJhbnNsYXRlLmluc3RhbnQoJ2kxOG5fYWRkX25ld19yb3dfYWJvdmUnKSwgKCkgPT4gc2FmZUNhbGwoJ2luc2VydFJvd0Fib3ZlJykpKTtcbiAgICBtZW51LmFwcGVuZENoaWxkKGNyZWF0ZU1lbnVJdGVtKHRyYW5zbGF0ZS5pbnN0YW50KCdpMThuX2FkZF9uZXdfcm93X2JlbG93JyksICgpID0+IHNhZmVDYWxsKCdpbnNlcnRSb3dCZWxvdycpKSk7XG4gICAgbWVudS5hcHBlbmRDaGlsZChjcmVhdGVNZW51SXRlbSh0cmFuc2xhdGUuaW5zdGFudCgnaTE4bl9hZGRfbmV3X2NvbHVtbl9sZWZ0JyksICgpID0+IHNhZmVDYWxsKCdpbnNlcnRDb2x1bW5MZWZ0JykpKTtcbiAgICBtZW51LmFwcGVuZENoaWxkKGNyZWF0ZU1lbnVJdGVtKHRyYW5zbGF0ZS5pbnN0YW50KCdpMThuX2FkZF9uZXdfY29sdW1uX3JpZ2h0JyksICgpID0+IHNhZmVDYWxsKCdpbnNlcnRDb2x1bW5SaWdodCcpKSk7XG4gICAgY29uc3QgZGl2aWRlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgIGRpdmlkZXIuc3R5bGUuaGVpZ2h0ID0gJzFweCc7XG4gICAgZGl2aWRlci5zdHlsZS5iYWNrZ3JvdW5kID0gJyNlZWUnO1xuICAgIGRpdmlkZXIuc3R5bGUubWFyZ2luID0gJzRweCAwJztcbiAgICBtZW51LmFwcGVuZENoaWxkKGRpdmlkZXIpO1xuICAgIGlmIChzdGFydENlbGwgJiYgZW5kQ2VsbCkge1xuICAgICAgY29uc3Qgc3RhcnRDZWxsU3RvcmUgPSBzdGFydENlbGw7XG4gICAgICBjb25zdCBlbmRDZWxsU3RvcmUgPSBlbmRDZWxsO1xuICAgICAgY29uc3QgY29sc3BhbiA9IHBhcnNlSW50KHN0YXJ0Q2VsbFN0b3JlLmdldEF0dHJpYnV0ZSgnY29sc3BhbicpIHx8ICcxJywgMTApO1xuICAgICAgY29uc3Qgcm93c3BhbiA9IHBhcnNlSW50KHN0YXJ0Q2VsbFN0b3JlLmdldEF0dHJpYnV0ZSgncm93c3BhbicpIHx8ICcxJywgMTApO1xuICAgICAgbGV0IHRvdGFsTWVudSA9IDA7XG4gICAgICBpZiAoc3RhcnRDZWxsICE9PSBlbmRDZWxsKSB7XG4gICAgICAgIG1lbnUuYXBwZW5kQ2hpbGQoY3JlYXRlTWVudUl0ZW0odHJhbnNsYXRlLmluc3RhbnQoJ2kxOG5fbWVyZ2VfY2VsbHMnKSwgKCkgPT4gc2FmZUNhbGwoJ21lcmdlQ2VsbHMnLCBzdGFydENlbGxTdG9yZSwgZW5kQ2VsbFN0b3JlKSkpO1xuICAgICAgICB0b3RhbE1lbnUrKztcbiAgICAgIH1cbiAgICAgIGlmIChzdGFydENlbGwgPT09IGVuZENlbGwgJiYgKGNvbHNwYW4gPiAxIHx8IHJvd3NwYW4gPiAxKSkge1xuICAgICAgICBtZW51LmFwcGVuZENoaWxkKGNyZWF0ZU1lbnVJdGVtKHRyYW5zbGF0ZS5pbnN0YW50KCdpMThuX3NwbGl0X2NlbGxzJyksICgpID0+IHNhZmVDYWxsKCdzcGxpdENlbGxzJywgc3RhcnRDZWxsU3RvcmUpKSk7XG4gICAgICAgIHRvdGFsTWVudSsrO1xuICAgICAgfVxuXG4gICAgICBpZiAodG90YWxNZW51ID4gMCkge1xuICAgICAgICBjb25zdCBkaXZpZGVyMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xuICAgICAgICBkaXZpZGVyMi5zdHlsZS5oZWlnaHQgPSAnMXB4JztcbiAgICAgICAgZGl2aWRlcjIuc3R5bGUuYmFja2dyb3VuZCA9ICcjZWVlJztcbiAgICAgICAgZGl2aWRlcjIuc3R5bGUubWFyZ2luID0gJzRweCAwJztcbiAgICAgICAgbWVudS5hcHBlbmRDaGlsZChkaXZpZGVyMik7XG4gICAgICB9XG4gICAgfVxuICAgIG1lbnUuYXBwZW5kQ2hpbGQoY3JlYXRlTWVudUl0ZW0odHJhbnNsYXRlLmluc3RhbnQoJ2kxOG5fZGVsZXRlX3JvdycpLCAoKSA9PiBzYWZlQ2FsbCgnZGVsZXRlUm93JykpKTtcbiAgICBtZW51LmFwcGVuZENoaWxkKGNyZWF0ZU1lbnVJdGVtKHRyYW5zbGF0ZS5pbnN0YW50KCdpMThuX2RlbGV0ZV9jb2x1bW4nKSwgKCkgPT4gc2FmZUNhbGwoJ2RlbGV0ZUNvbHVtbicpKSk7XG4gICAgbWVudS5hcHBlbmRDaGlsZChjcmVhdGVNZW51SXRlbSh0cmFuc2xhdGUuaW5zdGFudCgnaTE4bl9kZWxldGVfdGFibGUnKSwgKCkgPT4gc2FmZUNhbGwoJ2RlbGV0ZVRhYmxlJykpKTtcblxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobWVudSk7XG5cbiAgICBjb25zdCBvbk91dHNpZGUgPSAoZXY6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIGlmICghbWVudS5jb250YWlucyhldi50YXJnZXQgYXMgTm9kZSkgfHwgKGV2LnRhcmdldCBhcyBIVE1MRWxlbWVudCkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3RhYmxlJykubGVuZ3RoIDwgMCkge1xuICAgICAgICBjbG9zZUFueU1lbnUoKTtcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2xpY2snLCBvbk91dHNpZGUsIHRydWUpO1xuICAgICAgfVxuICAgIH07XG4gICAgc2V0VGltZW91dCgoKSA9PiBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIG9uT3V0c2lkZSwgdHJ1ZSkpO1xuXG4gICAgY29uc3Qgb25TY3JvbGwgPSAoKSA9PiB7XG4gICAgICBjbG9zZUFueU1lbnUoKTtcbiAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCBvblNjcm9sbCwgdHJ1ZSk7XG4gICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJywgb25TY3JvbGwsIHRydWUpO1xuICAgIH07XG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIG9uU2Nyb2xsLCB0cnVlKTtcbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgb25TY3JvbGwsIHRydWUpO1xuICB9O1xuXG4gIGZyb21FdmVudDxNb3VzZUV2ZW50PihxdWlsbC5yb290LCAnY29udGV4dG1lbnUnKS5zdWJzY3JpYmUoKGV2OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgY29uc3QgdGFyZ2V0ID0gZXYudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGNvbnN0IGlzQ2VsbCA9ICEhdGFyZ2V0LmNsb3Nlc3QoJ3RkLHRoLHRhYmxlLC5xbC10YWJsZScpO1xuICAgIGlmICghaXNDZWxsKSByZXR1cm47XG4gICAgZXYucHJldmVudERlZmF1bHQoKTtcbiAgICB0cnkge1xuICAgICAgLy8gxq91IHRpw6puIGzhuqV5IGluZGV4IHThu6sgYmxvdCB0xrDGoW5nIOG7qW5nIG5vZGVcbiAgICAgIGNvbnN0IFF1aWxsQW55ID0gUXVpbGwyeCBhcyBhbnk7XG4gICAgICBjb25zdCBibG90ID0gUXVpbGxBbnk/LmZpbmQ/Lih0YXJnZXQpO1xuICAgICAgaWYgKGJsb3QgJiYgdHlwZW9mIGJsb3Qub2Zmc2V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGxhc3RDb250ZXh0SW5kZXggPSBibG90Lm9mZnNldChxdWlsbC5zY3JvbGwpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gRmFsbGJhY2s6IMSR4bq3dCBzZWxlY3Rpb24gaGnhu4duIHThuqFpIG7hur91IGtow7RuZyB4w6FjIMSR4buLbmggxJHGsOG7o2NcbiAgICAgICAgY29uc3Qgc2VsID0gcXVpbGwuZ2V0U2VsZWN0aW9uKHRydWUpO1xuICAgICAgICBsYXN0Q29udGV4dEluZGV4ID0gc2VsID8gc2VsLmluZGV4IDogMDtcbiAgICAgIH1cbiAgICB9IGNhdGNoIHtcbiAgICAgIGNvbnN0IHNlbCA9IHF1aWxsLmdldFNlbGVjdGlvbih0cnVlKTtcbiAgICAgIGxhc3RDb250ZXh0SW5kZXggPSBzZWwgPyBzZWwuaW5kZXggOiAwO1xuICAgIH1cbiAgICBxdWlsbC5mb2N1cygpO1xuICAgIG9wZW5Db250ZXh0TWVudShldi5wYWdlWCwgZXYucGFnZVkpO1xuICB9KTtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFV0aWxzOiBjbGVhciB2w6Agc2VsZWN0IGNlbGxzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbmNvbnN0IGNsZWFyU2VsZWN0aW9uID0gKCkgPT4ge1xuICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcuc2VsZWN0ZWQtY2VsbCcpLmZvckVhY2goKGMpID0+IHtcbiAgICBjLmNsYXNzTGlzdC5yZW1vdmUoJ3NlbGVjdGVkLWNlbGwnKTtcbiAgfSk7XG59O1xuXG5jb25zdCBzZWxlY3RSYW5nZUNlbGxzID0gKHN0YXJ0OiBIVE1MRWxlbWVudCwgZW5kOiBIVE1MRWxlbWVudCkgPT4ge1xuICBjbGVhclNlbGVjdGlvbigpO1xuICBjb25zdCB0YWJsZSA9IHN0YXJ0LmNsb3Nlc3QoJ3RhYmxlJyk7XG4gIGlmICghdGFibGUgfHwgdGFibGUgIT09IGVuZC5jbG9zZXN0KCd0YWJsZScpKSByZXR1cm47XG5cbiAgY29uc3Qgcm93cyA9IEFycmF5LmZyb20odGFibGUucXVlcnlTZWxlY3RvckFsbCgndHInKSk7XG4gIGNvbnN0IHN0YXJ0Um93ID0gcm93cy5pbmRleE9mKHN0YXJ0LnBhcmVudEVsZW1lbnQgYXMgSFRNTFRhYmxlUm93RWxlbWVudCk7XG4gIGNvbnN0IGVuZFJvdyA9IHJvd3MuaW5kZXhPZihlbmQucGFyZW50RWxlbWVudCBhcyBIVE1MVGFibGVSb3dFbGVtZW50KTtcblxuICBjb25zdCBtaW5Sb3cgPSBNYXRoLm1pbihzdGFydFJvdywgZW5kUm93KTtcbiAgY29uc3QgbWF4Um93ID0gTWF0aC5tYXgoc3RhcnRSb3csIGVuZFJvdyk7XG5cbiAgY29uc3Qgc3RhcnRDb2wgPSBBcnJheS5mcm9tKHN0YXJ0LnBhcmVudEVsZW1lbnQhLmNoaWxkcmVuKS5pbmRleE9mKHN0YXJ0KTtcbiAgY29uc3QgZW5kQ29sID0gQXJyYXkuZnJvbShlbmQucGFyZW50RWxlbWVudCEuY2hpbGRyZW4pLmluZGV4T2YoZW5kKTtcblxuICBjb25zdCBtaW5Db2wgPSBNYXRoLm1pbihzdGFydENvbCwgZW5kQ29sKTtcbiAgY29uc3QgbWF4Q29sID0gTWF0aC5tYXgoc3RhcnRDb2wsIGVuZENvbCk7XG5cbiAgZm9yIChsZXQgciA9IG1pblJvdzsgciA8PSBtYXhSb3c7IHIrKykge1xuICAgIGNvbnN0IHJvdyA9IHJvd3Nbcl07XG4gICAgY29uc3QgY2VsbHMgPSBBcnJheS5mcm9tKHJvdy5jaGlsZHJlbik7XG4gICAgZm9yIChsZXQgYyA9IG1pbkNvbDsgYyA8PSBtYXhDb2w7IGMrKykge1xuICAgICAgKGNlbGxzW2NdIGFzIEhUTUxFbGVtZW50KS5jbGFzc0xpc3QuYWRkKCdzZWxlY3RlZC1jZWxsJyk7XG4gICAgfVxuICB9XG59O1xuXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4vLyBFbmFibGUgc2VsZWN0aW9uIHRyw6puIHRhYmxlXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5leHBvcnQgZnVuY3Rpb24gZW5hYmxlVGFibGVTZWxlY3Rpb24oY29udGFpbmVyOiBIVE1MRWxlbWVudCwgcXVpbGw6IGFueSkge1xuICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJywgKGUpID0+IHtcbiAgICBjb25zdCB0YXJnZXQgPSBlLnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICBpZiAoKHRhcmdldC50YWdOYW1lID09PSAnVEQnICYmIGUuYnV0dG9uICE9PSAyKSB8fCAoZS5idXR0b24gPT09IDIgJiYgIXRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJ3NlbGVjdGVkLWNlbGwnKSkpIHtcbiAgICAgIGNsZWFyU2VsZWN0aW9uKCk7XG4gICAgICBpc1NlbGVjdGluZyA9IHRydWU7XG4gICAgICBzdGFydENlbGwgPSB0YXJnZXQ7XG4gICAgICBlbmRDZWxsID0gdGFyZ2V0O1xuICAgICAgc2VsZWN0UmFuZ2VDZWxscyhzdGFydENlbGwsIGVuZENlbGwpO1xuICAgIH1cbiAgfSk7XG5cbiAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsIChlKSA9PiB7XG4gICAgaWYgKCFpc1NlbGVjdGluZykgcmV0dXJuO1xuICAgIGNvbnN0IHRhcmdldCA9IGUudGFyZ2V0IGFzIEhUTUxFbGVtZW50O1xuICAgIGlmICh0YXJnZXQudGFnTmFtZSA9PT0gJ1REJyAmJiBzdGFydENlbGwpIHtcbiAgICAgIGVuZENlbGwgPSB0YXJnZXQ7XG4gICAgICBzZWxlY3RSYW5nZUNlbGxzKHN0YXJ0Q2VsbCwgZW5kQ2VsbCk7XG4gICAgfVxuICB9KTtcblxuICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsICgpID0+IHtcbiAgICBpc1NlbGVjdGluZyA9IGZhbHNlO1xuICB9KTtcbn1cbmNvbnN0IG9uT3V0c2lkZSA9IChldjogTW91c2VFdmVudCkgPT4ge1xuICBjb25zdCB0YXJnZXQgPSBldi50YXJnZXQgYXMgSFRNTEVsZW1lbnQ7XG4gIGNvbnNvbGUubG9nKHRhcmdldC50YWdOYW1lKTtcbiAgaWYgKHRhcmdldC50YWdOYW1lICE9PSAnVEQnICYmIHRhcmdldC50YWdOYW1lICE9PSAnVFInICYmIHRhcmdldC50YWdOYW1lICE9PSAnVEJPRFknICYmIHRhcmdldC50YWdOYW1lICE9PSAnVEhFQUQnICYmIHRhcmdldC50YWdOYW1lICE9PSAnVEFCTEUnKSB7XG4gICAgaXNTZWxlY3RpbmcgPSBmYWxzZTtcbiAgICBzdGFydENlbGwgPSBudWxsO1xuICAgIGVuZENlbGwgPSBudWxsO1xuICAgIGNsZWFyU2VsZWN0aW9uKCk7XG4gIH1cbn07XG5kb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIG9uT3V0c2lkZSwgdHJ1ZSk7XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIE1lcmdlIGNlbGxzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5leHBvcnQgY29uc3QgbWVyZ2VDZWxscyA9IChzdGFydENlbGw6IEhUTUxFbGVtZW50LCBlbmRDZWxsOiBIVE1MRWxlbWVudCkgPT4ge1xuICBjb25zdCBzdGFydENlbGxJbmRleCA9IHN0YXJ0Q2VsbC5nZXRBdHRyaWJ1dGUoJ2luZGV4Jyk7XG4gIGNvbnN0IGVuZENlbGxJbmRleCA9IGVuZENlbGwuZ2V0QXR0cmlidXRlKCdpbmRleCcpO1xuICBjb25zdCBzdGFydENlbGxSb3cgPSBwYXJzZUludChzdGFydENlbGxJbmRleD8uc3BsaXQoJy0nKVswXSB8fCAnMCcsIDEwKTtcbiAgY29uc3QgZW5kQ2VsbFJvdyA9IHBhcnNlSW50KGVuZENlbGxJbmRleD8uc3BsaXQoJy0nKVswXSB8fCAnMCcsIDEwKTtcbiAgY29uc3Qgc3RhcnRDZWxsQ29sID0gcGFyc2VJbnQoc3RhcnRDZWxsSW5kZXg/LnNwbGl0KCctJylbMV0gfHwgJzAnLCAxMCk7XG4gIGNvbnN0IGVuZENlbGxDb2wgPSBwYXJzZUludChlbmRDZWxsSW5kZXg/LnNwbGl0KCctJylbMV0gfHwgJzAnLCAxMCk7XG4gIGNvbnN0IG1pblJvdyA9IE1hdGgubWluKHN0YXJ0Q2VsbFJvdywgZW5kQ2VsbFJvdyk7XG4gIGNvbnN0IG1heFJvdyA9IE1hdGgubWF4KHN0YXJ0Q2VsbFJvdywgZW5kQ2VsbFJvdyk7XG4gIGNvbnN0IG1pbkNvbCA9IE1hdGgubWluKHN0YXJ0Q2VsbENvbCwgZW5kQ2VsbENvbCk7XG4gIGNvbnN0IG1heENvbCA9IE1hdGgubWF4KHN0YXJ0Q2VsbENvbCwgZW5kQ2VsbENvbCk7XG5cbiAgY29uc3Qgcm93cyA9IHN0YXJ0Q2VsbC5jbG9zZXN0KCd0YWJsZScpPy5xdWVyeVNlbGVjdG9yQWxsKCd0cicpO1xuICByb3dzPy5mb3JFYWNoKChyb3dFbCwgcm93SW5kZXgpID0+IHtcbiAgICBpZiAocm93SW5kZXggPCBtaW5Sb3cgfHwgcm93SW5kZXggPiBtYXhSb3cpIHJldHVybjtcblxuICAgIGNvbnN0IGNlbGxzID0gcm93RWwucXVlcnlTZWxlY3RvckFsbCgndGQsIHRoJyk7XG4gICAgY2VsbHMuZm9yRWFjaCgoY2VsbEVsLCBjb2xJbmRleCkgPT4ge1xuICAgICAgaWYgKGNvbEluZGV4IDwgbWluQ29sIHx8IGNvbEluZGV4ID4gbWF4Q29sKSByZXR1cm47XG4gICAgICBpZiAocm93SW5kZXggPT09IG1pblJvdyAmJiBjb2xJbmRleCA9PT0gbWluQ29sKSB7XG4gICAgICAgIGNlbGxFbC5zZXRBdHRyaWJ1dGUoJ2NvbHNwYW4nLCBTdHJpbmcobWF4Q29sIC0gbWluQ29sICsgMSkpO1xuICAgICAgICBjZWxsRWwuc2V0QXR0cmlidXRlKCdyb3dzcGFuJywgU3RyaW5nKG1heFJvdyAtIG1pblJvdyArIDEpKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2VsbEVsLmNsYXNzTGlzdC5hZGQoJ2hpZGRlbicpO1xuICAgIH0pO1xuICB9KTtcbn07XG5cbi8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbi8vIFNwbGl0IGNlbGxzXG4vLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5leHBvcnQgZnVuY3Rpb24gc3BsaXRDZWxscyhjZWxsU3BsaXQ6IEhUTUxFbGVtZW50KSB7XG4gIGNvbnN0IGluZGV4ID0gY2VsbFNwbGl0LmdldEF0dHJpYnV0ZSgnaW5kZXgnKTtcbiAgbGV0IGNvbFNwYW4gPSBwYXJzZUludChjZWxsU3BsaXQuZ2V0QXR0cmlidXRlKCdjb2xzcGFuJykgfHwgJzEnLCAxMCk7XG4gIGxldCByb3dTcGFuID0gcGFyc2VJbnQoY2VsbFNwbGl0LmdldEF0dHJpYnV0ZSgncm93c3BhbicpIHx8ICcxJywgMTApO1xuICBjb25zdCB0b3RhbENlbGxTcGxpdCA9IHJvd1NwYW4gKiBjb2xTcGFuO1xuICBsZXQgY291bnRDZWxsU3BsaXQgPSAwO1xuICBjb25zdCByb3dTdGFydCA9IHBhcnNlSW50KGluZGV4Py5zcGxpdCgnLScpWzBdIHx8ICcwJywgMTApO1xuICBjb25zdCBjb2xTdGFydCA9IHBhcnNlSW50KGluZGV4Py5zcGxpdCgnLScpWzFdIHx8ICcwJywgMTApO1xuICBjb25zdCBjb2xJbmNyZW1lbnQgPSBuZXcgU2V0PG51bWJlcj4oKTtcbiAgY29uc3Qgcm93SW5jcmVtZW50ID0gbmV3IFNldDxudW1iZXI+KCk7XG5cbiAgY29uc3Qgcm93cyA9IGNlbGxTcGxpdC5jbG9zZXN0KCd0YWJsZScpPy5xdWVyeVNlbGVjdG9yQWxsKCd0cicpO1xuICByb3dzPy5mb3JFYWNoKChyb3dFbCwgcm93SW5kZXgpID0+IHtcbiAgICBpZiAocm93SW5kZXggPCByb3dTdGFydCkgcmV0dXJuO1xuXG4gICAgY29uc3QgY2VsbHMgPSByb3dFbC5xdWVyeVNlbGVjdG9yQWxsKCd0ZCwgdGgnKTtcbiAgICBjZWxscy5mb3JFYWNoKChjZWxsRWwsIGNvbEluZGV4KSA9PiB7XG4gICAgICBpZiAocm93SW5kZXggPCByb3dTdGFydCB8fCBjb2xJbmRleCA8IGNvbFN0YXJ0IHx8IHJvd1N0YXJ0ICsgcm93U3BhbiA8IHJvd0luZGV4IHx8IGNvbFN0YXJ0ICsgY29sU3BhbiA8IGNvbEluZGV4IHx8IGNvdW50Q2VsbFNwbGl0ID49IHRvdGFsQ2VsbFNwbGl0KSByZXR1cm47XG4gICAgICBpZiAocm93SW5kZXggPT09IHJvd1N0YXJ0ICYmIGNvbEluZGV4ID09PSBjb2xTdGFydCkge1xuICAgICAgICBjb3VudENlbGxTcGxpdCsrO1xuICAgICAgICBjZWxsRWwuc2V0QXR0cmlidXRlKCdjb2xzcGFuJywgJzEnKTtcbiAgICAgICAgY2VsbEVsLnNldEF0dHJpYnV0ZSgncm93c3BhbicsICcxJyk7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGlmICghY2VsbEVsLmNsYXNzTGlzdC5jb250YWlucygnaGlkZGVuJykpIHtcbiAgICAgICAgaWYgKCFyb3dJbmNyZW1lbnQuaGFzKHJvd0luZGV4KSkge1xuICAgICAgICAgIHJvd1NwYW4rKztcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWNvbEluY3JlbWVudC5oYXMoY29sSW5kZXgpKSB7XG4gICAgICAgICAgY29sU3BhbisrO1xuICAgICAgICB9XG4gICAgICAgIHJvd0luY3JlbWVudC5hZGQocm93SW5kZXgpO1xuICAgICAgICBjb2xJbmNyZW1lbnQuYWRkKGNvbEluZGV4KTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgY2VsbEVsLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpO1xuICAgICAgY291bnRDZWxsU3BsaXQrKztcbiAgICB9KTtcbiAgfSk7XG59XG4vLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxubGV0IHJlZ2lzdGVyID0gZmFsc2U7XG5leHBvcnQgY29uc3QgcmVnaXN0ZXJRdWlsbDJ4ID0gKCkgPT4ge1xuICBpZiAocmVnaXN0ZXIpIHJldHVybjtcbiAgcmVnaXN0ZXIgPSB0cnVlO1xuXG4gIGNvbnN0IFF1aWxsID0gUXVpbGwyeCBhcyBhbnk7XG5cbiAgY29uc3Qgc2l6ZSA9IFF1aWxsLmltcG9ydCgnYXR0cmlidXRvcnMvc3R5bGUvc2l6ZScpO1xuICBjb25zdCBhbGlnblN0eWxlID0gUXVpbGwuaW1wb3J0KCdhdHRyaWJ1dG9ycy9zdHlsZS9hbGlnbicpO1xuICBjb25zdCBpdGFsaWMgPSBRdWlsbC5pbXBvcnQoJ2Zvcm1hdHMvaXRhbGljJyk7XG4gIGNvbnN0IGJvbGQgPSBRdWlsbC5pbXBvcnQoJ2Zvcm1hdHMvYm9sZCcpO1xuICBjb25zdCBpY29ucyA9IFF1aWxsLmltcG9ydCgndWkvaWNvbnMnKTtcbiAgc2l6ZS53aGl0ZWxpc3QgPSBmb250U2l6ZVdoaXRlTGlzdCgpO1xuXG4gIGl0YWxpYy50YWdOYW1lID0gJ2knO1xuICBib2xkLnRhZ05hbWUgPSAnYic7XG5cbiAgUXVpbGwucmVnaXN0ZXIoYm9sZCwgdHJ1ZSk7XG4gIFF1aWxsLnJlZ2lzdGVyKGl0YWxpYywgdHJ1ZSk7XG4gIFF1aWxsLnJlZ2lzdGVyKHNpemUsIHRydWUpO1xuICBRdWlsbC5yZWdpc3RlcihhbGlnblN0eWxlLCB0cnVlKTtcbiAgUXVpbGwucmVnaXN0ZXIoUXVpbGxNZW50aW9uQmxvdCwgdHJ1ZSk7XG4gIFF1aWxsLnJlZ2lzdGVyKCdtb2R1bGVzL3Jlc2l6ZScsIFJlc2l6ZU1vZHVsZSk7XG5cbiAgWy4uLmljb25MaXN0KCldLmZvckVhY2goKGVsZW1lbnQpID0+IHNldChpY29ucywgZWxlbWVudC5rZXksIGA8c3BhbiBjbGFzcz1cIiR7ZWxlbWVudC5pY29ufSAke2VsZW1lbnQua2V5ID09PSAndW5MaW5rJyA/ICdob3Zlcjp0ZXh0LVsjZWUyZDQxXSAnIDogJ2hvdmVyOnRleHQtW3ZhcigtLWxpYnMtdWktY29sb3ItbGlnaHQtMSldJ30gdGV4dC1bMTZweF0gdGV4dC1bIzZhNzM4M11cIj48L3NwYW4+YCkpO1xufTtcblxuZXhwb3J0IGNvbnN0IGdldEFsbFRhYmxlc1dpdGhTcGFuID0gKHF1aWxsOiBhbnkpID0+IHtcbiAgY29uc3Qgcm9vdCA9IHF1aWxsLnJvb3Q7XG5cbiAgLy8gVMOsbSB04bqldCBj4bqjIHRhYmxlIHRyb25nIHF1aWxsXG4gIGNvbnN0IHRhYmxlRWxzID0gcm9vdC5xdWVyeVNlbGVjdG9yQWxsKCd0YWJsZScpO1xuXG4gIHRhYmxlRWxzLmZvckVhY2goKHRhYmxlRWw6IEhUTUxFbGVtZW50KSA9PiB7XG4gICAgY29uc3Qgcm93cyA9IHRhYmxlRWwucXVlcnlTZWxlY3RvckFsbCgndHInKTtcbiAgICByb3dzLmZvckVhY2goKHJvd0VsLCBySW5kZXgpID0+IHtcbiAgICAgIHJvd0VsLnNldEF0dHJpYnV0ZSgnaW5kZXgnLCBgJHtySW5kZXh9YCk7XG4gICAgICBjb25zdCBjZWxscyA9IHJvd0VsLnF1ZXJ5U2VsZWN0b3JBbGwoJ3RkLCB0aCcpO1xuICAgICAgY2VsbHMuZm9yRWFjaCgoY2VsbEVsLCBjSW5kZXgpID0+IHtcbiAgICAgICAgY2VsbEVsLnNldEF0dHJpYnV0ZSgnaW5kZXgnLCBgJHtySW5kZXh9LSR7Y0luZGV4fWApO1xuICAgICAgICBjb25zdCByb3dzcGFuID0gcGFyc2VJbnQoY2VsbEVsLmdldEF0dHJpYnV0ZSgncm93c3BhbicpIHx8ICcxJywgMTApO1xuICAgICAgICBjb25zdCBjb2xzcGFuID0gcGFyc2VJbnQoY2VsbEVsLmdldEF0dHJpYnV0ZSgnY29sc3BhbicpIHx8ICcxJywgMTApO1xuXG4gICAgICAgIGNlbGxFbC5zZXRBdHRyaWJ1dGUoJ3Jvd3NwYW4nLCBTdHJpbmcocm93c3BhbikpO1xuICAgICAgICBjZWxsRWwuc2V0QXR0cmlidXRlKCdjb2xzcGFuJywgU3RyaW5nKGNvbHNwYW4pKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICB9KTtcbn07XG4iXX0=