@rivet-health/design-system 11.4.0 → 12.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2020/lib/table/table-csv-export/table-csv-export.component.mjs +4 -3
- package/esm2020/lib/visualization/chart/chart.mjs +36 -5
- package/fesm2015/rivet-health-design-system.mjs +37 -9
- package/fesm2015/rivet-health-design-system.mjs.map +1 -1
- package/fesm2020/rivet-health-design-system.mjs +37 -6
- package/fesm2020/rivet-health-design-system.mjs.map +1 -1
- package/lib/visualization/chart/chart.d.ts +10 -2
- package/lib/visualization/intervals.d.ts +1 -1
- package/package.json +1 -1
|
@@ -4,6 +4,7 @@ import * as i0 from "@angular/core";
|
|
|
4
4
|
import * as i1 from "../../download/download.service";
|
|
5
5
|
import * as i2 from "@angular/common";
|
|
6
6
|
import * as i3 from "../../input/button/button.component";
|
|
7
|
+
import * as i4 from "../../modal/tooltip/tooltip.directive";
|
|
7
8
|
export class TableCsvExportComponent {
|
|
8
9
|
constructor(downloadService, cdr) {
|
|
9
10
|
this.downloadService = downloadService;
|
|
@@ -24,11 +25,11 @@ export class TableCsvExportComponent {
|
|
|
24
25
|
}
|
|
25
26
|
}
|
|
26
27
|
TableCsvExportComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableCsvExportComponent, deps: [{ token: i1.DownloadService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
27
|
-
TableCsvExportComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TableCsvExportComponent, selector: "riv-table-csv-export", inputs: { manager: "manager" }, ngImport: i0, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <button\n type=\"button\"\n rivButton\n [icon]=\"'DownloadCloud'\"\n [loading]=\"loading\"\n (click)=\"downloadCsv(s)\"\n ></button>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
28
|
+
TableCsvExportComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TableCsvExportComponent, selector: "riv-table-csv-export", inputs: { manager: "manager" }, ngImport: i0, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <button\n type=\"button\"\n rivButton\n [rivTooltip]=\"'Export CSV'\"\n [icon]=\"'DownloadCloud'\"\n [loading]=\"loading\"\n (click)=\"downloadCsv(s)\"\n ></button>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: i3.ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition"] }, { kind: "directive", type: i4.TooltipDirective, selector: "[rivTooltip]", inputs: ["rivTooltip", "rivTooltipTheme", "rivTooltipMaxWidth", "rivTooltipPreferredPosition", "rivTooltipCloseDelay"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
28
29
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableCsvExportComponent, decorators: [{
|
|
29
30
|
type: Component,
|
|
30
|
-
args: [{ selector: 'riv-table-csv-export', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <button\n type=\"button\"\n rivButton\n [icon]=\"'DownloadCloud'\"\n [loading]=\"loading\"\n (click)=\"downloadCsv(s)\"\n ></button>\n</ng-container>\n" }]
|
|
31
|
+
args: [{ selector: 'riv-table-csv-export', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <button\n type=\"button\"\n rivButton\n [rivTooltip]=\"'Export CSV'\"\n [icon]=\"'DownloadCloud'\"\n [loading]=\"loading\"\n (click)=\"downloadCsv(s)\"\n ></button>\n</ng-container>\n" }]
|
|
31
32
|
}], ctorParameters: function () { return [{ type: i1.DownloadService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { manager: [{
|
|
32
33
|
type: Input
|
|
33
34
|
}] } });
|
|
34
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
35
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUtY3N2LWV4cG9ydC5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi90YWJsZS90YWJsZS1jc3YtZXhwb3J0L3RhYmxlLWNzdi1leHBvcnQuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvcml2L3NyYy9saWIvdGFibGUvdGFibGUtY3N2LWV4cG9ydC90YWJsZS1jc3YtZXhwb3J0LmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFFdkIsU0FBUyxFQUNULEtBQUssR0FDTixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEtBQUssQ0FBQyxNQUFNLFdBQVcsQ0FBQzs7Ozs7O0FBUy9CLE1BQU0sT0FBTyx1QkFBdUI7SUFRbEMsWUFDbUIsZUFBZ0MsRUFDaEMsR0FBc0I7UUFEdEIsb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBQ2hDLFFBQUcsR0FBSCxHQUFHLENBQW1CO1FBR3pDLFlBQU8sR0FBRyxLQUFLLENBQUM7SUFGYixDQUFDO0lBSUosS0FBSyxDQUFDLFdBQVcsQ0FBQyxLQUFrQztRQUNsRCxJQUFJLEtBQUssRUFBRSxNQUFNLE1BQU0sSUFBSSxLQUFLLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ2pELElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFO2dCQUNoQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQzthQUNyQjtpQkFBTTtnQkFDTCxNQUFNLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUNyQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFDeEQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQ3pCLENBQUM7Z0JBQ0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7YUFDdEI7WUFDRCxJQUFJLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQzs7b0hBNUJVLHVCQUF1Qjt3R0FBdkIsdUJBQXVCLDRGQ2ZwQyxzUUFVQTsyRkRLYSx1QkFBdUI7a0JBTG5DLFNBQVM7K0JBQ0Usc0JBQXNCLG1CQUVmLHVCQUF1QixDQUFDLE1BQU07c0lBUS9DLE9BQU87c0JBRE4sS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBwIGZyb20gJ3BhcGFwYXJzZSc7XG5pbXBvcnQgeyBEb3dubG9hZFNlcnZpY2UgfSBmcm9tICcuLi8uLi9kb3dubG9hZC9kb3dubG9hZC5zZXJ2aWNlJztcbmltcG9ydCB7IFJpdlRhYmxlIH0gZnJvbSAnLi4vc3RhdGUnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdyaXYtdGFibGUtY3N2LWV4cG9ydCcsXG4gIHRlbXBsYXRlVXJsOiAnLi90YWJsZS1jc3YtZXhwb3J0LmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG59KVxuZXhwb3J0IGNsYXNzIFRhYmxlQ3N2RXhwb3J0Q29tcG9uZW50PFxuICBSIGV4dGVuZHMgUml2VGFibGUuUm93LFxuICBDIGV4dGVuZHMgUml2VGFibGUuQ29sdW1uLFxuICBGIGV4dGVuZHMgUml2VGFibGUuRmlsdGVycyxcbj4ge1xuICBASW5wdXQoKVxuICBtYW5hZ2VyPzogUml2VGFibGUuTWFuYWdlcjxSLCBDLCBGPjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvd25sb2FkU2VydmljZTogRG93bmxvYWRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhZG9ubHkgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgKSB7fVxuXG4gIGxvYWRpbmcgPSBmYWxzZTtcblxuICBhc3luYyBkb3dubG9hZENzdihzdGF0ZTogUml2VGFibGUuRnVsbFN0YXRlPFIsIEMsIEY+KSB7XG4gICAgZm9yIGF3YWl0IChjb25zdCBvdXRwdXQgb2Ygc3RhdGUucmVzdWx0LmNzdkRhdGEoKSkge1xuICAgICAgaWYgKCFvdXRwdXQuZGF0YSkge1xuICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgYXdhaXQgdGhpcy5kb3dubG9hZFNlcnZpY2UuZG93bmxvYWRCbG9iKFxuICAgICAgICAgIG5ldyBCbG9iKFtwLnVucGFyc2Uob3V0cHV0LmRhdGEpXSwgeyB0eXBlOiAndGV4dC9jc3YnIH0pLFxuICAgICAgICAgIHN0YXRlLnJlc3VsdC5jc3ZGaWxlbmFtZSxcbiAgICAgICAgKTtcbiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7XG4gICAgICB9XG4gICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICB9XG4gIH1cbn1cbiIsIjxuZy1jb250YWluZXIgKm5nSWY9XCJtYW5hZ2VyPy5zdGF0ZSB8IGFzeW5jOyBsZXQgc1wiPlxuICA8YnV0dG9uXG4gICAgdHlwZT1cImJ1dHRvblwiXG4gICAgcml2QnV0dG9uXG4gICAgW3JpdlRvb2x0aXBdPVwiJ0V4cG9ydCBDU1YnXCJcbiAgICBbaWNvbl09XCInRG93bmxvYWRDbG91ZCdcIlxuICAgIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxuICAgIChjbGljayk9XCJkb3dubG9hZENzdihzKVwiXG4gID48L2J1dHRvbj5cbjwvbmctY29udGFpbmVyPlxuIl19
|
|
@@ -2,6 +2,7 @@ import { CurrencyPipe } from '@angular/common';
|
|
|
2
2
|
import { scaleLinear, scaleUtc } from 'd3-scale';
|
|
3
3
|
import { area, line } from 'd3-shape';
|
|
4
4
|
import { utcFormat } from 'd3-time-format';
|
|
5
|
+
import { DaysPipe } from 'projects/riv/src/public-api';
|
|
5
6
|
import { NumberPipe } from '../../format/pipes/number.pipe';
|
|
6
7
|
import { PercentagePipe } from '../../format/pipes/percentage.pipe';
|
|
7
8
|
import { SmallCurrencyPipe } from '../../format/pipes/small-currency.pipe';
|
|
@@ -41,7 +42,7 @@ export var Chart;
|
|
|
41
42
|
function lines(config, allData, dimensions) {
|
|
42
43
|
const { data, visibleIndices } = hide(allData);
|
|
43
44
|
const xScale = scaleUtc(timeseriesDomain(data), xRange(dimensions));
|
|
44
|
-
const format = config.
|
|
45
|
+
const format = (date) => formatedDate(config.dateFormat || 'day', date);
|
|
45
46
|
const xTicks = xScale.ticks(Math.min(5, data.x.length)).map(tick => ({
|
|
46
47
|
x: xScale(tick),
|
|
47
48
|
label: format(tick),
|
|
@@ -61,6 +62,7 @@ export var Chart;
|
|
|
61
62
|
const visibleYIndex = findNearestIndex(data.ys.map(y => y.values[xIndex]), yScale.invert(pos.y));
|
|
62
63
|
const yIndex = visibleIndices[visibleYIndex];
|
|
63
64
|
const ys = data.ys.map(y => yScale(y.values[xIndex]));
|
|
65
|
+
const format = (date) => formatedDate(config.dateFormat || 'day', date);
|
|
64
66
|
const anchor = new DOMRect(pos.rect.x + x, pos.rect.y + ys[visibleYIndex], 8, 0);
|
|
65
67
|
return {
|
|
66
68
|
x,
|
|
@@ -70,7 +72,7 @@ export var Chart;
|
|
|
70
72
|
visibleYIndex,
|
|
71
73
|
tooltip: {
|
|
72
74
|
anchor,
|
|
73
|
-
date:
|
|
75
|
+
date: format(new Date(data.x[xIndex])),
|
|
74
76
|
metrics: data.ys
|
|
75
77
|
.map((y, index) => ({
|
|
76
78
|
color: colors[index % colors.length],
|
|
@@ -88,7 +90,7 @@ export var Chart;
|
|
|
88
90
|
const { data: unstackedData, visibleIndices } = hide(allData);
|
|
89
91
|
const data = stack(unstackedData);
|
|
90
92
|
const xScale = scaleUtc(timeseriesDomain(data), xRange(dimensions));
|
|
91
|
-
const format = config.
|
|
93
|
+
const format = (date) => formatedDate(config.dateFormat || 'day', date);
|
|
92
94
|
const xTicks = xScale.ticks(Math.min(5, data.x.length)).map(tick => ({
|
|
93
95
|
x: xScale(tick),
|
|
94
96
|
label: format(tick),
|
|
@@ -144,7 +146,7 @@ export var Chart;
|
|
|
144
146
|
const { range: xRange, binSize } = barXRange(dimensions, data);
|
|
145
147
|
const halfBinSize = binSize / 2;
|
|
146
148
|
const xScale = scaleUtc(timeseriesDomain(data), xRange);
|
|
147
|
-
const format = config.
|
|
149
|
+
const format = (date) => formatedDate(config.dateFormat || 'day', date);
|
|
148
150
|
const xTicks = xScale.ticks(Math.min(5, data.x.length)).map(tick => ({
|
|
149
151
|
x: xScale(tick),
|
|
150
152
|
label: format(tick),
|
|
@@ -216,6 +218,7 @@ export var Chart;
|
|
|
216
218
|
zeroStateMessage: 'No data to display.',
|
|
217
219
|
valueType: 'currency',
|
|
218
220
|
truncateLegend: true,
|
|
221
|
+
dateFormat: 'day',
|
|
219
222
|
};
|
|
220
223
|
function timeseriesDomain(data) {
|
|
221
224
|
return [Math.min(...data.x), Math.max(...data.x)];
|
|
@@ -290,8 +293,36 @@ export var Chart;
|
|
|
290
293
|
const pipe = new PercentagePipe();
|
|
291
294
|
return { pipe, fullPipe: pipe };
|
|
292
295
|
}
|
|
296
|
+
case 'days': {
|
|
297
|
+
const pipe = new DaysPipe();
|
|
298
|
+
return { pipe, fullPipe: pipe };
|
|
299
|
+
}
|
|
293
300
|
}
|
|
294
301
|
}
|
|
295
302
|
Chart.getPipes = getPipes;
|
|
303
|
+
Chart.intervals = ['year', 'quarter', 'month', 'week', 'day'];
|
|
304
|
+
function formatedDate(dateFormat, date) {
|
|
305
|
+
if (dateFormat == 'quarter') {
|
|
306
|
+
const quarter = Math.ceil((date.getUTCMonth() + 1) / 3);
|
|
307
|
+
const year = utcFormat(getTimeIntervalFormat('year'))(date);
|
|
308
|
+
return `Q${quarter} ${year}`;
|
|
309
|
+
}
|
|
310
|
+
const format = getTimeIntervalFormat(dateFormat);
|
|
311
|
+
return utcFormat(format)(date);
|
|
312
|
+
}
|
|
313
|
+
Chart.formatedDate = formatedDate;
|
|
314
|
+
function getTimeIntervalFormat(interval) {
|
|
315
|
+
switch (interval) {
|
|
316
|
+
case 'day':
|
|
317
|
+
case 'week':
|
|
318
|
+
return '%m/%d/%Y';
|
|
319
|
+
case 'month':
|
|
320
|
+
case 'quarter':
|
|
321
|
+
return '%b %Y';
|
|
322
|
+
case 'year':
|
|
323
|
+
return '%Y';
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
Chart.getTimeIntervalFormat = getTimeIntervalFormat;
|
|
296
327
|
})(Chart || (Chart = {}));
|
|
297
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi92aXN1YWxpemF0aW9uL2NoYXJ0L2NoYXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN0QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQzVELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUUzRSxNQUFNLEtBQVcsS0FBSyxDQW9jckI7QUFwY0QsV0FBaUIsS0FBSztJQUNQLHlCQUFtQixHQUFHO1FBQ2pDLGFBQWE7UUFDYixpQkFBaUI7UUFDakIsbUJBQW1CO1FBQ25CLFdBQVc7UUFDWCxXQUFXO1FBQ1gsV0FBVztRQUNYLFdBQVc7UUFDWCxnQ0FBZ0M7UUFDaEMsaUJBQWlCO1FBQ2pCLG1CQUFtQjtRQUNuQixXQUFXO1FBQ1gsV0FBVztRQUNYLFdBQVc7UUFDWCxXQUFXO1FBQ1gsK0JBQStCO1FBQy9CLGlCQUFpQjtRQUNqQixtQkFBbUI7UUFDbkIsV0FBVztRQUNYLFdBQVc7UUFDWCxXQUFXO1FBQ1gsV0FBVztLQUNaLENBQUM7SUFFRixTQUFnQixLQUFLLENBQUMsTUFBYyxFQUFFLElBQVUsRUFBRSxVQUFzQjtRQUN0RSxPQUFPLE1BQU0sQ0FBQyxJQUFJLElBQUksTUFBTTtZQUMxQixDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxJQUFJ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LENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBQ3RELE1BQU0sTUFBTSxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDOUQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ2YsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDO1NBQzVCLENBQUMsQ0FBQyxDQUFDO1FBRUosTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QyxNQUFNLE1BQU0sR0FBRyxjQUFjLENBQUMsR0FBRyxDQUMvQixDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQzdDLENBQUM7UUFDRixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUN0QyxJQUFJLENBQ0YsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUN0QixDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUM1RCxDQUFDLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFD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Q0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzFELGNBQWM7U0FDZixDQUFDO0lBQ0osQ0FBQztJQUlELFNBQWdCLFFBQVEsQ0FBQyxTQUFvQjtRQUMzQyxRQUFRLFNBQVMsRUFBRTtZQUNqQixLQUFLLE9BQU8sQ0FBQyxDQUFDO2dCQUNaLE1BQU0sSUFBSSxHQUFHLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQzlCLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDO2FBQ2pDO1lBQ0QsS0FBSyxVQUFVO2dCQUNiLE9BQU87b0JBQ0wsSUFBSSxFQUFFLElBQUksaUJBQWlCLEVBQUU7b0JBQzdCLFFBQVEsRUFBRSxJQUFJLFlBQVksQ0FBQyxPQUFPLENBQUM7aUJBQ3BDLENBQUM7WUFDSixLQUFLLFlBQVksQ0FBQyxDQUFDO2dCQUNqQixNQUFNLElBQUksR0FBRyxJQUFJLGNBQWMsRUFBRSxDQUFDO2dCQUNsQyxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQzthQUNqQztTQUNGO0lBQ0gsQ0FBQztJQWhCZSxjQUFRLFdBZ0J2QixDQUFBO0FBQ0gsQ0FBQyxFQXBjZ0IsS0FBSyxLQUFMLEtBQUssUUFvY3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ3VycmVuY3lQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IHNjYWxlTGluZWFyLCBzY2FsZVV0YyB9IGZyb20gJ2QzLXNjYWxlJztcbmltcG9ydCB7IGFyZWEsIGxpbmUgfSBmcm9tICdkMy1zaGFwZSc7XG5pbXBvcnQgeyB1dGNGb3JtYXQgfSBmcm9tICdkMy10aW1lLWZvcm1hdCc7XG5pbXBvcnQgeyBOdW1iZXJQaXBlIH0gZnJvbSAnLi4vLi4vZm9ybWF0L3BpcGVzL251bWJlci5waXBlJztcbmltcG9ydCB7IFBlcmNlbnRhZ2VQaXBlIH0gZnJvbSAnLi4vLi4vZm9ybWF0L3BpcGVzL3BlcmNlbnRhZ2UucGlwZSc7XG5pbXBvcnQgeyBTbWFsbEN1cnJlbmN5UGlwZSB9IGZyb20gJy4uLy4uL2Zvcm1hdC9waXBlcy9zbWFsbC1jdXJyZW5jeS5waXBlJztcblxuZXhwb3J0IG5hbWVzcGFjZSBDaGFydCB7XG4gIGV4cG9ydCBjb25zdCBkZWZhdWx0Q29sb3JQYWxldHRlID0gW1xuICAgIC8vQmFzZSBjb2xvcnNcbiAgICAnLS1iYWphLWJsYXN0LTUwJyxcbiAgICAnLS10ZWFsLWRpYW1vbmQtNTAnLFxuICAgICctLWZ5cmUtNTAnLFxuICAgICctLXRhbmctNTAnLFxuICAgICctLXB1cnAtNjAnLFxuICAgICctLXJvc2ktNzAnLFxuICAgIC8vU2hpZnQgbGlnaHRlciBmcm9tIGJhc2UgYnkgLTIwXG4gICAgJy0tYmFqYS1ibGFzdC0zMCcsXG4gICAgJy0tdGVhbC1kaWFtb25kLTMwJyxcbiAgICAnLS1meXJlLTMwJyxcbiAgICAnLS10YW5nLTMwJyxcbiAgICAnLS1wdXJwLTQwJyxcbiAgICAnLS1yb3NpLTUwJyxcbiAgICAvL1NoaWZ0IGRhcmtlciBmcm9tIGJhc2UgYnkgKzIwXG4gICAgJy0tYmFqYS1ibGFzdC03MCcsXG4gICAgJy0tdGVhbC1kaWFtb25kLTcwJyxcbiAgICAnLS1meXJlLTcwJyxcbiAgICAnLS10YW5nLTcwJyxcbiAgICAnLS1wdXJwLTgwJyxcbiAgICAnLS1yb3NpLTkwJyxcbiAgXTtcblxuICBleHBvcnQgZnVuY3Rpb24gY2hhcnQoY29uZmlnOiBDb25maWcsIGRhdGE6IERhdGEsIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMpIHtcbiAgICByZXR1cm4gY29uZmlnLnR5cGUgPT0gJ2xpbmUnXG4gICAgICA/IGxpbmVzKGNvbmZpZywgZGF0YSwgZGltZW5zaW9ucylcbiAgICAgIDogY29uZmlnLnR5cGUgPT0gJ2FyZWEnXG4gICAgICA/IGFyZWFzKGNvbmZpZywgZGF0YSwgZGltZW5zaW9ucylcbiAgICAgIDogYmFycyhjb25maWcsIGRhdGEsIGRpbWVuc2lvbnMpO1xuICB9XG4gIGV4cG9ydCBmdW5jdGlvbiBsaW5lcyhcbiAgICBjb25maWc6IENvbmZpZyxcbiAgICBhbGxEYXRhOiBEYXRhLFxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXG4gICk6IFJlbmRlcmVkQ2hhcnQge1xuICAgIGNvbnN0IHsgZGF0YSwgdmlzaWJsZUluZGljZXMgfSA9IGhpZGUoYWxsRGF0YSk7XG4gICAgY29uc3QgeFNjYWxlID0gc2NhbGVVdGModGltZXNlcmllc0RvbWFpbihkYXRhKSwgeFJhbmdlKGRpbWVuc2lvbnMpKTtcbiAgICBjb25zdCBmb3JtYXQgPSBjb25maWcueFRpY2tMYWJlbHMgPz8geFNjYWxlLnRpY2tGb3JtYXQoKTtcbiAgICBjb25zdCB4VGlja3MgPSB4U2NhbGUudGlja3MoTWF0aC5taW4oNSwgZGF0YS54Lmxlbmd0aCkpLm1hcCh0aWNrID0+ICh7XG4gICAgICB4OiB4U2NhbGUodGljayksXG4gICAgICBsYWJlbDogZm9ybWF0KHRpY2spLFxuICAgIH0pKTtcblxuICAgIGNvbnN0IHsgcGlwZSwgZnVsbFBpcGUgfSA9IGdldFBpcGVzKGNvbmZpZy52YWx1ZVR5cGUpO1xuICAgIGNvbnN0IHlTY2FsZSA9IHNjYWxlTGluZWFyKHlEb21haW4oZGF0YSksIHlSYW5nZShkaW1lbnNpb25zKSk7XG4gICAgY29uc3QgeVRpY2tzID0geVNjYWxlLnRpY2tzKDUpLm1hcCh0aWNrID0+ICh7XG4gICAgICB5OiB5U2NhbGUodGljayksXG4gICAgICBsYWJlbDogcGlwZS50cmFuc2Zvcm0odGljayksXG4gICAgfSkpO1xuXG4gICAgY29uc3QgY29sb3JzID0gdmlzaWJsZUluZGljZXMubWFwKFxuICAgICAgaSA9PiBjb25maWcuY29sb3JzW2kgJSBjb25maWcuY29sb3JzLmxlbmd0aF0sXG4gICAgKTtcbiAgICBjb25zdCBpbmRpY2VzID0gZGF0YS54Lm1hcCgoXywgaSkgPT4gaSk7XG4gICAgY29uc3QgbGluZXMgPSBkYXRhLnlzLm1hcCh5ID0+XG4gICAgICBsaW5lPG51bWJlcj4oXG4gICAgICAgIGkgPT4geFNjYWxlKGRhdGEueFtpXSksXG4gICAgICAgIGkgPT4geVNjYWxlKHkudmFsdWVzW2ldKSxcbiAgICAgICkoaW5kaWNlcyksXG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGhvdmVyKHBvczogeyByZWN0OiBET01SZWN0OyB4OiBudW1iZXI7IHk6IG51bWJlciB9KSB7XG4gICAgICBjb25zdCB4SW5kZXggPSBmaW5kTmVhcmVzdEluZGV4KGRhdGEueCwgeFNjYWxlLmludmVydChwb3MueCkuZ2V0VGltZSgpKTtcbiAgICAgIGNvbnN0IHggPSB4U2NhbGUoZGF0YS54W3hJbmRleF0pO1xuICAgICAgY29uc3QgdmlzaWJsZVlJbmRleCA9IGZpbmROZWFyZXN0SW5kZXgoXG4gICAgICAgIGRhdGEueXMubWFwKHkgPT4geS52YWx1ZXNbeEluZGV4XSksXG4gICAgICAgIHlTY2FsZS5pbnZlcnQocG9zLnkpLFxuICAgICAgKTtcbiAgICAgIGNvbnN0IHlJbmRleCA9IHZpc2libGVJbmRpY2VzW3Zpc2libGVZSW5kZXhdO1xuICAgICAgY29uc3QgeXMgPSBkYXRhLnlzLm1hcCh5ID0+IHlTY2FsZSh5LnZhbHVlc1t4SW5kZXhdKSk7XG5cbiAgICAgIGNvbnN0IGFuY2hvciA9IG5ldyBET01SZWN0KFxuICAgICAgICBwb3MucmVjdC54ICsgeCxcbiAgICAgICAgcG9zLnJlY3QueSArIHlzW3Zpc2libGVZSW5kZXhdLFxuICAgICAgICA4LFxuICAgICAgICAwLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHgsXG4gICAgICAgIHhJbmRleCxcbiAgICAgICAgeXMsXG4gICAgICAgIHlJbmRleCxcbiAgICAgICAgdmlzaWJsZVlJbmRleCxcbiAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgIGFuY2hvcixcbiAgICAgICAgICBkYXRlOiB1dGNGb3JtYXQoJyVCICVkLCAlWScpKG5ldyBEYXRlKGRhdGEueFt4SW5kZXhdKSksXG4gICAgICAgICAgbWV0cmljczogZGF0YS55c1xuICAgICAgICAgICAgLm1hcCgoeSwgaW5kZXgpID0+ICh7XG4gICAgICAgICAgICAgIGNvbG9yOiBjb2xvcnNbaW5kZXggJSBjb2xvcnMubGVuZ3RoXSxcbiAgICAgICAgICAgICAgbGFiZWw6IHkubGFiZWwsXG4gICAgICAgICAgICAgIHZhbHVlOiBmdWxsUGlwZS50cmFuc2Zvcm0oeS52YWx1ZXNbeEluZGV4XSkgPz8gJy0nLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAuZmlsdGVyKChfLCBpKSA9PiBjb25maWcuZ3JvdXBlZFRvb2x0aXAgfHwgaSA9PSB2aXNpYmxlWUluZGV4KSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgeFRpY2tzLCB5VGlja3MsIGNvbG9ycywgbGluZXMsIGhvdmVyLCBiYXJzOiBbXSwgYXJlYXM6IFtdIH07XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gYXJlYXMoXG4gICAgY29uZmlnOiBDb25maWcsXG4gICAgYWxsRGF0YTogRGF0YSxcbiAgICBkaW1lbnNpb25zOiBEaW1lbnNpb25zLFxuICApOiBSZW5kZXJlZENoYXJ0IHtcbiAgICBjb25zdCB7IGRhdGE6IHVuc3RhY2tlZERhdGEsIHZpc2libGVJbmRpY2VzIH0gPSBoaWRlKGFsbERhdGEpO1xuICAgIGNvbnN0IGRhdGEgPSBzdGFjayh1bnN0YWNrZWREYXRhKTtcbiAgICBjb25zdCB4U2NhbGUgPSBzY2FsZVV0Yyh0aW1lc2VyaWVzRG9tYWluKGRhdGEpLCB4UmFuZ2UoZGltZW5zaW9ucykpO1xuICAgIGNvbnN0IGZvcm1hdCA9IGNvbmZpZy54VGlja0xhYmVscyA/PyB4U2NhbGUudGlja0Zvcm1hdCgpO1xuICAgIGNvbnN0IHhUaWNrcyA9IHhTY2FsZS50aWNrcyhNYXRoLm1pbig1LCBkYXRhLngubGVuZ3RoKSkubWFwKHRpY2sgPT4gKHtcbiAgICAgIHg6IHhTY2FsZSh0aWNrKSxcbiAgICAgIGxhYmVsOiBmb3JtYXQodGljayksXG4gICAgfSkpO1xuXG4gICAgY29uc3QgeyBwaXBlLCBmdWxsUGlwZSB9ID0gZ2V0UGlwZXMoY29uZmlnLnZhbHVlVHlwZSk7XG4gICAgY29uc3QgeVNjYWxlID0gc2NhbGVMaW5lYXIoeURvbWFpbihkYXRhKSwgeVJhbmdlKGRpbWVuc2lvbnMpKTtcbiAgICBjb25zdCB5VGlja3MgPSB5U2NhbGUudGlja3MoNSkubWFwKHRpY2sgPT4gKHtcbiAgICAgIHk6IHlTY2FsZSh0aWNrKSxcbiAgICAgIGxhYmVsOiBwaXBlLnRyYW5zZm9ybSh0aWNrKSxcbiAgICB9KSk7XG5cbiAgICBjb25zdCBpbmRpY2VzID0gZGF0YS54Lm1hcCgoXywgaSkgPT4gaSk7XG4gICAgY29uc3QgY29sb3JzID0gdmlzaWJsZUluZGljZXMubWFwKFxuICAgICAgaSA9PiBjb25maWcuY29sb3JzW2kgJSBjb25maWcuY29sb3JzLmxlbmd0aF0sXG4gICAgKTtcbiAgICBjb25zdCBhcmVhcyA9IGRhdGEueXMubWFwKCh5LCB5SW5kZXgpID0+XG4gICAgICBhcmVhPG51bWJlcj4oXG4gICAgICAgIGkgPT4geFNjYWxlKGRhdGEueFtpXSksXG4gICAgICAgIGkgPT4geVNjYWxlKHlJbmRleCA9PSAwID8gMCA6IGRhdGEueXNbeUluZGV4IC0gMV0udmFsdWVzW2ldKSxcbiAgICAgICAgaSA9PiB5U2NhbGUoeS52YWx1ZXNbaV0pLFxuICAgICAgKShpbmRpY2VzKSxcbiAgICApO1xuXG4gICAgZnVuY3Rpb24gaG92ZXIocG9zOiB7IHJlY3Q6IERPTVJlY3Q7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0pIHtcbiAgICAgIGNvbnN0IHhJbmRleCA9IGZpbmROZWFyZXN0SW5kZXgoZGF0YS54LCB4U2NhbGUuaW52ZXJ0KHBvcy54KS5nZXRUaW1lKCkpO1xuICAgICAgY29uc3QgeCA9IHhTY2FsZShkYXRhLnhbeEluZGV4XSk7XG4gICAgICBjb25zdCB5VmFsdWUgPSB5U2NhbGUuaW52ZXJ0KHBvcy55KTtcbiAgICAgIGxldCB2aXNpYmxlWUluZGV4ID0gZGF0YS55c1xuICAgICAgICAubWFwKHkgPT4geS52YWx1ZXNbeEluZGV4XSlcbiAgICAgICAgLmZpbmRJbmRleCh5ID0+IHkgPiB5VmFsdWUpO1xuICAgICAgaWYgKHZpc2libGVZSW5kZXggPT0gLTEpIHtcbiAgICAgICAgdmlzaWJsZVlJbmRleCA9IGRhdGEueXMubGVuZ3RoIC0gMTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHlJbmRleCA9IHZpc2libGVJbmRpY2VzW3Zpc2libGVZSW5kZXhdO1xuICAgICAgY29uc3QgeXMgPSBkYXRhLnlzLm1hcCh5ID0+IHlTY2FsZSh5LnZhbHVlc1t4SW5kZXhdKSk7XG4gICAgICBjb25zdCBwYWRkaW5nID0gODtcbiAgICAgIGNvbnN0IGFuY2hvciA9IG5ldyBET01SZWN0KFxuICAgICAgICBwb3MucmVjdC54ICsgeCxcbiAgICAgICAgcG9zLnJlY3QueSArIHlzW3Zpc2libGVZSW5kZXhdLFxuICAgICAgICBwYWRkaW5nLFxuICAgICAgICAwLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHgsXG4gICAgICAgIHhJbmRleCxcbiAgICAgICAgeXMsXG4gICAgICAgIHlJbmRleCxcbiAgICAgICAgdmlzaWJsZVlJbmRleCxcbiAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgIGFuY2hvcixcbiAgICAgICAgICBkYXRlOiB1dGNGb3JtYXQoJyVCICVkLCAlWScpKG5ldyBEYXRlKHVuc3RhY2tlZERhdGEueFt4SW5kZXhdKSksXG4gICAgICAgICAgbWV0cmljczogdW5zdGFja2VkRGF0YS55c1xuICAgICAgICAgICAgLm1hcCgoeSwgaW5kZXgpID0+ICh7XG4gICAgICAgICAgICAgIGNvbG9yOiBjb2xvcnNbaW5kZXggJSBjb2xvcnMubGVuZ3RoXSxcbiAgICAgICAgICAgICAgbGFiZWw6IHkubGFiZWwsXG4gICAgICAgICAgICAgIHZhbHVlOiBmdWxsUGlwZS50cmFuc2Zvcm0oeS52YWx1ZXNbeEluZGV4XSkgPz8gJy0nLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAuZmlsdGVyKChfLCBpKSA9PiBjb25maWcuZ3JvdXBlZFRvb2x0aXAgfHwgaSA9PSB2aXNpYmxlWUluZGV4KSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgeFRpY2tzLCB5VGlja3MsIGNvbG9ycywgYXJlYXMsIGxpbmVzOiBbXSwgaG92ZXIsIGJhcnM6IFtdIH07XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gYmFycyhcbiAgICBjb25maWc6IENvbmZpZyxcbiAgICBhbGxEYXRhOiBEYXRhLFxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXG4gICk6IFJlbmRlcmVkQ2hhcnQge1xuICAgIGNvbnN0IHsgZGF0YTogdW5zdGFja2VkRGF0YSwgdmlzaWJsZUluZGljZXMgfSA9IGhpZGUoYWxsRGF0YSk7XG4gICAgY29uc3QgZGF0YSA9IHN0YWNrKHVuc3RhY2tlZERhdGEpO1xuICAgIGNvbnN0IHsgcmFuZ2U6IHhSYW5nZSwgYmluU2l6ZSB9ID0gYmFyWFJhbmdlKGRpbWVuc2lvbnMsIGRhdGEpO1xuICAgIGNvbnN0IGhhbGZCaW5TaXplID0gYmluU2l6ZSAvIDI7XG4gICAgY29uc3QgeFNjYWxlID0gc2NhbGVVdGModGltZXNlcmllc0RvbWFpbihkYXRhKSwgeFJhbmdlKTtcbiAgICBjb25zdCBmb3JtYXQgPSBjb25maWcueFRpY2tMYWJlbHMgPz8geFNjYWxlLnRpY2tGb3JtYXQoKTtcbiAgICBjb25zdCB4VGlja3MgPSB4U2NhbGUudGlja3MoTWF0aC5taW4oNSwgZGF0YS54Lmxlbmd0aCkpLm1hcCh0aWNrID0+ICh7XG4gICAgICB4OiB4U2NhbGUodGljayksXG4gICAgICBsYWJlbDogZm9ybWF0KHRpY2spLFxuICAgIH0pKTtcblxuICAgIGNvbnN0IHsgcGlwZSwgZnVsbFBpcGUgfSA9IGdldFBpcGVzKGNvbmZpZy52YWx1ZVR5cGUpO1xuICAgIGNvbnN0IHlTY2FsZSA9IHNjYWxlTGluZWFyKHlEb21haW4oZGF0YSksIHlSYW5nZShkaW1lbnNpb25zKSk7XG4gICAgY29uc3QgeVRpY2tzID0geVNjYWxlLnRpY2tzKDUpLm1hcCh0aWNrID0+ICh7XG4gICAgICB5OiB5U2NhbGUodGljayksXG4gICAgICBsYWJlbDogcGlwZS50cmFuc2Zvcm0odGljayksXG4gICAgfSkpO1xuICAgIGNvbnN0IGNvbG9ycyA9IHZpc2libGVJbmRpY2VzLm1hcChcbiAgICAgIGkgPT4gY29uZmlnLmNvbG9yc1tpICUgY29uZmlnLmNvbG9ycy5sZW5ndGhdLFxuICAgICk7XG4gICAgY29uc3QgYmFycyA9IGRhdGEueXMubWFwKCh5LCB5SW5kZXgpID0+XG4gICAgICB5LnZhbHVlcy5tYXAoKHZhbHVlLCBpbmRleCkgPT4ge1xuICAgICAgICBjb25zdCB5VmFsdWUgPSB5U2NhbGUodmFsdWUpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHg6IHhTY2FsZShkYXRhLnhbaW5kZXhdKSAtIGhhbGZCaW5TaXplLFxuICAgICAgICAgIHk6IHlWYWx1ZSxcbiAgICAgICAgICB3aWR0aDogYmluU2l6ZSxcbiAgICAgICAgICBoZWlnaHQ6XG4gICAgICAgICAgICAoeUluZGV4ID09IDBcbiAgICAgICAgICAgICAgPyB5U2NhbGUoMClcbiAgICAgICAgICAgICAgOiB5U2NhbGUoZGF0YS55c1t5SW5kZXggLSAxXS52YWx1ZXNbaW5kZXhdKSkgLSB5VmFsdWUsXG4gICAgICAgIH07XG4gICAgICB9KSxcbiAgICApO1xuXG4gICAgZnVuY3Rpb24gaG92ZXIocG9zOiB7IHJlY3Q6IERPTVJlY3Q7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0pIHtcbiAgICAgIGNvbnN0IHhJbmRleCA9IGZpbmROZWFyZXN0SW5kZXgoZGF0YS54LCB4U2NhbGUuaW52ZXJ0KHBvcy54KS5nZXRUaW1lKCkpO1xuICAgICAgY29uc3QgeCA9IHhTY2FsZShkYXRhLnhbeEluZGV4XSk7XG4gICAgICBjb25zdCB5VmFsdWUgPSB5U2NhbGUuaW52ZXJ0KHBvcy55KTtcbiAgICAgIGxldCB2aXNpYmxlWUluZGV4ID0gZGF0YS55c1xuICAgICAgICAubWFwKHkgPT4geS52YWx1ZXNbeEluZGV4XSlcbiAgICAgICAgLmZpbmRJbmRleCh5ID0+IHkgPiB5VmFsdWUpO1xuICAgICAgaWYgKHZpc2libGVZSW5kZXggPT0gLTEpIHtcbiAgICAgICAgdmlzaWJsZVlJbmRleCA9IGRhdGEueXMubGVuZ3RoIC0gMTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHlJbmRleCA9IHZpc2libGVJbmRpY2VzW3Zpc2libGVZSW5kZXhdO1xuICAgICAgY29uc3QgeXMgPSBkYXRhLnlzLm1hcCh5ID0+IHlTY2FsZSh5LnZhbHVlc1t4SW5kZXhdKSk7XG4gICAgICBjb25zdCBwYWRkaW5nID0gODtcbiAgICAgIGNvbnN0IGFuY2hvciA9IG5ldyBET01SZWN0KFxuICAgICAgICBwb3MucmVjdC54ICsgYmFyc1t2aXNpYmxlWUluZGV4XVt4SW5kZXhdLnggLSBwYWRkaW5nLFxuICAgICAgICBwb3MucmVjdC55ICsgeXNbdmlzaWJsZVlJbmRleF0sXG4gICAgICAgIGJhcnNbdmlzaWJsZVlJbmRleF1beEluZGV4XS53aWR0aCArIHBhZGRpbmcgKiAyLFxuICAgICAgICAodmlzaWJsZVlJbmRleCA9PSAwID8geVNjYWxlKDApIDogeXNbdmlzaWJsZVlJbmRleCAtIDFdKSAtXG4gICAgICAgICAgeXNbdmlzaWJsZVlJbmRleF0sXG4gICAgICApO1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgeCxcbiAgICAgICAgeEluZGV4LFxuICAgICAgICB5cyxcbiAgICAgICAgeUluZGV4LFxuICAgICAgICB2aXNpYmxlWUluZGV4LFxuICAgICAgICB0b29sdGlwOiB7XG4gICAgICAgICAgYW5jaG9yLFxuICAgICAgICAgIGRhdGU6IHV0Y0Zvcm1hdCgnJUIgJWQsICVZJykobmV3IERhdGUodW5zdGFja2VkRGF0YS54W3hJbmRleF0pKSxcbiAgICAgICAgICBtZXRyaWNzOiB1bnN0YWNrZWREYXRhLnlzXG4gICAgICAgICAgICAubWFwKCh5LCBpbmRleCkgPT4gKHtcbiAgICAgICAgICAgICAgY29sb3I6IGNvbG9yc1tpbmRleCAlIGNvbG9ycy5sZW5ndGhdLFxuICAgICAgICAgICAgICBsYWJlbDogeS5sYWJlbCxcbiAgICAgICAgICAgICAgdmFsdWU6IGZ1bGxQaXBlLnRyYW5zZm9ybSh5LnZhbHVlc1t4SW5kZXhdKSA/PyAnLScsXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIC5maWx0ZXIoKF8sIGkpID0+IGNvbmZpZy5ncm91cGVkVG9vbHRpcCB8fCBpID09IHZpc2libGVZSW5kZXgpLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB4VGlja3MsIHlUaWNrcywgY29sb3JzLCBiYXJzLCBsaW5lczogW10sIGFyZWFzOiBbXSwgaG92ZXIgfTtcbiAgfVxuXG4gIGNvbnN0IExFRlRfUEFERElORyA9IDQ4O1xuICBjb25zdCBSSUdIVF9QQURESU5HID0gMjQ7XG4gIGNvbnN0IFRPUF9QQURESU5HID0gMTY7XG4gIGNvbnN0IEJPVFRPTV9QQURESU5HID0gMjQ7XG5cbiAgZXhwb3J0IHR5cGUgRGF0YSA9IHtcbiAgICB5czoge1xuICAgICAgbGFiZWw6IHN0cmluZztcbiAgICAgIGhpZGRlbj86IGJvb2xlYW47XG4gICAgICB2YWx1ZXM6IG51bWJlcltdO1xuICAgIH1bXTtcbiAgICB4OiBudW1iZXJbXTtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBEaW1lbnNpb25zID0ge1xuICAgIHdpZHRoOiBudW1iZXI7XG4gICAgaGVpZ2h0OiBudW1iZXI7XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgQ29uZmlnID0ge1xuICAgIHR5cGU6ICdsaW5lJyB8ICdhcmVhJyB8ICdiYXInO1xuICAgIGdyb3VwZWRUb29sdGlwOiBib29sZWFuO1xuICAgIGNvbG9yczogc3RyaW5nW107XG4gICAgYWxsb3dMZWdlbmRUb2dnbGU6IGJvb2xlYW47XG4gICAgemVyb1N0YXRlTWVzc2FnZTogc3RyaW5nO1xuICAgIHZhbHVlVHlwZTogVmFsdWVUeXBlO1xuICAgIHRydW5jYXRlTGVnZW5kOiBib29sZWFuO1xuICAgIHhUaWNrTGFiZWxzPzogKGRhdGU6IERhdGUpID0+IHN0cmluZztcbiAgfTtcblxuICBleHBvcnQgY29uc3QgZGVmYXVsdENvbmZpZzogQ29uZmlnID0ge1xuICAgIHR5cGU6ICdsaW5lJyxcbiAgICBncm91cGVkVG9vbHRpcDogdHJ1ZSxcbiAgICBjb2xvcnM6IGRlZmF1bHRDb2xvclBhbGV0dGUsXG4gICAgYWxsb3dMZWdlbmRUb2dnbGU6IGZhbHNlLFxuICAgIHplcm9TdGF0ZU1lc3NhZ2U6ICdObyBkYXRhIHRvIGRpc3BsYXkuJyxcbiAgICB2YWx1ZVR5cGU6ICdjdXJyZW5jeScsXG4gICAgdHJ1bmNhdGVMZWdlbmQ6IHRydWUsXG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgQXJlYSA9IHtcbiAgICBwYXRoOiBzdHJpbmcgfCBudWxsO1xuICAgIGZpbGw6IHN0cmluZztcbiAgfTtcblxuICBleHBvcnQgdHlwZSBYVGljayA9IHtcbiAgICB4OiBudW1iZXI7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgfTtcblxuICBleHBvcnQgdHlwZSBZVGljayA9IHtcbiAgICB5OiBudW1iZXI7XG4gICAgbGFiZWw6IHN0cmluZztcbiAgfTtcblxuICB0eXBlIFJlY3QgPSB7XG4gICAgeDogbnVtYmVyO1xuICAgIHk6IG51bWJlcjtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIEJhclNlcmllcyA9IHtcbiAgICBmaWxsOiBzdHJpbmc7XG4gICAgcmVjdHM6IFJlY3RbXTtcbiAgfTtcblxuICAvLyBIb3ZlciBpcyBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSB2aWV3cG9ydCB4IGFuZCB5IGFuZCByZXR1cm5zIGEgcmljaFxuICAvLyBzZXQgb2YgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCB2YWx1ZXMgYXJlIGJlaW5nIGhvdmVyZWQgYW5kIHdoYXQgdGhlIHRvb2x0aXBcbiAgLy8gc2hvdWxkIGxvb2sgbGlrZVxuICBleHBvcnQgdHlwZSBIb3ZlciA9IChwb3M6IHsgcmVjdDogRE9NUmVjdDsgeDogbnVtYmVyOyB5OiBudW1iZXIgfSkgPT4ge1xuICAgIC8vIHRoZSBpbmRpY2VzIGludG8gdGhlIGRhdGEgb2YgdGhlIGNsb3Nlc3QgcG9pbnRcbiAgICB4SW5kZXg6IG51bWJlcjtcbiAgICAvLyB3ZSB3YW50IHRvIGtub3cgd2hpY2ggdmlzaWJsZSB5IGluZGV4IGlzIGhvdmVyZWRcbiAgICAvLyBhbmQgd2hpY2ggYWN0dWFsIHkgaW5kZXggaXMgaG92ZXJlZFxuICAgIHlJbmRleDogbnVtYmVyO1xuICAgIHZpc2libGVZSW5kZXg6IG51bWJlcjtcblxuICAgIC8vIHRoZSB2aWV3cG9ydCB4IGFuZCB5cyBvZiB0aGUgaG92ZXJlZCBpdGVtc1xuICAgIHg6IG51bWJlcjtcbiAgICB5czogbnVtYmVyW107XG5cbiAgICB0b29sdGlwOiB7XG4gICAgICBhbmNob3I6IERPTVJlY3Q7XG4gICAgICBkYXRlOiBzdHJpbmc7XG4gICAgICBtZXRyaWNzOiB7XG4gICAgICAgIGNvbG9yOiBzdHJpbmc7XG4gICAgICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgICAgIHZhbHVlOiBzdHJpbmc7XG4gICAgICB9W107XG4gICAgfTtcbiAgfTtcblxuICAvLyBSZW5kZXJlZENoYXJ0IHJlcHJlc2VudHMgYWxsIG9mIHRoZSBwYXJ0cyBvZiBhIGNoYXJ0XG4gIC8vIHRoYXQgZW5kIHVwIG9uIHNjcmVlbi4gRXZlcnkgY2hhcnQgaGFzIHggYW5kIHkgdGlja3NcbiAgLy8gYW5kIGhvdmVyIGZ1bmN0aW9uYWxpdHksIGV2ZW4gdGhvdWdoIHRoZXkgbWlnaHQgYmVcbiAgLy8gZGlmZmVyZW50IGZyb20gY2hhcnQgdG8gY2hhcnQuXG4gIHR5cGUgUmVuZGVyZWRDaGFydCA9IHtcbiAgICB4VGlja3M6IFhUaWNrW107XG4gICAgeVRpY2tzOiBZVGlja1tdO1xuICAgIGhvdmVyOiBIb3ZlcjtcbiAgICBjb2xvcnM6IHN0cmluZ1tdO1xuICAgIGxpbmVzOiAoc3RyaW5nIHwgbnVsbClbXTtcbiAgICBhcmVhczogKHN0cmluZyB8IG51bGwpW107XG4gICAgYmFyczogUmVjdFtdW107XG4gIH07XG5cbiAgZnVuY3Rpb24gdGltZXNlcmllc0RvbWFpbihkYXRhOiBEYXRhKSB7XG4gICAgcmV0dXJuIFtNYXRoLm1pbiguLi5kYXRhLngpLCBNYXRoLm1heCguLi5kYXRhLngpXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHlEb21haW4oZGF0YTogRGF0YSkge1xuICAgIGNvbnN0IG1heCA9IE1hdGgubWF4KC4uLmRhdGEueXMubWFwKHkgPT4gTWF0aC5tYXgoLi4ueS52YWx1ZXMpKSk7XG4gICAgcmV0dXJuIFswLCBtYXggPT0gMCA/IDEgOiBtYXhdO1xuICB9XG5cbiAgZnVuY3Rpb24geFJhbmdlKGRpbWVuc2lvbnM6IERpbWVuc2lvbnMpIHtcbiAgICByZXR1cm4gW0xFRlRfUEFERElORywgZGltZW5zaW9ucy53aWR0aCAtIFJJR0hUX1BBRERJTkddO1xuICB9XG5cbiAgZnVuY3Rpb24gYmFyWFJhbmdlKGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsIGRhdGE6IERhdGEpIHtcbiAgICBjb25zdCBsZWZ0ID0gTEVGVF9QQURESU5HO1xuICAgIGNvbnN0IHJpZ2h0ID0gZGltZW5zaW9ucy53aWR0aCAtIFJJR0hUX1BBRERJTkc7XG4gICAgY29uc3Qgd2lkdGggPSByaWdodCAtIGxlZnQ7XG4gICAgY29uc3QgYmluU2l6ZSA9IHdpZHRoIC8gKGRhdGEueC5sZW5ndGggfHwgMSk7XG4gICAgY29uc3QgaGFsZkJpblNpemUgPSBiaW5TaXplIC8gMjtcbiAgICBjb25zdCByYW5nZSA9IFtsZWZ0ICsgaGFsZkJpblNpemUsIHJpZ2h0IC0gaGFsZkJpblNpemVdO1xuICAgIHJldHVybiB7IGJpblNpemU6IE1hdGgubWluKGJpblNpemUgKiAwLjcsIDgwKSwgcmFuZ2UgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHlSYW5nZShkaW1lbnNpb25zOiBEaW1lbnNpb25zKSB7XG4gICAgcmV0dXJuIFtkaW1lbnNpb25zLmhlaWdodCAtIEJPVFRPTV9QQURESU5HLCBUT1BfUEFERElOR107XG4gIH1cblxuICBmdW5jdGlvbiBmaW5kTmVhcmVzdEluZGV4KHZhbHVlczogbnVtYmVyW10sIGlucHV0OiBudW1iZXIpIHtcbiAgICByZXR1cm4gdmFsdWVzLnJlZHVjZSgobmVhcmVzdEluZGV4LCB2YWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgIHJldHVybiBNYXRoLmFicyh2YWx1ZSAtIGlucHV0KSA8IE1hdGguYWJzKHZhbHVlc1tuZWFyZXN0SW5kZXhdIC0gaW5wdXQpXG4gICAgICAgID8gaW5kZXhcbiAgICAgICAgOiBuZWFyZXN0SW5kZXg7XG4gICAgfSwgMCk7XG4gIH1cblxuICAvLyBzdGFjayByZXR1cm5zIGEgbmV3IGRhdGEgd2hlcmUgZWFjaCBzZXQgb2YgeVZhbHVlcyBpcyBzdGFja2VkXG4gIC8vIG9uIHRvcCBvZiB0aGUgcHJldmlvdXMuXG4gIGZ1bmN0aW9uIHN0YWNrKGRhdGE6IERhdGEpOiBEYXRhIHtcbiAgICBjb25zdCBzdGFja2VkOiBEYXRhID0ge1xuICAgICAgLi4uZGF0YSxcbiAgICAgIHlzOiBkYXRhLnlzLm1hcCh5ID0+ICh7IGxhYmVsOiB5LmxhYmVsLCB2YWx1ZXM6IFtdIH0pKSxcbiAgICB9O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS54Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBsZXQgZnJvbSA9IDA7XG4gICAgICBmb3IgKGxldCBqID0gMDsgaiA8IGRhdGEueXMubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgY29uc3QgdG8gPSBmcm9tICsgZGF0YS55c1tqXS52YWx1ZXNbaV07XG4gICAgICAgIHN0YWNrZWQueXNbal0udmFsdWVzLnB1c2godG8pO1xuICAgICAgICBmcm9tID0gdG87XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdGFja2VkO1xuICB9XG5cbiAgLy8gaGlkZSBzdHJpcHMgb3V0IGhpZGRlbiB5IHZhbHVlcyB3aGlsZSByZXRhaW5pbmcgdGhlIG9yaWdpbmFsIGluZGljZXNcbiAgLy8gZm9yIHRoZSByZW1haW5pbmcgdmlzaWJsZSB2YWx1ZXNcbiAgZnVuY3Rpb24gaGlkZShkYXRhOiBEYXRhKTogeyBkYXRhOiBEYXRhOyB2aXNpYmxlSW5kaWNlczogbnVtYmVyW10gfSB7XG4gICAgY29uc3QgdmlzaWJsZUluZGljZXMgPSBkYXRhLnlzXG4gICAgICAubWFwKCh5LCBpKSA9PiAoeyB5LCBpIH0pKVxuICAgICAgLmZpbHRlcigoeyB5IH0pID0+ICF5LmhpZGRlbilcbiAgICAgIC5tYXAoKHsgaSB9KSA9PiBpKTtcbiAgICByZXR1cm4ge1xuICAgICAgZGF0YTogeyAuLi5kYXRhLCB5czogdmlzaWJsZUluZGljZXMubWFwKGkgPT4gZGF0YS55c1tpXSkgfSxcbiAgICAgIHZpc2libGVJbmRpY2VzLFxuICAgIH07XG4gIH1cblxuICB0eXBlIFZhbHVlVHlwZSA9ICdjb3VudCcgfCAnY3VycmVuY3knIHwgJ3BlcmNlbnRhZ2UnO1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBnZXRQaXBlcyh2YWx1ZVR5cGU6IFZhbHVlVHlwZSkge1xuICAgIHN3aXRjaCAodmFsdWVUeXBlKSB7XG4gICAgICBjYXNlICdjb3VudCc6IHtcbiAgICAgICAgY29uc3QgcGlwZSA9IG5ldyBOdW1iZXJQaXBlKCk7XG4gICAgICAgIHJldHVybiB7IHBpcGUsIGZ1bGxQaXBlOiBwaXBlIH07XG4gICAgICB9XG4gICAgICBjYXNlICdjdXJyZW5jeSc6XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGlwZTogbmV3IFNtYWxsQ3VycmVuY3lQaXBlKCksXG4gICAgICAgICAgZnVsbFBpcGU6IG5ldyBDdXJyZW5jeVBpcGUoJ2VuLXVzJyksXG4gICAgICAgIH07XG4gICAgICBjYXNlICdwZXJjZW50YWdlJzoge1xuICAgICAgICBjb25zdCBwaXBlID0gbmV3IFBlcmNlbnRhZ2VQaXBlKCk7XG4gICAgICAgIHJldHVybiB7IHBpcGUsIGZ1bGxQaXBlOiBwaXBlIH07XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
328
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9yaXYvc3JjL2xpYi92aXN1YWxpemF0aW9uL2NoYXJ0L2NoYXJ0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNqRCxPQUFPLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUN0QyxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0MsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUM1RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDcEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFM0UsTUFBTSxLQUFXLEtBQUssQ0EwZXJCO0FBMWVELFdBQWlCLEtBQUs7SUFDUCx5QkFBbUIsR0FBRztRQUNqQyxhQUFhO1FBQ2IsaUJBQWlCO1FBQ2pCLG1CQUFtQjtRQUNuQixXQUFXO1FBQ1gsV0FBVztRQUNYLFdBQVc7UUFDWCxXQUFXO1FBQ1gsZ0NBQWdDO1FBQ2hDLGlCQUFpQjtRQUNqQixtQkFBbUI7UUFDbkIsV0FBVztRQUNYLFdBQVc7UUFDWCxXQUFXO1FBQ1gsV0FBVztRQUNYLCtCQUErQjtRQUMvQixpQkFBaUI7UUFDakIsbUJBQW1CO1FBQ25CLFdBQVc7UUFDWCxXQUFXO1FBQ1gsV0FBVztRQUNYLFdBQVc7S0FDWixDQUFDO0lBRUYsU0FBZ0IsS0FBSyxDQUFDLE1BQWMsRUFBRSxJQUFVLEVBQUUsVUFBc0I7UUFDdEUsT0FBTyxNQUFNLENBQUMsSUFBSSxJQUFJLE1B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QUcsQ0FBQyxNQUFNLEVBQUUsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFVLENBQUM7SUFHOUUsU0FBZ0IsWUFBWSxDQUFDLFVBQW9CLEVBQUUsSUFBVTtRQUMzRCxJQUFJLFVBQVUsSUFBSSxTQUFTLEVBQUU7WUFDM0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztZQUN4RCxNQUFNLElBQUksR0FBRyxTQUFTLENBQUMscUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUM1RCxPQUFPLElBQUksT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO1NBQzlCO1FBQ0QsTUFBTSxNQUFNLEdBQUcscUJBQXFCLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakQsT0FBTyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDakMsQ0FBQztJQVJlLGtCQUFZLGVBUTNCLENBQUE7SUFFRCxTQUFnQixxQkFBcUIsQ0FBQyxRQUFrQjtRQUN0RCxRQUFRLFFBQVEsRUFBRTtZQUNoQixLQUFLLEtBQUssQ0FBQztZQUNYLEtBQUssTUFBTTtnQkFDVCxPQUFPLFVBQVUsQ0FBQztZQUNwQixLQUFLLE9BQU8sQ0FBQztZQUNiLEtBQUssU0FBUztnQkFDWixPQUFPLE9BQU8sQ0FBQztZQUNqQixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxJQUFJLENBQUM7U0FDZjtJQUNILENBQUM7SUFYZSwyQkFBcUIsd0JBV3BDLENBQUE7QUFDSCxDQUFDLEVBMWVnQixLQUFLLEtBQUwsS0FBSyxRQTBlckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDdXJyZW5jeVBpcGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgc2NhbGVMaW5lYXIsIHNjYWxlVXRjIH0gZnJvbSAnZDMtc2NhbGUnO1xuaW1wb3J0IHsgYXJlYSwgbGluZSB9IGZyb20gJ2QzLXNoYXBlJztcbmltcG9ydCB7IHV0Y0Zvcm1hdCB9IGZyb20gJ2QzLXRpbWUtZm9ybWF0JztcbmltcG9ydCB7IERheXNQaXBlIH0gZnJvbSAncHJvamVjdHMvcml2L3NyYy9wdWJsaWMtYXBpJztcbmltcG9ydCB7IE51bWJlclBpcGUgfSBmcm9tICcuLi8uLi9mb3JtYXQvcGlwZXMvbnVtYmVyLnBpcGUnO1xuaW1wb3J0IHsgUGVyY2VudGFnZVBpcGUgfSBmcm9tICcuLi8uLi9mb3JtYXQvcGlwZXMvcGVyY2VudGFnZS5waXBlJztcbmltcG9ydCB7IFNtYWxsQ3VycmVuY3lQaXBlIH0gZnJvbSAnLi4vLi4vZm9ybWF0L3BpcGVzL3NtYWxsLWN1cnJlbmN5LnBpcGUnO1xuXG5leHBvcnQgbmFtZXNwYWNlIENoYXJ0IHtcbiAgZXhwb3J0IGNvbnN0IGRlZmF1bHRDb2xvclBhbGV0dGUgPSBbXG4gICAgLy9CYXNlIGNvbG9yc1xuICAgICctLWJhamEtYmxhc3QtNTAnLFxuICAgICctLXRlYWwtZGlhbW9uZC01MCcsXG4gICAgJy0tZnlyZS01MCcsXG4gICAgJy0tdGFuZy01MCcsXG4gICAgJy0tcHVycC02MCcsXG4gICAgJy0tcm9zaS03MCcsXG4gICAgLy9TaGlmdCBsaWdodGVyIGZyb20gYmFzZSBieSAtMjBcbiAgICAnLS1iYWphLWJsYXN0LTMwJyxcbiAgICAnLS10ZWFsLWRpYW1vbmQtMzAnLFxuICAgICctLWZ5cmUtMzAnLFxuICAgICctLXRhbmctMzAnLFxuICAgICctLXB1cnAtNDAnLFxuICAgICctLXJvc2ktNTAnLFxuICAgIC8vU2hpZnQgZGFya2VyIGZyb20gYmFzZSBieSArMjBcbiAgICAnLS1iYWphLWJsYXN0LTcwJyxcbiAgICAnLS10ZWFsLWRpYW1vbmQtNzAnLFxuICAgICctLWZ5cmUtNzAnLFxuICAgICctLXRhbmctNzAnLFxuICAgICctLXB1cnAtODAnLFxuICAgICctLXJvc2ktOTAnLFxuICBdO1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBjaGFydChjb25maWc6IENvbmZpZywgZGF0YTogRGF0YSwgZGltZW5zaW9uczogRGltZW5zaW9ucykge1xuICAgIHJldHVybiBjb25maWcudHlwZSA9PSAnbGluZSdcbiAgICAgID8gbGluZXMoY29uZmlnLCBkYXRhLCBkaW1lbnNpb25zKVxuICAgICAgOiBjb25maWcudHlwZSA9PSAnYXJlYSdcbiAgICAgID8gYXJlYXMoY29uZmlnLCBkYXRhLCBkaW1lbnNpb25zKVxuICAgICAgOiBiYXJzKGNvbmZpZywgZGF0YSwgZGltZW5zaW9ucyk7XG4gIH1cbiAgZXhwb3J0IGZ1bmN0aW9uIGxpbmVzKFxuICAgIGNvbmZpZzogQ29uZmlnLFxuICAgIGFsbERhdGE6IERhdGEsXG4gICAgZGltZW5zaW9uczogRGltZW5zaW9ucyxcbiAgKTogUmVuZGVyZWRDaGFydCB7XG4gICAgY29uc3QgeyBkYXRhLCB2aXNpYmxlSW5kaWNlcyB9ID0gaGlkZShhbGxEYXRhKTtcbiAgICBjb25zdCB4U2NhbGUgPSBzY2FsZVV0Yyh0aW1lc2VyaWVzRG9tYWluKGRhdGEpLCB4UmFuZ2UoZGltZW5zaW9ucykpO1xuICAgIGNvbnN0IGZvcm1hdCA9IChkYXRlOiBEYXRlKSA9PlxuICAgICAgZm9ybWF0ZWREYXRlKGNvbmZpZy5kYXRlRm9ybWF0IHx8ICdkYXknLCBkYXRlKTtcblxuICAgIGNvbnN0IHhUaWNrcyA9IHhTY2FsZS50aWNrcyhNYXRoLm1pbig1LCBkYXRhLngubGVuZ3RoKSkubWFwKHRpY2sgPT4gKHtcbiAgICAgIHg6IHhTY2FsZSh0aWNrKSxcbiAgICAgIGxhYmVsOiBmb3JtYXQodGljayksXG4gICAgfSkpO1xuXG4gICAgY29uc3QgeyBwaXBlLCBmdWxsUGlwZSB9ID0gZ2V0UGlwZXMoY29uZmlnLnZhbHVlVHlwZSk7XG4gICAgY29uc3QgeVNjYWxlID0gc2NhbGVMaW5lYXIoeURvbWFpbihkYXRhKSwgeVJhbmdlKGRpbWVuc2lvbnMpKTtcbiAgICBjb25zdCB5VGlja3MgPSB5U2NhbGUudGlja3MoNSkubWFwKHRpY2sgPT4gKHtcbiAgICAgIHk6IHlTY2FsZSh0aWNrKSxcbiAgICAgIGxhYmVsOiBwaXBlLnRyYW5zZm9ybSh0aWNrKSxcbiAgICB9KSk7XG5cbiAgICBjb25zdCBjb2xvcnMgPSB2aXNpYmxlSW5kaWNlcy5tYXAoXG4gICAgICBpID0+IGNvbmZpZy5jb2xvcnNbaSAlIGNvbmZpZy5jb2xvcnMubGVuZ3RoXSxcbiAgICApO1xuICAgIGNvbnN0IGluZGljZXMgPSBkYXRhLngubWFwKChfLCBpKSA9PiBpKTtcbiAgICBjb25zdCBsaW5lcyA9IGRhdGEueXMubWFwKHkgPT5cbiAgICAgIGxpbmU8bnVtYmVyPihcbiAgICAgICAgaSA9PiB4U2NhbGUoZGF0YS54W2ldKSxcbiAgICAgICAgaSA9PiB5U2NhbGUoeS52YWx1ZXNbaV0pLFxuICAgICAgKShpbmRpY2VzKSxcbiAgICApO1xuXG4gICAgZnVuY3Rpb24gaG92ZXIocG9zOiB7IHJlY3Q6IERPTVJlY3Q7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0pIHtcbiAgICAgIGNvbnN0IHhJbmRleCA9IGZpbmROZWFyZXN0SW5kZXgoZGF0YS54LCB4U2NhbGUuaW52ZXJ0KHBvcy54KS5nZXRUaW1lKCkpO1xuICAgICAgY29uc3QgeCA9IHhTY2FsZShkYXRhLnhbeEluZGV4XSk7XG4gICAgICBjb25zdCB2aXNpYmxlWUluZGV4ID0gZmluZE5lYXJlc3RJbmRleChcbiAgICAgICAgZGF0YS55cy5tYXAoeSA9PiB5LnZhbHVlc1t4SW5kZXhdKSxcbiAgICAgICAgeVNjYWxlLmludmVydChwb3MueSksXG4gICAgICApO1xuICAgICAgY29uc3QgeUluZGV4ID0gdmlzaWJsZUluZGljZXNbdmlzaWJsZVlJbmRleF07XG4gICAgICBjb25zdCB5cyA9IGRhdGEueXMubWFwKHkgPT4geVNjYWxlKHkudmFsdWVzW3hJbmRleF0pKTtcblxuICAgICAgY29uc3QgZm9ybWF0ID0gKGRhdGU6IERhdGUpID0+XG4gICAgICAgIGZvcm1hdGVkRGF0ZShjb25maWcuZGF0ZUZvcm1hdCB8fCAnZGF5JywgZGF0ZSk7XG5cbiAgICAgIGNvbnN0IGFuY2hvciA9IG5ldyBET01SZWN0KFxuICAgICAgICBwb3MucmVjdC54ICsgeCxcbiAgICAgICAgcG9zLnJlY3QueSArIHlzW3Zpc2libGVZSW5kZXhdLFxuICAgICAgICA4LFxuICAgICAgICAwLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHgsXG4gICAgICAgIHhJbmRleCxcbiAgICAgICAgeXMsXG4gICAgICAgIHlJbmRleCxcbiAgICAgICAgdmlzaWJsZVlJbmRleCxcbiAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgIGFuY2hvcixcbiAgICAgICAgICBkYXRlOiBmb3JtYXQobmV3IERhdGUoZGF0YS54W3hJbmRleF0pKSxcbiAgICAgICAgICBtZXRyaWNzOiBkYXRhLnlzXG4gICAgICAgICAgICAubWFwKCh5LCBpbmRleCkgPT4gKHtcbiAgICAgICAgICAgICAgY29sb3I6IGNvbG9yc1tpbmRleCAlIGNvbG9ycy5sZW5ndGhdLFxuICAgICAgICAgICAgICBsYWJlbDogeS5sYWJlbCxcbiAgICAgICAgICAgICAgdmFsdWU6IGZ1bGxQaXBlLnRyYW5zZm9ybSh5LnZhbHVlc1t4SW5kZXhdKSA/PyAnLScsXG4gICAgICAgICAgICB9KSlcbiAgICAgICAgICAgIC5maWx0ZXIoKF8sIGkpID0+IGNvbmZpZy5ncm91cGVkVG9vbHRpcCB8fCBpID09IHZpc2libGVZSW5kZXgpLFxuICAgICAgICB9LFxuICAgICAgfTtcbiAgICB9XG5cbiAgICByZXR1cm4geyB4VGlja3MsIHlUaWNrcywgY29sb3JzLCBsaW5lcywgaG92ZXIsIGJhcnM6IFtdLCBhcmVhczogW10gfTtcbiAgfVxuXG4gIGV4cG9ydCBmdW5jdGlvbiBhcmVhcyhcbiAgICBjb25maWc6IENvbmZpZyxcbiAgICBhbGxEYXRhOiBEYXRhLFxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXG4gICk6IFJlbmRlcmVkQ2hhcnQge1xuICAgIGNvbnN0IHsgZGF0YTogdW5zdGFja2VkRGF0YSwgdmlzaWJsZUluZGljZXMgfSA9IGhpZGUoYWxsRGF0YSk7XG4gICAgY29uc3QgZGF0YSA9IHN0YWNrKHVuc3RhY2tlZERhdGEpO1xuICAgIGNvbnN0IHhTY2FsZSA9IHNjYWxlVXRjKHRpbWVzZXJpZXNEb21haW4oZGF0YSksIHhSYW5nZShkaW1lbnNpb25zKSk7XG4gICAgY29uc3QgZm9ybWF0ID0gKGRhdGU6IERhdGUpID0+XG4gICAgICBmb3JtYXRlZERhdGUoY29uZmlnLmRhdGVGb3JtYXQgfHwgJ2RheScsIGRhdGUpO1xuICAgIGNvbnN0IHhUaWNrcyA9IHhTY2FsZS50aWNrcyhNYXRoLm1pbig1LCBkYXRhLngubGVuZ3RoKSkubWFwKHRpY2sgPT4gKHtcbiAgICAgIHg6IHhTY2FsZSh0aWNrKSxcbiAgICAgIGxhYmVsOiBmb3JtYXQodGljayksXG4gICAgfSkpO1xuXG4gICAgY29uc3QgeyBwaXBlLCBmdWxsUGlwZSB9ID0gZ2V0UGlwZXMoY29uZmlnLnZhbHVlVHlwZSk7XG4gICAgY29uc3QgeVNjYWxlID0gc2NhbGVMaW5lYXIoeURvbWFpbihkYXRhKSwgeVJhbmdlKGRpbWVuc2lvbnMpKTtcbiAgICBjb25zdCB5VGlja3MgPSB5U2NhbGUudGlja3MoNSkubWFwKHRpY2sgPT4gKHtcbiAgICAgIHk6IHlTY2FsZSh0aWNrKSxcbiAgICAgIGxhYmVsOiBwaXBlLnRyYW5zZm9ybSh0aWNrKSxcbiAgICB9KSk7XG5cbiAgICBjb25zdCBpbmRpY2VzID0gZGF0YS54Lm1hcCgoXywgaSkgPT4gaSk7XG4gICAgY29uc3QgY29sb3JzID0gdmlzaWJsZUluZGljZXMubWFwKFxuICAgICAgaSA9PiBjb25maWcuY29sb3JzW2kgJSBjb25maWcuY29sb3JzLmxlbmd0aF0sXG4gICAgKTtcbiAgICBjb25zdCBhcmVhcyA9IGRhdGEueXMubWFwKCh5LCB5SW5kZXgpID0+XG4gICAgICBhcmVhPG51bWJlcj4oXG4gICAgICAgIGkgPT4geFNjYWxlKGRhdGEueFtpXSksXG4gICAgICAgIGkgPT4geVNjYWxlKHlJbmRleCA9PSAwID8gMCA6IGRhdGEueXNbeUluZGV4IC0gMV0udmFsdWVzW2ldKSxcbiAgICAgICAgaSA9PiB5U2NhbGUoeS52YWx1ZXNbaV0pLFxuICAgICAgKShpbmRpY2VzKSxcbiAgICApO1xuXG4gICAgZnVuY3Rpb24gaG92ZXIocG9zOiB7IHJlY3Q6IERPTVJlY3Q7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0pIHtcbiAgICAgIGNvbnN0IHhJbmRleCA9IGZpbmROZWFyZXN0SW5kZXgoZGF0YS54LCB4U2NhbGUuaW52ZXJ0KHBvcy54KS5nZXRUaW1lKCkpO1xuICAgICAgY29uc3QgeCA9IHhTY2FsZShkYXRhLnhbeEluZGV4XSk7XG4gICAgICBjb25zdCB5VmFsdWUgPSB5U2NhbGUuaW52ZXJ0KHBvcy55KTtcbiAgICAgIGxldCB2aXNpYmxlWUluZGV4ID0gZGF0YS55c1xuICAgICAgICAubWFwKHkgPT4geS52YWx1ZXNbeEluZGV4XSlcbiAgICAgICAgLmZpbmRJbmRleCh5ID0+IHkgPiB5VmFsdWUpO1xuICAgICAgaWYgKHZpc2libGVZSW5kZXggPT0gLTEpIHtcbiAgICAgICAgdmlzaWJsZVlJbmRleCA9IGRhdGEueXMubGVuZ3RoIC0gMTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHlJbmRleCA9IHZpc2libGVJbmRpY2VzW3Zpc2libGVZSW5kZXhdO1xuICAgICAgY29uc3QgeXMgPSBkYXRhLnlzLm1hcCh5ID0+IHlTY2FsZSh5LnZhbHVlc1t4SW5kZXhdKSk7XG4gICAgICBjb25zdCBwYWRkaW5nID0gODtcbiAgICAgIGNvbnN0IGFuY2hvciA9IG5ldyBET01SZWN0KFxuICAgICAgICBwb3MucmVjdC54ICsgeCxcbiAgICAgICAgcG9zLnJlY3QueSArIHlzW3Zpc2libGVZSW5kZXhdLFxuICAgICAgICBwYWRkaW5nLFxuICAgICAgICAwLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHgsXG4gICAgICAgIHhJbmRleCxcbiAgICAgICAgeXMsXG4gICAgICAgIHlJbmRleCxcbiAgICAgICAgdmlzaWJsZVlJbmRleCxcbiAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgIGFuY2hvcixcbiAgICAgICAgICBkYXRlOiB1dGNGb3JtYXQoJyVCICVkLCAlWScpKG5ldyBEYXRlKHVuc3RhY2tlZERhdGEueFt4SW5kZXhdKSksXG4gICAgICAgICAgbWV0cmljczogdW5zdGFja2VkRGF0YS55c1xuICAgICAgICAgICAgLm1hcCgoeSwgaW5kZXgpID0+ICh7XG4gICAgICAgICAgICAgIGNvbG9yOiBjb2xvcnNbaW5kZXggJSBjb2xvcnMubGVuZ3RoXSxcbiAgICAgICAgICAgICAgbGFiZWw6IHkubGFiZWwsXG4gICAgICAgICAgICAgIHZhbHVlOiBmdWxsUGlwZS50cmFuc2Zvcm0oeS52YWx1ZXNbeEluZGV4XSkgPz8gJy0nLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAuZmlsdGVyKChfLCBpKSA9PiBjb25maWcuZ3JvdXBlZFRvb2x0aXAgfHwgaSA9PSB2aXNpYmxlWUluZGV4KSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgeFRpY2tzLCB5VGlja3MsIGNvbG9ycywgYXJlYXMsIGxpbmVzOiBbXSwgaG92ZXIsIGJhcnM6IFtdIH07XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gYmFycyhcbiAgICBjb25maWc6IENvbmZpZyxcbiAgICBhbGxEYXRhOiBEYXRhLFxuICAgIGRpbWVuc2lvbnM6IERpbWVuc2lvbnMsXG4gICk6IFJlbmRlcmVkQ2hhcnQge1xuICAgIGNvbnN0IHsgZGF0YTogdW5zdGFja2VkRGF0YSwgdmlzaWJsZUluZGljZXMgfSA9IGhpZGUoYWxsRGF0YSk7XG4gICAgY29uc3QgZGF0YSA9IHN0YWNrKHVuc3RhY2tlZERhdGEpO1xuICAgIGNvbnN0IHsgcmFuZ2U6IHhSYW5nZSwgYmluU2l6ZSB9ID0gYmFyWFJhbmdlKGRpbWVuc2lvbnMsIGRhdGEpO1xuICAgIGNvbnN0IGhhbGZCaW5TaXplID0gYmluU2l6ZSAvIDI7XG4gICAgY29uc3QgeFNjYWxlID0gc2NhbGVVdGModGltZXNlcmllc0RvbWFpbihkYXRhKSwgeFJhbmdlKTtcbiAgICBjb25zdCBmb3JtYXQgPSAoZGF0ZTogRGF0ZSkgPT5cbiAgICAgIGZvcm1hdGVkRGF0ZShjb25maWcuZGF0ZUZvcm1hdCB8fCAnZGF5JywgZGF0ZSk7XG4gICAgY29uc3QgeFRpY2tzID0geFNjYWxlLnRpY2tzKE1hdGgubWluKDUsIGRhdGEueC5sZW5ndGgpKS5tYXAodGljayA9PiAoe1xuICAgICAgeDogeFNjYWxlKHRpY2spLFxuICAgICAgbGFiZWw6IGZvcm1hdCh0aWNrKSxcbiAgICB9KSk7XG5cbiAgICBjb25zdCB7IHBpcGUsIGZ1bGxQaXBlIH0gPSBnZXRQaXBlcyhjb25maWcudmFsdWVUeXBlKTtcbiAgICBjb25zdCB5U2NhbGUgPSBzY2FsZUxpbmVhcih5RG9tYWluKGRhdGEpLCB5UmFuZ2UoZGltZW5zaW9ucykpO1xuICAgIGNvbnN0IHlUaWNrcyA9IHlTY2FsZS50aWNrcyg1KS5tYXAodGljayA9PiAoe1xuICAgICAgeTogeVNjYWxlKHRpY2spLFxuICAgICAgbGFiZWw6IHBpcGUudHJhbnNmb3JtKHRpY2spLFxuICAgIH0pKTtcbiAgICBjb25zdCBjb2xvcnMgPSB2aXNpYmxlSW5kaWNlcy5tYXAoXG4gICAgICBpID0+IGNvbmZpZy5jb2xvcnNbaSAlIGNvbmZpZy5jb2xvcnMubGVuZ3RoXSxcbiAgICApO1xuICAgIGNvbnN0IGJhcnMgPSBkYXRhLnlzLm1hcCgoeSwgeUluZGV4KSA9PlxuICAgICAgeS52YWx1ZXMubWFwKCh2YWx1ZSwgaW5kZXgpID0+IHtcbiAgICAgICAgY29uc3QgeVZhbHVlID0geVNjYWxlKHZhbHVlKTtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB4OiB4U2NhbGUoZGF0YS54W2luZGV4XSkgLSBoYWxmQmluU2l6ZSxcbiAgICAgICAgICB5OiB5VmFsdWUsXG4gICAgICAgICAgd2lkdGg6IGJpblNpemUsXG4gICAgICAgICAgaGVpZ2h0OlxuICAgICAgICAgICAgKHlJbmRleCA9PSAwXG4gICAgICAgICAgICAgID8geVNjYWxlKDApXG4gICAgICAgICAgICAgIDogeVNjYWxlKGRhdGEueXNbeUluZGV4IC0gMV0udmFsdWVzW2luZGV4XSkpIC0geVZhbHVlLFxuICAgICAgICB9O1xuICAgICAgfSksXG4gICAgKTtcblxuICAgIGZ1bmN0aW9uIGhvdmVyKHBvczogeyByZWN0OiBET01SZWN0OyB4OiBudW1iZXI7IHk6IG51bWJlciB9KSB7XG4gICAgICBjb25zdCB4SW5kZXggPSBmaW5kTmVhcmVzdEluZGV4KGRhdGEueCwgeFNjYWxlLmludmVydChwb3MueCkuZ2V0VGltZSgpKTtcbiAgICAgIGNvbnN0IHggPSB4U2NhbGUoZGF0YS54W3hJbmRleF0pO1xuICAgICAgY29uc3QgeVZhbHVlID0geVNjYWxlLmludmVydChwb3MueSk7XG4gICAgICBsZXQgdmlzaWJsZVlJbmRleCA9IGRhdGEueXNcbiAgICAgICAgLm1hcCh5ID0+IHkudmFsdWVzW3hJbmRleF0pXG4gICAgICAgIC5maW5kSW5kZXgoeSA9PiB5ID4geVZhbHVlKTtcbiAgICAgIGlmICh2aXNpYmxlWUluZGV4ID09IC0xKSB7XG4gICAgICAgIHZpc2libGVZSW5kZXggPSBkYXRhLnlzLmxlbmd0aCAtIDE7XG4gICAgICB9XG4gICAgICBjb25zdCB5SW5kZXggPSB2aXNpYmxlSW5kaWNlc1t2aXNpYmxlWUluZGV4XTtcbiAgICAgIGNvbnN0IHlzID0gZGF0YS55cy5tYXAoeSA9PiB5U2NhbGUoeS52YWx1ZXNbeEluZGV4XSkpO1xuICAgICAgY29uc3QgcGFkZGluZyA9IDg7XG4gICAgICBjb25zdCBhbmNob3IgPSBuZXcgRE9NUmVjdChcbiAgICAgICAgcG9zLnJlY3QueCArIGJhcnNbdmlzaWJsZVlJbmRleF1beEluZGV4XS54IC0gcGFkZGluZyxcbiAgICAgICAgcG9zLnJlY3QueSArIHlzW3Zpc2libGVZSW5kZXhdLFxuICAgICAgICBiYXJzW3Zpc2libGVZSW5kZXhdW3hJbmRleF0ud2lkdGggKyBwYWRkaW5nICogMixcbiAgICAgICAgKHZpc2libGVZSW5kZXggPT0gMCA/IHlTY2FsZSgwKSA6IHlzW3Zpc2libGVZSW5kZXggLSAxXSkgLVxuICAgICAgICAgIHlzW3Zpc2libGVZSW5kZXhdLFxuICAgICAgKTtcbiAgICAgIHJldHVybiB7XG4gICAgICAgIHgsXG4gICAgICAgIHhJbmRleCxcbiAgICAgICAgeXMsXG4gICAgICAgIHlJbmRleCxcbiAgICAgICAgdmlzaWJsZVlJbmRleCxcbiAgICAgICAgdG9vbHRpcDoge1xuICAgICAgICAgIGFuY2hvcixcbiAgICAgICAgICBkYXRlOiB1dGNGb3JtYXQoJyVCICVkLCAlWScpKG5ldyBEYXRlKHVuc3RhY2tlZERhdGEueFt4SW5kZXhdKSksXG4gICAgICAgICAgbWV0cmljczogdW5zdGFja2VkRGF0YS55c1xuICAgICAgICAgICAgLm1hcCgoeSwgaW5kZXgpID0+ICh7XG4gICAgICAgICAgICAgIGNvbG9yOiBjb2xvcnNbaW5kZXggJSBjb2xvcnMubGVuZ3RoXSxcbiAgICAgICAgICAgICAgbGFiZWw6IHkubGFiZWwsXG4gICAgICAgICAgICAgIHZhbHVlOiBmdWxsUGlwZS50cmFuc2Zvcm0oeS52YWx1ZXNbeEluZGV4XSkgPz8gJy0nLFxuICAgICAgICAgICAgfSkpXG4gICAgICAgICAgICAuZmlsdGVyKChfLCBpKSA9PiBjb25maWcuZ3JvdXBlZFRvb2x0aXAgfHwgaSA9PSB2aXNpYmxlWUluZGV4KSxcbiAgICAgICAgfSxcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHsgeFRpY2tzLCB5VGlja3MsIGNvbG9ycywgYmFycywgbGluZXM6IFtdLCBhcmVhczogW10sIGhvdmVyIH07XG4gIH1cblxuICBjb25zdCBMRUZUX1BBRERJTkcgPSA0ODtcbiAgY29uc3QgUklHSFRfUEFERElORyA9IDI0O1xuICBjb25zdCBUT1BfUEFERElORyA9IDE2O1xuICBjb25zdCBCT1RUT01fUEFERElORyA9IDI0O1xuXG4gIGV4cG9ydCB0eXBlIERhdGEgPSB7XG4gICAgeXM6IHtcbiAgICAgIGxhYmVsOiBzdHJpbmc7XG4gICAgICBoaWRkZW4/OiBib29sZWFuO1xuICAgICAgdmFsdWVzOiBudW1iZXJbXTtcbiAgICB9W107XG4gICAgeDogbnVtYmVyW107XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgRGltZW5zaW9ucyA9IHtcbiAgICB3aWR0aDogbnVtYmVyO1xuICAgIGhlaWdodDogbnVtYmVyO1xuICB9O1xuXG4gIGV4cG9ydCB0eXBlIENvbmZpZyA9IHtcbiAgICB0eXBlOiAnbGluZScgfCAnYXJlYScgfCAnYmFyJztcbiAgICBncm91cGVkVG9vbHRpcDogYm9vbGVhbjtcbiAgICBjb2xvcnM6IHN0cmluZ1tdO1xuICAgIGFsbG93TGVnZW5kVG9nZ2xlOiBib29sZWFuO1xuICAgIHplcm9TdGF0ZU1lc3NhZ2U6IHN0cmluZztcbiAgICB2YWx1ZVR5cGU6IFZhbHVlVHlwZTtcbiAgICB0cnVuY2F0ZUxlZ2VuZDogYm9vbGVhbjtcbiAgICBkYXRlRm9ybWF0PzogSW50ZXJ2YWw7XG4gIH07XG5cbiAgZXhwb3J0IGNvbnN0IGRlZmF1bHRDb25maWc6IENvbmZpZyA9IHtcbiAgICB0eXBlOiAnbGluZScsXG4gICAgZ3JvdXBlZFRvb2x0aXA6IHRydWUsXG4gICAgY29sb3JzOiBkZWZhdWx0Q29sb3JQYWxldHRlLFxuICAgIGFsbG93TGVnZW5kVG9nZ2xlOiBmYWxzZSxcbiAgICB6ZXJvU3RhdGVNZXNzYWdlOiAnTm8gZGF0YSB0byBkaXNwbGF5LicsXG4gICAgdmFsdWVUeXBlOiAnY3VycmVuY3knLFxuICAgIHRydW5jYXRlTGVnZW5kOiB0cnVlLFxuICAgIGRhdGVGb3JtYXQ6ICdkYXknLFxuICB9O1xuXG4gIGV4cG9ydCB0eXBlIEFyZWEgPSB7XG4gICAgcGF0aDogc3RyaW5nIHwgbnVsbDtcbiAgICBmaWxsOiBzdHJpbmc7XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgWFRpY2sgPSB7XG4gICAgeDogbnVtYmVyO1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gIH07XG5cbiAgZXhwb3J0IHR5cGUgWVRpY2sgPSB7XG4gICAgeTogbnVtYmVyO1xuICAgIGxhYmVsOiBzdHJpbmc7XG4gIH07XG5cbiAgdHlwZSBSZWN0ID0ge1xuICAgIHg6IG51bWJlcjtcbiAgICB5OiBudW1iZXI7XG4gICAgd2lkdGg6IG51bWJlcjtcbiAgICBoZWlnaHQ6IG51bWJlcjtcbiAgfTtcblxuICBleHBvcnQgdHlwZSBCYXJTZXJpZXMgPSB7XG4gICAgZmlsbDogc3RyaW5nO1xuICAgIHJlY3RzOiBSZWN0W107XG4gIH07XG5cbiAgLy8gSG92ZXIgaXMgYSBmdW5jdGlvbiB0aGF0IHRha2VzIGEgdmlld3BvcnQgeCBhbmQgeSBhbmQgcmV0dXJucyBhIHJpY2hcbiAgLy8gc2V0IG9mIGluZm9ybWF0aW9uIGFib3V0IHdoYXQgdmFsdWVzIGFyZSBiZWluZyBob3ZlcmVkIGFuZCB3aGF0IHRoZSB0b29sdGlwXG4gIC8vIHNob3VsZCBsb29rIGxpa2VcbiAgZXhwb3J0IHR5cGUgSG92ZXIgPSAocG9zOiB7IHJlY3Q6IERPTVJlY3Q7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0pID0+IHtcbiAgICAvLyB0aGUgaW5kaWNlcyBpbnRvIHRoZSBkYXRhIG9mIHRoZSBjbG9zZXN0IHBvaW50XG4gICAgeEluZGV4OiBudW1iZXI7XG4gICAgLy8gd2Ugd2FudCB0byBrbm93IHdoaWNoIHZpc2libGUgeSBpbmRleCBpcyBob3ZlcmVkXG4gICAgLy8gYW5kIHdoaWNoIGFjdHVhbCB5IGluZGV4IGlzIGhvdmVyZWRcbiAgICB5SW5kZXg6IG51bWJlcjtcbiAgICB2aXNpYmxlWUluZGV4OiBudW1iZXI7XG5cbiAgICAvLyB0aGUgdmlld3BvcnQgeCBhbmQgeXMgb2YgdGhlIGhvdmVyZWQgaXRlbXNcbiAgICB4OiBudW1iZXI7XG4gICAgeXM6IG51bWJlcltdO1xuXG4gICAgdG9vbHRpcDoge1xuICAgICAgYW5jaG9yOiBET01SZWN0O1xuICAgICAgZGF0ZTogc3RyaW5nO1xuICAgICAgbWV0cmljczoge1xuICAgICAgICBjb2xvcjogc3RyaW5nO1xuICAgICAgICBsYWJlbDogc3RyaW5nO1xuICAgICAgICB2YWx1ZTogc3RyaW5nO1xuICAgICAgfVtdO1xuICAgIH07XG4gIH07XG5cbiAgLy8gUmVuZGVyZWRDaGFydCByZXByZXNlbnRzIGFsbCBvZiB0aGUgcGFydHMgb2YgYSBjaGFydFxuICAvLyB0aGF0IGVuZCB1cCBvbiBzY3JlZW4uIEV2ZXJ5IGNoYXJ0IGhhcyB4IGFuZCB5IHRpY2tzXG4gIC8vIGFuZCBob3ZlciBmdW5jdGlvbmFsaXR5LCBldmVuIHRob3VnaCB0aGV5IG1pZ2h0IGJlXG4gIC8vIGRpZmZlcmVudCBmcm9tIGNoYXJ0IHRvIGNoYXJ0LlxuICB0eXBlIFJlbmRlcmVkQ2hhcnQgPSB7XG4gICAgeFRpY2tzOiBYVGlja1tdO1xuICAgIHlUaWNrczogWVRpY2tbXTtcbiAgICBob3ZlcjogSG92ZXI7XG4gICAgY29sb3JzOiBzdHJpbmdbXTtcbiAgICBsaW5lczogKHN0cmluZyB8IG51bGwpW107XG4gICAgYXJlYXM6IChzdHJpbmcgfCBudWxsKVtdO1xuICAgIGJhcnM6IFJlY3RbXVtdO1xuICB9O1xuXG4gIGZ1bmN0aW9uIHRpbWVzZXJpZXNEb21haW4oZGF0YTogRGF0YSkge1xuICAgIHJldHVybiBbTWF0aC5taW4oLi4uZGF0YS54KSwgTWF0aC5tYXgoLi4uZGF0YS54KV07XG4gIH1cblxuICBmdW5jdGlvbiB5RG9tYWluKGRhdGE6IERhdGEpIHtcbiAgICBjb25zdCBtYXggPSBNYXRoLm1heCguLi5kYXRhLnlzLm1hcCh5ID0+IE1hdGgubWF4KC4uLnkudmFsdWVzKSkpO1xuICAgIHJldHVybiBbMCwgbWF4ID09IDAgPyAxIDogbWF4XTtcbiAgfVxuXG4gIGZ1bmN0aW9uIHhSYW5nZShkaW1lbnNpb25zOiBEaW1lbnNpb25zKSB7XG4gICAgcmV0dXJuIFtMRUZUX1BBRERJTkcsIGRpbWVuc2lvbnMud2lkdGggLSBSSUdIVF9QQURESU5HXTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGJhclhSYW5nZShkaW1lbnNpb25zOiBEaW1lbnNpb25zLCBkYXRhOiBEYXRhKSB7XG4gICAgY29uc3QgbGVmdCA9IExFRlRfUEFERElORztcbiAgICBjb25zdCByaWdodCA9IGRpbWVuc2lvbnMud2lkdGggLSBSSUdIVF9QQURESU5HO1xuICAgIGNvbnN0IHdpZHRoID0gcmlnaHQgLSBsZWZ0O1xuICAgIGNvbnN0IGJpblNpemUgPSB3aWR0aCAvIChkYXRhLngubGVuZ3RoIHx8IDEpO1xuICAgIGNvbnN0IGhhbGZCaW5TaXplID0gYmluU2l6ZSAvIDI7XG4gICAgY29uc3QgcmFuZ2UgPSBbbGVmdCArIGhhbGZCaW5TaXplLCByaWdodCAtIGhhbGZCaW5TaXplXTtcbiAgICByZXR1cm4geyBiaW5TaXplOiBNYXRoLm1pbihiaW5TaXplICogMC43LCA4MCksIHJhbmdlIH07XG4gIH1cblxuICBmdW5jdGlvbiB5UmFuZ2UoZGltZW5zaW9uczogRGltZW5zaW9ucykge1xuICAgIHJldHVybiBbZGltZW5zaW9ucy5oZWlnaHQgLSBCT1RUT01fUEFERElORywgVE9QX1BBRERJTkddO1xuICB9XG5cbiAgZnVuY3Rpb24gZmluZE5lYXJlc3RJbmRleCh2YWx1ZXM6IG51bWJlcltdLCBpbnB1dDogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHZhbHVlcy5yZWR1Y2UoKG5lYXJlc3RJbmRleCwgdmFsdWUsIGluZGV4KSA9PiB7XG4gICAgICByZXR1cm4gTWF0aC5hYnModmFsdWUgLSBpbnB1dCkgPCBNYXRoLmFicyh2YWx1ZXNbbmVhcmVzdEluZGV4XSAtIGlucHV0KVxuICAgICAgICA/IGluZGV4XG4gICAgICAgIDogbmVhcmVzdEluZGV4O1xuICAgIH0sIDApO1xuICB9XG5cbiAgLy8gc3RhY2sgcmV0dXJucyBhIG5ldyBkYXRhIHdoZXJlIGVhY2ggc2V0IG9mIHlWYWx1ZXMgaXMgc3RhY2tlZFxuICAvLyBvbiB0b3Agb2YgdGhlIHByZXZpb3VzLlxuICBmdW5jdGlvbiBzdGFjayhkYXRhOiBEYXRhKTogRGF0YSB7XG4gICAgY29uc3Qgc3RhY2tlZDogRGF0YSA9IHtcbiAgICAgIC4uLmRhdGEsXG4gICAgICB5czogZGF0YS55cy5tYXAoeSA9PiAoeyBsYWJlbDogeS5sYWJlbCwgdmFsdWVzOiBbXSB9KSksXG4gICAgfTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEueC5sZW5ndGg7IGkrKykge1xuICAgICAgbGV0IGZyb20gPSAwO1xuICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBkYXRhLnlzLmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGNvbnN0IHRvID0gZnJvbSArIGRhdGEueXNbal0udmFsdWVzW2ldO1xuICAgICAgICBzdGFja2VkLnlzW2pdLnZhbHVlcy5wdXNoKHRvKTtcbiAgICAgICAgZnJvbSA9IHRvO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gc3RhY2tlZDtcbiAgfVxuXG4gIC8vIGhpZGUgc3RyaXBzIG91dCBoaWRkZW4geSB2YWx1ZXMgd2hpbGUgcmV0YWluaW5nIHRoZSBvcmlnaW5hbCBpbmRpY2VzXG4gIC8vIGZvciB0aGUgcmVtYWluaW5nIHZpc2libGUgdmFsdWVzXG4gIGZ1bmN0aW9uIGhpZGUoZGF0YTogRGF0YSk6IHsgZGF0YTogRGF0YTsgdmlzaWJsZUluZGljZXM6IG51bWJlcltdIH0ge1xuICAgIGNvbnN0IHZpc2libGVJbmRpY2VzID0gZGF0YS55c1xuICAgICAgLm1hcCgoeSwgaSkgPT4gKHsgeSwgaSB9KSlcbiAgICAgIC5maWx0ZXIoKHsgeSB9KSA9PiAheS5oaWRkZW4pXG4gICAgICAubWFwKCh7IGkgfSkgPT4gaSk7XG4gICAgcmV0dXJuIHtcbiAgICAgIGRhdGE6IHsgLi4uZGF0YSwgeXM6IHZpc2libGVJbmRpY2VzLm1hcChpID0+IGRhdGEueXNbaV0pIH0sXG4gICAgICB2aXNpYmxlSW5kaWNlcyxcbiAgICB9O1xuICB9XG5cbiAgdHlwZSBWYWx1ZVR5cGUgPSAnY291bnQnIHwgJ2N1cnJlbmN5JyB8ICdwZXJjZW50YWdlJyB8ICdkYXlzJztcblxuICBleHBvcnQgZnVuY3Rpb24gZ2V0UGlwZXModmFsdWVUeXBlOiBWYWx1ZVR5cGUpIHtcbiAgICBzd2l0Y2ggKHZhbHVlVHlwZSkge1xuICAgICAgY2FzZSAnY291bnQnOiB7XG4gICAgICAgIGNvbnN0IHBpcGUgPSBuZXcgTnVtYmVyUGlwZSgpO1xuICAgICAgICByZXR1cm4geyBwaXBlLCBmdWxsUGlwZTogcGlwZSB9O1xuICAgICAgfVxuICAgICAgY2FzZSAnY3VycmVuY3knOlxuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBpcGU6IG5ldyBTbWFsbEN1cnJlbmN5UGlwZSgpLFxuICAgICAgICAgIGZ1bGxQaXBlOiBuZXcgQ3VycmVuY3lQaXBlKCdlbi11cycpLFxuICAgICAgICB9O1xuICAgICAgY2FzZSAncGVyY2VudGFnZSc6IHtcbiAgICAgICAgY29uc3QgcGlwZSA9IG5ldyBQZXJjZW50YWdlUGlwZSgpO1xuICAgICAgICByZXR1cm4geyBwaXBlLCBmdWxsUGlwZTogcGlwZSB9O1xuICAgICAgfVxuICAgICAgY2FzZSAnZGF5cyc6IHtcbiAgICAgICAgY29uc3QgcGlwZSA9IG5ldyBEYXlzUGlwZSgpO1xuICAgICAgICByZXR1cm4geyBwaXBlLCBmdWxsUGlwZTogcGlwZSB9O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGV4cG9ydCBjb25zdCBpbnRlcnZhbHMgPSBbJ3llYXInLCAncXVhcnRlcicsICdtb250aCcsICd3ZWVrJywgJ2RheSddIGFzIGNvbnN0O1xuICBleHBvcnQgdHlwZSBJbnRlcnZhbCA9ICh0eXBlb2YgaW50ZXJ2YWxzKVtudW1iZXJdO1xuXG4gIGV4cG9ydCBmdW5jdGlvbiBmb3JtYXRlZERhdGUoZGF0ZUZvcm1hdDogSW50ZXJ2YWwsIGRhdGU6IERhdGUpIHtcbiAgICBpZiAoZGF0ZUZvcm1hdCA9PSAncXVhcnRlcicpIHtcbiAgICAgIGNvbnN0IHF1YXJ0ZXIgPSBNYXRoLmNlaWwoKGRhdGUuZ2V0VVRDTW9udGgoKSArIDEpIC8gMyk7XG4gICAgICBjb25zdCB5ZWFyID0gdXRjRm9ybWF0KGdldFRpbWVJbnRlcnZhbEZvcm1hdCgneWVhcicpKShkYXRlKTtcbiAgICAgIHJldHVybiBgUSR7cXVhcnRlcn0gJHt5ZWFyfWA7XG4gICAgfVxuICAgIGNvbnN0IGZvcm1hdCA9IGdldFRpbWVJbnRlcnZhbEZvcm1hdChkYXRlRm9ybWF0KTtcbiAgICByZXR1cm4gdXRjRm9ybWF0KGZvcm1hdCkoZGF0ZSk7XG4gIH1cblxuICBleHBvcnQgZnVuY3Rpb24gZ2V0VGltZUludGVydmFsRm9ybWF0KGludGVydmFsOiBJbnRlcnZhbCk6IHN0cmluZyB7XG4gICAgc3dpdGNoIChpbnRlcnZhbCkge1xuICAgICAgY2FzZSAnZGF5JzpcbiAgICAgIGNhc2UgJ3dlZWsnOlxuICAgICAgICByZXR1cm4gJyVtLyVkLyVZJztcbiAgICAgIGNhc2UgJ21vbnRoJzpcbiAgICAgIGNhc2UgJ3F1YXJ0ZXInOlxuICAgICAgICByZXR1cm4gJyViICVZJztcbiAgICAgIGNhc2UgJ3llYXInOlxuICAgICAgICByZXR1cm4gJyVZJztcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -11,6 +11,7 @@ import * as p from 'papaparse';
|
|
|
11
11
|
import { debounce, defaultsDeep, orderBy, isEqual, range, difference, union } from 'lodash';
|
|
12
12
|
import { scaleUtc, scaleLinear, scaleBand } from 'd3-scale';
|
|
13
13
|
import { line, area, pie, arc, stack } from 'd3-shape';
|
|
14
|
+
import { DaysPipe as DaysPipe$1 } from 'projects/riv/src/public-api';
|
|
14
15
|
import { index, union as union$1 } from 'd3-array';
|
|
15
16
|
|
|
16
17
|
/**
|
|
@@ -3016,10 +3017,10 @@ class TableCsvExportComponent {
|
|
|
3016
3017
|
}
|
|
3017
3018
|
}
|
|
3018
3019
|
TableCsvExportComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableCsvExportComponent, deps: [{ token: DownloadService }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
3019
|
-
TableCsvExportComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TableCsvExportComponent, selector: "riv-table-csv-export", inputs: { manager: "manager" }, ngImport: i0, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <button\n type=\"button\"\n rivButton\n [icon]=\"'DownloadCloud'\"\n [loading]=\"loading\"\n (click)=\"downloadCsv(s)\"\n ></button>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
3020
|
+
TableCsvExportComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "14.3.0", type: TableCsvExportComponent, selector: "riv-table-csv-export", inputs: { manager: "manager" }, ngImport: i0, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <button\n type=\"button\"\n rivButton\n [rivTooltip]=\"'Export CSV'\"\n [icon]=\"'DownloadCloud'\"\n [loading]=\"loading\"\n (click)=\"downloadCsv(s)\"\n ></button>\n</ng-container>\n", dependencies: [{ kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "component", type: ButtonComponent, selector: "[rivButton]", inputs: ["locked", "disabled", "loading", "full", "size", "variant", "icon", "iconPosition"] }, { kind: "directive", type: TooltipDirective, selector: "[rivTooltip]", inputs: ["rivTooltip", "rivTooltipTheme", "rivTooltipMaxWidth", "rivTooltipPreferredPosition", "rivTooltipCloseDelay"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
3020
3021
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImport: i0, type: TableCsvExportComponent, decorators: [{
|
|
3021
3022
|
type: Component,
|
|
3022
|
-
args: [{ selector: 'riv-table-csv-export', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <button\n type=\"button\"\n rivButton\n [icon]=\"'DownloadCloud'\"\n [loading]=\"loading\"\n (click)=\"downloadCsv(s)\"\n ></button>\n</ng-container>\n" }]
|
|
3023
|
+
args: [{ selector: 'riv-table-csv-export', changeDetection: ChangeDetectionStrategy.OnPush, template: "<ng-container *ngIf=\"manager?.state | async; let s\">\n <button\n type=\"button\"\n rivButton\n [rivTooltip]=\"'Export CSV'\"\n [icon]=\"'DownloadCloud'\"\n [loading]=\"loading\"\n (click)=\"downloadCsv(s)\"\n ></button>\n</ng-container>\n" }]
|
|
3023
3024
|
}], ctorParameters: function () { return [{ type: DownloadService }, { type: i0.ChangeDetectorRef }]; }, propDecorators: { manager: [{
|
|
3024
3025
|
type: Input
|
|
3025
3026
|
}] } });
|
|
@@ -3710,10 +3711,9 @@ var Chart;
|
|
|
3710
3711
|
}
|
|
3711
3712
|
Chart.chart = chart;
|
|
3712
3713
|
function lines(config, allData, dimensions) {
|
|
3713
|
-
var _a;
|
|
3714
3714
|
const { data, visibleIndices } = hide(allData);
|
|
3715
3715
|
const xScale = scaleUtc(timeseriesDomain(data), xRange(dimensions));
|
|
3716
|
-
const format = (
|
|
3716
|
+
const format = (date) => formatedDate(config.dateFormat || 'day', date);
|
|
3717
3717
|
const xTicks = xScale.ticks(Math.min(5, data.x.length)).map(tick => ({
|
|
3718
3718
|
x: xScale(tick),
|
|
3719
3719
|
label: format(tick),
|
|
@@ -3733,6 +3733,7 @@ var Chart;
|
|
|
3733
3733
|
const visibleYIndex = findNearestIndex(data.ys.map(y => y.values[xIndex]), yScale.invert(pos.y));
|
|
3734
3734
|
const yIndex = visibleIndices[visibleYIndex];
|
|
3735
3735
|
const ys = data.ys.map(y => yScale(y.values[xIndex]));
|
|
3736
|
+
const format = (date) => formatedDate(config.dateFormat || 'day', date);
|
|
3736
3737
|
const anchor = new DOMRect(pos.rect.x + x, pos.rect.y + ys[visibleYIndex], 8, 0);
|
|
3737
3738
|
return {
|
|
3738
3739
|
x,
|
|
@@ -3742,7 +3743,7 @@ var Chart;
|
|
|
3742
3743
|
visibleYIndex,
|
|
3743
3744
|
tooltip: {
|
|
3744
3745
|
anchor,
|
|
3745
|
-
date:
|
|
3746
|
+
date: format(new Date(data.x[xIndex])),
|
|
3746
3747
|
metrics: data.ys
|
|
3747
3748
|
.map((y, index) => {
|
|
3748
3749
|
var _a;
|
|
@@ -3760,11 +3761,10 @@ var Chart;
|
|
|
3760
3761
|
}
|
|
3761
3762
|
Chart.lines = lines;
|
|
3762
3763
|
function areas(config, allData, dimensions) {
|
|
3763
|
-
var _a;
|
|
3764
3764
|
const { data: unstackedData, visibleIndices } = hide(allData);
|
|
3765
3765
|
const data = stack(unstackedData);
|
|
3766
3766
|
const xScale = scaleUtc(timeseriesDomain(data), xRange(dimensions));
|
|
3767
|
-
const format = (
|
|
3767
|
+
const format = (date) => formatedDate(config.dateFormat || 'day', date);
|
|
3768
3768
|
const xTicks = xScale.ticks(Math.min(5, data.x.length)).map(tick => ({
|
|
3769
3769
|
x: xScale(tick),
|
|
3770
3770
|
label: format(tick),
|
|
@@ -3818,13 +3818,12 @@ var Chart;
|
|
|
3818
3818
|
}
|
|
3819
3819
|
Chart.areas = areas;
|
|
3820
3820
|
function bars(config, allData, dimensions) {
|
|
3821
|
-
var _a;
|
|
3822
3821
|
const { data: unstackedData, visibleIndices } = hide(allData);
|
|
3823
3822
|
const data = stack(unstackedData);
|
|
3824
3823
|
const { range: xRange, binSize } = barXRange(dimensions, data);
|
|
3825
3824
|
const halfBinSize = binSize / 2;
|
|
3826
3825
|
const xScale = scaleUtc(timeseriesDomain(data), xRange);
|
|
3827
|
-
const format = (
|
|
3826
|
+
const format = (date) => formatedDate(config.dateFormat || 'day', date);
|
|
3828
3827
|
const xTicks = xScale.ticks(Math.min(5, data.x.length)).map(tick => ({
|
|
3829
3828
|
x: xScale(tick),
|
|
3830
3829
|
label: format(tick),
|
|
@@ -3899,6 +3898,7 @@ var Chart;
|
|
|
3899
3898
|
zeroStateMessage: 'No data to display.',
|
|
3900
3899
|
valueType: 'currency',
|
|
3901
3900
|
truncateLegend: true,
|
|
3901
|
+
dateFormat: 'day',
|
|
3902
3902
|
};
|
|
3903
3903
|
function timeseriesDomain(data) {
|
|
3904
3904
|
return [Math.min(...data.x), Math.max(...data.x)];
|
|
@@ -3970,9 +3970,37 @@ var Chart;
|
|
|
3970
3970
|
const pipe = new PercentagePipe();
|
|
3971
3971
|
return { pipe, fullPipe: pipe };
|
|
3972
3972
|
}
|
|
3973
|
+
case 'days': {
|
|
3974
|
+
const pipe = new DaysPipe$1();
|
|
3975
|
+
return { pipe, fullPipe: pipe };
|
|
3976
|
+
}
|
|
3973
3977
|
}
|
|
3974
3978
|
}
|
|
3975
3979
|
Chart.getPipes = getPipes;
|
|
3980
|
+
Chart.intervals = ['year', 'quarter', 'month', 'week', 'day'];
|
|
3981
|
+
function formatedDate(dateFormat, date) {
|
|
3982
|
+
if (dateFormat == 'quarter') {
|
|
3983
|
+
const quarter = Math.ceil((date.getUTCMonth() + 1) / 3);
|
|
3984
|
+
const year = utcFormat(getTimeIntervalFormat('year'))(date);
|
|
3985
|
+
return `Q${quarter} ${year}`;
|
|
3986
|
+
}
|
|
3987
|
+
const format = getTimeIntervalFormat(dateFormat);
|
|
3988
|
+
return utcFormat(format)(date);
|
|
3989
|
+
}
|
|
3990
|
+
Chart.formatedDate = formatedDate;
|
|
3991
|
+
function getTimeIntervalFormat(interval) {
|
|
3992
|
+
switch (interval) {
|
|
3993
|
+
case 'day':
|
|
3994
|
+
case 'week':
|
|
3995
|
+
return '%m/%d/%Y';
|
|
3996
|
+
case 'month':
|
|
3997
|
+
case 'quarter':
|
|
3998
|
+
return '%b %Y';
|
|
3999
|
+
case 'year':
|
|
4000
|
+
return '%Y';
|
|
4001
|
+
}
|
|
4002
|
+
}
|
|
4003
|
+
Chart.getTimeIntervalFormat = getTimeIntervalFormat;
|
|
3976
4004
|
})(Chart || (Chart = {}));
|
|
3977
4005
|
|
|
3978
4006
|
class LegendItemComponent {
|