@rfprodz/client-d3-charts 1.3.0 → 1.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/components/bar-chart/bar-chart.component.mjs +3 -3
- package/esm2022/lib/components/chart-examples/chart-examples.component.mjs +4 -4
- package/esm2022/lib/components/force-directed-chart/force-directed-chart.component.mjs +3 -3
- package/esm2022/lib/components/line-chart/line-chart.component.mjs +3 -3
- package/esm2022/lib/components/pie-chart/pie-chart.component.mjs +3 -3
- package/esm2022/lib/components/radar-chart/radar-chart.component.mjs +3 -3
- package/esm2022/lib/d3-charts.module.mjs +4 -4
- package/esm2022/lib/util/line-chart.util.mjs +10 -3
- package/esm2022/lib/util/pie-chart.util.mjs +10 -10
- package/esm2022/lib/util/radar-chart.util.mjs +15 -5
- package/fesm2022/rfprodz-client-d3-charts.mjs +55 -38
- package/fesm2022/rfprodz-client-d3-charts.mjs.map +1 -1
- package/package.json +3 -3
|
@@ -62,11 +62,11 @@ class AppBarChartComponent {
|
|
|
62
62
|
this.drawChart();
|
|
63
63
|
}
|
|
64
64
|
}
|
|
65
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.
|
|
66
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.
|
|
65
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AppBarChartComponent, deps: [{ token: DOCUMENT }, { token: D3_CHART_FACTORY }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
66
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.1", type: AppBarChartComponent, selector: "app-bar-chart", inputs: { chartId: "chartId", data: "data", options: "options" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"container\" id=\"{{ chartId }}\" #container></div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center}:host .container{flex:0 1 auto}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
67
67
|
}
|
|
68
68
|
export { AppBarChartComponent };
|
|
69
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.
|
|
69
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AppBarChartComponent, decorators: [{
|
|
70
70
|
type: Component,
|
|
71
71
|
args: [{ selector: 'app-bar-chart', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container\" id=\"{{ chartId }}\" #container></div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center}:host .container{flex:0 1 auto}\n"] }]
|
|
72
72
|
}], ctorParameters: function () { return [{ type: Document, decorators: [{
|
|
@@ -217,12 +217,12 @@ class AppChartExamplesComponent {
|
|
|
217
217
|
chartTitle: 'Example force directed chart',
|
|
218
218
|
};
|
|
219
219
|
}
|
|
220
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.
|
|
221
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.
|
|
220
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AppChartExamplesComponent, deps: [{ token: i1.BreakpointObserver }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
221
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.1", type: AppChartExamplesComponent, selector: "app-chart-examples", ngImport: i0, template: "<div class=\"container\" *ngIf=\"barChartConfig$ | async as config\">\n <app-bar-chart [chartId]=\"'bar-example-1'\" [data]=\"config.data\" [options]=\"config.options\"></app-bar-chart>\n</div>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<div class=\"container\" *ngIf=\"lineChartConfig$ | async as config\">\n <app-line-chart [chartId]=\"'line-example-1'\" [data]=\"[config.data[0]]\" [options]=\"config.options\"></app-line-chart>\n\n <app-line-chart [chartId]=\"'line-example-2'\" [data]=\"[config.data[1]]\" [options]=\"config.optionsDateDdMmYy\"></app-line-chart>\n\n <app-line-chart\n [chartId]=\"'line-example-3'\"\n [data]=\"[config.data[1], config.data[2]]\"\n [options]=\"config.optionsDateDdMmYyyy\"\n ></app-line-chart>\n\n <app-line-chart [chartId]=\"'line-example-4'\" [data]=\"config.data\" [options]=\"config.optionsDateMmYyyy\"></app-line-chart>\n</div>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<div class=\"container\" *ngIf=\"radarChartConfig$ | async as config\">\n <app-radar-chart [chartId]=\"'radar-example-1'\" [data]=\"config.data\" [options]=\"config.options\"></app-radar-chart>\n</div>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<div class=\"container\" *ngIf=\"pieChartConfig$ | async as config\">\n <app-pie-chart [chartId]=\"'pie-example-1'\" [data]=\"config.data\" [options]=\"config.options\"></app-pie-chart>\n</div>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<div class=\"container\" *ngIf=\"forceDirectedChartConfig$ | async as config\">\n <app-force-directed-chart\n [chartId]=\"'force-directed-example-1'\"\n [data]=\"config.data\"\n [options]=\"config.options\"\n ></app-force-directed-chart>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}:host .container{display:flex;flex:1 1 auto;flex-wrap:wrap;width:100%}\n"], dependencies: [{ kind: "directive", type: i2.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i2.NgStyle, selector: "[ngStyle]", inputs: ["ngStyle"] }, { kind: "component", type: i3.AppPieChartComponent, selector: "app-pie-chart", inputs: ["chartId", "data", "options"] }, { kind: "component", type: i4.AppRadarChartComponent, selector: "app-radar-chart", inputs: ["chartId", "data", "options"] }, { kind: "component", type: i5.AppForceDirectedChartComponent, selector: "app-force-directed-chart", inputs: ["chartId", "data", "options"] }, { kind: "component", type: i6.AppBarChartComponent, selector: "app-bar-chart", inputs: ["chartId", "data", "options"] }, { kind: "component", type: i7.AppLineChartComponent, selector: "app-line-chart", inputs: ["chartId", "data", "options"] }, { kind: "pipe", type: i2.AsyncPipe, name: "async" }], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
222
222
|
}
|
|
223
223
|
export { AppChartExamplesComponent };
|
|
224
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.
|
|
224
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AppChartExamplesComponent, decorators: [{
|
|
225
225
|
type: Component,
|
|
226
|
-
args: [{ selector: 'app-chart-examples', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container\" *ngIf=\"barChartConfig$ | async as config\">\n <app-bar-chart [chartId]=\"'bar-example-1'\" [data]=\"config.data\" [options]=\"config.options\"></app-bar-chart>\n</div>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<div class=\"container\" *ngIf=\"lineChartConfig$ | async as config\">\n <app-line-chart [chartId]=\"'line-example-1'\" [data]=\"[config.data[0]]\" [options]=\"config.options\"></app-line-chart>\n\n <app-line-chart [chartId]=\"'line-example-2'\" [data]=\"[config.data[1]]\" [options]=\"config.optionsDateDdMmYy\"></app-line-chart>\n\n <app-line-chart\n [chartId]=\"'line-example-3'\"\n [data]=\"[config.data[1], config.data[2]]\"\n [options]=\"config.optionsDateDdMmYyyy\"\n ></app-line-chart>\n\n <app-line-chart [chartId]=\"'line-example-4'\" [data]=\"config.data\" [options]=\"config.optionsDateMmYyyy\"></app-line-chart>\n</div>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<div class=\"container\" *ngIf=\"radarChartConfig$ | async as config\">\n <app-radar-chart [chartId]=\"'radar-example-1'\" [data]=\"config.data\" [options]=\"config.options\"></app-radar-chart>\n</div>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<div class=\"container\" *ngIf=\"pieChartConfig$ | async as config\">\n <app-pie-chart [chartId]=\"'pie-example-1'\" [data]=\"config.data\" [options]=\"config.options\"></app-pie-chart>\n</div>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<div class=\"container\" *ngIf=\"forceDirectedChartConfig$ | async as config\">\n <app-force-directed-chart\n [chartId]=\"'force-directed-example-1'\"\n [data]=\"config.data\"\n [options]=\"config.options\"\n ></app-force-directed-chart>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}:host .container{display:flex;flex:1 1 auto;width:100%}\n"] }]
|
|
226
|
+
args: [{ selector: 'app-chart-examples', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container\" *ngIf=\"barChartConfig$ | async as config\">\n <app-bar-chart [chartId]=\"'bar-example-1'\" [data]=\"config.data\" [options]=\"config.options\"></app-bar-chart>\n</div>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<div class=\"container\" *ngIf=\"lineChartConfig$ | async as config\">\n <app-line-chart [chartId]=\"'line-example-1'\" [data]=\"[config.data[0]]\" [options]=\"config.options\"></app-line-chart>\n\n <app-line-chart [chartId]=\"'line-example-2'\" [data]=\"[config.data[1]]\" [options]=\"config.optionsDateDdMmYy\"></app-line-chart>\n\n <app-line-chart\n [chartId]=\"'line-example-3'\"\n [data]=\"[config.data[1], config.data[2]]\"\n [options]=\"config.optionsDateDdMmYyyy\"\n ></app-line-chart>\n\n <app-line-chart [chartId]=\"'line-example-4'\" [data]=\"config.data\" [options]=\"config.optionsDateMmYyyy\"></app-line-chart>\n</div>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<div class=\"container\" *ngIf=\"radarChartConfig$ | async as config\">\n <app-radar-chart [chartId]=\"'radar-example-1'\" [data]=\"config.data\" [options]=\"config.options\"></app-radar-chart>\n</div>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<div class=\"container\" *ngIf=\"pieChartConfig$ | async as config\">\n <app-pie-chart [chartId]=\"'pie-example-1'\" [data]=\"config.data\" [options]=\"config.options\"></app-pie-chart>\n</div>\n\n<hr [ngStyle]=\"{ width: '100%' }\" />\n\n<div class=\"container\" *ngIf=\"forceDirectedChartConfig$ | async as config\">\n <app-force-directed-chart\n [chartId]=\"'force-directed-example-1'\"\n [data]=\"config.data\"\n [options]=\"config.options\"\n ></app-force-directed-chart>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:wrap;justify-content:center}:host .container{display:flex;flex:1 1 auto;flex-wrap:wrap;width:100%}\n"] }]
|
|
227
227
|
}], ctorParameters: function () { return [{ type: i1.BreakpointObserver }]; } });
|
|
228
228
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhcnQtZXhhbXBsZXMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jbGllbnQtZDMtY2hhcnRzL3NyYy9saWIvY29tcG9uZW50cy9jaGFydC1leGFtcGxlcy9jaGFydC1leGFtcGxlcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NsaWVudC1kMy1jaGFydHMvc3JjL2xpYi9jb21wb25lbnRzL2NoYXJ0LWV4YW1wbGVzL2NoYXJ0LWV4YW1wbGVzLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxXQUFXLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ25FLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7Ozs7Ozs7OztBQVlwRCxNQU1hLHlCQUF5QjtJQUNwQzs7T0FFRztJQUNILElBQVcsWUFBWTtRQUNyQixPQUFzQjtZQUNwQixFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtZQUMxQixFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtZQUMxQixFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtZQUM1QixFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtZQUMzQixFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRTtTQUM1QixDQUFDO0lBQ0osQ0FBQztJQUVEOztPQUVHO0lBQ0gsSUFBVyxhQUFhO1FBQ3RCLE9BQXlCO1lBQ3ZCO2dCQUNFLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFO2dCQUNoRSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRTtnQkFDaEUsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQ2hFLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFO2dCQUNoRSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRTtnQkFDaEUsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQ2hFLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFO2FBQ2pFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzNDO2dCQUNFLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFO2dCQUNoRSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRTtnQkFDaEUsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQ2hFLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFO2dCQUNoRSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRTtnQkFDaEUsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQ2hFLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFO2FBQ2pFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDO1lBQzNDO2dCQUNFLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFO2dCQUNoRSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRTtnQkFDaEUsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQ2hFLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFO2dCQUNoRSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsZUFBZSxFQUFFLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRTtnQkFDaEUsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFBRSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEVBQUU7Z0JBQ2hFLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxlQUFlLEVBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFO2FBQ2pFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxDQUFDLENBQUMsU0FBUyxDQUFDO1NBQzVDLENBQUM7SUFDSixDQUFDO0lBRUQ7O09BRUc7SUFDSCxJQUFXLGNBQWM7UUFDdkIsT0FBZ0M7WUFDOUI7Z0JBQ0UsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtnQkFDcEMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtnQkFDcEMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtnQkFDdEMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtnQkFDckMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtnQkFDckMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtnQkFDcEMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtnQkFDdEMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtnQkFDdEMsRUFBRSxJQUFJLEVBQUUsZ0NBQWdDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFO2FBQ2hFO1lBQ0Q7Z0JBQ0UsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtnQkFDcEMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtnQkFDcEMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtnQkFDdEMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtnQkFDckMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtnQkFDckMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtnQkFDcEMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtnQkFDdEMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRTtnQkFDdEMsRUFBRSxJQUFJLEVBQUUsZ0NBQWdDLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFO2FBQ2hFO1NBQ0YsQ0FBQztJQUNKLENBQUM7SUFFRDs7T0FFRztJQUNILElBQVcsWUFBWTtRQUNyQixPQUE0QjtZQUMxQixFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUNwQixFQUFFLEdBQUcsRUFBRSxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUNwQixFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRTtZQUN0QixFQUFF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cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQnJlYWtwb2ludE9ic2VydmVyLCBCcmVha3BvaW50cyB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9sYXlvdXQnO1xuaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksIENvbXBvbmVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZmlyc3QsIG1hcCwgc3dpdGNoTWFwLCB0aW1lciB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBJQmFyQ2hhcnRPcHRpb25zLCBUQmFyQ2hhcnREYXRhIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9iYXItY2hhcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7XG4gIElGb3JjZURpcmVjdGVkQ2hhcnREYXRhLFxuICBJRm9yY2VEaXJlY3RlZENoYXJ0T3B0aW9ucyxcbiAgSUZvcmNlRGlyZWN0ZWRHcmFwaEVudGl0eSxcbn0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9mb3JjZS1kaXJlY3RlZC1jaGFydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSUxpbmVDaGFydE9wdGlvbnMsIFREYXRlRm9ybWF0LCBUTGluZUNoYXJ0RGF0YSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvbGluZS1jaGFydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSVBpZUNoYXJ0RGF0YU5vZGUsIElQaWVDaGFydE9wdGlvbnMgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL3BpZS1jaGFydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgSVJhZGFyQ2hhcnREYXRhTm9kZSwgSVJhZGFyQ2hhcnRPcHRpb25zIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9yYWRhci1jaGFydC5pbnRlcmZhY2UnO1xuXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdhcHAtY2hhcnQtZXhhbXBsZXMnLFxuICB0ZW1wbGF0ZVVybDogJy4vY2hhcnQtZXhhbXBsZXMuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jaGFydC1leGFtcGxlcy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbn0pXG5leHBvcnQgY2xhc3MgQXBwQ2hhcnRFeGFtcGxlc0NvbXBvbmVudCB7XG4gIC8qKlxuICAgKiBTYW1wbGUgYmFyIGNoYXJ0IGRhdGEuXG4gICAqL1xuICBwdWJsaWMgZ2V0IGJhckNoYXJ0RGF0YSgpIHtcbiAgICByZXR1cm4gPFRCYXJDaGFydERhdGE+W1xuICAgICAgeyB0aXRsZTogJ29uZScsIHZhbHVlOiAxIH0sXG4gICAgICB7IHRpdGxlOiAndHdvJywgdmFsdWU6IDIgfSxcbiAgICAgIHsgdGl0bGU6ICd0aHJlZScsIHZhbHVlOiAzIH0sXG4gICAgICB7IHRpdGxlOiAnZm91cicsIHZhbHVlOiA0IH0sXG4gICAgICB7IHRpdGxlOiAnZml2ZScsIHZhbHVlOiA1IH0sXG4gICAgXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYW1wbGUgbGluZSBjaGFydCBkYXRhLlxuICAgKi9cbiAgcHVibGljIGdldCBsaW5lQ2hhcnREYXRhKCkge1xuICAgIHJldHVybiA8VExpbmVDaGFydERhdGFbXT5bXG4gICAgICBbXG4gICAgICAgIHsgdGltZXN0YW1wOiB0aGlzLnJhbmRvbVRpbWVzdGFtcCgpLCB2YWx1ZTogdGhpcy5yYW5kb21WYWx1ZSgpIH0sXG4gICAgICAgIHsgdGltZXN0YW1wOiB0aGlzLnJhbmRvbVRpbWVzdGFtcCgpLCB2YWx1ZTogdGhpcy5yYW5kb21WYWx1ZSgpIH0sXG4gICAgICAgIHsgdGltZXN0YW1wOiB0aGlzLnJhbmRvbVRpbWVzdGFtcCgpLCB2YWx1ZTogdGhpcy5yYW5kb21WYWx1ZSgpIH0sXG4gICAgICAgIHsgdGltZXN0YW1wOiB0aGlzLnJhbmRvbVRpbWVzdGFtcCgpLCB2YWx1ZTogdGhpcy5yYW5kb21WYWx1ZSgpIH0sXG4gICAgICAgIHsgdGltZXN0YW1wOiB0aGlzLnJhbmRvbVRpbWVzdGFtcCgpLCB2YWx1ZTogdGhpcy5yYW5kb21WYWx1ZSgpIH0sXG4gICAgICAgIHsgdGltZXN0YW1wOiB0aGlzLnJhbmRvbVRpbWVzdGFtcCgpLCB2YWx1ZTogdGhpcy5yYW5kb21WYWx1ZSgpIH0sXG4gICAgICAgIHsgdGltZXN0YW1wOiB0aGlzLnJhbmRvbVRpbWVzdGFtcCgpLCB2YWx1ZTogdGhpcy5yYW5kb21WYWx1ZSgpIH0sXG4gICAgICBdLnNvcnQoKGEsIGIpID0+IGEudGltZXN0YW1wIC0gYi50aW1lc3RhbXApLFxuICAgICAgW1xuICAgICAgICB7IHRpbWVzdGFtcDogdGhpcy5yYW5kb21UaW1lc3RhbXAoKSwgdmFsdWU6IHRoaXMucmFuZG9tVmFsdWUoKSB9LFxuICAgICAgICB7IHRpbWVzdGFtcDogdGhpcy5yYW5kb21UaW1lc3RhbXAoKSwgdmFsdWU6IHRoaXMucmFuZG9tVmFsdWUoKSB9LFxuICAgICAgICB7IHRpbWVzdGFtcDogdGhpcy5yYW5kb21UaW1lc3RhbXAoKSwgdmFsdWU6IHRoaXMucmFuZG9tVmFsdWUoKSB9LFxuICAgICAgICB7IHRpbWVzdGFtcDogdGhpcy5yYW5kb21UaW1lc3RhbXAoKSwgdmFsdWU6IHRoaXMucmFuZG9tVmFsdWUoKSB9LFxuICAgICAgICB7IHRpbWVzdGFtcDogdGhpcy5yYW5kb21UaW1lc3RhbXAoKSwgdmFsdWU6IHRoaXMucmFuZG9tVmFsdWUoKSB9LFxuICAgICAgICB7IHRpbWVzdGFtcDogdGhpcy5yYW5kb21UaW1lc3RhbXAoKSwgdmFsdWU6IHRoaXMucmFuZG9tVmFsdWUoKSB9LFxuICAgICAgICB7IHRpbWVzdGFtcDogdGhpcy5yYW5kb21UaW1lc3RhbXAoKSwgdmFsdWU6IHRoaXMucmFuZG9tVmFsdWUoKSB9LFxuICAgICAgXS5zb3J0KChhLCBiKSA9PiBhLnRpbWVzdGFtcCAtIGIudGltZXN0YW1wKSxcbiAgICAgIFtcbiAgICAgICAgeyB0aW1lc3RhbXA6IHRoaXMucmFuZG9tVGltZXN0YW1wKCksIHZhbHVlOiB0aGlzLnJhbmRvbVZhbHVlKCkgfSxcbiAgICAgICAgeyB0aW1lc3RhbXA6IHRoaXMucmFuZG9tVGltZXN0YW1wKCksIHZhbHVlOiB0aGlzLnJhbmRvbVZhbHVlKCkgfSxcbiAgICAgICAgeyB0aW1lc3RhbXA6IHRoaXMucmFuZG9tVGltZXN0YW1wKCksIHZhbHVlOiB0aGlzLnJhbmRvbVZhbHVlKCkgfSxcbiAgICAgICAgeyB0aW1lc3RhbXA6IHRoaXMucmFuZG9tVGltZXN0YW1wKCksIHZhbHVlOiB0aGlzLnJhbmRvbVZhbHVlKCkgfSxcbiAgICAgICAgeyB0aW1lc3RhbXA6IHRoaXMucmFuZG9tVGltZXN0YW1wKCksIHZhbHVlOiB0aGlzLnJhbmRvbVZhbHVlKCkgfSxcbiAgICAgICAgeyB0aW1lc3RhbXA6IHRoaXMucmFuZG9tVGltZXN0YW1wKCksIHZhbHVlOiB0aGlzLnJhbmRvbVZhbHVlKCkgfSxcbiAgICAgICAgeyB0aW1lc3RhbXA6IHRoaXMucmFuZG9tVGltZXN0YW1wKCksIHZhbHVlOiB0aGlzLnJhbmRvbVZhbHVlKCkgfSxcbiAgICAgIF0uc29ydCgoYSwgYikgPT4gYS50aW1lc3RhbXAgLSBiLnRpbWVzdGFtcCksXG4gICAgXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYW1wbGUgcmFkYXIgY2hhcnQgZGF0YS5cbiAgICovXG4gIHB1YmxpYyBnZXQgcmFkYXJDaGFydERhdGEoKSB7XG4gICAgcmV0dXJuIDxJUmFkYXJDaGFydERhdGFOb2RlW11bXT5bXG4gICAgICBbXG4gICAgICAgIHsgYXhpczogJ29uZScsIHZhbHVlOiAxLCB1bml0OiAneCcgfSxcbiAgICAgICAgeyBheGlzOiAndHdvJywgdmFsdWU6IDIsIHVuaXQ6ICd4JyB9LFxuICAgICAgICB7IGF4aXM6ICd0aHJlZScsIHZhbHVlOiAzLCB1bml0OiAneCcgfSxcbiAgICAgICAgeyBheGlzOiAnZm91cicsIHZhbHVlOiA0LCB1bml0OiAneCcgfSxcbiAgICAgICAgeyBheGlzOiAnZml2ZScsIHZhbHVlOiA1LCB1bml0OiAneCcgfSxcbiAgICAgICAgeyBheGlzOiAnc2l4JywgdmFsdWU6IDYsIHVuaXQ6ICd4JyB9LFxuICAgICAgICB7IGF4aXM6ICdzZXZlbicsIHZhbHVlOiA3LCB1bml0OiAneCcgfSxcbiAgICAgICAgeyBheGlzOiAnZWlnaHQnLCB2YWx1ZTogOCwgdW5pdDogJ3gnIH0sXG4gICAgICAgIHsgYXhpczogJ25pbmUgKGxvbmcgbGFiZWxzIGFyZSB3cmFwcGVkKScsIHZhbHVlOiA5LCB1bml0OiAneCcgfSxcbiAgICAgIF0sXG4gICAgICBbXG4gICAgICAgIHsgYXhpczogJ29uZScsIHZhbHVlOiA5LCB1bml0OiAneScgfSxcbiAgICAgICAgeyBheGlzOiAndHdvJywgdmFsdWU6IDgsIHVuaXQ6ICd5JyB9LFxuICAgICAgICB7IGF4aXM6ICd0aHJlZScsIHZhbHVlOiA3LCB1bml0OiAneScgfSxcbiAgICAgICAgeyBheGlzOiAnZm91cicsIHZhbHVlOiA2LCB1bml0OiAneScgfSxcbiAgICAgICAgeyBheGlzOiAnZml2ZScsIHZhbHVlOiA1LCB1bml0OiAneScgfSxcbiAgICAgICAgeyBheGlzOiAnc2l4JywgdmFsdWU6IDQsIHVuaXQ6ICd5JyB9LFxuICAgICAgICB7IGF4aXM6ICdzZXZlbicsIHZhbHVlOiAzLCB1bml0OiAneScgfSxcbiAgICAgICAgeyBheGlzOiAnZWlnaHQnLCB2YWx1ZTogMiwgdW5pdDogJ3knIH0sXG4gICAgICAgIHsgYXhpczogJ25pbmUgKGxvbmcgbGFiZWxzIGFyZSB3cmFwcGVkKScsIHZhbHVlOiAxLCB1bml0OiAneScgfSxcbiAgICAgIF0sXG4gICAgXTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYW1wbGUgcGllIGNoYXJ0IGRhdGEuXG4gICAqL1xuICBwdWJsaWMgZ2V0IHBpZUNoYXJ0RGF0YSgpIHtcbiAgICByZXR1cm4gPElQaWVDaGFydERhdGFOb2RlW10+W1xuICAgICAgeyBrZXk6ICdvbmUnLCB5OiAxIH0sXG4gICAgICB7IGtleTogJ3R3bycsIHk6IDIgfSxcbiAgICAgIHsga2V5OiAndGhyZWUnLCB5OiAzIH0sXG4gICAgICB7IGtleTogJ2ZvdXInLCB5OiA0IH0sXG4gICAgICB7IGtleTogJ2ZpdmUnLCB5OiA1IH0sXG4gICAgICB7IGtleTogJ3NpeCcsIHk6IDYgfSxcbiAgICBdO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhbXBsZSBmb3JjZSBkaXJlY3RlZCBjaGFydCBkYXRhLlxuICAgKi9cbiAgcHVibGljIGdldCBmb3JjZURpcmVjdGVkQ2hhcnREYXRhKCkge1xuICAgIGNvbnN0IGlucHV0ID0ge1xuICAgICAgZG9tYWluczogWydmaXJzdCcsICdzZWNvbmQnLCAndGhpcmQnXSxcbiAgICAgIGVudGl0aWVzOiBbXG4gICAgICAgIHsgbmFtZTogJ29uZScsIGRvbWFpbnM6IFsnZmlyc3QnXSwgaW1nOiAnJyB9LFxuICAgICAgICB7IG5hbWU6ICd0d28nLCBkb21haW5zOiBbJ3NlY29uZCddLCBpbWc6ICcnIH0sXG4gICAgICAgIHsgbmFtZTogJ3RocmVlJywgZG9tYWluczogWyd0aGlyZCddLCBpbWc6ICcnIH0sXG4gICAgICAgIHsgbmFtZTogJ2ZvdXInLCBkb21haW5zOiBbJ2ZpcnN0JywgJ3NlY29uZCddLCBpbWc6ICcnIH0sXG4gICAgICAgIHsgbmFtZTogJ2ZpdmUnLCBkb21haW5zOiBbJ3NlY29uZCddLCBpbWc6ICcnIH0sXG4gICAgICAgIHsgbmFtZTogJ3NpeCcsIGRvbWFpbnM6IFsndGhpcmQnLCAnc2Vjb25kJ10sIGltZzogJycgfSxcbiAgICAgICAgeyBuYW1lOiAnc2V2ZW4nLCBkb21haW5zOiBbJ3NlY29uZCddLCBpbWc6ICcnIH0sXG4gICAgICAgIHsgbmFtZTogJ2VpZ2h0JywgZG9tYWluczogWyd0aGlyZCddLCBpbWc6ICcnIH0sXG4gICAgICBdLFxuICAgIH07XG4gICAgY29uc3QgZG9tYWluczogSUZvcmNlRGlyZWN0ZWRDaGFydERhdGFbJ2RvbWFpbnMnXSA9IGlucHV0LmRvbWFpbnMubWFwKChuYW1lLCBpbmRleCkgPT4gKHsgaW5kZXgsIG5hbWUsIHZhbHVlOiAxIH0pKTtcbiAgICBjb25zdCBlbnRpdGllczogSUZvcmNlRGlyZWN0ZWRDaGFydERhdGFbJ2VudGl0aWVzJ10gPSBpbnB1dC5lbnRpdGllcy5tYXAoKGFwcCwgaW5kZXgpID0+ICh7XG4gICAgICBpbmRleDogaW5kZXgsXG4gICAgICBuYW1lOiBhcHAubmFtZSxcbiAgICAgIGRvbWFpbnM6IFsuLi5hcHAuZG9tYWluc10sXG4gICAgICBpbWc6IGFwcC5pbWcsXG4gICAgICBsaW5rc0NvdW50OiAwLFxuICAgIH0pKTtcbiAgICBjb25zdCBub2RlczogSUZvcmNlRGlyZWN0ZWRHcmFwaEVudGl0eVtdID0gWy4uLmVudGl0aWVzXTtcbiAgICBjb25zdCBsaW5rczogSUZvcmNlRGlyZWN0ZWRDaGFydERhdGFbJ2xpbmtzJ10gPSBlbnRpdGllc1xuICAgICAgLm1hcChlbnRpdHkgPT4ge1xuICAgICAgICByZXR1cm4gZW50aXR5LmRvbWFpbnMubWFwKGRvbWFpbiA9PiB7XG4gICAgICAgICAgY29uc3Qgc291cmNlID0gZG9tYWlucy5maW5kKHZhbHVlID0+IGRvbWFpbiA9PT0gdmFsdWUubmFtZSk/LmluZGV4ID8/IC0xO1xuICAgICAgICAgIGNvbnN0IHRhcmdldCA9IGVudGl0eS5pbmRleDtcbiAgICAgICAgICByZXR1cm4geyBzb3VyY2UsIHRhcmdldCB9O1xuICAgICAgICB9KTtcbiAgICAgIH0pXG4gICAgICAucmVkdWNlKChhY2N1bXVsYXRvciwgaXRlbSkgPT4gKEFycmF5LmlzQXJyYXkoaXRlbSkgPyBbLi4uYWNjdW11bGF0b3IsIC4uLml0ZW1dIDogWy4uLmFjY3VtdWxhdG9yLCBpdGVtXSksIFtdKVxuICAgICAgLmZpbHRlcihsaW5rID0+IGxpbmsuc291cmNlICE9PSAtMSAmJiBsaW5rLnRhcmdldCAhPT0gLTEgJiYgdHlwZW9mIGxpbmsudGFyZ2V0ICE9PSAndW5kZWZpbmVkJyk7XG4gICAgY29uc3QgY2hhcnREYXRhOiBJRm9yY2VEaXJlY3RlZENoYXJ0RGF0YSA9IHtcbiAgICAgIGRvbWFpbnMsXG4gICAgICBlbnRpdGllczogZW50aXRpZXMubWFwKGl0ZW0gPT4gKHtcbiAgICAgICAgLi4uaXRlbSxcbiAgICAgICAgbGlua3NDb3VudDogbGlua3MucmVkdWNlKChhY2MsIGxpbmspID0+IChsaW5rLnRhcmdldCA9PT0gaXRlbS5pbmRleCA/IGFjYyArIDEgOiBhY2MpLCAwKSxcbiAgICAgIH0pKSxcbiAgICAgIGxpbmtzLFxuICAgICAgbm9kZXMsXG4gICAgfTtcbiAgICByZXR1cm4gY2hhcnREYXRhO1xuICB9XG5cbiAgcHJpdmF0ZSByZWFkb25seSBicmVha3BvaW50JCA9IHRoaXMuYnJlYWtwb2ludE9ic2VydmVyXG4gICAgLm9ic2VydmUoW0JyZWFrcG9pbnRzLlhTbWFsbCwgQnJlYWtwb2ludHMuU21hbGwsIEJyZWFrcG9pbnRzLk1lZGl1bSwgQnJlYWtwb2ludHMuTGFyZ2UsIEJyZWFrcG9pbnRzLlhMYXJnZV0pXG4gICAgLnBpcGUobWFwKHJlc3VsdCA9PiBPYmplY3Qua2V5cyhyZXN1bHQuYnJlYWtwb2ludHMpLmZpbmQoaXRlbSA9PiByZXN1bHQuYnJlYWtwb2ludHNbaXRlbV0pID8/ICd1bmtub3duJykpO1xuXG4gIHB1YmxpYyByZWFkb25seSBiYXJDaGFydENvbmZpZyQgPSB0aGlzLmJyZWFrcG9pbnQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aW1lcih0aGlzLnRpbWVvdXQpLnBpcGUoXG4gICAgICAgIGZpcnN0KCksXG4gICAgICAgIG1hcCgoKSA9PiAoeyBkYXRhOiB0aGlzLmJhckNoYXJ0RGF0YSwgb3B0aW9uczogdGhpcy5iYXJDaGFydE9wdGlvbnMoKSB9KSksXG4gICAgICApLFxuICAgICksXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IGxpbmVDaGFydENvbmZpZyQgPSB0aGlzLmJyZWFrcG9pbnQkLnBpcGUoXG4gICAgc3dpdGNoTWFwKCgpID0+XG4gICAgICB0aW1lcih0aGlzLnRpbWVvdXQpLnBpcGUoXG4gICAgICAgIGZpcnN0KCksXG4gICAgICAgIG1hcCgoKSA9PiAoe1xuICAgICAgICAgIGRhdGE6IHRoaXMubGluZUNoYXJ0RGF0YSxcbiAgICAgICAgICBvcHRpb25zOiB0aGlzLmxpbmVDaGFydE9wdGlvbnMoKSxcbiAgICAgICAgICBvcHRpb25zRGF0ZURkTW1ZeTogdGhpcy5saW5lQ2hhcnRPcHRpb25zKCdkZC9tbS95eScpLFxuICAgICAgICAgIG9wdGlvbnNEYXRlRGRNbVl5eXk6IHRoaXMubGluZUNoYXJ0T3B0aW9ucygnZGQvbW0veXl5eScpLFxuICAgICAgICAgIG9wdGlvbnNEYXRlTW1ZeXl5OiB0aGlzLmxpbmVDaGFydE9wdGlvbnMoJ21tL3l5eXknKSxcbiAgICAgICAgfSkpLFxuICAgICAgKSxcbiAgICApLFxuICApO1xuXG4gIHB1YmxpYyByZWFkb25seSByYWRhckNoYXJ0Q29uZmlnJCA9IHRoaXMuYnJlYWtwb2ludCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRpbWVyKHRoaXMudGltZW91dCkucGlwZShcbiAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgbWFwKCgpID0+ICh7IGRhdGE6IHRoaXMucmFkYXJDaGFydERhdGEsIG9wdGlvbnM6IHRoaXMucmFkYXJDaGFydE9wdGlvbnMoKSB9KSksXG4gICAgICApLFxuICAgICksXG4gICk7XG5cbiAgcHVibGljIHJlYWRvbmx5IHBpZUNoYXJ0Q29uZmlnJCA9IHRoaXMuYnJlYWtwb2ludCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRpbWVyKHRoaXMudGltZW91dCkucGlwZShcbiAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgbWFwKCgpID0+ICh7IGRhdGE6IHRoaXMucGllQ2hhcnREYXRhLCBvcHRpb25zOiB0aGlzLnBpZUNoYXJ0T3B0aW9ucygpIH0pKSxcbiAgICAgICksXG4gICAgKSxcbiAgKTtcblxuICBwdWJsaWMgcmVhZG9ubHkgZm9yY2VEaXJlY3RlZENoYXJ0Q29uZmlnJCA9IHRoaXMuYnJlYWtwb2ludCQucGlwZShcbiAgICBzd2l0Y2hNYXAoKCkgPT5cbiAgICAgIHRpbWVyKHRoaXMudGltZW91dCkucGlwZShcbiAgICAgICAgZmlyc3QoKSxcbiAgICAgICAgbWFwKCgpID0+ICh7IGRhdGE6IHRoaXMuZm9yY2VEaXJlY3RlZENoYXJ0RGF0YSwgb3B0aW9uczogdGhpcy5mb3JjZURpcmVjdGVkQ2hhcnRPcHRpb25zKCkgfSkpLFxuICAgICAgKSxcbiAgICApLFxuICApO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgYnJlYWtwb2ludE9ic2VydmVyOiBCcmVha3BvaW50T2JzZXJ2ZXIpIHt9XG5cbiAgcHJpdmF0ZSByZWFkb25seSB0aW1lb3V0ID0gMTAwO1xuXG4gIHB1YmxpYyByYW5kb21WYWx1ZShyYW5nZT86IG51bWJlcikge1xuICAgIGNvbnN0IGRlZmF1bHRSYW5nZSA9IDEwMDtcbiAgICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKHJhbmdlID8/IGRlZmF1bHRSYW5nZSkgKyAxKTtcbiAgfVxuXG4gIHB1YmxpYyByYW5kb21UaW1lc3RhbXAocmFuZ2U/OiBudW1iZXIpIHtcbiAgICBjb25zdCBkZWZhdWx0UmFuZ2UgPSAxMDAwMDAwMDA7XG4gICAgcmV0dXJuIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIChyYW5nZSA/PyBkZWZhdWx0UmFuZ2UpICsgbmV3IERhdGUoKS5nZXRUaW1lKCkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEV4YW1wbGUgYmFyIGNoYXJ0IG9wdGlvbnMuXG4gICAqL1xuICBwdWJsaWMgYmFyQ2hhcnRPcHRpb25zKCkge1xuICAgIHJldHVybiA8UGFydGlhbDxJQmFyQ2hhcnRPcHRpb25zPj57XG4gICAgICBjaGFydFRpdGxlOiAnRXhhbXBsZSBiYXIgY2hhcnQnLFxuICAgICAgeEF4aXNUaXRsZTogJ2xvbmcgeCBheGlzIHRpdGxlJyxcbiAgICAgIHlBeGlzVGl0bGU6ICdsb25nIHkgYXhpcyB0aXRsZScsXG4gICAgfTtcbiAgfVxuXG4gIC8qKlxuICAgKiBFeGFtcGxlIGxpbmUgY2hhcnQgb3B0aW9ucy5cbiAgICogQHBhcmFtIGRhdGVGb3JtYXQgZGF0ZSBmb3JtYXRcbiAgICovXG4gIHB1YmxpYyBsaW5lQ2hhcnRPcHRpb25zKGRhdGVGb3JtYXQ6IFREYXRlRm9ybWF0ID0gJ2RlZmF1bHQnKSB7XG4gICAgcmV0dXJuIDxQYXJ0aWFsPElMaW5lQ2hhcnRPcHRpb25zPj57XG4gICAgICBjaGFydFRpdGxlOiBgRXhhbXBsZSBsaW5lIGNoYXJ0LCBkYXRlIGZvcm1hdCAke2RhdGVGb3JtYXR9YCxcbiAgICAgIHhBeGlzVGl0bGU6ICdEYXRlIHJhbmdlJyxcbiAgICAgIHlBeGlzVGl0bGU6ICdWYWx1ZSByYW5nZScsXG4gICAgICBkYXRlRm9ybWF0LFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRXhhbXBsZSByYWRhciBjaGFydCBvcHRpb25zLlxuICAgKi9cbiAgcHVibGljIHJhZGFyQ2hhcnRPcHRpb25zKCkge1xuICAgIHJldHVybiA8UGFydGlhbDxJUmFkYXJDaGFydE9wdGlvbnM+PntcbiAgICAgIGNoYXJ0VGl0bGU6ICdFeGFtcGxlIHJhZGFyIGNoYXJ0JyxcbiAgICB9O1xuICB9XG5cbiAgLyoqXG4gICAqIEV4YW1wbGUgcGllIGNoYXJ0IG9wdGlvbnMuXG4gICAqL1xuICBwdWJsaWMgcGllQ2hhcnRPcHRpb25zKCkge1xuICAgIHJldHVybiA8UGFydGlhbDxJUGllQ2hhcnRPcHRpb25zPj57XG4gICAgICBjaGFydFRpdGxlOiAnRXhhbXBsZSBwaWUgY2hhcnQnLFxuICAgIH07XG4gIH1cblxuICAvKipcbiAgICogRXhhbXBsZSBmb3JjZSBkaXJlY3RlZCBjaGFydCBvcHRpb25zLlxuICAgKi9cbiAgcHVibGljIGZvcmNlRGlyZWN0ZWRDaGFydE9wdGlvbnMoKSB7XG4gICAgcmV0dXJuIDxQYXJ0aWFsPElGb3JjZURpcmVjdGVkQ2hhcnRPcHRpb25zPj57XG4gICAgICBjaGFydFRpdGxlOiAnRXhhbXBsZSBmb3JjZSBkaXJlY3RlZCBjaGFydCcsXG4gICAgfTtcbiAgfVxufVxuIiwiPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiICpuZ0lmPVwiYmFyQ2hhcnRDb25maWckIHwgYXN5bmMgYXMgY29uZmlnXCI+XG4gIDxhcHAtYmFyLWNoYXJ0IFtjaGFydElkXT1cIidiYXItZXhhbXBsZS0xJ1wiIFtkYXRhXT1cImNvbmZpZy5kYXRhXCIgW29wdGlvbnNdPVwiY29uZmlnLm9wdGlvbnNcIj48L2FwcC1iYXItY2hhcnQ+XG48L2Rpdj5cblxuPGhyIFtuZ1N0eWxlXT1cInsgd2lkdGg6ICcxMDAlJyB9XCIgLz5cblxuPGRpdiBjbGFzcz1cImNvbnRhaW5lclwiICpuZ0lmPVwibGluZUNoYXJ0Q29uZmlnJCB8IGFzeW5jIGFzIGNvbmZpZ1wiPlxuICA8YXBwLWxpbmUtY2hhcnQgW2NoYXJ0SWRdPVwiJ2xpbmUtZXhhbXBsZS0xJ1wiIFtkYXRhXT1cIltjb25maWcuZGF0YVswXV1cIiBbb3B0aW9uc109XCJjb25maWcub3B0aW9uc1wiPjwvYXBwLWxpbmUtY2hhcnQ+XG5cbiAgPGFwcC1saW5lLWNoYXJ0IFtjaGFydElkXT1cIidsaW5lLWV4YW1wbGUtMidcIiBbZGF0YV09XCJbY29uZmlnLmRhdGFbMV1dXCIgW29wdGlvbnNdPVwiY29uZmlnLm9wdGlvbnNEYXRlRGRNbVl5XCI+PC9hcHAtbGluZS1jaGFydD5cblxuICA8YXBwLWxpbmUtY2hhcnRcbiAgICBbY2hhcnRJZF09XCInbGluZS1leGFtcGxlLTMnXCJcbiAgICBbZGF0YV09XCJbY29uZmlnLmRhdGFbMV0sIGNvbmZpZy5kYXRhWzJdXVwiXG4gICAgW29wdGlvbnNdPVwiY29uZmlnLm9wdGlvbnNEYXRlRGRNbVl5eXlcIlxuICA+PC9hcHAtbGluZS1jaGFydD5cblxuICA8YXBwLWxpbmUtY2hhcnQgW2NoYXJ0SWRdPVwiJ2xpbmUtZXhhbXBsZS00J1wiIFtkYXRhXT1cImNvbmZpZy5kYXRhXCIgW29wdGlvbnNdPVwiY29uZmlnLm9wdGlvbnNEYXRlTW1ZeXl5XCI+PC9hcHAtbGluZS1jaGFydD5cbjwvZGl2PlxuXG48aHIgW25nU3R5bGVdPVwieyB3aWR0aDogJzEwMCUnIH1cIiAvPlxuXG48ZGl2IGNsYXNzPVwiY29udGFpbmVyXCIgKm5nSWY9XCJyYWRhckNoYXJ0Q29uZmlnJCB8IGFzeW5jIGFzIGNvbmZpZ1wiPlxuICA8YXBwLXJhZGFyLWNoYXJ0IFtjaGFydElkXT1cIidyYWRhci1leGFtcGxlLTEnXCIgW2RhdGFdPVwiY29uZmlnLmRhdGFcIiBbb3B0aW9uc109XCJjb25maWcub3B0aW9uc1wiPjwvYXBwLXJhZGFyLWNoYXJ0PlxuPC9kaXY+XG5cbjxociBbbmdTdHlsZV09XCJ7IHdpZHRoOiAnMTAwJScgfVwiIC8+XG5cbjxkaXYgY2xhc3M9XCJjb250YWluZXJcIiAqbmdJZj1cInBpZUNoYXJ0Q29uZmlnJCB8IGFzeW5jIGFzIGNvbmZpZ1wiPlxuICA8YXBwLXBpZS1jaGFydCBbY2hhcnRJZF09XCIncGllLWV4YW1wbGUtMSdcIiBbZGF0YV09XCJjb25maWcuZGF0YVwiIFtvcHRpb25zXT1cImNvbmZpZy5vcHRpb25zXCI+PC9hcHAtcGllLWNoYXJ0PlxuPC9kaXY+XG5cbjxociBbbmdTdHlsZV09XCJ7IHdpZHRoOiAnMTAwJScgfVwiIC8+XG5cbjxkaXYgY2xhc3M9XCJjb250YWluZXJcIiAqbmdJZj1cImZvcmNlRGlyZWN0ZWRDaGFydENvbmZpZyQgfCBhc3luYyBhcyBjb25maWdcIj5cbiAgPGFwcC1mb3JjZS1kaXJlY3RlZC1jaGFydFxuICAgIFtjaGFydElkXT1cIidmb3JjZS1kaXJlY3RlZC1leGFtcGxlLTEnXCJcbiAgICBbZGF0YV09XCJjb25maWcuZGF0YVwiXG4gICAgW29wdGlvbnNdPVwiY29uZmlnLm9wdGlvbnNcIlxuICA+PC9hcHAtZm9yY2UtZGlyZWN0ZWQtY2hhcnQ+XG48L2Rpdj5cbiJdfQ==
|
|
@@ -67,11 +67,11 @@ class AppForceDirectedChartComponent {
|
|
|
67
67
|
this.drawChart();
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.
|
|
71
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.
|
|
70
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AppForceDirectedChartComponent, deps: [{ token: DOCUMENT }, { token: D3_CHART_FACTORY }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
71
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.1", type: AppForceDirectedChartComponent, selector: "app-force-directed-chart", inputs: { chartId: "chartId", data: "data", options: "options" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"container\">\n <div id=\"{{ chartId }}\" #container></div>\n\n <small class=\"container--chart-title\">{{ options.chartTitle }}</small>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center}:host .container{flex:0 1 auto}:host .container--chart-title{display:block;text-align:center}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
72
72
|
}
|
|
73
73
|
export { AppForceDirectedChartComponent };
|
|
74
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.
|
|
74
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AppForceDirectedChartComponent, decorators: [{
|
|
75
75
|
type: Component,
|
|
76
76
|
args: [{ selector: 'app-force-directed-chart', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container\">\n <div id=\"{{ chartId }}\" #container></div>\n\n <small class=\"container--chart-title\">{{ options.chartTitle }}</small>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center}:host .container{flex:0 1 auto}:host .container--chart-title{display:block;text-align:center}\n"] }]
|
|
77
77
|
}], ctorParameters: function () { return [{ type: Document, decorators: [{
|
|
@@ -67,11 +67,11 @@ class AppLineChartComponent {
|
|
|
67
67
|
this.drawChart();
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.
|
|
71
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.
|
|
70
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AppLineChartComponent, deps: [{ token: DOCUMENT }, { token: D3_CHART_FACTORY }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
71
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.1", type: AppLineChartComponent, selector: "app-line-chart", inputs: { chartId: "chartId", data: "data", options: "options" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"container\" id=\"{{ chartId }}\" #container></div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center}:host .container{flex:0 1 auto}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
72
72
|
}
|
|
73
73
|
export { AppLineChartComponent };
|
|
74
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.
|
|
74
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AppLineChartComponent, decorators: [{
|
|
75
75
|
type: Component,
|
|
76
76
|
args: [{ selector: 'app-line-chart', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container\" id=\"{{ chartId }}\" #container></div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center}:host .container{flex:0 1 auto}\n"] }]
|
|
77
77
|
}], ctorParameters: function () { return [{ type: Document, decorators: [{
|
|
@@ -65,11 +65,11 @@ class AppPieChartComponent {
|
|
|
65
65
|
this.drawChart();
|
|
66
66
|
}
|
|
67
67
|
}
|
|
68
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.
|
|
69
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.
|
|
68
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AppPieChartComponent, deps: [{ token: DOCUMENT }, { token: D3_CHART_FACTORY }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
69
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.1", type: AppPieChartComponent, selector: "app-pie-chart", inputs: { chartId: "chartId", data: "data", options: "options" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"container\">\n <div id=\"{{ chartId }}\" #container></div>\n\n <small class=\"container--chart-title\">{{ options.chartTitle }}</small>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center}:host canvas{width:auto!important;height:150px}:host .container{flex:0 1 auto}:host .container--chart-title{display:block;text-align:center}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
70
70
|
}
|
|
71
71
|
export { AppPieChartComponent };
|
|
72
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.
|
|
72
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AppPieChartComponent, decorators: [{
|
|
73
73
|
type: Component,
|
|
74
74
|
args: [{ selector: 'app-pie-chart', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container\">\n <div id=\"{{ chartId }}\" #container></div>\n\n <small class=\"container--chart-title\">{{ options.chartTitle }}</small>\n</div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center}:host canvas{width:auto!important;height:150px}:host .container{flex:0 1 auto}:host .container--chart-title{display:block;text-align:center}\n"] }]
|
|
75
75
|
}], ctorParameters: function () { return [{ type: Document, decorators: [{
|
|
@@ -77,11 +77,11 @@ class AppRadarChartComponent {
|
|
|
77
77
|
this.drawChart();
|
|
78
78
|
}
|
|
79
79
|
}
|
|
80
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.
|
|
81
|
-
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.
|
|
80
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AppRadarChartComponent, deps: [{ token: DOCUMENT }, { token: D3_CHART_FACTORY }], target: i0.ɵɵFactoryTarget.Component }); }
|
|
81
|
+
/** @nocollapse */ static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.0.1", type: AppRadarChartComponent, selector: "app-radar-chart", inputs: { chartId: "chartId", data: "data", options: "options" }, viewQueries: [{ propertyName: "container", first: true, predicate: ["container"], descendants: true }], usesOnChanges: true, ngImport: i0, template: "<div class=\"container\" id=\"{{ chartId }}\" #container></div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center}:host .container{flex:0 1 auto}\n"], changeDetection: i0.ChangeDetectionStrategy.OnPush }); }
|
|
82
82
|
}
|
|
83
83
|
export { AppRadarChartComponent };
|
|
84
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.
|
|
84
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AppRadarChartComponent, decorators: [{
|
|
85
85
|
type: Component,
|
|
86
86
|
args: [{ selector: 'app-radar-chart', changeDetection: ChangeDetectionStrategy.OnPush, template: "<div class=\"container\" id=\"{{ chartId }}\" #container></div>\n", styles: [":host{display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center}:host .container{flex:0 1 auto}\n"] }]
|
|
87
87
|
}], ctorParameters: function () { return [{ type: Document, decorators: [{
|
|
@@ -8,8 +8,8 @@ import { AppPieChartComponent } from './components/pie-chart/pie-chart.component
|
|
|
8
8
|
import { AppRadarChartComponent } from './components/radar-chart/radar-chart.component';
|
|
9
9
|
import * as i0 from "@angular/core";
|
|
10
10
|
class AppD3ChartsModule {
|
|
11
|
-
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.
|
|
12
|
-
/** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.
|
|
11
|
+
/** @nocollapse */ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AppD3ChartsModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule }); }
|
|
12
|
+
/** @nocollapse */ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "16.0.1", ngImport: i0, type: AppD3ChartsModule, declarations: [AppPieChartComponent,
|
|
13
13
|
AppRadarChartComponent,
|
|
14
14
|
AppForceDirectedChartComponent,
|
|
15
15
|
AppBarChartComponent,
|
|
@@ -20,10 +20,10 @@ class AppD3ChartsModule {
|
|
|
20
20
|
AppBarChartComponent,
|
|
21
21
|
AppLineChartComponent,
|
|
22
22
|
AppChartExamplesComponent] }); }
|
|
23
|
-
/** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.
|
|
23
|
+
/** @nocollapse */ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AppD3ChartsModule, imports: [CommonModule] }); }
|
|
24
24
|
}
|
|
25
25
|
export { AppD3ChartsModule };
|
|
26
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.
|
|
26
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.0.1", ngImport: i0, type: AppD3ChartsModule, decorators: [{
|
|
27
27
|
type: NgModule,
|
|
28
28
|
args: [{
|
|
29
29
|
imports: [CommonModule],
|
|
@@ -208,7 +208,10 @@ const onMouseOver = (self, d, g, config) => {
|
|
|
208
208
|
.style('font-size', '11px')
|
|
209
209
|
.attr('dx', () => (config.width - config.margin.left - config.margin.right) / tooltipShift)
|
|
210
210
|
.attr('dy', () => tooltipDy)
|
|
211
|
-
.text(() => `${d.value} (${new Date(d.timestamp).toUTCString()})`)
|
|
211
|
+
.text(() => `${d.value} (${new Date(d.timestamp).toUTCString()})`)
|
|
212
|
+
.transition()
|
|
213
|
+
.duration(config.transitionDuration)
|
|
214
|
+
.style('opacity', 1);
|
|
212
215
|
};
|
|
213
216
|
/**
|
|
214
217
|
* The mouse out event handler.
|
|
@@ -219,7 +222,11 @@ const onMouseOut = (self, config) => {
|
|
|
219
222
|
const duration = 400;
|
|
220
223
|
d3.select(self).attr('class', 'dot');
|
|
221
224
|
d3.select(self).transition().duration(duration).attr('r', config.dotRadius);
|
|
222
|
-
d3.selectAll('.chart-tooltip')
|
|
225
|
+
d3.selectAll('.chart-tooltip')
|
|
226
|
+
.transition()
|
|
227
|
+
.duration(config.transitionDuration / 2)
|
|
228
|
+
.style('opacity', 0)
|
|
229
|
+
.remove();
|
|
223
230
|
};
|
|
224
231
|
/**
|
|
225
232
|
* Draws the chart lines, dots, and sets the mouse pointer events.
|
|
@@ -303,4 +310,4 @@ export const drawLineChart = (container, data, options) => {
|
|
|
303
310
|
drawLinesDotsAndSetPointerEvents(g, x, y, config, data);
|
|
304
311
|
return config;
|
|
305
312
|
};
|
|
306
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1jaGFydC51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jbGllbnQtZDMtY2hhcnRzL3NyYy9saWIvdXRpbC9saW5lLWNoYXJ0LnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFHekIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFN0Q7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBc0IsTUFBTSxDQUFDLE1BQU0sQ0FBb0I7SUFDeEYsVUFBVSxFQUFFLEVBQUU7SUFDZCxLQUFLLEVBQUUsR0FBRztJQUNWLE1BQU0sRUFBRSxHQUFHO0lBQ1gsTUFBTSxFQUFFO1FBQ04sR0FBRyxFQUFFLEVBQUU7UUFDUCxLQUFLLEVBQUUsRUFBRTtRQUNULE1BQU0sRUFBRSxFQUFFO1FBQ1YsSUFBSSxFQUFFLEVBQUU7S0FDVDtJQUNELGtCQUFrQixFQUFFLEdBQUc7SUFDdkIsU0FBUyxFQUFFLEdBQUc7SUFDZCxVQUFVLEVBQUUsRUFBRTtJQUNkLFVBQVUsRUFBRSxFQUFFO0lBQ2QsS0FBSyxFQUFFO1FBQ0wsQ0FBQyxFQUFFLENBQUM7UUFDSixDQUFDLEVBQUUsRUFBRTtLQUNOO0lBQ0QsaUJBQWlCLEVBQUUsSUFBSTtJQUN2QixVQUFVLEVBQUUsU0FBUztJQUNyQixrQkFBa0IsRUFBRSxFQUFFO0lBQ3RCLEtBQUssRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztDQUM1QyxDQUFDLENBQUM7QUFFSDs7Ozs7R0FLRztBQUNILE1BQU0sZUFBZSxHQUFHLENBQUMsU0FBcUMsRUFBRSxNQUF5QixFQUFFLEVBQUU7SUFDM0YsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLElBQUksUUFBUSxDQUFDO0lBRWxELEVBQUUsQ0FBQyxN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QUUsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztJQUNqRixNQUFNLENBQUMsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFOUUsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFMUIsV0FBVyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFFMUIsWUFBWSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUV4QixnQ0FBZ0MsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFFeEQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRWxlbWVudFJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0ICogYXMgZDMgZnJvbSAnZDMnO1xuXG5pbXBvcnQgeyBJTGluZUNoYXJ0RGF0YU5vZGUsIElMaW5lQ2hhcnRPcHRpb25zLCBUTGluZUNoYXJ0RGF0YSB9IGZyb20gJy4uL2ludGVyZmFjZXMvbGluZS1jaGFydC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgZ2VuZXJhdGVDb25maWd1cmF0aW9uIH0gZnJvbSAnLi9jb25maWd1cmF0aW9uLnV0aWwnO1xuXG4vKipcbiAqIFRoZSBsaW5lIGNoYXJ0IGRlZmF1bHQgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRMaW5lQ2hhcnRDb25maWc6IElMaW5lQ2hhcnRPcHRpb25zID0gT2JqZWN0LmZyZWV6ZSg8SUxpbmVDaGFydE9wdGlvbnM+e1xuICBjaGFydFRpdGxlOiAnJyxcbiAgd2lkdGg6IDM1MCxcbiAgaGVpZ2h0OiAzNTAsXG4gIG1hcmdpbjoge1xuICAgIHRvcDogNzAsXG4gICAgcmlnaHQ6IDUwLFxuICAgIGJvdHRvbTogNTAsXG4gICAgbGVmdDogNTAsXG4gIH0sXG4gIHRyYW5zaXRpb25EdXJhdGlvbjogNDAwLFxuICBkb3RSYWRpdXM6IDMuNSxcbiAgeEF4aXNUaXRsZTogJycsXG4gIHlBeGlzVGl0bGU6ICcnLFxuICB0aWNrczoge1xuICAgIHg6IDUsXG4gICAgeTogMTAsXG4gIH0sXG4gIGRpc3BsYXlBeGlzTGFiZWxzOiB0cnVlLFxuICBkYXRlRm9ybWF0OiAnZGVmYXVsdCcsXG4gIGxhYmVsVGV4dFdyYXBXaWR0aDogMjAsIC8vIHRoZSBudW1iZXIgb2YgcGl4ZWxzIGFmdGVyIHdoaWNoIGEgbGFiZWwgbmVlZHMgdG8gYmUgZ2l2ZW4gYSBuZXcgbGluZVxuICBjb2xvcjogZDMuc2NhbGVPcmRpbmFsKGQzLnNjaGVtZUNhdGVnb3J5MTApLFxufSk7XG5cbi8qKlxuICogQ3JlYXRlcyBhIGNvbnRhaW5lciBmb3IgdGhlIGxpbmUgY2hhcnQuXG4gKiBAcGFyYW0gY29udGFpbmVyIHRoZSBjaGFydCBjb250YWluZXJcbiAqIEBwYXJhbSBjb25maWcgdGhlIGNoYXJ0IGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIHRoZSBvYmplY3Qgd2l0aCB0aGUgc3ZnIGVsZW1lbnQgYW5kIHRoZSBnIGVsZW1lbnRcbiAqL1xuY29uc3QgY3JlYXRlQ29udGFpbmVyID0gKGNvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4sIGNvbmZpZzogSUxpbmVDaGFydE9wdGlvbnMpID0+IHtcbiAgY29uc3QgaWQgPSBjb250YWluZXIubmF0aXZlRWxlbWVudC5pZCA/PyAnbGluZS0wJztcblxuICBkMy5zZWxlY3QoYCMke2lkfWApLnNlbGVjdCgnc3ZnJykucmVtb3ZlKCk7XG4gIGNvbnN0IHN2ZyA9IGQzXG4gICAgLnNlbGVjdChgIyR7aWR9YClcbiAgICAuYXBwZW5kKCdzdmcnKVxuICAgIC5hdHRyKCd3aWR0aCcsIGNvbmZpZy53aWR0aCArIGNvbmZpZy5tYXJnaW4ubGVmdCArIGNvbmZpZy5tYXJnaW4ucmlnaHQpXG4gICAgLmF0dHIoJ2hlaWdodCcsIGNvbmZpZy5oZWlnaHQgKyBjb25maWcubWFyZ2luLnRvcCArIGNvbmZpZy5tYXJnaW4uYm90dG9tKVxuICAgIC5hdHRyKCdjbGFzcycsIGlkKTtcbiAgY29uc3QgZyA9IHN2Zy5hcHBlbmQoJ2cnKS5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKCR7Y29uZmlnLm1hcmdpbi5sZWZ0fSwke2NvbmZpZy5tYXJnaW4udG9wIC8gMn0pYCk7XG5cbiAgcmV0dXJuIHsgc3ZnLCBnIH07XG59O1xuXG4vKipcbiAqIFdyYXBzIHRoZSBsaW5lIGNoYXJ0IGF4aXMgbGFiZWxzIHRleHQuXG4gKiBAcGFyYW0gc3ZnVGV4dCB0aGUgc3ZnIHRleHQgZWxlbWVudHNcbiAqIEBwYXJhbSB3aWR0aCB0aGUgY2hhcnQgYXhpcyBsYWJlbCB3aWR0aFxuICovXG5jb25zdCB3cmFwU3ZnVGV4dCA9IChzdmdUZXh0OiBkMy5TZWxlY3Rpb248ZDMuQmFzZVR5cGUsIHVua25vd24sIFNWR0dFbGVtZW50LCB1bmtub3duPiwgd2lkdGg6IG51bWJlcikgPT4ge1xuICBzdmdUZXh0LmVhY2goZnVuY3Rpb24gKHRoaXM6IGQzLkJhc2VUeXBlKSB7XG4gICAgY29uc3QgdGV4dCA9IGQzLnNlbGVjdDxkMy5CYXNlVHlwZSwgc3RyaW5nPih0aGlzKTtcbiAgICBjb25zdCB3b3JkcyA9IHRleHQudGV4dCgpLnNwbGl0KC9cXHMrLykucmV2ZXJzZSgpO1xuICAgIGlmICh3b3Jkcy5sZW5ndGggPiAxKSB7XG4gICAgICBsZXQgbGluZTogc3RyaW5nW10gPSBbXTtcbiAgICAgIGxldCBsaW5lTnVtYmVyID0gMDtcbiAgICAgIGNvbnN0IGxpbmVIZWlnaHQgPSAxLjQ7XG4gICAgICBjb25zdCB5ID0gdGV4dC5hdHRyKCd5Jyk7XG4gICAgICBjb25zdCB4ID0gdGV4dC5hdHRyKCd4Jyk7XG4gICAgICBjb25zdCBkeSA9IHBhcnNlRmxvYXQodGV4dC5hdHRyKCdkeScpID8/IDApO1xuICAgICAgbGV0IHRzcGFuID0gdGV4dC50ZXh0KG51bGwpLmFwcGVuZCgndHNwYW4nKS5hdHRyKCd4JywgeCkuYXR0cigneScsIHkpLmF0dHIoJ2R5JywgYCR7ZHl9ZW1gKTsgLy8gYXhpcyBsYWJlbFxuXG4gICAgICBsZXQgd29yZCA9IHdvcmRzLnBvcCgpO1xuXG4gICAgICB3aGlsZSAodHlwZW9mIHdvcmQgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIGxpbmUucHVzaCh3b3JkID8/ICcnKTtcbiAgICAgICAgdHNwYW4udGV4dChsaW5lLmpvaW4oJyAnKSk7XG4gICAgICAgIGlmICgodHNwYW4ubm9kZSgpPy5nZXRDb21wdXRlZFRleHRMZW5ndGgoKSA/PyAwKSA+IHdpZHRoKSB7XG4gICAgICAgICAgbGluZS5wb3AoKTtcbiAgICAgICAgICB0c3Bhbi50ZXh0KGxpbmUuam9pbignICcpKTtcbiAgICAgICAgICBsaW5lID0gW3dvcmQgPz8gJyddO1xuICAgICAgICAgIGxpbmVOdW1iZXIgKz0gMTtcbiAgICAgICAgICB0c3BhbiA9IHRleHRcbiAgICAgICAgICAgIC5hcHBlbmQoJ3RzcGFuJylcbiAgICAgICAgICAgIC5hdHRyKCd4JywgMClcbiAgICAgICAgICAgIC5hdHRyKCd5JywgeSlcbiAgICAgICAgICAgIC5hdHRyKCdkeScsIGAke2xpbmVOdW1iZXIgKiBsaW5lSGVpZ2h0ICsgZHl9ZW1gKVxuICAgICAgICAgICAgLnRleHQod29yZCA/PyAnJyk7XG4gICAgICAgIH1cbiAgICAgICAgd29yZCA9IHdvcmRzLnBvcCgpO1xuICAgICAgfVxuICAgIH1cbiAgfSk7XG59O1xuXG4vKipcbiAqIENyZWF0ZXMgdGhlIGxlZ2VuZC5cbiAqIEBwYXJhbSBnIHRoZSBzdmcgZyBlbGVtZW50XG4gKiBAcGFyYW0gY29uZmlnIHRoZSBjaGFydCBjb25maWd1cmF0aW9uXG4gKi9cbmNvbnN0IGNyZWF0ZUxlZ2VuZCA9IChnOiBkMy5TZWxlY3Rpb248U1ZHR0VsZW1lbnQsIHVua25vd24sIEhUTUxFbGVtZW50LCB1bmtub3duPiwgY29uZmlnOiBJTGluZUNoYXJ0T3B0aW9ucykgPT4ge1xuICBpZiAoY29uZmlnLmRpc3BsYXlBeGlzTGFiZWxzICYmIGNvbmZpZy54QXhpc1RpdGxlICE9PSAnJykge1xuICAgIGcuYXBwZW5kKCdnJylcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsICR7Y29uZmlnLmhlaWdodCArIGNvbmZpZy5tYXJnaW4uYm90dG9tfSlgKVxuICAgICAgLmFwcGVuZCgndGV4dCcpXG4gICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICcxMnB4JylcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsZWdlbmQnKVxuICAgICAgLmF0dHIoJ2R4JywgJzEuNWVtJylcbiAgICAgIC5hdHRyKCdkeScsICcxZW0nKVxuICAgICAgLnRleHQoYHggLSAke2NvbmZpZy54QXhpc1RpdGxlfWApO1xuICB9XG5cbiAgaWYgKGNvbmZpZy5kaXNwbGF5QXhpc0xhYmVscyAmJiBjb25maWcueUF4aXNUaXRsZSAhPT0gJycpIHtcbiAgICBnLmFwcGVuZCgnZycpXG4gICAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCAke2NvbmZpZy5oZWlnaHQgKyBjb25maWcubWFyZ2luLmJvdHRvbX0pYClcbiAgICAgIC5hcHBlbmQoJ3RleHQnKVxuICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnMTJweCcpXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGVnZW5kJylcbiAgICAgIC5hdHRyKCdkeCcsICcxLjVlbScpXG4gICAgICAuYXR0cignZHknLCAnMi41ZW0nKVxuICAgICAgLnRleHQoYHkgLSAke2NvbmZpZy55QXhpc1RpdGxlfWApO1xuICB9XG5cbiAgaWYgKGNvbmZpZy5jaGFydFRpdGxlICE9PSAnJykge1xuICAgIGcuYXBwZW5kKCdnJylcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsIDApYClcbiAgICAgIC5hcHBlbmQoJ3RleHQnKVxuICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnMTJweCcpXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGVnZW5kJylcbiAgICAgIC5hdHRyKCdkeCcsICcxLjVlbScpXG4gICAgICAuYXR0cignZHknLCAnLTJlbScpXG4gICAgICAudGV4dChjb25maWcuY2hhcnRUaXRsZSk7XG4gIH1cbn07XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgeCBheGlzLlxuICogQHBhcmFtIGcgdGhlIHN2ZyBnIGVsZW1lbnRcbiAqIEBwYXJhbSB4IHRoZSB4IGF4aXMgc2NhbGVcbiAqIEBwYXJhbSBjb25maWcgdGhlIGNoYXJ0IGNvbmZpZ3VyYXRpb25cbiAqL1xuY29uc3QgY3JlYXRlQXhpc1ggPSAoXG4gIGc6IGQzLlNlbGVjdGlvbjxTVkdHRWxlbWVudCwgdW5rbm93biwgSFRNTEVsZW1lbnQsIHVua25vd24+LFxuICB4OiBkMy5TY2FsZVRpbWU8bnVtYmVyLCBudW1iZXI+LFxuICBjb25maWc6IElMaW5lQ2hhcnRPcHRpb25zLFxuKSA9PiB7XG4gIGNvbnN0IHhMYWJlbHMgPSBnXG4gICAgLmFwcGVuZCgnZycpXG4gICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoMCwgJHtjb25maWcuaGVpZ2h0fSlgKVxuICAgIC5jYWxsKFxuICAgICAgZDNcbiAgICAgICAgLmF4aXNCb3R0b20oeClcbiAgICAgICAgLnRpY2tzKGNvbmZpZy50aWNrcy54KVxuICAgICAgICAudGlja0Zvcm1hdChkID0+IHtcbiAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoZC52YWx1ZU9mKCkpO1xuICAgICAgICAgIGNvbnN0IGZvcm1hdHRpbmdPZmZzZXQgPSAxMDtcbiAgICAgICAgICBjb25zdCBkYXkgPSBkYXRlLmdldERhdGUoKTtcbiAgICAgICAgICBjb25zdCBkZCA9IGRheSA8IGZvcm1hdHRpbmdPZmZzZXQgPyBgMCR7ZGF5fWAgOiBkYXk7XG4gICAgICAgICAgY29uc3QgbW9udGggPSBkYXRlLmdldE1vbnRoKCkgKyAxO1xuICAgICAgICAgIGNvbnN0IG1tID0gbW9udGggPCBmb3JtYXR0aW5nT2Zmc2V0ID8gYDAke21vbnRofWAgOiBtb250aDtcbiAgICAgICAgICBjb25zdCB5ZWFyID0gZGF0ZS5nZXRGdWxsWWVhcigpLnRvU3RyaW5nKCk7XG4gICAgICAgICAgY29uc3QgeXkgPSB5ZWFyLnNsaWNlKDIpO1xuICAgICAgICAgIGNvbnN0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpO1xuICAgICAgICAgIGNvbnN0IGhvdXIgPSBob3VycyA8IGZvcm1hdHRpbmdPZmZzZXQgPyBgMCR7aG91cnN9YCA6IGhvdXJzO1xuICAgICAgICAgIGNvbnN0IG1pbnV0ZXMgPSBkYXRlLmdldE1pbnV0ZXMoKTtcbiAgICAgICAgICBjb25zdCBtaW51dGUgPSBtaW51dGVzIDwgZm9ybWF0dGluZ09mZnNldCA/IGAwJHttaW51dGVzfWAgOiBtaW51dGVzO1xuICAgICAgICAgIGxldCBmb3JtYXR0ZWREYXRlID0gYCR7ZGR9LyR7bW19LyR7eXl9ICR7aG91cn06JHttaW51dGV9YDtcbiAgICAgICAgICBzd2l0Y2ggKGNvbmZpZy5kYXRlRm9ybWF0KSB7XG4gICAgICAgICAgICBjYXNlICdkZC9tbS95eXl5JzpcbiAgICAgICAgICAgICAgZm9ybWF0dGVkRGF0ZSA9IGAke2RkfS8ke21tfS8ke3llYXJ9YDtcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICdkZC9tbS95eSc6XG4gICAgICAgICAgICAgIGZvcm1hdHRlZERhdGUgPSBgJHtkZH0vJHttbX0vJHt5eX1gO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ21tL3l5eXknOlxuICAgICAgICAgICAgICBmb3JtYXR0ZWREYXRlID0gYCR7bW19LyR7eWVhcn1gO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ3l5eXknOlxuICAgICAgICAgICAgICBmb3JtYXR0ZWREYXRlID0gYCR7eWVhcn1gO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gZm9ybWF0dGVkRGF0ZTtcbiAgICAgICAgfSksXG4gICAgKVxuICAgIC5hcHBlbmQoJ3RleHQnKTtcblxuICBnLnNlbGVjdEFsbCgndGV4dCcpLmNhbGwod3JhcFN2Z1RleHQsIGNvbmZpZy5sYWJlbFRleHRXcmFwV2lkdGgpO1xuXG4gIGlmIChjb25maWcuZGlzcGxheUF4aXNMYWJlbHMpIHtcbiAgICB4TGFiZWxzLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHtjb25maWcud2lkdGh9LCAwKWApLmF0dHIoJ2NsYXNzJywgJ2xlZ2VuZCcpLmF0dHIoJ2R4JywgJzEuNWVtJykuYXR0cignZHknLCAnMC43ZW0nKS50ZXh0KCd4Jyk7XG4gIH1cbn07XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgeSBheGlzLlxuICogQHBhcmFtIGcgdGhlIHN2ZyBnIGVsZW1lbnRcbiAqIEBwYXJhbSB5IHRoZSB5IGF4aXMgc2NhbGVcbiAqIEBwYXJhbSBjb25maWcgdGhlIGNoYXJ0IGNvbmZpZ3VyYXRpb25cbiAqL1xuY29uc3QgY3JlYXRlQXhpc1kgPSAoXG4gIGc6IGQzLlNlbGVjdGlvbjxTVkdHRWxlbWVudCwgdW5rbm93biwgSFRNTEVsZW1lbnQsIHVua25vd24+LFxuICB5OiBkMy5TY2FsZUxpbmVhcjxudW1iZXIsIG51bWJlcj4sXG4gIGNvbmZpZzogSUxpbmVDaGFydE9wdGlvbnMsXG4pID0+IHtcbiAgY29uc3QgeUxhYmVscyA9IGdcbiAgICAuYXBwZW5kKCdnJylcbiAgICAuY2FsbChcbiAgICAgIGQzXG4gICAgICAgIC5heGlzTGVmdCh5KVxuICAgICAgICAudGlja3MoY29uZmlnLnRpY2tzLnkpXG4gICAgICAgIC50aWNrRm9ybWF0KGQgPT4gYCR7ZH1gKSxcbiAgICApXG4gICAgLmFwcGVuZCgndGV4dCcpO1xuXG4gIGlmIChjb25maWcuZGlzcGxheUF4aXNMYWJlbHMpIHtcbiAgICB5TGFiZWxzLmF0dHIoJ2NsYXNzJywgJ2xlZ2VuZCcpLmF0dHIoJ2R5JywgJy0xLjVlbScpLmF0dHIoJ2NsYXNzJywgJ2xlZ2VuZCcpLnRleHQoJ3knKTtcbiAgfVxufTtcblxuLyoqXG4gKiBUaGUgbW91c2Ugb3ZlciBldmVudCBoYW5kbGVyLlxuICogQHBhcmFtIHNlbGYgYW4gc3ZnIGNpcmNsZSBlbGVtZW50XG4gKiBAcGFyYW0gZCB0aGUgY2hhcnQgZGF0YSBub2RlXG4gKiBAcGFyYW0gZyB0aGUgc3ZnIGcgZWxlbWVudFxuICogQHBhcmFtIGNvbmZpZyB0aGUgY2hhcnQgY29uZmlndXJhdGlvblxuICovXG5jb25zdCBvbk1vdXNlT3ZlciA9IChcbiAgc2VsZjogU1ZHQ2lyY2xlRWxlbWVudCxcbiAgZDogSUxpbmVDaGFydERhdGFOb2RlLFxuICBnOiBkMy5TZWxlY3Rpb248U1ZHR0VsZW1lbnQsIHVua25vd24sIEhUTUxFbGVtZW50LCB1bmtub3duPixcbiAgY29uZmlnOiBJTGluZUNoYXJ0T3B0aW9ucyxcbikgPT4ge1xuICBjb25zdCBkdXJhdGlvbiA9IDQwMDtcbiAgZDMuc2VsZWN0KHNlbGYpXG4gICAgLnRyYW5zaXRpb24oKVxuICAgIC5kdXJhdGlvbihkdXJhdGlvbilcbiAgICAuYXR0cigncicsIGNvbmZpZy5kb3RSYWRpdXMgKiAyKTtcblxuICBjb25zdCB0b29sdGlwU2hpZnQgPSA0O1xuICBjb25zdCB0b29sdGlwRHkgPSAtMTA7XG4gIGcuYXBwZW5kKCd0ZXh0JylcbiAgICAuYXR0cignY2xhc3MnLCAnY2hhcnQtdG9vbHRpcCcpXG4gICAgLnN0eWxlKCdmb250LXNpemUnLCAnMTFweCcpXG4gICAgLmF0dHIoJ2R4JywgKCkgPT4gKGNvbmZpZy53aWR0aCAtIGNvbmZpZy5tYXJnaW4ubGVmdCAtIGNvbmZpZy5tYXJnaW4ucmlnaHQpIC8gdG9vbHRpcFNoaWZ0KVxuICAgIC5hdHRyKCdkeScsICgpID0+IHRvb2x0aXBEeSlcbiAgICAudGV4dCgoKSA9PiBgJHtkLnZhbHVlfSAoJHtuZXcgRGF0ZShkLnRpbWVzdGFtcCkudG9VVENTdHJpbmcoKX0pYCk7XG59O1xuXG4vKipcbiAqIFRoZSBtb3VzZSBvdXQgZXZlbnQgaGFuZGxlci5cbiAqIEBwYXJhbSBzZWxmIGFuIHN2ZyBjaXJjbGUgZWxlbWVudFxuICogQHBhcmFtIGNvbmZpZyB0aGUgY2hhcnQgY29uZmlndXJhdGlvblxuICovXG5jb25zdCBvbk1vdXNlT3V0ID0gKHNlbGY6IFNWR0NpcmNsZUVsZW1lbnQsIGNvbmZpZzogSUxpbmVDaGFydE9wdGlvbnMpID0+IHtcbiAgY29uc3QgZHVyYXRpb24gPSA0MDA7XG4gIGQzLnNlbGVjdChzZWxmKS5hdHRyKCdjbGFzcycsICdkb3QnKTtcbiAgZDMuc2VsZWN0KHNlbGYpLnRyYW5zaXRpb24oKS5kdXJhdGlvbihkdXJhdGlvbikuYXR0cigncicsIGNvbmZpZy5kb3RSYWRpdXMpO1xuXG4gIGQzLnNlbGVjdEFsbCgnLmNoYXJ0LXRvb2x0aXAnKS5yZW1vdmUoKTtcbn07XG5cbi8qKlxuICogRHJhd3MgdGhlIGNoYXJ0IGxpbmVzLCBkb3RzLCBhbmQgc2V0cyB0aGUgbW91c2UgcG9pbnRlciBldmVudHMuXG4gKiBAcGFyYW0gZyB0aGUgc3ZnIGcgZWxlbWVudFxuICogQHBhcmFtIHggdGhlIHggYXhpcyBzY2FsZVxuICogQHBhcmFtIHkgdGhlIHkgYXhpcyBzY2FsZVxuICogQHBhcmFtIGNvbmZpZyB0aGUgY2hhcnQgY29uZmlndXJhdGlvblxuICogQHBhcmFtIGRhdGEgdGhlIGNoYXJ0IGRhdGFcbiAqL1xuY29uc3QgZHJhd0xpbmVzRG90c0FuZFNldFBvaW50ZXJFdmVudHMgPSAoXG4gIGc6IGQzLlNlbGVjdGlvbjxTVkdHRWxlbWVudCwgdW5rbm93biwgSFRNTEVsZW1lbnQsIHVua25vd24+LFxuICB4OiBkMy5TY2FsZVRpbWU8bnVtYmVyLCBudW1iZXI+LFxuICB5OiBkMy5TY2FsZUxpbmVhcjxudW1iZXIsIG51bWJlcj4sXG4gIGNvbmZpZzogSUxpbmVDaGFydE9wdGlvbnMsXG4gIGRhdGE6IFRMaW5lQ2hhcnREYXRhW10sXG4pID0+IHtcbiAgY29uc3QgbGluZSA9IGQzXG4gICAgLmxpbmU8SUxpbmVDaGFydERhdGFOb2RlPigpXG4gICAgLngoZCA9PiB4KGQudGltZXN0YW1wKSlcbiAgICAueShkID0+IHkoZC52YWx1ZSkpXG4gICAgLmN1cnZlKGQzLmN1cnZlTW9ub3RvbmVYKTtcblxuICBjb25zdCBmbGF0RGF0YSA9IGRhdGEuZmxhdCgpO1xuXG4gIGZvciAobGV0IGMgPSAwLCBtYXhDID0gZGF0YS5sZW5ndGg7IGMgPCBtYXhDOyBjICs9IDEpIHtcbiAgICBjb25zdCBjaHVuayA9IGRhdGFbY107XG5cbiAgICBnLmFwcGVuZCgncGF0aCcpXG4gICAgICAuYXR0cignaWQnLCBgbGluZS0ke2N9YClcbiAgICAgIC5zdHlsZSgnZmlsbCcsICdub25lJylcbiAgICAgIC5zdHlsZSgnc3Ryb2tlJywgY29uZmlnLmNvbG9yKGMudG9TdHJpbmcoKSkpXG4gICAgICAuc3R5bGUoJ3N0cm9rZS13aWR0aCcsICcycHgnKVxuICAgICAgLmF0dHIoJ2QnLCBsaW5lKGNodW5rKSk7XG4gIH1cblxuICBnLnNlbGVjdEFsbCgnLmRvdCcpXG4gICAgLmRhdGEoZmxhdERhdGEpXG4gICAgLmVudGVyKClcbiAgICAuYXBwZW5kKCdjaXJjbGUnKVxuICAgIC5hdHRyKCdjbGFzcycsICdkb3QnKVxuICAgIC5zdHlsZSgncG9pbnRlci1ldmVudHMnLCAnYWxsJylcbiAgICAuc3R5bGUoJ2ZpbGwnLCAoZCwgaSkgPT4gY29uZmlnLmNvbG9yKGkudG9TdHJpbmcoKSkpXG4gICAgLm9uKCdtb3VzZW92ZXInLCBmdW5jdGlvbiAodGhpcywgZXZlbnQsIGQpIHtcbiAgICAgIHJldHVybiBvbk1vdXNlT3Zlcih0aGlzLCBkLCBnLCBjb25maWcpO1xuICAgIH0pXG4gICAgLm9uKCdtb3VzZW91dCcsIGZ1bmN0aW9uICh0aGlzKSB7XG4gICAgICByZXR1cm4gb25Nb3VzZU91dCh0aGlzLCBjb25maWcpO1xuICAgIH0pXG4gICAgLmF0dHIoJ2N4JywgZnVuY3Rpb24gKHRoaXMsIGQpIHtcbiAgICAgIHJldHVybiB4KGQudGltZXN0YW1wKTtcbiAgICB9KVxuICAgIC5hdHRyKCdjeScsIGZ1bmN0aW9uICh0aGlzLCBkKSB7XG4gICAgICByZXR1cm4geShkLnZhbHVlKTtcbiAgICB9KVxuICAgIC5hdHRyKCdyJywgMClcbiAgICAudHJhbnNpdGlvbigpXG4gICAgLmVhc2UoZDMuZWFzZUxpbmVhcilcbiAgICAuZHVyYXRpb24oY29uZmlnLnRyYW5zaXRpb25EdXJhdGlvbilcbiAgICAuZGVsYXkoKGQsIGkpID0+IHtcbiAgICAgIGNvbnN0IG11bHRpcGxpZXIgPSA1MDtcbiAgICAgIHJldHVybiBpICogbXVsdGlwbGllcjtcbiAgICB9KVxuICAgIC5hdHRyKCdyJywgY29uZmlnLmRvdFJhZGl1cyk7XG59O1xuXG4vKipcbiAqIERyYXdzIHRoZSBsaW5lIGNoYXJ0LlxuICogQHBhcmFtIGNvbnRhaW5lciB0aGUgY2hhcnQgY29udGFpbmVyXG4gKiBAcGFyYW0gZGF0YSB0aGUgY2hhcnQgZGF0YVxuICogQHBhcmFtIG9wdGlvbnMgdGhlIGNoYXJ0IG9wdGlvbnNcbiAqIEByZXR1cm5zIHRoZSBjaGFydCBjb25maWd1cmF0aW9uXG4gKi9cbmV4cG9ydCBjb25zdCBkcmF3TGluZUNoYXJ0ID0gKGNvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4sIGRhdGE6IFRMaW5lQ2hhcnREYXRhW10sIG9wdGlvbnM/OiBQYXJ0aWFsPElMaW5lQ2hhcnRPcHRpb25zPikgPT4ge1xuICBjb25zdCBjb25maWc6IElMaW5lQ2hhcnRPcHRpb25zID0gZ2VuZXJhdGVDb25maWd1cmF0aW9uPElMaW5lQ2hhcnRPcHRpb25zPihkZWZhdWx0TGluZUNoYXJ0Q29uZmlnLCBvcHRpb25zLCB7fSk7XG5cbiAgY29uc3QgeyBnIH0gPSBjcmVhdGVDb250YWluZXIoY29udGFpbmVyLCBjb25maWcpO1xuXG4gIGNvbnN0IHJhbmdlID0gZGF0YS5yZWR1Y2UoXG4gICAgKGFjY3VtdWxhdG9yOiB7IG1pblRpbWU6IG51bWJlcjsgbWF4VGltZTogbnVtYmVyOyBtYXhWYWx1ZTogbnVtYmVyIH0sIGFycikgPT4ge1xuICAgICAgY29uc3QgdGltZXN0YW1wcyA9IGFyci5tYXAoaXRlbSA9PiBpdGVtLnRpbWVzdGFtcCk7XG4gICAgICBjb25zdCBtaW5JdGVtID0gTWF0aC5taW4oLi4udGltZXN0YW1wcyk7XG4gICAgICBjb25zdCBtYXhJdGVtID0gTWF0aC5tYXgoLi4udGltZXN0YW1wcyk7XG4gICAgICBjb25zdCBtaW5UaW1lID0gTWF0aC5taW4obWluSXRlbSwgYWNjdW11bGF0b3IubWluVGltZSk7XG4gICAgICBjb25zdCBtYXhUaW1lID0gTWF0aC5tYXgobWF4SXRlbSwgYWNjdW11bGF0b3IubWF4VGltZSk7XG5cbiAgICAgIGNvbnN0IHZhbHVlcyA9IGFyci5tYXAoaXRlbSA9PiBpdGVtLnZhbHVlKTtcbiAgICAgIGNvbnN0IG1heEl0ZW1WYWx1ZSA9IE1hdGgubWF4KC4uLnZhbHVlcyk7XG4gICAgICBjb25zdCBtYXhWYWx1ZSA9IE1hdGgubWF4KG1heEl0ZW1WYWx1ZSwgYWNjdW11bGF0b3IubWF4VmFsdWUpO1xuICAgICAgcmV0dXJuIHsgbWluVGltZSwgbWF4VGltZSwgbWF4VmFsdWUgfTtcbiAgICB9LFxuICAgIHsgbWluVGltZTogTnVtYmVyKEluZmluaXR5KSwgbWF4VGltZTogLUluZmluaXR5LCBtYXhWYWx1ZTogLUluZmluaXR5IH0sXG4gICk7XG5cbiAgY29uc3QgeCA9IGQzLnNjYWxlVGltZShbMCwgY29uZmlnLndpZHRoXSkuZG9tYWluKFtyYW5nZS5taW5UaW1lLCByYW5nZS5tYXhUaW1lXSk7XG4gIGNvbnN0IHkgPSBkMy5zY2FsZUxpbmVhcihbY29uZmlnLmhlaWdodCwgMF0pLmRvbWFpbihbMCwgcmFuZ2UubWF4VmFsdWUgPz8gMV0pO1xuXG4gIGNyZWF0ZUF4aXNYKGcsIHgsIGNvbmZpZyk7XG5cbiAgY3JlYXRlQXhpc1koZywgeSwgY29uZmlnKTtcblxuICBjcmVhdGVMZWdlbmQoZywgY29uZmlnKTtcblxuICBkcmF3TGluZXNEb3RzQW5kU2V0UG9pbnRlckV2ZW50cyhnLCB4LCB5LCBjb25maWcsIGRhdGEpO1xuXG4gIHJldHVybiBjb25maWc7XG59O1xuIl19
|
|
313
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluZS1jaGFydC51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jbGllbnQtZDMtY2hhcnRzL3NyYy9saWIvdXRpbC9saW5lLWNoYXJ0LnV0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxLQUFLLEVBQUUsTUFBTSxJQUFJLENBQUM7QUFHekIsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFFN0Q7O0dBRUc7QUFDSCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBc0IsTUFBTSxDQUFDLE1BQU0sQ0FBb0I7SUFDeEYsVUFBVSxFQUFFLEVBQUU7SUFDZCxLQUFLLEVBQUUsR0FBRztJQUNWLE1BQU0sRUFBRSxHQUFHO0lBQ1gsTUFBTSxFQUFFO1FBQ04sR0FBRyxFQUFFLEVBQUU7UUFDUCxLQUFLLEVBQUUsRUFBRTtRQUNULE1BQU0sRUFBRSxFQUFFO1FBQ1YsSUFBSSxFQUFFLEVBQUU7S0FDVDtJQUNELGtCQUFrQixFQUFFLEdBQUc7SUFDdkIsU0FBUyxFQUFFLEdBQUc7SUFDZCxVQUFVLEVBQUUsRUFBRTtJQUNkLFVBQVUsRUFBRSxFQUFFO0lBQ2QsS0FBSyxFQUFFO1FBQ0wsQ0FBQyxFQUFFLENBQUM7UUFDSixDQUFDLEVBQUUsRUFBRTtLQUNOO0lBQ0QsaUJBQWlCLEVBQUUsSUFBSTtJQUN2QixVQUFVLEVBQUUsU0FBUztJQUNyQixrQkFBa0IsRUFBRSxFQUFFO0lBQ3RCLEtBQUssRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztDQUM1QyxDQUFDLENBQUM7QUFFSDs7Ozs7R0FLRztBQUNILE1BQU0sZUFBZSxHQUFHLENBQUMsU0FBcUMsRUFBRSxNQUF5QixFQUFFLEVBQUU7SUFDM0YsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLElBQUksUUFBUSxDQUFDO0lBRWxELEVBQUUsQ0FBQyxN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QzlELE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ3hDLENBQUMsRUFDRCxFQUFFLE9BQU8sRUFBRSxNQUFNLENBQUMsUUFBUSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRSxDQUN2RSxDQUFDO0lBRUYsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQ2pGLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxXQUFXLENBQUMsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxRQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUU5RSxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUUxQixXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztJQUUxQixZQUFZLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRXhCLGdDQUFnQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsQ0FBQztJQUV4RCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XG5cbmltcG9ydCB7IElMaW5lQ2hhcnREYXRhTm9kZSwgSUxpbmVDaGFydE9wdGlvbnMsIFRMaW5lQ2hhcnREYXRhIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9saW5lLWNoYXJ0LmludGVyZmFjZSc7XG5pbXBvcnQgeyBnZW5lcmF0ZUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuL2NvbmZpZ3VyYXRpb24udXRpbCc7XG5cbi8qKlxuICogVGhlIGxpbmUgY2hhcnQgZGVmYXVsdCBjb25maWd1cmF0aW9uLlxuICovXG5leHBvcnQgY29uc3QgZGVmYXVsdExpbmVDaGFydENvbmZpZzogSUxpbmVDaGFydE9wdGlvbnMgPSBPYmplY3QuZnJlZXplKDxJTGluZUNoYXJ0T3B0aW9ucz57XG4gIGNoYXJ0VGl0bGU6ICcnLFxuICB3aWR0aDogMzUwLFxuICBoZWlnaHQ6IDM1MCxcbiAgbWFyZ2luOiB7XG4gICAgdG9wOiA3MCxcbiAgICByaWdodDogNTAsXG4gICAgYm90dG9tOiA1MCxcbiAgICBsZWZ0OiA1MCxcbiAgfSxcbiAgdHJhbnNpdGlvbkR1cmF0aW9uOiA0MDAsXG4gIGRvdFJhZGl1czogMy41LFxuICB4QXhpc1RpdGxlOiAnJyxcbiAgeUF4aXNUaXRsZTogJycsXG4gIHRpY2tzOiB7XG4gICAgeDogNSxcbiAgICB5OiAxMCxcbiAgfSxcbiAgZGlzcGxheUF4aXNMYWJlbHM6IHRydWUsXG4gIGRhdGVGb3JtYXQ6ICdkZWZhdWx0JyxcbiAgbGFiZWxUZXh0V3JhcFdpZHRoOiAyMCwgLy8gdGhlIG51bWJlciBvZiBwaXhlbHMgYWZ0ZXIgd2hpY2ggYSBsYWJlbCBuZWVkcyB0byBiZSBnaXZlbiBhIG5ldyBsaW5lXG4gIGNvbG9yOiBkMy5zY2FsZU9yZGluYWwoZDMuc2NoZW1lQ2F0ZWdvcnkxMCksXG59KTtcblxuLyoqXG4gKiBDcmVhdGVzIGEgY29udGFpbmVyIGZvciB0aGUgbGluZSBjaGFydC5cbiAqIEBwYXJhbSBjb250YWluZXIgdGhlIGNoYXJ0IGNvbnRhaW5lclxuICogQHBhcmFtIGNvbmZpZyB0aGUgY2hhcnQgY29uZmlndXJhdGlvblxuICogQHJldHVybnMgdGhlIG9iamVjdCB3aXRoIHRoZSBzdmcgZWxlbWVudCBhbmQgdGhlIGcgZWxlbWVudFxuICovXG5jb25zdCBjcmVhdGVDb250YWluZXIgPSAoY29udGFpbmVyOiBFbGVtZW50UmVmPEhUTUxEaXZFbGVtZW50PiwgY29uZmlnOiBJTGluZUNoYXJ0T3B0aW9ucykgPT4ge1xuICBjb25zdCBpZCA9IGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmlkID8/ICdsaW5lLTAnO1xuXG4gIGQzLnNlbGVjdChgIyR7aWR9YCkuc2VsZWN0KCdzdmcnKS5yZW1vdmUoKTtcbiAgY29uc3Qgc3ZnID0gZDNcbiAgICAuc2VsZWN0KGAjJHtpZH1gKVxuICAgIC5hcHBlbmQoJ3N2ZycpXG4gICAgLmF0dHIoJ3dpZHRoJywgY29uZmlnLndpZHRoICsgY29uZmlnLm1hcmdpbi5sZWZ0ICsgY29uZmlnLm1hcmdpbi5yaWdodClcbiAgICAuYXR0cignaGVpZ2h0JywgY29uZmlnLmhlaWdodCArIGNvbmZpZy5tYXJnaW4udG9wICsgY29uZmlnLm1hcmdpbi5ib3R0b20pXG4gICAgLmF0dHIoJ2NsYXNzJywgaWQpO1xuICBjb25zdCBnID0gc3ZnLmFwcGVuZCgnZycpLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoJHtjb25maWcubWFyZ2luLmxlZnR9LCR7Y29uZmlnLm1hcmdpbi50b3AgLyAyfSlgKTtcblxuICByZXR1cm4geyBzdmcsIGcgfTtcbn07XG5cbi8qKlxuICogV3JhcHMgdGhlIGxpbmUgY2hhcnQgYXhpcyBsYWJlbHMgdGV4dC5cbiAqIEBwYXJhbSBzdmdUZXh0IHRoZSBzdmcgdGV4dCBlbGVtZW50c1xuICogQHBhcmFtIHdpZHRoIHRoZSBjaGFydCBheGlzIGxhYmVsIHdpZHRoXG4gKi9cbmNvbnN0IHdyYXBTdmdUZXh0ID0gKHN2Z1RleHQ6IGQzLlNlbGVjdGlvbjxkMy5CYXNlVHlwZSwgdW5rbm93biwgU1ZHR0VsZW1lbnQsIHVua25vd24+LCB3aWR0aDogbnVtYmVyKSA9PiB7XG4gIHN2Z1RleHQuZWFjaChmdW5jdGlvbiAodGhpczogZDMuQmFzZVR5cGUpIHtcbiAgICBjb25zdCB0ZXh0ID0gZDMuc2VsZWN0PGQzLkJhc2VUeXBlLCBzdHJpbmc+KHRoaXMpO1xuICAgIGNvbnN0IHdvcmRzID0gdGV4dC50ZXh0KCkuc3BsaXQoL1xccysvKS5yZXZlcnNlKCk7XG4gICAgaWYgKHdvcmRzLmxlbmd0aCA+IDEpIHtcbiAgICAgIGxldCBsaW5lOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgbGV0IGxpbmVOdW1iZXIgPSAwO1xuICAgICAgY29uc3QgbGluZUhlaWdodCA9IDEuNDtcbiAgICAgIGNvbnN0IHkgPSB0ZXh0LmF0dHIoJ3knKTtcbiAgICAgIGNvbnN0IHggPSB0ZXh0LmF0dHIoJ3gnKTtcbiAgICAgIGNvbnN0IGR5ID0gcGFyc2VGbG9hdCh0ZXh0LmF0dHIoJ2R5JykgPz8gMCk7XG4gICAgICBsZXQgdHNwYW4gPSB0ZXh0LnRleHQobnVsbCkuYXBwZW5kKCd0c3BhbicpLmF0dHIoJ3gnLCB4KS5hdHRyKCd5JywgeSkuYXR0cignZHknLCBgJHtkeX1lbWApOyAvLyBheGlzIGxhYmVsXG5cbiAgICAgIGxldCB3b3JkID0gd29yZHMucG9wKCk7XG5cbiAgICAgIHdoaWxlICh0eXBlb2Ygd29yZCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgbGluZS5wdXNoKHdvcmQgPz8gJycpO1xuICAgICAgICB0c3Bhbi50ZXh0KGxpbmUuam9pbignICcpKTtcbiAgICAgICAgaWYgKCh0c3Bhbi5ub2RlKCk/LmdldENvbXB1dGVkVGV4dExlbmd0aCgpID8/IDApID4gd2lkdGgpIHtcbiAgICAgICAgICBsaW5lLnBvcCgpO1xuICAgICAgICAgIHRzcGFuLnRleHQobGluZS5qb2luKCcgJykpO1xuICAgICAgICAgIGxpbmUgPSBbd29yZCA/PyAnJ107XG4gICAgICAgICAgbGluZU51bWJlciArPSAxO1xuICAgICAgICAgIHRzcGFuID0gdGV4dFxuICAgICAgICAgICAgLmFwcGVuZCgndHNwYW4nKVxuICAgICAgICAgICAgLmF0dHIoJ3gnLCAwKVxuICAgICAgICAgICAgLmF0dHIoJ3knLCB5KVxuICAgICAgICAgICAgLmF0dHIoJ2R5JywgYCR7bGluZU51bWJlciAqIGxpbmVIZWlnaHQgKyBkeX1lbWApXG4gICAgICAgICAgICAudGV4dCh3b3JkID8/ICcnKTtcbiAgICAgICAgfVxuICAgICAgICB3b3JkID0gd29yZHMucG9wKCk7XG4gICAgICB9XG4gICAgfVxuICB9KTtcbn07XG5cbi8qKlxuICogQ3JlYXRlcyB0aGUgbGVnZW5kLlxuICogQHBhcmFtIGcgdGhlIHN2ZyBnIGVsZW1lbnRcbiAqIEBwYXJhbSBjb25maWcgdGhlIGNoYXJ0IGNvbmZpZ3VyYXRpb25cbiAqL1xuY29uc3QgY3JlYXRlTGVnZW5kID0gKGc6IGQzLlNlbGVjdGlvbjxTVkdHRWxlbWVudCwgdW5rbm93biwgSFRNTEVsZW1lbnQsIHVua25vd24+LCBjb25maWc6IElMaW5lQ2hhcnRPcHRpb25zKSA9PiB7XG4gIGlmIChjb25maWcuZGlzcGxheUF4aXNMYWJlbHMgJiYgY29uZmlnLnhBeGlzVGl0bGUgIT09ICcnKSB7XG4gICAgZy5hcHBlbmQoJ2cnKVxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoMCwgJHtjb25maWcuaGVpZ2h0ICsgY29uZmlnLm1hcmdpbi5ib3R0b219KWApXG4gICAgICAuYXBwZW5kKCd0ZXh0JylcbiAgICAgIC5zdHlsZSgnZm9udC1zaXplJywgJzEycHgnKVxuICAgICAgLmF0dHIoJ2NsYXNzJywgJ2xlZ2VuZCcpXG4gICAgICAuYXR0cignZHgnLCAnMS41ZW0nKVxuICAgICAgLmF0dHIoJ2R5JywgJzFlbScpXG4gICAgICAudGV4dChgeCAtICR7Y29uZmlnLnhBeGlzVGl0bGV9YCk7XG4gIH1cblxuICBpZiAoY29uZmlnLmRpc3BsYXlBeGlzTGFiZWxzICYmIGNvbmZpZy55QXhpc1RpdGxlICE9PSAnJykge1xuICAgIGcuYXBwZW5kKCdnJylcbiAgICAgIC5hdHRyKCd0cmFuc2Zvcm0nLCBgdHJhbnNsYXRlKDAsICR7Y29uZmlnLmhlaWdodCArIGNvbmZpZy5tYXJnaW4uYm90dG9tfSlgKVxuICAgICAgLmFwcGVuZCgndGV4dCcpXG4gICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICcxMnB4JylcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsZWdlbmQnKVxuICAgICAgLmF0dHIoJ2R4JywgJzEuNWVtJylcbiAgICAgIC5hdHRyKCdkeScsICcyLjVlbScpXG4gICAgICAudGV4dChgeSAtICR7Y29uZmlnLnlBeGlzVGl0bGV9YCk7XG4gIH1cblxuICBpZiAoY29uZmlnLmNoYXJ0VGl0bGUgIT09ICcnKSB7XG4gICAgZy5hcHBlbmQoJ2cnKVxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGB0cmFuc2xhdGUoMCwgMClgKVxuICAgICAgLmFwcGVuZCgndGV4dCcpXG4gICAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICcxMnB4JylcbiAgICAgIC5hdHRyKCdjbGFzcycsICdsZWdlbmQnKVxuICAgICAgLmF0dHIoJ2R4JywgJzEuNWVtJylcbiAgICAgIC5hdHRyKCdkeScsICctMmVtJylcbiAgICAgIC50ZXh0KGNvbmZpZy5jaGFydFRpdGxlKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSB4IGF4aXMuXG4gKiBAcGFyYW0gZyB0aGUgc3ZnIGcgZWxlbWVudFxuICogQHBhcmFtIHggdGhlIHggYXhpcyBzY2FsZVxuICogQHBhcmFtIGNvbmZpZyB0aGUgY2hhcnQgY29uZmlndXJhdGlvblxuICovXG5jb25zdCBjcmVhdGVBeGlzWCA9IChcbiAgZzogZDMuU2VsZWN0aW9uPFNWR0dFbGVtZW50LCB1bmtub3duLCBIVE1MRWxlbWVudCwgdW5rbm93bj4sXG4gIHg6IGQzLlNjYWxlVGltZTxudW1iZXIsIG51bWJlcj4sXG4gIGNvbmZpZzogSUxpbmVDaGFydE9wdGlvbnMsXG4pID0+IHtcbiAgY29uc3QgeExhYmVscyA9IGdcbiAgICAuYXBwZW5kKCdnJylcbiAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgwLCAke2NvbmZpZy5oZWlnaHR9KWApXG4gICAgLmNhbGwoXG4gICAgICBkM1xuICAgICAgICAuYXhpc0JvdHRvbSh4KVxuICAgICAgICAudGlja3MoY29uZmlnLnRpY2tzLngpXG4gICAgICAgIC50aWNrRm9ybWF0KGQgPT4ge1xuICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShkLnZhbHVlT2YoKSk7XG4gICAgICAgICAgY29uc3QgZm9ybWF0dGluZ09mZnNldCA9IDEwO1xuICAgICAgICAgIGNvbnN0IGRheSA9IGRhdGUuZ2V0RGF0ZSgpO1xuICAgICAgICAgIGNvbnN0IGRkID0gZGF5IDwgZm9ybWF0dGluZ09mZnNldCA/IGAwJHtkYXl9YCA6IGRheTtcbiAgICAgICAgICBjb25zdCBtb250aCA9IGRhdGUuZ2V0TW9udGgoKSArIDE7XG4gICAgICAgICAgY29uc3QgbW0gPSBtb250aCA8IGZvcm1hdHRpbmdPZmZzZXQgPyBgMCR7bW9udGh9YCA6IG1vbnRoO1xuICAgICAgICAgIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCkudG9TdHJpbmcoKTtcbiAgICAgICAgICBjb25zdCB5eSA9IHllYXIuc2xpY2UoMik7XG4gICAgICAgICAgY29uc3QgaG91cnMgPSBkYXRlLmdldEhvdXJzKCk7XG4gICAgICAgICAgY29uc3QgaG91ciA9IGhvdXJzIDwgZm9ybWF0dGluZ09mZnNldCA/IGAwJHtob3Vyc31gIDogaG91cnM7XG4gICAgICAgICAgY29uc3QgbWludXRlcyA9IGRhdGUuZ2V0TWludXRlcygpO1xuICAgICAgICAgIGNvbnN0IG1pbnV0ZSA9IG1pbnV0ZXMgPCBmb3JtYXR0aW5nT2Zmc2V0ID8gYDAke21pbnV0ZXN9YCA6IG1pbnV0ZXM7XG4gICAgICAgICAgbGV0IGZvcm1hdHRlZERhdGUgPSBgJHtkZH0vJHttbX0vJHt5eX0gJHtob3VyfToke21pbnV0ZX1gO1xuICAgICAgICAgIHN3aXRjaCAoY29uZmlnLmRhdGVGb3JtYXQpIHtcbiAgICAgICAgICAgIGNhc2UgJ2RkL21tL3l5eXknOlxuICAgICAgICAgICAgICBmb3JtYXR0ZWREYXRlID0gYCR7ZGR9LyR7bW19LyR7eWVhcn1gO1xuICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgJ2RkL21tL3l5JzpcbiAgICAgICAgICAgICAgZm9ybWF0dGVkRGF0ZSA9IGAke2RkfS8ke21tfS8ke3l5fWA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAnbW0veXl5eSc6XG4gICAgICAgICAgICAgIGZvcm1hdHRlZERhdGUgPSBgJHttbX0vJHt5ZWFyfWA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSAneXl5eSc6XG4gICAgICAgICAgICAgIGZvcm1hdHRlZERhdGUgPSBgJHt5ZWFyfWA7XG4gICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBmb3JtYXR0ZWREYXRlO1xuICAgICAgICB9KSxcbiAgICApXG4gICAgLmFwcGVuZCgndGV4dCcpO1xuXG4gIGcuc2VsZWN0QWxsKCd0ZXh0JykuY2FsbCh3cmFwU3ZnVGV4dCwgY29uZmlnLmxhYmVsVGV4dFdyYXBXaWR0aCk7XG5cbiAgaWYgKGNvbmZpZy5kaXNwbGF5QXhpc0xhYmVscykge1xuICAgIHhMYWJlbHMuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgke2NvbmZpZy53aWR0aH0sIDApYCkuYXR0cignY2xhc3MnLCAnbGVnZW5kJykuYXR0cignZHgnLCAnMS41ZW0nKS5hdHRyKCdkeScsICcwLjdlbScpLnRleHQoJ3gnKTtcbiAgfVxufTtcblxuLyoqXG4gKiBDcmVhdGVzIHRoZSB5IGF4aXMuXG4gKiBAcGFyYW0gZyB0aGUgc3ZnIGcgZWxlbWVudFxuICogQHBhcmFtIHkgdGhlIHkgYXhpcyBzY2FsZVxuICogQHBhcmFtIGNvbmZpZyB0aGUgY2hhcnQgY29uZmlndXJhdGlvblxuICovXG5jb25zdCBjcmVhdGVBeGlzWSA9IChcbiAgZzogZDMuU2VsZWN0aW9uPFNWR0dFbGVtZW50LCB1bmtub3duLCBIVE1MRWxlbWVudCwgdW5rbm93bj4sXG4gIHk6IGQzLlNjYWxlTGluZWFyPG51bWJlciwgbnVtYmVyPixcbiAgY29uZmlnOiBJTGluZUNoYXJ0T3B0aW9ucyxcbikgPT4ge1xuICBjb25zdCB5TGFiZWxzID0gZ1xuICAgIC5hcHBlbmQoJ2cnKVxuICAgIC5jYWxsKFxuICAgICAgZDNcbiAgICAgICAgLmF4aXNMZWZ0KHkpXG4gICAgICAgIC50aWNrcyhjb25maWcudGlja3MueSlcbiAgICAgICAgLnRpY2tGb3JtYXQoZCA9PiBgJHtkfWApLFxuICAgIClcbiAgICAuYXBwZW5kKCd0ZXh0Jyk7XG5cbiAgaWYgKGNvbmZpZy5kaXNwbGF5QXhpc0xhYmVscykge1xuICAgIHlMYWJlbHMuYXR0cignY2xhc3MnLCAnbGVnZW5kJykuYXR0cignZHknLCAnLTEuNWVtJykuYXR0cignY2xhc3MnLCAnbGVnZW5kJykudGV4dCgneScpO1xuICB9XG59O1xuXG4vKipcbiAqIFRoZSBtb3VzZSBvdmVyIGV2ZW50IGhhbmRsZXIuXG4gKiBAcGFyYW0gc2VsZiBhbiBzdmcgY2lyY2xlIGVsZW1lbnRcbiAqIEBwYXJhbSBkIHRoZSBjaGFydCBkYXRhIG5vZGVcbiAqIEBwYXJhbSBnIHRoZSBzdmcgZyBlbGVtZW50XG4gKiBAcGFyYW0gY29uZmlnIHRoZSBjaGFydCBjb25maWd1cmF0aW9uXG4gKi9cbmNvbnN0IG9uTW91c2VPdmVyID0gKFxuICBzZWxmOiBTVkdDaXJjbGVFbGVtZW50LFxuICBkOiBJTGluZUNoYXJ0RGF0YU5vZGUsXG4gIGc6IGQzLlNlbGVjdGlvbjxTVkdHRWxlbWVudCwgdW5rbm93biwgSFRNTEVsZW1lbnQsIHVua25vd24+LFxuICBjb25maWc6IElMaW5lQ2hhcnRPcHRpb25zLFxuKSA9PiB7XG4gIGNvbnN0IGR1cmF0aW9uID0gNDAwO1xuICBkMy5zZWxlY3Qoc2VsZilcbiAgICAudHJhbnNpdGlvbigpXG4gICAgLmR1cmF0aW9uKGR1cmF0aW9uKVxuICAgIC5hdHRyKCdyJywgY29uZmlnLmRvdFJhZGl1cyAqIDIpO1xuXG4gIGNvbnN0IHRvb2x0aXBTaGlmdCA9IDQ7XG4gIGNvbnN0IHRvb2x0aXBEeSA9IC0xMDtcbiAgZy5hcHBlbmQoJ3RleHQnKVxuICAgIC5hdHRyKCdjbGFzcycsICdjaGFydC10b29sdGlwJylcbiAgICAuc3R5bGUoJ2ZvbnQtc2l6ZScsICcxMXB4JylcbiAgICAuYXR0cignZHgnLCAoKSA9PiAoY29uZmlnLndpZHRoIC0gY29uZmlnLm1hcmdpbi5sZWZ0IC0gY29uZmlnLm1hcmdpbi5yaWdodCkgLyB0b29sdGlwU2hpZnQpXG4gICAgLmF0dHIoJ2R5JywgKCkgPT4gdG9vbHRpcER5KVxuICAgIC50ZXh0KCgpID0+IGAke2QudmFsdWV9ICgke25ldyBEYXRlKGQudGltZXN0YW1wKS50b1VUQ1N0cmluZygpfSlgKVxuICAgIC50cmFuc2l0aW9uKClcbiAgICAuZHVyYXRpb24oY29uZmlnLnRyYW5zaXRpb25EdXJhdGlvbilcbiAgICAuc3R5bGUoJ29wYWNpdHknLCAxKTtcbn07XG5cbi8qKlxuICogVGhlIG1vdXNlIG91dCBldmVudCBoYW5kbGVyLlxuICogQHBhcmFtIHNlbGYgYW4gc3ZnIGNpcmNsZSBlbGVtZW50XG4gKiBAcGFyYW0gY29uZmlnIHRoZSBjaGFydCBjb25maWd1cmF0aW9uXG4gKi9cbmNvbnN0IG9uTW91c2VPdXQgPSAoc2VsZjogU1ZHQ2lyY2xlRWxlbWVudCwgY29uZmlnOiBJTGluZUNoYXJ0T3B0aW9ucykgPT4ge1xuICBjb25zdCBkdXJhdGlvbiA9IDQwMDtcbiAgZDMuc2VsZWN0KHNlbGYpLmF0dHIoJ2NsYXNzJywgJ2RvdCcpO1xuICBkMy5zZWxlY3Qoc2VsZikudHJhbnNpdGlvbigpLmR1cmF0aW9uKGR1cmF0aW9uKS5hdHRyKCdyJywgY29uZmlnLmRvdFJhZGl1cyk7XG4gIGQzLnNlbGVjdEFsbCgnLmNoYXJ0LXRvb2x0aXAnKVxuICAgIC50cmFuc2l0aW9uKClcbiAgICAuZHVyYXRpb24oY29uZmlnLnRyYW5zaXRpb25EdXJhdGlvbiAvIDIpXG4gICAgLnN0eWxlKCdvcGFjaXR5JywgMClcbiAgICAucmVtb3ZlKCk7XG59O1xuXG4vKipcbiAqIERyYXdzIHRoZSBjaGFydCBsaW5lcywgZG90cywgYW5kIHNldHMgdGhlIG1vdXNlIHBvaW50ZXIgZXZlbnRzLlxuICogQHBhcmFtIGcgdGhlIHN2ZyBnIGVsZW1lbnRcbiAqIEBwYXJhbSB4IHRoZSB4IGF4aXMgc2NhbGVcbiAqIEBwYXJhbSB5IHRoZSB5IGF4aXMgc2NhbGVcbiAqIEBwYXJhbSBjb25maWcgdGhlIGNoYXJ0IGNvbmZpZ3VyYXRpb25cbiAqIEBwYXJhbSBkYXRhIHRoZSBjaGFydCBkYXRhXG4gKi9cbmNvbnN0IGRyYXdMaW5lc0RvdHNBbmRTZXRQb2ludGVyRXZlbnRzID0gKFxuICBnOiBkMy5TZWxlY3Rpb248U1ZHR0VsZW1lbnQsIHVua25vd24sIEhUTUxFbGVtZW50LCB1bmtub3duPixcbiAgeDogZDMuU2NhbGVUaW1lPG51bWJlciwgbnVtYmVyPixcbiAgeTogZDMuU2NhbGVMaW5lYXI8bnVtYmVyLCBudW1iZXI+LFxuICBjb25maWc6IElMaW5lQ2hhcnRPcHRpb25zLFxuICBkYXRhOiBUTGluZUNoYXJ0RGF0YVtdLFxuKSA9PiB7XG4gIGNvbnN0IGxpbmUgPSBkM1xuICAgIC5saW5lPElMaW5lQ2hhcnREYXRhTm9kZT4oKVxuICAgIC54KGQgPT4geChkLnRpbWVzdGFtcCkpXG4gICAgLnkoZCA9PiB5KGQudmFsdWUpKVxuICAgIC5jdXJ2ZShkMy5jdXJ2ZU1vbm90b25lWCk7XG5cbiAgY29uc3QgZmxhdERhdGEgPSBkYXRhLmZsYXQoKTtcblxuICBmb3IgKGxldCBjID0gMCwgbWF4QyA9IGRhdGEubGVuZ3RoOyBjIDwgbWF4QzsgYyArPSAxKSB7XG4gICAgY29uc3QgY2h1bmsgPSBkYXRhW2NdO1xuXG4gICAgZy5hcHBlbmQoJ3BhdGgnKVxuICAgICAgLmF0dHIoJ2lkJywgYGxpbmUtJHtjfWApXG4gICAgICAuc3R5bGUoJ2ZpbGwnLCAnbm9uZScpXG4gICAgICAuc3R5bGUoJ3N0cm9rZScsIGNvbmZpZy5jb2xvcihjLnRvU3RyaW5nKCkpKVxuICAgICAgLnN0eWxlKCdzdHJva2Utd2lkdGgnLCAnMnB4JylcbiAgICAgIC5hdHRyKCdkJywgbGluZShjaHVuaykpO1xuICB9XG5cbiAgZy5zZWxlY3RBbGwoJy5kb3QnKVxuICAgIC5kYXRhKGZsYXREYXRhKVxuICAgIC5lbnRlcigpXG4gICAgLmFwcGVuZCgnY2lyY2xlJylcbiAgICAuYXR0cignY2xhc3MnLCAnZG90JylcbiAgICAuc3R5bGUoJ3BvaW50ZXItZXZlbnRzJywgJ2FsbCcpXG4gICAgLnN0eWxlKCdmaWxsJywgKGQsIGkpID0+IGNvbmZpZy5jb2xvcihpLnRvU3RyaW5nKCkpKVxuICAgIC5vbignbW91c2VvdmVyJywgZnVuY3Rpb24gKHRoaXMsIGV2ZW50LCBkKSB7XG4gICAgICByZXR1cm4gb25Nb3VzZU92ZXIodGhpcywgZCwgZywgY29uZmlnKTtcbiAgICB9KVxuICAgIC5vbignbW91c2VvdXQnLCBmdW5jdGlvbiAodGhpcykge1xuICAgICAgcmV0dXJuIG9uTW91c2VPdXQodGhpcywgY29uZmlnKTtcbiAgICB9KVxuICAgIC5hdHRyKCdjeCcsIGZ1bmN0aW9uICh0aGlzLCBkKSB7XG4gICAgICByZXR1cm4geChkLnRpbWVzdGFtcCk7XG4gICAgfSlcbiAgICAuYXR0cignY3knLCBmdW5jdGlvbiAodGhpcywgZCkge1xuICAgICAgcmV0dXJuIHkoZC52YWx1ZSk7XG4gICAgfSlcbiAgICAuYXR0cigncicsIDApXG4gICAgLnRyYW5zaXRpb24oKVxuICAgIC5lYXNlKGQzLmVhc2VMaW5lYXIpXG4gICAgLmR1cmF0aW9uKGNvbmZpZy50cmFuc2l0aW9uRHVyYXRpb24pXG4gICAgLmRlbGF5KChkLCBpKSA9PiB7XG4gICAgICBjb25zdCBtdWx0aXBsaWVyID0gNTA7XG4gICAgICByZXR1cm4gaSAqIG11bHRpcGxpZXI7XG4gICAgfSlcbiAgICAuYXR0cigncicsIGNvbmZpZy5kb3RSYWRpdXMpO1xufTtcblxuLyoqXG4gKiBEcmF3cyB0aGUgbGluZSBjaGFydC5cbiAqIEBwYXJhbSBjb250YWluZXIgdGhlIGNoYXJ0IGNvbnRhaW5lclxuICogQHBhcmFtIGRhdGEgdGhlIGNoYXJ0IGRhdGFcbiAqIEBwYXJhbSBvcHRpb25zIHRoZSBjaGFydCBvcHRpb25zXG4gKiBAcmV0dXJucyB0aGUgY2hhcnQgY29uZmlndXJhdGlvblxuICovXG5leHBvcnQgY29uc3QgZHJhd0xpbmVDaGFydCA9IChjb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+LCBkYXRhOiBUTGluZUNoYXJ0RGF0YVtdLCBvcHRpb25zPzogUGFydGlhbDxJTGluZUNoYXJ0T3B0aW9ucz4pID0+IHtcbiAgY29uc3QgY29uZmlnOiBJTGluZUNoYXJ0T3B0aW9ucyA9IGdlbmVyYXRlQ29uZmlndXJhdGlvbjxJTGluZUNoYXJ0T3B0aW9ucz4oZGVmYXVsdExpbmVDaGFydENvbmZpZywgb3B0aW9ucywge30pO1xuXG4gIGNvbnN0IHsgZyB9ID0gY3JlYXRlQ29udGFpbmVyKGNvbnRhaW5lciwgY29uZmlnKTtcblxuICBjb25zdCByYW5nZSA9IGRhdGEucmVkdWNlKFxuICAgIChhY2N1bXVsYXRvcjogeyBtaW5UaW1lOiBudW1iZXI7IG1heFRpbWU6IG51bWJlcjsgbWF4VmFsdWU6IG51bWJlciB9LCBhcnIpID0+IHtcbiAgICAgIGNvbnN0IHRpbWVzdGFtcHMgPSBhcnIubWFwKGl0ZW0gPT4gaXRlbS50aW1lc3RhbXApO1xuICAgICAgY29uc3QgbWluSXRlbSA9IE1hdGgubWluKC4uLnRpbWVzdGFtcHMpO1xuICAgICAgY29uc3QgbWF4SXRlbSA9IE1hdGgubWF4KC4uLnRpbWVzdGFtcHMpO1xuICAgICAgY29uc3QgbWluVGltZSA9IE1hdGgubWluKG1pbkl0ZW0sIGFjY3VtdWxhdG9yLm1pblRpbWUpO1xuICAgICAgY29uc3QgbWF4VGltZSA9IE1hdGgubWF4KG1heEl0ZW0sIGFjY3VtdWxhdG9yLm1heFRpbWUpO1xuXG4gICAgICBjb25zdCB2YWx1ZXMgPSBhcnIubWFwKGl0ZW0gPT4gaXRlbS52YWx1ZSk7XG4gICAgICBjb25zdCBtYXhJdGVtVmFsdWUgPSBNYXRoLm1heCguLi52YWx1ZXMpO1xuICAgICAgY29uc3QgbWF4VmFsdWUgPSBNYXRoLm1heChtYXhJdGVtVmFsdWUsIGFjY3VtdWxhdG9yLm1heFZhbHVlKTtcbiAgICAgIHJldHVybiB7IG1pblRpbWUsIG1heFRpbWUsIG1heFZhbHVlIH07XG4gICAgfSxcbiAgICB7IG1pblRpbWU6IE51bWJlcihJbmZpbml0eSksIG1heFRpbWU6IC1JbmZpbml0eSwgbWF4VmFsdWU6IC1JbmZpbml0eSB9LFxuICApO1xuXG4gIGNvbnN0IHggPSBkMy5zY2FsZVRpbWUoWzAsIGNvbmZpZy53aWR0aF0pLmRvbWFpbihbcmFuZ2UubWluVGltZSwgcmFuZ2UubWF4VGltZV0pO1xuICBjb25zdCB5ID0gZDMuc2NhbGVMaW5lYXIoW2NvbmZpZy5oZWlnaHQsIDBdKS5kb21haW4oWzAsIHJhbmdlLm1heFZhbHVlID8/IDFdKTtcblxuICBjcmVhdGVBeGlzWChnLCB4LCBjb25maWcpO1xuXG4gIGNyZWF0ZUF4aXNZKGcsIHksIGNvbmZpZyk7XG5cbiAgY3JlYXRlTGVnZW5kKGcsIGNvbmZpZyk7XG5cbiAgZHJhd0xpbmVzRG90c0FuZFNldFBvaW50ZXJFdmVudHMoZywgeCwgeSwgY29uZmlnLCBkYXRhKTtcblxuICByZXR1cm4gY29uZmlnO1xufTtcbiJdfQ==
|
|
@@ -53,7 +53,6 @@ export const drawPieChart = (container, data, options) => {
|
|
|
53
53
|
const pie = d3.pie().value(datum => datum.y);
|
|
54
54
|
const radius = Math.min(config.width, config.height) / 2;
|
|
55
55
|
const arc = d3.arc().innerRadius(config.innerRadius).outerRadius(radius);
|
|
56
|
-
const tooltip = g.append('text').attr('class', 'chart-tooltip').style('opacity', 0);
|
|
57
56
|
const arcs = g
|
|
58
57
|
.selectAll('arc')
|
|
59
58
|
.data(pie(data))
|
|
@@ -62,16 +61,12 @@ export const drawPieChart = (container, data, options) => {
|
|
|
62
61
|
.attr('class', 'arc')
|
|
63
62
|
.on('mouseover', function (event, d) {
|
|
64
63
|
this.style.opacity = '0.8';
|
|
65
|
-
const modifier = 10;
|
|
66
|
-
const x = parseFloat(d3.select(this).attr('cx')) - modifier;
|
|
67
|
-
const y = parseFloat(d3.select(this).attr('cy')) - modifier;
|
|
68
64
|
const tooltipText = `${d.data.key}: ${d.data.y}`;
|
|
69
|
-
|
|
65
|
+
g.append('text')
|
|
70
66
|
.attr('class', 'chart-tooltip')
|
|
71
|
-
.
|
|
72
|
-
.attr('y', y)
|
|
67
|
+
.style('opacity', 0)
|
|
73
68
|
.attr('dx', -config.width / (2 * 2 * 2))
|
|
74
|
-
.attr('dy',
|
|
69
|
+
.attr('dy', config.height / 2 + config.margin.top)
|
|
75
70
|
.text(tooltipText)
|
|
76
71
|
.transition()
|
|
77
72
|
.duration(config.transitionDuration)
|
|
@@ -79,7 +74,11 @@ export const drawPieChart = (container, data, options) => {
|
|
|
79
74
|
})
|
|
80
75
|
.on('mouseout', function (event, d) {
|
|
81
76
|
this.style.opacity = 'unset';
|
|
82
|
-
|
|
77
|
+
d3.selectAll('.chart-tooltip')
|
|
78
|
+
.transition()
|
|
79
|
+
.duration(config.transitionDuration / 2)
|
|
80
|
+
.style('opacity', 0)
|
|
81
|
+
.remove();
|
|
83
82
|
});
|
|
84
83
|
arcs
|
|
85
84
|
.append('path')
|
|
@@ -97,8 +96,9 @@ export const drawPieChart = (container, data, options) => {
|
|
|
97
96
|
.attr('text-anchor', 'middle')
|
|
98
97
|
.attr('dy', textDy)
|
|
99
98
|
.attr('transform', d => `translate(${label.centroid(d)})`)
|
|
99
|
+
.style('font-size', '12px')
|
|
100
100
|
.text(d => d.data.y);
|
|
101
101
|
}
|
|
102
102
|
return config;
|
|
103
103
|
};
|
|
104
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGllLWNoYXJ0LnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NsaWVudC1kMy1jaGFydHMvc3JjL2xpYi91dGlsL3BpZS1jaGFydC51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBR3pCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTdEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQXFCLE1BQU0sQ0FBQyxNQUFNLENBQW1CO0lBQ3JGLFVBQVUsRUFBRSxFQUFFO0lBQ2QsS0FBSyxFQUFFLEdBQUc7SUFDVixNQUFNLEVBQUUsR0FBRztJQUNYLE1BQU0sRUFBRTtRQUNOLEdBQUcsRUFBRSxFQUFFO1FBQ1AsS0FBSyxFQUFFLEVBQUU7UUFDVCxNQUFNLEVBQUUsRUFBRTtRQUNWLElBQUksRUFBRSxFQUFFO0tBQ1Q7SUFDRCxXQUFXLEVBQUUsQ0FBQztJQUNkLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLG1CQUFtQixFQUFFLEVBQUU7SUFDdkIsa0JBQWtCLEVBQUUsRUFBRTtJQUN0QixrQkFBa0IsRUFBRSxJQUFJO0lBQ3hCLEtBQUssRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztDQUM1QyxDQUFDLENBQUM7QUFFSDs7Ozs7R0FLRztBQUNILE1BQU0sZUFBZSxHQUFHLENBQUMsU0FBcUMsRUFBRSxNQUF3QixFQUFFLEVBQUU7SUFDMUYsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLElBQUksT0FBTyxDQUFDO0lBRWpELEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUMzQyxNQUFNLEdBQUcsR0FBRyxFQUFFO1NBQ1gsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLENBQUM7U0FDaEIsTUFBTSxDQUFDLEtBQUssQ0FBQztTQUNiLElBQUksQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQztTQUN0RSxJQUFJLENBQUMsUUFBUSxFQUFFLE1BQU0sQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUM7U0FDeEUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNyQixNQUFNLENBQUMsR0FBRyxHQUFHO1NBQ1YsTUFBTSxDQUFDLEdBQUcsQ0FBQztTQUNYLElBQUksQ0FBQyxXQUFXLEVBQUUsYUFBYSxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7SUFFckgsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNwQixDQUFDLENBQUM7QUFFRjs7Ozs7O0dBTUc7QUFDSCxNQUFNLENBQUMsTUFBTSxZQUFZLEdBQUcsQ0FBQyxTQUFxQyxFQUFFLElBQXlCLEVBQUUsT0FBbUMsRUFBRSxFQUFFO0lBQ3BJLE1BQU0sTUFBTSxHQUFxQixxQkFBcUIsQ0FBbUIscUJBQXFCLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRTdHLE1BQU0sRUFBRSxDQUFDLEVBQUUsR0FBRyxlQUFlLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBRWpELE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQXFCLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWhFLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXpELE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQXFDLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7SUFFNUcsTUFBTSxPQUFPLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFcEYsTUFBTSxJQUFJLEdBQUcsQ0FBQztTQUNYLFNBQVMsQ0FBQyxLQUFLLENBQUM7U0FDaEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUNmLEtBQUssRUFBRTtTQUNQLE1BQU0sQ0FBQyxHQUFHLENBQUM7U0FDWCxJQUFJLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQztTQUNwQixFQUFFLENBQUMsV0FBVyxFQUFFLFVBQWdCLEtBQWlCLEVBQUUsQ0FBQztRQUNuRCxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFFM0IsTUFBTSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ3BCLE1BQU0sQ0FBQyxHQUFHLFVBQVUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQztRQUM1RCxNQUFNLENBQUMsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUM7UUFFNUQsTUFBTSxXQUFXLEdBQUcsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRWpELE9BQU87YUFDSixJQUFJLENBQUMsT0FBTyxFQUFFLGVBQWUsQ0FBQzthQUM5QixJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQzthQUNaLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO2FBQ1osSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2FBQ3ZDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7YUFDdEQsSUFBSSxDQUFDLFdBQVcsQ0FBQzthQUNqQixVQUFVLEVBQUU7YUFDWixRQUFRLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDO2FBQ25DLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDekIsQ0FBQyxDQUFDO1NBQ0QsRUFBRSxDQUFDLFVBQVUsRUFBRSxVQUFnQixLQUFLLEVBQUUsQ0FBQztRQUN0QyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7UUFDN0IsT0FBTyxDQUFDLFVBQVUsRUFBRSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQy9FLENBQUMsQ0FBQyxDQUFDO0lBRUwsSUFBSTtTQUNELE1BQU0sQ0FBQyxNQUFNLENBQUM7U0FDZCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztTQUNsRCxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBRWxCLElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRTtRQUNyQixNQUFNLEtBQUssR0FBRyxFQUFFO2FBQ2IsR0FBRyxFQUFxQzthQUN4QyxXQUFXLENBQUMsTUFBTSxDQUFDO2FBQ25CLFdBQVcsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFFcEQsTUFBTSxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2pCLElBQUk7YUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDO2FBQ2QsSUFBSSxDQUFDLE9BQU8sRUFBRSxRQUFRLENBQUM7YUFDdkIsSUFBSSxDQUFDLGFBQWEsRUFBRSxRQUFRLENBQUM7YUFDN0IsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7YUFDbEIsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLGFBQWEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO2FBQ3pELElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDeEI7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XG5cbmltcG9ydCB7IElQaWVDaGFydERhdGFOb2RlLCBJUGllQ2hhcnRPcHRpb25zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9waWUtY2hhcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IGdlbmVyYXRlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vY29uZmlndXJhdGlvbi51dGlsJztcblxuLyoqXG4gKiBUaGUgcGllIGNoYXJ0IGRlZmF1bHQgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRQaWVDaGFydENvbmZpZzogSVBpZUNoYXJ0T3B0aW9ucyA9IE9iamVjdC5mcmVlemUoPElQaWVDaGFydE9wdGlvbnM+e1xuICBjaGFydFRpdGxlOiAnJyxcbiAgd2lkdGg6IDYwMCxcbiAgaGVpZ2h0OiA2MDAsXG4gIG1hcmdpbjoge1xuICAgIHRvcDogMjAsXG4gICAgcmlnaHQ6IDIwLFxuICAgIGJvdHRvbTogMjAsXG4gICAgbGVmdDogMjAsXG4gIH0sXG4gIGlubmVyUmFkaXVzOiAwLCAvLyBpbmNyZWFzZSBpbm5lciByYWRpdXMgdG8gcmVuZGVyIGEgZG9udXQgY2hhcnRcbiAgc2hvd0xhYmVsczogdHJ1ZSxcbiAgbGFiZWxSYWRpdXNNb2RpZmllcjogNTAsXG4gIGxhYmVsVGV4dFdyYXBXaWR0aDogNjAsXG4gIHRyYW5zaXRpb25EdXJhdGlvbjogMTAwMCxcbiAgY29sb3I6IGQzLnNjYWxlT3JkaW5hbChkMy5zY2hlbWVDYXRlZ29yeTEwKSxcbn0pO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjb250YWluZXIgZm9yIHRoZSBwaWUgY2hhcnQuXG4gKiBAcGFyYW0gY29udGFpbmVyIHRoZSBjaGFydCBjb250YWluZXJcbiAqIEBwYXJhbSBjb25maWcgdGhlIGNoYXJ0IGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIHRoZSBvYmplY3Qgd2l0aCB0aGUgc3ZnIGVsZW1lbnQgYW5kIHRoZSBnIGVsZW1lbnRcbiAqL1xuY29uc3QgY3JlYXRlQ29udGFpbmVyID0gKGNvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4sIGNvbmZpZzogSVBpZUNoYXJ0T3B0aW9ucykgPT4ge1xuICBjb25zdCBpZCA9IGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmlkID8/ICdwaWUtMCc7XG5cbiAgZDMuc2VsZWN0KGAjJHtpZH1gKS5zZWxlY3QoJ3N2ZycpLnJlbW92ZSgpO1xuICBjb25zdCBzdmcgPSBkM1xuICAgIC5zZWxlY3QoYCMke2lkfWApXG4gICAgLmFwcGVuZCgnc3ZnJylcbiAgICAuYXR0cignd2lkdGgnLCBjb25maWcud2lkdGggKyBjb25maWcubWFyZ2luLmxlZnQgKyBjb25maWcubWFyZ2luLnJpZ2h0KVxuICAgIC5hdHRyKCdoZWlnaHQnLCBjb25maWcuaGVpZ2h0ICsgY29uZmlnLm1hcmdpbi50b3AgKyBjb25maWcubWFyZ2luLmJvdHRvbSlcbiAgICAuYXR0cignY2xhc3MnLCBpZCk7XG4gIGNvbnN0IGcgPSBzdmdcbiAgICAuYXBwZW5kKCdnJylcbiAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgke2NvbmZpZy53aWR0aCAvIDIgKyBjb25maWcubWFyZ2luLmxlZnR9LCR7Y29uZmlnLmhlaWdodCAvIDIgKyBjb25maWcubWFyZ2luLnRvcH0pYCk7XG5cbiAgcmV0dXJuIHsgc3ZnLCBnIH07XG59O1xuXG4vKipcbiAqIERyYXdzIHRoZSBwaWUgY2hhcnQuXG4gKiBAcGFyYW0gY29udGFpbmVyIHRoZSBjaGFydCBjb250YWluZXJcbiAqIEBwYXJhbSBkYXRhIHRoZSBjaGFydCBkYXRhXG4gKiBAcGFyYW0gb3B0aW9ucyB0aGUgY2hhcnQgb3B0aW9uc1xuICogQHJldHVybnMgdGhlIGNoYXJ0IGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IGRyYXdQaWVDaGFydCA9IChjb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+LCBkYXRhOiBJUGllQ2hhcnREYXRhTm9kZVtdLCBvcHRpb25zPzogUGFydGlhbDxJUGllQ2hhcnRPcHRpb25zPikgPT4ge1xuICBjb25zdCBjb25maWc6IElQaWVDaGFydE9wdGlvbnMgPSBnZW5lcmF0ZUNvbmZpZ3VyYXRpb248SVBpZUNoYXJ0T3B0aW9ucz4oZGVmYXVsdFBpZUNoYXJ0Q29uZmlnLCBvcHRpb25zLCB7fSk7XG5cbiAgY29uc3QgeyBnIH0gPSBjcmVhdGVDb250YWluZXIoY29udGFpbmVyLCBjb25maWcpO1xuXG4gIGNvbnN0IHBpZSA9IGQzLnBpZTxJUGllQ2hhcnREYXRhTm9kZT4oKS52YWx1ZShkYXR1bSA9PiBkYXR1bS55KTtcblxuICBjb25zdCByYWRpdXMgPSBNYXRoLm1pbihjb25maWcud2lkdGgsIGNvbmZpZy5oZWlnaHQpIC8gMjtcblxuICBjb25zdCBhcmMgPSBkMy5hcmM8ZDMuUGllQXJjRGF0dW08SVBpZUNoYXJ0RGF0YU5vZGU+PigpLmlubmVyUmFkaXVzKGNvbmZpZy5pbm5lclJhZGl1cykub3V0ZXJSYWRpdXMocmFkaXVzKTtcblxuICBjb25zdCB0b29sdGlwID0gZy5hcHBlbmQoJ3RleHQnKS5hdHRyKCdjbGFzcycsICdjaGFydC10b29sdGlwJykuc3R5bGUoJ29wYWNpdHknLCAwKTtcblxuICBjb25zdCBhcmNzID0gZ1xuICAgIC5zZWxlY3RBbGwoJ2FyYycpXG4gICAgLmRhdGEocGllKGRhdGEpKVxuICAgIC5lbnRlcigpXG4gICAgLmFwcGVuZCgnZycpXG4gICAgLmF0dHIoJ2NsYXNzJywgJ2FyYycpXG4gICAgLm9uKCdtb3VzZW92ZXInLCBmdW5jdGlvbiAodGhpcywgZXZlbnQ6IE1vdXNlRXZlbnQsIGQpIHtcbiAgICAgIHRoaXMuc3R5bGUub3BhY2l0eSA9ICcwLjgnO1xuXG4gICAgICBjb25zdCBtb2RpZmllciA9IDEwO1xuICAgICAgY29uc3QgeCA9IHBhcnNlRmxvYXQoZDMuc2VsZWN0KHRoaXMpLmF0dHIoJ2N4JykpIC0gbW9kaWZpZXI7XG4gICAgICBjb25zdCB5ID0gcGFyc2VGbG9hdChkMy5zZWxlY3QodGhpcykuYXR0cignY3knKSkgLSBtb2RpZmllcjtcblxuICAgICAgY29uc3QgdG9vbHRpcFRleHQgPSBgJHtkLmRhdGEua2V5fTogJHtkLmRhdGEueX1gO1xuXG4gICAgICB0b29sdGlwXG4gICAgICAgIC5hdHRyKCdjbGFzcycsICdjaGFydC10b29sdGlwJylcbiAgICAgICAgLmF0dHIoJ3gnLCB4KVxuICAgICAgICAuYXR0cigneScsIHkpXG4gICAgICAgIC5hdHRyKCdkeCcsIC1jb25maWcud2lkdGggLyAoMiAqIDIgKiAyKSlcbiAgICAgICAgLmF0dHIoJ2R5JywgLWNvbmZpZy5tYXJnaW4udG9wIC8gMiAtIGNvbmZpZy5oZWlnaHQgLyAyKVxuICAgICAgICAudGV4dCh0b29sdGlwVGV4dClcbiAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAuZHVyYXRpb24oY29uZmlnLnRyYW5zaXRpb25EdXJhdGlvbilcbiAgICAgICAgLnN0eWxlKCdvcGFjaXR5JywgMSk7XG4gICAgfSlcbiAgICAub24oJ21vdXNlb3V0JywgZnVuY3Rpb24gKHRoaXMsIGV2ZW50LCBkKSB7XG4gICAgICB0aGlzLnN0eWxlLm9wYWNpdHkgPSAndW5zZXQnO1xuICAgICAgdG9vbHRpcC50cmFuc2l0aW9uKCkuZHVyYXRpb24oY29uZmlnLnRyYW5zaXRpb25EdXJhdGlvbikuc3R5bGUoJ29wYWNpdHknLCAwKTtcbiAgICB9KTtcblxuICBhcmNzXG4gICAgLmFwcGVuZCgncGF0aCcpXG4gICAgLmF0dHIoJ2ZpbGwnLCAoZCwgaSkgPT4gY29uZmlnLmNvbG9yKGkudG9TdHJpbmcoKSkpXG4gICAgLmF0dHIoJ2QnLCBhcmMpO1xuXG4gIGlmIChjb25maWcuc2hvd0xhYmVscykge1xuICAgIGNvbnN0IGxhYmVsID0gZDNcbiAgICAgIC5hcmM8ZDMuUGllQXJjRGF0dW08SVBpZUNoYXJ0RGF0YU5vZGU+PigpXG4gICAgICAuaW5uZXJSYWRpdXMocmFkaXVzKVxuICAgICAgLm91dGVyUmFkaXVzKHJhZGl1cyArIGNvbmZpZy5sYWJlbFJhZGl1c01vZGlmaWVyKTtcblxuICAgIGNvbnN0IHRleHREeSA9IDU7XG4gICAgYXJjc1xuICAgICAgLmFwcGVuZCgndGV4dCcpXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGVnZW5kJylcbiAgICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxuICAgICAgLmF0dHIoJ2R5JywgdGV4dER5KVxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGQgPT4gYHRyYW5zbGF0ZSgke2xhYmVsLmNlbnRyb2lkKGQpfSlgKVxuICAgICAgLnRleHQoZCA9PiBkLmRhdGEueSk7XG4gIH1cblxuICByZXR1cm4gY29uZmlnO1xufTtcbiJdfQ==
|
|
104
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGllLWNoYXJ0LnV0aWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NsaWVudC1kMy1jaGFydHMvc3JjL2xpYi91dGlsL3BpZS1jaGFydC51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLE1BQU0sSUFBSSxDQUFDO0FBR3pCLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTdEOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQXFCLE1BQU0sQ0FBQyxNQUFNLENBQW1CO0lBQ3JGLFVBQVUsRUFBRSxFQUFFO0lBQ2QsS0FBSyxFQUFFLEdBQUc7SUFDVixNQUFNLEVBQUUsR0FBRztJQUNYLE1BQU0sRUFBRTtRQUNOLEdBQUcsRUFBRSxFQUFFO1FBQ1AsS0FBSyxFQUFFLEVBQUU7UUFDVCxNQUFNLEVBQUUsRUFBRTtRQUNWLElBQUksRUFBRSxFQUFFO0tBQ1Q7SUFDRCxXQUFXLEVBQUUsQ0FBQztJQUNkLFVBQVUsRUFBRSxJQUFJO0lBQ2hCLG1CQUFtQixFQUFFLEVBQUU7SUFDdkIsa0JBQWtCLEVBQUUsRUFBRTtJQUN0QixrQkFBa0IsRUFBRSxJQUFJO0lBQ3hCLEtBQUssRUFBRSxFQUFFLENBQUMsWUFBWSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztDQUM1QyxDQUFDLENBQUM7QUFFSDs7Ozs7R0FLRztBQUNILE1BQU0sZUFBZSxHQUFHLENBQUMsU0FBcUMsRUFBRSxNQUF3QixFQUFFLEVBQUU7SUFDMUYsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLGFBQWEsQ0FBQyxFQUFFLElBQUksT0FBTyxDQUFDO0lBRWpELEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQztJQUMzQyxNQUFNLEdBQUcsR0FBRyxFQUFFO1NB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RUFBRSxDQUFDLGFBQWEsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO2FBQ3pELEtBQUssQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDO2FBQzFCLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDeEI7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFbGVtZW50UmVmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBkMyBmcm9tICdkMyc7XG5cbmltcG9ydCB7IElQaWVDaGFydERhdGFOb2RlLCBJUGllQ2hhcnRPcHRpb25zIH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9waWUtY2hhcnQuaW50ZXJmYWNlJztcbmltcG9ydCB7IGdlbmVyYXRlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4vY29uZmlndXJhdGlvbi51dGlsJztcblxuLyoqXG4gKiBUaGUgcGllIGNoYXJ0IGRlZmF1bHQgY29uZmlndXJhdGlvbi5cbiAqL1xuZXhwb3J0IGNvbnN0IGRlZmF1bHRQaWVDaGFydENvbmZpZzogSVBpZUNoYXJ0T3B0aW9ucyA9IE9iamVjdC5mcmVlemUoPElQaWVDaGFydE9wdGlvbnM+e1xuICBjaGFydFRpdGxlOiAnJyxcbiAgd2lkdGg6IDYwMCxcbiAgaGVpZ2h0OiA2MDAsXG4gIG1hcmdpbjoge1xuICAgIHRvcDogMjAsXG4gICAgcmlnaHQ6IDIwLFxuICAgIGJvdHRvbTogMjAsXG4gICAgbGVmdDogMjAsXG4gIH0sXG4gIGlubmVyUmFkaXVzOiAwLCAvLyBpbmNyZWFzZSBpbm5lciByYWRpdXMgdG8gcmVuZGVyIGEgZG9udXQgY2hhcnRcbiAgc2hvd0xhYmVsczogdHJ1ZSxcbiAgbGFiZWxSYWRpdXNNb2RpZmllcjogNTAsXG4gIGxhYmVsVGV4dFdyYXBXaWR0aDogNjAsXG4gIHRyYW5zaXRpb25EdXJhdGlvbjogMTAwMCxcbiAgY29sb3I6IGQzLnNjYWxlT3JkaW5hbChkMy5zY2hlbWVDYXRlZ29yeTEwKSxcbn0pO1xuXG4vKipcbiAqIENyZWF0ZXMgYSBjb250YWluZXIgZm9yIHRoZSBwaWUgY2hhcnQuXG4gKiBAcGFyYW0gY29udGFpbmVyIHRoZSBjaGFydCBjb250YWluZXJcbiAqIEBwYXJhbSBjb25maWcgdGhlIGNoYXJ0IGNvbmZpZ3VyYXRpb25cbiAqIEByZXR1cm5zIHRoZSBvYmplY3Qgd2l0aCB0aGUgc3ZnIGVsZW1lbnQgYW5kIHRoZSBnIGVsZW1lbnRcbiAqL1xuY29uc3QgY3JlYXRlQ29udGFpbmVyID0gKGNvbnRhaW5lcjogRWxlbWVudFJlZjxIVE1MRGl2RWxlbWVudD4sIGNvbmZpZzogSVBpZUNoYXJ0T3B0aW9ucykgPT4ge1xuICBjb25zdCBpZCA9IGNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmlkID8/ICdwaWUtMCc7XG5cbiAgZDMuc2VsZWN0KGAjJHtpZH1gKS5zZWxlY3QoJ3N2ZycpLnJlbW92ZSgpO1xuICBjb25zdCBzdmcgPSBkM1xuICAgIC5zZWxlY3QoYCMke2lkfWApXG4gICAgLmFwcGVuZCgnc3ZnJylcbiAgICAuYXR0cignd2lkdGgnLCBjb25maWcud2lkdGggKyBjb25maWcubWFyZ2luLmxlZnQgKyBjb25maWcubWFyZ2luLnJpZ2h0KVxuICAgIC5hdHRyKCdoZWlnaHQnLCBjb25maWcuaGVpZ2h0ICsgY29uZmlnLm1hcmdpbi50b3AgKyBjb25maWcubWFyZ2luLmJvdHRvbSlcbiAgICAuYXR0cignY2xhc3MnLCBpZCk7XG4gIGNvbnN0IGcgPSBzdmdcbiAgICAuYXBwZW5kKCdnJylcbiAgICAuYXR0cigndHJhbnNmb3JtJywgYHRyYW5zbGF0ZSgke2NvbmZpZy53aWR0aCAvIDIgKyBjb25maWcubWFyZ2luLmxlZnR9LCR7Y29uZmlnLmhlaWdodCAvIDIgKyBjb25maWcubWFyZ2luLnRvcH0pYCk7XG5cbiAgcmV0dXJuIHsgc3ZnLCBnIH07XG59O1xuXG4vKipcbiAqIERyYXdzIHRoZSBwaWUgY2hhcnQuXG4gKiBAcGFyYW0gY29udGFpbmVyIHRoZSBjaGFydCBjb250YWluZXJcbiAqIEBwYXJhbSBkYXRhIHRoZSBjaGFydCBkYXRhXG4gKiBAcGFyYW0gb3B0aW9ucyB0aGUgY2hhcnQgb3B0aW9uc1xuICogQHJldHVybnMgdGhlIGNoYXJ0IGNvbmZpZ3VyYXRpb25cbiAqL1xuZXhwb3J0IGNvbnN0IGRyYXdQaWVDaGFydCA9IChjb250YWluZXI6IEVsZW1lbnRSZWY8SFRNTERpdkVsZW1lbnQ+LCBkYXRhOiBJUGllQ2hhcnREYXRhTm9kZVtdLCBvcHRpb25zPzogUGFydGlhbDxJUGllQ2hhcnRPcHRpb25zPikgPT4ge1xuICBjb25zdCBjb25maWc6IElQaWVDaGFydE9wdGlvbnMgPSBnZW5lcmF0ZUNvbmZpZ3VyYXRpb248SVBpZUNoYXJ0T3B0aW9ucz4oZGVmYXVsdFBpZUNoYXJ0Q29uZmlnLCBvcHRpb25zLCB7fSk7XG5cbiAgY29uc3QgeyBnIH0gPSBjcmVhdGVDb250YWluZXIoY29udGFpbmVyLCBjb25maWcpO1xuXG4gIGNvbnN0IHBpZSA9IGQzLnBpZTxJUGllQ2hhcnREYXRhTm9kZT4oKS52YWx1ZShkYXR1bSA9PiBkYXR1bS55KTtcblxuICBjb25zdCByYWRpdXMgPSBNYXRoLm1pbihjb25maWcud2lkdGgsIGNvbmZpZy5oZWlnaHQpIC8gMjtcblxuICBjb25zdCBhcmMgPSBkMy5hcmM8ZDMuUGllQXJjRGF0dW08SVBpZUNoYXJ0RGF0YU5vZGU+PigpLmlubmVyUmFkaXVzKGNvbmZpZy5pbm5lclJhZGl1cykub3V0ZXJSYWRpdXMocmFkaXVzKTtcblxuICBjb25zdCBhcmNzID0gZ1xuICAgIC5zZWxlY3RBbGwoJ2FyYycpXG4gICAgLmRhdGEocGllKGRhdGEpKVxuICAgIC5lbnRlcigpXG4gICAgLmFwcGVuZCgnZycpXG4gICAgLmF0dHIoJ2NsYXNzJywgJ2FyYycpXG4gICAgLm9uKCdtb3VzZW92ZXInLCBmdW5jdGlvbiAodGhpcywgZXZlbnQ6IE1vdXNlRXZlbnQsIGQpIHtcbiAgICAgIHRoaXMuc3R5bGUub3BhY2l0eSA9ICcwLjgnO1xuXG4gICAgICBjb25zdCB0b29sdGlwVGV4dCA9IGAke2QuZGF0YS5rZXl9OiAke2QuZGF0YS55fWA7XG5cbiAgICAgIGcuYXBwZW5kKCd0ZXh0JylcbiAgICAgICAgLmF0dHIoJ2NsYXNzJywgJ2NoYXJ0LXRvb2x0aXAnKVxuICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCAwKVxuICAgICAgICAuYXR0cignZHgnLCAtY29uZmlnLndpZHRoIC8gKDIgKiAyICogMikpXG4gICAgICAgIC5hdHRyKCdkeScsIGNvbmZpZy5oZWlnaHQgLyAyICsgY29uZmlnLm1hcmdpbi50b3ApXG4gICAgICAgIC50ZXh0KHRvb2x0aXBUZXh0KVxuICAgICAgICAudHJhbnNpdGlvbigpXG4gICAgICAgIC5kdXJhdGlvbihjb25maWcudHJhbnNpdGlvbkR1cmF0aW9uKVxuICAgICAgICAuc3R5bGUoJ29wYWNpdHknLCAxKTtcbiAgICB9KVxuICAgIC5vbignbW91c2VvdXQnLCBmdW5jdGlvbiAodGhpcywgZXZlbnQsIGQpIHtcbiAgICAgIHRoaXMuc3R5bGUub3BhY2l0eSA9ICd1bnNldCc7XG4gICAgICBkMy5zZWxlY3RBbGwoJy5jaGFydC10b29sdGlwJylcbiAgICAgICAgLnRyYW5zaXRpb24oKVxuICAgICAgICAuZHVyYXRpb24oY29uZmlnLnRyYW5zaXRpb25EdXJhdGlvbiAvIDIpXG4gICAgICAgIC5zdHlsZSgnb3BhY2l0eScsIDApXG4gICAgICAgIC5yZW1vdmUoKTtcbiAgICB9KTtcblxuICBhcmNzXG4gICAgLmFwcGVuZCgncGF0aCcpXG4gICAgLmF0dHIoJ2ZpbGwnLCAoZCwgaSkgPT4gY29uZmlnLmNvbG9yKGkudG9TdHJpbmcoKSkpXG4gICAgLmF0dHIoJ2QnLCBhcmMpO1xuXG4gIGlmIChjb25maWcuc2hvd0xhYmVscykge1xuICAgIGNvbnN0IGxhYmVsID0gZDNcbiAgICAgIC5hcmM8ZDMuUGllQXJjRGF0dW08SVBpZUNoYXJ0RGF0YU5vZGU+PigpXG4gICAgICAuaW5uZXJSYWRpdXMocmFkaXVzKVxuICAgICAgLm91dGVyUmFkaXVzKHJhZGl1cyArIGNvbmZpZy5sYWJlbFJhZGl1c01vZGlmaWVyKTtcblxuICAgIGNvbnN0IHRleHREeSA9IDU7XG4gICAgYXJjc1xuICAgICAgLmFwcGVuZCgndGV4dCcpXG4gICAgICAuYXR0cignY2xhc3MnLCAnbGVnZW5kJylcbiAgICAgIC5hdHRyKCd0ZXh0LWFuY2hvcicsICdtaWRkbGUnKVxuICAgICAgLmF0dHIoJ2R5JywgdGV4dER5KVxuICAgICAgLmF0dHIoJ3RyYW5zZm9ybScsIGQgPT4gYHRyYW5zbGF0ZSgke2xhYmVsLmNlbnRyb2lkKGQpfSlgKVxuICAgICAgLnN0eWxlKCdmb250LXNpemUnLCAnMTJweCcpXG4gICAgICAudGV4dChkID0+IGQuZGF0YS55KTtcbiAgfVxuXG4gIHJldHVybiBjb25maWc7XG59O1xuIl19
|