@gipisistemas/ng-core 1.1.1 → 1.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,14 +1,15 @@
1
1
  import { __decorate, __metadata, __read, __spread } from "tslib";
2
2
  import { animate, state, style, transition, trigger } from '@angular/animations';
3
- import { Component, ContentChild, EventEmitter, Input, Output, TemplateRef, ViewChild } from '@angular/core';
3
+ import { AfterViewInit, Component, ContentChild, EventEmitter, Input, NgZone, OnChanges, OnInit, Output, SimpleChanges, TemplateRef, ViewChild } from '@angular/core';
4
4
  import { MatPaginator, MatSort, MatTableDataSource } from '@angular/material';
5
5
  import { of } from 'rxjs';
6
6
  import { delay } from 'rxjs/operators';
7
7
  import { ArrayUtil, ObjectUtil, StringUtil } from '../../../core';
8
8
  import { TableGroupHeaderDTO } from '../../../core/models/dto/table-group-header.dto';
9
9
  var TableComponent = /** @class */ (function () {
10
- function TableComponent() {
11
- this._expandedElements = [];
10
+ function TableComponent(_ngZone) {
11
+ this._ngZone = _ngZone;
12
+ this._expandedRows = [];
12
13
  this._scrollHeightCalc = 410;
13
14
  this._isPopoverHover = null;
14
15
  this._displayedColumns = [];
@@ -34,10 +35,11 @@ var TableComponent = /** @class */ (function () {
34
35
  this.showColumnExpandableFixed = false;
35
36
  this.expandableOneRow = false;
36
37
  this.ignoreChildrenExpandRow = false;
38
+ this.sort = true;
37
39
  this.clearSort = false;
38
40
  this.sortActive = '';
39
41
  this.sortDirection = 'asc';
40
- this.rowExpandedChange = new EventEmitter(true);
42
+ this.rowExpanded = new EventEmitter();
41
43
  this.dataChange = new EventEmitter(true);
42
44
  this.page = new EventEmitter();
43
45
  this.rowHover = new EventEmitter();
@@ -112,7 +114,6 @@ var TableComponent = /** @class */ (function () {
112
114
  });
113
115
  };
114
116
  TableComponent.prototype._createDataSource = function () {
115
- var _this = this;
116
117
  var columns = this.columns.filter(function (c) { return c.visible; }).map(function (c) { return c.property; });
117
118
  if (!ObjectUtil.isNull(this.expandedRef)) {
118
119
  columns = __spread(['expandedColumn'], columns);
@@ -158,9 +159,9 @@ var TableComponent = /** @class */ (function () {
158
159
  if (this.paginator && !this.backendPagination) {
159
160
  this._dataSource.paginator = this.matFrontendPaginator;
160
161
  }
161
- if (!this.groupStartExpanded && (this.groupHeaderRef || (this.expandable && this.expandedRef)) && !ArrayUtil.isEmpty(this._dataSource.data)) {
162
- this._dataSource.data.forEach(function (row) { return _this.addCollapse(row); });
163
- }
162
+ // if (!this.groupStartExpanded && (this.groupHeaderRef || (this.expandable && this.expandedRef)) && !ArrayUtil.isEmpty(this._dataSource.data)) {
163
+ // this._dataSource.data.forEach(row => this.addCollapse(row));
164
+ // }
164
165
  };
165
166
  TableComponent.prototype.calcScrollHeight = function () {
166
167
  if ((this._dataSource && (this._dataSource.data.length > 0)) && (Math.floor(this._scrollHeightCalc) <= 700)) {
@@ -172,26 +173,24 @@ var TableComponent = /** @class */ (function () {
172
173
  pageEvent.paginatorPageSizeOptions = ArrayUtil.isEmpty(pageEvent.paginatorPageSizeOptions) ? this.paginatorPageSizeOptions : pageEvent.paginatorPageSizeOptions;
173
174
  this.page.emit(pageEvent);
174
175
  };
175
- TableComponent.prototype.isExpansed = function (element) {
176
- return this._expandedElements.filter(function (e) { return ObjectUtil.equals(e, element); }).length > 0;
177
- };
178
- TableComponent.prototype.removeCollapse = function (element) {
179
- var _this = this;
180
- if (this.expandableOneRow) {
181
- this._dataSource.data.forEach(function (row) { return _this.addCollapse(row); });
176
+ TableComponent.prototype.isExpandedRow = function (row) {
177
+ if (ArrayUtil.isEmpty(this._expandedRows)) {
178
+ return of(false);
182
179
  }
183
- var expandedElementsAux = ArrayUtil.clone(this._expandedElements);
184
- expandedElementsAux.splice(this._expandedElements.indexOf(element), 1);
185
- this._expandedElements = ArrayUtil.clone(expandedElementsAux);
180
+ var index = this._expandedRows.findIndex(function (r) { return r === row; });
181
+ return of(index >= 0);
186
182
  };
187
- TableComponent.prototype.addCollapse = function (element) {
188
- var collapsedElement = this._expandedElements.filter(function (e) { return ObjectUtil.equals(e, element); }).length > 0;
189
- if (!collapsedElement) {
190
- this._expandedElements.push(element);
183
+ TableComponent.prototype.toggleExpandRow = function (row) {
184
+ var index = this._expandedRows.findIndex(function (r) { return r === row; });
185
+ if (ArrayUtil.isEmpty(this._expandedRows) || (index < 0)) {
186
+ this._expandedRows = [row];
187
+ this.rowExpanded.emit(row);
188
+ return;
191
189
  }
192
- };
193
- TableComponent.prototype.rowExpandedChangeEmit = function (element) {
194
- this.rowExpandedChange.emit(element);
190
+ var _expandedRowsAux = ArrayUtil.clone(this._expandedRows);
191
+ _expandedRowsAux.splice(index, 1);
192
+ this._expandedRows = ArrayUtil.clone(_expandedRowsAux);
193
+ this.rowExpanded.emit(null);
195
194
  };
196
195
  TableComponent.prototype.sortData = function (sort) {
197
196
  if (this.infiniteScroll) {
@@ -210,45 +209,99 @@ var TableComponent = /** @class */ (function () {
210
209
  });
211
210
  };
212
211
  TableComponent.prototype.showPopover = function (event, data) {
212
+ var _this = this;
213
213
  var popover = document.getElementById('table-popover');
214
214
  if (!ObjectUtil.isNull(popover)) {
215
215
  popover.style.visibility = 'hidden';
216
216
  if (!this.loading) {
217
- var domRectPopover = popover.getBoundingClientRect();
218
- var domRectRow = event.currentTarget.getBoundingClientRect();
219
- var cells = event.currentTarget.children;
217
+ this._ngZone.runOutsideAngular(function () {
218
+ var domRectPopover = popover.getBoundingClientRect();
219
+ var domRectRow = event.currentTarget.getBoundingClientRect();
220
+ var cells = event.currentTarget.children;
221
+ if (domRectPopover && domRectRow) {
222
+ popover.style.visibility = 'visible';
223
+ popover.style.top = (domRectRow.top + domRectRow.height) - 1 + "px";
224
+ var startPosition_1 = 0;
225
+ var endPosition_1 = 0;
226
+ if (_this.columnInitial && (_this.columnInitial >= 0)) {
227
+ if (!cells[_this.columnInitial]) {
228
+ throw new Error('Initial column undefined or null');
229
+ }
230
+ startPosition_1 = cells[_this.columnInitial].getBoundingClientRect().left;
231
+ }
232
+ else {
233
+ startPosition_1 = domRectRow.left;
234
+ }
235
+ if (_this.columnFinal && (_this.columnFinal >= 0)) {
236
+ if (!cells[_this.columnFinal]) {
237
+ throw new Error('Final column undefined or null');
238
+ }
239
+ endPosition_1 = cells[_this.columnFinal].getBoundingClientRect().left - domRectPopover.width;
240
+ }
241
+ else {
242
+ endPosition_1 = domRectRow.right - domRectPopover.width;
243
+ }
244
+ _this._ngZone.run(function () {
245
+ if (event.clientX > startPosition_1 + 15 && event.clientX < endPosition_1) {
246
+ popover.style.left = event.clientX - 15 + "px";
247
+ }
248
+ else if (event.clientX <= startPosition_1) {
249
+ popover.style.left = startPosition_1 + "px";
250
+ }
251
+ else if (event.clientX >= endPosition_1) {
252
+ popover.style.left = endPosition_1 + "px";
253
+ }
254
+ });
255
+ }
256
+ });
257
+ }
258
+ }
259
+ this.rowHover.emit(data);
260
+ this._contextPopover = data;
261
+ };
262
+ /**
263
+ showPopover(event: MouseEvent, data: any): void {
264
+ const popover: HTMLElement = document.getElementById('table-popover');
265
+ if (!ObjectUtil.isNull(popover)) {
266
+ popover.style.visibility = 'hidden';
267
+
268
+ if (!this.loading) {
269
+ const domRectPopover = popover.getBoundingClientRect();
270
+ const domRectRow = (event.currentTarget as HTMLElement).getBoundingClientRect();
271
+ const cells = (event.currentTarget as HTMLTableRowElement).children;
272
+
220
273
  if (domRectPopover && domRectRow) {
221
274
  popover.style.visibility = 'visible';
222
- popover.style.top = (domRectRow.top + domRectRow.height) - 1 + "px";
223
- var startPosition_1 = 0;
224
- var endPosition_1 = 0;
275
+ popover.style.top = `${(domRectRow.top + domRectRow.height) - 1}px`;
276
+
277
+ let startPosition: number = 0;
278
+ let endPosition: number = 0;
279
+
225
280
  if (this.columnInitial && (this.columnInitial >= 0)) {
226
281
  if (!cells[this.columnInitial]) {
227
282
  throw new Error('Initial column undefined or null');
228
283
  }
229
- startPosition_1 = cells[this.columnInitial].getBoundingClientRect().left;
230
- }
231
- else {
232
- startPosition_1 = domRectRow.left;
284
+ startPosition = cells[this.columnInitial].getBoundingClientRect().left;
285
+ } else {
286
+ startPosition = domRectRow.left;
233
287
  }
288
+
234
289
  if (this.columnFinal && (this.columnFinal >= 0)) {
235
290
  if (!cells[this.columnFinal]) {
236
291
  throw new Error('Final column undefined or null');
237
292
  }
238
- endPosition_1 = cells[this.columnFinal].getBoundingClientRect().left - domRectPopover.width;
239
- }
240
- else {
241
- endPosition_1 = domRectRow.right - domRectPopover.width;
293
+ endPosition = cells[this.columnFinal].getBoundingClientRect().left - domRectPopover.width;
294
+ } else {
295
+ endPosition = domRectRow.right - domRectPopover.width;
242
296
  }
243
- setTimeout(function () {
244
- if (event.clientX > startPosition_1 + 15 && event.clientX < endPosition_1) {
245
- popover.style.left = event.clientX - 15 + "px";
246
- }
247
- else if (event.clientX <= startPosition_1) {
248
- popover.style.left = startPosition_1 + "px";
249
- }
250
- else if (event.clientX >= endPosition_1) {
251
- popover.style.left = endPosition_1 + "px";
297
+
298
+ setTimeout(() => {
299
+ if (event.clientX > startPosition + 15 && event.clientX < endPosition) {
300
+ popover.style.left = `${event.clientX - 15}px`;
301
+ } else if (event.clientX <= startPosition) {
302
+ popover.style.left = `${startPosition}px`;
303
+ } else if (event.clientX >= endPosition) {
304
+ popover.style.left = `${endPosition}px`;
252
305
  }
253
306
  });
254
307
  }
@@ -256,7 +309,8 @@ var TableComponent = /** @class */ (function () {
256
309
  }
257
310
  this.rowHover.emit(data);
258
311
  this._contextPopover = data;
259
- };
312
+ }
313
+ */
260
314
  TableComponent.prototype.closePopover = function (time) {
261
315
  var _this = this;
262
316
  of(null).pipe(delay(time)).subscribe(function () {
@@ -324,6 +378,9 @@ var TableComponent = /** @class */ (function () {
324
378
  this.paginatorPageIndex += 1;
325
379
  }
326
380
  };
381
+ TableComponent.ctorParameters = function () { return [
382
+ { type: NgZone }
383
+ ]; };
327
384
  __decorate([
328
385
  ViewChild(MatSort, { static: true }),
329
386
  __metadata("design:type", MatSort)
@@ -489,6 +546,10 @@ var TableComponent = /** @class */ (function () {
489
546
  Input(),
490
547
  __metadata("design:type", Boolean)
491
548
  ], TableComponent.prototype, "ignoreChildrenExpandRow", void 0);
549
+ __decorate([
550
+ Input(),
551
+ __metadata("design:type", Boolean)
552
+ ], TableComponent.prototype, "sort", void 0);
492
553
  __decorate([
493
554
  Input(),
494
555
  __metadata("design:type", Boolean)
@@ -504,7 +565,7 @@ var TableComponent = /** @class */ (function () {
504
565
  __decorate([
505
566
  Output(),
506
567
  __metadata("design:type", EventEmitter)
507
- ], TableComponent.prototype, "rowExpandedChange", void 0);
568
+ ], TableComponent.prototype, "rowExpanded", void 0);
508
569
  __decorate([
509
570
  Output(),
510
571
  __metadata("design:type", EventEmitter)
@@ -520,7 +581,7 @@ var TableComponent = /** @class */ (function () {
520
581
  TableComponent = __decorate([
521
582
  Component({
522
583
  selector: 'itss-table',
523
- template: "<div [class.box-shadow]=\"shadow\"\n [style.height]=\"(matTableHeigth | async)\"\n style=\"background: transparent !important;\"\n fxLayout=\"column\"\n fxFlex>\n\n <itss-table-scrolled [more]=\"hasMore()\"\n [scrollOffset]=\"scrollOffset\"\n [scrollDelay]=\"scrollDelay\"\n (scrolled)=\"handleScroll($event)\"\n [ngStyle]=\"{'flex-basis': scrollHeigth ? scrollHeigth + 'px' : _scrollHeightCalc + 'px' }\"\n *ngIf=\"infiniteScroll; else table\">\n <ng-template *ngTemplateOutlet=\"table\"> </ng-template>\n </itss-table-scrolled>\n\n <ng-template #table>\n <mat-table matSort\n multiTemplateDataRows\n [dataSource]=\"_dataSource\"\n [matSortDisabled]=\"!clearSort\"\n [matSortDisableClear]=\"!clearSort\"\n [matSortActive]=\"sortActive\"\n [matSortDirection]=\"sortDirection?.toLocaleLowerCase()\"\n (matSortChange)=\"sortData($event)\"\n (mouseleave)=\"_isPopoverHover = false; closePopover(0)\">\n\n <ng-container *ngIf=\"expandedRef\"\n cdkColumnDef=\"expandedColumn\">\n <mat-header-cell fxFlex=\"5\"\n fxLayoutAlign=\"end center\"\n *cdkHeaderCellDef>\n </mat-header-cell>\n <mat-cell fxFlex=\"5\"\n fxLayoutAlign=\"end center\"\n *cdkCellDef=\"let row\">\n <itss-button [icon]=\"isExpansed(row) ? 'chevron_right' : 'expand_more'\"\n *ngIf=\"((row?.children) && (row.children.length > 0)) || (row?.expandable) || showColumnExpandableFixed\"\n color=\"primary\"\n type=\"icon\"\n tooltip=\"Expandir | Retrair\"\n (click)=\"(isExpansed(row) ? removeCollapse(row) : addCollapse(row)); rowExpandedChangeEmit(row)\">\n </itss-button>\n </mat-cell>\n </ng-container>\n\n <ng-container *ngFor=\"let column of columns\"\n [cdkColumnDef]=\"column.property\">\n <div *ngIf=\"column.sortable\">\n <mat-header-cell [fxFlex]=\"column.width | async\"\n [fxLayoutAlign]=\"column.align\"\n [ngStyle]=\"{'padding-left': column.sortable && column.align !== '' && (column.align.toLowerCase() === 'center' || column.align.toLowerCase() === 'center center') ? '15px' : '' }\"\n [style.padding-left.px]=\"column.marginLeft | async\"\n [style.padding-right.px]=\"column.marginRight | async\"\n *cdkHeaderCellDef\n mat-sort-header>\n {{ column.name }}\n </mat-header-cell>\n </div>\n <div *ngIf=\"!column.sortable\">\n <mat-header-cell [fxFlex]=\"column.width | async\"\n [fxHide.lt-md]=\"column.hiddenSm\"\n [fxLayoutAlign]=\"column.align\"\n [style.padding-left.px]=\"column.marginLeft | async\"\n [style.padding-right.px]=\"column.marginRight | async\"\n *cdkHeaderCellDef>\n <ng-container *ngIf=\"column.name; else templateHeader\">\n {{ column.name }}\n </ng-container>\n\n <ng-template #templateHeader>\n <ng-container *ngIf=\"column.templateHeader\">\n <ng-container [ngTemplateOutlet]=\"column.templateHeader\"\n [ngTemplateOutletContext]=\"{$implicit: data}\">\n </ng-container>\n </ng-container>\n </ng-template>\n </mat-header-cell>\n </div>\n <mat-cell [fxFlex]=\"column.width | async\"\n [fxHide.lt-md]=\"column.hiddenSm\"\n [fxHide]=\"!column.visible\"\n [fxLayoutAlign]=\"column.align\"\n [class.mat-cell-pointer]=\"column.action\"\n [style.padding-left.px]=\"column.marginLeft | async\"\n [style.padding-right.px]=\"column.marginRight | async\"\n (click)=\"column.action ? column.action(row) : null\"\n *cdkCellDef=\"let row\">\n <ng-container *ngIf=\"column.value; else template\">\n {{ (column.value(row) && (column.value(row).length > (column.sliceLength ? column.sliceLength :\n 50)))\n ? (column.value(row) | slice:0:(column.sliceLength ? column.sliceLength : 50)) + '...'\n : column.value(row) }}\n </ng-container>\n\n <ng-template #template>\n <ng-container *ngIf=\"column.template\">\n <ng-container [ngTemplateOutlet]=\"column.template\"\n [ngTemplateOutletContext]=\"{$implicit: row}\">\n </ng-container>\n </ng-container>\n </ng-template>\n </mat-cell>\n </ng-container>\n\n <ng-container *ngIf=\"actionsRef\"\n cdkColumnDef=\"actionsColumn\">\n <mat-header-cell fxFlex.gt-md=\"15\"\n fxLayoutAlign=\"center center\"\n *cdkHeaderCellDef>\n A\u00E7\u00F5es\n </mat-header-cell>\n <mat-cell fxFlex=\"15\"\n fxLayoutAlign=\"center center\"\n *cdkCellDef=\"let row\">\n <ng-template [ngTemplateOutlet]=\"actionsRef\"\n [ngTemplateOutletContext]=\"{$implicit: row}\">\n </ng-template>\n </mat-cell>\n </ng-container>\n\n <ng-container *ngIf=\"expandedRef\"\n matColumnDef=\"expandedDetail\">\n <mat-cell *matCellDef=\"let row\"\n fxFlexFill\n class=\"cell-element-detail\">\n <div class=\"element-detail\"\n *ngIf=\"!ignoreChildrenExpandRow ? (row.children.length > 0) : ignoreChildrenExpandRow\"\n [ngClass]=\"{'collapsed': isExpansed(row), 'expanded': !isExpansed(row)}\">\n <ng-template [ngTemplateOutlet]=\"expandedRef\"\n [ngTemplateOutletContext]=\"{$implicit: row}\">\n </ng-template>\n </div>\n </mat-cell>\n </ng-container>\n\n <ng-container *ngIf=\"groupByColumn && groupHeaderRef\"\n matColumnDef=\"groupHeader\">\n <mat-cell fxFlex\n [attr.colspan]=\"columns.length\"\n *matCellDef=\"let rowGroup\"\n style=\"cursor: pointer;\"\n [class.group-header-cell-expanded]=\"!isExpansed(rowGroup)\"\n [class.group-header-cell-collapsed]=\"isExpansed(rowGroup)\"\n (click)=\"isExpansed(rowGroup) ? removeCollapse(rowGroup) : addCollapse(rowGroup)\">\n <div class=\"group-header-cell\">\n <itss-button *ngIf=\"rowGroup.childrenGroup.length > 0\"\n [icon]=\"isExpansed(rowGroup) ? 'chevron_right' : 'expand_more'\"\n style.margin-right=\"1.25rem\"\n color=\"primary\"\n type=\"icon\"\n tooltip=\"Expandir | Retrair\"\n (click)=\"isExpansed(rowGroup) ? removeCollapse(rowGroup) : addCollapse(rowGroup)\">\n </itss-button>\n\n <ng-template [ngTemplateOutlet]=\"groupHeaderRef\"\n [ngTemplateOutletContext]=\"{$implicit: rowGroup}\">\n </ng-template>\n </div>\n </mat-cell>\n </ng-container>\n\n <ng-container *ngIf=\"groupByColumn && groupHeaderRef\"\n matColumnDef=\"expandedGroupHeader\">\n <mat-cell *matCellDef=\"let rowGroup\"\n fxFlexFill>\n <div class=\"element-detail\"\n *ngIf=\"rowGroup.childrenGroup.length > 0\"\n [ngClass]=\"{'collapsed': isExpansed(rowGroup), 'expanded': !isExpansed(rowGroup)}\">\n\n <itss-table *ngIf=\"rowGroup.childrenGroup.length > 0; else noChildrenGroup\"\n [paginator]=\"false\"\n [shadow]=\"false\"\n [showHeader]=\"false\"\n [columns]=\"columns\"\n [data]=\"rowGroup.childrenGroup\"\n class=\"table-level-1\"\n fxFlexFill>\n <ng-template #footer\n *ngIf=\"groupByColumn && groupHeaderRef && groupFooterRef\">\n <ng-template [ngTemplateOutlet]=\"groupFooterRef\"\n [ngTemplateOutletContext]=\"{$implicit: rowGroup}\">\n </ng-template>\n </ng-template>\n </itss-table>\n\n <ng-template #noChildrenGroup>\n <div *ngIf=\"!loading\"\n class=\"no-records\">\n <mat-icon>sentiment_very_dissatisfied</mat-icon>\n <span>Nenhum registro foi encontrado</span>\n </div>\n </ng-template>\n </div>\n </mat-cell>\n </ng-container>\n\n <mat-header-row #matHeaderRow\n (mouseenter)=\"_isPopoverHover = false; closePopover(0)\"\n *matHeaderRowDef=\"_displayedColumns; sticky: headerSticky || groupHeaderSticky\"\n [ngClass]=\"{ 'hidden-header': !showHeader }\">\n </mat-header-row>\n\n <div *ngIf=\"!loading && !expandable && !actionsPopoverRef && !groupByColumn && !groupHeaderRef\">\n <mat-row (mouseover)=\"rowHover.emit(row)\"\n *matRowDef=\"let row; columns: _displayedColumns;\"\n [ngClass]=\"{ 'hoversimulator': row.isMouseHover === true }\"\n [class.highlight]=\"getHighlightRow(row)\"\n [attr.id]=\"'row_'+ getIndexRow(row)\">\n </mat-row>\n </div>\n\n <div *ngIf=\"!loading && !expandable && actionsPopoverRef && !groupByColumn && !groupHeaderRef\">\n <mat-row #rowTemplate\n *matRowDef=\"let row; columns: _displayedColumns;\"\n class=\"element-row\"\n (mousemove)=\"showPopover($event, row)\"\n [class.hoversimulator]=\"_contextPopover === row\"\n [class.highlight]=\"getHighlightRow(row)\"\n [attr.id]=\"'row_'+ getIndexRow(row)\">\n </mat-row>\n </div>\n\n <div *ngIf=\"!loading && expandable && !actionsPopoverRef && !groupByColumn && !groupHeaderRef\">\n <mat-row *matRowDef=\"let row; columns: _displayedColumns;\"\n class=\"element-row\"\n (mouseover)=\"rowHover.emit(row)\"\n [class.expanded-row]=\"_expandedElement === row\"\n [ngClass]=\"{ 'hoversimulator': row.isMouseHover === true }\"\n [class.highlight]=\"getHighlightRow(row)\"\n [attr.id]=\"'row_'+ getIndexRow(row)\">\n </mat-row>\n\n <mat-row *matRowDef=\"let row; columns: ['expandedDetail'];\"\n class=\"detail-row\"\n [attr.id]=\"'row_expand'+ getIndexRow(row)\">\n </mat-row>\n </div>\n\n <div *ngIf=\"!loading && expandable && actionsPopoverRef && !groupByColumn && !groupHeaderRef\">\n <mat-row #rowTemplate\n *matRowDef=\"let row; columns: _displayedColumns;\"\n class=\"element-row\"\n (mousemove)=\"showPopover($event, row)\"\n [class.hoversimulator]=\"_contextPopover === row\"\n [class.expanded-row]=\"_expandedElement === row\"\n [class.highlight]=\"getHighlightRow(row)\"\n [attr.id]=\"'row_'+ getIndexRow(row)\">\n </mat-row>\n\n <mat-row *matRowDef=\"let row; columns: ['expandedDetail'];\"\n class=\"detail-row\"\n [attr.id]=\"'row_expand'+ getIndexRow(row)\">\n </mat-row>\n </div>\n\n <div *ngIf=\"!loading && !expandable && !actionsPopoverRef && groupByColumn && groupHeaderRef\">\n <mat-row *matRowDef=\"let row; columns: ['groupHeader'];\"\n class=\"element-row\"\n (mouseover)=\"rowHover.emit(row)\"\n [class.expanded-row]=\"_expandedElement === row\"\n [class.group-header-sticky]=\"groupHeaderSticky\"\n [ngClass]=\"{ 'hoversimulator': row.isMouseHover === true }\"\n [class.highlight]=\"getHighlightRow(row)\"\n [attr.id]=\"'row_'+ getIndexRow(row)\">\n </mat-row>\n\n <mat-row *matRowDef=\"let row; columns: ['expandedGroupHeader'];\"\n class=\"detail-row\"\n [attr.id]=\"'row_group'+ getIndexRow(row)\">\n </mat-row>\n </div>\n </mat-table>\n\n <mat-progress-bar mode=\"indeterminate\"\n color=\"accent\"\n *ngIf=\"loading\">\n </mat-progress-bar>\n\n <div *ngIf=\"!loading && (data && (data.length > 0)) && footerRef\"\n class=\"footer-row\"\n fxLayout=\"column\"\n fxLayoutGap=\"10px\">\n <ng-template [ngTemplateOutlet]=\"footerRef\"\n [ngTemplateOutletContext]=\"{$implicit: data}\">\n </ng-template>\n </div>\n\n <div *ngIf=\"!loading && (data && (data.length <= 0))\"\n class=\"no-records\">\n <mat-icon>sentiment_very_dissatisfied</mat-icon>\n <span>Nenhum registro foi encontrado</span>\n </div>\n\n <ng-container *ngIf=\"!loading && paginator && (data && (data.length > 0))\">\n <ng-container #backendPaginatorTemplate\n *ngIf=\"backendPagination && !infiniteScroll\">\n <mat-paginator #backendPaginator\n [hidePageSize]=\"!showPageSizeOptions || (paginatorPageSizeOptions && (paginatorPageSizeOptions.length <= 0))\"\n [length]=\"paginatorLength\"\n [pageIndex]=\"paginatorPageIndex\"\n [pageSize]=\"paginatorPageSize\"\n [pageSizeOptions]=\"paginatorPageSizeOptions\"\n (page)=\"onPage($event)\"\n (mouseenter)=\"closePopover(0)\"\n showFirstLastButtons>\n </mat-paginator>\n </ng-container>\n\n <ng-container #frontendPaginatorTemplate\n *ngIf=\"!backendPagination && !infiniteScroll\">\n <mat-paginator #frontendPaginator\n [hidePageSize]=\"!showPageSizeOptions || (paginatorPageSizeOptions && (paginatorPageSizeOptions.length <= 0))\"\n [length]=\"paginatorLength\"\n [pageIndex]=\"paginatorPageIndex\"\n [pageSize]=\"paginatorPageSize\"\n [pageSizeOptions]=\"paginatorPageSizeOptions\"\n (page)=\"onPage($event)\"\n showFirstLastButtons>\n </mat-paginator>\n </ng-container>\n </ng-container>\n\n <ng-container #infiniteScrollPaginatorTemplate\n *ngIf=\"infiniteScroll && (data && (data.length > 0))\">\n <span class=\"infinite-scroll-paginator\">\n 1 - {{ data.length }} de {{ paginatorLength }}\n </span>\n </ng-container>\n </ng-template>\n</div>\n\n<div id=\"table-popover\"\n class=\"table-popover\"\n (mouseover)=\"_isPopoverHover = true\"\n (mouseout)=\"_isPopoverHover = false; closePopover(0)\"\n *ngIf=\"!loading && actionsPopoverRef\">\n <ng-container [ngTemplateOutlet]=\"actionsPopoverRef\"\n [ngTemplateOutletContext]=\"{ $implicit: _contextPopover }\">\n </ng-container>\n</div>",
584
+ template: "<div [class.box-shadow]=\"shadow\"\n [style.height]=\"(matTableHeigth | async)\"\n style=\"background: transparent !important;\"\n fxLayout=\"column\"\n fxFlex>\n\n <itss-table-scrolled [more]=\"hasMore()\"\n [scrollOffset]=\"scrollOffset\"\n [scrollDelay]=\"scrollDelay\"\n (scrolled)=\"handleScroll($event)\"\n [ngStyle]=\"{'flex-basis': scrollHeigth ? scrollHeigth + 'px' : _scrollHeightCalc + 'px' }\"\n *ngIf=\"infiniteScroll; else table\">\n <ng-template *ngTemplateOutlet=\"table\"> </ng-template>\n </itss-table-scrolled>\n\n <ng-template #table>\n <mat-table matSort\n multiTemplateDataRows\n [dataSource]=\"_dataSource\"\n [matSortDisabled]=\"!sort\"\n [matSortDisableClear]=\"!clearSort\"\n [matSortActive]=\"sortActive\"\n [matSortDirection]=\"sortDirection?.toLocaleLowerCase()\"\n (matSortChange)=\"sortData($event)\"\n (mouseleave)=\"_isPopoverHover = false; closePopover(0)\">\n\n <ng-container *ngIf=\"expandedRef\"\n cdkColumnDef=\"expandedColumn\">\n <mat-header-cell fxFlex=\"5\"\n fxLayoutAlign=\"end center\"\n *cdkHeaderCellDef>\n </mat-header-cell>\n <mat-cell fxFlex=\"5\"\n fxLayoutAlign=\"end center\"\n *cdkCellDef=\"let row\">\n <itss-button tooltip=\"Expandir | Retrair\"\n color=\"primary\"\n type=\"icon\"\n *ngIf=\"((row?.children) && (row.children.length > 0)) || (row?.expandable) || showColumnExpandableFixed\"\n [icon]=\"(isExpandedRow(row) | async) ? 'expand_more' : 'chevron_right'\"\n (click)=\"toggleExpandRow(row)\">\n </itss-button>\n </mat-cell>\n </ng-container>\n\n <ng-container *ngFor=\"let column of columns\"\n [cdkColumnDef]=\"column.property\">\n <div *ngIf=\"column.sortable\">\n <mat-header-cell [fxFlex]=\"column.width | async\"\n [fxLayoutAlign]=\"column.align\"\n [ngStyle]=\"{'padding-left': column.sortable && column.align !== '' && (column.align.toLowerCase() === 'center' || column.align.toLowerCase() === 'center center') ? '15px' : '' }\"\n [style.padding-left.px]=\"column.marginLeft | async\"\n [style.padding-right.px]=\"column.marginRight | async\"\n *cdkHeaderCellDef\n mat-sort-header>\n {{ column.name }}\n </mat-header-cell>\n </div>\n <div *ngIf=\"!column.sortable\">\n <mat-header-cell [fxFlex]=\"column.width | async\"\n [fxHide.lt-md]=\"column.hiddenSm\"\n [fxLayoutAlign]=\"column.align\"\n [style.padding-left.px]=\"column.marginLeft | async\"\n [style.padding-right.px]=\"column.marginRight | async\"\n *cdkHeaderCellDef>\n <ng-container *ngIf=\"column.name; else templateHeader\">\n {{ column.name }}\n </ng-container>\n\n <ng-template #templateHeader>\n <ng-container *ngIf=\"column.templateHeader\">\n <ng-container [ngTemplateOutlet]=\"column.templateHeader\"\n [ngTemplateOutletContext]=\"{$implicit: data}\">\n </ng-container>\n </ng-container>\n </ng-template>\n </mat-header-cell>\n </div>\n <mat-cell [fxFlex]=\"column.width | async\"\n [fxHide.lt-md]=\"column.hiddenSm\"\n [fxHide]=\"!column.visible\"\n [fxLayoutAlign]=\"column.align\"\n [class.mat-cell-pointer]=\"column.action\"\n [style.padding-left.px]=\"column.marginLeft | async\"\n [style.padding-right.px]=\"column.marginRight | async\"\n (click)=\"column.action ? column.action(row) : null\"\n *cdkCellDef=\"let row\">\n <ng-container *ngIf=\"column.value; else template\">\n {{ (column.value(row) && (column.value(row).length > (column.sliceLength ? column.sliceLength :\n 50)))\n ? (column.value(row) | slice:0:(column.sliceLength ? column.sliceLength : 50)) + '...'\n : column.value(row) }}\n </ng-container>\n\n <ng-template #template>\n <ng-container *ngIf=\"column.template\">\n <ng-container [ngTemplateOutlet]=\"column.template\"\n [ngTemplateOutletContext]=\"{$implicit: row}\">\n </ng-container>\n </ng-container>\n </ng-template>\n </mat-cell>\n </ng-container>\n\n <ng-container *ngIf=\"actionsRef\"\n cdkColumnDef=\"actionsColumn\">\n <mat-header-cell fxFlex.gt-md=\"15\"\n fxLayoutAlign=\"center center\"\n *cdkHeaderCellDef>\n A\u00E7\u00F5es\n </mat-header-cell>\n <mat-cell fxFlex=\"15\"\n fxLayoutAlign=\"center center\"\n *cdkCellDef=\"let row\">\n <ng-template [ngTemplateOutlet]=\"actionsRef\"\n [ngTemplateOutletContext]=\"{$implicit: row}\">\n </ng-template>\n </mat-cell>\n </ng-container>\n\n <ng-container *ngIf=\"expandedRef\"\n matColumnDef=\"expandedDetail\">\n <mat-cell *matCellDef=\"let row\"\n fxFlexFill\n class=\"cell-element-detail\">\n <div class=\"element-detail\"\n *ngIf=\"!ignoreChildrenExpandRow ? (row.children.length > 0) : ignoreChildrenExpandRow\"\n [class.collapsed]=\"!(isExpandedRow(row) | async)\"\n [class.expanded]=\"(isExpandedRow(row) | async)\">\n <ng-template [ngTemplateOutlet]=\"expandedRef\"\n [ngTemplateOutletContext]=\"{$implicit: row}\">\n </ng-template>\n </div>\n </mat-cell>\n </ng-container>\n\n <ng-container *ngIf=\"groupByColumn && groupHeaderRef\"\n matColumnDef=\"groupHeader\">\n <mat-cell fxFlex\n [attr.colspan]=\"columns.length\"\n *matCellDef=\"let rowGroup\"\n style=\"cursor: pointer;\"\n [class.group-header-cell-collapsed]=\"!(isExpandedRow(rowGroup) | async)\"\n [class.group-header-cell-expanded]=\"(isExpandedRow(rowGroup) | async)\"\n (click)=\"toggleExpandRow(rowGroup)\">\n <div class=\"group-header-cell\">\n <itss-button *ngIf=\"rowGroup.childrenGroup.length > 0\"\n [icon]=\"(isExpandedRow(rowGroup) | async) ? 'expand_more' : 'chevron_right'\"\n style.margin-right=\"1.25rem\"\n color=\"primary\"\n type=\"icon\"\n tooltip=\"Expandir | Retrair\">\n </itss-button>\n\n <ng-template [ngTemplateOutlet]=\"groupHeaderRef\"\n [ngTemplateOutletContext]=\"{$implicit: rowGroup}\">\n </ng-template>\n </div>\n </mat-cell>\n </ng-container>\n\n <ng-container *ngIf=\"groupByColumn && groupHeaderRef\"\n matColumnDef=\"expandedGroupHeader\">\n <mat-cell *matCellDef=\"let rowGroup\"\n fxFlexFill>\n <div class=\"element-detail\"\n *ngIf=\"rowGroup.childrenGroup.length > 0\"\n [class.collapsed]=\"!(isExpandedRow(rowGroup) | async)\"\n [class.expanded]=\"(isExpandedRow(rowGroup) | async)\">\n\n <itss-table *ngIf=\"rowGroup.childrenGroup.length > 0; else noChildrenGroup\"\n [paginator]=\"false\"\n [shadow]=\"false\"\n [showHeader]=\"false\"\n [columns]=\"columns\"\n [data]=\"rowGroup.childrenGroup\"\n class=\"table-level-1\"\n fxFlexFill>\n <ng-template #footer\n *ngIf=\"groupByColumn && groupHeaderRef && groupFooterRef\">\n <ng-template [ngTemplateOutlet]=\"groupFooterRef\"\n [ngTemplateOutletContext]=\"{$implicit: rowGroup}\">\n </ng-template>\n </ng-template>\n </itss-table>\n\n <ng-template #noChildrenGroup>\n <div *ngIf=\"!loading\"\n class=\"no-records\">\n <mat-icon>sentiment_very_dissatisfied</mat-icon>\n <span>Nenhum registro foi encontrado</span>\n </div>\n </ng-template>\n </div>\n </mat-cell>\n </ng-container>\n\n <mat-header-row #matHeaderRow\n (mouseenter)=\"_isPopoverHover = false; closePopover(0)\"\n *matHeaderRowDef=\"_displayedColumns; sticky: headerSticky || groupHeaderSticky\"\n [ngClass]=\"{ 'hidden-header': !showHeader }\">\n </mat-header-row>\n\n <div *ngIf=\"!loading && !expandable && !actionsPopoverRef && !groupByColumn && !groupHeaderRef\">\n <mat-row (mouseover)=\"rowHover.emit(row)\"\n *matRowDef=\"let row; columns: _displayedColumns;\"\n [ngClass]=\"{ 'hoversimulator': row.isMouseHover === true }\"\n [class.highlight]=\"getHighlightRow(row)\"\n [attr.id]=\"'row_'+ getIndexRow(row)\">\n </mat-row>\n </div>\n\n <div *ngIf=\"!loading && !expandable && actionsPopoverRef && !groupByColumn && !groupHeaderRef\">\n <mat-row #rowTemplate\n *matRowDef=\"let row; columns: _displayedColumns;\"\n class=\"element-row\"\n (mousemove)=\"showPopover($event, row)\"\n [class.hoversimulator]=\"_contextPopover === row\"\n [class.highlight]=\"getHighlightRow(row)\"\n [attr.id]=\"'row_'+ getIndexRow(row)\">\n </mat-row>\n </div>\n\n <div *ngIf=\"!loading && expandable && !actionsPopoverRef && !groupByColumn && !groupHeaderRef\">\n <mat-row *matRowDef=\"let row; columns: _displayedColumns;\"\n class=\"element-row\"\n [class.expanded-row]=\"(isExpandedRow(row) | async)\"\n [ngClass]=\"{ 'hoversimulator': row.isMouseHover === true }\"\n [class.highlight]=\"getHighlightRow(row)\"\n [attr.id]=\"'row_'+ getIndexRow(row)\"\n (mouseover)=\"rowHover.emit(row)\"\n (click)=\"toggleExpandRow(row)\">\n </mat-row>\n\n <mat-row *matRowDef=\"let row; columns: ['expandedDetail'];\"\n class=\"detail-row\"\n [attr.id]=\"'row_expand'+ getIndexRow(row)\">\n </mat-row>\n </div>\n\n <div *ngIf=\"!loading && expandable && actionsPopoverRef && !groupByColumn && !groupHeaderRef\">\n <mat-row #rowTemplate\n *matRowDef=\"let row; columns: _displayedColumns;\"\n class=\"element-row\"\n [class.hoversimulator]=\"_contextPopover === row\"\n [class.expanded-row]=\"(isExpandedRow(row) | async)\"\n [class.highlight]=\"getHighlightRow(row)\"\n [attr.id]=\"'row_'+ getIndexRow(row)\"\n (mousemove)=\"showPopover($event, row)\"\n (click)=\"toggleExpandRow(row)\">\n </mat-row>\n\n <mat-row *matRowDef=\"let row; columns: ['expandedDetail'];\"\n class=\"detail-row\"\n [attr.id]=\"'row_expand'+ getIndexRow(row)\">\n </mat-row>\n </div>\n\n <div *ngIf=\"!loading && !expandable && !actionsPopoverRef && groupByColumn && groupHeaderRef\">\n <mat-row *matRowDef=\"let row; columns: ['groupHeader'];\"\n class=\"element-row\"\n [class.expanded-row]=\"(isExpandedRow(row) | async)\"\n [class.group-header-sticky]=\"groupHeaderSticky\"\n [ngClass]=\"{ 'hoversimulator': row.isMouseHover === true }\"\n [class.highlight]=\"getHighlightRow(row)\"\n [attr.id]=\"'row_'+ getIndexRow(row)\"\n (mouseover)=\"rowHover.emit(row)\"\n (click)=\"toggleExpandRow(row)\">\n </mat-row>\n\n <mat-row *matRowDef=\"let row; columns: ['expandedGroupHeader'];\"\n class=\"detail-row\"\n [attr.id]=\"'row_group'+ getIndexRow(row)\">\n </mat-row>\n </div>\n </mat-table>\n\n <mat-progress-bar mode=\"indeterminate\"\n color=\"accent\"\n *ngIf=\"loading\">\n </mat-progress-bar>\n\n <div *ngIf=\"!loading && (data && (data.length > 0)) && footerRef\"\n class=\"footer-row\"\n fxLayout=\"column\"\n fxLayoutGap=\"10px\">\n <ng-template [ngTemplateOutlet]=\"footerRef\"\n [ngTemplateOutletContext]=\"{$implicit: data}\">\n </ng-template>\n </div>\n\n <div *ngIf=\"!loading && (data && (data.length <= 0))\"\n class=\"no-records\">\n <mat-icon>sentiment_very_dissatisfied</mat-icon>\n <span>Nenhum registro foi encontrado</span>\n </div>\n\n <ng-container *ngIf=\"!loading && paginator && (data && (data.length > 0))\">\n <ng-container #backendPaginatorTemplate\n *ngIf=\"backendPagination && !infiniteScroll\">\n <mat-paginator #backendPaginator\n [hidePageSize]=\"!showPageSizeOptions || (paginatorPageSizeOptions && (paginatorPageSizeOptions.length <= 0))\"\n [length]=\"paginatorLength\"\n [pageIndex]=\"paginatorPageIndex\"\n [pageSize]=\"paginatorPageSize\"\n [pageSizeOptions]=\"paginatorPageSizeOptions\"\n (page)=\"onPage($event)\"\n (mouseenter)=\"closePopover(0)\"\n showFirstLastButtons>\n </mat-paginator>\n </ng-container>\n\n <ng-container #frontendPaginatorTemplate\n *ngIf=\"!backendPagination && !infiniteScroll\">\n <mat-paginator #frontendPaginator\n [hidePageSize]=\"!showPageSizeOptions || (paginatorPageSizeOptions && (paginatorPageSizeOptions.length <= 0))\"\n [length]=\"paginatorLength\"\n [pageIndex]=\"paginatorPageIndex\"\n [pageSize]=\"paginatorPageSize\"\n [pageSizeOptions]=\"paginatorPageSizeOptions\"\n (page)=\"onPage($event)\"\n showFirstLastButtons>\n </mat-paginator>\n </ng-container>\n </ng-container>\n\n <ng-container #infiniteScrollPaginatorTemplate\n *ngIf=\"infiniteScroll && (data && (data.length > 0))\">\n <span class=\"infinite-scroll-paginator\">\n 1 - {{ data.length }} de {{ paginatorLength }}\n </span>\n </ng-container>\n </ng-template>\n</div>\n\n<div id=\"table-popover\"\n class=\"table-popover\"\n (mouseover)=\"_isPopoverHover = true\"\n (mouseout)=\"_isPopoverHover = false; closePopover(0)\"\n *ngIf=\"!loading && actionsPopoverRef\">\n <ng-container [ngTemplateOutlet]=\"actionsPopoverRef\"\n [ngTemplateOutletContext]=\"{ $implicit: _contextPopover }\">\n </ng-container>\n</div>",
524
585
  animations: [
525
586
  trigger('detailExpand', [
526
587
  state('collapsed', style({ height: '0px', minHeight: '0', display: 'none' })),
@@ -528,11 +589,11 @@ var TableComponent = /** @class */ (function () {
528
589
  transition('expanded <=> collapsed', animate('225ms cubic-bezier(0.4, 0.0, 0.2, 1)')),
529
590
  ]),
530
591
  ],
531
- styles: [".box-shadow{border-radius:2px;box-shadow:0 3px 1px -2px rgba(0,0,0,.14),0 2px 2px 0 rgba(0,0,0,.098),0 1px 5px 0 rgba(0,0,0,.084)}table{width:100%}itss-loading{margin:25px;opacity:.7}.no-records{height:48px;display:flex;align-items:center;justify-content:center;flex-direction:column;margin:30px;font-size:14px!important;font-weight:600!important;color:#b3afb3!important}.no-records mat-icon{font-size:32px;height:32px;width:32px;margin-bottom:5px}.footer-row{min-height:57px;font-weight:700;padding:15px 24px;display:flex;align-items:flex-end;justify-content:center;flex-direction:column;color:rgba(0,0,0,.67);border-bottom:1px solid rgba(0,0,0,.12)}.mat-cell-pointer{cursor:pointer}.detail-row{min-height:0!important;border-bottom-width:0}element-row:not(.expanded-row):hover{background:#f5f5f5}element-row:not(.expanded-row):active{background:#efefef}.hoversimulator:not(.highlight){background:#f5f5f5}.hoversimulator:has(.highlight){background-color:rgba(255,217,0,.212)!important}.highlight{background-color:rgba(255,217,0,.102)!important}::ng-deep mat-cell.cell-element-detail{font-weight:400!important}.element-detail{width:100%;overflow:hidden;display:flex;min-height:45px!important}.element-detail.collapsed{height:0!important;min-height:0!important;display:none!important}.element-detail.expanded{height:auto!important}.hidden-header,.hidden-header .mat-header-cell{height:0!important;min-height:0!important}.actions-popover.mat-card{min-width:auto!important;padding:5px!important;background:#f5f5f5;border-radius:5px!important}.actions-popover.mat-card .mat-card-content itss-button .mat-icon-button mat-icon{height:18px!important;width:18px!important}.table-level-1 .mat-table .mat-header-row{border-bottom:unset!important}.mat-column-expandedGroupHeader{padding:0!important}.group-header-cell{display:flex;flex-direction:row;align-items:center;width:100%}.group-header-sticky{position:-webkit-sticky;position:sticky;top:54px}.infinite-scroll-paginator{color:#696969;font-size:14px;display:flex;align-items:center;justify-content:center;height:56px;position:-webkit-sticky;position:sticky;bottom:0;background:#fff;border-top:1px solid #f3465c}.table-popover{position:fixed;display:inline-flex;background-color:#f5f5f5;width:auto;border-radius:0 0 10px 10px;border:1px solid #ddd;border-top-width:0;padding:2px 5px;z-index:1;visibility:hidden}"]
592
+ styles: [".box-shadow{border-radius:2px;box-shadow:0 3px 1px -2px rgba(0,0,0,.14),0 2px 2px 0 rgba(0,0,0,.098),0 1px 5px 0 rgba(0,0,0,.084)}table{width:100%}itss-loading{margin:25px;opacity:.7}.no-records{height:48px;display:flex;align-items:center;justify-content:center;flex-direction:column;margin:30px;font-size:14px!important;font-weight:600!important;color:#b3afb3!important;text-transform:initial!important}.no-records mat-icon{font-size:32px;height:32px;width:32px;margin-bottom:5px}.footer-row{min-height:57px;font-weight:700;padding:15px 24px;display:flex;align-items:flex-end;justify-content:center;flex-direction:column;color:rgba(0,0,0,.67);border-bottom:1px solid rgba(0,0,0,.12)}.mat-cell-pointer{cursor:pointer}.detail-row{min-height:0!important;border-bottom-width:0}element-row:not(.expanded-row):hover{background:#f5f5f5}element-row:not(.expanded-row):active{background:#efefef}.hoversimulator:not(.highlight){background:#f5f5f5}.hoversimulator:has(.highlight){background-color:rgba(255,217,0,.212)!important}.highlight{background-color:rgba(255,217,0,.102)!important}::ng-deep mat-cell.cell-element-detail{font-weight:400!important}.element-detail{width:100%;overflow:hidden;display:flex;min-height:45px!important}.element-detail.collapsed{height:0!important;min-height:0!important;display:none!important}.element-detail.expanded{height:auto!important}.hidden-header,.hidden-header .mat-header-cell{height:0!important;min-height:0!important}.actions-popover.mat-card{min-width:auto!important;padding:5px!important;background:#f5f5f5;border-radius:5px!important}.actions-popover.mat-card .mat-card-content itss-button .mat-icon-button mat-icon{height:18px!important;width:18px!important}.table-level-1 .mat-table .mat-header-row{border-bottom:unset!important}.mat-column-expandedGroupHeader{padding:0!important}.group-header-cell{display:flex;flex-direction:row;align-items:center;width:100%}.group-header-sticky{position:-webkit-sticky;position:sticky;top:54px}.infinite-scroll-paginator{color:#696969;font-size:14px;display:flex;align-items:center;justify-content:center;height:56px;position:-webkit-sticky;position:sticky;bottom:0;background:#fff;border-top:1px solid #f3465c}.table-popover{position:fixed;display:inline-flex;background-color:#f5f5f5;width:auto;border-radius:0 0 10px 10px;border:1px solid #ddd;border-top-width:0;padding:2px 5px;z-index:1;visibility:hidden}"]
532
593
  }),
533
- __metadata("design:paramtypes", [])
594
+ __metadata("design:paramtypes", [NgZone])
534
595
  ], TableComponent);
535
596
  return TableComponent;
536
597
  }());
537
598
  export { TableComponent };
538
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGdpcGlzaXN0ZW1hcy9uZy1jb3JlLyIsInNvdXJjZXMiOlsic2hhcmVkL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pGLE9BQU8sRUFBaUIsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFxQixNQUFNLEVBQWlCLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDOUosT0FBTyxFQUFtQixZQUFZLEVBQUUsT0FBTyxFQUFFLGtCQUFrQixFQUF1QixNQUFNLG1CQUFtQixDQUFDO0FBQ3BILE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDdEMsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXZDLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVsRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpREFBaUQsQ0FBQztBQWdCdEY7SUF3SEk7UUF0SFEsc0JBQWlCLEdBQVUsRUFBRSxDQUFDO1FBRS9CLHNCQUFpQixHQUFXLEdBQUcsQ0FBQztRQUNoQyxvQkFBZSxHQUFRLElBQUksQ0FBQztRQUc1QixzQkFBaUIsR0FBVSxFQUFFLENBQUM7UUFtQjVCLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFFeEIsWUFBTyxHQUFxQixFQUFFLENBQUM7UUFXL0IsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUUzQixzQkFBaUIsR0FBWSxJQUFJLENBQUM7UUFFbEMsdUJBQWtCLEdBQVcsQ0FBQyxDQUFDO1FBRS9CLG9CQUFlLEdBQVcsQ0FBQyxDQUFDO1FBRTVC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YztRQVoxQixTQUFTLENBQUM7WUFDUCxRQUFRLEVBQUUsWUFBWTtZQUN0Qiw2Z2tCQUFxQztZQUVyQyxVQUFVLEVBQUU7Z0JBQ1IsT0FBTyxDQUFDLGNBQWMsRUFBRTtvQkFDcEIsS0FBSyxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7b0JBQzdFLEtBQUssQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7b0JBQ3pDLFVBQVUsQ0FBQyx3QkFBd0IsRUFBRSxPQUFPLENBQUMsc0NBQXNDLENBQUMsQ0FBQztpQkFDeEYsQ0FBQzthQUNMOztTQUNKLENBQUM7O09BQ1csY0FBYyxDQWlaMUI7SUFBRCxxQkFBQztDQUFBLEFBalpELElBaVpDO1NBalpZLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgQ29udGVudENoaWxkLCBFdmVudEVtaXR0ZXIsIElucHV0LCBPbkNoYW5nZXMsIE9uSW5pdCwgT3V0cHV0LCBTaW1wbGVDaGFuZ2VzLCBUZW1wbGF0ZVJlZiwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBNYXRIZWFkZXJSb3dEZWYsIE1hdFBhZ2luYXRvciwgTWF0U29ydCwgTWF0VGFibGVEYXRhU291cmNlLCBTb3J0LCBTb3J0RGlyZWN0aW9uIH0gZnJvbSAnQGFuZ3VsYXIvbWF0ZXJpYWwnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgb2YgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlbGF5IH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBBcnJheVV0aWwsIE9iamVjdFV0aWwsIFN0cmluZ1V0aWwgfSBmcm9tICcuLi8uLi8uLi9jb3JlJztcbmltcG9ydCB7IFRhYmxlQ29sdW1uRFRPIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMvZHRvL3RhYmxlLWNvbHVtbi5kdG8nO1xuaW1wb3J0IHsgVGFibGVHcm91cEhlYWRlckRUTyB9IGZyb20gJy4uLy4uLy4uL2NvcmUvbW9kZWxzL2R0by90YWJsZS1ncm91cC1oZWFkZXIuZHRvJztcbmltcG9ydCB7IFRhYmxlUGFnZUV2ZW50RFRPIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMvZHRvL3RhYmxlLXBhZ2UtZXZlbnQuZHRvJztcblxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ2l0c3MtdGFibGUnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi90YWJsZS5jb21wb25lbnQuaHRtbCcsXG4gICAgc3R5bGVVcmxzOiBbJy4vdGFibGUuY29tcG9uZW50LnNjc3MnXSxcbiAgICBhbmltYXRpb25zOiBbXG4gICAgICAgIHRyaWdnZXIoJ2RldGFpbEV4cGFuZCcsIFtcbiAgICAgICAgICAgIHN0YXRlKCdjb2xsYXBzZWQnLCBzdHlsZSh7IGhlaWdodDogJzBweCcsIG1pbkhlaWdodDogJzAnLCBkaXNwbGF5OiAnbm9uZScgfSkpLFxuICAgICAgICAgICAgc3RhdGUoJ2V4cGFuZGVkJywgc3R5bGUoeyBoZWlnaHQ6ICcqJyB9KSksXG4gICAgICAgICAgICB0cmFuc2l0aW9uKCdleHBhbmRlZCA8PT4gY29sbGFwc2VkJywgYW5pbWF0ZSgnMjI1bXMgY3ViaWMtYmV6aWVyKDAuNCwgMC4wLCAwLjIsIDEpJykpLFxuICAgICAgICBdKSxcbiAgICBdLFxufSlcbmV4cG9ydCBjbGFzcyBUYWJsZUNvbXBvbmVudDxUPiBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25Jbml0IHtcblxuICAgIHByaXZhdGUgX2V4cGFuZGVkRWxlbWVudHM6IGFueVtdID0gW107XG5cbiAgICBwdWJsaWMgX3Njcm9sbEhlaWdodENhbGM6IG51bWJlciA9IDQxMDtcbiAgICBwdWJsaWMgX2lzUG9wb3ZlckhvdmVyOiBhbnkgPSBudWxsO1xuICAgIHB1YmxpYyBfY29udGV4dFBvcG92ZXI6IFQ7XG4gICAgcHVibGljIF9leHBhbmRlZEVsZW1lbnQ6IGFueTtcbiAgICBwdWJsaWMgX2Rpc3BsYXllZENvbHVtbnM6IGFueVtdID0gW107XG4gICAgcHVibGljIF9kYXRhU291cmNlOiBNYXRUYWJsZURhdGFTb3VyY2U8VCB8IFRhYmxlR3JvdXBIZWFkZXJEVE8+O1xuXG4gICAgQFZpZXdDaGlsZChNYXRTb3J0LCB7IHN0YXRpYzogdHJ1ZSB9KSBtYXRTb3J0OiBNYXRTb3J0O1xuICAgIEBWaWV3Q2hpbGQoTWF0UGFnaW5hdG9yLCB7IHN0YXRpYzogdHJ1ZSB9KSBtYXRQYWdpbmF0b3I6IE1hdFBhZ2luYXRvcjtcbiAgICBAVmlld0NoaWxkKCdmcm9udGVuZFBhZ2luYXRvcicsIHsgc3RhdGljOiBmYWxzZSB9KSBtYXRGcm9udGVuZFBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xuICAgIEBWaWV3Q2hpbGQoJ2JhY2tlbmRQYWdpbmF0b3InLCB7IHN0YXRpYzogZmFsc2UgfSkgbWF0QmFja2VuZFBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xuXG4gICAgQFZpZXdDaGlsZCgnbWF0SGVhZGVyUm93JywgeyBzdGF0aWM6IHRydWUgfSkgcHJpdmF0ZSBfbWF0SGVhZGVyUm93UmVmOiBUZW1wbGF0ZVJlZjxNYXRIZWFkZXJSb3dEZWY+O1xuICAgIEBWaWV3Q2hpbGQoJ2Zyb250ZW5kUGFnaW5hdG9yJywgeyBzdGF0aWM6IHRydWUgfSkgcHJpdmF0ZSBfbWF0RnJvbnRlbmRQYWdpbmF0b3JSb3dSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQFZpZXdDaGlsZCgnYmFja2VuZFBhZ2luYXRvcicsIHsgc3RhdGljOiB0cnVlIH0pIHByaXZhdGUgX21hdEJhY2tlbmRQYWdpbmF0b3JSb3dSZWY6IFRlbXBsYXRlUmVmPGFueT47XG5cbiAgICBAQ29udGVudENoaWxkKCdhY3Rpb25zJywgeyBzdGF0aWM6IGZhbHNlIH0pIGFjdGlvbnNSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQENvbnRlbnRDaGlsZCgnYWN0aW9uc1BvcG92ZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgYWN0aW9uc1BvcG92ZXJSZWY6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQENvbnRlbnRDaGlsZCgnZm9vdGVyJywgeyBzdGF0aWM6IGZhbHNlIH0pIGZvb3RlclJlZjogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAQ29udGVudENoaWxkKCdleHBhbmRlZCcsIHsgc3RhdGljOiBmYWxzZSB9KSBleHBhbmRlZFJlZjogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAQ29udGVudENoaWxkKCdncm91cEhlYWRlcicsIHsgc3RhdGljOiBmYWxzZSB9KSBncm91cEhlYWRlclJlZjogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAQ29udGVudENoaWxkKCdncm91cEZvb3RlcicsIHsgc3RhdGljOiBmYWxzZSB9KSBncm91cEZvb3RlclJlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBJbnB1dCgpIHNoYWRvdzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgY29sdW1uczogVGFibGVDb2x1bW5EVE9bXSA9IFtdO1xuXG4gICAgcHJpdmF0ZSBfZGF0YVZhbHVlOiBUW107XG4gICAgQElucHV0KCkgZ2V0IGRhdGEoKTogVFtdIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFWYWx1ZTtcbiAgICB9XG4gICAgc2V0IGRhdGEoZGF0YTogVFtdKSB7XG4gICAgICAgIHRoaXMuX2RhdGFWYWx1ZSA9IGRhdGE7XG4gICAgICAgIHRoaXMuZGF0YUNoYW5nZS5lbWl0KHRoaXMuX2RhdGFWYWx1ZSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgcGFnaW5hdG9yOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBiYWNrZW5kUGFnaW5hdGlvbjogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBASW5wdXQoKSBwYWdpbmF0b3JQYWdlSW5kZXg6IG51bWJlciA9IDA7XG5cbiAgICBASW5wdXQoKSBwYWdpbmF0b3JMZW5ndGg6IG51bWJlciA9IDA7XG5cbiAgICBASW5wdXQoKSBwYWdpbmF0b3JQYWdlU2l6ZTogbnVtYmVyID0gMTA7XG5cbiAgICBASW5wdXQoKSBwYWdpbmF0b3JQYWdlU2l6ZU9wdGlvbnM6IG51bWJlcltdID0gWzEwLCAyMCwgMzBdO1xuXG4gICAgQElucHV0KCkgc2hvd1BhZ2VTaXplT3B0aW9uczogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgbG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgZXhwYW5kYWJsZTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgc2hvd0hlYWRlcjogYm9vbGVhbiA9IHRydWU7XG5cbiAgICBASW5wdXQoKSBjb2x1bW5Jbml0aWFsOiBudW1iZXI7XG5cbiAgICBASW5wdXQoKSBjb2x1bW5GaW5hbDogbnVtYmVyO1xuXG4gICAgQElucHV0KCkgaGVhZGVyU3RpY2t5OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBncm91cEJ5Q29sdW1uOiBzdHJpbmc7XG5cbiAgICBASW5wdXQoKSBncm91cEhlYWRlclN0aWNreTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgZ3JvdXBTdGFydEV4cGFuZGVkOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBoaWdobGlnaHRSb3dGbjogKHJvdzogVCB8IFRhYmxlR3JvdXBIZWFkZXJEVE8pID0+IGJvb2xlYW47XG5cbiAgICBASW5wdXQoKSBpbmZpbml0ZVNjcm9sbDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgc2Nyb2xsRGVsYXk6IG51bWJlciA9IDEwMDA7XG5cbiAgICBASW5wdXQoKSBzY3JvbGxPZmZzZXQ6IG51bWJlciA9IDEwMDA7XG5cbiAgICBASW5wdXQoKSBzY3JvbGxIZWlndGg6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpIGlzRmlsdGVyaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoJ2NvbHVtbkV4cGFuZGFibGVGaXhlZCcpIHNob3dDb2x1bW5FeHBhbmRhYmxlRml4ZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGV4cGFuZGFibGVPbmVSb3c6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGlnbm9yZUNoaWxkcmVuRXhwYW5kUm93OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBjbGVhclNvcnQ6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBzb3J0QWN0aXZlOiBzdHJpbmcgPSAnJztcbiAgICBASW5wdXQoKSBzb3J0RGlyZWN0aW9uOiBTb3J0RGlyZWN0aW9uID0gJ2FzYyc7XG5cbiAgICBAT3V0cHV0KCkgcm93RXhwYW5kZWRDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUPiA9IG5ldyBFdmVudEVtaXR0ZXI8VD4odHJ1ZSk7XG4gICAgQE91dHB1dCgpIGRhdGFDaGFuZ2U6IEV2ZW50RW1pdHRlcjxUW10+ID0gbmV3IEV2ZW50RW1pdHRlcjxUW10+KHRydWUpO1xuICAgIEBPdXRwdXQoKSBwYWdlOiBFdmVudEVtaXR0ZXI8VGFibGVQYWdlRXZlbnREVE8+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSByb3dIb3ZlcjogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgICBwdWJsaWMgZ2V0IG1hdFRhYmxlSGVpZ3RoKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgICAgIGxldCBoZWFkZXJSb3dIZWlnaHQ6IG51bWJlcjtcbiAgICAgICAgaWYgKCFPYmplY3RVdGlsLmlzTnVsbCh0aGlzLl9tYXRIZWFkZXJSb3dSZWYpKSB7XG4gICAgICAgICAgICBoZWFkZXJSb3dIZWlnaHQgPSAodGhpcy5fbWF0SGVhZGVyUm93UmVmLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudCBhcyBIVE1MRWxlbWVudCkuY2xpZW50SGVpZ2h0O1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHBhZ2luYXRvclJvd0hlaWdodDogbnVtYmVyO1xuICAgICAgICBjb25zdCBwYWdpbmF0b3JSZWYgPSB0aGlzLmJhY2tlbmRQYWdpbmF0aW9uID8gdGhpcy5fbWF0QmFja2VuZFBhZ2luYXRvclJvd1JlZiA6IHRoaXMuX21hdEZyb250ZW5kUGFnaW5hdG9yUm93UmVmO1xuICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHBhZ2luYXRvclJlZikpIHtcbiAgICAgICAgICAgIHBhZ2luYXRvclJvd0hlaWdodCA9IChwYWdpbmF0b3JSZWYuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5jbGllbnRIZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBtYXRIZWFkZXJ3SGVpZ2h0OiBudW1iZXIgPSBoZWFkZXJSb3dIZWlnaHQgfHwgNjA7XG4gICAgICAgIGNvbnN0IG1hdFBhZ2luYXRvckhlaWdodDogbnVtYmVyID0gcGFnaW5hdG9yUm93SGVpZ2h0IHx8IDU3O1xuXG4gICAgICAgIGNvbnN0IHBhZ2VTaXplOiBudW1iZXIgPSB0aGlzLnBhZ2luYXRvclBhZ2VTaXplICYmICh0aGlzLnBhZ2luYXRvclBhZ2VTaXplIDw9IDEwKSA/IHRoaXMucGFnaW5hdG9yUGFnZVNpemUgOiAxMDtcbiAgICAgICAgY29uc3Qgc2V0SGVpZ3RoOiBib29sZWFuID0gdGhpcy5oZWFkZXJTdGlja3kgJiYgKHRoaXMuZGF0YS5sZW5ndGggPiBwYWdlU2l6ZSk7XG5cbiAgICAgICAgcmV0dXJuIG9mKHNldEhlaWd0aCA/IGAkeygoNTcgKiBwYWdlU2l6ZSkgKyBtYXRIZWFkZXJ3SGVpZ2h0ICsgbWF0UGFnaW5hdG9ySGVpZ2h0KX1weGAgOiAnYXV0bycpO1xuICAgIH1cblxuICAgIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHsgfVxuXG4gICAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5fZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlLnNvcnQgPSB0aGlzLm1hdFNvcnQ7XG5cbiAgICAgICAgICAgICAgICBpZiAodGhpcy5wYWdpbmF0b3IgJiYgIXRoaXMuYmFja2VuZFBhZ2luYXRpb24gJiYgIXRoaXMuaW5maW5pdGVTY3JvbGwpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLm1hdEZyb250ZW5kUGFnaW5hdG9yO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKHRoaXMucGFnaW5hdG9yICYmICh0aGlzLmJhY2tlbmRQYWdpbmF0aW9uIHx8IHRoaXMuaW5maW5pdGVTY3JvbGwpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblBhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICBwYWdlU2l6ZTogdGhpcy5wYWdpbmF0b3JQYWdlU2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgcGFnaW5hdG9yUGFnZVNpemVPcHRpb25zOiB0aGlzLnBhZ2luYXRvclBhZ2VTaXplT3B0aW9ucyxcbiAgICAgICAgICAgICAgICAgICAgcGFnZUluZGV4OiAwLFxuICAgICAgICAgICAgICAgICAgICBsZW5ndGg6IDAsXG4gICAgICAgICAgICAgICAgICAgIHByZXZpb3VzUGFnZUluZGV4OiAwXG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5hY3Rpb25zUG9wb3ZlclJlZikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0UG9wb3ZlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNQb3BvdmVySG92ZXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLmNsb3NlUG9wb3ZlcigwKTtcblxuICAgICAgICAgICAgICAgIGNvbnN0IHBvcG92ZXI6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhYmxlLXBvcG92ZXInKTtcbiAgICAgICAgICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHBvcG92ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgIHBvcG92ZXIuc3R5bGUudmlzaWJpbGl0eSA9ICdoaWRkZW4nO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmIChjaGFuZ2VzLmRhdGEpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVEYXRhU291cmNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgX2NyZWF0ZURhdGFTb3VyY2UoKTogdm9pZCB7XG4gICAgICAgIGxldCBjb2x1bW5zOiBzdHJpbmdbXSA9IHRoaXMuY29sdW1ucy5maWx0ZXIoYyA9PiBjLnZpc2libGUpLm1hcChjID0+IGMucHJvcGVydHkpO1xuICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuZXhwYW5kZWRSZWYpKSB7XG4gICAgICAgICAgICBjb2x1bW5zID0gWydleHBhbmRlZENvbHVtbicsIC4uLmNvbHVtbnNdO1xuICAgICAgICB9XG4gICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5hY3Rpb25zUmVmKSkge1xuICAgICAgICAgICAgY29sdW1ucyA9IFsuLi5jb2x1bW5zLCAnYWN0aW9uc0NvbHVtbiddO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2Rpc3BsYXllZENvbHVtbnMgPSBjb2x1bW5zO1xuXG4gICAgICAgIGlmICh0aGlzLmluZmluaXRlU2Nyb2xsKSB7XG4gICAgICAgICAgICBsZXQgZGF0YUFsbDogVFtdID0gW107XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5pc0ZpbHRlcmluZykge1xuICAgICAgICAgICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5fZGF0YVNvdXJjZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YUFsbCA9IEFycmF5VXRpbC5jbG9uZSh0aGlzLl9kYXRhU291cmNlLmRhdGEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCFBcnJheVV0aWwuaXNFbXB0eSh0aGlzLmRhdGEpKSB7XG4gICAgICAgICAgICAgICAgZGF0YUFsbC5wdXNoKC4uLnRoaXMuZGF0YSk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKFtdKTtcbiAgICAgICAgICAgIGlmICghU3RyaW5nVXRpbC5pc0VtcHR5KHRoaXMuZ3JvdXBCeUNvbHVtbikgJiYgIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuZ3JvdXBIZWFkZXJSZWYpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5nZW5lcmV0ZUdyb3Vwc0J5Q29sdW1uKGRhdGFBbGwpO1xuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlLmRhdGEgPSBkYXRhQWxsO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBkYXRhQWxsO1xuICAgICAgICAgICAgdGhpcy5kYXRhQ2hhbmdlLmVtaXQodGhpcy5kYXRhKTtcbiAgICAgICAgICAgIHRoaXMuY2FsY1Njcm9sbEhlaWdodCgpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZSA9IG5ldyBNYXRUYWJsZURhdGFTb3VyY2UoW10pO1xuICAgICAgICAgICAgaWYgKCFTdHJpbmdVdGlsLmlzRW1wdHkodGhpcy5ncm91cEJ5Q29sdW1uKSAmJiAhT2JqZWN0VXRpbC5pc051bGwodGhpcy5ncm91cEhlYWRlclJlZikpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlLmRhdGEgPSB0aGlzLmdlbmVyZXRlR3JvdXBzQnlDb2x1bW4odGhpcy5kYXRhKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5kYXRhO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFBcnJheVV0aWwuaXNFbXB0eSh0aGlzLl9kYXRhU291cmNlLmRhdGEpKSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlLnNvcnQgPSB0aGlzLm1hdFNvcnQ7XG4gICAgICAgICAgICB0aGlzLnNldFNvcnRpbmdEYXRhQWNjZXNzb3IoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnBhZ2luYXRvciAmJiAhdGhpcy5iYWNrZW5kUGFnaW5hdGlvbikge1xuICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZS5wYWdpbmF0b3IgPSB0aGlzLm1hdEZyb250ZW5kUGFnaW5hdG9yO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLmdyb3VwU3RhcnRFeHBhbmRlZCAmJiAodGhpcy5ncm91cEhlYWRlclJlZiB8fCAodGhpcy5leHBhbmRhYmxlICYmIHRoaXMuZXhwYW5kZWRSZWYpKSAmJiAhQXJyYXlVdGlsLmlzRW1wdHkodGhpcy5fZGF0YVNvdXJjZS5kYXRhKSkge1xuICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZS5kYXRhLmZvckVhY2gocm93ID0+IHRoaXMuYWRkQ29sbGFwc2Uocm93KSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBjYWxjU2Nyb2xsSGVpZ2h0KCk6IHZvaWQge1xuICAgICAgICBpZiAoKHRoaXMuX2RhdGFTb3VyY2UgJiYgKHRoaXMuX2RhdGFTb3VyY2UuZGF0YS5sZW5ndGggPiAwKSkgJiYgKE1hdGguZmxvb3IodGhpcy5fc2Nyb2xsSGVpZ2h0Q2FsYykgPD0gNzAwKSkge1xuICAgICAgICAgICAgdGhpcy5fc2Nyb2xsSGVpZ2h0Q2FsYyA9IDEzMCArICh0aGlzLl9kYXRhU291cmNlLmRhdGEubGVuZ3RoICogNDgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25QYWdlKHBhZ2VFdmVudDogVGFibGVQYWdlRXZlbnREVE8pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wYWdpbmF0b3JQYWdlU2l6ZSA9IHBhZ2VFdmVudC5wYWdlU2l6ZTtcbiAgICAgICAgcGFnZUV2ZW50LnBhZ2luYXRvclBhZ2VTaXplT3B0aW9ucyA9IEFycmF5VXRpbC5pc0VtcHR5KHBhZ2VFdmVudC5wYWdpbmF0b3JQYWdlU2l6ZU9wdGlvbnMpID8gdGhpcy5wYWdpbmF0b3JQYWdlU2l6ZU9wdGlvbnMgOiBwYWdlRXZlbnQucGFnaW5hdG9yUGFnZVNpemVPcHRpb25zO1xuICAgICAgICB0aGlzLnBhZ2UuZW1pdChwYWdlRXZlbnQpO1xuICAgIH1cblxuICAgIGlzRXhwYW5zZWQoZWxlbWVudDogYW55KTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9leHBhbmRlZEVsZW1lbnRzLmZpbHRlcihlID0+IE9iamVjdFV0aWwuZXF1YWxzKGUsIGVsZW1lbnQpKS5sZW5ndGggPiAwO1xuICAgIH1cblxuICAgIHJlbW92ZUNvbGxhcHNlKGVsZW1lbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICBpZiAodGhpcy5leHBhbmRhYmxlT25lUm93KSB7XG4gICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlLmRhdGEuZm9yRWFjaChyb3cgPT4gdGhpcy5hZGRDb2xsYXBzZShyb3cpKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGV4cGFuZGVkRWxlbWVudHNBdXg6IGFueVtdID0gQXJyYXlVdGlsLmNsb25lKHRoaXMuX2V4cGFuZGVkRWxlbWVudHMpO1xuICAgICAgICBleHBhbmRlZEVsZW1lbnRzQXV4LnNwbGljZSh0aGlzLl9leHBhbmRlZEVsZW1lbnRzLmluZGV4T2YoZWxlbWVudCksIDEpO1xuICAgICAgICB0aGlzLl9leHBhbmRlZEVsZW1lbnRzID0gQXJyYXlVdGlsLmNsb25lKGV4cGFuZGVkRWxlbWVudHNBdXgpO1xuICAgIH1cblxuICAgIGFkZENvbGxhcHNlKGVsZW1lbnQ6IGFueSk6IHZvaWQge1xuICAgICAgICBjb25zdCBjb2xsYXBzZWRFbGVtZW50OiBib29sZWFuID0gdGhpcy5fZXhwYW5kZWRFbGVtZW50cy5maWx0ZXIoZSA9PiBPYmplY3RVdGlsLmVxdWFscyhlLCBlbGVtZW50KSkubGVuZ3RoID4gMDtcbiAgICAgICAgaWYgKCFjb2xsYXBzZWRFbGVtZW50KSB7XG4gICAgICAgICAgICB0aGlzLl9leHBhbmRlZEVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByb3dFeHBhbmRlZENoYW5nZUVtaXQoZWxlbWVudDogYW55KTogdm9pZCB7XG4gICAgICAgIHRoaXMucm93RXhwYW5kZWRDaGFuZ2UuZW1pdChlbGVtZW50KTtcbiAgICB9XG5cbiAgICBzb3J0RGF0YShzb3J0OiBTb3J0KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmluZmluaXRlU2Nyb2xsKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YUNoYW5nZS5lbWl0KFtdKTtcbiAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKFtdKTtcbiAgICAgICAgICAgIHRoaXMuY2FsY1Njcm9sbEhlaWdodCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vblBhZ2Uoe1xuICAgICAgICAgICAgcGFnZVNpemU6IHRoaXMucGFnaW5hdG9yUGFnZVNpemUsXG4gICAgICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgICAgICBsZW5ndGg6IDAsXG4gICAgICAgICAgICBwcmV2aW91c1BhZ2VJbmRleDogMCxcbiAgICAgICAgICAgIHBhZ2luYXRvclBhZ2VTaXplT3B0aW9uczogdGhpcy5wYWdpbmF0b3JQYWdlU2l6ZU9wdGlvbnMsXG4gICAgICAgICAgICBzb3J0OiBzb3J0XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHNob3dQb3BvdmVyKGV2ZW50OiBNb3VzZUV2ZW50LCBkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcG9wb3ZlcjogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFibGUtcG9wb3ZlcicpO1xuICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHBvcG92ZXIpKSB7XG4gICAgICAgICAgICBwb3BvdmVyLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcblxuICAgICAgICAgICAgaWYgKCF0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkb21SZWN0UG9wb3ZlciA9IHBvcG92ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZG9tUmVjdFJvdyA9IChldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxscyA9IChldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxUYWJsZVJvd0VsZW1lbnQpLmNoaWxkcmVuO1xuXG4gICAgICAgICAgICAgICAgaWYgKGRvbVJlY3RQb3BvdmVyICYmIGRvbVJlY3RSb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgcG9wb3Zlci5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xuICAgICAgICAgICAgICAgICAgICBwb3BvdmVyLnN0eWxlLnRvcCA9IGAkeyhkb21SZWN0Um93LnRvcCArIGRvbVJlY3RSb3cuaGVpZ2h0KSAtIDF9cHhgO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBzdGFydFBvc2l0aW9uOiBudW1iZXIgPSAwO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZW5kUG9zaXRpb246IG51bWJlciA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29sdW1uSW5pdGlhbCAmJiAodGhpcy5jb2x1bW5Jbml0aWFsID49IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNlbGxzW3RoaXMuY29sdW1uSW5pdGlhbF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luaXRpYWwgY29sdW1uIHVuZGVmaW5lZCBvciBudWxsJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gY2VsbHNbdGhpcy5jb2x1bW5Jbml0aWFsXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IGRvbVJlY3RSb3cubGVmdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbHVtbkZpbmFsICYmICh0aGlzLmNvbHVtbkZpbmFsID49IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNlbGxzW3RoaXMuY29sdW1uRmluYWxdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGaW5hbCBjb2x1bW4gdW5kZWZpbmVkIG9yIG51bGwnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFBvc2l0aW9uID0gY2VsbHNbdGhpcy5jb2x1bW5GaW5hbF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIGRvbVJlY3RQb3BvdmVyLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBkb21SZWN0Um93LnJpZ2h0IC0gZG9tUmVjdFBvcG92ZXIud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5jbGllbnRYID4gc3RhcnRQb3NpdGlvbiArIDE1ICYmIGV2ZW50LmNsaWVudFggPCBlbmRQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcG92ZXIuc3R5bGUubGVmdCA9IGAke2V2ZW50LmNsaWVudFggLSAxNX1weGA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmNsaWVudFggPD0gc3RhcnRQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcG92ZXIuc3R5bGUubGVmdCA9IGAke3N0YXJ0UG9zaXRpb259cHhgO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5jbGllbnRYID49IGVuZFBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wb3Zlci5zdHlsZS5sZWZ0ID0gYCR7ZW5kUG9zaXRpb259cHhgO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yb3dIb3Zlci5lbWl0KGRhdGEpO1xuICAgICAgICB0aGlzLl9jb250ZXh0UG9wb3ZlciA9IGRhdGE7XG4gICAgfVxuXG4gICAgY2xvc2VQb3BvdmVyKHRpbWU6IG51bWJlcik6IHZvaWQge1xuICAgICAgICBvZihudWxsKS5waXBlKGRlbGF5KHRpbWUpKS5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgaWYgKCFPYmplY3RVdGlsLmlzTnVsbCh0aGlzLl9pc1BvcG92ZXJIb3ZlcikgJiYgIXRoaXMuX2lzUG9wb3ZlckhvdmVyKSB7XG4gICAgICAgICAgICAgICAgaWYgKCFPYmplY3RVdGlsLmlzTnVsbCh0aGlzLl9pc1BvcG92ZXJIb3ZlcikgJiYgIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuYWN0aW9uc1BvcG92ZXJSZWYpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHBvcG92ZXI6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhYmxlLXBvcG92ZXInKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFPYmplY3RVdGlsLmlzTnVsbChwb3BvdmVyKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcG9wb3Zlci5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dFBvcG92ZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzUG9wb3ZlckhvdmVyID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgc2V0U29ydGluZ0RhdGFBY2Nlc3NvcigpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZS5zb3J0aW5nRGF0YUFjY2Vzc29yID0gKGRhdGE6IGFueSwgc29ydEhlYWRlcklkOiBzdHJpbmcpOiBzdHJpbmcgPT4ge1xuICAgICAgICAgICAgaWYgKHR5cGVvZiBkYXRhW3NvcnRIZWFkZXJJZF0gPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGFbc29ydEhlYWRlcklkXS50b0xvd2VyQ2FzZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGRhdGFbc29ydEhlYWRlcklkXTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBncm91cCBoZWFkZXJcbiAgICBnZW5lcmV0ZUdyb3Vwc0J5Q29sdW1uKGRhdGE6IGFueVtdKTogVGFibGVHcm91cEhlYWRlckRUT1tdIHtcbiAgICAgICAgY29uc3QgZ3JvdXBzOiB7fSA9IGRhdGEucmVkdWNlKChncm91cCwgcm93KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBkYXRhQ29sdW1uOiBzdHJpbmcgPSByb3dbdGhpcy5ncm91cEJ5Q29sdW1uXS50b1N0cmluZygpO1xuICAgICAgICAgICAgaWYgKCFncm91cFtkYXRhQ29sdW1uXSkge1xuICAgICAgICAgICAgICAgIGdyb3VwW2RhdGFDb2x1bW5dID0gW107XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBncm91cFtkYXRhQ29sdW1uXS5wdXNoKHJvdyk7XG4gICAgICAgICAgICByZXR1cm4gZ3JvdXA7XG4gICAgICAgIH0sIHt9KTtcblxuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXMoZ3JvdXBzKS5tYXAoZ3JvdXBWYWx1ZSA9PiB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IFRhYmxlR3JvdXBIZWFkZXJEVE8oZ3JvdXBWYWx1ZSwgZ3JvdXBzW2dyb3VwVmFsdWVdLCBncm91cHNbZ3JvdXBWYWx1ZV0ubGVuZ3RoKTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0SGlnaGxpZ2h0Um93KHJvdzogVCB8IFRhYmxlR3JvdXBIZWFkZXJEVE8pOiBib29sZWFuIHtcbiAgICAgICAgaWYgKCFPYmplY3RVdGlsLmlzTnVsbChyb3cpKSB7XG4gICAgICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuaGlnaGxpZ2h0Um93Rm4pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0Um93Rm4ocm93KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgZ2V0SW5kZXhSb3cocm93OiBUIHwgVGFibGVHcm91cEhlYWRlckRUTyk6IG51bWJlciB7XG4gICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5fZGF0YVNvdXJjZSkgJiYgIUFycmF5VXRpbC5pc0VtcHR5KHRoaXMuX2RhdGFTb3VyY2UuZGF0YSkgJiYgIU9iamVjdFV0aWwuaXNOdWxsKHJvdykpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9kYXRhU291cmNlLmRhdGEuZmluZEluZGV4KHIgPT4gciA9PT0gcm93KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8vIGluZmluaXRlIHNjcm9sbFxuICAgIGhhc01vcmUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiAhdGhpcy5fZGF0YVNvdXJjZSB8fCAodGhpcy5fZGF0YVNvdXJjZS5kYXRhLmxlbmd0aCA8IHRoaXMucGFnaW5hdG9yTGVuZ3RoKTtcbiAgICB9XG5cbiAgICBoYW5kbGVTY3JvbGwoc2Nyb2xsZWQ6IGJvb2xlYW4pOiB2b2lkIHtcbiAgICAgICAgaWYgKHNjcm9sbGVkICYmIHRoaXMuaGFzTW9yZSgpKSB7XG4gICAgICAgICAgICB0aGlzLm9uUGFnZSh7XG4gICAgICAgICAgICAgICAgcGFnZVNpemU6IHRoaXMucGFnaW5hdG9yUGFnZVNpemUsXG4gICAgICAgICAgICAgICAgcGFnZUluZGV4OiB0aGlzLnBhZ2luYXRvclBhZ2VJbmRleCxcbiAgICAgICAgICAgICAgICBsZW5ndGg6IHRoaXMucGFnaW5hdG9yTGVuZ3RoLFxuICAgICAgICAgICAgICAgIHByZXZpb3VzUGFnZUluZGV4OiB0aGlzLnBhZ2luYXRvclBhZ2VJbmRleCxcbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLnBhZ2luYXRvclBhZ2VJbmRleCArPSAxO1xuICAgICAgICB9XG4gICAgfVxuXG59XG4iXX0=
599
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vQGdpcGlzaXN0ZW1hcy9uZy1jb3JlLyIsInNvdXJjZXMiOlsic2hhcmVkL2NvbXBvbmVudHMvdGFibGUvdGFibGUuY29tcG9uZW50LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ2pGLE9BQU8sRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUN0SyxPQUFPLEVBQW1CLFlBQVksRUFBRSxPQUFPLEVBQUUsa0JBQWtCLEVBQXVCLE1BQU0sbUJBQW1CLENBQUM7QUFDcEgsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUN0QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFdkMsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWxFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGlEQUFpRCxDQUFDO0FBZ0J0RjtJQXdISSx3QkFBb0IsT0FBZTtRQUFmLFlBQU8sR0FBUCxPQUFPLENBQVE7UUF0SDVCLGtCQUFhLEdBQVEsRUFBRSxDQUFDO1FBRXhCLHNCQUFpQixHQUFXLEdBQUcsQ0FBQztRQUNoQyxvQkFBZSxHQUFRLElBQUksQ0FBQztRQUU1QixzQkFBaUIsR0FBVSxFQUFFLENBQUM7UUFtQjVCLFdBQU0sR0FBWSxLQUFLLENBQUM7UUFFeEIsWUFBTyxHQUFxQixFQUFFLENBQUM7UUFXL0IsY0FBUyxHQUFZLEtBQUssQ0FBQztRQUUz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Q3BCLEtBQUssQ0FBQyxXQUFXLEVBQUUsS0FBSyxDQUFDLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO29CQUM3RSxLQUFLLENBQUMsVUFBVSxFQUFFLEtBQUssQ0FBQyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO29CQUN6QyxVQUFVLENBQUMsd0JBQXdCLEVBQUUsT0FBTyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7aUJBQ3hGLENBQUM7YUFDTDs7U0FDSixDQUFDO3lDQXlIK0IsTUFBTTtPQXhIMUIsY0FBYyxDQXNjMUI7SUFBRCxxQkFBQztDQUFBLEFBdGNELElBc2NDO1NBdGNZLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBhbmltYXRlLCBzdGF0ZSwgc3R5bGUsIHRyYW5zaXRpb24sIHRyaWdnZXIgfSBmcm9tICdAYW5ndWxhci9hbmltYXRpb25zJztcbmltcG9ydCB7IEFmdGVyVmlld0luaXQsIENvbXBvbmVudCwgQ29udGVudENoaWxkLCBFdmVudEVtaXR0ZXIsIElucHV0LCBOZ1pvbmUsIE9uQ2hhbmdlcywgT25Jbml0LCBPdXRwdXQsIFNpbXBsZUNoYW5nZXMsIFRlbXBsYXRlUmVmLCBWaWV3Q2hpbGQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdEhlYWRlclJvd0RlZiwgTWF0UGFnaW5hdG9yLCBNYXRTb3J0LCBNYXRUYWJsZURhdGFTb3VyY2UsIFNvcnQsIFNvcnREaXJlY3Rpb24gfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbCc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVsYXkgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IEFycmF5VXRpbCwgT2JqZWN0VXRpbCwgU3RyaW5nVXRpbCB9IGZyb20gJy4uLy4uLy4uL2NvcmUnO1xuaW1wb3J0IHsgVGFibGVDb2x1bW5EVE8gfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy9kdG8vdGFibGUtY29sdW1uLmR0byc7XG5pbXBvcnQgeyBUYWJsZUdyb3VwSGVhZGVyRFRPIH0gZnJvbSAnLi4vLi4vLi4vY29yZS9tb2RlbHMvZHRvL3RhYmxlLWdyb3VwLWhlYWRlci5kdG8nO1xuaW1wb3J0IHsgVGFibGVQYWdlRXZlbnREVE8gfSBmcm9tICcuLi8uLi8uLi9jb3JlL21vZGVscy9kdG8vdGFibGUtcGFnZS1ldmVudC5kdG8nO1xuXG5cbkBDb21wb25lbnQoe1xuICAgIHNlbGVjdG9yOiAnaXRzcy10YWJsZScsXG4gICAgdGVtcGxhdGVVcmw6ICcuL3RhYmxlLmNvbXBvbmVudC5odG1sJyxcbiAgICBzdHlsZVVybHM6IFsnLi90YWJsZS5jb21wb25lbnQuc2NzcyddLFxuICAgIGFuaW1hdGlvbnM6IFtcbiAgICAgICAgdHJpZ2dlcignZGV0YWlsRXhwYW5kJywgW1xuICAgICAgICAgICAgc3RhdGUoJ2NvbGxhcHNlZCcsIHN0eWxlKHsgaGVpZ2h0OiAnMHB4JywgbWluSGVpZ2h0OiAnMCcsIGRpc3BsYXk6ICdub25lJyB9KSksXG4gICAgICAgICAgICBzdGF0ZSgnZXhwYW5kZWQnLCBzdHlsZSh7IGhlaWdodDogJyonIH0pKSxcbiAgICAgICAgICAgIHRyYW5zaXRpb24oJ2V4cGFuZGVkIDw9PiBjb2xsYXBzZWQnLCBhbmltYXRlKCcyMjVtcyBjdWJpYy1iZXppZXIoMC40LCAwLjAsIDAuMiwgMSknKSksXG4gICAgICAgIF0pLFxuICAgIF0sXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ29tcG9uZW50PFQ+IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkluaXQge1xuXG4gICAgcHVibGljIF9leHBhbmRlZFJvd3M6IFRbXSA9IFtdO1xuXG4gICAgcHVibGljIF9zY3JvbGxIZWlnaHRDYWxjOiBudW1iZXIgPSA0MTA7XG4gICAgcHVibGljIF9pc1BvcG92ZXJIb3ZlcjogYW55ID0gbnVsbDtcbiAgICBwdWJsaWMgX2NvbnRleHRQb3BvdmVyOiBUO1xuICAgIHB1YmxpYyBfZGlzcGxheWVkQ29sdW1uczogYW55W10gPSBbXTtcbiAgICBwdWJsaWMgX2RhdGFTb3VyY2U6IE1hdFRhYmxlRGF0YVNvdXJjZTxUIHwgVGFibGVHcm91cEhlYWRlckRUTz47XG5cbiAgICBAVmlld0NoaWxkKE1hdFNvcnQsIHsgc3RhdGljOiB0cnVlIH0pIG1hdFNvcnQ6IE1hdFNvcnQ7XG4gICAgQFZpZXdDaGlsZChNYXRQYWdpbmF0b3IsIHsgc3RhdGljOiB0cnVlIH0pIG1hdFBhZ2luYXRvcjogTWF0UGFnaW5hdG9yO1xuICAgIEBWaWV3Q2hpbGQoJ2Zyb250ZW5kUGFnaW5hdG9yJywgeyBzdGF0aWM6IGZhbHNlIH0pIG1hdEZyb250ZW5kUGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XG4gICAgQFZpZXdDaGlsZCgnYmFja2VuZFBhZ2luYXRvcicsIHsgc3RhdGljOiBmYWxzZSB9KSBtYXRCYWNrZW5kUGFnaW5hdG9yOiBNYXRQYWdpbmF0b3I7XG5cbiAgICBAVmlld0NoaWxkKCdtYXRIZWFkZXJSb3cnLCB7IHN0YXRpYzogdHJ1ZSB9KSBwcml2YXRlIF9tYXRIZWFkZXJSb3dSZWY6IFRlbXBsYXRlUmVmPE1hdEhlYWRlclJvd0RlZj47XG4gICAgQFZpZXdDaGlsZCgnZnJvbnRlbmRQYWdpbmF0b3InLCB7IHN0YXRpYzogdHJ1ZSB9KSBwcml2YXRlIF9tYXRGcm9udGVuZFBhZ2luYXRvclJvd1JlZjogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAVmlld0NoaWxkKCdiYWNrZW5kUGFnaW5hdG9yJywgeyBzdGF0aWM6IHRydWUgfSkgcHJpdmF0ZSBfbWF0QmFja2VuZFBhZ2luYXRvclJvd1JlZjogVGVtcGxhdGVSZWY8YW55PjtcblxuICAgIEBDb250ZW50Q2hpbGQoJ2FjdGlvbnMnLCB7IHN0YXRpYzogZmFsc2UgfSkgYWN0aW9uc1JlZjogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAQ29udGVudENoaWxkKCdhY3Rpb25zUG9wb3ZlcicsIHsgc3RhdGljOiBmYWxzZSB9KSBhY3Rpb25zUG9wb3ZlclJlZjogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAQ29udGVudENoaWxkKCdmb290ZXInLCB7IHN0YXRpYzogZmFsc2UgfSkgZm9vdGVyUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBDb250ZW50Q2hpbGQoJ2V4cGFuZGVkJywgeyBzdGF0aWM6IGZhbHNlIH0pIGV4cGFuZGVkUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBDb250ZW50Q2hpbGQoJ2dyb3VwSGVhZGVyJywgeyBzdGF0aWM6IGZhbHNlIH0pIGdyb3VwSGVhZGVyUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBDb250ZW50Q2hpbGQoJ2dyb3VwRm9vdGVyJywgeyBzdGF0aWM6IGZhbHNlIH0pIGdyb3VwRm9vdGVyUmVmOiBUZW1wbGF0ZVJlZjxhbnk+O1xuXG4gICAgQElucHV0KCkgc2hhZG93OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBjb2x1bW5zOiBUYWJsZUNvbHVtbkRUT1tdID0gW107XG5cbiAgICBwcml2YXRlIF9kYXRhVmFsdWU6IFRbXTtcbiAgICBASW5wdXQoKSBnZXQgZGF0YSgpOiBUW10ge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YVZhbHVlO1xuICAgIH1cbiAgICBzZXQgZGF0YShkYXRhOiBUW10pIHtcbiAgICAgICAgdGhpcy5fZGF0YVZhbHVlID0gZGF0YTtcbiAgICAgICAgdGhpcy5kYXRhQ2hhbmdlLmVtaXQodGhpcy5fZGF0YVZhbHVlKTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBwYWdpbmF0b3I6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGJhY2tlbmRQYWdpbmF0aW9uOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpIHBhZ2luYXRvclBhZ2VJbmRleDogbnVtYmVyID0gMDtcblxuICAgIEBJbnB1dCgpIHBhZ2luYXRvckxlbmd0aDogbnVtYmVyID0gMDtcblxuICAgIEBJbnB1dCgpIHBhZ2luYXRvclBhZ2VTaXplOiBudW1iZXIgPSAxMDtcblxuICAgIEBJbnB1dCgpIHBhZ2luYXRvclBhZ2VTaXplT3B0aW9uczogbnVtYmVyW10gPSBbMTAsIDIwLCAzMF07XG5cbiAgICBASW5wdXQoKSBzaG93UGFnZVNpemVPcHRpb25zOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBleHBhbmRhYmxlOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBzaG93SGVhZGVyOiBib29sZWFuID0gdHJ1ZTtcblxuICAgIEBJbnB1dCgpIGNvbHVtbkluaXRpYWw6IG51bWJlcjtcblxuICAgIEBJbnB1dCgpIGNvbHVtbkZpbmFsOiBudW1iZXI7XG5cbiAgICBASW5wdXQoKSBoZWFkZXJTdGlja3k6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGdyb3VwQnlDb2x1bW46IHN0cmluZztcblxuICAgIEBJbnB1dCgpIGdyb3VwSGVhZGVyU3RpY2t5OiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBncm91cFN0YXJ0RXhwYW5kZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIGhpZ2hsaWdodFJvd0ZuOiAocm93OiBUIHwgVGFibGVHcm91cEhlYWRlckRUTykgPT4gYm9vbGVhbjtcblxuICAgIEBJbnB1dCgpIGluZmluaXRlU2Nyb2xsOiBib29sZWFuID0gZmFsc2U7XG5cbiAgICBASW5wdXQoKSBzY3JvbGxEZWxheTogbnVtYmVyID0gMTAwMDtcblxuICAgIEBJbnB1dCgpIHNjcm9sbE9mZnNldDogbnVtYmVyID0gMTAwMDtcblxuICAgIEBJbnB1dCgpIHNjcm9sbEhlaWd0aDogbnVtYmVyO1xuXG4gICAgQElucHV0KCkgaXNGaWx0ZXJpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgnY29sdW1uRXhwYW5kYWJsZUZpeGVkJykgc2hvd0NvbHVtbkV4cGFuZGFibGVGaXhlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgZXhwYW5kYWJsZU9uZVJvdzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gICAgQElucHV0KCkgaWdub3JlQ2hpbGRyZW5FeHBhbmRSb3c6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIEBJbnB1dCgpIHNvcnQ6IGJvb2xlYW4gPSB0cnVlO1xuICAgIEBJbnB1dCgpIGNsZWFyU29ydDogYm9vbGVhbiA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHNvcnRBY3RpdmU6IHN0cmluZyA9ICcnO1xuICAgIEBJbnB1dCgpIHNvcnREaXJlY3Rpb246IFNvcnREaXJlY3Rpb24gPSAnYXNjJztcblxuICAgIEBPdXRwdXQoKSByb3dFeHBhbmRlZDogRXZlbnRFbWl0dGVyPFQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgIEBPdXRwdXQoKSBkYXRhQ2hhbmdlOiBFdmVudEVtaXR0ZXI8VFtdPiA9IG5ldyBFdmVudEVtaXR0ZXIodHJ1ZSk7XG4gICAgQE91dHB1dCgpIHBhZ2U6IEV2ZW50RW1pdHRlcjxUYWJsZVBhZ2VFdmVudERUTz4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG4gICAgQE91dHB1dCgpIHJvd0hvdmVyOiBFdmVudEVtaXR0ZXI8YW55PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcblxuICAgIHB1YmxpYyBnZXQgbWF0VGFibGVIZWlndGgoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICAgICAgbGV0IGhlYWRlclJvd0hlaWdodDogbnVtYmVyO1xuICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuX21hdEhlYWRlclJvd1JlZikpIHtcbiAgICAgICAgICAgIGhlYWRlclJvd0hlaWdodCA9ICh0aGlzLl9tYXRIZWFkZXJSb3dSZWYuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50IGFzIEhUTUxFbGVtZW50KS5jbGllbnRIZWlnaHQ7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgcGFnaW5hdG9yUm93SGVpZ2h0OiBudW1iZXI7XG4gICAgICAgIGNvbnN0IHBhZ2luYXRvclJlZiA9IHRoaXMuYmFja2VuZFBhZ2luYXRpb24gPyB0aGlzLl9tYXRCYWNrZW5kUGFnaW5hdG9yUm93UmVmIDogdGhpcy5fbWF0RnJvbnRlbmRQYWdpbmF0b3JSb3dSZWY7XG4gICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwocGFnaW5hdG9yUmVmKSkge1xuICAgICAgICAgICAgcGFnaW5hdG9yUm93SGVpZ2h0ID0gKHBhZ2luYXRvclJlZi5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQgYXMgSFRNTEVsZW1lbnQpLmNsaWVudEhlaWdodDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG1hdEhlYWRlcndIZWlnaHQ6IG51bWJlciA9IGhlYWRlclJvd0hlaWdodCB8fCA2MDtcbiAgICAgICAgY29uc3QgbWF0UGFnaW5hdG9ySGVpZ2h0OiBudW1iZXIgPSBwYWdpbmF0b3JSb3dIZWlnaHQgfHwgNTc7XG5cbiAgICAgICAgY29uc3QgcGFnZVNpemU6IG51bWJlciA9IHRoaXMucGFnaW5hdG9yUGFnZVNpemUgJiYgKHRoaXMucGFnaW5hdG9yUGFnZVNpemUgPD0gMTApID8gdGhpcy5wYWdpbmF0b3JQYWdlU2l6ZSA6IDEwO1xuICAgICAgICBjb25zdCBzZXRIZWlndGg6IGJvb2xlYW4gPSB0aGlzLmhlYWRlclN0aWNreSAmJiAodGhpcy5kYXRhLmxlbmd0aCA+IHBhZ2VTaXplKTtcblxuICAgICAgICByZXR1cm4gb2Yoc2V0SGVpZ3RoID8gYCR7KCg1NyAqIHBhZ2VTaXplKSArIG1hdEhlYWRlcndIZWlnaHQgKyBtYXRQYWdpbmF0b3JIZWlnaHQpfXB4YCA6ICdhdXRvJyk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBfbmdab25lOiBOZ1pvbmUpIHsgfVxuXG4gICAgbmdPbkluaXQoKTogdm9pZCB7IH1cblxuICAgIG5nQWZ0ZXJWaWV3SW5pdCgpOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuX2RhdGFTb3VyY2UpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5tYXRTb3J0O1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMucGFnaW5hdG9yICYmICF0aGlzLmJhY2tlbmRQYWdpbmF0aW9uICYmICF0aGlzLmluZmluaXRlU2Nyb2xsKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5tYXRGcm9udGVuZFBhZ2luYXRvcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICh0aGlzLnBhZ2luYXRvciAmJiAodGhpcy5iYWNrZW5kUGFnaW5hdGlvbiB8fCB0aGlzLmluZmluaXRlU2Nyb2xsKSkge1xuICAgICAgICAgICAgICAgIHRoaXMub25QYWdlKHtcbiAgICAgICAgICAgICAgICAgICAgcGFnZVNpemU6IHRoaXMucGFnaW5hdG9yUGFnZVNpemUsXG4gICAgICAgICAgICAgICAgICAgIHBhZ2luYXRvclBhZ2VTaXplT3B0aW9uczogdGhpcy5wYWdpbmF0b3JQYWdlU2l6ZU9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICAgIHBhZ2VJbmRleDogMCxcbiAgICAgICAgICAgICAgICAgICAgbGVuZ3RoOiAwLFxuICAgICAgICAgICAgICAgICAgICBwcmV2aW91c1BhZ2VJbmRleDogMFxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuYWN0aW9uc1BvcG92ZXJSZWYpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY29udGV4dFBvcG92ZXIgPSBudWxsO1xuICAgICAgICAgICAgICAgIHRoaXMuX2lzUG9wb3ZlckhvdmVyID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy5jbG9zZVBvcG92ZXIoMCk7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBwb3BvdmVyOiBIVE1MRWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWJsZS1wb3BvdmVyJyk7XG4gICAgICAgICAgICAgICAgaWYgKCFPYmplY3RVdGlsLmlzTnVsbChwb3BvdmVyKSkge1xuICAgICAgICAgICAgICAgICAgICBwb3BvdmVyLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpOiB2b2lkIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoY2hhbmdlcy5kYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlRGF0YVNvdXJjZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIF9jcmVhdGVEYXRhU291cmNlKCk6IHZvaWQge1xuICAgICAgICBsZXQgY29sdW1uczogc3RyaW5nW10gPSB0aGlzLmNvbHVtbnMuZmlsdGVyKGMgPT4gYy52aXNpYmxlKS5tYXAoYyA9PiBjLnByb3BlcnR5KTtcbiAgICAgICAgaWYgKCFPYmplY3RVdGlsLmlzTnVsbCh0aGlzLmV4cGFuZGVkUmVmKSkge1xuICAgICAgICAgICAgY29sdW1ucyA9IFsnZXhwYW5kZWRDb2x1bW4nLCAuLi5jb2x1bW5zXTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuYWN0aW9uc1JlZikpIHtcbiAgICAgICAgICAgIGNvbHVtbnMgPSBbLi4uY29sdW1ucywgJ2FjdGlvbnNDb2x1bW4nXTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLl9kaXNwbGF5ZWRDb2x1bW5zID0gY29sdW1ucztcblxuICAgICAgICBpZiAodGhpcy5pbmZpbml0ZVNjcm9sbCkge1xuICAgICAgICAgICAgbGV0IGRhdGFBbGw6IFRbXSA9IFtdO1xuXG4gICAgICAgICAgICBpZiAoIXRoaXMuaXNGaWx0ZXJpbmcpIHtcbiAgICAgICAgICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuX2RhdGFTb3VyY2UpKSB7XG4gICAgICAgICAgICAgICAgICAgIGRhdGFBbGwgPSBBcnJheVV0aWwuY2xvbmUodGhpcy5fZGF0YVNvdXJjZS5kYXRhKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghQXJyYXlVdGlsLmlzRW1wdHkodGhpcy5kYXRhKSkge1xuICAgICAgICAgICAgICAgIGRhdGFBbGwucHVzaCguLi50aGlzLmRhdGEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLl9kYXRhU291cmNlID0gbmV3IE1hdFRhYmxlRGF0YVNvdXJjZShbXSk7XG4gICAgICAgICAgICBpZiAoIVN0cmluZ1V0aWwuaXNFbXB0eSh0aGlzLmdyb3VwQnlDb2x1bW4pICYmICFPYmplY3RVdGlsLmlzTnVsbCh0aGlzLmdyb3VwSGVhZGVyUmVmKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZ2VuZXJldGVHcm91cHNCeUNvbHVtbihkYXRhQWxsKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZS5kYXRhID0gZGF0YUFsbDtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5kYXRhID0gZGF0YUFsbDtcbiAgICAgICAgICAgIHRoaXMuZGF0YUNoYW5nZS5lbWl0KHRoaXMuZGF0YSk7XG4gICAgICAgICAgICB0aGlzLmNhbGNTY3JvbGxIZWlnaHQoKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKFtdKTtcbiAgICAgICAgICAgIGlmICghU3RyaW5nVXRpbC5pc0VtcHR5KHRoaXMuZ3JvdXBCeUNvbHVtbikgJiYgIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuZ3JvdXBIZWFkZXJSZWYpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZS5kYXRhID0gdGhpcy5nZW5lcmV0ZUdyb3Vwc0J5Q29sdW1uKHRoaXMuZGF0YSk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2UuZGF0YSA9IHRoaXMuZGF0YTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghQXJyYXlVdGlsLmlzRW1wdHkodGhpcy5fZGF0YVNvdXJjZS5kYXRhKSkge1xuICAgICAgICAgICAgdGhpcy5fZGF0YVNvdXJjZS5zb3J0ID0gdGhpcy5tYXRTb3J0O1xuICAgICAgICAgICAgdGhpcy5zZXRTb3J0aW5nRGF0YUFjY2Vzc29yKCk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5wYWdpbmF0b3IgJiYgIXRoaXMuYmFja2VuZFBhZ2luYXRpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2UucGFnaW5hdG9yID0gdGhpcy5tYXRGcm9udGVuZFBhZ2luYXRvcjtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmICghdGhpcy5ncm91cFN0YXJ0RXhwYW5kZWQgJiYgKHRoaXMuZ3JvdXBIZWFkZXJSZWYgfHwgKHRoaXMuZXhwYW5kYWJsZSAmJiB0aGlzLmV4cGFuZGVkUmVmKSkgJiYgIUFycmF5VXRpbC5pc0VtcHR5KHRoaXMuX2RhdGFTb3VyY2UuZGF0YSkpIHtcbiAgICAgICAgLy8gdGhpcy5fZGF0YVNvdXJjZS5kYXRhLmZvckVhY2gocm93ID0+IHRoaXMuYWRkQ29sbGFwc2Uocm93KSk7XG4gICAgICAgIC8vIH1cbiAgICB9XG5cbiAgICBjYWxjU2Nyb2xsSGVpZ2h0KCk6IHZvaWQge1xuICAgICAgICBpZiAoKHRoaXMuX2RhdGFTb3VyY2UgJiYgKHRoaXMuX2RhdGFTb3VyY2UuZGF0YS5sZW5ndGggPiAwKSkgJiYgKE1hdGguZmxvb3IodGhpcy5fc2Nyb2xsSGVpZ2h0Q2FsYykgPD0gNzAwKSkge1xuICAgICAgICAgICAgdGhpcy5fc2Nyb2xsSGVpZ2h0Q2FsYyA9IDEzMCArICh0aGlzLl9kYXRhU291cmNlLmRhdGEubGVuZ3RoICogNDgpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgb25QYWdlKHBhZ2VFdmVudDogVGFibGVQYWdlRXZlbnREVE8pOiB2b2lkIHtcbiAgICAgICAgdGhpcy5wYWdpbmF0b3JQYWdlU2l6ZSA9IHBhZ2VFdmVudC5wYWdlU2l6ZTtcbiAgICAgICAgcGFnZUV2ZW50LnBhZ2luYXRvclBhZ2VTaXplT3B0aW9ucyA9IEFycmF5VXRpbC5pc0VtcHR5KHBhZ2VFdmVudC5wYWdpbmF0b3JQYWdlU2l6ZU9wdGlvbnMpID8gdGhpcy5wYWdpbmF0b3JQYWdlU2l6ZU9wdGlvbnMgOiBwYWdlRXZlbnQucGFnaW5hdG9yUGFnZVNpemVPcHRpb25zO1xuICAgICAgICB0aGlzLnBhZ2UuZW1pdChwYWdlRXZlbnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0V4cGFuZGVkUm93KHJvdzogVCk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgICAgICBpZiAoQXJyYXlVdGlsLmlzRW1wdHkodGhpcy5fZXhwYW5kZWRSb3dzKSkge1xuICAgICAgICAgICAgcmV0dXJuIG9mKGZhbHNlKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGluZGV4OiBudW1iZXIgPSB0aGlzLl9leHBhbmRlZFJvd3MuZmluZEluZGV4KHIgPT4gciA9PT0gcm93KTtcbiAgICAgICAgcmV0dXJuIG9mKGluZGV4ID49IDApO1xuICAgIH1cblxuICAgIHB1YmxpYyB0b2dnbGVFeHBhbmRSb3cocm93OiBUKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IGluZGV4OiBudW1iZXIgPSB0aGlzLl9leHBhbmRlZFJvd3MuZmluZEluZGV4KHIgPT4gciA9PT0gcm93KTtcbiAgICAgICAgaWYgKEFycmF5VXRpbC5pc0VtcHR5KHRoaXMuX2V4cGFuZGVkUm93cykgfHwgKGluZGV4IDwgMCkpIHtcbiAgICAgICAgICAgIHRoaXMuX2V4cGFuZGVkUm93cyA9IFtyb3ddO1xuICAgICAgICAgICAgdGhpcy5yb3dFeHBhbmRlZC5lbWl0KHJvdyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBfZXhwYW5kZWRSb3dzQXV4OiBUW10gPSBBcnJheVV0aWwuY2xvbmUodGhpcy5fZXhwYW5kZWRSb3dzKTtcbiAgICAgICAgX2V4cGFuZGVkUm93c0F1eC5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICB0aGlzLl9leHBhbmRlZFJvd3MgPSBBcnJheVV0aWwuY2xvbmUoX2V4cGFuZGVkUm93c0F1eCk7XG4gICAgICAgIHRoaXMucm93RXhwYW5kZWQuZW1pdChudWxsKTtcbiAgICB9XG5cbiAgICBzb3J0RGF0YShzb3J0OiBTb3J0KTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLmluZmluaXRlU2Nyb2xsKSB7XG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuZGF0YUNoYW5nZS5lbWl0KFtdKTtcbiAgICAgICAgICAgIHRoaXMuX2RhdGFTb3VyY2UgPSBuZXcgTWF0VGFibGVEYXRhU291cmNlKFtdKTtcbiAgICAgICAgICAgIHRoaXMuY2FsY1Njcm9sbEhlaWdodCgpO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5vblBhZ2Uoe1xuICAgICAgICAgICAgcGFnZVNpemU6IHRoaXMucGFnaW5hdG9yUGFnZVNpemUsXG4gICAgICAgICAgICBwYWdlSW5kZXg6IDAsXG4gICAgICAgICAgICBsZW5ndGg6IDAsXG4gICAgICAgICAgICBwcmV2aW91c1BhZ2VJbmRleDogMCxcbiAgICAgICAgICAgIHBhZ2luYXRvclBhZ2VTaXplT3B0aW9uczogdGhpcy5wYWdpbmF0b3JQYWdlU2l6ZU9wdGlvbnMsXG4gICAgICAgICAgICBzb3J0OiBzb3J0XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG93UG9wb3ZlcihldmVudDogTW91c2VFdmVudCwgZGF0YTogYW55KTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHBvcG92ZXI6IEhUTUxFbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3RhYmxlLXBvcG92ZXInKTtcbiAgICAgICAgaWYgKCFPYmplY3RVdGlsLmlzTnVsbChwb3BvdmVyKSkge1xuICAgICAgICAgICAgcG9wb3Zlci5zdHlsZS52aXNpYmlsaXR5ID0gJ2hpZGRlbic7XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5sb2FkaW5nKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fbmdab25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZG9tUmVjdFBvcG92ZXIgPSBwb3BvdmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBkb21SZWN0Um93ID0gKGV2ZW50LmN1cnJlbnRUYXJnZXQgYXMgSFRNTEVsZW1lbnQpLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjZWxscyA9IChldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxUYWJsZVJvd0VsZW1lbnQpLmNoaWxkcmVuO1xuXG4gICAgICAgICAgICAgICAgICAgIGlmIChkb21SZWN0UG9wb3ZlciAmJiBkb21SZWN0Um93KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3BvdmVyLnN0eWxlLnZpc2liaWxpdHkgPSAndmlzaWJsZSc7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3BvdmVyLnN0eWxlLnRvcCA9IGAkeyhkb21SZWN0Um93LnRvcCArIGRvbVJlY3RSb3cuaGVpZ2h0KSAtIDF9cHhgO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3RhcnRQb3NpdGlvbjogbnVtYmVyID0gMDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBlbmRQb3NpdGlvbjogbnVtYmVyID0gMDtcblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29sdW1uSW5pdGlhbCAmJiAodGhpcy5jb2x1bW5Jbml0aWFsID49IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjZWxsc1t0aGlzLmNvbHVtbkluaXRpYWxdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW5pdGlhbCBjb2x1bW4gdW5kZWZpbmVkIG9yIG51bGwnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IGNlbGxzW3RoaXMuY29sdW1uSW5pdGlhbF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IGRvbVJlY3RSb3cubGVmdDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29sdW1uRmluYWwgJiYgKHRoaXMuY29sdW1uRmluYWwgPj0gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNlbGxzW3RoaXMuY29sdW1uRmluYWxdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignRmluYWwgY29sdW1uIHVuZGVmaW5lZCBvciBudWxsJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuZFBvc2l0aW9uID0gY2VsbHNbdGhpcy5jb2x1bW5GaW5hbF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIGRvbVJlY3RQb3BvdmVyLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRQb3NpdGlvbiA9IGRvbVJlY3RSb3cucmlnaHQgLSBkb21SZWN0UG9wb3Zlci53aWR0aDtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fbmdab25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGV2ZW50LmNsaWVudFggPiBzdGFydFBvc2l0aW9uICsgMTUgJiYgZXZlbnQuY2xpZW50WCA8IGVuZFBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcG92ZXIuc3R5bGUubGVmdCA9IGAke2V2ZW50LmNsaWVudFggLSAxNX1weGA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5jbGllbnRYIDw9IHN0YXJ0UG9zaXRpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wb3Zlci5zdHlsZS5sZWZ0ID0gYCR7c3RhcnRQb3NpdGlvbn1weGA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5jbGllbnRYID49IGVuZFBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcG92ZXIuc3R5bGUubGVmdCA9IGAke2VuZFBvc2l0aW9ufXB4YDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMucm93SG92ZXIuZW1pdChkYXRhKTtcbiAgICAgICAgdGhpcy5fY29udGV4dFBvcG92ZXIgPSBkYXRhO1xuICAgIH1cblxuICAgIC8qKlxuICAgIHNob3dQb3BvdmVyKGV2ZW50OiBNb3VzZUV2ZW50LCBkYXRhOiBhbnkpOiB2b2lkIHtcbiAgICAgICAgY29uc3QgcG9wb3ZlcjogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFibGUtcG9wb3ZlcicpO1xuICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHBvcG92ZXIpKSB7XG4gICAgICAgICAgICBwb3BvdmVyLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcblxuICAgICAgICAgICAgaWYgKCF0aGlzLmxvYWRpbmcpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBkb21SZWN0UG9wb3ZlciA9IHBvcG92ZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XG4gICAgICAgICAgICAgICAgY29uc3QgZG9tUmVjdFJvdyA9IChldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxFbGVtZW50KS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjZWxscyA9IChldmVudC5jdXJyZW50VGFyZ2V0IGFzIEhUTUxUYWJsZVJvd0VsZW1lbnQpLmNoaWxkcmVuO1xuXG4gICAgICAgICAgICAgICAgaWYgKGRvbVJlY3RQb3BvdmVyICYmIGRvbVJlY3RSb3cpIHtcbiAgICAgICAgICAgICAgICAgICAgcG9wb3Zlci5zdHlsZS52aXNpYmlsaXR5ID0gJ3Zpc2libGUnO1xuICAgICAgICAgICAgICAgICAgICBwb3BvdmVyLnN0eWxlLnRvcCA9IGAkeyhkb21SZWN0Um93LnRvcCArIGRvbVJlY3RSb3cuaGVpZ2h0KSAtIDF9cHhgO1xuXG4gICAgICAgICAgICAgICAgICAgIGxldCBzdGFydFBvc2l0aW9uOiBudW1iZXIgPSAwO1xuICAgICAgICAgICAgICAgICAgICBsZXQgZW5kUG9zaXRpb246IG51bWJlciA9IDA7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29sdW1uSW5pdGlhbCAmJiAodGhpcy5jb2x1bW5Jbml0aWFsID49IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNlbGxzW3RoaXMuY29sdW1uSW5pdGlhbF0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0luaXRpYWwgY29sdW1uIHVuZGVmaW5lZCBvciBudWxsJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBzdGFydFBvc2l0aW9uID0gY2VsbHNbdGhpcy5jb2x1bW5Jbml0aWFsXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RhcnRQb3NpdGlvbiA9IGRvbVJlY3RSb3cubGVmdDtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbHVtbkZpbmFsICYmICh0aGlzLmNvbHVtbkZpbmFsID49IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWNlbGxzW3RoaXMuY29sdW1uRmluYWxdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdGaW5hbCBjb2x1bW4gdW5kZWZpbmVkIG9yIG51bGwnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGVuZFBvc2l0aW9uID0gY2VsbHNbdGhpcy5jb2x1bW5GaW5hbF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkubGVmdCAtIGRvbVJlY3RQb3BvdmVyLndpZHRoO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZW5kUG9zaXRpb24gPSBkb21SZWN0Um93LnJpZ2h0IC0gZG9tUmVjdFBvcG92ZXIud2lkdGg7XG4gICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5jbGllbnRYID4gc3RhcnRQb3NpdGlvbiArIDE1ICYmIGV2ZW50LmNsaWVudFggPCBlbmRQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcG92ZXIuc3R5bGUubGVmdCA9IGAke2V2ZW50LmNsaWVudFggLSAxNX1weGA7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmNsaWVudFggPD0gc3RhcnRQb3NpdGlvbikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcG92ZXIuc3R5bGUubGVmdCA9IGAke3N0YXJ0UG9zaXRpb259cHhgO1xuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC5jbGllbnRYID49IGVuZFBvc2l0aW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9wb3Zlci5zdHlsZS5sZWZ0ID0gYCR7ZW5kUG9zaXRpb259cHhgO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5yb3dIb3Zlci5lbWl0KGRhdGEpO1xuICAgICAgICB0aGlzLl9jb250ZXh0UG9wb3ZlciA9IGRhdGE7XG4gICAgfVxuICAgICovXG5cbiAgICBjbG9zZVBvcG92ZXIodGltZTogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIG9mKG51bGwpLnBpcGUoZGVsYXkodGltZSkpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuX2lzUG9wb3ZlckhvdmVyKSAmJiAhdGhpcy5faXNQb3BvdmVySG92ZXIpIHtcbiAgICAgICAgICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHRoaXMuX2lzUG9wb3ZlckhvdmVyKSAmJiAhT2JqZWN0VXRpbC5pc051bGwodGhpcy5hY3Rpb25zUG9wb3ZlclJlZikpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcG9wb3ZlcjogSFRNTEVsZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGFibGUtcG9wb3ZlcicpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHBvcG92ZXIpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwb3BvdmVyLnN0eWxlLnZpc2liaWxpdHkgPSAnaGlkZGVuJztcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLl9jb250ZXh0UG9wb3ZlciA9IG51bGw7XG4gICAgICAgICAgICAgICAgdGhpcy5faXNQb3BvdmVySG92ZXIgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzZXRTb3J0aW5nRGF0YUFjY2Vzc29yKCk6IHZvaWQge1xuICAgICAgICB0aGlzLl9kYXRhU291cmNlLnNvcnRpbmdEYXRhQWNjZXNzb3IgPSAoZGF0YTogYW55LCBzb3J0SGVhZGVySWQ6IHN0cmluZyk6IHN0cmluZyA9PiB7XG4gICAgICAgICAgICBpZiAodHlwZW9mIGRhdGFbc29ydEhlYWRlcklkXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0YVtzb3J0SGVhZGVySWRdLnRvTG93ZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGF0YVtzb3J0SGVhZGVySWRdO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIGdyb3VwIGhlYWRlclxuICAgIGdlbmVyZXRlR3JvdXBzQnlDb2x1bW4oZGF0YTogYW55W10pOiBUYWJsZUdyb3VwSGVhZGVyRFRPW10ge1xuICAgICAgICBjb25zdCBncm91cHM6IHt9ID0gZGF0YS5yZWR1Y2UoKGdyb3VwLCByb3cpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGFDb2x1bW46IHN0cmluZyA9IHJvd1t0aGlzLmdyb3VwQnlDb2x1bW5dLnRvU3RyaW5nKCk7XG4gICAgICAgICAgICBpZiAoIWdyb3VwW2RhdGFDb2x1bW5dKSB7XG4gICAgICAgICAgICAgICAgZ3JvdXBbZGF0YUNvbHVtbl0gPSBbXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdyb3VwW2RhdGFDb2x1bW5dLnB1c2gocm93KTtcbiAgICAgICAgICAgIHJldHVybiBncm91cDtcbiAgICAgICAgfSwge30pO1xuXG4gICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhncm91cHMpLm1hcChncm91cFZhbHVlID0+IHtcbiAgICAgICAgICAgIHJldHVybiBuZXcgVGFibGVHcm91cEhlYWRlckRUTyhncm91cFZhbHVlLCBncm91cHNbZ3JvdXBWYWx1ZV0sIGdyb3Vwc1tncm91cFZhbHVlXS5sZW5ndGgpO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBnZXRIaWdobGlnaHRSb3cocm93OiBUIHwgVGFibGVHcm91cEhlYWRlckRUTyk6IGJvb2xlYW4ge1xuICAgICAgICBpZiAoIU9iamVjdFV0aWwuaXNOdWxsKHJvdykpIHtcbiAgICAgICAgICAgIGlmICghT2JqZWN0VXRpbC5pc051bGwodGhpcy5oaWdobGlnaHRSb3dGbikpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5oaWdobGlnaHRSb3dGbihyb3cpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBnZXRJbmRleFJvdyhyb3c6IFQgfCBUYWJsZUdyb3VwSGVhZGVyRFRPKTogbnVtYmVyIHtcbiAgICAgICAgaWYgKCFPYmplY3RVdGlsLmlzTnVsbCh0aGlzLl9kYXRhU291cmNlKSAmJiAhQXJyYXlVdGlsLmlzRW1wdHkodGhpcy5fZGF0YVNvdXJjZS5kYXRhKSAmJiAhT2JqZWN0VXRpbC5pc051bGwocm93KSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2RhdGFTb3VyY2UuZGF0YS5maW5kSW5kZXgociA9PiByID09PSByb3cpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLy8gaW5maW5pdGUgc2Nyb2xsXG4gICAgaGFzTW9yZSgpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuICF0aGlzLl9kYXRhU291cmNlIHx8ICh0aGlzLl9kYXRhU291cmNlLmRhdGEubGVuZ3RoIDwgdGhpcy5wYWdpbmF0b3JMZW5ndGgpO1xuICAgIH1cblxuICAgIGhhbmRsZVNjcm9sbChzY3JvbGxlZDogYm9vbGVhbik6IHZvaWQge1xuICAgICAgICBpZiAoc2Nyb2xsZWQgJiYgdGhpcy5oYXNNb3JlKCkpIHtcbiAgICAgICAgICAgIHRoaXMub25QYWdlKHtcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZTogdGhpcy5wYWdpbmF0b3JQYWdlU2l6ZSxcbiAgICAgICAgICAgICAgICBwYWdlSW5kZXg6IHRoaXMucGFnaW5hdG9yUGFnZUluZGV4LFxuICAgICAgICAgICAgICAgIGxlbmd0aDogdGhpcy5wYWdpbmF0b3JMZW5ndGgsXG4gICAgICAgICAgICAgICAgcHJldmlvdXNQYWdlSW5kZXg6IHRoaXMucGFnaW5hdG9yUGFnZUluZGV4LFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIHRoaXMucGFnaW5hdG9yUGFnZUluZGV4ICs9IDE7XG4gICAgICAgIH1cbiAgICB9XG5cbn1cbiJdfQ==